[DebianGIS-dev] r812 - in packages: . hdf5 hdf5/branches hdf5/branches/upstream hdf5/branches/upstream/current hdf5/branches/upstream/current/bin hdf5/branches/upstream/current/c++ hdf5/branches/upstream/current/c++/config hdf5/branches/upstream/current/c++/examples hdf5/branches/upstream/current/c++/src hdf5/branches/upstream/current/c++/src/header_files hdf5/branches/upstream/current/c++/test hdf5/branches/upstream/current/config hdf5/branches/upstream/current/config/site-specific hdf5/branches/upstream/current/doc hdf5/branches/upstream/current/doc/html hdf5/branches/upstream/current/doc/html/ADGuide hdf5/branches/upstream/current/doc/html/Graphics hdf5/branches/upstream/current/doc/html/Intro hdf5/branches/upstream/current/doc/html/PSandPDF hdf5/branches/upstream/current/doc/html/TechNotes hdf5/branches/upstream/current/doc/html/TechNotes/TestReview hdf5/branches/upstream/current/doc/html/Tutor hdf5/branches/upstream/current/doc/html/Tutor/Graphics hdf5/branches/upstream/current/doc/html/Tutor/examples hdf5/branches/upstream/current/doc/html/Tutor/examples/java hdf5/branches/upstream/current/doc/html/cpplus hdf5/branches/upstream/current/doc/html/cpplus_RM hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files hdf5/branches/upstream/current/doc/html/ed_libs hdf5/branches/upstream/current/doc/html/ed_styles hdf5/branches/upstream/current/doc/html/fortran hdf5/branches/upstream/current/examples hdf5/branches/upstream/current/fortran hdf5/branches/upstream/current/fortran/config hdf5/branches/upstream/current/fortran/examples hdf5/branches/upstream/current/fortran/src hdf5/branches/upstream/current/fortran/test hdf5/branches/upstream/current/fortran/testpar hdf5/branches/upstream/current/hl hdf5/branches/upstream/current/hl/src hdf5/branches/upstream/current/hl/test hdf5/branches/upstream/current/perform hdf5/branches/upstream/current/release_docs hdf5/branches/upstream/current/src hdf5/branches/upstream/current/test hdf5/branches/upstream/current/testpar hdf5/branches/upstream/current/tools hdf5/branches/upstream/current/tools/gifconv hdf5/branches/upstream/current/tools/h5diff hdf5/branches/upstream/current/tools/h5dump hdf5/branches/upstream/current/tools/h5import hdf5/branches/upstream/current/tools/h5import/testfiles hdf5/branches/upstream/current/tools/h5jam hdf5/branches/upstream/current/tools/h5ls hdf5/branches/upstream/current/tools/h5repack hdf5/branches/upstream/current/tools/lib hdf5/branches/upstream/current/tools/misc hdf5/branches/upstream/current/tools/testfiles hdf5/branches/upstream/current/windows

frankie at alioth.debian.org frankie at alioth.debian.org
Mon May 14 11:46:17 UTC 2007


Author: frankie
Date: 2007-05-14 11:46:09 +0000 (Mon, 14 May 2007)
New Revision: 812

Added:
   packages/hdf5/
   packages/hdf5/branches/
   packages/hdf5/branches/upstream/
   packages/hdf5/branches/upstream/current/
   packages/hdf5/branches/upstream/current/COPYING
   packages/hdf5/branches/upstream/current/MANIFEST
   packages/hdf5/branches/upstream/current/Makefile
   packages/hdf5/branches/upstream/current/Makefile.dist
   packages/hdf5/branches/upstream/current/Makefile.in
   packages/hdf5/branches/upstream/current/README.txt
   packages/hdf5/branches/upstream/current/aclocal.m4
   packages/hdf5/branches/upstream/current/bin/
   packages/hdf5/branches/upstream/current/bin/buildhdf5
   packages/hdf5/branches/upstream/current/bin/chkmanifest
   packages/hdf5/branches/upstream/current/bin/config.guess
   packages/hdf5/branches/upstream/current/bin/config.sub
   packages/hdf5/branches/upstream/current/bin/config_para_ibm_sp.sh
   packages/hdf5/branches/upstream/current/bin/dependencies
   packages/hdf5/branches/upstream/current/bin/deploy
   packages/hdf5/branches/upstream/current/bin/distdep
   packages/hdf5/branches/upstream/current/bin/h5vers
   packages/hdf5/branches/upstream/current/bin/install-sh
   packages/hdf5/branches/upstream/current/bin/iostats
   packages/hdf5/branches/upstream/current/bin/locate_sw
   packages/hdf5/branches/upstream/current/bin/ltmain.sh
   packages/hdf5/branches/upstream/current/bin/mkdirs
   packages/hdf5/branches/upstream/current/bin/release
   packages/hdf5/branches/upstream/current/bin/snapshot
   packages/hdf5/branches/upstream/current/bin/trace
   packages/hdf5/branches/upstream/current/bin/yodconfigure
   packages/hdf5/branches/upstream/current/c++/
   packages/hdf5/branches/upstream/current/c++/Makefile.in
   packages/hdf5/branches/upstream/current/c++/aclocal.m4
   packages/hdf5/branches/upstream/current/c++/config/
   packages/hdf5/branches/upstream/current/c++/config/BlankForm
   packages/hdf5/branches/upstream/current/c++/config/commence.in
   packages/hdf5/branches/upstream/current/c++/config/conclude.in
   packages/hdf5/branches/upstream/current/c++/config/dec-osf5.x
   packages/hdf5/branches/upstream/current/c++/config/depend1.in
   packages/hdf5/branches/upstream/current/c++/config/depend2.in
   packages/hdf5/branches/upstream/current/c++/config/depend3.in
   packages/hdf5/branches/upstream/current/c++/config/depend4.in
   packages/hdf5/branches/upstream/current/c++/config/dependN.in
   packages/hdf5/branches/upstream/current/c++/config/freebsd
   packages/hdf5/branches/upstream/current/c++/config/hpux11.00
   packages/hdf5/branches/upstream/current/c++/config/hpux11.23
   packages/hdf5/branches/upstream/current/c++/config/ia64-linux-gnu
   packages/hdf5/branches/upstream/current/c++/config/irix6.x
   packages/hdf5/branches/upstream/current/c++/config/linux-gnu
   packages/hdf5/branches/upstream/current/c++/config/linux-gnulibc1
   packages/hdf5/branches/upstream/current/c++/config/linux-gnulibc2
   packages/hdf5/branches/upstream/current/c++/config/nv1-cray
   packages/hdf5/branches/upstream/current/c++/config/powerpc-ibm-aix
   packages/hdf5/branches/upstream/current/c++/config/rs6000-ibm-aix4.x
   packages/hdf5/branches/upstream/current/c++/config/solaris2.x
   packages/hdf5/branches/upstream/current/c++/config/sv1-cray
   packages/hdf5/branches/upstream/current/c++/config/unicos10.0.X
   packages/hdf5/branches/upstream/current/c++/config/unicosmk2.0.6.X
   packages/hdf5/branches/upstream/current/c++/configure
   packages/hdf5/branches/upstream/current/c++/configure.in
   packages/hdf5/branches/upstream/current/c++/examples/
   packages/hdf5/branches/upstream/current/c++/examples/Dependencies
   packages/hdf5/branches/upstream/current/c++/examples/Makefile.in
   packages/hdf5/branches/upstream/current/c++/examples/chunks.cpp
   packages/hdf5/branches/upstream/current/c++/examples/compound.cpp
   packages/hdf5/branches/upstream/current/c++/examples/create.cpp
   packages/hdf5/branches/upstream/current/c++/examples/expected.out
   packages/hdf5/branches/upstream/current/c++/examples/extend_ds.cpp
   packages/hdf5/branches/upstream/current/c++/examples/h5group.cpp
   packages/hdf5/branches/upstream/current/c++/examples/readdata.cpp
   packages/hdf5/branches/upstream/current/c++/examples/testexamples.sh
   packages/hdf5/branches/upstream/current/c++/examples/writedata.cpp
   packages/hdf5/branches/upstream/current/c++/src/
   packages/hdf5/branches/upstream/current/c++/src/Dependencies
   packages/hdf5/branches/upstream/current/c++/src/H5AbstractDs.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5AbstractDs.h
   packages/hdf5/branches/upstream/current/c++/src/H5Alltypes.h
   packages/hdf5/branches/upstream/current/c++/src/H5ArrayType.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5ArrayType.h
   packages/hdf5/branches/upstream/current/c++/src/H5AtomType.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5AtomType.h
   packages/hdf5/branches/upstream/current/c++/src/H5Attribute.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5Attribute.h
   packages/hdf5/branches/upstream/current/c++/src/H5Classes.h
   packages/hdf5/branches/upstream/current/c++/src/H5CommonFG.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5CommonFG.h
   packages/hdf5/branches/upstream/current/c++/src/H5CompType.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5CompType.h
   packages/hdf5/branches/upstream/current/c++/src/H5Cpp.h
   packages/hdf5/branches/upstream/current/c++/src/H5CppDoc.h
   packages/hdf5/branches/upstream/current/c++/src/H5DataSet.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5DataSet.h
   packages/hdf5/branches/upstream/current/c++/src/H5DataSpace.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5DataSpace.h
   packages/hdf5/branches/upstream/current/c++/src/H5DataType.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5DataType.h
   packages/hdf5/branches/upstream/current/c++/src/H5DcreatProp.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5DcreatProp.h
   packages/hdf5/branches/upstream/current/c++/src/H5DxferProp.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5DxferProp.h
   packages/hdf5/branches/upstream/current/c++/src/H5EnumType.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5EnumType.h
   packages/hdf5/branches/upstream/current/c++/src/H5Exception.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5Exception.h
   packages/hdf5/branches/upstream/current/c++/src/H5FaccProp.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5FaccProp.h
   packages/hdf5/branches/upstream/current/c++/src/H5FcreatProp.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5FcreatProp.h
   packages/hdf5/branches/upstream/current/c++/src/H5File.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5File.h
   packages/hdf5/branches/upstream/current/c++/src/H5FloatType.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5FloatType.h
   packages/hdf5/branches/upstream/current/c++/src/H5Group.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5Group.h
   packages/hdf5/branches/upstream/current/c++/src/H5IdComponent.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5IdComponent.h
   packages/hdf5/branches/upstream/current/c++/src/H5Include.h
   packages/hdf5/branches/upstream/current/c++/src/H5IntType.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5IntType.h
   packages/hdf5/branches/upstream/current/c++/src/H5Library.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5Library.h
   packages/hdf5/branches/upstream/current/c++/src/H5Object.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5Object.h
   packages/hdf5/branches/upstream/current/c++/src/H5PredType.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5PredType.h
   packages/hdf5/branches/upstream/current/c++/src/H5PropList.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5PropList.h
   packages/hdf5/branches/upstream/current/c++/src/H5StrType.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5StrType.h
   packages/hdf5/branches/upstream/current/c++/src/H5VarLenType.cpp
   packages/hdf5/branches/upstream/current/c++/src/H5VarLenType.h
   packages/hdf5/branches/upstream/current/c++/src/Makefile.in
   packages/hdf5/branches/upstream/current/c++/src/RM_stylesheet.css
   packages/hdf5/branches/upstream/current/c++/src/cpp_doc_config
   packages/hdf5/branches/upstream/current/c++/src/h5c++.in
   packages/hdf5/branches/upstream/current/c++/src/header.html
   packages/hdf5/branches/upstream/current/c++/src/header_files/
   packages/hdf5/branches/upstream/current/c++/src/header_files/filelist.xml
   packages/hdf5/branches/upstream/current/c++/src/header_files/image001.jpg
   packages/hdf5/branches/upstream/current/c++/src/header_files/image002.jpg
   packages/hdf5/branches/upstream/current/c++/test/
   packages/hdf5/branches/upstream/current/c++/test/Dependencies
   packages/hdf5/branches/upstream/current/c++/test/Makefile.in
   packages/hdf5/branches/upstream/current/c++/test/dsets.cpp
   packages/hdf5/branches/upstream/current/c++/test/h5cpputil.cpp
   packages/hdf5/branches/upstream/current/c++/test/h5cpputil.h
   packages/hdf5/branches/upstream/current/c++/test/testhdf5.cpp
   packages/hdf5/branches/upstream/current/c++/test/tfile.cpp
   packages/hdf5/branches/upstream/current/c++/test/th5s.cpp
   packages/hdf5/branches/upstream/current/c++/test/th5s.h5
   packages/hdf5/branches/upstream/current/config/
   packages/hdf5/branches/upstream/current/config/BlankForm
   packages/hdf5/branches/upstream/current/config/commence.in
   packages/hdf5/branches/upstream/current/config/conclude.in
   packages/hdf5/branches/upstream/current/config/dec-flags
   packages/hdf5/branches/upstream/current/config/dec-osf4.x
   packages/hdf5/branches/upstream/current/config/dec-osf5.x
   packages/hdf5/branches/upstream/current/config/depend1.in
   packages/hdf5/branches/upstream/current/config/depend2.in
   packages/hdf5/branches/upstream/current/config/depend3.in
   packages/hdf5/branches/upstream/current/config/depend4.in
   packages/hdf5/branches/upstream/current/config/dependN.in
   packages/hdf5/branches/upstream/current/config/freebsd
   packages/hdf5/branches/upstream/current/config/gnu-flags
   packages/hdf5/branches/upstream/current/config/hpux10.20
   packages/hdf5/branches/upstream/current/config/hpux11.00
   packages/hdf5/branches/upstream/current/config/hpux11.23
   packages/hdf5/branches/upstream/current/config/hpux9.03
   packages/hdf5/branches/upstream/current/config/i386-pc-cygwin32
   packages/hdf5/branches/upstream/current/config/i686-pc-cygwin
   packages/hdf5/branches/upstream/current/config/ia64-linux-gnu
   packages/hdf5/branches/upstream/current/config/intel-flags
   packages/hdf5/branches/upstream/current/config/intel-osf1
   packages/hdf5/branches/upstream/current/config/irix5.x
   packages/hdf5/branches/upstream/current/config/irix6.x
   packages/hdf5/branches/upstream/current/config/linux-gnu
   packages/hdf5/branches/upstream/current/config/linux-gnuaout
   packages/hdf5/branches/upstream/current/config/linux-gnulibc1
   packages/hdf5/branches/upstream/current/config/linux-gnulibc2
   packages/hdf5/branches/upstream/current/config/mpich
   packages/hdf5/branches/upstream/current/config/nv1-cray
   packages/hdf5/branches/upstream/current/config/pgi-flags
   packages/hdf5/branches/upstream/current/config/powerpc-apple
   packages/hdf5/branches/upstream/current/config/powerpc-ibm-aix4.x
   packages/hdf5/branches/upstream/current/config/powerpc-ibm-aix5.x
   packages/hdf5/branches/upstream/current/config/powerpc-ibm-linux-gnu
   packages/hdf5/branches/upstream/current/config/rs6000-ibm-aix4.x
   packages/hdf5/branches/upstream/current/config/site-specific/
   packages/hdf5/branches/upstream/current/config/site-specific/BlankForm
   packages/hdf5/branches/upstream/current/config/solaris2.x
   packages/hdf5/branches/upstream/current/config/sv1-cray
   packages/hdf5/branches/upstream/current/config/unicos
   packages/hdf5/branches/upstream/current/config/unicos10.0.X
   packages/hdf5/branches/upstream/current/config/unicosmk
   packages/hdf5/branches/upstream/current/config/unicosmk2.0.5.X
   packages/hdf5/branches/upstream/current/config/unicosmk2.0.6.X
   packages/hdf5/branches/upstream/current/config/unicosmk2.0.X
   packages/hdf5/branches/upstream/current/configure
   packages/hdf5/branches/upstream/current/configure.in
   packages/hdf5/branches/upstream/current/doc/
   packages/hdf5/branches/upstream/current/doc/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/
   packages/hdf5/branches/upstream/current/doc/html/ADGuide.html
   packages/hdf5/branches/upstream/current/doc/html/ADGuide/
   packages/hdf5/branches/upstream/current/doc/html/ADGuide/Changes.html
   packages/hdf5/branches/upstream/current/doc/html/ADGuide/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/ADGuide/H4toH5Mapping.pdf
   packages/hdf5/branches/upstream/current/doc/html/ADGuide/HISTORY.txt
   packages/hdf5/branches/upstream/current/doc/html/ADGuide/ImageSpec.html
   packages/hdf5/branches/upstream/current/doc/html/ADGuide/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/ADGuide/PaletteExample1.gif
   packages/hdf5/branches/upstream/current/doc/html/ADGuide/Palettes.fm.anc.gif
   packages/hdf5/branches/upstream/current/doc/html/ADGuide/RELEASE.txt
   packages/hdf5/branches/upstream/current/doc/html/Attributes.html
   packages/hdf5/branches/upstream/current/doc/html/Big.html
   packages/hdf5/branches/upstream/current/doc/html/Caching.html
   packages/hdf5/branches/upstream/current/doc/html/Chunk_f1.gif
   packages/hdf5/branches/upstream/current/doc/html/Chunk_f2.gif
   packages/hdf5/branches/upstream/current/doc/html/Chunk_f3.gif
   packages/hdf5/branches/upstream/current/doc/html/Chunk_f4.gif
   packages/hdf5/branches/upstream/current/doc/html/Chunk_f5.gif
   packages/hdf5/branches/upstream/current/doc/html/Chunk_f6.gif
   packages/hdf5/branches/upstream/current/doc/html/Chunking.html
   packages/hdf5/branches/upstream/current/doc/html/Coding.html
   packages/hdf5/branches/upstream/current/doc/html/Copyright.html
   packages/hdf5/branches/upstream/current/doc/html/Datasets.html
   packages/hdf5/branches/upstream/current/doc/html/Dataspaces.html
   packages/hdf5/branches/upstream/current/doc/html/Datatypes.html
   packages/hdf5/branches/upstream/current/doc/html/DatatypesEnum.html
   packages/hdf5/branches/upstream/current/doc/html/Debugging.html
   packages/hdf5/branches/upstream/current/doc/html/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/EnumMap.gif
   packages/hdf5/branches/upstream/current/doc/html/Environment.html
   packages/hdf5/branches/upstream/current/doc/html/Errors.html
   packages/hdf5/branches/upstream/current/doc/html/FF-IH_FileGroup.gif
   packages/hdf5/branches/upstream/current/doc/html/FF-IH_FileObject.gif
   packages/hdf5/branches/upstream/current/doc/html/Files.html
   packages/hdf5/branches/upstream/current/doc/html/Filters.html
   packages/hdf5/branches/upstream/current/doc/html/Glossary.html
   packages/hdf5/branches/upstream/current/doc/html/Graphics/
   packages/hdf5/branches/upstream/current/doc/html/Graphics/C++.gif
   packages/hdf5/branches/upstream/current/doc/html/Graphics/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/Graphics/FORTRAN.gif
   packages/hdf5/branches/upstream/current/doc/html/Graphics/Java.gif
   packages/hdf5/branches/upstream/current/doc/html/Graphics/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/Graphics/OtherAPIs.gif
   packages/hdf5/branches/upstream/current/doc/html/Groups.html
   packages/hdf5/branches/upstream/current/doc/html/H5.api_map.html
   packages/hdf5/branches/upstream/current/doc/html/H5.format.html
   packages/hdf5/branches/upstream/current/doc/html/H5.intro.html
   packages/hdf5/branches/upstream/current/doc/html/H5.sample_code.html
   packages/hdf5/branches/upstream/current/doc/html/H5.user.PrintGen.html
   packages/hdf5/branches/upstream/current/doc/html/H5.user.PrintTpg.html
   packages/hdf5/branches/upstream/current/doc/html/H5.user.html
   packages/hdf5/branches/upstream/current/doc/html/IH_map1.gif
   packages/hdf5/branches/upstream/current/doc/html/IH_map2.gif
   packages/hdf5/branches/upstream/current/doc/html/IH_map3.gif
   packages/hdf5/branches/upstream/current/doc/html/IH_map4.gif
   packages/hdf5/branches/upstream/current/doc/html/IH_mapFoot.gif
   packages/hdf5/branches/upstream/current/doc/html/IH_mapHead.gif
   packages/hdf5/branches/upstream/current/doc/html/IOPipe.html
   packages/hdf5/branches/upstream/current/doc/html/Intro/
   packages/hdf5/branches/upstream/current/doc/html/Intro/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/Intro/IntroExamples.html
   packages/hdf5/branches/upstream/current/doc/html/Intro/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/MountingFiles.html
   packages/hdf5/branches/upstream/current/doc/html/NCSAfooterlogo.gif
   packages/hdf5/branches/upstream/current/doc/html/PSandPDF/
   packages/hdf5/branches/upstream/current/doc/html/PSandPDF/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/PSandPDF/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/Performance.html
   packages/hdf5/branches/upstream/current/doc/html/PredefDTypes.html
   packages/hdf5/branches/upstream/current/doc/html/Properties.html
   packages/hdf5/branches/upstream/current/doc/html/RM_H5.html
   packages/hdf5/branches/upstream/current/doc/html/RM_H5A.html
   packages/hdf5/branches/upstream/current/doc/html/RM_H5D.html
   packages/hdf5/branches/upstream/current/doc/html/RM_H5E.html
   packages/hdf5/branches/upstream/current/doc/html/RM_H5F.html
   packages/hdf5/branches/upstream/current/doc/html/RM_H5Front.html
   packages/hdf5/branches/upstream/current/doc/html/RM_H5G.html
   packages/hdf5/branches/upstream/current/doc/html/RM_H5I.html
   packages/hdf5/branches/upstream/current/doc/html/RM_H5P.html
   packages/hdf5/branches/upstream/current/doc/html/RM_H5R.html
   packages/hdf5/branches/upstream/current/doc/html/RM_H5S.html
   packages/hdf5/branches/upstream/current/doc/html/RM_H5T.html
   packages/hdf5/branches/upstream/current/doc/html/RM_H5Z.html
   packages/hdf5/branches/upstream/current/doc/html/References.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/Basic_perform.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/BigDataSmMach.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_1000x1000.gif
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_250x250.gif
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_499x499.gif
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_5000x1000.gif
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_500x500.gif
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_p1.gif
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChunkingStudy.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/CodeReview.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/Daily_Test_Explained.htm
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/ExternalFiles.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/FreeLists.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/H4-H5Compat.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/HeapMgmt.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/IOPipe.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/LibMaint.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/MemoryMgmt.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/MoveDStruct.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/NamingScheme.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/ObjectHeader.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/RawDStorage.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/ReservedFileSpace.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/SWControls.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/SymbolTables.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/TestReview.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/TestReview/
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/TestReview/H5Dget_offset.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/TestReview/H5Tget_native_type.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/ThreadSafeLibrary.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/VFL.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/VFLfunc.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/Version.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/openmp-hdf5.c
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/openmp-hdf5.html
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe1.gif
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe2.gif
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe3.gif
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe4.gif
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe5.gif
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/shuffling-algorithm-report.pdf
   packages/hdf5/branches/upstream/current/doc/html/TechNotes/version.gif
   packages/hdf5/branches/upstream/current/doc/html/Tools.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Contents.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsAdd.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsAdv.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsFull.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsIntro.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Copyright.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/AddInfo.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/AdvTopics.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/BLANK.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/ChunkExt.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CompDTypes.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Copy.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateAttr.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateDset1.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateDset2.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateFile.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateGrp1.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateGrp2.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Examples.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/FileOrg.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/FullTOC1.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/FullTOC2.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Glossary.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/H5API.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Intro.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/IntroTopics.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Iterate.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/MountFile.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Quiz.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/QuizAns.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/RdWrDataset.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/RefObject.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/RefRegion.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/References.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/SelectElemCp.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/SelectHyp.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/TOC.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/TOCFull.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/TOCShort.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/TitlePg.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Utilities.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/answers.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/api.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/bighdf2sp.JPG
   packages/hdf5/branches/upstream/current/doc/html/Tutor/compound.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/crtatt.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/crtdat.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/crtfile.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/crtgrp.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/crtgrpar.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/crtgrpd.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/attrexample.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/chunk.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/compound.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/dsetexample.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/fileexample.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/groupexample.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/grpdsetexample.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/grpit.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/grpsexample.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_compound.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_copy.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtatt.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtdat.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtfile.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtgrp.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtgrpar.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtgrpd.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_extend.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_hyperslab.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_iterate.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_mount.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_rdwt.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_read.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2objr.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2objw.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2regr.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2regw.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_reference.c
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/hyperslab.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Compound.java
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Copy.java
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateAttribute.java
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateDataset.java
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateFile.java
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateFileInput.java
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateGroup.java
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateGroupAR.java
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateGroupDataset.java
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/DatasetRdWt.java
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/HyperSlab.java
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Makefile
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/README
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/readme.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCompound.sh
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCompound.sh.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCopy.sh
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCopy.sh.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateAttribute.sh
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateAttribute.sh.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateDataset.sh
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateDataset.sh.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFile.sh
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFile.sh.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFileInput.sh
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFileInput.sh.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroup.sh
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroup.sh.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupAR.sh
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupAR.sh.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupDataset.sh
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupDataset.sh.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runDatasetRdWt.sh
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runDatasetRdWt.sh.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runHyperSlab.sh
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runHyperSlab.sh.in
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/mountexample.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/refobjexample.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/refregexample.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/rwdsetexample.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/selectele.f90
   packages/hdf5/branches/upstream/current/doc/html/Tutor/extend.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/fileorg.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/footer-ncsalogo.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/glossary.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/img001.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/img002.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/img003.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/img004.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/img005.gif
   packages/hdf5/branches/upstream/current/doc/html/Tutor/index.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/intro.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/iterate.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/mount.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/property.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/questions.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/rdwt.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/references.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/reftoobj.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/reftoreg.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/select.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/selectc.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/software.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/title.html
   packages/hdf5/branches/upstream/current/doc/html/Tutor/util.html
   packages/hdf5/branches/upstream/current/doc/html/Version.html
   packages/hdf5/branches/upstream/current/doc/html/chunk1.gif
   packages/hdf5/branches/upstream/current/doc/html/compat.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus/
   packages/hdf5/branches/upstream/current/doc/html/cpplus/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/cpplus/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AbstractDs_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AbstractDs_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AbstractDs_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Alltypes_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Alltypes_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5ArrayType_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5ArrayType_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5ArrayType_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AtomType_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AtomType_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AtomType_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Attribute_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Attribute_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Attribute_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Classes_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Classes_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CommonFG_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CommonFG_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CommonFG_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CompType_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CompType_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CompType_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CppDoc_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CppDoc_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Cpp_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Cpp_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSet_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSet_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSet_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSpace_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSpace_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSpace_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataType_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataType_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataType_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DcreatProp_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DcreatProp_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DcreatProp_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DxferProp_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DxferProp_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DxferProp_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5EnumType_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5EnumType_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5EnumType_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Exception_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Exception_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Exception_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FaccProp_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FaccProp_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FaccProp_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FcreatProp_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FcreatProp_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FcreatProp_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5File_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5File_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5File_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FloatType_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FloatType_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FloatType_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Group_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Group_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Group_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IdComponent_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IdComponent_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IdComponent_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Include_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Include_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IntType_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IntType_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IntType_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Library_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Library_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Library_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Object_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Object_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Object_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PredType_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PredType_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PredType_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PropList_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PropList_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PropList_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5StrType_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5StrType_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5StrType_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5VarLenType_8cpp.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5VarLenType_8h-source.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5VarLenType_8h.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/NCSAlogo.jpg
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/RM_stylesheet.css
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/annotated.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/chunks_8cpp-example.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AbstractDs-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AbstractDs.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AbstractDs.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ArrayType-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ArrayType.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ArrayType.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AtomType-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AtomType.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AtomType.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Attribute-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Attribute.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Attribute.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AttributeIException-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AttributeIException.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AttributeIException.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CommonFG-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CommonFG.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CommonFG.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CompType-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CompType.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CompType.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetCreatPropList-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetCreatPropList.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetCreatPropList.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetMemXferPropList-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetMemXferPropList.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetMemXferPropList.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSet-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSet.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSet.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSetIException-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSetIException.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSetIException.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpace-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpace.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpace.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpaceIException-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpaceIException.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpaceIException.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataType-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataType.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataType.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataTypeIException-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataTypeIException.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataTypeIException.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1EnumType-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1EnumType.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1EnumType.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Exception-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Exception.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Exception.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileAccPropList-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileAccPropList.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileAccPropList.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileCreatPropList-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileCreatPropList.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileCreatPropList.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileIException-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileIException.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileIException.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FloatType-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FloatType.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FloatType.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Group-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Group.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Group.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1GroupIException-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1GroupIException.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1GroupIException.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5File-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5File.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5File.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Library-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Library.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Object-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Object.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Object.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponent-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponent.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponent.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponentException-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponentException.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponentException.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IntType-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IntType.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IntType.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1LibraryIException-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1LibraryIException.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1LibraryIException.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PredType-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PredType.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PredType.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropList-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropList.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropList.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropListIException-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropListIException.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropListIException.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ReferenceException-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ReferenceException.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ReferenceException.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1StrType-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1StrType.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1StrType.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1VarLenType-members.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1VarLenType.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1VarLenType.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/compound_8cpp-example.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/create_8cpp-example.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/doxygen.css
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/doxygen.png
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/examples.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/extend__ds_8cpp-example.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/files.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x63.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x64.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x65.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x66.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x67.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x68.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x69.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6c.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6d.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6e.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6f.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x70.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x72.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x73.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x74.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x75.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x76.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x77.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x7e.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x63.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x64.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x65.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x66.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x67.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x68.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x69.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6c.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6d.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6e.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6f.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x70.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x72.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x73.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x74.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x75.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x76.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x77.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x7e.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_vars.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/h5group_8cpp-example.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/filelist.xml
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/image001.jpg
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/image002.jpg
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/hierarchy.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/index.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/namespaceH5.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/namespaces.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/namespacestd.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/readdata_8cpp-example.html
   packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/writedata_8cpp-example.html
   packages/hdf5/branches/upstream/current/doc/html/dataset_p1.gif
   packages/hdf5/branches/upstream/current/doc/html/ddl.html
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/Footer.lbi
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_ADevG.lbi
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_Common.lbi
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_Intro.lbi
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_RM.lbi
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_TechN.lbi
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_UG.lbi
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Format.lbi
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Gen.lbi
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Index.lbi
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Intro.lbi
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_RM.lbi
   packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_UG.lbi
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/FormatElect.css
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/FormatPrint.css
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/GenElect.css
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/GenPrint.css
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/IndexElect.css
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/IndexPrint.css
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/IntroElect.css
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/IntroPrint.css
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/RMelect.css
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/RMprint.css
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/UGelect.css
   packages/hdf5/branches/upstream/current/doc/html/ed_styles/UGprint.css
   packages/hdf5/branches/upstream/current/doc/html/extern1.gif
   packages/hdf5/branches/upstream/current/doc/html/extern2.gif
   packages/hdf5/branches/upstream/current/doc/html/fortran/
   packages/hdf5/branches/upstream/current/doc/html/fortran/Dependencies
   packages/hdf5/branches/upstream/current/doc/html/fortran/F90Flags.html
   packages/hdf5/branches/upstream/current/doc/html/fortran/F90UserNotes.html
   packages/hdf5/branches/upstream/current/doc/html/fortran/Makefile.in
   packages/hdf5/branches/upstream/current/doc/html/group_p1.gif
   packages/hdf5/branches/upstream/current/doc/html/group_p2.gif
   packages/hdf5/branches/upstream/current/doc/html/group_p3.gif
   packages/hdf5/branches/upstream/current/doc/html/h5s.examples
   packages/hdf5/branches/upstream/current/doc/html/hdf2.jpg
   packages/hdf5/branches/upstream/current/doc/html/index.html
   packages/hdf5/branches/upstream/current/doc/html/ph5design.html
   packages/hdf5/branches/upstream/current/doc/html/ph5example.c
   packages/hdf5/branches/upstream/current/doc/html/ph5implement.txt
   packages/hdf5/branches/upstream/current/doc/html/pipe1.gif
   packages/hdf5/branches/upstream/current/doc/html/pipe2.gif
   packages/hdf5/branches/upstream/current/doc/html/pipe3.gif
   packages/hdf5/branches/upstream/current/doc/html/pipe4.gif
   packages/hdf5/branches/upstream/current/doc/html/pipe5.gif
   packages/hdf5/branches/upstream/current/doc/html/version.gif
   packages/hdf5/branches/upstream/current/examples/
   packages/hdf5/branches/upstream/current/examples/Attributes.txt
   packages/hdf5/branches/upstream/current/examples/Dependencies
   packages/hdf5/branches/upstream/current/examples/Makefile.in
   packages/hdf5/branches/upstream/current/examples/h5_attribute.c
   packages/hdf5/branches/upstream/current/examples/h5_chunk_read.c
   packages/hdf5/branches/upstream/current/examples/h5_compound.c
   packages/hdf5/branches/upstream/current/examples/h5_drivers.c
   packages/hdf5/branches/upstream/current/examples/h5_extend_write.c
   packages/hdf5/branches/upstream/current/examples/h5_group.c
   packages/hdf5/branches/upstream/current/examples/h5_mount.c
   packages/hdf5/branches/upstream/current/examples/h5_read.c
   packages/hdf5/branches/upstream/current/examples/h5_reference.c
   packages/hdf5/branches/upstream/current/examples/h5_select.c
   packages/hdf5/branches/upstream/current/examples/h5_write.c
   packages/hdf5/branches/upstream/current/examples/ph5example.c
   packages/hdf5/branches/upstream/current/fortran/
   packages/hdf5/branches/upstream/current/fortran/Makefile.dist
   packages/hdf5/branches/upstream/current/fortran/Makefile.in
   packages/hdf5/branches/upstream/current/fortran/aclocal.m4
   packages/hdf5/branches/upstream/current/fortran/acsite.m4
   packages/hdf5/branches/upstream/current/fortran/config/
   packages/hdf5/branches/upstream/current/fortran/config/BlankForm
   packages/hdf5/branches/upstream/current/fortran/config/commence.in
   packages/hdf5/branches/upstream/current/fortran/config/conclude.in
   packages/hdf5/branches/upstream/current/fortran/config/dec-flags
   packages/hdf5/branches/upstream/current/fortran/config/dec-osf4.x
   packages/hdf5/branches/upstream/current/fortran/config/dec-osf5.x
   packages/hdf5/branches/upstream/current/fortran/config/depend
   packages/hdf5/branches/upstream/current/fortran/config/depend1.in
   packages/hdf5/branches/upstream/current/fortran/config/depend2.in
   packages/hdf5/branches/upstream/current/fortran/config/depend3.in
   packages/hdf5/branches/upstream/current/fortran/config/depend4.in
   packages/hdf5/branches/upstream/current/fortran/config/dependN.in
   packages/hdf5/branches/upstream/current/fortran/config/freebsd
   packages/hdf5/branches/upstream/current/fortran/config/gnu-flags
   packages/hdf5/branches/upstream/current/fortran/config/hpux10.20
   packages/hdf5/branches/upstream/current/fortran/config/hpux11.00
   packages/hdf5/branches/upstream/current/fortran/config/hpux11.23
   packages/hdf5/branches/upstream/current/fortran/config/hpux9.03
   packages/hdf5/branches/upstream/current/fortran/config/i386-pc-cygwin32
   packages/hdf5/branches/upstream/current/fortran/config/ia64-linux-gnu
   packages/hdf5/branches/upstream/current/fortran/config/intel-fflags
   packages/hdf5/branches/upstream/current/fortran/config/intel-flags
   packages/hdf5/branches/upstream/current/fortran/config/intel-osf1
   packages/hdf5/branches/upstream/current/fortran/config/irix5.x
   packages/hdf5/branches/upstream/current/fortran/config/irix6.x
   packages/hdf5/branches/upstream/current/fortran/config/linux-gnu
   packages/hdf5/branches/upstream/current/fortran/config/linux-gnuaout
   packages/hdf5/branches/upstream/current/fortran/config/linux-gnulibc1
   packages/hdf5/branches/upstream/current/fortran/config/linux-gnulibc2
   packages/hdf5/branches/upstream/current/fortran/config/nv1-cray
   packages/hdf5/branches/upstream/current/fortran/config/pgi-fflags
   packages/hdf5/branches/upstream/current/fortran/config/pgi-flags
   packages/hdf5/branches/upstream/current/fortran/config/powerpc-apple
   packages/hdf5/branches/upstream/current/fortran/config/powerpc-ibm-aix4.x
   packages/hdf5/branches/upstream/current/fortran/config/powerpc-ibm-aix5.x
   packages/hdf5/branches/upstream/current/fortran/config/rs6000-ibm-aix4.x
   packages/hdf5/branches/upstream/current/fortran/config/solaris2.x
   packages/hdf5/branches/upstream/current/fortran/config/sv1-cray
   packages/hdf5/branches/upstream/current/fortran/config/unicos
   packages/hdf5/branches/upstream/current/fortran/config/unicos10.0.X
   packages/hdf5/branches/upstream/current/fortran/config/unicosmk
   packages/hdf5/branches/upstream/current/fortran/config/unicosmk2.0.5.X
   packages/hdf5/branches/upstream/current/fortran/config/unicosmk2.0.6.X
   packages/hdf5/branches/upstream/current/fortran/config/unicosmk2.0.X
   packages/hdf5/branches/upstream/current/fortran/configure
   packages/hdf5/branches/upstream/current/fortran/configure.in
   packages/hdf5/branches/upstream/current/fortran/examples/
   packages/hdf5/branches/upstream/current/fortran/examples/Dependencies
   packages/hdf5/branches/upstream/current/fortran/examples/Makefile.in
   packages/hdf5/branches/upstream/current/fortran/examples/attrexample.f90
   packages/hdf5/branches/upstream/current/fortran/examples/compound.f90
   packages/hdf5/branches/upstream/current/fortran/examples/dsetexample.f90
   packages/hdf5/branches/upstream/current/fortran/examples/fileexample.f90
   packages/hdf5/branches/upstream/current/fortran/examples/groupexample.f90
   packages/hdf5/branches/upstream/current/fortran/examples/grpdsetexample.f90
   packages/hdf5/branches/upstream/current/fortran/examples/grpit.f90
   packages/hdf5/branches/upstream/current/fortran/examples/grpsexample.f90
   packages/hdf5/branches/upstream/current/fortran/examples/hyperslab.f90
   packages/hdf5/branches/upstream/current/fortran/examples/mountexample.f90
   packages/hdf5/branches/upstream/current/fortran/examples/refobjexample.f90
   packages/hdf5/branches/upstream/current/fortran/examples/refregexample.f90
   packages/hdf5/branches/upstream/current/fortran/examples/rwdsetexample.f90
   packages/hdf5/branches/upstream/current/fortran/examples/selectele.f90
   packages/hdf5/branches/upstream/current/fortran/src/
   packages/hdf5/branches/upstream/current/fortran/src/Dependencies
   packages/hdf5/branches/upstream/current/fortran/src/H5Af.c
   packages/hdf5/branches/upstream/current/fortran/src/H5Aff.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5Df.c
   packages/hdf5/branches/upstream/current/fortran/src/H5Dff.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5Ef.c
   packages/hdf5/branches/upstream/current/fortran/src/H5Eff.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5FDmpiof.c
   packages/hdf5/branches/upstream/current/fortran/src/H5FDmpioff.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5Ff.c
   packages/hdf5/branches/upstream/current/fortran/src/H5Fff.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5Gf.c
   packages/hdf5/branches/upstream/current/fortran/src/H5Gff.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5If.c
   packages/hdf5/branches/upstream/current/fortran/src/H5Iff.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5Pf.c
   packages/hdf5/branches/upstream/current/fortran/src/H5Pff.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5Rf.c
   packages/hdf5/branches/upstream/current/fortran/src/H5Rff.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5Sf.c
   packages/hdf5/branches/upstream/current/fortran/src/H5Sff.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5Tf.c
   packages/hdf5/branches/upstream/current/fortran/src/H5Tff.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5Zf.c
   packages/hdf5/branches/upstream/current/fortran/src/H5Zff.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5_f.c
   packages/hdf5/branches/upstream/current/fortran/src/H5_ff.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5config_fortran.h.in
   packages/hdf5/branches/upstream/current/fortran/src/H5f90.h
   packages/hdf5/branches/upstream/current/fortran/src/H5f90global.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5f90i.h
   packages/hdf5/branches/upstream/current/fortran/src/H5f90kit.c
   packages/hdf5/branches/upstream/current/fortran/src/H5f90proto.h
   packages/hdf5/branches/upstream/current/fortran/src/H5fortran_flags.f90
   packages/hdf5/branches/upstream/current/fortran/src/H5fortran_types.f90.in
   packages/hdf5/branches/upstream/current/fortran/src/HDF5.f90
   packages/hdf5/branches/upstream/current/fortran/src/HDF5mpio.f90
   packages/hdf5/branches/upstream/current/fortran/src/Makefile.in
   packages/hdf5/branches/upstream/current/fortran/src/README
   packages/hdf5/branches/upstream/current/fortran/src/h5fc.in
   packages/hdf5/branches/upstream/current/fortran/src/libhdf5_fortran.settings.in
   packages/hdf5/branches/upstream/current/fortran/test/
   packages/hdf5/branches/upstream/current/fortran/test/Dependencies
   packages/hdf5/branches/upstream/current/fortran/test/Makefile.in
   packages/hdf5/branches/upstream/current/fortran/test/fflush1.f90
   packages/hdf5/branches/upstream/current/fortran/test/fflush2.f90
   packages/hdf5/branches/upstream/current/fortran/test/fortranlib_test.f90
   packages/hdf5/branches/upstream/current/fortran/test/t.c
   packages/hdf5/branches/upstream/current/fortran/test/t.h
   packages/hdf5/branches/upstream/current/fortran/test/tH5A.f90
   packages/hdf5/branches/upstream/current/fortran/test/tH5D.f90
   packages/hdf5/branches/upstream/current/fortran/test/tH5E.f90
   packages/hdf5/branches/upstream/current/fortran/test/tH5F.f90
   packages/hdf5/branches/upstream/current/fortran/test/tH5G.f90
   packages/hdf5/branches/upstream/current/fortran/test/tH5I.f90
   packages/hdf5/branches/upstream/current/fortran/test/tH5P.f90
   packages/hdf5/branches/upstream/current/fortran/test/tH5R.f90
   packages/hdf5/branches/upstream/current/fortran/test/tH5S.f90
   packages/hdf5/branches/upstream/current/fortran/test/tH5Sselect.f90
   packages/hdf5/branches/upstream/current/fortran/test/tH5T.f90
   packages/hdf5/branches/upstream/current/fortran/test/tH5VL.f90
   packages/hdf5/branches/upstream/current/fortran/test/tH5Z.f90
   packages/hdf5/branches/upstream/current/fortran/test/tf.f90
   packages/hdf5/branches/upstream/current/fortran/testpar/
   packages/hdf5/branches/upstream/current/fortran/testpar/Dependencies
   packages/hdf5/branches/upstream/current/fortran/testpar/Makefile.in
   packages/hdf5/branches/upstream/current/fortran/testpar/ptesthdf5_fortran.f90
   packages/hdf5/branches/upstream/current/fortran/testpar/thdf5.f90
   packages/hdf5/branches/upstream/current/fortran/testpar/thyperslab_wr.f90
   packages/hdf5/branches/upstream/current/hl/
   packages/hdf5/branches/upstream/current/hl/Makefile.in
   packages/hdf5/branches/upstream/current/hl/src/
   packages/hdf5/branches/upstream/current/hl/src/Dependencies
   packages/hdf5/branches/upstream/current/hl/src/H5IM.c
   packages/hdf5/branches/upstream/current/hl/src/H5IM.h
   packages/hdf5/branches/upstream/current/hl/src/H5LT.c
   packages/hdf5/branches/upstream/current/hl/src/H5LT.h
   packages/hdf5/branches/upstream/current/hl/src/H5TA.c
   packages/hdf5/branches/upstream/current/hl/src/H5TA.h
   packages/hdf5/branches/upstream/current/hl/src/Makefile.in
   packages/hdf5/branches/upstream/current/hl/test/
   packages/hdf5/branches/upstream/current/hl/test/Dependencies
   packages/hdf5/branches/upstream/current/hl/test/Makefile.in
   packages/hdf5/branches/upstream/current/hl/test/test_image.c
   packages/hdf5/branches/upstream/current/hl/test/test_lite.c
   packages/hdf5/branches/upstream/current/hl/test/test_table.c
   packages/hdf5/branches/upstream/current/hl/test/test_table_be.hdf5
   packages/hdf5/branches/upstream/current/hl/test/test_table_cray.hdf5
   packages/hdf5/branches/upstream/current/hl/test/test_table_le.hdf5
   packages/hdf5/branches/upstream/current/perform/
   packages/hdf5/branches/upstream/current/perform/Dependencies
   packages/hdf5/branches/upstream/current/perform/Makefile.in
   packages/hdf5/branches/upstream/current/perform/benchpar.c
   packages/hdf5/branches/upstream/current/perform/chunk.c
   packages/hdf5/branches/upstream/current/perform/gen_report.pl
   packages/hdf5/branches/upstream/current/perform/iopipe.c
   packages/hdf5/branches/upstream/current/perform/mpi-perf.c
   packages/hdf5/branches/upstream/current/perform/overhead.c
   packages/hdf5/branches/upstream/current/perform/perf.c
   packages/hdf5/branches/upstream/current/perform/perf_meta.c
   packages/hdf5/branches/upstream/current/perform/pio_engine.c
   packages/hdf5/branches/upstream/current/perform/pio_perf.c
   packages/hdf5/branches/upstream/current/perform/pio_perf.h
   packages/hdf5/branches/upstream/current/perform/pio_timer.c
   packages/hdf5/branches/upstream/current/perform/pio_timer.h
   packages/hdf5/branches/upstream/current/perform/zip_perf.c
   packages/hdf5/branches/upstream/current/release_docs/
   packages/hdf5/branches/upstream/current/release_docs/HISTORY.txt
   packages/hdf5/branches/upstream/current/release_docs/INSTALL
   packages/hdf5/branches/upstream/current/release_docs/INSTALL_TFLOPS
   packages/hdf5/branches/upstream/current/release_docs/INSTALL_VFL
   packages/hdf5/branches/upstream/current/release_docs/INSTALL_Windows.txt
   packages/hdf5/branches/upstream/current/release_docs/INSTALL_Windows_From_Command_Line.txt
   packages/hdf5/branches/upstream/current/release_docs/INSTALL_Windows_Short.txt
   packages/hdf5/branches/upstream/current/release_docs/INSTALL_codewarrior.txt
   packages/hdf5/branches/upstream/current/release_docs/INSTALL_parallel
   packages/hdf5/branches/upstream/current/release_docs/RELEASE.txt
   packages/hdf5/branches/upstream/current/src/
   packages/hdf5/branches/upstream/current/src/Dependencies
   packages/hdf5/branches/upstream/current/src/H5.c
   packages/hdf5/branches/upstream/current/src/H5A.c
   packages/hdf5/branches/upstream/current/src/H5AC.c
   packages/hdf5/branches/upstream/current/src/H5ACprivate.h
   packages/hdf5/branches/upstream/current/src/H5ACpublic.h
   packages/hdf5/branches/upstream/current/src/H5Apkg.h
   packages/hdf5/branches/upstream/current/src/H5Aprivate.h
   packages/hdf5/branches/upstream/current/src/H5Apublic.h
   packages/hdf5/branches/upstream/current/src/H5B.c
   packages/hdf5/branches/upstream/current/src/H5Bpkg.h
   packages/hdf5/branches/upstream/current/src/H5Bprivate.h
   packages/hdf5/branches/upstream/current/src/H5Bpublic.h
   packages/hdf5/branches/upstream/current/src/H5C.c
   packages/hdf5/branches/upstream/current/src/H5Cprivate.h
   packages/hdf5/branches/upstream/current/src/H5Cpublic.h
   packages/hdf5/branches/upstream/current/src/H5D.c
   packages/hdf5/branches/upstream/current/src/H5Dcompact.c
   packages/hdf5/branches/upstream/current/src/H5Dcontig.c
   packages/hdf5/branches/upstream/current/src/H5Defl.c
   packages/hdf5/branches/upstream/current/src/H5Dio.c
   packages/hdf5/branches/upstream/current/src/H5Distore.c
   packages/hdf5/branches/upstream/current/src/H5Dmpio.c
   packages/hdf5/branches/upstream/current/src/H5Dpkg.h
   packages/hdf5/branches/upstream/current/src/H5Dprivate.h
   packages/hdf5/branches/upstream/current/src/H5Dpublic.h
   packages/hdf5/branches/upstream/current/src/H5Dselect.c
   packages/hdf5/branches/upstream/current/src/H5Dtest.c
   packages/hdf5/branches/upstream/current/src/H5E.c
   packages/hdf5/branches/upstream/current/src/H5Eprivate.h
   packages/hdf5/branches/upstream/current/src/H5Epublic.h
   packages/hdf5/branches/upstream/current/src/H5F.c
   packages/hdf5/branches/upstream/current/src/H5FD.c
   packages/hdf5/branches/upstream/current/src/H5FDcore.c
   packages/hdf5/branches/upstream/current/src/H5FDcore.h
   packages/hdf5/branches/upstream/current/src/H5FDfamily.c
   packages/hdf5/branches/upstream/current/src/H5FDfamily.h
   packages/hdf5/branches/upstream/current/src/H5FDgass.c
   packages/hdf5/branches/upstream/current/src/H5FDgass.h
   packages/hdf5/branches/upstream/current/src/H5FDlog.c
   packages/hdf5/branches/upstream/current/src/H5FDlog.h
   packages/hdf5/branches/upstream/current/src/H5FDmpi.c
   packages/hdf5/branches/upstream/current/src/H5FDmpi.h
   packages/hdf5/branches/upstream/current/src/H5FDmpio.c
   packages/hdf5/branches/upstream/current/src/H5FDmpio.h
   packages/hdf5/branches/upstream/current/src/H5FDmpiposix.c
   packages/hdf5/branches/upstream/current/src/H5FDmpiposix.h
   packages/hdf5/branches/upstream/current/src/H5FDmulti.c
   packages/hdf5/branches/upstream/current/src/H5FDmulti.h
   packages/hdf5/branches/upstream/current/src/H5FDprivate.h
   packages/hdf5/branches/upstream/current/src/H5FDpublic.h
   packages/hdf5/branches/upstream/current/src/H5FDsec2.c
   packages/hdf5/branches/upstream/current/src/H5FDsec2.h
   packages/hdf5/branches/upstream/current/src/H5FDsrb.c
   packages/hdf5/branches/upstream/current/src/H5FDsrb.h
   packages/hdf5/branches/upstream/current/src/H5FDstdio.c
   packages/hdf5/branches/upstream/current/src/H5FDstdio.h
   packages/hdf5/branches/upstream/current/src/H5FDstream.c
   packages/hdf5/branches/upstream/current/src/H5FDstream.h
   packages/hdf5/branches/upstream/current/src/H5FL.c
   packages/hdf5/branches/upstream/current/src/H5FLprivate.h
   packages/hdf5/branches/upstream/current/src/H5FO.c
   packages/hdf5/branches/upstream/current/src/H5FOprivate.h
   packages/hdf5/branches/upstream/current/src/H5FS.c
   packages/hdf5/branches/upstream/current/src/H5FSprivate.h
   packages/hdf5/branches/upstream/current/src/H5Fdbg.c
   packages/hdf5/branches/upstream/current/src/H5Fmount.c
   packages/hdf5/branches/upstream/current/src/H5Fpkg.h
   packages/hdf5/branches/upstream/current/src/H5Fprivate.h
   packages/hdf5/branches/upstream/current/src/H5Fpublic.h
   packages/hdf5/branches/upstream/current/src/H5Fsfile.c
   packages/hdf5/branches/upstream/current/src/H5Fsuper.c
   packages/hdf5/branches/upstream/current/src/H5G.c
   packages/hdf5/branches/upstream/current/src/H5Gent.c
   packages/hdf5/branches/upstream/current/src/H5Gnode.c
   packages/hdf5/branches/upstream/current/src/H5Gpkg.h
   packages/hdf5/branches/upstream/current/src/H5Gprivate.h
   packages/hdf5/branches/upstream/current/src/H5Gpublic.h
   packages/hdf5/branches/upstream/current/src/H5Gstab.c
   packages/hdf5/branches/upstream/current/src/H5HG.c
   packages/hdf5/branches/upstream/current/src/H5HGdbg.c
   packages/hdf5/branches/upstream/current/src/H5HGpkg.h
   packages/hdf5/branches/upstream/current/src/H5HGprivate.h
   packages/hdf5/branches/upstream/current/src/H5HGpublic.h
   packages/hdf5/branches/upstream/current/src/H5HL.c
   packages/hdf5/branches/upstream/current/src/H5HLdbg.c
   packages/hdf5/branches/upstream/current/src/H5HLpkg.h
   packages/hdf5/branches/upstream/current/src/H5HLprivate.h
   packages/hdf5/branches/upstream/current/src/H5HLpublic.h
   packages/hdf5/branches/upstream/current/src/H5HP.c
   packages/hdf5/branches/upstream/current/src/H5HPprivate.h
   packages/hdf5/branches/upstream/current/src/H5I.c
   packages/hdf5/branches/upstream/current/src/H5Ipkg.h
   packages/hdf5/branches/upstream/current/src/H5Iprivate.h
   packages/hdf5/branches/upstream/current/src/H5Ipublic.h
   packages/hdf5/branches/upstream/current/src/H5MF.c
   packages/hdf5/branches/upstream/current/src/H5MFprivate.h
   packages/hdf5/branches/upstream/current/src/H5MM.c
   packages/hdf5/branches/upstream/current/src/H5MMprivate.h
   packages/hdf5/branches/upstream/current/src/H5MMpublic.h
   packages/hdf5/branches/upstream/current/src/H5MPprivate.h
   packages/hdf5/branches/upstream/current/src/H5O.c
   packages/hdf5/branches/upstream/current/src/H5Oattr.c
   packages/hdf5/branches/upstream/current/src/H5Obogus.c
   packages/hdf5/branches/upstream/current/src/H5Ocont.c
   packages/hdf5/branches/upstream/current/src/H5Odtype.c
   packages/hdf5/branches/upstream/current/src/H5Oefl.c
   packages/hdf5/branches/upstream/current/src/H5Ofill.c
   packages/hdf5/branches/upstream/current/src/H5Olayout.c
   packages/hdf5/branches/upstream/current/src/H5Omtime.c
   packages/hdf5/branches/upstream/current/src/H5Oname.c
   packages/hdf5/branches/upstream/current/src/H5Onull.c
   packages/hdf5/branches/upstream/current/src/H5Opkg.h
   packages/hdf5/branches/upstream/current/src/H5Opline.c
   packages/hdf5/branches/upstream/current/src/H5Oprivate.h
   packages/hdf5/branches/upstream/current/src/H5Opublic.h
   packages/hdf5/branches/upstream/current/src/H5Osdspace.c
   packages/hdf5/branches/upstream/current/src/H5Oshared.c
   packages/hdf5/branches/upstream/current/src/H5Ostab.c
   packages/hdf5/branches/upstream/current/src/H5P.c
   packages/hdf5/branches/upstream/current/src/H5Pdcpl.c
   packages/hdf5/branches/upstream/current/src/H5Pdxpl.c
   packages/hdf5/branches/upstream/current/src/H5Pfapl.c
   packages/hdf5/branches/upstream/current/src/H5Pfcpl.c
   packages/hdf5/branches/upstream/current/src/H5Ppkg.h
   packages/hdf5/branches/upstream/current/src/H5Pprivate.h
   packages/hdf5/branches/upstream/current/src/H5Ppublic.h
   packages/hdf5/branches/upstream/current/src/H5Ptest.c
   packages/hdf5/branches/upstream/current/src/H5R.c
   packages/hdf5/branches/upstream/current/src/H5RC.c
   packages/hdf5/branches/upstream/current/src/H5RCprivate.h
   packages/hdf5/branches/upstream/current/src/H5RS.c
   packages/hdf5/branches/upstream/current/src/H5RSprivate.h
   packages/hdf5/branches/upstream/current/src/H5Rprivate.h
   packages/hdf5/branches/upstream/current/src/H5Rpublic.h
   packages/hdf5/branches/upstream/current/src/H5S.c
   packages/hdf5/branches/upstream/current/src/H5SL.c
   packages/hdf5/branches/upstream/current/src/H5SLprivate.h
   packages/hdf5/branches/upstream/current/src/H5ST.c
   packages/hdf5/branches/upstream/current/src/H5STprivate.h
   packages/hdf5/branches/upstream/current/src/H5Sall.c
   packages/hdf5/branches/upstream/current/src/H5Shyper.c
   packages/hdf5/branches/upstream/current/src/H5Smpio.c
   packages/hdf5/branches/upstream/current/src/H5Snone.c
   packages/hdf5/branches/upstream/current/src/H5Spkg.h
   packages/hdf5/branches/upstream/current/src/H5Spoint.c
   packages/hdf5/branches/upstream/current/src/H5Sprivate.h
   packages/hdf5/branches/upstream/current/src/H5Spublic.h
   packages/hdf5/branches/upstream/current/src/H5Sselect.c
   packages/hdf5/branches/upstream/current/src/H5Stest.c
   packages/hdf5/branches/upstream/current/src/H5T.c
   packages/hdf5/branches/upstream/current/src/H5TS.c
   packages/hdf5/branches/upstream/current/src/H5TSprivate.h
   packages/hdf5/branches/upstream/current/src/H5Tarray.c
   packages/hdf5/branches/upstream/current/src/H5Tbit.c
   packages/hdf5/branches/upstream/current/src/H5Tcommit.c
   packages/hdf5/branches/upstream/current/src/H5Tcompound.c
   packages/hdf5/branches/upstream/current/src/H5Tconv.c
   packages/hdf5/branches/upstream/current/src/H5Tcset.c
   packages/hdf5/branches/upstream/current/src/H5Tenum.c
   packages/hdf5/branches/upstream/current/src/H5Tfields.c
   packages/hdf5/branches/upstream/current/src/H5Tfixed.c
   packages/hdf5/branches/upstream/current/src/H5Tfloat.c
   packages/hdf5/branches/upstream/current/src/H5Tnative.c
   packages/hdf5/branches/upstream/current/src/H5Toffset.c
   packages/hdf5/branches/upstream/current/src/H5Topaque.c
   packages/hdf5/branches/upstream/current/src/H5Torder.c
   packages/hdf5/branches/upstream/current/src/H5Tpad.c
   packages/hdf5/branches/upstream/current/src/H5Tpkg.h
   packages/hdf5/branches/upstream/current/src/H5Tprecis.c
   packages/hdf5/branches/upstream/current/src/H5Tprivate.h
   packages/hdf5/branches/upstream/current/src/H5Tpublic.h
   packages/hdf5/branches/upstream/current/src/H5Tstrpad.c
   packages/hdf5/branches/upstream/current/src/H5Tvlen.c
   packages/hdf5/branches/upstream/current/src/H5V.c
   packages/hdf5/branches/upstream/current/src/H5Vprivate.h
   packages/hdf5/branches/upstream/current/src/H5Z.c
   packages/hdf5/branches/upstream/current/src/H5Zdeflate.c
   packages/hdf5/branches/upstream/current/src/H5Zfletcher32.c
   packages/hdf5/branches/upstream/current/src/H5Zpkg.h
   packages/hdf5/branches/upstream/current/src/H5Zprivate.h
   packages/hdf5/branches/upstream/current/src/H5Zpublic.h
   packages/hdf5/branches/upstream/current/src/H5Zshuffle.c
   packages/hdf5/branches/upstream/current/src/H5Zszip.c
   packages/hdf5/branches/upstream/current/src/H5api_adpt.h
   packages/hdf5/branches/upstream/current/src/H5config.h.in
   packages/hdf5/branches/upstream/current/src/H5detect.c
   packages/hdf5/branches/upstream/current/src/H5private.h
   packages/hdf5/branches/upstream/current/src/H5public.h
   packages/hdf5/branches/upstream/current/src/Makefile.in
   packages/hdf5/branches/upstream/current/src/hdf5.h
   packages/hdf5/branches/upstream/current/src/libhdf5.settings.in
   packages/hdf5/branches/upstream/current/test/
   packages/hdf5/branches/upstream/current/test/Dependencies
   packages/hdf5/branches/upstream/current/test/Makefile.in
   packages/hdf5/branches/upstream/current/test/big.c
   packages/hdf5/branches/upstream/current/test/bittests.c
   packages/hdf5/branches/upstream/current/test/cache.c
   packages/hdf5/branches/upstream/current/test/cmpd_dset.c
   packages/hdf5/branches/upstream/current/test/dangle.c
   packages/hdf5/branches/upstream/current/test/deflate.h5
   packages/hdf5/branches/upstream/current/test/dsets.c
   packages/hdf5/branches/upstream/current/test/dtypes.c
   packages/hdf5/branches/upstream/current/test/enum.c
   packages/hdf5/branches/upstream/current/test/extend.c
   packages/hdf5/branches/upstream/current/test/external.c
   packages/hdf5/branches/upstream/current/test/family_v1.7_00000.h5
   packages/hdf5/branches/upstream/current/test/family_v1.7_00001.h5
   packages/hdf5/branches/upstream/current/test/family_v1.7_00002.h5
   packages/hdf5/branches/upstream/current/test/family_v1.7_00003.h5
   packages/hdf5/branches/upstream/current/test/file_handle.c
   packages/hdf5/branches/upstream/current/test/fill_old.h5
   packages/hdf5/branches/upstream/current/test/fillval.c
   packages/hdf5/branches/upstream/current/test/flush1.c
   packages/hdf5/branches/upstream/current/test/flush2.c
   packages/hdf5/branches/upstream/current/test/gass_append.c
   packages/hdf5/branches/upstream/current/test/gass_read.c
   packages/hdf5/branches/upstream/current/test/gass_write.c
   packages/hdf5/branches/upstream/current/test/getname.c
   packages/hdf5/branches/upstream/current/test/gheap.c
   packages/hdf5/branches/upstream/current/test/h5test.c
   packages/hdf5/branches/upstream/current/test/h5test.h
   packages/hdf5/branches/upstream/current/test/hyperslab.c
   packages/hdf5/branches/upstream/current/test/istore.c
   packages/hdf5/branches/upstream/current/test/lheap.c
   packages/hdf5/branches/upstream/current/test/links.c
   packages/hdf5/branches/upstream/current/test/mount.c
   packages/hdf5/branches/upstream/current/test/mtime.c
   packages/hdf5/branches/upstream/current/test/noencoder.h5
   packages/hdf5/branches/upstream/current/test/ntypes.c
   packages/hdf5/branches/upstream/current/test/ohdr.c
   packages/hdf5/branches/upstream/current/test/reserved.c
   packages/hdf5/branches/upstream/current/test/set_extent.c
   packages/hdf5/branches/upstream/current/test/srb_append.c
   packages/hdf5/branches/upstream/current/test/srb_read.c
   packages/hdf5/branches/upstream/current/test/srb_write.c
   packages/hdf5/branches/upstream/current/test/stab.c
   packages/hdf5/branches/upstream/current/test/stream_test.c
   packages/hdf5/branches/upstream/current/test/tarray.c
   packages/hdf5/branches/upstream/current/test/tarrold.h5
   packages/hdf5/branches/upstream/current/test/tattr.c
   packages/hdf5/branches/upstream/current/test/tbogus.h5
   packages/hdf5/branches/upstream/current/test/tconfig.c
   packages/hdf5/branches/upstream/current/test/test_filters_be.hdf5
   packages/hdf5/branches/upstream/current/test/test_filters_le.hdf5
   packages/hdf5/branches/upstream/current/test/testframe.c
   packages/hdf5/branches/upstream/current/test/testhdf5.c
   packages/hdf5/branches/upstream/current/test/testhdf5.h
   packages/hdf5/branches/upstream/current/test/testmeta.c
   packages/hdf5/branches/upstream/current/test/tfile.c
   packages/hdf5/branches/upstream/current/test/tgenprop.c
   packages/hdf5/branches/upstream/current/test/th5s.c
   packages/hdf5/branches/upstream/current/test/th5s.h5
   packages/hdf5/branches/upstream/current/test/theap.c
   packages/hdf5/branches/upstream/current/test/titerate.c
   packages/hdf5/branches/upstream/current/test/tlayouto.h5
   packages/hdf5/branches/upstream/current/test/tmeta.c
   packages/hdf5/branches/upstream/current/test/tmisc.c
   packages/hdf5/branches/upstream/current/test/tmtimen.h5
   packages/hdf5/branches/upstream/current/test/tmtimeo.h5
   packages/hdf5/branches/upstream/current/test/tnullspace.h5
   packages/hdf5/branches/upstream/current/test/trefer.c
   packages/hdf5/branches/upstream/current/test/trefstr.c
   packages/hdf5/branches/upstream/current/test/tselect.c
   packages/hdf5/branches/upstream/current/test/tskiplist.c
   packages/hdf5/branches/upstream/current/test/ttime.c
   packages/hdf5/branches/upstream/current/test/ttsafe.c
   packages/hdf5/branches/upstream/current/test/ttsafe.h
   packages/hdf5/branches/upstream/current/test/ttsafe_acreate.c
   packages/hdf5/branches/upstream/current/test/ttsafe_cancel.c
   packages/hdf5/branches/upstream/current/test/ttsafe_dcreate.c
   packages/hdf5/branches/upstream/current/test/ttsafe_error.c
   packages/hdf5/branches/upstream/current/test/ttst.c
   packages/hdf5/branches/upstream/current/test/tvlstr.c
   packages/hdf5/branches/upstream/current/test/tvltypes.c
   packages/hdf5/branches/upstream/current/test/unlink.c
   packages/hdf5/branches/upstream/current/testpar/
   packages/hdf5/branches/upstream/current/testpar/Dependencies
   packages/hdf5/branches/upstream/current/testpar/Makefile.in
   packages/hdf5/branches/upstream/current/testpar/t_coll_chunk.c
   packages/hdf5/branches/upstream/current/testpar/t_dset.c
   packages/hdf5/branches/upstream/current/testpar/t_file.c
   packages/hdf5/branches/upstream/current/testpar/t_mdset.c
   packages/hdf5/branches/upstream/current/testpar/t_mpi.c
   packages/hdf5/branches/upstream/current/testpar/t_ph5basic.c
   packages/hdf5/branches/upstream/current/testpar/t_span_tree.c
   packages/hdf5/branches/upstream/current/testpar/testph5.sh.in
   packages/hdf5/branches/upstream/current/testpar/testphdf5.c
   packages/hdf5/branches/upstream/current/testpar/testphdf5.h
   packages/hdf5/branches/upstream/current/tools/
   packages/hdf5/branches/upstream/current/tools/Dependencies
   packages/hdf5/branches/upstream/current/tools/Makefile.in
   packages/hdf5/branches/upstream/current/tools/gifconv/
   packages/hdf5/branches/upstream/current/tools/gifconv/Dependencies
   packages/hdf5/branches/upstream/current/tools/gifconv/Makefile.in
   packages/hdf5/branches/upstream/current/tools/gifconv/decompress.c
   packages/hdf5/branches/upstream/current/tools/gifconv/gif.h
   packages/hdf5/branches/upstream/current/tools/gifconv/gif2hdf.c
   packages/hdf5/branches/upstream/current/tools/gifconv/gif2mem.c
   packages/hdf5/branches/upstream/current/tools/gifconv/gifread.c
   packages/hdf5/branches/upstream/current/tools/gifconv/hdf2gif.c
   packages/hdf5/branches/upstream/current/tools/gifconv/hdfgifwr.c
   packages/hdf5/branches/upstream/current/tools/gifconv/readhdf.c
   packages/hdf5/branches/upstream/current/tools/gifconv/writehdf.c
   packages/hdf5/branches/upstream/current/tools/h5diff/
   packages/hdf5/branches/upstream/current/tools/h5diff/Dependencies
   packages/hdf5/branches/upstream/current/tools/h5diff/Makefile.in
   packages/hdf5/branches/upstream/current/tools/h5diff/h5diff_main.c
   packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff.h
   packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff.sh
   packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_attr.c
   packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_basic.c
   packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_dset.c
   packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_main.c
   packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_util.c
   packages/hdf5/branches/upstream/current/tools/h5dump/
   packages/hdf5/branches/upstream/current/tools/h5dump/Dependencies
   packages/hdf5/branches/upstream/current/tools/h5dump/Makefile.in
   packages/hdf5/branches/upstream/current/tools/h5dump/h5dump.c
   packages/hdf5/branches/upstream/current/tools/h5dump/h5dump.h
   packages/hdf5/branches/upstream/current/tools/h5dump/h5dumpgentest.c
   packages/hdf5/branches/upstream/current/tools/h5dump/testh5dump.sh.in
   packages/hdf5/branches/upstream/current/tools/h5dump/testh5dumpxml.sh
   packages/hdf5/branches/upstream/current/tools/h5import/
   packages/hdf5/branches/upstream/current/tools/h5import/Dependencies
   packages/hdf5/branches/upstream/current/tools/h5import/Makefile.in
   packages/hdf5/branches/upstream/current/tools/h5import/h5import.c
   packages/hdf5/branches/upstream/current/tools/h5import/h5import.h
   packages/hdf5/branches/upstream/current/tools/h5import/h5importtest.c
   packages/hdf5/branches/upstream/current/tools/h5import/h5importtestutil.sh
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbfp32
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbfp64
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin16
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin32
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin8
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbuin16
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbuin32
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/fp1
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/fp2
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/in1
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test1.h5
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test10.h5
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test11.h5
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test12.h5
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test13.h5
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test2.h5
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test3.h5
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test4.h5
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test5.h5
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test6.h5
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test7.h5
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test8.h5
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test9.h5
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textfp32
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textfp64
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin16
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin32
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin8
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textuin16
   packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textuin32
   packages/hdf5/branches/upstream/current/tools/h5jam/
   packages/hdf5/branches/upstream/current/tools/h5jam/Dependencies
   packages/hdf5/branches/upstream/current/tools/h5jam/Makefile.in
   packages/hdf5/branches/upstream/current/tools/h5jam/getub.c
   packages/hdf5/branches/upstream/current/tools/h5jam/h5jam.c
   packages/hdf5/branches/upstream/current/tools/h5jam/h5jamgentest.c
   packages/hdf5/branches/upstream/current/tools/h5jam/h5unjam.c
   packages/hdf5/branches/upstream/current/tools/h5jam/tellub.c
   packages/hdf5/branches/upstream/current/tools/h5jam/testh5jam.sh.in
   packages/hdf5/branches/upstream/current/tools/h5ls/
   packages/hdf5/branches/upstream/current/tools/h5ls/Dependencies
   packages/hdf5/branches/upstream/current/tools/h5ls/Makefile.in
   packages/hdf5/branches/upstream/current/tools/h5ls/h5ls.c
   packages/hdf5/branches/upstream/current/tools/h5ls/testh5ls.sh
   packages/hdf5/branches/upstream/current/tools/h5repack/
   packages/hdf5/branches/upstream/current/tools/h5repack/Dependencies
   packages/hdf5/branches/upstream/current/tools/h5repack/Makefile.in
   packages/hdf5/branches/upstream/current/tools/h5repack/h5repack.c
   packages/hdf5/branches/upstream/current/tools/h5repack/h5repack.h
   packages/hdf5/branches/upstream/current/tools/h5repack/h5repack.sh.in
   packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_copy.c
   packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_filters.c
   packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_list.c
   packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_main.c
   packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_opttable.c
   packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_parse.c
   packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_refs.c
   packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_verify.c
   packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_attr.c
   packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_detect_szip.c
   packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_dset.c
   packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_main.c
   packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_make.c
   packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_util.c
   packages/hdf5/branches/upstream/current/tools/lib/
   packages/hdf5/branches/upstream/current/tools/lib/Dependencies
   packages/hdf5/branches/upstream/current/tools/lib/Makefile.in
   packages/hdf5/branches/upstream/current/tools/lib/h5diff.c
   packages/hdf5/branches/upstream/current/tools/lib/h5diff.h
   packages/hdf5/branches/upstream/current/tools/lib/h5diff_array.c
   packages/hdf5/branches/upstream/current/tools/lib/h5diff_attr.c
   packages/hdf5/branches/upstream/current/tools/lib/h5diff_dset.c
   packages/hdf5/branches/upstream/current/tools/lib/h5diff_util.c
   packages/hdf5/branches/upstream/current/tools/lib/h5tools.c
   packages/hdf5/branches/upstream/current/tools/lib/h5tools.h
   packages/hdf5/branches/upstream/current/tools/lib/h5tools_filters.c
   packages/hdf5/branches/upstream/current/tools/lib/h5tools_ref.c
   packages/hdf5/branches/upstream/current/tools/lib/h5tools_ref.h
   packages/hdf5/branches/upstream/current/tools/lib/h5tools_str.c
   packages/hdf5/branches/upstream/current/tools/lib/h5tools_str.h
   packages/hdf5/branches/upstream/current/tools/lib/h5tools_type.c
   packages/hdf5/branches/upstream/current/tools/lib/h5tools_utils.c
   packages/hdf5/branches/upstream/current/tools/lib/h5tools_utils.h
   packages/hdf5/branches/upstream/current/tools/lib/h5trav.c
   packages/hdf5/branches/upstream/current/tools/lib/h5trav.h
   packages/hdf5/branches/upstream/current/tools/lib/h5trav_table.c
   packages/hdf5/branches/upstream/current/tools/lib/talign.c
   packages/hdf5/branches/upstream/current/tools/misc/
   packages/hdf5/branches/upstream/current/tools/misc/Dependencies
   packages/hdf5/branches/upstream/current/tools/misc/Makefile.in
   packages/hdf5/branches/upstream/current/tools/misc/h5cc.in
   packages/hdf5/branches/upstream/current/tools/misc/h5debug.c
   packages/hdf5/branches/upstream/current/tools/misc/h5redeploy.in
   packages/hdf5/branches/upstream/current/tools/misc/h5repart.c
   packages/hdf5/branches/upstream/current/tools/testfiles/
   packages/hdf5/branches/upstream/current/tools/testfiles/file1.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/file2.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/file3.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/file4.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/file5.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/file6.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/file7.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/file8.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_10.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_11.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_12.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_13.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_14.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_15.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_16.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_17.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_18.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_20.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_21.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_22.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_23.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_24.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_25.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_50.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_51.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_52.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_53.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_54.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_55.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_56.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_57.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_600.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_601.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_602.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_603.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_604.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_605.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_606.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_607.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_608.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_609.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_610.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_611.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_612.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_613.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_614.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_615.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_616.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_617.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_618.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_619.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_620.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_621.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_622.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_623.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_624.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_625.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_626.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_627.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_628.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_629.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_70.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_80.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/h5repack_info.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/help-1.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/help-2.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/help-3.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/taindices.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tall-1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tall-1.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tall-2.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tall-2.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tall-2A.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tall-2A.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tall-2B.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tall-3.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tall-4s.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tall-5s.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tall.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tall.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tallfilters.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray2.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray2.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray2.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray3.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray3.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray3.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray4.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray4.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray5.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray5.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray6.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray6.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray6.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray7.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray7.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tarray7.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tattr-1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tattr-2.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tattr-3.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tattr.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tattr.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tattr2.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tattr2.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tbitfields-1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tbitfields.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tbitfields.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tboot1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tboot2.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tchar.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tchar1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tchunked.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-1.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-2.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-3.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-4.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tcompact.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tcompound.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tcompound.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tcompound2.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tcompound2.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tcompound_complex.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tcompound_complex.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tcontents.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tcontiguos.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tdatareg.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tdatareg.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tdatareg.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tdeflate.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tdset-1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tdset-1.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tdset-2.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tdset-3s.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tdset.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tdset.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tdset2-1s.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tdset2.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tdset2.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tempty-dtd-2.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tempty-dtd-uri.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tempty-dtd.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tempty-nons-2.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tempty-nons-uri.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tempty-nons.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tempty-ns-2.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tempty-ns.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tempty.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tempty.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tempty.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tempty.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tenum.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tenum.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tenum.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/test0.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/test1.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/test3.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/test4.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/test5.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/test_all.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/test_deflate.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/test_fletcher32.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/test_shuffle.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/test_szip.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/texternal.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tfamily.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00000.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00001.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00002.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00003.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00004.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00005.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00006.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00007.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00008.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00009.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00010.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tfcontents1.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tfcontents2.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tfill.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tfilters.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tfletcher32.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tfvalues.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tgroup-1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tgroup-1.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tgroup-2.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tgroup.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tgroup.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tgroup.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tgrp_comments.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tgrp_comments.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/thlink-1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/thlink-1.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/thlink-2.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/thlink-3.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/thlink-4.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/thlink-5.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/thlink.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/thlink.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tindicesno.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tindicesyes.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tlarge_objname.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tlarge_objname.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tlonglinks.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tlonglinks.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tloop-1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tloop-1.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tloop.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tloop.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tloop2.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tloop2.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tmany.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tmany.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-b.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-g.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-l.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-o.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-r.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-s.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tmulti.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tname-amp.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tname-amp.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tname-apos.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tname-apos.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tname-gt.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tname-gt.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tname-lt.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tname-lt.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tname-quot.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tname-quot.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tname-sp.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tname-sp.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tnamed_dtype_attr.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tnamed_dtype_attr.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tnamed_dtype_attr.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tnestcomp-1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tnestcomp-1.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tnestedcomp.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tnestedcomp.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tnodata.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tnodata.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tnofilename.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tobjref.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tobjref.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tobjref.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/topaque.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/topaque.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/topaque.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tperror.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tref-escapes-at.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tref-escapes-at.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tref-escapes.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tref-escapes.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tref.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tref.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/treference.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tshuffle.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tslink-1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tslink-1.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tslink-2.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tslink.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tslink.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tsplit_file-m.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tsplit_file-r.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tsplit_file.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tstr-1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tstr-1.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tstr-2.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tstr.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tstr.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tstr2.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tstr2.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tstr3.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tstring-at.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tstring-at.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tstring.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tstring.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tstring.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tstring2.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tstringe.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tszip.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tuserfilter.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.ls
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes2.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes2.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes2.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes3.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes3.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes3.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes4.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes4.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes4.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes5.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes5.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes5.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/tvlstr.ddl
   packages/hdf5/branches/upstream/current/tools/testfiles/tvlstr.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/tvlstr.h5.xml
   packages/hdf5/branches/upstream/current/tools/testfiles/twithub.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/twithub513.h5
   packages/hdf5/branches/upstream/current/tools/testfiles/u10.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/u511.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/u512.txt
   packages/hdf5/branches/upstream/current/tools/testfiles/u513.txt
   packages/hdf5/branches/upstream/current/windows/
   packages/hdf5/branches/upstream/current/windows/all.zip
   packages/hdf5/tags/
Log:
[svn-inject] Installing original source of hdf5

Added: packages/hdf5/branches/upstream/current/COPYING
===================================================================
--- packages/hdf5/branches/upstream/current/COPYING	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/COPYING	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,74 @@
+Copyright Notice and Statement for NCSA Hierarchical Data Format (HDF)
+Software Library and Utilities
+
+NCSA HDF5 (Hierarchical Data Format 5) Software Library and Utilities 
+Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 by the Board of 
+Trustees of the University of Illinois.  All rights reserved.
+
+Contributors: National Center for Supercomputing Applications (NCSA) at the
+University of Illinois at Urbana-Champaign (UIUC), Lawrence Livermore 
+National Laboratory (LLNL), Sandia National Laboratories (SNL), Los Alamos 
+National Laboratory (LANL), Jean-loup Gailly and Mark Adler (gzip library).
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted for any purpose (including commercial purposes)
+provided that the following conditions are met:
+
+1.  Redistributions of source code must retain the above copyright notice,
+    this list of conditions, and the following disclaimer.
+
+2.  Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions, and the following disclaimer in the documentation
+    and/or materials provided with the distribution.
+
+3.  In addition, redistributions of modified forms of the source or binary
+    code must carry prominent notices stating that the original code was
+    changed and the date of the change.
+
+4.  All publications or advertising materials mentioning features or use of
+    this software are asked, but not required, to acknowledge that it was 
+    developed by the National Center for Supercomputing Applications at the 
+    University of Illinois at Urbana-Champaign and to credit the contributors.
+
+5.  Neither the name of the University nor the names of the Contributors may
+    be used to endorse or promote products derived from this software without
+    specific prior written permission from the University or the Contributors,
+    as appropriate for the name(s) to be used.
+
+6.  THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND THE CONTRIBUTORS "AS IS"
+    WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED.  In no event
+    shall the University or the Contributors be liable for any damages
+    suffered by the users arising out of the use of this software, even if
+    advised of the possibility of such damage.
+
+--------------------------------------------------------------------------
+Portions of HDF5 were developed with support from the University of 
+California, Lawrence Livermore National Laboratory (UC LLNL).
+The following statement applies to those portions of the product
+and must be retained in any redistribution of source code, binaries,
+documentation, and/or accompanying materials:
+
+    This work was partially produced at the University of California,
+    Lawrence Livermore National Laboratory (UC LLNL) under contract no.
+    W-7405-ENG-48 (Contract 48) between the U.S. Department of Energy 
+    (DOE) and The Regents of the University of California (University) 
+    for the operation of UC LLNL.
+
+    DISCLAIMER:
+    This work was prepared as an account of work sponsored by an agency 
+    of the United States Government.  Neither the United States 
+    Government nor the University of California nor any of their 
+    employees, makes any warranty, express or implied, or assumes any 
+    liability or responsibility for the accuracy, completeness, or 
+    usefulness of any information, apparatus, product, or process 
+    disclosed, or represents that its use would not infringe privately-
+    owned rights.  Reference herein to any specific commercial products, 
+    process, or service by trade name, trademark, manufacturer, or 
+    otherwise, does not necessarily constitute or imply its endorsement, 
+    recommendation, or favoring by the United States Government or the 
+    University of California.  The views and opinions of authors 
+    expressed herein do not necessarily state or reflect those of the 
+    United States Government or the University of California, and shall 
+    not be used for advertising or product endorsement purposes.
+--------------------------------------------------------------------------
+

Added: packages/hdf5/branches/upstream/current/MANIFEST
===================================================================
--- packages/hdf5/branches/upstream/current/MANIFEST	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/MANIFEST	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1910 @@
+#
+# 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 is the list of files that are part of HDF5 source distribution. 
+# All files have a `./' prefix and appear in lexicographic order.
+# Lines that end with _DO_NOT_DISTRIBUTE_ will not be included in a
+# release.  Blank lines and comments are ignored.  Comments must start
+# in column one with a '#'.
+#------------------------------------------------------------------------------
+
+./.autom4te.cfg             		_DO_NOT_DISTRIBUTE_
+./.h5chkright.ini			_DO_NOT_DISTRIBUTE_
+./COPYING
+./MANIFEST
+./Makefile.dist
+./Makefile.in
+./README.txt
+./aclocal.m4
+./configure
+./configure.in
+
+./bin/buildhdf5
+./bin/checkapi				_DO_NOT_DISTRIBUTE_
+./bin/checkposix			_DO_NOT_DISTRIBUTE_
+./bin/chkconfigure                      _DO_NOT_DISTRIBUTE_
+./bin/chkcopyright			_DO_NOT_DISTRIBUTE_
+./bin/chkmanifest
+./bin/config.guess
+./bin/config.sub
+./bin/config_para_ibm_sp.sh 
+./bin/debug-ohdr			_DO_NOT_DISTRIBUTE_
+./bin/dependencies
+./bin/deploy
+./bin/distdep
+./bin/errors			        _DO_NOT_DISTRIBUTE_
+./bin/h5vers
+./bin/install-sh
+./bin/iostats
+./bin/locate_sw
+./bin/ltmain.sh
+./bin/mkdirs
+./bin/reconfigure			_DO_NOT_DISTRIBUTE_
+./bin/release
+./bin/runtest				_DO_NOT_DISTRIBUTE_
+./bin/snapshot
+./bin/snapshot_version			_DO_NOT_DISTRIBUTE_
+./bin/timekeeper			_DO_NOT_DISTRIBUTE_
+./bin/trace
+./bin/yodconfigure
+
+./config/BlankForm
+./config/commence.in
+./config/conclude.in
+./config/dec-flags
+./config/dec-osf4.x
+./config/dec-osf5.x
+./config/depend1.in
+./config/depend2.in
+./config/depend3.in
+./config/depend4.in
+./config/dependN.in
+./config/freebsd
+./config/gnu-flags
+./config/hpux10.20
+./config/hpux11.00
+./config/hpux11.23
+./config/hpux9.03
+./config/i386-pc-cygwin32
+./config/i686-pc-cygwin
+./config/ia64-linux-gnu
+./config/intel-flags
+./config/intel-osf1
+./config/irix5.x
+./config/irix6.x
+./config/linux-gnu
+./config/linux-gnuaout
+./config/linux-gnulibc1
+./config/linux-gnulibc2
+./config/mpich
+./config/nv1-cray
+./config/pgi-flags
+./config/powerpc-apple
+./config/powerpc-ibm-aix4.x
+./config/powerpc-ibm-aix5.x
+./config/powerpc-ibm-linux-gnu
+./config/rs6000-ibm-aix4.x
+./config/solaris2.x
+./config/sv1-cray
+./config/unicos
+./config/unicos10.0.X
+./config/unicosmk
+./config/unicosmk2.0.X
+./config/unicosmk2.0.5.X
+./config/unicosmk2.0.6.X
+
+./config/site-specific/BlankForm
+
+./doc/Makefile.in
+
+./doc/html/Attributes.html
+./doc/html/Big.html
+./doc/html/Caching.html
+./doc/html/Chunking.html
+./doc/html/Chunk_f1.gif
+./doc/html/Chunk_f1.obj			_DO_NOT_DISTRIBUTE_
+./doc/html/Chunk_f2.gif
+./doc/html/Chunk_f2.obj			_DO_NOT_DISTRIBUTE_
+./doc/html/Chunk_f3.gif
+./doc/html/Chunk_f4.gif
+./doc/html/Chunk_f5.gif
+./doc/html/Chunk_f6.gif
+./doc/html/Chunk_f6.obj			_DO_NOT_DISTRIBUTE_
+./doc/html/CodeReview.html		_DO_NOT_DISTRIBUTE_
+./doc/html/Coding.html
+./doc/html/Copyright.html
+./doc/html/Datasets.html
+./doc/html/Dataspaces.html
+./doc/html/Datatypes.html
+./doc/html/DatatypesEnum.html
+./doc/html/Dependencies
+./doc/html/ddl.html
+./doc/html/Debugging.html
+./doc/html/EnumMap.gif
+./doc/html/Environment.html
+./doc/html/Errors.html
+./doc/html/ExternalFiles.html		_DO_NOT_DISTRIBUTE_
+./doc/html/FF-IH_FileGroup.gif
+./doc/html/FF-IH_FileObject.gif
+./doc/html/Files.html
+./doc/html/Filters.html
+./doc/html/Glossary.html
+./doc/html/Groups.html
+./doc/html/H5.api_map.html
+./doc/html/H5.format.html
+./doc/html/H5.intro.html
+./doc/html/H5.sample_code.html
+./doc/html/H5.user.html
+./doc/html/H5.user.PrintGen.html
+./doc/html/H5.user.PrintTpg.html
+./doc/html/IH_map1.gif
+./doc/html/IH_map2.gif
+./doc/html/IH_map3.gif
+./doc/html/IH_map4.gif
+./doc/html/IH_mapFoot.gif
+./doc/html/IH_mapHead.gif
+./doc/html/IOPipe.html
+./doc/html/Lib_Maint.html		_DO_NOT_DISTRIBUTE_
+./doc/html/Makefile.in
+./doc/html/MemoryManagement.html	_DO_NOT_DISTRIBUTE_
+./doc/html/MountingFiles.html
+./doc/html/NCSAfooterlogo.gif
+./doc/html/ObjectHeader.txt		_DO_NOT_DISTRIBUTE_
+./doc/html/PDF_RM_body.book             _DO_NOT_DISTRIBUTE_
+./doc/html/PDF_RM_front.book            _DO_NOT_DISTRIBUTE_
+./doc/html/Performance.html
+./doc/html/PredefDTypes.html
+./doc/html/Properties.html
+./doc/html/References.html
+./doc/html/RM_H5.html
+./doc/html/RM_H5A.html
+./doc/html/RM_H5D.html
+./doc/html/RM_H5E.html
+./doc/html/RM_H5F.html
+./doc/html/RM_H5Front.html
+./doc/html/RM_H5G.html
+./doc/html/RM_H5I.html
+./doc/html/RM_H5P.html
+./doc/html/RM_H5R.html
+./doc/html/RM_H5S.html
+./doc/html/RM_H5T.html
+./doc/html/RM_H5Z.html
+./doc/html/RM_Title.html                _DO_NOT_DISTRIBUTE_
+./doc/html/RM_TOC.html                  _DO_NOT_DISTRIBUTE_
+./doc/html/Tools.html
+./doc/html/Version.html
+./doc/html/chunk1.gif
+./doc/html/chunk1.obj			_DO_NOT_DISTRIBUTE_
+./doc/html/compat.html
+./doc/html/dataset_p1.gif
+./doc/html/dataset_p1.obj               _DO_NOT_DISTRIBUTE_
+./doc/html/extern1.gif
+./doc/html/extern1.obj			_DO_NOT_DISTRIBUTE_
+./doc/html/extern2.gif
+./doc/html/extern2.obj			_DO_NOT_DISTRIBUTE_
+
+./doc/html/ADGuide.html
+./doc/html/ADGuide/Changes.html
+./doc/html/ADGuide/Dependencies
+./doc/html/ADGuide/H4toH5Mapping.pdf
+./doc/html/ADGuide/H4toH5Mapping.doc    _DO_NOT_DISTRIBUTE_
+./doc/html/ADGuide/HISTORY.txt
+./doc/html/ADGuide/ImageSpec.html
+./doc/html/ADGuide/Makefile.in
+./doc/html/ADGuide/PaletteExample1.gif
+./doc/html/ADGuide/Palettes.fm.anc.gif
+./doc/html/ADGuide/RELEASE.txt
+
+./doc/html/Graphics/C++.gif
+./doc/html/Graphics/Dependencies
+./doc/html/Graphics/FORTRAN.gif
+./doc/html/Graphics/Java.gif
+./doc/html/Graphics/Makefile.in
+./doc/html/Graphics/OtherAPIs.gif
+
+./doc/html/Intro/Dependencies
+./doc/html/Intro/IntroExamples.html
+./doc/html/Intro/Makefile.in
+
+./doc/html/PSandPDF/Dependencies
+./doc/html/PSandPDF/Makefile.in
+
+./doc/html/TechNotes.html
+./doc/html/TechNotes/shuffling-algorithm-report.pdf
+./doc/html/TechNotes/Basic_perform.html
+./doc/html/TechNotes/BigDataSmMach.html
+./doc/html/TechNotes/ChStudy_1000x1000.gif
+./doc/html/TechNotes/ChStudy_250x250.gif
+./doc/html/TechNotes/ChStudy_499x499.gif
+./doc/html/TechNotes/ChStudy_5000x1000.gif
+./doc/html/TechNotes/ChStudy_500x500.gif
+./doc/html/TechNotes/ChStudy_p1.gif
+./doc/html/TechNotes/ChStudy_p1.obj     _DO_NOT_DISTRIBUTE_
+./doc/html/TechNotes/ChunkingStudy.html
+./doc/html/TechNotes/CodeReview.html
+./doc/html/TechNotes/Daily_Test_Explained.htm
+./doc/html/TechNotes/Dependencies
+./doc/html/TechNotes/ExternalFiles.html
+./doc/html/TechNotes/FreeLists.html
+./doc/html/TechNotes/H4-H5Compat.html
+./doc/html/TechNotes/HeapMgmt.html
+./doc/html/TechNotes/IOPipe.html
+./doc/html/TechNotes/LibMaint.html
+./doc/html/TechNotes/Makefile.in
+./doc/html/TechNotes/MemoryMgmt.html
+./doc/html/TechNotes/MoveDStruct.html
+./doc/html/TechNotes/NamingScheme.html
+./doc/html/TechNotes/ObjectHeader.html
+./doc/html/TechNotes/RawDStorage.html
+./doc/html/TechNotes/ReservedFileSpace.html
+./doc/html/TechNotes/SWControls.html
+./doc/html/TechNotes/SymbolTables.html
+./doc/html/TechNotes/TestReview.html
+./doc/html/TechNotes/TestReview/H5Dget_offset.html
+./doc/html/TechNotes/TestReview/H5Tget_native_type.html
+./doc/html/TechNotes/ThreadSafeLibrary.html
+./doc/html/TechNotes/VFL.html
+./doc/html/TechNotes/VFLfunc.html
+./doc/html/TechNotes/Version.html
+./doc/html/TechNotes/openmp-hdf5.c
+./doc/html/TechNotes/openmp-hdf5.html
+./doc/html/TechNotes/pipe1.gif
+./doc/html/TechNotes/pipe1.obj          _DO_NOT_DISTRIBUTE_
+./doc/html/TechNotes/pipe2.gif
+./doc/html/TechNotes/pipe2.obj          _DO_NOT_DISTRIBUTE_
+./doc/html/TechNotes/pipe3.gif
+./doc/html/TechNotes/pipe3.obj          _DO_NOT_DISTRIBUTE_
+./doc/html/TechNotes/pipe4.gif
+./doc/html/TechNotes/pipe4.obj          _DO_NOT_DISTRIBUTE_
+./doc/html/TechNotes/pipe5.gif
+./doc/html/TechNotes/pipe5.obj          _DO_NOT_DISTRIBUTE_
+./doc/html/TechNotes/version.gif
+./doc/html/TechNotes/version.obj        _DO_NOT_DISTRIBUTE_
+
+./doc/html/Tutor/Contents.html
+./doc/html/Tutor/ContentsAdd.html
+./doc/html/Tutor/ContentsAdv.html
+./doc/html/Tutor/ContentsFull.html
+./doc/html/Tutor/ContentsIntro.html
+./doc/html/Tutor/Copyright.html
+./doc/html/Tutor/Dependencies
+./doc/html/Tutor/Makefile.in
+./doc/html/Tutor/answers.html
+./doc/html/Tutor/api.html
+./doc/html/Tutor/bighdf2sp.JPG
+./doc/html/Tutor/compound.html
+./doc/html/Tutor/crtatt.html
+./doc/html/Tutor/crtdat.html
+./doc/html/Tutor/crtfile.html
+./doc/html/Tutor/crtgrp.html
+./doc/html/Tutor/crtgrpar.html
+./doc/html/Tutor/crtgrpd.html
+./doc/html/Tutor/extend.html
+./doc/html/Tutor/fileorg.html
+./doc/html/Tutor/footer-ncsalogo.gif
+./doc/html/Tutor/glossary.html
+./doc/html/Tutor/img001.gif
+./doc/html/Tutor/img002.gif
+./doc/html/Tutor/img003.gif
+./doc/html/Tutor/img004.gif
+./doc/html/Tutor/img005.gif
+./doc/html/Tutor/index.html
+./doc/html/Tutor/intro.html
+./doc/html/Tutor/iterate.html
+./doc/html/Tutor/mount.html
+./doc/html/Tutor/property.html
+./doc/html/Tutor/questions.html
+./doc/html/Tutor/rdwt.html
+./doc/html/Tutor/references.html
+./doc/html/Tutor/reftoobj.html
+./doc/html/Tutor/reftoreg.html
+./doc/html/Tutor/select.html
+./doc/html/Tutor/selectc.html
+./doc/html/Tutor/software.html
+./doc/html/Tutor/title.html
+./doc/html/Tutor/util.html
+
+./doc/html/Tutor/Graphics/AddInfo.gif
+./doc/html/Tutor/Graphics/AdvTopics.gif
+./doc/html/Tutor/Graphics/BLANK.gif
+./doc/html/Tutor/Graphics/ChunkExt.gif
+./doc/html/Tutor/Graphics/CompDTypes.gif
+./doc/html/Tutor/Graphics/Copy.gif
+./doc/html/Tutor/Graphics/CreateAttr.gif
+./doc/html/Tutor/Graphics/CreateDset1.gif
+./doc/html/Tutor/Graphics/CreateDset2.gif
+./doc/html/Tutor/Graphics/CreateFile.gif
+./doc/html/Tutor/Graphics/CreateGrp1.gif
+./doc/html/Tutor/Graphics/CreateGrp2.gif
+./doc/html/Tutor/Graphics/Dependencies
+./doc/html/Tutor/Graphics/Examples.gif
+./doc/html/Tutor/Graphics/FileOrg.gif
+./doc/html/Tutor/Graphics/FullTOC1.gif
+./doc/html/Tutor/Graphics/FullTOC2.gif
+./doc/html/Tutor/Graphics/Glossary.gif
+./doc/html/Tutor/Graphics/H5API.gif
+./doc/html/Tutor/Graphics/Intro.gif
+./doc/html/Tutor/Graphics/IntroTopics.gif
+./doc/html/Tutor/Graphics/Iterate.gif
+./doc/html/Tutor/Graphics/Makefile.in
+./doc/html/Tutor/Graphics/MountFile.gif
+./doc/html/Tutor/Graphics/Quiz.gif
+./doc/html/Tutor/Graphics/QuizAns.gif
+./doc/html/Tutor/Graphics/RdWrDataset.gif
+./doc/html/Tutor/Graphics/RefObject.gif
+./doc/html/Tutor/Graphics/RefRegion.gif
+./doc/html/Tutor/Graphics/References.gif
+./doc/html/Tutor/Graphics/SelectElemCp.gif
+./doc/html/Tutor/Graphics/SelectHyp.gif
+./doc/html/Tutor/Graphics/TOC.gif
+./doc/html/Tutor/Graphics/TOCFull.gif
+./doc/html/Tutor/Graphics/TOCShort.gif
+./doc/html/Tutor/Graphics/TitlePg.gif
+./doc/html/Tutor/Graphics/Utilities.gif
+
+./doc/html/Tutor/examples/Dependencies
+./doc/html/Tutor/examples/Makefile.in
+./doc/html/Tutor/examples/attrexample.f90
+./doc/html/Tutor/examples/chunk.f90
+./doc/html/Tutor/examples/compound.f90
+./doc/html/Tutor/examples/dsetexample.f90
+./doc/html/Tutor/examples/fileexample.f90
+./doc/html/Tutor/examples/groupexample.f90
+./doc/html/Tutor/examples/grpdsetexample.f90
+./doc/html/Tutor/examples/grpit.f90
+./doc/html/Tutor/examples/grpsexample.f90
+./doc/html/Tutor/examples/h5_compound.c
+./doc/html/Tutor/examples/h5_copy.c
+./doc/html/Tutor/examples/h5_crtatt.c
+./doc/html/Tutor/examples/h5_crtdat.c
+./doc/html/Tutor/examples/h5_crtfile.c
+./doc/html/Tutor/examples/h5_crtgrp.c
+./doc/html/Tutor/examples/h5_crtgrpar.c
+./doc/html/Tutor/examples/h5_crtgrpd.c
+./doc/html/Tutor/examples/h5_extend.c
+./doc/html/Tutor/examples/h5_hyperslab.c
+./doc/html/Tutor/examples/h5_iterate.c
+./doc/html/Tutor/examples/h5_mount.c
+./doc/html/Tutor/examples/h5_rdwt.c
+./doc/html/Tutor/examples/h5_read.c
+./doc/html/Tutor/examples/h5_ref2objr.c
+./doc/html/Tutor/examples/h5_ref2objw.c
+./doc/html/Tutor/examples/h5_ref2regr.c
+./doc/html/Tutor/examples/h5_ref2regw.c
+./doc/html/Tutor/examples/h5_reference.c
+./doc/html/Tutor/examples/hyperslab.f90
+./doc/html/Tutor/examples/mountexample.f90
+./doc/html/Tutor/examples/refobjexample.f90
+./doc/html/Tutor/examples/refregexample.f90
+./doc/html/Tutor/examples/rwdsetexample.f90
+./doc/html/Tutor/examples/selectele.f90
+
+./doc/html/Tutor/examples/java/Compound.java
+./doc/html/Tutor/examples/java/Copy.java
+./doc/html/Tutor/examples/java/CreateAttribute.java
+./doc/html/Tutor/examples/java/CreateDataset.java
+./doc/html/Tutor/examples/java/CreateFile.java
+./doc/html/Tutor/examples/java/CreateFileInput.java
+./doc/html/Tutor/examples/java/CreateGroup.java
+./doc/html/Tutor/examples/java/CreateGroupAR.java
+./doc/html/Tutor/examples/java/CreateGroupDataset.java
+./doc/html/Tutor/examples/java/DatasetRdWt.java
+./doc/html/Tutor/examples/java/Dependencies
+./doc/html/Tutor/examples/java/HyperSlab.java
+./doc/html/Tutor/examples/java/Makefile.in
+./doc/html/Tutor/examples/java/Makefile
+./doc/html/Tutor/examples/java/README
+./doc/html/Tutor/examples/java/readme.html
+./doc/html/Tutor/examples/java/runCompound.sh
+./doc/html/Tutor/examples/java/runCompound.sh.in
+./doc/html/Tutor/examples/java/runCopy.sh
+./doc/html/Tutor/examples/java/runCopy.sh.in
+./doc/html/Tutor/examples/java/runCreateAttribute.sh
+./doc/html/Tutor/examples/java/runCreateAttribute.sh.in
+./doc/html/Tutor/examples/java/runCreateDataset.sh
+./doc/html/Tutor/examples/java/runCreateDataset.sh.in
+./doc/html/Tutor/examples/java/runCreateFile.sh
+./doc/html/Tutor/examples/java/runCreateFile.sh.in
+./doc/html/Tutor/examples/java/runCreateFileInput.sh
+./doc/html/Tutor/examples/java/runCreateFileInput.sh.in
+./doc/html/Tutor/examples/java/runCreateGroup.sh
+./doc/html/Tutor/examples/java/runCreateGroup.sh.in
+./doc/html/Tutor/examples/java/runCreateGroupAR.sh
+./doc/html/Tutor/examples/java/runCreateGroupAR.sh.in
+./doc/html/Tutor/examples/java/runCreateGroupDataset.sh
+./doc/html/Tutor/examples/java/runCreateGroupDataset.sh.in
+./doc/html/Tutor/examples/java/runDatasetRdWt.sh
+./doc/html/Tutor/examples/java/runDatasetRdWt.sh.in
+./doc/html/Tutor/examples/java/runHyperSlab.sh
+./doc/html/Tutor/examples/java/runHyperSlab.sh.in
+
+./doc/html/cpplus/Dependencies
+./doc/html/cpplus/Makefile.in
+
+./doc/html/cpplus_RM/Dependencies
+./doc/html/cpplus_RM/Makefile.in
+./doc/html/cpplus_RM/H5AbstractDs_8cpp.html
+./doc/html/cpplus_RM/H5AbstractDs_8h-source.html
+./doc/html/cpplus_RM/H5AbstractDs_8h.html
+./doc/html/cpplus_RM/H5Alltypes_8h-source.html
+./doc/html/cpplus_RM/H5Alltypes_8h.html
+./doc/html/cpplus_RM/H5ArrayType_8cpp.html
+./doc/html/cpplus_RM/H5ArrayType_8h-source.html
+./doc/html/cpplus_RM/H5ArrayType_8h.html
+./doc/html/cpplus_RM/H5AtomType_8cpp.html
+./doc/html/cpplus_RM/H5AtomType_8h-source.html
+./doc/html/cpplus_RM/H5AtomType_8h.html
+./doc/html/cpplus_RM/H5Attribute_8cpp.html
+./doc/html/cpplus_RM/H5Attribute_8h-source.html
+./doc/html/cpplus_RM/H5Attribute_8h.html
+./doc/html/cpplus_RM/H5Classes_8h-source.html
+./doc/html/cpplus_RM/H5Classes_8h.html
+./doc/html/cpplus_RM/H5CommonFG_8cpp.html
+./doc/html/cpplus_RM/H5CommonFG_8h-source.html
+./doc/html/cpplus_RM/H5CommonFG_8h.html
+./doc/html/cpplus_RM/H5CompType_8cpp.html
+./doc/html/cpplus_RM/H5CompType_8h-source.html
+./doc/html/cpplus_RM/H5CompType_8h.html
+./doc/html/cpplus_RM/H5CppDoc_8h-source.html
+./doc/html/cpplus_RM/H5CppDoc_8h.html
+./doc/html/cpplus_RM/H5Cpp_8h-source.html
+./doc/html/cpplus_RM/H5Cpp_8h.html
+./doc/html/cpplus_RM/H5DataSet_8cpp.html
+./doc/html/cpplus_RM/H5DataSet_8h-source.html
+./doc/html/cpplus_RM/H5DataSet_8h.html
+./doc/html/cpplus_RM/H5DataSpace_8cpp.html
+./doc/html/cpplus_RM/H5DataSpace_8h-source.html
+./doc/html/cpplus_RM/H5DataSpace_8h.html
+./doc/html/cpplus_RM/H5DataType_8cpp.html
+./doc/html/cpplus_RM/H5DataType_8h-source.html
+./doc/html/cpplus_RM/H5DataType_8h.html
+./doc/html/cpplus_RM/H5DcreatProp_8cpp.html
+./doc/html/cpplus_RM/H5DcreatProp_8h-source.html
+./doc/html/cpplus_RM/H5DcreatProp_8h.html
+./doc/html/cpplus_RM/H5DxferProp_8cpp.html
+./doc/html/cpplus_RM/H5DxferProp_8h-source.html
+./doc/html/cpplus_RM/H5DxferProp_8h.html
+./doc/html/cpplus_RM/H5EnumType_8cpp.html
+./doc/html/cpplus_RM/H5EnumType_8h-source.html
+./doc/html/cpplus_RM/H5EnumType_8h.html
+./doc/html/cpplus_RM/H5Exception_8cpp.html
+./doc/html/cpplus_RM/H5Exception_8h-source.html
+./doc/html/cpplus_RM/H5Exception_8h.html
+./doc/html/cpplus_RM/H5FaccProp_8cpp.html
+./doc/html/cpplus_RM/H5FaccProp_8h-source.html
+./doc/html/cpplus_RM/H5FaccProp_8h.html
+./doc/html/cpplus_RM/H5FcreatProp_8cpp.html
+./doc/html/cpplus_RM/H5FcreatProp_8h-source.html
+./doc/html/cpplus_RM/H5FcreatProp_8h.html
+./doc/html/cpplus_RM/H5File_8cpp.html
+./doc/html/cpplus_RM/H5File_8h-source.html
+./doc/html/cpplus_RM/H5File_8h.html
+./doc/html/cpplus_RM/H5FloatType_8cpp.html
+./doc/html/cpplus_RM/H5FloatType_8h-source.html
+./doc/html/cpplus_RM/H5FloatType_8h.html
+./doc/html/cpplus_RM/H5Group_8cpp.html
+./doc/html/cpplus_RM/H5Group_8h-source.html
+./doc/html/cpplus_RM/H5Group_8h.html
+./doc/html/cpplus_RM/H5IdComponent_8cpp.html
+./doc/html/cpplus_RM/H5IdComponent_8h-source.html
+./doc/html/cpplus_RM/H5IdComponent_8h.html
+./doc/html/cpplus_RM/H5Include_8h-source.html
+./doc/html/cpplus_RM/H5Include_8h.html
+./doc/html/cpplus_RM/H5IntType_8cpp.html
+./doc/html/cpplus_RM/H5IntType_8h-source.html
+./doc/html/cpplus_RM/H5IntType_8h.html
+./doc/html/cpplus_RM/H5Library_8cpp.html
+./doc/html/cpplus_RM/H5Library_8h-source.html
+./doc/html/cpplus_RM/H5Library_8h.html
+./doc/html/cpplus_RM/H5Object_8cpp.html
+./doc/html/cpplus_RM/H5Object_8h-source.html
+./doc/html/cpplus_RM/H5Object_8h.html
+./doc/html/cpplus_RM/H5PredType_8cpp.html
+./doc/html/cpplus_RM/H5PredType_8h-source.html
+./doc/html/cpplus_RM/H5PredType_8h.html
+./doc/html/cpplus_RM/H5PropList_8cpp.html
+./doc/html/cpplus_RM/H5PropList_8h-source.html
+./doc/html/cpplus_RM/H5PropList_8h.html
+./doc/html/cpplus_RM/H5StrType_8cpp.html
+./doc/html/cpplus_RM/H5StrType_8h-source.html
+./doc/html/cpplus_RM/H5StrType_8h.html
+./doc/html/cpplus_RM/H5VarLenType_8cpp.html
+./doc/html/cpplus_RM/H5VarLenType_8h-source.html
+./doc/html/cpplus_RM/H5VarLenType_8h.html
+./doc/html/cpplus_RM/NCSAlogo.jpg
+./doc/html/cpplus_RM/RM_stylesheet.css
+./doc/html/cpplus_RM/annotated.html
+./doc/html/cpplus_RM/chunks_8cpp-example.html
+./doc/html/cpplus_RM/classH5_1_1AbstractDs-members.html
+./doc/html/cpplus_RM/classH5_1_1AbstractDs.html
+./doc/html/cpplus_RM/classH5_1_1AbstractDs.png
+./doc/html/cpplus_RM/classH5_1_1ArrayType.html
+./doc/html/cpplus_RM/classH5_1_1ArrayType.png
+./doc/html/cpplus_RM/classH5_1_1ArrayType-members.html
+./doc/html/cpplus_RM/classH5_1_1AtomType-members.html
+./doc/html/cpplus_RM/classH5_1_1AtomType.html
+./doc/html/cpplus_RM/classH5_1_1AtomType.png
+./doc/html/cpplus_RM/classH5_1_1Attribute-members.html
+./doc/html/cpplus_RM/classH5_1_1Attribute.html
+./doc/html/cpplus_RM/classH5_1_1Attribute.png
+./doc/html/cpplus_RM/classH5_1_1AttributeIException-members.html
+./doc/html/cpplus_RM/classH5_1_1AttributeIException.html
+./doc/html/cpplus_RM/classH5_1_1AttributeIException.png
+./doc/html/cpplus_RM/classH5_1_1CommonFG-members.html
+./doc/html/cpplus_RM/classH5_1_1CommonFG.html
+./doc/html/cpplus_RM/classH5_1_1CommonFG.png
+./doc/html/cpplus_RM/classH5_1_1CompType-members.html
+./doc/html/cpplus_RM/classH5_1_1CompType.html
+./doc/html/cpplus_RM/classH5_1_1CompType.png
+./doc/html/cpplus_RM/classH5_1_1DSetCreatPropList-members.html
+./doc/html/cpplus_RM/classH5_1_1DSetCreatPropList.html
+./doc/html/cpplus_RM/classH5_1_1DSetCreatPropList.png
+./doc/html/cpplus_RM/classH5_1_1DSetMemXferPropList-members.html
+./doc/html/cpplus_RM/classH5_1_1DSetMemXferPropList.html
+./doc/html/cpplus_RM/classH5_1_1DSetMemXferPropList.png
+./doc/html/cpplus_RM/classH5_1_1DataSet-members.html
+./doc/html/cpplus_RM/classH5_1_1DataSet.html
+./doc/html/cpplus_RM/classH5_1_1DataSet.png
+./doc/html/cpplus_RM/classH5_1_1DataSetIException-members.html
+./doc/html/cpplus_RM/classH5_1_1DataSetIException.html
+./doc/html/cpplus_RM/classH5_1_1DataSetIException.png
+./doc/html/cpplus_RM/classH5_1_1DataSpace-members.html
+./doc/html/cpplus_RM/classH5_1_1DataSpace.html
+./doc/html/cpplus_RM/classH5_1_1DataSpace.png
+./doc/html/cpplus_RM/classH5_1_1DataSpaceIException-members.html
+./doc/html/cpplus_RM/classH5_1_1DataSpaceIException.html
+./doc/html/cpplus_RM/classH5_1_1DataSpaceIException.png
+./doc/html/cpplus_RM/classH5_1_1DataType-members.html
+./doc/html/cpplus_RM/classH5_1_1DataType.html
+./doc/html/cpplus_RM/classH5_1_1DataType.png
+./doc/html/cpplus_RM/classH5_1_1DataTypeIException-members.html
+./doc/html/cpplus_RM/classH5_1_1DataTypeIException.html
+./doc/html/cpplus_RM/classH5_1_1DataTypeIException.png
+./doc/html/cpplus_RM/classH5_1_1EnumType-members.html
+./doc/html/cpplus_RM/classH5_1_1EnumType.html
+./doc/html/cpplus_RM/classH5_1_1EnumType.png
+./doc/html/cpplus_RM/classH5_1_1Exception-members.html
+./doc/html/cpplus_RM/classH5_1_1Exception.html
+./doc/html/cpplus_RM/classH5_1_1Exception.png
+./doc/html/cpplus_RM/classH5_1_1FileAccPropList-members.html
+./doc/html/cpplus_RM/classH5_1_1FileAccPropList.html
+./doc/html/cpplus_RM/classH5_1_1FileAccPropList.png
+./doc/html/cpplus_RM/classH5_1_1FileCreatPropList-members.html
+./doc/html/cpplus_RM/classH5_1_1FileCreatPropList.html
+./doc/html/cpplus_RM/classH5_1_1FileCreatPropList.png
+./doc/html/cpplus_RM/classH5_1_1FileIException-members.html
+./doc/html/cpplus_RM/classH5_1_1FileIException.html
+./doc/html/cpplus_RM/classH5_1_1FileIException.png
+./doc/html/cpplus_RM/classH5_1_1FloatType-members.html
+./doc/html/cpplus_RM/classH5_1_1FloatType.html
+./doc/html/cpplus_RM/classH5_1_1FloatType.png
+./doc/html/cpplus_RM/classH5_1_1Group-members.html
+./doc/html/cpplus_RM/classH5_1_1Group.html
+./doc/html/cpplus_RM/classH5_1_1Group.png
+./doc/html/cpplus_RM/classH5_1_1GroupIException-members.html
+./doc/html/cpplus_RM/classH5_1_1GroupIException.html
+./doc/html/cpplus_RM/classH5_1_1GroupIException.png
+./doc/html/cpplus_RM/classH5_1_1H5File-members.html
+./doc/html/cpplus_RM/classH5_1_1H5File.html
+./doc/html/cpplus_RM/classH5_1_1H5File.png
+./doc/html/cpplus_RM/classH5_1_1H5Library-members.html
+./doc/html/cpplus_RM/classH5_1_1H5Library.html
+./doc/html/cpplus_RM/classH5_1_1H5Object-members.html
+./doc/html/cpplus_RM/classH5_1_1H5Object.html
+./doc/html/cpplus_RM/classH5_1_1H5Object.png
+./doc/html/cpplus_RM/classH5_1_1IdComponent-members.html
+./doc/html/cpplus_RM/classH5_1_1IdComponent.html
+./doc/html/cpplus_RM/classH5_1_1IdComponent.png
+./doc/html/cpplus_RM/classH5_1_1IdComponentException-members.html
+./doc/html/cpplus_RM/classH5_1_1IdComponentException.html
+./doc/html/cpplus_RM/classH5_1_1IdComponentException.png
+./doc/html/cpplus_RM/classH5_1_1IntType-members.html
+./doc/html/cpplus_RM/classH5_1_1IntType.html
+./doc/html/cpplus_RM/classH5_1_1IntType.png
+./doc/html/cpplus_RM/classH5_1_1LibraryIException-members.html
+./doc/html/cpplus_RM/classH5_1_1LibraryIException.html
+./doc/html/cpplus_RM/classH5_1_1LibraryIException.png
+./doc/html/cpplus_RM/classH5_1_1PredType-members.html
+./doc/html/cpplus_RM/classH5_1_1PredType.html
+./doc/html/cpplus_RM/classH5_1_1PredType.png
+./doc/html/cpplus_RM/classH5_1_1PropList-members.html
+./doc/html/cpplus_RM/classH5_1_1PropList.html
+./doc/html/cpplus_RM/classH5_1_1PropList.png
+./doc/html/cpplus_RM/classH5_1_1PropListIException-members.html
+./doc/html/cpplus_RM/classH5_1_1PropListIException.html
+./doc/html/cpplus_RM/classH5_1_1PropListIException.png
+./doc/html/cpplus_RM/classH5_1_1ReferenceException-members.html
+./doc/html/cpplus_RM/classH5_1_1ReferenceException.html
+./doc/html/cpplus_RM/classH5_1_1ReferenceException.png
+./doc/html/cpplus_RM/classH5_1_1StrType-members.html
+./doc/html/cpplus_RM/classH5_1_1StrType.html
+./doc/html/cpplus_RM/classH5_1_1StrType.png
+./doc/html/cpplus_RM/classH5_1_1VarLenType.html
+./doc/html/cpplus_RM/classH5_1_1VarLenType.png
+./doc/html/cpplus_RM/classH5_1_1VarLenType-members.html
+./doc/html/cpplus_RM/compound_8cpp-example.html
+./doc/html/cpplus_RM/create_8cpp-example.html
+./doc/html/cpplus_RM/doxygen.css
+./doc/html/cpplus_RM/doxygen.png
+./doc/html/cpplus_RM/examples.html
+./doc/html/cpplus_RM/extend__ds_8cpp-example.html
+./doc/html/cpplus_RM/files.html
+./doc/html/cpplus_RM/functions.html
+./doc/html/cpplus_RM/functions_func.html
+./doc/html/cpplus_RM/functions_vars.html
+
+
+./doc/html/cpplus_RM/functions_0x63.html
+./doc/html/cpplus_RM/functions_0x64.html
+./doc/html/cpplus_RM/functions_0x65.html
+./doc/html/cpplus_RM/functions_0x66.html
+./doc/html/cpplus_RM/functions_0x67.html
+./doc/html/cpplus_RM/functions_0x68.html
+./doc/html/cpplus_RM/functions_0x69.html
+./doc/html/cpplus_RM/functions_0x6c.html
+./doc/html/cpplus_RM/functions_0x6d.html
+./doc/html/cpplus_RM/functions_0x6e.html
+./doc/html/cpplus_RM/functions_0x6f.html
+./doc/html/cpplus_RM/functions_0x70.html
+./doc/html/cpplus_RM/functions_0x72.html
+./doc/html/cpplus_RM/functions_0x73.html
+./doc/html/cpplus_RM/functions_0x74.html
+./doc/html/cpplus_RM/functions_0x75.html
+./doc/html/cpplus_RM/functions_0x76.html
+./doc/html/cpplus_RM/functions_0x77.html
+./doc/html/cpplus_RM/functions_0x7e.html
+./doc/html/cpplus_RM/functions_func_0x63.html
+./doc/html/cpplus_RM/functions_func_0x64.html
+./doc/html/cpplus_RM/functions_func_0x65.html
+./doc/html/cpplus_RM/functions_func_0x66.html
+./doc/html/cpplus_RM/functions_func_0x67.html
+./doc/html/cpplus_RM/functions_func_0x68.html
+./doc/html/cpplus_RM/functions_func_0x69.html
+./doc/html/cpplus_RM/functions_func_0x6c.html
+./doc/html/cpplus_RM/functions_func_0x6d.html
+./doc/html/cpplus_RM/functions_func_0x6e.html
+./doc/html/cpplus_RM/functions_func_0x6f.html
+./doc/html/cpplus_RM/functions_func_0x70.html
+./doc/html/cpplus_RM/functions_func_0x72.html
+./doc/html/cpplus_RM/functions_func_0x73.html
+./doc/html/cpplus_RM/functions_func_0x74.html
+./doc/html/cpplus_RM/functions_func_0x75.html
+./doc/html/cpplus_RM/functions_func_0x76.html
+./doc/html/cpplus_RM/functions_func_0x77.html
+./doc/html/cpplus_RM/functions_func_0x7e.html
+./doc/html/cpplus_RM/h5group_8cpp-example.html
+./doc/html/cpplus_RM/header.html
+./doc/html/cpplus_RM/hierarchy.html
+./doc/html/cpplus_RM/index.html
+./doc/html/cpplus_RM/namespaceH5.html
+./doc/html/cpplus_RM/namespaces.html
+./doc/html/cpplus_RM/namespacestd.html
+./doc/html/cpplus_RM/readdata_8cpp-example.html
+./doc/html/cpplus_RM/writedata_8cpp-example.html
+
+./doc/html/cpplus_RM/header_files/Dependencies
+./doc/html/cpplus_RM/header_files/Makefile.in
+./doc/html/cpplus_RM/header_files/filelist.xml
+./doc/html/cpplus_RM/header_files/image001.jpg
+./doc/html/cpplus_RM/header_files/image002.jpg
+
+./doc/html/ed_libs/Dependencies
+./doc/html/ed_libs/Footer.lbi
+./doc/html/ed_libs/Makefile.in
+./doc/html/ed_libs/NavBar_ADevG.lbi
+./doc/html/ed_libs/NavBar_Common.lbi
+./doc/html/ed_libs/NavBar_Intro.lbi
+./doc/html/ed_libs/NavBar_RM.lbi
+./doc/html/ed_libs/NavBar_TechN.lbi
+./doc/html/ed_libs/NavBar_UG.lbi
+./doc/html/ed_libs/styles_Format.lbi
+./doc/html/ed_libs/styles_Gen.lbi
+./doc/html/ed_libs/styles_Index.lbi
+./doc/html/ed_libs/styles_Intro.lbi
+./doc/html/ed_libs/styles_RM.lbi
+./doc/html/ed_libs/styles_UG.lbi
+
+./doc/html/ed_styles/Dependencies
+./doc/html/ed_styles/FormatElect.css
+./doc/html/ed_styles/FormatPrint.css
+./doc/html/ed_styles/GenElect.css
+./doc/html/ed_styles/GenPrint.css
+./doc/html/ed_styles/IndexElect.css
+./doc/html/ed_styles/IndexPrint.css
+./doc/html/ed_styles/IntroElect.css
+./doc/html/ed_styles/IntroPrint.css
+./doc/html/ed_styles/Makefile.in
+./doc/html/ed_styles/RMelect.css
+./doc/html/ed_styles/RMprint.css
+./doc/html/ed_styles/UGelect.css
+./doc/html/ed_styles/UGprint.css
+
+./doc/html/fortran/Dependencies
+./doc/html/fortran/F90Flags.html
+./doc/html/fortran/F90UserNotes.html
+./doc/html/fortran/Makefile.in
+
+./doc/html/group_p1.gif
+./doc/html/group_p1.obj			_DO_NOT_DISTRIBUTE_
+./doc/html/group_p2.gif
+./doc/html/group_p2.obj			_DO_NOT_DISTRIBUTE_
+./doc/html/group_p3.gif
+./doc/html/group_p3.obj			_DO_NOT_DISTRIBUTE_
+./doc/html/h5s.examples
+./doc/html/hdf2.jpg
+./doc/html/ph5design.html
+./doc/html/ph5example.c
+./doc/html/ph5implement.txt
+./doc/html/pipe1.gif
+./doc/html/pipe1.obj			_DO_NOT_DISTRIBUTE_
+./doc/html/pipe2.gif
+./doc/html/pipe2.obj			_DO_NOT_DISTRIBUTE_
+./doc/html/pipe3.gif
+./doc/html/pipe3.obj			_DO_NOT_DISTRIBUTE_
+./doc/html/pipe4.gif
+./doc/html/pipe4.obj			_DO_NOT_DISTRIBUTE_
+./doc/html/pipe5.gif
+./doc/html/pipe5.obj			_DO_NOT_DISTRIBUTE_
+./doc/html/heap.txt			_DO_NOT_DISTRIBUTE_
+./doc/html/index.html
+./doc/html/move.html			_DO_NOT_DISTRIBUTE_
+./doc/html/review1.html			_DO_NOT_DISTRIBUTE_
+./doc/html/review1a.html		_DO_NOT_DISTRIBUTE_
+./doc/html/storage.html			_DO_NOT_DISTRIBUTE_
+./doc/html/symtab			_DO_NOT_DISTRIBUTE_
+./doc/html/version.gif
+./doc/html/version.obj			_DO_NOT_DISTRIBUTE_
+./doc/src/Copyright.html		_DO_NOT_DISTRIBUTE_
+./doc/src/Glossary.html			_DO_NOT_DISTRIBUTE_
+./doc/src/H5.intro.doc			_DO_NOT_DISTRIBUTE_
+./doc/src/RM_H5.html			_DO_NOT_DISTRIBUTE_
+./doc/src/RM_H5A.html			_DO_NOT_DISTRIBUTE_
+./doc/src/RM_H5D.html			_DO_NOT_DISTRIBUTE_
+./doc/src/RM_H5E.html			_DO_NOT_DISTRIBUTE_
+./doc/src/RM_H5F.html			_DO_NOT_DISTRIBUTE_
+./doc/src/RM_H5Front.html		_DO_NOT_DISTRIBUTE_
+./doc/src/RM_H5G.html			_DO_NOT_DISTRIBUTE_
+./doc/src/RM_H5P.html			_DO_NOT_DISTRIBUTE_
+./doc/src/RM_H5R.html			_DO_NOT_DISTRIBUTE_
+./doc/src/RM_H5S.html			_DO_NOT_DISTRIBUTE_
+./doc/src/RM_H5T.html			_DO_NOT_DISTRIBUTE_
+./doc/src/RM_H5Z.html			_DO_NOT_DISTRIBUTE_
+./doc/src/Tools.html			_DO_NOT_DISTRIBUTE_
+./doc/tgif/APIGrammar.obj		_DO_NOT_DISTRIBUTE_
+./doc/tgif/FileGrammar.obj		_DO_NOT_DISTRIBUTE_
+./doc/tgif/IOPipe.obj			_DO_NOT_DISTRIBUTE_
+./doc/tgif/RobbPipe.obj			_DO_NOT_DISTRIBUTE_
+./doc/tgif/UserView.obj			_DO_NOT_DISTRIBUTE_
+
+./examples/Attributes.txt
+./examples/Dependencies
+./examples/Makefile.in
+./examples/h5_chunk_read.c
+./examples/h5_compound.c
+./examples/h5_drivers.c
+./examples/h5_extend_write.c
+./examples/h5_group.c
+./examples/h5_read.c
+./examples/h5_write.c
+./examples/h5_select.c
+./examples/h5_attribute.c
+./examples/h5_mount.c
+./examples/h5_reference.c
+./examples/ph5example.c
+
+
+#------------------------------------------------------------------------------
+#
+# Begin Fortran interface
+#
+#------------------------------------------------------------------------------
+
+./fortran/Makefile.dist
+./fortran/Makefile.in
+./fortran/aclocal.m4
+./fortran/acsite.m4
+./fortran/configure
+./fortran/configure.in
+
+./fortran/config/BlankForm
+./fortran/config/commence.in
+./fortran/config/conclude.in
+./fortran/config/dec-flags
+./fortran/config/dec-osf4.x
+./fortran/config/dec-osf5.x
+./fortran/config/depend
+./fortran/config/depend1.in
+./fortran/config/depend2.in
+./fortran/config/depend3.in
+./fortran/config/depend4.in
+./fortran/config/dependN.in
+./fortran/config/freebsd
+./fortran/config/gnu-flags
+./fortran/config/hpux10.20
+./fortran/config/hpux11.00
+./fortran/config/hpux11.23
+./fortran/config/hpux9.03
+./fortran/config/i386-pc-cygwin32
+./fortran/config/ia64-linux-gnu
+./fortran/config/intel-fflags
+./fortran/config/intel-flags
+./fortran/config/intel-osf1
+./fortran/config/irix5.x
+./fortran/config/irix6.x
+./fortran/config/linux-gnu
+./fortran/config/linux-gnuaout
+./fortran/config/linux-gnulibc1
+./fortran/config/linux-gnulibc2
+./fortran/config/nv1-cray
+./fortran/config/pgi-fflags
+./fortran/config/pgi-flags
+./fortran/config/powerpc-apple
+./fortran/config/powerpc-ibm-aix4.x
+./fortran/config/powerpc-ibm-aix5.x
+./fortran/config/rs6000-ibm-aix4.x
+./fortran/config/solaris2.x
+./fortran/config/sv1-cray
+./fortran/config/unicos
+./fortran/config/unicos10.0.X
+./fortran/config/unicosmk
+./fortran/config/unicosmk2.0.X
+./fortran/config/unicosmk2.0.5.X
+./fortran/config/unicosmk2.0.6.X
+
+./fortran/examples/Dependencies
+./fortran/examples/Makefile.in
+./fortran/examples/attrexample.f90
+./fortran/examples/compound.f90
+./fortran/examples/dsetexample.f90
+./fortran/examples/fileexample.f90
+./fortran/examples/groupexample.f90
+./fortran/examples/grpdsetexample.f90
+./fortran/examples/grpit.f90
+./fortran/examples/grpsexample.f90
+./fortran/examples/hyperslab.f90
+./fortran/examples/mountexample.f90
+./fortran/examples/refobjexample.f90
+./fortran/examples/refregexample.f90
+./fortran/examples/rwdsetexample.f90
+./fortran/examples/selectele.f90
+
+./fortran/src/Dependencies
+./fortran/src/H5_f.c
+./fortran/src/H5_ff.f90
+./fortran/src/H5Af.c
+./fortran/src/H5Aff.f90
+./fortran/src/H5config_fortran.h.in
+./fortran/src/H5Df.c
+./fortran/src/H5Dff.f90
+./fortran/src/H5Ef.c
+./fortran/src/H5Eff.f90
+./fortran/src/H5FDmpiof.c
+./fortran/src/H5FDmpioff.f90
+./fortran/src/H5Ff.c
+./fortran/src/H5Fff.f90
+./fortran/src/H5Gf.c
+./fortran/src/H5Gff.f90
+./fortran/src/H5If.c
+./fortran/src/H5Iff.f90
+./fortran/src/H5Pf.c
+./fortran/src/H5Pff.f90
+./fortran/src/H5Rf.c
+./fortran/src/H5Rff.f90
+./fortran/src/H5Sf.c
+./fortran/src/H5Sff.f90
+./fortran/src/H5Tf.c
+./fortran/src/H5Tff.f90
+./fortran/src/H5Zf.c
+./fortran/src/H5Zff.f90
+./fortran/src/H5f90.h
+./fortran/src/H5f90global.f90
+./fortran/src/H5f90i.h
+./fortran/src/H5f90kit.c
+./fortran/src/H5f90proto.h
+./fortran/src/H5fortran_flags.f90
+./fortran/src/H5fortran_types.f90.in
+./fortran/src/HDF5.f90
+./fortran/src/HDF5mpio.f90
+./fortran/src/Makefile.in
+./fortran/src/README
+./fortran/src/h5fc.in
+./fortran/src/libhdf5_fortran.settings.in
+
+./fortran/test/Dependencies
+./fortran/test/Makefile.in
+./fortran/test/fflush1.f90
+./fortran/test/fflush2.f90
+./fortran/test/fortranlib_test.f90
+./fortran/test/t.c
+./fortran/test/t.h
+./fortran/test/tf.f90
+./fortran/test/tH5A.f90
+./fortran/test/tH5D.f90
+./fortran/test/tH5E.f90
+./fortran/test/tH5F.f90
+./fortran/test/tH5G.f90
+./fortran/test/tH5I.f90
+./fortran/test/tH5P.f90
+./fortran/test/tH5R.f90
+./fortran/test/tH5S.f90
+./fortran/test/tH5Sselect.f90
+./fortran/test/tH5T.f90
+./fortran/test/tH5VL.f90
+./fortran/test/tH5Z.f90
+
+./fortran/testpar/Dependencies
+./fortran/testpar/Makefile.in
+./fortran/testpar/ptesthdf5_fortran.f90
+./fortran/testpar/thdf5.f90
+./fortran/testpar/thyperslab_wr.f90
+
+#------------------------------------------------------------------------------
+#
+# End Fortran interface
+#
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+#
+# Begin C++ interface
+#
+#------------------------------------------------------------------------------
+
+./c++/Makefile.in
+./c++/aclocal.m4
+./c++/configure
+./c++/configure.in
+
+./c++/config/BlankForm
+./c++/config/commence.in
+./c++/config/conclude.in
+./c++/config/dec-osf5.x
+./c++/config/depend1.in
+./c++/config/depend2.in
+./c++/config/depend3.in
+./c++/config/depend4.in
+./c++/config/dependN.in
+./c++/config/freebsd
+./c++/config/hpux11.00
+./c++/config/hpux11.23
+./c++/config/ia64-linux-gnu
+./c++/config/irix6.x
+./c++/config/linux-gnu
+./c++/config/linux-gnulibc1
+./c++/config/linux-gnulibc2
+./c++/config/nv1-cray
+./c++/config/powerpc-ibm-aix
+./c++/config/rs6000-ibm-aix4.x
+./c++/config/solaris2.x
+./c++/config/sv1-cray
+./c++/config/unicos10.0.X
+./c++/config/unicosmk2.0.6.X
+
+./c++/examples/Dependencies
+./c++/examples/chunks.cpp
+./c++/examples/compound.cpp
+./c++/examples/create.cpp
+./c++/examples/expected.out
+./c++/examples/extend_ds.cpp
+./c++/examples/h5group.cpp
+./c++/examples/readdata.cpp
+./c++/examples/testexamples.sh
+./c++/examples/writedata.cpp
+./c++/examples/Makefile.in
+
+./c++/src/Dependencies
+./c++/src/H5AbstractDs.cpp
+./c++/src/H5AbstractDs.h
+./c++/src/H5Alltypes.h
+./c++/src/H5ArrayType.cpp
+./c++/src/H5ArrayType.h
+./c++/src/H5AtomType.cpp
+./c++/src/H5AtomType.h
+./c++/src/H5Attribute.cpp
+./c++/src/H5Attribute.h
+./c++/src/H5Classes.h
+./c++/src/H5CommonFG.cpp
+./c++/src/H5CommonFG.h
+./c++/src/H5CompType.cpp
+./c++/src/H5CompType.h
+./c++/src/H5Cpp.h
+./c++/src/H5CppDoc.h
+./c++/src/H5DataSet.cpp
+./c++/src/H5DataSet.h
+./c++/src/H5DataSpace.cpp
+./c++/src/H5DataSpace.h
+./c++/src/H5DataType.cpp
+./c++/src/H5DataType.h
+./c++/src/H5DcreatProp.cpp
+./c++/src/H5DcreatProp.h
+./c++/src/H5DxferProp.cpp
+./c++/src/H5DxferProp.h
+./c++/src/H5EnumType.cpp
+./c++/src/H5EnumType.h
+./c++/src/H5Exception.cpp
+./c++/src/H5Exception.h
+./c++/src/H5FaccProp.cpp
+./c++/src/H5FaccProp.h
+./c++/src/H5FcreatProp.cpp
+./c++/src/H5FcreatProp.h
+./c++/src/H5File.cpp
+./c++/src/H5File.h
+./c++/src/H5FloatType.cpp
+./c++/src/H5FloatType.h
+./c++/src/H5Group.cpp
+./c++/src/H5Group.h
+./c++/src/H5IdComponent.cpp
+./c++/src/H5IdComponent.h
+./c++/src/H5Include.h
+./c++/src/H5IntType.cpp
+./c++/src/H5IntType.h
+./c++/src/H5Library.cpp
+./c++/src/H5Library.h
+./c++/src/H5Object.cpp
+./c++/src/H5Object.h
+./c++/src/H5PredType.cpp
+./c++/src/H5PredType.h
+./c++/src/H5PropList.cpp
+./c++/src/H5PropList.h
+./c++/src/H5StrType.cpp
+./c++/src/H5StrType.h
+./c++/src/H5VarLenType.cpp
+./c++/src/H5VarLenType.h
+./c++/src/Makefile.in
+./c++/src/RM_stylesheet.css
+./c++/src/cpp_doc_config
+./c++/src/h5c++.in
+./c++/src/header.html
+./c++/src/header_files/filelist.xml
+./c++/src/header_files/image001.jpg
+./c++/src/header_files/image002.jpg
+
+./c++/test/Dependencies
+./c++/test/Makefile.in
+./c++/test/dsets.cpp
+./c++/test/h5cpputil.cpp
+./c++/test/h5cpputil.h
+./c++/test/testhdf5.cpp
+./c++/test/tfile.cpp
+./c++/test/th5s.cpp
+./c++/test/th5s.h5
+
+#------------------------------------------------------------------------------
+#
+# End C++ interface
+#
+#------------------------------------------------------------------------------
+
+./perform/Dependencies
+./perform/Makefile.in
+./perform/benchpar.c
+./perform/chunk.c
+./perform/gen_report.pl
+./perform/iopipe.c
+./perform/mpi-perf.c
+./perform/overhead.c
+./perform/perf.c
+./perform/perf_meta.c
+./perform/pio_engine.c
+./perform/pio_perf.c
+./perform/pio_perf.h
+./perform/pio_timer.c
+./perform/pio_timer.h
+./perform/zip_perf.c
+
+./release_docs/INSTALL
+./release_docs/INSTALL_TFLOPS
+./release_docs/INSTALL_VFL
+./release_docs/INSTALL_parallel
+./release_docs/INSTALL_Windows.txt
+./release_docs/INSTALL_Windows_From_Command_Line.txt
+./release_docs/INSTALL_Windows_Short.txt
+./release_docs/INSTALL_codewarrior.txt
+./release_docs/HISTORY.txt
+./release_docs/RELEASE.txt
+
+./src/.indent.pro			_DO_NOT_DISTRIBUTE_
+./src/hdf5.lnt				_DO_NOT_DISTRIBUTE_
+./src/hdf5-lin.lnt			_DO_NOT_DISTRIBUTE_
+./src/hdf5-win.lnt			_DO_NOT_DISTRIBUTE_
+./src/Dependencies
+./src/H5.c
+./src/H5api_adpt.h
+./src/H5A.c
+./src/H5Aprivate.h
+./src/H5Apublic.h
+./src/H5Apkg.h
+./src/H5AC.c
+./src/H5ACprivate.h
+./src/H5ACpublic.h
+./src/H5B.c
+./src/H5Bpkg.h
+./src/H5Bprivate.h
+./src/H5Bpublic.h
+./src/H5C.c
+./src/H5Cprivate.h
+./src/H5Cpublic.h
+./src/H5D.c
+./src/H5Dcontig.c
+./src/H5Dcompact.c
+./src/H5Defl.c
+./src/H5Dio.c
+./src/H5Distore.c
+./src/H5Dmpio.c
+./src/H5Dprivate.h
+./src/H5Dpublic.h
+./src/H5Dpkg.h
+./src/H5Dselect.c
+./src/H5Dtest.c
+./src/H5E.c
+./src/H5Eprivate.h
+./src/H5Epublic.h
+./src/H5F.c
+./src/H5Fdbg.c
+./src/H5Fmount.c
+./src/H5Fsfile.c
+./src/H5Fsuper.c
+./src/H5Fpkg.h
+./src/H5Fprivate.h
+./src/H5Fpublic.h
+./src/H5FD.c
+./src/H5FDcore.c
+./src/H5FDcore.h
+./src/H5FDfamily.c
+./src/H5FDfamily.h
+./src/H5FDgass.c
+./src/H5FDgass.h
+./src/H5FDlog.c
+./src/H5FDlog.h
+./src/H5FDmpi.c
+./src/H5FDmpi.h
+./src/H5FDmpio.c
+./src/H5FDmpio.h
+./src/H5FDmpiposix.c
+./src/H5FDmpiposix.h
+./src/H5FDmulti.c
+./src/H5FDmulti.h
+./src/H5FDprivate.h
+./src/H5FDpublic.h
+./src/H5FDsec2.c
+./src/H5FDsec2.h
+./src/H5FDsrb.c
+./src/H5FDsrb.h
+./src/H5FDstdio.c
+./src/H5FDstdio.h
+./src/H5FDstream.c
+./src/H5FDstream.h
+./src/H5FL.c
+./src/H5FLprivate.h
+./src/H5FO.c
+./src/H5FOprivate.h
+./src/H5FS.c
+./src/H5FSprivate.h
+./src/H5G.c
+./src/H5Gent.c
+./src/H5Gnode.c
+./src/H5Gpkg.h
+./src/H5Gprivate.h
+./src/H5Gpublic.h
+./src/H5Gstab.c
+./src/H5HG.c
+./src/H5HGdbg.c
+./src/H5HGpkg.h
+./src/H5HGprivate.h
+./src/H5HGpublic.h
+./src/H5HL.c
+./src/H5HLdbg.c
+./src/H5HLpkg.h
+./src/H5HLprivate.h
+./src/H5HLpublic.h
+./src/H5HP.c
+./src/H5HPprivate.h
+./src/H5I.c
+./src/H5Ipkg.h
+./src/H5Iprivate.h
+./src/H5Ipublic.h
+./src/H5MF.c
+./src/H5MFprivate.h
+./src/H5MM.c
+./src/H5MMprivate.h
+./src/H5MMpublic.h
+./src/H5MPprivate.h
+./src/H5O.c
+./src/H5Oattr.c
+./src/H5Obogus.c
+./src/H5Ocont.c
+./src/H5Odtype.c
+./src/H5Oefl.c
+./src/H5Ofill.c
+./src/H5Olayout.c
+./src/H5Omtime.c
+./src/H5Oname.c
+./src/H5Onull.c
+./src/H5Opkg.h
+./src/H5Opline.c
+./src/H5Oprivate.h
+./src/H5Opublic.h
+./src/H5Osdspace.c
+./src/H5Oshared.c
+./src/H5Ostab.c
+./src/H5P.c
+./src/H5Pdcpl.c
+./src/H5Pdxpl.c
+./src/H5Pfapl.c
+./src/H5Pfcpl.c
+./src/H5Ppkg.h
+./src/H5Pprivate.h
+./src/H5Ppublic.h
+./src/H5Ptest.c
+./src/H5R.c
+./src/H5Rprivate.h
+./src/H5Rpublic.h
+./src/H5RC.c
+./src/H5RCprivate.h
+./src/H5RS.c
+./src/H5RSprivate.h
+./src/H5S.c
+./src/H5Sall.c
+./src/H5Shyper.c
+./src/H5Smpio.c
+./src/H5Snone.c
+./src/H5Spkg.h
+./src/H5Spoint.c
+./src/H5Sprivate.h
+./src/H5Spublic.h
+./src/H5Sselect.c
+./src/H5Stest.c
+./src/H5SL.c
+./src/H5SLprivate.h
+./src/H5ST.c
+./src/H5STprivate.h
+./src/H5T.c
+./src/H5Tarray.c
+./src/H5Tbit.c
+./src/H5Tcommit.c
+./src/H5Tcompound.c
+./src/H5Tconv.c
+./src/H5Tcset.c
+./src/H5Tenum.c
+./src/H5Tfields.c
+./src/H5Tfixed.c
+./src/H5Tfloat.c
+./src/H5Tnative.c
+./src/H5Toffset.c
+./src/H5Topaque.c
+./src/H5Torder.c
+./src/H5Tpad.c
+./src/H5Tpkg.h
+./src/H5Tprecis.c
+./src/H5Tprivate.h
+./src/H5Tpublic.h
+./src/H5Tstrpad.c
+./src/H5Tvlen.c
+./src/H5TS.c
+./src/H5TSprivate.h
+./src/H5V.c
+./src/H5Vprivate.h
+./src/H5Z.c
+./src/H5Zfletcher32.c
+./src/H5Zdeflate.c
+./src/H5Zpkg.h
+./src/H5Zprivate.h
+./src/H5Zpublic.h
+./src/H5Zszip.c
+./src/H5Zshuffle.c
+./src/H5config.h.in
+./src/H5detect.c
+./src/H5private.h
+./src/H5public.h
+./src/Makefile.in
+./src/hdf5.h
+./src/libhdf5.settings.in
+
+./test/Dependencies
+./test/Makefile.in
+./test/big.c
+./test/bittests.c
+./test/cache.c
+./test/cmpd_dset.c
+./test/dangle.c
+./test/deflate.h5
+./test/dsets.c
+./test/dtypes.c
+./test/enum.c
+./test/extend.c
+./test/external.c
+./test/family_v1.7_00000.h5
+./test/family_v1.7_00001.h5
+./test/family_v1.7_00002.h5
+./test/family_v1.7_00003.h5
+./test/file_handle.c
+./test/fill_old.h5
+./test/fillval.c
+./test/flush1.c
+./test/flush2.c
+./test/gass_append.c
+./test/gass_read.c
+./test/gass_write.c
+./test/getname.c
+./test/gheap.c
+./test/h5test.c
+./test/h5test.h
+./test/hyperslab.c
+./test/istore.c
+./test/lheap.c
+./test/links.c
+./test/mount.c
+./test/mtime.c
+./test/noencoder.h5
+./test/ntypes.c
+./test/ohdr.c
+./test/reserved.c
+./test/space_overflow.c			_DO_NOT_DISTRIBUTE_
+./test/gen_deflate.c			_DO_NOT_DISTRIBUTE_
+./test/gen_old_array.c			_DO_NOT_DISTRIBUTE_
+./test/gen_new_array.c			_DO_NOT_DISTRIBUTE_
+./test/gen_new_fill.c			_DO_NOT_DISTRIBUTE_
+./test/gen_old_layout.c			_DO_NOT_DISTRIBUTE_
+./test/gen_old_mtime.c			_DO_NOT_DISTRIBUTE_
+./test/gen_new_mtime.c			_DO_NOT_DISTRIBUTE_
+./test/gen_new_super.c			_DO_NOT_DISTRIBUTE_
+./test/gen_nullspace.c			_DO_NOT_DISTRIBUTE_
+./test/set_extent.c
+./test/srb_append.c
+./test/srb_read.c
+./test/srb_write.c
+./test/stab.c
+./test/stream_test.c
+./test/tarray.c
+./test/tarrold.h5
+./test/tattr.c
+./test/tbogus.h5
+./test/tconfig.c
+./test/testframe.c
+./test/testhdf5.c
+./test/testhdf5.h
+./test/testmeta.c
+./test/tfile.c
+./test/tgenprop.c
+./test/th5s.c
+./test/th5s.h5
+./test/theap.c
+./test/titerate.c
+./test/tlayouto.h5
+./test/tmeta.c
+./test/tmisc.c
+./test/tmtimen.h5
+./test/tmtimeo.h5
+./test/tnullspace.h5
+./test/ttime.c
+./test/trefer.c
+./test/trefstr.c
+./test/tselect.c
+./test/tskiplist.c
+./test/ttst.c
+./test/ttsafe.c
+./test/ttsafe.h
+./test/ttsafe_acreate.c
+./test/ttsafe_cancel.c
+./test/ttsafe_dcreate.c
+./test/ttsafe_error.c
+./test/tvlstr.c
+./test/tvltypes.c
+./test/unlink.c
+./test/test_filters_be.hdf5
+./test/test_filters_le.hdf5
+
+
+./testpar/Dependencies
+./testpar/Makefile.in
+./testpar/t_dset.c
+./testpar/t_file.c
+./testpar/t_mdset.c
+./testpar/t_mpi.c
+./testpar/t_ph5basic.c
+./testpar/t_coll_chunk.c
+./testpar/t_span_tree.c
+./testpar/testphdf5.c
+./testpar/testphdf5.h
+./testpar/testph5.sh.in
+
+./tools/Dependencies
+./tools/Makefile.in
+
+./tools/gifconv/Dependencies
+./tools/gifconv/Makefile.in
+./tools/gifconv/decompress.c
+./tools/gifconv/gif.h
+./tools/gifconv/gif2hdf.c
+./tools/gifconv/gif2mem.c
+./tools/gifconv/gifread.c
+./tools/gifconv/hdf2gif.c
+./tools/gifconv/hdfgifwr.c
+./tools/gifconv/readhdf.c
+./tools/gifconv/writehdf.c
+
+./tools/h5dump/Dependencies
+./tools/h5dump/Makefile.in
+./tools/h5dump/h5dump.c
+./tools/h5dump/h5dump.h
+./tools/h5dump/h5dumpgentest.c
+./tools/h5dump/testh5dump.sh.in
+./tools/h5dump/testh5dumpxml.sh
+
+./tools/h5import/Dependencies
+./tools/h5import/Makefile.in
+./tools/h5import/h5import.h
+./tools/h5import/h5import.c
+./tools/h5import/h5importtest.c
+./tools/h5import/h5importtestutil.sh
+./tools/h5import/testfiles/conbfp32
+./tools/h5import/testfiles/conbfp64
+./tools/h5import/testfiles/conbin16
+./tools/h5import/testfiles/conbin32
+./tools/h5import/testfiles/conbin8
+./tools/h5import/testfiles/conbuin16
+./tools/h5import/testfiles/conbuin32
+./tools/h5import/testfiles/fp1
+./tools/h5import/testfiles/fp2
+./tools/h5import/testfiles/in1
+./tools/h5import/testfiles/textfp32
+./tools/h5import/testfiles/textfp64
+./tools/h5import/testfiles/textin16
+./tools/h5import/testfiles/textin32
+./tools/h5import/testfiles/textin8
+./tools/h5import/testfiles/textuin16
+./tools/h5import/testfiles/textuin32
+./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/h5diff/Dependencies
+./tools/h5diff/Makefile.in
+./tools/h5diff/h5diff_main.c
+./tools/h5diff/testh5diff_attr.c
+./tools/h5diff/testh5diff_basic.c
+./tools/h5diff/testh5diff_dset.c
+./tools/h5diff/testh5diff_main.c
+./tools/h5diff/testh5diff_util.c
+./tools/h5diff/testh5diff.h
+./tools/h5diff/testh5diff.sh
+
+
+# h5repack sources
+./tools/h5repack/Dependencies
+./tools/h5repack/Makefile.in
+./tools/h5repack/h5repack.sh.in
+./tools/h5repack/h5repack.c
+./tools/h5repack/h5repack.h
+./tools/h5repack/h5repack_copy.c
+./tools/h5repack/h5repack_filters.c
+./tools/h5repack/h5repack_list.c
+./tools/h5repack/h5repack_main.c
+./tools/h5repack/h5repack_opttable.c
+./tools/h5repack/h5repack_parse.c
+./tools/h5repack/h5repack_refs.c
+./tools/h5repack/h5repack_verify.c
+./tools/h5repack/testh5repack_attr.c
+./tools/h5repack/testh5repack_dset.c
+./tools/h5repack/testh5repack_main.c
+./tools/h5repack/testh5repack_make.c
+./tools/h5repack/testh5repack_util.c
+./tools/h5repack/testh5repack_detect_szip.c
+
+./tools/h5ls/Dependencies
+./tools/h5ls/Makefile.in
+./tools/h5ls/h5ls.c
+./tools/h5ls/testh5ls.sh
+
+./tools/lib/Dependencies
+./tools/lib/Makefile.in
+./tools/lib/h5diff.c
+./tools/lib/h5diff.h
+./tools/lib/h5diff_array.c
+./tools/lib/h5diff_attr.c
+./tools/lib/h5diff_dset.c
+./tools/lib/h5diff_util.c
+./tools/lib/h5trav.c
+./tools/lib/h5trav.h
+./tools/lib/h5trav_table.c
+./tools/lib/h5tools.c
+./tools/lib/h5tools.h
+./tools/lib/h5tools_filters.c
+./tools/lib/h5tools_str.c
+./tools/lib/h5tools_str.h
+./tools/lib/h5tools_utils.c
+./tools/lib/h5tools_utils.h
+./tools/lib/h5tools_ref.c
+./tools/lib/h5tools_ref.h
+./tools/lib/h5tools_type.c
+./tools/lib/talign.c
+
+./tools/misc/Dependencies
+./tools/misc/Makefile.in
+./tools/misc/h5cc.in
+./tools/misc/h5debug.c
+./tools/misc/h5redeploy.in
+./tools/misc/h5repart.c
+
+./tools/testfiles/tall-1.ddl
+./tools/testfiles/tall-2.ddl
+./tools/testfiles/tall-3.ddl
+./tools/testfiles/tall-4s.ddl
+./tools/testfiles/tall-5s.ddl
+./tools/testfiles/tall.h5
+./tools/testfiles/tarray1.ddl
+./tools/testfiles/tarray1.h5
+./tools/testfiles/tarray1.ls
+./tools/testfiles/tarray2.ddl
+./tools/testfiles/tarray2.h5
+./tools/testfiles/tarray3.ddl
+./tools/testfiles/tarray3.h5
+./tools/testfiles/tarray4.ddl
+./tools/testfiles/tarray4.h5
+./tools/testfiles/tarray5.ddl
+./tools/testfiles/tarray5.h5
+./tools/testfiles/tarray6.ddl
+./tools/testfiles/tarray6.h5
+./tools/testfiles/tarray7.ddl
+./tools/testfiles/tarray7.h5
+./tools/testfiles/tattr-1.ddl
+./tools/testfiles/tattr-2.ddl
+./tools/testfiles/tattr-3.ddl
+./tools/testfiles/tattr.h5
+./tools/testfiles/tbitfields-1.ddl
+./tools/testfiles/tbitfields.h5
+./tools/testfiles/tchar.h5
+./tools/testfiles/tchar1.ddl
+./tools/testfiles/tcomp-1.ddl
+./tools/testfiles/tcomp-2.ddl
+./tools/testfiles/tcomp-3.ddl
+./tools/testfiles/tcomp-4.ddl
+./tools/testfiles/tcompound.h5
+./tools/testfiles/tcompound2.h5
+./tools/testfiles/tcompound_complex.h5
+./tools/testfiles/tdatareg.h5
+./tools/testfiles/tdatareg.ddl 
+./tools/testfiles/tdset-1.ddl
+./tools/testfiles/tdset-2.ddl
+./tools/testfiles/tdset-3s.ddl
+./tools/testfiles/tdset.h5
+./tools/testfiles/tdset2-1s.ddl
+./tools/testfiles/tdset2.h5
+./tools/testfiles/tempty.ddl
+./tools/testfiles/tempty.h5
+./tools/testfiles/tempty.ls
+./tools/testfiles/tenum.h5
+./tools/testfiles/tenum.ddl
+./tools/testfiles/tfamily.ddl
+./tools/testfiles/tfamily00000.h5
+./tools/testfiles/tfamily00001.h5
+./tools/testfiles/tfamily00002.h5
+./tools/testfiles/tfamily00003.h5
+./tools/testfiles/tfamily00004.h5
+./tools/testfiles/tfamily00005.h5
+./tools/testfiles/tfamily00006.h5
+./tools/testfiles/tfamily00007.h5
+./tools/testfiles/tfamily00008.h5
+./tools/testfiles/tfamily00009.h5
+./tools/testfiles/tfamily00010.h5
+./tools/testfiles/tgroup-1.ddl
+./tools/testfiles/tgroup-2.ddl
+./tools/testfiles/tgroup.h5
+./tools/testfiles/tgrp_comments.ddl
+./tools/testfiles/tgrp_comments.h5
+./tools/testfiles/thlink-1.ddl
+./tools/testfiles/thlink-2.ddl
+./tools/testfiles/thlink-3.ddl
+./tools/testfiles/thlink-4.ddl
+./tools/testfiles/thlink-5.ddl
+./tools/testfiles/thlink.h5
+./tools/testfiles/tlarge_objname.ddl
+./tools/testfiles/tlarge_objname.h5
+./tools/testfiles/tlonglinks.ddl
+./tools/testfiles/tlonglinks.h5
+./tools/testfiles/tloop-1.ddl
+./tools/testfiles/tloop.h5
+./tools/testfiles/tloop2.h5
+./tools/testfiles/tmany.h5
+./tools/testfiles/tmulti-b.h5
+./tools/testfiles/tmulti.ddl
+./tools/testfiles/tmulti-g.h5
+./tools/testfiles/tmulti-l.h5
+./tools/testfiles/tmulti-o.h5
+./tools/testfiles/tmulti-r.h5
+./tools/testfiles/tmulti-s.h5
+./tools/testfiles/tnestcomp-1.ddl
+./tools/testfiles/tnestedcomp.h5
+./tools/testfiles/tnofilename.ddl
+./tools/testfiles/tobjref.h5
+./tools/testfiles/tobjref.ddl
+./tools/testfiles/topaque.h5
+./tools/testfiles/topaque.ddl
+./tools/testfiles/tsaf.ddl
+./tools/testfiles/tsaf.h5
+./tools/testfiles/tslink-1.ddl
+./tools/testfiles/tslink-2.ddl
+./tools/testfiles/tslink.h5
+./tools/testfiles/tsplit_file-m.h5
+./tools/testfiles/tsplit_file-r.h5
+./tools/testfiles/tsplit_file.ddl
+./tools/testfiles/tstr-1.ddl
+./tools/testfiles/tstr.h5
+./tools/testfiles/tstr2.h5
+./tools/testfiles/tstr-2.ddl
+./tools/testfiles/tvldtypes1.ddl
+./tools/testfiles/tvldtypes1.h5
+./tools/testfiles/tvldtypes1.ls
+./tools/testfiles/tvldtypes2.ddl
+./tools/testfiles/tvldtypes2.h5
+./tools/testfiles/tvldtypes3.ddl
+./tools/testfiles/tvldtypes3.h5
+./tools/testfiles/tvldtypes4.ddl
+./tools/testfiles/tvldtypes4.h5
+./tools/testfiles/tvldtypes5.ddl
+./tools/testfiles/tvldtypes5.h5
+./tools/testfiles/tvlstr.h5
+./tools/testfiles/tvlstr.ddl
+./tools/testfiles/tattr2.h5
+./tools/testfiles/tall-2A.ddl
+./tools/testfiles/tall-2B.ddl
+./tools/testfiles/tcontents.ddl
+./tools/testfiles/tfilters.h5
+./tools/testfiles/tchunked.ddl
+./tools/testfiles/tcompact.ddl
+./tools/testfiles/tcontiguos.ddl
+./tools/testfiles/tdeflate.ddl
+./tools/testfiles/texternal.ddl
+./tools/testfiles/tfletcher32.ddl
+./tools/testfiles/treference.ddl
+./tools/testfiles/tshuffle.ddl
+./tools/testfiles/tstring.ddl
+./tools/testfiles/tszip.ddl
+./tools/testfiles/tuserfilter.ddl
+./tools/testfiles/tallfilters.ddl
+./tools/testfiles/tstringe.ddl
+./tools/testfiles/tindicesyes.ddl
+./tools/testfiles/tindicesno.ddl
+./tools/testfiles/tfcontents1.h5
+./tools/testfiles/tfcontents2.h5
+./tools/testfiles/tboot1.ddl
+./tools/testfiles/tboot2.ddl
+./tools/testfiles/tperror.ddl
+./tools/testfiles/tfill.ddl
+./tools/testfiles/tfvalues.h5
+./tools/testfiles/tstring2.ddl
+./tools/testfiles/tstr3.h5
+./tools/testfiles/taindices.h5
+./tools/testfiles/test_all.h5
+./tools/testfiles/test_deflate.h5
+./tools/testfiles/test_fletcher32.h5
+./tools/testfiles/test_shuffle.h5
+./tools/testfiles/test_szip.h5
+
+
+
+# Expected output from h5ls tests
+./tools/testfiles/help-1.ls
+./tools/testfiles/help-2.ls
+./tools/testfiles/help-3.ls
+./tools/testfiles/tall-1.ls
+./tools/testfiles/tall-2.ls
+./tools/testfiles/tcomp-1.ls
+./tools/testfiles/tdset-1.ls
+./tools/testfiles/tgroup-1.ls
+./tools/testfiles/tgroup.ls
+./tools/testfiles/thlink-1.ls
+./tools/testfiles/tloop-1.ls
+./tools/testfiles/tnestcomp-1.ls
+./tools/testfiles/tsaf.ls
+./tools/testfiles/tslink-1.ls
+./tools/testfiles/tstr-1.ls
+./tools/testfiles/tattr2.ls
+
+#additional test input and output for h5dump XML
+./tools/testfiles/tall.h5.xml
+./tools/testfiles/tarray1.h5.xml
+./tools/testfiles/tarray2.h5.xml
+./tools/testfiles/tarray3.h5.xml
+./tools/testfiles/tarray6.h5.xml
+./tools/testfiles/tarray7.h5.xml
+./tools/testfiles/tattr.h5.xml
+./tools/testfiles/tbitfields.h5.xml
+./tools/testfiles/tcompound.h5.xml
+./tools/testfiles/tcompound2.h5.xml
+./tools/testfiles/tcompound_complex.h5.xml
+./tools/testfiles/tdatareg.h5.xml
+./tools/testfiles/tdset.h5.xml
+./tools/testfiles/tdset2.h5.xml
+./tools/testfiles/tempty.h5.xml
+./tools/testfiles/tenum.h5.xml
+./tools/testfiles/tgroup.h5.xml
+./tools/testfiles/thlink.h5.xml
+./tools/testfiles/tloop.h5.xml
+./tools/testfiles/tloop2.h5.xml
+./tools/testfiles/tmany.h5.xml
+./tools/testfiles/tname-amp.h5
+./tools/testfiles/tname-amp.h5.xml
+./tools/testfiles/tname-apos.h5
+./tools/testfiles/tname-apos.h5.xml
+./tools/testfiles/tname-gt.h5
+./tools/testfiles/tname-gt.h5.xml
+./tools/testfiles/tname-lt.h5
+./tools/testfiles/tname-lt.h5.xml
+./tools/testfiles/tname-quot.h5
+./tools/testfiles/tname-quot.h5.xml
+./tools/testfiles/tname-sp.h5
+./tools/testfiles/tname-sp.h5.xml
+./tools/testfiles/tnamed_dtype_attr.ddl
+./tools/testfiles/tnamed_dtype_attr.h5
+./tools/testfiles/tnamed_dtype_attr.h5.xml
+./tools/testfiles/tnestedcomp.h5.xml
+./tools/testfiles/tnodata.h5
+./tools/testfiles/tnodata.h5.xml
+./tools/testfiles/tobjref.h5.xml
+./tools/testfiles/topaque.h5.xml
+./tools/testfiles/tref-escapes-at.h5
+./tools/testfiles/tref-escapes-at.h5.xml
+./tools/testfiles/tref-escapes.h5
+./tools/testfiles/tref-escapes.h5.xml
+./tools/testfiles/tref.h5
+./tools/testfiles/tref.h5.xml
+./tools/testfiles/tsaf.h5.xml
+./tools/testfiles/tslink.h5.xml
+./tools/testfiles/tstr.h5.xml
+./tools/testfiles/tstr2.h5.xml
+./tools/testfiles/tstring-at.h5
+./tools/testfiles/tstring-at.h5.xml
+./tools/testfiles/tstring.h5
+./tools/testfiles/tstring.h5.xml
+./tools/testfiles/tvldtypes1.h5.xml
+./tools/testfiles/tvldtypes2.h5.xml
+./tools/testfiles/tvldtypes3.h5.xml
+./tools/testfiles/tvldtypes4.h5.xml
+./tools/testfiles/tvldtypes5.h5.xml
+./tools/testfiles/tvlstr.h5.xml
+./tools/testfiles/tempty-dtd.h5.xml
+./tools/testfiles/tempty-dtd-uri.h5.xml
+./tools/testfiles/tempty-nons.h5.xml
+./tools/testfiles/tempty-nons-uri.h5.xml
+./tools/testfiles/tempty-ns.h5.xml
+./tools/testfiles/tempty-dtd-2.h5.xml
+./tools/testfiles/tempty-nons-2.h5.xml
+./tools/testfiles/tempty-ns-2.h5.xml
+./tools/testfiles/tall-2A.h5.xml
+
+#test files for h5diff
+./tools/testfiles/file1.h5
+./tools/testfiles/file2.h5
+./tools/testfiles/file3.h5
+./tools/testfiles/file4.h5
+./tools/testfiles/file5.h5
+./tools/testfiles/file6.h5
+./tools/testfiles/file7.h5
+./tools/testfiles/file8.h5
+./tools/testfiles/h5diff_10.txt
+./tools/testfiles/h5diff_11.txt
+./tools/testfiles/h5diff_12.txt
+./tools/testfiles/h5diff_13.txt
+./tools/testfiles/h5diff_14.txt
+./tools/testfiles/h5diff_15.txt
+./tools/testfiles/h5diff_16.txt
+./tools/testfiles/h5diff_17.txt
+./tools/testfiles/h5diff_18.txt
+./tools/testfiles/h5diff_20.txt
+./tools/testfiles/h5diff_21.txt
+./tools/testfiles/h5diff_22.txt
+./tools/testfiles/h5diff_23.txt
+./tools/testfiles/h5diff_24.txt
+./tools/testfiles/h5diff_25.txt
+./tools/testfiles/h5diff_50.txt
+./tools/testfiles/h5diff_51.txt
+./tools/testfiles/h5diff_52.txt
+./tools/testfiles/h5diff_53.txt
+./tools/testfiles/h5diff_54.txt
+./tools/testfiles/h5diff_55.txt
+./tools/testfiles/h5diff_56.txt
+./tools/testfiles/h5diff_57.txt
+./tools/testfiles/h5diff_600.txt
+./tools/testfiles/h5diff_601.txt
+./tools/testfiles/h5diff_602.txt
+./tools/testfiles/h5diff_603.txt
+./tools/testfiles/h5diff_604.txt
+./tools/testfiles/h5diff_605.txt
+./tools/testfiles/h5diff_606.txt
+./tools/testfiles/h5diff_607.txt
+./tools/testfiles/h5diff_608.txt
+./tools/testfiles/h5diff_609.txt
+./tools/testfiles/h5diff_610.txt
+./tools/testfiles/h5diff_611.txt
+./tools/testfiles/h5diff_612.txt
+./tools/testfiles/h5diff_613.txt
+./tools/testfiles/h5diff_614.txt
+./tools/testfiles/h5diff_615.txt
+./tools/testfiles/h5diff_616.txt
+./tools/testfiles/h5diff_617.txt
+./tools/testfiles/h5diff_618.txt
+./tools/testfiles/h5diff_619.txt
+./tools/testfiles/h5diff_620.txt
+./tools/testfiles/h5diff_621.txt
+./tools/testfiles/h5diff_622.txt
+./tools/testfiles/h5diff_623.txt
+./tools/testfiles/h5diff_624.txt
+./tools/testfiles/h5diff_625.txt
+./tools/testfiles/h5diff_626.txt
+./tools/testfiles/h5diff_627.txt
+./tools/testfiles/h5diff_628.txt
+./tools/testfiles/h5diff_629.txt
+./tools/testfiles/h5diff_70.txt
+./tools/testfiles/h5diff_80.txt
+
+# h5repack test files
+./tools/testfiles/test0.h5
+./tools/testfiles/test1.h5
+./tools/testfiles/test3.h5
+./tools/testfiles/test4.h5
+./tools/testfiles/test5.h5
+./tools/testfiles/h5repack_info.txt
+
+# jam utility and tests
+./tools/h5jam/Dependencies
+./tools/h5jam/h5jam.c
+./tools/h5jam/h5unjam.c
+./tools/h5jam/Makefile.in
+./tools/h5jam/h5jamgentest.c
+./tools/h5jam/testh5jam.sh.in
+./tools/h5jam/tellub.c
+./tools/h5jam/getub.c
+
+# test files for jam
+./tools/testfiles/twithub.h5
+./tools/testfiles/twithub513.h5
+./tools/testfiles/u10.txt
+./tools/testfiles/u511.txt
+./tools/testfiles/u512.txt
+./tools/testfiles/u513.txt
+
+# high level libraries
+./hl/Makefile.in
+./hl/src/Dependencies
+./hl/src/Makefile.in
+./hl/src/H5IM.c
+./hl/src/H5IM.h
+./hl/src/H5LT.c
+./hl/src/H5LT.h
+./hl/src/H5TA.c
+./hl/src/H5TA.h
+./hl/test/Dependencies
+./hl/test/Makefile.in
+./hl/test/test_image.c
+./hl/test/test_lite.c
+./hl/test/test_table.c
+./hl/test/test_table_le.hdf5
+./hl/test/test_table_be.hdf5
+./hl/test/test_table_cray.hdf5
+
+
+
+# windows
+./windows/all.zip

Added: packages/hdf5/branches/upstream/current/Makefile
===================================================================
--- packages/hdf5/branches/upstream/current/Makefile	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/Makefile	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,36 @@
+# Top-level distributed Makefile 			       -*- makefile -*-
+
+# 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 Makefile is a stub (copied from Makefile.dist) which will run
+# configure and then invoke the same target in the new Makefile created
+# by configure.
+
+# Uncomment this variable if your make(1) doesn't set it automatically.
+#
+#MAKE=make
+
+
+SHELL=/bin/sh
+
+all lib progs check test _test install uninstall dep depend: _config
+	$(MAKE) $@
+
+clean mostlyclean distclean maintainer-clean TAGS: _config
+	$(MAKE) $@
+
+_config:
+	sh configure
+
+.PHONY: all lib progs test install uninstall dep depend clean mostlyclean     \
+	distclean maintainer-clean _config

Added: packages/hdf5/branches/upstream/current/Makefile.dist
===================================================================
--- packages/hdf5/branches/upstream/current/Makefile.dist	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/Makefile.dist	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,36 @@
+# Top-level distributed Makefile 			       -*- makefile -*-
+
+# 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 Makefile is a stub (copied from Makefile.dist) which will run
+# configure and then invoke the same target in the new Makefile created
+# by configure.
+
+# Uncomment this variable if your make(1) doesn't set it automatically.
+#
+#MAKE=make
+
+
+SHELL=/bin/sh
+
+all lib progs check test _test install uninstall dep depend: _config
+	$(MAKE) $@
+
+clean mostlyclean distclean maintainer-clean TAGS: _config
+	$(MAKE) $@
+
+_config:
+	sh configure
+
+.PHONY: all lib progs test install uninstall dep depend clean mostlyclean     \
+	distclean maintainer-clean _config

Added: packages/hdf5/branches/upstream/current/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,168 @@
+#
+# 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 makefile mostly just reinvokes make in the various subdirectories
+## but does so in the correct order.  You can alternatively invoke make from
+## each subdirectory manually.
+##
+## Top-level HDF5 Makefile(.in)
+##
+top_srcdir=@top_srcdir@
+top_builddir=.
+srcdir=@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+# TESTPARALLEL must be after test since it uses libtest.a.  Putting it
+# before tools allows parallel tests to run sooner.
+SUBDIRS=src test @TESTPARALLEL@ tools @HL@  @subdirs@
+
+##############################################################################
+##		    T A R G E T S
+##
+## all:		Build libraries, header files, tests, and programs in the
+##	 	various subdirectories but does not run tests or install the
+##		library, header files, or programs.  The components can be
+##		built individually with the targets lib, progs, and tests.
+## check:	Test the uninstalled library to make sure it works. You may
+##		also say `test' or `_test' (`test' doesn't work from the top
+##		level directory for some versions of make because `test' is
+##		also a directory).
+## install:	Installs libraries, header files, programs, and documentation
+##		in the various directories under the prefix directory (lib,
+##		include, bin, man, info).  Use the `--prefix=PATH' option
+##		to `configure' (or `config.status') or say `--help' for
+##		other alternatives.  The default prefix is `/usr/local'.
+## uninstall:	Delete all the installed files that the `install' target
+##		created (but not the noninstalled files such as `make all'
+##		created).
+## clean:	Removes temporary files except those that record the
+##		configuration and those that are part of the distribution.
+## mostlyclean:	Like `clean' except it doesn't delete a few files like
+##		libraries, programs, and/or generated header files because
+##		regenerating them is rarely necessary and takes a lot of time.
+## distclean:	Deletes all files that are created by configuring or building
+##		HDF5.  If you have unpacked the source and built HDF5 without
+##		creating any other files, then `make distclean' will leave
+##		only the files that were in the distrubution.
+## maintainer-clean:
+##		Like `distclean' except it deletes more files.  It deletes
+##		all generated files.  This target is not intended for normal
+##		users; it deletes files that may require special tools to
+##		rebuild.
+## TAGS:	Updates the tags table for this program.
+## dep depend:	Builds dependencies in all subdirectories.  These targets
+##		might not be available on certain combinations of make
+##		programs and C compilers.  At the other extreme, the GNU
+##		make used in combination with gcc will maintain dependency
+##		information automatically.
+lib progs check check-s check-p test _test:
+	@@SETX@; for d in $(SUBDIRS); do				      \
+	   (cd $$d && $(MAKE) $@) || exit 1;				      \
+	done
+
+tests TAGS dep depend uninstall:
+	@@SETX@; for d in $(SUBDIRS) perform; do		              \
+	   (cd $$d && $(MAKE) $@) || exit 1;				      \
+	done
+
+install-all:
+	@@SETX@; for d in dummy @subdirs@; do				      \
+	  if test $$d != "dummy"; then					      \
+	    (cd $$d && $(MAKE) $@) || exit 1;				      \
+	  fi;								      \
+	done
+	@$(MAKE) install
+	@$(MAKE) install-doc
+	@$(LT) --mode=finish $(libdir)
+
+uninstall-all:
+	@$(MAKE) uninstall
+	@$(MAKE) uninstall-doc
+
+install:
+	@@SETX@; for d in $(SUBDIRS) perform; do			      \
+	   (cd $$d && $(MAKE) $@) || exit 1;				      \
+	done
+	@$(MAKE) install-examples
+	@$(LT) --mode=finish $(libdir)
+
+install-examples:
+	@@SETX@; for d in dummy @subdirs@; do				      \
+	  if test $$d != "dummy"; then					      \
+	    (cd $$d && $(MAKE) $@) || exit 1;				      \
+	  fi;								      \
+	done
+	(cd examples && $(MAKE) $@) || exit 1;
+
+uninstall-examples:
+	@@SETX@; for d in dummy @subdirs@; do				      \
+	  if test $$d != "dummy"; then					      \
+	    (cd $$d && $(MAKE) $@) || exit 1;				      \
+	  fi;								      \
+	done
+	(cd examples && $(MAKE) $@) || exit 1;
+
+install-doc:
+	@$(MAKE) install-examples
+	(cd doc && $(MAKE) $@) || exit 1;
+
+uninstall-doc:
+	@$(MAKE) uninstall-examples
+	(cd doc && $(MAKE) $@) || exit 1;
+
+## Check if installation is correct by checking if examples can be built.
+## This requires a proper "make install" has been done.
+check-install:
+	(cd examples && $(MAKE) check) || exit 1
+	@@SETX@; for d in dummy @subdirs@; do				      \
+	  if test $$d != "dummy"; then					      \
+	    (cd $$d && $(MAKE) $@) || exit 1;				      \
+	  fi;								      \
+	done
+
+## Number format detection
+H5detect: 
+	(cd src && $(MAKE) $@)
+
+H5Tinit.c: 
+	(cd src && $(MAKE) $@)
+
+.PHONY: all lib progs test _test install uninstall dep depend clean           \
+	mostlyclean distclean maintainer-clean
+
+clean mostlyclean:
+	@@SETX@; for d in $(SUBDIRS) doc perform examples; do		      \
+	   (cd $$d && $(MAKE) $@);					      \
+	done
+	-$(RM) conftest conftest.c
+
+distclean:
+	@@SETX@; for d in $(SUBDIRS) doc perform examples; do		      \
+	   (cd $$d && $(MAKE) $@);					      \
+	done
+	-$(RM) config/commence config/conclude
+	-$(RM) config/stamp1 config/stamp2 config/depend?
+	-$(RM) config.cache config.log config.status configure.lineno
+	-$(RM) src/H5config.h src/H5pubconf.h
+	-$(RM) libtool Makefile
+
+maintainer-clean:
+	@echo "This target is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+	@@SETX@; for d in $(SUBDIRS) doc perform examples; do		      \
+	   (cd $$d && $(MAKE) $@);					      \
+	done
+	-$(RM) config.cache config.log config.status src/H5config.h
+	-$(RM) configure src/H5config.h.in
+

Added: packages/hdf5/branches/upstream/current/README.txt
===================================================================
--- packages/hdf5/branches/upstream/current/README.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/README.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,44 @@
+HDF5 version 1.6.5 released on Thu Nov 10 18:17:53 CST 2005
+Please refer to the release_docs/INSTALL file for installation instructions.
+------------------------------------------------------------------------------
+
+This release is almost fully functional for the entire API defined in the
+documentation, see the RELEASE.txt file in this directory for information
+specific to this release of the library.  The INSTALL file contains
+instructions on compiling and installing the library.  The INSTALL_parallel
+file contains instructions on installing the parallel version of the
+library.  The INSTALL* files can be found in the release_docs/ directory.
+
+Documentation for this release is in the html directory.  Start with the
+"index.html" in that directory.
+
+Four mailing lists are currently set up for use with the HDF5
+library.
+
+   hdf5         - For general discussion of the HDF5 library with
+		  other users.
+
+   hdf5dev      - For discussion of the HDF5 library development
+		  with developers and other interested parties.
+
+   hdf5announce - For announcements of HDF5 related developments,
+		  not a discussion list.
+
+   hdf5cvs      - For checkin notices of code development on the library,
+		  not a discussion list.
+
+To subscribe to a list, send mail to "majordomo at ncsa.uiuc.edu",
+with "subscribe <list>" in the _body_, not the Subject, of the message.
+E.g., subscribe hdf5 
+
+Messages to be sent to the list should be sent to "<list>@ncsa.uiuc.edu".
+
+Nearly daily code snapshots are now being provided at the following URL:
+    ftp://hdf.ncsa.uiuc.edu/pub/outgoing/hdf5/snapshots
+Please read the readme file in that directory before working with a library
+snapshot.
+
+The HDF5 website is located at http://hdf.ncsa.uiuc.edu/HDF5/
+
+Bugs should be reported to hdfhelp at ncsa.uiuc.edu.
+

Added: packages/hdf5/branches/upstream/current/aclocal.m4
===================================================================
--- packages/hdf5/branches/upstream/current/aclocal.m4	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/aclocal.m4	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3524 @@
+# aclocal.m4 generated automatically by aclocal 1.6 -*- Autoconf -*-
+
+# Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
+
+# serial 46 AC_PROG_LIBTOOL
+
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])
+
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.13)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+
+_LT_AC_PROG_ECHO_BACKSLASH
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    AC_PATH_MAGIC
+  fi
+  ;;
+esac
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
+
+AC_ARG_ENABLE(libtool-lock,
+  [  --disable-libtool-lock  avoid locking (might break parallel builds)])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_SAVE
+     AC_LANG_C
+     AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_RESTORE])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+
+ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+
+  # recent cygwin and mingw systems supply a stub DllMain which the user
+  # can override, but on older systems we have to supply one
+  AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain,
+    [AC_TRY_LINK([],
+      [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*);
+      DllMain (0, 0, 0);],
+      [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])])
+
+  case $host/$CC in
+  *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*)
+    # old mingw systems require "-dll" to link a DLL, while more recent ones
+    # require "-mdll"
+    SAVE_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS -mdll"
+    AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch,
+      [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])])
+    CFLAGS="$SAVE_CFLAGS" ;;
+  *-*-cygwin* | *-*-pw32*)
+    # cygwin systems need to pass --dll to the linker, and not link
+    # crt.o which will require a WinMain at 16 definition.
+    lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;;
+  esac
+  ;;
+  ])
+esac
+
+_LT_AC_LTCONFIG_HACK
+
+])
+
+# AC_LIBTOOL_HEADER_ASSERT
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_HEADER_ASSERT],
+[AC_CACHE_CHECK([whether $CC supports assert without backlinking],
+    [lt_cv_func_assert_works],
+    [case $host in
+    *-*-solaris*)
+      if test "$GCC" = yes && test "$with_gnu_ld" != yes; then
+        case `$CC --version 2>/dev/null` in
+        [[12]].*) lt_cv_func_assert_works=no ;;
+        *)        lt_cv_func_assert_works=yes ;;
+        esac
+      fi
+      ;;
+    esac])
+
+if test "x$lt_cv_func_assert_works" = xyes; then
+  AC_CHECK_HEADERS(assert.h)
+fi
+])# AC_LIBTOOL_HEADER_ASSERT
+
+# _LT_AC_CHECK_DLFCN
+# --------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)
+])# _LT_AC_CHECK_DLFCN
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+irix*)
+  symcode='[[BCDEGRST]]'
+  ;;
+solaris* | sysv5*)
+  symcode='[[BDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $host_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
+  symcode='[[ABCDGISTW]]'
+fi
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Write the raw and C identifiers.
+lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ 	]]\($symcode$symcode*\)[[ 	]][[ 	]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if egrep ' nm_test_var$' "$nlist" >/dev/null; then
+	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+	  sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  save_LIBS="$LIBS"
+	  save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$no_builtin_flag"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$save_LIBS"
+	  CFLAGS="$save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AC_FD_CC
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AC_FD_CC
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC
+    fi
+  else
+    echo "$progname: failed program was:" >&AC_FD_CC
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  global_symbol_to_cdecl=
+  global_symbol_to_c_name_address=
+else
+  global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
+  global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address"
+fi
+if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address";
+then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
+# ---------------------------------
+AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR],
+[# Find the correct PATH separator.  Usually this is `:', but
+# DJGPP uses `;' like DOS.
+if test "X${PATH_SEPARATOR+set}" != Xset; then
+  UNAME=${UNAME-`uname 2>/dev/null`}
+  case X$UNAME in
+    *-DOS) lt_cv_sys_path_separator=';' ;;
+    *)     lt_cv_sys_path_separator=':' ;;
+  esac
+  PATH_SEPARATOR=$lt_cv_sys_path_separator
+fi
+])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
+
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+			      [AC_DIVERT_PUSH(NOTICE)])
+_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "[$]0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+AC_DIVERT_POP
+])# _LT_AC_PROG_ECHO_BACKSLASH
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}]
+EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_unknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_AC_TRY_DLOPEN_SELF
+
+# AC_LIBTOOL_DLOPEN_SELF
+# -------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+          [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+            [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+	        [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+	          [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+	            [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+    	  lt_cv_dlopen_self_static, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+])# AC_LIBTOOL_DLOPEN_SELF
+
+AC_DEFUN([_LT_AC_LTCONFIG_HACK],
+[AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([[\\"\\`$\\\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([[\\"\\`\\\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+need_locks="$enable_libtool_lock"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+if test x"$host" != x"$build"; then
+  ac_tool_prefix=${host_alias}-
+else
+  ac_tool_prefix=
+fi
+
+# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+case $host_os in
+linux-gnu*) ;;
+linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+esac
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+    ;;
+  *)
+    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Allow CC to be a program name with arguments.
+set dummy $CC
+compiler="[$]2"
+
+AC_MSG_CHECKING([for objdir])
+rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+AC_MSG_RESULT($objdir)
+
+
+AC_ARG_WITH(pic,
+[  --with-pic              try to use only PIC/non-PIC objects [default=use both]],
+pic_mode="$withval", pic_mode=default)
+test -z "$pic_mode" && pic_mode=default
+
+# We assume here that the value for lt_cv_prog_cc_pic will not be cached
+# in isolation, and that seeing it set (from the cache) indicates that
+# the associated values are set (in the cache) correctly too.
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+AC_CACHE_VAL(lt_cv_prog_cc_pic,
+[ lt_cv_prog_cc_pic=
+  lt_cv_prog_cc_shlib=
+  lt_cv_prog_cc_wl=
+  lt_cv_prog_cc_static=
+  lt_cv_prog_cc_no_builtin=
+  lt_cv_prog_cc_can_build_shared=$can_build_shared
+
+  if test "$GCC" = yes; then
+    lt_cv_prog_cc_wl='-Wl,'
+    lt_cv_prog_cc_static='-static'
+
+    case $host_os in
+    aix*)
+      # Below there is a dirty hack to force normal static linking with -ldl
+      # The problem is because libdl dynamically linked with both libc and
+      # libC (AIX C++ library), which obviously doesn't included in libraries
+      # list by gcc. This cause undefined symbols with -static flags.
+      # This hack allows C programs to be linked with "-static -ldl", but
+      # not sure about C++ programs.
+      lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_cv_prog_cc_pic='-fno-common'
+      ;;
+    cygwin* | mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_cv_prog_cc_pic='-DDLL_EXPORT'
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	 lt_cv_prog_cc_pic=-Kconform_pic
+      fi
+      ;;
+    *)
+      lt_cv_prog_cc_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for PIC flags for the system compiler.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      lt_cv_prog_cc_wl='-Wl,'
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_cv_prog_cc_static='-Bstatic'
+      else
+        ####################################################################
+        ## HACK Alert! This is causing problems with C++ on SP3...We'll just
+        ## remove this...THERE! All better now.
+        ####################################################################
+        ##lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
+		:
+      fi
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
+      lt_cv_prog_cc_pic='+Z'
+      ;;
+
+    irix5* | irix6*)
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static='-non_shared'
+      # PIC (with -KPIC) is the default.
+      ;;
+
+    cygwin* | mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_cv_prog_cc_pic='-DDLL_EXPORT'
+      ;;
+
+    newsos6)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      # All OSF/1 code is PIC.
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_cv_prog_cc_pic='-Kpic'
+      lt_cv_prog_cc_static='-dn'
+      lt_cv_prog_cc_shlib='-belf'
+      ;;
+
+    solaris*)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      lt_cv_prog_cc_wl='-Wl,'
+      ;;
+
+    sunos4*)
+      lt_cv_prog_cc_pic='-PIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      lt_cv_prog_cc_wl='-Qoption ld '
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      if test "x$host_vendor" = xsni; then
+	lt_cv_prog_cc_wl='-LD'
+      else
+	lt_cv_prog_cc_wl='-Wl,'
+      fi
+      ;;
+
+    uts4*)
+      lt_cv_prog_cc_pic='-pic'
+      lt_cv_prog_cc_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_cv_prog_cc_pic='-Kconform_pic'
+	lt_cv_prog_cc_static='-Bstatic'
+      fi
+      ;;
+
+    *)
+      lt_cv_prog_cc_can_build_shared=no
+      ;;
+    esac
+  fi
+])
+if test -z "$lt_cv_prog_cc_pic"; then
+  AC_MSG_RESULT([none])
+else
+  AC_MSG_RESULT([$lt_cv_prog_cc_pic])
+
+  # Check to make sure the pic_flag actually works.
+  AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works])
+  AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl
+    save_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
+    AC_TRY_COMPILE([], [], [dnl
+      case $host_os in
+      hpux9* | hpux10* | hpux11*)
+	# On HP-UX, both CC and GCC only warn that PIC is supported... then
+	# they create non-PIC objects.  So, if there were any warnings, we
+	# assume that PIC is not supported.
+	if test -s conftest.err; then
+	  lt_cv_prog_cc_pic_works=no
+	else
+	  lt_cv_prog_cc_pic_works=yes
+	fi
+	;;
+      *)
+	lt_cv_prog_cc_pic_works=yes
+	;;
+      esac
+    ], [dnl
+      lt_cv_prog_cc_pic_works=no
+    ])
+    CFLAGS="$save_CFLAGS"
+  ])
+
+  if test "X$lt_cv_prog_cc_pic_works" = Xno; then
+    lt_cv_prog_cc_pic=
+    lt_cv_prog_cc_can_build_shared=no
+  else
+    lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
+  fi
+
+  AC_MSG_RESULT([$lt_cv_prog_cc_pic_works])
+fi
+
+# Check for any special shared library compilation flags.
+if test -n "$lt_cv_prog_cc_shlib"; then
+  AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries])
+  if echo "$old_CC $old_CFLAGS " | egrep -e "[[ 	]]$lt_cv_prog_cc_shlib[[ 	]]" >/dev/null; then :
+  else
+   AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure])
+    lt_cv_prog_cc_can_build_shared=no
+  fi
+fi
+
+AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works])
+AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl
+  lt_cv_prog_cc_static_works=no
+  save_LDFLAGS="$LDFLAGS"
+  LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
+  AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes])
+  LDFLAGS="$save_LDFLAGS"
+])
+
+# Belt *and* braces to stop my trousers falling down:
+test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
+AC_MSG_RESULT([$lt_cv_prog_cc_static_works])
+
+pic_flag="$lt_cv_prog_cc_pic"
+special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
+wl="$lt_cv_prog_cc_wl"
+link_static_flag="$lt_cv_prog_cc_static"
+no_builtin_flag="$lt_cv_prog_cc_no_builtin"
+can_build_shared="$lt_cv_prog_cc_can_build_shared"
+
+
+# Check to see if options -o and -c are simultaneously supported by compiler
+AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext])
+AC_CACHE_VAL([lt_cv_compiler_c_o], [
+$rm -r conftest 2>/dev/null
+mkdir conftest
+cd conftest
+echo "int some_variable = 0;" > conftest.$ac_ext
+mkdir out
+# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+# that will create temporary files in the current directory regardless of
+# the output directory.  Thus, making CWD read-only will cause this test
+# to fail, enabling locking or at least warning the user not to do parallel
+# builds.
+chmod -w .
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
+compiler_c_o=no
+if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
+  # The compiler can only warn and ignore the option if not recognized
+  # So say no if there are warnings
+  if test -s out/conftest.err; then
+    lt_cv_compiler_c_o=no
+  else
+    lt_cv_compiler_c_o=yes
+  fi
+else
+  # Append any errors to the config.log.
+  cat out/conftest.err 1>&AC_FD_CC
+  lt_cv_compiler_c_o=no
+fi
+CFLAGS="$save_CFLAGS"
+chmod u+w .
+$rm conftest* out/*
+rmdir out
+cd ..
+rmdir conftest
+$rm -r conftest 2>/dev/null
+])
+compiler_c_o=$lt_cv_compiler_c_o
+AC_MSG_RESULT([$compiler_c_o])
+
+if test x"$compiler_c_o" = x"yes"; then
+  # Check to see if we can write to a .lo
+  AC_MSG_CHECKING([if $compiler supports -c -o file.lo])
+  AC_CACHE_VAL([lt_cv_compiler_o_lo], [
+  lt_cv_compiler_o_lo=no
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -c -o conftest.lo"
+  save_objext="$ac_objext"
+  ac_objext=lo
+  AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
+    # The compiler can only warn and ignore the option if not recognized
+    # So say no if there are warnings
+    if test -s conftest.err; then
+      lt_cv_compiler_o_lo=no
+    else
+      lt_cv_compiler_o_lo=yes
+    fi
+  ])
+  ac_objext="$save_objext"
+  CFLAGS="$save_CFLAGS"
+  ])
+  compiler_o_lo=$lt_cv_compiler_o_lo
+  AC_MSG_RESULT([$compiler_o_lo])
+else
+  compiler_o_lo=no
+fi
+
+# Check to see if we can do hard links to lock some files if needed
+hard_links="nottested"
+if test "$compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+if test "$GCC" = yes; then
+  # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
+  AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions])
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
+  compiler_rtti_exceptions=no
+  AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
+    # The compiler can only warn and ignore the option if not recognized
+    # So say no if there are warnings
+    if test -s conftest.err; then
+      compiler_rtti_exceptions=no
+    else
+      compiler_rtti_exceptions=yes
+    fi
+  ])
+  CFLAGS="$save_CFLAGS"
+  AC_MSG_RESULT([$compiler_rtti_exceptions])
+
+  if test "$compiler_rtti_exceptions" = "yes"; then
+    no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
+  else
+    no_builtin_flag=' -fno-builtin'
+  fi
+fi
+
+# See if the linker supports building shared libraries.
+AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries])
+
+allow_undefined_flag=
+no_undefined_flag=
+need_lib_prefix=unknown
+need_version=unknown
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+archive_cmds=
+archive_expsym_cmds=
+old_archive_from_new_cmds=
+old_archive_from_expsyms_cmds=
+export_dynamic_flag_spec=
+whole_archive_flag_spec=
+thread_safe_flag_spec=
+hardcode_into_libs=no
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+hardcode_shlibpath_var=unsupported
+runpath_var=
+link_all_deplibs=unknown
+always_export_symbols=no
+export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
+# include_expsyms should be a list of space-separated symbols to be *always*
+# included in the symbol list
+include_expsyms=
+# exclude_expsyms can be an egrep regular expression of symbols to exclude
+# it will be wrapped by ` (' and `)$', so one must not match beginning or
+# end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+# as well as any symbol that contains `d'.
+exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+# platforms (ab)use it in PIC code, but their linkers get confused if
+# the symbol is explicitly referenced.  Since portable code cannot
+# rely on this symbol name, it's probably fine to never include it in
+# preloaded symbol tables.
+extract_expsyms_cmds=
+
+case $host_os in
+cygwin* | mingw* | pw32*)
+  # FIXME: the MSVC++ port hasn't been tested in a loooong time
+  # When not using gcc, we currently assume that we are using
+  # Microsoft Visual C++.
+  if test "$GCC" != yes; then
+    with_gnu_ld=no
+  fi
+  ;;
+openbsd*)
+  with_gnu_ld=no
+  ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # If archive_cmds runs LD, not CC, wlarc should be empty
+  wlarc='${wl}'
+
+  # See if GNU ld supports shared libraries.
+  case $host_os in
+  aix3* | aix4* | aix5*)
+    # On AIX, the GNU linker is very broken
+    # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
+    ld_shlibs=no
+    cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+    ;;
+
+  amigaos*)
+    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+
+    # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+    # that the semantics of dynamic libraries on AmigaOS, at least up
+    # to version 4, is to share data among multiple programs linked
+    # with the same dynamic library.  Since this doesn't match the
+    # behavior of shared libraries on other platforms, we can use
+    # them.
+    ld_shlibs=no
+    ;;
+
+  beos*)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      allow_undefined_flag=unsupported
+      # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+      # support --undefined.  This deserves some investigation.  FIXME
+      archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # hardcode_libdir_flag_spec is actually meaningless, as there is
+    # no search path for DLLs.
+    hardcode_libdir_flag_spec='-L$libdir'
+    allow_undefined_flag=unsupported
+    always_export_symbols=yes
+
+    extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
+      sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
+      test -f $output_objdir/impgen.exe || (cd $output_objdir && \
+      if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
+      else $CC -o impgen impgen.c ; fi)~
+      $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
+
+    old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
+
+    # cygwin and mingw dlls have different entry points and sets of symbols
+    # to exclude.
+    # FIXME: what about values for MSVC?
+    dll_entry=__cygwin_dll_entry at 12
+    dll_exclude_symbols=DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12~
+    case $host_os in
+    mingw*)
+      # mingw values
+      dll_entry=_DllMainCRTStartup at 12
+      dll_exclude_symbols=DllMain at 12,DllMainCRTStartup at 12,DllEntryPoint at 12~
+      ;;
+    esac
+
+    # mingw and cygwin differ, and it's simplest to just exclude the union
+    # of the two symbol sets.
+    dll_exclude_symbols=DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12,DllMainCRTStartup at 12,DllEntryPoint at 12
+
+    # recent cygwin and mingw systems supply a stub DllMain which the user
+    # can override, but on older systems we have to supply one (in ltdll.c)
+    if test "x$lt_cv_need_dllmain" = "xyes"; then
+      ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
+      ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~
+	test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
+    else
+      ltdll_obj=
+      ltdll_cmds=
+    fi
+
+    # Extract the symbol export list from an `--export-all' def file,
+    # then regenerate the def file from the symbol export list, so that
+    # the compiled dll only exports the symbol export list.
+    # Be careful not to strip the DATA tag left be newer dlltools.
+    export_symbols_cmds="$ltdll_cmds"'
+      $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
+      sed -e "1,/EXPORTS/d" -e "s/ @ [[0-9]]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
+
+    # If the export-symbols file already is a .def file (1st line
+    # is EXPORTS), use it as is.
+    # If DATA tags from a recent dlltool are present, honour them!
+    archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname-def;
+      else
+	echo EXPORTS > $output_objdir/$soname-def;
+	_lt_hint=1;
+	cat $export_symbols | while read symbol; do
+	 set dummy \$symbol;
+	 case \[$]# in
+	   2) echo "   \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
+	   *) echo "     \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;;
+	 esac;
+	 _lt_hint=`expr 1 + \$_lt_hint`;
+	done;
+      fi~
+      '"$ltdll_cmds"'
+      $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
+      $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
+      $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
+    ;;
+
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+      wlarc=
+    else
+      archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    fi
+    ;;
+
+  solaris* | sysv5*)
+    if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+      ld_shlibs=no
+      cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+    elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+  sunos4*)
+    archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+    wlarc=
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  *)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+  esac
+
+  if test "$ld_shlibs" = yes; then
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    case $host_os in
+    cygwin* | mingw* | pw32*)
+      # dlltool doesn't understand --whole-archive et. al.
+      whole_archive_flag_spec=
+      ;;
+    *)
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
+	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+	whole_archive_flag_spec=
+      fi
+      ;;
+    esac
+  fi
+else
+  # PORTME fill in a description of your system's linker (not GNU ld)
+  case $host_os in
+  aix3*)
+    allow_undefined_flag=unsupported
+    always_export_symbols=yes
+    archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+    # Note: this linker hardcodes the directories in LIBPATH if there
+    # are no directories specified by -L.
+    hardcode_minus_L=yes
+    if test "$GCC" = yes && test -z "$link_static_flag"; then
+      # Neither direct hardcoding nor static linking is supported with a
+      # broken collect2.
+      hardcode_direct=unsupported
+    fi
+    ;;
+
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	done
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    hardcode_direct=yes
+    archive_cmds=''
+    hardcode_libdir_separator=':'
+    if test "$GCC" = yes; then
+      case $host_os in aix4.[[012]]|aix4.[[012]].*)
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	  strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  hardcode_direct=yes
+	else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	fi
+      esac
+
+      shared_flag='-shared'
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	shared_flag='${wl}-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall can do strange things, so it is better to
+    # generate a list of symbols to export.
+    always_export_symbols=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      allow_undefined_flag='-berok'
+      hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
+      archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+    else
+      if test "$host_cpu" = ia64; then
+	hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	allow_undefined_flag="-z nodefs"
+	archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+      else
+        #######################################################################
+        # This is a MAJOR HACK(tm) to get HDF5 to compile on AIX systems.
+        # The ``-b nolibpath -b ...'' flags were messing with the mpicc
+        # compiler's already defined library paths and it wasn't able to find
+        # the libraries it needed to run....DOH!
+        # Apply the fix unless HDF5_AIX_LIBTOOL_NOPATCH is defined.
+        if test "$HDF5_AIX_LIBTOOL_NOPATCH" = ""; then
+            hardcode_libdir_flag_spec=' '
+        else
+            hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
+        fi
+        #
+        # End MAJOR HACK
+        #
+        #######################################################################
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='${wl}-berok'
+	# This is a bit strange, but is similar to how AIX traditionally builds
+	# it's shared libraries.
+	archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
+      fi
+    fi
+    ;;
+
+  amigaos*)
+    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+    # see comment about different semantics on the GNU ld section
+    ld_shlibs=no
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    # hardcode_libdir_flag_spec is actually meaningless, as there is
+    # no search path for DLLs.
+    hardcode_libdir_flag_spec=' '
+    allow_undefined_flag=unsupported
+    # Tell ltmain to make .lib files, not .a files.
+    libext=lib
+    # FIXME: Setting linknames here is a bad hack.
+    archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+    # The linker will automatically build a .lib file if we build a DLL.
+    old_archive_from_new_cmds='true'
+    # FIXME: Should let the user specify the lib program.
+    old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+    fix_srcfile_path='`cygpath -w "$srcfile"`'
+    ;;
+
+  darwin* | rhapsody*)
+    case "$host_os" in
+    rhapsody* | darwin1.[[012]])
+      allow_undefined_flag='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      allow_undefined_flag='-flat_namespace -undefined suppress'
+      ;;
+    esac
+    # FIXME: Relying on posixy $() will cause problems for
+    #        cross-compilation, but unfortunately the echo tests do not
+    #        yet detect zsh echo's removal of \ escapes.
+    archive_cmds='$nonopt $(test "x$module" = xyes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring'
+    # We need to add '_' to the symbols in $export_symbols first
+    #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    whole_archive_flag_spec='-all_load $convenience'
+    ;;
+
+  freebsd1*)
+    ld_shlibs=no
+    ;;
+
+  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+  # support.  Future versions do this automatically, but an explicit c++rt0.o
+  # does not break anything, and helps significantly (at the cost of a little
+  # extra space).
+  freebsd2.2*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+  freebsd2*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_minus_L=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+  freebsd*)
+    archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  hpux9* | hpux10* | hpux11*)
+    case $host_os in
+    hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
+    *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
+    esac
+    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+    hardcode_libdir_separator=:
+    hardcode_direct=yes
+    hardcode_minus_L=yes # Not in the search PATH, but as the default
+			 # location of the library.
+    export_dynamic_flag_spec='${wl}-E'
+    ;;
+
+  irix5* | irix6*)
+    if test "$GCC" = yes; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+    else
+      archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    link_all_deplibs=yes
+    ;;
+
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+    else
+      archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+    fi
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  newsos6)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    hardcode_shlibpath_var=no
+    ;;
+
+  openbsd*)
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+    else
+      case "$host_os" in
+      openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_libdir_flag_spec='-R$libdir'
+        ;;
+      *)
+        archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+        ;;
+      esac
+    fi
+    ;;
+
+  os2*)
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+    allow_undefined_flag=unsupported
+    archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+    old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+    ;;
+
+  osf3*)
+    if test "$GCC" = yes; then
+      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+    else
+      allow_undefined_flag=' -expect_unresolved \*'
+      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    ;;
+
+  osf4* | osf5*)	# as osf3* with the addition of -msym flag
+    if test "$GCC" = yes; then
+      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    else
+      allow_undefined_flag=' -expect_unresolved \*'
+      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+      $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+      #Both c and cxx compiler support -rpath directly
+      hardcode_libdir_flag_spec='-rpath $libdir'
+    fi
+    hardcode_libdir_separator=:
+    ;;
+
+  sco3.2v5*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_shlibpath_var=no
+    runpath_var=LD_RUN_PATH
+    hardcode_runpath_var=yes
+    export_dynamic_flag_spec='${wl}-Bexport'
+    ;;
+
+  solaris*)
+    # gcc --version < 3.0 without binutils cannot create self contained
+    # shared libraries reliably, requiring libgcc.a to resolve some of
+    # the object symbols generated in some cases.  Libraries that use
+    # assert need libgcc.a to resolve __eprintf, for example.  Linking
+    # a copy of libgcc.a into every shared library to guarantee resolving
+    # such symbols causes other problems:  According to Tim Van Holder
+    # <tim.van.holder at pandora.be>, C++ libraries end up with a separate
+    # (to the application) exception stack for one thing.
+    no_undefined_flag=' -z defs'
+    if test "$GCC" = yes; then
+      case `$CC --version 2>/dev/null` in
+      [[12]].*)
+	cat <<EOF 1>&2
+
+*** Warning: Releases of GCC earlier than version 3.0 cannot reliably
+*** create self contained shared libraries on Solaris systems, without
+*** introducing a dependency on libgcc.a.  Therefore, libtool is disabling
+*** -no-undefined support, which will at least allow you to build shared
+*** libraries.  However, you may find that when you link such libraries
+*** into an application without using GCC, you have to manually add
+*** \`gcc --print-libgcc-file-name\` to the link command.  We urge you to
+*** upgrade to a newer version of GCC.  Another option is to rebuild your
+*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer.
+
+EOF
+        no_undefined_flag=
+	;;
+      esac
+    fi
+    # $CC -shared without GNU ld will not create a library from C++
+    # object files and a static libstdc++, better avoid it by now
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_shlibpath_var=no
+    case $host_os in
+    solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+    *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+      whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+    esac
+    link_all_deplibs=yes
+    ;;
+
+  sunos4*)
+    if test "x$host_vendor" = xsequent; then
+      # Use $CC to link under sequent, because it throws in some extra .o
+      # files that make .init and .fini sections work.
+      archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+    else
+      archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+    fi
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_direct=yes
+    hardcode_minus_L=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4)
+    if test "x$host_vendor" = xsno; then
+      archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes # is this really true???
+    else
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+    fi
+    runpath_var='LD_RUN_PATH'
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4.3*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_shlibpath_var=no
+    export_dynamic_flag_spec='-Bexport'
+    ;;
+
+  sysv5*)
+    no_undefined_flag=' -z text'
+    # $CC -shared without GNU ld will not create a library from C++
+    # object files and a static libstdc++, better avoid it by now
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+    hardcode_libdir_flag_spec=
+    hardcode_shlibpath_var=no
+    runpath_var='LD_RUN_PATH'
+    ;;
+
+  uts4*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_shlibpath_var=no
+    ;;
+
+  dgux*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4*MP*)
+    if test -d /usr/nec; then
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ld_shlibs=yes
+    fi
+    ;;
+
+  sysv4.2uw2*)
+    archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_minus_L=no
+    hardcode_shlibpath_var=no
+    hardcode_runpath_var=yes
+    runpath_var=LD_RUN_PATH
+    ;;
+
+  sysv5uw7* | unixware7*)
+    no_undefined_flag='${wl}-z ${wl}text'
+    if test "$GCC" = yes; then
+      archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+    else
+      archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+    fi
+    runpath_var='LD_RUN_PATH'
+    hardcode_shlibpath_var=no
+    ;;
+
+  *)
+    ld_shlibs=no
+    ;;
+  esac
+fi
+AC_MSG_RESULT([$ld_shlibs])
+test "$ld_shlibs" = no && can_build_shared=no
+
+# Check hardcoding attributes.
+AC_MSG_CHECKING([how to hardcode library paths into programs])
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+   test -n "$runpath_var"; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$hardcode_shlibpath_var" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+AC_MSG_RESULT([$hardcode_action])
+
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+  AC_MSG_RESULT([no])
+fi
+
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+# PORTME Fill in your ld.so characteristics
+AC_MSG_CHECKING([dynamic linker characteristics])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}.so$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+	if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	     echo ' yes '
+	     echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	  :
+	else
+	  can_build_shared=no
+	fi
+	;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can
+    # not hardcode correct soname into executable. Probably we can
+    # add versioning support to collect2, so additional links can
+    # be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}.so$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}.so'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  export_dynamic_flag_spec=-rdynamic
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  need_version=no
+  need_lib_prefix=no
+  case $GCC,$host_os in
+  yes,cygwin*)
+    library_names_spec='$libname.dll.a'
+    soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll'
+    postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog .libs/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    ;;
+  yes,mingw*)
+    library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll'
+    sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
+    ;;
+  yes,pw32*)
+    library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
+    ;;
+  *)
+    library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  # FIXME: Relying on posixy $() will cause problems for
+  #        cross-compilation, but unfortunately the echo tests do not
+  #        yet detect zsh echo's removal of \ escapes.
+  library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
+  soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  *)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  dynamic_linker="$host_os dld.sl"
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  shlibpath_var=SHLIB_PATH
+  shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+  library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
+  soname_spec='${libname}${release}.sl$major'
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6*)
+  version_type=irix
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}.so$major'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
+  case $host_os in
+  irix5*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
+    soname_spec='${libname}${release}.so$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case "$host_os" in
+    openbsd2.[[89]] | openbsd2.[[89]].*)
+      shlibpath_overrides_runpath=no
+      ;;
+    *)
+      shlibpath_overrides_runpath=yes
+      ;;
+    esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+os2*)
+  libname_spec='$name'
+  need_lib_prefix=no
+  library_names_spec='$libname.dll $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_version=no
+  soname_spec='${libname}${release}.so'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}.so$major'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
+    soname_spec='$libname.so.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+# Report the final consequences.
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+if test "$hardcode_action" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+AC_LIBTOOL_DLOPEN_SELF
+
+if test "$enable_shared" = yes && test "$GCC" = yes; then
+  case $archive_cmds in
+  *'~'*)
+    # FIXME: we may have to deal with multi-command sequences.
+    ;;
+  '$CC '*)
+    # Test whether the compiler implicitly links with -lc since on some
+    # systems, -lgcc has to come before -lc. If gcc already passes -lc
+    # to ld, don't add -lc before -lgcc.
+    AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+    AC_CACHE_VAL([lt_cv_archive_cmds_need_lc],
+    [$rm conftest*
+    echo 'static int dummy;' > conftest.$ac_ext
+
+    if AC_TRY_EVAL(ac_compile); then
+      soname=conftest
+      lib=conftest
+      libobjs=conftest.$ac_objext
+      deplibs=
+      wl=$lt_cv_prog_cc_wl
+      compiler_flags=-v
+      linker_flags=-v
+      verstring=
+      output_objdir=.
+      libname=conftest
+      save_allow_undefined_flag=$allow_undefined_flag
+      allow_undefined_flag=
+      if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+      then
+	lt_cv_archive_cmds_need_lc=no
+      else
+	lt_cv_archive_cmds_need_lc=yes
+      fi
+      allow_undefined_flag=$save_allow_undefined_flag
+    else
+      cat conftest.err 1>&5
+    fi])
+    AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc])
+    ;;
+  esac
+fi
+need_lc=${lt_cv_archive_cmds_need_lc-yes}
+
+# The second clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  :
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  test -f Makefile && make "$ltmain"
+fi
+
+if test -f "$ltmain"; then
+  trap "$rm \"${ofile}T\"; exit 1" 1 2 15
+  $rm -f "${ofile}T"
+
+  echo creating $ofile
+
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS \
+    AR AR_FLAGS CC LD LN_S NM SHELL \
+    reload_flag reload_cmds wl \
+    pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
+    thread_safe_flag_spec whole_archive_flag_spec libname_spec \
+    library_names_spec soname_spec \
+    RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
+    old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
+    postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
+    old_striplib striplib file_magic_cmd export_symbols_cmds \
+    deplibs_check_method allow_undefined_flag no_undefined_flag \
+    finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
+    global_symbol_to_c_name_address \
+    hardcode_libdir_flag_spec hardcode_libdir_separator  \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
+
+    case $var in
+    reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
+    extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  cat <<__EOF__ > "${ofile}T"
+#! $SHELL
+
+# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996-2000 Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="sed -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$need_lc
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# The default C compiler.
+CC=$lt_CC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_pic_flag
+pic_mode=$pic_mode
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_compiler_c_o
+
+# Can we write directly to a .lo ?
+compiler_o_lo=$lt_compiler_o_lo
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_link_static_flag
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "${ofile}T"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | os2*)
+    cat <<'EOF' >> "${ofile}T"
+      # This is a source program that is used to create dlls on Windows
+      # Don't remove nor modify the starting and closing comments
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# #  ifdef __CYGWIN32__
+# #    define __CYGWIN__ __CYGWIN32__
+# #  endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+#   __hDllInstance_base = hInst;
+#   return TRUE;
+# }
+# /* ltdll.c ends here */
+	# This is a source program that is used to create import libraries
+	# on Windows for dlls which lack them. Don't remove nor modify the
+	# starting and closing comments
+# /* impgen.c starts here */
+# /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
+#
+#  This file is part of GNU libtool.
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#  */
+#
+# #include <stdio.h>		/* for printf() */
+# #include <unistd.h>		/* for open(), lseek(), read() */
+# #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
+# #include <string.h>		/* for strdup() */
+#
+# /* O_BINARY isn't required (or even defined sometimes) under Unix */
+# #ifndef O_BINARY
+# #define O_BINARY 0
+# #endif
+#
+# static unsigned int
+# pe_get16 (fd, offset)
+#      int fd;
+#      int offset;
+# {
+#   unsigned char b[2];
+#   lseek (fd, offset, SEEK_SET);
+#   read (fd, b, 2);
+#   return b[0] + (b[1]<<8);
+# }
+#
+# static unsigned int
+# pe_get32 (fd, offset)
+#     int fd;
+#     int offset;
+# {
+#   unsigned char b[4];
+#   lseek (fd, offset, SEEK_SET);
+#   read (fd, b, 4);
+#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# static unsigned int
+# pe_as32 (ptr)
+#      void *ptr;
+# {
+#   unsigned char *b = ptr;
+#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# int
+# main (argc, argv)
+#     int argc;
+#     char *argv[];
+# {
+#     int dll;
+#     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
+#     unsigned long export_rva, export_size, nsections, secptr, expptr;
+#     unsigned long name_rvas, nexp;
+#     unsigned char *expdata, *erva;
+#     char *filename, *dll_name;
+#
+#     filename = argv[1];
+#
+#     dll = open(filename, O_RDONLY|O_BINARY);
+#     if (dll < 1)
+# 	return 1;
+#
+#     dll_name = filename;
+#
+#     for (i=0; filename[i]; i++)
+# 	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
+# 	    dll_name = filename + i +1;
+#
+#     pe_header_offset = pe_get32 (dll, 0x3c);
+#     opthdr_ofs = pe_header_offset + 4 + 20;
+#     num_entries = pe_get32 (dll, opthdr_ofs + 92);
+#
+#     if (num_entries < 1) /* no exports */
+# 	return 1;
+#
+#     export_rva = pe_get32 (dll, opthdr_ofs + 96);
+#     export_size = pe_get32 (dll, opthdr_ofs + 100);
+#     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
+#     secptr = (pe_header_offset + 4 + 20 +
+# 	      pe_get16 (dll, pe_header_offset + 4 + 16));
+#
+#     expptr = 0;
+#     for (i = 0; i < nsections; i++)
+#     {
+# 	char sname[8];
+# 	unsigned long secptr1 = secptr + 40 * i;
+# 	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
+# 	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
+# 	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
+# 	lseek(dll, secptr1, SEEK_SET);
+# 	read(dll, sname, 8);
+# 	if (vaddr <= export_rva && vaddr+vsize > export_rva)
+# 	{
+# 	    expptr = fptr + (export_rva - vaddr);
+# 	    if (export_rva + export_size > vaddr + vsize)
+# 		export_size = vsize - (export_rva - vaddr);
+# 	    break;
+# 	}
+#     }
+#
+#     expdata = (unsigned char*)malloc(export_size);
+#     lseek (dll, expptr, SEEK_SET);
+#     read (dll, expdata, export_size);
+#     erva = expdata - export_rva;
+#
+#     nexp = pe_as32 (expdata+24);
+#     name_rvas = pe_as32 (expdata+32);
+#
+#     printf ("EXPORTS\n");
+#     for (i = 0; i<nexp; i++)
+#     {
+# 	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
+# 	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
+#     }
+#
+#     return 0;
+# }
+# /* impgen.c ends here */
+
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
+
+  mv -f "${ofile}T" "$ofile" || \
+    (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
+  chmod +x "$ofile"
+fi
+
+])# _LT_AC_LTCONFIG_HACK
+
+# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
+
+# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
+
+# AC_ENABLE_SHARED - implement the --enable-shared flag
+# Usage: AC_ENABLE_SHARED[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE(shared,
+changequote(<<, >>)dnl
+<<  --enable-shared[=PKGS]  build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case $enableval in
+yes) enable_shared=yes ;;
+no) enable_shared=no ;;
+*)
+  enable_shared=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_shared=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac],
+enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
+])
+
+# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)])
+
+# AC_ENABLE_STATIC - implement the --enable-static flag
+# Usage: AC_ENABLE_STATIC[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE(static,
+changequote(<<, >>)dnl
+<<  --enable-static[=PKGS]  build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case $enableval in
+yes) enable_static=yes ;;
+no) enable_static=no ;;
+*)
+  enable_static=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_static=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac],
+enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
+])
+
+# AC_DISABLE_STATIC - set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)])
+
+
+# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
+# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE(fast-install,
+changequote(<<, >>)dnl
+<<  --enable-fast-install[=PKGS]  optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case $enableval in
+yes) enable_fast_install=yes ;;
+no) enable_fast_install=no ;;
+*)
+  enable_fast_install=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_fast_install=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac],
+enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
+])
+
+# AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)])
+
+# AC_LIBTOOL_PICMODE - implement the --with-pic flag
+# Usage: AC_LIBTOOL_PICMODE[(MODE)]
+#   Where MODE is either `yes' or `no'.  If omitted, it defaults to
+#   `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)])
+
+
+# AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+  /*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+  ?:/*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+  ;;
+  *)
+  ac_save_MAGIC_CMD="$MAGIC_CMD"
+  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="ifelse([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    egrep "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  MAGIC_CMD="$ac_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+])
+
+
+# AC_PATH_MAGIC - find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl
+AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])
+
+
+# AC_PROG_LD - find the path to the GNU or non-GNU linker
+AC_DEFUN([AC_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | [[A-Za-z]]:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+	test "$with_gnu_ld" != no && break
+      else
+	test "$with_gnu_ld" != yes && break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_PROG_LD_GNU
+])
+
+# AC_PROG_LD_GNU -
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+  lt_cv_prog_gnu_ld=yes
+else
+  lt_cv_prog_gnu_ld=no
+fi])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])
+
+# AC_PROG_LD_RELOAD_FLAG - find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag,
+[lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+test -n "$reload_flag" && reload_flag=" $reload_flag"
+])
+
+# AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognise dependant libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given egrep regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi4*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin* | mingw* | pw32*)
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  case "$host_os" in
+  rhapsody* | darwin1.[[012]])
+    lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
+    ;;
+  *) # Darwin 1.3 on
+    lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+    ;;
+  esac
+  ;;
+
+freebsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20*|hpux11*)
+  lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libc.sl
+  ;;
+
+irix5* | irix6*)
+  case $host_os in
+  irix5*)
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+    ;;
+  *)
+    case $LD in
+    *-32|*"-32 ") libmagic=32-bit;;
+    *-n32|*"-n32 ") libmagic=N32;;
+    *-64|*"-64 ") libmagic=64-bit;;
+    *) libmagic=never-match;;
+    esac
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1"
+    ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+  case $host_cpu in
+  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | s390* )
+    lt_cv_deplibs_check_method=pass_all ;;
+  *)
+    # glibc up to 2.1.1 does not perform some relocations on ARM
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so\.[[0-9]]+\.[[0-9]]+$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+openbsd*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object'
+  else
+    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  # this will be overridden with pass_all, but let us keep it just in case
+  lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sco3.2v5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  lt_cv_file_magic_test_file=/lib/libc.so
+  ;;
+
+sysv5uw[[78]]* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  esac
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+])
+
+
+# AC_PROG_NM - find the path to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl
+AC_MSG_CHECKING([for BSD-compatible nm])
+AC_CACHE_VAL(lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    test -z "$ac_dir" && ac_dir=.
+    tmp_nm=$ac_dir/${ac_tool_prefix}nm
+    if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      # Tru64's nm complains that /dev/null is an invalid object file
+      if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
+	lt_cv_path_NM="$tmp_nm -B"
+	break
+      elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+	lt_cv_path_NM="$tmp_nm -p"
+	break
+      else
+	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	continue # so that we can try to find one that supports BSD flags
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+AC_MSG_RESULT([$NM])
+])
+
+# AC_CHECK_LIBM - check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32*)
+  # These system don't have libm
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, main, LIBM="-lm")
+  ;;
+esac
+])
+
+# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
+# the libltdl convenience library and INCLTDL to the include flags for
+# the libltdl header and adds --enable-ltdl-convenience to the
+# configure arguments.  Note that LIBLTDL and INCLTDL are not
+# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If DIR is not
+# provided, it is assumed to be `libltdl'.  LIBLTDL will be prefixed
+# with '${top_builddir}/' and INCLTDL will be prefixed with
+# '${top_srcdir}/' (note the single quotes!).  If your package is not
+# flat and you're not using automake, define top_builddir and
+# top_srcdir appropriately in the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  case $enable_ltdl_convenience in
+  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+  "") enable_ltdl_convenience=yes
+      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+  esac
+  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+  INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+])
+
+# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
+# the libltdl installable library and INCLTDL to the include flags for
+# the libltdl header and adds --enable-ltdl-install to the configure
+# arguments.  Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
+# AC_CONFIG_SUBDIRS called.  If DIR is not provided and an installed
+# libltdl is not found, it is assumed to be `libltdl'.  LIBLTDL will
+# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
+# with '${top_srcdir}/' (note the single quotes!).  If your package is
+# not flat and you're not using automake, define top_builddir and
+# top_srcdir appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  AC_CHECK_LIB(ltdl, main,
+  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+  [if test x"$enable_ltdl_install" = xno; then
+     AC_MSG_WARN([libltdl not installed, but installation disabled])
+   else
+     enable_ltdl_install=yes
+   fi
+  ])
+  if test x"$enable_ltdl_install" = x"yes"; then
+    ac_configure_args="$ac_configure_args --enable-ltdl-install"
+    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+    INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+  else
+    ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+    LIBLTDL="-lltdl"
+    INCLTDL=
+  fi
+])
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+

Added: packages/hdf5/branches/upstream/current/bin/buildhdf5
===================================================================
--- packages/hdf5/branches/upstream/current/bin/buildhdf5	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/buildhdf5	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,318 @@
+#!/bin/sh
+##
+## 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.
+##
+# Build HDF5 library by doing configure, make, and tests.
+# Usage: See USAGE()
+# Programmer: Albert Cheng
+# Creation date: Jul  9, 2003
+
+# Some handy definitions
+USAGE()
+{
+cat <<EOF
+Buildhdf5 builds the HDF5 library by running configure, make and make check.
+It skips the configure part if one has been done already.  In effect, one
+can continue from a previous build.
+
+Command Syntax
+==============
+buildhdf5 [-config] [-gass] [-srcdir dir] config-arguments ...
+   -config:	run configure only. [default to do build too]
+   -gass:	configure for the GASS driver
+   -help:	show this help page
+   -n:   	no execution, just show commands
+   -srcdir:	use dir as the source directory
+             	   [Note: this is different from --srcdir
+             	    which will be passed to configure]
+   all other arguments are passed to configure
+
+
+Configure in place or by srcdir
+===============================
+By default, the command looks for the configure command in
+'.' and then '../hdf5'.  When it finds it, it uses it to do
+the configure part.  In effect, if ./configure is found, it
+does the build in place.  If it finds ../hdf5/configure, it
+does the --srcdir (that is separated source) build.  Therefore,
+if you have the following structure setup, you can run multiple
+hosts building simultantously using a common source code.
+     hdf5_1.4/hdf5        # holds the source
+	  .../arabica     # for SunOS 2.7
+	  .../arabicapp   # for SunOS 2.7 parallel
+	  .../burrwhite   # for Linux 2.4
+EOF
+}
+
+
+TIMESTAMP()
+{
+    echo "=====" "`date`" "====="
+}
+
+
+QUIT()
+{
+    TIMESTAMP
+}
+
+
+# Do one step bracketed with time stamps
+# The '< /dev/null' is needed to prevent some applications like MPI
+# jobs blocked for reading when they read stdin unnecessary.
+STEP()
+{
+    banner="$1"
+    command="$2"
+    resultfile="$3"
+
+    echo "$banner"
+    (TIMESTAMP; nerror=0 ;
+	echo "eval $command"
+	eval $command || nerror=1 ;
+	TIMESTAMP; exit $nerror) < /dev/null >> "$resultfile" 2>&1
+    if [ $? -ne 0 ]; then
+	echo "error in '$banner'.  buildhdf5 aborted."
+	exit 1
+    fi
+}
+
+
+# Try locate the HDF4 library
+# This is a hack because there is no consistent place to find
+# the valid HDF library.
+LOCATE_HDF4()
+{
+    OS=`uname -s`
+    echo OS=$OS
+    case "$OS" in
+	HP-UX)
+	    h4paths="/afs/ncsa/packages/hdf/HPUX_10.20"
+	    ;;
+	IRIX)
+	    h4paths="/afs/ncsa/packages/hdf/4.1r3_irix"
+	    ;;
+	IRIX64)
+	    case "$CC" in
+	    *-n32)
+		h4paths="/afs/ncsa/packages/hdf/IRIX64-n32_6.5"
+		;;
+	    *)
+		h4paths="/afs/ncsa/packages/hdf/IRIX64_6.5"
+		;;
+	    esac
+	    ;;
+	Linux)
+	    h4paths="/afs/ncsa/packages/hdf/linux"
+	    ;;
+	OSF1)
+	    h4paths="/afs/ncsa/packages/hdf/OSF1_V4.0"
+	    ;;
+	*)
+	    h4paths="/usr/ncsa /usr/sdt"
+	    ;;
+    esac
+    echo $h4paths
+    for h4 in $h4paths; do
+	if [ -f $h4/lib/libdf.a -a -f $h4/include/hdf.h ]; then
+	    WITH_H4="--with-hdf4=$h4/include,$h4/lib"
+	    break
+	fi
+    done
+    echo WITH_H4="$WITH_H4"
+}
+
+
+# Try locate the Fortran compiler
+# This is a hack because there is no consistent fortran compiler name
+LOCATE_FORTRAN()
+{
+    OS=`uname -s`
+    echo OS=$OS
+    case "$OS" in
+	IRIX64)
+	    case "$CC" in
+	    *-n32)
+		gasspaths=/usr/local/globus-install-1.1.1/development/mips-sgi-irix6.5-n32_nothreads_standard_debug
+		sslpaths=/usr/local/ssl-n32
+		;;
+	    *)
+		gasspaths=/usr/local/globus-install-1.1.1/development/mips-sgi-irix6.5-64_nothreads_standard_debug
+		sslpaths=/usr/local/ssl
+		;;
+	    esac
+	    ;;
+	*)
+	    ;;
+    esac
+    echo gasspaths=$gasspaths
+    echo $sslpaths=$sslpaths
+    for x in $gasspaths dummy; do
+	if [ $x != dummy -a -f $x/lib/libglobus_gass_cache.a ]; then
+	   WITH_GASS="--with-gass=$x/include,$x/lib"
+	   break
+	fi
+    done
+    for x in $sslpaths dummy; do
+	if [ $x != dummy -a -f $x/lib/libssl.a ]; then
+	   WITH_SSL="--with-ssl=$x/lib"
+	   break
+	fi
+    done
+
+    echo WITH_GASS="$WITH_GASS"
+    echo WITH_SSL="$WITH_SSL"
+
+}
+
+
+# Try locate the GASS software library
+# This is a hack because there is no consistent place to find
+# the valid HDF library.
+LOCATE_GASS()
+{
+    OS=`uname -s`
+    echo OS=$OS
+    case "$OS" in
+	IRIX64)
+	    case "$CC" in
+	    *-n32)
+		gasspaths=/usr/local/globus-install-1.1.1/development/mips-sgi-irix6.5-n32_nothreads_standard_debug
+		sslpaths=/usr/local/ssl-n32
+		;;
+	    *)
+		gasspaths=/usr/local/globus-install-1.1.1/development/mips-sgi-irix6.5-64_nothreads_standard_debug
+		sslpaths=/usr/local/ssl
+		;;
+	    esac
+	    ;;
+	*)
+	    ;;
+    esac
+    echo gasspaths=$gasspaths
+    echo $sslpaths=$sslpaths
+    for x in $gasspaths dummy; do
+	if [ $x != dummy -a -f $x/lib/libglobus_gass_cache.a ]; then
+	   WITH_GASS="--with-gass=$x/include,$x/lib"
+	   break
+	fi
+    done
+    for x in $sslpaths dummy; do
+	if [ $x != dummy -a -f $x/lib/libssl.a ]; then
+	   WITH_SSL="--with-ssl=$x/lib"
+	   break
+	fi
+    done
+
+    echo WITH_GASS="$WITH_GASS"
+    echo WITH_SSL="$WITH_SSL"
+
+}
+
+
+# Configure.  Default to do --srcdir.
+CONFIG()
+{
+    CMD="$SRCDIR/configure $*"
+    echo $CMD
+    if [ "$NOEXEC" != 'noexec' ]; then
+	$CMD
+    else
+	true		# set exit code as 0
+    fi
+}
+
+# Main body
+TIMESTAMP
+trap QUIT 0
+
+#
+# setup
+#
+MAKE=${MAKE:-'gmake'}
+export MAKE
+CONFIGURE="CONFIG"
+CONFIG_ONLY=no		# default is configure and build
+NOEXEC=			# default to execute commands
+SRCDIRLIST=". ../hdf5"  # places to look for configure
+nerror=0
+
+# parse some options
+while [ $# -gt 0 ]; do
+    case "$1" in
+	-config)
+	    # do configure only
+	    CONFIG_ONLY=yes
+	    ;;
+	-gass)
+	    LOCATE_GASS
+	    ;;
+	-help)
+	    USAGE
+	    exit 0
+	    ;;
+	-n)
+	    NOEXEC='noexec'
+	    ;;
+	-srcdir)
+	    shift
+	    SRCDIRLIST="$1"
+	    ;;
+	*)	# Quit parsing
+	    break
+	    ;;
+    esac
+    shift
+done
+	    
+# Figure out if srcdir is wished.
+# Make sure we are at the library root level
+# by checking couple typical files.  Not bullet-proof.
+for SRCDIR in $SRCDIRLIST dummy; do
+    if [ x-$SRCDIR = x-dummy ]; then
+	break
+    fi
+    if [ -d $SRCDIR/src -a -d $SRCDIR/config -a -f $SRCDIR/configure ]
+    then
+	break
+    fi
+done
+
+if [ x-$SRCDIR = x-dummy ]; then
+    echo "Could not find the source dir or configure script.  Abort."
+    exit 1
+fi
+
+# Configure
+# no configure if already done.
+if [ ! -f config.status ]; then
+    CONFIGURE="$CONFIGURE $WITH_SSL $WITH_GASS"
+    STEP "Configure HDF5..." "$CONFIGURE $*" "#config"
+else
+    STEP "Confiugre Skipped" "echo Confiugre Skipped" "#config"
+fi
+
+if [ x-$CONFIG_ONLY = x-yes ]; then
+    exit 0
+fi
+
+
+# Compile
+STEP "Make HDF5..." "$MAKE" "#make"
+
+# Tests
+STEP "Testing HDF5..." "$MAKE check" "#test"
+
+# all done
+echo "No Errors encountered"
+TIMESTAMP


Property changes on: packages/hdf5/branches/upstream/current/bin/buildhdf5
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/bin/chkmanifest
===================================================================
--- packages/hdf5/branches/upstream/current/bin/chkmanifest	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/chkmanifest	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,59 @@
+#!/bin/sh
+#
+# 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.
+#
+
+# Check that all the files in MANIFEST exist and that (if this is a
+# CVS checkout) that all the CVS-managed files appear in the
+# MANIFEST.
+
+verbose=yes
+MANIFEST=/tmp/H5_MANIFEST.$$
+
+# clean up $MANIFEST file when exits
+trap "rm -f $MANIFEST" 0
+
+# Copy the manifest file to get a list of file names.
+grep '^\.' MANIFEST | expand | cut -f1 -d' ' >$MANIFEST
+
+test "$verbose" && echo "   Checking MANIFEST..." 1>&2
+test -f $MANIFEST || exit 1
+for file in `cat $MANIFEST`; do
+    if [ ! -f $file ]; then
+       echo "- $file"
+       fail=yes
+    fi
+done
+for cvs in `find . -type d -name CVS -print`; do
+    path=`echo $cvs |sed 's/\/CVS//'`
+    for file in `grep '^\/' $cvs/Entries |cut -d/ -f2`; do
+	if (grep $path/$file$ $MANIFEST >/dev/null); then
+	    :
+	else
+	    echo "+ $path/$file"
+	    fail=yes
+	fi
+    done
+done
+
+if [ "X$fail" = "Xyes" ]; then
+    cat 1>&2 <<EOF
+The MANIFEST is out of date. Files marked with a minus sign (-) no
+longer exist; files marked with a plus sign (+) are CVS-managed but do
+not appear in the MANIFEST.  Please remedy the situation and try again.
+EOF
+    exit 1
+fi
+
+test "$verbose" && echo "   The MANIFEST is up to date." 1>&2
+exit 0


Property changes on: packages/hdf5/branches/upstream/current/bin/chkmanifest
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/bin/config.guess
===================================================================
--- packages/hdf5/branches/upstream/current/bin/config.guess	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/config.guess	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1456 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2004-03-03'
+
+# This file is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Per Bothner <per at bothner.com>.
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi at noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep __ELF__ >/dev/null
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit 0 ;;
+    amd64:OpenBSD:*:*)
+	echo x86_64-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    amiga:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    arc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    cats:OpenBSD:*:*)
+	echo arm-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    hp300:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mac68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme88k:OpenBSD:*:*)
+	echo m88k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvmeppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    pegasos:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    pmax:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sgi:OpenBSD:*:*)
+	echo mipseb-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sun3:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    wgrisc:OpenBSD:*:*)
+	echo mipsel-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:OpenBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:MirBSD:*:*)
+	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit 0 ;;
+    Alpha*:OpenVMS:*:*)
+	echo alpha-hp-vms
+	exit 0 ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit 0 ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit 0 ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit 0;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit 0 ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit 0 ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit 0 ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit 0 ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit 0;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit 0;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit 0 ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit 0 ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit 0 ;;
+    DRS?6000:UNIX_SV:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7 && exit 0 ;;
+	esac ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    i86pc:SunOS:5.*:*)
+	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit 0 ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit 0 ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit 0 ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit 0 ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit 0 ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit 0 ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c \
+	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+	  && exit 0
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit 0 ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit 0 ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit 0 ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit 0 ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit 0 ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit 0 ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit 0 ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit 0 ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit 0 ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit 0 ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit 0 ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit 0 ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
+	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit 0 ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+		echo rs6000-ibm-aix3.2.5
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit 0 ;;
+    *:AIX:*:[45])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit 0 ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit 0 ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit 0 ;;                           # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit 0 ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit 0 ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit 0 ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit 0 ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    # avoid double evaluation of $set_cc_for_build
+	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+	echo unknown-hitachi-hiuxwe2
+	exit 0 ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit 0 ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit 0 ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit 0 ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit 0 ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit 0 ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit 0 ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit 0 ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit 0 ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit 0 ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit 0 ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit 0 ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit 0 ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    *:UNICOS/mp:*:*)
+	echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit 0 ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit 0 ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:FreeBSD:*:*)
+	# Determine whether the default compiler uses glibc.
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#if __GLIBC__ >= 2
+	LIBC=gnu
+	#else
+	LIBC=
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	# GNU/KFreeBSD systems have a "k" prefix to indicate we are using
+	# FreeBSD's kernel, but not the complete OS.
+	case ${LIBC} in gnu) kernel_only='k' ;; esac
+	echo ${UNAME_MACHINE}-unknown-${kernel_only}freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC}
+	exit 0 ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit 0 ;;
+    i*:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit 0 ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit 0 ;;
+    x86:Interix*:[34]*)
+	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+	exit 0 ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit 0 ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit 0 ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit 0 ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit 0 ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit 0 ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit 0 ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit 0 ;;
+    arm*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit 0 ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    mips:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips
+	#undef mipsel
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mipsel
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	;;
+    mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips64
+	#undef mips64el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mips64el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips64
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit 0 ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit 0 ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit 0 ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit 0 ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit 0 ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit 0 ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit 0 ;;
+    i*86:Linux:*:*)
+	# The BFD linker knows what the default object file format is, so
+	# first see if it will tell us. cd to the root directory to prevent
+	# problems with other programs or directories called `ld' in the path.
+	# Set LC_ALL=C to ensure ld outputs messages in English.
+	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
+				    s/[ 	][ 	]*/ /g
+				    s/.*supported targets: *//
+				    s/ .*//
+				    p'`
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+		;;
+	  a.out-i386-linux)
+		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+		exit 0 ;;
+	  coff-i386)
+		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+		exit 0 ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit 0 ;;
+	esac
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#ifdef __ELF__
+	# ifdef __GLIBC__
+	#  if __GLIBC__ >= 2
+	LIBC=gnu
+	#  else
+	LIBC=gnulibc1
+	#  endif
+	# else
+	LIBC=gnulibc1
+	# endif
+	#else
+	#ifdef __INTEL_COMPILER
+	LIBC=gnu
+	#else
+	LIBC=gnuaout
+	#endif
+	#endif
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+	;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit 0 ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit 0 ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit 0 ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit 0 ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit 0 ;;
+	i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit 0 ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit 0 ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit 0 ;;
+    i*86:*:5:[78]*)
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit 0 ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit 0 ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+	echo i386-pc-msdosdjgpp
+        exit 0 ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit 0 ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit 0 ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit 0 ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit 0 ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit 0 ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit 0 ;;
+    M68*:*:R3V[567]*:*)
+	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && echo i486-ncr-sysv4 && exit 0 ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit 0 ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit 0 ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit 0 ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel at ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit 0 ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes at openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit 0 ;;
+    *:*:*:FTX*)
+	# From seanf at swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit 0 ;;
+    *:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo hppa1.1-stratus-vos
+	exit 0 ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit 0 ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit 0 ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit 0 ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit 0 ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit 0 ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit 0 ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit 0 ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit 0 ;;
+    *:Darwin:*:*)
+	case `uname -p` in
+	    *86) UNAME_PROCESSOR=i686 ;;
+	    powerpc) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit 0 ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit 0 ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit 0 ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit 0 ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit 0 ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit 0 ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit 0 ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit 0 ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit 0 ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit 0 ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit 0 ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit 0 ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit 0 ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit 0 ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit 0 ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit 0 ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit 0 ;;
+    c34*)
+	echo c34-convex-bsd
+	exit 0 ;;
+    c38*)
+	echo c38-convex-bsd
+	exit 0 ;;
+    c4*)
+	echo c4-convex-bsd
+	exit 0 ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+    ftp://ftp.gnu.org/pub/gnu/config/
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches at gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:


Property changes on: packages/hdf5/branches/upstream/current/bin/config.guess
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/bin/config.sub
===================================================================
--- packages/hdf5/branches/upstream/current/bin/config.sub	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/config.sub	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1549 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+
+timestamp='2004-02-23'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit 0;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis)
+		os=
+		basic_machine=$1
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| m32r | m68000 | m68k | m88k | mcore \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64vr | mips64vrel \
+	| mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| msp430 \
+	| ns16k | ns32k \
+	| openrisc | or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \
+	| strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xscale | xstormy16 | xtensa \
+	| z8k)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* \
+	| bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| m32r-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | mcore-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| msp430-* \
+	| none-* | np1-* | nv1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+	| sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \
+	| xtensa-* \
+	| ymp-* \
+	| z8k-*)
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	cr16c)
+		basic_machine=cr16c-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	mmix*)
+		basic_machine=mmix-knuth
+		os=-mmixware
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nv1)
+		basic_machine=nv1-cray
+		os=-unicosmp
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	or32 | or32-*)
+		basic_machine=or32-unknown
+		os=-coff
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparc | sparcv9 | sparcv9b)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+    c4x-* | tic4x-*)
+        os=-coff
+        ;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-ibm)
+		os=-aix
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:


Property changes on: packages/hdf5/branches/upstream/current/bin/config.sub
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/bin/config_para_ibm_sp.sh
===================================================================
--- packages/hdf5/branches/upstream/current/bin/config_para_ibm_sp.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/config_para_ibm_sp.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,101 @@
+# 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.
+#
+
+# How to create a parallel version of HDF5 on an IBM SP system
+# that uses MPI and MPI-IO.
+
+# Unfortunately, the configure/make process to create the parallel version of
+# HDF5 has not yet been automated to the same extent that the sequential
+# version has.
+# Read the INSTALL file to understand the configure/make process for the
+# sequential (i.e., uniprocess) version of HDF5.
+# The process for creating the parallel version of HDF5 using MPI-IO
+# is similar, but first you will have to set up some environment variables
+# with values specific to your local installation.
+# The relevant variables are shown below, with values that work for LLNL's
+# ASCI baby blue pacific SP as of the writing of these instructions (980210).
+
+# In addition to the environment variables, you _might_ also have to
+# create a new file in the config directory.
+# You will need to create this file only if the execution of the ./configure
+# program aborts with an error after printing the message 
+# "checking whether byte ordering is bigendian..."
+#
+# If this is the case, create a new file in the config directory
+# whose name is of the form architecture-vendor-OSversion
+# (e.g., for baby blue pacific, this file is named powerpc-ibm-aix4.2.1.0)
+# and which contains the line
+#	ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+# if the target architecture is bigendian, or
+#	ac_cv_c_bigendian=${ac_cv_c_bigendian='no'}
+# otherwise.
+# Running the program ./bin/config.guess will print out the name
+# of the new file you must create.
+
+# Don't try to make a parallel version of HDF5 from the same hdf5 root
+# directory where you made a sequential version of HDF5 -- start with
+# a fresh copy.
+# Here are the flags you must set before running the ./configure program
+# to create the parallel version of HDF5.
+# (We use csh here, but of course you can adapt to whatever shell you like.)
+
+# compile for MPI jobs
+setenv CC "/usr/local/mpich-1.1.2+romio_lgfiles/bin/mpicc"
+
+#
+# next 4 for IBM mpi
+#
+#setenv CC /usr/lpp/ppe.poe/bin/mpcc_r
+
+#
+# for both
+#
+setenv MP_PROCS 1
+
+
+# These compiler flags work on ASCI baby blue pacific (IBM SP),
+# using IBM's MPI and Argonne's MPI-IO (ROMIO):
+#  -DHAVE_FUNCTION			compiler accepts __FUNCTION__ notation
+#  -I/usr/local/mpio/include/ibm	using ROMIO's MPI-IO header files
+#
+# The following flags are only needed when compiling/linking a user program
+# for execution.
+#  -bI:/usr/include/piofs/piofs.exp	this MPI-IO uses PIOFS file system
+#  -L/usr  /local/mpio/lib/ibm -lmpio	link to this MPI-IO lib
+#
+#setenv CFLAGS "-D_LARGE_FILES $CFLAGS"
+
+# The configure/make process needs to be able to run some programs,
+# need to specify a processor pool.
+# Also, don't prepend the process id in the output of the programs
+# run by config/make.
+setenv MP_RMPOOL 0
+setenv MP_LABELIO no
+
+# Once these variables are set to the proper values for your installation,
+# you can run the configure program (i.e., ./configure)
+# to set up the Makefiles, etc.
+# After configuring, run the make as described in the INSTALL file.
+# Once the configuration is complete, you can set any of your
+# environment variables to whatever you like.
+
+# the files in the config directory, such as 
+# config/powerpc-ibm-aix4.2.1.0  
+# config/powerpc-ibm-aix4.x 
+# config/powerpc-ibm-aix4.3.2.0
+# sometimes will need some help depending on subtlties of the installation
+
+
+# When compiling and linking your application, don't forget to compile with
+# mpcc and link to the MPI-IO library and the parallel version of the HDF5
+# library (that was created and installed with the configure/make process).

Added: packages/hdf5/branches/upstream/current/bin/dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/bin/dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,60 @@
+#!/usr/bin/perl -w
+#
+# 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.
+#
+my $depend_file;
+my $new_depend_file;
+my $srcdir;
+my $top_srcdir;
+my $top_builddir;
+
+while ($_ = shift @ARGV) {
+    if (/^--srcdir=([^ \t\n]*)/) {
+        $srcdir = $1;
+        $srcdir =~ s/\./\\\./g;
+    } elsif (/^--top_srcdir=([^ \t\n]*)/) {
+        $top_srcdir = $1;
+
+        # Trim off the path name if we're interested in the previous path.
+        if ($top_srcdir =~ /\/fortran\/\.\.$/) {
+            $top_srcdir =~ s/\/fortran\/\.\.$//;
+        } elsif ($top_srcdir =~ /\/c\+\+\/\.\.$/) {
+            $top_srcdir =~ s/\/c\+\+\/\.\.$//;
+        }
+
+        $top_srcdir =~ s/\./\\\./g;
+    } elsif (/^--top_builddir=([^ \t\n]*)/) {
+        $top_builddir = $1;
+        $top_builddir =~ s/\./\\\./g;
+    } else {
+        $depend_file = $_;
+        $new_depend_file = "$_.new";
+        last;
+    }
+}
+
+open(DEPEND, "<$depend_file") || die "cannot open file $depend_file: $!\n";
+open(NEW, ">$new_depend_file") || die "cannot open file $new_depend_file: $!\n";
+
+while (<DEPEND>) {
+    s/\.o(\b)/\.lo$1/g;
+    s/ $srcdir/ \$\(srcdir\)/g;
+    s/ $top_srcdir/ \$\(top_srcdir\)/g;
+    s/ $top_builddir/ \$\(top_builddir\)/g;
+    print NEW $_;
+}
+
+close(DEPEND);
+close(NEW);
+
+`mv $new_depend_file $depend_file`;


Property changes on: packages/hdf5/branches/upstream/current/bin/dependencies
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/bin/deploy
===================================================================
--- packages/hdf5/branches/upstream/current/bin/deploy	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/deploy	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,59 @@
+#!/bin/sh
+##
+## 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.
+##
+# Deploy the HDF5 binary.
+#
+# Programmer: Albert Cheng
+# Created Date: 2004/12/15
+#
+# Modifications
+
+# Function definitions
+#
+# Print Usage page
+USAGE()
+{
+cat << EOF
+Usage: $0 <dir>
+   Install the binary to directory <dir>
+
+Examples:
+
+    $ bin/deploy /usr/local/hdf5
+    ....
+
+EOF
+
+}
+
+
+# Variables
+
+if [ $# != 1 ]; then
+    USAGE
+    exit 1
+fi
+
+installdir=$1
+# create installdir if it does not exist yet.
+if [ -d $installdir ] || mkdir $installdir ; then
+    ${MAKE:-gmake} install prefix=$installdir  && \
+	( cd $installdir/bin; ./h5redeploy -force)
+    exit $?
+else
+    echo $installdir is not a valid directory
+    USAGE
+    exit 1
+fi
+


Property changes on: packages/hdf5/branches/upstream/current/bin/deploy
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/bin/distdep
===================================================================
--- packages/hdf5/branches/upstream/current/bin/distdep	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/distdep	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,25 @@
+#!/usr/bin/perl -p
+#
+# 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.
+#
+
+# Usage: $0 [<].depend
+
+# Takes dependency info and generates on stdout dependencies suitable for
+# distribution by removing all the system include files from the list and
+# removing all but the base name of other include files (since the Makefiles
+# contain the logic for searching).
+
+($h,$_)=/\s*\\/?$h.$`:("",$h.$_);
+s|( +/\S*)*( *)|$2?" \\\n   ":""|eg;
+#s|(([-\w\.]+)/)+([-\w\.]+)|\3|g;

Added: packages/hdf5/branches/upstream/current/bin/h5vers
===================================================================
--- packages/hdf5/branches/upstream/current/bin/h5vers	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/h5vers	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,333 @@
+#! /bin/sh
+perl -x -S $0 "$@"
+exit
+
+#! perl
+require 5.003;
+use strict;
+
+# 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.
+#
+# Robb Matzke <matzke at llnl.gov>
+# 17 July 1998
+
+### Purpose
+# Increments the hdf5 version number by changing the value of
+# constants in the src/H5public.h file.  The new version number is
+# printed on the standard output. An alternate source file name can be
+# specified as an argument.  In any case, the original file is saved
+# by appending a tilde `~' to the name.
+
+### Usage:
+# h5vers [OPTIONS] [FILE]
+
+# Without options this program only displays the current version and
+# doesn't modify any files or create backups.  The default is to print
+# the version number like X.Y.Z-A where X is the major version number,
+# Y is the minor version number, Z is the release number, and A is
+# a short annotation string (the `-' is printed only if A is not empty).
+# If the `-v' switch is given the version will be printed like:
+#
+#    version X.Y release Z (A)
+#
+# The space and parentheses around A are only printed if A is not empty.
+#
+# The `-s VERSION' switch will set the version as specified.  If the
+# string contains a dotted triple then it will be used as the version
+# number, otherwise up to three numbers will be read from the end of
+# the string and used as the major version, minor version, and release
+# number.  If any numbers are missing then zero is assumed.  This
+# allows versions to be specified like `-s "version 2.1 release 8"' or
+# `-s hdf5-2.1.8.tar.bz2'.  If the new version is less than the old
+# version then a warning message is generated on standard error. The
+# annotation string, A, is set only if it appears immediately after the
+# third number, separated by a dash (e.g., `1.2.3-pre1') or in parentheses
+# (e.g., `version 1.2 release 3 (pre1)').
+#
+# The `-i [major|minor|release|annot|last]' option increments the major
+# number, minor number, release number, or annotation string. The `last'
+# switch increments the annotation string if present, otherwise the
+# release number. If the release number is incremented then the annotation
+# string is cleared.  If the minor number is incremented then the release
+# number is set to zero and the annotation string is cleared; if the major
+# number is incremented then the minor and release numbers are set to zero
+# and the annotation string is cleared.
+#
+# If a file is specified then that file is used instead of
+# ./H5public.h or ./src/H5public.h.
+#
+# If the version number is changed (either `-s' or `-i' was used on
+# the command line) then the first line of the README.txt and RELEASE.txt files
+# one directory above the H5public.h file is also modified so it looks
+# something like: This is hdf5-1.2.3-pre1 currently under development.
+# The AC_INIT macro in configure.in will also change in this case to be
+# something like: AC_INIT([HDF5], [hdf5-1.2.3-pre1], [hdfhelp at ncsa.uiuc.edu])
+##############################################################################
+
+sub getvers {
+  local ($_) = @_;
+  my (@vers);
+
+  ($vers[0]) = /^\#\s*define\s+H5_VERS_MAJOR\s+(\d+)/m;
+  ($vers[1]) = /^\#\s*define\s+H5_VERS_MINOR\s+(\d+)/m;
+  ($vers[2]) = /^\#\s*define\s+H5_VERS_RELEASE\s+(\d+)/m;
+  ($vers[3]) = /^\#\s*define\s+H5_VERS_SUBRELEASE\s+\"([^\"]*)\"/m;
+  return @vers;
+}
+
+sub setvers {
+  my ($contents, @vers) = @_;
+  $_[0] =~ s/^(\#\s*define\s+H5_VERS_MAJOR\s+)\d+/$1$vers[0]/m;
+  $_[0] =~ s/^(\#\s*define\s+H5_VERS_MINOR\s+)\d+/$1$vers[1]/m;
+  $_[0] =~ s/^(\#\s*define\s+H5_VERS_RELEASE\s+)\d+/$1$vers[2]/m;
+  $_[0] =~ s/^(\#\s*define\s+H5_VERS_SUBRELEASE\s+\")[^\"]*/$1$vers[3]/m;
+  $_[0] =~ s/^(\#\s*define\s+H5_VERS_INFO\s+\")[^\"]*/
+    sprintf("%sHDF5 library version: %d.%d.%d%s%s", $1, @vers[0,1,2],
+	    $vers[3]?"-":"", $vers[3])/me;
+}
+
+sub usage {
+  my ($prog) = $0 =~ /([^\/]+)$/;
+  print STDERR <<EOF;
+Usage: $prog [OPTS] [FILE]
+    -i major|minor|release|annot
+        Increment specified version component and set following components
+        to zero.
+    -s VERSION
+        Set the version as specified. The version number can be embedded in
+        some other string such as \"hdf5-1.1.0-pre1.tar.bz2\" or even
+        \"this is HDF5 library version 1.1 release 0 (pre1)\" for convenience.
+    -v
+        Instead of displaying only a dotted triple version number a line such
+        as \"version 1.1 release 0 (pre1)\" will be printed.
+    FILE
+        The name of the file that contains version information.  This is
+        seldom necessary since files H5public.h, src/H5public.h and
+        ../src/H5public.h are automatically checked.
+EOF
+  exit 1;
+}
+
+# Parse arguments
+my ($verbose, $set, $inc, $file);
+my (@files) = ("H5public.h", "src/H5public.h", "../src/H5public.h");
+while ($_ = shift) {
+  $_ eq "-s" && do {
+    die "-s switch needs a version number\n" unless @ARGV;
+    $set = shift;
+    next;
+  };
+
+  $_ eq "-i" && do {
+    if (@ARGV && $ARGV[0]=~/^(major|minor|release|annot)$/) {
+      $inc = shift;
+    } else {
+      $inc = "last";
+    }
+    next;
+  };
+
+  $_ eq "-v" && do {
+    $verbose = 1;
+    next;
+  };
+
+  /^-(h|\?|-?help)$/ && usage;
+  /^-/ && die "unrecognized option: $_\n";
+  die "only one file name can be specified\n" if $file;
+  $file = $_;
+}
+die "mutually exclusive options given\n" if $set && $inc;
+
+# Determine file to use as H5public.h, README.txt,
+# release_docs/RELEASE.txt, and configure.in. The README.txt,
+# release_docs/RELEASE.txt, and configure.in files are always in the
+# directory above H5public.h
+unless ($file) {
+  for (@files) {
+    ($file=$_,last) if -f $_;
+  }
+}
+die "unable to find source files\n" unless defined $file;
+die "unable to read file: $file\n" unless -r $file;
+# README.txt
+my $README = $file;
+$README =~ s/[^\/]*$/..\/README.txt/;
+die "unable to read file: $README\n" unless -r $file;
+# release_docs/RELEASE.txt
+my $RELEASE = $file;
+$RELEASE =~ s/[^\/]*$/..\/release_docs\/RELEASE.txt/;
+die "unable to read file: $RELEASE\n" unless -r $file;
+# configure.in
+my $CONFIGURE = $file;
+$CONFIGURE =~ s/[^\/]*$/..\/configure.in/;
+die "unable to read file: $CONFIGURE\n" unless -r $file;
+# fortran/configure.in
+my $FORTRAN_CONFIGURE = $file;
+$FORTRAN_CONFIGURE =~ s/[^\/]*$/..\/fortran\/configure.in/;
+die "unable to read file: $FORTRAN_CONFIGURE\n" unless -r $file;
+# c++/configure.in
+my $CXX_CONFIGURE = $file;
+$CXX_CONFIGURE =~ s/[^\/]*$/..\/c++\/configure.in/;
+die "unable to read file: $CXX_CONFIGURE\n" unless -r $file;
+
+# Get the current version number.
+open FILE, $file or die "unable to open $file: $!\n";
+my ($contents) = join "", <FILE>;
+close FILE;
+my (@curver) = getvers $contents;
+
+# Determine the new version number.
+my @newver; #new version
+if ($set) {
+  if ($set =~ /(\d+)\.(\d+)\.(\d+)(-([a-zA-Z]\w*))?/) {
+    @newver = ($1, $2, $3, $5);
+  } elsif ($set =~ /(\d+)\D+(\d+)\D+(\d+)(\s*\(([a-zA-Z]\w*)\))?\D*$/) {
+    @newver = ($1, $2, $3, $5);
+  } elsif ($set =~ /(\d+)\D+(\d+)\D*$/) {
+    @newver = ($1, $2, 0, "");
+  } elsif ($set =~ /(\d+)\D*$/) {
+    @newver = ($1, 0, 0, "");
+  } else {
+    die "illegal version number specified: $set\n";
+  }
+} elsif ($inc) {
+  $inc = $curver[3] eq "" ? 'release' : 'annot' if $inc eq 'last';
+  if ($inc eq "major") {
+    $newver[0] = $curver[0]+1;
+    @newver[1,2,3] = (0,0,"");
+  } elsif ($inc eq "minor") {
+    $newver[0] = $curver[0];
+    $newver[1] = $curver[1]+1;
+    @newver[2,3] = (0,"");
+  } elsif ($inc eq "release") {
+    @newver[0,1] = @curver[0,1];
+    $newver[2] = $curver[2]+1;
+    $newver[3] = "";
+  } elsif ($inc eq "annot") {
+    @newver[0,1,2] = @curver[0,1,2];
+    $newver[3] = $curver[3];
+    $newver[3] =~ s/(\d+)\D*$/$1+1/e or
+      die "Annotation \"".$newver[3]."\" cannot be incremented.\n";
+  } else {
+    die "unknown increment field: $inc\n";
+  }
+} else {
+  # Nothing to do but print result
+  $README = "";
+  $RELEASE = "";
+  $CONFIGURE = "";
+  $FORTRAN_CONFIGURE = "";
+  $CXX_CONFIGURE = "";
+  @newver = @curver;
+}
+
+# Print a warning if the version got smaller (don't check annot field)
+if ($newver[0]*1000000 + $newver[1]*1000 + $newver[2] <
+    $curver[0]*1000000 + $curver[1]*1000 + $curver[2]) {
+  printf STDERR "Warning: version decreased from %d.%d.%d to %d.%d.%d\n",
+    @curver[0,1,2], @newver[0,1,2];
+}
+
+# Update the version number if it changed.
+if ($newver[0]!=$curver[0] ||
+    $newver[1]!=$curver[1] ||
+    $newver[2]!=$curver[2] ||
+    $newver[3]ne$curver[3]) {
+  setvers $contents, @newver or die "unable to set version\n";
+  rename $file, "$file~" or die "unable to save backup file\n";
+  open FILE, ">$file" or die "unable to open $file but backup saved!\n";
+  print FILE $contents;
+  close FILE;
+}
+
+# Update the README.txt file
+if ($README) {
+  open FILE, $README or die "$README: $!\n";
+  my @contents = <FILE>;
+  close FILE;
+  $contents[0] = sprintf("HDF5 version %d.%d.%d%s %s",
+			 @newver[0,1,2],
+			 $newver[3] eq "" ? "" : "-".$newver[3],
+			 "currently under development\n");
+  open FILE, ">$README" or die "$README: $!\n";
+  print FILE @contents;
+  close FILE;
+}
+
+# Update the release_docs/RELEASE.txt file
+if ($RELEASE) {
+  open FILE, $RELEASE or die "$RELEASE: $!\n";
+  my @contents = <FILE>;
+  close FILE;
+  $contents[0] = sprintf("HDF5 version %d.%d.%d%s %s",
+			 @newver[0,1,2],
+			 $newver[3] eq "" ? "" : "-".$newver[3],
+			 "currently under development\n");
+  open FILE, ">$RELEASE" or die "$RELEASE: $!\n";
+  print FILE @contents;
+  close FILE;
+}
+
+sub gen_configure {
+  my ($name, $conf) = @_;
+
+  open FILE, $conf or die "$conf: $!\n";
+  my @contents = <FILE>;
+  close FILE;
+
+  for (my $i = 0; $i < $#contents; ++$i) {
+    if ($contents[$i] =~ /^AC_INIT/) {
+      $contents[$i] = sprintf("AC_INIT([$name], [%d.%d.%d%s], [hdfhelp\@ncsa.uiuc.edu])\n",
+                              @newver[0,1,2],
+                              $newver[3] eq "" ? "" : "-".$newver[3]);
+      last;
+    }
+  }
+
+  open FILE, ">$conf" or die "$conf: $!\n";
+  print FILE @contents;
+  close FILE;
+
+  $conf =~ /^(.*?)\/?configure.in$/;
+}
+
+# Update the configure.in files and regenerate them
+gen_configure("HDF5", $CONFIGURE) if $CONFIGURE;
+gen_configure("HDF5 Fortran", $FORTRAN_CONFIGURE) if $FORTRAN_CONFIGURE;
+gen_configure("HDF5 C++", $CXX_CONFIGURE) if $CXX_CONFIGURE;
+
+# Reconfigure once (which will update all three configure files)
+if ($1) {
+  system("cd $1 && bin/reconfigure >/dev/null 2>/dev/null && rm -rf autom4te.cache");
+} else {
+  system("bin/reconfigure >/dev/null 2>/dev/null && rm -rf autom4te.cache");
+}
+
+# Print the new version number
+if ($verbose) {
+  printf("version %d.%d release %d%s\n", @newver[0,1,2],
+	 $newver[3] eq "" ? "" : " (".$newver[3].")");
+} else {
+  printf("%d.%d.%d%s\n", @newver[0,1,2],
+	 $newver[3] eq "" ? "" : "-".$newver[3]);
+}
+
+exit 0;
+
+# Because the first line of this file looks like a Bourne shell script, we
+# must tell XEmacs explicitly that this is really a perl script.
+#
+# Local Variables:
+# mode:perl
+# End:


Property changes on: packages/hdf5/branches/upstream/current/bin/h5vers
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/bin/install-sh
===================================================================
--- packages/hdf5/branches/upstream/current/bin/install-sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/install-sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,251 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5 (mit/util/scripts/install.sh).
+#
+# Copyright 1991 by the Massachusetts Institute of Technology
+#
+# Permission to use, copy, modify, distribute, and sell this software and its
+# documentation for any purpose is hereby granted without fee, provided that
+# the above copyright notice appear in all copies and that both that
+# copyright notice and this permission notice appear in supporting
+# documentation, and that the name of M.I.T. not be used in advertising or
+# publicity pertaining to distribution of the software without specific,
+# written prior permission.  M.I.T. makes no representations about the
+# suitability of this software for any purpose.  It is provided "as is"
+# without express or implied warranty.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+	-c) instcmd="$cpprog"
+	    shift
+	    continue;;
+
+	-d) dir_arg=true
+	    shift
+	    continue;;
+
+	-m) chmodcmd="$chmodprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-o) chowncmd="$chownprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-g) chgrpcmd="$chgrpprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-s) stripcmd="$stripprog"
+	    shift
+	    continue;;
+
+	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
+	    shift
+	    continue;;
+
+	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+	    shift
+	    continue;;
+
+	*)  if [ x"$src" = x ]
+	    then
+		src=$1
+	    else
+		# this colon is to work around a 386BSD /bin/sh bug
+		:
+		dst=$1
+	    fi
+	    shift
+	    continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+	echo "install:	no input file specified"
+	exit 1
+else
+	true
+fi
+
+if [ x"$dir_arg" != x ]; then
+	dst=$src
+	src=""
+	
+	if [ -d $dst ]; then
+		instcmd=:
+		chmodcmd=""
+	else
+		instcmd=$mkdirprog
+	fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad 
+# if $src (and thus $dsttmp) contains '*'.
+
+	if [ -f $src -o -d $src ]
+	then
+		true
+	else
+		echo "install:  $src does not exist"
+		exit 1
+	fi
+	
+	if [ x"$dst" = x ]
+	then
+		echo "install:	no destination specified"
+		exit 1
+	else
+		true
+	fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+	if [ -d $dst ]
+	then
+		dst="$dst"/`basename $src`
+	else
+		true
+	fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+	'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+	pathcomp="${pathcomp}${1}"
+	shift
+
+	if [ ! -d "${pathcomp}" ] ;
+        then
+		$mkdirprog "${pathcomp}"
+	else
+		true
+	fi
+
+	pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+	$doit $instcmd $dst &&
+
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+	if [ x"$transformarg" = x ] 
+	then
+		dstfile=`basename $dst`
+	else
+		dstfile=`basename $dst $transformbasename | 
+			sed $transformarg`$transformbasename
+	fi
+
+# don't allow the sed command to completely eliminate the filename
+
+	if [ x"$dstfile" = x ] 
+	then
+		dstfile=`basename $dst`
+	else
+		true
+	fi
+
+# Make a temp file name in the proper directory.
+
+	dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+	$doit $instcmd $src $dsttmp &&
+
+	trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+	$doit $rmcmd -f $dstdir/$dstfile &&
+	$doit $mvcmd $dsttmp $dstdir/$dstfile 
+
+fi &&
+
+
+exit 0


Property changes on: packages/hdf5/branches/upstream/current/bin/install-sh
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/bin/iostats
===================================================================
--- packages/hdf5/branches/upstream/current/bin/iostats	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/iostats	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,98 @@
+#!/usr/bin/perl
+#
+# 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.
+#
+
+# Usage: pipe the output of Linux's `strace' program into the stdin of
+# this command, and the output of this command into gnuplot.
+
+my ($fast,$npasses);
+if ($ARGV[0] =~ /^--?fast$/) {
+  $fast = 1;
+  shift;
+}
+
+my $filename = shift || "tstab2.h5";
+my $total = 0;
+my %What;			# What{pos}{nbytes}{r|w} = naccesses
+my($total_writes, $total_bytes_out, $total_reads, $total_bytes_in);
+
+while (<>) {
+  if (!defined $fd) {
+    if (/^open\("(.*?)".*=\s+(\d+)/ && $1 eq $filename) {
+      $fd = $2;
+      $pos = 0;
+    }
+  } elsif (/^close\((\d+)/ && $1==$fd) {
+    $fd = undef;
+  } elsif (!$fast &&
+	   /^lseek\((\d+), -?\d+,.*= (\d+)/ &&
+	   $1==$fd && $2>=0) {
+    $pos = $2;
+  } elsif (!$fast && /^lseek\((\d+),/ && $1==$fd) {
+    die $_;
+  } elsif (/^write\((\d+), ".*?"(\.\.\.)?, \d+\)\s*= (\d+)/ &&
+	   $1==$fd && $3>=0) {
+    my $nbytes = $3;
+    if ($fast) {
+      $total_writes++;
+      $total_bytes_out += $nbytes;
+    } else {
+      $What{$pos}{$nbytes}{w}++;
+      printf "%d %d\n", $total, $pos;
+      $pos += $nbytes;
+      $total += $nbytes;
+    }
+  } elsif (/^write\((\d+),/ && $1==$fd) {
+    die $_;
+  } elsif (/^read\((\d+), ".*?"(\.\.\.)?, \d+\)\s*= (\d+)/ &&
+	   $1==$fd && $3>=0) {
+    my $nbytes = $3;
+    if ($fast) {
+      $total_reads++;
+      $total_bytes_in += $nbytes;
+    } else {
+      $What{$pos}{$nbytes}{r}++;
+      printf "%d %d\n", $total, $pos;
+      $pos += $nbytes;
+      $total += $nbytes;
+    }
+  } elsif (/^read\((\d+),/ && $1==$fd) {
+    die $_;
+  }
+}
+     
+
+if (!$fast) {
+  print "="x36, "\n"; 
+  printf "%8s %8s %8s %8s\n","Position","NBytes","NReads","NWrites";
+  for $pos (sort {$a<=>$b} keys %What) {
+    for $nbytes (sort {$a<=>$b} keys %{$What{$pos}}) {
+      printf("%8d %8d %8d %8d\n", $pos, $nbytes,
+	     $What{$pos}{$nbytes}{r},
+	     $What{$pos}{$nbytes}{w});
+      $total_writes += $What{$pos}{$nbytes}{w};
+      $total_reads  += $What{$pos}{$nbytes}{r};
+      $total_bytes_out += $What{$pos}{$nbytes}{w} * $nbytes;
+      $total_bytes_in  += $What{$pos}{$nbytes}{r} * $nbytes;
+    }
+  }
+}
+
+print "="x36, "\n";
+printf("Write: %8d calls, %10d total bytes, %10g average bytes\n",
+       $total_writes, $total_bytes_out, $total_bytes_out/$total_writes)
+  if $total_writes;
+printf("Read:  %8d calls, %10d total bytes, %10g average bytes\n",
+       $total_reads, $total_bytes_in, $total_bytes_in/$total_reads)
+  if $total_reads;


Property changes on: packages/hdf5/branches/upstream/current/bin/iostats
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/bin/locate_sw
===================================================================
--- packages/hdf5/branches/upstream/current/bin/locate_sw	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/locate_sw	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,296 @@
+#!/bin/sh
+#
+# 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.
+#
+
+# Try to locate the software as named in argument.
+# This is a sequential search of all possible locations of the software.
+# Usage: locate_sw <SW-Name>
+# It prints a string showing the paths leading to the include, lib and bin
+# directory of the software, separated by colons.  E.g., if the software is
+# located in /usr/sdt/*, it prints
+# /usr/sdt/include:/usr/sdt/lib:/usr/sdt/bin
+# Any component that is not found will be returned as an empty string. E.g.,
+# if somehow the header files of the software are not found, it prints
+# :/usr/sdt/lib;/usr/sdt/bin
+
+# Function definitions
+USAGE()
+{
+    echo "Usage: locate_sw <SW-Name>"
+    echo "    where <SW-Name> can be hdf4, hdf5, zlib"
+    echo "    It prints the paths leading the header files (include),"
+    echo "    library (lib), and tools (bin).   E.g.,"
+    echo "    /usr/sdt/include:/usr/sdt/lib:/usr/sdt/bin"
+    echo "    Any component that is not found will be returned as an empty string. E.g.,"
+    echo "    if somehow the header files of the software are not found, it prints"
+    echo "    :/usr/sdt/lib;/usr/sdt/bin"
+    echo "Exit code: 0 if software located; otherwise non-zero"
+}
+
+# locate hdf4 software
+locate_hdf4()
+{
+# this default is the best guess of locating hdf4 software
+swpaths_defaults="/usr/ncsa /usr/sdt /usr/local"
+swpaths=
+
+case "$OSname" in
+    SunOS)
+        case "$OSrelease" in
+            5.7)
+               swpaths="/afs/ncsa/packages/hdf/SunOS_5.7"
+               ;;
+	    *)
+            # use default
+	       ;;
+        esac
+        ;;
+    HP-UX)
+        case "$OSrelease" in
+	   B.11.00)
+	        swpaths="/afs/ncsa/packages/hdf/HPUX_11.00"
+               ;;
+           *)
+           # use default
+              ;;
+        esac
+	;;
+    IRIX)
+	swpaths="/afs/ncsa/packages/hdf/IRIX_6.5"
+	;;
+    IRIX64)
+	case "$CC" in
+	cc|"")	#default cc
+	    abi=`cc -show_defaults 2>&1 | grep 'default abi'`
+	    case $abi in
+	    *-n32)
+		swpaths="/afs/ncsa/packages/hdf/IRIX64-n32_6.5"
+		;;
+	    *-64)
+		swpaths="/afs/ncsa/packages/hdf/IRIX64_6.5"
+		;;
+	    *)
+		swpaths="/afs/ncsa/packages/hdf/IRIX64_6.5"
+		;;
+	    esac	# $abi
+	    ;;
+	*-n32)
+	    swpaths="/afs/ncsa/packages/hdf/IRIX64-n32_6.5"
+	    ;;
+	*)
+	    swpaths="/afs/ncsa/packages/hdf/IRIX64_6.5"
+	    ;;
+	esac
+	;;
+    Linux)
+	swpaths="/afs/ncsa/packages/hdf/Linux"
+	;;
+    OSF1)
+	swpaths="/afs/ncsa/packages/hdf/OSF1_V4.0"
+	;;
+    *)
+	# just use the defaults
+	;;
+esac
+
+# Check if the hdf4 software is actually available.
+# Accept the directory only if needed .h, .a and tools are found
+# in the same place.  That way, they are more likely to be of the
+# same version.
+# 
+swpaths="$swpaths $swpaths_defaults"
+for sw in $swpaths; do
+    if [ -r $sw/include/hdf.h -a -r $sw/lib/libdf.a -a -r $sw/bin/hdp ]; then
+	SW_inc=$sw/include
+	SW_lib=$sw/lib
+	SW_bin=$sw/bin
+	SW_Location=$sw
+	break
+    fi
+done
+}
+
+# locate hdf5 software
+locate_hdf5()
+{
+# this default is the best guess of locating hdf5 software
+swpaths_defaults="/usr/ncsa /usr/sdt /usr/local"
+swpaths=
+
+case "$OSname" in
+    SunOS)
+        case "$OSrelease" in
+            5.7)
+               swpaths="/afs/ncsa/packages/hdf5/SunOS_5.7"
+               ;;
+	    *)
+            # use default
+	       ;;
+        esac
+        ;;
+    HP-UX)
+        case "$OSrelease" in
+	   B.11.00)
+	        swpaths="/afs/ncsa/packages/hdf5/HPUX_11.00"
+               ;;
+           *)
+           # use default
+              ;;
+        esac
+	;;
+    IRIX)
+	swpaths="/afs/ncsa/packages/hdf5/IRIX_6.5"
+	;;
+    IRIX64)
+	case "$CC" in
+	cc|"")	#default cc
+	    abi=`cc -show_defaults 2>&1 | grep 'default abi'`
+	    case $abi in
+	    *-n32)
+		swpaths="/afs/ncsa/packages/hdf5/IRIX64-n32_6.5"
+		;;
+	    *-64)
+		#swpaths="/afs/ncsa/packages/hdf5/IRIX64_6.5"
+                swpaths="/afs/ncsa/packages/hdf5/5-1.4.3-irix64"
+		;;
+	    *)
+		#swpaths="/afs/ncsa/packages/hdf5/IRIX64_6.5"
+                swpaths="/afs/ncsa/packages/hdf5/5-1.4.3-irix64"  
+		;;
+	    esac	# $abi
+	    ;;
+	*-n32)
+	    swpaths="/afs/ncsa/packages/hdf5/IRIX64-n32_6.5"
+	    ;;
+	*)
+	    #swpaths="/afs/ncsa/packages/hdf5/IRIX64_6.5"
+            swpaths="/afs/ncsa/packages/hdf5/5-1.4.3-irix64"
+	    ;;
+	esac
+	;;
+    Linux)
+	swpaths="/afs/ncsa/packages/hdf5/Linux"
+	;;
+    FreeBSD)
+        swpaths="/afs/ncsa/packages/hdf5/FreeBSD"
+        ;;
+    OSF1)
+	swpaths="/afs/ncsa/packages/hdf5/OSF1_V4.0"
+	;;
+    *)
+	# just use the defaults
+	;;
+esac
+
+# Check if the hdf5 software is actually available.
+# Accept the directory only if needed .h, .a and tools are found
+# in the same place.  That way, they are more likely to be of the
+# same version.
+# 
+swpaths="$swpaths $swpaths_defaults"
+for sw in $swpaths; do
+    if [ -r $sw/include/hdf5.h -a -r $sw/lib/libhdf5.a -a -r $sw/bin/h5dump ]; then
+	SW_inc=$sw/include
+	SW_lib=$sw/lib
+	SW_bin=$sw/bin
+	SW_Location=$sw
+	break
+    fi
+done
+}
+
+# locate zlib software
+locate_zlib()
+{
+# this default is the best guess of locating zlib software
+swpaths_defaults="/usr /usr/local /usr/ncsa /usr/sdt"
+swpaths=
+
+
+# Check if the zlib software is actually available.
+# Accept the directory only if needed .h, .a and tools are found
+# in the same place.  That way, they are more likely to be of the
+# same version.
+# Don't know something specific to check the bin directory.  Maybe gzip?
+# Just make sure it exists.
+# 
+swpaths="$swpaths $swpaths_defaults"
+for sw in $swpaths; do
+    if [ -r $sw/include/zlib.h -a	\
+	    \( -r $sw/lib/libz.a -o -r $sw/lib/libz.so \) -a -d $cw/bin ]; then
+	SW_inc=$sw/include
+	SW_lib=$sw/lib
+	SW_bin=$sw/bin
+	SW_Location=$sw
+	break
+    fi
+done
+
+# if none found, try HDF4 software which contains a version of zlib.
+if [ x-$SW_Location = x- ]; then
+    locate_hdf4
+fi
+
+}
+
+# Main
+#
+# Options
+#
+if [ $# -lt 1 ]; then
+    USAGE
+    exit 1
+fi
+
+if [ "$1" = -h ]; then
+    USAGE
+    exit 0
+fi
+
+SW=$1
+shift
+
+# locations of the software seeked.
+SW_inc=			# include place
+SW_lib=			# library place
+SW_bin=			# binary place
+SW_Location=		# parent directory of all the above
+
+OSname=`uname -s`
+OSrelease=`uname -r`
+
+case $SW in
+hdf4|hdf)
+    locate_hdf4
+    ;;
+hdf5)
+    locate_hdf5
+    ;;
+zlib)
+    locate_zlib
+    ;;
+*)
+    echo "unknown software ($SW)"
+    USAGE
+    exit 1
+    ;;
+esac
+
+# show the results located, separated by commas.
+if [ -n "${SW_inc}" -a -n "${SW_lib}" -a -n "${SW_bin}" ]; then
+    echo ${SW_inc},${SW_lib},${SW_bin}
+    exit 0
+else
+    exit 1
+fi


Property changes on: packages/hdf5/branches/upstream/current/bin/locate_sw
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/bin/ltmain.sh
===================================================================
--- packages/hdf5/branches/upstream/current/bin/ltmain.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/ltmain.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5017 @@
+# ltmain.sh - Provide generalized library-building support services.
+# NOTE: Changing this file will not affect anything until you rerun configure.
+#
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+# Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Check that we have a working $echo.
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell, and then maybe $echo will work.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit 0
+fi
+
+# The name of this program.
+progname=`$echo "$0" | sed 's%^.*/%%'`
+modename="$progname"
+
+# Constants.
+PROGRAM=ltmain.sh
+PACKAGE=libtool
+VERSION=1.4.2
+TIMESTAMP=" (1.922.2.53 2001/09/11 03:18:52)"
+
+default_mode=
+help="Try \`$progname --help' for more information."
+magic="%%%MAGIC variable%%%"
+mkdir="mkdir"
+mv="mv -f"
+rm="rm -f"
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e 1s/^X//'
+sed_quote_subst='s/\([\\`\\"$\\\\]\)/\\\1/g'
+SP2NL='tr \040 \012'
+NL2SP='tr \015\012 \040\040'
+
+# NLS nuisances.
+# Only set LANG and LC_ALL to C if already set.
+# These must not be set unconditionally because not all systems understand
+# e.g. LANG=C (notably SCO).
+# We save the old values to restore during execute mode.
+if test "${LC_ALL+set}" = set; then
+  save_LC_ALL="$LC_ALL"; LC_ALL=C; export LC_ALL
+fi
+if test "${LANG+set}" = set; then
+  save_LANG="$LANG"; LANG=C; export LANG
+fi
+
+# Make sure IFS has a sensible default
+: ${IFS=" 	"}
+
+if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
+  echo "$modename: not configured to build any kind of library" 1>&2
+  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+  exit 1
+fi
+
+# Global variables.
+mode=$default_mode
+nonopt=
+prev=
+prevopt=
+run=
+show="$echo"
+show_help=
+execute_dlfiles=
+lo2o="s/\\.lo\$/.${objext}/"
+o2lo="s/\\.${objext}\$/.lo/"
+
+# Parse our command line options once, thoroughly.
+while test $# -gt 0
+do
+  arg="$1"
+  shift
+
+  case $arg in
+  -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) optarg= ;;
+  esac
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$prev"; then
+    case $prev in
+    execute_dlfiles)
+      execute_dlfiles="$execute_dlfiles $arg"
+      ;;
+    *)
+      eval "$prev=\$arg"
+      ;;
+    esac
+
+    prev=
+    prevopt=
+    continue
+  fi
+
+  # Have we seen a non-optional argument yet?
+  case $arg in
+  --help)
+    show_help=yes
+    ;;
+
+  --version)
+    echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP"
+    exit 0
+    ;;
+
+  --config)
+    sed -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0
+    exit 0
+    ;;
+
+  --debug)
+    echo "$progname: enabling shell trace mode"
+    set -x
+    ;;
+
+  --dry-run | -n)
+    run=:
+    ;;
+
+  --features)
+    echo "host: $host"
+    if test "$build_libtool_libs" = yes; then
+      echo "enable shared libraries"
+    else
+      echo "disable shared libraries"
+    fi
+    if test "$build_old_libs" = yes; then
+      echo "enable static libraries"
+    else
+      echo "disable static libraries"
+    fi
+    exit 0
+    ;;
+
+  --finish) mode="finish" ;;
+
+  --mode) prevopt="--mode" prev=mode ;;
+  --mode=*) mode="$optarg" ;;
+
+  --quiet | --silent)
+    show=:
+    ;;
+
+  -dlopen)
+    prevopt="-dlopen"
+    prev=execute_dlfiles
+    ;;
+
+  -*)
+    $echo "$modename: unrecognized option \`$arg'" 1>&2
+    $echo "$help" 1>&2
+    exit 1
+    ;;
+
+  *)
+    nonopt="$arg"
+    break
+    ;;
+  esac
+done
+
+if test -n "$prevopt"; then
+  $echo "$modename: option \`$prevopt' requires an argument" 1>&2
+  $echo "$help" 1>&2
+  exit 1
+fi
+
+# If this variable is set in any of the actions, the command in it
+# will be execed at the end.  This prevents here-documents from being
+# left over by shells.
+exec_cmd=
+
+if test -z "$show_help"; then
+
+  # Infer the operation mode.
+  if test -z "$mode"; then
+    case $nonopt in
+    *cc | *++ | gcc* | *-gcc*)
+      mode=link
+      for arg
+      do
+	case $arg in
+	-c)
+	   mode=compile
+	   break
+	   ;;
+	esac
+      done
+      ;;
+    *db | *dbx | *strace | *truss)
+      mode=execute
+      ;;
+    *install*|cp|mv)
+      mode=install
+      ;;
+    *rm)
+      mode=uninstall
+      ;;
+    *)
+      # If we have no mode, but dlfiles were specified, then do execute mode.
+      test -n "$execute_dlfiles" && mode=execute
+
+      # Just use the default operation mode.
+      if test -z "$mode"; then
+	if test -n "$nonopt"; then
+	  $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2
+	else
+	  $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2
+	fi
+      fi
+      ;;
+    esac
+  fi
+
+  # Only execute mode is allowed to have -dlopen flags.
+  if test -n "$execute_dlfiles" && test "$mode" != execute; then
+    $echo "$modename: unrecognized option \`-dlopen'" 1>&2
+    $echo "$help" 1>&2
+    exit 1
+  fi
+
+  # Change the help message to a mode-specific one.
+  generic_help="$help"
+  help="Try \`$modename --help --mode=$mode' for more information."
+
+  # These modes are in order of execution frequency so that they run quickly.
+  case $mode in
+  # libtool compile mode
+  compile)
+    modename="$modename: compile"
+    # Get the compilation command and the source file.
+    base_compile=
+    prev=
+    lastarg=
+    srcfile="$nonopt"
+    suppress_output=
+
+    user_target=no
+    for arg
+    do
+      case $prev in
+      "") ;;
+      xcompiler)
+	# Aesthetically quote the previous argument.
+	prev=
+	lastarg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+
+	case $arg in
+	# Double-quote args containing other shell metacharacters.
+	# Many Bourne shells cannot handle close brackets correctly
+	# in scan sets, so we specify it separately.
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+
+	# Add the previous argument to base_compile.
+	if test -z "$base_compile"; then
+	  base_compile="$lastarg"
+	else
+	  base_compile="$base_compile $lastarg"
+	fi
+	continue
+	;;
+      esac
+
+      # Accept any command-line options.
+      case $arg in
+      -o)
+	if test "$user_target" != "no"; then
+	  $echo "$modename: you cannot specify \`-o' more than once" 1>&2
+	  exit 1
+	fi
+	user_target=next
+	;;
+
+      -static)
+	build_old_libs=yes
+	continue
+	;;
+
+      -prefer-pic)
+	pic_mode=yes
+	continue
+	;;
+
+      -prefer-non-pic)
+	pic_mode=no
+	continue
+	;;
+
+      -Xcompiler)
+	prev=xcompiler
+	continue
+	;;
+
+      -Wc,*)
+	args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"`
+	lastarg=
+	save_ifs="$IFS"; IFS=','
+	for arg in $args; do
+	  IFS="$save_ifs"
+
+	  # Double-quote args containing other shell metacharacters.
+	  # Many Bourne shells cannot handle close brackets correctly
+	  # in scan sets, so we specify it separately.
+	  case $arg in
+	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	    arg="\"$arg\""
+	    ;;
+	  esac
+	  lastarg="$lastarg $arg"
+	done
+	IFS="$save_ifs"
+	lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"`
+
+	# Add the arguments to base_compile.
+	if test -z "$base_compile"; then
+	  base_compile="$lastarg"
+	else
+	  base_compile="$base_compile $lastarg"
+	fi
+	continue
+	;;
+      esac
+
+      case $user_target in
+      next)
+	# The next one is the -o target name
+	user_target=yes
+	continue
+	;;
+      yes)
+	# We got the output file
+	user_target=set
+	libobj="$arg"
+	continue
+	;;
+      esac
+
+      # Accept the current argument as the source file.
+      lastarg="$srcfile"
+      srcfile="$arg"
+
+      # Aesthetically quote the previous argument.
+
+      # Backslashify any backslashes, double quotes, and dollar signs.
+      # These are the only characters that are still specially
+      # interpreted inside of double-quoted scrings.
+      lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"`
+
+      # Double-quote args containing other shell metacharacters.
+      # Many Bourne shells cannot handle close brackets correctly
+      # in scan sets, so we specify it separately.
+      case $lastarg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	lastarg="\"$lastarg\""
+	;;
+      esac
+
+      # Add the previous argument to base_compile.
+      if test -z "$base_compile"; then
+	base_compile="$lastarg"
+      else
+	base_compile="$base_compile $lastarg"
+      fi
+    done
+
+    case $user_target in
+    set)
+      ;;
+    no)
+      # Get the name of the library object.
+      libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'`
+      ;;
+    *)
+      $echo "$modename: you must specify a target with \`-o'" 1>&2
+      exit 1
+      ;;
+    esac
+
+    # Recognize several different file suffixes.
+    # If the user specifies -o file.o, it is replaced with file.lo
+    xform='[cCFSfmso]'
+    case $libobj in
+    *.ada) xform=ada ;;
+    *.adb) xform=adb ;;
+    *.ads) xform=ads ;;
+    *.asm) xform=asm ;;
+    *.c++) xform=c++ ;;
+    *.cc) xform=cc ;;
+    *.cpp) xform=cpp ;;
+    *.cxx) xform=cxx ;;
+    *.f90) xform=f90 ;;
+    *.for) xform=for ;;
+    esac
+
+    libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"`
+
+    case $libobj in
+    *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;;
+    *)
+      $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2
+      exit 1
+      ;;
+    esac
+
+    if test -z "$base_compile"; then
+      $echo "$modename: you must specify a compilation command" 1>&2
+      $echo "$help" 1>&2
+      exit 1
+    fi
+
+    # Delete any leftover library objects.
+    if test "$build_old_libs" = yes; then
+      removelist="$obj $libobj"
+    else
+      removelist="$libobj"
+    fi
+
+    $run $rm $removelist
+    trap "$run $rm $removelist; exit 1" 1 2 15
+
+    # On Cygwin there's no "real" PIC flag so we must build both object types
+    case $host_os in
+    cygwin* | mingw* | pw32* | os2*)
+      pic_mode=default
+      ;;
+    esac
+    if test $pic_mode = no && test "$deplibs_check_method" != pass_all; then
+      # non-PIC code in shared libraries is not supported
+      pic_mode=default
+    fi
+
+    # Calculate the filename of the output object if compiler does
+    # not support -o with -c
+    if test "$compiler_c_o" = no; then
+      output_obj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
+      lockfile="$output_obj.lock"
+      removelist="$removelist $output_obj $lockfile"
+      trap "$run $rm $removelist; exit 1" 1 2 15
+    else
+      need_locks=no
+      lockfile=
+    fi
+
+    # Lock this critical section if it is needed
+    # We use this script file to make the link, it avoids creating a new file
+    if test "$need_locks" = yes; then
+      until $run ln "$0" "$lockfile" 2>/dev/null; do
+	$show "Waiting for $lockfile to be removed"
+	sleep 2
+      done
+    elif test "$need_locks" = warn; then
+      if test -f "$lockfile"; then
+	echo "\
+*** ERROR, $lockfile exists and contains:
+`cat $lockfile 2>/dev/null`
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$run $rm $removelist
+	exit 1
+      fi
+      echo $srcfile > "$lockfile"
+    fi
+
+    if test -n "$fix_srcfile_path"; then
+      eval srcfile=\"$fix_srcfile_path\"
+    fi
+
+    # Only build a PIC object if we are building libtool libraries.
+    if test "$build_libtool_libs" = yes; then
+      # Without this assignment, base_compile gets emptied.
+      fbsd_hideous_sh_bug=$base_compile
+
+      if test "$pic_mode" != no; then
+	# All platforms use -DPIC, to notify preprocessed assembler code.
+	command="$base_compile $srcfile $pic_flag -DPIC"
+      else
+	# Don't build PIC code
+	command="$base_compile $srcfile"
+      fi
+      if test "$build_old_libs" = yes; then
+	lo_libobj="$libobj"
+	dir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
+	if test "X$dir" = "X$libobj"; then
+	  dir="$objdir"
+	else
+	  dir="$dir/$objdir"
+	fi
+	libobj="$dir/"`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
+
+	if test -d "$dir"; then
+	  $show "$rm $libobj"
+	  $run $rm $libobj
+	else
+	  $show "$mkdir $dir"
+	  $run $mkdir $dir
+	  status=$?
+	  if test $status -ne 0 && test ! -d $dir; then
+	    exit $status
+	  fi
+	fi
+      fi
+      if test "$compiler_o_lo" = yes; then
+	output_obj="$libobj"
+	command="$command -o $output_obj"
+      elif test "$compiler_c_o" = yes; then
+	output_obj="$obj"
+	command="$command -o $output_obj"
+      fi
+
+      $run $rm "$output_obj"
+      $show "$command"
+      if $run eval "$command"; then :
+      else
+	test -n "$output_obj" && $run $rm $removelist
+	exit 1
+      fi
+
+      if test "$need_locks" = warn &&
+	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
+	echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$run $rm $removelist
+	exit 1
+      fi
+
+      # Just move the object if needed, then go on to compile the next one
+      if test x"$output_obj" != x"$libobj"; then
+	$show "$mv $output_obj $libobj"
+	if $run $mv $output_obj $libobj; then :
+	else
+	  error=$?
+	  $run $rm $removelist
+	  exit $error
+	fi
+      fi
+
+      # If we have no pic_flag, then copy the object into place and finish.
+      if (test -z "$pic_flag" || test "$pic_mode" != default) &&
+	 test "$build_old_libs" = yes; then
+	# Rename the .lo from within objdir to obj
+	if test -f $obj; then
+	  $show $rm $obj
+	  $run $rm $obj
+	fi
+
+	$show "$mv $libobj $obj"
+	if $run $mv $libobj $obj; then :
+	else
+	  error=$?
+	  $run $rm $removelist
+	  exit $error
+	fi
+
+	xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+	if test "X$xdir" = "X$obj"; then
+	  xdir="."
+	else
+	  xdir="$xdir"
+	fi
+	baseobj=`$echo "X$obj" | $Xsed -e "s%.*/%%"`
+	libobj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
+	# Now arrange that obj and lo_libobj become the same file
+	$show "(cd $xdir && $LN_S $baseobj $libobj)"
+	if $run eval '(cd $xdir && $LN_S $baseobj $libobj)'; then
+	  # Unlock the critical section if it was locked
+	  if test "$need_locks" != no; then
+	    $run $rm "$lockfile"
+	  fi
+	  exit 0
+	else
+	  error=$?
+	  $run $rm $removelist
+	  exit $error
+	fi
+      fi
+
+      # Allow error messages only from the first compilation.
+      suppress_output=' >/dev/null 2>&1'
+    fi
+
+    # Only build a position-dependent object if we build old libraries.
+    if test "$build_old_libs" = yes; then
+      if test "$pic_mode" != yes; then
+	# Don't build PIC code
+	command="$base_compile $srcfile"
+      else
+	# All platforms use -DPIC, to notify preprocessed assembler code.
+	command="$base_compile $srcfile $pic_flag -DPIC"
+      fi
+      if test "$compiler_c_o" = yes; then
+	command="$command -o $obj"
+	output_obj="$obj"
+      fi
+
+      # Suppress compiler output if we already did a PIC compilation.
+      command="$command$suppress_output"
+      $run $rm "$output_obj"
+      $show "$command"
+      if $run eval "$command"; then :
+      else
+	$run $rm $removelist
+	exit 1
+      fi
+
+      if test "$need_locks" = warn &&
+	 test x"`cat $lockfile 2>/dev/null`" != x"$srcfile"; then
+	echo "\
+*** ERROR, $lockfile contains:
+`cat $lockfile 2>/dev/null`
+
+but it should contain:
+$srcfile
+
+This indicates that another process is trying to use the same
+temporary object file, and libtool could not work around it because
+your compiler does not support \`-c' and \`-o' together.  If you
+repeat this compilation, it may succeed, by chance, but you had better
+avoid parallel builds (make -j) in this platform, or get a better
+compiler."
+
+	$run $rm $removelist
+	exit 1
+      fi
+
+      # Just move the object if needed
+      if test x"$output_obj" != x"$obj"; then
+	$show "$mv $output_obj $obj"
+	if $run $mv $output_obj $obj; then :
+	else
+	  error=$?
+	  $run $rm $removelist
+	  exit $error
+	fi
+      fi
+
+      # Create an invalid libtool object if no PIC, so that we do not
+      # accidentally link it into a program.
+      if test "$build_libtool_libs" != yes; then
+	$show "echo timestamp > $libobj"
+	$run eval "echo timestamp > \$libobj" || exit $?
+      else
+	# Move the .lo from within objdir
+	$show "$mv $libobj $lo_libobj"
+	if $run $mv $libobj $lo_libobj; then :
+	else
+	  error=$?
+	  $run $rm $removelist
+	  exit $error
+	fi
+      fi
+    fi
+
+    # Unlock the critical section if it was locked
+    if test "$need_locks" != no; then
+      $run $rm "$lockfile"
+    fi
+
+    exit 0
+    ;;
+
+  # libtool link mode
+  link | relink)
+    modename="$modename: link"
+    case $host in
+    *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+      # It is impossible to link a dll without this setting, and
+      # we shouldn't force the makefile maintainer to figure out
+      # which system we are compiling for in order to pass an extra
+      # flag for every libtool invokation.
+      # allow_undefined=no
+
+      # FIXME: Unfortunately, there are problems with the above when trying
+      # to make a dll which has undefined symbols, in which case not
+      # even a static library is built.  For now, we need to specify
+      # -no-undefined on the libtool link line when we can be certain
+      # that all symbols are satisfied, otherwise we get a static library.
+      allow_undefined=yes
+      ;;
+    *)
+      allow_undefined=yes
+      ;;
+    esac
+    libtool_args="$nonopt"
+    compile_command="$nonopt"
+    finalize_command="$nonopt"
+
+    compile_rpath=
+    finalize_rpath=
+    compile_shlibpath=
+    finalize_shlibpath=
+    convenience=
+    old_convenience=
+    deplibs=
+    old_deplibs=
+    compiler_flags=
+    linker_flags=
+    dllsearchpath=
+    lib_search_path=`pwd`
+
+    avoid_version=no
+    dlfiles=
+    dlprefiles=
+    dlself=no
+    export_dynamic=no
+    export_symbols=
+    export_symbols_regex=
+    generated=
+    libobjs=
+    ltlibs=
+    module=no
+    no_install=no
+    objs=
+    prefer_static_libs=no
+    preload=no
+    prev=
+    prevarg=
+    release=
+    rpath=
+    xrpath=
+    perm_rpath=
+    temp_rpath=
+    thread_safe=no
+    vinfo=
+
+    # We need to know -static, to get the right output filenames.
+    for arg
+    do
+      case $arg in
+      -all-static | -static)
+	if test "X$arg" = "X-all-static"; then
+	  if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
+	    $echo "$modename: warning: complete static linking is impossible in this configuration" 1>&2
+	  fi
+	  if test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	else
+	  if test -z "$pic_flag" && test -n "$link_static_flag"; then
+	    dlopen_self=$dlopen_self_static
+	  fi
+	fi
+	build_libtool_libs=no
+	build_old_libs=yes
+	prefer_static_libs=yes
+	break
+	;;
+      esac
+    done
+
+    # See if our shared archives depend on static archives.
+    test -n "$old_archive_from_new_cmds" && build_old_libs=yes
+
+    # Go through the arguments, transforming them on the way.
+    while test $# -gt 0; do
+      arg="$1"
+      shift
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test
+	;;
+      *) qarg=$arg ;;
+      esac
+      libtool_args="$libtool_args $qarg"
+
+      # If the previous option needs an argument, assign it.
+      if test -n "$prev"; then
+	case $prev in
+	output)
+	  compile_command="$compile_command @OUTPUT@"
+	  finalize_command="$finalize_command @OUTPUT@"
+	  ;;
+	esac
+
+	case $prev in
+	dlfiles|dlprefiles)
+	  if test "$preload" = no; then
+	    # Add the symbol object into the linking commands.
+	    compile_command="$compile_command @SYMFILE@"
+	    finalize_command="$finalize_command @SYMFILE@"
+	    preload=yes
+	  fi
+	  case $arg in
+	  *.la | *.lo) ;;  # We handle these cases below.
+	  force)
+	    if test "$dlself" = no; then
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  self)
+	    if test "$prev" = dlprefiles; then
+	      dlself=yes
+	    elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
+	      dlself=yes
+	    else
+	      dlself=needless
+	      export_dynamic=yes
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  *)
+	    if test "$prev" = dlfiles; then
+	      dlfiles="$dlfiles $arg"
+	    else
+	      dlprefiles="$dlprefiles $arg"
+	    fi
+	    prev=
+	    continue
+	    ;;
+	  esac
+	  ;;
+	expsyms)
+	  export_symbols="$arg"
+	  if test ! -f "$arg"; then
+	    $echo "$modename: symbol file \`$arg' does not exist"
+	    exit 1
+	  fi
+	  prev=
+	  continue
+	  ;;
+	expsyms_regex)
+	  export_symbols_regex="$arg"
+	  prev=
+	  continue
+	  ;;
+	release)
+	  release="-$arg"
+	  prev=
+	  continue
+	  ;;
+	rpath | xrpath)
+	  # We need an absolute path.
+	  case $arg in
+	  [\\/]* | [A-Za-z]:[\\/]*) ;;
+	  *)
+	    $echo "$modename: only absolute run-paths are allowed" 1>&2
+	    exit 1
+	    ;;
+	  esac
+	  if test "$prev" = rpath; then
+	    case "$rpath " in
+	    *" $arg "*) ;;
+	    *) rpath="$rpath $arg" ;;
+	    esac
+	  else
+	    case "$xrpath " in
+	    *" $arg "*) ;;
+	    *) xrpath="$xrpath $arg" ;;
+	    esac
+	  fi
+	  prev=
+	  continue
+	  ;;
+	xcompiler)
+	  compiler_flags="$compiler_flags $qarg"
+	  prev=
+	  compile_command="$compile_command $qarg"
+	  finalize_command="$finalize_command $qarg"
+	  continue
+	  ;;
+	xlinker)
+	  linker_flags="$linker_flags $qarg"
+	  compiler_flags="$compiler_flags $wl$qarg"
+	  prev=
+	  compile_command="$compile_command $wl$qarg"
+	  finalize_command="$finalize_command $wl$qarg"
+	  continue
+	  ;;
+	*)
+	  eval "$prev=\"\$arg\""
+	  prev=
+	  continue
+	  ;;
+	esac
+      fi # test -n $prev
+
+      prevarg="$arg"
+
+      case $arg in
+      -all-static)
+	if test -n "$link_static_flag"; then
+	  compile_command="$compile_command $link_static_flag"
+	  finalize_command="$finalize_command $link_static_flag"
+	fi
+	continue
+	;;
+
+      -allow-undefined)
+	# FIXME: remove this flag sometime in the future.
+	$echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2
+	continue
+	;;
+
+      -avoid-version)
+	avoid_version=yes
+	continue
+	;;
+
+      -dlopen)
+	prev=dlfiles
+	continue
+	;;
+
+      -dlpreopen)
+	prev=dlprefiles
+	continue
+	;;
+
+      -export-dynamic)
+	export_dynamic=yes
+	continue
+	;;
+
+      -export-symbols | -export-symbols-regex)
+	if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+	  $echo "$modename: more than one -exported-symbols argument is not allowed"
+	  exit 1
+	fi
+	if test "X$arg" = "X-export-symbols"; then
+	  prev=expsyms
+	else
+	  prev=expsyms_regex
+	fi
+	continue
+	;;
+
+      # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
+      # so, if we see these flags be careful not to treat them like -L
+      -L[A-Z][A-Z]*:*)
+	case $with_gcc/$host in
+	no/*-*-irix*)
+	  compile_command="$compile_command $arg"
+	  finalize_command="$finalize_command $arg"
+	  ;;
+	esac
+	continue
+	;;
+
+      -L*)
+	dir=`$echo "X$arg" | $Xsed -e 's/^-L//'`
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  absdir=`cd "$dir" && pwd`
+	  if test -z "$absdir"; then
+	    $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2
+	    exit 1
+	  fi
+	  dir="$absdir"
+	  ;;
+	esac
+	case "$deplibs " in
+	*" -L$dir "*) ;;
+	*)
+	  deplibs="$deplibs -L$dir"
+	  lib_search_path="$lib_search_path $dir"
+	  ;;
+	esac
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  case :$dllsearchpath: in
+	  *":$dir:"*) ;;
+	  *) dllsearchpath="$dllsearchpath:$dir";;
+	  esac
+	  ;;
+	esac
+	continue
+	;;
+
+      -l*)
+	if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
+	  case $host in
+	  *-*-cygwin* | *-*-pw32* | *-*-beos*)
+	    # These systems don't actually have a C or math library (as such)
+	    continue
+	    ;;
+	  *-*-mingw* | *-*-os2*)
+	    # These systems don't actually have a C library (as such)
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  *-*-openbsd*)
+	    # Do not include libc due to us having libc/libc_r.
+	    test "X$arg" = "X-lc" && continue
+	    ;;
+	  esac
+	 elif test "X$arg" = "X-lc_r"; then
+	  case $host in
+	  *-*-openbsd*)
+	    # Do not include libc_r directly, use -pthread flag.
+	    continue
+	    ;;
+	  esac
+	fi
+	deplibs="$deplibs $arg"
+	continue
+	;;
+
+      -module)
+	module=yes
+	continue
+	;;
+
+      -no-fast-install)
+	fast_install=no
+	continue
+	;;
+
+      -no-install)
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  # The PATH hackery in wrapper scripts is required on Windows
+	  # in order for the loader to find any dlls it needs.
+	  $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2
+	  $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2
+	  fast_install=no
+	  ;;
+	*) no_install=yes ;;
+	esac
+	continue
+	;;
+
+      -no-undefined)
+	allow_undefined=no
+	continue
+	;;
+
+      -o) prev=output ;;
+
+      -release)
+	prev=release
+	continue
+	;;
+
+      -rpath)
+	prev=rpath
+	continue
+	;;
+
+      -R)
+	prev=xrpath
+	continue
+	;;
+
+      -R*)
+	dir=`$echo "X$arg" | $Xsed -e 's/^-R//'`
+	# We need an absolute path.
+	case $dir in
+	[\\/]* | [A-Za-z]:[\\/]*) ;;
+	*)
+	  $echo "$modename: only absolute run-paths are allowed" 1>&2
+	  exit 1
+	  ;;
+	esac
+	case "$xrpath " in
+	*" $dir "*) ;;
+	*) xrpath="$xrpath $dir" ;;
+	esac
+	continue
+	;;
+
+      -static)
+	# The effects of -static are defined in a previous loop.
+	# We used to do the same as -all-static on platforms that
+	# didn't have a PIC flag, but the assumption that the effects
+	# would be equivalent was wrong.  It would break on at least
+	# Digital Unix and AIX.
+	continue
+	;;
+
+      -thread-safe)
+	thread_safe=yes
+	continue
+	;;
+
+      -version-info)
+	prev=vinfo
+	continue
+	;;
+
+      -Wc,*)
+	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'`
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+	  case $flag in
+	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	    flag="\"$flag\""
+	    ;;
+	  esac
+	  arg="$arg $wl$flag"
+	  compiler_flags="$compiler_flags $flag"
+	done
+	IFS="$save_ifs"
+	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+	;;
+
+      -Wl,*)
+	args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'`
+	arg=
+	save_ifs="$IFS"; IFS=','
+	for flag in $args; do
+	  IFS="$save_ifs"
+	  case $flag in
+	    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	    flag="\"$flag\""
+	    ;;
+	  esac
+	  arg="$arg $wl$flag"
+	  compiler_flags="$compiler_flags $wl$flag"
+	  linker_flags="$linker_flags $flag"
+	done
+	IFS="$save_ifs"
+	arg=`$echo "X$arg" | $Xsed -e "s/^ //"`
+	;;
+
+      -Xcompiler)
+	prev=xcompiler
+	continue
+	;;
+
+      -Xlinker)
+	prev=xlinker
+	continue
+	;;
+
+      # Some other compiler flag.
+      -* | +*)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+	case $arg in
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+	;;
+
+      *.lo | *.$objext)
+	# A library or standard object.
+	if test "$prev" = dlfiles; then
+	  # This file was specified with -dlopen.
+	  if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
+	    dlfiles="$dlfiles $arg"
+	    prev=
+	    continue
+	  else
+	    # If libtool objects are unsupported, then we need to preload.
+	    prev=dlprefiles
+	  fi
+	fi
+
+	if test "$prev" = dlprefiles; then
+	  # Preload the old-style object.
+	  dlprefiles="$dlprefiles "`$echo "X$arg" | $Xsed -e "$lo2o"`
+	  prev=
+	else
+	  case $arg in
+	  *.lo) libobjs="$libobjs $arg" ;;
+	  *) objs="$objs $arg" ;;
+	  esac
+	fi
+	;;
+
+      *.$libext)
+	# An archive.
+	deplibs="$deplibs $arg"
+	old_deplibs="$old_deplibs $arg"
+	continue
+	;;
+
+      *.la)
+	# A libtool-controlled library.
+
+	if test "$prev" = dlfiles; then
+	  # This library was specified with -dlopen.
+	  dlfiles="$dlfiles $arg"
+	  prev=
+	elif test "$prev" = dlprefiles; then
+	  # The library was specified with -dlpreopen.
+	  dlprefiles="$dlprefiles $arg"
+	  prev=
+	else
+	  deplibs="$deplibs $arg"
+	fi
+	continue
+	;;
+
+      # Some other compiler argument.
+      *)
+	# Unknown arguments in both finalize_command and compile_command need
+	# to be aesthetically quoted because they are evaled later.
+	arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+	case $arg in
+	*[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*|"")
+	  arg="\"$arg\""
+	  ;;
+	esac
+	;;
+      esac # arg
+
+      # Now actually substitute the argument into the commands.
+      if test -n "$arg"; then
+	compile_command="$compile_command $arg"
+	finalize_command="$finalize_command $arg"
+      fi
+    done # argument parsing loop
+
+    if test -n "$prev"; then
+      $echo "$modename: the \`$prevarg' option requires an argument" 1>&2
+      $echo "$help" 1>&2
+      exit 1
+    fi
+
+    if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
+      eval arg=\"$export_dynamic_flag_spec\"
+      compile_command="$compile_command $arg"
+      finalize_command="$finalize_command $arg"
+    fi
+
+    # calculate the name of the file, without its directory
+    outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'`
+    libobjs_save="$libobjs"
+
+    if test -n "$shlibpath_var"; then
+      # get the directories listed in $shlibpath_var
+      eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
+    else
+      shlib_search_path=
+    fi
+    eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
+    eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
+
+    output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'`
+    if test "X$output_objdir" = "X$output"; then
+      output_objdir="$objdir"
+    else
+      output_objdir="$output_objdir/$objdir"
+    fi
+    # Create the object directory.
+    if test ! -d $output_objdir; then
+      $show "$mkdir $output_objdir"
+      $run $mkdir $output_objdir
+      status=$?
+      if test $status -ne 0 && test ! -d $output_objdir; then
+	exit $status
+      fi
+    fi
+
+    # Determine the type of output
+    case $output in
+    "")
+      $echo "$modename: you must specify an output file" 1>&2
+      $echo "$help" 1>&2
+      exit 1
+      ;;
+    *.$libext) linkmode=oldlib ;;
+    *.lo | *.$objext) linkmode=obj ;;
+    *.la) linkmode=lib ;;
+    *) linkmode=prog ;; # Anything else should be a program.
+    esac
+
+    specialdeplibs=
+    libs=
+    # Find all interdependent deplibs by searching for libraries
+    # that are linked more than once (e.g. -la -lb -la)
+    for deplib in $deplibs; do
+      case "$libs " in
+      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+      esac
+      libs="$libs $deplib"
+    done
+    deplibs=
+    newdependency_libs=
+    newlib_search_path=
+    need_relink=no # whether we're linking any uninstalled libtool libraries
+    notinst_deplibs= # not-installed libtool libraries
+    notinst_path= # paths that contain not-installed libtool libraries
+    case $linkmode in
+    lib)
+	passes="conv link"
+	for file in $dlfiles $dlprefiles; do
+	  case $file in
+	  *.la) ;;
+	  *)
+	    $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2
+	    exit 1
+	    ;;
+	  esac
+	done
+	;;
+    prog)
+	compile_deplibs=
+	finalize_deplibs=
+	alldeplibs=no
+	newdlfiles=
+	newdlprefiles=
+	passes="conv scan dlopen dlpreopen link"
+	;;
+    *)  passes="conv"
+	;;
+    esac
+    for pass in $passes; do
+      if test $linkmode = prog; then
+	# Determine which files to process
+	case $pass in
+	dlopen)
+	  libs="$dlfiles"
+	  save_deplibs="$deplibs" # Collect dlpreopened libraries
+	  deplibs=
+	  ;;
+	dlpreopen) libs="$dlprefiles" ;;
+	link) libs="$deplibs %DEPLIBS% $dependency_libs" ;;
+	esac
+      fi
+      for deplib in $libs; do
+	lib=
+	found=no
+	case $deplib in
+	-l*)
+	  if test $linkmode = oldlib && test $linkmode = obj; then
+	    $echo "$modename: warning: \`-l' is ignored for archives/objects: $deplib" 1>&2
+	    continue
+	  fi
+	  if test $pass = conv; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  name=`$echo "X$deplib" | $Xsed -e 's/^-l//'`
+	  for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do
+	    # Search the libtool library
+	    lib="$searchdir/lib${name}.la"
+	    if test -f "$lib"; then
+	      found=yes
+	      break
+	    fi
+	  done
+	  if test "$found" != yes; then
+	    # deplib doesn't seem to be a libtool library
+	    if test "$linkmode,$pass" = "prog,link"; then
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    else
+	      deplibs="$deplib $deplibs"
+	      test $linkmode = lib && newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    continue
+	  fi
+	  ;; # -l
+	-L*)
+	  case $linkmode in
+	  lib)
+	    deplibs="$deplib $deplibs"
+	    test $pass = conv && continue
+	    newdependency_libs="$deplib $newdependency_libs"
+	    newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+	    ;;
+	  prog)
+	    if test $pass = conv; then
+	      deplibs="$deplib $deplibs"
+	      continue
+	    fi
+	    if test $pass = scan; then
+	      deplibs="$deplib $deplibs"
+	      newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    ;;
+	  *)
+	    $echo "$modename: warning: \`-L' is ignored for archives/objects: $deplib" 1>&2
+	    ;;
+	  esac # linkmode
+	  continue
+	  ;; # -L
+	-R*)
+	  if test $pass = link; then
+	    dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'`
+	    # Make sure the xrpath contains only unique directories.
+	    case "$xrpath " in
+	    *" $dir "*) ;;
+	    *) xrpath="$xrpath $dir" ;;
+	    esac
+	  fi
+	  deplibs="$deplib $deplibs"
+	  continue
+	  ;;
+	*.la) lib="$deplib" ;;
+	*.$libext)
+	  if test $pass = conv; then
+	    deplibs="$deplib $deplibs"
+	    continue
+	  fi
+	  case $linkmode in
+	  lib)
+	    if test "$deplibs_check_method" != pass_all; then
+	      echo
+	      echo "*** Warning: This library needs some functionality provided by $deplib."
+	      echo "*** I have the capability to make that library automatically link in when"
+	      echo "*** you link to this library.  But I can only do this if you have a"
+	      echo "*** shared version of the library, which you do not appear to have."
+	    else
+	      echo
+	      echo "*** Warning: Linking the shared library $output against the"
+	      echo "*** static library $deplib is not portable!"
+	      deplibs="$deplib $deplibs"
+	    fi
+	    continue
+	    ;;
+	  prog)
+	    if test $pass != link; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      compile_deplibs="$deplib $compile_deplibs"
+	      finalize_deplibs="$deplib $finalize_deplibs"
+	    fi
+	    continue
+	    ;;
+	  esac # linkmode
+	  ;; # *.$libext
+	*.lo | *.$objext)
+	  if test $pass = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+	    # If there is no dlopen support or we're linking statically,
+	    # we need to preload.
+	    newdlprefiles="$newdlprefiles $deplib"
+	    compile_deplibs="$deplib $compile_deplibs"
+	    finalize_deplibs="$deplib $finalize_deplibs"
+	  else
+	    newdlfiles="$newdlfiles $deplib"
+	  fi
+	  continue
+	  ;;
+	%DEPLIBS%)
+	  alldeplibs=yes
+	  continue
+	  ;;
+	esac # case $deplib
+	if test $found = yes || test -f "$lib"; then :
+	else
+	  $echo "$modename: cannot find the library \`$lib'" 1>&2
+	  exit 1
+	fi
+
+	# Check to see that this really is a libtool archive.
+	if (sed -e '2q' $lib | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	else
+	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+	  exit 1
+	fi
+
+	ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'`
+	test "X$ladir" = "X$lib" && ladir="."
+
+	dlname=
+	dlopen=
+	dlpreopen=
+	libdir=
+	library_names=
+	old_library=
+	# If the library was installed with an old release of libtool,
+	# it will not redefine variable installed.
+	installed=yes
+
+	# Read the .la file
+	case $lib in
+	*/* | *\\*) . $lib ;;
+	*) . ./$lib ;;
+	esac
+
+	if test "$linkmode,$pass" = "lib,link" ||
+	   test "$linkmode,$pass" = "prog,scan" ||
+	   { test $linkmode = oldlib && test $linkmode = obj; }; then
+	   # Add dl[pre]opened files of deplib
+	  test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
+	  test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
+	fi
+
+	if test $pass = conv; then
+	  # Only check for convenience libraries
+	  deplibs="$lib $deplibs"
+	  if test -z "$libdir"; then
+	    if test -z "$old_library"; then
+	      $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+	      exit 1
+	    fi
+	    # It is a libtool convenience library, so add in its objects.
+	    convenience="$convenience $ladir/$objdir/$old_library"
+	    old_convenience="$old_convenience $ladir/$objdir/$old_library"
+	    tmp_libs=
+	    for deplib in $dependency_libs; do
+	      deplibs="$deplib $deplibs"
+	      case "$tmp_libs " in
+	      *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	      esac
+	      tmp_libs="$tmp_libs $deplib"
+	    done
+	  elif test $linkmode != prog && test $linkmode != lib; then
+	    $echo "$modename: \`$lib' is not a convenience library" 1>&2
+	    exit 1
+	  fi
+	  continue
+	fi # $pass = conv
+
+	# Get the name of the library we link against.
+	linklib=
+	for l in $old_library $library_names; do
+	  linklib="$l"
+	done
+	if test -z "$linklib"; then
+	  $echo "$modename: cannot find name of link library for \`$lib'" 1>&2
+	  exit 1
+	fi
+
+	# This library was specified with -dlopen.
+	if test $pass = dlopen; then
+	  if test -z "$libdir"; then
+	    $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2
+	    exit 1
+	  fi
+	  if test -z "$dlname" || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
+	    # If there is no dlname, no dlopen support or we're linking
+	    # statically, we need to preload.
+	    dlprefiles="$dlprefiles $lib"
+	  else
+	    newdlfiles="$newdlfiles $lib"
+	  fi
+	  continue
+	fi # $pass = dlopen
+
+	# We need an absolute path.
+	case $ladir in
+	[\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
+	*)
+	  abs_ladir=`cd "$ladir" && pwd`
+	  if test -z "$abs_ladir"; then
+	    $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2
+	    $echo "$modename: passing it literally to the linker, although it might fail" 1>&2
+	    abs_ladir="$ladir"
+	  fi
+	  ;;
+	esac
+	laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+
+	# Find the relevant object directory and library name.
+	if test "X$installed" = Xyes; then
+	  if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
+	    $echo "$modename: warning: library \`$lib' was moved." 1>&2
+	    dir="$ladir"
+	    absdir="$abs_ladir"
+	    libdir="$abs_ladir"
+	  else
+	    dir="$libdir"
+	    absdir="$libdir"
+	  fi
+	else
+	  dir="$ladir/$objdir"
+	  absdir="$abs_ladir/$objdir"
+	  # Remove this search path later
+	  notinst_path="$notinst_path $abs_ladir"
+	fi # $installed = yes
+	name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+
+	# This library was specified with -dlpreopen.
+	if test $pass = dlpreopen; then
+	  if test -z "$libdir"; then
+	    $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2
+	    exit 1
+	  fi
+	  # Prefer using a static library (so that no silly _DYNAMIC symbols
+	  # are required to link).
+	  if test -n "$old_library"; then
+	    newdlprefiles="$newdlprefiles $dir/$old_library"
+	  # Otherwise, use the dlname, so that lt_dlopen finds it.
+	  elif test -n "$dlname"; then
+	    newdlprefiles="$newdlprefiles $dir/$dlname"
+	  else
+	    newdlprefiles="$newdlprefiles $dir/$linklib"
+	  fi
+	fi # $pass = dlpreopen
+
+	if test -z "$libdir"; then
+	  # Link the convenience library
+	  if test $linkmode = lib; then
+	    deplibs="$dir/$old_library $deplibs"
+	  elif test "$linkmode,$pass" = "prog,link"; then
+	    compile_deplibs="$dir/$old_library $compile_deplibs"
+	    finalize_deplibs="$dir/$old_library $finalize_deplibs"
+	  else
+	    deplibs="$lib $deplibs"
+	  fi
+	  continue
+	fi
+
+	if test $linkmode = prog && test $pass != link; then
+	  newlib_search_path="$newlib_search_path $ladir"
+	  deplibs="$lib $deplibs"
+
+	  linkalldeplibs=no
+	  if test "$link_all_deplibs" != no || test -z "$library_names" ||
+	     test "$build_libtool_libs" = no; then
+	    linkalldeplibs=yes
+	  fi
+
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    case $deplib in
+	    -L*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test
+	    esac
+	    # Need to link against all dependency_libs?
+	    if test $linkalldeplibs = yes; then
+	      deplibs="$deplib $deplibs"
+	    else
+	      # Need to hardcode shared library paths
+	      # or/and link against static libraries
+	      newdependency_libs="$deplib $newdependency_libs"
+	    fi
+	    case "$tmp_libs " in
+	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	    esac
+	    tmp_libs="$tmp_libs $deplib"
+	  done # for deplib
+	  continue
+	fi # $linkmode = prog...
+
+	link_static=no # Whether the deplib will be linked statically
+	if test -n "$library_names" &&
+	   { test "$prefer_static_libs" = no || test -z "$old_library"; }; then
+	  # Link against this shared library
+
+	  if test "$linkmode,$pass" = "prog,link" ||
+	   { test $linkmode = lib && test $hardcode_into_libs = yes; }; then
+	    # Hardcode the library path.
+	    # Skip directories that are in the system default run-time
+	    # search path.
+	    case " $sys_lib_dlsearch_path " in
+	    *" $absdir "*) ;;
+	    *)
+	      case "$compile_rpath " in
+	      *" $absdir "*) ;;
+	      *) compile_rpath="$compile_rpath $absdir"
+	      esac
+	      ;;
+	    esac
+	    case " $sys_lib_dlsearch_path " in
+	    *" $libdir "*) ;;
+	    *)
+	      case "$finalize_rpath " in
+	      *" $libdir "*) ;;
+	      *) finalize_rpath="$finalize_rpath $libdir"
+	      esac
+	      ;;
+	    esac
+	    if test $linkmode = prog; then
+	      # We need to hardcode the library path
+	      if test -n "$shlibpath_var"; then
+		# Make sure the rpath contains only unique directories.
+		case "$temp_rpath " in
+		*" $dir "*) ;;
+		*" $absdir "*) ;;
+		*) temp_rpath="$temp_rpath $dir" ;;
+		esac
+	      fi
+	    fi
+	  fi # $linkmode,$pass = prog,link...
+
+	  if test "$alldeplibs" = yes &&
+	     { test "$deplibs_check_method" = pass_all ||
+	       { test "$build_libtool_libs" = yes &&
+		 test -n "$library_names"; }; }; then
+	    # We only need to search for static libraries
+	    continue
+	  fi
+
+	  if test "$installed" = no; then
+	    notinst_deplibs="$notinst_deplibs $lib"
+	    need_relink=yes
+	  fi
+
+	  if test -n "$old_archive_from_expsyms_cmds"; then
+	    # figure out the soname
+	    set dummy $library_names
+	    realname="$2"
+	    shift; shift
+	    libname=`eval \\$echo \"$libname_spec\"`
+	    # use dlname if we got it. it's perfectly good, no?
+	    if test -n "$dlname"; then
+	      soname="$dlname"
+	    elif test -n "$soname_spec"; then
+	      # bleh windows
+	      case $host in
+	      *cygwin*)
+		major=`expr $current - $age`
+		versuffix="-$major"
+		;;
+	      esac
+	      eval soname=\"$soname_spec\"
+	    else
+	      soname="$realname"
+	    fi
+
+	    # Make a new name for the extract_expsyms_cmds to use
+	    soroot="$soname"
+	    soname=`echo $soroot | sed -e 's/^.*\///'`
+	    newlib="libimp-`echo $soname | sed 's/^lib//;s/\.dll$//'`.a"
+
+	    # If the library has no export list, then create one now
+	    if test -f "$output_objdir/$soname-def"; then :
+	    else
+	      $show "extracting exported symbol list from \`$soname'"
+	      save_ifs="$IFS"; IFS='~'
+	      eval cmds=\"$extract_expsyms_cmds\"
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		$show "$cmd"
+		$run eval "$cmd" || exit $?
+	      done
+	      IFS="$save_ifs"
+	    fi
+
+	    # Create $newlib
+	    if test -f "$output_objdir/$newlib"; then :; else
+	      $show "generating import library for \`$soname'"
+	      save_ifs="$IFS"; IFS='~'
+	      eval cmds=\"$old_archive_from_expsyms_cmds\"
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		$show "$cmd"
+		$run eval "$cmd" || exit $?
+	      done
+	      IFS="$save_ifs"
+	    fi
+	    # make sure the library variables are pointing to the new library
+	    dir=$output_objdir
+	    linklib=$newlib
+	  fi # test -n $old_archive_from_expsyms_cmds
+
+	  if test $linkmode = prog || test "$mode" != relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    lib_linked=yes
+	    case $hardcode_action in
+	    immediate | unsupported)
+	      if test "$hardcode_direct" = no; then
+		add="$dir/$linklib"
+	      elif test "$hardcode_minus_L" = no; then
+		case $host in
+		*-*-sunos*) add_shlibpath="$dir" ;;
+		esac
+		add_dir="-L$dir"
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = no; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    relink)
+	      if test "$hardcode_direct" = yes; then
+		add="$dir/$linklib"
+	      elif test "$hardcode_minus_L" = yes; then
+		add_dir="-L$dir"
+		add="-l$name"
+	      elif test "$hardcode_shlibpath_var" = yes; then
+		add_shlibpath="$dir"
+		add="-l$name"
+	      else
+		lib_linked=no
+	      fi
+	      ;;
+	    *) lib_linked=no ;;
+	    esac
+
+	    if test "$lib_linked" != yes; then
+	      $echo "$modename: configuration error: unsupported hardcode properties"
+	      exit 1
+	    fi
+
+	    if test -n "$add_shlibpath"; then
+	      case :$compile_shlibpath: in
+	      *":$add_shlibpath:"*) ;;
+	      *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
+	      esac
+	    fi
+	    if test $linkmode = prog; then
+	      test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
+	      test -n "$add" && compile_deplibs="$add $compile_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	      if test "$hardcode_direct" != yes && \
+		 test "$hardcode_minus_L" != yes && \
+		 test "$hardcode_shlibpath_var" = yes; then
+		case :$finalize_shlibpath: in
+		*":$libdir:"*) ;;
+		*) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+		esac
+	      fi
+	    fi
+	  fi
+
+	  if test $linkmode = prog || test "$mode" = relink; then
+	    add_shlibpath=
+	    add_dir=
+	    add=
+	    # Finalize command for both is simple: just hardcode it.
+	    if test "$hardcode_direct" = yes; then
+	      add="$libdir/$linklib"
+	    elif test "$hardcode_minus_L" = yes; then
+	      add_dir="-L$libdir"
+	      add="-l$name"
+	    elif test "$hardcode_shlibpath_var" = yes; then
+	      case :$finalize_shlibpath: in
+	      *":$libdir:"*) ;;
+	      *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
+	      esac
+	      add="-l$name"
+	    else
+	      # We cannot seem to hardcode it, guess we'll fake it.
+	      add_dir="-L$libdir"
+	      add="-l$name"
+	    fi
+
+	    if test $linkmode = prog; then
+	      test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
+	      test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
+	    else
+	      test -n "$add_dir" && deplibs="$add_dir $deplibs"
+	      test -n "$add" && deplibs="$add $deplibs"
+	    fi
+	  fi
+	elif test $linkmode = prog; then
+	  if test "$alldeplibs" = yes &&
+	     { test "$deplibs_check_method" = pass_all ||
+	       { test "$build_libtool_libs" = yes &&
+		 test -n "$library_names"; }; }; then
+	    # We only need to search for static libraries
+	    continue
+	  fi
+
+	  # Try to link the static library
+	  # Here we assume that one of hardcode_direct or hardcode_minus_L
+	  # is not unsupported.  This is valid on all known static and
+	  # shared platforms.
+	  if test "$hardcode_direct" != unsupported; then
+	    test -n "$old_library" && linklib="$old_library"
+	    compile_deplibs="$dir/$linklib $compile_deplibs"
+	    finalize_deplibs="$dir/$linklib $finalize_deplibs"
+	  else
+	    compile_deplibs="-l$name -L$dir $compile_deplibs"
+	    finalize_deplibs="-l$name -L$dir $finalize_deplibs"
+	  fi
+	elif test "$build_libtool_libs" = yes; then
+	  # Not a shared library
+	  if test "$deplibs_check_method" != pass_all; then
+	    # We're trying link a shared library against a static one
+	    # but the system doesn't support it.
+
+	    # Just print a warning and add the library to dependency_libs so
+	    # that the program can be linked against the static library.
+	    echo
+	    echo "*** Warning: This library needs some functionality provided by $lib."
+	    echo "*** I have the capability to make that library automatically link in when"
+	    echo "*** you link to this library.  But I can only do this if you have a"
+	    echo "*** shared version of the library, which you do not appear to have."
+	    if test "$module" = yes; then
+	      echo "*** Therefore, libtool will create a static module, that should work "
+	      echo "*** as long as the dlopening application is linked with the -dlopen flag."
+	      if test -z "$global_symbol_pipe"; then
+		echo
+		echo "*** However, this would only work if libtool was able to extract symbol"
+		echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+		echo "*** not find such a program.  So, this module is probably useless."
+		echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	      fi
+	      if test "$build_old_libs" = no; then
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  else
+	    convenience="$convenience $dir/$old_library"
+	    old_convenience="$old_convenience $dir/$old_library"
+	    deplibs="$dir/$old_library $deplibs"
+	    link_static=yes
+	  fi
+	fi # link shared/static library?
+
+	if test $linkmode = lib; then
+	  if test -n "$dependency_libs" &&
+	     { test $hardcode_into_libs != yes || test $build_old_libs = yes ||
+	       test $link_static = yes; }; then
+	    # Extract -R from dependency_libs
+	    temp_deplibs=
+	    for libdir in $dependency_libs; do
+	      case $libdir in
+	      -R*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'`
+		   case " $xrpath " in
+		   *" $temp_xrpath "*) ;;
+		   *) xrpath="$xrpath $temp_xrpath";;
+		   esac;;
+	      *) temp_deplibs="$temp_deplibs $libdir";;
+	      esac
+	    done
+	    dependency_libs="$temp_deplibs"
+	  fi
+
+	  newlib_search_path="$newlib_search_path $absdir"
+	  # Link against this library
+	  test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
+	  # ... and its dependency_libs
+	  tmp_libs=
+	  for deplib in $dependency_libs; do
+	    newdependency_libs="$deplib $newdependency_libs"
+	    case "$tmp_libs " in
+	    *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
+	    esac
+	    tmp_libs="$tmp_libs $deplib"
+	  done
+
+	  if test $link_all_deplibs != no; then
+	    # Add the search paths of all dependency libraries
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      -L*) path="$deplib" ;;
+	      *.la)
+		dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'`
+		test "X$dir" = "X$deplib" && dir="."
+		# We need an absolute path.
+		case $dir in
+		[\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
+		*)
+		  absdir=`cd "$dir" && pwd`
+		  if test -z "$absdir"; then
+		    $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2
+		    absdir="$dir"
+		  fi
+		  ;;
+		esac
+		if grep "^installed=no" $deplib > /dev/null; then
+		  path="-L$absdir/$objdir"
+		else
+		  eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		  if test -z "$libdir"; then
+		    $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+		    exit 1
+		  fi
+		  if test "$absdir" != "$libdir"; then
+		    $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2
+		  fi
+		  path="-L$absdir"
+		fi
+		;;
+	      *) continue ;;
+	      esac
+	      case " $deplibs " in
+	      *" $path "*) ;;
+	      *) deplibs="$deplibs $path" ;;
+	      esac
+	    done
+	  fi # link_all_deplibs != no
+	fi # linkmode = lib
+      done # for deplib in $libs
+      if test $pass = dlpreopen; then
+	# Link the dlpreopened libraries before other libraries
+	for deplib in $save_deplibs; do
+	  deplibs="$deplib $deplibs"
+	done
+      fi
+      if test $pass != dlopen; then
+	test $pass != scan && dependency_libs="$newdependency_libs"
+	if test $pass != conv; then
+	  # Make sure lib_search_path contains only unique directories.
+	  lib_search_path=
+	  for dir in $newlib_search_path; do
+	    case "$lib_search_path " in
+	    *" $dir "*) ;;
+	    *) lib_search_path="$lib_search_path $dir" ;;
+	    esac
+	  done
+	  newlib_search_path=
+	fi
+
+	if test "$linkmode,$pass" != "prog,link"; then
+	  vars="deplibs"
+	else
+	  vars="compile_deplibs finalize_deplibs"
+	fi
+	for var in $vars dependency_libs; do
+	  # Add libraries to $var in reverse order
+	  eval tmp_libs=\"\$$var\"
+	  new_libs=
+	  for deplib in $tmp_libs; do
+	    case $deplib in
+	    -L*) new_libs="$deplib $new_libs" ;;
+	    *)
+	      case " $specialdeplibs " in
+	      *" $deplib "*) new_libs="$deplib $new_libs" ;;
+	      *)
+		case " $new_libs " in
+		*" $deplib "*) ;;
+		*) new_libs="$deplib $new_libs" ;;
+		esac
+		;;
+	      esac
+	      ;;
+	    esac
+	  done
+	  tmp_libs=
+	  for deplib in $new_libs; do
+	    case $deplib in
+	    -L*)
+	      case " $tmp_libs " in
+	      *" $deplib "*) ;;
+	      *) tmp_libs="$tmp_libs $deplib" ;;
+	      esac
+	      ;;
+	    *) tmp_libs="$tmp_libs $deplib" ;;
+	    esac
+	  done
+	  eval $var=\"$tmp_libs\"
+	done # for var
+      fi
+      if test "$pass" = "conv" &&
+       { test "$linkmode" = "lib" || test "$linkmode" = "prog"; }; then
+	libs="$deplibs" # reset libs
+	deplibs=
+      fi
+    done # for pass
+    if test $linkmode = prog; then
+      dlfiles="$newdlfiles"
+      dlprefiles="$newdlprefiles"
+    fi
+
+    case $linkmode in
+    oldlib)
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	$echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$rpath"; then
+	$echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$xrpath"; then
+	$echo "$modename: warning: \`-R' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$vinfo"; then
+	$echo "$modename: warning: \`-version-info' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$release"; then
+	$echo "$modename: warning: \`-release' is ignored for archives" 1>&2
+      fi
+
+      if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
+	$echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2
+      fi
+
+      # Now set the variables for building old libraries.
+      build_libtool_libs=no
+      oldlibs="$output"
+      objs="$objs$old_deplibs"
+      ;;
+
+    lib)
+      # Make sure we only generate libraries of the form `libNAME.la'.
+      case $outputname in
+      lib*)
+	name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'`
+	eval libname=\"$libname_spec\"
+	;;
+      *)
+	if test "$module" = no; then
+	  $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2
+	  $echo "$help" 1>&2
+	  exit 1
+	fi
+	if test "$need_lib_prefix" != no; then
+	  # Add the "lib" prefix for modules if required
+	  name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+	  eval libname=\"$libname_spec\"
+	else
+	  libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'`
+	fi
+	;;
+      esac
+
+      if test -n "$objs"; then
+	if test "$deplibs_check_method" != pass_all; then
+	  $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1
+	  exit 1
+	else
+	  echo
+	  echo "*** Warning: Linking the shared library $output against the non-libtool"
+	  echo "*** objects $objs is not portable!"
+	  libobjs="$libobjs $objs"
+	fi
+      fi
+
+      if test "$dlself" != no; then
+	$echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2
+      fi
+
+      set dummy $rpath
+      if test $# -gt 2; then
+	$echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2
+      fi
+      install_libdir="$2"
+
+      oldlibs=
+      if test -z "$rpath"; then
+	if test "$build_libtool_libs" = yes; then
+	  # Building a libtool convenience library.
+	  libext=al
+	  oldlibs="$output_objdir/$libname.$libext $oldlibs"
+	  build_libtool_libs=convenience
+	  build_old_libs=yes
+	fi
+
+	if test -n "$vinfo"; then
+	  $echo "$modename: warning: \`-version-info' is ignored for convenience libraries" 1>&2
+	fi
+
+	if test -n "$release"; then
+	  $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2
+	fi
+      else
+
+	# Parse the version information argument.
+	save_ifs="$IFS"; IFS=':'
+	set dummy $vinfo 0 0 0
+	IFS="$save_ifs"
+
+	if test -n "$8"; then
+	  $echo "$modename: too many parameters to \`-version-info'" 1>&2
+	  $echo "$help" 1>&2
+	  exit 1
+	fi
+
+	current="$2"
+	revision="$3"
+	age="$4"
+
+	# Check that each of the things are valid numbers.
+	case $current in
+	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+	*)
+	  $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit 1
+	  ;;
+	esac
+
+	case $revision in
+	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+	*)
+	  $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit 1
+	  ;;
+	esac
+
+	case $age in
+	0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;;
+	*)
+	  $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit 1
+	  ;;
+	esac
+
+	if test $age -gt $current; then
+	  $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2
+	  $echo "$modename: \`$vinfo' is not valid version information" 1>&2
+	  exit 1
+	fi
+
+	# Calculate the version variables.
+	major=
+	versuffix=
+	verstring=
+	case $version_type in
+	none) ;;
+
+	darwin)
+	  # Like Linux, but with the current version available in
+	  # verstring for coding it into the library header
+	  major=.`expr $current - $age`
+	  versuffix="$major.$age.$revision"
+	  # Darwin ld doesn't like 0 for these options...
+	  minor_current=`expr $current + 1`
+	  verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
+	  ;;
+
+	freebsd-aout)
+	  major=".$current"
+	  versuffix=".$current.$revision";
+	  ;;
+
+	freebsd-elf)
+	  major=".$current"
+	  versuffix=".$current";
+	  ;;
+
+	irix)
+	  major=`expr $current - $age + 1`
+	  verstring="sgi$major.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$revision
+	  while test $loop != 0; do
+	    iface=`expr $revision - $loop`
+	    loop=`expr $loop - 1`
+	    verstring="sgi$major.$iface:$verstring"
+	  done
+
+	  # Before this point, $major must not contain `.'.
+	  major=.$major
+	  versuffix="$major.$revision"
+	  ;;
+
+	linux)
+	  major=.`expr $current - $age`
+	  versuffix="$major.$age.$revision"
+	  ;;
+
+	osf)
+	  major=`expr $current - $age`
+	  versuffix=".$current.$age.$revision"
+	  verstring="$current.$age.$revision"
+
+	  # Add in all the interfaces that we are compatible with.
+	  loop=$age
+	  while test $loop != 0; do
+	    iface=`expr $current - $loop`
+	    loop=`expr $loop - 1`
+	    verstring="$verstring:${iface}.0"
+	  done
+
+	  # Make executables depend on our current version.
+	  verstring="$verstring:${current}.0"
+	  ;;
+
+	sunos)
+	  major=".$current"
+	  versuffix=".$current.$revision"
+	  ;;
+
+	windows)
+	  # Use '-' rather than '.', since we only want one
+	  # extension on DOS 8.3 filesystems.
+	  major=`expr $current - $age`
+	  versuffix="-$major"
+	  ;;
+
+	*)
+	  $echo "$modename: unknown library version type \`$version_type'" 1>&2
+	  echo "Fatal configuration error.  See the $PACKAGE docs for more information." 1>&2
+	  exit 1
+	  ;;
+	esac
+
+	# Clear the version info if we defaulted, and they specified a release.
+	if test -z "$vinfo" && test -n "$release"; then
+	  major=
+	  verstring="0.0"
+	  case $version_type in
+	  darwin)
+	    # we can't check for "0.0" in archive_cmds due to quoting
+	    # problems, so we reset it completely
+	    verstring=""
+	    ;;
+	  *)
+	    verstring="0.0"
+	    ;;
+	  esac
+	  if test "$need_version" = no; then
+	    versuffix=
+	  else
+	    versuffix=".0.0"
+	  fi
+	fi
+
+	# Remove version info from name if versioning should be avoided
+	if test "$avoid_version" = yes && test "$need_version" = no; then
+	  major=
+	  versuffix=
+	  verstring=""
+	fi
+
+	# Check to see if the archive will have undefined symbols.
+	if test "$allow_undefined" = yes; then
+	  if test "$allow_undefined_flag" = unsupported; then
+	    $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2
+	    build_libtool_libs=no
+	    build_old_libs=yes
+	  fi
+	else
+	  # Don't allow undefined symbols.
+	  allow_undefined_flag="$no_undefined_flag"
+	fi
+      fi
+
+      if test "$mode" != relink; then
+	# Remove our outputs.
+	$show "${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*"
+	$run ${rm}r $output_objdir/$outputname $output_objdir/$libname.* $output_objdir/${libname}${release}.*
+      fi
+
+      # Now set the variables for building old libraries.
+      if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
+	oldlibs="$oldlibs $output_objdir/$libname.$libext"
+
+	# Transform .lo files to .o files.
+	oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
+      fi
+
+      # Eliminate all temporary directories.
+      for path in $notinst_path; do
+	lib_search_path=`echo "$lib_search_path " | sed -e 's% $path % %g'`
+	deplibs=`echo "$deplibs " | sed -e 's% -L$path % %g'`
+	dependency_libs=`echo "$dependency_libs " | sed -e 's% -L$path % %g'`
+      done
+
+      if test -n "$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	temp_xrpath=
+	for libdir in $xrpath; do
+	  temp_xrpath="$temp_xrpath -R$libdir"
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  esac
+	done
+	if test $hardcode_into_libs != yes || test $build_old_libs = yes; then
+	  dependency_libs="$temp_xrpath $dependency_libs"
+	fi
+      fi
+
+      # Make sure dlfiles contains only unique files that won't be dlpreopened
+      old_dlfiles="$dlfiles"
+      dlfiles=
+      for lib in $old_dlfiles; do
+	case " $dlprefiles $dlfiles " in
+	*" $lib "*) ;;
+	*) dlfiles="$dlfiles $lib" ;;
+	esac
+      done
+
+      # Make sure dlprefiles contains only unique files
+      old_dlprefiles="$dlprefiles"
+      dlprefiles=
+      for lib in $old_dlprefiles; do
+	case "$dlprefiles " in
+	*" $lib "*) ;;
+	*) dlprefiles="$dlprefiles $lib" ;;
+	esac
+      done
+
+      if test "$build_libtool_libs" = yes; then
+	if test -n "$rpath"; then
+	  case $host in
+	  *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*)
+	    # these systems don't actually have a c library (as such)!
+	    ;;
+	  *-*-rhapsody* | *-*-darwin1.[012])
+	    # Rhapsody C library is in the System framework
+	    deplibs="$deplibs -framework System"
+	    ;;
+	  *-*-netbsd*)
+	    # Don't link with libc until the a.out ld.so is fixed.
+	    ;;
+	  *-*-openbsd*)
+	    # Do not include libc due to us having libc/libc_r.
+	    ;;
+	  *)
+	    # Add libc to deplibs on all other systems if necessary.
+	    if test $build_libtool_need_lc = "yes"; then
+	      deplibs="$deplibs -lc"
+	    fi
+	    ;;
+	  esac
+	fi
+
+	# Transform deplibs into only deplibs that can be linked in shared.
+	name_save=$name
+	libname_save=$libname
+	release_save=$release
+	versuffix_save=$versuffix
+	major_save=$major
+	# I'm not sure if I'm treating the release correctly.  I think
+	# release should show up in the -l (ie -lgmp5) so we don't want to
+	# add it in twice.  Is that correct?
+	release=""
+	versuffix=""
+	major=""
+	newdeplibs=
+	droppeddeps=no
+	case $deplibs_check_method in
+	pass_all)
+	  # Don't check for shared/static.  Everything works.
+	  # This might be a little naive.  We might want to check
+	  # whether the library exists or not.  But this is on
+	  # osf3 & osf4 and I'm not really sure... Just
+	  # implementing what was already the behaviour.
+	  newdeplibs=$deplibs
+	  ;;
+	test_compile)
+	  # This code stresses the "libraries are programs" paradigm to its
+	  # limits. Maybe even breaks it.  We compile a program, linking it
+	  # against the deplibs as a proxy for the library.  Then we can check
+	  # whether they linked in statically or dynamically with ldd.
+	  $rm conftest.c
+	  cat > conftest.c <<EOF
+	  int main() { return 0; }
+EOF
+	  $rm conftest
+	  $CC -o conftest conftest.c $deplibs
+	  if test $? -eq 0 ; then
+	    ldd_output=`ldd conftest`
+	    for i in $deplibs; do
+	      name="`expr $i : '-l\(.*\)'`"
+	      # If $name is empty we are operating on a -L argument.
+	      if test -n "$name" && test "$name" != "0"; then
+		libname=`eval \\$echo \"$libname_spec\"`
+		deplib_matches=`eval \\$echo \"$library_names_spec\"`
+		set dummy $deplib_matches
+		deplib_match=$2
+		if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		  newdeplibs="$newdeplibs $i"
+		else
+		  droppeddeps=yes
+		  echo
+		  echo "*** Warning: This library needs some functionality provided by $i."
+		  echo "*** I have the capability to make that library automatically link in when"
+		  echo "*** you link to this library.  But I can only do this if you have a"
+		  echo "*** shared version of the library, which you do not appear to have."
+		fi
+	      else
+		newdeplibs="$newdeplibs $i"
+	      fi
+	    done
+	  else
+	    # Error occured in the first compile.  Let's try to salvage the situation:
+	    # Compile a seperate program for each library.
+	    for i in $deplibs; do
+	      name="`expr $i : '-l\(.*\)'`"
+	     # If $name is empty we are operating on a -L argument.
+	      if test -n "$name" && test "$name" != "0"; then
+		$rm conftest
+		$CC -o conftest conftest.c $i
+		# Did it work?
+		if test $? -eq 0 ; then
+		  ldd_output=`ldd conftest`
+		  libname=`eval \\$echo \"$libname_spec\"`
+		  deplib_matches=`eval \\$echo \"$library_names_spec\"`
+		  set dummy $deplib_matches
+		  deplib_match=$2
+		  if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
+		    newdeplibs="$newdeplibs $i"
+		  else
+		    droppeddeps=yes
+		    echo
+		    echo "*** Warning: This library needs some functionality provided by $i."
+		    echo "*** I have the capability to make that library automatically link in when"
+		    echo "*** you link to this library.  But I can only do this if you have a"
+		    echo "*** shared version of the library, which you do not appear to have."
+		  fi
+		else
+		  droppeddeps=yes
+		  echo
+		  echo "*** Warning!  Library $i is needed by this library but I was not able to"
+		  echo "***  make it link in!  You will probably need to install it or some"
+		  echo "*** library that it depends on before this library will be fully"
+		  echo "*** functional.  Installing it before continuing would be even better."
+		fi
+	      else
+		newdeplibs="$newdeplibs $i"
+	      fi
+	    done
+	  fi
+	  ;;
+	file_magic*)
+	  set dummy $deplibs_check_method
+	  file_magic_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    name="`expr $a_deplib : '-l\(.*\)'`"
+	    # If $name is empty we are operating on a -L argument.
+	    if test -n "$name" && test "$name" != "0"; then
+	      libname=`eval \\$echo \"$libname_spec\"`
+	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		    potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		    for potent_lib in $potential_libs; do
+		      # Follow soft links.
+		      if ls -lLd "$potent_lib" 2>/dev/null \
+			 | grep " -> " >/dev/null; then
+			continue
+		      fi
+		      # The statement above tries to avoid entering an
+		      # endless loop below, in case of cyclic links.
+		      # We might still enter an endless loop, since a link
+		      # loop can be closed while we follow links,
+		      # but so what?
+		      potlib="$potent_lib"
+		      while test -h "$potlib" 2>/dev/null; do
+			potliblink=`ls -ld $potlib | sed 's/.* -> //'`
+			case $potliblink in
+			[\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
+			*) potlib=`$echo "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
+			esac
+		      done
+		      if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \
+			 | sed 10q \
+			 | egrep "$file_magic_regex" > /dev/null; then
+			newdeplibs="$newdeplibs $a_deplib"
+			a_deplib=""
+			break 2
+		      fi
+		    done
+	      done
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		echo
+		echo "*** Warning: This library needs some functionality provided by $a_deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have."
+	      fi
+	    else
+	      # Add a -L argument.
+	      newdeplibs="$newdeplibs $a_deplib"
+	    fi
+	  done # Gone through all deplibs.
+	  ;;
+	match_pattern*)
+	  set dummy $deplibs_check_method
+	  match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"`
+	  for a_deplib in $deplibs; do
+	    name="`expr $a_deplib : '-l\(.*\)'`"
+	    # If $name is empty we are operating on a -L argument.
+	    if test -n "$name" && test "$name" != "0"; then
+	      libname=`eval \\$echo \"$libname_spec\"`
+	      for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
+		potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
+		for potent_lib in $potential_libs; do
+		  if eval echo \"$potent_lib\" 2>/dev/null \
+		      | sed 10q \
+		      | egrep "$match_pattern_regex" > /dev/null; then
+		    newdeplibs="$newdeplibs $a_deplib"
+		    a_deplib=""
+		    break 2
+		  fi
+		done
+	      done
+	      if test -n "$a_deplib" ; then
+		droppeddeps=yes
+		echo
+		echo "*** Warning: This library needs some functionality provided by $a_deplib."
+		echo "*** I have the capability to make that library automatically link in when"
+		echo "*** you link to this library.  But I can only do this if you have a"
+		echo "*** shared version of the library, which you do not appear to have."
+	      fi
+	    else
+	      # Add a -L argument.
+	      newdeplibs="$newdeplibs $a_deplib"
+	    fi
+	  done # Gone through all deplibs.
+	  ;;
+	none | unknown | *)
+	  newdeplibs=""
+	  if $echo "X $deplibs" | $Xsed -e 's/ -lc$//' \
+	       -e 's/ -[LR][^ ]*//g' -e 's/[ 	]//g' |
+	     grep . >/dev/null; then
+	    echo
+	    if test "X$deplibs_check_method" = "Xnone"; then
+	      echo "*** Warning: inter-library dependencies are not supported in this platform."
+	    else
+	      echo "*** Warning: inter-library dependencies are not known to be supported."
+	    fi
+	    echo "*** All declared inter-library dependencies are being dropped."
+	    droppeddeps=yes
+	  fi
+	  ;;
+	esac
+	versuffix=$versuffix_save
+	major=$major_save
+	release=$release_save
+	libname=$libname_save
+	name=$name_save
+
+	case $host in
+	*-*-rhapsody* | *-*-darwin1.[012])
+	  # On Rhapsody replace the C library is the System framework
+	  newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	  ;;
+	esac
+
+	if test "$droppeddeps" = yes; then
+	  if test "$module" = yes; then
+	    echo
+	    echo "*** Warning: libtool could not satisfy all declared inter-library"
+	    echo "*** dependencies of module $libname.  Therefore, libtool will create"
+	    echo "*** a static module, that should work as long as the dlopening"
+	    echo "*** application is linked with the -dlopen flag."
+	    if test -z "$global_symbol_pipe"; then
+	      echo
+	      echo "*** However, this would only work if libtool was able to extract symbol"
+	      echo "*** lists from a program, using \`nm' or equivalent, but libtool could"
+	      echo "*** not find such a program.  So, this module is probably useless."
+	      echo "*** \`nm' from GNU binutils and a full rebuild may help."
+	    fi
+	    if test "$build_old_libs" = no; then
+	      oldlibs="$output_objdir/$libname.$libext"
+	      build_libtool_libs=module
+	      build_old_libs=yes
+	    else
+	      build_libtool_libs=no
+	    fi
+	  else
+	    echo "*** The inter-library dependencies that have been dropped here will be"
+	    echo "*** automatically added whenever a program is linked with this library"
+	    echo "*** or is declared to -dlopen it."
+
+	    if test $allow_undefined = no; then
+	      echo
+	      echo "*** Since this library must not contain undefined symbols,"
+	      echo "*** because either the platform does not support them or"
+	      echo "*** it was explicitly requested with -no-undefined,"
+	      echo "*** libtool will only create a static version of it."
+	      if test "$build_old_libs" = no; then
+		oldlibs="$output_objdir/$libname.$libext"
+		build_libtool_libs=module
+		build_old_libs=yes
+	      else
+		build_libtool_libs=no
+	      fi
+	    fi
+	  fi
+	fi
+	# Done checking deplibs!
+	deplibs=$newdeplibs
+      fi
+
+      # All the library-specific variables (install_libdir is set above).
+      library_names=
+      old_library=
+      dlname=
+
+      # Test again, we may have decided not to build it any more
+      if test "$build_libtool_libs" = yes; then
+	if test $hardcode_into_libs = yes; then
+	  # Hardcode the library paths
+	  hardcode_libdirs=
+	  dep_rpath=
+	  rpath="$finalize_rpath"
+	  test "$mode" != relink && rpath="$compile_rpath$rpath"
+	  for libdir in $rpath; do
+	    if test -n "$hardcode_libdir_flag_spec"; then
+	      if test -n "$hardcode_libdir_separator"; then
+		if test -z "$hardcode_libdirs"; then
+		  hardcode_libdirs="$libdir"
+		else
+		  # Just accumulate the unique libdirs.
+		  case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+		  *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		    ;;
+		  *)
+		    hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		    ;;
+		  esac
+		fi
+	      else
+		eval flag=\"$hardcode_libdir_flag_spec\"
+		dep_rpath="$dep_rpath $flag"
+	      fi
+	    elif test -n "$runpath_var"; then
+	      case "$perm_rpath " in
+	      *" $libdir "*) ;;
+	      *) perm_rpath="$perm_rpath $libdir" ;;
+	      esac
+	    fi
+	  done
+	  # Substitute the hardcoded libdirs into the rpath.
+	  if test -n "$hardcode_libdir_separator" &&
+	     test -n "$hardcode_libdirs"; then
+	    libdir="$hardcode_libdirs"
+	    eval dep_rpath=\"$hardcode_libdir_flag_spec\"
+	  fi
+	  if test -n "$runpath_var" && test -n "$perm_rpath"; then
+	    # We should set the runpath_var.
+	    rpath=
+	    for dir in $perm_rpath; do
+	      rpath="$rpath$dir:"
+	    done
+	    eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
+	  fi
+	  test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
+	fi
+
+	shlibpath="$finalize_shlibpath"
+	test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
+	if test -n "$shlibpath"; then
+	  eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
+	fi
+
+	# Get the real and link names of the library.
+	eval library_names=\"$library_names_spec\"
+	set dummy $library_names
+	realname="$2"
+	shift; shift
+
+	if test -n "$soname_spec"; then
+	  eval soname=\"$soname_spec\"
+	else
+	  soname="$realname"
+	fi
+	test -z "$dlname" && dlname=$soname
+
+	lib="$output_objdir/$realname"
+	for link
+	do
+	  linknames="$linknames $link"
+	done
+
+	# Ensure that we have .o objects for linkers which dislike .lo
+	# (e.g. aix) in case we are running --disable-static
+	for obj in $libobjs; do
+	  xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'`
+	  if test "X$xdir" = "X$obj"; then
+	    xdir="."
+	  else
+	    xdir="$xdir"
+	  fi
+	  baseobj=`$echo "X$obj" | $Xsed -e 's%^.*/%%'`
+	  oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
+	  if test ! -f $xdir/$oldobj; then
+	    $show "(cd $xdir && ${LN_S} $baseobj $oldobj)"
+	    $run eval '(cd $xdir && ${LN_S} $baseobj $oldobj)' || exit $?
+	  fi
+	done
+
+	# Use standard objects if they are pic
+	test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+
+	# Prepare the list of exported symbols
+	if test -z "$export_symbols"; then
+	  if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
+	    $show "generating symbol list for \`$libname.la'"
+	    export_symbols="$output_objdir/$libname.exp"
+	    $run $rm $export_symbols
+	    eval cmds=\"$export_symbols_cmds\"
+	    save_ifs="$IFS"; IFS='~'
+	    for cmd in $cmds; do
+	      IFS="$save_ifs"
+	      $show "$cmd"
+	      $run eval "$cmd" || exit $?
+	    done
+	    IFS="$save_ifs"
+	    if test -n "$export_symbols_regex"; then
+	      $show "egrep -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\""
+	      $run eval 'egrep -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
+	      $show "$mv \"${export_symbols}T\" \"$export_symbols\""
+	      $run eval '$mv "${export_symbols}T" "$export_symbols"'
+	    fi
+	  fi
+	fi
+
+	if test -n "$export_symbols" && test -n "$include_expsyms"; then
+	  $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"'
+	fi
+
+	if test -n "$convenience"; then
+	  if test -n "$whole_archive_flag_spec"; then
+	    eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
+	  else
+	    gentop="$output_objdir/${outputname}x"
+	    $show "${rm}r $gentop"
+	    $run ${rm}r "$gentop"
+	    $show "mkdir $gentop"
+	    $run mkdir "$gentop"
+	    status=$?
+	    if test $status -ne 0 && test ! -d "$gentop"; then
+	      exit $status
+	    fi
+	    generated="$generated $gentop"
+
+	    for xlib in $convenience; do
+	      # Extract the objects.
+	      case $xlib in
+	      [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+	      *) xabs=`pwd`"/$xlib" ;;
+	      esac
+	      xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+	      xdir="$gentop/$xlib"
+
+	      $show "${rm}r $xdir"
+	      $run ${rm}r "$xdir"
+	      $show "mkdir $xdir"
+	      $run mkdir "$xdir"
+	      status=$?
+	      if test $status -ne 0 && test ! -d "$xdir"; then
+		exit $status
+	      fi
+	      $show "(cd $xdir && $AR x $xabs)"
+	      $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+
+	      libobjs="$libobjs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
+	    done
+	  fi
+	fi
+
+	if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
+	  eval flag=\"$thread_safe_flag_spec\"
+	  linker_flags="$linker_flags $flag"
+	fi
+
+	# Make a backup of the uninstalled library when relinking
+	if test "$mode" = relink; then
+	  $run eval '(cd $output_objdir && $rm ${realname}U && $mv $realname ${realname}U)' || exit $?
+	fi
+
+	# Do each of the archive commands.
+	if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
+	  eval cmds=\"$archive_expsym_cmds\"
+	else
+	  eval cmds=\"$archive_cmds\"
+	fi
+	save_ifs="$IFS"; IFS='~'
+	for cmd in $cmds; do
+	  IFS="$save_ifs"
+	  $show "$cmd"
+	  $run eval "$cmd" || exit $?
+	done
+	IFS="$save_ifs"
+
+	# Restore the uninstalled library and exit
+	if test "$mode" = relink; then
+	  $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $?
+	  exit 0
+	fi
+
+	# Create links to the real library.
+	for linkname in $linknames; do
+	  if test "$realname" != "$linkname"; then
+	    $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)"
+	    $run eval '(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)' || exit $?
+	  fi
+	done
+
+	# If -module or -export-dynamic was specified, set the dlname.
+	if test "$module" = yes || test "$export_dynamic" = yes; then
+	  # On all known operating systems, these are identical.
+	  dlname="$soname"
+	fi
+      fi
+      ;;
+
+    obj)
+      if test -n "$deplibs"; then
+	$echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2
+      fi
+
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	$echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$rpath"; then
+	$echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$xrpath"; then
+	$echo "$modename: warning: \`-R' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$vinfo"; then
+	$echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2
+      fi
+
+      if test -n "$release"; then
+	$echo "$modename: warning: \`-release' is ignored for objects" 1>&2
+      fi
+
+      case $output in
+      *.lo)
+	if test -n "$objs$old_deplibs"; then
+	  $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2
+	  exit 1
+	fi
+	libobj="$output"
+	obj=`$echo "X$output" | $Xsed -e "$lo2o"`
+	;;
+      *)
+	libobj=
+	obj="$output"
+	;;
+      esac
+
+      # Delete the old objects.
+      $run $rm $obj $libobj
+
+      # Objects from convenience libraries.  This assumes
+      # single-version convenience libraries.  Whenever we create
+      # different ones for PIC/non-PIC, this we'll have to duplicate
+      # the extraction.
+      reload_conv_objs=
+      gentop=
+      # reload_cmds runs $LD directly, so let us get rid of
+      # -Wl from whole_archive_flag_spec
+      wl=
+
+      if test -n "$convenience"; then
+	if test -n "$whole_archive_flag_spec"; then
+	  eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\"
+	else
+	  gentop="$output_objdir/${obj}x"
+	  $show "${rm}r $gentop"
+	  $run ${rm}r "$gentop"
+	  $show "mkdir $gentop"
+	  $run mkdir "$gentop"
+	  status=$?
+	  if test $status -ne 0 && test ! -d "$gentop"; then
+	    exit $status
+	  fi
+	  generated="$generated $gentop"
+
+	  for xlib in $convenience; do
+	    # Extract the objects.
+	    case $xlib in
+	    [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+	    *) xabs=`pwd`"/$xlib" ;;
+	    esac
+	    xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+	    xdir="$gentop/$xlib"
+
+	    $show "${rm}r $xdir"
+	    $run ${rm}r "$xdir"
+	    $show "mkdir $xdir"
+	    $run mkdir "$xdir"
+	    status=$?
+	    if test $status -ne 0 && test ! -d "$xdir"; then
+	      exit $status
+	    fi
+	    $show "(cd $xdir && $AR x $xabs)"
+	    $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+
+	    reload_conv_objs="$reload_objs "`find $xdir -name \*.o -print -o -name \*.lo -print | $NL2SP`
+	  done
+	fi
+      fi
+
+      # Create the old-style object.
+      reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
+
+      output="$obj"
+      eval cmds=\"$reload_cmds\"
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+	IFS="$save_ifs"
+	$show "$cmd"
+	$run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+
+      # Exit if we aren't doing a library object file.
+      if test -z "$libobj"; then
+	if test -n "$gentop"; then
+	  $show "${rm}r $gentop"
+	  $run ${rm}r $gentop
+	fi
+
+	exit 0
+      fi
+
+      if test "$build_libtool_libs" != yes; then
+	if test -n "$gentop"; then
+	  $show "${rm}r $gentop"
+	  $run ${rm}r $gentop
+	fi
+
+	# Create an invalid libtool object if no PIC, so that we don't
+	# accidentally link it into a program.
+	$show "echo timestamp > $libobj"
+	$run eval "echo timestamp > $libobj" || exit $?
+	exit 0
+      fi
+
+      if test -n "$pic_flag" || test "$pic_mode" != default; then
+	# Only do commands if we really have different PIC objects.
+	reload_objs="$libobjs $reload_conv_objs"
+	output="$libobj"
+	eval cmds=\"$reload_cmds\"
+	save_ifs="$IFS"; IFS='~'
+	for cmd in $cmds; do
+	  IFS="$save_ifs"
+	  $show "$cmd"
+	  $run eval "$cmd" || exit $?
+	done
+	IFS="$save_ifs"
+      else
+	# Just create a symlink.
+	$show $rm $libobj
+	$run $rm $libobj
+	xdir=`$echo "X$libobj" | $Xsed -e 's%/[^/]*$%%'`
+	if test "X$xdir" = "X$libobj"; then
+	  xdir="."
+	else
+	  xdir="$xdir"
+	fi
+	baseobj=`$echo "X$libobj" | $Xsed -e 's%^.*/%%'`
+	oldobj=`$echo "X$baseobj" | $Xsed -e "$lo2o"`
+	$show "(cd $xdir && $LN_S $oldobj $baseobj)"
+	$run eval '(cd $xdir && $LN_S $oldobj $baseobj)' || exit $?
+      fi
+
+      if test -n "$gentop"; then
+	$show "${rm}r $gentop"
+	$run ${rm}r $gentop
+      fi
+
+      exit 0
+      ;;
+
+    prog)
+      case $host in
+	*cygwin*) output=`echo $output | sed -e 's,.exe$,,;s,$,.exe,'` ;;
+      esac
+      if test -n "$vinfo"; then
+	$echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2
+      fi
+
+      if test -n "$release"; then
+	$echo "$modename: warning: \`-release' is ignored for programs" 1>&2
+      fi
+
+      if test "$preload" = yes; then
+	if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown &&
+	   test "$dlopen_self_static" = unknown; then
+	  $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support."
+	fi
+      fi
+
+      case $host in
+      *-*-rhapsody* | *-*-darwin1.[012])
+	# On Rhapsody replace the C library is the System framework
+	compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'`
+	;;
+      esac
+
+      compile_command="$compile_command $compile_deplibs"
+      finalize_command="$finalize_command $finalize_deplibs"
+
+      if test -n "$rpath$xrpath"; then
+	# If the user specified any rpath flags, then add them.
+	for libdir in $rpath $xrpath; do
+	  # This is the magic to use -rpath.
+	  case "$finalize_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_rpath="$finalize_rpath $libdir" ;;
+	  esac
+	done
+      fi
+
+      # Now hardcode the library paths
+      rpath=
+      hardcode_libdirs=
+      for libdir in $compile_rpath $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    rpath="$rpath $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) perm_rpath="$perm_rpath $libdir" ;;
+	  esac
+	fi
+	case $host in
+	*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*)
+	  case :$dllsearchpath: in
+	  *":$libdir:"*) ;;
+	  *) dllsearchpath="$dllsearchpath:$libdir";;
+	  esac
+	  ;;
+	esac
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      compile_rpath="$rpath"
+
+      rpath=
+      hardcode_libdirs=
+      for libdir in $finalize_rpath; do
+	if test -n "$hardcode_libdir_flag_spec"; then
+	  if test -n "$hardcode_libdir_separator"; then
+	    if test -z "$hardcode_libdirs"; then
+	      hardcode_libdirs="$libdir"
+	    else
+	      # Just accumulate the unique libdirs.
+	      case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
+	      *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
+		;;
+	      *)
+		hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
+		;;
+	      esac
+	    fi
+	  else
+	    eval flag=\"$hardcode_libdir_flag_spec\"
+	    rpath="$rpath $flag"
+	  fi
+	elif test -n "$runpath_var"; then
+	  case "$finalize_perm_rpath " in
+	  *" $libdir "*) ;;
+	  *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
+	  esac
+	fi
+      done
+      # Substitute the hardcoded libdirs into the rpath.
+      if test -n "$hardcode_libdir_separator" &&
+	 test -n "$hardcode_libdirs"; then
+	libdir="$hardcode_libdirs"
+	eval rpath=\" $hardcode_libdir_flag_spec\"
+      fi
+      ###################################################################
+      # HACK: Fixes the problem with compilers on Irix[56] machines which
+      # can't handle long -Wl flags being sent to the linker during a
+      # "recompile" just before execution. -BW 08. April 2002
+      case "$host" in
+      *irix[56]*)
+        # Add in paths just for the HDF5 library stuff...
+        pwd=`pwd`;
+        rpath="${wl}-rpath ${wl}$pwd/.libs:$pwd/../src/.libs:$pwd/../../src/.libs:$pwd/../test/.libs$rpath";
+
+        # Modify the rpaths so that the compiler can handle the number
+        # of library paths
+        finalize_rpath=`echo $rpath | sed -e "s#:# ${wl}-rpath ${wl}#g"`;
+        compile_rpath=`echo $rpath | sed -e "s#:# ${wl}-rpath ${wl}#g"`;
+        ;;
+      *)
+        finalize_rpath="$rpath";
+        ;;
+      esac
+      ##finalize_rpath="$rpath"
+      #
+      # End HACK
+      #
+      ###################################################################
+
+      if test -n "$libobjs" && test "$build_old_libs" = yes; then
+	# Transform all the library objects into standard objects.
+	compile_command=`$echo "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+      fi
+
+      dlsyms=
+      if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
+	if test -n "$NM" && test -n "$global_symbol_pipe"; then
+	  dlsyms="${outputname}S.c"
+	else
+	  $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2
+	fi
+      fi
+
+      if test -n "$dlsyms"; then
+	case $dlsyms in
+	"") ;;
+	*.c)
+	  # Discover the nlist of each of the dlfiles.
+	  nlist="$output_objdir/${outputname}.nm"
+
+	  $show "$rm $nlist ${nlist}S ${nlist}T"
+	  $run $rm "$nlist" "${nlist}S" "${nlist}T"
+
+	  # Parse the name list into a source file.
+	  $show "creating $output_objdir/$dlsyms"
+
+	  test -z "$run" && $echo > "$output_objdir/$dlsyms" "\
+/* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */
+/* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */
+
+#ifdef __cplusplus
+extern \"C\" {
+#endif
+
+/* Prevent the only kind of declaration conflicts we can make. */
+#define lt_preloaded_symbols some_other_symbol
+
+/* External symbol declarations for the compiler. */\
+"
+
+	  if test "$dlself" = yes; then
+	    $show "generating symbol list for \`$output'"
+
+	    test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist"
+
+	    # Add our own program objects to the symbol list.
+	    progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
+	    for arg in $progfiles; do
+	      $show "extracting global C symbols from \`$arg'"
+	      $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+	    done
+
+	    if test -n "$exclude_expsyms"; then
+	      $run eval 'egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
+	      $run eval '$mv "$nlist"T "$nlist"'
+	    fi
+
+	    if test -n "$export_symbols_regex"; then
+	      $run eval 'egrep -e "$export_symbols_regex" "$nlist" > "$nlist"T'
+	      $run eval '$mv "$nlist"T "$nlist"'
+	    fi
+
+	    # Prepare the list of exported symbols
+	    if test -z "$export_symbols"; then
+	      export_symbols="$output_objdir/$output.exp"
+	      $run $rm $export_symbols
+	      $run eval "sed -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
+	    else
+	      $run eval "sed -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"'
+	      $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T'
+	      $run eval 'mv "$nlist"T "$nlist"'
+	    fi
+	  fi
+
+	  for arg in $dlprefiles; do
+	    $show "extracting global C symbols from \`$arg'"
+	    name=`echo "$arg" | sed -e 's%^.*/%%'`
+	    $run eval 'echo ": $name " >> "$nlist"'
+	    $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'"
+	  done
+
+	  if test -z "$run"; then
+	    # Make sure we have at least an empty file.
+	    test -f "$nlist" || : > "$nlist"
+
+	    if test -n "$exclude_expsyms"; then
+	      egrep -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
+	      $mv "$nlist"T "$nlist"
+	    fi
+
+	    # Try sorting and uniquifying the output.
+	    if grep -v "^: " < "$nlist" | sort +2 | uniq > "$nlist"S; then
+	      :
+	    else
+	      grep -v "^: " < "$nlist" > "$nlist"S
+	    fi
+
+	    if test -f "$nlist"S; then
+	      eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$dlsyms"'
+	    else
+	      echo '/* NONE */' >> "$output_objdir/$dlsyms"
+	    fi
+
+	    $echo >> "$output_objdir/$dlsyms" "\
+
+#undef lt_preloaded_symbols
+
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr address;
+}
+lt_preloaded_symbols[] =
+{\
+"
+
+	    eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms"
+
+	    $echo >> "$output_objdir/$dlsyms" "\
+  {0, (lt_ptr) 0}
+};
+
+/* This works around a problem in FreeBSD linker */
+#ifdef FREEBSD_WORKAROUND
+static const void *lt_preloaded_setup() {
+  return lt_preloaded_symbols;
+}
+#endif
+
+#ifdef __cplusplus
+}
+#endif\
+"
+	  fi
+
+	  pic_flag_for_symtable=
+	  case $host in
+	  # compiling the symbol table file with pic_flag works around
+	  # a FreeBSD bug that causes programs to crash when -lm is
+	  # linked before any other PIC object.  But we must not use
+	  # pic_flag when linking with -static.  The problem exists in
+	  # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
+	  *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
+	    case "$compile_command " in
+	    *" -static "*) ;;
+	    *) pic_flag_for_symtable=" $pic_flag -DPIC -DFREEBSD_WORKAROUND";;
+	    esac;;
+	  *-*-hpux*)
+	    case "$compile_command " in
+	    *" -static "*) ;;
+	    *) pic_flag_for_symtable=" $pic_flag -DPIC";;
+	    esac
+	  esac
+
+	  # Now compile the dynamic symbol file.
+	  $show "(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")"
+	  $run eval '(cd $output_objdir && $CC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $?
+
+	  # Clean up the generated files.
+	  $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T"
+	  $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T"
+
+	  # Transform the symbol file into the correct name.
+	  compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+	  finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"`
+	  ;;
+	*)
+	  $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2
+	  exit 1
+	  ;;
+	esac
+      else
+	# We keep going just in case the user didn't refer to
+	# lt_preloaded_symbols.  The linker will fail if global_symbol_pipe
+	# really was required.
+
+	# Nullify the symbol file.
+	compile_command=`$echo "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
+	finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
+      fi
+
+      if test $need_relink = no || test "$build_libtool_libs" != yes; then
+	# Replace the output file specification.
+	compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	link_command="$compile_command$compile_rpath"
+
+	# We have no uninstalled library dependencies, so finalize right now.
+	$show "$link_command"
+	$run eval "$link_command"
+	status=$?
+
+	# Delete the generated files.
+	if test -n "$dlsyms"; then
+	  $show "$rm $output_objdir/${outputname}S.${objext}"
+	  $run $rm "$output_objdir/${outputname}S.${objext}"
+	fi
+
+	exit $status
+      fi
+
+      if test -n "$shlibpath_var"; then
+	# We should set the shlibpath_var
+	rpath=
+	for dir in $temp_rpath; do
+	  case $dir in
+	  [\\/]* | [A-Za-z]:[\\/]*)
+	    # Absolute path.
+	    rpath="$rpath$dir:"
+	    ;;
+	  *)
+	    # Relative path: add a thisdir entry.
+	    rpath="$rpath\$thisdir/$dir:"
+	    ;;
+	  esac
+	done
+	temp_rpath="$rpath"
+      fi
+
+      if test -n "$compile_shlibpath$finalize_shlibpath"; then
+	compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
+      fi
+      if test -n "$finalize_shlibpath"; then
+	finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
+      fi
+
+      compile_var=
+      finalize_var=
+      if test -n "$runpath_var"; then
+	if test -n "$perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $perm_rpath; do
+	    rpath="$rpath$dir:"
+	  done
+	  compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+	if test -n "$finalize_perm_rpath"; then
+	  # We should set the runpath_var.
+	  rpath=
+	  for dir in $finalize_perm_rpath; do
+	    rpath="$rpath$dir:"
+	  done
+	  finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
+	fi
+      fi
+
+      if test "$no_install" = yes; then
+	# We don't need to create a wrapper script.
+	link_command="$compile_var$compile_command$compile_rpath"
+	# Replace the output file specification.
+	link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
+	# Delete the old output file.
+	$run $rm $output
+	# Link the executable and exit
+	$show "$link_command"
+	$run eval "$link_command" || exit $?
+	exit 0
+      fi
+
+      if test "$hardcode_action" = relink; then
+	# Fast installation is not supported
+	link_command="$compile_var$compile_command$compile_rpath"
+	relink_command="$finalize_var$finalize_command$finalize_rpath"
+
+	$echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2
+	$echo "$modename: \`$output' will be relinked during installation" 1>&2
+      else
+	if test "$fast_install" != no; then
+	  link_command="$finalize_var$compile_command$finalize_rpath"
+	  if test "$fast_install" = yes; then
+	    relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
+	  else
+	    # fast_install is set to needless
+	    relink_command=
+	  fi
+	else
+	  link_command="$compile_var$compile_command$compile_rpath"
+	  relink_command="$finalize_var$finalize_command$finalize_rpath"
+	fi
+      fi
+
+      # Replace the output file specification.
+      link_command=`$echo "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
+
+      # Delete the old output files.
+      $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname
+
+      $show "$link_command"
+      $run eval "$link_command" || exit $?
+
+      # Now create the wrapper script.
+      $show "creating $output"
+
+      # Quote the relink command for shipping.
+      if test -n "$relink_command"; then
+	# Preserve any variables that may affect compiler behavior
+	for var in $variables_saved_for_relink; do
+	  if eval test -z \"\${$var+set}\"; then
+	    relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+	  elif eval var_value=\$$var; test -z "$var_value"; then
+	    relink_command="$var=; export $var; $relink_command"
+	  else
+	    var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+	    relink_command="$var=\"$var_value\"; export $var; $relink_command"
+	  fi
+	done
+	relink_command="cd `pwd`; $relink_command"
+	relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Quote $echo for shipping.
+      if test "X$echo" = "X$SHELL $0 --fallback-echo"; then
+	case $0 in
+	[\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";;
+	*) qecho="$SHELL `pwd`/$0 --fallback-echo";;
+	esac
+	qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"`
+      else
+	qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"`
+      fi
+
+      # Only actually do things if our run command is non-null.
+      if test -z "$run"; then
+	# win32 will think the script is a binary if it has
+	# a .exe suffix, so we strip it off here.
+	case $output in
+	  *.exe) output=`echo $output|sed 's,.exe$,,'` ;;
+	esac
+	# test for cygwin because mv fails w/o .exe extensions
+	case $host in
+	  *cygwin*) exeext=.exe ;;
+	  *) exeext= ;;
+	esac
+	$rm $output
+	trap "$rm $output; exit 1" 1 2 15
+
+	$echo > $output "\
+#! $SHELL
+
+# $output - temporary wrapper script for $objdir/$outputname
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# The $output program cannot be directly executed until all the libtool
+# libraries that it depends on are installed.
+#
+# This wrapper script should never be moved out of the build directory.
+# If it is, it will not operate correctly.
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e 1s/^X//'
+sed_quote_subst='$sed_quote_subst'
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi
+
+relink_command=\"$relink_command\"
+
+# This environment variable determines our operation mode.
+if test \"\$libtool_install_magic\" = \"$magic\"; then
+  # install mode needs the following variable:
+  notinst_deplibs='$notinst_deplibs'
+else
+  # When we are sourced in execute mode, \$file and \$echo are already set.
+  if test \"\$libtool_execute_magic\" != \"$magic\"; then
+    echo=\"$qecho\"
+    file=\"\$0\"
+    # Make sure echo works.
+    if test \"X\$1\" = X--no-reexec; then
+      # Discard the --no-reexec flag, and continue.
+      shift
+    elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then
+      # Yippee, \$echo works!
+      :
+    else
+      # Restart under the correct shell, and then maybe \$echo will work.
+      exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
+    fi
+  fi\
+"
+	$echo >> $output "\
+
+  # Find the directory that this script lives in.
+  thisdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
+  test \"x\$thisdir\" = \"x\$file\" && thisdir=.
+
+  # Follow symbolic links until we get to the real thisdir.
+  file=\`ls -ld \"\$file\" | sed -n 's/.*-> //p'\`
+  while test -n \"\$file\"; do
+    destdir=\`\$echo \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
+
+    # If there was a directory component, then change thisdir.
+    if test \"x\$destdir\" != \"x\$file\"; then
+      case \"\$destdir\" in
+      [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
+      *) thisdir=\"\$thisdir/\$destdir\" ;;
+      esac
+    fi
+
+    file=\`\$echo \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
+    file=\`ls -ld \"\$thisdir/\$file\" | sed -n 's/.*-> //p'\`
+  done
+
+  # Try to get the absolute directory name.
+  absdir=\`cd \"\$thisdir\" && pwd\`
+  test -n \"\$absdir\" && thisdir=\"\$absdir\"
+"
+
+	if test "$fast_install" = yes; then
+	  echo >> $output "\
+  program=lt-'$outputname'$exeext
+  progdir=\"\$thisdir/$objdir\"
+
+  if test ! -f \"\$progdir/\$program\" || \\
+     { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | sed 1q\`; \\
+       test \"X\$file\" != \"X\$progdir/\$program\"; }; then
+
+    file=\"\$\$-\$program\"
+
+    if test ! -d \"\$progdir\"; then
+      $mkdir \"\$progdir\"
+    else
+      $rm \"\$progdir/\$file\"
+    fi"
+
+	  echo >> $output "\
+
+    # relink executable if necessary
+    if test -n \"\$relink_command\"; then
+      if relink_command_output=\`eval \$relink_command 2>&1\`; then :
+      else
+	$echo \"\$relink_command_output\" >&2
+	$rm \"\$progdir/\$file\"
+	exit 1
+      fi
+    fi
+
+    $mv \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
+    { $rm \"\$progdir/\$program\";
+      $mv \"\$progdir/\$file\" \"\$progdir/\$program\"; }
+    $rm \"\$progdir/\$file\"
+  fi"
+	else
+	  echo >> $output "\
+  program='$outputname'
+  progdir=\"\$thisdir/$objdir\"
+"
+	fi
+
+	echo >> $output "\
+
+  if test -f \"\$progdir/\$program\"; then"
+
+	# Export our shlibpath_var if we have one.
+	if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
+	  $echo >> $output "\
+    # Add our own library path to $shlibpath_var
+    ###################################################################
+    # HACK: This hack has been in HDF5's ltmain.sh file from since I
+    # started messing with the Makefile/configure system. I'm loathe to
+    # remove it because it seems to work for us.
+    #
+    ##$shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
+    $shlibpath_var=\"$finalize_shlibpath$temp_rpath\$$shlibpath_var\"
+    #
+    # End HACK
+    #
+    ###################################################################
+
+    # Some systems cannot cope with colon-terminated $shlibpath_var
+    # The second colon is a workaround for a bug in BeOS R4 sed
+    $shlibpath_var=\`\$echo \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
+
+    export $shlibpath_var
+"
+	fi
+
+	# fixup the dll searchpath if we need to.
+	if test -n "$dllsearchpath"; then
+	  $echo >> $output "\
+    # Add the dll search path components to the executable PATH
+    PATH=$dllsearchpath:\$PATH
+"
+	fi
+
+	$echo >> $output "\
+    if test \"\$libtool_execute_magic\" != \"$magic\"; then
+      # Run the actual program with our arguments.
+"
+	case $host in
+	# win32 systems need to use the prog path for dll
+	# lookup to work
+	*-*-cygwin* | *-*-pw32*)
+	  $echo >> $output "\
+      exec \$progdir/\$program \${1+\"\$@\"}
+"
+	  ;;
+
+	# Backslashes separate directories on plain windows
+	*-*-mingw | *-*-os2*)
+	  $echo >> $output "\
+      exec \$progdir\\\\\$program \${1+\"\$@\"}
+"
+	  ;;
+
+	*)
+	  $echo >> $output "\
+      # Export the path to the program.
+      PATH=\"\$progdir:\$PATH\"
+      export PATH
+
+      exec \$program \${1+\"\$@\"}
+"
+	  ;;
+	esac
+	$echo >> $output "\
+      \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\"
+      exit 1
+    fi
+  else
+    # The program doesn't exist.
+    \$echo \"\$0: error: \$progdir/\$program does not exist\" 1>&2
+    \$echo \"This script is just a wrapper for \$program.\" 1>&2
+    echo \"See the $PACKAGE documentation for more information.\" 1>&2
+    exit 1
+  fi
+fi\
+"
+	chmod +x $output
+      fi
+      exit 0
+      ;;
+    esac
+
+    # See if we need to build an old-fashioned archive.
+    for oldlib in $oldlibs; do
+
+      if test "$build_libtool_libs" = convenience; then
+	oldobjs="$libobjs_save"
+	addlibs="$convenience"
+	build_libtool_libs=no
+      else
+	if test "$build_libtool_libs" = module; then
+	  oldobjs="$libobjs_save"
+	  build_libtool_libs=no
+	else
+	  oldobjs="$objs$old_deplibs "`$echo "X$libobjs_save" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`
+	fi
+	addlibs="$old_convenience"
+      fi
+
+      if test -n "$addlibs"; then
+	gentop="$output_objdir/${outputname}x"
+	$show "${rm}r $gentop"
+	$run ${rm}r "$gentop"
+	$show "mkdir $gentop"
+	$run mkdir "$gentop"
+	status=$?
+	if test $status -ne 0 && test ! -d "$gentop"; then
+	  exit $status
+	fi
+	generated="$generated $gentop"
+
+	# Add in members from convenience archives.
+	for xlib in $addlibs; do
+	  # Extract the objects.
+	  case $xlib in
+	  [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;;
+	  *) xabs=`pwd`"/$xlib" ;;
+	  esac
+	  xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'`
+	  xdir="$gentop/$xlib"
+
+	  $show "${rm}r $xdir"
+	  $run ${rm}r "$xdir"
+	  $show "mkdir $xdir"
+	  $run mkdir "$xdir"
+	  status=$?
+	  if test $status -ne 0 && test ! -d "$xdir"; then
+	    exit $status
+	  fi
+	  $show "(cd $xdir && $AR x $xabs)"
+	  $run eval "(cd \$xdir && $AR x \$xabs)" || exit $?
+
+	  oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP`
+	done
+      fi
+
+      # Do each command in the archive commands.
+      if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
+	eval cmds=\"$old_archive_from_new_cmds\"
+      else
+	# Ensure that we have .o objects in place in case we decided
+	# not to build a shared library, and have fallen back to building
+	# static libs even though --disable-static was passed!
+	for oldobj in $oldobjs; do
+	  if test ! -f $oldobj; then
+	    xdir=`$echo "X$oldobj" | $Xsed -e 's%/[^/]*$%%'`
+	    if test "X$xdir" = "X$oldobj"; then
+	      xdir="."
+	    else
+	      xdir="$xdir"
+	    fi
+	    baseobj=`$echo "X$oldobj" | $Xsed -e 's%^.*/%%'`
+	    obj=`$echo "X$baseobj" | $Xsed -e "$o2lo"`
+	    $show "(cd $xdir && ${LN_S} $obj $baseobj)"
+	    $run eval '(cd $xdir && ${LN_S} $obj $baseobj)' || exit $?
+	  fi
+	done
+
+	eval cmds=\"$old_archive_cmds\"
+      fi
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+	IFS="$save_ifs"
+	$show "$cmd"
+	$run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+    done
+
+    if test -n "$generated"; then
+      $show "${rm}r$generated"
+      $run ${rm}r$generated
+    fi
+
+    # Now create the libtool archive.
+    case $output in
+    *.la)
+      old_library=
+      test "$build_old_libs" = yes && old_library="$libname.$libext"
+      $show "creating $output"
+
+      # Preserve any variables that may affect compiler behavior
+      for var in $variables_saved_for_relink; do
+	if eval test -z \"\${$var+set}\"; then
+	  relink_command="{ test -z \"\${$var+set}\" || unset $var || { $var=; export $var; }; }; $relink_command"
+	elif eval var_value=\$$var; test -z "$var_value"; then
+	  relink_command="$var=; export $var; $relink_command"
+	else
+	  var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"`
+	  relink_command="$var=\"$var_value\"; export $var; $relink_command"
+	fi
+      done
+      # Quote the link command for shipping.
+      relink_command="cd `pwd`; $SHELL $0 --mode=relink $libtool_args"
+      relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"`
+
+      # Only create the output if not a dry run.
+      if test -z "$run"; then
+	for installed in no yes; do
+	  if test "$installed" = yes; then
+	    if test -z "$install_libdir"; then
+	      break
+	    fi
+	    output="$output_objdir/$outputname"i
+	    # Replace all uninstalled libtool libraries with the installed ones
+	    newdependency_libs=
+	    for deplib in $dependency_libs; do
+	      case $deplib in
+	      *.la)
+		name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'`
+		eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
+		if test -z "$libdir"; then
+		  $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2
+		  exit 1
+		fi
+		newdependency_libs="$newdependency_libs $libdir/$name"
+		;;
+	      *) newdependency_libs="$newdependency_libs $deplib" ;;
+	      esac
+	    done
+	    dependency_libs="$newdependency_libs"
+	    newdlfiles=
+	    for lib in $dlfiles; do
+	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+	      if test -z "$libdir"; then
+		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+		exit 1
+	      fi
+	      newdlfiles="$newdlfiles $libdir/$name"
+	    done
+	    dlfiles="$newdlfiles"
+	    newdlprefiles=
+	    for lib in $dlprefiles; do
+	      name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'`
+	      eval libdir=`sed -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
+	      if test -z "$libdir"; then
+		$echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+		exit 1
+	      fi
+	      newdlprefiles="$newdlprefiles $libdir/$name"
+	    done
+	    dlprefiles="$newdlprefiles"
+	  fi
+	  $rm $output
+	  # place dlname in correct position for cygwin
+	  tdlname=$dlname
+	  case $host,$output,$installed,$module,$dlname in
+	    *cygwin*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
+	  esac
+	  $echo > $output "\
+# $outputname - a libtool library file
+# Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP
+#
+# Please DO NOT delete this file!
+# It is necessary for linking the library.
+
+# The name that we can dlopen(3).
+dlname='$tdlname'
+
+# Names of this library.
+library_names='$library_names'
+
+# The name of the static archive.
+old_library='$old_library'
+
+# Libraries that this one depends upon.
+dependency_libs='$dependency_libs'
+
+# Version information for $libname.
+current=$current
+age=$age
+revision=$revision
+
+# Is this an already installed library?
+installed=$installed
+
+# Files to dlopen/dlpreopen
+dlopen='$dlfiles'
+dlpreopen='$dlprefiles'
+
+# Directory that this library needs to be installed in:
+libdir='$install_libdir'"
+	  if test "$installed" = no && test $need_relink = yes; then
+	    $echo >> $output "\
+relink_command=\"$relink_command\""
+	  fi
+	done
+      fi
+
+      # Do a symbolic link so that the libtool archive can be found in
+      # LD_LIBRARY_PATH before the program is installed.
+      $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)"
+      $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $?
+      ;;
+    esac
+    exit 0
+    ;;
+
+  # libtool install mode
+  install)
+    modename="$modename: install"
+
+    # There may be an optional sh(1) argument at the beginning of
+    # install_prog (especially on Windows NT).
+    if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
+       # Allow the use of GNU shtool's install command.
+       $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then
+      # Aesthetically quote it.
+      arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"`
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
+	arg="\"$arg\""
+	;;
+      esac
+      install_prog="$arg "
+      arg="$1"
+      shift
+    else
+      install_prog=
+      arg="$nonopt"
+    fi
+
+    # The real first argument should be the name of the installation program.
+    # Aesthetically quote it.
+    arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+    case $arg in
+    *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
+      arg="\"$arg\""
+      ;;
+    esac
+    install_prog="$install_prog$arg"
+
+    # We need to accept at least all the BSD install flags.
+    dest=
+    files=
+    opts=
+    prev=
+    install_type=
+    isdir=no
+    stripme=
+    for arg
+    do
+      if test -n "$dest"; then
+	files="$files $dest"
+	dest="$arg"
+	continue
+      fi
+
+      case $arg in
+      -d) isdir=yes ;;
+      -f) prev="-f" ;;
+      -g) prev="-g" ;;
+      -m) prev="-m" ;;
+      -o) prev="-o" ;;
+      -s)
+	stripme=" -s"
+	continue
+	;;
+      -*) ;;
+
+      *)
+	# If the previous option needed an argument, then skip it.
+	if test -n "$prev"; then
+	  prev=
+	else
+	  dest="$arg"
+	  continue
+	fi
+	;;
+      esac
+
+      # Aesthetically quote the argument.
+      arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`
+      case $arg in
+      *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \	]*|*]*)
+	arg="\"$arg\""
+	;;
+      esac
+      install_prog="$install_prog $arg"
+    done
+
+    if test -z "$install_prog"; then
+      $echo "$modename: you must specify an install program" 1>&2
+      $echo "$help" 1>&2
+      exit 1
+    fi
+
+    if test -n "$prev"; then
+      $echo "$modename: the \`$prev' option requires an argument" 1>&2
+      $echo "$help" 1>&2
+      exit 1
+    fi
+
+    if test -z "$files"; then
+      if test -z "$dest"; then
+	$echo "$modename: no file or destination specified" 1>&2
+      else
+	$echo "$modename: you must specify a destination" 1>&2
+      fi
+      $echo "$help" 1>&2
+      exit 1
+    fi
+
+    # Strip any trailing slash from the destination.
+    dest=`$echo "X$dest" | $Xsed -e 's%/$%%'`
+
+    # Check to see that the destination is a directory.
+    test -d "$dest" && isdir=yes
+    if test "$isdir" = yes; then
+      destdir="$dest"
+      destname=
+    else
+      destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'`
+      test "X$destdir" = "X$dest" && destdir=.
+      destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'`
+
+      # Not a directory, so check to see that there is only one file specified.
+      set dummy $files
+      if test $# -gt 2; then
+	$echo "$modename: \`$dest' is not a directory" 1>&2
+	$echo "$help" 1>&2
+	exit 1
+      fi
+    fi
+    case $destdir in
+    [\\/]* | [A-Za-z]:[\\/]*) ;;
+    *)
+      for file in $files; do
+	case $file in
+	*.lo) ;;
+	*)
+	  $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2
+	  $echo "$help" 1>&2
+	  exit 1
+	  ;;
+	esac
+      done
+      ;;
+    esac
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    staticlibs=
+    future_libdirs=
+    current_libdirs=
+    for file in $files; do
+
+      # Do each installation.
+      case $file in
+      *.$libext)
+	# Do the static libraries later.
+	staticlibs="$staticlibs $file"
+	;;
+
+      *.la)
+	# Check to see that this really is a libtool archive.
+	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	else
+	  $echo "$modename: \`$file' is not a valid libtool archive" 1>&2
+	  $echo "$help" 1>&2
+	  exit 1
+	fi
+
+	library_names=
+	old_library=
+	relink_command=
+	# If there is no directory component, then add one.
+	case $file in
+	*/* | *\\*) . $file ;;
+	*) . ./$file ;;
+	esac
+
+	# Add the libdir to current_libdirs if it is the destination.
+	if test "X$destdir" = "X$libdir"; then
+	  case "$current_libdirs " in
+	  *" $libdir "*) ;;
+	  *) current_libdirs="$current_libdirs $libdir" ;;
+	  esac
+	else
+	  # Note the libdir as a future libdir.
+	  case "$future_libdirs " in
+	  *" $libdir "*) ;;
+	  *) future_libdirs="$future_libdirs $libdir" ;;
+	  esac
+	fi
+
+	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/
+	test "X$dir" = "X$file/" && dir=
+	dir="$dir$objdir"
+
+	if test -n "$relink_command"; then
+	  $echo "$modename: warning: relinking \`$file'" 1>&2
+	  $show "$relink_command"
+	  if $run eval "$relink_command"; then :
+	  else
+	    $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+	    continue
+	  fi
+	fi
+
+	# See the names of the shared library.
+	set dummy $library_names
+	if test -n "$2"; then
+	  realname="$2"
+	  shift
+	  shift
+
+	  srcname="$realname"
+	  test -n "$relink_command" && srcname="$realname"T
+
+	  # Install the shared library and build the symlinks.
+	  $show "$install_prog $dir/$srcname $destdir/$realname"
+	  $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $?
+	  if test -n "$stripme" && test -n "$striplib"; then
+	    $show "$striplib $destdir/$realname"
+	    $run eval "$striplib $destdir/$realname" || exit $?
+	  fi
+
+	  if test $# -gt 0; then
+	    # Delete the old symlinks, and create new ones.
+	    for linkname
+	    do
+	      if test "$linkname" != "$realname"; then
+		$show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+		$run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)"
+	      fi
+	    done
+	  fi
+
+	  # Do each command in the postinstall commands.
+	  lib="$destdir/$realname"
+	  eval cmds=\"$postinstall_cmds\"
+	  save_ifs="$IFS"; IFS='~'
+	  for cmd in $cmds; do
+	    IFS="$save_ifs"
+	    $show "$cmd"
+	    $run eval "$cmd" || exit $?
+	  done
+	  IFS="$save_ifs"
+	fi
+
+	# Install the pseudo-library for information purposes.
+	name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+	instname="$dir/$name"i
+	$show "$install_prog $instname $destdir/$name"
+	$run eval "$install_prog $instname $destdir/$name" || exit $?
+
+	# Maybe install the static library, too.
+	test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
+	;;
+
+      *.lo)
+	# Install (i.e. copy) a libtool object.
+
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+	  destfile="$destdir/$destfile"
+	fi
+
+	# Deduce the name of the destination old-style object file.
+	case $destfile in
+	*.lo)
+	  staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"`
+	  ;;
+	*.$objext)
+	  staticdest="$destfile"
+	  destfile=
+	  ;;
+	*)
+	  $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2
+	  $echo "$help" 1>&2
+	  exit 1
+	  ;;
+	esac
+
+	# Install the libtool object if requested.
+	if test -n "$destfile"; then
+	  $show "$install_prog $file $destfile"
+	  $run eval "$install_prog $file $destfile" || exit $?
+	fi
+
+	# Install the old object if enabled.
+	if test "$build_old_libs" = yes; then
+	  # Deduce the name of the old-style object file.
+	  staticobj=`$echo "X$file" | $Xsed -e "$lo2o"`
+
+	  $show "$install_prog $staticobj $staticdest"
+	  $run eval "$install_prog \$staticobj \$staticdest" || exit $?
+	fi
+	exit 0
+	;;
+
+      *)
+	# Figure out destination file name, if it wasn't already specified.
+	if test -n "$destname"; then
+	  destfile="$destdir/$destname"
+	else
+	  destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+	  destfile="$destdir/$destfile"
+	fi
+
+	# Do a test to see if this is really a libtool program.
+	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	  notinst_deplibs=
+	  relink_command=
+
+	  # If there is no directory component, then add one.
+	  case $file in
+	  */* | *\\*) . $file ;;
+	  *) . ./$file ;;
+	  esac
+
+	  # Check the variables that should have been set.
+	  if test -z "$notinst_deplibs"; then
+	    $echo "$modename: invalid libtool wrapper script \`$file'" 1>&2
+	    exit 1
+	  fi
+
+	  finalize=yes
+	  for lib in $notinst_deplibs; do
+	    # Check to see that each library is installed.
+	    libdir=
+	    if test -f "$lib"; then
+	      # If there is no directory component, then add one.
+	      case $lib in
+	      */* | *\\*) . $lib ;;
+	      *) . ./$lib ;;
+	      esac
+	    fi
+	    libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
+	    if test -n "$libdir" && test ! -f "$libfile"; then
+	      $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2
+	      finalize=no
+	    fi
+	  done
+
+	  relink_command=
+	  # If there is no directory component, then add one.
+	  case $file in
+	  */* | *\\*) . $file ;;
+	  *) . ./$file ;;
+	  esac
+
+	  outputname=
+	  if test "$fast_install" = no && test -n "$relink_command"; then
+	    if test "$finalize" = yes && test -z "$run"; then
+	      tmpdir="/tmp"
+	      test -n "$TMPDIR" && tmpdir="$TMPDIR"
+	      tmpdir="$tmpdir/libtool-$$"
+	      if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then :
+	      else
+		$echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2
+		continue
+	      fi
+	      file=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+	      outputname="$tmpdir/$file"
+	      # Replace the output file specification.
+	      relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
+
+	      $show "$relink_command"
+	      if $run eval "$relink_command"; then :
+	      else
+		$echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2
+		${rm}r "$tmpdir"
+		continue
+	      fi
+	      file="$outputname"
+	    else
+	      $echo "$modename: warning: cannot relink \`$file'" 1>&2
+	    fi
+	  else
+	    # Install the binary that we compiled earlier.
+	    file=`$echo "X$file" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
+	  fi
+	fi
+
+	# remove .exe since cygwin /usr/bin/install will append another
+	# one anyways
+	case $install_prog,$host in
+	/usr/bin/install*,*cygwin*)
+	  case $file:$destfile in
+	  *.exe:*.exe)
+	    # this is ok
+	    ;;
+	  *.exe:*)
+	    destfile=$destfile.exe
+	    ;;
+	  *:*.exe)
+	    destfile=`echo $destfile | sed -e 's,.exe$,,'`
+	    ;;
+	  esac
+	  ;;
+	esac
+	$show "$install_prog$stripme $file $destfile"
+	$run eval "$install_prog\$stripme \$file \$destfile" || exit $?
+	test -n "$outputname" && ${rm}r "$tmpdir"
+	;;
+      esac
+    done
+
+    for file in $staticlibs; do
+      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+
+      # Set up the ranlib parameters.
+      oldlib="$destdir/$name"
+
+      $show "$install_prog $file $oldlib"
+      $run eval "$install_prog \$file \$oldlib" || exit $?
+
+      if test -n "$stripme" && test -n "$striplib"; then
+	$show "$old_striplib $oldlib"
+	$run eval "$old_striplib $oldlib" || exit $?
+      fi
+
+      # Do each command in the postinstall commands.
+      eval cmds=\"$old_postinstall_cmds\"
+      save_ifs="$IFS"; IFS='~'
+      for cmd in $cmds; do
+	IFS="$save_ifs"
+	$show "$cmd"
+	$run eval "$cmd" || exit $?
+      done
+      IFS="$save_ifs"
+    done
+
+    if test -n "$future_libdirs"; then
+      $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2
+    fi
+
+    if test -n "$current_libdirs"; then
+      # Maybe just do a dry run.
+      test -n "$run" && current_libdirs=" -n$current_libdirs"
+      exec_cmd='$SHELL $0 --finish$current_libdirs'
+    else
+      exit 0
+    fi
+    ;;
+
+  # libtool finish mode
+  finish)
+    modename="$modename: finish"
+    libdirs="$nonopt"
+    admincmds=
+
+    if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
+      for dir
+      do
+	libdirs="$libdirs $dir"
+      done
+
+      for libdir in $libdirs; do
+	if test -n "$finish_cmds"; then
+	  # Do each command in the finish commands.
+	  eval cmds=\"$finish_cmds\"
+	  save_ifs="$IFS"; IFS='~'
+	  for cmd in $cmds; do
+	    IFS="$save_ifs"
+	    $show "$cmd"
+	    $run eval "$cmd" || admincmds="$admincmds
+       $cmd"
+	  done
+	  IFS="$save_ifs"
+	fi
+	if test -n "$finish_eval"; then
+	  # Do the single finish_eval.
+	  eval cmds=\"$finish_eval\"
+	  $run eval "$cmds" || admincmds="$admincmds
+       $cmds"
+	fi
+      done
+    fi
+
+    # Exit here if they wanted silent mode.
+    test "$show" = ":" && exit 0
+
+    echo "----------------------------------------------------------------------"
+    echo "Libraries have been installed in:"
+    for libdir in $libdirs; do
+      echo "   $libdir"
+    done
+    echo
+    echo "If you ever happen to want to link against installed libraries"
+    echo "in a given directory, LIBDIR, you must either use libtool, and"
+    echo "specify the full pathname of the library, or use the \`-LLIBDIR'"
+    echo "flag during linking and do at least one of the following:"
+    if test -n "$shlibpath_var"; then
+      echo "   - add LIBDIR to the \`$shlibpath_var' environment variable"
+      echo "     during execution"
+    fi
+    if test -n "$runpath_var"; then
+      echo "   - add LIBDIR to the \`$runpath_var' environment variable"
+      echo "     during linking"
+    fi
+    if test -n "$hardcode_libdir_flag_spec"; then
+      libdir=LIBDIR
+      eval flag=\"$hardcode_libdir_flag_spec\"
+
+      echo "   - use the \`$flag' linker flag"
+    fi
+    if test -n "$admincmds"; then
+      echo "   - have your system administrator run these commands:$admincmds"
+    fi
+    if test -f /etc/ld.so.conf; then
+      echo "   - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
+    fi
+    echo
+    echo "See any operating system documentation about shared libraries for"
+    echo "more information, such as the ld(1) and ld.so(8) manual pages."
+    echo "----------------------------------------------------------------------"
+    exit 0
+    ;;
+
+  # libtool execute mode
+  execute)
+    modename="$modename: execute"
+
+    # The first argument is the command name.
+    cmd="$nonopt"
+    if test -z "$cmd"; then
+      $echo "$modename: you must specify a COMMAND" 1>&2
+      $echo "$help"
+      exit 1
+    fi
+
+    # Handle -dlopen flags immediately.
+    for file in $execute_dlfiles; do
+      if test ! -f "$file"; then
+	$echo "$modename: \`$file' is not a file" 1>&2
+	$echo "$help" 1>&2
+	exit 1
+      fi
+
+      dir=
+      case $file in
+      *.la)
+	# Check to see that this really is a libtool archive.
+	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then :
+	else
+	  $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2
+	  $echo "$help" 1>&2
+	  exit 1
+	fi
+
+	# Read the libtool library.
+	dlname=
+	library_names=
+
+	# If there is no directory component, then add one.
+	case $file in
+	*/* | *\\*) . $file ;;
+	*) . ./$file ;;
+	esac
+
+	# Skip this library if it cannot be dlopened.
+	if test -z "$dlname"; then
+	  # Warn if it was a shared library.
+	  test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'"
+	  continue
+	fi
+
+	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+	test "X$dir" = "X$file" && dir=.
+
+	if test -f "$dir/$objdir/$dlname"; then
+	  dir="$dir/$objdir"
+	else
+	  $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2
+	  exit 1
+	fi
+	;;
+
+      *.lo)
+	# Just add the directory containing the .lo file.
+	dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+	test "X$dir" = "X$file" && dir=.
+	;;
+
+      *)
+	$echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2
+	continue
+	;;
+      esac
+
+      # Get the absolute pathname.
+      absdir=`cd "$dir" && pwd`
+      test -n "$absdir" && dir="$absdir"
+
+      # Now add the directory to shlibpath_var.
+      if eval "test -z \"\$$shlibpath_var\""; then
+	eval "$shlibpath_var=\"\$dir\""
+      else
+	eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
+      fi
+    done
+
+    # This variable tells wrapper scripts just to set shlibpath_var
+    # rather than running their programs.
+    libtool_execute_magic="$magic"
+
+    # Check if any of the arguments is a wrapper script.
+    args=
+    for file
+    do
+      case $file in
+      -*) ;;
+      *)
+	# Do a test to see if this is really a libtool program.
+	if (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	  # If there is no directory component, then add one.
+	  case $file in
+	  */* | *\\*) . $file ;;
+	  *) . ./$file ;;
+	  esac
+
+	  # Transform arg to wrapped name.
+	  file="$progdir/$program"
+	fi
+	;;
+      esac
+      # Quote arguments (to preserve shell metacharacters).
+      file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"`
+      args="$args \"$file\""
+    done
+
+    if test -z "$run"; then
+      if test -n "$shlibpath_var"; then
+	# Export the shlibpath_var.
+	eval "export $shlibpath_var"
+      fi
+
+      # Restore saved enviroment variables
+      if test "${save_LC_ALL+set}" = set; then
+	LC_ALL="$save_LC_ALL"; export LC_ALL
+      fi
+      if test "${save_LANG+set}" = set; then
+	LANG="$save_LANG"; export LANG
+      fi
+
+      # Now prepare to actually exec the command.
+      exec_cmd='"$cmd"$args'
+    else
+      # Display what would be done.
+      if test -n "$shlibpath_var"; then
+	eval "\$echo \"\$shlibpath_var=\$$shlibpath_var\""
+	$echo "export $shlibpath_var"
+      fi
+      $echo "$cmd$args"
+      exit 0
+    fi
+    ;;
+
+  # libtool clean and uninstall mode
+  clean | uninstall)
+    modename="$modename: $mode"
+    rm="$nonopt"
+    files=
+    rmforce=
+    exit_status=0
+
+    # This variable tells wrapper scripts just to set variables rather
+    # than running their programs.
+    libtool_install_magic="$magic"
+
+    for arg
+    do
+      case $arg in
+      -f) rm="$rm $arg"; rmforce=yes ;;
+      -*) rm="$rm $arg" ;;
+      *) files="$files $arg" ;;
+      esac
+    done
+
+    if test -z "$rm"; then
+      $echo "$modename: you must specify an RM program" 1>&2
+      $echo "$help" 1>&2
+      exit 1
+    fi
+
+    rmdirs=
+
+    for file in $files; do
+      dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`
+      if test "X$dir" = "X$file"; then
+	dir=.
+	objdir="$objdir"
+      else
+	objdir="$dir/$objdir"
+      fi
+      name=`$echo "X$file" | $Xsed -e 's%^.*/%%'`
+      test $mode = uninstall && objdir="$dir"
+
+      # Remember objdir for removal later, being careful to avoid duplicates
+      if test $mode = clean; then
+	case " $rmdirs " in
+	  *" $objdir "*) ;;
+	  *) rmdirs="$rmdirs $objdir" ;;
+	esac
+      fi
+
+      # Don't error if the file doesn't exist and rm -f was used.
+      if (test -L "$file") >/dev/null 2>&1 \
+	|| (test -h "$file") >/dev/null 2>&1 \
+	|| test -f "$file"; then
+	:
+      elif test -d "$file"; then
+	exit_status=1
+	continue
+      elif test "$rmforce" = yes; then
+	continue
+      fi
+
+      rmfiles="$file"
+
+      case $name in
+      *.la)
+	# Possibly a libtool archive, so verify it.
+	if (sed -e '2q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	  . $dir/$name
+
+	  # Delete the libtool libraries and symlinks.
+	  for n in $library_names; do
+	    rmfiles="$rmfiles $objdir/$n"
+	  done
+	  test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
+	  test $mode = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
+
+	  if test $mode = uninstall; then
+	    if test -n "$library_names"; then
+	      # Do each command in the postuninstall commands.
+	      eval cmds=\"$postuninstall_cmds\"
+	      save_ifs="$IFS"; IFS='~'
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		$show "$cmd"
+		$run eval "$cmd"
+		if test $? != 0 && test "$rmforce" != yes; then
+		  exit_status=1
+		fi
+	      done
+	      IFS="$save_ifs"
+	    fi
+
+	    if test -n "$old_library"; then
+	      # Do each command in the old_postuninstall commands.
+	      eval cmds=\"$old_postuninstall_cmds\"
+	      save_ifs="$IFS"; IFS='~'
+	      for cmd in $cmds; do
+		IFS="$save_ifs"
+		$show "$cmd"
+		$run eval "$cmd"
+		if test $? != 0 && test "$rmforce" != yes; then
+		  exit_status=1
+		fi
+	      done
+	      IFS="$save_ifs"
+	    fi
+	    # FIXME: should reinstall the best remaining shared library.
+	  fi
+	fi
+	;;
+
+      *.lo)
+	if test "$build_old_libs" = yes; then
+	  oldobj=`$echo "X$name" | $Xsed -e "$lo2o"`
+	  rmfiles="$rmfiles $dir/$oldobj"
+	fi
+	;;
+
+      *)
+	# Do a test to see if this is a libtool program.
+	if test $mode = clean &&
+	   (sed -e '4q' $file | egrep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then
+	  relink_command=
+	  . $dir/$file
+
+	  rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
+	  if test "$fast_install" = yes && test -n "$relink_command"; then
+	    rmfiles="$rmfiles $objdir/lt-$name"
+	  fi
+	fi
+	;;
+      esac
+      $show "$rm $rmfiles"
+      $run $rm $rmfiles || exit_status=1
+    done
+
+    # Try to remove the ${objdir}s in the directories where we deleted files
+    for dir in $rmdirs; do
+      if test -d "$dir"; then
+	$show "rmdir $dir"
+	$run rmdir $dir >/dev/null 2>&1
+      fi
+    done
+
+    exit $exit_status
+    ;;
+
+  "")
+    $echo "$modename: you must specify a MODE" 1>&2
+    $echo "$generic_help" 1>&2
+    exit 1
+    ;;
+  esac
+
+  if test -z "$exec_cmd"; then
+    $echo "$modename: invalid operation mode \`$mode'" 1>&2
+    $echo "$generic_help" 1>&2
+    exit 1
+  fi
+fi # test -z "$show_help"
+
+if test -n "$exec_cmd"; then
+  eval exec $exec_cmd
+  exit 1
+fi
+
+# We need to display help for each of the modes.
+case $mode in
+"") $echo \
+"Usage: $modename [OPTION]... [MODE-ARG]...
+
+Provide generalized library-building support services.
+
+    --config          show all configuration variables
+    --debug           enable verbose shell tracing
+-n, --dry-run         display commands without modifying any files
+    --features        display basic configuration information and exit
+    --finish          same as \`--mode=finish'
+    --help            display this help message and exit
+    --mode=MODE       use operation mode MODE [default=inferred from MODE-ARGS]
+    --quiet           same as \`--silent'
+    --silent          don't print informational messages
+    --version         print version information
+
+MODE must be one of the following:
+
+      clean           remove files from the build directory
+      compile         compile a source file into a libtool object
+      execute         automatically set library path, then run a program
+      finish          complete the installation of libtool libraries
+      install         install libraries or executables
+      link            create a library or an executable
+      uninstall       remove libraries from an installed directory
+
+MODE-ARGS vary depending on the MODE.  Try \`$modename --help --mode=MODE' for
+a more detailed description of MODE."
+  exit 0
+  ;;
+
+clean)
+  $echo \
+"Usage: $modename [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
+
+Remove files from the build directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, object or program, all the files associated
+with it are deleted. Otherwise, only FILE itself is deleted using RM."
+  ;;
+
+compile)
+  $echo \
+"Usage: $modename [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
+
+Compile a source file into a libtool library object.
+
+This mode accepts the following additional options:
+
+  -o OUTPUT-FILE    set the output file name to OUTPUT-FILE
+  -prefer-pic       try to building PIC objects only
+  -prefer-non-pic   try to building non-PIC objects only
+  -static           always build a \`.o' file suitable for static linking
+
+COMPILE-COMMAND is a command to be used in creating a \`standard' object file
+from the given SOURCEFILE.
+
+The output file name is determined by removing the directory component from
+SOURCEFILE, then substituting the C source code suffix \`.c' with the
+library object suffix, \`.lo'."
+  ;;
+
+execute)
+  $echo \
+"Usage: $modename [OPTION]... --mode=execute COMMAND [ARGS]...
+
+Automatically set library path, then run a program.
+
+This mode accepts the following additional options:
+
+  -dlopen FILE      add the directory containing FILE to the library path
+
+This mode sets the library path environment variable according to \`-dlopen'
+flags.
+
+If any of the ARGS are libtool executable wrappers, then they are translated
+into their corresponding uninstalled binary, and any of their required library
+directories are added to the library path.
+
+Then, COMMAND is executed, with ARGS as arguments."
+  ;;
+
+finish)
+  $echo \
+"Usage: $modename [OPTION]... --mode=finish [LIBDIR]...
+
+Complete the installation of libtool libraries.
+
+Each LIBDIR is a directory that contains libtool libraries.
+
+The commands that this mode executes may require superuser privileges.  Use
+the \`--dry-run' option if you just want to see what would be executed."
+  ;;
+
+install)
+  $echo \
+"Usage: $modename [OPTION]... --mode=install INSTALL-COMMAND...
+
+Install executables or libraries.
+
+INSTALL-COMMAND is the installation command.  The first component should be
+either the \`install' or \`cp' program.
+
+The rest of the components are interpreted as arguments to that command (only
+BSD-compatible install options are recognized)."
+  ;;
+
+link)
+  $echo \
+"Usage: $modename [OPTION]... --mode=link LINK-COMMAND...
+
+Link object files or libraries together to form another library, or to
+create an executable program.
+
+LINK-COMMAND is a command using the C compiler that you would use to create
+a program from several object files.
+
+The following components of LINK-COMMAND are treated specially:
+
+  -all-static       do not do any dynamic linking at all
+  -avoid-version    do not add a version suffix if possible
+  -dlopen FILE      \`-dlpreopen' FILE if it cannot be dlopened at runtime
+  -dlpreopen FILE   link in FILE and add its symbols to lt_preloaded_symbols
+  -export-dynamic   allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
+  -export-symbols SYMFILE
+		    try to export only the symbols listed in SYMFILE
+  -export-symbols-regex REGEX
+		    try to export only the symbols matching REGEX
+  -LLIBDIR          search LIBDIR for required installed libraries
+  -lNAME            OUTPUT-FILE requires the installed library libNAME
+  -module           build a library that can dlopened
+  -no-fast-install  disable the fast-install mode
+  -no-install       link a not-installable executable
+  -no-undefined     declare that a library does not refer to external symbols
+  -o OUTPUT-FILE    create OUTPUT-FILE from the specified objects
+  -release RELEASE  specify package release information
+  -rpath LIBDIR     the created library will eventually be installed in LIBDIR
+  -R[ ]LIBDIR       add LIBDIR to the runtime path of programs and libraries
+  -static           do not do any dynamic linking of libtool libraries
+  -version-info CURRENT[:REVISION[:AGE]]
+		    specify library version info [each variable defaults to 0]
+
+All other options (arguments beginning with \`-') are ignored.
+
+Every other argument is treated as a filename.  Files ending in \`.la' are
+treated as uninstalled libtool libraries, other files are standard or library
+object files.
+
+If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
+only library objects (\`.lo' files) may be specified, and \`-rpath' is
+required, except when creating a convenience library.
+
+If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
+using \`ar' and \`ranlib', or on Windows using \`lib'.
+
+If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
+is created, otherwise an executable program is created."
+  ;;
+
+uninstall)
+  $echo \
+"Usage: $modename [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
+
+Remove libraries from an installation directory.
+
+RM is the name of the program to use to delete files associated with each FILE
+(typically \`/bin/rm').  RM-OPTIONS are options (such as \`-f') to be passed
+to RM.
+
+If FILE is a libtool library, all the files associated with it are deleted.
+Otherwise, only FILE itself is deleted using RM."
+  ;;
+
+*)
+  $echo "$modename: invalid operation mode \`$mode'" 1>&2
+  $echo "$help" 1>&2
+  exit 1
+  ;;
+esac
+
+echo
+$echo "Try \`$modename --help' for more information about other modes."
+
+exit 0
+
+# Local Variables:
+# mode:shell-script
+# sh-indentation:2
+# End:

Added: packages/hdf5/branches/upstream/current/bin/mkdirs
===================================================================
--- packages/hdf5/branches/upstream/current/bin/mkdirs	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/mkdirs	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,34 @@
+#! /bin/sh
+#
+# 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 is a small program which will create directories n-levels deep.
+# You just call it with something like:
+#
+#       mkdirs /tmp/foo/bar/baz
+#
+# and it will create all the directories from /tmp down to baz which
+# don't exist.
+#
+chmodprog="${CHMODPROG-chmod}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+make_dir () {
+  if test ! -d $1; then
+    make_dir `echo $1 | sed -e 's#/[^/]*$##'`
+    $mkdirprog $1
+    $chmodprog 755 $1
+  fi
+}
+
+make_dir `echo $1 | sed -e 's#/$##'`


Property changes on: packages/hdf5/branches/upstream/current/bin/mkdirs
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/bin/release
===================================================================
--- packages/hdf5/branches/upstream/current/bin/release	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/release	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,257 @@
+#!/bin/sh
+#
+# 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.
+#
+
+# Make a release of hdf5.  The command-line switches are:
+#
+#  -d DIR	The name of the directory where the releas(es) should be
+#               placed.  By default, the directory is ./releases
+#
+#  --nocheck	Ignore errors in MANIFEST file.
+#          
+# The other command-line options are the names of the programs to use
+# for compressing the resulting tar archive (if none are given then
+# `tar md5' is assumed):
+#
+#   tar		-- use tar and don't do any compressing.
+#   compress	-- use compress and append `.Z' to the output name.
+#   gzip	-- use gzip with `-9' and append `.gz' to the output name.
+#   bzip2       -- use bzip2 with `-9' and append `.bz2' to the output name.
+#   md5         -- produce a md5 checksum in addition to the archive.
+#
+# Examples:
+#
+#   $ release
+#   releases/hdf5-1.0.38.tar
+#   releases/hdf5-1.0.38.tar.md5
+#
+#   $ release gzip
+#   releases/hdf5-1.0.38.tar.gz
+#
+#   $ release -d /tmp tar compress gzip bzip2 md5
+#   /tmp/hdf5-1.0.38.tar
+#   /tmp/hdf5-1.0.38.tar.Z
+#   /tmp/hdf5-1.0.38.tar.gz
+#   /tmp/hdf5-1.0.38.tar.bz2
+#   /tmp/hdf5-1.0.38.tar.md5
+#
+# Modifications
+#   Robb Matzke, 1999-07-16
+#   The SunOS 5.6 sed *must* have slashes as delimiters. I changed things like
+#   `sed s+/CVS++' to `sed 's/\/CVS//'
+#
+#   Albert Cheng, 1999-10-26
+#   Moved the MANIFEST checking to a separate command file so that
+#   it can be invoked individually.
+
+# Function definitions
+#
+# Print Usage page
+USAGE()
+{
+cat << EOF
+Usage: $0 [--nocheck] [-d <dir>] [-h] <methods> ...
+   -d DIR	The name of the directory where the releas(es) should be
+                placed.  By default, the directory is ./releases
+
+   --nocheck	Ignore errors in MANIFEST file.
+         
+   --private	Make a private release with today's date in version information.
+         
+The other command-line options are the names of the programs to use
+for compressing the resulting tar archive (if none are given then
+"tar md5" is assumed):
+
+    tar		-- use tar and don't do any compressing.
+    compress	-- use compress and append ".Z" to the output name.
+    gzip	-- use gzip with "-9" and append ".gz" to the output name.
+    bzip2       -- use bzip2 with "-9" and append ".bz2" to the output name.
+    md5         -- produce a md5 checksum in addition to the archive.
+
+Examples:
+
+    $ release
+    releases/hdf5-1.0.38.tar
+    releases/hdf5-1.0.38.tar.md5
+
+    $ release gzip
+    releases/hdf5-1.0.38.tar.gz
+
+    $ release -d /tmp tar compress gzip bzip2 md5
+    /tmp/hdf5-1.0.38.tar
+    /tmp/hdf5-1.0.38.tar.Z
+    /tmp/hdf5-1.0.38.tar.gz
+    /tmp/hdf5-1.0.38.tar.bz2
+    /tmp/hdf5-1.0.38.tar.md5
+
+EOF
+
+}
+
+# Defaults
+DEST=releases
+VERS=`perl bin/h5vers`
+VERS_OLD=
+test "$VERS" || exit 1
+verbose=yes
+check=yes
+today=`date +%Y%m%d`
+pmode='no'
+
+# Restore previous Version information
+RESTORE_VERSION()
+{
+    if [ X-${VERS_OLD} != X- ]; then
+	echo restoring version information back to $VERS_OLD
+	bin/h5vers -s $VERS_OLD
+	VERS_OLD=
+    fi
+}
+
+
+# Command-line arguments
+while [ -n "$1" ]; do
+    arg=$1
+    shift
+    case "$arg" in
+	-d)
+	    DEST=$1
+	    shift
+	    ;;
+	--nocheck)
+	    check=no
+	    ;;
+	-h)
+	    USAGE
+	    exit 0
+	    ;;
+	--private)
+	    pmode=yes
+	    ;;
+	-*)
+	    echo "Unknown switch: $arg" 1>&2
+	    USAGE
+	    exit 1
+	    ;;
+	*)
+	    methods="$methods $arg"
+	    ;;
+    esac
+done
+
+# Default methods are tar and md5
+if [ "X$methods" = "X" ]; then
+    methods="tar md5"
+fi
+
+# setup restoration in case of abort.
+trap RESTORE_VERSION 0
+
+if [ X$pmode = Xyes ]; then
+    VERS_OLD=$VERS
+    # Set version information to m.n.r-of$today.
+    # (h5vers does not correctly handle just m.n.r-$today.)
+    VERS=`echo $VERS | sed -e s/-.*//`-of$today
+    echo Private release of $VERS
+    bin/h5vers -s $VERS
+fi
+
+# Store hdf5-$VERS ("hdf5-1.7.51", e.g.) to a variable to avoid typos
+HDF5_VERS=hdf5-$VERS
+
+test "$verbose" && echo "Releasing $HDF5_VERS to $DEST" 1>&2
+if [ ! -d $DEST ]; then
+    echo "   Destination directory $DEST does not exist" 1>&2
+    exit 1
+fi
+
+
+# Check the validity of the MANIFEST file.
+bin/chkmanifest || fail=yes
+if [ "X$fail" = "Xyes" ]; then
+    if [ $check = yes ]; then
+        exit 1
+    else
+	echo "Continuing anyway..."
+    fi
+fi
+
+# Create a manifest that contains only files for distribution.
+MANIFEST=/tmp/H5_MANIFEST.$$
+grep '^\.' MANIFEST | grep -v _DO_NOT_DISTRIBUTE_ >$MANIFEST
+
+# Prepare the source tree for a release.
+test -h ../$HDF5_VERS && rm ../$HDF5_VERS
+ln -s `pwd` ../$HDF5_VERS || exit 1
+mv Makefile ../Makefile.x 2>/dev/null #might fail
+cp -p Makefile.dist Makefile
+
+# Update README.txt and release_docs/RELEASE.txt with release information.
+for f in README.txt release_docs/RELEASE.txt; do
+    echo "HDF5 version $VERS released on `date`" >$f.x
+    tail +2l $f >>$f.x
+    mv $f.x $f
+    # Make sure new files are of the right access mode
+    chmod 644 $f
+done
+
+# synchronize the HISTORY.tx and RELEASE.tx files in the doc area
+cp release_docs/HISTORY.txt release_docs/RELEASE.txt doc/html/ADGuide/.
+
+# Create the tar file
+test "$verbose" && echo "   Running tar..." 1>&2
+( \
+    cd ..; \
+    tar cf $HDF5_VERS.tar $HDF5_VERS/Makefile \
+	`sed 's/^\.\//hdf5-'$VERS'\//' $MANIFEST` || exit 1 \
+)
+
+# Compress
+for comp in $methods; do
+    case $comp in
+	tar)
+	    cp -p ../$HDF5_VERS.tar $DEST/$HDF5_VERS.tar;;
+	compress)
+	    test "$verbose" && echo "   Running compress..." 1>&2
+	    compress -c <../$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.Z;;
+	gzip)
+	    test "$verbose" && echo "   Running gzip..." 1>&2
+	    gzip -9 <../$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.gz;;
+	bzip2)
+	    test "$verbose" && echo "   Running bzip2..." 1>&2
+	    bzip2 -9 <../$HDF5_VERS.tar >$DEST/$HDF5_VERS.tar.bz2;;
+	md5)
+	    test "$verbose" && echo "   Creating checksum..." 1>&2
+	    (  cd .. && md5sum $HDF5_VERS.tar >$HDF5_VERS.tar.md5 )
+	    cp -p ../$HDF5_VERS.tar.md5 $DEST/$HDF5_VERS.tar.md5;;
+    esac
+done
+
+# Copy the RELEASE.txt to the release area.
+cp release_docs/RELEASE.txt $DEST/$HDF5_VERS-RELEASE.txt
+
+# Remove temporary things
+test -f ../Makefile.x && mv ../Makefile.x Makefile
+rm -f $MANIFEST
+rm -f ../$HDF5_VERS
+rm -f ../$HDF5_VERS.tar
+rm -f ../$HDF5_VERS.tar.md5
+
+# Restore OLD version information, then no need for trap.
+if [ X$pmode = Xyes ]; then
+    RESTORE_VERSION
+    trap 0
+fi
+
+exit 0


Property changes on: packages/hdf5/branches/upstream/current/bin/release
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/bin/snapshot
===================================================================
--- packages/hdf5/branches/upstream/current/bin/snapshot	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/snapshot	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,482 @@
+#!/bin/sh
+#
+# 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 script should be run nightly from cron.  It checks out hdf5
+# from the CVS source tree and compares it against the previous
+# snapshot.  If anything significant changed then a new snapshot is
+# created, the minor version number is incremented, and the change is
+# checked back into the CVS repository.
+#
+
+# function definitions
+TIMESTAMP()
+{
+    echo "=====" "$1": "`date`" "====="
+}
+
+EXIT_BANNER()
+{
+TIMESTAMP "Exit $PROGNAME with status=$?"
+}
+
+# MAIN
+# SGI /bin/sh replaces $0 as function name if used in a function.
+# Set the name here to avoid that ambiguity and better style too.
+PROGNAME=$0
+
+echo "====================================="
+echo "$PROGNAME $*"
+echo "====================================="
+TIMESTAMP MAIN
+uname -a
+
+# setup exit banner message
+trap EXIT_BANNER 0
+
+# Dump environment variables
+echo ===Dumping environment variables===
+printenv | sort
+echo ===Done Dumping environment variables===
+
+# Where are the snapshots stored?
+ARCHIVES_default=/afs/ncsa/ftp/HDF/pub/outgoing/hdf5/snapshots
+ARCHIVES=$ARCHIVES_default
+
+# Where is the zlib library?
+# At NCSA, half of the machines have it in /usr/lib, the other half at
+# /usr/ncsa/lib.  Leave it unset.
+ZLIB_default=
+ZLIB=$ZLIB_default
+
+# What compression methods to use? (md5 does checksum).
+METHODS="gzip bzip2 md5"
+
+# Use User's MAKE if set.  Else use generic make.
+MAKE=${MAKE:-make}
+
+#
+# Command options
+cmd="all"
+test_opt=""
+errcode=0
+while [ $# -gt 0 ] ; do
+    case "$1" in
+	all)	
+	    cmd="all"
+	    ;;
+	checkout)
+	    cmdcheckout="checkout"
+	    cmd=""
+	    ;;
+	diff)
+	    cmddiff="diff"
+	    cmd=""
+	    ;;
+	deploy)
+	    # deploy the built binary.
+	    shift
+	    if [ $# -lt 1 ]; then
+		echo "deploy <dir> missing"
+		errcode=1
+		cmd="help"
+		break
+	    fi
+	    cmddeploy="deploy"
+	    DEPLOYDIRNAME="$1"
+	    ;;
+	deploydir)
+	    # default directory for deployment.
+	    shift
+	    if [ $# -lt 1 ]; then
+		echo "deploydir <dir> missing"
+		errcode=1
+		cmd="help"
+		break
+	    fi
+	    deploydir="$1"
+	    ;;
+	test)
+	    cmdtest="test"
+	    cmd=""
+	    ;;
+	setenv)
+	    # set environment variable
+	    shift
+	    eval $1="$2"
+	    export $1
+	    shift
+	    ;;
+	setenvN)
+	    # set environment variable with $1 values
+	    # e.g., setenvN 3 x a b c is same as setenv x="a b c".
+	    # a kludge now--the extra single quotes are needed
+	    # else eval complains.
+	    shift
+	    envN=$1
+	    shift
+	    envname=$1
+	    envalue=
+	    while test $envN -gt 0; do
+		shift
+		envalue="$envalue $1"
+		envN=`expr $envN - 1`
+	    done
+	    eval $envname="'$envalue'"
+	    export $envname
+	    ;;
+	srcdir)
+	    #use srcdir option for test
+	    srcdir="yes"
+	    ;;
+	srcdirname)
+	    shift
+	    if [ $# -lt 1 ]; then
+		echo "srcdirname <dir> missing"
+		errcode=1
+		cmd="help"
+		break
+	    fi
+	    SRCDIRNAME="$1"
+	    ;;
+	release)
+	    cmdrel="release"
+	    cmd=""
+	    ;;
+	clean | distclean)
+	    cmdclean="$1"
+	    cmd=""
+	    ;;
+	help)
+	    cmd="help"
+	    break
+	    ;;
+	echo)
+	    set -x
+	    break
+	    ;;
+	zlib)
+	    shift
+	    if [ $# -lt 1 ]; then
+		echo "ZLIB information missing"
+		errcode=1
+		cmd="help"
+		break
+	    fi
+	    ZLIB="$1"
+	    ;;
+	archive)
+	    shift
+	    if [ $# -lt 1 ]; then
+		echo "Archive pathname missing"
+		errcode=1
+		cmd="help"
+		break
+	    fi
+	    ARCHIVES="$1"
+	    ;;
+	--*)
+	    OP_CONFIGURE="$OP_CONFIGURE $1"
+	    ;;
+	op-configure)
+	    shift
+	    if [ $# -lt 1 ]; then
+		echo "op-configure option missing"
+		errcode=1
+		cmd="help"
+		break
+	    fi
+	    OP_CONFIGURE="$OP_CONFIGURE $1"
+	    ;;
+	*)
+	    echo "Unkown option $1"
+	    errcode=1
+	    cmd="help"
+	    break
+	    ;;
+    esac
+    shift
+done
+
+if [ "$cmd" = help ]; then
+    set -
+    cat <<EOF
+Usage: $PROGNAME [all] [checkout] [diff] [test] [srcdir] [release] [help]
+	[clean] [distclean] [echo] [deploy <dir>] [deploydir <dir>]
+	[zlib <zlib_path>] [archive <arch_path>] [srcdirname <dir>]
+	[op-configure <option>] [--<option>]
+    all:      Run all commands (checkout, test & release)
+              [Default is all]
+    checkout: Run cvs checkout
+    diff:     Run diff on current and previous versions.  Exit 0 if
+              no significant differences are found.  Otherwise, non-zero.
+    deploy:   deploy binary to directory <dir>
+    deploydir: use <dir> as the default directory for deployment
+    test:     Run test
+    release:  Run release
+    clean:    Run make clean
+    distclean:Run make distclean
+    echo:     Turn on echo mode (set -x)
+    setenv <name> <value>:
+              Set environment variable <name> to <value>.
+    setenvN <N> <name> <value> ...:
+	      Set environment variable with <N> values.
+	      E.g., setenvN 3 x a b c is same as setenv x="a b c".
+    srcdir:   Use srcdir option (does not imply other commands)
+              "snapshot srcdir" is equivalent to "snapshot srcdir all"
+              "snapshot srcdir checkout" is equivalent to "snapshot checkout"
+    srcdirname <dir>:
+              Use <dir> as the srcdir testing directory if srcdir is choosen.
+              If <dir> starts with '-', it is append to the default name
+              E.g., "snapshot srcdir srcdirname -xx" uses hostname-xx
+              [Default is hostname]
+    help:     Print this message
+    echo:     Turn on shell echo
+    zlib <zlib_path>:
+              Use <zlib_path> as the ZLIB locations
+              [Default is $ZLIB_default]
+    archive <arch_path>:
+              Use <arch_path> as the release ARCHIVE area
+              [Default is $ARCHIVES_default]
+    op-configure <option>:
+              Pass <option> to the configure command
+              E.g., "snapshot op-configure --enable-parallel"
+                  configures for parallel mode
+    --<option>:
+              Pass --<option> to the configure command
+              E.g., "snapshot --enable-parallel"
+                  configures for parallel mode
+EOF
+    exit $errcode
+fi
+
+# Setup the proper configure option (--with-zlib) to use zlib library
+# provide ZLIB is non-empty.
+ZLIB=${ZLIB:+"--with-zlib="$ZLIB}
+CONFIGURE="./configure $ZLIB $OP_CONFIGURE"
+
+# Execute the requests
+snapshot=yes
+
+if [ -f bin/snapshot_version ]; then
+    . bin/snapshot_version
+else
+    H5VERSION=hdf5
+fi
+
+BASEDIR=${HOME}/snapshots-${H5VERSION}
+if [ ! -d ${BASEDIR} ]; then
+    echo "BASEDIR ($BASEDIR) does not exist"
+    exit 1
+fi
+
+CURRENT=${BASEDIR}/current
+PREVIOUS=${BASEDIR}/previous
+HOSTNAME=`hostname | cut -f1 -d.`	# no domain part
+if [ $H5VERSION != hdf5 ]; then
+    CVSVERSION="-r $H5VERSION"
+else
+    CVSVERSION=				# use the default (main) version
+fi
+
+# Try finding a version of diff that supports the -I option too.
+DIFF=diff
+for d in `echo $PATH | sed -e 's/:/ /g'` ; do
+    test -x $d/diff && $d/diff -I XYZ /dev/null /dev/null > /dev/null 2>&1 &&
+	DIFF=$d/diff && break
+done
+
+#=============================
+# Run CVS checkout
+#=============================
+if [ "$cmd" = "all" -o -n "$cmdcheckout" ]; then
+    TIMESTAMP "checkout"
+    # If there is a Makefile in ${CURRENT}, the last test done in it
+    # has not been distclean'ed.  They would interfere with other
+    # --srcdir build since make considers the files in ${CURRENT} 
+    # take precedence over files in its own build-directory.  Run
+    # a "make distclean" to clean them all out.  This is not really
+    # part of the "checkout" functions but this is the most convenient
+    # spot to do the distclean.  We will also continue the checkout process
+    # regardless of the return code of distclean.
+    ( cd ${CURRENT}; test -f Makefile && ${MAKE} distclean)
+
+    # verify proper cvs setting
+    if [ -z "$CVSROOT" ]; then
+	echo "CVSROOT not defined!" 1>&2
+	exit 1
+    fi
+    # Check out the current version from CVS
+    (cd $BASEDIR; cvs -Q co -P -d current ${CVSVERSION} hdf5 ) || exit 1
+fi # Do CVS checkout
+
+
+#=============================
+# Run Test the HDF5 library
+#=============================
+if [ "$cmd" = "all" -o -n "$cmdtest" -o -n "$cmddiff" ]; then
+    TIMESTAMP "diff"
+    # setup if srcdir is used.
+    if [ -z "$srcdir" ]; then
+	TESTDIR=${CURRENT}
+    else
+	#create TESTDIR if not exist yet
+	case "$SRCDIRNAME" in
+	"")
+	    SRCDIRNAME=$HOSTNAME
+	    ;;
+	-*)
+	    SRCDIRNAME="$HOSTNAME$SRCDIRNAME"
+	    ;;
+	esac
+	TESTDIR=${BASEDIR}/TestDir/${SRCDIRNAME}
+	test -d ${TESTDIR} || mkdir ${TESTDIR}
+    fi
+    # Make sure current version exists and is clean
+    if [ -d ${TESTDIR} ]; then
+	(cd ${TESTDIR} && ${MAKE} distclean)
+    else
+	errcode=$?
+        snapshot=no
+        exit $errcode
+    fi
+
+    # Compare it with the previous version.  Compare only files listed in
+    # the MANIFEST plus the MANIFEST itself.
+    if [ -d ${PREVIOUS} ]; then
+	if (${DIFF} -c ${PREVIOUS}/MANIFEST ${CURRENT}/MANIFEST); then
+	    snapshot=no
+	    for src in `grep '^\.' ${CURRENT}/MANIFEST|expand|cut -f1 -d' '`; do
+		if ${DIFF} -I H5_VERS_RELEASE -I " released on " \
+		    -I " currently under development" \
+		    ${PREVIOUS}/$src ${CURRENT}/$src
+		then
+		    :	#continue
+		else
+		    snapshot=yes
+		    break
+		fi
+	    done
+	fi
+    fi
+
+    # if diff is choosen, exit 0 if no significant differences are found.
+    # otherwise, exit 1.  This includes cases of other failures.
+    if [ -n "$cmddiff" ]; then
+	if [ $snapshot = no ]; then
+	    exit 0
+	else
+	    exit 1
+	fi
+    fi
+
+    # Build, run tests and install procedures
+    if [ "$snapshot" = "yes" ]; then
+	if (cd ${TESTDIR} && \
+	    TIMESTAMP "configure" && \
+	    ${srcdir:+${CURRENT}/}${CONFIGURE} && \
+	    TIMESTAMP "make" && \
+	    ${MAKE} && \
+	    TIMESTAMP "check" && \
+	    ${MAKE} check && \
+	    TIMESTAMP "install" && \
+	    ${MAKE} install install-doc && \
+	    TIMESTAMP "check-install" && \
+	    ${MAKE} check-install && \
+	    TIMESTAMP "uninstall" && \
+	    ${MAKE} uninstall uninstall-doc); then
+	    :
+	else
+	    errcode=$?
+	    snapshot=no
+	    exit $errcode
+	fi
+    fi
+fi # Test the HDF5 library
+
+
+#=============================
+# Run deployment if requested.
+#=============================
+if [ -n "$DEPLOYDIRNAME" ]; then
+    if [ "$snapshot" = "yes" ]; then
+	TIMESTAMP "deploy"
+	if (cd ${TESTDIR} && ${CURRENT}/bin/deploy ${deploydir}/${DEPLOYDIRNAME}); then
+	    :	#continue
+	else
+	    errcode=$?
+	    exit $errcode
+	fi
+    fi
+fi # Deploy
+
+
+#=============================
+# Run Release snapshot, update version, and commit to cvs and tag
+#=============================
+if [ "$cmd" = "all" -o -n "$cmdrel" ]; then
+    if [ "$snapshot" = "yes" ]; then
+	TIMESTAMP "release"
+	(cd ${CURRENT} && ${MAKE} distclean)
+	(
+	    # Turn on exit on error in the sub-shell so that it does not
+	    # cvs commit if errors encounter here.
+	    set -e
+	    cd ${CURRENT}
+	    bin/release -d $ARCHIVES $METHODS
+	    RELEASE_VERSION="`perl bin/h5vers -v`"
+	    perl bin/h5vers -i
+	    cvs -Q commit -m "Snapshot $RELEASE_VERSION"
+	)
+	errcode=$?
+    fi
+
+    # Replace the previous version with the current version.
+    # Should check if the errcode of the release process but there
+    # are other failures after release was done (e.g. h5vers or cvs failures)
+    # that should allow the replacement to occure.
+    rm -rf ${PREVIOUS}
+    mv ${CURRENT} ${PREVIOUS}
+fi #Release snapshot
+
+
+#=============================
+# Clean the test area.  Default is no clean.
+#=============================
+if [ -n "$cmdclean" ]; then
+    TIMESTAMP "clean"
+    # setup if srcdir is used.
+    if [ -z "$srcdir" ]; then
+	TESTDIR=${CURRENT}
+    else
+	case "$SRCDIRNAME" in
+	"")
+	    SRCDIRNAME=$HOSTNAME
+	    ;;
+	-*)
+	    SRCDIRNAME="$HOSTNAME$SRCDIRNAME"
+	    ;;
+	esac
+	TESTDIR=${BASEDIR}/TestDir/${SRCDIRNAME}
+    fi
+    # clean it
+    if (cd ${TESTDIR} && ${MAKE} $cmdclean ) then
+	:
+    else
+	errcode=$?
+        snapshot=no
+        exit $errcode
+    fi
+fi # Clean the Test directory
+
+exit $errcode


Property changes on: packages/hdf5/branches/upstream/current/bin/snapshot
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/bin/trace
===================================================================
--- packages/hdf5/branches/upstream/current/bin/trace	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/trace	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,287 @@
+#!/usr/bin/perl -w
+##
+## 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.
+##
+require 5.003;
+$Source = "";
+
+##############################################################################
+# A map from type name to type letter.  We use this map for two reasons:
+#  1. We want the debugging stuff in the source code to be as unobtrusive as
+#     possible, which means as compact as possible.
+#  2. It's easier (faster) to parse these one and two-letter types in the C
+#     functions that display debugging results.
+#
+# All type strings are one or two characters.  One-character strings
+# are always lower case and should be used for common types.
+# Two-character strings begin with an upper-case letter which is
+# usually the same as the package name.
+#
+%TypeString = ("haddr_t"                    => "a",
+               "hbool_t"                    => "b",
+               "double"                     => "d",
+               "H5D_alloc_time_t"           => "Da",
+               "H5D_fill_time_t"            => "Df",
+               "H5D_fill_value_t"           => "DF",
+               "H5D_layout_t"               => "Dl",
+               "H5D_space_status_t"         => "Ds",
+               "H5FD_mpio_xfer_t"           => "Dt",
+               "herr_t"                     => "e",
+               "H5E_direction_t"            => "Ed",
+               "H5E_error_t*"               => "Ee",
+	       "H5E_major_t"                => "Ej",
+	       "H5E_minor_t"		    => "En",
+               "H5F_close_degree_t"         => "Fd",
+               "H5F_scope_t"                => "Fs",
+               "H5FD_t*"                    => "x",
+               "H5FD_class_t*"              => "x",
+               "H5FD_stream_fapl_t*"        => "x",
+               "H5G_link_t"                 => "Gl",
+               "H5G_obj_t"                  => "Go",
+               "H5G_stat_t*"                => "Gs",
+               "hsize_t"                    => "h",
+               "hssize_t"                   => "Hs",
+               "hid_t"                      => "i",
+               "int"                        => "Is",
+               "unsigned"                   => "Iu",
+               "unsigned int"               => "Iu",
+               "H5I_type_t"                 => "It",
+               "MPI_Comm"                   => "Mc",
+               "MPI_Info"                   => "Mi",
+               "H5FD_mem_t"                 => "Mt",
+               "off_t"                      => "o",
+               "H5P_class_t"                => "p",
+               "H5R_type_t"                 => "Rt",
+               "char*"                      => "s",
+               "H5S_class_t"                => "Sc",
+               "H5S_seloper_t"              => "Ss",
+               "H5S_sel_type"               => "St",
+               "htri_t"                     => "t",
+               "H5T_cset_t",                => "Tc",
+               "H5T_direction_t",           => "Td",
+               "H5T_norm_t"                 => "Tn",
+               "H5T_order_t"                => "To",
+               "H5T_pad_t"                  => "Tp",
+               "H5T_pers_t"                 => "Te",
+               "H5T_sign_t"                 => "Ts",
+               "H5T_class_t"                => "Tt",
+               "H5T_str_t"                  => "Tz",
+               "void*"                      => "x",
+               "void**"                     => "x",
+               "FILE*"                      => "x",
+               "H5A_operator_t"             => "x",
+               "H5D_operator_t"             => "x",
+               "H5E_auto_t"                 => "x",
+               "H5E_walk_t"                 => "x",
+               "H5G_iterate_t"              => "x",
+               "H5MM_allocate_t"            => "x",
+               "H5MM_free_t"                => "x",
+               "H5P_cls_create_func_t"      => "x",
+               "H5P_cls_copy_func_t"        => "x",
+               "H5P_cls_close_func_t"       => "x",
+               "H5P_iterate_t"              => "x",
+               "H5P_prp_create_func_t"      => "x",
+               "H5P_prp_copy_func_t"        => "x",
+               "H5P_prp_close_func_t"       => "x",
+               "H5P_prp_delete_func_t"      => "x",
+               "H5P_prp_get_func_t"         => "x",
+               "H5P_prp_set_func_t"         => "x",
+               "H5T_cdata_t**"              => "x",
+               "H5T_conv_t"                 => "x",
+	       "H5T_overflow_t"             => "x",
+               "H5Z_func_t"                 => "x",
+               "H5Z_filter_func_t"          => "x",
+               "size_t"                     => "z",
+               "H5Z_class_t*"               => "Zc",
+               "H5Z_EDC_t"                  => "Ze",
+               "H5Z_filter_t"               => "Zf",
+               "ssize_t"                    => "Zs",
+              );
+
+##############################################################################
+# Print an error message.
+#
+sub errmesg ($$@) {
+  my ($file, $func, @mesg) = @_;
+  my ($mesg) = join "", @mesg;
+  my ($lineno) = 1;
+  if ($Source =~ /(.*?\n)($func)/s) {
+    local $_ = $1;
+    $lineno = tr/\n/\n/;
+  }
+
+  print "$file: in function \`$func\':\n";
+  print "$file:$lineno: $mesg\n";
+}
+
+##############################################################################
+# Given a C data type return the type string that goes with it.
+#
+sub argstring ($$$) {
+  my ($file, $func, $atype) = @_;
+  my ($ptr, $tstr, $array) = (0, "!", "");
+  my ($fq_atype);
+
+  # Normalize the data type by removing redundant white space,
+  # certain type qualifiers, and indirection.
+  $atype =~ s/^\bconst\b//;
+  $atype =~ s/\bUNUSED\b//g;
+  $atype =~ s/\s+/ /g;
+  $ptr = length $1 if  $atype =~ s/(\*+)//;
+  $atype =~ s/^\s+//;
+  $atype =~ s/\s+$//;
+  if ($atype =~ /(.*)\[(.*)\]$/) {
+    ($array, $atype) = ($2, $1);
+    $atype =~ s/\s+$//;
+  }
+  $fq_atype = $atype . ('*' x $ptr);
+
+  if ($ptr>0 && exists $TypeString{$fq_atype}) {
+    $ptr = 0;
+    $tstr = $TypeString{$fq_atype};
+  } elsif ($ptr>0 && exists $TypeString{"$atype*"}) {
+    --$ptr;
+    $tstr = $TypeString{"$atype*"};
+  } elsif (!exists $TypeString{$atype}) {
+    errmesg $file, $func, "untraceable type \`$atype", '*'x$ptr, "\'";
+  } else {
+    $tstr = $TypeString{$atype};
+  }
+  return ("*" x $ptr) . ($array?"[$array]":"") . $tstr;
+}
+
+##############################################################################
+# Given information about an API function, rewrite that function with
+# updated tracing information.
+#
+sub rewrite_func ($$$$$) {
+  my ($file, $type, $name, $args, $body) = @_;
+  my ($arg,$trace);
+  my (@arg_name, @arg_str);
+  local $_;
+
+  # Parse return value
+  my $rettype = argstring $file, $name, $type;
+  goto error if $rettype =~ /!/;
+
+  # Parse arguments
+  if ($args eq "void") {
+    $trace = "H5TRACE0(\"$rettype\",\"\");\n";
+  } else {
+    # Split arguments.  First convert `/*in,out*/' to get rid of the
+    # comma, then split the arguments on commas.
+    $args =~ s/(\/\*\s*in),\s*(out\s*\*\/)/$1_$2/g;
+    my @args = split /,[\s\n]*/, $args;
+    my $argno = 0;
+    my %names;
+
+    for $arg (@args) {
+      unless ($arg=~/^(([a-z_A-Z]\w*\s+)+\**)
+	      ([a-z_A-Z]\w*)(\[.*?\])?
+	      (\s*\/\*\s*(in|out|in_out)\s*\*\/)?\s*$/x) {
+	errmesg $file, $name, "unable to parse \`$arg\'";
+	goto error;
+      } else {
+	my ($atype, $aname, $array, $adir) = ($1, $3, $4, $6);
+	$names{$aname} = $argno++;
+	$adir ||= "in";
+	$atype =~ s/\s+$//;
+	push @arg_name, $aname;
+
+	if ($adir eq "out") {
+	  push @arg_str, "x";
+	} else {
+	  if (defined $array) {
+	    $atype .= "*";
+	    if ($array =~ /^\[\/\*([a-z_A-Z]\w*)\*\/\]$/) {
+	      my $asize = $1;
+	      if (exists $names{$asize}) {
+		$atype .= '[a' . $names{$asize} . ']';
+	      } else {
+		warn "bad array size: $asize";
+		$atype .= "*";
+	      }
+	    }
+	  }
+	  push @arg_str, argstring $file, $name, $atype;
+	}
+      }
+    }
+    $trace = "H5TRACE" . scalar(@arg_str) . "(\"$rettype\",\"";
+    $trace .= join("", @arg_str) . "\"";
+    my $len = 4 + length $trace;
+    for (@arg_name) {
+      if ($len + length >= 77) {
+	$trace .= ",\n             $_";
+	$len = 13 + length;
+      } else {
+	$trace .= ",$_";
+	$len += 1 + length;
+      }
+    }
+    $trace .= ");\n";
+  }
+  goto error if grep {/!/} @arg_str;
+
+  # The H5TRACE() statement
+  if ($body =~ /\/\*[ \t]*NO[ \t]*TRACE[ \t]*\*\//) {
+    if ($body =~ /\s*H5TRACE\d+\s*\(/) {
+      errmesg $file, $name, "warning: trace info was not updated";
+    } else {
+      errmesg $file, $name, "warning: trace info was not inserted";
+    }
+  } elsif ($body =~ s/((\n[ \t]*)H5TRACE\d+\s*\(.*?\);)\n/"$2$trace"/es) {
+    # Replaced an H5TRACE macro
+  } elsif ($body=~s/((\n[ \t]*)FUNC_ENTER\w*\s*\(.*?\);??)\n/"$1$2$trace"/es) {
+    # Added an H5TRACE macro after a FUNC_ENTER macro.
+  } else {
+    errmesg $file, $name, "unable to insert tracing information";
+    print "body = ", $body, "\n";
+    goto error;
+  }
+
+  
+ error:
+  return "\n$type\n$name($args)\n$body";
+}
+
+##############################################################################
+# Process each source file, rewriting API functions with updated
+# tracing information.
+#
+my $total_api = 0;
+for $file (@ARGV) {
+  # Snarf up the entire file
+  open SOURCE, $file or die "$file: $!\n";
+  $Source = join "", <SOURCE>;
+  close SOURCE;
+
+  # Make modifications
+  my $original = $Source;
+  my $napi = $Source =~ s/\n([A-Za-z]\w*(\s+[a-z]\w*)*)\s*\n #type
+                            (H5[A-Z]{0,2}[^_A-Z]\w*)      #name
+                            \s*\((.*?)\)\s*               #args
+                            (\{.*?\n\}[^\n]*)             #body
+                         /rewrite_func($file,$1,$3,$4,$5)/segx;
+  $total_api += $napi;
+  
+  # If the source changed then print out the new version
+  if ($original ne $Source) {
+    printf "%s: instrumented %d API function%s\n", 
+           $file, $napi, 1==$napi?"":"s";
+    rename $file, "$file~" or die "unable to make backup";
+    open SOURCE, ">$file" or die "unable to modify source";
+    print SOURCE $Source;
+    close SOURCE;
+  }
+}


Property changes on: packages/hdf5/branches/upstream/current/bin/trace
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/bin/yodconfigure
===================================================================
--- packages/hdf5/branches/upstream/current/bin/yodconfigure	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/bin/yodconfigure	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+# 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.
+
+# Fix configure file so that it can launch configure testing executable
+# via the proper launching command, e.g., yod.  (Thus the name yodconfigure
+# is used.)
+#
+# Author: Albert Cheng
+
+if [ $# -ne 1 ]; then
+    echo "Usage: $0 <configure file>"
+    exit 1
+fi
+confile=$1
+
+if [ ! -w $confile ]; then
+    echo "$0: $confile is not writable"
+    exit 1
+fi
+
+# Insert the ACTRY function after the 1st line which is the #!/bin/sh.
+# Change all "eval $ac_try" commands to call ACTRY.
+#
+ed - $confile <<'EOF'
+1a
+# ===inserted by yodconfigure ====
+# ACTRY will figure out when it is approprirate to run the command by the
+# $RUNSERIAL launcher (e.g., yod -sz 1) and when to just run it as is.
+# So far, ./a.out and ./conftest are names of real executable that should
+# be run by $RUNSERIAL.
+#
+# (uncomment the echo line if you want to see what is going on.)
+ACTRY()
+{
+#echo ACTRY: args are: $* > /dev/tty
+if [ "$1" = ./a.out -o "$1" = ./conftest ]; then
+#    echo $RUNSERIAL $* > /dev/tty
+    $RUNSERIAL $*
+else
+    $*
+fi
+}
+.
+g/eval $ac_try/s/eval/eval ACTRY/
+w
+q
+EOF


Property changes on: packages/hdf5/branches/upstream/current/bin/yodconfigure
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/c++/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/c++/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,139 @@
+## Top-level HDF5-C++ Makefile(.in)
+##
+##
+## 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 makefile mostly just reinvokes make in the various subdirectories
+## but does so in the correct order.  You can alternatively invoke make from
+## each subdirectory manually.
+##
+top_srcdir=@top_srcdir@
+top_builddir=..
+srcdir=@srcdir@
+
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+# We include examples now since those are our "tests" at this time. We
+# can remove it later.
+SUBDIRS=src test
+
+##############################################################################
+##		    T A R G E T S
+##
+## all:		Build libraries, header files, tests, and programs in the
+##	 	various subdirectories but does not run tests or install the
+##		library, header files, or programs.  The components can be
+##		built individually with the targets lib, progs, and tests.
+##
+## check:	Test the uninstalled library to make sure it works. You may
+##		also say `test' or `_test' (`test' doesn't work from the top
+##		level directory for some versions of make because `test' is
+##		also a directory).
+##
+## install:	Installs libraries, header files, programs, and documentation
+##		in the various directories under the prefix directory (lib,
+##		include, bin, man, info).  Use the `--prefix=PATH' option
+##		to `configure' (or `config.status') or say `--help' for
+##		other alternatives.  The default prefix is `/usr/local'.
+##
+## uninstall:	Delete all the installed files that the `install' target
+##		created (but not the noninstalled files such as `make all'
+##		created).
+##
+## clean:	Removes temporary files except those that record the
+##		configuration and those that are part of the distribution.
+##
+## mostlyclean:	Like `clean' except it doesn't delete a few files like
+##		libraries, programs, and/or generated header files because
+##		regenerating them is rarely necessary and takes a lot of time.
+##
+## distclean:	Deletes all files that are created by configuring or building
+##		HDF5.  If you have unpacked the source and built HDF5 without
+##		creating any other files, then `make distclean' will leave
+##		only the files that were in the distrubution.
+##
+## maintainer-clean:
+##		Like `distclean' except it deletes more files.  It deletes
+##		all generated files.  This target is not intended for normal
+##		users; it deletes files that may require special tools to
+##		rebuild.
+##
+## TAGS:	Updates the tags table for this program.
+##
+## dep depend:	Builds dependencies in all subdirectories.  These targets
+##		might not be available on certain combinations of make
+##		programs and C compilers.  At the other extreme, the GNU
+##		make used in combination with gcc will maintain dependency
+##		information automatically.
+lib progs check check-s check-p test _test uninstall:
+	@@SETX@; for d in $(SUBDIRS); do				      \
+	   (cd $$d && $(MAKE) $@) || exit 1;				      \
+	done
+
+tests TAGS dep depend:
+	@@SETX@; for d in $(SUBDIRS); do				      \
+	   (cd $$d && $(MAKE) $@) || exit 1;				      \
+	done
+
+install-all:
+	@$(MAKE) install
+
+install:
+	@@SETX@; for d in $(SUBDIRS); do				      \
+	   (cd $$d && $(MAKE) $@) || exit 1;				      \
+	done
+	@$(MAKE) install-examples
+	@$(LT) --mode=finish $(libdir);
+
+install-examples:
+	(cd examples && $(MAKE) $@) || exit 1;
+
+uninstall-examples:
+	(cd examples && $(MAKE) $@) || exit 1;
+
+## Check if installation is correct by checking if examples can be built.
+## This requires a proper "make install" has been done.
+check-install:
+	(cd examples && $(MAKE) check) || exit 1
+
+.PHONY: all lib progs test _test install uninstall dep depend clean           \
+	mostlyclean distclean maintainer-clean
+
+clean mostlyclean:
+	@@SETX@; for d in $(SUBDIRS) examples; do                             \
+	   (cd $$d && $(MAKE) $@);                                            \
+	done
+	-$(RM) conftest conftest.c
+
+distclean:
+	@@SETX@; for d in $(SUBDIRS) examples; do                             \
+	   (cd $$d && $(MAKE) $@);                                            \
+	done
+	-$(RM) config/commence config/conclude
+	-$(RM) config/stamp1 config/stamp2 config/depend?
+	-$(RM) config.cache config.log config.status configure.lineno
+	-$(RM) src/H5config.h src/H5pubconf.h
+	-$(RM) libtool Makefile so_locations
+
+maintainer-clean:
+	@echo "This target is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+	@@SETX@; for d in $(SUBDIRS) examples; do			      \
+	   (cd $$d && $(MAKE) $@);					      \
+	done
+	-$(RM) config.cache config.log config.status src/H5config.h
+	-$(RM) configure src/H5config.h.in
+

Added: packages/hdf5/branches/upstream/current/c++/aclocal.m4
===================================================================
--- packages/hdf5/branches/upstream/current/c++/aclocal.m4	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/aclocal.m4	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3528 @@
+# aclocal.m4 generated automatically by aclocal 1.6 -*- Autoconf -*-
+
+# Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
+
+# serial 46 AC_PROG_LIBTOOL
+
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])
+
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.13)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+
+_LT_AC_PROG_ECHO_BACKSLASH
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    AC_PATH_MAGIC
+  fi
+  ;;
+esac
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
+
+AC_ARG_ENABLE(libtool-lock,
+  [  --disable-libtool-lock  avoid locking (might break parallel builds)])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_SAVE
+     AC_LANG_C
+     AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_RESTORE])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+
+ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+
+  # recent cygwin and mingw systems supply a stub DllMain which the user
+  # can override, but on older systems we have to supply one
+  AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain,
+    [AC_TRY_LINK([],
+      [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*);
+      DllMain (0, 0, 0);],
+      [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])])
+
+  case $host/$CC in
+  *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*)
+    # old mingw systems require "-dll" to link a DLL, while more recent ones
+    # require "-mdll"
+    SAVE_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS -mdll"
+    AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch,
+      [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])])
+    CFLAGS="$SAVE_CFLAGS" ;;
+  *-*-cygwin* | *-*-pw32*)
+    # cygwin systems need to pass --dll to the linker, and not link
+    # crt.o which will require a WinMain at 16 definition.
+    lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;;
+  esac
+  ;;
+  ])
+esac
+
+_LT_AC_LTCONFIG_HACK
+
+])
+
+# AC_LIBTOOL_HEADER_ASSERT
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_HEADER_ASSERT],
+[AC_CACHE_CHECK([whether $CC supports assert without backlinking],
+    [lt_cv_func_assert_works],
+    [case $host in
+    *-*-solaris*)
+      if test "$GCC" = yes && test "$with_gnu_ld" != yes; then
+        case `$CC --version 2>/dev/null` in
+        [[12]].*) lt_cv_func_assert_works=no ;;
+        *)        lt_cv_func_assert_works=yes ;;
+        esac
+      fi
+      ;;
+    esac])
+
+if test "x$lt_cv_func_assert_works" = xyes; then
+  AC_CHECK_HEADERS(assert.h)
+fi
+])# AC_LIBTOOL_HEADER_ASSERT
+
+# _LT_AC_CHECK_DLFCN
+# --------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)
+])# _LT_AC_CHECK_DLFCN
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+irix*)
+  symcode='[[BCDEGRST]]'
+  ;;
+solaris* | sysv5*)
+  symcode='[[BDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $host_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
+  symcode='[[ABCDGISTW]]'
+fi
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Write the raw and C identifiers.
+lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ 	]]\($symcode$symcode*\)[[ 	]][[ 	]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if egrep ' nm_test_var$' "$nlist" >/dev/null; then
+	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+	  sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  save_LIBS="$LIBS"
+	  save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$no_builtin_flag"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$save_LIBS"
+	  CFLAGS="$save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AC_FD_CC
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AC_FD_CC
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC
+    fi
+  else
+    echo "$progname: failed program was:" >&AC_FD_CC
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  global_symbol_to_cdecl=
+  global_symbol_to_c_name_address=
+else
+  global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
+  global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address"
+fi
+if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address";
+then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
+# ---------------------------------
+AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR],
+[# Find the correct PATH separator.  Usually this is `:', but
+# DJGPP uses `;' like DOS.
+if test "X${PATH_SEPARATOR+set}" != Xset; then
+  UNAME=${UNAME-`uname 2>/dev/null`}
+  case X$UNAME in
+    *-DOS) lt_cv_sys_path_separator=';' ;;
+    *)     lt_cv_sys_path_separator=':' ;;
+  esac
+  PATH_SEPARATOR=$lt_cv_sys_path_separator
+fi
+])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
+
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+			      [AC_DIVERT_PUSH(NOTICE)])
+_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "[$]0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+AC_DIVERT_POP
+])# _LT_AC_PROG_ECHO_BACKSLASH
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}]
+EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_unknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_AC_TRY_DLOPEN_SELF
+
+# AC_LIBTOOL_DLOPEN_SELF
+# -------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+          [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+            [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+	        [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+	          [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+	            [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+    	  lt_cv_dlopen_self_static, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+])# AC_LIBTOOL_DLOPEN_SELF
+
+AC_DEFUN([_LT_AC_LTCONFIG_HACK],
+[AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([[\\"\\`$\\\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([[\\"\\`\\\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+need_locks="$enable_libtool_lock"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+if test x"$host" != x"$build"; then
+  ac_tool_prefix=${host_alias}-
+else
+  ac_tool_prefix=
+fi
+
+# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+case $host_os in
+linux-gnu*) ;;
+linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+esac
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+    ;;
+  *)
+    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Allow CC to be a program name with arguments.
+set dummy $CC
+compiler="[$]2"
+
+AC_MSG_CHECKING([for objdir])
+rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+AC_MSG_RESULT($objdir)
+
+
+AC_ARG_WITH(pic,
+[  --with-pic              try to use only PIC/non-PIC objects [default=use both]],
+pic_mode="$withval", pic_mode=default)
+test -z "$pic_mode" && pic_mode=default
+
+# We assume here that the value for lt_cv_prog_cc_pic will not be cached
+# in isolation, and that seeing it set (from the cache) indicates that
+# the associated values are set (in the cache) correctly too.
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+AC_CACHE_VAL(lt_cv_prog_cc_pic,
+[ lt_cv_prog_cc_pic=
+  lt_cv_prog_cc_shlib=
+  lt_cv_prog_cc_wl=
+  lt_cv_prog_cc_static=
+  lt_cv_prog_cc_no_builtin=
+  lt_cv_prog_cc_can_build_shared=$can_build_shared
+
+  if test "$GCC" = yes; then
+    lt_cv_prog_cc_wl='-Wl,'
+    lt_cv_prog_cc_static='-static'
+
+    case $host_os in
+    aix*)
+      # Below there is a dirty hack to force normal static linking with -ldl
+      # The problem is because libdl dynamically linked with both libc and
+      # libC (AIX C++ library), which obviously doesn't included in libraries
+      # list by gcc. This cause undefined symbols with -static flags.
+      # This hack allows C programs to be linked with "-static -ldl", but
+      # not sure about C++ programs.
+      lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_cv_prog_cc_pic='-fno-common'
+      ;;
+    cygwin* | mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_cv_prog_cc_pic='-DDLL_EXPORT'
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	 lt_cv_prog_cc_pic=-Kconform_pic
+      fi
+      ;;
+    *)
+      lt_cv_prog_cc_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for PIC flags for the system compiler.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      lt_cv_prog_cc_wl='-Wl,'
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_cv_prog_cc_static='-Bstatic'
+      else
+        ####################################################################
+        ## HACK Alert! This is causing problems with C++ on SP3...We'll just
+        ## remove this...THERE! All better now.
+        ####################################################################
+        ##lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
+		:
+      fi
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
+      lt_cv_prog_cc_pic='+Z'
+      ;;
+
+    irix5* | irix6*)
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static='-non_shared'
+      # PIC (with -KPIC) is the default.
+      ;;
+
+    cygwin* | mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_cv_prog_cc_pic='-DDLL_EXPORT'
+      ;;
+
+    newsos6)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      # All OSF/1 code is PIC.
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_cv_prog_cc_pic='-Kpic'
+      lt_cv_prog_cc_static='-dn'
+      lt_cv_prog_cc_shlib='-belf'
+      ;;
+
+    solaris*)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      lt_cv_prog_cc_wl='-Wl,'
+      ;;
+
+    sunos4*)
+      lt_cv_prog_cc_pic='-PIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      lt_cv_prog_cc_wl='-Qoption ld '
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      if test "x$host_vendor" = xsni; then
+	lt_cv_prog_cc_wl='-LD'
+      else
+	lt_cv_prog_cc_wl='-Wl,'
+      fi
+      ;;
+
+    uts4*)
+      lt_cv_prog_cc_pic='-pic'
+      lt_cv_prog_cc_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_cv_prog_cc_pic='-Kconform_pic'
+	lt_cv_prog_cc_static='-Bstatic'
+      fi
+      ;;
+
+    *)
+      lt_cv_prog_cc_can_build_shared=no
+      ;;
+    esac
+  fi
+])
+if test -z "$lt_cv_prog_cc_pic"; then
+  AC_MSG_RESULT([none])
+else
+  AC_MSG_RESULT([$lt_cv_prog_cc_pic])
+
+  # Check to make sure the pic_flag actually works.
+  AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works])
+  AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl
+    save_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
+    AC_TRY_COMPILE([], [], [dnl
+      case $host_os in
+      hpux9* | hpux10* | hpux11*)
+	# On HP-UX, both CC and GCC only warn that PIC is supported... then
+	# they create non-PIC objects.  So, if there were any warnings, we
+	# assume that PIC is not supported.
+	if test -s conftest.err; then
+	  lt_cv_prog_cc_pic_works=no
+	else
+	  lt_cv_prog_cc_pic_works=yes
+	fi
+	;;
+      *)
+	lt_cv_prog_cc_pic_works=yes
+	;;
+      esac
+    ], [dnl
+      lt_cv_prog_cc_pic_works=no
+    ])
+    CFLAGS="$save_CFLAGS"
+  ])
+
+  if test "X$lt_cv_prog_cc_pic_works" = Xno; then
+    lt_cv_prog_cc_pic=
+    lt_cv_prog_cc_can_build_shared=no
+  else
+    lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
+  fi
+
+  AC_MSG_RESULT([$lt_cv_prog_cc_pic_works])
+fi
+
+# Check for any special shared library compilation flags.
+if test -n "$lt_cv_prog_cc_shlib"; then
+  AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries])
+  if echo "$old_CC $old_CFLAGS " | egrep -e "[[ 	]]$lt_cv_prog_cc_shlib[[ 	]]" >/dev/null; then :
+  else
+   AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure])
+    lt_cv_prog_cc_can_build_shared=no
+  fi
+fi
+
+AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works])
+AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl
+  lt_cv_prog_cc_static_works=no
+  save_LDFLAGS="$LDFLAGS"
+  LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
+  AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes])
+  LDFLAGS="$save_LDFLAGS"
+])
+
+# Belt *and* braces to stop my trousers falling down:
+test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
+AC_MSG_RESULT([$lt_cv_prog_cc_static_works])
+
+pic_flag="$lt_cv_prog_cc_pic"
+special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
+wl="$lt_cv_prog_cc_wl"
+link_static_flag="$lt_cv_prog_cc_static"
+no_builtin_flag="$lt_cv_prog_cc_no_builtin"
+can_build_shared="$lt_cv_prog_cc_can_build_shared"
+
+
+# Check to see if options -o and -c are simultaneously supported by compiler
+AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext])
+AC_CACHE_VAL([lt_cv_compiler_c_o], [
+$rm -r conftest 2>/dev/null
+mkdir conftest
+cd conftest
+echo "int some_variable = 0;" > conftest.$ac_ext
+mkdir out
+# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+# that will create temporary files in the current directory regardless of
+# the output directory.  Thus, making CWD read-only will cause this test
+# to fail, enabling locking or at least warning the user not to do parallel
+# builds.
+chmod -w .
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
+compiler_c_o=no
+if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
+  # The compiler can only warn and ignore the option if not recognized
+  # So say no if there are warnings
+  if test -s out/conftest.err; then
+    lt_cv_compiler_c_o=no
+  else
+    lt_cv_compiler_c_o=yes
+  fi
+else
+  # Append any errors to the config.log.
+  cat out/conftest.err 1>&AC_FD_CC
+  lt_cv_compiler_c_o=no
+fi
+CFLAGS="$save_CFLAGS"
+chmod u+w .
+$rm conftest* out/*
+rmdir out
+cd ..
+rmdir conftest
+$rm -r conftest 2>/dev/null
+])
+compiler_c_o=$lt_cv_compiler_c_o
+AC_MSG_RESULT([$compiler_c_o])
+
+if test x"$compiler_c_o" = x"yes"; then
+  # Check to see if we can write to a .lo
+  AC_MSG_CHECKING([if $compiler supports -c -o file.lo])
+  AC_CACHE_VAL([lt_cv_compiler_o_lo], [
+  lt_cv_compiler_o_lo=no
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -c -o conftest.lo"
+  save_objext="$ac_objext"
+  ac_objext=lo
+  AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
+    # The compiler can only warn and ignore the option if not recognized
+    # So say no if there are warnings
+    if test -s conftest.err; then
+      lt_cv_compiler_o_lo=no
+    else
+      lt_cv_compiler_o_lo=yes
+    fi
+  ])
+  ac_objext="$save_objext"
+  CFLAGS="$save_CFLAGS"
+  ])
+  compiler_o_lo=$lt_cv_compiler_o_lo
+  AC_MSG_RESULT([$compiler_o_lo])
+else
+  compiler_o_lo=no
+fi
+
+# Check to see if we can do hard links to lock some files if needed
+hard_links="nottested"
+if test "$compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+if test "$GCC" = yes; then
+  # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
+  AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions])
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
+  compiler_rtti_exceptions=no
+  AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
+    # The compiler can only warn and ignore the option if not recognized
+    # So say no if there are warnings
+    if test -s conftest.err; then
+      compiler_rtti_exceptions=no
+    else
+      compiler_rtti_exceptions=yes
+    fi
+  ])
+  CFLAGS="$save_CFLAGS"
+  AC_MSG_RESULT([$compiler_rtti_exceptions])
+
+  if test "$compiler_rtti_exceptions" = "yes"; then
+    no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
+  else
+    no_builtin_flag=' -fno-builtin'
+  fi
+fi
+
+# See if the linker supports building shared libraries.
+AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries])
+
+allow_undefined_flag=
+no_undefined_flag=
+need_lib_prefix=unknown
+need_version=unknown
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+archive_cmds=
+archive_expsym_cmds=
+old_archive_from_new_cmds=
+old_archive_from_expsyms_cmds=
+export_dynamic_flag_spec=
+whole_archive_flag_spec=
+thread_safe_flag_spec=
+hardcode_into_libs=no
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+hardcode_shlibpath_var=unsupported
+runpath_var=
+link_all_deplibs=unknown
+always_export_symbols=no
+export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
+# include_expsyms should be a list of space-separated symbols to be *always*
+# included in the symbol list
+include_expsyms=
+# exclude_expsyms can be an egrep regular expression of symbols to exclude
+# it will be wrapped by ` (' and `)$', so one must not match beginning or
+# end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+# as well as any symbol that contains `d'.
+exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+# platforms (ab)use it in PIC code, but their linkers get confused if
+# the symbol is explicitly referenced.  Since portable code cannot
+# rely on this symbol name, it's probably fine to never include it in
+# preloaded symbol tables.
+extract_expsyms_cmds=
+
+case $host_os in
+cygwin* | mingw* | pw32*)
+  # FIXME: the MSVC++ port hasn't been tested in a loooong time
+  # When not using gcc, we currently assume that we are using
+  # Microsoft Visual C++.
+  if test "$GCC" != yes; then
+    with_gnu_ld=no
+  fi
+  ;;
+openbsd*)
+  with_gnu_ld=no
+  ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # If archive_cmds runs LD, not CC, wlarc should be empty
+  wlarc='${wl}'
+
+  # See if GNU ld supports shared libraries.
+  case $host_os in
+  aix3* | aix4* | aix5*)
+    # On AIX, the GNU linker is very broken
+    # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
+    ld_shlibs=no
+    cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+    ;;
+
+  amigaos*)
+    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+
+    # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+    # that the semantics of dynamic libraries on AmigaOS, at least up
+    # to version 4, is to share data among multiple programs linked
+    # with the same dynamic library.  Since this doesn't match the
+    # behavior of shared libraries on other platforms, we can use
+    # them.
+    ld_shlibs=no
+    ;;
+
+  beos*)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      allow_undefined_flag=unsupported
+      # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+      # support --undefined.  This deserves some investigation.  FIXME
+      archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # hardcode_libdir_flag_spec is actually meaningless, as there is
+    # no search path for DLLs.
+    hardcode_libdir_flag_spec='-L$libdir'
+    allow_undefined_flag=unsupported
+    always_export_symbols=yes
+
+    extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
+      sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
+      test -f $output_objdir/impgen.exe || (cd $output_objdir && \
+      if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
+      else $CC -o impgen impgen.c ; fi)~
+      $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
+
+    old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
+
+    # cygwin and mingw dlls have different entry points and sets of symbols
+    # to exclude.
+    # FIXME: what about values for MSVC?
+    dll_entry=__cygwin_dll_entry at 12
+    dll_exclude_symbols=DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12~
+    case $host_os in
+    mingw*)
+      # mingw values
+      dll_entry=_DllMainCRTStartup at 12
+      dll_exclude_symbols=DllMain at 12,DllMainCRTStartup at 12,DllEntryPoint at 12~
+      ;;
+    esac
+
+    # mingw and cygwin differ, and it's simplest to just exclude the union
+    # of the two symbol sets.
+    dll_exclude_symbols=DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12,DllMainCRTStartup at 12,DllEntryPoint at 12
+
+    # recent cygwin and mingw systems supply a stub DllMain which the user
+    # can override, but on older systems we have to supply one (in ltdll.c)
+    if test "x$lt_cv_need_dllmain" = "xyes"; then
+      ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
+      ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~
+	test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
+    else
+      ltdll_obj=
+      ltdll_cmds=
+    fi
+
+    # Extract the symbol export list from an `--export-all' def file,
+    # then regenerate the def file from the symbol export list, so that
+    # the compiled dll only exports the symbol export list.
+    # Be careful not to strip the DATA tag left be newer dlltools.
+    export_symbols_cmds="$ltdll_cmds"'
+      $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
+      sed -e "1,/EXPORTS/d" -e "s/ @ [[0-9]]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
+
+    # If the export-symbols file already is a .def file (1st line
+    # is EXPORTS), use it as is.
+    # If DATA tags from a recent dlltool are present, honour them!
+    archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname-def;
+      else
+	echo EXPORTS > $output_objdir/$soname-def;
+	_lt_hint=1;
+	cat $export_symbols | while read symbol; do
+	 set dummy \$symbol;
+	 case \[$]# in
+	   2) echo "   \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
+	   *) echo "     \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;;
+	 esac;
+	 _lt_hint=`expr 1 + \$_lt_hint`;
+	done;
+      fi~
+      '"$ltdll_cmds"'
+      $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
+      $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
+      $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
+    ;;
+
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+      wlarc=
+    else
+      archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    fi
+    ;;
+
+  solaris* | sysv5*)
+    if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+      ld_shlibs=no
+      cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+    elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+  sunos4*)
+    archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+    wlarc=
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  *)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+  esac
+
+  if test "$ld_shlibs" = yes; then
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    case $host_os in
+    cygwin* | mingw* | pw32*)
+      # dlltool doesn't understand --whole-archive et. al.
+      whole_archive_flag_spec=
+      ;;
+    *)
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
+	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+	whole_archive_flag_spec=
+      fi
+      ;;
+    esac
+  fi
+else
+  # PORTME fill in a description of your system's linker (not GNU ld)
+  case $host_os in
+  aix3*)
+    allow_undefined_flag=unsupported
+    always_export_symbols=yes
+    archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+    # Note: this linker hardcodes the directories in LIBPATH if there
+    # are no directories specified by -L.
+    hardcode_minus_L=yes
+    if test "$GCC" = yes && test -z "$link_static_flag"; then
+      # Neither direct hardcoding nor static linking is supported with a
+      # broken collect2.
+      hardcode_direct=unsupported
+    fi
+    ;;
+
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	done
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    hardcode_direct=yes
+    archive_cmds=''
+    hardcode_libdir_separator=':'
+    if test "$GCC" = yes; then
+      case $host_os in aix4.[[012]]|aix4.[[012]].*)
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	  strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  hardcode_direct=yes
+	else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	fi
+      esac
+
+      shared_flag='-shared'
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	shared_flag='${wl}-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall can do strange things, so it is better to
+    # generate a list of symbols to export.
+    always_export_symbols=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      allow_undefined_flag='-berok'
+      hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
+      archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+    else
+      if test "$host_cpu" = ia64; then
+	hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	allow_undefined_flag="-z nodefs"
+	archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+      else
+        #######################################################################
+        # This is a MAJOR HACK(tm) to get HDF5 to compile on Pacific Blue.
+        # The ``-b nolibpath -b ...'' flags were messing with the mpicc
+        # compiler's already defined library paths and it wasn't able to find
+        # the libraries it needed to run....DOH!
+        hname="`hostname`"
+
+        case "$hname" in
+          *pacific.llnl.gov* | *s0*)
+            hardcode_libdir_flag_spec=' '
+            ;;
+          *)
+            hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
+            ;;
+        esac
+        #
+        # End MAJOR HACK
+        #
+        #######################################################################
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='${wl}-berok'
+	# This is a bit strange, but is similar to how AIX traditionally builds
+	# it's shared libraries.
+	archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
+      fi
+    fi
+    ;;
+
+  amigaos*)
+    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+    # see comment about different semantics on the GNU ld section
+    ld_shlibs=no
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    # hardcode_libdir_flag_spec is actually meaningless, as there is
+    # no search path for DLLs.
+    hardcode_libdir_flag_spec=' '
+    allow_undefined_flag=unsupported
+    # Tell ltmain to make .lib files, not .a files.
+    libext=lib
+    # FIXME: Setting linknames here is a bad hack.
+    archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+    # The linker will automatically build a .lib file if we build a DLL.
+    old_archive_from_new_cmds='true'
+    # FIXME: Should let the user specify the lib program.
+    old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+    fix_srcfile_path='`cygpath -w "$srcfile"`'
+    ;;
+
+  darwin* | rhapsody*)
+    case "$host_os" in
+    rhapsody* | darwin1.[[012]])
+      allow_undefined_flag='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      allow_undefined_flag='-flat_namespace -undefined suppress'
+      ;;
+    esac
+    # FIXME: Relying on posixy $() will cause problems for
+    #        cross-compilation, but unfortunately the echo tests do not
+    #        yet detect zsh echo's removal of \ escapes.
+    archive_cmds='$nonopt $(test "x$module" = xyes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring'
+    # We need to add '_' to the symbols in $export_symbols first
+    #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    whole_archive_flag_spec='-all_load $convenience'
+    ;;
+
+  freebsd1*)
+    ld_shlibs=no
+    ;;
+
+  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+  # support.  Future versions do this automatically, but an explicit c++rt0.o
+  # does not break anything, and helps significantly (at the cost of a little
+  # extra space).
+  freebsd2.2*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+  freebsd2*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_minus_L=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+  freebsd*)
+    archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  hpux9* | hpux10* | hpux11*)
+    case $host_os in
+    hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
+    *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
+    esac
+    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+    hardcode_libdir_separator=:
+    hardcode_direct=yes
+    hardcode_minus_L=yes # Not in the search PATH, but as the default
+			 # location of the library.
+    export_dynamic_flag_spec='${wl}-E'
+    ;;
+
+  irix5* | irix6*)
+    if test "$GCC" = yes; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+    else
+      archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    link_all_deplibs=yes
+    ;;
+
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+    else
+      archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+    fi
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  newsos6)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    hardcode_shlibpath_var=no
+    ;;
+
+  openbsd*)
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+    else
+      case "$host_os" in
+      openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_libdir_flag_spec='-R$libdir'
+        ;;
+      *)
+        archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+        ;;
+      esac
+    fi
+    ;;
+
+  os2*)
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+    allow_undefined_flag=unsupported
+    archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+    old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+    ;;
+
+  osf3*)
+    if test "$GCC" = yes; then
+      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+    else
+      allow_undefined_flag=' -expect_unresolved \*'
+      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    ;;
+
+  osf4* | osf5*)	# as osf3* with the addition of -msym flag
+    if test "$GCC" = yes; then
+      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    else
+      allow_undefined_flag=' -expect_unresolved \*'
+      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+      $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+      #Both c and cxx compiler support -rpath directly
+      hardcode_libdir_flag_spec='-rpath $libdir'
+    fi
+    hardcode_libdir_separator=:
+    ;;
+
+  sco3.2v5*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_shlibpath_var=no
+    runpath_var=LD_RUN_PATH
+    hardcode_runpath_var=yes
+    export_dynamic_flag_spec='${wl}-Bexport'
+    ;;
+
+  solaris*)
+    # gcc --version < 3.0 without binutils cannot create self contained
+    # shared libraries reliably, requiring libgcc.a to resolve some of
+    # the object symbols generated in some cases.  Libraries that use
+    # assert need libgcc.a to resolve __eprintf, for example.  Linking
+    # a copy of libgcc.a into every shared library to guarantee resolving
+    # such symbols causes other problems:  According to Tim Van Holder
+    # <tim.van.holder at pandora.be>, C++ libraries end up with a separate
+    # (to the application) exception stack for one thing.
+    no_undefined_flag=' -z defs'
+    if test "$GCC" = yes; then
+      case `$CC --version 2>/dev/null` in
+      [[12]].*)
+	cat <<EOF 1>&2
+
+*** Warning: Releases of GCC earlier than version 3.0 cannot reliably
+*** create self contained shared libraries on Solaris systems, without
+*** introducing a dependency on libgcc.a.  Therefore, libtool is disabling
+*** -no-undefined support, which will at least allow you to build shared
+*** libraries.  However, you may find that when you link such libraries
+*** into an application without using GCC, you have to manually add
+*** \`gcc --print-libgcc-file-name\` to the link command.  We urge you to
+*** upgrade to a newer version of GCC.  Another option is to rebuild your
+*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer.
+
+EOF
+        no_undefined_flag=
+	;;
+      esac
+    fi
+    # $CC -shared without GNU ld will not create a library from C++
+    # object files and a static libstdc++, better avoid it by now
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_shlibpath_var=no
+    case $host_os in
+    solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+    *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+      whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+    esac
+    link_all_deplibs=yes
+    ;;
+
+  sunos4*)
+    if test "x$host_vendor" = xsequent; then
+      # Use $CC to link under sequent, because it throws in some extra .o
+      # files that make .init and .fini sections work.
+      archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+    else
+      archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+    fi
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_direct=yes
+    hardcode_minus_L=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4)
+    if test "x$host_vendor" = xsno; then
+      archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes # is this really true???
+    else
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+    fi
+    runpath_var='LD_RUN_PATH'
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4.3*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_shlibpath_var=no
+    export_dynamic_flag_spec='-Bexport'
+    ;;
+
+  sysv5*)
+    no_undefined_flag=' -z text'
+    # $CC -shared without GNU ld will not create a library from C++
+    # object files and a static libstdc++, better avoid it by now
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+    hardcode_libdir_flag_spec=
+    hardcode_shlibpath_var=no
+    runpath_var='LD_RUN_PATH'
+    ;;
+
+  uts4*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_shlibpath_var=no
+    ;;
+
+  dgux*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4*MP*)
+    if test -d /usr/nec; then
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ld_shlibs=yes
+    fi
+    ;;
+
+  sysv4.2uw2*)
+    archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_minus_L=no
+    hardcode_shlibpath_var=no
+    hardcode_runpath_var=yes
+    runpath_var=LD_RUN_PATH
+    ;;
+
+  sysv5uw7* | unixware7*)
+    no_undefined_flag='${wl}-z ${wl}text'
+    if test "$GCC" = yes; then
+      archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+    else
+      archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+    fi
+    runpath_var='LD_RUN_PATH'
+    hardcode_shlibpath_var=no
+    ;;
+
+  *)
+    ld_shlibs=no
+    ;;
+  esac
+fi
+AC_MSG_RESULT([$ld_shlibs])
+test "$ld_shlibs" = no && can_build_shared=no
+
+# Check hardcoding attributes.
+AC_MSG_CHECKING([how to hardcode library paths into programs])
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+   test -n "$runpath_var"; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$hardcode_shlibpath_var" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+AC_MSG_RESULT([$hardcode_action])
+
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+  AC_MSG_RESULT([no])
+fi
+
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+# PORTME Fill in your ld.so characteristics
+AC_MSG_CHECKING([dynamic linker characteristics])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}.so$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+	if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	     echo ' yes '
+	     echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	  :
+	else
+	  can_build_shared=no
+	fi
+	;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can
+    # not hardcode correct soname into executable. Probably we can
+    # add versioning support to collect2, so additional links can
+    # be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}.so$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}.so'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  export_dynamic_flag_spec=-rdynamic
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  need_version=no
+  need_lib_prefix=no
+  case $GCC,$host_os in
+  yes,cygwin*)
+    library_names_spec='$libname.dll.a'
+    soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll'
+    postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog .libs/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    ;;
+  yes,mingw*)
+    library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll'
+    sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
+    ;;
+  yes,pw32*)
+    library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
+    ;;
+  *)
+    library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  # FIXME: Relying on posixy $() will cause problems for
+  #        cross-compilation, but unfortunately the echo tests do not
+  #        yet detect zsh echo's removal of \ escapes.
+  library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
+  soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  *)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  dynamic_linker="$host_os dld.sl"
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  shlibpath_var=SHLIB_PATH
+  shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+  library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
+  soname_spec='${libname}${release}.sl$major'
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6*)
+  version_type=irix
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}.so$major'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
+  case $host_os in
+  irix5*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
+    soname_spec='${libname}${release}.so$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case "$host_os" in
+    openbsd2.[[89]] | openbsd2.[[89]].*)
+      shlibpath_overrides_runpath=no
+      ;;
+    *)
+      shlibpath_overrides_runpath=yes
+      ;;
+    esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+os2*)
+  libname_spec='$name'
+  need_lib_prefix=no
+  library_names_spec='$libname.dll $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_version=no
+  soname_spec='${libname}${release}.so'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}.so$major'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
+    soname_spec='$libname.so.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+# Report the final consequences.
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+if test "$hardcode_action" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+AC_LIBTOOL_DLOPEN_SELF
+
+if test "$enable_shared" = yes && test "$GCC" = yes; then
+  case $archive_cmds in
+  *'~'*)
+    # FIXME: we may have to deal with multi-command sequences.
+    ;;
+  '$CC '*)
+    # Test whether the compiler implicitly links with -lc since on some
+    # systems, -lgcc has to come before -lc. If gcc already passes -lc
+    # to ld, don't add -lc before -lgcc.
+    AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+    AC_CACHE_VAL([lt_cv_archive_cmds_need_lc],
+    [$rm conftest*
+    echo 'static int dummy;' > conftest.$ac_ext
+
+    if AC_TRY_EVAL(ac_compile); then
+      soname=conftest
+      lib=conftest
+      libobjs=conftest.$ac_objext
+      deplibs=
+      wl=$lt_cv_prog_cc_wl
+      compiler_flags=-v
+      linker_flags=-v
+      verstring=
+      output_objdir=.
+      libname=conftest
+      save_allow_undefined_flag=$allow_undefined_flag
+      allow_undefined_flag=
+      if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+      then
+	lt_cv_archive_cmds_need_lc=no
+      else
+	lt_cv_archive_cmds_need_lc=yes
+      fi
+      allow_undefined_flag=$save_allow_undefined_flag
+    else
+      cat conftest.err 1>&5
+    fi])
+    AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc])
+    ;;
+  esac
+fi
+need_lc=${lt_cv_archive_cmds_need_lc-yes}
+
+# The second clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  :
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  test -f Makefile && make "$ltmain"
+fi
+
+if test -f "$ltmain"; then
+  trap "$rm \"${ofile}T\"; exit 1" 1 2 15
+  $rm -f "${ofile}T"
+
+  echo creating $ofile
+
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS \
+    AR AR_FLAGS CC LD LN_S NM SHELL \
+    reload_flag reload_cmds wl \
+    pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
+    thread_safe_flag_spec whole_archive_flag_spec libname_spec \
+    library_names_spec soname_spec \
+    RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
+    old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
+    postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
+    old_striplib striplib file_magic_cmd export_symbols_cmds \
+    deplibs_check_method allow_undefined_flag no_undefined_flag \
+    finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
+    global_symbol_to_c_name_address \
+    hardcode_libdir_flag_spec hardcode_libdir_separator  \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
+
+    case $var in
+    reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
+    extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  cat <<__EOF__ > "${ofile}T"
+#! $SHELL
+
+# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996-2000 Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="sed -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$need_lc
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# The default C compiler.
+CC=$lt_CC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_pic_flag
+pic_mode=$pic_mode
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_compiler_c_o
+
+# Can we write directly to a .lo ?
+compiler_o_lo=$lt_compiler_o_lo
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_link_static_flag
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "${ofile}T"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | os2*)
+    cat <<'EOF' >> "${ofile}T"
+      # This is a source program that is used to create dlls on Windows
+      # Don't remove nor modify the starting and closing comments
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# #  ifdef __CYGWIN32__
+# #    define __CYGWIN__ __CYGWIN32__
+# #  endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+#   __hDllInstance_base = hInst;
+#   return TRUE;
+# }
+# /* ltdll.c ends here */
+	# This is a source program that is used to create import libraries
+	# on Windows for dlls which lack them. Don't remove nor modify the
+	# starting and closing comments
+# /* impgen.c starts here */
+# /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
+#
+#  This file is part of GNU libtool.
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#  */
+#
+# #include <stdio.h>		/* for printf() */
+# #include <unistd.h>		/* for open(), lseek(), read() */
+# #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
+# #include <string.h>		/* for strdup() */
+#
+# /* O_BINARY isn't required (or even defined sometimes) under Unix */
+# #ifndef O_BINARY
+# #define O_BINARY 0
+# #endif
+#
+# static unsigned int
+# pe_get16 (fd, offset)
+#      int fd;
+#      int offset;
+# {
+#   unsigned char b[2];
+#   lseek (fd, offset, SEEK_SET);
+#   read (fd, b, 2);
+#   return b[0] + (b[1]<<8);
+# }
+#
+# static unsigned int
+# pe_get32 (fd, offset)
+#     int fd;
+#     int offset;
+# {
+#   unsigned char b[4];
+#   lseek (fd, offset, SEEK_SET);
+#   read (fd, b, 4);
+#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# static unsigned int
+# pe_as32 (ptr)
+#      void *ptr;
+# {
+#   unsigned char *b = ptr;
+#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# int
+# main (argc, argv)
+#     int argc;
+#     char *argv[];
+# {
+#     int dll;
+#     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
+#     unsigned long export_rva, export_size, nsections, secptr, expptr;
+#     unsigned long name_rvas, nexp;
+#     unsigned char *expdata, *erva;
+#     char *filename, *dll_name;
+#
+#     filename = argv[1];
+#
+#     dll = open(filename, O_RDONLY|O_BINARY);
+#     if (dll < 1)
+# 	return 1;
+#
+#     dll_name = filename;
+#
+#     for (i=0; filename[i]; i++)
+# 	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
+# 	    dll_name = filename + i +1;
+#
+#     pe_header_offset = pe_get32 (dll, 0x3c);
+#     opthdr_ofs = pe_header_offset + 4 + 20;
+#     num_entries = pe_get32 (dll, opthdr_ofs + 92);
+#
+#     if (num_entries < 1) /* no exports */
+# 	return 1;
+#
+#     export_rva = pe_get32 (dll, opthdr_ofs + 96);
+#     export_size = pe_get32 (dll, opthdr_ofs + 100);
+#     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
+#     secptr = (pe_header_offset + 4 + 20 +
+# 	      pe_get16 (dll, pe_header_offset + 4 + 16));
+#
+#     expptr = 0;
+#     for (i = 0; i < nsections; i++)
+#     {
+# 	char sname[8];
+# 	unsigned long secptr1 = secptr + 40 * i;
+# 	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
+# 	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
+# 	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
+# 	lseek(dll, secptr1, SEEK_SET);
+# 	read(dll, sname, 8);
+# 	if (vaddr <= export_rva && vaddr+vsize > export_rva)
+# 	{
+# 	    expptr = fptr + (export_rva - vaddr);
+# 	    if (export_rva + export_size > vaddr + vsize)
+# 		export_size = vsize - (export_rva - vaddr);
+# 	    break;
+# 	}
+#     }
+#
+#     expdata = (unsigned char*)malloc(export_size);
+#     lseek (dll, expptr, SEEK_SET);
+#     read (dll, expdata, export_size);
+#     erva = expdata - export_rva;
+#
+#     nexp = pe_as32 (expdata+24);
+#     name_rvas = pe_as32 (expdata+32);
+#
+#     printf ("EXPORTS\n");
+#     for (i = 0; i<nexp; i++)
+#     {
+# 	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
+# 	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
+#     }
+#
+#     return 0;
+# }
+# /* impgen.c ends here */
+
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
+
+  mv -f "${ofile}T" "$ofile" || \
+    (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
+  chmod +x "$ofile"
+fi
+
+])# _LT_AC_LTCONFIG_HACK
+
+# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
+
+# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
+
+# AC_ENABLE_SHARED - implement the --enable-shared flag
+# Usage: AC_ENABLE_SHARED[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE(shared,
+changequote(<<, >>)dnl
+<<  --enable-shared[=PKGS]  build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case $enableval in
+yes) enable_shared=yes ;;
+no) enable_shared=no ;;
+*)
+  enable_shared=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_shared=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac],
+enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
+])
+
+# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)])
+
+# AC_ENABLE_STATIC - implement the --enable-static flag
+# Usage: AC_ENABLE_STATIC[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE(static,
+changequote(<<, >>)dnl
+<<  --enable-static[=PKGS]  build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case $enableval in
+yes) enable_static=yes ;;
+no) enable_static=no ;;
+*)
+  enable_static=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_static=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac],
+enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
+])
+
+# AC_DISABLE_STATIC - set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)])
+
+
+# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
+# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE(fast-install,
+changequote(<<, >>)dnl
+<<  --enable-fast-install[=PKGS]  optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case $enableval in
+yes) enable_fast_install=yes ;;
+no) enable_fast_install=no ;;
+*)
+  enable_fast_install=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_fast_install=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac],
+enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
+])
+
+# AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)])
+
+# AC_LIBTOOL_PICMODE - implement the --with-pic flag
+# Usage: AC_LIBTOOL_PICMODE[(MODE)]
+#   Where MODE is either `yes' or `no'.  If omitted, it defaults to
+#   `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)])
+
+
+# AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+  /*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+  ?:/*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+  ;;
+  *)
+  ac_save_MAGIC_CMD="$MAGIC_CMD"
+  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="ifelse([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    egrep "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  MAGIC_CMD="$ac_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+])
+
+
+# AC_PATH_MAGIC - find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl
+AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])
+
+
+# AC_PROG_LD - find the path to the GNU or non-GNU linker
+AC_DEFUN([AC_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | [[A-Za-z]]:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+	test "$with_gnu_ld" != no && break
+      else
+	test "$with_gnu_ld" != yes && break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_PROG_LD_GNU
+])
+
+# AC_PROG_LD_GNU -
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+  lt_cv_prog_gnu_ld=yes
+else
+  lt_cv_prog_gnu_ld=no
+fi])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])
+
+# AC_PROG_LD_RELOAD_FLAG - find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag,
+[lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+test -n "$reload_flag" && reload_flag=" $reload_flag"
+])
+
+# AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognise dependant libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given egrep regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi4*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin* | mingw* | pw32*)
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  case "$host_os" in
+  rhapsody* | darwin1.[[012]])
+    lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
+    ;;
+  *) # Darwin 1.3 on
+    lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+    ;;
+  esac
+  ;;
+
+freebsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20*|hpux11*)
+  lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libc.sl
+  ;;
+
+irix5* | irix6*)
+  case $host_os in
+  irix5*)
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+    ;;
+  *)
+    case $LD in
+    *-32|*"-32 ") libmagic=32-bit;;
+    *-n32|*"-n32 ") libmagic=N32;;
+    *-64|*"-64 ") libmagic=64-bit;;
+    *) libmagic=never-match;;
+    esac
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1"
+    ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+  case $host_cpu in
+  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | s390* )
+    lt_cv_deplibs_check_method=pass_all ;;
+  *)
+    # glibc up to 2.1.1 does not perform some relocations on ARM
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so\.[[0-9]]+\.[[0-9]]+$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+openbsd*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object'
+  else
+    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  # this will be overridden with pass_all, but let us keep it just in case
+  lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sco3.2v5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  lt_cv_file_magic_test_file=/lib/libc.so
+  ;;
+
+sysv5uw[[78]]* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  esac
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+])
+
+
+# AC_PROG_NM - find the path to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl
+AC_MSG_CHECKING([for BSD-compatible nm])
+AC_CACHE_VAL(lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    test -z "$ac_dir" && ac_dir=.
+    tmp_nm=$ac_dir/${ac_tool_prefix}nm
+    if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      # Tru64's nm complains that /dev/null is an invalid object file
+      if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
+	lt_cv_path_NM="$tmp_nm -B"
+	break
+      elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+	lt_cv_path_NM="$tmp_nm -p"
+	break
+      else
+	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	continue # so that we can try to find one that supports BSD flags
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+AC_MSG_RESULT([$NM])
+])
+
+# AC_CHECK_LIBM - check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32*)
+  # These system don't have libm
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, main, LIBM="-lm")
+  ;;
+esac
+])
+
+# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
+# the libltdl convenience library and INCLTDL to the include flags for
+# the libltdl header and adds --enable-ltdl-convenience to the
+# configure arguments.  Note that LIBLTDL and INCLTDL are not
+# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If DIR is not
+# provided, it is assumed to be `libltdl'.  LIBLTDL will be prefixed
+# with '${top_builddir}/' and INCLTDL will be prefixed with
+# '${top_srcdir}/' (note the single quotes!).  If your package is not
+# flat and you're not using automake, define top_builddir and
+# top_srcdir appropriately in the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  case $enable_ltdl_convenience in
+  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+  "") enable_ltdl_convenience=yes
+      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+  esac
+  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+  INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+])
+
+# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
+# the libltdl installable library and INCLTDL to the include flags for
+# the libltdl header and adds --enable-ltdl-install to the configure
+# arguments.  Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
+# AC_CONFIG_SUBDIRS called.  If DIR is not provided and an installed
+# libltdl is not found, it is assumed to be `libltdl'.  LIBLTDL will
+# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
+# with '${top_srcdir}/' (note the single quotes!).  If your package is
+# not flat and you're not using automake, define top_builddir and
+# top_srcdir appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  AC_CHECK_LIB(ltdl, main,
+  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+  [if test x"$enable_ltdl_install" = xno; then
+     AC_MSG_WARN([libltdl not installed, but installation disabled])
+   else
+     enable_ltdl_install=yes
+   fi
+  ])
+  if test x"$enable_ltdl_install" = x"yes"; then
+    ac_configure_args="$ac_configure_args --enable-ltdl-install"
+    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+    INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+  else
+    ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+    LIBLTDL="-lltdl"
+    INCLTDL=
+  fi
+])
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+

Added: packages/hdf5/branches/upstream/current/c++/config/BlankForm
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/BlankForm	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/BlankForm	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,139 @@
+#							-*- shell-script -*-
+
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C++ Compiler
+# -----------------------
+#
+# The user should be able to specify the compiler by setting the CXX
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CXX is unset then this script may
+# set it.  If CXX is unset by time this script completes then configure 
+# will try `g++' and `CC' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CXX_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test -z "$CXX"; then
+    CXX="/some/default/compiler/named/foo -ansi"
+    CXX_BASENAME=foo
+fi
+
+
+# C++ Compiler and Preprocessor Flags
+# -----------------------------------
+#
+# Flags that end with `_CXXFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CXXFLAGS	Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CXXFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CXXFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CXXFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CXX_BASENAME which is the base name of the
+# first word in $CXX (note that the value of CXX may have changed
+# above).
+
+case $CXX_BASENAME in
+    g++)
+	CXXFLAGS="$CXXFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CXXFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CXXFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CXXFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CXXFLAGS="$CXXFLAGS"
+	DEBUG_CXXFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CXXFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CXXFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}

Added: packages/hdf5/branches/upstream/current/c++/config/commence.in
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/commence.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/commence.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,181 @@
+#							-*- makefile -*-
+
+# 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.
+
+##-----------------------------------------------------------------------------
+## The following section of this makefile comes from the
+## `./config/commence' file which was generated with config.status
+## from `./config/commence.in'.
+##-----------------------------------------------------------------------------
+
+## Things that Make needs
+.SUFFIXES:
+.SUFFIXES: .cpp .o .lo
+ at SET_MAKE@
+
+## Directories to search
+ at SEARCH@
+
+## Programs
+SHELL=/bin/sh
+CXX=@CXX@
+## H5_CPPFLAGS, H5_CFLAGS, and H5_CXXFLAGS are used for extra flags
+## used to build HDF5 (flags that don't need to be included in h5cc,
+## for instance).
+CXXFLAGS=@CXXFLAGS@ @H5_CXXFLAGS@
+CFLAGS=@CFLAGS@ @H5_CFLAGS@
+CPPFLAGS=@CPPFLAGS@ @H5_CPPFLAGS@
+LDFLAGS=@LDFLAGS@
+ROOT=@ROOT@
+LIBS=@LIBS@
+AR=@AR@
+RANLIB=@RANLIB@
+PERL=@PERL@
+RM=rm -f
+CP=cp
+INSTALL=@INSTALL@
+INSTALL_PROGRAM=@INSTALL_PROGRAM@
+INSTALL_DATA=@INSTALL_DATA@
+TIME=time
+TRACE=:
+
+## Installation points
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+bindir=@bindir@
+libdir=@libdir@
+includedir=@includedir@
+docdir=@exec_prefix@/doc
+PUB_LIB=$(LIB)
+
+## Obtain default library; the current version of libtool does not fully
+## support C++ yet, and it does not know which default library to find.
+## With libtool 1.5, this support can be removed.  - BMR - Jan, 2002 
+DEFAULT_LIBS=@DEFAULT_LIBS@
+
+## Shared libraries
+LT_STATIC_EXEC=@LT_STATIC_EXEC@
+DYNAMIC_DIRS=@DYNAMIC_DIRS@
+LT=$(top_builddir)/libtool
+LT_COMPILE=$(LT) --mode=compile $(CXX)
+LT_LINK_LIB=$(LT) --mode=link $(CXX) -static -rpath $(libdir) $(DYNAMIC_DIRS)
+LT_LINK_EXE=$(LT) --mode=link $(CXX) -static $(LT_STATIC_EXEC) -dlopen self -rpath $(bindir) $(DYNAMIC_DIRS)
+LT_RUN=$(LT) --mode=execute
+LT_INSTALL_PROG=$(LT) --mode=install $(INSTALL_PROGRAM)
+LT_INSTALL_LIB=$(LT) --mode=install $(INSTALL_DATA)
+LT_UNINSTALL=$(LT) --mode=uninstall $(RM)
+
+## Optional variables. We must declare them here because Irix pmake
+## complains if it sees a reference to a variable which has never been
+## defined. The main makefile is free to redefine these to something else.
+DOCDIR=$(docdir)
+EXAMPLEDIR=$(docdir)/hdf5/examples/c++
+LIB=
+LIB_SRC=
+LIB_OBJ=
+PUB_HDR=
+PUB_PROGS=
+PUB_DOCS=
+PROGS=
+TEST_PROGS=
+TEST_FLAGS=
+TEST_SCRIPTS=
+AUX_LIB=
+EXAMPLE_PROGS=
+SUBDIRS=
+LIBHDF5=
+
+## The default is to build the library and/or programs.  We must build
+## them sequentially.
+all:
+	$(MAKE) lib
+	$(MAKE) progs
+	$(MAKE) tests
+
+## The following rules insure that the Makefile is up-to-date by rerunning
+## various autoconf components (although not all versions of make assume
+## that the makefile is implicitly a target).  We use time stamp files to
+## keep track of the most recent update of H5config.h.in and H5config.h
+## because autoheader and config.status don't update the modification time
+## if the contents don't change.
+## Invoke it by "gmake reconfigure".
+##
+## Graphically, the dependencies are:
+##
+##		         configure.in
+##                           |  |
+##         +-----------------+  +------------+
+##         |                                 |
+##      stamp1                           configure
+##   (H5config.h.in)                         |
+##       |  |                                |
+##       |  +---------------+    +-----------+
+##       |                  |    |
+##       |               config.status
+##       |                     |
+##       |  +------------------+
+##       |  |
+##      stamp2
+##    (H5config.h)                   Makefile.in et al
+##         |                                 |
+##         +------------------+  +-----------+
+##                            |  |
+##                          Makefile
+##
+## A side effect of updating stamp1 is to generate H5config.h.in and a
+## side effect of updating stamp2 is to generate H5config.h.  When using
+## a version of make that doesn't treat the makefile as the initial target
+## the user may want to occassionally type `make Makefile' in any source
+## directory.
+## The `Makefile' target has been renamed to `reconfigure' so that the
+## autoconf and make depend processes do not start up automatically.
+## One must do `make reconfigure' explicitedly to start the process.
+## (When srcdir is used and if more than one machines are running,
+## this automatic Makefile/autoconf can get things unstable.)
+##
+STAMP1=$(top_builddir)/config/stamp1
+STAMP2=$(top_builddir)/config/stamp2
+
+MAKEFILE_PARTS=$(srcdir)/Makefile.in		\
+	       $(top_srcdir)/config/commence.in	\
+	       $(top_srcdir)/config/conclude.in	\
+	       $(top_srcdir)/config/depend1.in	\
+	       $(top_srcdir)/config/depend2.in	\
+	       $(top_srcdir)/config/depend3.in	\
+	       $(top_srcdir)/config/depend4.in	\
+	       $(top_srcdir)/config/dependN.in
+
+$(STAMP1): $(top_srcdir)/configure.in
+	touch $(STAMP1)
+	-cd $(top_srcdir); autoheader
+
+$(STAMP2): $(STAMP1) $(top_builddir)/config.status
+	touch $(STAMP2)
+	-cd $(top_builddir); \
+	   CONFIG_FILES= CONFIG_HEADERS=src/H5config.h ./config.status
+
+$(top_srcdir)/configure: $(top_srcdir)/configure.in
+	-cd $(top_srcdir); autoconf
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(STAMP1)
+	-cd $(top_builddir); ./config.status --recheck
+
+# rerun the autoconf process if any configure components have changed. 
+reconfigure: $(MAKEFILE_PARTS) $(STAMP2)
+	-cd $(top_builddir); CONFIG_HEADERS= ./config.status
+
+##-----------------------------------------------------------------------------
+## The following section of this makefile comes from the middle of
+## `Makefile.in' from this directory.  It was generated by running
+## `config.status'.
+##-----------------------------------------------------------------------------

Added: packages/hdf5/branches/upstream/current/c++/config/conclude.in
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/conclude.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/conclude.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,214 @@
+#							-*- makefile -*-
+
+# 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.
+
+##-----------------------------------------------------------------------------
+## The following section of this makefile comes from the
+## `./config/conclude' file which was generated with config.status
+## from `./config/conclude.in'.
+##-----------------------------------------------------------------------------
+
+## This is the target for the library described in the main body of the
+## makefile.
+##
+lib: $(LIB)
+$(LIB) __no_library__: $(LIB_OBJ)
+	@$(LT_LINK_LIB) -o $@ $(CXXFLAGS) $(LIB_OBJ) $(LDFLAGS) $(LIBS)
+
+progs: $(LIB) $(PROGS)
+
+## Build a tags file in this directory.
+TAGS: $(LIB_SRC)
+	$(RM) $@
+	-etags $(LIB_SRC)
+
+## Runs each test in order, passing $(TEST_FLAGS) to the program.
+## Since tests are done in a shell loop, "make -i" does apply inside it.
+## Set HDF5_Make_Ignore to a non-blank string to ignore errors inside the loop.
+tests: $(TEST_PROGS) $(LIB)
+
+## Same as check-s since there is no Parallel C++ tests yet.
+check test _test: tests
+	@echo "===C++ tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="
+	$(MAKE) _check-s
+	@echo "===C++ tests in `echo ${PWD} | sed -e s:.*/::` ended `date`==="
+
+## serial tests
+check-s: tests
+	@echo "===Serial C++ tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="
+	$(MAKE) _check-s
+	@echo "===Serial C++ tests in `echo ${PWD} | sed -e s:.*/::` ended `date`==="
+
+## parallel tests
+check-p: tests
+	@echo "===Parallel C++ tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="
+	$(MAKE) _check-p
+	@echo "===Parallel C++ tests in `echo ${PWD} | sed -e s:.*/::` ended `date`==="
+
+## Actual execution of sequtial tests.
+_check-s: tests
+	@for test in $(TEST_PROGS) dummy; do                                  \
+	   if test $$test != dummy; then				      \
+	      echo "";							      \
+	      echo "=====================================";		      \
+	      echo "C++ API: Testing $$test $(TEST_FLAGS)";		      \
+	      echo "=====================================";		      \
+	      echo "";							      \
+	      srcdir="$(srcdir)"					      \
+		 $(TIME) ./$$test $(TEST_FLAGS) ||                            \
+		 (test $$HDF5_Make_Ignore && echo "*** Error ignored") ||     \
+		 break;							      \
+	   fi;								      \
+	done;								      \
+	test $$test = dummy || false
+	@for test in $(TEST_SCRIPTS) dummy; do                                \
+	   if test $$test != dummy; then				      \
+	      echo "";							      \
+	      echo "=====================================";		      \
+	      echo "C++ API: Testing $$test $(TEST_FLAGS)";		      \
+	      echo "=====================================";		      \
+	      echo "";							      \
+	      srcdir="$(srcdir)"					      \
+		 $(TIME) /bin/sh $$test $(TEST_FLAGS) ||	              \
+		 (test $$HDF5_Make_Ignore && echo "*** Error ignored") ||     \
+		 break;							      \
+	   fi;								      \
+	done;								      \
+	test $$test = dummy || false
+
+## Actual execution of parallel tests.
+## No parallel C++ tests yet.  Just a dummy target.
+_check-p: tests
+
+
+## Make installation directories directories if they don't exist.
+$(libdir):
+	$(top_srcdir)/bin/mkdirs $@
+
+$(includedir):
+	$(top_srcdir)/bin/mkdirs $@
+
+$(bindir):
+	$(top_srcdir)/bin/mkdirs $@
+
+$(EXAMPLEDIR):
+	$(top_srcdir)/bin/mkdirs $@
+
+## Install the library, the public header files, and public programs.
+install: $(PUB_LIB) $(PUB_HDR) $(PUB_PROGS) $(libdir) $(includedir) $(bindir)
+	@for f in X $(PUB_LIB); do					      \
+	   if test $$f != X; then					      \
+	      ($(LT_INSTALL_LIB) $$f $(libdir)/. || exit 1);		      \
+	   fi;								      \
+	done
+	@if test -f libhdf5_cpp.settings; then				      \
+	   (set -x; $(INSTALL_DATA) libhdf5_cpp.settings $(libdir)/. || exit 1);  \
+	fi
+	@for f in X $(PUB_HDR); do					      \
+	   if test $$f != X; then					      \
+	      if test -f $$f; then					      \
+		 (set -x; $(INSTALL_DATA) $$f $(includedir)/. || exit 1);     \
+	      else							      \
+	         (set -x; $(INSTALL_DATA) $(srcdir)/$$f $(includedir)/. ||    \
+		    exit 1);						      \
+	      fi;							      \
+	   fi;								      \
+	done
+	@for f in X $(PUB_PROGS); do					      \
+	   if test $$f != X; then					      \
+	     ($(LT_INSTALL_PROG) $$f $(bindir)/. || exit 1);		      \
+	   fi;							              \
+	done
+
+install-examples: $(EXAMPLE_PROGS) $(EXAMPLEDIR)
+	@for f in X $(EXAMPLE_PROGS); do				      \
+	  if test $$f != X; then					      \
+	    (set -x; $(INSTALL_DATA) $(srcdir)/$$f $(EXAMPLEDIR)/. || exit 1);\
+	  fi;								      \
+	done
+
+uninstall-examples:
+	@if test -n "$(EXAMPLE_PROGS)"; then 				      \
+	  set -x; cd $(EXAMPLEDIR) && $(RM) $(EXAMPLE_PROGS);		      \
+	fi
+
+## Removes those things that `make install' (would have) installed.
+uninstall:
+	@for f in libhdf5_cpp.settings $(LIB); do				      \
+            $(LT_UNINSTALL) $(libdir)/$$f;				      \
+	done
+	@if test -n "$(PUB_HDR)"; then   				      \
+	   set -x; cd $(includedir) && $(RM) $(PUB_HDR);		      \
+	fi
+	@for f in X $(PUB_PROGS); do					      \
+	    if test $$f != X; then					      \
+	        $(LT_UNINSTALL) $(bindir)/$$f;				      \
+	    fi;								      \
+	done
+
+## Removes temporary files without removing the final target files.  That is,
+## remove things like object files but not libraries or executables.
+##
+mostlyclean:
+	@if test -n "$(LIB_OBJ)"; then                                        \
+	    $(RM) $(LIB_OBJ) $(LIB_OBJ:.lo=.o);                               \
+	fi
+	@if test -n "$(TEST_OBJ)"; then                                       \
+	    $(RM) $(TEST_OBJ) $(TEST_OBJ:.lo=.o);                             \
+	fi
+	@if test -n "$(PROG_OBJ)" -o -n "$(MOSTLYCLEAN)"; then                \
+	    $(RM) $(PROG_OBJ) $(PROG_OBJ:.lo=.o) $(MOSTLYCLEAN);              \
+	fi
+
+## Like `mostlyclean' except it also removes the final targets: things like
+## libraries and executables.  This target doesn't remove any file that
+## is part of the HDF5 distribution.
+##
+clean: mostlyclean
+	@if test -n "$(LIB)" -o -n "$(TEST_PROGS)" -o -n "$(PROGS)" -o -n "$(CLEAN)"; then \
+	    $(RM) $(LIB) $(TEST_PROGS) $(PROGS) $(CLEAN);                     \
+	fi
+	-$(RM) -r .libs
+
+## Like `clean' except it also removes files that were created by running
+## configure.  If you've unpacked the source and built HDF5 without creating
+## any other files, then `make distclean' will leave only the files that were
+## in the distribution.
+##
+distclean: clean
+	-$(RM) .depend TAGS *~ core *.core *.bak *.old *.new $(DISTCLEAN)
+	@if test -f $(srcdir)/Makefile.in; then				      \
+	   (set -x; $(RM) Makefile);					      \
+	fi
+
+## Like `distclean' except it deletes all files that can be regenerated from
+## the makefile, including those generated from autoheader and autoconf.
+##
+maintainer-clean: distclean
+	-$(RM) *~ core core.* *.core *.bak *.contrib gmon.out
+
+## Implicit rules
+.cpp.o:
+	$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $<
+
+.cpp.lo:
+	@$(LT_COMPILE) $(CXXFLAGS) $(CPPFLAGS) -c $<
+
+##-----------------------------------------------------------------------------
+## The following section of this makefile contains dependencies between the
+## source files and the header files.
+##-----------------------------------------------------------------------------
+.PHONY: dep depend
+dep depend: $(srcdir)/Dependencies
+
+ at DEPEND@

Added: packages/hdf5/branches/upstream/current/c++/config/dec-osf5.x
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/dec-osf5.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/dec-osf5.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,41 @@
+# 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.
+
+
+if test -z "$CXX"; then
+    CXX=cxx
+    CXX_BASENAME=cxx
+fi
+
+
+case $CXX_BASENAME in
+    g++)
+	CXXFLAGS="$CXXFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CXXFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CXXFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CXXFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CXXFLAGS="$CXXFLAGS -tlocal -D__USE_STD_IOSTREAM "
+	DEBUG_CXXFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CXXFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CXXFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+


Property changes on: packages/hdf5/branches/upstream/current/c++/config/dec-osf5.x
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/c++/config/depend1.in
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/depend1.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/depend1.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,78 @@
+##                                                             -*- makefile -*-
+
+# 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.
+
+## We keep a list of dependencies in `.depend' for each of the source
+## files on which it depends.  When one of the source files is modified
+## we remove its record from .depend and regenerate its dependencies,
+## tacking them onto the end of .depend.  By including the .depend file
+## into the makefile, we're telling make that the makefile depends on
+## the dependency list in the .depend file.
+##
+## This is as fast as the `.d' method described in the GNU make manual
+## for automatic dependencies, but has the added advantage that all
+## dependencies are stored in one place.  The advantage over the
+## `makedepend' program is that only those files that are out of date
+## have dependency information rebuilt, and the Makefile is not
+## modified.
+##
+## This is also where tracing information is updated.  The $(TRACE)
+## program is run on each source file to make sure that the H5TRACE()
+## macros are up to date.  If they are then the file is not modified,
+## otherwise the file is changed and a backup is saved by appending a
+## tilde to the file name.
+##
+$(srcdir)/Dependencies: .depend
+	@if test "$(srcdir)" != "."; then					\
+	  (									\
+	    echo '##'; 								\
+	    echo '## This file is machine generated on GNU systems.';		\
+	    echo '## Only temporary changes may be made here.';			\
+	    echo '##'; 								\
+	    echo '## Copyright by the Board of Trustees of the University of Illinois.'; \
+	    echo '## All rights reserved.'; 					\
+	    echo '##'; 								\
+	    echo '## This file is part of HDF5.  The full HDF5 copyright notice, including'; \
+	    echo '## terms governing use, modification, and redistribution, is contained in'; \
+	    echo '## the files COPYING and Copyright.html.  COPYING can be found at the root'; \
+	    echo '## of the source code distribution tree; Copyright.html can be found at the'; \
+	    echo '## root level of an installed copy of the electronic HDF5 document set and'; \
+	    echo '## is linked from the top-level documents page.  It can also be found at'; \
+	    echo '## http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have'; \
+	    echo '## access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu.'; \
+	    echo;								\
+	  ) >$@;								\
+	  $(PERL) -p $(top_srcdir)/bin/distdep .depend >>$@;			\
+	else									\
+	  echo 'Dependencies cannot be built when $$srcdir == $$builddir';	\
+	fi
+
+.depend: $(LIB_SRC) $(TEST_SRC) $(PROG_SRC)
+	@touch .depend
+	@for dep in $? dummy; do                                              \
+      if test $$dep != "dummy" -a -n "$(PERL)"; then                      \
+        case "$$dep" in                                                   \
+          *.c)                                                            \
+            echo Building dependencies for $$dep;                         \
+            obj=`basename $$dep .c`.lo;                                   \
+            sed '\%^'"$$obj"':%,\%[^\\]$$%d' <$@ >$@- && mv $@- $@;       \
+            $(TRACE) $$dep;                                               \
+            $(CC) -MM -MG $(CPPFLAGS) $$dep 2>/dev/null >>$@;             \
+            $(PERL) -w $(top_srcdir)/bin/dependencies --srcdir=$(srcdir) --top_srcdir=$(top_srcdir) --top_builddir=$(top_builddir) $@; \
+            ;;                                                            \
+        esac;                                                             \
+      fi;                                                                 \
+    done
+
+-include .depend
+

Added: packages/hdf5/branches/upstream/current/c++/config/depend2.in
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/depend2.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/depend2.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,23 @@
+##							       -*- makefile -*-
+
+# 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 platform doesn't support automatic dependencies because we're
+## not using GNU gcc.  GNU gcc is needed in order to generate the list
+## of header files included by a source file.
+
+## Since automatic dependencies are not being used, we attempt to include the
+## `.distdep' file from the source tree. This file was automatically generated 
+## on some system that satisfies the above requirements.
+
+-include $(srcdir)/Dependencies

Added: packages/hdf5/branches/upstream/current/c++/config/depend3.in
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/depend3.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/depend3.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,19 @@
+##							       -*- makefile -*-
+
+# 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.
+
+## Since automatic dependencies are not being used, we attempt to include the
+## `.distdep' file from the source tree. This file was automatically generated 
+## on some system that satisfies the above requirements.
+
+.include <$(srcdir)/Dependencies>

Added: packages/hdf5/branches/upstream/current/c++/config/depend4.in
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/depend4.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/depend4.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,19 @@
+##							       -*- makefile -*-
+
+# 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.
+
+## Since automatic dependencies are not being used, we attempt to include the
+## `.distdep' file from the source tree. This file was automatically generated 
+## on some system that satisfies the above requirements.
+
+include $(srcdir)/Dependencies

Added: packages/hdf5/branches/upstream/current/c++/config/dependN.in
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/dependN.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/dependN.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,16 @@
+##							       -*- makefile -*-
+
+# 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.
+
+## Automatic dependencies are not being used and we cannot include other
+## files.

Added: packages/hdf5/branches/upstream/current/c++/config/freebsd
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/freebsd	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/freebsd	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,33 @@
+#							-*- shell-script -*-
+
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+# Special setup to use pthread support if enable-threadsafe is on.
+# Works with static executable only.
+if test "X-" != "X-$enable_threadsafe"; then
+    CXXFLAGS="$CXXFLAGS -D_THREAD_SAFE" 
+    LDFLAGS="$LDFLAGS -pthread"
+#    enable_static_exec=yes
+fi

Added: packages/hdf5/branches/upstream/current/c++/config/hpux11.00
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/hpux11.00	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/hpux11.00	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,48 @@
+#                                                       -*- shell-script -*-
+
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+if test -z "$CXX"; then
+    CXX=aCC
+    CXX_BASENAME=aCC
+fi
+
+case "$CXX" in
+  aCC)
+    # +Z for PIC, +A for using archived libraries
+    # _INCLUDE_LONGLONG for using `long long' for hsize_t and hssize_t
+    CXXFLAGS="$CXXFLAGS +Z +A -D_INCLUDE_LONGLONG"
+    CFLAGS="$CFLAGS -g +O2"
+    DEBUG_CXXFLAGS=-g
+    DEBUG_CPPFLAGS=
+    PROD_CXXFLAGS="-O -s"
+    PROD_CPPFLAGS=
+    PROFILE_CPPFLAGS=
+    ;;
+  *)
+    CXXFLAGS="$CXXFLAGS -D_INCLUDE_LONGLONG"
+    CFLAGS="$CFLAGS"
+    DEBUG_CXXFLAGS=-g
+    DEBUG_CPPFLAGS=
+    PROD_CXXFLAGS=
+    PROD_CPPFLAGS=
+    PROFILE_CPPFLAGS=
+    ;;
+esac

Added: packages/hdf5/branches/upstream/current/c++/config/hpux11.23
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/hpux11.23	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/hpux11.23	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,48 @@
+#                                                       -*- shell-script -*-
+
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+if test -z "$CXX"; then
+    CXX=aCC
+    CXX_BASENAME=aCC
+fi
+
+case "$CXX" in
+  aCC)
+    # +Z for PIC
+    # _INCLUDE_LONGLONG for using `long long' for hsize_t and hssize_t
+    CXXFLAGS="$CXXFLAGS  +Z -D_INCLUDE_LONGLONG"
+    CFLAGS="$CFLAGS -g +O2"
+    DEBUG_CXXFLAGS=-g
+    DEBUG_CPPFLAGS=
+    PROD_CXXFLAGS="-O -s"
+    PROD_CPPFLAGS=
+    PROFILE_CPPFLAGS=
+    ;;
+  *)
+    CXXFLAGS="$CXXFLAGS -D_INCLUDE_LONGLONG"
+    CFLAGS="$CFLAGS"
+    DEBUG_CXXFLAGS=-g
+    DEBUG_CPPFLAGS=
+    PROD_CXXFLAGS=
+    PROD_CPPFLAGS=
+    PROFILE_CPPFLAGS=
+    ;;
+esac

Added: packages/hdf5/branches/upstream/current/c++/config/ia64-linux-gnu
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/ia64-linux-gnu	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/ia64-linux-gnu	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,44 @@
+#                                                       -*- shell-script -*-
+
+# 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.
+
+
+if test -z "$CXX"; then
+    CXX=icpc
+    CXX_BASENAME=icpc
+fi
+
+
+case $CXX_BASENAME in
+    g++)
+	CXXFLAGS="$CXXFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CXXFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CXXFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CXXFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	# Default to C99 standard.
+	CXXFLAGS="${CXXFLAGS:--std=c99}"
+	DEBUG_CXXFLAGS="-g -w2 -Wall"
+	DEBUG_CPPFLAGS=
+	PROD_CXXFLAGS=""     #Default optimization O2 is used
+	PROD_CPPFLAGS=
+	PROFILE_CXXFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+


Property changes on: packages/hdf5/branches/upstream/current/c++/config/ia64-linux-gnu
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/c++/config/irix6.x
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/irix6.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/irix6.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,47 @@
+#							-*- shell-script -*-
+
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details
+
+# The default compiler is `MIPSpro CC'
+if test -z "$CXX"; then
+    CXX=CC
+    CXX_BASENAME=CC
+fi
+
+# Try native compiler flags
+if test -z "$cxx_flags_set"; then
+# -LANG:std required for std use; -ptused causes templates used to be
+# instantiated
+    CPPFLAGS="$CPPFLAGS -LANG:std -ptused"
+
+# libCio is a default library, since libtool before 1.5 doesn't fully 
+# support C++ yet, default libraries must be explicitly specified.
+# A new macro is used for this temporary and specific task so it 
+# won't polute the existing configuration 
+    DEFAULT_LIBS="-lCio"
+
+    DEBUG_CXXFLAGS=-g
+    DEBUG_CPPFLAGS=
+    PROD_CXXFLAGS="-O -s"
+    PROD_CPPFLAGS=
+    PROFILE_CXXFLAGS=-xpg
+    PROFILE_CPPFLAGS=
+    cxx_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/c++/config/linux-gnu
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/linux-gnu	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/linux-gnu	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#							-*- shell-script -*-
+
+# 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 is the same as linux-gnulibc1
+
+. $srcdir/config/linux-gnulibc1

Added: packages/hdf5/branches/upstream/current/c++/config/linux-gnulibc1
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/linux-gnulibc1	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/linux-gnulibc1	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,29 @@
+#							-*- shell-script -*-
+
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# The default compiler is `g++'.
+if test -z "$CXX"; then
+    CXX=g++
+    CXX_BASENAME=g++
+fi
+
+# Figure out compiler flags
+#. $srcdir/config/gnu-flags

Added: packages/hdf5/branches/upstream/current/c++/config/linux-gnulibc2
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/linux-gnulibc2	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/linux-gnulibc2	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,23 @@
+#							-*- shell-script -*-
+
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Same as with gnulibc1 for now
+. $srcdir/config/linux-gnulibc1

Added: packages/hdf5/branches/upstream/current/c++/config/nv1-cray
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/nv1-cray	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/nv1-cray	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,140 @@
+#                                                      -*- shell-script -*-
+
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C++ Compiler
+# -----------------------
+#
+# The user should be able to specify the compiler by setting the CXX
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CXX is unset then this script may
+# set it.  If CXX is unset by time this script completes then configure 
+# will try `g++' and `CC' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CXX_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test -z "$CXX"; then
+    CXX="CC"
+    CXX_BASENAME=CC
+fi
+
+
+# C++ Compiler and Preprocessor Flags
+# -----------------------------------
+#
+# Flags that end with `_CXXFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CXXFLAGS       Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS       library suitable for use with debugging
+#                      tools. Usually this list will exclude
+#                      optimization switches (like `-O') and include
+#                      switches that turn on symbolic debugging
+#                      support (like `-g').
+#
+# PROD_CXXFLAGS                Flags to pass to the compiler to create a
+# PROD_CPPFLAGS                production version of the library.  These
+#                      usualy exclude symbolic debugging switches
+#                      (like `-g') and include optimization switches
+#                      (like `-O').
+#
+# PROFILE_CXXFLAGS     Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS     library suitable for performance testing (like 
+#                      `-pg').  This may or may not include debugging 
+#                      or production flags.
+#                      
+# CXXFLAGS             Flags can be added to this variable which
+#                      might already be partially initialized.  These 
+#                      flags will always be passed to the compiler
+#                      and should include switches to turn on full
+#                      warnings.  HDF5 attempts to be ANSI and Posix
+#                      compliant and employ good programming
+#                      practices resulting in few if any
+#                      warnings.
+#
+#                      Warning flags do not have to be added to CFLAGS
+#                      variable if the compiler is the GNU gcc
+#                      compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#                      The CFLAGS should contains *something* or else 
+#                      configure will probably add `-g'.  For most
+#                      systems this isn't a problem but some systems
+#                      will disable optimizations in favor of the
+#                      `-g'.
+#                      
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CXX_BASENAME which is the base name of the
+# first word in $CXX (note that the value of CXX may have changed
+# above).
+
+case $CXX_BASENAME in
+    g++)
+       CXXFLAGS="$CXXFLAGS -Wsign-compare" #Only works for some versions
+       DEBUG_CXXFLAGS="-g -fverbose-asm"
+       DEBUG_CPPFLAGS=
+       PROD_CXXFLAGS="-O3 -fomit-frame-pointer"
+       PROD_CPPFLAGS=
+       PROFILE_CXXFLAGS="-pg"
+       PROFILE_CPPFLAGS=
+       ;;
+
+    *)
+       CXXFLAGS="$CXXFLAGS" 
+       DEBUG_CXXFLAGS="-g"
+       DEBUG_CPPFLAGS=
+       PROD_CXXFLAGS=""
+       PROD_CPPFLAGS=
+       PROFILE_CXXFLAGS=
+       PROFILE_CPPFLAGS=
+       ;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+

Added: packages/hdf5/branches/upstream/current/c++/config/powerpc-ibm-aix
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/powerpc-ibm-aix	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/powerpc-ibm-aix	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,27 @@
+#							-*- shell-script -*-
+
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Use AIX supplied C++ compiler by default.
+CXX=${CXX=xlC}
+
+# Added -qweaksymbol to suppress linker messages warning of duplicate 
+# symbols; these warnings are harmless.
+CXXFLAGS="$CXXFLAGS -qweaksymbol"

Added: packages/hdf5/branches/upstream/current/c++/config/rs6000-ibm-aix4.x
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/rs6000-ibm-aix4.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/rs6000-ibm-aix4.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,24 @@
+#							-*- shell-script -*-
+
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Cross compiling defaults
+ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}

Added: packages/hdf5/branches/upstream/current/c++/config/solaris2.x
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/solaris2.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/solaris2.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,57 @@
+#							-*- shell-script -*-
+
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details
+
+# The default compiler is `sunpro cc'
+if test -z "$CXX"; then
+    CXX=CC
+    CXX_BASENAME=CC
+fi
+
+# Try gcc compiler flags
+#. $srcdir/config/gnu-flags
+
+cxx_version="`$CXX -V 2>&1 |grep 'WorkShop' |\
+                sed 's/.*WorkShop.*C++ \([0-9\.]*\).*/\1/'`"
+
+cxx_vers_major=`echo $cxx_version | cut -f1 -d.`
+cxx_vers_minor=`echo $cxx_version | cut -f2 -d.`
+cxx_vers_patch=`echo $cxx_version | cut -f3 -d.`
+
+# Specify the "-features=tmplife" if the compiler can handle this...
+if test -n "$cxx_version"; then
+  if test $cxx_vers_major -ge 5 -a $cxx_vers_minor -ge 3 -o $cxx_vers_major -gt 5; then
+    CXXFLAGS="$CXXFLAGS -features=tmplife"
+  fi
+fi
+
+# Try solaris native compiler flags
+if test -z "$cxx_flags_set"; then
+    CXXFLAGS="$CXXFLAGS -instances=static"
+    CPPFLAGS="$CPPFLAGS -LANG:std"
+    LIBS="$LIBS -lsocket"
+    DEBUG_CXXFLAGS=-g
+    DEBUG_CPPFLAGS=
+    PROD_CXXFLAGS="-O -s"
+    PROD_CPPFLAGS=
+    PROFILE_CXXFLAGS=-xpg
+    PROFILE_CPPFLAGS=
+    cxx_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/c++/config/sv1-cray
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/sv1-cray	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/sv1-cray	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,139 @@
+#							-*- shell-script -*-
+
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C++ Compiler
+# -----------------------
+#
+# The user should be able to specify the compiler by setting the CXX
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CXX is unset then this script may
+# set it.  If CXX is unset by time this script completes then configure 
+# will try `g++' and `CC' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CXX_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test -z "$CXX"; then
+    CXX="CC"
+    CXX_BASENAME=CC
+fi
+
+
+# C++ Compiler and Preprocessor Flags
+# -----------------------------------
+#
+# Flags that end with `_CXXFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CXXFLAGS	Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CXXFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CXXFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CXXFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CXX_BASENAME which is the base name of the
+# first word in $CXX (note that the value of CXX may have changed
+# above).
+
+case $CXX_BASENAME in
+    g++)
+	CXXFLAGS="$CXXFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CXXFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CXXFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CXXFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CXXFLAGS="$CXXFLAGS -h instantiate=used"
+	DEBUG_CXXFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CXXFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CXXFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}

Added: packages/hdf5/branches/upstream/current/c++/config/unicos10.0.X
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/unicos10.0.X	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/unicos10.0.X	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,139 @@
+#							-*- shell-script -*-
+
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C++ Compiler
+# -----------------------
+#
+# The user should be able to specify the compiler by setting the CXX
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CXX is unset then this script may
+# set it.  If CXX is unset by time this script completes then configure 
+# will try `g++' and `CC' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CXX_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test -z "$CXX"; then
+    CXX="CC"
+    CXX_BASENAME=CC
+fi
+
+
+# C++ Compiler and Preprocessor Flags
+# -----------------------------------
+#
+# Flags that end with `_CXXFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CXXFLAGS	Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CXXFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CXXFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CXXFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CXX_BASENAME which is the base name of the
+# first word in $CXX (note that the value of CXX may have changed
+# above).
+
+case $CXX_BASENAME in
+    g++)
+	CXXFLAGS="$CXXFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CXXFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CXXFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CXXFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CXXFLAGS="$CXXFLAGS -h instantiate=used"
+	DEBUG_CXXFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CXXFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CXXFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}

Added: packages/hdf5/branches/upstream/current/c++/config/unicosmk2.0.6.X
===================================================================
--- packages/hdf5/branches/upstream/current/c++/config/unicosmk2.0.6.X	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/config/unicosmk2.0.6.X	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,139 @@
+#							-*- shell-script -*-
+
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C++ Compiler
+# -----------------------
+#
+# The user should be able to specify the compiler by setting the CXX
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CXX is unset then this script may
+# set it.  If CXX is unset by time this script completes then configure 
+# will try `g++' and `CC' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CXX_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test -z "$CXX"; then
+    CXX="CC"
+    CXX_BASENAME=CC
+fi
+
+
+# C++ Compiler and Preprocessor Flags
+# -----------------------------------
+#
+# Flags that end with `_CXXFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CXXFLAGS	Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CXXFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CXXFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CXXFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CXX_BASENAME which is the base name of the
+# first word in $CXX (note that the value of CXX may have changed
+# above).
+
+case $CXX_BASENAME in
+    g++)
+	CXXFLAGS="$CXXFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CXXFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CXXFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CXXFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CXXFLAGS="$CXXFLAGS -h instantiate=used"
+	DEBUG_CXXFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CXXFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CXXFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}

Added: packages/hdf5/branches/upstream/current/c++/configure
===================================================================
--- packages/hdf5/branches/upstream/current/c++/configure	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/configure	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,11635 @@
+#! /bin/sh
+# From c++/configure.in Id: configure.in.
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59 for HDF5 C++ 1.6.5.
+#
+# Report bugs to <hdfhelp at ncsa.uiuc.edu>.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Find the correct PATH separator.  Usually this is `:', but
+# DJGPP uses `;' like DOS.
+if test "X${PATH_SEPARATOR+set}" != Xset; then
+  UNAME=${UNAME-`uname 2>/dev/null`}
+  case X$UNAME in
+    *-DOS) lt_cv_sys_path_separator=';' ;;
+    *)     lt_cv_sys_path_separator=':' ;;
+  esac
+  PATH_SEPARATOR=$lt_cv_sys_path_separator
+fi
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "$0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='HDF5 C++'
+PACKAGE_TARNAME='hdf5-c--'
+PACKAGE_VERSION='1.6.5'
+PACKAGE_STRING='HDF5 C++ 1.6.5'
+PACKAGE_BUGREPORT='hdfhelp at ncsa.uiuc.edu'
+
+ac_unique_file="src/H5Library.cpp"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CPPFLAGS H5_CPPFLAGS H5_CFLAGS H5_CXXFLAGS ROOT DEFAULT_LIBS CXX CXXFLAGS LDFLAGS ac_ct_CXX EXEEXT OBJEXT CXXCPP SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CC CFLAGS ac_ct_CC LN_S ECHO RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CPP EGREP LIBTOOL PERL AR LT_STATIC_EXEC DYNAMIC_DIRS SEARCH SETX LIBOBJS LTLIBOBJS'
+ac_subst_files='DEPEND COMMENCE CONCLUDE'
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_option in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    eval "enable_$ac_feature=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_$ac_feature='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_$ac_package='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/-/_/g'`
+    eval "with_$ac_package=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    eval "$ac_envvar='$ac_optarg'"
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+	      localstatedir libdir includedir oldincludedir infodir mandir
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
+  else
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+  fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+   { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CXX_set=${CXX+set}
+ac_env_CXX_value=$CXX
+ac_cv_env_CXX_set=${CXX+set}
+ac_cv_env_CXX_value=$CXX
+ac_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_env_CXXFLAGS_value=$CXXFLAGS
+ac_cv_env_CXXFLAGS_set=${CXXFLAGS+set}
+ac_cv_env_CXXFLAGS_value=$CXXFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CXXCPP_set=${CXXCPP+set}
+ac_env_CXXCPP_value=$CXXCPP
+ac_cv_env_CXXCPP_set=${CXXCPP+set}
+ac_cv_env_CXXCPP_value=$CXXCPP
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# Report the --help message.
+#
+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 C++ 1.6.5 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+  cat <<_ACEOF
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+			  [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+			  [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+_ACEOF
+
+  cat <<\_ACEOF
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of HDF5 C++ 1.6.5:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-shared=PKGS  build shared libraries default=yes
+  --enable-static=PKGS  build static libraries default=yes
+  --enable-fast-install=PKGS  optimize for fast installation default=yes
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-production     Determines how to run the compiler.
+  --enable-static-exec    Build only statically linked executables
+                          [default=no]
+  --enable-linux-lfs      Enable support for large (64-bit) files on Linux.
+                          [default=check]
+  --enable-stream-vfd     Build the Stream Virtual File Driver [default=no]
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-pic              try to use only PIC/non-PIC objects default=use both
+  --with-zlib=DIR         Use zlib library for external deflate I/O filter
+                          [default=yes]
+  --with-szlib=DIR        Use szlib library for external szlib I/O filter
+                          [default=yes]
+
+Some influential environment variables:
+  CXX         C++ compiler command
+  CXXFLAGS    C++ compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  CXXCPP      C++ preprocessor
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  CPP         C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <hdfhelp at ncsa.uiuc.edu>.
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d $ac_dir || continue
+    ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+    cd $ac_dir
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_srcdir/configure; then
+      echo
+      $SHELL $ac_srcdir/configure  --help=recursive
+    elif test -f $ac_srcdir/configure.ac ||
+	   test -f $ac_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi
+    cd $ac_popdir
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\_ACEOF
+HDF5 C++ configure 1.6.5
+generated by GNU Autoconf 2.59
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<_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 C++ $as_me 1.6.5, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+      # Get rid of the leading space.
+      ac_sep=" "
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+}
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=$`echo $ac_var`
+      echo "$ac_var='"'"'$ac_val'"'"'"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=$`echo $ac_var`
+	echo "$ac_var='"'"'$ac_val'"'"'"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      sed "/^$/d" confdefs.h | sort
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core &&
+  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+     ' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . $cache_file;;
+      *)                      . ./$cache_file;;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+  eval ac_new_val="\$ac_env_${ac_var}_value"
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+	ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_aux_dir=
+for ac_dir in ../bin $srcdir/../bin; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f $ac_dir/shtool; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in ../bin $srcdir/../bin" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in ../bin $srcdir/../bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+  ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+  ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking shell variables initial values" >&5
+echo $ECHO_N "checking shell variables initial values... $ECHO_C" >&6
+set >&5
+echo "$as_me:$LINENO: result: done" >&5
+echo "${ECHO_T}done" >&6
+
+if test -x "/bin/pwd"; then
+   pwd=/bin/pwd
+else
+   pwd=pwd
+fi
+ ROOT=`$pwd`
+
+echo "$as_me:$LINENO: checking for cached host" >&5
+echo $ECHO_N "checking for cached host... $ECHO_C" >&6
+if test "${hdf5_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  hdf5_cv_host="none"
+fi
+echo "$as_me:$LINENO: result: $hdf5_cv_host" >&5
+echo "${ECHO_T}$hdf5_cv_host" >&6;
+if test "X$hdf5_cv_host" = "Xnone"; then
+   hdf5_cv_host=$host
+elif test "$hdf5_cv_host" != "$host"; then
+   echo "The config.cache file was generated on $hdf5_cv_host but"
+   echo "this is $host. Please remove that file and try again."
+   { { echo "$as_me:$LINENO: error: config.cache file is invalid" >&5
+echo "$as_me: error: config.cache file is invalid" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+case "$host_os" in
+  aix*)
+    host_os_novers=aix
+    ;;
+  freebsd*)
+    host_os_novers=freebsd
+    ;;
+  irix5.*)
+    host_os_novers=irix5.x
+    ;;
+  irix6.*)
+    host_os_novers=irix6.x
+    ;;
+  osf4.*)
+    host_os_novers=osf4.x
+    ;;
+  osf5.*)
+    host_os_novers=osf5.x
+    ;;
+  solaris2.*)
+    host_os_novers=solaris2.x
+    ;;
+  *)
+    host_os_novers=$host_os
+    ;;
+esac
+
+ DEFAULT_LIBS=""
+
+host_config="none"
+for f in $host_cpu-$host_vendor-$host_os \
+         $host_cpu-$host_vendor-$host_os_novers \
+         $host_vendor-$host_os \
+         $host_vendor-$host_os_novers \
+         $host_cpu-$host_os \
+         $host_cpu-$host_os_novers \
+         $host_cpu-$host_vendor \
+         $host_os \
+         $host_os_novers \
+         $host_vendor \
+         $host_cpu ; do
+ echo "$as_me:$LINENO: checking for config $f" >&5
+echo $ECHO_N "checking for config $f... $ECHO_C" >&6
+ if test -f $srcdir/config/$f; then
+   host_config=$srcdir/config/$f
+   echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+   break
+ fi
+ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+done
+if test "X$host_config" != "Xnone"; then
+ CXX_BASENAME="`echo $CXX |cut -f1 -d' ' |xargs basename 2>/dev/null`"
+ . $host_config
+fi
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CXX"; then
+  ac_cv_prog_CXX="$CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CXX="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CXX=$ac_cv_prog_CXX
+if test -n "$CXX"; then
+  echo "$as_me:$LINENO: result: $CXX" >&5
+echo "${ECHO_T}$CXX" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CXX" && break
+  done
+fi
+if test -z "$CXX"; then
+  ac_ct_CXX=$CXX
+  for ac_prog in $CCC g++ c++ gpp aCC CC cxx cc++ cl FCC KCC RCC xlC_r xlC
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CXX"; then
+  ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CXX="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CXX=$ac_cv_prog_ac_ct_CXX
+if test -n "$ac_ct_CXX"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CXX" >&5
+echo "${ECHO_T}$ac_ct_CXX" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CXX" && break
+done
+test -n "$ac_ct_CXX" || ac_ct_CXX="g++"
+
+  CXX=$ac_ct_CXX
+fi
+
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C++ compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C++ compiler default output file name" >&5
+echo $ECHO_N "checking for C++ compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+	;;
+    conftest.$ac_ext )
+	# This is the source file.
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	# FIXME: I believe we export ac_cv_exeext for Libtool,
+	# but it would be cool to find out if it's true.  Does anybody
+	# maintain Libtool? --akim.
+	export ac_cv_exeext
+	break;;
+    * )
+	break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C++ compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C++ compiler works" >&5
+echo $ECHO_N "checking whether the C++ compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { echo "$as_me:$LINENO: error: cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C++ compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  export ac_cv_exeext
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C++ compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C++ compiler... $ECHO_C" >&6
+if test "${ac_cv_cxx_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_cxx_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_cxx_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_cxx_compiler_gnu" >&6
+GXX=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CXXFLAGS=${CXXFLAGS+set}
+ac_save_CXXFLAGS=$CXXFLAGS
+CXXFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CXX accepts -g" >&5
+echo $ECHO_N "checking whether $CXX accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cxx_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cxx_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cxx_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cxx_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cxx_g" >&6
+if test "$ac_test_CXXFLAGS" = set; then
+  CXXFLAGS=$ac_save_CXXFLAGS
+elif test $ac_cv_prog_cxx_g = yes; then
+  if test "$GXX" = yes; then
+    CXXFLAGS="-g -O2"
+  else
+    CXXFLAGS="-g"
+  fi
+else
+  if test "$GXX" = yes; then
+    CXXFLAGS="-O2"
+  else
+    CXXFLAGS=
+  fi
+fi
+for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+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
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+echo "$as_me:$LINENO: checking how to run the C++ preprocessor" >&5
+echo $ECHO_N "checking how to run the C++ preprocessor... $ECHO_C" >&6
+if test -z "$CXXCPP"; then
+  if test "${ac_cv_prog_CXXCPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CXXCPP needs to be expanded
+    for CXXCPP in "$CXX -E" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CXXCPP=$CXXCPP
+
+fi
+  CXXCPP=$ac_cv_prog_CXXCPP
+else
+  ac_cv_prog_CXXCPP=$CXXCPP
+fi
+echo "$as_me:$LINENO: result: $CXXCPP" >&5
+echo "${ECHO_T}$CXXCPP" >&6
+ac_preproc_ok=false
+for ac_cxx_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C++ preprocessor \"$CXXCPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+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
+	CXX_BASENAME="`echo $CXX |cut -f1 -d' ' |xargs basename 2>/dev/null`"
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+all:
+	@echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+  SET_MAKE=
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL=$ac_install_sh
+  fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+# Check whether --enable-shared or --disable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval="$enable_shared"
+  p=${PACKAGE-default}
+case $enableval in
+yes) enable_shared=yes ;;
+no) enable_shared=no ;;
+*)
+  enable_shared=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_shared=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+else
+  enable_shared=yes
+fi;
+# Check whether --enable-static or --disable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval="$enable_static"
+  p=${PACKAGE-default}
+case $enableval in
+yes) enable_static=yes ;;
+no) enable_static=no ;;
+*)
+  enable_static=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_static=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+else
+  enable_static=yes
+fi;
+# Check whether --enable-fast-install or --disable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+  enableval="$enable_fast_install"
+  p=${PACKAGE-default}
+case $enableval in
+yes) enable_fast_install=yes ;;
+no) enable_fast_install=no ;;
+*)
+  enable_fast_install=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_fast_install=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+else
+  enable_fast_install=yes
+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
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+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
+
+# Find the correct PATH separator.  Usually this is `:', but
+# DJGPP uses `;' like DOS.
+if test "X${PATH_SEPARATOR+set}" != Xset; then
+  UNAME=${UNAME-`uname 2>/dev/null`}
+  case X$UNAME in
+    *-DOS) lt_cv_sys_path_separator=';' ;;
+    *)     lt_cv_sys_path_separator=':' ;;
+  esac
+  PATH_SEPARATOR=$lt_cv_sys_path_separator
+fi
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval="$with_gnu_ld"
+  test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+	test "$with_gnu_ld" != no && break
+      else
+	test "$with_gnu_ld" != yes && break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+  lt_cv_prog_gnu_ld=yes
+else
+  lt_cv_prog_gnu_ld=no
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
+reload_flag=$lt_cv_ld_reload_flag
+test -n "$reload_flag" && reload_flag=" $reload_flag"
+
+echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
+if test "${lt_cv_path_NM+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    test -z "$ac_dir" && ac_dir=.
+    tmp_nm=$ac_dir/${ac_tool_prefix}nm
+    if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      # Tru64's nm complains that /dev/null is an invalid object file
+      if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
+	lt_cv_path_NM="$tmp_nm -B"
+	break
+      elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+	lt_cv_path_NM="$tmp_nm -p"
+	break
+      else
+	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	continue # so that we can try to find one that supports BSD flags
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi
+fi
+
+NM="$lt_cv_path_NM"
+echo "$as_me:$LINENO: result: $NM" >&5
+echo "${ECHO_T}$NM" >&6
+
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5
+echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given egrep regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi4*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin* | mingw* | pw32*)
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  case "$host_os" in
+  rhapsody* | darwin1.[012])
+    lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
+    ;;
+  *) # Darwin 1.3 on
+    lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+    ;;
+  esac
+  ;;
+
+freebsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20*|hpux11*)
+  lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libc.sl
+  ;;
+
+irix5* | irix6*)
+  case $host_os in
+  irix5*)
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+    ;;
+  *)
+    case $LD in
+    *-32|*"-32 ") libmagic=32-bit;;
+    *-n32|*"-n32 ") libmagic=N32;;
+    *-64|*"-64 ") libmagic=64-bit;;
+    *) libmagic=never-match;;
+    esac
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
+    ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+  case $host_cpu in
+  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | s390* )
+    lt_cv_deplibs_check_method=pass_all ;;
+  *)
+    # glibc up to 2.1.1 does not perform some relocations on ARM
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+openbsd*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
+  else
+    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  # this will be overridden with pass_all, but let us keep it just in case
+  lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sco3.2v5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  lt_cv_file_magic_test_file=/lib/libc.so
+  ;;
+
+sysv5uw[78]* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  esac
+  ;;
+esac
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+
+
+
+
+
+
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output" >&5
+echo $ECHO_N "checking command to parse $NM output... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+irix*)
+  symcode='[BCDEGRST]'
+  ;;
+solaris* | sysv5*)
+  symcode='[BDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $host_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
+  symcode='[ABCDGISTW]'
+fi
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Write the raw and C identifiers.
+lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if egrep ' nm_test_var$' "$nlist" >/dev/null; then
+	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr address;
+}
+lt_preloaded_symbols[] =
+{
+EOF
+	  sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  save_LIBS="$LIBS"
+	  save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$no_builtin_flag"
+	  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$save_LIBS"
+	  CFLAGS="$save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  global_symbol_to_cdecl=
+  global_symbol_to_c_name_address=
+else
+  global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
+  global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address"
+fi
+if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address";
+then
+  echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6
+else
+  echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+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
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+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
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+  /*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+  ?:/*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+  ;;
+  *)
+  ac_save_MAGIC_CMD="$MAGIC_CMD"
+  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="/usr/bin:$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    egrep "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  MAGIC_CMD="$ac_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+  /*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+  ?:/*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+  ;;
+  *)
+  ac_save_MAGIC_CMD="$MAGIC_CMD"
+  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="/usr/bin:$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    egrep "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  MAGIC_CMD="$ac_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  RANLIB=$ac_ct_RANLIB
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  STRIP=$ac_ct_STRIP
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+
+enable_dlopen=no
+enable_win32_dll=no
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 4885 "configure"' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+
+     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
+
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  lt_cv_cc_needs_belf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+lt_cv_cc_needs_belf=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+     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
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+
+
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+need_locks="$enable_libtool_lock"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+if test x"$host" != x"$build"; then
+  ac_tool_prefix=${host_alias}-
+else
+  ac_tool_prefix=
+fi
+
+# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+case $host_os in
+linux-gnu*) ;;
+linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+esac
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+    ;;
+  *)
+    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Allow CC to be a program name with arguments.
+set dummy $CC
+compiler="$2"
+
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+echo "$as_me:$LINENO: result: $objdir" >&5
+echo "${ECHO_T}$objdir" >&6
+
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+  withval="$with_pic"
+  pic_mode="$withval"
+else
+  pic_mode=default
+fi;
+test -z "$pic_mode" && pic_mode=default
+
+# We assume here that the value for lt_cv_prog_cc_pic will not be cached
+# in isolation, and that seeing it set (from the cache) indicates that
+# the associated values are set (in the cache) correctly too.
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+if test "${lt_cv_prog_cc_pic+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+   lt_cv_prog_cc_pic=
+  lt_cv_prog_cc_shlib=
+  lt_cv_prog_cc_wl=
+  lt_cv_prog_cc_static=
+  lt_cv_prog_cc_no_builtin=
+  lt_cv_prog_cc_can_build_shared=$can_build_shared
+
+  if test "$GCC" = yes; then
+    lt_cv_prog_cc_wl='-Wl,'
+    lt_cv_prog_cc_static='-static'
+
+    case $host_os in
+    aix*)
+      # Below there is a dirty hack to force normal static linking with -ldl
+      # The problem is because libdl dynamically linked with both libc and
+      # libC (AIX C++ library), which obviously doesn't included in libraries
+      # list by gcc. This cause undefined symbols with -static flags.
+      # This hack allows C programs to be linked with "-static -ldl", but
+      # not sure about C++ programs.
+      lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_cv_prog_cc_pic='-fno-common'
+      ;;
+    cygwin* | mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_cv_prog_cc_pic='-DDLL_EXPORT'
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	 lt_cv_prog_cc_pic=-Kconform_pic
+      fi
+      ;;
+    *)
+      lt_cv_prog_cc_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for PIC flags for the system compiler.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      lt_cv_prog_cc_wl='-Wl,'
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_cv_prog_cc_static='-Bstatic'
+      else
+        ####################################################################
+        ## HACK Alert! This is causing problems with C++ on SP3...We'll just
+        ## remove this...THERE! All better now.
+        ####################################################################
+        ##lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
+		:
+      fi
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
+      lt_cv_prog_cc_pic='+Z'
+      ;;
+
+    irix5* | irix6*)
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static='-non_shared'
+      # PIC (with -KPIC) is the default.
+      ;;
+
+    cygwin* | mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_cv_prog_cc_pic='-DDLL_EXPORT'
+      ;;
+
+    newsos6)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      # All OSF/1 code is PIC.
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_cv_prog_cc_pic='-Kpic'
+      lt_cv_prog_cc_static='-dn'
+      lt_cv_prog_cc_shlib='-belf'
+      ;;
+
+    solaris*)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      lt_cv_prog_cc_wl='-Wl,'
+      ;;
+
+    sunos4*)
+      lt_cv_prog_cc_pic='-PIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      lt_cv_prog_cc_wl='-Qoption ld '
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      if test "x$host_vendor" = xsni; then
+	lt_cv_prog_cc_wl='-LD'
+      else
+	lt_cv_prog_cc_wl='-Wl,'
+      fi
+      ;;
+
+    uts4*)
+      lt_cv_prog_cc_pic='-pic'
+      lt_cv_prog_cc_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_cv_prog_cc_pic='-Kconform_pic'
+	lt_cv_prog_cc_static='-Bstatic'
+      fi
+      ;;
+
+    *)
+      lt_cv_prog_cc_can_build_shared=no
+      ;;
+    esac
+  fi
+
+fi
+
+if test -z "$lt_cv_prog_cc_pic"; then
+  echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+else
+  echo "$as_me:$LINENO: result: $lt_cv_prog_cc_pic" >&5
+echo "${ECHO_T}$lt_cv_prog_cc_pic" >&6
+
+  # Check to make sure the pic_flag actually works.
+  echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_cv_prog_cc_pic works... $ECHO_C" >&6
+  if test "${lt_cv_prog_cc_pic_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      save_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+        case $host_os in
+      hpux9* | hpux10* | hpux11*)
+	# On HP-UX, both CC and GCC only warn that PIC is supported... then
+	# they create non-PIC objects.  So, if there were any warnings, we
+	# assume that PIC is not supported.
+	if test -s conftest.err; then
+	  lt_cv_prog_cc_pic_works=no
+	else
+	  lt_cv_prog_cc_pic_works=yes
+	fi
+	;;
+      *)
+	lt_cv_prog_cc_pic_works=yes
+	;;
+      esac
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+      lt_cv_prog_cc_pic_works=no
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+    CFLAGS="$save_CFLAGS"
+
+fi
+
+
+  if test "X$lt_cv_prog_cc_pic_works" = Xno; then
+    lt_cv_prog_cc_pic=
+    lt_cv_prog_cc_can_build_shared=no
+  else
+    lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
+  fi
+
+  echo "$as_me:$LINENO: result: $lt_cv_prog_cc_pic_works" >&5
+echo "${ECHO_T}$lt_cv_prog_cc_pic_works" >&6
+fi
+
+# Check for any special shared library compilation flags.
+if test -n "$lt_cv_prog_cc_shlib"; then
+  { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&5
+echo "$as_me: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&2;}
+  if echo "$old_CC $old_CFLAGS " | egrep -e "[ 	]$lt_cv_prog_cc_shlib[ 	]" >/dev/null; then :
+  else
+   { echo "$as_me:$LINENO: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
+echo "$as_me: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
+    lt_cv_prog_cc_can_build_shared=no
+  fi
+fi
+
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_cv_prog_cc_static works... $ECHO_C" >&6
+if test "${lt_cv_prog_cc_static_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+    lt_cv_prog_cc_static_works=no
+  save_LDFLAGS="$LDFLAGS"
+  LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  lt_cv_prog_cc_static_works=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS="$save_LDFLAGS"
+
+fi
+
+
+# Belt *and* braces to stop my trousers falling down:
+test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
+echo "$as_me:$LINENO: result: $lt_cv_prog_cc_static_works" >&5
+echo "${ECHO_T}$lt_cv_prog_cc_static_works" >&6
+
+pic_flag="$lt_cv_prog_cc_pic"
+special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
+wl="$lt_cv_prog_cc_wl"
+link_static_flag="$lt_cv_prog_cc_static"
+no_builtin_flag="$lt_cv_prog_cc_no_builtin"
+can_build_shared="$lt_cv_prog_cc_can_build_shared"
+
+
+# Check to see if options -o and -c are simultaneously supported by compiler
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_compiler_c_o+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+$rm -r conftest 2>/dev/null
+mkdir conftest
+cd conftest
+echo "int some_variable = 0;" > conftest.$ac_ext
+mkdir out
+# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+# that will create temporary files in the current directory regardless of
+# the output directory.  Thus, making CWD read-only will cause this test
+# to fail, enabling locking or at least warning the user not to do parallel
+# builds.
+chmod -w .
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
+compiler_c_o=no
+if { (eval echo configure:5452: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
+  # The compiler can only warn and ignore the option if not recognized
+  # So say no if there are warnings
+  if test -s out/conftest.err; then
+    lt_cv_compiler_c_o=no
+  else
+    lt_cv_compiler_c_o=yes
+  fi
+else
+  # Append any errors to the config.log.
+  cat out/conftest.err 1>&5
+  lt_cv_compiler_c_o=no
+fi
+CFLAGS="$save_CFLAGS"
+chmod u+w .
+$rm conftest* out/*
+rmdir out
+cd ..
+rmdir conftest
+$rm -r conftest 2>/dev/null
+
+fi
+
+compiler_c_o=$lt_cv_compiler_c_o
+echo "$as_me:$LINENO: result: $compiler_c_o" >&5
+echo "${ECHO_T}$compiler_c_o" >&6
+
+if test x"$compiler_c_o" = x"yes"; then
+  # Check to see if we can write to a .lo
+  echo "$as_me:$LINENO: checking if $compiler supports -c -o file.lo" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.lo... $ECHO_C" >&6
+  if test "${lt_cv_compiler_o_lo+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+  lt_cv_compiler_o_lo=no
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -c -o conftest.lo"
+  save_objext="$ac_objext"
+  ac_objext=lo
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+int some_variable = 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+      # The compiler can only warn and ignore the option if not recognized
+    # So say no if there are warnings
+    if test -s conftest.err; then
+      lt_cv_compiler_o_lo=no
+    else
+      lt_cv_compiler_o_lo=yes
+    fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_objext="$save_objext"
+  CFLAGS="$save_CFLAGS"
+
+fi
+
+  compiler_o_lo=$lt_cv_compiler_o_lo
+  echo "$as_me:$LINENO: result: $compiler_o_lo" >&5
+echo "${ECHO_T}$compiler_o_lo" >&6
+else
+  compiler_o_lo=no
+fi
+
+# Check to see if we can do hard links to lock some files if needed
+hard_links="nottested"
+if test "$compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+if test "$GCC" = yes; then
+  # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
+  echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
+  compiler_rtti_exceptions=no
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+int some_variable = 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+      # The compiler can only warn and ignore the option if not recognized
+    # So say no if there are warnings
+    if test -s conftest.err; then
+      compiler_rtti_exceptions=no
+    else
+      compiler_rtti_exceptions=yes
+    fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+  echo "$as_me:$LINENO: result: $compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$compiler_rtti_exceptions" >&6
+
+  if test "$compiler_rtti_exceptions" = "yes"; then
+    no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
+  else
+    no_builtin_flag=' -fno-builtin'
+  fi
+fi
+
+# See if the linker supports building shared libraries.
+echo "$as_me:$LINENO: checking whether the linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+allow_undefined_flag=
+no_undefined_flag=
+need_lib_prefix=unknown
+need_version=unknown
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+archive_cmds=
+archive_expsym_cmds=
+old_archive_from_new_cmds=
+old_archive_from_expsyms_cmds=
+export_dynamic_flag_spec=
+whole_archive_flag_spec=
+thread_safe_flag_spec=
+hardcode_into_libs=no
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+hardcode_shlibpath_var=unsupported
+runpath_var=
+link_all_deplibs=unknown
+always_export_symbols=no
+export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
+# include_expsyms should be a list of space-separated symbols to be *always*
+# included in the symbol list
+include_expsyms=
+# exclude_expsyms can be an egrep regular expression of symbols to exclude
+# it will be wrapped by ` (' and `)$', so one must not match beginning or
+# end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+# as well as any symbol that contains `d'.
+exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+# platforms (ab)use it in PIC code, but their linkers get confused if
+# the symbol is explicitly referenced.  Since portable code cannot
+# rely on this symbol name, it's probably fine to never include it in
+# preloaded symbol tables.
+extract_expsyms_cmds=
+
+case $host_os in
+cygwin* | mingw* | pw32*)
+  # FIXME: the MSVC++ port hasn't been tested in a loooong time
+  # When not using gcc, we currently assume that we are using
+  # Microsoft Visual C++.
+  if test "$GCC" != yes; then
+    with_gnu_ld=no
+  fi
+  ;;
+openbsd*)
+  with_gnu_ld=no
+  ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # If archive_cmds runs LD, not CC, wlarc should be empty
+  wlarc='${wl}'
+
+  # See if GNU ld supports shared libraries.
+  case $host_os in
+  aix3* | aix4* | aix5*)
+    # On AIX, the GNU linker is very broken
+    # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
+    ld_shlibs=no
+    cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+    ;;
+
+  amigaos*)
+    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+
+    # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+    # that the semantics of dynamic libraries on AmigaOS, at least up
+    # to version 4, is to share data among multiple programs linked
+    # with the same dynamic library.  Since this doesn't match the
+    # behavior of shared libraries on other platforms, we can use
+    # them.
+    ld_shlibs=no
+    ;;
+
+  beos*)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      allow_undefined_flag=unsupported
+      # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+      # support --undefined.  This deserves some investigation.  FIXME
+      archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # hardcode_libdir_flag_spec is actually meaningless, as there is
+    # no search path for DLLs.
+    hardcode_libdir_flag_spec='-L$libdir'
+    allow_undefined_flag=unsupported
+    always_export_symbols=yes
+
+    extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
+      sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
+      test -f $output_objdir/impgen.exe || (cd $output_objdir && \
+      if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
+      else $CC -o impgen impgen.c ; fi)~
+      $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
+
+    old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
+
+    # cygwin and mingw dlls have different entry points and sets of symbols
+    # to exclude.
+    # FIXME: what about values for MSVC?
+    dll_entry=__cygwin_dll_entry at 12
+    dll_exclude_symbols=DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12~
+    case $host_os in
+    mingw*)
+      # mingw values
+      dll_entry=_DllMainCRTStartup at 12
+      dll_exclude_symbols=DllMain at 12,DllMainCRTStartup at 12,DllEntryPoint at 12~
+      ;;
+    esac
+
+    # mingw and cygwin differ, and it's simplest to just exclude the union
+    # of the two symbol sets.
+    dll_exclude_symbols=DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12,DllMainCRTStartup at 12,DllEntryPoint at 12
+
+    # recent cygwin and mingw systems supply a stub DllMain which the user
+    # can override, but on older systems we have to supply one (in ltdll.c)
+    if test "x$lt_cv_need_dllmain" = "xyes"; then
+      ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
+      ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~
+	test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
+    else
+      ltdll_obj=
+      ltdll_cmds=
+    fi
+
+    # Extract the symbol export list from an `--export-all' def file,
+    # then regenerate the def file from the symbol export list, so that
+    # the compiled dll only exports the symbol export list.
+    # Be careful not to strip the DATA tag left be newer dlltools.
+    export_symbols_cmds="$ltdll_cmds"'
+      $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
+      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
+
+    # If the export-symbols file already is a .def file (1st line
+    # is EXPORTS), use it as is.
+    # If DATA tags from a recent dlltool are present, honour them!
+    archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname-def;
+      else
+	echo EXPORTS > $output_objdir/$soname-def;
+	_lt_hint=1;
+	cat $export_symbols | while read symbol; do
+	 set dummy \$symbol;
+	 case \$# in
+	   2) echo "   \$2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
+	   *) echo "     \$2 @ \$_lt_hint \$3 ; " >> $output_objdir/$soname-def;;
+	 esac;
+	 _lt_hint=`expr 1 + \$_lt_hint`;
+	done;
+      fi~
+      '"$ltdll_cmds"'
+      $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
+      $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
+      $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
+    ;;
+
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+      wlarc=
+    else
+      archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    fi
+    ;;
+
+  solaris* | sysv5*)
+    if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+      ld_shlibs=no
+      cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+    elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+  sunos4*)
+    archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+    wlarc=
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  *)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+  esac
+
+  if test "$ld_shlibs" = yes; then
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    case $host_os in
+    cygwin* | mingw* | pw32*)
+      # dlltool doesn't understand --whole-archive et. al.
+      whole_archive_flag_spec=
+      ;;
+    *)
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
+	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+	whole_archive_flag_spec=
+      fi
+      ;;
+    esac
+  fi
+else
+  # PORTME fill in a description of your system's linker (not GNU ld)
+  case $host_os in
+  aix3*)
+    allow_undefined_flag=unsupported
+    always_export_symbols=yes
+    archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+    # Note: this linker hardcodes the directories in LIBPATH if there
+    # are no directories specified by -L.
+    hardcode_minus_L=yes
+    if test "$GCC" = yes && test -z "$link_static_flag"; then
+      # Neither direct hardcoding nor static linking is supported with a
+      # broken collect2.
+      hardcode_direct=unsupported
+    fi
+    ;;
+
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	done
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    hardcode_direct=yes
+    archive_cmds=''
+    hardcode_libdir_separator=':'
+    if test "$GCC" = yes; then
+      case $host_os in aix4.[012]|aix4.[012].*)
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	  strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  hardcode_direct=yes
+	else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	fi
+      esac
+
+      shared_flag='-shared'
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	shared_flag='${wl}-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall can do strange things, so it is better to
+    # generate a list of symbols to export.
+    always_export_symbols=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      allow_undefined_flag='-berok'
+      hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
+      archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+    else
+      if test "$host_cpu" = ia64; then
+	hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	allow_undefined_flag="-z nodefs"
+	archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+      else
+        #######################################################################
+        # This is a MAJOR HACK(tm) to get HDF5 to compile on AIX systems.
+        # The ``-b nolibpath -b ...'' flags were messing with the mpicc
+        # compiler's already defined library paths and it wasn't able to find
+        # the libraries it needed to run....DOH!
+        # Apply the fix unless HDF5_AIX_LIBTOOL_NOPATCH is defined.
+        if test "$HDF5_AIX_LIBTOOL_NOPATCH" = ""; then
+            hardcode_libdir_flag_spec=' '
+        else
+            hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
+        fi
+        #
+        # End MAJOR HACK
+        #
+        #######################################################################
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='${wl}-berok'
+	# This is a bit strange, but is similar to how AIX traditionally builds
+	# it's shared libraries.
+	archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
+      fi
+    fi
+    ;;
+
+  amigaos*)
+    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+    # see comment about different semantics on the GNU ld section
+    ld_shlibs=no
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    # hardcode_libdir_flag_spec is actually meaningless, as there is
+    # no search path for DLLs.
+    hardcode_libdir_flag_spec=' '
+    allow_undefined_flag=unsupported
+    # Tell ltmain to make .lib files, not .a files.
+    libext=lib
+    # FIXME: Setting linknames here is a bad hack.
+    archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+    # The linker will automatically build a .lib file if we build a DLL.
+    old_archive_from_new_cmds='true'
+    # FIXME: Should let the user specify the lib program.
+    old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+    fix_srcfile_path='`cygpath -w "$srcfile"`'
+    ;;
+
+  darwin* | rhapsody*)
+    case "$host_os" in
+    rhapsody* | darwin1.[012])
+      allow_undefined_flag='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      allow_undefined_flag='-flat_namespace -undefined suppress'
+      ;;
+    esac
+    # FIXME: Relying on posixy $() will cause problems for
+    #        cross-compilation, but unfortunately the echo tests do not
+    #        yet detect zsh echo's removal of \ escapes.
+    archive_cmds='$nonopt $(test "x$module" = xyes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring'
+    # We need to add '_' to the symbols in $export_symbols first
+    #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    whole_archive_flag_spec='-all_load $convenience'
+    ;;
+
+  freebsd1*)
+    ld_shlibs=no
+    ;;
+
+  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+  # support.  Future versions do this automatically, but an explicit c++rt0.o
+  # does not break anything, and helps significantly (at the cost of a little
+  # extra space).
+  freebsd2.2*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+  freebsd2*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_minus_L=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+  freebsd*)
+    archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  hpux9* | hpux10* | hpux11*)
+    case $host_os in
+    hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
+    *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
+    esac
+    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+    hardcode_libdir_separator=:
+    hardcode_direct=yes
+    hardcode_minus_L=yes # Not in the search PATH, but as the default
+			 # location of the library.
+    export_dynamic_flag_spec='${wl}-E'
+    ;;
+
+  irix5* | irix6*)
+    if test "$GCC" = yes; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+    else
+      archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    link_all_deplibs=yes
+    ;;
+
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+    else
+      archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+    fi
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  newsos6)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    hardcode_shlibpath_var=no
+    ;;
+
+  openbsd*)
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+    else
+      case "$host_os" in
+      openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_libdir_flag_spec='-R$libdir'
+        ;;
+      *)
+        archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+        ;;
+      esac
+    fi
+    ;;
+
+  os2*)
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+    allow_undefined_flag=unsupported
+    archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+    old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+    ;;
+
+  osf3*)
+    if test "$GCC" = yes; then
+      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+    else
+      allow_undefined_flag=' -expect_unresolved \*'
+      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    ;;
+
+  osf4* | osf5*)	# as osf3* with the addition of -msym flag
+    if test "$GCC" = yes; then
+      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    else
+      allow_undefined_flag=' -expect_unresolved \*'
+      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+      $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+      #Both c and cxx compiler support -rpath directly
+      hardcode_libdir_flag_spec='-rpath $libdir'
+    fi
+    hardcode_libdir_separator=:
+    ;;
+
+  sco3.2v5*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_shlibpath_var=no
+    runpath_var=LD_RUN_PATH
+    hardcode_runpath_var=yes
+    export_dynamic_flag_spec='${wl}-Bexport'
+    ;;
+
+  solaris*)
+    # gcc --version < 3.0 without binutils cannot create self contained
+    # shared libraries reliably, requiring libgcc.a to resolve some of
+    # the object symbols generated in some cases.  Libraries that use
+    # assert need libgcc.a to resolve __eprintf, for example.  Linking
+    # a copy of libgcc.a into every shared library to guarantee resolving
+    # such symbols causes other problems:  According to Tim Van Holder
+    # <tim.van.holder at pandora.be>, C++ libraries end up with a separate
+    # (to the application) exception stack for one thing.
+    no_undefined_flag=' -z defs'
+    if test "$GCC" = yes; then
+      case `$CC --version 2>/dev/null` in
+      [12].*)
+	cat <<EOF 1>&2
+
+*** Warning: Releases of GCC earlier than version 3.0 cannot reliably
+*** create self contained shared libraries on Solaris systems, without
+*** introducing a dependency on libgcc.a.  Therefore, libtool is disabling
+*** -no-undefined support, which will at least allow you to build shared
+*** libraries.  However, you may find that when you link such libraries
+*** into an application without using GCC, you have to manually add
+*** \`gcc --print-libgcc-file-name\` to the link command.  We urge you to
+*** upgrade to a newer version of GCC.  Another option is to rebuild your
+*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer.
+
+EOF
+        no_undefined_flag=
+	;;
+      esac
+    fi
+    # $CC -shared without GNU ld will not create a library from C++
+    # object files and a static libstdc++, better avoid it by now
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_shlibpath_var=no
+    case $host_os in
+    solaris2.[0-5] | solaris2.[0-5].*) ;;
+    *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+      whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+    esac
+    link_all_deplibs=yes
+    ;;
+
+  sunos4*)
+    if test "x$host_vendor" = xsequent; then
+      # Use $CC to link under sequent, because it throws in some extra .o
+      # files that make .init and .fini sections work.
+      archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+    else
+      archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+    fi
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_direct=yes
+    hardcode_minus_L=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4)
+    if test "x$host_vendor" = xsno; then
+      archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes # is this really true???
+    else
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+    fi
+    runpath_var='LD_RUN_PATH'
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4.3*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_shlibpath_var=no
+    export_dynamic_flag_spec='-Bexport'
+    ;;
+
+  sysv5*)
+    no_undefined_flag=' -z text'
+    # $CC -shared without GNU ld will not create a library from C++
+    # object files and a static libstdc++, better avoid it by now
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+    hardcode_libdir_flag_spec=
+    hardcode_shlibpath_var=no
+    runpath_var='LD_RUN_PATH'
+    ;;
+
+  uts4*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_shlibpath_var=no
+    ;;
+
+  dgux*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4*MP*)
+    if test -d /usr/nec; then
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ld_shlibs=yes
+    fi
+    ;;
+
+  sysv4.2uw2*)
+    archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_minus_L=no
+    hardcode_shlibpath_var=no
+    hardcode_runpath_var=yes
+    runpath_var=LD_RUN_PATH
+    ;;
+
+  sysv5uw7* | unixware7*)
+    no_undefined_flag='${wl}-z ${wl}text'
+    if test "$GCC" = yes; then
+      archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+    else
+      archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+    fi
+    runpath_var='LD_RUN_PATH'
+    hardcode_shlibpath_var=no
+    ;;
+
+  *)
+    ld_shlibs=no
+    ;;
+  esac
+fi
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+# Check hardcoding attributes.
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+   test -n "$runpath_var"; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$hardcode_shlibpath_var" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+# PORTME Fill in your ld.so characteristics
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}.so$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+	if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	     echo ' yes '
+	     echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	  :
+	else
+	  can_build_shared=no
+	fi
+	;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can
+    # not hardcode correct soname into executable. Probably we can
+    # add versioning support to collect2, so additional links can
+    # be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}.so$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}.so'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  export_dynamic_flag_spec=-rdynamic
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  need_version=no
+  need_lib_prefix=no
+  case $GCC,$host_os in
+  yes,cygwin*)
+    library_names_spec='$libname.dll.a'
+    soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
+    postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog .libs/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    ;;
+  yes,mingw*)
+    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
+    sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
+    ;;
+  yes,pw32*)
+    library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/./-/g'`${versuffix}.dll'
+    ;;
+  *)
+    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  # FIXME: Relying on posixy $() will cause problems for
+  #        cross-compilation, but unfortunately the echo tests do not
+  #        yet detect zsh echo's removal of \ escapes.
+  library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
+  soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  *)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  dynamic_linker="$host_os dld.sl"
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  shlibpath_var=SHLIB_PATH
+  shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+  library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
+  soname_spec='${libname}${release}.sl$major'
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6*)
+  version_type=irix
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}.so$major'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
+  case $host_os in
+  irix5*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
+    soname_spec='${libname}${release}.so$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case "$host_os" in
+    openbsd2.[89] | openbsd2.[89].*)
+      shlibpath_overrides_runpath=no
+      ;;
+    *)
+      shlibpath_overrides_runpath=yes
+      ;;
+    esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+os2*)
+  libname_spec='$name'
+  need_lib_prefix=no
+  library_names_spec='$libname.dll $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_version=no
+  soname_spec='${libname}${release}.so'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}.so$major'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
+    soname_spec='$libname.so.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+# Report the final consequences.
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+if test "$hardcode_action" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+        test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 7363 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 7461 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+if test "$enable_shared" = yes && test "$GCC" = yes; then
+  case $archive_cmds in
+  *'~'*)
+    # FIXME: we may have to deal with multi-command sequences.
+    ;;
+  '$CC '*)
+    # Test whether the compiler implicitly links with -lc since on some
+    # systems, -lgcc has to come before -lc. If gcc already passes -lc
+    # to ld, don't add -lc before -lgcc.
+    echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+    if test "${lt_cv_archive_cmds_need_lc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  $rm conftest*
+    echo 'static int dummy;' > conftest.$ac_ext
+
+    if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+      soname=conftest
+      lib=conftest
+      libobjs=conftest.$ac_objext
+      deplibs=
+      wl=$lt_cv_prog_cc_wl
+      compiler_flags=-v
+      linker_flags=-v
+      verstring=
+      output_objdir=.
+      libname=conftest
+      save_allow_undefined_flag=$allow_undefined_flag
+      allow_undefined_flag=
+      if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+      then
+	lt_cv_archive_cmds_need_lc=no
+      else
+	lt_cv_archive_cmds_need_lc=yes
+      fi
+      allow_undefined_flag=$save_allow_undefined_flag
+    else
+      cat conftest.err 1>&5
+    fi
+fi
+
+    echo "$as_me:$LINENO: result: $lt_cv_archive_cmds_need_lc" >&5
+echo "${ECHO_T}$lt_cv_archive_cmds_need_lc" >&6
+    ;;
+  esac
+fi
+need_lc=${lt_cv_archive_cmds_need_lc-yes}
+
+# The second clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  :
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  test -f Makefile && make "$ltmain"
+fi
+
+if test -f "$ltmain"; then
+  trap "$rm \"${ofile}T\"; exit 1" 1 2 15
+  $rm -f "${ofile}T"
+
+  echo creating $ofile
+
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS \
+    AR AR_FLAGS CC LD LN_S NM SHELL \
+    reload_flag reload_cmds wl \
+    pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
+    thread_safe_flag_spec whole_archive_flag_spec libname_spec \
+    library_names_spec soname_spec \
+    RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
+    old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
+    postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
+    old_striplib striplib file_magic_cmd export_symbols_cmds \
+    deplibs_check_method allow_undefined_flag no_undefined_flag \
+    finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
+    global_symbol_to_c_name_address \
+    hardcode_libdir_flag_spec hardcode_libdir_separator  \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
+
+    case $var in
+    reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
+    extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  cat <<__EOF__ > "${ofile}T"
+#! $SHELL
+
+# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996-2000 Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="sed -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$need_lc
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# The default C compiler.
+CC=$lt_CC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_pic_flag
+pic_mode=$pic_mode
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_compiler_c_o
+
+# Can we write directly to a .lo ?
+compiler_o_lo=$lt_compiler_o_lo
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_link_static_flag
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "${ofile}T"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | os2*)
+    cat <<'EOF' >> "${ofile}T"
+      # This is a source program that is used to create dlls on Windows
+      # Don't remove nor modify the starting and closing comments
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# #  ifdef __CYGWIN32__
+# #    define __CYGWIN__ __CYGWIN32__
+# #  endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+#   __hDllInstance_base = hInst;
+#   return TRUE;
+# }
+# /* ltdll.c ends here */
+	# This is a source program that is used to create import libraries
+	# on Windows for dlls which lack them. Don't remove nor modify the
+	# starting and closing comments
+# /* impgen.c starts here */
+# /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
+#
+#  This file is part of GNU libtool.
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#  */
+#
+# #include <stdio.h>		/* for printf() */
+# #include <unistd.h>		/* for open(), lseek(), read() */
+# #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
+# #include <string.h>		/* for strdup() */
+#
+# /* O_BINARY isn't required (or even defined sometimes) under Unix */
+# #ifndef O_BINARY
+# #define O_BINARY 0
+# #endif
+#
+# static unsigned int
+# pe_get16 (fd, offset)
+#      int fd;
+#      int offset;
+# {
+#   unsigned char b[2];
+#   lseek (fd, offset, SEEK_SET);
+#   read (fd, b, 2);
+#   return b[0] + (b[1]<<8);
+# }
+#
+# static unsigned int
+# pe_get32 (fd, offset)
+#     int fd;
+#     int offset;
+# {
+#   unsigned char b[4];
+#   lseek (fd, offset, SEEK_SET);
+#   read (fd, b, 4);
+#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# static unsigned int
+# pe_as32 (ptr)
+#      void *ptr;
+# {
+#   unsigned char *b = ptr;
+#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# int
+# main (argc, argv)
+#     int argc;
+#     char *argv[];
+# {
+#     int dll;
+#     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
+#     unsigned long export_rva, export_size, nsections, secptr, expptr;
+#     unsigned long name_rvas, nexp;
+#     unsigned char *expdata, *erva;
+#     char *filename, *dll_name;
+#
+#     filename = argv[1];
+#
+#     dll = open(filename, O_RDONLY|O_BINARY);
+#     if (dll < 1)
+# 	return 1;
+#
+#     dll_name = filename;
+#
+#     for (i=0; filename[i]; i++)
+# 	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
+# 	    dll_name = filename + i +1;
+#
+#     pe_header_offset = pe_get32 (dll, 0x3c);
+#     opthdr_ofs = pe_header_offset + 4 + 20;
+#     num_entries = pe_get32 (dll, opthdr_ofs + 92);
+#
+#     if (num_entries < 1) /* no exports */
+# 	return 1;
+#
+#     export_rva = pe_get32 (dll, opthdr_ofs + 96);
+#     export_size = pe_get32 (dll, opthdr_ofs + 100);
+#     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
+#     secptr = (pe_header_offset + 4 + 20 +
+# 	      pe_get16 (dll, pe_header_offset + 4 + 16));
+#
+#     expptr = 0;
+#     for (i = 0; i < nsections; i++)
+#     {
+# 	char sname[8];
+# 	unsigned long secptr1 = secptr + 40 * i;
+# 	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
+# 	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
+# 	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
+# 	lseek(dll, secptr1, SEEK_SET);
+# 	read(dll, sname, 8);
+# 	if (vaddr <= export_rva && vaddr+vsize > export_rva)
+# 	{
+# 	    expptr = fptr + (export_rva - vaddr);
+# 	    if (export_rva + export_size > vaddr + vsize)
+# 		export_size = vsize - (export_rva - vaddr);
+# 	    break;
+# 	}
+#     }
+#
+#     expdata = (unsigned char*)malloc(export_size);
+#     lseek (dll, expptr, SEEK_SET);
+#     read (dll, expdata, export_size);
+#     erva = expdata - export_rva;
+#
+#     nexp = pe_as32 (expdata+24);
+#     name_rvas = pe_as32 (expdata+32);
+#
+#     printf ("EXPORTS\n");
+#     for (i = 0; i<nexp; i++)
+#     {
+# 	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
+# 	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
+#     }
+#
+#     return 0;
+# }
+# /* impgen.c ends here */
+
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
+
+  mv -f "${ofile}T" "$ofile" || \
+    (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
+  chmod +x "$ofile"
+fi
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+# Prevent multiple expansion
+
+
+
+ PERL=""
+if test "X$GCC" = "Xyes"; then
+  for ac_prog in perl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_PERL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$PERL"; then
+  ac_cv_prog_PERL="$PERL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_PERL="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+PERL=$ac_cv_prog_PERL
+if test -n "$PERL"; then
+  echo "$as_me:$LINENO: result: $PERL" >&5
+echo "${ECHO_T}$PERL" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$PERL" && break
+done
+
+fi
+
+if test -z "$AR"; then
+  for ac_prog in ar xar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$AR" && break
+done
+test -n "$AR" || AR=":"
+
+fi
+
+
+if test -z "$SEARCH"; then
+  echo "$as_me:$LINENO: checking how make searches directories" >&5
+echo $ECHO_N "checking how make searches directories... $ECHO_C" >&6
+  while true; do #for break
+        cat >maketest <<EOF
+VPATH=$srcdir/config $srcdir/src $srcdir/bin
+.c.o:
+	cp $< H5.o
+
+foo: H5.o
+	/bin/rm -f H5.o
+	@echo works
+EOF
+
+    if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      SEARCH_RULE='VPATH='
+      SEARCH_SEP=' '
+      echo "$as_me:$LINENO: result: VPATH=DIR1 DIR2 ..." >&5
+echo "${ECHO_T}VPATH=DIR1 DIR2 ..." >&6
+      break
+    fi
+
+            cat >maketest <<EOF
+VPATH=$srcdir/config:$srcdir/src:$srcdir/bin
+.c.o:
+	cp $< H5.o
+
+foo: H5.o
+	/bin/rm -f H5.o
+	@echo works
+EOF
+
+    if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      SEARCH_RULE='VPATH='
+      SEARCH_SEP=':'
+      echo "$as_me:$LINENO: result: VPATH=DIR1:DIR2:..." >&5
+echo "${ECHO_T}VPATH=DIR1:DIR2:..." >&6
+      break
+    fi
+
+        cat >maketest <<EOF
+.PATH: $srcdir/config $srcdir/src $srcdir/bin
+.c.o:
+	cp $< H5.o
+
+foo: H5.o
+	/bin/rm -f H5.o
+	@echo works
+EOF
+    if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      SEARCH_RULE='.PATH: '
+      SEARCH_SEP=' '
+      echo "$as_me:$LINENO: result: .PATH: DIR1 DIR2 ..." >&5
+echo "${ECHO_T}.PATH: DIR1 DIR2 ..." >&6
+      break
+    fi
+
+        SEARCH_RULE='## SEARCH DISABLED: '
+    SEARCH_SEP=' '
+    echo "$as_me:$LINENO: result: it doesn't" >&5
+echo "${ECHO_T}it doesn't" >&6
+    if test ! -f configure; then
+      { { echo "$as_me:$LINENO: error: ${MAKE-make} requires the build and source directories to be the same" >&5
+echo "$as_me: error: ${MAKE-make} requires the build and source directories to be the same" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    break
+  done
+  rm maketest
+fi
+
+echo "$as_me:$LINENO: checking for production mode" >&5
+echo $ECHO_N "checking for production mode... $ECHO_C" >&6
+# Check whether --enable-production or --disable-production was given.
+if test "${enable_production+set}" = set; then
+  enableval="$enable_production"
+
+fi;
+
+case "X-$enable_production" in
+  X-|X-yes)
+    echo "$as_me:$LINENO: result: \"production\"" >&5
+echo "${ECHO_T}\"production\"" >&6
+
+            CXXFLAGS_temp=""
+    if test -n "$CXXFLAGS"; then
+      for d in $CXXFLAGS ; do
+        if test "X$d" != "X-g"; then
+          CXXFLAGS_temp="$CXXFLAGS_temp $d"
+        fi
+      done
+      CXXFLAGS=$CXXFLAGS_temp
+    fi
+
+    CFLAGS_temp=""
+    if test -n "$CFLAGS"; then
+      for d in $CFLAGS ; do
+        if test "X$d" != "X-g"; then
+          CFLAGS_temp="$CFLAGS_temp $d"
+        fi
+      done
+      CFLAGS=$CFLAGS_temp
+    fi
+
+    CONFIG_MODE=production
+    CXXFLAGS="$CXXFLAGS $PROD_CXXFLAGS"
+    CPPFLAGS="$CPPFLAGS $PROD_CPPFLAGS"
+    ;;
+  X-no)
+    echo "$as_me:$LINENO: result: \"development\"" >&5
+echo "${ECHO_T}\"development\"" >&6
+    CONFIG_MODE=development
+    CXXFLAGS="$CXXFLAGS $DEBUG_CXXFLAGS"
+    CPPFLAGS="$CPPFLAGS $DEBUG_CPPFLAGS"
+    ;;
+  X-pg|X-profile)
+    echo "$as_me:$LINENO: result: \"profile\"" >&5
+echo "${ECHO_T}\"profile\"" >&6
+    CONFIG_MODE=profile
+    CXXFLAGS="$CXXFLAGS $PROFILE_CXXFLAGS"
+    CPPFLAGS="$CPPFLAGS $PROFILE_CPPFLAGS"
+    ;;
+  *)
+    echo "$as_me:$LINENO: result: \"user-defined\"" >&5
+echo "${ECHO_T}\"user-defined\"" >&6
+    CONFIG_MODE="$X-enableval"
+    ;;
+esac
+
+
+echo "$as_me:$LINENO: checking for ceil in -lm" >&5
+echo $ECHO_N "checking for ceil in -lm... $ECHO_C" >&6
+if test "${ac_cv_lib_m_ceil+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char ceil ();
+int
+main ()
+{
+ceil ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_m_ceil=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_m_ceil=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_m_ceil" >&5
+echo "${ECHO_T}$ac_cv_lib_m_ceil" >&6
+if test $ac_cv_lib_m_ceil = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBM 1
+_ACEOF
+
+  LIBS="-lm $LIBS"
+
+fi
+
+
+if test "`uname`" = "SunOS" -o "`uname -sr`" = "HP-UX B.11.00"; then
+
+echo "$as_me:$LINENO: checking for socket in -lsocket" >&5
+echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_socket+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char socket ();
+int
+main ()
+{
+socket ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_socket_socket=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_socket_socket=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6
+if test $ac_cv_lib_socket_socket = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSOCKET 1
+_ACEOF
+
+  LIBS="-lsocket $LIBS"
+
+fi
+
+
+echo "$as_me:$LINENO: checking for xdr_int in -lnsl" >&5
+echo $ECHO_N "checking for xdr_int in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_xdr_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char xdr_int ();
+int
+main ()
+{
+xdr_int ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_nsl_xdr_int=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_nsl_xdr_int=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_xdr_int" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_xdr_int" >&6
+if test $ac_cv_lib_nsl_xdr_int = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBNSL 1
+_ACEOF
+
+  LIBS="-lnsl $LIBS"
+
+fi
+
+fi
+
+echo "$as_me:$LINENO: checking if should build only statically linked executables" >&5
+echo $ECHO_N "checking if should build only statically linked executables... $ECHO_C" >&6
+# Check whether --enable-static_exec or --disable-static_exec was given.
+if test "${enable_static_exec+set}" = set; then
+  enableval="$enable_static_exec"
+  STATIC_EXEC=$enableval
+fi;
+
+if test "X$STATIC_EXEC" = "Xyes"; then
+  echo "yes"
+  LT_STATIC_EXEC="-all-static"
+else
+  echo "no"
+  LT_STATIC_EXEC=""
+fi
+
+
+case "$host_cpu-$host_vendor-$host_os" in
+  *linux*)
+                # Check whether --enable-linux-lfs or --disable-linux-lfs was given.
+if test "${enable_linux_lfs+set}" = set; then
+  enableval="$enable_linux_lfs"
+
+fi;
+
+    LINUX_LFS="no"
+    case "X-$enable_linux_lfs" in
+      X-yes)
+        LINUX_LFS=yes
+        ;;
+      X-no)
+        ;;
+      X-|*)
+        MAJOR_VER="`uname -r | cut -d '.' -f1`"
+        MINOR_VER="`uname -r | cut -d '.' -f2`"
+
+        if test ${MAJOR_VER} -gt 2 -o ${MAJOR_VER} -eq 2 -a ${MINOR_VER} -ge 4; then
+          LINUX_LFS="yes"
+        fi
+        ;;
+    esac
+
+    echo "$as_me:$LINENO: checking for large file support mode on Linux" >&5
+echo $ECHO_N "checking for large file support mode on Linux... $ECHO_C" >&6
+    if test "X$LINUX_LFS" = "Xyes"; then
+      echo "$as_me:$LINENO: result: enabled" >&5
+echo "${ECHO_T}enabled" >&6
+
+      CPPFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE $CPPFLAGS"
+    else
+      echo "$as_me:$LINENO: result: disabled" >&5
+echo "${ECHO_T}disabled" >&6
+    fi
+
+                CPPFLAGS="-D_POSIX_SOURCE $CPPFLAGS"
+
+                    CPPFLAGS="-D_BSD_SOURCE $CPPFLAGS"
+    ;;
+esac
+
+ac_ext=cc
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+
+echo "$as_me:$LINENO: checking if $CXX needs old style header files in includes" >&5
+echo $ECHO_N "checking if $CXX needs old style header files in includes... $ECHO_C" >&6
+
+if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <iostream>
+
+int main(void) { return 0; }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+  echo no
+
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+
+  echo yes
+  CXXFLAGS="${CXXFLAGS} -DOLD_HEADER_FILENAME"
+
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+echo "$as_me:$LINENO: checking if $CXX can handle namespaces" >&5
+echo $ECHO_N "checking if $CXX can handle namespaces... $ECHO_C" >&6
+if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+namespace H5 {
+int fnord;
+}
+
+int main(void) {
+   using namespace H5;
+   fnord = 37;
+   return 0;
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+   echo yes
+
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+
+   echo no
+   CXXFLAGS="${CXXFLAGS} -DH5_NO_NAMESPACE"
+
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+echo "$as_me:$LINENO: checking if $CXX supports std" >&5
+echo $ECHO_N "checking if $CXX supports std... $ECHO_C" >&6
+if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <string>
+
+using namespace std;
+
+int main(void) {
+   string myString("testing namespace std");
+   return 0;
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+   echo yes
+
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+
+   echo no
+   CXXFLAGS="${CXXFLAGS} -DH5_NO_STD"
+
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+echo "$as_me:$LINENO: checking if $CXX supports bool types" >&5
+echo $ECHO_N "checking if $CXX supports bool types... $ECHO_C" >&6
+if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int main(void) {
+   bool flag;
+   return 0;
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+   echo yes
+
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+
+   echo no
+   CXXFLAGS="${CXXFLAGS} -DBOOL_NOTDEFINED"
+
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+echo "$as_me:$LINENO: checking if $CXX can handle static cast" >&5
+echo $ECHO_N "checking if $CXX can handle static cast... $ECHO_C" >&6
+if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int main(void) {
+   float test_float;
+   int test_int;
+   test_float = 37.0;
+   test_int = static_cast <int> (test_float);
+   return 0;
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+  echo yes
+
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+
+  echo no
+  CXXFLAGS="${CXXFLAGS} -DNO_STATIC_CAST"
+
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+
+# Check whether --with-zlib or --without-zlib was given.
+if test "${with_zlib+set}" = set; then
+  withval="$with_zlib"
+
+else
+  withval=yes
+fi;
+
+case $withval in
+  yes)
+    HAVE_ZLIB="yes"
+
+
+for ac_header in zlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ HAVE_ZLIB_H="yes"
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for compress2 in -lz" >&5
+echo $ECHO_N "checking for compress2 in -lz... $ECHO_C" >&6
+if test "${ac_cv_lib_z_compress2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char compress2 ();
+int
+main ()
+{
+compress2 ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_z_compress2=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_z_compress2=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_z_compress2" >&5
+echo "${ECHO_T}$ac_cv_lib_z_compress2" >&6
+if test $ac_cv_lib_z_compress2 = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBZ 1
+_ACEOF
+
+  LIBS="-lz $LIBS"
+
+else
+  unset HAVE_ZLIB
+fi
+
+    echo "$as_me:$LINENO: checking for compress2" >&5
+echo $ECHO_N "checking for compress2... $ECHO_C" >&6
+if test "${ac_cv_func_compress2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define compress2 to an innocuous variant, in case <limits.h> declares compress2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define compress2 innocuous_compress2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char compress2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef compress2
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char compress2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_compress2) || defined (__stub___compress2)
+choke me
+#else
+char (*f) () = compress2;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != compress2;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_compress2=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_compress2=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_compress2" >&5
+echo "${ECHO_T}$ac_cv_func_compress2" >&6
+if test $ac_cv_func_compress2 = yes; then
+  HAVE_COMPRESS2="yes"
+fi
+
+
+    if test -z "$HAVE_ZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      { { echo "$as_me:$LINENO: error: couldn't find zlib library" >&5
+echo "$as_me: error: couldn't find zlib library" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    ;;
+  no)
+    HAVE_ZLIB="no"
+    echo "$as_me:$LINENO: checking for GNU zlib" >&5
+echo $ECHO_N "checking for GNU zlib... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+    ;;
+  *)
+    HAVE_ZLIB="yes"
+    case "$withval" in
+      *,*)
+        zlib_inc="`echo $withval |cut -f1 -d,`"
+        zlib_lib="`echo $withval |cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          zlib_inc="$withval/include"
+          zlib_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+            if test "X$zlib_inc" = "X/usr/include"; then
+      zlib_inc=""
+    fi
+    if test "X$zlib_lib" = "X/usr/lib"; then
+      zlib_lib=""
+    fi
+
+    saved_CPPFLAGS="$CPPFLAGS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    if test -n "$zlib_inc"; then
+      CPPFLAGS="$CPPFLAGS -I$zlib_inc"
+    fi
+
+
+for ac_header in zlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ HAVE_ZLIB_H="yes"
+else
+  CPPFLAGS="$saved_CPPFLAGS"
+fi
+
+done
+
+
+    if test -n "$zlib_lib"; then
+      LDFLAGS="$LDFLAGS -L$zlib_lib"
+    fi
+
+
+echo "$as_me:$LINENO: checking for compress2 in -lz" >&5
+echo $ECHO_N "checking for compress2 in -lz... $ECHO_C" >&6
+if test "${ac_cv_lib_z_compress2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char compress2 ();
+int
+main ()
+{
+compress2 ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_z_compress2=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_z_compress2=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_z_compress2" >&5
+echo "${ECHO_T}$ac_cv_lib_z_compress2" >&6
+if test $ac_cv_lib_z_compress2 = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBZ 1
+_ACEOF
+
+  LIBS="-lz $LIBS"
+
+else
+  LDFLAGS="$saved_LDFLAGS"; unset HAVE_ZLIB
+fi
+
+    echo "$as_me:$LINENO: checking for compress2" >&5
+echo $ECHO_N "checking for compress2... $ECHO_C" >&6
+if test "${ac_cv_func_compress2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define compress2 to an innocuous variant, in case <limits.h> declares compress2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define compress2 innocuous_compress2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char compress2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef compress2
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char compress2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_compress2) || defined (__stub___compress2)
+choke me
+#else
+char (*f) () = compress2;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != compress2;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_compress2=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_compress2=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_compress2" >&5
+echo "${ECHO_T}$ac_cv_func_compress2" >&6
+if test $ac_cv_func_compress2 = yes; then
+  HAVE_COMPRESS2="yes"
+fi
+
+
+    if test -z "$HAVE_ZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      { { echo "$as_me:$LINENO: error: couldn't find zlib library" >&5
+echo "$as_me: error: couldn't find zlib library" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    ;;
+esac
+
+if test "x$HAVE_ZLIB" = "xyes" -a "x$HAVE_ZLIB_H" = "xyes" -a "x$HAVE_COMPRESS2" = "xyes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FILTER_DEFLATE 1
+_ACEOF
+
+fi
+
+
+# Check whether --with-szlib or --without-szlib was given.
+if test "${with_szlib+set}" = set; then
+  withval="$with_szlib"
+
+else
+  withval=yes
+fi;
+
+case $withval in
+  yes)
+    HAVE_SZLIB="yes"
+
+for ac_header in szlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ HAVE_SZLIB_H="yes"
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for SZ_BufftoBuffCompress in -lsz" >&5
+echo $ECHO_N "checking for SZ_BufftoBuffCompress in -lsz... $ECHO_C" >&6
+if test "${ac_cv_lib_sz_SZ_BufftoBuffCompress+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char SZ_BufftoBuffCompress ();
+int
+main ()
+{
+SZ_BufftoBuffCompress ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_sz_SZ_BufftoBuffCompress=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_sz_SZ_BufftoBuffCompress=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_sz_SZ_BufftoBuffCompress" >&5
+echo "${ECHO_T}$ac_cv_lib_sz_SZ_BufftoBuffCompress" >&6
+if test $ac_cv_lib_sz_SZ_BufftoBuffCompress = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSZ 1
+_ACEOF
+
+  LIBS="-lsz $LIBS"
+
+else
+  unset HAVE_SZLIB
+fi
+
+
+    if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      { { echo "$as_me:$LINENO: error: couldn't find szlib library" >&5
+echo "$as_me: error: couldn't find szlib library" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    ;;
+  no)
+    HAVE_SZLIB="no"
+    echo "$as_me:$LINENO: checking for szlib" >&5
+echo $ECHO_N "checking for szlib... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+    ;;
+  *)
+    HAVE_SZLIB="yes"
+    case "$withval" in
+      *,*)
+        szlib_inc="`echo $withval |cut -f1 -d,`"
+        szlib_lib="`echo $withval |cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          szlib_inc="$withval/include"
+          szlib_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+            if test "X$szlib_inc" = "X/usr/include"; then
+      szlib_inc=""
+    fi
+    if test "X$szlib_lib" = "X/usr/lib"; then
+      szlib_lib=""
+    fi
+
+    saved_CPPFLAGS="$CPPFLAGS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    if test -n "$szlib_inc"; then
+      CPPFLAGS="$CPPFLAGS -I$szlib_inc"
+    fi
+
+
+for ac_header in szlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ HAVE_SZLIB_H="yes"
+else
+  CPPFLAGS="$saved_CPPFLAGS"
+fi
+
+done
+
+
+    if test -n "$szlib_lib"; then
+      LDFLAGS="$LDFLAGS -L$szlib_lib"
+    fi
+
+
+echo "$as_me:$LINENO: checking for SZ_BufftoBuffCompress in -lsz" >&5
+echo $ECHO_N "checking for SZ_BufftoBuffCompress in -lsz... $ECHO_C" >&6
+if test "${ac_cv_lib_sz_SZ_BufftoBuffCompress+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char SZ_BufftoBuffCompress ();
+int
+main ()
+{
+SZ_BufftoBuffCompress ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_sz_SZ_BufftoBuffCompress=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_sz_SZ_BufftoBuffCompress=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_sz_SZ_BufftoBuffCompress" >&5
+echo "${ECHO_T}$ac_cv_lib_sz_SZ_BufftoBuffCompress" >&6
+if test $ac_cv_lib_sz_SZ_BufftoBuffCompress = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSZ 1
+_ACEOF
+
+  LIBS="-lsz $LIBS"
+
+else
+  LDFLAGS="$saved_LDFLAGS"; unset HAVE_SZLIB
+fi
+
+
+    if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      { { echo "$as_me:$LINENO: error: couldn't find szlib library" >&5
+echo "$as_me: error: couldn't find szlib library" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    ;;
+esac
+
+if test "x$HAVE_SZLIB" = "xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FILTER_SZIP 1
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for Stream Virtual File Driver support" >&5
+echo $ECHO_N "checking for Stream Virtual File Driver support... $ECHO_C" >&6
+# Check whether --enable-stream-vfd or --disable-stream-vfd was given.
+if test "${enable_stream_vfd+set}" = set; then
+  enableval="$enable_stream_vfd"
+  STREAM_VFD=$enableval
+fi;
+
+if test "$STREAM_VFD" = "yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+
+for ac_header in netinet/tcp.h sys/filio.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_cxx_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_cxx_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_cxx_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STREAM 1
+_ACEOF
+
+
+    echo "$as_me:$LINENO: checking if socklen_t is defined" >&5
+echo $ECHO_N "checking if socklen_t is defined... $ECHO_C" >&6
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+int
+main ()
+{
+socklen_t foo; return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_cxx_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SOCKLEN_T 1
+_ACEOF
+
+    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  echo "$as_me:$LINENO: result: not configured" >&5
+echo "${ECHO_T}not configured" >&6
+fi
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+echo "$as_me:$LINENO: checking make" >&5
+echo $ECHO_N "checking make... $ECHO_C" >&6
+
+if test "`${MAKE-make} --version -f /dev/null 2>/dev/null |\
+          sed -n 1p|cut -c1-8`" = "GNU Make"; then
+  echo "$as_me:$LINENO: result: GNU make" >&5
+echo "${ECHO_T}GNU make" >&6
+  GMAKE=yes
+  if test "X$GCC" = "Xyes"; then
+    DEPEND=config/depend1
+  else
+    DEPEND=config/depend2
+  fi
+else
+  echo "$as_me:$LINENO: result: generic" >&5
+echo "${ECHO_T}generic" >&6
+fi
+
+if test -z "$DEPEND"; then
+  echo "$as_me:$LINENO: checking how to include a makefile" >&5
+echo $ECHO_N "checking how to include a makefile... $ECHO_C" >&6
+
+    cat >makeinc <<EOF
+foo:
+	@:
+EOF
+
+  while true; do             echo '.include <makeinc>' >maketest
+    if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      echo "$as_me:$LINENO: result: .include <FILE>" >&5
+echo "${ECHO_T}.include <FILE>" >&6
+      DEPEND=config/depend3
+      break
+    fi
+
+        echo 'include makeinc' >maketest
+    if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      echo "$as_me:$LINENO: result: include FILE" >&5
+echo "${ECHO_T}include FILE" >&6
+      DEPEND=config/depend4
+      break;
+    fi
+
+        echo "$as_me:$LINENO: result: you have a deficient make command" >&5
+echo "${ECHO_T}you have a deficient make command" >&6
+    DEPEND=config/dependN
+    break
+  done
+  rm makeinc maketest
+fi
+
+rm -f conftest core core.* *.core conftest.o conftest.c dummy.o $ac_clean_files
+
+DYNAMIC_DIRS=""
+if test -n "$LDFLAGS"; then
+  for d in $LDFLAGS ; do
+    case "$d" in
+      -L*)
+        d=`echo $d | sed -e 's/-L//g'`
+        case "$d" in
+          .*)
+                                    d=${ROOT}/$d
+            ;;
+        esac
+        DYNAMIC_DIRS="-R${d} $DYNAMIC_DIRS"
+        ;;
+    esac
+  done
+fi
+
+
+ COMMENCE=config/commence
+ CONCLUDE=config/conclude
+
+if test -z "$SEARCH"; then
+   SEARCH='$(srcdir) $(top_builddir)/src $(top_srcdir)/src'
+  cmd='echo $SEARCH |sed "s/ /'$SEARCH_SEP'/g"'
+  SEARCH="$SEARCH_RULE`eval $cmd`"
+fi
+
+if test "X$GMAKE" = "Xyes"; then
+   SETX=":"
+else
+   SETX="set -x"
+fi
+
+rm -f conftest conftest.o conftest.c core core.* *.core dummy.o
+
+
+saved_no_create=$no_create
+no_create=yes
+                                                                                                                        ac_config_files="$ac_config_files config/depend1 config/depend2 config/depend3 config/depend4 config/dependN config/commence config/conclude Makefile src/Makefile src/h5c++ test/Makefile examples/Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[	 ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[	 ]*$//;
+}'
+fi
+
+# Transform confdefs.h into DEFS.
+# Protect against shell expansion while executing Makefile rules.
+# Protect against Makefile macro expansion.
+#
+# If the first sed substitution is executed (which looks for macros that
+# take arguments), then we branch to the quote section.  Otherwise,
+# look for a macro that doesn't take arguments.
+cat >confdef2opt.sed <<\_ACEOF
+t clear
+: clear
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\),-D\1=\2,g
+t quote
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\),-D\1=\2,g
+t quote
+d
+: quote
+s,[	 `~#$^&*(){}\\|;'"<>?],\\&,g
+s,\[,\\&,g
+s,\],\\&,g
+s,\$,$$,g
+p
+_ACEOF
+# We use echo to avoid assuming a particular line-breaking character.
+# The extra dot is to prevent the shell from consuming trailing
+# line-breaks from the sub-command output.  A line-break within
+# single-quotes doesn't work because, if this script is created in a
+# platform that uses two characters for line-breaks (e.g., DOS), tr
+# would break.
+ac_LF_and_DOT=`echo; echo .`
+DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'`
+rm -f confdef2opt.sed
+
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_i=`echo "$ac_i" |
+	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+  # 2. Add them.
+  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by HDF5 C++ $as_me 1.6.5, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+
+Configuration files:
+$config_files
+
+Report bugs to <bug-autoconf at gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+HDF5 C++ config.status 1.6.5
+configured by $0, generated by GNU Autoconf 2.59,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "config/depend1" ) CONFIG_FILES="$CONFIG_FILES config/depend1" ;;
+  "config/depend2" ) CONFIG_FILES="$CONFIG_FILES config/depend2" ;;
+  "config/depend3" ) CONFIG_FILES="$CONFIG_FILES config/depend3" ;;
+  "config/depend4" ) CONFIG_FILES="$CONFIG_FILES config/depend4" ;;
+  "config/dependN" ) CONFIG_FILES="$CONFIG_FILES config/dependN" ;;
+  "config/commence" ) CONFIG_FILES="$CONFIG_FILES config/commence" ;;
+  "config/conclude" ) CONFIG_FILES="$CONFIG_FILES config/conclude" ;;
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+  "src/h5c++" ) CONFIG_FILES="$CONFIG_FILES src/h5c++" ;;
+  "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+  "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s, at SHELL@,$SHELL,;t t
+s, at PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s, at PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s, at PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s, at PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s, at PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s, at PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s, at exec_prefix@,$exec_prefix,;t t
+s, at prefix@,$prefix,;t t
+s, at program_transform_name@,$program_transform_name,;t t
+s, at bindir@,$bindir,;t t
+s, at sbindir@,$sbindir,;t t
+s, at libexecdir@,$libexecdir,;t t
+s, at datadir@,$datadir,;t t
+s, at sysconfdir@,$sysconfdir,;t t
+s, at sharedstatedir@,$sharedstatedir,;t t
+s, at localstatedir@,$localstatedir,;t t
+s, at libdir@,$libdir,;t t
+s, at includedir@,$includedir,;t t
+s, at oldincludedir@,$oldincludedir,;t t
+s, at infodir@,$infodir,;t t
+s, at mandir@,$mandir,;t t
+s, at build_alias@,$build_alias,;t t
+s, at host_alias@,$host_alias,;t t
+s, at target_alias@,$target_alias,;t t
+s, at DEFS@,$DEFS,;t t
+s, at ECHO_C@,$ECHO_C,;t t
+s, at ECHO_N@,$ECHO_N,;t t
+s, at ECHO_T@,$ECHO_T,;t t
+s, at LIBS@,$LIBS,;t t
+s, at build@,$build,;t t
+s, at build_cpu@,$build_cpu,;t t
+s, at build_vendor@,$build_vendor,;t t
+s, at build_os@,$build_os,;t t
+s, at host@,$host,;t t
+s, at host_cpu@,$host_cpu,;t t
+s, at host_vendor@,$host_vendor,;t t
+s, at host_os@,$host_os,;t t
+s, at CPPFLAGS@,$CPPFLAGS,;t t
+s, at H5_CPPFLAGS@,$H5_CPPFLAGS,;t t
+s, at H5_CFLAGS@,$H5_CFLAGS,;t t
+s, at H5_CXXFLAGS@,$H5_CXXFLAGS,;t t
+s, at ROOT@,$ROOT,;t t
+s, at DEFAULT_LIBS@,$DEFAULT_LIBS,;t t
+s, at CXX@,$CXX,;t t
+s, at CXXFLAGS@,$CXXFLAGS,;t t
+s, at LDFLAGS@,$LDFLAGS,;t t
+s, at ac_ct_CXX@,$ac_ct_CXX,;t t
+s, at EXEEXT@,$EXEEXT,;t t
+s, at OBJEXT@,$OBJEXT,;t t
+s, at CXXCPP@,$CXXCPP,;t t
+s, at SET_MAKE@,$SET_MAKE,;t t
+s, at INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s, at INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s, at INSTALL_DATA@,$INSTALL_DATA,;t t
+s, at CC@,$CC,;t t
+s, at CFLAGS@,$CFLAGS,;t t
+s, at ac_ct_CC@,$ac_ct_CC,;t t
+s, at LN_S@,$LN_S,;t t
+s, at ECHO@,$ECHO,;t t
+s, at RANLIB@,$RANLIB,;t t
+s, at ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s, at STRIP@,$STRIP,;t t
+s, at ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s, at CPP@,$CPP,;t t
+s, at EGREP@,$EGREP,;t t
+s, at LIBTOOL@,$LIBTOOL,;t t
+s, at PERL@,$PERL,;t t
+s, at AR@,$AR,;t t
+s, at LT_STATIC_EXEC@,$LT_STATIC_EXEC,;t t
+s, at DYNAMIC_DIRS@,$DYNAMIC_DIRS,;t t
+s, at SEARCH@,$SEARCH,;t t
+s, at SETX@,$SETX,;t t
+s, at LIBOBJS@,$LIBOBJS,;t t
+s, at LTLIBOBJS@,$LTLIBOBJS,;t t
+/@DEPEND@/r $DEPEND
+s, at DEPEND@,,;t t
+/@COMMENCE@/r $COMMENCE
+s, at COMMENCE@,,;t t
+/@CONCLUDE@/r $CONCLUDE
+s, at CONCLUDE@,,;t t
+CEOF
+
+_ACEOF
+
+  cat >>$CONFIG_STATUS <<\_ACEOF
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  esac
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+				     sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s, at configure_input@,$configure_input,;t t
+s, at srcdir@,$ac_srcdir,;t t
+s, at abs_srcdir@,$ac_abs_srcdir,;t t
+s, at top_srcdir@,$ac_top_srcdir,;t t
+s, at abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s, at builddir@,$ac_builddir,;t t
+s, at abs_builddir@,$ac_abs_builddir,;t t
+s, at top_builddir@,$ac_top_builddir,;t t
+s, at abs_top_builddir@,$ac_abs_top_builddir,;t t
+s, at INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+no_create=$saved_no_create
+
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+chmod 755 src/h5c++
+
+if test -z "$ECHO_N" -o -z "$ECHO_C"; then
+  if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+    if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+      ECHO_N=''
+      ECHO_C='
+'
+    else
+      ECHO_N=-n
+      ECHO_C=''
+    fi
+  else
+    ECHO_N=''
+    ECHO_C='\c'
+  fi
+fi
+
+PRINT_PLAIN() {
+  echo $ECHO_N "$1$ECHO_C"
+  echo $ECHO_N "$1$ECHO_C" 1>>src/libhdf5_cpp.settings
+}
+
+PRINT_N() {
+  echo $ECHO_N "$1:  $ECHO_C"
+  echo $ECHO_N "$1:  $ECHO_C" 1>>src/libhdf5_cpp.settings
+}
+
+PRINT() {
+  echo "$1"
+  echo "$1" 1>>src/libhdf5_cpp.settings
+}
+
+IF_YES_NO() {
+  if test $# -lt 1; then
+    PRINT "No"
+    return
+  else
+    while test $# -gt 0; do
+      if test "$1" != "yes"; then
+        PRINT "No"
+        return
+      fi
+      shift
+    done
+  fi
+  PRINT "Yes"
+}
+
+IF_ENABLED_DISABLED() {
+  if test "$1" = "yes"; then
+    PRINT "Enabled"
+  else
+    PRINT "Disabled"
+  fi
+}
+
+PRINT "C++ Configure Summary"
+PRINT "Compiling Options:"
+
+PRINT_N "                   C++ Compiler"
+PRINT "$CXX"
+
+PRINT_N "                       CXXFLAGS"
+PRINT "$CXXFLAGS"
+
+PRINT "Features:"


Property changes on: packages/hdf5/branches/upstream/current/c++/configure
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/c++/configure.in
===================================================================
--- packages/hdf5/branches/upstream/current/c++/configure.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/configure.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,890 @@
+dnl ----------------------------------------------------------------------
+dnl Process this file with autoconf to produce configure.
+dnl
+dnl Copyright by the Board of Trustees of the University of Illinois.
+dnl All rights reserved.
+dnl
+dnl This file is part of HDF5.  The full HDF5 copyright notice, including
+dnl terms governing use, modification, and redistribution, is contained in
+dnl the files COPYING and Copyright.html.  COPYING can be found at the root
+dnl of the source code distribution tree; Copyright.html can be found at the
+dnl root level of an installed copy of the electronic HDF5 document set and
+dnl is linked from the top-level documents page.  It can also be found at
+dnl http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have
+dnl access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu.
+dnl
+dnl ----------------------------------------------------------------------
+
+dnl ----------------------------------------------------------------------
+dnl Initialize configure.
+dnl
+AC_REVISION($Id: configure.in,v 1.67.2.100 2005/11/06 23:46:38 hdfadmin Exp $)
+
+dnl AC_INIT takes the name of the package, the version number, and an
+dnl email address to report bugs. AC_CONFIG_SRCDIR takes a unique file
+dnl as its argument.
+dnl
+dnl NOTE: Don't forget to change the version number here when we do a
+dnl release!!!
+dnl
+AC_INIT([HDF5 C++], [1.6.5], [hdfhelp at ncsa.uiuc.edu])
+AC_CONFIG_SRCDIR([src/H5Library.cpp])
+AC_CONFIG_AUX_DIR([../bin])
+
+AC_CANONICAL_HOST
+AC_SUBST(CPPFLAGS)
+
+dnl These hold flags which we want to use when compiling HDF5, but which
+dnl the user might not want in h5c++.
+AC_SUBST(H5_CPPFLAGS)
+AC_SUBST(H5_CFLAGS)
+AC_SUBST(H5_CXXFLAGS)
+
+dnl ----------------------------------------------------------------------
+dnl Dump all shell variables values.
+dnl
+AC_MSG_CHECKING(shell variables initial values)
+set >&5
+AC_MSG_RESULT(done)
+
+dnl ----------------------------------------------------------------------
+dnl Where is the root of the source tree.  Give an absolute address so
+dnl we can find it no matter which directory of the distribution is our
+dnl current directory.  The built-in pwd fails on some systems, but the
+dnl /bin/pwd version works OK.
+dnl
+if test -x "/bin/pwd"; then
+   pwd=/bin/pwd
+else
+   pwd=pwd
+fi
+AC_SUBST(ROOT) ROOT=`$pwd`
+
+dnl ----------------------------------------------------------------------
+dnl Check that the cache file was build on the same host as what we're
+dnl running on now.
+dnl
+AC_CACHE_CHECK(for cached host,hdf5_cv_host,hdf5_cv_host="none");
+if test "X$hdf5_cv_host" = "Xnone"; then
+   hdf5_cv_host=$host
+elif test "$hdf5_cv_host" != "$host"; then
+   echo "The config.cache file was generated on $hdf5_cv_host but"
+   echo "this is $host. Please remove that file and try again."
+   AC_MSG_ERROR(config.cache file is invalid)
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Source any special files that we need.  These files normally aren't
+dnl present but can be used by the maintainers to fine tune things like
+dnl turning on debug or profiling flags for the compiler.  The search order
+dnl is:
+dnl
+dnl	CPU-VENDOR-OS
+dnl	VENDOR-OS
+dnl	CPU-OS
+dnl	CPU-VENDOR
+dnl	OS
+dnl	VENDOR
+dnl	CPU
+dnl
+dnl If the `OS' ends with a version number then remove it. For instance,
+dnl `freebsd3.1' would become `freebsd'
+case "$host_os" in
+  aix*)
+    host_os_novers=aix
+    ;;
+  freebsd*)
+    host_os_novers=freebsd
+    ;;
+  irix5.*)
+    host_os_novers=irix5.x
+    ;;
+  irix6.*)
+    host_os_novers=irix6.x
+    ;;
+  osf4.*)
+    host_os_novers=osf4.x
+    ;;
+  osf5.*)
+    host_os_novers=osf5.x
+    ;;
+  solaris2.*)
+    host_os_novers=solaris2.x
+    ;;
+  *)
+    host_os_novers=$host_os
+    ;;
+esac
+
+dnl Different compilers may need default libraries. They are specified in
+dnl the config/* files, so we put this statement here so that it'll be
+dnl set by the code which follows...
+dnl
+AC_SUBST(DEFAULT_LIBS) DEFAULT_LIBS=""
+
+host_config="none"
+for f in $host_cpu-$host_vendor-$host_os \
+         $host_cpu-$host_vendor-$host_os_novers \
+         $host_vendor-$host_os \
+         $host_vendor-$host_os_novers \
+         $host_cpu-$host_os \
+         $host_cpu-$host_os_novers \
+         $host_cpu-$host_vendor \
+         $host_os \
+         $host_os_novers \
+         $host_vendor \
+         $host_cpu ; do
+ AC_MSG_CHECKING(for config $f)
+ if test -f $srcdir/config/$f; then
+   host_config=$srcdir/config/$f
+   AC_MSG_RESULT(found)
+   break
+ fi
+ AC_MSG_RESULT(no)
+done
+if test "X$host_config" != "Xnone"; then
+ CXX_BASENAME="`echo $CXX |cut -f1 -d' ' |xargs basename 2>/dev/null`"
+ . $host_config
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Check for programs.
+dnl
+AC_PROG_CXX
+AC_PROG_CXXCPP	dnl this is checked for when AC_HEADER_STDC is done
+CXX_BASENAME="`echo $CXX |cut -f1 -d' ' |xargs basename 2>/dev/null`"
+AC_PROG_MAKE_SET
+AC_PROG_INSTALL
+AM_PROG_LIBTOOL
+
+dnl ----------------------------------------------------------------------
+dnl Check if they have Perl installed on their system. We only need Perl
+dnl if they're using a GNU compiler.
+dnl
+AC_SUBST(PERL) PERL=""
+if test "X$GCC" = "Xyes"; then
+  AC_CHECK_PROGS(PERL, perl,, $PATH)
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Check which archiving tool to use. This needs to be done before
+dnl the AM_PROG_LIBTOOL macro.
+dnl
+if test -z "$AR"; then
+  AC_CHECK_PROGS(AR,ar xar,:,$PATH)
+fi
+AC_SUBST(AR)
+
+dnl ----------------------------------------------------------------------
+dnl Sometimes makes think the `.PATH:' appearing before the first rule
+dnl with an action should override the `all' default target. So we have
+dnl to decide what the proper syntax is.
+dnl
+if test -z "$SEARCH"; then
+  AC_MSG_CHECKING(how make searches directories)
+  while true; do #for break
+    dnl The most common method is `VPATH=DIR1 DIR2 ...'
+    cat >maketest <<EOF
+VPATH=$srcdir/config $srcdir/src $srcdir/bin
+.c.o:
+	cp $< H5.o
+   
+foo: H5.o
+	/bin/rm -f H5.o
+	@echo works
+EOF
+
+    if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      SEARCH_RULE='VPATH='
+      SEARCH_SEP=' '
+      AC_MSG_RESULT([VPATH=DIR1 DIR2 ...])
+      break
+    fi
+
+    dnl The second most common method is like above except with the
+    dnl directories separated by colons.
+    cat >maketest <<EOF
+VPATH=$srcdir/config:$srcdir/src:$srcdir/bin
+.c.o:
+	cp $< H5.o
+   
+foo: H5.o
+	/bin/rm -f H5.o
+	@echo works
+EOF
+   
+    if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      SEARCH_RULE='VPATH='
+      SEARCH_SEP=':'
+      AC_MSG_RESULT([VPATH=DIR1:DIR2:...])
+      break
+    fi
+
+    dnl pmake uses the construct `.PATH: DIR1 DIR2
+    cat >maketest <<EOF
+.PATH: $srcdir/config $srcdir/src $srcdir/bin
+.c.o:
+	cp $< H5.o
+   
+foo: H5.o
+	/bin/rm -f H5.o
+	@echo works
+EOF
+    if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      SEARCH_RULE='.PATH: '
+      SEARCH_SEP=' '
+      AC_MSG_RESULT([.PATH: DIR1 DIR2 ...])
+      break
+    fi
+
+    dnl No way for make to search directories
+    SEARCH_RULE='## SEARCH DISABLED: '
+    SEARCH_SEP=' '
+    AC_MSG_RESULT([it doesn't])
+    if test ! -f configure; then
+      AC_MSG_ERROR(${MAKE-make} requires the build and source directories to be the same)
+    fi
+    break
+  done
+  rm maketest
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Production flags?  Save the value in $CONFIG_MODE so we have it for
+dnl the record.
+dnl
+AC_MSG_CHECKING([for production mode])
+AC_ARG_ENABLE([production],
+              [AC_HELP_STRING([--enable-production],
+                              [Determines how to run the compiler.])])
+
+case "X-$enable_production" in
+  X-|X-yes)
+    AC_MSG_RESULT("production")
+
+    dnl Remove the "-g" flag from CFLAGS & CXXFLAGS if it's in there.
+    dnl
+    CXXFLAGS_temp=""
+    if test -n "$CXXFLAGS"; then
+      for d in $CXXFLAGS ; do
+        if test "X$d" != "X-g"; then
+          CXXFLAGS_temp="$CXXFLAGS_temp $d"
+        fi
+      done
+      CXXFLAGS=$CXXFLAGS_temp
+    fi
+
+    CFLAGS_temp=""
+    if test -n "$CFLAGS"; then
+      for d in $CFLAGS ; do
+        if test "X$d" != "X-g"; then
+          CFLAGS_temp="$CFLAGS_temp $d"
+        fi
+      done
+      CFLAGS=$CFLAGS_temp
+    fi
+
+    CONFIG_MODE=production
+    CXXFLAGS="$CXXFLAGS $PROD_CXXFLAGS"
+    CPPFLAGS="$CPPFLAGS $PROD_CPPFLAGS"
+    ;;
+  X-no)
+    AC_MSG_RESULT("development")
+    CONFIG_MODE=development
+    CXXFLAGS="$CXXFLAGS $DEBUG_CXXFLAGS"
+    CPPFLAGS="$CPPFLAGS $DEBUG_CPPFLAGS"
+    ;;
+  X-pg|X-profile)
+    AC_MSG_RESULT("profile")
+    CONFIG_MODE=profile
+    CXXFLAGS="$CXXFLAGS $PROFILE_CXXFLAGS"
+    CPPFLAGS="$CPPFLAGS $PROFILE_CPPFLAGS"
+    ;;
+  *)
+    AC_MSG_RESULT("user-defined")
+    CONFIG_MODE="$X-enableval"
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl Check for system libraries.
+dnl
+AC_CHECK_LIB([m], [ceil])
+
+if test "`uname`" = "SunOS" -o "`uname -sr`" = "HP-UX B.11.00"; then
+  dnl ...for Solaris
+  AC_CHECK_LIB([socket], [socket])
+  AC_CHECK_LIB([nsl], [xdr_int])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl If we should build only static executables
+dnl
+AC_MSG_CHECKING([if should build only statically linked executables])
+AC_ARG_ENABLE([static_exec],
+              [AC_HELP_STRING([--enable-static-exec],
+                              [Build only statically linked executables
+                               [default=no]])],
+              STATIC_EXEC=$enableval)
+
+if test "X$STATIC_EXEC" = "Xyes"; then
+  echo "yes"
+  LT_STATIC_EXEC="-all-static"
+else
+  echo "no"
+  LT_STATIC_EXEC=""
+fi
+AC_SUBST(LT_STATIC_EXEC)
+
+dnl ----------------------------------------------------------------------
+dnl Test for 64bit stuff before the data types and their sizes. The
+dnl result could effect the outcome of the sizeof macros below.
+dnl
+case "$host_cpu-$host_vendor-$host_os" in
+  *linux*)
+    dnl ----------------------------------------------------------------------
+    dnl Enable large file support on linux? Store the result in the LINUX_LFS
+    dnl variable for posterity
+    AC_ARG_ENABLE([linux-lfs],
+                  [AC_HELP_STRING([--enable-linux-lfs],
+                                  [Enable support for large (64-bit)
+                                   files on Linux. [default=check]])])
+   
+    LINUX_LFS="no"
+    case "X-$enable_linux_lfs" in
+      X-yes)
+        LINUX_LFS=yes
+        ;;
+      X-no)
+        ;;
+      X-|*)
+        MAJOR_VER="`uname -r | cut -d '.' -f1`"
+        MINOR_VER="`uname -r | cut -d '.' -f2`"
+
+        if test ${MAJOR_VER} -gt 2 -o ${MAJOR_VER} -eq 2 -a ${MINOR_VER} -ge 4; then
+          LINUX_LFS="yes"
+        fi
+        ;;
+    esac
+   
+    AC_MSG_CHECKING([for large file support mode on Linux])
+    if test "X$LINUX_LFS" = "Xyes"; then
+      AC_MSG_RESULT(enabled)
+   
+      CPPFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE $CPPFLAGS"
+    else
+      AC_MSG_RESULT(disabled)
+    fi
+
+    dnl Add POSIX support on Linux systems, so <features.h> defines
+    dnl __USE_POSIX, which is required to get the prototype for fdopen
+    dnl defined correctly in <stdio.h>
+    CPPFLAGS="-D_POSIX_SOURCE $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>
+    CPPFLAGS="-D_BSD_SOURCE $CPPFLAGS"
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl Checks for compiler characteristics.
+dnl
+AC_LANG_CPLUSPLUS
+
+AC_MSG_CHECKING(if $CXX needs old style header files in includes)
+AC_TRY_RUN([
+#include <iostream>
+
+int main(void) { return 0; }
+], [
+  echo no
+], [
+  echo yes
+  CXXFLAGS="${CXXFLAGS} -DOLD_HEADER_FILENAME"
+])
+
+AC_MSG_CHECKING(if $CXX can handle namespaces)
+AC_TRY_RUN([
+namespace H5 {
+int fnord;
+}
+
+int main(void) {
+   using namespace H5;
+   fnord = 37;
+   return 0;
+} 
+], [
+   echo yes
+], [
+   echo no
+   CXXFLAGS="${CXXFLAGS} -DH5_NO_NAMESPACE"
+])
+
+AC_MSG_CHECKING(if $CXX supports std)
+AC_TRY_RUN([
+#include <string>
+
+using namespace std;
+
+int main(void) {
+   string myString("testing namespace std");
+   return 0;
+}
+], [
+   echo yes
+], [
+   echo no
+   CXXFLAGS="${CXXFLAGS} -DH5_NO_STD"
+])
+
+AC_MSG_CHECKING(if $CXX supports bool types)
+AC_TRY_RUN([
+int main(void) {
+   bool flag;
+   return 0;
+}
+], [
+   echo yes
+], [
+   echo no
+   CXXFLAGS="${CXXFLAGS} -DBOOL_NOTDEFINED"
+])
+
+AC_MSG_CHECKING(if $CXX can handle static cast)
+AC_TRY_RUN([
+int main(void) {
+   float test_float;
+   int test_int;
+   test_float = 37.0;
+   test_int = static_cast <int> (test_float);
+   return 0;
+}
+], [
+  echo yes
+], [
+  echo no
+  CXXFLAGS="${CXXFLAGS} -DNO_STATIC_CAST"
+])
+
+dnl ----------------------------------------------------------------------
+dnl Checks for libraries.
+dnl
+
+dnl ----------------------------------------------------------------------
+dnl Is the GNU zlib present? It has a header file `zlib.h' and a library
+dnl `-lz' and their locations might be specified with the `--with-zlib'
+dnl command-line switch. The value is an include path and/or a library path.
+dnl If the library path is specified then it must be preceded by a comma.
+dnl
+AC_ARG_WITH([zlib],
+            [AC_HELP_STRING([--with-zlib=DIR],
+                            [Use zlib library for external deflate I/O
+                             filter [default=yes]])],,
+            withval=yes)
+
+case $withval in
+  yes)
+    HAVE_ZLIB="yes"
+    AC_CHECK_HEADERS([zlib.h], [HAVE_ZLIB_H="yes"])
+    AC_CHECK_LIB([z], [compress2],, [unset HAVE_ZLIB])
+    AC_CHECK_FUNC([compress2], [HAVE_COMPRESS2="yes"])
+
+    if test -z "$HAVE_ZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      AC_MSG_ERROR([couldn't find zlib library])
+    fi
+    ;;
+  no)
+    HAVE_ZLIB="no"
+    AC_MSG_CHECKING([for GNU zlib])
+    AC_MSG_RESULT([suppressed])
+    ;;
+  *)
+    HAVE_ZLIB="yes"
+    case "$withval" in
+      *,*)
+        zlib_inc="`echo $withval |cut -f1 -d,`"
+        zlib_lib="`echo $withval |cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          zlib_inc="$withval/include"
+          zlib_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+    dnl Trying to include -I/usr/include and -L/usr/lib is redundant and
+    dnl can mess some compilers up.
+    if test "X$zlib_inc" = "X/usr/include"; then
+      zlib_inc=""
+    fi
+    if test "X$zlib_lib" = "X/usr/lib"; then
+      zlib_lib=""
+    fi
+
+    saved_CPPFLAGS="$CPPFLAGS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    if test -n "$zlib_inc"; then
+      CPPFLAGS="$CPPFLAGS -I$zlib_inc"
+    fi
+
+    AC_CHECK_HEADERS([zlib.h],
+                     [HAVE_ZLIB_H="yes"],
+                     [CPPFLAGS="$saved_CPPFLAGS"])
+
+    if test -n "$zlib_lib"; then
+      LDFLAGS="$LDFLAGS -L$zlib_lib"
+    fi
+
+    AC_CHECK_LIB([z], [compress2],,
+                 [LDFLAGS="$saved_LDFLAGS"; unset HAVE_ZLIB])
+    AC_CHECK_FUNC([compress2], [HAVE_COMPRESS2="yes"])
+
+    if test -z "$HAVE_ZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      AC_MSG_ERROR([couldn't find zlib library])
+    fi
+    ;;
+esac
+
+if test "x$HAVE_ZLIB" = "xyes" -a "x$HAVE_ZLIB_H" = "xyes" -a "x$HAVE_COMPRESS2" = "xyes"; then
+  AC_DEFINE(HAVE_FILTER_DEFLATE, 1,
+            [Define if support for deflate filter is enabled])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Is the szlib present? It has a header file `szlib.h' and a library
+dnl `-lsz' and their locations might be specified with the `--with-szlib'
+dnl command-line switch. The value is an include path and/or a library path.
+dnl If the library path is specified then it must be preceded by a comma.
+dnl
+AC_ARG_WITH([szlib],
+            [AC_HELP_STRING([--with-szlib=DIR],
+                            [Use szlib library for external szlib I/O
+                             filter [default=yes]])],,
+            withval=yes)
+
+case $withval in
+  yes)
+    HAVE_SZLIB="yes"
+    AC_CHECK_HEADERS([szlib.h], [HAVE_SZLIB_H="yes"])
+    AC_CHECK_LIB([sz], [SZ_BufftoBuffCompress],, [unset HAVE_SZLIB])
+
+    if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      AC_MSG_ERROR([couldn't find szlib library])
+    fi
+    ;;
+  no)
+    HAVE_SZLIB="no"
+    AC_MSG_CHECKING([for szlib])
+    AC_MSG_RESULT([suppressed])
+    ;;
+  *)
+    HAVE_SZLIB="yes"
+    case "$withval" in
+      *,*)
+        szlib_inc="`echo $withval |cut -f1 -d,`"
+        szlib_lib="`echo $withval |cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          szlib_inc="$withval/include"
+          szlib_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+    dnl Trying to include -I/usr/include and -L/usr/lib is redundant and
+    dnl can mess some compilers up.
+    if test "X$szlib_inc" = "X/usr/include"; then
+      szlib_inc=""
+    fi
+    if test "X$szlib_lib" = "X/usr/lib"; then
+      szlib_lib=""
+    fi
+
+    saved_CPPFLAGS="$CPPFLAGS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    if test -n "$szlib_inc"; then
+      CPPFLAGS="$CPPFLAGS -I$szlib_inc"
+    fi
+
+    AC_CHECK_HEADERS([szlib.h],
+                     [HAVE_SZLIB_H="yes"],
+                     [CPPFLAGS="$saved_CPPFLAGS"])
+
+    if test -n "$szlib_lib"; then
+      LDFLAGS="$LDFLAGS -L$szlib_lib"
+    fi
+
+    AC_CHECK_LIB([sz], [SZ_BufftoBuffCompress],,
+                 [LDFLAGS="$saved_LDFLAGS"; unset HAVE_SZLIB])
+
+    if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      AC_MSG_ERROR([couldn't find szlib library])
+    fi
+    ;;
+esac
+
+if test "x$HAVE_SZLIB" = "xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then
+  AC_DEFINE(HAVE_FILTER_SZIP, 1,
+            [Define if support for szip filter is enabled])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Should the Stream Virtual File Driver be compiled in ?
+dnl
+AC_MSG_CHECKING([for Stream Virtual File Driver support])
+AC_ARG_ENABLE([stream-vfd],
+              [AC_HELP_STRING([--enable-stream-vfd],
+                              [Build the Stream Virtual File Driver
+                               [default=no]])],
+              [STREAM_VFD=$enableval])
+
+if test "$STREAM_VFD" = "yes"; then
+  AC_MSG_RESULT([yes])
+  AC_CHECK_HEADERS([netinet/tcp.h sys/filio.h])
+  AC_DEFINE([HAVE_STREAM], [1],
+            [Define if the stream virtual file driver should be compiled])
+
+  dnl Check if 'socklen_t' available
+  AC_MSG_CHECKING([if socklen_t is defined])
+  AC_TRY_COMPILE([
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+  ],
+    [socklen_t foo; return 0;],
+    AC_DEFINE([HAVE_SOCKLEN_T], 1,
+              [Define if \`socklen_t' is defined])
+    AC_MSG_RESULT([yes]),
+    AC_MSG_RESULT([no])
+  )
+else
+  AC_MSG_RESULT([not configured])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Checks for header files.
+dnl
+
+dnl Checkpoint the cache
+AC_CACHE_SAVE
+
+AC_MSG_CHECKING(make)
+AC_SUBST_FILE(DEPEND)
+if test "`${MAKE-make} --version -f /dev/null 2>/dev/null |\
+          sed -n 1p|cut -c1-8`" = "GNU Make"; then
+  AC_MSG_RESULT(GNU make)
+  GMAKE=yes
+  if test "X$GCC" = "Xyes"; then
+    DEPEND=config/depend1
+  else
+    DEPEND=config/depend2
+  fi
+else
+  AC_MSG_RESULT(generic)
+fi
+
+dnl How do we include another file into a Makefile?
+if test -z "$DEPEND"; then
+  AC_MSG_CHECKING(how to include a makefile)
+
+  dnl The include file contains the target for `foo'
+  cat >makeinc <<EOF
+foo:
+	@:
+EOF
+
+  while true; do dnl for break
+    dnl pmake. We have to be careful because some pmake think that the
+    dnl contents of the MAKE environment variable is a target.
+    echo '.include <makeinc>' >maketest
+    if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      AC_MSG_RESULT([.include <FILE>])
+      DEPEND=config/depend3
+      break
+    fi
+ 
+    dnl Most make's use `include FILE'
+    echo 'include makeinc' >maketest
+    if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      AC_MSG_RESULT(include FILE)
+      DEPEND=config/depend4
+      break;
+    fi
+
+    dnl default
+    AC_MSG_RESULT(you have a deficient make command)
+    DEPEND=config/dependN
+    break
+  done
+  rm makeinc maketest
+fi
+
+dnl Some cleanup stuff
+rm -f conftest core core.* *.core conftest.o conftest.c dummy.o $ac_clean_files
+
+dnl ----------------------------------------------------------------------
+dnl Determine the runtime libraries we may need to include in the
+dnl libtools command so that executables will find the correct dynamic
+dnl libraries.
+dnl 
+DYNAMIC_DIRS=""
+if test -n "$LDFLAGS"; then
+  for d in $LDFLAGS ; do
+    case "$d" in
+      -L*)
+        d=`echo $d | sed -e 's/-L//g'`
+        case "$d" in
+          .*)
+            dnl If the path isn't absolute, make it so by prepending the
+            dnl ROOT directory to it.
+            d=${ROOT}/$d
+            ;;
+        esac
+        DYNAMIC_DIRS="-R${d} $DYNAMIC_DIRS"
+        ;;
+    esac
+  done
+fi
+AC_SUBST(DYNAMIC_DIRS)
+
+dnl ----------------------------------------------------------------------
+dnl Build the Makefiles.  Almost every Makefile.in will begin with the line
+dnl `@COMMENCE@' and end with the line `@CONCLUDE@'.  These lines insert
+dnl various files from the config directory into the Makefile.
+dnl
+AC_SUBST_FILE(COMMENCE) COMMENCE=config/commence
+AC_SUBST_FILE(CONCLUDE) CONCLUDE=config/conclude
+
+dnl The directory search list
+if test -z "$SEARCH"; then
+  AC_SUBST(SEARCH) SEARCH='$(srcdir) $(top_builddir)/src $(top_srcdir)/src'
+  cmd='echo $SEARCH |sed "s/ /'$SEARCH_SEP'/g"'
+  SEARCH="$SEARCH_RULE`eval $cmd`"
+fi
+
+dnl We don't need to say when we're entering directories if we're using
+dnl GNU make becuase make does it for us.
+if test "X$GMAKE" = "Xyes"; then
+  AC_SUBST(SETX) SETX=":"
+else
+  AC_SUBST(SETX) SETX="set -x"
+fi
+
+dnl Some cleanup stuff
+rm -f conftest conftest.o conftest.c core core.* *.core dummy.o
+
+dnl Build config.status, touch the stamp files, and build all the Makefiles.
+dnl The order is such that the first `make' does not need to update any
+dnl configuration information. See config/commence.in for the order in which
+dnl things need to be done.
+
+dnl Then the config.status file (but not makefiles)
+saved_no_create=$no_create
+no_create=yes
+AC_CONFIG_FILES([config/depend1
+                 config/depend2
+                 config/depend3
+                 config/depend4
+                 config/dependN
+                 config/commence
+                 config/conclude
+                 Makefile
+                 src/Makefile
+                 src/h5c++
+                 test/Makefile
+                 examples/Makefile])
+AC_OUTPUT
+no_create=$saved_no_create
+
+dnl Finally the makefiles
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+chmod 755 src/h5c++
+
+dnl ----------------------------------------------------------------------
+dnl Print out a summary of what we are going to build.
+dnl
+if test -z "$ECHO_N" -o -z "$ECHO_C"; then
+  if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+    if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+      ECHO_N=''
+      ECHO_C='
+'
+    else
+      ECHO_N=-n
+      ECHO_C=''
+    fi
+  else
+    ECHO_N=''
+    ECHO_C='\c'
+  fi
+fi
+
+PRINT_PLAIN() {
+  echo $ECHO_N "$1$ECHO_C"
+  echo $ECHO_N "$1$ECHO_C" 1>>src/libhdf5_cpp.settings
+}
+
+PRINT_N() {
+  echo $ECHO_N "$1:  $ECHO_C"
+  echo $ECHO_N "$1:  $ECHO_C" 1>>src/libhdf5_cpp.settings
+}
+
+PRINT() {
+  echo "$1"
+  echo "$1" 1>>src/libhdf5_cpp.settings
+}
+
+dnl ----------------------------------------------------------------------
+dnl Print "Yes" if all arguments are "yes", otherwise "No"
+dnl
+IF_YES_NO() {
+  if test $# -lt 1; then
+    PRINT "No"
+    return
+  else
+    while test $# -gt 0; do
+      if test "$1" != "yes"; then
+        PRINT "No"
+        return
+      fi
+      shift
+    done
+  fi
+  PRINT "Yes"
+}
+
+IF_ENABLED_DISABLED() {
+  if test "$1" = "yes"; then
+    PRINT "Enabled"
+  else
+    PRINT "Disabled"
+  fi
+}
+
+PRINT "C++ Configure Summary"
+PRINT "Compiling Options:"
+
+PRINT_N "                   C++ Compiler"
+PRINT "$CXX"
+
+PRINT_N "                       CXXFLAGS"
+PRINT "$CXXFLAGS"
+
+PRINT "Features:"

Added: packages/hdf5/branches/upstream/current/c++/examples/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/c++/examples/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/examples/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,16 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+

Added: packages/hdf5/branches/upstream/current/c++/examples/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/c++/examples/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/examples/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,75 @@
+## HDF5-C++ examples/Makefile(.in)
+##
+##
+## 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.
+##
+##
+##
+top_srcdir=@top_srcdir@/..
+top_builddir=../..
+srcdir=@srcdir@
+
+ at COMMENCE@
+
+## Replace building CC with the just installed h5cc
+CXX=$(bindir)/h5c++
+CPPFLAGS=-I. -I$(srcdir)
+CFLAGS=
+
+hdf5_srcdir=$(top_srcdir)/src
+hdf5_builddir=$(top_builddir)/src
+
+## List all source files here. The list of object files will be
+## created by replacing the `.cpp' with a `.lo'. This list is necessary
+## for building automatic dependencies.
+TEST_SRC=create.cpp readdata.cpp writedata.cpp compound.cpp extend_ds.cpp \
+	 chunks.cpp h5group.cpp
+TEST_OBJ=$(TEST_SRC:.cpp=.lo)
+
+EXAMPLE_PROGS=$(TEST_SRC)
+
+## These are the programs that `make all' or `make tests' will build and which
+## `make check' will run. List them in the order they should be run.
+TEST_PROGS=$(TEST_SRC:.cpp=)
+
+##TEST_SCRIPTS=$(srcdir)/testexamples.sh
+
+## These are the files that `make clean' (and derivatives) will remove from
+## this directory.
+CLEAN=*.h5
+
+## How to build the programs... they all depend on the Fortran & C hdf5 libraries
+$(TEST_PROGS): $(LIB) $(LIBHDF5)
+
+compound: $(srcdir)/compound.cpp
+	$(CXX) $(CPPFLAGS) -o $@ $(srcdir)/compound.cpp
+
+h5group: $(srcdir)/h5group.cpp
+	$(CXX) $(CPPFLAGS) -o $@ $(srcdir)/h5group.cpp
+
+create: $(srcdir)/create.cpp
+	$(CXX) $(CPPFLAGS) -o $@ $(srcdir)/create.cpp
+
+readdata: $(srcdir)/readdata.cpp
+	$(CXX) $(CPPFLAGS) -o $@ $(srcdir)/readdata.cpp
+
+chunks: $(srcdir)/chunks.cpp
+	$(CXX) $(CPPFLAGS) -o $@ $(srcdir)/chunks.cpp
+
+extend_ds: $(srcdir)/extend_ds.cpp
+	$(CXX) $(CPPFLAGS) -o $@ $(srcdir)/extend_ds.cpp
+
+writedata: $(srcdir)/writedata.cpp
+	$(CXX) $(CPPFLAGS) -o $@ $(srcdir)/writedata.cpp
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/c++/examples/chunks.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/examples/chunks.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/examples/chunks.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,229 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 read data from a chunked dataset.
+ *   We will read from the file created by extend.C
+ */
+
+#include <string>
+
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+#include "H5Cpp.h"
+
+#ifndef H5_NO_NAMESPACE
+using namespace H5;
+#endif
+
+const string FILE_NAME( "SDSextendible.h5" );
+const string DATASET_NAME( "ExtendibleArray" );
+const int      NX = 10;
+const int      NY = 5;
+const int      RANK = 2;
+const int      RANKC = 1;
+
+int main (void)
+{
+   hsize_t	i, j;
+
+   // Try block to detect exceptions raised by any of the calls inside it
+   try
+   {
+      /*
+       * Turn off the auto-printing when failure occurs so that we can
+       * handle the errors appropriately
+       */
+      Exception::dontPrint();
+
+      /*
+       * Open the file and the dataset.
+       */
+      H5File file( FILE_NAME, H5F_ACC_RDONLY );
+      DataSet dataset = file.openDataSet( DATASET_NAME );
+
+      /*
+       * Get filespace for rank and dimension
+       */
+      DataSpace filespace = dataset.getSpace();
+
+      /*
+       * Get number of dimensions in the file dataspace
+       */
+      int rank = filespace.getSimpleExtentNdims();
+
+      /*
+       * Get and print the dimension sizes of the file dataspace
+       */
+      hsize_t     dims[2];       // dataset dimensions
+      rank = filespace.getSimpleExtentDims( dims );
+      cout << "dataset rank = " << rank << ", dimensions "
+	<< (unsigned long)(dims[0]) << " x " << (unsigned long)(dims[1])
+	<< endl;
+
+      /*
+       * Get creation properties list.
+       */
+      DSetCreatPropList cparms = dataset.getCreatePlist();
+
+      /*
+       * Check if dataset is chunked.
+       */
+      hsize_t     chunk_dims[2];
+      int         rank_chunk;
+      if( H5D_CHUNKED == cparms.getLayout() )
+      {
+	 /*
+	  * Get chunking information: rank and dimensions
+	  */
+	 rank_chunk = cparms.getChunk( 2, chunk_dims);
+         cout << "chunk rank " << rank_chunk << "dimensions "
+	   << (unsigned long)(chunk_dims[0]) << " x "
+	   << (unsigned long)(chunk_dims[1]) << endl;
+      }
+
+      /*
+       * Define the memory space to read dataset.
+       */
+      DataSpace mspace1( RANK, dims );
+
+      /*
+       * Read dataset back and display.
+       */
+      int data_out[NX][NY];  // buffer for dataset to be read
+      dataset.read( data_out, PredType::NATIVE_INT, mspace1, filespace );
+      cout << "\n";
+      cout << "Dataset: \n";
+      for (j = 0; j < dims[0]; j++)
+      {
+	 for (i = 0; i < dims[1]; i++)
+	    cout << data_out[j][i] << " ";
+	 cout << endl;
+      }
+
+      /*
+       *	    dataset rank 2, dimensions 10 x 5
+       *	    chunk rank 2, dimensions 2 x 5
+
+       *	    Dataset:
+       *	    1 1 1 3 3
+       *	    1 1 1 3 3
+       *	    1 1 1 0 0
+       *	    2 0 0 0 0
+       *	    2 0 0 0 0
+       *	    2 0 0 0 0
+       *	    2 0 0 0 0
+       *	    2 0 0 0 0
+       *	    2 0 0 0 0
+       *	    2 0 0 0 0
+       */
+
+      /*
+       * Read the third column from the dataset.
+       * First define memory dataspace, then define hyperslab
+       * and read it into column array.
+       */
+      hsize_t     col_dims[1];
+      col_dims[0] = 10;
+      DataSpace mspace2( RANKC, col_dims );
+
+      /*
+       * Define the column (hyperslab) to read.
+       */
+      hsize_t offset[2] = { 0, 2 };
+      hsize_t  count[2] = { 10, 1 };
+      int      column[10];        // buffer for column to be read
+
+      filespace.selectHyperslab( H5S_SELECT_SET, count, offset );
+      dataset.read( column, PredType::NATIVE_INT, mspace2, filespace );
+
+      cout << endl;
+      cout << "Third column: " << endl;
+      for (i = 0; i < 10; i++)
+	 cout << column[i] << endl;
+
+      /*
+       *	    Third column:
+       *	    1
+       *	    1
+       *	    1
+       *	    0
+       *	    0
+       *	    0
+       *	    0
+       *	    0
+       *	    0
+       *	    0
+       */
+
+      /*
+       * Define the memory space to read a chunk.
+       */
+      DataSpace mspace3( rank_chunk, chunk_dims );
+
+      /*
+       * Define chunk in the file (hyperslab) to read.
+       */
+      offset[0] = 2;
+      offset[1] = 0;
+      count[0]  = chunk_dims[0];
+      count[1]  = chunk_dims[1];
+      filespace.selectHyperslab( H5S_SELECT_SET, count, offset );
+
+      /*
+       * Read chunk back and display.
+       */
+      int chunk_out[2][5];   // buffer for chunk to be read
+      dataset.read( chunk_out, PredType::NATIVE_INT, mspace3, filespace );
+      cout << endl;
+      cout << "Chunk:" << endl;
+      for (j = 0; j < chunk_dims[0]; j++)
+      {
+	 for (i = 0; i < chunk_dims[1]; i++)
+	    cout << chunk_out[j][i] << " ";
+	 cout << endl;
+      }
+      /*
+       *	 Chunk:
+       *	 1 1 1 0 0
+       *	 2 0 0 0 0
+       */
+   }  // end of try block
+
+   // catch failure caused by the H5File operations
+   catch( FileIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSet operations
+   catch( DataSetIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSpace operations
+   catch( DataSpaceIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   return 0;
+}

Added: packages/hdf5/branches/upstream/current/c++/examples/compound.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/examples/compound.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/examples/compound.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,215 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 datatype,
+ * write an array which has the compound datatype to the file,
+ * and read back fields' subsets.
+ */
+
+#include <string>
+
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+#include "H5Cpp.h"
+
+#ifndef H5_NO_NAMESPACE
+using namespace H5;
+#endif
+
+const string FILE_NAME( "SDScompound.h5" );
+const string DATASET_NAME( "ArrayOfStructures" );
+const string MEMBER1( "a_name" );
+const string MEMBER2( "b_name" );
+const string MEMBER3( "c_name" );
+const int   LENGTH = 10;
+const int   RANK = 1;
+
+int main(void)
+{
+   /* First structure  and dataset*/
+   typedef struct s1_t {
+	int      a;
+	float  b;
+	double c;
+   } s1_t;
+
+   /* Second structure (subset of s1_t)  and dataset*/
+   typedef struct s2_t {
+	double c;
+	int      a;
+   } s2_t;
+
+   // Try block to detect exceptions raised by any of the calls inside it
+   try
+   {
+      /*
+       * Initialize the data
+       */
+      int        i;
+      s1_t       s1[LENGTH];
+      for (i = 0; i< LENGTH; i++)
+      {
+         s1[i].a = i;
+         s1[i].b = i*i;
+         s1[i].c = 1./(i+1);
+      }
+
+      /*
+       * Turn off the auto-printing when failure occurs so that we can
+       * handle the errors appropriately
+       */
+      Exception::dontPrint();
+
+      /*
+       * Create the data space.
+       */
+      hsize_t    dim[] = {LENGTH};   /* Dataspace dimensions */
+      DataSpace space( RANK, dim );
+
+      /*
+       * Create the file.
+       */
+      H5File* file = new H5File( FILE_NAME, H5F_ACC_TRUNC );
+
+      /*
+       * Create the memory datatype.
+       */
+      CompType mtype1( sizeof(s1_t) );
+      mtype1.insertMember( MEMBER1, HOFFSET(s1_t, a), PredType::NATIVE_INT);
+      mtype1.insertMember( MEMBER3, HOFFSET(s1_t, c), PredType::NATIVE_DOUBLE);
+      mtype1.insertMember( MEMBER2, HOFFSET(s1_t, b), PredType::NATIVE_FLOAT);
+
+      /*
+       * Create the dataset.
+       */
+      DataSet* dataset;
+      dataset = new DataSet( file->createDataSet( DATASET_NAME, mtype1, space ));
+
+      /*
+       * Wtite data to the dataset;
+       */
+      dataset->write( s1, mtype1 );
+
+      /*
+       * Release resources
+       */
+      delete dataset;
+      delete file;
+
+      // Get the class of the first member in mtype1, then get its type
+      H5T_class_t member1_class = mtype1.getMemberClass( 2 );
+      if( member1_class == H5T_FLOAT )
+      {
+	 FloatType member2 = mtype1.getMemberFloatType( 2 );
+	 string norm_string;
+	 H5T_norm_t norm = member2.getNorm( norm_string );
+	 cout << "Normalization type is " << norm_string << endl;
+      }
+
+      /*
+       * Open the file and the dataset.
+       */
+      file = new H5File( FILE_NAME, H5F_ACC_RDONLY );
+      dataset = new DataSet (file->openDataSet( DATASET_NAME ));
+
+      /*
+       * Create a datatype for s2
+       */
+      CompType mtype2( sizeof(s2_t) );
+
+      mtype2.insertMember( MEMBER3, HOFFSET(s2_t, c), PredType::NATIVE_DOUBLE);
+      mtype2.insertMember( MEMBER1, HOFFSET(s2_t, a), PredType::NATIVE_INT);
+
+      /*
+       * Read two fields c and a from s1 dataset. Fields in the file
+       * are found by their names "c_name" and "a_name".
+       */
+      s2_t       s2[LENGTH];
+      dataset->read( s2, mtype2 );
+
+      /*
+       * Display the fields
+       */
+      cout << endl << "Field c : " << endl;
+      for( i = 0; i < LENGTH; i++)
+	 cout << s2[i].c << " ";
+      cout << endl;
+
+      cout << endl << "Field a : " << endl;
+      for( i = 0; i < LENGTH; i++)
+	 cout << s2[i].a << " ";
+      cout << endl;
+
+      /*
+       * Create a datatype for s3.
+       */
+      CompType mtype3( sizeof(float) );
+
+      mtype3.insertMember( MEMBER2, 0, PredType::NATIVE_FLOAT);
+
+      /*
+       * Read field b from s1 dataset. Field in the file is found by its name.
+       */
+      float s3[LENGTH];  // Third "structure" - used to read float field of s1)
+      dataset->read( s3, mtype3 );
+
+      /*
+       * Display the field
+       */
+      cout << endl << "Field b : " << endl;
+      for( i = 0; i < LENGTH; i++)
+	 cout << s3[i] << " ";
+      cout << endl;
+
+      /*
+       * Release resources
+       */
+      delete dataset;
+      delete file;
+   }  // end of try block
+
+   // catch failure caused by the H5File operations
+   catch( FileIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSet operations
+   catch( DataSetIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSpace operations
+   catch( DataSpaceIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSpace operations
+   catch( DataTypeIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   return 0;
+}

Added: packages/hdf5/branches/upstream/current/c++/examples/create.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/examples/create.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/examples/create.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,133 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 writes a dataset to a new HDF5 file.
+ */
+
+#include <string>
+
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+#include "H5Cpp.h"
+
+#ifndef H5_NO_NAMESPACE
+using namespace H5;
+#endif
+
+const string	FILE_NAME( "SDS.h5" );
+const string	DATASET_NAME( "IntArray" );
+const int 	NX = 5;                    // dataset dimensions
+const int 	NY = 6;
+const int 	RANK = 2;
+
+int main (void)
+{
+   /*
+    * Data initialization.
+    */
+   int i, j;
+   int data[NX][NY];          // buffer for data to write
+   for (j = 0; j < NX; j++)
+   {
+      for (i = 0; i < NY; i++)
+	 data[j][i] = i + j;
+   }
+   /*
+    * 0 1 2 3 4 5
+    * 1 2 3 4 5 6
+    * 2 3 4 5 6 7
+    * 3 4 5 6 7 8
+    * 4 5 6 7 8 9
+    */
+
+   // Try block to detect exceptions raised by any of the calls inside it
+   try
+   {
+      /*
+       * Turn off the auto-printing when failure occurs so that we can
+       * handle the errors appropriately
+       */
+      Exception::dontPrint();
+
+      /*
+       * Create a new file using H5F_ACC_TRUNC access,
+       * default file creation properties, and default file
+       * access properties.
+       */
+      H5File file( FILE_NAME, H5F_ACC_TRUNC );
+
+      /*
+       * Define the size of the array and create the data space for fixed
+       * size dataset.
+       */
+      hsize_t     dimsf[2];              // dataset dimensions
+      dimsf[0] = NX;
+      dimsf[1] = NY;
+      DataSpace dataspace( RANK, dimsf );
+
+      /*
+       * Define datatype for the data in the file.
+       * We will store little endian INT numbers.
+       */
+      IntType datatype( PredType::NATIVE_INT );
+      datatype.setOrder( H5T_ORDER_LE );
+
+      /*
+       * Create a new dataset within the file using defined dataspace and
+       * datatype and default dataset creation properties.
+       */
+      DataSet dataset = file.createDataSet( DATASET_NAME, datatype, dataspace );
+
+      /*
+       * Write the data to the dataset using default memory space, file
+       * space, and transfer properties.
+       */
+      dataset.write( data, PredType::NATIVE_INT );
+   }  // end of try block
+
+   // catch failure caused by the H5File operations
+   catch( FileIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSet operations
+   catch( DataSetIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSpace operations
+   catch( DataSpaceIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSpace operations
+   catch( DataTypeIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   return 0;  // successfully terminated
+}
+

Added: packages/hdf5/branches/upstream/current/c++/examples/expected.out
===================================================================
--- packages/hdf5/branches/upstream/current/c++/examples/expected.out	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/examples/expected.out	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,82 @@
+Data set has INTEGER type
+Little endian byte ordering (0)
+Data size is 4
+rank 2, dimensions 5 x 6
+0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 
+3 4 5 6 0 0 0 
+4 5 6 7 0 0 0 
+5 6 7 8 0 0 0 
+0 0 0 0 0 0 0 
+53  1  2  0  3  4  0  5  6  0  7  8  
+0  9  10  0  11  12  0  13  14  0  15  16  
+0  17  18  0  19  20  0  21  22  0  23  24  
+0  0  0  59  0  61  0  0  0  0  0  0  
+0  25  26  0  27  28  0  29  30  0  31  32  
+0  33  34  0  35  36  67  37  38  0  39  40  
+0  41  42  0  43  44  0  45  46  0  47  48  
+0  0  0  0  0  0  0  0  0  0  0  0  
+Normalization type is H5T_NORM_IMPLIED (0)
+
+Field c : 
+1 0.5 0.333333 0.25 0.2 0.166667 0.142857 0.125 0.111111 0.1 
+
+Field a : 
+0 1 2 3 4 5 6 7 8 9 
+
+Field b : 
+0 1 4 9 16 25 36 49 64 81 
+1  1  1  3  3  
+1  1  1  3  3  
+1  1  1  0  0  
+2  0  0  0  0  
+2  0  0  0  0  
+2  0  0  0  0  
+2  0  0  0  0  
+2  0  0  0  0  
+2  0  0  0  0  
+2  0  0  0  0  
+dataset rank = 2, dimensions 10 x 5
+chunk rank 2dimensions 2 x 5
+
+Dataset: 
+1 1 1 3 3 
+1 1 1 3 3 
+1 1 1 0 0 
+2 0 0 0 0 
+2 0 0 0 0 
+2 0 0 0 0 
+2 0 0 0 0 
+2 0 0 0 0 
+2 0 0 0 0 
+2 0 0 0 0 
+
+Third column: 
+1
+1
+1
+0
+0
+0
+0
+0
+0
+0
+
+Chunk:
+1 1 1 0 0 
+2 0 0 0 0 
+dataset "/Data/Compressed_Data" is open
+dataset "/Data_new/Compressed_Data" is open
+
+Iterating over elements in the file
+Name : Data
+Name : Data_new
+
+Unlinking...
+"Data" is unlinked
+
+Iterating over elements in the file again
+Name : Data_new
+

Added: packages/hdf5/branches/upstream/current/c++/examples/extend_ds.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/examples/extend_ds.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/examples/extend_ds.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,232 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 work with extendible dataset.
+ *   In the current version of the library dataset MUST be
+ *   chunked.
+ *
+ */
+
+#include <string>
+
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+#include "H5Cpp.h"
+
+#ifndef H5_NO_NAMESPACE
+using namespace H5;
+#endif
+
+const string FILE_NAME( "SDSextendible.h5" );
+const string DATASET_NAME( "ExtendibleArray" );
+const int      NX = 10;
+const int      NY = 5;
+const int      RANK = 2;
+
+int main (void)
+{
+   /*
+    * Try block to detect exceptions raised by any of the calls inside it
+    */
+   try
+   {
+      /*
+       * Turn off the auto-printing when failure occurs so that we can
+       * handle the errors appropriately
+       */
+      Exception::dontPrint();
+
+      /*
+       * Create the data space with unlimited dimensions.
+       */
+      hsize_t      dims[2]  = { 3, 3};  // dataset dimensions at creation
+      hsize_t      maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};
+      DataSpace mspace1( RANK, dims, maxdims);
+
+      /*
+       * Create a new file. If file exists its contents will be overwritten.
+       */
+      H5File file( FILE_NAME, H5F_ACC_TRUNC );
+
+      /*
+       * Modify dataset creation properties, i.e. enable chunking.
+       */
+      DSetCreatPropList cparms;
+
+      hsize_t      chunk_dims[2] ={2, 5};
+      cparms.setChunk( RANK, chunk_dims );
+
+      /*
+       * Set fill value for the dataset
+       */
+      int fill_val = 0;
+      cparms.setFillValue( PredType::NATIVE_INT, &fill_val);
+
+      /*
+       * Create a new dataset within the file using cparms
+       * creation properties.
+       */
+      DataSet dataset = file.createDataSet( DATASET_NAME, PredType::NATIVE_INT, mspace1, cparms);
+
+      /*
+       * Extend the dataset. This call assures that dataset is at least 3 x 3.
+       */
+      hsize_t      size[2];
+      size[0]   = 3;
+      size[1]   = 3;
+      dataset.extend( size );
+
+      /*
+       * Select a hyperslab.
+       */
+      DataSpace fspace1 = dataset.getSpace ();
+      hsize_t     offset[2];
+      offset[0] = 0;
+      offset[1] = 0;
+      hsize_t      dims1[2] = { 3, 3};            /* data1 dimensions */
+      fspace1.selectHyperslab( H5S_SELECT_SET, dims1, offset );
+
+      /*
+       * Write the data to the hyperslab.
+       */
+      int       data1[3][3] = { {1, 1, 1},       /* data to write */
+				{1, 1, 1},
+				{1, 1, 1} };
+      dataset.write( data1, PredType::NATIVE_INT, mspace1, fspace1 );
+
+      /*
+       * Extend the dataset. Dataset becomes 10 x 3.
+       */
+      hsize_t   dims2[2] = { 7, 1};            /* data2 dimensions */
+      dims[0]   = dims1[0] + dims2[0];
+      size[0]   = dims[0];
+      size[1]   = dims[1];
+      dataset.extend( size );
+
+      /*
+       * Select a hyperslab.
+       */
+      DataSpace fspace2 = dataset.getSpace ();
+      offset[0] = 3;
+      offset[1] = 0;
+      fspace2.selectHyperslab( H5S_SELECT_SET, dims2, offset );
+
+      /*
+       * Define memory space
+       */
+      DataSpace mspace2( RANK, dims2 );
+
+      /*
+       * Write the data to the hyperslab.
+       */
+      int  data2[7]    = { 2, 2, 2, 2, 2, 2, 2};
+      dataset.write( data2, PredType::NATIVE_INT, mspace2, fspace2 );
+
+      /*
+       * Extend the dataset. Dataset becomes 10 x 5.
+       */
+      hsize_t   dims3[2] = { 2, 2};            /* data3 dimensions */
+      dims[1]   = dims1[1] + dims3[1];
+      size[0]   = dims[0];
+      size[1]   = dims[1];
+      dataset.extend( size );
+
+      /*
+       * Select a hyperslab
+       */
+      DataSpace fspace3 = dataset.getSpace ();
+      offset[0] = 0;
+      offset[1] = 3;
+      fspace3.selectHyperslab( H5S_SELECT_SET, dims3, offset );
+
+      /*
+       * Define memory space.
+       */
+      DataSpace mspace3( RANK, dims3 );
+
+      /*
+       * Write the data to the hyperslab.
+       */
+      int         data3[2][2] = { {3, 3}, {3, 3} };
+      dataset.write( data3, PredType::NATIVE_INT, mspace3, fspace3 );
+
+      /*
+       * Read the data from this dataset and display it.
+       */
+      int i, j;
+      int data_out[NX][NY];
+      for (i = 0; i < NX; i++)
+      {
+         for (j = 0; j < NY; j++)
+            data_out[i][j] = 0;
+      }
+      dataset.read( data_out, PredType::NATIVE_INT );
+      /*
+       * Resulting dataset
+       *
+       *	 1 1 1 3 3
+       *	 1 1 1 3 3
+       *	 1 1 1 0 0
+       *	 2 0 0 0 0
+       *	 2 0 0 0 0
+       *	 2 0 0 0 0
+       *	 2 0 0 0 0
+       *	 2 0 0 0 0
+       *	 2 0 0 0 0
+       *	 2 0 0 0 0
+       */
+      /*
+       * Display the result.
+       */
+      for (i=0; i < NX; i++)
+      {
+          for(j=0; j < NY; j++)
+             cout << data_out[i][j] << "  ";
+          cout << endl;
+      }
+   }  // end of try block
+
+   // catch failure caused by the H5File operations
+   catch( FileIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSet operations
+   catch( DataSetIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSpace operations
+   catch( DataSpaceIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSpace operations
+   catch( DataTypeIException error )
+   {
+      error.printError();
+      return -1;
+   }
+   return 0;
+}

Added: packages/hdf5/branches/upstream/current/c++/examples/h5group.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/examples/h5group.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/examples/h5group.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,223 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 creates a group in the file and dataset in the group.
+ * Hard link to the group object is created and the dataset is accessed
+ * under different names.
+ * Iterator function is used to find the object names in the root group.
+ * Note that the C++ API iterator function is not completed yet, thus
+ * the C version is used in this example.
+ */
+#include <string>
+
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+#include "H5Cpp.h"
+
+#ifndef H5_NO_NAMESPACE
+using namespace H5;
+#endif
+
+const string	FILE_NAME( "Group.h5" );
+const int	RANK = 2;
+
+// Operator function
+extern "C" herr_t file_info(hid_t loc_id, const char *name, void *opdata);
+
+int main(void)
+{
+
+    hsize_t  dims[2];
+    hsize_t  cdims[2];
+
+   // Try block to detect exceptions raised by any of the calls inside it
+   try
+   {
+      /*
+       * Turn off the auto-printing when failure occurs so that we can
+       * handle the errors appropriately
+       */
+      Exception::dontPrint();
+
+      /*
+       * Create the named file, truncating the existing one if any,
+       * using default create and access property lists.
+       */
+      H5File *file = new H5File( FILE_NAME, H5F_ACC_TRUNC );
+
+      /*
+       * Create a group in the file
+       */
+      Group* group = new Group( file->createGroup( "/Data" ));
+
+      /*
+       * Create dataset "Compressed Data" in the group using absolute
+       * name. Dataset creation property list is modified to use
+       * GZIP compression with the compression effort set to 6.
+       * Note that compression can be used only when dataset is chunked.
+       */
+      dims[0] = 1000;
+      dims[1] = 20;
+      cdims[0] = 20;
+      cdims[1] = 20;
+      DataSpace dataspace( RANK, dims ); // create the new dataspace
+					 // for the dataset
+
+      DSetCreatPropList ds_creatplist;  // create dataset creation prop list
+      ds_creatplist.setChunk( 2, cdims );  // then modify it for compression
+      ds_creatplist.setDeflate( 6 );
+
+      DataSet* dataset = new DataSet( file->createDataSet( "/Data/Compressed_Data", PredType::NATIVE_INT, dataspace, ds_creatplist ));
+
+      /*
+       * Close the dataset and the file.
+       */
+      delete dataset;
+      delete group;
+      delete file;
+
+      /*
+       * Now reopen the file and group in the file.
+       */
+      file = new H5File( FILE_NAME, H5F_ACC_RDWR );
+      group = new Group( file->openGroup( "Data" ));
+
+      /*
+       * Access "Compressed_Data" dataset in the group.
+       */
+      try {  // to determine if the dataset exists in the group
+         dataset = new DataSet( group->openDataSet( "Compressed_Data" ));
+      }
+      catch( GroupIException not_found_error )
+      {
+	 cout << " Dataset is not found." << endl;
+      }
+      cout << "dataset \"/Data/Compressed_Data\" is open" << endl;
+
+      /*
+       * Close the dataset.
+       */
+      delete dataset;
+
+      /*
+       * Create hard link to the Data group.
+       */
+      file->link( H5G_LINK_HARD, "Data", "Data_new" );
+
+      /*
+       * We can access "Compressed_Data" dataset using created
+       * hard link "Data_new".
+       */
+      try {  // to determine if the dataset exists in the file
+         dataset = new DataSet( file->openDataSet( "/Data_new/Compressed_Data" ));
+      }
+      catch( FileIException not_found_error )
+      {
+         cout << " Dataset is not found." << endl;
+      }
+      cout << "dataset \"/Data_new/Compressed_Data\" is open" << endl;
+
+      /*
+       * Close the dataset.
+       */
+      delete dataset;
+
+      /*
+       * Use iterator to see the names of the objects in the file
+       * root directory.
+       */
+      cout << endl << "Iterating over elements in the file" << endl;
+      herr_t idx = H5Giterate(file->getId(), "/", NULL, file_info, NULL);
+      cout << endl;
+
+      /*
+       * Unlink  name "Data" and use iterator to see the names
+       * of the objects in the file root direvtory.
+       */
+      cout << "Unlinking..." << endl;
+      try {  // attempt to unlink the dataset
+         file->unlink( "Data" );
+      }
+      catch( FileIException unlink_error )
+      {
+         cout << " unlink failed." << endl;
+      }
+      cout << "\"Data\" is unlinked" << endl;
+
+      cout << endl << "Iterating over elements in the file again" << endl;
+      idx = H5Giterate(file->getId(), "/", NULL, file_info, NULL);
+      cout << endl;
+
+      /*
+       * Close the file.
+       */
+      delete file;
+
+   }  // end of try block
+
+   // catch failure caused by the H5File operations
+   catch( FileIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSet operations
+   catch( DataSetIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSpace operations
+   catch( DataSpaceIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the Attribute operations
+   catch( AttributeIException error )
+   {
+      error.printError();
+      return -1;
+   }
+   return 0;
+}
+
+/*
+ * Operator function.
+ */
+herr_t
+file_info(hid_t loc_id, const char *name, void *opdata)
+{
+    hid_t group;
+    /*
+     * Open the group using its name.
+     */
+    group = H5Gopen(loc_id, name);
+
+    /*
+     * Display group name.
+     */
+    cout << "Name : " << name << endl;
+
+    H5Gclose(group);
+    return 0;
+ }
+

Added: packages/hdf5/branches/upstream/current/c++/examples/readdata.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/examples/readdata.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/examples/readdata.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,214 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 reads hyperslab from the SDS.h5 file into
+//      two-dimensional plane of a three-dimensional array.  Various
+//      information about the dataset in the SDS.h5 file is obtained.
+//
+
+#include <string>
+
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+#include "H5Cpp.h"
+
+#ifndef H5_NO_NAMESPACE
+using namespace H5;
+#endif
+
+const string FILE_NAME( "SDS.h5" );
+const string DATASET_NAME( "IntArray" );
+const int    NX_SUB = 3;	// hyperslab dimensions
+const int    NY_SUB = 4;
+const int    NX = 7;		// output buffer dimensions
+const int    NY = 7;
+const int    NZ = 3;
+const int    RANK_OUT = 3;
+
+int main (void)
+{
+   /*
+    * Output buffer initialization.
+    */
+   int i, j, k;
+   int         data_out[NX][NY][NZ ]; /* output buffer */
+   for (j = 0; j < NX; j++)
+   {
+      for (i = 0; i < NY; i++)
+      {
+ 	 for (k = 0; k < NZ ; k++)
+	    data_out[j][i][k] = 0;
+      }
+   }
+
+   /*
+    * Try block to detect exceptions raised by any of the calls inside it
+    */
+   try
+   {
+      /*
+       * Turn off the auto-printing when failure occurs so that we can
+       * handle the errors appropriately
+       */
+      Exception::dontPrint();
+
+      /*
+       * Open the specified file and the specified dataset in the file.
+       */
+      H5File file( FILE_NAME, H5F_ACC_RDONLY );
+      DataSet dataset = file.openDataSet( DATASET_NAME );
+
+      /*
+       * Get the class of the datatype that is used by the dataset.
+       */
+      H5T_class_t type_class = dataset.getTypeClass();
+
+      /*
+       * Get class of datatype and print message if it's an integer.
+       */
+      if( type_class == H5T_INTEGER )
+      {
+	 cout << "Data set has INTEGER type" << endl;
+
+         /*
+	  * Get the integer datatype
+          */
+	 IntType intype = dataset.getIntType();
+
+         /*
+          * Get order of datatype and print message if it's a little endian.
+          */
+	 string order_string;
+         H5T_order_t order = intype.getOrder( order_string );
+	 cout << order_string << endl;
+
+         /*
+          * Get size of the data element stored in file and print it.
+          */
+         size_t size = intype.getSize();
+         cout << "Data size is " << size << endl;
+      }
+
+      /*
+       * Get dataspace of the dataset.
+       */
+      DataSpace dataspace = dataset.getSpace();
+
+      /*
+       * Get the number of dimensions in the dataspace.
+       */
+      int rank = dataspace.getSimpleExtentNdims();
+
+      /*
+       * Get the dimension size of each dimension in the dataspace and
+       * display them.
+       */
+      hsize_t dims_out[2];
+      int ndims = dataspace.getSimpleExtentDims( dims_out, NULL);
+      cout << "rank " << rank << ", dimensions " <<
+	      (unsigned long)(dims_out[0]) << " x " <<
+	      (unsigned long)(dims_out[1]) << endl;
+
+      /*
+       * Define hyperslab in the dataset; implicitly giving strike and
+       * block NULL.
+       */
+      hsize_t      offset[2];	// hyperslab offset in the file
+      hsize_t      count[2];	// size of the hyperslab in the file
+      offset[0] = 1;
+      offset[1] = 2;
+      count[0]  = NX_SUB;
+      count[1]  = NY_SUB;
+      dataspace.selectHyperslab( H5S_SELECT_SET, count, offset );
+
+      /*
+       * Define the memory dataspace.
+       */
+      hsize_t     dimsm[3];              /* memory space dimensions */
+      dimsm[0] = NX;
+      dimsm[1] = NY;
+      dimsm[2] = NZ ;
+      DataSpace memspace( RANK_OUT, dimsm );
+
+      /*
+       * Define memory hyperslab.
+       */
+      hsize_t      offset_out[3];	// hyperslab offset in memory
+      hsize_t      count_out[3];	// size of the hyperslab in memory
+      offset_out[0] = 3;
+      offset_out[1] = 0;
+      offset_out[2] = 0;
+      count_out[0]  = NX_SUB;
+      count_out[1]  = NY_SUB;
+      count_out[2]  = 1;
+      memspace.selectHyperslab( H5S_SELECT_SET, count_out, offset_out );
+
+      /*
+       * Read data from hyperslab in the file into the hyperslab in
+       * memory and display the data.
+       */
+      dataset.read( data_out, PredType::NATIVE_INT, memspace, dataspace );
+
+      for (j = 0; j < NX; j++)
+      {
+	for (i = 0; i < NY; i++)
+	   cout << data_out[j][i][0] << " ";
+	cout << endl;
+      }
+      /*
+       * 0 0 0 0 0 0 0
+       * 0 0 0 0 0 0 0
+       * 0 0 0 0 0 0 0
+       * 3 4 5 6 0 0 0
+       * 4 5 6 7 0 0 0
+       * 5 6 7 8 0 0 0
+       * 0 0 0 0 0 0 0
+       */
+   }  // end of try block
+
+   // catch failure caused by the H5File operations
+   catch( FileIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSet operations
+   catch( DataSetIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSpace operations
+   catch( DataSpaceIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSpace operations
+   catch( DataTypeIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   return 0;  // successfully terminated
+}
+

Added: packages/hdf5/branches/upstream/current/c++/examples/testexamples.sh
===================================================================
--- packages/hdf5/branches/upstream/current/c++/examples/testexamples.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/examples/testexamples.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,67 @@
+#!/bin/sh
+#
+# 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.
+
+CMP='cmp -s'
+DIFF='diff -c'
+
+nerrors=0
+verbose=yes
+
+# The build (current) directory might be different than the source directory.
+if test -z "$srcdir"; then
+   srcdir=.
+fi
+
+actual=sample.out
+expect=$srcdir/expected.out
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Testing".
+TESTING()
+{
+    SPACES="                                                               "
+    echo "Testing $* $SPACES" |cut -c1-70 |tr -d '\012'
+}
+
+TESTING C++ Examples
+
+(
+   ./create
+   ./readdata
+   ./writedata
+   ./compound
+   ./extend_ds
+   ./chunks
+   ./h5group
+) > $actual
+
+if $CMP $expect $actual; then
+   echo " PASSED"
+else
+   echo "*FAILED*"
+   echo "    Expected result differs from actual result"
+   nerrors="`expr $nerrors + 1`"
+   test yes = "$verbose" && $DIFF $expect $actual | sed 's/^/    /'
+fi
+
+# Clean up output file
+if test -z "$HDF5_NOCLEANUP"; then
+   rm -f $actual
+fi
+
+if test $nerrors -eq 0 ; then
+   echo "All tests passed."
+fi
+
+exit $nerrors


Property changes on: packages/hdf5/branches/upstream/current/c++/examples/testexamples.sh
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/c++/examples/writedata.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/examples/writedata.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/examples/writedata.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,248 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 program shows how the select_hyperslab and select_elements
+ *  functions are used to write selected data from memory to the file.
+ *  Program takes 48 elements from the linear buffer and writes them into
+ *  the matrix using 3x2 blocks, (4,3) stride and (2,4) count.
+ *  Then four elements  of the matrix are overwritten with the new values and
+ *  file is closed. Program reopens the file and reads and displays the result.
+ */
+
+#include <string>
+
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+#include "H5Cpp.h"
+
+#ifndef H5_NO_NAMESPACE
+using namespace H5;
+#endif
+
+const string FILE_NAME( "Select.h5" );
+const string DATASET_NAME( "Matrix in file" );
+const int   MSPACE1_RANK = 1;	// Rank of the first dataset in memory
+const int   MSPACE1_DIM = 50;   // Dataset size in memory
+const int   MSPACE2_RANK = 1;	// Rank of the second dataset in memory
+const int   MSPACE2_DIM = 4;	// Dataset size in memory
+const int   FSPACE_RANK = 2;	// Dataset rank as it is stored in the file
+const int   FSPACE_DIM1 = 8;	// Dimension sizes of the dataset as it is...
+const int   FSPACE_DIM2 = 12;	// ...stored in the file
+const int   MSPACE_DIM1 = 8;	// We will read dataset back from the file...
+const int   MSPACE_DIM2 = 12;	// ...to the dataset in memory with these ...
+				// ...dataspace parameters
+const int   NPOINTS = 4;	// Number of points that will be selected...
+                                //    ...and overwritten
+
+int main (void)
+{
+   /*
+   * Buffers' initialization.
+   */
+   int   i,j;
+   int    vector[MSPACE1_DIM];
+   vector[0] = vector[MSPACE1_DIM - 1] = -1;
+   for (i = 1; i < MSPACE1_DIM - 1; i++)
+      vector[i] = i;
+
+   int    matrix[MSPACE_DIM1][MSPACE_DIM2];
+   for (i = 0; i < MSPACE_DIM1; i++)
+   {
+      for (j = 0; j < MSPACE_DIM2; j++)
+	 matrix[i][j] = 0;
+   }
+
+   // Try block to detect exceptions raised by any of the calls inside it
+   try
+   {
+      /*
+       * Turn off the auto-printing when failure occurs so that we can
+       * handle the errors appropriately
+       */
+      Exception::dontPrint();
+
+      /*
+       * Create a file.
+       */
+      H5File* file = new H5File( FILE_NAME, H5F_ACC_TRUNC );
+
+      /*
+       * Create dataspace for the dataset in the file.
+       */
+      hsize_t fdim[] = {FSPACE_DIM1, FSPACE_DIM2}; // dim sizes of ds (on disk)
+      DataSpace fspace( FSPACE_RANK, fdim );
+
+      /*
+       * Create dataset and write it into the file.
+       */
+      DataSet* dataset = new DataSet(
+            file->createDataSet( DATASET_NAME, PredType::NATIVE_INT, fspace ));
+      dataset->write( matrix, PredType::NATIVE_INT );
+
+      /*
+       * Select hyperslab for the dataset in the file, using 3x2 blocks,
+       * (4,3) stride and (2,4) count starting at the position (0,1).
+       */
+      hsize_t start[2]; // Start of hyperslab
+      hsize_t stride[2]; // Stride of hyperslab
+      hsize_t count[2];  // Block count
+      hsize_t block[2];  // Block sizes
+      start[0]  = 0; start[1]  = 1;
+      stride[0] = 4; stride[1] = 3;
+      count[0]  = 2; count[1]  = 4;
+      block[0]  = 3; block[1]  = 2;
+      fspace.selectHyperslab( H5S_SELECT_SET, count, start, stride, block);
+
+      /*
+       * Create dataspace for the first dataset.
+       */
+      hsize_t dim1[] = {MSPACE1_DIM};  /* Dimension size of the first dataset
+                                         (in memory) */
+      DataSpace mspace1( MSPACE1_RANK, dim1 );
+
+      /*
+       * Select hyperslab.
+       * We will use 48 elements of the vector buffer starting at the
+       * second element.  Selected elements are 1 2 3 . . . 48
+       */
+      start[0]  = 1;
+      stride[0] = 1;
+      count[0]  = 48;
+      block[0]  = 1;
+      mspace1.selectHyperslab( H5S_SELECT_SET, count, start, stride, block);
+
+      /*
+       * Write selection from the vector buffer to the dataset in the file.
+       *
+       * File dataset should look like this:
+       *                    0  1  2  0  3  4  0  5  6  0  7  8
+       *                    0  9 10  0 11 12  0 13 14  0 15 16
+       *                    0 17 18  0 19 20  0 21 22  0 23 24
+       *                    0  0  0  0  0  0  0  0  0  0  0  0
+       *                    0 25 26  0 27 28  0 29 30  0 31 32
+       *                    0 33 34  0 35 36  0 37 38  0 39 40
+       *                    0 41 42  0 43 44  0 45 46  0 47 48
+       *                    0  0  0  0  0  0  0  0  0  0  0  0
+       */
+       dataset->write( vector, PredType::NATIVE_INT, mspace1, fspace );
+
+      /*
+       * Reset the selection for the file dataspace fid.
+       */
+      fspace.selectNone();
+
+      /*
+       * Create dataspace for the second dataset.
+       */
+      hsize_t dim2[] = {MSPACE2_DIM};  /* Dimension size of the second dataset
+                                         (in memory */
+      DataSpace mspace2( MSPACE2_RANK, dim2 );
+
+      /*
+       * Select sequence of NPOINTS points in the file dataspace.
+       */
+      hsize_t coord[NPOINTS][FSPACE_RANK]; /* Array to store selected points
+                                              from the file dataspace */
+      coord[0][0] = 0; coord[0][1] = 0;
+      coord[1][0] = 3; coord[1][1] = 3;
+      coord[2][0] = 3; coord[2][1] = 5;
+      coord[3][0] = 5; coord[3][1] = 6;
+
+      fspace.selectElements( H5S_SELECT_SET, NPOINTS, (const hsize_t **)coord);
+
+      /*
+       * Write new selection of points to the dataset.
+       */
+      int    values[] = {53, 59, 61, 67};  /* New values to be written */
+      dataset->write( values, PredType::NATIVE_INT, mspace2, fspace );
+
+      /*
+       * File dataset should look like this:
+       *                   53  1  2  0  3  4  0  5  6  0  7  8
+       *                    0  9 10  0 11 12  0 13 14  0 15 16
+       *                    0 17 18  0 19 20  0 21 22  0 23 24
+       *                    0  0  0 59  0 61  0  0  0  0  0  0
+       *                    0 25 26  0 27 28  0 29 30  0 31 32
+       *                    0 33 34  0 35 36 67 37 38  0 39 40
+       *                    0 41 42  0 43 44  0 45 46  0 47 48
+       *                    0  0  0  0  0  0  0  0  0  0  0  0
+       *
+       */
+
+      /*
+       * Close the dataset and the file.
+       */
+      delete dataset;
+      delete file;
+
+      /*
+       * Open the file.
+       */
+      file = new H5File( FILE_NAME, H5F_ACC_RDONLY );
+
+      /*
+       * Open the dataset.
+       */
+      dataset = new DataSet( file->openDataSet( DATASET_NAME ));
+
+      /*
+       * Read data back to the buffer matrix.
+       */
+      dataset->read( matrix, PredType::NATIVE_INT );
+
+      /*
+       * Display the result.
+       */
+      for (i=0; i < MSPACE_DIM1; i++)
+      {
+          for(j=0; j < MSPACE_DIM2; j++)
+	     cout << matrix[i][j] << "  ";
+          cout << endl;
+      }
+
+      /*
+       * Close the dataset and the file.
+       */
+      delete dataset;
+      delete file;
+   }  // end of try block
+
+   // catch failure caused by the H5File operations
+   catch( FileIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSet operations
+   catch( DataSetIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   // catch failure caused by the DataSpace operations
+   catch( DataSpaceIException error )
+   {
+      error.printError();
+      return -1;
+   }
+
+   return 0;
+
+}

Added: packages/hdf5/branches/upstream/current/c++/src/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,16 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+

Added: packages/hdf5/branches/upstream/current/c++/src/H5AbstractDs.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5AbstractDs.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5AbstractDs.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,205 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5AbstractDs.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5Alltypes.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+// Function:	AbstractDs default constructor
+///\brief	Default constructor
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+AbstractDs::AbstractDs() : H5Object() {}
+
+//--------------------------------------------------------------------------
+// Function:	AbstractDs default constructor
+///\brief	Creates an AbstractDs instance using an existing id.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+AbstractDs::AbstractDs( const hid_t ds_id ) : H5Object( ds_id ) {}
+
+//--------------------------------------------------------------------------
+// Function:	AbstractDs copy constructor
+///\brief	Copy constructor: makes a copy of the original AbstractDs object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+AbstractDs::AbstractDs( const AbstractDs& original ) : H5Object( original ) {}
+
+//--------------------------------------------------------------------------
+// Function:	AbstractDs::getTypeClass
+///\brief	Returns the class of the datatype that is used by this
+///		object, which can be a dataset or an attribute.
+///\return	Datatype class identifier
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5T_class_t AbstractDs::getTypeClass() const
+{
+   // Gets the datatype used by this dataset or attribute.
+   // p_get_type calls either H5Dget_type or H5Aget_type depending on
+   // which object invokes getTypeClass
+   DataType datatype(p_get_type());
+
+   // Gets the class of the datatype and validate it before returning
+   H5T_class_t type_class = H5Tget_class( datatype.getId());
+   if( type_class != H5T_NO_CLASS )
+      return( type_class );
+   else
+   {
+      throw DataTypeIException(inMemFunc("getTypeClass"),
+		"H5Tget_class returns H5T_NO_CLASS");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	AbstractDs::getDataType
+///\brief	Returns the generic datatype of this abstract dataset, which
+///		can be a dataset or an attribute.
+///\return	DataType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataType AbstractDs::getDataType() const
+{
+   // Gets the id of the datatype used by this dataset or attribute.
+   // p_get_type calls either H5Dget_type or H5Aget_type depending on
+   // which object invokes getTypeClass
+   hid_t datatype_id = p_get_type();  // returned value is already validated
+
+   // Create and return the DataType object
+   DataType datatype( datatype_id );
+   return( datatype );
+}
+
+//--------------------------------------------------------------------------
+// Function:	AbstractDs::getArrayType
+///\brief	Returns the compound datatype of this abstract dataset which
+///		can be a dataset or an attribute.
+///\return	ArrayType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+ArrayType AbstractDs::getArrayType() const
+{
+   ArrayType arraytype(p_get_type());
+   return(arraytype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	AbstractDs::getCompType
+///\brief	Returns the compound datatype of this abstract dataset which
+///		can be a dataset or an attribute.
+///\return	CompType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+CompType AbstractDs::getCompType() const
+{
+   CompType comptype(p_get_type());
+   return(comptype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	AbstractDs::getEnumType
+///\brief	Returns the enumeration datatype of this abstract dataset which
+///		can be a dataset or an attribute.
+///\return	EnumType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+EnumType AbstractDs::getEnumType() const
+{
+   EnumType enumtype(p_get_type());
+   return(enumtype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	AbstractDs::getFloatType
+///\brief	Returns the floating-point datatype of this abstract dataset,
+///		which can be a dataset or an attribute.
+///\return	FloatType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FloatType AbstractDs::getFloatType() const
+{
+   FloatType floatype(p_get_type());
+   return(floatype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	AbstractDs::getIntType
+///\brief	Returns the integer datatype of this abstract dataset which
+///		can be a dataset or an attribute.
+///\return	IntType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IntType AbstractDs::getIntType() const
+{
+   IntType inttype(p_get_type());
+   return(inttype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	AbstractDs::getStrType
+///\brief	Returns the string datatype of this abstract dataset which
+///		can be a dataset or an attribute.
+///\return	StrType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+StrType AbstractDs::getStrType() const
+{
+   StrType strtype(p_get_type());
+   return(strtype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	AbstractDs::getVarLenType
+///\brief	Returns the floating-point datatype of this abstract dataset,
+///		which can be a dataset or an attribute.
+///\return	VarLenType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+VarLenType AbstractDs::getVarLenType() const
+{
+   VarLenType varlentype(p_get_type());
+   return(varlentype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	AbstractDs destructor
+///\brief	Noop destructor.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+AbstractDs::~AbstractDs() {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5AbstractDs.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5AbstractDs.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5AbstractDs.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,82 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Class AbstractDs is an abstract base class, from which Attribute and
+// DataSet inherit.  It provides the services that are common to both
+// Attribute and DataSet.  It also inherits from H5Object and passes down
+// the services that H5Object provides.
+
+#ifndef _AbstractDs_H
+#define _AbstractDs_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+class ArrayType;
+class CompType;
+class EnumType;
+class FloatType;
+class IntType;
+class StrType;
+class VarLenType;
+class H5_DLLCPP AbstractDs : public H5Object {
+   public:
+	// Gets a copy the datatype of that this abstract dataset uses.
+	// Note that this datatype is a generic one and can only be accessed
+	// via generic member functions, i.e., member functions belong
+	// to DataType.  To get specific datatype, i.e. EnumType, FloatType,
+	// etc..., use the specific functions, that follow, instead .
+	DataType getDataType() const;
+
+        // Gets a copy of the specific datatype of this abstract dataset
+        ArrayType getArrayType() const;
+        CompType getCompType() const;
+        EnumType getEnumType() const;
+        FloatType getFloatType() const;
+        IntType getIntType() const;
+        StrType getStrType() const;
+        VarLenType getVarLenType() const;
+
+	// Gets the dataspace of this abstract dataset - pure virtual
+	virtual DataSpace getSpace() const = 0;
+
+        // Gets the class of the datatype that is used by this abstract
+	// dataset
+	H5T_class_t getTypeClass() const;
+
+	// Returns the amount of storage size required for this abstract
+	// dataset - pure virtual.
+	virtual hsize_t getStorageSize() const = 0;
+
+	// Copy constructor
+	AbstractDs( const AbstractDs& original );
+
+	virtual ~AbstractDs();
+
+   protected:
+	// Default constructor
+	AbstractDs();
+
+	// Constructor that takes an attribute id or a dataset id.
+	AbstractDs( const hid_t ds_id );
+
+   private:
+	// This member function is implemented by DataSet and Attribute.
+	virtual hid_t p_get_type() const = 0;
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif // _AbstractDs_H

Added: packages/hdf5/branches/upstream/current/c++/src/H5Alltypes.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5Alltypes.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5Alltypes.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,28 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 header file simply serves as a container to hold the
+// header files of all datatypes.  It simplifies the header
+// file including in the code.
+
+#include "H5DataType.h"
+#include "H5AtomType.h"
+#include "H5EnumType.h"
+#include "H5IntType.h"
+#include "H5FloatType.h"
+#include "H5StrType.h"
+#include "H5CompType.h"
+#include "H5ArrayType.h"
+#include "H5VarLenType.h"

Added: packages/hdf5/branches/upstream/current/c++/src/H5ArrayType.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5ArrayType.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5ArrayType.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,172 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+#include "H5ArrayType.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+// Function:	ArrayType default constructor
+///\brief	Default constructor: Creates a stub ArrayType
+// Programmer	Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+ArrayType::ArrayType() : DataType()
+{
+   // Initialize members
+   rank = -1;
+   dimensions = NULL;
+}
+
+//--------------------------------------------------------------------------
+// Function:	ArrayType overloaded constructor
+///\brief	Creates an ArrayType object using an existing id.
+///\param	existing_id - IN: Id of an existing datatype
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+ArrayType::ArrayType( const hid_t existing_id ) : DataType( existing_id )
+{
+   // Get the rank of the existing array and store it in this array
+   rank = H5Tget_array_ndims(existing_id);
+   if (rank < 0)
+   {
+      throw DataTypeIException("ArrayType overloaded constructor", "H5Tget_array_ndims failed");
+   }
+
+   // Get the dimensions of the existing array and store it in this array
+   dimensions = new hsize_t[rank];
+   //hsize_t rdims2[H5S_MAX_RANK];
+   int ret_value = H5Tget_array_dims(id, dimensions, NULL);
+   if (ret_value < 0)
+   {
+      throw DataTypeIException("ArrayType::getArrayDims", "H5Tget_array_dims failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	ArrayType copy constructor
+///\brief	Copy constructor: makes a copy of the original ArrayType object.
+// Programmer	Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+ArrayType::ArrayType( const ArrayType& original ) : DataType( original )
+{
+   rank = original.rank;
+   dimensions = new hsize_t[rank];
+   for (int i = 0; i < rank; i++)
+      dimensions[i] = original.dimensions[i];
+}
+
+//--------------------------------------------------------------------------
+// Function:	ArrayType overloaded constructor
+///\brief	Creates a new array data type based on the specified
+///		\a base_type.
+///\param	base_type - IN: Existing datatype
+///\param	ndims     - IN: Rank of the array, [0..H5S_MAX_RANK]
+///\param	dims      - IN: Size of each array dimension
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+ArrayType::ArrayType(const DataType& base_type, int ndims, const hsize_t* dims) : DataType()
+{
+   hid_t new_type_id = H5Tarray_create(base_type.getId(), ndims, dims, NULL);
+   if (new_type_id < 0)
+   {
+      throw DataTypeIException("ArrayType constructor", "H5Tarray_create failed");
+   }
+   id = new_type_id;
+   rank = ndims;
+   dimensions = new hsize_t[rank];
+   for (int i = 0; i < rank; i++)
+      dimensions[i] = dims[i];
+}
+
+//--------------------------------------------------------------------------
+// Function:	ArrayType::getArrayNDims
+///\brief	Returns the number of dimensions for an array datatype.
+///\return	Number of dimensions
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+int ArrayType::getArrayNDims()
+{
+   // If the array's rank has not been stored, i.e. rank is init to -1,
+   // retrieve it via the C API
+   if (rank < 0)
+   {
+      rank = H5Tget_array_ndims(id);
+      if (rank < 0)
+      {
+         throw DataTypeIException("ArrayType::getArrayNDims", "H5Tget_array_ndims failed");
+      }
+   }
+   return(rank);
+}
+
+//--------------------------------------------------------------------------
+// Function:	ArrayType::getArrayDims
+///\brief	Retrieves the size of all dimensions of an array datatype.
+///\param	dims - OUT: Sizes of dimensions
+///\return	Number of dimensions
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+int ArrayType::getArrayDims(hsize_t* dims)
+{
+   // if the array's dimensions have not been stored, retrieve them via C API
+   if (dimensions == NULL)
+   {
+      int ndims = H5Tget_array_dims(id, dims, NULL);
+      if (ndims < 0)
+      {
+         throw DataTypeIException("ArrayType::getArrayDims", "H5Tget_array_dims failed");
+      }
+      // store the array's info in memory
+      rank = ndims;
+      dimensions = new hsize_t[rank];
+      for (int i = 0; i < rank; i++)
+         dimensions[i] = dims[i];
+   }
+   // otherwise, simply copy what's in 'dimensions' to 'dims'
+   for (int i = 0; i < rank; i++)
+      dims[i] = dimensions[i];
+   return(rank);
+}
+
+//--------------------------------------------------------------------------
+// Function:	ArrayType destructor
+///\brief	Properly terminates access to this array datatype.
+// Programmer	Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+ArrayType::~ArrayType()
+{
+   // Free allocated memory
+   if (dimensions != NULL)
+      delete []dimensions;
+}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5ArrayType.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5ArrayType.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5ArrayType.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,60 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Class ArrayType inherits from DataType and provides wrappers for the
+// HDF5 C's Array Datatypes.
+
+#ifndef _H5ArrayType_H
+#define _H5ArrayType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+class H5_DLLCPP ArrayType : public DataType {
+   public:
+	// Constructor that creates a new array data type based on the
+	// specified base type.
+	ArrayType(const DataType& base_type, int ndims, const hsize_t* dims);
+
+	// Returns the number of dimensions of this array datatype.
+	int getArrayNDims();
+
+	// Returns the sizes of dimensions of this array datatype.
+	int getArrayDims(hsize_t* dims);
+
+	// Returns this class name
+	virtual string fromClass () const { return ("ArrayType"); }
+
+	// Copy constructor: makes copy of the original object.
+	ArrayType( const ArrayType& original );
+
+	// Constructor that takes an existing id
+	ArrayType( const hid_t existing_id );
+
+	// Noop destructor
+	virtual ~ArrayType();
+
+   protected:
+	// Default constructor
+	ArrayType();
+
+   private:
+	int rank;		// Rank of the array
+	hsize_t* dimensions;	// Sizes of the array dimensions
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5AtomType.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5AtomType.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5AtomType.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,296 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+#include "H5AtomType.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+//--------------------------------------------------------------------------
+// Function:	AtomType default constructor [protected]
+// Purpose	Default constructor: creates a stub atomic datatype.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+AtomType::AtomType() : DataType() {}
+
+//--------------------------------------------------------------------------
+// Function:	AtomType overloaded constructor [protected]
+// Purpose	Creates an AtomType object using an existing id.
+// Parameter	existing_id - IN: Id of an existing datatype
+// Exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+AtomType::AtomType( const hid_t existing_id ) : DataType( existing_id ) {}
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+//--------------------------------------------------------------------------
+// Function:	AtomType copy constructor
+///\brief	Copy constructor: makes a copy of the original AtomType object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+AtomType::AtomType( const AtomType& original ) : DataType( original ) {}
+
+//--------------------------------------------------------------------------
+// Function:	AtomType::setSize
+///\brief	Sets the total size for an atomic datatype.
+///\param	size - IN: Size to set
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void AtomType::setSize( size_t size ) const
+{
+   // Call C routine H5Tset_size to set the total size
+   herr_t ret_value = H5Tset_size( id, size );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException(inMemFunc("setSize"), "H5Tset_size failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:    AtomType::getOrder
+///\brief       Returns the byte order of an atomic datatype.
+///\return      Byte order, which can be:
+///             \li \c H5T_ORDER_LE
+///             \li \c H5T_ORDER_BE
+///             \li \c H5T_ORDER_VAX
+///\exception   H5::DataTypeIException
+// Programmer   Binh-Minh Ribler - Mar, 2005
+//--------------------------------------------------------------------------
+H5T_order_t AtomType::getOrder() const
+{
+   // Call C routine to get the byte ordering
+   H5T_order_t type_order = H5Tget_order( id );
+
+   // return a byte order constant if successful
+   if( type_order == H5T_ORDER_ERROR )
+   {
+      throw DataTypeIException(inMemFunc("getOrder"),
+                "H5Tget_order returns H5T_ORDER_ERROR");
+   }
+   return( type_order );
+}
+
+//--------------------------------------------------------------------------
+// Function:    AtomType::getOrder
+///\brief       This is an overloaded member function, provided for convenience.
+///             It takes a reference to a \c std::string for the buffer that
+///             provide the text description of the returned byte order.
+///             The text description can be either of the following:
+///             "Little endian byte ordering (0)";
+///             "Big endian byte ordering (1)";
+///             "VAX mixed byte ordering (2)";
+///\param       order_string - OUT: Text description of the returned byte order
+///\return      Byte order, which can be:
+///             \li \c H5T_ORDER_LE
+///             \li \c H5T_ORDER_BE
+///             \li \c H5T_ORDER_VAX
+///\exception   H5::DataTypeIException
+// Programmer   Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5T_order_t AtomType::getOrder( string& order_string ) const
+{
+   // Call the overloaded to get the type order without text
+   H5T_order_t type_order = getOrder();
+
+   // Then provide the text and return the type order
+   if( type_order == H5T_ORDER_LE )
+      order_string = "Little endian byte ordering (0)";
+   else if( type_order == H5T_ORDER_BE )
+      order_string = "Big endian byte ordering (1)";
+   else if( type_order == H5T_ORDER_VAX )
+      order_string = "VAX mixed byte ordering (2)";
+   return( type_order );
+}
+
+//--------------------------------------------------------------------------
+// Function:	AtomType::setOrder
+///\brief	Sets the byte ordering of an atomic datatype.
+///\param	order - IN: Byte ordering constant, which can be:
+///		\li \c H5T_ORDER_LE
+///		\li \c H5T_ORDER_BE
+///		\li \c H5T_ORDER_VAX
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void AtomType::setOrder( H5T_order_t order ) const
+{
+   // Call C routine to set the byte ordering
+   herr_t ret_value = H5Tset_order( id, order );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException(inMemFunc("setOrder"), "H5Tset_order failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	AtomType::getPrecision
+///\brief	Returns the precision of an atomic datatype.
+///\return	Number of significant bits
+///\exception	H5::DataTypeIException
+///\par Description
+///		The precision is the number of significant bits which,
+///		unless padding is present, is 8 times larger than the
+///		value returned by \c DataType::getSize().
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+size_t AtomType::getPrecision() const
+{
+   size_t num_signi_bits = H5Tget_precision( id );  // C routine
+
+   // returns number of significant bits if successful
+   if( num_signi_bits == 0 )
+   {
+      throw DataTypeIException(inMemFunc("getPrecision"),
+		"H5Tget_precision returns invalid number of significant bits");
+   }
+   return( num_signi_bits );
+}
+
+//--------------------------------------------------------------------------
+// Function:	AtomType::setPrecision
+///\brief	Sets the precision of an atomic datatype.
+///\param	precision - IN: Number of bits of precision
+///\exception	H5::DataTypeIException
+///\par Description
+///		For information, please see C layer Reference Manuat at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-SetPrecision
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void AtomType::setPrecision( size_t precision ) const
+{
+   // Call C routine to set the datatype precision
+   herr_t ret_value = H5Tset_precision( id, precision );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException(inMemFunc("setPrecision"), "H5Tset_precision failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	AtomType::getOffset
+///\brief	Retrieves the bit offset of the first significant bit.
+///\return	Offset value
+///\exception	H5::DataTypeIException
+///\par Description
+///		For information, please see C layer Reference Manuat at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-GetOffset
+// Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		12/05/00: due to C API change
+//			- return type changed from size_t to int
+//			- offset = -1 when failure occurs vs. 0
+//--------------------------------------------------------------------------
+int AtomType::getOffset() const
+{
+   int offset = H5Tget_offset( id );  // C routine
+
+   // returns a non-negative offset value if successful
+   if( offset == -1 )
+   {
+      throw DataTypeIException(inMemFunc("getOffset"),
+		"H5Tget_offset returns a negative offset value");
+   }
+   return( offset );
+}
+
+//--------------------------------------------------------------------------
+// Function:	AtomType::setOffset
+///\brief	Sets the bit offset of the first significant bit.
+///\param	offset - IN: Offset of first significant bit
+///\exception	H5::DataTypeIException
+///\par Description
+///		For information, please see C layer Reference Manuat at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-SetOffset
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void AtomType::setOffset( size_t offset ) const
+{
+   // Call C routine to set the bit offset
+   herr_t ret_value = H5Tset_offset( id, offset );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException(inMemFunc("setOffset"), "H5Tset_offset failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	AtomType::getPad
+///\brief	Retrieves the padding type of the least and most-significant
+///		bit padding.
+///\param	lsb - OUT: Least-significant bit padding type
+///\param	msb - OUT: Most-significant bit padding type
+///\exception	H5::DataTypeIException
+///\par Description
+///		Possible values for \a lsb and \a msb include:
+///		\li \c H5T_PAD_ZERO (0) - Set background to zeros.
+///		\li \c H5T_PAD_ONE (1) - Set background to ones.
+///		\li \c H5T_PAD_BACKGROUND (2) - Leave background alone.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void AtomType::getPad( H5T_pad_t& lsb, H5T_pad_t& msb ) const
+{
+   // Call C routine to get the padding type
+   herr_t ret_value = H5Tget_pad( id, &lsb, &msb );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException(inMemFunc("getPad"), "H5Tget_pad failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	AtomType::getPad
+///\brief	Sets the least and most-significant bits padding types.
+///\param	lsb - IN: Least-significant bit padding type
+///\param	msb - IN: Most-significant bit padding type
+///\exception	H5::DataTypeIException
+///\par Description
+///		Valid values for \a lsb and \a msb include:
+///		\li \c H5T_PAD_ZERO (0) - Set background to zeros.
+///		\li \c H5T_PAD_ONE (1) - Set background to ones.
+///		\li \c H5T_PAD_BACKGROUND (2) - Leave background alone.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void AtomType::setPad( H5T_pad_t lsb, H5T_pad_t msb ) const
+{
+   // Call C routine to set the padding type
+   herr_t ret_value = H5Tset_pad( id, lsb, msb );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException(inMemFunc("setPad"), "H5Tset_pad failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	AtomType destructor
+///\brief	Noop destructor.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+AtomType::~AtomType() {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5AtomType.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5AtomType.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5AtomType.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,79 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Class AtomType is a base class, from which IntType, FloatType, StrType,
+// and PredType inherit.  It provides the services that are common to these
+// subclasses.  It also inherits from DataType and passes down the
+// services that are common to all the datatypes.
+
+#ifndef _H5AtomType_H
+#define _H5AtomType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+class H5_DLLCPP AtomType : public DataType {
+   public:
+	// Returns the byte order of an atomic datatype.
+	H5T_order_t getOrder() const;
+	H5T_order_t getOrder( string& order_string ) const;
+
+	// Sets the byte ordering of an atomic datatype.
+	void setOrder( H5T_order_t order ) const;
+
+	// Retrieves the bit offset of the first significant bit.
+	// 12/05/00 - changed return type to int from size_t - C API
+	int getOffset() const;
+
+	// Sets the bit offset of the first significant bit.
+	void setOffset( size_t offset ) const;
+
+	// Retrieves the padding type of the least and most-significant bit padding.
+	void getPad( H5T_pad_t& lsb, H5T_pad_t& msb ) const;
+
+	// Sets the least and most-significant bits padding types
+	void setPad( H5T_pad_t lsb, H5T_pad_t msb ) const;
+
+	// Returns the precision of an atomic datatype.
+	size_t getPrecision() const;
+
+	// Sets the precision of an atomic datatype.
+	void setPrecision( size_t precision ) const;
+
+	// Sets the total size for an atomic datatype.
+	void setSize( size_t size ) const;
+
+	// Returns this class name
+	virtual string fromClass () const { return("AtomType"); }
+
+	// Copy constructor - makes copy of the original object
+	AtomType( const AtomType& original );
+
+	// Noop destructor
+	virtual ~AtomType();
+
+   protected:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	// Default constructor
+	AtomType();
+
+	// Constructor that takes an existing id
+	AtomType( const hid_t existing_id );
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5Attribute.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5Attribute.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5Attribute.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,313 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5AbstractDs.h"
+#include "H5Attribute.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+#include "H5DataSpace.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+// Function:	Attribute default constructor
+///\brief	Default constructor: Creates a stub attribute
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+Attribute::Attribute() : AbstractDs() {}
+
+//--------------------------------------------------------------------------
+// Function:	Attribute copy constructor
+///\brief	Copy constructor: makes a copy of the original Attribute object.
+///\param	original  - IN: Original Attribute object to copy
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Attribute::Attribute( const Attribute& original ) : AbstractDs( original ) {}
+
+//--------------------------------------------------------------------------
+// Function:	Attribute overloaded constructor
+///\brief	Creates an Attribute object using the id of an existing
+///		attribute.
+///\param	existing_id - IN: Id of an existing attribute
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Attribute::Attribute(const hid_t existing_id) : AbstractDs(existing_id) {}
+
+//--------------------------------------------------------------------------
+// Function:	Attribute::write
+///\brief	Writes data to this attribute.
+///\param	mem_type  - IN: Attribute datatype (in memory)
+///\param	buf       - IN: Data to be written
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void Attribute::write( const DataType& mem_type, const void *buf ) const
+{
+   herr_t ret_value = H5Awrite( id, mem_type.getId(), buf );
+   if( ret_value < 0 )
+   {
+      throw AttributeIException("Attribute::write", "H5Awrite failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	Attribute::write
+///\brief	This is an overloaded member function, provided for convenience.
+///		It writes a \a std::string to this attribute.
+///\param	mem_type  - IN: Attribute datatype (in memory)
+///\param	strg      - IN: Data to be written
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - Apr, 2003
+//--------------------------------------------------------------------------
+void Attribute::write( const DataType& mem_type, const string& strg ) const
+{
+   // Convert string to C-string
+   const char* strg_C;
+   strg_C = strg.c_str();  // strg_C refers to the contents of strg as a C-str
+
+   herr_t ret_value = H5Awrite( id, mem_type.getId(), strg_C );
+   if( ret_value < 0 )
+   {
+      throw AttributeIException("Attribute::write", "H5Awrite failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	Attribute::read
+///\brief	Reads data from this attribute.
+///\param	mem_type -  IN: Attribute datatype (in memory)
+///\param	buf      - OUT: Buffer for read data
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void Attribute::read( const DataType& mem_type, void *buf ) const
+{
+   herr_t ret_value = H5Aread( id, mem_type.getId(), buf );
+   if( ret_value < 0 )
+   {
+      throw AttributeIException("Attribute::read", "H5Aread  failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	Attribute::read
+///\brief	This is an overloaded member function, provided for convenience.
+///		It reads a \a std::string from this attribute.
+///\param	mem_type  - IN: Attribute datatype (in memory)
+///\param	strg      - IN: Buffer for read string
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - Apr, 2003
+//--------------------------------------------------------------------------
+void Attribute::read( const DataType& mem_type, string& strg ) const
+{
+   size_t size = mem_type.getSize();
+   char* strg_C = new char[size+1];  // temporary C-string for C API
+   herr_t ret_value = H5Aread( id, mem_type.getId(), strg_C );
+   if( ret_value < 0 )
+   {
+      throw AttributeIException("Attribute::read", "H5Aread failed");
+   }
+   strg = strg_C;
+   delete []strg_C;
+}
+
+//--------------------------------------------------------------------------
+// Function:	Attribute::getSpace
+///\brief	Gets a copy of the dataspace for this attribute.
+///\return	Dataspace instance
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataSpace Attribute::getSpace() const
+{
+   // Calls C function H5Aget_space to get the id of the dataspace
+   hid_t dataspace_id = H5Aget_space( id );
+
+   // If the dataspace id is valid, create and return the DataSpace object
+   if( dataspace_id > 0 )
+   {
+      DataSpace dataspace( dataspace_id );
+      return( dataspace );
+   }
+   else
+   {
+      throw AttributeIException("Attribute::getSpace", "H5Aget_space failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	Attribute::p_get_type (private)
+// Purpose	Gets the datatype of this attribute.
+// Return	Id of the datatype
+// Exception	H5::AttributeIException
+// Description
+// 		This private function is used in AbstractDs.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+hid_t Attribute::p_get_type() const
+{
+   hid_t type_id = H5Aget_type( id );
+   if( type_id > 0 )
+      return( type_id );
+   else
+   {
+      throw AttributeIException("", "H5Aget_type failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	Attribute::getName
+///\brief	Gets the name of this attribute, returning its length.
+///\param	buf_size  -  IN: Desired length of the name
+///\param	attr_name - OUT: Buffer for the name string
+///\return	Length of the attribute name
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - Nov, 2001
+//--------------------------------------------------------------------------
+ssize_t Attribute::getName( size_t buf_size, string& attr_name ) const
+{
+   char* name_C = new char[buf_size+1];  // temporary C-string for C API
+
+   // Calls C routine H5Aget_name to get the name of the attribute
+   ssize_t name_size = H5Aget_name( id, buf_size, name_C );
+
+   // If H5Aget_name returns a negative value, raise an exception,
+   if( name_size < 0 )
+   {
+      throw AttributeIException("Attribute::getName", "H5Aget_name failed");
+   }
+   // otherwise, convert the C attribute name and return
+   attr_name = name_C;
+   delete []name_C;
+   return( name_size );
+}
+
+//--------------------------------------------------------------------------
+// Function:	Attribute::getName
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it returns the
+///		attribute's name, not the length.
+///\return	Name of the attribute
+///\param	buf_size  -  IN: Desired length of the name
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+string Attribute::getName( size_t buf_size ) const
+{
+   string attr_name;
+   ssize_t name_size = getName( buf_size, attr_name );
+   return( attr_name );
+   // let caller catch exception if any
+}
+
+//--------------------------------------------------------------------------
+// Function:	Attribute::getName
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above functions in that it doesn't take
+///		any arguments and returns the attribute's name.
+///\return	Name of the attribute
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+string Attribute::getName() const
+{
+   // Try with 256 characters for the name first, if the name's length
+   // returned is more than that then, read the name again with the
+   // appropriate space allocation
+   char* name_C = new char[256];  // temporary C-string for C API
+   ssize_t name_size = H5Aget_name(id, 255, name_C);
+
+   string attr_name;
+   if (name_size >= 256)
+      name_size = getName(name_size, attr_name);
+
+   // otherwise, convert the C attribute name and return
+   else
+      attr_name = name_C;
+
+   delete []name_C;
+   return( attr_name );
+}
+
+//--------------------------------------------------------------------------
+// Function:	Attribute::getStorageSize
+///\brief	Returns the amount of storage size required for this attribute.
+///\return	Size of the storage or 0, for no data
+///\exception	H5::AttributeIException
+// Note:	H5Dget_storage_size returns 0 when there is no data.  This
+//		function should have no failure. (from SLU)
+// Programmer	Binh-Minh Ribler - Mar, 2005
+//--------------------------------------------------------------------------
+hsize_t Attribute::getStorageSize() const
+{
+   hsize_t storage_size = H5Aget_storage_size(id);
+   return (storage_size);
+}
+
+//--------------------------------------------------------------------------
+// Function:	Attribute::close
+///\brief	Closes this attribute.
+///
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - Mar 9, 2005
+//--------------------------------------------------------------------------
+void Attribute::close()
+{
+   herr_t ret_value = H5Aclose(id);
+   if( ret_value < 0 )
+   {
+      throw AttributeIException("Attribute::close", "H5Aclose failed");
+   }
+   // reset the id because the attribute that it represents is now closed
+   id = 0;
+}
+
+//--------------------------------------------------------------------------
+// Function:	Attribute destructor
+///\brief	Properly terminates access to this attribute.
+// Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Replaced resetIdComponent with decRefCount to use C library
+//		ID reference counting mechanism - BMR, Feb 20, 2005
+//--------------------------------------------------------------------------
+Attribute::~Attribute()
+{
+   // The attribute id will be closed properly
+   try {
+      decRefCount();
+   }
+   catch (Exception close_error) {
+      cerr << "Attribute::~Attribute - " << close_error.getDetailMsg() << endl;
+   }
+}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5Attribute.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5Attribute.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5Attribute.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,78 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5Attribute_H
+#define _H5Attribute_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP Attribute : public AbstractDs {
+   public:
+	// Gets the name of this attribute.
+	ssize_t getName( size_t buf_size, string& attr_name ) const;
+	string getName( size_t buf_size ) const; // returns name, not its length
+	string getName() const; // returns name, no argument
+
+	// Gets a copy of the dataspace for this attribute.
+	virtual DataSpace getSpace() const;
+
+	// Returns the amount of storage size required for this attribute.
+	virtual hsize_t getStorageSize() const;
+
+	// Reads data from this attribute.
+	void read( const DataType& mem_type, void *buf ) const;
+	void read( const DataType& mem_type, string& strg ) const;
+
+	// Writes data to this attribute.
+	void write(const DataType& mem_type, const void *buf ) const;
+	void write(const DataType& mem_type, const string& strg ) const;
+
+	// Returns this class name
+	virtual string fromClass () const { return("Attribute"); }
+
+        // Creates a copy of an existing attribute using the attribute id
+        Attribute( const hid_t attr_id );
+
+	// Copy constructor: makes a copy of an existing Attribute object.
+	Attribute( const Attribute& original );
+
+	// Default constructor
+	Attribute();
+
+	// Close this attribute.
+	virtual void close();
+
+	// Destructor: properly terminates access to this attribute.
+	virtual ~Attribute();
+
+   private:
+	// This function contains the common code that is used by
+	// getTypeClass and various API functions getXxxType
+	// defined in AbstractDs for generic datatype and specific
+	// sub-types
+	virtual hid_t p_get_type() const;
+
+	// do not inherit 'iterateAttrs' from H5Object
+	int iterateAttrs() { return 0; }
+
+        // do not inherit 'rename' from H5Object
+        void rename() {}
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5Classes.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5Classes.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5Classes.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5Classes_H
+#define _H5Classes_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+	class Exception;
+	class ReferenceCounter;
+	class IdComponent;
+	class H5Object;
+	class PropList;
+	class FileCreatPropList;
+	class FileAccPropList;
+	class DSetCreatPropList;
+	class DSetMemXferPropList;
+	class DTypePropList;
+	class DataType;
+	class DataSpace;
+	class AtomType;
+	class PredType;
+	class EnumType;
+	class IntType;
+	class FloatType;
+	class StrType;
+	class CompType;
+	//class RefType;
+	class AbstractDs;
+	class DataSet;
+	class Group;
+	class H5File;
+	class Attribute;
+	class H5Library;
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5CommonFG.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5CommonFG.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5CommonFG.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1003 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5FaccProp.h"
+#include "H5FcreatProp.h"
+#include "H5DxferProp.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5Group.h"
+#include "H5AbstractDs.h"
+#include "H5DataSpace.h"
+#include "H5DataSet.h"
+#include "H5File.h"
+#include "H5Alltypes.h"
+
+// There are a few comments that are common to most of the functions
+// defined in this file so they are listed here.
+// - getLocId is called by all functions, that call a C API, to get
+//   the location id, which can be either a file id or a group id.
+//   This function is pure virtual and it's up to H5File and Group
+//   to call the right getId() - although, as the structure of the
+//   library at this time, getId() is basically the IdComponent::getId()
+// - when a failure returned by the C API, the functions will call
+//   throwException, which is a pure virtual function and is implemented
+//   by H5File to throw a FileIException and by Group to throw a
+//   GroupIException.
+// December 2000
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::createGroup
+///\brief	Creates a new group at this location which can be a file
+///		or another group.
+///\param	name  - IN: Name of the group to create
+///\param	size_hint - IN: Indicates the number of bytes to reserve for
+///		the names that will appear in the group
+///\return	Group instance
+///\exception	H5::FileIException or H5::GroupIException
+///\par Description
+///		The optional \a size_hint specifies how much file space to
+///		reserve for storing the names that will appear in this new
+///		group. If a non-positive value is provided for the \a size_hint
+///		then a default size is chosen.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Group CommonFG::createGroup( const char* name, size_t size_hint ) const
+{
+   // Call C routine H5Gcreate to create the named group, giving the
+   // location id which can be a file id or a group id
+   hid_t group_id = H5Gcreate( getLocId(), name, size_hint );
+
+   // If the creation of the group failed, throw an exception
+   if( group_id < 0 )
+   {
+      throwException("createGroup", "H5Gcreate failed");
+   }
+
+   // No failure, create and return the Group object
+   Group group( group_id );
+   return( group );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::createGroup
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Group CommonFG::createGroup( const string& name, size_t size_hint ) const
+{
+   return( createGroup( name.c_str(), size_hint ));
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openGroup
+///\brief	Opens an existing group in a location which can be a file
+///		or another group.
+///\param	name  - IN: Name of the group to open
+///\return	Group instance
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Group CommonFG::openGroup( const char* name ) const
+{
+   // Call C routine H5Gopen to open the named group, giving the
+   // location id which can be a file id or a group id
+   hid_t group_id = H5Gopen( getLocId(), name );
+
+   // If the opening of the group failed, throw an exception
+   if( group_id < 0 )
+   {
+      throwException("openGroup", "H5Gopen failed");
+   }
+
+   // No failure, create and return the Group object
+   Group group( group_id );
+   return( group );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openGroup
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Group CommonFG::openGroup( const string& name ) const
+{
+   return( openGroup( name.c_str() ));
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::createDataSet
+///\brief	Creates a new dataset at this location.
+///\param	name  - IN: Name of the dataset to create
+///\param	data_type - IN: Datatype of the dataset
+///\param	data_space - IN: Dataspace for the dataset
+///\param	create_plist - IN: Creation properly list for the dataset
+///\return	DataSet instance
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataSet CommonFG::createDataSet( const char* name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist ) const
+{
+   // Obtain identifiers for C API
+   hid_t type_id = data_type.getId();
+   hid_t space_id = data_space.getId();
+   hid_t create_plist_id = create_plist.getId();
+
+   // Call C routine H5Dcreate to create the named dataset
+   hid_t dataset_id = H5Dcreate( getLocId(), name, type_id, space_id, create_plist_id );
+
+   // If the creation of the dataset failed, throw an exception
+   if( dataset_id < 0 )
+   {
+      throwException("createDataSet", "H5Dcreate failed");
+   }
+
+   // No failure, create and return the DataSet object
+   DataSet dataset( dataset_id );
+   return( dataset );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::createDataSet
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataSet CommonFG::createDataSet( const string& name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist ) const
+{
+   return( createDataSet( name.c_str(), data_type, data_space, create_plist ));
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openDataSet
+///\brief	Opens an existing dataset at this location.
+///\param	name  - IN: Name of the dataset to open
+///\return	DataSet instance
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataSet CommonFG::openDataSet( const char* name ) const
+{
+   // Call C function H5Dopen to open the specified dataset, giving
+   // the location id and the dataset's name
+   hid_t dataset_id = H5Dopen( getLocId(), name );
+
+   // If the dataset's opening failed, throw an exception
+   if( dataset_id < 0 )
+   {
+      throwException("openDataSet", "H5Dopen failed");
+   }
+
+   // No failure, create and return the DataSet object
+   DataSet dataset( dataset_id );
+   return( dataset );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openDataSet
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataSet CommonFG::openDataSet( const string& name ) const
+{
+   return( openDataSet( name.c_str() ));
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::link
+///\brief	Creates a link of the specified type from \a new_name to
+///		\a curr_name.
+///\param	link_type  - IN: Link type; possible values are
+///		\li \c H5G_LINK_HARD
+///		\li \c H5G_LINK_SOFT
+///\param	curr_name - IN: Name of the existing object if link is a hard
+///		link; can be anything for the soft link
+///\param	new_name - IN: New name for the object
+///\exception	H5::FileIException or H5::GroupIException
+///\par Description
+///		Note that both names are interpreted relative to the
+///		specified location.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CommonFG::link( H5G_link_t link_type, const char* curr_name, const char* new_name ) const
+{
+   herr_t ret_value = H5Glink( getLocId(), link_type, curr_name, new_name );
+   if( ret_value < 0 )
+   {
+      throwException("link", "H5Glink failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::link
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a curr_name and \a new_name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CommonFG::link( H5G_link_t link_type, const string& curr_name, const string& new_name ) const
+{
+   link( link_type, curr_name.c_str(), new_name.c_str() );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::unlink
+///\brief	Removes the specified name at this location.
+///\param	name  - IN: Name of the object to be removed
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CommonFG::unlink( const char* name ) const
+{
+   herr_t ret_value = H5Gunlink( getLocId(), name );
+   if( ret_value < 0 )
+   {
+      throwException("unlink", "H5Gunlink failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::unlink
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CommonFG::unlink( const string& name ) const
+{
+   unlink( name.c_str() );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::move
+///\brief	Renames an object at this location.
+///\param	src - IN: Object's original name
+///\param	dst - IN: Object's new name
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CommonFG::move( const char* src, const char* dst ) const
+{
+   herr_t ret_value = H5Gmove( getLocId(), src, dst );
+   if( ret_value < 0 )
+   {
+      throwException("move", "H5Gmove failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::move
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a src and \a dst.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CommonFG::move( const string& src, const string& dst ) const
+{
+   move( src.c_str(), dst.c_str() );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::getObjinfo
+///\brief	Returns information about an object.
+///\param	name  - IN: Name of the object
+///\param	follow_link - IN: Link flag
+///\param	statbuf - OUT: Buffer to return information about the object
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CommonFG::getObjinfo( const char* name, hbool_t follow_link, H5G_stat_t& statbuf ) const
+{
+   herr_t ret_value = H5Gget_objinfo( getLocId(), name, follow_link, &statbuf );
+   if( ret_value < 0 )
+   {
+      throwException("getObjinfo", "H5Gget_objinfo failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::getObjinfo
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CommonFG::getObjinfo( const string& name, hbool_t follow_link, H5G_stat_t& statbuf ) const
+{
+   getObjinfo( name.c_str(), follow_link, statbuf );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::getLinkval
+///\brief	Returns the name of the object that the symbolic link points to.
+///\param	name  - IN: Symbolic link to the object
+///\param	size - IN: Maximum number of characters of value to be returned
+///\return	Name of the object
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+string CommonFG::getLinkval( const char* name, size_t size ) const
+{
+   char* value_C = new char[size+1];  // temporary C-string for C API
+
+   herr_t ret_value = H5Gget_linkval( getLocId(), name, size, value_C );
+   if( ret_value < 0 )
+   {
+      throwException("getLinkval", "H5Gget_linkval failed");
+   }
+   string value = string( value_C );
+   delete []value_C;
+   return( value );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::getLinkval
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+string CommonFG::getLinkval( const string& name, size_t size ) const
+{
+   return( getLinkval( name.c_str(), size ));
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::setComment
+///\brief	Sets or resets the comment for an object specified by its name.
+///\param	name  - IN: Name of the object
+///\param	comment - IN: New comment
+///\exception	H5::FileIException or H5::GroupIException
+///\par	Description
+///		If \a comment is an empty string or a null pointer, the comment
+///		message is removed from the object.
+///		Comments should be relatively short, null-terminated, ASCII
+///		strings.  They can be attached to any object that has an
+///		object header, e.g., data sets, groups, named data types,
+///		and data spaces, but not symbolic links.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CommonFG::setComment( const char* name, const char* comment ) const
+{
+   herr_t ret_value = H5Gset_comment( getLocId(), name, comment );
+   if( ret_value < 0 )
+   {
+      throwException("setComment", "H5Gset_comment failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::setComment
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name and \a comment.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CommonFG::setComment( const string& name, const string& comment ) const
+{
+   setComment( name.c_str(), comment.c_str() );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::removeComment
+///\brief	Removes the comment from an object specified by its name.
+///\param	name  - IN: Name of the object
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - May 2005
+//--------------------------------------------------------------------------
+void CommonFG::removeComment(const char* name) const
+{
+   herr_t ret_value = H5Gset_comment(getLocId(), name, NULL);
+   if( ret_value < 0 )
+   {
+      throwException("removeComment", "H5Gset_comment failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::removeComment
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - May 2005
+//--------------------------------------------------------------------------
+void CommonFG::removeComment(const string& name) const
+{
+   removeComment (name.c_str());
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::getComment
+///\brief	Retrieves comment for the specified object.
+///\param	name  - IN: Name of the object
+///\return	Comment string
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - May 2005
+//--------------------------------------------------------------------------
+string CommonFG::getComment (const string& name) const
+{
+   size_t bufsize = 256;        // anticipating the comment's length
+   hid_t loc_id = getLocId();   // temporary variable
+
+   // temporary C-string for the object's comment
+   char* comment_C = new char[bufsize+1];
+   herr_t ret_value = H5Gget_comment (loc_id, name.c_str(), bufsize, comment_C);
+
+   // if the actual length of the comment is longer than the anticipated
+   // value, then call H5Gget_comment again with the correct value
+   if (ret_value > bufsize)
+   {
+	bufsize = ret_value;
+	delete []comment_C;
+	comment_C = new char[bufsize+1];
+	ret_value = H5Gget_comment (loc_id, name.c_str(), bufsize, comment_C);
+   }
+
+   // if H5Gget_comment returns SUCCEED, return the string comment,
+   // otherwise, throw an exception
+   if( ret_value < 0 )
+   {
+      throwException("getComment", "H5Gget_comment failed");
+   }
+   string comment = string( comment_C );
+   delete []comment_C;
+   return (comment);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::getComment
+///\brief	Retrieves comment for the specified object and its comment's
+///		length.
+///\param	name  - IN: Name of the object
+///\param	bufsize - IN: Length of the comment to retrieve
+///\return	Comment string
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+string CommonFG::getComment( const char* name, size_t bufsize ) const
+{
+   // temporary C-string for the object's comment
+   char* comment_C = new char[bufsize+1];
+
+   herr_t ret_value = H5Gget_comment( getLocId(), name, bufsize, comment_C );
+
+   // if H5Gget_comment returns SUCCEED, return the string comment
+   if( ret_value < 0 )
+   {
+      throwException("getComment", "H5Gget_comment failed");
+   }
+   string comment = string( comment_C );
+   delete []comment_C;
+   return( comment );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::getComment
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+string CommonFG::getComment( const string& name, size_t bufsize ) const
+{
+   return( getComment( name.c_str(), bufsize ));
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::mount
+///\brief	Mounts the file \a child onto this group.
+///\param	name  - IN: Name of the group
+///\param	child - IN: File to mount
+///\param	plist - IN: Property list to use
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CommonFG::mount( const char* name, H5File& child, PropList& plist ) const
+{
+   // Obtain identifiers for C API
+   hid_t plist_id = plist.getId();
+   hid_t child_id = child.getId();
+
+   // Call C routine H5Fmount to do the mouting
+   herr_t ret_value = H5Fmount( getLocId(), name, child_id, plist_id );
+
+   // Raise exception if H5Fmount returns negative value
+   if( ret_value < 0 )
+   {
+      throwException("mount", "H5Fmount failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::mount
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CommonFG::mount( const string& name, H5File& child, PropList& plist ) const
+{
+   mount( name.c_str(), child, plist );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::unmount
+///\brief	Unmounts the specified file.
+///\param	name  - IN: Name of the file to unmount
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CommonFG::unmount( const char* name ) const
+{
+   // Call C routine H5Fmount to do the mouting
+   herr_t ret_value = H5Funmount( getLocId(), name );
+
+   // Raise exception if H5Funmount returns negative value
+   if( ret_value < 0 )
+   {
+      throwException("unmount", "H5Funmount failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::unmount
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CommonFG::unmount( const string& name ) const
+{
+   unmount( name.c_str() );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::p_open_data_type (private)
+// Purpose	Opens the named datatype and returns the datatype's identifier.
+// Return	Id of the datatype
+// Exception	H5::FileIException or H5::GroupIException
+// Description
+//              This private function is used by the member functions
+//		CommonFG::openXxxType, where Xxx indicates the specific
+//		datatypes.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+hid_t CommonFG::p_open_data_type( const char* name ) const
+{
+   // Call C function H5Topen to open the named datatype in this group,
+   // giving either the file or group id
+   hid_t datatype_id = H5Topen( getLocId(), name );
+
+   // If the datatype's opening failed, throw an exception
+   if( datatype_id < 0 )
+   {
+      throwException("openDataType", "H5Topen failed");
+   }
+
+   // No failure, return the datatype id
+   return( datatype_id );
+}
+
+//
+// The following member functions use the private function
+// p_open_data_type to open a named datatype in this location
+//
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openDataType
+///\brief	Opens the named generic datatype at this location.
+///\param	name  - IN: Name of the datatype to open
+///\return	DataType instance
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataType CommonFG::openDataType( const char* name ) const
+{
+   DataType data_type(p_open_data_type(name));
+   return( data_type );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openDataType
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataType CommonFG::openDataType( const string& name ) const
+{
+   return( openDataType( name.c_str()) );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openArrayType
+///\brief	Opens the named array datatype at this location.
+///\param	name  - IN: Name of the array datatype to open
+///\return	ArrayType instance
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+ArrayType CommonFG::openArrayType( const char* name ) const
+{
+   ArrayType array_type(p_open_data_type(name));
+   return(array_type);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openArrayType
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+ArrayType CommonFG::openArrayType( const string& name ) const
+{
+   return( openArrayType( name.c_str()) );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openCompType
+///\brief	Opens the named compound datatype at this location.
+///\param	name  - IN: Name of the compound datatype to open
+///\return	CompType instance
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+CompType CommonFG::openCompType( const char* name ) const
+{
+   CompType comp_type(p_open_data_type(name));
+   return(comp_type);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openCompType
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+CompType CommonFG::openCompType( const string& name ) const
+{
+   return( openCompType( name.c_str()) );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openEnumType
+///\brief	Opens the named enumeration datatype at this location.
+///\param	name  - IN: Name of the enumeration datatype to open
+///\return	EnumType instance
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+EnumType CommonFG::openEnumType( const char* name ) const
+{
+   EnumType enum_type(p_open_data_type(name));
+   return(enum_type);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openEnumType
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+EnumType CommonFG::openEnumType( const string& name ) const
+{
+   return( openEnumType( name.c_str()) );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openIntType
+///\brief	Opens the named integer datatype at this location.
+///\param	name  - IN: Name of the integer datatype to open
+///\return	IntType instance
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IntType CommonFG::openIntType( const char* name ) const
+{
+   IntType int_type(p_open_data_type(name));
+   return(int_type);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openIntType
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IntType CommonFG::openIntType( const string& name ) const
+{
+   return( openIntType( name.c_str()) );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openFloatType
+///\brief	Opens the named floating-point datatype at this location.
+///\param	name  - IN: Name of the floating-point datatype to open
+///\return	FloatType instance
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FloatType CommonFG::openFloatType( const char* name ) const
+{
+   FloatType float_type(p_open_data_type(name));
+   return(float_type);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openFloatType
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FloatType CommonFG::openFloatType( const string& name ) const
+{
+   return( openFloatType( name.c_str()) );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openStrType
+///\brief	Opens the named string datatype at this location.
+///\param	name  - IN: Name of the string datatype to open
+///\return	StrType instance
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+StrType CommonFG::openStrType( const char* name ) const
+{
+   StrType str_type(p_open_data_type(name));
+   return(str_type);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openStrType
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+StrType CommonFG::openStrType( const string& name ) const
+{
+   return( openStrType( name.c_str()) );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openVarLenType
+///\brief	Opens the named variable length datatype at this location.
+///\param	name  - IN: Name of the variable length datatype to open
+///\return	VarLenType instance
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+VarLenType CommonFG::openVarLenType( const char* name ) const
+{
+   VarLenType varlen_type(p_open_data_type(name));
+   return(varlen_type);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::openVarLenType
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+VarLenType CommonFG::openVarLenType( const string& name ) const
+{
+   return( openVarLenType( name.c_str()) );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::iterateElems
+///\brief	Iterates a user's function over the entries of a group.
+///\param	name    - IN    : Name of group to iterate over
+///\param	idx     - IN/OUT: Starting (IN) and ending (OUT) entry indices
+///\param	op      - IN    : User's function to operate on each entry
+///\param	op_data - IN/OUT: Data associated with the operation
+///\return	The return value of the first operator that returns non-zero,
+///		or zero if all members were processed with no operator
+///		returning non-zero.
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+int CommonFG::iterateElems( const char* name, int *idx, H5G_iterate_t op , void* op_data )
+{
+   int ret_value = H5Giterate( getLocId(), name, idx, op, op_data );
+   if( ret_value < 0 )
+   {
+      throwException("iterateElems", "H5Giterate failed");
+   }
+   return( ret_value );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::iterateElems
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+int CommonFG::iterateElems( const string& name, int *idx, H5G_iterate_t op , void* op_data )
+{
+   return( iterateElems( name.c_str(), idx, op, op_data ));
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::getNumObjs
+///\brief	Returns the number of objects in this group.
+///\return	Number of objects
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - January, 2003
+//--------------------------------------------------------------------------
+hsize_t CommonFG::getNumObjs() const
+{
+   hsize_t num_objs;
+   herr_t ret_value = H5Gget_num_objs(getLocId(), &num_objs);
+   if(ret_value < 0)
+   {
+      throwException("getNumObjs", "H5Gget_num_objs failed");
+   }
+   return (num_objs);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::getObjnameByIdx
+///\brief	Returns the name of an object in this group, given the
+///		object's index.
+///\param	idx  -     IN: Transient index of the object
+///\return	Object name
+///\exception	H5::FileIException or H5::GroupIException
+///\par Description
+///		The value of idx can be any nonnegative number less than the
+///		total number of objects in the group, which is returned by
+///		the function \c CommonFG::getNumObjs.  Note that this is a
+///		transient index; thus, an object may have a different index
+///		each time the group is opened.
+// Programmer	Binh-Minh Ribler - Mar, 2005
+//--------------------------------------------------------------------------
+string CommonFG::getObjnameByIdx(hsize_t idx) const
+{
+    // call H5Gget_objname_by_idx with name as NULL to get its length
+    ssize_t name_len = H5Gget_objname_by_idx(getLocId(), idx, NULL, 0);
+    if(name_len < 0)
+    {
+      throwException("getObjnameByIdx", "H5Gget_objname_by_idx failed");
+    }
+
+    // now, allocate C buffer to get the name
+    char* name_C = new char[name_len];
+    name_len = H5Gget_objname_by_idx(getLocId(), idx, name_C, name_len);
+
+    // clean up and return the string
+    string name = string(name_C);
+    delete []name_C;
+    return (name);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::getObjnameByIdx
+///\brief	Retrieves the name of an object in this group, given the
+///		object's index.
+///\param	idx  -     IN: Transient index of the object
+///\param	name - IN/OUT: Retrieved name of the object
+///\param	size -     IN: Length to retrieve
+///\return	Actual size of the object name or 0, if object has no name
+///\exception	H5::FileIException or H5::GroupIException
+///\par Description
+///		The value of idx can be any nonnegative number less than the
+///		total number of objects in the group, which is returned by
+///		the function \c CommonFG::getNumObjs.  Note that this is a
+///		transient index; thus, an object may have a different index
+///		each time the group is opened.
+// Programmer	Binh-Minh Ribler - January, 2003
+//--------------------------------------------------------------------------
+ssize_t CommonFG::getObjnameByIdx(hsize_t idx, string& name, size_t size) const
+{
+   char* name_C = new char[size];
+   ssize_t name_len = H5Gget_objname_by_idx(getLocId(), idx, name_C, size);
+   if(name_len < 0)
+   {
+      throwException("getObjnameByIdx", "H5Gget_objname_by_idx failed");
+   }
+   name = string( name_C );
+   delete [] name_C;
+   return (name_len);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::getObjTypeByIdx
+///\brief	Returns the type of an object in this group, given the
+///		object's index.
+///\param	idx - IN: Transient index of the object
+///\return	Object type
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - January, 2003
+//--------------------------------------------------------------------------
+H5G_obj_t CommonFG::getObjTypeByIdx(hsize_t idx) const
+{
+   H5G_obj_t obj_type = H5Gget_objtype_by_idx(getLocId(), idx);
+   if (obj_type == H5G_UNKNOWN)
+   {
+      throwException("getObjTypeByIdx", "H5Gget_objtype_by_idx failed");
+   }
+   return (obj_type);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG::getObjTypeByIdx
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function because it also provides
+///		the returned object type in text.
+///\param	idx       - IN: Transient index of the object
+///\param	type_name - IN: Object type in text
+///\return	Object type
+///\exception	H5::FileIException or H5::GroupIException
+// Programmer	Binh-Minh Ribler - January, 2003
+//--------------------------------------------------------------------------
+H5G_obj_t CommonFG::getObjTypeByIdx(hsize_t idx, string& type_name) const
+{
+   H5G_obj_t obj_type = H5Gget_objtype_by_idx(getLocId(), idx);
+   switch (obj_type)
+   {
+	case H5G_LINK: type_name = string("symbolic link"); break;
+	case H5G_GROUP: type_name = string("group"); break;
+	case H5G_DATASET: type_name = string("dataset"); break;
+	case H5G_TYPE: type_name = string("datatype"); break;
+	case H5G_UNKNOWN:
+	default:
+   	{
+	   throwException("getObjTypeByIdx", "H5Gget_objtype_by_idx failed");
+	}
+   }
+   return (obj_type);
+}
+//--------------------------------------------------------------------------
+// Function:	CommonFG default constructor
+///\brief	Default constructor.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+CommonFG::CommonFG() {}
+
+//--------------------------------------------------------------------------
+// Function:	CommonFG destructor
+///\brief	Noop destructor.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+CommonFG::~CommonFG() {}
+
+#ifndef H5_NO_NAMESPACE
+}
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5CommonFG.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5CommonFG.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5CommonFG.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,167 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// CommonFG is a protocol class.  Its existence is simply to provide the
+// common services that are provided by H5File and Group.  The file or
+// group in the context of this class is referred to as 'location'.
+
+#ifndef _CommonFG_H
+#define _CommonFG_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class Group;
+class H5File;
+class ArrayType;
+class VarLenType;
+class H5_DLLCPP CommonFG {
+   public:
+	// Creates a new group at this location which can be a file
+	// or another group.
+	Group createGroup(const char* name, size_t size_hint = 0) const;
+	Group createGroup(const string& name, size_t size_hint = 0) const;
+
+	// Opens an existing group in a location which can be a file
+	// or another group.
+	Group openGroup(const char* name) const;
+	Group openGroup(const string& name) const;
+
+	// Creates a new dataset at this location.
+	DataSet createDataSet(const char* name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist = DSetCreatPropList::DEFAULT) const;
+	DataSet createDataSet(const string& name, const DataType& data_type, const DataSpace& data_space, const DSetCreatPropList& create_plist = DSetCreatPropList::DEFAULT) const;
+
+	// Opens an existing dataset at this location.
+	DataSet openDataSet(const char* name) const;
+	DataSet openDataSet(const string& name) const;
+
+	// Retrieves comment for the HDF5 object specified by its name.
+	string getComment(const string& name) const;
+	string getComment(const char* name, size_t bufsize) const;
+	string getComment(const string& name, size_t bufsize) const;
+
+	// Removes the comment for the HDF5 object specified by its name.
+	void removeComment(const char* name) const;
+	void removeComment(const string& name) const;
+
+	// Sets the comment for an HDF5 object specified by its name.
+	void setComment(const char* name, const char* comment) const;
+	void setComment(const string& name, const string& comment) const;
+
+	// Returns the name of the HDF5 object that the symbolic link points to.
+	string getLinkval(const char* name, size_t size) const;
+	string getLinkval(const string& name, size_t size) const;
+
+	// Returns the number of objects in this group.
+	hsize_t getNumObjs() const;
+
+	// Returns information about an HDF5 object, given by its name,
+	// at this location.
+	void getObjinfo(const char* name, hbool_t follow_link, H5G_stat_t& statbuf) const;
+	void getObjinfo(const string& name, hbool_t follow_link, H5G_stat_t& statbuf) const;
+
+	// Retrieves the name of an object in this group, given the
+	// object's index.
+	ssize_t getObjnameByIdx(hsize_t idx, string& name, size_t size) const;
+	string getObjnameByIdx(hsize_t idx) const;
+
+	// Returns the type of an object in this group, given the
+	// object's index.
+	H5G_obj_t getObjTypeByIdx(hsize_t idx) const;
+	H5G_obj_t getObjTypeByIdx(hsize_t idx, string& type_name) const;
+
+	// Iterates over the elements of this group - not implemented in
+	// C++ style yet.
+	int iterateElems(const char* name, int *idx, H5G_iterate_t op, void *op_data);
+	int iterateElems(const string& name, int *idx, H5G_iterate_t op, void *op_data);
+
+	// Creates a link of the specified type from new_name to current_name;
+	// both names are interpreted relative to the specified location id.
+	void link(H5G_link_t link_type, const char* curr_name, const char* new_name) const;
+	void link(H5G_link_t link_type, const string& curr_name, const string& new_name) const;
+
+	// Removes the specified name at this location.
+	void unlink(const char* name) const;
+	void unlink(const string& name) const;
+
+	// Mounts the file 'child' onto this location.
+	void mount(const char* name, H5File& child, PropList& plist) const;
+	void mount(const string& name, H5File& child, PropList& plist) const;
+
+	// Unmounts the file named 'name' from this parent location.
+	void unmount(const char* name) const;
+	void unmount(const string& name) const;
+
+	// Renames an object at this location.
+	void move(const char* src, const char* dst) const;
+	void move(const string& src, const string& dst) const;
+
+	// Opens a generic named datatype in this location.
+	DataType openDataType(const char* name) const;
+	DataType openDataType(const string& name) const;
+
+	// Opens a named array datatype in this location.
+	ArrayType openArrayType(const char* name) const;
+	ArrayType openArrayType(const string& name) const;
+
+	// Opens a named compound datatype in this location.
+	CompType openCompType(const char* name) const;
+	CompType openCompType(const string& name) const;
+
+	// Opens a named enumeration datatype in this location.
+	EnumType openEnumType(const char* name) const;
+	EnumType openEnumType(const string& name) const;
+
+	// Opens a named integer datatype in this location.
+	IntType openIntType(const char* name) const;
+	IntType openIntType(const string& name) const;
+
+	// Opens a named floating-point datatype in this location.
+	FloatType openFloatType(const char* name) const;
+	FloatType openFloatType(const string& name) const;
+
+	// Opens a named string datatype in this location.
+	StrType openStrType(const char* name) const;
+	StrType openStrType(const string& name) const;
+
+	// Opens a named variable length datatype in this location.
+	VarLenType openVarLenType(const char* name) const;
+	VarLenType openVarLenType(const string& name) const;
+
+	/// For subclasses, H5File and Group, to return the correct
+	/// object id, i.e. file or group id.
+	virtual hid_t getLocId() const = 0;
+
+	/// For subclasses, H5File and Group, to throw appropriate exception.
+	virtual void throwException(const string func_name, const string msg) const = 0;
+
+	// Default constructor.
+	CommonFG();
+
+	// Noop destructor.
+	virtual ~CommonFG();
+
+   private:
+	// Common code for member functions openXxxType
+	hid_t p_open_data_type(const char* name) const;
+
+}; // end of CommonFG declaration
+
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif
+

Added: packages/hdf5/branches/upstream/current/c++/src/H5CompType.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5CompType.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5CompType.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,429 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5Alltypes.h"
+#include "H5AbstractDs.h"
+#include "H5DxferProp.h"
+#include "H5DataSpace.h"
+#include "H5DataSet.h"
+#include "H5private.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+// Function:	CompType default constructor
+///\brief	Default constructor: Creates a stub compound datatype
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+CompType::CompType() : DataType() {}
+
+//--------------------------------------------------------------------------
+// Function:	CompType copy constructor
+///\brief	Copy constructor: makes copy of the original CompType object
+///\param	original - IN: Original CompType instance
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+CompType::CompType( const CompType& original ) : DataType( original ) {}
+
+//--------------------------------------------------------------------------
+// Function:	CompType overloaded constructor
+///\brief	Creates a CompType object using the id of an existing datatype.
+///\param	existing_id - IN: Id of an existing compound datatype
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+CompType::CompType( const hid_t existing_id ) : DataType( existing_id ) {}
+
+//--------------------------------------------------------------------------
+// Function:	CompType overloaded constructor
+///\brief	Creates an empty compound datatype given a size, in bytes.
+///\param	size - IN: Number of bytes in the datatype to create
+///\exception	H5::DataTypeIException
+// Description
+// 		The DataType constructor calls the C API H5Tcreate to create
+// 		the compound datatype.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+CompType::CompType( size_t size ) : DataType( H5T_COMPOUND, size ) {}
+
+//--------------------------------------------------------------------------
+// Function:	CompType overloaded constructor
+///\brief	Gets the compound datatype of the specified dataset.
+///\param	dataset - IN: Dataset that this enum datatype associates with
+///\return	CompType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+CompType::CompType( const DataSet& dataset ) : DataType()
+{
+   // Calls C function H5Dget_type to get the id of the datatype
+   id = H5Dget_type( dataset.getId() );
+
+   // If the datatype id is invalid, throw exception
+   if( id < 0 )
+   {
+      throw DataSetIException("CompType constructor", "H5Dget_type failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	CompType::getNmembers
+///\brief	Returns the number of members in this compound datatype.
+///\return	Number of members
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+int CompType::getNmembers() const
+{
+   int num_members = H5Tget_nmembers( id );
+   if( num_members < 0 )
+   {
+      throw DataTypeIException("CompType::getNmembers",
+		"H5Tget_nmembers returns negative number of members");
+   }
+   return( num_members );
+}
+
+//--------------------------------------------------------------------------
+// Function:	CompType::getMemberName
+///\brief	Returns the name of a member in this compound datatype.
+///\param	member_num - IN: Zero-based index of the member
+///\return	Name of member
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+string CompType::getMemberName( unsigned member_num ) const
+{
+    char* member_name_C = H5Tget_member_name( id, member_num );
+    if( member_name_C == NULL )  // NULL means failure
+    {
+	throw DataTypeIException("CompType::getMemberName",
+		"H5Tget_member_name returns NULL for member name");
+    }
+    string member_name = string(member_name_C); // convert C string to string
+    HDfree(member_name_C); // free the C string
+    return( member_name ); // return the member name string
+}
+
+//--------------------------------------------------------------------------
+// Function:	CompType::getMemberIndex
+///\brief	Returns the index of a member in this compound datatype.
+///\param	name - IN: Name of the member
+///\return	Index of member
+///\exception	H5::DataTypeIException
+///\par Description
+///		Members are stored in no particular order with numbers 0
+///		through N-1, where N is the value returned by the member
+///		function \c CompType::getNmembers.
+// Programmer	Binh-Minh Ribler - May 16, 2002
+//--------------------------------------------------------------------------
+int CompType::getMemberIndex(const char* name) const
+{
+   int member_index = H5Tget_member_index(id, name);
+   if( member_index < 0 )
+   {
+      throw DataTypeIException("CompType::getMemberIndex",
+		"H5Tget_member_index returns negative value");
+   }
+   return( member_index );
+}
+int CompType::getMemberIndex(const string& name) const
+{
+   return(getMemberIndex(name.c_str()));
+}
+
+//--------------------------------------------------------------------------
+// Function:	CompType::getMemberOffset
+///\brief	Returns the byte offset of the beginning of a member with
+///		respect to the beginning of the compound data type datum.
+///\param	member_num - IN: Zero-based index of the member
+///\return	Byte offset
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+// Description
+///		Members are stored in no particular order with numbers 0
+///		through N-1, where N is the value returned by the member
+///		function \c CompType::getNmembers.
+//
+//		Note that byte offset being returned as 0 doesn't indicate
+//		a failure. (According to Quincey)
+//--------------------------------------------------------------------------
+size_t CompType::getMemberOffset( unsigned member_num ) const
+{
+   size_t offset = H5Tget_member_offset( id, member_num );
+   return( offset );
+}
+
+// Returns the dimensionality of the member.
+int CompType::getMemberDims( unsigned member_num, size_t* dims, int* perm ) const
+{
+   throw DataTypeIException( "Error: getMemberDims is no longer supported." );
+   return (-1); // unreachable statement; but without it, the compiler
+		// will complain
+}
+
+//--------------------------------------------------------------------------
+// Function:	CompType::getMemberClass
+///\brief	Gets the type class of the specified member.
+///\param	member_num - IN: Zero-based index of the member
+///\return	Type class of the member
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Modified to use H5Tget_member_class instead. - Jul, 2005
+//--------------------------------------------------------------------------
+H5T_class_t CompType::getMemberClass( unsigned member_num ) const
+{
+   H5T_class_t member_class = H5Tget_member_class(id, member_num);
+   if( member_class == H5T_NO_CLASS )
+   {
+      throw DataTypeIException("CompType::getMemberClass",
+		"H5Tget_member_class returns H5T_NO_CLASS");
+   }
+   return(member_class);
+}
+
+// This private member function calls the C API to get the identifier
+// of the specified member.  It provides the id to construct appropriate
+// sub-types in the functions getMemberXxxType below, where Xxx indicates
+// the sub-types.
+hid_t CompType::p_get_member_type(unsigned member_num) const
+{
+   // get the id of the specified member first
+   hid_t member_type_id = H5Tget_member_type( id, member_num );
+   if( member_type_id > 0 )
+      return( member_type_id );
+   else
+   {
+	// p_get_member_type is private, use caller's function name for api
+      throw DataTypeIException("CompType::p_get_member_type",
+		"H5Tget_member_type failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	CompType::getMemberDataType
+///\brief	Returns the generic datatype of the specified member in this
+///		compound datatype.
+///\param	member_num - IN: Zero-based index of the member
+///\return	DataType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataType CompType::getMemberDataType( unsigned member_num ) const
+{
+   DataType datatype(p_get_member_type(member_num));
+   return(datatype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CompType::getMemberArrayType
+///\brief	Returns the array datatype of the specified member in this
+///		compound datatype.
+///\param	member_num - IN: Zero-based index of the member
+///\return	ArrayType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+ArrayType CompType::getMemberArrayType( unsigned member_num ) const
+{
+   ArrayType arraytype(p_get_member_type(member_num));
+   return(arraytype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CompType::getMemberCompType
+///\brief	Returns the compound datatype of the specified member in this
+///		compound datatype.
+///\param	member_num - IN: Zero-based index of the member
+///\return	CompType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+CompType CompType::getMemberCompType( unsigned member_num ) const
+{
+   CompType comptype(p_get_member_type(member_num));
+   return(comptype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CompType::getMemberEnumType
+///\brief	Returns the enumeration datatype of the specified member in
+///		this compound datatype.
+///\param	member_num - IN: Zero-based index of the member
+///\return	EnumType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+EnumType CompType::getMemberEnumType( unsigned member_num ) const
+{
+   EnumType enumtype(p_get_member_type(member_num));
+   return(enumtype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CompType::getMemberIntType
+///\brief	Returns the integer datatype of the specified member in this
+///		compound datatype.
+///\param	member_num - IN: Zero-based index of the member
+///\return	IntType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IntType CompType::getMemberIntType( unsigned member_num ) const
+{
+   IntType inttype(p_get_member_type(member_num));
+   return(inttype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CompType::getMemberFloatType
+///\brief	Returns the floating-point datatype of the specified member
+///		in this compound datatype.
+///\param	member_num - IN: Zero-based index of the member
+///\return	FloatType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FloatType CompType::getMemberFloatType( unsigned member_num ) const
+{
+   FloatType floatype(p_get_member_type(member_num));
+   return(floatype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CompType::getMemberStrType
+///\brief	Returns the string datatype of the specified member in this
+///		compound datatype.
+///\param	member_num - IN: Zero-based index of the member
+///\return	StrType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+StrType CompType::getMemberStrType( unsigned member_num ) const
+{
+   StrType strtype(p_get_member_type(member_num));
+   return(strtype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	CompType::getMemberVarLenType
+///\brief	Returns the variable length datatype of the specified member
+///		in this compound datatype.
+///\param	member_num - IN: Zero-based index of the member
+///\return	VarLenType instance
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+VarLenType CompType::getMemberVarLenType( unsigned member_num ) const
+{
+   VarLenType varlentype(p_get_member_type(member_num));
+   return(varlentype);
+}
+
+/* old style of getMemberType - using overloads; new style above
+   returns the appropriate datatypes but has different named functions.
+   In the old style, a datatype must be passed into the function.
+   May, 2004: These should be reconsidered to provide more convenience.
+// Returns the datatype of the specified member in this compound datatype.
+// Several overloading of getMemberType are for different datatypes
+void CompType::getMemberType( unsigned member_num, EnumType& enumtype ) const
+{
+   p_get_member_type(member_num, enumtype);
+}
+
+void CompType::getMemberType( unsigned member_num, CompType& comptype ) const
+{
+   p_get_member_type(member_num, comptype);
+}
+
+void CompType::getMemberType( unsigned member_num, IntType& inttype ) const
+{
+   p_get_member_type(member_num, inttype);
+}
+
+void CompType::getMemberType( unsigned member_num, FloatType& floatype ) const
+{
+   p_get_member_type(member_num, floatype);
+}
+
+void CompType::getMemberType( unsigned member_num, StrType& strtype ) const
+{
+   p_get_member_type(member_num, strtype);
+}
+// end of overloading of getMemberType
+*/
+
+//--------------------------------------------------------------------------
+// Function:	CompType::insertMember
+///\brief	Inserts a new member to this compound datatype.
+///\param	name - IN: Name of the new member
+///\param	offset - IN: Offset in memory structure of the field to insert
+///\param	new_member - IN: New member to be inserted
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CompType::insertMember( const string& name, size_t offset, const DataType& new_member ) const
+{
+   // Convert string to C-string
+   const char* name_C;
+   name_C = name.c_str();  // name_C refers to the contents of name as a C-str
+
+   hid_t new_member_id = new_member.getId();  // get new_member id for C API
+
+   // Call C routine H5Tinsert to add the new member
+   herr_t ret_value = H5Tinsert( id, name_C, offset, new_member_id );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException("CompType::insertMember", "H5Tinsert failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	CompType::pack
+///\brief	Recursively removes padding from within a compound datatype.
+///
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void CompType::pack() const
+{
+   // Calls C routine H5Tpack to remove padding
+   herr_t ret_value = H5Tpack( id );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException("CompType::pack", "H5Tpack failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:    CompType destructor
+///\brief       Properly terminates access to this compound datatype.
+// Programmer   Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+CompType::~CompType() {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5CompType.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5CompType.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5CompType.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,116 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Class CompType inherits from DataType and provides accesses to a compound
+// datatype.
+
+#ifndef _H5CompType_H
+#define _H5CompType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP CompType : public DataType {
+   public:
+	// Creates a new compound datatype, given the type's size
+	CompType( size_t size ); // H5Tcreate
+
+	// Gets the compound datatype of the specified dataset
+	CompType( const DataSet& dataset );  // H5Dget_type
+
+	// Returns the type class of the specified member of this compound
+	// datatype.  It provides to the user a way of knowing what type
+	// to create another datatype of the same class
+	H5T_class_t getMemberClass( unsigned member_num ) const;
+
+	// Returns the dimensionality of the specified member.
+	int getMemberDims( unsigned member_num, size_t* dims, int* perm ) const; // obsolete
+
+	// Returns the index of a member in this compound data type.
+	int getMemberIndex(const char* name) const;
+	int getMemberIndex(const string& name) const;
+
+	// Returns the offset of a member of this compound datatype.
+	size_t getMemberOffset( unsigned memb_no ) const;
+
+	// Returns the name of a member of this compound datatype.
+	string getMemberName( unsigned member_num ) const;
+
+	// Returns the generic datatype of the specified member in
+	// this compound datatype.
+	DataType getMemberDataType( unsigned member_num ) const;
+
+	// Returns the compound datatype of the specified member in
+	// this compound datatype.
+	ArrayType getMemberArrayType( unsigned member_num ) const;
+
+	// Returns the compound datatype of the specified member in
+	// this compound datatype.
+	CompType getMemberCompType( unsigned member_num ) const;
+
+	// Returns the enumeration datatype of the specified member in
+	// this compound datatype.
+	EnumType getMemberEnumType( unsigned member_num ) const;
+
+	// Returns the integer datatype of the specified member in
+	// this compound datatype.
+	IntType getMemberIntType( unsigned member_num ) const;
+
+	// Returns the floating-point datatype of the specified member in
+	// this compound datatype.
+	FloatType getMemberFloatType( unsigned member_num ) const;
+
+	// Returns the string datatype of the specified member in
+	// this compound datatype.
+	StrType getMemberStrType( unsigned member_num ) const;
+
+	// Returns the compound datatype of the specified member in
+	// this compound datatype.
+	VarLenType getMemberVarLenType( unsigned member_num ) const;
+
+	// Returns the number of members in this compound datatype.
+	int getNmembers() const;
+
+	// Adds a new member to this compound datatype.
+	void insertMember( const string& name, size_t offset, const DataType& new_member ) const;
+
+	// Recursively removes padding from within this compound datatype.
+	void pack() const;
+
+	// Returns this class name
+	virtual string fromClass () const { return("CompType"); }
+
+	// Default constructor
+	CompType();
+
+	// Creates a compound datatype using an existing id
+	CompType( const hid_t existing_id );
+
+	// Copy constructor - makes a copy of original object
+	CompType( const CompType& original );
+
+	// Noop destructor.
+	virtual ~CompType();
+
+   private:
+	// Contains common code that is used by the member functions
+	// getMemberXxxType
+	hid_t p_get_member_type(unsigned member_num) const;
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5Cpp.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5Cpp.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5Cpp.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,46 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5CPP_H
+#define _H5CPP_H
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5DataSpace.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5AbstractDs.h"
+#include "H5Attribute.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+#include "H5DxferProp.h"
+#include "H5FaccProp.h"
+#include "H5FcreatProp.h"
+#include "H5AtomType.h"
+#include "H5PredType.h"
+#include "H5EnumType.h"
+#include "H5IntType.h"
+#include "H5FloatType.h"
+#include "H5StrType.h"
+#include "H5CompType.h"
+#include "H5ArrayType.h"
+#include "H5VarLenType.h"
+#include "H5DataSet.h"
+#include "H5Group.h"
+#include "H5File.h"
+#include "H5Library.h"
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5CppDoc.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5CppDoc.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5CppDoc.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,90 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5CPPDOC_H
+#define _H5CPPDOC_H
+
+//-------------------------------------------------------------------------
+// The following section will be used to generate the 'Mainpage'
+// and the 'Examples' for the RM.
+// ------------------------------------------------------------------------
+
+/*! \mainpage notitle
+ *
+ * \section intro_sec Introduction
+ *
+ * The C++ API provides C++ wrappers for the HDF5 C library.
+ * It is assumed that the user has knowledge of the HDF5 file format
+ * and its components.  If you are not familiar with HDF5 file format,
+ * and would like to find out more, please refer to the HDF5 documentation
+ * at http://hdf.ncsa.uiuc.edu/HDF5/doc/H5.intro.html
+ *
+ * Because the HDF5 library maps very well to
+ * the object oriented design approach, classes in the C++ API can
+ * closely represent the interfaces of the HDF5 APIs, as followed:
+ *
+ * \verbatim
+ 	HDF5 C APIs				C++ Classes
+ 	-----------				-----------
+ 	Attribute Interface (H5A)		Attribute
+ 	Datasets Interface (H5D)		DataSet
+ 	Error Interface (H5E)			Exception
+ 	File Interface (H5F)			H5File
+ 	Group Interface (H5G)			Group
+ 	Identifier Interface (H5I)		IdComponent
+ 	Property List Interface (H5P)		PropList and subclasses
+ 	Dataspace Interface (H5S)		DataSpace
+ 	Datatype Interface (H5T)		DataType and subclasses
+  \endverbatim
+ * \section install_sec Installation
+ *
+ * Please refer to the file release_docs/INSTALL_Windows_withcpp.txt
+ * under the top directory for information about installing, building,
+ * and testing the C++ API.
+ *
+ *
+ */
+
+///	This example shows how to create datasets.
+///\par
+///\example     create.cpp
+
+///\par
+///	This example shows how to write datasets.
+///\example     writedata.cpp
+
+///\par
+///	This example shows how to read datasets.
+///\example     readdata.cpp
+
+///\par
+///	This example shows how to create a compound datatype,
+///	write an array which has the compound datatype to the file,
+///	and read back fields' subsets.
+///\example     compound.cpp
+
+///\par
+///	This example shows how to work with extendible datasets.
+///\example     extend_ds.cpp
+
+///\par
+///	This example shows how to read data from a chunked dataset.
+///\example     chunks.cpp
+
+///\par
+///	This example shows how to work with groups.
+///\example     h5group.cpp
+
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5DataSet.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5DataSet.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5DataSet.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,529 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5PropList.h"
+#include "H5DxferProp.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+#include "H5DataSpace.h"
+#include "H5AbstractDs.h"
+#include "H5DataSet.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+// Function:	DataSet default constructor
+///\brief	Default constructor: creates a stub DataSet.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataSet::DataSet() : AbstractDs() {}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet overloaded constructor
+///\brief	Creates an DataSet object using the id of an existing dataset.
+///\param	existing_id - IN: Id of an existing dataset
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataSet::DataSet(const hid_t existing_id) : AbstractDs(existing_id) {}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet copy constructor
+///\brief	Copy constructor: makes a copy of the original DataSet object.
+///\param	original - IN: DataSet instance to copy
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataSet::DataSet( const DataSet& original ) : AbstractDs( original ) {}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::getSpace
+///\brief	Gets a copy of the dataspace of this dataset.
+///\return	DataSpace instance
+///\exception	H5::DataSetIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataSpace DataSet::getSpace() const
+{
+   // Calls C function H5Dget_space to get the id of the dataspace
+   hid_t dataspace_id = H5Dget_space( id );
+
+   // If the dataspace id is invalid, throw an exception
+   if( dataspace_id < 0 )
+   {
+      throw DataSetIException("DataSet::getSpace", "H5Dget_space failed");
+   }
+   //create dataspace object using the existing id then return the object
+   DataSpace data_space( dataspace_id );
+   return( data_space );
+}
+
+// This private member function calls the C API to get the identifier
+// of the datatype that is used by this dataset.  It is used
+// by the various AbstractDs functions to get the specific datatype.
+hid_t DataSet::p_get_type() const
+{
+   hid_t type_id = H5Dget_type( id );
+   if( type_id > 0 )
+      return( type_id );
+   else
+   {
+      throw DataSetIException("", "H5Dget_type failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::getCreatePlist
+///\brief	Gets the dataset creation property list.
+///\return	DSetCreatPropList instance
+///\exception	H5::DataSetIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DSetCreatPropList DataSet::getCreatePlist() const
+{
+   hid_t create_plist_id = H5Dget_create_plist( id );
+   if( create_plist_id < 0 )
+   {
+      throw DataSetIException("DataSet::getCreatePlist", "H5Dget_create_plist failed");
+   }
+   // create and return the DSetCreatPropList object
+   DSetCreatPropList create_plist( create_plist_id );
+   return( create_plist );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::getStorageSize
+///\brief	Returns the amount of storage required for a dataset.
+///\return	Size of the storage or 0, for no data
+///\exception	H5::DataSetIException
+// Note:	H5Dget_storage_size returns 0 when there is no data.  This
+//		function should have no failure. (from SLU)
+// Programmer	Binh-Minh Ribler - Mar, 2005
+//--------------------------------------------------------------------------
+hsize_t DataSet::getStorageSize() const
+{
+   hsize_t storage_size = H5Dget_storage_size(id);
+   return(storage_size);
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::getOffset
+///\brief	Returns the address of this dataset in the file.
+///\return	Address of dataset
+///\exception	H5::DataSetIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+haddr_t DataSet::getOffset() const
+{
+   haddr_t ds_addr; // for address of dataset
+
+   ds_addr = H5Dget_offset(id);
+   if( ds_addr == HADDR_UNDEF )
+   {
+      throw DataSetIException("DataSet::getOffset", "H5Dget_offset returned HADDR_UNDEF");
+   }
+   return(ds_addr);
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::getSpaceStatus
+///\brief	Determines whether space has been allocated for a dataset.
+///\param	status - OUT: Space allocation status
+///\exception	H5::DataSetIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSet::getSpaceStatus(H5D_space_status_t& status) const
+{
+   herr_t ret_value = H5Dget_space_status(id, &status);
+   if( ret_value < 0 )
+   {
+      throw DataSetIException("DataSet::getSpaceStatus", "H5Dget_space_status failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::getVlenBufSize
+///\brief	Returns the number of bytes required to store VL data.
+///\return	Amount of storage
+///\exception	H5::DataSetIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+hsize_t DataSet::getVlenBufSize( DataType& type, DataSpace& space ) const
+{
+   // Obtain identifiers for C API
+   hid_t type_id = type.getId();
+   hid_t space_id = space.getId();
+
+   hsize_t size; // for amount of storage
+
+   herr_t ret_value = H5Dvlen_get_buf_size( id, type_id, space_id, &size );
+   if( ret_value < 0 )
+   {
+      throw DataSetIException("DataSet::getVlenBufSize", "H5Dvlen_get_buf_size failed");
+   }
+   return( size );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::vlenReclaim
+///\brief	Reclaims VL datatype memory buffers.
+///\param	type - IN: Datatype, which is the datatype stored in the buffer
+///\param	space - IN: Selection for the memory buffer to free the
+///		VL datatypes within
+///\param	xfer_plist - IN: Property list used to create the buffer
+///\param	buf - IN: Pointer to the buffer to be reclaimed
+///\exception	H5::DataSetIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSet::vlenReclaim( DataType& type, DataSpace& space, DSetMemXferPropList& xfer_plist, void* buf ) const
+{
+   // Obtain identifiers for C API
+   hid_t type_id = type.getId();
+   hid_t space_id = space.getId();
+   hid_t xfer_plist_id = xfer_plist.getId();
+
+   herr_t ret_value = H5Dvlen_reclaim( type_id, space_id, xfer_plist_id, buf );
+   if( ret_value < 0 )
+   {
+      throw DataSetIException("DataSet::vlenReclaim", "H5Dvlen_reclaim failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::read
+///\brief	Reads raw data from the specified dataset.
+///\param	buf - IN: Buffer for read data
+///\param	mem_type - IN: Memory datatype
+///\param	mem_space - IN: Memory dataspace
+///\param	file_space - IN: Dataset's dataspace in the file
+///\param	xfer_plist - IN: Transfer property list for this I/O operation
+///\exception	H5::DataSetIException
+///\par Description
+///		This function reads raw data from this dataset into the
+///		buffer \a buf, converting from file datatype and dataspace
+///		to memory datatype \a mem_type and dataspace \a mem_space.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSet::read( void* buf, const DataType& mem_type, const DataSpace& mem_space, const DataSpace& file_space, const DSetMemXferPropList& xfer_plist ) const
+{
+   // Obtain identifiers for C API
+   hid_t mem_type_id = mem_type.getId();
+   hid_t mem_space_id = mem_space.getId();
+   hid_t file_space_id = file_space.getId();
+   hid_t xfer_plist_id = xfer_plist.getId();
+
+   herr_t ret_value = H5Dread( id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf );
+   if( ret_value < 0 )
+   {
+      throw DataSetIException("DataSet::read", "H5Dread failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::read
+///\brief	This is an overloaded member function, provided for convenience.
+///		It takes a reference to a \c std::string for the buffer.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSet::read( string& strg, const DataType& mem_type, const DataSpace& mem_space, const DataSpace& file_space, const DSetMemXferPropList& xfer_plist ) const
+{
+   // Allocate C character string for reading
+   size_t size = mem_type.getSize();
+   char* strg_C = new char[size+1];  // temporary C-string for C API
+
+   // Use the overloaded member to read
+   read(strg_C, mem_type, mem_space, file_space, xfer_plist);
+
+   // Get the String and clean up
+   strg = strg_C;
+   delete []strg_C;
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::write
+///\brief	Writes raw data from an application buffer to a dataset.
+///\param	buf - IN: Buffer containing data to be written
+///\param	mem_type - IN: Memory datatype
+///\param	mem_space - IN: Memory dataspace
+///\param	file_space - IN: Dataset's dataspace in the file
+///\param	xfer_plist - IN: Transfer property list for this I/O operation
+///\exception	H5::DataSetIException
+///\par Description
+///		This function writes raw data from an application buffer
+///		\a buf to a dataset, converting from memory datatype
+///		\a mem_type and dataspace \a mem_space to file datatype
+///		and dataspace.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSet::write( const void* buf, const DataType& mem_type, const DataSpace& mem_space, const DataSpace& file_space, const DSetMemXferPropList& xfer_plist ) const
+{
+   // Obtain identifiers for C API
+   hid_t mem_type_id = mem_type.getId();
+   hid_t mem_space_id = mem_space.getId();
+   hid_t file_space_id = file_space.getId();
+   hid_t xfer_plist_id = xfer_plist.getId();
+
+   herr_t ret_value = H5Dwrite( id, mem_type_id, mem_space_id, file_space_id, xfer_plist_id, buf );
+   if( ret_value < 0 )
+   {
+      throw DataSetIException("DataSet::write", "H5Dwrite failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::write
+///\brief	This is an overloaded member function, provided for convenience.
+///		It takes a reference to a \c std::string for the buffer.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSet::write( const string& strg, const DataType& mem_type, const DataSpace& mem_space, const DataSpace& file_space, const DSetMemXferPropList& xfer_plist ) const
+{
+   // Convert string to C-string
+   const char* strg_C;
+   strg_C = strg.c_str();  // strg_C refers to the contents of strg as a C-str
+
+   // Use the overloaded member
+   write(strg_C, mem_type, mem_space, file_space, xfer_plist);
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::iterateElems
+///\brief	Iterates over all selected elements in a dataspace.
+///\param	buf - IN/OUT: Pointer to the buffer in memory containing the
+///		elements to iterate over
+///\param	type - IN: Datatype for the elements stored in \a buf
+///\param	space - IN: Dataspace for \a buf. Also contains the selection
+///		to iterate over.
+///\param	op - IN: Function pointer to the routine to be called for
+///		each element in \a buf iterated over
+///\param	op_data - IN/OUT: Pointer to any user-defined data associated
+///		with the operation
+///\exception	H5::DataSetIException
+///\note	This function may not work correctly yet - it's still
+///		under development.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+int DataSet::iterateElems( void* buf, const DataType& type, const DataSpace& space, H5D_operator_t op, void* op_data )
+{
+   // Obtain identifiers for C API
+   hid_t type_id = type.getId();
+   hid_t space_id = space.getId();
+   herr_t ret_value = H5Diterate( buf, type_id, space_id, op, op_data );
+   if( ret_value >= 0 )
+      return( ret_value );
+   else  // raise exception when H5Diterate returns a negative value
+   {
+      throw DataSetIException("DataSet::iterateElems", "H5Diterate failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::extend
+///\brief	Extends a dataset with unlimited dimension.
+///\param	size - IN: Array containing the new magnitude of each dimension
+///\exception	H5::DataSetIException
+///\par Description
+///		For more information, please see the Description section in
+///		C layer Reference Manual at:
+/// http:
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSet::extend( const hsize_t* size ) const
+{
+   herr_t ret_value = H5Dextend( id, size );
+   if( ret_value < 0 )  // raise exception when H5Dextend returns a neg value
+   {
+      throw DataSetIException("DataSet::extend", "H5Dextend failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::fillMemBuf
+///\brief	Fills a selection in memory with a value.
+///\param	fill - IN: Pointer to fill value to use - default NULL
+///\param	fill_type - IN: Datatype of the fill value
+///\param	buf - IN/OUT: Memory buffer to fill selection within
+///\param	buf_type - IN: Datatype of the elements in buffer
+///\param	space - IN: Dataspace describing memory buffer & containing selection to use
+///\exception	H5::DataSetIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSet::fillMemBuf(const void *fill, DataType& fill_type, void *buf, DataType& buf_type, DataSpace& space)
+{
+    hid_t fill_type_id = fill_type.getId();
+    hid_t buf_type_id = buf_type.getId();
+    hid_t space_id = space.getId();
+    herr_t ret_value = H5Dfill(fill, fill_type_id, buf, buf_type_id, space_id);
+    if( ret_value < 0 )
+    {
+	throw DataSetIException("DataSet::fillMemBuf", "H5Dfill failed");
+    }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::fillMemBuf
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it only takes the
+///		the last three arguments.
+///\param	buf - IN/OUT: Memory buffer to fill selection within
+///\param	buf_type - IN: Datatype of the elements in buffer
+///\param	space - IN: Dataspace describing memory buffer & containing selection to use
+///\exception	H5::DataSetIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSet::fillMemBuf(void *buf, DataType& buf_type, DataSpace& space)
+{
+    hid_t buf_type_id = buf_type.getId();
+    hid_t space_id = space.getId();
+    herr_t ret_value = H5Dfill(NULL, buf_type_id, buf, buf_type_id, space_id);
+    if( ret_value < 0 )
+    {
+	throw DataSetIException("DataSet::fillMemBuf", "H5Dfill failed");
+    }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::Reference
+///\brief	Creates a reference to an HDF5 object or a dataset region.
+///\param	name - IN: Name of the object to be referenced
+///\param	dataspace - IN: Dataspace with selection
+///\param	ref_type - IN: Type of reference; default to \c H5R_DATASET_REGION
+///\return	A reference
+///\exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void* DataSet::Reference(const char* name, DataSpace& dataspace, H5R_type_t ref_type) const
+{
+   return(p_reference(name, dataspace.getId(), ref_type));
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::Reference
+///\brief	This is an overloaded function, provided for your convenience.
+///		It differs from the above function in that it only creates
+///		a reference to an HDF5 object, not to a dataset region.
+///\param	name - IN: Name of the object to be referenced - \c char pointer
+///\return	A reference
+///\exception	H5::IdComponentException
+///\par Description
+//		This function passes H5R_OBJECT and -1 to the protected
+//		function for it to pass to the C API H5Rcreate
+//		to create a reference to the named object.
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void* DataSet::Reference(const char* name) const
+{
+   return(p_reference(name, -1, H5R_OBJECT));
+}
+
+//--------------------------------------------------------------------------
+// Function:    DataSet::Reference
+///\brief       This is an overloaded function, provided for your convenience.
+///             It differs from the above function in that it takes an
+///             \c std::string for the object's name.
+///\param       name - IN: Name of the object to be referenced - \c std::string
+// Programmer   Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void* DataSet::Reference(const string& name) const
+{
+   return(Reference(name.c_str()));
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::getObjType
+///\brief	Retrieves the type of object that an object reference points to.
+///\param		ref_type - IN: Type of reference to query
+///\param		ref      - IN: Reference to query
+// Return	An object type, which can be one of the following:
+//			H5G_LINK Object is a symbolic link.
+//			H5G_GROUP Object is a group.
+//			H5G_DATASET   Object is a dataset.
+//			H5G_TYPE Object is a named datatype
+// Exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+H5G_obj_t DataSet::getObjType(void *ref, H5R_type_t ref_type) const
+{
+   return(p_get_obj_type(ref, ref_type));
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::getRegion
+///\brief	Retrieves a dataspace with the region pointed to selected.
+///\param	ref_type - IN: Type of reference to get region of - default
+///		to H5R_DATASET_REGION
+///\param	ref      - IN: Reference to get region of
+///\return	DataSpace instance
+///\exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+DataSpace DataSet::getRegion(void *ref, H5R_type_t ref_type) const
+{
+   DataSpace dataspace(p_get_region(ref, ref_type));
+   return(dataspace);
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet::close
+///\brief	Closes this dataset.
+///
+///\exception	H5::DataSetIException
+// Programmer	Binh-Minh Ribler - Mar 9, 2005
+//--------------------------------------------------------------------------
+void DataSet::close()
+{
+   herr_t ret_value = H5Dclose( id );
+   if( ret_value < 0 )
+   {
+      throw DataSetIException("DataSet::close", "H5Dclose failed");
+   }
+   // reset the id because the group that it represents is now closed
+   id = 0;
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSet destructor
+///\brief	Properly terminates access to this dataset.
+// Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Replaced resetIdComponent with decRefCount to use C library
+//		ID reference counting mechanism - BMR, Feb 20, 2005
+//--------------------------------------------------------------------------
+DataSet::~DataSet()
+{
+    // The dataset id will be closed properly
+    try {
+        decRefCount();
+    }
+    catch (Exception close_error) {
+        cerr << "DataSet::~DataSet - " << close_error.getDetailMsg() << endl;
+    }
+}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5DataSet.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5DataSet.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5DataSet.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,111 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Class DataSet inherits from AbstractDs and provides accesses to a dataset.
+
+#ifndef _H5DataSet_H
+#define _H5DataSet_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP DataSet : public AbstractDs {
+   public:
+	// Extends the dataset with unlimited dimension.
+	void extend( const hsize_t* size ) const;
+
+	// Fills a selection in memory with a value
+	void fillMemBuf(const void *fill, DataType& fill_type, void *buf, DataType& buf_type, DataSpace& space);
+	// Fills a selection in memory with zero
+	void fillMemBuf(void *buf, DataType& buf_type, DataSpace& space);
+
+	// Gets the creation property list of this dataset.
+	DSetCreatPropList getCreatePlist() const;
+
+	// Returns the address of this dataset in the file.
+	haddr_t getOffset() const;
+
+	// Gets the dataspace of this dataset.
+	virtual DataSpace getSpace() const;
+
+	// Determines whether space has been allocated for a dataset.
+	void getSpaceStatus(H5D_space_status_t& status) const;
+
+	// Returns the amount of storage size required for this dataset.
+	virtual hsize_t getStorageSize() const;
+
+	// not yet implemented??
+	hsize_t getVlenBufSize( DataType& type, DataSpace& space ) const;
+	void vlenReclaim( DataType& type, DataSpace& space, DSetMemXferPropList& xfer_plist, void* buf ) const;
+
+	// Reads the data of this dataset and stores it in the provided buffer.
+	// The memory and file dataspaces and the transferring property list
+	// can be defaults.
+	void read( void* buf, const DataType& mem_type, const DataSpace& mem_space = DataSpace::ALL, const DataSpace& file_space = DataSpace::ALL, const DSetMemXferPropList& xfer_plist = DSetMemXferPropList::DEFAULT ) const;
+        void read( string& buf, const DataType& mem_type, const DataSpace& mem_space = DataSpace::ALL, const DataSpace& file_space = DataSpace::ALL, const DSetMemXferPropList& xfer_plist = DSetMemXferPropList::DEFAULT ) const;
+
+	// Writes the buffered data to this dataset.
+	// The memory and file dataspaces and the transferring property list
+	// can be defaults.
+	void write( const void* buf, const DataType& mem_type, const DataSpace& mem_space = DataSpace::ALL, const DataSpace& file_space = DataSpace::ALL, const DSetMemXferPropList& xfer_plist = DSetMemXferPropList::DEFAULT ) const;
+        void write( const string& buf, const DataType& mem_type, const DataSpace& mem_space = DataSpace::ALL, const DataSpace& file_space = DataSpace::ALL, const DSetMemXferPropList& xfer_plist = DSetMemXferPropList::DEFAULT ) const;
+
+	// Iterates the selected elements in the specified dataspace - not implemented in C++ style yet
+        int iterateElems( void* buf, const DataType& type, const DataSpace& space, H5D_operator_t op, void* op_data = NULL );
+
+	// Retrieves the type of object that an object reference points to.
+	H5G_obj_t getObjType(void *ref, H5R_type_t ref_type) const;
+
+	// Retrieves a dataspace with the region pointed to selected.
+	DataSpace getRegion(void *ref, H5R_type_t ref_type = H5R_DATASET_REGION) const;
+
+	// Creates a reference to a named Hdf5 object or to a dataset region
+	// in this object.
+	void* Reference(const char* name, DataSpace& dataspace, H5R_type_t ref_type = H5R_DATASET_REGION) const;
+
+	// Creates a reference to a named Hdf5 object in this object.
+	void* Reference(const char* name) const;
+	void* Reference(const string& name) const;
+
+	// Returns this class name
+	virtual string fromClass () const { return("DataSet"); }
+
+	// Creates a copy of an existing DataSet using its id.
+	DataSet(const hid_t existing_id);
+
+	// Close this dataset.
+	virtual void close();
+
+	// Default constructor.
+	DataSet();
+
+	// Copy constructor.
+	DataSet( const DataSet& original );
+
+	// Destructor: properly terminates access to this dataset.
+	virtual ~DataSet();
+
+   private:
+        // This function contains the common code that is used by
+        // getTypeClass and various API functions getXxxType
+        // defined in AbstractDs for generic datatype and specific
+        // sub-types
+	virtual hid_t p_get_type() const;
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5DataSpace.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5DataSpace.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5DataSpace.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,590 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5DataSpace.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+///\brief	Constant for default dataspace.
+//--------------------------------------------------------------------------
+const DataSpace DataSpace::ALL( H5S_ALL );
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace constructor
+///\brief	Creates a new dataspace given a dataspace type.
+///\param	type - IN: Type of the dataspace to be created, which
+///		currently can be either \c H5S_SCALAR or \c H5S_SIMPLE;
+///		default to \c H5S_SCALAR.
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataSpace::DataSpace( H5S_class_t type ) : IdComponent()
+{
+   id = H5Screate( type );
+   if( id < 0 )
+   {
+      throw DataSpaceIException("DataSpace constructor", "H5Screate failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace overloaded constructor
+///\brief	Creates a new simple dataspace.
+///\param	rank - IN: Number of dimensions of dataspace.
+///\param	dims - IN: An array of the size of each dimension.
+///\param	maxdims - IN: An array of the maximum size of each dimension.
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataSpace::DataSpace( int rank, const hsize_t * dims, const hsize_t * maxdims) : IdComponent()
+{
+   id = H5Screate_simple( rank, dims, maxdims );
+   if( id < 0 )
+   {
+      throw DataSpaceIException("DataSpace constructor", "H5Screate_simple failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace overloaded constructor
+///\brief	Creates a DataSpace object using the id of an existing
+///		dataspace.
+///\param	existing_id - IN: Id of an existing dataspace
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataSpace::DataSpace(const hid_t existing_id) : IdComponent(existing_id) {}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace copy constructor
+///\brief	Copy constructor: makes a copy of the original DataSpace object.
+///\param	original - IN: DataSpace object to copy
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataSpace::DataSpace( const DataSpace& original ) : IdComponent( original ) {}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::copy
+///\brief	Makes a copy of an existing dataspace.
+///\param	like_space  - IN: Dataspace to be copied
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Replaced resetIdComponent with decRefCount to use C library
+//		ID reference counting mechanism - BMR, Feb 20, 2005
+//--------------------------------------------------------------------------
+void DataSpace::copy( const DataSpace& like_space )
+{
+   // If this object has a valid id, appropriately decrement reference
+   // counter and close the id.
+   if( id != H5S_ALL ) {
+      try {
+         decRefCount();
+      }
+      catch (Exception close_error) {
+         throw DataSpaceIException("DataSpace::copy", close_error.getDetailMsg());
+      }
+   }  // if
+
+   // call C routine to copy the dataspace
+   id = H5Scopy( like_space.getId() );
+
+   if( id < 0 )
+      throw DataSpaceIException("DataSpace::copy", "H5Scopy failed");
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::operator=
+///\brief	Assignment operator.
+///\param	rhs - IN: Reference to the existing dataspace
+///\return	Reference to DataSpace instance
+///\exception	H5::DataSpaceIException
+// Description
+//		Makes a copy of the type on the right hand side and stores
+//		the new id in the left hand side object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataSpace& DataSpace::operator=( const DataSpace& rhs )
+{
+   copy(rhs);
+   return(*this);
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::isSimple
+///\brief	Determines whether this dataspace is a simple dataspace.
+///\return	\c true if the dataspace is a simple dataspace, and \c false,
+///		otherwise
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+bool DataSpace::isSimple () const
+{
+   htri_t simple = H5Sis_simple( id );
+   if( simple > 0 )
+      return true;
+   else if( simple == 0 )
+      return false;
+   else
+   {
+      throw DataSpaceIException("DataSpace::isSimple",
+		"H5Sis_simple returns negative value");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::offsetSimple
+///\brief	Sets the offset of this simple dataspace.
+///\param	offset  - IN: Offset to position the selection at
+///\exception	H5::DataSpaceIException
+///\par Description
+///		This function creates an offset for the selection within
+///		an extent, allowing the same shaped selection to be moved
+///		to different locations within a dataspace without requiring
+///		it to be re-defined.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSpace::offsetSimple ( const hssize_t* offset ) const
+{
+   herr_t ret_value = H5Soffset_simple( id, offset );
+   if( ret_value < 0 )
+   {
+      throw DataSpaceIException("DataSpace::offsetSimple", "H5Soffset_simple failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::getSimpleExtentDims
+///\brief	Retrieves dataspace dimension size and maximum size.
+///\param	dims  - IN: Name of the new member
+///\param	maxdims - IN: Pointer to the value of the new member
+///\return	Number of dimensions, the same value as returned by
+///		\c DataSpace::getSimpleExtentNdims()
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+int DataSpace::getSimpleExtentDims ( hsize_t *dims, hsize_t *maxdims ) const
+{
+   int ndims = H5Sget_simple_extent_dims( id, dims, maxdims );
+   if( ndims < 0 )
+   {
+      throw DataSpaceIException("DataSpace::getSimpleExtentDims",
+		"H5Sget_simple_extent_dims returns negative number of dimensions");
+   }
+   return( ndims );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::getSimpleExtentNdims
+///\brief	Returns the dimensionality of a dataspace.
+///\return	Number of dimensions
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+int DataSpace::getSimpleExtentNdims () const
+{
+   int ndims = H5Sget_simple_extent_ndims( id );
+   if( ndims < 0 )
+   {
+      throw DataSpaceIException("DataSpace::getSimpleExtentNdims",
+		"H5Sget_simple_extent_ndims returns negative value for dimensionality of the dataspace");
+   }
+   return( ndims );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::getSimpleExtentNpoints
+///\brief	Returns the number of elements in a dataspace.
+///\return	Number of elements
+///\exception	H5::DataSpaceIException
+// Modification
+//		12/05/00: due to C API change
+//			return type hssize_t vs. hsize_t
+//			num_elements = -1 when failure occurs vs. 0
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+hssize_t DataSpace::getSimpleExtentNpoints () const
+{
+   hssize_t num_elements = H5Sget_simple_extent_npoints( id );
+
+   if( num_elements > -1 )
+      return( num_elements );
+   else
+   {
+      throw DataSpaceIException("DataSpace::getSimpleExtentNpoints",
+	"H5Sget_simple_extent_npoints returns negative value for the number of elements in the dataspace");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::getSimpleExtentType
+///\brief	Returns the current class of a dataspace.
+///\return	Class of the dataspace
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5S_class_t DataSpace::getSimpleExtentType () const
+{
+   H5S_class_t class_name = H5Sget_simple_extent_type( id );
+   if( class_name == H5S_NO_CLASS )
+   {
+      throw DataSpaceIException("DataSpace::getSimpleExtentType",
+		"H5Sget_simple_extent_type returns H5S_NO_CLASS");
+   }
+   return( class_name );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::extentCopy
+///\brief	Copies the extent of a dataspace.
+///\param	dest_space  - IN: Dataspace to copy from
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSpace::extentCopy ( DataSpace& dest_space ) const
+{
+   hid_t dest_space_id = dest_space.getId();
+   herr_t ret_value = H5Sextent_copy( dest_space_id, id );
+   if( ret_value < 0 )
+   {
+      throw DataSpaceIException("DataSpace::extentCopy", "H5Sextent_copy failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::setExtentSimple
+///\brief	Sets or resets the size of an existing dataspace.
+///\param	rank  - IN: Rank of the dataspace
+///\param	current_size - IN: Array containing current size of dataspace
+///\param	maximum_size - IN: Array containing maximum size of dataspace
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSpace::setExtentSimple( int rank, const hsize_t *current_size, const hsize_t *maximum_size ) const
+{
+   herr_t ret_value;
+   ret_value = H5Sset_extent_simple( id, rank, current_size, maximum_size );
+   if( ret_value < 0 )
+   {
+      throw DataSpaceIException("DataSpace::setExtentSimple", "H5Sset_extent_simple failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::setExtentNone
+///\brief	Removes the extent from a dataspace.
+///
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSpace::setExtentNone () const
+{
+   herr_t ret_value = H5Sset_extent_none( id );
+   if( ret_value < 0 )
+   {
+      throw DataSpaceIException("DataSpace::setExtentNone", "H5Sset_extent_none failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::getSelectNpoints
+///\brief	Returns the number of elements in a dataspace selection.
+///\return	Number of elements
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+hssize_t DataSpace::getSelectNpoints () const
+{
+   hssize_t num_elements = H5Sget_select_npoints( id );
+   if( num_elements < 0 )
+   {
+      throw DataSpaceIException("DataSpace::getSelectNpoints",
+		"H5Sget_select_npoints returns negative value for number of elements in the dataspace selection");
+   }
+   return( num_elements );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::getSelectHyperNblocks
+///\brief	Returns number of hyperslab blocks.
+///\return	Number of hyperslab blocks
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+hssize_t DataSpace::getSelectHyperNblocks () const
+{
+   hssize_t num_blocks = H5Sget_select_hyper_nblocks( id );
+   if( num_blocks < 0 )
+   {
+      throw DataSpaceIException("DataSpace::getSelectHyperNblocks",
+		"H5Sget_select_hyper_nblocks returns negative value for the number of hyperslab blocks");
+   }
+   return( num_blocks );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::getSelectHyperBlocklist
+///\brief	Gets the list of hyperslab blocks currently selected
+///\param	startblock  - IN: Hyperslab block to start with
+///\param	numblocks - IN: Number of hyperslab blocks to get
+///\param	buf - IN: List of hyperslab blocks selected
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSpace::getSelectHyperBlocklist( hsize_t startblock, hsize_t numblocks, hsize_t *buf ) const
+{
+   herr_t ret_value;
+   ret_value = H5Sget_select_hyper_blocklist( id, startblock, numblocks, buf );
+   if( ret_value < 0 )
+   {
+      throw DataSpaceIException("DataSpace::getSelectHyperBlocklist",
+		"H5Sget_select_hyper_blocklist failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::getSelectElemNpoints
+///\brief	Returns the number of element points in the current selection.
+///\return	Number of element points
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+hssize_t DataSpace::getSelectElemNpoints () const
+{
+   hssize_t num_points = H5Sget_select_elem_npoints( id );
+   if( num_points < 0 )
+   {
+      throw DataSpaceIException("DataSpace::getSelectElemNpoints",
+		"H5Sget_select_elem_npoints failed");
+   }
+   return( num_points );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::getSelectElemPointlist
+///\brief	Gets the list of element points currently selected
+///\param	startpoint  - IN: Element point to start with
+///\param	numpoints - IN: Number of element points to get
+///\param	buf - IN: List of element points selected
+///\exception	H5::DataSpaceIException
+///\par Description
+///		For more information, please refer to the C layer Reference
+///		Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5S.html#Dataspace-SelectElemPointList
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSpace::getSelectElemPointlist ( hsize_t startpoint, hsize_t numpoints, hsize_t *buf ) const
+{
+   herr_t ret_value;
+   ret_value = H5Sget_select_elem_pointlist( id, startpoint, numpoints, buf );
+   if( ret_value < 0 )
+   {
+      throw DataSpaceIException("DataSpace::getSelectElemPointlist",
+                "H5Sget_select_elem_pointlist failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::getSelectBounds
+///\brief	Gets the bounding box containing the current selection.
+///\param	start  - IN: Starting coordinates of the bounding box
+///\param	end - IN: Ending coordinates of the bounding box, i.e.,
+///		the coordinates of the diagonally opposite corner
+///\exception	H5::DataSpaceIException
+///\par Description
+///		For more information, please refer to the C layer Reference
+///		Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5S.html#Dataspace-SelectBounds
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSpace::getSelectBounds ( hsize_t* start, hsize_t* end ) const
+{
+   herr_t ret_value = H5Sget_select_bounds( id, start, end );
+   if( ret_value < 0 )
+   {
+      throw DataSpaceIException("DataSpace::getSelectBounds",
+                "H5Sget_select_bounds failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::H5Sselect_elements
+///\brief	Selects array elements to be included in the selection for
+///		this dataspace.
+///\param	op  - IN: Operator specifying how the new selection is to be
+///		combined with the existing selection for the dataspace
+///\param	num_elements  - IN: Number of elements to be selected
+///\param	coord  - IN: A 2-dimensional array of 0-based values
+///		specifying the coordinates of the elements being selected
+///\exception	H5::DataSpaceIException
+///\par Description
+///		For more information, please refer to the C layer Reference
+///		Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5S.html#Dataspace-SelectElements
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSpace::selectElements ( H5S_seloper_t op, const size_t num_elements, const hsize_t *coord[ ] ) const
+{
+   herr_t ret_value;
+   ret_value = H5Sselect_elements( id, op, num_elements, coord );
+   if( ret_value < 0 )
+   {
+      throw DataSpaceIException("DataSpace::selectElements",
+                "H5Sselect_elements failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::selectAll
+///\brief	Selects the entire dataspace.
+///
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSpace::selectAll () const
+{
+   herr_t ret_value = H5Sselect_all( id );
+   if( ret_value < 0 )
+   {
+      throw DataSpaceIException("DataSpace::selectAll", "H5Sselect_all failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::selectNone
+///\brief	Resets the selection region to include no elements.
+///
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSpace::selectNone () const
+{
+  herr_t ret_value = H5Sselect_none( id );
+   if( ret_value < 0 )
+   {
+      throw DataSpaceIException("DataSpace::selectNone",
+                "H5Sselect_none failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::selectValid
+///\brief	Verifies that the selection is within the extent of the
+///		dataspace.
+///\return	\c true if the selection is within the extent of the
+///		dataspace, and \c false, otherwise
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+bool DataSpace::selectValid () const
+{
+  htri_t ret_value = H5Sselect_valid( id );
+   if( ret_value > 0 )
+      return true;
+   else if( ret_value == 0 )
+      return false;
+   else
+   {
+      throw DataSpaceIException("DataSpace::selectValid",
+                "H5Sselect_valid returns negative value");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::selectHyperslab
+///\brief	Selects a hyperslab region to add to the current selected region.
+///\param	op - IN: Operation to perform on current selection
+///\param	count - IN: Number of blocks included in the hyperslab
+///\param	start - IN: Offset of the start of hyperslab
+///\param	stride - IN: Hyperslab stride - default to \c NULL
+///\param	block - IN: Size of block in the hyperslab - default to \c NULL
+///\exception	H5::DataSpaceIException
+///\par Description
+///		For more information, please refer to the C layer Reference
+///		Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5S.html#Dataspace-SelectHyperslab
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataSpace::selectHyperslab( H5S_seloper_t op, const hsize_t *count, const hsize_t *start, const hsize_t *stride, const hsize_t *block ) const
+{
+   herr_t ret_value;
+   ret_value = H5Sselect_hyperslab( id, op, start, stride, count, block );
+   if( ret_value < 0 )
+   {
+      throw DataSpaceIException("DataSpace::selectHyperslab",
+		"H5Sselect_hyperslab failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace::close
+///\brief	Closes this dataspace.
+///
+///\exception	H5::DataSpaceIException
+// Programmer	Binh-Minh Ribler - Mar 9, 2005
+//--------------------------------------------------------------------------
+void DataSpace::close()
+{
+   if( id != H5S_ALL ) // not a constant, should call H5Sclose
+   {
+      herr_t ret_value = H5Sclose(id);
+      if( ret_value < 0 )
+      {
+	 throw DataSpaceIException("DataSpace::close", "H5Sclose failed");
+      }
+      // reset the id because the dataspace that it represents is now closed
+      id = 0;
+   }
+   else // cannot close a constant
+      throw DataSpaceIException("DataSpace::close", "Cannot close a constant");
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataSpace destructor
+///\brief	Properly terminates access to this dataspace.
+// Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Replaced resetIdComponent with decRefCount to use C library
+//		ID reference counting mechanism - BMR, Feb 20, 2005
+//--------------------------------------------------------------------------
+DataSpace::~DataSpace()
+{
+   // If this object has a valid id, appropriately decrement reference
+   // counter and close the id.
+   if( id != H5S_ALL ) {
+      try {
+         decRefCount();
+      }
+      catch (Exception close_error) {
+	 cerr << "DataSpace::~DataSpace - " << close_error.getDetailMsg() << endl;
+      }
+   }  // if
+}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5DataSpace.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5DataSpace.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5DataSpace.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,120 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5DataSpace_H
+#define _H5DataSpace_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP DataSpace : public IdComponent {
+   public:
+	// Default DataSpace objects
+	static const DataSpace ALL;
+
+	// Creates a dataspace object given the space type
+	DataSpace(H5S_class_t type = H5S_SCALAR);
+
+	// Creates a simple dataspace
+	DataSpace(int rank, const hsize_t * dims, const hsize_t * maxdims = NULL);
+
+	// Assignment operator
+	DataSpace& operator=( const DataSpace& rhs );
+
+	// Makes copy of an existing dataspace.
+	void copy(const DataSpace& like_space);
+
+	// Copies the extent of this dataspace.
+	void extentCopy( DataSpace& dest_space ) const;
+
+	// Gets the bounding box containing the current selection.
+	void getSelectBounds( hsize_t* start, hsize_t* end ) const;
+
+	// Gets the number of element points in the current selection.
+	hssize_t getSelectElemNpoints() const;
+
+	// Retrieves the list of element points currently selected.
+	void getSelectElemPointlist( hsize_t startpoint, hsize_t numpoints, hsize_t *buf ) const;
+
+	// Gets the list of hyperslab blocks currently selected.
+	void getSelectHyperBlocklist( hsize_t startblock, hsize_t numblocks, hsize_t *buf ) const;
+
+	// Get number of hyperslab blocks.
+	hssize_t getSelectHyperNblocks() const;
+
+	// Gets the number of elements in this dataspace selection.
+	hssize_t getSelectNpoints() const;
+
+	// Retrieves dataspace dimension size and maximum size.
+	int getSimpleExtentDims( hsize_t *dims, hsize_t *maxdims = NULL ) const;
+
+	// Gets the dimensionality of this dataspace.
+	int getSimpleExtentNdims() const;
+
+	// Gets the number of elements in this dataspace.
+	// 12/05/00 - changed return type to hssize_t from hsize_t - C API
+	hssize_t getSimpleExtentNpoints() const;
+
+	// Gets the current class of this dataspace.
+	H5S_class_t getSimpleExtentType() const;
+
+	// Determines if this dataspace is a simple one.
+	bool isSimple() const;
+
+	// Sets the offset of this simple dataspace.
+	void offsetSimple( const hssize_t* offset ) const;
+
+	// Selects the entire dataspace.
+	void selectAll() const;
+
+	// Selects array elements to be included in the selection for
+	// this dataspace.
+	void selectElements( H5S_seloper_t op, const size_t num_elements, const hsize_t *coord[ ] ) const;
+
+	// Selects a hyperslab region to add to the current selected region.
+	void selectHyperslab( H5S_seloper_t op, const hsize_t *count, const hsize_t *start, const hsize_t *stride = NULL, const hsize_t *block = NULL ) const;
+
+	// Resets the selection region to include no elements.
+	void selectNone() const;
+
+	// Verifies that the selection is within the extent of the dataspace.
+	bool selectValid() const;
+
+	// Removes the extent from this dataspace.
+	void setExtentNone() const;
+
+	// Sets or resets the size of this dataspace.
+	void setExtentSimple( int rank, const hsize_t *current_size, const hsize_t *maximum_size = NULL ) const;
+
+	// Returns this class name
+	virtual string fromClass () const { return("DataSpace"); }
+
+	// Creates a DataSpace object using an existing dataspace id.
+	DataSpace(const hid_t space_id);
+
+	// Copy constructor: makes a copy of the original DataSpace object.
+	DataSpace(const DataSpace& original);
+
+	// Close this dataspace.
+	virtual void close();
+
+	// Destructor: properly terminates access to this dataspace.
+	virtual ~DataSpace();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5DataType.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5DataType.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5DataType.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,725 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5DataSpace.h"
+#include "H5Object.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+#include "H5AtomType.h"
+#include "H5PredType.h"
+#include "H5private.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+// Function:	DataType overloaded constructor
+///\brief	Creates a datatype using an existing datatype's id
+///\param	existing_id - IN: Id of the existing datatype
+///\param	predefined  - IN: Indicates whether or not this datatype is
+///		a predefined datatype; default to \c false
+// Description
+//		Constructor creates a copy of an existing DataType using
+//		its id.  The argument "predefined" is default to false;
+//		when a default datatype is created, this argument is set
+//		to true so H5Tclose will not be called on it later. - need
+//		a reassessment after changing to the new ref counting mech.
+//		- BMR 5/2004
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataType::DataType(const hid_t existing_id, bool predefined) : H5Object(existing_id), is_predtype(predefined) {}
+
+//--------------------------------------------------------------------------
+// Function:	DataType overloaded constructor
+///\brief	Creates a object given its class and size
+///\param	type_class - IN: Class of datatype to create
+///\param	size       - IN: Number of bytes in the datatype to create
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataType::DataType( const H5T_class_t type_class, size_t size ) : H5Object(), is_predtype( false )
+{
+   // Call C routine to create the new datatype
+   id = H5Tcreate( type_class, size );
+   if( id < 0 )
+   {
+      throw DataTypeIException("DataType constructor", "H5Tcreate failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType default constructor
+///\brief	Default constructor: Creates a stub datatype
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataType::DataType() : H5Object(), is_predtype( false ) {}
+
+//--------------------------------------------------------------------------
+// Function:	DataType copy constructor
+///\brief	Copy constructor: makes a copy of the original DataType object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataType::DataType(const DataType& original) : H5Object(original)
+{
+   is_predtype = original.is_predtype; // copy data member from original
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::copy
+///\brief	Copies an existing datatype to this datatype object
+///\param	like_type - IN: Datatype to be copied
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Replaced resetIdComponent with decRefCount to use C library
+//		ID reference counting mechanism - BMR, Feb 20, 2005
+//--------------------------------------------------------------------------
+void DataType::copy( const DataType& like_type )
+{
+   // reset the identifier of this instance, H5Tclose will be called
+   // if needed
+   if( is_predtype == false ) {
+        try {
+            decRefCount();
+        }
+        catch (Exception close_error) {
+            throw DataTypeIException(inMemFunc("copy"), close_error.getDetailMsg());
+        }
+    }
+
+   // call C routine to copy the datatype
+   id = H5Tcopy( like_type.getId() );
+
+   if( id < 0 )
+      throw DataTypeIException(inMemFunc("copy"), "H5Tcopy failed");
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::operator=
+///\brief	Assignment operator
+///\param	rhs - IN: Reference to the existing datatype
+///\return	Reference to DataType instance
+///\exception	H5::DataTypeIException
+// Description
+// 		Makes a copy of the type on the right hand side and stores
+//		the new id in the left hand side object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataType& DataType::operator=( const DataType& rhs )
+{
+   copy(rhs);
+   return(*this);
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::operator==
+///\brief	Compares this DataType against the given one to determines
+///		whether the two objects refer to the same actual datatype.
+///\param	compared_type - IN: Reference to the datatype to compare
+///\return	true if the datatypes are equal, and false, otherwise.
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+bool DataType::operator==(const DataType& compared_type ) const
+{
+   // Call C routine H5Tequal to determines whether two datatype
+   // identifiers refer to the same datatype
+   htri_t ret_value = H5Tequal( id, compared_type.getId() );
+   if( ret_value > 0 )
+      return true;
+   else if( ret_value == 0 )
+      return false;
+   else
+   {
+      throw DataTypeIException(inMemFunc("operator=="),
+		"H5Tequal returns negative value");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::commit
+///\brief	Commits a transient datatype to a file, creating a new
+///		named datatype
+///\param	loc - IN: Either a file or a group
+///\param	name - IN: Name of the datatype
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataType::commit(CommonFG& loc, const char* name) const
+{
+   hid_t loc_id = loc.getLocId(); // get location id for C API
+
+   // Call C routine to commit the transient datatype
+   herr_t ret_value = H5Tcommit( loc_id, name, id );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException(inMemFunc("commit"), "H5Tcommit failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::commit
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function only in the type of the
+///		argument \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataType::commit(CommonFG& loc, const string& name) const
+{
+   commit( loc, name.c_str() );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::committed
+///\brief	Determines whether a datatype is a named type or a
+///		transient type.
+///\return	\c true if the datatype is a named type, and \c false, 
+///		otherwise.
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+bool DataType::committed() const
+{
+   // Call C function to determine if a datatype is a named one
+   htri_t committed = H5Tcommitted( id );
+   if( committed > 0 )
+      return true;
+   else if( committed == 0 )
+      return false;
+   else
+   {
+      throw DataTypeIException(inMemFunc("committed"), "H5Tcommitted return negative value");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::find
+///\brief	Finds a conversion function that can handle a conversion
+///		from this datatype to the specified datatype, \a dest.
+///\param	dest   - IN: Destination datatype
+///\param	pcdata - IN: Pointer to type conversion data
+///\return	Pointer to a suitable conversion function
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5T_conv_t DataType::find( const DataType& dest, H5T_cdata_t **pcdata ) const
+{
+   // Call C routine to find the conversion function
+   H5T_conv_t func = H5Tfind( id, dest.getId(), pcdata );
+   if( func == NULL )
+   {
+      throw DataTypeIException(inMemFunc("find"), "H5Tfind returns a NULL function");
+   }
+   return( func );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::convert
+///\brief	Converts data from this datatype to the specified datatypes.
+///\param	dest       - IN: Destination datatype
+///\param	nelmts     - IN: Size of array \a buf
+///\param	buf        - IN/OUT: Array containing pre- and post-conversion
+///				values
+///\param	background - IN: Optional backgroud buffer
+///\param	plist      - IN: Dataset transfer property list
+///\return	Pointer to a suitable conversion function
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataType::convert( const DataType& dest, size_t nelmts, void *buf, void *background, PropList& plist ) const
+{
+   // Get identifiers for C API
+   hid_t dest_id = dest.getId();
+   hid_t plist_id = plist.getId();
+
+   // Call C routine H5Tconvert to convert the data
+   herr_t ret_value;
+   ret_value = H5Tconvert( id, dest_id, nelmts, buf, background, plist_id );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException(inMemFunc("convert"), "H5Tconvert failed");
+   }
+}
+
+/*
+These two functions may not work properly.  They will be re-evaluated 
+and tested throughly.  BMR - Oct 29, 2005
+*/
+
+//--------------------------------------------------------------------------
+// Function:	DataType::setOverflow
+///\brief	Sets the overflow handler to a specified function.
+///\param	func       - IN: Function to be called when overflow occurs
+///\return	Pointer to a suitable conversion function
+///\exception	H5::DataTypeIException
+///\par Description
+///		The function specified by \a func will be called for all 
+///		data type conversions that result in an overflow.
+///		For more information, please see:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-SetOverflow
+// Programmer	Binh-Minh Ribler - 2004
+//--------------------------------------------------------------------------
+void DataType::setOverflow( H5T_overflow_t func ) const
+{
+   // Call C routine H5Tset_overflow to set the overflow handler
+   herr_t ret_value = H5Tset_overflow( func );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException(inMemFunc("setOverflow"), "H5Tset_overflow failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::getOverflow
+///\brief	Returns a pointer to the current global overflow function.
+///\return	Pointer to an application-defined function if successful; 
+///		otherwise returns NULL; this can happen if no overflow 
+///		handling function is registered.
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2004
+//--------------------------------------------------------------------------
+H5T_overflow_t DataType::getOverflow(void) const
+{
+   return( H5Tget_overflow());  // C routine
+   // NULL can be returned as well
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::lock
+///\brief	Locks a datatype, making it read-only and non-destructible.
+///
+///\exception	H5::DataTypeIException
+///\par Descrition
+///		This is normally done by the library for predefined data
+///		types so the application doesn't inadvertently change or
+///		delete a predefined type.
+///
+///		Once a data type is locked it can never be unlocked unless
+///		the entire library is closed.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataType::lock() const
+{
+   // Call C routine to lock the datatype
+   herr_t ret_value = H5Tlock( id );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException(inMemFunc("lock"), "H5Tlock failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::getClass
+///\brief	Returns the datatype class identifier.
+///\return	Datatype class identifier
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5T_class_t DataType::getClass() const
+{
+   H5T_class_t type_class = H5Tget_class( id );
+
+   // Return datatype class identifier if successful
+   if( type_class == H5T_NO_CLASS )
+   {
+      throw DataTypeIException(inMemFunc("getClass"),
+		"H5Tget_class returns H5T_NO_CLASS");
+   }
+   return( type_class );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::getSize
+///\brief	Returns the size of a datatype.
+///\return	Datatype size in bytes
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+size_t DataType::getSize() const
+{
+   // Call C routine to get the datatype size
+   size_t type_size = H5Tget_size( id );
+   if( type_size <= 0 ) // valid data types are never zero size
+   {
+      throw DataTypeIException(inMemFunc("getSize"),
+		"H5Tget_size returns invalid datatype size");
+   }
+   return( type_size );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::getSuper
+///\brief	Returns the base datatype from which a datatype is derived.
+///\return	DataType object
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DataType DataType::getSuper() const
+{
+   // Call C routine to get the base datatype from which the specified
+   // datatype is derived.
+   hid_t base_type_id = H5Tget_super( id );
+
+   // If H5Tget_super returns a valid datatype id, create and return
+   // the base type, otherwise, raise exception
+   if( base_type_id > 0 )
+   {
+      DataType base_type( base_type_id );
+      return( base_type );
+   }
+   else
+   {
+      throw DataTypeIException(inMemFunc("getSuper"), "H5Tget_super failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::registerFunc
+///\brief	Registers the specified conversion function.
+///\param	pers - IN: Conversion option
+///			\li \c H5T_PERS_HARD for hard conversion functions
+///			\li \c H5T_PERS_SOFT for soft conversion functions.
+///\param	name - IN: Name displayed in diagnostic output.
+///\param	dest - IN: Destination datatype.
+///\param	func - IN: Function to convert between source and
+///		destination datatypes.
+///\exception	H5::DataTypeIException
+///\par Description
+///		For more information, please see:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-Register
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataType::registerFunc( H5T_pers_t pers, const char* name, const DataType& dest, H5T_conv_t func ) const
+{
+   hid_t dest_id = dest.getId();  // get id of the destination datatype
+
+   // Call C routine H5Tregister to register the conversion function
+   herr_t ret_value = H5Tregister( pers, name, id, dest_id, func );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException(inMemFunc("registerFunc"), "H5Tregister failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::registerFunc
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function only in the type of the
+///		argument \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataType::registerFunc( H5T_pers_t pers, const string& name, const DataType& dest, H5T_conv_t func ) const
+{
+   registerFunc( pers, name.c_str(), dest, func );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::unregister
+///\brief	Removes a conversion function from all conversion paths.
+///\param	pers - IN: Conversion option
+///			\li \c H5T_PERS_HARD for hard conversion functions
+///			\li \c H5T_PERS_SOFT for soft conversion functions.
+///\param	name - IN: Name displayed in diagnostic output.
+///\param	dest - IN: Destination datatype.
+///\param	func - IN: Function to convert between source and
+///		destination datatypes.
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataType::unregister( H5T_pers_t pers, const char* name, const DataType& dest, H5T_conv_t func ) const
+{
+   hid_t dest_id = dest.getId();  // get id of the dest datatype for C API
+
+   // Call C routine H5Tunregister to remove the conversion function
+   herr_t ret_value = H5Tunregister( pers, name, id, dest_id, func );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException(inMemFunc("unregister"), "H5Tunregister failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::unregister
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function only in the type of the
+///		argument \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataType::unregister( H5T_pers_t pers, const string& name, const DataType& dest, H5T_conv_t func ) const
+{
+   unregister( pers, name.c_str(), dest, func );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::setTag
+///\brief	Tags an opaque datatype.
+///\param	tag - IN: Descriptive ASCII string with which the opaque
+///		datatype is to be tagged.
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataType::setTag( const char* tag ) const
+{
+   // Call C routine H5Tset_tag to tag an opaque datatype.
+   herr_t ret_value = H5Tset_tag( id, tag );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException(inMemFunc("setTag"), "H5Tset_tag failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::setTag
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function only in the type of the
+///		argument \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DataType::setTag( const string& tag ) const
+{
+   setTag( tag.c_str());
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::getTag
+///\brief	Gets the tag associated with an opaque datatype.
+///\return	Tag associated with the opaque datatype
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+string DataType::getTag() const
+{
+   char* tag_Cstr = H5Tget_tag( id );
+
+   // if the tag C-string returned is not NULL, convert it to C++ string
+   // and return it, otherwise, raise an exception
+   if( tag_Cstr != NULL )
+   {
+      string tag = string(tag_Cstr); // convert C string to string object
+	HDfree(tag_Cstr); // free the C string
+      return (tag); // return the tag
+   }
+   else
+   {
+      throw DataTypeIException(inMemFunc("getTag"),
+		"H5Tget_tag returns NULL for tag");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::detectClass
+///\brief	Checks whether a datatype contains (or is) a certain type of
+///		datatype.
+///\return	true if this datatype contains or is the specified type,
+///		and false, otherwise.
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+bool DataType::detectClass(H5T_class_t cls) const
+{
+   htri_t ret_value = H5Tdetect_class(id, cls);
+   if( ret_value > 0 )
+      return true;
+   else if( ret_value == 0 )
+      return false;
+   else
+   {
+      throw DataTypeIException(inMemFunc("detectClass"),
+		"H5Tdetect_class returns negative value");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::isVariableStr
+///\brief	Check whether this datatype is a variable-length string.
+///\return	true if this datatype is a variable-length string, and
+///		false, otherwise.
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+bool DataType::isVariableStr() const
+{
+   htri_t is_varlen_str = H5Tis_variable_str(id);
+   if( is_varlen_str == 1 )
+      return true;
+   else if( is_varlen_str == 0 )
+      return false;
+   else
+   {
+      throw DataTypeIException(inMemFunc("isVariableStr"),
+                "H5Tis_variable_str returns negative value");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::Reference
+///\brief	Creates a reference to an HDF5 object or a dataset region.
+///\param	name - IN: Name of the object to be referenced
+///\param	dataspace - IN: Dataspace with selection
+///\param	ref_type - IN: Type of reference; default to \c H5R_DATASET_REGION
+///\return	A reference
+///\exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void* DataType::Reference(const char* name, DataSpace& dataspace, H5R_type_t ref_type) const
+{
+   try {
+      return(p_reference(name, dataspace.getId(), ref_type));
+   }
+   catch (IdComponentException E) {
+      throw DataTypeIException(inMemFunc("Reference"), E.getDetailMsg());
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::Reference
+///\brief	This is an overloaded function, provided for your convenience.
+///		It differs from the above function in that it only creates
+///		a reference to an HDF5 object, not to a dataset region.
+///\param	name - IN: Name of the object to be referenced
+///\return	A reference
+///\exception	H5::IdComponentException
+///\par Description
+//		This function passes H5R_OBJECT and -1 to the protected
+//		function for it to pass to the C API H5Rcreate
+//		to create a reference to the named object.
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void* DataType::Reference(const char* name) const
+{
+   try {
+      return(p_reference(name, -1, H5R_OBJECT));
+   }
+   catch (IdComponentException E) {
+      throw DataTypeIException(inMemFunc("Reference"), E.getDetailMsg());
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::Reference
+///\brief	This is an overloaded function, provided for your convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for the object's name.
+///\param	name - IN: Name of the object to be referenced - \c std::string
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void* DataType::Reference(const string& name) const
+{
+   return(Reference(name.c_str()));
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::getObjType
+///\brief	Retrieves the type of object that an object reference points to.
+///\param		ref      - IN: Reference to query
+///\param		ref_type - IN: Type of reference to query
+///\return	Object type, which can be one of the following:
+///			\li \c H5G_LINK Object is a symbolic link.
+///			\li \c H5G_GROUP Object is a group.
+///			\li \c H5G_DATASET   Object is a dataset.
+///			\li \c H5G_TYPE Object is a named datatype
+///\exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+H5G_obj_t DataType::getObjType(void *ref, H5R_type_t ref_type) const
+{
+   try {
+      return(p_get_obj_type(ref, ref_type));
+   }
+   catch (IdComponentException E) {
+      throw DataTypeIException(inMemFunc("getObjType"), E.getDetailMsg());
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::getRegion
+///\brief	Retrieves a dataspace with the region pointed to selected.
+///\param	ref      - IN: Reference to get region of
+///\param	ref_type - IN: Type of reference to get region of - default
+///\return	DataSpace instance
+///\exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+DataSpace DataType::getRegion(void *ref, H5R_type_t ref_type) const
+{
+   try {
+      DataSpace dataspace(p_get_region(ref, ref_type));
+      return(dataspace);
+   }
+   catch (IdComponentException E) {
+      throw DataTypeIException(inMemFunc("getRegion"), E.getDetailMsg());
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType::close
+///\brief	Closes the datatype if it is not a predefined type.
+///
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - Mar 9, 2005
+//--------------------------------------------------------------------------
+void DataType::close()
+{
+   // If this datatype is not a predefined type, call H5Tclose on it.
+   if( is_predtype == false )
+   {
+      herr_t ret_value = H5Tclose(id);
+      if( ret_value < 0 )
+      {
+         throw DataTypeIException(inMemFunc("close"), "H5Tclose failed");
+      }
+      // reset the id because the datatype that it represents is now closed
+      id = 0;
+   }
+   else // cannot close a predefined type
+      throw DataTypeIException(inMemFunc("close"), "Cannot close a predefined type");
+}
+
+//--------------------------------------------------------------------------
+// Function:	DataType destructor
+///\brief	Properly terminates access to this datatype.
+// Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Replaced resetIdComponent with decRefCount to use C library
+//		ID reference counting mechanism - BMR, Feb 20, 2005
+//--------------------------------------------------------------------------
+DataType::~DataType()
+{
+   // The datatype id will be closed properly
+   if( is_predtype == false ) {
+        try {
+            decRefCount();
+        }
+        catch (Exception close_error) {
+            cerr << inMemFunc("~DataType - ") << close_error.getDetailMsg() << endl;
+        }
+    }
+}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5DataType.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5DataType.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5DataType.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,132 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5DataType_H
+#define _H5DataType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP DataType : public H5Object {
+   public:
+	// Creates a datatype given its class and size
+	DataType( const H5T_class_t type_class, size_t size );
+
+	// Copy constructor: makes a copy of the original object
+	DataType( const DataType& original );
+
+	// Closes this datatype.
+	virtual void close();
+
+	// Copies an existing datatype to this datatype object
+	void copy( const DataType& like_type );
+
+	// Returns the datatype class identifier.
+	H5T_class_t getClass() const;
+
+	// Commits a transient datatype to a file; this datatype becomes
+	// a named datatype which can be accessed from the location.
+	void commit( CommonFG& loc, const char* name ) const;
+	void commit( CommonFG& loc, const string& name ) const;
+
+	// Determines whether this datatype is a named datatype or
+	// a transient datatype.
+	bool committed() const;
+
+        // Finds a conversion function that can handle the conversion
+        // this datatype to the given datatype, dest.
+	H5T_conv_t find( const DataType& dest, H5T_cdata_t **pcdata ) const;
+
+	// Converts data from between specified datatypes.
+	void convert( const DataType& dest, size_t nelmts, void *buf, void *background, PropList& plist ) const;
+
+	// Assignment operator
+	DataType& operator=( const DataType& rhs );
+
+	// Determines whether two datatypes are the same.
+	bool operator==(const DataType& compared_type ) const;
+
+	// Locks a datatype.
+	void lock() const;
+
+	// Returns a pointer to the current global overflow function.
+	H5T_overflow_t getOverflow(void) const;
+
+	// Sets the overflow handler to a specified function.
+	void setOverflow(H5T_overflow_t func) const;
+
+	// Returns the size of a datatype.
+	size_t getSize() const;
+
+	// Returns the base datatype from which a datatype is derived.
+	// Note: not quite right for specific types yet???
+	DataType getSuper() const;
+
+	// Registers a conversion function.
+	void registerFunc(H5T_pers_t pers, const char* name, const DataType& dest, H5T_conv_t func ) const;
+	void registerFunc(H5T_pers_t pers, const string& name, const DataType& dest, H5T_conv_t func ) const;
+
+	// Removes a conversion function from all conversion paths.
+	void unregister( H5T_pers_t pers, const char* name, const DataType& dest, H5T_conv_t func ) const;
+	void unregister( H5T_pers_t pers, const string& name, const DataType& dest, H5T_conv_t func ) const;
+
+	// Tags an opaque datatype.
+	void setTag( const char* tag ) const;
+	void setTag( const string& tag ) const;
+
+	// Gets the tag associated with an opaque datatype.
+	string getTag() const;
+
+	// Checks whether this datatype contains (or is) a certain type class.
+	bool detectClass(H5T_class_t cls) const;
+
+	// Checks whether this datatype is a variable-length string.
+	bool isVariableStr() const;
+
+	// Creates a reference to a named Hdf5 object in this object.
+	void* Reference(const char* name) const;
+	void* Reference(const string& name) const;
+
+	// Creates a reference to a named Hdf5 object or to a dataset region
+	// in this object.
+	void* Reference(const char* name, DataSpace& dataspace, H5R_type_t ref_type = H5R_DATASET_REGION) const;
+
+	// Retrieves the type of object that an object reference points to.
+	H5G_obj_t getObjType(void *ref, H5R_type_t ref_type) const;
+
+	// Retrieves a dataspace with the region pointed to selected.
+	DataSpace getRegion(void *ref, H5R_type_t ref_type = H5R_DATASET_REGION) const;
+
+	// Returns this class name
+	virtual string fromClass () const { return("DataType"); }
+
+	// Creates a copy of an existing DataType using its id
+	DataType( const hid_t type_id, bool predtype = false );
+
+	// Default constructor
+	DataType();
+
+	// Destructor: properly terminates access to this datatype.
+	virtual ~DataType();
+
+   protected:
+	bool is_predtype;	// indicates a type is predefined so
+				// H5Tclose will not be called for it
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5DcreatProp.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5DcreatProp.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5DcreatProp.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,643 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+///\brief	Constant for dataset creation default property
+//--------------------------------------------------------------------------
+const DSetCreatPropList DSetCreatPropList::DEFAULT;
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList default constructor
+///\brief	Default constructor: creates a stub dataset creation property list
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DSetCreatPropList::DSetCreatPropList() : PropList( H5P_DATASET_CREATE) {}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList copy constructor
+///\brief	Copy constructor: makes a copy of the original
+///		DSetCreatPropList object
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DSetCreatPropList::DSetCreatPropList( const DSetCreatPropList& orig ) : PropList( orig ) {}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList overloaded constructor
+///\brief	Creates a DSetCreatPropList object using the id of an
+///		existing dataset creation property list.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DSetCreatPropList::DSetCreatPropList(const hid_t plist_id) : PropList( plist_id ) {}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::setChunk
+///\brief	Sets the size of the chunks used to store a chunked layout
+///		dataset.
+///\param	ndims - IN: Number of dimensions of each chunk
+///\param	dim   - IN: Array containing the size of each chunk
+///\exception	H5::PropListIException
+///\par Description
+///		The \a ndims parameter currently must have the same value as
+///		the rank of the dataset.  The values of the \a dim array
+///		define the size of the chunks to store the dataset's raw
+///		data.  As a side-effect, the layout of the dataset will be
+///		changed to \c H5D_CHUNKED, if it is not so already.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::setChunk( int ndims, const hsize_t* dim ) const
+{
+   herr_t ret_value = H5Pset_chunk( id, ndims, dim );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::setChunk", "H5Pset_chunk failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::getChunk
+///\brief	Retrieves the size of the chunks used to store a chunked
+///		layout dataset.
+///\param	max_ndims - IN: Size of \a dim array
+///\param	dim      - OUT: Array to store the chunk dimensions
+///\exception	H5::PropListIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+int DSetCreatPropList::getChunk( int max_ndims, hsize_t* dim ) const
+{
+   int chunk_size = H5Pget_chunk( id, max_ndims, dim );
+   if( chunk_size < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::getChunk",
+		"H5Pget_chunk returns negative chunk size");
+   }
+   return( chunk_size );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::setLayout
+///\brief	Sets the type of storage used store the raw data for a dataset.
+///\param	layout - IN: Type of storage layout for raw data
+///\exception	H5::PropListIException
+///\par Description
+///		For information on setting layout type, please refer to
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetLayout
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::setLayout(H5D_layout_t layout) const
+{
+   herr_t ret_value = H5Pset_layout( id, layout );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::setLayout",
+		"H5Pset_layout failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::getLayout
+///\brief	Retrieves the layout type of this property list
+///\return	Layout type, which can be:
+///		\li \c H5D_COMPACT - raw data is stored in the object
+///		                header in the file.
+///		\li \c H5D_CONTIGUOUS - raw data is stored separately from the
+///		                object header in one contiguous chunk in
+///		                the file.
+///		\li \c H5D_CHUNKED - raw data is stored separately from the
+///		                object header in chunks in separate locations
+///		                in the file.
+///\exception	H5::PropListIException
+///\par Description
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5D_layout_t DSetCreatPropList::getLayout() const
+{
+   H5D_layout_t layout = H5Pget_layout( id );
+   if( layout == H5D_LAYOUT_ERROR )
+   {
+      throw PropListIException("DSetCreatPropList::getLayout",
+		"H5Pget_layout returns H5D_LAYOUT_ERROR");
+   }
+   return( layout );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::setDeflate
+///\brief	Sets compression method and compression level
+///\param	level - IN: Compression level, should [0..9], inclusive
+///\exception	H5::PropListIException
+///\par Description
+///		The function sets the compression method for this property
+///		list to \c H5D_COMPRESS_DEFLATE and the compression level to
+///		\a level. Lower compression levels are faster but result in
+///		less compression.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::setDeflate( int level ) const
+{
+   herr_t ret_value = H5Pset_deflate( id, level );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::setDeflate",
+		"H5Pset_deflate failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::setFillValue
+///\brief	Sets a dataset fill value
+///\param	fvalue_type - IN: Data type for the value passed via \a value
+///\param	value - IN: Pointer to buffer containing the fill value
+///\exception	H5::PropListIException
+///\par Description
+///		The datatype may differ from that of the dataset, but it must
+///		be one that the HDF5 library is able to convert \a value to
+///		the dataset datatype when the dataset is created.
+///		The default fill value is 0 (zero,) which is interpreted
+///		according to the actual dataset datatype.
+///\par
+///		For information on setting fill value, please refer to the
+///		C layer Reference Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFillValue
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::setFillValue( const DataType& fvalue_type, const void* value ) const
+{
+   herr_t ret_value = H5Pset_fill_value( id, fvalue_type.getId(), value );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::setFillValue",
+                "H5Pset_fill_value failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::getFillValue
+///\brief	Retrieves a dataset fill value
+///\param	fvalue_type - IN: Data type for the value passed via \a value
+///\param	value - OUT: Pointer to buffer to hold the retrieved fill value
+///\exception	H5::PropListIException
+///\par Description
+///		The fill value is returned through \a value pointer
+///		and the memory is allocated by the caller.  The fill
+///		value will be converted from its current data type to the
+///		specified by \a fvalue_type.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::getFillValue( const DataType& fvalue_type, void* value ) const
+{
+   herr_t ret_value = H5Pget_fill_value( id, fvalue_type.getId(), value );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::getFillValue",
+                "H5Pget_fill_value failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::isFillValueDefined
+///\brief	Check if fill value has been defined for this property
+///\return
+///		\li \c H5D_FILL_VALUE_UNDEFINED    =0,
+///		\li \c H5D_FILL_VALUE_DEFAULT      =1,
+///		\li \c H5D_FILL_VALUE_USER_DEFINED =2
+///\exception	H5::PropListIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5D_fill_value_t DSetCreatPropList::isFillValueDefined()
+{
+   H5D_fill_value_t status;
+   herr_t ret_value = H5Pfill_value_defined(id, &status);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::isFillValueDefined",
+                "H5Pfill_value_defined returned H5D_FILL_VALUE_ERROR (-1)");
+   }
+   else
+      return (status);
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::setFilter
+///\brief	Adds a filter to the filter pipeline
+///\param	filter_id - IN: Filter to add
+///\param	flags     - IN: Specifies general properties of the filter
+///\param	cd_nelmts - IN: Number of elements in cd_values
+///\param	cd_values - IN: Auxiliary data for the filter
+///\exception	H5::PropListIException
+///\par Description
+///		The \a flags argument is a bit vector of the field:
+///		\c H5Z_FLAG_OPTIONAL(0x0001)
+///\par
+///		If this bit is set then the filter is optional.  If the filter
+///		fails during a \c DataSet::write() operation then the filter
+///		is just excluded from the pipeline for the chunk for which it
+///		failed; the filter will not participate in the pipeline
+///		during a \c DataSet::read() of the chunk.  If this bit is clear
+///		and the filter fails then the entire I/O operation fails.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::setFilter( H5Z_filter_t filter_id, unsigned int flags, size_t cd_nelmts, const unsigned int cd_values[] ) const
+{
+   herr_t ret_value = H5Pset_filter( id, filter_id, flags, cd_nelmts, cd_values );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::setFilter",
+                "H5Pset_filter failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::removeFilter
+///\brief	Removes one or more filters
+///\param	filter_id - IN: Filter to remove
+///\exception	H5::PropListIException
+///\par Description
+///		Deletes a filter from the dataset creation property list;
+///		deletes all filters if \a filter_id is \c H5Z_FILTER_NONE.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::removeFilter(H5Z_filter_t filter_id) const
+{
+   herr_t ret_value = H5Premove_filter( id, filter_id);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::removeFilter",
+                "H5Premove_filter failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::getNfilters
+///\brief	Returns the number of filters in the pipeline
+///\return	Number of filters
+///\exception	H5::PropListIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+int DSetCreatPropList::getNfilters() const
+{
+   int num_filters = H5Pget_nfilters( id );
+   if( num_filters < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::getNfilters",
+                "H5Pget_nfilters returned negative number of filters");
+   }
+   else
+      return( num_filters );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::getFilter
+///\brief	Returns information about a filter in a pipeline
+///\param	filter_number  - IN: Filter to get, range [0..N-1], where
+///				     N is returned by H5Pget_nfilters()
+///\param	flags         - OUT: General properties of the filter
+///\param	cd_nelmts  - IN/OUT: Number of elements in \a cd_values /Number
+///				     of values defined by the filter
+///\param	cd_values     - OUT: Array to hold the data; allocated by the user
+///\param	namelen       - OUT: Length of \a name
+///\param	name          - OUT: Name of the filter
+///\return	Filter id
+///\exception	H5::PropListIException
+///\par Description
+///		Failure occurs when \a filter_number is out of range.
+//--------------------------------------------------------------------------
+H5Z_filter_t DSetCreatPropList::getFilter(int filter_number, unsigned int &flags, size_t &cd_nelmts,
+                    unsigned int* cd_values, size_t namelen, char name[] ) const
+{
+   H5Z_filter_t filter_id;
+   filter_id = H5Pget_filter( id, filter_number, &flags, &cd_nelmts,
+				cd_values, namelen, name);
+   if( filter_id == H5Z_FILTER_ERROR )
+   {
+      throw PropListIException("DSetCreatPropList::getFilter",
+                "H5Pget_filter returned H5Z_FILTER_ERROR");
+   }
+   else
+      return(filter_id);
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::getFilterById
+///\brief	Returns information about a filter in a pipeline given the
+///		filter id
+///\param	filter_id -      IN: Filter to get
+///\param	flags     -     OUT: General properties of the filter
+///\param	cd_nelmts -  IN/OUT: Number of elements in \a cd_values /Number
+///				     of values defined by the filter
+///\param	cd_values -     OUT: Array to hold the data; allocated by the user
+///\param	namelen   -      IN: Length of \a name
+///\param	name      -     OUT: Name of the filter
+///\exception	H5::PropListIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::getFilterById(H5Z_filter_t filter_id, unsigned int &flags, size_t &cd_nelmts,
+                unsigned int* cd_values, size_t namelen, char name[]) const
+{
+   herr_t ret_value = H5Pget_filter_by_id(id, filter_id, &flags, &cd_nelmts,
+                                cd_values, namelen, name );
+   if (ret_value < 0)
+   {
+      throw PropListIException("DSetCreatPropList::getFilterById",
+                "H5Pget_filter_by_id failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::modifyFilter
+///\brief	Modifies the specified filter
+///\param	filter_id -  IN: Filter to get
+///\param	flags     - OUT: General properties of the filter
+///\param	cd_nelmts -  IN: Number of elements in \a cd_values
+///		        \n  OUT: Number of values defined by the filter
+///\param	cd_values - OUT: Array to hold the data; allocated by the user
+///\exception	H5::PropListIException
+///\par Description
+///		The \a flags argument is a bit vector of the field:
+///		\c H5Z_FLAG_OPTIONAL(0x0001)
+///\par
+///		If this bit is set then the filter is optional.  If the filter
+///		fails during a DataSet::write() operation then the filter
+///		is just excluded from the pipeline for the chunk for which it
+///		failed; the filter will not participate in the pipeline
+///		during a DataSet::read() of the chunk.  If this bit is clear
+///		and the filter fails then the entire I/O operation fails.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::modifyFilter( H5Z_filter_t filter_id, unsigned int flags, size_t cd_nelmts, const unsigned int cd_values[] ) const
+{
+   herr_t ret_value = H5Pmodify_filter(id, filter_id, flags, cd_nelmts, cd_values);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::modifyFilter",
+                "H5Pmodify_filter failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::allFiltersAvail
+///\brief	Queries whether all the filters set in this property list
+///		are available currently.
+///\return	true if all filters available, and false if one or more
+///		filters not currently available
+///\exception	H5::PropListIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+bool DSetCreatPropList::allFiltersAvail()
+{
+   htri_t ret_value = H5Pall_filters_avail(id);
+   if( ret_value > 0 )
+      return true;
+   else if( ret_value == 0 )
+      return false;
+   else // Raise exception when H5Pall_filters_avail returns a negative value
+   {
+      throw PropListIException("DSetCreatPropList::allFiltersAvail", "H5Pall_filters_avail returned negative value");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::setShuffle
+///\brief	Sets method of the shuffle filter
+///
+///\exception	H5::PropListIException
+///\par Description
+///		Please refer to the Reference Manual of \c H5Pset_shuffle for
+///		details.
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetShuffle
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::setShuffle()
+{
+   herr_t ret_value = H5Pset_shuffle(id);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::setShuffle",
+                "H5Pset_shuffle failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::getAllocTime
+///\brief	Get space allocation time for this property.
+///\return	Space allocation time.
+///\exception	H5::PropListIException
+///\par Description
+///		The values of space allocation time can be one of the
+///		followings:
+///		\li \c H5D_ALLOC_TIME_DEFAULT
+///		\li \c H5D_ALLOC_TIME_EARLY
+///		\li \c H5D_ALLOC_TIME_LATE
+///		\li \c H5D_ALLOC_TIME_INCR
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5D_alloc_time_t DSetCreatPropList::getAllocTime()
+{
+   H5D_alloc_time_t alloc_time;
+   herr_t ret_value = H5Pget_alloc_time(id, &alloc_time);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::getAllocTime",
+                "H5Pget_alloc_time failed");
+   }
+   else
+      return (alloc_time);
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::getFillTime
+///\brief	Gets fill value writing time.
+///\return	Fill value writing time
+///\exception	H5::PropListIException
+///\par Description
+///		Valid values for fill value writing time include
+///		\li \c H5D_FILL_TIME_NEVER
+///		\li \c H5D_FILL_TIME_ALLOC.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5D_fill_time_t DSetCreatPropList::getFillTime()
+{
+   H5D_fill_time_t fill_time;
+   herr_t ret_value = H5Pget_fill_time(id, &fill_time);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::getFillTime",
+                "H5Pget_fill_time failed");
+   }
+   else
+      return (fill_time);
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::setAllocTime
+///\brief	Sets space allocation time for dataset during creation.
+///\param	alloc_time -  IN: Allocation time
+///\exception	H5::PropListIException
+///\par Description
+///		Valid values for space allocation time include:
+///		\li \c H5D_ALLOC_TIME_DEFAULT
+///		\li \c H5D_ALLOC_TIME_EARLY
+///		\li \c H5D_ALLOC_TIME_LATE
+///		\li \c H5D_ALLOC_TIME_INCR
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::setAllocTime(H5D_alloc_time_t alloc_time)
+{
+   herr_t ret_value = H5Pset_alloc_time(id, alloc_time);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::setAllocTime",
+                "H5Pset_alloc_time failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::setFillTime
+///\brief	Sets fill value writing time for dataset.
+///\return	Fill value writing time
+///\exception	H5::PropListIException
+///\par Description
+///		Valid values for fill value writing time include
+///		\li \c H5D_FILL_TIME_NEVER
+///		\li \c H5D_FILL_TIME_ALLOC.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::setFillTime(H5D_fill_time_t fill_time)
+{
+   herr_t ret_value = H5Pset_fill_time(id, fill_time);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::setFillTime",
+                "H5Pset_fill_time failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::setFletcher32
+///\brief	Sets Fletcher32 checksum of EDC for this property list.
+///
+///\exception	H5::PropListIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::setFletcher32()
+{
+   herr_t ret_value = H5Pset_fletcher32(id);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::setFletcher32",
+                "H5Pset_fletcher32 failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::setExternal
+///\brief	Adds an external file to the list of external files
+///\param	name   - IN: Name of the external file
+///\param	offset - IN: Location where the data starts in the file
+///\param	size   - IN: Number of bytes reserved in the file for the data
+///\exception	H5::PropListIException
+///\par Description
+///		If a dataset is splitted across multiple files then the files
+///		should be defined in order. The total size of the dataset is
+///		the sum of the \a size arguments for all the external files.  If
+///		the total size is larger than the size of a dataset then the
+///		dataset can be extended (provided the data space also allows
+///		the extending).
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::setExternal( const char* name, off_t offset, hsize_t size ) const
+{
+   herr_t ret_value = H5Pset_external( id, name, offset, size );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::setExternal",
+                "H5Pset_external failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::getExternalCount
+///\brief	Returns the number of external files for a dataset
+///\return	Number of external files
+///\exception	H5::PropListIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+int DSetCreatPropList::getExternalCount() const
+{
+   int num_ext_files = H5Pget_external_count( id );
+   if( num_ext_files < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::getExternalCount",
+                "H5Pget_external_count returns negative number of external files");
+   }
+   else
+      return( num_ext_files );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList::getExternal
+///\brief	Returns information about an external file
+///\param	idx    - IN: Index of the external file, ranges [0-(N-1)] and
+///		                returned by getExternalCount()
+///\param	name_size - IN: Maximum length of \a name
+///\param	name   - IN: Name of the external file
+///\param	offset - IN: Location to return an offset value
+///\param	size   - OUT: Location to return the size of the external file data
+///\exception	H5::PropListIException
+///\par Description
+///		The parameter \a idx ranges [0..N-1] where N is returned by
+///		getExternalCount().  At most \a name_size characters are copied
+///		into the name array. If the external file name is longer than
+///		name_size with the null terminator, the return value is not
+///		null terminated (similar to strncpy()).
+///		If \a name_size is zero or \a name is a null pointer, the
+///		external file name will not be returned.  If \a offset or
+///		\a size are null pointers then the corresponding information
+///		will not be returned.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetCreatPropList::getExternal( unsigned idx, size_t name_size, char* name, off_t& offset, hsize_t& size ) const
+{
+   herr_t ret_value = H5Pget_external( id, idx, name_size, name, &offset, &size );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetCreatPropList::getExternal",
+                "H5Pget_external failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetCreatPropList destructor
+///\brief	Noop destructor.
+// Programmer   Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DSetCreatPropList::~DSetCreatPropList () {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5DcreatProp.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5DcreatProp.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5DcreatProp.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,122 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5DSCreatPropList_H
+#define _H5DSCreatPropList_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP DSetCreatPropList : public PropList {
+   public:
+	// Default dataset creation property list.
+	static const DSetCreatPropList DEFAULT;
+
+	// Queries whether all the filters set in this property list are
+	// available currently.
+	bool allFiltersAvail();
+
+	// Get space allocation time for this property.
+	H5D_alloc_time_t getAllocTime();
+
+	// Set space allocation time for dataset during creation.
+	void setAllocTime(H5D_alloc_time_t alloc_time);
+
+	// Retrieves the size of the chunks used to store a chunked layout dataset.
+	int getChunk( int max_ndims, hsize_t* dim ) const;
+
+	// Sets the size of the chunks used to store a chunked layout dataset.
+	void setChunk( int ndims, const hsize_t* dim ) const;
+
+	// Returns information about an external file.
+	void getExternal( unsigned idx, size_t name_size, char* name, off_t& offset, hsize_t& size ) const;
+
+	// Returns the number of external files for a dataset.
+	int getExternalCount() const;
+
+	// Gets fill value writing time.
+	H5D_fill_time_t getFillTime();
+
+	// Sets fill value writing time for dataset.
+	void setFillTime(H5D_fill_time_t fill_time);
+
+	// Retrieves a dataset fill value.
+	void getFillValue( const DataType& fvalue_type, void* value ) const;
+
+	// Sets a dataset fill value.
+	void setFillValue( const DataType& fvalue_type, const void* value ) const;
+
+	// Returns information about a filter in a pipeline.
+	H5Z_filter_t getFilter(int filter_number, unsigned int& flags, size_t& cd_nelmts, unsigned int* cd_values, size_t namelen, char name[]) const;
+
+	// Returns information about a filter in a pipeline given the filter id.
+	void getFilterById(H5Z_filter_t filter_id, unsigned int &flags, size_t &cd_nelmts, unsigned int* cd_values, size_t namelen, char name[]) const;
+
+	// Gets the layout of the raw data storage of the data that uses this
+	// property list.
+	H5D_layout_t getLayout() const;
+
+	// Sets the type of storage used to store the raw data for the
+	// dataset that uses this property list.
+	void setLayout(H5D_layout_t layout) const;
+
+	// Returns the number of filters in the pipeline.
+	int getNfilters() const;
+
+	// Checks if fill value has been defined for this property.
+	H5D_fill_value_t isFillValueDefined();
+
+	// Modifies the specified filter.
+	void modifyFilter( H5Z_filter_t filter_id, unsigned int flags, size_t cd_nelmts, const unsigned int cd_values[] ) const;
+
+	// Remove one or all filters from the filter pipeline.
+	void removeFilter( H5Z_filter_t filter_id) const;
+
+	// Sets compression method and compression level.
+	void setDeflate( int level ) const;
+
+	// Adds an external file to the list of external files.
+	void setExternal( const char* name, off_t offset, hsize_t size ) const;
+
+	// Adds a filter to the filter pipeline.
+	void setFilter( H5Z_filter_t filter, unsigned int flags, size_t cd_nelmts, const unsigned int cd_values[] ) const;
+
+	// Sets Fletcher32 checksum of EDC for this property list.
+	void setFletcher32();
+
+	// Sets method of the shuffle filter.
+	void setShuffle();
+
+	// Returns this class name
+	virtual string fromClass () const { return("DSetCreatPropList"); }
+
+	// Default constructor: creates a stub dataset creation property list.
+	DSetCreatPropList();
+
+	// Copy constructor: creates a copy of a DSetCreatPropList object.
+	DSetCreatPropList(const DSetCreatPropList& orig);
+
+	// Creates a copy of an existing dataset creation property list
+	// using the property list id.
+	DSetCreatPropList(const hid_t plist_id);
+
+	// Noop destructor.
+	virtual ~DSetCreatPropList();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5DxferProp.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5DxferProp.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5DxferProp.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,500 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5DxferProp.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+///\brief	Constant for default dataset memory and transfer property list.
+//--------------------------------------------------------------------------
+const DSetMemXferPropList DSetMemXferPropList::DEFAULT;
+
+//--------------------------------------------------------------------------
+// Function     Default constructor
+///\brief	Default constructor: creates a stub dataset memory and
+///		transfer property list object.
+// Programmer:  Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DSetMemXferPropList::DSetMemXferPropList() : PropList(H5P_DATASET_XFER) {}
+
+//--------------------------------------------------------------------------
+// Function     DSetMemXferPropList copy constructor
+///\brief	Copy constructor: makes a copy of the original
+///		DSetMemXferPropList object
+///\param       original - IN: Original dataset memory and transfer property
+///				list object to copy
+// Programmer:  Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DSetMemXferPropList::DSetMemXferPropList(const DSetMemXferPropList& original) : PropList(original) {}
+
+//--------------------------------------------------------------------------
+// Function     DSetMemXferPropList overloaded constructor
+///\brief	Creates a DSetMemXferPropList object using the id of an
+///		existing DSetMemXferPropList.
+///\param       plist_id - IN: Id of an existing dataset memory and transfer
+///				property list
+// Programmer:  Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DSetMemXferPropList::DSetMemXferPropList(const hid_t plist_id) : PropList(plist_id) {}
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::setBuffer
+///\brief	Sets type conversion and background buffers.
+///\param	size  - IN: Size, in bytes, of the type conversion and background buffers
+///\param	tconv - IN: Pointer to application-allocated type conversion buffer
+///\param	bkg   - IN: Pointer to application-allocated background buffer
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::setBuffer( hsize_t size, void* tconv, void* bkg ) const
+{
+   herr_t ret_value = H5Pset_buffer( id, size, tconv, bkg );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetMemXferPropList::setBuffer",
+		"H5Pset_buffer failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::getBuffer
+///\brief	Reads buffer settings.
+///\param	tconv - IN: Pointer to application-allocated type conversion buffer
+///\param	bkg   - IN: Pointer to application-allocated background buffer
+///\return	Buffer size, in bytes
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+hsize_t DSetMemXferPropList::getBuffer( void** tconv, void** bkg ) const
+{
+   hsize_t buffer_size = H5Pget_buffer( id, tconv, bkg );
+   if( buffer_size == 0 )
+   {
+      throw PropListIException("DSetMemXferPropList::getBuffer",
+		"H5Pget_buffer returned 0 for buffer size - failure");
+   }
+   return( buffer_size );
+}
+#else /* H5_WANT_H5_V1_4_COMPAT */
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::setBuffer
+///\brief	Sets type conversion and background buffers.
+///\param	size  - IN: Size, in bytes, of the type conversion and background buffers
+///\param	tconv - IN: Pointer to application-allocated type conversion buffer
+///\param	bkg   - IN: Pointer to application-allocated background buffer
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::setBuffer( size_t size, void* tconv, void* bkg ) const
+{
+   herr_t ret_value = H5Pset_buffer( id, size, tconv, bkg );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetMemXferPropList::setBuffer",
+		"H5Pset_buffer failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::getBuffer
+///\brief	Reads buffer settings.
+///\param	tconv - IN: Pointer to application-allocated type conversion buffer
+///\param	bkg   - IN: Pointer to application-allocated background buffer
+///\return	Buffer size, in bytes
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+size_t DSetMemXferPropList::getBuffer( void** tconv, void** bkg ) const
+{
+   size_t buffer_size = H5Pget_buffer( id, tconv, bkg );
+   if( buffer_size == 0 )
+   {
+      throw PropListIException("DSetMemXferPropList::getBuffer",
+		"H5Pget_buffer returned 0 for buffer size - failure");
+   }
+   return( buffer_size );
+}
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::setPreserve
+///\brief	Sets the dataset transfer property list status to true or false.
+///\param	status - IN: Status to set, true or false
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::setPreserve( bool status ) const
+{
+   herr_t ret_value = H5Pset_preserve( id, (hbool_t) status );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetMemXferPropList::setPreserve",
+		"H5Pset_preserve failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::getPreserve
+///\brief	Checks status of the dataset transfer property list.
+///\return	Status of the dataset transfer property list
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+bool DSetMemXferPropList::getPreserve() const
+{
+   int ret_value = H5Pget_preserve( id );
+   if( ret_value > 0 )
+      return true;
+   else if( ret_value == 0 )
+      return false;
+   else
+   {
+      throw PropListIException("DSetMemXferPropList::getPreserve",
+		"H5Pget_preserve returned negative value for status");
+   }
+}
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::setHyperCache
+///\brief	Indicates whether to cache hyperslab blocks during I/O
+///\param	cache - IN: Flag indicating whether caching is to be set
+///			    to on (1) or off (0)
+///\param	limit - IN: Maximum size of the hyperslab block to cache or
+///			    0 (zero) for no limit
+///\exception	H5::PropListIException
+///\note	This function is deprecated in HDF5 Release 1.6 and will
+///		eventually be removed from the HDF5 distribution. It is
+///		provided in this release only to enable backward compatibility
+///		with HDF5 Releases 1.4.x and is enabled only if the HDF5
+///		library is configured with the flag H5_WANT_H5_V1_4_COMPAT.
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::setHyperCache( bool cache, unsigned limit ) const
+{
+   herr_t ret_value = H5Pset_hyper_cache( id, cache, limit );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetMemXferPropList::setHyperCache",
+		"H5Pset_hyper_cache failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::getHyperCache
+///\brief	Returns information regarding the caching of hyperslab
+///		blocks during I/O.
+///\param	cache - OUT: Flag indicating whether caching is set
+///			    to on (1) or off (0)
+///\param	limit - OUT: Maximum size of the hyperslab block to cache or
+///			    0 (zero) for no limit
+///\exception	H5::PropListIException
+///\note	This function is deprecated in HDF5 Release 1.6 and will
+///		eventually be removed from the HDF5 distribution. It is
+///		provided in this release only to enable backward compatibility
+///		with HDF5 Releases 1.4.x and is enabled only if the HDF5
+///		library is configured with the flag H5_WANT_H5_V1_4_COMPAT.
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::getHyperCache( bool& cache, unsigned& limit ) const
+{
+   unsigned temp_cache;  // C routine takes hid_t, unsigned*, unsigned*
+   herr_t ret_value = H5Pget_hyper_cache( id, &temp_cache, &limit );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetMemXferPropList::getHyperCache",
+		"H5Pget_hyper_cache failed");
+   }
+   if( temp_cache > 0 )
+      cache = true;
+   else
+      cache = false;
+}
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::setBtreeRatios
+///\brief	Sets B-tree split ratios for a dataset transfer property list.
+///\param	left   - IN: B-tree split ratio for left-most nodes
+///\param	middle - IN: B-tree split ratio for right-most nodes and lone nodes
+///\param	right  - IN: B-tree split ratio for all other nodes
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::setBtreeRatios( double left, double middle, double right ) const
+{
+   herr_t ret_value = H5Pset_btree_ratios( id, left, middle, right );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetMemXferPropList::setBtreeRatios",
+		"H5Pset_btree_ratios failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::getBtreeRatios
+///\brief	Gets B-tree split ratios for a dataset transfer property list.
+///\param	left   - OUT: B-tree split ratio for left-most nodes
+///\param	middle - OUT: B-tree split ratio for right-most nodes and lone nodes
+///\param	right  - OUT: B-tree split ratio for all other nodes
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::getBtreeRatios( double& left, double& middle, double& right ) const
+{
+   herr_t ret_value = H5Pget_btree_ratios( id, &left, &middle, &right );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetMemXferPropList::getBtreeRatios",
+		"H5Pget_btree_ratios failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::setVlenMemManager
+///\brief	Sets the memory manager for variable-length datatype allocation.
+///\param       alloc_func - IN: User's allocate routine
+///\param	alloc_info - IN: User's allocation parameters
+///\param	free_func  - IN: User's free routine
+///\param	free_info  - IN: User's free parameters
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::setVlenMemManager( H5MM_allocate_t alloc_func, void* alloc_info, H5MM_free_t free_func, void* free_info ) const
+{
+   herr_t ret_value = H5Pset_vlen_mem_manager( id, alloc_func, alloc_info,
+						free_func, free_info );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetMemXferPropList::setVlenMemManager",
+		"H5Pset_vlen_mem_manager failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::setVlenMemManager
+///\brief	Sets the memory manager for variable-length datatype
+///		allocation - system \c malloc and \c free will be used.
+///
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::setVlenMemManager() const
+{
+   setVlenMemManager( NULL, NULL, NULL, NULL );
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::getVlenMemManager
+///\brief	Gets the memory manager for variable-length datatype allocation
+///\param       alloc_func - OUT: User's allocate routine
+///\param	alloc_info - OUT: User's allocation parameters
+///\param	free_func  - OUT: User's free routine
+///\param	free_info  - OUT: User's free parameters
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::getVlenMemManager( H5MM_allocate_t& alloc_func, void** alloc_info, H5MM_free_t& free_func, void** free_info ) const
+{
+   herr_t ret_value = H5Pget_vlen_mem_manager( id, &alloc_func, alloc_info, &free_func, free_info );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("DSetMemXferPropList::getVlenMemManager",
+		"H5Pget_vlen_mem_manager failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::setMulti
+///\brief	Sets the data transfer property list for the multi-file driver.
+///\param       memb_dxpl - OUT: Array of data access property lists
+///\exception	H5::PropListIException
+///\par Description
+///		This function can only be used after the member map has
+///		been set with FileAccPropList::setMulti (not done - BMR.)
+// Programmer:	Binh-Minh Ribler - July, 2004
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::setMulti(const hid_t *memb_dxpl)
+{
+   herr_t ret_value = H5Pset_dxpl_multi(id, memb_dxpl);
+   if (ret_value < 0)
+   {
+      throw PropListIException("DSetMemXferPropList::setMulti",
+		"H5Pset_dxpl_multi failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::getMulti
+///\brief	Returns multi-file data transfer property list information.
+///\param       memb_dxpl - OUT: Array of data access property lists
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - July, 2004
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::getMulti(hid_t *memb_dxpl)
+{
+   herr_t ret_value = H5Pget_dxpl_multi(id, memb_dxpl);
+   if (ret_value < 0)
+   {
+      throw PropListIException("DSetMemXferPropList::getMulti",
+		"H5Pget_dxpl_multi failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::setSmallDataBlockSize
+///\brief	Sets the size of a contiguous block reserved for small data.
+///\param       size - IN: Maximum size, in bytes, of the small data block.
+///\exception	H5::PropListIException
+///\par Description
+///		For detail, please refer to the C layer Reference Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSmallData
+// Programmer:	Binh-Minh Ribler - July, 2004
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::setSmallDataBlockSize(hsize_t size)
+{
+   herr_t ret_value = H5Pset_small_data_block_size(id, size);
+   if (ret_value < 0)
+   {
+      throw PropListIException("DSetMemXferPropList::setSmallDataBlockSize",
+		"H5Pset_small_data_block_size failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::getSmallDataBlockSize
+///\brief	Returns the current small data block size setting.
+///\return	Size of the small data block, in bytes
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - July, 2004
+//--------------------------------------------------------------------------
+hsize_t DSetMemXferPropList::getSmallDataBlockSize()
+{
+   hsize_t size;
+   herr_t ret_value = H5Pget_small_data_block_size(id, &size);
+   if (ret_value < 0)
+   {
+      throw PropListIException("DSetMemXferPropList::getSmallDataBlockSize",
+		"H5Pget_small_data_block_size failed");
+   }
+   return(size);
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::setHyperVectorSize
+///\brief	Sets number of I/O vectors to be read/written in hyperslab I/O.
+///
+///\exception	H5::PropListIException
+///\par Description
+///		For information, please refer to the C layer Reference
+///		Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetHyperVectorSize
+// Programmer:	Binh-Minh Ribler - July, 2004
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::setHyperVectorSize(size_t vector_size)
+{
+   herr_t ret_value = H5Pset_hyper_vector_size(id, vector_size);
+   if (ret_value < 0)
+   {
+      throw PropListIException("DSetMemXferPropList::setHyperVectorSize",
+		"H5Pset_hyper_vector_size failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::getSmallDataBlockSize
+///\brief	Returns the number of I/O vectors to be read/written in
+///		hyperslab I/O.
+///\return	Number of I/O vectors
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - July, 2004
+//--------------------------------------------------------------------------
+size_t DSetMemXferPropList::getHyperVectorSize()
+{
+   size_t vector_size;
+   herr_t ret_value = H5Pget_hyper_vector_size(id, &vector_size);
+   if (ret_value < 0)
+   {
+      throw PropListIException("DSetMemXferPropList::getHyperVectorSize",
+		"H5Pget_hyper_vector_size failed");
+   }
+   return(vector_size);
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::setEDCCheck
+///\brief	Enables or disables error-detecting for a dataset reading
+///		process.
+///\param	check - IN: Specifies whether error detection is enabled or
+///				disabled
+///\exception	H5::PropListIException
+///\par Description
+///		The error detection algorithm used is the algorithm previously
+///		specified in the corresponding dataset creation property
+///		list.  This function does not affect the use of error
+///		detection in the writing process.
+///\par
+///		Valid values are as follows:
+///		\li \c H5Z_ENABLE_EDC   (default)
+///		\li \c H5Z_DISABLE_EDC
+// Programmer:	Binh-Minh Ribler - July, 2004
+//--------------------------------------------------------------------------
+void DSetMemXferPropList::setEDCCheck(H5Z_EDC_t check)
+{
+   herr_t ret_value = H5Pset_edc_check(id, check);
+   if (ret_value < 0)
+   {
+      throw PropListIException("DSetMemXferPropList::setEDCCheck",
+		"H5Pset_edc_check failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList::getEDCCheck
+///\brief	Determines whether error-detection is enabled for dataset reads.
+///\return	\c H5Z_ENABLE_EDC or \c H5Z_DISABLE_EDC
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - July, 2004
+//--------------------------------------------------------------------------
+H5Z_EDC_t DSetMemXferPropList::getEDCCheck()
+{
+   H5Z_EDC_t check = H5Pget_edc_check(id);
+   if (check < 0)
+   {
+      throw PropListIException("DSetMemXferPropList::getEDCCheck",
+		"H5Pget_edc_check failed");
+   }
+   return(check);
+}
+
+//--------------------------------------------------------------------------
+// Function:	DSetMemXferPropList destructor
+///\brief	Noop destructor.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+DSetMemXferPropList::~DSetMemXferPropList() {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5DxferProp.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5DxferProp.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5DxferProp.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,120 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5DSetMemXferPropList_H
+#define _H5DSetMemXferPropList_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP DSetMemXferPropList : public PropList {
+   public:
+	static const DSetMemXferPropList DEFAULT;
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+        // Sets type conversion and background buffers.
+        void setBuffer( hsize_t size, void* tconv, void* bkg ) const;
+
+        // Reads buffer settings.
+        hsize_t getBuffer( void** tconv, void** bkg ) const;
+
+        // Indicates whether to cache hyperslab blocks during I/O.
+        void setHyperCache( bool cache, unsigned limit = 0 ) const;
+
+        // Returns information regarding the caching of hyperslab blocks during I/O.
+        void getHyperCache( bool& cache, unsigned& limit ) const;
+
+#else /* H5_WANT_H5_V1_4_COMPAT */
+        // Sets type conversion and background buffers.
+        void setBuffer( size_t size, void* tconv, void* bkg ) const;
+
+        // Reads buffer settings.
+        size_t getBuffer( void** tconv, void** bkg ) const;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+	// Sets B-tree split ratios for a dataset transfer property list
+	void setBtreeRatios( double left, double middle, double right ) const;
+
+	// Gets B-tree split ratios for a dataset transfer property list
+	void getBtreeRatios( double& left, double& middle, double& right ) const;
+
+	// Sets the dataset transfer property list status to TRUE or FALSE.
+	void setPreserve( bool status ) const;
+
+	// Checks status of the dataset transfer property list.
+	bool getPreserve() const;
+
+	// Sets the memory manager for variable-length datatype
+	// allocation in H5Dread and H5Dvlen_reclaim
+	void setVlenMemManager( H5MM_allocate_t alloc, void* alloc_info,
+				H5MM_free_t free, void* free_info ) const;
+
+	// alloc and free are set to NULL, indicating that system
+	// malloc and free are to be used
+	void setVlenMemManager() const;
+
+	// Gets the memory manager for variable-length datatype
+	// allocation in H5Dread and H5Tvlen_reclaim
+	void getVlenMemManager( H5MM_allocate_t& alloc, void** alloc_info,
+				H5MM_free_t& free, void** free_info ) const;
+
+	// Sets the data transfer property list for the multi-file driver.
+	void setMulti(const hid_t *memb_dxpl);
+
+	// Returns multi-file data transfer property list information.
+	void getMulti(hid_t *memb_dxpl);
+
+	// Sets the size of a contiguous block reserved for small data.
+	void setSmallDataBlockSize(hsize_t size);
+
+	// Returns the current small data block size setting.
+	hsize_t getSmallDataBlockSize();
+
+	// Sets number of I/O vectors to be read/written in hyperslab I/O.
+	void setHyperVectorSize(size_t vector_size);
+
+	// Returns the number of I/O vectors to be read/written in
+	// hyperslab I/O.
+	size_t getHyperVectorSize();
+
+	// Enables or disables error-detecting for a dataset reading
+	// process.
+	void setEDCCheck(H5Z_EDC_t check);
+
+	// Determines whether error-detection is enabled for dataset reads.
+	H5Z_EDC_t getEDCCheck();
+
+	// Returns this class name
+	virtual string fromClass () const { return("DSetMemXferPropList"); }
+
+	// Default constructor: creates a dataset memory and transfer prop list.
+	DSetMemXferPropList();
+
+	// Copy constructor: makes a copy of a DSetMemXferPropList object.
+	DSetMemXferPropList(const DSetMemXferPropList& orig);
+
+	// Creates a copy of an existing dataset memory and transfer
+	// property list using the property list id.
+	DSetMemXferPropList (const hid_t plist_id);
+
+	// Noop destructor
+	virtual ~DSetMemXferPropList();
+
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5EnumType.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5EnumType.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5EnumType.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,277 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5AbstractDs.h"
+#include "H5DxferProp.h"
+#include "H5DataSpace.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+#include "H5DataSet.h"
+#include "H5AtomType.h"
+#include "H5IntType.h"
+#include "H5EnumType.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+// Function:	EnumType default constructor
+///\brief	Default constructor: Creates a stub datatype
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+EnumType::EnumType() : DataType() {}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType overloaded constructor
+///\brief	Creates an EnumType object using the id of an existing datatype.
+///\param	existing_id - IN: Id of an existing datatype
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+EnumType::EnumType( const hid_t existing_id ) : DataType( existing_id ) {}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType copy constructor
+///\brief	Copy constructor: makes a copy of the original EnumType object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+EnumType::EnumType( const EnumType& original ) : DataType( original ) {}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType overloaded constructor
+///\brief	Creates an empty enumeration datatype given a size, in bytes.
+///\param	size - IN: Number of bytes in the datatype to create
+///\exception	H5::DataTypeIException
+// Description
+// 		The DataType constructor calls the C API H5Tcreate to create
+// 		the enum datatype.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+EnumType::EnumType( size_t size ) : DataType( H5T_ENUM, size ) {}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType overloaded constructor
+///\brief	Gets the enum datatype of the specified dataset.
+///\param	dataset - IN: Dataset that this enum datatype associates with
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+EnumType::EnumType( const DataSet& dataset ) : DataType()
+{
+   // Calls C function H5Dget_type to get the id of the datatype
+   id = H5Dget_type( dataset.getId() );
+
+   // If the datatype id is not valid, throw an exception
+   if( id < 0 )
+   {
+      throw DataSetIException("EnumType constructor", "H5Dget_type failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType overloaded constructor
+///\brief	Creates a new enum datatype based on an integer datatype.
+///\param	data_type - IN: Base datatype
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+EnumType::EnumType( const IntType& data_type ) : DataType()
+{
+   // Calls C function H5Tenum_create to get the id of the datatype
+   id = H5Tenum_create( data_type.getId() );
+
+   // If the datatype id is not valid, throw an exception
+   if( id < 0 )
+   {
+      throw DataSetIException("EnumType constructor", "H5Tenum_create failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType::insert
+///\brief	Inserts a new member to this enumeration datatype.
+///\param	name  - IN: Name of the new member
+///\param	value - IN: Pointer to the value of the new member
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void EnumType::insert( const char* name, void *value ) const
+{
+   // Calls C routine H5Tenum_insert to insert the new enum datatype member.
+   herr_t ret_value = H5Tenum_insert( id, name, value );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException("EnumType::insert", "H5Tenum_insert failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType::insert
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function only in the type of
+///		argument \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void EnumType::insert( const string& name, void *value ) const
+{
+    insert( name.c_str(), value );
+}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType::nameOf
+///\brief	Returns the symbol name corresponding to a specified member
+///		of this enumeration datatype.
+///\param	value - IN: Pointer to the value of the enum datatype
+///\param	size  - IN: Size for the name
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+string EnumType::nameOf( void *value, size_t size ) const
+{
+   char* name_C = new char[size+1];  // temporary C-string for C API
+
+   // Calls C routine H5Tenum_nameof to get the name of the specified enum type
+   herr_t ret_value = H5Tenum_nameof( id, value, name_C, size );
+
+   // If H5Tenum_nameof returns a negative value, raise an exception,
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException("EnumType::nameOf", "H5Tenum_nameof failed");
+   }
+   // otherwise, create the string to hold the datatype name and return it
+   string name = string( name_C );
+   delete []name_C;
+   return( name );
+}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType::valueOf
+///\brief	Retrieves the value corresponding to a member of this
+///		enumeration datatype, given the member's name.
+///\param	name  -  IN: Name of the queried member
+///\param	value - OUT: Pointer to the retrieved value
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void EnumType::valueOf( const char* name, void *value ) const
+{
+   // Calls C routine H5Tenum_valueof to get the enum datatype value
+   herr_t ret_value = H5Tenum_valueof( id, name, value );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException("EnumType::valueOf", "H5Tenum_valueof failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType::valueOf
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function only in the type of
+///		argument \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void EnumType::valueOf( const string& name, void *value ) const
+{
+    valueOf( name.c_str(), value );
+}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType::getMemberIndex
+///\brief	Returns the index of a member in this enumeration datatype.
+///\param	name - IN: Name of the queried member
+///\return	Index of the member if it exists.  Index will have the value
+///		between 0 and \c N-1, where \c N is the value returned by the
+///		member function \c EnumType::getNmembers.
+///\exception	H5::DataTypeIException
+// Programmer   Binh-Minh Ribler - May 16, 2002
+//--------------------------------------------------------------------------
+int EnumType::getMemberIndex(const char *name) const
+{
+   int member_index = H5Tget_member_index(id, name);
+   if( member_index < 0 )
+   {
+      throw DataTypeIException("EnumType::getMemberIndex",
+                "H5Tget_member_index returns negative value");
+   }
+   return( member_index );
+}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType::getMemberIndex
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function only in the type of
+///		argument \a name.
+// Programmer   Binh-Minh Ribler - May 16, 2002
+//--------------------------------------------------------------------------
+int EnumType::getMemberIndex(const string& name) const
+{
+    return(EnumType::getMemberIndex(name.c_str()));
+}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType::getNmembers
+///\brief	Returns the number of members in this enumeration datatype.
+///\return	Number of members
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+int EnumType::getNmembers() const
+{
+   int num_members = H5Tget_nmembers( id );
+   if( num_members < 0 )
+   {
+      throw DataTypeIException("EnumType::getNmembers",
+                "H5Tget_nmembers returns negative number of members");
+   }
+   return( num_members );
+}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType::getMemberValue
+///\brief	Retrieves the value of a member in this enumeration datatype,
+///		given the member's index.
+///\param	memb_no - IN: Index of the queried member
+///\param	value   - OUT: Pointer to the retrieved value
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void EnumType::getMemberValue( unsigned memb_no, void *value ) const
+{
+   // Call C routine H5Tget_member_value to get the datatype member's value
+   hid_t ret_value = H5Tget_member_value( id, memb_no, value );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException("EnumType::getMemberValue", "H5Tget_member_value failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType destructor
+///\brief	Properly terminates access to this enum datatype.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+EnumType::~EnumType() {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5EnumType.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5EnumType.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5EnumType.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,76 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5EnumType_H
+#define _H5EnumType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP EnumType : public DataType {
+
+   public:
+	// Creates an empty enumeration datatype based on a native signed
+	// integer type, whose size is given by size.
+	EnumType( size_t size );
+
+	// Gets the enum datatype of the specified dataset
+	EnumType( const DataSet& dataset );  // H5Dget_type
+
+	// Creates a new enum datatype based on an integer datatype
+	EnumType( const IntType& data_type );  // H5Tenum_create
+
+	// Returns the number of members in this enumeration datatype.
+	int getNmembers () const;
+
+	// Returns the index of a member in this enumeration data type.
+	int getMemberIndex(const char* name) const;
+	int getMemberIndex(const string& name) const;
+
+	// Returns the value of an enumeration datatype member
+	void getMemberValue( unsigned memb_no, void *value ) const;
+
+	// Inserts a new member to this enumeration type.
+	void insert( const char* name, void *value ) const;
+	void insert( const string& name, void *value ) const;
+
+	// Returns the symbol name corresponding to a specified member
+	// of this enumeration datatype.
+	string nameOf( void *value, size_t size ) const;
+
+	// Returns the value corresponding to a specified member of this
+	// enumeration datatype.
+	void valueOf( const char* name, void *value ) const;
+	void valueOf( const string& name, void *value ) const;
+
+	// Returns this class name
+	virtual string fromClass () const { return("EnumType"); }
+
+	// Default constructor
+	EnumType();
+
+	// Creates an enumeration datatype using an existing id
+	EnumType( const hid_t existing_id );
+
+	// Copy constructor: makes a copy of the original EnumType object.
+	EnumType( const EnumType& original );
+
+	virtual ~EnumType();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5Exception.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5Exception.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5Exception.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,514 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "H5Include.h"
+#include "H5Exception.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#ifndef H5_NO_STD
+    using namespace std;
+#endif  // H5_NO_STD
+#endif
+
+const string Exception::DEFAULT_MSG("No detailed information provided");
+
+//--------------------------------------------------------------------------
+// Function:	Exception default constructor
+///\brief	Default constructor.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Exception::Exception() : detail_message(""), func_name("") {}
+
+//--------------------------------------------------------------------------
+// Function:	Exception overloaded constructor
+///\brief	Creates an exception with the name of the function,
+///		in which the failure occurs, and an optional detailed message.
+///\param	func_name - IN: Name of the function where failure occurs
+///\param	message   - IN: Message on the failure
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Exception::Exception(const string func_name, const string message) : detail_message(message), func_name(func_name) {}
+
+//--------------------------------------------------------------------------
+// Function:	Exception copy constructor
+///\brief	Copy constructor: makes a copy of the original Exception object.
+///\param	orig - IN: Exception instance to copy
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Exception::Exception( const Exception& orig )
+{
+   detail_message = orig.detail_message;
+   func_name = orig.func_name;
+}
+
+//--------------------------------------------------------------------------
+// Function:	Exception::getMajorString
+///\brief	Returns a text string that describes the error
+///		specified by a major error number.
+///\param	err_major - IN: Major error number
+///\return	Major error string
+///\par Description
+///		In the failure case, the string "Invalid major error number"
+///		will be returned.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+string Exception::getMajorString(H5E_major_t err_major) const
+{
+   // calls the C API routine to get the major string - Note: in the
+   // failure case, the string "Invalid major error number" will be returned.
+   string major_str(H5Eget_major(err_major));
+   return( major_str );
+}
+
+//--------------------------------------------------------------------------
+// Function:	Exception::getMinorString
+///\brief	Returns a text string that describes the error
+///		specified by a minor error number.
+///\param	err_minor - IN: Minor error number
+///\return	Minor error string
+///\par Description
+///		In the failure case, the string "Invalid minor error number"
+///		will be returned.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+string Exception::getMinorString(H5E_minor_t err_minor) const
+{
+   // calls the C API routine to get the minor string - Note: in the
+   // failure case, the string "Invalid minor error number" will be returned.
+   string minor_str(H5Eget_minor(err_minor));
+   return( minor_str );
+}
+
+//--------------------------------------------------------------------------
+// Function:	Exception::setAutoPrint
+///\brief	Turns on the automatic error printing.
+///\param	func        - IN: Function to be called upon an error condition
+///\param	client_data - IN: Data passed to the error function
+///\par Description
+///		When the library is first initialized the auto printing
+///		function, \a func, is set to the C API \c H5Eprint and
+///		\a client_data is the standard error stream pointer, \c stderr.
+///		Automatic stack traversal is always in the \c H5E_WALK_DOWNWARD
+///		direction.
+///\par
+///		Users are encouraged to write their own more specific error
+///		handlers
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void Exception::setAutoPrint( H5E_auto_t& func, void* client_data )
+{
+   // calls the C API routine H5Eset_auto to set the auto printing to
+   // the specified function.
+   herr_t ret_value = H5Eset_auto( func, client_data );
+   if( ret_value < 0 )
+      throw Exception( "Exception::setAutoPrint", "H5Eset_auto failed" );
+}
+
+//--------------------------------------------------------------------------
+// Function:	Exception::dontPrint
+///\brief	Turns off the automatic error printing from the C library.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void Exception::dontPrint()
+{
+   // calls the C API routine H5Eset_auto with NULL parameters to turn
+   // off the automatic error printing.
+   herr_t ret_value = H5Eset_auto( NULL, NULL );
+   if( ret_value < 0 )
+      throw Exception( "Exception::dontPrint", "H5Eset_auto failed" );
+}
+
+//--------------------------------------------------------------------------
+// Function:	Exception::getAutoPrint
+///\brief	Retrieves the current settings for the automatic error
+///		stack traversal function and its data.
+///\param	func        - OUT: Current setting for the function to be
+///					called upon an error condition
+///\param	client_data - OUT: Current setting for the data passed to
+///					the error function
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void Exception::getAutoPrint( H5E_auto_t& func, void** client_data )
+{
+   // calls the C API routine H5Eget_auto to get the current setting of
+   // the automatic error printing
+   herr_t ret_value = H5Eget_auto( &func, client_data );
+   if( ret_value < 0 )
+      throw Exception( "Exception::getAutoPrint", "H5Eget_auto failed" );
+}
+
+//--------------------------------------------------------------------------
+// Function:	Exception::clearErrorStack
+///\brief	Clears the error stack for the current thread.
+///\par Description
+///		The stack is also cleared whenever a C API function is
+///		called, with certain exceptions (for instance, \c H5Eprint).
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void Exception::clearErrorStack()
+{
+   // calls the C API routine H5Eclear to clear the error stack
+   herr_t ret_value = H5Eclear();
+   if( ret_value < 0 )
+      throw Exception( "Exception::clearErrorStack", "H5Eclear failed" );
+}
+
+//--------------------------------------------------------------------------
+// Function:	Exception::walkErrorStack
+///\brief	Walks the error stack for the current thread, calling the
+///		specified function.
+///\param	direction - IN: Direction in which the error stack is to be walked
+///\param	func - IN: Function to be called for each error encountered
+///\param	client_data - IN: Data passed to the error function
+///\par Description
+///		Valid values for \a direction include:
+///		\li \c H5E_WALK_UPWARD - begin with the most specific error
+///		        and end at the API
+///		\li \c H5E_WALK_DOWNWARD - begin at the API and end at the
+///		        inner-most function where the error was first detected
+///\par
+///		The function specified by \a func will be called for each
+///		error in the error stack.  The \c H5E_walk_t prototype is as
+///		follows:
+///\code
+/// typedef herr_t (*H5E_walk_t)(int n, H5E_error_t *err_desc, void *client_data)
+///     int n - Indexed position of the error in the stack; it begins at zero
+///		regardless of stack traversal direction
+///     H5E_error_t *err_desc - Pointer to a data structure describing the
+///		error.  This structure is listed below.
+///     void *client_data - Pointer to client data in the format expected by
+///		the user-defined function.
+///\endcode
+///\par
+///     Data structure to describe the error:
+///\code
+/// typedef struct H5E_error_t {
+///     hid_t       cls_id;         //class ID
+///     hid_t       maj_num;        //major error ID
+///     hid_t       min_num;        //minor error number
+///     const char  *func_name;     //function in which error occurred
+///     const char  *file_name;     //file in which error occurred
+///     unsigned    line;           //line in file where error occurs
+///     const char  *desc;          //optional supplied description
+/// } H5E_error_t;
+///\endcode
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void Exception::walkErrorStack( H5E_direction_t direction, H5E_walk_t func, void* client_data )
+{
+   // calls the C API routine H5Ewalk to walk the error stack
+   herr_t ret_value = H5Ewalk( direction, func, client_data );
+   if( ret_value < 0 )
+      throw Exception( "Exception::walkErrorStack", "H5Ewalk failed" );
+}
+
+//--------------------------------------------------------------------------
+// Function:	Exception::getDetailMsg
+///\brief	Returns the detailed message set at the time the exception
+///		is thrown.
+///\return	Text message - \c std::string
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+string Exception::getDetailMsg() const
+{
+   return(detail_message);
+}
+
+//--------------------------------------------------------------------------
+// Function:	Exception::getCDetailMsg
+///\brief	Returns the detailed message set at the time the exception
+///		is thrown.
+///\return	Text message - \c char pointer
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+const char* Exception::getCDetailMsg() const
+{
+   return(detail_message.c_str());
+}
+
+//--------------------------------------------------------------------------
+// Function:	Exception::getFuncName
+///\brief	Returns the name of the function, where the exception is thrown.
+///\return	Text message - \c std::string
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+string Exception::getFuncName() const
+{
+   return(func_name);
+}
+
+//--------------------------------------------------------------------------
+// Function:	Exception::getCFuncName
+///\brief	Returns the name of the function, where the exception is thrown.
+///\return	Text message - \c char pointer
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+const char* Exception::getCFuncName() const
+{
+   return(func_name.c_str());
+}
+
+//--------------------------------------------------------------------------
+// Function:	Exception::printError
+///\brief	Prints the error stack in a default manner.
+///\param	stream - IN: File pointer
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void Exception::printError( FILE* stream ) const
+{
+   herr_t ret_value = H5Eprint(stream); // print to stderr
+   if( ret_value < 0 )
+      throw Exception( "Exception::printError", "H5Eprint failed" );
+}
+
+//--------------------------------------------------------------------------
+// Function:	Exception destructor
+///\brief	Noop destructor
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Exception::~Exception() {}
+
+//--------------------------------------------------------------------------
+// Subclass:	FileIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+//--------------------------------------------------------------------------
+// Function:	FileIException default constructor
+///\brief	Default constructor.
+//--------------------------------------------------------------------------
+FileIException::FileIException():Exception(){}
+//--------------------------------------------------------------------------
+// Function:	FileIException overloaded constructor
+///\brief	Creates a FileIException with the name of the function,
+///		in which the failure occurs, and an optional detailed message.
+///\param	func_name - IN: Name of the function where failure occurs
+///\param	message   - IN: Message on the failure
+//--------------------------------------------------------------------------
+FileIException::FileIException(const string func_name, const string message) : Exception(func_name, message) {}
+//--------------------------------------------------------------------------
+// Function:	FileIException destructor
+///\brief	Noop destructor.
+//--------------------------------------------------------------------------
+FileIException::~FileIException() {}
+
+//--------------------------------------------------------------------------
+// Subclass:	GroupIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+//--------------------------------------------------------------------------
+// Function:	GroupIException default constructor
+///\brief	Default constructor.
+//--------------------------------------------------------------------------
+GroupIException::GroupIException():Exception(){}
+//--------------------------------------------------------------------------
+// Function:	GroupIException overloaded constructor
+///\brief	Creates a GroupIException with the name of the function,
+///		in which the failure occurs, and an optional detailed message.
+///\param	func_name - IN: Name of the function where failure occurs
+///\param	message   - IN: Message on the failure
+//--------------------------------------------------------------------------
+GroupIException::GroupIException(const string func_name, const string message) : Exception(func_name, message) {}
+//--------------------------------------------------------------------------
+// Function:	GroupIException destructor
+///\brief	Noop destructor.
+//--------------------------------------------------------------------------
+GroupIException::~GroupIException() {}
+
+//--------------------------------------------------------------------------
+// Subclass:	DataSpaceIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+//--------------------------------------------------------------------------
+// Function:	DataSpaceIException default constructor
+///\brief	Default constructor.
+//--------------------------------------------------------------------------
+DataSpaceIException::DataSpaceIException():Exception(){}
+//--------------------------------------------------------------------------
+// Function:	DataSpaceIException overloaded constructor
+///\brief	Creates a DataSpaceIException with the name of the function,
+///		in which the failure occurs, and an optional detailed message.
+///\param	func_name - IN: Name of the function where failure occurs
+///\param	message   - IN: Message on the failure
+//--------------------------------------------------------------------------
+DataSpaceIException::DataSpaceIException(const string func_name, const string message) : Exception(func_name, message) {}
+//--------------------------------------------------------------------------
+// Function:	DataSpaceIException destructor
+///\brief	Noop destructor.
+//--------------------------------------------------------------------------
+DataSpaceIException::~DataSpaceIException() {}
+
+//--------------------------------------------------------------------------
+// Subclass:	DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+//--------------------------------------------------------------------------
+// Function:	DataTypeIException default constructor
+///\brief	Default constructor.
+//--------------------------------------------------------------------------
+DataTypeIException::DataTypeIException():Exception(){}
+//--------------------------------------------------------------------------
+// Function:	DataTypeIException overloaded constructor
+///\brief	Creates a DataTypeIException with the name of the function,
+///		in which the failure occurs, and an optional detailed message.
+///\param	func_name - IN: Name of the function where failure occurs
+///\param	message   - IN: Message on the failure
+//--------------------------------------------------------------------------
+DataTypeIException::DataTypeIException(const string func_name, const string message) : Exception(func_name, message) {}
+//--------------------------------------------------------------------------
+// Function:	DataTypeIException destructor
+///\brief	Noop destructor.
+//--------------------------------------------------------------------------
+DataTypeIException::~DataTypeIException() {}
+
+//--------------------------------------------------------------------------
+// Subclass:	PropListIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+//--------------------------------------------------------------------------
+// Function:	PropListIException default constructor
+///\brief	Default constructor.
+//--------------------------------------------------------------------------
+PropListIException::PropListIException():Exception(){}
+//--------------------------------------------------------------------------
+// Function:	PropListIException overloaded constructor
+///\brief	Creates a PropListIException with the name of the function,
+///		in which the failure occurs, and an optional detailed message.
+///\param	func_name - IN: Name of the function where failure occurs
+///\param	message   - IN: Message on the failure
+//--------------------------------------------------------------------------
+PropListIException::PropListIException(const string func_name, const string message) : Exception(func_name, message) {}
+//--------------------------------------------------------------------------
+// Function:	PropListIException destructor
+///\brief	Noop destructor.
+//--------------------------------------------------------------------------
+PropListIException::~PropListIException() {}
+
+//--------------------------------------------------------------------------
+// Subclass:	DataSetIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+//--------------------------------------------------------------------------
+// Function:	DataSetIException default constructor
+///\brief	Default constructor.
+//--------------------------------------------------------------------------
+DataSetIException::DataSetIException():Exception(){}
+//--------------------------------------------------------------------------
+// Function:	DataSetIException overloaded constructor
+///\brief	Creates a DataSetIException with the name of the function,
+///		in which the failure occurs, and an optional detailed message.
+///\param	func_name - IN: Name of the function where failure occurs
+///\param	message   - IN: Message on the failure
+//--------------------------------------------------------------------------
+DataSetIException::DataSetIException(const string func_name, const string message) : Exception(func_name, message) {}
+//--------------------------------------------------------------------------
+// Function:	DataSetIException destructor
+///\brief	Noop destructor.
+//--------------------------------------------------------------------------
+DataSetIException::~DataSetIException() {}
+
+//--------------------------------------------------------------------------
+// Subclass:	AttributeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+//--------------------------------------------------------------------------
+// Function:	AttributeIException default constructor
+///\brief	Default constructor.
+//--------------------------------------------------------------------------
+AttributeIException::AttributeIException():Exception(){}
+//--------------------------------------------------------------------------
+// Function:	AttributeIException overloaded constructor
+///\brief	Creates an AttributeIException with the name of the function,
+///		in which the failure occurs, and an optional detailed message.
+///\param	func_name - IN: Name of the function where failure occurs
+///\param	message   - IN: Message on the failure
+//--------------------------------------------------------------------------
+AttributeIException::AttributeIException(const string func_name, const string message) : Exception(func_name, message) {}
+//--------------------------------------------------------------------------
+// Function:	AttributeIException destructor
+///\brief	Noop destructor.
+//--------------------------------------------------------------------------
+AttributeIException::~AttributeIException() {}
+
+//--------------------------------------------------------------------------
+// Subclass:	ReferenceException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+//--------------------------------------------------------------------------
+// Function:	ReferenceException default constructor
+///\brief	Default constructor.
+//--------------------------------------------------------------------------
+ReferenceException::ReferenceException():Exception(){}
+//--------------------------------------------------------------------------
+// Function:	ReferenceException overloaded constructor
+///\brief	Creates a ReferenceException with the name of the function,
+///		in which the failure occurs, and an optional detailed message.
+///\param	func_name - IN: Name of the function where failure occurs
+///\param	message   - IN: Message on the failure
+//--------------------------------------------------------------------------
+ReferenceException::ReferenceException(const string func_name, const string message) : Exception(func_name, message) {}
+//--------------------------------------------------------------------------
+// Function:	ReferenceException destructor
+///\brief	Noop destructor.
+//--------------------------------------------------------------------------
+ReferenceException::~ReferenceException() {}
+
+//--------------------------------------------------------------------------
+// Subclass:	LibraryIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+//--------------------------------------------------------------------------
+// Function:	LibraryIException default constructor
+///\brief	Default constructor.
+//--------------------------------------------------------------------------
+LibraryIException::LibraryIException():Exception(){}
+//--------------------------------------------------------------------------
+// Function:	LibraryIException overloaded constructor
+///\brief	Creates a LibraryIException with the name of the function,
+///		in which the failure occurs, and an optional detailed message.
+///\param	func_name - IN: Name of the function where failure occurs
+///\param	message   - IN: Message on the failure
+//--------------------------------------------------------------------------
+LibraryIException::LibraryIException(const string func_name, const string message) : Exception(func_name, message) {}
+//--------------------------------------------------------------------------
+// Function:	LibraryIException destructor
+///\brief	Noop destructor.
+//--------------------------------------------------------------------------
+LibraryIException::~LibraryIException() {}
+
+//--------------------------------------------------------------------------
+// Subclass:	IdComponentException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+//--------------------------------------------------------------------------
+// Function:	IdComponentException default constructor
+///\brief	Default constructor.
+//--------------------------------------------------------------------------
+IdComponentException::IdComponentException(): Exception() {}
+//--------------------------------------------------------------------------
+// Function:	IdComponentException overloaded constructor
+///\brief	Creates a IdComponentException with the name of the function,
+///		in which the failure occurs, and an optional detailed message.
+///\param	func_name - IN: Name of the function where failure occurs
+///\param	message   - IN: Message on the failure
+//--------------------------------------------------------------------------
+IdComponentException::IdComponentException(const string func_name, const string message) : Exception(func_name, message) {}
+//--------------------------------------------------------------------------
+// Function:	IdComponentException destructor
+///\brief	Noop destructor.
+//--------------------------------------------------------------------------
+IdComponentException::~IdComponentException() {}
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5Exception.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5Exception.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5Exception.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,167 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5Exception_H
+#define _H5Exception_H
+
+#include <string>
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#ifndef H5_NO_STD
+    using namespace std;
+#endif  // H5_NO_STD
+#endif
+
+class H5_DLLCPP Exception {
+   public:
+	// Creates an exception with a function name where the failure occurs
+	// and an optional detailed message
+	Exception(const string func_name, const string message = DEFAULT_MSG);
+
+	// Returns a character string that describes the error specified by
+	// a major error number.
+	string getMajorString( H5E_major_t major_num ) const;
+
+	// Returns a character string that describes the error specified by
+	// a minor error number.
+	string getMinorString( H5E_minor_t minor_num ) const;
+
+	// Returns the detailed message set at the time the exception is thrown
+	string getDetailMsg() const;
+	const char* getCDetailMsg() const;	// C string of detailed message
+	string getFuncName() const;	// function name as a string object
+	const char* getCFuncName() const;	// function name as a char string
+
+	// Turns on the automatic error printing.
+	static void setAutoPrint( H5E_auto_t& func, void* client_data);
+
+	// Turns off the automatic error printing.
+	static void dontPrint();
+
+	// Retrieves the current settings for the automatic error stack
+	// traversal function and its data.
+	static void getAutoPrint( H5E_auto_t& func, void** client_data);
+
+	// Clears the error stack for the current thread.
+	static void clearErrorStack();
+
+	// Walks the error stack for the current thread, calling the
+	// specified function.
+	static void walkErrorStack( H5E_direction_t direction,
+				H5E_walk_t func, void* client_data);
+
+	// Prints the error stack in a default manner.
+	virtual void printError( FILE* stream = NULL ) const;
+
+	// Default constructor
+	Exception();
+
+	// copy constructor
+	Exception( const Exception& orig);
+
+	// virtual Destructor
+	virtual ~Exception();
+
+   private:
+// Because 'string' is not instantiated at compilation time, this
+// warning is displayed when building DLL; but the class is exported
+// so the warning is harmless
+#if defined(WIN32)
+#pragma warning(disable: 4251)
+#endif
+	string detail_message;
+	string func_name;
+
+   protected:
+        // Default value for detail_message
+        static const string DEFAULT_MSG;
+};
+
+class H5_DLLCPP FileIException : public Exception {
+   public:
+	FileIException( const string func_name, const string message = DEFAULT_MSG);
+	FileIException();
+	virtual ~FileIException();
+};
+
+class H5_DLLCPP GroupIException : public Exception {
+   public:
+	GroupIException( const string func_name, const string message = DEFAULT_MSG);
+	GroupIException();
+	virtual ~GroupIException();
+};
+
+class H5_DLLCPP DataSpaceIException : public Exception {
+   public:
+	DataSpaceIException(const string func_name, const string message = DEFAULT_MSG);
+	DataSpaceIException();
+	virtual ~DataSpaceIException();
+};
+
+class H5_DLLCPP DataTypeIException : public Exception {
+   public:
+	DataTypeIException(const string func_name, const string message = DEFAULT_MSG);
+	DataTypeIException();
+	virtual ~DataTypeIException();
+};
+
+class H5_DLLCPP PropListIException : public Exception {
+   public:
+	PropListIException(const string func_name, const string message = DEFAULT_MSG);
+	PropListIException();
+	virtual ~PropListIException();
+};
+
+class H5_DLLCPP DataSetIException : public Exception {
+   public:
+	DataSetIException(const string func_name, const string message = DEFAULT_MSG);
+	DataSetIException();
+	virtual ~DataSetIException();
+};
+
+class H5_DLLCPP AttributeIException : public Exception {
+   public:
+	AttributeIException(const string func_name, const string message = DEFAULT_MSG);
+	AttributeIException();
+	virtual ~AttributeIException();
+};
+
+class H5_DLLCPP ReferenceException : public Exception {
+   public:
+	ReferenceException(const string func_name, const string message = DEFAULT_MSG);
+	ReferenceException();
+	virtual ~ReferenceException();
+};
+
+class H5_DLLCPP LibraryIException : public Exception {
+   public:
+	LibraryIException(const string func_name, const string message = DEFAULT_MSG);
+	LibraryIException();
+	virtual ~LibraryIException();
+};
+
+class H5_DLLCPP IdComponentException : public Exception {
+   public:
+	IdComponentException(const string func_name, const string message = DEFAULT_MSG);
+	IdComponentException();
+	virtual ~IdComponentException();
+};
+
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+
+#endif // _H5Exception_H

Added: packages/hdf5/branches/upstream/current/c++/src/H5FaccProp.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5FaccProp.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5FaccProp.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,722 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5FaccProp.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+///\brief	Constant for default property
+//--------------------------------------------------------------------------
+const FileAccPropList FileAccPropList::DEFAULT;
+
+//--------------------------------------------------------------------------
+// Function:	Default Constructor
+///\brief	Default constructor: creates a file access property list
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FileAccPropList::FileAccPropList() : PropList( H5P_FILE_ACCESS ) {}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList copy constructor
+///\brief	Copy Constructor: makes a copy of the original
+///             FileAccPropList object.
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FileAccPropList::FileAccPropList(const FileAccPropList& orig) : PropList(orig) {}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList overloaded constructor
+///\brief	Creates a file access property list using the id of an
+///             existing one.
+// Programmer:  Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FileAccPropList::FileAccPropList(const hid_t plist_id) : PropList(plist_id) {}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setStdio
+///\brief	Modifies this property list to use the \c H5FD_STDIO driver.
+///
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setStdio() const
+{
+   herr_t ret_value = H5Pset_fapl_stdio(id);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::setStdio", "H5Pset_fapl_stdio failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::getDriver
+///\brief	Return the ID of the low-level file driver.
+///\return	A low-level driver ID which is the same ID used when the
+///		driver was set for the property list.  The driver ID is
+///		only valid as long as the file driver remains registered.
+///		Valid driver identifiers can be found at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-GetDriver
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+hid_t FileAccPropList::getDriver() const
+{
+   hid_t driver = H5Pget_driver(id);
+   if (driver < 0)
+   {
+      throw PropListIException("FileAccPropList::getDriver", "H5Pget_driver failed");
+   }
+   return(driver);
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setDriver
+///\brief	Set file driver for this property list.
+///\param	new_driver_id   - IN: File driver
+///\param	new_driver_info - IN: Struct containing the driver-specific properites
+///\exception	H5::PropListIException
+///\par Description
+///		For a list of valid driver identifiers, please see the C
+///		layer Reference Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-GetDriver
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setDriver(hid_t new_driver_id, const void *new_driver_info) const
+{
+   herr_t ret_value = H5Pset_driver(id, new_driver_id, new_driver_info);
+   if (ret_value < 0)
+   {
+      throw PropListIException("FileAccPropList::setDriver", "H5Pset_driver failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setFamilyOffset
+///\brief	Sets offset for family driver.
+///\param	offset - IN: offset value
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setFamilyOffset(hsize_t offset) const
+{
+   herr_t ret_value = H5Pset_family_offset(id, offset);
+   if (ret_value < 0)
+   {
+      throw PropListIException("FileAccPropList::setFamilyOffset", "H5Pset_family_offset failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::getFamilyOffset
+///\brief	Get offset for family driver.
+///\return	Offset for family driver
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+hsize_t FileAccPropList::getFamilyOffset() const
+{
+   hsize_t offset;
+   herr_t ret_value = H5Pget_family_offset(id, &offset);
+   if (ret_value < 0)
+   {
+      throw PropListIException("FileAccPropList::getFamilyOffset", "H5Pget_family_offset failed");
+   }
+   return(offset);
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setCore
+///\brief	Modifies this file access property list to use the \c H5FD_CORE
+///		driver.
+///\param	increment - IN: Specifies how much memory to increase each
+///				time more memory is needed, in bytes
+///\param	backing_store - IN: Indicating whether to write the file
+///				contents to disk when the file is closed
+///\exception	H5::PropListIException
+///\par Description
+///		For more details on the use of \c H5FD_CORE driver, please
+///		refer to
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFaplCore
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setCore (size_t increment, hbool_t backing_store) const
+{
+   herr_t ret_value = H5Pset_fapl_core (id, increment, backing_store);
+   if (ret_value < 0)
+   {
+      throw PropListIException ("FileAccPropList::setCore", "H5Pset_fapl_core failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::getCore
+///\brief	Queries core file driver properties.
+///\param	increment - OUT: Size of memory increment, in bytes
+///\param	backing_store - OUT: Indicating whether to write the file
+///				contents to disk when the file is closed
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::getCore (size_t& increment, hbool_t& backing_store) const
+{
+   herr_t ret_value = H5Pget_fapl_core(id, &increment, &backing_store);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::getCore", "H5Pget_fapl_core failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setFamily
+///\brief	Sets this file access property list to use the family driver.
+///\param	memb_size  - IN: Size in bytes of each file member
+///\param	memb_plist - IN: File access property list to be used for
+///					each family member
+///\exception	H5::PropListIException
+///\par Description
+///		Note that \a memb_size is used only when creating a new file.
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setFamily( hsize_t memb_size, const FileAccPropList& memb_plist ) const
+{
+   herr_t ret_value = H5Pset_fapl_family (id, memb_size, memb_plist.getId() );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::setFamily", "H5Pset_fapl_family failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::getFamily
+///\brief	Returns information about the family file access property
+///		list.
+///\param	memb_size  - OUT: Size in bytes of each file member
+///\param	memb_plist - OUT: Retrieved file access property list for each
+///				  file member
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::getFamily(hsize_t& memb_size, FileAccPropList& memb_plist) const
+{
+   hid_t memb_plist_id;
+   herr_t ret_value = H5Pget_fapl_family( id, &memb_size, &memb_plist_id );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::getFamily", "H5Pget_fapl_family failed");
+   }
+   memb_plist.setId(memb_plist_id);
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::getFamily
+///\brief	This is an overloaded member function, provided for convenience.
+///             It differs from the above function only in what arguments it
+///             accepts and its return value.
+///\param	memb_size  - OUT: Size in bytes of each file member
+///\return	The file access property list for each file member
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+FileAccPropList FileAccPropList::getFamily(hsize_t& memb_size) const
+{
+   hid_t memb_plist_id;
+   herr_t ret_value = H5Pget_fapl_family( id, &memb_size, &memb_plist_id );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::getFamily", "H5Pget_fapl_family failed");
+   }
+   FileAccPropList memb_plist(memb_plist_id);
+   return(memb_plist);
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setSplit
+///\brief	Emulates the old split file driver, which stored meta data
+///		in one file and raw data in another file.
+///\param	meta_plist  - IN: File access plist for the metadata file
+///\param	raw_plist   - IN: File access plist for the raw data file
+///\param	meta_ext    - IN: Metadata filename extension as \c char*
+///\param	raw_ext     - IN: Raw data filename extension as \c char*
+///\exception	H5::PropListIException
+///\par Description
+///		Temporary - For information, please refer to:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFaplSplit
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setSplit( FileAccPropList& meta_plist, FileAccPropList& raw_plist, const char* meta_ext, const char* raw_ext ) const
+{
+   hid_t meta_pid = meta_plist.getId();
+   hid_t raw_pid = raw_plist.getId();
+   herr_t ret_value = H5Pset_fapl_split( id, meta_ext, meta_pid, raw_ext, raw_pid );
+   if( ret_value < 0 )
+{
+      throw PropListIException("FileAccPropList::setSplit", "H5Pset_fapl_split failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setSplit
+///\brief	This is an overloaded member function, provided for convenience.
+///             It differs from the above function only in what arguments it
+///             accepts.
+///\param	meta_plist  - IN: File access plist for the metadata file
+///\param	raw_plist   - IN: File access plist for the raw data file
+///\param	meta_ext    - IN: Metadata filename extension as \c string
+///\param	raw_ext     - IN: Raw data filename extension as \c string
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setSplit( FileAccPropList& meta_plist, FileAccPropList& raw_plist, const string& meta_ext, const string& raw_ext ) const
+{
+   setSplit( meta_plist, raw_plist, meta_ext.c_str(), raw_ext.c_str() );
+}
+
+#ifdef H5_HAVE_STREAM // for Stream Virtual File Driver
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::getStream
+///\brief	Retrieves the streaming I/O driver settings
+///\return	The streaming I/O file access property list structure
+///		For detail on this structure, please refer to
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFaplStream
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+H5FD_stream_fapl_t FileAccPropList::getStream() const
+{
+   H5FD_stream_fapl_t fapl;
+   herr_t ret_value = H5Pget_fapl_stream(id, &fapl);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::getStream", "H5Pget_fapl_stream failed");
+   }
+   return(fapl);
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setStream
+///\brief	Modifies this file access property list to use the Stream
+///		driver.
+///\param	fapl - IN: The streaming I/O file access property list
+///\exception	H5::PropListIException
+///\par Description
+///		For detail on \a fapl, please refer to
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFaplStream
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setStream(H5FD_stream_fapl_t &fapl) const
+{
+   herr_t ret_value = H5Pset_fapl_stream (id, &fapl);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::setStream", "H5Pset_fapl_stream failed");
+   }
+}
+#endif // Stream Virtual File Driver
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::getSieveBufSize
+///\brief	Returns the current settings for the data sieve buffer size
+///		property from this property list.
+///\return	Data sieve buffer size, in bytes
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+size_t FileAccPropList::getSieveBufSize() const
+{
+   size_t bufsize;
+   herr_t ret_value = H5Pget_sieve_buf_size(id, &bufsize);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::getSieveBufSize", "H5Pget_sieve_buf_size failed");
+   }
+   return(bufsize);
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setSieveBufSize
+///\brief	Sets the maximum size of the data sieve buffer.
+///\param	bufsize - IN: Maximum size, in bytes, of data sieve buffer
+///\exception	H5::PropListIException
+///\par Description
+///		For detail on data sieving, please refer to
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSieveBufSize
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setSieveBufSize(size_t bufsize) const
+{
+   herr_t ret_value = H5Pset_sieve_buf_size(id, bufsize);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::getSieveBufSize", "H5Pget_sieve_buf_size failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setMetaBlockSize
+///\brief	Sets the minimum size of metadata block allocations.
+///\param	block_size - IN: Minimum size, in bytes, of metadata
+///		block allocations
+///\exception	H5::PropListIException
+///\par Description
+///		For more detail, please see the C layer Reference Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetMetaBlockSize
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setMetaBlockSize(hsize_t &block_size) const
+{
+   herr_t ret_value = H5Pset_meta_block_size(id, block_size);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::setMetaBlockSize", "H5Pset_meta_block_size failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::getMetaBlockSize
+///\brief	Returns the current metadata block size setting.
+///\return	Metadata block size
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+hsize_t FileAccPropList::getMetaBlockSize() const
+{
+   hsize_t block_size;
+   herr_t ret_value = H5Pget_meta_block_size(id, &block_size);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::getMetaBlockSize", "H5Pget_meta_block_size failed");
+   }
+   return(block_size);
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setLog
+///\brief	Modifies this file access property list to use the logging
+///		driver.
+///\param	logfile  - IN: Name of the log file
+///\param	flags    - IN: Flags specifying the types of logging activity
+///\param	buf_size - IN: Size of the logging buffer
+///\exception	H5::PropListIException
+///\par Description
+///		For detail on \a flags, please refer to
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFaplStream
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setLog(const char *logfile, unsigned flags, size_t buf_size) const
+{
+   herr_t ret_value = H5Pset_fapl_log(id, logfile, flags, buf_size);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::setLog", "H5Pset_fapl_log failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setLog
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function only in what arguments it
+///		accepts.
+///\param	logfile  - IN: Name of the log file - string
+///\param	flags    - IN: Flags specifying the types of logging activity
+///\param	buf_size - IN: Size of the logging buffer
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setLog(const string& logfile, unsigned flags, size_t buf_size) const
+{
+   setLog(logfile.c_str(), flags, buf_size);
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setSec2
+///\brief	Modifies this file access property list to use the sec2
+///		driver.
+///
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setSec2() const
+{
+   herr_t ret_value = H5Pset_fapl_sec2(id);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::setSec2", "H5Pset_fapl_sec2 failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setAlignment
+///\brief	Sets the alignment properties of this property list.
+///\param	threshold - IN: Threshold value for file object size
+///\param	alignment - IN: Alignment value
+///\exception	H5::PropListIException
+///\par Description
+///		The parameter \a threshold must have a non-negative value.
+///		Note that setting the threshold value to 0 (zero) has the
+///		effect of a special case, forcing everything to be aligned.
+///		The parameter \a alignment must have a positive value.
+///
+///		For detail on \a setting alignment, please refer to
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetAlignment
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FileAccPropList::setAlignment( hsize_t threshold, hsize_t alignment ) const
+{
+   herr_t ret_value = H5Pset_alignment( id, threshold, alignment );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::setAlignment", "H5Pset_alignment failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::getAlignment
+///\brief	Returns the current settings for alignment properties from
+///		this property list.
+///\param	threshold - OUT: Retrieved threshold value for file object size
+///\param	alignment - OUT: Retrieved alignment value
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FileAccPropList::getAlignment( hsize_t &threshold, hsize_t &alignment ) const
+{
+   herr_t ret_value = H5Pget_alignment( id, &threshold, &alignment );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::getAlignment", "H5Pget_alignment failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setMultiType
+///\brief	Sets data type for \c MULTI driver.
+///\param	dtype - IN: Type of data
+///\exception	H5::PropListIException
+///\par Description
+///		More details and valid values for \a dtype can be found at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetMultiType
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setMultiType(H5FD_mem_t dtype) const
+{
+   herr_t ret_value = H5Pset_multi_type(id, dtype);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::setMultiType", "H5Pset_multi_type failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::getMultiType
+///\brief	Returns the data type property for \c MULTI driver.
+///\return	The data type property
+///\exception	H5::PropListIException
+///\par Description
+///		More details and possible returned values can be found at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-GetMultiType
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+H5FD_mem_t FileAccPropList::getMultiType() const
+{
+   H5FD_mem_t dtype;
+   herr_t ret_value = H5Pget_multi_type(id, &dtype);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::getMultiType", "H5Pget_multi_type failed");
+   }
+   return(dtype);
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setCache
+///\brief	Sets the meta data cache and raw data chunk cache parameters.
+///\param	mdc_nelmts - IN: Number of elements in the meta data cache
+///\param	rdcc_nelmts - IN: Number of elements in the raw data chunk cache
+///\param	rdcc_nbytes - IN: Total size of the raw data chunk cache, in bytes
+///\param	rdcc_w0 - IN: Preemption policy
+///\exception   H5::PropListIException
+///\par Description
+///		The argument \a rdcc_w0 should hold a value between 0 and 1
+///		inclusive.  This value indicates how much chunks that have
+///		been fully read are favored for preemption. A value of zero
+///		means fully read chunks are treated no differently than other
+///		chunks (the preemption is strictly LRU) while a value of one
+///		means fully read chunks are always preempted before other chunks.
+//--------------------------------------------------------------------------
+#ifdef H5_WANT_H5_V1_4_COMPAT
+void FileAccPropList::setCache( int mdc_nelmts, int rdcc_nelmts, size_t rdcc_nbytes, double rdcc_w0 ) const
+{
+   herr_t ret_value = H5Pset_cache( id, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, rdcc_w0 );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::setCache", "H5Pset_cache failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::getCache
+///\brief	Queries the meta data cache and raw data chunk cache parameters.
+///\param	mdc_nelmts  - OUT: Number of elements in the meta data cache
+///\param	rdcc_nelmts - OUT: Number of elements in the raw data chunk cache
+///\param	rdcc_nbytes - OUT: Total size of the raw data chunk cache, in bytes
+///\param	rdcc_w0 - OUT: Preemption policy
+///\exception   H5::PropListIException
+//--------------------------------------------------------------------------
+void FileAccPropList::getCache( int& mdc_nelmts, int& rdcc_nelmts, size_t& rdcc_nbytes, double& rdcc_w0 ) const
+{
+   herr_t ret_value = H5Pget_cache( id, &mdc_nelmts, &rdcc_nelmts, &rdcc_nbytes, &rdcc_w0 );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::getCache", "H5Pget_cache failed");
+   }
+}
+#else /* H5_WANT_H5_V1_4_COMPAT */
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setCache
+///\brief	Sets the meta data cache and raw data chunk cache parameters.
+///\param	mdc_nelmts - IN: Number of elements in the meta data cache
+///\param	rdcc_nelmts - IN: Number of elements in the raw data chunk cache
+///\param	rdcc_nbytes - IN: Total size of the raw data chunk cache, in bytes
+///\param	rdcc_w0 - IN: Preemption policy
+///\exception   H5::PropListIException
+///\par Description
+///		The argument \a rdcc_w0 should hold a value between 0 and 1
+///		inclusive.  This value indicates how much chunks that have
+///		been fully read are favored for preemption. A value of zero
+///		means fully read chunks are treated no differently than other
+///		chunks (the preemption is strictly LRU) while a value of one
+///		means fully read chunks are always preempted before other chunks.
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FileAccPropList::setCache( int mdc_nelmts, size_t rdcc_nelmts, size_t rdcc_nbytes, double rdcc_w0 ) const
+{
+   herr_t ret_value = H5Pset_cache( id, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, rdcc_w0 );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::setCache", "H5Pset_cache failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::getCache
+///\brief	Queries the meta data cache and raw data chunk cache parameters.
+///\param	mdc_nelmts  - OUT: Number of elements in the meta data cache
+///\param	rdcc_nelmts - OUT: Number of elements in the raw data chunk cache
+///\param	rdcc_nbytes - OUT: Total size of the raw data chunk cache, in bytes
+///\param	rdcc_w0 - OUT: Preemption policy
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FileAccPropList::getCache( int& mdc_nelmts, size_t& rdcc_nelmts, size_t& rdcc_nbytes, double& rdcc_w0 ) const
+{
+   herr_t ret_value = H5Pget_cache( id, &mdc_nelmts, &rdcc_nelmts, &rdcc_nbytes, &rdcc_w0 );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::getCache", "H5Pget_cache failed");
+   }
+}
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setFcloseDegree
+///\brief	Sets the degree for the file close behavior.
+///\param	degree - IN:
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void FileAccPropList::setFcloseDegree(H5F_close_degree_t degree)
+{
+   herr_t ret_value = H5Pset_fclose_degree(id, degree);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::setFcloseDegree", "H5Pset_fclose_degree failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::getFcloseDegree
+///\brief	Returns the degree for the file close behavior.
+///\return	The degree for the file close behavior
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+H5F_close_degree_t FileAccPropList::getFcloseDegree()
+{
+   H5F_close_degree_t degree;
+   herr_t ret_value = H5Pget_fclose_degree(id, &degree);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::getFcloseDegree", "H5Pget_fclose_degree failed");
+   }
+   return(degree);
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::setGcReferences
+///\brief	Sets garbage collecting references flag.
+///\param	gc_ref - IN: Flag setting reference garbage collection to
+///				on (1) or off (0).
+///\exception	H5::PropListIException
+///\par Description
+///		For detail on \a fapl, please refer to
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFaplStream
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FileAccPropList::setGcReferences( unsigned gc_ref ) const
+{
+   herr_t ret_value = H5Pset_gc_references( id, gc_ref );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::setGcReferences", "H5Pset_gc_references failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList::getGcReferences
+///\brief	Returns the garbage collecting references setting.
+///\return	Garbage collecting references setting, 0 (off) or 1 (on)
+///\exception	H5::PropListIException
+// Programmer:	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+unsigned FileAccPropList::getGcReferences() const
+{
+   unsigned gc_ref;
+
+   // the name of this routine will be changed to H5Pget_gc_references???
+   herr_t ret_value = H5Pget_gc_references( id, &gc_ref );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileAccPropList::getGcReferences", "H5Pget_gc_references failed");
+   }
+   return( gc_ref );
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileAccPropList destructor
+///\brief	Noop destructor
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FileAccPropList::~FileAccPropList() {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5FaccProp.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5FaccProp.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5FaccProp.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,141 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5FileAccPropList_H
+#define _H5FileAccPropList_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+// class for file access properties
+class H5_DLLCPP FileAccPropList : public PropList {
+   public:
+	static const FileAccPropList DEFAULT;
+
+	// Modifies this property list to use the H5FD_STDIO driver
+	void setStdio() const;
+
+	// Set file driver for this property list
+	void setDriver(hid_t new_driver_id, const void *new_driver_info) const;
+
+	// Returns a low-level file driver identifier.
+	hid_t getDriver() const;
+
+	// Sets offset for family driver.
+	void setFamilyOffset(hsize_t offset) const;
+
+	// Gets offset for family driver.
+	hsize_t getFamilyOffset() const;
+
+	// Modifies this file access property list to use the sec2 driver.
+	void setSec2() const;
+
+	// Modifies this file access property list to use the H5FD_CORE
+	// driver.
+	void setCore (size_t increment, hbool_t backing_store) const;
+
+	// Queries H5FD_CORE driver properties.
+	void getCore (size_t& increment, hbool_t& backing_store) const;
+
+	// Sets this file access properties list to the family driver.
+	void setFamily( hsize_t memb_size, const FileAccPropList& memb_plist ) const;
+
+	// Returns information about the family file access property list.
+	void getFamily(hsize_t& memb_size, FileAccPropList& memb_plist) const;
+	FileAccPropList getFamily(hsize_t& memb_size) const;
+
+	// Emulates the old split file driver,
+	void setSplit( FileAccPropList& meta_plist, FileAccPropList& raw_plist,
+	     const char* meta_ext = ".meta", const char* raw_ext = ".raw" ) const;
+	void setSplit( FileAccPropList& meta_plist, FileAccPropList& raw_plist,
+	     const string& meta_ext, const string& raw_ext ) const;
+
+#ifdef H5_HAVE_STREAM // for Stream Virtual File Driver
+	// Modifies this file access property list to use the Stream driver.
+	void setStream(H5FD_stream_fapl_t &fapl) const;
+
+	// Retrieves the streaming I/O driver settings
+	H5FD_stream_fapl_t getStream() const;
+#endif
+
+	// Sets the maximum size of the data sieve buffer.
+	void setSieveBufSize(size_t bufsize) const;
+
+	// Returns the current settings for the data sieve buffer size
+	// property
+	size_t getSieveBufSize() const;
+
+	// Sets the minimum size of metadata block allocations.
+	void setMetaBlockSize(hsize_t &block_size) const;
+
+	// Returns the current metadata block size setting.
+	hsize_t getMetaBlockSize() const;
+
+	// Modifies this file access property list to use the logging driver.
+	void setLog(const char *logfile, unsigned flags, size_t buf_size) const;
+	void setLog(const string& logfile, unsigned flags, size_t buf_size) const;
+
+	// Sets alignment properties of this file access property list
+	void setAlignment( hsize_t threshold = 1, hsize_t alignment = 1 ) const;
+
+	// Retrieves the current settings for alignment properties from
+	// this property list.
+	void getAlignment( hsize_t& threshold, hsize_t& alignment ) const;
+
+	// Sets data type for multi driver.
+	void setMultiType(H5FD_mem_t dtype) const;
+
+	// Returns the data type property for MULTI driver.
+	H5FD_mem_t getMultiType() const;
+
+	// Sets the meta data cache and raw data chunk cache parameters.
+	void setCache( int mdc_nelmts, size_t rdcc_nelmts, size_t rdcc_nbytes, double rdcc_w0 ) const;
+
+	// Queries the meta data cache and raw data chunk cache parameters.
+	void getCache( int& mdc_nelmts, size_t& rdcc_nelmts, size_t& rdcc_nbytes, double& rdcc_w0 ) const;
+
+	// Sets the degree for the file close behavior.
+	void setFcloseDegree(H5F_close_degree_t degree);
+
+	// Returns the degree for the file close behavior.
+	H5F_close_degree_t getFcloseDegree();
+
+	// Sets garbage collecting references flag.
+	void setGcReferences( unsigned gc_ref = 0 ) const;
+
+	// Returns garbage collecting references setting.
+	unsigned getGcReferences() const;
+
+	// Returns this class name
+	virtual string fromClass () const { return("FileAccPropList"); }
+
+	// Creates a file access property list.
+	FileAccPropList();
+
+	// Copy constructor: creates a copy of a FileAccPropList object.
+	FileAccPropList( const FileAccPropList& original );
+
+	// Creates a copy of an existing file access property list
+	// using the property list id.
+	FileAccPropList (const hid_t plist_id);
+
+	// Noop destructor
+	virtual ~FileAccPropList();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5FcreatProp.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5FcreatProp.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5FcreatProp.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,298 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5FcreatProp.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+///\brief	Constant for default property
+//--------------------------------------------------------------------------
+const FileCreatPropList FileCreatPropList::DEFAULT;
+
+//--------------------------------------------------------------------------
+// Function:	FileCreatPropList default constructor
+///\brief	Default constructor: Creates a file create property list
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FileCreatPropList::FileCreatPropList() : PropList( H5P_FILE_CREATE ) {}
+
+//--------------------------------------------------------------------------
+// Function:	FileCreatPropList copy constructor
+///\brief	Copy constructor: makes a copy of the original
+///		FileCreatPropList object.
+///\param	original - IN: FileCreatPropList instance to copy
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FileCreatPropList::FileCreatPropList( const FileCreatPropList& original ) : PropList( original ) {}
+
+//--------------------------------------------------------------------------
+// Function:	FileCreatPropList overloaded constructor
+///\brief	Creates a file creation property list using the id of an
+///		existing one.
+///\param	plist_id - IN: FileCreatPropList id to use
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FileCreatPropList::FileCreatPropList(const hid_t plist_id) : PropList(plist_id) {}
+
+//--------------------------------------------------------------------------
+// Function:	FileCreatPropList::getVersion
+///\brief	Retrieves version information for various parts of a file.
+///\param	super    - OUT: The file super block.
+///\param	freelist - OUT: The global free list.
+///\param	stab     - OUT: The root symbol table entry.
+///\param	shhdr    - OUT: Shared object headers.
+///\exception	H5::PropListIException
+///\par Description
+///		Any (or even all) of the output arguments can be null pointers.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FileCreatPropList::getVersion(unsigned& super, unsigned& freelist, unsigned& stab, unsigned& shhdr) const
+{
+   herr_t ret_value = H5Pget_version( id, &super, &freelist, &stab, &shhdr );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileCreatPropList::getVersion",
+		"H5Pget_version failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileCreatPropList::setUserblock
+///\brief	Sets the user block size field of this file creation property list.
+///\param	size - IN: User block size to be set, in bytes
+///\exception	H5::PropListIException
+///\par Description
+///		The default user block size is 0; it may be set to any power
+///		of 2 equal to 512 or greater (512, 1024, 2048, etc.)
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FileCreatPropList::setUserblock( hsize_t size ) const
+{
+   herr_t ret_value = H5Pset_userblock( id, size);
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileCreatPropList::setUserblock",
+		"H5Pset_userblock failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileCreatPropList::getUserblock
+///\brief	Returns the user block size of this file creation property list.
+///\return	User block size
+///\exception	H5::PropListIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+hsize_t FileCreatPropList::getUserblock() const
+{
+   hsize_t userblock_size;
+   herr_t ret_value = H5Pget_userblock( id, &userblock_size );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileCreatPropList::getUserblock",
+		"H5Pget_userblock failed");
+   }
+   return( userblock_size );
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileCreatPropList::setSizes
+///\brief	Sets the byte size of the offsets and lengths used to
+///		address objects in an HDF5 file.
+///\param	sizeof_addr - IN: Size of an object offset in bytes
+///\param	sizeof_size - IN: Size of an object length in bytes.
+///\exception	H5::PropListIException
+///\par Description
+///		For information on setting sizes, please refer to the
+///		C layer Reference Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSizes
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FileCreatPropList::setSizes( size_t sizeof_addr, size_t sizeof_size ) const
+{
+   herr_t ret_value = H5Pset_sizes( id, sizeof_addr, sizeof_size );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileCreatPropList::setSizes",
+		"H5Pset_sizes failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileCreatPropList::getSizes
+///\brief	Retrieves the size of the offsets and lengths used in an
+///		HDF5 file.
+///
+///\exception	H5::PropListIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FileCreatPropList::getSizes( size_t& sizeof_addr, size_t& sizeof_size ) const
+{
+   herr_t ret_value = H5Pget_sizes( id, &sizeof_addr, &sizeof_size );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileCreatPropList::getSizes",
+		"H5Pget_sizes failed");
+   }
+}
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+//--------------------------------------------------------------------------
+// Function:    FileCreatPropList::setSymk
+///\brief       Sets the size of parameters used to control the symbol table
+///             nodes.
+///\param       ik - IN: Symbol table tree rank
+///\param       lk - IN: Symbol table node size
+///\exception   H5::PropListIException
+///\par Description
+///             For information, please see the C layer Reference Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSymK
+// Programmer   Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FileCreatPropList::setSymk( int ik, int lk ) const
+{
+   herr_t ret_value = H5Pset_sym_k( id, ik, lk );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileCreatPropList::setSymk",
+		"H5Pset_sym_k failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:    FileCreatPropList::getSymk
+///\brief       Retrieves the size of the symbol table B-tree 1/2 rank and
+///             the symbol table leaf node 1/2 size.
+///
+///\exception   H5::PropListIException
+///\par Description
+///             For information, please see
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSymK
+// Programmer   Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FileCreatPropList::getSymk( int& ik, int& lk ) const
+{
+   herr_t ret_value = H5Pget_sym_k( id, &ik, &lk );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileCreatPropList::getSymk",
+		"H5Pget_sym_k failed");
+   }
+}
+#else /* H5_WANT_H5_V1_4_COMPAT */
+//--------------------------------------------------------------------------
+// Function:	FileCreatPropList::setSymk
+///\brief	Sets the size of parameters used to control the symbol table
+///		nodes.
+///\param	ik - IN: Symbol table tree rank
+///\param	lk - IN: Symbol table node size
+///\exception	H5::PropListIException
+///\par Description
+///		For information, please see the C layer Reference Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSymK
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FileCreatPropList::setSymk( unsigned ik, unsigned lk ) const
+{
+   herr_t ret_value = H5Pset_sym_k( id, ik, lk );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileCreatPropList::setSymk",
+		"H5Pset_sym_k failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileCreatPropList::getSymk
+///\brief	Retrieves the size of the symbol table B-tree 1/2 rank and
+///		the symbol table leaf node 1/2 size.
+///\exception	H5::PropListIException
+///\par Description
+///		For information, please see
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSymK
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FileCreatPropList::getSymk( unsigned& ik, unsigned& lk ) const
+{
+   herr_t ret_value = H5Pget_sym_k( id, &ik, &lk );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileCreatPropList::getSymk",
+		"H5Pget_sym_k failed");
+   }
+}
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+//--------------------------------------------------------------------------
+// Function:	FileCreatPropList::setIstorek
+///\brief	Sets the size of the parameter used to control the B-trees
+///		for indexing chunked datasets.
+///\param	ik - IN: 1/2 rank of chunked storage B-tree
+///\exception	H5::PropListIException
+///\par Description
+///		For information, please see the C layer Reference Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetIstoreK
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FileCreatPropList::setIstorek( unsigned ik ) const
+{
+   herr_t ret_value = H5Pset_istore_k( id, ik );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileCreatPropList::setIstorek",
+		"H5Pset_istore_k failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileCreatPropList::getIstorek
+///\brief	Returns the 1/2 rank of an indexed storage B-tree.
+///\return	1/2 rank of chunked storage B-tree
+///\exception	H5::PropListIException
+///\par Description
+///		For information, please see
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetIstoreK
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+unsigned FileCreatPropList::getIstorek() const
+{
+   unsigned ik;
+   herr_t ret_value = H5Pget_istore_k( id, &ik );
+   if( ret_value < 0 )
+   {
+      throw PropListIException("FileCreatPropList::getIstorek",
+		"H5Pget_istore_k failed");
+   }
+   return( ik );
+}
+
+//--------------------------------------------------------------------------
+// Function:	FileCreatPropList destructor
+///\brief	Noop destructor.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FileCreatPropList::~FileCreatPropList() {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5FcreatProp.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5FcreatProp.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5FcreatProp.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,87 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5FileCreatPropList_H
+#define _H5FileCreatPropList_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+// class for file access properties
+class H5_DLLCPP FileCreatPropList : public PropList {
+   public:
+	// Default file creation property list.
+	static const FileCreatPropList DEFAULT;
+
+	// Retrieves version information for various parts of a file.
+	void getVersion( unsigned& super, unsigned& freelist, unsigned& stab, unsigned& shhdr ) const;
+
+	// Sets the userblock size field of a file creation property list.
+	void setUserblock( hsize_t size ) const;
+
+	// Gets the size of a user block in this file creation property list.
+	hsize_t getUserblock() const;
+
+	// Retrieves the size-of address and size quantities stored in a
+	// file according to this file creation property list.
+	void getSizes( size_t& sizeof_addr, size_t& sizeof_size ) const;
+
+	// Sets file size-of addresses and sizes.
+	void setSizes( size_t sizeof_addr = 4, size_t sizeof_size = 4 ) const;
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+	// Retrieves the size of the symbol table B-tree 1/2 rank and the
+	// symbol table leaf node 1/2 size.
+	void getSymk( int& int_nodes_k, int& leaf_nodes_k ) const;
+
+	// Sets the size of parameters used to control the symbol table nodes.
+	void setSymk( int int_nodes_k, int leaf_nodes_k ) const;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+	// Retrieves the size of the symbol table B-tree 1/2 rank and the
+	// symbol table leaf node 1/2 size.
+	void getSymk( unsigned& int_nodes_k, unsigned& leaf_nodes_k ) const;
+
+	// Sets the size of parameters used to control the symbol table nodes.
+	void setSymk( unsigned int_nodes_k, unsigned leaf_nodes_k ) const;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+	// Returns the 1/2 rank of an indexed storage B-tree.
+	unsigned getIstorek() const;
+
+	// Sets the size of parameter used to control the B-trees for
+	// indexing chunked datasets.
+	void setIstorek( unsigned ik ) const;
+
+	// Returns this class name
+	virtual string fromClass () const { return("FileCreatPropList"); }
+
+	// Creates a file create property list.
+	FileCreatPropList();
+
+	// Copy constructor: creates a copy of a FileCreatPropList object.
+	FileCreatPropList(const FileCreatPropList& orig);
+
+	// Creates a copy of an existing file create property list
+	// using the property list id.
+	FileCreatPropList (const hid_t plist_id);
+
+	// Noop destructor
+	virtual ~FileCreatPropList();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5File.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5File.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5File.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,627 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5FaccProp.h"
+#include "H5FcreatProp.h"
+#include "H5DxferProp.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5Group.h"
+#include "H5AbstractDs.h"
+#include "H5DataSpace.h"
+#include "H5DataSet.h"
+#include "H5File.h"
+#include "H5Alltypes.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+// Function	H5File default constructor
+///\brief	Default constructor: creates a stub H5File object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5File::H5File() : IdComponent() {}
+
+//--------------------------------------------------------------------------
+// Function:	H5File overloaded constructor
+///\brief	Creates or opens an HDF5 file depending on the parameter flags.
+///\param	name         - IN: Name of the file
+///\param	flags        - IN: File access flags
+///\param	create_plist - IN: File creation property list, used when
+///		modifying default file meta-data.  Default to
+///		FileCreatPropList::DEFAULT
+///\param	access_plist - IN: File access property list.  Default to
+///		FileCreatPropList::DEFAULT
+///\par Description
+///		Valid values of \a flags include:
+///		\li \c H5F_ACC_TRUNC - Truncate file, if it already exists,
+///				       erasing all data previously stored in
+///				       the file.
+///		\li \c H5F_ACC_EXCL - Fail if file already exists.
+///			\c H5F_ACC_TRUNC and \c H5F_ACC_EXCL are mutually exclusive
+///		\li \c H5F_ACC_DEBUG - print debug information. This flag is
+///			used only by HDF5 library developers; it is neither
+///			tested nor supported for use in applications.
+///\par
+///		For info on file creation in the case of an already-open file,
+///		please refer to the \b Special \b case section in the C layer
+///		Reference Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5F.html#File-Create
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5File::H5File( const char* name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist ) : IdComponent()
+{
+   p_get_file(name, flags, create_plist, access_plist);
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File overloaded constructor
+///\brief	This is another overloaded constructor.  It differs from the
+///		above constructor only in the type of the \a name argument.
+///\param	name - IN: Name of the file - \c std::string
+///\param	flags - IN: File access flags
+///\param	create_plist - IN: File creation property list, used when
+///		modifying default file meta-data.  Default to
+///		FileCreatPropList::DEFAULT
+///\param	access_plist - IN: File access property list.  Default to
+///		FileCreatPropList::DEFAULT
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5File::H5File( const string& name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist ) : IdComponent()
+{
+   p_get_file(name.c_str(), flags, create_plist, access_plist);
+}
+
+//--------------------------------------------------------------------------
+// This function is private and contains common code between the
+// constructors taking a string or a char*
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void H5File::p_get_file(const char* name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist)
+{
+    // These bits only set for creation, so if any of them are set,
+    // create the file.
+    if( flags & (H5F_ACC_EXCL|H5F_ACC_TRUNC|H5F_ACC_DEBUG ))
+    {
+	hid_t create_plist_id = create_plist.getId();
+	hid_t access_plist_id = access_plist.getId();
+	id = H5Fcreate( name, flags, create_plist_id, access_plist_id );
+	if( id < 0 )  // throw an exception when open/create fail
+	{
+	    throw FileIException("H5File constructor", "H5Fcreate failed");
+	}
+    }
+    // Open the file if none of the bits above are set.
+    else
+    {
+	hid_t access_plist_id = access_plist.getId();
+	id = H5Fopen( name, flags, access_plist_id );
+	if( id < 0 )  // throw an exception when open/create fail
+	{
+	    throw FileIException("H5File constructor", "H5Fopen failed");
+	}
+    }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File copy constructor
+///\brief	Copy constructor: makes a copy of the original
+///		H5File object.
+///\param	original - IN: H5File instance to copy
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5File::H5File( const H5File& original ) : IdComponent( original ) {}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::isHdf5
+///\brief	Determines whether a file in HDF5 format.
+///\param	name - IN: Name of the file
+///\return	true if the file is in HDF5 format, and false, otherwise
+///\exception	H5::FileIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+bool H5File::isHdf5(const char* name )
+{
+   // Calls C routine H5Fis_hdf5 to determine whether the file is in
+   // HDF5 format.  It returns positive value, 0, or negative value
+   htri_t ret_value = H5Fis_hdf5( name );
+   if( ret_value > 0 )
+      return true;
+   else if( ret_value == 0 )
+      return false;
+   else // Raise exception when H5Fis_hdf5 returns a negative value
+   {
+      throw FileIException("H5File::isHdf5", "H5Fis_hdf5 returned negative value");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::isHdf5
+///\brief	This is an overloaded member function, provided for convenience.
+///		It takes an \c std::string for \a name.
+///\param	name - IN: Name of the file - \c std::string
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+bool H5File::isHdf5(const string& name )
+{
+   return( isHdf5( name.c_str()) );
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::reOpen
+///\brief	Reopens this file.
+///
+///\exception	H5::FileIException
+// Description
+//		If this object has represented another HDF5 file, the previous
+//		HDF5 file need to be closed first.
+// Programmer	Binh-Minh Ribler - 2000
+// Note:        This wrapper doesn't seem right regarding the 'id' and should
+//              be investigated.  BMR - 2/20/2005
+// Modification
+//		Replaced resetIdComponent with decRefCount to use C library
+//		ID reference counting mechanism - BMR, Feb 20, 2005
+//--------------------------------------------------------------------------
+void H5File::reOpen()
+{
+   // If this object has a valid id, appropriately decrement reference
+   // counter and close the id.
+    try {
+        decRefCount();
+    }
+    catch (Exception close_error) {
+        throw FileIException("H5File::reOpen", close_error.getDetailMsg());
+    }
+
+   // call C routine to reopen the file - Note: not sure about this
+   // does id need to be closed later?  which id to be the parameter?
+   id = H5Freopen( id );
+   if( id < 0 ) // Raise exception when H5Freopen returns a neg value
+      throw FileIException("H5File::reOpen", "H5Freopen failed");
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::reopen
+///\brief	Reopens this file.
+///
+///\exception	H5::FileIException
+///\par Description
+///		This function will be replaced by the above function \c reOpen
+///		in future releases.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void H5File::reopen()
+{
+   H5File::reOpen();
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::getCreatePlist
+///\brief	Returns the creation property list of this file
+///\return	FileCreatPropList object
+///\exception	H5::FileIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FileCreatPropList H5File::getCreatePlist() const
+{
+   hid_t create_plist_id = H5Fget_create_plist( id );
+
+   // if H5Fget_create_plist returns a valid id, create and return
+   // the FileCreatPropList object for this property list
+   if( create_plist_id > 0 )
+   {
+      FileCreatPropList create_plist( create_plist_id );
+      return( create_plist );
+   }
+   else
+   {
+      throw FileIException("H5File::getCreatePlist", "H5Fget_create_plist failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::getAccessPlist
+///\brief	Returns the access property list of this file
+///\return	FileAccPropList object
+///\exception	H5::FileIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FileAccPropList H5File::getAccessPlist() const
+{
+   hid_t access_plist_id = H5Fget_access_plist( id );
+
+   // if H5Fget_access_plist returns a valid id, create and return
+   // the FileAccPropList object for this property list
+   if( access_plist_id > 0 )
+   {
+      FileAccPropList access_plist( access_plist_id );
+      return access_plist;
+   }
+   else // Raise an exception
+   {
+      throw FileIException("H5File::getAccessPlist", "H5Fget_access_plist failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::getFreeSpace
+///\brief	Returns the amount of free space in the file.
+///\return	Amount of free space
+///\exception	H5::FileIException
+// Programmer   Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+hssize_t H5File::getFreeSpace() const
+{
+   hssize_t free_space = H5Fget_freespace(id);
+   if( free_space < 0 )
+   {
+      throw FileIException("H5File::getFreeSpace", "H5Fget_freespace failed");
+   }
+   return (free_space);
+}
+
+
+//--------------------------------------------------------------------------
+// Function:	H5File::getObjCount
+///\brief	Returns the number of opened object IDs (files, datasets,
+///		groups and datatypes) in the same file.
+///\param	types - Type of object to retrieve the count
+///\return	Number of opened object IDs
+///\exception	H5::FileIException
+///\par Description
+///		The valid values for \a types include:
+///		\li \c H5F_OBJ_FILE	- Files only
+///		\li \c H5F_OBJ_DATASET	- Datasets only
+///		\li \c H5F_OBJ_GROUP	- Groups only
+///		\li \c H5F_OBJ_DATATYPE	- Named datatypes only
+///		\li \c H5F_OBJ_ATTR	- Attributes only
+///		\li \c H5F_OBJ_ALL    - All of the above, i.e., \c H5F_OBJ_FILE
+///					| \c H5F_OBJ_DATASET | \c H5F_OBJ_GROUP
+///					| \c H5F_OBJ_DATATYPE | \c H5F_OBJ_ATTR
+///\par
+/// Multiple object types can be combined with the logical OR operator (|).
+// Programmer   Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+int H5File::getObjCount(unsigned types) const
+{
+   int num_objs = H5Fget_obj_count(id, types);
+   if( num_objs < 0 )
+   {
+      throw FileIException("H5File::getObjCount", "H5Fget_obj_count failed");
+   }
+   return (num_objs);
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::getObjCount
+///\brief	This is an overloaded member function, provided for convenience.
+///		It takes no parameter and returns the object count of all
+///		object types.
+///\return	Number of opened object IDs
+///\exception	H5::FileIException
+// Programmer   Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+int H5File::getObjCount() const
+{
+   int num_objs = H5Fget_obj_count(id, H5F_OBJ_ALL);
+   if( num_objs < 0 )
+   {
+      throw FileIException("H5File::getObjCount", "H5Fget_obj_count failed");
+   }
+   return (num_objs);
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::getObjIDs
+///\brief	Retrieves a list of opened object IDs (files, datasets,
+///		groups and datatypes) in the same file.
+///\param	types    - Type of object to retrieve the count
+///\param	max_objs - Maximum number of object identifiers to place
+///			   into obj_id_list.
+///\param	oid_list - List of open object identifiers
+///\exception	H5::FileIException
+///\par Description
+///		The valid values for \a types include:
+///		\li \c H5F_OBJ_FILE	- Files only
+///		\li \c H5F_OBJ_DATASET	- Datasets only
+///		\li \c H5F_OBJ_GROUP	- Groups only
+///		\li \c H5F_OBJ_DATATYPE	- Named datatypes only
+///		\li \c H5F_OBJ_ATTR	- Attributes only
+///		\li \c H5F_OBJ_ALL    - All of the above, i.e., \c H5F_OBJ_FILE
+///					| \c H5F_OBJ_DATASET | \c H5F_OBJ_GROUP
+///					| \c H5F_OBJ_DATATYPE | \c H5F_OBJ_ATTR
+///\par
+/// Multiple object types can be combined with the logical OR operator (|).
+//
+// Notes: will do the overload for this one after hearing from Quincey???
+// Programmer   Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+void H5File::getObjIDs(unsigned types, int max_objs, hid_t *oid_list) const
+{
+   herr_t ret_value = H5Fget_obj_ids(id, types, max_objs, oid_list);
+   if( ret_value < 0 )
+   {
+      throw FileIException("H5File::getObjIDs", "H5Fget_obj_ids failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::getVFDHandle
+///\brief	Returns the pointer to the file handle of the low-level file
+///		driver.
+///\param	fapl        - File access property list
+///\param	file_handle - Pointer to the file handle being used by
+///			      the low-level virtual file driver
+///\exception	H5::FileIException
+///\par Description
+///		For the \c FAMILY or \c MULTI drivers, \a fapl should be
+///		defined through the property list functions:
+///		\c FileAccPropList::setFamilyOffset for the \c FAMILY driver
+///		and \c FileAccPropList::setMultiType for the \c MULTI driver.
+///
+///		The obtained file handle is dynamic and is valid only while
+///		the file remains open; it will be invalid if the file is
+///		closed and reopened or opened during a subsequent session.
+// Programmer   Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+void H5File::getVFDHandle(FileAccPropList& fapl, void **file_handle) const
+{
+   hid_t fapl_id = fapl.getId();
+   herr_t ret_value = H5Fget_vfd_handle(id, fapl_id, file_handle);
+   if( ret_value < 0 )
+   {
+      throw FileIException("H5File::getVFDHandle", "H5Fget_vfd_handle failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::getVFDHandle
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function only in what arguments it
+///		accepts.
+///\param	file_handle - Pointer to the file handle being used by
+///			      the low-level virtual file driver
+///\exception	H5::FileIException
+// Programmer   Binh-Minh Ribler - May 2004
+//--------------------------------------------------------------------------
+void H5File::getVFDHandle(void **file_handle) const
+{
+   herr_t ret_value = H5Fget_vfd_handle(id, H5P_DEFAULT, file_handle);
+   if( ret_value < 0 )
+   {
+      throw FileIException("H5File::getVFDHandle", "H5Fget_vfd_handle failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::getFileName
+///\brief	Gets the name of this file.
+///\return	File name
+///\exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - Jul, 2004
+//--------------------------------------------------------------------------
+string H5File::getFileName() const
+{
+   try {
+      return(p_get_file_name());
+   }
+   catch (IdComponentException E) {
+      throw FileIException("H5File::getFileName", E.getDetailMsg());
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::Reference
+///\brief	Creates a reference to an Hdf5 object or a dataset region.
+///\param	name - IN: Name of the object to be referenced
+///\param	dataspace - IN: Dataspace with selection
+///\param	ref_type - IN: Type of reference; default to \c H5R_DATASET_REGION
+///\return	A reference
+///\exception	H5::IdComponentException
+///\par Description
+///		Note that name must be an absolute path to the object in the file.
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void* H5File::Reference(const char* name, DataSpace& dataspace, H5R_type_t ref_type) const
+{
+   try {
+      return(p_reference(name, dataspace.getId(), ref_type));
+   }
+   catch (IdComponentException E) {
+      throw FileIException("H5File::Reference", E.getDetailMsg());
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::Reference
+///\brief	This is an overloaded function, provided for your convenience.
+///		It differs from the above function in that it only creates
+///		a reference to an HDF5 object, not to a dataset region.
+///\param	name - IN: Name of the object to be referenced
+///\return	A reference
+///\exception	H5::IdComponentException
+///\par Description
+//		This function passes H5R_OBJECT and -1 to the protected
+//		function for it to pass to the C API H5Rcreate
+//		to create a reference to the named object.
+///\par
+///		Note that, for H5File, name must be an absolute path to the
+///		object in the file.
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void* H5File::Reference(const char* name) const
+{
+   try {
+      return(p_reference(name, -1, H5R_OBJECT));
+   }
+   catch (IdComponentException E) {
+      throw FileIException("H5File::Reference", E.getDetailMsg());
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::Reference
+///\brief	This is an overloaded function, provided for your convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for the object's name.
+///\param	name - IN: Name of the object to be referenced - \c std::string
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void* H5File::Reference(const string& name) const
+{
+   return(Reference(name.c_str()));
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::getObjType
+///\brief	Retrieves the type of object that an object reference points to.
+///\param	ref      - IN: Reference to query
+///\param	ref_type - IN: Type of reference to query
+///\return	Object type, which can be one of the following:
+///		\li \c H5G_LINK    - Object is a symbolic link.
+///		\li \c H5G_GROUP   - Object is a group.
+///		\li \c H5G_DATASET - Object is a dataset.
+///		\li \c H5G_TYPE    - Object is a named datatype
+///\exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+H5G_obj_t H5File::getObjType(void *ref, H5R_type_t ref_type) const
+{
+   return(p_get_obj_type(ref, ref_type));
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::getRegion
+///\brief	Retrieves a dataspace with the region pointed to selected.
+///\param	ref      - IN: Reference to get region of
+///\param	ref_type - IN: Type of reference to get region of - default
+///\return	DataSpace instance
+///\exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+DataSpace H5File::getRegion(void *ref, H5R_type_t ref_type) const
+{
+   DataSpace dataspace(p_get_region(ref, ref_type));
+   return(dataspace);
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::getFileSize
+///\brief	Returns the file size of the HDF5 file.
+///\return	File size
+///\exception	H5::FileIException
+///\par Description
+///		This function is called after an existing file is opened in
+///		order to learn the true size of the underlying file.
+// Programmer   Raymond Lu - June 24, 2004
+//--------------------------------------------------------------------------
+hsize_t H5File::getFileSize() const
+{
+   hsize_t file_size;
+   herr_t ret_value = H5Fget_filesize(id, &file_size);
+   if (ret_value < 0)
+   {
+      throw FileIException("H5File::getFileSize", "H5Fget_filesize failed");
+   }
+   return (file_size);
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::getLocId
+// Purpose:	Get the id of this file
+// Description
+//		This function is a redefinition of CommonFG::getLocId.  It
+//		is used by CommonFG member functions to get the file id.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+hid_t H5File::getLocId() const
+{
+   return( getId() );
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::close
+///\brief	Closes this HDF5 file.
+///
+///\exception	H5::FileIException
+// Programmer	Binh-Minh Ribler - Mar 9, 2005
+//--------------------------------------------------------------------------
+void H5File::close()
+{
+   herr_t ret_value = H5Fclose( id );
+   if( ret_value < 0 )
+   {
+      throw FileIException("H5File::close", "H5Fclose failed");
+   }
+   // reset the id because the file that it represents is now closed
+   id = 0;
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File::throwException
+///\brief	Throws file exception - initially implemented for CommonFG
+///\param	func_name - Name of the function where failure occurs
+///\param	msg       - Message describing the failure
+///\exception	H5::FileIException
+// Description
+// 		This function is used in CommonFG implementation so that
+//		proper exception can be thrown for file or group.  The
+//		argument func_name is a member of CommonFG and "H5File::"
+//		will be inserted to indicate the function called is an
+//		implementation of H5File.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void H5File::throwException(const string func_name, const string msg) const
+{
+   string full_name = func_name;
+   full_name.insert(0, "H5File::");
+   throw FileIException(full_name, msg);
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5File destructor
+///\brief	Properly terminates access to this file.
+// Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Replaced resetIdComponent with decRefCount to use C library
+//		ID reference counting mechanism - BMR, Feb 20, 2005
+//--------------------------------------------------------------------------
+H5File::~H5File()
+{
+   // The HDF5 file id will be closed properly
+    try {
+        decRefCount();
+    }
+    catch (Exception close_error) {
+        cerr << "H5File::~H5File - " << close_error.getDetailMsg() << endl;
+    }
+}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5File.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5File.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5File.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,113 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5File_H
+#define _H5File_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP H5File : public IdComponent, public CommonFG {
+   public:
+	// Creates or opens an HDF5 file.
+	H5File( const char* name, unsigned int flags,
+	   const FileCreatPropList& create_plist = FileCreatPropList::DEFAULT,
+	   const FileAccPropList& access_plist = FileAccPropList::DEFAULT );
+	H5File( const string& name, unsigned int flags,
+	   const FileCreatPropList& create_plist = FileCreatPropList::DEFAULT,
+	   const FileAccPropList& access_plist = FileAccPropList::DEFAULT );
+
+	// Close this file.
+	virtual void close();
+
+	// Gets the access property list of this file.
+	FileAccPropList getAccessPlist() const;
+
+	// Gets the creation property list of this file.
+	FileCreatPropList getCreatePlist() const;
+
+	// Gets the name of this file.
+	string getFileName() const;
+
+        // Retrieves the file size of an opened file.
+        hsize_t getFileSize() const;
+
+	// Returns the amount of free space in the file.
+	hssize_t getFreeSpace() const;
+
+	// Returns the number of opened object IDs (files, datasets, groups
+	// and datatypes) in the same file.
+	int getObjCount(unsigned types) const;
+	int getObjCount() const;
+
+	// Retrieves a list of opened object IDs (files, datasets, groups
+	// and datatypes) in the same file.
+	void getObjIDs(unsigned types, int max_objs, hid_t *oid_list) const;
+
+	// Retrieves the type of object that an object reference points to.
+	H5G_obj_t getObjType(void *ref, H5R_type_t ref_type) const;
+
+	// Retrieves a dataspace with the region pointed to selected.
+	DataSpace getRegion(void *ref, H5R_type_t ref_type = H5R_DATASET_REGION) const;
+
+	// Returns the pointer to the file handle of the low-level file driver.
+	void getVFDHandle(FileAccPropList& fapl, void **file_handle) const;
+	void getVFDHandle(void **file_handle) const;
+
+	// Determines if a file, specified by its name, is in HDF5 format
+	static bool isHdf5(const char* name );
+	static bool isHdf5(const string& name );
+
+	// Reopens this file.
+	void reOpen();	// added for better name
+	void reopen();
+
+	// Creates a reference to a named Hdf5 object or to a dataset region
+	// in this object.
+	void* Reference(const char* name, DataSpace& dataspace, H5R_type_t ref_type = H5R_DATASET_REGION) const;
+
+	// Creates a reference to a named Hdf5 object in this object.
+	void* Reference(const char* name) const;
+	void* Reference(const string& name) const;
+
+	// Returns this class name
+	virtual string fromClass () const { return ("H5File"); }
+
+	// Throw file exception.
+	virtual void throwException(const string func_name, const string msg) const;
+
+	// Gets the file id
+	virtual hid_t getLocId() const;
+
+	// Default constructor
+	H5File();
+
+	// Copy constructor: makes a copy of the original H5File object.
+	H5File(const H5File& original);
+
+	// H5File destructor.
+	virtual ~H5File();
+
+   private:
+	// This function is private and contains common code between the
+	// constructors taking a string or a char*
+	void p_get_file( const char* name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist );
+
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5FloatType.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5FloatType.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5FloatType.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,288 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+#include "H5AbstractDs.h"
+#include "H5DxferProp.h"
+#include "H5DataSpace.h"
+#include "H5AtomType.h"
+#include "H5FloatType.h"
+#include "H5DataSet.h"
+#include "H5PredType.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+// Function:	FloatType default constructor
+///\brief	Default constructor: Creates a stub floating-point datatype
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FloatType::FloatType() {}
+
+//--------------------------------------------------------------------------
+// Function:	FloatType overloaded constructor
+///\brief	Creates a floating-point datatype using a predefined type.
+///\param	pred_type - IN: Predefined datatype
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FloatType::FloatType( const PredType& pred_type ) : AtomType()
+{
+   // use DataType::copy to make a copy of this predefined type
+   copy( pred_type );
+}
+
+//--------------------------------------------------------------------------
+// Function:	FloatType overloaded constructor
+///\brief	Creates an FloatType object using the id of an existing
+///		datatype.
+///\param	existing_id - IN: Id of an existing datatype
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FloatType::FloatType( const hid_t existing_id ) : AtomType( existing_id ) {}
+
+//--------------------------------------------------------------------------
+// Function:	FloatType copy constructor
+///\brief	Copy constructor: makes a copy of the original FloatType object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FloatType::FloatType( const FloatType&  original ) : AtomType( original ){}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType overloaded constructor
+///\brief	Gets the floating-point datatype of the specified dataset
+///\param	dataset - IN: Dataset that this floating-point datatype
+///		associates with
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FloatType::FloatType( const DataSet& dataset ) : AtomType()
+{
+   // Calls C function H5Dget_type to get the id of the datatype
+   id = H5Dget_type( dataset.getId() );
+
+   if( id < 0 )
+   {
+      throw DataSetIException("FloatType constructor", "H5Dget_type failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FloatType::getFields
+///\brief	Retrieves floating point datatype bit field information.
+///\param	spos  - OUT: Retrieved floating-point sign bit
+///\param	epos  - OUT: Retrieved exponent bit-position
+///\param	esize - OUT: Retrieved size of exponent, in bits
+///\param	mpos  - OUT: Retrieved mantissa bit-position
+///\param	msize - OUT: Retrieved size of mantissa, in bits
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FloatType::getFields( size_t& spos, size_t& epos, size_t& esize, size_t& mpos, size_t& msize ) const
+{
+   herr_t ret_value = H5Tget_fields( id, &spos, &epos, &esize, &mpos, &msize );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException("FloatType::getFields", "H5Tget_fields failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FloatType::setFields
+///\brief	Sets locations and sizes of floating point bit fields.
+///\param	spos  - OUT: Sign position, i.e., the bit offset of the
+///		floating-point sign bit.
+///\param	epos  - OUT: Exponent bit position
+///\param	esize - OUT: Size of exponent, in bits
+///\param	mpos  - OUT: Mantissa bit-position
+///\param	msize - OUT: Size of mantissa, in bits
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FloatType::setFields( size_t spos, size_t epos, size_t esize, size_t mpos, size_t msize ) const
+{
+   herr_t ret_value = H5Tset_fields( id, spos, epos, esize, mpos, msize );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException("FloatType::setFields", "H5Tset_fields failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FloatType::getEbias
+///\brief	Retrieves the exponent bias of a floating-point type.
+///\return	Exponent bias
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+size_t FloatType::getEbias() const
+{
+   size_t ebias = H5Tget_ebias( id );
+   // Returns the bias if successful
+   if( ebias == 0 )
+   {
+      throw DataTypeIException("FloatType::getEbias", "H5Tget_ebias failed - returned exponent bias as 0");
+   }
+   return( ebias );
+}
+
+//--------------------------------------------------------------------------
+// Function:	FloatType::setEbias
+///\brief	Sets the exponent bias of a floating-point type.
+///\param	ebias - Exponent bias value
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FloatType::setEbias( size_t ebias ) const
+{
+   herr_t ret_value = H5Tset_ebias( id, ebias );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException("FloatType::setEbias", "H5Tset_ebias failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FloatType::getNorm
+///\brief	Retrieves mantissa normalization of a floating-point datatype.
+///\param	norm_string - OUT: Text string of the normalization type
+///\return	Valid normalization type, which can be:
+///		\li \c H5T_NORM_IMPLIED (0) - MSB of mantissa is not stored
+///		\li \c H5T_NORM_MSBSET (1) - MSB of mantissa is always 1
+///		\li \c H5T_NORM_NONE (2) - Mantissa is not normalized
+///\exception	H5::DataTypeIException
+///\par Description
+///		For your convenience, this function also provides the text
+///		string of the returned normalization type, via parameter
+///		\a norm_string.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5T_norm_t FloatType::getNorm( string& norm_string ) const
+{
+   H5T_norm_t norm = H5Tget_norm( id );  // C routine
+   // Returns a valid normalization type if successful
+   if( norm == H5T_NORM_ERROR )
+   {
+      throw DataTypeIException("FloatType::getNorm", "H5Tget_norm failed - returned H5T_NORM_ERROR");
+   }
+   if( norm == H5T_NORM_IMPLIED )
+      norm_string = "H5T_NORM_IMPLIED (0)";
+   else if( norm == H5T_NORM_MSBSET )
+      norm_string = "H5T_NORM_MSBSET (1)";
+   else if( norm == H5T_NORM_NONE )
+      norm_string = "H5T_NORM_NONE (2)";
+   return( norm );
+}
+
+//--------------------------------------------------------------------------
+// Function:	FloatType::setNorm
+///\brief	Sets the mantissa normalization of a floating-point datatype.
+///\param	norm - IN: Mantissa normalization type
+///\exception	H5::DataTypeIException
+///\par Description
+///		Valid values for normalization type include:
+///		\li \c H5T_NORM_IMPLIED (0) - MSB of mantissa is not stored
+///		\li \c H5T_NORM_MSBSET (1) - MSB of mantissa is always 1
+///		\li \c H5T_NORM_NONE (2) - Mantissa is not normalized
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FloatType::setNorm( H5T_norm_t norm ) const
+{
+   herr_t ret_value = H5Tset_norm( id, norm );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException("FloatType::setNorm", "H5Tset_norm failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FloatType::getInpad
+///\brief	Retrieves the internal padding type for unused bits in
+///		this floating-point datatypes.
+///\return	Internal padding type, which can be:
+///		\li \c H5T_PAD_ZERO (0) - Set background to zeros
+///		\li \c H5T_PAD_ONE (1) - Set background to ones
+///		\li \c H5T_PAD_BACKGROUND (2) - Leave background alone
+///\exception	H5::DataTypeIException
+///\par Description
+///		For your convenience, this function also provides the text
+///		string of the returned internal padding type, via parameter
+///		\a pad_string.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5T_pad_t FloatType::getInpad( string& pad_string ) const
+{
+   H5T_pad_t pad_type = H5Tget_inpad( id );
+   // Returns a valid padding type if successful
+   if( pad_type == H5T_PAD_ERROR )
+   {
+      throw DataTypeIException("FloatType::getInpad", "H5Tget_inpad failed - returned H5T_PAD_ERROR");
+   }
+   if( pad_type == H5T_PAD_ZERO )
+      pad_string = "H5T_PAD_ZERO (0)";
+   else if( pad_type == H5T_PAD_ONE )
+      pad_string = "H5T_PAD_ONE (1)";
+   else if( pad_type == H5T_PAD_BACKGROUND )
+      pad_string = "H5T_PAD_BACKGROUD (2)";
+   return( pad_type );
+}
+
+//--------------------------------------------------------------------------
+// Function:	FloatType::setInpad
+///\brief	Fills unused internal floating point bits.
+///\param	inpad - IN: Internal padding type
+///\exception	H5::DataTypeIException
+///\par Description
+///		If any internal bits of a floating point type are unused
+///		(that is, those significant bits which are not part of the
+///		sign, exponent, or mantissa), then they will be filled
+///		according to the padding value provided by \a inpad.
+///\par
+///		Valid values for normalization type include:
+///		\li \c H5T_PAD_ZERO (0) - Set background to zeros
+///		\li \c H5T_PAD_ONE (1) - Set background to ones
+///		\li \c H5T_PAD_BACKGROUND (2) - Leave background alone
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void FloatType::setInpad( H5T_pad_t inpad ) const
+{
+   herr_t ret_value = H5Tset_inpad( id, inpad );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException("FloatType::setInpad", "H5Tset_inpad failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	FloatType destructor
+///\brief	Noop destructor.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+FloatType::~FloatType() {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5FloatType.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5FloatType.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5FloatType.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,73 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5FloatType_H
+#define _H5FloatType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP FloatType : public AtomType {
+   public:
+        // Creates a floating-point type using a predefined type
+        FloatType( const PredType& pred_type );
+
+	// Gets the floating-point datatype of the specified dataset
+	FloatType( const DataSet& dataset );
+
+	// Retrieves the exponent bias of a floating-point type.
+	size_t getEbias() const;
+
+	// Sets the exponent bias of a floating-point type.
+	void setEbias( size_t ebias ) const;
+
+	// Retrieves floating point datatype bit field information.
+	void getFields( size_t& spos, size_t& epos, size_t& esize, size_t& mpos, size_t& msize ) const;
+
+	// Sets locations and sizes of floating point bit fields.
+	void setFields( size_t spos, size_t epos, size_t esize, size_t mpos, size_t msize ) const;
+
+	// Retrieves the internal padding type for unused bits in floating-point datatypes.
+	H5T_pad_t getInpad( string& pad_string ) const;
+
+	// Fills unused internal floating point bits.
+	void setInpad( H5T_pad_t inpad ) const;
+
+	// Retrieves mantissa normalization of a floating-point datatype.
+	H5T_norm_t getNorm( string& norm_string ) const;
+
+	// Sets the mantissa normalization of a floating-point datatype.
+	void setNorm( H5T_norm_t norm ) const;
+
+	// Returns this class name
+	virtual string fromClass () const { return ("FloatType"); }
+
+	// Default constructor
+	FloatType();
+
+	// Creates a floating-point datatype using an existing id
+	FloatType( const hid_t existing_id );
+
+	// Copy constructor: makes a copy of the original FloatType object.
+	FloatType( const FloatType& original );
+
+	// Noop destructor.
+	virtual ~FloatType();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5Group.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5Group.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5Group.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,227 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5AbstractDs.h"
+#include "H5FaccProp.h"
+#include "H5FcreatProp.h"
+#include "H5DcreatProp.h"
+#include "H5DxferProp.h"
+#include "H5DataSpace.h"
+#include "H5DataSet.h"
+#include "H5CommonFG.h"
+#include "H5Group.h"
+#include "H5File.h"
+#include "H5Alltypes.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+// Function:	Group default constructor
+///\brief	Default constructor: creates a stub Group.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Group::Group() : H5Object() {}
+
+//--------------------------------------------------------------------------
+// Function:	Group copy constructor
+///\brief	Copy constructor: makes a copy of the original Group object.
+///\param	original - IN: Original group to copy
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Group::Group( const Group& original ) : H5Object( original ) {}
+
+//--------------------------------------------------------------------------
+// Function:	Group::getLocId
+///\brief	Returns the id of this group.
+///\return	Id of this group
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+hid_t Group::getLocId() const
+{
+   return( getId() );
+}
+
+//--------------------------------------------------------------------------
+// Function:	Group overloaded constructor
+///\brief	Creates a Group object using the id of an existing group.
+///\param	group_id - IN: Id of an existing group
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Group::Group( const hid_t group_id ) : H5Object( group_id ) {}
+
+//--------------------------------------------------------------------------
+// Function:	Group::Reference
+///\brief	Creates a reference to an HDF5 object or a dataset region.
+///\param	name - IN: Name of the object to be referenced
+///\param	dataspace - IN: Dataspace with selection
+///\param	ref_type - IN: Type of reference; default to \c H5R_DATASET_REGION
+///\return	A reference
+///\exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void* Group::Reference(const char* name, DataSpace& dataspace, H5R_type_t ref_type) const
+{
+   try {
+      return(p_reference(name, dataspace.getId(), ref_type));
+   }
+   catch (IdComponentException E) {
+      throw GroupIException("Group::Reference", E.getDetailMsg());
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	Group::Reference
+///\brief	This is an overloaded function, provided for your convenience.
+///		It differs from the above function in that it only creates
+///		a reference to an HDF5 object, not to a dataset region.
+///\param	name - IN: Name of the object to be referenced
+///\return	A reference
+///\exception	H5::IdComponentException
+///\par Description
+//		This function passes H5R_OBJECT and -1 to the protected
+//		function for it to pass to the C API H5Rcreate
+//		to create a reference to the named object.
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void* Group::Reference(const char* name) const
+{
+   try {
+      return(p_reference(name, -1, H5R_OBJECT));
+   }
+   catch (IdComponentException E) {
+      throw GroupIException("Group::Reference", E.getDetailMsg());
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	Group::Reference
+///\brief	This is an overloaded function, provided for your convenience.
+///		It differs from the above function in that it takes an
+///		\c std::string for the object's name.
+///\param	name - IN: Name of the object to be referenced
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void* Group::Reference(const string& name) const
+{
+   return(Reference(name.c_str()));
+}
+
+//--------------------------------------------------------------------------
+// Function:	Group::getObjType
+///\brief	Retrieves the type of object that an object reference points to.
+///\param		ref      - IN: Reference to query
+///\param		ref_type - IN: Type of reference to query
+// Return	An object type, which can be one of the following:
+//			H5G_LINK Object is a symbolic link.
+//			H5G_GROUP Object is a group.
+//			H5G_DATASET   Object is a dataset.
+//			H5G_TYPE Object is a named datatype
+// Exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+H5G_obj_t Group::getObjType(void *ref, H5R_type_t ref_type) const
+{
+   return(p_get_obj_type(ref, ref_type));
+}
+
+//--------------------------------------------------------------------------
+// Function:	Group::getRegion
+///\brief	Retrieves a dataspace with the region pointed to selected.
+///\param	ref      - IN: Reference to get region of
+///\param	ref_type - IN: Type of reference to get region of - default
+///\return	DataSpace instance
+///\exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+DataSpace Group::getRegion(void *ref, H5R_type_t ref_type) const
+{
+   DataSpace dataspace(p_get_region(ref, ref_type));
+   return(dataspace);
+}
+
+//--------------------------------------------------------------------------
+// Function:	Group::close
+///\brief	Closes this group.
+///
+///\exception	H5::GroupIException
+// Programmer	Binh-Minh Ribler - Mar 9, 2005
+//--------------------------------------------------------------------------
+void Group::close()
+{
+   herr_t ret_value = H5Gclose( id );
+   if( ret_value < 0 )
+   {
+      throw GroupIException("Group::close", "H5Gclose failed");
+   }
+   // reset the id because the group that it represents is now closed
+   id = 0;
+}
+
+//--------------------------------------------------------------------------
+// Function:	Group::throwException
+///\brief	Throws H5::GroupIException.
+///\param	func_name - Name of the function where failure occurs
+///\param	msg       - Message describing the failure
+///\exception	H5::GroupIException
+// Description
+//		This function is used in CommonFG implementation so that
+//		proper exception can be thrown for file or group.  The
+//		argument func_name is a member of CommonFG and "Group::"
+//		will be inserted to indicate the function called is an
+//		implementation of Group.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void Group::throwException(const string func_name, const string msg) const
+{
+   string full_name = func_name;
+   full_name.insert(0, "Group::");
+   throw GroupIException(full_name, msg);
+}
+
+//--------------------------------------------------------------------------
+// Function:	Group destructor
+///\brief	Properly terminates access to this group.
+// Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Replaced resetIdComponent with decRefCount to use C library
+//		ID reference counting mechanism - BMR, Feb 20, 2005
+//--------------------------------------------------------------------------
+Group::~Group()
+{
+   // The group id will be closed properly
+    try {
+        decRefCount();
+    }
+    catch (Exception close_error) {
+        cerr << "Group::~Group - " << close_error.getDetailMsg() << endl;
+    }
+}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5Group.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5Group.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5Group.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,67 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5Group_H
+#define _H5Group_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP Group : public H5Object, public CommonFG {
+   public:
+	// Close this group.
+	virtual void close();
+
+	// Retrieves the type of object that an object reference points to.
+	H5G_obj_t getObjType(void *ref, H5R_type_t ref_type) const;
+
+	// Retrieves a dataspace with the region pointed to selected.
+	DataSpace getRegion(void *ref, H5R_type_t ref_type = H5R_DATASET_REGION) const;
+
+	// Creates a reference to a named Hdf5 object or to a dataset region
+	// in this object.
+	void* Reference(const char* name, DataSpace& dataspace, H5R_type_t ref_type = H5R_DATASET_REGION) const;
+
+	// Creates a reference to a named Hdf5 object in this object.
+	void* Reference(const char* name) const;
+	void* Reference(const string& name) const;
+
+	// Returns this class name
+	virtual string fromClass () const { return ("Group"); }
+
+        // Throw group exception.
+        virtual void throwException(const string func_name, const string msg) const;
+
+	// for CommonFG to get the file id.
+	virtual hid_t getLocId() const;
+
+	// default constructor
+	Group();
+
+	// Copy constructor: makes a copy of the original object
+	Group(const Group& original);
+
+	// Destructor
+	virtual ~Group();
+
+        // Creates a copy of an existing group using its id.
+        Group( const hid_t group_id );
+
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5IdComponent.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5IdComponent.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5IdComponent.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,381 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5Library.h"
+#include "H5IdComponent.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent overloaded constructor
+///\brief	Creates an IdComponent object using the id of an existing object.
+///\param	h5_id - IN: Id of an existing object
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IdComponent::IdComponent(const hid_t h5_id) : id(h5_id) {}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent copy constructor
+///\brief	Copy constructor: makes a copy of the original IdComponent object.
+///\param	original - IN: IdComponent instance to copy
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IdComponent::IdComponent( const IdComponent& original )
+{
+   id = original.id;
+   incRefCount(); // increment number of references to this id
+}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent::incRefCount
+///\brief	Increment reference counter for a given id.
+// Programmer	Binh-Minh Ribler - May 2005
+//--------------------------------------------------------------------------
+void IdComponent::incRefCount(hid_t obj_id) const
+{
+    if (p_valid_id(obj_id))
+	if (H5Iinc_ref(obj_id) < 0)
+            throw IdComponentException(inMemFunc("incRefCount"), "incrementing object ref count failed");
+}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent::incRefCount
+///\brief	Increment reference counter for the id of this object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void IdComponent::incRefCount() const
+{
+    incRefCount(id);
+}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent::decRefCount
+///\brief	Decrement reference counter for a given id.
+// Programmer	Binh-Minh Ribler - May 2005
+// Modification:
+//		Added the check for ref counter to give a little more info
+//		on why H5Idec_ref fails in some cases - BMR 5/19/2005
+//--------------------------------------------------------------------------
+void IdComponent::decRefCount(hid_t obj_id) const
+{
+    if (p_valid_id(obj_id))
+        if (H5Idec_ref(obj_id) < 0)
+	    if (H5Iget_ref(obj_id) <= 0)
+		throw IdComponentException(inMemFunc("decRefCount"),
+					"object ref count is 0 or negative");
+	    else
+		throw IdComponentException(inMemFunc("decRefCount"),
+					"decrementing object ref count failed");
+}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent::decRefCount
+///\brief	Decrement reference counter for the id of this object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void IdComponent::decRefCount() const
+{
+    decRefCount(id);
+}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent::getCounter
+///\brief	Returns the reference counter for a given id.
+///\return	Reference count
+// Programmer	Binh-Minh Ribler - May 2005
+//--------------------------------------------------------------------------
+int IdComponent::getCounter(hid_t obj_id) const
+{
+    int counter = 0;
+    if (p_valid_id(obj_id))
+    {
+	counter = H5Iget_ref(obj_id);
+	if (counter < 0)
+            throw IdComponentException(inMemFunc("incRefCount"), "incrementing object ref count failed");
+    }
+    return (counter);
+}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent::getCounter
+///\brief	Returns the reference counter for the id of this object.
+///\return	Reference count
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+int IdComponent::getCounter() const
+{
+    return (getCounter(id));
+}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent::operator=
+///\brief	Assignment operator.
+///\param	rhs - IN: Reference to the existing object
+///\return	Reference to IdComponent instance
+///\exception	H5::IdComponentException when attempt to close the HDF5
+///		object fails
+// Description
+// 		The underlaying reference counting in the C library ensures
+// 		that the current valid id of this object is properly closed.
+//		Copy the id from rhs to this object, then increment the
+//		reference counter of the id to indicate that another object
+//		is referencing it.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IdComponent& IdComponent::operator=( const IdComponent& rhs )
+{
+   // handling references to this id
+   decRefCount();
+
+   // copy the data members from the rhs object
+   id = rhs.id;
+
+   // increment the reference counter
+   incRefCount();
+
+   return( *this );
+}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent::setId
+///\brief	Sets the identifier of this object to a new value.
+///
+///\exception	H5::IdComponentException when the attempt to close the HDF5
+///		object fails
+// Description:
+// 		The underlaying reference counting in the C library ensures
+// 		that the current valid id of this object is properly closed.
+// 		Then the object's id is reset to the new id.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void IdComponent::setId( hid_t new_id )
+{
+   // handling references to this id
+   decRefCount();
+
+   // reset object's id to the given id
+   id = new_id;
+}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent::getId
+///\brief	Returns the id of this object
+///\return	HDF5 id
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+hid_t IdComponent::getId () const
+{
+   return( id );
+}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent destructor
+///\brief	Noop destructor.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IdComponent::~IdComponent() {
+
+/* uncomment this block and complete it when deciding to use dontAtExit
+   unless the atexit/global destructor problem is fixed, then
+   remove it- BMR 11/14/00
+
+   if( id == NOTATEXIT )
+   {
+      // Call H5Library::close to clean up - temporary solution to avoid the
+      // trouble of atexit/global destructors
+      try {
+         if( H5Library::need_cleanup == true )
+         {
+            H5Library::close();
+            H5Library::need_cleanup = false; // reset the boolean just in case
+         }
+      }
+      // catch failure caused by the H5Library operations
+      catch( LibraryIException error )
+      {
+         error.printError();
+      }
+   }
+*/
+}
+
+//
+// Implementation of protected functions for HDF5 Reference Interface
+// and miscelaneous helpers.
+//
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+//--------------------------------------------------------------------------
+// Function:	IdComponent default constructor - private
+///\brief	Default constructor.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IdComponent::IdComponent() : id(-1) {}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent::p_get_file_name
+// Purpose:	Gets the name of the file, in which this object belongs.
+// Exception:	H5::IdComponentException
+// Description:
+// 		This function is protected so that the user applications can
+// 		only have access to its code via allowable classes, namely,
+// 		H5File and H5Object subclasses.
+// Programmer	Binh-Minh Ribler - Jul, 2004
+//--------------------------------------------------------------------------
+string IdComponent::p_get_file_name() const
+{
+   // Preliminary call to H5Fget_name to get the length of the file name
+   ssize_t name_size = H5Fget_name(id, NULL, 0);
+
+   // If H5Aget_name returns a negative value, raise an exception,
+   if( name_size < 0 )
+   {
+      throw IdComponentException("", "H5Fget_name failed");
+   }
+
+   // Call H5Fget_name again to get the actual file name
+   char* name_C = new char[name_size+1];  // temporary C-string for C API
+   name_size = H5Fget_name(id, name_C, name_size+1);
+
+   // Check for failure again
+   if( name_size < 0 )
+   {
+      throw IdComponentException("", "H5Fget_name failed");
+   }
+
+   // Convert the C file name and return
+   string file_name(name_C);
+   delete []name_C;
+   return(file_name);
+}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent::p_reference (protected)
+// Purpose	Creates a reference to an HDF5 object or a dataset region.
+// Parameters
+//		name - IN: Name of the object to be referenced
+//		dataspace - IN: Dataspace with selection
+//		ref_type - IN: Type of reference; default to \c H5R_DATASET_REGION
+// Return	A reference
+// Exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void* IdComponent::p_reference(const char* name, hid_t space_id, H5R_type_t ref_type) const
+{
+   void *ref=NULL;
+   herr_t ret_value = H5Rcreate(ref, id, name, ref_type, space_id);
+   if (ret_value < 0)
+   {
+      throw IdComponentException("", "H5Rcreate failed");
+   }
+   return(ref);
+}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent::p_get_obj_type (protected)
+// Purpose	Retrieves the type of object that an object reference points to.
+// Parameters
+//		ref      - IN: Reference to query
+//		ref_type - IN: Type of reference to query
+// Return	An object type, which can be one of the following:
+//			H5G_LINK Object is a symbolic link.
+//			H5G_GROUP Object is a group.
+//			H5G_DATASET   Object is a dataset.
+//			H5G_TYPE Object is a named datatype
+// Exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+H5G_obj_t IdComponent::p_get_obj_type(void *ref, H5R_type_t ref_type) const
+{
+   H5G_obj_t obj_type = H5Rget_obj_type(id, ref_type, ref);
+   if (obj_type == H5G_UNKNOWN)
+   {
+      throw IdComponentException("", "H5R_get_obj_type failed");
+   }
+   return(obj_type);
+}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent::p_get_region (protected)
+// Purpose	Retrieves a dataspace with the region pointed to selected.
+// Parameters
+//		ref_type - IN: Type of reference to get region of - default
+//				to H5R_DATASET_REGION
+//		ref      - IN: Reference to get region of
+// Return	Dataspace id
+// Exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+hid_t IdComponent::p_get_region(void *ref, H5R_type_t ref_type) const
+{
+   hid_t space_id = H5Rget_region(id, ref_type, ref);
+   if (space_id < 0)
+   {
+      throw IdComponentException("", "H5Rget_region failed");
+   }
+   return(space_id);
+}
+
+//
+// Local functions used in this class
+//
+
+//--------------------------------------------------------------------------
+// Function:	p_valid_id
+// Purpose:	Verifies that the given id is a valid id so it can be passed
+//		into an H5I C function.
+// Return	true if id is valid, false, otherwise
+// Programmer	Binh-Minh Ribler - May, 2005
+//--------------------------------------------------------------------------
+bool IdComponent::p_valid_id(hid_t obj_id) const
+{
+    H5I_type_t id_type = H5Iget_type(obj_id);
+    if (id_type <= H5I_BADID || id_type >= H5I_NGROUPS)
+	return false;
+    else
+	return true;
+}
+
+//--------------------------------------------------------------------------
+// Function:	IdComponent::inMemFunc
+///\brief	Makes and returns string "<class-name>::<func_name>"
+///\param	func_name - Name of the function where failure occurs
+// Description
+///		Concatenates the class name of this object with the
+///		passed-in function name to create a string that indicates
+///		where the failure occurs.  The class-name is provided by
+///		fromClass().  This string will be used by a base class when
+///		an exception is thrown.
+// Programmer	Binh-Minh Ribler - Oct 10, 2005
+//--------------------------------------------------------------------------
+string IdComponent::inMemFunc(const char* func_name) const
+{
+   string full_name = func_name;
+   full_name.insert(0, "::");
+   full_name.insert(0, fromClass());
+   return (full_name);
+}
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+#ifndef H5_NO_NAMESPACE
+}
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5IdComponent.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5IdComponent.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5IdComponent.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,111 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _IdComponent_H
+#define _IdComponent_H
+
+// IdComponent provides a mechanism to handle
+// reference counting for an identifier of any HDF5 object.
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#ifndef H5_NO_STD
+    using std::string;
+#endif  // H5_NO_STD
+#endif
+
+class H5_DLLCPP IdComponent {
+   public:
+	// Increment reference counter.
+	void incRefCount(hid_t obj_id) const;
+	void incRefCount() const;
+
+	// Decrement reference counter.
+	void decRefCount(hid_t obj_id) const;
+	void decRefCount() const;
+
+	// Get the reference counter to this identifier.
+	int getCounter(hid_t obj_id) const;
+	int getCounter() const;
+
+	// Assignment operator
+	IdComponent& operator=( const IdComponent& rhs );
+
+	// Sets the identifier of this object to a new value.
+	void setId( hid_t new_id );
+
+	// Creates an object to hold an HDF5 identifier.
+	IdComponent( const hid_t h5_id );
+
+	// Copy constructor: makes copy of the original IdComponent object.
+	IdComponent( const IdComponent& original );
+
+	// Gets the value of IdComponent's data member.
+	virtual hid_t getId () const;
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	// Pure virtual function for there are various H5*close for the
+	// subclasses.
+	virtual void close() = 0;
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+	// Makes and returns the string "<class-name>::<func_name>";
+	// <class-name> is returned by fromClass().
+	string inMemFunc(const char* func_name) const;
+
+	// Returns this class name.
+	virtual string fromClass() const {return ("IdComponent");}
+
+	// Destructor
+	virtual ~IdComponent();
+
+   protected:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	hid_t id;	// HDF5 object id
+
+	// Default constructor.
+	IdComponent();
+
+	// Gets the name of the file, in which an HDF5 object belongs.
+#ifndef H5_NO_STD
+	std::string p_get_file_name() const;
+#else
+	string p_get_file_name() const;
+#endif  // H5_NO_STD
+
+	// Gets the id of the H5 file in which the given object is located.
+	hid_t p_get_file_id();
+
+	// Creates a reference to an HDF5 object or a dataset region.
+	void* p_reference(const char* name, hid_t space_id, H5R_type_t ref_type) const;
+
+	// Retrieves the type of object that an object reference points to.
+	H5G_obj_t p_get_obj_type(void *ref, H5R_type_t ref_type) const;
+
+	// Retrieves a dataspace with the region pointed to selected.
+	hid_t p_get_region(void *ref, H5R_type_t ref_type) const;
+
+	// Verifies that the given id is valid.
+	bool p_valid_id(hid_t obj_id) const;
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+}; // end class IdComponent
+
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5Include.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5Include.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5Include.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,37 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Added this line for CC to compile at this time.  Will remove it when
+// the problem of "Multiple declaration for RcsId" is fixed. BMR - 10/30/00
+
+// This problem is removed.  I could replace all #include "H5Include.h"
+// by #include <hdf5.h>, but decide not to. BMR - 3/22/01
+
+#include <hdf5.h>
+
+// Define bool type for platforms that don't support bool yet
+#ifdef BOOL_NOTDEFINED
+#ifdef false
+#undef false
+#endif
+#ifdef true
+#undef true
+#endif
+typedef int bool;
+const bool  false = 0;
+const bool  true  = 1;
+#endif
+
+

Added: packages/hdf5/branches/upstream/current/c++/src/H5IntType.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5IntType.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5IntType.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,139 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+#include "H5AbstractDs.h"
+#include "H5DxferProp.h"
+#include "H5DataSpace.h"
+#include "H5AtomType.h"
+#include "H5IntType.h"
+#include "H5DataSet.h"
+#include "H5PredType.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+
+//--------------------------------------------------------------------------
+// Function:	IntType default constructor
+///\brief	Default constructor: Creates a stub integer datatype
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IntType::IntType() {}
+
+//--------------------------------------------------------------------------
+// Function:	IntType copy constructor
+///\brief	Copy constructor: makes a copy of the original IntType object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IntType::IntType( const IntType& original ) : AtomType( original ) {}
+
+//--------------------------------------------------------------------------
+// Function:	IntType overloaded constructor
+///\brief	Creates a integer type using a predefined type
+///\param	pred_type - IN: Predefined datatype
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IntType::IntType( const PredType& pred_type ) : AtomType()
+{
+   // use DataType::copy to make a copy of this predefined type
+   copy( pred_type );
+}
+
+//--------------------------------------------------------------------------
+// Function:	IntType overloaded constructor
+///\brief	Creates an integer datatype using the id of an existing
+///		datatype.
+///\param	existing_id - IN: Id of an existing datatype
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IntType::IntType( const hid_t existing_id ) : AtomType( existing_id ) {}
+
+//--------------------------------------------------------------------------
+// Function:	IntType overloaded constructor
+///\brief	Gets the integer datatype of the specified dataset.
+///\param	dataset - IN: Dataset that this integer datatype associates with
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IntType::IntType( const DataSet& dataset ) : AtomType()
+{
+   // Calls C function H5Dget_type to get the id of the datatype
+   id = H5Dget_type( dataset.getId() );
+
+   if( id < 0 )
+   {
+      throw DataSetIException("IntType constructor", "H5Dget_type failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	IntType::getSign
+///\brief	Retrieves the sign type for an integer type.
+///\return	Valid sign type
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5T_sign_t IntType::getSign() const
+{
+   H5T_sign_t type_sign = H5Tget_sign( id );  // C routine
+
+   // Returns a valid sign type if no errors
+   if( type_sign == H5T_SGN_ERROR )
+   {
+      throw DataTypeIException("IntType::getSign",
+		"H5Tget_sign failed - returned H5T_SGN_ERROR for the sign type");
+   }
+   return( type_sign );
+}
+
+//--------------------------------------------------------------------------
+// Function:	IntType::getSign
+///\brief	Sets the sign property for an integer type.
+///\param	sign - IN: Sign type
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void IntType::setSign( H5T_sign_t sign ) const
+{
+   // Call C routine to set the sign property
+   herr_t ret_value = H5Tset_sign( id, sign );
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException("IntType::setSign", "H5Tset_sign failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	IntType destructor
+///\brief	Noop destructor.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+IntType::~IntType() {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5IntType.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5IntType.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5IntType.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,54 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5IntType_H
+#define _H5IntType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+class H5_DLLCPP IntType : public AtomType {
+   public:
+	// Creates a integer type using a predefined type
+	IntType(const PredType& pred_type);
+
+	// Gets the integer datatype of the specified dataset
+	IntType(const DataSet& dataset);
+
+	// Retrieves the sign type for an integer type
+	H5T_sign_t getSign() const;
+
+	// Sets the sign proprety for an integer type.
+	void setSign( H5T_sign_t sign ) const;
+
+	// Returns this class name
+	virtual string fromClass () const { return ("IntType"); }
+
+	// Default constructor
+	IntType();
+
+	// Creates a integer datatype using an existing id
+	IntType(const hid_t existing_id);
+
+	// Copy constructor: makes copy of IntType object
+	IntType(const IntType& original);
+
+	// Noop destructor.
+	virtual ~IntType();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5Library.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5Library.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5Library.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,178 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5CppDoc.h"	// included only for Doxygen to generate part of RM
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5Library.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+// This static variable will be set to true when dontAtExit is called
+bool H5Library::need_cleanup = false;
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+//--------------------------------------------------------------------------
+// Function:	H5Library::open
+///\brief	Initializes the HDF5 library.
+///
+///\exception	H5::LibraryIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void H5Library::open()
+{
+   herr_t ret_value = H5open();
+   if( ret_value < 0 )
+   {
+      throw LibraryIException("H5Library::open", "H5open failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Library::close
+///\brief	Flushes all data to disk, closes files, and cleans up memory.
+///
+///\exception	H5::LibraryIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void H5Library::close()
+{
+   herr_t ret_value = H5close();
+   if( ret_value < 0 )
+   {
+      throw LibraryIException("H5Library::close", "H5close failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Library::dontAtExit
+///\brief	Instructs library not to install \c atexit cleanup routine
+///
+///\exception	H5::LibraryIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void H5Library::dontAtExit()
+{
+   herr_t ret_value = H5dont_atexit();
+   if( ret_value < 0 )
+   {
+      throw LibraryIException("H5Library::dontAtExit", "H5dont_atexit failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Library::getLibVersion
+///\brief	Returns the HDF library release number.
+///\param	majnum - OUT: Major version of the library
+///\param	minnum - OUT: Minor version of the library
+///\param	relnum - OUT: Release number of the library
+///\exception	H5::LibraryIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void H5Library::getLibVersion( unsigned& majnum, unsigned& minnum, unsigned& relnum )
+{
+   herr_t ret_value = H5get_libversion( &majnum, &minnum, &relnum );
+   if( ret_value < 0 )
+   {
+      throw LibraryIException("H5Library::getLibVersion", "H5get_libversion failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Library::checkVersion
+///\brief	Verifies that the arguments match the version numbers
+///		compiled into the library
+///\param	majnum - IN: Major version of the library
+///\param	minnum - IN: Minor version of the library
+///\param	relnum - IN: Release number of the library
+///\exception	H5::LibraryIException
+///\par Description
+///		For information about library version, please refer to
+///		the C layer Reference Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5.html#Library-VersCheck
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void H5Library::checkVersion(unsigned majnum, unsigned minnum, unsigned relnum)
+{
+   herr_t ret_value = H5check_version(majnum, minnum, relnum);
+   if( ret_value < 0 )
+   {
+      throw LibraryIException("H5Library::checkVersion", "H5check_version failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Library::garbageCollect
+///\brief	Walks through all the garbage collection routines for the
+///		library, which are supposed to free any unused memory they
+///		have allocated.
+///
+///\exception	H5::LibraryIException
+///\par Description
+///		It is not required that H5Library::garbageCollect be called
+///		at any particular time; it is only necessary in certain
+///		situations, such as when the application has performed actions
+///		that cause the library to allocate many objects. The
+///		application should call H5Library::garbageCollect if it
+///		eventually releases those objects and wants to reduce the
+///		memory used by the library from the peak usage required.
+///\par
+///		The library automatically garbage collects all the free
+///		lists when the application ends.
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void H5Library::garbageCollect()
+{
+   herr_t ret_value = H5garbage_collect();
+   if( ret_value < 0 )
+   {
+      throw LibraryIException("H5Library::garbageCollect", "H5garbage_collect failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Library::setFreeListLimits
+///\brief	Sets limits on the different kinds of free lists.
+///\param	reg_global_lim - IN: Limit on all "regular" free list memory used
+///\param	reg_list_lim   - IN: Limit on memory used in each "regular" free list
+///\param	arr_global_lim - IN: Limit on all "array" free list memory used
+///\param	arr_list_lim   - IN: Limit on memory used in each "array" free list
+///\param	blk_global_lim - IN: Limit on all "block" free list memory used
+///\param	blk_list_lim   - IN: Limit on memory used in each "block" free list
+///\exception	H5::LibraryIException
+///\par Description
+///		Setting a value of -1 for a limit means no limit of that type.
+///		For more information on free list limits, please refer to C
+///		layer Reference Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5.html#Library-SetFreeListLimits
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+void H5Library::setFreeListLimits(int reg_global_lim, int reg_list_lim,
+	int arr_global_lim, int arr_list_lim, int blk_global_lim,
+	int blk_list_lim)
+{
+   herr_t ret_value = H5set_free_list_limits(reg_global_lim, reg_list_lim, arr_global_lim, arr_list_lim, blk_global_lim, blk_list_lim);
+   if( ret_value < 0 )
+   {
+      throw LibraryIException("H5Library::setFreeListLimits", "H5set_free_list_limits failed");
+   }
+}
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5Library.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5Library.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5Library.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,69 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5Library_H
+#define _H5Library_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+#define NOTATEXIT       (-10)   // just in case the HDF5 library use more
+	// negative constants. Note: the solution used for the atexit/global
+	// destructors is not reliable, and desperately needs improvement
+	// It is not even working, inifiteloop message still printed when
+	// calling H5close
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+class H5_DLLCPP H5Library {
+   public:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	static bool need_cleanup; // indicates if H5close should be called
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+	// Initializes the HDF5 library.
+	static void open();
+
+	// Flushes all data to disk, closes files, and cleans up memory.
+	static void close();
+
+	// Instructs library not to install atexit cleanup routine
+	static void dontAtExit();
+
+	// Returns the HDF library release number.
+	static void getLibVersion( unsigned& majnum, unsigned& minnum, unsigned& relnum );
+
+	// Verifies that the arguments match the version numbers compiled
+	// into the library
+	static void checkVersion( unsigned majnum, unsigned minnum, unsigned relnum );
+
+	// Walks through all the garbage collection routines for the library,
+	// which are supposed to free any unused memory they have allocated.
+	static void garbageCollect();
+
+	// Sets limits on the different kinds of free lists.
+	static void setFreeListLimits(int reg_global_lim, int reg_list_lim, int
+	arr_global_lim, int arr_list_lim, int blk_global_lim, int blk_list_lim);
+
+   private:
+	// Default constructor - no instance ever created
+	H5Library() {};
+
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5Object.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5Object.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5Object.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,347 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+#include "H5DataSpace.h"
+#include "H5AbstractDs.h"
+#include "H5Attribute.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+// userAttrOpWrpr simply interfaces between the user's function and the
+// C library function H5Aiterate; used to resolve the different prototype
+// problem.  May be moved to Iterator later.
+extern "C" herr_t userAttrOpWrpr( hid_t loc_id, const char* attr_name, void* op_data )
+{
+   string s_attr_name = string( attr_name );
+#ifdef NO_STATIC_CAST
+   UserData4Aiterate* myData = (UserData4Aiterate *) op_data;
+#else
+   UserData4Aiterate* myData = static_cast <UserData4Aiterate *> (op_data);
+#endif
+   myData->op( *myData->object, s_attr_name, myData->opData );
+   return 0;
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object default constructor (protected)
+// Description
+//		The id is set by IdComponent() but subclass constructor will
+//		set it to a valid HDF5 id.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5Object::H5Object() : IdComponent() {}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object overloaded constructor (protected)
+// Purpose	Creates an H5Object object using the id of an existing HDF5
+// 		object.
+// Parameters	object_id - IN: Id of an existing HDF5 object
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5Object::H5Object( const hid_t object_id ) : IdComponent( object_id ) {}
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+//--------------------------------------------------------------------------
+// Function:	H5Object copy constructor
+///\brief	Copy constructor: makes a copy of the original H5Object
+///		instance.
+///\param	original - IN: H5Object instance to copy
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5Object::H5Object( const H5Object& original ) : IdComponent( original ) {}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object::createAttribute
+///\brief	Creates an attribute for a group, dataset, or named datatype.
+///\param	name - IN: Name of the attribute
+///\param	data_type - IN: Datatype for the attribute
+///\param	data_space - IN: Dataspace for the attribute - only simple
+///		dataspaces are allowed at this time
+///\param	create_plist - IN: Creation property list - default to
+///		PropList::DEFAULT
+///\return	Attribute instance
+///\exception	H5::AttributeIException
+///\par Description
+///		The attribute name specified in \a name must be unique.
+///		Attempting to create an attribute with the same name as an
+///		existing attribute will raise an exception, leaving the
+///		pre-existing attribute intact. To overwrite an existing
+///		attribute with a new attribute of the same name, first
+///		delete the existing one with \c H5Object::removeAttr, then
+///		recreate it with this function.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Attribute H5Object::createAttribute( const char* name, const DataType& data_type, const DataSpace& data_space, const PropList& create_plist ) const
+{
+   hid_t type_id = data_type.getId();
+   hid_t space_id = data_space.getId();
+   hid_t plist_id = create_plist.getId();
+   hid_t attr_id = H5Acreate( id, name, type_id, space_id, plist_id );
+
+   // If the attribute id is valid, create and return the Attribute object
+   if( attr_id > 0 )
+   {
+      Attribute attr( attr_id );
+      return( attr );
+   }
+   else
+   {
+      throw AttributeIException(inMemFunc("createAttribute"), "H5Acreate failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object::createAttribute
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes
+///		a reference to an \c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Attribute H5Object::createAttribute( const string& name, const DataType& data_type, const DataSpace& data_space, const PropList& create_plist ) const
+{
+   return( createAttribute( name.c_str(), data_type, data_space, create_plist ));
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object::openAttribute
+///\brief	Opens an attribute given its name.
+///\param	name - IN: Name of the attribute
+///\return	Attribute instance
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Attribute H5Object::openAttribute( const char* name ) const
+{
+   hid_t attr_id = H5Aopen_name( id, name );
+   if( attr_id > 0 )
+   {
+      Attribute attr( attr_id );
+      return( attr );
+   }
+   else
+   {
+      throw AttributeIException(inMemFunc("openAttribute"), "H5Aopen_name failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object::openAttribute
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes
+///		a reference to an \c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Attribute H5Object::openAttribute( const string& name ) const
+{
+   return( openAttribute( name.c_str()) );
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object::openAttribute
+///\brief	Opens an attribute given its index.
+///\param	idx - IN: Index of the attribute, a 0-based, non-negative integer
+///\return	Attribute instance
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+Attribute H5Object::openAttribute( const unsigned int idx ) const
+{
+   hid_t attr_id = H5Aopen_idx( id, idx );
+   if( attr_id > 0 )
+   {
+      Attribute attr( attr_id );
+      return( attr );
+   }
+   else
+   {
+      throw AttributeIException(inMemFunc("openAttribute"), "H5Aopen_idx failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object::iterateAttrs
+///\brief	Iterates a user's function over all the attributes of an H5
+///		object, which may be a group, dataset or named datatype.
+///\param	user_op - IN: User's function to operate on each attribute
+///\param	idx - IN/OUT: Starting (IN) and ending (OUT) attribute indices
+///\param	op_data - IN: User's data to pass to user's operator function
+///\return	Returned value of the last operator if it was non-zero, or
+///		zero if all attributes were processed
+///\exception	H5::AttributeIException
+///\par Description
+///		For information, please refer to the C layer Reference Manual
+///		at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5A.html#Annot-Iterate
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+int H5Object::iterateAttrs( attr_operator_t user_op, unsigned * idx, void *op_data )
+{
+   // store the user's function and data
+   UserData4Aiterate* userData = new UserData4Aiterate;
+   userData->opData = op_data;
+   userData->idx = idx;
+   userData->op = user_op;
+   userData->object = this;
+
+   // call the C library routine H5Aiterate to iterate the attributes
+   int ret_value = H5Aiterate( id, idx, userAttrOpWrpr, (void *) userData );
+   // release memory
+   delete userData;
+
+   if( ret_value >= 0 )
+      return( ret_value );
+   else  // raise exception when H5Aiterate returns a negative value
+   {
+      throw AttributeIException(inMemFunc("iterateAttrs"), "H5Aiterate failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object::getNumAttrs
+///\brief	Returns the number of attributes attached to this HDF5 object.
+///\return	Number of attributes
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+int H5Object::getNumAttrs() const
+{
+   int num_attrs = H5Aget_num_attrs( id );
+   if( num_attrs < 0 )
+   {
+      throw AttributeIException(inMemFunc("getNumAttrs"),
+		"H5Aget_num_attrs failed - returned negative number of attributes");
+   }
+   else
+      return( num_attrs );
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object::removeAttr
+///\brief	Removes the named attribute from this object.
+///\param	name - IN: Name of the attribute to be removed
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void H5Object::removeAttr( const char* name ) const
+{
+   herr_t ret_value = H5Adelete( id, name );
+   if( ret_value < 0 )
+   {
+      throw AttributeIException(inMemFunc("removeAttr"), "H5Adelete failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object::removeAttr
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes
+///		a reference to an \c std::string for \a name.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void H5Object::removeAttr( const string& name ) const
+{
+   removeAttr( name.c_str() );
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object::renameAttr
+///\brief	Renames the named attribute from this object.
+///\param	oldname - IN: Name of the attribute to be renamed
+///\param	newname - IN: New name ame of the attribute
+///\exception	H5::AttributeIException
+// Programmer	Binh-Minh Ribler - Mar, 2005
+//--------------------------------------------------------------------------
+void H5Object::renameAttr(const char* oldname, const char* newname) const
+{
+   herr_t ret_value = H5Arename(id, oldname, newname);
+   if (ret_value < 0)
+   {
+      throw AttributeIException(inMemFunc("renameAttr"), "H5Arename failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object::renameAttr
+///\brief	This is an overloaded member function, provided for convenience.
+///		It differs from the above function in that it takes
+///		a reference to an \c std::string for the names.
+// Programmer	Binh-Minh Ribler - Mar, 2005
+//--------------------------------------------------------------------------
+void H5Object::renameAttr(const string& oldname, const string& newname) const
+{
+   renameAttr (oldname.c_str(), newname.c_str());
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object::flush
+///\brief	Flushes all buffers associated with a file to disk.
+///\param	scope - IN: Specifies the scope of the flushing action,
+///		which can be either of these values:
+///		\li \c H5F_SCOPE_GLOBAL - Flushes the entire virtual file
+///		\li \c H5F_SCOPE_LOCAL - Flushes only the specified file
+///\exception	H5::AttributeIException
+///\par Description
+///		This object is used to identify the file to be flushed.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void H5Object::flush(H5F_scope_t scope ) const
+{
+   herr_t ret_value = H5Fflush( id, scope );
+   if( ret_value < 0 )
+   {
+      throw FileIException(inMemFunc("flush"), "H5Fflush failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object::getFileName
+///\brief	Gets the name of the file, in which this HDF5 object belongs.
+///\return	File name
+///\exception	H5::IdComponentException
+// Programmer	Binh-Minh Ribler - Jul, 2004
+//--------------------------------------------------------------------------
+string H5Object::getFileName() const
+{
+   try {
+      return(p_get_file_name());
+   }
+   catch (IdComponentException E) {
+      throw FileIException(inMemFunc("getFileName"), E.getDetailMsg());
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	H5Object destructor
+///\brief	Noop destructor.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5Object::~H5Object() {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5Object.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5Object.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5Object.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,103 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5Object_H
+#define _H5Object_H
+
+#include "H5Classes.h"		// constains forward class declarations
+
+// H5Object is a baseclass.  It has these subclasses:
+// Group, AbstractDs, and DataType.
+// AbstractDs, in turn, has subclasses DataSet and Attribute.
+// DataType, in turn, has several specific datatypes as subclasses.
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+class H5_DLLCPP H5Object;  // forward declaration for UserData4Aiterate
+
+// Define the operator function pointer for H5Aiterate().
+typedef void (*attr_operator_t)( H5Object& loc/*in*/,
+				 const string attr_name/*in*/,
+				 void *operator_data/*in,out*/);
+
+class UserData4Aiterate { // user data for attribute iteration
+   public:
+	unsigned int* idx;
+	attr_operator_t op;
+	void* opData;
+	H5Object* object;
+};
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+// The above part is being moved into Iterator, but not completed
+
+class H5_DLLCPP H5Object : public IdComponent {
+   public:
+	// Creates an attribute for a group, dataset, or named datatype.
+	// PropList is currently not used, so always be default.
+	Attribute createAttribute( const char* name, const DataType& type, const DataSpace& space, const PropList& create_plist = PropList::DEFAULT ) const;
+	Attribute createAttribute( const string& name, const DataType& type, const DataSpace& space, const PropList& create_plist = PropList::DEFAULT ) const;
+
+	// Opens an attribute given its name.
+	Attribute openAttribute( const char* name ) const;
+	Attribute openAttribute( const string& name ) const;
+
+	// Opens an attribute given its index.
+	Attribute openAttribute( const unsigned int idx ) const;
+
+	// Flushes all buffers associated with this object to disk
+	void flush( H5F_scope_t scope ) const;
+
+	// Gets the name of the file, in which this HDF5 object belongs.
+	string getFileName() const;
+
+	// Determines the number of attributes attached to this object.
+	int getNumAttrs() const;
+
+	// Iterate user's function over the attributes of this object
+	int iterateAttrs( attr_operator_t user_op, unsigned* idx = NULL, void* op_data = NULL );
+
+	// Removes the named attribute from this object.
+	void removeAttr( const char* name ) const;
+	void removeAttr( const string& name ) const;
+
+	// Renames the attribute to a new name.
+	void renameAttr(const char* oldname, const char* newname) const;
+	void renameAttr(const string& oldname, const string& newname) const;
+
+	// Copy constructor: makes copy of an H5Object object.
+	H5Object(const H5Object& original);
+
+	// Noop destructor.
+	virtual ~H5Object();
+
+   protected:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	// Default constructor
+	H5Object();
+
+	// Creates a copy of an existing object giving the object id
+	H5Object( const hid_t object_id );
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+}; /* end class H5Object */
+
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5PredType.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5PredType.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5PredType.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,537 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+#include "H5AtomType.h"
+#include "H5Library.h"
+#include "H5PredType.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+//--------------------------------------------------------------------------
+// Function:	PredType overloaded constructor
+///\brief	Creates a PredType object using the id of an existing
+///		predefined datatype.
+///\param	predtype_id - IN: Id of a predefined datatype
+// Description
+// 		This constructor creates a predefined datatype, so it sets
+// 		DataType::is_predtype to true.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+PredType::PredType( const hid_t predtype_id ) : AtomType( predtype_id )
+{
+   is_predtype = true;
+}
+
+//--------------------------------------------------------------------------
+// Function:	PredType default constructor
+///\brief	Default constructor: Creates a stub predefined datatype
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+PredType::PredType() : AtomType() {}
+
+//--------------------------------------------------------------------------
+// Function:	PredType copy constructor
+///\brief	Copy constructor: makes a copy of the original PredType object.
+///\param	original - IN: PredType instance to copy
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+PredType::PredType( const PredType& original ) : AtomType( original ) {}
+
+const PredType PredType::NotAtexit;	// only for atexit/global dest. problem
+
+// Definition of pre-defined types
+// Note: the parameter E_xxxx_yyyy is the enum value that represents
+// the corresponding HDF5 predefined type H5T_xxxx_yyyy.  This enum value
+// is stored in PredType::id since it is a PredType object id, in a way.
+// In addition, this storage makes things safely simpler.  When a PredType
+// object is used, the virtual PredType::getId will base on the enum
+// value to return the correct HDF5 predefined type id.
+
+const PredType PredType::C_S1( E_C_S1 );
+const PredType PredType::FORTRAN_S1( E_FORTRAN_S1 );
+
+const PredType PredType::STD_I8BE( E_STD_I8BE );
+const PredType PredType::STD_I8LE( E_STD_I8LE );
+const PredType PredType::STD_I16BE( E_STD_I16BE );
+const PredType PredType::STD_I16LE( E_STD_I16LE );
+const PredType PredType::STD_I32BE( E_STD_I32BE );
+const PredType PredType::STD_I32LE( E_STD_I32LE );
+const PredType PredType::STD_I64BE( E_STD_I64BE );
+const PredType PredType::STD_I64LE( E_STD_I64LE );
+const PredType PredType::STD_U8BE( E_STD_U8BE );
+const PredType PredType::STD_U8LE( E_STD_U8LE );
+const PredType PredType::STD_U16BE( E_STD_U16BE );
+const PredType PredType::STD_U16LE( E_STD_U16LE );
+const PredType PredType::STD_U32BE( E_STD_U32BE );
+const PredType PredType::STD_U32LE( E_STD_U32LE );
+const PredType PredType::STD_U64BE( E_STD_U64BE );
+const PredType PredType::STD_U64LE( E_STD_U64LE );
+const PredType PredType::STD_B8BE( E_STD_B8BE );
+const PredType PredType::STD_B8LE( E_STD_B8LE );
+
+const PredType PredType::STD_B16BE( E_STD_B16BE );
+const PredType PredType::STD_B16LE( E_STD_B16LE );
+const PredType PredType::STD_B32BE( E_STD_B32BE );
+const PredType PredType::STD_B32LE( E_STD_B32LE );
+const PredType PredType::STD_B64BE( E_STD_B64BE );
+const PredType PredType::STD_B64LE( E_STD_B64LE );
+const PredType PredType::STD_REF_OBJ( E_STD_REF_OBJ );
+const PredType PredType::STD_REF_DSETREG( E_STD_REF_DSETREG );
+
+const PredType PredType::IEEE_F32BE( E_IEEE_F32BE );
+const PredType PredType::IEEE_F32LE( E_IEEE_F32LE );
+const PredType PredType::IEEE_F64BE( E_IEEE_F64BE );
+const PredType PredType::IEEE_F64LE( E_IEEE_F64LE );
+
+const PredType PredType::UNIX_D32BE( E_UNIX_D32BE );
+const PredType PredType::UNIX_D32LE( E_UNIX_D32LE );
+const PredType PredType::UNIX_D64BE( E_UNIX_D64BE );
+const PredType PredType::UNIX_D64LE( E_UNIX_D64LE );
+
+const PredType PredType::INTEL_I8( E_INTEL_I8 );
+const PredType PredType::INTEL_I16( E_INTEL_I16 );
+const PredType PredType::INTEL_I32( E_INTEL_I32 );
+const PredType PredType::INTEL_I64( E_INTEL_I64 );
+const PredType PredType::INTEL_U8( E_INTEL_U8 );
+const PredType PredType::INTEL_U16( E_INTEL_U16 );
+const PredType PredType::INTEL_U32( E_INTEL_U32 );
+const PredType PredType::INTEL_U64( E_INTEL_U64 );
+const PredType PredType::INTEL_B8( E_INTEL_B8 );
+const PredType PredType::INTEL_B16( E_INTEL_B16 );
+const PredType PredType::INTEL_B32( E_INTEL_B32 );
+const PredType PredType::INTEL_B64( E_INTEL_B64 );
+const PredType PredType::INTEL_F32( E_INTEL_F32 );
+const PredType PredType::INTEL_F64( E_INTEL_F64 );
+
+const PredType PredType::ALPHA_I8( E_ALPHA_I8 );
+const PredType PredType::ALPHA_I16( E_ALPHA_I16 );
+const PredType PredType::ALPHA_I32( E_ALPHA_I32 );
+const PredType PredType::ALPHA_I64( E_ALPHA_I64 );
+const PredType PredType::ALPHA_U8( E_ALPHA_U8 );
+const PredType PredType::ALPHA_U16( E_ALPHA_U16 );
+const PredType PredType::ALPHA_U32( E_ALPHA_U32 );
+const PredType PredType::ALPHA_U64( E_ALPHA_U64 );
+const PredType PredType::ALPHA_B8( E_ALPHA_B8 );
+const PredType PredType::ALPHA_B16( E_ALPHA_B16 );
+const PredType PredType::ALPHA_B32( E_ALPHA_B32 );
+const PredType PredType::ALPHA_B64( E_ALPHA_B64 );
+const PredType PredType::ALPHA_F32( E_ALPHA_F32 );
+const PredType PredType::ALPHA_F64( E_ALPHA_F64 );
+
+const PredType PredType::MIPS_I8( E_MIPS_I8 );
+const PredType PredType::MIPS_I16( E_MIPS_I16 );
+const PredType PredType::MIPS_I32( E_MIPS_I32 );
+const PredType PredType::MIPS_I64( E_MIPS_I64 );
+const PredType PredType::MIPS_U8( E_MIPS_U8 );
+const PredType PredType::MIPS_U16( E_MIPS_U16 );
+const PredType PredType::MIPS_U32( E_MIPS_U32 );
+const PredType PredType::MIPS_U64( E_MIPS_U64 );
+const PredType PredType::MIPS_B8( E_MIPS_B8 );
+const PredType PredType::MIPS_B16( E_MIPS_B16 );
+const PredType PredType::MIPS_B32( E_MIPS_B32 );
+const PredType PredType::MIPS_B64( E_MIPS_B64 );
+const PredType PredType::MIPS_F32( E_MIPS_F32 );
+const PredType PredType::MIPS_F64( E_MIPS_F64 );
+
+const PredType PredType::NATIVE_CHAR( E_NATIVE_CHAR );
+const PredType PredType::NATIVE_INT( E_NATIVE_INT );
+const PredType PredType::NATIVE_FLOAT( E_NATIVE_FLOAT );
+const PredType PredType::NATIVE_SCHAR( E_NATIVE_SCHAR );
+const PredType PredType::NATIVE_UCHAR( E_NATIVE_UCHAR );
+const PredType PredType::NATIVE_SHORT( E_NATIVE_SHORT );
+const PredType PredType::NATIVE_USHORT( E_NATIVE_USHORT );
+const PredType PredType::NATIVE_UINT( E_NATIVE_UINT );
+const PredType PredType::NATIVE_LONG( E_NATIVE_LONG );
+const PredType PredType::NATIVE_ULONG( E_NATIVE_ULONG );
+const PredType PredType::NATIVE_LLONG( E_NATIVE_LLONG );
+const PredType PredType::NATIVE_ULLONG( E_NATIVE_ULLONG );
+const PredType PredType::NATIVE_DOUBLE( E_NATIVE_DOUBLE );
+const PredType PredType::NATIVE_LDOUBLE( E_NATIVE_LDOUBLE );
+const PredType PredType::NATIVE_B8( E_NATIVE_B8 );
+const PredType PredType::NATIVE_B16( E_NATIVE_B16 );
+const PredType PredType::NATIVE_B32( E_NATIVE_B32 );
+const PredType PredType::NATIVE_B64( E_NATIVE_B64 );
+const PredType PredType::NATIVE_OPAQUE( E_NATIVE_OPAQUE );
+const PredType PredType::NATIVE_HSIZE( E_NATIVE_HSIZE );
+const PredType PredType::NATIVE_HSSIZE( E_NATIVE_HSSIZE );
+const PredType PredType::NATIVE_HERR( E_NATIVE_HERR );
+const PredType PredType::NATIVE_HBOOL( E_NATIVE_HBOOL );
+
+const PredType PredType::NATIVE_INT8( E_NATIVE_INT8 );
+const PredType PredType::NATIVE_UINT8( E_NATIVE_UINT8 );
+const PredType PredType::NATIVE_INT_LEAST8( E_NATIVE_INT_LEAST8 );
+const PredType PredType::NATIVE_UINT_LEAST8( E_NATIVE_UINT_LEAST8 );
+const PredType PredType::NATIVE_INT_FAST8( E_NATIVE_INT_FAST8 );
+const PredType PredType::NATIVE_UINT_FAST8( E_NATIVE_UINT_FAST8 );
+
+const PredType PredType::NATIVE_INT16( E_NATIVE_INT16 );
+const PredType PredType::NATIVE_UINT16( E_NATIVE_UINT16 );
+const PredType PredType::NATIVE_INT_LEAST16( E_NATIVE_INT_LEAST16 );
+const PredType PredType::NATIVE_UINT_LEAST16( E_NATIVE_UINT_LEAST16 );
+const PredType PredType::NATIVE_INT_FAST16( E_NATIVE_INT_FAST16 );
+const PredType PredType::NATIVE_UINT_FAST16( E_NATIVE_UINT_FAST16 );
+
+const PredType PredType::NATIVE_INT32( E_NATIVE_INT32 );
+const PredType PredType::NATIVE_UINT32( E_NATIVE_UINT32 );
+const PredType PredType::NATIVE_INT_LEAST32( E_NATIVE_INT_LEAST32 );
+const PredType PredType::NATIVE_UINT_LEAST32( E_NATIVE_UINT_LEAST32 );
+const PredType PredType::NATIVE_INT_FAST32( E_NATIVE_INT_FAST32 );
+const PredType PredType::NATIVE_UINT_FAST32( E_NATIVE_UINT_FAST32 );
+
+const PredType PredType::NATIVE_INT64( E_NATIVE_INT64 );
+const PredType PredType::NATIVE_UINT64( E_NATIVE_UINT64 );
+const PredType PredType::NATIVE_INT_LEAST64( E_NATIVE_INT_LEAST64 );
+const PredType PredType::NATIVE_UINT_LEAST64( E_NATIVE_UINT_LEAST64 );
+const PredType PredType::NATIVE_INT_FAST64( E_NATIVE_INT_FAST64 );
+const PredType PredType::NATIVE_UINT_FAST64( E_NATIVE_UINT_FAST64 );
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+//--------------------------------------------------------------------------
+// Function:	PredType::operator=
+///\brief	Assignment operator.
+///\param	rhs - IN: Reference to the predefined datatype
+///\return	Reference to PredType instance
+///\exception	H5::DataTypeIException
+// Description
+//		Makes a copy of the type on the right hand side and stores
+//		the new id in the left hand side object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+PredType& PredType::operator=( const PredType& rhs )
+{
+   copy(rhs);
+   return(*this);
+}
+
+//--------------------------------------------------------------------------
+// Function:	PredType::getId
+///\brief	Returns the HDF5 predefined type id.
+///\return	HDF5 predefined type id or INVALID
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+hid_t PredType::getId() const
+{
+    switch( id ) {
+	case E_C_S1:
+	    return( H5T_C_S1 );
+	case E_FORTRAN_S1:
+	    return( H5T_FORTRAN_S1 );
+
+	case E_STD_I8BE:
+	    return( H5T_STD_I8BE );
+	case E_STD_I8LE:
+	    return( H5T_STD_I8LE );
+	case E_STD_I16BE:
+	    return( H5T_STD_I16BE );
+	case E_STD_I16LE:
+	    return( H5T_STD_I16LE );
+	case E_STD_I32BE:
+	    return( H5T_STD_I32BE );
+	case E_STD_I32LE:
+	    return( H5T_STD_I32LE );
+	case E_STD_I64BE:
+	    return( H5T_STD_I64BE );
+	case E_STD_I64LE:
+	    return( H5T_STD_I64LE );
+	case E_STD_U8BE:
+	    return( H5T_STD_U8BE );
+	case E_STD_U8LE:
+	    return( H5T_STD_U8LE );
+	case E_STD_U16BE:
+	    return( H5T_STD_U16BE );
+	case E_STD_U16LE:
+	    return( H5T_STD_U16LE );
+	case E_STD_U32BE:
+	    return( H5T_STD_U32BE );
+	case E_STD_U32LE:
+	    return( H5T_STD_U32LE );
+	case E_STD_U64BE:
+	    return( H5T_STD_U64BE );
+	case E_STD_U64LE:
+	    return( H5T_STD_U64LE );
+	case E_STD_B8BE:
+	    return( H5T_STD_B8BE );
+	case E_STD_B8LE:
+	    return( H5T_STD_B8LE );
+
+	case E_STD_B16BE:
+	    return( H5T_STD_B16BE );
+	case E_STD_B16LE:
+	    return( H5T_STD_B16LE );
+	case E_STD_B32BE:
+	    return( H5T_STD_B32BE );
+	case E_STD_B32LE:
+	    return( H5T_STD_B32LE );
+	case E_STD_B64BE:
+	    return( H5T_STD_B64BE );
+	case E_STD_B64LE:
+	    return( H5T_STD_B64LE );
+	case E_STD_REF_OBJ:
+	    return( H5T_STD_REF_OBJ );
+	case E_STD_REF_DSETREG:
+	    return( H5T_STD_REF_DSETREG );
+
+	case E_IEEE_F32BE:
+	    return( H5T_IEEE_F32BE );
+	case E_IEEE_F32LE:
+	    return( H5T_IEEE_F32LE );
+	case E_IEEE_F64BE:
+	    return( H5T_IEEE_F64BE );
+	case E_IEEE_F64LE:
+	    return( H5T_IEEE_F64LE );
+
+	case E_UNIX_D32BE:
+	    return( H5T_UNIX_D32BE );
+	case E_UNIX_D32LE:
+	    return( H5T_UNIX_D32LE );
+	case E_UNIX_D64BE:
+	    return( H5T_UNIX_D64BE );
+	case E_UNIX_D64LE:
+	    return( H5T_UNIX_D64LE );
+
+	case E_INTEL_I8:
+	    return( H5T_INTEL_I8 );
+	case E_INTEL_I16:
+	    return( H5T_INTEL_I16 );
+	case E_INTEL_I32:
+	    return( H5T_INTEL_I32 );
+	case E_INTEL_I64:
+	    return( H5T_INTEL_I64 );
+	case E_INTEL_U8:
+	    return( H5T_INTEL_U8 );
+	case E_INTEL_U16:
+	    return( H5T_INTEL_U16 );
+	case E_INTEL_U32:
+	    return( H5T_INTEL_U32 );
+	case E_INTEL_U64:
+	    return( H5T_INTEL_U64 );
+	case E_INTEL_B8:
+	    return( H5T_INTEL_B8 );
+	case E_INTEL_B16:
+	    return( H5T_INTEL_B16 );
+	case E_INTEL_B32:
+	    return( H5T_INTEL_B32 );
+	case E_INTEL_B64:
+	    return( H5T_INTEL_B64 );
+	case E_INTEL_F32:
+	    return( H5T_INTEL_F32 );
+	case E_INTEL_F64:
+	    return( H5T_INTEL_F64 );
+
+	case E_ALPHA_I8:
+	    return( H5T_ALPHA_I8 );
+	case E_ALPHA_I16:
+	    return( H5T_ALPHA_I16 );
+	case E_ALPHA_I32:
+	    return( H5T_ALPHA_I32 );
+	case E_ALPHA_I64:
+	    return( H5T_ALPHA_I64 );
+	case E_ALPHA_U8:
+	    return( H5T_ALPHA_U8 );
+	case E_ALPHA_U16:
+	    return( H5T_ALPHA_U16 );
+	case E_ALPHA_U32:
+	    return( H5T_ALPHA_U32 );
+	case E_ALPHA_U64:
+	    return( H5T_ALPHA_U64 );
+	case E_ALPHA_B8:
+	    return( H5T_ALPHA_B8 );
+	case E_ALPHA_B16:
+	    return( H5T_ALPHA_B16 );
+	case E_ALPHA_B32:
+	    return( H5T_ALPHA_B32 );
+	case E_ALPHA_B64:
+	    return( H5T_ALPHA_B64 );
+	case E_ALPHA_F32:
+	    return( H5T_ALPHA_F32 );
+	case E_ALPHA_F64:
+	    return( H5T_ALPHA_F64 );
+
+	case E_MIPS_I8:
+	    return( H5T_MIPS_I8 );
+	case E_MIPS_I16:
+	    return( H5T_MIPS_I16 );
+	case E_MIPS_I32:
+	    return( H5T_MIPS_I32 );
+	case E_MIPS_I64:
+	    return( H5T_MIPS_I64 );
+	case E_MIPS_U8:
+	    return( H5T_MIPS_U8 );
+	case E_MIPS_U16:
+	    return( H5T_MIPS_U16 );
+	case E_MIPS_U32:
+	    return( H5T_MIPS_U32 );
+	case E_MIPS_U64:
+	    return( H5T_MIPS_U64 );
+	case E_MIPS_B8:
+	    return( H5T_MIPS_B8 );
+	case E_MIPS_B16:
+	    return( H5T_MIPS_B16 );
+	case E_MIPS_B32:
+	    return( H5T_MIPS_B32 );
+	case E_MIPS_B64:
+	    return( H5T_MIPS_B64 );
+	case E_MIPS_F32:
+	    return( H5T_MIPS_F32 );
+	case E_MIPS_F64:
+	    return( H5T_MIPS_F64 );
+
+	case E_NATIVE_CHAR:
+	    return( H5T_NATIVE_CHAR );
+	case E_NATIVE_INT:
+	    return( H5T_NATIVE_INT );
+	case E_NATIVE_FLOAT:
+	    return( H5T_NATIVE_FLOAT );
+	case E_NATIVE_SCHAR:
+	    return( H5T_NATIVE_SCHAR );
+	case E_NATIVE_UCHAR:
+	    return( H5T_NATIVE_UCHAR );
+	case E_NATIVE_SHORT:
+	    return( H5T_NATIVE_SHORT );
+	case E_NATIVE_USHORT:
+	    return( H5T_NATIVE_USHORT );
+	case E_NATIVE_UINT:
+	    return( H5T_NATIVE_UINT );
+	case E_NATIVE_LONG:
+	    return( H5T_NATIVE_LONG );
+	case E_NATIVE_ULONG:
+	    return( H5T_NATIVE_ULONG );
+	case E_NATIVE_LLONG:
+	    return( H5T_NATIVE_LLONG );
+	case E_NATIVE_ULLONG:
+	    return( H5T_NATIVE_ULLONG );
+	case E_NATIVE_DOUBLE:
+	    return( H5T_NATIVE_DOUBLE );
+	case E_NATIVE_LDOUBLE:
+	    return( H5T_NATIVE_LDOUBLE );
+	case E_NATIVE_B8:
+	    return( H5T_NATIVE_B8 );
+	case E_NATIVE_B16:
+	    return( H5T_NATIVE_B16 );
+	case E_NATIVE_B32:
+	    return( H5T_NATIVE_B32 );
+	case E_NATIVE_B64:
+	    return( H5T_NATIVE_B64 );
+	case E_NATIVE_OPAQUE:
+	    return( H5T_NATIVE_OPAQUE );
+	case E_NATIVE_HSIZE:
+	    return( H5T_NATIVE_HSIZE );
+	case E_NATIVE_HSSIZE:
+	    return( H5T_NATIVE_HSSIZE );
+	case E_NATIVE_HERR:
+	    return( H5T_NATIVE_HERR );
+	case E_NATIVE_HBOOL:
+	    return( H5T_NATIVE_HBOOL );
+
+	case E_NATIVE_INT8:
+	    return( H5T_NATIVE_INT8 );
+	case E_NATIVE_UINT8:
+	    return( H5T_NATIVE_UINT8 );
+	case E_NATIVE_INT_LEAST8:
+	    return( H5T_NATIVE_INT_LEAST8 );
+	case E_NATIVE_UINT_LEAST8:
+	    return( H5T_NATIVE_UINT_LEAST8 );
+	case E_NATIVE_INT_FAST8:
+	    return( H5T_NATIVE_INT_FAST8 );
+	case E_NATIVE_UINT_FAST8:
+	    return( H5T_NATIVE_UINT_FAST8 );
+
+	case E_NATIVE_INT16:
+	    return( H5T_NATIVE_INT16 );
+	case E_NATIVE_UINT16:
+	    return( H5T_NATIVE_UINT16 );
+	case E_NATIVE_INT_LEAST16:
+	    return( H5T_NATIVE_INT_LEAST16 );
+	case E_NATIVE_UINT_LEAST16:
+	    return( H5T_NATIVE_UINT_LEAST16 );
+	case E_NATIVE_INT_FAST16:
+	    return( H5T_NATIVE_INT_FAST16 );
+	case E_NATIVE_UINT_FAST16:
+	    return( H5T_NATIVE_UINT_FAST16 );
+
+	case E_NATIVE_INT32:
+	    return( H5T_NATIVE_INT32 );
+	case E_NATIVE_UINT32:
+	    return( H5T_NATIVE_UINT32 );
+	case E_NATIVE_INT_LEAST32:
+	    return( H5T_NATIVE_INT_LEAST32 );
+	case E_NATIVE_UINT_LEAST32:
+	    return( H5T_NATIVE_UINT_LEAST32 );
+	case E_NATIVE_INT_FAST32:
+	    return( H5T_NATIVE_INT_FAST32 );
+	case E_NATIVE_UINT_FAST32:
+	    return( H5T_NATIVE_UINT_FAST32 );
+
+	case E_NATIVE_INT64:
+	    return( H5T_NATIVE_INT64 );
+	case E_NATIVE_UINT64:
+	    return( H5T_NATIVE_UINT64 );
+	case E_NATIVE_INT_LEAST64:
+	    return( H5T_NATIVE_INT_LEAST64 );
+	case E_NATIVE_UINT_LEAST64:
+	    return( H5T_NATIVE_UINT_LEAST64 );
+	case E_NATIVE_INT_FAST64:
+	    return( H5T_NATIVE_INT_FAST64 );
+	case E_NATIVE_UINT_FAST64:
+	    return( H5T_NATIVE_UINT_FAST64 );
+
+	default:
+	    return( INVALID );
+    }   // end switch
+}   // end of getId()
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+// These dummy functions do not inherit from DataType - they'll
+// throw an DataTypeIException if invoked.
+void PredType::commit( H5Object& loc, const char* name )
+{
+   throw DataTypeIException("PredType::commit", "Attempting to commit a predefined datatype.  This operation is invalid" );
+}
+
+void PredType::commit( H5Object& loc, const string& name )
+{
+   commit( loc, name.c_str());
+}
+
+bool PredType::committed()
+{
+   throw DataTypeIException("PredType::committed", "Error: Attempting to check for commit status on a predefined datatype." );
+   return (0);
+}
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+// Default destructor
+//--------------------------------------------------------------------------
+// Function:	PredType destructor
+///\brief	Noop destructor.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+PredType::~PredType() {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5PredType.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5PredType.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5PredType.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,259 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// PredType holds the definition of all the HDF5 predefined datatypes.
+// These types can only be made copy of, not created by H5Tcreate or
+// closed by H5Tclose.  They are treated as constants.
+/////////////////////////////////////////////////////////////////////
+
+#ifndef _H5PredType_H
+#define _H5PredType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP PredType : public AtomType {
+   public:
+	// Returns this class name
+	virtual string fromClass () const { return ("PredType"); }
+
+	// Makes a copy of the predefined type and stores the new
+	// id in the left hand side object.
+	PredType& operator=( const PredType& rhs );
+
+	// Copy constructor - makes copy of the original object
+	PredType( const PredType& original );
+
+	// Returns the HDF5 predefined type id.
+	virtual hid_t getId() const;
+
+	// Noop destructor
+	virtual ~PredType();
+
+	// Declaration of predefined types; their definition is in H5PredType.cpp
+	static const PredType STD_I8BE;
+	static const PredType STD_I8LE;
+	static const PredType STD_I16BE;
+	static const PredType STD_I16LE;
+	static const PredType STD_I32BE;
+	static const PredType STD_I32LE;
+	static const PredType STD_I64BE;
+	static const PredType STD_I64LE;
+	static const PredType STD_U8BE;
+	static const PredType STD_U8LE;
+	static const PredType STD_U16BE;
+	static const PredType STD_U16LE;
+	static const PredType STD_U32BE;
+	static const PredType STD_U32LE;
+	static const PredType STD_U64BE;
+	static const PredType STD_U64LE;
+	static const PredType STD_B8BE;
+	static const PredType STD_B8LE;
+	static const PredType STD_B16BE;
+	static const PredType STD_B16LE;
+	static const PredType STD_B32BE;
+	static const PredType STD_B32LE;
+	static const PredType STD_B64BE;
+	static const PredType STD_B64LE;
+	static const PredType STD_REF_OBJ;
+	static const PredType STD_REF_DSETREG;
+
+	static const PredType C_S1;
+	static const PredType FORTRAN_S1;
+
+	static const PredType IEEE_F32BE;
+	static const PredType IEEE_F32LE;
+	static const PredType IEEE_F64BE;
+	static const PredType IEEE_F64LE;
+
+	static const PredType UNIX_D32BE;
+	static const PredType UNIX_D32LE;
+	static const PredType UNIX_D64BE;
+	static const PredType UNIX_D64LE;
+
+	static const PredType INTEL_I8;
+	static const PredType INTEL_I16;
+	static const PredType INTEL_I32;
+	static const PredType INTEL_I64;
+	static const PredType INTEL_U8;
+	static const PredType INTEL_U16;
+	static const PredType INTEL_U32;
+	static const PredType INTEL_U64;
+	static const PredType INTEL_B8;
+	static const PredType INTEL_B16;
+	static const PredType INTEL_B32;
+	static const PredType INTEL_B64;
+	static const PredType INTEL_F32;
+	static const PredType INTEL_F64;
+
+	static const PredType ALPHA_I8;
+	static const PredType ALPHA_I16;
+	static const PredType ALPHA_I32;
+	static const PredType ALPHA_I64;
+	static const PredType ALPHA_U8;
+	static const PredType ALPHA_U16;
+	static const PredType ALPHA_U32;
+	static const PredType ALPHA_U64;
+	static const PredType ALPHA_B8;
+	static const PredType ALPHA_B16;
+	static const PredType ALPHA_B32;
+	static const PredType ALPHA_B64;
+	static const PredType ALPHA_F32;
+	static const PredType ALPHA_F64;
+
+	static const PredType MIPS_I8;
+	static const PredType MIPS_I16;
+	static const PredType MIPS_I32;
+	static const PredType MIPS_I64;
+	static const PredType MIPS_U8;
+	static const PredType MIPS_U16;
+	static const PredType MIPS_U32;
+	static const PredType MIPS_U64;
+	static const PredType MIPS_B8;
+	static const PredType MIPS_B16;
+	static const PredType MIPS_B32;
+	static const PredType MIPS_B64;
+	static const PredType MIPS_F32;
+	static const PredType MIPS_F64;
+
+	static const PredType NATIVE_CHAR;
+	static const PredType NATIVE_SCHAR;
+	static const PredType NATIVE_UCHAR;
+	static const PredType NATIVE_SHORT;
+	static const PredType NATIVE_USHORT;
+	static const PredType NATIVE_INT;
+	static const PredType NATIVE_UINT;
+	static const PredType NATIVE_LONG;
+	static const PredType NATIVE_ULONG;
+	static const PredType NATIVE_LLONG;
+	static const PredType NATIVE_ULLONG;
+	static const PredType NATIVE_FLOAT;
+	static const PredType NATIVE_DOUBLE;
+	static const PredType NATIVE_LDOUBLE;
+	static const PredType NATIVE_B8;
+	static const PredType NATIVE_B16;
+	static const PredType NATIVE_B32;
+	static const PredType NATIVE_B64;
+	static const PredType NATIVE_OPAQUE;
+	static const PredType NATIVE_HSIZE;
+	static const PredType NATIVE_HSSIZE;
+	static const PredType NATIVE_HERR;
+	static const PredType NATIVE_HBOOL;
+
+	static const PredType NATIVE_INT8;
+	static const PredType NATIVE_UINT8;
+	static const PredType NATIVE_INT_LEAST8;
+	static const PredType NATIVE_UINT_LEAST8;
+	static const PredType NATIVE_INT_FAST8;
+	static const PredType NATIVE_UINT_FAST8;
+
+	static const PredType NATIVE_INT16;
+	static const PredType NATIVE_UINT16;
+	static const PredType NATIVE_INT_LEAST16;
+	static const PredType NATIVE_UINT_LEAST16;
+	static const PredType NATIVE_INT_FAST16;
+	static const PredType NATIVE_UINT_FAST16;
+
+	static const PredType NATIVE_INT32;
+	static const PredType NATIVE_UINT32;
+	static const PredType NATIVE_INT_LEAST32;
+	static const PredType NATIVE_UINT_LEAST32;
+	static const PredType NATIVE_INT_FAST32;
+	static const PredType NATIVE_UINT_FAST32;
+
+	static const PredType NATIVE_INT64;
+	static const PredType NATIVE_UINT64;
+	static const PredType NATIVE_INT_LEAST64;
+	static const PredType NATIVE_UINT_LEAST64;
+	static const PredType NATIVE_INT_FAST64;
+	static const PredType NATIVE_UINT_FAST64;
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	// These dummy functions do not inherit from DataType - they'll
+	// throw a DataTypeIException if invoked.
+	void commit( H5Object& loc, const string& name );
+	void commit( H5Object& loc, const char* name );
+	bool committed();
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+   private:
+	// added this to work around the atexit/global destructor problem
+	// temporarily - it'll prevent the use of atexit to clean up
+	static const PredType NotAtexit;	// not working yet
+
+	// This enum type is used by this class only to handle the
+	// global PredType objects.  These values will ensure that the
+	// application receives an appropriate and uptodated id for an
+	// HDF5 predefined type; particularly usefull when the application
+	// closes and opens the library again.
+	enum predefined_types {
+
+	    INVALID = 0, E_C_S1 = 1, E_FORTRAN_S1,
+
+	    E_STD_I8BE, E_STD_I8LE, E_STD_I16BE, E_STD_I16LE, E_STD_I32BE,
+	    E_STD_I32LE, E_STD_I64BE, E_STD_I64LE, E_STD_U8BE, E_STD_U8LE,
+	    E_STD_U16BE, E_STD_U16LE, E_STD_U32BE, E_STD_U32LE, E_STD_U64BE,
+	    E_STD_U64LE, E_STD_B8BE, E_STD_B8LE, E_STD_B16BE, E_STD_B16LE,
+	    E_STD_B32BE, E_STD_B32LE, E_STD_B64BE, E_STD_B64LE, E_STD_REF_OBJ,
+	    E_STD_REF_DSETREG,
+
+	    E_IEEE_F32BE, E_IEEE_F32LE, E_IEEE_F64BE, E_IEEE_F64LE,
+
+	    E_UNIX_D32BE, E_UNIX_D32LE, E_UNIX_D64BE, E_UNIX_D64LE,
+
+	    E_INTEL_I8, E_INTEL_I16, E_INTEL_I32, E_INTEL_I64, E_INTEL_U8,
+	    E_INTEL_U16, E_INTEL_U32, E_INTEL_U64, E_INTEL_B8, E_INTEL_B16,
+	    E_INTEL_B32, E_INTEL_B64, E_INTEL_F32, E_INTEL_F64,
+
+	    E_ALPHA_I8, E_ALPHA_I16, E_ALPHA_I32, E_ALPHA_I64, E_ALPHA_U8,
+	    E_ALPHA_U16, E_ALPHA_U32, E_ALPHA_U64, E_ALPHA_B8, E_ALPHA_B16,
+	    E_ALPHA_B32, E_ALPHA_B64, E_ALPHA_F32, E_ALPHA_F64,
+
+	    E_MIPS_I8, E_MIPS_I16, E_MIPS_I32, E_MIPS_I64, E_MIPS_U8,
+	    E_MIPS_U16, E_MIPS_U32, E_MIPS_U64, E_MIPS_B8, E_MIPS_B16,
+	    E_MIPS_B32, E_MIPS_B64, E_MIPS_F32, E_MIPS_F64,
+
+	    E_NATIVE_CHAR, E_NATIVE_INT, E_NATIVE_FLOAT, E_NATIVE_SCHAR,
+	    E_NATIVE_UCHAR, E_NATIVE_SHORT, E_NATIVE_USHORT, E_NATIVE_UINT,
+	    E_NATIVE_LONG, E_NATIVE_ULONG, E_NATIVE_LLONG, E_NATIVE_ULLONG,
+	    E_NATIVE_DOUBLE, E_NATIVE_LDOUBLE, E_NATIVE_B8, E_NATIVE_B16,
+	    E_NATIVE_B32, E_NATIVE_B64, E_NATIVE_OPAQUE, E_NATIVE_HSIZE,
+	    E_NATIVE_HSSIZE, E_NATIVE_HERR, E_NATIVE_HBOOL, E_NATIVE_INT8,
+	    E_NATIVE_UINT8, E_NATIVE_INT_LEAST8, E_NATIVE_UINT_LEAST8,
+	    E_NATIVE_INT_FAST8, E_NATIVE_UINT_FAST8, E_NATIVE_INT16,
+	    E_NATIVE_UINT16, E_NATIVE_INT_LEAST16, E_NATIVE_UINT_LEAST16,
+	    E_NATIVE_INT_FAST16, E_NATIVE_UINT_FAST16, E_NATIVE_INT32,
+	    E_NATIVE_UINT32, E_NATIVE_INT_LEAST32, E_NATIVE_UINT_LEAST32,
+	    E_NATIVE_INT_FAST32, E_NATIVE_UINT_FAST32, E_NATIVE_INT64,
+	    E_NATIVE_UINT64, E_NATIVE_INT_LEAST64, E_NATIVE_UINT_LEAST64,
+	    E_NATIVE_INT_FAST64, E_NATIVE_UINT_FAST64
+	};
+
+   protected:
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+	// Default constructor
+	PredType();
+
+	// Creates a pre-defined type using an HDF5 pre-defined constant
+	PredType( const hid_t predtype_id );  // used by the library only
+
+#endif // DOXYGEN_SHOULD_SKIP_THIS
+
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5PropList.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5PropList.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5PropList.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,635 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+///\brief	Constant for default property.
+//--------------------------------------------------------------------------
+const PropList PropList::DEFAULT( H5P_DEFAULT );
+
+//--------------------------------------------------------------------------
+// Function	Default constructor
+///\brief	Default constructor: creates a stub property list object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+PropList::PropList() : IdComponent( 0 ) {}
+
+//--------------------------------------------------------------------------
+// Function:	PropList copy constructor
+///\brief	Copy constructor
+///\param	original - IN: The original property list to copy
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+PropList::PropList( const PropList& original ) : IdComponent( original ) {}
+
+//--------------------------------------------------------------------------
+// Function:	PropList overloaded constructor
+///\brief	Creates a property list using the id of an existing property.
+///\param	plist_id - IN: Id of the existing property list
+///\exception	H5::PropListIException
+// Description
+//		This function calls H5Pcreate to create a new property list
+//		if the given id, plist_id, is that of a property class.  If
+//		the given id is equal to H5P_NO_CLASS, then set this
+//		property's id to H5P_DEFAULT, otherwise, to the given id.
+//		Note: someone else added this code without comments and this
+//		description was what I came up with from reading the code.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+PropList::PropList( const hid_t plist_id ) : IdComponent(0)
+{
+    if (H5I_GENPROP_CLS == H5Iget_type(plist_id)) {
+        // call C routine to create the new property
+        id = H5Pcreate(plist_id);
+        if( id < 0 )
+        {
+            throw PropListIException("PropList constructor", "H5Pcreate failed");
+        }
+    }
+    else {
+        if(plist_id==H5P_NO_CLASS)
+            id=H5P_DEFAULT;
+        else
+            id=plist_id;
+    }
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::copy
+///\brief	Makes a copy of an existing property list.
+///\param	like_plist - IN: Reference to the existing property list
+///\exception	H5::PropListIException
+// Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Replaced resetIdComponent with decRefCount to use C library
+//		ID reference counting mechanism - BMR, Feb 20, 2005
+//--------------------------------------------------------------------------
+void PropList::copy( const PropList& like_plist )
+{
+    // If this object has a valid id, appropriately decrement reference
+    // counter and close the id.
+    try {
+        decRefCount();
+    }
+    catch (Exception close_error) {
+        throw PropListIException(inMemFunc("copy"), close_error.getDetailMsg());
+    }
+
+   // call C routine to copy the property list
+   id = H5Pcopy( like_plist.getId() );
+
+   if( id < 0 )
+      throw PropListIException(inMemFunc("copy"), "H5Pcopy failed");
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::operator=
+///\brief	Assignment operator.
+///\param	rhs - IN: Reference to the existing property list
+///\return	Reference to PropList instance
+///\exception	H5::PropListIException
+// Description
+//		Makes a copy of the property list on the right hand side
+//		and stores the new id in the left hand side object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+PropList& PropList::operator=( const PropList& rhs )
+{
+   copy(rhs);
+   return(*this);
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::copyProp
+///\brief	Copies a property from this property list or class to another
+///\param	dest - IN: Destination property list or class
+///\param	name - IN: Name of the property to copy - \c char pointer
+///\exception	H5::PropListIException
+// Programmer	Binh-Minh Ribler - Jul, 2005
+//--------------------------------------------------------------------------
+void PropList::copyProp(PropList& dest, const char *name) const
+{
+   hid_t dst_id = dest.getId();
+   herr_t ret_value = H5Pcopy_prop(dst_id, id, name);
+   if( ret_value < 0 )
+   {
+      throw PropListIException(inMemFunc("copyProp"), "H5Pcopy_prop failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::copyProp
+///\brief	This is an overloaded member function, provided for convenience.
+/// 		It differs from the above function only in what arguments it
+///		accepts.
+///\param	dest - IN: Destination property list or class
+///\param	name - IN: Name of the property to copy - \c std::string
+// Programmer	Binh-Minh Ribler - Jul, 2005
+//--------------------------------------------------------------------------
+void PropList::copyProp( PropList& dest, const string& name ) const
+{
+   copyProp( dest, name.c_str());
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::copyProp
+///\brief	Copies a property from one list or class to another - Obsolete
+///\param	dest - IN: Destination property list or class
+///\param	src  - IN: Source property list or class
+///\param	name - IN: Name of the property to copy - \c char pointer
+///\note	This member function will be removed in the next release
+///\exception	H5::PropListIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void PropList::copyProp( PropList& dest, PropList& src, const char *name ) const
+{
+   hid_t dst_id = dest.getId();
+   hid_t src_id = src.getId();
+   herr_t ret_value = H5Pcopy_prop(dst_id, src_id, name);
+   if( ret_value < 0 )
+   {
+      throw PropListIException(inMemFunc("copyProp"), "H5Pcopy_prop failed");
+   }
+
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::copyProp
+///\brief	This is an overloaded member function, provided for convenience.
+/// 		It differs from the above function only in what arguments it
+///		accepts. - Obsolete
+///\param	dest - IN: Destination property list or class
+///\param	src  - IN: Source property list or class
+///\param	name - IN: Name of the property to copy - \c std::string
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void PropList::copyProp( PropList& dest, PropList& src, const string& name ) const
+{
+   copyProp( dest, src, name.c_str());
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::close
+///\brief	Closes the property list if it is not a default one.
+///
+///\exception	H5::PropListIException
+// Programmer	Binh-Minh Ribler - Mar 9, 2005
+//--------------------------------------------------------------------------
+void PropList::close()
+{
+   if( id != H5P_NO_CLASS ) // not a constant, should call H5Pclose
+   {
+      herr_t ret_value = H5Pclose( id );
+      if( ret_value < 0 )
+      {
+         throw PropListIException(inMemFunc("close"), "H5Pclose failed");
+      }
+      // reset the id because the property list that it represents is now closed
+      id = 0;
+   }
+   else
+      throw PropListIException(inMemFunc("close"), "Cannot close a constant");
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::getClass
+///\brief	Returns the class of this property list, i.e. \c H5P_FILE_CREATE...
+///\return	The property list class if it is not equal to \c H5P_NO_CLASS
+///\exception	H5::PropListIException
+// Programmer	Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+hid_t PropList::getClass() const
+{
+   hid_t plist_class = H5Pget_class( id );
+   if( plist_class == H5P_NO_CLASS )
+   {
+      throw PropListIException(inMemFunc("getClass"),
+		"H5Pget_class failed - returned H5P_NO_CLASS");
+   }
+   return( plist_class );
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::propExist
+///\brief	Query the existance of a property in a property object.
+///\param	name - IN: Name of property to check for - \c char pointer
+///\return	true if the property exists in the property object, and
+///		false, otherwise.
+///\exception	H5::PropListIException
+///\par Description
+///		This routine checks if a property exists within a property
+///		list or class.
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+bool PropList::propExist(const char* name ) const
+{
+   // Calls C routine H5Pexist to determine whether a property exists
+   // within a property list or class.  It returns a positive value, 0,
+   // or a negative value
+   htri_t ret_value = H5Pexist(id, name);
+   if( ret_value > 0 )
+      return true;
+   else if( ret_value == 0 )
+      return false;
+   else // Raise exception when H5Pexist returns a negative value
+   {
+      throw PropListIException(inMemFunc("propExist"), "H5Pexist failed");
+   }
+}
+//--------------------------------------------------------------------------
+// Function:	PropList::propExist
+///\brief	This is an overloaded member function, provided for convenience.
+/// 		It differs from the above function only in what arguments it
+///		accepts.
+///\param	name - IN: Name of property to check for - \c std::string
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+bool PropList::propExist(const string& name ) const
+{
+   return( propExist( name.c_str()) );
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::closeClass
+///\brief	Close a property list class.
+///
+///\exception	H5::PropListIException
+///\par Description
+///		Releases memory and detaches a class from the property
+///		list class hierarchy.
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void PropList::closeClass() const
+{
+   herr_t ret_value = H5Pclose_class(id);
+   if( ret_value < 0 )
+   {
+      throw PropListIException(inMemFunc("closeClass"), "H5Pclose_class failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::getProperty
+///\brief	Query the value of a property in a property list.
+///\param	name -   IN: Name of property to query - \c char pointer
+///\param	value - OUT: Pointer to the buffer for the property value
+///\exception	H5::PropListIException
+///\par Description
+///		Retrieves a copy of the value for a property in a property
+///		list.  The property name must exist or this routine will
+///		throw an exception.
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void PropList::getProperty(const char* name, void* value) const
+{
+   herr_t ret_value = H5Pget(id, name, value);
+   if (ret_value < 0)
+   {
+      throw PropListIException(inMemFunc("getProperty"), "H5Pget failed");
+   }
+}
+//--------------------------------------------------------------------------
+// Function:	PropList::getProperty
+///\brief	This is an overloaded member function, provided for convenience.
+///   		It differs from the above function only in what arguments it
+///		accepts.
+///\param	name -  IN: Name of property to query - \c char pointer
+///\return	The property that is a \c std::string.
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+string PropList::getProperty(const char* name) const
+{
+   size_t size = getPropSize(name);
+   char* prop_strg_C = new char[size+1];  // temporary C-string for C API
+   herr_t ret_value = H5Pget(id, name, prop_strg_C); // call C API
+
+   // Throw exception if H5Pget returns failure
+   if (ret_value < 0)
+   {
+      throw PropListIException(inMemFunc("getProperty"), "H5Pget failed");
+   }
+
+   // Return propety value as a string after deleting temp C-string
+   string prop_strg = string(prop_strg_C);
+   delete []prop_strg_C;
+   return (prop_strg);
+}
+//--------------------------------------------------------------------------
+// Function:	PropList::getProperty
+///\brief	This is an overloaded member function, provided for convenience.
+///   		It differs from the above function only in what arguments it
+///		accepts.
+///\param	name -   IN: Name of property to query - \c str::string
+///\param	value - OUT: Pointer to the buffer for the property value
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void PropList::getProperty(const string& name, void* value) const
+{
+   getProperty(name.c_str(), value);
+}
+//--------------------------------------------------------------------------
+// Function:	PropList::getProperty
+///\brief	This is an overloaded member function, provided for convenience.
+///   		It differs from the above function only in what arguments it
+///		accepts.
+///\param	name -  IN: Name of property to query - \c std::string
+///\return	The property that is a \c std::string.
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+string PropList::getProperty(const string& name) const
+{
+   return (getProperty(name.c_str()));
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::getPropSize
+///\brief	Query the size of a property in a property list or class.
+///\param	name - IN: Name of property to query
+///\return	Size of the property
+///\exception	H5::PropListIException
+///\par Description
+///		This routine retrieves the size of a property's value
+///		in bytes.  Zero-sized properties are allowed and the return
+///		value will be of 0.  This function works for both property
+///		lists and classes.
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+size_t PropList::getPropSize(const char *name) const
+{
+   size_t prop_size;
+   herr_t ret_value = H5Pget_size(id, name, &prop_size);
+   if (ret_value < 0)
+   {
+      throw PropListIException(inMemFunc("getPropSize"), "H5Pget_size failed");
+   }
+   return(prop_size);
+}
+//--------------------------------------------------------------------------
+// Function:	PropList::getPropSize
+///\brief	This is an overloaded member function, provided for convenience.
+/// 		It differs from the above function only in what arguments it
+///		accepts.
+///\param	name - IN: Name of property to query - \c std::string
+///
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+size_t PropList::getPropSize(const string& name) const
+{
+   return (getPropSize(name.c_str()));
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::getClassName
+///\brief	Return the name of a generic property list class.
+///\return	A string containing the class name, if success, otherwise,
+///		a NULL string.
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+string PropList::getClassName() const
+{
+   char* temp_str;
+   temp_str = H5Pget_class_name(id);
+
+   if (temp_str != NULL)
+   {
+      string class_name = string(temp_str);
+      free(temp_str);
+      return(class_name);
+   }
+   else
+      return 0;
+}
+//--------------------------------------------------------------------------
+// Function:	PropList::getNumProps
+///\brief	Returns the number of properties in this property list or class.
+///\return	Size of the property.
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+size_t PropList::getNumProps() const
+{
+   size_t nprops;
+   herr_t ret_value = H5Pget_nprops (id, &nprops);
+   if (ret_value < 0)
+   {
+      throw PropListIException(inMemFunc("getNumProps"), "H5Pget_nprops failed");
+   }
+   return (nprops);
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::setProperty
+///\brief	Set a property's value in a property list.
+///\param	name  - IN: Name of property to set - \c char pointer
+///\param	value - IN: Void pointer to the value for the property
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void PropList::setProperty(const char* name, void* value) const
+{
+   herr_t ret_value = H5Pset(id, name, value);
+   if (ret_value < 0)
+   {
+      throw PropListIException(inMemFunc("setProperty"), "H5Pset failed");
+   }
+}
+//--------------------------------------------------------------------------
+// Function:	PropList::setProperty
+///\brief	This is an overloaded member function, provided for convenience.
+/// 		It differs from the above function only in what arguments it
+///		accepts.
+///\param	name    - IN: Name of property to set - \c char pointer
+///\param	charptr - IN: Char pointer to the value for the property
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void PropList::setProperty(const char* name, const char* charptr) const
+{
+   herr_t ret_value = H5Pset(id, name, (void*) charptr);
+   if (ret_value < 0)
+   {
+      throw PropListIException(inMemFunc("setProperty"), "H5Pset failed");
+   }
+}
+//--------------------------------------------------------------------------
+// Function:	PropList::setProperty
+///\brief	This is an overloaded member function, provided for convenience.
+/// 		It differs from the above function only in what arguments it
+///		accepts.
+///\param	name - IN: Name of property to set - \c char pointer
+///\param	strg - IN: Value for the property is a \c std::string
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void PropList::setProperty(const char* name, string& strg) const
+{
+   setProperty(name, strg.c_str());
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::setProperty
+///\brief	This is an overloaded member function, provided for convenience.
+/// 		It differs from the above function only in what arguments it
+///		accepts.
+///\param	name  - IN: Name of property to set - \c std::string
+///\param	value - IN: Void pointer to the value for the property
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void PropList::setProperty(const string& name, void* value) const
+{
+   setProperty(name.c_str(), value);
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::setProperty
+///\brief	This is an overloaded member function, provided for convenience.
+/// 		It differs from the above function only in what arguments it
+///		accepts.
+///\param	name - IN: Name of property to set - \c std::string
+///\param	strg - IN: Value for the property is a \c std::string
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void PropList::setProperty(const string& name, string& strg) const
+{
+   setProperty(name.c_str(), strg.c_str());
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::isAClass
+///\brief	Determines whether a property list is a certain class.
+///\param	prop_class - IN: Property class to query
+///\return	true if the property list is a member of the property list
+///		class, and false, otherwise.
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+bool PropList::isAClass(const PropList& prop_class) const
+{
+   htri_t ret_value = H5Pisa_class(id, prop_class.getId());
+   if( ret_value > 0 )
+      return true;
+   else if( ret_value == 0 )
+      return false;
+   else // Raise exception when H5Pisa_class returns a negative value
+   {
+      throw PropListIException(inMemFunc("isAClass"), "H5Pisa_class failed");
+   }
+
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::removeProp
+///\brief	Removes a property from a property list.
+///\param	name - IN: Name of property to remove - \c char pointer
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void PropList::removeProp(const char *name) const
+{
+   herr_t ret_value = H5Premove(id, name);
+   if (ret_value < 0)
+   {
+      throw PropListIException(inMemFunc("removeProp"), "H5Premove failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::removeProp
+///\brief	This is an overloaded member function, provided for convenience.
+/// 		It differs from the above function only in what arguments it
+///		accepts.
+///\param	name - IN: Name of property to remove - \c std::string
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+void PropList::removeProp(const string& name) const
+{
+   removeProp(name.c_str());
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::operator==
+///\brief	Compares this property list or class against the given list or class.
+///\param	rhs - IN: Reference to the property list to compare
+///\return	true if the property lists or classes are equal, and
+///		false, otherwise.
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+bool PropList::operator==(const PropList& rhs) const
+{
+   htri_t ret_value = H5Pequal(id, rhs.getId());
+   if( ret_value > 0 )
+      return true;
+   else if( ret_value == 0 )
+      return false;
+   else // Raise exception when H5Pequal returns a negative value
+   {
+      throw PropListIException(inMemFunc("operator=="), "H5Pequal failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList::getClassParent
+///\brief	Returns the parent class of a generic property class
+///\return	The parent class of a property class
+///\exception	H5::PropListIException
+// Programmer:  Binh-Minh Ribler - April, 2004
+//--------------------------------------------------------------------------
+PropList PropList::getClassParent() const
+{
+   hid_t class_id = H5Pget_class_parent(id);
+   if (class_id < 0)
+   {
+      throw PropListIException(inMemFunc("getClassParent"), "H5Pget_class_parent failed");
+   }
+   PropList pclass(class_id);
+   return(pclass);
+}
+
+//--------------------------------------------------------------------------
+// Function:	PropList destructor
+///\brief	Properly terminates access to this property list.
+// Programmer	Binh-Minh Ribler - 2000
+// Modification
+//		Replaced resetIdComponent with decRefCount to use C library
+//		ID reference counting mechanism - BMR, Feb 20, 2005
+//--------------------------------------------------------------------------
+PropList::~PropList()
+{
+   // The property list id will be closed properly
+    try {
+	decRefCount();
+    }
+    catch (Exception close_error) {
+        cerr << "PropList::~PropList - " << close_error.getDetailMsg() << endl;
+    }
+}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5PropList.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5PropList.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5PropList.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,112 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5PropList_H
+#define _H5PropList_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP PropList : public IdComponent {
+   public:
+	// Default property list
+        static const PropList DEFAULT;
+
+	// Creates a property list of a given type or creates a copy of an
+	// existing property list giving the property list id.
+	PropList(const hid_t plist_id);
+
+	// Make a copy of the given property list using assignment statement
+	PropList& operator=( const PropList& rhs );
+
+	// Compares this property list or class against the given list or class.
+	bool operator==(const PropList& rhs) const;
+
+	// Close this property list.
+	virtual void close();
+
+	// Close a property list class.
+	void closeClass() const;
+
+	// Makes a copy of the given property list.
+	void copy( const PropList& like_plist );
+
+	// Copies a property from this property list or class to another
+	void copyProp( PropList& dest, const char* name) const;
+	void copyProp( PropList& dest, const string& name) const;
+
+	// Copies a property from one property list or property class to another
+	void copyProp( PropList& dest, PropList& src, const char* name) const;
+	void copyProp( PropList& dest, PropList& src, const string& name) const;
+
+	// Gets the class of this property list, i.e. H5P_FILE_CREATE,
+	// H5P_FILE_ACCESS, ...
+	hid_t getClass() const;
+
+	// Return the name of a generic property list class.
+	string getClassName() const;
+
+	// Returns the parent class of a generic property class.
+	PropList getClassParent() const;
+
+	// Returns the number of properties in this property list or class.
+	size_t getNumProps() const;
+
+	// Query the value of a property in a property list.
+	void getProperty(const char* name, void* value) const;
+	void getProperty(const string& name, void* value) const;
+	string getProperty(const char* name) const;
+	string getProperty(const string& name) const;
+
+	// Set a property's value in a property list.
+	void setProperty(const char* name, void* value) const;
+	void setProperty(const char* name, const char* charptr) const;
+	void setProperty(const char* name, string& strg) const;
+	void setProperty(const string& name, void* value) const;
+	void setProperty(const string& name, string& strg) const;
+
+	// Query the size of a property in a property list or class.
+	size_t getPropSize(const char *name) const;
+	size_t getPropSize(const string& name) const;
+
+	// Determines whether a property list is a certain class.
+	bool isAClass(const PropList& prop_class) const;
+
+	/// Query the existance of a property in a property object.
+	bool propExist(const char* name) const;
+	bool propExist(const string& name) const;
+
+	// Removes a property from a property list.
+	void removeProp(const char *name) const;
+	void removeProp(const string& name) const;
+
+	// Returns this class name
+	virtual string fromClass () const { return ("PropList"); }
+
+	// Default constructor: creates a stub PropList object.
+	PropList();
+
+	// Copy constructor: creates a copy of a PropList object.
+	PropList(const PropList& original);
+
+	// Destructor: properly terminates access to this property list.
+	virtual ~PropList();
+};
+
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif  // _H5PropList_H

Added: packages/hdf5/branches/upstream/current/c++/src/H5StrType.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5StrType.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5StrType.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,215 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+#include "H5AtomType.h"
+#include "H5AbstractDs.h"
+#include "H5DxferProp.h"
+#include "H5DataSpace.h"
+#include "H5StrType.h"
+#include "H5DataSet.h"
+#include "H5PredType.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+//--------------------------------------------------------------------------
+// Function:	StrType default constructor
+///\brief	Default constructor: Creates a stub string datatype
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+StrType::StrType() : AtomType() {}
+
+//--------------------------------------------------------------------------
+// Function:	StrType overloaded constructor
+///\brief	Creates a string datatype using a predefined type.
+///\param	pred_type - IN: Predefined datatype
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+StrType::StrType( const PredType& pred_type ) : AtomType()
+{
+   // use DataType::copy to make a copy of this predefined type
+   copy( pred_type );
+}
+
+//--------------------------------------------------------------------------
+// Function:	StrType overloaded constructor
+///\brief	Creates a string datatype with a specified length
+///\param	existing_id - IN: Id of an existing datatype
+///\exception	H5::DataTypeIException
+// Description
+// 		The 1st argument could have been skipped, but this
+// 		constructor will collide with the one that takes an
+// 		existing id.
+//
+// 		Update: by passing 'size' by reference will avoid the
+// 		clashing problem, so the 1st argument can actually be
+// 		omitted.  This constructor should be replaced by the
+// 		other after announcing. - May, 2004
+///\note
+///		This constructor will be obsolete in later releases,
+///		please use StrType( const size_t& size ) instead.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+StrType::StrType( const PredType& pred_type, const size_t size ) : AtomType()
+{
+   // use DataType::copy to make a copy of the string predefined type
+   // then set its length
+   copy(pred_type);
+   setSize(size);
+}
+StrType::StrType( const size_t& size ) : AtomType()
+{
+   // use DataType::copy to make a copy of the string predefined type
+   // then set its length
+   copy(H5T_C_S1);
+   setSize(size);
+}
+
+//--------------------------------------------------------------------------
+// Function:	StrType overloaded constructor
+///\brief	Creates an StrType object using the id of an existing datatype.
+///\param	existing_id - IN: Id of an existing datatype
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+StrType::StrType( const hid_t existing_id ) : AtomType( existing_id ) {}
+
+//--------------------------------------------------------------------------
+// Function:	StrType copy constructor
+///\brief	Copy constructor: makes a copy of the original StrType object.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+StrType::StrType( const StrType& original ) : AtomType ( original ) {}
+
+//--------------------------------------------------------------------------
+// Function:	EnumType overloaded constructor
+///\brief	Gets the string datatype of the specified dataset
+///\param	dataset - IN: Dataset that this string datatype associates with
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+StrType::StrType( const DataSet& dataset ) : AtomType ()
+{
+   // Calls C function H5Dget_type to get the id of the datatype
+   id = H5Dget_type( dataset.getId() );
+
+   if( id < 0 )
+   {
+      throw DataSetIException("StrType constructor", "H5Dget_type failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	StrType::getCset
+///\brief	Retrieves the character set type of this string datatype.
+///\return	Character set type, which can be:
+///		\li \c H5T_CSET_ASCII (0) - Character set is US ASCII.
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5T_cset_t StrType::getCset() const
+{
+   H5T_cset_t cset = H5Tget_cset( id );
+
+   // Returns a valid character set type if successful
+   if( cset == H5T_CSET_ERROR )
+   {
+      throw DataTypeIException("StrType::getCset", "H5Tget_cset failed");
+   }
+   return( cset );
+}
+
+//--------------------------------------------------------------------------
+// Function:	StrType::setCset
+///\brief	Sets character set to be used.
+///\param	cset - IN: character set type
+///\exception	H5::DataTypeIException
+///		\li \c H5T_CSET_ASCII (0) - Character set is US ASCII.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void StrType::setCset( H5T_cset_t cset ) const
+{
+   herr_t ret_value = H5Tset_cset( id, cset );
+
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException("StrType::setCset", "H5Tset_cset failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	StrType::getCset
+///\brief	Retrieves the storage mechanism for of this string datatype.
+///\return	String storage mechanism, which can be:
+///		\li \c H5T_STR_NULLTERM (0) - Null terminate (as C does)
+///		\li \c H5T_STR_NULLPAD (0) - Pad with zeros
+///		\li \c H5T_STR_SPACEPAD (0) - pad with spaces (as FORTRAN does)
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+H5T_str_t StrType::getStrpad() const
+{
+   H5T_str_t strpad = H5Tget_strpad( id );
+
+   // Returns a valid string padding type if successful
+   if( strpad == H5T_STR_ERROR )
+   {
+      throw DataTypeIException("StrType::getStrpad",
+		"H5Tget_strpad failed - returned H5T_STR_ERROR");
+   }
+   return( strpad );
+}
+
+//--------------------------------------------------------------------------
+// Function:	StrType::setStrpad
+///\brief	Defines the storage mechanism for this string datatype.
+///\param	strpad - IN: String padding type
+///\exception	H5::DataTypeIException
+///\par Description
+///		For detail, please refer to the C layer Reference Manual at:
+/// http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-SetStrpad
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+void StrType::setStrpad( H5T_str_t strpad ) const
+{
+   herr_t ret_value = H5Tset_strpad( id, strpad );
+
+   if( ret_value < 0 )
+   {
+      throw DataTypeIException("StrType::setStrpad", "H5Tset_strpad failed");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	StrType destructor
+///\brief	Properly terminates access to this string datatype.
+// Programmer	Binh-Minh Ribler - 2000
+//--------------------------------------------------------------------------
+StrType::~StrType() {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5StrType.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5StrType.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5StrType.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,67 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5StrType_H
+#define _H5StrType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+class H5_DLLCPP StrType : public AtomType {
+   public:
+	// Creates a string type using a predefined type
+	StrType(const PredType& pred_type);
+
+	// Creates a string type with specified length
+	StrType(const size_t& size);
+
+	// Creates a string type with specified length - will be obsolete
+	StrType(const PredType& pred_type, const size_t size);
+
+        // Gets the string datatype of the specified dataset
+	StrType(const DataSet& dataset);
+
+	// Retrieves the character set type of this string datatype.
+	H5T_cset_t getCset() const;
+
+	// Sets character set to be used.
+	void setCset(H5T_cset_t cset) const;
+
+	// Retrieves the string padding method for this string datatype.
+	H5T_str_t getStrpad() const;
+
+	// Defines the storage mechanism for character strings.
+	void setStrpad(H5T_str_t strpad) const;
+
+	// Returns this class name
+	virtual string fromClass () const { return ("StrType"); }
+
+	// default constructor
+	StrType();
+
+	// Creates a string datatype using an existing id
+	StrType(const hid_t existing_id);
+
+	// Copy constructor - makes a copy of the original object
+	StrType(const StrType& original);
+
+	// Noop destructor.
+	virtual ~StrType();
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5VarLenType.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5VarLenType.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5VarLenType.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,84 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <string>
+
+#include "H5Include.h"
+#include "H5Exception.h"
+#include "H5IdComponent.h"
+#include "H5PropList.h"
+#include "H5Object.h"
+#include "H5DcreatProp.h"
+#include "H5CommonFG.h"
+#include "H5DataType.h"
+#include "H5VarLenType.h"
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+
+
+//--------------------------------------------------------------------------
+// Function:	VarLenType default constructor
+///\brief	Default constructor: Creates a stub variable-length datatype.
+//--------------------------------------------------------------------------
+VarLenType::VarLenType() : DataType() {}
+
+//--------------------------------------------------------------------------
+// Function:	VarLenType overloaded constructor
+///\brief	Creates an VarLenType object using an existing id.
+///\param	existing_id - IN: Id of an existing datatype
+///\exception	H5::DataTypeIException
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+VarLenType::VarLenType(const hid_t existing_id) : DataType(existing_id) {}
+
+//--------------------------------------------------------------------------
+// Function:	VarLenType copy constructor
+///\brief	Copy constructor: makes a copy of the original VarLenType object.
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+VarLenType::VarLenType(const VarLenType& original) : DataType(original) {}
+
+//--------------------------------------------------------------------------
+// Function:	VarLenType overloaded constructor
+///\brief	Creates a new variable-length datatype based on the specified
+///		\a base_type.
+///\param	base_type - IN: Pointer to existing datatype
+///\exception	H5::DataTypeIException
+// Description
+//		DataType passed by pointer to avoid clashing with copy
+//		constructor.
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+VarLenType::VarLenType(const DataType* base_type) : DataType()
+{
+   id = H5Tvlen_create(base_type->getId());
+   if (id < 0)
+   {
+      throw DataTypeIException("VarLenType constructor",
+                "H5Tvlen_create returns negative value");
+   }
+}
+
+//--------------------------------------------------------------------------
+// Function:	VarLenType destructor
+///\brief	Properly terminates access to this datatype.
+// Programmer	Binh-Minh Ribler - May, 2004
+//--------------------------------------------------------------------------
+VarLenType::~VarLenType() {}
+
+#ifndef H5_NO_NAMESPACE
+} // end namespace
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/H5VarLenType.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/H5VarLenType.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/H5VarLenType.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+// C++ informative line for the emacs editor: -*- C++ -*-
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Class VarLenType inherits from DataType and provides wrappers for
+// the HDF5 C's Variable-length Datatypes.
+
+#ifndef _H5VarLenType_H
+#define _H5VarLenType_H
+
+#ifndef H5_NO_NAMESPACE
+namespace H5 {
+#endif
+class H5_DLLCPP VarLenType : public DataType {
+   public:
+	// Returns this class name
+	virtual string fromClass () const { return ("VarLenType"); }
+
+	// Constructor that creates a variable-length datatype based
+	// on the specified base type.
+	VarLenType(const DataType* base_type);
+
+	// Copy constructor: makes copy of the original object.
+	VarLenType( const VarLenType& original );
+
+	// Constructor that takes an existing id
+	VarLenType( const hid_t existing_id );
+
+	// Noop destructor
+	virtual ~VarLenType();
+
+   protected:
+	// Default constructor
+	VarLenType();
+
+};
+#ifndef H5_NO_NAMESPACE
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/c++/src/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,61 @@
+##
+## HDF5-C++ Library Makefile(.in)
+##
+##
+## 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.
+##
+##
+##
+top_srcdir=@top_srcdir@/..
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+hdf5_srcdir=$(top_srcdir)/src
+hdf5_builddir=$(top_builddir)/src
+
+TRACE=perl $(top_srcdir)/bin/trace
+
+## Add `-I.' to the C preprocessor flags.
+CPPFLAGS=-I. -I$(hdf5_builddir) -I$(hdf5_srcdir) @CPPFLAGS@
+
+## This is our main target
+LIB=libhdf5_cpp.la
+
+## Source and object files for the library
+LIB_SRC=H5Exception.cpp H5IdComponent.cpp H5Library.cpp H5Attribute.cpp		\
+        H5Object.cpp H5PropList.cpp H5FaccProp.cpp H5FcreatProp.cpp		\
+        H5DcreatProp.cpp H5DxferProp.cpp H5DataType.cpp H5DataSpace.cpp		\
+        H5AbstractDs.cpp H5AtomType.cpp H5PredType.cpp H5EnumType.cpp		\
+        H5IntType.cpp H5FloatType.cpp H5StrType.cpp H5ArrayType.cpp		\
+        H5VarLenType.cpp H5CompType.cpp H5DataSet.cpp H5CommonFG.cpp		\
+	H5Group.cpp H5File.cpp
+LIB_OBJ=$(LIB_SRC:.cpp=.lo)
+
+PUB_HDR=H5Cpp.h H5AbstractDs.h H5AtomType.h H5Attribute.h H5Classes.h           \
+        H5CommonFG.h H5CompType.h H5DataSet.h H5DataSpace.h H5DataType.h        \
+        H5DcreatProp.h H5DxferProp.h H5EnumType.h H5Exception.h H5FaccProp.h    \
+        H5FcreatProp.h H5File.h H5FloatType.h H5Group.h H5IdComponent.h         \
+        H5Include.h H5IntType.h H5Library.h H5Object.h H5PredType.h             \
+        H5PropList.h H5StrType.h H5CppDoc.h H5ArrayType.h H5VarLenType.h
+
+PUB_PROGS=h5c++
+
+ARFLAGS=rs
+
+## h5c++ is generated during configure time.  Remove it only when distclean.
+## libhdf5_cpp.settings is generated during configure. Remove it when distclean.
+MOSTLYCLEAN= *.ii *.ti
+DISTCLEAN=h5c++ libhdf5_cpp.settings
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/c++/src/RM_stylesheet.css
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/RM_stylesheet.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/RM_stylesheet.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,450 @@
+BODY
+{
+}
+H1
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+H2
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+H3
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+H4
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+H5
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+H6
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+P
+{
+}
+CENTER
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+TD
+{
+}
+TH
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+UL
+{
+}
+DL
+{
+}
+DIV
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+H1
+{
+    TEXT-ALIGN: center
+}
+CAPTION
+{
+    FONT-WEIGHT: bold
+}
+DIV.qindex
+{
+    BORDER-RIGHT: #b0b0b0 1px solid;
+    PADDING-RIGHT: 2px;
+    BORDER-TOP: #b0b0b0 1px solid;
+    PADDING-LEFT: 2px;
+    PADDING-BOTTOM: 2px;
+    MARGIN: 2px;
+    BORDER-LEFT: #b0b0b0 1px solid;
+    WIDTH: 100%;
+    LINE-HEIGHT: 140%;
+    PADDING-TOP: 2px;
+    BORDER-BOTTOM: #b0b0b0 1px solid;
+    BACKGROUND-COLOR: #eeeeff;
+    TEXT-ALIGN: center
+}
+DIV.nav
+{
+    BORDER-RIGHT: #b0b0b0 1px solid;
+    PADDING-RIGHT: 2px;
+    BORDER-TOP: #b0b0b0 1px solid;
+    PADDING-LEFT: 2px;
+    PADDING-BOTTOM: 2px;
+    MARGIN: 2px;
+    BORDER-LEFT: #b0b0b0 1px solid;
+    WIDTH: 100%;
+    LINE-HEIGHT: 140%;
+    PADDING-TOP: 2px;
+    BORDER-BOTTOM: #b0b0b0 1px solid;
+    BACKGROUND-COLOR: #eeeeff;
+    TEXT-ALIGN: center
+}
+A.qindex
+{
+    FONT-WEIGHT: bold;
+    COLOR: #1a419d;
+    TEXT-DECORATION: none
+}
+A.qindex:visited
+{
+    FONT-WEIGHT: bold;
+    COLOR: #1a419d;
+    TEXT-DECORATION: none
+}
+A.qindex:hover
+{
+    BACKGROUND-COLOR: #ddddff;
+    TEXT-DECORATION: none
+}
+A.qindexHL
+{
+    BORDER-RIGHT: #9295c2 1px double;
+    BORDER-TOP: #9295c2 1px double;
+    FONT-WEIGHT: bold;
+    BORDER-LEFT: #9295c2 1px double;
+    COLOR: #ffffff;
+    BORDER-BOTTOM: #9295c2 1px double;
+    BACKGROUND-COLOR: #6666cc;
+    TEXT-DECORATION: none
+}
+A.qindexHL:hover
+{
+    COLOR: #ffffff;
+    BACKGROUND-COLOR: #6666cc;
+    TEXT-DECORATION: none
+}
+A.qindexHL:visited
+{
+    COLOR: #ffffff;
+    BACKGROUND-COLOR: #6666cc;
+    TEXT-DECORATION: none
+}
+A.el
+{
+    FONT-WEIGHT: bold;
+    TEXT-DECORATION: none
+}
+A.elRef
+{
+    FONT-WEIGHT: bold
+}
+A.code:link
+{
+    FONT-WEIGHT: normal;
+    COLOR: #0000ff;
+    TEXT-DECORATION: none
+}
+A.code:visited
+{
+    FONT-WEIGHT: normal;
+    COLOR: #0000ff;
+    TEXT-DECORATION: none
+}
+A.codeRef:link
+{
+    FONT-WEIGHT: normal;
+    COLOR: #0000ff
+}
+A.codeRef:visited
+{
+    FONT-WEIGHT: normal;
+    COLOR: #0000ff
+}
+A:hover
+{
+    BACKGROUND-COLOR: #f2f2ff;
+    TEXT-DECORATION: none
+}
+DL.el
+{
+    MARGIN-LEFT: -1cm
+}
+.fragment
+{
+    FONT-FAMILY: monospace
+}
+PRE.fragment
+{
+    BORDER-RIGHT: #cccccc 1px solid;
+    PADDING-RIGHT: 6px;
+    BORDER-TOP: #cccccc 1px solid;
+    PADDING-LEFT: 6px;
+    PADDING-BOTTOM: 4px;
+    MARGIN: 4px 8px 4px 2px;
+    BORDER-LEFT: #cccccc 1px solid;
+    PADDING-TOP: 4px;
+    BORDER-BOTTOM: #cccccc 1px solid;
+    BACKGROUND-COLOR: #f5f5f5
+}
+DIV.ah
+{
+    MARGIN-TOP: 3px;
+    FONT-WEIGHT: bold;
+    MARGIN-BOTTOM: 3px;
+    COLOR: #ffffff;
+    BACKGROUND-COLOR: black
+}
+TD.md
+{
+    FONT-WEIGHT: bold;
+    BACKGROUND-COLOR: #f4f4fb
+}
+TD.mdname1
+{
+    FONT-WEIGHT: bold;
+    COLOR: #602020;
+    BACKGROUND-COLOR: #f4f4fb
+}
+TD.mdname
+{
+    FONT-WEIGHT: bold;
+    WIDTH: 600px;
+    COLOR: #602020;
+    BACKGROUND-COLOR: #f4f4fb
+}
+DIV.groupHeader
+{
+    MARGIN-TOP: 12px;
+    FONT-WEIGHT: bold;
+    MARGIN-BOTTOM: 6px;
+    MARGIN-LEFT: 16px
+}
+DIV.groupText
+{
+    FONT-SIZE: 14px;
+    MARGIN-LEFT: 16px;
+    FONT-STYLE: italic
+}
+BODY
+{
+    BACKGROUND: white;
+    MARGIN-LEFT: 20px;
+    COLOR: black;
+    MARGIN-RIGHT: 20px
+}
+TD.indexkey
+{
+    BORDER-RIGHT: #cccccc 1px solid;
+    PADDING-RIGHT: 10px;
+    BORDER-TOP: #cccccc 1px solid;
+    PADDING-LEFT: 10px;
+    FONT-WEIGHT: bold;
+    PADDING-BOTTOM: 2px;
+    MARGIN: 2px 0px;
+    BORDER-LEFT: #cccccc 1px solid;
+    PADDING-TOP: 2px;
+    BORDER-BOTTOM: #cccccc 1px solid;
+    BACKGROUND-COLOR: #eeeeff
+}
+TD.indexvalue
+{
+    BORDER-RIGHT: #cccccc 1px solid;
+    PADDING-RIGHT: 10px;
+    BORDER-TOP: #cccccc 1px solid;
+    PADDING-LEFT: 10px;
+    PADDING-BOTTOM: 2px;
+    MARGIN: 2px 0px;
+    BORDER-LEFT: #cccccc 1px solid;
+    PADDING-TOP: 2px;
+    BORDER-BOTTOM: #cccccc 1px solid;
+    FONT-STYLE: italic;
+    BACKGROUND-COLOR: #eeeeff
+}
+TR.memlist
+{
+    BACKGROUND-COLOR: #f0f0f0
+}
+P.formulaDsp
+{
+    TEXT-ALIGN: center
+}
+IMG.formulaDsp
+{
+}
+IMG.formulaInl
+{
+    VERTICAL-ALIGN: middle
+}
+SPAN.keyword
+{
+    COLOR: #008000
+}
+SPAN.keywordtype
+{
+    COLOR: #604020
+}
+SPAN.keywordflow
+{
+    COLOR: #e08000
+}
+SPAN.comment
+{
+    COLOR: #800000
+}
+SPAN.preprocessor
+{
+    COLOR: #806020
+}
+SPAN.stringliteral
+{
+    COLOR: #002080
+}
+SPAN.charliteral
+{
+    COLOR: #008080
+}
+.mdTable
+{
+    BORDER-RIGHT: #868686 1px solid;
+    BORDER-TOP: #868686 1px solid;
+    BORDER-LEFT: #868686 1px solid;
+    BORDER-BOTTOM: #868686 1px solid;
+    BACKGROUND-COLOR: #f4f4fb
+}
+.mdRow
+{
+    PADDING-RIGHT: 10px;
+    PADDING-LEFT: 10px;
+    PADDING-BOTTOM: 8px;
+    PADDING-TOP: 8px
+}
+.mdescLeft
+{
+    BORDER-RIGHT: #e0e0e0 1px;
+    PADDING-RIGHT: 8px;
+    BORDER-TOP: #e0e0e0 1px;
+    PADDING-LEFT: 8px;
+    FONT-SIZE: 12px;
+    PADDING-BOTTOM: 4px;
+    MARGIN: 0px;
+    BORDER-LEFT: #e0e0e0 1px;
+    PADDING-TOP: 0px;
+    BORDER-BOTTOM: #e0e0e0 1px;
+    FONT-STYLE: italic;
+    BACKGROUND-COLOR: #fafafa
+}
+.mdescRight
+{
+    BORDER-RIGHT: #e0e0e0 1px;
+    PADDING-RIGHT: 8px;
+    BORDER-TOP: #e0e0e0 1px;
+    PADDING-LEFT: 8px;
+    FONT-SIZE: 12px;
+    PADDING-BOTTOM: 4px;
+    MARGIN: 0px;
+    BORDER-LEFT: #e0e0e0 1px;
+    PADDING-TOP: 0px;
+    BORDER-BOTTOM: #e0e0e0 1px;
+    FONT-STYLE: italic;
+    BACKGROUND-COLOR: #fafafa
+}
+.memItemLeft
+{
+    BORDER-RIGHT: #e0e0e0 1px;
+    PADDING-RIGHT: 0px;
+    BORDER-TOP: #e0e0e0 1px solid;
+    PADDING-LEFT: 8px;
+    FONT-SIZE: 12px;
+    PADDING-BOTTOM: 0px;
+    MARGIN: 4px;
+    BORDER-LEFT: #e0e0e0 1px;
+    PADDING-TOP: 1px;
+    BORDER-BOTTOM: #e0e0e0 1px;
+    BACKGROUND-COLOR: #fafafa
+}
+.memItemRight
+{
+    BORDER-RIGHT: #e0e0e0 1px;
+    PADDING-RIGHT: 8px;
+    BORDER-TOP: #e0e0e0 1px solid;
+    PADDING-LEFT: 8px;
+    FONT-SIZE: 13px;
+    PADDING-BOTTOM: 0px;
+    MARGIN: 4px;
+    BORDER-LEFT: #e0e0e0 1px;
+    PADDING-TOP: 1px;
+    BORDER-BOTTOM: #e0e0e0 1px;
+    BACKGROUND-COLOR: #fafafa
+}
+.memTemplItemLeft
+{
+    BORDER-RIGHT: #e0e0e0 1px;
+    PADDING-RIGHT: 0px;
+    BORDER-TOP: #e0e0e0 1px;
+    PADDING-LEFT: 8px;
+    FONT-SIZE: 12px;
+    PADDING-BOTTOM: 0px;
+    MARGIN: 4px;
+    BORDER-LEFT: #e0e0e0 1px;
+    PADDING-TOP: 1px;
+    BORDER-BOTTOM: #e0e0e0 1px;
+    BACKGROUND-COLOR: #fafafa
+}
+.memTemplItemRight
+{
+    BORDER-RIGHT: #e0e0e0 1px;
+    PADDING-RIGHT: 8px;
+    BORDER-TOP: #e0e0e0 1px;
+    PADDING-LEFT: 8px;
+    FONT-SIZE: 13px;
+    PADDING-BOTTOM: 0px;
+    MARGIN: 4px;
+    BORDER-LEFT: #e0e0e0 1px;
+    PADDING-TOP: 1px;
+    BORDER-BOTTOM: #e0e0e0 1px;
+    BACKGROUND-COLOR: #fafafa
+}
+.memTemplParams
+{
+    BORDER-RIGHT: #e0e0e0 1px;
+    PADDING-RIGHT: 0px;
+    BORDER-TOP: #e0e0e0 1px solid;
+    PADDING-LEFT: 8px;
+    FONT-SIZE: 12px;
+    PADDING-BOTTOM: 0px;
+    MARGIN: 4px;
+    BORDER-LEFT: #e0e0e0 1px;
+    COLOR: #606060;
+    PADDING-TOP: 1px;
+    BORDER-BOTTOM: #e0e0e0 1px;
+    BACKGROUND-COLOR: #fafafa
+}
+.search
+{
+    FONT-WEIGHT: bold;
+    COLOR: #003399
+}
+FORM.search
+{
+    MARGIN-TOP: 0px;
+    MARGIN-BOTTOM: 0px
+}
+INPUT.search
+{
+    FONT-WEIGHT: normal;
+    FONT-SIZE: 75%;
+    COLOR: #000080;
+    BACKGROUND-COLOR: #eeeeff
+}
+TD.tiny
+{
+    FONT-SIZE: 75%
+}
+A
+{
+    COLOR: #252e78
+}
+A:visited
+{
+    COLOR: #3d2185
+}

Added: packages/hdf5/branches/upstream/current/c++/src/cpp_doc_config
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/cpp_doc_config	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/cpp_doc_config	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,233 @@
+# 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.
+
+# Doxyfile 1.4.2
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME           = 
+PROJECT_NUMBER         = 
+OUTPUT_DIRECTORY       = ../../doc/html/cpplus_RM/
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+USE_WINDOWS_ENCODING   = YES
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = 
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = NO
+STRIP_FROM_PATH        = 
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+DISTRIBUTE_GROUP_DOC   = NO
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 8
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+SUBGROUPING            = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = NO
+EXTRACT_STATIC         = YES
+EXTRACT_LOCAL_CLASSES  = NO
+EXTRACT_LOCAL_METHODS  = NO
+HIDE_UNDOC_MEMBERS     = YES
+HIDE_UNDOC_CLASSES     = YES
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = YES
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = NO
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = NO
+SHOW_DIRECTORIES       = YES
+FILE_VERSION_FILTER    = 
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = 
+FILE_PATTERNS          = 
+RECURSIVE              = NO
+EXCLUDE                = 
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       = 
+EXAMPLE_PATH           = ../examples
+EXAMPLE_PATTERNS       = 
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+VERBATIM_HEADERS       = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = NO
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = .
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = header.html
+HTML_FOOTER            = 
+HTML_STYLESHEET        = RM_stylesheet.css
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = NO
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = NO
+USE_PDFLATEX           = NO
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = DOXYGEN_SHOULD_SKIP_THIS
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = NO
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = NO
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = NO
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+MAX_DOT_GRAPH_WIDTH    = 1024
+MAX_DOT_GRAPH_HEIGHT   = 1024
+MAX_DOT_GRAPH_DEPTH    = 0
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO

Added: packages/hdf5/branches/upstream/current/c++/src/h5c++.in
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/h5c++.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/h5c++.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,252 @@
+#! /bin/sh
+##
+## 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.
+##
+
+############################################################################
+##                                                                        ##
+## Things You May Have to Modify:                                         ##
+##                                                                        ##
+## If the following paths don't point to the place were HDF5 is installed ##
+## on your system (i.e., you received a binary distribution or moved the  ##
+## files from the originally installed directory to another directory)    ##
+## then modify them accordingly to represent the new paths.               ##
+##                                                                        ##
+############################################################################
+prefix="@prefix@"
+exec_prefix="@exec_prefix@"
+libdir="@libdir@"
+includedir="@includedir@"
+HL="@HL@"
+
+############################################################################
+##                                                                        ##
+## You shouldn't have to modify anything below this line.                 ##
+##                                                                        ##
+############################################################################
+
+host_os="@host_os@"
+
+prog_name="`basename $0`"
+
+allargs=""
+compile_args=""
+libraries=""
+link_args=""
+link_objs=""
+clibpath=""
+
+do_link="yes"
+do_compile="no"
+dash_o="no"
+dash_c="no"
+get_output_file="no"
+
+SHOW="eval"
+CXXBASE="@CXX@"
+CXXLINKERBASE="@CXX@"
+CXXFLAGS="@CXXFLAGS@"
+CPPFLAGS="@CPPFLAGS@"
+LDFLAGS="@LDFLAGS@"
+LIBS="@LIBS@"
+
+CXX="${HDF5_CXX:-$CXXBASE}"
+CXXLINKER="${HDF5_CLINKER:-$CXXLINKERBASE}"
+
+USE_SHARED_LIB="${HDF5_USE_SHLIB:-no}"
+
+usage() {
+  # A wonderfully informative "usage" message.
+  echo "usage: $prog_name [OPTIONS] <compile line>"
+  echo "  OPTIONS:"
+  echo "    -help        This help message."
+  echo "    -echo        Show all the shell commands executed"
+  echo "    -prefix=DIR  Prefix directory to find HDF5 lib/ and include/"
+  echo "                   subdirectories [default: $prefix]"
+  echo "    -show        Show the commands without executing them"
+  echo "    -showconfig  Show the HDF5 library configuration summary"
+  echo " "
+  echo "  <compile line>  - the normal compile line options for your compiler."
+  echo "                    $prog_name uses the same compiler you used to compile"
+  echo "                    HDF5. Check with your compiler's man pages for more"
+  echo "                    information on which options are needed."
+  echo " "
+  echo " You can override the compiler, linker, and whether or not to use static"
+  echo " or shared libraries to compile your program by setting the following"
+  echo " environment variables accordingly:"
+  echo " "
+  echo "   HDF5_CXX                 -  use a different C++ compiler"
+  echo "   HDF5_CXXLINKER           -  use a different linker"
+  echo " "
+  exit 1
+}
+
+# Show the configuration summary of the library recorded in the
+# libhdf5_cpp.settings file reside in the lib directory.
+showconfigure()
+{
+  cat ${libdir}/libhdf5_cpp.settings
+  status=$?
+}
+
+# Main
+status=0
+
+if test "$#" = "0"; then
+  # No parameters specified, issue usage statement and exit.
+  usage
+fi
+
+case "$CXX" in
+  gcc)
+    kind="gcc"
+    ;;
+  mpicc|mpcc|mpicc_r)
+    # Is this gcc masquarading as an MPI compiler?
+    if test "`${CXX} -v 2>&1 | sed -n 2p | cut -c1-3`" = "gcc"; then
+      kind="gcc"
+    else
+      # Nope
+      kind="$host_os"
+    fi
+    ;;
+  *)
+    kind="$host_os"
+    ;;
+esac
+
+for arg in $@ ; do
+  if test "x$get_output_file" = "xyes"; then
+    link_args="$link_args $arg"
+    output_file="$arg"
+    get_output_file="no"
+    continue
+  fi
+
+  case "$arg" in
+    -c)
+      allargs="$allargs $arg"
+      compile_args="$compile_args $arg"
+
+      if test "x$do_link" = "xyes" -a -n "$output_file"; then
+        compile_args="$compile_args -o $outputfile"
+      fi
+
+      do_link="no"
+      dash_c="yes"
+      ;;
+    -o)
+      allargs="$allargs $arg"
+      dash_o="yes"
+
+      if test "x$dash_c" = "xyes"; then
+        compile_args="$compile_args $arg"
+      else
+        link_args="$link_args $arg"
+        do_link="yes"
+        get_output_file="yes"
+      fi
+      ;;
+    -E|-M)
+      allargs="$allargs $arg"
+      compile_args="$compile_args $arg"
+      dash_c="yes"
+      do_link="no"
+      ;;
+    -l*)
+      libraries=" $libraries $arg "
+      allargs="$allargs $arg"
+      ;;
+    -prefix=*)
+      prefix="`expr "$arg" : '-prefix=\(.*\)'`"
+      ;;
+    -echo)
+      set -x
+      ;;
+    -show)
+      SHOW="echo"
+      ;;
+    -showconfig)
+      showconfigure
+      exit $status
+      ;;
+    -help)
+      usage
+      ;;
+    *\"*)
+      qarg="'"$arg"'"
+      allargs="$allargs $qarg"
+      ;;
+    *\'*)
+      qarg='\"'"$arg"'\"'
+      allargs="$allargs $qarg"
+      ;;
+    *)
+      allargs="$allargs $qarg"
+
+	if [ -s "$arg" ] ; then
+	    ext=`expr "$arg" : '.*\(\..*\)'`
+	    if [ "$ext" = ".C" -o "$ext" = ".cxx" -o "$ext" = ".cpp" -o \
+		 "$ext" = ".cc" -o "$ext" = ".c" -o "$ext" = ".CC" ] ; then
+
+	        do_compile="yes"
+	        compile_args="$compile_args $arg"
+	        fname=`basename $arg $ext`
+	        link_objs="$link_objs $fname.o"
+	    elif [ "$ext" = ".o" ] ; then
+		if test "x$dash_c" = "xyes"  ; then
+	            compile_args="$compile_args $arg"
+                else
+	            do_link="yes"
+	            link_objs="$link_objs $arg"
+                fi
+            elif test "x$ext" = "x.a"; then
+              # This is an archive that we're linking in
+              libraries=" $libraries $arg "
+            else
+              compile_args="$compile_args $arg"
+              link_args="$link_args $arg"
+            fi
+	    else
+	        compile_args="$compile_args $arg"
+	        link_args="$link_args $arg"
+	    fi
+	;;
+  esac
+done
+
+if test "x$do_compile" = "xyes"; then
+  if test "x$dash_c" != "xyes"; then
+    compile_args="-c $compile_args"
+  fi
+
+  $SHOW $CXX -I$includedir $CPPFLAGS $CXXFLAGS $compile_args
+  status=$?
+
+  if test "$status" != "0"; then
+    exit $status
+  fi
+fi
+
+if test "x$do_link" = "xyes"; then
+  # conditionnaly link with the hl library  
+    if test "X$HL" = "Xhl"; then
+     link_args="$link_args ${libdir}/libhdf5_cpp.a ${libdir}/libhdf5.a ${libdir}/libhdf5_hl.a $LIBS"
+    else
+     link_args="$link_args ${libdir}/libhdf5_cpp.a ${libdir}/libhdf5.a $LIBS"
+    fi
+  $SHOW $CXXLINKER -I$includedir $CPPFLAGS $CXXFLAGS $LDFLAGS $clibpath $link_objs $link_args
+  status=$?
+fi
+
+exit $status


Property changes on: packages/hdf5/branches/upstream/current/c++/src/h5c++.in
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/c++/src/header.html
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/header.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/header.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,338 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>

Added: packages/hdf5/branches/upstream/current/c++/src/header_files/filelist.xml
===================================================================
--- packages/hdf5/branches/upstream/current/c++/src/header_files/filelist.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/src/header_files/filelist.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,6 @@
+<xml xmlns:o="urn:schemas-microsoft-com:office:office">
+ <o:MainFile HRef="../header.html"/>
+ <o:File HRef="image001.jpg"/>
+ <o:File HRef="image002.jpg"/>
+ <o:File HRef="filelist.xml"/>
+</xml>
\ No newline at end of file

Added: packages/hdf5/branches/upstream/current/c++/src/header_files/image001.jpg
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/c++/src/header_files/image001.jpg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/c++/src/header_files/image002.jpg
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/c++/src/header_files/image002.jpg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/c++/test/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/c++/test/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/test/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,16 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+

Added: packages/hdf5/branches/upstream/current/c++/test/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/c++/test/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/test/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,62 @@
+## HDF5-C++ test/Makefile(.in)
+##
+##
+## 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.
+##
+##
+##
+top_srcdir=@top_srcdir@/..
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+hdf5_srcdir=$(top_srcdir)/src
+hdf5_builddir=$(top_builddir)/src
+hdf5_testdir=$(top_builddir)/test
+
+## Add include directory to the cpp preprocessor flags; note that the
+## hdf5/test directory is needed for the use of h5test
+CPPFLAGS=-I. -I../src -I$(srcdir)/../src -I$(top_srcdir)/test -I$(hdf5_builddir) -I$(hdf5_srcdir) @CPPFLAGS@
+
+## Add the C++ API library and the hdf5 library to the library lists
+LIB=../src/libhdf5_cpp.la
+LIBHDF5=$(hdf5_builddir)/libhdf5.la
+LIBH5TEST=$(hdf5_testdir)/libh5test.la
+
+LT_LINK_LIB=$(LT) --mode=link $(CXX) -rpath $(libdir)
+
+## These are our main targets. They should be listed in the order to be
+## executed, generally most specific tests to least specific tests.
+RUNTEST=$(LT_RUN)
+
+TESTHDF5_SRC=testhdf5.cpp tfile.cpp th5s.cpp h5cpputil.cpp
+TESTHDF5_OBJ=$(TESTHDF5_SRC:.cpp=.lo)
+
+TEST_SRC=dsets.cpp $(TESTHDF5_SRC)
+TEST_OBJ=$(TEST_SRC:.cpp=.lo)
+TEST_PROGS=dsets testhdf5
+
+
+TEST_SCRIPTS=
+MOSTLYCLEAN= *.ii *.ti
+DISTCLEAN=$(TEST_PROGS_SRC:.cpp=.lo) $(TEST_PROGS_SRC:.cpp=.o)
+
+$(TEST_PROGS): $(LIB) $(LIBHDF5) $(LIBH5TEST)
+
+testhdf5: $(TEST_OBJ)
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(TESTHDF5_OBJ) $(LIB) $(LIBH5TEST) $(LIBHDF5) $(LDFLAGS) $(LIBS) $(DEFAULT_LIBS)
+
+dsets: dsets.lo h5cpputil.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ dsets.lo h5cpputil.lo $(hdf5_builddir)/../test/h5test.lo $(LIB) $(LIBH5TEST) $(LIBHDF5) $(LDFLAGS) $(LIBS) $(DEFAULT_LIBS)
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/c++/test/dsets.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/test/dsets.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/test/dsets.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1067 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*****************************************************************************
+   FILE
+   dsets.cpp - HDF5 C++ testing the functionalities associated with the
+	       C dataset interface (H5D)
+
+   EXTERNAL ROUTINES/VARIABLES:
+     These routines are in the test directory of the C library:
+	h5_reset() -- in h5test.c, resets the library by closing it
+	h5_fileaccess() -- in h5test.c, returns a file access template
+
+ ***************************************************************************/
+
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+
+#include "testhdf5.h"	// C test header file
+#include "H5Cpp.h"	// C++ API header file
+
+#ifndef H5_NO_NAMESPACE
+using namespace H5;
+#endif
+
+#include "h5cpputil.h"	// C++ utilility header file
+
+const string	FILE1("dataset.h5");
+const string	DSET_DEFAULT_NAME("default");
+const string	DSET_CHUNKED_NAME("chunked");
+const string	DSET_SIMPLE_IO_NAME("simple_io");
+const string	DSET_TCONV_NAME	("tconv");
+const string	DSET_COMPRESS_NAME("compressed");
+const string	DSET_BOGUS_NAME	("bogus");
+
+const int H5Z_FILTER_BOGUS = 305;
+
+// Local prototypes
+static size_t bogus(unsigned int flags, size_t cd_nelmts,
+    const unsigned int *cd_values, size_t nbytes, size_t *buf_size, void **buf);
+void cleanup_dsets(void);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_create
+ *
+ * Purpose:	Attempts to create a dataset.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Binh-Minh Ribler (using C version)
+ *		Friday, January 5, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_create( H5File& file)
+{
+    TESTING("create, open, close");
+
+    // Setting this to NULL for cleaning up in failure situations
+    DataSet *dataset = NULL;
+    try {
+	// Create a data space
+	hsize_t     dims[2];
+	dims[0] = 256;
+	dims[1] = 512;
+	DataSpace space (2, dims, NULL);
+
+	// Create a dataset using the default dataset creation properties.
+	// We're not sure what they are, so we won't check.
+	dataset = new DataSet (file.createDataSet
+		(DSET_DEFAULT_NAME, PredType::NATIVE_DOUBLE, space));
+
+	// Add a comment to the dataset
+	file.setComment (DSET_DEFAULT_NAME, "This is a dataset");
+
+	// Close the dataset
+	delete dataset;
+	dataset = NULL;
+
+	// Try creating a dataset that already exists.  This should fail since a
+	// dataset can only be created once.  If an exception is not thrown for
+	// this action by createDataSet, then throw an invalid action exception.
+	try {
+	    dataset = new DataSet (file.createDataSet
+			(DSET_DEFAULT_NAME, PredType::NATIVE_DOUBLE, space));
+
+	    // continuation here, that means no exception has been thrown
+	    throw InvalidActionException("H5File::createDataSet", "Library allowed overwrite of existing dataset");
+	}
+	catch (FileIException E)	// catching invalid creating dataset
+	{} // do nothing, exception expected
+
+	// Open the dataset we created above and then close it.  This is one
+	// way to open an existing dataset for accessing.
+	dataset = new DataSet (file.openDataSet (DSET_DEFAULT_NAME));
+
+	// Close the dataset when accessing is completed
+	delete dataset;
+
+	// This is another way to open an existing dataset for accessing.
+	DataSet another_dataset(file.openDataSet (DSET_DEFAULT_NAME));
+
+	// Try opening a non-existent dataset.  This should fail so if an
+	// exception is not thrown for this action by openDataSet, then
+	// display failure information and throw an exception.
+	try {
+	    dataset = new DataSet (file.openDataSet( "does_not_exist" ));
+
+	    // continuation here, that means no exception has been thrown
+	    throw InvalidActionException("H5File::openDataSet", "Attempted to open a non-existent dataset");
+	}
+	catch (FileIException E ) // catching creating non-existent dataset
+	{} // do nothing, exception expected
+
+	// Create a new dataset that uses chunked storage instead of the default
+	// layout.
+	DSetCreatPropList create_parms;
+	hsize_t     csize[2];
+	csize[0] = 5;
+	csize[1] = 100;
+	create_parms.setChunk( 2, csize );
+
+	dataset = new DataSet (file.createDataSet
+		(DSET_CHUNKED_NAME, PredType::NATIVE_DOUBLE, space, create_parms));
+	// Note: this one has no error message in C when failure occurs?
+
+	// clean up and return with success
+	delete dataset;
+
+	PASSED();
+	return 0;
+    }	// outer most try block
+
+    catch (InvalidActionException E)
+    {
+	cerr << " FAILED" << endl;
+	cerr << "    <<<  " << E.getDetailMsg() << "  >>>" << endl << endl;
+
+	// clean up and return with failure
+	if (dataset != NULL)
+	    delete dataset;
+	return -1;
+    }
+    // catch all other exceptions
+    catch (Exception E)
+    {
+	issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__);
+
+	// clean up and return with failure
+	if (dataset != NULL)
+	    delete dataset;
+	return -1;
+    }
+}   // test_create
+
+/*-------------------------------------------------------------------------
+ * Function:	check_values
+ *
+ * Purpose:	Checks a read value against the written value.  If they are
+ *		different, the function will print out a message and the
+ *		different values.  This function is made to reuse the code
+ *		segment that is used in various places throughout
+ *		test_compression and in test_simple_io.  Where the C version
+ *		of this code segment "goto error," this function will
+ *		return -1.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Binh-Minh Ribler (using C code segment for checking values)
+ *		Friday, February 6, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+check_values (hsize_t i, hsize_t j, int apoint, int acheck)
+{
+    if (apoint != acheck)
+    {
+	cerr << "    Read different values than written.\n" << endl;
+	cerr << "    At index " << (unsigned long)i << "," <<
+   	(unsigned long)j << endl;
+	return -1;
+    }
+    return 0;
+} // check_values
+
+/*-------------------------------------------------------------------------
+ * Function:	test_simple_io
+ *
+ * Purpose:	Tests simple I/O.  That is, reading and writing a complete
+ *		multi-dimensional array without data type or data space
+ *		conversions, without compression, and stored contiguously.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Binh-Minh Ribler (using C version)
+ *		Friday, January 5, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_simple_io( H5File& file)
+{
+
+    TESTING("simple I/O");
+
+    int	points[100][200];
+    int	check[100][200];
+    int		i, j, n;
+
+    // Initialize the dataset
+    for (i = n = 0; i < 100; i++)
+    {
+	for (j = 0; j < 200; j++) {
+	    points[i][j] = n++;
+	}
+    }
+
+    char* tconv_buf = new char [1000];
+    try
+    {
+	// Create the data space
+	hsize_t	dims[2];
+	dims[0] = 100;
+	dims[1] = 200;
+	DataSpace space (2, dims, NULL);
+
+	// Create a small conversion buffer to test strip mining
+	DSetMemXferPropList xfer;
+
+	xfer.setBuffer (1000, tconv_buf, NULL);
+
+	// Create the dataset
+	DataSet dataset (file.createDataSet (DSET_SIMPLE_IO_NAME, PredType::NATIVE_INT, space));
+
+	// Write the data to the dataset
+	dataset.write ((void*) points, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+
+	// Read the dataset back
+	dataset.read ((void*) check, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+
+	// Check that the values read are the same as the values written
+	for (i = 0; i < 100; i++)
+	    for (j = 0; j < 200; j++)
+	    {
+		int status = check_values (i, j, points[i][j], check[i][j]);
+		if (status == -1)
+		    throw Exception("DataSet::read");
+	    }
+
+	// clean up and return with success
+	delete [] tconv_buf;
+	PASSED();
+	return 0;
+    }  // end try
+
+    // catch all dataset, space, plist exceptions
+    catch (Exception E)
+    {
+	cerr << " FAILED" << endl;
+	cerr << "    <<<  " << E.getDetailMsg() << "  >>>" << endl << endl;
+
+	// clean up and return with failure
+	if (tconv_buf)
+	    delete [] tconv_buf;
+	return -1;
+    }
+}   // test_simple_io
+
+/*-------------------------------------------------------------------------
+ * Function:	test_tconv
+ *
+ * Purpose:	Test some simple data type conversion stuff.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Binh-Minh Ribler (using C version)
+ *		Friday, January 5, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_tconv( H5File& file)
+{
+    // Prepare buffers for input/output
+    char	*out=NULL, *in=NULL;
+    out = new char [4*1000000];
+    // assert (out); - should use exception handler for new - BMR
+    in = new char [4*1000000];
+    //assert (in);
+
+    TESTING("data type conversion");
+
+    // Initialize the dataset
+    for (int i = 0; i < 1000000; i++) {
+	out[i*4+0] = 0x11;
+	out[i*4+1] = 0x22;
+	out[i*4+2] = 0x33;
+	out[i*4+3] = 0x44;
+    }
+
+    try
+    {
+	// Create the data space
+	hsize_t	dims[1];
+	dims[0] = 1000000;
+	DataSpace space (1, dims, NULL);
+
+	// Create the data set
+	DataSet dataset (file.createDataSet (DSET_TCONV_NAME, PredType::STD_I32LE, space));
+
+	// Write the data to the dataset
+	dataset.write ((void*) out, PredType::STD_I32LE);
+
+	// Read data with byte order conversion
+	dataset.read ((void*) in, PredType::STD_I32BE);
+
+	// Check
+	for (int i = 0; i < 1000000; i++) {
+	    if (in[4*i+0]!=out[4*i+3] ||
+		in[4*i+1]!=out[4*i+2] ||
+		in[4*i+2]!=out[4*i+1] ||
+		in[4*i+3]!=out[4*i+0])
+	    {
+		throw Exception("DataSet::read", "Read with byte order conversion failed");
+	    }
+	}
+
+	// clean up and return with success
+	delete [] out;
+	delete [] in;
+	cerr << " PASSED" << endl;
+	return 0;
+    }  // end try
+
+    // catch all dataset and space exceptions
+    catch (Exception E)
+    {
+	cerr << " FAILED" << endl;
+	cerr << "    <<<  " << E.getDetailMsg() << "  >>>" << endl << endl;
+
+	// clean up and return with failure
+	delete [] out;
+	delete [] in;
+	return -1;
+    }
+}   // test_tconv
+
+/* This message derives from H5Z */
+const H5Z_class_t H5Z_BOGUS[1] = {{
+    H5Z_FILTER_BOGUS,		/* Filter id number		*/
+    "bogus",			/* Filter name for debugging	*/
+    NULL,		       /* The "can apply" callback     */
+    NULL,		       /* The "set local" callback     */
+    bogus,			/* The actual filter function	*/
+}};
+
+/*-------------------------------------------------------------------------
+ * Function:	bogus
+ *
+ * Purpose:	A bogus compression method that doesn't do anything.
+ *
+ * Return:	Success:	Data chunk size
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, April 21, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+/*bogus(unsigned int UNUSED flags, size_t UNUSED cd_nelmts,
+      const unsigned int UNUSED cd_values[], size_t nbytes,
+      size_t UNUSED *buf_size, void UNUSED **buf)
+BMR: removed UNUSED for now until asking Q. or R. to pass compilation*/
+bogus(unsigned int flags, size_t cd_nelmts,
+      const unsigned int cd_values[], size_t nbytes,
+      size_t *buf_size, void **buf)
+{
+    return nbytes;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_compression
+ *
+ * Purpose:	Tests dataset compression. If compression is requested when
+ *		it hasn't been compiled into the library (such as when
+ *		updating an existing compressed dataset) then data is sent to
+ *		the file uncompressed but no errors are returned.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Binh-Minh Ribler (using C version)
+ *		Friday, January 5, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_compression(H5File& file)
+{
+    const char		*not_supported;
+    not_supported = "    Deflate compression is not enabled.";
+    int		points[100][200];
+    int		check[100][200];
+    hsize_t	i, j, n;
+
+    // Initialize the dataset
+    for (i = n = 0; i < 100; i++)
+    {
+	for (j = 0; j < 200; j++) {
+	    points[i][j] = n++;
+	}
+    }
+    char* tconv_buf = new char [1000];
+    DataSet* dataset = NULL;
+    try
+    {
+	const hsize_t	size[2] = {100, 200};
+	// Create the data space
+	DataSpace space1(2, size, NULL);
+
+	// Create a small conversion buffer to test strip mining
+	DSetMemXferPropList xfer;
+
+	xfer.setBuffer (1000, tconv_buf, NULL);
+
+	// Use chunked storage with compression
+	DSetCreatPropList dscreatplist;
+
+	const hsize_t	chunk_size[2] = {2, 25};
+	dscreatplist.setChunk (2, chunk_size);
+	dscreatplist.setDeflate (6);
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+	TESTING("compression (setup)");
+
+	// Create the dataset
+	dataset = new DataSet (file.createDataSet
+	    (DSET_COMPRESS_NAME, PredType::NATIVE_INT, space1, dscreatplist));
+
+	PASSED();
+
+	/*----------------------------------------------------------------------
+	* STEP 1: Read uninitialized data.  It should be zero.
+	*----------------------------------------------------------------------
+	*/
+	TESTING("compression (uninitialized read)");
+
+	dataset->read ((void*) check, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+
+	for (i=0; i<size[0]; i++) {
+	    for (j=0; j<size[1]; j++) {
+		if (0!=check[i][j]) {
+		    H5_FAILED();
+		    cerr << "    Read a non-zero value." << endl;
+		    cerr << "    At index " << (unsigned long)i << "," <<
+		   (unsigned long)j << endl;
+		    throw Exception("test_compression", "Failed in uninitialized read");
+		}
+	    }
+	}
+	PASSED();
+
+	/*----------------------------------------------------------------------
+	* STEP 2: Test compression by setting up a chunked dataset and writing
+	* to it.
+	*----------------------------------------------------------------------
+	*/
+	TESTING("compression (write)");
+
+	for (i=n=0; i<size[0]; i++)
+	{
+	    for (j=0; j<size[1]; j++)
+	    {
+		points[i][j] = n++;
+	    }
+	}
+
+	dataset->write ((void*) points, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+
+	PASSED();
+
+	/*----------------------------------------------------------------------
+	* STEP 3: Try to read the data we just wrote.
+	*----------------------------------------------------------------------
+	*/
+	TESTING("compression (read)");
+
+	// Read the dataset back
+	dataset->read ((void*)check, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+
+	// Check that the values read are the same as the values written
+	for (i = 0; i < size[0]; i++)
+	    for (j = 0; j < size[1]; j++)
+	    {
+		int status = check_values (i, j, points[i][j], check[i][j]);
+		if (status == -1)
+		    throw Exception("test_compression", "Failed in read");
+	    }
+
+	PASSED();
+
+	/*----------------------------------------------------------------------
+	* STEP 4: Write new data over the top of the old data.  The new data is
+	* random thus not very compressible, and will cause the chunks to move
+	* around as they grow.  We only change values for the left half of the
+	* dataset although we rewrite the whole thing.
+	*----------------------------------------------------------------------
+	*/
+	TESTING("compression (modify)");
+
+	for (i=0; i<size[0]; i++)
+	{
+	    for (j=0; j<size[1]/2; j++)
+	    {
+	    	points[i][j] = rand ();
+	    }
+	}
+	dataset->write ((void*)points, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+
+	// Read the dataset back and check it
+	dataset->read ((void*)check, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+
+	// Check that the values read are the same as the values written
+	for (i = 0; i < size[0]; i++)
+	    for (j = 0; j < size[1]; j++)
+	    {
+		int status = check_values (i, j, points[i][j], check[i][j]);
+		if (status == -1)
+		    throw Exception("test_compression", "Failed in modify");
+	    }
+
+	PASSED();
+
+	/*----------------------------------------------------------------------
+	* STEP 5: Close the dataset and then open it and read it again.  This
+	* insures that the compression message is picked up properly from the
+	* object header.
+	*----------------------------------------------------------------------
+	*/
+	TESTING("compression (re-open)");
+
+	// close this dataset to reuse the var
+	delete dataset;
+
+	dataset = new DataSet (file.openDataSet (DSET_COMPRESS_NAME));
+	dataset->read ((void*)check, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+
+	// Check that the values read are the same as the values written
+	for (i = 0; i < size[0]; i++)
+	    for (j = 0; j < size[1]; j++)
+	    {
+		int status = check_values (i, j, points[i][j], check[i][j]);
+		if (status == -1)
+		    throw Exception("test_compression", "Failed in re-open");
+	    }
+
+	PASSED();
+
+
+	/*----------------------------------------------------------------------
+	* STEP 6: Test partial I/O by writing to and then reading from a
+	* hyperslab of the dataset.  The hyperslab does not line up on chunk
+	* boundaries (we know that case already works from above tests).
+	*----------------------------------------------------------------------
+	*/
+	TESTING("compression (partial I/O)");
+
+	const hsize_t	hs_size[2] = {4, 50};
+	const hsize_t	hs_offset[2] = {7, 30};
+	for (i = 0; i < hs_size[0]; i++) {
+	    for (j = 0; j < hs_size[1]; j++) {
+		points[hs_offset[0]+i][hs_offset[1]+j] = rand ();
+	    }
+	}
+	space1.selectHyperslab( H5S_SELECT_SET, hs_size, hs_offset );
+	dataset->write ((void*)points, PredType::NATIVE_INT, space1, space1, xfer);
+	dataset->read ((void*)check, PredType::NATIVE_INT, space1, space1, xfer);
+
+	// Check that the values read are the same as the values written
+	for (i=0; i<hs_size[0]; i++) {
+	for (j=0; j<hs_size[1]; j++) {
+	    if (points[hs_offset[0]+i][hs_offset[1]+j] !=
+		check[hs_offset[0]+i][hs_offset[1]+j]) {
+		H5_FAILED();
+		cerr << "    Read different values than written.\n" << endl;
+		cerr << "    At index " << (unsigned long)(hs_offset[0]+i) <<
+		   "," << (unsigned long)(hs_offset[1]+j) << endl;
+
+		cerr << "    At original: " << (int)points[hs_offset[0]+i][hs_offset[1]+j] << endl;
+		cerr << "    At returned: " << (int)check[hs_offset[0]+i][hs_offset[1]+j] << endl;
+		throw Exception("test_compression", "Failed in partial I/O");
+	    }
+	} // for j
+	} // for i
+
+	delete dataset;
+	dataset = NULL;
+
+	PASSED();
+
+#else
+	TESTING("deflate filter");
+	SKIPPED();
+	cerr << not_supported << endl;
+#endif
+
+	/*----------------------------------------------------------------------
+	* STEP 7: Register an application-defined compression method and use it
+	* to write and then read the dataset.
+	*----------------------------------------------------------------------
+	*/
+	TESTING("compression (app-defined method)");
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+	if (H5Zregister (H5Z_FILTER_BOGUS, "bogus", bogus)<0)
+	    throw Exception("test_compression", "Failed in app-defined method");
+#else /* H5_WANT_H5_V1_4_COMPAT */
+	if (H5Zregister (H5Z_BOGUS)<0)
+	    throw Exception("test_compression", "Failed in app-defined method");
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+	if (H5Pset_filter (dscreatplist.getId(), H5Z_FILTER_BOGUS, 0, 0, NULL)<0)
+	    throw Exception("test_compression", "Failed in app-defined method");
+	dscreatplist.setFilter (H5Z_FILTER_BOGUS, 0, 0, NULL);
+
+	DataSpace space2 (2, size, NULL);
+	dataset = new DataSet (file.createDataSet (DSET_BOGUS_NAME, PredType::NATIVE_INT, space2, dscreatplist));
+
+	dataset->write ((void*)points, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+	dataset->read ((void*)check, PredType::NATIVE_INT, DataSpace::ALL, DataSpace::ALL, xfer);
+
+	// Check that the values read are the same as the values written
+	for (i = 0; i < size[0]; i++)
+	    for (j = 0; j < size[1]; j++)
+	    {
+		int status = check_values (i, j, points[i][j], check[i][j]);
+		if (status == -1)
+		    throw Exception("test_compression", "Failed in app-defined method");
+	    }
+
+	PASSED();
+
+	/*----------------------------------------------------------------------
+	* Cleanup
+	*----------------------------------------------------------------------
+	*/
+	delete dataset;
+	delete [] tconv_buf;
+	return 0;
+    } // end try
+
+    // catch all dataset, file, space, and plist exceptions
+    catch (Exception E)
+    {
+	cerr << " FAILED" << endl;
+	cerr << "    <<<  " << E.getDetailMsg() << "  >>>" << endl << endl;
+
+	// clean up and return with failure
+	if (dataset != NULL)
+	    delete dataset;
+	if (tconv_buf)
+	    delete [] tconv_buf;
+	return -1;
+    }
+}   // test_compression
+
+/*-------------------------------------------------------------------------
+ * Function:	test_multiopen
+ *
+ * Purpose:	Tests that a bug no longer exists.  If a dataset is opened
+ *		twice and one of the handles is used to extend the dataset,
+ *		then the other handle should return the new size when
+ *		queried.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Binh-Minh Ribler (using C version)
+ *		Saturday, February 17, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_multiopen (H5File& file)
+{
+
+    TESTING("multi-open with extending");
+
+    DataSpace* space = NULL;
+    try {
+
+	// Create a dataset creation property list
+	DSetCreatPropList dcpl;
+
+	// Set chunk size to given size
+	hsize_t		cur_size[1] = {10};
+	dcpl.setChunk (1, cur_size);
+
+	// Create a simple data space with unlimited size
+	static hsize_t	max_size[1] = {H5S_UNLIMITED};
+	space = new DataSpace (1, cur_size, max_size);
+
+	// Create first dataset
+	DataSet dset1 = file.createDataSet ("multiopen", PredType::NATIVE_INT, *space, dcpl);
+
+	// Open again the first dataset from the file to another DataSet object.
+	DataSet dset2 = file.openDataSet ("multiopen");
+
+	// Relieve the dataspace
+	delete space;
+	space = NULL;
+
+	// Extend the dimensionality of the first dataset
+	cur_size[0] = 20;
+	dset1.extend (cur_size);
+
+	// Get the size from the second handle
+	space = new DataSpace (dset2.getSpace());
+
+	hsize_t		tmp_size[1];
+	space->getSimpleExtentDims (tmp_size);
+	if (cur_size[0]!=tmp_size[0])
+	{
+	    cerr << "    Got " << (int)tmp_size[0] << " instead of "
+		    << (int)cur_size[0] << "!" << endl;
+	    throw Exception("test_multiopen", "Failed in multi-open with extending");
+	}
+
+	// clean up and return with success
+	delete space;
+	PASSED();
+	return 0;
+    } // end try block
+
+    // catch all dataset, file, space, and plist exceptions
+    catch (Exception E)
+    {
+	cerr << " FAILED" << endl;
+	cerr << "    <<<  " << E.getDetailMsg() << "  >>>" << endl << endl;
+
+	// clean up and return with failure
+	if (space != NULL)
+	    delete space;
+	return -1;
+    }
+}   // test_multiopen
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_types
+ *
+ * Purpose:	Test various types - should be moved to dtypes.cpp
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:  Binh-Minh Ribler (using C version)
+ *		February 17, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_types(H5File& file)
+{
+    TESTING("various datatypes");
+
+    size_t		i;
+    DataSet* dset = NULL;
+    try {
+
+	// Create a group in the file that was passed in from the caller
+	Group grp = file.createGroup ("typetests");
+
+	/* bitfield_1 */
+	unsigned char	buf[32];
+	hsize_t nelmts = sizeof(buf);
+	DataType type;
+	try { // block of bitfield_1
+	    // test copying a predefined type
+	    type.copy (PredType::STD_B8LE);
+
+	    // Test copying a user-defined type using DataType::copy
+	    DataType copied_type;
+	    copied_type.copy(type);
+
+	    // Test copying a user-defined type using DataType::operator=
+	    DataType another_copied_type;
+	    another_copied_type = type;
+
+	    // Test copying a user-defined int type using DataType::operator=
+	    IntType orig_int(PredType::STD_B8LE);
+	    DataType generic_type;
+	    generic_type = orig_int;
+
+	    // Test copying an integer predefined type
+	    IntType new_int_type(PredType::STD_B8LE);
+
+	    // Test copying an int predefined type using DataType::operator=
+	    IntType another_int_type;
+	    another_int_type = new_int_type;
+
+	    DataSpace space (1, &nelmts);
+	    dset = new DataSet(grp.createDataSet("bitfield_1", type, space));
+
+	    // Fill buffer
+	    for (i=0; i<sizeof buf; i++)
+	    	buf[i] = (unsigned char)0xff ^ (unsigned char)i;
+
+	    // Write data from buf using all default dataspaces and property list
+	    dset->write (buf, type);
+
+	    // no failure in bitfield_1, close this dataset
+	    delete dset;
+	} // end try block of bitfield_1
+
+	// catch exceptions thrown in try block of bitfield_1
+	catch (Exception E)
+	{
+	    cerr << " FAILED" << endl;
+	    cerr << "    <<<  " << "bitfield_1: " << E.getFuncName()
+		 << " - " << E.getDetailMsg() << "  >>>" << endl << endl;
+	    if (dset != NULL)
+		delete dset;
+	    return -1;
+	}
+
+	/* bitfield_2 */
+	nelmts = sizeof(buf)/2;
+	try { // bitfield_2 block
+	    type.copy (PredType::STD_B16LE);
+	    DataSpace space (1, &nelmts);
+	    dset = new DataSet(grp.createDataSet("bitfield_2", type, space));
+
+	    // Fill buffer
+	    for (i=0; i<sizeof(buf); i++)
+		buf[i] = (unsigned char)0xff ^ (unsigned char)i;
+
+	    // Write data from buf using all default dataspaces and property
+	    // list; if writing fails, deallocate dset and return.
+	    dset->write (buf, type);
+
+	    // no failure in bitfield_2, close this dataset and reset for
+	    // variable reuse
+	    delete dset;
+	    dset = NULL;
+	} // end try block of bitfield_2
+
+	// catch exceptions thrown in try block of bitfield_2
+	catch (Exception E) {
+	    cerr << " FAILED" << endl;
+	    cerr << "    <<<  " << "bitfield_2: " << E.getFuncName()
+		 << " - " << E.getDetailMsg() << "  >>>" << endl << endl;
+	    if (dset != NULL)
+		delete dset;
+	    throw E; // propagate the exception
+	}
+
+	/* opaque_1 */
+	DataType* optype = NULL;
+	try { // opaque_1 block
+	    optype = new DataType(H5T_OPAQUE, 1);
+	    nelmts = sizeof(buf);
+	    DataSpace space (1, &nelmts);
+	    optype->setTag ("testing 1-byte opaque type");
+	    dset = new DataSet(grp.createDataSet("opaque_1", *optype, space));
+
+	    // Fill buffer
+	    for (i=0; i<sizeof buf; i++)
+		buf[i] = (unsigned char)0xff ^ (unsigned char)i;
+
+	    // Write data from buf using all default dataspaces and property
+	    // list; if writing fails, deallocate dset and return.
+	    dset->write (buf, *optype);
+
+	    // no failure in opaque_1
+	    delete dset; dset = NULL;
+	    delete optype; optype = NULL;
+	} // end try block of opaque_1
+
+	// catch exceptions thrown in try block of opaque_1
+	catch (Exception E) {
+	    cerr << " FAILED" << endl;
+	    cerr << "    <<<  " << "opaque_1: " << E.getFuncName()
+		 << " - " << E.getDetailMsg() << "  >>>" << endl << endl;
+	    if (dset != NULL)
+		delete dset;
+	    if (optype != NULL)
+		delete optype;
+	    throw E; // propagate the exception
+	}
+
+	/* opaque_2 */
+	try { // block opaque_2
+	    nelmts = sizeof(buf)/4;
+	    DataSpace space (1, &nelmts);
+	    optype = new DataType(H5T_OPAQUE, 4);
+	    optype->setTag ("testing 4-byte opaque type");
+	    dset = new DataSet(grp.createDataSet("opaque_2", *optype, space));
+
+	    // Fill buffer
+	    for (i=0; i<sizeof(buf); i++)
+		buf[i] = (unsigned char)0xff ^ (unsigned char)i;
+
+	    // Write data from buf using all default dataspaces and property
+	    // list; if writing fails, deallocate dset and return.
+	    dset->write (buf, *optype);
+
+	    // no failure in opaque_1
+	    delete dset; dset = NULL;
+	    delete optype; optype = NULL;
+	} //end try block of opaque_2
+
+	// catch exceptions thrown in try block of opaque_2
+	catch (Exception E) {
+	    cerr << " FAILED" << endl;
+	    cerr << "    <<<  " << "opaque_2: " << E.getFuncName()
+		 << " - " << E.getDetailMsg() << "  >>>" << endl << endl;
+	    if (dset != NULL)
+		delete dset;
+	    if (optype != NULL)
+		delete optype;
+	    throw E; // propagate the exception
+	}
+
+	PASSED();
+	return 0;
+    } // end top try block
+
+    catch (Exception E)
+    {
+	return -1;
+    }
+}   // test_types
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Tests the dataset interface (H5D)
+ *
+ * Return:	Success: 0
+ *
+ *		Failure: -1
+ *
+ * Programmer:	Binh-Minh Ribler (using C version)
+ *		Friday, January 5, 2001
+ *
+ * Modifications:
+ *	Nov 12, 01:
+ *		- moved h5_cleanup to outside of try block because
+ *		  dataset.h5 cannot be removed until "file" is out of
+ *		  scope and dataset.h5 is closed.
+ *	Feb 20, 05:
+ *		- cleanup_dsets took care of the cleanup now.
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    h5_reset(); // in h5test.c, resets the library by closing it
+
+    hid_t	fapl_id;
+    fapl_id = h5_fileaccess(); // in h5test.c, returns a file access template
+
+    int		nerrors=0;	// keep track of number of failures occurr
+    try
+    {
+	// Turn of the auto-printing when failure occurs so that we can
+	// handle the errors appropriately since sometime failures are
+	// caused deliberately and expected.
+	Exception::dontPrint();
+
+	// Use the file access template id to create a file access prop.
+	// list object to pass in H5File::H5File
+	FileAccPropList fapl(fapl_id);
+
+	H5File file(FILE1, H5F_ACC_TRUNC, FileCreatPropList::DEFAULT, fapl);
+
+	// Cause the library to emit initial messages
+	Group grp = file.createGroup( "emit diagnostics", 0);
+	grp.setComment( ".", "Causes diagnostic messages to be emitted");
+
+	nerrors += test_create(file)<0 	?1:0;
+	nerrors += test_simple_io(file)<0	?1:0;
+	nerrors += test_tconv(file)<0	?1:0;
+	nerrors += test_compression(file)<0	?1:0;
+	nerrors += test_multiopen (file)<0	?1:0;
+	nerrors += test_types(file)<0       ?1:0;
+    }
+    catch (Exception E)
+    {
+	return(test_report(nerrors, string(" Dataset")));
+    }
+
+    // Clean up data file
+    cleanup_dsets();
+
+    // Print out dsets test results
+    cerr << endl << endl;
+    return(test_report(nerrors, string(" Dataset")));
+}   // main
+
+/*-------------------------------------------------------------------------
+ * Function:    cleanup_dsets
+ *
+ * Purpose:     Cleanup temporary test files
+ *
+ * Return:      none
+ *
+ * Programmer:  (use C version)
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_dsets(void)
+{
+    remove(FILE1.c_str());
+} // cleanup_dsets
+

Added: packages/hdf5/branches/upstream/current/c++/test/h5cpputil.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/test/h5cpputil.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/test/h5cpputil.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,120 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*****************************************************************************
+   FILE
+   util.cpp - Utility routines for HDF5 C++ tests.
+
+   EXTERNAL ROUTINES/VARIABLES:
+
+ ***************************************************************************/
+
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+#include <string>
+
+#include "h5test.h"
+#include "H5Exception.h"
+#include "h5cpputil.h"
+
+#ifndef H5_NO_NAMESPACE
+using namespace H5;
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_report
+ *
+ * Purpose:	Prints out the number of errors for the tests indicated
+ * 		by 'testname,' if there were any failures occurred.  If
+ * 		no failure, test_report prints out the tests passed message.
+ *
+ * Return:	if any failure has occurred:	1
+ *
+ *		if no failure occurs:	0
+ *
+ * Programmer:	Binh-Minh Ribler (using C code segment for reporting tests)
+ *		Friday, February 6, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int test_report( int nerrors, const string& testname )
+{
+   if (nerrors)
+   {
+      nerrors = MAX(1, nerrors);
+	if (1 == nerrors)
+	    cerr << "***** " << nerrors << testname
+					<< " TEST FAILED! *****" << endl;
+	else
+	    cerr << "***** " << nerrors << testname
+					<< " TESTS FAILED! *****" << endl;
+      return 1;
+   }
+   else
+   {
+      cerr << "All" << testname << " tests passed." << endl;
+      return 0;
+   }
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	issue_fail_msg
+ *
+ * Purpose:	Displays that a function has failed with its location.
+ *
+ * Return:	None
+ *
+ * Programmer:	Binh-Minh Ribler (copied and modified macro CHECK from C)
+ *		Monday, December 20, 2004
+ *
+ *-------------------------------------------------------------------------
+ */
+void issue_fail_msg(const char* where, int line, const char* file_name,
+		    const char* message)
+{
+    if (GetTestVerbosity()>=VERBO_HI)
+    {
+        cerr << "--> From " << where << " at line " << line
+             << " in " << file_name << " - " << message << endl << endl;
+    }
+}
+
+//--------------------------------------------------------------------------
+// Function:    InvalidActionException default constructor
+//--------------------------------------------------------------------------
+InvalidActionException::InvalidActionException():Exception(){}
+
+//--------------------------------------------------------------------------
+// Function:    InvalidActionException overloaded constructor
+//
+// Purpose:	Creates an InvalidActionException with the name of the function,
+//              which the failure should have occurred but didn't, and a
+//		message explaining why it should fail.
+// Parameters
+//		func_name - IN: Name of the function where failure should occur
+//		message   - IN: Message
+//--------------------------------------------------------------------------
+InvalidActionException::InvalidActionException(const string func_name, const string message) : Exception(func_name, message) {}
+
+//--------------------------------------------------------------------------
+// Function:    InvalidActionException destructor
+//--------------------------------------------------------------------------
+InvalidActionException::~InvalidActionException() {}
+

Added: packages/hdf5/branches/upstream/current/c++/test/h5cpputil.h
===================================================================
--- packages/hdf5/branches/upstream/current/c++/test/h5cpputil.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/test/h5cpputil.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,79 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*****************************************************************************
+   FILE
+   h5cpputil.h - Header file of the utilities/misc for HDF5 C++ tests.
+
+   EXTERNAL ROUTINES/VARIABLES:
+
+ ***************************************************************************/
+
+#ifndef _h5cpputil_h
+#define _h5cpputil_h
+
+#include "h5test.h"
+
+#ifndef H5_NO_NAMESPACE
+using namespace H5;
+#endif
+
+#ifndef H5_NO_STD
+int test_report (int, const std::string&);
+using std::cerr;
+using std::endl;
+#else
+int test_report (int, const string&);
+#endif
+
+void issue_fail_msg(const char* where, int line, const char* file_name,
+		    const char* message="");
+
+template <class Type1, class Type2>
+    void verify_val(Type1 x, Type2 value, const char* where, int line, const char* file_name)
+{
+    if (GetTestVerbosity()>=VERBO_HI)
+    {
+        cerr << "   Call to routine: " << where << " at line " << line
+	     << " in " << file_name <<  " had value " << x << endl;
+    }
+    if (x != value)
+    {
+        cerr << "*** UNEXPECTED VALUE from " << where << " should be "
+	     << value << ", but is " << x << " at line " << line
+	     << " in " << file_name << endl;
+	IncTestNumErrs();
+    }
+}
+
+template <class Type1, class Type2>
+    void verify_val(Type1 x, Type2 value, const char* msg, const char* file_name, int line)
+{
+    if (x != value)
+    {
+        cerr << "*** UNEXPECTED VALUE: " << file_name << ":line " << line
+	     << ":" << msg << " different: " << x << ", should be " << value
+	     << endl;
+	IncTestNumErrs();
+    }
+}
+
+class InvalidActionException : public Exception {
+   public:
+	InvalidActionException(const string func_name, const string message = DEFAULT_MSG);
+	InvalidActionException();
+	virtual ~InvalidActionException();
+};
+
+#endif

Added: packages/hdf5/branches/upstream/current/c++/test/testhdf5.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/test/testhdf5.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/test/testhdf5.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,95 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*****************************************************************************
+   FILE
+   testhdf5.cpp - HDF5 testing framework main file.
+
+   REMARKS
+   General test wrapper for HDF5 C++ library test programs
+
+   DESIGN
+   Each test function should be implemented as function having no
+   parameters and returning void (i.e. no return value).  They should be put
+   into the list of AddTest() calls in main() below.  Functions which depend
+   on other functionality should be placed below the AddTest() call for the
+   base functionality testing.
+   Each test module should include testhdf5.h and define a unique set of
+   names for test files they create.
+
+   EXTERNAL ROUTINES/VARIABLES:
+	TestInit(...) -- Initialize testing framework
+	TestInfo(...) -- Print test info
+	AddTest(...)  -- Setup a test function and add it to the list of tests
+	TestParseCmdLine(...) -- Parse command line arguments
+	PerformTests() -- Perform requested testing
+	GetTestSummary() -- Retrieve Summary request value
+	TestSummary() -- Display test summary
+	GetTestCleanup() -- Retrieve Cleanup request value
+	TestCleanup() -- Clean up files from testing
+	GetTestNumErrs() -- Retrieve the number of testing errors
+
+ ***************************************************************************/
+
+// Use C version of the header file testhdf5.h instead of re-coding it
+#include "testhdf5.h"
+
+#include "H5Cpp.h"
+
+#ifndef H5_NO_NAMESPACE
+using namespace H5;
+#endif  /* !H5_NO_NAMESPACE */
+
+int
+main(int argc, char *argv[])
+{
+    /* Initialize testing framework */
+    TestInit(argv[0], NULL, NULL);
+
+    // testing file creation and opening in tfile.cpp
+    AddTest("file", test_file, cleanup_file, "File I/O Operations", NULL);
+    // testing dataspace functionalities in th5s.cpp
+    AddTest("h5s",  test_h5s,  cleanup_h5s,  "Dataspaces", NULL);
+
+/* Comment out tests that are not done yet. - BMR, Feb 2001
+    AddTest("attr", test_attr, cleanup_attr,  "Attributes", NULL);
+    AddTest("select", test_select, cleanup_select,  "Selections", NULL);
+    AddTest("time", test_time, cleanup_time,  "Time Datatypes", NULL);
+    AddTest("reference", test_reference, cleanup_reference,  "References", NULL);
+    AddTest("vltypes", test_vltypes, cleanup_vltypes,  "Variable-Length Datatypes", NULL);
+    AddTest("vlstrings", test_vlstrings, cleanup_vlstrings,  "Variable-Length Strings", NULL);
+    AddTest("iterate", test_iterate, cleanup_iterate,  "Group & Attribute Iteration", NULL);
+    AddTest("array", test_array, cleanup_array,  "Array Datatypes", NULL);
+    AddTest("genprop", test_genprop, cleanup_genprop,  "Generic Properties", NULL);
+Comment out tests that are not done yet */
+
+    /* Display testing information */
+    TestInfo(argv[0]);
+
+    /* Parse command line arguments */
+    TestParseCmdLine(argc,argv);
+
+    /* Perform requested testing */
+    PerformTests();
+
+    /* Display test summary, if requested */
+    if (GetTestSummary())
+        TestSummary();
+
+    /* Clean up test files, if allowed */
+    if (GetTestCleanup() && !getenv("HDF5_NOCLEANUP"))
+        TestCleanup();
+
+    return (GetTestNumErrs());
+}

Added: packages/hdf5/branches/upstream/current/c++/test/tfile.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/test/tfile.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/test/tfile.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,549 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*****************************************************************************
+   FILE
+   tfile.cpp - HDF5 C++ testing the file I/O features
+
+   EXTERNAL ROUTINES/VARIABLES:
+     These routines are in the test directory of the C library:
+        h5_fileaccess() -- in h5test.c, returns a file access template
+
+ ***************************************************************************/
+
+#include <string>
+
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+
+#include "testhdf5.h"	// C test header file
+#include "H5Cpp.h"	// C++ API header file
+
+#ifndef H5_NO_NAMESPACE
+using namespace H5;
+#endif
+
+#include "h5cpputil.h"	// C++ utilility header file
+
+const hsize_t F1_USERBLOCK_SIZE = (hsize_t)0;
+const size_t F1_OFFSET_SIZE = sizeof(haddr_t);
+const size_t F1_LENGTH_SIZE = sizeof(hsize_t);
+#ifdef H5_WANT_H5_V1_4_COMPAT
+const int F1_SYM_LEAF_K  = 4;
+const int F1_SYM_INTERN_K = 16;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+const unsigned F1_SYM_LEAF_K  = 4;
+const unsigned F1_SYM_INTERN_K = 16;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+const string    FILE1("tfile1.h5");
+
+const hsize_t F2_USERBLOCK_SIZE = (hsize_t)512;
+const size_t F2_OFFSET_SIZE = 8;
+const size_t F2_LENGTH_SIZE = 8;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+const int F2_SYM_LEAF_K  = 4;
+const int F2_SYM_INTERN_K = 32;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+const unsigned F2_SYM_LEAF_K  = 4;
+const unsigned F2_SYM_INTERN_K = 32;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+const string    FILE2("tfile2.h5");
+
+const hsize_t F3_USERBLOCK_SIZE = (hsize_t)0;
+const size_t F3_OFFSET_SIZE = F2_OFFSET_SIZE;
+const size_t F3_LENGTH_SIZE = F2_LENGTH_SIZE;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+const int F3_SYM_LEAF_K  = F2_SYM_LEAF_K;
+const int F3_SYM_INTERN_K = F2_SYM_INTERN_K;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+const unsigned F3_SYM_LEAF_K  = F2_SYM_LEAF_K;
+const unsigned F3_SYM_INTERN_K = F2_SYM_INTERN_K;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+const string    FILE3("tfile3.h5");
+
+const int KB =  1024;
+const string    FILE4("tfile4.h5");
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_file_create
+ *
+ * Purpose:     Test file and template creations
+ *
+ * Return:      None
+ *
+ * Programmer:  Binh-Minh Ribler (use C version)
+ *              January, 2001
+ *
+ * Modifications:
+ *	January, 2005: C tests' macro VERIFY casts values to 'long' for all
+ *		       cases.  Since there are no operator<< for 'long long'
+ *		       or int64 in VS C++ ostream, I casted the hsize_t values
+ *		       passed to verify_val to 'long' as well.  If problems
+ *		       arises later, this will have to be specificly handled
+ *		       with a special routine.
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+test_file_create(void)
+{
+    // Output message about test being performed
+    MESSAGE(5, ("Testing File Creation I/O\n"));
+
+    // Test create with various sequences of H5F_ACC_EXCL and
+    // H5F_ACC_TRUNC flags
+
+    // Create with H5F_ACC_EXCL
+    // First ensure the file does not exist
+    remove(FILE1.c_str());
+
+    // Setting this to NULL for cleaning up in failure situations
+    H5File* file1 = NULL;
+    try {
+	// Create file FILE1
+	file1 = new H5File (FILE1, H5F_ACC_EXCL);
+
+	// try to create the same file with H5F_ACC_TRUNC. This should fail
+	// because file1 is the same file and is currently open.
+	try {
+	    H5File file2 (FILE1, H5F_ACC_TRUNC);  // should throw E
+
+	    // Should FAIL but didn't, so throw an invalid action exception
+	    throw InvalidActionException("H5File constructor", "Attempted to create an existing file.");
+	}
+	catch( FileIException E ) // catch truncating existing file
+	{} // do nothing, FAIL expected
+
+	// Close file1
+	delete file1;
+	file1 = NULL;
+
+	// Try again with H5F_ACC_EXCL. This should fail because the file
+	// already exists from the previous steps.
+	try {
+	    H5File file2(FILE1, H5F_ACC_EXCL);  // should throw E
+
+	    // Should FAIL but didn't, so throw an invalid action exception
+	    throw InvalidActionException("H5File constructor", "File already exists.");
+	}
+	catch( FileIException E ) // catching creating existing file
+	{} // do nothing, FAIL expected
+
+    	// Test create with H5F_ACC_TRUNC. This will truncate the existing file.
+	file1 = new H5File (FILE1, H5F_ACC_TRUNC);
+
+	// Try to truncate first file again. This should fail because file1
+	// is the same file and is currently open.
+    	try {
+	    H5File file2 (FILE1, H5F_ACC_TRUNC);   // should throw E
+
+	    // Should FAIL but didn't, so throw an invalid action exception
+	    throw InvalidActionException("H5File constructor", "H5F_ACC_TRUNC attempt on an opened file.");
+	}
+	catch( FileIException E ) // catching truncating opened file
+	{} // do nothing, FAIL expected
+
+     	// Try with H5F_ACC_EXCL. This should fail too because the file already
+     	// exists.
+    	try {
+	    H5File file3 (FILE1, H5F_ACC_EXCL);  // should throw E
+
+	    // Should FAIL but didn't, so throw an invalid action exception
+	    throw InvalidActionException("H5File constructor", "H5F_ACC_EXCL attempt on an existing file.");
+    	}
+	catch( FileIException E ) // catching H5F_ACC_EXCL on existing file
+	{} // do nothing, FAIL expected
+
+    	// Get the file-creation template
+	FileCreatPropList tmpl1 = file1->getCreatePlist();
+
+	hsize_t ublock = tmpl1.getUserblock();
+	verify_val((long)ublock, (long)F1_USERBLOCK_SIZE, "FileCreatPropList::getUserblock", __LINE__, __FILE__);
+
+    	size_t  parm1, parm2;	// file-creation parameters
+	tmpl1.getSizes( parm1, parm2);
+	verify_val(parm1, F1_OFFSET_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__);
+	verify_val(parm2, F1_LENGTH_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__);
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    	int iparm1, iparm2;	// file-creation parameters
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    	unsigned  iparm1, iparm2;	// file-creation parameters
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    	tmpl1.getSymk( iparm1, iparm2);
+	verify_val(iparm1, F1_SYM_INTERN_K, "FileCreatPropList::getSymk", __LINE__, __FILE__);
+	verify_val(iparm2, F1_SYM_LEAF_K, "FileCreatPropList::getSymk", __LINE__, __FILE__);
+
+	// tmpl1 is automatically closed; if error occurs, it'll be
+	// caught in the catch block
+
+	// Close first file
+	delete file1;
+    }
+
+    catch (InvalidActionException E)
+    {
+        cerr << " FAILED" << endl;
+        cerr << "    <<<  " << E.getDetailMsg() << "  >>>" << endl << endl;
+        if (file1 != NULL) // clean up
+            delete file1;
+    }
+    // catch all other exceptions
+    catch (Exception E)
+    {
+	issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__, E.getCDetailMsg());
+        if (file1 != NULL) // clean up
+            delete file1;
+    }
+
+    // Setting this to NULL for cleaning up in failure situations
+    FileCreatPropList* tmpl1 = NULL;
+    try
+    {
+    	// Create a new file with a non-standard file-creation template
+	tmpl1 = new FileCreatPropList;
+
+    	// Set the new file-creation parameters
+	tmpl1->setUserblock (F2_USERBLOCK_SIZE);
+	tmpl1->setSizes( F2_OFFSET_SIZE, F2_LENGTH_SIZE );
+	tmpl1->setSymk( F2_SYM_INTERN_K, F2_SYM_LEAF_K );
+
+     	// Try to create second file, with non-standard file-creation template
+     	// params.
+	H5File file2( FILE2, H5F_ACC_TRUNC, *tmpl1 );
+
+    	// Release file-creation template
+	delete tmpl1;
+	tmpl1 = NULL;
+
+	// Get the file-creation template
+	tmpl1 = new FileCreatPropList (file2.getCreatePlist());
+
+	// Get the file-creation parameters
+	hsize_t ublock = tmpl1->getUserblock();
+	verify_val((long)ublock, (long)F2_USERBLOCK_SIZE, "FileCreatPropList::getUserblock", __LINE__, __FILE__);
+
+    	size_t  parm1, parm2;		// file-creation parameters
+	tmpl1->getSizes( parm1, parm2);
+	verify_val(parm1, F2_OFFSET_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__);
+	verify_val(parm2, F2_LENGTH_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__);
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    	int  iparm1, iparm2;	// file-creation parameters
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    	unsigned  iparm1, iparm2;	// file-creation parameters
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    	tmpl1->getSymk( iparm1, iparm2);
+	verify_val(iparm1, F2_SYM_INTERN_K, "FileCreatPropList::getSymk", __LINE__, __FILE__);
+	verify_val(iparm2, F2_SYM_LEAF_K, "FileCreatPropList::getSymk", __LINE__, __FILE__);
+
+	// Clone the file-creation template
+	FileCreatPropList tmpl2;
+	tmpl2.copy (*tmpl1);
+
+	// Release file-creation template
+	delete tmpl1;
+	tmpl1 = NULL;
+
+	// Set the new file-creation parameter
+	tmpl2.setUserblock( F3_USERBLOCK_SIZE );
+
+	// Try to create second file, with non-standard file-creation template
+	// params
+	H5File file3( FILE3, H5F_ACC_TRUNC, tmpl2 );
+
+	// Get the file-creation template
+	tmpl1 = new FileCreatPropList (file3.getCreatePlist());
+
+	// Get the file-creation parameters
+	ublock = tmpl1->getUserblock();
+	verify_val((long)ublock, (long)F3_USERBLOCK_SIZE, "FileCreatPropList::getUserblock", __LINE__, __FILE__);
+
+	tmpl1->getSizes( parm1, parm2);
+	verify_val(parm1, F3_OFFSET_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__);
+	verify_val(parm2, F3_LENGTH_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__);
+
+    	tmpl1->getSymk( iparm1, iparm2);
+	verify_val(iparm1, F3_SYM_INTERN_K, "FileCreatPropList::getSymk", __LINE__, __FILE__);
+	verify_val(iparm2, F3_SYM_LEAF_K, "FileCreatPropList::getSymk", __LINE__, __FILE__);
+
+	// Release file-creation template
+	delete tmpl1;
+    }
+    // catch all exceptions
+    catch (Exception E)
+    {
+	issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__, E.getCDetailMsg());
+	if (tmpl1 != NULL)  // clean up
+	    delete tmpl1;
+    }
+}   // test_file_create()
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_file_open
+ *
+ * Purpose:     Test file accesses
+ *
+ * Return:      None
+ *
+ * Programmer:  Binh-Minh Ribler (use C version)
+ *              January, 2001
+ *
+ * Modifications:
+ *	January, 2005: C tests' macro VERIFY casts values to 'long' for all
+ *		       cases.  Since there are no operator<< for 'long long'
+ *		       or int64 in VS C++ ostream, I casted the hsize_t values
+ *		       passed to verify_val to 'long' as well.  If problems
+ *		       arises later, this will have to be specificly handled
+ *		       with a special routine.
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+test_file_open(void)
+{
+    // Output message about test being performed
+    MESSAGE(5, ("Testing File Opening I/O\n"));
+
+    try {
+
+	// Open first file
+	H5File file1 (FILE2, H5F_ACC_RDWR );
+
+	// Get the file-creation template
+	FileCreatPropList tmpl1 = file1.getCreatePlist();
+
+	// Get the file-creation parameters
+	hsize_t ublock = tmpl1.getUserblock();
+	verify_val((long)ublock, (long)F2_USERBLOCK_SIZE, "FileCreatPropList::getUserblock", __LINE__, __FILE__);
+	verify_val((long)ublock, (long)F2_USERBLOCK_SIZE, "FileCreatPropList::getUserblock", __LINE__, __FILE__);
+
+    	size_t  parm1, parm2;		// file-creation parameters
+	tmpl1.getSizes( parm1, parm2);
+	verify_val(parm1, F2_OFFSET_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__);
+	verify_val(parm2, F2_LENGTH_SIZE, "FileCreatPropList::getSizes", __LINE__, __FILE__);
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+	int  iparm1, iparm2;       // file-creation parameters
+#else /* H5_WANT_H5_V1_4_COMPAT */
+	unsigned  iparm1, iparm2;       // file-creation parameters
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+	tmpl1.getSymk( iparm1, iparm2);
+	verify_val(iparm1, F2_SYM_INTERN_K, "FileCreatPropList::getSymk", __LINE__, __FILE__);
+	verify_val(iparm2, F2_SYM_LEAF_K, "FileCreatPropList::getSymk", __LINE__, __FILE__);
+    }   // end of try block
+
+    catch( Exception E ) {
+        issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__, E.getCDetailMsg());
+    }
+}   // test_file_open()
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_file_size
+ *
+ * Purpose:     Test file size.
+ *
+ * Return:      None
+ *
+ * Programmer:  Raymond Lu
+ *              June, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+test_file_size(void)
+{
+    // Output message about test being performed
+    MESSAGE(5, ("Testing File Size\n"));
+
+    hid_t	fapl_id;
+    fapl_id = h5_fileaccess(); // in h5test.c, returns a file access template
+
+    try {
+        // Use the file access template id to create a file access prop.
+        // list object to pass in H5File::H5File
+        FileAccPropList fapl(fapl_id);
+
+    	// Set to sec2 driver.  Do we want to test other file drivers?
+        // They're not tested in C++.
+        // File drivers seem not implemented.
+	// fapl.setSec2();
+
+        // Create a file
+	H5File file4( FILE4, H5F_ACC_TRUNC, FileCreatPropList::DEFAULT, fapl);
+
+        // Get file size
+        hsize_t file_size = file4.getFileSize();
+
+        // Check if file size is reasonable.  It's supposed to be 2KB now.
+        if(file_size<1*KB || file_size>4*KB)
+            issue_fail_msg("H5File::getFileSize", __LINE__, __FILE__);
+    }   // end of try block
+
+    catch( Exception E ) {
+        issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__, E.getCDetailMsg());
+    }
+
+    // use C test utility routine to close property list.
+    H5Pclose(fapl_id);
+
+}   // test_file_size()
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_file_name
+ *
+ * Purpose:     Test getting file's name.
+ *
+ * Return:      None
+ *
+ * Programmer:  Binh-Minh Ribler
+ *              July, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+const int	RANK = 2;
+const int	NX = 4;
+const int	NY = 5;
+const string	GROUPNAME ("group");
+const string	DSETNAME ("dataset");
+const string	ATTRNAME ("attribute");
+const string	DTYPENAME ("compound");
+
+// Compound datatype
+typedef struct s1_t {
+    unsigned int a;
+    float        b;
+} s1_t;
+
+static void
+test_file_name()
+{
+    // Output message about test being performed
+    MESSAGE(5, ("Testing File Name\n"));
+
+    string file_name;
+    try {
+        // Create a file using default properties.
+	H5File file4(FILE4, H5F_ACC_TRUNC);
+
+        // Get file name from the file instance.
+        file_name = file4.getFileName();
+	verify_val(file_name, FILE4, "H5File::getFileName", __LINE__, __FILE__);
+
+	// Create a group in the root group
+	Group group(file4.createGroup(GROUPNAME, 0));
+
+	// Get and verify file name
+	file_name = group.getFileName();
+	verify_val(file_name, FILE4, "Group::getFileName", __LINE__, __FILE__);
+
+	// Create the data space
+	hsize_t dims[RANK] = {NX, NY};
+	DataSpace space(RANK, dims);
+
+	// Create a new dataset
+	DataSet dataset(file4.createDataSet (DSETNAME, PredType::NATIVE_INT, space));
+
+	// Get and verify file name
+	file_name = dataset.getFileName();
+	verify_val(file_name, FILE4, "DataSet::getFileName", __LINE__, __FILE__);
+
+	// Create an attribute for the dataset
+	Attribute attr(dataset.createAttribute(ATTRNAME, PredType::NATIVE_INT, space));
+
+	// Get and verify file name
+	file_name = attr.getFileName();
+	verify_val(file_name, FILE4, "Attribute::getFileName", __LINE__, __FILE__);
+
+	// Create a compound datatype
+	CompType comp_type (sizeof(s1_t));
+
+	// Insert fields
+	comp_type.insertMember("a", HOFFSET(s1_t, a), PredType::NATIVE_INT);
+	comp_type.insertMember("b", HOFFSET(s1_t, b), PredType::NATIVE_FLOAT);
+
+	// Save it on file
+	comp_type.commit(file4, DTYPENAME);
+
+	// Get and verify file name
+	comp_type.getFileName();
+	verify_val(file_name, FILE4, "CompType::getFileName", __LINE__, __FILE__);
+    }   // end of try block
+
+    catch (Exception E) {
+        issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__, E.getCDetailMsg());
+    }
+
+}   // test_file_name()
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_file
+ *
+ * Purpose:     Main file testing routine
+ *
+ * Return:      None
+ *
+ * Programmer:  Binh-Minh Ribler (use C version)
+ *              January 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+test_file(void)
+{
+    // Output message about test being performed
+    MESSAGE(5, ("Testing File I/O operations\n"));
+
+    test_file_create();	// Test file creation (also creation templates)
+    test_file_open();	// Test file opening
+    test_file_size();	// Test file size
+    test_file_name();	// Test getting file's name
+}   // test_file()
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_file
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:  (use C version)
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_file(void)
+{
+    remove(FILE1.c_str());
+    remove(FILE2.c_str());
+    remove(FILE3.c_str());
+    remove(FILE4.c_str());
+}   // cleanup_file

Added: packages/hdf5/branches/upstream/current/c++/test/th5s.cpp
===================================================================
--- packages/hdf5/branches/upstream/current/c++/test/th5s.cpp	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/c++/test/th5s.cpp	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,561 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*****************************************************************************
+   FILE
+   th5s.cpp - HDF5 C++ testing the functionalities associated with the
+        C dataspace interface (H5S)
+
+   EXTERNAL ROUTINES/VARIABLES:
+
+ ***************************************************************************/
+
+#ifdef OLD_HEADER_FILENAME
+#include <iostream.h>
+#else
+#include <iostream>
+#endif
+
+#include "testhdf5.h"	// C test header file
+#include "H5Cpp.h"	// C++ API header file
+
+#ifndef H5_NO_NAMESPACE
+using namespace H5;
+#endif
+
+#include "h5cpputil.h"	// C++ utilility header file
+
+const string    TESTFILE("th5s.h5");
+const string    DATAFILE("th5s1.h5");
+
+/* 3-D dataset with fixed dimensions */
+const string SPACE1_NAME("Space1");
+const int SPACE1_RANK = 3;
+const int SPACE1_DIM1 = 3;
+const int SPACE1_DIM2 = 15;
+const int SPACE1_DIM3 = 13;
+
+/* 4-D dataset with one unlimited dimension */
+const string SPACE2_NAME("Space2");
+const int SPACE2_RANK = 4;
+const int SPACE2_DIM1 = 0;
+const int SPACE2_DIM2 = 15;
+const int SPACE2_DIM3 = 13;
+const int SPACE2_DIM4 = 23;
+const hsize_t SPACE2_MAX1 = H5S_UNLIMITED;
+const hsize_t SPACE2_MAX2 = 15;
+const hsize_t SPACE2_MAX3 = 13;
+const hsize_t SPACE2_MAX4 = 23;
+
+/* Scalar dataset with simple datatype */
+const string SPACE3_NAME("Scalar1");
+const int SPACE3_RANK = 0;
+unsigned space3_data=65;
+
+/* Scalar dataset with compound datatype */
+const string SPACE4_NAME("Scalar2");
+const int SPACE4_RANK = 0;
+const string SPACE4_FIELDNAME1("c1");
+const string SPACE4_FIELDNAME2("u");
+const string SPACE4_FIELDNAME3("f");
+const string SPACE4_FIELDNAME4("c2");
+size_t space4_field1_off=0;
+size_t space4_field2_off=0;
+size_t space4_field3_off=0;
+size_t space4_field4_off=0;
+struct space4_struct {
+    char c1;
+    unsigned u;
+    float f;
+    char c2;
+ } space4_data={'v',987123,(float)-3.14,'g'}; /* Test data for 4th dataspace */
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:	test_h5s_basic
+ *
+ * Purpose:	Test basic H5S (dataspace) code
+ *
+ * Return:	none
+ *
+ * Programmer:	Binh-Minh Ribler (using C version)
+ *              Mar 2001
+ *
+ * Modifications:
+ *      January, 2005: C tests' macro VERIFY casts values to 'long' for all
+ *		       cases.  Since there are no operator<< for 'long long'
+ *		       or int64 in VS C++ ostream, I casted the hssize_t values
+ *		       passed to verify_val to 'long' as well.  If problems
+ *		       arises later, this will have to be specificly handled
+ *		       with a special routine.
+ *-------------------------------------------------------------------------
+ */
+static void
+test_h5s_basic(void)
+{
+    hsize_t		dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    hsize_t		dims2[] = {SPACE2_DIM1, SPACE2_DIM2, SPACE2_DIM3,
+				   SPACE2_DIM4};
+    hsize_t		dims3[H5S_MAX_RANK+1];
+    hsize_t		tmax[4];
+
+    // Output message about test being performed
+    MESSAGE(5, ("Testing Dataspace Manipulation\n"));
+
+    try
+    { // beginning of first try block
+
+	// Create simple dataspace sid1
+	DataSpace sid1 (SPACE1_RANK, dims1 );
+
+	// Get simple extent npoints of the dataspace sid1 and verify it
+	hssize_t	n;	 	// Number of dataspace elements
+	n = sid1.getSimpleExtentNpoints();
+	verify_val((long)n, (long)(SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3),
+	   "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__);
+
+	// Get the logical rank of dataspace sid1 and verify it
+	int	rank;		// Logical rank of dataspace
+	rank = sid1.getSimpleExtentNdims();
+	verify_val(rank, SPACE1_RANK, "DataSpace::getSimpleExtentNdims", __LINE__, __FILE__);
+
+	// Retrieves dimension size of dataspace sid1 and verify it
+	int ndims;		// Number of dimensions
+	hsize_t	tdims[4];	// Dimension array to test with
+	ndims = sid1.getSimpleExtentDims( tdims );
+	verify_val(HDmemcmp(tdims, dims1, SPACE1_RANK * sizeof(unsigned)), 0,
+	   "DataSpace::getSimpleExtentDims", __LINE__, __FILE__);
+
+	// Create simple dataspace sid2
+	hsize_t	max2[] = {SPACE2_MAX1, SPACE2_MAX2, SPACE2_MAX3, SPACE2_MAX4};
+	DataSpace sid2 (SPACE2_RANK, dims2, max2);
+
+	// Get simple extent npoints of dataspace sid2 and verify it
+	n = sid2.getSimpleExtentNpoints();
+	verify_val((long)n, (long)(SPACE2_DIM1 * SPACE2_DIM2 * SPACE2_DIM3 * SPACE2_DIM4),
+	   "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__);
+
+	// Get the logical rank of dataspace sid2 and verify it
+	rank = sid2.getSimpleExtentNdims();
+	verify_val(rank, SPACE2_RANK, "DataSpace::getSimpleExtentNdims", __LINE__, __FILE__);
+
+	// Retrieves dimension size and max size of dataspace sid2 and
+	// verify them
+	ndims = sid2.getSimpleExtentDims( tdims, tmax );
+	verify_val(HDmemcmp(tdims, dims2, SPACE2_RANK * sizeof(unsigned)), 0,
+	   "DataSpace::getSimpleExtentDims", __LINE__, __FILE__);
+	verify_val(HDmemcmp(tmax, max2, SPACE2_RANK * sizeof(unsigned)), 0,
+	   "DataSpace::getSimpleExtentDims", __LINE__, __FILE__);
+
+	// Check to be sure we can't create a simple data space that has too
+	// many dimensions.
+	try {
+	    DataSpace manydims_ds(H5S_MAX_RANK+1, dims3, NULL);
+
+	    // Should FAIL but didn't, so throw an invalid action exception
+	    throw InvalidActionException("DataSpace constructor", "Library allowed overwrite of existing dataset");
+	}
+	catch( DataSpaceIException E ) // Simple data space with too many dims
+	{} // do nothing, exception expected
+
+       /*
+	* Try reading a file that has been prepared that has a dataset with a
+	* higher dimensionality than what the library can handle.
+	*
+	* If this test fails and the H5S_MAX_RANK variable has changed, follow
+	* the instructions in space_overflow.c for regenating the th5s.h5 file.
+	*/
+	char testfile[512]="";
+	char *srcdir = getenv("srcdir");
+	if (srcdir && ((strlen(srcdir) + strlen(TESTFILE.c_str()) + 1) < sizeof(testfile))){
+	    strcpy(testfile, srcdir);
+	    strcat(testfile, "/");
+	}
+	strcat(testfile, TESTFILE.c_str());
+
+	// Create file
+	H5File fid1(testfile, H5F_ACC_RDONLY);
+
+	// Try to open the dataset that has higher dimensionality than
+	// what the library can handle and this operation should fail.
+	try {
+	    DataSet dset1 = fid1.openDataSet( "dset" );
+
+	    // Should FAIL but didn't, so throw an invalid action exception
+	    throw InvalidActionException("H5File::openDataSet", "Opening a dataset with higher dimensionality than what the library can handle");
+	}
+	catch( FileIException E ) // catching higher dimensionality dataset
+	{} // do nothing, exception expected
+
+    // CHECK_I(ret, "H5Fclose");  // leave this here, later, fake a failure
+		// in the p_close see how this will handle it. - BMR
+
+    // Verify that incorrect dimensions don't work
+	dims1[0] = 0;
+	try {
+	    DataSpace wrongdim_ds (SPACE1_RANK, dims1);
+
+	    // Should FAIL but didn't, so throw an invalid action exception
+	    throw InvalidActionException("DataSpace constructor", "Attempted to use incorrect dimensions");
+	}
+	catch( DataSpaceIException E ) // catching use of incorrect dimensions
+	{} // do nothing, exception expected
+
+	// Another incorrect dimension case
+	DataSpace sid3 (H5S_SIMPLE);
+	try {
+	    sid3.setExtentSimple( SPACE1_RANK, dims1 );
+
+	    // Should FAIL but didn't, so throw an invalid action exception
+	    throw InvalidActionException("DataSpace::setExtentSimple", "Attempted to use incorrect dimensions");
+	}
+	catch (DataSpaceIException E) // catching use of incorrect dimensions
+	{} // do nothing, exception expected
+    }	// end of outer try block
+
+    catch (InvalidActionException E)
+    {
+        cerr << " FAILED" << endl;
+        cerr << "    <<<  " << E.getDetailMsg() << "  >>>" << endl << endl;
+    }
+    // catch all other exceptions
+    catch (Exception E)
+    {
+        issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__, E.getCDetailMsg());
+    }
+}   // test_h5s_basic()
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:	test_h5s_scalar_write
+ *
+ * Purpose:	Test scalar H5S (dataspace) writing code
+ *
+ * Return:	none
+ *
+ * Programmer:	Binh-Minh Ribler (using C version)
+ *              Mar 2001
+ *
+ * Modifications:
+ *      January, 2005: C tests' macro VERIFY casts values to 'long' for all
+ *		       cases.  Since there are no operator<< for 'long long'
+ *		       or int64 in VS C++ ostream, I casted the hssize_t values
+ *		       passed to verify_val to 'long' as well.  If problems
+ *		       arises later, this will have to be specificly handled
+ *		       with a special routine.
+ *-------------------------------------------------------------------------
+ */
+static void
+test_h5s_scalar_write(void)
+{
+    // Output message about test being performed
+    MESSAGE(5, ("Testing Scalar Dataspace Writing\n"));
+
+    try
+    {
+	// Create file
+	H5File fid1(DATAFILE, H5F_ACC_TRUNC);
+
+	// Create scalar dataspace
+	DataSpace sid1(SPACE3_RANK, NULL);
+
+	//n = H5Sget_simple_extent_npoints(sid1);
+	hssize_t	n;	 	// Number of dataspace elements
+	n = sid1.getSimpleExtentNpoints();
+	verify_val((long)n, 1, "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__);
+
+	int	rank;		// Logical rank of dataspace
+	rank = sid1.getSimpleExtentNdims();
+	verify_val(rank, SPACE3_RANK, "DataSpace::getSimpleExtentNdims", __LINE__, __FILE__);
+
+	// Retrieves dimension size of dataspace sid1 and verify it
+	int ndims;		// Number of dimensions
+	hsize_t	tdims[4];	// Dimension array to test with
+	ndims = sid1.getSimpleExtentDims( tdims );
+	verify_val(ndims, 0, "DataSpace::getSimpleExtentDims", __LINE__, __FILE__);
+
+	// Verify extent type
+	H5S_class_t ext_type;   // Extent type
+	ext_type = sid1.getSimpleExtentType();
+	verify_val(ext_type, H5S_SCALAR, "DataSpace::getSimpleExtentType", __LINE__, __FILE__);
+
+	// Create a dataset
+	DataSet dataset = fid1.createDataSet("Dataset1", PredType::NATIVE_UINT,sid1);
+
+	dataset.write(&space3_data, PredType::NATIVE_UINT);
+    } // end of try block
+    catch (Exception E)
+    {
+	issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__, E.getCDetailMsg());
+    }
+}   // test_h5s_scalar_write()
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:	test_h5s_scalar_read
+ *
+ * Purpose:	Test scalar H5S (dataspace) reading code
+ *
+ * Return:	none
+ *
+ * Programmer:	Binh-Minh Ribler (using C version)
+ *              Mar 2001
+ *
+ * Modifications:
+ *      January, 2005: C tests' macro VERIFY casts values to 'long' for all
+ *		       cases.  Since there are no operator<< for 'long long'
+ *		       or int64 in VS C++ ostream, I casted the hssize_t values
+ *		       passed to verify_val to 'long' as well.  If problems
+ *		       arises later, this will have to be specificly handled
+ *		       with a special routine.
+ *-------------------------------------------------------------------------
+ */
+static void
+test_h5s_scalar_read(void)
+{
+    hsize_t		tdims[4];	// Dimension array to test with
+
+    // Output message about test being performed
+    MESSAGE(5, ("Testing Scalar Dataspace Reading\n"));
+
+    try
+    {
+	// Create file
+	H5File fid1(DATAFILE, H5F_ACC_RDWR);
+
+	// Create a dataset
+	DataSet dataset = fid1.openDataSet("Dataset1");
+
+	DataSpace sid1 = dataset.getSpace();
+
+	// Get the number of dataspace elements
+	hssize_t n = sid1.getSimpleExtentNpoints();
+	verify_val((long)n, 1, "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__);
+
+	// Get the logical rank of the dataspace
+	int ndims = sid1.getSimpleExtentNdims();
+	verify_val(ndims, SPACE3_RANK, "DataSpace::getSimpleExtentNdims", __LINE__, __FILE__);
+
+	ndims = sid1.getSimpleExtentDims(tdims);
+	verify_val(ndims, 0, "DataSpace::getSimpleExtentDims", __LINE__, __FILE__);
+
+	unsigned      	rdata;      	// Scalar data read in
+	dataset.read(&rdata, PredType::NATIVE_UINT);
+	verify_val(rdata, space3_data, "DataSet::read", __LINE__, __FILE__);
+    }   // end of try block
+    catch (Exception E)
+    {
+	// all the exceptions caused by negative returned values by C APIs
+	issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__, E.getCDetailMsg());
+    }
+
+}   // test_h5s_scalar_read()
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:	test_h5s_compound_scalar_write
+ *
+ * Purpose:	Test scalar H5S (dataspace) writing for compound
+ *		datatypes
+ *
+ * Return:	none
+ *
+ * Programmer:	Binh-Minh Ribler (using C version)
+ *              Mar 2001
+ *
+ * Modifications:
+ *      January, 2005: C tests' macro VERIFY casts values to 'long' for all
+ *		       cases.  Since there are no operator<< for 'long long'
+ *		       or int64 in VS C++ ostream, I casted the hssize_t values
+ *		       passed to verify_val to 'long' as well.  If problems
+ *		       arises later, this will have to be specificly handled
+ *		       with a special routine.
+ *-------------------------------------------------------------------------
+ */
+static void
+test_h5s_compound_scalar_write(void)
+{
+    // Output message about test being performed
+    MESSAGE(5, ("Testing Compound Dataspace Writing\n"));
+
+    try
+    {
+	// Create file
+	H5File fid1(DATAFILE, H5F_ACC_TRUNC);
+
+	// Create the compound datatype.
+	CompType tid1(sizeof(struct space4_struct));
+	space4_field1_off=HOFFSET(struct space4_struct, c1);
+	tid1.insertMember(SPACE4_FIELDNAME1, space4_field1_off,
+		    PredType::NATIVE_SCHAR);
+	space4_field2_off=HOFFSET(struct space4_struct, u);
+	tid1.insertMember(SPACE4_FIELDNAME2, space4_field2_off,
+		    PredType::NATIVE_UINT);
+	space4_field3_off=HOFFSET(struct space4_struct, f);
+	tid1.insertMember(SPACE4_FIELDNAME3, space4_field3_off,
+		    PredType::NATIVE_FLOAT);
+	space4_field4_off=HOFFSET(struct space4_struct, c2);
+	tid1.insertMember(SPACE4_FIELDNAME4, space4_field4_off,
+		    PredType::NATIVE_SCHAR);
+
+	// Create scalar dataspace
+	DataSpace sid1(SPACE3_RANK, NULL);
+
+	// Get the number of dataspace elements
+	hssize_t n = sid1.getSimpleExtentNpoints();
+	verify_val((long)n, 1, "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__);
+
+	// Get the logical rank of the dataspace
+	int ndims = sid1.getSimpleExtentNdims();
+	verify_val(ndims, SPACE3_RANK, "DataSpace::getSimpleExtentNdims", __LINE__, __FILE__);
+
+	hsize_t		tdims[4];	// Dimension array to test with
+	ndims = sid1.getSimpleExtentDims(tdims);
+	verify_val(ndims, 0, "DataSpace::getSimpleExtentDims", __LINE__, __FILE__);
+
+	// Create a dataset
+	DataSet dataset = fid1.createDataSet("Dataset1", tid1, sid1);
+
+	dataset.write(&space4_data, tid1);
+    }	// end of try block
+    catch (Exception E)
+    {
+	// all the exceptions caused by negative returned values by C APIs
+	issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__, E.getCDetailMsg());
+    }
+}   // test_h5s_compound_scalar_write()
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:	test_h5s_compound_scalar_read
+ *
+ * Purpose:	Test scalar H5S (dataspace) reading for compound
+ *		datatypes
+ *
+ * Return:	none
+ *
+ * Programmer:	Binh-Minh Ribler (using C version)
+ *              Mar 2001
+ *
+ * Modifications:
+ *      January, 2005: C tests' macro VERIFY casts values to 'long' for all
+ *		       cases.  Since there are no operator<< for 'long long'
+ *		       or int64 in VS C++ ostream, I casted the hssize_t values
+ *		       passed to verify_val to 'long' as well.  If problems
+ *		       arises later, this will have to be specificly handled
+ *		       with a special routine.
+ *-------------------------------------------------------------------------
+ */
+static void
+test_h5s_compound_scalar_read(void)
+{
+    hsize_t		tdims[4];	// Dimension array to test with
+
+    // Output message about test being performed
+    MESSAGE(5, ("Testing Compound Dataspace Reading\n"));
+    try
+    {
+	// Create file
+	H5File fid1(DATAFILE, H5F_ACC_RDWR);
+
+	// Create a dataset
+	DataSet dataset = fid1.openDataSet("Dataset1");
+
+	DataSpace sid1 = dataset.getSpace();
+
+	// Get the number of dataspace elements
+	hssize_t n = sid1.getSimpleExtentNpoints();
+	verify_val((long)n, 1, "DataSpace::getSimpleExtentNpoints", __LINE__, __FILE__);
+
+	// Get the logical rank of the dataspace
+	int ndims = sid1.getSimpleExtentNdims();
+	verify_val(ndims, SPACE3_RANK, "DataSpace::getSimpleExtentNdims", __LINE__, __FILE__);
+
+	ndims = sid1.getSimpleExtentDims(tdims);
+	verify_val(ndims, 0, "DataSpace::getSimpleExtentDims", __LINE__, __FILE__);
+
+	// Get the datatype of this dataset.
+	CompType type(dataset);
+
+	struct space4_struct rdata; 	// Scalar data read in
+	dataset.read(&rdata, type);
+
+	// Verify read data
+	if(HDmemcmp(&space4_data,&rdata,sizeof(struct space4_struct)))
+	{
+            cerr << "scalar data different: space4_data.c1="
+		<< space4_data.c1 << ", read_data4.c1=" << rdata.c1 << endl;
+            cerr << "scalar data different: space4_data.u="
+		<< space4_data.u << ", read_data4.u=" << rdata.u << endl;
+            cerr << "scalar data different: space4_data.f="
+		<< space4_data.f << ", read_data4.f=" << rdata.f << endl;
+            TestErrPrintf("scalar data different: space4_data.c1=%c, read_data4.c1=%c\n",
+		space4_data.c1, rdata.c2);
+	} // end if
+    }   // end of try block
+    catch (Exception E)
+    {
+	// all the exceptions caused by negative returned values by C APIs
+	issue_fail_msg(E.getCFuncName(), __LINE__, __FILE__, E.getCDetailMsg());
+    }
+}   // test_h5s_compound_scalar_read()
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:	test_h5s
+ *
+ * Purpose:	Main dataspace testing routine
+ *
+ * Return:	none
+ *
+ * Programmer:	Binh-Minh Ribler (using C version)
+ *              Mar 2001
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+void
+test_h5s(void)
+{
+    // Output message about test being performed
+    MESSAGE(5, ("Testing Dataspaces\n"));
+
+    test_h5s_basic();		// Test basic H5S code
+    test_h5s_scalar_write();	// Test scalar H5S writing code
+    test_h5s_scalar_read();	// Test scalar H5S reading code
+    test_h5s_compound_scalar_write();	// Test compound datatype scalar H5S writing code
+    test_h5s_compound_scalar_read();	// Test compound datatype scalar H5S reading code
+}   // test_h5s()
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_h5s
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Albert Cheng
+ *              July 2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_h5s(void)
+{
+    remove(DATAFILE.c_str());
+}   // cleanup_h5s
+

Added: packages/hdf5/branches/upstream/current/c++/test/th5s.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/c++/test/th5s.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/config/BlankForm
===================================================================
--- packages/hdf5/branches/upstream/current/config/BlankForm	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/BlankForm	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,139 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+    CC="/some/default/compiler/named/foo -ansi"
+    CC_BASENAME=foo
+fi
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+    gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -ansi"
+	DEBUG_CFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}

Added: packages/hdf5/branches/upstream/current/config/commence.in
===================================================================
--- packages/hdf5/branches/upstream/current/config/commence.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/commence.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,189 @@
+##------------------------------------------------------------ -*- makefile -*-
+## 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.
+##
+##
+## The following section of this makefile comes from the
+## `./config/commence' file which was generated with config.status
+## from `./config/commence.in'.
+##-----------------------------------------------------------------------------
+
+## Things that Make needs
+.SUFFIXES:
+.SUFFIXES: .c .o .lo
+ at SET_MAKE@
+
+## Directories to search
+ at SEARCH@
+
+## Programs
+SHELL=/bin/sh
+CC=@CC@
+## H5_CPPFLAGS and H5_CFLAGS are used for extra flags used to build HDF5
+## (flags that don't need to be included in h5cc, for instance).
+CFLAGS=@CFLAGS@ @H5_CFLAGS@
+CPPFLAGS=@CPPFLAGS@ @H5_CPPFLAGS@
+H5_CFLAGS=@CFLAGS@
+H5_CPPFLAGS=@CPPFLAGS@
+LDFLAGS=@LDFLAGS@
+ROOT=@ROOT@
+LIBS=@LIBS@
+AR=@AR@
+RANLIB=@RANLIB@
+PERL=@PERL@
+RM=rm -f
+CP=cp
+INSTALL=@INSTALL@
+INSTALL_PROGRAM=@INSTALL_PROGRAM@
+INSTALL_DATA=@INSTALL_DATA@
+PARALLEL=@PARALLEL@
+RUNSERIAL=@RUNSERIAL@
+RUNPARALLEL=@RUNPARALLEL@
+RUNTEST=$(RUNSERIAL)
+TIME=time
+TRACE=:
+
+## Installation points
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+bindir=@bindir@
+libdir=@libdir@
+includedir=@includedir@
+docdir=@exec_prefix@/doc
+PUB_LIB=$(LIB)
+
+## Shared libraries
+LT_STATIC_EXEC=@LT_STATIC_EXEC@
+DYNAMIC_DIRS=@DYNAMIC_DIRS@
+LT=$(top_builddir)/libtool
+LT_COMPILE=$(LT) --mode=compile $(CC)
+LT_LINK_LIB=$(LT) --mode=link $(CC) -rpath $(libdir) $(DYNAMIC_DIRS)
+LT_LINK_EXE=$(LT) --mode=link $(CC) $(LT_STATIC_EXEC) -dlopen self -rpath $(libdir) $(DYNAMIC_DIRS)
+LT_RUN=$(LT) --mode=execute
+LT_INSTALL_PROG=$(LT) --mode=install $(INSTALL_PROGRAM)
+LT_INSTALL_LIB=$(LT) --mode=install $(INSTALL_DATA)
+LT_UNINSTALL=$(LT) --mode=uninstall $(RM)
+
+## Optional variables. We must declare them here because Irix pmake
+## complains if it sees a reference to a variable which has never been
+## defined. The main makefile is free to redefine these to something else.
+DOCDIR=$(docdir)
+SUBDOCDIR=
+EXAMPLEDIR=$(docdir)/hdf5/examples/c
+LIB=
+LIB_SRC=
+LIB_OBJ=
+PUB_HDR=
+PUB_PROGS=
+PUB_DOCS=
+PUB_SUBDOCS=
+PROGS=
+TEST_PROGS=
+PRIV_PROGS=
+TEST_PROGS_PARA=
+TEST_FLAGS=
+TEST_SCRIPTS=
+TEST_SCRIPTS_PARA=
+AUX_LIB=
+EXAMPLE_PROGS=
+SUBDIRS=
+LIBHDF5=
+
+## The default is to build the library and/or programs.  We must build
+## them sequentially.
+all:
+	$(MAKE) lib
+	$(MAKE) progs
+	$(MAKE) tests
+
+## The following rules insure that the Makefile is up-to-date by rerunning
+## various autoconf components (although not all versions of make assume
+## that the makefile is implicitly a target).  We use time stamp files to
+## keep track of the most recent update of H5config.h.in and H5config.h
+## because autoheader and config.status don't update the modification time
+## if the contents don't change.
+## Invoke it by "gmake reconfigure".
+##
+## Graphically, the dependencies are:
+##
+##		         configure.in
+##                           |  |
+##         +-----------------+  +------------+
+##         |                                 |
+##      stamp1                           configure
+##   (H5config.h.in)                         |
+##       |  |                                |
+##       |  +---------------+    +-----------+
+##       |                  |    |
+##       |               config.status
+##       |                     |
+##       |  +------------------+
+##       |  |
+##      stamp2
+##    (H5config.h)                   Makefile.in et al
+##         |                                 |
+##         +------------------+  +-----------+
+##                            |  |
+##                          Makefile
+##
+## A side effect of updating stamp1 is to generate H5config.h.in and a
+## side effect of updating stamp2 is to generate H5config.h.  When using
+## a version of make that doesn't treat the makefile as the initial target
+## the user may want to occassionally type `make Makefile' in any source
+## directory.
+## The `Makefile' target has been renamed to `reconfigure' so that the
+## autoconf and make depend processes do not start up automatically.
+## One must do `make reconfigure' explicitedly to start the process.
+## (When srcdir is used and if more than one machines are running,
+## this automatic Makefile/autoconf can get things unstable.)
+##
+STAMP1=$(top_builddir)/config/stamp1
+STAMP2=$(top_builddir)/config/stamp2
+
+MAKEFILE_PARTS=$(srcdir)/Makefile.in		\
+	       $(top_srcdir)/config/commence.in	\
+	       $(top_srcdir)/config/conclude.in	\
+	       $(top_srcdir)/config/depend1.in	\
+	       $(top_srcdir)/config/depend2.in	\
+	       $(top_srcdir)/config/depend3.in	\
+	       $(top_srcdir)/config/depend4.in	\
+	       $(top_srcdir)/config/dependN.in
+
+$(STAMP1): $(top_srcdir)/configure.in
+	touch $(STAMP1)
+	-cd $(top_srcdir); autoheader
+
+$(STAMP2): $(STAMP1) $(top_builddir)/config.status
+	touch $(STAMP2)
+	-cd $(top_builddir); \
+	   CONFIG_FILES= CONFIG_HEADERS=src/H5config.h ./config.status
+
+$(top_srcdir)/configure: $(top_srcdir)/configure.in
+	-cd $(top_srcdir); autoconf
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(STAMP1)
+	-cd $(top_builddir); ./config.status --recheck
+
+# rerun the autoconf process if any configure components have changed. 
+reconfigure: $(MAKEFILE_PARTS) $(STAMP2)
+	-cd $(top_builddir); CONFIG_HEADERS= ./config.status
+	@for sub in @subdirs@ dummy; do					\
+	  if test $$sub != dummy; then					\
+	    -cd $$sub; $(MAKE) reconfigure;				\
+	  fi;								\
+	done;
+
+##-----------------------------------------------------------------------------
+## The following section of this makefile comes from the middle of
+## `Makefile.in' from this directory.  It was generated by running
+## `config.status'.
+##-----------------------------------------------------------------------------

Added: packages/hdf5/branches/upstream/current/config/conclude.in
===================================================================
--- packages/hdf5/branches/upstream/current/config/conclude.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/conclude.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,370 @@
+##------------------------------------------------------------ -*- makefile -*-
+## 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.
+##
+##
+## The following section of this makefile comes from the
+## `./config/conclude' file which was generated with config.status
+## from `./config/conclude.in'.
+##-----------------------------------------------------------------------------
+
+## This is the target for the library described in the main body of the
+## makefile.
+##
+lib: $(LIB)
+$(LIB) __no_library__: $(LIB_OBJ)
+	@$(LT_LINK_LIB) -o $@ $(CFLAGS) $(LIB_OBJ) $(LDFLAGS) $(LIBS)
+	@for d in X $(SUBDIRS); do                                      \
+	    if test $$d != X; then                                      \
+	        (set -x; cd $$d && $(MAKE) lib) || exit 1;              \
+	    fi;                                                         \
+	done
+
+progs: $(LIB) $(PROGS)
+	@for d in X $(SUBDIRS); do                                      \
+	    if test $$d != X; then                                      \
+	        (set -x; cd $$d && $(MAKE) progs) || exit 1;            \
+	    fi;                                                         \
+	done
+
+## Build a tags file in this directory.
+##
+TAGS: $(LIB_SRC)
+	$(RM) $@
+	-etags $(LIB_SRC)
+
+## Runs each test in order, passing $(TEST_FLAGS) to the program.
+## Since tests are done in a shell loop, "make -i" does apply inside it.
+## Set HDF5_Make_Ignore to a non-blank string to ignore errors inside the loop.
+## The timestamps give a rough idea how much time the tests use.
+##
+tests: $(TEST_PROGS) $(TEST_PROGS_PARA) $(TEST_SCRIPTS) $(LIB)
+check test _test: tests
+	@echo "===Tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="
+	$(MAKE) _check-s
+	$(MAKE) _check-p
+	@echo "===Tests in `echo ${PWD} | sed -e s:.*/::` ended `date`==="
+
+## serial tests
+check-s: tests
+	@echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="
+	$(MAKE) _check-s
+	@echo "===Serial tests in `echo ${PWD} | sed -e s:.*/::` ended `date`==="
+
+## parallel tests
+check-p: tests
+	@echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="
+	$(MAKE) _check-p
+	@echo "===Parallel tests in `echo ${PWD} | sed -e s:.*/::` ended `date`==="
+
+## Actual execution of sequtial tests.
+_check-s: tests
+	@for test in $(TEST_PROGS) dummy; do                                  \
+	   if test $$test != dummy; then				      \
+	      echo "============================";			      \
+	      echo "Testing $$test $(TEST_FLAGS)";			      \
+	      echo "============================";			      \
+	      srcdir="$(srcdir)"					      \
+		 $(TIME) $(RUNTEST) ./$$test $(TEST_FLAGS) ||		      \
+		 (test $$HDF5_Make_Ignore && echo "*** Error ignored") ||     \
+		 break;							      \
+	      echo "";							      \
+	   fi;								      \
+	done;								      \
+	test $$test = dummy || false
+	@for test in $(TEST_SCRIPTS) dummy; do                                \
+	   if test $$test != dummy; then				      \
+	      echo "============================";			      \
+	      echo "Testing $$test $(TEST_FLAGS)";			      \
+	      echo "============================";			      \
+	      RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)"           \
+	         srcdir="$(srcdir)"					      \
+		 $(TIME) /bin/sh $$test $(TEST_FLAGS) ||	              \
+		 (test $$HDF5_Make_Ignore && echo "*** Error ignored") ||     \
+		 break;							      \
+	      echo "";							      \
+	   fi;								      \
+	done;								      \
+	test $$test = dummy || false
+
+## Actual execution of parallel tests.
+_check-p: tests
+	@if test -n "$(TEST_PROGS_PARA)"; then				      \
+	    echo "**** Hint ****";					      \
+	    echo "Parallel test files reside in the current directory"	      \
+	         "by default.";						      \
+	    echo "Set HDF5_PARAPREFIX to use another directory. E.g.,";	      \
+	    echo "    HDF5_PARAPREFIX=/PFS/user/me";			      \
+	    echo "    export HDF5_PARAPREFIX";				      \
+	    echo "    make check";					      \
+	    echo "**** end of Hint ****";				      \
+	fi
+	@for test in $(TEST_PROGS_PARA) dummy; do                             \
+	   if test $$test != dummy; then				      \
+	      echo "============================";			      \
+	      echo "Testing $$test $(TEST_FLAGS)";			      \
+	      echo "============================";			      \
+	      srcdir="$(srcdir)"					      \
+		 $(TIME) $(RUNPARALLEL) ./$$test $(TEST_FLAGS) ||	      \
+		 (test $$HDF5_Make_Ignore && echo "*** Error ignored") ||     \
+		 break;							      \
+	      echo "";							      \
+	   fi;								      \
+	done;								      \
+	test $$test = dummy || false
+	@for test in $(TEST_SCRIPTS_PARA) dummy; do                                \
+	   if test $$test != dummy; then				      \
+	      echo "============================";			      \
+	      echo "Testing $$test $(TEST_FLAGS)";			      \
+	      echo "============================";			      \
+	      RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)"           \
+	         srcdir="$(srcdir)"					      \
+		 $(TIME) /bin/sh $$test $(TEST_FLAGS) ||	              \
+		 (test $$HDF5_Make_Ignore && echo "*** Error ignored") ||     \
+		 break;							      \
+	      echo "";							      \
+	   fi;								      \
+	done;								      \
+	test $$test = dummy || false
+
+## Run test with different Virtual File Driver
+check-vfd:
+	@for vfd in $(VFD_LIST) dummy; do				      \
+	    if test $$vfd != dummy; then                                      \
+		echo "============================";                          \
+		echo "Testing Virtual File Driver $$vfd";		      \
+		echo "============================";                          \
+		HDF5_DRIVER=$$vfd $(MAKE) check;			      \
+	    fi;								      \
+	done
+
+## Make installation directories directories if they don't exist.
+##
+$(libdir):
+	-$(top_srcdir)/bin/mkdirs $@
+
+$(includedir):
+	-$(top_srcdir)/bin/mkdirs $@
+
+$(bindir):
+	-$(top_srcdir)/bin/mkdirs $@
+
+$(DOCDIR):
+	-$(top_srcdir)/bin/mkdirs $@
+
+$(EXAMPLEDIR):
+	-$(top_srcdir)/bin/mkdirs $@
+
+## Install the library, the public header files, and public programs.
+##
+install: $(AUX_LIB) $(PUB_LIB) $(PUB_HDR) $(PUB_PROGS) $(libdir) $(includedir) $(bindir)
+	@for f in X $(PUB_LIB); do					      \
+	   if test $$f != X; then					      \
+	      ($(LT_INSTALL_LIB) $$f $(libdir)/. || exit 1);		      \
+	   fi;								      \
+	done
+	@if test -f libhdf5.settings; then				      \
+	   (set -x; $(INSTALL_DATA) libhdf5.settings $(libdir)/. || exit 1);  \
+	fi
+	@for f in X $(PUB_HDR); do					      \
+	   if test $$f != X; then					      \
+	      if test -f $$f; then					      \
+		 (set -x; $(INSTALL_DATA) $$f $(includedir)/. || exit 1);     \
+	      else							      \
+	         (set -x; $(INSTALL_DATA) $(srcdir)/$$f $(includedir)/. ||    \
+		    exit 1);						      \
+	      fi;							      \
+	   fi;								      \
+	done
+	@for f in X $(PUB_PROGS); do					      \
+	   if test $$f != X; then					      \
+	     if test "X$(PARALLEL)" != "Xno"; then                            \
+	       if test $$f = "h5cc"; then                     		      \
+	         ($(LT_INSTALL_PROG) $$f $(bindir)/h5pcc || exit 1);          \
+	       elif test $$f = "h5fc"; then                                   \
+	         ($(LT_INSTALL_PROG) $$f $(bindir)/h5pfc || exit 1);          \
+	       else							      \
+	         ($(LT_INSTALL_PROG) $$f $(bindir)/. || exit 1);	      \
+	       fi;							      \
+	     else                                                             \
+	       ($(LT_INSTALL_PROG) $$f $(bindir)/. || exit 1);		      \
+	     fi;							      \
+	   fi;							              \
+	done
+	@for d in X $(SUBDIRS); do                                            \
+	    if test $$d != X; then                                            \
+	       (set -x; cd $$d && $(MAKE) $@) || exit 1;                      \
+	    fi;                                                               \
+	done
+
+install-examples: $(EXAMPLE_PROGS) $(EXAMPLEDIR)
+	@for f in X $(EXAMPLE_PROGS); do				      \
+	  if test $$f != X; then					      \
+	    (set -x; $(INSTALL_DATA) $(srcdir)/$$f $(EXAMPLEDIR)/. || exit 1);\
+	  fi;								      \
+	done
+
+uninstall-examples:
+	@if test -n "$(EXAMPLE_PROGS)"; then 				      \
+	  set -x; cd $(EXAMPLEDIR) && $(RM) $(EXAMPLE_PROGS);		      \
+	fi
+
+## Install the documents.
+##
+install-doc: $(PUB_DOCS) $(DOCDIR)
+	@if test -n "$(DOCDIR)"; then                                         \
+	    if test -d "$(DOCDIR)"; then                                      \
+	       :;                                                             \
+	    else                                                              \
+	       mkdir $(DOCDIR) && chmod 755 $(DOCDIR);                        \
+	    fi;                                                               \
+	fi
+	@if test -n "$(SUBDOCDIR)"; then                                      \
+	    if test -d "$(SUBDOCDIR)" ; then                                  \
+	       :;                                                             \
+	    else                                                              \
+	       mkdir $(SUBDOCDIR) && chmod 755 $(SUBDOCDIR);                  \
+	    fi;                                                               \
+	fi
+	@for d in X $(SUBDIRS); do                                            \
+	   if test $$d != X; then                                             \
+	      (set -x; cd $$d && $(MAKE) $@) || exit 1;                       \
+	   fi;                                                                \
+	done
+	@for f in X $(PUB_DOCS); do                                           \
+	   if test $$f != X; then                                             \
+	      if test -f $$f; then                                            \
+		 (set -x; $(INSTALL_DATA) $$f $(DOCDIR)/. || exit 1);         \
+	      else                                                            \
+	         (set -x; $(INSTALL_DATA) $(srcdir)/$$f $(DOCDIR)/. ||        \
+		    exit 1);                                                  \
+	      fi;                                                             \
+	   fi;                                                                \
+	done
+	@for f in X $(PUB_SUBDOCS); do                                        \
+	   if test $$f != X; then                                             \
+	      if test -f $$f; then                                            \
+		 (set -x; $(INSTALL_DATA) $$f $(SUBDOCDIR)/. || exit 1);      \
+	      else                                                            \
+	         (set -x; $(INSTALL_DATA) $(srcdir)/$$f $(SUBDOCDIR)/. ||     \
+		    exit 1);                                                  \
+	      fi;                                                             \
+	   fi;                                                                \
+	done
+
+## Removes those things that `make install' (would have) installed.
+##
+uninstall:
+	@for f in libhdf5.settings $(LIB); do				      \
+          $(LT_UNINSTALL) $(libdir)/$$f;				      \
+	done
+	@if test -n "$(PUB_HDR)"; then                                        \
+	  set -x; cd $(includedir) && $(RM) $(PUB_HDR);			      \
+	fi
+	@for f in X $(PUB_PROGS); do					      \
+	    if test $$f != X; then					      \
+	        $(LT_UNINSTALL) $(bindir)/$$f;				      \
+	    fi;								      \
+	done
+
+## Removes those things that `make install-doc' (would have) installed.
+##
+uninstall-doc:
+	@for d in X $(SUBDIRS); do					      \
+	  if test $$d != X; then					      \
+	    (set -x; cd $$d && $(MAKE) $@) || exit 1;                         \
+	  fi;								      \
+	done
+	@if test -n "$(PUB_DOCS)"; then 				      \
+	  set -x; cd $(DOCDIR) && $(RM) $(PUB_DOCS);			      \
+	fi
+	@if test -n "$(PUB_SUBDOCS)"; then				      \
+	  set -x; cd $(DOCDIR) && $(RM) $(PUB_SUBDOCS);			      \
+	fi
+
+## Removes temporary files without removing the final target files.  That is,
+## remove things like object files but not libraries or executables.
+##
+mostlyclean:
+	@for d in X $(SUBDIRS); do                                            \
+	    if test $$d != X; then                                            \
+	        (set -x; cd $$d; $(MAKE) $@) || exit 1;                       \
+	    fi;                                                               \
+	done
+	@if test -n "$(LIB_OBJ)"; then                                        \
+	    $(RM) $(LIB_OBJ) $(LIB_OBJ:.lo=.o);                              \
+	fi
+	@if test -n "$(TEST_OBJ)"; then                                       \
+	    $(RM) $(TEST_OBJ) $(TEST_OBJ:.lo=.o);                            \
+	fi
+	@if test -n "$(PROG_OBJ)" || test -n "$(MOSTLYCLEAN)"; then           \
+	    $(RM) $(PROG_OBJ) $(PROG_OBJ:.lo=.o) $(MOSTLYCLEAN);             \
+	fi
+
+## Like `mostlyclean' except it also removes the final targets: things like
+## libraries and executables.  This target doesn't remove any file that
+## is part of the HDF5 distribution.
+##
+clean: mostlyclean
+	@for d in X $(SUBDIRS); do                                            \
+	    if test $$d != X; then                                            \
+	        (set -x; cd $$d; $(MAKE) $@) || exit 1;                       \
+	    fi;                                                               \
+	done
+	@if test -n "$(LIB)" -o -n "$(TEST_PROGS)" -o -n "$(TEST_PROGS_PARA)" -o -n "$(PROGS)" -o -n "$(CLEAN)"; then \
+	    $(RM) $(LIB) $(TEST_PROGS) $(TEST_PROGS_PARA) $(PROGS) $(CLEAN);                     \
+	fi;
+	-$(RM) -r .libs
+
+## Like `clean' except it also removes files that were created by running
+## configure.  If you've unpacked the source and built HDF5 without creating
+## any other files, then `make distclean' will leave only the files that were
+## in the distribution.
+##
+distclean: clean
+	-$(RM) .depend TAGS *~ core *.core *.bak *.old *.new $(DISTCLEAN)
+	@for d in X $(SUBDIRS); do					      \
+	  if test $$d != X; then					      \
+	    (set -x; cd $$d; $(MAKE) $@) || exit 1;			      \
+	  fi;								      \
+	done
+	@if test -f $(srcdir)/Makefile.in; then				      \
+	   (set -x; $(RM) Makefile);					      \
+	fi
+
+## Like `distclean' except it deletes all files that can be regenerated from
+## the makefile, including those generated from autoheader and autoconf.
+##
+maintainer-clean: distclean
+	@for d in X $(SUBDIRS); do                                            \
+	    if test $$d != X; then                                            \
+	        (set -x; cd $$d; $(MAKE) $@) || exit 1;                       \
+	    fi;                                                               \
+	done
+	-$(RM) *~ core core.* *.core *.bak *.contrib gmon.out
+
+## Implicit rules
+##
+.c.o:
+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $<
+
+.c.lo:
+	@$(LT_COMPILE) $(CFLAGS) $(CPPFLAGS) -c $<
+
+##-----------------------------------------------------------------------------
+## The following section of this makefile contains dependencies between the
+## source files and the header files.
+##-----------------------------------------------------------------------------
+.PHONY: dep depend
+dep depend: $(srcdir)/Dependencies
+
+ at DEPEND@

Added: packages/hdf5/branches/upstream/current/config/dec-flags
===================================================================
--- packages/hdf5/branches/upstream/current/config/dec-flags	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/dec-flags	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,102 @@
+#							-*- shell-script -*-
+#
+# 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 file should be sourced into configure if the compiler is a DEC
+# compiler.  It is careful not to do anything if the compiler is not
+# DEC; otherwise `cc_flags_set' is set to `yes'
+#
+
+# Get the compiler version unless it's already known.
+#
+#   cc_vendor:    The compiler vendor: DEC
+#   cc_version:   Version number, like: V5.2-038
+#
+if test X = "X$cc_flags_set"; then
+    cc_vendor=DEC
+    cc_version="`$CC $CFLAGS -V 2>&1 |head -1`"
+    case "$cc_version" in
+	DEC*)
+	    cc_version="`echo $cc_version |\
+			sed 's/.*DEC C \(V[0-9][-\.0-9]*\).*/\1/'`"
+	;;
+	Compaq*)
+	    cc_version="`echo $cc_version |\
+			sed 's/.*Compaq C \(V[0-9][-\.0-9]*\).*/\1/'`"
+	;;
+    esac
+
+    if test X != "$gcc_version"; then
+	echo "compiler '$CC' is $cc_vendor-$cc_version"
+    else
+        cc_vendor=
+    fi
+fi
+
+# Warn about old compilers that don't work right.
+case "$cc_vendor-$cc_version" in
+    DEC-V5.2-038)
+        cat <<EOF
+    **
+    ** This compiler may generate incorrect code when optimizations are
+    ** enabled. Please upgrade to a newer version (we're not sure which
+    ** version actually works) before reporting bugs to the HDF5 team.
+    **
+EOF
+	sleep 5
+	;;
+esac
+
+# Compiler flags
+case "$cc_vendor-$cc_version" in
+    DEC-V5.*)
+	# Production
+	PROD_CFLAGS="-std -verbose -warnprotos -ieee -misalign -O4  -ansi_args -fp_reorder -readonly_strings -inline speed"
+	PROD_CPPFLAGS="-D_INTRINSICS -D_INLINE_INTRINSICS"
+
+	# Debug
+	DEBUG_CFLAGS="-g -std -verbose -warnprotos -ieee -misalign"
+	DEBUG_CPPFLAGS=
+
+	# Profile
+	PROFILE_CFLAGS="-pg -std -verbose -warnprotos -ieee -misalign"
+	PROFILE_CPPFLAGS=
+
+	# Flags are set
+	cc_flags_set=yes
+	;;
+
+    DEC-V6.*)
+	# Production
+	PROD_CFLAGS="-c99 -verbose -warnprotos -ieee -misalign -O4 -fp_reorder -readonly_strings -inline speed"
+	PROD_CPPFLAGS="-D_INTRINSICS -D_INLINE_INTRINSICS"
+
+	# Debug
+	DEBUG_CFLAGS="-g -c99 -verbose -warnprotos -ieee -misalign"
+	DEBUG_CPPFLAGS=
+
+	# Profile
+	PROFILE_CFLAGS="-pg -c99 -verbose -warnprotos -ieee -misalign"
+	PROFILE_CPPFLAGS=
+
+	# Flags are set
+	cc_flags_set=yes
+	;;
+esac
+
+# If no flags were set then clear the compiler vendor and version info.
+if test X = "X$cc_flags_set"; then
+    cc_vendor=
+    cc_version=
+fi

Added: packages/hdf5/branches/upstream/current/config/dec-osf4.x
===================================================================
--- packages/hdf5/branches/upstream/current/config/dec-osf4.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/dec-osf4.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,34 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for detailed information.
+
+# The default compiler is `cc'
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+
+# Try GNU compiler flags.
+. $srcdir/config/gnu-flags
+
+# Try native DEC compiler
+ARCH=${ARCH:='-arch host -tune host'}
+. $srcdir/config/dec-flags
+hdf5_mpi_complex_derived_datatype_works=${hdf5_mpi_complex_derived_datatype_works='no'}

Added: packages/hdf5/branches/upstream/current/config/dec-osf5.x
===================================================================
--- packages/hdf5/branches/upstream/current/config/dec-osf5.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/dec-osf5.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,34 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for detailed information.
+
+# The default compiler is `cc'
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+
+# Try GNU compiler flags.
+. $srcdir/config/gnu-flags
+
+# Try native DEC compiler
+ARCH=${ARCH:='-arch host -tune host'}
+. $srcdir/config/dec-flags
+hdf5_mpi_complex_derived_datatype_works=${hdf5_mpi_complex_derived_datatype_works='no'}

Added: packages/hdf5/branches/upstream/current/config/depend1.in
===================================================================
--- packages/hdf5/branches/upstream/current/config/depend1.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/depend1.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,79 @@
+##                                                             -*- makefile -*-
+##
+## 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.
+
+
+## We keep a list of dependencies in `.depend' for each of the source
+## files on which it depends.  When one of the source files is modified
+## we remove its record from .depend and regenerate its dependencies,
+## tacking them onto the end of .depend.  By including the .depend file
+## into the makefile, we're telling make that the makefile depends on
+## the dependency list in the .depend file.
+##
+## This is as fast as the `.d' method described in the GNU make manual
+## for automatic dependencies, but has the added advantage that all
+## dependencies are stored in one place.  The advantage over the
+## `makedepend' program is that only those files that are out of date
+## have dependency information rebuilt, and the Makefile is not
+## modified.
+##
+## This is also where tracing information is updated.  The $(TRACE)
+## program is run on each source file to make sure that the H5TRACE()
+## macros are up to date.  If they are then the file is not modified,
+## otherwise the file is changed and a backup is saved by appending a
+## tilde to the file name.
+##
+$(srcdir)/Dependencies: .depend
+	@if test "$(srcdir)" != "."; then					\
+	  (									\
+	    echo '##'; 								\
+	    echo '## This file is machine generated on GNU systems.';		\
+	    echo '## Only temporary changes may be made here.';			\
+	    echo '##'; 								\
+	    echo '## Copyright by the Board of Trustees of the University of Illinois.'; \
+	    echo '## All rights reserved.'; 					\
+	    echo '##'; 								\
+	    echo '## This file is part of HDF5.  The full HDF5 copyright notice, including'; \
+	    echo '## terms governing use, modification, and redistribution, is contained in'; \
+	    echo '## the files COPYING and Copyright.html.  COPYING can be found at the root'; \
+	    echo '## of the source code distribution tree; Copyright.html can be found at the'; \
+	    echo '## root level of an installed copy of the electronic HDF5 document set and'; \
+	    echo '## is linked from the top-level documents page.  It can also be found at'; \
+	    echo '## http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have'; \
+	    echo '## access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu.'; \
+	    echo;								\
+	  ) >$@;								\
+	  $(PERL) -p $(top_srcdir)/bin/distdep .depend >>$@;			\
+	else									\
+	  echo 'Dependencies cannot be built when $$srcdir == $$builddir';	\
+	fi
+
+.depend: $(LIB_SRC) $(TEST_SRC) $(PROG_SRC)
+	@touch .depend
+	@for dep in $? dummy; do                                              \
+      if test $$dep != "dummy" -a -n "$(PERL)"; then                      \
+        case "$$dep" in                                                   \
+          *.c)                                                            \
+            echo Building dependencies for $$dep;                         \
+            obj=`basename $$dep .c`.lo;                                   \
+            sed '\%^'"$$obj"':%,\%[^\\]$$%d' <$@ >$@- && mv $@- $@;       \
+            $(TRACE) $$dep;                                               \
+            $(CC) -MM -MG $(CPPFLAGS) $$dep 2>/dev/null >>$@;             \
+            $(PERL) -w $(top_srcdir)/bin/dependencies --srcdir=$(srcdir) --top_srcdir=$(top_srcdir) --top_builddir=$(top_builddir) $@; \
+            ;;                                                            \
+        esac;                                                             \
+      fi;                                                                 \
+    done
+
+-include .depend
+

Added: packages/hdf5/branches/upstream/current/config/depend2.in
===================================================================
--- packages/hdf5/branches/upstream/current/config/depend2.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/depend2.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,23 @@
+##							       -*- makefile -*-
+##
+## 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 platform doesn't support automatic dependencies because we're
+## not using GNU gcc.  GNU gcc is needed in order to generate the list
+## of header files included by a source file.
+
+## Since automatic dependencies are not being used, we attempt to include the
+## `.distdep' file from the source tree. This file was automatically generated 
+## on some system that satisfies the above requirements.
+
+-include $(srcdir)/Dependencies

Added: packages/hdf5/branches/upstream/current/config/depend3.in
===================================================================
--- packages/hdf5/branches/upstream/current/config/depend3.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/depend3.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,19 @@
+##							       -*- makefile -*-
+##
+## 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.
+
+## Since automatic dependencies are not being used, we attempt to include the
+## `.distdep' file from the source tree. This file was automatically generated 
+## on some system that satisfies the above requirements.
+
+.include <$(srcdir)/Dependencies>

Added: packages/hdf5/branches/upstream/current/config/depend4.in
===================================================================
--- packages/hdf5/branches/upstream/current/config/depend4.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/depend4.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,19 @@
+##							       -*- makefile -*-
+##
+## 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.
+
+## Since automatic dependencies are not being used, we attempt to include the
+## `.distdep' file from the source tree. This file was automatically generated 
+## on some system that satisfies the above requirements.
+
+include $(srcdir)/Dependencies

Added: packages/hdf5/branches/upstream/current/config/dependN.in
===================================================================
--- packages/hdf5/branches/upstream/current/config/dependN.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/dependN.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,16 @@
+##							       -*- makefile -*-
+##
+## 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.
+
+## Automatic dependencies are not being used and we cannot include other
+## files.

Added: packages/hdf5/branches/upstream/current/config/freebsd
===================================================================
--- packages/hdf5/branches/upstream/current/config/freebsd	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/freebsd	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,44 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# The default compiler is `gcc'
+if test "X-" = "X-$CC"; then
+  CC=gcc
+  CC_BASENAME=gcc
+fi
+
+# Add "_XOPEN_SOURCE" define to cpp flags, to quiet warnings
+#       from /usr/include/sys/cdefs.h
+# (Unless we are using g++ as a C compiler)
+if test "X-g++" != "X-$CC"; then
+    CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=600" 
+fi
+
+# Figure out C compiler flags
+. $srcdir/config/gnu-flags
+
+# Special setup to use pthread support if enable-threadsafe is on.
+# Works with static executable only.
+if test "X-" != "X-$enable_threadsafe"; then
+  CFLAGS="$CFLAGS -D_THREAD_SAFE" 
+  CXXFLAGS="$CXXFLAGS -D_THREAD_SAFE" 
+  LDFLAGS="$LDFLAGS -pthread"
+fi

Added: packages/hdf5/branches/upstream/current/config/gnu-flags
===================================================================
--- packages/hdf5/branches/upstream/current/config/gnu-flags	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/gnu-flags	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,316 @@
+#							-*- shell-script -*-
+#
+# 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 file should be sourced into configure if the compiler is the
+# GNU gcc compiler or a derivative.  It is careful not to do anything
+# if the compiler is not GNU; otherwise `cc_flags_set' is set to `yes'
+#
+
+# Get the compiler version in a way that works for gcc, egcs, and
+# pgcc unless a compiler version is already known
+#
+#   cc_vendor:    The compiler name: gcc, egcs, or pgcc
+#   cc_version:   Version number: 2.91.60, 2.7.2.1
+#
+if test X = "X$cc_flags_set"; then
+    cc_version="`$CC $CFLAGS -v 2>&1 |grep 'gcc version' |\
+	        sed 's/.*gcc version \([-a-z0-9\.]*\).*/\1/'`"
+    cc_vendor=`echo $cc_version |sed 's/\([a-z]*\).*/\1/'`
+    cc_version=`echo $cc_version |sed 's/[-a-z]//g'`
+    if test X = "X$cc_vendor" -a X != "X$cc_version"; then
+	cc_vendor=gcc
+    fi
+    if test "-" != "$cc_vendor-$cc_version"; then
+	echo "compiler '$CC' is GNU $cc_vendor-$cc_version"
+    fi
+
+    # Some version numbers
+    cc_vers_major=`echo $cc_version | cut -f1 -d.`
+    cc_vers_minor=`echo $cc_version | cut -f2 -d.`
+    cc_vers_patch=`echo $cc_version | cut -f3 -d.`
+    test -n "$cc_vers_major" || cc_vers_major=0
+    test -n "$cc_vers_minor" || cc_vers_minor=0
+    test -n "$cc_vers_patch" || cc_vers_patch=0
+    cc_vers_all=`expr $cc_vers_major '*' 1000000 + $cc_vers_minor '*' 1000 + $cc_vers_patch`
+fi
+
+# GCC compilers before gcc-2.8.1 have problems with `long long'.
+if test gcc = "$cc_vendor" -a "$cc_vers_all" -lt 2008001; then
+    cat <<EOF
+    **
+    ** This compiler may be unable to properly compile the long long
+    ** data type used extensively by hdf5, although specifying
+    ** --disable-hsizet for configure may work around those bugs.
+    ** There may be other code generation problems also, especially
+    ** when optimizations are enabled.  Please upgrade to at least GNU
+    ** gcc version 2.8.1 before reporting bugs to the HDF5 team.
+    **
+EOF
+    sleep 5
+
+# GCC v2.96 (shipped with RH7.x) has problems with `float'-> `double' conversions.
+elif test gcc = "$cc_vendor" -a "$cc_vers_all" -eq 2096000; then
+   cat <<EOF
+    **
+    ** This compiler may have problems converting 'float' values to
+    ** 'double' values.  There may be other code generation problems
+    ** as well.
+    **
+    ** Please use a different version of gcc before reporting bugs.
+    **
+EOF
+       sleep 5
+
+# Current EGCS compilers have problems with `long long' and register
+# allocation when optimizations are turned on for x86 systems.
+elif test egcs = "$cc_vendor" -a "$cc_vers_all" -le 2091066; then
+    if test "$HSIZET" != "large"; then
+       cat <<EOF
+    **
+    ** This compiler may have problems allocating registers when
+    ** optimizations are enabled on some platforms. Specifying
+    ** --disable-hsizet usually avoids the bug.
+    **
+EOF
+       sleep 5
+    fi
+
+# All current versions of PGCC have problems also.
+elif test pgcc = "$cc_vendor" -a "$cc_vers_all" -le 2091066; then	    
+    cat <<EOF
+    **
+    ** This compiler may have problems allocating registers for long
+    ** long data types when optimizations are enabled. There may be
+    ** other code generation problems as well. We know of no version
+    ** of pgcc which is capable of compiling HDF5 in production mode.
+    ** Please use gcc-2.8 or egcs-1.1.1 before reporting bugs.
+    **
+EOF
+    sleep 5
+
+fi
+
+# Common GCC flags for various situations
+case "$cc_vendor-$cc_version" in
+  gcc*|egcs*|pgcc*)
+    # Architecture-specific flags
+    arch=
+    case "$host_os-$host_cpu" in
+        # FreeBSD sets the information from "uname -m" to the general machine
+        # architecture, not the specific CPU for the machine, so even our
+        # Pentium II Xeon server is set to "i386".  Once we know we are on a FreeBSD
+        # machine, use the "sysctl" command to get the CPU hardware model.
+        freebsd*-i386)
+            host_cpu_model=`sysctl -n hw.model`
+            case "$host_cpu_model" in
+                # Hmm.. this might not catch Celerons, but it won't hurt them either...
+                *Pro*|*II*|*III*|*IV*|*Athlon*)
+                    arch="-march=i686"
+                ;;
+            esac
+            ;;
+
+        *-i686)
+            arch="-march=i686"
+            ;;
+    esac
+
+    # Host-specific flags
+    case "`hostname`" in
+        sleipnir.ncsa.uiuc.edu)
+            arch="$arch -pipe"
+            ;;
+    esac
+
+    # General
+    CFLAGS="$CFLAGS $arch -ansi"
+
+    # Production
+    case "$cc_vendor-$cc_version" in
+      gcc-2.95.[34])
+        PROD_CFLAGS="-O3"
+        ;;
+      gcc-3.[0-4]*|gcc-4.[01]*)
+        # The optimization level is reduced for gcc 3.* and 4.* due to problems
+        # with code generation for src/H5Tconv.c with the -O2 & -O3 
+        # optimization levels (which shows up as failures for various integer
+        # types -> long long conversions in the test/dtypes test).  Perhaps
+        # later versions of gcc will fix this bug... - QAK - 2003/10/20
+        PROD_CFLAGS="-O"
+        ;;
+      gcc-4*)
+        # Be optimistic about future versions of gcc.. :-) - QAK - 2003/10/20
+        PROD_CFLAGS="-O3"
+        ;;
+      *)
+        PROD_CFLAGS="-O"
+        ;;
+    esac
+
+    PROD_CFLAGS="$PROD_CFLAGS -fomit-frame-pointer -finline-functions"
+    PROD_CPPFLAGS=
+
+    # Debug
+    DEBUG_CFLAGS="-g -fverbose-asm -pedantic -Wall -W -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline"
+    DEBUG_CPPFLAGS=
+
+    # Profile
+    PROFILE_CFLAGS="-g -pg"
+    PROFILE_CPPFLAGS=
+
+    # Flags are set
+    cc_flags_set=yes
+    ;;
+esac
+
+# Version specific GCC flags
+#
+# Please follow the pattern below by adding new versions at the top, copying
+# the information from the previous version and adding modifications to that.
+case "$cc_vendor-$cc_version" in
+
+# Closer to the gcc 4.1 release, we should check for additional flags to
+# include and break it out into it's own section, like the other versions
+# below. -QAK
+  gcc-4.[01]*)
+    # Replace -ansi flag with -std=c99 flag
+    CFLAGS="`echo $CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
+
+    # Disable warnings about using 'long long' type
+    CFLAGS="$CFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+
+    # Append warning flags from gcc-3.2* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization -Wmultichar"
+
+    # The "format=2" warning generates too many warnings about valid
+    # usage in the library.
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wformat=2"
+
+    # The "unreachable code" warning does not appear to be reliable yet...
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wendif-labels"
+
+    # Append warning flags from gcc-3.4* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wdeclaration-after-statement -Wold-style-definition -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    DEBUG_CFLAGS="`echo $DEBUG_CFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+    # Append more extra warning flags that only gcc4.0+ know about
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wvariadic-macros"
+    ;;
+
+  gcc-3.4*)
+    # Replace -ansi flag with -std=c99 flag
+    CFLAGS="`echo $CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
+
+    # Disable warnings about using 'long long' type
+    CFLAGS="$CFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+
+    # Append warning flags from gcc-3.2* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization -Wmultichar"
+
+    # The "format=2" warning generates too many warnings about valid
+    # usage in the library.
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wformat=2"
+
+    # The "unreachable code" warning does not appear to be reliable yet...
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wendif-labels"
+
+    # Append more extra warning flags that only gcc3.4+ know about
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wdeclaration-after-statement -Wold-style-definition -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    DEBUG_CFLAGS="`echo $DEBUG_CFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+    ;;
+
+  gcc-3.3*)
+    # Replace -ansi flag with -std=c99 flag
+    CFLAGS="`echo $CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
+
+    # Disable warnings about using 'long long' type
+    CFLAGS="$CFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+
+    # Append warning flags from gcc-3.2* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization -Wmultichar"
+
+    # The "format=2" warning generates too many warnings about valid
+    # usage in the library.
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wformat=2"
+
+    # The "unreachable code" warning does not appear to be reliable yet...
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wunreachable-code"
+
+    # Append more extra warning flags that only gcc3.3+ know about
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wendif-labels"
+    ;;
+
+  gcc-3.2*)
+    # Replace -ansi flag with -std=c99 flag
+    CFLAGS="`echo $CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
+
+    # Disable warnings about using 'long long' type
+    CFLAGS="$CFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+
+    # Append more extra warning flags that only gcc3.2+ know about
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization -Wmultichar"
+
+    # The "format=2" warning generates too many warnings about valid
+    # usage in the library.
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wformat=2"
+
+    # The "unreachable code" warning does not appear to be reliable yet...
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wunreachable-code"
+    ;;
+
+  gcc-3*)
+    # Replace -ansi flag with -std=c99 flag
+    CFLAGS="`echo $CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
+
+    # Disable warnings about using 'long long' type
+    CFLAGS="$CFLAGS -Wno-long-long"
+
+    # Append some extra warning flags that only gcc3+ know about
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    ;;
+
+  gcc-2.9[56]*)
+    # Disable warnings about using 'long long' type
+    CFLAGS="$CFLAGS -Wno-long-long"
+    ;;
+esac
+
+# Clear cc info if no flags set
+if test "X$cc_flags_set" = "X"; then
+  cc_vendor=
+  cc_version=
+fi

Added: packages/hdf5/branches/upstream/current/config/hpux10.20
===================================================================
--- packages/hdf5/branches/upstream/current/config/hpux10.20	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/hpux10.20	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,49 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Default compiler is `cc'
+if test "X-" =  "X-$CC"; then
+  CC=cc
+  CC_BASENAME=cc
+fi
+
+# Flags
+case "X-$CC" in
+  X-gcc)
+    CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+    DEBUG_CFLAGS="-g -fverbose-asm"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O3"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  *)
+    CFLAGS="$CFLAGS -Ae"
+    DEBUG_CFLAGS=-g
+    DEBUG_CPPFLAGS="-Ae"
+    PROD_CFLAGS=-O
+    PROD_CPPFLAGS="-Ae"
+    PROFILE_CFLAGS=
+    PROFILE_CPPFLAGS="-Ae"
+    ;;
+esac

Added: packages/hdf5/branches/upstream/current/config/hpux11.00
===================================================================
--- packages/hdf5/branches/upstream/current/config/hpux11.00	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/hpux11.00	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,49 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Default compiler is `cc'
+if test "X-" =  "X-$CC"; then
+  CC=cc
+  CC_BASENAME=cc
+fi
+
+# Flags
+case "X-$CC" in
+  X-gcc)
+    CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+    DEBUG_CFLAGS="-g -fverbose-asm"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O3"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  *)
+    CFLAGS="$CFLAGS -Ae"
+    DEBUG_CFLAGS=-g
+    DEBUG_CPPFLAGS="-Ae"
+    PROD_CFLAGS=-O
+    PROD_CPPFLAGS="-Ae"
+    PROFILE_CFLAGS=
+    PROFILE_CPPFLAGS="-Ae"
+    ;;
+esac

Added: packages/hdf5/branches/upstream/current/config/hpux11.23
===================================================================
--- packages/hdf5/branches/upstream/current/config/hpux11.23	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/hpux11.23	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,49 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Default compiler is `cc'
+if test "X-" =  "X-$CC"; then
+  CC=cc
+  CC_BASENAME=cc
+fi
+
+# Flags
+case "X-$CC" in
+  X-gcc)
+    CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+    DEBUG_CFLAGS="-g -fverbose-asm"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O3"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  *)
+    CFLAGS="$CFLAGS -Ae"
+    DEBUG_CFLAGS=-g
+    DEBUG_CPPFLAGS="-Ae"
+    PROD_CFLAGS=-O
+    PROD_CPPFLAGS="-Ae"
+    PROFILE_CFLAGS=
+    PROFILE_CPPFLAGS="-Ae"
+    ;;
+esac

Added: packages/hdf5/branches/upstream/current/config/hpux9.03
===================================================================
--- packages/hdf5/branches/upstream/current/config/hpux9.03	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/hpux9.03	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,49 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details
+
+# Default compiler is `cc'
+if test "X$CC" = "X"; then
+  CC=cc
+  CC_BASENAME=cc
+fi
+
+# Flags
+case "X-$CC" in
+  X-gcc)
+    CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+    DEBUG_CFLAGS="-g -fverbose-asm"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O3"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  *)
+    CFLAGS="$CFLAGS -Ae"
+    DEBUG_CFLAGS=-g
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS=
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS=
+    PROFILE_CPPFLAGS=
+    ;;
+esac

Added: packages/hdf5/branches/upstream/current/config/i386-pc-cygwin32
===================================================================
--- packages/hdf5/branches/upstream/current/config/i386-pc-cygwin32	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/i386-pc-cygwin32	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,30 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# The default compiler is `gcc'.
+if test "X-" =  "X-$CC"; then
+  CC=gcc
+  CC_BASENAME=gcc
+  LD=ld
+fi
+
+# Figure out compiler flags
+. $srcdir/config/gnu-flags

Added: packages/hdf5/branches/upstream/current/config/i686-pc-cygwin
===================================================================
--- packages/hdf5/branches/upstream/current/config/i686-pc-cygwin	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/i686-pc-cygwin	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,36 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# The default compiler is `gcc'.
+if test -z "$CC"; then
+   CC=gcc
+   CC_BASENAME=gcc
+fi
+
+# Figure out GNU C compiler flags
+. $srcdir/config/gnu-flags
+
+# Figure out PGI C compiler flags
+. $srcdir/config/pgi-flags
+
+# Figure out Intel C compiler flags
+. $srcdir/config/intel-flags
+

Added: packages/hdf5/branches/upstream/current/config/ia64-linux-gnu
===================================================================
--- packages/hdf5/branches/upstream/current/config/ia64-linux-gnu	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/ia64-linux-gnu	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,52 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+# Use Intel C compiler by default (if it's available).
+if test "X$CC" = "X" && which icc > /dev/null; then
+  CC=icc
+  CC_BASENAME=icc
+fi
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+
+case $CC_BASENAME in
+    ecc|icc)
+	. $srcdir/config/intel-flags
+	;;
+
+    gcc)
+	. $srcdir/config/gnu-flags
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -ansi"
+	DEBUG_CFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+# Check MPICH settings
+. $srcdir/config/mpich

Added: packages/hdf5/branches/upstream/current/config/intel-flags
===================================================================
--- packages/hdf5/branches/upstream/current/config/intel-flags	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/intel-flags	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,106 @@
+#							-*- shell-script -*-
+#
+# 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 file should be sourced into configure if the compiler is the
+# Intel icc compiler or a derivative.  It is careful not to do anything
+# if the compiler is not Intel; otherwise `cc_flags_set' is set to `yes'
+#
+
+# Get the compiler version in a way that works for icc
+# icc unless a compiler version is already known
+#
+#   cc_vendor:    The compiler name: icc
+#   cc_version:   Version number: 8.0
+#
+if test X = "X$cc_flags_set"; then
+    cc_version="`$CC $CFLAGS -V 2>&1 |grep 'Version'`"
+    if test X != "X$cc_version"; then
+        cc_vendor=icc
+        cc_version=`echo $cc_version |sed 's/.*Version \([-a-z0-9\.\-]*\).*/\1/'`
+        echo "compiler '$CC' is Intel $cc_vendor-$cc_version"
+
+        # Some version numbers
+        # Intel version numbers are of the form: "major.minor"
+        cc_vers_major=`echo $cc_version | cut -f1 -d.`
+        cc_vers_minor=`echo $cc_version | cut -f2 -d.`
+        #cc_vers_patch=`echo $cc_version | cut -f2 -d.`
+        test -n "$cc_vers_major" || cc_vers_major=0
+        test -n "$cc_vers_minor" || cc_vers_minor=0
+        test -n "$cc_vers_patch" || cc_vers_patch=0
+        cc_vers_all=`expr $cc_vers_major '*' 1000000 + $cc_vers_minor '*' 1000 + $cc_vers_patch`
+    fi
+fi
+
+# Common Intel flags for various situations
+if test "X-icc" = "X-$cc_vendor"; then
+    # Insert section about version specific problems from compiler flags here,
+    # if necessary.
+
+    arch=
+    # Architecture-specific flags
+    # Nothing currently. (Uncomment code below and modify to add any)
+    #case "$host_os-$host_cpu" in
+    #    *-i686)
+    #        arch="-march=i686"
+    #        ;;
+    #esac
+
+    # Host-specific flags
+    # Nothing currently. (Uncomment code below and modify to add any)
+    #case "`hostname`" in
+    #    sleipnir.ncsa.uiuc.edu)
+    #        arch="$arch -pipe"
+    #        ;;
+    #esac
+
+    # General
+    # Default to C99 standard.
+    CFLAGS="${CFLAGS:--std=c99 $arch}"
+
+    # Production
+    # -Wl,-s to remove all symbols for smaller file
+    PROD_CFLAGS="-O3 -Wl,-s"
+    PROD_CPPFLAGS=
+
+    # Debug
+    DEBUG_CFLAGS="-Wcheck -Wall -g -O0"
+    DEBUG_CPPFLAGS=
+
+    # Profile
+    # Use this for profiling with gprof
+    PROFILE_CFLAGS="-g -p"
+    PROFILE_CPPFLAGS=
+
+    # Flags are set
+    cc_flags_set=yes
+
+fi
+
+# Version specific ICC flags
+#
+# Please follow the pattern below by adding new versions at the top, copying
+# the information from the previous version and adding modifications to that.
+case "$cc_vendor-$cc_version" in
+    icc-8.0*)
+	# v8.0 -O3 infinite loops when compiling test/tselect.c. Use -O2.
+	PROD_CFLAGS="-O2 -Wl,-s"
+	;;
+esac
+
+# Clear cc info if no flags set
+if test "X-$cc_flags_set" = "X-"; then
+    cc_vendor=
+    cc_version=
+fi

Added: packages/hdf5/branches/upstream/current/config/intel-osf1
===================================================================
--- packages/hdf5/branches/upstream/current/config/intel-osf1	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/intel-osf1	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,167 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# This is for the ASCI RED TFLOPS machine
+
+# The default compiler is `cicc'
+if test "X-" = "X-$CC"; then
+    CC=cicc
+    CC_BASENAME=cicc
+fi
+
+# The default archiver is `xar'
+AR=${AR:-xar}
+
+# There is no ranlib
+RANLIB=:
+
+# Additional libraries
+LIBS="$LIBS -lnoop_stubs"
+
+# How to run serial and parallel test programs
+# Default parallel tests can fit within 1 processor in -proc 3 mode.
+# You may want to use -proc 3 to use fewer physical nodes. 
+RUNSERIAL=${RUNSERIAL:-"yod -sz 1"}
+RUNPARALLEL=${RUNPARALLEL:-"yod -sz 8"}
+
+# CFLAGS must be set else configure set it to -g
+CFLAGS="$CFLAGS"
+
+# What must *always* be present for things to compile correctly?
+#CPPFLAGS="$CPPFLAGS -I."
+
+# What compiler flags should be used for code development?
+DEBUG_CFLAGS=-g
+DEBUG_CPPFLAGS=
+
+# What compiler flags should be used for building a production
+# library?
+PROD_CFLAGS=-O
+PROD_CPPFLAGS=
+
+# What compiler flags enable code profiling?
+PROFILE_CFLAGS=-pg
+PROFILE_CPPFLAGS=
+
+# Turn off shared lib option.  It does not work for TFLOPS yet.
+enable_shared="${enable_shared:-no}"
+
+# Disable stream-vfd option.  It does not work for TFLOPS.
+enable_stream_vfd="${enable_stream_vfd:-no}"
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+# Cache the sizeof of the following types to save configure time.
+# These are verified in test/tconfig in case they change.
+ac_cv_type_char=${ac_cv_type_char=yes}
+ac_cv_sizeof_char=${ac_cv_sizeof_char='1'}
+ac_cv_type_short=${ac_cv_type_short=yes}
+ac_cv_sizeof_short=${ac_cv_sizeof_short='2'}
+ac_cv_type_int=${ac_cv_type_int=yes}
+ac_cv_sizeof_int=${ac_cv_sizeof_int='4'}
+ac_cv_type_long=${ac_cv_type_long=yes}
+ac_cv_sizeof_long=${ac_cv_sizeof_long='4'}
+ac_cv_type_float=${ac_cv_type_float=yes}
+ac_cv_sizeof_float=${ac_cv_sizeof_float='4'}
+ac_cv_type_double=${ac_cv_type_double=yes}
+ac_cv_sizeof_double=${ac_cv_sizeof_double='8'}
+ac_cv_type_long_double=${ac_cv_type_long_double=yes}
+ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double='8'}
+ac_cv_type_long_long=${ac_cv_type_long_long=yes}
+ac_cv_sizeof_long_long=${ac_cv_sizeof_long_long='8'}
+ac_cv_type_size_t=${ac_cv_type_size_t=yes}
+ac_cv_sizeof_size_t=${ac_cv_sizeof_size_t='4'}
+ac_cv_type_ssize_t=${ac_cv_type_ssize_t=yes}
+ac_cv_sizeof_ssize_t=${ac_cv_sizeof_ssize_t='4'}
+ac_cv_type_off_t=${ac_cv_type_off_t=yes}
+ac_cv_sizeof_off_t=${ac_cv_sizeof_off_t='4'}
+
+# Hard set sizeof of the following types to 0 because they are not supported.
+ac_cv_type___int64=${ac_cv_type___int64=no}
+ac_cv_sizeof___int64=${ac_cv_sizeof___int64='0'}
+
+# Hard set malloc of zero bytes to no because it does not work.
+hdf5_cv_malloc_works=${hdf5_cv_malloc_works='no'}
+
+# Hard set sizeof_intN_t to 0 because they are not supported.
+ac_cv_type_int8_t=${ac_cv_type_int8_t=no}
+ac_cv_type_int16_t=${ac_cv_type_int16_t=no}
+ac_cv_type_int32_t=${ac_cv_type_int32_t=no}
+ac_cv_type_int64_t=${ac_cv_type_int64_t=no}
+ac_cv_type_uint8_t=${ac_cv_type_uint8_t=no}
+ac_cv_type_uint16_t=${ac_cv_type_uint16_t=no}
+ac_cv_type_uint32_t=${ac_cv_type_uint32_t=no}
+ac_cv_type_uint64_t=${ac_cv_type_uint64_t=no}
+ac_cv_sizeof_int8_t=${ac_cv_sizeof_int8_t='0'}
+ac_cv_sizeof_int16_t=${ac_cv_sizeof_int16_t='0'}
+ac_cv_sizeof_int32_t=${ac_cv_sizeof_int32_t='0'}
+ac_cv_sizeof_int64_t=${ac_cv_sizeof_int64_t='0'}
+ac_cv_sizeof_uint8_t=${ac_cv_sizeof_uint8_t='0'}
+ac_cv_sizeof_uint16_t=${ac_cv_sizeof_uint16_t='0'}
+ac_cv_sizeof_uint32_t=${ac_cv_sizeof_uint32_t='0'}
+ac_cv_sizeof_uint64_t=${ac_cv_sizeof_uint64_t='0'}
+
+# Hard set sizeof_int_leastN_t to 0 because they are not supported.
+ac_cv_type_int_least8_t=${ac_cv_type_int_least8_t=no}
+ac_cv_type_int_least16_t=${ac_cv_type_int_least16_t=no}
+ac_cv_type_int_least32_t=${ac_cv_type_int_least32_t=no}
+ac_cv_type_int_least64_t=${ac_cv_type_int_least64_t=no}
+ac_cv_type_uint_least8_t=${ac_cv_type_uint_least8_t=no}
+ac_cv_type_uint_least16_t=${ac_cv_type_uint_least16_t=no}
+ac_cv_type_uint_least32_t=${ac_cv_type_uint_least32_t=no}
+ac_cv_type_uint_least64_t=${ac_cv_type_uint_least64_t=no}
+ac_cv_sizeof_int_least8_t=${ac_cv_sizeof_int_least8_t='0'}
+ac_cv_sizeof_int_least16_t=${ac_cv_sizeof_int_least16_t='0'}
+ac_cv_sizeof_int_least32_t=${ac_cv_sizeof_int_least32_t='0'}
+ac_cv_sizeof_int_least64_t=${ac_cv_sizeof_int_least64_t='0'}
+ac_cv_sizeof_uint_least8_t=${ac_cv_sizeof_uint_least8_t='0'}
+ac_cv_sizeof_uint_least16_t=${ac_cv_sizeof_uint_least16_t='0'}
+ac_cv_sizeof_uint_least32_t=${ac_cv_sizeof_uint_least32_t='0'}
+ac_cv_sizeof_uint_least64_t=${ac_cv_sizeof_uint_least64_t='0'}
+
+# Hard set sizeof_int_fastN_t to 0 because they are not supported.
+ac_cv_type_int_fast8_t=${ac_cv_type_int_fast8_t=no}
+ac_cv_type_int_fast16_t=${ac_cv_type_int_fast16_t=no}
+ac_cv_type_int_fast32_t=${ac_cv_type_int_fast32_t=no}
+ac_cv_type_int_fast64_t=${ac_cv_type_int_fast64_t=no}
+ac_cv_type_uint_fast8_t=${ac_cv_type_uint_fast8_t=no}
+ac_cv_type_uint_fast16_t=${ac_cv_type_uint_fast16_t=no}
+ac_cv_type_uint_fast32_t=${ac_cv_type_uint_fast32_t=no}
+ac_cv_type_uint_fast64_t=${ac_cv_type_uint_fast64_t=no}
+ac_cv_sizeof_int_fast8_t=${ac_cv_sizeof_int_fast8_t='0'}
+ac_cv_sizeof_int_fast16_t=${ac_cv_sizeof_int_fast16_t='0'}
+ac_cv_sizeof_int_fast32_t=${ac_cv_sizeof_int_fast32_t='0'}
+ac_cv_sizeof_int_fast64_t=${ac_cv_sizeof_int_fast64_t='0'}
+ac_cv_sizeof_uint_fast8_t=${ac_cv_sizeof_uint_fast8_t='0'}
+ac_cv_sizeof_uint_fast16_t=${ac_cv_sizeof_uint_fast16_t='0'}
+ac_cv_sizeof_uint_fast32_t=${ac_cv_sizeof_uint_fast32_t='0'}
+ac_cv_sizeof_uint_fast64_t=${ac_cv_sizeof_uint_fast64_t='0'}
+
+hdf5_cv_system_scope_threads=${hdf5_cv_system_scope_threads="no"}
+
+# Hard set MPI_File_set_size() working for files over 2GB to no
+hdf5_cv_mpi_file_set_size_big=${hdf5_cv_mpi_file_set_size_big='no'}
+
+# Set gettimeofday_tz to yes.
+hdf5_cv_gettimeofday_tz=${hdf5_cv_gettimeofday_tz='yes'}

Added: packages/hdf5/branches/upstream/current/config/irix5.x
===================================================================
--- packages/hdf5/branches/upstream/current/config/irix5.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/irix5.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,63 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details
+
+# The default compiler is `cc' and there is no ranlib.
+if test "X-" = "X-$CC"; then
+  CC=cc
+  CC_BASENAME=cc
+fi
+RANLIB=:
+
+case "X-$CC_BASENAME" in
+  X-gcc)
+    CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+    DEBUG_CFLAGS="-g -fverbose-asm"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O3"
+	PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  *)
+    # Do *not* use -ansi because it prevents hdf5 from being able
+    # to read modification dates from the file. On some systems it
+    # can also result in compile errors in system header files
+    # since hdf5 includes a couple non-ANSI header files.
+    #CFLAGS="$CFLAGS -ansi"
+
+    # Always turn off these compiler warnings:
+    CFLAGS="$CFLAGS -woff 799"
+
+    # Extra debugging flags
+    DEBUG_CFLAGS=-g
+    DEBUG_CPPFLAGS=
+
+    # Extra production flags
+    # Note: higher optimizations relax alignment requirements needed.
+    PROD_CFLAGS="-O -s"
+    PROD_CPPFLAGS=
+
+    # Extra profiling flags
+    PROFILE_CFLAGS=-pg
+    PROFILE_CPPFLAGS=
+    ;;
+esac

Added: packages/hdf5/branches/upstream/current/config/irix6.x
===================================================================
--- packages/hdf5/branches/upstream/current/config/irix6.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/irix6.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,112 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Use SGI supplied C compiler by default.  There is no ranlib
+if test "X-" = "X-$CC"; then
+    CC='cc'
+    CC_BASENAME=cc
+    # use c99 compiler if available.
+    if `c99 -version >/dev/null 2>&1` ; then
+        CC='c99'
+    fi
+fi
+RANLIB=:
+
+# Compiler flags
+case "X-$CC_BASENAME" in
+  X-gcc)
+    . $srcdir/config/gnu-flags
+    ;;
+
+  *)
+    if [ "$CC_BASENAME" = "cc" ] || ($CC -version 2>&1 | grep -s "MIPSpro Compilers") 2>&1 > /dev/null; then
+      # use these flags if this is the SGI cc compiler or some compiler
+      # command that eventually uses the SGI cc compiler.
+
+      # Check for old versions of the compiler that don't work right.
+      case "`$CC -version 2>&1 |head -1`" in
+        "Mongoose Compilers: Version 7.00")
+          echo "  +---------------------------------------------------+"
+          echo "  | You have an old version of cc (Mongoose Compilers |"
+          echo "  | version 7.00).  Please upgrade to MIPSpro version |"
+          echo "  | 7.2.1.2m (patches are available from the SGI web  |"
+          echo "  | site).  The 7.00 version may generate incorrect   |"
+          echo "  | code, especially when optimizations are enabled.  |"
+          echo "  +---------------------------------------------------+"
+          sleep 5
+          ;;
+      esac
+
+      # Always turn off these compiler warnings for the -64 compiler:
+      #    1174:  function declared but not used
+      #    1196:  __vfork() (this is an SGI config problem)
+      #    1209:  constant expressions
+      #    1429:  the `long long' type is not standard
+      #    1685:  turn off warnings about turning off invalid warnings
+      #    3201:  remark - parameter not referenced
+      #CFLAGS="$CFLAGS -woff 1174,1429,1209,1196,1685,3201"
+      CFLAGS="$CFLAGS -woff 1209,3201"
+
+      # Always turn off these compiler warnings for the old compiler:
+      #    799:   the `long long' type is not standard
+      #    803:   turn off warnings about turning off invalid warnings
+      #    835:   __vfork() (this is an SGI config problem)
+      #CFLAGS="$CFLAGS -woff 799,803,835"
+
+      # Always turn off these loader warnings:
+      # (notice the peculiar syntax)
+      #      47:  branch instructions that degrade performance on R4000
+      #      84:  a library is not used
+      #      85:  duplicate definition preemption (from -lnsl)
+      #     134:  duplicate weak definition preemption (from -lnsl)
+      CFLAGS="$CFLAGS -Wl,-woff,47,-woff,84,-woff,85,-woff,134"
+    fi
+
+    # Extra debugging flags
+    DEBUG_CFLAGS="-g -fullwarn"
+    DEBUG_CPPFLAGS=
+
+    # Extra production flags
+    PROD_CFLAGS="-O -OPT:Olimit=0 -s"
+    PROD_CPPFLAGS=
+
+    # Extra profiling flags
+    PROFILE_CFLAGS=
+    PROFILE_CPPFLAGS=
+    ;;
+esac
+
+# 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.
+# Fix $hdf5_mpi_complex_derived_datatype_works if it is not set and is using cc.
+if [ -z "$hdf5_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`
+    if [ $ccversionval -lt 704 ]; then
+        hdf5_mpi_complex_derived_datatype_works='no'
+    fi
+fi
+

Added: packages/hdf5/branches/upstream/current/config/linux-gnu
===================================================================
--- packages/hdf5/branches/upstream/current/config/linux-gnu	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/linux-gnu	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+#							-*- shell-script -*-
+#
+# 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 is the same as linux-gnulibc1
+
+. $srcdir/config/linux-gnulibc1

Added: packages/hdf5/branches/upstream/current/config/linux-gnuaout
===================================================================
--- packages/hdf5/branches/upstream/current/config/linux-gnuaout	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/linux-gnuaout	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+#							-*- shell-script -*-
+#
+# 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 is the same as linux-gnulibc1
+
+. $srcdir/config/linux-gnulibc1

Added: packages/hdf5/branches/upstream/current/config/linux-gnulibc1
===================================================================
--- packages/hdf5/branches/upstream/current/config/linux-gnulibc1	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/linux-gnulibc1	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,38 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# The default compiler is `gcc'.
+if test -z "$CC"; then
+   CC=gcc
+   CC_BASENAME=gcc
+fi
+
+# Figure out GNU C compiler flags
+. $srcdir/config/gnu-flags
+
+# Figure out PGI C compiler flags
+. $srcdir/config/pgi-flags
+
+# Figure out Intel C compiler flags
+. $srcdir/config/intel-flags
+
+# Check MPICH settings
+. $srcdir/config/mpich

Added: packages/hdf5/branches/upstream/current/config/linux-gnulibc2
===================================================================
--- packages/hdf5/branches/upstream/current/config/linux-gnulibc2	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/linux-gnulibc2	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,23 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Same as with gnulibc1 for now
+. $srcdir/config/linux-gnulibc1

Added: packages/hdf5/branches/upstream/current/config/mpich
===================================================================
--- packages/hdf5/branches/upstream/current/config/mpich	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/mpich	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,42 @@
+#							-*- shell-script -*-
+#
+# 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 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_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.
+
+if [ -z "$hdf5_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_mpi_complex_derived_datatype_works='no'
+		;;
+	    *)
+		# assume okay
+		;;
+	esac
+    fi
+fi

Added: packages/hdf5/branches/upstream/current/config/nv1-cray
===================================================================
--- packages/hdf5/branches/upstream/current/config/nv1-cray	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/nv1-cray	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,150 @@
+#                                                      -*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS         Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS       library suitable for use with debugging
+#                      tools. Usually this list will exclude
+#                      optimization switches (like `-O') and include
+#                      switches that turn on symbolic debugging
+#                      support (like `-g').
+#
+# PROD_CFLAGS          Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS     library suitable for performance testing (like 
+#                      `-pg').  This may or may not include debugging 
+#                      or production flags.
+#                      
+# CFLAGS               Flags can be added to this variable which
+#                      might already be partially initialized.  These 
+#                      flags will always be passed to the compiler
+#                      and should include switches to turn on full
+#                      warnings.  HDF5 attempts to be ANSI and Posix
+#                      compliant and employ good programming
+#                      practices resulting in few if any
+#                      warnings.
+#
+#                      Warning flags do not have to be added to CFLAGS
+#                      variable if the compiler is the GNU gcc
+#                      compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#                      The CFLAGS should contains *something* or else 
+#                      configure will probably add `-g'.  For most
+#                      systems this isn't a problem but some systems
+#                      will disable optimizations in favor of the
+#                      `-g'.
+#                      
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+    gcc)
+       CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+       DEBUG_CFLAGS="-g -fverbose-asm"
+       DEBUG_CPPFLAGS=
+       PROD_CFLAGS="-O3 -fomit-frame-pointer"
+       PROD_CPPFLAGS=
+       PROFILE_CFLAGS="-pg"
+       PROFILE_CPPFLAGS=
+       ;;
+
+    cc)
+       CFLAGS="$CFLAGS -O0" 
+       DEBUG_CFLAGS="-g"
+       DEBUG_CPPFLAGS=
+       PROD_CFLAGS=""
+       PROD_CPPFLAGS=
+       PROFILE_CFLAGS=
+       PROFILE_CPPFLAGS=
+       ;;
+
+    *)
+       CFLAGS="$CFLAGS -ansi -O0"
+       DEBUG_CFLAGS="-g"
+       DEBUG_CPPFLAGS=
+       PROD_CFLAGS=""
+       PROD_CPPFLAGS=
+       PROFILE_CFLAGS="-pg"
+       PROFILE_CPPFLAGS=
+       ;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+# Hard set the flag to indicate that converting denormalized floating-point
+# values doesn't work.
+hdf5_cv_convert_denormal_float=${hdf5_cv_convert_denormal_float='no'}
+

Added: packages/hdf5/branches/upstream/current/config/pgi-flags
===================================================================
--- packages/hdf5/branches/upstream/current/config/pgi-flags	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/pgi-flags	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,100 @@
+#							-*- shell-script -*-
+#
+# 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 file should be sourced into configure if the compiler is the
+# PGI pgcc compiler or a derivative.  It is careful not to do anything
+# if the compiler is not PGI; otherwise `cc_flags_set' is set to `yes'
+#
+
+# Get the compiler version in a way that works for pgcc
+# pgcc unless a compiler version is already known
+#
+#   cc_vendor:    The compiler name: pgcc
+#   cc_version:   Version number: 5.0-2, 5.2-2
+#
+if test X = "X$cc_flags_set"; then
+    cc_version="`$CC $CFLAGS -V 2>&1 |grep '^pgcc '`"
+    if test X != "X$cc_version"; then
+        is_mpi="`$CC $CFLAGS -help 2>&1 |grep 'MPI'`"
+        cc_vendor=`echo $cc_version |sed 's/\([a-z]*\).*/\1/'`
+        cc_version=`echo $cc_version |sed 's/pgcc \([-a-z0-9\.\-]*\).*/\1/'`
+        echo "compiler '$CC' is PGI $cc_vendor-$cc_version"
+
+        # Some version numbers
+        # PGI version numbers are of the form: "major.minor-patch"
+        cc_vers_major=`echo $cc_version | cut -f1 -d.`
+        cc_vers_minor=`echo $cc_version | cut -f2 -d. | cut -f1 -d-`
+        cc_vers_patch=`echo $cc_version | cut -f2 -d. | cut -f2 -d-`
+        test -n "$cc_vers_major" || cc_vers_major=0
+        test -n "$cc_vers_minor" || cc_vers_minor=0
+        test -n "$cc_vers_patch" || cc_vers_patch=0
+        cc_vers_all=`expr $cc_vers_major '*' 1000000 + $cc_vers_minor '*' 1000 + $cc_vers_patch`
+    fi
+fi
+
+# Common PGI flags for various situations
+if test "X-pgcc" = "X-$cc_vendor"; then
+    # Insert section about version specific problems from gnu-flags here, if
+    # necessary.
+
+    arch=
+    # Architecture-specific flags
+    # Nothing currently. (Uncomment code below and modify to add any)
+    #case "$host_os-$host_cpu" in
+    #    *-i686)
+    #        arch="-march=i686"
+    #        ;;
+    #esac
+
+    # Host-specific flags
+    # Nothing currently. (Uncomment code below and modify to add any)
+    #case "`hostname`" in
+    #    sleipnir.ncsa.uiuc.edu)
+    #        arch="$arch -pipe"
+    #        ;;
+    #esac
+
+    # General
+    CFLAGS="$CFLAGS $arch"
+
+    # Production
+    # Check for MPI wrapper being used and tweak down compiler options
+    if test "X-" == "X-$is_mpi"; then
+        PROD_CFLAGS="-fast -s -Mnoframe"
+    else
+        PROD_CFLAGS="-O2 -s"
+    fi
+    PROD_CPPFLAGS=
+
+    # Debug
+    DEBUG_CFLAGS="-g -Mbounds -Mchkfpstk"
+    DEBUG_CPPFLAGS=
+
+    # Profile
+    PROFILE_CFLAGS="-g -Mprof=func,line"
+    # Use this for profiling with gprof
+    #PROFILE_CFLAGS="-g -pg"
+    PROFILE_CPPFLAGS=
+
+    # Flags are set
+    cc_flags_set=yes
+
+fi
+
+# Clear cc info if no flags set
+if test "X-$cc_flags_set" = "X-"; then
+  cc_vendor=
+  cc_version=
+fi

Added: packages/hdf5/branches/upstream/current/config/powerpc-apple
===================================================================
--- packages/hdf5/branches/upstream/current/config/powerpc-apple	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/powerpc-apple	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,30 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# The default compiler is `gcc'
+if test "X-" = "X-$CC"; then
+    CC=gcc
+    CC_BASENAME=gcc
+fi
+
+# Figure out compiler flags
+. $srcdir/config/gnu-flags
+

Added: packages/hdf5/branches/upstream/current/config/powerpc-ibm-aix4.x
===================================================================
--- packages/hdf5/branches/upstream/current/config/powerpc-ibm-aix4.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/powerpc-ibm-aix4.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,99 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+
+# What must *always* be present for things to compile correctly?
+#CFLAGS="$CFLAGS -ansi"
+#CPPFLAGS="$CPPFLAGS -I."
+
+# CFLAGS must be set else configure set it to -g
+CFLAGS="$CFLAGS"
+
+# What compiler flags should be used for code development?
+DEBUG_CFLAGS=
+DEBUG_CPPFLAGS=
+
+# What compiler flags should be used for building a production
+# library?
+PROD_CFLAGS=
+PROD_CPPFLAGS=
+
+# What compiler flags enable code profiling?
+PROFILE_CFLAGS=
+PROFILE_CPPFLAGS=
+
+
+#----------------------------------------------------------------------------
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+ac_cv_header_stdc=${ac_cv_header_stdc='yes'}
+ac_cv_header_sys_ioctl_h=${ac_cv_header_sys_ioctl_h=yes}
+RUNPARALLEL=${RUNPARALLEL="MP_PROCS=3 MP_TASKS_PER_NODE=3 poe"}
+
+# cache the sizeof of "standard C types" so that configure can run faster.
+ac_cv_sizeof_char=${ac_cv_sizeof_char=1}
+ac_cv_sizeof_short=${ac_cv_sizeof_short=2}
+ac_cv_sizeof_int=${ac_cv_sizeof_int=4}
+ac_cv_sizeof_long=${ac_cv_sizeof_long=4}
+ac_cv_sizeof_long_long=${ac_cv_sizeof_long_long=8}
+ac_cv_sizeof___int64=${ac_cv_sizeof___int64=8}
+ac_cv_sizeof_float=${ac_cv_sizeof_float=4}
+ac_cv_sizeof_double=${ac_cv_sizeof_double=8}
+ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=8}
+ac_cv_sizeof_int8_t=${ac_cv_sizeof_int8_t=1}
+ac_cv_sizeof_uint8_t=${ac_cv_sizeof_uint8_t=1}
+ac_cv_sizeof_int_least8_t=${ac_cv_sizeof_int_least8_t=1}
+ac_cv_sizeof_uint_least8_t=${ac_cv_sizeof_uint_least8_t=1}
+ac_cv_sizeof_int_fast8_t=${ac_cv_sizeof_int_fast8_t=1}
+ac_cv_sizeof_uint_fast8_t=${ac_cv_sizeof_uint_fast8_t=4}
+ac_cv_sizeof_int16_t=${ac_cv_sizeof_int16_t=2}
+ac_cv_sizeof_uint16_t=${ac_cv_sizeof_uint16_t=2}
+ac_cv_sizeof_int_least16_t=${ac_cv_sizeof_int_least16_t=2}
+ac_cv_sizeof_uint_least16_t=${ac_cv_sizeof_uint_least16_t=2}
+ac_cv_sizeof_int_fast16_t=${ac_cv_sizeof_int_fast16_t=4}
+ac_cv_sizeof_uint_fast16_t=${ac_cv_sizeof_uint_fast16_t=4}
+ac_cv_sizeof_int32_t=${ac_cv_sizeof_int32_t=4}
+ac_cv_sizeof_uint32_t=${ac_cv_sizeof_uint32_t=4}
+ac_cv_sizeof_int_least32_t=${ac_cv_sizeof_int_least32_t=4}
+ac_cv_sizeof_uint_least32_t=${ac_cv_sizeof_uint_least32_t=4}
+ac_cv_sizeof_int_fast32_t=${ac_cv_sizeof_int_fast32_t=4}
+ac_cv_sizeof_uint_fast32_t=${ac_cv_sizeof_uint_fast32_t=4}
+ac_cv_sizeof_int64_t=${ac_cv_sizeof_int64_t=8}
+ac_cv_sizeof_uint64_t=${ac_cv_sizeof_uint64_t=8}
+ac_cv_sizeof_int_least64_t=${ac_cv_sizeof_int_least64_t=8}
+ac_cv_sizeof_uint_least64_t=${ac_cv_sizeof_uint_least64_t=8}
+ac_cv_sizeof_int_fast64_t=${ac_cv_sizeof_int_fast64_t=8}
+ac_cv_sizeof_uint_fast64_t=${ac_cv_sizeof_uint_fast64_t=8}
+
+# Don't cache size_t and off_t because they depend on if -D_LARGE_FILES is used
+#ac_cv_sizeof_size_t=${ac_cv_sizeof_size_t=4}
+#ac_cv_sizeof_off_t=${ac_cv_sizeof_off_t=8}
+
+hdf5_mpi_complex_derived_datatype_works=${hdf5_mpi_complex_derived_datatype_works='no'}

Added: packages/hdf5/branches/upstream/current/config/powerpc-ibm-aix5.x
===================================================================
--- packages/hdf5/branches/upstream/current/config/powerpc-ibm-aix5.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/powerpc-ibm-aix5.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,127 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+# Use AIX supplied C compiler by default, xlc for serial, mpcc_r for parallel.
+# Use -D_LARGE_FILES by default to support large file size.
+if test "X-" =  "X-$CC"; then
+  if test "X-$enable_parallel" = "X-yes"; then
+    CC=mpcc_r
+    CC_BASENAME=mpcc_r
+  else
+    CC=xlc
+    CC_BASENAME=xlc
+  fi
+fi
+
+# Define RUNPARALLEL if parallel mode is enabled or a parallel compiler used.
+if test "X-$enable_parallel" = "X-yes" -o X-$CC_BASENAME = X-mpcc_r; then
+    RUNPARALLEL=${RUNPARALLEL="env MP_PROCS=\$\${NPROCS:=3} MP_TASKS_PER_NODE=\$\${NPROCS:=3} poe"}
+fi
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+
+case $CC_BASENAME in
+  xlc|mpcc_r)
+    # Turn off shared lib option.  It causes some test suite to fail.
+    enable_shared="${enable_shared:-no}"
+    # Use -D_LARGE_FILES by default to support large file size.
+    CFLAGS="-qlanglvl=ansi -D_LARGE_FILES -DSTDC $CFLAGS"
+    DEBUG_CFLAGS="-g -qfullpath"
+    DEBUG_CPPFLAGS=
+    # -O causes test/dtypes to fail badly. Turn it off for now.
+    PROD_CFLAGS=""
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-g -qfullpath -pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  gcc)
+    . $srcdir/config/gnu-flags
+    ;;
+
+  *)
+    CFLAGS="$CFLAGS -ansi"
+    DEBUG_CFLAGS="-g"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+esac
+
+#----------------------------------------------------------------------------
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+ac_cv_header_stdc=${ac_cv_header_stdc='yes'}
+ac_cv_header_sys_ioctl_h=${ac_cv_header_sys_ioctl_h=yes}
+
+# cache the sizeof of "standard C types" so that configure can run faster.
+ac_cv_sizeof_char=${ac_cv_sizeof_char=1}
+ac_cv_sizeof_short=${ac_cv_sizeof_short=2}
+ac_cv_sizeof_int=${ac_cv_sizeof_int=4}
+ac_cv_sizeof_long_long=${ac_cv_sizeof_long_long=8}
+ac_cv_sizeof___int64=${ac_cv_sizeof___int64=8}
+ac_cv_sizeof_float=${ac_cv_sizeof_float=4}
+ac_cv_sizeof_double=${ac_cv_sizeof_double=8}
+ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=8}
+ac_cv_sizeof_int8_t=${ac_cv_sizeof_int8_t=1}
+ac_cv_sizeof_uint8_t=${ac_cv_sizeof_uint8_t=1}
+ac_cv_sizeof_int_least8_t=${ac_cv_sizeof_int_least8_t=1}
+ac_cv_sizeof_uint_least8_t=${ac_cv_sizeof_uint_least8_t=1}
+# Do not cache int_fast8_t since the vendor changes often.
+ac_cv_sizeof_int16_t=${ac_cv_sizeof_int16_t=2}
+ac_cv_sizeof_uint16_t=${ac_cv_sizeof_uint16_t=2}
+ac_cv_sizeof_int_least16_t=${ac_cv_sizeof_int_least16_t=2}
+ac_cv_sizeof_uint_least16_t=${ac_cv_sizeof_uint_least16_t=2}
+# Do not cache int_fast16_t since the vendor changes often.
+ac_cv_sizeof_int32_t=${ac_cv_sizeof_int32_t=4}
+ac_cv_sizeof_uint32_t=${ac_cv_sizeof_uint32_t=4}
+ac_cv_sizeof_int_least32_t=${ac_cv_sizeof_int_least32_t=4}
+ac_cv_sizeof_uint_least32_t=${ac_cv_sizeof_uint_least32_t=4}
+ac_cv_sizeof_int_fast32_t=${ac_cv_sizeof_int_fast32_t=4}
+ac_cv_sizeof_uint_fast32_t=${ac_cv_sizeof_uint_fast32_t=4}
+ac_cv_sizeof_int64_t=${ac_cv_sizeof_int64_t=8}
+ac_cv_sizeof_uint64_t=${ac_cv_sizeof_uint64_t=8}
+ac_cv_sizeof_int_least64_t=${ac_cv_sizeof_int_least64_t=8}
+ac_cv_sizeof_uint_least64_t=${ac_cv_sizeof_uint_least64_t=8}
+ac_cv_sizeof_int_fast64_t=${ac_cv_sizeof_int_fast64_t=8}
+ac_cv_sizeof_uint_fast64_t=${ac_cv_sizeof_uint_fast64_t=8}
+
+# Don't cache long since it varies between 32 and 64 bits
+#ac_cv_sizeof_long=${ac_cv_sizeof_long=4}
+
+# Don't cache size_t and off_t because they depend on if -D_LARGE_FILES is used
+#ac_cv_sizeof_size_t=${ac_cv_sizeof_size_t=4}
+#ac_cv_sizeof_off_t=${ac_cv_sizeof_off_t=8}
+
+# 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_mpi_complex_derived_datatype_works=${hdf5_mpi_complex_derived_datatype_works='no'}

Added: packages/hdf5/branches/upstream/current/config/powerpc-ibm-linux-gnu
===================================================================
--- packages/hdf5/branches/upstream/current/config/powerpc-ibm-linux-gnu	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/powerpc-ibm-linux-gnu	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,177 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+# Use BGL supplied C compiler by default, xlc for serial, mpxlc for parallel.
+# Use -D_LARGE_FILES by default to support large file size.
+if test "X-" =  "X-$CC"; then
+  if test "X-$enable_parallel" = "X-yes"; then
+    CC=mpxlc
+    CC_BASENAME=mpxlc
+  else
+    CC=xlc
+    CC_BASENAME=xlc
+  fi
+fi
+
+# Define RUNPARALLEL if parallel mode is enabled or a parallel compiler used.
+if test "X-$enable_parallel" = "X-yes" -o X-$CC_BASENAME = X-mpxlc; then
+  RUNPARALLEL=${RUNPARALLEL="MP_PROCS=\$\${NPROCS:=3} MP_TASKS_PER_NODE=\$\${NPROCS:=3} poe"}
+fi
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+
+case $CC_BASENAME in
+  xlc|mpxlc)
+    # Turn off shared lib option.  It causes some test suite to fail.
+    enable_shared="${enable_shared:-no}"
+    # Use -D_LARGE_FILES by default to support large file size.
+    CFLAGS="-qlanglvl=ansi -D_LARGE_FILES -DSTDC $CFLAGS"
+    DEBUG_CFLAGS="-g -qfullpath"
+    DEBUG_CPPFLAGS=
+    # -O causes test/dtypes to fail badly. Turn it off for now.
+    PROD_CFLAGS=""
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-g -qfullpath -pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  gcc)
+    . $srcdir/config/gnu-flags
+    ;;
+
+  *)
+    CFLAGS="$CFLAGS -ansi"
+    DEBUG_CFLAGS="-g"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+esac
+
+#----------------------------------------------------------------------------
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+ac_cv_header_stdc=${ac_cv_header_stdc='yes'}
+ac_cv_header_sys_ioctl_h=${ac_cv_header_sys_ioctl_h=yes}
+
+# On bgl, because mpxlc is a cross-compiler, we need to cache ALL of the types
+# so that configure doesn't try to compile little programs to determine them
+# since these program will fail to execute.
+ac_cv_sizeof_char=${ac_cv_sizeof_char=1}
+ac_cv_sizeof_short=${ac_cv_sizeof_short=2}
+ac_cv_sizeof_int=${ac_cv_sizeof_int=4}
+ac_cv_sizeof_long=${ac_cv_sizeof_long=4}
+ac_cv_sizeof_long_long=${ac_cv_sizeof_long_long=8}
+ac_cv_sizeof___int64=${ac_cv_sizeof___int64=8}
+ac_cv_sizeof_float=${ac_cv_sizeof_float=4}
+ac_cv_sizeof_double=${ac_cv_sizeof_double=8}
+ac_cv_sizeof_long_double=${ac_cv_sizeof_long_double=8}
+ac_cv_sizeof_int8_t=${ac_cv_sizeof_int8_t=1}
+ac_cv_sizeof_uint8_t=${ac_cv_sizeof_uint8_t=1}
+ac_cv_sizeof_int_least8_t=${ac_cv_sizeof_int_least8_t=1}
+ac_cv_sizeof_uint_least8_t=${ac_cv_sizeof_uint_least8_t=1}
+ac_cv_sizeof_int_fast8_t=${ac_cv_sizeof_int_fast8_t=1}
+ac_cv_sizeof_uint_fast8_t=${ac_cv_sizeof_uint_fast8_t=1}
+ac_cv_sizeof_int16_t=${ac_cv_sizeof_int16_t=2}
+ac_cv_sizeof_uint16_t=${ac_cv_sizeof_uint16_t=2}
+ac_cv_sizeof_int_least16_t=${ac_cv_sizeof_int_least16_t=2}
+ac_cv_sizeof_uint_least16_t=${ac_cv_sizeof_uint_least16_t=2}
+ac_cv_sizeof_int_fast16_t=${ac_cv_sizeof_int_fast16_t=4}
+ac_cv_sizeof_uint_fast16_t=${ac_cv_sizeof_uint_fast16_t=4}
+ac_cv_sizeof_int32_t=${ac_cv_sizeof_int32_t=4}
+ac_cv_sizeof_uint32_t=${ac_cv_sizeof_uint32_t=4}
+ac_cv_sizeof_int_least32_t=${ac_cv_sizeof_int_least32_t=4}
+ac_cv_sizeof_uint_least32_t=${ac_cv_sizeof_uint_least32_t=4}
+ac_cv_sizeof_int_fast32_t=${ac_cv_sizeof_int_fast32_t=4}
+ac_cv_sizeof_uint_fast32_t=${ac_cv_sizeof_uint_fast32_t=4}
+ac_cv_sizeof_int64_t=${ac_cv_sizeof_int64_t=8}
+ac_cv_sizeof_uint64_t=${ac_cv_sizeof_uint64_t=8}
+ac_cv_sizeof_int_least64_t=${ac_cv_sizeof_int_least64_t=8}
+ac_cv_sizeof_uint_least64_t=${ac_cv_sizeof_uint_least64_t=8}
+ac_cv_sizeof_int_fast64_t=${ac_cv_sizeof_int_fast64_t=8}
+ac_cv_sizeof_uint_fast64_t=${ac_cv_sizeof_uint_fast64_t=8}
+
+ac_cv_sizeof_size_t=${ac_cv_sizeof_size_t=4}
+ac_cv_sizeof_ssize_t=${ac_cv_sizeof_ssize_t=4}
+ac_cv_sizeof_off_t=${ac_cv_sizeof_off_t=8}
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the AIX architechture)
+#
+R_LARGE=18
+R_INTEGER=9
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_INTEGER)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$FC"; then
+  if test "X-$enable_parallel" = "X-yes"; then
+    FC=mpxlf
+  else
+    FC=xlf
+  fi
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+  F9XSUFFIXFLAG="-qsuffix=f=f90"
+  FCFLAGS="$FCFLAGS -static -O ${F9XSUFFIXFLAG} -qmoddir=./ -k"
+  FSEARCH_DIRS="-I./ -I../src"
+  DEBUG_FCFLAGS="-O"
+  PROD_FCFLAGS="-O"
+  PROFILE_FCFLAGS="-O"
+  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_mpi_complex_derived_datatype_works=${hdf5_mpi_complex_derived_datatype_works='no'}
+
+# The default C++ compiler
+
+# Use AIX supplied C++ compiler by default.
+CXX=${CXX=xlC}
+
+# Added -qweaksymbol to suppress linker messages warning of duplicate
+# symbols; these warnings are harmless. - BMR
+CXXFLAGS="$CXXFLAGS -qweaksymbol"
+
+

Added: packages/hdf5/branches/upstream/current/config/rs6000-ibm-aix4.x
===================================================================
--- packages/hdf5/branches/upstream/current/config/rs6000-ibm-aix4.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/rs6000-ibm-aix4.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,24 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Cross compiling defaults
+ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}

Added: packages/hdf5/branches/upstream/current/config/site-specific/BlankForm
===================================================================
--- packages/hdf5/branches/upstream/current/config/site-specific/BlankForm	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/site-specific/BlankForm	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,46 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script. It is processed shortly
+# after configure starts and defines is used to define environment
+# variables which a specific machine may need
+
+# Files in this directory should be named:
+#
+#		host-$hostname
+#
+# where $hostname is the output from the `hostname' command.
+
+# Specifying Extra Library Directories
+# ------------------------------------
+#
+# The user should be able to specify extra library directories for the
+# LDFLAGS macro. The compiler may not be set up to recognize those
+# directories as valid library directories
+
+if test -f "/usr/ncsa/lib"; then
+   LDFLAGS="/usr/ncsa/lib"
+fi
+
+# Specifying Extra Include Directories
+# ------------------------------------
+#
+# The user should be able to specify extra include directories for the
+# CPPFLAGS macro. The compiler may not be set up to recognize those
+# directories as valid include directories
+
+if test -f "/usr/ncsa/include"; then
+   CPPFLAGS="/usr/ncsa/include"
+fi

Added: packages/hdf5/branches/upstream/current/config/solaris2.x
===================================================================
--- packages/hdf5/branches/upstream/current/config/solaris2.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/solaris2.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,49 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details
+
+# The default compiler is `sunpro cc'
+if test "X-" =  "X-$CC"; then
+  CC=cc
+  CC_BASENAME=cc
+fi
+
+# Try gcc compiler flags
+. $srcdir/config/gnu-flags
+
+# Try solaris native compiler flags
+if test "X-" = "X-$cc_flags_set"; then
+  CFLAGS="$CFLAGS -erroff=%none -DBSD_COMP"
+  DEBUG_CFLAGS="-g -xildoff"
+  DEBUG_CPPFLAGS=
+  PROD_CFLAGS="-O -s"
+  PROD_CPPFLAGS=
+  PROFILE_CFLAGS=-xpg
+  PROFILE_CPPFLAGS=
+  cc_flags_set=yes
+
+  # Turn off optimization flag for SUNpro compiler versions 4.x which
+  # have an optimization bug.  Version 5.0 works.
+  ($CC -V 2>&1) | grep -s 'cc: .* C 4\.' >/dev/null 2>&1 \
+       && PROD_CFLAGS="`echo $PROD_CFLAGS | sed -e 's/-O//'`"
+fi
+
+# Add socket lib for the Stream Virtual File Driver
+LIBS="$LIBS -lsocket"

Added: packages/hdf5/branches/upstream/current/config/sv1-cray
===================================================================
--- packages/hdf5/branches/upstream/current/config/sv1-cray	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/sv1-cray	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,154 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+  CC=cc
+  CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+  gcc)
+    CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+    DEBUG_CFLAGS="-g -fverbose-asm"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O3 -fomit-frame-pointer"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  cc)
+    CFLAGS="$CFLAGS"
+    DEBUG_CFLAGS="-g -h zero"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O2 -h scalar0 -h vector0 -h task1"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  *)
+    CFLAGS="$CFLAGS -ansi"
+    DEBUG_CFLAGS="-g"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+esac
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+# Hard set the flag to indicate that converting denormalized floating-point
+# values doesn't work.
+hdf5_cv_convert_denormal_float=${hdf5_cv_convert_denormal_float='no'}

Added: packages/hdf5/branches/upstream/current/config/unicos
===================================================================
--- packages/hdf5/branches/upstream/current/config/unicos	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/unicos	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,148 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+  CC=cc
+  CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+  gcc)
+    CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+    DEBUG_CFLAGS="-g -fverbose-asm"
+    DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
+    PROD_CFLAGS="-O3 -fomit-frame-pointer"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  cc)
+    CFLAGS="$CFLAGS"
+    DEBUG_CFLAGS="-g -h zero -h scalar0"
+    DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
+    PROD_CFLAGS="-O2 -h scalar0"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  *)
+    CFLAGS="$CFLAGS -ansi"
+    DEBUG_CFLAGS="-g"
+    DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
+    PROD_CFLAGS="-O"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+esac
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}

Added: packages/hdf5/branches/upstream/current/config/unicos10.0.X
===================================================================
--- packages/hdf5/branches/upstream/current/config/unicos10.0.X	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/unicos10.0.X	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,155 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+  CC=cc
+  CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+  gcc)
+    CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+    DEBUG_CFLAGS="-g -fverbose-asm"
+    DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
+    PROD_CFLAGS="-O3 -fomit-frame-pointer"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  cc)
+    CFLAGS="$CFLAGS"
+    DEBUG_CFLAGS="-g -h zero -h scalar0"
+    DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
+    PROD_CFLAGS="-O2 -h scalar0"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  *)
+    CFLAGS="$CFLAGS -ansi"
+    DEBUG_CFLAGS="-g"
+    DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
+    PROD_CFLAGS="-O"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+# Hard set the flag to indicate that converting denormalized floating-point
+# values doesn't work.
+hdf5_cv_convert_denormal_float=${hdf5_cv_convert_denormal_float='no'}

Added: packages/hdf5/branches/upstream/current/config/unicosmk
===================================================================
--- packages/hdf5/branches/upstream/current/config/unicosmk	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/unicosmk	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,151 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+  CC=cc
+  CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+  gcc)
+    CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+    DEBUG_CFLAGS="-g -fverbose-asm"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O3 -fomit-frame-pointer"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  cc)
+    CFLAGS="$CFLAGS"
+    DEBUG_CFLAGS="-g -h zero"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O2 -h scalar0"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  *)
+    CFLAGS="$CFLAGS -ansi"
+    DEBUG_CFLAGS="-g"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}

Added: packages/hdf5/branches/upstream/current/config/unicosmk2.0.5.X
===================================================================
--- packages/hdf5/branches/upstream/current/config/unicosmk2.0.5.X	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/unicosmk2.0.5.X	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,151 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+  CC=cc
+  CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+  gcc)
+    CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+    DEBUG_CFLAGS="-g -fverbose-asm"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O3 -fomit-frame-pointer"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  cc)
+    CFLAGS="$CFLAGS"
+    DEBUG_CFLAGS="-g -h zero"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O2 -h scalar0"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  *)
+    CFLAGS="$CFLAGS -ansi"
+    DEBUG_CFLAGS="-g"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}

Added: packages/hdf5/branches/upstream/current/config/unicosmk2.0.6.X
===================================================================
--- packages/hdf5/branches/upstream/current/config/unicosmk2.0.6.X	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/unicosmk2.0.6.X	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,155 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+  CC=cc
+  CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+  gcc)
+    CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+    DEBUG_CFLAGS="-g -fverbose-asm"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O3 -fomit-frame-pointer"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  cc)
+    CFLAGS="$CFLAGS"
+    DEBUG_CFLAGS="-g -h zero"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O2 -h scalar0"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  *)
+    CFLAGS="$CFLAGS -ansi"
+    DEBUG_CFLAGS="-g"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+# Hard set the flag to indicate that converting denormalized floating-point
+# values doesn't work.
+hdf5_cv_convert_denormal_float=${hdf5_cv_convert_denormal_float='no'}

Added: packages/hdf5/branches/upstream/current/config/unicosmk2.0.X
===================================================================
--- packages/hdf5/branches/upstream/current/config/unicosmk2.0.X	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/config/unicosmk2.0.X	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,151 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+  CC=cc
+  CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+  gcc)
+    CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+    DEBUG_CFLAGS="-g -fverbose-asm"
+    DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O3 -fomit-frame-pointer"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  cc)
+    CFLAGS="$CFLAGS"
+    DEBUG_CFLAGS="-g -h zero"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O2 -h scalar0"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+
+  *)
+    CFLAGS="$CFLAGS -ansi"
+    DEBUG_CFLAGS="-g"
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS="-pg"
+    PROFILE_CPPFLAGS=
+    ;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}

Added: packages/hdf5/branches/upstream/current/configure
===================================================================
--- packages/hdf5/branches/upstream/current/configure	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/configure	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,38428 @@
+#! /bin/sh
+# From configure.in Id: configure.in.
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59 for HDF5 1.6.5.
+#
+# Report bugs to <hdfhelp at ncsa.uiuc.edu>.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Find the correct PATH separator.  Usually this is `:', but
+# DJGPP uses `;' like DOS.
+if test "X${PATH_SEPARATOR+set}" != Xset; then
+  UNAME=${UNAME-`uname 2>/dev/null`}
+  case X$UNAME in
+    *-DOS) lt_cv_sys_path_separator=';' ;;
+    *)     lt_cv_sys_path_separator=':' ;;
+  esac
+  PATH_SEPARATOR=$lt_cv_sys_path_separator
+fi
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "$0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='HDF5'
+PACKAGE_TARNAME='hdf5'
+PACKAGE_VERSION='1.6.5'
+PACKAGE_STRING='HDF5 1.6.5'
+PACKAGE_BUGREPORT='hdfhelp at ncsa.uiuc.edu'
+
+ac_unique_file="src/H5.c"
+ac_default_prefix=`pwd`/hdf5
+ac_subdirs_all="$ac_subdirs_all ${config_dirs}"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CPPFLAGS H5_CPPFLAGS H5_CFLAGS DEFAULT_LIBS TR HSIZET CC CFLAGS LDFLAGS ac_ct_CC EXEEXT OBJEXT config_dirs subdirs LT_STATIC_EXEC PERL AR SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S ECHO RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP CPP EGREP LIBTOOL USE_FILTER_DEFLATE USE_FILTER_SZIP SSL GASS TESTGASS SRB TESTSRB PTHREAD DEBUG_PKG TRACE_API INSTRUMENT_LIBRARY PARALLEL RUNSERIAL RUNPARALLEL TESTPARALLEL MPE FILTERS USE_FILTER_SHUFFLE USE_FILTER_FLETCHER32 H5_VERSION CONFIG_DATE CONFIG_USER CONFIG_MODE BYTESEX STATIC_SHARED CC_VERSION ROOT DYNAMIC_DIRS HL SEARCH SETX LIBOBJS LTLIBOBJS'
+ac_subst_files='DEPEND COMMENCE CONCLUDE'
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_option in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    eval "enable_$ac_feature=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_$ac_feature='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_$ac_package='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/-/_/g'`
+    eval "with_$ac_package=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    eval "$ac_envvar='$ac_optarg'"
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+	      localstatedir libdir includedir oldincludedir infodir mandir
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
+  else
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+  fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+   { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# Report the --help message.
+#
+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.6.5 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+  cat <<_ACEOF
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+			  [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+			  [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+_ACEOF
+
+  cat <<\_ACEOF
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of HDF5 1.6.5:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-hsizet        Datasets can normally be larger than memory and/or
+                          files but some compilers are unable to handle this
+                          (including versions of GCC before 2.8.0). Disabling
+                          the feature causes dataset sizes to be restricted to
+                          the size of core memory, or 'size_t'.
+  --enable-fortran        Compile the Fortran interface [default=no]
+  --enable-cxx            Compile the C++ interface [default=no]
+  --enable-static-exec    Build only statically linked executables
+                          [default=no]
+  --enable-shared=PKGS  build shared libraries default=yes
+  --enable-static=PKGS  build static libraries default=yes
+  --enable-fast-install=PKGS  optimize for fast installation default=yes
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-production     Determines how to run the compiler.
+  --enable-linux-lfs      Enable support for large (64-bit) files on Linux.
+                          [default=check]
+  --enable-threadsafe     Enable thread safe capability
+  --enable-hdf5v1_4       Compile the HDF5 v1.4 compatibility interface
+                          [default=no]
+  --enable-stream-vfd     Build the Stream Virtual File Driver [default=yes]
+  --enable-gpfs           Enable GPFS hints for the MPI/POSIX file driver.
+                          [default=no]
+  --enable-debug=all      Turn on debugging in all packages. One may also
+                          specify a comma-separated list of package names
+                          without the leading H5 or the word no. The default
+                          is most packages.
+  --enable-funcstack      Enable the function stack tracing. Default=no if
+                          debug is disabled.
+  --enable-trace          Enable API tracing capability. Default=no if debug
+                          is disabled.
+  --enable-instrument     Enable library instrumentation of optimization
+                          tracing. Default=no if debug is disabled.
+  --enable-parallel       Search for MPI-IO and MPI support files
+  --enable-filters=all    Turn on all internal I/O filters. One may also
+                          specify a comma-separated list of filters or the
+                          word no. The default is all internal I/O filters.
+  --enable-hl             Enable the high level library [default=yes]
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-pic              try to use only PIC/non-PIC objects default=use both
+
+ For the following --with-xxx options, you can specify where the header
+ files and libraries are in two different ways:
+
+    --with-xxx=INC,LIB - Specify individually the include directory and
+                         library directory separated by a comma
+    --with-xxx=DIR     - Specify only the directory which contains the
+                         include/ and lib/ subdirectories
+
+  --with-dmalloc=DIR      Use dmalloc memory debugging aid [default=no]
+  --with-zlib=DIR         Use zlib library for external deflate I/O filter
+                          [default=yes]
+  --with-szlib=DIR        Use szlib library for external szlib I/O filter
+                          [default=no]
+  --with-ssl=LIB          Use the SSL library [default=no]
+  --with-gass=DIR         Use the GASS library [default=no]
+  --with-srb=DIR          Use the SRB library [default=no]
+  --with-pthread=DIR      Use the Pthreads library [default=no]
+  --with-mpe=DIR          Use MPE instrumentation [default=no]
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <hdfhelp at ncsa.uiuc.edu>.
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d $ac_dir || continue
+    ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+    cd $ac_dir
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_srcdir/configure; then
+      echo
+      $SHELL $ac_srcdir/configure  --help=recursive
+    elif test -f $ac_srcdir/configure.ac ||
+	   test -f $ac_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi
+    cd $ac_popdir
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\_ACEOF
+HDF5 configure 1.6.5
+generated by GNU Autoconf 2.59
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<_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.6.5, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+      # Get rid of the leading space.
+      ac_sep=" "
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+}
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=$`echo $ac_var`
+      echo "$ac_var='"'"'$ac_val'"'"'"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=$`echo $ac_var`
+	echo "$ac_var='"'"'$ac_val'"'"'"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      sed "/^$/d" confdefs.h | sort
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core &&
+  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+     ' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . $cache_file;;
+      *)                      . ./$cache_file;;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+  eval ac_new_val="\$ac_env_${ac_var}_value"
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+	ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+          ac_config_headers="$ac_config_headers src/H5config.h"
+
+
+ac_aux_dir=
+for ac_dir in bin $srcdir/bin; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f $ac_dir/shtool; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in bin $srcdir/bin" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in bin $srcdir/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+
+          ac_config_commands="$ac_config_commands default-1"
+
+
+case $host_alias in
+  tflops)
+    host_alias=i386-intel-osf1
+    ;;
+esac
+
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+  ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+  ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+
+
+
+
+ DEFAULT_LIBS=""
+
+
+
+echo "$as_me:$LINENO: checking shell variables initial values" >&5
+echo $ECHO_N "checking shell variables initial values... $ECHO_C" >&6
+set >&5
+echo "$as_me:$LINENO: result: done" >&5
+echo "${ECHO_T}done" >&6
+
+echo "$as_me:$LINENO: checking if tr works" >&5
+echo $ECHO_N "checking if tr works... $ECHO_C" >&6
+
+if test "X${TR}" = "X"; then
+  TR=tr
+fi
+TR_TEST="`echo Test | ${TR} 'a-z,' 'A-Z '`"
+if test "X${TR_TEST}" != "XTEST"; then
+  { { echo "$as_me:$LINENO: error: tr program doesn't work" >&5
+echo "$as_me: error: tr program doesn't work" >&2;}
+   { (exit 1); exit 1; }; }
+else
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+fi
+
+echo "$as_me:$LINENO: checking if basename works" >&5
+echo $ECHO_N "checking if basename works... $ECHO_C" >&6
+BASENAME_TEST="`basename /foo/bar/baz/qux/basename_works`"
+if test $BASENAME_TEST != "basename_works"; then
+  { { echo "$as_me:$LINENO: error: basename program doesn't work" >&5
+echo "$as_me: error: basename program doesn't work" >&2;}
+   { (exit 1); exit 1; }; }
+else
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+fi
+
+echo "$as_me:$LINENO: checking if xargs works" >&5
+echo $ECHO_N "checking if xargs works... $ECHO_C" >&6
+XARGS_TEST="`echo /foo/bar/baz/qux/xargs_works | xargs basename`"
+if test $XARGS_TEST != "xargs_works"; then
+  { { echo "$as_me:$LINENO: error: xargs program doesn't work" >&5
+echo "$as_me: error: xargs program doesn't work" >&2;}
+   { (exit 1); exit 1; }; }
+else
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+fi
+
+echo "$as_me:$LINENO: checking for cached host" >&5
+echo $ECHO_N "checking for cached host... $ECHO_C" >&6
+if test "${hdf5_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  hdf5_cv_host="none"
+fi
+echo "$as_me:$LINENO: result: $hdf5_cv_host" >&5
+echo "${ECHO_T}$hdf5_cv_host" >&6;
+if test $hdf5_cv_host = "none"; then
+  hdf5_cv_host=$host
+elif test $hdf5_cv_host != $host; then
+  echo "The config.cache file was generated on $hdf5_cv_host but"
+  echo "this is $host.  Please remove that file and try again."
+  { { echo "$as_me:$LINENO: error: config.cache file is invalid" >&5
+echo "$as_me: error: config.cache file is invalid" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+case $host_os in
+  aix4.*)
+    host_os_novers=aix4.x
+    ;;
+  aix5.*)
+    host_os_novers=aix5.x
+    ;;
+  freebsd*)
+    host_os_novers=freebsd
+    ;;
+  irix5.*)
+    host_os_novers=irix5.x
+    ;;
+  irix6.*)
+    host_os_novers=irix6.x
+    ;;
+  osf4.*)
+    host_os_novers=osf4.x
+    ;;
+  osf5.*)
+    host_os_novers=osf5.x
+    ;;
+  solaris2.*)
+    host_os_novers=solaris2.x
+    ;;
+  *)
+    host_os_novers=$host_os
+    ;;
+esac
+
+# Check whether --enable-hsizet or --disable-hsizet was given.
+if test "${enable_hsizet+set}" = set; then
+  enableval="$enable_hsizet"
+  HSIZET=$enableval
+fi;
+
+echo "$as_me:$LINENO: checking for sizeof hsize_t and hssize_t" >&5
+echo $ECHO_N "checking for sizeof hsize_t and hssize_t... $ECHO_C" >&6
+
+
+case $HSIZET in
+  no|small)
+    echo "$as_me:$LINENO: result: small" >&5
+echo "${ECHO_T}small" >&6
+    HSIZET=small
+    ;;
+  *)
+    echo "$as_me:$LINENO: result: large" >&5
+echo "${ECHO_T}large" >&6
+    HSIZET=large
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LARGE_HSIZET 1
+_ACEOF
+
+    ;;
+esac
+
+host_config="none"
+for f in $host_cpu-$host_vendor-$host_os \
+         $host_cpu-$host_vendor-$host_os_novers \
+         $host_vendor-$host_os \
+         $host_vendor-$host_os_novers \
+         $host_cpu-$host_os \
+         $host_cpu-$host_os_novers \
+         $host_cpu-$host_vendor \
+         $host_os \
+         $host_os_novers \
+         $host_vendor \
+         $host_cpu ; do
+  echo "$as_me:$LINENO: checking for config $f" >&5
+echo $ECHO_N "checking for config $f... $ECHO_C" >&6
+  if test -f "$srcdir/config/$f"; then
+    host_config=$srcdir/config/$f
+    echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+    break
+  fi
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+done
+if test "X$host_config" != "Xnone"; then
+  CC_BASENAME="`echo $CC | cut -f1 -d' ' | xargs basename 2>/dev/null`"
+  . $host_config
+fi
+
+hname="`hostname`"
+while test -n "$hname"; do
+  file=$srcdir/config/site-specific/host-$hname
+  echo "$as_me:$LINENO: checking for config $file" >&5
+echo $ECHO_N "checking for config $file... $ECHO_C" >&6
+  if test -f "$file"; then
+    . $file
+    echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+    break
+  fi
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+  hname_tmp=$hname
+  hname="`echo $hname | cut -d. -f2-99`"
+  test "$hname_tmp" = "$hname" && break
+done
+
+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
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+	;;
+    conftest.$ac_ext )
+	# This is the source file.
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	# FIXME: I believe we export ac_cv_exeext for Libtool,
+	# but it would be cool to find out if it's true.  Does anybody
+	# maintain Libtool? --akim.
+	export ac_cv_exeext
+	break;;
+    * )
+	break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  export ac_cv_exeext
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+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
+
+CC_BASENAME="`echo $CC | cut -f1 -d' ' | xargs basename 2>/dev/null`"
+
+ config_dirs=""
+
+echo "$as_me:$LINENO: checking if fortran interface enabled" >&5
+echo $ECHO_N "checking if fortran interface enabled... $ECHO_C" >&6
+# Check whether --enable-fortran or --disable-fortran was given.
+if test "${enable_fortran+set}" = set; then
+  enableval="$enable_fortran"
+  HDF_FORTRAN=$enableval
+fi;
+
+if test "X$HDF_FORTRAN" = "Xyes"; then
+  echo "yes"
+  if test -z "$config_dirs"; then
+    config_dirs="fortran"
+  else
+    config_dirs="${config_dirs} fortran"
+  fi
+else
+  echo "no"
+fi
+
+echo "$as_me:$LINENO: checking if c++ interface enabled" >&5
+echo $ECHO_N "checking if c++ interface enabled... $ECHO_C" >&6
+# Check whether --enable-cxx or --disable-cxx was given.
+if test "${enable_cxx+set}" = set; then
+  enableval="$enable_cxx"
+  HDF_CXX=$enableval
+fi;
+
+if test "X$HDF_CXX" = "Xyes"; then
+  echo "yes"
+  if test -z "$config_dirs"; then
+    config_dirs="c++"
+  else
+    config_dirs="${config_dirs} c++"
+  fi
+else
+  echo "no"
+fi
+
+
+
+subdirs="$subdirs ${config_dirs}"
+
+
+echo "$as_me:$LINENO: checking if should build only statically linked executables" >&5
+echo $ECHO_N "checking if should build only statically linked executables... $ECHO_C" >&6
+# Check whether --enable-static_exec or --disable-static_exec was given.
+if test "${enable_static_exec+set}" = set; then
+  enableval="$enable_static_exec"
+  STATIC_EXEC=$enableval
+fi;
+
+if test "X$STATIC_EXEC" = "Xyes"; then
+  echo "yes"
+  LT_STATIC_EXEC="-all-static"
+else
+  echo "no"
+  LT_STATIC_EXEC=""
+fi
+
+
+ PERL=""
+if test "X$GCC" = "Xyes"; then
+  for ac_prog in perl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_PERL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$PERL"; then
+  ac_cv_prog_PERL="$PERL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_PERL="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+PERL=$ac_cv_prog_PERL
+if test -n "$PERL"; then
+  echo "$as_me:$LINENO: result: $PERL" >&5
+echo "${ECHO_T}$PERL" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$PERL" && break
+done
+
+fi
+
+if test -z "$AR"; then
+  for ac_prog in ar xar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$AR" && break
+done
+test -n "$AR" || AR=":"
+
+fi
+
+
+export AR
+
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+all:
+	@echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+  SET_MAKE=
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL=$ac_install_sh
+  fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+# Check whether --enable-shared or --disable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval="$enable_shared"
+  p=${PACKAGE-default}
+case $enableval in
+yes) enable_shared=yes ;;
+no) enable_shared=no ;;
+*)
+  enable_shared=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_shared=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+else
+  enable_shared=yes
+fi;
+# Check whether --enable-static or --disable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval="$enable_static"
+  p=${PACKAGE-default}
+case $enableval in
+yes) enable_static=yes ;;
+no) enable_static=no ;;
+*)
+  enable_static=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_static=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+else
+  enable_static=yes
+fi;
+# Check whether --enable-fast-install or --disable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+  enableval="$enable_fast_install"
+  p=${PACKAGE-default}
+case $enableval in
+yes) enable_fast_install=yes ;;
+no) enable_fast_install=no ;;
+*)
+  enable_fast_install=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_fast_install=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+else
+  enable_fast_install=yes
+fi;
+# Find the correct PATH separator.  Usually this is `:', but
+# DJGPP uses `;' like DOS.
+if test "X${PATH_SEPARATOR+set}" != Xset; then
+  UNAME=${UNAME-`uname 2>/dev/null`}
+  case X$UNAME in
+    *-DOS) lt_cv_sys_path_separator=';' ;;
+    *)     lt_cv_sys_path_separator=':' ;;
+  esac
+  PATH_SEPARATOR=$lt_cv_sys_path_separator
+fi
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval="$with_gnu_ld"
+  test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+	test "$with_gnu_ld" != no && break
+      else
+	test "$with_gnu_ld" != yes && break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+  lt_cv_prog_gnu_ld=yes
+else
+  lt_cv_prog_gnu_ld=no
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
+reload_flag=$lt_cv_ld_reload_flag
+test -n "$reload_flag" && reload_flag=" $reload_flag"
+
+echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
+if test "${lt_cv_path_NM+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    test -z "$ac_dir" && ac_dir=.
+    tmp_nm=$ac_dir/${ac_tool_prefix}nm
+    if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      # Tru64's nm complains that /dev/null is an invalid object file
+      if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
+	lt_cv_path_NM="$tmp_nm -B"
+	break
+      elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+	lt_cv_path_NM="$tmp_nm -p"
+	break
+      else
+	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	continue # so that we can try to find one that supports BSD flags
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi
+fi
+
+NM="$lt_cv_path_NM"
+echo "$as_me:$LINENO: result: $NM" >&5
+echo "${ECHO_T}$NM" >&6
+
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5
+echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given egrep regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi4*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin* | mingw* | pw32*)
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  case "$host_os" in
+  rhapsody* | darwin1.[012])
+    lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
+    ;;
+  *) # Darwin 1.3 on
+    lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+    ;;
+  esac
+  ;;
+
+freebsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20*|hpux11*)
+  lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libc.sl
+  ;;
+
+irix5* | irix6*)
+  case $host_os in
+  irix5*)
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+    ;;
+  *)
+    case $LD in
+    *-32|*"-32 ") libmagic=32-bit;;
+    *-n32|*"-n32 ") libmagic=N32;;
+    *-64|*"-64 ") libmagic=64-bit;;
+    *) libmagic=never-match;;
+    esac
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
+    ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+  case $host_cpu in
+  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | s390* )
+    lt_cv_deplibs_check_method=pass_all ;;
+  *)
+    # glibc up to 2.1.1 does not perform some relocations on ARM
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+openbsd*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
+  else
+    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  # this will be overridden with pass_all, but let us keep it just in case
+  lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sco3.2v5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  lt_cv_file_magic_test_file=/lib/libc.so
+  ;;
+
+sysv5uw[78]* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  esac
+  ;;
+esac
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+
+
+
+
+
+
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output" >&5
+echo $ECHO_N "checking command to parse $NM output... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+irix*)
+  symcode='[BCDEGRST]'
+  ;;
+solaris* | sysv5*)
+  symcode='[BDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $host_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
+  symcode='[ABCDGISTW]'
+fi
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Write the raw and C identifiers.
+lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if egrep ' nm_test_var$' "$nlist" >/dev/null; then
+	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr address;
+}
+lt_preloaded_symbols[] =
+{
+EOF
+	  sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  save_LIBS="$LIBS"
+	  save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$no_builtin_flag"
+	  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$save_LIBS"
+	  CFLAGS="$save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  global_symbol_to_cdecl=
+  global_symbol_to_c_name_address=
+else
+  global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
+  global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address"
+fi
+if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address";
+then
+  echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6
+else
+  echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+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
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+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
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+  /*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+  ?:/*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+  ;;
+  *)
+  ac_save_MAGIC_CMD="$MAGIC_CMD"
+  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="/usr/bin:$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    egrep "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  MAGIC_CMD="$ac_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+  /*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+  ?:/*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+  ;;
+  *)
+  ac_save_MAGIC_CMD="$MAGIC_CMD"
+  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="/usr/bin:$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    egrep "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  MAGIC_CMD="$ac_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  RANLIB=$ac_ct_RANLIB
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  STRIP=$ac_ct_STRIP
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+
+enable_dlopen=no
+enable_win32_dll=no
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 4579 "configure"' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+
+     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
+
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  lt_cv_cc_needs_belf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+lt_cv_cc_needs_belf=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+     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
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+
+
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+need_locks="$enable_libtool_lock"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+if test x"$host" != x"$build"; then
+  ac_tool_prefix=${host_alias}-
+else
+  ac_tool_prefix=
+fi
+
+# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+case $host_os in
+linux-gnu*) ;;
+linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+esac
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+    ;;
+  *)
+    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Allow CC to be a program name with arguments.
+set dummy $CC
+compiler="$2"
+
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+echo "$as_me:$LINENO: result: $objdir" >&5
+echo "${ECHO_T}$objdir" >&6
+
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+  withval="$with_pic"
+  pic_mode="$withval"
+else
+  pic_mode=default
+fi;
+test -z "$pic_mode" && pic_mode=default
+
+# We assume here that the value for lt_cv_prog_cc_pic will not be cached
+# in isolation, and that seeing it set (from the cache) indicates that
+# the associated values are set (in the cache) correctly too.
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+if test "${lt_cv_prog_cc_pic+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+   lt_cv_prog_cc_pic=
+  lt_cv_prog_cc_shlib=
+  lt_cv_prog_cc_wl=
+  lt_cv_prog_cc_static=
+  lt_cv_prog_cc_no_builtin=
+  lt_cv_prog_cc_can_build_shared=$can_build_shared
+
+  if test "$GCC" = yes; then
+    lt_cv_prog_cc_wl='-Wl,'
+    lt_cv_prog_cc_static='-static'
+
+    case $host_os in
+    aix*)
+      # Below there is a dirty hack to force normal static linking with -ldl
+      # The problem is because libdl dynamically linked with both libc and
+      # libC (AIX C++ library), which obviously doesn't included in libraries
+      # list by gcc. This cause undefined symbols with -static flags.
+      # This hack allows C programs to be linked with "-static -ldl", but
+      # not sure about C++ programs.
+      lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_cv_prog_cc_pic='-fno-common'
+      ;;
+    cygwin* | mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_cv_prog_cc_pic='-DDLL_EXPORT'
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	 lt_cv_prog_cc_pic=-Kconform_pic
+      fi
+      ;;
+    *)
+      lt_cv_prog_cc_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for PIC flags for the system compiler.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      lt_cv_prog_cc_wl='-Wl,'
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_cv_prog_cc_static='-Bstatic'
+      else
+        ####################################################################
+        ## HACK Alert! This is causing problems with C++ on SP3...We'll just
+        ## remove this...THERE! All better now.
+        ####################################################################
+        ##lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
+		:
+      fi
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
+      lt_cv_prog_cc_pic='+Z'
+      ;;
+
+    irix5* | irix6*)
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static='-non_shared'
+      # PIC (with -KPIC) is the default.
+      ;;
+
+    cygwin* | mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_cv_prog_cc_pic='-DDLL_EXPORT'
+      ;;
+
+    newsos6)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      # All OSF/1 code is PIC.
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_cv_prog_cc_pic='-Kpic'
+      lt_cv_prog_cc_static='-dn'
+      lt_cv_prog_cc_shlib='-belf'
+      ;;
+
+    solaris*)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      lt_cv_prog_cc_wl='-Wl,'
+      ;;
+
+    sunos4*)
+      lt_cv_prog_cc_pic='-PIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      lt_cv_prog_cc_wl='-Qoption ld '
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      if test "x$host_vendor" = xsni; then
+	lt_cv_prog_cc_wl='-LD'
+      else
+	lt_cv_prog_cc_wl='-Wl,'
+      fi
+      ;;
+
+    uts4*)
+      lt_cv_prog_cc_pic='-pic'
+      lt_cv_prog_cc_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_cv_prog_cc_pic='-Kconform_pic'
+	lt_cv_prog_cc_static='-Bstatic'
+      fi
+      ;;
+
+    *)
+      lt_cv_prog_cc_can_build_shared=no
+      ;;
+    esac
+  fi
+
+fi
+
+if test -z "$lt_cv_prog_cc_pic"; then
+  echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+else
+  echo "$as_me:$LINENO: result: $lt_cv_prog_cc_pic" >&5
+echo "${ECHO_T}$lt_cv_prog_cc_pic" >&6
+
+  # Check to make sure the pic_flag actually works.
+  echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_cv_prog_cc_pic works... $ECHO_C" >&6
+  if test "${lt_cv_prog_cc_pic_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      save_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+        case $host_os in
+      hpux9* | hpux10* | hpux11*)
+	# On HP-UX, both CC and GCC only warn that PIC is supported... then
+	# they create non-PIC objects.  So, if there were any warnings, we
+	# assume that PIC is not supported.
+	if test -s conftest.err; then
+	  lt_cv_prog_cc_pic_works=no
+	else
+	  lt_cv_prog_cc_pic_works=yes
+	fi
+	;;
+      *)
+	lt_cv_prog_cc_pic_works=yes
+	;;
+      esac
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+      lt_cv_prog_cc_pic_works=no
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+    CFLAGS="$save_CFLAGS"
+
+fi
+
+
+  if test "X$lt_cv_prog_cc_pic_works" = Xno; then
+    lt_cv_prog_cc_pic=
+    lt_cv_prog_cc_can_build_shared=no
+  else
+    lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
+  fi
+
+  echo "$as_me:$LINENO: result: $lt_cv_prog_cc_pic_works" >&5
+echo "${ECHO_T}$lt_cv_prog_cc_pic_works" >&6
+fi
+
+# Check for any special shared library compilation flags.
+if test -n "$lt_cv_prog_cc_shlib"; then
+  { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&5
+echo "$as_me: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&2;}
+  if echo "$old_CC $old_CFLAGS " | egrep -e "[ 	]$lt_cv_prog_cc_shlib[ 	]" >/dev/null; then :
+  else
+   { echo "$as_me:$LINENO: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
+echo "$as_me: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
+    lt_cv_prog_cc_can_build_shared=no
+  fi
+fi
+
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_cv_prog_cc_static works... $ECHO_C" >&6
+if test "${lt_cv_prog_cc_static_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+    lt_cv_prog_cc_static_works=no
+  save_LDFLAGS="$LDFLAGS"
+  LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  lt_cv_prog_cc_static_works=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS="$save_LDFLAGS"
+
+fi
+
+
+# Belt *and* braces to stop my trousers falling down:
+test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
+echo "$as_me:$LINENO: result: $lt_cv_prog_cc_static_works" >&5
+echo "${ECHO_T}$lt_cv_prog_cc_static_works" >&6
+
+pic_flag="$lt_cv_prog_cc_pic"
+special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
+wl="$lt_cv_prog_cc_wl"
+link_static_flag="$lt_cv_prog_cc_static"
+no_builtin_flag="$lt_cv_prog_cc_no_builtin"
+can_build_shared="$lt_cv_prog_cc_can_build_shared"
+
+
+# Check to see if options -o and -c are simultaneously supported by compiler
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_compiler_c_o+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+$rm -r conftest 2>/dev/null
+mkdir conftest
+cd conftest
+echo "int some_variable = 0;" > conftest.$ac_ext
+mkdir out
+# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+# that will create temporary files in the current directory regardless of
+# the output directory.  Thus, making CWD read-only will cause this test
+# to fail, enabling locking or at least warning the user not to do parallel
+# builds.
+chmod -w .
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
+compiler_c_o=no
+if { (eval echo configure:5146: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
+  # The compiler can only warn and ignore the option if not recognized
+  # So say no if there are warnings
+  if test -s out/conftest.err; then
+    lt_cv_compiler_c_o=no
+  else
+    lt_cv_compiler_c_o=yes
+  fi
+else
+  # Append any errors to the config.log.
+  cat out/conftest.err 1>&5
+  lt_cv_compiler_c_o=no
+fi
+CFLAGS="$save_CFLAGS"
+chmod u+w .
+$rm conftest* out/*
+rmdir out
+cd ..
+rmdir conftest
+$rm -r conftest 2>/dev/null
+
+fi
+
+compiler_c_o=$lt_cv_compiler_c_o
+echo "$as_me:$LINENO: result: $compiler_c_o" >&5
+echo "${ECHO_T}$compiler_c_o" >&6
+
+if test x"$compiler_c_o" = x"yes"; then
+  # Check to see if we can write to a .lo
+  echo "$as_me:$LINENO: checking if $compiler supports -c -o file.lo" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.lo... $ECHO_C" >&6
+  if test "${lt_cv_compiler_o_lo+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+  lt_cv_compiler_o_lo=no
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -c -o conftest.lo"
+  save_objext="$ac_objext"
+  ac_objext=lo
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+int some_variable = 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+      # The compiler can only warn and ignore the option if not recognized
+    # So say no if there are warnings
+    if test -s conftest.err; then
+      lt_cv_compiler_o_lo=no
+    else
+      lt_cv_compiler_o_lo=yes
+    fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_objext="$save_objext"
+  CFLAGS="$save_CFLAGS"
+
+fi
+
+  compiler_o_lo=$lt_cv_compiler_o_lo
+  echo "$as_me:$LINENO: result: $compiler_o_lo" >&5
+echo "${ECHO_T}$compiler_o_lo" >&6
+else
+  compiler_o_lo=no
+fi
+
+# Check to see if we can do hard links to lock some files if needed
+hard_links="nottested"
+if test "$compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+if test "$GCC" = yes; then
+  # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
+  echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
+  compiler_rtti_exceptions=no
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+int some_variable = 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+      # The compiler can only warn and ignore the option if not recognized
+    # So say no if there are warnings
+    if test -s conftest.err; then
+      compiler_rtti_exceptions=no
+    else
+      compiler_rtti_exceptions=yes
+    fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+  echo "$as_me:$LINENO: result: $compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$compiler_rtti_exceptions" >&6
+
+  if test "$compiler_rtti_exceptions" = "yes"; then
+    no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
+  else
+    no_builtin_flag=' -fno-builtin'
+  fi
+fi
+
+# See if the linker supports building shared libraries.
+echo "$as_me:$LINENO: checking whether the linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+allow_undefined_flag=
+no_undefined_flag=
+need_lib_prefix=unknown
+need_version=unknown
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+archive_cmds=
+archive_expsym_cmds=
+old_archive_from_new_cmds=
+old_archive_from_expsyms_cmds=
+export_dynamic_flag_spec=
+whole_archive_flag_spec=
+thread_safe_flag_spec=
+hardcode_into_libs=no
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+hardcode_shlibpath_var=unsupported
+runpath_var=
+link_all_deplibs=unknown
+always_export_symbols=no
+export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
+# include_expsyms should be a list of space-separated symbols to be *always*
+# included in the symbol list
+include_expsyms=
+# exclude_expsyms can be an egrep regular expression of symbols to exclude
+# it will be wrapped by ` (' and `)$', so one must not match beginning or
+# end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+# as well as any symbol that contains `d'.
+exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+# platforms (ab)use it in PIC code, but their linkers get confused if
+# the symbol is explicitly referenced.  Since portable code cannot
+# rely on this symbol name, it's probably fine to never include it in
+# preloaded symbol tables.
+extract_expsyms_cmds=
+
+case $host_os in
+cygwin* | mingw* | pw32*)
+  # FIXME: the MSVC++ port hasn't been tested in a loooong time
+  # When not using gcc, we currently assume that we are using
+  # Microsoft Visual C++.
+  if test "$GCC" != yes; then
+    with_gnu_ld=no
+  fi
+  ;;
+openbsd*)
+  with_gnu_ld=no
+  ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # If archive_cmds runs LD, not CC, wlarc should be empty
+  wlarc='${wl}'
+
+  # See if GNU ld supports shared libraries.
+  case $host_os in
+  aix3* | aix4* | aix5*)
+    # On AIX, the GNU linker is very broken
+    # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
+    ld_shlibs=no
+    cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+    ;;
+
+  amigaos*)
+    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+
+    # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+    # that the semantics of dynamic libraries on AmigaOS, at least up
+    # to version 4, is to share data among multiple programs linked
+    # with the same dynamic library.  Since this doesn't match the
+    # behavior of shared libraries on other platforms, we can use
+    # them.
+    ld_shlibs=no
+    ;;
+
+  beos*)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      allow_undefined_flag=unsupported
+      # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+      # support --undefined.  This deserves some investigation.  FIXME
+      archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # hardcode_libdir_flag_spec is actually meaningless, as there is
+    # no search path for DLLs.
+    hardcode_libdir_flag_spec='-L$libdir'
+    allow_undefined_flag=unsupported
+    always_export_symbols=yes
+
+    extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
+      sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
+      test -f $output_objdir/impgen.exe || (cd $output_objdir && \
+      if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
+      else $CC -o impgen impgen.c ; fi)~
+      $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
+
+    old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
+
+    # cygwin and mingw dlls have different entry points and sets of symbols
+    # to exclude.
+    # FIXME: what about values for MSVC?
+    dll_entry=__cygwin_dll_entry at 12
+    dll_exclude_symbols=DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12~
+    case $host_os in
+    mingw*)
+      # mingw values
+      dll_entry=_DllMainCRTStartup at 12
+      dll_exclude_symbols=DllMain at 12,DllMainCRTStartup at 12,DllEntryPoint at 12~
+      ;;
+    esac
+
+    # mingw and cygwin differ, and it's simplest to just exclude the union
+    # of the two symbol sets.
+    dll_exclude_symbols=DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12,DllMainCRTStartup at 12,DllEntryPoint at 12
+
+    # recent cygwin and mingw systems supply a stub DllMain which the user
+    # can override, but on older systems we have to supply one (in ltdll.c)
+    if test "x$lt_cv_need_dllmain" = "xyes"; then
+      ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
+      ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~
+	test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
+    else
+      ltdll_obj=
+      ltdll_cmds=
+    fi
+
+    # Extract the symbol export list from an `--export-all' def file,
+    # then regenerate the def file from the symbol export list, so that
+    # the compiled dll only exports the symbol export list.
+    # Be careful not to strip the DATA tag left be newer dlltools.
+    export_symbols_cmds="$ltdll_cmds"'
+      $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
+      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
+
+    # If the export-symbols file already is a .def file (1st line
+    # is EXPORTS), use it as is.
+    # If DATA tags from a recent dlltool are present, honour them!
+    archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname-def;
+      else
+	echo EXPORTS > $output_objdir/$soname-def;
+	_lt_hint=1;
+	cat $export_symbols | while read symbol; do
+	 set dummy \$symbol;
+	 case \$# in
+	   2) echo "   \$2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
+	   *) echo "     \$2 @ \$_lt_hint \$3 ; " >> $output_objdir/$soname-def;;
+	 esac;
+	 _lt_hint=`expr 1 + \$_lt_hint`;
+	done;
+      fi~
+      '"$ltdll_cmds"'
+      $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
+      $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
+      $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
+    ;;
+
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+      wlarc=
+    else
+      archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    fi
+    ;;
+
+  solaris* | sysv5*)
+    if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+      ld_shlibs=no
+      cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+    elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+  sunos4*)
+    archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+    wlarc=
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  *)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+  esac
+
+  if test "$ld_shlibs" = yes; then
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    case $host_os in
+    cygwin* | mingw* | pw32*)
+      # dlltool doesn't understand --whole-archive et. al.
+      whole_archive_flag_spec=
+      ;;
+    *)
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
+	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+	whole_archive_flag_spec=
+      fi
+      ;;
+    esac
+  fi
+else
+  # PORTME fill in a description of your system's linker (not GNU ld)
+  case $host_os in
+  aix3*)
+    allow_undefined_flag=unsupported
+    always_export_symbols=yes
+    archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+    # Note: this linker hardcodes the directories in LIBPATH if there
+    # are no directories specified by -L.
+    hardcode_minus_L=yes
+    if test "$GCC" = yes && test -z "$link_static_flag"; then
+      # Neither direct hardcoding nor static linking is supported with a
+      # broken collect2.
+      hardcode_direct=unsupported
+    fi
+    ;;
+
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	done
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    hardcode_direct=yes
+    archive_cmds=''
+    hardcode_libdir_separator=':'
+    if test "$GCC" = yes; then
+      case $host_os in aix4.[012]|aix4.[012].*)
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	  strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  hardcode_direct=yes
+	else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	fi
+      esac
+
+      shared_flag='-shared'
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	shared_flag='${wl}-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall can do strange things, so it is better to
+    # generate a list of symbols to export.
+    always_export_symbols=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      allow_undefined_flag='-berok'
+      hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
+      archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+    else
+      if test "$host_cpu" = ia64; then
+	hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	allow_undefined_flag="-z nodefs"
+	archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+      else
+        #######################################################################
+        # This is a MAJOR HACK(tm) to get HDF5 to compile on AIX systems.
+        # The ``-b nolibpath -b ...'' flags were messing with the mpicc
+        # compiler's already defined library paths and it wasn't able to find
+        # the libraries it needed to run....DOH!
+        # Apply the fix unless HDF5_AIX_LIBTOOL_NOPATCH is defined.
+        if test "$HDF5_AIX_LIBTOOL_NOPATCH" = ""; then
+            hardcode_libdir_flag_spec=' '
+        else
+            hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
+        fi
+        #
+        # End MAJOR HACK
+        #
+        #######################################################################
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='${wl}-berok'
+	# This is a bit strange, but is similar to how AIX traditionally builds
+	# it's shared libraries.
+	archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
+      fi
+    fi
+    ;;
+
+  amigaos*)
+    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+    # see comment about different semantics on the GNU ld section
+    ld_shlibs=no
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    # hardcode_libdir_flag_spec is actually meaningless, as there is
+    # no search path for DLLs.
+    hardcode_libdir_flag_spec=' '
+    allow_undefined_flag=unsupported
+    # Tell ltmain to make .lib files, not .a files.
+    libext=lib
+    # FIXME: Setting linknames here is a bad hack.
+    archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+    # The linker will automatically build a .lib file if we build a DLL.
+    old_archive_from_new_cmds='true'
+    # FIXME: Should let the user specify the lib program.
+    old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+    fix_srcfile_path='`cygpath -w "$srcfile"`'
+    ;;
+
+  darwin* | rhapsody*)
+    case "$host_os" in
+    rhapsody* | darwin1.[012])
+      allow_undefined_flag='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      allow_undefined_flag='-flat_namespace -undefined suppress'
+      ;;
+    esac
+    # FIXME: Relying on posixy $() will cause problems for
+    #        cross-compilation, but unfortunately the echo tests do not
+    #        yet detect zsh echo's removal of \ escapes.
+    archive_cmds='$nonopt $(test "x$module" = xyes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring'
+    # We need to add '_' to the symbols in $export_symbols first
+    #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    whole_archive_flag_spec='-all_load $convenience'
+    ;;
+
+  freebsd1*)
+    ld_shlibs=no
+    ;;
+
+  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+  # support.  Future versions do this automatically, but an explicit c++rt0.o
+  # does not break anything, and helps significantly (at the cost of a little
+  # extra space).
+  freebsd2.2*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+  freebsd2*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_minus_L=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+  freebsd*)
+    archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  hpux9* | hpux10* | hpux11*)
+    case $host_os in
+    hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
+    *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
+    esac
+    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+    hardcode_libdir_separator=:
+    hardcode_direct=yes
+    hardcode_minus_L=yes # Not in the search PATH, but as the default
+			 # location of the library.
+    export_dynamic_flag_spec='${wl}-E'
+    ;;
+
+  irix5* | irix6*)
+    if test "$GCC" = yes; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+    else
+      archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    link_all_deplibs=yes
+    ;;
+
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+    else
+      archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+    fi
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  newsos6)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    hardcode_shlibpath_var=no
+    ;;
+
+  openbsd*)
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+    else
+      case "$host_os" in
+      openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_libdir_flag_spec='-R$libdir'
+        ;;
+      *)
+        archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+        ;;
+      esac
+    fi
+    ;;
+
+  os2*)
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+    allow_undefined_flag=unsupported
+    archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+    old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+    ;;
+
+  osf3*)
+    if test "$GCC" = yes; then
+      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+    else
+      allow_undefined_flag=' -expect_unresolved \*'
+      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    ;;
+
+  osf4* | osf5*)	# as osf3* with the addition of -msym flag
+    if test "$GCC" = yes; then
+      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    else
+      allow_undefined_flag=' -expect_unresolved \*'
+      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+      $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+      #Both c and cxx compiler support -rpath directly
+      hardcode_libdir_flag_spec='-rpath $libdir'
+    fi
+    hardcode_libdir_separator=:
+    ;;
+
+  sco3.2v5*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_shlibpath_var=no
+    runpath_var=LD_RUN_PATH
+    hardcode_runpath_var=yes
+    export_dynamic_flag_spec='${wl}-Bexport'
+    ;;
+
+  solaris*)
+    # gcc --version < 3.0 without binutils cannot create self contained
+    # shared libraries reliably, requiring libgcc.a to resolve some of
+    # the object symbols generated in some cases.  Libraries that use
+    # assert need libgcc.a to resolve __eprintf, for example.  Linking
+    # a copy of libgcc.a into every shared library to guarantee resolving
+    # such symbols causes other problems:  According to Tim Van Holder
+    # <tim.van.holder at pandora.be>, C++ libraries end up with a separate
+    # (to the application) exception stack for one thing.
+    no_undefined_flag=' -z defs'
+    if test "$GCC" = yes; then
+      case `$CC --version 2>/dev/null` in
+      [12].*)
+	cat <<EOF 1>&2
+
+*** Warning: Releases of GCC earlier than version 3.0 cannot reliably
+*** create self contained shared libraries on Solaris systems, without
+*** introducing a dependency on libgcc.a.  Therefore, libtool is disabling
+*** -no-undefined support, which will at least allow you to build shared
+*** libraries.  However, you may find that when you link such libraries
+*** into an application without using GCC, you have to manually add
+*** \`gcc --print-libgcc-file-name\` to the link command.  We urge you to
+*** upgrade to a newer version of GCC.  Another option is to rebuild your
+*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer.
+
+EOF
+        no_undefined_flag=
+	;;
+      esac
+    fi
+    # $CC -shared without GNU ld will not create a library from C++
+    # object files and a static libstdc++, better avoid it by now
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_shlibpath_var=no
+    case $host_os in
+    solaris2.[0-5] | solaris2.[0-5].*) ;;
+    *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+      whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+    esac
+    link_all_deplibs=yes
+    ;;
+
+  sunos4*)
+    if test "x$host_vendor" = xsequent; then
+      # Use $CC to link under sequent, because it throws in some extra .o
+      # files that make .init and .fini sections work.
+      archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+    else
+      archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+    fi
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_direct=yes
+    hardcode_minus_L=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4)
+    if test "x$host_vendor" = xsno; then
+      archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes # is this really true???
+    else
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+    fi
+    runpath_var='LD_RUN_PATH'
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4.3*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_shlibpath_var=no
+    export_dynamic_flag_spec='-Bexport'
+    ;;
+
+  sysv5*)
+    no_undefined_flag=' -z text'
+    # $CC -shared without GNU ld will not create a library from C++
+    # object files and a static libstdc++, better avoid it by now
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+    hardcode_libdir_flag_spec=
+    hardcode_shlibpath_var=no
+    runpath_var='LD_RUN_PATH'
+    ;;
+
+  uts4*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_shlibpath_var=no
+    ;;
+
+  dgux*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4*MP*)
+    if test -d /usr/nec; then
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ld_shlibs=yes
+    fi
+    ;;
+
+  sysv4.2uw2*)
+    archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_minus_L=no
+    hardcode_shlibpath_var=no
+    hardcode_runpath_var=yes
+    runpath_var=LD_RUN_PATH
+    ;;
+
+  sysv5uw7* | unixware7*)
+    no_undefined_flag='${wl}-z ${wl}text'
+    if test "$GCC" = yes; then
+      archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+    else
+      archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+    fi
+    runpath_var='LD_RUN_PATH'
+    hardcode_shlibpath_var=no
+    ;;
+
+  *)
+    ld_shlibs=no
+    ;;
+  esac
+fi
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+# Check hardcoding attributes.
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+   test -n "$runpath_var"; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$hardcode_shlibpath_var" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+# PORTME Fill in your ld.so characteristics
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}.so$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+	if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	     echo ' yes '
+	     echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	  :
+	else
+	  can_build_shared=no
+	fi
+	;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can
+    # not hardcode correct soname into executable. Probably we can
+    # add versioning support to collect2, so additional links can
+    # be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}.so$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}.so'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  export_dynamic_flag_spec=-rdynamic
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  need_version=no
+  need_lib_prefix=no
+  case $GCC,$host_os in
+  yes,cygwin*)
+    library_names_spec='$libname.dll.a'
+    soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
+    postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog .libs/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    ;;
+  yes,mingw*)
+    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
+    sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
+    ;;
+  yes,pw32*)
+    library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/./-/g'`${versuffix}.dll'
+    ;;
+  *)
+    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  # FIXME: Relying on posixy $() will cause problems for
+  #        cross-compilation, but unfortunately the echo tests do not
+  #        yet detect zsh echo's removal of \ escapes.
+  library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
+  soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  *)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  dynamic_linker="$host_os dld.sl"
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  shlibpath_var=SHLIB_PATH
+  shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+  library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
+  soname_spec='${libname}${release}.sl$major'
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6*)
+  version_type=irix
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}.so$major'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
+  case $host_os in
+  irix5*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
+    soname_spec='${libname}${release}.so$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case "$host_os" in
+    openbsd2.[89] | openbsd2.[89].*)
+      shlibpath_overrides_runpath=no
+      ;;
+    *)
+      shlibpath_overrides_runpath=yes
+      ;;
+    esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+os2*)
+  libname_spec='$name'
+  need_lib_prefix=no
+  library_names_spec='$libname.dll $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_version=no
+  soname_spec='${libname}${release}.so'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}.so$major'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
+    soname_spec='$libname.so.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+# Report the final consequences.
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+if test "$hardcode_action" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+        test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 7057 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 7155 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+if test "$enable_shared" = yes && test "$GCC" = yes; then
+  case $archive_cmds in
+  *'~'*)
+    # FIXME: we may have to deal with multi-command sequences.
+    ;;
+  '$CC '*)
+    # Test whether the compiler implicitly links with -lc since on some
+    # systems, -lgcc has to come before -lc. If gcc already passes -lc
+    # to ld, don't add -lc before -lgcc.
+    echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+    if test "${lt_cv_archive_cmds_need_lc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  $rm conftest*
+    echo 'static int dummy;' > conftest.$ac_ext
+
+    if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+      soname=conftest
+      lib=conftest
+      libobjs=conftest.$ac_objext
+      deplibs=
+      wl=$lt_cv_prog_cc_wl
+      compiler_flags=-v
+      linker_flags=-v
+      verstring=
+      output_objdir=.
+      libname=conftest
+      save_allow_undefined_flag=$allow_undefined_flag
+      allow_undefined_flag=
+      if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+      then
+	lt_cv_archive_cmds_need_lc=no
+      else
+	lt_cv_archive_cmds_need_lc=yes
+      fi
+      allow_undefined_flag=$save_allow_undefined_flag
+    else
+      cat conftest.err 1>&5
+    fi
+fi
+
+    echo "$as_me:$LINENO: result: $lt_cv_archive_cmds_need_lc" >&5
+echo "${ECHO_T}$lt_cv_archive_cmds_need_lc" >&6
+    ;;
+  esac
+fi
+need_lc=${lt_cv_archive_cmds_need_lc-yes}
+
+# The second clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  :
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  test -f Makefile && make "$ltmain"
+fi
+
+if test -f "$ltmain"; then
+  trap "$rm \"${ofile}T\"; exit 1" 1 2 15
+  $rm -f "${ofile}T"
+
+  echo creating $ofile
+
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS \
+    AR AR_FLAGS CC LD LN_S NM SHELL \
+    reload_flag reload_cmds wl \
+    pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
+    thread_safe_flag_spec whole_archive_flag_spec libname_spec \
+    library_names_spec soname_spec \
+    RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
+    old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
+    postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
+    old_striplib striplib file_magic_cmd export_symbols_cmds \
+    deplibs_check_method allow_undefined_flag no_undefined_flag \
+    finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
+    global_symbol_to_c_name_address \
+    hardcode_libdir_flag_spec hardcode_libdir_separator  \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
+
+    case $var in
+    reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
+    extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  cat <<__EOF__ > "${ofile}T"
+#! $SHELL
+
+# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996-2000 Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="sed -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$need_lc
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# The default C compiler.
+CC=$lt_CC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_pic_flag
+pic_mode=$pic_mode
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_compiler_c_o
+
+# Can we write directly to a .lo ?
+compiler_o_lo=$lt_compiler_o_lo
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_link_static_flag
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "${ofile}T"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | os2*)
+    cat <<'EOF' >> "${ofile}T"
+      # This is a source program that is used to create dlls on Windows
+      # Don't remove nor modify the starting and closing comments
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# #  ifdef __CYGWIN32__
+# #    define __CYGWIN__ __CYGWIN32__
+# #  endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+#   __hDllInstance_base = hInst;
+#   return TRUE;
+# }
+# /* ltdll.c ends here */
+	# This is a source program that is used to create import libraries
+	# on Windows for dlls which lack them. Don't remove nor modify the
+	# starting and closing comments
+# /* impgen.c starts here */
+# /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
+#
+#  This file is part of GNU libtool.
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#  */
+#
+# #include <stdio.h>		/* for printf() */
+# #include <unistd.h>		/* for open(), lseek(), read() */
+# #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
+# #include <string.h>		/* for strdup() */
+#
+# /* O_BINARY isn't required (or even defined sometimes) under Unix */
+# #ifndef O_BINARY
+# #define O_BINARY 0
+# #endif
+#
+# static unsigned int
+# pe_get16 (fd, offset)
+#      int fd;
+#      int offset;
+# {
+#   unsigned char b[2];
+#   lseek (fd, offset, SEEK_SET);
+#   read (fd, b, 2);
+#   return b[0] + (b[1]<<8);
+# }
+#
+# static unsigned int
+# pe_get32 (fd, offset)
+#     int fd;
+#     int offset;
+# {
+#   unsigned char b[4];
+#   lseek (fd, offset, SEEK_SET);
+#   read (fd, b, 4);
+#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# static unsigned int
+# pe_as32 (ptr)
+#      void *ptr;
+# {
+#   unsigned char *b = ptr;
+#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# int
+# main (argc, argv)
+#     int argc;
+#     char *argv[];
+# {
+#     int dll;
+#     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
+#     unsigned long export_rva, export_size, nsections, secptr, expptr;
+#     unsigned long name_rvas, nexp;
+#     unsigned char *expdata, *erva;
+#     char *filename, *dll_name;
+#
+#     filename = argv[1];
+#
+#     dll = open(filename, O_RDONLY|O_BINARY);
+#     if (dll < 1)
+# 	return 1;
+#
+#     dll_name = filename;
+#
+#     for (i=0; filename[i]; i++)
+# 	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
+# 	    dll_name = filename + i +1;
+#
+#     pe_header_offset = pe_get32 (dll, 0x3c);
+#     opthdr_ofs = pe_header_offset + 4 + 20;
+#     num_entries = pe_get32 (dll, opthdr_ofs + 92);
+#
+#     if (num_entries < 1) /* no exports */
+# 	return 1;
+#
+#     export_rva = pe_get32 (dll, opthdr_ofs + 96);
+#     export_size = pe_get32 (dll, opthdr_ofs + 100);
+#     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
+#     secptr = (pe_header_offset + 4 + 20 +
+# 	      pe_get16 (dll, pe_header_offset + 4 + 16));
+#
+#     expptr = 0;
+#     for (i = 0; i < nsections; i++)
+#     {
+# 	char sname[8];
+# 	unsigned long secptr1 = secptr + 40 * i;
+# 	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
+# 	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
+# 	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
+# 	lseek(dll, secptr1, SEEK_SET);
+# 	read(dll, sname, 8);
+# 	if (vaddr <= export_rva && vaddr+vsize > export_rva)
+# 	{
+# 	    expptr = fptr + (export_rva - vaddr);
+# 	    if (export_rva + export_size > vaddr + vsize)
+# 		export_size = vsize - (export_rva - vaddr);
+# 	    break;
+# 	}
+#     }
+#
+#     expdata = (unsigned char*)malloc(export_size);
+#     lseek (dll, expptr, SEEK_SET);
+#     read (dll, expdata, export_size);
+#     erva = expdata - export_rva;
+#
+#     nexp = pe_as32 (expdata+24);
+#     name_rvas = pe_as32 (expdata+32);
+#
+#     printf ("EXPORTS\n");
+#     for (i = 0; i<nexp; i++)
+#     {
+# 	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
+# 	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
+#     }
+#
+#     return 0;
+# }
+# /* impgen.c ends here */
+
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
+
+  mv -f "${ofile}T" "$ofile" || \
+    (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
+  chmod +x "$ofile"
+fi
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+# Prevent multiple expansion
+
+
+
+case $host_os in
+  linux*)
+    # If gcc is not used, need to set $wl to use "-Wl,"
+    if $CC -v 2>&1 | grep '^gcc' > /dev/null ; then
+      : using gcc
+    else
+      echo 'fixing $wl in' $ofile
+ed - $ofile <<EOF 2> /dev/null
+/^wl=""/s//wl="-Wl,"/
+w
+q
+EOF
+    fi
+    ;;
+esac
+
+
+case "$INSTALL" in
+  *install-sh*)
+    INSTALL='\${top_srcdir}/bin/install-sh -c'
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking make" >&5
+echo $ECHO_N "checking make... $ECHO_C" >&6
+
+
+if test "`${MAKE-make} --version -f /dev/null 2>/dev/null |\
+          sed -n 1p|cut -c1-8`" = "GNU Make"; then
+  echo "$as_me:$LINENO: result: GNU make" >&5
+echo "${ECHO_T}GNU make" >&6
+  GMAKE=yes
+  if test "X$GCC" = "Xyes"; then
+    DEPEND=config/depend1
+  else
+    DEPEND=config/depend2
+  fi
+else
+  echo "$as_me:$LINENO: result: generic" >&5
+echo "${ECHO_T}generic" >&6
+fi
+
+if test -z "$DEPEND"; then
+  echo "$as_me:$LINENO: checking how to include a makefile" >&5
+echo $ECHO_N "checking how to include a makefile... $ECHO_C" >&6
+
+    cat >makeinc <<EOF
+foo:
+	@:
+EOF
+
+  while true; do #for break
+            echo '.include <makeinc>' >maketest
+    if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      echo "$as_me:$LINENO: result: .include <FILE>" >&5
+echo "${ECHO_T}.include <FILE>" >&6
+      DEPEND=config/depend3
+      break
+    fi
+
+        echo 'include makeinc' >maketest
+    if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      echo "$as_me:$LINENO: result: include FILE" >&5
+echo "${ECHO_T}include FILE" >&6
+      DEPEND=config/depend4
+      break;
+    fi
+
+        echo "$as_me:$LINENO: result: you have a deficient make command" >&5
+echo "${ECHO_T}you have a deficient make command" >&6
+    DEPEND=config/dependN
+    break
+  done
+
+  rm makeinc maketest
+fi
+
+echo "$as_me:$LINENO: checking how make searches directories" >&5
+echo $ECHO_N "checking how make searches directories... $ECHO_C" >&6
+while true; do #for break
+  # The most common method is `VPATH=DIR1 DIR2 ...'
+  cat >maketest <<EOF
+VPATH=$srcdir/config $srcdir/src $srcdir/bin
+.c.o:
+	cp $< H5.o
+
+foo: H5.o
+	/bin/rm -f H5.o
+	@echo works
+EOF
+
+  if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+    SEARCH_RULE='VPATH='
+    SEARCH_SEP=' '
+    echo "$as_me:$LINENO: result: VPATH=DIR1 DIR2 ..." >&5
+echo "${ECHO_T}VPATH=DIR1 DIR2 ..." >&6
+    break
+  fi
+
+      cat >maketest <<EOF
+VPATH=$srcdir/config:$srcdir/src:$srcdir/bin
+.c.o:
+	cp $< H5.o
+
+foo: H5.o
+	/bin/rm -f H5.o
+	@echo works
+EOF
+
+  if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+    SEARCH_RULE='VPATH='
+    SEARCH_SEP=':'
+    echo "$as_me:$LINENO: result: VPATH=DIR1:DIR2:..." >&5
+echo "${ECHO_T}VPATH=DIR1:DIR2:..." >&6
+    break
+  fi
+
+    cat >maketest <<EOF
+.PATH: $srcdir/config $srcdir/src $srcdir/bin
+.c.o:
+	cp $< H5.o
+
+foo: H5.o
+	/bin/rm -f H5.o
+	@echo works
+EOF
+
+  if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+    SEARCH_RULE='.PATH: '
+    SEARCH_SEP=' '
+    echo "$as_me:$LINENO: result: .PATH: DIR1 DIR2 ..." >&5
+echo "${ECHO_T}.PATH: DIR1 DIR2 ..." >&6
+    break
+  fi
+
+    SEARCH_RULE='## SEARCH DISABLED: '
+  SEARCH_SEP=' '
+  echo "$as_me:$LINENO: result: it doesn't" >&5
+echo "${ECHO_T}it doesn't" >&6
+  if test ! -f configure; then
+    { { echo "$as_me:$LINENO: error: ${MAKE-make} requires the build and source directories to be the same" >&5
+echo "$as_me: error: ${MAKE-make} requires the build and source directories to be the same" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  break
+done
+rm maketest
+
+echo "$as_me:$LINENO: checking for production mode" >&5
+echo $ECHO_N "checking for production mode... $ECHO_C" >&6
+# Check whether --enable-production or --disable-production was given.
+if test "${enable_production+set}" = set; then
+  enableval="$enable_production"
+
+fi;
+
+case "X-$enable_production" in
+  X-|X-yes)
+    enable_production="yes"
+    echo "$as_me:$LINENO: result: production" >&5
+echo "${ECHO_T}production" >&6
+
+            CFLAGS_temp=""
+    if test -n "$CFLAGS"; then
+      for d in $CFLAGS ; do
+        if test "X$d" != "X-g"; then
+          CFLAGS_temp="$CFLAGS_temp $d"
+        fi
+      done
+      CFLAGS=$CFLAGS_temp
+    fi
+
+    CONFIG_MODE=production
+    CFLAGS="$CFLAGS $PROD_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $PROD_CPPFLAGS"
+    ;;
+  X-no)
+    enable_production="no"
+    echo "$as_me:$LINENO: result: development" >&5
+echo "${ECHO_T}development" >&6
+    CONFIG_MODE=development
+    CFLAGS="$CFLAGS $DEBUG_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $DEBUG_CPPFLAGS"
+    ;;
+  X-pg|X-profile)
+    enable_production="profile"
+    echo "$as_me:$LINENO: result: profile" >&5
+echo "${ECHO_T}profile" >&6
+    CONFIG_MODE=profile
+    CFLAGS="$CFLAGS $PROFILE_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $PROFILE_CPPFLAGS"
+    ;;
+  *)
+    enable_production="user-defined"
+    echo "$as_me:$LINENO: result: user-defined" >&5
+echo "${ECHO_T}user-defined" >&6
+    CONFIG_MODE="$X-enableval"
+    ;;
+esac
+
+
+echo "$as_me:$LINENO: checking for ceil in -lm" >&5
+echo $ECHO_N "checking for ceil in -lm... $ECHO_C" >&6
+if test "${ac_cv_lib_m_ceil+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char ceil ();
+int
+main ()
+{
+ceil ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_m_ceil=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_m_ceil=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_m_ceil" >&5
+echo "${ECHO_T}$ac_cv_lib_m_ceil" >&6
+if test $ac_cv_lib_m_ceil = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBM 1
+_ACEOF
+
+  LIBS="-lm $LIBS"
+
+fi
+
+
+if test "`uname`" = "SunOS" -o "`uname -sr`" = "HP-UX B.11.00"; then
+
+echo "$as_me:$LINENO: checking for xdr_int in -lnsl" >&5
+echo $ECHO_N "checking for xdr_int in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_xdr_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char xdr_int ();
+int
+main ()
+{
+xdr_int ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_nsl_xdr_int=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_nsl_xdr_int=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_xdr_int" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_xdr_int" >&6
+if test $ac_cv_lib_nsl_xdr_int = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBNSL 1
+_ACEOF
+
+  LIBS="-lnsl $LIBS"
+
+fi
+
+fi
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
+echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6
+if test "${ac_cv_header_time+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_time=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_time=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+echo "${ECHO_T}$ac_cv_header_time" >&6
+if test $ac_cv_header_time = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TIME_WITH_SYS_TIME 1
+_ACEOF
+
+fi
+
+
+
+for ac_func in difftime
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+for ac_func in gettimeofday
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+ have_gettime="yes"
+else
+  have_gettime="no"
+fi
+done
+
+
+
+
+
+
+
+for ac_header in sys/resource.h sys/time.h unistd.h sys/ioctl.h sys/stat.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_header in sys/socket.h sys/types.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+for ac_header in stddef.h setjmp.h features.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in stdint.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ C9x=yes
+fi
+
+done
+
+
+
+
+
+for ac_header in io.h winsock.h sys/timeb.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+case "$host" in
+  alpha*-dec*-osf*)
+
+
+for ac_header in sys/sysinfo.h sys/proc.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+    ;;
+  mips*-sgi*-irix*)
+
+for ac_header in sys/fpu.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_func in get_fpc_csr
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+    ;;
+esac
+
+case "$host_cpu-$host_vendor-$host_os" in
+  *linux*)
+                # Check whether --enable-linux-lfs or --disable-linux-lfs was given.
+if test "${enable_linux_lfs+set}" = set; then
+  enableval="$enable_linux_lfs"
+
+fi;
+
+    LINUX_LFS="no"
+    case "X-$enable_linux_lfs" in
+      X-yes)
+        LINUX_LFS=yes
+        ;;
+      X-no)
+        ;;
+      X-|*)
+        MAJOR_VER="`uname -r | cut -d '.' -f1`"
+        MINOR_VER="`uname -r | cut -d '.' -f2`"
+
+        if test ${MAJOR_VER} -gt 2 -o ${MAJOR_VER} -eq 2 -a ${MINOR_VER} -ge 4; then
+          LINUX_LFS="yes"
+        fi
+        ;;
+    esac
+
+    echo "$as_me:$LINENO: checking for large file support mode on Linux" >&5
+echo $ECHO_N "checking for large file support mode on Linux... $ECHO_C" >&6
+    if test "X$LINUX_LFS" = "Xyes"; then
+      echo "$as_me:$LINENO: result: enabled" >&5
+echo "${ECHO_T}enabled" >&6
+      CPPFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE $CPPFLAGS"
+    else
+      echo "$as_me:$LINENO: result: disabled" >&5
+echo "${ECHO_T}disabled" >&6
+    fi
+
+                CPPFLAGS="-D_POSIX_SOURCE $CPPFLAGS"
+
+                    CPPFLAGS="-D_BSD_SOURCE $CPPFLAGS"
+    ;;
+esac
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+int
+main ()
+{
+off64_t n = 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+
+for ac_func in lseek64 fseek64
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: skipping test for lseek64() and fseek64()" >&5
+echo "${ECHO_T}skipping test for lseek64() and fseek64()" >&6
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+echo "$as_me:$LINENO: checking for off_t" >&5
+echo $ECHO_N "checking for off_t... $ECHO_C" >&6
+if test "${ac_cv_type_off_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((off_t *) 0)
+  return 0;
+if (sizeof (off_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_off_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_off_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
+echo "${ECHO_T}$ac_cv_type_off_t" >&6
+if test $ac_cv_type_off_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define off_t long
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6
+if test "${ac_cv_type_size_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((size_t *) 0)
+  return 0;
+if (sizeof (size_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_size_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_size_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6
+if test $ac_cv_type_size_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned long
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for ssize_t" >&5
+echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6
+if test "${ac_cv_type_ssize_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((ssize_t *) 0)
+  return 0;
+if (sizeof (ssize_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_ssize_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_ssize_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_ssize_t" >&5
+echo "${ECHO_T}$ac_cv_type_ssize_t" >&6
+if test $ac_cv_type_ssize_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define ssize_t long
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking whether byte ordering is bigendian" >&5
+echo $ECHO_N "checking whether byte ordering is bigendian... $ECHO_C" >&6
+if test "${ac_cv_c_bigendian+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # See if sys/param.h defines the BYTE_ORDER macro.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/param.h>
+
+int
+main ()
+{
+#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN
+ bogus endian macros
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/param.h>
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+ not big endian
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_bigendian=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_bigendian=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+# It does not; compile a test program.
+if test "$cross_compiling" = yes; then
+  # try to guess the endianness by grepping values into an object file
+  ac_cv_c_bigendian=unknown
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+short ascii_mm[] = { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+short ascii_ii[] = { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+void _ascii () { char *s = (char *) ascii_mm; s = (char *) ascii_ii; }
+short ebcdic_ii[] = { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+short ebcdic_mm[] = { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+void _ebcdic () { char *s = (char *) ebcdic_mm; s = (char *) ebcdic_ii; }
+int
+main ()
+{
+ _ascii (); _ebcdic ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null ; then
+  ac_cv_c_bigendian=yes
+fi
+if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+  if test "$ac_cv_c_bigendian" = unknown; then
+    ac_cv_c_bigendian=no
+  else
+    # finding both strings is unlikely to happen, but who knows?
+    ac_cv_c_bigendian=unknown
+  fi
+fi
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+int
+main ()
+{
+  /* Are we little or big endian?  From Harbison&Steele.  */
+  union
+  {
+    long l;
+    char c[sizeof (long)];
+  } u;
+  u.l = 1;
+  exit (u.c[sizeof (long) - 1] == 1);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_bigendian=no
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_bigendian=yes
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_bigendian" >&5
+echo "${ECHO_T}$ac_cv_c_bigendian" >&6
+case $ac_cv_c_bigendian in
+  yes)
+
+cat >>confdefs.h <<\_ACEOF
+#define WORDS_BIGENDIAN 1
+_ACEOF
+ ;;
+  no)
+     ;;
+  *)
+    { { echo "$as_me:$LINENO: error: unknown endianness
+presetting ac_cv_c_bigendian=no (or yes) will help" >&5
+echo "$as_me: error: unknown endianness
+presetting ac_cv_c_bigendian=no (or yes) will help" >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+
+echo "$as_me:$LINENO: checking for char" >&5
+echo $ECHO_N "checking for char... $ECHO_C" >&6
+if test "${ac_cv_type_char+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((char *) 0)
+  return 0;
+if (sizeof (char))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_char=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_char=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_char" >&5
+echo "${ECHO_T}$ac_cv_type_char" >&6
+
+echo "$as_me:$LINENO: checking size of char" >&5
+echo $ECHO_N "checking size of char... $ECHO_C" >&6
+if test "${ac_cv_sizeof_char+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_char" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (char))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_char=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (char)); }
+unsigned long ulongval () { return (long) (sizeof (char)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (char))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (char))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (char))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_char=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (char), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_char=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_char" >&5
+echo "${ECHO_T}$ac_cv_sizeof_char" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_CHAR $ac_cv_sizeof_char
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for short" >&5
+echo $ECHO_N "checking for short... $ECHO_C" >&6
+if test "${ac_cv_type_short+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((short *) 0)
+  return 0;
+if (sizeof (short))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_short=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_short=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_short" >&5
+echo "${ECHO_T}$ac_cv_type_short" >&6
+
+echo "$as_me:$LINENO: checking size of short" >&5
+echo $ECHO_N "checking size of short... $ECHO_C" >&6
+if test "${ac_cv_sizeof_short+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_short" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (short))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_short=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (short)); }
+unsigned long ulongval () { return (long) (sizeof (short)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (short))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (short))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (short))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_short=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (short), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_short=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_short" >&5
+echo "${ECHO_T}$ac_cv_sizeof_short" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SHORT $ac_cv_sizeof_short
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for int" >&5
+echo $ECHO_N "checking for int... $ECHO_C" >&6
+if test "${ac_cv_type_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int *) 0)
+  return 0;
+if (sizeof (int))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int" >&5
+echo "${ECHO_T}$ac_cv_type_int" >&6
+
+echo "$as_me:$LINENO: checking size of int" >&5
+echo $ECHO_N "checking size of int... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int)); }
+unsigned long ulongval () { return (long) (sizeof (int)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT $ac_cv_sizeof_int
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for long" >&5
+echo $ECHO_N "checking for long... $ECHO_C" >&6
+if test "${ac_cv_type_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((long *) 0)
+  return 0;
+if (sizeof (long))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_long=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_long=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_long" >&5
+echo "${ECHO_T}$ac_cv_type_long" >&6
+
+echo "$as_me:$LINENO: checking size of long" >&5
+echo $ECHO_N "checking size of long... $ECHO_C" >&6
+if test "${ac_cv_sizeof_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_long" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (long)); }
+unsigned long ulongval () { return (long) (sizeof (long)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (long))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (long))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (long))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_long=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_long=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG $ac_cv_sizeof_long
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for long long" >&5
+echo $ECHO_N "checking for long long... $ECHO_C" >&6
+if test "${ac_cv_type_long_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((long long *) 0)
+  return 0;
+if (sizeof (long long))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_long_long=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_long_long=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
+echo "${ECHO_T}$ac_cv_type_long_long" >&6
+
+echo "$as_me:$LINENO: checking size of long long" >&5
+echo $ECHO_N "checking size of long long... $ECHO_C" >&6
+if test "${ac_cv_sizeof_long_long+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_long_long" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long long))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long long))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long long))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long_long=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long long), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (long long)); }
+unsigned long ulongval () { return (long) (sizeof (long long)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (long long))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (long long))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (long long))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_long_long=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long long), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long long), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_long_long=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_long" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long_long" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for __int64" >&5
+echo $ECHO_N "checking for __int64... $ECHO_C" >&6
+if test "${ac_cv_type___int64+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((__int64 *) 0)
+  return 0;
+if (sizeof (__int64))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type___int64=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type___int64=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type___int64" >&5
+echo "${ECHO_T}$ac_cv_type___int64" >&6
+
+echo "$as_me:$LINENO: checking size of __int64" >&5
+echo $ECHO_N "checking size of __int64... $ECHO_C" >&6
+if test "${ac_cv_sizeof___int64+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type___int64" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (__int64))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (__int64))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (__int64))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (__int64))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (__int64))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof___int64=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (__int64), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (__int64), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (__int64)); }
+unsigned long ulongval () { return (long) (sizeof (__int64)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (__int64))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (__int64))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (__int64))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof___int64=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (__int64), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (__int64), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof___int64=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof___int64" >&5
+echo "${ECHO_T}$ac_cv_sizeof___int64" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF___INT64 $ac_cv_sizeof___int64
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for float" >&5
+echo $ECHO_N "checking for float... $ECHO_C" >&6
+if test "${ac_cv_type_float+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((float *) 0)
+  return 0;
+if (sizeof (float))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_float=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_float=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_float" >&5
+echo "${ECHO_T}$ac_cv_type_float" >&6
+
+echo "$as_me:$LINENO: checking size of float" >&5
+echo $ECHO_N "checking size of float... $ECHO_C" >&6
+if test "${ac_cv_sizeof_float+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_float" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (float))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (float))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (float))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (float))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (float))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_float=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (float), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (float), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (float)); }
+unsigned long ulongval () { return (long) (sizeof (float)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (float))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (float))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (float))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_float=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (float), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (float), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_float=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_float" >&5
+echo "${ECHO_T}$ac_cv_sizeof_float" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_FLOAT $ac_cv_sizeof_float
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for double" >&5
+echo $ECHO_N "checking for double... $ECHO_C" >&6
+if test "${ac_cv_type_double+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((double *) 0)
+  return 0;
+if (sizeof (double))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_double=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_double=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_double" >&5
+echo "${ECHO_T}$ac_cv_type_double" >&6
+
+echo "$as_me:$LINENO: checking size of double" >&5
+echo $ECHO_N "checking size of double... $ECHO_C" >&6
+if test "${ac_cv_sizeof_double+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_double" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (double))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (double))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (double))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (double))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (double))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_double=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (double), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (double), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (double)); }
+unsigned long ulongval () { return (long) (sizeof (double)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (double))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (double))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (double))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_double=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (double), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (double), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_double=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_double" >&5
+echo "${ECHO_T}$ac_cv_sizeof_double" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_DOUBLE $ac_cv_sizeof_double
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for long double" >&5
+echo $ECHO_N "checking for long double... $ECHO_C" >&6
+if test "${ac_cv_type_long_double+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((long double *) 0)
+  return 0;
+if (sizeof (long double))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_long_double=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_long_double=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_long_double" >&5
+echo "${ECHO_T}$ac_cv_type_long_double" >&6
+
+echo "$as_me:$LINENO: checking size of long double" >&5
+echo $ECHO_N "checking size of long double... $ECHO_C" >&6
+if test "${ac_cv_sizeof_long_double+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_long_double" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long double))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long double))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long double))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long double))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (long double))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_long_double=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (long double), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long double), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (long double)); }
+unsigned long ulongval () { return (long) (sizeof (long double)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (long double))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (long double))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (long double))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_long_double=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (long double), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (long double), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_long_double=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_long_double" >&5
+echo "${ECHO_T}$ac_cv_sizeof_long_double" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_LONG_DOUBLE $ac_cv_sizeof_long_double
+_ACEOF
+
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+cat >>confdefs.h <<\EOF
+#include <sys/types.h>
+EOF
+
+if test "X$C9x" = "Xyes"; then
+  cat >>confdefs.h <<\EOF
+#include <stdint.h>
+EOF
+fi
+
+echo "$as_me:$LINENO: checking for int8_t" >&5
+echo $ECHO_N "checking for int8_t... $ECHO_C" >&6
+if test "${ac_cv_type_int8_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int8_t *) 0)
+  return 0;
+if (sizeof (int8_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int8_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int8_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int8_t" >&5
+echo "${ECHO_T}$ac_cv_type_int8_t" >&6
+
+echo "$as_me:$LINENO: checking size of int8_t" >&5
+echo $ECHO_N "checking size of int8_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int8_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int8_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int8_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int8_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int8_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int8_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int8_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int8_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int8_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int8_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int8_t)); }
+unsigned long ulongval () { return (long) (sizeof (int8_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int8_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int8_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int8_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int8_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int8_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int8_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int8_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int8_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int8_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT8_T $ac_cv_sizeof_int8_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for uint8_t" >&5
+echo $ECHO_N "checking for uint8_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint8_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((uint8_t *) 0)
+  return 0;
+if (sizeof (uint8_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_uint8_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint8_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint8_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint8_t" >&6
+
+echo "$as_me:$LINENO: checking size of uint8_t" >&5
+echo $ECHO_N "checking size of uint8_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_uint8_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_uint8_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint8_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint8_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint8_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint8_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint8_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_uint8_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint8_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint8_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (uint8_t)); }
+unsigned long ulongval () { return (long) (sizeof (uint8_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (uint8_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (uint8_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (uint8_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_uint8_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (uint8_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint8_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_uint8_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint8_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_uint8_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UINT8_T $ac_cv_sizeof_uint8_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for int_least8_t" >&5
+echo $ECHO_N "checking for int_least8_t... $ECHO_C" >&6
+if test "${ac_cv_type_int_least8_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int_least8_t *) 0)
+  return 0;
+if (sizeof (int_least8_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int_least8_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int_least8_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int_least8_t" >&5
+echo "${ECHO_T}$ac_cv_type_int_least8_t" >&6
+
+echo "$as_me:$LINENO: checking size of int_least8_t" >&5
+echo $ECHO_N "checking size of int_least8_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int_least8_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int_least8_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least8_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least8_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least8_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least8_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least8_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int_least8_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int_least8_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_least8_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int_least8_t)); }
+unsigned long ulongval () { return (long) (sizeof (int_least8_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int_least8_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int_least8_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int_least8_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int_least8_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int_least8_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_least8_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int_least8_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int_least8_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int_least8_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT_LEAST8_T $ac_cv_sizeof_int_least8_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for uint_least8_t" >&5
+echo $ECHO_N "checking for uint_least8_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint_least8_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((uint_least8_t *) 0)
+  return 0;
+if (sizeof (uint_least8_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_uint_least8_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint_least8_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint_least8_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint_least8_t" >&6
+
+echo "$as_me:$LINENO: checking size of uint_least8_t" >&5
+echo $ECHO_N "checking size of uint_least8_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_uint_least8_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_uint_least8_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least8_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least8_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least8_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least8_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least8_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_uint_least8_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_least8_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_least8_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (uint_least8_t)); }
+unsigned long ulongval () { return (long) (sizeof (uint_least8_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (uint_least8_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (uint_least8_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (uint_least8_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_uint_least8_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_least8_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_least8_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_uint_least8_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint_least8_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_uint_least8_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UINT_LEAST8_T $ac_cv_sizeof_uint_least8_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for int_fast8_t" >&5
+echo $ECHO_N "checking for int_fast8_t... $ECHO_C" >&6
+if test "${ac_cv_type_int_fast8_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int_fast8_t *) 0)
+  return 0;
+if (sizeof (int_fast8_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int_fast8_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int_fast8_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int_fast8_t" >&5
+echo "${ECHO_T}$ac_cv_type_int_fast8_t" >&6
+
+echo "$as_me:$LINENO: checking size of int_fast8_t" >&5
+echo $ECHO_N "checking size of int_fast8_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int_fast8_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int_fast8_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast8_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast8_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast8_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast8_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast8_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int_fast8_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int_fast8_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_fast8_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int_fast8_t)); }
+unsigned long ulongval () { return (long) (sizeof (int_fast8_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int_fast8_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int_fast8_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int_fast8_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int_fast8_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int_fast8_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_fast8_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int_fast8_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int_fast8_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int_fast8_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT_FAST8_T $ac_cv_sizeof_int_fast8_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for uint_fast8_t" >&5
+echo $ECHO_N "checking for uint_fast8_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint_fast8_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((uint_fast8_t *) 0)
+  return 0;
+if (sizeof (uint_fast8_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_uint_fast8_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint_fast8_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint_fast8_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint_fast8_t" >&6
+
+echo "$as_me:$LINENO: checking size of uint_fast8_t" >&5
+echo $ECHO_N "checking size of uint_fast8_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_uint_fast8_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_uint_fast8_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast8_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast8_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast8_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast8_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast8_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_uint_fast8_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_fast8_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_fast8_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (uint_fast8_t)); }
+unsigned long ulongval () { return (long) (sizeof (uint_fast8_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (uint_fast8_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (uint_fast8_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (uint_fast8_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_uint_fast8_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_fast8_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_fast8_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_uint_fast8_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint_fast8_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_uint_fast8_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UINT_FAST8_T $ac_cv_sizeof_uint_fast8_t
+_ACEOF
+
+
+
+echo "$as_me:$LINENO: checking for int16_t" >&5
+echo $ECHO_N "checking for int16_t... $ECHO_C" >&6
+if test "${ac_cv_type_int16_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int16_t *) 0)
+  return 0;
+if (sizeof (int16_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int16_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int16_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int16_t" >&5
+echo "${ECHO_T}$ac_cv_type_int16_t" >&6
+
+echo "$as_me:$LINENO: checking size of int16_t" >&5
+echo $ECHO_N "checking size of int16_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int16_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int16_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int16_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int16_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int16_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int16_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int16_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int16_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int16_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int16_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int16_t)); }
+unsigned long ulongval () { return (long) (sizeof (int16_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int16_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int16_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int16_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int16_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int16_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int16_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int16_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int16_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int16_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT16_T $ac_cv_sizeof_int16_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for uint16_t" >&5
+echo $ECHO_N "checking for uint16_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint16_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((uint16_t *) 0)
+  return 0;
+if (sizeof (uint16_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_uint16_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint16_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint16_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint16_t" >&6
+
+echo "$as_me:$LINENO: checking size of uint16_t" >&5
+echo $ECHO_N "checking size of uint16_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_uint16_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_uint16_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint16_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint16_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint16_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint16_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint16_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_uint16_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint16_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint16_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (uint16_t)); }
+unsigned long ulongval () { return (long) (sizeof (uint16_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (uint16_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (uint16_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (uint16_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_uint16_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (uint16_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint16_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_uint16_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint16_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_uint16_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UINT16_T $ac_cv_sizeof_uint16_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for int_least16_t" >&5
+echo $ECHO_N "checking for int_least16_t... $ECHO_C" >&6
+if test "${ac_cv_type_int_least16_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int_least16_t *) 0)
+  return 0;
+if (sizeof (int_least16_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int_least16_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int_least16_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int_least16_t" >&5
+echo "${ECHO_T}$ac_cv_type_int_least16_t" >&6
+
+echo "$as_me:$LINENO: checking size of int_least16_t" >&5
+echo $ECHO_N "checking size of int_least16_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int_least16_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int_least16_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least16_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least16_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least16_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least16_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least16_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int_least16_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int_least16_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_least16_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int_least16_t)); }
+unsigned long ulongval () { return (long) (sizeof (int_least16_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int_least16_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int_least16_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int_least16_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int_least16_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int_least16_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_least16_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int_least16_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int_least16_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int_least16_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT_LEAST16_T $ac_cv_sizeof_int_least16_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for uint_least16_t" >&5
+echo $ECHO_N "checking for uint_least16_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint_least16_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((uint_least16_t *) 0)
+  return 0;
+if (sizeof (uint_least16_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_uint_least16_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint_least16_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint_least16_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint_least16_t" >&6
+
+echo "$as_me:$LINENO: checking size of uint_least16_t" >&5
+echo $ECHO_N "checking size of uint_least16_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_uint_least16_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_uint_least16_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least16_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least16_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least16_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least16_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least16_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_uint_least16_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_least16_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_least16_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (uint_least16_t)); }
+unsigned long ulongval () { return (long) (sizeof (uint_least16_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (uint_least16_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (uint_least16_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (uint_least16_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_uint_least16_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_least16_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_least16_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_uint_least16_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint_least16_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_uint_least16_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UINT_LEAST16_T $ac_cv_sizeof_uint_least16_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for int_fast16_t" >&5
+echo $ECHO_N "checking for int_fast16_t... $ECHO_C" >&6
+if test "${ac_cv_type_int_fast16_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int_fast16_t *) 0)
+  return 0;
+if (sizeof (int_fast16_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int_fast16_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int_fast16_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int_fast16_t" >&5
+echo "${ECHO_T}$ac_cv_type_int_fast16_t" >&6
+
+echo "$as_me:$LINENO: checking size of int_fast16_t" >&5
+echo $ECHO_N "checking size of int_fast16_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int_fast16_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int_fast16_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast16_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast16_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast16_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast16_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast16_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int_fast16_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int_fast16_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_fast16_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int_fast16_t)); }
+unsigned long ulongval () { return (long) (sizeof (int_fast16_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int_fast16_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int_fast16_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int_fast16_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int_fast16_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int_fast16_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_fast16_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int_fast16_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int_fast16_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int_fast16_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT_FAST16_T $ac_cv_sizeof_int_fast16_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for uint_fast16_t" >&5
+echo $ECHO_N "checking for uint_fast16_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint_fast16_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((uint_fast16_t *) 0)
+  return 0;
+if (sizeof (uint_fast16_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_uint_fast16_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint_fast16_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint_fast16_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint_fast16_t" >&6
+
+echo "$as_me:$LINENO: checking size of uint_fast16_t" >&5
+echo $ECHO_N "checking size of uint_fast16_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_uint_fast16_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_uint_fast16_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast16_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast16_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast16_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast16_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast16_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_uint_fast16_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_fast16_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_fast16_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (uint_fast16_t)); }
+unsigned long ulongval () { return (long) (sizeof (uint_fast16_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (uint_fast16_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (uint_fast16_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (uint_fast16_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_uint_fast16_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_fast16_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_fast16_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_uint_fast16_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint_fast16_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_uint_fast16_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UINT_FAST16_T $ac_cv_sizeof_uint_fast16_t
+_ACEOF
+
+
+
+echo "$as_me:$LINENO: checking for int32_t" >&5
+echo $ECHO_N "checking for int32_t... $ECHO_C" >&6
+if test "${ac_cv_type_int32_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int32_t *) 0)
+  return 0;
+if (sizeof (int32_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int32_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int32_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int32_t" >&5
+echo "${ECHO_T}$ac_cv_type_int32_t" >&6
+
+echo "$as_me:$LINENO: checking size of int32_t" >&5
+echo $ECHO_N "checking size of int32_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int32_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int32_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int32_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int32_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int32_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int32_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int32_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int32_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int32_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int32_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int32_t)); }
+unsigned long ulongval () { return (long) (sizeof (int32_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int32_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int32_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int32_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int32_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int32_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int32_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int32_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int32_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int32_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT32_T $ac_cv_sizeof_int32_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for uint32_t" >&5
+echo $ECHO_N "checking for uint32_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint32_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((uint32_t *) 0)
+  return 0;
+if (sizeof (uint32_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_uint32_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint32_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint32_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint32_t" >&6
+
+echo "$as_me:$LINENO: checking size of uint32_t" >&5
+echo $ECHO_N "checking size of uint32_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_uint32_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_uint32_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint32_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint32_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint32_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint32_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint32_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_uint32_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint32_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint32_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (uint32_t)); }
+unsigned long ulongval () { return (long) (sizeof (uint32_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (uint32_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (uint32_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (uint32_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_uint32_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (uint32_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint32_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_uint32_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint32_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_uint32_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UINT32_T $ac_cv_sizeof_uint32_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for int_least32_t" >&5
+echo $ECHO_N "checking for int_least32_t... $ECHO_C" >&6
+if test "${ac_cv_type_int_least32_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int_least32_t *) 0)
+  return 0;
+if (sizeof (int_least32_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int_least32_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int_least32_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int_least32_t" >&5
+echo "${ECHO_T}$ac_cv_type_int_least32_t" >&6
+
+echo "$as_me:$LINENO: checking size of int_least32_t" >&5
+echo $ECHO_N "checking size of int_least32_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int_least32_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int_least32_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least32_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least32_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least32_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least32_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least32_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int_least32_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int_least32_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_least32_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int_least32_t)); }
+unsigned long ulongval () { return (long) (sizeof (int_least32_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int_least32_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int_least32_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int_least32_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int_least32_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int_least32_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_least32_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int_least32_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int_least32_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int_least32_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT_LEAST32_T $ac_cv_sizeof_int_least32_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for uint_least32_t" >&5
+echo $ECHO_N "checking for uint_least32_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint_least32_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((uint_least32_t *) 0)
+  return 0;
+if (sizeof (uint_least32_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_uint_least32_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint_least32_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint_least32_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint_least32_t" >&6
+
+echo "$as_me:$LINENO: checking size of uint_least32_t" >&5
+echo $ECHO_N "checking size of uint_least32_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_uint_least32_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_uint_least32_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least32_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least32_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least32_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least32_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least32_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_uint_least32_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_least32_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_least32_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (uint_least32_t)); }
+unsigned long ulongval () { return (long) (sizeof (uint_least32_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (uint_least32_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (uint_least32_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (uint_least32_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_uint_least32_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_least32_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_least32_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_uint_least32_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint_least32_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_uint_least32_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UINT_LEAST32_T $ac_cv_sizeof_uint_least32_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for int_fast32_t" >&5
+echo $ECHO_N "checking for int_fast32_t... $ECHO_C" >&6
+if test "${ac_cv_type_int_fast32_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int_fast32_t *) 0)
+  return 0;
+if (sizeof (int_fast32_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int_fast32_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int_fast32_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int_fast32_t" >&5
+echo "${ECHO_T}$ac_cv_type_int_fast32_t" >&6
+
+echo "$as_me:$LINENO: checking size of int_fast32_t" >&5
+echo $ECHO_N "checking size of int_fast32_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int_fast32_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int_fast32_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast32_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast32_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast32_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast32_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast32_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int_fast32_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int_fast32_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_fast32_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int_fast32_t)); }
+unsigned long ulongval () { return (long) (sizeof (int_fast32_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int_fast32_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int_fast32_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int_fast32_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int_fast32_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int_fast32_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_fast32_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int_fast32_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int_fast32_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int_fast32_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT_FAST32_T $ac_cv_sizeof_int_fast32_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for uint_fast32_t" >&5
+echo $ECHO_N "checking for uint_fast32_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint_fast32_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((uint_fast32_t *) 0)
+  return 0;
+if (sizeof (uint_fast32_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_uint_fast32_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint_fast32_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint_fast32_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint_fast32_t" >&6
+
+echo "$as_me:$LINENO: checking size of uint_fast32_t" >&5
+echo $ECHO_N "checking size of uint_fast32_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_uint_fast32_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_uint_fast32_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast32_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast32_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast32_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast32_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast32_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_uint_fast32_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_fast32_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_fast32_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (uint_fast32_t)); }
+unsigned long ulongval () { return (long) (sizeof (uint_fast32_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (uint_fast32_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (uint_fast32_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (uint_fast32_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_uint_fast32_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_fast32_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_fast32_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_uint_fast32_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint_fast32_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_uint_fast32_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UINT_FAST32_T $ac_cv_sizeof_uint_fast32_t
+_ACEOF
+
+
+
+echo "$as_me:$LINENO: checking for int64_t" >&5
+echo $ECHO_N "checking for int64_t... $ECHO_C" >&6
+if test "${ac_cv_type_int64_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int64_t *) 0)
+  return 0;
+if (sizeof (int64_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int64_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int64_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int64_t" >&5
+echo "${ECHO_T}$ac_cv_type_int64_t" >&6
+
+echo "$as_me:$LINENO: checking size of int64_t" >&5
+echo $ECHO_N "checking size of int64_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int64_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int64_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int64_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int64_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int64_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int64_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int64_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int64_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int64_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int64_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int64_t)); }
+unsigned long ulongval () { return (long) (sizeof (int64_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int64_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int64_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int64_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int64_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int64_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int64_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int64_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int64_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int64_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT64_T $ac_cv_sizeof_int64_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for uint64_t" >&5
+echo $ECHO_N "checking for uint64_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint64_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((uint64_t *) 0)
+  return 0;
+if (sizeof (uint64_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_uint64_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint64_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint64_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint64_t" >&6
+
+echo "$as_me:$LINENO: checking size of uint64_t" >&5
+echo $ECHO_N "checking size of uint64_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_uint64_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_uint64_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint64_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint64_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint64_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint64_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint64_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_uint64_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint64_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint64_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (uint64_t)); }
+unsigned long ulongval () { return (long) (sizeof (uint64_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (uint64_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (uint64_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (uint64_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_uint64_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (uint64_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint64_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_uint64_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint64_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_uint64_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UINT64_T $ac_cv_sizeof_uint64_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for int_least64_t" >&5
+echo $ECHO_N "checking for int_least64_t... $ECHO_C" >&6
+if test "${ac_cv_type_int_least64_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int_least64_t *) 0)
+  return 0;
+if (sizeof (int_least64_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int_least64_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int_least64_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int_least64_t" >&5
+echo "${ECHO_T}$ac_cv_type_int_least64_t" >&6
+
+echo "$as_me:$LINENO: checking size of int_least64_t" >&5
+echo $ECHO_N "checking size of int_least64_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int_least64_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int_least64_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least64_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least64_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least64_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least64_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_least64_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int_least64_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int_least64_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_least64_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int_least64_t)); }
+unsigned long ulongval () { return (long) (sizeof (int_least64_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int_least64_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int_least64_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int_least64_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int_least64_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int_least64_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_least64_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int_least64_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int_least64_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int_least64_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT_LEAST64_T $ac_cv_sizeof_int_least64_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for uint_least64_t" >&5
+echo $ECHO_N "checking for uint_least64_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint_least64_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((uint_least64_t *) 0)
+  return 0;
+if (sizeof (uint_least64_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_uint_least64_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint_least64_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint_least64_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint_least64_t" >&6
+
+echo "$as_me:$LINENO: checking size of uint_least64_t" >&5
+echo $ECHO_N "checking size of uint_least64_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_uint_least64_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_uint_least64_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least64_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least64_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least64_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least64_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_least64_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_uint_least64_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_least64_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_least64_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (uint_least64_t)); }
+unsigned long ulongval () { return (long) (sizeof (uint_least64_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (uint_least64_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (uint_least64_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (uint_least64_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_uint_least64_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_least64_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_least64_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_uint_least64_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint_least64_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_uint_least64_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UINT_LEAST64_T $ac_cv_sizeof_uint_least64_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for int_fast64_t" >&5
+echo $ECHO_N "checking for int_fast64_t... $ECHO_C" >&6
+if test "${ac_cv_type_int_fast64_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((int_fast64_t *) 0)
+  return 0;
+if (sizeof (int_fast64_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_int_fast64_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_int_fast64_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_int_fast64_t" >&5
+echo "${ECHO_T}$ac_cv_type_int_fast64_t" >&6
+
+echo "$as_me:$LINENO: checking size of int_fast64_t" >&5
+echo $ECHO_N "checking size of int_fast64_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_int_fast64_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_int_fast64_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast64_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast64_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast64_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast64_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (int_fast64_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_int_fast64_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (int_fast64_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_fast64_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (int_fast64_t)); }
+unsigned long ulongval () { return (long) (sizeof (int_fast64_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (int_fast64_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (int_fast64_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (int_fast64_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_int_fast64_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (int_fast64_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (int_fast64_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_int_fast64_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_int_fast64_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_int_fast64_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_INT_FAST64_T $ac_cv_sizeof_int_fast64_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for uint_fast64_t" >&5
+echo $ECHO_N "checking for uint_fast64_t... $ECHO_C" >&6
+if test "${ac_cv_type_uint_fast64_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((uint_fast64_t *) 0)
+  return 0;
+if (sizeof (uint_fast64_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_uint_fast64_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_uint_fast64_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_uint_fast64_t" >&5
+echo "${ECHO_T}$ac_cv_type_uint_fast64_t" >&6
+
+echo "$as_me:$LINENO: checking size of uint_fast64_t" >&5
+echo $ECHO_N "checking size of uint_fast64_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_uint_fast64_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_uint_fast64_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast64_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast64_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast64_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast64_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (uint_fast64_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_uint_fast64_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_fast64_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_fast64_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (uint_fast64_t)); }
+unsigned long ulongval () { return (long) (sizeof (uint_fast64_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (uint_fast64_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (uint_fast64_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (uint_fast64_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_uint_fast64_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (uint_fast64_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (uint_fast64_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_uint_fast64_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_uint_fast64_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_uint_fast64_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_UINT_FAST64_T $ac_cv_sizeof_uint_fast64_t
+_ACEOF
+
+
+
+echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6
+if test "${ac_cv_type_size_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((size_t *) 0)
+  return 0;
+if (sizeof (size_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_size_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_size_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6
+
+echo "$as_me:$LINENO: checking size of size_t" >&5
+echo $ECHO_N "checking size of size_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_size_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_size_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (size_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (size_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (size_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (size_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (size_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_size_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (size_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (size_t)); }
+unsigned long ulongval () { return (long) (sizeof (size_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (size_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (size_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (size_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_size_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (size_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (size_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_size_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_size_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_size_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SIZE_T $ac_cv_sizeof_size_t
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking for ssize_t" >&5
+echo $ECHO_N "checking for ssize_t... $ECHO_C" >&6
+if test "${ac_cv_type_ssize_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((ssize_t *) 0)
+  return 0;
+if (sizeof (ssize_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_ssize_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_ssize_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_ssize_t" >&5
+echo "${ECHO_T}$ac_cv_type_ssize_t" >&6
+
+echo "$as_me:$LINENO: checking size of ssize_t" >&5
+echo $ECHO_N "checking size of ssize_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_ssize_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_ssize_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (ssize_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (ssize_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (ssize_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (ssize_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (ssize_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_ssize_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (ssize_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (ssize_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (ssize_t)); }
+unsigned long ulongval () { return (long) (sizeof (ssize_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (ssize_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (ssize_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (ssize_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_ssize_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (ssize_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (ssize_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_ssize_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_ssize_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_ssize_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_SSIZE_T $ac_cv_sizeof_ssize_t
+_ACEOF
+
+
+
+cat >>confdefs.h <<\EOF
+#include <sys/types.h> /*for off_t definition*/
+EOF
+echo "$as_me:$LINENO: checking for off_t" >&5
+echo $ECHO_N "checking for off_t... $ECHO_C" >&6
+if test "${ac_cv_type_off_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+if ((off_t *) 0)
+  return 0;
+if (sizeof (off_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_off_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_off_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
+echo "${ECHO_T}$ac_cv_type_off_t" >&6
+
+echo "$as_me:$LINENO: checking size of off_t" >&5
+echo $ECHO_N "checking size of off_t... $ECHO_C" >&6
+if test "${ac_cv_sizeof_off_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$ac_cv_type_off_t" = yes; then
+  # The cast to unsigned long works around a bug in the HP C Compiler
+  # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
+  # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
+  # This bug is HP SR number 8606223364.
+  if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (off_t))) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (off_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr $ac_mid + 1`
+		    if test $ac_lo -le $ac_mid; then
+		      ac_lo= ac_hi=
+		      break
+		    fi
+		    ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (off_t))) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (off_t))) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_hi=`expr '(' $ac_mid ')' - 1`
+		       if test $ac_mid -le $ac_hi; then
+			 ac_lo= ac_hi=
+			 break
+		       fi
+		       ac_mid=`expr 2 '*' $ac_mid`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo= ac_hi=
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+static int test_array [1 - 2 * !(((long) (sizeof (off_t))) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) ac_cv_sizeof_off_t=$ac_lo;;
+'') { { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (off_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+long longval () { return (long) (sizeof (off_t)); }
+unsigned long ulongval () { return (long) (sizeof (off_t)); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if (((long) (sizeof (off_t))) < 0)
+    {
+      long i = longval ();
+      if (i != ((long) (sizeof (off_t))))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != ((long) (sizeof (off_t))))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_sizeof_off_t=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+{ { echo "$as_me:$LINENO: error: cannot compute sizeof (off_t), 77
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute sizeof (off_t), 77
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+else
+  ac_cv_sizeof_off_t=0
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_sizeof_off_t" >&5
+echo "${ECHO_T}$ac_cv_sizeof_off_t" >&6
+cat >>confdefs.h <<_ACEOF
+#define SIZEOF_OFF_T $ac_cv_sizeof_off_t
+_ACEOF
+
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+echo "$as_me:$LINENO: checking if dev_t is scalar" >&5
+echo $ECHO_N "checking if dev_t is scalar... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+
+int
+main ()
+{
+dev_t d1, d2; if(d1==d2) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define DEV_T_IS_SCALAR 1
+_ACEOF
+
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+# Check whether --with-fnord or --without-fnord was given.
+if test "${with_fnord+set}" = set; then
+  withval="$with_fnord"
+
+fi;
+
+
+# Check whether --with-dmalloc or --without-dmalloc was given.
+if test "${with_dmalloc+set}" = set; then
+  withval="$with_dmalloc"
+
+else
+  withval=no
+fi;
+
+case $withval in
+  yes)
+    HAVE_DMALLOC="yes"
+
+for ac_header in dmalloc.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for dmalloc_shutdown in -ldmalloc" >&5
+echo $ECHO_N "checking for dmalloc_shutdown in -ldmalloc... $ECHO_C" >&6
+if test "${ac_cv_lib_dmalloc_dmalloc_shutdown+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldmalloc  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dmalloc_shutdown ();
+int
+main ()
+{
+dmalloc_shutdown ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dmalloc_dmalloc_shutdown=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dmalloc_dmalloc_shutdown=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dmalloc_dmalloc_shutdown" >&5
+echo "${ECHO_T}$ac_cv_lib_dmalloc_dmalloc_shutdown" >&6
+if test $ac_cv_lib_dmalloc_dmalloc_shutdown = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBDMALLOC 1
+_ACEOF
+
+  LIBS="-ldmalloc $LIBS"
+
+else
+  unset HAVE_DMALLOC
+fi
+
+
+    if test -z "$HAVE_DMALLOC" -a -n "$HDF5_CONFIG_ABORT"; then
+      { { echo "$as_me:$LINENO: error: couldn't find dmalloc library" >&5
+echo "$as_me: error: couldn't find dmalloc library" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    ;;
+  no)
+    HAVE_DMALLOC="no"
+    echo "$as_me:$LINENO: checking for dmalloc library" >&5
+echo $ECHO_N "checking for dmalloc library... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+    ;;
+  *)
+    HAVE_DMALLOC="yes"
+    case "$withval" in
+      *,*)
+        dmalloc_inc="`echo $withval |cut -f1 -d,`"
+        dmalloc_lib="`echo $withval |cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          dmalloc_inc="$withval/include"
+          dmalloc_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+            if test "X$dmalloc_inc" = "X/usr/include"; then
+      dmalloc_inc=""
+    fi
+    if test "X$dmalloc_lib" = "X/usr/lib"; then
+      dmalloc_lib=""
+    fi
+
+    saved_CPPFLAGS="$CPPFLAGS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    if test -n "$dmalloc_inc"; then
+      CPPFLAGS="$CPPFLAGS -I$dmalloc_inc"
+    fi
+
+
+for ac_header in dmalloc.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  CPPFLAGS="$saved_CPPFLAGS"
+fi
+
+done
+
+
+    if test -n "$dmalloc_lib"; then
+      LDFLAGS="$LDFLAGS -L$dmalloc_lib"
+    fi
+
+
+echo "$as_me:$LINENO: checking for dmalloc_shutdown in -ldmalloc" >&5
+echo $ECHO_N "checking for dmalloc_shutdown in -ldmalloc... $ECHO_C" >&6
+if test "${ac_cv_lib_dmalloc_dmalloc_shutdown+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldmalloc  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dmalloc_shutdown ();
+int
+main ()
+{
+dmalloc_shutdown ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dmalloc_dmalloc_shutdown=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dmalloc_dmalloc_shutdown=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dmalloc_dmalloc_shutdown" >&5
+echo "${ECHO_T}$ac_cv_lib_dmalloc_dmalloc_shutdown" >&6
+if test $ac_cv_lib_dmalloc_dmalloc_shutdown = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBDMALLOC 1
+_ACEOF
+
+  LIBS="-ldmalloc $LIBS"
+
+else
+  LDFLAGS="$saved_LDFLAGS"; unset HAVE_DMALLOC
+fi
+
+
+    if test -z "$HAVE_DMALLOC" -a -n "$HDF5_CONFIG_ABORT"; then
+      { { echo "$as_me:$LINENO: error: couldn't find dmalloc library" >&5
+echo "$as_me: error: couldn't find dmalloc library" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    ;;
+esac
+
+ USE_FILTER_DEFLATE="no"
+
+# Check whether --with-zlib or --without-zlib was given.
+if test "${with_zlib+set}" = set; then
+  withval="$with_zlib"
+
+else
+  withval=yes
+fi;
+
+case $withval in
+  yes)
+    HAVE_ZLIB="yes"
+
+for ac_header in zlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ HAVE_ZLIB_H="yes"
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for compress2 in -lz" >&5
+echo $ECHO_N "checking for compress2 in -lz... $ECHO_C" >&6
+if test "${ac_cv_lib_z_compress2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char compress2 ();
+int
+main ()
+{
+compress2 ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_z_compress2=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_z_compress2=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_z_compress2" >&5
+echo "${ECHO_T}$ac_cv_lib_z_compress2" >&6
+if test $ac_cv_lib_z_compress2 = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBZ 1
+_ACEOF
+
+  LIBS="-lz $LIBS"
+
+else
+  unset HAVE_ZLIB
+fi
+
+    echo "$as_me:$LINENO: checking for compress2" >&5
+echo $ECHO_N "checking for compress2... $ECHO_C" >&6
+if test "${ac_cv_func_compress2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define compress2 to an innocuous variant, in case <limits.h> declares compress2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define compress2 innocuous_compress2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char compress2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef compress2
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char compress2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_compress2) || defined (__stub___compress2)
+choke me
+#else
+char (*f) () = compress2;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != compress2;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_compress2=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_compress2=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_compress2" >&5
+echo "${ECHO_T}$ac_cv_func_compress2" >&6
+if test $ac_cv_func_compress2 = yes; then
+  HAVE_COMPRESS2="yes"
+fi
+
+
+    if test -z "$HAVE_ZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      { { echo "$as_me:$LINENO: error: couldn't find zlib library" >&5
+echo "$as_me: error: couldn't find zlib library" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    ;;
+  no)
+    HAVE_ZLIB="no"
+    echo "$as_me:$LINENO: checking for GNU zlib" >&5
+echo $ECHO_N "checking for GNU zlib... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+    ;;
+  *)
+    HAVE_ZLIB="yes"
+    case "$withval" in
+      *,*)
+        zlib_inc="`echo $withval |cut -f1 -d,`"
+        zlib_lib="`echo $withval |cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          zlib_inc="$withval/include"
+          zlib_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+            if test "X$zlib_inc" = "X/usr/include"; then
+      zlib_inc=""
+    fi
+    if test "X$zlib_lib" = "X/usr/lib"; then
+      zlib_lib=""
+    fi
+
+    saved_CPPFLAGS="$CPPFLAGS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    if test -n "$zlib_inc"; then
+      CPPFLAGS="$CPPFLAGS -I$zlib_inc"
+    fi
+
+
+for ac_header in zlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ HAVE_ZLIB_H="yes"
+else
+  CPPFLAGS="$saved_CPPFLAGS"
+fi
+
+done
+
+
+    if test -n "$zlib_lib"; then
+      LDFLAGS="$LDFLAGS -L$zlib_lib"
+    fi
+
+
+echo "$as_me:$LINENO: checking for compress2 in -lz" >&5
+echo $ECHO_N "checking for compress2 in -lz... $ECHO_C" >&6
+if test "${ac_cv_lib_z_compress2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char compress2 ();
+int
+main ()
+{
+compress2 ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_z_compress2=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_z_compress2=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_z_compress2" >&5
+echo "${ECHO_T}$ac_cv_lib_z_compress2" >&6
+if test $ac_cv_lib_z_compress2 = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBZ 1
+_ACEOF
+
+  LIBS="-lz $LIBS"
+
+else
+  LDFLAGS="$saved_LDFLAGS"; unset HAVE_ZLIB
+fi
+
+    echo "$as_me:$LINENO: checking for compress2" >&5
+echo $ECHO_N "checking for compress2... $ECHO_C" >&6
+if test "${ac_cv_func_compress2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define compress2 to an innocuous variant, in case <limits.h> declares compress2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define compress2 innocuous_compress2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char compress2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef compress2
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char compress2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_compress2) || defined (__stub___compress2)
+choke me
+#else
+char (*f) () = compress2;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != compress2;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_compress2=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_compress2=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_compress2" >&5
+echo "${ECHO_T}$ac_cv_func_compress2" >&6
+if test $ac_cv_func_compress2 = yes; then
+  HAVE_COMPRESS2="yes"
+fi
+
+
+    if test -z "$HAVE_ZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      { { echo "$as_me:$LINENO: error: couldn't find zlib library" >&5
+echo "$as_me: error: couldn't find zlib library" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    ;;
+esac
+
+if test "x$HAVE_ZLIB" = "xyes" -a "x$HAVE_ZLIB_H" = "xyes" -a "x$HAVE_COMPRESS2" = "xyes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FILTER_DEFLATE 1
+_ACEOF
+
+    USE_FILTER_DEFLATE="yes"
+
+        if test "X$EXTERNAL_FILTERS" != "X"; then
+        EXTERNAL_FILTERS="${EXTERNAL_FILTERS},"
+    fi
+    EXTERNAL_FILTERS="${EXTERNAL_FILTERS}deflate"
+fi
+
+
+ USE_FILTER_SZIP="no"
+
+# Check whether --with-szlib or --without-szlib was given.
+if test "${with_szlib+set}" = set; then
+  withval="$with_szlib"
+
+else
+  withval=no
+fi;
+
+case $withval in
+  yes)
+    HAVE_SZLIB="yes"
+
+for ac_header in szlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ HAVE_SZLIB_H="yes"
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for SZ_BufftoBuffCompress in -lsz" >&5
+echo $ECHO_N "checking for SZ_BufftoBuffCompress in -lsz... $ECHO_C" >&6
+if test "${ac_cv_lib_sz_SZ_BufftoBuffCompress+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char SZ_BufftoBuffCompress ();
+int
+main ()
+{
+SZ_BufftoBuffCompress ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_sz_SZ_BufftoBuffCompress=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_sz_SZ_BufftoBuffCompress=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_sz_SZ_BufftoBuffCompress" >&5
+echo "${ECHO_T}$ac_cv_lib_sz_SZ_BufftoBuffCompress" >&6
+if test $ac_cv_lib_sz_SZ_BufftoBuffCompress = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSZ 1
+_ACEOF
+
+  LIBS="-lsz $LIBS"
+
+else
+  unset HAVE_SZLIB
+fi
+
+
+    if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      { { echo "$as_me:$LINENO: error: couldn't find szlib library" >&5
+echo "$as_me: error: couldn't find szlib library" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    ;;
+  no)
+    HAVE_SZLIB="no"
+    echo "$as_me:$LINENO: checking for szlib" >&5
+echo $ECHO_N "checking for szlib... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+    ;;
+  *)
+    HAVE_SZLIB="yes"
+    case "$withval" in
+      *,*)
+        szlib_inc="`echo $withval |cut -f1 -d,`"
+        szlib_lib="`echo $withval |cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          szlib_inc="$withval/include"
+          szlib_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+            if test "X$szlib_inc" = "X/usr/include"; then
+      szlib_inc=""
+    fi
+    if test "X$szlib_lib" = "X/usr/lib"; then
+      szlib_lib=""
+    fi
+
+    saved_CPPFLAGS="$CPPFLAGS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    if test -n "$szlib_inc"; then
+      CPPFLAGS="$CPPFLAGS -I$szlib_inc"
+    fi
+
+
+for ac_header in szlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ HAVE_SZLIB_H="yes"
+else
+  CPPFLAGS="$saved_CPPFLAGS"
+fi
+
+done
+
+
+    if test -n "$szlib_lib"; then
+      LDFLAGS="$LDFLAGS -L$szlib_lib"
+    fi
+
+
+echo "$as_me:$LINENO: checking for SZ_BufftoBuffCompress in -lsz" >&5
+echo $ECHO_N "checking for SZ_BufftoBuffCompress in -lsz... $ECHO_C" >&6
+if test "${ac_cv_lib_sz_SZ_BufftoBuffCompress+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char SZ_BufftoBuffCompress ();
+int
+main ()
+{
+SZ_BufftoBuffCompress ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_sz_SZ_BufftoBuffCompress=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_sz_SZ_BufftoBuffCompress=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_sz_SZ_BufftoBuffCompress" >&5
+echo "${ECHO_T}$ac_cv_lib_sz_SZ_BufftoBuffCompress" >&6
+if test $ac_cv_lib_sz_SZ_BufftoBuffCompress = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSZ 1
+_ACEOF
+
+  LIBS="-lsz $LIBS"
+
+else
+  LDFLAGS="$saved_LDFLAGS"; unset HAVE_SZLIB
+fi
+
+
+    if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      { { echo "$as_me:$LINENO: error: couldn't find szlib library" >&5
+echo "$as_me: error: couldn't find szlib library" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    ;;
+esac
+
+if test "x$HAVE_SZLIB" = "xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FILTER_SZIP 1
+_ACEOF
+
+    USE_FILTER_SZIP="yes"
+
+        echo "$as_me:$LINENO: checking for szlib encoder" >&5
+echo $ECHO_N "checking for szlib encoder... $ECHO_C" >&6
+
+    if test "${hdf5_cv_szlib_can_encode+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+        #include <szlib.h>
+
+        int main(void)
+        {
+                /* SZ_encoder_enabled returns 1 if encoder is present */
+            if(SZ_encoder_enabled() == 1)
+                exit(0);
+            else
+                exit(1);
+        }
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  hdf5_cv_szlib_can_encode=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+hdf5_cv_szlib_can_encode=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+
+
+    if test ${hdf5_cv_szlib_can_encode} = "yes"; then
+        echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+    else
+        echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    fi
+
+        if test "X$EXTERNAL_FILTERS" != "X"; then
+        EXTERNAL_FILTERS="${EXTERNAL_FILTERS},"
+    fi
+    EXTERNAL_FILTERS="${EXTERNAL_FILTERS}szip"
+    if test ${hdf5_cv_szlib_can_encode} = "yes"; then
+        EXTERNAL_FILTERS="${EXTERNAL_FILTERS}(encoder)"
+    else
+        EXTERNAL_FILTERS="${EXTERNAL_FILTERS}(no encoder)"
+    fi
+fi
+
+
+ SSL=yes
+
+# Check whether --with-ssl or --without-ssl was given.
+if test "${with_ssl+set}" = set; then
+  withval="$with_ssl"
+
+else
+  withval=no
+fi;
+
+case "$withval" in
+   yes)
+
+echo "$as_me:$LINENO: checking for main in -lcrypto" >&5
+echo $ECHO_N "checking for main in -lcrypto... $ECHO_C" >&6
+if test "${ac_cv_lib_crypto_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrypto  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_crypto_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_crypto_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_crypto_main" >&5
+echo "${ECHO_T}$ac_cv_lib_crypto_main" >&6
+if test $ac_cv_lib_crypto_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBCRYPTO 1
+_ACEOF
+
+  LIBS="-lcrypto $LIBS"
+
+else
+  unset SSL
+fi
+
+
+echo "$as_me:$LINENO: checking for SSL_get_version in -lssl" >&5
+echo $ECHO_N "checking for SSL_get_version in -lssl... $ECHO_C" >&6
+if test "${ac_cv_lib_ssl_SSL_get_version+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lssl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char SSL_get_version ();
+int
+main ()
+{
+SSL_get_version ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_ssl_SSL_get_version=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_ssl_SSL_get_version=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_ssl_SSL_get_version" >&5
+echo "${ECHO_T}$ac_cv_lib_ssl_SSL_get_version" >&6
+if test $ac_cv_lib_ssl_SSL_get_version = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSSL 1
+_ACEOF
+
+  LIBS="-lssl $LIBS"
+
+else
+  unset SSL
+fi
+
+      ;;
+   no)
+      echo "$as_me:$LINENO: checking for SSL" >&5
+echo $ECHO_N "checking for SSL... $ECHO_C" >&6
+      echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+      unset SSL
+      ;;
+   *)
+      saved_LDFLAGS="$LDFLAGS"
+      if test "X$with_ssl" != "X/usr/lib"; then
+        LDFLAGS="$LDFLAGS -L$with_ssl"
+      fi
+
+echo "$as_me:$LINENO: checking for main in -lcrypto" >&5
+echo $ECHO_N "checking for main in -lcrypto... $ECHO_C" >&6
+if test "${ac_cv_lib_crypto_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcrypto  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_crypto_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_crypto_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_crypto_main" >&5
+echo "${ECHO_T}$ac_cv_lib_crypto_main" >&6
+if test $ac_cv_lib_crypto_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBCRYPTO 1
+_ACEOF
+
+  LIBS="-lcrypto $LIBS"
+
+else
+  LDFLAGS="$saved_LDFLAGS"; unset SSL
+fi
+
+
+echo "$as_me:$LINENO: checking for SSL_get_version in -lssl" >&5
+echo $ECHO_N "checking for SSL_get_version in -lssl... $ECHO_C" >&6
+if test "${ac_cv_lib_ssl_SSL_get_version+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lssl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char SSL_get_version ();
+int
+main ()
+{
+SSL_get_version ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_ssl_SSL_get_version=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_ssl_SSL_get_version=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_ssl_SSL_get_version" >&5
+echo "${ECHO_T}$ac_cv_lib_ssl_SSL_get_version" >&6
+if test $ac_cv_lib_ssl_SSL_get_version = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSSL 1
+_ACEOF
+
+  LIBS="-lssl $LIBS"
+
+else
+  LDFLAGS="$saved_LDFLAGS"; unset SSL
+fi
+
+      ;;
+esac
+
+ GASS="yes"
+ TESTGASS='$(srcdir)/testgass'
+
+# Check whether --with-gass or --without-gass was given.
+if test "${with_gass+set}" = set; then
+  withval="$with_gass"
+
+else
+  withval=no
+fi;
+
+case "$withval" in
+  yes)
+
+for ac_header in globus_common.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  unset GASS TESTGASS
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for globus_module_activate in -lglobus_common" >&5
+echo $ECHO_N "checking for globus_module_activate in -lglobus_common... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_common_globus_module_activate+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_common  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char globus_module_activate ();
+int
+main ()
+{
+globus_module_activate ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_common_globus_module_activate=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_common_globus_module_activate=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_common_globus_module_activate" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_common_globus_module_activate" >&6
+if test $ac_cv_lib_globus_common_globus_module_activate = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_COMMON 1
+_ACEOF
+
+  LIBS="-lglobus_common $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gass_cache" >&5
+echo $ECHO_N "checking for main in -lglobus_gass_cache... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gass_cache_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gass_cache  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gass_cache_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gass_cache_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gass_cache_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gass_cache_main" >&6
+if test $ac_cv_lib_globus_gass_cache_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GASS_CACHE 1
+_ACEOF
+
+  LIBS="-lglobus_gass_cache $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gaa" >&5
+echo $ECHO_N "checking for main in -lglobus_gaa... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gaa_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gaa  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gaa_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gaa_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gaa_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gaa_main" >&6
+if test $ac_cv_lib_globus_gaa_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GAA 1
+_ACEOF
+
+  LIBS="-lglobus_gaa $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gss" >&5
+echo $ECHO_N "checking for main in -lglobus_gss... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gss_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gss  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gss_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gss_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gss_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gss_main" >&6
+if test $ac_cv_lib_globus_gss_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GSS 1
+_ACEOF
+
+  LIBS="-lglobus_gss $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gss_assist" >&5
+echo $ECHO_N "checking for main in -lglobus_gss_assist... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gss_assist_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gss_assist  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gss_assist_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gss_assist_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gss_assist_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gss_assist_main" >&6
+if test $ac_cv_lib_globus_gss_assist_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GSS_ASSIST 1
+_ACEOF
+
+  LIBS="-lglobus_gss_assist $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_io" >&5
+echo $ECHO_N "checking for main in -lglobus_io... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_io_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_io  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_io_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_io_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_io_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_io_main" >&6
+if test $ac_cv_lib_globus_io_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_IO 1
+_ACEOF
+
+  LIBS="-lglobus_io $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gass_transfer_assist" >&5
+echo $ECHO_N "checking for main in -lglobus_gass_transfer_assist... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gass_transfer_assist_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gass_transfer_assist  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gass_transfer_assist_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gass_transfer_assist_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gass_transfer_assist_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gass_transfer_assist_main" >&6
+if test $ac_cv_lib_globus_gass_transfer_assist_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GASS_TRANSFER_ASSIST 1
+_ACEOF
+
+  LIBS="-lglobus_gass_transfer_assist $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gass_transfer" >&5
+echo $ECHO_N "checking for main in -lglobus_gass_transfer... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gass_transfer_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gass_transfer  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gass_transfer_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gass_transfer_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gass_transfer_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gass_transfer_main" >&6
+if test $ac_cv_lib_globus_gass_transfer_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GASS_TRANSFER 1
+_ACEOF
+
+  LIBS="-lglobus_gass_transfer $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for globus_gass_open in -lglobus_gass_file" >&5
+echo $ECHO_N "checking for globus_gass_open in -lglobus_gass_file... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gass_file_globus_gass_open+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gass_file  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char globus_gass_open ();
+int
+main ()
+{
+globus_gass_open ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gass_file_globus_gass_open=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gass_file_globus_gass_open=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gass_file_globus_gass_open" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gass_file_globus_gass_open" >&6
+if test $ac_cv_lib_globus_gass_file_globus_gass_open = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GASS_FILE 1
+_ACEOF
+
+  LIBS="-lglobus_gass_file $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+    ;;
+  no)
+    echo "$as_me:$LINENO: checking for GASS" >&5
+echo $ECHO_N "checking for GASS... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+    unset GASS TESTGASS
+    ;;
+  *)
+    case "$withval" in
+      *,*)
+        gass_inc="`echo $withval | cut -f1 -d,`"
+        gass_lib="`echo $withval | cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          gass_inc="$withval/include"
+          gass_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+            if test "X$gass_inc" = "X/usr/include"; then
+      gass_inc=""
+    fi
+    if test "X$gass_lib" = "X/usr/lib"; then
+      gass_lib=""
+    fi
+
+    if test -n "$gass_inc"; then
+      saved_CPPFLAGS="$CPPFLAGS"
+      CPPFLAGS="$CPPFLAGS -I$gass_inc"
+
+for ac_header in globus_common.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  CPPFLAGS="$saved_CPPFLAGS"
+                       unset GASS TESTGASS
+fi
+
+done
+
+    else
+
+for ac_header in globus_common.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+    fi
+
+    if test -n "$gass_lib"; then
+      saved_LDFLAGS="$LDFLAGS"
+      LDFLAGS="$LDFLAGS -L$gass_lib"
+
+echo "$as_me:$LINENO: checking for globus_module_activate in -lglobus_common" >&5
+echo $ECHO_N "checking for globus_module_activate in -lglobus_common... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_common_globus_module_activate+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_common  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char globus_module_activate ();
+int
+main ()
+{
+globus_module_activate ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_common_globus_module_activate=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_common_globus_module_activate=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_common_globus_module_activate" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_common_globus_module_activate" >&6
+if test $ac_cv_lib_globus_common_globus_module_activate = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_COMMON 1
+_ACEOF
+
+  LIBS="-lglobus_common $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gass_cache" >&5
+echo $ECHO_N "checking for main in -lglobus_gass_cache... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gass_cache_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gass_cache  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gass_cache_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gass_cache_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gass_cache_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gass_cache_main" >&6
+if test $ac_cv_lib_globus_gass_cache_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GASS_CACHE 1
+_ACEOF
+
+  LIBS="-lglobus_gass_cache $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gaa" >&5
+echo $ECHO_N "checking for main in -lglobus_gaa... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gaa_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gaa  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gaa_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gaa_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gaa_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gaa_main" >&6
+if test $ac_cv_lib_globus_gaa_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GAA 1
+_ACEOF
+
+  LIBS="-lglobus_gaa $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gss" >&5
+echo $ECHO_N "checking for main in -lglobus_gss... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gss_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gss  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gss_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gss_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gss_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gss_main" >&6
+if test $ac_cv_lib_globus_gss_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GSS 1
+_ACEOF
+
+  LIBS="-lglobus_gss $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gss_assist" >&5
+echo $ECHO_N "checking for main in -lglobus_gss_assist... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gss_assist_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gss_assist  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gss_assist_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gss_assist_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gss_assist_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gss_assist_main" >&6
+if test $ac_cv_lib_globus_gss_assist_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GSS_ASSIST 1
+_ACEOF
+
+  LIBS="-lglobus_gss_assist $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_io" >&5
+echo $ECHO_N "checking for main in -lglobus_io... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_io_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_io  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_io_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_io_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_io_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_io_main" >&6
+if test $ac_cv_lib_globus_io_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_IO 1
+_ACEOF
+
+  LIBS="-lglobus_io $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gass_transfer_assist" >&5
+echo $ECHO_N "checking for main in -lglobus_gass_transfer_assist... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gass_transfer_assist_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gass_transfer_assist  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gass_transfer_assist_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gass_transfer_assist_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gass_transfer_assist_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gass_transfer_assist_main" >&6
+if test $ac_cv_lib_globus_gass_transfer_assist_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GASS_TRANSFER_ASSIST 1
+_ACEOF
+
+  LIBS="-lglobus_gass_transfer_assist $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gass_transfer" >&5
+echo $ECHO_N "checking for main in -lglobus_gass_transfer... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gass_transfer_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gass_transfer  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gass_transfer_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gass_transfer_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gass_transfer_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gass_transfer_main" >&6
+if test $ac_cv_lib_globus_gass_transfer_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GASS_TRANSFER 1
+_ACEOF
+
+  LIBS="-lglobus_gass_transfer $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for globus_gass_open in -lglobus_gass_file" >&5
+echo $ECHO_N "checking for globus_gass_open in -lglobus_gass_file... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gass_file_globus_gass_open+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gass_file  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char globus_gass_open ();
+int
+main ()
+{
+globus_gass_open ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gass_file_globus_gass_open=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gass_file_globus_gass_open=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gass_file_globus_gass_open" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gass_file_globus_gass_open" >&6
+if test $ac_cv_lib_globus_gass_file_globus_gass_open = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GASS_FILE 1
+_ACEOF
+
+  LIBS="-lglobus_gass_file $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+    else
+
+echo "$as_me:$LINENO: checking for globus_module_activate in -lglobus_common" >&5
+echo $ECHO_N "checking for globus_module_activate in -lglobus_common... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_common_globus_module_activate+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_common  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char globus_module_activate ();
+int
+main ()
+{
+globus_module_activate ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_common_globus_module_activate=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_common_globus_module_activate=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_common_globus_module_activate" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_common_globus_module_activate" >&6
+if test $ac_cv_lib_globus_common_globus_module_activate = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_COMMON 1
+_ACEOF
+
+  LIBS="-lglobus_common $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gass_cache" >&5
+echo $ECHO_N "checking for main in -lglobus_gass_cache... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gass_cache_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gass_cache  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gass_cache_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gass_cache_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gass_cache_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gass_cache_main" >&6
+if test $ac_cv_lib_globus_gass_cache_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GASS_CACHE 1
+_ACEOF
+
+  LIBS="-lglobus_gass_cache $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gaa" >&5
+echo $ECHO_N "checking for main in -lglobus_gaa... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gaa_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gaa  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gaa_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gaa_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gaa_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gaa_main" >&6
+if test $ac_cv_lib_globus_gaa_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GAA 1
+_ACEOF
+
+  LIBS="-lglobus_gaa $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gss" >&5
+echo $ECHO_N "checking for main in -lglobus_gss... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gss_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gss  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gss_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gss_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gss_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gss_main" >&6
+if test $ac_cv_lib_globus_gss_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GSS 1
+_ACEOF
+
+  LIBS="-lglobus_gss $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gss_assist" >&5
+echo $ECHO_N "checking for main in -lglobus_gss_assist... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gss_assist_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gss_assist  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gss_assist_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gss_assist_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gss_assist_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gss_assist_main" >&6
+if test $ac_cv_lib_globus_gss_assist_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GSS_ASSIST 1
+_ACEOF
+
+  LIBS="-lglobus_gss_assist $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_io" >&5
+echo $ECHO_N "checking for main in -lglobus_io... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_io_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_io  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_io_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_io_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_io_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_io_main" >&6
+if test $ac_cv_lib_globus_io_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_IO 1
+_ACEOF
+
+  LIBS="-lglobus_io $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gass_transfer_assist" >&5
+echo $ECHO_N "checking for main in -lglobus_gass_transfer_assist... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gass_transfer_assist_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gass_transfer_assist  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gass_transfer_assist_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gass_transfer_assist_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gass_transfer_assist_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gass_transfer_assist_main" >&6
+if test $ac_cv_lib_globus_gass_transfer_assist_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GASS_TRANSFER_ASSIST 1
+_ACEOF
+
+  LIBS="-lglobus_gass_transfer_assist $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lglobus_gass_transfer" >&5
+echo $ECHO_N "checking for main in -lglobus_gass_transfer... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gass_transfer_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gass_transfer  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gass_transfer_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gass_transfer_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gass_transfer_main" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gass_transfer_main" >&6
+if test $ac_cv_lib_globus_gass_transfer_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GASS_TRANSFER 1
+_ACEOF
+
+  LIBS="-lglobus_gass_transfer $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+
+echo "$as_me:$LINENO: checking for globus_gass_open in -lglobus_gass_file" >&5
+echo $ECHO_N "checking for globus_gass_open in -lglobus_gass_file... $ECHO_C" >&6
+if test "${ac_cv_lib_globus_gass_file_globus_gass_open+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lglobus_gass_file  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char globus_gass_open ();
+int
+main ()
+{
+globus_gass_open ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_globus_gass_file_globus_gass_open=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_globus_gass_file_globus_gass_open=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_globus_gass_file_globus_gass_open" >&5
+echo "${ECHO_T}$ac_cv_lib_globus_gass_file_globus_gass_open" >&6
+if test $ac_cv_lib_globus_gass_file_globus_gass_open = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBGLOBUS_GASS_FILE 1
+_ACEOF
+
+  LIBS="-lglobus_gass_file $LIBS"
+
+else
+  unset GASS TESTGASS
+fi
+
+    fi
+    ;;
+esac
+
+if test -n "$GASS"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GASS 1
+_ACEOF
+
+fi
+
+ SRB="yes"
+ TESTSRB='$(srcdir)/testsrb'
+
+# Check whether --with-srb or --without-srb was given.
+if test "${with_srb+set}" = set; then
+  withval="$with_srb"
+
+else
+  withval=no
+fi;
+
+case "$withval" in
+  yes)
+
+for ac_header in srbClient.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  unset SRB TESTSRB
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for main in -lelf" >&5
+echo $ECHO_N "checking for main in -lelf... $ECHO_C" >&6
+if test "${ac_cv_lib_elf_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lelf  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_elf_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_elf_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_elf_main" >&5
+echo "${ECHO_T}$ac_cv_lib_elf_main" >&6
+if test $ac_cv_lib_elf_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBELF 1
+_ACEOF
+
+  LIBS="-lelf $LIBS"
+
+else
+  unset SRB TESTSRB
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lsocket" >&5
+echo $ECHO_N "checking for main in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_socket_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_socket_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_main" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_main" >&6
+if test $ac_cv_lib_socket_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSOCKET 1
+_ACEOF
+
+  LIBS="-lsocket $LIBS"
+
+else
+  unset SRB TESTSRB
+fi
+
+
+echo "$as_me:$LINENO: checking for clConnect in -lSrbClient" >&5
+echo $ECHO_N "checking for clConnect in -lSrbClient... $ECHO_C" >&6
+if test "${ac_cv_lib_SrbClient_clConnect+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lSrbClient  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char clConnect ();
+int
+main ()
+{
+clConnect ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_SrbClient_clConnect=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_SrbClient_clConnect=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_SrbClient_clConnect" >&5
+echo "${ECHO_T}$ac_cv_lib_SrbClient_clConnect" >&6
+if test $ac_cv_lib_SrbClient_clConnect = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSRBCLIENT 1
+_ACEOF
+
+  LIBS="-lSrbClient $LIBS"
+
+else
+  unset SRB TESTSRB
+fi
+
+    ;;
+  no)
+    echo "$as_me:$LINENO: checking for SRB" >&5
+echo $ECHO_N "checking for SRB... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+    unset SRB TESTSRB
+    ;;
+  *)
+    case "$withval" in
+      *,*)
+        srb_inc="`echo $withval | cut -f1 -d,`"
+        srb_lib="`echo $withval | cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          srb_inc="$withval/include"
+          srb_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+            if test "X$srb_inc" = "X/usr/include"; then
+      srb_inc=""
+    fi
+    if test "X$srb_lib" = "X/usr/lib"; then
+      srb_lib=""
+    fi
+
+    if test -n "$srb_inc"; then
+      saved_CPPFLAGS="$CPPFLAGS"
+      CPPFLAGS="$CPPFLAGS -I$srb_inc"
+
+for ac_header in srbClient.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  CPPFLAGS="$saved_CPPFLAGS"
+                       unset SRB TESTSRB
+fi
+
+done
+
+    else
+
+for ac_header in srbClient.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+    fi
+
+    if test -n "$srb_lib"; then
+      saved_LDFLAGS="$LDFLAGS"
+      LDFLAGS="$LDFLAGS -L$srb_lib"
+
+echo "$as_me:$LINENO: checking for main in -lelf" >&5
+echo $ECHO_N "checking for main in -lelf... $ECHO_C" >&6
+if test "${ac_cv_lib_elf_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lelf  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_elf_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_elf_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_elf_main" >&5
+echo "${ECHO_T}$ac_cv_lib_elf_main" >&6
+if test $ac_cv_lib_elf_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBELF 1
+_ACEOF
+
+  LIBS="-lelf $LIBS"
+
+else
+  unset SRB TESTSRB
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lsocket" >&5
+echo $ECHO_N "checking for main in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_socket_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_socket_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_main" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_main" >&6
+if test $ac_cv_lib_socket_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSOCKET 1
+_ACEOF
+
+  LIBS="-lsocket $LIBS"
+
+else
+  unset SRB TESTSRB
+fi
+
+
+echo "$as_me:$LINENO: checking for clConnect in -lSrbClient" >&5
+echo $ECHO_N "checking for clConnect in -lSrbClient... $ECHO_C" >&6
+if test "${ac_cv_lib_SrbClient_clConnect+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lSrbClient  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char clConnect ();
+int
+main ()
+{
+clConnect ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_SrbClient_clConnect=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_SrbClient_clConnect=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_SrbClient_clConnect" >&5
+echo "${ECHO_T}$ac_cv_lib_SrbClient_clConnect" >&6
+if test $ac_cv_lib_SrbClient_clConnect = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSRBCLIENT 1
+_ACEOF
+
+  LIBS="-lSrbClient $LIBS"
+
+else
+  unset SRB TESTSRB
+fi
+
+    else
+
+echo "$as_me:$LINENO: checking for main in -lelf" >&5
+echo $ECHO_N "checking for main in -lelf... $ECHO_C" >&6
+if test "${ac_cv_lib_elf_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lelf  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_elf_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_elf_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_elf_main" >&5
+echo "${ECHO_T}$ac_cv_lib_elf_main" >&6
+if test $ac_cv_lib_elf_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBELF 1
+_ACEOF
+
+  LIBS="-lelf $LIBS"
+
+else
+  unset SRB TESTSRB
+fi
+
+
+echo "$as_me:$LINENO: checking for main in -lsocket" >&5
+echo $ECHO_N "checking for main in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_main+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+
+int
+main ()
+{
+main ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_socket_main=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_socket_main=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_main" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_main" >&6
+if test $ac_cv_lib_socket_main = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSOCKET 1
+_ACEOF
+
+  LIBS="-lsocket $LIBS"
+
+else
+  unset SRB TESTSRB
+fi
+
+
+echo "$as_me:$LINENO: checking for clConnect in -lSrbClient" >&5
+echo $ECHO_N "checking for clConnect in -lSrbClient... $ECHO_C" >&6
+if test "${ac_cv_lib_SrbClient_clConnect+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lSrbClient  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char clConnect ();
+int
+main ()
+{
+clConnect ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_SrbClient_clConnect=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_SrbClient_clConnect=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_SrbClient_clConnect" >&5
+echo "${ECHO_T}$ac_cv_lib_SrbClient_clConnect" >&6
+if test $ac_cv_lib_SrbClient_clConnect = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSRBCLIENT 1
+_ACEOF
+
+  LIBS="-lSrbClient $LIBS"
+
+else
+  unset SRB TESTSRB
+fi
+
+    fi
+    ;;
+esac
+
+if test -n "$SRB"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SRB 1
+_ACEOF
+
+fi
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+ PTHREAD=yes
+
+# Check whether --with-pthread or --without-pthread was given.
+if test "${with_pthread+set}" = set; then
+  withval="$with_pthread"
+
+else
+  withval=no
+fi;
+
+case "$withval" in
+  yes)
+
+for ac_header in pthread.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5
+echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6
+if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char pthread_create ();
+int
+main ()
+{
+pthread_create ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_pthread_pthread_create=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_pthread_pthread_create=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5
+echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6
+if test $ac_cv_lib_pthread_pthread_create = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBPTHREAD 1
+_ACEOF
+
+  LIBS="-lpthread $LIBS"
+
+else
+  unset PTHREAD
+fi
+
+    ;;
+  no)
+    echo "$as_me:$LINENO: checking for pthread" >&5
+echo $ECHO_N "checking for pthread... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+    unset PTHREAD
+    ;;
+  *)
+    case "$withval" in
+      *,*)
+        pthread_inc="`echo $withval | cut -f1 -d,`"
+        pthread_lib="`echo $withval | cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          pthread_inc="$withval/include"
+          pthread_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+            if test "X$pthread_inc" = "X/usr/include"; then
+      pthread_inc=""
+    fi
+    if test "X$pthread_lib" = "X/usr/lib"; then
+      pthread_lib=""
+    fi
+
+    if test -n "$pthread_inc"; then
+      saved_CPPFLAGS="$CPPFLAGS"
+      CPPFLAGS="$CPPFLAGS -I$pthread_inc"
+
+for ac_header in pthread.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  CPPFLAGS="$saved_CPPFLAGS"; unset PTHREAD
+fi
+
+done
+
+    else
+
+for ac_header in pthread.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  unset PTHREAD
+fi
+
+done
+
+    fi
+
+    if test -n "$pthread_lib"; then
+      saved_LDFLAGS="$LDFLAGS"
+      LDFLAGS="$LDFLAGS -L$pthread_lib"
+
+echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5
+echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6
+if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char pthread_create ();
+int
+main ()
+{
+pthread_create ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_pthread_pthread_create=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_pthread_pthread_create=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5
+echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6
+if test $ac_cv_lib_pthread_pthread_create = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBPTHREAD 1
+_ACEOF
+
+  LIBS="-lpthread $LIBS"
+
+else
+  LDFLAGS="$saved_LDFLAGS"; unset PTHREAD
+fi
+
+    else
+
+echo "$as_me:$LINENO: checking for pthread_create in -lpthread" >&5
+echo $ECHO_N "checking for pthread_create in -lpthread... $ECHO_C" >&6
+if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char pthread_create ();
+int
+main ()
+{
+pthread_create ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_pthread_pthread_create=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_pthread_pthread_create=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_create" >&5
+echo "${ECHO_T}$ac_cv_lib_pthread_pthread_create" >&6
+if test $ac_cv_lib_pthread_pthread_create = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBPTHREAD 1
+_ACEOF
+
+  LIBS="-lpthread $LIBS"
+
+else
+  unset PTHREAD
+fi
+
+    fi
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking for thread safe support" >&5
+echo $ECHO_N "checking for thread safe support... $ECHO_C" >&6
+# Check whether --enable-threadsafe or --disable-threadsafe was given.
+if test "${enable_threadsafe+set}" = set; then
+  enableval="$enable_threadsafe"
+  THREADSAFE=$enableval
+fi;
+
+case "X-$THREADSAFE" in
+  X-|X-no)
+    echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+  X-yes)
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+pthread_create()
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; THREADSAFE=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: needed pthread library not available" >&5
+echo "$as_me: error: needed pthread library not available" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+    ;;
+  *)
+    echo "$as_me:$LINENO: result: error" >&5
+echo "${ECHO_T}error" >&6
+    { { echo "$as_me:$LINENO: error: \'$enableval\' is not a valid threadsafe type" >&5
+echo "$as_me: error: \'$enableval\' is not a valid threadsafe type" >&2;}
+   { (exit 1); exit 1; }; }
+    ;;
+esac
+
+if test "X$THREADSAFE" = "Xyes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_THREADSAFE 1
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking whether HDF5 v1.4 compatibility functions enabled" >&5
+echo $ECHO_N "checking whether HDF5 v1.4 compatibility functions enabled... $ECHO_C" >&6
+# Check whether --enable-hdf5v1_4 or --disable-hdf5v1_4 was given.
+if test "${enable_hdf5v1_4+set}" = set; then
+  enableval="$enable_hdf5v1_4"
+  HDF5_V1_4_COMPAT=$enableval
+fi;
+
+if test "$HDF5_V1_4_COMPAT" = "yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+cat >>confdefs.h <<\_ACEOF
+#define WANT_H5_V1_4_COMPAT 1
+_ACEOF
+
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+echo "$as_me:$LINENO: checking for Stream Virtual File Driver support" >&5
+echo $ECHO_N "checking for Stream Virtual File Driver support... $ECHO_C" >&6
+# Check whether --enable-stream-vfd or --disable-stream-vfd was given.
+if test "${enable_stream_vfd+set}" = set; then
+  enableval="$enable_stream_vfd"
+  STREAM_VFD=$enableval
+else
+  STREAM_VFD=yes
+fi;
+
+if test "$STREAM_VFD" = "yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+for ac_header in netinet/in.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in netinet/tcp.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <netinet/in.h>
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_header in sys/filio.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STREAM 1
+_ACEOF
+
+
+    echo "$as_me:$LINENO: checking if socklen_t is defined" >&5
+echo $ECHO_N "checking if socklen_t is defined... $ECHO_C" >&6
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+int
+main ()
+{
+socklen_t foo; return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SOCKLEN_T 1
+_ACEOF
+
+    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  echo "$as_me:$LINENO: result: not configured" >&5
+echo "${ECHO_T}not configured" >&6
+fi
+
+
+echo "$as_me:$LINENO: checking for tm_gmtoff in struct tm" >&5
+echo $ECHO_N "checking for tm_gmtoff in struct tm... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <sys/time.h>
+#include <time.h>
+int
+main ()
+{
+struct tm tm; tm.tm_gmtoff=0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_TM_GMTOFF 1
+_ACEOF
+
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+echo "$as_me:$LINENO: checking for __tm_gmtoff in struct tm" >&5
+echo $ECHO_N "checking for __tm_gmtoff in struct tm... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <sys/time.h>
+#include <time.h>
+int
+main ()
+{
+struct tm tm; tm.__tm_gmtoff=0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE___TM_GMTOFF 1
+_ACEOF
+
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+echo "$as_me:$LINENO: checking for global timezone variable" >&5
+echo $ECHO_N "checking for global timezone variable... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <sys/time.h>
+#include <time.h>
+int
+main ()
+{
+timezone=0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_TIMEZONE 1
+_ACEOF
+
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+
+echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
+echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6
+if test "${ac_cv_struct_tm+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm *tp; tp->tm_sec;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_struct_tm=time.h
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_struct_tm=sys/time.h
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
+echo "${ECHO_T}$ac_cv_struct_tm" >&6
+if test $ac_cv_struct_tm = sys/time.h; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TM_IN_SYS_TIME 1
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for struct tm.tm_zone" >&5
+echo $ECHO_N "checking for struct tm.tm_zone... $ECHO_C" >&6
+if test "${ac_cv_member_struct_tm_tm_zone+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <$ac_cv_struct_tm>
+
+
+int
+main ()
+{
+static struct tm ac_aggr;
+if (ac_aggr.tm_zone)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_member_struct_tm_tm_zone=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <$ac_cv_struct_tm>
+
+
+int
+main ()
+{
+static struct tm ac_aggr;
+if (sizeof ac_aggr.tm_zone)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_member_struct_tm_tm_zone=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_member_struct_tm_tm_zone=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_member_struct_tm_tm_zone" >&5
+echo "${ECHO_T}$ac_cv_member_struct_tm_tm_zone" >&6
+if test $ac_cv_member_struct_tm_tm_zone = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_TM_TM_ZONE 1
+_ACEOF
+
+
+fi
+
+if test "$ac_cv_member_struct_tm_tm_zone" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_TM_ZONE 1
+_ACEOF
+
+else
+  echo "$as_me:$LINENO: checking for tzname" >&5
+echo $ECHO_N "checking for tzname... $ECHO_C" >&6
+if test "${ac_cv_var_tzname+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <time.h>
+#ifndef tzname /* For SGI.  */
+extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
+#endif
+
+int
+main ()
+{
+atoi(*tzname);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_var_tzname=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_var_tzname=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_var_tzname" >&5
+echo "${ECHO_T}$ac_cv_var_tzname" >&6
+  if test $ac_cv_var_tzname = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_TZNAME 1
+_ACEOF
+
+  fi
+fi
+
+echo "$as_me:$LINENO: checking for struct timezone" >&5
+echo $ECHO_N "checking for struct timezone... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+int
+main ()
+{
+struct timezone tz; tz.tz_minuteswest=0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRUCT_TIMEZONE 1
+_ACEOF
+
+have_struct_tz="yes"
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+if test "$have_gettime" = "yes" -a "$have_struct_tz" = "yes"; then
+   echo "$as_me:$LINENO: checking whether gettimeofday() gives timezone" >&5
+echo $ECHO_N "checking whether gettimeofday() gives timezone... $ECHO_C" >&6
+   if test "${hdf5_cv_gettimeofday_tz+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+          #include <time.h>
+          #include <sys/time.h>
+          int main(void)
+          {
+             struct timeval tv;
+             struct timezone tz;
+             tz.tz_minuteswest = 7777;  /* Initialize to an unreasonable number */
+             tz.tz_dsttime = 7;
+             gettimeofday(&tv, &tz);
+                /* Check whether the function returned any value at all */
+             if(tz.tz_minuteswest == 7777 && tz.tz_dsttime == 7)
+                exit(1);
+             else exit (0);
+          }
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  hdf5_cv_gettimeofday_tz=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+hdf5_cv_gettimeofday_tz=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+
+
+   if test ${hdf5_cv_gettimeofday_tz} = "yes"; then
+      echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+cat >>confdefs.h <<\_ACEOF
+#define GETTIMEOFDAY_GIVES_TZ 1
+_ACEOF
+
+   else
+      echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+   fi
+fi
+
+echo "$as_me:$LINENO: checking for st_blocks in struct stat" >&5
+echo $ECHO_N "checking for st_blocks in struct stat... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <sys/stat.h>
+int
+main ()
+{
+struct stat sb; sb.st_blocks=0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STAT_ST_BLOCKS 1
+_ACEOF
+
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
+
+for ac_func in _getvideoconfig gettextinfo GetConsoleScreenBufferInfo
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+for ac_func in _scrsize ioctl
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+echo "$as_me:$LINENO: checking for struct videoconfig" >&5
+echo $ECHO_N "checking for struct videoconfig... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+struct videoconfig w; w.numtextcols=0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRUCT_VIDEOCONFIG 1
+_ACEOF
+
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+echo "$as_me:$LINENO: checking for struct text_info" >&5
+echo $ECHO_N "checking for struct text_info... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+struct text_info w; w.screenwidth=0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRUCT_TEXT_INFO 1
+_ACEOF
+
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+echo "$as_me:$LINENO: checking for TIOCGWINSZ" >&5
+echo $ECHO_N "checking for TIOCGWINSZ... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/ioctl.h>
+int
+main ()
+{
+int w=TIOCGWINSZ;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_TIOCGWINSZ 1
+_ACEOF
+
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+echo "$as_me:$LINENO: checking for TIOCGETD" >&5
+echo $ECHO_N "checking for TIOCGETD... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/ioctl.h>
+int
+main ()
+{
+int w=TIOCGETD;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_TIOCGETD 1
+_ACEOF
+
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+
+
+
+
+
+
+
+for ac_func in alarm fork frexpf frexpl gethostname getpwuid getrusage
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+
+for ac_func in BSDgettimeofday longjmp setsysinfo sigaction
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+
+
+
+for ac_func in signal snprintf vsnprintf strdup system waitpid
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6
+if eval "test \"\${$as_ac_var+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_var=no"
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6
+if test "${ac_cv_c_const+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset x;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *ccp;
+  char **p;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  ccp = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++ccp;
+  p = (char**) ccp;
+  ccp = (char const *const *) p;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+  }
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_const=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_c_const=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6
+if test "${ac_cv_c_inline+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_inline=$ac_kw; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$ac_cv_c_inline" >&6
+
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+
+echo "$as_me:$LINENO: checking for __attribute__ extension" >&5
+echo $ECHO_N "checking for __attribute__ extension... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+int __attribute__((unused)) x
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ATTRIBUTE 1
+_ACEOF
+
+               echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+echo "$as_me:$LINENO: checking for __FUNCTION__ extension" >&5
+echo $ECHO_N "checking for __FUNCTION__ extension... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+(void)__FUNCTION__
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FUNCTION 1
+_ACEOF
+
+               echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+echo "$as_me:$LINENO: checking how to print long long" >&5
+echo $ECHO_N "checking how to print long long... $ECHO_C" >&6
+if test "${hdf5_cv_printf_ll+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  LD_LIBRARY_PATH="$LD_LIBRARY_PATH`echo $LDFLAGS | sed -e 's/-L/:/g' -e 's/ //g'`"
+export LD_LIBRARY_PATH
+
+for hdf5_cv_printf_ll in l ll L q unknown; do
+   if test "$cross_compiling" = yes; then
+  continue
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int main(void)
+{
+	char *s = malloc(128);
+	long long x = (long long)1048576 * (long long)1048576;
+	sprintf(s,"%${hdf5_cv_printf_ll}d",x);
+	exit(strcmp(s,"1099511627776"));
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+done
+fi
+
+echo "$as_me:$LINENO: result: %${hdf5_cv_printf_ll}d and %${hdf5_cv_printf_ll}u" >&5
+echo "${ECHO_T}%${hdf5_cv_printf_ll}d and %${hdf5_cv_printf_ll}u" >&6
+
+cat >>confdefs.h <<_ACEOF
+#define PRINTF_LL_WIDTH "$hdf5_cv_printf_ll"
+_ACEOF
+
+
+echo "$as_me:$LINENO: checking Threads support system scope" >&5
+echo $ECHO_N "checking Threads support system scope... $ECHO_C" >&6
+if test "${hdf5_cv_system_scope_threads+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run test program while cross compiling
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <pthread.h>
+#endif
+
+int main(void)
+{
+    pthread_attr_t attribute;
+    int ret;
+
+    pthread_attr_init(&attribute);
+    ret=pthread_attr_setscope(&attribute, PTHREAD_SCOPE_SYSTEM);
+    exit(ret==0 ? 0 : 1);
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  hdf5_cv_system_scope_threads=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+hdf5_cv_system_scope_threads=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+
+
+if test ${hdf5_cv_system_scope_threads} = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define SYSTEM_SCOPE_THREADS 1
+_ACEOF
+
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+# Check whether --enable-gpfs or --disable-gpfs was given.
+if test "${enable_gpfs+set}" = set; then
+  enableval="$enable_gpfs"
+
+else
+  enableval=no
+fi;
+
+case "X-$enableval" in
+  X-yes)
+
+for ac_header in gpfs.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ echo "$as_me:$LINENO: checking for GPFS support" >&5
+echo $ECHO_N "checking for GPFS support... $ECHO_C" >&6
+                     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <gpfs.h>
+int
+main ()
+{
+int fd = 0; gpfs_fcntl(fd, (void *)0);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GPFS 1
+_ACEOF
+
+                                    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+                                    LIBS="$LIBS -lgpfs"
+                                    GPFS="yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+                                    GPFS="no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+done
+
+    ;;
+  X-no|*)
+    echo "$as_me:$LINENO: checking for gpfs" >&5
+echo $ECHO_N "checking for gpfs... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+    ;;
+esac
+
+echo "$as_me:$LINENO: checking for debug flags" >&5
+echo $ECHO_N "checking for debug flags... $ECHO_C" >&6
+# Check whether --enable-debug or --disable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval="$enable_debug"
+  DEBUG_PKG=$enableval
+fi;
+
+
+all_packages="ac,b,d,e,f,g,hg,hl,i,mf,mm,o,p,s,t,v,z"
+case "X-$DEBUG_PKG" in
+  X-yes)
+    DEBUG_PKG="d,e,f,g,hg,i,mm,o,p,s,t,v,z"
+    CPPFLAGS="$CPPFLAGS -UNDEBUG"
+    echo "$as_me:$LINENO: result: default ($DEBUG_PKG)" >&5
+echo "${ECHO_T}default ($DEBUG_PKG)" >&6
+    ;;
+  X-all)
+    DEBUG_PKG=$all_packages
+    CPPFLAGS="$CPPFLAGS -UNDEBUG"
+    echo "$as_me:$LINENO: result: all ($DEBUG_PKG)" >&5
+echo "${ECHO_T}all ($DEBUG_PKG)" >&6
+    ;;
+  X-|X-no|X-none)
+    echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+    DEBUG_PKG=
+    CPPFLAGS="$CPPFLAGS -DNDEBUG"
+    ;;
+  *)
+    echo "$as_me:$LINENO: result: $DEBUG_PKG" >&5
+echo "${ECHO_T}$DEBUG_PKG" >&6
+    ;;
+esac
+
+if test -n "$DEBUG_PKG"; then
+  for pkg in `echo $DEBUG_PKG | ${TR} 'a-z,' 'A-Z '`; do
+    CPPFLAGS="$CPPFLAGS -DH5${pkg}_DEBUG"
+  done
+fi
+
+echo "$as_me:$LINENO: checking whether function stack tracking is enabled" >&5
+echo $ECHO_N "checking whether function stack tracking is enabled... $ECHO_C" >&6
+# Check whether --enable-funcstack or --disable-funcstack was given.
+if test "${enable_funcstack+set}" = set; then
+  enableval="$enable_funcstack"
+  FUNCSTACK=$enableval
+fi;
+
+if test "X-$FUNCSTACK" = X- ; then
+  if test -z "$DEBUG_PKG" ; then
+    FUNCSTACK=no
+  else
+    FUNCSTACK=yes
+  fi
+fi
+case "X-$FUNCSTACK" in
+  X-|X-yes)
+      FUNCSTACK="yes"
+      echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FUNCSTACK 1
+_ACEOF
+
+    ;;
+  *)
+      echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    ;;
+esac
+
+
+echo "$as_me:$LINENO: checking for API tracing" >&5
+echo $ECHO_N "checking for API tracing... $ECHO_C" >&6;
+# Check whether --enable-trace or --disable-trace was given.
+if test "${enable_trace+set}" = set; then
+  enableval="$enable_trace"
+  TRACE=$enableval
+fi;
+
+if test "X-$TRACE" = X- ; then
+  if test -z "$DEBUG_PKG" ; then
+    TRACE=no
+  else
+    TRACE=yes
+  fi
+fi
+
+case "X-$TRACE" in
+  X-yes)
+    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+    TRACE_API=yes
+    CPPFLAGS="$CPPFLAGS -DH5_DEBUG_API"
+    ;;
+  X-no|*)
+    echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    TRACE_API=no
+    CPPFLAGS="$CPPFLAGS -UH5_DEBUG_API"
+    ;;
+esac
+
+
+echo "$as_me:$LINENO: checking for instrumented library" >&5
+echo $ECHO_N "checking for instrumented library... $ECHO_C" >&6;
+# Check whether --enable-instrument or --disable-instrument was given.
+if test "${enable_instrument+set}" = set; then
+  enableval="$enable_instrument"
+  INSTRUMENT=$enableval
+fi;
+
+if test "X-$INSTRUMENT" = X- ; then
+  if test -z "$DEBUG_PKG" ; then
+    INSTRUMENT=no
+  else
+    INSTRUMENT=yes
+  fi
+fi
+
+case "X-$INSTRUMENT" in
+  X-yes)
+    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+    INSTRUMENT_LIBRARY=yes
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_INSTRUMENTED_LIBRARY 1
+_ACEOF
+
+    ;;
+  X-no|*)
+    echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+    INSTRUMENT_LIBRARY=no
+    ;;
+esac
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+
+
+
+
+
+case "$CC_BASENAME" in
+  mpicc)
+            PARALLEL=mpicc
+    echo "$as_me:$LINENO: checking for mpirun" >&5
+echo $ECHO_N "checking for mpirun... $ECHO_C" >&6
+
+        cmd="`echo $CC | cut -f1 -d' '`"
+    if (echo $cmd | grep / >/dev/null); then
+      path="`echo $cmd | sed 's/\(.*\)\/.*$/\1/'`"
+    else
+      for path in `echo $PATH | ${TR} : ' '`; do
+        if test -x $path/$cmd; then
+          break
+        fi
+      done
+    fi
+
+        if test -x $path/mpirun; then
+      echo "$as_me:$LINENO: result: $path/mpirun" >&5
+echo "${ECHO_T}$path/mpirun" >&6
+      RUNSERIAL="${RUNSERIAL:-none}"
+
+      if test -z "$RUNPARALLEL"; then
+        RUNPARALLEL="$path/mpirun -np \$\${NPROCS:=3}"
+      fi
+    else
+      echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+    fi
+    ;;
+
+  hcc)
+            PARALLEL=hcc
+    echo "$as_me:$LINENO: checking for mpirun_lam or mpirun" >&5
+echo $ECHO_N "checking for mpirun_lam or mpirun... $ECHO_C" >&6
+
+        cmd="`echo $CC | cut -f1 -d' '`"
+    if (echo $cmd | grep / >/dev/null); then
+      path="`echo $cmd | sed 's/\(.*\)\/.*$/\1/'`"
+    else
+      for path in `echo $PATH | ${TR} : ' '`; do
+        if test -x $path/$cmd; then
+          break
+        fi
+      done
+    fi
+
+        if test -x $path/mpirun_lam -o -x $path/mpirun; then
+      if test -x $path/mpirun_lam; then
+        cmd=mpirun_lam
+      else
+        cmd=mpirun
+      fi
+      echo "$as_me:$LINENO: result: $path/$cmd" >&5
+echo "${ECHO_T}$path/$cmd" >&6
+      RUNSERIAL="${RUNSERIAL:-none}"
+      if test -z "$RUNPARALLEL"; then
+        RUNPARALLEL="$path/$cmd -np \$\${NPROCS:=3}"
+      fi
+    else
+      echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+    fi
+    ;;
+
+  mpcc|mpcc_r)
+        PARALLEL="$CC_BASENAME"
+    ;;
+
+  *)
+            ;;
+esac
+
+# Check whether --enable-parallel or --disable-parallel was given.
+if test "${enable_parallel+set}" = set; then
+  enableval="$enable_parallel"
+
+fi;
+
+echo "$as_me:$LINENO: checking for parallel support files" >&5
+echo $ECHO_N "checking for parallel support files... $ECHO_C" >&6
+case "X-$enable_parallel" in
+  X-|X-no|X-none)
+                echo "$as_me:$LINENO: result: skipped" >&5
+echo "${ECHO_T}skipped" >&6
+    ;;
+
+  X-yes)
+            echo "$as_me:$LINENO: result: provided by compiler" >&5
+echo "${ECHO_T}provided by compiler" >&6
+    PARALLEL=yes
+
+            cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+MPI_Init()
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+\
+
+echo "$as_me:$LINENO: checking for MPI_Init in -lmpi" >&5
+echo $ECHO_N "checking for MPI_Init in -lmpi... $ECHO_C" >&6
+if test "${ac_cv_lib_mpi_MPI_Init+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmpi  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char MPI_Init ();
+int
+main ()
+{
+MPI_Init ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_mpi_MPI_Init=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_mpi_MPI_Init=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_mpi_MPI_Init" >&5
+echo "${ECHO_T}$ac_cv_lib_mpi_MPI_Init" >&6
+if test $ac_cv_lib_mpi_MPI_Init = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMPI 1
+_ACEOF
+
+  LIBS="-lmpi $LIBS"
+
+else
+  \
+
+echo "$as_me:$LINENO: checking for MPI_Init in -lmpich" >&5
+echo $ECHO_N "checking for MPI_Init in -lmpich... $ECHO_C" >&6
+if test "${ac_cv_lib_mpich_MPI_Init+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmpich  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char MPI_Init ();
+int
+main ()
+{
+MPI_Init ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_mpich_MPI_Init=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_mpich_MPI_Init=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_mpich_MPI_Init" >&5
+echo "${ECHO_T}$ac_cv_lib_mpich_MPI_Init" >&6
+if test $ac_cv_lib_mpich_MPI_Init = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMPICH 1
+_ACEOF
+
+  LIBS="-lmpich $LIBS"
+
+else
+  PARALLEL=no
+fi
+
+fi
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+
+            if test "X$PARALLEL" = "Xyes"; then
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+MPI_File_open()
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+echo "$as_me:$LINENO: checking for MPI_File_open in -lmpio" >&5
+echo $ECHO_N "checking for MPI_File_open in -lmpio... $ECHO_C" >&6
+if test "${ac_cv_lib_mpio_MPI_File_open+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmpio  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char MPI_File_open ();
+int
+main ()
+{
+MPI_File_open ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_mpio_MPI_File_open=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_mpio_MPI_File_open=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_mpio_MPI_File_open" >&5
+echo "${ECHO_T}$ac_cv_lib_mpio_MPI_File_open" >&6
+if test $ac_cv_lib_mpio_MPI_File_open = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMPIO 1
+_ACEOF
+
+  LIBS="-lmpio $LIBS"
+
+else
+  PARALLEL=no
+fi
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+    fi
+
+        if test "X$PARALLEL" = "Xyes" -a -z "$RUNPARALLEL"; then
+      RUNPARALLEL="mpirun -np \$\${NPROCS:=3}"
+    fi
+    ;;
+
+  *)
+    echo "$as_me:$LINENO: result: error" >&5
+echo "${ECHO_T}error" >&6
+    { { echo "$as_me:$LINENO: error: \'$enable_parallel\' is not a valid parallel search type" >&5
+echo "$as_me: error: \'$enable_parallel\' is not a valid parallel search type" >&2;}
+   { (exit 1); exit 1; }; }
+    ;;
+esac
+
+if test -n "$PARALLEL"; then
+      if test "X$HDF_CXX" = "Xyes"; then
+    { { echo "$as_me:$LINENO: error: enable-cxx is incompatible with parallel library" >&5
+echo "$as_me: error: enable-cxx is incompatible with parallel library" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+
+    TESTPARALLEL=testpar
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_PARALLEL 1
+_ACEOF
+
+
+    echo "$as_me:$LINENO: checking prefix for running on one processor" >&5
+echo $ECHO_N "checking prefix for running on one processor... $ECHO_C" >&6
+  echo "$as_me:$LINENO: result: $RUNSERIAL" >&5
+echo "${ECHO_T}$RUNSERIAL" >&6
+  echo "$as_me:$LINENO: checking prefix for running in parallel" >&5
+echo $ECHO_N "checking prefix for running in parallel... $ECHO_C" >&6
+  echo "$as_me:$LINENO: result: $RUNPARALLEL" >&5
+echo "${ECHO_T}$RUNPARALLEL" >&6
+
+    echo "$as_me:$LINENO: checking whether a simple MPI-IO program can be linked" >&5
+echo $ECHO_N "checking whether a simple MPI-IO program can be linked... $ECHO_C" >&6
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+MPI_Init(); MPI_File_open();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+              { { echo "$as_me:$LINENO: error: unable to link a simple MPI-IO application" >&5
+echo "$as_me: error: unable to link a simple MPI-IO application" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+
+      if test -z "$RUNPARALLEL"; then
+    { { echo "$as_me:$LINENO: error: no way to run a parallel program" >&5
+echo "$as_me: error: no way to run a parallel program" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+
+      if test "X$RUNSERIAL" = "Xnone"; then
+    RUNSERIAL=""
+  fi
+  if test "X$RUNPARALLEL" = "Xnone"; then
+    RUNPARALLEL=""
+  fi
+
+               MPE=yes
+
+# Check whether --with-mpe or --without-mpe was given.
+if test "${with_mpe+set}" = set; then
+  withval="$with_mpe"
+
+else
+  withval=no
+fi;
+
+  case "X-$withval" in
+    X-|X-no|X-none)
+      echo "$as_me:$LINENO: checking for MPE" >&5
+echo $ECHO_N "checking for MPE... $ECHO_C" >&6
+      echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+      unset MPE
+      ;;
+    X-yes)
+
+for ac_header in mpe.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  unset MPE
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for MPE_Init_log in -lmpe" >&5
+echo $ECHO_N "checking for MPE_Init_log in -lmpe... $ECHO_C" >&6
+if test "${ac_cv_lib_mpe_MPE_Init_log+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmpe  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char MPE_Init_log ();
+int
+main ()
+{
+MPE_Init_log ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_mpe_MPE_Init_log=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_mpe_MPE_Init_log=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_mpe_MPE_Init_log" >&5
+echo "${ECHO_T}$ac_cv_lib_mpe_MPE_Init_log" >&6
+if test $ac_cv_lib_mpe_MPE_Init_log = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMPE 1
+_ACEOF
+
+  LIBS="-lmpe $LIBS"
+
+else
+  unset MPE
+fi
+
+
+echo "$as_me:$LINENO: checking for CLOG_Init in -llmpe" >&5
+echo $ECHO_N "checking for CLOG_Init in -llmpe... $ECHO_C" >&6
+if test "${ac_cv_lib_lmpe_CLOG_Init+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-llmpe  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char CLOG_Init ();
+int
+main ()
+{
+CLOG_Init ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_lmpe_CLOG_Init=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_lmpe_CLOG_Init=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_lmpe_CLOG_Init" >&5
+echo "${ECHO_T}$ac_cv_lib_lmpe_CLOG_Init" >&6
+if test $ac_cv_lib_lmpe_CLOG_Init = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBLMPE 1
+_ACEOF
+
+  LIBS="-llmpe $LIBS"
+
+else
+  unset MPE
+fi
+
+      ;;
+    *)
+      case "$withval" in
+        *,*)
+          mpe_inc="`echo $withval | cut -f1 -d,`"
+          mpe_lib="`echo $withval | cut -f2 -d, -s`"
+          ;;
+        *)
+          if test -n "$withval"; then
+            mpe_inc="$withval/include"
+            mpe_lib="$withval/lib"
+          fi
+          ;;
+      esac
+
+                  if test "X$mpe_inc" = "X/usr/include"; then
+        mpe_inc=""
+      fi
+      if test "X$mpe_lib" = "X/usr/lib"; then
+        mpe_lib=""
+      fi
+
+      if test -n "$mpe_inc"; then
+        saved_CPPFLAGS="$CPPFLAGS"
+        CPPFLAGS="$CPPFLAGS -I$mpe_inc"
+
+for ac_header in mpe.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  CPPFLAGS="$saved_CPPFLAGS"; unset MPE
+fi
+
+done
+
+      else
+
+for ac_header in mpe.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  unset MPE
+fi
+
+done
+
+      fi
+
+      if test -n "$mpe_lib"; then
+        saved_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -L$mpe_lib"
+
+echo "$as_me:$LINENO: checking for MPE_Init_log in -lmpe" >&5
+echo $ECHO_N "checking for MPE_Init_log in -lmpe... $ECHO_C" >&6
+if test "${ac_cv_lib_mpe_MPE_Init_log+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmpe  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char MPE_Init_log ();
+int
+main ()
+{
+MPE_Init_log ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_mpe_MPE_Init_log=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_mpe_MPE_Init_log=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_mpe_MPE_Init_log" >&5
+echo "${ECHO_T}$ac_cv_lib_mpe_MPE_Init_log" >&6
+if test $ac_cv_lib_mpe_MPE_Init_log = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMPE 1
+_ACEOF
+
+  LIBS="-lmpe $LIBS"
+
+else
+  LDFLAGS="$saved_LDFLAGS"; unset MPE
+fi
+
+
+echo "$as_me:$LINENO: checking for CLOG_Init in -llmpe" >&5
+echo $ECHO_N "checking for CLOG_Init in -llmpe... $ECHO_C" >&6
+if test "${ac_cv_lib_lmpe_CLOG_Init+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-llmpe  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char CLOG_Init ();
+int
+main ()
+{
+CLOG_Init ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_lmpe_CLOG_Init=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_lmpe_CLOG_Init=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_lmpe_CLOG_Init" >&5
+echo "${ECHO_T}$ac_cv_lib_lmpe_CLOG_Init" >&6
+if test $ac_cv_lib_lmpe_CLOG_Init = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBLMPE 1
+_ACEOF
+
+  LIBS="-llmpe $LIBS"
+
+else
+  LDFLAGS="$saved_LDFLAGS"; unset MPE
+fi
+
+      else
+
+echo "$as_me:$LINENO: checking for MPE_Init_log in -lmpe" >&5
+echo $ECHO_N "checking for MPE_Init_log in -lmpe... $ECHO_C" >&6
+if test "${ac_cv_lib_mpe_MPE_Init_log+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmpe  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char MPE_Init_log ();
+int
+main ()
+{
+MPE_Init_log ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_mpe_MPE_Init_log=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_mpe_MPE_Init_log=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_mpe_MPE_Init_log" >&5
+echo "${ECHO_T}$ac_cv_lib_mpe_MPE_Init_log" >&6
+if test $ac_cv_lib_mpe_MPE_Init_log = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMPE 1
+_ACEOF
+
+  LIBS="-lmpe $LIBS"
+
+else
+  unset MPE
+fi
+
+
+echo "$as_me:$LINENO: checking for CLOG_Init in -llmpe" >&5
+echo $ECHO_N "checking for CLOG_Init in -llmpe... $ECHO_C" >&6
+if test "${ac_cv_lib_lmpe_CLOG_Init+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-llmpe  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char CLOG_Init ();
+int
+main ()
+{
+CLOG_Init ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_lmpe_CLOG_Init=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_lmpe_CLOG_Init=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_lmpe_CLOG_Init" >&5
+echo "${ECHO_T}$ac_cv_lib_lmpe_CLOG_Init" >&6
+if test $ac_cv_lib_lmpe_CLOG_Init = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBLMPE 1
+_ACEOF
+
+  LIBS="-llmpe $LIBS"
+
+else
+  unset MPE
+fi
+
+      fi
+      ;;
+  esac
+
+  if test "X-$MPE" = "X-yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MPE 1
+_ACEOF
+
+  fi
+
+              echo "$as_me:$LINENO: checking if MPI_File_set_size works for files over 2GB" >&5
+echo $ECHO_N "checking if MPI_File_set_size works for files over 2GB... $ECHO_C" >&6
+  if test "${hdf5_cv_mpi_file_set_size_big+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  hdf5_cv_mpi_file_set_size_big=yes
+fi
+
+
+  if test ${hdf5_cv_mpi_file_set_size_big} = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define MPI_FILE_SET_SIZE_BIG 1
+_ACEOF
+
+    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+  else
+    echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+  fi
+
+
+echo "$as_me:$LINENO: checking if irregular hyperslab optimization code works inside MPI-IO" >&5
+echo $ECHO_N "checking if irregular hyperslab optimization code works inside MPI-IO... $ECHO_C" >&6
+
+if test "${hdf5_mpi_complex_derived_datatype_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  hdf5_mpi_complex_derived_datatype_works=yes
+fi
+
+
+if test ${hdf5_mpi_complex_derived_datatype_works} = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define MPI_COMPLEX_DERIVED_DATATYPE_WORKS 1
+_ACEOF
+
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+fi
+
+
+ USE_FILTER_SHUFFLE="no"
+ USE_FILTER_FLETCHER32="no"
+echo "$as_me:$LINENO: checking for I/O filters" >&5
+echo $ECHO_N "checking for I/O filters... $ECHO_C" >&6
+# Check whether --enable-filters or --disable-filters was given.
+if test "${enable_filters+set}" = set; then
+  enableval="$enable_filters"
+  FILTERS=$enableval
+fi;
+
+all_filters="shuffle,fletcher32"
+case "X-$FILTERS" in
+  X-|X-all)
+    FILTERS=$all_filters
+    echo "$as_me:$LINENO: result: all ($FILTERS)" >&5
+echo "${ECHO_T}all ($FILTERS)" >&6
+    ;;
+  X-no|X-none)
+    echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+    FILTERS="none"
+    ;;
+  *)
+    echo "$as_me:$LINENO: result: $FILTERS" >&5
+echo "${ECHO_T}$FILTERS" >&6
+    ;;
+esac
+
+if test -n "$FILTERS"; then
+  for filter in `echo $FILTERS | ${TR} 'a-z,' 'A-Z '`; do
+                    if test $filter = "SHUFFLE"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FILTER_SHUFFLE 1
+_ACEOF
+
+      USE_FILTER_SHUFFLE="yes"
+    fi
+    if test $filter = "FLETCHER32"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FILTER_FLETCHER32 1
+_ACEOF
+
+      USE_FILTER_FLETCHER32="yes"
+    fi
+  done
+fi
+
+if test 1 = 2; then
+
+cat >>confdefs.h <<\_ACEOF
+#define NO_SHARED_WRITING 1
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking if converting denormalized floating-point values is possible" >&5
+echo $ECHO_N "checking if converting denormalized floating-point values is possible... $ECHO_C" >&6
+if test "${hdf5_cv_convert_denormal_float+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  hdf5_cv_convert_denormal_float=yes
+fi
+
+
+if test ${hdf5_cv_convert_denormal_float} = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define CONVERT_DENORMAL_FLOAT 1
+_ACEOF
+
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+
+H5_VERSION="`cut -d' ' -f3 $srcdir/README.txt | head -1`"
+
+
+ CONFIG_DATE="`date`"
+
+ CONFIG_USER="`whoami`@`hostname`"
+if test -n "$ORGANIZATION"; then
+  CONFIG_USER="$CONFIG_USER at $ORGANIZATION"
+fi
+
+
+
+
+if test "X$ac_cv_c_bigendian" = "Xyes"; then
+  BYTESEX="big-endian"
+else
+  BYTESEX="little-endian"
+fi
+
+
+if (grep '^build_libtool_libs=yes' libtool >/dev/null); then
+  enable_shared=yes
+else
+  enable_shared=no
+fi
+
+if (grep '^build_old_libs=yes' libtool >/dev/null); then
+  enable_static=yes
+else
+  enable_static=no
+fi
+
+if test "X$enable_static" = "Xyes" && test "X$enable_shared" = "Xyes"; then
+  STATIC_SHARED="static, shared"
+elif test "X$enable_static" = "Xyes"; then
+  STATIC_SHARED="static"
+elif test "X$enable_shared" = "Xyes"; then
+  STATIC_SHARED="shared"
+else
+  STATIC_SHARED="none"
+fi
+
+PARALLEL=${PARALLEL:-no}
+
+
+if `echo $CC | grep / 2>&1 /dev/null`; then
+  CC_VERSION="$CC"
+else
+  CC_VERSION="$CC";
+  for x in `echo $PATH | sed -e 's/:/ /g'`; do
+    if test -x $x/$CC; then
+      CC_VERSION="$x/$CC"
+      break
+    fi
+  done
+fi
+if test -n "$cc_vendor" && test -n "$cc_version"; then
+  CC_VERSION="$CC_VERSION ($cc_vendor-$cc_version)"
+fi
+
+if (${CC-cc} -V 2>&1 | grep '^pgcc 6.0') > /dev/null && test "X$enable_production" = "Xyes"; then
+    CC="${CC-cc} -Mx,28,0x8"
+fi
+
+if test -x /bin/pwd; then
+  pwd=/bin/pwd
+else
+  pwd=pwd
+fi
+ ROOT="`$pwd`"
+
+ DYNAMIC_DIRS=""
+
+if test -n "$LDFLAGS"; then
+  for d in $LDFLAGS ; do
+    case "$d" in
+      -L*)
+        d="`echo $d | sed -e 's/-L//g'`"
+        case "$d" in
+          .*)
+                                    d=${ROOT}/$d
+            ;;
+        esac
+        DYNAMIC_DIRS="-R${d} $DYNAMIC_DIRS"
+        ;;
+    esac
+  done
+fi
+
+if test -n "$CPPFLAGS"; then
+  TEMP_CPPFLAGS=""
+  for d in $CPPFLAGS ; do
+    case "$d" in
+      -I.*)
+                        d="`echo $d | sed -e 's/-I//g'`"
+        d="-I${ROOT}/${d}"
+        ;;
+    esac
+    TEMP_CPPFLAGS="$d $TEMP_CPPFLAGS"
+  done
+  CPPFLAGS=$TEMP_CPPFLAGS
+fi
+
+
+ HL=""
+echo "$as_me:$LINENO: checking if high level library is enabled" >&5
+echo $ECHO_N "checking if high level library is enabled... $ECHO_C" >&6
+# Check whether --enable-hl or --disable-hl was given.
+if test "${enable_hl+set}" = set; then
+  enableval="$enable_hl"
+  HDF5_HL=$enableval
+else
+  HDF5_HL=yes
+fi;
+
+if test "X$HDF5_HL" = "Xyes"; then
+ echo "yes"
+ HL="hl"
+else
+ echo "no"
+fi
+
+ COMMENCE=config/commence
+ CONCLUDE=config/conclude
+
+ SEARCH='$(srcdir) $(top_builddir)/src $(top_srcdir)/src'
+cmd='echo $SEARCH |sed "s/ /'$SEARCH_SEP'/g"'
+SEARCH="$SEARCH_RULE`eval $cmd`"
+export SEARCH
+
+if test "X$GMAKE" = "Xyes"; then
+   SETX=":"
+else
+   SETX="set -x"
+fi
+
+rm -f conftest conftest.o conftest.c dummy.o
+
+
+# First the stamp1 file for H5config.h.in
+mkdir ./config >/dev/null 2>&1
+touch ./config/stamp1
+
+# Then the config.status file (but not makefiles)
+saved_no_create=$no_create
+no_create=yes
+
+PARALLEL_MAKE=""
+
+if test -n "$TESTPARALLEL"; then
+  PARALLEL_MAKE="$TESTPARALLEL/Makefile $TESTPARALLEL/testph5.sh"
+fi
+
+
+# conditionally generate the high level makefiles
+# to do : fortran with hl
+if test "X$HDF5_HL" = "Xyes"; then
+ HL_FILES="hl/Makefile
+	   hl/src/Makefile
+           hl/test/Makefile"
+fi
+
+                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ac_config_files="$ac_config_files src/libhdf5.settings config/depend1 config/depend2 config/depend3 config/depend4 config/dependN config/commence config/conclude Makefile src/Makefile test/Makefile $PARALLEL_MAKE perform/Makefile tools/Makefile tools/h5dump/Makefile tools/h5dump/testh5dump.sh tools/h5import/Makefile tools/h5diff/Makefile tools/h5jam/Makefile tools/h5jam/testh5jam.sh tools/h5repack/Makefile tools/h5repack/h5repack.sh tools/h5ls/Makefile tools/lib/Makefile tools/misc/Makefile tools/misc/h5cc tools/gifconv/Makefile examples/Makefile doc/Makefile doc/html/Makefile doc/html/ed_libs/Makefile doc/html/ed_styles/Makefile doc/html/ADGuide/Makefile doc/html/Graphics/Makefile doc/html/Intro/Makefile doc/html/PSandPDF/Makefile doc/html/TechNotes/Makefile doc/html/Tutor/Makefile doc/html/Tutor/Graphics/Makefile doc/html/Tutor/examples/Makefile doc/html/cpplus/Makefile doc/html/cpplus_RM/Makefile doc/html/cpplus_RM/header_files/Makefile doc/html/fortran/Makefile $HL_FILES"
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[	 ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[	 ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_i=`echo "$ac_i" |
+	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+  # 2. Add them.
+  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by HDF5 $as_me 1.6.5, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+		   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf at gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+HDF5 config.status 1.6.5
+configured by $0, generated by GNU Autoconf 2.59,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "src/libhdf5.settings" ) CONFIG_FILES="$CONFIG_FILES src/libhdf5.settings" ;;
+  "config/depend1" ) CONFIG_FILES="$CONFIG_FILES config/depend1" ;;
+  "config/depend2" ) CONFIG_FILES="$CONFIG_FILES config/depend2" ;;
+  "config/depend3" ) CONFIG_FILES="$CONFIG_FILES config/depend3" ;;
+  "config/depend4" ) CONFIG_FILES="$CONFIG_FILES config/depend4" ;;
+  "config/dependN" ) CONFIG_FILES="$CONFIG_FILES config/dependN" ;;
+  "config/commence" ) CONFIG_FILES="$CONFIG_FILES config/commence" ;;
+  "config/conclude" ) CONFIG_FILES="$CONFIG_FILES config/conclude" ;;
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+  "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+  "$PARALLEL_MAKE" ) CONFIG_FILES="$CONFIG_FILES $PARALLEL_MAKE" ;;
+  "perform/Makefile" ) CONFIG_FILES="$CONFIG_FILES perform/Makefile" ;;
+  "tools/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;;
+  "tools/h5dump/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/h5dump/Makefile" ;;
+  "tools/h5dump/testh5dump.sh" ) CONFIG_FILES="$CONFIG_FILES tools/h5dump/testh5dump.sh" ;;
+  "tools/h5import/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/h5import/Makefile" ;;
+  "tools/h5diff/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/h5diff/Makefile" ;;
+  "tools/h5jam/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/h5jam/Makefile" ;;
+  "tools/h5jam/testh5jam.sh" ) CONFIG_FILES="$CONFIG_FILES tools/h5jam/testh5jam.sh" ;;
+  "tools/h5repack/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/h5repack/Makefile" ;;
+  "tools/h5repack/h5repack.sh" ) CONFIG_FILES="$CONFIG_FILES tools/h5repack/h5repack.sh" ;;
+  "tools/h5ls/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/h5ls/Makefile" ;;
+  "tools/lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/lib/Makefile" ;;
+  "tools/misc/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/misc/Makefile" ;;
+  "tools/misc/h5cc" ) CONFIG_FILES="$CONFIG_FILES tools/misc/h5cc" ;;
+  "tools/gifconv/Makefile" ) CONFIG_FILES="$CONFIG_FILES tools/gifconv/Makefile" ;;
+  "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+  "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
+  "doc/html/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/Makefile" ;;
+  "doc/html/ed_libs/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/ed_libs/Makefile" ;;
+  "doc/html/ed_styles/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/ed_styles/Makefile" ;;
+  "doc/html/ADGuide/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/ADGuide/Makefile" ;;
+  "doc/html/Graphics/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/Graphics/Makefile" ;;
+  "doc/html/Intro/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/Intro/Makefile" ;;
+  "doc/html/PSandPDF/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/PSandPDF/Makefile" ;;
+  "doc/html/TechNotes/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/TechNotes/Makefile" ;;
+  "doc/html/Tutor/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/Tutor/Makefile" ;;
+  "doc/html/Tutor/Graphics/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/Tutor/Graphics/Makefile" ;;
+  "doc/html/Tutor/examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/Tutor/examples/Makefile" ;;
+  "doc/html/cpplus/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/cpplus/Makefile" ;;
+  "doc/html/cpplus_RM/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/cpplus_RM/Makefile" ;;
+  "doc/html/cpplus_RM/header_files/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/cpplus_RM/header_files/Makefile" ;;
+  "doc/html/fortran/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/html/fortran/Makefile" ;;
+  "$HL_FILES" ) CONFIG_FILES="$CONFIG_FILES $HL_FILES" ;;
+  "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+  "src/H5config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/H5config.h" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s, at SHELL@,$SHELL,;t t
+s, at PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s, at PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s, at PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s, at PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s, at PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s, at PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s, at exec_prefix@,$exec_prefix,;t t
+s, at prefix@,$prefix,;t t
+s, at program_transform_name@,$program_transform_name,;t t
+s, at bindir@,$bindir,;t t
+s, at sbindir@,$sbindir,;t t
+s, at libexecdir@,$libexecdir,;t t
+s, at datadir@,$datadir,;t t
+s, at sysconfdir@,$sysconfdir,;t t
+s, at sharedstatedir@,$sharedstatedir,;t t
+s, at localstatedir@,$localstatedir,;t t
+s, at libdir@,$libdir,;t t
+s, at includedir@,$includedir,;t t
+s, at oldincludedir@,$oldincludedir,;t t
+s, at infodir@,$infodir,;t t
+s, at mandir@,$mandir,;t t
+s, at build_alias@,$build_alias,;t t
+s, at host_alias@,$host_alias,;t t
+s, at target_alias@,$target_alias,;t t
+s, at DEFS@,$DEFS,;t t
+s, at ECHO_C@,$ECHO_C,;t t
+s, at ECHO_N@,$ECHO_N,;t t
+s, at ECHO_T@,$ECHO_T,;t t
+s, at LIBS@,$LIBS,;t t
+s, at build@,$build,;t t
+s, at build_cpu@,$build_cpu,;t t
+s, at build_vendor@,$build_vendor,;t t
+s, at build_os@,$build_os,;t t
+s, at host@,$host,;t t
+s, at host_cpu@,$host_cpu,;t t
+s, at host_vendor@,$host_vendor,;t t
+s, at host_os@,$host_os,;t t
+s, at CPPFLAGS@,$CPPFLAGS,;t t
+s, at H5_CPPFLAGS@,$H5_CPPFLAGS,;t t
+s, at H5_CFLAGS@,$H5_CFLAGS,;t t
+s, at DEFAULT_LIBS@,$DEFAULT_LIBS,;t t
+s, at TR@,$TR,;t t
+s, at HSIZET@,$HSIZET,;t t
+s, at CC@,$CC,;t t
+s, at CFLAGS@,$CFLAGS,;t t
+s, at LDFLAGS@,$LDFLAGS,;t t
+s, at ac_ct_CC@,$ac_ct_CC,;t t
+s, at EXEEXT@,$EXEEXT,;t t
+s, at OBJEXT@,$OBJEXT,;t t
+s, at config_dirs@,$config_dirs,;t t
+s, at subdirs@,$subdirs,;t t
+s, at LT_STATIC_EXEC@,$LT_STATIC_EXEC,;t t
+s, at PERL@,$PERL,;t t
+s, at AR@,$AR,;t t
+s, at SET_MAKE@,$SET_MAKE,;t t
+s, at INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s, at INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s, at INSTALL_DATA@,$INSTALL_DATA,;t t
+s, at LN_S@,$LN_S,;t t
+s, at ECHO@,$ECHO,;t t
+s, at RANLIB@,$RANLIB,;t t
+s, at ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s, at STRIP@,$STRIP,;t t
+s, at ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s, at CPP@,$CPP,;t t
+s, at EGREP@,$EGREP,;t t
+s, at LIBTOOL@,$LIBTOOL,;t t
+s, at USE_FILTER_DEFLATE@,$USE_FILTER_DEFLATE,;t t
+s, at USE_FILTER_SZIP@,$USE_FILTER_SZIP,;t t
+s, at SSL@,$SSL,;t t
+s, at GASS@,$GASS,;t t
+s, at TESTGASS@,$TESTGASS,;t t
+s, at SRB@,$SRB,;t t
+s, at TESTSRB@,$TESTSRB,;t t
+s, at PTHREAD@,$PTHREAD,;t t
+s, at DEBUG_PKG@,$DEBUG_PKG,;t t
+s, at TRACE_API@,$TRACE_API,;t t
+s, at INSTRUMENT_LIBRARY@,$INSTRUMENT_LIBRARY,;t t
+s, at PARALLEL@,$PARALLEL,;t t
+s, at RUNSERIAL@,$RUNSERIAL,;t t
+s, at RUNPARALLEL@,$RUNPARALLEL,;t t
+s, at TESTPARALLEL@,$TESTPARALLEL,;t t
+s, at MPE@,$MPE,;t t
+s, at FILTERS@,$FILTERS,;t t
+s, at USE_FILTER_SHUFFLE@,$USE_FILTER_SHUFFLE,;t t
+s, at USE_FILTER_FLETCHER32@,$USE_FILTER_FLETCHER32,;t t
+s, at H5_VERSION@,$H5_VERSION,;t t
+s, at CONFIG_DATE@,$CONFIG_DATE,;t t
+s, at CONFIG_USER@,$CONFIG_USER,;t t
+s, at CONFIG_MODE@,$CONFIG_MODE,;t t
+s, at BYTESEX@,$BYTESEX,;t t
+s, at STATIC_SHARED@,$STATIC_SHARED,;t t
+s, at CC_VERSION@,$CC_VERSION,;t t
+s, at ROOT@,$ROOT,;t t
+s, at DYNAMIC_DIRS@,$DYNAMIC_DIRS,;t t
+s, at HL@,$HL,;t t
+s, at SEARCH@,$SEARCH,;t t
+s, at SETX@,$SETX,;t t
+s, at LIBOBJS@,$LIBOBJS,;t t
+s, at LTLIBOBJS@,$LTLIBOBJS,;t t
+/@DEPEND@/r $DEPEND
+s, at DEPEND@,,;t t
+/@COMMENCE@/r $COMMENCE
+s, at COMMENCE@,,;t t
+/@CONCLUDE@/r $CONCLUDE
+s, at CONCLUDE@,,;t t
+CEOF
+
+_ACEOF
+
+  cat >>$CONFIG_STATUS <<\_ACEOF
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  esac
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+				     sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s, at configure_input@,$configure_input,;t t
+s, at srcdir@,$ac_srcdir,;t t
+s, at abs_srcdir@,$ac_abs_srcdir,;t t
+s, at top_srcdir@,$ac_top_srcdir,;t t
+s, at abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s, at builddir@,$ac_builddir,;t t
+s, at abs_builddir@,$ac_abs_builddir,;t t
+s, at top_builddir@,$ac_top_builddir,;t t
+s, at abs_top_builddir@,$ac_abs_top_builddir,;t t
+s, at INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
+ac_dB='[	 ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 # Do quote $f, to prevent DOS paths from being IFS'd.
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h.  The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status.  Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless.  Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo '  :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+  # Write a limited-size here document to $tmp/defines.sed.
+  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#define' lines.
+  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo '  fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+  # Write a limited-size here document to $tmp/undefs.sed.
+  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#undef'
+  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+  rm -f conftest.undefs
+  mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+      { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_dest" : 'X\(//\)[^/]' \| \
+	 X"$ac_dest" : 'X\(//\)$' \| \
+	 X"$ac_dest" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+  case $ac_dest in
+    default-1 )
+  echo "creating src/H5pubconf.h"
+  sed 's/#define /#define H5_/' <src/H5config.h |\
+    sed 's/#undef /#undef H5_/' >pubconf
+  if test ! -f src/H5pubconf.h; then
+    /bin/mv -f pubconf src/H5pubconf.h
+  elif (diff pubconf src/H5pubconf.h >/dev/null); then
+    /bin/rm -f pubconf
+    echo "src/H5pubconf.h is unchanged"
+  else
+    /bin/mv -f pubconf src/H5pubconf.h
+  fi
+ ;;
+  esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+#
+# CONFIG_SUBDIRS section.
+#
+if test "$no_recursion" != yes; then
+
+  # Remove --cache-file and --srcdir arguments so they do not pile up.
+  ac_sub_configure_args=
+  ac_prev=
+  for ac_arg in $ac_configure_args; do
+    if test -n "$ac_prev"; then
+      ac_prev=
+      continue
+    fi
+    case $ac_arg in
+    -cache-file | --cache-file | --cache-fil | --cache-fi \
+    | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+      ac_prev=cache_file ;;
+    -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+    | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \
+    | --c=*)
+      ;;
+    --config-cache | -C)
+      ;;
+    -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+      ac_prev=srcdir ;;
+    -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+      ;;
+    -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+      ac_prev=prefix ;;
+    -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+      ;;
+    *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;;
+    esac
+  done
+
+  # Always prepend --prefix to ensure using the same prefix
+  # in subdir configurations.
+  ac_sub_configure_args="--prefix=$prefix $ac_sub_configure_args"
+
+  ac_popdir=`pwd`
+  for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue
+
+    # Do not complain, so a configure script can configure whichever
+    # parts of a large source tree are present.
+    test -d $srcdir/$ac_dir || continue
+
+    { echo "$as_me:$LINENO: configuring in $ac_dir" >&5
+echo "$as_me: configuring in $ac_dir" >&6;}
+    { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+    ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+    cd $ac_dir
+
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_srcdir/configure.gnu; then
+      ac_sub_configure="$SHELL '$ac_srcdir/configure.gnu'"
+    elif test -f $ac_srcdir/configure; then
+      ac_sub_configure="$SHELL '$ac_srcdir/configure'"
+    elif test -f $ac_srcdir/configure.in; then
+      ac_sub_configure=$ac_configure
+    else
+      { echo "$as_me:$LINENO: WARNING: no configuration information is in $ac_dir" >&5
+echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;}
+      ac_sub_configure=
+    fi
+
+    # The recursion is here.
+    if test -n "$ac_sub_configure"; then
+      # Make the cache file name correct relative to the subdirectory.
+      case $cache_file in
+      [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;;
+      *) # Relative path.
+	ac_sub_cache_file=$ac_top_builddir$cache_file ;;
+      esac
+
+      { echo "$as_me:$LINENO: running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5
+echo "$as_me: running $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;}
+      # The eval makes quoting arguments work.
+      eval $ac_sub_configure $ac_sub_configure_args \
+	   --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir ||
+	{ { echo "$as_me:$LINENO: error: $ac_sub_configure failed for $ac_dir" >&5
+echo "$as_me: error: $ac_sub_configure failed for $ac_dir" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+
+    cd $ac_popdir
+  done
+fi
+
+no_create=$saved_no_create
+
+# Then the stamp2 file for H5config.h
+touch ./config/stamp2
+
+# Finally the makefiles
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+chmod 755 tools/misc/h5cc
+
+cat >> src/H5config.h <<EOF
+
+#if defined(__cplusplus) && defined(inline)
+#undef inline
+#endif
+EOF
+
+if test -z "$ECHO_N" -o -z "$ECHO_C"; then
+  if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+    if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+      ECHO_N=''
+      ECHO_C='
+'
+    else
+      ECHO_N=-n
+      ECHO_C=''
+    fi
+  else
+    ECHO_N=''
+    ECHO_C='\c'
+  fi
+fi
+
+PRINT_PLAIN() {
+  echo $ECHO_N "$1$ECHO_C"
+  echo $ECHO_N "$1$ECHO_C" 1>>src/libhdf5.settings
+}
+
+PRINT_N() {
+  echo $ECHO_N "$1:  $ECHO_C"
+  echo $ECHO_N "$1:  $ECHO_C" 1>>src/libhdf5.settings
+}
+
+PRINT() {
+  echo "$1"
+  echo "$1" 1>>src/libhdf5.settings
+}
+
+IF_YES_NO() {
+  if test $# -lt 1; then
+    PRINT "No"
+    return
+  else
+    while test $# -gt 0; do
+      if test "$1" != "yes"; then
+        PRINT "No"
+        return
+      fi
+      shift
+    done
+  fi
+  PRINT "Yes"
+}
+
+IF_ENABLED_DISABLED() {
+  if test "$1" = "yes"; then
+    PRINT "Enabled"
+  else
+    PRINT "Disabled"
+  fi
+}
+
+PRINT "Configure Summary"
+PRINT "Compiling Options:"
+
+PRINT_N "               Compilation Mode"
+case "X-$enable_production" in
+  X-yes)        PRINT "Production" ;;
+  X-no)         PRINT "Development" ;;
+  X-profile)    PRINT "Profile" ;;
+  *)            PRINT "$enable_production" ;;
+esac
+
+PRINT_N "                     C Compiler"
+PRINT "$CC"
+
+PRINT_N "                         CFLAGS"
+PRINT "$CFLAGS"
+
+PRINT_N "                       CPPFLAGS"
+PRINT "$CPPFLAGS"
+
+PRINT_N "                        LDFLAGS"
+PRINT "$LDFLAGS"
+
+PRINT_N "                     Debug Mode"
+
+if test "X$DEBUG_PKG" = "X$all_packages"; then
+  PRINT "All"
+elif test "X$DEBUG_PKG" = "X"; then
+  PRINT "None"
+else
+  PRINT $DEBUG_PKG
+fi
+
+PRINT_N "               Shared Libraries"
+IF_YES_NO "$enable_shared"
+
+PRINT_N "               Static Libraries"
+IF_YES_NO "$enable_static"
+
+PRINT_N "  Statically Linked Executables"
+IF_YES_NO "$STATIC_EXEC"
+
+PRINT_N "                        Tracing"
+IF_YES_NO "$TRACE_API"
+
+PRINT_N "   Optimization Instrumentation"
+IF_YES_NO "$INSTRUMENT"
+
+PRINT "Languages:"
+
+PRINT_N "                            C++"
+IF_YES_NO "$HDF_CXX"
+
+PRINT_N "                        Fortran"
+IF_YES_NO "$HDF_FORTRAN"
+
+PRINT "Features:"
+
+PRINT_N "                        dmalloc"
+IF_YES_NO "$HAVE_DMALLOC"
+
+PRINT_N "         Function Stack Tracing"
+IF_ENABLED_DISABLED "$FUNCSTACK"
+
+PRINT_N "                           GASS"
+IF_YES_NO "$GASS"
+
+PRINT_N "                           GPFS"
+IF_YES_NO "$GPFS"
+
+PRINT_N "        HDF5 v1.4 Compatibility"
+IF_YES_NO "$HDF5_V1_4_COMPAT"
+
+PRINT_N "                        hsize_t"
+case "$HSIZET" in
+  no|small)  PRINT "Small" ;;
+  *)         PRINT "Large" ;;
+esac
+
+PRINT_N "         I/O filters (external)"
+PRINT "$EXTERNAL_FILTERS"
+
+PRINT_N "         I/O filters (internal)"
+PRINT "$FILTERS"
+
+PRINT_N " Linux Large File Support (LFS)"
+IF_ENABLED_DISABLED "$LINUX_LFS"
+
+PRINT_N "                            MPE"
+IF_YES_NO "$MPE"
+
+
+PRINT_N "                  Parallel HDF5"
+if test "$PARALLEL" != "no"; then
+  PRINT "Yes"
+else
+  PRINT "No"
+fi
+
+PRINT_N "                            SRB"
+IF_YES_NO "$SRB"
+
+PRINT_N "                     Stream VFD"
+IF_ENABLED_DISABLED "$STREAM_VFD"
+
+PRINT_N "                   Threadsafety"
+IF_ENABLED_DISABLED "$THREADSAFE"
+
+PRINT_N "             High Level library"
+IF_ENABLED_DISABLED "$HDF5_HL"
+


Property changes on: packages/hdf5/branches/upstream/current/configure
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/configure.in
===================================================================
--- packages/hdf5/branches/upstream/current/configure.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/configure.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2646 @@
+dnl Process this file with autoconf to produce configure.
+dnl
+dnl Copyright by the Board of Trustees of the University of Illinois.
+dnl All rights reserved.
+dnl
+dnl This file is part of HDF5.  The full HDF5 copyright notice, including
+dnl terms governing use, modification, and redistribution, is contained in
+dnl the files COPYING and Copyright.html.  COPYING can be found at the root
+dnl of the source code distribution tree; Copyright.html can be found at the
+dnl root level of an installed copy of the electronic HDF5 document set and
+dnl is linked from the top-level documents page.  It can also be found at
+dnl http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have
+dnl access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu.
+
+dnl ----------------------------------------------------------------------
+dnl Initialize configure.
+dnl
+AC_REVISION($Id: configure.in,v 1.267.2.133 2005/11/06 23:46:37 hdfadmin Exp $)
+
+dnl AC_INIT takes the name of the package, the version number, and an
+dnl email address to report bugs. AC_CONFIG_SRCDIR takes a unique file
+dnl as its argument.
+dnl
+dnl NOTE: Don't forget to change the version number here when we do a
+dnl release!!!
+dnl
+AC_INIT([HDF5], [1.6.5], [hdfhelp at ncsa.uiuc.edu])
+AC_CONFIG_SRCDIR([src/H5.c])
+AC_CONFIG_HEADER([src/H5config.h])
+
+AC_CONFIG_AUX_DIR([bin])
+
+AC_OUTPUT_COMMANDS([
+  echo "creating src/H5pubconf.h"
+  sed 's/#define /#define H5_/' <src/H5config.h |\
+    sed 's/#undef /#undef H5_/' >pubconf
+  if test ! -f src/H5pubconf.h; then
+    /bin/mv -f pubconf src/H5pubconf.h
+  elif (diff pubconf src/H5pubconf.h >/dev/null); then
+    /bin/rm -f pubconf
+    echo "src/H5pubconf.h is unchanged"
+  else
+    /bin/mv -f pubconf src/H5pubconf.h
+  fi
+])
+
+dnl It's possible to configure for a host other than the one on which
+dnl configure is currently running by using the --host=foo flag.
+dnl For machines on which HDF5 is often configured, it can be convenient
+dnl to specify the name of the machine rather than its canonical type.
+case $host_alias in
+  tflops)
+    host_alias=i386-intel-osf1
+    ;;
+esac
+
+AC_CANONICAL_HOST
+AC_SUBST([CPPFLAGS])
+dnl H5_CPPFLAGS holds flags that we want to use on HDF5, but that the
+dnl user doesn't need to use in h5cc.
+AC_SUBST([H5_CPPFLAGS])
+AC_SUBST([H5_CFLAGS])
+
+dnl Different compilers may need default libraries. They are specified in
+dnl the config/* files, so we put this statement here so that it'll be
+dnl set by the code which follows...
+dnl
+AC_SUBST(DEFAULT_LIBS) DEFAULT_LIBS=""
+
+dnl ----------------------------------------------------------------------
+dnl Set prefix default (install directory) to a directory in the build area.
+dnl This allows multiple src-dir builds within one host.
+AC_PREFIX_DEFAULT([`pwd`/hdf5])
+
+dnl ----------------------------------------------------------------------
+dnl Dump all shell variables values.
+dnl
+AC_MSG_CHECKING([shell variables initial values])
+set >&AS_MESSAGE_LOG_FD
+AC_MSG_RESULT([done])
+
+dnl ----------------------------------------------------------------------
+dnl Some platforms have broken tr, basename, and/or xargs programs. Check
+dnl that it actually does what it's supposed to do. Catch this early
+dnl since configure relies upon tr heavily and there's no use continuing
+dnl if it's broken.
+dnl
+AC_MSG_CHECKING([if tr works])
+AC_SUBST(TR)
+if test "X${TR}" = "X"; then
+  TR=tr
+fi
+TR_TEST="`echo Test | ${TR} 'a-z,' 'A-Z '`"
+if test "X${TR_TEST}" != "XTEST"; then
+  AC_MSG_ERROR([tr program doesn't work])
+else
+  AC_MSG_RESULT([yes])
+fi
+
+AC_MSG_CHECKING([if basename works])
+BASENAME_TEST="`basename /foo/bar/baz/qux/basename_works`"
+if test $BASENAME_TEST != "basename_works"; then
+  AC_MSG_ERROR([basename program doesn't work])
+else
+  AC_MSG_RESULT([yes])
+fi
+
+AC_MSG_CHECKING([if xargs works])
+XARGS_TEST="`echo /foo/bar/baz/qux/xargs_works | xargs basename`"
+if test $XARGS_TEST != "xargs_works"; then
+  AC_MSG_ERROR([xargs program doesn't work])
+else
+  AC_MSG_RESULT([yes])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Check that the cache file was build on the same host as what we're
+dnl running on now.
+dnl
+AC_CACHE_CHECK([for cached host], [hdf5_cv_host], [hdf5_cv_host="none"]);
+if test $hdf5_cv_host = "none"; then
+  hdf5_cv_host=$host
+elif test $hdf5_cv_host != $host; then
+  echo "The config.cache file was generated on $hdf5_cv_host but"
+  echo "this is $host.  Please remove that file and try again."
+  AC_MSG_ERROR(config.cache file is invalid)
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Source any special files that we need.  These files normally aren't
+dnl present but can be used by the maintainers to fine tune things like
+dnl turning on debug or profiling flags for the compiler.  The search order
+dnl is:
+dnl
+dnl	CPU-VENDOR-OS
+dnl	VENDOR-OS
+dnl	CPU-OS
+dnl	CPU-VENDOR
+dnl	OS
+dnl	VENDOR
+dnl	CPU
+dnl
+dnl If the `OS' ends with a version number then remove it. For instance,
+dnl `freebsd3.1' would become `freebsd'
+case $host_os in
+  aix4.*)
+    host_os_novers=aix4.x
+    ;;
+  aix5.*)
+    host_os_novers=aix5.x
+    ;;
+  freebsd*)
+    host_os_novers=freebsd
+    ;;
+  irix5.*)
+    host_os_novers=irix5.x
+    ;;
+  irix6.*)
+    host_os_novers=irix6.x
+    ;;
+  osf4.*)
+    host_os_novers=osf4.x
+    ;;
+  osf5.*)
+    host_os_novers=osf5.x
+    ;;
+  solaris2.*)
+    host_os_novers=solaris2.x
+    ;;
+  *)
+    host_os_novers=$host_os
+    ;;
+esac
+
+AC_ARG_ENABLE([hsizet],
+              [AC_HELP_STRING([--disable-hsizet],
+                              [Datasets can normally be larger than
+                               memory and/or files but some compilers are
+                               unable to handle this (including versions
+                               of GCC before 2.8.0). Disabling the
+                               feature causes dataset sizes to be
+                               restricted to the size of core memory, or
+                               'size_t'.])],
+              [HSIZET=$enableval])
+
+AC_MSG_CHECKING([for sizeof hsize_t and hssize_t])
+
+AC_SUBST(HSIZET)
+case $HSIZET in
+  no|small)
+    AC_MSG_RESULT([small])
+    HSIZET=small
+    ;;
+  *)
+    AC_MSG_RESULT([large])
+    HSIZET=large
+    AC_DEFINE([HAVE_LARGE_HSIZET], [1],
+              [Define if it's safe to use `long long' for hsize_t and hssize_t])
+    ;;
+esac
+
+host_config="none"
+for f in $host_cpu-$host_vendor-$host_os \
+         $host_cpu-$host_vendor-$host_os_novers \
+         $host_vendor-$host_os \
+         $host_vendor-$host_os_novers \
+         $host_cpu-$host_os \
+         $host_cpu-$host_os_novers \
+         $host_cpu-$host_vendor \
+         $host_os \
+         $host_os_novers \
+         $host_vendor \
+         $host_cpu ; do
+  AC_MSG_CHECKING([for config $f])
+  if test -f "$srcdir/config/$f"; then
+    host_config=$srcdir/config/$f
+    AC_MSG_RESULT([found])
+    break
+  fi
+  AC_MSG_RESULT([no])
+done
+if test "X$host_config" != "Xnone"; then
+  CC_BASENAME="`echo $CC | cut -f1 -d' ' | xargs basename 2>/dev/null`"
+  . $host_config
+fi
+
+dnl Source any special site-specific file
+hname="`hostname`"
+while test -n "$hname"; do
+  file=$srcdir/config/site-specific/host-$hname
+  AC_MSG_CHECKING([for config $file])
+  if test -f "$file"; then
+    . $file
+    AC_MSG_RESULT([found])
+    break
+  fi
+  AC_MSG_RESULT([no])
+  hname_tmp=$hname
+  hname="`echo $hname | cut -d. -f2-99`"
+  test "$hname_tmp" = "$hname" && break
+done
+
+dnl ----------------------------------------------------------------------
+dnl Check for programs.
+dnl
+AC_PROG_CC
+CC_BASENAME="`echo $CC | cut -f1 -d' ' | xargs basename 2>/dev/null`"
+
+AC_SUBST([config_dirs]) config_dirs=""
+
+dnl ----------------------------------------------------------------------
+dnl Check if they would like the Fortran interface compiled
+dnl
+AC_MSG_CHECKING([if fortran interface enabled])
+AC_ARG_ENABLE([fortran],
+              [AC_HELP_STRING([--enable-fortran],
+                              [Compile the Fortran interface [default=no]])],
+              [HDF_FORTRAN=$enableval])
+
+if test "X$HDF_FORTRAN" = "Xyes"; then
+  echo "yes"
+  if test -z "$config_dirs"; then
+    config_dirs="fortran"
+  else
+    config_dirs="${config_dirs} fortran"
+  fi
+else
+  echo "no"
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Check if they would like the C++ interface compiled
+dnl
+AC_MSG_CHECKING([if c++ interface enabled])
+AC_ARG_ENABLE([cxx],
+              [AC_HELP_STRING([--enable-cxx],
+                              [Compile the C++ interface [default=no]])],
+              [HDF_CXX=$enableval])
+
+if test "X$HDF_CXX" = "Xyes"; then
+  echo "yes"
+  if test -z "$config_dirs"; then
+    config_dirs="c++"
+  else
+    config_dirs="${config_dirs} c++"
+  fi
+else
+  echo "no"
+fi
+
+dnl Run configure in the subdirectories if specified
+AC_CONFIG_SUBDIRS([${config_dirs}])
+
+dnl ----------------------------------------------------------------------
+dnl If we should build only static executables
+dnl
+AC_MSG_CHECKING([if should build only statically linked executables])
+AC_ARG_ENABLE([static_exec],
+              [AC_HELP_STRING([--enable-static-exec],
+                              [Build only statically linked executables
+                               [default=no]])],
+              [STATIC_EXEC=$enableval])
+
+if test "X$STATIC_EXEC" = "Xyes"; then
+  echo "yes"
+  LT_STATIC_EXEC="-all-static"
+else
+  echo "no"
+  LT_STATIC_EXEC=""
+fi
+AC_SUBST([LT_STATIC_EXEC])
+
+dnl ----------------------------------------------------------------------
+dnl Check if they have Perl installed on their system. We only need Perl
+dnl if they're using a GNU compiler.
+dnl
+AC_SUBST([PERL]) PERL=""
+if test "X$GCC" = "Xyes"; then
+  AC_CHECK_PROGS([PERL], [perl],, [$PATH])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Check which archiving tool to use. This needs to be done before
+dnl the AC_PROG_LIBTOOL macro.
+dnl
+if test -z "$AR"; then
+  AC_CHECK_PROGS([AR], [ar xar], [:], [$PATH])
+fi
+AC_SUBST([AR])
+
+dnl Export the AR macro so that it will be placed in the libtool file
+dnl correctly.
+export AR
+
+AC_PROG_MAKE_SET
+AC_PROG_INSTALL
+AC_LIBTOOL_DLOPEN
+AC_PROG_LIBTOOL
+
+dnl Post processing to patch up some deficiencies in libtool
+case $host_os in
+  linux*)
+    # If gcc is not used, need to set $wl to use "-Wl,"
+    if $CC -v 2>&1 | grep '^gcc' > /dev/null ; then
+      : using gcc
+    else
+      echo 'fixing $wl in' $ofile
+ed - $ofile <<EOF 2> /dev/null
+/^wl=""/s//wl="-Wl,"/
+w
+q
+EOF
+    fi
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl pgcc version 6.0x have optimization (-O, -O2 or -O3) problem.  Detect
+dnl these versions and add option "-Mx,28,0x8" to the compiler to avoid
+dnl the problem if optimization is enable.
+dnl
+dnl if test "X$enable_production" = "Xyes"; then
+dnl    CC="${CC-cc} -Mx,28,0x8"
+dnl fi
+
+dnl Fix up the INSTALL macro if it's a relative path. We want the
+dnl full-path to the binary instead.
+case "$INSTALL" in
+  *install-sh*)
+    INSTALL='\${top_srcdir}/bin/install-sh -c'
+    ;;
+esac
+
+AC_MSG_CHECKING([make])
+AC_SUBST_FILE([DEPEND])
+
+if test "`${MAKE-make} --version -f /dev/null 2>/dev/null |\
+          sed -n 1p|cut -c1-8`" = "GNU Make"; then
+  AC_MSG_RESULT([GNU make])
+  GMAKE=yes
+  if test "X$GCC" = "Xyes"; then
+    DEPEND=config/depend1
+  else
+    DEPEND=config/depend2
+  fi
+else
+  AC_MSG_RESULT([generic])
+fi
+
+dnl How do we include another file into a Makefile?
+if test -z "$DEPEND"; then
+  AC_MSG_CHECKING([how to include a makefile])
+
+  dnl The include file contains the target for `foo'
+  cat >makeinc <<EOF
+foo:
+	@:
+EOF
+
+  while true; do #for break
+    dnl pmake. We have to be careful because some pmake think that the
+    dnl contents of the MAKE environment variable is a target.
+    echo '.include <makeinc>' >maketest
+    if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      AC_MSG_RESULT([.include <FILE>])
+      DEPEND=config/depend3
+      break
+    fi
+
+    dnl Most make's use `include FILE'
+    echo 'include makeinc' >maketest
+    if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      AC_MSG_RESULT([include FILE])
+      DEPEND=config/depend4
+      break;
+    fi
+
+    dnl default
+    AC_MSG_RESULT([you have a deficient make command])
+    DEPEND=config/dependN
+    break
+  done
+
+  rm makeinc maketest
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Sometimes makes think the `.PATH:' appearing before the first rule
+dnl with an action should override the `all' default target. So we have
+dnl to decide what the proper syntax is.
+dnl
+AC_MSG_CHECKING([how make searches directories])
+while true; do #for break
+  # The most common method is `VPATH=DIR1 DIR2 ...'
+  cat >maketest <<EOF
+VPATH=$srcdir/config $srcdir/src $srcdir/bin
+.c.o:
+	cp $< H5.o
+
+foo: H5.o
+	/bin/rm -f H5.o
+	@echo works
+EOF
+
+  if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+    SEARCH_RULE='VPATH='
+    SEARCH_SEP=' '
+    AC_MSG_RESULT([VPATH=DIR1 DIR2 ...])
+    break
+  fi
+
+  dnl The second most common method is like above except with the
+  dnl directories separated by colons.
+  cat >maketest <<EOF
+VPATH=$srcdir/config:$srcdir/src:$srcdir/bin
+.c.o:
+	cp $< H5.o
+
+foo: H5.o
+	/bin/rm -f H5.o
+	@echo works
+EOF
+
+  if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+    SEARCH_RULE='VPATH='
+    SEARCH_SEP=':'
+    AC_MSG_RESULT([VPATH=DIR1:DIR2:...])
+    break
+  fi
+
+  dnl pmake uses the construct `.PATH: DIR1 DIR2
+  cat >maketest <<EOF
+.PATH: $srcdir/config $srcdir/src $srcdir/bin
+.c.o:
+	cp $< H5.o
+
+foo: H5.o
+	/bin/rm -f H5.o
+	@echo works
+EOF
+
+  if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+    SEARCH_RULE='.PATH: '
+    SEARCH_SEP=' '
+    AC_MSG_RESULT([.PATH: DIR1 DIR2 ...])
+    break
+  fi
+
+  dnl No way for make to search directories
+  SEARCH_RULE='## SEARCH DISABLED: '
+  SEARCH_SEP=' '
+  AC_MSG_RESULT([it doesn't])
+  if test ! -f configure; then
+    AC_MSG_ERROR([${MAKE-make} requires the build and source directories to be the same])
+  fi
+  break
+done
+rm maketest
+
+dnl ----------------------------------------------------------------------
+dnl Production flags?  Save the value in $CONFIG_MODE so we have it for
+dnl the record.
+dnl
+AC_MSG_CHECKING(for production mode)
+AC_ARG_ENABLE(production,
+              [AC_HELP_STRING([--enable-production],
+                              [Determines how to run the compiler.])])
+
+case "X-$enable_production" in
+  X-|X-yes)
+    enable_production="yes"
+    AC_MSG_RESULT([production])
+
+    dnl Remove the "-g" flag from CFLAGS if it's in there.
+    dnl
+    CFLAGS_temp=""
+    if test -n "$CFLAGS"; then
+      for d in $CFLAGS ; do
+        if test "X$d" != "X-g"; then
+          CFLAGS_temp="$CFLAGS_temp $d"
+        fi
+      done
+      CFLAGS=$CFLAGS_temp
+    fi
+
+    CONFIG_MODE=production
+    CFLAGS="$CFLAGS $PROD_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $PROD_CPPFLAGS"
+    ;;
+  X-no)
+    enable_production="no"
+    AC_MSG_RESULT([development])
+    CONFIG_MODE=development
+    CFLAGS="$CFLAGS $DEBUG_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $DEBUG_CPPFLAGS"
+    ;;
+  X-pg|X-profile)
+    enable_production="profile"
+    AC_MSG_RESULT([profile])
+    CONFIG_MODE=profile
+    CFLAGS="$CFLAGS $PROFILE_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $PROFILE_CPPFLAGS"
+    ;;
+  *)
+    enable_production="user-defined"
+    AC_MSG_RESULT([user-defined])
+    CONFIG_MODE="$X-enableval"
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl Check for system libraries.
+dnl
+AC_CHECK_LIB([m], [ceil])
+
+if test "`uname`" = "SunOS" -o "`uname -sr`" = "HP-UX B.11.00"; then
+  dnl ...for Solaris
+  AC_CHECK_LIB([nsl], [xdr_int])
+fi
+
+dnl AC_CHECK_LIB([coug], [main])		dnl ...for ASCI/Red
+
+dnl ----------------------------------------------------------------------
+dnl Check for system header files.
+dnl
+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
+AC_CHECK_FUNCS(difftime)
+AC_CHECK_FUNCS(gettimeofday, [have_gettime="yes"], [have_gettime="no"])
+
+dnl Unix
+AC_CHECK_HEADERS([sys/resource.h sys/time.h unistd.h sys/ioctl.h sys/stat.h])
+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 Windows
+AC_CHECK_HEADERS([io.h winsock.h sys/timeb.h])
+
+case "$host" in
+  alpha*-dec*-osf*)
+    dnl The <sys/sysinfo.h> and <sys/proc.h> are needed on the DEC
+    dnl Alpha to turn off UAC fixing. We do *not* attempt to
+    dnl locate these files on other systems because there are too
+    dnl many problems with including them.
+    AC_CHECK_HEADERS([sys/sysinfo.h sys/proc.h])
+    ;;
+  mips*-sgi*-irix*)
+    dnl The <sys/fpu.h> is needed on the SGI machines to turn off
+    dnl denormalized floating-point values going to zero.  We do *not*
+    dnl attempt to dnl locate these files on other systems because there
+    dnl may be problems with including them.
+    AC_CHECK_HEADERS([sys/fpu.h])
+    AC_CHECK_FUNCS([get_fpc_csr])
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl Test for 64bit stuff before the data types and their sizes. The
+dnl result could effect the outcome of the sizeof macros below.
+dnl
+case "$host_cpu-$host_vendor-$host_os" in
+  *linux*)
+    dnl ----------------------------------------------------------------------
+    dnl Enable large file support on linux? Store the result in the LINUX_LFS
+    dnl variable for posterity
+    AC_ARG_ENABLE([linux-lfs],
+                  [AC_HELP_STRING([--enable-linux-lfs],
+                                  [Enable support for large (64-bit)
+                                   files on Linux. [default=check]])])
+
+    LINUX_LFS="no"
+    case "X-$enable_linux_lfs" in
+      X-yes)
+        LINUX_LFS=yes
+        ;;
+      X-no)
+        ;;
+      X-|*)
+        MAJOR_VER="`uname -r | cut -d '.' -f1`"
+        MINOR_VER="`uname -r | cut -d '.' -f2`"
+
+        if test ${MAJOR_VER} -gt 2 -o ${MAJOR_VER} -eq 2 -a ${MINOR_VER} -ge 4; then
+          LINUX_LFS="yes"
+        fi
+        ;;
+    esac
+
+    AC_MSG_CHECKING([for large file support mode on Linux])
+    if test "X$LINUX_LFS" = "Xyes"; then
+      AC_MSG_RESULT([enabled])
+      CPPFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE $CPPFLAGS"
+    else
+      AC_MSG_RESULT([disabled])
+    fi
+
+    dnl Add POSIX support on Linux systems, so <features.h> defines
+    dnl __USE_POSIX, which is required to get the prototype for fdopen
+    dnl defined correctly in <stdio.h>
+    CPPFLAGS="-D_POSIX_SOURCE $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>
+    CPPFLAGS="-D_BSD_SOURCE $CPPFLAGS"
+    ;;
+esac
+
+AC_TRY_COMPILE([#include <sys/types.h>],
+               [off64_t n = 0;],
+               [AC_CHECK_FUNCS([lseek64 fseek64])],
+               [AC_MSG_RESULT([skipping test for lseek64() and fseek64()])])
+
+dnl ----------------------------------------------------------------------
+dnl Data types and their sizes.
+dnl
+AC_TYPE_OFF_T
+AC_CHECK_TYPE([size_t], [unsigned long])
+AC_CHECK_TYPE([ssize_t], [long])
+AC_C_BIGENDIAN
+AC_CHECK_SIZEOF([char], [1])
+AC_CHECK_SIZEOF([short], [2])
+AC_CHECK_SIZEOF([int], [4])
+AC_CHECK_SIZEOF([long], [4])
+AC_CHECK_SIZEOF([long long], [8])
+AC_CHECK_SIZEOF([__int64], [8])
+AC_CHECK_SIZEOF([float], [4])
+AC_CHECK_SIZEOF([double], [8])
+AC_CHECK_SIZEOF([long double], [8])
+
+dnl Checkpoint the cache
+AC_CACHE_SAVE
+
+dnl Posix.1g types (C9x)
+cat >>confdefs.h <<\EOF
+#include <sys/types.h>
+EOF
+
+if test "X$C9x" = "Xyes"; then
+  cat >>confdefs.h <<\EOF
+#include <stdint.h>
+EOF
+fi
+
+AC_CHECK_SIZEOF(        int8_t, [1])
+AC_CHECK_SIZEOF(       uint8_t, [1])
+AC_CHECK_SIZEOF(  int_least8_t, [1])
+AC_CHECK_SIZEOF( uint_least8_t, [1])
+AC_CHECK_SIZEOF(   int_fast8_t, [1])
+AC_CHECK_SIZEOF(  uint_fast8_t, [1])
+
+AC_CHECK_SIZEOF(       int16_t, [2])
+AC_CHECK_SIZEOF(      uint16_t, [2])
+AC_CHECK_SIZEOF( int_least16_t, [2])
+AC_CHECK_SIZEOF(uint_least16_t, [2])
+AC_CHECK_SIZEOF(  int_fast16_t, [2])
+AC_CHECK_SIZEOF( uint_fast16_t, [2])
+
+AC_CHECK_SIZEOF(       int32_t, [4])
+AC_CHECK_SIZEOF(      uint32_t, [4])
+AC_CHECK_SIZEOF( int_least32_t, [4])
+AC_CHECK_SIZEOF(uint_least32_t, [4])
+AC_CHECK_SIZEOF(  int_fast32_t, [4])
+AC_CHECK_SIZEOF( uint_fast32_t, [4])
+
+AC_CHECK_SIZEOF(       int64_t, [8])
+AC_CHECK_SIZEOF(      uint64_t, [8])
+AC_CHECK_SIZEOF( int_least64_t, [8])
+AC_CHECK_SIZEOF(uint_least64_t, [8])
+AC_CHECK_SIZEOF(  int_fast64_t, [8])
+AC_CHECK_SIZEOF( uint_fast64_t, [8])
+
+AC_CHECK_SIZEOF([size_t], [4])
+AC_CHECK_SIZEOF([ssize_t], [4])
+
+cat >>confdefs.h <<\EOF
+#include <sys/types.h> /*for off_t definition*/
+EOF
+AC_CHECK_SIZEOF([off_t], [4])
+
+dnl Checkpoint the cache
+AC_CACHE_SAVE
+
+dnl ----------------------------------------------------------------------
+dnl Check if the dev_t type is a scalar type (must come after the check for
+dnl sys/types.h)
+AC_MSG_CHECKING([if dev_t is scalar])
+AC_TRY_COMPILE([
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+  ],
+  [dev_t d1, d2; if(d1==d2) return 0;],
+  AC_DEFINE([DEV_T_IS_SCALAR], [1],
+            [Define if `dev_t' is a scalar])
+  AC_MSG_RESULT(yes),
+  AC_MSG_RESULT(no)
+)
+
+dnl ----------------------------------------------------------------------
+dnl Fake --with-xxx option to allow us to create a help message for the
+dnl following --with-xxx options which can take either a =DIR or =INC,LIB
+dnl specifier.
+dnl
+AC_ARG_WITH([fnord],
+  [
+ For the following --with-xxx options, you can specify where the header
+ files and libraries are in two different ways:
+
+    --with-xxx=INC,LIB - Specify individually the include directory and
+                         library directory separated by a comma
+    --with-xxx=DIR     - Specify only the directory which contains the
+                         include/ and lib/ subdirectories
+  ])
+
+dnl ----------------------------------------------------------------------
+dnl Is the dmalloc present? It has a header file `dmalloc.h' and a library
+dnl `-ldmalloc' and their locations might be specified with the `--with-dmalloc'
+dnl command-line switch. The value is an include path and/or a library path.
+dnl If the library path is specified then it must be preceded by a comma.
+dnl
+AC_ARG_WITH([dmalloc],
+            [AC_HELP_STRING([--with-dmalloc=DIR],
+                            [Use dmalloc memory debugging aid [default=no]])],,
+            withval=no)
+
+case $withval in
+  yes)
+    HAVE_DMALLOC="yes"
+    AC_CHECK_HEADERS(dmalloc.h)
+    AC_CHECK_LIB(dmalloc, dmalloc_shutdown,, unset HAVE_DMALLOC)
+
+    if test -z "$HAVE_DMALLOC" -a -n "$HDF5_CONFIG_ABORT"; then
+      AC_MSG_ERROR(couldn't find dmalloc library)
+    fi
+    ;;
+  no)
+    HAVE_DMALLOC="no"
+    AC_MSG_CHECKING(for dmalloc library)
+    AC_MSG_RESULT(suppressed)
+    ;;
+  *)
+    HAVE_DMALLOC="yes"
+    case "$withval" in
+      *,*)
+        dmalloc_inc="`echo $withval |cut -f1 -d,`"
+        dmalloc_lib="`echo $withval |cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          dmalloc_inc="$withval/include"
+          dmalloc_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+    dnl Trying to include -I/usr/include and -L/usr/lib is redundant and
+    dnl can mess some compilers up.
+    if test "X$dmalloc_inc" = "X/usr/include"; then
+      dmalloc_inc=""
+    fi
+    if test "X$dmalloc_lib" = "X/usr/lib"; then
+      dmalloc_lib=""
+    fi
+
+    saved_CPPFLAGS="$CPPFLAGS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    if test -n "$dmalloc_inc"; then
+      CPPFLAGS="$CPPFLAGS -I$dmalloc_inc"
+    fi
+
+    AC_CHECK_HEADERS(dmalloc.h,, CPPFLAGS="$saved_CPPFLAGS")
+
+    if test -n "$dmalloc_lib"; then
+      LDFLAGS="$LDFLAGS -L$dmalloc_lib"
+    fi
+
+    AC_CHECK_LIB(dmalloc, dmalloc_shutdown,, LDFLAGS="$saved_LDFLAGS"; unset HAVE_DMALLOC)
+
+    if test -z "$HAVE_DMALLOC" -a -n "$HDF5_CONFIG_ABORT"; then
+      AC_MSG_ERROR(couldn't find dmalloc library)
+    fi
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl Is the GNU zlib present? It has a header file `zlib.h' and a library
+dnl `-lz' and their locations might be specified with the `--with-zlib'
+dnl command-line switch. The value is an include path and/or a library path.
+dnl If the library path is specified then it must be preceded by a comma.
+dnl
+AC_SUBST(USE_FILTER_DEFLATE) USE_FILTER_DEFLATE="no"
+AC_ARG_WITH([zlib],
+            [AC_HELP_STRING([--with-zlib=DIR],
+                            [Use zlib library for external deflate I/O
+                             filter [default=yes]])],,
+            withval=yes)
+
+case $withval in
+  yes)
+    HAVE_ZLIB="yes"
+    AC_CHECK_HEADERS([zlib.h], [HAVE_ZLIB_H="yes"])
+    AC_CHECK_LIB([z], [compress2],, [unset HAVE_ZLIB])
+    AC_CHECK_FUNC([compress2], [HAVE_COMPRESS2="yes"])
+
+    if test -z "$HAVE_ZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      AC_MSG_ERROR([couldn't find zlib library])
+    fi
+    ;;
+  no)
+    HAVE_ZLIB="no"
+    AC_MSG_CHECKING([for GNU zlib])
+    AC_MSG_RESULT([suppressed])
+    ;;
+  *)
+    HAVE_ZLIB="yes"
+    case "$withval" in
+      *,*)
+        zlib_inc="`echo $withval |cut -f1 -d,`"
+        zlib_lib="`echo $withval |cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          zlib_inc="$withval/include"
+          zlib_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+    dnl Trying to include -I/usr/include and -L/usr/lib is redundant and
+    dnl can mess some compilers up.
+    if test "X$zlib_inc" = "X/usr/include"; then
+      zlib_inc=""
+    fi
+    if test "X$zlib_lib" = "X/usr/lib"; then
+      zlib_lib=""
+    fi
+
+    saved_CPPFLAGS="$CPPFLAGS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    if test -n "$zlib_inc"; then
+      CPPFLAGS="$CPPFLAGS -I$zlib_inc"
+    fi
+
+    AC_CHECK_HEADERS([zlib.h],
+                     [HAVE_ZLIB_H="yes"],
+                     [CPPFLAGS="$saved_CPPFLAGS"])
+
+    if test -n "$zlib_lib"; then
+      LDFLAGS="$LDFLAGS -L$zlib_lib"
+    fi
+
+    AC_CHECK_LIB([z], [compress2],,
+                 [LDFLAGS="$saved_LDFLAGS"; unset HAVE_ZLIB])
+    AC_CHECK_FUNC([compress2], [HAVE_COMPRESS2="yes"])
+
+    if test -z "$HAVE_ZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      AC_MSG_ERROR([couldn't find zlib library])
+    fi
+    ;;
+esac
+
+if test "x$HAVE_ZLIB" = "xyes" -a "x$HAVE_ZLIB_H" = "xyes" -a "x$HAVE_COMPRESS2" = "xyes"; then
+    AC_DEFINE([HAVE_FILTER_DEFLATE], [1], [Define if support for deflate filter is enabled])
+    USE_FILTER_DEFLATE="yes"
+
+    dnl Add "deflate" to external filter list
+    if test "X$EXTERNAL_FILTERS" != "X"; then
+        EXTERNAL_FILTERS="${EXTERNAL_FILTERS},"
+    fi
+    EXTERNAL_FILTERS="${EXTERNAL_FILTERS}deflate"
+fi
+
+
+dnl ----------------------------------------------------------------------
+dnl Is the szlib present? It has a header file `szlib.h' and a library
+dnl `-lsz' and their locations might be specified with the `--with-szlib'
+dnl command-line switch. The value is an include path and/or a library path.
+dnl If the library path is specified then it must be preceded by a comma.
+dnl
+AC_SUBST(USE_FILTER_SZIP) USE_FILTER_SZIP="no"
+AC_ARG_WITH([szlib],
+            [AC_HELP_STRING([--with-szlib=DIR],
+                            [Use szlib library for external szlib I/O
+                             filter [default=no]])],,
+            withval=no)
+
+case $withval in
+  yes)
+    HAVE_SZLIB="yes"
+    AC_CHECK_HEADERS([szlib.h], [HAVE_SZLIB_H="yes"])
+    AC_CHECK_LIB([sz], [SZ_BufftoBuffCompress],, [unset HAVE_SZLIB])
+
+    if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      AC_MSG_ERROR([couldn't find szlib library])
+    fi
+    ;;
+  no)
+    HAVE_SZLIB="no"
+    AC_MSG_CHECKING([for szlib])
+    AC_MSG_RESULT([suppressed])
+    ;;
+  *)
+    HAVE_SZLIB="yes"
+    case "$withval" in
+      *,*)
+        szlib_inc="`echo $withval |cut -f1 -d,`"
+        szlib_lib="`echo $withval |cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          szlib_inc="$withval/include"
+          szlib_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+    dnl Trying to include -I/usr/include and -L/usr/lib is redundant and
+    dnl can mess some compilers up.
+    if test "X$szlib_inc" = "X/usr/include"; then
+      szlib_inc=""
+    fi
+    if test "X$szlib_lib" = "X/usr/lib"; then
+      szlib_lib=""
+    fi
+
+    saved_CPPFLAGS="$CPPFLAGS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    if test -n "$szlib_inc"; then
+      CPPFLAGS="$CPPFLAGS -I$szlib_inc"
+    fi
+
+    AC_CHECK_HEADERS([szlib.h],
+                     [HAVE_SZLIB_H="yes"],
+                     [CPPFLAGS="$saved_CPPFLAGS"])
+
+    if test -n "$szlib_lib"; then
+      LDFLAGS="$LDFLAGS -L$szlib_lib"
+    fi
+
+    AC_CHECK_LIB([sz], [SZ_BufftoBuffCompress],,
+                 [LDFLAGS="$saved_LDFLAGS"; unset HAVE_SZLIB])
+
+    if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      AC_MSG_ERROR([couldn't find szlib library])
+    fi
+    ;;
+esac
+
+if test "x$HAVE_SZLIB" = "xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then
+    AC_DEFINE(HAVE_FILTER_SZIP, 1,
+            [Define if support for szip filter is enabled])
+    USE_FILTER_SZIP="yes"
+
+    dnl SZLIB library is available.  Check if it can encode
+    AC_MSG_CHECKING([for szlib encoder])
+
+    AC_CACHE_VAL([hdf5_cv_szlib_can_encode],
+        [AC_TRY_RUN([
+        #include <szlib.h>
+
+        int main(void)
+        {
+                /* SZ_encoder_enabled returns 1 if encoder is present */
+            if(SZ_encoder_enabled() == 1)
+                exit(0);
+            else
+                exit(1);
+        }
+        ], [hdf5_cv_szlib_can_encode=yes], [hdf5_cv_szlib_can_encode=no],)])
+
+    if test ${hdf5_cv_szlib_can_encode} = "yes"; then
+        AC_MSG_RESULT([yes])
+    else
+        AC_MSG_RESULT([no])
+    fi
+
+    dnl Add "szip" to external filter list
+    if test "X$EXTERNAL_FILTERS" != "X"; then
+        EXTERNAL_FILTERS="${EXTERNAL_FILTERS},"
+    fi
+    EXTERNAL_FILTERS="${EXTERNAL_FILTERS}szip"
+    if test ${hdf5_cv_szlib_can_encode} = "yes"; then
+        EXTERNAL_FILTERS="${EXTERNAL_FILTERS}(encoder)"
+    else
+        EXTERNAL_FILTERS="${EXTERNAL_FILTERS}(no encoder)"
+    fi
+fi
+
+
+dnl ----------------------------------------------------------------------
+dnl Is SSL library present? It is needed by GLOBUS-GASS and Grid Storage
+dnl driver. SSL must be tested before them.
+dnl
+AC_SUBST([SSL]) SSL=yes
+AC_ARG_WITH([ssl],
+            [AC_HELP_STRING([--with-ssl=LIB],
+                            [Use the SSL library [default=no]])],,
+            withval=no)
+
+case "$withval" in
+   yes)
+      AC_CHECK_LIB([crypto], [main],, [unset SSL])
+      AC_CHECK_LIB([ssl], [SSL_get_version],, [unset SSL])
+      ;;
+   no)
+      AC_MSG_CHECKING([for SSL])
+      AC_MSG_RESULT([suppressed])
+      unset SSL
+      ;;
+   *)
+      saved_LDFLAGS="$LDFLAGS"
+      if test "X$with_ssl" != "X/usr/lib"; then
+        LDFLAGS="$LDFLAGS -L$with_ssl"
+      fi
+      AC_CHECK_LIB([crypto], [main],, [LDFLAGS="$saved_LDFLAGS"; unset SSL])
+      AC_CHECK_LIB([ssl], [SSL_get_version],, [LDFLAGS="$saved_LDFLAGS"; unset SSL])
+      ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl Is GLOBUS-GASS(1.1.0 or 1.1.1) Library present? It is also needed by 
+dnl the Grid Storage driver.
+dnl
+AC_SUBST([GASS]) GASS="yes"
+AC_SUBST([TESTGASS]) TESTGASS='$(srcdir)/testgass'
+AC_ARG_WITH([gass],
+            [AC_HELP_STRING([--with-gass=DIR],
+                            [Use the GASS library [default=no]])],,
+            withval=no)
+
+case "$withval" in
+  yes)
+    AC_CHECK_HEADERS(globus_common.h,,unset GASS TESTGASS)
+    AC_CHECK_LIB(globus_common,globus_module_activate,,unset GASS TESTGASS)
+    AC_CHECK_LIB(globus_gass_cache,main,,unset GASS TESTGASS)
+    AC_CHECK_LIB(globus_gaa,main,,unset GASS TESTGASS)
+    AC_CHECK_LIB(globus_gss,main,,unset GASS TESTGASS)
+    AC_CHECK_LIB(globus_gss_assist,main,,unset GASS TESTGASS)
+    AC_CHECK_LIB(globus_io,main,,unset GASS TESTGASS)
+    AC_CHECK_LIB(globus_gass_transfer_assist,main,,unset GASS TESTGASS)
+    AC_CHECK_LIB(globus_gass_transfer,main,,unset GASS TESTGASS)
+    AC_CHECK_LIB(globus_gass_file,globus_gass_open,,unset GASS TESTGASS)
+    ;;
+  no)
+    AC_MSG_CHECKING([for GASS])
+    AC_MSG_RESULT([suppressed])
+    unset GASS TESTGASS
+    ;;
+  *)
+    case "$withval" in
+      *,*)
+        gass_inc="`echo $withval | cut -f1 -d,`"
+        gass_lib="`echo $withval | cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          gass_inc="$withval/include"
+          gass_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+    dnl Trying to include -I/usr/include and -L/usr/lib is redundant and
+    dnl can mess some compilers up.
+    if test "X$gass_inc" = "X/usr/include"; then
+      gass_inc=""
+    fi
+    if test "X$gass_lib" = "X/usr/lib"; then
+      gass_lib=""
+    fi
+
+    if test -n "$gass_inc"; then
+      saved_CPPFLAGS="$CPPFLAGS"
+      CPPFLAGS="$CPPFLAGS -I$gass_inc"
+      AC_CHECK_HEADERS([globus_common.h],,
+                       CPPFLAGS="$saved_CPPFLAGS"
+                       unset GASS TESTGASS)
+    else
+      AC_CHECK_HEADERS([globus_common.h])
+    fi
+
+    if test -n "$gass_lib"; then
+      saved_LDFLAGS="$LDFLAGS"
+      LDFLAGS="$LDFLAGS -L$gass_lib"
+      AC_CHECK_LIB(globus_common,globus_module_activate,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_gass_cache,main,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_gaa,main,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_gss,main,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_gss_assist,main,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_io,main,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_gass_transfer_assist,main,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_gass_transfer,main,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_gass_file,globus_gass_open,,unset GASS TESTGASS)
+    else
+      AC_CHECK_LIB(globus_common,globus_module_activate,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_gass_cache,main,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_gaa,main,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_gss,main,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_gss_assist,main,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_io,main,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_gass_transfer_assist,main,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_gass_transfer,main,,unset GASS TESTGASS)
+      AC_CHECK_LIB(globus_gass_file,globus_gass_open,,unset GASS TESTGASS)
+    fi
+    ;;
+esac
+
+if test -n "$GASS"; then
+  AC_DEFINE([HAVE_GASS], [1], [Define if the Globus GASS is defined])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Are SRB Client and other system libraries(socket, elf) present?  
+dnl
+AC_SUBST([SRB]) SRB="yes"
+AC_SUBST([TESTSRB]) TESTSRB='$(srcdir)/testsrb'
+AC_ARG_WITH([srb],
+            [AC_HELP_STRING([--with-srb=DIR],
+                            [Use the SRB library [default=no]])],,
+            withval=no)
+
+case "$withval" in
+  yes)
+    AC_CHECK_HEADERS([srbClient.h],, [unset SRB TESTSRB])
+    AC_CHECK_LIB([elf], [main],, [unset SRB TESTSRB])
+    AC_CHECK_LIB([socket], [main],, [unset SRB TESTSRB])
+    AC_CHECK_LIB([SrbClient], [clConnect],, [unset SRB TESTSRB])
+    ;;
+  no)
+    AC_MSG_CHECKING([for SRB])
+    AC_MSG_RESULT([suppressed])
+    unset SRB TESTSRB
+    ;;
+  *)
+    case "$withval" in
+      *,*)
+        srb_inc="`echo $withval | cut -f1 -d,`"
+        srb_lib="`echo $withval | cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          srb_inc="$withval/include"
+          srb_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+    dnl Trying to include -I/usr/include and -L/usr/lib is redundant and
+    dnl can mess some compilers up.
+    if test "X$srb_inc" = "X/usr/include"; then
+      srb_inc=""
+    fi
+    if test "X$srb_lib" = "X/usr/lib"; then
+      srb_lib=""
+    fi
+
+    if test -n "$srb_inc"; then
+      saved_CPPFLAGS="$CPPFLAGS"
+      CPPFLAGS="$CPPFLAGS -I$srb_inc"
+      AC_CHECK_HEADERS(srbClient.h,,
+                       CPPFLAGS="$saved_CPPFLAGS"
+                       unset SRB TESTSRB)
+    else
+      AC_CHECK_HEADERS(srbClient.h)
+    fi
+
+    if test -n "$srb_lib"; then
+      saved_LDFLAGS="$LDFLAGS"
+      LDFLAGS="$LDFLAGS -L$srb_lib"
+      AC_CHECK_LIB(elf,main,,unset SRB TESTSRB)
+      AC_CHECK_LIB(socket,main,,unset SRB TESTSRB)
+      AC_CHECK_LIB(SrbClient,clConnect,,unset SRB TESTSRB)
+    else
+      AC_CHECK_LIB(elf,main,,unset SRB TESTSRB)
+      AC_CHECK_LIB(socket,main,,unset SRB TESTSRB)
+      AC_CHECK_LIB(SrbClient,clConnect,,unset SRB TESTSRB)
+    fi
+    ;;
+esac
+
+if test -n "$SRB"; then
+  AC_DEFINE([HAVE_SRB], [1], [Define if the SRB is defined])
+fi
+
+dnl Checkpoint the cache
+AC_CACHE_SAVE
+
+dnl ----------------------------------------------------------------------
+dnl Is the Pthreads library present?  It has a header file `pthread.h' and
+dnl a library `-lpthread' and their locations might be specified with the
+dnl `--with-pthread' command-line switch.  The value is an include path
+dnl and/or a library path.  If the library path is specified then it must
+dnl be preceded by a comma.
+dnl
+AC_SUBST([PTHREAD]) PTHREAD=yes
+AC_ARG_WITH([pthread],
+            [AC_HELP_STRING([--with-pthread=DIR],
+                            [Use the Pthreads library [default=no]])],,
+            withval=no)
+
+case "$withval" in
+  yes)
+    AC_CHECK_HEADERS([pthread.h])
+    AC_CHECK_LIB([pthread], [pthread_create],, [unset PTHREAD])
+    ;;
+  no)
+    AC_MSG_CHECKING([for pthread])
+    AC_MSG_RESULT([suppressed])
+    unset PTHREAD
+    ;;
+  *)
+    case "$withval" in
+      *,*)
+        pthread_inc="`echo $withval | cut -f1 -d,`"
+        pthread_lib="`echo $withval | cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          pthread_inc="$withval/include"
+          pthread_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+    dnl Trying to include -I/usr/include and -L/usr/lib is redundant and
+    dnl can mess some compilers up.
+    if test "X$pthread_inc" = "X/usr/include"; then
+      pthread_inc=""
+    fi
+    if test "X$pthread_lib" = "X/usr/lib"; then
+      pthread_lib=""
+    fi
+
+    if test -n "$pthread_inc"; then
+      saved_CPPFLAGS="$CPPFLAGS"
+      CPPFLAGS="$CPPFLAGS -I$pthread_inc"
+      AC_CHECK_HEADERS([pthread.h],, [CPPFLAGS="$saved_CPPFLAGS"; unset PTHREAD])
+    else
+      AC_CHECK_HEADERS([pthread.h],, [unset PTHREAD])
+    fi
+
+    if test -n "$pthread_lib"; then
+      saved_LDFLAGS="$LDFLAGS"
+      LDFLAGS="$LDFLAGS -L$pthread_lib"
+      AC_CHECK_LIB([pthread], [pthread_create],,
+                   [LDFLAGS="$saved_LDFLAGS"; unset PTHREAD])
+    else
+      AC_CHECK_LIB([pthread], [pthread_create],, [unset PTHREAD])
+    fi
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl Enable thread-safe version of library.  It requires Pthreads support.
+dnl
+AC_MSG_CHECKING([for thread safe support])
+AC_ARG_ENABLE([threadsafe],
+              [AC_HELP_STRING([--enable-threadsafe],
+                              [Enable thread safe capability])],
+              THREADSAFE=$enableval)
+
+case "X-$THREADSAFE" in
+  X-|X-no)
+    AC_MSG_RESULT([no])
+    ;;
+  X-yes)
+    dnl Check that we can link a simple Pthread program.
+    AC_TRY_LINK(, [pthread_create()],
+                [AC_MSG_RESULT([yes]); THREADSAFE=yes],
+                [AC_MSG_ERROR([needed pthread library not available])])
+    ;;
+  *)
+    AC_MSG_RESULT([error])
+    AC_MSG_ERROR([\'$enableval\' is not a valid threadsafe type])
+    ;;
+esac
+
+if test "X$THREADSAFE" = "Xyes"; then
+  AC_DEFINE([HAVE_THREADSAFE], [1], [Define if we have thread safe support])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Check if they would like the HDF5 v1.4 compatibility functions
+dnl compiled in
+dnl
+AC_MSG_CHECKING([whether HDF5 v1.4 compatibility functions enabled])
+AC_ARG_ENABLE([hdf5v1_4],
+              [AC_HELP_STRING([--enable-hdf5v1_4],
+                              [Compile the HDF5 v1.4 compatibility
+                               interface [default=no]])],
+              [HDF5_V1_4_COMPAT=$enableval])
+
+if test "$HDF5_V1_4_COMPAT" = "yes"; then
+  AC_MSG_RESULT([yes])
+  AC_DEFINE([WANT_H5_V1_4_COMPAT], [1],
+            [Define if the HDF5 v1.4 compatibility functions are to be compiled in])
+else
+  AC_MSG_RESULT([no])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Should the Stream Virtual File Driver be compiled in ?
+dnl
+AC_MSG_CHECKING([for Stream Virtual File Driver support])
+AC_ARG_ENABLE([stream-vfd],
+              [AC_HELP_STRING([--enable-stream-vfd],
+                              [Build the Stream Virtual File Driver
+                               [default=yes]])],
+              [STREAM_VFD=$enableval],
+              [STREAM_VFD=yes])
+
+if test "$STREAM_VFD" = "yes"; then
+  AC_MSG_RESULT([yes])
+  AC_CHECK_HEADERS([netinet/in.h])
+  AC_CHECK_HEADERS([netinet/tcp.h], , , [#include <netinet/in.h>])
+  AC_CHECK_HEADERS([sys/filio.h])
+  AC_DEFINE([HAVE_STREAM], [1],
+            [Define if the stream virtual file driver should be compiled])
+
+  dnl Check if 'socklen_t' available
+  AC_MSG_CHECKING([if socklen_t is defined])
+  AC_TRY_COMPILE([
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+  ],
+    [socklen_t foo; return 0;],
+    AC_DEFINE([HAVE_SOCKLEN_T], 1, [Define if `socklen_t' is defined])
+    AC_MSG_RESULT([yes]),
+    AC_MSG_RESULT([no])
+  )
+else
+  AC_MSG_RESULT([not configured])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl How does one figure out the local time zone?  Anyone know of a
+dnl Posix way to do this?
+dnl
+
+dnl First check if `struct tm' has a `tm_gmtoff' member.
+AC_MSG_CHECKING([for tm_gmtoff in struct tm])
+AC_TRY_COMPILE([
+#include <sys/time.h>
+#include <time.h>], [struct tm tm; tm.tm_gmtoff=0;],
+AC_DEFINE([HAVE_TM_GMTOFF], [1],
+          [Define if `tm_gmtoff' is a member of `struct tm'])
+AC_MSG_RESULT([yes]),
+AC_MSG_RESULT([no]))
+
+dnl check if `struct tm' has a `__tm_gmtoff' member.
+AC_MSG_CHECKING([for __tm_gmtoff in struct tm])
+AC_TRY_COMPILE([
+#include <sys/time.h>
+#include <time.h>], [struct tm tm; tm.__tm_gmtoff=0;],
+AC_DEFINE([HAVE___TM_GMTOFF], [1],
+          [Define if `__tm_gmtoff' is a member of `struct tm'])
+AC_MSG_RESULT([yes]),
+AC_MSG_RESULT([no]))
+
+dnl Check whether the global variable `timezone' is defined.
+AC_MSG_CHECKING([for global timezone variable])
+AC_TRY_LINK([
+#include <sys/time.h>
+#include <time.h>], [timezone=0;],
+AC_DEFINE([HAVE_TIMEZONE], [1],
+          [Define if `timezone' is a global variable])
+AC_MSG_RESULT([yes]),
+AC_MSG_RESULT([no]))
+
+dnl Check whether `struct timezone' is defined.
+AC_STRUCT_TIMEZONE
+AC_MSG_CHECKING([for struct timezone])
+AC_TRY_COMPILE([
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>], [struct timezone tz; tz.tz_minuteswest=0;],
+AC_DEFINE([HAVE_STRUCT_TIMEZONE], [1],
+          [Define if `struct timezone' is defined])
+have_struct_tz="yes"
+AC_MSG_RESULT([yes]),
+AC_MSG_RESULT([no]))
+
+dnl If gettimeofday() is going to be used, make sure it uses the timezone struct
+
+if test "$have_gettime" = "yes" -a "$have_struct_tz" = "yes"; then
+   AC_MSG_CHECKING(whether gettimeofday() gives timezone)
+   AC_CACHE_VAL([hdf5_cv_gettimeofday_tz],
+       [AC_TRY_RUN([
+          #include <time.h>
+          #include <sys/time.h>
+          int main(void)
+          {
+             struct timeval tv;
+             struct timezone tz;
+             tz.tz_minuteswest = 7777;  /* Initialize to an unreasonable number */
+             tz.tz_dsttime = 7;
+             gettimeofday(&tv, &tz);
+                /* Check whether the function returned any value at all */
+             if(tz.tz_minuteswest == 7777 && tz.tz_dsttime == 7)
+                exit(1);
+             else exit (0);
+          }], [hdf5_cv_gettimeofday_tz=yes], [hdf5_cv_gettimeofday_tz=no],)])
+
+   if test ${hdf5_cv_gettimeofday_tz} = "yes"; then
+      AC_MSG_RESULT([yes])
+      AC_DEFINE([GETTIMEOFDAY_GIVES_TZ], [1],
+                [Define if gettimeofday() populates the tz pointer passed in])
+   else
+      AC_MSG_RESULT([no])
+   fi
+fi 
+
+dnl ----------------------------------------------------------------------
+dnl Does the struct stat have the st_blocks field?  This field is not Posix.
+dnl
+AC_MSG_CHECKING([for st_blocks in struct stat])
+AC_TRY_COMPILE([
+#include <sys/stat.h>],[struct stat sb; sb.st_blocks=0;],
+AC_DEFINE([HAVE_STAT_ST_BLOCKS], [1],
+          [Define if `struct stat' has the `st_blocks' field])
+AC_MSG_RESULT([yes]),
+AC_MSG_RESULT([no]))
+
+dnl ----------------------------------------------------------------------
+dnl How do we figure out the width of a tty in characters?
+dnl
+AC_CHECK_FUNCS(_getvideoconfig gettextinfo GetConsoleScreenBufferInfo)
+AC_CHECK_FUNCS(_scrsize ioctl)
+
+AC_MSG_CHECKING([for struct videoconfig])
+AC_TRY_COMPILE(,[struct videoconfig w; w.numtextcols=0;],
+AC_DEFINE([HAVE_STRUCT_VIDEOCONFIG], [1],
+          [Define if `struct videoconfig' is defined])
+AC_MSG_RESULT([yes]),
+AC_MSG_RESULT([no]))
+
+AC_MSG_CHECKING([for struct text_info])
+AC_TRY_COMPILE(, [struct text_info w; w.screenwidth=0;],
+AC_DEFINE([HAVE_STRUCT_TEXT_INFO], [1],
+          [Define if `struct text_info' is defined])
+AC_MSG_RESULT([yes]),
+AC_MSG_RESULT([no]))
+
+AC_MSG_CHECKING([for TIOCGWINSZ])
+AC_TRY_COMPILE([#include <sys/ioctl.h>],[int w=TIOCGWINSZ;],
+AC_DEFINE([HAVE_TIOCGWINSZ], [1],
+          [Define if the ioctl TIOGWINSZ is defined])
+AC_MSG_RESULT([yes]),
+AC_MSG_RESULT([no]))
+
+AC_MSG_CHECKING([for TIOCGETD])
+AC_TRY_COMPILE([#include <sys/ioctl.h>],[int w=TIOCGETD;],
+AC_DEFINE([HAVE_TIOCGETD], [1],
+          [Define if the ioctl TIOCGETD is defined])
+AC_MSG_RESULT([yes]),
+AC_MSG_RESULT([no]))
+
+
+dnl ----------------------------------------------------------------------
+dnl Check for functions.
+dnl
+AC_CHECK_FUNCS(alarm fork frexpf frexpl gethostname getpwuid getrusage)
+AC_CHECK_FUNCS(BSDgettimeofday longjmp setsysinfo sigaction)
+AC_CHECK_FUNCS(signal snprintf vsnprintf strdup system waitpid)
+
+dnl ----------------------------------------------------------------------
+dnl Check compiler characteristics
+dnl
+AC_C_CONST
+AC_C_INLINE
+
+AC_MSG_CHECKING([for __attribute__ extension])
+AC_TRY_COMPILE(,[int __attribute__((unused)) x],
+               AC_DEFINE([HAVE_ATTRIBUTE], [1],
+                         [Define if the __attribute__(()) extension is present])
+               AC_MSG_RESULT([yes]),
+               AC_MSG_RESULT([no]))
+
+AC_MSG_CHECKING([for __FUNCTION__ extension])
+AC_TRY_COMPILE(,[(void)__FUNCTION__],
+               AC_DEFINE([HAVE_FUNCTION], [1],
+                         [Define if the compiler understand the __FUNCTION__ keyword])
+               AC_MSG_RESULT([yes]),
+               AC_MSG_RESULT([no]))
+
+dnl ----------------------------------------------------------------------
+dnl Try to figure out how to print `long long'.  Some machines use `%lld'
+dnl and others use `%qd'.  There may be more!  The final `l' is a
+dnl default in case none of the others work.
+dnl Need to patch up LD_LIBRARY_PATH so that the execution can find all
+dnl the dynamic library.  The correct way to do it should be updating
+dnl LD_LIBRARY_PATH along with LDFLAGS or do it with the AC_TRY_RUN macro.
+dnl
+AC_MSG_CHECKING([how to print long long])
+AC_CACHE_VAL([hdf5_cv_printf_ll],
+LD_LIBRARY_PATH="$LD_LIBRARY_PATH`echo $LDFLAGS | sed -e 's/-L/:/g' -e 's/ //g'`"
+export LD_LIBRARY_PATH
+
+for hdf5_cv_printf_ll in l ll L q unknown; do
+   AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int main(void)
+{
+	char *s = malloc(128);
+	long long x = (long long)1048576 * (long long)1048576;
+	sprintf(s,"%${hdf5_cv_printf_ll}d",x);
+	exit(strcmp(s,"1099511627776"));
+}
+   ], break,,continue)
+done)dnl
+
+AC_MSG_RESULT([%${hdf5_cv_printf_ll}d and %${hdf5_cv_printf_ll}u])
+AC_DEFINE_UNQUOTED([PRINTF_LL_WIDTH], ["$hdf5_cv_printf_ll"], 
+                   [Width for printf() for type `long long' or `__int64', use `ll'])
+
+dnl ----------------------------------------------------------------------
+dnl Check if pthread_attr_setscope(&attribute, PTHREAD_SCOPE_SYSTEM)
+dnl is supported on this system
+dnl
+AC_MSG_CHECKING([Threads support system scope])
+AC_CACHE_VAL([hdf5_cv_system_scope_threads],
+[AC_TRY_RUN([
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <pthread.h>
+#endif
+
+int main(void)
+{
+    pthread_attr_t attribute;
+    int ret;
+
+    pthread_attr_init(&attribute);
+    ret=pthread_attr_setscope(&attribute, PTHREAD_SCOPE_SYSTEM);
+    exit(ret==0 ? 0 : 1);
+}
+], [hdf5_cv_system_scope_threads=yes], [hdf5_cv_system_scope_threads=no],)])
+
+if test ${hdf5_cv_system_scope_threads} = "yes"; then
+  AC_DEFINE([SYSTEM_SCOPE_THREADS], [1],
+            [Define if your system supports pthread_attr_setscope(&attribute, PTHREAD_SCOPE_SYSTEM) call.])
+  AC_MSG_RESULT([yes])
+else
+  AC_MSG_RESULT([no])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Checking to see if GPFS is available on this filesystem
+dnl
+AC_ARG_ENABLE([gpfs],
+              [AC_HELP_STRING([--enable-gpfs],
+                              [Enable GPFS hints for the MPI/POSIX file
+                               driver. [default=no]])],,
+              [enableval=no])
+
+case "X-$enableval" in
+  X-yes)
+    AC_CHECK_HEADERS([gpfs.h],
+                     AC_MSG_CHECKING([for GPFS support])
+                     AC_TRY_COMPILE([#include <gpfs.h>],
+                                    [int fd = 0; gpfs_fcntl(fd, (void *)0);],
+                                    AC_DEFINE(HAVE_GPFS, 1,
+                                              [Define if we have GPFS support])
+                                    AC_MSG_RESULT([yes])
+                                    LIBS="$LIBS -lgpfs"
+                                    GPFS="yes",
+                                    AC_MSG_RESULT([no])
+                                    GPFS="no"))
+    ;;
+  X-no|*)
+    AC_MSG_CHECKING([for gpfs])
+    AC_MSG_RESULT([suppressed])
+    ;;
+esac
+   
+dnl ----------------------------------------------------------------------
+dnl Turn on debugging by setting compiler flags
+dnl
+AC_MSG_CHECKING(for debug flags)
+AC_ARG_ENABLE([debug],
+              [AC_HELP_STRING([--enable-debug=all],
+                              [Turn on debugging in all packages. One may
+                               also specify a comma-separated list of
+                               package names without the leading H5 or
+                               the word no. The default is most
+                               packages.])],
+              [DEBUG_PKG=$enableval])
+
+AC_SUBST([DEBUG_PKG])
+all_packages="ac,b,d,e,f,g,hg,hl,i,mf,mm,o,p,s,t,v,z"
+case "X-$DEBUG_PKG" in
+  X-yes)
+    DEBUG_PKG="d,e,f,g,hg,i,mm,o,p,s,t,v,z"
+    CPPFLAGS="$CPPFLAGS -UNDEBUG"
+    AC_MSG_RESULT([default ($DEBUG_PKG)])
+    ;;
+  X-all)
+    DEBUG_PKG=$all_packages
+    CPPFLAGS="$CPPFLAGS -UNDEBUG"
+    AC_MSG_RESULT([all ($DEBUG_PKG)])
+    ;;
+  X-|X-no|X-none)
+    AC_MSG_RESULT([none])
+    DEBUG_PKG=
+    CPPFLAGS="$CPPFLAGS -DNDEBUG"
+    ;;
+  *)
+    AC_MSG_RESULT([$DEBUG_PKG])
+    ;;
+esac
+
+if test -n "$DEBUG_PKG"; then
+  for pkg in `echo $DEBUG_PKG | ${TR} 'a-z,' 'A-Z '`; do
+    CPPFLAGS="$CPPFLAGS -DH5${pkg}_DEBUG"
+  done
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Check if they would like the function stack support compiled in
+dnl
+AC_MSG_CHECKING([whether function stack tracking is enabled])
+AC_ARG_ENABLE([funcstack],
+              [AC_HELP_STRING([--enable-funcstack],
+                              [Enable the function stack tracing.
+                               Default=no if debug is disabled.])],
+              [FUNCSTACK=$enableval])
+
+dnl Default to no if debug is disabled
+if test "X-$FUNCSTACK" = X- ; then
+  if test -z "$DEBUG_PKG" ; then
+    FUNCSTACK=no
+  else
+    FUNCSTACK=yes
+  fi
+fi
+case "X-$FUNCSTACK" in
+  X-|X-yes)
+      FUNCSTACK="yes"
+      AC_MSG_RESULT([yes])
+      AC_DEFINE([HAVE_FUNCSTACK], [1],
+                [Define if the function stack tracing code is to be compiled in])
+    ;;
+  *)
+      AC_MSG_RESULT([no])
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl Enable tracing of the API
+dnl This must come after the enable-debug since it depends on debug.
+dnl
+AC_SUBST([TRACE_API])
+AC_MSG_CHECKING([for API tracing]);
+AC_ARG_ENABLE([trace],
+              [AC_HELP_STRING([--enable-trace],
+                              [Enable API tracing capability. Default=no
+                               if debug is disabled.])],
+              TRACE=$enableval)
+
+dnl Default to no if debug is disabled
+if test "X-$TRACE" = X- ; then
+  if test -z "$DEBUG_PKG" ; then
+    TRACE=no
+  else
+    TRACE=yes
+  fi
+fi
+
+case "X-$TRACE" in
+  X-yes)
+    AC_MSG_RESULT([yes])
+    TRACE_API=yes
+    CPPFLAGS="$CPPFLAGS -DH5_DEBUG_API"
+    ;;
+  X-no|*)
+    AC_MSG_RESULT([no])
+    TRACE_API=no
+    CPPFLAGS="$CPPFLAGS -UH5_DEBUG_API"
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl Enable instrumenting of the library's internal operations
+dnl This must come after the enable-debug since it depends on debug.
+dnl
+AC_SUBST([INSTRUMENT_LIBRARY])
+AC_MSG_CHECKING([for instrumented library]);
+AC_ARG_ENABLE([instrument],
+              [AC_HELP_STRING([--enable-instrument],
+                              [Enable library instrumentation of optimization
+                                tracing.  Default=no if debug is disabled.])],
+              INSTRUMENT=$enableval)
+
+dnl Default to no if debug is disabled
+if test "X-$INSTRUMENT" = X- ; then
+  if test -z "$DEBUG_PKG" ; then
+    INSTRUMENT=no
+  else
+    INSTRUMENT=yes
+  fi
+fi
+
+case "X-$INSTRUMENT" in
+  X-yes)
+    AC_MSG_RESULT([yes])
+    INSTRUMENT_LIBRARY=yes
+    AC_DEFINE([HAVE_INSTRUMENTED_LIBRARY], [1],
+              [Define if library will contain instrumentation to detect correct optimization operation])
+    ;;
+  X-no|*)
+    AC_MSG_RESULT([no])
+    INSTRUMENT_LIBRARY=no
+    ;;
+esac
+
+dnl Checkpoint the cache
+AC_CACHE_SAVE
+
+dnl ----------------------------------------------------------------------
+dnl The following variables are used to distinguish between building a
+dnl serial and parallel library.
+dnl
+dnl    HAVE_PARALLEL	-- defined in H5config.h if we are building
+dnl			   a parallel library even if configure wasn't
+dnl			   able to find some header file or library that
+dnl			   might be required. This is defined if the
+dnl			   compiler looks like a parallel compiler (e.g.,
+dnl			   mpicc or mpcc) or if the user explicitly states
+dnl			   that a parallel library is being built by supplying
+dnl			   the `--enable-parallel' configure switch.
+dnl
+dnl    PARALLEL		-- This variable is set to a non-null value if
+dnl			   configure thinks we're compiling a parallel
+dnl			   version of the library.
+dnl
+dnl    RUNSERIAL	-- This is a command which will be prepended to
+dnl			   the executable name to run the executable using
+dnl			   a single process. For serial versions of the
+dnl			   library this will normally be empty. For parallel
+dnl			   versions it might be something like `mpirun -np 1'.
+dnl			   The value of this variable is substituted in *.in
+dnl			   files.
+dnl
+dnl    RUNPARALLEL	-- This is a command which will be prepended to
+dnl			   the executable name to run the executable on
+dnl			   multiple processors. For the serial library the
+dnl			   value will normally be the empty string. For
+dnl			   parallel library it should be something like
+dnl			   `mpi -np $$NPROCS' where NPROCS will eventually
+dnl			   contain the number of processors on which to run
+dnl			   the executable (the double dollarsigns are to
+dnl			   protect the expansion until make executes the
+dnl			   command).  The value of this variable is
+dnl			   substituted in *.in files.
+dnl
+AC_SUBST([PARALLEL])
+AC_SUBST([RUNSERIAL])
+AC_SUBST([RUNPARALLEL])
+AC_SUBST([TESTPARALLEL])
+
+dnl ----------------------------------------------------------------------
+dnl If the compiler is obviously a parallel compiler then we're building
+dnl a parallel version of hdf5 and should define HAVE_PARALLEL. Furthermore,
+dnl the name of the compiler might tell us how to run the resulting
+dnl executable. For `mpicc' the executable should be run with `mpirun' from
+dnl the same directory as mpicc if it exists.
+dnl
+case "$CC_BASENAME" in
+  mpicc)
+    dnl The mpich compiler. Use mpirun from the same directory if it
+    dnl exists.
+    PARALLEL=mpicc
+    AC_MSG_CHECKING([for mpirun])
+
+    dnl Find the path where mpicc is located.
+    cmd="`echo $CC | cut -f1 -d' '`"
+    if (echo $cmd | grep / >/dev/null); then
+      path="`echo $cmd | sed 's/\(.*\)\/.*$/\1/'`"
+    else
+      for path in `echo $PATH | ${TR} : ' '`; do
+        if test -x $path/$cmd; then
+          break
+        fi
+      done
+    fi
+
+    dnl Is there an mpirun at that path?
+    if test -x $path/mpirun; then
+      AC_MSG_RESULT([$path/mpirun])
+      RUNSERIAL="${RUNSERIAL:-none}"
+
+      if test -z "$RUNPARALLEL"; then
+        RUNPARALLEL="$path/mpirun -np \$\${NPROCS:=3}"
+      fi
+    else
+      AC_MSG_RESULT([none])
+    fi
+    ;;
+
+  hcc)
+    dnl The LAM compiler. Use mpirun_lam or mpirun from the same directory
+    dnl if it exists.
+    PARALLEL=hcc
+    AC_MSG_CHECKING([for mpirun_lam or mpirun])
+
+    dnl Find the path where hcc is located
+    cmd="`echo $CC | cut -f1 -d' '`"
+    if (echo $cmd | grep / >/dev/null); then
+      path="`echo $cmd | sed 's/\(.*\)\/.*$/\1/'`"
+    else
+      for path in `echo $PATH | ${TR} : ' '`; do
+        if test -x $path/$cmd; then
+          break
+        fi
+      done
+    fi
+
+    dnl Is there an mpirun_lam or mpirun at that path?
+    if test -x $path/mpirun_lam -o -x $path/mpirun; then
+      if test -x $path/mpirun_lam; then
+        cmd=mpirun_lam
+      else
+        cmd=mpirun
+      fi
+      AC_MSG_RESULT([$path/$cmd])
+      RUNSERIAL="${RUNSERIAL:-none}"
+      if test -z "$RUNPARALLEL"; then
+        RUNPARALLEL="$path/$cmd -np \$\${NPROCS:=3}"
+      fi
+    else
+      AC_MSG_RESULT([none])
+    fi
+    ;;
+
+  mpcc|mpcc_r)
+    dnl The IBM compiler
+    PARALLEL="$CC_BASENAME"
+    ;;
+
+  *)
+    dnl Probably not a parallel compiler, but if `--enable-parallel'
+    dnl is defined below then we're still building a parallel hdf5.
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl What header files and libraries do we have to look for for parallel
+dnl support?  For the most part, search paths are already specified with
+dnl CPPFLAGS and LDFLAGS or are known to the compiler.  If the user says
+dnl `--disable-parallel' but specifies a known parallel compiler (like mpicc
+dnl or mpcc) then parallel support is enabled but configure doesn't search
+dnl for any parallel header files or libraries.
+dnl
+AC_ARG_ENABLE([parallel],
+              [AC_HELP_STRING([--enable-parallel],
+                              [Search for MPI-IO and MPI support files])])
+
+AC_MSG_CHECKING([for parallel support files])
+case "X-$enable_parallel" in
+  X-|X-no|X-none)
+    dnl Either we are not compiling for parallel or the header and
+    dnl library files and locations are known to the compiler (this is
+    dnl the case for a correct installation of mpicc for instance).
+    AC_MSG_RESULT([skipped])
+    ;;
+
+  X-yes)
+    dnl We want to compile a parallel library with a compiler that
+    dnl may already know how to link with MPI and MPI-IO.
+    AC_MSG_RESULT([provided by compiler])
+    PARALLEL=yes
+
+    dnl Try link a simple MPI program.  If fail, try again with -lmpi and
+    dnl -lmpich.
+    AC_TRY_LINK(, MPI_Init(),, \
+	AC_CHECK_LIB(mpi, MPI_Init,, \
+	    AC_CHECK_LIB(mpich, MPI_Init,, PARALLEL=no)))
+
+    dnl Then try link a simple MPI-IO program. If fail, try again with
+    dnl -lmpio.
+    if test "X$PARALLEL" = "Xyes"; then
+      AC_TRY_LINK(, [MPI_File_open()],,
+                  [AC_CHECK_LIB([mpio], [MPI_File_open],, [PARALLEL=no])])
+    fi
+
+    dnl Set RUNPARALLEL to mpirun if not set yet.
+    if test "X$PARALLEL" = "Xyes" -a -z "$RUNPARALLEL"; then
+      RUNPARALLEL="mpirun -np \$\${NPROCS:=3}"
+    fi
+    ;;
+
+  *)
+    AC_MSG_RESULT([error])
+    AC_MSG_ERROR([\'$enable_parallel\' is not a valid parallel search type])
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl Print some other parallel information and do some sanity checks.
+dnl
+if test -n "$PARALLEL"; then
+  dnl Ensure that user isn't trying to build both C++ and parallel;
+  dnl this isn't supported.
+  if test "X$HDF_CXX" = "Xyes"; then
+    AC_MSG_ERROR([enable-cxx is incompatible with parallel library])
+  fi
+
+  dnl The 'testpar' directory should participate in the build
+  TESTPARALLEL=testpar
+
+  dnl We are building a parallel library
+  AC_DEFINE([HAVE_PARALLEL], [1], [Define if we have parallel support])
+
+  dnl Display what we found about running programs
+  AC_MSG_CHECKING([prefix for running on one processor])
+  AC_MSG_RESULT([$RUNSERIAL])
+  AC_MSG_CHECKING([prefix for running in parallel])
+  AC_MSG_RESULT([$RUNPARALLEL])
+
+  dnl Check that we can link a simple MPI and MPI-IO application
+  AC_MSG_CHECKING([whether a simple MPI-IO program can be linked])
+  AC_TRY_LINK(, [MPI_Init(); MPI_File_open();],
+              AC_MSG_RESULT([yes]),
+              AC_MSG_RESULT([no])
+              AC_MSG_ERROR([unable to link a simple MPI-IO application]))
+
+  dnl There *must* be some way to run in parallel even if it's just the
+  dnl word `none'.
+  if test -z "$RUNPARALLEL"; then
+    AC_MSG_ERROR([no way to run a parallel program])
+  fi
+
+  dnl If RUNSERIAL or RUNPARALLEL is the word `none' then replace it with
+  dnl the empty string.
+  if test "X$RUNSERIAL" = "Xnone"; then
+    RUNSERIAL=""
+  fi
+  if test "X$RUNPARALLEL" = "Xnone"; then
+    RUNPARALLEL=""
+  fi
+
+  dnl --------------------------------------------------------------------
+  dnl Do we want MPE instrumentation feature on?
+  dnl
+  dnl This must be done after enable-parallel is checked since it depends
+  dnl on a mpich compiler.
+  dnl
+  AC_SUBST([MPE]) MPE=yes
+  AC_ARG_WITH([mpe],
+              [AC_HELP_STRING([--with-mpe=DIR],
+                              [Use MPE instrumentation [default=no]])],,
+              [withval=no])
+
+  case "X-$withval" in
+    X-|X-no|X-none)
+      AC_MSG_CHECKING([for MPE])
+      AC_MSG_RESULT([suppressed])
+      unset MPE
+      ;;
+    X-yes)
+      AC_CHECK_HEADERS([mpe.h],, [unset MPE])
+      AC_CHECK_LIB([mpe], [MPE_Init_log],, [unset MPE])
+      AC_CHECK_LIB([lmpe], [CLOG_Init],, [unset MPE])
+      ;;
+    *)
+      case "$withval" in
+        *,*)
+          mpe_inc="`echo $withval | cut -f1 -d,`"
+          mpe_lib="`echo $withval | cut -f2 -d, -s`"
+          ;;
+        *)
+          if test -n "$withval"; then
+            mpe_inc="$withval/include"
+            mpe_lib="$withval/lib"
+          fi
+          ;;
+      esac
+  
+      dnl Trying to include -I/usr/include and -L/usr/lib is redundant and
+      dnl can mess some compilers up.
+      if test "X$mpe_inc" = "X/usr/include"; then
+        mpe_inc=""
+      fi
+      if test "X$mpe_lib" = "X/usr/lib"; then
+        mpe_lib=""
+      fi
+  
+      if test -n "$mpe_inc"; then
+        saved_CPPFLAGS="$CPPFLAGS"
+        CPPFLAGS="$CPPFLAGS -I$mpe_inc"
+        AC_CHECK_HEADERS([mpe.h],, [CPPFLAGS="$saved_CPPFLAGS"; unset MPE])
+      else
+        AC_CHECK_HEADERS([mpe.h],, [unset MPE])
+      fi
+  
+      if test -n "$mpe_lib"; then
+        saved_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -L$mpe_lib"
+        AC_CHECK_LIB([mpe], [MPE_Init_log],,
+                     [LDFLAGS="$saved_LDFLAGS"; unset MPE])
+        AC_CHECK_LIB([lmpe], [CLOG_Init],,
+                     [LDFLAGS="$saved_LDFLAGS"; unset MPE])
+      else
+        AC_CHECK_LIB([mpe], [MPE_Init_log],, [unset MPE])
+        AC_CHECK_LIB([lmpe], [CLOG_Init],, [unset MPE])
+      fi
+      ;;
+  esac
+
+  if test "X-$MPE" = "X-yes"; then
+    AC_DEFINE([HAVE_MPE], [1], [Define if we have MPE support])
+  fi
+
+  dnl ----------------------------------------------------------------------
+  dnl Set the flag to indicate that the MPI_File_set_size() function
+  dnl works with files over 2GB, unless it's already set in the cache.
+  dnl (This flag should be set for all machines, except for ASCI Red, where
+  dnl the cache value is set in it's config file)
+  dnl
+  AC_MSG_CHECKING([if MPI_File_set_size works for files over 2GB])
+  AC_CACHE_VAL([hdf5_cv_mpi_file_set_size_big], [hdf5_cv_mpi_file_set_size_big=yes])
+  
+  if test ${hdf5_cv_mpi_file_set_size_big} = "yes"; then
+    AC_DEFINE([MPI_FILE_SET_SIZE_BIG], [1],
+              [Define if your system's `MPI_File_set_size' function works for files over 2GB.])
+    AC_MSG_RESULT([yes])
+  else
+    AC_MSG_RESULT([no])
+  fi
+  
+
+dnl ----------------------------------------------------------------------
+dnl Check to see whether the complicate MPI derived datatype works. 
+dnl Up to now(Dec. 20th, 2004), we find that IBM's MPIO implemention doesn't
+dnl handle with the displacement of the complicate MPI type derived datatype 
+dnl correctly. So we add the check here.
+AC_MSG_CHECKING([if irregular hyperslab optimization code works inside MPI-IO])
+
+AC_CACHE_VAL([hdf5_mpi_complex_derived_datatype_works],[hdf5_mpi_complex_derived_datatype_works=yes])
+
+if test ${hdf5_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
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Turn on internal I/O filters by setting macros in header files
+dnl Internal I/O filters are contained entirely within the library and do
+dnl not depend on external headers or libraries.  The shuffle filter is
+dnl an example of an internal filter, while the gzip filter is an example of
+dnl an external filter.  Each external filter is controlled with an
+dnl "--with-foo=" configure flag.
+dnl
+AC_SUBST([FILTERS])
+AC_SUBST(USE_FILTER_SHUFFLE) USE_FILTER_SHUFFLE="no"
+AC_SUBST(USE_FILTER_FLETCHER32) USE_FILTER_FLETCHER32="no"
+AC_MSG_CHECKING([for I/O filters])
+AC_ARG_ENABLE([filters],
+              [AC_HELP_STRING([--enable-filters=all],
+                              [Turn on all internal I/O filters. One may
+                               also specify a comma-separated list of filters
+                               or the word no.  The default is all internal
+                               I/O filters.])],
+              [FILTERS=$enableval])
+
+dnl Eventually: all_filters="shuffle,foo,bar,baz"
+all_filters="shuffle,fletcher32"
+case "X-$FILTERS" in
+  X-|X-all)
+    FILTERS=$all_filters
+    AC_MSG_RESULT([all ($FILTERS)])
+    ;;
+  X-no|X-none)
+    AC_MSG_RESULT([none])
+    FILTERS="none"
+    ;;
+  *)
+    AC_MSG_RESULT([$FILTERS])
+    ;;
+esac
+
+if test -n "$FILTERS"; then
+  for filter in `echo $FILTERS | ${TR} 'a-z,' 'A-Z '`; do
+    dnl ------------------------------------------------------------------
+    dnl Have to use separate 'if' construct for each filter, so that
+    dnl autoheader can detect the AC_DEFINE for each one...
+    dnl
+    if test $filter = "SHUFFLE"; then
+      AC_DEFINE([HAVE_FILTER_SHUFFLE], [1],
+                [Define if support for shuffle filter is enabled])
+      USE_FILTER_SHUFFLE="yes"
+    fi
+    if test $filter = "FLETCHER32"; then
+      AC_DEFINE([HAVE_FILTER_FLETCHER32], [1],
+                [Define if support for Fletcher32 checksum is enabled])
+      USE_FILTER_FLETCHER32="yes"
+    fi
+  done
+fi
+
+dnl ----------------------------------------------------------------------
+dnl This is defined only when we're using CodeWarrior, since it has a
+dnl broken "open()" call.
+dnl
+if test 1 = 2; then
+  AC_DEFINE([NO_SHARED_WRITING], [1],
+            [Define if shared writing must be disabled (CodeWarrior only)])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Set the flag to indicate that the machine can handle converting
+dnl denormalized floating-point values.
+dnl (This flag should be set for all machines, except for the Crays, where
+dnl the cache value is set in it's config file)
+dnl
+AC_MSG_CHECKING([if converting denormalized floating-point values is possible])
+AC_CACHE_VAL([hdf5_cv_convert_denormal_float], [hdf5_cv_convert_denormal_float=yes])
+
+if test ${hdf5_cv_convert_denormal_float} = "yes"; then
+  AC_DEFINE([CONVERT_DENORMAL_FLOAT], [1],
+            [Define if your system can handle converting denormalized floating-point values.])
+  AC_MSG_RESULT([yes])
+else
+  AC_MSG_RESULT([no])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Set some variables for general configuration information to be saved
+dnl and installed with the libraries.
+dnl
+
+dnl HDF5 version from the first line of the README.txt file.
+H5_VERSION="`cut -d' ' -f3 $srcdir/README.txt | head -1`"
+AC_SUBST([H5_VERSION])
+
+dnl Configuration date
+AC_SUBST([CONFIG_DATE]) CONFIG_DATE="`date`"
+
+dnl User doing the configuration
+AC_SUBST([CONFIG_USER]) CONFIG_USER="`whoami`@`hostname`"
+if test -n "$ORGANIZATION"; then
+  CONFIG_USER="$CONFIG_USER at $ORGANIZATION"
+fi
+
+dnl Configuration mode (production, development, profile, etc) saved above.
+AC_SUBST([CONFIG_MODE])
+
+dnl Byte sex from the AC_C_BIGENDIAN macro.
+AC_SUBST([BYTESEX])
+if test "X$ac_cv_c_bigendian" = "Xyes"; then
+  BYTESEX="big-endian"
+else
+  BYTESEX="little-endian"
+fi
+
+dnl Are we compiling static libraries, shared libraries, or both?  This
+dnl is only used for the libhdf5.settings file. We can't just look at
+dnl $enable_static and $enable_shared because if they're yes the ltconfig
+dnl might have decided that one or the other is simply not possible.
+dnl Therefore we have to look in the generated `libtool' shell script for
+dnl lines that set the value of `build_libtool_libs' (shared) and
+dnl `build_old_libs' (static).
+AC_SUBST([STATIC_SHARED])
+if (grep '^build_libtool_libs=yes' libtool >/dev/null); then
+  enable_shared=yes
+else
+  enable_shared=no
+fi
+
+if (grep '^build_old_libs=yes' libtool >/dev/null); then
+  enable_static=yes
+else
+  enable_static=no
+fi
+
+if test "X$enable_static" = "Xyes" && test "X$enable_shared" = "Xyes"; then
+  STATIC_SHARED="static, shared"
+elif test "X$enable_static" = "Xyes"; then
+  STATIC_SHARED="static"
+elif test "X$enable_shared" = "Xyes"; then
+  STATIC_SHARED="shared"
+else
+  STATIC_SHARED="none"
+fi
+
+dnl Parallel support? (set above except empty if none)
+PARALLEL=${PARALLEL:-no}
+
+dnl Compiler with version information. This consists of the full path
+dnl name of the compiler and the reported version number.
+AC_SUBST([CC_VERSION])
+if `echo $CC | grep / 2>&1 /dev/null`; then
+  CC_VERSION="$CC"	
+else
+  CC_VERSION="$CC";
+  for x in `echo $PATH | sed -e 's/:/ /g'`; do
+    if test -x $x/$CC; then
+      CC_VERSION="$x/$CC"
+      break
+    fi
+  done
+fi
+if test -n "$cc_vendor" && test -n "$cc_version"; then
+  CC_VERSION="$CC_VERSION ($cc_vendor-$cc_version)"
+fi
+
+dnl ----------------------------------------------------------------------
+dnl pgcc version 6.0x have optimization (-O, -O2 or -O3) problem.  Detect
+dnl these versions and add option "-Mx,28,0x8" to the compiler to avoid
+dnl the problem if optimization is enable.
+dnl
+if (${CC-cc} -V 2>&1 | grep '^pgcc 6.0') > /dev/null && test "X$enable_production" = "Xyes"; then
+    CC="${CC-cc} -Mx,28,0x8"
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Where is the root of the source tree. Give an absolute address so
+dnl we can find it no matter which directory of the distribution is our
+dnl current directory. The built-in pwd fails on some systems, but the
+dnl /bin/pwd version works OK.
+dnl
+if test -x /bin/pwd; then
+  pwd=/bin/pwd
+else
+  pwd=pwd
+fi
+AC_SUBST([ROOT]) ROOT="`$pwd`"
+
+dnl ----------------------------------------------------------------------
+dnl Determine the runtime libraries we may need to include in the
+dnl libtools command so that executables will find the correct dynamic
+dnl libraries.
+dnl 
+AC_SUBST([DYNAMIC_DIRS]) DYNAMIC_DIRS=""
+
+if test -n "$LDFLAGS"; then
+  for d in $LDFLAGS ; do
+    case "$d" in
+      -L*)
+        d="`echo $d | sed -e 's/-L//g'`"
+        case "$d" in
+          .*)
+            dnl If the path isn't absolute, make it so by
+            dnl prepending the ROOT directory to it.
+            d=${ROOT}/$d
+            ;;
+        esac
+        DYNAMIC_DIRS="-R${d} $DYNAMIC_DIRS"
+        ;;
+    esac
+  done
+fi
+
+if test -n "$CPPFLAGS"; then
+  TEMP_CPPFLAGS=""
+  for d in $CPPFLAGS ; do
+    case "$d" in
+      -I.*)
+        dnl If the path isn't absolute, make it so by prepending
+        dnl the ROOT directory to it.
+        d="`echo $d | sed -e 's/-I//g'`"
+        d="-I${ROOT}/${d}"
+        ;;
+    esac
+    TEMP_CPPFLAGS="$d $TEMP_CPPFLAGS"
+  done
+  CPPFLAGS=$TEMP_CPPFLAGS
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Check if they would like the High Level library  compiled
+dnl
+
+AC_SUBST(HL) HL=""
+AC_MSG_CHECKING([if high level library is enabled])
+AC_ARG_ENABLE([hl],
+     [AC_HELP_STRING([--enable-hl],
+                     [Enable the high level library [default=yes]])],
+     [HDF5_HL=$enableval],
+     [HDF5_HL=yes])
+
+if test "X$HDF5_HL" = "Xyes"; then
+ echo "yes"
+ HL="hl"
+else
+ echo "no"
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Build the Makefiles.  Almost every Makefile.in will begin with the line
+dnl `@COMMENCE@' and end with the line `@CONCLUDE@'.  These lines insert
+dnl various files from the config directory into the Makefile.
+dnl
+AC_SUBST_FILE([COMMENCE]) COMMENCE=config/commence
+AC_SUBST_FILE([CONCLUDE]) CONCLUDE=config/conclude
+
+dnl The directory search list
+AC_SUBST([SEARCH]) SEARCH='$(srcdir) $(top_builddir)/src $(top_srcdir)/src'
+cmd='echo $SEARCH |sed "s/ /'$SEARCH_SEP'/g"'
+SEARCH="$SEARCH_RULE`eval $cmd`"
+export SEARCH
+
+dnl We don't need to say when we're entering directories if we're using
+dnl GNU make because make does it for us.
+if test "X$GMAKE" = "Xyes"; then
+  AC_SUBST([SETX]) SETX=":"
+else
+  AC_SUBST([SETX]) SETX="set -x"
+fi
+
+dnl Some cleanup stuff
+rm -f conftest conftest.o conftest.c dummy.o
+
+dnl Build config.status, touch the stamp files, and build all the Makefiles.
+dnl The order is such that the first `make' does not need to update any
+dnl configuration information. See config/commence.in for the order in which
+dnl things need to be done.
+
+# First the stamp1 file for H5config.h.in
+mkdir ./config >/dev/null 2>&1
+touch ./config/stamp1
+
+# Then the config.status file (but not makefiles)
+saved_no_create=$no_create
+no_create=yes
+
+PARALLEL_MAKE=""
+
+if test -n "$TESTPARALLEL"; then
+  PARALLEL_MAKE="$TESTPARALLEL/Makefile $TESTPARALLEL/testph5.sh"
+fi
+
+
+# conditionally generate the high level makefiles
+# to do : fortran with hl
+if test "X$HDF5_HL" = "Xyes"; then
+ HL_FILES="hl/Makefile
+	   hl/src/Makefile
+           hl/test/Makefile"
+fi
+
+AC_CONFIG_FILES([src/libhdf5.settings
+                 config/depend1
+                 config/depend2
+                 config/depend3
+                 config/depend4
+                 config/dependN
+                 config/commence
+                 config/conclude
+                 Makefile
+                 src/Makefile
+                 test/Makefile
+                 $PARALLEL_MAKE
+                 perform/Makefile
+                 tools/Makefile
+                 tools/h5dump/Makefile
+                 tools/h5dump/testh5dump.sh
+                 tools/h5import/Makefile
+                 tools/h5diff/Makefile
+                 tools/h5jam/Makefile
+                 tools/h5jam/testh5jam.sh
+                 tools/h5repack/Makefile
+                 tools/h5repack/h5repack.sh
+                 tools/h5ls/Makefile
+                 tools/lib/Makefile
+                 tools/misc/Makefile
+                 tools/misc/h5cc
+                 tools/gifconv/Makefile
+                 examples/Makefile
+                 doc/Makefile
+                 doc/html/Makefile
+                 doc/html/ed_libs/Makefile
+                 doc/html/ed_styles/Makefile
+                 doc/html/ADGuide/Makefile
+                 doc/html/Graphics/Makefile
+                 doc/html/Intro/Makefile
+                 doc/html/PSandPDF/Makefile
+                 doc/html/TechNotes/Makefile
+                 doc/html/Tutor/Makefile
+                 doc/html/Tutor/Graphics/Makefile
+                 doc/html/Tutor/examples/Makefile
+                 doc/html/cpplus/Makefile
+                 doc/html/cpplus_RM/Makefile
+                 doc/html/cpplus_RM/header_files/Makefile
+                 doc/html/fortran/Makefile
+		 $HL_FILES])
+
+AC_OUTPUT
+no_create=$saved_no_create
+
+# Then the stamp2 file for H5config.h
+touch ./config/stamp2
+
+# Finally the makefiles
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+chmod 755 tools/misc/h5cc
+
+dnl We don't want inline defined for C++ compilers
+dnl Don't worry about the C++ ifdef wrappers in the H5pubconf file, since
+dnl 'H5_inline' isn't a C++ keyword.
+cat >> src/H5config.h <<EOF
+
+#if defined(__cplusplus) && defined(inline)
+#undef inline
+#endif
+EOF
+
+dnl ----------------------------------------------------------------------
+dnl Print out a summary of what we are going to build.
+dnl
+if test -z "$ECHO_N" -o -z "$ECHO_C"; then
+  if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+    if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+      ECHO_N=''
+      ECHO_C='
+'
+    else
+      ECHO_N=-n
+      ECHO_C=''
+    fi
+  else
+    ECHO_N=''
+    ECHO_C='\c'
+  fi
+fi
+
+PRINT_PLAIN() {
+  echo $ECHO_N "$1$ECHO_C"
+  echo $ECHO_N "$1$ECHO_C" 1>>src/libhdf5.settings
+}
+
+PRINT_N() {
+  echo $ECHO_N "$1:  $ECHO_C"
+  echo $ECHO_N "$1:  $ECHO_C" 1>>src/libhdf5.settings
+}
+
+PRINT() {
+  echo "$1"
+  echo "$1" 1>>src/libhdf5.settings
+}
+
+dnl ----------------------------------------------------------------------
+dnl Print "Yes" if all arguments are "yes", otherwise "No"
+dnl
+IF_YES_NO() {
+  if test $# -lt 1; then
+    PRINT "No"
+    return
+  else
+    while test $# -gt 0; do
+      if test "$1" != "yes"; then
+        PRINT "No"
+        return
+      fi
+      shift
+    done
+  fi
+  PRINT "Yes"
+}
+
+IF_ENABLED_DISABLED() {
+  if test "$1" = "yes"; then
+    PRINT "Enabled"
+  else
+    PRINT "Disabled"
+  fi
+}
+
+PRINT "Configure Summary"
+PRINT "Compiling Options:"
+
+PRINT_N "               Compilation Mode"
+case "X-$enable_production" in
+  X-yes)        PRINT "Production" ;;
+  X-no)         PRINT "Development" ;;
+  X-profile)    PRINT "Profile" ;;
+  *)            PRINT "$enable_production" ;;
+esac
+
+PRINT_N "                     C Compiler"
+PRINT "$CC"
+
+PRINT_N "                         CFLAGS"
+PRINT "$CFLAGS"
+
+PRINT_N "                       CPPFLAGS"
+PRINT "$CPPFLAGS"
+
+PRINT_N "                        LDFLAGS"
+PRINT "$LDFLAGS"
+
+PRINT_N "                     Debug Mode"
+
+if test "X$DEBUG_PKG" = "X$all_packages"; then
+  PRINT "All"
+elif test "X$DEBUG_PKG" = "X"; then
+  PRINT "None"
+else
+  PRINT $DEBUG_PKG
+fi
+
+PRINT_N "               Shared Libraries"
+IF_YES_NO "$enable_shared"
+
+PRINT_N "               Static Libraries"
+IF_YES_NO "$enable_static"
+
+PRINT_N "  Statically Linked Executables"
+IF_YES_NO "$STATIC_EXEC"
+
+PRINT_N "                        Tracing"
+IF_YES_NO "$TRACE_API"
+
+PRINT_N "   Optimization Instrumentation"
+IF_YES_NO "$INSTRUMENT"
+
+PRINT "Languages:"
+
+PRINT_N "                            C++"
+IF_YES_NO "$HDF_CXX"
+
+PRINT_N "                        Fortran"
+IF_YES_NO "$HDF_FORTRAN"
+
+PRINT "Features:"
+
+PRINT_N "                        dmalloc"
+IF_YES_NO "$HAVE_DMALLOC"
+
+PRINT_N "         Function Stack Tracing"
+IF_ENABLED_DISABLED "$FUNCSTACK"
+
+PRINT_N "                           GASS"
+IF_YES_NO "$GASS"
+
+PRINT_N "                           GPFS"
+IF_YES_NO "$GPFS"
+
+PRINT_N "        HDF5 v1.4 Compatibility"
+IF_YES_NO "$HDF5_V1_4_COMPAT"
+
+PRINT_N "                        hsize_t"
+case "$HSIZET" in
+  no|small)  PRINT "Small" ;;
+  *)         PRINT "Large" ;;
+esac
+
+PRINT_N "         I/O filters (external)"
+PRINT "$EXTERNAL_FILTERS"
+
+PRINT_N "         I/O filters (internal)"
+PRINT "$FILTERS"
+
+PRINT_N " Linux Large File Support (LFS)"
+IF_ENABLED_DISABLED "$LINUX_LFS"
+
+PRINT_N "                            MPE"
+IF_YES_NO "$MPE"
+
+
+PRINT_N "                  Parallel HDF5"
+if test "$PARALLEL" != "no"; then
+  PRINT "Yes"
+else
+  PRINT "No"
+fi
+
+PRINT_N "                            SRB"
+IF_YES_NO "$SRB"
+
+PRINT_N "                     Stream VFD"
+IF_ENABLED_DISABLED "$STREAM_VFD"
+
+PRINT_N "                   Threadsafety"
+IF_ENABLED_DISABLED "$THREADSAFE"
+
+PRINT_N "             High Level library"
+IF_ENABLED_DISABLED "$HDF5_HL"
+

Added: packages/hdf5/branches/upstream/current/doc/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,64 @@
+# HDF5 Library Doc Makefile(.in)
+#
+# Copyright (C) 1997, 2002
+#     National Center for Supercomputing Applications.
+#     All rights reserved.
+#
+# 
+# This is the top level makefile of the Doc directory.  It mostly just
+# reinvokes make in the various subdirectories.
+# You can alternatively invoke make from each subdirectory manually.
+#
+top_srcdir=@top_srcdir@
+top_builddir=..
+srcdir=@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order
+SUBDIRS=html
+
+##===========================================================================
+lib progs check test _test install uninstall:
+	@echo "Nothing to be done"
+
+tests TAGS dep depend:
+	@@SETX@; for d in $(SUBDIRS); do				      \
+		(cd $$d && $(MAKE) $@) || exit 1;				      \
+	done
+
+install-doc:
+	@if test -d $(DOCDIR) ; then                                          \
+		:;                                                                 \
+	else                                                                  \
+		mkdir $(DOCDIR) && chmod 755 $(DOCDIR);                            \
+	fi
+	@@SETX@; for d in $(SUBDIRS); do                                      \
+		(cd $$d && $(MAKE) $@) || exit 1;                                  \
+	done
+
+uninstall-doc:
+	@@SETX@; for d in $(SUBDIRS); do                                      \
+		(cd $$d && $(MAKE) $@) || exit 1;                                  \
+	done
+
+.PHONY: all lib progs test _test install uninstall dep depend clean           \
+	mostlyclean distclean maintainer-clean
+
+clean mostlyclean:
+	@@SETX@; for d in $(SUBDIRS); do				      \
+		(cd $$d && $(MAKE) $@);					      \
+	done
+
+distclean:
+	@@SETX@; for d in $(SUBDIRS); do				      \
+		(cd $$d && $(MAKE) $@);					      \
+	done
+	-$(RM) Makefile
+
+maintainer-clean: distclean
+	@echo "This target is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+	@@SETX@; for d in $(SUBDIRS); do				      \
+		(cd $$d && $(MAKE) $@);					      \
+	done
+

Added: packages/hdf5/branches/upstream/current/doc/html/ADGuide/Changes.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ADGuide/Changes.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ADGuide/Changes.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2524 @@
+<html>
+  <head>
+    <title>HDF5 Software Changes</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_Gen.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="../ed_styles/GenElect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem --></head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="../index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="../H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+    <a href="../RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+    <a href="../ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>HDF5 Software Changes from Release to Release</h1>
+</center>
+
+<!-- Document API CHANGES ONLY in this file. -->
+
+This document is intended to assist application developers who must keep 
+an application synchronized with the HDF5 library or related software.
+
+
+<h2>Release 1.6.5 (current release) versus Release 1.6.4</h2> 
+
+<dir>
+
+This section lists the API-level changes that have been made in the 
+transition from the HDF5 Release 1.6.4 to Release 1.6.5.
+
+
+    <h3>New Functions and Tools</h3>
+	<dl>
+
+	  <dt>C functions and
+	  <dt>Fortran subroutines:
+          <dd>HDF5 Release 1.6.5 is primarily a maintenance release, 
+              focusing on bugfixes, optimization and portability; 
+              there are no new C APIs or Fortran subroutines.
+
+
+<!--
+          <dd>&nbsp;
+          <dd>The following C functions are new for Release 1.6.4 and 
+              are documented in the
+              <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+	
+              <table border="0">
+              <tr>
+                <td align="left" valign="top"><code>function</code>
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+                <td align="left" valign="top">syntax<br>
+                    See <a href="../RM_H5__.html#__">entry</a>.</td>
+              </tr>
+
+              </table>    
+-->
+	      
+          <dd>&nbsp;
+	  <dt>High Level C APIs:
+          <dd>The High Level C APIs (HL), including the HDF5 Image, 
+              HDF5 Table, and HDF5 Lite interfaces 
+              (H5IM, H5TB, and H5LT, respectively), 
+              have been distributed with the main HDF5 source code distribution
+              since Release 1.6.4.
+              A link to the HL documentation appears on the opening
+              page of the HDF5 document set or can be accessed directly at
+              <a href="http://hdf.ncsa.uiuc.edu/HDF5/hdf5_hl/doc/RM_hdf5hl.html">
+              <code>http://hdf.ncsa.uiuc.edu/HDF5/hdf5_hl/doc/RM_hdf5hl.html</code></a>
+
+
+          <dd>&nbsp;
+	  <dt>C++ wrappers:
+          <dd><code>void PropList::copyProp(PropList& dest, const char* name) const</code>
+          <dd><code>void PropList::copyProp(PropList& dest, const string& name) const</code>
+          <dd><code>string CommonFG::getComment(const string& name) const</code>
+          <dd><code>void CommonFG::removeComment(const char* name) const</code>
+          <dd><code>void CommonFG::removeComment(const string& name) const</code>
+          <dd><code>hsize_t Attribute::getStorageSize() const</code>
+          <dd><code>void Attribute::close()</code>
+          <dd><code>void DataSet::close()</code>
+          <dd><code>void DataSpace::close()</code>
+          <dd><code>void DataType::close()</code>
+          <dd><code>void H5File::close()</code>
+          <dd><code>void Group::close()</code>
+          <dd><code>void PropList::close()</code>
+          <dd><code>H5T_order_t AtomType::getOrder() const</code>
+          <dd><code>void H5Object::renameAttr(const char* oldname, const char* newname) const</code>
+          <dd><code>void H5Object::renameAttr(const string& oldname, const string& newname) const</code>
+          <dd><code>string CommonFG::getObjnameByIdx(hsize_t idx) const</code>
+          <dd><code>ArrayType AbstractDs::getArrayType() const</code>
+          <dd><code>VarLenType AbstractDs::getVarLenType() const</code>
+          <dd><code>ArrayType CommonFG::openArrayType(const char* name) const</code>
+          <dd><code>ArrayType CommonFG::openArrayType(const string& name) const</code>
+          <dd><code>VarLenType CommonFG::openVarLenType(const char* name) const</code>
+          <dd><code>VarLenType CommonFG::openVarLenType(const string& name) const</code>
+          <dd><code>ArrayType CompType::getMemberArrayType(unsigned member_num) const</code>
+          <dd><code>VarLenType CompType::getMemberVarLenType(unsigned member_num) const</code>
+
+	  
+          <dd>&nbsp;
+<!--
+	  <dt>Tools:
+          <dd>Any?
+-->
+
+
+        </dl>
+
+
+<!--
+    <h3>Depricated and Deleted Functions</h3>
+
+	The following functions have been removed in this release.
+
+-->
+	<!--
+        None.
+	-->
+<!--
+        <dl>
+        <dt><u>C functions:</u>
+        <dt><code>H5function_name?</code>
+
+
+        <p>
+        <dt><u>Fortran90 subroutines:</u>
+        <dt><code>h5subroutine_f?</code>
+
+
+        <p>
+        <dt><u>C++ wrappers:</u>
+        <dt><code>C++_wrapper_name?</code>
+
+	  
+        </dl>
+-->
+
+
+<!--
+	The following functions are deprecated in this HDF5 release. 
+        A backward compatibility mode is provided 
+        enabling these functions and other Release 1.4.x compatibility
+        features, but is available only when the HDF5 library is 
+        configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
+        The backward compatibility mode is not enabled in the 
+        binaries distributed by NCSA.
+
+        <dir>
+        <table border=0>
+        <tr valign="top" align="left"><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<code>function</code>
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<code>function</code>
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>&nbsp;
+
+</pre>
+        </td></tr>
+        </table>
+        </dir>
+        <p>
+	The above functions will eventually be removed from the HDF5 
+        distribution and from the <cite>HDF5 Reference Manual</cite>.
+-->
+
+
+
+    <h3>Functions with New or Changed Symbols or Fixed Values</h3>
+
+        Symbols and preset values associated with  the following functions 
+        have changed as noted.
+        <p>
+
+        <dl>
+        <dt><u>C functions:</u>
+        <dt><code>H5Fget_obj_count</code>
+          <dd><code>H5F_OBJ_LOCAL</code> has been 
+            added as a qualifier on the types of objects to be counted. 
+            <code>H5F_OBJ_LOCAL</code> restricts the search 
+            to objects opened through current file identifier.
+
+        <dt><code>H5Tset_tag</code>
+          <dd>The <code>H5T_OPAQUE_TAG_MAX</code> 
+            macro constant, 
+            specifying the maximum size of an opaque datatype tag, 
+            was added in <code>H5Tpublic.h</code>.
+
+
+<!--
+        <dt><code>H5function_name?</code>
+          <dd>Change...
+-->
+
+
+<!--
+        <p>
+        <dt><u>Fortran90 subroutines:</u>
+        <dt><code>h5subroutine_f?</code>
+          <dd>Change...
+
+
+        <p>
+        <dt><u>C++ wrappers:</u>
+        <dt><code>C++_wrapper_name?</code>
+          <dd>Change...
+-->
+
+
+        </dl>
+
+
+    <h3>Functions with Changed Syntax</h3>
+
+        The following functions have changed as noted.
+        Changed items are indicated in <font color="red">red</font>. 
+        <p>
+
+<!--
+        <dl>
+        <dt><u>C functions:</u>
+        <dt><code>H5function_name?</code>
+          <dd>Change...
+
+
+        <p>
+        <dt><u>Fortran90 subroutines:</u>
+        <dt><code>h5subroutine_f?</code>
+          <dd>Change...
+-->
+
+
+        <p>
+        <dt><u>C++ wrappers:</u>
+        <!--
+        <dt><code>C++_wrapper_name?</code>
+          <dd>Change....
+        -->
+        <dt>In all cases below, a parameter datatype has changed from 
+            <code>int</code> to <code>unsigned</code>.
+
+          <dd><code>string CompType::getMemberName( 
+            <font color=red>unsigned</font> member_num ) const</code>
+          <dd><code>size_t CompType::getMemberOffset( 
+            <font color=red>unsigned</font> member_num ) const</code>
+          <dd><code>int CompType::getMemberDims( 
+            <font color=red>unsigned</font> member_num, size_t* dims, 
+            int* perm ) const</code>
+          <dd><code>H5T_class_t CompType::getMemberClass( 
+            <font color=red>unsigned</font> member_num ) const</code>
+          <dd><code>hid_t CompType::p_get_member_type(
+            <font color=red>unsigned</font> member_num) const</code>
+          <dd><code>DataType CompType::getMemberDataType( 
+            <font color=red>unsigned</font> member_num ) const</code>
+          <dd><code>ArrayType CompType::getMemberArrayType( 
+            <font color=red>unsigned</font> member_num ) const</code>
+          <dd><code>CompType CompType::getMemberCompType( 
+            <font color=red>unsigned</font> member_num ) const</code>
+          <dd><code>EnumType CompType::getMemberEnumType( 
+            <font color=red>unsigned</font> member_num ) const</code>
+          <dd><code>IntType CompType::getMemberIntType( 
+            <font color=red>unsigned</font> member_num ) const</code>
+          <dd><code>FloatType CompType::getMemberFloatType( 
+            <font color=red>unsigned</font> member_num ) const</code>
+          <dd><code>StrType CompType::getMemberStrType( 
+            <font color=red>unsigned</font> member_num ) const</code>
+          <dd><code>VarLenType CompType::getMemberVarLenType( 
+            <font color=red>unsigned</font> member_num ) const</code>
+	  
+        </dl>
+
+
+<!--
+    <h3>Deleted Constants</h3>
+    
+        The following constants have been removed from the HDF5 Library:
+        <ul>
+        <li>Any?
+        <ul>
+          <li><code>Specifics?</code>
+        </ul>
+        </ul>
+        
+
+    <h3>Constants with Changed Values</h3>
+    
+        The following constants have been changed in this release:
+        <ul>
+        <li>Any?
+        <ul>
+          <li><code>Specifics?</code>
+        </ul>
+        </ul>
+        
+    
+    <h3>Changed Library Sturctures</h3>
+    
+        The following library structures have changed and are now 
+        defined as follows: 
+
+	<p>
+        <dl>
+        <dt>C API:
+        <dt><code>struct_name</code>
+	
+                <ul>
+                <li>new definition<br>
+                </ul>
+            <p>
+-->
+
+
+    <h3>Changed Library Configuration</h3>
+	<ul>
+	  <li>The path to the tr utility used by configure can be specififed
+	      by setting the TR variable.
+	  <li>The pdb2hdf tool has been deleted and PDB is no longer detected
+	      by configure.
+	</ul>
+
+
+    </dir>
+
+
+
+<h2>Release 1.6.4 versus Release 1.6.3</h2> 
+
+<dir>
+
+This section lists the API-level changes that have been made in the 
+transition from the HDF5 Release 1.6.3 to Release 1.6.4.
+
+
+    <h3>New Functions and Tools</h3>
+	<dl>
+
+<!--
+	  <dt>C functions:
+-->
+	  <dt>C functions and
+	  <dt>Fortran subroutines:
+          <dd>HDF5 Release 1.6.4 "Bugfix Release";
+              there are no new C APIs or Fortran subroutines.
+<!--
+          <dd>The following C functions are new for Release 1.6.4 and 
+              are documented in the
+              <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+	
+              <table border="0">
+              <tr>
+                <td align="left" valign="top"><code>function</code>
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+                <td align="left" valign="top">syntax<br>
+                    See <a href="../RM_H5__.html#__">entry</a>.</td>
+              </tr>
+
+              </table>    
+-->
+	      
+          <dd>&nbsp;
+	  <dt>High Level C APIs:
+          <dd>The High Level C APIs (HL), including the HDF5 Image, 
+              HDF5 Table, and HDF5 Lite interfaces 
+              (H5IM, H5TB, and H5LT, respectively) , 
+              have been brought into the main HDF5 source code distribution.
+              A link to the HL documentation appears on the opening
+              page of the HDF5 document set or can be accessed directly at
+              <a href="http://hdf.ncsa.uiuc.edu/HDF5/hdf5_hl/doc/RM_hdf5hl.html">
+              <code>http://hdf.ncsa.uiuc.edu/HDF5/hdf5_hl/doc/RM_hdf5hl.html</code></a>
+
+              <br><br>
+              The HL library, <code>libhdf5_hl.a(so)</code>, 
+              is built and installed by default but can be disabled with 
+              the <code>--disable-hl</code> configure flag.
+
+<!--
+          <dd>&nbsp;
+	  <dt>Fortran subroutines:
+          <dd>The following Fortran90 subroutines are new for Release 1.6.3 
+	      and are documented in the 
+              <a href="../RM_H5Front.html"><cite>HDF5 Reference 
+                    Manual</cite></a>.
+              <table border="0">
+              <tr>
+                <td align="left" valign="top" colspan="2">New Fortran90 
+                    subroutines corresponding to the new C functions 
+                    listed above:<br>
+                </td>
+              </tr><tr>
+                <td align="left" valign="top">
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>function</code><br>
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>function</code>
+                </td>
+                <td align="left" valign="top"> 
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>function</code>
+                </td>
+              </tr>
+              </table>    
+
+              <table border="0">
+              <tr>
+                <td align="left" valign="top">New Fortran90 subroutines 
+                    corresponding to C functions from prior releases:<br>
+                    &nbsp;&nbsp;&nbsp;&nbsp;None<br>
+--><!--
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>new_fortran_here</code><br>
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>last_new_fortran_here</code>
+--><!--
+                    </td>
+                <td align="left" valign="top"> 
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+              </tr>
+              </table>    
+-->
+	  
+<!--
+          <dd>&nbsp;
+	  <dt>C++ wrappers:
+	  <dd> 
+-->
+	  
+          <dd>&nbsp;
+	  <dt>Tools:
+          <dd>A new pair of tools, <code>h5jam</code> and <code>h5unjam</code>,
+              is available to manage user blocks in HDF5 files.
+              See <a href="../Tools.html#Tools-Jam">their entry</a>
+              in the <cite>HDF5 Reference Manual</cite>.
+
+
+        </dl>
+
+
+    <h3>Deleted Functions</h3>
+
+	The following functions have been removed in this release.
+
+        <dl>
+          <dd>&nbsp;
+	  <dt>C++ wrappers:
+	  <dd> The C++ wrappers now rely on the C library's reference 
+               counting in place of the class <code>RefCounter</code>, 
+               which existed before the C mechanism was available.  
+	       <code>RefCounter</code> has therefore been removed.
+        </dl>
+
+	<!--
+        None.
+	-->
+
+	<!--
+	The following functions are deprecated in HDF5 Release X.X.x.
+        A backward compatibility mode is provided in this release,
+        enabling these functions and other Release 1.4.x compatibility
+        features, but is available only when the HDF5 library is 
+        configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
+        The backward compatibility mode is not enabled in the 
+        binaries distributed by NCSA.
+
+        <dir>
+        <table border=0>
+        <tr valign="top" align="left"><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<code>function</code>
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<code>function</code>
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>&nbsp;
+
+</pre>
+        </td></tr>
+        </table>
+        </dir>
+        <p>
+	The above functions will eventually be removed from the HDF5 
+        distribution and from the <cite>HDF5 Reference Manual</cite>.
+	-->
+
+<!--
+	The following functions have been removed in this release.
+
+        <dl>
+          <dd>&nbsp;
+	  <dt>Category
+	  <dd><code>function_name</code>
+        </dl>
+-->
+
+
+    <h3>Functions with Changed Syntax</h3>
+
+        The following functions have changed as noted.
+        In general, one or more parameters or the return value has 
+        changed from a signed to an unsigned datatype.
+        Changed items are indicated in
+        <font color="red">red</font>. 
+        <p>
+
+        <dl>
+        <dt><u>C functions:</u>
+        <dt><code>H5Pget_version</code>
+          <dd><code>
+              herr_t H5Pget_version(hid_t plist_id, 
+              <font color="red">unsigned *boot/*out*/</font>,
+              <br>
+              <font color="red">unsigned *freelist/*out*/</font>, 
+              <font color="red">unsigned *stab/*out*/</font>,
+              <font color="red">unsigned *shhdr/*out*/</font>)
+              </code>
+
+        <dt><code>H5Pset_sym_k</code>
+          <dd><code>
+              H5Pset_sym_k(hid_t plist_id, 
+              <font color="red">unsigned ik</font>, unsigned lk)
+              </code>
+
+        <dt><code>H5Pget_sym_k</code>
+          <dd><code>
+              H5Pget_sym_k(hid_t plist_id, 
+              <font color="red">unsigned *ik/*out*/</font>, 
+              unsigned *lk/*out*/)
+              </code>
+
+        <dt><code>H5Pset_istore_k</code>
+          <dd><code>
+              herr_t H5Pset_istore_k(hid_t plist_id, 
+              <font color="red">unsigned ik</font>)
+              </code>
+
+        <dt><code>H5Pget_istore_k</code>
+          <dd><code>
+              herr_t H5Pget_istore_k(hid_t plist_id, 
+              <font color="red">unsigned *ik/*out*/</font>)
+              </code>
+
+        <dt><code>H5Pget_external</code>
+          <dd><code>
+              herr_t H5Pget_external(hid_t plist_id, 
+              <font color="red">unsigned idx</font>, size_t name_size,
+              <br>
+              char *name/*out*/, off_t *offset/*out*/,
+              hsize_t *size/*out*/)
+              </code>
+
+        <dt><code>H5Pget_filter</code>
+          <dd><code>
+              H5Z_filter_t H5Pget_filter(hid_t plist_id, 
+              <font color="red">unsigned filter</font>,
+              <br>
+              unsigned int *flags/*out*/, size_t *cd_nelmts/*out*/, 
+              <br>
+              unsigned cd_values[]/*out*/, unsigned int *flags/*out*/, 
+              <br>
+              size_t namelen, char name[])
+              </code>
+
+        <dt><code>H5Sselect_hyperslab</code>
+          <dd><code>
+              herr_t H5Sselect_hyperslab(hid_t space_id, H5S_seloper_t op,
+              <br>
+              <font color="red">const hsize_t start[]</font>, 
+              const hsize_t _stride[], const hsize_t count[],
+              <br>
+              const hsize_t _block[])
+              </code>
+
+        <dt><code>H5Sselect_elements</code>
+          <dd><code>
+              herr_t H5Sselect_elements(hid_t space_id, H5S_seloper_t op,
+              <br>
+              size_t num_elemn, <font color="red">const hsize_t **coord</font>)
+              </code>
+
+        <dt><code>H5Tget_member_name</code>
+          <dd><code>
+              char *H5Tget_member_name(hid_t type_id, 
+              <font color="red">unsigned membno</font>)
+              </code>
+
+        <dt><code>H5Tget_member_offset</code>
+          <dd><code>
+              size_t H5Tget_member_offset(hid_t type_id, 
+              <font color="red">unsigned membno</font>)
+              </code>
+
+        <dt><code>H5Tget_member_class</code>
+          <dd><code>
+              H5T_class_t H5Tget_member_class(hid_t type_id, 
+              <font color="red">unsigned membno</font>)
+              </code>
+
+        <dt><code>H5Tget_member_type</code>
+          <dd><code>
+              hid_t H5Tget_member_type(hid_t type_id, 
+              <font color="red">unsigned membno</font>)
+              </code>
+
+        <dt><code>H5Tget_member_value</code>
+          <dd><code>
+              herr_t H5Tget_member_value(hid_t type_id, 
+              <font color="red">unsigned membno</font>, 
+              <br>
+              void *value/*out*/)
+              </code>
+
+        <p>
+        <dt><code>H5Diterate</code> is affected by a similar change
+          in the syntax of <code>H5D_operator_t</code>. 
+          <dd><code>
+              herr_t (*H5D_operator_t)(void *elem, hid_t type_id, 
+              <font color="red">unsigned ndim</font>,
+              <br>
+              <font color="red">const hsize_t *point</font>, 
+              void *operator_data)
+              </code>
+
+
+        <p>
+        <dt><u>Fortran subroutines:</u>
+        <dt><code>h5sselect_hyperslab_f</code>
+          <dd><code>
+              SUBROUTINE h5sselect_hyperslab_f(space_id, operator, 
+              <font color="red">start</font>, count, &
+              <br>
+              hdferr, stride, block)
+              </code>
+
+        <dt><code>h5sselect_elements_f</code>
+          <dd><code>
+              SUBROUTINE h5sselect_elements_f(space_id, operator, rank, &
+              <br>
+              num_elements, <font color="red">coord</font>, hdferr)
+              </code>
+
+
+        <p>
+        <dt><u>C++ wrappers:</u>
+        <dt><code>FileCreatPropList::getVersion</code>
+          <dd><code>
+            void FileCreatPropList::getVersion(
+            <font color="red">unsigned& super</font>, 
+            <font color="red">unsigned& freelist</font>, 
+            <br>
+            <font color="red">unsigned& stab</font>, 
+            <font color="red">unsigned& shhdr</font>) const
+              </code>
+
+<!--
+        <dt><code>FileCreatPropList::setSymk</code>
+          <dd><code>
+            void FileCreatPropList::setSymk( int ik, int lk ) const
+              </code>
+-->
+
+        <dt><code>FileCreatPropList::setSymk</code>
+          <dd><code>
+            void FileCreatPropList::setSymk( 
+            <font color="red">unsigned ik</font>, unsigned lk ) const
+              </code>
+
+<!--
+        <dt><code>FileCreatPropList::getSymk</code>
+          <dd><code>
+            void FileCreatPropList::getSymk( int& ik, int& lk ) const
+              </code>
+-->
+
+        <dt><code>FileCreatPropList::getSymk</code>
+          <dd><code>
+            void FileCreatPropList::getSymk( 
+            <font color="red">unsigned& ik</font>, unsigned& lk ) const
+              </code>
+
+        <dt><code>FileCreatPropList::setIstorek</code>
+          <dd><code>
+            void FileCreatPropList::setIstorek( 
+            <font color="red">unsigned ik</font> ) const
+              </code>
+
+        <dt><code>FileCreatPropList::getIstorek</code>
+          <dd><code>
+            <font color="red">unsigned</font> 
+            FileCreatPropList::getIstorek() const
+              </code>
+
+        <dt><code>DSetCreatPropList::getExternal</code>
+          <dd><code>
+            void DSetCreatPropList::getExternal( 
+            <font color="red">unsigned idx</font>, 
+            size_t name_size, 
+            <br>
+            char* name, off_t& offset, hsize_t& size ) const
+              </code>
+
+        <dt><code>DSetCreatPropList::getFilter</code>
+          <dd><code>
+            H5Z_filter_t DSetCreatPropList::getFilter(
+            <font color="red">ine filter_number</font>, 
+            <br>
+            unsigned int &flags, size_t &cd_nelmts, unsigned int* cd_values, 
+            <br>
+            size_t namelen, char name[] ) const
+              </code>
+
+        <dt><code>DataSpace::selectHyperslab</code>
+          <dd><code>
+            void DataSpace::selectHyperslab( H5S_seloper_t op, 
+            const hsize_t *count, 
+            <br>
+            <font color="red">const hsize_t *start</font>, 
+            const hsize_t *stride, const hsize_t *block ) const
+              </code>
+
+        <dt><code>DataSpace::selectElements</code>
+          <dd><code>
+            void DataSpace::selectElements( H5S_seloper_t op, 
+            <br>
+            const size_t num_elements, 
+            <font color="red">const hsize_t *coord[ ]</font> ) const
+              </code>
+
+        <dt><code>CompType::getMemberName</code>
+          <dd><code>
+            string CompType::getMemberName( 
+            <font color="red">unsigned member_num</font> ) const
+              </code>
+
+        <dt><code>CompType::getMemberOffset</code>
+          <dd><code>
+            size_t CompType::getMemberOffset( 
+            <font color="red">unsigned member_num</font> ) const
+              </code>
+
+        <dt><code>CompType::getMemberClass</code>
+          <dd><code>
+            H5T_class_t CompType::getMemberClass( 
+            <font color="red">unsigned member_num</font> ) const
+              </code>
+
+        <dt><code>EnumType::getMemberValue</code>
+          <dd><code>
+            void EnumType::getMemberValue( 
+            <font color="red">unsigned member_no</font>, void *value ) const
+              </code>
+
+
+<!--
+          <dd>The prototype for this function was changed from:
+                <ul>
+                <li>old sytax<br>
+                </ul>
+
+                to:
+
+                <ul>
+                <li>new syntax<br>
+                </ul>
+            <p>
+            
+
+
+
+        <dd>&nbsp;
+        <dt>C++ wrappers:
+        <dt><code>C++_wrapper_name</code>
+          <dd>Change...
+	  
+
+        <dd>&nbsp;
+        <dt>Fortran90 subroutines:
+        <dt><code>h5subroutine_f?</code>
+          <dd>Change...
+	  
+-->
+        </dl>
+        <p>
+        <cite>(These lists of syntax changes were added 
+          on 31 March and 5 April 2005, shortly after Release 1.6.4.)</cite>
+
+
+    <h3>Deleted Constants</h3>
+    
+        The following constants have been removed from the HDF5 Library:
+        <ul>
+        <li>Error codes
+        <ul>
+          <li><code>H5E_CANTALLOC</code>
+          <li><code>H5E_CANTCHANGE</code>
+          <li><code>H5E_CANTRECV</code>
+          <li><code>H5E_CANTSENDMDATA</code>
+          <li><code>H5E_FPHDF5</code>
+        </ul>
+        <li>An internal identifier category
+        <ul>
+          <li><code>H5I_TEMPBUF</code>
+        </ul>
+        </ul>
+        <cite>(This list of deleted constants was added on 21 March 2005,
+          shortly after Release 1.6.4.)</cite>
+
+
+<!--
+    <h3>Constants with Changed Values</h3>
+    
+        The following library structures have changed as noted.
+	<p>
+        <dl>
+        <dt>C API:
+        <dt><code>struct_name</code>
+          <dd>This function pointer typedef's definition has been changed from:
+	
+                <ul>
+                <li>old definition<br>
+                </ul>
+
+                to:
+
+                <ul>
+                <li>new definition<br>
+                </ul>
+            <p>
+-->
+
+
+    <h3>Changed Library Configuration</h3>
+	<dl>
+	  <dt>HDF5 Library configuration has been upgraded from 
+              GNU autoconf 2.53 to autoconf 2.59.  
+	</dl>
+
+
+
+    </dir>
+<p>&nbsp;
+
+
+
+<h2>Release 1.6.3 versus Release 1.6.2</h2> 
+
+<dir>
+
+This section lists the API-level changes that have been made in the 
+transition from the HDF5 Release 1.6.2 to Release 1.6.3.
+
+
+    <h3>New Functions and Tools</h3>
+	<dl>
+	  <dt>C functions:
+          <dd>The following C functions are new for Release 1.6.3 and 
+              are documented in the
+              <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+	
+              <table border="0">
+              <tr>
+                <td align="left" valign="top"><code>H5Fget_name</code>
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+                <td align="left" valign="top"><em>ssize_t</em> <code>H5Fget_name</code> 
+                    (<em>hid_t</em> <code>obj_id</code>, 
+                     <em>char *</em><code>name</code>,
+                     <em>size_t</em> <code>size</code>)<br>
+                    See <a href="../RM_H5F.html#File-GetName">entry</a>.</td>
+              </tr>
+
+              <tr>
+                <td align="left" valign="top"><code>H5Fget_filesize</code>
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+                <td align="left" valign="top"><em>herr_t</em> <code>H5Fget_filesize</code> 
+                    (<em>hid_t</em> <code>file_id</code>, 
+                     <em>hsize_t *</em> <code>size</code>)<br>
+                    See <a href="../RM_H5F.html#File-GetFilesize">entry</a>.</td>
+              </tr>
+
+              <tr>
+                <td align="left" valign="top"><code>H5Iget_file_id</code>
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+                <td align="left" valign="top"><em>hid_t</em> <code>H5Iget_file_id</code> 
+                    (<em>hid_t</em> <code>obj_id</code>)<br>
+                    See <a href="../RM_H5I.html#Identify-GetFileId">entry</a>.</td>
+              </tr>
+
+              <tr>
+                <td align="left" valign="top"><code>H5Premove_filter</code>
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+                <td align="left" valign="top"><em>herr_t</em> <code>H5Premove_filter</code> 
+                    (<em>hid_t</em> <code>obj_id</code>,
+		     <em>H5Z_filter_t</em> <code>filter</code>)<br>
+                    See <a href="../RM_H5P.html#Property-RemoveFilter">entry</a>.</td>
+              </tr>
+
+              <tr>
+                <td align="left" valign="top"><code>H5Zget_filter_info</code>
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+                <td align="left" valign="top"><em>herr_t</em> <code>H5Zget_filter_info</code> 
+                    (<em>H5Z_filter_t</em> <code>filter</code>,
+		     <em>unsigned int *</em> <code>flags</code>)<br>
+                    See <a href="../RM_H5Z.html#Compression-GetFilterInfo">entry</a>.</td>
+              </tr>
+              </table>    
+	      
+          <dd>&nbsp;
+	  <dt>Fortran subroutines:
+          <dd>The following Fortran90 subroutines are new for Release 1.6.3 
+	      and are documented in the 
+              <a href="../RM_H5Front.html"><cite>HDF5 Reference 
+                    Manual</cite></a>.
+              <table border="0">
+              <tr>
+                <td align="left" valign="top" colspan="2">New Fortran90 
+                    subroutines corresponding to the new C functions 
+                    listed above:<br>
+                </td>
+              </tr><tr>
+                <td align="left" valign="top">
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>h5fget_name_f</code><br>
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>h5fget_filesize_f</code>
+                </td>
+                <td align="left" valign="top"> 
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>h5iget_file_id_f</code><br>
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>h5premove_filter_f</code><br>
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>h5zget_filter_info_f</code>
+                </td>
+              </tr>
+              </table>    
+
+              <table border="0">
+              <tr>
+                <td align="left" valign="top">New Fortran90 subroutines 
+                    corresponding to C functions from prior releases:<br>
+                    &nbsp;&nbsp;&nbsp;&nbsp;None<br>
+<!--
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>new_fortran_here</code><br>
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>last_new_fortran_here</code>
+-->
+                    </td>
+                <td align="left" valign="top"> 
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+              </tr>
+              </table>    
+	  
+          <dd>&nbsp;
+	  <dt>C++ wrappers:
+	  <dd>C++ wrappers have been brought in sync with the C library,
+              rendering the C++ API significantly more complete.
+	      Most of the new wrappers are for H5P and H5T APIs.  
+	      <p>
+	      All available C++ elements are now documented in the 
+	      <a href="../cpplus_RM/index.html" target="CppExternal">
+	              <cite>HDF5 C++ API Reference Manual</cite></a>. 
+	      (The <cite>HDF5 C++ API Reference Manual</cite> is also a 
+	      new addition in this release.)
+	  
+          <dd>&nbsp;
+	  <dt>Tools:
+          <dd>The following tools are new for Release 1.6.3 and are 
+              documented on the <a href="../Tools.html">Tools page</a> of the
+              <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+              <dd><code>h5new_tool</code> is designed to do whatever this sentence says.
+	      (Clearly, this is a placeholder entry that should be removed before release.)
+          <dd>&nbsp; 
+          <dd>The following tool was in Release 1.6.2 but was not included in formal documentation. 
+              A full description is now included on the 
+	      <a href="../Tools.html">Tools page</a> of the
+              <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+              <dd><code>h5repack</code> is designed to copy an HDF5 file 
+	      to a new file with or without compression and/or chunking.
+        </dl>
+
+
+    <h3>Deleted Functions</h3>
+
+	<!--
+        None.
+	-->
+
+	<!--
+	The following functions are deprecated in HDF5 Release X.X.x.
+        A backward compatibility mode is provided in this release,
+        enabling these functions and other Release 1.4.x compatibility
+        features, but is available only when the HDF5 library is 
+        configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
+        The backward compatibility mode is not enabled in the 
+        binaries distributed by NCSA.
+
+        <dir>
+        <table border=0>
+        <tr valign="top" align="left"><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<code>function</code>
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<code>function</code>
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>&nbsp;
+
+</pre>
+        </td></tr>
+        </table>
+        </dir>
+        <p>
+	The above functions will eventually be removed from the HDF5 
+        distribution and from the <cite>HDF5 Reference Manual</cite>.
+	-->
+
+
+	The following function has been removed in this release.
+
+        <dl>
+          <dd>&nbsp;
+	  <dt>C++ wrapper:
+	  <dd><code>CompType::getMemberDims</code>
+        </dl>
+
+
+    <h3>Functions with Changed Syntax</h3>
+
+        The following functions have changed as noted.
+	<p>
+        <dl>
+        <dt>C functions:
+        <dt><code>H5Pset_fapl_multi</code>
+          <dd>The prototype for this function was changed from:
+                <ul>
+                <li><em>herr_t</em> <code>H5Pset_fapl_multi</code> 
+                    (<em>hid_t</em> <code>fapl_id</code>, 
+		     <em>const H5FD_mem_t *</em> <code>memb_map</code>,
+		     <em>const hid_t *</em> <code>memb_fapl</code>,
+		     <em>const char **</em> <code>memb_name</code>,
+		     <em>const haddr_t *</em> <code>memb_addr</code>,
+		     <em>hbool_t</em> <code>relax</code>)<br>
+                </ul>
+
+                to:
+
+                <ul>
+                <li><em>herr_t</em> <code>H5Pset_fapl_multi</code> 
+                    (<em>hid_t</em> <code>fapl_id</code>, 
+		     <em>const H5FD_mem_t *</em> <code>memb_map</code>,
+		     <em>const hid_t *</em> <code>memb_fapl</code>,
+		     <em>const char * const *</em> <code>memb_name</code>,
+		     <em>const haddr_t *</em> <code>memb_addr</code>,
+		     <em>hbool_t</em> <code>relax</code>)<br>
+                </ul>
+            <p>
+            This change should not appreciably affect application programs.
+
+        <dt><code>H5Tconvert</code>
+          <dd>The prototype for this function was changed from:
+                <ul>
+                <li><em>herr_t</em> <code>H5Tconvert</code> 
+                    (<em>hid_t</em> <code>src_id</code>, 
+		     <em>hid_t</em> <code>dst_id</code>,
+		     <em>hsize_t</em> <code>nelmts</code>,
+		     <em>void *</em> <code>buf</code>,
+		     <em>void *</em> <code>background</code>,
+		     <em>hid_t</em> <code>plist_id</code>)<br>
+                </ul>
+
+                to:
+
+                <ul>
+                <li><em>herr_t</em> <code>H5Tconvert</code> 
+                    (<em>hid_t</em> <code>src_id</code>, 
+		     <em>hid_t</em> <code>dst_id</code>,
+		     <em>size_t</em> <code>nelmts</code>,
+		     <em>void *</em> <code>buf</code>,
+		     <em>void *</em> <code>background</code>,
+		     <em>hid_t</em> <code>plist_id</code>)<br>
+                </ul>
+            <p>
+            This was changed to prevent overflows when <code>hsize_t</code> and
+            <code>size_t</code> types are different sizes.  Application code
+            may need to be modified to take this into account.  Application
+            code using this function may also be affected by the changes to
+            <code>H5Tregister</code> and <code>H5Tunregister</code> described
+            below.
+
+        <dt><code>H5Tregister</code> and <code>H5Tunregister</code>
+          <dd>These two routines are affected by the change to the 
+                <code>H5T_conv_t</code> typedef (described below) and may 
+                require application registered datatype conversion routines 
+                to be modified to conform to the changed typedef.
+
+
+
+        <dd>&nbsp;
+        <dt>C++ wrappers:
+        <dt><code>H5::Exception</code> and its subclasses
+          <dd>Constructors used by <code>H5::Exception</code> and its 
+	  subclasses that were previously overloaded to take char pointers 
+          have been removed.
+	  Constructors that passed in a reference of <code>string</code>
+          have been changed to pass by value.  
+          In addition, the default value of the detailed
+          message has been changed from <code>0/NULL</code> to 
+	  <code>DEFAULT_MSG</code> 
+	  (meaning "No detailed information provided").
+	  
+         <dd>&nbsp;
+       <dt><code>DSetCreatPropList::setLayout</code>
+	<dd>The prototype for <code>DSetCreatPropList::setLayout</code> 
+	    has been changed: the first parameter has been removed.
+
+        <!--
+        <dd>&nbsp;
+        <dt>Fortran90 subroutines:
+        <dt><code>h5subroutine_f?</code>
+          <dd>Change...
+        -->
+	  
+        </dl>
+
+
+    <h3>Constants with Changed Values</h3>
+    
+        The following library structures have changed as noted.
+	<p>
+        <dl>
+        <dt>C API:
+        <dt><code>H5T_conv_t</code>
+          <dd>This function pointer typedef's definition has been changed from:
+	
+                <ul>
+                <li><em>typedef herr_t</em> <code>(*H5T_conv_t)</code> 
+                    (<em>hid_t</em> <code>src_id</code>, 
+		     <em>hid_t</em> <code>dst_id</code>,
+		     <em>H5T_cdata_t *</em> <code>cdata</code>,
+		     <em>hsize_t</em> <code>nelmts</code>,
+		     <em>size_t</em> <code>buf_stride</code>,
+		     <em>size_t</em> <code>bkg_stride</code>,
+		     <em>void *</em> <code>buf</code>,
+		     <em>void *</em> <code>bkg</code>,
+		     <em>hid_t</em> <code>plist_id</code>)<br>
+                </ul>
+
+                to:
+
+                <ul>
+                <li><em>typedef herr_t</em> <code>(*H5T_conv_t)</code> 
+                    (<em>hid_t</em> <code>src_id</code>, 
+		     <em>hid_t</em> <code>dst_id</code>,
+		     <em>H5T_cdata_t *</em> <code>cdata</code>,
+		     <em>size_t</em> <code>nelmts</code>,
+		     <em>size_t</em> <code>buf_stride</code>,
+		     <em>size_t</em> <code>bkg_stride</code>,
+		     <em>void *</em> <code>buf</code>,
+		     <em>void *</em> <code>bkg</code>,
+		     <em>hid_t</em> <code>plist_id</code>)<br>
+                </ul>
+            <p>
+            This was changed to prevent overflows when <code>hsize_t</code> and
+            <code>size_t</code> types are different sizes.  Application code
+            may need to be modified to take this into account.
+
+
+    </dir>
+<p>&nbsp;
+
+
+
+
+
+
+
+
+
+
+
+<h2>Release 1.6.2 versus Release 1.6.1</h2> 
+
+<dir>
+
+This section lists the API-level changes that have been made in the 
+transition from the HDF5 Release 1.6.1 to Release 1.6.2.
+
+
+    <h3>New Functions and Tools</h3>
+        <dl>
+	  <dt>C functions:
+          <dd>The following C functions are new for Release 1.6.2 and 
+              are documented in the
+              <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+	
+              <table border="0">
+              <tr>
+                <td align="left" valign="top"><code>H5Iget_ref</code>
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+                <td align="left" valign="top"><em>int</em> <code>H5Iget_ref</code> 
+                    (<em>hid_t </em><code>obj_id</code>)<br>
+                    See <a href="../RM_H5I.html#Identify-GetRef">entry</a>.</td>
+              </tr>
+              <tr>
+                <td align="left" valign="top"><code>H5Iinc_ref</code>
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+                <td align="left" valign="top"><em>int</em> <code>H5Iinc_ref</code> 
+                    (<em>hid_t </em><code>obj_id</code>)<br>
+                    See <a href="../RM_H5I.html#Identify-IncRef">entry</a>.</td>
+              </tr>
+              <tr>
+                <td align="left" valign="top"><code>H5Idec_ref</code>
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+                <td align="left" valign="top"><em>int</em> <code>H5Idec_ref</code> 
+                    (<em>hid_t </em><code>obj_id</code>)<br>
+                    See <a href="../RM_H5I.html#Identify-DecRef">entry</a>.</td>
+              </tr>
+              </table>    
+	      
+          <dd>&nbsp;
+	  <dt>Fortran subroutines:
+          <dd>The following Fortran90 subroutines are new for Release 1.6.2 
+	      and are documented in the 
+              <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+              <table border="0">
+              <tr>
+                <td align="left" valign="top">Corresponding to the 
+                    new C functions listed above:<br>
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>h5iget_ref_f</code><br>
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>h5iinc_ref_f</code><br>
+                    &nbsp;&nbsp;&nbsp;&nbsp;<code>h5idec_ref_f</code>
+                    </td>
+                <td align="left" valign="top"> 
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+              </tr>
+              </table>    
+	  
+          <dd>&nbsp;
+	  <dt>Tools:
+          <dd>The following tools are new for Release 1.6.2 and are 
+              documented on the <a href="../Tools.html">Tools page</a> of the
+              <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+              <dd><code>h5pcc</code> is designed to aid in the compilation 
+                  of C applications that employ the HDF5 Library.
+              <dd><code>h5pfc</code> is designed to aid in the compilation 
+                  of Fortran90 applications that employ the HDF5 Library.
+        </dl>
+
+
+    <h3>Deleted Functions</h3>
+
+        None.
+
+	<!--
+	The following functions are deprecated in HDF5 Release X.X.x.
+        A backward compatibility mode is provided in this release,
+        enabling these functions and other Release 1.4.x compatibility
+        features, but is available only when the HDF5 library is 
+        configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
+        The backward compatibility mode is not enabled in the 
+        binaries distributed by NCSA.
+
+        <dir>
+        <table border=0>
+        <tr valign="top" align="left"><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<code>function</code>
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<code>function</code>
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>&nbsp;
+
+</pre>
+        </td></tr>
+        </table>
+        </dir>
+        <p>
+	The above functions will eventually be removed from the HDF5 
+        distribution and from the <cite>HDF5 Reference Manual</cite>.
+	-->
+
+
+    <h3>Functions with Changed Syntax</h3>
+
+        None.
+
+        <!--
+        The following functions have changed as noted.
+	
+        <dl>
+        <dt>C functions:
+        <dt><code>H5function?</code>
+          <dd>Change....
+	
+        <dd>&nbsp;
+        <dt>Fortran90 subroutines:
+        <dt><code>h5subroutine_f?</code>
+          <dd>Change...
+        </dl>
+        -->
+
+
+    <h3>Constants with Changed Values</h3>
+    
+        None.
+        
+
+    </dir>
+<p>&nbsp;
+
+
+
+
+
+
+
+
+
+
+<h2>Release 1.6.1 versus Release 1.6.0</h2> 
+
+<dir>
+
+This section lists the API-level changes that have been made in the 
+transition from the HDF5 Release 1.6.0 to Release 1.6.1.
+
+
+    <h3>New Functions and Tools</h3>
+        <dl>
+	  <dt>C functions:
+          <dd>The following C function is new for Release 1.6.1 and is documented in the
+              <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+	
+              <table border="0">
+              <tr>
+                <td align="left" valign="top"><code>H5Fget_freespace</code>
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+                <td align="left" valign="top"><em>hssize_t</em> <code>H5Fget_freespace</code> 
+                    (<em>hid_t </em><code>file_id</code>)<br>
+                    See <a href="../RM_H5F.html#File-GetFreespace">entry</a>.</td>
+              </tr>
+              </table>    
+	      
+          <dd>&nbsp;
+	  <dt>Fortran subroutines
+          <dd>The following Fortran90 subroutines were new for Release 1.6.0 
+	      but were not documented.  They are now included in the
+              <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+              <table border="0">
+              <tr>
+                <td align="left" valign="top"><code>h5get_fapl_mpiposix_f</code>
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+                <td align="left" valign="top"> 
+                    <code>h5pget_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr)</code><br>
+                    See <a href="../RM_H5P.html#Property-GetFaplMpiPosix">entry</a>.</td>
+              </tr><tr>
+                <td align="left" valign="top"><code>h5set_fapl_mpiposix_f</code>
+                    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+                <td align="left" valign="top"> 
+                    <code>h5pset_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr)</code><br>
+                    See <a href="../RM_H5P.html#Property-SetFaplMpiPosix">entry</a>.</td>
+              </tr>
+              </table>    
+	  
+          <dd>&nbsp;
+	  <dt>Tools:
+          <dd>Release 1.6.1 contains no new tools.
+	  <!--
+          <dd>The following tools are new for Release X.X.x and are included in the
+              <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+              <dd><code>new tool</code>
+	  -->
+        </dl>
+
+
+    <h3>Deleted Functions</h3>
+        None.
+	<!--
+	The following functions are deprecated in HDF5 Release X.X.x.
+        A backward compatibility mode is provided in this release,
+        enabling these functions and other Release 1.4.x compatibility
+        features, but is available only when the HDF5 library is 
+        configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
+        The backward compatibility mode is not enabled in the 
+        binaries distributed by NCSA.
+
+        <dir>
+        <table border=0>
+        <tr valign="top" align="left"><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<code>function</code>
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<code>function</code>
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>&nbsp;
+
+</pre>
+        </td></tr>
+        </table>
+        </dir>
+        <p>
+	The above functions will eventually be removed from the HDF5 
+        distribution and from the <cite>HDF5 Reference Manual</cite>.
+	-->
+
+
+    <h3>Functions with Changed Syntax</h3>
+        The following functions have changed as noted.
+	
+        <dl>
+        <dt>C functions:
+        <dt><code>H5Gget_obj_info</code>
+          <dd>The <code>H5G_stat_t</code> struct contains two new fields.<br>
+              This change will be transparent to existing applications, 
+              though those calling <code>H5Gget_obj_info</code> will have 
+              to be recompiled before linking with the updated library.
+	
+        <dd>&nbsp;
+        <dt>Fortran90 subroutines:
+        <dt><code>h5pset_cache_f</code>
+          <dd>The <code>rdcc_nbytes</code> parameter has changed from
+              <code><em>INTEGER</em></code> to <code><em>INTEGER(SIZE_T)</em></code> 
+              to better match the C API and the <code>h5pget_cache_f</code> 
+	      subroutine.
+        </dl>
+
+
+    <h3>Constants with Changed Values</h3>
+    
+        None.
+        
+
+    </dir>
+<p>&nbsp;
+
+
+
+
+
+
+
+
+<h2>Release 1.6.0 versus Release 1.4.5</h2> 
+
+<dir>
+
+This section lists the API-level changes that have been made in the 
+transition from the HDF5 Release 1.4.<i>x</i> series to Release 1.6.0.
+
+
+    <h3>New Functions and Tools</h3>
+        <dl>
+  <dt>The following functions are new for Release 1.6.0 and are included in the
+        <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+
+<dd>
+<table border="0">
+  <tr>
+    <td align="left" valign="top"><code>H5set_free_list_limits</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5set_free_list_limits</code> (<em>int</em> <code>reg_global_lim</code>, 
+        <em>int</em> <code>reg_list_lim</code>, <em>int</em> <code>arr_global_lim</code>,
+        <em>int</em> <code>arr_list_lim</code>, <em>int</em> <code>blk_global_lim</code>, 
+	<em>int</em> <code>blk_list_lim</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Dget_offset</code></td>
+    <td align="left" valign="top"><em>hsize_t</em> <code>H5Dget_offset</code> (<em>hid_t </em><code>dset_id</code>)</td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Dget_space_status</code></td>
+    <td align="left" valign="top"><em>hid_t</em> <code>H5Dget_space_status</code> (<em>hid_t</em> 
+	<code>dset_id</code>, <em>H5D_space_status_t *</em><code>status</code>)
+    </td> 
+  </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Fget_obj_ids</code></td>
+    <td align="left" valign="top">
+        <em>int </em><code>H5Fget_obj_ids</code> (<em>hid_t</em> <code>file_id</code>,
+        <em>unsigned int</em> <code>types</code>, 
+        <em>int</em> <code>max_objs</code>, <em>hid_t *</em><code>obj_id_list</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Fget_vfd_handle</code></td>
+    <td align="left" valign="top">
+        <em>herr_t </em><code>H5Fget_vfd_handle</code> (<em>hid_t</em> <code>file_id</code>,
+        <em>hid_t</em> <code>fapl_id</code>, <em>void *</em><code>file_handle</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Gget_num_objs</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Gget_num_objs</code> (<em>hid_t</em> <code>loc_id</code>,
+        <em>hsize_t* </em> <code>num_obj</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Gget_objname_by_idx</code></td>
+    <td align="left" valign="top">
+        <em>ssize_t</em> <code>H5Gget_objname_by_idx</code> (<em>hid_t</em> <code>group_id</code>, 
+        <em>hsize_t</em> <code>idx</code>, <em>char *</em><code>name</code>, 
+        <em>size_t*</em> <code>size</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Gget_objtype_by_idx</code></td>
+    <td align="left" valign="top">
+        <em>int</em> <code>H5Gget_objtype_by_idx</code> (<em>hid_t</em> <code>group_id</code>, 
+        <em>hsize_t</em> <code>idx</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Iget_name</code></td>
+    <td align="left" valign="top">
+        <em>ssize_t</em> <code>H5Iget_name</code> (<em>hid_t</em> <code>obj_id</code>,
+	<em>char *</em><code>name</code>, <em>size_t</em> <code>size</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pall_filters_avail</code></td>
+    <td align="left" valign="top">
+        <em>htri_t</em> <code>H5Pall_filters_avail</code> (<em>hid_t</em> <code>dcpl_id</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pfill_value_defined</code></td>
+    <td align="left" valign="top">
+        <em>herr_t </em><code>H5Pfill_value_defined</code> (<em>hid_t</em> <code>plist_id</code>,
+        <em>H5D_fill_value_t *</em><code>status</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pget_alloc_time</code></td>
+    <td align="left" valign="top">
+        <em>herr_t </em><code>H5Pget_alloc_time</code> (<em>hid_t</em> <code>plist_id</code>,
+        <em>H5D_alloc_time_t *</em><code>alloc_time</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pget_edc_check</code></td>
+    <td align="left" valign="top">
+        <em>H5Z_EDC_t</em> <code>H5Pget_edc_check</code> (<em>hid_t</em> 
+        <code>plist</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pget_family_offset</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pget_family_offset</code> (<em>hid_t</em> <code>fapl_id</code>,
+        <em>hsize_t *</em><code>offset</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pget_fapl_mpiposix</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pget_fapl_mpiposix</code> (<em>hid_t</em> <code>fapl_id</code>,
+        <em>MPI_Comm *</em><code>comm</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pget_fclose_degree</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pget_fclose_degree</code>(<em>hid_t</em> <code>fapl_id</code>, 
+        <em>H5F_close_degree_t *</em><code>fc_degree</code>) 
+        <br>
+        <i>(This item corrected 14 September 2004.)</i>
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pget_fill_time</code></td>
+    <td align="left" valign="top">
+        <em>herr_t </em><code>H5Pget_fill_time</code> (<em>hid_t</em> <code>plist_id</code>,
+        <em>H5D_fill_time_t *</em><code>fill_time</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pget_filter_by_id</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pget_filter_by_id</code> (<em>hid_t</em> <code>plist_id</code>,
+        <em>H5Z_filter_t</em> <code>filter</code>, <em>unsigned int *</em><code>flags</code>,
+        <em>size_t *</em><code>cd_nelmts</code>, <em>unsigned int</em> <code>cd_values[]</code>,
+        <em>size_t</em> <code>namelen</code>, <em>char *</em><code>name[]</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pget_hyper_vector_size</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pget_hyper_vector_size</code> (<em>hid_t</em> <code>dxpl_id</code>,
+        <em>size_t *</em><code>vector_size</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pget_multi_type</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pget_multi_type</code> (<em>hid_t</em> <code>fapl_id</code>,
+        <em>H5FD_mem_t *</em><code>type</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pmodify_filter</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pmodify_filter</code> (<em>hid_t</em> <code>plist</code>,
+        <em>H5Z_filter_t</em> <code>filter</code>, <em>unsigned int</em> <code>flags</code>,
+        <em>size_t</em> <code>cd_nelmts</code>, <em>const unsigned int</em> <code>cd_values[]</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pset_alloc_time</code></td>
+    <td align="left" valign="top">
+        <em>herr_t </em><code>H5Pset_alloc_time</code> (<em>hid_t</em> 
+	<code>plist_id</code>, <em>H5D_alloc_time_t</em> <code>alloc_time</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pset_edc_check</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pset_edc_check</code> (<em>hid_t</em> 
+	<code>plist</code>, <em>H5Z_EDC_t</em> <code>check</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pset_family_offset</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pset_family_offset</code> (<em>hid_t</em> <code>fapl_id</code>,
+        <em>hsize_t</em> <code>offset</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pset_fapl_mpiposix</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pset_fapl_mpiposix</code> (<em>hid_t</em> <code>fapl_id</code>,
+        <em>MPI_Comm</em> <code>comm</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pset_fclose_degree</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pset_fclose_degree</code>(<em>hid_t</em> <code>fapl_id</code>, 
+        <em>H5F_close_degree_t</em> <code>fc_degree</code>) 
+        <br>
+        <i>(This item corrected 14 September 2004.)</i>
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pset_fill_time</code></td>
+    <td align="left" valign="top">
+        <em>herr_t </em><code>H5Pset_fill_time</code> (<em>hid_t</em> <code>plist_id</code>,
+        <em>H5D_fill_time_t</em> <code>fill_time</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pset_filter</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pset_filter</code> 
+        (<em>hid_t</em> <code>plist</code>, <em>H5Z_filter_t</em> <code>filter</code>,
+        <em>unsigned int</em> <code>flags</code>, <em>size_t</em> <code>cd_nelmts</code>,
+        <em>const unsigned int</em> <code>cd_values[])</code>
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pset_filter_callback</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pset_filter_callback</code> (<em>hid_t</em> 
+        <code>plist</code>, <em>H5Z_filter_func_t</em> <code>func</code>,
+        <em>void *</em><code>op_data</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pset_fletcher32</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pset_fletcher32</code> (<em>hid_t</em> 
+        <code>plist</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pset_hyper_vector_size</code>&nbsp;</td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pset_hyper_vector_size</code> (<em>hid_t</em> <code>dxpl_id</code>,
+        <em>size_t</em> <code>vector_size</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pset_multi_type</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pset_multi_type</code> (<em>hid_t</em> <code>fapl_id</code>,
+        <em>H5FD_mem_t</em> <code>type</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pset_shuffle</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pset_shuffle</code> (<em>hid_t</em> <code>plist_id</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Pset_szip</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Pset_szip</code> (<em>hid_t</em> <code>plist</code>,
+        <em>unsigned int</em> <code>options_mask</code>, <em>unsigned int</em> 
+	<code>pixels_per_block</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Rget_object_type</code></td>
+    <td align="left" valign="top">
+        <em>int</em> <code>H5Rget_object_type</code> (<em>hid_t</em> <code>id</code>,
+        <em>void *</em><code>ref</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Sget_select_type</code></td>
+    <td align="left" valign="top">
+        <em>H5S_sel_type</em> <code>H5Sget_select_type</code> (<em>hid_t</em> <code>space_id</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Tdetect_class</code></td>
+    <td align="left" valign="top">
+        <em>htri_t </em><code>H5Tdetect_class</code> (<em>hid_t</em> <code>dtype_id</code>,
+        <em>H5T_class_t</em> <code>dtype_class</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Tget_native_type</code></td>
+    <td align="left" valign="top">
+        <em>hid_t</em> <code>H5Tget_native_type</code> (<em>hid_t</em> <code>type_id</code>,
+        <em>H5T_direction_t</em> <code>direction</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Tis_variable_str</code></td>
+    <td align="left" valign="top">
+        <em>htri_t </em><code>H5Tis_variable_str</code> (<em>hid_t </em><code>dtype_id</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Zfilter_avail</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Zfilter_avail</code> (<em>H5Z_filter_t</em> <code>filter</code>)
+    </td>
+  </tr>
+  <tr>
+    <td align="left" valign="top"><code>H5Zunregister</code></td>
+    <td align="left" valign="top">
+        <em>herr_t</em> <code>H5Zunregister</code> (<em>H5Z_filter_t</em> <code>filter</code>)
+    </td>
+  </tr>   
+</table>    
+    </dd>
+    <dd>&nbsp;</dd>
+
+  </dt>
+  <dt>The following tools are new for Release 1.6.0 and are included in the
+        <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+    <dd><code>h5diff</code>
+    <dd><code>h5import</code>
+    <dd><code>h5fc</code> 
+    <dd><code>h5c++</code> 
+    <dd><code>h5perf</code>
+    <dd><code>h5redeploy</code>
+  </dt>
+</dl>
+
+
+    <h3>Deleted Functions</h3>
+        The following functions are deprecated in HDF5 Release 1.6.0.
+        A backward compatibility mode is provided in this release,
+        enabling these functions and other Release 1.4.x compatibility
+        features, but is available only when the HDF5 library is 
+        configured with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>.
+        The backward compatibility mode is not enabled in the 
+        binaries distributed by NCSA.
+
+        <dir>
+        <table border=0>
+        <tr valign="top" align="left"><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<code>H5Pset_hyper_cache</code>
+<code>H5Pget_hyper_cache</code>
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<code>H5Rget_object_type</code>
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>&nbsp;
+
+</pre>
+        </td></tr>
+        </table>
+        </dir>
+        <p>
+	The above functions will eventually be removed from the HDF5 
+        distribution and from the <cite>HDF5 Reference Manual</cite>.
+
+
+    <h3>Functions with Changed Syntax</h3>
+        The following functions have changed as noted.
+        <dir>
+        <dl>
+        <dt>C functions:
+        <dt><code>H5FDflush and VFL "flush" callbacks</code>
+          <dd>An extra parameter <code>closing</code> has been added to 
+                these functions,
+                to allow the library to indicate that the file will be closed
+                following the call to "flush".  Actions in the "flush" call
+                that are duplicated in the VFL "close" call may be omitted by
+                the VFL driver.
+        <dt>* <code>H5Gget_objtype_by_idx</code>
+          <dd>The function return type has changed from 
+              <code><em>int</em></code> to
+              the enumerated type <code><em>H5G_obj_t</em></code>.
+        <dt>* <code>H5Pset(get)_buffer</code>
+          <dd>The <code>size</code> parameter for <code>H5Pset_buffer</code> 
+                has changed from type <code><em>hsize_t</em></code> to 
+                <code><em>size_t</em></code>. 
+          <dd>The <code>H5Pget_buffer</code> return type has similarly
+                changed from <code><em>hsize_t</em></code> to 
+                <code><em>size_t</em></code>. 
+        <dt>* <code>H5Pset(get)_cache</code>
+          <dd>The <code>rdcc_nbytes</code> parameter has changed from type 
+                <code><em>int</em></code> to 
+                <code><em>size_t</em></code>. 
+                <br>
+                <i>(This item corrected 3 March 2004.)</i>
+        <dt>* <code>H5Pset_fapl_log</code>
+          <dd>The <code>verbosity</code> parameter has been removed.
+          <dd>Two new parameters have been added:  
+              <code>flags</code> of type <code><em>unsigned</em></code> and 
+              <code>buf_size</code> of type <code><em>size_t</em></code>. 
+        <dt>* <code>H5Pset(get)_fapl_mpiposix</code>
+          <dd>A <code>use_gpfs</code> parameter of type
+                <code><em>hbool_t</em></code> has been added.
+        <dt>* <code>H5Pset(get)_sieve_buf_size</code>
+          <dd>The <code>size</code> parameter has changed from type 
+                <code><em>hsize_t</em></code> to 
+                <code><em>size_t</em></code>. 
+        <dt>* <code>H5Pset(get)_sym_k</code>
+          <dd>The <code>lk</code> parameter has changed from type 
+                <code><em>int</em></code> to 
+                <code><em>unsigned</em></code>. 
+        <dt>* <code>H5Sget_select_bounds</code>
+          <dd>The <code>start</code> and <code>end</code> parameters have 
+                changed from type <code><em>hsize_t *</em></code>
+                to <code><em>hssize_t *</em></code> to better match the 
+                rest of the dataspace API.
+        <dt>* <code>H5Zregister</code>
+          <dd>This function is substantially revised in Release 1.6.0 with
+              a new <code>H5Z_class_t</code> struct and 
+              new <i>set local</i> and <i>can apply</i> callback functions.
+        <dt>&nbsp;
+        <dt>Fortran90 functions:
+        <dt><code>h5pset(get)_fapl_core_f</code>
+          <dd>The <code>backing_store</code> parameter has changed from
+              <code><em>INTEGER</em></code> to <code><em>LOGICAL</em></code> 
+              to better match the C API.
+        <dt><code>h5pset(get)_preserve_f</code>
+          <dd>The <code>flag</code> parameter has changed from
+              <code><em>INTEGER</em></code> to <code><em>LOGICAL</em></code> 
+              to better match the C API.
+        </dl>
+        </dir>
+
+        <p>
+        Backward compatibility with the Release 1.4.x syntax is available
+        for the functions indicated above with a leading asterisk (*).
+        The backward compatibility features are available only when the 
+        HDF5 library is configured with the flag 
+        <code>H5_WANT_H5_V1_4_COMPAT</code>,
+        is not enabled in the binaries distributed by NCSA, and
+        will eventually be removed from the HDF5 distribution. 
+        
+
+    <h3>Constants with Changed Values</h3>
+        
+
+</dir>
+<p>&nbsp;
+
+
+
+
+
+
+<h2>Release 1.4.5 versus Release 1.4.4</h2> 
+<dir>
+    <h3>C Library</h3>
+    <dir>
+
+      <b>Added functions:</b>
+        <dir>
+        <table border=0>
+        <tr valign=top align=left><td>
+<pre>
+herr_t H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm);
+herr_t H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/);
+</pre>
+        </td></tr>
+        </table>
+        </dir>
+
+      <b>Changed functions:</b>
+        <dir>
+        The following functions have changed behavior.
+        <p>
+        <table border=0>
+        <tr valign=top align=left><td>
+        <code>H5Pset_fapl_mpio&nbsp;&nbsp;</code><br>
+        <code>H5Pget_fapl_mpio</code><br>
+        <code>H5Fcreate</code><br>
+        <code>H5Fopen</code><br>
+        <code>H5Fclose</code>
+        </td><td>
+    Previously, the Communicator and Info object arguments supplied
+    to <code>H5Pset_fapl_mpio</code> were stored in the property with 
+    its handle values.  
+    This meant changes to the communicator or the Info object
+    after calling <code>H5Pset_fapl_mpio</code> would affect the how 
+    the property list functioned.  
+    This was also the case when <code>H5Fopen/create</code> operated.
+    They just stored the handle value.  This is not according to the
+    MPI-2 defined behavior of how Info objects should be handled. 
+    (MPI-2 defines Info objects must be parsed when called.)<br>
+    <code>H5Pset_fapl_mpio</code> now stores a duplicate of each of 
+    the communicator and Info object.<br>
+    <code>H5Pget_fapl_mpio</code> now returns a duplicate of its 
+    stored communicator and Info object.  
+    It is now the responsibility of the applications to free
+    those objects when done.<p>
+    <code>H5Fcreate</code> and <code>H5Fopen</code> also store 
+    a duplicate of the communicator and Info
+    object supplied by the file access property List.
+    <code>H5Fclose</code> frees the duplicates.<p>
+    Advice to users: User applications should release the communicator and
+    Info object returned by <code>H5Pget_fapl_mpio</code> when they are 
+    no longer needed.
+        </td></tr>
+        </table>
+        </dir>
+
+
+
+      <b>Removed functions:</b>
+        <dir>
+        <table border=0>
+        <tr valign=top align=left><td>
+None
+<!--
+<pre>
+List deleted function(s) here.  Remove forced spaces. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</pre>
+-->
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<!-- List deleted function(s) here.  Remove forced spaces. -->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</pre>
+        </td></tr>
+        </table>
+        </dir>
+
+      There were no other public API changes in the C library for this release.
+
+    </dir>
+    <h3>Fortran90 Library</h3>
+    <dir>
+
+
+      The following missing Fortran functions were added:
+<br>
+<br>
+      <code> h5get_libversion_f, h5check_version_f, h5garbage_collect_f, h5dont_atexit_f </code>
+<br>
+      <code> h5tget_member_index_f, h5tvlen_create_f </code>
+<br>
+      <code> h5dget_storage_size_f, h5dvlen_get_max_len_f , h5dwrite_vl_f, h5dread_vl_f</code>
+<br>
+<br>
+      Only <code>integer, real</code> and
+      <code>character</code> types are supported for VL datatypes.
+
+    </dir>
+</dir>
+
+
+<!-- Document API CHANGES ONLY in this file. -->
+
+<h2>Release 1.4.4  versus Release 1.4.3</h2> 
+<dir>
+    <h3>C Library</h3>
+    <dir>
+
+      <b>Added functions:</b>
+        <dir>
+        <table border=0>
+        <tr valign=top align=left><td>
+<pre>
+H5Pget_small_data_block_size
+H5Pset_small_data_block_size
+H5Tget_member_index
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<!-- List added function(s) here.  Remove forced spaces. -->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</pre>
+        </td></tr>
+        </table>
+        </dir>
+
+      <b>Changed functions:</b>
+        <dir>
+        <table border=0>
+        <tr valign=top align=left><td>
+None
+<!--
+<pre>
+List deleted function(s) here.  Remove forced spaces. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</pre>
+-->
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<!-- List deleted function(s) here.  Remove forced spaces. -->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</pre>
+        </td></tr>
+        </table>
+        </dir>
+
+      <b>Removed functions:</b>
+        <dir>
+        <table border=0>
+        <tr valign=top align=left><td>
+None
+<!--
+<pre>
+List deleted function(s) here.  Remove forced spaces. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</pre>
+-->
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<!-- List deleted function(s) here.  Remove forced spaces. -->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</pre>
+        </td></tr>
+        </table>
+        </dir>
+
+      There were no other public API changes in the C library for this release.
+
+    </dir>
+    <h3>Fortran90 Library</h3>
+    <dir>
+
+      <code>h5dwrite_f, h5dread_f, h5awrite_f, h5aread_f </code>were  overloaded 
+      with <code>dims</code> argument to be assumed size array of type <code>INTEGER(HSIZE_T).</code> 
+      We recommend to use the subroutines with the new type.  Module subroutines 
+      that accept <code>dims</code> as <code>INTEGER</code> array of size <code>7</code> will be deprecated in the 1.6.0 release.
+
+    </dir>
+</dir>
+
+<h2>Release 1.4.3 versus Release 1.4.2</h2> 
+<dir>
+    <h3>C Library</h3>
+    <dir>
+
+      <b>Removed function:</b>
+        <dir>
+        <table border=0>
+        <tr valign=top align=left><td>
+<pre>
+H5Pset_fapl_dpss </pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<!-- new deleted functions here.  Remove forced spaces. -->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+<!-- new deleted functions here.  Remove forced spaces. -->&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</pre>
+        </td></tr>
+        </table>
+        </dir>
+
+      There were no other public API changes in the C library for this release.
+
+    </dir>
+    <h3>Fortran90 Library</h3>
+    <dir>
+
+      There were no changes to the public Fortran90 APIs for this release.
+
+    </dir>
+</dir>
+
+<h2>Release 1.4.2 versus Release 1.4.1</h2> 
+<dir>
+    <h3>C Library</h3>
+    The HDF5 Release 1.4.2 C library is a "Bugfix Release"; 
+    there are no API changes in the underlying HDF5 library.
+
+    <h3>Fortran90 Library</h3>
+    The following functions in the HDF5 Release 1.4.2 Fortran90 library
+    have an additional parameter, <code>dims</code>, that was not present 
+    in Release 1.4.1:
+
+<dir>
+<pre>
+<font color=red>h5aread_f</font>(attr_id, memtype_id,  buf, dims, hdferr)
+<font color=red>h5awrite_f</font>(attr_id, memtype_id,  buf, dims, hdferr)
+<font color=red>h5dread_f</font>(dset_id, mem_type_id, buf, dims, hdferr, mem_space_id, &
+           file_space_id, xfer_prp)
+<font color=red>h5dwrite_f</font>(dset_id, mem_type_id, buf, dims, hdferr, mem_space_id, &
+           file_space_id, xfer_prp)
+</pre>
+</dir>
+
+    The <code>dims</code> parameter enables library portability 
+    between the UNIX and Microsoft Windows platforms.
+
+</dir>
+
+
+<h2>Release 1.4.1 versus Release 1.4.0</h2> 
+<dir>
+    Release 1.4.1 is a "Tools Release"; there are no API changes in the 
+    underlying HDF5 library.
+</dir>
+
+
+<h2>Release 1.4.0 versus Release 1.2.2</h2> 
+
+<dir>
+
+    Several functions were added to or removed from the HDF5 library
+    in the development of Release 1.4.0.
+    A few functions have been modified in minor ways.
+
+    <h3>New Functions</h3>
+        The following functions are new for Release 1.4.0 and are included in the
+        <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+
+<dir>
+<pre>
+herr_t <font color=red>H5Dvlen_get_buf_size</font> (hid_t dataset_id, hid_t type_id, 
+           hid_t space_id, hsize_t *size);
+herr_t <font color=red>H5Epush</font> (const char *file, const char *func,
+           unsigned line, H5E_major_t maj, H5E_minor_t min, 
+           const char *str);
+hid_t <font color=red>H5Pget_driver</font> (hid_t plist_id);
+void *<font color=red>H5Pget_driver_info</font> (hid_t plist_id);
+herr_t <font color=red>H5Pget_dxpl_mpio</font> (hid_t dxpl_id, 
+           H5FD_mpio_xfer_t *xfer_mode/*out*/);
+herr_t <font color=red>H5Pget_dxpl_multi</font> (hid_t dxpl_id, 
+           hid_t *memb_dxpl/*out*/);
+herr_t <font color=red>H5Pget_fapl_core</font> (hid_t fapl_id, size_t *increment/*out*/,
+           hbool_t *backing_store/*out*/) 
+herr_t <font color=red>H5Pget_fapl_family</font> (hid_t fapl_id, 
+           hsize_t *memb_size/*out*/, hid_t *memb_fapl_id/*out*/);
+herr_t <font color=red>H5Pget_fapl_mpio</font> (hid_t fapl_id, MPI_Comm *comm/*out*/,
+           MPI_Info *info/*out*/);
+herr_t <font color=red>H5Pget_fapl_multi</font> (hid_t fapl_id, 
+           H5FD_mem_t *memb_map/*out*/, hid_t *memb_fapl/*out*/, 
+           char **memb_name/*out*/, haddr_t *memb_addr/*out*/, 
+           hbool_t *relax/*out*/);
+herr_t <font color=red>H5Pget_fapl_stream</font> (hid_t fapl_id,
+           H5FD_stream_fapl_t *fapl /*out*/ );
+herr_t <font color=red>H5Pget_meta_block_size</font> (hid_t fapl_id, 
+           hsize_t *size/*out*/);
+herr_t <font color=red>H5Pget_sieve_buf_size</font> (hid_t fapl_id, 
+           hsize_t *size/*out*/);
+herr_t <font color=red>H5Pset_driver</font> (hid_t plist_id, hid_t driver_id,
+           const void *driver_info);
+herr_t <font color=red>H5Pset_dxpl_mpio</font> (hid_t dxpl_id, 
+           H5FD_mpio_xfer_t xfer_mode);
+herr_t <font color=red>H5Pset_dxpl_multi</font> (hid_t dxpl_id, 
+           const hid_t *memb_dxpl);
+herr_t <font color=red>H5Pset_fapl_core</font> (hid_t fapl_id, size_t increment, 
+           hbool_t backing_store)
+herr_t <font color=red>H5Pset_fapl_family</font> (hid_t fapl_id, hsize_t memb_size,
+           hid_t memb_fapl_id);
+herr_t <font color=red>H5Pset_fapl_log</font> (hid_t fapl_id, char *logfile, 
+           int verbosity);
+herr_t <font color=red>H5Pset_fapl_mpio</font> (hid_t fapl_id, MPI_Comm comm, 
+           MPI_Info info);
+herr_t <font color=red>H5Pset_fapl_multi</font> (hid_t fapl_id, 
+           const H5FD_mem_t *memb_map, const hid_t *memb_fapl, 
+           const char **memb_name, const haddr_t *memb_addr, 
+           hbool_t relax);
+herr_t <font color=red>H5Pset_fapl_sec2</font> (hid_t fapl_id);
+herr_t <font color=red>H5Pset_fapl_split</font> (hid_t fapl, const char *meta_ext,
+           hid_t meta_plist_id, const char *raw_ext,
+           hid_t raw_plist_id);
+herr_t <font color=red>H5Pset_fapl_stdio</font> (hid_t fapl_id);
+herr_t <font color=red>H5Pset_fapl_stream</font> (hid_t fapl_id,
+           H5FD_stream_fapl_t *fapl);
+herr_t <font color=red>H5Pset_meta_block_size</font>(hid_t fapl_id, hsize_t size);
+herr_t <font color=red>H5Pset_sieve_buf_size</font>(hid_t fapl_id, hsize_t size);
+hid_t <font color=red>H5Tarray_create</font> (hid_t base, int rank, const hsize_t dims[], 
+           const int perm[])
+int <font color=red>H5Tget_array_dims</font> (hid_t adtype_id, hsize_t *dims[], int *perm[])
+int <font color=red>H5Tget_array_ndims</font> (hid_t adtype_id)
+</pre>
+</dir>
+
+
+        <p>
+        The following functions are new for Release 1.4.0, but 
+        are intended only for use in specialized environments.
+        These are also included in the
+        <a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+
+<dir>
+<pre>
+herr_t <font color=red>H5Pget_fapl_dpss</font> (hid_t fapl_id);
+herr_t <font color=red>H5Pget_fapl_gass</font> (hid_t fapl_id, GASS_Info *info/*out*/);
+herr_t <font color=red>H5Pget_fapl_srb</font> (hid_t fapl_id, SRB_Info *info);
+herr_t <font color=red>H5Pset_fapl_dpss</font> (hid_t fapl_id);
+herr_t <font color=red>H5Pset_fapl_gass</font> (hid_t fapl_id, GASS_Info info);
+herr_t <font color=red>H5Pset_fapl_srb</font> (hid_t fapl_id, SRB_Info info);
+</pre>
+</dir>
+
+
+        <p>
+        The following functions are new for Release 1.4.0 but are intended 
+        only for driver development work, not for general use.  
+        They are listed in the
+        <a href="../TechNotes/VFLfunc.html"><cite>List of VFL Functions</cite></a>
+        document in the 
+        <a href="../TechNotes.html"><cite>HDF5 Technical Notes</cite></a>.
+        They are described in detail only in the source code and 
+        do not appear in the <cite>HDF5 Reference Manual</cite>.
+
+<dir>
+<pre>
+haddr_t <font color=red>H5FDalloc</font> (H5FD_t *file, H5FD_mem_t type, 
+          hsize_t size);
+herr_t <font color=red>H5FDclose</font> (H5FD_t *file);
+int <font color=red>H5FDcmp</font> (const H5FD_t *f1, const H5FD_t *f2);
+herr_t <font color=red>H5FDflush</font> (H5FD_t *file);
+herr_t <font color=red>H5FDfree</font> (H5FD_t *file, H5FD_mem_t type, 
+          haddr_t addr, hsize_t size);
+haddr_t <font color=red>H5FDget_eoa</font> (H5FD_t *file);
+haddr_t <font color=red>H5FDget_eof</font> (H5FD_t *file);
+H5FD_t *<font color=red>H5FDopen</font> (const char *name, unsigned flags, 
+          hid_t fapl_id, haddr_t maxaddr);
+int <font color=red>H5FDquery</font> (const H5FD_t *f, unsigned long *flags);
+herr_t <font color=red>H5FDread</font> (H5FD_t *file, hid_t dxpl_id, haddr_t addr, 
+          hsize_t size, void *buf/*out*/);
+haddr_t <font color=red>H5FDrealloc</font> (H5FD_t *file, H5FD_mem_t type, 
+          haddr_t addr, hsize_t old_size, hsize_t new_size);
+hid_t <font color=red>H5FDregister</font> (const H5FD_class_t *cls);
+herr_t <font color=red>H5FDset_eoa</font> (H5FD_t *file, haddr_t eof);
+herr_t <font color=red>H5FDunregister</font> (hid_t driver_id);
+herr_t <font color=red>H5FDwrite</font> (H5FD_t *file, H5FD_mem_t type, 
+          hid_t dxpl_id, haddr_t addr, hsize_t size, 
+          const void *buf);
+</pre>
+</dir>
+
+
+    <h3>Deleted Functions</h3>
+        The following functions have been removed from the HDF5 library
+        and from the <cite>HDF5 Reference Manual</cite>.
+        <dir>
+        <table>
+        <tr valign=top align=left><td>
+<pre>
+H5Pget_core
+H5Pget_driver
+H5Pget_family
+H5Pget_mpi
+H5Pget_sec2
+H5Pget_split
+H5Pget_stdio
+H5Pget_xfer
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+H5Pset_core
+H5Pset_family
+H5Pset_mpi
+H5Pset_sec2
+H5Pset_split
+H5Pset_stdio
+H5Pset_xfer
+</pre>
+        </td><td>
+        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+        </td><td>
+<pre>
+H5RAclose
+H5RAcreate
+H5RAopen
+H5RAread
+H5RAwrite
+H5Tget_member_dims
+H5Tinsert_array
+</pre>
+        </td></tr>
+        </table>
+        </dir>
+        Note that the entire H5RA interface, an experimental interface for 
+        ragged arrays, has been removed from the library.
+
+
+    <h3>Functions with Changed Syntax</h3>
+        The following functions have changed slightly.
+        <dir>
+        <dl>
+        <dt><code>H5Pget_buffer</code>
+          <dd>Return type has changed to <em>hsize_t</em>.
+        <dt><code>H5Pset_buffer</code>
+          <dd>The type of the <code>size</code> parameter has changed 
+              to <em>hsize_t</em>.
+        <dt><code>H5Tconvert</code>
+          <dd>The type of the <code>nelmts</code> parameter has changed 
+              to <em>hsize_t</em>.
+        </dl>
+        </dir>
+
+    <h3>Constants with Changed Values</h3>
+        The values of the constants <code>H5P_DEFAULT</code> and 
+        <code>H5S_ALL</code> have been changed from <code>-2</code>
+        to <code>0</code>.   
+        These default values had to be special-cased in situations where
+        they could be returned to distinguish them from error values.
+
+</dir>
+<p>&nbsp;
+
+<h2>Migration from Release 1.2.2 to Release 1.4.<em>x</em></h2> 
+
+<dir>
+    <h3>H5Tinsert_array</h3>
+    The functionality of <code>H5Tinsert_array</code> has been replaced by 
+    <code>H5Tarray_create</code>.
+    Here is an example of changing code from <code>H5Tinsert_array</code>
+    to <code>H5Tarray_create</code>.
+<pre>
+V1.2.2
+{
+    struct tmp_struct {
+        int a;
+        float f[3];
+        double d[2][4];
+    };
+    size_t f_dims[1]={3};
+    size_t d_dims[2]={2,4};
+    hid_t compound_type;
+
+    compound_type=H5Tcreate(H5T_COMPOUND,sizeof(struct tmp_struct));
+    H5Tinsert(compound_type,"a",HOFFSET(struct tmp_struct,a),H5T_NATIVE_INT);
+    H5Tinsert_array(compound_type,"f",HOFFSET(struct tmp_struct,f),1,f_dims,NULL,H5T_NATIVE_FLOAT);
+    H5Tinsert_array(compound_type,"d",HOFFSET(struct tmp_struct,d),2,d_dims,NULL,H5T_NATIVE_DOUBLE);
+}
+
+V1.4.0
+{
+    struct tmp_struct {
+        int a;
+        float f[3];
+        double d[2][4];
+    };
+    hsize_t f_dims[1]={3};
+    hsize_t d_dims[2]={2,4};
+    hid_t compound_type;
+    hid_t array_type;
+
+    compound_type=H5Tcreate(H5T_COMPOUND,sizeof(struct tmp_struct));
+    H5Tinsert(compound_type,"a",HOFFSET(struct tmp_struct,a),H5T_NATIVE_INT);
+    array_type=H5Tarray_create(H5T_NATIVE_FLOAT,1,f_dims,NULL);
+    H5Tinsert(compound_type,"f",HOFFSET(struct tmp_struct,f),array_type);
+    H5Tclose(array_type);
+    array_type=H5Tarray_create(H5T_NATIVE_DOUBLE,2,d_dims,NULL);
+    H5Tinsert(compound_type,"d",HOFFSET(struct tmp_struct,d),array_type);
+    H5Tclose(array_type);
+}
+
+</pre>
+</dir>
+
+
+<h2>This and Prior Releases: The RELEASE.txt and HISTORY.txt Files</h2>
+
+<dir>
+    The HDF5 source code, as distributed to users and developers, 
+    contains two files that will be of interest to readers of this 
+    document.  Both files are located at the top level of the 
+    source code tree and are duplicated here for your reference:
+    <p>
+    <dl>
+      <dt><a href="RELEASE.txt" target="ExtWin">RELEASE.txt</a>
+        <dd>Technical notes regarding the release, including 
+            new features and the changes since the last release, 
+            notes regarding new or revised utilities,
+            notes regarding alternative language APIs (Fortran90, C++),
+            bugs fixed since the last release,
+            platforms on which the release has been tested, and
+            known problems. 
+            This is the file commonly known as "the release notes."
+      <p>
+      <dt><a href="HISTORY.txt" target="ExtWin">HISTORY.txt</a>
+        <dd>A release-by-release history of the HDF5 library.  
+            This file is a compiled set of the release notes
+            (i.e., the RELEASE.txt files) from prior releases.
+    <dl>
+</dir>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="../index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="../H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+    <a href="../RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+    <a href="../ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><!-- Created: Spring 1999 -->
+<!-- hhmts start -->
+Last modified: 10 November 2005 
+<!-- hhmts end -->
+
+</body>
+</html>


Property changes on: packages/hdf5/branches/upstream/current/doc/html/ADGuide/Changes.html
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/doc/html/ADGuide/Dependencies
===================================================================

Added: packages/hdf5/branches/upstream/current/doc/html/ADGuide/H4toH5Mapping.pdf
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ADGuide/H4toH5Mapping.pdf	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ADGuide/H4toH5Mapping.pdf	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,37578 @@
+%PDF-1.3
+%âãÏÓ
+3950 0 obj
+<< 
+/Linearized 1 
+/O 3953 
+/H [ 1640 859 ] 
+/L 823200 
+/E 131174 
+/N 21 
+/T 744080 
+>> 
+endobj
+                                                  xref
+3950 39 
+0000000016 00000 n
+0000001135 00000 n
+0000001496 00000 n
+0000002499 00000 n
+0000002929 00000 n
+0000003164 00000 n
+0000003396 00000 n
+0000003930 00000 n
+0000004160 00000 n
+0000004616 00000 n
+0000004828 00000 n
+0000005375 00000 n
+0000005418 00000 n
+0000005449 00000 n
+0000006060 00000 n
+0000006084 00000 n
+0000008071 00000 n
+0000008095 00000 n
+0000009976 00000 n
+0000010000 00000 n
+0000011734 00000 n
+0000011758 00000 n
+0000013386 00000 n
+0000013410 00000 n
+0000015146 00000 n
+0000015170 00000 n
+0000016851 00000 n
+0000016875 00000 n
+0000018601 00000 n
+0000018625 00000 n
+0000020373 00000 n
+0000020453 00000 n
+0000039275 00000 n
+0000039483 00000 n
+0000063151 00000 n
+0000065830 00000 n
+0000089932 00000 n
+0000001640 00000 n
+0000002476 00000 n
+trailer
+<<
+/Size 3989
+/Info 3944 0 R 
+/Root 3951 0 R 
+/Prev 744068 
+/ID[<c44f9ff94a078cf1a842c8465d2f0318><f8ab1f204d72b45346d7940a6afbbe37>]
+>>
+startxref
+0
+%%EOF
+    
+3951 0 obj
+<< 
+/Type /Catalog 
+/Pages 3947 0 R 
+/Metadata 3945 0 R 
+/Outlines 93 0 R 
+/OpenAction [ 3953 0 R /XYZ null null null ] 
+/PageMode /UseNone 
+/PageLabels 3943 0 R 
+/StructTreeRoot 3952 0 R 
+/PieceInfo << /MarkedPDF << /LastModified (D:20030812101658)>> >> 
+/LastModified (D:20030812101658)
+/MarkInfo << /Marked true /LetterspaceFlags 0 >> 
+>> 
+endobj
+3952 0 obj
+<< 
+/Type /StructTreeRoot 
+/RoleMap 128 0 R 
+/ClassMap 131 0 R 
+/K 1704 0 R 
+/ParentTree 3894 0 R 
+/ParentTreeNextKey 21 
+>> 
+endobj
+3987 0 obj
+<< /S 703 /O 844 /L 860 /C 876 /Filter /FlateDecode /Length 3988 0 R >> 
+stream
+H‰b```f``Ë``c`àÊ È€ ‚¬@QŽGF )àÀòim{Ý‘;ŒþV0vˆ_<̾‹™¥9óہÇý2<*‘Iìs[dž
+``èyþãØ÷žì9OkJu«R‡J!£˜îÜÜYE¼™‹²{v§GםÈZ¡;a‘×Ϥ[܏e|ž'+[»kîš×µ=T”–Ì·ÜXºýÝi'…Yµ¼ÓÏ^»ßöV‡eÒú)Š'¶y>^o#›ûCï’4‡Êê§\;žl·<ÎÎ~»ì„^»C‡ÚŽS“n~.Ýþp··®Â„®I5×^»¿Û[‘£ Uaö©u–ºwË—IohPZ¬ÒuTè§;{Æš«×o·sÈ,[´£)i›có:÷:Žè²Ùó6­õZSС}°?;¥s{VÝ…kÒ+{š²9–Ýß$ž¤æ»”ëÓZǃÇãK÷˜žb×[5#™£)[ë¦t퍼M›–*Ì>Ôw“EôÚý¢ÓZt¨ý,ëH8Îzí~ë«•Í1*›¹~º
+¤l}~»œ{Aë!Î	Jk÷E¼)piýv÷»Þpøutt400
+
+i  í Ä”””-:: .q¨€   \­ ˆLÄHfc¨€’±TÈÄÅ5fž  1Ø*ˆ™¬¡p	¨ÐL	˜<[DQ,â^!e˜ÝÂ&np3C!Î')uËOSØ,"Á À8á2ÃÆç70ìaâff`gòf``_
+ÄÀÔ̶ˆ]€’l•@¼ˆ÷0Xxæ1숉኏ã›?Ÿ¡‘‰Ÿñ5ãF%Æý~[%ß2\ÊòeØý‘á˜oÃ9n†£©ÿN1Š!’t,Û¾B ­ÌÀ ô˜£Ò¸ýS|& ⶋ™|ÏXjÿ@´  \É)í
+endstream
+endobj
+3988 0 obj
+726 
+endobj
+3953 0 obj
+<< 
+/Type /Page 
+/Parent 3946 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT4 3958 0 R /TT5 3956 0 R /TT6 3960 0 R /TT7 3963 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents [ 3965 0 R 3967 0 R 3969 0 R 3971 0 R 3973 0 R 3975 0 R 3977 0 R 3979 0 R 
+] 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 0 
+>> 
+endobj
+3954 0 obj
+<< 
+/Type /FontDescriptor 
+/Ascent 891 
+/CapHeight 656 
+/Descent -216 
+/Flags 98 
+/FontBBox [ -498 -307 1120 1023 ] 
+/FontName /EPEKCJ+TimesNewRoman,Italic 
+/ItalicAngle -15 
+/StemV 83.31799 
+/FontFile2 3985 0 R 
+>> 
+endobj
+3955 0 obj
+<< 
+/Type /FontDescriptor 
+/Ascent 891 
+/CapHeight 656 
+/Descent -216 
+/Flags 34 
+/FontBBox [ -568 -307 2000 1007 ] 
+/FontName /EPEJIN+TimesNewRoman 
+/ItalicAngle 0 
+/StemV 94 
+/XHeight 0 
+/FontFile2 3986 0 R 
+>> 
+endobj
+3956 0 obj
+<< 
+/Type /Font 
+/Subtype /TrueType 
+/FirstChar 32 
+/LastChar 148 
+/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 278 333 278 0 556 556 556 556 556 556 556 
+0 0 0 278 278 0 0 0 0 0 667 0 722 722 667 611 778 722 278 500 667 
+0 833 722 778 0 0 722 667 611 722 0 0 0 667 0 0 0 0 0 0 0 556 556 
+500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 
+500 278 556 500 722 0 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 333 333 ] 
+/Encoding /WinAnsiEncoding 
+/BaseFont /EPEJPF+Arial 
+/FontDescriptor 3959 0 R 
+>> 
+endobj
+3957 0 obj
+<< 
+/Type /FontDescriptor 
+/Ascent 905 
+/CapHeight 0 
+/Descent -211 
+/Flags 32 
+/FontBBox [ -628 -376 2000 1010 ] 
+/FontName /EPEJNP+Arial,Bold 
+/ItalicAngle 0 
+/StemV 144 
+/XHeight 515 
+/FontFile2 3981 0 R 
+>> 
+endobj
+3958 0 obj
+<< 
+/Type /Font 
+/Subtype /TrueType 
+/FirstChar 32 
+/LastChar 122 
+/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 0 278 0 0 556 556 556 556 556 556 556 
+556 0 0 0 0 0 0 0 0 0 0 0 722 0 611 0 722 278 0 0 0 833 0 778 0 
+0 722 667 0 0 667 0 0 0 0 0 0 0 0 0 0 556 611 556 611 556 333 611 
+611 278 278 0 278 889 611 611 611 0 389 556 333 611 0 778 556 556 
+500 ] 
+/Encoding /WinAnsiEncoding 
+/BaseFont /EPEJNP+Arial,Bold 
+/FontDescriptor 3957 0 R 
+>> 
+endobj
+3959 0 obj
+<< 
+/Type /FontDescriptor 
+/Ascent 905 
+/CapHeight 718 
+/Descent -211 
+/Flags 32 
+/FontBBox [ -665 -325 2000 1006 ] 
+/FontName /EPEJPF+Arial 
+/ItalicAngle 0 
+/StemV 94 
+/FontFile2 3983 0 R 
+>> 
+endobj
+3960 0 obj
+<< 
+/Type /Font 
+/Subtype /TrueType 
+/FirstChar 32 
+/LastChar 148 
+/Widths [ 250 0 0 0 0 0 0 0 333 333 0 0 250 333 250 0 0 500 500 500 500 500 
+500 0 0 0 333 0 0 0 0 0 920 611 0 667 722 0 611 722 722 333 0 0 
+556 0 667 0 611 0 611 500 556 722 611 833 0 0 0 0 0 0 0 0 0 500 
+500 444 500 444 278 500 500 278 278 444 278 722 500 500 500 500 
+389 389 278 500 444 667 0 444 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 556 556 ] 
+/Encoding /WinAnsiEncoding 
+/BaseFont /EPEKCJ+TimesNewRoman,Italic 
+/FontDescriptor 3954 0 R 
+>> 
+endobj
+3961 0 obj
+[ 
+/ICCBased 3984 0 R 
+]
+endobj
+3962 0 obj
+/DeviceGray 
+endobj
+3963 0 obj
+<< 
+/Type /Font 
+/Subtype /TrueType 
+/FirstChar 32 
+/LastChar 151 
+/Widths [ 250 0 408 0 0 0 778 180 333 333 500 0 250 333 250 278 500 500 500 
+500 500 500 500 500 500 500 278 278 564 564 564 444 0 722 667 667 
+722 611 556 722 722 333 389 0 611 889 722 722 556 0 667 556 611 
+722 722 944 722 722 0 333 0 333 0 500 0 444 500 444 500 444 333 
+500 500 278 278 500 278 778 500 500 500 500 333 389 278 500 500 
+722 500 500 444 480 0 480 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 0 0 0 
+0 333 333 444 444 0 0 1000 ] 
+/Encoding /WinAnsiEncoding 
+/BaseFont /EPEJIN+TimesNewRoman 
+/FontDescriptor 3955 0 R 
+>> 
+endobj
+3964 0 obj
+1905 
+endobj
+3965 0 obj
+<< /Filter /FlateDecode /Length 3964 0 R >> 
+stream
+H‰”WÛnG}×WÌc8ã™!ç–E['iÓÂm‘(-ú(Ëkk[]ŒÝUŒü}9«ØZ®¹‘?H‚Ï9ä!yþ‡úöÛóË‹·¯”Qß}÷ã«‹ÙùÅ{§–-ý.ª]ngVÕjvþ®Z/ºúcu±[ïšzSuM½TM=;ÿ‰ܶ³ç³óù•Uó›Ù£1YÍ—êðÕ«ù½²A×ß{øf=jD2hÔ|3ûêrqwWooÕϯޠúýêŸjÙ}=ÿg6>Îh›£mU·+çüÎ!&,f~® {'ä¤‹F#YŠ¨èÏü)]î’Ñ®\ •ÍÚÄä9´iëÝVAïÏëùìõ%e㘠û9A‡8ûCœM‰pñÝBïûg#Úìu*ø¨éWÚúßJ½Ù­ÿ=SïvWUÓ©×Z].jÝêLýÚ»ùxBÒr^Pm;õ÷‚’S ‡¬ÂƒyçGæcÐΫ‚†ò¥Üðh·]¬ÕÝU5êfר÷û»ªYîFæêÆÇ7wû®ã‡»»u½ä'(†šüõüDo¯UuRD_<0aÉ¢Iùr%µ.hÿpû‡-•%­û¤v7êíz]#ƒ‘	<2.fJÌøªí®nÏÔ‡æj±]¼¸X-6w‹úv;á7œð»7‹#³ÁÂLÖ±<¥˜}S]5ûEóéLqÍ„9üÄ‹ }R>;Ýgb¿«>ÖmuýRý¾ì
+õæ¾Q¿ì×ÓîLý°¿Ý·]ÿkª<s$<:BæÍc}õߨ3ø˜tÉ™?Ö¦·¦Î…’–]¬aèh<]E½GÂZcµ
+Ñ ¬šjq-‚Ó&C‚«æ¥ú«R"Ü[Á1Gîd ýßp`#u:cYª¶ÚŠX
+¯M.²0È~RÀ1D®ª¦Rín#¿ÌQet̏۽ˆBFdñ­Åà:$©I”ÿáÛÖµø6ç3a#Ƕj'ƒ©ëƒ7,ºò«’ÓÉöªÕî‘šîQ+?÷Òñq*¨˜3cǽhˆt93DÒ(B­ÓÎ'–ŦYŽeÄ{‘Eà2Ñ
+ŸÅ"À¨©!ŽXTÄ_D—’ŽÝ¬vW"4M(-CA+†­¥r2ËÔ@›µõ‰t:D0½Î¦ÌÁù^¢\ˆz­V"4:mCfO›F2(3SÐ@	挑µ…dO²3U¦ç@9¤ÄêcÀ9P5"	I/µ>s¾vÇ	Î?ÊÒT{÷það£´I6¨Î<bˆôrc3ôa»sBhšÉ(²Ö–0N³Ö‚Ñ)%víbŠTç!Xþü)±ˆ¦ˆÐ)W£
+‘ú™eæ•üþH³‡µpúý}/µ8z¿ÍÔäbŒCh'QGÈÌx«•zÛ©º•Õ‡t5"׳'çà0÷No*¹èzísöì
+²vxJµ,+rR7אÝ)÷âíPY‰@Z€–•µ¤ÑŠnb;jä9PÕ[Uodé1´LÎÑ0Igã)ªÍ„ô@ù0̇²]È2E‰J1?¡ÄS`:9+[1O at u–CdÑ¿éî²î!½Ÿ›—¥·e&ð÷+±, E}bwŠ4ÃÜÁšŒŒ£vÀû†h©k†Ò¨OŲlt&F»•h-!³cÈVMŒ<HãI´–Ù'FjÞž®š	2àÉ!Í ÀŸä1"‘ƒ÷u_w+u5!ô™¦¸Ì:e¥§Ñ6¦Àh7¡ô4š%.ZÍF|—§øÓ¸Ž'sï-µœIÚRøÇ)ÛkžRp¤¿PZ$"Ù#G -ËIiöPˆ#XÞwMµ‘™—5œ‚ÝX·]µí”\Ý4¢‘6;ö°Ogªž"ºÁ8;/źµ4ýõ­à”G"¾ìFÙÏD¡
+£ÈÀD]8m™fôìNN’£–ٞ̑3^#Xü(³N‘¥¨jº‰eÐ%šÑévrEqÁêT–¹áãoêuUú‘x€æ缭ôáʁDM\
+A4ìôÔ6´º8ðìÕgòguÈž¿A1WGÊÂ¥CCbW.®e!¡Y'Ðú0ÄÊc5‘8pRÁ#…9âÓ0?BI7Ž"*ï£9k
+‹¨¬¶XÚŒ7ÌU¹ë–6<¡2Ðҍ‘e-±±ìv¬j'¸HµC^òú‘U„¤ÑpÜëúÅÖxV>ZGýÊó†¥dó‚<‹æëjÑVª­¶¢˜{Š‚I!?yZ_e±TY_p¤wª䞥9èЦ6¢ðÐèKX†X™½Î=ŇHq¸(K&@™}‡Ð	‰¢5+Ú‘¯òRDƒ²…2(¡zF(;ÙªäÆ:Ô˜ÓÈ…kߦ¡=VV4Kq/D©e(Õf].Ëz ¦6¢ÖÊ:Dmlá9qKŽÌÏqìŒc¨Z]ßÈŠÚ3âΪ’÷,K:gq”yÓrE:qDŸï·KLƒ¬Ï`…C
+Œø#¶s‡Fq[@Ùr!†Ñ­{‘eϵÁÈ°_ꉶÌ.v”b±S¸2¡e|üO€ ðÞ
+ý
+endstream
+endobj
+3966 0 obj
+1799 
+endobj
+3967 0 obj
+<< /Filter /FlateDecode /Length 3966 0 R >> 
+stream
+H‰ŒWMoI½ûWô‘•ØNwWJRH at pBÂ`HÆÄ»ÆFc‡ˆýõûzñTSƒ£œÃëžêªW¯^-^Üÿµüga6Nü=þç²×!Û 9ml)jùuñB+[ttÔ`Gè›åâÍõåâì£:??»¾|¥¢zõêõÕåâõrq¶\zeÕrµ0jy£ŒN¦Z>(KºäÇŒÿ%§|É:Æñb«ÞoÃîöþæ0FÓ€mðÚ‘Ó#k˜µ¥è§ÀÝv&ìÄÂN?ÃÖÆ E5ö1ì&/5ìLÚ»ñꋍ”»\3fÊ(ã¼NÉù)N}ï%d‰:vá°_K at k¢Æ•ºÖ¢4>OÛ½HëH[ÃãÜ­D$Y "ûºúp)B}Ò9 Bè'HSòx!£Ñ‘ˆ}[Æ‘6ű ß]‰È”tð†}ú­|gè,þšÕ "‹“Ëûî«ØÆëâ½ezwõVĺ¤}攳ê B)é”ËӝôN§Èù.>Éù¨MŒù$ç\°Úxž¥û/"2Ð†Ó eŠY‡±á'Ձ)èD>MbÕÚ·by—“žñiôÑèE`!ªNÌ%Ò™<{x/>œð“Bfuì÷û~+V(hWX‰Dý ÊH|aéìD ØŒ¥“"‡Çh]zŸé¦À"Š`LÓò«1
+\á$×	š@.<'íÉhè+{÷¾˜rÔdx‰êN¥äš­Õò®W"‘½³qäOÙ»¬‰l:IdO˜†³Ã‹¯‡i*\ŒWb¯{_0ˆ"W1M>V"VÎN,§	3ÞóÙmoåP3$1e{’wÙwTâÉÞ@Õ«7`7~–`²çÀ¡D2ëµÍ¹Ñ‰º›Ì«$jHp^#ý™ÿÍÍ£/3Æ…9ƒ“¬.±ç^ˆÁh<Çu7ÿ>tíº‘톃¨BXø‘–fi²úM†˜ÔÚÖbÐ6À „ØÄ°éÕÃZ¤›M£Qhò!ê‡MÕv¶PÕm6ªï†ÍºäáU[Ù;âǾËО´PQN]Sž¿è<’=’
+ÞÁ	îV3óöÓ„€-™Y#`wbålƒ~b£ûÅFÙH&Ä™&¾ DDMjj°–M-¹¢)SÙ­<ÑOPŸ	U
+MîW«~è·òÜAO5>hu±9܉DÅêJsâþ‹HKxWJVëØ’šõ£X/åßÛú Û{?7—ÆEñt»x`±Zh7ô{%ˆà0ÉR‹—¡X€R{õö‡ZõÝá_Ó–¶ÂUî&ºž¨*ëæÏá€q†5vçÏÖÿÞÏmk$ôÎMÍȧ[kO"¡,hÃ(>¶Ì²OמGoÖ‘*/9¤£áAÔöZ‹‘8S·Æ˜¦èC/ßìœA"±äÝ*ÙYTÉŠ!±È5Zß¹Á&ž‘ÃÊüC佧ðسÓñéŸæg˝ÇUlRÙBcô»Xס#R6’è¬â»R6’”˹º—…
+–Ïs¤È“ªhÙgžýKYS±ßY[wÛ#|’Õ:až…[2u3Â$+›p2Yð]haË‚ÍC•6”“7ý¡1D"y¬¹És¼X_Ӑ‰åöAö¨ äH¬°«5ÉŒ§Î¶+2øðµ;¼DÇÊÞ²ÖŽ˜&‰ýàÎræ@y£
+Ø)¬ñLÄ.
+ ˜õ³]„‰þ«‹ìÕKay´°.?]Ty
+b*-K¦ææxââãûq=ØÈâ‹ÎÕvLN|ÄN…ñÒÁŽh½1ûu¶µ­ŽÀ
+ƒ
+Vðøöã̍Ò۝
+PCKÓKö;µ1{µ{…L6ç[0yŠ¬Ùé·‡õPY/‹!•ÌÝ®GC#PMTfÑÈÆÇ%"ÂöŒ1¼Y.Þ\_.Î>ªóó³ëË÷W*«W¯^_].^/gËeRHàê§?ùG—þÈ#²L|üеÜ.Ø)QäXqiCR(TæL‘ªû&/)°°ä³ãèÍú{Š<ì!¹Bâäqïqw	™CåùrT;—}׉농°®4‰kn±Dkš”¼‚¥€aÜbåkSÁµ®)‡<ãmÆÈÎ¥}›­þÙâЇa}8Ìøx´\è9w;°¼hî^íÕÝÜÀ Ì¥ªCÁ5lú"B“×™\‹<Œò—p/ÇÊ»eƵ®…ÊûbFßæØTe/zW°}Ø6Ún³þïh¦žÆ ‰c€ð“M5S,2YRl®<ôÏÈ#98Ù`š”¿œ³Tö·[ç,2yÒ¦$÷²äø·&—W¾`°Å¥¦Åñö¹)8 ƒt´PYÕ£•LÃëáa½ïå§åXmMƒ—†v,¦…ö ‰ìÁ`î ¥M‰ÇEM„c8ÆÀuá â÷ôR
+endstream
+endobj
+3968 0 obj
+1652 
+endobj
+3969 0 obj
+<< /Filter /FlateDecode /Length 3968 0 R >> 
+stream
+H‰ŒWMoI½çW̤¥é®êO	!-Đöà#—ÙdÂ…$²g7Ë¿ß× OùYŒrËyS®ï÷êâÙðáíûø|óå"xçeðø{úst>hp1ã›Í׋g‡f—KKè=…–àʉտ8V›µú…C›KAÊ:QhUW[ŒKèռƻköB
+ÁµœÔäáf{;íMGç}÷;4×¢‡ÞO܂˹Èü7EfW|Ñ%rdÈàƒóµ-‘ÿrdvA’æ-à‘Š7ÐaÜߦy Q]®¡ëÓÝð¸ÛÎótG_ªÕéÉK4u¡yWcÈKè
+í»Ðš/&Ï»Þý‰áEñ(ѸÁë-šðдÄþα1¢Š6¼Ï»iœÚ~‚nÂãÓxËÍ×ìÔgƒ¦tžbrMö8´;eEM¤r6ÍO#SÈ¼…ÒæCH.Õb;zº¥‘©`Ä%w8´ºš-ô+…*|ˆÉ‚61òê|¨q‰‡yKÑ)c%µ5>`'§êuMÊrÃÃ6<­™b'c¯ÙÍÂ#«X-%³×ÃôÍoôê|JkLôÅE-¦©1ˆ‹¥˜!Ús(¢dS‰i¸ºÿ‡Âµ¸ÒlOÞRhÄBLÖ_Úé1&—š…r*	+¦Ë8?&ä¶Y(Ïm*.i‹kH@´f
+¼)}Ä¢N“Ö5.dVíøðtUq¥$›®í
+w¸aÚ£EïéfHX9%[¥£–ð@1òŠÐRˆ˜_ŸHvñLëæq8«|uQ¾¿Ò¥Ø0>ÐI
+A]+8Žß¸Ý^ó–3žV×°°–/pÎQ·¦Jç)ÄâªZÇύSÀ¾ª >s$:´dãÂõaQ=TK5v¹l©Ø˜¾©ñw¤ ±’?ì¢#ðHë!>¡b1OœÄC‰Ûs--q	½¹ß‘`æ|’6m®úd“6ÒrH‚8(¶r[Ú=‚Š˜L|¦ÐÃMÑdM7E5V·3ÕÆ‚2ÇóÐHMm-º<À_ô‘
+qØ\
+ý´1™^ÅÄGñ=íU•Øim	¥GŒJq’Nº§‰64jMñ(ö
+Nò9ap‹Iý[-À5ØÝW[ÊZC]±<«:¨Okü¾?’ñß”Eh^¥J¶# ¢L9ÞTS›[6v·{î/ªW±¤M~¹ÈW“…ÒK®ëi¶Üj§j¡œ‹!OKˆÍÔw at h3ÅçÞÃqM) :1‡–¸ }7ãÕöv;ó4ìio¦¾J›)à­_BIJ±y4å©Où‹_r´‚òS™èr…*Ž%Y(­ŽÖ›ÎÅ97ƒ÷‹´ºÄsnÅe©e	=C¡’:…ì7.$À¶þÄì´ŸGnº4î™þv»§E:Sƒ¦wR(jr½£LÓ%‚6ŸÓ*®Et¼
+w•šrpÂõ§RµMÁ¡hÐdS¶;£%p-J°åx¿ñÅ$‡½ Æ㙎¯$”:ªÉððéÙøéù°›¸* !Íb|çÔ+˜ÝdÂœö?'7èwÞE†ÉD
+†'ã¤3ø¥ê{Û–hâæäÑ“!ërœ¢1
+ÒYÑ[ÚW½÷Æ	ΣXõ5Z(×(i,­”‹
+œžÈ˜M9DÅ@gL!»4™bòübk“5IÀ•¾k'ÙM¿
+|È"–ž”b¼F#Ò|DÕbʇ–å”1îÁ8Î¥mçÔ˦‡¦ÝÃnš‡ƒfäª/a ‹Ô¶¢B)—’í¦C…:üåf“0×͏[óÁF#!¹“ƒ‘EÂi˜2]Žø¹òôsO™d8K‘]&¾ØOˆÄ܃<F¾¥Tš±
+k]"ßG$š¦•Äzë­rŒRÍÿnsñîãåÅË?‡W¯^~¼üãíІׯ߼½¼x³9ŠöìÏíÓ3r>X0Vû¡&.i°ÐY’.þ
+ªôKä~zÚ¸4\l*lµº|c÷gn>mÆ>ÕUwJ-ú•Îèís¥J³iŽkv —™²TR4v¹jÀ}*
+:~™bnWR
+'ãb=š1Ëu Ä({ÙRpu at n.°·\`€·r_Ç`.ˆx t8†^ñ4t9’êé—vÅÃß`²pÇåEo1ãîãŽVô{µ‰àîj‚NÖ=&t\cµ=Æ•Ö–„vÔ%ô Qjè
+endstream
+endobj
+3970 0 obj
+1546 
+endobj
+3971 0 obj
+<< /Filter /FlateDecode /Length 3970 0 R >> 
+stream
+H‰ŒWËnI¼ç+æ˜ ÙF“Í~wa$ws‘-9q’!É›äï·Z‰º&û0\ÓÃ&‹Åâ«×Ó›ëϯ$†¨SÄﯿ4·PzÕ)•ºF™®¿½zý)ˆiŸc¯2Ŷj¬sèt Ð.AcqÇÞph	ÒJ›C?sh16›Cw·gNx”žŠ÷žcsè5Ë»§P•ÅCyŠ|Õâ"Øqh*þf<€„ŠuÝr(NMÊ3`1tü¬	ÀF²º+ØGJÅ”S°¢.w”3©H¨]mÏm!•äÀŸ84‹)¹2ðx›†¤y=PÞ¦> Õeìó-–ÐD|óp¬h@¼Žb4g&5Äê¡ôj&=dŸ…žK¬Ví#¥ƒ°-ºo)Í-ÇÐZvAO<
+”Œ^ÆxJƹÕgŒ6…­GŸ²Í‰g¢õ æ	¼™6cÚçîG¯—t/W4g9Šë¸[m¡›W½Ç¯«%Tm.ÚÍñ’ˆ¿ ‰1O×·ÓøK§ëï“? êå?)4ùÿcæʦÃÍèƒ@3*º^ýkïÏœj(e4äsð7
+…,%Km¥e롶\æПÓf»(o¥b¢‡ÿA‘—éçãfÚœÏÇû›ÇóîD'D½Wéó÷žBž
+!…UB^‹ê’z>pQÜߤ¸¯QñÔlÁ²‡rÕPx*æ.ÿ‹À&ÄÒ’{cÑ&D(Ä6Å^VPa¸è²#Ø—Ýtžnû»Ã‘¡Êl>šß"r)Šù»dÉXÉ8/Mýüˆ»G>–p¡ÜmŽýúõçøâ—DA_tÎéDÆR„ˆÌÁtìYÊ¡¥ú‚fYµxîœyÀ°
+Z[u)å£7¯`¯•²ùïßòï×zîîØãqwz pxQ­ËÃaOgÎð^ÌÕú~ÿ‘ËrE†}/_ˆuáUzâÕŸEÙðIû£÷©Ìj›C¯ŒA;l†ˆƒNÛ
+­ŽŒÉVÇ\yŽæJ,%¨–÷´`X™âò3ìa»£ÔK0ÿC‡Ÿ£‡"ñÐéoŠÍ˜1=ö57Ë=4øÃ9ôÄ•SàfKÉ.^slúÍ¥çXÚ«RǾä¡ÞL<âaurqAœN´Çu`:<äWM.i§…‰€	£Éq‡&	{/§¤BµJÍ=+òÂt„ï\¨3FóŠÀøb·pl˜Þñ11éÄK;XaÜRö׺¢PèB«ÕA3‡ÂŠ‡ò‘ßp¯ZÍu%e£ö‘ƒè:xiaJÑB+&+‚HYPÃ÷CínlƒŽûL²éö¸ã4K£tÅ+eÄpÙºëM:=RÁæÖ<”ßn¨¿udzïtè]7æ意߫¡ê™N{"AEZñPlWÔmͤ2ºZ²»U&ƒ
+/²Å}j€—qõåk.¦ryIª†­¥eu™å@lŠxšï·où6ŠùSRuäÅVÁÍôѲ­¨„aþô˜}(qm´¼‹÷ßßq­çÐ,»x?ñ™#q÷n€ÆECN>k'ÞñO†+–=-¹°öKŽ¨”6ÇÞQ$¦_)iŽ\X$æÑ=L÷@Su¬Ï‘|Lai0»¸wÂÃ<tZÀVèR´9–fKª J&ØOûÅÓ®ˆ 5µ¢2Ç9¦â
+¶` ±3DM²&_XbñÐãŽÏkACäîªKeLÚÐq	£ãZz
+Ð}¥‚'}=”ëˆm·øXÆ5­ú’-kÅXžâ(N
+7j€e³TïÄíîpc±Æ{9ËuuÕFβ'¿Ó¢Õ±Bp¬”ê‚ÅÆÉmð.®{†uKÍŸÌ¡Mw"òƒ[2
+êŠÆ?!ê™Ëû7Å!’V¨hÊØdM–J‰j+ª°TŠy(÷@Ò0ø’Ë•æ¯Ð¢ÏÖ¢ÇÔ¢No6Ü	Bï$¿Ð»·y€P“5lnT›‡îÎ…ÉÄZ¹FÌS…@Gß’|ö¥»|óL°çaSRªÅE²0[MîègŽRùŸ  
+åÙç
+endstream
+endobj
+3972 0 obj
+1654 
+endobj
+3973 0 obj
+<< /Filter /FlateDecode /Length 3972 0 R >> 
+stream
+H‰ŒWËnIÝû+j9H3EÝ[o	±à%X ÍÂËÙtœ;r2üýœr€éº¹[,”SÕuŸçœ9ëØ8ü{ø-xg33ï½
+ìȬ¿®þ0_Ÿ­¿¬aƒ³•}ì±ã°›ÌQŧ`]bÿ¬C«%Ç©‡úµ9YϱŠ'ëØB6¹.yBI6	Uh%ü¨$^Рà\0ëi¿Q5ë{#ÏgÆŸr&[ÓÏÓ›ÏÃaØÕï‘‹–‹Ïý‰ƒ-ˆÂ‡ºŽÛÍdö7æøy4깘-Wzÿæ]Ôá%Ø\’øÌþêKŸ÷¿R ´’ªÙÆB"¤q£V‘]µœRíÁfP±”,¥’.ÈSµyo0“
+Æ øPJþ¦C£õEB7:´Úœ]ì¡jr¶émÏ?<ÕK®Ñº,ê®'FD‘/³Õ±¨oN"úµ™õ²æ^ÅüˆI$aÿíVW¶Å‰½VûÙ;‡	“ϽR§Ñ£S%Q3}e¢¶T÷beªIó+Èõèݧª­A¦BÏ„Çtg//6ÃN§׋ò–³¥Å›FýÉÕÛ’]½äÉÁasÇ.i÷à’­^
+% Hz!Û{å.Q8µ&r.ñh.AÌÜ» b#µµ#‡c¸ÓYÔ[/Š|§g7ƒÁj=¬6eÈHB9Ø,Ps‰6âK®-ÅzÇ¢sö;«#Ƴ¸G…P+A–¹ÈJ|PßÑ
+¥Vy﵎­Ö×/h²ÈÁ/¡ã4S¿é‘ÊS
+ÿC·üÜû£¾dj°õč²ŽúĐoÓ•}F%jK©Jè‚ŠL at O"Ò`T°¤1¹?s4ÛÉŒÿBÝþXÔ,¡¾¨	ÁùÑiø?Ëܲü˜š{"‘/5³ŒUèƒ]'1ßÂo1Ãd³Ù:“PhbM¼dºÛï®·»OúÂEÌÅó£
+ùë›`Ÿ£O¥8ê[ê‘3‹(îÁ¯×æj´ÿ<;z»^½ýøzõüoóâÅó¯?¼Áióòå«7¯W¯Ö«çëu68xó KávÙb£7ª®üĤæb	Ý5ê£`bf8UΕ&wCéîS9 Õ+ê:ª3_AôÈô¦žckê€ú(a”ÎüêÜ$2¹yГC ´ä¹‹Fš6"ûóá`ÀmtßÖ-4qÉ}Ü;ýʶCÓ©Ì—OgKCàPPc>uč¡.ìOìÌP'g¿’EØ}½Õ]C°µ5ußV
+a¦1§]
+ïLZ»uET5@ž	2nŽ\ âÆ\»Ú˜»ý4é ±²4G_éJaƒ`»62ïuä¡õú	WU£êxowç;ˆQꖐªÅqä˜üÙÙå,|hÜ_é´$»Ù¶³î}ŠÍ.w=7-¸¯šmA“œíx(0[¸ª÷XG±ðù†oÌ‘¸/º^IÏð}ÎÒ3¬d^ç
+é½omܵFԁ`“˜»YûS÷XFܸäš"{qݝž)áGê¹ç»îÊ]—ôÍh¾ëbâÔܵÒaT=ZÙálº¸žr·m>èf‰R›·tv:[bœzÜb9öŸ×í„ÏÖQß$ûþýPm侨¬#c»”ºšÞúÈ5›TCèë¯þÞG
+CÅ
+ËÞŸ¾¶¥Ø«”xÒ=]ì?tÅP‚=P§Âˆ‰b+ªF"&Ä‹­8ÿ›¢f…´"B~B+6Lsé;ìÔL!+	³;¡S%5-Ѷ–¸\Ý ‚×½äâFW®øª“ÅÖBmÜçØ/KJ%'‘Ìг¤K&;å‹Ý4KRy»ßÞÞÄ @á2^·I¢ÏmöºÌé梠æ&tº7«P¬‰p¢±9ôN‡Ö†¸‚ÎÕKâ
+F…E\jW6×ZYv¥º¦ù¤G/j`ŽØ*N>À,ù5ÒüÚÃú_CÈå©!L§^¥Ÿ–Ílato§½Ùé*+ÔþØB÷5’£ï±ÖŒŸ©©’9æG—÷![ŸJ¯¼@mÔ/"=n÷::G_£Ÿ9zÁ;ךU$CÏ[‰(&‰[udFWµ¶žC7ú­ (hý®¶h ø$Þª€K¶Ìîmq«w,#e΋/̬³X¤²%t(n-^tÄ´´	s—Ýÿ ;Ýâë
+endstream
+endobj
+3974 0 obj
+1599 
+endobj
+3975 0 obj
+<< /Filter /FlateDecode /Length 3974 0 R >> 
+stream
+H‰”WËnG¼ë+æè öxú1/ÀðÁ >ȁÇ\(ji)°%‚”`øïÓC÷Yt6ЁX;ÛÓ]]]}õìpwýÛêï+J1qHö÷ýç+õ¸Hìš(¬¾\=ûŒ¡µÍ¡SجÓ!À'š«ÎØ>@hç(RÛ»_XRŽ­°¯!Ô>$iCwš£¨¶%P¶S›ö9ôC%¦Vd½ÇЉ‹Ë×'‰”<4üñîw…ð’b)ÕU9<b¬%·5w7X4©)vvHÈ©b	ó‡Z¸9†°ºE(Õ˜Jc—cÌ4å©e=¯ÃVP3EVq™6°†Z86*ŽDÛ»Íúñ&F[‹Rº»î}xØ£7L¢V›ðb|?
+þŒÊöÓè:¶®ûÑÓævD·\e¦9")i¬2.~
+îo¦˜YKT"ão¦-l7Ò­mŽ~‚zB¹D&u'CNRn&$eŽÄÚ@¥GªUæX¬‘²Pw9Þí ¨•¨Âîf°©STòPØÇÔíÔ<ZèzAM“±‹ËÂÃ=k³¢ž?ß ÔĬ°‡Fb–ÏBø Á2ÒÐë¼ÅP#eíŽ
+V•biäÂ
+7°jlmÞ¹¹œm·[³&ÊÝ÷Ü=ä$×fi#ŸHJ6=h̺€”Ü%ÚE¤”TbªK8)D¦µ/ऐÚÝ¡áÂp£(µ;19`hŽ–2_b<ß%G­ž9xiŠ™|´û	sG²!gidrí¾—&&gêC[̹¹pð±F°\Ô_
+¢i,µ;2®ñ€7yê)»ž˜ìL“HÝw<z©ZrÏFžíV5>ãØÏvêÃEºxw°ÀÊÝ|†o´=̃–õâX†
+€4«psWÛ@¨r¬É'O at 5ó­­ºÖ{L^4K•0R͘Qsçîpµ‚ìâ,4Û¤ø,`–©ze?³ñ¹=[´ž¼÷ϱAÍı7q·ƒ2S³q<› Bf®Q‹OÖ½,Väì©Ž£5–e"ìOH?m uä/l é\/?ö6`˱ßtŠ}‚vÑ –›9ÒæQÉBsä
+DÚ8ìâ"
+×Sx:Lðá,µ'zúD¼àBÍ'õݦ8„¾_]½ÿøöêåŸáÕ«—ß~xÌF¼~ýæÝÛ«7««—«U
+†Þþ?n–H8üÕí„'šùó&\æhXD.¯rCاó§PÌX"5Ò]ØA3cSŸCwXEɤ±ýö)úÂr`KëÑoŸB±»"“ÆžŠ¿†ÚnYŠ»Ú§'œ‡b‹"ûºaó8öƒžª+¶ü6«[óPlù›ÊuÑÍl琳S¡âCJuI€Ã—º™m®:‡âom—í20¶“ã"sŠÜ`Sn´­9» ðxbªFqÇ®	sœMÁ¹ÎŸµÎ¥Ý„Z“E`1	Ôæó—ý7Ð&åD4xˆÆQ3i†"ÛŸ¼@udk–TIk‹&uÉe¬­rñЯjÙä!ý§Ð[<í¹Ž¶HŠ¸æ(”•©v³<]—ܬÙZX<ôzÂÊÉCmpC,É*¡ž®xI£¾yIŽ…¬³gvø†Ï5Lk>„§=ÌÄØžøL‘ï'¸óŠöHÊ^ñò¤Ö3, nÿŽÎÿÎÎñMàè”|lƒó–R<ýM؆Sðìú€7]“bQõœÁ‹f³K³k¼:öá:½Àâúpú
+ïLÆ­T]/„Íú0.Ø_Ü»K´¿jVHÄC§ý¾Þ}þ®/í$^pñ:@æÔËμöÀ®äÉãã®±Kuðõã®ÑJ"ñí'¡(ÿ0r£!¹àZf’: Œ¨ñ 7Í‘0‡6à¿ûvðõ}øÚì°‡Ü6bµŽÝö>œa¦âÎ…ÃØ–S–15gklIlpº v{ìyÕ2›S™ƒ×›Ûç—œÆ9ËðM¸Ãh[wê¥y–x˜š!%ƒ¡zc*ÖÔ™-É\Ô‡pìóp÷ø‹~äj[R÷¹Á/±¬Ø–ÝK0ÔD²³,à›_Ua]@³©Z՝zxÄBf"«ËøŸ'É,«çÉ(ª¾&Ox³ÙÅùûÿ` «­ÝB
+endstream
+endobj
+3976 0 obj
+1644 
+endobj
+3977 0 obj
+<< /Filter /FlateDecode /Length 3976 0 R >> 
+stream
+H‰ŒWMoT9¼çWøÛíO	q€…ÒJ›#—Iò²„Í—f†Íæßoy€åµ©ÇŒ8Ì(Ô´íîêêê£g›çg_Ž¼³.‡ß¾‰ÏÖW_LðÞ¶ê¼9»=z6Š
+b]	QcOO’¹¾£?HÕJ)Uÿ€ÇÎÎV)YCWØbK¨¢±Û{Š-É&ImÀ®nnžÌ%ûAt¸HðCðk›jžwu5­§»­y\=™ígú»ÔlŽy|+MaÌÍz_Ò)ŒÅÛTŠüRžHÑ-ÛìD	ÜšuY‚†>®6|±n¸ïW
+Áº„‚R–¦€¨C¦'Z at TÛ"ã­Ù]öÕÙY6øËÕ°ÎEsvaú7¿=š1TÁñ@‰˜¿:¦4«Ñ†àDCÍ#-«6º^Ñ9vµ¥Éô®Ú\\ÓàÛÕßE‡fK*zc6Ó݆ÿ t]ï~uï«û5Eƒ`­IÐO4#¾Šm;’ÏÁ_¿¡ü,‚O»"°üûZ#©²»L½?;zÿñÝÑ«?Ìëׯ>¾ûplгoÞ¼=~wôöl<"ü¨3J´\g_ŽÛñçt±¥un6äZæP*
+
+E‡¼¿[¨p„@Å8‡Žôêsš#/§ÍÅ"šWà5éMØö¾È£­j
+êžçÓÆÐ4ù„G•&Ú
+J˜rQ×äD͝Mê–'C/ƒ8uô'3ZÖkàÃÄ%Í7×0«r^q$&^M¢.zʐí¨'S OV²Nü	L®ê?¨ô‡®¦Á©ç˜EJÀ0*$SA $YWœªsˆˆ5æ<D<Ûià)OHTbQÏ9IYœHª:œªW(x×mqNø4Ú÷…ã’Í>¨K.hLhņ–UÌ…>—-’™÷6š`Æ\T6W<¤ÇÄiZºÌ7'M€*i¶ŸÓ–W YCo¹iÄó¥¨"QrJö˜Mwð7R½õYÈ›ë 4üxˆBª¹íí
+i(ý­ÑgÖ‚d|'¤¸Ö"⣅ªRI«»Æx­ÜŽBc$éKREì
+#5øc Fµh¤ÒCWv-Â<¢t›’ö•(è)‡4ZŒ½†uÿD‹©Qï7|Ÿ‚;BSzõ¢+*Gê4§²¹æ1+XÙ´ =~æyÚñ²© ÔL$YÅüLOÿa¤`ãçM›¼tÉ–¤‘´Íà¬}MQ#¸ëÊ(|¿çKyì8RFè_ZúëEC7\°ªa`Ê—;¯ IêÛ£‚r¦ø°3õ—uCWG(·è‚¨¡·ÞÊmUìÞ"
+3뉻ϔ@Ââ¹CF¿H9„3>Ã[•Z–Ãæ†Lw—Óåâö·‡Ò·‡—ý+Bÿf}Hð¨?–”ß-Uðâ
+cÑÈû»
+ç(Ý.‹s°NQù®zsìK͐<܁Z«ÎæR°îé,,'}©­2<íîüc$¤sð–da¥…¨Â2w6Ÿ¸ºt¢Ä1Ÿž¿à]-ª®/`s4_lPçRóøD¾2 j¡|g 'B“Ì]$döÐpƒ€ÅRâ嵎e¤%_3°aíÌézÇË E9ː…5ZÄ4ü…?[D7“uhŒ…=¢ûÉZ¦ð
+=R°æŠvrÀL®mHï
+GÂ}¦¾ëÍ¡<aµZ×âð²ûòm¥pñ€ªaç²Ø“I®8ÔAœ?$¹ÞøÒÆäR-‘°[èªÆZc–¤;1é~9h7&ío´»[Áø¿r_ÓÔììE‘9xÁ\ ¨”8.h±k6Io‘Cõþövâ¡zʉ
+M­¿O½O»Ãú	ä£#C_cP¯âê—asPWO`Ü‚¬•bÚ·UX±>è~§¸øôÑÕôæúâz{óÄ»_ZW :ǯ':¡f¾©ëRÛ†®‡i*_Ó†W+é[§Ÿc·æôø$Þ{ø¨EÝáœã°3%…ûÒqß(/òËŒ_©#(¿á»¦ …Ñïç¼@“c¿·Ü4¶é€Hט·–tú,Š1Þœn£[­Å¶ö64øèÔáTˆÁGlqª#7ëkZ¸CՈᦻ™
+Ê÷½PlqZA¶|3˜ò µn2üš˜šÉg¥ö)&É¦úks}a¨'½ZÈûƒ–‚•@+íÙˆu4—ƒ€H’êhÊöØìàüáÿ	0 Òµá:
+endstream
+endobj
+3978 0 obj
+1666 
+endobj
+3979 0 obj
+<< /Filter /FlateDecode /Length 3978 0 R >> 
+stream
+H‰ŒWMo9½çWøÈJà±Ëå/	!>АvnˆC3é„°$Ít`Ù_¿Ï²±zÄ!‘x±«Ê¯Þ{}òäúõ×k´!eðïî7Î^{œ².hfµ¾:yr!½1ÚûÀ5p/Y»ìm
+TÓjYGŠ±†“v£*ðg Ôz£ÊoΪõÕŸ	ÿEÊ뜌Ï؍›­t_Êš(¹|u%A-º)Û;Š3´hÆ®†3‰
+újGINvù˜C)¡ÔúT„:«-»ÔBÕp-ÌI[gB‡¡ìÈÆ·Ðêup=t'C“ÎùѼöž!cìʝöjPûqRÛs±r²QS·åÜŠXBélºñ}÷jáluæž"3‰=T.˜3v%t_Š#!æ°µ-v?
+2::íbŽÝ /‡iüµÀóBºû…ÄŸé ßLlÅ™¨¹îBq…Nßu=ˆP*Åu‡ÞÜ\ŠXG:YîÈ(Nǹ¨c†J5PQ+ãT×C÷âJ:.’Рäb=kNá¨b}ÖžB÷ð›o"6„"u«oÏä"Øçb÷×òRaj¿ZJ~ßœ±Z–F†4›ä:†‰È&èď`
+[è‡{6ÈçB½£|̹Pgãø‘äÊçŽÅtTkÅuý²Š2Êìtʹó=ñy!,:„^á>ßÊ%€dz?=¤†u1:´˜8ÂxL=0²äµƒÎ¡œœ0ÝÔ«¡HÇ9ÑQ¼qsHÝÄþaªê^2Ío“‹u˜â½9|sKAƒ¯¡_Ǎ8ŠHĬ6rȁàÏœoj¡I3¬¤…ˆC@˜¢~5ô\†Â²ëîßɉR½ï¦ †½’.6|w¶h뺊ÔÚAE­´ÅPCÙæeh(?ú~ÊPfzÜšœs’†t5ÜlÅ4n3ir©{·½¸ü6#n™ÜQç³ØAYCv]Éだ„gfÇážY
+¥èé+Ks
+¶ÅŠŠB¾Ñ‘íËׂ —&»tL¹sD¦*ª0ytæ,ÅwQGôq/¦i
+(€íQ£… Û9j4+,û<AVS]²ÏS.ØÔ
+A½“#„5ùŽ7¯åȇ…OÔÕûV†–•ÈÝXñéÑĽspïԏAŽ}°Œ~
+rÚñT>|;:nÏÆ
+“{íÕr<#;×ÞyoÖ'oÞ¿:Y}PÏŸ¯Þ¿úó5dG½xqúúÕÉéúdµ^cçÔúü.㧒ñŸÍÞå~ã]xøÌóp#DÀ9U= EºA¥íµ½–µÙÏ®€|ÀÚŠä”®Žq÷zó€û.¦NëŒNÉ՝ìörN·Ðv¾†ÊÚÌQ;ßYÂA9l¬al,h²ÃÜxÀABÔÆûºéL=£.ÕcÉoKDI¦>Q¤ƒMŒå£š9ò´gÞpÝË™lùËg–š
+sbƒS2²cbóÐße\Ôز°ÔÊìhÙ×Ï'‹>òcjH3ÈÎëʨ›úàʨk˜:—¥¾Ð5YZ<ßÄöß“|Ĥ=¼«-QžL°šVOðBd!E£³¯ÕáZî	*rótÿÊúOÙ`•ó’|QvšŒñ‹$DÂ"|”ÖÊ.‰ó¨9ïé!7ÜàdIrø‘ƒÍ‹C6[aßÈ–D(Ð^Ò$D#hRƒ;“}çy³èΡ¾†ªrŒvsÓß8æZß¾ˆ/çÀU|?ÖÀ² ¹8:.qÁÅpç´ÕÛÉa!aïL£ër WC³M7r…læ5©‘bh±0Åf‘GqŠÉÌdëWÞŠ›ÌÐB⼸È³
+¾±y“ùŒ9¹åMf¨Œ9.1ŒͲñ5Åd|]j4T#‘¹äãÖÌD \ÔùFäñd|Í`>Pdo4qÑm=ä&ãКŠw ýÿYaìœî?/§ÝífºÝj{.2H> týWõz÷ú-?\ËÅå7äáb룦@íÕð¸o£ºßÁ&BaóbJГkr~ÄSØÜ!åžáÁCûk$öº‰ç/wÓåù°™JJ_ÿ¼ÕêÃpqy=L— áêå4
+›/ã™ú¸:ÝNÓöJ}ZžnÿQcYC̃UD\ÄXð¬¸Èá¢OBÊŸ'ìÊ€‰ŠÕXùi³†˜þjËÊDÚœUCW2’‹L¤IVœ–§ êBÁ›ªAý'À {Ô¨
+endstream
+endobj
+3980 0 obj
+<< 
+/Type /ExtGState 
+/SA false 
+/SM 0.02 
+/TR2 /Default 
+>> 
+endobj
+3981 0 obj
+<< /Filter /FlateDecode /Length 18729 /Length1 35580 >> 
+stream
+H‰|UxŒg~Ï÷ÿLD!WúO†ÈʄʺA.3!U¢š¸tgd¢	"i…E[Y›º¥Ôv—ZRJ]ºÈQDwõi­[ªjµÍ£Ô¥òl–µº*ó–}ží÷=r¾óïœ÷\ ¿‚‚Ü1y}’§žÏ	ðT07§°ÔUސ>§¨q´©pn…ö÷'V㻀yð´òçK®6$ ‘€úùó3çO£ž@Ê ß«ÅE.÷‰‹–­¬ï/üf at 13†l°•ÏÝ‹K+æm0%¯B脙e….zª¶(íÇg[©k^yp5­â÷ãY^›å*-Zwj_°´;ãéS^6»‚qóZ*}÷å/•§[ÜÌIHBËÔÄú¿-ˆ•ñˆŒK?~Þã’ïÎ÷_\gm]ïÖ.ìÀç”@vÓ]Dà{Š¢¾È†Ä¶øG´áM„c<ÖPº£žA6I–IÄrZkÌ5®a(Þ@­±‡ªŒm|ÿ:>Æ÷Œà+Iˆ–E¸¦\Fñ{ í1ã¨\8Ëû6cX…Õ8H/ß³ÕpT±¾T¤#Ý8lÜC/,—+Ôsíþ„•ØO&£Ð(A7ÄÁ#³Æ׈GÞÁÆ”Hr$,˜%x‹¢”™z›à¥ 1EÉT±¥lLÀ,ülÃQ
+£\õœÚj¼d\	À˜JpúÓh±YÃŒó˜„}ø„ýõíF9InQ'y‡o¡3öP }H‡Õdõ7m‹ŒÆûb<}9"9lg*ã0>Å?pST•‰<¶|„º’Fññ³"J,•ÓèÍÞNa´sð蜑ìÇŽÍßÐŒËN1ôM¥•tS	·8©¬Uê•3’ä{o+zpŒ*°àŽã$©¬ÿIÊ¥éTF¿¥·©Yè↸#äbùƒlSã½ÍÞŒã6"§± •Ûw°õ8Ïp·ð/
+¥*¦¤S3ÝíDœ#ÊűYìTr”•ÊaÙ_fÈò¸<¯þZ]fv™½÷Þõ®òîô6{Œ&®Ö,Žè"®ŠÍ8„Ó¬ý|‰‹¾úaýCh"=ÇVfÓ«´švÒj¢ëì%ü;Nv¶Z&^ä8U‰Ub5[?Éû”8/¾߉ۊªÄ)””Š®ìUN)ßÊP/{˾rŒœ(
+ÎL²:BÍS·ªÛՏÔVSªÉm*7]5W™«ŽµõjûÊo±W÷îæÚ
+àJZÀ‘XZ®ûzÎÁQŽè	FÜŒr¢ÉB=÷ Ê¢Q4šž¥ÉTDUTCoÐ[´–jé}ö€}fÆž(ÒEžp‰"Q-jÄk¢žwƒøTœçD#P¬J¢ÒWÉV&*“”YìC…²P©æÈ®T¶)'•ÓÊåªÒÂY‹Ýä¹@þNn‘õ²I}Z-å]«RÕ&õžzÏ$LѦXSÓtÓVÓE³É<Àœk^j>c¾PN±Ô‹‘kxd‰(îÁnb›—•ÔÂŒ®$с=Oä<äqWÜÂpÅËy	ñÝ3¶Î"Jvò½4¥IßWÐ~ô§#¨4	…§ªlÆ.º šåŸÅP|FNŠ’[”YêQaÁvžF+ćb?e ^¤Š	bºL[q™ë}VÓšíÔBƒéH•8#º(yTT£VHjGÙÔ
+F€Eҍçð“‹ñ´¾æ]/ƒåË<Ÿöb
+gt¾¦÷p—TãO7…§‘‹§Ìr®÷%ðM½)Üg•ÜQ<AfšN¢žL<ñš†ÉhÅ¿qMmàŠâIo\ñ–Èõòc ‘ÄÆ]†­ÜwÅÁs™«ä Ÿ}§ÉÜé<K’¹«s1n¼ÂSo¥¡ëŒÅÆ|£å·wÉFwiwÄ^~‘ŠOx¿Ž/h÷ሟöóÿ-¯¸N‘Ôƒ’¹ZÔ¹ê
+u›Z¯T›úr´«±–+ú"Ws {Pˆ&\Ç
+àÜDÁ†~Œ7…±çc¦(P “¢QÎ=›Às<ã'³YKGo÷óîVž“qçHP{TÈöXÏ(Žó/Xú]ÎàbÚÍ7Oí^øŽý¡QÁöÒXÓžZŒé¾åh~\6žvšÀºîàY¸Ù äRgàâÉjWŽq¼»S(2(Ž6ñ;'whºbú
+	ؼ9FŠ(QðoŒÁü
+ü냡ô£èÀ~´¡3Aï8ÆpHKŸ6|ØÐÔ!ƒ¥ìßïçÉ}ŸìÓ;É–Øëg	=ã{t·ÆY´'ºu‰ŽŠŒèÒ9¼SXÇÐ!ÁAíÛ˜MªTÁæ°f95=Þ©ËxëÈ‘I¾³ÕÅ×#§®1+ëq]súÅ´Ç%ÓXrÚÿH¦Ý—L{(I¡Z*R“lšÃªéÇíVm/M›Ïôkvk¦·øéÑ~z…ŸfÚbáš#²Ø®éäÔzÖÜbÃiguuí3­™EI6Ô¶g²=Sz„µ¼Ž"†‘ŸŽÁuÁJ¶Úz”ÕîC +=.·ž;6ßa±X
+’l:eZ§ê°fèý"Èô›ÑM™ºÙoF+ñyƒeZ­Ñ³|o(¦:ƒÜV·kr¾®¸
+|6:&²]»±àR䏬<,3¿æÑÛÅãˆ,Ñ|G§FÓÇæ?zkñý-(`üVôÈrz²Øôrâ¨<­‰%ù:-a“šÏŸW÷ý+²:|çtMogÍ°{¦;95Ñãæ[vEG§í3šíÐ<ãó­}xŒµÀe­‡gÜüÝQiZÔã7I¶ºÐŽ÷[Òáü(QôðÎOùÅ}Ô¨q#K>DÖl.]+ÔIþ¸¯ú ¨®+~Þ{÷½·›lj¡
+“¸d¢&~¡ÕUFjË„ .è$ˆÚV&NìLÍ´•,Òú­Mš˜€iãØv­Mi2“fl&c±¦*Úi&Ú¤yýûÞ[—UkÓLÿé?νçÜsï¹çþîÇócN3øßÊZ>Íð«Rà^YUPò泞ýÃz†×ï]!0ÀéâHÍ2Gcdx¯™'1ªÁî–ÃÙÙ቙"fÖ1Αõ©¹9"ê4ÿz¯é£ävYU~ÒŸžÎÜ	P-*á†Ò ]÷QmÚ!
+äeW…Õ¶D]Kr[\K̽Æ&&~Ô'‡=™±¿;¼)c<’VRþy¥m/Zä/*­ú„jœÜ•¨Ùö1›S
+)jiªSRÓ4i)—Æs%8:,2ðgHR¯k ¥T(¾Â°·f¡ý¿*)=ý¦>Óç±þÎ^R\ss¢çg¬ÏQÝ萆xE¦ZT^
+%°â 
+…
+ý¾ÂPMhYÄj¨õû¼þP—z@=Z¿ Æ]ЈÕÝ”.Ü\…I<¢äƒ¬*Íïô+¥¥qQu°Ë‹/•Æòà!UQjæWu~	¶`ž"©UcZ®ù¸FE
+ˆ~HõHSZW€¨AZ…TÈúòˆBRçqu
+-¨¶Î+uø寽9g¸˜
+¼488œé•šøŸ2•:ÓA;E´×h½¨£Ï…æ]T¥§j寴¶µ@v¾±RÚ?†zävu¦uí+gû€€L`	°ØÁ"`|N íèãaîGÊ3´Æ쥯`,vË€gôJÚÛ.c&Õ²cmF~”wC¿×h§­(·À^Åm¥dÿJú:ì9(o×+-Ël&:Bù*ô)Ç™‰ñëDu	å‰èûk°o‚¬€,wâ+ËgØGΕçø4—‘Ÿzè·e@°ùaÿIðz3Ê·!®Q£Ûñ{ÚÌÆ[1™‹ñœy“œ7æ›â—1ÝœÓyñ@L<¯ó@/ðF\l‰h:¼*î“ëÇsþ0Kí¥ùÈË0ÏK?k}Äð½ƒyõ :Þ£“=dµ#ιúajA}
+0[¢ŽÑFë´ËXƒÃô]c'ýzR'ÿ õ"¥4ù¢ÿÅÀJôyLòaÇ`]„/ÎR*úªÖ`ìnž87¨/ĺÑö”ñ¨¥ï«‘ƒàQŽãçqαî)•Ã/¡íiŒSÄÀ˜ã%0w{]é1ø})r{l	À¾9ý9ðkà(ÇàBò́쫝4µÝúr
+ô[™o@
+°ŸÛ`ü$´O’|g˜›Ìæ†~\ruÇnÏAî…&gÏ|þK€qÀã -u0m9?µÌYÞ/nßÌ-æµ+%§×2ï•<OæTœ|FR)Ç Ç·\Éûýnd‰ïŽiÖG[˜³Ì7Wr^˜k¼yO8²$n®9ÎɁÿÝ’ëà¢+Ý\Ääë´}V[ÁÓ*§¨/áb}#ä6̯:ÌGà‹B˦=QÊÂZ>ßÝ	²…aö)k0֏ErÑG{e^ûÔ{DŸ¢ëÖy”z‡Z/Ë×ÉD(QÛÆ’oû´úÿêÛz­Bù‚ÞgY˜Ï6Þæ€2	ð¹úC@0Ñ“­´xÖ*³‚¼øä»¬Ê×4]Di®H¦ ò”}…ñUyînAÿÇ•jÆzýÐL&¿vg#ÆRßÆý pÿÄñhç¹äJ—¯‰’9Ãç.¤9û®èN9ø3Ð>~[î_Ü
+|>Ëûg4ÐlóÕºãç	jƒü‘ËÏžNL৙ÈËDÉwŸïònÁ>EÍîüù|ä3ŽÏH>çøîsÛ'Ê8ÿ8;þ(Ïá^ªvöu0	ÈCGœs¤G‹X—±GÏoZ=æ\«G;iõ»­̵֫Æa«
+óΊݩQû,ãýäÞ¥œ'¾Ý{TϤUÎy¶G¶Åøò­”ç ±ÿÖP-úý=ß«¼µ6ì;äý=%^¤oŠ~Ú‚ØïÐ~aëÅ"*æ3Ql@zœél¿MÛ"íeâCÚ ²P~²•î4LÚ`ü†}¬^©;cÛX§WÓ.ð.O<M?Ó;)ÈkÅóP§Z'yí±çS=
+´×$p¸ŸöˆAÌ9Š9—²Uò‰}_±y~æ,ú¢®a~Ü`}/ùœ|씹ˆÊíF.¸Oã-ùÞ ý´ÿ	=áI¢=ž{q>]¡Tg‰«“{2ïBÞ×`€cÔ¨Áú§äÿAËÒ±‡°¿xÚéÉ4N Vì¥F™[6ñþÑ(™9‚ù•Ë÷Ä 8þ<=jtÐf#
+Þõá.èú
+`.kiÊ[E‡5„¶ÐñØЗÊ÷	ßSë
+Þ/f”ÆšŒ6ƒ|ÿa\í,âÝN8Kæyè9ÃÇïE÷î&ېõ'z`³
+©óÚRIGOHýJzUm×Tð›í'ÄKØ{­4O;@IbÞè)56iÅàÝ%ÜüP94A»DEÚÇòþÙ¤'ÑtÙ.÷ø9*UðÒ
+qˆVhÊcà#üôUëËñÎzý8P§Ág•M(çY¹ãc+…!6Òé«ŽùÙ¸˜w ·ß8^”ããåXcq:1Þ(>9Oî~²ÍŸh‘õ.aËáRµ™:€ýê)¼Ã£T¯ì´º•6*TÎm^¦…Rv¥T(ê•F ¢žöAæB^ ú€6àð71•~€¾B¾ÂßõW8» aø%ðžk‹u#}<ÄûVw|]ŸB3jÎôœ‘6Ù~Ý/Ç9<Éêfh(‰aÜNY¦‡²Ô~è+á—P×'Ð.±ínÏ­ ¼N“dmâçè®dÊ€w㤏%öW.ßÏŸ5ÆO¬ï“À7dþ÷Ó—%‡ÎáMnZÇ”#ôrÚÄyn0ì:¥Ê|î£;Ýu‚¾QêÖ\™¦•‘–¨Gy6í'®ë­êèwu<\¸0§P€!ÞC{ ±Žû À0˜c9××cãÞåt?òT(ÊKÿõuÃKyu=ê-°¿O÷2bõrÊbp[rëg ×ÝµŸÒZle²ýF\^ƒœW-ʾÒ_®ËóÄõ/‰ßâ<úÞÌ唚(cüv΋œ/µù«óYr6¡Íµ=qmo`¯Ü¬Ïÿ'`¿ûŸŽž+®^›îM¼7Âx«>‡oÌר™èj#ÑÐQ¢OÆ94òeè*P΄ü ÝjHÜFC§Q^Û[@/°_¤Ñãλrêlß«/8ýeØþì7ˆ×ÎÐ4ÛhЊò °lèä¿h/ßØ&;ŽßãçIšÄ&ãÂ=MpLÒxn˜aHÉã@©ÖlŠ)JÆP=ÚNÚ¦k$eƒ–¤L‘H(©»nÒºN7i£yò¸¤Îw]%ÔŠáuª“¦ù{1
+^”M“è¼ïm„Lišn“õ}¾wÏsŸ»{îßýî‡ð(o€Žcðä£ÐNä|'Đþô7ý¼‰0æf;øW¡§e<ò1çÐÿ­ßåüñi}ü&´OÅœèoùâS{i>—ðò³Fiþ—òÒYâ/Žb¾w¤n;û|â§ä˜Ïõ!tÍ1–ÿ1¥¦âhIJ*æ–ñcÑU¼ý¾Š'©Š)‹Žñ”ý¨’±³Œ_á?U缋èÏAò%ôkêWi¹mme›È“§(¬{d;ʼ‡þ\§§ˆ‹žÊß@l™’{›ÚÇ ì»ïÂ]XséBþüò
+ØË*J{Zim½c½sOû¿æ—»G~†=µ·¨o”©tÿëE•?o/ªQª|/^®–Ú»?ó^~—=úö}ú¿Í—öù’–ŠKË〥òKÕ·Ü|yÜq[~Fêž«|y\RÊ—ëŽçw~{…xf-þo%•ýï–+üO»ò—Kÿ×RÊÿÇ·þo¥3Â0Ù=Xr¬±Ž´@ÏÏ]MHcÌ–û›~“„ô3$„üYhV®9ðÂÞ—ž¾ŽXúŸìÉ¿G‘×TÙþ¢–úžË¿[Ÿ«øc¦úžÀ\|HÚ¡mP-4}ûÖ\ã‰¶Ïsì¼òœË¯äo ®w‹ïæ8ç}Gž÷w!ïú5éã?ÁÒI‰ÈgøS™æ/§\«BfÄÍD¢#ÿ2É@Œà/’aˆ¡xÝö¹ÐœL¤*kBn”?Ahâ$‰+Uy’åO¤Vydõß·]+wÄv)·7ÔñïÊŸäO‘&"øQøzøãðø~þ©Vý4S.whíu¡x_MZð8Â=˜Áw໫WņìšB;CöÆ@(RÉ·s¯*ââÕ¤®sÍ	cž›è©É§*î‘ý;n»W‡ÎñQ®‘:”A©5ÂuŽW’vH¾I_ª¢:”ˆTñ>¼f†E ”Lª«ÉŸ²QÚ{¯#<ûo «á;ùz{µÈÌó—T±ÈZÐ^§­? -U]ÊD*x'žZ|#>¡ZK¤š·„H¤™o$AˆaP‡‘FÊÍÇ‘Ç4cjÆ15ãèÅ8bMÂÇðdeÚùaç‡HšDځ*WÛÁ9•Ø°14Çïå^Œ„{cGqwmª¢FöÌk×®Rż©ªšP×9~ôBL­ñ†Ìó€z•M)o½âvE†nMa. zäœãëøz5
+j¬ˆ@ž„²wXVŽû{_Î/»ˆ¼ôw‹~¡è¿+x>ò)´b¦Ù{Òs‘u쯨ì1ög2‰cóì-ð'––½`—Ùé‚_Bþ	øüø¯ìû΋4K§`èû+vµG¾,{Ënm/&„¯˜XS_LÔzBû
+{“¬C„o€¿É2¤¾÷Â3lœ‡Ÿe›É6øëEÿ-[ß4{ƒÍ’-ð”]#»`Ùš´iÛ)í5›rÑv±À^c§ÉZ=c7¯ÅÝS©æ
+Â5ú(û´Dm¤’ýŒöc¹,I.I'µìçvXV’°1Ç,azæÏl3§xÐlNqÃg´acʈ¸ÙYÁ֝À5L†¯2¡³a+òÞI¾##¸&U*†k\¥®î[O¯«TEÈ1ŠT‚…†¡è9âÀõ0tzzVÝ„† CX>â â â ⊈ƒˆƒˆƒˆ+"®Z‚$SDDDDL²¿11EDADADADUDDDT&„	ÂT„	Âa‚0a‚0A˜Š‚‚‚*""""¨ˆ ˆ ˆ "„¡„ a( a€0ááááV„„„„[n5?C$r r r rŠÈÈÈÈ)"""ÇÍðläm Y Y Y…dddd’’’-¾ú †Ïæ(4@’̀̀̀Í(6£>¯!H²„ÂR„Âa°a°@XŠH‚H‚H‚H*"	"	"	"©ˆ¤úp‡ I,ÿ£\öÔ°çh¿ŽÍ•ÐåÃäªò£ä’ògÉŒògÈ”ò#ä˜òÃ$¬üiVŽú”¡S[„]–€^è1è 4	MC‹¦R¡¿@y¶Ùlt¸´^mR›ÖµÓZNc.g¯sÒ9í\t®˜væœÌˆÔ³jµŽbi!/¨ë0®× l"¸v©Të@»Xg7ã×Á:Ì•×ôb€.èt€¾ ‘
+öu¨•Î a†ŽÓ~³ª¹S\‚ÂÍþN¬L³W×»ùó"M
+Öb¶Â¯B3Ðt
+C!¨
+òABÝ |¿ÙX¬ròC÷A†l‚x<ˆÕjWê櫦S©·«I…lÇ¿ܼíÂÒ¶¿ö†íß/"t–øeDÏbæNçmqÏì—¶˜‡²ElŸí¿¶×ö_‘jú(‰ö}7Þ[ú.[ìA±GlÑkµýͲt 
+ùð´…ö“+p_‘ÚPh©ÉÛ`¶Ø*KëÄ/'ž:I›êÞ
+H:O¡C×æh¿ƒš÷ˆÄKâ*ð¿c`ñy\6ÒØE_šî1+ÅBÛ«(v¤R–Çþ0StKúY1寠.ê›/‹ûÅD[ZÇí“è÷˜jÂÇŒ4;m®#"(Û®ˆƒâañ5±Kìóá¾-¾*d7É íg§gE~oá³ÅC¾´êâNñ=a
+¿Øj,Èñ%[
+õ†ÛäP¡õM߀/-¿ñGÃiºÒh×µ„¶WëÖ¶iMZ£¶^kÐêôZÝ­×èUz¥®ëNÝ¡3èué|Îl%ølëpœƒ9òêPi7“W\p%ŒêŒ<L¬U¼‡õìî¦=Væqҳ߰þ±»)M+ùŠµ¢©›Zµ=¤§¯ÛÚÒÚ“Öò»¬pk¥E÷öÏP:1€»;ž¦¤¯?MóòÖh½U»ÉèÉú9Bé½£'ˆ×ót—·«¶så֝;>æûéÕÜÄqÆw÷îôòt'ɲ>NB¶x\ùmTÔèlK©«B
+RˆÀºáÑ&Û¸„Ĥ3PÒɤx&m™¶LqÚAh'È6›Gãĝd’N7™é:™2§d:q‡?(m
+–ûíÉ60õ=évWûýv¿ÕoûÝ}s¥zÿr?Ø”s?iݘʝ‘Ó¹ZÚ˜•Ó­¹ïmô?“#6"$âcÄJ«tjŒÝKl‰'i?»7žØ”5[†–Ñ
+`¦fä§0ˆ'Í{TÄ…`8à´œE@!²:ŽÅ7˜÷'âƒ~¿Ž4*¯cò•è(ÆÆC!ôãEáTЯ/l…>‘¢ ¤JÑ!Þëô‰¬;Ë…ïC*ç õz݃ïc”"ƹ|ã\õÿ¼:šU<\ÓÓ7‘è&Úƒ‰¸Ûs¯íßéν²Ãïìë¡Ž	µïxv'­·wäz‚ñ\_0XÄ<AÍ5Áø šH<•œÐ:âC5ZM"¸=žŽESMùúÁ‚¯Tt‘É¢t²õkZÄÜDÍ1꫉új¢¾bZL÷•ØEu¿>5hBÍé–gŠõ0)±€†Û}t³KÜûôØš€»Ïw‘Eø4*QÓ9>Øœদª¦ª&j‚sFMVè¶Í™Ü}k¾‹øôœI„n)ØŒæ©EÔš«ßКl|:E¥’Ó¶/¾g]ôÒÍn”؇/üîÖoø<ˆD]‹^Ý‹]===]´èQ»jÍ­ÜØškØ +1ÁU{<
+}Î÷1ŒÞ7h6'FgÇÁ¨Â"p7uG[*VAÍY—‘Œ„¦
+ÝÃ^¹ö…+ð?7äq¤w(\£g½ÃK+iþÒ=®/֐ŸÒzȨÍ0”Ö•ÅZ“ª Ñ_Ù_Õß8P9P5Ðh€Þ‘,t*Yú(
+gÔ­vÍÍî4
+Ë¢þÞ*—uÇ´¡ªiµë|ý/Ùxžôb»æfíÒ§ïžßb*‚‹Fµg~PÏÜÝØ£ÑBè…ÌÁÞ¦Œ¨ùÁƒq”Ä4â؃,F¶€‘Çdà
+„¹ŒCÈŒs؍ܪx':}B¼MÎDQÚâ=(jªR@ª„=ºçgÆïiº‹üì8ôo@ñì_Z)Y,$dƒgÒCyØçö»U˜2“œA±ätMuÌõö`Oá&ýKXdˆGf´I3ï!!7bï)ÃÛ8̍’­Lf#ÞŒ.AÄ#<e4C¬ÂúÙ˲ËE|
+ ¢“h’þXz,z;3©©F™@@2ë*ë˜PáæÏþø<&ÕSl°?1[ñá÷é
+êbyXŒcÚ¶óîï˜ï#ö÷¤{Ò3é5µøZÊ[äMžŸ³?vŸa³å&ƒ×–½ëØw‹§ÅkªpWx*¼Œ+Änb_uŸð(?!Ÿ)?#›ìHe¿\#ï—ËýòŸd“Luær–®’‰ÈÛdH"”'
+È£R´»V¡Qòæ0Á¼¾U>Ì^ƒ~>ëàÌy—·Á’½Š-/öÏ’OÞÓÿwòöôâÎh4)N£ØŒÚ9›§f:£’=‚¥:5C5ŠäÙñ!)B×0dÓ+Í*FX“áLÔR¤(«ô ´<•ÒJÌ>ø˜u Á7“®©Æ™Ö
+©+È7{•Ã-ÏÞX½zuwf2,ì
+
+õ«BÁ¥ceCE]­«Ôi0Xƒ‘åï-¾ø­ú•Žtj§©ð¹›Þ¿öïµÉºÂµ.Ìîþ›ÿ<Ûü­»–þÑßß~vxGÓíõ!ºKÉÙ›¬viº¦Õ-ý°”,­œd™·¸SÎæ"7â¼îþÔcr9ñë®×ËH ž­,.s¸Š ò–Q\¡ñmÖ„cìÅD³)Ž°ƒ8(½Ž¬Ã@ùytúrj¡›Í.rü8ìïó‡”cÊIå¬òŽÂ)7Œù¶
+\áU]ù²^œGž•ó{1]Ü¨3ÓR$œ™ÛZПÓ˜’™£”²
+¤}(ã¨t¹êj‹ì]4>FêjË€G£
+\Z‘Ä¢°oÃæÞ}O6´*û¾›z|Ý·J
+3¾ïL¸úòsŸô/üíã
+ÿÁG;Ÿ?¼w÷K¥Ÿ1»6-õÍöGŽœÜrøÛ¯¾Ûå»|äÝ­Ïà<¹lxµ ýE‹ð~!bæ=¼Êoä÷ðå
+Ó6°.¶’].¬¶§„Âû‚û oŒœ¥D0"ž„Qü¶æeX'ðáYkAFM&áÇ%¼™ 0A,dç¸cl¡a!kzÇȽ¶9DñX/â¯ãuú©žêïd’p¶éÁŽApšÉD)…öˆÎ¡=r”{Te_g³Ùæ¥[Å•Oòà?å9T-ЫB«ÇuR]iPÂ&}3§ÉK_ŒŒnÎâew˜_ÝÛú¯Â5²ÿ³PŠÛŠ«ç²Dm…Éêçí	û㞟
+¿°·_·ší’Ђö#vGX° vI%šË*8­VÁnqúq5Ö0³÷cò°¼.èêò	ü(yZKØB,Tˆ–¬“Š¯ÄéZåwV;5'ãÅ¿Öœ’¤ˆa‘„ŘØ&2"…ŠÔ—Ãf³²6ä8Y†µ2\æU¬£8 Ù…^|ya
+Dg!¼@¬ÃkçÂ$çˆToÐp)êÑ:Ô­f:¥"µV /èU×êCB]æ ^
+uµj unÁn~2õâíÚ§úÉÍ™<²uÇ%Ìî:Vøý,Âäm/ë?ztO€Ü-|ùe¸pëÚù¾w´¸_	Z,CAtE[³»¤ÇtÔtÜsŠ;ezËzÆ1f‘®8Æ¥«¡”kââ‹®óäcqÒi¼„®ÂpÝvÑ燠E)\ù²6A	„$@	dcf¬™'ͳf2Õ¶á³cJÖR…
+öhúž”rpœ{—äÛxÌ{+ÝyûÉ® (Î3¼ß·»·»ßÞî-÷ÏÉÉ'Ü
+§pþ]rÛÆ!V[Ñ‚A&sñZƒ “*0ê‘ÄÔ22‰™Z±S±!q4í¨%þ@´1¶ÕþÇŽFq2¦´NBúCÆv‡¨·ôýÖÓØ)7»ßòÍr¼ïû=ïó<oþ´‡­kìû${+¶%ᢀdr½PC|‰ÙºP»Ù²LžÆ "çúY8›q“Ô=Õð²¶jßÑ»ÆćŸC¥_ü8{`Ó’EÍ­uKZ¹Ú©u‹û³Œ[—ÿjÜD
+¨}=ÿÞ½¿÷üढ़¯mß(­‡þõJe¦kˆá`8«°åʼnì“çp³È|þù°üùò5™e$³S(—˸\NÊ52+ÓŒåaÜÏ°è§'1Fœ ó´æ`¹€À1¤u×°ˆõ)`¬¹*$¨Ò@?fM™ÕÆMè ¹GyA—cOÐnŸYÏ~¹½ÿÆÏsÿ‡uÆÃqÅpÇ—€ÉÚÉÏ8œ·—™ÆĐr<&úã%§&'ôàáBÞÇUþªÀ­ÓÖ;_ÑئÔZÅ̵V3ß´®æVˆMyÍ®L¸;ܧìõ(‡¼‡|oO=~{ú¡ØïäTOÆÑåèrv‡¹>8Ç>¨TAÙ^xŠJô¹˜-£©'ËjÊpÙ0~¤ì¬®¹½ñÖ‚ÎÜ_€
+
+,öE‘¯Å"zGÀêŠ]IÕá"ú×EtÇgáG¤Lt¤Æ†l¾Êü6S<âίø5 ÐŒGSÉl*ª™:OEͲÑËÄNN	˜¶xÄ’’ÇãU9ù¤¼Ï…ŠÂtËñ„ØGžÑüï­øôÒŸÇZÒ/m6²W³ýõCËk§—/Z’öeêÛ×645²ž²é+WVî/­8ýòïUF2Ð’ºç–×Õ,OgŸX»uãú¦¯‚‡dvƒ‡ü?Ìh`æ6ëEøyÚÓÈ5ZùRÏlÏ|wƒ»ÙÍÏöTMéžòC~Ìæ#;ìÅ6MÌ¡ K#Éq R¯îè¢@0˜g0-¦a௝ƒŠÚÖ-ö%Õv;
+Å2ÍgÒôžLª
+¥A@·ý„‚àj*g>‰!õ’pIh7öŸLo9•ž1så·¶}w {	E®o˜9y"ñBí“Çùá‚’sÆØŸŽoë_±°´;wïqÕþ̯>±Ò®RoÑ=ô
+d*1ízRä9_,Ęø¾ø‘+w‰X–+ÆKŒ($-5lù6r†}9&c™“ˆ9ÌМȣ9-Ò€&h¿Ü·¥Ù„>¬,¯%¦vÍ«ÏÎÅÏg÷ñÃÆ[Ù×il{àJ!6™yS/–8ž°X"Åœý´%ËXx‚DQfD^X>4Ûv§^¤+‹•´Â¶*
+(1¥t˜S°|?̳ÔoB ÖŠuÿ[üöÛ©œ÷Oh	óF£5Ý#¶Ñ?›¥îÑg.ÇÔ06<ÈäA2?{PÏCc${šξ¿v§oÉRÎê…ÄÞ…œXfÍÃH*ãqž‚%Tl®zÒé‰3¼Î/æ;ùQž/äÓ|+“ç:yQÌ2"f¯ÁŒs”eسÌÍû&ú"üÆ1«¹Šý9‘kÏ¥’LPbjk‡hi|½(Âß©†8 À–|ˆÃŠ½º,³%b‰îArºT0'NsæÆ¥S“£ƒ¹U((ƒ]¸Y$‘ܐþE8N"ā8M*$!<Hå¤	7sRÉàn@:LŽKÃä¶t‡¸÷s»¤ýä¼ô[rpW¤kdÎ}*ýƒ(©ƒlýÜ6©—ìÂÂ2¹·pMR3Y_ä„yx!7OZHêÅzi¼¤\ã9\\šK’ª@
+—E’ˆû8$äLP!æX"ñVA¨´¨ÖJ˜³4‹‹E%.Ó›™¥*+qQWÃq™Þ`kŸ®ÑYdaÖdpm€ƒ$LžÜ|BåãÚåqº:;WŸÿ%À‰’Tyßþa™JÃ#†¯a­ÆVB$IUÞD,<7“"=úgS÷ÜS[ç+]Ø,"ñÌf8…3r@¶âSx–n‡³ÖáEF‡—˜ÊB qú5
+E¯v$8ª%¾Ð¾|-Û–mKø¼`g¢°Ö‘zÊ-53ÝÕ]æ¥K”ÚÂ…Gµ€mqrô˜ cLÊü1±e¢m) BÍ(çuô"H@§qãºqÃø„¾çe?¿SÍm½»‰^Ðÿ
+“cü‰±1S˜ŸèKûø>q¯u¯Ê‰HPE›à
+{;¤Œ]Èäu¸º¸±ÇÚ¥n·÷8w¸vxvx»|VÁ.:ŸËîsú¼.Ÿà˜¡Hù3Ö>BC4 ,¡|ˆùuÚßêïô÷û-ÿM?öká~Ù€®cf÷lúåCÃgrkÊäÖñä¸i‰Û`äˆÏ¬‚í± 5(Á ƒœö‡ŠÒðTåÏšzÑ<´ÝØdœ1†ŒM¨â³cÇn\?yr_ÝÛúóècµñ#ã
+c
+z
+5iLNNÞ›¸KÕƒòô=ãb‚Ì„¾u¶í¶z¡En±–ªý¡êˆD,¢…xD7©R«Õj› jRžSuÚœZ•Ze{Ú¶N}Q»Dä©#½‡´#¿Ëo‘ÜNÉjSkÕuê+ênõM•WŠÕ©(V›Õ¥xÜÅ͉ÒÎ~'v:™@R¶¢ª.FàÖÃŒ¢ÁøwyJ¸ßrÔrÖræÒîÖ
+„b!
+º%ñ¢Š_q£Y;:Ð=`ƯhœJøìî²hêŸLU‹Žt€žJwNÁ=Ž [†C¡<P®*ZaЭмæŸužû ½±eÐøñ•öºçV&>þ¨%Q3Ú»cüpÍﶾuµ`V×;à“ï4³ûØEÓ–}}Á³0Ö - ÿôÀÚttQb(ï”ÿDäütNp.ÃãòFùÆÈZK‡²6rÍz%dm KÕ¥E
+¡fëJ{SpU¤izÆßåß´ÚC”ã¦Æéªÿ—êªnÚ<Ãß'˲,[’-Û²ä?ü‡Cà’(	ˆ$°Àš¦1Ì
+Y›0¯Û’´ÛñsÇøYK`m×Òq¥0zÚÝmHÒ1Rzƒnw;z쎕m=Ê–u
+,…Ûr-ÄÙûɁے“ÞèÓIßû=ïó<o‡ÐWÇW'ލ¿› {â=‰íñí‰ñ	FãfòÉx2‘áõD#×È/‰/N|‹ïHlâ7Çwó?ŠåŽñÇã;gç™8“P9•—ã¶x‚ãiìoQ5ªw)¸KéS(eˆê@A¨{g 3-ˆƒ³½´"¨DuÒ4­Âë k:„OàaÌâÏh#qјž=Ӯܞ„>Çðøu£­$˜3­äëø‰F|Û]Ü@uö•)	n|´õ$2æeW’Ý'Q{†ø÷m<§ã3ÚðC±îM±‹C>‚ᅐ¦âßú=™8¤\ý¶_"W¢”á£R†3‘Œ}jNã3œBÏkNýd§ÈÙWÍUóñ
+Èc=¿8^—8ʽçÌ^µhxvX%æ/?(Rpˤ¯°1>¯_¦Mdщ(jÀÑ@_ïË{¬Ð?[×»õö[Ø‹ý¶Â‡ž-[¶×§gÍÃ'.ÿÅIt¾p³pÚ³kÓj½>(͙߲éÝïuþëw|Ï“ñŒ>=Ýùs/üà/Oc`\<9	5Ü5Ì`át,(¬ÛŽæ@µ>Ì^ÅW©kô5«•ˆÔFë>üµŸ~ÝÚDzä`Ò,ÂuìlS‘Ì”¢S–1#²PT#/¼†±ÐtÔÊx­VÆ2@}Ãp0àdhÐLY‡¨vhi†I’4ÞJo£¯ÓÓ4=€·Õ²ÍrÝò16 æ4Ì ÉÂDQí†ýhìTÛS¼rB…½Îçrš2öPÆþ_ŠcúœS.S‡OÛy½„ìxÖtæ¹Ò°†r1LTSŽ‰q¼?‹×ãê‰[‡î½G/ cø«Ÿü”žC/„>¶÷ß´ؐ5,‚ËCõÓÿìºî¶Wªuêã©Nu}jgêUõ'£Áà¥ÀûA'Ãð>™Qå¦Ô—U7P;©£Ìiæ"ã<¯_sQádÙ\÷,>ihsô¤Ÿ'5¬w%ï'©d]˜ÔÏ#‚¨/cv…O„¿Óáð,\Ž%Ê@¡ÇbFÈ]3‚.8)=6@}ï4msòÜ,bÁàžá¶aÆ,˜a^GdnŠ-µÏà³Óœ}N
+Tx„ØdÝhÒ±¾éÇ$ñ奱6?¾îÇMþ6—ßâWËó‹x2¨¿ž±1ÅZñj„x4p
+ŒȶY•&·jÅéO‡qOvìÁö$'‡ÏÃzsò©$•Ó²°5®E ûYSìž |J*Iç$û ?òÇHý0L"nÖPUeÕT»Ä0¤Œ È`¨²wLjW.ÿj Ñœ^¸épÙ,ˏ䎜kùé«¿Y±ª«±?Qy3YÕºdÅÒr—ƒúëœ{³»Ï^|~E¨Jeëêúw­y©14=Z½t~áŠT¦”ÔÌo)KU%; å½€†½PG"
+¡7‘
+î\G¦*¸,HI-L×"·(ÙÐ6¦‚žÏÏ÷T—ҍ|£gip¯m¿s
+`zQ 6¡ßjó’½ð8"âü16ÐÁW)eI‰¸Ôpân´°_¸¶˜ïžš•c5Ÿ|ÕÕó¹ÙSå'n:Lœ[Üj8:™N®SîTò!k.8'þR'€„•ø<À3ý@/Vwô_(&מ4$½~Sî‡Ï­ïØ	æþÎÞÂ?
+_îþ´6{šùfSwßÏÏ~ƒhÔc°öZ¨Ý0V·ŠY	ÚF1/åå-Ê&uµÏyÑuQù£ëª2ÊŒ²£žQß]Æ3Ï3Ï× 5ÈuJÖ™wÚª¥*¹J±l°n{­;ÅÝêqé˜<(‘킉Р.˜àÕ…ržŒ¨ÝŒ¢[ç‡08È™äv ¦"æ¡òW §C@?4ÜŠúm˜ŒâJóä>ÖN5´Å¼j µ˜Ê•D<r+Ç´ñ1
+Ôc<7ˆ×4ˆEΆœšì\DUe••€ŽØ*€"=·pKx²)¿eëÓ«:}Ø«ÿ~´pËcþNý³ìÑæ=oŸ;¸¶+ýë8…ip˜Ói†ÜµOáæc¶”e²\V*¢åu€Æ]»½;²-BU[tgµOW,Kœ
+¾%ê~»ÝkÂÅAP&ß&ˆ°œ¿TàS˜ EQàe‚«†[k®°çó"bÌ®©èM'XáóLžËKE´0¹l,V1µ@pŒ~°Éÿº½poÑÉ5g÷
+úw`uBJ/Ùܾë¹õOõ\›Å% èV÷R®ûÝo¯øî›GÎîƒõ.‚õ– V¼(„6ˆ\P'uŽÌ~ûþ5×që1îû;ü@€e½x9µŒ©ãš"Çù3Ì™À%î}çUîCç]Û<C>Âgn]ô÷]öY|&"µfü©—°‘Ò*a@	ŠDœÇ5¨ãr	‘9á¨nÆxi1j³‹Q	™ÑNÁk#ä‚Ïn“$Hó)Ú!)$ÝI‡
+ÅpÚWQ:ÒéŠôEèˆc
+^Ô!áSl¨‘Œç¨Æ‰)ãaxc†·V1""œ€‚ÂÕ¦o¨0‰3$ò10Iš¢jûLš5½†ùnHòÑý~Nœ²sÍËE±Zhq`þaÐœùzÁ€,	ä¥y½`@²ùÐt
+3Ø#ð»å¤y€ÞAÃâQ0'ãÈ3-‹§èPüÔ°R9úË­çóØû‡1,1†eGûWÖ”X6¶|½¦㯥>½ç#À‚V¸T8·å…åøÛ›·.^ü,á
+
+àð¶20Ê*i<“Žº¢î,½M±²ôy…òÉnÊ+ÉnÁ#"—àÁÈEyí¬èÀmŽIå Á1Ø-ÊxRÆ2¹Œ¸à¹wàÑŒÇËÙËkÙ&vkag¸Òî67åÀ´ÁžåmC‡äa™’	&ìN]Vý©<*îPê}pý÷s5ã9u)P&¤
+€£N™²ÿÒ]5°Mœgø¾ïþ|ö}þ=ÛIHÎvîâ$Û„ŒÐ`\(b$ü°¦I?	LiB—A5
+¢%-)­B
+¡­	+[S~º„n*Z·¡‰IC˜´¿‚6ªP©0µDrÙ{瘟¢Y>}wç³ý½Ïû¾Ïû<xMÏ!wÌTm³%ÖdoÌz
+ûû*Ž´í|YYôÌüħŸê£}”R½·cUäwbEͲMüŠ\jö¾^C5˜
+¢}[Û°#g_vñBKÙ^¡½ŒÊCàWÈRÃ1RC‹ð"ò»ŽZOmþÚèZHÕ6Ç=ç=·kžóÍ+ˆƒP÷-+Hßæ'%ëA˜Ù6^°ò‚j÷IÞ™RÒ1:à¼Ùf¡Ûf‘œµñéµ 0Ý áüôZO7çÍ2=mN®C5»u¦¸ÍËúLaÔ¦ýép@0ØU†Ê€‚†5+‹È®@éCöùjšÄ1qòFfXM~µ=-œ3óŸ07gþùHŽY¾`Á$ÓwUøÈ̈k5yËÑäiÊßÝ\ÔTÂSN¢}Rfî'€Â¦XJÈ`?q8„‚ÛóˆË^A,9k›ËóÝ®‹ýñ„>þ};bŸiù¨Kÿï¿'ö4l9¸¿qÓž”:×;Cö•…_xçôù®«È†‚¿èžxö׶VŽ´ã=§ŽýäøÏúXoU¼î#ÎhE”‹*ŒDŠÑBçgè>âXÚGGð:g£“F»=N—›ô`ä0@Í!YÎjõx­>‚°Y§åEâïshŠCÀ)ñ…"ñ7ýý~Üâ¿íÇ·üÈOxŸ×¤-x¶ß‹n{‘7 U¥Ïc8\`"8Ÿ¾2ùßPÉc€©dÊ+‹!¯ ª‘!f`/”rÜwŒqŠÞÛÿ›ûVäè£y5óSÍ1Üëäç'–´ìïš<„ËÖ'’¯íü‚†Ú~ñ4œ’àvŒì¬Êi­Ò¸j·sCÜEî
+w‹£s¹n7×7h’a	š"aŠiÄâ:|³4C3,eÅ,ÌL³åHœ
+X¦ãzG•Ùž$-¥Eâö"·±i8ÞF}¨¥O<xŽRüÀS'õô®¹C/Ñ©-÷±
+›'Ía?´Ðí")šðz‘¹oîˆò2õ"räQ°H#:Øeè`$	1:/àóIð6BÆ[?€mšš8°ü†ß@¼.½ã±ºÌ–¡š±'ömìÚëô˜rV-7ùvNÂù
+$zÚ
+_œ[æ	;ŠÊ]é`Þ|ðàòÀÇmŠÎ¿J~m°ê#äW4`5p§«iÜNÑé+ô-šÎ¥èÝt?Ü !$ä© "ƒ0 žBxÓXOú˜ Dì"¦LEóFˆ(|»þ&ïe||œŒ[âþx8‰[û“a>,‰®â¢íÑÑŸ2ì»üyæ<?½½µÑ’h5|ðqôZ”‰jÁìx\·›Ò¬L±ÁƒâÏXYÙdzŠN5+;[Q­P&Qq9µõ‰'z	’>ŒSš#˜¥ädý—²QC6ʆ{çòE5ÔÑ‚PMÁÀU«6ö­Â£ª¶ ŽJ8"j\Õ¾5?^¢þY½¦’5WmWIBÍSKÕ)•Rÿ©Ìž4}¥y­rf3ŒñÖ:cÉ´™iHî€ÈL<·#¹e¯áe$ÓÑH>³íÔ‡m÷¨w!²óâæÃ¥©“Ï·,€>ÌQkæ5ÎÒGgTÍYÐ8S¥”C§V¯Y³ºþùdïd-®?>«rIçaãÔ;ë‹SG&' g‡f‚œùˆšŸuKîõ–F5L!È–˜´$_ˆ4cҐ“µo³¬ÄHñ&
+h
+~äÿѐզðv_Aಏn}ñ™H=EHF•©üý˜ )Qµúh¤¦b銠©éοÔ]‘‹gœÞ4·ºãŒžK)}ç5vüÈà • 5B¤8“mÉM4j¹ë¾ë¥.á›4vè ‡kŵZîez-=ü0wÿƒþ'w•¥G™›‚8`¹ŒÿÄ|bùO·Y^c:,¤Ó¬B›d@ä¡XOlÈjÉÂYv™xÂJ¤
+YZ`g&×$n}Ý䧐1¦P;î‚°€kÀŒE”üÇfÒÊ“}wP\ÿã—oéw ¼ÃÍÍÝÝÍ͇qèuÄÐ/ݺ£Ò15x|p°¿opЈ·Sÿ>ÕñŠà%Žj³æº—¸±+NVîxV’\*,u'³îgq†ÍxŒqö~–úçqïé³ÙD‡=ã=Q»Ý¡ˆ¢i*lßtŸËÇ*!‘⍧ü§9GŒÙløÏÇ<h&Ȥó´5lÅ£¨;ûåÖ„õ‰‘u]+ žƒ›7¼º÷{[öCj«7êŸé“ú¸þ·ÔšÉ/È‘³ï;;pòä>‚ ËÍص‚qv´ŠÞL·Ñd‰k½ÑÞ⢬œƒÏåq?Åã*~ùa¼C‹²,Ô7‰kÁ‰\)×ÂQ\p·ë„×»v»Þw]qQ.‘PiƏq;êGœU#(;-[+çqƒëMÉH at uWÌNCÑJ,’V-JÔ¬_÷uö\ÀA6kú¡xdœ¨ß¨èEÛ’
+µßyvþ¼•%”Ò³-™øzÖ‚Ÿëw ÆR¨gb,Ä¿Õ.2N&lQ%§îuõzzÔîBŽõ¤<Øõ‘0b¿$¾'Œ‡˜¨°FØ$tÛz\¡ž]Ö"IeKh£²ÏµÏ³7´'•+‹™”í9a…#%/±¡ˆª”ó	9J„–±ÒNNö*
+…Âl$¤¿Ìïô¼âýa´­p¿·£ð¨·»ð\è\XhG]Òëþ#…§
+‡ŠIöir8îÓ²sã¹>t
+äyÌ"Wçwåã|ÍŸÏì ëV£ÒbTRŒŠgÈ¥0WcH&¦™Ù\á‘ô\â˜KE;‡
+È'€mAM¶ŽM3HQ«q<<F¤E¤–`b)¡9rJ^j¥¨IGV$a*(‡p[àqA°žBTªÀVDÁ”›}oCjfŽºÖ¬"4uÙPÇòpz
+
+O]ÿëÕÛÄ}Å¿ïî{w¾ïßùl'%¶“8Nf‡à4#·B!BÁÀš\"661F»dCD¬´šhUÚNÊÔnPiZ%:©dºNbjǦi¬-Sɐ–?²®CCª,­¶÷¾w¦hÓ6mÒ,¿÷¾ïîüõ}ß÷}?ïóÆ5qz¼¡ÉõcqÇ·ëp°Ï+RkS£ÞçR—Rï¤ädJ÷R'5þMrœ‰[Ëz Ö¬9~ª9Ï­}Ö>m`Ãf pfA$@o ¨ód8‚OØý„Â.:K¾„ˆSGr–óZ6NjٝyËÎ,GÕ¼Îë·¬]Öõ¶ÇmDo6Ç«q¡¶øÁÌ\É­e3îÎejՍ÷<îÍ¢Ûýâ§TrZЦêe[ÕB=þVT‡¿œótC/ðá˜^ÀÝ8«œ6ð÷ˆ‡áæˆCÐ;°Ôµ`ÒaÅ«Ÿä¶–¦–Bƒ³ 6ˆ‡úÜþÎfÃ\_ùÑg¿1õÇ©wZ+·‚»v>Ü–¨OÃÏŠ;ç>¸V†lfëöÖúlÂ4‚}«>óÝ'^;þdûªû"‹Ìú/lèûÖ·ß:ƒ§¨¡ú¾ð¬ô=¬	¿¶'¶Yl±¿Ë·ÁWô+1“DňI¬PØ +$U…)z”‡ÛO¬SÖK@sÑ-l'ÇLà9NLYáÐéÓ55˲;º]ˆ¼álŠi+´Ýì1N¯â€qÄxƸbÌ1FÂh3¨‹ŸºC&úÎt"NÜ‹8qÕ‹+‹n7:WêÌ9Ý(Â+".>:ãÇZ7Zl=
+'¦ZClìÈu4…Cµ–ú–
+Ñݏl<TÐÔǃ8MOW¶=ž©¯›Z’Ûrûwà7Óoÿ rãó¢Ì§iùÁ¶µ#øÅà	ITå˜Ü-tû„¾àŸÅéR‚T‹fSå°‘6MÂÒqXBªxæÿKP=ÓÌzÀóï›·Äü;(%;†Œ‹LºËæ,97uýtï¾Ó!Ö°µ§wh	ÄNnßýàé©JtzϽ˜‹Hÿq*rו¸N]h±Û‰ŒÈS$µŽD„E4(ÅC]Ä‚ºʈ¹Q+ˆ¹Wì•GÅQYõñ·^º.ψF©DUQ½ŽÄiD2Ô3u½‘´Òi™ÚÊZôvÒ)­R×’uÂ:©WY¯$Ãô 4¬³ƒú9JG¤£êQ6¢_#×èUéªz]ÕotFšQo°ý6¹Mç¥e^½ÍæõeÒdõm[­ëÊÓ4*u²:åxŒ{ú{„{2G‹XW^D{­f£rrÂÈîø}5éÜ·Mh6÷4G¡ «„¹ü•Ÿ~~v1ã
+u¯kTJLVûÇe¦¢ÝhB$z%êD ª‹ÓÕ#{E’(uÆTœ-ëëñ	>ËŠ{>¥‚$0æû‰†b|	ˆy/]€¸[Wã±þr<Z.Çcåè¦û÷¬y¯„/ãðèŸt;/„ß £IÐyK„'⍃7ˆZ„£Ô„f{¸â…1o¼€¥Ù:¿2‹%º½é1{Ów ËA<^Ӑ‡ù’¢Åʾyügfååʇç'hºÜ+LrùÛ”ðry;f™Žl{ ³LƒQûÉVåTU.Àu¸ªÌz%§Q¹Uî$+=½P„Gà€ÂҐQV@—²6(£Ú‚¼ ¨Í4­,ayÚÅVÓMìçÔ³‘m£EöyºŸ
+ãì9zBy•]¥×ÙGÌ+REQY„&è–£=l-UMc]lÛÇ^¢çée6OUW;ŠæédõÝqÓâvÚ6õ`(S(ßD4¢zD‰s‹—å«"ð¡í4åÅ´ ‚ J²¦ÕnÏjÀ‡¶…·µ4‘B$Y’WyTU#Ò¤°LΩhlͳçïIï´WôŠü²ÓøåÐ,†ù[‚´Jöè—c$F±¸ßŒõJóΈd]$@5"-Ïd3#^Y­€ç*áÊMô³æ4_àZòqz”‡€«8û
+|Wu8\yv¼öl¨ŒÂ±ÊKïN	‚X¹Mµü[X_9ϱÃWÙB·â®†!?j• Ì—ÕýyOÄëÏ+\É\I¼&ðÃÕïÊK²L½šO$,Ó°@1‹z‡öLÂ+vHó{³¾V’0ÛÌSœ5ÁtxA:Ï­ª_”7ñèЂhGcùÃ|C ÅVÇ@à^
+Ä®_‘çQDžn\ªÕ•L9†¿Ñ²s–0ZCý¹ìPJY÷@–§7u”âtóH¹Ç¨Ôw&€e©ËÒ
+W«¸[ÕÙ³b Vâ§è ©ú¾íó{pU(Ú#ñ4C‡Û1ôݹŠî!R|bcª¥…Cw§2•h¬[ݼzÇáÍ[6ÅîëØý`”Oøð#áBi÷'SÁëÞ¯yôSÈõ‡Ñ@ÿDè2äDU»=Ì3@¥€‡	·`	Ú:¶Nß	;…½°W8òü^Ñ? Ó:eYú¢òákÄClCn‰`YýE§°ùž¦'‘V%ÒË1s 3¡²\À_£¥ÜÚÍœ—úþ„¿Íoûûec»!¤xräˆþo00-TœCÑ-îAf7ü_³[ÙmpøëwØ-o)J™¡ÀÂÁ¡ù¿2×}33Ä!°ü×Ô7¹…A7Ë/àv\±}j4~ÂÚÐ2ÅÃ÷2Ã¥XkB
+­ª³6Ó
+Z at Gñ:8W$¹XÑ)+RGÒeE.i¦àøîlûæÊ1ñ¡Ê—ž>P㿇Ë_ÉŠ üùÍÊÒç•[¤öùòÿANßXŠíì[ˆœKEÖ`>GˆrƒÏ	akþ7Ñ–×ä—®èß'Ä›þGñr%ðø]	¾Gˆ±ö®˜Gþ{±Ž}‚Ø„ÄñÝë_'ä”üïJÒ&$­É7	iZIþÎ.ù¬´EaüËÌ8ŒÚhU,EP‘Dc´Š…@5ÿD£’4ø	j‚m@	ˆ ÝJqá3¸ñ	ºè;¸õ	„>€ÐMPÆïŽW­‚Æ…èæœá7÷»çœ{gî9¼Õõ@WæÒÊ=#W„yþÈw ¿|ø)‚ ‚ ‚ ‚ ‚ ‚ðúÀ€ÊÞÀTÊ×BlT4óάŽëMo›[Zÿóv¡ÁEúÁ!àãmp,>>19•˜žùŒÙÔÜüÒ™/Y,.-¯TþøK˜…¾ßÁÏ£Öà=z1Œ1Œc
+üa, ƒ¯ØÆö\—y*ñâ“^|žñŠ(a×uÝÓ‡]ýÇ̬˜á ¯÷1U+´¶¨ë´¶©ÚU‡­jzÚ1 µÁ³¥µ6é_ÓÚ¢þ¡µM}OÅÉTp´´™+†b[ÅõÊÄ‘"	$91ÊblzE	!†-Žë,Ó
+,b‘þÒòŸ#CUÄþ…3Dé°Y?¬ì$;irÎÃûPÇ¢R³ëy£žËoì~>Ñ0»°ç¨mŽ€eènߦcû«µÑN³ãežFÛÔøçäwC¹|~á‡àTõÇÛùR€ 'ÍË.
+endstream
+endobj
+3982 0 obj
+<< 
+/Type /ExtGState 
+/SA false 
+/OP false 
+/op false 
+/OPM 0 
+/BG2 /Default 
+/UCR2 /Default 
+/TR2 /Default 
+/HT /Default 
+/CA 1 
+/ca 1 
+/SMask /None 
+/AIS false 
+/BM /Normal 
+/TK true 
+>> 
+endobj
+3983 0 obj
+<< /Filter /FlateDecode /Length 23575 /Length1 43276 >> 
+stream
+H‰\T	TTçþîÿ¿7ƒl¢QÁÄ7<AeŸSDaÐTPM«‘a0"¸âì¸ÄxUbL¬06æAÑ¢ÕÖ$ÆÚ£€U›Ä4uMªæÄH{Ž1q^ïŒÖjß=ï½»oÿý/@–A"krnBbA¥sи’¹“
+Ë]•¶Aý€Ý í*\¼P«‹9³˜e_–A³*KÊOUçÕÖ@¦ç–Ì©žuüòÀH ñàl)-vµo‰ÞÄþαͰRftÒÝä€5L÷--_Xü´3…éw [ÿ9….µXËr[\¹«ª2`qìÆ"Ö×æºÊ‹—Öh˜Ãô•rÞü4dxå•ó‹+s<Çn ý8¾¿©B8¿6µáJ4 ó¿×½O™yÝ+÷þÅ7lÝúàå`xŸÊð>þˆ¨“­>ÀA´àB‘†m¨ÁfÔ‚iÌù%rTæo¦p³	ØÁùì@ë>‡%8„^fÞÀR¬’gÙjw:c‘…
+¬§s¦ã¢²с¹¨¤e¦ÓÜ`n2wa7Êæ=À†B†6ó;õsóKijÅØŠ‹´©Ë~¤p”e¬ùæ£^ÎPÈ,1äìx‘sP‰6:*bÙ{1®QÕÈTö²Ó4Ìc¬Õ3PŠz¢¡4^ØÕéf¦Ù†^£Š½nE30´â¾ @µÓÜev"qx†ëiA;•ž{Ë=c¸c*wi F²¤ÀŸpštúPT¨j¢š¢¾džCÆTζ-ÿAwĆ¥ò¸’nŽC0÷åuo·ñ	.“h2=+ˆ
+±]·GÌP„2î÷ö~bé€r§²W¹kyÒsÉæ‰Æ›xRWªÑz•>¥«"UÌoŠ+r³²G9cuqÕÏ£ë±w¨; lú•R
+ÕÒë´•Úè4]cÅñ‚¸%Kå<yDǐ«,PV¨«Õµ–ë§ç˜ç/ž;f¢¹Ù<Ë9û7°+;ˆœg¸ˆ+¤R 3hd§©ô2ÃZO¿¦FÚC-å4]¡ô/ºMw,"BØE$ƒ.æ‹Åf±Mt0œߊËP)cåP™$ódgU+72ì——›Ò¡˜ÜçDµN}[mT÷ª©–@ë«~ð;õÓÎ{1÷.xàYã©ó4{ZÌËèÉghã.ôAgïb˜Íç]Ç÷ÎR ÷ÎF1”LÜ™™4›æQwr%ÕÓn_îûè0wé3ºÅ9‰Þ¾œŠ¡bœ˜Ìð¼(óÄF±I´ˆOŏÒ*dWÙSÆÈñr†,–eµ¬“†<%ÿ.¯ÈïåO¦â¯ôQ"•h%V¯ÌT)Û•kÊ5uºzRýÚâo)·¬¶´ZþifM¶fY³­3¬¯YXÏùåót~Œýøyè’\.r?6ˆ!J¸hí<Ï3Q$3Oªh¤5âj}Õ*Ëh1š&¡S‰æ^o‹ïÅh™I)³ÅàûÞ,=”÷ø—¤|Œ›Êa®­=WYi‰¸e	D3AŒä˜ŸÈAJ¬<‰/äE²*;ð7ÅŸBé¦hY<G”dÕ	»Ü†}r½‚ýÂÁÛé®ß:žãIôï…)”H?HRLâ).¯b^Ÿã&ßã5ø)%Ø€!Tƒkx—oÅ u®%ÆÒ“þ,Ê·x‚Z ”=\ÝHêKR큕4CÖ[n‰óX„Åäo8û±Of*j•ò
+x«1Ï\ŽjÕ©œ¡HzQÊ%Þn52Q±ó)o•é¼Óðí>Ä{`¬ÌdNONÏÅTÞõ[xO(<Ae|ÇŸã-ÖŽËÑŠ5˜xë ÊIO¦™ïb«Y‚¹æ&Äó>¨5kØc#¾Ækh¤Už—Q‰§øæ\ 5]t¨éf¼p‹ó"WÔ=~¾Üí(
+Ã7û˜HV·òr1Æ\gþ•§»?oØ­(ÀÏñWùG˜ bˆg’h2Óe%×{ÙfƒÙ‡üQjÎÁdÆn«
+—56%uê”±)c’–4zÔÈÇ>=$q𠄁ñq±1ú÷‹Žê«GÚµ>O=Ù;ÂÚ«g'ºwéàßÅÏjQ)q==_3¢ó
+%ZŸ0!ÞKë.f¸aä³Ò×1´|Ÿšö¸f
+kÎú?Í”ûš)5)DKBR|œæÐ5£-M×ZiZ¶“ñõizžfÜôá™>|£bÜngÍVš¦”¯9ŒôÅ¥nG~»k
+ðOÕS‹ýããÐäÀh cF¨^ÙD¡ÉäCD¨cT“€_'eØô4‡®§y30d”ÃUdde;iv{^|œA©…z}œÑ5Ö§‚T_Ã’jX}a´2o5X«5Åu¯k
+AA~l`‘^äšî4¤+Ï£[,ÇM3B_ú*ì$;ïžê¬}T!ÝŽ°2ÍKºÝµšñN¶óQ©ÝûÍËcl+¢ÒóÝéz7qb®ÆÑĪ<§A«8¤æ­Ä[ÕýúŠu‡—“?[3ºèãôR÷ì|>›Û@Nµ½ÙfK9h^‚Í¡¹§8u»1&BÏs¥õnêwNõoÃS´ðÇ%ñqM!Ýî7¶)¸ë$0èQ¤ø¡Ì‡ùÔ½ØÄœ‡%oFú3<†V¨q&Nkáý€»p«ñ“Gleñ‰”]RóÝ!£¼|¯½¡F…èšû6xô›ß>Îq=àX¢BnËzçäᨱü¿¸kÄÄxGÄšÊgÊ9&ûè¡ñq‹[…®W†hüãö!‹{ëÊ•Àí·Û½¼¶5L˲÷i
+ÍHIø÷UÕuÅÏ{ï¾·«ÑºŠk£Œ‚øEQ¿jt#‚ÕùZˆ­øÑÔ†ØØФiÇÄuˆ€+tÚ´:jª;.†4À¤
+:“PÓIœfŠiû‘fšÐi“ŒI'yýûÞ[wN°iûO™ýñ»çܯsÏ=çÞûæ•EÔ
+®éujüÅ\rj¢Ý+RɝÄOYÄ;+ú›à›’½sED™ò)Õ_±êóSòʃIÙá
+Û·ùEq’U¿,Zg—"	YA-QµKj¢&k”›£YŽ‹ˆTüÔ;º<^D¥Ô(I9_E®õ¿llrò
+vê2ßã^’®u³ÍŒ¬˜/!NŽ3o\XƒÁ¸ó‹ÊÃá±qu5kÂõ6!â©(˜œ”¡bdf*~]fï2FYb$ —eqÄŸ¥²Å¸†‰v¹ióspÐ…Ã9)I9áŠðÖ.3´-%É—îVϩ绳+œÀé2{&FrêË૝Ê
+$…Jk:R”º‚Ž€RWXìöá; ®(xFUÔ¬Š5e3QìN"
+H­ÊZV²Äå+XäÕ+Û'vãk$$k…THy{—BRçut
+mïR-ÏÑ©Ð	K:þã3&«(=2%ËÒø*×Ӫፔå£+§‡gù¤&ö϶Šß6"êkôeQE~`½g:}K/¡ RKåjíahÓ) NÑhÛùp÷EûbàÏÀJ ˜fë6 [B–Ѷ›ûbŒÝ<Žä**÷Πûõó*æ;¬÷Ñ=À1”[Å[tÒXN» G¿çÑRnƒ>‡6j„þ(ê·Cw„Ü‚òfôK·Ëc<
+øVôs1ÎA{½³µ³´DT™o`-e3¨Áws€|´I ¯j•>ªSúÌVÔƒ©óײXks.ÆُúÕè7r5ÊÓ`‡ž $sÔS´\Lρbý¥Öº>ÚÉkŽ®	öÛ6„ec~,0ç/€u¹9 c›Õ.¬×2(®õeÚ%¾H
+üõ„>@ÃKÄ~úp»ØA!+°³Pï¤&–
+UæUq”šµË´uß1c;ào¼|Տh¡ú7J3Ri/âk-ÆßØ•ñ°ƒŠ0ÿp†1TÔc®8~bß@Þ‡}Ý„¹>ñr·Q!°ûîc{0ÿBö9ï»R2¼mßF›Íè?/µsLrRí8l½ÆÔŠ6
+ðë_Àð³
+dœÙ@Ý‹g*` ӁÀ Ð
+T+€g9˜›0¯&ã1ñ)㱡÷Á‡°MƬµ†cr?­œi±Çây’STi#™Çä|ᘅ-ÎØœS3Ëø®ä¸WÞçurLE¹'iÛ s±å0çlæ|8¬S¸	q\Í1Ëö9Ì~áX“>ANؼ2f­é2GÀQŠëÕ;¾ˆòN:Ž1+Œm8Sš)W|oïïÓ6ñ­ÕæÒ=:¬m#ê mòâ]Ž½¼ò.ndxú•{õ^¬³þì§'áÓoˆ~õVѯèz»ùŽNÊy½]}T–G°J¯UÇ̈­ûwõŸêE½gf»ù®ÞošXÏ㜞A%Hrú3@¸Í;OiôV*]žbòD—ûE€VèZ*z±?~œóÈè‹õ7èy­ˆ~ó÷JˆBj?Õxü´ßOx.õ"U3x|ðî˜8Š‹9w,9ìÄ«›ùÌ·cjØ@þ½bãm"Ž~¬Xs,åóYÞ8£+^Í+Ñø<OO:ñéŠÓJW|ŽsÇ¥›åÝ‚óÝÉSØqÀY?Ÿ|ÆñÉçŸ3N{7Çô«mˆc>‡_¦r;¯oµ‘ß´sç0ö»Ô4ó„ÑižÔ&™'Å(ÿÐÍX÷ÃÑ;5hÛ÷é\ç.µôt“sê´Ë>ÏŽËóæú¡¼GK¤}cŒÓ´W¾ã”ö6Û9ÂîJQŸ7Q=Ö1U«E>BlfŸÈ½ º™ï¾µCð3ßE
+T­½Ž÷÷Í ‰ò¾XM¥°ý¼ÔáNef^J­Æ -Å8k{i﯃íá½÷>Hã½~œý´Hümü4횥tBÆ÷­$b_x¶“1»mx¼Ù'@“l—¾ýñáøb_`LÃO›ä{b~¤S)r¨Å¢£9秓ã)ô+f[Ðoš¼¯ÑÝȯ:œMu8sHƹ9¤µc=ã\´|ÔN7ë!ø°R®}­°ÎØZݍfqŒ‡pó{â…Å<Ê6*©ºç$æ=ÝcÈßtäîôŸaŸÛ„¹@Ï}Wó[†ßœ/ž %!ù i¿S0¿öµhyT‡8¾Ã{~ØOi¸/ÄÞ-À"R~ÔF½©óY¬$k>zDê3èUµM»	qËwh·ØG_%´X[DSÅDJ¿A®~LG´	´E¼DGDÕ³,hŽ†WºÖ‰·%ë/Ð]¬W_…ÜHåb%ú×Ñ×ŪÒ:{¿¥±âì5úéßEœÌDÿ0®
+å-*×J[5(lžâvrŽN³”!r)Mö‹´ÕËf5~ËÞÂ^.ÇÙ[£v:6^Ç>¹Ný¸8B+‰ÌK@ªÅÃjµÍê(KÛ@ßVNš=ÊQÊQ€£6~F¹’;€Üñ™Ê`È¤g}(Ïÿ8mÉx»eÒëÀ~Œ}ü40Ô5´„ºc@#ðk§.<×õô±ÐÍž8ùÜ5€rk¸_'ç܇wy&p»ÙÃ@,æ1Œ½4ÙóMÖfCú¹d=ùôÍ͞Ѡ\ téCØ5:ûžr¸ÃIÌöÝðÙ÷Y€ýÝ|Iú÷ïä·bˆ>§\4/K”‹äÓDÓ '8þtö	úH½kÿ+¤‘ùO·Þ-»÷u4Y}š¶Ä‰ƒh<<N«b5ÚnÙ{žV1ŒP÷ÂHYœåt›ÖÄ6!g”;i6C	[§qä•/àŒ ¸­ì?žÖ1dîj'¾×€h}&e3büº„ýª5YõÎþ8ûâÞدÐzð,ðrp!8Ïáh|ÛçE\ÌXñ•ù,pµ¹–×rãß5×óÿ	ȝ—€>àÅÿõ\
+!V`\Â;d5Þ‘ýxŸÜMÕDWq–|²ø	Ρ"ðkÐáöžŒGy"t_?I4ô!Ê@ßoÁTE"5ÛïÊ©ÐýÜîëµÇ+´úýŠèÊeà´Õ¨
+¸å÷GPþ#ø,¸íßE¿ÇÀç¬ú«[ ?<yò}@åïýàù@0	ý3ø=2â;ô¿Î×ÿþ¸QÆ›e;ìœîïqCÜ0;û9
+»¿5œýuû[b$[~À7Ó›x÷Eb¿}>íÇaìçp,þÅzÕÇ6u]ñsï3¶“ì¸qü’˜SæÃ@RòìjÑÔN	‘´"ȤIƒÇ¶jC‚˜Ä:&5MÓT„úâŒÌJÉ”­[³ª1¶”vhZÿÈR*h‡õ~÷Ú@Ýüü;÷üÞ½××÷Ýsži]ò.jʉ¢Žµ¬¨Ÿeý˜ÖòýMÖ±—hrFc>Y¢~µ³¨_¡Eÿß7OóY‡yµÈy¥óÆýg+»I¯v 0­w€s›ÏL^@n²áL½…Zóg2·‰¼`ß_”ñËÉ>Á‚_}+“Ó2gëCgì89íÿí?iŽü9Õ—Fó<®=ƒÅi¬›‹ŸãåË“£ïÏÓÿ«ŸÉóŒW—>TŒã×ß“úcëŽ'öÇÔ%,ŠÝ{™zf:MŘçîI!Þ-LgïÕþ™9Œ}ŽGŸ·Ì;Â~
+ÝœO§sè)œs" 9*ymû¬wÈg=C>øgäͯ†¡·Št';LÄ¿HÞ…ÿøvӐäFÒØ:Þ~»oE}.ëC¬™<ŠùSP	8€.àåÌ-Þ!1ö_9²®xÏ55&o™. cjÀqõBÚœoƒoëj°f(SiH
+©@Ðt €™l閝À~ øLF4ejüØ|-uHªîí/ù¤»)å6mn÷Ñ”^µ:¥ƒ+S´¥)Ú¼©æ95)=svJ;Ê|ºÐÙ¹¾þ@¾’OïœÚ ÿ
+N~F*T¦pÅœnÑGw©Ç×Ù§˜ˆ)\a´•Ôd¿Ââ¹y¾@6Oòr çÿ“§"|¸{Rž¯3ðÿ„Þú …‚ëcþ1^°®¡v³CV@pÌü®p]åWÉÆ?¤
+ h:>`°ð!íüñ¾)¥°«Î?€´ó÷ñ³Þ‡´ñ+°®ð+˜ÚŸâþ%¾^ix+Ò†Z–6¦¦
+G¾/Áÿ¿=KMð¿u»½êÉÀ\~‰€c°Kèü¹z hÌ°.úL:p8	€÷àÍpóAà]à2Í4 °ò÷â&Á/Æ=5j Ÿ_à¿£©XÔ!þ{©ßåoKýþ[©ßvAò·ã.•9ˆî±CÛ¡+ŸÀÝ]êP“<Þ‡åQ!+€j h: 3ïã3â[U:9Oƒ(rU§O¥þ9²’¶]Õ<˱ÇÜBx–>¢ÓÝéášçøá
+á9r–žï½
+KÏ·ÀÂóÒXBx¶n‡%„§±–žºX	þú¯JgªþºÌ°ñ½X¥½X¥½X¥½dâ{ÅE·Mbn?‰——cÅNhÞYåª~Žéo1}
+ÓO1½•éû˜~€éULßÈt/ӝLw1]cúy¶K¡3í—¸K´¦2ýÓcL÷0½Œé¥Lw3¿–àÅñ•ó¥
+IÕÏô³Ë|6̱+ZŒm]ŒÇ¾ò"”ž’{FŠ<Í%ôŒîòê”?g©og`Àøè#À„?h Ûh  d5Ðô#@0ƒ=ïÒYTÍÀ~`0ËéŒ œv¦§ø¦œXEzÒuÂã¸fà*æÅZ‘Ýi÷ÚW(Nfs±:WÒÅý”ŸODŽ<k^‚åö|™û¯/s)+Åð*Âq4­;â·‹Ô{-î9¯¦°‘Ë„]Ç–‡•A/¦˜ô’Ó*ôròÓо¸s=n³Å=³Õsl’¸«G½í¼®~êLp˜ÿpžWÿâN˜X\ý3ZN÷¨—œÕw*V´¼åI0¨snIíu.VÏJêNÄÕ}Bõ¨ßvÖª;œ2К
+lŒÁÓlêO£ºý›U-†>{ÔjçFµ*ÅZ(îéQçb
+Þ”YŽÉÎrÊAK\²ÃuþۦͶ·D,u–EŸe¶¥Ø¢ZŠ,…–ÉV‡ÕndhͶZ­f«ÉÊ­dœH^Ó¼„¿n²Ù.”xù`d’¶	!Ï5fåôO)a^[ÃÂFÿ
+ov_¬-I°ìՍƄ’f8Ân¨1{Ã	Krá÷†
+Ký‹‘.ÆŽDÑjð$5D,)š^)4Ë#½ÄXÞ+‡…~ú•ÃÑ(äï©.¨v,Ë[òà#DKZzï}
+°‹Œãáµ㍢¨áF²(6~¸ÖÝéeŸ³ÏBÁ^vC¨h¤WYÆ>­íʲ`4N°õ’Gnv<옒gu‘[ðÈmu¥x'R¼2Ü^©PàeeQ™ä•eeIž‰	^W¬4ì*-•œ©nŠINlªû~Î`8ee’“¯Ó äæë‚c,“§—SRØtrJŠ“M—”õ÷(iÊÁQÊA9’Âîqœ)Nîµ'÷8ÞÿöÓZãõ²îÊè–¦PkI¨¥$Ô
+´‡öl+0ôÍnw×–¨¸
+ÅÓ²yË6¡7µÑ’Ö ±¥$èîªlzD¸I„+K‚]Ôjˆt5i­Áx¥V*ÙŒv×Ö/ð?0ÖÁѱÔ?¢³zÑÙ1V­ÿa¿׊±üb,¿«V«•c‘Üãõ‘.+ÕD—7¥t7ÏÉÆ~m),ŽÖäÛÛ–ÉÍ[Y\°¯ð
+’_PŽ7jL,©1rz&ðL@„ðL‰Ð$4ÛÒ¡‚}•Å…¨ÖÓ!;šóJjÈÛ¾;¶›
+Bß¦¾1|ÐÔ¾[,xJzcû 2´MÁX;QØ(_6ªW7Fº,´¶ˆŸd,Í´åä„ÉþTã4.Š2JmU¢-++M|øÿߝÖËÅS óóÝLs±vŠEÃnà8
+ñ[›#çP.‰ô‹âƘ—Å2}ÈiSÊ&ñ{3hߝ¶ÒëО֩»pK,³£±JâœÂy5’‹…¨8¯8¯gÝq+ýw´	ôor›úÅ¡öÆWWÙwiˆ²éù³Ù Ÿ6'X½æaJç,›UQ6jL¥ŠÌ‹-K먙vÒ~:‰®Oæüôµ¯ý憛×íÃUö*ªÒ>l¿;ÌòKæ͝¿pþ”ÉfËÌE‹ü=Cõ/ø–,R††vò¬š¶éEŒ`	¾¿ŒÎÖ¦µñ6…¯b«0d	ñéÚ@˜fj;\à}Þ~}ƒýïT±jxÞ\ÚÅ6<õ¶«6ŠãÏ̾î±{7»÷~x½ö…ç »øyÊ5^P%J1Á'§Á"ć„ˆ		`¥ÄBÀ4… ‚(41¡;>l’Ä…bÉjS#¤$MK+ Å„J.­>÷Ÿµ
+©Û;žÛٝùçÿó_yo&)ÂÙ®.}4-=‡&™A‚M…x
+ñ‡aü0oEy7‚ ǂꀡšÑðªpQ”‡kNòÄ‚E¦#¬ó‚WW”€=;z³Óí&5¬c†z*’Ùä—ehevCÖ €ùÙ
+‘ÓâÿÏ43‰l¦Šbun›!§SdSRvQYf-»÷`ʇsvŠFˆF³£w:ˆáüpô*òÃ¥Á冣ëy^l![[Ý—\‚]rÉlÏ\ߜБžÅ¾Å¡g")ã\âYîË„ž‹¬!¯ˆ«kÝ-â>i/½ü‚\¯8¿t‡„Ûh7be%vŒìÔNì­ùj#ú›.¸k ת_|ÝJjbš•‰¡ñ0qz%J£*öƒáª­õP­¢t†ß¯ù(c…“ãê/Q¡Òx¬Pk2ƒ‡Ww¬úAÃà‘ËkvŸmkjjkÛÐ4'M1¿²îLnô‹\.÷iû¾n|(÷Ö7wð2ÜpûÅf†û_À{€2
+ÎTÔ²¿‘ì"ûmüIÛ‘(Î.`™à~‡½ƒí	aޅ㾓R€.;zËT-@£ .PȲbpM`bá–Sq—	™(°!˜BΜ¯¡1ª®L@^ƵRóF@Ձ$V“,?((ˆ©¢(•ƒ*JɽΙƒÞú{ñ*~ÝãMùïý°¿Ží-…/ÁÞt|qœKv•*AG¬Q•TÕêÜ6í”BO÷
+:£h€= ëlTº`D—Yäz–ôš2qF>U	1òAÅ—X;€Š‡X¤Õ¬í›ÁÈK,(k±4ín•L¬sÕtjR£{Ù=6wLͤât’è|mZYü®ÕŸÙzl5k1³â1á1±WøHì•.Ú.E¥'åZy+#×»Öjk=Û´sÚõðõȝ°ü‘³ÛC"PçQŠŽÞAßÿí€VXwP›(öGÃÞh4l‹†9Llá(§è4KŽ™¯b(•ƒ]lÈJ‡ÙÑ„l3®ã^òsd Š«LYíª&udÙHxÒC‚x×é1²Ù):lO¤ª‡FÒ×T!M‹kzµžö9šP@JãôKµµ“|ñJ@¼¢¢¼¨o™"èìQ”à—îW’À¤_øæÝýë6Äg=ÿùlðîÞùäèb½½}fjÉù
+}×—fÞ<¸Ýó‡Ïoµ/:qîØÖŸ}˜²pôï¦$pí8pÎPÐdùFfTMÈðÅŠ[vëG‘OòzQT(RbŠa¤”‘ߐâEöx¼˜¹Ï@1ûEZ²ºL}ðº@/hIÚ—˜Á.†ßAñ+³•f…Ÿ­>«®ŽpÏø—Óo½ÿee·YÙîÝ9®8ƒ³xã”/aX3XLØ@/¢"¤àòNYöñÁr…È2s2D)@˜ŠÖXg¬0ˆdL66IqË›âÅiœ@ÄÃÝl$Þ:-˜ÅU¡AÜ_llÜùЭ¦fñ/OO–…"ó¬áDzÌ·F®1r¹Åðƒ¤
+ ‚ZñÊZO¥Ÿy–œTù ;!Qb-ŠÆvæïÉl<ut}é\¯ælÌ67¼¸ÃÛYpë½Wû3Kë7·æn^ùxÿ"¸¿å·››Žxß&¯®_²yË£ëâõu§ëì<Ÿû×
+:@…ð7ÇÍ
+m‘¼L> ·É—da.7WùÏiÀq$‹œ$8œœ„d{?Ç{9ŽçDd…—¸^Ò‹lP6ˆçáÔïà³di· 8̼ü2Ç„:Æ&«sÛ:¡Y\i*’Y+“6”K­nÂèäT¼eˆPbŽ°—Ù;йö>{‡t¹²x‡•é¯Áý,#fö’¢7¨åƒt8u7¥&Y’“É–é	$ãv»!ÝVý¤Œþ¥CK‚å\6¥I®pZ’ãóòRlŠZ ž1½²éLÊ›žNÊf<)Fáÿ´¤å¶µPà”ãRµÔS9“½#[È¡7/\èÌ•ãºãÜû÷çÏQïÉ ñØÙ_ ü<vá˜rà{ìOaÂQ—C÷ù¢³
+§›çõ¨âÂH
+ÂyaUVÇRó4¦Æ# ÑH(ƒ	£H³¼×mµO…×ämÏÛëyÇó©|Eþ2b³{‚®GÃœ½D(qö€q êqø4§ßåöº<^—[‰˜ˆé:ì".—Ûôáñ ºÝ<dòW3
+žZGWЍtå)ˆ$h‰$ˆQIpB$ÁVC;‡Ë‘ïRUu¸º¾K,ùÿ+–‡rI³
+4bm4­Â¶p­Å6=! ŠÈ2>ËóðÊ4 ñmÙ€V<¾ô‚|^	*x;ýË7w¶ïxvÇ”¶äó‘îù[vŸÇ¶Uoÿ~o¢Û_ï;z c~µŸüódnõâÜÝÏ.îî¸Êª¶y€œ</=Šç»^¾çã:ÌáÈÝT°¢ÀQ
+u¯âÐ1šDÙ!fUpTP†`Àò¼€UÁÆË­ËôwH¦‡h_š!9-³$Ó7+4Ëø©¶ÀÈpõR½­A«7VÙ^Ž¾fkŽ^±]ö«’ÁR<yLbMÌ2<Ö+°$60Ùˆl at eQ>­ˆ3‚ë`zö‰˜1X™©¡®IÔ’bDA¥°‹;ݬ"¡­S9'Mu .°"°1Àül,àg˲ä‘3‰±"
+”8ô Äqdzœö8Ž“s»Z,Å'[¥™(1sÓØ+D*­dV‡½ß‚”»w&8õÉÌ™5Ï“™ç^èyå[þ–»vhÛÍö¯F*çïüñKÇŽ®[{‚ÿ‰«¡d^Éã·ÿ¼ä¹Ü¿ÿ´}h~
+7ᶏßýäþWéµÙ·÷:¨ž…£¸™[ßWª€Ó%;S<—Âÿ¥¼Úc›:¯ø÷ºo?®I'v®“ØIq@ÂÃÄ,W¢¥4,í6ZSÜA±±‘ÀZí!:^êC„²±B'”¶a”š€BV	ÈЦnE°Uå±µ€: Íke;;ßg›²ívåïq¿Ä¾çœ{Îïü~2V5†go;Ô‚îhgZ 3	0Ï¸{
+ã|š:~üö›@ôI^áˆßv¡5öØåƏMÆkÆ°!!ÇôIút}¶¾P? ¬+†îRø3•¤,K.fìѹª‘’L˜±
+d•¬$™>Ù˜"e-ŒX³î¢IICY!ƒ8Úe³3¯‰„‘È|ÞŽ:Ú‹†Þ‘GÇ©huQ&!2’…G¦ (È…Ä.·) ÷ZasS$á)žâ 9ø,‰y¬Ù`.RkóÌõ´Ë|Wú|Ä6
+UJáÙ¤Í\lôš×ם×]s0'sQC×$Æ O«²¢8`¯ÊÄ$<ÆvŽl)?ü‰PÊÏJøµ˜ÃßÒÂ’¤†e*e¶†TÇ›`B±06l¯ÃBúh;ÁÎ3ځÀØ6ÚG”óÚåÀ~oº•
+ù‘Ò©e“ûÔé|`ËaÀ' ¡–›™
+´$ƒ™–‹I®=3ë¤1ñ8 Ðº1±Š”€>³Î<vÌuìØ:)¿Bôgö_Ù~dÎãýÌMUe($¹É« …;8rñ«7⡾ÕÉ
+% ´'ûꎳøï[¦WW6Jƒ·¦ãwr9xó¡g_zóö§G>‘ž‘ÞdzÿÀ²$DpžË\S|jƒï,4Þ¹ -C+Bhu¨m•öÐם‡h¿ó·Î“èbèzÈãò†<¡%×{FUZU9gû+™]¾XúfèÞ¼[é×Öʼ‹ôx>pùM¿dçÞ®OÖ7º>aºf¾°ƒV„™fÆÜ3PÌ«Êb–ŠU·F-/˜Ë…¡ÖÌ,ÀüÖ"Fxðàšà¡—ɬ¦º–LhòÖ6ŽgeJŒÃ )ñ{9(°þ¡©¹__ÊäN¿ºOúßß|¸qhÓî¿Ì]zyík2î³Åßþã%üõý~?ºû坹Ï6þ*wåùw8¦oƒŸ9î†Ø]²ÇZUxšZ
+CöxÌ°©`²†«±Õ,NX4£¸'<õKDê«B¦%4žUx7DÛ‚¸»Õ/òx`äó~!ïxëBâ¥ÃÍswä[H~aŸ.P~ã¦}ÏžH+UV%•©L.D6t‡îÔ©\Rê/õ•R¹‚–E°×S@­ŒàRÝAÅx|\«pºÑ_VZV
+K\¤&_P€¿‘møŸ{æ¬L­X>ëû¯Éílj¯{°õgßšµ7÷ž4Xzø©Ü‰coær»çß;q܃WÞ¸üù¨0x½Xã§GýÔ.‘¥°ª*
+¢ŒR×ÂRž!ÓÛ¤|Î°tËIô “i÷³[Ř
+cæh~"Ÿ@… àyô‹ñ;Aƒ^“4yìÀë’Haìdµ··Ñøíèjipo®å­œs/¯¢ða
+ø ¡—ì¸ðaƒ‚ï¸.üô€AHи»mCî(aîÌ×›çÞeþ]ö_ Ï›žþoÛ{èG·/‘Þl·{ÊÞìÓ`ÃR¨ýCPûQ쳃þŠ2¯?©ú°—ÖÖ¢ˆ·ŒDQ˜ˆâ´¸
+Ëea„e
+ãX]´Ö¢üª›'ˆõEá‰@ùÃþ“xå+ø÷IGg®Å,ë&?ÐËcž¸SÊ­fúFÁ0ž7û"±‰'Å}^é$8iƒ„~€ÕTT+Ë+©ìˆ™Ñ’XUL²XM4àEP©Ûöû,hWÙ~La-Aµ&$hD<Î[^¼xñ\5!êùô(-SÆ€Y‘@ È$}˜,ݐ;Ù}&·½¿·ýy;Æ/ÇöEž:ø5CÏF&¯ÃdãÊá/‘–·pöBÇòCøÉ3§ðòþE?iXÖÙúÈ꯬ß~,w³sþ$ì÷±¥ZT®+ŽØA_I£aMïÖOêD—1T¨`KQd®yx¼as“6Ø	z(s®à©#cb9Ý	Ü’ù¬ã¯R‡½‡ôSéw┪Çrb¨à<ç2'kN€¥ñ§€@ù÷O
+Õ”H0„ã u<50ï"·††²²4˜}ƒÌ¹5ôe[ÁÆÃPP« 
+½w€×‘Àê¾ÉS›ÄÚØ”_G7ä×úûòkM4¿†Âù5«=Êi6YR—´O‚\R°u£^ÄÆ‚phCçÑ0’¼v!*åµ"B ¿£ó·btnØfžQˆèìd§Rw/h½·;6¤SíÉlº."y)6zñ>Nù„Î=h·m.$‹ää»òzçz¬‰zë7x¹
+à m°°[Óbº®Æ®à¸eFQÊyt›|Óæ'¶ ÕFÚòaËgûÚ|ó|̇c¼Ÿ!ñjñ¥~XÀ”™ÞƒEO2fº=ïQFPÂL&æ£tAMœ ŽŠkÞ§,[ðå%õC©£Ï=Ž»=?œ¶|%½v»|àwKÎq\Üý(Ïhœ³Ã´zRBÕ¦Ôéä‰úCúct-=M•gô³ô,4!Ž¢5ÖK/²ç¥_°«ª¤3<bDãI­y#MÔ␆>GÂËOûà^-¬Œ¯!±éó–òósöÔrxf4:UÕÊ˧Béjº¦êeÌ’t¿$Á”“ìPÖu$†‰b¨HÕ)10bdŠínp·Ô+‘.HLš¡ò3£AÁ°½^…*d­í0¬ÿ·]û¢õpºXÈ!Ð9í®8"%yù$“| 
+rÂèâ„QÆÈ`£¨fRM= =¬ zx±‘3“Sûe.0ùÍpŸÃÃã5l—ÁF6]ž&Õt™Mßé&ÔÊ?7%x“¸ ‹mV
+q»¿<Áø¨®H at qœ;X
+ÛÒ„ÌÃjxjµ?Ál‚‡ù@¶%‰øWŠÿ0nïHÇ'¨<ûqÃGñl"g°’ÝBžAÙÃPþ÷‘ÓÙ_Þ~…\¾šcÆWп¯ÖØ(®+<÷Îcç±óôzöå]Ïzwgí:Žßvø1JÀ)°Š1nò ±K at 1Ũ
+Ò¤M[‘ ©µ…V¨ƒ±ŒÚPTJÒ)µiÓÈ
+AUªˆX-ÅîºçÞÝ1n«Jñjî|3w=;÷žs¾ó}Œ CÖxò$.-E„Ê£¼$jªI{
+”$ x¯¿yµ-2ÍëAVb%EcD	ËŠ@+Æ(—Ëí1Z.à£SåhÝò£5SŠV#¼ùïè …{îœñöÛçL+‹+í/í¯W , Б¥#GGžŽ"‰qš L[9´)Òµ;~G¦cÀ·C"áØj‚\ÙjÓéÀYi „DPDdáäiЇœÅ½Œ{Õë©eÍ øŒMË ²–©FÈ0JÆ‹J‹)܉x})	âÞ.ëbÇEn{pOð"lepip©ÎÖqYõ.­]ÏmWŸÑöª¢‚y1¯vhÝx9»8à‰+Ô{5ù|=8 e,¬kZ¡Æ°TÕ&^(ÔD,Q”dØVÓ§~kÄÂÖ>ʨ¨ù5ÞÇQ³'%Ùñ‚»¤LÀ"5¤À[&éPlú ŒqÜ{Æáûù5ICŠ‚ûš*,Š@+¢Îplîb² >¶Á˜÷‰;#åµw'µcpÆ»c»~Ág§!¯‚µ½J]×òA˜«¥5§ÎÞ:©Éä.”¹¼2–Êkw¥òê8ÀμÖÒIáé¸ÛP.’µàÛ 2 W¬…ŽˆìpG'JA[Did¾‚2h}“mG¶Øûób?1}ó¥/öü€¹ÝŽ1ÝÎ}0Mçðk5ѝhçIKñ»»	Úàp‰K$‚ñu"œˆ,+JÆR@äXGx¿ËñsB‚/U´~/FÓ¹à(ÈQz”~ePQxE
+K¥„
+?öùÄ,÷¿jbNÌÎk¡õ…zª†¦þC?Xy~ùü^ŽFȧ7vöƒ3Àj¢C)ŒH9ˆÁ)ÑëÊÃòύuåE¯¥[òà4b8Ç¢ [JÜMSè)é|@ÁQA®§Æ* &J0°’À['çHÍ+a+"ª™‡.°xâÂL¶›ÛÁ™!nq ´öûüFcâÌ%¯'¦£
+ÅÃñ8Ç\H	+qîXxLûÆ†Ã‘8vžÙ]Ñöb}|Ÿ´ÆXmn¬XÞ鍭‰?>ˆh’e­¤"UºX
+ÒÛI¾Vð)í9ÒíÉ„ aIQꉍ$PBwI…yÔ­ðèò•¾ž#T’u†˜B¡0Ta0©ŽBª”;
+¦µ…1Û°›®aÐs¨ã
+Ôõ³Sű×/'Ž^D‰k¿Gñá/½U¼†/¡-èÕóÅýáOÅž¾ˆÖý²øâeÔ†â£Hù^ñ/°g‡!»CvG˜4ã¥,ECVGÕºê‡Å-ÕœdPΤc€Ž"œÈ’U²R‚>P|`Ï~8jÅÚàüéhM®Í$׉\›Q>ëå3Ì¿;špKóð}£|&óÞR YmYÕ2g•²¡jKÕפg´aýYù9ýeõ˜>®¬]×
+àyÇÔC¦©›zP²â8³eÁ2
+5ÈG$ÉÇ¢É0)¢(Ùøp˜IÕP¯‰èº&&]í@‚ZÖø¥‚¢â¾†Ê|¬X(8™ÁÌH†ÍÔD>¯­þo%¦‰ù/[Y}t2‘§TY6˜õ0·(ß­™áü^íîz	IŒúùLY{²èéyÝX`ZHÁ !Ê•Ô],š7¡2-84¯*o€¬0jªá˜+5-¶]vØW¤Ù»qÎM§M¸
+z´ÍM§ãý¿~sÇ¥wVÔ®~`vêüê'×4¤–ÿ~öÀÊ—›ø‰î‹Ã‡®&²™•ÛŠC¨ù›ßºG	ükÛÚ9|ÿæ=D©n˜½Îý•‡i•^n€඲Os\6×Îæ«îc—H,©^œéÊ­b×6$ÖÔî«ÐÒÄê’ýÎø ë×9¤i(J_.¬\䈿è"¨Vu38Ãæ²z[zqvIã:§7½:û„ò˜ú¸öphSdXÙ¡îÐwÛ2[³{ØýÊ>u¿þ‚ñlæÙïªô•É²FiH¹V܍In ¦.fq-Í.³	ŠKmŽï‹ãxÖV’¹,Êò6O48Õ$|²AJ&m–V{½iåp”ODDã'¥OÜkÈf4UáSU‰d\‹”ÍÔÀ=OÆbI»oÇPì›i æÆ£ýÅ@êAýh}	`uNx
+ä'ÉOÃ/“\¦ÕòÒ4¼ºŽ¼šJþ¯.ÖkB®E™²ü$·H.ë´Ê¿Lj!Ú<°ž&taÅ$õ5Àd§$6U¢1<Ú$¦ÈŠ MÒh ®%~gèNÛUt&qk)Ûrn&çºím­•á€d'T†Â6¦I
+Ö(ãn8£n¼¸ó©Ÿ®êÙ°°øÄ—}äë7¿äŸ{ø	ýø±‡ó÷ ÷úFvì™~õBñ³ƒèšñäkîݺxÉ#éðWê;lzêW=úæníùw¯ïnm}¼váéíÛ.o}úÉÔ&†á&€Ì>Oåq6œ}ç9iou8č#tFpndø4¢Ô@ä€BéA,sÃMß”|è“ÄŒO
+Å’t$OÇÎó¸‹`;¡/O>"d è ¹)e¦ÚS•)WÜþbœW¿ýyÛÃÐ÷jàmCÌ{žìê}\Ÿø[‘³IØ Ú¸…b·LÜ®ÿ˜ÿXlŽã³§)äb_™à9e‚
+ò˜°`ÖÇFŽÝcã~{бY[uɾ’)Ê>Ê~¦Èst(se1]¢CyŽåB%&wè¬Ù
+:݈R\DéŽ) V³ÜÿÚA„lÅäúÏ?Tœ¾òVñöàùûï¼:ÆOÌœ|¿8säE¤Þ`»g^{ýôWÏ£Ù#ú\ìQ=6&JXn!XÛë£V˜XØ란‹ÂÀ’A")B]ï»ÞB \-–ËÕ‰_5n3Ú,lVþ(p<Dz‚AXIÂNHŽ¬„dðD¬ ±„llr—u0
+aŒ„ " H&¤Œã¨'ɲÄbH-mGþMu•ÇFqÝáy3³;{̹×ì¬Çk{½kðµ–½ÔÄÃe Æ`L
+%a‰!á2áX(¨H˜®ÚŠüMM
+¡…ÒÚ„+¸T¸©…Ô$Ȩ¤XÐ b§¤ÅEŽ[k÷ýÞÚ@åÝ™·£'¿yïû¾ß÷ýL;oo0­Ü€ s¦àtò™Ó0‡ÞOÓ4<±#DyƼÇt‚ñ£¤º;J3Ú^?ÊjÂ.Jå»Á8aêöp	§òAÒŸ Wl÷øHĆ=ʼnœŒv‹ÝÝ»e|©íPqúÖqú>kãí<Û92ˆÓà ª„lÚEÄs줋Å_ç»ÓØɧšÎRPY*vãèFÿ ùÉ}”U?mòb¤ßM^ ×0uÃ5[·n8€ÚŸœIþÜ‹#÷X}
+Qô8³Ð.ØÚá0n…¼iÂ3Ãq!nV…›Šßvòœ¼!0ràY>høýqídè¼ö§P·Öú»÷vÈ6Õ‡2 Æ)@C—‹aRŠËí02TÃ)Gcl¬p&;£p¾mad¹mUd¿›ÿÿHxQ*¢"bå¢`T-Íòø_)XW@èEbµ¸_lGDK›Ø.>‘€D(®€™{eÙÚ(òÀ}Ñ*Iø*êŒú!}ò¼ÿ G×9
+&Hy˜–ï(ÕgÁy	e% çfA­£fx?¥Ö ¸ãß}xód0HNnA%Â#²Pp¬î?¤_6Å|“Ê“ó2óŠóÚó,1ÈtPå±IÞ<O%1ÒzdäD‹c]1úHÅTx·IðÕ\vQð²µÇJÖj+mI€"T´úIrâáeàŠó“HR”‹[K*Ÿu!	l܆ OãOK at U2ÒßÊï‹T$ûÈA£ó)ƒŒs
+ßHà•ÈK †QAþÊ£ù`\þ4qŸ×ëñ©9yŒ•i<ÄåObª^»ØÜ~iú†å«{W ²i{¶mIï𯽶wÏÉzÙ®f_ÒÕ¥Ýë•®Yµò7yé;k~¿sööÙQskÇM\˜ð'Þ®5—¼8~óÃïwN¬D·Cºª+šÑôòœ‰?ƌޅ
+Ý£L¥£Vó0²ðRÐRn™f±TmÙz™>Y_o0¬ÜU¾ªÀ,߬@Ü~$Å}‹Ͷׅ•ÒZßÚ@—ñ9ß«öjwÝ÷ÕûÚ—éwŒCË´IEžbKµdZfIõ–å–ÞôïØÇ2/{EÖJSiº•C¯.:ýÁkN$;MÜa¶:Yôœ„£N?CáÍñ	‡H òàÁBxbžÎ7p/F±©¾“ØX“KÓ]'#¨=D¬ªÑÄ 0: -<1Ӂ^ˆP£A. 
+"TÁ3þ{F¦ú`iä‡u‘–@ZÆôŠÿ³`EKUœÄOpÈxöXþ(À—T±J´P‰¬ì8QdÐ^™ÊÉÎgp ÀD€t›mEã~{¶åôÒö„9üíŸ/­¦£?ßtêý›NY:“ßퟳÿã
+Æo¾‹Þ¹ÜøöÕO®]¹Š]¥~ä3€ëU ½tš&a0*n“äD&UO­§ŠuéNί³N$z9ìž#»çxÒ8Ê°{Ž0üêõ+©ÄÔ/…oIqš9ÝÎ#CŸâž¢ÎsÏS›ÜMêaú0sH8&ð6As4Ó«˜fËF~½Ð*çÏÙÏ;Îñ¼ßÅI3bö+Ò:i›ÄH—sK1/Õ„_ë u„ºC=¤ì”$9©gï¨ãWŠ6RŸ²Óðþ‚Έ]!d€L‚Î‚I€`2S÷{8dpÕ͉0‰sÀ$Ž”W®$-Ú=šl0*)ñÇ[jçåÔbc¹H¡‘®Ê…-ƒ‘²w,v%V$Çûð‡äCŒÛB¤‚¶qÇë‚0ø4rLÕéôìþOË×{ÿpËh׶½´çä±7›†vªzP:rœBôöö÷ÒV¿þ×Ïn~ôSð˜ŒÙX‘
+Vd£yÌA³B®¦
+–rO¹¾€þ¡£Á3O_A¿fYfÕÓ¤w×-7Ü·µ~w¿çúo­Ÿ(Ïg‘ ȵ6 ÚåÆÓAa¼o].ÔÒÓ„ÏL}c¾°Bè·þÓ÷
+Š2ò2¢S–°"œBaI2N¢r)W–¯)HVL¥IiU°4)*.PŽBL¤ªXA
+¬B"œ¸"‰ãßß•*°&:Ê®àe®‡û‚áX€hÇp„r¤Ns)*؈-qÄ}8-#ZÿœÒ≺ä󢫒!Sô‘€ßg:KıÌÊ¡ãbœkyžéŒ©\Ö½íÆÆæë;šÞ):“Ì<µqÓû¿ûÉæ÷výzß÷GÛóÖÜI´ø¸†v}úñ_®ô~Ú
+˜Õâ*šuæŘÍ3UƒÒ½8SÅ-q{£s³Ú²Î¾Ìió‚’mãÙ £t®ù®Ï-=C¶Ä5A+Ñ'¹ê“ô¹®EZƒ¾Äµ&°DßlÝ좇ü2åC’ ªõ>ȺŒO—ÈGdZ–Ù4ÝÁQôI`ìX5ëÂjÀç.cutcõ¨¦€]—„_°€¥ð8RæÛóÃÑ	ÿ:“›…»9	lÖ@†¯Lrf0C*ó9¤t‚TJ`:ÁÈGðÂH=_㑺dßl÷UC‰§!w_‘>"®xU2Q…ÀC.'Š-c“©²RJñpY$_£¬<b¢ÌâÎÂo.~=ü ynÝ@"zrÏñÁÎW÷%{é¹|åü½[O ùêѳÈÀÅžG¡á?’3Û;W¢ƒ»¦¬<Ž«ˆCØjùŒR‘`fxìHÒŠ´bÍÔÖk‡ù_	'[@	Z—Æjp¡€M·	/éä¥#7ËX)G›yFÜ&«æ²CÿA·Õu¦¤2
+w3¢ÑÒL‰f
+X&£a9D‚r6‡*Ëߦ:ÊçI¥2|E_ 1ì¨_»„:©,j9¨±L=&’®q‡†»Þx*Z'±b
+>Û)[L¬XíœÕ†’lw¥QŠUJC	oߎ"X'-eJNyYy´š\\Ö ªy˼9ÊmmîÀŽM³¥U–6LíéaíK¬ŽÖ,p½ë¨iZºïÉr¬ˆÉÃs™aEdüíjâº¢ófÞ¼™7³ŸÙÝÙ™1kÇ^/cv%ØرkáCÀp!
+¤	ŸÔæRS¢D©Må¢F@ÕE¥J1f…€¢b)Q*U©€ª©Z">n
+mI­–ºüŒ{ߝÅ1´þÌûÌÌÛ}ïÞsî9ÒTò­ü2ÓTíœéÛsÌ›ñ²’²œYeç2
+fý´9Ó^¤µ™/™7'#erÕ323ªçT÷æúrZ]ºnJsn¦93Ý2eAzÁ”—µÒ/LY–Û–;[}9ýEæÕ1×aÉ£ò¡Âƒ¥	
++‰U!=Œud›4(–@¶ÊÝùijiiÔh©,
+N²Æ¯1|Ï;íËÍ»ËÜm.ÍÁ‘ËsHk.Òš;Nk.Òšëà=ˆF at kâ)&Æ­¹B<-’Þ]%¾TY>ùdôTôBt,JË£ÍÑyPè1ÑI"¶ÑJ±Z=l¹-ŠÜ-ÉæÖ§½e['ÐÛµ«Ö}7:4Òàø-ZÑ.(J®ë¸€¬ÔÈϹÓÁ–¢ML »šÓ_߽ːýŸ¿ræ­[ö¯ø´ïWݳ¿ûÛÞß²ù@Û¤güiËŸ«ïÿ.i:·›ïíÞv{åõS›®L=3xòã>ú@ø×IR.CÕ²ÉóÇ$?	^UØ”×>®´(ÇçݒZW…b¶¢)Zªj¶i„|ž¯©«ãdkŒ“aàâÕ!àÂXÄÄÁqÔv|’xŽ£ßÉm.
+Œ)>—.âþq¶¼ÕXtkëjûaGîtúœ~gÌ¡Žlûˆ×¼ßaö#U@æ\”¨€Z¡hjoæ]Di +uñÑ-"ôf %a)£älMΚ_Ũ{h–b‚BÄi`Á¦@
+׋茰ˆæGX(EÂ:àR`f_— Ô$[¨DÇIÆ21#KÆz
+[7þbvaêùo5$üçÎŽw<ºTÞ×óÚ×¾ß=úKÀäÜÕ§I¿Í×‰Ìã½¼÷óA~sMâ弓oã{‹Sù7Ê9h,Ê
+gÊV"1•Qƒi¾*ѽ´öÓAz‘²A:Le‰VÐÓ0¢4ÐÊòB:~nύâS)2½ËlTˆpqfT€ÈgH[õûOo-œž ±æ«X"Ä¿Hùµ]ÙÄôš¤§²£P(п:u+I«nZ{çÎ3¤÷—>É·PÕW¿JkÔíªêꪪQ*S5!‘°)+vˆÆTS;4™V‹ö£». 2ìF¯IÊÍfsž©˜bGõbG¦…΍‚‰žÒ| IHlÊÔÑ“ ¶Í’„ý~zÖDT#ŠÁ4µZ-+žø¼Kjž+<ì*Þ0¾¿XMM¥7¡[Ñ*Ý2R„G´”dé{'õi8[ˆo/Üy©²®¼¾®PóØ®§è•3gn¼¶'òÔNºäV߇s—¼B.(×á\Lùù|ŠÚŠ-bÏq%þ—:ÂÑcÂc‰íw;ün |9o‰*›9Î*éZÌÙáxu-&
+Ú¸ŠiœÈ¿	3ŒR•²z>BÁ¾b´›”
+ÆYåÓö3’aUš¯7°Gysx^¸¶³6­wÓWÕ=ü#ö;ú6Ä®hÿa7ôdÜ0TE¡2cç:¸®û³5)”úªa«ªa@ÂR@ZªLÓ±’A’hž«TÄF­ÔÅ(]îÀBÙ2©éK²^Q"ÍÒ<@¤gþÄ>F\ˆK˜ÉR í„„ÖD*	…?KÏzqb¬1ÔP‡AúŒd;€ÎòüB:7Å܆õ¡,í¶>„ÖËF £AØõ&¯‡z·ðlNÊù›ŠÌ½p¬¸ «òÿñ%myƒçʸ^VÖ;?PÖ Íï*°9”nÀ¯ÐÊô¯”ÍÂÇ$668n€ 8¢9?`5° ÁQ›Cfðr¶’M¼˜Ÿ£D·ø4Ûn¼52à‰—ÿ~(<N:ÚQº‰^ò©!$C4@(yïʝ•ääù;û¾£¿}‚ôßÙ8º\.ßrg±ÈË7àRx½tDE‚R…Œª´ÛÚéAûð#A[éc›÷¡ÜDÕru¯zA¥óà2¬*åj§ºMS)°¹!+Á‹•è“ löJdl¦<‘í¯ÉöeØ>ˆu Çô¢(:c( ¤qî’Zé½Ü%È+›
+è«ôÚ`ZœÌõøÍ™Åʪ@3eȯIa€™X^?Zì ‚þ˜Ÿk†k}:D‡øgîŸ+ÔOÔ‘
+ÙÕ+2ÜKUpEÉ<PÊ’BRh„e&•XÆiŸôú}¾ìEüÞ‰Qtlº5QMMtl¶ØdL ڍÉèېÆ@FѳÜwoEC:ò!ÏïM‘.—_.…ËÁø‹|L,—Â*™2Är)%,ِXÆ·qá”Xϑ䚌ONK€½>I.—þÄ_ÙÿàWrŠøö]|-oc)B	 9Ù?J6¾Ÿ±¨€#±&Ì\Pœ;F[‘›×JB<CéA\	Òt@Ë!;Qe‡b)'ïê¢uø&ëÐdŠKP®QGO,Üû¦í_¹qWùÖßüô½Ã™%3:Xh[>çõFZõvëÒo´?xd´ZþÉꥍo¿;ºKؼyþ~0ú§»šësȇtçªÂòë¨uIùKbXI0*(·	æU‹ì¶N{½1VèvÄvâ ¹sÂF8ŠLöPgy¨¹LT[&ª-s\m™³Ÿ'ŒjËDµãA at MT[¦PcH‡&
+:“ÀŸÙê	ÐMÊËöäN¯Ïë÷=ê)rMÒAlŽb± yÿ_p÷	®ØÁE‹HÌÇïp­®5ÒÑõeL…×P„Ý3?W…ƒ<®Âã†nh†Â¬ª‹¤HÔˆƒ<õu!·!…0ÊB¹÷„¸ç
+ç–í›o…©«ž\÷3Zµë`KçÜiÝ£ëäí¯¬ylçÇ£'@¡HOŒ]¦ÕÅ°TBVIzb'	@"‚,* ¹NôJðF\3JB³Ø“ú"Ö®“½¬ëµVc¼Ñ™îµX³ã³o‰º„?kuÄ;œg½5ê¾ÜZ_ã,÷6‘$gjx±²@]`,­VV¨+ŒÕ!Ã-¥Z(ÞœBï“Â4ЄËAï£ybV³Š³ÃqþØAÍ :"ØÁ*‚˜ìÿ—ìjmâ¼ãß÷ùì{ølŸ¹óqlÇ6v8d	H%ÍÊJHX…-®$¤<Ta…Z(¨¢•:•¢ZËTa-“PÑT”Fdº–
+…©jaÙª
+M,ɾÿ瘦TJîþvî»»üßÿ÷HOæ1â>Ä›ø)”#àûyÁHz2­íQ$Û!öºØ8Ë_?Ã×ÎðÍM-ã¤2„³ô–@M1Ò•@®Í? §´§šÿÓÜ<KšŒ2C”jiŽmÙÌ
+ârór‘m‚KÜJ%
+°P„Ƈ¢š#».|…ÕÍw_:s²û¥“§vtŸ$nïY?ò÷á¾»¿ÅAlûìòg½pùSúBÝ#­\EÐ…‚xy¶GV&*3”
+—	‘ÂÐ9(+(̬
+í
+	ÕZµo¾6ß·DX*7iM¾6aµÜª<«­ö]õÜôÞ4®=ƒÁ[¡ÑáRJª ‚«Vçæ+Ê?¬w#ŠÕi7©~?°¼ê·[‘]öKX‘²R‹Ô%q!aˆÁI}Ûí¬€”¼cŸïç
+Ý¿–ÌÙ„ìµ4[êÄîrRî*FèuAø >Ž¿Ã\!Îàzl sŒ1ccÌس‚e¸%†aìØ¥,anL)’âŠõÂÚJ/NÕ)±2|oð‡˜ÛÜNQÌ0O̸5ƒp¢vwžTՁ@wšÆ¡×}¤z߯wö·=?°¹qO©óèúï¿Û¹îÄH«ùìË‹í}ãðȃWž¨~`:ÒwþòõËŸþ
+¦pîH«éÅPA~<5Ûc%)’ôN#È&Ù’)Èèô½ÁƒAsڝöe‚5î_ƒ»Á·Â½Â×ì
+^³\wݶ|+ßñ*HXNT‘
+yy\n$­äKù+ï×ê·úmßÿˆs6á·òv‹ÇÏQà4{9*V”~VYG‹£ËÁ³VÚÎ CÏá&t ã²atX í•ý	)´Þ¡B¯*زË3Œ=:Ñù+ü ?Ês…ÔäÖÓaŒ²I6`!f³­æŒ/›g=ì,JSÉæö…Céq8M§(Mÿ)0¨;Ù$9Ó ŽVA=ß8TL%ÉOù÷sW_¸Ð~h¸èØÆuG?Xÿüá‘V"L«Ã¥˜?8òâÑžûsLèëûË'×>ÿn…æ"Eʼn.e§Mrc…Ã.ÍÍá¸U\'g‚(ˆ6·S´!“€­l$$&ö
+X‡ÜØMÂÎœñË*
+Ã8¯÷߬sœÐXýÈQ°=Œ,ãL~«öüã)U–A¥ù^Ç m´¦Šþ° ‡”KÝö­ç¡Q¸9ï	4úÂS¡Øqhfkfé²™³gO[æ	r±wÚçV¿¯Í´t_ƒ.dF¿1 ]˜lÒ²›¹°'\-Îk¢‹Ã+Ã[Äq{ô¨ûý’?›l¢fxµÉJ>×Ì>ò!J–¼MB“Ø$5Y›ä&[›Ð&¶ImÖ6¹ÍÖë;â±h<:aj´QZb}&öL¢3ÒíŠî—Þ’÷%”¼>ùˆô{ùpüHâTìBLMäh8_DòE4_$répì("ù"š/4Wd]ÁªF!^,KœŠpÖÒ€ñy/ÖK ù…zF¯×© _Ñ-½PNйB}Nô³›º/ÞC˜¢êËœÅDÁý4èa>ߣ¦1ƒÝîLc\ÚX ÏÁkÀ"ZÜf C‘uÀœ¿ÔZh`#ªgÝÞt,Ÿc§{sG˜]…=¢‡`¥‚U:ŽºÊTú#²ô$MÒ¥§ýUýIœ„§ÀŠ$Œ'Ü&™ŸSZÜù#,JìQEñdº¥ì\É”u•‘2cEÞœße[.”ë2¥v(à Èê𡨃°ƒ½ž#4Æ÷³!ÆvF2#…ð@>ÖêS at I)
+Ó!£â!ú«ÐSG³HðU{já8O<D½0\”jwUMÊ%JÚìD7;ý¡{^˹§l|b0bö”ÄœŠKq+&KØò!1Áû°y"==ôc‘=âCáˆM&H>œˆ‹’%ÅùP¡ Ÿ•R¨+Ë ¦’©mÛ¶¡qt„›;ڛݕjŽjâ±x)©HO­Ì	1æÅ<õfZäÄ>–9éصyËÆŠâý߬Ÿõ³äk
+[Ï6:ËëZ·´©ê$ßö,n½¸õÊ—x†uÇÊšoqÙ¼muµ›…©¹›å}²éÉʈ?à–¢å³¶45¾ý‹c0§ÑÑïIÒü&ÒÐgD÷`$–ÙY´èÒ1²MÂ&¤*bÊ!Qé6YJ…±ÍU,ãQ^xL|¬…_Ëwñ{yQçt?Οãûyb
+\ÅçÄšß÷gñ¹<6V0VÏ9èœ'í§•eÌšå\%ÿ'Ò†¼xê‰U„T*¿CÔ+ƒÀðCZÃ;ËË•K[S©b
+ú«pF(¿WR&‹8=Ðz¢OL_¾¦dûöS§O»S‰à;o+3W"+vc~ÍÈ«»‡÷/,1 G/R.»ÅÅèÓëÏ ƒöF,ÐÒ$äVÓxÛr—'rã¨àVeìV­”̝´M¨\-öj'–U4–R44 at c±: 1úÖæå
+èåN
+ò‰
+ú1ªásÖêÀ¨ ¢‰ñA֍ãƨÁr±øP8DŒÄØ/Þ91/âCáÙ“E	ž*Âý™^ˆ,›ˆž-Öé=v›×ÐOCUè{fzN9Øœb·9lÄÂÁ,Ð ÂÉ>dœ>1$™ÜFõ—®-ª`ÐÄ)8åNºáa ¦BmÊl¹¾ìp½bíµ:³hQÏ´Þ·zç>[_±Žì>õê”ÚE
+{v’ª7(:"Ó7	ß9AÈœŸ?ÕÌ’¶HÈ,
+fLÌQØ~æI©›}ÊÍ>º5@íàU}V˜1
+;«$àw›³J¤13-ÀP¦;EÏxìL¯ø"+‹Ò(AÌwŠáâ4Ré~º‘}!QšF!zpÈPBŒIU¨Bš‹j¥Åx1Y"<-®Â«H«Ð*nDð²IØ(nºq7yÉ´‹ß)¼,þ½!¾&C‡¤³èCþ„t	]n ëÒ?Ñ×ÒtO*¡ÿŽäEª”ø?ûÕÅu…Ͻ³3wvÞ/Ûkï/ö.^»ø±vÙÖSB0Á5˜Bl“
+”BŽ-ˆ ÒFQ‘¢J%jU$¤P¤`‚íƒ
+iùARYÐÑ'¥Z‰‹êµ„†Û=wvmŒTµ•ªþÛ™ýfÎÜÙy}÷<¾ÕJZY	¾}§¸QDWi<%ßÆïáŸ\"û&ŸF‚ʹàcœå¬£T5§­îz
+¹A§†SP×ÖLeÔO+L–«ÂŠ+ PŠÂÄ#_DAÉ"Ë”‰)aˆX§­Rö}?| LÃ$Úï‹D*¢å‡ãÔ'•ê÷¸7—•Nd'²e‘ñÑ,—\m´exºlÃÐ=(.H|îâÁ¾ëF’JaG4»é…l÷\Òà—4§ÝBÞ˜Üö“ѪŠHêÏg&ŸUO¼°yûš]ô%tô	@|½Ã	•ç¼ã8\™ÙG
+
+•”ï1®öizPbÇP¢¢eǵ܉}†œÀÒÊ-ÛŽ[  ¡"’‰lèšÄJ³	
+)![áöt¢³±ê[׆­«©aî}œ`^qòeC#Ð#5¡ù
+]no°¿cv<˜¿Á©‘ †¦
+›§pÅÜF+Vžàéú¦ÿVżƐ¤…]).uÄ„$5¬²c+x,&GÕrì`«Xœ2¡‰}V^d,Ú%ŸuÊêCf»½ÜÙ`>êle_‘7;»¥=ìYùŒ4d8KwÃIÕNBROI3áÔy-v¾.¿(¾§#ÇéqõÇZ?HCÆ¥Ð5é7á±Ð˜ù¡sKúG8¦Jüµ`k[#ØšÁÖÉ»mT1̐¶Ìä*fV¼3˜ ­Jœºæ§y–ÒÑûj‚^M'ž+)ª]­¤ì5¡G•ö6{¯ý²­ØJ}‘OGnbîQ
+dm]êþø±5Ê×\õÇ_Ô÷QÄ„ÅÄ°¢ÈØ£(–mc~ï8-‚ƒšå“bñŸÙLŽ3ÛqR"óD‘8ÏUºáéº!c»“Rd/q&R€æ„dÓÖ=x=ó¸,3ÆCÇ1Mà Żméä	}‡~@ôArÌWâ+²]Ù¯Pe~ɯ´Év{¿Mm~¤Z"yB܁Á%`pë'·ÝÛ›ITÚy+› ®Á²l䃙Ȳò+~:ÉGlvθûwè•
+ë"3¬·9:z+ºëÓãZœž›AM;ÆÔ•>¨7ãú(iÉ/ݽ]qòÔ•S¬žs»:zV¯FGN±xnÔÁÑ9Á(Þh ¥ Þ³Õ•7Y=¿ã›ÐB‡rOš¹ùÌu%ÁuöÔÈi%Š?iƒ<´1¸ÛÕ§jà§ÜVü¢î|1{†§®±JOÜžTé˜<;t¢-ÔpâÌ‘¦Ï
+œœì;{bþ¯0Á|Ô~—>=qøçÃtÓÝßÒ½ýŸ^ÆL3wrµðÌ4eäïù:T®x¦ 
+±RÓ‘TÉõ3®úZÜ”¹YZ—*»^.+µø.hÀ‚”=mƈÉÒS±Ö¤·Ö<©¾î›ÔŒ'ë-¾aZØ)Ö#NBMh	½YkÖ›Œ×l5é$ÝeÅÝN·Û]´ÅÙân)Ú-íÒwÛ{¼=EßÒ_¶_q^q¿íVŽ«ç¬³öwCùÐûXŸ°îxS±9Ó¡X쪱hÈ\b¾`
+féÌëçD'GXLS³0°*”z®[å(˜:z•ª`‹£¸Ž£iªÄo 1+Fëbçc46HÛúMäÂ÷é_ms|‡>îœw¨3H˜¤Ž*üTÀ–×굕š°J›Ò¨†ÿ8]g"7´­/ß‹NäMô`+€ÅÍñˆuk´ÔÍöŒ—E¬ñÀ‚…Üóye‘ŸCѹ
+4 ¿Ý9“‘Ñ£
+ô¤zÒYЦÆ@#³ýÈ›úÃ@ºU©L·Xú‹ZíÊ"îK©n®… ëú›àú%Í×{å	ÓjœýÞ¢Ú̲»ZT'ŸúéõTeEê}“Û¾0¯~ïÚÆÉÍ'¬ä¼èV³<”œxmç7÷î¢[ï^:¹¸»³t	£ëÅ_‚Ê5º¿ñ6˜ô#ö‘Kßgï»ô2»ìÒóì¼KO²“.=ÂŽ¸ô;äÒ}lŸKïÊw=ºMÞæÑõòzj²æQÏ•ªJóŽ!Ü¡†N‰–Ñ!£“A²Ê¯s·³ýìq[¼Œ¡kLR~IY£±“°9C	dá%´4Òs,׊e:-Tà£(39Ú²¨ÄÇ­ñ ëàžäò,Xïp]ÏôôôžüB²¤è¦Fä­D’ØÜY6ñÞŽ×l¨M7
+ä»ÓVèâ/~ôbfÕü¥%Öݳ©váOt…øNÀÔïüS7å›%2ñèqévťؗö²^—eG]ú*{եϳç]ºƒípé“ò“í’»òL™š*€÷ºË¹Ñt¤Ì@²ˆü:ãõ	¤!Ä03ò•ÐK>¯i:§KßI©¤,qBÈ׶¬ÛÙv,ȧjÔ
+lÔÏœ£‰ñéýýdÍðÔÓƒ¼‘¬ÛÔPäaƒ•hnN7̲׽]‘ÚPÛÜ$üzÚ}‚-Z=¿½øñ®{ä—šÿGc(°æå@GP…ŸC­õ » Øw  x­÷~èâÝ
+óÙ¬7 ìÛ Î€» UŒ:®ø@É{ eråæü nÝCå^€ªjÄU€êOîGò‡ÿ)|Öƒ+ ê(@ý ÀB|—†K Mƒ é -« Z¿
+Á÷É|
+ÐVàÿ`qÀ’o ,5 Ú=€åÈCòѹ`å ÖH9¬ýrÿ/¬{	à±¾
+( €
+( €
+( €
+( €
+( €
+(à¿P Àn‘2„ÿqfÙ¦eƒë—DJñ¨|N08ªÉù5©Ú@ýg45§[p<“¿hÉÃKÛ—=²¼ã‹+þ9ÿ€À àÐ°ðˆÈ(†œVnÞBØYÔ,€¤ƒ Ы|
+zfÖŽÞþ¡‘å•SddÿÿªS`Ða0`°Ê;3ø2åò“!òÿcƒ
+¦?˜
+}|€™ 
+†4¨9Ì<@’ê „°Ù€,	P³pE$€±a3ýfe3Ž l ;	Êf²«\\½Ü´‹2sp±\€ØHº1hâˆ!9ÀðHeHg(²b¸T‘*ô[°g(c`úD€AŸ!èm^`Œ0ù@O0N``eà`²@<͐Æ$$8@N{ `p Æé1g8x˜g at Cí¡êóâùm¾rHs€U/z¬®¢w^Ýòí×ú¿é 8 …3Ød š½ÀÑ
+endstream
+endobj
+3984 0 obj
+<< /N 3 /Alternate /DeviceRGB /Length 2575 /Filter /FlateDecode >> 
+stream
+H‰œ–yTSwÇoÉž•°Ãc
+[€°5la‘QIBHØADED„ª•2ÖmtFOE.®c­Ö}êÒõ0êè8´׎8GNg¦Óïï÷9÷wïïÝß½÷ó  '¥ªµÕ0 Ö ÏJŒÅb¤	 
+  2y­.-;!à’ÆK°ZÜ	ü‹ž^i½"LÊÀ0ðÿ‰-×é
+ @8(”µrœ;q®ª7èLöœy¥•&†Qëñq¶4±jž½ç|æ9ÚÄ
+V³)gB£0ñiœWו8#©8wÕ©•õ8_Å٥ʨQãüÜ«QÊj@é&»A)/ÇÙgº>'K‚ó ÈtÕ;\ú”
+Ó¥$ÕºF½ZUnÀÜå˜(4TŒ%)ë«”ƒ0C&¯”阤Z£“i˜¿óœ8¦Úbx‘ƒE¡ÁÁBÑ;…ú¯›¿P¦ÞÎӓ̹žAüom?çW=
+€x¯Íú·¶Ò- Œ¯Àòæ[›Ëû 0ñ¾¾øÎ}ø¦y)7ta¾¾õõõ>j¥ÜÇTÐ7úŸ¿@ï¼ÏÇtÜ›ò`qÊ2™±Ê€™ê&¯®ª6ê±ZL®Ä„?â_øóyxg)Ë”z¥ÈçL­UáíÖ*ÔuµSkÿSeØO4?׸¸c¯¯Ø°.ò ò· åÒ R´
+߁Þô-•’2ð5ßáÞüÜÏ	ú÷Sá>Ó£V­š‹“då`r£¾n~ÏôY &à+`œ;ÂA4ˆÉ 䀰ÈA9Ð =¨- t°lÃ`;»Á~pŒƒÁ	ðGp|	®[`Lƒ‡`<¯ "AˆYA+äùCb(Š‡R¡,¨ *T2B-Ð
+¨ꇆ¡Ðnè÷ÐQètº}MA ï —0Óal»Á¾°ŽSàx	¬‚kà&¸^Á£ð>ø0|>_ƒ'á‡ð,ÂG!"F$H:Rˆ”!z¤éF‘Qd?r9‹\A&‘GÈ”ˆrQ¢áhš‹ÊÑ´íE‡Ñ]èaô4zBgÐ×Á–àE#H	‹*B=¡‹0HØIøˆp†p0MxJ$ùD1„˜D, V›‰½Ä­ÄÄãÄKÄ»ÄY‰dEò"EÒI2’ÔEÚBÚGúŒt™4MzN¦‘Èþär!YKî ’÷?%_&ß#¿¢°(®”0J:EAi¤ôQÆ(Ç()Ó”WT6U@ æP+¨íÔ!ê~êêmêæD¥eÒÔ´å´!ÚïhŸÓ¦h/èº']B/¢éëèҏӿ¢?a0nŒhF!ÃÀXÇØÍ8ÅøšñÜŒkæc&5S˜µ™˜6»lö˜Iaº2c˜K™MÌAæ!æEæ#…åÆ’°d¬VÖë(ëk–Íe‹Øél
+»—½‡}Ž}ŸCâ¸qâ9
+N'çÎ)Î].ÂuæJ¸rî
+î÷wšGä	xR^¯‡÷[ÞoÆœchžgÞ`>bþ‰ù$á»ñ¥ü*~ÿ ÿ:ÿ¥…EŒ…ÒbÅ~‹ËÏ,m,£-•–Ý–,¯Y¾´Â¬â­*­6X[ݱF­=­3­ë­·YŸ±~dó	·‘ÛtÛ´¹iÛzÚfÙ6Û~`{ÁvÖÎÞ.ÑNg·Åî”Ý#{¾}´}…ý€ý§ö¸‘j‡‡ÏþŠ™c1X6„Æfm“Ž;'_9	œr:œ8Ýq¦:‹ËœœO:ϸ8¸¤¹´¸ìu¹éJq»–»nv=ëúÌMà–ï¶ÊmÜí¾ÀR 4	ö
+n»3Ü£ÜkÜGݯz=Ä•[=¾ô„=ƒ<Ë=G</zÁ^Á^j¯­^—¼	Þ¡ÞZïQïBº0FX'Ü+œòáû¤útøŒû<öuñ-ôÝà{Ö÷µ__•ß˜ß-G”,ê}çïé/÷ñ¿ÀHh8ðm W 2p[àŸƒ¸AiA«‚Ný#8$X¼?øAˆKHIÈ{!7Ä<q†¸Wüy(!46´-ôãÐaÁa†°ƒa†W†ï	¿¿@°@¹`lÁݧYÄŽˆÉH,²$òýÈÉ(Ç(YÔhÔ7ÑÎÑŠèÑ÷b<b*böÅ<Žõ‹ÕÇ~ûL&Y&9‡Ä%ÆuÇMÄsâsã‡ã¿NpJP%ìM˜IJlN<žDHJIڐtCj'•KwKg’C’—%ŸN¡§d§§|“ꙪO=–§%§mL»½Ðu¡váx:H—¦oL¿“!ȨÉøC&13#s$ó/Y¢¬–¬³ÙÜìâì=ÙOsbsúrnåºçsOæ1óŠòvç=ˏËïÏŸ\ä»hÙ¢óÖê‚#…¤Â¼Â…³‹ãoZ<]TÔUt}‰`IÃ’sK­—V-ý¤˜Y,+>TB(É/ÙSòƒ,]6*›-•–¾W:#—È7Ë*¢ŠÊe¿ò^YDYÙ}U„j£êAyTù`ù#µD=¬þ¶"©b{ųÊôÊ+¬Ê¯: !kJ4Gµm¥ötµ}uCõ%—®K7YV³©fFŸ¢ßYÕ.©=bàá?SŒîÆ•Æ©ºÈº‘ºçõyõ‡Ø
+Ú†žkï5%4ý¦m–7Ÿlqlio™Z³lG+ÔZÚz²Í¹­³mzyâò]íÔöÊö?uøuôw|¿"űN»ÎåwW&®ÜÛe֥ﺱ*|ÕöÕèjõê‰5k¶¬yÝ­èþ¢Ç¯g°ç‡^yïkEk‡Öþ¸®lÝD_p߶õÄõÚõ×7DmØÕÏîoê¿»1mãál {àûMÅ›Î
+nßLÝlÜ<9”úO ¤[þ˜¸™$™™üšhšÕ›B›¯œœ‰œ÷dÒž@ž®ŸŸ‹Ÿú i Ø¡G¡¶¢&¢–££v£æ¤V¤Ç¥8¥©¦¦‹¦ý§n§à¨R¨Ä©7©©ªª««u«é¬\¬Ð­D­¸®-®¡¯¯‹° °u°ê±`±Ö²K²Â³8³®´%´œµµŠ¶¶y¶ð·h·à¸Y¸Ñ¹J¹Âº;ºµ».»§¼!¼›½½¾
+¾„¾ÿ¿z¿õÀpÀìÁgÁãÂ_ÂÛÃXÃÔÄQÄÎÅKÅÈÆFÆÃÇAÇ¿È=ȼÉ:ɹÊ8Ê·Ë6˶Ì5̵Í5͵Î6ζÏ7ϸÐ9кÑ<ѾÒ?ÒÁÓDÓÆÔIÔËÕNÕÑÖUÖØ×\×àØdØèÙlÙñÚvÚûÛ€ÜÜŠÝÝ–ÞÞ¢ß)߯à6à½áDáÌâSâÛãcãëäsäüå„æ
+æ–çç©è2è¼éFéÐê[êåëpëûì†ííœî(î´ï@ïÌðXðåñrñÿòŒóó§ô4ôÂõPõÞömöû÷Šøø¨ù8ùÇúWúçûwüü˜ý)ýºþKþÜÿmÿÿ ÷„óû
+endstream
+endobj
+3985 0 obj
+<< /Filter /FlateDecode /Length 24009 /Length1 37176 >> 
+stream
+H‰\VtWþö>ÿošѐxçÆM‚H<BÅ3RIH¥©„X5š›ÈCQ¡a‰zÌ B<J¼ªí´Thn´•ª¥–Qƒ0–2J•’R–$÷ÌÎí¬Yíü{µöþ}ÎùöÞßÞçh‰EPH3®wDFBªX+¯dæ;
+BïþXÝ O2çÚtì{›äÛUÀZ”]“_“\Ux¤ æ°œéó²=©ÏBŽžåf9¦|^^쬓%+-Š­äÀ
+ò”›_X´cï¤{ò^xž>3ÓAÁI¯eOï”|GQÇ^Z%xÖŠ½m†#?뵈ò­ìàÙ^0sv¡~Ô¼uÙß›¿¼žU°dögSNàYk–	ª— £“š…v€¾!ãvópÖæ4Ø]¹ú_*JVoüïøõ	Æ.”‘Š±qˆÀ_p
+ÓP€dTb(Ð%Œ‚!Vo ¢Ñ?r`$EÊ[üõ)ùòª¾Ã·À؂ŨÇ\D&þ¶R?a ¾Æ0_³°õ?a5úãÔé«Ú…x¼‡:JãÔ"3
+0°Šü)”Ò„†"|ŠZöy®-ˆW‚Täà€Ar¦‰$TÒ#'¥¢”^ Z½6A‚p¼H¸§>‚.EÁpü	°—¨
+S}ÃðŸ8LÞäG]é¨~"‰˜$HW¡»q§)€R¸·J7?r݆7f
+Âb”â’'M "®Q{]ÃužÞ¯ËêH9'£w16‰w;qµø\bRG)‰6Ñ}£ÐŒhZì:纮ýôC´¬ã‘‹x%’›wpWðo<%ƒ<¨5ã>|Eyï˜þzy3Ð/J´Š°+DËŠ/ÉFÝ©ÒEöæV<rÿ¨JT•úÎø^Çè]ú‰ùXa	ÁXÉj±dmän>F5jp?àI$󨔪¨šžpÞËŒF³Î| ·ëFxI´ƒ†>"ý$‚£ð’`™­’©¯pFjæžQGDi9­¤2ÚHåô-ýÂËø,_Såê#åT'
+2"Œ<³Ô¼nI¶:\å®­:A¼ó•½ûo¢$†YÂÅÙ‰·%ŽûpGÛ4H\|ÅÛ Bc©ˆÐbZC¦ËÏy<“©ÎÊ®º©F€Qaœ3®˜óÍRWˆ+M÷B3o<…
+CwªÈkÈ–Sæ‹”J*ñ‰dë„°öŽ°ù1ä4–<{Q[
+¤n'2^²žJ“ÉA¹TLïS]¡ûìÃí¸+¯á
+ü>Ãß«Yê-µMíWç•ËЦ—!’`¦‰¿f½e¼¥Ä:šaÝéñuShÓɦk®®¶®n®q®?ºþªSõ\ý†Þ¡w꽺R׺+U	w;¿l"ÝÐK*'/c²àŸ†YÂÉ•X+ígð­ûq Ç…qçð
+®á[‘[¸-™½ëöé1ŧvd§¾Â—HšD”M4ß-Kh3m¡m䤣TK§è<]¢:º.ò=¡§ü<ûroŽäXÅcx,gr𛼙·ñ‡|ˆð—’å‹|‰o²Ku’LÄ©xõ5Y"2O-V;Ô!õuAÕ©ê©ÄƐv#ØläKëfw‰Ó3Ï|Wä˜ÅË’g©´ì·œ¶Ü¶Z¬Ý­ñÖ$ë‡Ö}V-•R‰õR¥¿y„q»¨¿*(}Áè-:ÃûŒ{ìMi4_Ã0áx"nq‰
+¦(UD¥ŽWã%VCoÞΣ„ÝÍÏX©â~ÂÃó¼Ñ–v¼Œr¥ßœþ$ˆÍ
+A°®Ck¬ÓÓPMþRQYz‹ÔÂ"J Z©¡žÅ?ÊGzC]ÞÜ’ÚïOå–Ó˜Ä=…mÃð.ü0Hòy
+óÈƽ0[Ô
+Ét Ú#Ô˜nJ§zµ»¹œKø€þŠ¥ïM4FŒëÒ÷C@wñ±`;Å繄ª
+í 1‚¡“ò~œ@oG–šC/⟍:\æA<Q…Q½ÑWÉm(yZŠ4ºKØCåü”±‘‰÷7é.ßD!~&ÍMj
+çÒI:A~Ü“F¨>pñ
+Ê4A¸oú“GJY„W·x·Ê¦m8oSWDu}F‘ܨlK‰j ¾‡`ËSÕÒuAÇ –µ^ox5ý$Ñ™…Ëú¸
+7Æè†ê†³ìOëU¾™ªë]ÅæRŽB¶yÇ:ó8F:ÄY¹‹*J?q‰{€Ì–Hùk8ù=F­‘êOR¤sT"‡v‰­)wÓp¹žq…tÍD5GúÌA¶/ÞîË™rÏäÒX°Ü†û>Ø*lxhLÅ<ù{H§r›VˆÖÅü ::zxÔ°¡CùBÿ~}ûôîÖ3´G÷n!ÁAö®¶€.;uìо¿_Û6¾Ï·öiåݲ…—çsV‹i(&„ÅÙG¦Ûœ!éN#ÄÞünwÈ„ã7éN›Lü½Ó–î6³ýÞ2Z,³ÿÏ2úWËèÿY’m(††‡Ùâì6ç™X»­†&&§Š¾:ÖžfsÞsë‰n}­[o)z` ,°ÅµËµ9)Ýç97we\z¬lWååcÉòC•§—¨^¢9ýíUäEn…ýãW1<Z
+(g{lœ³½=¶SÇ9¦8“’Sãb;¦…‡9)&Óžá„}„³UO·	bÜÇ8-1N«ûÛÔfoPj«
+«]¹ªÆéÿ¡½j £*®ð}oÞۍ ”ÿÈÆmÂOP D(`S~T“¸É‰t‰" AiEhƒi‘ÒóøG° `Ñ¢íIj]G6P"? m `#ç`¡í¥4 at 9HÅÆL¿;ûÞ²	mÅžSÈ·wæÞ¹wîÌܹw^z|™·lfI $fñÓ1ï„P%—zÞéÂøWÆVÄJ“„åïù¤‡»–µÂÚ1-+Máߢ"Ø€®žš´ò0õ*ÞÄž™p„Ýç¥D5ËëgNp®'tŸwœwŽ57ˆóH´B4}qJMb¢¯Vþ‰ý+?àM	MòÍœÐ{WW²¦/ÞÝËçéÕZ’1hWBçÈnîêØÉnÄwˆmÌŠÊTK
+çÖ”éÑíÔØ#ï$DAÈó„ž¼XH6ÿÌÊ&ë‰lÿ"
+Z¡2Ó¡ûÆ­„æ³~ÈLMðz¬OÇîmú[kÎL›ãJMø„¸ÉÁ/ȝv(==4p Ç…{<>~]õ‡gz.¬_õ.Hð€`ûè‘ ÔŠr2±ç))|ª+Ã>*E'T9-é{¨4©†|™éE!=È’ƒŽ¤[K*IT=èEøî!þèŠK‹þuJèÞÅ?''¤uÿ/âYù”G½S¦<~+hïí”üV½ˆ<;*³[¡.ã"I·[z’PRDbIt0wñ!#.ÉeawBQq4O^(!81ò[Ô.%å•Âò:k)rGÍv3”“Þºÿ@«~+÷â-‡4}J~±eµk%ËCÚ±¬<¯'Ï
+Z3ò²ÔëIðZµxâ…¬þ s¢a¹oeR(oU1GËÉPå_W)-~z,n^³ÙÜwß.îØz.Ö»Fi½¹¥;¨¢WD‰–†Ÿ—€BW­s¢Rí­d«ô*™bv¿9›êt’WÀ=¿>JîÇø%@à& >`ð}àcàaàè,¾
+/Ç™‚_ï.¡™ÆE¹
+8m’e“GÐ>œ4ÑôùŠÕrŸY(Oe«J@ûäK0î(Û8
+{…´ýsÆE°ŽÛà//½fч:è£èœè#‡‰ e$¯éUÚè
+FˆÕÌ£~ >}TËVÈO ? :ôw€ßí©°ïåqÀhŒéšÛa·	ò|æcì ¬Ç¿Ã@	dÇÄ0Z­£&1L~Ëȧ®öº_åuóš5)ÿ#>ÝØeÛ¾XDü»ƒ;¾}!Îç߃>ÅZšõzËȤùµìuu¥•÷Yœ{•¶ˆ7ʨ—»Ü'š{h8úŒ@1ôoÛäq“|¥»^¦
+àOÔ‡"ƆSþ]ºäÂ×-Ö›ùLŽìÛ:ejßtоÆ_ä{hs?ÕÝGkgïÓ6Þ÷jÊ€þÌu~45ø|«Ö³?˜?{ĹïÕ
+[ªa§3bïÛÀ`¬«"y1¼¼\ŒëGô‚=Ï™z†c/öù88ç@í}^pUTÜ‚/iÀ! z‚f‚ÿ0ètÄb=ÆãxE\\Ä¦|‹cñþ;ðG²ïj
+ˆoŽ±È½Ñ–è³é§@9ð¢‹è5?Àu_8fÙOÛvÇÇŒCíØ8ªWãÝÌë串©º{¨ŸòkçØŠRÜ;Ž}E/ãN3ÝD“8fÙf”Sù`4ßGœmZ”ÚþðýDÞ8¯èe*´c}´Cí½8¥«å;U¸zÐvcb?Œ;Џº‹ÈA籇OÑd¾ÇÆ&zE_N]ÝW(g9¶¶´¡›îFm.ìÄ~Ö
+´t³Ñ¨ßo4j¦Y-/MÚA³Z_Êí»i[8c™2be_–ÿ¿@ÿÀ¬Æ¾ZþÕl”Òh¤
+X+¹¯hC CÁ¯*qéÚæ¸yZØ]@	ˆ››@¹á£Ó‡˜;Hcn*§‚_à"ì¿FSŒWi!¾[;ˆ-ÍUMóEî(æÒ? e¶º G‘XËqè]±dS'^ÛÐãœó9ï:TÝ=äU›Zõsèk\8?s}à͈ī|=—PC>¼Ÿ­ãTÞŽ‰Ï—`shÛ¸Œ¡˜rmáüεóÏÀüÛaë
+^¿ÊÈqœ#9ÏáÎ?äŒoK£úUÚ䇽*7P±s¯¾çCö G‡iÊ‡åô¸«ŠÄHzH壉4Ã<EUƒìšjÔÈŸ©\†ûäÔRUGåÚhí#oDò™<ªòÍ!YË÷SÕMÔOs‡ÖÅ<AI*¯,¤_©{ÈwðSÊÁ\âȹÍrxCÅä^ðÅU*V²³”,Aϐ¹&Š§(UÕdz²\Œ¥±Jw¹ôŸ¢n¿‰ZaÛSc@ÍMˆI¼\A:¤rA1Çutò1Ÿ½{žÜïž!»Ê¨Þ|ë)¥?c-
+j²^íëö¼î|¹NÜ’-ó[Ö™'kÕ~`b÷BÕf~SÀ¦«œ6©ý`eôQ\@^b˜sè9×g˜s™cPKÆÉ:sœ\¯r«5n1Ö™ŒÚOc8îÝÏH)’åI§‹:Jò
+3IîÄÞ
+°ùý8ïó›„ßü†0ɵ_†•Îi¼ÓÚ‘aôC\ΣÙb'°‚:™;ñ	ËÕ[¡‘úCV‰
+¼o"ï~#¨ûR.ß4kh ß1åæ໏ó8‚\Zˆ\’ë^)nè”…˜Žýž
+Ìüvÿ°#h§"c4ò|ýÔ„v	ÚßÔëÄ÷ô:Éï@ñ¾l/È£úz¹T<FÄIyZïMïêqðã=ù™xŸŠ´kT/*鐘„wÓ:&ŽËK∼ ·§Éúh¹]ì¢yb™lÏÒTñ4ì­££âÇòºX#׊MˆÑOè°ø\ndÓ»F{غ@õÚi«þwÚêz0_®²_Ika¿»Â2Ä	ôb¡|up·Ï¥z*ÅÛþ·ò—}uüt|tü[ƒZfûÇëf»JcŒ‰4™HþHÐ–i8“bÎë*gù‘{␋§Ñ'}~؃özŒ½\BûyÀBûGÀ?×§1î&Ì’Ñÿ†‘HÏÛy¦ãÓÁ›@ïó3è÷E;í QóG Ï cѾ
+€ßlÚ( :Aã$Ï5Ôæ]ÃømÀ9´_}4Âkލv›î6K!êýÚæ]ò ÿ¶Ý+mS‡†¶­)_ŠúªAÎùµkKÉ]ÔÞg1þü§š×Š"~êìÿT‹¼·ßŸåƒ¦V´¦ÿ€¬ˆ 1-«2·‹ØO?ÞN°ßd@ûõ·©%cpmM÷$¥®7ÎnŒÈŽ4vÌÈúcn;<þ®º‹ZêÑÚÝpÖõÜö`h0»—4à_¬W}PÇßÝ“t 8‰/al­>¸3 ¡;t„[«ø'ƒü…ÛÆN\'LÒÔvd’03‰3“4ýp[»Í´j\sH„MlÏt¦üáI§“?Ú™Lã:ÔM?HÚNꡉA}»bâ6Í´ÿôNïýnßû½÷v÷öîV<-T˜†Ó­´$V)d$¤‘d+Èa èL½
+ò>HÄ„œÂXúæIzE8‹áӐä›èe+Ö‹hÊ”2“I	dà21Î]Õéªj6w-³Õèæ	<È¯	ÏâJVæv"Òô,@‡LGem½rW{8¦ýyv•ö½9˜ä™˜tÁ[…þ–iUÚÕ9áiv¢V+š¢º¼[sgaœ»ïÂ{¹A+ƒ&»¯Ã0%£\3[P•˜oÛ.µˆáæmªáÆ^µ˜¥èÑ
+ t›²QuÊ]ýœ”V5“®×œŒiW—!a;Òrèår»æ’›v©’¬„U‹\¯AýlnY¯‘×kE­AMý–|N¾$¿.›Ìr3xÕµªµ®µ¥UpÉ•ðb­Ü"›æ„av"ÙŠt‰–PÖyúJ
+i££úk†òaŸ`'¢@*§‘qB$–	ñ¾í|
+¿¥œ§>ÕçlgCJ¥ë4>6)©´ÛÙ~?ãhª&ƒ-¬Ôô綨ª²N‹äÞRþ”倄VÍ‘™hêflU,SƒÆ›°(y~E3±æg7…ÂDrðj. ½hæSUÕ§h-PQ/P ¸M©öª£W RìD
+¬F¨%h‰Z„³d‚\%oÓYaB¸*¼!˜Ö‹‚@… ¶‚¹$ÖDàæ€>ò6ˆ€‚ £ ðÖ¬!Œ¶€†Œˆ€w¼ì*ÊV1÷|ÂÞ,¤…4Y€Ó€²è«"5bŒ‘
+dE••ð"p:¬z¬%~FvÜÎu„ëj}UØþbØþlØþ`ØžÛw„íŸ	Û×…íµa{L"Mȃ줚i|‡ëŸr½•ëuú*ý/ûýkû“û—<öÏ{ì{·Ç³ã܂쨝ëF®×0—.–ô– ÛU¼„z‘]˜„©-G””§•0Í’²´°¦Ý—i¬ŠX`³†Ák1­ €¨‰Ù1
+±· þùñ}€ÒJ=ÍâŸäaœåŒ•ã1¤°(üCäÆ2àÐ8o¿ŠB¿¿‚ßMû‚°ï0ˆÙð·a÷E €Æ‹<žVÀýP:ô9ð!¨ÉÌ¢N‹Ãa]	ó§Ýgèö"7aMtQy’.A¼œ¦jY+NÓÔdÉxš¾«d1´~¾Ói:‚–^Hß	ÍÓ›¡“ô—J–àiúå:½.gM@œ	qâ…'9ï#ðÏ„öÒo(gèËùÜ£5œôLæ¸^JŸ†!
+ùçéaHs¿ÿ1º7ŸjŸ÷àÞ[¼ÕýØ¢qãf…%.¥CÐeœv…®Óÿ^ÚJÁ>Mï©™§?¯Õàçáõnô¤Î?N׆Æ齑9ü3$âQ€Þ ¦ÄGŃâ1!êb‹Ø,®}¢W,³:­’µØZd-°Z­«É
+ÛLkY6wC‡
+Fe‰ÅÄ´‰_K„iPì“B°•À–Ì($Ñ×iD‰¬˜Ûn´†më®þIŒO%q¸öE”ø‚ǸÝçÏâ‚m;
+³¿ÎJìètÙ Ïe1ÚÑŸÅ91Rm8»úá›…õ‘ª&G^H&QÅãQWÔÙḧ§ûSÔ¾¸{¸ÿ~¸Ö_OôõçÖ$
+•]äÖ$ÆÆ>ÏîþYrœwÏ’c’ý³¸‡ogvÜӝü˜êÐ`QËÓRÈÍh°ºSœ¶7O£
+4™£!Êi1,3Æ›§ñîIJ9Çtsθépž#sέá˜%t‹sn™%^®’Sjj€ªa”I_
+&k|ܽí®ÛŸwÏ»s÷—ﺵ¼û\Þ}܁ÿÓ±¿ó1âû:qbkÿ¤u&»vç±B:ÜÁׁcªýDõ%¼Zø5*$§QèïDѨ+ µáàK‘a›Âè¼®§ª/™L9£Ù¾âZ[c.XÎÌUæ’—ë©
+^(2¶â’Àì€"°Žú`]Šõû üÝIäŠì†ß
+Â14448xdˆ ô%Œöm;û'%nTíëN⮃ÝGþËøQ¨‡ (Ÿ¡CÐà`€ÇCùÈÍ.?yÉÛ8?¶c–we	`˜Òlî7÷jþ՝
+h.% ÍÂÿ­áI§ÆÈI<x„EC®|†AžžoöÏ
+NøZŠ(z‘àE‹˜%ôRd6-
+¨@4-bTeµ˜a߉7el¯¾wåvÛRÛf郶ޥ6…ké¨P£×áuÈ àU‚îx„kwt3úyL×àUòüò&aÔ|
+I¨mF´b\js8³x8S‚~„³8ž1l°eñ}S%]æ*Gç,‘+ %z–楥é,‡P#ÞƒEe­Ò$Eœ¸Ò"ZHyö=®}eŸvͽtiy§ôÎ…çFqg·àZÿÉso.Ýžƒ«wy¡¼~׌
+ê;l¥ŽO©¯”t•˜©™˜WA÷ޝÜÊzq{Ït#RQYQ.‰¯mŽ4;›Â¸Þ÷„V÷JvùÞ
+óÑқЍå×–—¾ü+:úã7IºýøÓrKè"*CA½••½-Æ©b\츄 ™šA…Uåÿ=?ú?Ï/ àžG¤×C"Tj
+¯UØ„›5µ¢¼Ì"–'‚5S£ n¨­‹>?ò[_¸Vv–XmŽŠ@G§šœVaî›ñWÉ~œƒ{¼:ƒž!8+8¦Í¤Êôð)Ve¾WšGÁ%–荐ýuKÖáÜÈÄÅs€¾fP!rÿ“ê*nâ:ÃïØ{WÒz-i%Y–-ù@x} ÇšZêÁÔáh ¢%…`Mã`›	©)GЄBÉ1)i˜àNHmìø6MÝ)iJ˜´ÉL§™†$µ	“D¥íÈnHô_9L©Ž}«§Ý7o¿÷ýß÷½`ÈánN´öŠnåÎ!nÁU™É̉5jÂ%%55=5澦‘tÀíkØf”ƒ~ñð¼šl&í¤•ŽXXð#UǺl° {sQÒ<ø$Ø‘6;nøíÁ) ¥jÃ	AÕf»
+öqÌ=ˆ“ÈC-1'±¯ <Dƒ°Î"÷äÙ°­ŸÎŠÈ*öBÖ±W$AüW`ˆ‹a„
+õ6¦ãá)“ʵa5™è´–긑¥éÕ.¤N%Œ[x
+©	¬^˜9šˆ£Œ9‡Ý©j•™wvfŠü¬"º&=ê
+­—R)k“§Äá\sZì÷TYð·Ø曯|¯´h_TDdÍW¾ƒÕËöì‚ R¸°Ê¬. V¹èxÄHxZ>&</ýBèRÆ„Aå=á=—t~Á|é¼®3²’;¹ŸÈ‹F¹Tw1N
+#›jÕ'ƒå~B"ŠØecÝ®«°Š2Ft(ý!â BåÒ­yòñ4¾ž©ºéƉ„:=x¨©pmjpÀ&ð)O|…Ô6ùˆâ8î÷/@Ùwºr†”<&öÏ«¬
+‘_§â„9ݸû¡gÖ„ÆÛófÞœ=ãé¼²i«,ÂãïØ×¼¯SÝsè—»¾½¬íðÇé+uÕ&_ên_£Çƒrti Ùo_ˆ,ÉòÖÆ˾_ÖZÜQölÙKe§¤×]çʆÈß+
+¸ÆʬëÑw0Ùdo³–ˆ6e6娓Ú_.;[6Z6åà»ÝNìƒôY>Ùƒ±50HY8s,ò0~Ib=ü´²†™+ujA,ö÷E²pEÎÃ?GsT“©
+a¢÷Täá¼aGè"} ™¢O&6¨Ö¤YɉÚDB«®HLÄM¬ZZpKÜÀþÇ‘Ê;5ì4P=_×µî#¡yæEŸúŸ;Vo\ú蚢ù'7´Ù¦yëOnØ5BEÚ±¤hmÛò³d2·èá†-Ë7”[w<³í³‹Œã-7÷—ú‚óv‰þ~ûwŸC ‹ ¦“l’`ŸpoÄ°Êø	Ûˆ „P%S%o—:ÙNî]ú•DYT6Im³RÂI˜5½EwÏ砍„á+ìA ˆå*s…ÈbÙ«œÏ!K¢xC‘íŠ((² J²báJ°l³ŠCøE˜ˆBNöRA`ó•ˆ$%ÄpAÖB‡Èø›ÒƒDIêÇ7úd!‘eûi°W„¡EqÐîU,E–‡èl$ÂxrDæ¬AYåtÎ*]À_þ_y'Ÿ`W¬…ššÈD
+cç? ÃÈœ©æÐü ¼aÊ€¡&P\®6™a~§Pn° 	å.Slð0ŒÇZZâ°¶‡øZí¯Âûéd:u¢ðµ-?Ýšv–Њ#©|˜m¸õäÓGñ¶Ómétêiàx=¬Ç‡°ô«È¸€VÍÀ×Ïùsøpþ
+¶‰[Áo`ää[˜n;¿—ÙË=Éfs¯2'¹^f ß¹‹Á‚×å­ãOpSëw9©OäPpåøÊ07È  CãÓX	Ùdr`£õ–Õ¢¹|]Â0Q!ºˆ'ÀPmc´u@@›©|SÍç7QÉtUW›Ý¦¶ 8$?l6LKðwQº¾æò,¢âß”§·,;±öàæçVµ¶oª	Î/^
+z¹-£›ŽíeNñ,kûÃÁO_,
+—úÊCü²øéùŽ7¿iVì¹}™Š`¼Þî4—F\&ôj_@¯8*iÈ£1ÇVïNï^y·ûPÞù¨û%ßkôœå¸³Ëwžöð½Îaï¸Ã)äèW­cîÏ‚ Ä8t‡‡É§qýøg=ùù
+‚Í}ˆõüG±äöcD®kEbóD"šZ*^Æ{
+õ.Û0ì“
+p.ßÁ¢B2‡úOԚşÊ 2ˆ…BÈM€¤ÓÁ!~F PÆ75TU‰A¶/-#3¿+=úø¶ºõ¤ß}âÌ(^|®9Mm[²ý·­Mµló¬`úö;åýÇ®§ß¸þò%|ûê‚©ãéË—~/ÿKûnöohçíqÓàá:ª@¸8â•~h´Œ™w‹ÛmÐDd›#ÏAn×#™È“Œ7¦¦g&}—½Ó»ÎqOI¼>>[rOÍlp{z ¦$ÓU“*­)™]cvÂ6¤—𥐽bh%(Oëit:úU”ò€{»“BÂŽ¬øÀy
+}^Ì>¥ísžvœvŽÍ›;âïËjʽoñª¥ëVlT7:øBÍð.­±,³ÔeÕ9øf´‰lÎíDÌãè º¥ÑX,CË›æÆ¢12ã)Y
+fQ&£èä´ˆŒö¡˜#1[?¹r¾Åxo?=ïF98'ªQùUÂ.ð
+Òɇˆ‡¶œ¼Õ])5
+Âùèüܹ«VËÃÐ_Bú!d\‰¨6¸×³ººÈV¿»þÕzZ?HþŒ²É•>[ Ü«V?!?'#È…«ž2Œ{“fžŒÏ°ÌÂTšÔ$ªM¦À?RWãêdmmBO¥&ÍÃZ¦Ôà"õNÕžá¼.4•‡r\†4f%…8¤1¡|”"È($T
+…æ1šÃNf–­Š›iµ*“z0{fwbw·E½F~ý¥#§Òìû<Ýúù»øÑ0_o½gmº8ýþßÒÍŸýÝ¼Œß8ykC£v´»né##Ƕ¯[t¿êû¿tWpõÿÿwïýÚ»½Ýä^ÿËíóîr1w›	Nn“L4<BèXÊó´@ GF ‚AP J‹hZZhG¨–RF«2Ø©’Ð:¥3:}0SŠSÛ*vRåÕ™ÈØ‘lúßÍ(µ›™ýö¾»Ý»|ß÷{|³:ºçN»¿¦©÷{±©3È·´îóOˆ±š=°ýèaÈ¿ô…–ýò‚¶óm‚”vU{ã¸ÿKhƒïAxX:>¤ýä•öæ©‹ûÙöÈnøp÷mmküNÿpA¡sÁÐ’]-sð\ÿ Ó·Í«1Hp·ú4É‚
+S€äl¼C°ˆV— ÓBAèÖ
+[…]‹ÂIábìFÌiæÌ‚YÌpõ|FlCmü<þQÔů{˜Çù×ù³ìŸ¹„s¢_æ3L†U)	jÂéH™âj°)+«þ¦¬_hFìêø˜ƒv"â¸Vgò\!;´!{„
+£ˆÀ²Ç3Ç´ÀÒÑ	Ã*JŒ$øýv(q8ì6’÷ñŽeD-gXȖƇûMY¶D¶	[y5Îòå_"§ =ÊP‚-ªªÞ¦,Ó°‹P‰œ3 ÷	<ˆ ‘‹
+=-¦FS©©Ôè…T±<SEÝäá¿‚NöWð…Îô6]é<XêLø"p§óÅgÛåÉWV7o5{óyk>oÈ!žJ c},Y¦²¢¢›ãú:Ã7rVˤ_n0„ÒTµÊFù›;œcŸ9+›“Èëtxµ§žO²y§¶Ö9³{Yý²¶Î3¯þj_g0Á¢ˆ$Eü5Uëß8YhÄj	I"‹ûLs´þ±KXQŸÿÄ|ÏDü@Eo«³Õ»Ä²Ê¹ÁÑãÜÝá}ÁûÇ\îWéßÒ„…‚D	v¨v›¸ÇV‘l‰ðùºv ×ŸŒ%vb!h9ß©×ù“£ž¹M¥#êý³²•ÉˆÀÈŠÄŠ-„™Ju\Ka<à¢ŽòW.{Gë‡÷ERˆ×’ÂHk¬·˜^Ôq(êB©§ÌWˆ&³Ø¾¦µÇá¥s/”úþRL¯ÑFO¾:v\…þ´üɆ@@¬6¯Öf¬É?Ø_¶eä×oŸþü©§õ‹¾›»?‚¯\O3L£ã Ì/co÷€ƒÈø§j½/—NÍoŠoNõÅ¢7ãAnÈÑH”a±?f…ZwM-$Ü6¦6Á2Þä	r°à“+–°¤±·ûsëÒ0>9ABÀ’mÇhŠL	®¬µ3•L­ã\Ÿ[v`¸2Ý­Kè.¾WSÂ10¢ê¼'Ô@ŽQ}¹”~,„#c#s¼E<¦—ôàYÓÙðÊ-¸{KÁF.¦Ó›‡0	·W1]CÍ®­ØØ0¡ª°Æ@?´ÿlñú«ÚggÆN¹;Ã	?¯G²³a‡ö!ÇÒ¡¦ýÐý­Í{Î0Å—¶jÿzé»_íœ/.ªÞFf—6Æ«å›öÇÂÞ¨ÙÞ¬á}g>ÿ'^+Æÿ€«¾W=
+ÛXžòMWðà¨Û1o˜=¬g¯üšüÓ€oH¶B@EkÛý
+Y+P%ªˆ?œN/M ¸¥ –š‘…¥Äš$(EE$ŠŠ¢(ƒP4]+µn‡•ˆ
+Ö†2‰(òZ«j%þhýØJXã{€œ‘Uy®¼N6Ë!œ¥ôVEÉ6ÕES¨
+¥Ù‹ Ò[–±ãoÎ`¯½þÈÍÛ+N´M´•[†nµá–¡»[v£»c$]ì¹Õ´|A7ÐÿÛ¹âD0É/àD¸#ó,æ“-ïZ½y£·)HX!£¡9É ·Û,ÜÄûqY ^üùÑ'6äï'¨o¬=Ök\íûÔ='”ð‡¥k(T?ÛeŠtÉιDŸÙ4vqæ&ÎÇïmÕV=*J	«dô8ÙK*˧†$ZÒMO´tx˜[vŸ7ÿsKxGíÇàÝ9&§ÌPÑ+«6Ø7¸7U÷¤¾ãz¡jØO°:Î%|a.‚Â!:ˆB™:ÂIû|QžcxÅsáP(-QDÞuJ$¡º¬õõ{Ò¤§K²‡uÎ)SOÃNpÃn*^:·©TkRçžäŠÆKÒÑ9ûNÌ9ºUË_ÆîÁØ[ô}Ńkn8õ» tÌ”#->†ÖK¬—×O0hÓ©»ì²tCcÃ$AZ!Û¹O{ïôþSï×-\´œ
+U?qYGÇ}AŸÜõÜëÅsڍm?þû3ý§w?ž®
+ÌUóf‰Ëöj»¨ýã-í2]‹í)яâqÈ'ÃÏh‡¦ÅBûö7á½-ÌÏø+kt$½€eFR3VUà)ÿô¤~¢ôUÇ‚nýwá†grƒÒÅ:b‡c€‘z=Iò›ÔºVr±øæfÁî€Öé`,„‚ÕJ
+UÛ›`Só4Ôd'°XèJH
+	”ÌÕMEXéhŒ`ðÍÍ‚UêE©ƒ€ç„4žhÊå°hÕÉd0°)±–«S¼t³ƒŒ ü Ÿ¾®#Û 
+”ñá¡ú†¬¢JSt:èOÕf˜HQe…)Š.æ½Ê›Ê°rF9¯\W,
+¤êh±Ç*•Ê˜Òbàs­OвÚè†é€¢VHãQöˆ¯ ¨QZe W)#wâ]*ZPz© ‘Â0Vz9ã§8;†iÿtå¬Ë‡Žî+£#WRºIÀ¸žôúZq¬l<·LƒçkLÃ]çâפ0äóÏâ[ßՁxë<¨ñŽzszÏqpâpÄŸ3~7I VÙ:1µÿÍÜÿ#ŒòçΈǖG‚ÙÙ‚wµñ™JŽ¿Òå»îÁœA‡äÍc}O¢l—mì²»“HH¾Ž‚S:\D¥³5–®ˆŠÄ5ع¬Aç
+	R,—î¹ùû•5rÜ`:ßhK»j'ɧÉú®lùãW³Ïú0 d;žõ(üÑ1ÈS¹
+}¶U<Ûà?|Wl׿wçØ÷îlç|ïr¶Ï>Ûgçì³ÛIì$¸¸ÉM¢PÒ¨
+
+t@V:
+”®‚0M)$-´
+CýÞJ™úÔ®TY		¶Ðnh['´µˆýÁ&M uÒ¤6j§¡nS“°÷Η4PTYºï»ó³ÎzŸÏ÷ûù|¢µ1z…ÿY4bc€†ŒJCˆ¤Š ˆ…ÛÇ	ª/F 'Aȉ>š,Œoc"1	9™>‘d׀ðbÔ!Fûx¶…”“Åh&S%²6ýFË |~ /ÃÏðNÌhbƒD)¢úaÔw4Oܱ鳀"ŠaÖASä; )¹ñEöà‹ßÛg©		5ÉÝh‘jQÚµžc†Z-U®þ¨.Ñ	c¡ÍR»¶[5aÝšSš†d}û¦t}ç±xzž2Íö&<íýÒZôöe³ú͹cSMÿã§/x—‡ê´Ä'…PÃÍ›Ñ\Aÿ8lÓ-A‰ú™æõ%¥Y¨wLý±/L Œýœb
+{@³QÀ Åòprj¿ñ
+u’¹R`iµ
+ºÚx³PbY˜ˆÀij±<ÀÐÖH%(G†M¨×(C0bcœËßÁ<€Ö0b1iÈúÙ´5RÎ}‰£ÕhlÖšORÇñ鲘2sàªôÕ³8D`{V&'}å¯9Sá}rœdXÕ›>©=8qíŸÇ}å:{˜ÂǵúŠ^ízOáÏ67Ö¡Ù<Qd^ŸBÞîPFŠ&>´uù87f{ïTÄôÇ¡¯²gxy{)¼DÁ𢚔)¯oLf€®×§C¦þ|_}@®­µFväˆâüîÚg #‘=æ6ò‹†Ô*Þ’\LÝ&.©ÛH÷Ó¯øåh{àD€Ù /ºU^­Çi/­cÙàh¨raG>
+ ËKZª£H QB€B¢^_Ÿ	aêÒ<Ïq­†Y	AeÕÉ( ëLI2ÛÂØ7;Li‹4(½ 9¤	&7
+©gë‰&ð2Ù “
+2éDÆÅ»£é\ɪj½UÍ ÒÒ!ß%ÈÃòˆ\#ïÎ@ä—ýHÎ̃(Éœ€É²Ÿ¿5óÑüQßaú¹ÏÚÞZ|ŏõJòn$ æiÞ¸a8ƒd2ÕFß^þ{¸´ÄíáÁ	÷"­ài3ïÕÏÜú¯PÓ}ÜÌ=ð´¤ÖOjÕ¾¦ë‹KŒò@«N`µæï¶/^r<:5zqväª
+»™‘JŽÑq*úî¶ÿbŒÃ¸ßJfÐIËômHÿ±öœ~Äu46îÓ8'2ä¿…];HkµÅ5ß4vê/Ó¯kãžÓڝ—ãBÙ¯ÚUƒãTÃàE7'å«”Çjð|Döc¬ý«F“yŠ-F£>Š},§&ä´á—…‰VàÍyâÎý4:!Ê@ž°Z§–j‹>1Ï•[=*W{T¶{T¶Å\Æžœ<Ëòœ†ÏyóÙ,°´­9væ¾²X¾i®ª^]^L——8q2婾^ 5c“àššÃÎöŽÉ"±Š²˜´|ჽ3S?[óƒï$[×sÓÿà7õ4^6ÊkÛwÛ#£>¾{ÑÚš®±'7üº?>spo&–qêúÒ#Œc!‘¯™~C]}bíƒÛ}FíCŒÚKµ$Õ¾gîbe˜ªdn§º2ÙÕÔ&j'µ#ÚŸû©óPî—™Sþ³™³yßQç	íËá}9†I559ÜÈ£ºy§òŠ„Ýx2®«É&‡#‚$	!I‹Ç#ðÐ@ºWÒy (…NºÝ<O±q
+PŽÔlHHh ¨EÈÁçJ@8R­(€+ðo)‚bÓET¢Ñ"rˆl¥C–XaȐYlG¶”!?ô@Y&¬ŒÛZ’· û-ÖWø-ƒ fÜШùÆ!Þ;_ôlì{?Ï’”0`WœÍ±|{ûÚž~†d3»¥±µJU'ò
+öÊÕVe‰ápŠ*)˜žK]ÝÛpÐ} Nÿ›ïTÒ(–˜ܱØ
+NÿíÜû#{^i6ûý®]±úG@˜YßÝ–	ˆ¬®38—v0Å»syè¯îÛsIùîW:uú¯ðìÁÍÛYŒå½vÅqÎhÁ
+󩧞(Ðk<k¼kj7y6{7×nvy¼µ;…ÁÜ`þ°çÞõ‚Ae<¥ÜòÜm]îqv§wk~ûtæéÜsîCÞCÂOŠ¯Ro¸G¼#µÇ„#ù×
+§À÷ÛÞ³Âh~¼p5‘óËønwçÞÜò‚Ó)ù¥N÷íÞNaoÞY›óä.C`"&g¬«K|ªiuýÈSUÆ}®b©DA!+rÇbt#Þ:–ŠÇ†â8ùEµË­U'<)£8!j†â©RAëÐ5FSnÍÍ|‹xçÅ…Vd{žºLÑ1vx#eú[¨Ó •ª€Ö7wÙ‰±‹¸0y5K”œƾï%T ܘüD˜$/|˜.î­ —ê}~T$]ošJ’OKÉʆäCòaÑŽ•q²"$À!oÃà{·Ä]#öEç¿Î_<º 9z÷-N¯OÍ„“ãŽöl|²dW>r¾¿²qkJY¨EÁ–6î;öâC‹ô|¸®iÙªƒàq?ÍDšfÚ+zÿ¡ÇºÌ\yñÞ
+ïm’³µÝÿaŠªiÆ“BY3ÁÞóàQ=æH‘T$ò>U¬a†èؐFÀ	À[Kq”†O•÷•5j¤¶³cXS	žâJHR”s¡	pØ”(Z{G<‰¬7BAT6JÅŽvVM¤«5³ªÉ”Ò€ò¼2¢0Ê9‡Š_‰sN1³Nº
+E5Ð)Ä?“÷—Ûé’zç3…(¿=Û'³¶ŸÍvT¦*Ât¥R™æÙÇ„ÏzA %«Ëx± {`H§Ë׋3 ’¯Y¨a”À‚·ˆû™˜,¬ÈI§+ÎÍI”‹xxæjÑ\–wOç•;3j!‚˶
+¯ë5]3?¿«}©žZý«t²I׃¾Ußg~SÙúÆå/Ø[íù?ßÕÅu…}ÌìÌzfŸž}ïx×û²wmÖ˜Ýá‘”`›åÑ1´©K)Ň‚B["PBÍ«PA-hKpPûƒ¦Ú%€
+ùÔªQµJ•E²ˆd¥ª j¶{fv¶©Úõzνwî¾î÷ï|péÀW‘Ò0}&½ËÁxä²ý
+{ÍE­6­Rv°û#“a²%çüeiM%Lƒýõ[e?JwÈÈpÚb	$Ób2™†Ã§(:¢ßçÙ&¸á˜ÅÁшətvªé¤È‡85]§!ÔÞ²5V(圚s…“ä¡£ºN.ƒŒQÎÜ[LØ©#¦ÒFÔœùžB0‰“/vZ’n§ÞÛZ'+·ÿËJ5ĐIú Ài¸(,è’;õÅ5}Ôÿ”Z£ÿ2à1sx_s#õÊD³Ü®L1G@Šsê›Àvbmm_Q>3Û/ŸüÚéíÏF^L/²á7lý‹;”_zé“‹¿ýÌÆ(ßo-í0õÇyÙðLp¯ªuïþyßØG»ð™ŸfCYS,&÷m±<¼ÿêGãó·oÅ¿ÎÆÚhÐYŒfïšîyö”¦!²ZFdütˆ–'œó„Ò|o)X
+-åû…=Â÷ZŽ
+ǤWÅÓÒ
+‰ûº2$N¿®d0‚#F?.è±&©ÏoL/ezŒ¨µ'‹‡U¶ø‚~ÙÇ`³Ìxìuð¼Q·yaç#¡ 
+ë³»4'BAŸ×k±0DY²êÄ¡ÿRèM²?`Ѥ3B—I£ç@^Hþ½ˆBÞ°¥N®¼øÏ\=…*úéƒÉ!4ç„ScÔ¬ðÿƒÐÈTGúõkp,u#>ïV×éõÔÔ0Èz{I͆‚Úę֗0î~žY¼4j%ܶ5[¬¶„0èrd*v|Êš—»GvMS
+õÍÁ@º¼p¸ÍõÇ"þ°3£¸ý*‹Qß–³þÙøÙ»æ zyüM Û1KÙ¬Àµ8D:C³ú¹ƒp®Ææ(èsM€fq.lw8
+.,[Qïµ)[±Eƒ
+¢~aÅtĬiSÆ”ÏÆ)#å«¡j¸š¨¦ªé
+ʆônî»áC-‡Ä3-gÄ¥j)¡’®*Õ YITR•v²®Ä*q²¢T‚•™Igr„»5ËeÒ!*"!r-²È3˜±[d†—°äwÉR"­Ê	3¦e³#žqìD2i1“Iû@6'fJ6DZl$Ÿóùœe
+ò°ðÁÎæ8«PÒ6”ˆÇ%hàÆLä³dÉq¿’¦³°‰Dur°–9­jùlÞ6à…ÃÛñ&~ѐtƒ:S¦&w'<=½MþèPU=©=¼é6°ÉÓ0sƒ¹•&¯†þ›XCÿšRѐýFu!EMR=—Á¨çMÀÂç+Ž¬ci§yÑ 
+?¶mêãú`Ë¢†ˆÙ6†<!+	oúú“Ñ\ƒ[‹«æ‡§×ĶM¯Q¨-#=½Юïøt”ô‹Ü¼^³ÞÙòó…™U3G‰#ß´¦ÀâSíåèO}Hù}Þåfȃàí‹ø}Íc	2¡"~¿’ǧü'’§2¿èüUÊ–Ók…Û.VιÎå‰®ä² a{‹v.¬8ý^	wÕ½ÑM.Èa»S»æ-^u½¿'1AQ¼hµ³®D¶#sQy©½SŽ×Éq­%¢á02«ˆ¢).JR<[ŸýàRÀYÉÖÉŒÆú|¼MêRãϲßÀ‹EH‚ïOþ:þº¤Á>Ig‰ÄK9‰ü!0Œ}muQºAŒ£vrr"Y—´BAÖ÷ºã‰‚¼wuqBþD&äŽ.É-uY;Þn¸¦“74CÑ
+µ¢¿è”~#zšs)ÒˆŽæ:|¹QäŒxÑ]šëÖ
+ܐZ< ðéT£0Ì^j®$¥@u×7‰…8A¡OÌßÓï3P¼øÛ·u²!дtmB}’«û.ô¬|fí[¨8û*À¿:{%fï̓H[
+aÒl4
+º©èvž
+V7pÎ9»ÁDºÜÝæ0Ò(r†ò‘·Þv‘VÆÎJ‰…á'Ž—S)—ôò¶jÿS[Þ:±cÓ‚•Rôm馉%í#{Ï/"N?³žµðv/¯÷lIµåWô_’ß½euË—µe/´ö>=S=ûÇ»O÷ëÜëÒ¹g:ŠÜ(ŠM¿Þ+6[V¢5¦k­T¼ÙxéQÓ¼¾‚`Â8õxû	îcÕ•sxXòa!ÁªGa9‘e¹P4P
+%(3;é‹ÚllLåX>P'÷i3à}Ìü{3¡˜±ù9Ïu ‘G”ÌJ[S‹FˆAÿx¶!1¾ÂMö]ö¯,ÉÖñü+1ÖÍƬuB¹Ø$Ìœ{œœš
+¸?ïÔT¥/ÓÀ;
+D¥‡S©Çø!àÙkôsxT‡ %»t$$‘ "án˜Â°¹HêæÞÙ0öf¢úÎWŽ-ßv¤>óñØÉ	œ‹ðî´”jî_{ãðúòP-n::=0¼ìøž³3·j£”{·äcæøgïÞ‡;N?»y|?Ô ^8û­÷*fµ'¡Ká*ª~É vœJdÔ2*ãS9QV‡Cç‰sÑ+Ê¥(¯ ᣼&_BQéýqüÄ¡ÄÏB¤Ë„u“VïVsò±8¡¾¡* Äz…:¦.ËQ«9ŠqÉÏW ~ …¥X‚´¡;âóÞ eÙ
+[e7²”ƒUX‚õ%Ã:vnUè*½‘ÞNS{é×èôMú]ÚD{ÛRƒ
+ÁM
+Ü_ÎÏèqjjN?•0x‰¿3Ô0£zÆ„ c21×ÀÜC=SÖéí`k&‡3jàÐL2Ñ@bÎvu“þÍïí::q‡l·¶)mŽ¬µE.>wsɪoœÜðç=;_û1V¯®_Tn«–à?ù®ÒضÍ3̏”M‰ÔA‰”(™6uÔmY”#É–ÙNlËÊå8©=»õšûX'ÝÏiÚ­[SXº%ue]Š.k»£é:瘺£2¯@×°ÃV )0o]WùÑ @±YÝ÷QRšìÇ~||I‰$>éyŸãq´ÕÈ->ráÂÞ•=°ÿ!E5Ûaÿ'°<¸¡\$EÀy¦"
+…“‚‹V2}i
+h{ZNÓJª^¦ä´@uШôM꺽hÝl}À:Ñ£ùô1O.‘GÄ‘üDüŒü4ø6wÁúvT©k]WÓWdãv øPz;¼•B÷«õ+~¹_ñúàI§ÌqV¯/`S€¢õ@|¨Bñd¢âåz²É€Ëx9‚EÜ#°ádËz|.2[ýä¯Ëb6‹”›¶Û4Û
+°ëˆ+³4ê*÷™º˜¦)4WeàÎ.¦©*P(b5±„±‹³
+g<{À(Àà&¥Ë—tÔ|Uý– G˳}TêÅ{Y	¥wnuí#4D˜Û÷ˆo±v7=Q«Xø"–6I
+[Gå©V%jCÍç ÓC
+ŽÇZ#dcxû¿˪™²IjDgL}Ól¯¿Ó¬3X<[<ÃçOT~óĶòØÜkÏ,ìËl
+<H“z“ÕÍËÂhötýV)¾Òóì¿wÏŠ”Å`Ÿµî>•ŒfgO½»#æ¡%°íàD´Lûm¡«ÑLú׎+›ê³¯•7ƒHwÈý9Èý̏ՕŒ‰¡ývÆî×`ZF‹[Ƶ[uxHö¯ÓåÅarD;¢¦>£ÝÉLøÏk¾«yž]Ö\÷3Aô·÷d§Ó\Ôz``Õê´º6Óê¬.lQP´TÁ t		Ú볐mAšvåLV§·v±Ñš7BH†¶
+|ѳF`t"¿±·¸òñê&ˆb¥†¸š%›˜‰Ôš(afDë$P;U¯ÖAa[Ñ!1SEm³’¨êôt½kÑQèg[|æÿ‡öd{B•iHîmòôÔð׳Öþ|î©*°?¸·´óGWžšYX»÷þ̧ܓç÷t}PýüXwyG~|lW¿Ôa–z¿5NÿNlõgëˆ7 ×@ðUŒ€Û™Š	ô²‘b»Â¯çKYLcRBRcäêpxÓ˜CòCŠ
+.;\F&=„¾Žd·'tø@Iãõiœø@°Ó“3ÈÁÅ,	=Ký¾¼
+|¿·
+)¬Ï‡µ>É9
+:™L.۝¬âõe¾ÛPÅ	…I²
+¤ÜåA'ï¤Ro7t{f­¶V»C™$ÍZ¤¯¸¶Ê¬¶r@IBrfeŸr¦Y1öÝ!J3Cià†ûÀQTà‰ÆÓ'q¥+z<±©¢†¶•–&šûH/“*‚™L˜FŒÉ@pzYooã¤iš
+[üBße9wddôÀüôt_ØÙãüV†Ô±‘FÝÆþ—_6Ž—z£ùÌè¥á±é¸ÏìÐÅÔ€,s¥z¹~óâ͉õ>GÈ•ðØl¬‘Ôµ‘™C{ÂàÏ—øõ“'K““•˜7és0	­‘¤Bò\þ_÷úMò+õcc€R²çž³üý‘íÒÀ卯X~%þÜye€²d–ç™ùò…òKåv³Éä,Œr…¨É\ÕÜö@vQ[%z–£dÊyÅ™x½Ç%‡|v“ÅÌ
+ã	6ÌÜz/XÒws¿$RX'–„9WCt+:IŸó–Öç:OL‚j–%Ô;¦@(ÍHà^­¼9fG:9‡T²Æ tú>³C(BT]¢òïv
+¢_ƒÜËÂù©‰~wRåÞµ²Ç`+šÑZÕÄD8X› BH›äR}”çm<‚
+ᆀƒHª%Є›'Uö©-à ½…=™šH׋ìѹß”9ßȍçÒ=óïýÔ[÷e#ÂéøÖÇŽ|ùã?”gc•Éá¹ó÷È»Cu÷Öñ¾/<ùfùpž(ïÏ$¾ºoíŠ2fÎmŽÒòж'*ùÝrdFd7ú"¡©Œõìγïl™þÛBåÁÜÞ‹k_ð?´®)|¶Ü`ÓÃ%A}	r:6+Ÿ³l'wH—$â@ûÝ!ñpp^7/.‚ÚqìP —‘·Ë,\ àáH4Š±\f(>’“™
+ðÆ@ÃH½Þ)¸8ApaQ,uÆâ\,÷vkÈX”²ÓBoÈ%Äc·ÈBŸ¼¢'ý®*ð-ëý2È(N,gþC©†UT—ù¬Z:eõSèëj
+§ÕªXrò­ˆ9z>ƽTêñå[Ò‹ÔwB[BWš
+P샖ÙÖ°LØö¬ØdÛ²Ì3Œñá8±¨B ͲüJ
+f®Ì\?qyÖÁV€-£è€]ŸÃ3À;×Y®Ày0	€¥ÉwâSO5â
+OeªÜh#’ô‚^õ’”ñÉú{×ßšI*_âÍ´Áœ]çôÌïôøÞã6×圴?”§Áˆ7â´ø­mgÿ#ËÕRoéþú̘Öh1D7±ò#Ý	ô$øF9ÂÙmácη7Œÿ^sòTG¨"÷¼ï“âñ6Fcð)AþHN¶}1'["ŠEŽ(!=©/°ñҐ{*JJ=v´½J<£tèɐޤ—LNÑ͉¢[ ÅpÈ-2ü¢
+zÕ¤;Jè«`ã21kªïO¥ÃQd–˧Å&x¨*:ˆ¦¨8]+–µ¥“â“".:Â"/†©ß3Ç6dX¡Eä±¢b€ô2›A­Í)u²²º¶ú¦‰¶Šõ]Ñû¨Æ´ÀEóÊŒúÊk¼¢çŠ¾,ÑC§×LY^1e›J…ü.mfﳍî *ƒß…syIÊçz_çXƒÉšÍy§RÚñ—S°
+µÙra)Ÿ—¹úñµF†cbãüþr·ß¿üúH§­“FÕ¿W߀Ú¬£$öÞuKJ11éúÉBP­ÿå»úc›¸îø{>;—ØwûîìóÙ‰}¾‹mì8¾ÿ(¹@1&MHB¢$¸)ÛkKùµØD© kø¡neÐi-ƒŠÒª@`ƒÂL`RÑ6þZ¥M•¶¶?²jU±IˆjÒ0{wç„t°Yy÷üÞ½sìïÏµ™T&ÉÉÈ„8=š²xd˜êÇ¥d*µ¬ $‘"ý‘DDW%¶7FÐJbÄŽr¥;œå‡T±Ì„¦‰
+»Ü/B$–O^}³LÎSÁÕ&~Ñá"­-f¿wOƒØòœnZjáŽĪóGµðZ¸õ²$ú”ö-Ð ÐFzq˜aM€¢.âÚä\ºÎyØ<
+üSK>ß‚F®z¿çŸ‡;»ZÍ.š§LA¬Ýžøk0$$oqê‡Ð¨îø÷¾ü1'ù“L#ãal¸ÅlÞôSl%Ü"†+Ò9À0ñ„‰mp»:J„ج¢’Eu*ŠjW¬6+á¶ñÄ 8à8cÇ;¸Ne%7™½^ô$0ô!fÈ°¬á{8ê€Ð•¢	øü¤ƒJ‘„Ù–"Úª±
+lRR:ÕÖX·ÛÙpX„fÌšÎI;¢¬Ã…Q‘5Qˆ¼'²(m’_Ž±²#‰:Y²úŽy¢![L¶“ÅwÐ_×®ºgÃvVüK¢:$bðú¥ôdR½ÙÀR}‰Dš\kGQ­9Eæ32§Ôt5ôœ½ÿÙ=„Ÿ÷çž´†’:ûîÏ"ü,Ì㧁›8
+:]€TWÝ –~`Ÿƒ¨õ«ý6^o/Ô~ ]¿¯É-Ê~ë–^ zŸCØ¡Q„Ž ^§¤K£Ù‡¶$*b8†@s¾éLOVg·]_JB\°Á+ÖÒsm#®@;ð.“žÛ‘já¤òÔ¦·áš&KDàÒ8å
+?[Ó
+v«(š£b©yMï¾O%É!ñS£Á<<þbõ„yçžq¬z]ô#ÔÜ€ê¢Êêê ià‡~Õ£ƒá¦;þqfkÀ–²©¶›ÙÖÜã—šRÍ}(uhÆü´“¥ig£öINÚþðà³Öx}dX%°
+hx“þ„6јW­¾š£}Ö×ÔXMÓ8º¥QÞ8ª“Öa4ÍwÒªÄê«Ë—±ËN´D»ªvPµ{û|í)ŠC»¤qúŠ;K«®yå:¯_çfï~YþoEéžOiYÑrnÕqÙ¦ý«v?!dkr	>,áBÞ6TÏò… ?ë›È+b[ 6E‰K"c8>Æ6²yÄÿª"fBá°³Ûn?A™üÝò<R§C¦u?˜viŽ5L“ä(»~i9WÎ?UX7øóm×æø.b—kwü¥Âv(~¨0µâöõVû‰ïÃsä;,½˜½˜»˜¿P8Û}ºçÊÒ«¹«½‘ï´?Ó±¹c݃ƒØTûkÝ?éÁ6fw·ïÌíéþnïél#Ùèªäº-Ö`h¨ZÒÚyXL
+õ2‡ÃbiÍAPÊ´:]­8>ô€³<ï—S¨SÖ\Ο_ÆæóË@/êõKl±XmÅÞ^dVyî²|©hj*‰g#©ŠV |DV)åiù/²I®˜2W·äàÅÌiÖÇ™W%¯z›2[ò0?`…ÖȲéü¼	zM؇¥éÁÛECNé“ è“_Ÿ.£‡ô%o,[âúR咙̖❢©ÈË\ž+ròðC…µˆ—5”˜»{w®lG
+|®¼í/R\µÒßu.¨.K
+"ɯقió9ˆ$˜ÃPbèo1a—õ—Qoi® DdW£¹]ûÙF]­gÍÆŒÍ!câj-b×ú(CL·`†\ÃéŽE{D¹u,vgÂ!Ÿ‡	Ì<$EáWFŸ˜WréåܪÓo¬í_’§Ÿ7ÔY­|6ä÷Ž‹BRžð›0ÑØ’<øRÏ›çš\ö`¤ð«ÿԏ¯¹qÉOæ°©ê'¾·4 ¦[û«°uOwçò\WuÏ^Š²âL¼×)N§„ԏ`ׂAÄGÅöþíÍ/Måo½wôØÙQýÔôÚ0Óà­s¢ˆÛ¦Qç´Ã×
+효iWõíšx­Oº€×äMš×âƒ
+ƒ¾µ]pObÊ÷^ô]iÆ4#ÚÖÃõÒ¯!6Þ0îèVa³Ï0
+u#-k•gEÔ7_7
+1Ý'$Ÿ  ‡ qR€È˜¾È0Ä@{ÌO°ñx"›7‰øcÌ‚–ÏõŠ·b:vI¹Ðìaq]\/ð¸qSŸrú¤Q\¼fâÆuŒD&ãNÆ5ûÿö!Ö77;{7ö¨ƒxŒ@Å»
+ÖJ×þ5ñL*>͸"ÞÃãÑ—.Tª³[®ÿv}º«y·ÓÞ@8”Ny(·$ípy˜¦èêScIúøÕ€à!|b*§,ä~¾\)|«:Q´SÙ2ÂÈFbj'|£ÔÂòîÄïßY·ñŒiÛVÎ4×…‘[( š¹Œj†<˜V»êM
+X{—¹à>å½D_r}ä®›pñ˜ÃîcÌ	÷ogrü*¦ÈÖÐÃn%G؆c6ÛØ
+¶O¥ñ—KCüåÊëøIÜ„óJÛŽA€Šîu…Ô4>€ RÁ*8,àcoìc7ÊÐ=#C}ŸÉêûtÎi£]°@¡e‘¤ÓâG‡Qhq-d&=¶4vùduöÕ©é wÿþsïMôýêé⑯LÇ«>ñÐQ(¿°²üÍêÄ'“›ài$§øª«±ß¡( 
+‡ÔÒ:x„8AL7HKÖY+©•ÎÞ–uu©Ô.ÏyéZý
+ùZËmµ"4 F(,2!`·¦)
+¸<\Êå¤Ø”SèñVàû*%…RBä7YÁŽ¨!­=$@ò{¼¬ÇãÃVzªÑ=m’×cÏ`û Ž
+z‰‚ku-STŸTg@ÁU¿ÒCÀ_ÀOá7q>ƒå‘"‰}è„ŠûeZùÛÕÛÄ}Çïwç·ûì³}w>Û÷;;>;vüHlÇqâÄ„Gž<eé¡´ƒXØVT4(+ÙZЪŒ²Â`[Ûi<VcÔ	¦Q&ZMcZÿ©6M•–µeRF5êÆâì{wæ%ÕÖï~¾‡ÎÒ÷óý~~%䮨¿w N„`þ–	|ÎÏús¶)ªýÌ5˯Ŏϸ=3«wmò¦îƁá+3†­•«ÃPú®¯ŸW`enÕûŸ ÄbÚørf©ØúÐð€®‹ÒNLfôÞÂÍ'‡‡wUô¯–lÍX«¶‘y
+³¬ˆƒù-]ÏåÇ6®˜×Ó<öçfjÿ'{6¼2þ×jɨVûYŸèŠF
+m»©±!2Çf™Þöm“ï?½lÕoÚD
+Ðþ ЖˆZ¤ØL‚)ЙêMbj™FÀMY„<ù<:áú…ûtømùÍ؉ÔÉôù˜}R>’>)PЋò÷ÓÔ¾WxQ¥TGf¢R¶T¦5F"PK´¶gmVdÉZ]8šÄ.:,qé—¦¨I…!¢
+Á 
+?B"-yhZJNQi¥Îk·Yt6.Ñ4ñ.pž„^&â08ÌeúMÒ{†
+´"ÃÃyZ§:uS°®ùXq*ÚØVN
+ÜX–f鬭å"ú„¸ì ÕûÜ¼=sßÖàu<„—žVVUÚUªáü(¾:¶ãºj'‰šduP5Xï³›.¸lQP¢F~nêƒêEë[lUɶž“›C{·-_ô̆K¯?¿nñV\<XÚQý÷‚lçÀ·ŽRûïýpÐÇJ–ºhÔbuvoF3¿,þlôêß4´°ÿë?UVT×\êìÞˆ¨^^†!(¾Ä”y$h k9ZE­µ®µ­h<AržàÞò[_òOúç’Ô~ÃaED,”þöô`R$‘”©GõSè˜öDM&dŽ#xH±äÁX¢-.a:kU¬Ë¬”õ© øg¯c”4[ÂJ¾3•¦V`…a‰.‚y#×ñ
+|ÏahßË瓘mÑÒÀíÚø%“Ó³ÓšK(I:<pY³RÊÑwUôš³ªæ ÂL”z`uT bò[óPe´KÑðÁw,ÏIr˜K±’4[ì.§¿0ôT"”0áñÓ#yÛ¨åmU?JnïŽEç—S!‘1Y,eý‘ùCÛØ]äæ±´»Ž¶Bõçf I}
+ÕÏ”†„Ø°@W,vƒ“³{í1cÜq¦¨ª ¥hÐ2(¶ô5"k664šù)t^É{¯q¬=ØಓÄ5¤¸í•e¡ëŽöøcü9¦vãP¿+Ø€[ÚåIÿÓd?­Ÿ…%…óǹ+É}»ùêFÏÀ ÐwÔο
+r{ddønzd¥RžžÑ#[©ÍLEd•…´Ž†j¡*ar@[-jáÒd!ÕeÕó"ùigÔøì@WO°ù;ý§÷.Y+¹Sl´3jÚötÿ08—{e+ö;6º’Aè?ìÛѝ•Ê­¯TžýI¸.º_ßµª+.¸©ðÔ>#Ë@¯†n0¼H„é"a7îWq–Þ4Þ"ï9¨UÂqQ
+Ávâ«ʉƒ˜Ü
+D†‡Œf3„äCœ‘7 hÏÔkÄq™;X3ÑÇ	ó>1Îûh²ÇI‰9G!jŽKfunŸÒZÊ_ñÝð‘>-¹ŠV(‹øXrMª¶ÝéS“ªO	¸à <¤…ÄÙ»@%jGOë\£ÒŒQ·TPóY-9 at +³z&(•´.6–ˈ¾®ç•cT•3G¾Ô;ET¶!ÙÁ£®#§´o䆤5+ÚJMmøç‡l[~ð¤áÅêç•Ù³£—;âÙÈï+ÊÅdëVrA,´ý5•-TtúµŒ){-í|;é.4/n^YÞä{Á»ÃwÊûñ_¯uUzeÇ&+Õç]I<é¥Z‰²—”â%ò¤•äJ|i|4~Ç{×w§döt”ËŒÕ&ÇÚJí>Ö˜ó–9&t¦s¹šNšË„‰ (‘){¦Ì9ìÓ	n¸Ìж	ë:J|Bù4‰Q8>Ï(Þ‚È,eF™Ì1ÆÈ@:TêrQAI£tOºÝ
+«Û9x\Û=^}oÊk»ÂGâù¬ ÇJà;­Ë°ð§¶í¿Ó0|,ò”ç%â®h/€ÉS÷3¾’瀚g´'!>0ͪ„<‚,dÁššÜ XT5:GéÒ¡¶
+çåì%o-íuÀÊÂ
+Áª%8ó¨ÿ(î€ùãîÙdŽµ7Ù]d±H]ýe¬Þîj
+-*æbMõt߉¬O+M«±ËæMôŠ}+•Öh&¾6Æ{¥Mg¾1ÏGÏžz)âv‰cìι)nëý¢zóC¥¹ï
+TØ*Ô¹Bë|ß,&3ÑÖïU³7°óÿþûúÕNj‚Nš€N’‰{ʼźWê`9
+ÃäW¨_>’Ž@Iµ…‘ÅjCuõ3g6#Ü <çEfÛEwÆ]qSnНΧzf•ÚÎ&
+Ã	rá7Ç‘˜S¸=ÜA‘óÇÅ	LôÈêý:O¡"/•Gå˲A~—Š¨CL`µÒy¬¿G(>ÚZ/_†÷àƒø8P)ÎbSxŠœ‹µüS[k‰ðizf°v> ê£Z†òí Í  W7p“a¢@ðm-j_ G£JMˆT鉐™6!Id—ű“Ûë‘êí#¹HB¡ý¯þØó~”ëçÛù4Õ×Õ;0þÆàÿ&¤sb!üÝ	ܲ0—ËôÿeŠýùÂÑœª™ûÌØUO¢aÅÎyy´x­™Pso¬®¾kµ(ñ5ÿºÄÇ~c›ʾ%¨°&±EŸK¾ûUÒîN©žmÏ«;øí”^&mµí\H¿©dÙ@ÞŸ¸ŽG„'¢×’²†ßžçì$e0šŒ.^Hú¢ýÿìW[lUþfÎ^¦Ý¶Ûée‡½Ðݶ[Ú½´»C»;ÛëÎ
+E¶­´Ô
+‚¬X ÊÅ@Ѩ„(&*1A¢hBÄ ÑÄH-º!1ú $*ñÁ}0QT0jj¢»øÏ̶xGú´gûÍùÏÙ3gûýßùÏùOÄ–´1©x¼Ç.rb†)jwÎ9>o+4Žs®ÿ Zè÷Ôõû×ùy†E&‚ç<Ú¯Ñ6ªÕ¡˜V©ö¦x‹G­ŽE=ªgÀÃ<'IÕ0K7$Ê)D9ÛÌÌ—¥„™µ$w´­&õ-Öxæ;;/¢_YsÑ>é¦`“È]b+-±Nˆ­®»~«(wÑ¡È•ëJÎ{º–VO[2§É©«s”;$Ž­î~nSg¡Iq4ù­öª•7}¤Ô¥²ëÃV¿½ÖÙ<¿‘óv”YLÜa¶w¦ìô£‡XP[Wé
+u6·4®¸ÿhöó?9ÓÇ=ûÝFŸdñ/z*{ìžþ˜–Y\Ÿ]Âî%¥\¹zÝa™“çµÅ
+œ.gÀÙé<ÆOò']“
+™…§Ø)Ó›Î7]Åi÷*÷¨›™äh$bžªrÉ.э45†<n¡Z6[¬‚¶"A2ÅƧ*`õ¿ª¯²Wg¸WUEU[Y‹]ôŠ¼ØP´SÒBeŸtD⤻¤ç%æ“¢ÔǤt["ýŠÂ%•~eÂ”«U‹Mçd픵SPÖ”(ØöÉGäi™
+ÈwɼOŽÊªÌd-ÔZgCm­!äZí¸¤†žúErfJ‹4ýŒ4Њ2í©Ÿ”¦×:Œ¬…ÛÎ9Rù\Ð]RÊŠ;}«4É8Bã
+Ó’k=×[ã*wlW–Ë6KI{}ÔîÚœ=ýþ¡ý-ÞHjAE±P.˜­»’¾¾)Q’¸¢2^Àö¶ÈV,}¬ïž_©h+)o®,L«ýoe×|ÿ쪈·^-0GsaMÏ
+]ü/¶Ôѽ‹gÇM·›o†A\£KA8üÓÁTÉ´ƒIN}©ßµÎµÍÅ\)‘?A—Ÿ1ÔsiÒ]…‰Ú6j‹ÜÝñÜ‡Z6w~æìaí%qß|™KhUVVè$õ´M#MLÍ–ßöòÏõÅ]fÖh±ví]ÁMÜÇ#	+k4SG°}×AsŸ·«*TQl‹b0™Šµïj®U¼‰tM¥]h)ËÂÉd|Å“‹5f;‰ÙæÍÄ,€«Õ) G`Úï˜.IùRå³ ‘åÒÈ•1¢”&Šc¨æÃòéãwꬴ„iŠþ$V³¼Œð[@‘6'+E`]ü×½f¦öÆݾÑ"t´F³ÞYZP{vš½WÕU Z-EbY +ëص°6Q§,­©Ðh•–…º’Êë»1W6ý
+|FrÝò3œ%çx.íLæ/ ë€ð4Ppæ—(¼ñ÷Q”JN°¿ˆ}Ê€
+šSÚ8w_‚[0à™2Põ„½_CðÓœZ€ú¯àð éV BõÂí@ó§@ì@9	´>´o]Ô¯’=t ,!_,¥q=@_¸jXF\—Á#Àи=yüWXé'\È#<òÈ#<òÈ#<þ/€§ß++À4‹s,¸la¹ÚVDw¿R‘Þ¯tHóœÔ3_ï¯õcA=ÁP˜îfÑŒX\I´¶ÍM°¸{É•KÓ=½}W-ëX>xõÐ5+V^»j5ÖüáO¾0yùëß+&<MO?|d™è@âhC
+‹‘F–a +qnÇŸÇ7ÿâEíCÂD¶
+*aInÔ †iÔCƨ‹Ÿüñ¾3‡ÎÊéqùB\üêOGؐ›ÁMO.ÇÌMö×”7POËs6Ü—³õÌÙ&²ßÊÙÄ9®{ »wQOhhtËÈŽe#·
+nÛ2¼5œÞ<ºþŸ}…nrY7zɁ=a£Ø‚ì WŽ»±ÚÃØJŽNcŒ¬Í4b=õ`#vRkÛÿáÿç[†ì ¾F6ÁL/¥@I‘<{h-1j“³¹}ô -@èËШ±/£×çʯeOR¡èÃA›æ´e;rêó<:ø¢P°ÎÞñ­àôÑG½™—µz¢÷Ã~4Ï< œ¢ÔÔÖƒ>óO LÃR
+endstream
+endobj
+3986 0 obj
+<< /Filter /FlateDecode /Length 40794 /Length1 65072 >> 
+stream
+H‰\U	T•ÇþîÌüï!7d‰<xlÊC "%ÂC\P0‹<T6AžKŒZã¢rÀ%zˆK’XK !5SÛ ¶j»5¢'—VcñØ
+oz!mOÒ÷ÿ;3wf¾{çÎ7  ÞX‰ŒqcârÓ³6 ­uÜ;vz‰ÃéÝ«!øW<@7§/˜oùÁve]ÌGóœù%ú ¯àñ[ÀÔ/¿xQž‘²° Ôž*˜é˜Ñôr¯2^ï)ÏPÀ]¿ïúèx‰Û¡%ó6÷;Îí {dqét‡
+Ê^
+\÷තıÐé-è×<¿œý-³%3÷¦²¯OÎÒyó™7ÿZÚƝsg:o&T1—Þ¡@'c`ŒF=ez ú7ù»ã¥[ŒY°º‹ôuéó÷ŸÃ&¼‡P<¤~8ŒFŒÂx	¨Â4átÄ":+RP‡0
+‚@*üÉÀV\Æ+˜‹[¸ŽH¤ãuåuìpƒô]þOG¹ÞÏ^žHÆ. bšˆ¶Ó„¢xçõºþˆÔ'õ%nmÇ-
+Õ
+Hcë;tA–aº¢ÇuK[‘‹ZZBwŒTªxU¡ga0öà<¥³5‹ŒKö ˜gí$jÔÍú6þ¨3y¥·PÎŒw£Qô•ÉÆû° /b,<ú+\&ê'“t„®·ro-‰(qTš™GFbÖbgãnâGò¢þ´êgèÑvºéx‹¹®¶söjñ1öS?ê'ü…?g˽‘ÉcëQÃûŠÓ”NÙÔH‡dë¦»i_}[kôA3|‡xÇË>¼ƒ‘óU šoĵ®àg`Nãó¸ÆyÿO©ã†X*–é)ºNßb.BÆc*J± oà7|ª‡ñ%þAÏDölRGŒÅÆC½‘sŽáÌ}{Oäµ+ù”vcãGÙ…,E¥	”Oëií£ËtY˜D°˜#îI—<!¯ª†¡y%?ò¾VLAŸÀRÎöFŽ·GpŒ|)œ¢9¢<ÿ‰,R;E“¸&WÊõªÅXå¾îþ›û™®€™«lçáu|ÄYøžü˜Co*¢yô-3Gü^v”¥Uö—/ÉI2[–Ë*ùyJÍUõêŠ1Òpõf‡{¶ûŒN×os.&æâ1ë'«iós2æb	V ë¸^6â}ÔsÜ_àÎãüO Ìœy÷®º•´Ž±•>¦Ct„ŽÑ
+zÒˆÄ0‘,RE¾Xɨ§ÅqGö”Óå2¹œQ-÷ÊË
+J)mÄ1ÒŒJ£ÖtÂiN3çz|Õr¿µOkvë57ÜÝÝ/»7¹¹oëÉzóC4ú2ÓÕÌr+×`
+ã#®Ä½8Š¯p±ë#dpŐ•«ÁƧ6ŒFÐHÆÏÈdL¡©åRc-§·¨ŒÞ¦µôn;¶pl5ô!íe|Fç©™¾£{ôHpÉÕ&"DŒÄ‘&‹bœ˜ÀÈ¥§˜+ð	ÕŠOÅ~qAúÈ0-rŽÜ*wÉÃòœü§ʦbÔ5Yå«2դΨKê™d؍£Ú8lêaŠ7ešŠL[LŸ˜î˜ZÌ&s†9×¼Ä|ά=ÂX­þÌqïÁÏ1¦&šgtSE3ß‹ é4VS&gÌ$&Éb¹N~mäÑCi¡+T!å,½S¦Š§²”&‹/(D‰2k ©^܏ÅmåK“Ä]ŠTè3Q*“…©mã¬òUeÆ@\D¢x“ÅY&ËôhTS³Q-ÎÀ¢®4ó­^-6ó¤S¢PT"KÅÏPÈyÿÐXÈù*Ê©<§ªqKZÅô6±jœ¤Q*T¼&Q=+n+â>́“ÞE}NßÐ>ÕÉZ-žãÓr	oȏÐILç¤'²Û8R¸ð¥ñPdʃ¦Ó²?«Ä×XL’b¹vþûsc6߀*Ášfg59KqÀfÖûÇîƒmŠm\2*¹ÎvH& ¯ŠHä»q‹‘…UˆÃ®ÁrÄŠ-X¢—ÓÖý1¬Ÿû¨1äÅjéÏÜ–ñ{á'BX§ñ®OYÿ³ê§Ó¼A¾YˆTm#k”•)‡õ·’1¯rk6šög1ŽüeqWs•_Åküæ|ËûwÇæ7;”Y[X™çðŒmî4$1Vá	¼Éœ‡ò=ÏPi¬¼›tGXÈoÔh~¡PoF2ŸÝ]¦+1MïЯ uëï½°ÚÈ“(Ï{Œ¾ä÷è¯Tɺ†+¬Ga€{Œ]̨ñ9*ÔEÖÎaz>_ÎGg(—_Ñ›(ÁÎ[šlÄî±¢A§J'¿Pͯkuy¢@³òDÙ`íYŽ@£†kIÃ3'%
+úâÁ‰ƒèÿB\¿Ø˜¾Ñ¶¨>½##ÂÃB­!Á– À^={t>À߯›O×.;uô~Î˳ƒ‡Ùd()6»55Çâ
+Ïq©pkZZt[ÛêàÇÏ:r\îJý¥Ë’Óîfù¥g{æýŸgÒOžIÿó¤Î–!m³Ø­×É«eMŸÅöÚk¶Åu¿ÝÓn¿Ón{³Ì,ö€‚‹‹r,vWê‚‚
+{N
+/×àå™lMžémCƒ§›^l¹ü­ÎòJí†ð·'6xx3)WwkŠÝõ¼5¥K†Ù3\ã³ì)=‚ƒ³£m.JžnÍuÁ:ÜÕ)ªÝÉÿf½j`£:Žð¼}ï~Bl|þáÏgȏ3²ÏÆü”Ÿ3®Øw1˜&16æÎuš3˜p›PñÑFÁ(â'hK’F„P!܆g“´6•Q¡´¢iU”„¶)	miˆ´‚H~ýfß½ã|¡…VµüÝìÎììÎÎÎìì“˘î:Ó#—	¬ãÝО@oÕ ±·ßG«Rá¼N½³£=aªI^£0ŒuëÍqßþxü.&/ªKìÊ–úU#6~]€»†±+`iJdKƒü›LbS„â)#Ž…÷Â…Í¬%v$¦²x¼'{wkôsRëæúb}­±>…ƒ)5LZ¾5ØWZ°>¤ÒXÀhIèAs‘_OvÔ—õ–±|ëÉ	ÑÀ„‘’êª^_¡íÖÞÑéF^~vcMF&[r8·—güª°Eú„ƒX€%	{šÇ?k摱z†á/©@ËìÄy¬3¨K¾Zð}¬oºB>=`Ü$œ¿þé'#9iŽ;ä»IÜä(ÉäNÛ‡ÍÊJON6.”ýÙÕU[ú…©oð@à>z¾íHÖÖÀùÁ ïžþ(­BÇìnJØý ­ò÷Q´&œ4EŠ%ƒŽdÌ
+–t;’ŒzJG¿Iü}1Æô–gþ|c‹ckkMe쯱åÍzcS["3Riß6¶ŒèÙòyYº¥Ø8ÜÔBðÔ¡·¼-Áü»Bq=¶.Õ€Tƒfq]Bõ‹¤Ý~UN…ømÏÌ̝DÏ¥…Ü2þ;û=^°ä(¸éK5Ø¿ÉQÁà}*õ[Ÿ±–$wÔÒ{2kÃ#ûóGôG˜—g¨0X+-m†1j„,ŽËÊ0âz n¤ŒŽ~«{•ðéÆ€šPƆXÊ9þ~ëÔ¿ß›Ä&Ö*µmA‹{uewSoTÙÝÜ–ðákwK¢O(¢.µ8Ù;²Ä@ ÷³ä
+æ2“;î ¾!+ú„WŽ÷D‰º¥T“Ù_ݯäyžB«û…Íó9<žfó¢’Ç|SÔµ$²c@&V²Z> ð…ŽÑJ}¾i¸Ü'9ÙnÃQʸ%à…­ÖÓ
+߀À7ÜÇ©ÁÁ.¾EMµ ÓÀ߯=O!Œ
+ýfÐý"B*øKÏ€*  «€°xhÂXø.Ïá@ÝG힯S‡ë,ù\­4XŠ¶®}D•ÚF
+¢ÝÀ}¬7KH•hO†¬Â3cÏZ—YŽq“å¸Vèm¤nÈ¢ÿ PäÙG~РüRÌsŒmmTÏð^­khoKÐþ4[ëA—ÿ(Ú€|è|YD¬Õh¢½ ¾)D;ˆAïë`|>l센}Ác±n>¨ŸÇbÎ
+õ‚âWâMuzµ*|´öÍ{vöÄö³Mÿq¶/¶}l«¸cÛ r°F%Ïj{z¯‡Ä9Ú ±®£­»K(Æð\ IØß'@Dë¤	ž‰Ö_aã×›4}/0^‚ç<D;Õ…,ì~qÓIÅf[·Åwh¢;Dc¿ð7M…íIŽ=ÄÂŒk–ú4I»L¥hG^¢?güßàìAëà÷«^²>ÅuÌ3 œþ8¬_Ã>àsWZ‡{0ö
+dÏ #€qï‘1ÖÇ:_á5ìs ŸŒA€c˜é }>t ý\b,0˜𺯠?^æ1˜w,ÆO‚ÏqÌplr|plÈøG<ɘåsÜßpŒÙ9ó#ñ$íJ€*|”ìL£ce¾ð9²Íœ<7ÇÇŒC!/·ã^¹Æûä˜Ê¢º«J®-sc+‹Vpì3U£rbæpÌÚ¾v¨´!ÆùÈ9áPÇÎO™# j³ïøÜêø"CP²e®÷èam­TßFü·£ýè\øç°ÌÁkÚèc±ƒ„gªp–œ»¯æÐϐ²ó
+—åÚ9zUÒ!1YR\®늫G<gÃigÓ\(ƒ¶Œ)#[ößòÿˆó®zí¿¹†,K¢±Wòü]™
+~Ð
+TzÃÊo—ÒïYA>ÄÍ
+ài-Šï×(ÍÕi‘6Fæ]ü˜»Fë¢ùÐSñ¥ö‚º‚Žº{èKêÎk‰óô<ƒçݐ‰£Ü˜ûb,IêÄë](ç@¾CeNE¬?ȼŠX”9±†mJ®
+|?Ëú@òn.tâ5—¯Q¹z3+>sâ4+>çCÏ——Yt4ÓtmÉwò:c¹ÖðþåýØ*óIÞsõ9ãsiFÿ8õ‹ãÖò>GmN^3€ä¿Hß#¸‡qÞ\3÷Yíîg¬vu©ÕŽ}þÔ½ôºuRLµz355D3ÓwY©SKÙO®sT–©£!z4}Ÿ…¸žjÇPÃí:Z,ëç_h¼ëº¼ÛfJ{99kpïMEÿ‡u[+¢§ÔˆTä%ó#M,Ó¼4FýîÜ¥´I=lýNÝ/ï ˜:LI5Œ†.|6Þ%¨ÌUOÐ!9eÛïÖŸ|4 ³rîe>{÷mʦº®â>jŘãr¯!y )ì©»usyÂT¤	
+§Ç„¤Î7ñ^þÀ˜å‹tm^Èsº—˘-:³¬ÛÞ"Š0\¯Ó¬’k5P­7Bå®Vëª|WÑ#êYš®6ÐCh—ʸ߅UzÙ€ú¨ÈMŸÝ—µZRë–¬÷Ûd=ÏsÕÐJùž`™›&¹+hCÓ!KQµú:æyquí7,K¾~O…¼6øñôû„ß	BæËo¡÷UsŽ±
+²Þ°=oïÒC\=GáÃQœƒŠ—¥ë`úô{Yø~šWfS%(Þ£V)k¡ÅiqBœ¶ºø¨¾OO¨?Äù  Ú†úý6jã|Ôð¥ðÕo(¡þíÉà¶àí·‰
+´êT/aÜLÈ6@ïæ8
+9c't.‚¾AÔ_Ò:uïƒKüF  ¶ôq žê”S—¸E]î9¨Éó­×äüŒMÖ×$Ž¢n^Jë¦!mup7›·âmw{¥­Ùv²w±çày¥ÆhYM‡›Ä>ꎈ÷1ö«´U9fRQ\¹Jã'Ô i/Є›­<LÓfÓÏ€íhWžNØ}:| ìÀÜg at Oºñ©À‹Ï à ¿rdÙàµîÆφËoÑµPn`7FÊäšÛiÖ›£-°N1Ô+¨!€{•x¶P‰:üIÐËé»ü¸çÞ¢)÷²ç^PÞ¥éÒ‡6¢÷³Çûç.×çÿ×|÷œï6àqiÃUÜÇ2†h´rÞºÚªœGÝÞŒ»@¿ýbÇŸÎ9ÿ’äçœb…T²þ™ËÏíçžë½úâ$=‘
+'2ñð"-dh‹0Èí{ß¡q_­±QWxæÎõÝ]–ë]C„›õb/±YJL`ß%&ÄÅNC¸R–òÙÚ¨ªC[ZHÓÚ
+$H°CqÕv½ÜÅdy´XªH”(WªÚªRÁ´TýQUuPÑÚ¸ßÌÞkÌ:Èqšþ©Vßùæœ3¯;3çÌCÚEø.Ž×Õ×'@r”#bN؃ùãu­†ä(y˜k¦hƒ3Œê—q¯¢®l¯#^òìÊ)Äb`Ô¿w>0f]ëÊŽ$ýö÷±¿Kê÷ÁüõP‡|ö)?ŽØ<º¿­ûâ®=ÿxr¿êâ.ùKJ;gâÎÙÀY¹WŸÿOÀÙyxxë=%Ø«€9ê2²B[ŒÜs5Ásuø=B†2ÀÓpò†Pþ
+Êë"”ß„í0xWÍÐmØGGø˜š‰ü} ú¸Ýl;|x&ÙÇð9Bþý{»’퇞™ÙÐ)à
+àç@9ÚØýüú即Lö5„òð5àû@p(ÉCÏÂï¿ùÈ'¼C?W¾×ûãÓ²õÎÛ<î
+1^ö©ø®7‡ýý'bû-ñ	,×Áš¿6f>÷zãÜÅØ?®±@.í9¥È£E.›†üY䏣,ÞmJžnõc³GÄ@‘;‹ü5mræä;¯hÌ{p…7ÆÞ­ôcrðYoE[xë\BlòàN½ÿwB@Æ6× Ì÷²ôÿv䂨~z6ø†Óì»uÜ;ALû¼õÉÆÈÏSC¢)¸—ÝÆ©±x²˜(væX~=6Nÿ·ºçmL”—ŽË&Ð'êo²zjÞ1i=%/±õTŒó§î=;ŸÉ$™£H9w“…x[¨½wr{©çxô¼Ùo„fÄÔ1À=P€˜UÇ}Qd>àØžu‘³›„ ÷§aû;x£ðÛèq¹Ý†þmè^õ}Yw­…íçÔ}+òs™bÍä=Ø*æOŠe€8	l·¿µx{bì¿*ç	ï\µnä†z	HÉ'äÅdÐ
+ÝÝs–¬éc×â+V„Œ¸è~ÉfAaèŒp˜™³C¿`×”.’O8WÍ™YÒsÅ\¾Ü*<°$YˆÏ_º™Â® 
+»Â®bÑe«xÁý¡ÁˆeÏ⦦„“vöGb°?Äóæ…Ú.°÷à—½C6Êfï˜ú´:|›½I|„³Ó¬×òôÆÓ§…Hd'B
+%}ýÀ 0¨¤ž½Nš P‰’Å@°°NÖ‰yv ½²¨Z •¬b?ƒ}«ì
+¶…ÌEÛçÙA2üv@ò	p&ø8ìsÀ¯AÜféGÁÂIJ¿}&ø°Å‡`Ï¿]ð‹–þ
+lkÑn—Åíl§9‡{#sàÏJ †ÒA”béB#”}‡m“#‡ÀÛ“Œåj2sýò5Åï›jÇ’6aé›°rMX¹&¢ÂÕh×iLÖYÀQ§uQ§«RÂvb¼"Y€ô9 úïĺ{²è—öïB¶íBcÏ`1«ýl‹YÀ±É6Ç4BeçØÓXjƒ=Ÿ•j¹£¹¦ˆN·Ø#ên’ÞMq×TaÝÏÌN2jm¤³
+ä[€‚«qɾ ”*Û`æó³ì1²ÝIŒtÞ¬4³fµ9M-)§¾,Dj‘IsâcH
+y4LK×¹\»]ÌëÊq•¸W­+­ž5³Æ8+fe¬†EYZb¤Ït,]2VjKµºÛÝ1wŸ»ßÓú´~m@ÔÒr´ÍÐjµuZƒ¶[kÕÚ5W«ÖêPֹܻÝÌëÎq—¸
+w­;;h{d/[¿I ½@Ð
+¨Xã(ì9ì) Š¯ÅR<;$м@?Êà4hÔó žV¬X	¤ðÔë€Ë«zì6¢þ ð x°tXÓ±¶ƒ¢TBÓ¡éÐtÔêW†0C/dP0i °k m_‰å_hÒ?(ëØ>C´U†Œ¯æ÷ÒX!m/¤­…Ô—EBÆ\ŸÏõGÑ‚h‡Zï¯ÔÔw¨5þš@MAM‡Zæ/””u¨Åþâ@qAq‡Êý<Àx‡ÚRÝS}¡úrµ­®¯n®f¥øtq³¨$$yn at p¯9+3Tê‰,Szðw¢mÀU€Y”õ€ªô@r¥ÖnX»I
+ÒТ[\/Üò	{›ô‰’ð+wùþx—¹tQM¤Wnhúî‚¿KÖN–z¤=9 í5Výviçv†®N^su8~u¤ˆ
+@¹Ì֐« z†ä@Ш¬¿5lÒ_—ÒÅ‚†¾p'3gB|ӜވW™Š= #¸
+yXÊýR–I™g¤Wê7+õ_Vêß«ÔóQP
+HŽƒRæîˆ~*¢×DôˆŽÞî#¹DWfH©	Iÿ&åcRŒ\ýV®þQ®þA®þj®¾#Wÿb®h7gWW2¤tI_’²RÊy†›ëoq}
+×K¹Ñé1ŠÑÉr)çH™%$ýð”§ÜC\ç臤=Q3\È
+‘DGÌptÛ¯
+›ác ™áü<½EeH£7ͼë<2ƒ~L+T¡dñ´‚t‚Á›Á?%a Ÿ0Ã{DýŸ ýèÇÉ\§¨ÿ©•íÚh…´¿jµ{Å®Ç¨GÍà71ꔣ2ƒ×a=`÷ƒ^0ƒÛ@-f at Lp‹žÏ#Óèf’§ˆºH@3©¶F|=o¯L6^aE«r1@‚>lú‚òÅ,ÏS?©•ÃqÓ/ÿd6ñË.f¿œt	HN§9yÌ•ì4ý{Ћv*pÿ3|NüqrƒzÌcüÏçñÿVCý­0;ù¯Ïˆå2ùå`‚NóKþsüb^‚®6y_0á„ãB0¡Ð^~‹C]…žæ=ÁͼÛ/½~xñ©ÛÂøQ9 Ýä{‚çÅ4ÈvüãÕp?|ˆW‡;ù#…Ûc0c
+_êÿæ%	Zïäób*%è£ó4ŸçùåT¾\zVYLôëFб˱ޱÚñ¸c™c‘c#Ç‘í˜íÈpúœ^gºsªsŠÓéÔœªSqgFbdÀ("8…šW¦
+©Ê²WBÜú
+u*8;±é¬J©zb9ùªHÕªå±Ò¢ª„cäK±%EU1gíWÖž¤ôGOB‹)û”¬Z‹
+*L{³b¾‡×ž!”ïý«UÔÆuÄß»“N „@ß 0a!d@ IØø€š4È56ÆŸcJʇS·¦u÷ƒ2OÜi’Æ3µ°ÜZvÒà±›ÆõL‡NwÚÔÓïédÒÒ´SwÝw™úŸÎôév÷ÝÛßí¾»Ý}ÚÓF"Ç'OG"˜ßèC|¯9¾Üï!mÝ[ëuHó\@È®UV6„žÂº×¹ãñÐ9žºÜø4ßÞ#7w“ÉZn„on7ïè¼F
+QáÐ5jˆHç5<J
+…ÛÈ:
+EÁK
+ù‰ °b	±8!Àš¤)ͱl
+t7¤ÏM´7e« \€­mD ŒÊC‚­*À RƲž4&C8K0–%C‚1ÍÙl )±ÈœÏ€9›OP_|¬¶ÚRÛ‰ ›àdž#‚Œc6¤0ë*
+0Žÿçè¯ÿÀ8Ñsow_¸ßûºã_|nŸ.~¼×lžÛ}(ÌqÚÞÝÛ·Èžþø=k(¾Û2Ïõô=EÝGÔ=ÖÐêwtÎõqý¡Ë=\OØÚŠ$f'‚ü'|zä+8ñcÄXøšåŸ¢æ‰z–øâ‰/žøšåf_|[=æ·uÎ¥¡úHpGJ&¨)ÔC·Ñ©×(k…⨶莯‹üme8"q™µ>ž	DTÎ:gQAu•–³ÖUºcÕãuüúºJËJk=r ]xèэF‡	ÅbàÃ1°6Ekiçã
+­Û;ãþ¸?çºCLÂ[ÁNN1ï_ðSþ	ÿÿyÿ%¿8‹Àrö<»ÀR»Øv‚=Þg/±Qìèü>ç?Ï~ÄÒ1È&<#|Æ@ÂEn‡cQ28ˆ¥Ü9bŽ`g‹ú ÛÅЙ;Q¨¨HŒnÿ9Ёþ	$B'€èÛ@	²B;igX·?D<FäÐÑÑî„ËãÞ”Ù³'%Û·§d¸%%ýunÈˁri]4Þ]~è} þ
+$¦Ý´[0Kem$Š¢ÛGp3LXÔ1Œ0ÁäsGDˆ$8D  üɼG8Cð)    $¬FÉc1"á6!$6‘nIPó…ߤކ6UBÍ_FbQ’zû
+¤2ùFú4F<z
+Ѹ¥ãƒx'Ò9Ëþ‹bÉß¼âG˜+ +sY”¥
+6‰Ð3}ã'F#³è<?I[©·Ä¡1 sW“úÛúû2Z–\ûWÂj«¤ÓU“k$Š=(¹v›Ë…‰^Ì°	Ø}–È´2Jjš”ïõf¢$îHHhƒäe’´çJf¦T$‡	§1´Jé!Ñ-í!¤ÄÊI£é«–£p¼/w­,/*³+7¦
+¬ødã<Ôµ~‚Át¡ÝSá-wkÔ*	m¡Ÿ¸¡8¯†ÚTê¨Ì©\íõi<Î’*ƒ—¶â‚½>PUUöLßê¯ñ†Ñ®ªº¬ð¥Õ_‘o̯ý^ü1¼wªA8ÂÙÿ;žR𘑧3̹Ѭ¯c6¡Í/¨52"7æIÇ®ÒTɕȳ+Š¸òB,ì•t›º‹ºÝý5ƒîáš÷Í2Y¦#‡©u×™d™T1Ã$qÇÖšTµµ&ZTRêtm”àrS1Sâ¨Í©KO/›AÔ´:Iºõʦ+ž¤&¸ÅæF‘QÙ‘Ä®
+Û™@£V‹ßEzTDýèª)Ïkµ†Ì$>ÁåèóíØþB·{Þ¬žȨ̀ rrƐ—~@?¡?£?¯¿¤Ÿ×/è«ÿH/Õë·Â¿Æ‰„¥c;„ e©«yq©‹\G+-áþП›K‹äZ†D"ù¤XT,—™­­Ä@Ÿ——:Ž*~ˆ!lp	¤øq™CÔÐPî:2„-j†¡$M¹ÛëÓ2Œ•µ
+Âç³÷¥¢ÈH4Z¯§¢Ð^hó‚´[YF­ÒäØ	&ð´H/<Û?ùÒæp·Êf»p¨í;»Çßzõæwÿ¾‘=Ö{ôùé³É‰©xž¦hõsãc‘úg#ìO^ÜSóÙ‘©X Fï·I«7§öµóÆÓ'#?ùÇû&k.no8½÷À7wýá­Ÿ½\Z`gTOïزs¤ªldEev,<Ûsð[nÒ(µBN gd¨•3JåÇóöz3H!ÈH!$3ngü2ãƒ‘ŒÔÀU†–C`ÒIpR™,ý}<³ã©ÑEÈðùÀ(ÐL²Ïy2¡_ñj+œÎj!‰7Œ9 o]¶³$o¡ëZÝJ‹_B9¨Š³N+_SR'e§””t&]‰fptsÒô×åì63ÇU;‰Ã®Å¿Aˆ^™AX°Ú^h§<
+ä#ÁQ«´y5þõþ—Ïa÷òØ+-ÃÖ£«¶¦=gñÔ{؋ׇþº:ýÎ/.M½ö
+ØC)ìáÓÂ*¹‚"QqÚ1
+Ε°‰èþÒ¥°3ãb8†fŽ«;/ü÷&pWŽG£Õd«Hâñz³!ð¥TéLÿ™s«÷ÇÎ7[ôü¸xw1¿çË«Ïß]½³ŠÛÂÁß¹Ÿš%;8Km£amèCî´ºc2ë3ÞkòyC¢ájÛ‚áVÃoï5¤ùÄÕòMYU†j»Ççm(oKSå*X…_U§ªWKŒ%ácM¸ÅØÞeÜÑEMÑàÈ–/èNš&ƒ§¶Ìè¦M_ÎlyC7kz5x±ñŽýŽÏÜÚ¬¹›*¼"ƒ£° W«åK3Q¡×-’:DùÒq:û«œ5»âSã„f2ïª+òïÎxïæ&WÓBÓO›DM“íäЃOâW¬¬¬,­Ày·´´âÿT‘v½Œùp*ÄBl|2¯ÏûpJjGCf¤¸ì…p#Ì´×GôŽüdÝŽÿM¤cË
+òK=Œ¯$TÏZœõ/6—Wð#¼3/¯±¶¨†R¸Œ¶<u©L\]Òh3˜XWQ‘±»¶Úˏå:y–ÿ0]þ±M]W¿ç¾_~ñ÷üÛω÷âØùaâürŽÜä† -k!´^L†HÁ¢Á†]F$›Êè#f¨-LüÈ&üÁ†ØVÔ?@Ú¤©Ú&"–Nt]44Áƒ˜Ý÷’u”ë›këÅ÷œóýœïéÜƺ–.é
+ÓÿÔPsjI¨¡+RSn	Ø=Å6ÏâŠà‚êåõÑDÇ®hå€;V7ÜØPQ·Æ#ÇJ”…‹ËªK~·V[\SÕ«{[á,¼‹>B^´–TtãnïM#zÓÊ…	,+™貃XÌl‹ä.u¹wªéˆ%õHXR|'h±Ñ˜Z5›¢a™v$`.„´è3Φf1¡²ÿd.€Ûú2¢ ˜ÃW}ËŠæÅ}#…³ÊFV;­¢Kli¬_¶£§ï¢þíÖÂ^½´{´sCMÍYô1êà ,ÃjHÃ(äàðØñ	4Äêp¥Méµ_;CWƒŽNÍ­­ÅÜìSì=¦?ùûϧa Ý@f%%ˆðf†ˆ¤¥I$mM="Œ‰çE,¾e™+›Å…~·úºpÃ|ÒéM Õ’öX¬½ý†±Æj‰þ\æù4n¥:aÐ""îãÒ¾f*Ð<SA¬˜qaL¿6í-fJ¬RâR™:&ÍlgrÌÃ3×àçøc6ïÔz¨4Ù–æäëÍB€[îÕð9wä?¯rÒg¡Îç÷™+\?’Q9š¼´Ñ¤æ¿ÄqnýÅjõçA"я"$‚I$ÉE¦"lÄ®ÛzРʢ”£^P	OB†v>›˜©Ì¿VÍÌã£c7Y	å¡ò²rÌc` óB¸¤8P,fxgD
+›#>Å«`^cí½¨”÷÷‚ËFwÝ•ƒÚÅ&º8dw/RŠèb8}©6~««÷9ã½1y=v6¤´Pö-¬Ù®÷(£„p硝Ò'¾sü{¿ë½±ï›7—&2Í;ƒ±ºòDUË’¦—âøä}èZÓ>öëÂù¿.ýôW÷/Ý8x÷ï¨Ó^X[8Asô€ÚžF̃Žñ¥}9ß”E>âûÐw¶µ;a´S——CeÔïé{݇h‚ÿ$Ø‚<ôÁ?‰
+$	‹8ÑdÁš„ÇôãˉÃf“ˆ½©NÊJ£RNb%Å;‰Ëaz>¸Ñä*yfÚèðmI».˜z4óE£óäq†í.ÇëÖšZq“ ýþ Ss&_/àô"O‘ö‡³¿=õtxpQ‡Ã8P¿ÿéj5Xª×ázdzôŽAè'ûŸ9áõ•¼÷º(ú"=ž*!),>x¢¾Æn0½æÝàÛjÚißé8aþ‰íGösæs¶[Ü-ïG¾O¼Ÿø¦Ô'ì¯Û
+VáŠÝŠGñ|‚è5û́¸ò¢rÐ;¢
+>c¯_±(¼•Q0Çût0
+N–Ú¥~"ŠÄeiAÌ3Ä"sþtƒ„•I¦‘îð8`K0‡‰ñ÷ºœ=ÎgÖÉ:ó '¡—ò#•¨C*“Vs*V•kð„êÌ
+„¸zð Îâ|ßÆwñ?°	+¥“päÿõ<œ«èÔ**+YÖÌl*CMoæ";¾ºþʈ×ÅÛ"F©Lwtz¾!è6+å¹üb¯rX¡ïwÛ’Ã2·÷¦J2ƒ)š1} ˆ£5!4礄Ð|¯ ­ Zí
+ÌÙžgS°Ô“Û6EÂÊíã§ÿ\×yæI+ô¾±n™¸ÂÓ0,†w?ØwæÍÌÕßü~´¯ï§…‹äz}€[KUþ*Íg¬¼ŠŠžO]²$DÝ'-‰vqiÑ2óŠ2ö¶UU‹ªH<¿ŸŠ?.PÚÅlhOìÃò«å“±[±»¡»á?ÆþVöYزÜT•‡Cã••2Êãéñ;uP—gâ'{À“‡±‰ ‰ÖÆyè—­U•× ¹ˆÿBÌ«i𨑚Éñ°äa”ž×ÕàÑš\
+®¡ç=B–Þ=?%E$¹ø/ã˜Î3Ðz…8¯;±Siԁsÿ‹Ù™IeêË4©(z¢3ƒm3©}D1Ô«
+FŠ$–/ÓBZ¹ÖXžÛ"‘"
+—Z¶¦‚ÝiæŠ^(c|]/”Z:määü¤X½þDj›
+æÐ<yŒdióMŠvwƒ>†?¦âé:Ô3+ô·\<ð޺œ{‡¶ÿ ðùÁ¯×jŠßþ-o¸z󱐿4ú×ծ±—ö¥÷³~£kÃ;'ë/û¾÷—T˜¸6Þ|ò®‹•íÁ¢¯èê˞ѮRµ^¥Ù-¢SáH¥Ç
+Zj%C$¨¶€[ ÀFäx`-f+b-V–·X©ªJˆC0¹ÁdbX·˜P©¬×àcÍ0F¬ð¢‰çMk±°×`9Õ‹	6³(JŒ1çÌäá1ñA›!/	Ò”WS#ñD A±}IC™¤‘¡$ÝþUÖ'Þ¶D­L;,Of“ö„ÝÌp,ÊΏ(’$Q¢
+RœwȲkMÐH_€¹zùôì
+üæ¶Ó…rxx¤ðcØ<ÄìvŸšíÑùÕKë}7·i$?cÁÑÜÌrY>8ÄM¸I{…yE]§m-ÙÅí.Æoûß.yy_Ì…¦B
+$ÛN·ÇkrÑÎË衲«m¹¬ªù‹KÁÇrôtl\U5ç$%‰qS¸‡ð=MC,¥y+*†'†„œ^ÇðˆÖqH(Â!*'—eœÓ@ÓBD•È9ËJÙ$…ÏŒˆM§(æ唣´§¿˜èŒ‚¦Ô×)3lŠE9.¤ÿ1b„A<¨î‡ýx¿ÊSâè ¡œéx}=1oe›‚Û¹í.ÕMM– 	¬á?ù/y¬ùâ՝'0»_.ôwƒxü­u¾²c÷žXÈÿ_ÊË?¶©ëŠã÷ÜÏ~¶_ìØIü+Nâ„gc;ÄÇ¡„h<"­ø•ÁÄϤ	A%4À P~nJǏÀ’±uêFݵŒªF€†SaíM¬ÓJÙ´-EŒ–I™4-B°óž
+´ÿmŽï»÷ùYñ}ç{Þç|O8>{îæ¾£Ýë.sNö‡îXÓŸO^8©8æV÷íÞñÇÚ	&j׳s	jчÙé!ãÉC-ºYÞbÙš×%ßT朗Ä`ëäE¯ºyy¼$X…w¼WbeÍf0#;úËB
+ÙÑœ:ë!B7'gí
+`p5]#Íiõ‘¨¥Z´%š‰EyÔ›;^".‡«Ì•pi®^WÆery#O-ÊC4œ·sÅ@£Ú4¼ÃOcyÎ*ù%j„ùQY¬ÊÎ@qI1•òU%¤ÊH‡¿•óp5Îj…bgY+)·á<ö(:4d at a3=æºîQò«ãj’ <‰8ŸÙsüí5ãz¿ß=ضs°{ÅåÃ`ÿÏšÑA笙Éçïß·+´X¬V•ù?ýõþ•C§O<ÙxýðìØ’Ñ{¶|^çõS÷Ëð)˜óè6;†O•\yŸðGCg]þoˆGCZ^3•ë‰¦´(å7ð1ý>£C
+†¬@MaTpt”?Ð|Œ0F9S„6+%n„“t0ÍàGý+X½6q~IýB³îàoà.ø%z‡Ørq×»ÊÛ®Gô
+sDzþtoÞ®sÉ+¿$^’öˆ=Ï%.VȍGtàh_ƒhãLáßÑcuà‡c݉o%bNèþe~Õ_ÕbE’˜o0ß¼$D’Щ]XŠ-n²4
+¯Ov–§­i[Ú—öw©éЁä	Ï1ßqõ¬íœï|èbøªåªõ†Rd"ê“ÃEŠÛ§*jÞl8¯(¯æ ySI-Ì&³á¹ñÍ°<ܘl'íð"mµ‡W'wÀÎð–ʝÉÞ#Ò¦´¹+¿ËÙSÐSô:?b~-ÿˆó¢Ÿ…Þ
+¿›àýæ»ÖØîæÝ
+ߝ1)r¸–Lg&‰fbó…¹qp¸
+/.‰	úäRÓe二™¯®ÈbIi)ª¥ZR™ÔPŠ§*.á†Ï@ŸK­¹{ÝÌí­¾ ÿ́E·ç#T†odºžð w]˜ä“bñ’òü"n.Tƒ¢í¸)Ð
+•ÑVRåÄŠXαD–èv<V4¡•Äó'dS=—ëz}ÔaÓ¡«zÚ²™¾Öäª5¹\×3ß%éS®ZÂþ·šO¼óÑÚS§§ÌùSß•µ‹¶ÃÄmÚ–U«Ò©‰5­[ÛšEOíÉ,ÚóÁ™sŽ®Ù7oUGÏo·¯Ø´¬ïÓµ»æ¿¸uËüêÕñ±/fkyùÎÅÏNiG}Ÿ„ŸcN¸IlZrGø¦¸Q~3ÌWóíb—¹SÞjÛ¦lwm-ë6¿â²È枝jaO0ì¬DåÄ$.ÀJâí\¸+’I“ãêz3)ÑåÉȨƒçÜn¢xtùÀ~ž8Î2'sÀH£ˆIG˜i‰d"CaAüšfùÀB-Þñ_ó3ÃYC3š¥þ´œ#(•Á}ÃZzEýãÌù¶C-U„J•`+	Øõ¶ÉŒ«2k	öNùx(—Õ¯"Iʨ	îTMsr–ü“sf†"@(«¦µ]C¿üdwÏàª׎o=ü×ko]¦Igýö¹K¿»tzsÕwŠUºÆýâ…¿œ?Ó}âÀ©·Æ¶¿ÜNßïš·âóm™£غ¨U8ýè6ô²ÓÈ#7©ïcÞPµ€ÒVÓëÍ`ó§“
+n×
+™&W÷f
+iá%P±n|$KÃ{-%4Å`R6¥ôŒr}e
+ÁªéÓ«pTƧ×ë3;mœâuÕgWõzeúÞØ)`}¸Ÿ
+²RóÕ+ùm5×ì–S›âw:d[¿Ç¦ï«`€ÍÓJK4-•\*S¹Æ卑Kƒé ~ä÷Žkï4„›;ŠíZP2mwwÜ6t2¤‚Ž¯m˜¥jŒ„×Ó'u¯‚/·ùçÛ:d“ɪ:&Öή©oëa}ZvïÚýû•å=
+.E.k“gnjnëCÚ‡ÉE¾œ¿†Þíßç'3pDsPµrb6&+Õ H<3vå?ÃÑØ°°f•DÄ¨$hö\&P@' ]`'V†•Q„Ï‚]½‰Œ¿‰–“Ã­J0M¬»EZpA8š ½D‹ -ø1ÕÄA±tŠb!¢é_Z±K×%Ú,õHt½´[¢R£iÉó¨ðHšÃá‡Mú«£­!‰7uû¼££>NŽáaô;Ã>Y,Õ-"4¹ ðæÕ[ÙуôWðÉâ±oµ/ƒOu­Uø3od›°>˜ÈÎ>É„7Ú/æófNùe6¿ÀXƒH¥µ©µØˆ¥	mÀC†\'CDI‚RÀu€hFÀeÀ Q6qŒ$i4÷p¯Îð´÷ð6K2­©#V7Z‡æw´nb™ñ§òÉ>ÖÛ´`dþ´Šú-Õõ®Y<Ä-ћžHH¸Ù$t	ü]Bɐç$O$¤(aL˜ëa7¤ƒàÔóêç=ð&ðõ vˆãGÍxõ±~ã%ôؿĸP´^wà¿K4d†íi4²Rš¢¢ÿ£  WHéo¾ôÁ {óá
+^MU-‚ÃpdùXTW´ñÑßÙT±†”“*òå{²Ùž T77Ï$RÕñÄ´ÄüDsb§Ü-³ó½í—Cf›’ÇELK9Øó\Ipæ0Qd¡ÊÝ.p
+@ÿ{–™^v€-ÐüZÄŠ]+	Ušúþ { {CŽuEw*°î|H+«LTÒÊ‹T!q,Ǔϼ̋!´ï §±ãéÐa×Yp¯]{“á+õAtíòsFÓ€¸Ï]l¶ùU«G	Ùg
+€Ím	ü—쪁mâ<Ã÷ÝÙwç$ö}çø÷î|ç³ïbƒØÉÙ	ñ2r¡€€’–&†ÅïJ5Р]štê0AªÒñ£2*šNÖÚACXQ‹P5¨Ú
+•!J·ÁºAaM&´eÕ ‹Ùwg L³ý½¯ïµîd½?Ïû<€Á*˜ð!^„››[Úžð¤݈ēÔÃPøÞªqq›RX»l}[ƒ<sÞéŸ}¸fAÇ7Ôᾇ@vtwnûìÁ='ÕM‚Ò¸tQî—Ûz7.ÜÿÔ«ÃS	qF¾!†Yß@ù0	÷ý
+7»Ò	$âÄX@ˆ»NŸb^t(tªˆOu/"ÁЂ'€I}¨ËLÐNc‰vc©}ð»	#¨þ>•(œ9ÑiLò:O;Æ«D›Ô%“n¦r,Çó‚/@Ê¥»ïUÓ†;–ìM™>Ö`ú£3*á`]%̉•°×u›Nÿ	¬MÙ™jôðVf3.;ååÌ2Øíê¿Íl€O‰ýpÈRpìb
+°àwJ˜p{@gÆáÛܸø>sþ&pNü„¹?gnÀâmæßðvභ1ò¸„¸/JEÁæ¨âmÁË{hœâi7ëâÝÛD¡(!ºØ>°q8JøYÅEŽ‹R`
+•™¸ÓkhÈn‡¦m´PwtƒîÁG:[“Ç:E –ð	ÝÔ]Ž[ÂñóàÆ]æ$ú9´|œ!('
+ZÞÈN!‰9ÝVpTtd!ë@cX°œ‰ù08	à;ÿopàLÕ†>¦°ŒÝ<R”2e’:·œF}Ú4à©\Ë®'^›þçÊÐ×Ö–»»ýÚlðÇ0¸Ôš]:}ó±Öèw®O€÷.vF¤¥ªŒ/¹Û²ò˽;³ªª¥AŽ¯v\™þƒÁïCf¹ŽTˆÅ°Yø€ž\­‡±â°¶{9R䊑›Üß"Ÿ%jfaOG¶kû›öi£Ê/´Kܥȥh•%SÂ?;ÆlhÎ]!„R†×ÿâö¦4]Ž#ãSMz8ŠHÍUæªÃÜÇà¢rY»¦R¨ö&H¸Ižs‰Åu'šæ)‹RË@¯EdÎBfºÁ
+eu¦/3”9”¡¹$×Ô…!¤á1êOXHœ½b§¶SÙ¯|¬QÁŒžéʬÃ׫­«ÉÕÔêd?¹™ÛÌ÷‰[”Í‘§£Ï“;øâˆ6”9—¸œø\¹£ø—ÓŒÄÛä”xÖ„ôq,“"4cV\#BÑtÚæ™õz=xCÔè”ë@Ñö™´éænèX{Gʸ<öÈ|Óë.ÿÆ*T‰Iº-1iV¼ÑøÎK;u¤çp™«Âb«ìl
+Ñ€  ‘x^Wãdm-Þ¯aÃÚíȆP/3ïf‚Æ%s°5ókp“±5À‡]lÉT,Ö¶xõÎ4Ú‘ÙÜ#½ãX#Q“7ÝäòD+uh~Òl°|…£cë=4e+8‹™HÚ‘H…£>Pïçq’¬SI×ꢾ:
+$¨F
+„Å:HFˆð34´6h˜i˜ØD¤5¤Sa[¬í!¢›ijšläóy,Ÿ{ v0DŸAE֐a9­5µ4§YƒÑ…Ó2c#®zî\AkŠ­h“USÄÑ毺rmzHëV½Èb
+_ôêº=¿?ýŒºªõ¥ÝKNŸXßµ%7vªçôÈì^Sœ³ò‡ßïV›ÃybÓ³r\õ)om}ò†¢Ú°xëÏ—ßåoë|é	‹íflÑÝ?[„Õ
+Àõ961x‚HH{˜}âaæ°ó8󖳚Ñ¿Ä3îmžˆ]ž—‰=\‘8IØj‡, –Ö
+Y…ÇJÀ:†ó œÀJģǃû­Q %üÊ{X":ÆFì?µãö‘Ð.^Ä  M°ø:$¶ÅYNG
+hkú ã“|¸ÏlßBuý:“7DzùÅ“K`ö‹|‰Óœ±3sSÙ©ëí“Sr½zÖ,oÐÍ“5”ÊÕU×yT’·Õc5ndh¿µTyíõö r…“ÏeAmØL:îv9´xIK8hQ§b¬M£r-–ó’4ûú+…Ëý“{Ÿ?·]z²|ëdùõñ]ÇAûÛ»Gf:yWmÝXÖ~{|¸|áJ©üsG\cGîœøÏûà‰“<µ|ÒØ’a´%·#tò mGèË«ùêÀøcø{hí‡ý®Ü[»Ï}–?¸ iëtD‚rƒ·SÄ£4)ñ˜¢$Þ.‡½²_Š:vÜõx0Zhët‚Š L:u§ÕYºû§ãFÃÆ,ÎnOëaƒ¾ð¡ðÕ0–½æ4zÍiôšéö"©QÑ4’fäŒ y0´æ^
+ŒYœ6-ÒžùØfQ¾¹Öû#&p"ㆪ«Nd„À¹‘	°Ràký=÷ÓÿÜs˜11Ùœö¿ƒ´8ݐ"åÊ:†°ÍEXëQ<‚1QD­¿þnñÝò÷>칚ÊÞZ±Ym‘7›ƒquWùÔGåk§.¬À|à~07`ô:"ƒ–7QÆ5Ь·ëé
+ÂVá@ò5_1y2y5M÷øûÈ>j´
+‘CÔ=b³)CªÄÇä0­	¡e‡C²ñ4e¤R6"”ŒãÉSäqFü# a£±¬Öãõ%ü#´*â1ÔP£þ† h[‘¦Éb;5Há©NŠ@Ϻ®w™Ïêo(ÆcR}ݺ‰+£¹ÂüÒ®t_úPšHcÐ,4«ÍRÁª˜¥RÌ b–J9˜º:
+˜±Ì2™µB3“œÊþu•+;‰êdlmtäÊæjGP‰„‡¡àäÿ÷¼QNaˆ—ÊÆhl¸.‚Ef]¶Œ9A1¢l_И%ô
+ÁÌ-‘©ª‡óñîòEø_º«>¦óŒß{gÌÙøãl÷žÏp÷ž9Û`°0n(_ÇRâ´Y¶dIË’(4M›TšÏJ]™¶.+ë–ü±´Kµ²hë&uK5¶$ª×m-ݺJQ	iRªnÂ¤¤Ëç¾Ê’ª`³ç}f«à}ïñ½wü~Ïó{~ObÙ‡Ol·:»{f®ZVR—Ã5}–£Â¯hnJ<\Â.ES»‹‰­‘h¢Ø½1.ëéΧŠÇMY²·
+C_­N˜Å÷vôVø)£Õ€ÑT÷‹D:ªí»Ì¬Ëár§…ï%_O¾“|_øcò²ã²{Æ1ãv
+–:ŸŽGJFœ‡€c±ÔíªãK‰Ç“G1Û+ª¥Uš*Ã	¤Ò;µ%ªÓÇzgµ¦ÆH4YŸp‹`j€_nà¢1.!%øeÚŒÇc|¥,Æ“‰ã\-âj­Z»v°ÖQ{ØéÔJÑêRôf)*¥Ö,Åù“>Fš1é3ª«“Uìfc²j,õ?E7ÍæÅýC…@!°÷÷þ[äwðK)L.°WX¼… pÐ=Q€R$¦øh4’¡357WÜÖ—ùƒsô£›kW{MÅ{î¹éuà ÓXxÝê‹a¯[ƒ¤þ卆{~H»ºjW±eõ}fqÝ#D	bÓlÔŸvÎÇÅs›6$(_+¡ÛüºMõÛ}nÇŠ¯ÄÃ	^Â’ÂëY;»9»_ăÊþºÃø°2ŽÇ•²†ôÞ²ƒeΦ½ÙÁìsŽWSY‡GøFÙDVX)/ø##HY‹fXÿ9Áú:p•½¼ñÅzcÙ¨|	Ã…’Zµ‡"_Í@®vR«@ 7x8Èûƒ«ƒ<ÕΧƒsAGÐAÙ‚€^8É4Ïl—¹Û{cÈÓb<¡Úýš˜DÏc÷¶Œ.p‚u–N2ªkÀÕõ®ë”%i±S-¨dFO–J¢™ˆ×Æëâ‚ÓFÄOmHפ@iÒÝÀy£°Iº¯sŝ
+¨Ìô5póÖ‚:sj<æ[X’Õ(µ´‘‹:µØó,@íD© uVÀ‡°¶…ó M xÄqhï;ðF±ppèùFV=×­u‘÷*T…ž˜z¶¸ïÌÑuÛ~yäÝûìZV^®
+ÐâúŽ}aÏÙWÿñ»âÄ‘˜‰¾¹­‹Äbóñâ–λg{óÄË¿t=®­ˆ6ó´Û½•ÚƒöÍO„¯ål
+gæçnœ¢Œ˜™üܬ¤a†å~†Q”)‡ìrz»Œ;ƒÕ‹‘Ÿ»d³‚1؃F¸[‚I²
+V=¬4¬çÝ«V;̘e\MMªƒOEÜ<וf“åY(¯]cJÓ–4q6I¯IN4ZIÕÌËMæ¦rŽòÜXÄÎöBÈCÆ•ÃÐÔ12šš"F¦vƒ×T7‰–kªJ¢Ð8H´ES;HˆÖÔ¨een>ÕЉ¨b°Üàm7nXÆ q̘4¦§‘çu;,å6ç&r‚žC¹ÓhéÍlÎð™±[>ÀÉû¥éaƒvih˜‰A¡}iJƒŸy)Xt¥0zõ'¸–j›¥äÁÅO>[^A?æ÷‚$-‹¿‡‰7A½e~c­‰)…QvÔXøõ‚DÀ	ß ‚‘{}}û¼0ÈR÷Àì‘%•@/·Þ¦;n{ŒjF3˜¥ý9÷–½‹°.LXê;Ñ¢-¬¨©<1°¦‰¡h*"Q—¦H4 ¡±ÂÓ¬QDš%Šƒ¾ª®AqDœ…9Yb¯¸Y6‰â¤(ˆú˜È2PÌÏ}|’¾AÑ®b`‹>HFÈ,ÒK6a‚Lž’ò 0ÁdŠ~hxA«™@ϳ@wó3p]d‚ßt *ƒÔü”žÒxö»,f¾fî¯B Šr—í¶ž ÚT¾)Äȃò3žŸù'Ì’ F–i›|XœªŠAT‰#R¥Â#Þ
+Ù!¾7„ByÁ}JIx]U‘üÜ'ìÿ†`ú$Ń6¡˜D—ËmñøñçbÉ›âyqPã`ºb‡L•¿°y\ÿT™çO©ÒIîB?3%ýCà0º~½¨«g·¼£VÝž°'Ò†ÊÜj™ÒÆAkg:7ãÔPùr fÓ²E%[D÷/y÷—w*¤^oŽË5jšáYg =úÆ·ûÛ­îÁìçú„±[˜Ö‚³x
+0Õ¹q[•8	霎lc=ÿ¿Տê¯è¿Ò=ÈÈ£ïØ;ìZþ¡j²N Få]j ÃpkªD¢º¦sgs÷·H@â#Q^¹ãh'Ÿç߶ӕÿÏz»\n¦jnv×ÍÑ=F¶ô/Ù€yܦ§©…£–ûB?…Vú0T:’…;†ÌŠØB±3·–u<OvÏ|ؼά`fzÛÎõºäiúÚÖïe;ÚWZ<l.Ów;¨‘6Q}`öø­"”Ú¨çü7 b¡Óö%?F>N”}Š7á¯õ×9¬Ò`êHoÀ»Ðvüxú ~½˜~ÿ	_BW±×‹aìrZ+,!‹³V•VÇ,Á‰K,Y’\-|jãî–[q‹Òbu5­nÚÎ=ÉíÅ”ÝÖ(÷,~Æ:ʽ`½ÂýÄ:Ö4ÞtF>'š>ßÇ“M×å+øŠ2ÕtƒûD¾i™+ѽòŠôF´A^—~LÞ¯¼ƒÿ`Ã笋ø¢åókª‹º¦†‰‘ÒÔSl‘D%æòˆ¦Æa¢ÃÀ¡‡)çùÓv§•YX¶Ò8Òð·ËaE‘y—(rœeÅ¢õ ¨”’NºNŽ‘qBUaŠ8ɘ݄šO¿Â+ùu€_ëkdr\R
+¿Ÿúr@þ§‹@(“ðE)—¡&ZŠ©dÉSÒÛpÅ,ÀKÊZ34ÆnùC_²Õ´òt¡ùMjÅ8Њ¥`+'âV9?7yJn•­P+º¸ùµA)D3ãÓ’O­B·iÓmÇHXQ˜VÍ^«˜°`ùV­A#躀FÒëa>3{Ó…	k}´²ðÇžÙ½Oiu¦™Ñ‡…½UqsæÏöqvôÖÁèÌ· âæ.Î]oøy.ŽÞ²WQðBÿå»Üc›ºî8~~çÚ¹vüº¾¶Û×ï·}ãk'¶Cœ@|+V ,íÑÅÄÄè Í£ò
+­¡«ÚÒÇ`LÖQD&ÚPB ld먦uSÙCZZ&Áþ™Zu­Tí	ÎÎ9ºIû#ç[–ßßç|Xí+<‡Aôbˆã´­Ã¶ÝvßÄó˜·…B¢@½6¤^âè\Ãv:×°(Z㐲‹bˆÜÐWTK|õzÀ’['ê96£ø«5 dUà„™ù[oXÉp„{‚GÓ¬`OÒ®'”
+jI8™¼•ÄI›~…#̆`6Dr	Ë!,†h,ld	Å•Xÿʽ[[×;:îÑ1™	 9ÿ‰:w©>ëjµR3"¾ÈFÌ‹iñ[: &ô¢KLB	Å>ôEq-‡Ñ7ĝâwá¼	ÄwàŸ ÞÆ@3àDRþ(AâÂóç}b	“ßp¾ÉT"aöƒi•ê)ÒãÔÂ&±mÚU$nIsªE,ŠMbòç*’67e(’¯¹^ßþ~Á^ĪµˆR,ì”*TæTùÏù[ø¿)cåP‚n	%æ(K‘;OH±>©kI—·K»òÏ™ï¡ò¯Cš/ÜùÑgàœ»¿Å¦G˜µŠí¤U‘„^W[ˆü™Æ3‚æqØÁWà ¯Yª3%çH4蝋ý\†Ãˆ¸ —åTNËõxé|Ý¥BÀ«z±×ºXÐôØ¢÷ë±¾Çóµzû"y¾ºJ•ÿJ,É3“jÉ5ÄÜ1[Ìl´¦‘Î4ØyrjÒ’“ÐhJƒ“EÔ9Ò¨Yã`Áý³‡%ï#˜8‹U at Aº.jo&Ë*P­i“UÐÁþÚÎÚGµjûÿpõoӏzö‘óWÿqèQ¿‡k¿«½SÛÏÂbXúË×{*µ+µ7΄ÜCgI¢Š­‘Yzjí—B~ꋝ…Œ²Õ9.{¾™Q^öð;œ#—7¤ž÷#
+®¸ $bÅh1Þ•È*ƒñ‡ã#Ê^Åð6·'ééõüÞuCÒN$à‘÷šß¼ŸK|ið¨aoBg¦R¿ÄÃDhÁ0òZRÞD)Ü&e“w¤MM¬ãu"rî¬[u¸µî…Ž »T@
+¨Êk
+>¡Ì*×NifÀ¬˜ABÈbf·ÍÌÞ434O+3ðøùàú
+4bÔ]ònÝ+Ù}+¯ZJ.CŒK(±­º†%3¡JG¦LjYQ¬;(ª'’lö8£‰X²9–ƒˆ‡,qW*Q‰4™…áíÛ‡zúIHñù	wiB¾@¡kdH¦uŽ‘2V¦éû–^6ò,ì4¼Ä›Xl¡-ÄÃ)OlUþî›ÄŸíñgødú7ÏßøyëØ}…/{7Yq ?÷ ÞUÛº×Oü¹Ã?Îm¡§Þ©§¯›—76~oïÀ‘^™<m\›Èä(±:qÒÇe­ñÉصðµ4×ùA;ýÍÊƧ}4]Ž`GvÁ.ü˜ÿ±À¶ÐöèÓP	MŸ…³Ñ‹±+éùˆ£!p ž‰ˆ‹¼
+§ðéȹôÕô\övz>mQ¸±˜ ÓmíT:³#gS:ìñ€Ã/Y‚!MHˆ$Q3É ´?…U܍DBì$®G&q ó©ä«<e¢™þ»¼À?À¯ã¹çù“<æ‘4éÉÏÀaÕÒ–ðz=Øb6 $ŸŸ(ÐM½¿¯€‚炸˜1^ÚAmi¿ÞεçuŒ({:F”.Ôä`D9Ø›F”ãxaý%p¡ÿ„.†“P¦K–)M™:M™šL»ZN屌LúÙb—[¨VÌĶ‰®ƒXt:…*³rEÐîþYkÖIyK·úÂþh:œÉA«,J¨%‡Â‘l -H&<#ÆScÌê/¡èü­)cˆ×LÙ‹	b_Óv&Ôäøñ¡˜,Dš¡®ÈÄæe9†ÚÿC‘‡¦¦fh[€‘°¨ÝTûv­˜|‚'¶²À d¡þ2÷«ç¾œëž¾³ÄæÑÿôÚ‰ýðNPÛöy4Kg¶îž‰Õv=5`Ä/ÁÄ{NØhÂÞ;ÿG–¨v~Hu‰/·€,ØÀ!‹&’Z¹ú°ÞÚ9ËÔëíínNÒ¬u®u­u¯•´&­¥f;5ã†qÓ¸y›eÄ7âÉŒdéž2TLóKEžÐLäÑ”3åMoΛ÷HtÃiMÀð'“é\7tã’&ëÊú²þlpI~Ia…iEªß°Úô°:¹ZöúÁ¥œ¿ µ÷;û]ýî5mC¹¡üPa¨}p‘™3’6ƒ”]Élç˜8f;9ÊÍ|';‘™Mü$õ¶<Ûùq§ýKº	
+cé¼ö Àe4Ãõª¦Â±VäöK>ße/}'ï:fOÆŒf»Ñh–)³&¦g[Cî’ähåÂ	»O‚êåü1ˆÍ@X2Ö«V|Ó
+ë9ëM+gÁ•‹þIŸ,M?à?¡ÀUå¶2O$U]^P•wÉ)%K„V£\e¨ËÀYǽ\–G‰Í}Z½KÄóîX1#×=é%¤d!TËfšE‘ðçO	ÒUÒFè©Â(93%mdy["fhÑçPÒBÅÔF>K^6¦9d0¶ÈqH«ÅœLEE"¯ºLe^f2Ê–ºWú	ûe„ôM_6Èšòš2)ƒ2E,ý
+NKQ“µsY‹%kÀVp8Ôà È7û0ÓZšmC
+|Øšóá:æñX$Fê#i¬<.âÎFÅòäЦƒr÷‡?þVïí+]yÿ[n——Fݶì>¼¨3^;õâÊ[?ܲ££Ùl$N,WN~uσݹÞÝyéÁc7õÚ’/¿~áðºƒm[|o?ÓÿÂo.†’ßM<ù5æÉŸ¨ƒ0ˆ½ƒ¾Í°oönöé2ÁR°/xT{DšÐž–x^_í’¡Ó]ý1N[wÜvüã9Î%Ž8?œ‹íäü#—Kì@ñq%Î(+åh{l'q]A·-?Ä” u”RM*[h0mj5=4µ\^˜T6‰­Õ˜Ä&UBûc‚‰Q¤®ÓX5w·÷œã‡6-VÞ³Ÿí§ä½ïç‹Ø3Ï$ó˜Bð Mç=‘Å‹˜—7„œn {#±iÂòÒ€õyŽõ)õyŽÍ%$¥˜EüFo`Y>»>ûf–Ìž%,Lšû›Ç!”|þ“àì“êF:yhVo
+#ÂËB‚åjh‚÷¸H.pñß׎¢þÎ`Wƒß{·®û;Ó%“ÿ˜ÿ¥¨†bÞ@{ÿ/B.n‹H¾18Qùæà‡Ð	Ú3¿B¶ðçë­êJÆà©U³¿ìê]|çÖ=H†Ââæ¯áKѪrsW¨	¸ªeü…3˜ín·]uíU»üÞ”2U‹î¥WÑ»#¤ž×Íùæòüró˜ÉL×$œÜžÈQóCó_݆Eh9E‘SZ®[‘q-/*rRËÃHuŠÐ­¶fƒ¿ŸF«O®ûÁÁ?A+X@	gYà…\àA{	@ +¼h,†´Ç×!½ŒF§|AJû¿ôÑFwð­Î›Î)çŠC:Šêo¦êo¦êo¦š„}"¾EÄE_»Ä0º'fÑ=1eßz;PÎð7éIh…üäQö‘?ˆpíKW;Pö¯Þ=±@蚌洼FÐÝÔ»Âj	ã£F¨P¹ Æë%Ìâtäfq¨ðån„QˆEl‚,~ßùÇh_w¨5‚˜¿y
+ü¿²p _ýùÅ?_wÔåO,$VV»R«^=ðÇ' âP¦®/S¶ÍüéâÕ·Ž~¯õOB{R×k]Ûg&žº¸}åŽ÷/ú>µց ÓÀ;]„p:¡b‚ –
+–ð,ß1øËa…˜04vCpüÌ¥Kçq»âÈ0ò.ΗpßM$}71¹°VõûÛï½Ô|õÂå¦8›8“<—>¥Ýf¨ñÔ/Ò¿¤¦è3Œ±'èqædü„Dý„99,•kÔ¦øÆÄrwp¿F­•Ö$´zC­cZ`]ðép+NyÚ 6XC}•¦T­JÖã_ÆS:]`,`Å-‰‚Ss´
+Ú%š ÑŸò2XXSƒRZê–Ӂþ¢†:Î %L ü
+ó3.\€.w²¶ëÊ^£p‹Äy9ða%‘••é¹ƒ^Tbh0tC1è(šF\“ð*¡D Í†fï$ðħŽäI‡¥›)Ýpâ^| ~*~3N©ñ
+ñ­ñýq2>M|6¥johϾœDä1œº5|mKÎ'ݾƒT[;`ŸôOŠPE-ú߶icÛðƒïh £ÞŽ(Ÿ
+&7â	.‰Ò+ï ºÐ6^žÝ %¢ÑË÷^ÚjA„Çi.OG$dÂb¤‘:àx[ÌõÎ
+½V˜5õYÒäS/%ºŸ®—ñîٽ˩µJïÐ*#wö’?\Sò”®³å®ÏÜýk º£ÔYã ) &’ç®2c°Ý@¶]{S,^/±(¬>/"¸„IdXG&9à fÃ2L¸
+¿ï—bŠ¥;˜²L0èÐ.#„“¢‚_"`«°ßúì½ðd[³W²-rˆ=ÁÒ]=œ²D+]»-³²ˆvÓUç1úQ¦Ÿ[!ÒCÌh‡BCé!g°²‰ÞÈlæFÓ£ò³w’;éÌÎà.nOhOz—<–Ù¥~Ç>@þ ¼œyÉ~É9Tùs„{U|5y$ýcù5ëuû5çmp’=ɝL¿-gNvž°'™IðAp:}Úù­sÜæîvÞVWŽÚ#ÎhåKÖåÍÙ-Ê·Kä3FÙ@?»JYaõÛdK^c¯vÌ XËHB›•‘ìîLA©0.ÇÎW}'&,é•6CrÑöÊÊ`8œ®) ²‡ußç>*}ß° Òïa3À²Áô]Ù,Àh1“EË.È–‚³˜YC6ÝJ]v§ç¶NÊ\PžÛâÅÀ¨!ŽËÉði9ÉdÙ`¡#.gà@Æî çØ1DZ+4à;§/+¢`Z—Áƒ 0ì’ŸÑÇ*pÏÞójD1½~ç%§êTöWWOUÖW6T¶úW*7+ r|Ê~…“ßOsg	Kãÿö8/4º
+„Nô.™&ž™lí‹áϯ¥økI~æ–RŠ3×ïç¿k#ï`x¬¼'`ì!,þ0>Ü2|¸ÀƒáûFïáò?$äÚ@c–%u4²¨QØ(Ikø PÒÂã¹y8Î#²->$EÓ4ÚÇCƒó8Íט±Ú—²±âì‹Öìïfß5û­R(¶|	þE²VïÁ¹«–
+Sœ˜J‰‚ïªWK8‰=’ñD°QÍÿιÀ×ïþ”üÆÞ„¡ëº“ËïaˆƒÛ×-0ÄÐp¨°pߌB|ö¼“°@ØGuèw!ªžyE‰’LR†˜>M÷.¶tnÞˆjX™4Ru R€X~P	ú2Ãß½p~wïH±F/¾û®F	‚¯xáˆkó1—ozE¯h¢ÂxEÉWwb»¢Ï嶟+ÍÉǏóãÚxn<¼4nŸËŸÓÏgëSøòõ#÷|óáõ6w³™l^rjWÑ*Ûö#¼#8êm‘éÃ:¬©6æ¥&ù›¾£ô¼} xÈ&—[¡–`ó©¼´´ÑìO/3i!VÆ»Ê#Ú1íX™œG`ŽL7½BÔ(QL+“²Ž–BNÓi€–B6ê‚¡Áù-Â=
+ê/«6^ÒT›ÏEùœÐÀð’РyF¦Ó*œÅ,Y„^Ù¥pR¦RBRN94«½X®—r<ŸÃK1/AæØ–ªvLUí²ÅH¿ÁÿÃxõÇ6qÝñ÷ÞýòÙçä|ŽíKâØ'g;¹Ä¾Ä±“3M É!ãW)«ÁSª®IP«±ª«YC#Ê6EZÕUÓ$Ð:ML«¥YcD[5©šPE¥í“PÿØæ•IaêÚÆÙ÷bÝ?srï½{~wþ¾»ïçûù|bÖÐ$iinæyÎõÍ".ƒÅÔ°‰ŸÆe</ã|ßÇn¼L>³G´=ڍÑúQìBŒÄ–Éï—ì­o>Öj	¬PØC8ÑÖ©,u#ä ©aRÿ|oáB%PÑWàÉ 0(”ðÌð¥4·0àu¨Â>Þ~Äx>]ÞJ½p ”5M"Ý* ¬CöZÈÐöKV‡ê±RptŒ­¸¤ó+KA+–Rf¼{%h5A·ä±TY¡_Þ·=ŠÕëR¬˜¦XCp“+V¢Þ)À¤ÐiõΨw[þ›^}Ó:»@Ð` ósƒ ö@ë%L9÷ÑÜ Æ1±ß__UŸ¡–€Á§^8¸ö›|8Ð*
+æǵ{½JnG-šÑ·La»ö๷ž!'§6™7ÿÙí—Scø/VgîànòImrñ0p4öˆº?òâ§koä­›ÑuNn9ð5üž?ÿœ1©°>Zû ÷咁€ða˜jM§¸÷îéøŠ9„G¡_,fmóz¨yÊd{B/…NÅO%Î…Î&øf®™'È¤fN™ÇÁ.’¶#
+w
+ÉDgRO™ævl›_Å„ƒ‘É)ó$R8™<Ù=mVp…Ÿæ’•îŠy¾ûmü6¹`¾ßöQÛ]S;ÃÏóI¤×
+a4®µFQ2ÕŠêÖ0¢¶µF:ãj(6·	Ò_p¹(<b‰$œ%Õx(LWRHÄU.*c„¢Ñµ’¡àòúg‹ÔbÀ`Õ±1t`7:N0f»DâØH˜»ê8Éw´}
+Š7«%Ì„˜JL'*‰…„X&o½—¦ i–WKFxŒB‹ºá4Ç
+-ô˜g7¤ »A?X±6 d<‘ú¸^|óñ|‚@j9´33ƒÀtàYL¡p
+q´Œp’2
+mTšÂÕ…´£	ý®dÑ¥‰K%¡Ã.ÀB_r¤4-ÿ‡{ÀªÜÄni9²»P»ŽïîY[¡µöý'Ò_iŠ“‘Hz×fÜŠÝ…¶\¸&µÿëkkµwÚU¼•éïpëzOOç¡ÚþÙ¡T¸§™fÙÅÚ	RæžE:m«¶ˆ‘ 2,gˆ,ðqÈ:1ja¨`°³L]70TùufeFc¦™
+ÃV˜†\`03Ïñ—1ž"eB€„ÄeÜ÷^û‡¡ŽM®ÎPßW u0›ŸÜöªv®Á›Y+8ï„>SÜîkÀAʵ1¼\»ƒcµÞõïŸBœµã„q✳;mñ‚HÊ"†Hy!Ž‘̱qÂ(EÓp1&—y®,íìËiÜ4WáØ
+·À‘ææMt	qþ÷¡v´ÒÒ	µ´³&D6)ÓHK…Zt¦ä‡0³pL@œcçîÙOk»ø#¯RÛÎ*µŸ i×a¶52(Ç|ŒS
+ùAA^…¬¬Âà¬òùm¶£¶}/‚hÆ׫ÌYæêG›™ñ:ÛÛZѦ¹_´)N­BJwy<dŸ.ÑYI™zUȾL.ó;‹²ìVí PÆY›±§zSô©h"\’Ê ÛÕcH¶7•ì¶6Úúà+iyý–¡‹$‰}EŪ3«:+TY…¥«Å*(·’b¥iñ½‘^£/ó–q§áÄ)È++·
+ã}ù֍>Ó0Zíç=á×3Dٓʵ*Å‹â’›Qåeôræ5tÎs.Ë·)Á¼\¬Y1¼ƒÛÁoÓ¶ÅväíâÙ6—»AÐPlO¸Ç=ãÙ‰Ááüøæ'=Ç<gÄ9÷œ§qoðÕ ‰IÙ•A…TWïÀuÛ’€‚DKJz,‰î½%Ÿ•AÉ*gË£9Ý‹+ µ²»<Ö.õ°ú¼Ê¤ÕWT¢~ŠݱY°¶=Ý[é%½YxnËÌvÛÇzR+½¸·¬£ŒW’àÁo€ß—¹Ž¡N¤Ó_l°Õ+ú‚ÎÚú}Tt¬Ët‘~CZ _£V`³#­i«O°,M˜*#ø¾€§,oþ–jLÊ4CgÕÕª!¯4]kƆԖÿU‚ìZ]»W’«3Åê,ÃgÕ‘—®W²+Œ„¡ŽUá]Õ±7|ÊÍn
+wpþÁ¡ÜáE—ÛEøö˜#|ÖciÈ×æ#Åßõ†q¬cg…ѐk@Ãُ–ø!Mž/„iƒ  ÈAÿFww÷éÓ§¡NB½Ä3³ˆj¢â°´f¡v.öÁNSTÈN·Ô`
+j
+”óiÝÔ¨>õ€VÐ<VŽ0Íöå†W9˜¤½z7ô"ô¢…¾$
+ž‚}ê@…±xv€Ò>ÓŽ˜ÀBMõ¹\¦?¾¦`àÁ Oø¨ ¹é'£?èÌm>üR¤ërOQ“t\O_>ÿÉMaÅj”¥@aúh_ÿ¸g×Èþ¡sÏùš¿wb¸oäÛû;ύÅzò©þÞý]Ñ'Œ3µ^ÝÔ$xCoŽü—
+Í=ekì0 ýóõ{Ì5î‡(ˆ:ñ‡uä¿á(‚eŠe®IBª›¢W…þØáL‰¦rç]ï¥ë%I
+!–ˆ~ê|M¶Ëš¨U=íOªüÝ6ª':8½m¬È ЂIØÐÚ@舁[Àuôzm„ãâ:R¡ŒðûTB³—†óé"=‡Á?®Ò)IŠë>§  ðWèèÆÆïÝ ?G]È)9ŽÎ/ñ¿þ¶ö–rZüæEö5fžýó+—0*༫)áÝê4¨!	±­A$·ãG‘ôEi%/CM¿Ä1Üߤ ”ïNI’½SÞiï‚—­@sÙË ¯ìÕ¼&W¼7½‚еõ–õßM8@¢àq¸	€³Vš­:‘Î}!ëAõüÀF²Yc<¨®ÖØ(®+|ïÌìÜÙ‡gggwÇ»Þ×ëõk½^lð‰'µƒ©[j7ÆÄÙx(éTñš5Q"Œ(Biq©bHID*.b£VÙ((Å’ûPJPnE_A–•F‘KϹkŠ²«™sïÌޝ{ï|çû¾ScŠq“V¹BQ¹=Qz	É2i؉’˜1IYÝ1	¡±g 0apÌŒ`€•±…z¾‚Õ¦Vù|ºÕ˘¤ëöùÞïß>ðnï;[¼f(Ú RfÕ·s[ÝÑÚZ'|>óÙïîühtíZñ웫´äðRÝÒŸZuùýÉ_G ‘ CÝ ýÏiE¢÷õC¨’=ˆ	Ùƒ‘¹ÈFÊëdkØ,Ø’³ˆ'+Œ?åýиr%¶RŠúNçÛ/,p Ì^@„èI¤Ñ
+™’Ä·WYñ„Cˆú7K}Ž>y3ˆDÙ³Ž]ŽQ2jMAy8gΓ¿9œkhÝê%¡BtWh$úªþ}ÿ¸o<ôzB8•<C? —Ø¥ð¿”[ÑOÍ;4$ÝúúÄs4¹˜d>“þêÞ<1áH aAn\¬QK –f™V¯…ë·ŽY“VÉš³æ­E«Âz&vÓK½—Œ”“Å°Žä0Ømz鶮&<´ÇsÐ#x²i&6)a2N&I‰Ì'^ÈɝU{«„Þ*:QE«¦©ÇÖeJdM6åfÙ–rÇŠŽá„k¤¸i!?R\*æo9¬Òéö……"§î[úrŠ¹úbÛc;câcÀÇÅAȍ¶¶6ÚaC€²‘ ‰ÊE€÷ÎùsMËQ´62cé—Z™ðh V„'¹Bhm!kЮåVÙ.Pæ6±;umï›ÿ¤tjÿ/V6®‹ûÜÉä#;þæñ±mßXÓBŸ:û!•o^£êÁM5Ùšà®D¼{Ûñw;š^„ÕwÞ»%9€¡$#|m[5Y‘U/‡8¨”2À8؈38aniɇx2=4“ÿ®~asHš!aFÏ‹%1jèÅ:R—淝ªÐ¸ÆF‘;d®,tÙaÜ QâàqŸ¾×a1Ý¢ˆC£Ã1jÇ
+1!–pÃ߸
+Îa†„„3`4%¯ÎÞ1ÍlS=ÿ
+_œÜ/ËÙ&Îj³é2¹¥K³PsâdòùÙö`6 8ȍ’½W:ÓÕÕ’ÅùJº©¥}YzÙñª4š=•-e™Í
+$k4ÓýŽ~esúuÆ62jf׸º\[\oH?m8–e¥ìbZ0MbZçínPÁÇÖ›=æÓæ3®çÌ—Ì	2ažd3ìbƒ»Fñ×zÕãþÎ`¬Öx4u&`˜[jò]K4ÒÆÆ„èN·å1Ñ`èÁ‚1jœ2Ä„1nÆíú^æz¦®©ã{]­rGSÇî2?‚ËXɃ÷Å8a ǤGó#ÑÐdUMZRjS5J½IÒœêXʤ
+ŽFNŒ´L‰ù6D8à»HGŠyÐgPç²ë Ä­˜±,Ç•Žd«¯Iø?†…K£Ý¯Ïñá‹=ÀUé
+êËx-#’qÿw±I^¿=;ðØÖÉç¶>»áá»}D»6ýü('Ê»7ŽwE}ÉâoèµÎá\Ï·._ù úëÀ—}â$	˜øÊ2¢ëôÎã••¦l¶	5B48ÁFq®Ä†íóù EÜ‘”¦1ámÍ8»Âï˜4}ïc>WÞÃlVºÝœÐA‚Uù|žÃä8;[z Ʊà(9t$šœÄò$ÊOTð!v5BXc&›d"a0ŽÇ˜ÄIoK§%Å`i˜‰5ç@ ‡ubV°ÇÕB€.©j"þe	OÏΡŠç/äóé‡ø\a¦w;¬…òá)>a3
+6-š3ìh.³rut·(	”ˆ‡X]¿Ü×ÐÔ‘ÃÎÿÓÆPå“¡­UŒŠN™9#øUyLxMÞïyUÛû±ðnè¬ÿÂ'ÞëÚáߢ_/°‚2«s~À.{(«ø® :1OdÈ“îÕÎ
+B—³'±YØìÜ&Œcþ±ðaÿ	ç	×´rÖ9éº$üC˜÷Üq”9ïŠqïÆaÓ&™Ì^‘¤ÙâTýzN
+îNo¥`0ò‰Âœ‘Тú1\³7ê9Üã§"ß»ªu‘œ× Ï»ƒ†hÜ	FÚ¬Œ+B³rP¹©ˆšb+°eR™Wd夔ÈâJl´õfÕV{U‘¨šjªâ¢JUœ‰öRíˆw,;(6-ѶóÀçk(4#©ôˆ^xíçƒàµ±˜åéÁò5OÚÚH1O;¦dB¡8È‹üpG>C<͝ÌyìL®§.ÇÊ9ât¤Ü‹”ï-÷\åž«Üsòž­:sA-œ›¾\œ
+¾äÒýr%ú 5•Ë
+¦£‚¥,P/ ù:ݱcÿ“û2‰à•7Þ¹ýÙ¹#—öÓŸ9´ðöÕ}{…uW_xaûwc¡ô“Û”ýöäځê6{ø¡BÄ—¯‘´ ,gw*Ãõ*c£ìdlLìHšjªLµž*ا:ìõ§¶Ž	ªê<õ¹H©2Ê“4É¥T§â•„xë½Ó4rZ—’m_(i¥öÙm¡,J%´Ó´‹ø½€…ï}Yš!^>†ÀP;V/WÃ?)õ”'"•1)÷Õ|×l7ÏF~ú×¹¿VÕLã}	º'xüì,úVLÇG˜‡ƒ‡kÄN±Ó³1¼OÜçq‘h6³Û—ÇÙ„2á|K{Ë7™qj2ðÔPÃPZˆ*êT\9´‚NÅÙ´¨Ø‰d|"þ~\ˆûªS•4Ý«Q­¹¡^÷É
+si ðiúø™ƒPðNŸŸ¦
+éiªÙuõT÷ú´C^/­F°ž)Zx\»¶ÛÛ˱z%¶µZÆUŠR‡Õ’:§Êj¸ñ¼(‹¬ì òePnZ èòÊv=„¿ço€
+µƒ-¬o_‚Ê6‚돞ª
+5©`Mʨ‹’Ú@u”.«J
+L’/ H[´ZnÿcºêcÚ8Ïø½>ûŒŸm0gcì;86|Æ'>>›šð‘„„$K:Uí4a’Mùca;ºImJ«LUAš–UÛM‘“¸ÓÒfªÔI$Ùþˆ&mi³©ê_aB]M[=ÏkSÅp÷>÷¼wïÝï÷üž'­9Úµ(i
+H3¦j•_SO¹æ<¶ó0ô¬¯Ÿ¼±ðÒɾ”¿¹§„ºï1{xçÚR[‡¢D†ÏNʽúþùáxƯÉßt¹º^|0xàÇØeÿ
+9y?ó<sŠ}CÅéžz#t5Í2q¡h¸»pÌÀĸwô'’1ß;Yœï=*—Ë¦ËÍß—µ¼<²<öƒÉ+ÍWÄ«“ã{¦rsYü(õÑ؝âýâ£âv±Å+5õZc:P4ýª®Î·0n6-ZϐÓ!ØlÖzÞbq¹-uKAâVö>.;A‡‚ø9­ylõzg}~5øNðƒ ¬·nœT— Ø‚¡º
+Ç:WåwädV®Í¡-L‘a¬.®HAoAW¡©S˜j$R§»æëÈ¥:0°LÆ]"C¶K·z
+|§‡Ly–<ÏmßÈ5Îä ‹çÌž#äHG‡}ü}6	zç‡s–g“z at H’ùärr5É&EÔפ)‘Ô²	višLãÞlÀV0þX©ñq‡€±­ó6 Òt0!ŠÁfoj9B&#¥ÈÈýˆ1Ò€#¡ëI)Æ?u'ŒÈy©˜,êÅ5xç¦"NõÕ[Sņå×Gɨ€“F»$7±»Kî{ì+{Ÿëœç¶bbà¦Ïè®n뮫y’ïJ²S¬aŠ%+°_¥§5E[X•ÅÛcšŒÆ-Ü#ûÒéâoÉ·¡®ãß}UTÕ§Hˆå[‹;ÔØR?Ô…§ôB]Äè¯.ŸBî­°U…ÏP"òÂÖ"V½³Ðàx*Q¾'"@'ŸlAR¦¢'øI<‹H<$·qð ØÂ?eÜű™¾Eóµ6‹Ä
+vwõt¥ºXn 4Jc¡Áiñõû}̘6.1ƒ$/1Ly3÷1GÕi‰‹£>r<<ã#'fZûZ`xK?s¸« ‘±‚–Ö
+CÄñƒÆœLtñ1Ç¢G$f¤yÈÇPr*>Þþ‰²ýË_ˆ?²8‹b·@¥Mç`TœÙ â]'­ŸN‘$ @w0˜A‡Úk5‡™g3ý£=XVi)(¦Ò½tiƒT¾´T8D¸g¯àZ›>½¹vyîjË™X»ú­ÌÆ/‡ŸëÈI_éîÙù—ßüßï¿?VïÐÌ_M©YÒTxa85uøìHÏî:“}/Ü.ÿ¦'õ󿓉èÏNýhC7q–f/oâ•–n6†²ÉldM[é蹟Ît§E18h9è
+´Ÿ1üðÂÅ·f/®žüâ»='ƒIåà¥C)·Û¢ÏØ 8ýª¹´a¹¦­‰+ðž
+!/*x-zñB„brŒG:­ðÄ©Bµ #$§´pœÈF«Õp\¦kÈq׈Wöþ[F/OËØßçu;eº^œ@6ÀƒÔ:á#̤@xíšn¹Zš	;Z;Œf€ug'Ö‚ º(kõ MZ…»…
+µêÙ„qã™Úðdʉ”ÔèîNÁ¢¸¤#ÌSùå©äòT–y‘ºDê©K3½D¦n™ºeê–a7Û4Ú€ñy;ÀøâöÅã™ÞšjSѮٛ˜tÁ. ŒÜtP^ˆ[ôÎŒÓøÌäÍö =´”YɯgîdîgX•#S™¹L	]z†HubÔ侮vÝяúÃ…6>ê
+írÔª°
+z¢]'R~m˜Há4Cw	i•Ã!ðQ±¬ðä:Oì|‰_åïñFƒT0ÎÈJ"ŸŠÏÅKqãR|%n¸' Xñ;ñûqc|®÷T‡ÂSL(1³Ü©¶ ËÈDØKΑÍÒÂ_>
+^Ÿ©Ž¶„|&˜ë¼æV”g -è…Ef–@ðRQ¢Q‘†¨ÕîšV÷‚XÓâ3ÓҼݽé}'TŒd|þ•‰R‹«Oê»›ônž
+'»^.4eGwû´7Šö€·©³8M¯íœ½8râ+ú¯w7#‰>E	‡„	2üú™ÎÔä®ïL" (.>s‚=P­HËsp2_ê™6ÃóUƼÇ( ­g§ÂÝ&‹ˆdYDdË.‘µ€‚ÐXÆ#
+|VØ
+ÆÝ›8Úb÷#>ÿ(×èöhŸnnP¶I`@ó¤</_n›Ïq„£™,fä·p®sA6ø ‚úæ¬ð°ZJȪg ÄLu1¶Ï›D9 Ó3®S«UC÷ôörÇuŽ0ÜgÀ›2Œ$·™]¸½§ºgZ,J»òÁf@ØÛ(pgU>ˆH|ÊðܪRHi†Õžýáf~s–Ö#5*xV2§””eMÙVL’2¥t<)(˜ÝÝ)Úfúªm<YmÛƒ´Õo
+â*´Ù¢~'Ð"ìüò°Õcu­ÀV²Óf5»œüŠ…X²¨ÁëC6º=¯±ß°Zm›"êjVDŸ7Ý—ZÉ”HæÄ’¸"®‰Û¢I\o_ÿ¥>ör ¤w«š¦‚òÂÖ„è–àPŸ%‹€õîZÚ	:âú×Öá}\Gcýý±X®ÿ;ž®Ý¡¡D‹Åì÷ú"
+¤Ñôväb±þ]yG:‘ {sÇÉ×®tH»Rb{çvGɲiP%µ8_qÑ"ÈÀï÷¤Œš5x>Ú‡ç_tWŸUlóè¶*{»t
+é0þF§pŠ§.F¼Z#à€ô)ên¹+0[›­lÖ`©ªûÀT?„Úåæ›^ÂyˆŠo:ß«ÙÔuº:¥®¨o7¼Ýº¦r\,©¬ žû*ë­‹„¥°?2ìÁ-qÇ]^KÌÓ"E­fw…4è6a¬f¸³}ÕE\ò¢ž‹U?³þœÆ&Ôæf/|ß*jµuµJ °"»Dæ¤5i[b%	‡H•½CŤõ˜ú'¿¹:ñ„fb¹qS±Ü„0òõáÏÆŸÀׇdô)Ÿÿ?ÛeÛ¶uÅq^Êú°t-’–LJ²%R–l™¦CI¶iY‰ZQ]j·±ÔzeGœxC°ØGl
+¤C½‡¡À0d.†¡@ó>íun›v.†­FP{X€ Û0lÅ°]›5öQt©ºsŽ$')&ˆ—‡ç~H$ÏýŸßéì³=ßµáËo··[2dY!”´Êʼn¤<’
+KɱIa©ð0RëÕ/& €ù\Àt-,_Ô™ÏÅÍ„U©X;¿~åK§ŠéÄ°òåtÌVïEϏ¨{Òª´»_½ùÞ#™Ìô€mlíEñ‡/YiŠ &(‚ÐÇA÷Jž·»ñc%(ýÇ©58†€B-£<*¶ÀPŒ áZH˜ËÙ:ëâA	¥€Á¦üo«\vì'ب¤¸ mW&—̽o<¨%Æ&è‡Ù´0.8{ƒsDs%a<Îé¯qÉ7ûù …·ç/¯}ð†¬ÛV">µuïÃëà*¨&Ä'l]¡³uQ“Þ’ÊzYôÉ¾?îÿIp7´Ë/J/+_Ö/•_ËñrâŒ|F9£C>§œÓ/Šý7S·uq§ÿ{á«ž«Ò‡â‡Òmå£Á@U©Æªú¼Q-/HÛÁoK¼8)cÆx¾<ÏæeÿÜdOÉ+F_F^ckÒûò¿dïãÊcú•þ+Á¿½Z¿*ëI]T|Dò…)2àI)Ö}'=;“Þ–¼¢¬D|q)™Lé'ž®ìççbÓLös<£ç8ãçao}ñçðÓ]ºáD7ðÐß'Gh&ãÒqÛ.ÏßãÂä™k€i4Bša·)KLT#9®'RqP%7ûSA$•\f.—¯9©¹ãB^îd
+=j0ÑЁ
+LŒ2&2C0ôëˉRP–cÁ’ hûì–[ñß„BAD~<†
+|‡‹w8»ÎÿÌÅM~ÀEž×´K1KèeV´²ù¼`Ëöž}`_·½Ë6Û±wmÑÞ˜/ï³g_Oÿô[´µ·¶×ac]>!oÿÍ®ñbN»ª•8Þ2E8r¥òBØŽYáïÊï¼èˆu3€|›Éöì{ÇïoÁóÙÞÞÚZÖ·Ù:}„-aŠ•·¶Mê}*/8’.Þ„T1O…Ê!<)e©sêïœ8œ^uÁ`í…l‹t(X³8³ã9'=äóùýªi0ãÌa±Â0ÿh®*ÝVO~x‚ÒãìÂS߬ݼù•ÑB6þpûãÃí¿ÅíFÛ^È…¤°‘šT˜ì½pwó÷Ç9&EÃíclÿá|:f³l(¢Í°gÚ×[ó1–Í*!-ýEÏ#—‡•*ÍC at X(Í{±ÇWàñU”û˜Ÿ‘f0ÒFšÁ8b6Ê7¨Âà=„âZ(`¼ûÎáÞ_‚8àðˆP$J
+JÀ4¬W1XX3ÈWï«r¢¤h”r
+L?#Ða´Y%üSèáñ"£=œkêà_…=ÒᜟïjÚÍ£!½Tfñì-›eÚkgç–5æjËÚ†¶©íj¯À@?7Sþ£ÌLùr™hn IEÃ_òû‚Ëðî2œ°Å96»ËÙ2g|“ïòWøî審÷aKß«•{ ²Î¶ªqʃlÒ‹ŒóñÙÅvµj'Âz,1¡0Å{῵Õù$qˆÇ½¸Ø¡gÊ"¾‚çgšç·Ý,¢µ¨Úl¹ø®4…^­Ò¬zz_ÀŠ¯=®„ï¸`Ñ(«XZèZèB›ÆQµÅ«Q Ô(Pjõ(þZ½7¯ÞË/õÞ`|âÆql=ˆËÔ-šnÑt«/Ð
+¡£$ã4¸þÂy¥\®o¸:-‰Ô/â%…ÖPh
+ÅÀHkJ”ûŸ]é¬aLâpý'7„C
+±ÛbÖ1Ôx~úÑǨŒÅ•¦‹còMödó\óù¦§¹ê[,ÆƦBþʔ׏Ìq;m}ÀêÓüôÚ!q=`vCZˆw‹ÎW©J°#¿ËÃê!¿×¿Ò\õÇŠ‹
+E¼bôQ±|æù¬R®jtU«Ã}Ü à7ŒSðœ>¦­AŽãÔ[*ªcŽGg½·ƒÀø˜zëõÖ©îÆQ[þ9pÝóµjE¢wo`iåÔÛÂÂgÂ‘‡£ðÙo$bñX,6ßù´†Ý‘YÿõÖGªgB¼µ¸i
+°Ý3†™Ší‹w/–ÌT74Z7S‹'F3¥í{—3–™*ì{.gjfj÷áL3ר­¤šÇf©á–͉€à[\]Ã36Ń!¿¯Ïë_\(bZ°ô)+ÙtÁ`›Æž!ûÌq¥’i[ÙùB‰m–öJb	}jc­–­×õÆrCÜiì6D¡!7Äìë7£êlcãTk_|rÖó±}vöû„¤]"…:ŒOßëœ*O ›Â&ÇO•¾
+J`„<ðp…îÞ·¨öŽf¹40–ÏòôK£á±¹bu TX·0i‹A¾ UµN«)Q­#3½\’Å€”£ÝÓ‘C·ßçÿÿ•Ï[>;xäk3«Ï
+=saéñ­´:œ{¨]‰KkÁ¾áܪóõº(]hëå7=õäœsòH¼¸Ô>VNçæ$µÄ[g¥ñɳgž]Zj}®ýUCÕ³YMÎ(Ë웶ë<²ÚK§mpBVz
+|E79Uj==7œÍk²Ó/Mõx˜‚ç? d3â¡’9¤dâá"µá€¤fPl¼Ê$³f€$)@z =¨Yœ¦&°Cå¸ÏÕž<ñ.©wÇq¸*$ir’JÒI3†K˜ÎfÍ¢‘Ñ9µ-ˆ3LaDÌPHú‹T™§~	Q†cŽ1ìÉJÙibJ$-Éç!'Þº% Cˆ<ˆÆ÷里‚
+ªÆ¡lœÎ«¸‹ñÑøšE²é;ëKÙ eÏ )E€T# ŠèRɥХªÎ¬¤‘Ir$©3I7Š^³'&Š	Ž0Mgö”v¨ô0çæᶐLËD¦ˆóGwÒ	8¸ÿβ³ál:»Ž÷HsÉށ«=Ç·ç\wÄ=‡m€ãÀñ$ª™’ö=’«Œšf*{b4`¦Â'2I3•píL17Y+¤ŠÇG„ÿ‘]þ±Q›g÷kûì;ßÅöýŒÏ—ؾÜù|¾»üºKGXcB
+IÇTàJJ£V+lùÁ(¥$ê
+m·N¦©Ô
+˜6º©S— ºµËÚ­b)lbØÓþ@LY›MªúÇX˱ç}ï.tjû}cûœ×çÏó}¾ßD¾@ž8™HH’(ÔG’ü¬Í»‘äwŸv_q³îô[NÌ.4&3º=hØã6;cÏÚó6CÙ²MÛ¸{ àí‘(uhۤʡÆoWÆš+Å],®–2)ä€e8ÖŒ2õ
+ÈÅ).µVÆPÅ¥	ø¥J< ®ä/pÕBE~þà]P@ý?ü^ÿA#"zÛ7–»ƒNA`7l?ò¸WÄ…º·]Òku¸òNÿ돕§véцdÒJIèÈ“O•K‘F¨´-£è+g·ª¸ÎhíÌE¨3‰j¤}ÕJk HØ¹J¦“½^Ø«,®|Oœ >È’ËØzÓí•MªÒ	¿K\ð]5N=ø<¾NÅŽa¦T6DˆùdâàdbßXâð”e5ŸO×0X¤a¸ ‘7v6fÂè'‘_F~‡Þó,6^÷ph«gsdWøzÞóœt=ÆëN¾“Õ{»Ó:º~O¥õ¹k«	°ø¥gÁÿ Š,ºŠ÷ƒì;Îβó,Ç~äsà¤ã;
+§WëíW²;äO&³ÛWJØÓõϧwöÏÞ¿ûœOë;§³}_Þ=ô廳@±°éwpìú5¥2yŠ¥BL~Y^Ž}îOèÃÕˆºPcÀS´ÙL.å—BÕˆTE<0Sx˜ëdÅØ…½õuÁ®@V m ì7:Ô;äøÓ‡¹£ÂQñhà›‘ÃÊáwi‚„ÇÓ û‹1ØÂð¥Ÿóñ†Ñ<ðâ¸D“•êìèêªoâ¸p(€™„ÎASWxüÊô•£>ù‡6ž~ê¡ã_ÝÂ̝zfî‰ÏfÎ~çõã·Žlè9uì÷忝y÷“çG tܹUÞƼ	¬YT‘nª²fw;XUóB‡Q”`”2;H48hDˆ9qýEͯÝ50DuÄØ1él€9õMÐÖz9À~´˜b×0Ç[D…)¢Â:AaÁ¹­Á%-¹µ"´ò%ÖVBlMZ/Rù;ŸÇ æ̤‚§‚нVG¸
+•ÀáEýˉ³fÀUiN´(a1^¼¼ ü¦{äŠ2¢Šb‚x^­ˆçRS}\èÆ´å>yüœŸ=™CݹžîþÜžÜcþÇr‡ÜSþ©ÜÓî³ü²û–§®­{¨0Üq°ƒuºQ«›Iہ تèɦ ˜++AYñK£6сlša[ä.„WBóxMQEÌ·ë¬@3ÂœÀtðzÔ‰Æ`|<NÏÄ—ãóñ…øÕ¸+>²îþj˜Y/Uœ\ÁfkÒ__”«ŠÈˆ2ö?„h£µ“¯s›)_ªÍìäój­ƒ]ÁÓe vo‹AQ«è‚PNL–¨‰ Ș…0v:˜CžphÕL!²æn at rU,PgÕèÐHMmyaàÛ{'žm[W:__ì/Ñ5V0,'4ÅDñk;G﹯3ÔÖšdŠ“L=tðék+/O‡¥æòòƒÍ4QÄÛ>ÊìnSÄéòkc‰uC;¹ø§‰J X¦6•·±°ÜHeѵ*ËjŠHe*ÁC˜C¼†ÂHęďM„H|ˆH|ý;ÑR˜üç<FZta‚Ý@¬Ì7r’H˜
+g¼¼Xáç½RµKÙBlš…XKh,ƒ9Œe0ƒª¤jÈj&–ÛP¬ÁfÚižiþqúL3Û¦¶Å{2k³²£:ñÌÖì4¨kƒñÝ™}Ù1y¿º?>–9&O¨ÓÚD|:{BýnöéEõíÅø2§²?¼ªþ¬áõìÅÈÛ°‚¿f?Ê~šÍ͇ÌCé‚/_
+-4ó;ƒ¨É-Úo5![ã¬DL‘4I¨6•0žçÄXŒÒuc×JéhÑ#hÍ!¹ñS Sírx0Lÿ&|%üï0–ñÑpo®wš(qvbrûÊíl	·g\D˜Çõ+=·1bµ7+Ét°>YŸ2¨tvf$a +dö°Í=øÖf©I¬€h•µ<a
++!!Eü÷¦Â("€×ÅP
+ÛÊùàÚƐ²çÙ¾D¡w‹#©uß²F{ÆÏüèP÷^fîÓG†ò
+¦){‹`}||y™†Ñ¼ÝŠ~ýúíß^\(Pà|ë ¯7€¬4:_å*!Ééõ~‹˜SKÑ‘ŸõÉW¯ùZ½æHu¬F~Œ˜ÂôéÄÂê$ñ’‘Ì(‘è¯ :…Jvâ€5fM[Œ•æbµ„î
+äÛ/¸RyñR͉Öú{ß.ŸóL{hÜ@á`¥D(ý$Áâ5þ—%LþIB(ž¼Ïézƾk&áþTkÏÒRiÕCÆœ1ˆoRžÎKíHO±¼“Aû2HÇ*GòâÉ„eRšµ‰¼Ȑ«Ìx§(ûo˜a(á>9âZôÊPþ¤®ëš1f
+š2dHˆÆUÃeŒØ¯~Àµšñ&oLL²ä•É•’¿’åŠTMðÀãN‚¿ƒÆÆæZ'ðRM]U?WiUG‡î;4µfkG2±+7·ë6ÞSÎÞÛ\u	U·fæÞ¿7gumÙ–ûî³À¼%#$O=|æK
+ØÀ/£wnÐ^ÚÙŽ*/VðRp°;£‘‚ß?RðûFRLu[>|ÜŠK5ù‘p#ÍãóR;ﶤ8ȺДt!—ÙŠÊðÑ#zXCši¨hDWi5à¥zK%ð@­0ÂP‚fڃ߷tmI¾V餫täã’åf3-Ðâ¢3í|å6Ñ@¿p=á¢]f†ß¤¡Qí­™/Â+üØQ1-’TÈ«n‘¤+€Ë*ä«s±2.‚‡*•ð&/.–zäÅ@NÀ¢0:¶'Íс@‹ã-æÒÞ¢öíN½,?éx!-Ø#…ñÂL“
+á<ry¹î²¸˜\4ÿ’ø y=w“½™¸™\ÎyÿÇwµÅ¶‘•á93¶3Ûs³¹Ù™ñmœzb§Mܬ£jíBÓÛRZ¢
+`ÒÝj%Š ¥A…E´ØR±¢YZ	²¼ª„T„D»¡MÝ­²MW,bC+A«}	‹P´êC]ú@qÊÎ8»Ý¬ÌùÏÌœ9çdæûÿïû”š×ð¾6pÜ;…Nѧ˜éø´1mN['N•""ižáÂ!‹÷ÞJÿ!ÃZL"¦X‰¤Þoz³Ü,Ö>9”b¤àíööM½Ðÿ‚÷bô|æÂÐ=æ=+ÜÏnLQt
+õ¡2¢Q稅Ruyƒ–ÒÌ”Ñg É°áÍá›úBßL+J6¢KB0…~O•Ê6R~©Æwt]k1Ûë±D¿Xúm!å–ó®ó‡qZL¬.LŠè 8)ΈŒØB›ëºkè¥>±^ÓEÝIwÚelwÐ¥ÝבMmBökϬ'ÇžöÔ*1GÆÇÌ=vPc¼Z]9÷A´A{îuaÛ´"ù’7 JyðiÙˆ‹D„ÑR1z\º9®QÒýÕvc
+IíÕ¶ß']D—J6¦Šã¤¦[…þ>[’C=}²c¡P?kA
+§,ª§´ÐzaÇÞÖâõ<”ʏ
+Æ8š¢ Uá¢ÞDMºÉ4…W"3ñcÆœ±fÓ?É4 ‹è¦&”3åì½³Ù³^°1ŽE³\°õ*WЫ¨ÎWi8L°s|ÕÀNBç«%¸ä‘ƒ«†¥”R‹Ú¸	9gVIЫYsj5ã‡0„yµêiª?—âÏ%*°„K(UÏVð3ï×E†‰UFŠÀ:<Áûu%ëD`šLªøÿ~ðnÆI¹’3]&ëMôöúu‹¨¨Œ<„Uˆª|–X ¬Ä°O¥gœü7¿°ý³vßďÿ¸pô3_qâ½DZ~ñÜØþg×þ:0pöÛ›÷É’f.¬½uúË»ž*ô—v:w|6ÅhÇK?úTuì‹3£ÕýG~Ú+F5¨a±Çÿ¤·nP&êtkX.YW †%ë¸@	a
+³W8®¢ Jº*!2t!<31ø]„ñ3ªÀzb"h!sŽB!`²Îí¥rûf—ÖAí—?ZŸôÞ0¦¡iãOôá{Ü»DäÔzGÇz.†{“DÅÇЮ"ËÕŠ°¶`¢ 1AÓ\°`6ø€LwJø:ÿ¹B¬„š´>ä¿âí%ì	;·EiIºÙ ‚!;‡Ïj^¥"°­áêš éZrVžÕ¯Ç¯'Zú=½§™D'
+´7¼72žˆü[†´¸æjL"®éƒp3_EL|°»[f¦Q(\Á›NÜŠ¿K4Öó1ómJh¡ûuÏò,•““t’B(fcûT4­"J•Ô‹ê¢z[ý›RZ¿>¹n
+:8Û·HUÐm¨[¨ZgS§Ô†[+è“"êlã ˆ}¢ù§ŠŒCñŒL4ÕÈQ\ùŠœ©lÞA»ïÞ*8OËnfz[éÀ†—G¾>ÐÛ¸±öçíßŒ?Ý_xîÐÐÄ!úKNâðÎüó˜éÇ+L‡9CåèÁ.ªn£‡íÊrÁ.àSû=d§ºs¥®ci†báqÊ:Ü”u/
+ÕËx ’]·žQ-ì¨JzQ¡‡…¾Œ­'ËSååâ|Q_Âß÷q¸T$aq¹ø¤ŽÚßSg²“,Ãò‚-hÑl®fõ§ºš˜ÇØATÈ6øÌ Ëàñ5CaÙ¼Mg‡ˆ1µó°Ûì)Xâ[¸C°§(n¾‹=·ÐHKpBšEÄ€1ЃK˜Q+ÈÅ®Âv1?\tÃÂHߨ½³o§4Xu/vžÎÞTÎÍ°.ÚÚ“b·ÙB.ɶÐX]å©\(	ÿ?Q^àÁ±±öRÑ$j¢[(€ZôB=§èFVQö©3*=
+ÍE•Á ³»°ÐåßüîGuPÀÐGa¼Õ| ¶ñÎ?Pj@’i‰²%%ɦ”´ÀÆI[€-À4cÄRö3•u‚në©8]t™[a‰N¢Ï®=øƱ±=G<kd'Ú:^+~õ™êç˜3;Í–œ9òæôÇÆ_šF³[7™(×9;½oó'èžOŽÐ9À¨mFmú†ÑyŽ£%{ð$ÃaÃA3‚Önß¿_+#”át±²Qã9“帴Ï	±þ¾15$ÿ'+!š\ü¶IÇÆó,?üSˆŽ-//IËä³rʧùÚçujÜ;sB%YèÙx%¦ÇŒ—æÙV²š­ÛÆ(WåG•ªVÑGÝì.n?¦é»ŒÃìÏØYîçÆ+f3ý+ê<ûKîœ~Î8o¾Á^ææùyíŠþºqÍ\LßÑòµGÆ@“Cx•ßn:8Lbq£Sý~ܱÏ®ëÇLƏ²Lb½®[Ãbú5…¦èÉà1û{Áï˧ÒÜ(;ÌkUów¡Eç£çüIí„ÎŒ(;5ZÕb)•2í¥ðr
+²àźÇº­éú ÇÇ8Ž7
+#˱Ðc{BÁ@€I¦* ›¨¡Z=MðHâ³|“ŸçÿÂù㜉A,ÕCåWÙ«ìŸ {súQã2)›â`¿¢2Ìá}ëIç6Up¸®PÜ"Ø¥º>/¥ÑtÚ0
+ÇyQvpaÕ¥"ÝÕ®FG{OÌk«FÇ)­í[‚u\]OørêD°¤‘NtUI‹O¶À( Ú¬+ý"š}s™·‘¯{W rYÐË`@¥ðê¼Zem)p Ÿ‘°˜W¸/$TTƒ²¢âÄCà€PåónÞ•ÑËíß¹ÛË
+éaTŽe¬µkýkW…>ys&—·3ƒk!:òT2ʉB.SÛÿû€	n.KÙy¼¼Ùâ1KÝlÉ;)9J{-\y).¯±B®/$†0Ìkµr¹·*unÃoñ‰œ¹Jå=·áº§YÄR|$ë·ZžP2ù·<äQGs('- ‚àÏîyŽSÀ©µ¯UkÔÒrƒ,&ÿîr‹â:ãøœÙ]æ²—9³ÞÝ™Ùõ^ÌÎÕ³;köfëv…kÁÁAª-H	-TQ‰Q(Ö²¥*±QUYj›6ê‹£>¡¨
+`
+¦VT"¹/´¼5H}pÒFŪ‹h„ZlúY;!m³«3ß9ggvwæœÿïû~Õá?ÕÌŸC6iw«‘2 À5£àrŽq/9i™µ‡f„œp©«áŸw#“¯÷8ŽõB3«(ùL;A^Ïê%ÝÕ÷Iç¤sò9
+kýj¿±‡Ú†™ìvu›1l[SÌž M™SÖ„ó3ücr²6¯i×Ìß87´æûÚûæ-'O…‚̆dPâ4ÆàÌ
+VCz
+?%Ž„ö2ûå½ÖÙð4ž’Ï*g‹SÚ”>áH“ÜkÒ¤ˆrÐ)|J‚&`55G¨KbŠ=¹e•r”ÀÇrB^Éåò ªYÖ4 ™Žyž¬©–a9FµÌ„e™°4£å,ˁ;Q’*¯%x^+ªjŸ¬$dY±ô¢"K<菇u˜G÷@D9to6‘Œ0oYã|¾P h2‰¨œ"•çÑ7)bÑ[ž`zðgUÕ	Gx¨©.^¾N±Šsˆõ’^¦2¢ 7ô®ò{å.Pï‡j䝹Z4„aщѺ60¥SIPxÄã+‡täé:­ƒAºÌö× sì_ L4a.›´Ir?\j¾É0dF,4a!ÊÂVÁò¬Öuë–ÅX‡ËŸ¸¦¥v{TI/­,BÑ3º¦m˜JÃ|,/¦ÁJ‘FÄN¤ž&~ª5D,ÖÐÚ»Ó_êÔY þb@vì“3öÿÃÿ̱C>0FQHq‚”m›°BljH‹&³»'²®ôDH°|Ir5’þèb²ƒòêcCáDë Y£b Ã‘(š€4¼ðÛºl¤†Ðå¹{뽄ᢞ¯X«¿³>Xý§¶z';0<	æºó¥• _LI±€¦$\L$Wî£7]9ZÓ¢ÇýÞ¹r5@ï¬E‰gÌPTà/@˜Àý5ÏÑy¹®Ë|U8s¹Ü…éè\¡Ê9±šJ…Pæºð\o2¾•GÓÑéØ´8©OÖo‡oKwŒ;5Npt^«‘üÉð‡U¦{Ð6ƒN+ÔÂ-q at o™n½opgxÞ#nËíÔw›»êÞà~e¿62x’ãqq<5.½ÎÌàñœ<¯çb!¢PÊ㼘/Y¼%Uy<¸;Ø®9þ÷™4 at näÛTqôºÌ)‡ÜCÎÉf]ÇtׁV©´ZäN|¢]ïÉ=ý\mJ©”Q¯7øp$RûÁ0Š^oÔk
+->ªˆHl€-ME²cÊHå*Úñâx‘.NQQÑÇ­•ï[–Q§=Ö@PˆÑ†QZ¢ÑÐ")Ãè«EµZV^æ"RÍДð@E—ù@¤Î4„nԝ‡•¨8d ‹"ÉÊN°ŒÊå\.ËGÀbþêx
+¥mÅf
+RW#¸á)”?+ËJLl¬ÌÓMªF1è—Ž<˜¥j¨6O¿G¹Ô =<Ûs¤iÜ^z°„Wì¶=ºõLG{íõlVÓ?à¡61R~aC¤sìÉØXGh¤ƒä¸;V‘ïáÅ6yÆ‹þƒŽ»íJf°?Äß½=†ÅC±¡É[X a]` °0{ x¢Ý&©z”ñ]£Â )Þ
+Cir•s¥B.Þ‚þ_g!&I‘Êu‹­¨—Á-™Ì€D¯KŠµB^<Übd84IoXˆ–)o[¾"¸ZA 	ÿ——!BÜ*„+Qø êÏxBÜÕ¤‰0'’ëÀ2ú&áR¼ÄŽeÈD]@„&yqcÁ¡•¼¤ÛÕ¡Bªâ$&Ý4Œ¼®¤Ûd“®Ù—p-h"›r9ÿËR®å‰Ð’n•4øe‰ü:4rùEñS¶|öEý×}æC¾IIR?ϺaºR))ÙÓ¨’Yà hòǤ,í'>'ƒÞ±zŠáÔæ];6꨹IÝ´olñÙîêHYéò^ûÑ–ryõjF?xý—_~æ‹ ¦nI®âG>ŸNfKòÆçVçÎl
+¨j"&Ií……¯Š²A«j(‘=õøÑ‹ý •Èê¶À S•Þ¸F&p§vo€:m #ƒL
+Ñ“èwEÒ¥ý.MºU¿[[/&ì%û¼[•›íud­‘"ÇÙT6!Ò¯TQ•ŠŠ¯ß‰EÕkŸ˜ž?µ .ôÙ@ê«M}ð®gŸ{—Ê<~H)—©4€žÇð:ñÞæ0l¯˜ýºEw՝ÔÍï…^Ý@s\(Î*lš³iSãjZ·P3ÞÈlåŽòÇ”¯§ŸÏ-fÏðg”Sé—3§Kgù³ÊÔÜOÓ?±ç©[õ6Á“Øv©·—G¾SWˆ½/U×ì½Î”tº¯—OÀ	%Ûö½Ý—ô¦¹ Ï– *à4ØâšÅ70bðoJÑÍ
+uIJ+Ä-d¦yt—_æéÃüKüßù ?Öâöp‡¸ 7…mÌËÚ·…
+3º0}¨„*¥V‰.)µúùž· JµŸ§>¼Ø]\yÐ~ ™tåé­G¶|Hµ†WíNÈBøø`ŸÈÜ	Z>7QšœÑ(AƒýyVÜ÷â~9Û¨7kUɯdû‘î'Ýz;Y.÷ܽ)2ìFõj¦Ì)«ßo¾óÌv÷÷õ¸&ŸÛ®n^½*ô(XªÁ6²ÆÖÕ*ú—eƹp̺Ük=úÖ«S[J½µ”ð¥3ôlÞ)Fpv¯yõEؽItÞ«ÄÙ œ	ÎDgbçƒsAfFBQédtSs„zNI2A)Ö%|-¸W¸¼%0k»ÒD)èX(²+„¾B#¡Ã!:ÔÙ°E@/èp\ …>š§Z+ Iÿ@ˆÜ©p](m©1ÞœÌQá9¤zÕPè?ìW{lSçÿ݇Û7öu_?â$¶;qœØNÂLÞÉ…$„¼¡<BÑp „@Jm6•–Ñmd£SªŠ–nC{Љ´DJ§®ê&ZuÓZÑÝKÊ4u)CIv®í@ t°©ÿÍ÷ú÷Ýó}þîwÏïÜsÏ9ß)]¦ÀDÑÃñfŽã9åE&Ù`Õ+OáÛUŒªPŸ¬6®±auâ+l5àÙj¹€c‚GˆV°]Ïêeý€žÓ§…¬5Ö6+gM
+a°k·XŸ¥ÖÉm-“×Z]×É&»®é¤<25XmfuTÔ$ÐÞíɽ—lŒq‚ÊÜOã—hèÇ`>mÒ¢qß0sYÖR”ç
+©á‡Õ“ ÊJÏc)Ï̼;f)ã}fE¼2f.ãLŠ82f*ãm’"þyL"QŒŠ'Ä;ƒ&EÄUç3î,Åk²KÜã.V·F¸y…]7ýNweªƒ÷©9L=Ë´ö.±Æ>ý'ç·g7M{o¾“]àÚ@5ã ÈÕ¨ú•Ïߐ›æ|l'×aêãÖ›Ö§î0©3…[uŒN'褍ældR3º=|©ÇcK*u»
+¥Žê”RÛI‰–2›]R¡$KíÒ€¤’^f¼Tl÷x$Z@Çòñ$%ëÊh<5YIÉz¢fB‰W]ž”.#å(Þ-+ç+ê”D«O‹dV'Y”–d®ñØ[ÁÝ}}»ƒoÛÙxúÐÈh º7ÛúÁ7.„öò{Ãç÷hÉN¬¹âb]äü—Â㑺‹͏‘cœ˜^Ä^r–›v™¯&OËvp¦á†ØÜŒ¤LÝF—À\A0í¢OÔÉ{R>CÞÌ f³t†ñžÌ}û=…ïÝti_ at M”°Âw[Œ0Uë©áYRÖÛ<osŸ5lj¹„ƒß?4òL°_Õ—mùà@Ãùá½
+á
+û?´fg<ÚRq±¶gapøã̵¤4ŒC€Ù•\^ÙËBV'Ë&›œ™i2©‡ì–kÃn¹&|Ä}ÕÍŠî6÷Aø­îî7ç¾"ÒŽ¬6,)¤«+JmÒAø­ÒiFâ¤+œ¬.;)è²mÚ«Zö Òhox>~/¾‰ÊŸŠ¶³—x¹¦l‹&”é-VèÇ" ûsdfyH^.XÀþžš¹‚<íãÿϹ’ŸÏL0¯iL¬H¶È8–Ë•u@šŠÙÀ/n å>n5^G¨EÑÂvkLÿüƒÆ˼ÖµÜn™ªèñ10ð6«×áôeiRŸœ5fM‘…1X9p!JE¢×éörTÝúeÑQþ•1¯Š§aØÀ”1-_þK3c¶Cg˜'Ý«c™§ebŠÂ5ñ¤SÓBÎC¿9!2–Ä™Ø^LIóæXÅ{ïafÑÊfV¯/0åU5•ÔnÞÇvFdAH
+,yU-¥7=¡êË®¯ÈÖĪ‚ÂúË×ÏÉ)_Sn0+ò‹—÷ÇÌ̬— þ灢á"ëçò@»Mev–‹0%[¥a…ìÔ6–NÀ7ª4fY?.]1‘Ñi6rF2ÇiU¹ÕîH?ÇøáÆÛL¢Öh¹m‡–ɉXÎ…ñ×Ñß{Ñ’Ó¤Õ’ù̹¯#Yu&GŠ¯Ú™_V·ie…ª/¿:œv‰b’¶20/=g°c¨[ñ\$]?‰êÚ&ghíTY¨ŒZ3Æô²9ª¥ª\´:­Ã”1HÏ“Æ{h9Õ5q»Dˆ¿$EÇT¥ôTòzvÖ-åâªþmƒ7MH6¦4EEymߪ
+.ª
+焝1‹Ós¶EU$Ï›¾Ä-Ãëôņð”\uØq8øÓЙÐë¡¿„ԏvZöYy›==/º5þdÛ˜_ö3ÉÉBQMzy{€ÎÀp€DÝñ9ª_åËEÉ)
+Óçªðí…EsQ!u½kªkp‚RàÄ5ú)¬æúß6…ߝôâ.§úœñ푝 ×Y,eKɾ'™¯®hÑé’õk
+¹åüºÍû¦/ù˺ªÈé4šÊü†Á½/züHE¶A¯ÑTç.ÚIŽ‰[ÇÐgÁl¹ÜQòÓÂÏ UÄÇAãI7MáW€ö {Hþ`8 ˆ‡`¢y©Ï [‹	ã€m°¿Ha£péÁù0E÷y,€w?»È£ð’OÏTÁu@èT…o óH¯0Íß”ÅPA÷Vš`é_Kë.&ý–œZ=q¼CÛP/Å°Œt\NóW¶.`-™¤ûq 'èm6³À–:`tßAw÷=ç€Çˆç×'Çé¾'žZ|›8T‡6£ô¬Ã¤Ïzöó´îQs/¨xPüHó@èÇ‹›ŸØ/ÿo8öÛH H H H H øÿX0P38EbÒjÜ÷à ¢V«’õ)¦T³d±ÚìiŽôŒL§Ë7'×—çÏ/ TXT<áù%¥e啨†Œ…¨«_´¸¡±iIsKk[û——.ëXþЊ•«Vw®éú
+ÖÅòó9<=vòðÒý5û‚—©
+ÂE’Ú,øQƒ&´c:Ñ…µøöb¾‡§1ê2»l.»+Ý•áÊ™™¡û”ù9(À4ci|~wtþwqèîù3Ýû¤<´’ãý¾ÿ:GéÜ[ÿÍÁÝw†=ñu9òÄežds\V“äS<„×Òˆ•q™%Û¬ËÆežäg㲚äñúöú¦ÆÖüŽÞþÈöÖÈ®¥[û»·<èêÉêõdûF´"èE?"ØN½v‘}·R¿Š`vb3õø®/zYL} Ÿ†D2"„‡ ÕäõÉ8Ì}>ž$¥7{Ek"ãß:î~M5tзã¨FYæMÛ[ôŽó‚WÖŠ•Ÿjìšèì£eŒ+׳¿;íû׎©o¡1PWyÑ•ÿ= cSås
+endstream
+endobj
+1 0 obj
+<< 
+/Type /Page 
+/Parent 3946 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT3 3963 0 R /TT4 3960 0 R /TT5 3958 0 R /C2_1 72 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents 2 0 R 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 1 
+>> 
+endobj
+2 0 obj
+<< /Filter /FlateDecode /Length 3 0 R >> 
+stream
+H‰ŒWÛŽY|ï¯83TŸKž›4i†™}i½O0¦ºL6²
+½û÷Ç}s¥£ R7"œÎ“yù/óË/—½øçKcͯ¿þöòÅÅå‹7Þô{ü»ý1û~sáÌh.._ŸV‡ñÛðbûi»?‡ÝØ›Ýxqù>ðañÛÕÅåÕU0Î\­/lg­‹æª7¿úc¬»ß2þâ·âm6WŸ/~z3ô‡Ÿ¯>^h\©Ï1LÁ#CVßِʹ݆uVº()MÁÑôìR'9¨¶ê]'1¨·}(6 kbw{ž°Ø.q*Z2'¥ÙªÇÝð$bîrÎêm»™B¤‚ëÀÛÍžöÃéR•<E_shíRxØ­èû<š—]”œÀ¢u©žeLÁh^H1NÁÏ£{^tC¾rhìüYïh…}@!RT$¾¡PA¬†RòxɝKQubµ7<p
+ïÐÝ7B
+½¥ÐÜŠ`Uq
+opÙÓ¢JÄ;Õ_s=¬>1xhÌÉiAɈƒ¾©À4Û`kWk–=.b€4t0R°‡ô¹ª²}I¡¡)”¢Â+Š‡dULáÈÜôtI­¤vR5wÚ*&ôÒ²°ãP™ˆ'5û.—¤flÓ<c荫Eå°ùú™Å¦®z­ÓŸ:§s^m¨î	T=9§gxMµLPf½Êƒò\"v¡MK
+'Ô‘¢†í9›<æÒ-
+›P4]…o™ÁÈ¢còïϨ€ÕXë…í#¥ªÒn8´vÑkèšBa2Š¯K¬€ÔÜì?ÅsJ±hKW­×¤¡ráFœ×"Fk]éJ©Ú4lº#q¿ºøý/½'ïçî½ßÄÂ=?z8i®ý櫹º5ú›àæR
+]°'nn¤eAU¬­y
+§mq$
+·s²6&E³ECÍÌ€:s+Kr€\[Ôg
+ÍÜù	^fÃ’¨PöˆúO¡<WH;rUPlBs;nL¿ÚæÝOï畍N%ôîçgæf{k[3nÃî· ±ËbËô£»áÀH.]öºú¾|ùf
+]†/$u:²{VºÌX	«ŠQÑÝÛ¾ÿvRSÐ	gÜØ›qmÜ@·•‚nûÿøŽ
+P{
+5·ÃŽG®ð6^'ƒZÉS;­ÄÃÀ%Ý’™e…ïpº÷âŸÀ¾ÔTÞÞ›V!þ$Í÷qo6Û§nºð¨1…kL{q5©¸®È½ÿKFwçú'PJß‚ñy&ÀOc?jç|ÛÁQ%1w5¦’d
+=¬ft >j
+^qEݱþÓ°™×\—a3²WYo¸à`B!e*m.c%ନ*¬éy`3n—:ºx—¹	W,8_'P8³=?0~n
+§n÷]Åe³ œw!Õ;³çr)©+¶¨ö
+ý¸{ÄžK³dU»aÿ8:Þ=ŒÄ‹ŒŽGñƒoŠ0IqæœÁ°
+"N°üœ±P¢¡«ƒYíF,›[þ!)ÉUÏ1µ !¶ ç3†qtn¯”%¸0CÒP.Ã0’Y’zäî0n>ðk¡‰üÙPÌ6WEÞ¶Í–®iœB]¬Aµñ#‡ÂÖ;=nGU¹	†¼úÔh`õ?,œsQÏm=%òГÝü]!‡,…GWz·s欩gÖô¸5JûžÇmøoÃMTp¿íê†æ¡ÂHh‚¥N'î€8EÒ.ãbð¥éé)òzÛssš`š™>ó³Ô¹Ú¼Jšb‡
+j\‡åëT¾;~g9åkRiЊ9b.*
+8ôjU	ï
+_)Üó÷Ìï80‰jøòlu
+[ ‰YÕŒ
+´ƒ@— ¡¼mÍÕ¹¢²}?ìÌvÍ-³w]>#%u×
+N=Ua¾	AˆuÔžSÍC²«Ïzì#^*jÚ8'}r‹ºûg3‡~œ5î–CsçcT³Iw‘G‹1ÅiÑ=´Áž±N1ƽ“ªjp÷­¯ÛEafÛb*K‰ÚpäÂôišï:®¨Ô0,}jÐTØq·°„P]˜ç qU?ŽŸQíɺdf3{ž[T%†ëïGk‹äJÁ‘¥¡fî”CÞ)ò¬‡· n8™&,œð¡,HX°/òѦþpe‰ÇXxÝåõìéCX’ uLAõ— 7NIºïWtÜ$â\ˆUeû09úç€
+SÖ/£ú/ØvÆg,Ìè›”f÷tTÞ1ܱö,*|rOùÅ|*ZqñfŸô"¦=:ìÒ‚*DÐFjTd¤†:6Úhqz´™Î?\>?p}y²ØÔÒÁ1KTPî}+î1[ÝjVÜFXHæQ‹OÁ×´Î!‡ØF’.…B´ÓqŸBéÃ*XD§ûŠC‘€Ï*È“Å5Rms¶“‡­¸…híÜ)–[´dëUxPŒ(Ü\œBéÒh&{KA¿ûŽû9é\µ*]ÃËPŽ»VEž90¼m¦(0½0<nZt+‹!õI•Œ²Ñ»Œ}¨¹ÐÓ3À{é$;•ìWn=Cö1=Åû×#my*0wh0”p´*߁{ÄÔ~d·dØ}nùz=òx¾†]i
+s®+G;ØþoڝïgüÚ.º’ToÚD~ç½ßÓGHB+øã+åI€Ô˜;=(
+ÍYL
+ÿlÆ8¡¡þl¾¹EGïìù;ÐQ—ôÔþùò•˜7_†~\=—hX3;jxÆ톟…‚+Vr]2@gH´†ÂOÞÐ΃cPMuƒ'܉êó#ÅâÙ¾¿Ã|íŠÿžcÀå.LÔ‹áî±Å)$uWm+5ERT]ñ€	ž8y °2E³Ë3oÄSìau鳜o;\ü¾1ýxhÁÈ(VÇ7#Oë&‡ª¢óhû¦&[¦X:RtÞ_>®`•WQawN	^@§çmód?ì´wp’Îc?ô(7Ž±¯^¢ªrð¿hèê€ÁáZŽÈ®Ì°áë§ZL—/K©ÍGjFo×÷‰Å_Åß±î~–'!ƽ¹Þö_)å&û¢ŽïŠØC1ø`Þú¿)äq’UÓÞrhÆ€f5¡‡ÅzDÕ³ã(ÔÐ<…ÊáŸö[Ó/Õ¸vº¤ê37µ³QugS;C&‰Òåê³&Óëù¹‘Ú„AËYÿÝiˆ¸Z‹:­§äÇPOñ¨ó^Õ>±Š?ª´³¢‰Ñ)z0p
+ÛżàúX›ëIÓq)Eqûå)t³?Pñw1vÉg•u8.–fl§ÈÕ\Q]nhýNóš«cY¬êyCOè-ÊíBTsyÁƒL±(µ˜ýnSç%ÉcáË˧ã.R/åºu)*<—»Ëg5ô­ãX,‹ÔTêû÷3¸@NB,Sð-Ws¬ü\uýÆÅêÐLqM*/î.¿“íW&8œ ICi;Ô)ÝþÙ|[/V•eû{l`ÿOzµìÆ‘Á»¾¢ µêýX¼ÒZÞÃÆŠÞ‹iÍáPyÌ¡{†XéïÕC‘]É(²^ŠÎÉÊGD¤ãºávÜ)ˆs[ƒûjèFnõCyÁ?shyŠX¡ÈK:r,LfrF,e‹YJIòÒž‹†’j9ú¼h;ˆ®äÊ÷¸ÐBzɍ ÓEO¼¨Â¦±×°%·]íuË1l·t4]¡HëÄ'Óݳ;çrã+fî+f ´œ£ÕaßO™ürúâ—ßÞ¿xó÷îíÛ7¿½ÿõCg»wï~þðþÅϧ/ÞœžÚŽèòvimYÚ×MÁµ‚Ú¦ßú}=ÐfÁ–ùdu
+^üêÕ „èÊa8G_Ô|i¬$¤ÁÕà͖ªÇujjð0vn¸9ó©äüƒnj핆µðÓ1ÿ€«jFlg
+¥L~ñ¤¢ØÝ
+×Xýdc^T>Ó`bJʇ¢ð£ Ë\Æ}oUÏø†Tl†¬žo¸wàƒxî¹±ÒÖÉFr$2vb>¾7DÃ÷vúu{®F0QFŽ‡µ¡Oºlí$D"UN¿Îi±"݈õk8ʉÜCÁù!j“ȹÁî ëÄ´vãfؽˆÅ͈ÅénÀ~,xØ%Fìo8û‹ãF­±õëô­%¬JvÉi½´ZîÐØ5Ò êÉVi¸îœ¥
+̽SNõ°0Š2gðæOôD=²^.í°‡È%íô‚ýñ°GÉKèìðIwîŽÚ»:á1(Öüx-¿zàf
+Ö¿‚îÆC×8K”ÇI¦Ehn±4j“uö5v};Ÿsá³w‡œ§º§u,"këHÝ?W§T._þW_ï…š~‘þ®Îœ´(ICÌ]%æþ6ö±ú·ORÇ'• Ç_™þÂeçƒîóÜF@Š¬%ìÃ=îÖ°|…½`hðMJj~öêâÈþíïF>jŸ«ïø{}Ó¼¨»‹£a]:ïð3f
+ú…³`.ÿâšA§7_îÆÿ‡é-ÛÍù8Œß¹ºãªtÞÎ?ïö7××ežÅòLB&IªÆ@’æ1J‹9Ñ
+º<C®ÜfÌ!üíºÝrääTžCÿÜ\Ñ;&¢Ï®ªV㲄¶„
+·¦^ͤԇr2ΐü—1›ÁÕÀÆ¡ŠˆI¹ªœÜ2 GWˆE<æ8\án¸4¿gá¿r®¾>ö›ÕíÔïêfýÞü[ßo°ÖMŠ 1àÇPPP
+œçäùßâàݪ컇ü†C÷Gútâ0Fž|ZmÖÔmKm\Ù×9ü°¹Ä{9{”'ÅX@¥§¸ok
+iW±‡ýúН|úðéìå«nèÆÖ⌃ߩ¾¥:b€HVB·®$ÆAìsæ#ì<,GyºÞô!gQ^rA¢,{~ šˆrG/ó¸e…µ„ÒΘd‡ˆø½[Ùg%
+6ŒãÐráw‘UkݘÞ&%ƵáÃu10â}´É“eOJ›\\{p…$«&óÖYú¬Œxõ~6Àn•Å¯SØñ¸èrÐFô£Û¯†íº%ŸñYl£Cor6°Í)Ü離dyÏ6³€'é5÷ptà]=§]ÑÆÁÚJÉ^›â±¯¡Ý8ì9ÜMôjøzäü¥ûàËhT¡yÂe20v5–r…Í	Ÿ¹‹ÑÐ[e•(ðÙÉïÜ´ ì¬ ÿú‰c1
+¸zDçÎ^RP	*1]3p!oNÈÐDÝ‡âH"	:=…å]òzÁ‰ëâ4ša0ÙË2¬›Æ+Ѹ«=Oë¯rqÜsðîjØrêÆQeèn ciR샬.ؘ[!Õ;/ÜQ©±e—`/[ouûِyLf	CXeTr~9CáHY»a-ÄÙËd¯yX؃¬”ûCc·`t,ì'R £`=LG’5àSü}2²¹\.Ò³äB¹^á€|J.¦»­­³('ÆqHˆSÖqŽårb0ƒÊ™zÞÒë$´!<#XLÔÊ¥¤ø‘u
+}Dy`Sc1žsøzlèIРg+òhè	Œ÷""(M™½¶YÄþµ¥ÎfQ9*(F·­h3‡–¹Š"*£ÕJhC¥0<`1h¯Z1ІšÁ+ë FrèøˬïÍÄ	Oί±8g°!g8D)êðä,À^a|£x—3°‡wY¼«%g±œ‰IÄ…œq‚ÁIJäË…Zö`1»é¸àb¢p[˜¼ mEw”5bÈw\Î
+•x9º¼Ã¶\›^n=]ká5Œ9W>ËUYQ(œ¸€ÌÀy0¥i—-Ãý*ZÖÒH_HZη5—³28>ˆÒr9‹˜]/Sàj–ŸP³–98äa\2øí"‰å¯øèÙ3wòq}E7­hŠÊ0Vz¶Ð
+®ÈÖÊèû´‚ó8Z–
+¾áZ1MojìQ+>R±0°z
+jQÑ"`‡èV<gB‹WcJ"•‡Â>5Ò¼¾ào4^ikxƒ8ÒYA¯¦ñT·Gïª{­Žž„‚	¶wA‰ ›âó,Öí.ôûšÄwô9à°Þ#Ú{Ó4ºÊøº=l8ç€l2¢N«Ï~ÄkðõŽO¼MŠLðՁ—ã£Í©'ÃòF%†ܳo…VÏñ½.ÂZYÈé¾7ݍ‰²óÅ,`ãÒ0ó蹫±üÒ”©c
+åî+„zùÚ­v”µµC·³ùÒ«QÃœër
+;Ç
+eIØ€%Î*/‚ú^G	ý§?¨‘–PºK:z’À5…bڍ¯êx’ï½6¢
+\R9páê9àu͐ïr4VØBêÜ~DzDvÁÓLqQZBîåL)C’Ip("†ƒk@6™%H‹‘qE}žþ}ÞO^ìØÙKH ¢È¢ÁÆsE)HQƒÀƒx_åÅ„Sãk ÛNËó°@¤h)Ø–QO^B±ß…¼ ‹âԝqÁþZœxÎJ(7ê¸ðbnI¦¨J0K(× ùde'¸Ùâ ¬[0Öa ­¤Ü†SG
+ at d5öŠ»ï©²KvÇzº[²¸~ú೨ÀgŽÅܪE¿Æ¦ëg)0~Ìf¨a[ºî$}|T‚gON‡óíš»joVá©ðg'\‡¡ÍE6b*Ã<ÿl¿þß
+?
+àg¼Ö®†Ó¾e{ïµHhµ.s\¯vãE³æY˜4;>Õ€ÛHøËP§|_ÿûx'¹ºâ’*7AÛ
+|›†Á=L®Ð´†¡•@¾j9/c¢çûøøiGê“«Øñ„s†R¹:8%<£LïËíQ=¬¿q±Ž=„B×UkIµ²I†ý2LèãB™ý,ÿM.ð 3ªþ±n5\qQò0µÅ'ÏÑçën8†—¦g›]õÁŠÌ¦×>û
+¹¾è;~w
+I¦œOM‹Å…ŠU®“þÎÕÆêÞZ_twþ•¨+K_'°:´–×>kyÕƒX<±½æþÐÅ¥ùèúÎ"žüÁ<ËË6‡~äW‰¹Õ²9täPß'DÔÝ
+wäPÞT4zŽ}Å	Ê›lÌ5¶AîÞ€Ü}¬± „›Õ¡qD Á.z_‚Þ+Þ·î(-è-ˆJÄmp
+†
+² l3¼kYé9´û̱†eIPš©,S¥å2‡h“ÈõzÃõЂ¡­É“Å8ø(¡ÝîœSNž ?Q¿r(f'Ù³Õá¨Äª¹ž÷ÛÞð:„{KÀÍ@ˆ®»]jzþOzµì¶‘$Á»¾¢°' ´êýX>XòìÌÁÀ «£MµìФÀ¦¬ÕßoTK”»Rс½X>««2###’yþŒ©zð|¿k*£ ŸñɝQÁ¿Þ¦úÇÕï^Ýîö?VµÚŒœŠÑbÔjêšÿRñöš„Åš5æàõæþ¦ÕkÝÝ~ø1†Ÿœ	Êíƒx~æùF¶Áw¶TBÏ°À‚-+Áé÷‚ùQÜ¢ÒƒoåŒúx#šÀ—ÖcÎZk¿jÚ“”»#=	=fÓdíÚSèhºê-¬„ŽKÉ«[¼ú†¯M]=“Àòê`½vY×0ÇòDYåßK¨Zsp¨¬Ø…ä…¢'{J	¢éRÒ¢=üYÑw>YÁ<*¥5xÁÞ¥SÚ•ð(#¡Ôi¹„Î'få 7Hј~粜¬±WtX<þD+u…ú2Û cÓ2k*BÞb­åâO`ƒG’ƒ“'̶w¹‹ZžJ‡Û{Óy§%͏Úÿ
+Հ˯{x•=z‚"¸·öЃ`ЊRØ—²(?ÅIáIæ_ôaô¨/onAñçn‡Mß)Å—AÆE²µíO*»¸ÑDŒš×Í
+¡…¾Û*4sè‚ÑLU“RcjŽ¦…òtfi›¢8•J‚ñ ,2¢ÀÒMgÂDCqnoCYkÐG*àK¬5È&¥ÐÂ뎨ž[cºX’èHÏý[]“)›cÃíÐÿ"Xz!˜]
+¡ÖÑ«õõq²‡·ƒ°ÅQ³qr|ÙzXXï[üÒì:LSŠ f—O¤ƒçµÁŠfó	'#¡u$ù,FIÌ’zš?¾4¹¸ú7÷g.ÇÎe+Ðë^Qú{:ï%‘¸\ã$Mvç –ê½ï"ÜÞ	Äàr%”*†ÕÅp‚bxÄ€àåP
+¼1T5•XªÃr”šAuÀ#iºä`s·ë‹Aïd7øFÄ€ïã±T9–üYÔ– G‰D N¦#êŒh+eˆCcUoQZ2„ÇêMÄ©=‡ÆêMÅ&‚
+8æ0ÿÖ&„TuÚ=æŽô~{è÷w«ýë¯³ˆ‡ðfÍ¡%˜…ðëëùåët›XÃÂdÞf§œ«ín¯hMAö‚0µ?àÛü JíáûGµZ¯i9-üyÑÚ·?Gµ—_¸áJ‘'°v؃…›Çº~ìfJòT½CWŒÃçM{WÏ*Aöøž¿ÉÅVN)può0âÜQ-õΡw)Ë{ÜÝm†õê0ì¶ã9WÞC¡=áî4@¡“„¢ß\ðìÓžhÀÃfþÔW>oX&iV÷“|Á˼e<ê%ýP-ÌðO©²kÝŽÜß”[#Ѐû=·Æ¥lZô‚“Å„:	åZ˜S¶âKNÖƸ¯æûÓ¹•„íÌX!mÕzn¨cuÉE€A0î:Q·íD‘=g˜Ä¡9™z ƒÉscfuꢤFUí,	댬 ?Û•êâÄá<¶XaB0l£IÞ#¿õ½ ¸ÎZT_ÑNY?zYOª6Cj³Çnúá_r¯›Ù8Q¢ ·´au2;·mîj8.Ä®X+ú»=ç
+‘m«“nÀܤÃ.DQ†5W»äB9a'õ-Að`R;n¯L½s.'L³G^ru×··àª%G2ML[è‘L•Ð‘ïtÛFÁÜaÉ”+ê¤GP)ñ•¢-¨ª‡ð˜$µ¢VÁŸ®Ï>}¾<»øK½ñùòÏ+ˆšúðáãÕåÙÇ볋ëk§Œº¾=iñ¿ì|°ÌÂVPÃv½¹¿éi‰ªcË¡î“ùÏÔáa§îö<|)é`ÚŸ¬öj÷õïjŸÿ¹ô¶8{Û¥ýyzÜ´ Íô6ö.ÈëÓ»j>,ÑÔ¯½×:eTÄ}À‡D™ð•£ê.!«¯|wµ:¬Æþp®V<šP÷GU¥ù¯îùª±ðéèVÝøŠ6	+–L)Z·R*:¶P~[„]Ÿl‹ìé8™‚ï{/Ê1r}{ZIÀ4`z.Q“„r¯Éʈl°çö+îÑ‚ò²x¿qõ~ZBo—Œ{ÒIÜCÁ‹ó““ë|ðâ{ÚdK—M]¡M‘—æ$ý_sâÀÔâs24©ÉòpÌNy÷/¥Lî‚Ï©ÅîøLX`CÝ»sìÝ9—$„W¨e‹Å`ŽÔõ˜€Àuøþ~ÍÑЬX*æèû=7¤ä	QÜZQöÔ‘³ß›jð‘Ãf4ºW}¡=âßøp¢&„Ž…:A‚=á²ÖÔqYÚdkj$ßçÏÖD&Tô¬…1pQ@¹â€cÖH"|ã
+âfÝÈPÏSÕ&iÙ®ºé(:êÎLŽjŽ~uýöÈÙÊûc‹¤!/ÛsÜ{u¾áŒïBzþÌäž×6O7®ê§íÏÖ«-G#*¤ºÌæàï«Ÿ|ºb ·k¿æhõ-_ûáëý¡ÿÁ‰æºœƒø÷—Põð}Xs^À\:ïÄ·P®&£ÁÖtöåÝ=5[6Ù.¹$^Ìg)¥.%	]m6_~Sôp‡ñ÷%‰«S{àð/Mâð—8§_,”¥júYÖâå›Í¹â¡ËÕ‘È‘|î5Ô×ðNy̽³Ft–2ÍM´t‚ûtS»`jS%_°6ÄÛSÞÁØICæÐÉrŽê°âb®ÈªTeدVMS?ý×{Ö+©M¯zE/ém@Ø5¢Lã¸[«C£†Ãwõm¿»¿£¥³QôŽŽN MÐÝþI%«„ù#5eà‹˜i×é£ÈÞ¬¨"gßYŸ}‹¥ÈÞ@»‰1l)õ±I`©Î‘lÝËsès|mª"«çþ±ä¿¼­ú3‡^qû©ÍFœú;|ƒa-–Œšu²Š‡oº ƒÐby"Á´,†ºÞpóWk+ Èº|ßdź
+š–ñ6$ðÒ&ñ´·”Bdœ Øw~X¿dŠm±{~‡!ȸàPtEŠ,kñÇÚŒç>IwňëŽ÷|wzš•Ì¡Úfƒl|ÅžÊP1[D×V£Ú®èZ°©&,'®L›a«2¸ *q£tÄi?IÞ„C1š¯ÞÇOÅÀ›$KüÈ¡–л~¡wu—[Äó(œ+]ÐJ‰C—ƒ—æOó	ƒ¡e—9).+ô/Æ€çäÐ÷#_ýIw.Ë—©ï¼mÓ$KBüìyyÍl´¢[¢à «ÖŒ6cŽÜ	ÍðÛBËfPUõH;wBß¼-6Z–×;‡thE‹÷wÜ_@Øq[¡S4 zDˆ²mü¶`æ)›Ø‡©²‚d|aùˆ…eä°ñÒFdŒW*©èÒöiª¸-]Ú>£¶1‹céÒöp.0Ø¢¹žBKU±(š h†úÛìN¨AС+Qº,j›þ”W†Lñ…°­rò¼]Ï,°ýe-µÀG³-„Æ<ñ0l6t®Ký7ÆMß\B§£DÒ‘6(¤ÑÊÝb\†Wk¡ŠÊ¶ÁÅøï€ÏÎZÖ ´Ú$ã]çhÒž½ï9:jŒk
+âx*ßÕ†é˜äÉÜ…Ùº–lÝ÷ÝÔ¸O×gŸ>_ž]ü¥Þ¿¿ø|ùç“úðáãÕåÙÇ볋ëk§ÀŒÛçœô( z‹#0~úHþÇxÕìÆm¤Á»Ÿ‚ÓÝýõ/ØØ1âC€ÅB›KÃH¢¤1”‘W#Ç»o¿Õ”
+KE‡'pMóû¯ª··»ãq:wW+Z=¡F¸“‹ݝÔÉ’	ØÑúþïbwÐïçþÝâ皎ºbÅ5&ðåt¥åxmÐu•Ð˜<(+y;Cè-0
+ÿ“†f4C'¸H½q°;(¾çÊì¾–^«Ø
+¯
+*YüäæÉ>Bs<ÙÇ¢º°äPr”¾.,-¾Ä};_Ñ}¹Ï)MÄQ¶ –š öm™õð³$ƒ.æruñ{éË,¦îËÒ;¼[‘µ˜²z¢§hˆ.÷Z¦7éwK鶗À£Ö]hGL´}Ù¼¥ÖŒÀﮉö%±HUÖZ
+qÅèáï44Áp¬E§¶°eqºF«%„‹£¥W…/ô®^÷Ñž»C¤
+[Ty4ì׬ßMPŠ|ÿG¹G±¤®’èY-Ä¡P3O][ⱡj!>““*h]±B5~V€<…<E?ÎOzäâ~Ú=àxjB“–~˜Oquw¿Â)²ÓÑû÷»£†Ùª}ÓOÑÓý°ÿCÂ!•s¢Hv×8³¿ÅßµôyS(ËßÈÊâHvG¡_»óÛéø\`ë~ÉÈ;àÿ?Ž:‘€y¶V(*9¢\|êâz»»îpkßÇ•£‘©®¿âÆì†Îµ5…"èZcñ»ßÒïãó€Åò4`ðƒbÀ¬OXtÔ¥3}b»”òTq©ºfÂ;†Ê;h­ˆFÅ•·Í01ž¿á¨Ï›+cHÖ÷Տ¹åF[¦¡yôVë†Qˆ.ÉñŒ]éKRÌ[Þ0ÁSRúª˜+'Ň½¤¹~²­†°añbl#ŽQgÃÅ–i$îduÔ©þ#ÔåGu_3”Iæ¡; ›–î6Æ‚µ-¥*භ„
+MR]¢Gá˜4…±d¾G‡?%Áà•â»FVCÏEX™X®FS{s¬«yÄ ¼~â¾Ç#eòHÁ˜Í*;$pÂiš§zy¬Ï)\&±]JçòSä½æUÅïçäº?\kZµ±Í¬
+vCgÖoð%$Ö¼.§¿Úé/t[ë"}aún§Ð×0BäDzYCóØfßx
+½]su9j‹v£
+ê'7*ôÃÞÉQ8ž©KÿSüåp§Á–ñz¢˜§×—š¢‚¢ñÐÄÁižß•ÈlcáéÐÁ¢s¥%ê²\›€¹Ïͨ
+zv½l‰ f6ÅP7LC@‹[ôêmYڐv9ý†á1ü"£ŠMÃ^†l!Ž­ðTjQi¡^itbèq+µl¨N9˜ÏÑä<ì`Iã0œI)H(åƉ®ˆØ7£×<YŸDGàj§µÂò¸0!ļaH":dî¼fùÍ›-ohNÌýd0T^¸Ô³Q +Œ\@³\I‡±_B÷âTh(Œ^|qÄ×(¹ŽÕ]Ø5J¶ýJ®£EîØ*%Cq¾š‡Gó0ól|âYç¿É³ÖÆôdV¯ä·pn̺=…j“‰:úØõâ)ôóQ¶„Œ2–%Vû?›êz=Èõ>ŽÁu‰}
+Ö\éÛb wW6ÐdA¯VàÕl‰½~ÖJÀ÷¢F¼[
+(.½û^këV/.¡iM^4èÑ%tØI¹åá1Î~	ÖÐ
+W3õA®±~™¢Õµ-d¡r–!‡Éˆú«	›šS£Ñô»~®n[b5WwgX©^ruB莗—ÓQzÓ¸¸ZÅ„ý5Šö|ZÉ
+–Ë¿XIwžË¿\
+PtÉpâÝÌ\‹xµféWŒ¡536‹Ýå®ë"´qc”ˆ_+¡žá În¦ã4ÈæX6ŒE?"rzûð§,2,ËXü°Ìª	Ò…
++g9ã ò¬Ýiûg W+7z›1ñÅ6Œšµ~LJÜR2ô2… Ÿµ^ƒWu|¤†Eƒ¡‘h‡¤ÈÄ] ©r8׺£K@þ¾VSÁàdùù¨_íü“x/u°˜¯ÖÓá‹V”ãåã†vÅ”a‘X2è`3J€ó´AD¢/FèÃXè¬m°ÉèCu¯Z¢­YQŸU0ÝËmì’2'—7lcÂÌFü†hñàh¡×r¾pí n2e&KÂкÂgF*–®RÑ[Š@*–d y
+ j(Duó&ÖæµëªÖž¤¯¯ß”¾an|zó ƒ£&EŸæó³ø‰Ö”¶‡¡²æ5wµ»ŽSh·¯DóÓÙ«Ÿ~yûêÍ?‡ï¿óËÛï R†~øñÝÛW?ž½zsv–Hû«Yî#'¹osÎP(õñ[ó_øŠoq,³ÀWì1"B5B…[@‡MŸîAf‡‡ýáz at xqx,–z! ¸ø5}í8ìý—i-/¿ÈËóš›	‹ó51,¾l&DiÃÅÿú©‡áAÞ¤†¾îò½?Gd²¿Ó¾}ñŽ> [	s2Æmý2ipìv7X;”ØPE†j0Mg½“Ç©Ûg\º½¤_à{@)KìJfnÅŒÞÕÏBº•ÂPI]óÉ¹â9ÚØ<×`'¡˜OKPæËÜN2Ú R·ì¨ý”!¸1X¥(n§ãp¥oì;ã
+5y¸ŸäLt…^}Êf"äØõ»¬%2Ä@š-­×NÌó\áÒwþÓä67Ã聓ûrÔr;uNiåŠrSEîšÌ½‹\W‡áñÿãöV‹²NšsÚ?— üEDEU ÎLÚè£×7ùœÙ'Wj£Á:î/¯²–!ЂV(Ƨú^ÈϤ¡F*…u˜ßŸ“IsZk×8ׯ©?ºLõȨ9¿Ä®Œ;ä|L%¬fén]1lè¤E²÷a¬9лš|›c¨>@Xýœû±\„ ¡	Ѧ¸„^®ÐKS³/°ræ½%Ü5_¶äô¡§z
+Rôù„ÚzG5¢Ï§‚[	¸€JÑç3šP3A“†¢	¡ãcÙ,cyý[šPßg±E^áá©Ò/zŒ-²K› ™Q ÿÓ,„X5JìøùâFŽMè„ç±Y£•Ø·'Õ
+‹"êyt'YßÐ]c.3Ää_A´Ó‘½@ļa%Cñc˜åÃßîN(]ÃR¹î:/ˆ’Z<E ÎÖ\	!"á?’ˆÐcï"µAêsx52T3!þi³8üÛ暏#öŒ¶’™A"£d´GÙ	ÃiÊ©ÐØÜë€#Ʀ8êÚ…~7"†Æ“«ŸíӘʶ[F¼‘+¡EIîN!ÑÕ½Ó.yŒÆ[9LÿÕÉ5Œ¯ãBè‡!iSv[¶Çú͉žSûCJh_ž•ÓÐQâË/ÓŠ>ùœkÕN-•×òr§ßµîljÞò®•1VGã8Ö¤Wõ
+&i5‚*9€áL‡ V[¥É=—4qÇÀªÆ{©±uÌŽ‚õß­	D×^pÊNÏBÂu
+|̵ˆt°‚ÁQjŸ>ɵLhq²@¹iß‘¬cYhú]ë]ãfÈeOÖÆâù2<kÞg7“ÚòM¹ÔWU~#½^MàúΧØ/R÷‚æ;E†«é[Ɛ}'{ˆWÇ–+Å«ug@0fCËIˆTG!t/§å\/e(Ktw%ZÑÅ1¶©Ä:æ
+ª3£˜õ³Ð~Ùb¢ªi(6ª0tÐ϶¾ÕN±7«Úïÿ„—Á
+Â0†ï}Š>Ý²¶ó ‚Õy<ô&ÆœºƒNf}{“¡°•ˆ÷Ÿþ$¾f&2­æé$!¤¤S;Ôvø÷ãÙE`#ËÖ,[Cf?üw" ×Ĥ±´b=ºËô}i¿Ð¾‰æiÊ¢&^8žT-•k£VÜx¢Ì‰Ãã
+:¾ZÜãD'Ñß'½g…Åf)Ô¢ͱ¬‚œÍ”Ýj©¶å©¹–¡i¯R-B(«s};åÚÚ‹Ü+çÚ§Üåt'Ô»qÅ`:iB†Tîçs·Z
+ç…ò³Jú£èC)£xÂm ZØxÒ/î··À%à„á[C©â•šrl:RBÊŽŒÁI4	²Æ¨€Qo ȍ¡Ì
+endstream
+endobj
+3 0 obj
+11291 
+endobj
+4 0 obj
+<< 
+/Type /Page 
+/Parent 3946 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT3 73 0 R /TT4 3963 0 R /TT5 3960 0 R /C2_1 72 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents 6 0 R 
+/Annots [ 5 0 R ] 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 2 
+>> 
+endobj
+5 0 obj
+<< 
+/Dest [ 4 0 R /XYZ 206 720 null ] 
+/Type /Annot 
+/Subtype /Link 
+/Rect [ 135 328 168 340 ] 
+/C [ 0 0 0 ] 
+/Border [ 0 0 0 ] 
+/H /O 
+>> 
+endobj
+6 0 obj
+<< /Filter /FlateDecode /Length 7 0 R >> 
+stream
+H‰ŒWMoT¹Ý÷¯ðrF"Ží*Iˆ	Ì°`Þz9›N¸F¡;êÛ<Þüûw|ÓIÛNݤ…D>·\®S§ÎÿV¯_Ÿ¼øp©ŒzóæíåÅâüâ³S×#þ]þ¨ñz³°j­矆ÛÕ~ýßáb{»Ý­ûÝúZíÖ‹ó?ðÁ×qñv¹8_.IYµ¼YœmŒÁ¯×ªüfƒZþR¿ºÉìýoÎÍƐŠøw4Æ«åÅoËÕÕí ~_~_<Áiò[¼Õ2˜v[°ú4ˆ`5ہïv"6 kɵØa6ûõæ«úóò½ô\Ñ&‘o¿bJV[×CÅG"âu~o¯¾×ûQü àƒ»ªõfÖñ¶{­— lH›ÜCï³ón¹x÷Åu¬7{¨·¦l¦ZñSÕHæ˜³
+Ù—ÂtÁŒã™t@6P1Üx`à8ù<•°+ÎÌú‘X;6±ŠúÌkÝÜk—.°(³o½ºØîvbùÚR¾ÑÀdz‚½ïÄøЉÎI=ÞW¿èn»oã¨sàЂ¿ÈŽ¡ÜØÅZÚä1ÂϤûèÝóù.WMDÓ€ÅBµ5Í=ô…œ	V»‡?›t’’þÄnæb—rwß5Ÿ†±ð«È?Î#ÙÞµìehÒ1qn¡ëíf¬= 
+Ì&Ôþ:›þÞ
+‹›öcÒÌõ±gÖ‘_üøp¹x5Yð¡ã™³”gÏŽ>=«BÏMè¹J ù‡VÈs“T`¯iŠÖçËÏ3éõÒRÙÄÌTY¼\íWã0W4á$«¹DÁ‡ÊêÄ^u&êR«GÜí¿jÿm®®¬)ÅòˆÔÍz7îÕ—µ<4Q
+!»êƒòÀÚz$¬2,â¢Ñ>»:Tò›¢×œ8ë\ÌÚ“µn½)jb^¼8;M©Á©ë•%“t²®Ž<À-È$ºÚÇ«AýÜ<2·}dn™»( k“a1[DðˆL~)[ÄAcÞ×Ñ]ï‘Ý	L蝭«eøöõ—˜
+JVåÚä^­no‹<§7;Ö–C¬m"ò©\‡Zt(—š²u ³…p¨ã¹ú*â|‘s¶i+‡©d]mðNÄAÂO/º‡®#ïêÀle{ÀäkÎvûõ0ªÕn8Žé‰6§’ô"oNs,VqN\´iÌŸâís ,C-é{¨ÜǶ4]è\ØÍŒF֍ßbe^rY“-üUCÅŽpÄzéƪÕyCq:¸Rh5XfH®r4…Ì·¬}¶¿¥PáR‹m¦ÅžY™&	²·sW™)Î±ó@^Ó Ó§¦¬‘sœêt9tyPÃjw+¯\%¾ƒLŽJÎÆpB5!k>wÕ°{5“òp‚B5™Ë-‹Në³,O_ŠE@…Ô‚eJGâPëî”×¥¤)š.f›Qt
+~„>jۍLoq#ß5Üx½sÇHˆÜåzeÓ
+rgújå3ûREÉŸÀ'Œµ*ÇN1h’Sʇ!r¬±ù„Ö@¯z¨\f	cBJ}Ï«/+‘þ0áAú½Ç+tr}À `E°›vÃÎQžù²P
+B$Ìa{nÊ8<ÀMŸüóÛçaP#ö0™’Íášã²œ…Áº8å1Ll€rÍ£?µÉ®A’(‘¶W[›öŸßez·:›j¨~ºÏO~XÉ ÓYÔE¿ÞŸApäv_{<-ùéO+[ð/ü¸ëaص§“iÛí‰ÕiÉâ“SŒ·G—‹ª3Çøøéñýº8ç×éì×ñTòcìèáfÎ'ªïÏËêL*iâòß÷g«XK§Ç§·Š§ÕªOY5AB¥±GjíƒH€1»n
+\}fvÜtÒŽK¥Î©¹ûRf3, ˜Z17·‹@2€ø¬3LfK›ùÔ¼hæ9ù¤ç€¹²o\üp£dÊ2`ÜÄ5ô›¬wá¢ó‹òn1)cn.ßüóèë_,òæ½v²Ul6)¶!ÚÞÈœe´3®‰»º“i’½i^ÿ¿A	4:6&¯·² ‚r¤ÜÚ—
+Â9“m^/縉ŸP4
+P­}?UŽ6bÚ	{F4ÀÔÅ)KP4»&J‰UÉÿ²Iì"Ñ•-«2)nXo´Ã*P#_É@˜äÜ]‰]I>CR·—ƒ‰Í&dæ'=ùµõ¾qrFŸ'‹aÞÞ-¯J”¶¡{Ϭ~Å,AMu®ä.bg0ÐZ_Åå’±Ïxns$Æ¥y“›7‰ÇØe¢·ée‹˜ °x‚E\ícsõ¿"C
+2¼Þ
+r³/‘Ò‹UŒà ™©å„ŸãŒϘö-ËÊaOeŽ¶Œ(<§€·›¨¶r˜2”–o_ÿMtÓc„¶w2¾yú/YÎãj盫Ũ{[ª(Æ£îô{Š-Å©•XìúÝgY~ýt&AÂÐÀxk°_䩁9ÛØbå	‡Y"wfÅà;¼ÌöF7ãÌú€—sZðv#ó Mʝ3SºÖ›>²rEUæZ°ØÓ.ZˆH×AgÔPµÝ¿r$°‹†@]$ÄÒq¹ˆy¢ÎìO›!¯=Ÿ`¶Ì{4ƒëR,¶÷4ÉMŸ	y¢Y¤8ö™P¿äÑ‹¥…ë|?VT¸«3QòùÒ鄺!*iTV3˜þ¸¿ƒÊ#˜Ë.–ºBUgYˆ–·S˜B‘h™Oh`‚B4©oK±)¢w÷“;˜Àß6¡n]àºQ+y,­íÀ²ô‡¦D|8¡¸(KS2ÁŽ5Ó™•x˜¡]•ÏHð2Æé‰s:œ¡ßŒëM‹JœCéötJ2I6œûdÌ
+}ƒ¥ò„Òal´Éžb5%ím_
+3ƒ…ûxÉU„¡Ë™Vb‚=/Ä؁±`Ê“{[×i÷ãúçƲZ^«òVŒå/5?ገçshÁØlUåQdJy:ª·Ã~=8ª»Ý0bÜt!yjìï_ÉC‰…7Ð?/ß{µÚïw/wöáåXØ„——õ²µ•õ•8­ª>ÚÎ7Xê¬Á
+£Zí†"\¿¨½Ì?1jŸ!³«¯Ôz#8ì-Ù–Þ¯œ–5Ôؼ^!{™~h‚¹ÉÙzÔ2ý`a
+.·îþ%73§26o÷ju{«.žk)Û•£ìE†lG9¾PñP²¶±9#»!&“m*bõUnº¤-—ÁY%úØt˜’‡Ò<ÛtÑ•_ž¡ÎcÛÕPÑýIbO]C·¢Ygeê°ƒl×YüàÐb÷멲ÅdG¾û`P£,Ô~*á	Ɲ˜K=V¶§„#N„’:·ç±µž:‡ÅœTnŒ»÷­òn¹x÷ñbqþ·zýúüãŇK|£Þ¼y{y±x»\œ/—¬ ¿YLÄìjEüløTÆýý=Ëo²&pÙÑW£ÿ”Ó	êƒk¡—2ªÄrgõ½—W&Ðiï€ì+h¹½’‡ ]¾ËÀ²^ÚÐB‡ë™½ª„¶ì¢ÿg¼jz¹‘èÝ¿¢¯Ö=M²ø’q‚™CÄØËÌdYÚUàH³’œÅüû}lÙî.úÑÒI†û5›,V½µ×¥F|os
+Þ=ò$˜`Ià5ø¾[ò`ƒÆ“‚Z™CC!“¬¡ÜÓ›2Nõ­[È&ñÕöܨ#ל̡*Z#A|L’KN†f>ù‹–¯dªÎåÑÊ—*yPý0ö#æПæðäBÄë¶Er=Uñ‹áàÁ ¹
+Ý}ü‹+‰àf½	©Þ(µVÙXÉÚ@Š±5”2šX¬jh÷‰oéÞ«´“¿ãÖßô1äê|ð˜ae‡šVËÍz³ä›ÉØ9T[¿pÜ4l fÓf6C3mà^äÛSùöÏL]°ÏÔÑx¤µ4º9økO±˜± Æ}’–zpl0ݍz•v(­‹q߯®Ö³Ç¾ÿ{ÜËCcÁdÒ|
+êj?õˆ†±ùt.x†	ÞµV¼â^—zZhK\_;þi1õ‘V˾ôJFz*—ÚNëÞ,Ž‹ÃêØZ×]´n‘gïý|Ý[. #w—‰™oˆøP’Ó„sMKE]pª`Ü°€5eÐ@Ü$#Iú8ž
+EÁ¢ûà¯Te¹Á#º¬‡cÇ?G(úp^,®ˆà!/jÑnA+åŒA(+ü=A-.T¥8ÇÃKT¥bE§|ààœÕ$´@ÎI?8
+ü΁ ;3øóŸ–±<ªäŽÇòˆ.ù~¿øÎ×Å<cªìÜĈ«Ô@îWZÞWGJ×¼NdçÔ(mŽÝ†k¥)öß©ƒW\®Á昺x¶?‹¨¦AóÃþÐw\$¥pi
+¯q<î7wtª“bÔù¨gäÇ”Ú‚šÏ‰£p¦´å)“* -0ø¦µsàa¹ßpòK}4eT&,§8›è5W`²õs`wäíRïm˜#7‡îþI'ºÝá¸ØÒjÖH9»ùË”_k`Ø̸çKÚÜÇÁ«#òsèÜàÕÆFä#
+¼nùqŒ˜9{
+ÅŒ{ñên1aÔØ9Ø™à­9_"˜Š!ó<á8k¸"«êv@ªÛ¥oi¿0í×æ¡‚˜—ixLìATæɼ¡ôVM¡?ð.zãƒÕЍ½©Vå1Å¢!r½¦ÑW!w|4‘º¤*ÁŸèÐŽH^
+ºZÒ´¡”¶´¤ÚëOrïç¼{|àÎ)…JæàûnÉ"e
+Ìm´|’5”j3%¨ÖwÆåÏHoaЪ
+ì©;sˆÎ…j·Ÿçaº’\r24CðÉ_´,"ËPu.½5¨:ª€ÉÒýÐ=…3?O¡âø§ÍlGgCUü"§ÜSéuºûøׂëÿP<PHõFy<5%ŸeADMl
+¥âPœ…„Ú}â[˜°è«A›bÕ+|0 Ë\ïÊêA¨CÍ«åf½YòÍdìÜÕÇ
+í4Büd6CU®„{¢f¨io×Ôû,ô³0xÉšj¾ö‹0„DŸ¤%„¾p,Øn¬Wi‡Òº÷ýêjýòØBI»ñß×E~O
+²C	B§ ®öS/ÒÇæÓ¹àù–à
+'Ác…±/„…†Ë/GþWqJã¹Ç7}y“¿„ÔÔ§“ý‚py÷°úòCK‹CS‹åE‹
+Õâ¢ô1‡ùo”£2ß¥½kÀP1ò€îLf(»AU¨uÆÈÎȼE½`ÛY ×ŒØ9¶é+`Ct‘š®"Û:[ž"!›÷êàÔRd
+¼çdÑÂQŠ”ž¹ Ú7)¤.ȆÔ;ëÔ‰:ª¢6–\ ªH4YȈÍÁìëü㘠JünÕn$#<sÛ^®]wç=YמàOæHn  3Þ¨>¢)«Dìº ía·]PÇå|F`±j£ÿàIÀô!i @p‡èwü?z„l$$:]tîZx&‹¾ÊEÃ=f¤˜U=©î	lf2ٝ½ pAƒ¾Éo;ڝÅ]x›Twò0+H\½:Rc4E0FƒñgGSÆvr¶ðâ}	ŸsÜwîRŠ¤iRø¶êhJ¹Ì¨ûó¿Xn³jäGÚHí
+.«}þÍ
+ÀXç*”av‚Q¢óãlÒÚ|v,=Œ*‚“ºÈ--ºG¬ü ¾Í
+½7™Âš³=\L”‹Ö¾ÞëÉ”¿¨]+jõ–¹WXîöûՁë|PtÊY|Ûmï7ÛséñK¤G4n½Y=Üw‹í´Kû¼Kˆ4‹GóY}øž3¶˜lŒsä~…#Ýw‡ãþqy|ÜsfM`ÖAúP—<Â:wìøV b˜gÈî¶×Ó©ÃËÝPk%øÉYŸz³=®ö«Åß+~~)žlþÎXnz¡’ð“ ›f±_uÛÝqê!Ø‘ç}†·›(–žEŒƒÚ5Ì^65”ÞˆÐ×Á8
+Ýsë`<°©Ân¼(ñZ¯	@)x·¡iÑ
+XºÈ½·2®EP"ü´‚÷|>@—†¤Zú'w3%ÚØ
+NYÓL®:á¡{XŽÈ%…Ͳ‘†Ö¸PwÛ-wSC¼Š£ÓÑ·I¿O¥ÒçG®PPîe`cªËJo×Á"UVà#š@Ü©†Þñi6ð±&_й£ý®ÞÀÃfÝèG)\ŸMÝ›5q^yµübä·–#€ÕÐðeÃd8ëzŽøª°‚aHÕž÷
+N‚¿¬J×mÝr¿Z4Š?Œ·
+}ª¢"èz›_
+iŽ
+û’aýÛ†¦7,@fÈݾ•a†bÊ»æÓjqTqsàŠNÅÕ›àüyèxFõÐX®êÉÌV}¾ãHq)9e¾Qú†>ä¢BðÛbßH¡XÞÙU!½&uM¼ò)öAŒ.Sã㤶˜Ci9]‘#+
+؈¼®¨Q¶r¶òŬجëÙùa<Ó¯·W¿þþþêݧîÇßýþþãMšúé§_nÞ_ýr{õîöV:tõúÔÞ/ö‰òÔßÞA'ÇïÜþ§Õµ%b†8Ç~àM‹^ôÞ́7{1N­ØÐN¢ˆ!Ï‘|“
+t¸£´m}A*àŸ)ô0®8IÂéã²T1»lè›Õeß=òÁFÊ\sè}#Ü"³žxq¶*†¢Ði¤ÇŸ™4ṕ¹tú@Ü‘90•s^ˆ Û¢;\zðÑ_°d¡>êI/È¡;rÌêÛ|,\ñÕe¼ÎœS?äÏŽ2š#ªMþƁ ‡èÕ§}Ã΀x|Ôs¾¸£‡dÖ
+ÕÑyJÀµ{ÔN©»/>Æç`õQÉgz¸)Õ\¤àlV#¼äd.P²ÁèþäkzÓGÝI»-7[vu+}ö_)4¢ëD‰FH—•ã+š{âü`uGÿ3È	,|·$8÷«õËc8‘Ѝÿ¾ˆ(rzj,8GڏA4o<ö"}l?ž«Qfjt=É‘V[*Gh|¬+.=þçí–N<d+ºâ'èqш-åòÎû9˜²1±‹(`CqíÀÎøjA´r6j½Ÿé‡]F°*Ó9;JYpÈ áÁ“¨©7’p/I­HÀc²jEª«P~ N@š¬`²ÈSúlÌbÚ@p“Â%h.ºÀb²î³7¿É¸(^ó³Þ>9-ÖÕÅÄKuÐõæaõ¼Ê|B†ôlØø„#Âçk-h7[‰=úEU“…‚™äòEÓd£ <ÄôÆ«e·­‰îýü€ä†dñ	4˜ÎcÒ‹ÆÌ"È^¶åØ
+%HJwçïçð*Žnч‘V1¢C^’Uug§©™w+YíʳC¨XRW2«AtÄ,›ô¨¬‡ÝÃ5í1Ã„oug{:½Õ:ë½ÙÜͧ88´Òÿt¬6íHãÎ~,"1X¯n<p!ȬÁëÎ7Ü]dw&uSî.PPƒb¥×P›ÈêQv´+‚…$U«Ê2 ¢×ÄƳoìœ=Õ}ÌÊa˜-dʬžsCÛ!À{f/ê=·—wxÊ쬂šôEæ'IUßÿ¸g(“÷©¾ ¨—œd’rIÈ8–U¯²¹¦¹%`¬BHº£yn	5¶¢8v,%ß陜„ÀL—Łè`5ƒ~BNƒ_"ä‹)¥(䘜ÄO.5£µØv?“É‘$8£aȲÄå"Ú=¾„WçÀ‚&Ï
+.¡Èš›3K(8çp¿67›Ýn½ßòÀÓ2ÔNÝ“g)jÜzÞr v½#õ’Û°Uã§/#¢ÉâUåáD&7ú	•fÔÙ~ÀfõhèìÉÙ#E:…þ}¬ Z.¸ÛùøÍðÐÁä“;ßÁmÉvup‘†àâÙÊâÀ÷Håµ9vñV—aÃ÷ôM‰ƒ:©¡!—¶Fõuª`Q¨EÊnŸ¹wø)—8D×r²^h
+{ohvõ1M6¶y:­¢mìciæ³.ûÃúÖÜSgéKj/£àTF%¦ÖÎ,ÂJùæÐNÀµ¡E ²×÷]ÒÀív³;ÐkIH0"¢Ðœ`m$4ê;§—É4´4á‡É4À’"0Ã#ŒlTÁtôë1—~ýK¿.
+¿g†î¿ð܉–ªÚ÷PjíóÅ?SºÃ”g[âȽL••ê—@ZÊÚÂŒÆmiê±Òz^–ÀQê‘Kck‰µ.7ü÷ =âm¬zn¼\pöá‹ËŒ.Žf.ªCr{†)Ÿ|òê”ÜžyÏ©†ûÄ
+ñE]‡{ÑD%͘oò˜5™-.«¾˜‹]-ê…nùuR`Q×1Ü·Íê/êヘÂQMɯӸ¢†ú¢{_R°jÔÀûÕ_œ®+
+²zN.dˆ"íáÃÙ	þµŒgÏ)~Ãkàõšª•xôpÖmÄ?¹-Q¦K€LzÐ7¸yrþã7/¢+Ä•¶¨C[
+Ö_⾍\©³ñ|sHªÐ\
+ä4-ÅM¹UpÎÓRqoϵ´ød£&7ži±cÐ;¾â¦unË ÆgàC‘bÒtpË+Z»¡ÙÕq`ÅiàvçÜ5ûÉguyÚÖ,w_§EɁc4Ð\Ãl™;n¯Ò€†s^áËô“"`q{ka#ź³}mc/{~‚£“)d
+¤×‰ôîkyñé×Í¡øg«"?1Í6 ËaoÓq¸&b Ú° ÒqñˆÎi µÿÀ÷¥%p󕎁÷¦¡{Ãm:âC¬°Ž(&ð^
+$7/‹ä–”è,©s~äúÙÜ1`äV$•Ö‚q	D¤¡àa(kB¿.°ë‰µ	^ªgO*­œÐæ³'Њø¨vüG"V]V—7Ü‘ˆ`VÃÌÂ?°+³Ût“ IY‚¹’ÅÚšDíºæ12aSRHNÀ’Q{§.ÅwÌØ1j íä¦;¥iÞ¹A’êÏ^ÕVÑôÅ×D7¨¬¸ü gŨ6¾çꃩרa┊©³P‹%“4‚‚¯úÎðL"ØAÒ%DB +šH‚Š:yhšzÕ¿¸ž$Ê¢‘ü¤ï)šH¾™Í5uø3¯‡Ò—õyRfvoùóHï.ýœÞ3ò‡ ¡ˆêr‹=±ùPævÃn1ñÊwõ®©xÖPž}Ðn9öÐõÎlîÌŠg”Þ¦Ú­0ëÕþ`6OëõÅIjêîùe‡žyeèu‘Ü0aÒ]÷NX2y×Coø¶èñã0,±Ûƒ¹Ûìæ“Ï…s‰YuÑó^Ï<&­I”z¹FdHª}˜÷43º+l6ü˜œ¤«‡Bž¤ñ®®·¾¨N²]pú©rÁvÏ@=zpصôÐMJ;@÷b‡Æ)•jޏHF¡Ãr
+’¹¼}ÍvÜ.ÃÛ3ѨnLEC?RýM)mèÞ‹;€Æ­1÷okî¨6zõVºó>r~µp@Ñ]À`¡‘@è¯fîW{ÎÅn—ö»âCѵæK2‚Y€ì^‚”cÊ)ºÍZàj#Š±¤ˆ?ƾÝaâª×@îÛmc8|~ÜÐNg‰ÜíèûOWïÿx{ƒ
+ЈFÁà2¡˜Ýúêîùç¦KÉÌÿý½‹¿¿ÂïµàèÐ{‹µpN“ÃÅíçf «~ðju©?]ŸO«¥©ZC€%.ÿþó÷åÇŸO‹ßü×üòË›?Þþþúf~ýõ·wo¯~ûtõæÓ§` ÷wW–º'd$ÁS[|äå~‰íw´éÙJxÇĦí/˜É¿ð/°§Û‡›U3šOæÓêú‘ë-¨¹U­w¯ÚªÕã#_SA©¹¥Èåš›Õ~½¿@›=A‡v«Íú®Ã^P¿Ø¦{	ßrÇÍ.Áv—á>#€blÓ¥%ô3÷1·;/Sž‰Ò!ùœâÙ²†Ròm>]	úuK¹¦xÊý­Ìê‰[-7¥Ü¿Ö­Yñ¨)-•u§ û
+$?æ,—@AB1öÝËó#$ÿ—Pneàj%–îøµ ùÅÚxÑ®8@ê¾ÏáàûèÛîVO´b‚Fôc­Kö‘b!ùUlWªø°gpH¥+îÍ­g:hàöÓÃ!徿xÁŠÅ	šz.±4[`&ï{èŸT#û™]ß_ôqCëÚ{®YíÖ<e…Vã9‚žíœ >¢Ë햐ëúQ£÷`‘4{‰³CPåìz(·‹ 7ûû%t`Á"Éw»Ü"\ëß—Ñ:/hô–GÇhÑèÖúê!ãÈj]3¬ù¶¾	y_n*}@êççGðÃßÙ…‘ ƒ° FÇ…?îÍþ6³p;6U½‚†«›CÖH(û-}‡£—Úºy	?¬öÛÕÍz?
+ü ¼UÌÝa>ÙmFŠƒË.t÷m#Æ]'l¤•Ò¡é»x#‚[ÐXzS/“Ú(A=áîç°1ß}ˆÜ 'KñÝip×e–eö¬Ì‚Ò¹Ù—/7¼”8˜ø»—z5Ð[¶®=˜‹¨´Ví¡#pÞÕ^´o„ŒA÷;(Ï?’lZß7ü©4?Õ½úá98sml»½©¯’Š<šb7!#¶w pWÝg±.9ÇŒS>8TºÎ˜;‘ 8Ø›ÒÕåpØ=\=Œ†5¢£^G/úýé”;½n`É#ž²¸Zyþà=ûä XIº6‡Us” §Áœø›!Fé}÷\ƒIH©;=/Fæ>e
+]ÌUQ'äJwäG¸ž´ð³ÿmþ^›‡[º > Ý-éȹ¦¦ktQî¾Íaì†ð¤ÔþøœR%M6K·?•ÜäœtÇæ §¸Øz}	噜‚M/zŒ–‘R£`ý{NåЭTk¼ä¸9LYj×HwZ&[kw„ažÂ?%u;žR7$`îºA>±Y—¿~¶ Ç!÷•ªÆÁ†~=7íÈC¶ôPnÚá.l²ÝþäЦ³®›GØ{s¸ÇT®žÌjK›Pð¤5¾ “‡ÿ3^%=ngô>¿¢Ž6ôÔ¾‚€h4‚@¶`0§)µÃ’Úþ}^‘ªë›×q_4:¼.V}Ë[VKÈç逜ø%Ú.ª µª†ƒ¢då]À–Éi¤ùσOLÏý7W	û,ww2CD'Yxó
+4å÷±éb!Ô§CDZ¥LÀÇÚgYÊ$NTÎý9:Ÿ¼v»Úóä$T
+lj'WྡྷÜÎGófÂi-&dÏ–ÐåK²˜ Ö§RsiÞï{êïœ°‡kÑÜÇk\ɵî¸&TËl²¸ñ=<T£ƒæÇ:0qö¡…~àPœj%”ÇŒ~Ì^Ô€§LH´ÀšËc¦‰S”]ã‰*;ÌCå}Ømy&Ñ`'Ø5Q4jB¬©bnÄû¸;³uò[|¤³ðûPq	ž¸ÜiÎD“'2ø%>9–g(`šÚ¢=ðëB›kpjKF§Ç&@gÄuù±	NÂÈñájÃl‚„®(wÛ\
+^OûÄ•£Š(.¥K[ªï’PÎ
+5(&-gŽÓ`µh%5Їa{º’$å|ãÐX•Ñ͹fì$®ðÐï´i®:b›æŒ®X5˜øÊe]Èrãé£_];ÌY`S—BœU®5QÜ`ÇÍL¾•íýg*Ï&£Å8&‚¡Fl°3VÂãOÐAÜâ^­¸ý±`#ŠÆ­„M˜#îKù¦º$]ñònøh‰¶:ŽÍ]*Z\X½æ'\ÙúÃãÁ#Y‡8çq{‘£tW}©J(ÙŸÆÕ ã¬„.é±
+¼¨ÂrßÏúd|NÿõSî'ûÎy˜÷Ó/}^›åݦW ™oêËGZ(ÿé«o¾åÞkî‹„rÀ5×FB—«¿C²Õ!º}8Ûª¦'®Ã”^§wüÍzØôõûЍ*g“”‰¬r0›]e[y’î«©žàóˆºÉ;ïî*;\¼ê¹e§¦	ΝT)·gÛû	>D+~ñë»9Ã8$…lEö	iÊZ”²Ÿ`Ï&ðËý¼VÛˆ+ÇcnÎíâêöÍÍÕõ[õìÙõ››×/áÔóç/^Þ\½X\]/^á›õÙö»ÇRÖåàÓ#òh]üÌ?¨²f‹ri¡	2O 4HE‰´ØnȵÐ5EÂ:
+§£ÁQ§ÁRš1P’$”ïþ`æD¥ÔÏ<sàÏ“c¹ã‡8Ó_ñaÏörŒäÁÀ%Р@r¦ñxÓɦŒ¡\ÎM¨ï×âØ)=7ÑwÙÔÔ5FÔ…¡µ˜Þû•§d˜D½&ˆÒN–bŒ}à×-©ƒzÈæ.¹Í†µ!Šªq¨ñu²t¬Á©IžÊ|ŠvYìO0°¸>k;ëT\ÀQ/žI\¥¹»-Ïf\šÓœy¬yËÁ§ˆÍ]~æ!¾Õº4‹,T2˜,OæÐÔ… ¡#/Quð̦Ž*SelµÒ5ïz©[-·j³Ù}xttU¹SˆòÑ_èñä'ÑŠƒ³Cµ{àjêàQ“À‡]ÌWŠ”®»	;+ZºQËãq?ÜÑtêue93Üjt61¶ýá'Z i¬äæj©Þÿú⟷7SÎ9¤(ê½xÏÝ0Œ›•Œ¾øýímõMÔè:ߍ®Î4LUäá,]„Úž_B¥|áª"Œ¡¯<䈶úùþ·[®^PDçëc4‡a%ô—)M§”0†þë
+×:„'ïÛM8p×E]Âœ‚L·öÉÏ©˜I¸ƒvaN²ëB–Ð_¹xé.e#zVGtñ~ÁéÛt®XQ¶ß97Z4ãí-ÅÂ!Ø\L‹U«å–“}uÎÅ
+ø·Î6×e4üéÀ…¡€€­¼4])[JåjQ;®!L³æ¼‹£„ªc¿ÙœÇYHüãÂÚÂ#Ž‘-✑–1”2êqj‘ÐÍ°ZNxª_1‹Tì!M].ÚΪgí©š6XªÉ´d‚„.êHá^c³Üu>YBöb²¸ÆPÁ¨¶È?8:æå}é°z€lk¡«£jE‡Ë£”Ô~AS¤BafL…¯"-—Áë r*H¨b„zõeà
+	Æ`Ͳ˜ 	jñ¢¬Èw™»Ø/M·¦ê¼Lö­sÕ䍡ÿGç‚€ò4k@¾Tw6Æò<Šð)„J§É‹tRSÏŠä5¡^­ŒÅÌ)ƒ¶(Ï©CUŽÀN*~ªÁ6ŠfLh]}_抏Pç‹÷-”+¾Õˆ•Æ‰
+×½šˆJ¦KNøç©T•’„.‡Íònsa÷êÂþ´c‘Æ’R¿m»ªÖ»ýt†É'W2þ`2Ãd/¡»C?ñô’;Œ®[® VãŸ@åã F-ó`ñ#I¼®ö”]FûŠ˜¶uÏÁ^CKŠÜçíjŠó¢·ýÄ9Ô…ÎFëfì´GÜrÚŠ™ï÷˜¸ƒîùÍkÜôÕ½5wá´»›%ô8¬‡ú”JuFPï¬6;ÌV6…Ëvù‘FØϤÒÙPÙ}Œœ¤Ýs‹|åÕîn’ùÒf‹óÎÔw»¸º}ssuýV={výææõKEõüù‹—7W/W׋…SxÕúÏ…¼ä#;õRƒ,ù(8‹½úÏòáaØ~à4wæKvíWGP at O­‘lûè[øù¸¨_ô/˜ÃDür(±=êõ»ÇçÝä„?A<p½Ûlv_J6îduÇ ôeµ9ènÑŸ84ê%ôîïü\²?ÍûŒîW¢ù›ê—«j·®¯¦üQIºº¤ñÇê0|ýî$ÊÅIÐ:»*Ž®ˆß§$áÂ)Ÿˆ
+S²up5gòC1gœ4se” ÁÍ7øÁ¤"&R­÷;Nl0+ºˆ{¨E`nTRc3±èe ÎIÖÿ¾?¬¸ÿŒKNp?Üñ»äšŒ¼@ßs²ÏõÞ²ÞÃW9B²/Ó`Üe&ùâçi”oZ u.-”ÊyöÕCøIÕÈF"Õ’»£qƒär‹¦“hteãjAÇг…yÊľ³â
+½¢­4­8–ûeWׄnùÃV!&QÚ%í‚ñر‚Ž¶çr,l-b«(`p…P£ÀúB‘¼\‘PÎÎdjhC×ü²	ƒ£8öóT'r½¯ss:Qê}%”‘	^ŒÓýÉ–yÑ3ÊFV%§hg´Á#¡‡Ÿ¸U¯–Å„©)÷PFîáƾ7gU>ÑÃY”3üfÕHN¦¨À"î9‘ö‹ä`™˜´ë„°‰sÆþpÃ[fJ—àZì†6ÂX¸L§Å¹´¦ú]cmåû ¿[!n Ç"’‰¥=3=«Ö»äÛ
+*
+iÀk>¹ØóØb—|(¤*o{‰a{ÏwBWƒmZ4_alZ¬Î®Öø´¥±&ƒÐ¡»íE&‡½Úåú…GDWÓ¤Eîyòt¨±ÁOõ¾+ÙŠ:P
+?¹;+žµ‡›ûžMÒ%›PEF*Ïiñ\nm„ˆ&9~±ÃBÅ£¬Ì꧃¬ú_º`κ.å(lØ÷÷êÝï¬u¿áÿîGý<ùΙg4Ù%øÚ„¨Û@~ù*p“gÐæTÈÁúÿ.©ãi«I´Y‡ƒíÁ]ZN	²ˆuZ2Œ¢$çArÁqÿ=7¨˜h+ë¾ßs[;§"&uý?Ò«e7Ž#	Þõ}ÔÁÛ¬Ìz/&eÃ>ëo†±‘M‰†ÌÇöúï7ª)ÉÝɨQÃ>
+ at D«2##"y”•ÆTSq~Ý0/yå«)›€ó¥n˜«ðc»È™RnS,Ó)67l5Ø_ÀuŠ®Ò$Ñr©ƒKÕš­YEs²Pžh"RBJI¶‹”‚…>ЃacÍb;|¤Áç-%‡Ï²åä“l	]+o˜Q’qCÿñûÓ¾-²ç3‚z
+ë/x(Š5éz<NtI“˜[ê+kôaÿpË­«¸Q汄?¼ >¡ëH’[oW7Û(6CFúYLHmjü.ì¾9¯yB[~¡ìƐ×ð—™Îç5P5(µƒ¢šN÷´ZØGÖ%ãPä¹5Ž®m’,AÌ‘à-”®-XEÖðiÇ}ÈÇ¢˜Â?ò÷Áƒ–9­ÁT¿|(c¨Ù>–:»ê­/-‚Esþ‰»""£ªž[ƒ/JÁ\§¹57Ü%Sð±³Cx÷÷vˆšYÙEb>)¶“úʲ8åå_ÀËÔ²ÓÚß3œ…ò€
+†ä–5´¿‘8ín$R¼yV#Q´¿ghMÌ%J¼è–z!–Ùò2¨‘«Mç–Pèïô@'N*n!mŒ–øG®tXxsµm»£ÑIñƒ”ÍëèQÞQç,²ªÚw½%£j2U{Ã×8E	æißrh!Õô-p#iro¡\Κé8
+¦o|ÍÂ%ÝñcSA‚®¦Ç•vÅÒ)ÕR‡·,C¢3óÃ7-¬3ÕkÜT„‚ÛŠ¯x®Xd5Úwq$&ÞÜõíÔ1,‰cpö
+Ü
+!M%Dsðá@ËмMs6e¸åvZ&U3<Pû8nhXyc²P>:>VÐFeÃèø„´\Ü0:>cóŠÅ@éæèÛnP-täP¼+K…á{^°fÕbÅf¢\;]LÉ
+Þ|ü3§âû	œÊ%Ɇ=hÛkÅjí¢÷˜ç¸÷Å®ðþ6t-4Þø6^ˆ`c¶P¾(ÂÒ±ÁV,ÍI¶zÇ¡ #4lƒûDi}Ö.:»j—Ð3˃Ýq(°§"ªYe ‹.)[(-Y”¶ EC…·
+)—h-•oŸ85Z(
+XQçy0ü¢©5‚¶¥Zèü,·Ús€=»¥‚|µííó›Ýá‘J€h½4q]Â{ ƒAN,iæ QÆ$-(.±¼í’ÜX\XcyRLÖa´é÷³-¡P¢ÛÒ¢s]^¡ç<N¦ï§Gnã‚ÐQÔց_C5Ž‚Aßq(’DðÙ4£›çJ4]>v¢DhKæ\%D£&SÞbJ.²¡Ç-ÑU±P^G%§-—M-¤Y葇地S°Ýé~Ï/\¯–¿¼¼Þ	”^-©ƒy—ÚU{©üX|ô[ZÑâ—<ëð#…bkpb™Ã³¨r´C<uB,ßÒœêaËi^m¦ÛÎÓ¿\±ÓF›æŒ<Y–uš–Úu«xªpßb¡/YÄ‹˜’ñ\‰€]5=ã¹²ÅödkÀ
+Ȩ%™Ð\@F?ï„_dB€åg§þ>yüƒA¡¶NðØ]²–
+í
+§F{ê@M?´Í4ªéÙo<}!WåY5zÄë`	Æ¡ØaÅz‡ Å«ÕByµéœ·P~˜e¨ÞvÏÖhëdŠÅÔà= °UØ{±´(Àêê–ÌáºZè|ßÍ™*|ÊTZÏg*p
+ËÊS$ûîÍ·a¸ÙÿÆc
+ò|-m·[~ršŽŠÎVÐ
+½;žÆa¾å7×/¾ùáêÅŏëW?\}ÿ>¼~}ùæêÅåõ‹‹+ý/î6\ß=%D™_ÃRÝÇwh%—ÚþÍ+çrÁ_ýkü£‹ëëðtÒSaâ§ÂøóuYœ÷òŠr66f×u‰ý@gL±‹èËS¦mIk(oI at T.¯¡ƒçX„pçêûoÞiô.©yØp¢æ0çÜêýÌÍ
+ͦ
+`]öo¡1ýgë6Ýœ:·QŸÜVÙ%~wî‹ S)fS:žŠíÅÕZÖPÊ~…LAûêh–QÌ™<ñæ8¦95,¡·Ã‰GCFÅ®ºF½ÙÓ4{j¨Kúâìm¥Åg‡¯éË{fø´Q‰=3|ªkè™á³Ð!ô‡ÏbÏ_ہVÇÞ?Üíy°—âÐ`×ðH-%A«©Ä=¯pm{›Ä
+¥€\!sYè°£ÉDEx’_ƒ÷´sªŠ4©{êly˜}OG&"¯…rÑB‘åÚØ/±4È(Ú¬ÙB¹˜`wÌXóÌËv§?»*ºwt¢
+|6\ûŠ¿
+±G´˜:üΡ86Y([½¿l™M­eôIL‡§¯†ét3v–2l#–Âû»Ž!ø€m/Ô-ö-J;yçÜÉã¡š­°Àº:ëÿ‘ÎbµÉ-èëì,®ÚNšÑà¬Î.|yÅe6Œ)!+­ gÙ…5ôdCjV¶„öµÛYhW»¥x]CûÚ­:ľ"û”
+˜R_"ÖS*’P„Üâã(NöTºy¶Ü`êÅÍ +½l;ÛdhKêŠ;Þ^l=ÎWCšŸÜæ_)nÇe<¤Â™KÜqhÚJ[Sp†
+Üj›¥b±ÜjU¡&_ª"Ž)±ÕíØX^Ÿu‚{L3–wD°JfÏåÐŒ*TÓ²?¸agÅÎ/Xi3iå7(óÃLm;‡Ë¦jH~˜ŽTÏ‘cB¶bCæAÆâ%m¸­‡Ü3èüÈF’ÅÔ‹rÑCnKÔ¸¥´^ÁojÀíÒ·0i_|@s]2CFe±Y«ƃÁŽƒa¨¦´ï(&àùûd¿®k¨Ÿ
+°ùw]Òç“e}<Ýßí°f¹¯ÿ<LÃŏ»w÷»Ó=ÆòâëÓiwó~º~º¸ÜŸNû_‡Ÿ/./÷ÿ~Bì
+2j
+CFÀKŒ!8þ×Ï9ÿz-òížPU ÈmÛ™ˆ<Á}¼§ç$C!šâ-¡‰¶)VÎ%R…NOÄò8»ïê‹Bý_€ É©5
+endstream
+endobj
+7 0 obj
+13396 
+endobj
+8 0 obj
+<< 
+/Type /Page 
+/Parent 3946 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT7 3963 0 R /TT8 74 0 R /C2_1 72 0 R /TT9 75 0 R /TT10 76 0 R /TT11 3960 0 R 
+/TT12 73 0 R /TT13 77 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents 10 0 R 
+/Annots [ 9 0 R ] 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 3 
+>> 
+endobj
+9 0 obj
+<< 
+/Dest [ 57 0 R /XYZ 72 496 null ] 
+/Type /Annot 
+/Subtype /Link 
+/Rect [ 438 207 444 218 ] 
+/C [ 0 0 0 ] 
+/Border [ 0 0 0 ] 
+/H /O 
+>> 
+endobj
+10 0 obj
+<< /Filter /FlateDecode /Length 11 0 R >> 
+stream
+H‰œW]oSI}÷¯¸Œþþ@Q$ˆaáYÞ‡ÕÎjd’›àÝ`gmÊ¿ßÓ7C¸Õ9W¶ÐŒ8·º»êÔ©S'ï»ÓÓ“wçoçîÎÎ^ÎÏg'çmw±Ãÿ׺ÝÅzfºU7;ùÐß,÷«oýùæf³]}é÷ÛÕE·]ÍNþ†®w³—‹ÙÉb‘:Ó-®fÏ´Ò¿.ºúÆnñ½3øi‡¨÷¿þůluê_fOŸ[ügÖ¢²S&X#¡}Ç ÿ
+:Kè›ólŒS:› Ñ—š•±-´§PkUˆÎIèÕŠc³
+Å4YXS¨s*ººÚ¯6í£*%Åc«´k¡<aÁ+_’—ÐÍÇ lvm-æ¯=E£rιpÌ-ŠU©¸æß—;Š¶¤}Þ¯Tö-tÇ¡E%o›Çõ”;Öe­i¼ßt+Ž÷Eå`›÷õ´x6¤Í4WÞ¯®îº=ŧ¬¼-EâiסvÊÇÊÛÎÖêÅŽ«µCž½É
+•»Õ¾ÿBá.¨¨‹=¢,Ît*mªé]ͳoy´ÜwËm_«ó‰~”Ú0µbD¡Å+mrÑŽ¾ÑkŽ47áÀ¬b4MÐ[
+…¼%}$4ƒÎ-”¾Ê[¨qvñÑDàQ-”È;­bnÛÿ_†cD^"ÿ­xXŸj{4%îÞÒ^ò×5ÉC±ÍáZNRšùˆ–K-[R‚ùœT,¶7Š®óÁ¥&òî)ÍEРC›á?ƒI |„fL»\ò½l„lÇö¶ÃùƒUˆÕ+®¡Újbɪ@ ‘c‡$¯RĘiUz¿9öÝ›s:p4ÈYÇÞü#Á·’@rc!$E¾‰
+CÃþŒ[ª"ÕNè _¿Zo(yŒ‡Ÿ0Zž¿¹¾ãs¢ƒÆ—ÏâCß(Ó^ö;Gfå´>¢T&9å¼njµæ¹B÷XX%ý6å"Liý–7mÑ°•cìíf·£¦’‡*ÈÄ~¢5°P½ìJó2.eÖkØ©¦¸¯©ù³AW!Ãn;~YŸ£|·Ñ+-¹›pF!g2·tœÙTÈÞq|FZ/ÓzÑ?xVJ‡ã:ÔÖ¹(“Õ]p(ŒœËòY´9
+VK*¥€«ÍíŠÌ*UZ¥m(Èíì&4Ðñtç«Ê$uö)7KÛhà@Tl|y¼ñ¹aåcî0QF™êù‹=¯n&É»½Xüóý«‡þµfÖ3maÇy
+ÚFá¶ýU¿å›‚Ç€‚½’⽧õ…kDèV—ënÊòúT‡o	‡Ô§ˆÞÑ2ÑÜ^e¼Ï7åã¦1‡Ú;òºûåþŽšÁ ®¾øàd
+õe\Õu¿o(ßBå[j¸þ¬"ï§~˜Së95þ¡î`˜½¿¿ý²Z/ovƒ_§–Ã@_¯’5þ,®Ö~ŒÜ|_w«5êz}Ã}’Á6ri>û´]Rý°(ÀeôûýîÁÕ§ßç öÑã$X‹kÊïÿÀĸžšPךN×K*¶Näd›ëõgü¦ºw¾oam‰º‰OG‚«Î(z/¡Ýz³~VÉ%'*Ñæ“¡äSŠ†Ñ/N¨äx°˜îÁbÂÜ2…Ê0eY7L»ì¯èq¥.ÑHôºçÝj†Ð
+¹˜P% Ò+xŒ‚Ön®ÀåÍ¢él›¾ÞÀH¬¹G4Žw—m¡¼]<<ŒÉ!J,7Ý>x¥K[Nêº}Ôè+ׄíx@rؾ&a\ä¡ÙÖµÐ:œ}%N
+
+q(­‡­ÍÄ6aêëšêÒ’ø˜è›t-' X~btGð+TÖÂÉ4éZCä$ëA¶'·6˜<«{½ÿûþ3}k1ÊîrƤÞ^î;:Õ|6¶˜Ô|¡]K9†Nh:íÙc¿îø¾J&	¦Ì3Á€¥m:ª>=îñj1{õî|vò¾;==ywþvsvör~>{¹˜œÛ?ÍOÃS?ž0YEw1Àgyê§Z§Œ"¹³G®É…{tMu)uH¢<9åFßØ:`«Yƒ'J T9" ”tµZ>Vc3†®¯ÏžóxU\±=AÔ {Ý<ŽÊ¥	QåÜB練Þ«77 ~Ëd›Ûrna‹
+¶Éíõ’‡ÍÈnªí/®ð?ŠE«Ùä›+PY3f4ø¦h|é¬n»´P¾Â5èPÇÀÁX•/©IÂ%w;›åQj'6TÃb8‚¸Õr•ö²|éÄÔLÃÎ"y;ÑÞö@{³Î†¡ÓÕpMwö½•ŽVšŠòÏ&œ4†ÕF§TçëÝŸ=‡3¾ë¾-oV—Ý”§ÄTJ¥.£âSMuÜ:	ÈûUitVeSòÁ¦‡ÒeägGŸœ"_‡¼pEÑ*º˜å7âƒ,Å&üŸWcÐÕdŒ½¯Êîby³ÜNt®ÏùÑg_û‰œû_͹­ï.þPέû‘sGÍùÏœ>9}3í¹×«ÃÙx8}ñÁdmBNQB÷ËýÝ-—fÀc]¬Æð	›uuc(8‚æá’‹Wj×ÜmÆ‹/àÀ¿ÐxÉb›+ßLÆzˆÍ/»šjŠ PrM¢9íÀl4yjBó}·H-”?.âqhš#Ëg³‡*9{Dùl.P¥@^ö¸A¯6†vÉrȯŇí5PõQÀ'§_'Lú?ø,Áœ’Տßĝ0„H×0WÇPçŠGf£—Ð8eò’ŠÅ8	æzˆV†¸5q—uNqù,ÊÙ%œ»¡äô;Ihßm®¸%+*šêK_¹Ø*áö˜c%,u<	(·¥¥TÛ@oûnþš7½Wq0ècøïŠu`š1Mè?ÿÁ;^ãq±yÜÛ‰À®»®”‡ùcaÑ*
+4NôfõæbQFc§î´uì$‡ý°vÕ_‡«kÈVÝƐí>Î?N„O"ü¸iý¡¦iÏÖ3bÆJ0ò‚öÔ
+Ö2ŒÝ,NŸÆ¸9%Fµê–v¤”0Û-zt¤ÀÀL¤èÄќ馾E?òKÚTç¦H®#kRðâl.y`m®£x„ÜqµÁst("$·ÆX(‹Nâð	ƒ•óE<çö¶¿ìx—g£ü1˜.]&W‡Å‹&Ì'¸¡}È	ÿQÿ>Ûƒ¥´ÈKàZÊj=J	âì×aj×
+ÕúŸ/ù
+çQ÷à§ÞÂâxw°ìU©²È=<ŒM’üŠï’è\5euBH¢àÝÛ)tI¶­c•Go$3y“ƒy“À7#$‚‡ïáu‰r’Àgè°Zg‰¨Ú»º	¤©tc7I`ä=á`B9¢'Pt’êÔ²:g0ó›æé—[ê< ʤ(’DuËU‘qòž”˜®ŠLöVSTÛžR`„/)EÊ:eº‹Iyk-?S`²
+‚%›¬£Âî0÷J”$¢úç„¡"ÒÃbµJ®HµœÓ”{üa£”k: ÐbªÖÆ[—bEÒ×;~8œ±êBÅß;ðÇéÃôõÞ+c$°ûxÁý°0ÚŠãûo Ÿ*ƒ%‘(ã0&T¨ÛÓÁ,a ¸÷Ó×ÿŸòjۍã8¢ïùŠyL€hÐ÷K  M‹†É„9’6^î2»Kú{Ÿî¹uÍT/¥­À:US]×SH&æ	<ë¤Û±Î'ë›×ªÔB´>Ùè[´º^rž¯„T
++´ÍŠ«RÖ?áÁ€ÅñüP%Ž
+.b‹ÖóùŠd¸2‚ršB·<؆!¥Œ8À“0o}¤ØÓ–'7éì´^~C$’‚X at y"¤m¦v‰elNÝùÔ6·]×ìY–‹ ž»F¶•³ ³@Šâ.p¹@jµ‘Z»¿¿nîÞ°	ŠØ›ÑÈ%XúŠ,ŽŒ|&ÿ4žù˜Äv…žµ#Å2½·ÀÝ}îx,(œÌóc‚MØæ¡;m?í›ÍþWK’!j§§î~ûq{¿9÷õ!Æ–’–{‰2¶5‚8¹ç	Ump±ôðãáXY*5¡Œ¥ÕGž† ŽXæüy6ï‚–pA„2}icÎnOÍóþ¡;6ó,1sÙR’Nkz²Ö}év‡§Çnn‘)eG¨MWFT$æß<Â8«ÈÃþꔯ}óçv·k>tÅHŒ£=Pl®ìArbDàð³Ã.é¾lO; $®`S™Íðæ|hžO]å¤Â™(½ 
+,CIW¢’X)õ´W…°%’Ÿd‰é
+üˆHmù	å=KGÝŒÞ5h¢¦ÏÎz*ag‚L‡ûL°p­±1
+xŸ16Ø-Xº!Ö+‡j}fÞEJ¶çæC­]t áÛ
+Ü›ˆ”Å=ätJÈ|;ÎÈÇsјRʐG}áqÈ…²¾òÁÙœ£Àínþ]ãÎT*’Çó&UŒ‹RL
+Í3kIECŠÆÏ}È֍XÆ“|ñìM„Ö^¬s#QZ?l>ì¾6ÇîÿÏüÂ&•$Ûcלxp¢›Ê“²6¸¤£Àw´ÕÎ<Ս¶
+R“lØ~0YÚ^<3•`-ÊÚèÓÀTÓ Ö<‡¦tmÖ©3ØÊøŒs¸ÙbYWHCuF¢ƒøyš~„#X~øIëK\sæ'/šR{áÈçùÉ‹aŽ®Ô%òqóÄ–¹´²äù[þù¨™ß_ù¡+}h½ÔăKCJ+Cžvæi¯B¼B”Ä_~Þª´ö%É@;@?0Í*ÉTJ·Æä"œŸÊ“ØHI¬šI¬˜™	Ö÷›Î94jѼ1å¡kTÛðä,•`bxDç–øh ÐkšÕ°0Ú¤’Ù²±M#ŒYS
+¶h´E}û%´Kœ Õ`NüHe~ó7"Δ/fØ­¹hZ²¦G3ç*1BašÃ‡ÿu÷çšEuÑ¢Rˆ¿ ¤FmŸØü$=M°òEI10uãp+H×<<zWÀÄGu9UïZMíÍÀs‡NÆà#Áöµª/8ËÕézBåôzEíÔ?bŽ[º>Ï_K´LÝíU‰zêþÙ|Ùìžñӝ	}f-“ûÚQŠu{)­8$0…±À
+[oçîTšs®Mí„—(‡'â˯ò¿Çîo©Ð`PÂJ!¶&Gõe~z!¨ú,KƒíUy©Â,SÄàÄ-rÁøä6/.lI€‡Yüªè¦¿Ž¨ßjisÄj(­æJ#žÊ&­ºëõíõíÕñ¸ùúŸšyÏ9­ûi09¾'ßSŸºj¯î¤-,öÈl®f'^²“ë—ڹɣ%qá²iŒÆæÓi~MÀóçæy¿# ´ÁD(¹}$ ¬ö¾üÜöÜ=4@sUê©Dåé@D›ÌrúlE)lù‘®”'Ò	f\z¹?á¦Ãõs¤@¼ÙH«–AÎySžm™çÐœgC^¥N|ú|8â™Ï'p©†øjÀ,,È7ß~^†Õˆ%hÿ,&ÛOôõ¡•ASl×2óÈ 0ŽÙÚa¢ø<‡z™Ëy3HCÖÂaÜ@ˆ>N*T"ìí.†Ü¬Ö2çLŠx,2⬺’Ž3Ž÷i’²Nºk¯”ô­›Ü´Ž'ݵt­¯F)ïÕ¬ËxDá•ÄÅ´Ç(ÏÊ+ñ8Óy¿&)ëW¡»öKG]&Ñ.2ɳòJ<.¾`‡bó~Õ÷ËÂb„E‚9éhFZ<—‘N³Òb8+Q]~ÃAË,?4^ìo›ÊÌWò{·ŸŒ­ŽÅök®·]žŠØôå„™”p'ô~¼Ý<vµU©TuUV8ü¼*ç—^Þ•J¿¸+]ÊÇl¯fȼ¸,†Þýý¶ëš=(_#ßýƒ™²Ê§j^»Y,Â\"†Ô-/ë¶"ê–—ŽuËKǺå¥eœ.63y¿.^í$Ìåâu—rŠ/"’…¡wä:;}êh"JÛ,o£…G½¼š~&v8Áô‚×aX:k¡C®
+¥ª/˜ 
+N„« )À¥k´×^÷2et‚8ò_ò[gˆ#×àa!–òŸÈa%pL¢ÒK€yóÃÏo~¼{÷û¯›˜`t$noÀË6JÌûå»g€ieôä=ÿ¦ tB¢ôK¹NµYÍ×éÖÔ`Ή¡Ã•Ò·×ô¤ÙkŠ»¥ÛjíÖ¦EÅdHQT-»,‘å8ŸÈg¥V†™#\fµ‘ñ¸ýÑÊ”Bò™›æŸc¯
+>¯Ô¤Š~ÀC¢Å+'©Ÿ´j­âøPEÙÇBYJµøô8ymUé¸]~{—¼ö ´G65ê‰Õ,	˜ç&
+ف](
+-/ZpOÛØFs¹Â´úFڐ°ô'>H1N´áêxÜ|­1M·´T½}¤×–ƸˆËÖmâ{/¸lX›sG«ï°e/ÚÒѯ®Ùr&­zíBkÃ*áDhàW´–\j©•åÈEâè}{ᄬ
+•Ô£]NêÝ©Fžë–iWv¡÷e¥ËÌ÷…
+Ò,ûØþVKÝâR¿\¨é²èçáÛ«_ÞÔì²ûs¶š—?ÝþS­Î^_‘•©\+Ð …œ.ЇTJU¹–x!ä [P(¨=] e«Ø ‰+” ˜"(XÐ’ã§åÞ´Á€YnM<¼_.L‹Æ)ä7DŽe¥ü"Wª•Æ?S€m²ºPZ’² üH$Lw`0“ úHšÅ[°:Y¨W]šËRø…Bú„¬?ÓãzUT³Ø¶QDhʽ‚hcp~e!u“”õ5ÂçÇ=õú–Ö0™Ÿ–˜ëïB;Xi(&¯¥ešü£°·ËD{é–6«T惡ÄtµhØEŸç‹&pø",óÎAM€šÚžiââ¼Å­³=ìKoœÐÖ)
+nLóñ@`¨4¡¡°cóН7Û݉@óLpƒ‡}óùðg~#?}If-PйT
+#i
+Cd­iZ)Ÿ,7”R
+œZs7¥Ña5¥=ÛSó|êš
+}¥Â7ÊQl³ihpQÇ&X
+Úm÷ÐØb¾(¦(Ä´¨¹ðlßàˆµLHH0
+¨´pÐ!Ê-Ë¹5+0CX¬OÔ~Xá­(‡MÄ ß7„úŽRSµ–ŒR=3_ᨰ7¼8AfÍdw)4mœ‘4ái¯¹’Ž<ˆ÷i’²NºŒWJ¢VGU'SDiV]KþUñj”ò^ͺœW麛T¥\†c÷º+ñÈüx¿&)ëW¡Ëø¥£(’hÝòø×]‰GÎÉWìP͸ÆFÖ½rËÊâ¤EŠYñkN\<™O^óârC°‡\•*c‹ép‘*õÝTŒUö›õêîêî÷_klÙ躯1YÖ ¾B—gϯ7çÍ™,geÀ=$Äê‰0‹…õ% # Œaqw€Ú+Ì‹¤8q€ÙÎkʉÿ¢¼ÜvÛF’0ü*¼ZÌ 	Á>wï&Œ8Ù	vâ ñäfÀ-:ÖŽ#¢‚æÝço‰”ºš]¤r' JÅê¾r"¤šxD	r–K
+,
+XN³¼@	;L·@¦8Ù’¬tµÝ£Âj Íþ‰:ø:('Ø{Œ|ãƒ'Ù³pc¦.r?Ü‹ô½‹ŒQ;¼'ã¦7«Úèñ®Ù·6cZ›3÷­Í˜‡ÖfÌCk3æô~ìLk“AèocÏô·ûîþÆ@:Àå»÷o®®ß}¸úxqõŸê„RŽÞÍ@³?\¿û/«
+že\¦˜O¢p:n…îiq×r_™_eW‘	dŠHN)’º\}m×лêV´Ýí°
+ï.¶mµxì6ÕÓbKœC\Œ9ö.u0QLãI´Í=q‰¥æ ÄùA÷÷íŽ÷mË;v%9¼íòx¬Õú~³Í¡V7˜$ä_©K¨•Šœº,â†RÚ\ªZN´9f£šI6µ£œ±mΙû6gÌC›3æ¡ÍsZPs|Üæ2(PV#&Ý|÷ £»‚ ­ûó»ë_&/rôo.§"ì3’1(êEQìuræ21ÁØÜ<uÙQ(ï.JàðVÄeK]0š›Ý?wÔyLð8*	uII‰·Šº¼£¬ jñ&»œ÷9-4Þêò†ºäâu¹"."~Ègé^S‡WÐr"]…€8RÔÃÖóf*)QdQ~Î)Å*)¦RÑ.M˜:Ž¹Ø¬f~!.Ð9«.ÄÉH%\v-/©”$è0{ F\öÍcG:ìÐ7ÁF„ƒÔÿ¹¹ý_{·»¹Ù¶÷‚^;s~–£¡õP4ârÊÀG‡)§áðcH<ÉBÒ珘k(õÎòÀ ó*P—ê³lÌè}•E:¥k&.ÌÊZ
+L2]ÿÅuz‘cϨTÔÖýÛ!r-ãSµ¡%äÛˬÂ6÷Õæ–¸iWá²ÖŠ§«èì¶Øæ ԏ@¾Æ™Ã}K£x¸H¦¢x¨©Î;c}×vÕîa¬ZJ.±6‚hPÃrÔjÛÓ£‡ãkèòk¤¥½Û 
+’¯ˆêuké[@“Y¨»ÍvÛvO›5 xX•5ÔrµþRWKzÛ‹ŠŒ8®òÛ6Á)ê2àÙp~¡Žç/?m•¸vm~6+LÖR»®Îª1Bª2Yã]·4–Æy¯2¯õ&‡c”~æ´k+AëÕÕÞ„LêQ½ªX;äkÌlDËc1fÓ³ôEÈ,ÚÄ,{À,¼,¸,Seúþ
+R(ŽEËïÞ!eœ”>GË›«‹÷oæøÒÛž/Ó\bÅ]òùIò#`:YÌôäÀŒ5ºŒ Ó1å¾< Tê2âËÆG(I]¸£Î/´Vdï9æK£uóå^¢S—1_j•Eó¥òÙåŒùR	K]Æ|©„˜HwÏ—2§`›èê†Æ^çÜTº:.ANÔŒ2
+ÊJº©«3±fò¢¡WáAåe÷Ba׆Hï“÷ââ²ÑLÞ®Ãàòԁ¢nœ,N›BmîgË‘t„-S
+|˜L/«?_\®¾Òç5˜ASGzëRÔÞF‚I]4Àk8âÓ
+ʐ˜>X¾u:e
+Ÿn8ýèª­‹»Vêu•eˆS )uj©dÊM]ä«g'”Ãu+Yέ ‡“E8~“E*íÕ«¿*FRlSÙã§THÍ<ä@hÚ/.©×â¶Û<~Ã$Zìº
+¬º\õ´ÒÛœÓ#²øòÇÓìv›m»Ìy3vúÔ—Ãçª5®$~“ü' •UÄ)RDËLƒ%ÓŒœˆTÍ:Ÿ,¥Z”½>ËoE]@T«qY·KrN£@T®É¾µZçU1W™ÛïøÓëUGîÍådÔ‘Ôõ‰º¸ZŽ\2öq_ÉàŽº˜Z6QÈS—¹9ÖD
+&>9b‹Q2w2—µEÓæÇGedéjµ‡õÔ«"÷+e©m3ª5	ï”Ïî;+,¹&‹Tå¥eœÈN/êÔJúe™;²f –1öTËYXËX{®e¬=Ø2ÖTªDQª¢dØ£d¸1Ý6qXN²-¾;ÁU{žõiœÏ?\bUúü#NMbšˆqp˜$`Çӳ̷׺S0.™
+%¡Éa«ºön·Ê¶Xej/ã4K¾ÙT÷*¨Ã]É@¼–ín±z„úÓ€@NµoÄõaóÿj·ÙŸå9}cŠZ&B€€ÄX¬—PoÜëî÷Ñêâö’ºS=ÓØ.EÊ›W2ÒÕ…F„KÉw" ×é¾èeìjÒŠŒuèEÎÜ7#cº‘1íȘӂâ7M¹¸ibêÕJÎ*Ý4ý좣zя¿Ÿºvû|ÙÞ¯òqytw˜âgÜcÉn·]ÝF.yÅ¥3±_ÊcMšâ~¹?¯
+‡ú¸À§¸oÌ/vNJŽ	åŠ@GÚÜÉ,³íbýkõ²ÿªºÕmµêf¡S}`Mç~õ[d±?nntv5ØžV	â¼üîŸ'fñGf1å>Çó5"ZŽ tÀnå¼%ûYL‡?ªY9¨!q«$•85Ÿ~ŒÒAd/ï<ñ÷¿è&Ïö4›¤ÉÒî/ÛúÞgŒ‡Î/û¾/û®/Óê*Îàéž·®v²ãüÞŽGL«‚;tüõåuõ´m§›Þ¸Zë3[Þøi
+¡x±ãO§½HóÒ"¥S‡u€*EÎ`bM
+O>±¥:¢¯I¸ÎBãÎ	4"Þ¨ožà[V%O5I`•1MÂXû.)[‡6)[‡>)[Ó‹)Ç}	ío)ƒ7âËà û¾-RÆ¢'R;÷"nŽe¥IÃ|þ!ýHlŸWâð‘Ø}\4Uj'd$Ðô÷Ô%¡|¤¨ÑÚ‰)s5H@ A Õ	@p=R›`‰Ã€^4VØÑu°y-È=­¿}%.°xaIš·Ä©¤æZ:É_„‰£TÇøü#ñ°ø„2úœ²)RÙY­¿‹9Fˆ’×ø†ü‰G 7@V“³þtùVß||óöæêÓû
+ør$ˆñ ê
+©`w	°¿ø¶Zï„妀/’T“Σ””/¸—0ÀRà—€hÖš£€²qP8ÆÚ+\Ù:(\Ù:(\Ùš^O kj¬j×T5òhåBÎIšH£Œ
+$y2_+æ’‰•Œ\lw6²òѺ¡Jçmj¦íÙ¸,±U©8ÎubþBÍ8š3Cj"¿º“~a?õäjŸ¶›'ª`i
+û-a—†=†:‰`¸«ÚÕ^’‹_Qñ…KÅõ—Åï¨=ÆoR{®}hÌé3Ê«H{„ì„“gÄ™‡*²œ3ÏT|œ^R°€ñXŁYÚ¾¹ÂÉa¬ƒæpæ^tó :ŒyÆœ^KVª <B×R7brýð“È$H{ìã4ÔëÍWl]·Ú¬«ØZív÷;©>EÊDeIÿÅ}vöZ—‡ºÞm¶‹/íþã\ØÙ‰j¥’geŠ£”ä(Ô§®­V÷U÷íéi³ÝµËôz4ºÛ
+™|µ®0ÔM](h¹¯d¶ aÖl=—C93Ö¾šËÖ¡˜ËÖ¡–ËÖôZ‹#tŠ©Eݨmª¤ÃäÈ<”4¾žDzýðmýk¹–­ªk|êÍ}v^Jµ%8£ŽÃË*4üŒìÎXV!âI ùnè‡'*kK3À×0cj˜3÷E̘‡*fÌC3æôbùeWu,莁fFÎhs˜×æHi¨7¿íÚ-Ýø°®Å‘™z-«µG™
+‘ø¡8™ÔæW&§é)Ï©ösö š"	‹É\½7y¨Ù‚ÇCÒoOT|µ|Å7Mmý©®0×ëßt—A‚0E¯ÒH¡”–pî‹QY(Æ4QoïŸR°Uº#™y“Oégf*\4tѤòAg†ˆ(~3ˆ¡º8%Š̮;VôzëlcËreË=x1Y¦ðª3m/ŒÀ.lá9øEƒ‹°Ýg¬5W
+lu‰Rÿ·ª~˜ñ¤{C5ïûÀø^ŸÇ›64 ñÚÝ_†#ky33]YÇ›fz±e†‰N²²@e–O‹eE݆¤íx¤½SØ;ö„|:R8?QM,ëÔ IèoRžbïS¨å§òíL™T4àù™Xë¶r±.Å,ðê#À Çêê:
+endstream
+endobj
+11 0 obj
+8763 
+endobj
+12 0 obj
+<< 
+/Type /Page 
+/Parent 3946 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT4 3963 0 R /TT5 74 0 R /TT6 77 0 R /TT7 76 0 R >> /ProcSet [ /PDF /Text ] >> 
+/Contents 13 0 R 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 4 
+>> 
+endobj
+13 0 obj
+<< /Filter /FlateDecode /Length 14 0 R >> 
+stream
+H‰¤WmoÜ8þž_áwÀU±Þ%\/Àl’ö
+´IÑLì§Å$q6s—&Å̤»½_”-Û¢,z&]hÓ<$ERÒǫׯ?œ¾;«êêää—³Ó£ãÓ+QÝláÿáOµ½y<âÕº::þÔ<¬vëïÍéÓÃÓfýµÙmÖ7Õf}tü~ßý²<:^.UÅ«åÝÑ«šÕµÕò¦òm _Ùš‰ÊrΤ©–_þvYý}ùŸ£óåÑù8uL„ÇDºx:‰Wó4žóŒ‡_…NzÛ}ýyÛl^Ý6wëÇæ¶=`b^sfTk¼ÚA
+×Ï»¦:!r(—´¶º­-ü$uµücÈJpÏLŸV¬tçÈÒC,'˜¶uˆ£æâH¯YmÊi³züoõ¯Šÿ³Ú®ÿ×Tëm¸­L÷•	—V¦´bJz—F¹[ÿÙܲêíÃÓõêµ[׊	iÑ™C¿Çø
+‡µU6=-ä<ÜWÝ_ïjÓT7Oß›Mz”ŽI	‚Ld"“C&˜ PãJ:lsL”dÚÁ…Ïœ¤,Ü?Ô‚Lž
+tRkŸÕöKïÖ€‰©¬ ¦\èü½iŽîD?´2ÌϺ=µˆ Ìv “L‘ à²
+J ÖÌ ž¹O·Œ&ôÖô;”-[Sê´Bcœa¼£Ý'âÍÔìšÚB^,>œ‡ £@Õ©ç5‘ØØRYí³àÃEuIÊkÕåqõ5e˜Ð ‰^ëÔ®Ášynlj@$éöI”á(ÌëE|æéy’`BšÐNZJË,×–LZ*nkQU'ØÀ0k­; *¿O0¹ÄM§+×Ó–3ßh­ê1î˜èFT1g¦h÷
+2Ô?àÚ`°Ì”*{†¸9¨˜…§hç9Aãã'rÐbR‰o!+Á5exèhm]§h':TV=ZÎjô-eeݘ‡Ù•µ#ïŽrGä5 Å¼ßB^Ò×É%j“áÎwG¡%Ù9˜ùçœ, )=JprO8mW².ÃéÎX¿|@XX	fçç/V²°B̳År±üõãì;IæFeRÜCÛñ"J+¼=sb¨òlµ[!IaßaF6?ËŽqÚ%ø7Œ»Ü?1ö©0bœ*oïlDæ5:ÆÁÔi¥ûvM`ÜCÏÀž	›Âh󄥓	ŸriaxŽ<…¯1ì×Þ'ø3ž™’9e=•\˜©C¥°DB3ëÂoøž¸ŠY%d!¨°y#¸Ã½_  J†ˆȁ†©ÂV;ÂP%PÚG"à^ ¸(NÛó¬†Q£‚ÒÌiÔ‹—X
+?˜õâ·/‹÷ŸÏ¯R©Ô‘ʆ\h;¡‚¥ÔH^ª´ÚôL3ߝÈäKY
+Q ÈoÄ2|—i…M^aAQTÖùïØ$|•f笰Eh´Ì²}È—sS‡í’.&8¯½Ä&X^M
+&6ëÜ›€‚×A`RêîöïùÂg•O…¸¶Y‡§b<Éy*ÈPú¬	ˆ2‡‡L¦ÂÌeÖâ‰8[n³OÊg.*h´³é¶Ÿ>B™™»”<Ø`“Sl¢ØŒœOXÍá«Sø¹l¥†aXgä|Ä&žY8l® Í•&Ë6›–I®øaÌ;à[,P…éa,ƒÊÈéaK%Z áQûÙA qt”Ñ~r”Ñ~p”Ѥ7â'[¥\ÎÜÔ/ÞlA÷¤6[*,¹¦ò6W؆4(pQþǤÏrñ5°©Á*—~΃êŒÙšÊ%9Ÿ‰ — :‚*pƒÚŽq&i\X‚Fƒ‰<ro$]K+Ž30蔓LeQ
+tÀT
+0UDmQ¯¦zh<]B«†­Íþ2‘R‚îZdu2‘ £ü!w¶1…©NŠâ¡!¡m/7>c/‚
+WÂó©gž²'€a­žÀpXŸß^—ÊÎ0A'{oœÄÎQ¶gkgÎEvt/keï€&‰k›y÷²WöîÑλƒGßôJ‹Ët=•CÃv&ÎòÐ
++Dª…¸†|9èQˆxI…Äk°Þ/¯peÒû¨WgWÕ·Mó궹[?6·UJüÁ£RóXív›õõó®©N¨ŒŠË]W¤mû?™²2§Ság'x»;Jz®8ÎsúR‡},µùŠ¶-Åuü @ù<â@B3gƒÏ‚Éá¬ÎX±ý²Qíø1Ùa·ø0ÐU»¬²]fo«¶™Édë„Z–š|Ã)[
+ï›û<åªA
+¬ÂCn§jjvƒL< Òe…1lÃ[»ì0ÜKÝ$
+¢¼®á³le…M@¼]ΰ-6q!—ü Ý=jœ).rjÜßÞ©6§v—¡iiÙ=KÉt÷ŒožžwÍæ&¬µq©¾äð!+¾Ùæ‘áŸ\"8V½¾îs®{m0ËÑ´*ƒý8"PkfÐ~ž”Ñ$㚪‰ˆkçú¡@I¸/ܐu(¤»±÷—o/ΩÐÅ%²e–‘ÃçhJI‹“Äñâ¶dî‰Þ…^Y—œq«Rb°Á «t>1 ê›]¸Úa %ª‰†pð™à>ä¤â€%7–
+Ô^ƒ Éaa:>˜ªÇ`uShéQ~?A»·¢}Ðâá•ÁpE`80¦àÙÅÍAdï(|ˆ8E;Ï	_(‘Ó€“ÐbVféÐ(ÃCGhë:E;e ²êÑrV=ZÎʺ1+xy;"ÜùNà¨ID^ZÌk@‹yI_'—¨M~p„;ß	Ր`ld³	¢?¬ÖrÂɚУ÷T‚“v•à!ë2œ>ç}›8^î[%· f^ÉíK•V$íÚ˜Ÿ/Þ-©°Åºjz7¼¬âcÒS¯A>ƒ©Šs˜„¤AqîÐSµN
+¨ÙéíÔþ>ôŒy
+Ö…•fDáC“b=ö¬§àÈzîYOÀ=ë	8mϾեÀú@¬Ê«// ÍqB¾¹üôaA‘^‘«Ë~ÒÇœ	ÆG” {¸Q‚è¥*Ú¿¬´,ßeÿ"ÒR¼%2Ø@›Mp€¹Ih$Á	´'8G‚pOpî	NÀis~BÖ•eóû¹z±ªCHßÅ<½¼ütöîb±<ÿíê׫åùꌿ ñCßœ`<œp‚õNÕv ºï‹£÷bœHn­™›á>ÀҐâN =÷)8rŸ€{îpÏ}NÛóâ.!’š%¿~±¾/ên¶~Z\¼¥¾Lõ_÷1k‚ñ£AyÊ`àüh@~4 
+<Pí÷:Pðˁ"±gÞѼWa·§h_{Öh$}í9_F{Ê—Ñ´3?¡ö@"åæÿb¹uœ7ïÞ¿ÿíËâýg’õE™ïb«6cø	¾"Š´S_ìvꄽb«NcqÌ^±­qœå}Sýû썮ެªôÑ(]33µþ²
+mݺ¯[¸´n{¢T¸î‡ç¦ÚÞ?=?Ü¢øð‘
+Ÿ|UuÝ 4çÐEŽl¶Í®Ú=!+	™ªZLúÒã|HT¤‰Æ‰Ö-!d§+÷ëmõ}…òäŽ9„CMÏÛõãï¸e®ƒ—L«¶1L‰PvjsLL
+‹HnÒ„+BfÖ2î}vZƒLgB™A	nðE¦´Ìã¬PÚº…œÖO]£‡G ‹=wm»‹ù¸yúÖlv?Paè°ÝŽvÕûõvÇ
+šÓ€Z…
+kr§?a¦aQ$Ð^)8Ê"÷ºHÀ½0ðÿI¯¶Ý¸$ú+|Ü
+¢ïÀ1 ÍHk±´°”‡]0Æ
+Ö3ãùûT“ÝdWOÉ‘Ÿ$àT«{N:Oïå^@9•L+¥ŒæR/ œ†š÷¿\ýzýîæê—‡»·Tùç[‚¬ùº%Èê–€H– ¨[‚,€:à:K°¢Ð:K@ø­¼ìÿô0\á	(4ÒŸ„úSp¤?GúSp~?—ey²­$ý/5¡f¡œþï®ß¾¥‡àùÁìÄLÄPãLÄLÔ×½—ÙuÏA¢Pd¹õ­¥g Pà5šf€‚ãpšN3@Àùõ<chÛÎo {ñ€’I˜7›ww77÷×TñïÐÿ±s‚ù#NŸÀGޏ8Aû§Î¶Rúë¬TþjÈj£ÁäÒ¤XšŒZ‘ž@é)8’ž€é	8‘ž€óëy†ð+8Ø<é/Ö}hQ~Võíw¨þØ?Aý'¨Oà#õGœ þˆSg[)øKuÜJ½¯Ö‰ÜÖ¢e3Ô‡W—6¤Þh¢>Gêp¢>'êp~=ÏÐ{á[=Ï}w±àK¨<¬[°<¯ÿõöêázóî–Ò|÷š?uO0
+ ¨OŒÜŸòOÔW
+ÿr¡•Ê_/	.áÉëhþKnh$™3*(.w­Ï3ãlÔ3ôjÌf0‘ç¦É©'®Z5fÑjœçŠH¶6Kæ\ŸNcWÏhÖ8,Sœ¦²žÐ!{€§Üü'­n+v>¬0ª\·ÆÍòÃÎñ£Ÿwé]ë›5o"½8ðÒƒõÞ÷E_Üoî›ÍîK·?îžöÍŸ»Ó§&œ1	þ‘Ò:q»ýÒ½l~ÿGœ4&¥pg–sßuÍíÓ©kxÌÒE–c•¬ßÿIºº£Â¡¹‡–­U¢ªBýr/ûú›sò‡l±Ž0ð†(¤Ð"PÉùl!®øÐ…(øæŇ:š¦=Ÿëˆm¬(>D\©Ÿ]×½ðq¡×•ª®6$}³¥¢€1F¾œGž+cæùdˆqÁ~äÒX“öh·:šÄ«ŽŽWÑüZ阬;iezÎQVÖ˃´ª5Ãƺ½zsM•­îÑ~B]ßkøO×Gtj¤O({œ)¢˜	F›êov=÷tøK/ö¸Éd+8jd‘øZusà‰Ð2/uŸJ1¸.¯ð·ºfÿ„Æ]	Þ:/pÔ ¸cHP'¸Å<¤Å
+tÌqƒÃ I¸
+N7—f=bà;ÚÁ	
+
+ϣ̓D/M-3
+ŸPÍuKN3&‚Ó‚Šçèy†Æ‰'zÑjSYn¥+æ`¼(Ó¿*hŸzŽJCu•ÐzWSn­+릮8çåuDxÈ=ƒ£Æ}hµ¯,·Ò—ô,ûµ)?á!÷ŽêJ06²ܦËk¢dV
+Í~â*<Ýu
+ÎŽ\ƒÇ®ëp®,U9¿˜‹…¥à.]
+PÓ
+Káþõÿ®±ÉcyçLxOµ@Z¼`ˆ‡"ë/Í쀛íi{üºýÐ_æ—ö€¶ÁðM%ÉJ‹®‡Y+óJ‡íþÿ?ó¶iîöŸÿB*¬t«¥tgŸà%£:êéŠÐ°¥½ÕyD×|ÜŽ§æ1þ<AƒìÀ
+¢„æÃÇ€Hz©pÌûánû…nϺЩò`ÊãcæÛþó-SÅÁ|£qØîÔ=â
+¿0¢Š– /
+UV˜q­­È	™³xhÒ
+Žš@ÀI8i#*.9E¬R‡;˜ÓÎ.v‰á‘3ŒàÕÃÕÃÿ3«	`K$Î"©úÊ¡?<ý¸„;©êÂtР§¿°w”À­0sSÔWààhÚæØ}jPk/M@cÑ~ê :S¡èK΂ç>x…<<%G‡Ù`óÊ`_rt˜›4ÆpÇQ`…G³ÌtpþYŠjÏ.R‚…Twÿ8PËÉ‹”
+†Ò;Ô=å¬9[´ÖÌ:Ný&qÚü´ ÌT¶†±õ$Ð$Å€€“pFô‡ €É󁳋-µj”².¹÷¹	eUë´&öþÔ6"»°\¸ÐyÀ¿+Ã:²g' öRz9S„XŸP'ä‹–Ãp|š³á·Œ¡Óü‡_À&WžnÖ›VNóÀrTæ–YÇQx„™m¨ÂKÀ¡I/Ñ1À¦uÌêU7ºh½`
+U)9pÀÌ‚@ú‘@ I(8j '
+ ऌ.ˆ6BÀÀg—uGÞ;vzY ¨ñ0&=«7ɇ6_ÝOÝÇݾ{D>7åBêÈ§Óa÷þÛ©#¯:„^@tÚkp_U™ÎLV_\ÜfU™Å­…ºyøÔ±]ѬL1~!p,©óˆíÍhpÓLê÷±ðåÀ1æq.¢}<¸‚)``~´AÇÁgÑ®eý£b
+ Nà+[¦5úJóô±ÁÏåe«µ(êÅ=zÁ€…ñR£ßhƒ#¸m•ÐîìWh=RHºê3Gx÷+䍭æÏÝéþ}4œH™"ávû¥]˜]˜Î?¥,\h˜!”ù²wbÇîôcƒOÃA„ÇÁû§SquðÚl­ áCqÙ¹Íxn_?7l%=ÜÖýæšÁLïÀ:gQ§"<!ïœE1Ñ`Ã*÷Ÿ×¨ÈxX32°Lb	F•a+G IÆ)8Ê8''à$ãŒTƒ¶r”Œ˜c‚Ï
+ùZ3v»/ª ×Xô×»Ûß^½¹&k“†n Hšº¡CÍ_Y:P
+‚=PÊ›:"9ˆ—+>tÀ!ð’êi—‡PgËÖŽ_Wk…©$k
+„ß”ä8ÇaP/
+ã@ÂÃ8Pp
+Žã@Áè†.w5BÃΛŸ!/›Ã’ývûú¬Jº’å){&F`Ä	þøHþ'˜?âäá–MQOûåB˶¨ç|µP¤´q­R4ã
+ô¢O ‰ñOÀ‰ñœOÀè~ž± 8µ@ù冧R(ys÷öÍMúïþ©m‚õS A{*`äý@
+ N(W
+þŠJ+å¾^)’;xmGs`NR¿&æh$~M¼¯£‰öu]Í3t^Šà fY//}½†¢Z§×ëoÇî0ÿh
+®×¬|µJz?ØqTê“2µ2) …Y at eR@RÈ€0)}¡2(JæäùV¬ˆÀ••Vì…µAïÆáS>Çñ;^ˆ†st¨8 \îu‡x¸6T ?S9|AxI·~Zxäøµ/­?»®) Ú¡9Àï-É€›A㦀÷8@Á;Ê O<á ßJ+Ñ'þ@J¶ÎzMSÁSÓÁÓ#hQ€fpLÇ)VDUSž®´èæk!CLŽ†ç"P^Ÿyj”D"Pà”
+7ÉDžœ$“È\ƒӍî1ÏŽ’Je[›es.Š'Í%Òœõ®m‘žD™HOð>ÀS2šÒªSa£ZóþÖÂï<ü¿ `¶åéUIN¿£wA/Úá¿A)+Ÿàpüñ±tÛó¹ŒrªV
+=uM-ÖÃʹƱ¼	Sed[‹ä O AEÍMµY\Ò¼>4¯67ºîAkpüOÕ–¡,Ì•,.­5ÕXÁ/–Mo÷ÕhëZ!€!8ºÛ>ïºÃ!~Z»D„Øz_”‰éÙyzW«ôZz‡ë<îj­‹ ‚?ä—j(h°a¢h¯«†Â¢…M]t°?îžöÕp-Zk\ÑDsü°ý\
+Gä¬)~œîØl«ÑlƒREÛ‡z¨ouص¸psª{)©Zeµd0ƒà‹ó½¯¡„ŸÄ8UpúXmB
+àYøéPýQ¤tà$Dqº*¡%¬:®Dñû5UIå`UÑCõw–0Š•'«_‚Ö°®ËÐWÕP#[fŠßaSâHÐzzS…ï+V\VUƒ¤::V^ÖöX?˜\°EôñoÒ«mÇ­ã¾ç+ÎÈÇ3=÷ 0DV$ ZÖæÍ€AïrµdR!w#èïSͽ˜Ó¬‘Ž§„:Íž¾TU¯?ÒáUëÕZ6ïWt"üyr¡.XPõSàoËX׃ÀÑÏÅe³Ÿ<á¨ÛV£}¹†=0«y P²/6á™–8fäÎòšWÝ“VÌøl¯Ö/&Î>Éå96oØg E$»q4ç„Fo¡»ŠüÁæ›°´ÄI	«Üco)T-tŠÁ²Ÿbª#ϲFvD…Ð=~IÙ¢D0½nà)’’Ei3¼Sé‘´°¯0¡Gr/Œ>öÈ=U;°»/6Q¾µöžï1>%óªÝ–S+nQxQç¯VˤKl¹è¨yˆs«Ê_†£©Ä`K§†c.5Ä%Eˆà©£"ŸBéÚã,Åu ”Ö=ëjЈìæ‹Éaýž{6ü©ÕNÍþ3ëýš©Ã i²"nÑë
+‘š²‰K½ÀG—ä½M˜0õÑÎ֍j½xLg’à^J´©.x›(›Ä¸d áɱêúqµçuP¿ÑìDp[	a¶ÉrJ•¤ë~•'±•Ùn%]
+Éj(-‹¬§+î>Zž´€Ç¤&jÑÄzZq1,ê8f»=´»Ái®Á¶Œ»_¯XÛ‡-¿G‚„9{KÑ[ºÂ!(6˜‚MÜ$ÂÑKdÜ$bjRs¦¶Ü$&
+W
+”›Dõ/±.[õ³ÙYè \Åë³Lw© ª+–ø¥ ºKÞªÎ7nh0–é$DLÄf›Ë¡ˆ*:<	#Æ&–~Ñ(Ì$ùŒGÖW=u5y­oérYß
+ùSâ™ÛY¨š³o›Ö7ÍÉŠÚKÚ·ˆ'5«'tt"æAŠ¤£k™K±$6“³%hî¤Á¹ÑRÈp๵–w)•¥€K¯†@6өו‘×Å•‘ëÓ@ìù¬Õ/ 
+¾ßÒjh1J4ÿsOËì}˜kkÌõÊ{Õ6å“S,-³N˜È¶(,gj¶N±oˆî½O¡¼bðçw‹}M©Nz®Ñ™^Eî
+a]œ˜VL7ÜÃa7\ð=–Nš/˜÷æíÓ¸1ôA¹úú‹HᎾ•Ù
+u׶'q—B2YÃ\m!vÜA	RÎÁ`¹­ç³IÊ'Êœ%çEð¯—Rzè€O$a+ÄÉ‚Iðo9[ 1£HÅÑlÕ8£HƒÀo£…;)–³D8ö(á{»ú/Wq`Ã/YfµRjY°Ì!€&‹å¾Ì!¦sl¨ç°â	/ô¦"@æŠÙ¹i;¯ŒvɆxåZìÊñ3OmO–#^Æ¡
+¶ÅܧF´¸9ÛÊ~у ²]8jT#ö85îJy2bjŠˆ©Á<pRÛª­×Ž­ð”yQ½àÕSJ¶^#Ïå¼M®ê£`»L¯¨]ðÕNœ)Ø‹ià>՝Éæ ŠË­T;»ü*-ϲ±dƒ““Ù5›Ýà±ð¡°~r<W“þ6ð>)ÎÕAxä€î]UEr­ÇÒµk VQ+|ŠÅïÆt샟s®6úa1\3 ¸f~äp·Ûs­.(MÒó£{)—u¤ÒZê¡œ4<ü`WÍS¹ü£*ÎB§»[þ>\`è©ïÑï÷»ûÐÖ×ǯ¾¿¼DžÓåÍŸ¾{ê/:Íš, ãx”ÒӀ߿~ù*þú’.¸ŠSHb¾xû÷Ÿú×?;>üöñ§CvÌw&I@¥#¤fÞÏy($§žÑLÃÄe®90—Ž¢—WŽf8¨cŒzy™!æ:ƒ³ zó6êSÆ ˆ…nGb}žC®² ctäâÌÈ8ÍBÄ”áiÓ–ÏT„—sÞîà_^n~¿Xý>¸&¡†É›/ü/h–JLø‰äÀ:§‘ø_Ä¥OÿqñC?ÇÄ5ø#í5º(-P¹ÿiu˜®¹s…à•¬÷Ñ)þf³Å.n¶Óë¿ý<O—§öQ§ùôC¤¾þƒJÌ[üSÞðél‘2Lcö¾G©×ÜŒ‰0Pn[ä<ŠIònuXß=ð†þB”²Ì¦(knVŽ&›»ÍÍfýüøžŸ+¹ägP™,x|LXß¾¿ž¤ò`r;s3¯H°ô4°)
+þ:ªž¢¹MI®êZ˜.Lïhà$Q‚	üîIòÏ“$t’Š<€|€ŸÊà£Z–2ÔªŸ"éA<¬y
+<NÑ ð¼4ó·DÞ«„¸Òc?Q¨d×LÆ;n% Ñq룮>þ<ýFñð-6“Æg…;¼Õ'Û:€êfà't=­x`=_ëYSöú:qq†Q6±ïGEb0E¦9ˆ×Y‹Åfü&ÆWTÞ§>ÊË7o¼ ?±MEÉéþîÍOÿxóî’H"?Q/ýyµïÕT7ìà=”;™â\ó‘
+ÔG¦#¤ªŒKF*ð¿È‚‰
+v3™(Úý ú@Cò‚êäÿë~¨Oú¬ûïø‰ŠªÖÌÐýtñëÅ_ßþx>îÁ<N€£¦A
+LÞì„ÿ’ÓyÀ…‚(óÇf¡'¶ÀëòLã¾Ì¥ê+9ߍ¼R{8í0„Ë‹ä‹ÓB=ô
+>P°ZJí§´·£k±âÚíÑ_Øl÷,…žJ¡¯i®Çóè4ⴁ÷ÙÂþìWŸ§Ý
+?Ô"zì«ùr÷Û¿×Wwü!!;“ü~}³æ§+ÄqÎ1üöŠŸ-¨#ô×ÃaHPÕ›öNw»—N]èY	5Y(¿s\5®7S¾ë
+¿ßp5àƒfs(ÜúÙ@my%2 ±Æ«Öœ{Wí߃‰¿^Áëp*±QeIæ kg2‡ÿFºÔëÉ%LCÇ“_d?¡œçŽ¶Örîa5¸+€)ý°BW;~Xe‰ïÓå¡#Ü’Ð!¹ßˆðÆ>¶¹ÚPhRß–ü|RÛûŸĬºµùžB3 Íd:8<b:±žx²
+ë-zœV€#Ó\Šë£òý;ê™ô¹y¨¶Ôà Ê_‚ `Å<ŒµhmKɽ!bì(ˆ€¯JªþæýÜýå=ëC¸Gy*ô…ÚÐ=	EoÔ’ú_Ÿ˜‡2‰ÃG»|ò­i„¤*}¥è°D"“ÔÇ<x¸ W´´
+gÕG§ËQ`\	ýPoQ`'µGîu€ý”Øú
+÷‰‹¦¹~ç͇<,Ž/®ŸÄÃÝ~u·>pM‚{Ð…>kÑÌÅáø>châ€ýÕè	Èò1«û«»ûýMz³ ¸,àçc÷!¿?Ù ×ÓÍæý=÷0^»…±é>x~‹šÝGÓMï.üÔCë¿æOÈèJóõGÂ÷Eâ©—:g N{
+Ôó¤J1E¡[ä	1åQqs—l©¹èaß12ýó?Q¤WO™ûŠî¸]È£Ô>UùŽCäÁõµºæQ¡ù-Hÿ,¸'®å¸MK_W.d)Ì)ÕÚOþšÅDæf€2´
+tjîÅ7Z1)H"ßÿص'‡
+ŒÀã.dº×*ëÕ×xàÄT®SjBú±<÷€?­4“ºœ›G÷¼Åžn1nγ@/¦õêêvtZ…cb¶ùÓí抻rp±¯ý”Üò°MPB×Oôíj@Ù*`‹üõ¥Âš
+v*e öµÜ<1ê™–Ê×™*F½aKŸéö wŒzú	ª–J0ÁUÉ/©(ÁÕ¥(Dò¢“¡­^½Î4ÚpÝÕÿQ^»	Ã0¾÷)ò
+vH$„DG$½!ÕÆ&['”Ãööû]!ÔP#±SuÜ8¶¿üžÕ¡¹2aFíM’%Nã-:ðÉÆbaÙ]” G}lOøuÏC(uBЭ
+²OO:5X·pûèeûòÿלëÏ	K}aÿ št…‹á>˜4å‚°Ó\³óSõpŠm[mw›Ê®/ùüÞ½f³\Úö÷ûdì¾û8uY¢³ëœŽÓ›9ØÔçÜš£M©ÿ1‡ ­Xð&`´k˜QŽ¸$‡¢;®VéeS¥ö»C¤Ì5‹zÐåÒçæòU€ëuÞ2d|M­n‰†)–LjÝx†ŠŸÑ¢<Àè¢þ l0lÈ
+endstream
+endobj
+14 0 obj
+8994 
+endobj
+15 0 obj
+<< 
+/Type /Page 
+/Parent 3946 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT4 73 0 R /TT5 3963 0 R /TT6 77 0 R /TT7 74 0 R >> /ProcSet [ /PDF /Text ] >> 
+/Contents 16 0 R 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 5 
+>> 
+endobj
+16 0 obj
+<< /Filter /FlateDecode /Length 17 0 R >> 
+stream
+H‰¤W[oE}ÿ~Å<²Æ}¿H,±Èjö>í®PÖ|#;^Ùÿ}Ï©êž[&8a%žã®®:U]]U}òÍðÙg'ç§ÏÏ3|þù“³ÓÃÉé…®€ùwx¸z}°Ãõp8ùöxóòÍõ/ÇÓ»›»ûëÛã›ûë«áþúpò%6üøpxry8¹¼ƒ.8˜ÑS‡Ë«A¾Òpùë`ñéD«~ÙÇ”†”‰Ãåíá£g×¹üéð–dcŒ®¬eüùþ8ìŠ×4F—7ªí¸'ëL Á-á«]YF—6,îö%ëèM±kÑ_wEÈš·Îv…غ6A»²1Ž6˜­gg»v)ã,â†Åíñõ®p‰c­yãÝþâêvß½.®öĽcÛh¼¼Ù•užÇ¼¡q|ØÍ	ïÃè£ÝDãáÕ®lðcÎi廟÷YÄ<Z¿eñý®hrc¶ÑoNd_‡—ãFëŽÃît±cÌv“™oöEÃXåo÷Ç]áZÆ\ññ¸o÷¿vs"˜:ÆRóZv7ÕòÁ¦\ßçzÇàê&¼»÷(xdeÉ›€=ÛEBÙ0ˆ»¢Ì›­ä(çûôòðôÅu®·¶Õ[-›±•M©˜R,Ê’óª½}[“GÜýTíèæÔ骟¿¾¹~}¼xõò¿ÇɈkFìÀ¿ZÌUI–ãM#êç®Æ±¤áþx`áNµËÿe—t…Ó‹Þ.N_@Ò§U}8‡îŸðïoÃ?ÿm†ï‡ƒ‹nŒ š*ÐPüX
+
+íhiâÉÇÛHøFrÑqÖAaqŒÌ^PrŸA)`$*_={,.¡™ô>!e†ÍèÜp;cV!£L)a5 ’…1”Ž®¨<èÓjsYwNHô^MAù†Â¾3†§ëUtuèVwFºsÍ÷êðêp±f\åUZäÕnô²Wb¨è¼†ó"öåÝ»q‘}­²ßZ$Uüë£û»»7Aj<ƒ4ˆ!¢§€Èí„‘“¼RèKG÷܏\‚‰9Åú¾T)bª0K¾·m1•Ñ—¦³èTƒ}±‘iWTw£Ÿw£ÏhI×±&[%†íÓW\GØ+n,Sú†ïΞŸùí×ÿøæÑ^z&ÏYS˜È6QmòuÌn¸9xx —kEˆ2~&c‡›õÞ›ÃC ç	V Dè&Êq¡ZSÖÍF¼iŒ8Ò6àh*㆙”PÞŠZÝ‹Ú§|ïéŒÇÀ@j_º¾ýâ±pÙ>æ6~¦ŒHoå‡
+åÃ.?k÷þ+묞<ÊÊ­X…ìV¬Ü~Ô¬ÿ@V?fV§²êU•…þœ7¯FL¼©˜¿äÅÑ3Lj¹ØfÈ!­A‘Æêu3&‹ž)¸i·£í˜ËÈI·L`À ÊI*F¾#·ÐcˆshØÁjÌJf{Ê_ð7¢-ÓKÑÂh«h!–6y³”¼^îÊŒ^¼¦,ŽÌ¨™Ø ‘gERÈ«Žâ­¤¸ª³4+iCž‹¶©*Š2®ašÅ'¬A‹ûØFUÃn½Aa”`{߇<§"Æ ¯T¼X󖕍ØÉ…öƒš`#T]å ÀðK]!V×ðˆAfaoò.H ðk¥‡ÓÛᶠ#êtÂÐÉÈÐÎĹ~&…e$:;ÉBXÏ%d=‡~.A·àÕc`	¾kB•ú”ZöJ5iáƉÿ‰%A±„ÛŽ¾Á îué$ìôl’cZìÅe¬a¡¥Gc	ÓÌ(Õ™ÆÌxÞ{…<YӏŽ°1õ“ ÄÉLêÍ/‰C@¦pÐi“CvQØ´kÂ¥4æÁ‰²’;£ëQÒ¿¥wÀ"¶œ£nÌwS’Ñ4zEK2«ë¶'I¥ã½X=Ѥ!¶=iäsÏq© „±çrŽX£9“DlИêJ8ÍÓE%_úà£
+òØÑjïÎZÆwj‘§çºÞ­
+­¸ÅžXØ2æl“æžél`P§¹–WU:µzæ°+R¾ˆ“µ¼­¯§ª$Ëy8ëͪ/‰dTKô·X2«.œ 	èZ\4,Þ
+mÜG‘YˆW‡kƒ(Kr’»Ó½ïïÓ‘—6O%ÅÚ§EÊT©Ím8Â\ôôÅÅó¯_üýùÅåð×á·aød~oCk|lÚ•ËòlÊü€ú *¸^m̝¨|÷â‹ó§Êç}yp<€®ÂÀÿI¦
+ìÃôç·“Õèxò¾d1V*Ÿ
+J†{™2›>ƒ™wȳÖ!å;>ñG.µé^Å¿q{ø¿ÜF#4ÉØ?ë¸R²«Iï]¾c²Aÿ.ëM¿?:…õ‡’Óa'f£ÕÁ:VeÂ$Õй8M4úíØÇ0'sJ¹ÓÚ¦/Ó´Š>+«º³#ê„hƒQz~ßeêjQ­í«qÞ'…¯X-P&gÖò­¶M\²Ö’5³FÑ\°F‘^°î¨±n°™o¯¦vbÝŒöÕ<oËÖhUb$Ò¤Ä[^†˜}¥8L¸n¤Øë`Q'£®^┵°O(÷E££Lkì»òDÞéú’ŒV~/Í€ÉQ„Ÿ—©šØŠ
+¤ ’ŸïÑ€[ ˾iÔ9‘¸
+祼f!
+	4X§’xˆ— j( >;KSèÏ}Yr¹vƒ˜Z 3€›rµ'“Y,2RÀ'Hp–†A{¼8ˆAGÖ]‹)0ícVÑá ¤¸êºãeâ3Wø,­5û…Ã$$ˆâùGñʈ«^Ž|E°öú¨×Xã‰)4sCºBÙŽ±+5q†¿äv<AJ>¤5´oP[óm¦¦\cùÜ&‘˜˜Äܯ¾Fé‚3Ôôš¬%úßÆ¥;×ä'¬êÔÑ…å6ƒ„®]É$½s°.øZ\ $žtGœˆDÎd\Ö3çõQ¬gšä14G™oåvMÉ'M‘ÜRf²Ö 2ËíˆW~´Òv>:AZ©%¶jã’DÀÜR04ûÀ5,qƒQ¾ƒYœ&¿ÉR³]ÕwÙ|+Ø/Ò÷B¸8ݏßKdúí –ü\`ÑïZ¾ç°ÄVBã[àWÆ•sWZ\“Ú7šàEÊ(¯»¦LÕ”êÕ ¶êÔ«Ä…žéÞ,”·I9ÈC’ªJ#`½Ð“¯|æLåÃU}m"àé*•”X³â1‰6e·P.æ<_²!h¹÷ƨB/áårÔr)îyä­™­ÆËEVÛ¨ËRv©MÜ[ko‹ì°” ½¬
+M7P
+`<UBø:y^önAÌæQ5x”ΊcW•&S7kËÊÅFQµ•2:¸-<oåF°û(¬ô‚Ð5¨}Ïéj雳²YèVk˜Lßkx¦"U=wA½óz©¼Ó‘!7Àш‹J
+¡Ì]y¥[­y3êKcÞè~§VïiGn¹4à$콞3pPù¨úÓw!ïxV؆†sZ®Ïl½Ò
+Vá'g“Œ¾ß¼¼Uu.!rL~ ä‚ÔîKé‰ûBµION¼¹±ô~*¨ªÐèsÑG»r’^jVc1h¨‘ÑCàKÂáÉENrï\K²3Z•tÌN3ª»u¡pfKPα´Õy·–“ú¼èƒ¡Ò›cÕCtFÛ°$qœw¦J3†o¾Aæ¨;ktvs,°ŠÓ"E)ÿ?Ϋ­ÅÒ۾ϯ818ÙOw	Cö’d!»6Ùɳ1c;ì,?ÿ÷tUu—ñ%›ÌÀÌ©#©»%µº«3´»mÐ"U]ÞÔÑ"a€Q§#!Q(;Yí{ÆÞûqðÀeϐëNµù¤žeÇÄB“­X§ò!½'FÏ2¼›|1]‹³‹â’“X:#ãI•ñF%NªŒyº½%ž©¾cáñ<f¬Ob¾ÁŒ/áûŽ:Àj{cW¶òÔX[ݳ¬"‰mstß®‰šÙO<Ôpc›Ê‡ƒú`f[É”Ï^þ7gKg,ÝÄE¬Vy§·°‡è³èÆeÚYö¦¼!¸GÒþ¬¦ªÃBµëÄ.#ù‡aݝárbÌ‚6*‚n¢âÒs­–’ƒz7
+ÒË'ßOLßq†QO¾Sd™Úqá=›u?ÉóV]oä 0 %+ubw¨­g(š¹†c³XCáŒÓîM½Œ?)ýÉlé#s¾Õ³µç³\¸Æêòa#Å×e='1 ú…ã#ôI
+ÔR/EªÙôuð§‹ñ]®T1¢ÁgP‡x>A¡ôç€ib4#$Éâ°kezóÛ½XwÍÑ•ðÅ7hJ`ÌÓÓvÕ`¥@ìzSònþòX£vÆ„ÙíD™®Ö]Xø
+o®*)éÇàP
+c´#”BÔ
+PñÒ`·½3}ÖëcÎôÓÁ#@ôYãkÿ¦`2Žü úÇøÉÚÎæ“êx£}ªËh)S¥#ª88~f?RO +?Š:f·½­_;Q3׋©³½
+õO`<\ÃåÌÅ[ó†¶è¨Yÿ^±¹Ö#œÅjx†=âéë/þw2N×XÏÄæq~­¸I£çà€–ƒMt} Å[«A/4£Óh'7¶V¼Xßé¼}c,EDg#í²œϱQóV\Îksa\Œ¢vçQ›8¢­žÙWï¶w.Ïì}"ó´Xx½€'”X@›^´Ø;èMMNEP3²'ºsoWXNô”§,ñ›’¨G[™â%AT¶2œ«YcÂìæÖ$F»ïÞ&Cé”ÃgãNà3WXäï‰æŠÓĬ«,Á)3…A+ARÞQà³-7¾Àío—:À{oöW‡e߃O[/"#6« æc݆RÉ-è<«	Æ×ôù óÙÉ!èx–·-ÌïΝŸwY`;A‡÷¢ÌÇàÈÄ®xÑ9‡÷©`sdtÚfçUNt=g?;aƲÓE«qÊ8VW¿§K`Nï+ʼn9È¢÷…Wa¼èOiaÐåB£œH+Ât˜¦«É‹®²6bº›“u)€ìoÖ±\|KÞ‘Ö
+îý“`]1$sxñ7Œã5B§—ј+ÉŸ-êS'”Ôj(¶ÍÒw9ê²åêÅgÇnÜÖôD¸¸V4]¹!:ùLëÊþé0v\4¹ë6Jûl©¹y‡ÃdÌ~Vamx_\{4>_‘™WE’"Š›èdˆ%¹"Š¥4õêÍ‹»g_Þ>ûìÙ›¯_ÞÒ¸}þùó—/îžßß=»¿ï·t»ÿçÝï­#mö&în¶Ô>•Ûf¿ñ9Í´“ì~»¼ûÝߤOîÿM¶_[›7Ëð²´z¬µ¸þ†Õ¯îÝëï¿ÿðí»ï¾þ÷·GœÓãL7üÞ~xøp—¬‡™ÿjÏÚž}*|*<Û´äóŸïu¹ÑÆeÛØuá®-ºå¦ùÇMv«¸;mùåë7¯Þ¾{ýÅÛ¿½~wûãíÇÛíÓÛí'läWWƒ„
+ßò¾þ«·zóJF>öíuÉš%À~|ÿÓ>*ë?×î??>ûëË?ׯ,°¿üý‹|ùì—·’D­b›8ÙøæûÇ瘽ý²Ï•ÐÖÅí§œÿfk´½ÙV4#›§h?2ÆŽûu­Eùâ7£4ʂ̼,úé¿efÞ<«òJH½Š¼@z6ƒMÝåH½%Pû|t@î”Õü+^î¼eëBèÁÄù>Ú5ª•ZÌuʸ/Ì(Å»Y"›N5Êh¸êòáî;¼"“
+öMUñ Ås‰Q;Û)$í=PÐ»¶+Õ˜Û"ìŒãð•|Ö»]¢‡»Ý«FŽ–azàOžNÿG©Ë© _VH/¯tùc_©q¬T·ÆÅ¥|l¥³†åùTs$BïÊæWwú’E1ÞódB8à±!ôP~ÊÃ¥Ce·ª#«-aùîùP¨—ñ$s3$*NÆÜ5‡in1<h:	ð)¸óæ\Òz|
+qHÒ&a9ŠgH5Y^´©³
+É:‡OÆY˜XJÓqÑl¾ëZ‡Ü_}{8ÏBž›¥FêÌnÀ0¢™Å_ò¤Îê§gãKX2©‘÷s3¬°Î檬QôÕÙÃ\æåL§7ûò®Í7ˆ@¬Îá¬È™©…Þ;±ßűí­UE»Tª²©¿
+÷N€²ÔÆ=ªÅº¶Ø¯­ZÅóðy­À3Æao…FC§.nñ.çÂpÓX¡ø.á)b{ïôÈ‹¸3-«IIEÔ©@0žYuµ!Ѓ!r
+rvÕ•é`ã|f|’Ï]{<‹¡D,š±iaÏÞ£ë~û£ÈÀðósÖy
+=]SºË§Óœ?˜Ç[ZñòOÎ͘ڏë&àÚi@û*¢»Á©ô²ùzÛ“¤À ç}´h7þÒ
+Úe·mÓih6`‰Åöý‡ênü«ÂŸTpÍ:¾zã¤bƒ	^¦¥e9TŸÖá-ŠK¬^§ÙIÜüj[îì^!V6ccð†¬è§Y껽¿³¥7ÑóÍ%ï>=ûã;[{·©Pö¹[6{—sŸQ¶Nõ±eçÿÛ:¬•mRÓÚÑù˜\\[\l˝5 ÎrÁ t”͐öI•ºÔ0…^’Û
+B`azsaÓ«Nãl\î á*0÷€‹¦H™Ä]ùXRr§Ðƒy|w½Ïn®ú.ÖÝáRDù`ËÆq‰+<ÛæâªÔ°§Ã-Ôb8Å|žÞýp.¶åÎhÊM@ž—Çk´
+B7 u¹‹=ÃU³y=À%ÓZïçùÃœšÜÅ·¢±F¶á«‰l|$öãӆЗú±Ä•nØC[™\ÝΓ§ÖŸüYiîZ1x؆ÏñZa_r7BË2Ù¦ga/½•}úôì¾Xw©[uBË‹áZ»î/ÐÐíNÕÙb…±ô+Fö¤M…|Ÿ¿<ÙÝÚòÛ¹øV8F±Y¨<ïá;Bef”Ñÿp²P†ÆøÒŒlà)›©uÌ4¤“tCrôþ‰cÅ¯'Rqê­¤Íß-fßœZ(î}»æH…s°%jÏ&µóKëÂh"=
+·“„ 6tKÐÉÓ—øb
+L‚–¼ç4¶j,WÛ8{÷x;èÏAõÒ¼HÑd¿o¢·žùhÒhš;¥‹ñ¤bÉŒ·©ùÍëöÙ»÷xÑ€¹)ž^ÄJ¶`M$)‰ø²öèã=(ßã‰ÃË)G!ŸTS;ûÚ—7W^Üõ yvЃŒP]Ë)ÚÝt¼ƒQ€àŸ\1Jþ9‚ dn~µxç3;½Äâ”cˆ±Ng@"ësâ¿ãB)žÂüG5èg,Þ‡O¾œ14_P)fº¬»†ŸcóŽ|o“$P×2•û^
+{äÚɺÖéddxäB§8œ\ˆˆÒ7ÈE–µd¥ äë¬Á+Õ©€žEø¡Ž}œ‡w[Õ
+®”Ñg×Î<¬{†ýGR—©Uͱ®Xì'MsYíö§;™šžT‹Q©Ž.‰…°8¬š¬Vƒ*˜i,9çqÃÎaìUs±s˜Šùæ†Ål%oè‚xë#°žþN"R&n§­“]0ìças­]ªLŸuzRÑÝÀぽ©‚ðHyªhãÈóŠº:˜Ín²&zt6îü$3£FtèÀ;¥°ô Ô¥–Á‹øŽ£»˜sΡ»Ú=5)Æ7÷¨9ŒÅìpx±î'zŸ6
+‹©„ª@ҐN§‰®òÊ«µ5Žåˆ~ׯ˜	äŽúý !%]ß~o€‘¯W²ƒ¬5’çþûœê™Ù®©Þ]ce×éšê®ªS§†ðý‡ï5TJO¹œûåMœRûµ¨=,å¿}{˜4«9ü“jr[	#z*øçQ×Ø!sa sH“Ò
+Ã-ÀþaèÄQ—øRß“¯êlq§Ua±ˆ=” èÇ/åçãúä–Ym.T7³C|>:šhŸAâæçËxÌ‘v-§£UŽ§qôúõåÉé»îììôõåïW±Ýùù‹«Ë“«“ÓÕÊwº[‘r¨ðgø­,1ã…‰ÒB·úzò—ÿœ\¯ä(FYýÑÑoÿù£ã_²É9{ÜGÑ×bùÌ›
+}‡CÁ¡Ð¹†>¯;	ÏFékD$•3þ®½„Ôe¹åN;ñûš–\¬Æ¾¼ß|ÑDgF§}sß½¿zßÝ<??~ùø]<G2)¡|ê'‘¡¨3σ_?uOŸ7¢o£1]³³õûO"Ö`0)Ëâƪwk¨ø*Æ‚Ô‡®	:”–™JËD©´Œ…® cGDO6³‡|zÞ<®?u7Oûr@>ÚdÈ¥ŽÊ< äàY¬w‹WÕÞóøe×
+=2ègi‘+Íc_…¦
+4Ãþvõ«—áXzbôì%7òå@Ûš6»#ž
+Užr6GäÑB¶YŸY•ß‰Ð¬©CôQ†BKfÞfòµr¦j`P±pª!¢-kè7
+¯žCE’rØ\Á$Ž=ÖÅCáñ„W½á´*>™Ã²j5CÞËHH‹¤X2ùÑòªƒüö4Wà÷ÀψÕãÁÄÑp&^w_ZmçA;!f+”[a7±ŽÚ?Р€²ŸømÝ=‰ÑáASps4XGž)=˜k‘5Ö
+§1´+h÷EÄb«@uÛû C±Dí~“g)vµ+
+¢²·‚þ*B!|u´êeh@'Xö\…ÍExp½ÒÊóZÚ+îY„¢¼æÐyD“fæñ6†9”Hæ鹍…¹XÊäBHØv4QrUºßÅŒ"ÉY´ò1P®vñ^bóЗµ*fÁ`‰´Qñ—£5Ø
+¼a¯ ÎGcð
+Ù°:Ò`ÍS‹K˜‡¢0²å.BéS<
+¯žCå'ðD5¼Éº;9ZìeÎg{LÚÕfö²¤D3¸È½ŠÏ`M[Ðý؉¿¸Ý+Œ(þ tïUÝ?îž?ƒŒ¿ßÞŠ=`‘RyüO†FðKdoßýbøƒ¬¦2ðŠEôòÕÛ˜Ì8ådEA‘ƒ>"´¦Q|˜ƃ
+J!ž¾kï5?ûV,:— áyĶsÈVD}DÛ¹2—-ƒ>"±òüw½6šÑčH)£E· Ù±¡Óp|Z車ÝJ±F·R¹ìež‹u! IîÌ‘··âóàuR`NeA‘‘ɘׇ?ÖOkŒHÚÝ"=Ou@éH|YæPyDZ’5–EŒÁÛ–¡ÜW~ïDªÁb9DvÁÍǍ766$æº1«rž‹C†bÑIóŒÈP´°Ó¦†ÊÃ:ƒù•a¹¶QÅ፱Ž¿|`i[ËÂÑZ{Þ'êz£2O[cVg at T8â½h 'ì,\9eƹÞ[Ïò v‡ìêÈòðiêkê桯©Ã…ÙãÁH¿ígùc Ô`øÓ<Ý|ÁÐh,s	ª;íõýÛ=lE÷½¨ŒbÇ.FË£ü¬`}²¼}Ëæö¼î»Òò׫“ë×—'§ïº³³Ó×—¿_ቺóóW—'/V'§«•ë°KݤééqËŒâã‚v!Žð=g‘|üBß[ÉåÍ9ÕP‘ÚV¨ý(…$&¢•9vÝÙ¾k°–µ¨Àcn°–ImåY(¹µ¡’Oü†¢_œ7,ˆFV±é9C%<#«"‹l1°°µhÂäTT‹Ö©^+ÃC¡¶wÁ,2"b¡ƒ£…hŽ•»Ác!3>Q?6 &OÚ·oò{EZ12Wœ£6Y™z'CS`´Õ¡ê??ö_á5êº\çÍMù{}ÅÊW|•Æ€„ÇÉ
+[ÓÁíƒÓ3¢–»{šÊ¨Å‘7Λ¼‘ĸi
+pó¸Î}¿µ7ö,ùÛzIX¹°jŸ0U¿‹âbº høéËÝÃúS÷¼)~'¼‹¦GÝÙíZW7›çînó*ôh#¿…=ÖÖLÖ]æ6•Uc':£õû·~~·€Å­ÁˆÐ†h–DlŒŸë“ÛÚèð>©2{ ¹†Œˆ%™Áš¨‰›Vmž÷˜cØg¶¨½=ÎgaKæy¶µ”í¡Øm£}Пxmzé¿·jÈT^ÃáÒºwÅ囋××ät×yj~@ããqo`[}¥·bEì°Ýõ¨¼»‡A¹lqP왦ú·®žö¨8´¢t
+ÖúÑEÈñâ°ü26.ní‡g9e8ÌÏ©vÐÒŸon–`‹õÇé4Ç~PÖ¢Ov°õùšÉTþ^J0TnÙ	v°W̻ޖ}`{+À2´žÃ>owV·•_Ö6EV…[¤wE§k`×H‚UÀŠ4ÁÝN$„ò.e‚D¦"/¥÷ ²S
+_ÑZîu~ËZøàuúCSDeb(¹GFb¥…lb]¤w$]Ú)'[‘u%V4³MKëHÉøÿ¼%sÈò¹mô‹•n¹ÑÁÝt´cXZÇ“ë4Đ&£Óö¨”ÑèîéhÐôžKëpti‡Ôhl5•ƒŠi”F˲ÇÌãÙ…yzbX“Qk{TËf5Ë ü»ƒy<»0OÃV®Ö¡’ršlF÷6ðz”¬³ÚÍ»,IæÙkIæ)ê†yÞÊ¢¶žI„J˜DiÊïÓñ'õ°£×«‹ÕÅê_ïöÊ2[lEÓáE+Ø^[г¤ªË^Ý<Ëçf=ä@
+û³‚”¡éS
+ùVC’à…IÓk‡…µ‚´n{xE0ÌÓYõ±±E²»_TˆAn™úerè£ßÀčQ-4‚Lf÷¥F@òj†øX#ÐÓøT
+ù^AЄØ=òžX­(¶ìX†jŒ1}LŽ¹ù³Ê4I­è yj?ç" æŽJµ;¼Êù}®ò29;,—£­y"=K9#6Ñ4²šl(M´|&ÚF2mó÷øùeÇD×çýËŽûÙeÇDß›ê›ÿ¼xõë÷G1ÙöT+ŽæÎ3ð˜îS°òÎ3»å›ªM –æ€ï5ÅA¿)ì˜3@½.Ù€wsÀ/5½‘W½ôk ÊTU_¸©íô¬¶ŠñžolAa)j^#]«l瀚_±eh«wzª qE<²´²$î|5ýæê¶KöU±zÏ%ù²X—Ü‹ëî€z5&Þ°d^m«]oÔ±zÐï¢øt3%ĺÑì	’8ך9#9f€˜.k yˆUámj:՚܎ÑzŒ9UÞC
+È}´&´/áð6T12¶½ÕNSW.më&˜´M°Éô0k×$û†uâû–y¤ü†ybý†y"þ†yþ>‡T¬ÀýXŒ´9 eÝOKYxÝiFHÙ–ã¦*Õ%^h^é|ø'tô~¬!7œÒµ&†™C˜°KY­÷z	€$ö¡ÖUJROÜ:÷´ ŐHÉÌ!ZÔ9Ø}·*ĸ ÖÂÅjÈ’­aŸY’£cN–ìè#{»%?†¼ï:…!=Í!ë«zG±Ö‚‰#sts¾ ©àòQ¹ô‡5'&zÛÕH5ÔÚL³I»~O¡²zßC8%ü˜YªqVðÃIt $ÓììÄaÿ§»|v„a0þ*}f1=ÂxðF8,ˆÊAfLõím‡“?a7’ö·-ë·¯4s·Lò@¬Ö%üs¸lÌ#¦«­ƒFh	O×fEŒÐ!ìé1:±ª|R±-ImOŸGêh¯ý`©w¨’ȶ·îµª‘»C£ªÊ½¡æžš£(ŒüzqÍ”qµ›˜{Kã)õšxúˆhÆ/Y3O²ÿ”RˆdÖIòú°àµæ©j;“Û`ŠûE&µ[¹š=Sïð°<ÀL²_ ÓåÓ
+endstream
+endobj
+17 0 obj
+8836 
+endobj
+18 0 obj
+<< 
+/Type /Page 
+/Parent 3946 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT6 75 0 R /TT7 3963 0 R /TT8 3960 0 R /TT9 73 0 R /TT10 77 0 R 
+/TT11 74 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents 19 0 R 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 6 
+>> 
+endobj
+19 0 obj
+<< /Filter /FlateDecode /Length 20 0 R >> 
+stream
+H‰ŒWÛnG}çWôcÄ­¾_ Û€,)k/ìlÖ"¼I`PÔÈa ‘
+Iy׿§g†d§F4˜ëtuu]Oý*^¾<ûpñîR(ñúõ›Ë‹ÉÙŵó
+þ.ÿÄf¾œh±“³Íýl»øÚ\¬îWëÅC³]/æb½˜œý¾l&o¦“³é4-¦w“J*¥¢˜Î…6­&|D#B291}˜üðév¶‰§M®¦“«¸ù`ŒîétÆNgQ©]QÙ*Çoÿ_{ýí·rE2åÛîŠrÁ1*kérÔ5t¶aYÆœb
+³u#8°6hžñ¸,M¹>>6,ÔYBJ5ôV°oÒÞʬ¯¡+˜dö.G±À 7i
+Ô#È$Ó‘Ÿn,2’³5’wfrÒOTò.J¸;D\nØˍRÒoNºÈ(/½ó$A–³{ª#‚niŠ°†¤GÈž¸ó<YgéÓِkJÛ“>26Èl3yø’:$¢À[ˆ:ÎYŸLvãµ´ŽànxGú,µ	4àâ-VZ•ˆ•—,0•€S?óÀ UrèY Zê<,“­ôÉ‘"éFÙ£µ'}iña4ÍßMÃë4p»×$ÙØg—Æ+GÄ…E¶E¯Hƒ¹ãAj­È{ÄœE¢½)mN¤uI*oN·
+ëáK@zëê‰MvMþ¨¹²Èd¥	ù»‚™Ñ:tò§ƒ‰Ù’u<«Ñ)øÝhrù7ˆV¤(ð±‘,TgAì˝1R+
+œþÙðX§$z‰&[¿ÎEi³
+'ë×y´LGÛÑÏl]º€4Öt®ðF†(Ctî;Bé""„f|2”®U´)ŒÔ¥+達'vnþä ^¡ikKZçê‰í¾„3˜8Ìä–‡¡
+ô¤ÉŽ’¦ˆNÙž›³˜@bqÅ·¼cÙÉd¢¯€k–¤N…ía<@kL!ÕêÄ–g5M''dÝŠ#=µ°KgÍT‘WÝ’×ö«Iœ×´ÅŠ9TŠÞ^òÙÙQ®\»OLg7<AŠ¸‘D„
+¹FrÆ–Vϸ~d¡àÜ㿆Îw‹9?°
+že}ý¬í‚gI¶0Nš;OÆÚ“~Ÿ~œçp-9Ù«ùŸ½.ˤêœùCŠóû{1Ûb¹yâÇp–í<<†ÁFšk\³áGÆÈò¥Ñ¼ù›½ÛZ…]§N´Åz_“¥J;§”DzÅZä&1ã#œ§T,_³àkèϤ>Æm.‹Ûwó
+•Ä_4‰ˆØ<ö¹…¤Y
+–r8[–_c+ÕÙ„yæëÄ@ÿ»7¬1;¦UB±XÎÙâq	m%WaŸn›ÛŸxâî5ö:Ÿj{¿Žual‹µ½ÍR,îZG·1÷û–âÙ>òË¬1hjµÝ¹”ß~4^­ëlø5ŠÚyE€‚o%iS&Fð7[>¡S
+\7²}ìÕtrõábrö«xùòìÃÅ»KaÄë×o./&o¦¥;ä®;fSë“À'`bñJ¹þé8[ìAõkN
+å»øBÆÞF¡#›IÄxÇ ÐF8)>ñµ¦>’;2ƒo<Ú€§CG:O.¥©)–gÁã5æøŽ°(FÓÎúø¸à»C”Ú—ÙPƒyrí
+x–=2áoÕöÈ„‘D²c‰¤ö$Ç´
+5·7dZDB L°<£×qzw:VÓZÇ'0ÆÙˆ"ÿœ"ÓµBÄêæ¯fÞfÈŠ~–÷Äögèïü{Ò^€#AŸð+êâ€u3ùXy­uXí+Ð"ðíúÆ5aì/ü·`*z¨¶3J¥]Ÿ˜¯É[±9€é³Z„‡êk at s@Š*׈íHˆÒhé=S1ä Õ¡wK!1e_Al¿ÕX\|4÷Øü$¾ÎîŸðѐø¢ê¥.Rø|¬æçÒª,
+ÉBuý²Úö$¦Wœ,µkPÄ	¯ÄÂò¢ýÉqG…NDìA òÉÃAÆ^†;YÂè“°©<*Œa\hQ“£j÷ÆrÂÊ©Z¯Ö¤µøð(ÛNâ3èq—^GB¥5ÑŠK*µm†Õ}¥üä±5©®à~9ÿpÕshè9ÔéîˆF9ÇúÀ˜†{Ú³I^ª´³fÿÄs0ë±,wA]1>Y[+C£sŸÿõ†1Rƒ¹Õ°R :(@
+¸º˜~.nâÕžZ1M§Ôlû$ ˜tlϾÜ`UX~y=ö(7æ5Hª(”8
+åב’wÓ÷´#”¥3uõªA‰<õØ®˜IP®,fàK5ö?ú\{©t½záNµ—êë"‘Tð)lWÌt)Q\Ó­{/[Ô.¬;ÐŒB° Å)ä@Ðv”Mæè*
+Á4@µY=ëúâ•Êtg
+[ÏuoÙEâý×fhj7ßÖëfó¸ZÞ‹â}8Ž+n¬ÜRöܤ0Žåìa”aë0ñ}ÁÃÛÞ&T
+l;l?>ùLQW<Í…e— Äms·XÒìÀ˜öàÆ×rÃ(C!·XæhÌBÑ„YD`ý¦J[ø55¨Fy¥`|…ˆÏnî‰:éçs8šÛ9z¬ÈY¬L]»&†ÂU¶y¤b iWC	p©R5j>#ÜÃYñ¡-VKñ›ÿc˜­öÈry\§Á˜#]íÀDíF±–¾g
+¾0µ"([¬!„¢™ò1ö”Bé¢xÇE0‰Z¥sܱNé±ÐÉܝ2¹èŠºcéŽÃðÖì¥Csö"Ö£½ìœZÅŒ¨=7”ö´iÄž”±g'â퉩·Gk}ì‚^Öˆw\·h/Z´±Ù¬v!óáøÊ^Öˆw‘ÉÉ>Y˝;¯¤Ý@VgÁPX…d ¬½3î
+å„u÷£t¯mJzlÖùr÷sD"=Gó`ºÊ9×z~ÿ¡îÙ”ÎçkÀ‘'È£®å÷µ‡eÐ&Ô€¸ OÙP ®Ð…bŽ¯á#ø‘"\AäïqW~–Šmyî9ÙbÁµ±±l) K¦Év€Ö®Á¿jÀš°w¶#ñäc»ŒÒ"±}~}ýŠÌiŒ„’…äI¿c)ÖÈrClšR ’>Ù<ê8kQ~É“D£›†Í2gêzJÖËïÙ‘ç\€GKÉÑ=ÄQFE¦É6æ\=¾{îy2å•›@RAg¼€ëéX7n'÷{}-ž6[qÓˆéù›÷Wådž{JIŽö†®A‚»K
+zedJdn÷R‹,ݵVPj2€Ç¤}wMtLÜ·Ñ1qßHÇÄu`ÛJ‡½•Ö¹çãXˆ-ѤUc]ï“°½¬5ÒšC))f×Ô‡Eyb#!ûmëé®Ø™=è<*[_ɍÇg=*.Œ2¥úø ë¨¤r%{»¹ÖMÇ£ßWzÞ’{ÊDò.VòK"G	y—êód°˜78^Ÿ§®|_V{ùg*ÏÒ—Åà ÿD»!Üc}þò|J[™ƒ+sÈ£W .=•_ЮKƒßËi£aW)§±L°Áb°¶’_Sy*F•ÇrÞ˜ãPä^¦P‹_1V¶l­;>Þ®Um_$i]†P›Ö!&þŸòjím#G‚e>&Àf0|
+ÉCÀØ8@€sÈúXœb/ÂÚ²!É9ìýú+ÎCÃâRòÅ0P­²Ù]Uímÿƒ×ûÃn³ýÏÛR‹µ…	Ÿr¦Úl¿Ž4§ÁºÌ‚;ù]©jK$˜', #æщóèD€y4®NÖJöä‚Gj4°`cÃr
+ô©Tn÷Ó4<Û°H~¸º¾üüÛů—?½»,} kºšÁvŒJ*Û<ÎÇ¿º(¤Wçmv6NUJ”•|j9¨cNôþùþ¾Úl‰j5:]+Kì8 Âmœv䪵ŒIh_±ºå$MízàjÅx-%èýWú‡…+oH‡t`'ãéÓÿ]ýE‰Û¶n•§Ç!Ç®ÑyBXCg{Þwk”j0Ca4nÁÇÉÖÞ†åe`ŒïÝn¿yÜÖ™!ýòXr6v¥!σӐÐqÈóè4äytò<·bÉ䌾S-ìì7È.Ìë	Ç£Ô™mQ4 Juóâêùák·«ïpÊÛGZ¼ÐbPËä»õþæeé YgDco§{·:¬öOhÿRʬ!é»K…zõí®Ú¬*чJù³j´lWªÿjûçñKÅcïjÙËQxû¼Û}Ùoþ×UoªÃ·ŽààÉ”Ožv{|²ê·²˜Š¶¨:¼Þ&åªVxŽ«9Bg0Y²CíE˜¿ÒXG
+ßÆcX Ç1,¡ÃÐqè8†4~û¬ÖÎÂ(já”\΢ñCÄ•Äy%Ê7a¥nsg'‡š’ܼˆ¿à%PaóŸ÷ì&¼Ä’š`ìÃèÏè-£a÷ðæˆ2	ˆ&ÓŒî…ÛônF׌ºy®ÊÍK‚e°Úö|Ѳ#fc¢,dÇ%Ô‹Î_NB‰›‹â„>0
+‰ê	kDŸÅ¢`ÚV2ë [vn–gB
+öœÖÍè–Ql9­—ù¢JƒûÚ0ýqÕ;×.údµ´vu;9ô5H÷ðWz›V†©‰ãžJ¬¬³¦LÈûcä(g&>ýÂú¼5+e	¨µ°e~,J»@œø©€Žü”G'~Ê£?åѸ,y›^Z½‚Xò“Òµ“'‚>ï´Žݼx¿éî×Eå×g•#ÚÆ?v½ÒÒeU?n+ƒ²•òœU÷Æ·>NôëãÃÓãóv]-gí‡W"Ç„<ô©IÜM£k)Z
+½þFB×üGtÕ](ò~6ÐGg‘u R×zrÑ0
+0tb8Qg¥ç¸`Òyi±úÀQ”®þJÀ«p\+I·"IÐVaM„2±ùiÃ~“ŒÏî±%A"8„³`‡p6=øW~Y«EÖ
+~‹`~„JîÅ!h—^_mü¦ÒçŸ+<úðÖý¢t;47™ª•£2Çf›3 œ£¸§.³Ai=°\‰±iúiYA+6Ž¸±€NäX‚Gv,À=à‰p<ÞY÷jÞš%96øÛž&G6i¢‰ÓŠXß‚uRâ !åÕÅÇː4üLD[Ýlylm½÷ñoJ§ÈºžèjuÿK½™rWìI»bw¡Á7ÊR%VàjgœŽJFÀd ëðWÑ‘>\þöîöΛ—_B¹ÞÙN.Ÿl`zÜ)´ŒWãؽޮˆT£jáå¨îméÌY·1¿n_Y™p“”öûÜvA¶Âêba5È©0²TØÇ;
+Ò°†½¸ÍAËÝÑwÙPPO(ƒUL&x@×Ò+@·6³ÎÈž¸ú7æjÎÖ?ÜÜ6J§õçMSc“ÉÕßKÁS+ã8¨ôŒEw$Ý¢‘æ‹€šP_Ógþ>Žê4ÏC!ÝPy|ÀÅ4`ŽââÏhlKjñ™þi®W_ï»ê÷§îvs·¹]6Û1qtrqmê?Ó˜ZIŒ;¥­þe¥]ôo±`¬kRSˆ=CŸZÊJãj_V p¯#wc’¤*tR•<ªJžT¥ OªR€ãÆʚ㓪¢Z‰î>©*Fÿœª¨V…3†”ï.®/®ÿøûieѸ}ü£Ò1²Îº?8ÞݦÍ1ºÛ94©@UÜG|å½1póQÈŽ| 
+¦†jy"Sçyn—¥¸â.k²;©-ë¸ÖF‡~!ן¦à\Œ„ÔG±O€Aj=•ˆj¨‚R`†( (mYCÄ>ÔÑY®SiTãu“8OáÀqŠüd2ÅJ=ô-eJeVhŠ¸ö¯î¾{趇:ê†Ù÷´Y{Mïýi{Ÿ&ÁÈ$ªº8<>ln«tÓµ5á`ÔA©¯“t¼Á´ |’CöXÖÕ#[ì:Â[“$«Ö¼Ê„…ˆC6€áWÂqŠ¸‡Ö¬îj/²ê8T½ÖŒÖe·[-
+a°qОlWÆ™…DY¦*)‡Ÿz¹týƒr”ÐQ9Šð %xTŽ<*G	ŽÇϝQ
+éjyZ3üOj2ú±ý?¿»,¥m³¦]Ôðˆ:Ý(ž;žôŠˆV‚ݽñç¥@´1þÀ¸nãJ¼b"¿W1þñ`êdŒ¯â⬊ð{Â1æÆ9U<°ÙŽ~ÆYÝ0à“1¾g\!?á¥É®$É%~ OÑgœË<õØJ½Ýö‡»Éðžh7
+ªó¥öÇ–ö´WFw¤9ª·•ø%Õc0~Á—Ç‘]Õ»ê¥àš®t’˜¸Û€-´
+®„2¦NY÷+%¯§ÐãuT¾šø)V
+=ô÷Ççûuõ5>%C‡®¶ÕÅçôâJ‡}¾ø#Gªª­Ý	VѸ›˜fV- «–à‘UðĪxbÕ7uُKYðãèO9ÔëSiT?.Îq+RZ16Âëì»Ý«uw·ÙvkzÚ!XzLþÈH‡ÃnóõùЕ<[›uä½P÷“ƒ¶RFæyy¾æEJÌBàçQÀ,²-ãJÔBæšØ·C am|Pº_Ö_·)EwyM_r¶¶RÒ]ÞS€‡y¤“n6µ4†˜Å½ÇÆ«é*$ªt
+eXs ÞÜ.›H(1ŵk°WF+Àø
+MBR©$ºÏ¶²x‹ÀSÖsÞòž3(Kgø€nŒ/¿„‚+OuÚ2®aø	_ñ%@h®å¾„ñµ³þÄ%@gзh»9 ÔÑÞne-­3‹69®z¡Ë\T4”åûêþ™; Ë…—ŽÃønÅ6 9¢È	Ù=®§&7ÉF"+?Ñë½ßt÷ë+~­ÂâT¥ðZ‡µ…»ù-„‰RÔ¬ÕfŸ¬výÚÐC„¢ñ—lHä©©Ã9š¿4ä@JòX^]|¼ÌY~=(9\#вIÕª»ÇÝ4‡í”Ûöð­›÷)_¶VôÚwá9xcè.c8¬N·.ç@’1 H…¹( –®QeA%$ÿYlÿ<8Jœ„?N²Ÿã	È®RócBŸ¿e/üÒÂýµA¿ƒUŠ‰Kh"G”ÆÏŸ’,\OÌ!eºyoùõòŽ"‚ 'ç%I
+˜G¶É¼A{:«1$|Ø—uÚè*ÍîŽìLBC/>z“öÄ¡ÃÞˆòÙW—*TǸ“YZ„xÿc×:»€ßÈK•ÝÁbfh<Ƹ˜jØÞöÇ9 èža~D¿‹E]BÇ‘.ÂÃP—àq¬Kð8Ø%8.ÐÏûyÙB)š±X%GoØч	îÙi[ëÝO‡¨i7õÚäë«’ˆÛ²±·GcŸõõtÝŒ³ÇæI!Ko¯ ˜'Bz{o‡,
+~Ë¥{ž7øºIÞpiñ•HNLÞ2¨ŸÔ°EÂóîÁðÆza\À_RHÇS‡Øä®>‡`Mz%ö™á)µÐ§²H(v›ÖÖ25åZúä¥x=Q¶ö&ÍÃöTK8w‘˜í)ÆW™˜+cDmõƒM‘u°ä¤Jpµý³O7Œ¬šœ.>û¾À*Þ'­ð¦ú?ãU×Ó6ÿŠéCߧÏB} mªÔRµ´R(2hª6A`$Ú_ß¹ÃvníÛ¸OAÌîzïnwvVfë¿«±Åc‰ácÝ®ŸW7‡Y‚wKè-Í/`¤ÓMx7
+v´Ë -ë¦ÑŽtÓhǹi4~
+VMAƏÈV/¬'ÈvZ"YéâàäݱζW?W×MÖü¹_]¼b‚»i‘!¥ á:9^ôäJÊÆ3gáÉ›x˜Ó8¼þ0gQyŠMÆÌIqî˜Ó¢ÃƒlN(qBC8=ȆÊ-tšqµ8¦¤X ²ý0ˆMôòtþ~ñölyöý±Fài\P¼*mâz“Rä•(g£êû"´ù(
+£¤	ãú±ò¢7””ŠÞ™Åq…£Vß蝩Üß{lpS75Biî)“¢¯ˆEÇn'äJ£¥]ù¦f0þ³[,¡ í8ˆƒ[bàŽ…¸£!Ž¯))ýB׺v«Ã¤3’(óâE¥vº²0"ƹ÷ÑSt%Mf¼Îù¼"²[b™ªR1N†«ß儦_¸mrÚÚ=üç»ag at X',qFU|åhH ¢°„
+fÛ\Óžƒ`\wo€†qZ{Ú<†CæNX’æ10¾94hp%KÉ_„q¹R‚<Æ`ßµø„2úÊ&)áãAd*Z»1$zù"Óshç„U‚K`R[«ÉYý]~^/?~ýeozÂû³@#TWP OëM#,·Õ¸¤°c˜.}Á-‘I“ãYžŒ:ر	¡¹4رƒ¶$—F;ŽK£Å¥ÑøzX¥õÂpav™Ã	PL5µàºIÍ%QŒ$ÔÅÁâ¹Y=l†LPT¨,bYÉ@1ù•=6[Úl
+ÍVªAþõ]¢å©	¯ýªIígœ24Ú¤Uß­²û‡í=vRkY¡4
+Ë…JÎzRü{Cµõ]`›Ú³h .:M²v6F…+sëð“W±kÛŒ+ÐJ÷®àj,E‘s×<Œ·ÄÒ«{wâ¡ÞmsqÞeyûaE?Þuãîá(wSÜ»ödÜ[¸uwÎñÓR}b#rÌ	õ¯Œ0—À[:U+GÍú¶Æ–ƒ¸gXt²Ù§ún½©›õv“ÍŽš¦¾þ±ºÉÎgómÓlg—³ù|ûœ{:¹´:+1±ãÈÛ«VøÆe¢ä^‡éâ““2—AQ"Åð®!Ë𗏩sÕçYúD‡FÊ‹X±é,m©óJB>Ç–ØÅR¶£Î¢¢	DõO€ *ò
+endstream
+endobj
+20 0 obj
+6639 
+endobj
+21 0 obj
+<< 
+/Type /Page 
+/Parent 3946 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT6 75 0 R /TT7 3963 0 R /TT8 73 0 R /TT9 77 0 R /TT10 74 0 R /TT11 3960 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents 23 0 R 
+/Annots [ 22 0 R ] 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 7 
+>> 
+endobj
+22 0 obj
+<< 
+/Dest [ 35 0 R /XYZ 94 385 null ] 
+/Type /Annot 
+/Subtype /Link 
+/Rect [ 329 679 336 691 ] 
+/C [ 0 0 0 ] 
+/Border [ 0 0 0 ] 
+/H /O 
+>> 
+endobj
+23 0 obj
+<< /Filter /FlateDecode /Length 24 0 R >> 
+stream
+H‰”WÛnÉ}çWôcd[}¿ Z¶$Û¬lÇfœ— -Q²6’¨’ýû==3$»8Õš
+X²ëLuu]N>ú(Ž.N9Jœœ¼>;~6ârƒ—?bsù0ÓâVÌŽ>-ïO·ß—§«»Õúö~ù´¾½ëÛÙÑ[|p³™½žÏŽæó ´˜_Ï~RR)ÄüR(­IbþChÓùďhDÈA&'æ÷³¿XiÄ—›õêùQüuþÛì|>;¿@ ûØô[Dì('èî„þ0݁_‡SºßÊAÉ”ßÊA_nŠÿCLrÒXåkàzų‘>X]ŸY\”ÞQÜ#‡Ó
+“%!nÄ‚…j+mN‰ÉƒŒ>‘Û,Å=µZ:ãˆOþpëe
+!’=.Y¨WÒ–ÂWÐ+qËBƒBšÈéW<2âòJ“;}ç‘IK•2IýR…<]KáÑQ Ÿ¤ìåîŽÇ%i¼ñ“@£p²v5îwçeÎ'žX ÖÒDONfûÜ ‡¬ö¤ˆâݵÞäˆÏ7žE:+“×Ô);Æki=-7ÛëÆ;1ÓòY¢Øf²Ú&8"²£kB½‘‚…Æ$ñy¹ä±h°B&n——ÔâG
+–d‰-»uÚoììØRuŒ9Éæ&ø\¦LIÆñH[œ:ҝ×l¬+ÅŒd€Ö¼OpŒ7™ÐÑÕ’¿{02&c&§×†(qz:K(<n'Ç×FíèþÙðÀ ƒ£ýÁg‹JSàËüF²8P[pž4Û7öd*
+^äždœFÆ¦É™tQ›'Ãt‡{Pn‰…¦,¥˜[g	'Rnñƒ-¸C·Å¬ôäœ9o¥? ¸o<0IŸ5¹P#™œ©@à]†$³¶„Žøa•šìõtÖ£‡Žp¤<7kvv\Â}4Ý+,iº\2äÿD†@ƒÞRbæȫ}©Hœì²ðº4•yì@	¥Š”°/ù³MIfœöº41N‡ˆþ
+–ê¬å¦+*b×õrú%­AÃ„\³íœ Mm®‘K^!AœBÈÕHñ• #ï­r5’Í—ÆÈÇŽFv@¶üÚ`ùmYl,:a‡»\ñšÚ##³²ƒx6e:ö'ó¥×˜a§Mí±!rµÔÑÕ;µˆ\ÔÝÖÈk^ºv…©³ý¥¥\£quzX¹¥ñ‹ÝÚáxµ¥ð#¸º,¼Ø‚UŽàžÙÍg4XËÖ¹ip°)/• k—¼ÂµxÊ<6'ÌØ,M0yªzèWׄݸÆE”Ä‘	àq÷ ¸ß
+}ã4éí† O'Ÿj—oÄ‹Ç2‚§ì©üä°€ùdÒ±‘]9D^GÈe*‡r¨¼iŒ ES˜¬¡u¤J楡?£šàâ×#=ÙÅ
+;©6àeF/Ä
+sŽirmD{CÎÖ%dûÛ&Œ~Lvò`ôDÒ¤y~ðJÑá)ê¹âÞfVž¾±SÝMjœ¸Z6´¶¬Ç6š.gíHp
+EgLÊN±I‰ îI6qØ.1‘µÖsE×PC BC+§&«I—<Éâ»–<4dA³\R4Ÿd©½áŸ*	¬qžÇ!с®ªcÙævXCÆYÒ³«†äC}
+„Sþù	YŠž¨¸á•‡Éy’$ðìD߯ø°ˆ¬ÎuYEìË"Ê×Ýã§NïÙ­ÞÃFkè=T¸žüØÍÁ‘ÚÄ(°rޝñK¢(4kB x^¢aRð5ðúönÙ3ûù|v~q:;ú(Ž.N9Fœœ¼>;½žÏŽæó$ `¯;Q[¤ì¥èî	ÂܲìL‚+`lÁ/©;k¾øz·^Š/7ëÕó#OÔˆ1Gëè—÷ü.QØQEÔPöµc0j©¡|þ-F9:c(šÕa™Œ ¬¡­„ÚVB¡’¶]Ó½rwDh0DÅþÙ•uì×q~·>R/¡b•›.ÿÅÕ£5t¬¶=R wÙÿ™`üKÁô*Rj?èk/V_ëã*€míkØoƒ¤ØaÀY‰R…´âc
+CLÿ›uà“ m>–uIòz9û—x8¨LW”ºE¸râš?0þC0Å»íƒRi;•—«{’~ãÀ49ë³z ƒëkÀò €™*׈§F	Ó˃_~³†\ Ï›mM±£»eµxZ<ý^G`qpðÑPÜãòoâûâî?–¤¾e
+u(’­†_¶f+¿Ôv¶¨ãl<õõ~õ´ÜÔî‚“¥5M”
+kºpþFs\S£Ã…1{<CóäÇxµ
+6¤ØÛ’•®e3ÌÜ4ÆÐ6Ú”ÛnwÁrÆ*©Z‘¬Æ>«ñ+;j㎭|¶Òöíõ©Q*­‰×\{í쐺|‘²ý¼½uq^¼â;·Ó=Q)Ü£ú ƒán¶ÁKmC
+iÍȄ!›*çÚN	Ë ÿ•iÛ­Æuq°¦€"1
+´®g¹ëÕãê“%¡¼#'!ó*8# ”Oš$ã
+v0V
+à(ÀÂ"€ÿP@†‡TÛ?;8¼0^eMìÆH
+]þN sMZÎ	 ä pJv“IšæPÞ± zI<`µ¥Mñž² -Ú]6C‰ .( •#tûšGØQSí;ìY’èŸ	 {Y„8òðâ&-£›&П*ª»|v<|V£«ÇÛ¤(cáòÙæi}ûpÃY¯c?;¡§í×0 n
+škòÈNÓY¢éÊ.«‘)>îop"n7âé[ÜòN51ù½ñ’Ù‘ZP Ø>Ó>¾_ŠÅ†ÔÙáفW#nÄÃj}¿¸#@¯]ÿ¼©€•¢o,‡ýµë¬>,Èxãû~+i<°úê‹h)lpܵޭƒÉ”#ë°]•.Ž·kÅ%Fx•ÎqŸõNP§ýWxZÂ×ØÔ6²n×9ÍÎ:ggbã1ÚË>9¡s̘ºïÆÖAA4âÙZ™x¶&>ž˜†x´Ö‡)lý‡#óV¶ðí¬ãˆv&6"›Õ¶d†ƒ#[ÿáȼÕJLOÍZþ£!êX[ÝMQÇëì4Ek¬)Ë7E15köz.@„õRêC‹Ãÿ«çà›½Û§¿¾úü¹å76Ýi´y¶z¬ÑR®í#]ó š@EG #‘¦BaÇ= u¿4)Òœ­ýŒ5š¥¡Ž5šQ0ÖhÚ“PÇM•Í¾Œ4šË‘ ¾ŒDš
+¤ o?}ø'Õ@hX\ùH mÛaxÅÒ¬T¨ù(•	ð+IH¶íƱø¥|mÿLU’{Á–°YiÏìVåN%à~¬>òI&;¬ËŸÅñ†–8•ÔŠzZÓ•u<Åtj£Ñ–™•4­®[ÞÓ£Q&áp”ÈÖÞYñáÙ³aè³eíù³a´a´a­RdT“™zéC)ÔAôt÷©‘s£‰ÃíÓö%uXì~«›ýu¿¼ÿº\·
+kø7ïN¦ZžJ÷Ñ¿­i1ùî[¶òÙŠ•ÕÕ¤õ½;{ãÅ·ÅúJÜÝ>ü÷P ëŽ`øc‡Vì^ZíN…b ¾D(¶¬Û^m™‡fm˜·ÝÚ0oÛµa®³Ù^ùýûª«?Y¥}çbÛýAyµíÆ•Áw×€}–÷KÖ6`[ãØAä5-E#Í‘5Ù±¤‹7ÎקxæÆæ45Ú§‘pŠd³Ù]]¥t.ÀÆ¿ö=U®W1F¶ºÈ¯eÅÝåú«¥X~¿ï/ž¶vgE ­R\œlÿzçCÜV'àeËâd at .îr£¼’µ@2Õ.‡j Ù@!­«×ÁѝA¨!‡š ÊÖ¡&pY!•ûùç7½=ÿ|þ+Ìè
+C•¤Q=8½LU’^V³³ó1y&Ie‰òãQË.¤MS_hmÖLˆ¿l+Ëíñv8ÙZ¯¶á“:\¾IøŒ7m7þã–0_7|ÁÝÒÿuËü×"A¦=Ü8 ±­} ÌŸn2tVm‡Û/‹~þ|Ò_Ooû‰(g‡írh —Ëùôrµì[CÐðC0°°%ÇÂýM<…R˜žà€J¼Éâ±ÈefC,4…U|nÝîøüµ’<ÚÊ ¡F‘Ho)èNÛìö€1øN»JÀWJ0¦CJm	è_QÏ€3‚<¼î€örô”Pò“YeÛ;hÕEO3ú⹈1ÐWÐ×%dF¡KŽî±¢¶Ew&)f_û«4	“f¾ÆÁ>=æáë%mho+8Öìd€/«ßfA‘yð—Bý$Óÿõbº iµ£èÃ\OÿÛO~yªa5ÉŸÕž¦,áNöÛ–:ùæd?n‰“ý¸åMöcù¬Ærsnó$Iú@bY\I®ÍÓÏe.oN•ß[OTAþÛ\üPžƒ†â* gä{!&S~'EŒçwÑ®)ÀeõíØ!‚ÂK a?BP˜[íØ‘
+ka„w.y¸¢;dµ—	¡N÷`dѬäŒa6\²‹Ê“0/	 ílÐîÍk8‡ïA·ábgŒ"qñ” <Ž0Î>¦lŽ
+k—hýíeµÚ‘/«‹E˜Ç­ ŽË]oÉ]³iø|6z÷ùã/§B¼Ûx”nDðGÌô–9~5½]*ßÔB6¼&/›TšÔ–¿B®l¸Äb ’¯>d2R±KåÒ5óµ–â+øv»µ
+.o¨±µZc ÚÝrÄÓÕkîl®¡X›•¾a×Öòü¹ˆÝ…jù†[Ë·Ÿ×Ëן÷‹‹Çµ¬¬UCªòÛ®ÿÊ݇âCcUS +»íØ”#·=xÒr=?Þå#jTÄõàj)tÙÿEp`.Ÿ¢¢à÷oÏÄ„CCn€¤E÷<´œb…gÁV‚wà+±¯µ]¶Úw!–7ó¾c>jÔ·:ؾÅÀ
+È>NYh’]2™bHžy¨„wáQ»z(¦ú¡Ùw†³ì¬©¡l‚5•
+5tÌBñ“Tª*b&¦Ëþ+‹7b8÷y
+àcU™ëº,œäJ_[“GGµö”=ƦNºè(ttúftvþë§Ñæ´Òº¹AaUÛd«!úèYíºq
+¿Cìd6L4æ!’¯O™HdÚ€ô\ŒvTuLãÛÉq±	5(_\¯ÚêÓ뿏ÎϹ¬B¤u)UÙ}øx2úçá=ô0R×Ö p§[(”êªé„øÀ6
+cØWÌš
+1ƪ×þ`¡ŠÉVur·š±Ø¬dU]
+6Íꥮ˜á²ßû%½÷K‘%ú!;x
+—¥[·+{	p›ÆPèo,â#éLÉd×9KC(þ aN±±d™HAîáNŽ¢ÙÜ(
+ÒŠð›Êǐ‡5UšÓFkŒm½g¡&ÇÊ ¾òÚV×ê=?IJþN²Úx‰ÉÄ¢Ñɨêp°·àÇBë:m|:Ö×Pþ10—’6Õ+¿o
+5ŒþzÂCá3ª4¼sâ›c—QU9¾[Ý/2«±+<x9ÚP—&›f‰Ãdgv´†tďª;‰Ä!]
+½êK^:A
+!jŠfÃ5ÒÂøêAúïüåzI†˜ª†æ¡²\VIûÆB¡ÿ¯¡lÊz)Y]—Ú%‹µ0R×ÍÄC!Ê­­Æwqh%Õ#ªÝ¸ØÕìw÷uʾ™+í©n¶ìYÑ8X[÷FÇBÑœÉ×PÁÇ›rêÖøÀN'	,^óP/«¢¼Ó?PµéŒÖñ1{k¸‰X¿ñÝŠ}9dÖÃÛºy¾Ì¶JBÕUµÞ¢Wl甯«í;/²‚Õu	ñƒÑ&t¨õÆ
+ 2MèG0Šƒ@—©†²ÝáðãêYË&:>+°XcŸí•ˆÒ;ËÉ
+µQè3¿59lÎC‚7ÔžBÁ]Lg3ž”„²ÚŸðÚ©H¡0|¼3¾Ó6?ÿñá=}Œ†B'b6^öónHÔèüÉèôí“?‰/~<}ûáù¯^½9yûäÍyV¾¾Ür#í(wHèæ0ä'3Ó' ©ÄÙxCÖµ³ƒ)ôÅ 
+ðôëøK¿hcH0¡ÔÿÇ^73„^NÙ„3e}žÊe'ÁˆÅ‚ñ—ÖS¡ØÈÖþâ‡øœ¯°sŠ%~º|Æ+p8\’+±Ú¶–DKdãüGú¿:Ÿ—
+¬l-æHž6ZBKO ¼ôP¨†Inyá¡ 5ò;jf”äNóAȝáem¡ÎÓ?г†HÄlÉbŽb±Nv:ÁÒ–aÏQ-}—´#à¿òÚ.KRÂ0h“xñ”vØ®"+©4F¹I´ƒx‰‹‘œ'›ö‚m2ƒŠ±‘–"¯çTN©ƒû{^Li¨qGÓ9á…ª1¾U‘@Y¿g,4„%7ç„Štö{Ö3²³‰DùŽbPúHêÓñ
+O)£?d0л´§&c>AÐýQÑÞïG©Ù‘mäZæ°Ó&‘2\ôËäòF,xÚµÍÆÑ~d}­‹šD38ë…f±^CÄDò€ì³XzÔ”ÁÚDncÌf«"Rô/¤0%e}¶Ø<$H:Úg.ûN—Ž¿xVPQÑœš“½&QmR55lW6>‚dšÀz~	}7ç'—‚ÿÉ’„¬ŠyÉÅSÔÛxÁÏ;×阧n¹Š- …2ÚTŒ¯úE'Ĉe™í25Ð7¢Ÿõl5jü$uÎÚ™­S7L–ÃYásm*º©ºfS¥îlŠº‚ßôbÈSŸ­
+ÏžÐæ¡z1æ»
+±)xq5žçâÛ˜yÆÁ±¨úö«–-õî Q8ç)ý A	úf;®óÿëzÌÅÊË`VS•/Þ“dQ©t}òΉ<AI
+ùH‹äK/7w«ÙD\ñþ«b]Zl[D|
+½½¾›³ñ8‰\Y[Á…XÞ‰\!y	D0H¨PÁ)çoøö¤ÙШp¨ò»ŒpÇ'hÕ e_@‘¸††ýéÜ·d¥	Ù°†;á‰Ä:ü_"?±"A¡UdÏY¿\ò•¡†›MýAŸ1‘ xF¸Lšy†Éˆ¹aJàÕôzzṳ̊J’´.§lmim:*¡¼°†JRš·µ´1T’ø©lóxõìM$åñ¯–zN&’;°6FC“¥öÀ³@H
+w<j4Ń‹â@*.’Œ¼æ€Ò{‚ä>ÿRa‚WZÂ#iÉóÚÅ`²fÝyžË;)rø”‚Wœ!¿\ñ‡c€ZGÎîÙɤ!v‚‹ôæl˜F:­ ^×?4C¿¯Ø™L឴἟ð §;Gã¼üÎkûØÉÈå¶Â¸¿D®tÃ!àLÅüû?åÕ¶Û6’Dßõü€€bß»Ã@|Ùl€56ô6302eP$ƒ’w’¿ßÓôÈf—ÍKüÃVuWÕ¹xØ"ßÈýS·\¿™ñxÜTC7u°ò.Ï—	DB	Â*X˜PN+&â¦*¹dG]‚59˜ºrsî+n®ñŠÊÛ_“©Å:Âh7«ÖüR¿LÑÃ%]]‹í/.*}¦#dñ°`¶îþCÕýoʳƒ:ê¶Õúž9Ê¡§nR»óbtý‹—ßîÕ0
+«5—kÛÄâz(Bmm«hË•É’XžÈÿoLÇÀ¶=4ÉåÄ0úù¼]Ìnï®gó/ÕÅÅüîúó
+Â_uyyus=»ZŒëÅñ¼J–	ï¾Ê®‡ŸYÐ[FLàÐÙ1”/hÊÿZqêà2yÌUØ™ä2;?à®Æ 8# Ü€a¿,ÆKV¼¤fAaÃR“Õ½¥s«|Öo'Šè¸µ˜¢FìѨˆpAÔÌÃa¯§< chµ¦nL7©Ö¾¥@?íúCÕÞÓñ,…M¶üb=åµU]lÄxp·#ൄr³¦o¼V%tSMH7ìž
+꜠òM¢„¿Yô %¦™Ç€ ZXÈ
+{€Eûh–צF^‰‡ë=h½9Y¦CµÞs5µ«ƒý.Nç•ä`k’À‚o©À™ ^4QTòôď$ÙŠÉïܪØFÕ&%ñк
+4C­´5X€Æ‰÷þ0Qú ·ÚŠ‹.¹â{˜Ð¤Ä0UílÇ£¡MˆF'cÒ½©ž:²¶²ï²vƒvøŒÎ]èÛ-%ŠlSµ.Á”#}X¶1²í¹”Aº½f`ÎiÊÔ>äC—?«	‚Çøs†26!Ìz‚§.F9dŸÍõ>!	;E}ÅÕ¼ƒ‚E;v÷Ýf_íxrhPÉ ¥ã/»ž[h¼‹â­é,j,?ò(¼ÝV_9ÅÃÖÆFtüçw“³­8øª®œ_1s
+Ã{FÅSçä q_¡áAŒW¢ƒt at u–GgE	Û®o7/{öºbÔX…Œa‚ø©þyÓeåIÇâ›CÂ//m\Sã2¢8p4?Ÿ.Ç…CÑÿÌ9¯i‚­}Û3¸´ÏtÎ-öXѨö¡CÚ=#¸p°Æbjî»ý’Ç€´¯Ò¯¿u:Úd`jŒ¸Ã„Ët
+K
+‹wz·Üè^íò{¼«ÁßÊ؃pú¾[6?3és¦Rµo`ëŠ/)	+ƒâ¬üÎRV
+
+,Ü+b4öA@×4k*DH­‡'(5Õ)*QB7•÷lWLIÂ'°I–Xþº)û	EŠäIÃwiçÅc«÷Ü9k„6‡µ.‹ÎùrÙ¾MŽy
+ªF³ÙÑN嬫Êc¦Üt¶Zþæ„›µó ’ò¸¥ÙNKì„ëmjÕ'nÍ¡¶¶Ñ‰b÷/˜Î(À4MT#ß‹Cÿ6¿•¼ú*Ih÷ƒÛnšጥ5º©ÃÉ~oÖËu&…)׍‹÷¥]3˜tØŸÑŠìÏ›lrèjM[‘µ"·‘K…ÊÕús^ªÒX	ˆ*QÁó{¹Zãd`m´ê!MŠo1æýa½ä^_¡Aò(å;Ä@X½FœÜöղݿÈÈíbv{w=›©..æwןo ÕååÕÍõìj1›/±ÂG«ÁæÃô9ëwõ&ä1g_«Z’'¥c¹h4Ö#Ø1Ë h2z FÀ–«@^gô9a¸“n´ÒÙêx0Áåéâ6=—U‹Å·ÅO¯§ô79Wüô·çC·Ÿj¯/Ú^Ú;4µ1¯3¾Û^®õßúXQð˜	fŒå)®‰’§B®à{_§”ù“`ó3Ž?ÊF÷q⇖ç”V|09œ* MAÂwßPS{8Àáá?pËoòÊ‹ÿõ¸^>f#N§LÃfXhñ
+—#$
+%ôï¢ÞÄýØGͳBv¡N>9å£XϹª)„D—DiÝ„©1X˜_¢‘(Ú'ΦÈsÁzWâ7kÌùë1Ö!¹dåKm6ÕnÅs‹Å»8ãÅeiù‹à`	å³ɪmpîdö¸ÌY‹ôÔD/ŸÈ+ºV:è¼Zoººâ
+›\bŠ)@ŸþÀ³
+„4§”²CS1(xeåzñäë˜íj9(›‚lDPy´ãœБÌæp§»ÑFN±%’³~ö†r²Ë|ÀáPí`œ(™«£ÆÒ!ãH΀)Â@·(¢êžïr)!Š£¹V9‹££x‰ŽšCå±ÇJlÅ¥ÍGD#ށ§¯`êä©	©6V¼Ã¿oþåxöRµõI‹ƒ[09çgôIàÿ"ôlpÒÙ:ürŒt±hœ£/›îCvìE)üdeLN<ÊÀ|g?
+¦ˆ&DYYϳ6§IrÇvY	ù+j1ÕD®ð>º3Çh„œY®0w>ÊS¹JÁ—œÀsG6x'§þEÁX,rÒ3’sZòšuòTRÁŒVŽ*GZl>ççXf^¿þycïÍ	+îŸWSÙËÊ5™@‚có‡ðÌ6‰IüÁ3šF¤<auˆ”ú;ÞåÓ¸AÀöh'îö_
+ÕùlÚŸŠ*	ýD¡&·B‹ûÊ¡àdmN®f¹•1µñV.ﮟð2p'³“Ÿ¢½"Bͯ1Þˆ÷å­˜tíÎéæÑk#ä4„3²u~6îÒ²¬Ë>¾¬ƒ®œS!gO±q]ÿf :æºð®CBvQñ¸Þí–‹EÊdàB	§+žàñ›<×cd7•é†ü:F߯W«®ï¶ËŽÆLå°N—}à9+û	“¸è¤Ÿð¢”I;ÑœœÉÇ@Å”¥Þ‰c6E°¤Š‰ÞF׈‚²ƒ|kò«ÖT¡Á¶ÖˆVT‡¾kÝ=2ï‰iRm’|ˆ}ûë¤«­²¢ÝTú‹Î‹j²«ª¶»þ;^)ãø Ç(s»˜ÝÞ]Ïæ_ª‹‹ùÝõçlkuyyus=»ZÌæ‹E¨`NV³fxˆwÛûq[gìëU»<äŸXü|êªù—öa½mëݶš<Úå#Þë·ùÕîpØ}¯þ˜_]í~T¿…ÌâàP[—yAc/±&+ü)qè˜Éuj0/L&­6hmlþß\gäÒ/©hs¤Åô©X a(§Àò¸F¥²€ÑCý_€ £ÈZ
+endstream
+endobj
+24 0 obj
+7960 
+endobj
+25 0 obj
+<< 
+/Type /Page 
+/Parent 3946 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT4 73 0 R /TT5 3963 0 R /TT6 77 0 R /TT7 74 0 R >> /ProcSet [ /PDF /Text ] >> 
+/Contents 26 0 R 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 8 
+>> 
+endobj
+26 0 obj
+<< /Filter /FlateDecode /Length 27 0 R >> 
+stream
+H‰œWÛn9}×Wð1&4ïŒcÀ±Äƒµ8Ú‡]¹íéKòJr6™¯ßb«[Íb“-Ï"Hì N‹ÅªS§Ž>“ã㣫³ËsÂÈÉÉ»ó³ÉÑÙAæøøC6óå„“šLŽnªÇÙ¶þ^­WëzQm×õœ¬ëÉÑøàa3y7M§Šp2½Ÿ¼a”1&ÈtNš_•$Óÿ¿ŠÆïî7!-õfáÿ–1M¦‹É«éìÛcE%7³Í¶z=ýc2øÎ;j¬°ø»u*™¤œ+ƒ¡$ÕÔÈZ/fU/%µJ;Œ_d¡JÀ-1t–‡ZÊŒVúôT/hÆÅtrqïÔ?oŸ½@ó .<€ Nkòï›s<1vAŒ—Ô˜>CÇ"ç¸sâ5uŽ!7—ÁÍÞî©tNÅöElçÌPç…Ž3àœJïMxÀ 
+åc\¨0ÀÀû\UŽ]Uü P?ž¿×$>LÀÃYnlZ}û£šoÊrʝ6ƒÂ{qÞ‹ÅOŽ†4Kbœ¤Rz»ó»î¿	ŸÑVP¿ó>_-žpœPÖ«³Z"„T‹¼Taài4Gˆm!³ªXMèá7)Еj/ѧè|¶mÆ!Hh/-z“§êò}öø?*”u©
+UJó</µ“+Ç:+PÍ]¯¶Õ&vf„e‚*„Þ4ÿ®«É=6*g!°Ø¬•§Bü¸µH8£1yÖ~74	nÊ6ë‹6ŒX²õqmQ2
+J¦Ž§ƒ{ËKÚQ)Bu at no
+d‘_ûE±c)¨%í)S­ÓëÓ«‹à¾´m=Æßp2ø¨ˆË]°CS.C™ä::¾ç)j/ëæ	uèÄ8Ãé$¡k1 ‘	¤pSŸ»)jZ#5öôæ4ŒH çbÁÐ ‚¼G­áŒI 
+Clà¯ò³<P*†|Âײ`y‡ BQ2!~È pÝǐgRȆx€ø$sSQªQå;CÇ}%i¹Æ<&ªW#µ	/±¸r… –…ƒäØ¥-4€q”{x‹ 0…±û¹Èòs&µWˆðÁñ„ìòᤤ­X©¿…èÆçñ1Í„ô÷ñr†Ô’œ*+9FU'£ÕÂ%9 õƒu̹´ýÀÆ”O<U{úFI<!I¦@½X—Ö*¾<›\r‚8Aí ùÈGãÕJ¤Ô„Á=À:™„C>ܐ$Û²
+v1”–šJ•RÏpª›0¤ºÁÌ©ÞÏek:›°Ã©ÝZÃò’ZwƒÛ÷Ý|f°±qÌ­ÐÁïÀȩهˁ©àÙ²æðíÀÜJ†BT{k6¬Èš‰KÀtí!™l£À†æ\)ÅÕYóqõÖ\\Ž&,²g3ÖŠ¥Bd{k6²Èš‰LÁ¦Eú==ÙÄ‘
+ì­T+VnSÕ¦—›öÚ´43ƨDrÖþ¡2Ö(Yë>à¬5fg^T_>°s#•ÈhLP«\*L.ÆôNЕŽݾú\ÿ¨	a\
+Mü‰áñ„OÕíëRTrT…5‹*C÷kV'¼ :#Š!	ÃYBÂ"x¨0 „
+¬”.¤ÊJgíKé1G»©ŒnWƒ™,­D÷®ç$ÉÜXY>c/°kr¥qrÖõZO0]k‹Ç¨¢’9^|¤0g½°®øH
+ä‘LBMÆ0ÈdÈI  Q2ÏÉïçoXeŠáò~'Á:q$e^…~6aôëÙ§«Ï_Nø/d…ïȨ—ÒbôC4UHEV÷ƒH•€EÁ¶¿W{½ÈörN䗁—Ãwwõ¢ZnêÕrb,•Z&¨lnb|Ežêiê¹TÈi•Æ˵Ö1à‘ÌW‹§Õ²Zn7”d”	?ÔCðçGo–-™Âs1¬!òÆŽâÖ–âóÖŽâóÖŽâóÖ¸­M®­b¯˜hü»kï©vãìn‘[»mV‡˜è›çgÀyqµ–»Cñ†3h1|wF÷õó‚|Ÿ=>W›Ò9þ oü‘ËãMý× 1$‹˜31p_f}s3½ß¦4°„`mGí;£´O‰ü>g|ßqQH™jgŽÂvP¬vfa
+‰´ÖÓkWï%s[ðsWñsWòsœ¤¬¬‰j()wV—Ñrâo–»¶&h×à3Tû×é¿>_”|g%ISæ*_æ}¼aÈÝbý˜ ö‹OUéôèobWÇÏß+rd:VJC-ô:@8	h˜Pa€¦ÜKô"ÅF8,WŒõ±§ahñ¾ÌøÁ¬;½b@Ä-P0¶P²î `më¿`mË¿`3óÿ0~X´Àße|²¸kóË«‹ë/—Ÿàï¿‹m%þƽî5Rû|CôÑŸ£FZh„0C )‚„31 k}ªÎƒ*({pacð1`ƒ—RÙñ. #Ê'À²à¡+bÀ<¡@·¬R>ðB£[–áàTôL»8’Ù9·'8²±£5ÒoPÚžùrÞ‡ºå()X×ÂÞ¨føLÐÿÈÃ[¼ÍÊ8S1@`€¡š[]ÊFK" ÁùǀܵQ;#UY0vS°¶“·v“·v“·ÆÏ›°M³ª]³ò05†<£,5.ðE`š8›<,Q*.1V\
+ÿ¤žn_Ňy–Ù$œ:Fp»,Ô†,0ØÅ;‰!¨J9~ñaŐ:d°ü!ê_.B·ðLjz„„„³$ÚÙz=CšÃ ¶Š'ß¾Æ0/{‡¬r‰éÙ›ÄÓægC•Qf$ƒB² I¼lS÷Ƨ—Ç òe·:¨ˆ€™^X¨Eʸ«–#´	s¾H!
+^9¤`íH¤dnY¤`îh¤`îx¤`Ž3T+ ¹bEJêD›®O¥Ôc¹bËõÂûv×ûç¦Z¿¹«îëeu‡ZmŠrÖÛv»®¿=o«’Z•EqÃmt/ÔJVÛÄ—=¨	DmÚ=xj"aP:Ž!ë´{”Jc)Ýô°‚LcWÇè4¨[Æ!-²ÄEµH¸ááµtI­ ú–PÂÊûÄKu‚0ÒA½
+nÞCu2½R2¡Ho„½„jR<9èø;º””°ùr–<Õ#Þ XX±?Ï¢¨±<	8ÙÃ5>M0ÎŒ–Ô:™ËÌ°&ÔÄ J+p¶ü³q/.ð›DªB	ÔÎ=á¿’MýWEê
+J²)Õ•Üü¾þQÝýJ2´”»)Ó.S`‹¹ÁüUˆuóÆŽtÖ–sóÖŽróÖŽqóÖø-ÊÊÍt9†—’.óԏoˆê°,j©wtûêìq¶Ùܾ.9<¬/ Øc§@Ä%g‡Ç:,s±³³œ~ùBÞ’[!$nVþ{‰íìÎpuúáü¨Rp‡…‚öèÄ›ê?ÏõºBzJ)Ñ’¡Ç"ß–I£¼Ž?1 ª¬Y¼"ÏÓ6R [cÈ{MjÄ®Ês`…üÌ*²yBL£¹£Jjt3´Üê°Çiƒ®D3½
+~ôÈ–fþ?Æ«®·m#‹þ>f”à|Ï Í©­¤^8Na»@0 (6ÝháJ¤<‹ýï{†"Å9Ô7Ã÷hx?Ï=·¨òÆaVÖ~VóÖaVóÖaVóÖ´+Êâèxfu„˜VlÝøY}¤Ýkà Izxóëå]m¿ü§}<T‡¿¿µå¹Íª–6¨yòx'lº¸NrȲ‚Ö±:ùÍ™ÒñÖ» RìÈ~&rT\	 Þ«ÇÇéOú•µ	NKa
+¸d€Ã\ùÀÒEBW{Ê ^~þå_‹‹ûåý¿#¬E\ÁRæp QáÂYà# Ú$8
+ˆõMœöûn“]Š£3-gÌQ—lojg º›ð¬ôa
+ɨÝ4—^C dµgL¨•ÂUG˜C»ó‘ß²˜µUÝÒO ™€ñpØ eÇÖ»Ž’ŠŽ©ØrÖ«3ÇX‹ÅJIÝ-“íîÜ7T+h;	á#A¼€ä×ßn»-o²
+®9;Ðâ¦ò3SÔÓq£k7sÐÂ,õ(b±uÞ8°uÁÚ³uÞ:°uÞ:°uÞšæèe%#©‰YÇ<ruZ%ÔQËص's©6¯É®ÐඟyxC÷¬‡Ý„Ä~›šÂBl´·lÇï…±‰ý™ì"²‹/þ\À=Òçwl÷ÇÓ©ô{Èȶļa³Ã„Éôçü{ejL³Ÿfy´»Ú6&­Âæ;	CÈ8—&àÛ=A†bèùÆër¬Ý¦ï?üƒñáúäU5’~ç=±hÜÀF¤ß9_À†*y¾­u¥8»ýk$ŒWu¼×4U-'uáO'ŽI±[¨ñ ¥—·‹Ë›ß?U¸ ~þ¾Þ0ƒÊZ=Ó`…ýgÉãWŽF"?R¢öM»°À˜Ñ’)Ü’µçÌ¢ùHš%sÏš%sO›%sšž¬Ê=ß-=[ÆyÒ#Q
+é¾û¶ÚŒOfÅ­í²•SÝCqðìq›ê6+c¸Sª>«E—ŠxƒL5w·:ñ$í¸•¾ú+žMßV/íáЖ:Ìæ×sìs7t|3ÔbüÚ| 6»×Î¥Üø	PéC$‘˜Y ”rôÂõâþžU*V®ïIâ/ËÔHP!®Šñ®:)QhÄaôu^ŠjP½Š?üïñÌY.wí³`Í¥‹šÀYDbg4Ó«-‹:)'˜/ñµ<ƒœœ’LGÑ)1ç“wÇ㊝z!Xˆ€N4g#9&1«cΓÌmþWj©¬d™9F]Yè2
+!1ÛeJáÕ.Ó -ìZC]¶ÞSŸi2ë$ÁˆõL.LÔ	d·[Ú[XEÏüÍ]5´îŠ6Bž"€Þ¨ÿc@ºÂ±/í#!dôVÒ+‡SÕcú¹É$íԼݵ´*õ°×SÜc;É©ij!ÜäµÃ×Õ¡ÚqîqUyÍ°–S/£žÌ¼ÚW‡IrMm»šýð•RÕoã' v	1$G²3ÎÅãv·k÷߶›§õæÏê‡jѝ¹Y°² u]
+è¾®ª»¶­6[®¨ŠýGï‹);UõTÔ˜Il·!ÞÕæ	ÇKF”X[[_%0Ë~ók3$I²¶Aä½É1’5R$kLY)+‹B$–}EˆØ¬Xáj,¶!b³r¦Ž½6=,ñpVz± Ñé;o¢á
+‹ÙÅsD¡1§Gš7Ž ÕfÅg”nj®I ü*¶$À°áBœç°f@ÀœK{:Q„1µñ¾ñðR겓äU0Tƒ÷‡Ã®ôجҌ[6ˆ†B;—X>PhçËÒÝî[ÞLiºP”€O‹ë«;Ùxjj‹{¸Ø–ªýŽÅΤT#3ù•3ÍÅ?:‰6íD²–¸ë…V\òé†f”2L`ÜŒ
+·ªŒ”N˜V¼¨ÉNÄk™õUYëcl½xŸø©÷·¸ú«•o;QVNáÇ(j$ò<ô»´Ìß°ª0!{>*ցÃKæžÅæÇæÉæ$Q.{1ƒ+çë×Üe&påem偻¬Þ=Þ€ú$!Ü9….ÂewÖô¤Ÿyxs<(÷ß¿<¾¬öû"¿¹ìæ"~¡ŒÏ°›Ë®/š•úxõéýÇÅòî÷_.˜œ à·	ðší.+RŸîîªwS?%LLµÏϬçO?î8¾à	3h4IJ¤@øzus¹øcq‰Ÿèj»K¾(Ëd¦špîKºAâF>sûûââóõçÛîC…dgWúÑ{Š?dÉ")Ásu³¼øüé7$ð]5_þG¯$M+Ô-Ä^™IZ!–쎝ÀD½Þ‚cP	yë2_*è#›FÓg~yJ}]ò7»ÆèPPJ`åôß}ÏTœ5Ó–03í¢p§drMªxàx"́!¸‰Î¼ùÚîøX	£ †QëŽVÖûêûæ©¥+Õ`‰b‘Nü_3u“*0dÓ>ñ%‹·Xfäš’e$d ×“á¬[ïG‰fê/ñ‡lŽr|Oaù'0„ï8óÔLíãúyÍYî@2ìqÅ¥Ð&*6Á õv“¹ÃxÜŠ…=®¼­Á
+Çmé ½Ò5^0ö[¼d=.ñ‚µßák¿ÂÖt˜ÊRg²Æ”\¾²Ç}VLö¸u䆸ÇߪŒû¬ èf\f<m­n§N>¼¹Ø¾`Küµ}j_Šû×g%í_›q|wfûY•Ð­$‡»'yìH{ã}ú|¹¸NÖ¨p…¥ÖV'«àöã/‘/Y÷Æ—üΊtµÆl›óINC¹ÿÚVÓpÆ]0KÌìäþëöûËSõ¥ÐaÔ60ö€î¡ç«ÕäCø€%k±ÚߎùÁ#™Lbp”<¿µ@ŸïR ïa>JE?GÀñ¼øL8kk0¡%ܐ¶ísµ>ì8{ÎÔA÷e诠}]ݵmµÙÚJåÈqX[&3˜q"y»—SÊfë@g%sÏgó@hóÀhsÚÎY!üSBiì&wÏþ·¥)aɧó7€´¢W’W7÷‹Ûë÷‹´ìQh‰»vÄÅ’—>YTfG‘‰T(+ˆ":Æêü8Dý)¥¯•Ç” h%J…¦
+BÌ „	8#ìU5,	 `VÊ1ß‘'Wô!9AQ°7ÞR°÷1ØÔNåRèIÅz;åYÝp:ù^ÂL„†ƒàDªZaR _d-#‚/;©¢¬ÓÔÄK@JZE/|šu8ü(‘ÄVʨÚkcSÀ%lƒBÙGy“KõŽ ®©ü8kš j)´:tãNl®³g 4¢v&¸ÓÎä>‚ ÔB2Š[-`®tœÛ2Løò7Î&F,4nòÜ‹ëþr%°—XO~âa5FV’1(%ïçB"L& ‘Úg¢q Ùyýþf1sPú¼¦ü‘-Tìö_/?˜êiuXñ€^QÆQ?·ÀÜ;êÆCuÔ|áVkMwõ}ÏÂÈPÛ&Ð|FÙq*=µžË‡”b…Õ‚‰ccı`ü1“nÂ=vh©‘4ê$¦=üBÓÔVEH!+†èÚ3ñç‘!Vº9—‘)”GO\æÈqx1Z=J9rJ*LC¸’ØBM“„öÑã=z*”(jlðõ¤J±ß<!V¶5Ÿ›XÆB…S]=OU©Á´)STìò³Ì8ÈíóȈ‘ä‰íñÿ	 š„ºÖ“ÐýÜûP–"Zâ.Ä¤YÇaw?£­1ÏPý8ÐÖÈá AÉÆ_ÿÒd§ûßDúv×{Ô‰¨ÌSè‡<R2ØÀЏ·Ë«,-eŒPŒYfÁquš%ßæ¡.2ÿ$¶Ž€spӀѥÄw…"gA»I|ÙàŒðPÕÎüŸñªém㈡÷þŠ=¶@2Þùž9&©¸Z£qOIP(Žb•%CÚ é¿ï£´kGIÛ0ßr8òñ±ºœWy°CŠIð±J´¢¢ƒ¢ÇgàUÛ¾œ¦Çw¡Bvu…ÓpoFƒ˜rm‘rxdÐ{
+šK`
+E¯Š`kT
+žc‘®WÚØ
+*W©ólõr‰ölu¯N†¢ñ¼^=ˆØà”Ž¾rK4±áÐ%.ã3²› icýf˜Ïråc'5¶zŠ/âõ|ŸUìsò4Óë°]J˜'}¿¾&é&?{V:“¨-áb÷:¬ªXœ*èU‹E–†ˆ=–¡wâL=‘ëóì3Êj¢ò\J3Œc5EJ}TÎQC¹Ômæ?}-ÌPt»¿”¼½5ïþݲ¬7ÇÌ13;¬WGÌÞýºPœ¹—§Q³©œA!bSêðfâ–Õˆ¶/Í
+‹ñÈÚš±êd¨…ÂÏÇŸËs2˜<{x_Ú5tiÊ™Ø:5¬ u”+À†ìA3€¢ÊŽîÀ ì*Àœ­Aö ŸÏ P,‘@xܬ$ˆÛ¦ö)¨ݛԾ)$„Nj'š]à ˆ8‰!èƒ#¶@GôðñŽˆÞñ¬â3NJϨnj~†#{Ôm™g:rÇíH5ÇÐr4ÒO¯²ÌO€Úµ‰±SÃ:±SË<²SÃ<±SÃ<±SÃ\æÇKùÙÍ"3í$V<Eñ™=OµRŽ¥žhÀ–nÞ¬7óív±^µÆSÕ•ƒÎ¥Ï÷ÃzCš€Z·å4ª´l
+sÚr”OUZí+ØöÛããz3ðÅ…6Ý@ò<t±â«'Æ°Ð?+¥W]÷ûõåÛn¶â«PÀÂ=~áþ¦
+HcŠ%GBd7Ö/9
+:X÷‘ƒf›y·ZtaVz’ƒ÷·åN3ºÙ&Á¸ïþ>íˆE
+Š¶ÙŽdF¡ï‹ž¯P¶cË:¶cÓ¼oÇ–ylÇ–ylÇ–¹("Ý‹jX
+Ø…¨”ÜRDúÏöFÕRQœîÒg7oø Æí;瞏QTUB	øÆ°h€d•0DKÀ¿`$&³ó	‰.iŸÚ'8
+4Lž\M`Î'íYÙ<c æÒWmš«|€Ý¤O,V&® ãUÖ=‹uÃtDb`âÊ8’g!7ÓaÄKÀœ(Èàòõð+a`1<r È-Åܾ…‡²J!¶ó,Žà‰âG€ktæuÕ|ÔÓb$ðWmz:­FB»mG~£«µÕ™u9óÙ®Ô²Nô×2ô×0Oô×0Oô×0³µåˆŸä.yH„hbÆý²%H ÖOrÝN®—Î.óͪf`uèlÙm¡6¸8Ê8$=ÒŠï¤ÀI!iîî‰£û“eg¹ß¦¯“2¾LÛ×X¥(‰t¤ˆa¶E©¤À¬ÖCéu&ÒÏâÛ±ÄßÂ
+?~KsÇ›òã©_“ùùsÄQ}=6Hëk˜>5Pãs2Ÿ;[}>5Xãóɼÿ|o~þ¸|\-ª~×yÔtx]P&=õþ/
+
+3Ë­-*Œ—ÔÊ ƒ©©sËŸ”3 N:âÉ×(Ô¯	@0è°ï²‹=/$%V‹È„lÕH%!¡¡€ WB;ñ|p
+G˱W{±+~à¨æM¬œ26‚pªDÜ‹H
+vr!;[uŸÅ/RÂDÕ©úD„"ɸb	kz‹Çs•[ñ™
+{µYBó ^‘ĔͶ‚ãzë•wðžêäWEpÀ¨ˆ¾zÅ™»ê¨9t9P 9’l”µ/NP´O|êÉÃv1ؤbÌÕ•¯_½“ŽhÆNX¿ÒåÍÍ廫÷7ãi¬YÓÔ¬ÖJ§[$%ê\eðE÷ù›x|§ùTwm#'Õ—üAIͺa3?pÄIW/´]Ά…X\äè­«Xu_72
+-[½‘XáÃ^ õ»ëѹï1Èl__V†r_]“¸dß¿›y"Ù(’¬V9§ÜåP¼ƒØR‘v1L’I¤!Ò'VЈ;”Øï‹å²Á.ÌQW̵ˆ4Fõé,‘2Õ
+G ÷>):M“A—ÿ5˜‚ÔyrÆðXå‚VÑV¹Eè‹X!EB—(c Y°Ä'ªë®dFéVÜ*b1`ÓS†g—Êé…·¤Š0$OÞÏ@ÆP!eÂtb}âU¶lQ6vÙxºhŒÇºá5?Ûv3”ï¤ÛÏ’$&c»õ™ghþ¥Å[ÒËh~Жˆ5˜°–Ǹ“i-ºÅƒçY·ì "܃<Cä!߉H¬h¹¯ñJÕ{Šlf#Œü•#>Ϫ&›à³®&h—å/ñÑ{Aô*²1ij͎ßðŒÈ·‰ð¤UŸ‡ÿù÷5ÎpJfdür1W¡ý¶¸¯ì­V6ðòhªGyšhM<iîW›añuv;ô¾ùïqÞ]\Ïî+y«îâÕ0Ìnï‘Ÿ¯×ð~è>]¼~½þÑ}ˆ4.I…uÑkŒ¡Ã”³ØÞ>µ”»¥.ƒ‰tC¹;Ž›6À,>#¦—ðUB/d¤ƒn‡)‘ )1Q~¾×™P$ê Q±ú
+endstream
+endobj
+27 0 obj
+7574 
+endobj
+28 0 obj
+<< 
+/Type /Page 
+/Parent 3946 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT4 3963 0 R /TT5 74 0 R /TT6 73 0 R /TT7 77 0 R >> /ProcSet [ /PDF /Text ] >> 
+/Contents 29 0 R 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 9 
+>> 
+endobj
+29 0 obj
+<< /Filter /FlateDecode /Length 30 0 R >> 
+stream
+H‰ŒW]oÉ|篘ǐGóý~dßùÁÁáŽ@žij%1‘I‡KY¸ŸÒRvZµ9†µ†jg{º«««/Sïß_~¹þ|£Œúðáêæzqyý‡SëÿoÔ¸Þ.¬Ú¨ÅåïÃãê°ù1\ïwûÍ·á°ß¬Õ~³¸ü/܏‹«åâr¹ʪåÝâÑÆX§–kÕž\VËgeñèŽÇžž2þâ)$µü¶ø›ûûò_‹7¬M˜¢Ôæññ‰!«ÓÕõØñ°_†QÞ:¯S,~újÜŒ
+‡?­4›¢¶¦Æé{,ø}µSà •¢Øb´Ï%O±Ÿ·Yt¾˜Y­vÆwU8ðÔªMÝÇu·aXg­®µv•¸ç@×÷@šOç¾^»íuxðïª=Ñ·²Ãíjó3Vü¾tiØ©Í7Š­Y‡`Ê»¢·ó&éjsŸ2
+D¾‚­©c.FímOÄ‹caÑwñÔw†õ™w Žï3±ù¶ºìÏ—§MêKÓ¦@‹©Ö…«VÛ[qöÚ%ÑÀ}À'¡ðÇoÒÏå¨sîIrŒÝ‘ØQ—Áñì°€Tã0‘ÁaÅb.êdkÇŠõí£à³Ž iG ;õü°Áüôtv©‹dDÕêpX­†Ûã‡hFrk¯R4éåÍïsÒé¡-
+¥€~¥ƒ=‡d¨?.¿`(üoNØŸsâ­Üÿ’}[þoàøâ	oýcwhR«‡žÇУÄqIÊ:}p®e˜%tyÖ;]œK=º‰Îžv³Q»âmÿÏÓfÞè]Céá´™Ú (^BÕænVÛ«7}’ÌÍQ^N5;Žè·‚kµ˜5ý§(}Æ£I6
+ì÷Uc}!:£<€ãn½ÁÀ¾UÏt°xë¡<Ðiq¥6fäéÒ%G/ªw?ËnÇØ}¤tœ•¨W^'Nj=ñš6[kÊVÃ)–2õ9¥9Û)>Åé5e…Á©rÛŸú™c³vÁˆ{qǁîsEB9/-„¯
+Ðú}O+n¡ÁÅ6þuÞ ‘ŠÈךëAYDZF`‡H57t¸]—S¿òέÀ¢7¼ó1¶Þ°æ‡¢hщŒ®(šw’a3¾Ç@Ö|y@#©õŽâ}SɈ'šc‡rTŸÅÙT]ðÍTIþRw±ùªlEÈŠ*GÙÂ?†ÅkÆ2Ôx+†°+ú'…œšªÈ‚âÇ–ªsª"
+Ü;× Ñ™ÊÅÒ8ª„øÊ¡˜¡^B‡=my[$þhMÁÞkS‚ˆ—r³@['¡3s 6QÄð}·åŽû›KN¼¥‚îA†Z¤îŒ3úౚ•'oyÚ*Œv¨²…ÆV›°Ïz4·¶­„RV‡S3VÄž•´tX9a¬¤LÑÒ”.Ù îFÕ!‹½Wê$?5 c1‰`÷ŠR"Ī«©¢»ÛGF¶Eê߇¢9„òÅ=‘!îöõ‰2- “«•VÑ¶Jí£2Ê.¡ÜGÛâ•ÃûW:´bcŽ‘ñ‰Ž¢ˆ
+óð³ój¶ î5½´MB.?©;…bS¥íS!h©9)xύ82V›sî°ŠRÒ³¸Ç;c¢°€	å®
+ìŒM=”6°E࢖C‘°`C½
+Ëôn‡‘Ÿð#‘ßòŽc‹ö©Š“¿ò(2®£8—ÒÁ‚õèºLP6Ør4žåœ²UÓ¼ƒ€râTœê%É”ã†ë¸ìˆÓîqùBÄ=”¦ÖY(.g¥ÖÙªC
+éŒÔ:ïâ’LíïsÎ0˜¦çSì/sÆ0¥ R{ōaÙAèÂœ™à$ê 3;jEÙëŠ×IRýŸ<k­Æ)‡s²Vq='™CEÚƒ
+)IÙã¶Á #œ$Ù–;(xë}’JƝ”Äç*bxöÜ›ULŠâe=¸9Ã&ê9Í?„ù ¡wÎ¥ŠxbnvZÔ—ß+YmÞÌ	î9!cXåü™q‘IEólAÆrì¶Ü4‰
+gp£G§"¡Ô £µÉrTñ=7؈:Èc©eÞ?$Q]ºç̪øFâœ-MFB9›/…™÷g”·™Í˜rz#"3'§¶XQ·‘C›4rd¯Æñ‰Gïâ¬T_Z¸Øj³èáÛi&„3:(bÅ3FBg<äq¬ˆ¶hkMC¿ÆX¯–kÕž\QËg5ëƒÑѼdž
+FÁ°ÉA@ù`µ­fS(KÈw‰M5§È+µžq€à‰­"nëçš›Bù©.`„Ièž{/ß¼Wì¡”I><»Fÿ¿ @^1œ{(·=ù2I@ùi!Úî(W]²´ZRÉ‚›ƒu"^¾»4ûgré¡÷Üüy
+3nω·dª,îŒOt:†s΄d×bÅ™ûÕ#·&klöýÄŒ¢Ï‚¸P¬Qh•›­21‰Tð@Påh£„÷„‹¸b•WÜþ Øiq:ìê@)ç£1õË9”p54‹ ˆyZgOB”_„揑Gòm®¢ª|Çõhîœ}©äÕ{tWU]Qºzt¢{“x•;¨–úœD¼ú>µüHÒ*®´ÍÂäœãT‹ÔÎKè¯7Ÿ"ÒÁ/`>óÛ;r„`›ä
+¬4˜›†¡!#ÏHHî^žLbHðÖI’kyH^
+ÎõàÍaTßùÄ÷º:Ï	£™gDó!n@¤$3Aˆ&k†œ5‘Š¼Úþ°iÛV{¡µ—yø–6Úëćí«åçKìô“XÁ¼5¹GÓ%¡m`¶]cŠÜ퇵¹ã¦È:ŒÈÚvÁé+|:µ&Î:À'<îöŠàŒEùÊîvàâoáYÜq%ëàýab§p¿—äV–\ˆ•jûSÐŽ[Yšûo†zŠ§÷qÑãè$îs4É£ú÷v÷Üö–Ÿ±¾Tÿjcܶƒú">M÷Û}Ÿ¦{‡3sâTºwxÜÝ[/ tïð·xF›('l¡gd´i²ÏòZ-£t—ð%èTÎ «/U§$ˆôDmj€N¸‚|Ë…
+²”,nö•Ïãà¬.Þˆpo‡»™]
+”D~·µ Mä‹Ë‚â¼ÃCÌÚɱÙq`ƒÔ%~7Ô-	mkÔ9Ψ\(²í£`?ÒŠ¨\$®ÜFCaò‰€ñÃD—•£)„F/5w¢Våuù£pM¬°r†—õ‘¶
+\F*mHN‘4|4Iv&õHJ$tIN-%S$BXÐŒÈÇõÌg…mû\×Z†Ã^m3ÓâèåÚhí^¢Ðdu°òü?ÕW>…|óˆáŒ[¶­*`aꡧÁþq¹øøåzqù›zÿþòËõçåÕ‡W7׋«åâr¹LʪåÝiþ×WÝO¬èm…°Ƨ¸™£@SY°¾j´{é±÷Oû™µ°%ÆAù:¸ÓÆš{¬ú/ãÕ²+Å‘D÷ýµœ±D“ïÇÂÞf„1ò…ÕÌá¦mÝ{ 	,ÿ»Ï‰ÈªÎjWÒÙê¸u222ž'6ÇÖп¼†n&Ÿ-Ì”3ä—íqoÙxÃùý›CÍ뙵Ï6wĽñõüa›ÔÏ¡l
+yþ
+»™t#ØÚ|æÛÍ^ã<8HFY¯ ›)ç0­½;C~þ¼å®áüiú´½;bÕÄÆ{´í)èŠACOgÁØl®`(áܽÛP0Òδþ2šî&îM°ç¾8õÒ¸ôÒíõµ(›Z¿÷ãñ-–G¤Õ6JÜâٝÛ(qK8‡n¯„‰õ<©nßN¿X~°èRÔë3·‡m0²Ö÷-Ñ
+^çÑúåÿXN·';{“=·ý·ãfÈf	þ¬•m¶›P¼éºj­Oo¯ß߯޽ùp\šlhMÖNü7}:ÜBsý™b‰ÈÃÉWpØéŽÃf¾ýñ¸C–kë_,¸Ñ0 ӍÈ.	 ë¼Þ94zðߐS¹ ÑAÆ\NÅ_ at ut§
+T€“^B
+âAò0ýzi.Ä×[z÷Á•›\MÍ «Ï1ÌdöN?ö?ü÷¯éßÿ5ÓÛigq9茯…;Ù nÌ)Îà]÷¿Ãá„ßýÿõ‘ …¨Va¿ÜÛvèljÅæÐÎI:À‚°;Ýc™U¤%\GpûéÉŠÜ`j¥mWã±q…þ?aÇK!OÍBïY’±Ç7	þEð[D
+¸È0º*žjÒaj¼?}lÎу³$J‹çÈ
+ñQÏ¡
+¥“R•»ùJ•gÛä\oèa÷nwuîó¼b
+¹1ºxÃg +LP$dhEr—ÃÁØEHw˭ㄴ浆ÿüc ÔOY£?þþûçm¼GY.Œkíÿ¼Ò²„Ôì—êcL–&*ÇãÝHþ þàÈþ´P
+Ñ#:ò‡ùpqR˜M’i!VÄB
+‘½=$YÚ°ÞEúÒÁ:Gaü-Fu+FÀ@¿°	Fóí/Þ\¾"¿©¡và6×ÿŽ¥˜î®ÃÞ»äStµ8x¼“;/‹
+‰ÎÎÄúO›ïÄ|ý¦‡ØH|e:¶—ŒÇ•1'ßaã—"J¨³^ñý‹/uÍdò	ØøÑ‹K†³(ö^Ç¥Tܐ¤5'ÔcÙk¹$^ñ8¦³ÀK/EÚû³Á7”wkäí;Æ;ðÍÜžE&þjg«¤œúÿfG‚ÅrÊ€‚
+¢X¼6ÎÂaGî[º¦?gN:‰TÑìË4Ÿr•ßšJÔû揩;–zï8f{‹‚–Ã¥<‹gñ7E>‰÷`é”Kh2fœu"'ºŒ²xÎb# Á۽§ÅâÚçXÄœ\ÚñDö½vK”ZST{uí»16É$A›ÐÐNѱocôºÀ™… +ç}‹¹ql7ü¬IƒöNÃ~C9Šèƒà³G9»^¶ú=66°ãÞ¢)äÜ^ÔW…|-lB’¤Ñg9Â	×ëA
+Åwuf'NœAo]ƒÓzìÍúª®ox² ÇX݈Hq ,ôG”Òdä‚°’—ïUìÅw7Ó§¥&æ•Ä†ËKmâ¬Ê©kç›\#V³¥Ž*OqÂ÷BðTs#²?œŽû“pä¦_æ‰CN¸&—&“éA]Zá}‹å¬Ï/íƒIä/Eœ9Ë2‡¨QFŒÈ¥É%mÈr¬Ã77Ð¥»a–ç‚æÃIάâå‰S÷„î5Ú¸ ¶x¾ýFdqD¿×è*9ŽZ‹ÁJivbmbÔ\‘>ábž¿ ™ößù«ÓÊ\”-²"„¯«­Òw%›ÔÖ*µƒ\r"IÖSvÚþ½Ö~m1ÂR{*çÕy/}rVÙιš·ÀêýRŽ7"­Vy!Dº›aX"²ôŠ,á¡‘Þ”[¸±-N×z&OJrBš£Q»GR}Z!Ko*ÒÛœ l™šÄk1ŸVͧ´Þéu€Q&!B«-ª 	ƒ‚¬ w’÷YMyÊV[·sMŽiž$MVQ€¹jå¶ù}2vV‡ë«ÓNoZ…VÉÓe°8<úLŠPdÙÍM,¡‡'õ§iͲj9γ Œ‘½~V ˆQP©?KF._³6fN÷º¤×{C>ЪŠIçkVëù9ô§­7Ý.áÐó7"²}¹ íÏ£u3{!ÊõV‚œ—ÜòV>‹­hüryd¹Šv+iE|õV§®s;Ê2ŝV‡#¼ÕÖáö`›ùNšáQe-ÈRÞêÇu¡=Ï	¯"Âò~ºŒF‡²Ü¿ÈU†dInϤJ²¸±Ã/ršßcõ~Nô¢ Y%šhöª®j²œÄÚ°”òr—êâÐË"[
+å¨ÆI0BÒØŠ´=Œ/‰”“*Ó¼˜Áv.4Tؽ˜ŠU„C4TAËŽóLd4娶KY‚Š‚ÃÄéË´†­'ÄÀB‚&R-)à‰tÔ×Ö@„Z݈%SAÅZ…D§ŠC¤ƒÈàôÀy•M–¶âÞšàÄ6ÓR@e‹0u¡Ívâ¿éÓáf$íFéC-û)•¨”³ôc,TlJÜóÒ̼štÀƒ£<AeȜӓ³$Z»Y„wÙôÚÁhµ…©Z• ¶]Ú¾ª=í`gj#Ëç”o눑ÅF^zikD ˜IF&—ž>,HH“ì±MuàðúÅ ŒfƒS¾÷ìÉÏ£E
+½«äØ£z%ª‘j&×éåaÂH°6˱öÓ¢	%M#x]VAYN7È¼X[“nØgXÌ]l¥Ç¾|9ËŠÖŠŸ°‰ÕâVŠ¯^Ž°(foW›¾Ÿ`$ôÖøŠM^+ée™–6ùfìŸl‹z‡ñµ~c4zôåxôèoˆHýüRLzô½/E¥G?|‰K†|‰Lž¾'úË ¢†¿|¥,鯜…ÁWß#GPÏl‚—¡L ~ÓýHó¢Cþ1Ýý᫾îч¯9ºö6hcz9uÐ{Ͼšþµƒ>ùù§m¬Ã
+Å÷j_
+,àVþºûáÍ Šˆ…X{­×Ç”ƒÄ÷ûüy€DÀ‚%%[ Ç{ZÖÌ2Œ4[ÃTÃ÷˜vêù·%À.’8©yöýÍ›ßĦM4ˆ¼ó²Ø-,Á^êðzz{ýþöxõî͇ãiŒ…6ƺm+"<ykÈT˜H  ]œ„äQ`d(–jÃC¦rՏD—Ä„RÜœdYôF,ðð|!Ÿ(d+§ofuÌtJ»E–b>ˆ_g­*«WÎ_ÓêdZéÝœû±9l5ì¿:9±’€§øÓà• MDãé ƒ¦î°gä,<M”L㾃º¹Ë1­lôO‡E%[”k}42œ6[¿2áéÕ¨´@«]+Ö¾¼U]„%ہG­ÓE(^¿í4q+Ka­öÏ˳Aíú©|)Ô=øb°{ðÅp÷à‹ïÁC¾?z})è=üùèKØ{ôÃŒZßÇ95‡~e¸&•ùz(/MÙS/î.0¡'OŸ #ìÉÍÕž|<CÁ.:xƨƒÃÞšMéµ>¼†øxÄB[²ï.rªTwâ"£˸>ôÐgOÈ­ÎõÐ!)XyéõêÅÀ§u,Lü„qÂ~‚^ƒpð>>x ¼ÕýA²xŸÉûœ±–-
+âl&;ö`ºÌXÖÏ… ;à.2–Ô°KŽÌ„Á*µ@ÙE@”¯E¬Aä’D¤+„›Ðä r,"7.É®…©@¯y_æït ùl糓ï9õ÷¥½wMæÓ Ïèw·¯í¾¿¯’ݶŽ x×W¼s€³/Gë|àÍðAp¬D€i'Ÿ®ªê1¦‹øJÓÛôt×ô¬uwòŠ7ø¼ùgÍJƒƒ•E„
+2KÀ™
+Ð%к…xÂR®RÂëi’<`[þ÷[¹ío´±ž±múïAþ¬Æé¿GxÊu`#¦µÑkò;Ù m0º5Ã#q¹K¶0Xœ™ÃJ¤Ü¢7
+fÜ`„‘™C³'ǃ0´!ǹá
+Á@ÛÜe'¦£í5Àu˜œ‘‡t7–øä¾-!“Ø^<Më­8ˆg®p'3g8ºy ~y ]5a¡ŽŒÏl[¨uð¢é˜ aÙj’H~++Ìd“pgEbûôcÏ+T°¥:ÇHCÏ^ö @ܶ>›Û«á¨´ž™WØóDÎȝÛé$F7Ñü0¨C P9Ž‹ÄCÙãëzcôì3Uнz¢ÞôÛҏÂUå`*4´8 Nª#MߧË'â‚Ã-PÙW‰=‘ö‚ºªb…ßÁf6*ÇS©­l=@pÉ‚va×¥ Â9b9g=-ñ¦¬\Ñ½ƒFá½#è3q§@ BJd"ÃL3pK·¸6ª×±—ï×´¦Fnêä¶3qÖv›<´ƒCÈá {<朣j¸³} ŒÚNx(5n©#t‹’10Z›ë\I{Ž®õ0³u‚Éú¨[A6Äô.Y{zæÄþÙ:4¸Á&ghGç^È+‘¥öæDíÀsaôµQ¸"³­´ê&N^5ÆÌ
+éÀc3fÚ>o PkÖvDÅg¿©×æí129L=•©ªc6ñâ¹­b|c‘ɪ5öÍÒ a䦲7ƒF6šðÇ)/^
+00AÓñ*ÐcxƬ³ƒäŽ~¥ê¼ê7§GÁCÚ³¡bæý‹¼vJë0p
+ÐN*:p²EbŒ‘¢¿A Í•7esn9AÏ‚’>ã¬gÖmŽ-F­a^–³zÉÛ6¸\Ý»V›‡Ž|$by•Ä;ëµ2,lÄÃ{àLØ%Ïs±(ºìáÎËÒ~È»þõã×[qªÃöÐÅ7s­ždÌé§Ø )@r lòŽèJÍ®Áª?W¿.‹q-ØtNeç*?Õp09¹Ù28Jv‰A¯8¯ ä rÂ!NŽ»ı—_,{“µbþã KL’ü™ØóÝdÀ×w¸.qЬˆêC£•¤ëej À²écãyéû0åÏ¿=ÄÐñ]ïÞj¿ófÿvq¿íÖkà,ûÿÚ–­&AúEûîºëû8ñŽõ5l¼Û;Úë?¾
+ó݇ùÇÓÃñt*[ÜNρïY|.ðvëœsÃd”§îþ±°³:îZÅÓ¥Þ3m´‚ýbhµ;F‘ÃvcýÏËËóÓ—œœþ±÷ÈñãÓŸ/ߟ./¯ß·ã‡ËåéË__ÿØ>_/—×óöùøøøú÷öÉ
+³ßWõbõrÞl@/öÜ>¿dFŒxv5Ëìéçp7>Ì“_œÿË8¨‘n…S¼+jF	)ßÚ½'Yí>¯Áf‡_$=Qÿ
+0 I9«!
+endstream
+endobj
+30 0 obj
+6708 
+endobj
+31 0 obj
+<< 
+/Type /Page 
+/Parent 3948 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT5 75 0 R /TT6 3963 0 R /TT7 3960 0 R /TT8 73 0 R /TT9 74 0 R /T1_1 78 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents 33 0 R 
+/Annots [ 32 0 R ] 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 10 
+>> 
+endobj
+32 0 obj
+<< 
+/Dest [ 35 0 R /XYZ 242 720 null ] 
+/Type /Annot 
+/Subtype /Link 
+/Rect [ 394 118 427 130 ] 
+/C [ 0 0 0 ] 
+/Border [ 0 0 0 ] 
+/H /O 
+>> 
+endobj
+33 0 obj
+<< /Filter /FlateDecode /Length 34 0 R >> 
+stream
+H‰œWÛnÉ}çWôã.àmuwõ0Ø’ˆ#æ[6hjdÓ (…Cïåïsj$“S£š¥‘ÝÊÀ™î꺜sêâƒyþüâýå»+ãÌ‹¯®.—ƒY÷ø7ÿoúõnáÍÆ,.þÙmW‡ÍoÝåÝön¿¹íûÍÚì7‹‹¿áƒÏýâÕrq±\&ãÍòfñ‹³Î9ü¹6Î
+d–¿†3ñS‚É-ÛÍòvñÙh>¬¶ÝáЙŸ—_¯—‹×ïÉ)8ÿÜÃyt‡§‡;œu¸>^3üÅ7ÕÀñM·ôfµïÌ-ß5ÅûPl«iüÑJÅQ°±?ÞëÀbSø`6eo§³m±q×*.y<¥‰›ÍAG¼¯¾S9ؐ\GêÀhËäÄ·Wo’nÁúŒf8û¢†8ÝT'8osrâÄêï½9|Q? ˆš<ù0´Iøå
+¿ûÕŸ=8ô\ãžÚ/G­é×»*¯W_NŽlv2ŸjâÉU›ªÞ¨@ïm­.œ¿ÚGŒñÓŸ*20RæFm#ÂìøâýÙ&By<	`o~ߨØX‘çÎßžÀ49—1P­5¥d‘J1@æZ¿<gëRiWiƒ
+ÙÒÚ<½T¢ÌÑ®×/¯
+s^Ńîv½è£S9[õè²¥œêT úˆ¢&ˆCÙÌ*0àÄ,©ãCÖ,¿¨™Š)s'×óoJ;YDðV¢š©5ÑòW*Õ¬©ˆßèÀfI¶‡ž¤-¥ó´+Þ\òT³Thkz¶áÀ‚ÖS=;>`u[›<pˆ‹óLyÃx'§|xõÀœ!|n*sÂ]œMä ru¶ynÑ#îkÀEj#œšÑ.Ž)Ž`ªµjs0³ÖÅ?Ðó1r§r¶÷
+?pK£‡ìuwB		‹c¤®¨l:j§ð Ç“¥ZÆ9œQHÖ·§òÁ­Á•±!KǺjee‘¨/|Á»ÛÕgU˜ÁC¾”øäÚ§@èD<W;*Ú2‹:Ã~ªP8­’ëÙÎ	TœRÅ%BdžqŒìy?ªØâmŒÌ-G¬jCÉlDËøîõæf³V_ĆÃG/c£;Ea\ïÝc¹…ÿ>ŽqPǘP–œš—EÝ=4›âøo«;4w
+~Œ|¹ÝšÕÉ']s£
+$ž¢òÍC8Ýi0Ÿ‘¨voöÝuÁM ÒÎÝñS¼À©¦ ¢,†y„Ûw׺˜ Ñ3Õqœjz"øŠÀ©>0—²Òy®ˆðl0CõìÐF¶bU\ý}ü¨v{ÄÖˆ- >ív´±:î	QG÷„1š·¹J%+Œ`k<þp.žS"vj'à¼%'€³Z”‚ãfŨAJG8]°‘øɁj3€‘`	Ô·PV7‚Ñ͵>àÑ™•ã]«¯öèX×جœßôMUõ!	dwýÌt¿Í­­.dl·3]QL×$XÏ)h ¥Lcàîî`úûcƒ±>4·ÚÓÈvžtØÐÏé/Ý~VDrhâktM̨º÷¢Ýþqwج;îJç6ðUÈ$°>¾t¯ŠT
+j~ryǐš ‚r¶REÕÁç¥
+I@]áxÈ“ëô·f¸÷äÄ[u`	œGÙm3®jµ)ÈÁØ©]	„þ‘×wêE‡¹ðYåßÅ@6eª¾2†‚<IàŒŒ D·Ñ‰º†a(kôâA÷÷j–bâ
++	âÚÌêZvØ Û‰–ßÌø–Š
+äeþu :½H ÚQ¼iÁXŠX·ÿ‡ˆDxò‡-HçI¸êroÔ'¢Ã|æܝ€úº€Àôcàj&mž—µâVgs,+0å8°‰Ùôf§ŸX‚«4ùí^ôV;ÆúnèÔ΃Ÿ­<#CûéRÇ%ÛÀ"c HMõ¬!ÒVÇØgú©X´š«âz}ŠBŠ°·òIë/fÕÏN¨‹Ü÷¿½Û88oP,Ž;÷$á·³;AtMÔ^-»þ›¨¸*f¬ µÉn‚•ßé§Æ`óà‘Ï”lW$p¿Ú©&ÁTJ¢03j—™j:?ÉT ð²áõ
+‚-õ¹<U0à`cOÀ?tQÝT'®¶:0ÚÄål2a¹[–Àw32•,=¥}ÁZD^&]7o‘xÛí=£’ÑÛ$9FUs4¦Õ‹éAbá™IòçÜ‹
+{LšôÑq@ö‘Ô*ˆÃÜl¶ÝhlýQWò_ê
+YðßQè‚áYê‹„ª9D›%7EªY¬Ì->F®6»Ó«ëFAs°· kHL)4‰B—– ²ôœõ1Tßlàc
+ˆ]B¿v빊z.¿“þRè*ócœ¦o.#ð>•HH CgŸ'¹ãÞ2ª„bUq¹EÿÕH
+Ã|èÌ']Ÿr±¡ò†(Ù«IÜ{•&}r§ŸîJ~zòözȉ“ëTЕÌÛBuÚ
+:£zìF4m”jfÓI6•éÉîóaµÕ/(ÛE™\Àyýõ§Î~¶ÏŒî6ñã! “¸«OÛ9ŸÑÚþ°ß}Œ°±5O™ã~ßõÝN'LÎÝ—è[EƒDS›F¬îÕ×&ØΚó$I»Ïjà	JŒÊÄ<8ñ£Ñ!Õ褑â9'ÎBªò]|”85pæJbM>áTñ†$‡ÂJ{Â͘>ï2è—ôeÓÇmÒýúó3³áÔÇÌ|’£øT};q*L®£xt A$ŽüÔ™þ Vl³±x‘¶½îÄ=Žõâ‘3k@𖜸Ÿ
+³Î»!bÕ6Ä3Ï
+jؼ¨Çqäy77:Yxä-4·ÊÓÄš˜%P7Þ°É@ÑA}¿Q¡°KµÈRè¸b›L‚J0„'—$›Üï~½\¼~¹¸ø`ž?¿xùîÊóâÅ««ËÅ«åâb¹Ìcxó8›…gsv"]áòÙ/{ìoj‘!—‘W­VM€‡`IÈcàz…ýçÎ)=‹
+·7þ4½»Uñ9ÙšÀ«ôæ±2äÂtª[Ïdñ<£@4=ÊffŽàc}‡ë
+’ÃÄŸ€Ït ¬~É"
+fÝ;d›3óÚ	¾ïf¶ÔD¶V廽Ս|(Õ6™4}êa·Zb%MVK-	àõL/œ9ÈIô${¾ÝIfŽÆ<¨Æœ@F°°"~^’>^Õæ*kcVÛíÌJ6'	¿ä"7ZAc7QP•
+¢Ã	ü:·ãåäeÎׇÞÜìÕ"¤ššœFu¦b$ëªk2ú¢—’uEÒ†š¯˜`n©–1ppÍæ¥&"á}J<ÛS	?T&U†âí»“_e—úÐ)ì\ç
+IjÉÆï~F%5¦‡ì’DÎ{—%Òè+ÒXI¨:
+ž”ÉH ;5çè8iÕ9=çª:ªoª;#®KžBu#äqjœBU¥öÁq “\
+q¡â	?9U‰{¥«„Õ»	öMÔwRnýIÊþóaN¤²^b_þýŒWMoG½ëWÌi!Îxú»‘Ø’gdž"`PÒÈa"“Z‘2âýõûz>»fªI^Èë©®®®zõŠ?`\)&!üÂk=‹Z¨&I»ä\Y:?­ÅŸ?±)“"Æë'w;ÉÉ=üÄ1˜ŸRªÔ³Wæç4‘÷f’2¶wd”EÚºƒL í 40Óä~Y-XÊÄ®PVjï¢Ý4c§e#1Š+öè-$Z@qfÊjjZï³¢×OrÌ6†‚âÄ29a½w¼šC7¹?q1‘Dp“¬Yñ«]˜\Œ×Ýxe9í6–¡ãÈGb©åß[éÊŠHQú ŠRÖFŠšd‹ï	lu¥6fÍV¯ò”Á´r2¦
+ûR%¨GEVM{2Wç §i¸¼©Ž’t’„Óâv±â‚
+xµ	ïÝð“M›È:br½¯l5hBuzRdßù˜-Ôé¬73ñ:Sz(ŽÉ#³¦x8©å!šAC	H/'ü`M!¤š™—3XQ‚v‡PŸÁË)&Ù}™Qi`]ÙÉ8f‡¼‘Ø’´ÕÔ/”5hlRÅ û«A÷V÷jÎkH –)î‹Õš—I
+;B¤îÑ8“Ã(h¤ÑĔ͠ˆµ°½%†qu[|_,7P¼,ÅLë!P“Ïx
+„Ús’¶ËGv@‰Pbï”{CÇ*Ñ:ڝ›?×ÏwÅMf –*E²R,Æ·rÃŽ&¹·’Ε¶é¹ñóÍfùuų”*jžÜœÝHvk©!¿É‰¨¨-ÉÌâövýt·\}åÕº2ضÝä~é3X5IJ[_ŸûŤ-å&Sšßa½‹;,©å»úa¹ª7<íb¤aÙÜ{o
+íL ŽWÅ+är½*tÙ|uqutñáìèÕ§âääÕ‡³_ÏUœž¾=?;z{uôêêʈÿþ¨úÑ°o¾V*6¤­âê›Ó®šNàK
+—h„AjïÊ‚•×2€¯‚òÔšeb@AjjÚtNÁö’ƒô Ï
+ÚÖª8qSÓÇÇ%/<ŒÂò0uÌîf
+óëÑÄ4÷:š}îanQzL˜øD¡9"h^”~ÔÅr¬•¹_Ãùí}øPV‘¤7ÍCõ8ÞÇŠ¸³Žø‚à7´HqQ	(|¡Rƒš`a1q[jàÁBæ
+ŽˆIÊÑìDU8 WvW®"9èýù;S¤‡I±'É}×7Ä „!÷ùKl f¼×~qSºéØ´bd6ò‘A)WÓ¥9÷iü&~2·–X-[ï·ëoôîˆÍzEïÇÞ¥õÄ µåˆ‡m&í.Wú£ZP’\ØËî
+c‚ÎÛÅöGŠ¥cIõcý²ø¾xxÆ_Mr'ƒ°4ç·¹^õ»êD…˜;Iêä÷õ¶Þ¤Î¬ÆP/ŒXÒ¸ Îý©ù}ªî)¨qWO`£mö~,Jlr-¨0&:ۅΣR¨Ösvv¬0ŽvÀCØ<œ¤7ôÚ„
+mK…Â7§B<wÕ¦û2}Y-…Ó)žyVQq'\)„#ç\2” Ã(‡Fƒs‚ûÈ…)¼ L‡¢†‚O
+¶S®„Üõ;< DçUÞCäJˆ‡¤ñ…ŒÅ«BjAÙ*ÓVšœqý‚Z@¿	ãI¸Ø•ð–p©£7Ûõ·)Q‰FõŽ6Kj€¬¢Zü–â²”)VÛ<Ùê€{öd{7c©‘k‰‚'vu.2[ôrá‚'Á1ò“çåjëO	±áÍ¥7¤n‹\j×{Db³•¹‡í˜G຾ëoQšŽ•LTª¡^L9«Cmœ3´ã, 	ÝáeØ:Æ–ÊýNA°Õð!\xœ£í—3´'J>¦eƒJ¾e¢’P+C¢¬ˆeÐæÓ9Úñs&ªå£¿å¢‚¬Ÿ¯²³ƒýÖî×€²q%ß2q)o“¸ ³§Û$®ÜO$¾b»j¶˜6&U馅ŀÉsè˜hM®Ë CÀ,š6²Î±	tp7BñÓªq/¯3#dà91{G(~âg>BãÆ”ÌF¨$qÎG¨´$ÐùUv—„¨+MB¤ãM Fmô!É°ûÆèÔd/+%žYÀI.X©ª˜.—½®T1Æïð§_‡\Æí¼†–#yˆ#¿oÈÀ‘Ê9jÛR£P´g´ñ ÷í¬JE†uËcm¿²X×­,Öõ*‹¥Ù`Ån+>Ì°ýøy«ÚPBÈ5­šI´Ü'g«àEêèúør±ú»øWq·üV¯6ËõªØ,ÿWoÚhBR1$<ŒD€‹ö!_¹˜ö*¾V[Žæ-QUä¤YKT!˜Ô`ÞQ¿æ= %*‚oæŠÓ’©ATÈ4z‚‹UžA5©‰1º¯)C4囕•¤k½‡8Ú+
+§ŽžPK¯åË"\c½p‘]G³Xk£ÞVCÉÛ´¾´òáôUÆ-^Ç”ÿ¤'™J—JØ0»Úh ™¢é$U\ÿQ·}—ôn•p¬SÓl«íWëm]r]ÌŠ&+©YI-Lœ7Žš\¿`(ÏÅÙ—§<ÀBg„Jìi/ƒvÄÇ£=õñhO~<š–+TÚZÐC-¸9ýiS¶oö1W°û•´äèçúøýù;]¬oþªo·ÅöÇcM_!u}À\ÓiðýfàφÒ;
+’îràµÊÇ‚¾¡¬%}ì/›Å• í©ôû'ŠkàÚ%xînûǼ3‰›÷ä˜8TÁ)}Sš41ïȦZDŒ	®¿||û«/WÿùDLQô•wi>.(ß ¤ùxMpŽöÁV­4”0ŒçŠŒç˜£–0j´èg«”Š¦*nI"P+:Huf²x¨·[š6Û͛Ԍ%ÀW*²Ì$$M­À$AN¹Ä°Â¥jrÂs%›êŽ½ŒŽ›]–ÜLCT`›³„Ý2hOo9¸ã·Ü\î.'‰R¬k(N6ó…›ðñÆ»˜MQ
+RΩÃHrMæÁH•ŠŠ
+^O>o꧟îêû媾#q0¯ü°,l·OË›çm}š‹…ÕÍìt=ÕÒƒÄ/úf¾õ(•̸Ålò CÑ“ÌØ0®U#œ»ÝNÑÓ4º®È›Ðw¥S‚Dº¢.K©­K
+¨T¶”Æ…Ôàm~U"¥:5¨OiWãWͯKÚÞÐkP²ŒO¦…Î{"ÊrÄÉwr¥L©e oò@
+\õñL´,U$LJrèH.&Í„¥‰Âò€‡ge	¡4©hÅÍi¿Ž­yð×…ø¹•±Ë
+Ë}˜ûå?õÝÏàҕ;Ôa¤&9
+1Mø“{úÌ {òhOž<Ús'¦ÏÀj¸~äÞès´ÐLª§{Ë¡iB²«ŒHñÜûïTx‘(1&7×Çé9èê&®Äà’àPÅ*¨'•Œ7Ñî©AÜ ó¢F%„XAòhØ„º69,1¸¥¢f¬0M÷` *ÌAò´z&ô†K–>nq‰É
+1 at O+ô|öÆ w2ŸãK¥yŒëÄÂâeô!e³[<ƒGM õ7nb`~3H>ÂPÎÀªU¢Þ­&wKÏ—Ë‹w_~ÿü¡(^}<BÎ”Ü lcw+Óë‰çåj+lV äeâL!fÜQ&ÚÁpè?_5;†ãÁžá2hÇp<Ú3öÇ£Iz4+›FCpø5-¯dÒ®Å>±?×Çg‹Í&»òjVçQTêðM¾Hõ^UåDH}ýöæ*ztUjAal;NŸà(ìéÖ@=AVtÅ”¡”Ê*¹ÓoWWTQ¸ÒG?Ú\Ä­*wñ½ªÂÑ€.ëÿ>/Ÿê;¢
+b¡ûÒÛJÔ UmLšž7ÿ§¼ÊvÛH’໾¢Þì­®Ê:^º¼3€56<|Y@€AIÔJ»©%©ÌßoT7Êf–Z~"Š®#ˆHçÊ
+ø:œ¹2|ëûف3±1éòŒ¹”A<_¤òšë5GÌ|¡¼¦Z=ÏnJ¬/sðp÷À ®µ€Ø2S6
+8­á‰í±˜7‡C!kf•`(`ìØNz Š%ÃÔV7S]î9¦¶¼!™Úò†ejËeå‰F
+ö)}È.ÎÃïÚÜÕ`®*×k…>jŸ´cçþ)—ÎÀZ3ª°hÅ:ªoÍÒž
+Žo#Œ‘‡ÏÙà՝f×àG`ìÁðÄò7¸&†ìö€ç¡¢tý’˜T¡Š‘ÅŠ»t+¤Ñ¾%+£îÄ·lŸ6ŠÂˆhœV
+‡ßó&7t
+@(8Ë»äëvcZÇŸ2êsÚX- Cãa¢ë…icbÕóùûä_…À{4Kÿ_Ïf©Za„ˆ%¼¸üƒè¿?Ø¡2Ó+
+Ô@zcѲôý19ù}(’h¢òüäÛyd0˜‰ûU%ŽÛ½øªÝ㬯Ø=‚~àÜ*ã'VÜž¼¶ebyqÃÃââ–…ÅÅ-‹‹E`\ÕèÕœÏÅd¶1ªY=7jõZ(B±¼Þâq±TO‹ÛÙcÕñ¹QÇç’f|Åò¹QËç âåf_O>?ûòùË·Ë/çŸ7ƒIWö:¼RöÆäi‰veÿퟧ¹Z¹{LMëaàÚÅíÔ3nojãYE½œÑfÞlëÇ6è¯rR%ƒ¥òÓMµW>Åj6¯›O!4˜#Š·íPùBßØÝçùá_oú¥öuÅ׺
+ƒÏ·Uùœ¢+?÷zðù¶ç*Ÿo—ûÏûåýÇereWÔ…*ç¶ÿPäxyµLDÃÓUk×Ý]á„š¶7hÒÍÜûû¢“Ì!zÕ¢´
+àL‚%ŠH§ô/R·3’ag+ˆÀND ~ ›Tïe k l–½Fý*B1ƒYg\	=äóÈWâ>‰8‹5©Ä9‡„ûÄ6TqD,ê3M£ÙÑz§‰…R̶ö í »6
+8š¼?ýŠ1A§³DL¸z‘¨É=/Ê›šFÏ7½‘¦uPÞ7SñíF#E.²Ú÷4ý϶˜ƒ
+þ'b-j³M¬6_D ƒs·é
+§;‚IdO_Ê8GhYÎg+1GƇ†¿¤"X(]mI\BËrY‰:l0Î-Nk-Dm+;ÞB0õ˜¼}:é<kÿ Žny§ËGC~ɍw¡ÜòHWànåXåÒ –Ç©„€:dzšÉ{ZaÑÙñk:Ý Ûð^>ÝgY&ÿœ©[±Ü)¢/H³¾x’±iõ4<¡ãd8_‰‡Û6ž·úJ]½Ïàã‰þ®{]îm¤ÙÙȃ}àà#6cGÎæëåæ#¹ÄSÞè`é±eupý·xkilÛÖ’o,ù¶éýÉüfñô¼È—]]ýtxU¼i3kd_rørmÑ
+	c^±åÏê/‘ÔAXÆ0¤,÷G0V‰«¨£ÃˆPdʬŽà*ËvTï~0Ç:çÂÄ‚·É1[¿“ß
+ibàŒqy»Xn÷N=¬ÔZ&\ø¼Aó7Ìe©ñ9'–ÝTl)7àƒgõp-³[òÄN_ªÅºÁ`(“ŸËJâYrdu"8ñ`‹ÄÕû‡y%³÷Ʋ‰°ÝLW3h¢Ì¸‹Õì 1v:¿ÛKg¥&ꮋqÈOoÑjB£¹]£‰û&±‹ç;™`X/”¾¬fbô2f᜿ˆåâ‡5i´\a¬ˆÃjÉÈî}´}) Ò|‹š"Nû
+='߉#Òd²pìpêOÙ-$äfû†5ËpC•G—”y||žÉÜeðÑ–{ªy A‚c.ëý³eXÏ0œ<dP6>!î'b[B e[î\cb,CŽ.­q³Ke|dª‡ßôTÂäsî˜lyîJÆÁáSîÜ"Ø¢EÑ0.ù2- ’'‹Y$™Úå!²lXá6]õ\LŽ..ÏŽŽ¿ªŽ/Ï~;W.¨OÏÏŽN'™\Á)mÏ)èIc»îØÑë6’o:†ÀæÔ8u2Ÿ/ÖÓõ”ÊI‘ÄjÇ8$¶a?YÛ–[Ë6ÆfZÚC»ûÈ]cš–²+݃ç2bœ+r±ž´e7UÓåL‰ü¥1«EÃÏ—«³ÛVi]žþ}Ö”`K`ÅÔ@cb;Š*•MM4‰ÅH­ê×óO¢æêô¡åøéöåZ6·–r/™•pWβèQWe‹M•Y+ú b‘n”šÈ¤’|bW’Y×€0Bg
+$
+Cž;#ú;r¨„Œ ‡lSQ˜L‚¤¶<Ù‹ñpÊ-aø“d“?ac&—=ð¿205Î0œ<wø„ÄëAöCD¦!­y7Ê—„æxÛ²×ÈîÐfUlÍh(³ÙK!±ì Äå©®×KÏ'+"¼™u|Ó©ÈD=¢éئ=öº›Žr™7[cC
+ô(f‘:Ôø(ëåiS^ú‹˜k`’c	¹{xœ©Ç©hÜ,F4ëu¥)ë³âWx\U‚ˆ4Îqð­|ߘ§Nj²GOèˁòEs’f|ººYŠ-áðQãlî0ÜÄ@¬É*š×yfçt¾úYíKh\…áÐSï¢åøF¸íÌ6{Ü­Z\ÿG¶¸º‰ˆp	žÝ¬kõ Q?ð?-›Móš;jìÊA–.Tæ=*ѲÍvà“ȁ1ß›ø†‹úØÀt²kå 1I¡$XdqGÕ:Ç7­Y Hƒ¦Ì¥{¨˜SӢǃöì¢5]o5ÏT„vÒ²Ã?e6˜n]¤¬º	fÔûñ+ƒVCÈžzìÊ}gïFòoPÙ˜w𯚆c@(qJ¬i‚Ÿ7ü9b©PÛ©x:¸eokô®m½ÈüWoyZz·U“X/ºD‹®ŒŽæ@Ñ•\Y
+‘?³¢Úp»ÁöPYµávCä@Yµ,!œ6Ýú~¦–ò¾Ñ6Þ%=~˜ŸÒ^y€DùÑ
+CÑ`·Ä¿e âé9PttkØÁ1“V׺‚]ä¾ÍzÂëê½,यɌ’…½÷ŽÅPZ’Õ6Œ†ÒZHK°œ±f3õô%ϧ^–gX±AFšs<\FÜÎ ñ®­èƒß˜9^%ÎèÆ
+x(ÔÔÞ
+˜M|zÓ’cô E Ù|ÇC­ìÍÃÎ~ºŠyЈj7õͺXª'é”DMt–8ZlAèWLCär¦æØü©¦!ÚÁ¢|&ªˆî,誦×r鐧78|
+¶‘剄Qàè™Z/gÓµcòTû‹‚KÓØfü‘Ìà*öŸA£­õ ²Tc¬‚Š°òŒjÑOÉ·•ÃòÁ˼†M¶¶Äž¶\ÈN@›·Ä!Â?“^X†)Z‚AEZ7°n‰†P‘Ø
+jǐyCÌfØ{/ÏW?5²Á–97ܹ—‚‹ÉÑÅåÙÑñWõáÃñåÙoçÊ%õñãéùÙÑéäèx2A<ÔänãIÌΓ„`K6óŽ8y”Ó
+•
+!y^¼ˆ„ólBrƒï«ó‡q°EÇ<O òh£m6a T†ŸWHX¢Á½;_+ïÝÍMІ«Ž®¡Y „Ê3**Rˆz#?Ï`¤ýöÅÖ€¾‘M€i*u¸«ÌYp!>Ð`W5]­äÊμ¥õÿ9¯¶8Ž úÎWôÙ¾_"ËËEƱ¯übYh6Â`í!Î×çÔ‚ñtQm–<Xë‡CMuÕ©S§XNsyd¡1Éiž‡¸‹IbÀÿ*w±ekèÝ¢¡]ï’á/”ûê{ëkìw5ÌúþÇ7.Ækáb²ìÏÕêV¼É©»ad¨‡¶F•­²ÇK4‡ŠÂæ‚íRä36È}Âç7h‘‹(:|Ýdu	V½pèwšh`ù¾Ù;ð²6¾ÝØqÞÐÜòÎ-ä“ÉÃç•'R³›æ]€¹2žKÞâ|qÚÔ&§²¦õSW²—'ÖǾðí›HŒ †zÇ'~9È
+&"yLJœ3™ßœÓö«ï#»Z§Ç·T„‰²¿b6*C]ãDbÁÜwŒ—ÎÏì
+‹ù‹'îϵ±“ 9×Сi“ÉëÒª*²¼áF
+‡ÊËËcç:ZÑchË!‡ ?mYÜ9j“ßZd\Ý ÕÑZ¸‘‘;¹ÿ¯“ºo­Æ…£˳)쨀	¼ÁM5°@á¬`­L¢Èúqïã¶út±”å®D^†à[`­ÅªuÛ²’bãæXXQ>ÉÚìcg¬É¼wóVì»h«àâëÏyu÷e·f]c“3¢ËøX‰|ʐš<e¸¤º YAÏ”,±³þ”´-å<ã+	¥OX–x¸(ŸX“†¡_uJí\7ÞâNrqÅ£eààaXxyhLbpœ²Þøe°¼'²¸kŽ1l 7´a´öÉ_]­i¸æSié@°¹ïψ¦þӍ;FŠ½&Ÿ}
+ü[`)vº@¢4MÌÙ’R˜{ëéb­ÂÊWvŠq…%{ÞØ)k
+³Z]]ÝÜ-®å
+>\'^	9ØÆð$hjPóaX.NDÑîL"Áÿ•|À”/ŠlÇáÉ
+Lカ È‹ûU>bð
+ï‹õ(5Éúºú]­‹7™ÍÀ5;ßÒâ>#96ü;´ŸŽöv¦ûGǯ®_?ÄŠ±Hx	ïS½Ö5~›å2RnÁ¼wº”VB{ûwÿ<ü0;|ÿÇKÒ
+fÕÿï´°nK!“„ó[ýgVï§o÷wg//ù‘²Îhñ	Ÿµ+AÌH>I¡ÉÔ¤ÔŸ/éOW‡&íØ·Jfo¹»	»Þ²štt„–¯>
+%ÆR!ûvDŠ»‚;(”TyòÎß~8ˆ{/áE÷ÞåÂj®p5ì¬2bZ—±Dx#Sa‡^ÔJr°Ë번È’èX#—J¾Ð\ÜúœaÅåI»>%_—¡ížÏp_.°ŠÉ¶ X:Yê
+4,AêðÏÕA¬m0ü¡‰´Õ…¾ždÇÙÇ?>[ˆ[¼tØH¡B®ÄÜÁh¤^ÇC‚ÐÖ”:¤È‡‚—­õÉPÑ1 Ø_ËcÍÁsI½¶/¶~¸¼æ¡)¾ÂÉ6ò[êxJö
+Ö‘³ÏÈX·H—Ø)²g_—'–•5¹¬ñçoÄž›p™ø\aç2ú˜]q”>"¨ÖuP¹Rðæ!3äµl˜`¸uô5=ÏEÅ5`r2Ámðýbp+…º¬¢—1 ¨K1òÈeÅxÀÄsRõË®å}|Lu¿”:±ÀÿüÓhSj͐K%6ÌB‹£KùyÂZhqLL$d9±Iw.˜º²¥L¾KΙ
+>Oj–\ݯÓ~»ñ,,Mï˜XœËHÄ-LÒ”˜¬Ó éó³É:cºä
+*#¡jš!oND¨%h¨yøW*¶À9ôµØ¸AÞt&0äå\\‡Ø„Ð¦Öò:$#]4ãÀŒÌämë^Ýȹ¦ Ñpy“je‚2º¶ªå5~kוŒ 6‘-^ƒX.×l9éå¨K=א­‹
+]Ρ.À¶ŒÌ0dÙp.“mÙóÅ=è‰U1Õ¯ïÕ©ìòðÎ>¯W¬‚Ÿ®¿/Ê;9G—¬Ý 1ÎÔíïvuõ£¾É™Ò&rìý²ý´aHÙbü„´¯!‡™MÙÀ\Ã„¨ÕÈ%o÷`°‰#›”ä·eƒF¢d–€ø¨ êƒ*5Oʼn†FAÓòVN{Õµ0ž>ZìòxjÿKm±È"9rªô\´°Ä×D\q$ž¹Rw²?AW,ËàV‚è¬S=“­”Mè5]ºc¬Xn*]ðÚp¨8Q‹aÐÞ¹Æ\E9ÖAÞìøã÷Ó·û»³ã£éþѱ©ßuï^TAmƒ£Ð–å7¿>{aŽ¦µ<	tŸ£ìrWœ55~üË^óã!pÂ÷ìmq™ºSjÖXAžÖ
+cÆÉU/rÃùÆÂÞ–e(hd¢aô\Ý~'Ä&EÖÙùrño¿RÃe¿MfhÖþq&QSìËp¯i·ò™
+WˆSc왼{!•àM¬±bTrŠ‘•Ï0MgCö+ñ Ó2¬Ô`¥Ö%ÙŸmí¿ÛÝš|P¯^MÞíÕë×ӽݭéŒÓ¦U°²6b£™üug9,Î租}ÿ֫ɇùÅâz>,n®Õdg槗ý™ú<™ÞÃÍWõe2Þü£>'âJg!¯ÉCü°;Uð$ÍF}‘’C}×#E&'ÂhJÍEH¿¢|Š1yžRç²­ÁÖÈÆ:u^[WÇmí%?E>ê? ñ»=
+endstream
+endobj
+34 0 obj
+10401 
+endobj
+35 0 obj
+<< 
+/Type /Page 
+/Parent 3948 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT5 73 0 R /TT6 3963 0 R /TT7 3958 0 R /TT8 3960 0 R /TT9 75 0 R 
+/C2_1 72 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents 36 0 R 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 11 
+>> 
+endobj
+36 0 obj
+<< /Filter /FlateDecode /Length 37 0 R >> 
+stream
+H‰œWÛnT¹}ÏWìGfß/R&RHàÀˆä	ušMN£Ð“n8âïgy÷e»¼ËIk„HwRËv¹ª¼VÕéßÝÙÙé_—o®:ٝŸ¿¸º<9½ü¨»ù¿çÝz¾<QÝ¢;9ýÐßÍ6‹Ÿýåênõ°øÞoóîaqrú,¸]Ÿ¼¸>9½¾vê®¿žH!¥ôÝõ¼û=uøãÿ;…¯zØvûM[%’Æ—€ßPÝõ÷“g׳›»¾‹¢»X.Ÿ_;™¬JAh£]µâ Fj¡kä·X±;wâ;šDp5ô;5QHª[ÎX¨5B†z¿àÝõZ8+EßòÐ \¬¡b¸ÚËë“—!ïc)¨])L3ªsF•ˆ6ÅœÐ4]­OFx?†lº¯æöÝïÕ.¥Tns‘·ÙÛ•„)‘s–àþ»6 wWJ™°¢ +¼2ªl(   b	˜€Ö8ÂøöN*mKÀ‚ò^·4ùˆØ¾¥	BiÈ‡y,Z[¡¢!ž¾¾zåºò0m“H>‘ˆ­n¾õsriŒ°îÄ¥\Sø3jJ–å4
+Kç£Æ çþãš¼dŠÎØùêû=õÓåâ!˜	›v/$”€ž<
+46¸ÚæûÏߌ&Žaw…1 at W3Õ¯Ò£ŒP.Ò¸ïë~Îî~à£'17.cIÌ[Þ=VÖxa“&ïêÝjÓ¯ËÍ| û ¾Å‘2ÿø}øùП|¥F‹bˆÄì,O/ÞYŒÍ„6˜µÔ0iw{2¶¨š6k¤ˆ
+ÛèçÔVÓ“`ú"ûnËž*j†=‘/£s ¼ÊLÆÌØÁQD#‘;»`X/ƒ¡}zVž•< ȁ¼¢,«ÀOõ.”¤Í”(äŽBp‘–Búš­I̽GˆÑ©Ê—»ÙM_3jÔ6<æ²nŒÒUhžSLæ"ŽÊC|,™°¤ÓU”‰Øi8䜫nFIþH¯â£'œU”($’¸(Oo•½^£t²Š!Ã~~õæíËÏo/^¼|ûùlyNX*:¬$ÙD´Oïn
+ɏJ(U5(Õ‚%,JmXö•¯\ïÉi
+:[“óÑVhŸ•¡Ä ù]Þ”_Çœ±F/‹BÄ…}åR£“MIû£(nœyÚ
+7&T²ZmºÛ‡Õ{rsÔ¬"•ÙfCŠÃ&%œIUè7?6½˜’¿G™öü…úvvoˤ¬+rßYQ8ë–ß½÷´×œDŒÛ…µÜÊí¾µ1‰Ñ#=øÎYóʉu§+
+ŸVÖ©ÂÊx¥Z©ýRøyÞš_ØĺU´–W{+ïÕh弊zôJÙ!¬¬9¯˜wjÚðë`eý*¬Œ_]°9,͍½çÍyíļSòfÅʭχnD(tU’Œ±(Î:&‰±¡b¬‡YkIªIþ@aÚ} •Q[>úÐ"$ýdoË}>={µ¸ë»/õüdœS%®Òj%Lð¦¬ç‹{:DY <Ú©µ í¼rh
+ð|‰GTϝ˲IëêæI9Oš\þLÚÚÌ>©¢É¯F
+½zùñòÛ¿¯ß¼—•”2:bëR.¡â>Mé&7>ŒT’WÐ\i^š8ÒwÞºû÷²UÔà¢5"Û’U”FK°ð¨7ŒfS¼5ª;¼qÏ 
+ëŽxëžxëžxk™æü‘¤Ýü¡¦ ³À°Ã‡Ê­üÁÜJü“£‡2¾Øf:wh¤k´¿§ã&_ƒ
+í7Ô„·à¾Ñþ­ž%”+·¯F
+ÔÊ@_ûœÚ#ì¡å#QE']Gi´C%eDÌ(õl‡F½á ÁS?:¿XT„Ì\6Æ—’5Â*iÈã“£‚YFb2·x•\+RyhQFÛ¶Ý!‘®Œäd\ñΨ#îÁ+#å>DÚÆÈpØÔ[Ï2‘:³Ÿß¿øóååõa¾!ø„§eByÝón7ƒ<Aº.e®KáÒÕíYAïI×(žtÇ<‚I¦ì¾®(¥‚µ‚qeλyINX×N›M EgËЯïWË/¸Ô!yÚ	Db}%!Af\·ºùÖÏ7¢ûôìc횈@Wô}·\•0‡gŸ¢‹† (ñé9#`pHS.`ÆG£aä{¹hXwrÁ[÷rÁ[÷rÁ[ËÚaÆA$ÒD$\D`5¯ÒûÒÞ*Õ§»HtÅ>S>•€©PHi˜*„°°O•Br•©V¨@v˜ŠÔ¢0j¡Í$ZT.È	_ztÁum"~.(À¢“V$÷E6µýtè²#ºìæ.¿¯JÀŠ"v NÒ.Ý£KO†\µ.ï2"SZOvép˜Üæb×<Z°%cyò‘0r–•Â1ÑÚ'ð×DÜPþŽtEÕ~&’QFÈzKí ¹Dóõ™ Tždœj>/ƒÒuIÀ
+ÀuŠ¤ëO k¡“#Ïê9N6„Èñœ}õ\ßÑ¡'7vQ7¯dq%ïès=£€u£¯‘Ôhžš´QpNIéí¤@)S{QS|¯yF»®v­ÁXˆf‚¬ÐÙºNºö1PÌÐ.ÐÄh¡£3vN!¯ÕùÊ¥F©·ç¼§ZŽê>Þs”1m5†ï:J.ÿmGŽãÚŽrÅ#mÉX«ípè!19µÚ—†¿ï¥j‰5à}h4õ躊¥Û¦¤µ4"lö°)-ïš–ÖêlN‡å xGWo›šæj˜ÇÕY£Y¾ëzZË­fË•ÊÅò][ÔZ¾7o—oÍãâ²ü=[þ‡v^
+AËùÞ~ËäeÞû±7¸MqÒã£
+­ý1âm_ßž$' $4žE®8dDHRs‰D…rX„2Ù˜(V±H$³
+¨$jd²gǯ¤V#™{ÁBÔ$C¡w›ÿ²à\ÎÖÑúÁb
+°QWØ[~ßÜ—)YŶ›-Y°óHD¨6þÅ£½ÝQìkT®¤*¾W<4
+-u³WÈÁ52i«þÆCѐɤ(¼ÚmX8ZdC•g6ÄZ;Z¨®7ÛtóÙ²ãÝv{5&¾°P¯0VύMˆö6Ë~åñ…ôzå9¹ÖT	¹ç¡^„hì1`‚SÖT×ê×cwì*©8ÒY4ôqLhú¥ªÒÃÖ?jSŽ®yèKwó«›u›·ÆÐœUU€n‘|í:ZY±djðÂ$pU	Î~öÝl½fWäÎÖ%ÀR®ÅËñ±ŽÊ|1Ë×eè(¤©ñ¶5éîØËZ¨±ò5¯ßôwëŽÇ£oR±æa6S6I¡u…Ü:>ÔÏ¡
+K6ôÒmã~%«_˜Ÿ,ű–;Œ˜ƒ^"×ó‡+J˜/¯ŽgŸBÄPC76¹õ°>(
+^®ãÙMåd™(œ“«PV×[¬»5ïµC4P‰Û|ñu1ŸÁùe·âŸæŠ$måÑÝ/´BÿãI
+§tÕ9¬\jÈ¥´5”ÍŽFeƇ~Ý	—^Ù#ˆN3A
+…HŒ%ëé 3%í(LU
+³å’-‡<î\¤ªY£zòPç¼®«‡…âÃçþV;µh«êÊá1Ï‹xÇñˆçf4:0««»aZãýAXEÿä¡yШ¡¼šâ2é“:ÉÜù•pn†m¬î÷ãU¶ÛFŽEEH^^.ó¦Žã¸ÏtÐNüj¸;BÀÚ6bùý9,/)^Ê•—ÈÀEÞå,ß7ÜJ“¬Ù»v7á*Q딫]8~4cò̵÷û»ŸH¨ô‚©}µPÂþ3Je˜*žH9·—‘¯Yî>¹c¦^¡BµöHêê¡å±ÖÒ#7'ï¿ïöC™óZ')Iû¯áÁ#c›æ	_‚é2øŒ“jÎåW€ðÔÚRézrúeûéêâäÝ‚1¤tþb`”æó¾&~Ò§w›Çÿ;ù4
+ò©KÒ{Ë7
+#žR4­áÛ€À—…RŠ0YL¶×[#¸IL;n~Õ+¿0,-—`dð
+]ñ‚èP™W•åVÅáj‘I„Š‡Zìpf‹AÙ§•‰M-³˜‘¢Üç™s‡ÝgŸ±.¾S2Êñ±­ÖLšK,
+k³sÌ	£ù°ùy³ßs	Q'È‚–(}+Z³”É2ÎsŸçÄQ%ön^PTS Ïîó_îËñ©½y	¥î×#qúÒ~	½¿ßQsê;RŽ=p{1NUµöXî#ÑÏÚƺ;•ßWá•j6§ÒQ…!„•µPN~H±"zv‰êT¢Áž*Å–6|ö]¼\PTWcîÁÜ "EM¦<òÂco*ËMh¯œÍeéÌÐYýÁïŠùÊÞ²ÃîT÷Ü
+W0œ˜shlÛª¦
+tóBDBõÙ\âÛ挂16¢Õ4‚ŽB3Çiæ¡n(4ƒà$™•ŒZÁ…zÅ7BFµÐW7šgQ¬4‰¦\WçÜnˤÁÎâö7î¡¡Iv>žsк›²„ë[JKRH-ÐöJJh¯%<Ú^ÉZÞçím6ÄKδ½Í†xgçëŠ7¢yõuÅeãL
+nÍ(ÌÞ ]1`Ñ7/VìÔphsbæY/>Œ¾›ƒÉL
+5²R¢…Žb@Ç ÿ,¯!1y-õQ]cuS}ÎáXèGÃ@‡äô(þ>Pw(…K;È
+é²DƒÝ=‡®…È®Ù?ÐøF€ö\·±KþUÕùyÑœÉÓM	ð—eU}±t
+WßCƒ—-H\p±ÇÿÉ¡è’iW·0•‚í ï荃ä©Hxís‚Òk]scÔ­øU.	R¤Z(´úÉ«š
+¿ãPðjÖ5}{q9B›‡»
+¨-ÞóvV66ÿÐAGñb¤5šÑÙòôŠý)šMÓny|ÅZˇëÃ
+G£pØLS¸Û‡Q¬óØ9„0»ô<¬5Rɦ}ã¬&Svv“x¼pÖÑ™ŽRN
+ÊS]ëG¦yÔ'ÆÔæªÇó_ÇgoWzÿ`i4ScÊñ
+Ý…KÑ̪>M¹ª¹õ=…xQ]EÎòÊCÔS_
+OƒÎÒëÊ‹ôÊÑdá¢Ðÿ8Úw›ëÛÍÙÉ©"1
+Ôµo]~Æ ìîäŠ3¿pó׏ÜDö»oœ} ´q¤ÿ®_Þôùm‘=-€9 #¡?ና-f:¤h.ùßí§Ý'¯æjGt'ÍηÜú£R>ÕÌí<Ú–r6oƒŸ¹tŒI‰¶œCžÍžó-¨ esãSî½SÄZÙJpÎÏá‰@Wt£±­‹Õ–‚›o°ÀLÝ–º]W²9öâÃ4ð¿â˜ÿmÓéãóœ¶SŽØ_(’{vÙ2tµEtìj‹Ôz9pªþ%Äû
+EsµÅ÷Ø*-ŸZ(¥<P¢I‚y§¨Z‰Ñ;_¨Z)õÐxÁT›šä{B#góÞ17«³Ä~áêÑ_—š^.ÁÔBydN-ô’³kñ"›¦q_<rEJæ\î‹BP,ŸÞÞÑV„Ö6MÍ®96¢¾¡šßp(žVm+è86âŽÙBáµ(T’~nª2åË8µ¤¼fvCq†Ç4:½P¶ÐB›Õã¦Ó)Æ!™òRß$øO3PjàƒJ6,²û›>N7«ÙŠæàF ÆÞ¼o?Ê Þ—²
+šZÌ3§nþÚq¯'h³+u•H™‰3Ðû{nË1Ë…Ut&µ@oeÍ°G׺a¡ÍªqƒESgªvÆS:ínr]”0—Í©”%£4¨ª<~	­öe´bQ‚¦3»9€êfŸÚ)‡–)‰¯+ø)&?	þ™]ûÁ¯ z€d™
+jÖ—gš ï/ºbÔcÕI³š·ñpUa14™·=ïÙ¡ø‡B­ô¯”€@ËQOèC˜<Såž°9çÔ`¹4Jó3--¡—ŸþäZŽµÎÉœû—r¨lŽýʃLc 1ÐÏŠßW¯kÞU ùÕBÏ·Ôöpnì¶7ÛÏ•t!Å=}¥\LÁ(µôKmNÝP^	XëšÛÜ-±tl‚ƒJnl8NBÅ@逅ä¦,zuÉu—Õ`jÀ½W“ñ¶yK$ÄP GÞ›üñ•Ž8€çÄúæ؈÷S™SÚ›•§amo[’Å¿ŠØjÚ;È<žež÷¿(eþ(”S^RĽ¦cMÏ9©µGãÑ«3Çñèô’NüR¢%öúpýþûn}Ø}㿐š¦6Z~ëpÍXΓ¯Õ÷àN„‘M96'§ˆW—gïž?]L›íí-÷Š˜ˆ$%Û«fµ{lßKf
+•uO`äUýø¯¹£X(¥!_Äl¡´Íè‰o4ԕ᎟mGTŠ| Æ»yÂàÔ¸oŠGo;ǁ‘j¡Ü¢#¢f=’;tÌ<XÎŒwÎOÙS²¿Í¡ï÷z‘ˆ„]–5Ç£ye6‘]‘©ïŽˆmN¹
+U±¨m©ƒ¹Á=÷e0†²šá!ƒ¹,7ó1'XìíôÜ5ç}vrª/>
+zÚÜFACõ%nßo`gO¸çWð¸nAqûorÑm\’\ó)K,÷jÞ93.‘Ts}u“45è Üԁ¯ã¬bK(U±àD=•«3j§µ©X÷ªí—‘ñØŒ¼åwˆxÙ¼•K,ØÇó‘KH.˜£1	\ý㤚˜Û*ƒŠ…lì<LPXÑáf)ÔKYÑbñ:ëËŠ¢¥Ë¾®h± À
+×-–ОådU‹%Ö)WÈÔŠxÁygîpÄi“¦æàiä€ÂÐ…g.À*ó?Áƒ]žHEúŸ%ò¸ÿY"ùŸÜC?_ïwÑÈ¥ æ4dÎ4#ÖÈQ{üù×/½Sð:y×V|	ßKž$ÁvXnwˆTtªÃ®™ôÒ*ÊÛ¼Ÿ|5;Üð_C:ñÕ¾âö?éS%šgðs³Ÿ4Gó
+^&Øœ:°;sB)b&ahwV©:3ŒwÜÄ€P|ˆË]ŒŸÍ²™”]ó&ÜR"ªÛÑŸ7#OY¢ôБÝ4¯ÚS·#©	¢˜Çq·#ÙMZÔKÝŽd,{0Í j<¹”ý*h[,åÏj2d[ö
+^‡J؇L×Z=æ,©¬ 'øéI‚­×ì´ÍÒÈÑU1Çÿà~Ó“
+òÀ‘:e±ölÔ^lß#ÌTò–ñÃßž4åŒ{2fŒ-œ-±§ÜjA¢œWsîÕgNސ3m2²Än©ÉñŠ^e¯æ\Žmu×jîÛìÓ†Nx@
+q%›{pƒyÁˆ›ç}ˆG{ž¬*q³‡nÞ²·K€4ÙÖñƒë&ïåU‰¹ïDÝb	©óûæõ¾‡~älî¦âZZB/FÄ/Á臡ÓætܬœÇü
+œËÓ^üŸòªéq"É‚w~Eg$¶&3_~®Fs‡ÙiûØÓvÓFÍºÚ ö×od5¸ó%QØË$ÂY™ïÅ‹ˆ÷mÜÉÙ^¾ž]ç¿Y³IóWsøø•ù_©J&Œ1?†ÕGjt˜fdXV„–xèÔúq}{µ½ßÞ­vÛÿ®`뻥k†ÿ¯õr˜$ÿçÇÅ ùôvÄç…ãÁÎüø¤7»aµ^oçë?ìyèï=D»ýÙ‡ÕǏÛÝ»a»[Sû´Ù"Sb›ß|Ú®«{>†&£äêû·Ôò$5cWm¡0üS(3§ül
+eÐ>=·ýýô|Ø>ð{…ºiFÛ¢·Ó°ÛÜl¦‰ë²«u)´¿8|Y*­X;:oSWZd®…åá,&«Ó÷` x©WW¯D}ª”ÔJÑ|P׆æg39è7<r¶4Õ8nã¦nG¸v«›az8o¸F[{¥øz<Ð â¡u6;U˜a;ðsÑ#:—†\
+ÑUyc
+ßQ|ŸÕâi[ȧmA–ÆÛ‰ÔÓÛª-<>áNÑ:Û¢2º5ˆ¥‚¤nfíâ© Žl£WóH€›¢ô÷‡áŠßÉIj¤îÁ‘etΩßÒ*ØBe«.qÏ·I¤`Tyù‘%×%Eù™«háÑåHU°Ê>­zÅ#,ŸVw|7¼;>±G¾±Çe.kfŒRô•ÖKÉħڼ¹ßî6Ó°: £î?qYƒ˜„Ô¯8,2VØЛþJÆÚ³„TÇF£ø³¥uD0©=^0 $f;ª’CÚ'˜	_C“õö,ªî¦àÝÙ¦KĉÅ+¾ý“owÕLCú®P$$š5*ƒNÆh¨þ3ˆAøšO·#Už9z60>ÃukÉU N¸¿èêeÑ,LHl€ï7Ü	¬ø1flç¾
+
+³^áà1|Wñ£Xß¾†òÙÖ¶‡Ø¾$¹ãõ2uOPºHÚ¯’ÜÉ…I;õ:G¶ %]œ·|8 æ‹BÒz;ü?b†o€®[uëmy*²xŠSmYw1©bÓÒÔU[[h¿Ë"LѶ'nÖëP÷™Ï^2¬v¡´E䏎(NL
+8ñ[bÀ㜎žžÃ¿XmkÂ?C‰º¤™¬p‹i58ì}MŸùðÆÚ2ŸW_¸XWÏËm¯©˜T©VMÿÀÕߨ_nûÂõD0üÉ…ö1ïéˆ÷ð(ß^‘ËŽWÃ|{âÄFUñòö’ÜubEq‡óVRÝ>mKðáŽÇü:šÐ"?-,U¿½ªøBVoÂQ¹«™ÞÇ|V”}ýo—/e3EÔ´R¼;ˆ*i/ÏŽ4Ö$°;ªI}ý’"aÙµz÷5ãÄH笨sýÓÄ‘ÐÚ¤Øx¼YXG@
+Iís†Õ4~öuÇ|}¶cü™GX7“+n8Ր=êÚ@¹)ºjÇÞ·@îÛ5°øp'5
+„xþË5ø¨Nœ®<ãkôç¹#‡à‹í©ü¢w¹¦À	³E&ÊÀº|H]ªü»Ý‚9C¾<‚~]/8‹-cŒ¢ ×m4ÀFëÏÖa¤¢qêÈÛÕ‘»¯Ç¡Ådzmu<
+Á©{rO…äte]ÐËR:O—ühlVÝ_pþºu–¬¿Îm¡Q’~yF‡lTSGgÚº#þðšÊ7–É,¢ZI5
+|ƒŠª×¼âÆZ[ž[\จ™Kç»(®`Þ¢úò-_¦Ë"x‹¤T«ž^.h¶øJ ]ï‘_ä•ârxsËí?Ž¡Æ²³í®öŸEù™ã õ¢å`ϯ™ðm›{÷4ƒH™%ëöÐÑ‘ðu]ÍgÇ_)*jhém‹ä,+=<#GÎÒÒäpρ¡ö<å%”’²=ÞW¤>ri'õˆ÷`ˆ*ÒÄ¿s
+¦êûw«O<Úd”ÓÚxžs¾8¬‡Ö•ÜWD·ˆ'Ä`У`Ô‘—ာPÌÆ‚•jÄtÊw]ª‘ÅW7Ãœ]³ö™â~dŸ±O]È.å«Ñ=Ÿó
+[©RQ•ô	J+l«úHQgnèvd„"e…ÒK„3Äȳ$%ãZàBv¤@€Ô‘”6Ր[RüAÆAp³	ªLK§&Ll»-t!·À ŒôýNÞŸÔû¹y×õÐ'UzþÍÔdźÿp HãŽ|°&Vªx\SKÈ5µœáq
+-F4ᧅ|“3ª~¾@Ȫ.j&-EWΊ Qý]sžElSê5aÄŒ	™²>ýWÏþøóų_þ~ýõ—?_¼y	g~ûí÷—/žý~õì—««8 at nnŸýcÖ›Yyæb!ÒSÌœ4ýüÇ£„E"3¶¶õ„¼ºÛwÛ́ÆvëÌædvÂSG·ˆÍkyO¸›»í
+Ÿþ …¬vq‚®î†ö5£œÓÃáxóp„³ïo9máÙÖª‹ð´‹„˜iÆÃ.–d€÷8/=‘on`3k‰ب”ö¯_¾òÃíö~3Lœøµà&½W±£ñ
+·?Þ¯±Ø-R0¸=¬nnŽ‡ÕÃæþËpØ|<ì×O¯:yºD^%ÕÆSi;x¤­ö:—Œk‹·¶»áᎋšy®ÝÖ+,D”8ιç­U}>¼=>,$3zSÇð©boßó €€²zàÍÃôÔv[¾Hè$~
+yQTªüÀ­@«qµPJ
+D,„¢ª³-tCÍÈ‚ÞÞd§±(=
+¨¤ø¨Á›Gcñ…<{^݃G4 ZØC®%Sx5`)Û®n`ƒÕ­""?ŒO¼M6Ý+ºÃÁðGùîÎÜ©ýM”®´éßšJõ´
+‡ÒÕøðeÁª±ËZ¾þi3¾£pdû"¾;||>\;'/¸(!`­Ô¿xùÊp§EŠÒõeäPä(¬†òS-2S졸1íµ`€ñÝ…¯æ{+ˆQ²ëê1ÝíéÀŠ‡!d×
+ì=B+Æ\ºKÏ—€¹çGsŸedÖªµ˜6ëMwÄnÿðõ6!ØpJBÏB</©—%>µ’°|‡åæ’j¬±]Eª©P4Ìæ$”0éÎÝL*KB*.¥^Ähc<²zH}˹Í8$¦ÒC©x©AOºšñÛB
+²H¹ä	=´:hµFú,CÆ÷FÁÏXb­Fº˜PK¨3ýäD¿@ÓP._]ÛŠwæ1	U†Á™‡¬….$ÚT§7jè¿ïxœ­£ž0'
+Ì-T¤Šj]p[t3%W.¹.º‰­E#÷<Rc·ùîPn±‡×Uö=woäÆ„B?놆d!º¡tµ†ëŸ&øluÕéN¿ã•Àî&sœi±¼m¥ú„qÝ=¨U;F›/ibD;:è¿(ÔZÜ5Éwuu-L¥ãÍž2&oú^,’]]/y&ñ~íÝ%w at v }Ã%w€D„Ôa7ñ+ 9ƒ½uö»éú祵îÛæ¹cl\win×U|úÅyÝT5æÐ cï¡X¾xÀ€/`D;5›èȉԽÔ^ s1¦\ e>ØhâM®‘Ì‘KŠ<¶¤:ìw71! vÚ|Ád
+̇º¢N*Ȧ¹Hì'c‥hŒÅ]P4Äi‚íº¶”'ìè‹„Þæa•”ç	XPJr!N€½­-¤	%Á(½$¬¦±s
+õ¨Uê¡5¡Pt„îýójٍ#9‚¿ÒGUYoÃðÅ2-]lÜõI€1Zi¨¡hðïÙz¸+E6V—& ˜ìì|DDZ	ºâȦ´7"'žeµ
+±¼áum"‹a'ÀE¡\i=&Ø›úC
+f6*ùÁFõÿz
+èçäÕF}}‹,UEùêõ¥Åßÿ?x5 !mQË?_ý
+y_þqøx¼Ì’	{º5+a–®ª8# ×·ý[J‡©+c‡2¢éÞõ‚ó1˜¸Ç7(+»—<‚©Ð¥l©ÍÄå֏ÒM²'ž„¹epÀ.7ofæq‹sOW\èöÓ¸ýƒ§ÕB'ö/:µàcfîo¹h²=x}uSJÏ{ê‹Mi!˜À—….kè]ïY—² :Ÿ¢-/‡Âoø˜F(§+Á8ôÔÍD^ñ¸¸{›8RŸj1£ór¢sa–RM¨	„¾Ç@—#÷«ÚåLgʆRƒ«ªø–û?ðq†‚ì,%.¸l¹a¹ãF³£úµ#.RMgnW#FGb3‹11ŸhDh&îÌØFuÙÌÃrG[#.¢ZlÆ<áØ,e7u¸p?•½‹Ø3;ÇOܨ©u7>½æY´à:¤Ô€ßRl¶x[
+^c,=.#›7t4ÿCXîhкŠmÄrG’Ãnš¡œˆ›zºì“iÆ=‡jß’´OüpH°øøI‚kK?ÔlûÆË›pɉJ*-©ö"˜/£Ò†_¶D=Ñðž«?ì›[xš.§•ÍŸ(´{'Ý.=ïpWkg¡¼§ä¾K.rÀ§y[Ý«D±pRº•X…®V×ì×ú§´™ÿR7Û¾þôçËñüRD.¼’ÁGXz‚Ïþþyf˜¤5ó‚÷Tq‚ n/}Ä—OÜaPÄ`©T¿E©v½¡Â°7ãžt3¼zdÒ½,
+ÕëM½Â€æPH:äw„ÞÞàÄ0ƒ¹øÍÄÜ Úm¿Ž
+ÚŽjârùÕ娸…R‡'‚oºÁÕsÝW£°…ò\!z^ÄäJ
+_.¦mÜ[áËML®ÏŸ]-7”ç¤"‹b"Sš“š]kÅDÍ]Ï÷Lò-˜¤_œ¸R«By¾ÐýŒÇ„˜yøH;‡Öy»É‡óýŸf÷ lîÁ¿ÊÂæ ëAȸ¨ãçÙ{ÕüÙûÚôšýÞa®Jù~UFi=ëðoˆ÷ä_jJõZk^íã<9ì0Áž:¹ë0k¾‡=Ðè]­º' ê“ &Ër8ÍyÊgyáB(º¥àÓ
+Ϲ¡hUWi>L°Ü
+tr«!j.æóøyækÑBOœ&A:`žfRà·O€R{¥)(õIj&ž@еl¦œÏàK³Pž€¨mmÇŒIoM®ï8§§äà_Ó¾ãÖF0c1W>¸€&á1ûŽQÇå»Íǁ$—éÄßK:Y\È]!œ?RÍ&Ê“SýQ¦Æ{æó
+þÈYL\n´ €6g„N¬¢Vu¡SRv©¦2b9uà>L9åúš[Ü=ªÅ
+Æ);|\5a¹qòpdÑÔ`ÂG˜¬ØÕ`Øe6³> ¼ÕtÏ,<V¯Jú[(èùÌázö­–lèßu,0,YØÑd‰e³a'´Ð]ëÍT˜[²$®o¢Þœ¸¨âØq7׈vŠ1%-yâK>[m|_¯`ÈGüDúî'ÂÃK¾‰÷ä— ª÷QFèáíqbàÂ’…Î'´5çl"ó:Xi„ÞÏ,B®:Ý[èrÃï©RqžóqO[{Y÷¤[à«ö¤ÛPo¡ËÄ¥ˆÇhÅdJ6±	›`¡¯ŽËá2½e|4e»ð͉^©˜œßž8'$È©·`N¥W»7Ø©ôz×s7“6‘^0¿7ÈËÓåõñÅGa„Lé¨PDß €É,eôˆTŠ	JëCÁC­àãï—€%·Ð·ü”‚§ª{ÃãFÅþ0–t(cB×j1ËùŽC›kÁû°˜³«±ìÝñ̇2¢Ç°ÛN¥'ÂëfrO}›Þ'Ê-vq5Øú¾áPt¸ú´§¼\']vT7y¬&ÂV—
+ZÒ!ûa‰iiS@×b3ÜðŠB%¢Áz>œ)ù%1Õ}Êí[JÝ!‰=]ƒus±X(çœT at f©îªŒ{ñ=îÉ tW°@¦Á‡¯C+éZZÿ…ס·/
+?²ˆJ\FŸKn}Mf%“dx­ÚWWQÕU¬Âœ?h+”jòC;À†:ÿ[ wø>ß¼ŒÐÛ÷œ·ôt(YY`‹æ"
+Šó]LÜÂ}
+˜+Šö~‹ž™ºü{/74Kt}æön-¿ïßü<rÄm>¹~v½Ü¼úõøËíêà—Ûóñp{œH1ìCð!^¿ó渎Ùúîï。“,DÀG¢º»q<Mœ;.¹æ͹OÁÅ$#’.Öj>Ä —W›Ár9˜š-¯¹Â~‡Õ.mÁ(CoBoiÓm•¡»ÍTŒ#õì´ÐIm»Ji0	,wóŸ[¢éÚLuÀ½0—GÁ½U-ôDÝh„ÃÌ©š›È.Èʯ>´‚ÛØg_m8ö¹T3:ÿ£‡A3	pÿ“õæl¶¿\¡£Þ‘¡›x
+ÌOó&ªÐ¶YÄBχï,/ò[be[+¼óý„8c‡;ôÙ|Åßç÷Ë·‚=leÇ$©¸-¼]¬ËD%MÅÐL88CqǤ$-%Ù±Ð
+Wš…ÒQU[Ò›·l4³%)ÙŽÞr‹X—MJv Ÿ?»Z>¼§“~’%ځ9ß/ß„ Ìòud@öÊT¥f0¡†x‰k”J­x€Ô
+mÑ´JA R¡Èå†C@ÝB)	‡ˆÅËeDò#ER¬Í|Ùsî ŠËµÆúŒB1R-fõŠg þµÁVØè8Ù–l°òòŒ=Uµ<Ñðª‘ÎÕÌ­E€á¤0ý=Ýpéò
+tÕLÛ¸eÁ	Û£`*©SâÏ
+ÇW,”Ûè"'›Œ?·áËÎŒwͱ˜ßõ{t|¤`Q{1	_óóRÐf83ít…ÐTaG/šžJJ)IZ‡ñ³PjÙ¥'<ìfÞ¡¼\zÀ\=gùtøÈmLœ¥ÙzM.“ÅÓIcR{b§ò5ovÞÅûŽ²E°~ìfÒŽÔÙƪtbÛvà¦4·`>n…¹NqùÆÇ.Ñ÷¿\Ô½vÍ„ÒP	-mÂÁV§:¤Àm¢æjW‚g ÒS¨;Š€R¹.J(Elp¦Ü]Á|õ=€oV%7ìD	'˜«šL\J8©bÛ£mÙõ…yj:ä{Æ&uq±üÈ¡®ÑBßQÉÕÍFØÀ"4[ÄÄ£ìa²Œ{×{=þß&5µI«ÉöñAŸÏ,ñ›?å|¥ÖÇ—4@'vª¹ìót™°`H[=«§Lߏà%ÁPƒnɐe• d%qÌ€¶1Täªnf‹¤=„“×–_ÕàM
+¼Éy^î(X¼U+‹ëcfNª‰ËE6dWKƒž.\eA>(íXÖãÝñLe@ D©ä±²<.x¢‹©ìõ3îKôžlÉ´–òª4ýo­Ú‡”ÆjÑ;Mf Å±³Ë™·«ëúñõ¿}¦íŠ‚·>¶–» ‡EË:Ów!Ìòø¨Çˆ*Úÿc¼üuÛˆa0¾û)ô ŝ$ê/°S£K“v¸-ÈpµÄCí´9íÛ÷Ó5ƒ©ðrž¼Ð:J$¿ïÇÙb¼"9â%¹"|D,tŸ‚‡cV] 2¡LäÈ0=VÈêH¹ ÀÒ«‘IžRá…À¿~’×5 S“áªußÊAÃÉ^VÙ€™:ØÔŬ€ºêëŽÛ)€ód•øZΡ]5åù
+Z J¶•ü XB-0ˆ÷µYv´‹""´óõ‡P59Dþü2NÀ[¢­DP>3šÆeÍÏ<&žt›lL$0.0™*ìEÁò°ø¢{?×#!øBúC6€—EóöÇ—£øfI	ns+ûÒHÁFúCvf*­“- &ƒ6ƒ(òD¡ƒ4:¢#Ï#Uÿ:‘n‰9~’™xàsu¬zÝm¦¬øhçóEûb™²<y€‹•Ã›ªd¹)Vœá<V”K¾ð¯‚˜±šTŸÿ¤6òâg}hBäߟÌÿw®ù0í)b0Î#·êë·)ˏ>'|÷E6ò©r½õ¤ïtÕKÙÅ	séx®·²‡[`\ˁ©É{j‚ˆP*Ïo$îD©É©ŠìåC1ƒÆëªý¶²Ý¢úÐúªT2˜RþêV²ÛcX3E3?TèϱŠ”/C)ñûË^3ð%qayîe”'°!ôê‚R9M
+Oó—r:!«HyyÅOÂBÅEXF‡öƒP𪞲‡©¨Ïýu’ÙÄ	jÑŒ)¬»ÅúöfÑ.ûÇ~3¨««¶ûû²Sí÷þiè‡=L´]C¿yÞmÕ}»:Ãñ§zhW«ãuË
+±ª9ñ£ |O@ñ‡ëëÕç›Åª[´]”QÝãh„T|.–W	nXŽŸš_ÕØVžÿŠ¶<ØY "¤Â?W´p[(Φ÷‘oõO€ ˜fˆ
+endstream
+endobj
+37 0 obj
+11885 
+endobj
+38 0 obj
+<< 
+/Type /Page 
+/Parent 3948 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT5 3963 0 R /C2_1 72 0 R /TT6 74 0 R /TT7 3956 0 R /TT8 73 0 R 
+/TT9 3960 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents 42 0 R 
+/Annots [ 39 0 R 40 0 R 41 0 R ] 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 12 
+>> 
+endobj
+39 0 obj
+<< 
+/Dest [ 38 0 R /XYZ 203 404 null ] 
+/Type /Annot 
+/Subtype /Link 
+/Rect [ 161 416 193 428 ] 
+/C [ 0 0 0 ] 
+/Border [ 0 0 0 ] 
+/H /O 
+>> 
+endobj
+40 0 obj
+<< 
+/Dest [ 38 0 R /XYZ 108 548 null ] 
+/Type /Annot 
+/Subtype /Link 
+/Rect [ 395 201 417 213 ] 
+/C [ 0 0 0 ] 
+/Border [ 0 0 0 ] 
+/H /O 
+>> 
+endobj
+41 0 obj
+<< 
+/Dest [ 38 0 R /XYZ 203 404 null ] 
+/Type /Annot 
+/Subtype /Link 
+/Rect [ 485 125 517 137 ] 
+/C [ 0 0 0 ] 
+/Border [ 0 0 0 ] 
+/H /O 
+>> 
+endobj
+42 0 obj
+<< /Filter /FlateDecode /Length 43 0 R >> 
+stream
+H‰œW]SÉ}÷¯èGV"íþ¨þŠÒ2‡‰V‰¥¼¬Ç<;ØÄ üûœ¶gXßò¹ìU–3HÇåêªS§NÍ1/^Ìo®Þ]g^¾|u}5›_ý=˜ÕÿîÌaµy³1³ùßÖ÷ˇ͗õÕî~·ß|\?ì7+³ßÌæÁþ}˜½ZÌæ‹E2Þ,ngÞYŽN¿üßjpÅ,>Ξ™Ÿw³×‹Ùë|ãïIøÇ$±Àᗕ鿸d_
+	Ÿ[´Ñ=†»Þ®Öý+4°›²Èýœ!½Ã*i5ŽM6欒ØR(~DÑPó–b~d©Cì5‡CT{C¡1Ø*^=L8´ØZ}Vå2+›rQ5X~¤àŒ^wvÌg±’šB<‡âl–gPªÍ¡ª§-)´FëŠSÐoZ­KÊsmÎæèÚº[­>3tpÍ&©
+½çt¾ZïKœ@Ç¢õ©(Þ˜%M9€9©eÅœ/Ë=ÏBEˆŠ½ëŠM ÑsIK@4ÔìnyÊ%Ú\¼B]òÐhIL¢Š|àP±!éÇý™C¸ž"áÄ¥ †3¼
+ÿô
+È4¯9“KB‰]ì_ r…>Æ—<Ϻzþé(Ÿ……ò®Ø†ÿŸýÌ¢bŽC였5Û’ä!–¤&øè‡P.`Pš½‚r“bKÑP>©¿K!w™ªSÕz?¦s!iè݈Ð+‚_؝_´yÊ»
+
+›BB¹&V±­ïsäˆ$6KRïâ’ˆI‰)U•ê‡å—µ¡±C@{kÔãPtBtÓ>o¹Eh³«ªfÿùL›ŠaëˆNbd… ¢5
+Ñ<pÉ6;'äu—j¹t?t2Dcº±‹+h7®G5ˆßmfô‡ºpðÙÏÜ× ©ÊúÑPóv\z™à7£Ó^»Cö¬ÃîƇ¸4•ï‡bÂ¬ãÓ^CBWã3“Êv|†}·açÐñ!N} ΡßÌn@¼­­ä	qƒË6ƦÚð…;iyBÁVƒŸÒÜîBõª\۝á(&[Z‹S^&`‚ø0¡\l!Lz´&fa/»”ù%„ÏÝùI€w}”„à,	gŸÝìökÃ7UûDœÃ)Ã|„Y¯ Ë­Ùm×|*rµÕ·0üÀÛë7bvïïÖ#³Ôo(õçŸú¸üvZIÖ†;¾~Ä~Œ
+ÒãP\™1+(§Ië^¢ª7pš´fsÖ¥[IÑc¸~&
+Œ»Ñ–Ôes˜ó/ñïw“9ʼ~‹¡¯¾"ü¢fõÈGLñëØßsJû
+µlµ.UA÷h6·ŒMÖÇñ¼6Ÿèaæ=è$E¡÷Ÿ¸s}ù×8Sºùèà‹JâÐïžµO}|ºÕ<ÿÄæ`ŸøJ:Z§Á¬¨uê›"û¬ò¾Ý¬–úÐ.Ö>w]?ÿÀÈ
+MuM½ôù˜3ÌQÍ×#«l	òÄ–Ø[p¸ØÜZUVKžZêÛüÍë°úQO•w¢9[uíy
+Å[_¢bîo Á˜ð¸¼N˜ËI q³Ê—?
+l¨¹ê‰ bâ	ë2l©NFÌNNºõ\΀ˆ¢ÙÊ‘©Ÿª”¥1FÕÅ¥• Nq:*§
+–„͵ê.PhB{EC¹
+¹SAT¶Ô†Fp±µÔ¦”K4–¢z€Ý¹áo«paUGñî8fmÕÒÈ­»€
+’C˜P3¶ÀY©^üúŒc˜&̤@[ ‡y58IÖPJFðF)ÊQÜDM¢ÞP*ð–!é\×ÿ¥à$6z§ân‡_¢øâÈÊ1˃YšßèújÍ¢w‡6üÈ*—í¿69`SÐ{Bqp$¯¡\MÈS'íEØ£3)}לLs³&¾/·GïÃÇÖ¦»
+¡Ý½ŽX“‚Í’;oœaAúö:@Q@ߦsèžûª8•/w
+ÝD¬ä”Áà ²Jà3O3ÕpÁ±”ýøö>þ*;v§T§30ïx
+Òw}Qq
+Ý\&"ǪҥûÐ'x²î”ÐoüöÁ5’Nw»ãùÂìÅ–Tü¨ª¤OY5m䃇¨G?{>ð0ÐRE=w#÷Gs¢¸K‡?ø'srñ¶Ó¾…ZBLy©ý¬¼šæ*\@RßÓÜ­ðýý·£ôqWû'50¹ûÍ{zXD¼N"MßاÇ55“ëçÜrôæ`ÂTFÌDŠʳő—Š†òlûJUo³y1H`X.ªâÜš¤®:bzº.èl¿p(Ú4”G…W/P1¥¢OÃ}gb?j/™Žè™þ°¾_Ü]Àkç¬*ùé~IC°ÄjóJ³À×13’[ÐCuØP‰Áy(^iÆæ~¹7ûÝýÚòäk†Ø•ý?¸Ð`éYIQÏ~}K‘0:-G•ÏÞ<Pã•",AmLO’¿ïù@JìùÔºåb==¢
+Ì„Ãí:€nxc!
+º:ÄB[þúóÍëcî1€’š?ÃU[¼mECyÖ^º:Öv‘6ÕǾ•`½JœC±’‚WoäQδìU|ác„ªOÐ=g =n at U²#öõböúæj6ÿżx1¿¹zwmŠyùòÕõÕìÕb6_,’ñfq;{æÓXÚÀTqº=Èw´X»™<„š·Ôâo)m¥Xƒv¹,Cäî ¡³Aâš8´ß4¢¢>7|ëÃæcCÎÁœjØbYbBGŒ<`Ê)
+±#ƒlÂe3„rNâ®Be”»:[BUïâœÄy¸ÕÚÝ-—^Ÿ3ÄKꔧ•~;ˆb/X+Q©z(•ˆ¨§qÛ^¥{:½ãehýˆRUàWŽÇ<ÖZ
+=2v ÏM=ìÀ¡°×¹êFЂ‡æ¤	¬…„ÁZkÎÞò\±i$…Þ.ï)7FÎMaE±ÉÁ}ù	Í
+	óèý†hyhA}ÿ§Ý–vœ±EËÇ–—ú•B¹˜ŽEË‚žÈ[꾜·8³üÒ@QÛªÔ–»U×°|šêößrÄŠÃzÔÜ&0›§¿mÂðƘ0fYqü+š ÛO½	O“jCÒë‰çš:Šê/O Á×%­ŒÜ±go]«uÊ@FÈ"î?%Yøð˜]ÐCɱ¨Aõª_||#Ô.ꁤ³Z¥3a;DÈbjzG[cèš>:þã„I·x
+ÝS(ÄÎy­K|tzšÞþ´½ ¡QC©4ÆÆkzQÎ×ui—ÛÎ]ž0øè%ä	ÿŒÍqÌ’¿,§¥Ÿ;6鐠µ”Z6©Ý;•.'C‹¸èô¤¥‘ª«£Ïˆ“ Ž˜LUaºÿ“ï5Ðл5_ë)$¬õ¤7Z‡ºîžåû%£wV†ƒÙ§á_Ž\O¥»‡<ÓŒú&j*(ÅaiÆ!n=¶¼‡3,}ÅþaXïqz
+= ¸1òéÆ8¡§#ƒ•ÅÁ̓ê
+¢Ì¹Áu¶%ìz»ÛÍß/÷ßzvÙüòªëm#9‚ïþûœõLÏ7p8àlYÑp|H”ËË%Q¶tD*Fþ}ª—¶¸M×d•§}`q¦§?ª«™®÷ôæ¢Kߝď9Üï†ÚݪÖÐÜ'µ9OÃfÅEHPÙªžÀäžCëØ\:9z€Uý“÷ÿ¥TUÒdçÌYÿ#G? Ëúã#"‰{Y½,³8U ‰i°ß.:,K”étèàÑâ	¡^­eÍ÷÷þJt7|½Û7wÿz\kú×»NdßCÓ÷ÈBo^EÍ×7Û;|ìMkQÁt„Òú6XQ²;â(/Ãóʤ)Îó`D4¯>¬îѽ·++láL¤|¬!ìrð&‚Îñî.5ƒåþ-áwogçqØ^}æJÆm×û¡ca`#CËs0µ¦â3šÈÇ9p7¬hÀ°9êáŽØGš	@¦`NESr÷ÄIº8¤¢ý¹˜VэŸ
+¼{;¬öûiÖm^ŸÚœöy ©•“üÝÑ}¼ì\Ї_F4»vü†¿Ø±€ÚwNm']1\oÖ»/\‡±¥d^¶ÝÜpÉú-'IØЉ:yåM¯jWB;éù„ž§èˆc³|:1Fäx2]ñ˜BšCAâÂ…GÌI÷¹)Ík,n¬É×ʼn‹%Í‚9¬½£å
+˲‰É×–¶WBb“Dƒ¼¿w“tèúüÔõtù—ƒüsò-(vO¾qÚGàj?pÚFDE}ØJq
+VErÄQåà¡bsK~ä{ ¿ûÍÍ°_¿r¾†OÁNs0çkÐ_¬*gãU·¤f²ÉÃØš9òn·åf/h‡Á/9ê1[à aÍêkÆ'ôzدè@ŠCóŠ©À=ÇA¤T1I…¹ÛÇXÞQ“"	rGuÇì?›!àO4wÇÑ‚7mCÝ¢Ôˆ¶	&èëÕ”zŒÂ_ÀcsTR™
+%JWµ2¦ß8[û Ë&'óãB9`‰º–Êb»tÄ ™I>‘!Ðr]É µœB­‹3r at C8Y2—±€fM×\BTÌÇ$‹#л0È·tó(eËa6LCÍϸºA:žÄ¸ÛÓÆŽøÀõ˜B>p`Ðen§†6˜‘üÒŠ‚Bb²LÅ!ð6“â’&ªÁiÕÄKwN,ØN¡¶Å‰
+ÞÙIZóxQz×¼)OjmàxoŽ¼å+T¤7ãß¡Âä²Õ¾‡‡™\C?5“"Õ1Û‹=õH=îi'Ko'G,H¶)“Ñ£!¡‘7?GOv°c|@ž’ãÍ·ƒdu›iä;7xU­aTÚ³HMihñPЬ˜C!Ö‚ú¤ï_ÿåí›ËžSq5™¨?p£¦ f at u#.‰Sšß^¾xûîÍ‹W¿
+?ýôêÝ›_ÏðÏáçŸ_Ÿ½yñúòÅ«ËË2 n·ßŠŸŠ™§b~»ëPÆ\q×t.åPÅ'„ו™sžãÞOåÞ
+S!7[Í纕7Q¥CTÓrKSP½æJ ðƒ\üç'Z„a[Ѧ3$—{	-eq].cVQÄÅ5%àbäÒŸ ºd¼à@Ø%ˆ˜9ðŒ÷= íxÎûäÞ²FLcÈKW¦é8¹=òùQU?C~îØUÒÀ—‹×C=–äMÒ¿RaåAÿ%Û¬ó»‹f=˜8;ZÞ%[ ²&|BZn¡¦#̳é>ñh_Ã3òÓðl÷rž¯ÌoϤ#&ËÌ'Y¼=®È\ίBšLÒ®½îh%ªxt¶¯ÖC=õ[0èí}Aêa[çÐŽäǧðAGócØ|X&-A„ôŒŽȈêmÇ]Pê`-ÉÞ<ç<Q§·ûrþ  —OĽˆÀ‹`~Í‘ÐÙ\Ä‚@n™ƒ¯¸â	©X”¦—W»žÒOÉRçŽ?
+"!˜X?n¸.¯uÌ9R¼ÖôØèTCZæ¥èòè[N‹¼¡ÜÀ_yq£×2UÓ¡©¹VŠ&º-UÁWìƒÅZùÐÌknÖ·üÐ[½)üã=E ]÷Œd&$ӝÄÙ!ƈ‰/­•å|bâÁ;æM/‡-Oi0ƒ'ú££Þអ½¾)ÄÂvn‹‘&†|’Qz¹j.0i9(¼/ô)Uå|àH—–²œ‹qŽûwGÂ…hqtrAïR›ã(Ãkøhq\¿Cé%)yñ@Uz)[`Wé9,Œ9ðê?\Ááƒ,š#W\$À»ÀxýÂ%W[jæé_èàø@Ìa1é>EŠRçÀëUGÄ)a•å#a!Zª¶6#WR~„ã0aÍ•Ç«iß_:	a¦bRßc"ñà—‰ÞŽXÎDª} S%.=5:éº	ꉩ-‹­,±B¤4“ÒaG·…`UÆ"~q|R;&“P®Ñ2lö@ž¢Ñ•BZœ7"‡:K‹ó&¥Á
+SJ(„k.‘PöÚïþ~†e48ˆÊêÌù®(ƒµd¦¬”=ƒÏ#DI×#wE“Z’œË•¯S̘Üt46Fòæö[gÌcsÞÔK»TÅV›-×j¸á¡–:¿™2Ü®øL…a<b[œ©€ÚÖ’,Mð:©ªrÙRôj¨¨÷v¦6¹¶R‚½ž»Rx¸1'Y¦‰
+œ˜~âê/
+ÆÔ[>áGBOçâÚò‘	íäìáº;j郍r{E‘Y‘ÙŒÒç5Tè¹QªOË9ªJÉtè"²¸“K˜æ”,›Þ®;X_TlØâ_’ |áÃpy=LÌ!Œ9TGŒZ>üó‘N{‰Níyµ~àôñŠM¨œxSÚÆÀ`Zষ±!- Ê»Þt°èž:i‹–“ŒGW€5Ër¬X1¥Ælbå@œ(È›ÜC¼{§{øˆ¤Mî!c]5'®®DHlψ4«òçTÖ4S#ª^ UäúGDUnÑ"Ϲ¨iª{Ãby®º×œIw…z#gÓå?°$¶p‹¹” _-3ºÄˆËé6.æbƒ÷‘gÜ
+Í+Õ¯×/~*TM–Ô–O…ªÉÙy)Ñ™^R¹òªÚëɼ|Ó‘’Á©¦Šv|¹>á…líh	ôzÉ´ûïtA† dûƒ‹¬GØ’e–ÜY-æÎÒ(›ZR–ògc;JÎf|¾ötQÌ–´(UÚÑ·;¾qš#¨\§r}ËKÙÒXc°Pl1®vàqÅ›sÚÇQ>~1óú;ˆØ ikªÔ)'sÉ5¤N9™KìK.´RRIhù£'aJ‰öáÂ%FȲá@¤s³qÒ.V¥ÓŠ˜
+q)U+¤\—§26DìT^ñ^JоFKˆœ>’ä1$—é#á÷ròöC “Ïòí»n‚këè&_ÑÓ/Ø
+ð| Ç8ǝQu…eœ”ÇŽ¸óøá÷ž¸¤xŽý3WyLNWçø7
+ì9§6ã|ÿ®Á0xÕ›wÿö+0¬ÄRÆa¸\ÑiñèBÉRçpÚ[u͹¼a<N›ÌÛÙ†Ý'®°qÀç&Wt\Š5M&âÜ
+û5mD	˜kWMY)ŸœnxÏ¥­$§òÅ‹6·€T‚«ÁFzËŸ_”þ¢9ôá8’¾Œ­Uiþøï=]Rر¸–«'ÍAÎÙ‚pyŠ½‘òãð‰ÙtÎíŠïa/PðÞ„y¿.ÎÎßÆÿ¥¼êz£F–è;¿Â?€5îïn	!±v‘.»hÉî}¹šN”ÌD™	ˆOÛãà®9Í:/™H}º\]uªêÞ?HÏp>QF—mƒŽ-ãLYS<Š
+:ã f»T„þ¦¯¥ÙĬXB(ÓŒgY>eŠÝª}V>ïlñüŸ‰@_Tä—Ú4ŽIÐd}Ø·Ãç_Ÿ?yýîÕ“gï›çÏŸ½{õö
+¬yñâ׳WO~=òìü<6ª9¿©›;R7wsÂ],-IaÐ]JqøºÔu…—:a
+FO-Cø%q\€ÏzÐn¤SÐ:¬â'(­£Î4‹î*$e´Ñ奊3ÆcS됂Léb‚AÐfwñ姩3,uC¾¦ÄAr qiøTBÂô'¾†ù¢'×mó'>“¿ð C›Ô6¨9p}hÎŒ‡©Ì÷Û¢‰n¸ík/±ì%“)ÓiÈ,LøÒqwâø|T8þGñ¦uÊø9fUPhÖsÀMá¸JØ Ð þ,¢lcóËð÷®rYj4CèŸÙ±ÅÖåý¿_‡ÇCs<ÕP|¦z:³ÌŽçÑvÕ’×#si|&Åq÷»+2­ñ1¼tÙ• Û&¸¿­QÁÎùy?œ+X1tŸ;þ™ýñŸßþúóï÷Ÿc_zA—™§µîÜ¡L‡	é™'f:õ)Sâä‰Qq`ŽÏIÅ”Êûòt´¬r0ÙÝÁ2;M?»šê7S¦Þt5Q³óãí“ó‰N4XÇ@â½.ržªÙq!jåöœ¡>›âœG­ÉÎý´:¬j‹¦SPììåùË*ÃœnõCqÁ¡áp¢bSÄìxsdP(=œ)WüüêOúÑÉ!ÐCÿˆµÔœŽ™šŽ,óÛó¦zK	,SX3»±|8ûPÉ“î'˜õE+€õj–°a(_MÓxZËÓt—&j<¬gŠxòÊæRøQòÃÇ㩨¤i~{UUS
+eP§Lu1Oªз7««Ú×úѹêRëŠ\½}÷ò·×Õle¡\ÏÖxZËÖt—fk<¬g‹xò*äÏW³5W²U¹=k]㱺ÒIµÑæˆ#¨ïW×ýáPNb¼Øu®ÄUsj›Stkg²Ø~|ÿò?¯ÏÏëYEúR=«ãi-«Ó]šÕñ°žUþá^©Y^¢ŸŸê±Þd-Ù ŸîŠ©w</+e…ò›¹Å¾|<oKÕ8OY)íÜ‘.9Yrç€:ØVÍ–SBR…9̸dØÜ°–­F܏üÂG [ÿXUô ÂX5R»€¿Ú]_oö›Ýv_s*ÐG>Ðr¨Ë6ÖìJ Æã§þû¹gëX‚ tà_ÝR¤ƒô4%°90¤êT‹´ûûCc‹P•Ð]3,kôâhUâÂÅ
+vy‚ƒ(8ï™Íç½s
+u©¼ðµoŸûf¿ºaw4±Ëý¥ü…Tb‰i¶Ô•Ì“˜„ë Õjû‰&Ü¡3‰ o®¯›êLîdªÓ2£ß†…g¤½} Xb3Êa\tÂÂæpè·Íaǹa,¸ó™BR­¥¯Ï‹‘1ÀV2fz•“`¤ˆî–N‚zºæênwû´ÙšÍ¾Ùöë~¿_Ý}Ï/_3S{‡·N/x¹Ã°ô'A¢4qZ#¢¶Wô1ÎøÖž°{ˆçd=¥;÷;ÞQЧq솋4¿`aðP|’>2`ÀäÉ^ ûævEí&H3Œ°»å	V
+Èa•¶9Ô¡lœp£ÙQ¬ÁΕœ0{É¡µs"¼£<MIènËÝEM+ã[q5­Œð‡ÚVwÊ-q×cïðz±ã“ I¶]P"mÜp„ˆIŒ¿,K:/¡<[Z'ñ0êlVbNuaw³u®[B0
+ퟰ¬-ɘFÝ[£…|ê@~*	¥SPƒâÚdÅ\8»æA qÒV‚÷-Ÿ9š ³2º1Š%ôÍŽÒ3ám6‹˜9ÉGª`tÈ’]ÏžÇÌU^ô>¨¡œµq‰1¶.
+W×ýS>Ò0ŸmYÛsdÞ§$î)âÚx-œ½åPXµË è·p .(]TBv@ò«¯¨ƒâqN¤*Ic±`*“–øà@¯$¡Íï\X(Ôƒi8ãPPFöº7\€ØÖ‹Ï[Lm0htÍ.UF¯$÷M±ÓÒƒ”\¶Ãþf£¬E®ŸmæLÙýJ¡™3NBi…„“Æcj»àEÑ&nÑê”ò¢p}i±vtЍ¢È¹ü€ÆÂ4ÕK^†¹ëí	ÿ§µÉpl|~¶†ªq
+eÚÌ•—áßÍî~ß
+ÍWÇð ô"3æ:fNÙ§ëG¾=èÅqSp5ÁØ<0°.â m‰å!éV;„¡4Û_óÕ‘R±s=ÁJèöŠbUj]'±œŒèmˆF/qACk	­FD!UB¹…n­±¥P‹Ÿ(¡•¾¬,¼5nÉ»œm£ÈÛ_xƼƒÈ—1à:8`ß³YNÌ¡_+LˆØ¼:'ÖüÃõ¢Æ(3"½œ	)`”A0.h -½7fAÀ²´DKÐ{:wµ֝æñí#«I—’xõz\ÅÊæ\ÂÊ©¼ëˆ6÷.~¬‘)áPøÖÉ€ü½¯¨Aì]Ãd+*™+<…ÝÄ‹ô]Uvƒ¨r¤Õ‚BÒØc|:aqÉ‘ ·‡qUd»¦»a\Í¡”ð­/„¸ Ž:ŸV).ÈC–Ž>ÈïïimŒl—‚]PFÆ 6Œ„ö\–«ð2ç–<Íb¼;9ƒ>ñ-Â8ðÆ¿€7YBš=w"ä‰%ÂË7¯¬õl”<çÞ¢¡éaå(ÚÉ–ç-N6vÛr±øPbUmª­ðW=­è²¼¯¦nÉ$²:´ÎH(×OfPç®c1
+£RJ–%]&0YÚtRû{ZmÛj°ÖI¢Q,æ–Ö2Àê "Ó’™a#¬Z	åyÀ¶Ú©..ɶÕÎI(VBûWè
+}ë؁:ÊÈjÛÝÑ;,
+1)ÑÒ?q(º©‘ÐfE	áLÈuÁFÐ8.õ¤’uàê6ß,°ÈØŒÆõßÏÞ¸†ú6ÈQ9Zàé•åh‡m£„Vûþ°o¾m\¿9ˆv ¼T‘oèví®Är³èv!J(_’”­J…‹
+½Ã,‰Eˆ­òV„íÀ×ÆšäKì©¢(¿e>ŸA=#kÔ¸õ¤†XªªÜ`R•&GQÔ|àú%äòD(®TôK.O	]óÔ蘙´Ä,Æ6Rá4—ª	K0îÛ®Ù]|á£>o.˜Þ%™Ö õ¦2¼<K‰TÙzµmxßBù8¯ývYeÚ„a^B¿bëá–M¦­¬at¹Õ
+…»¬•p„2”:¢HfC‹Çæ2KÆ-yè„ÐÈê©
+‘äd:Ÿ6›C³ÙÉ)»bg~Ú¡f`ÄŒDë×ý~_éuy7ƒª-.Ü}§XüàݶÄVZœò¶A•X¾¢bÀè,K³kŽE;rI˜åÓäØKèj{ÅZôŠN{µèm‹g}¿À	hcsýÌ¡µö]ÀG½]q°YµºÀ,DvàkÁ	
+õÀYåÄI›“PZ‡Ã€w^CÑTS¡mv—¼«ê¼
+¤¸€dZçÅTBy†¨µ>-Ê™6yâu»»ã`¨Z¸JðÅŽo¼èHÉ™`nÌADaî.ùØ‚ì
+jÑu«N§$ÓY¬&ám¿çQ3 „‰V$ƒÊ6B/¡”‘Féÿ3^5½mQðî_Ák”Úï]A€Øñ!Üæ  ‡¶(EN˜Ê’+1móï;V]òyèðfÃÕîÛÙù¨‹Ij¼¼ëÙ‹*~ɪÎH`Wê„(È
+6œRS=ú	VÝY]UÕšÂ/íe¾y¶çœÞñÌM$ˆdÐl Äñ	/(˜%Íg¼ ¢_-o>T'A3¼M“œ"Ä<5¿iâƒC j:5ýGžl«×­Ž›ÑwÕn¿ðÞÆ`Œ €·	ö³@Iƒð6fME^qÌZöœ3!€Š±¨ý"¢Ó"Ò ¢7”b!ÅÚÇEÙáå7–£&Q}àc+2á À-¿
+T–âuÆ¡,pËØ”¬YFŒ	ÔPœf	}£VO—jS!JÖ/*HtðvëÔn‡½Å‘úB½}6„&¼÷lêÅ@(òŠ¼{êzúX,¬T´}wàÆ	\˜=†×Åpt8ôõúâúæêbõ®zùrusõö
+ì®zõêòÍÕÅåZZi3j¥’ÿ†“ØpÆÐñEƒñ˜‡Ÿù™ý.'‰Xcè–¥ËyɃc¬”A~V±…ËÛ)ëÝ¢ÿŒEÌs^²0L*›¬Îvxσ1°Sìç¡·~š	§¹ŽP“éè•{
+G¥”ê5EßmO¨¡ —‹Sð…^˜ð푸…4ê˜w|à¨C‚™bï«ž‡_øaÌÆjrp,òacÕèxæôOC·Õ©½›IÎÕ9Äò„M‘¢¢Ÿ]4:˜B­W;á—ítÐ8=æ™#ž4Oî¤Ýlxîh<x‘Õk9r_4˜…	êtÝLð€ï‡F/ŒÛ®¸ª‚pHãQ=DîLh0¹ÉŠ4²"QÁHõõU§{îû¡¶ÞirlºÛnCïäh”*Í	{h £f‰Ò BE“šÝ¯<íG¤6ëô®‡u̓§µ]<ñmÇP‹„û᧜ó›Ãnםpü~ýŽj
+H˜~ü‚CáPAC«öþ~‡áÊÈèýÙ³Í4§ŸirI¨ˆBOзÇíVˆ·áÂhQ–r™~ÃÅ#ÀnñŠ1´.Û<N9²)‹P6PÊé§ù))Ýï'§è?ñ÷>(¥Mj²{/qHj&¯W?ÌÈ”Çû¢üµÿ„wÏå!£[0Q)h6ièökµãŧøÚ$MÖ?¶¨ \Ûš:D§èðööñi„ÇK£™0€NQ3vÏ%Ý%M#¹…9Y²MT©"ÛÓ©{­è
+ç
+âá°
+&Ð7I±j¿ýðBè²çQÝz8kRµ»]õþK?
+Ìå1>¯.CΫP‹A[
+aŠ£úyeŠ£Ã³œLVA+žÁöà4–69T’Ú‰£“e)Å­Å^MÈS,¥¸urü'«¸2™$ŽÑbjÈ6ÚÚ™ÆNÑ3†‰Àeµgžtñ,C*qÁåÚlk”¿4…òLœžˆ†~æP”8kÔÁ†ôL…Á²€e⦘¸`ÎH$׫òøâw|ȍ¾æ¹¤ˆÎc‹šÄ·ÝnFåa
+±è«>ñ½ âNôÛ¤åÔ• gTØÝ\ÌvÁ©B‰)1¾¤ß‡d(ivß$k†ãh„7¨u.Øð&!4¨K¦/ÈC!²SHnT6@Ë¢"Ù_[ÊHÂêK^2,ï!}!«cñ΀lVJv‹V-ÂÝ÷ꃗ­êwÉ¡ ¸S¼ºm)	¥ß$§õf×WâŸ/f¼!IÂîäºz€8xc•î𺠴1úÅóÚ4Ž$'€7MÐ&ôq®„“y­$Ôˆ¤55ÖÇt}Œêlw3MÈ×ÉÚ%ªb’ÊëP2$فvØ~Qˆ*«õ'©Ö·çøóuÉ4þpÀi—Xóß_²s
+ûjÛœ¹yøesÎðøaö›Qjm2ŠLç z½¾¸¾¹ºX½«^¾\Ý\½}ɪ^½º|suq¹Ö§³é òKÙ=ŒÀšj.q?ô#5ah¸ö4†öÝf;C1Á™!¾Œ?hg£ŽbŒ[Ø!89sG³Z’ÔfBBœÕC
+’#ÛªUé¶!HÈQ«òè¡¡}ì6‚¶Q—ÑîfƒVS$ŒÁ|]áƒÓЙL–q½1/YåÑ
+ýžC%áD?…~áËâµùb¶û“Gdt[ŠÚÕ0g]¼„·	ç™iŒ¢"âX€«Ð":™~ow)9Äû%N’C¢ZµÚ´<›ø`ꎫSßI;ÛâzßÞIËê¨ô}x¨VÊF1yËÍ]D¿|xPh}Jj$<î À<Tú*7zL0–¢×öý±£!у¦¥UÑ”gƒè©¡T}ãDØ ëéìÔ¥$~8­ÎBDîþ LtŠ0¿ÿtùÃõÕú÷_ß\3£ŒVBwÐ$ñuéU{:6]Ûo?Çx0¥æ¿•|xΔš,5ÃBwÜŠ¼\Ü;kH¦¶Äc·Õæp<nO4¡X?TÔ<ùâ°§D¶ÑÖ¡ÁÆØnÏ¥^lÉӝÌjwyº©{Ձ·É–	dŒÿ<×;Mã§+o7}=	¯}wÛnzÉë¯÷Ûjõ®ýØíÛ¾;ì«Õë¾o7Ÿpµ¿¬.}¸«~[]^þ©~ÉHÁ‡PeØš5б'DB®~#Yeà‚Â!Ä&—8+.aXb—õ+Þ´`ÒßÆ`gy‘@œ¬Ë‘#Wž"σúW€ $÷˜w
+endstream
+endobj
+43 0 obj
+10345 
+endobj
+44 0 obj
+<< 
+/Type /Page 
+/Parent 3948 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT5 75 0 R /TT6 3963 0 R /TT7 3960 0 R /TT8 73 0 R /C2_1 72 0 R 
+/TT9 74 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents 45 0 R 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 13 
+>> 
+endobj
+45 0 obj
+<< /Filter /FlateDecode /Length 46 0 R >> 
+stream
+H‰ŒW]oG|篘Ç;ÀÍ÷`ˆ%+pF‚áwŠ¢$2)r|ɯ¿š•,î´jAÚ†¹¶Š³=ÝÕÕÕg¨wïÎ>Ÿÿv¡ŒzÿþÃÅùììüO§–{ü»ýVûåffÕZÍÎþ»º_<®ÿZoï·»õ·Õãn½T»õììW|áv?û0ŸÍçQY5¿™½5ÚÕ|©Ú“ËjþCY7œ‰Œ?¦èÔüÛì_A;õïù×Ùáç֝KèP¿ïn›õ?ˆa»QÛõx·RŸ..ƒZl®ÛCT—ëûÕ~8éã|öñ3îr¸ž}¾ÞS”é)ÊšM-È!Þd‡(ñøÈð„XS
+í©E1Ç[owC´W‹6”1xËpÖxíküþ°¦P›4Žôcèæ–"1tHŁE§Â¸§@ït´ÝµË!»ïKŽF—\û«s`Ô%ö@št«v¶Æ1pvPl:äãÊI×:†-6W’>tHðA]+yðÝ»/EZ¯«5õh”ζ·÷ÀJ"çPÈíyρQ{“º(WXu%r©R²9úšÜ±íŽƒEGô@Úe.àD×)Õ\ĉèˆãé‰(+]Ư9°èšú^­ÔŽç²àõ¶o܇êƒ$…	ML›ŽŽÆøã%«>8{¼5Cp{^­6ôPo”Ìψ·díjM»Ê7nyוRO¡À½¼­ñ{ÅUKJ[[õŒÝQåñÉkSz‰ZÑ”úl‘¦þJØ^Þ·žÑju0®+üš†`Bk™×Â7Ìæ—ñç
+£X0I'g:æ´iK_å­N¡öSèSù
+•‡.‘:ømҐ€ô½Ì?ªkNŒP¢Æ7zºíi½CM »ï ß0"‹p”lÑ´îïMÃpû!Ûþg;·Ÿp¯Q ×OÇÿo¹z sVÃVoGXnà¢jl£ù7áH¢®RsÀm¸'@ÃçšÆ/~£{>F½Ñ	¿FØëÕ~¹ã‘Fd7Çñí¯V”ø6Um§îhlÁÝS÷/ÈÝJS$Z	óg|)¥&\¤ë\d¹ÈòÒFPcRY˜_›Z¤ˆøŸyñ•@ð&ûæÐÆPu˯ٺ3Á(wàÍŠ›%Èp­Y±à6Ÿk¥sS¤¨"Þ7Sœðƒ[ë®6e?snRÒÅʱnh¹1–Ë ·$”“=Tèfê‘«ÝÛ	Z°&/’°šð¡˜ÕŠ2ð¾ÈÍ{‘…	;
+o]_EÀ£­¨C0âXõ‰{W|Ä"ò0as3Ê›m½œò¹>Q‡	KÜ«"ƒýióî’‹t,6oj¼ä"퇧ä"î5a;!;VÞ‹OPþAœJÃÞT½<Uq³vƒýc¹™ÆTõ^Bù½R+­„ò{eœ%”[jÐÛÚ"jÀM5èmj‘ªx5ávQ[÷*_t°{c±Ì¤t‚(b9ÒÙ%î÷rØÏò0SûvTt {§hO!ê¥C5"»ŠÇ`ú«)'¨öXtëc¹E¶-q*ՏM(•êNÐD
+9 3¦ˆ ¨!mŽº–’ŵ~厪_Íè-7¤PÅdä(}P?(¶©Ø$Ò@?Ø#”EÀ”3ÁAĽL.7Ę昻²(i°€ ØjO`B€.º\i–ÛÝŽ/B!5q”4§í¢u'tDÈM%”²<@o^@õ&4ÿø* ^³âu†:%€‚†¨N°ü–g«	†ºÀ>,(†­Ã:ÞöŽÚìé¤'»
+V¼!nÊ
+ÄL«ôúmÂPÛÖGͤÁê?‹„`\õØ톛]ã”$˜;°ŠF'"¦N &O'/¡;ÞøŽQf‚r¸yBèIäVKMðYTBíi3F/Æ,RÆ¡°áÊïñ+9Šh¹á¯ùʱ‡NM”7gY1n­¶¾ˆS¯845Û NåN q1qªZÞÑNvM'_|4	Îm[_O‚mm[Ñ:zñpÁÚŒ¨í†',´–—Ø-]9\lÎÅÊ4P)i®Ð˜`{섁lãUBW‹DA³Uã‹d2x#RƉàFœ(5®V½“Ià^À4s.Ýn¹{ƒˆa ØXî]K‚?A•<V’Çêñ%¹|ÝPéà ãgóyQø›™iÃý@ÿ¢¾O_ž|€=ù)'‡[~œÏ>~>Ÿý¡Þ½;û|þÛ…òêýûç³óvnz:÷íaµ'ìªí"ÂŒªû4œýËF}º¸¤K!†8\{“ág,Ͷ…ñr¦Ù¿gÔÍú~Å‘÷ÍS>#—:À-,u	mýùÞ%WÞØ”·-wϸÍ~½TÛ›áíO‰È/‰p,¶d0»M»ç#j¿jGpk:Žò±ÞLˆçòá¢\=ºªÔð‚ú‹£ÐP®Æ#g§Ý°Z<£®ùÚKᐱŽÚ^}åkcйºÃ{WËÇý.’5úÃu¯x[ Ý]I‡Õú‘7p3,°›/H¾T¢y}‡ù~†ÆÅ^pÈòßjq¿çk_DA¢íé>Шõð ­„FÒ_}=\íŠw€O¶"BÞînyÔ°±Ú/7ë°×.¸å‡n˜‡Õ‚{]LÓèü¡Q¯×;ÇÞîø–‚ÅÎøxøß"0rL¡îÞ¨ëÇ‘/?“×ÒÈÅÈóR~¡R] 2®9—1tGëXÜc§RJV(­—Hî3
+ÍÕ÷ÐýDE,6LlKµG+®v®-®â`®wÐÏW!pKi)¾5кÚómÔF›Õv”1šÉÅŠ" ×禬'›á‡b	û›Csc¥Ì-µCð¯:Çz,µCÇÈ2P7d‹#rK¨3 at d+ μÝJB·ÜšÛ!‚¶_ÑËSÃ(:w"sö4÷ªœ¹Ð|d7‰¯¹é†òaSçî5OF+qN2ˆ_¸E‰k'ÌUÛ6µxÉ\MhJ	å$óØ”¢?…cÞú6SÓ	$óÐtoM:eÛŽr”emd+¡œeÞ7l(§±ÌG«ý°ªuAðÁÀH#3Æç –cduiÉ|6pϪ0‰jI¿Ðjœ³¨1ÝÁðC]mÕ N, çS–3…®·ØAÛ"*Å”x¯hdz94ÀeK((Í8T' Þ78ó&ù8á3"Ö	Ýð|ÃÉÝ/¢É‹ÌR³0ÑÀ0¡yt±±bä¨æÁF¬ EB¿sW”VÜ‹Û琡
+IÊ(GâÐ ËMΔBC…û˜Æ –Ìâ€_*%Å*á— té„
+Dè§sɝ€ˆÔ	åˆXضSJ¡‹¶HkµÝÉ
+`x„˜p±w<M.,¹ê48½ŽÞV7»·ãû/ãZ÷w‹ÚnVêËínûýA«?×›%­<.¬ƒ³eümõéâ2ò™­@£†1z‰W2ä^v¤ÌäÐê%™.MmS»ȃðj‡ŸZ—Rf“íñ¼1ñáêšqénNݐ·I§Ø,Î(E|»j£Õ÷Æ«d·$‰ÞõyÀ]Î}cÙ÷Á˜>}ê-—–†LjH
+þûyQ”Èêª/– ?UfDF¼E½Ú1`qiC0µVÝy&ˆ0DòIµâéØøcßC¢Ù¤‘Գݛ?x
+ðÀ nu¥ÝÚS,VÑêÙ¡Æ ¢…A2`.pÑ¥È'C‚¬z’¨3u¿©z¨1‹Ñc5‹ëØƒ;®I¡UûfF°òÈ‚ºM;Þ'ð°×ÌO‡‰ME¿}Ì{“rîÝ ”•å/&;iš[¼cÂ~¹¨ÿø‡Â‚=Ÿï^Vì0Ýéu¼giæ,XwE_<çCÂ0ü¾HV<¨Ák¯ñóãâ$ÑeY‘#N³³ˆ“^xàˆ£Ì¡©µÚþ~´ùçJë/HUƉ>ªîqTšua±
+¤ÌX];º’.`†‚ºÝH³×BíïwÍžW¥(µ•Å;fÖ¢¿#?\Ü“+}1W‰13Ax·;yGÙÍ[ݐûz6tɼ0»HÄnØ÷GÓäàaÜaÆú¢
+ï‘8«šj|»—¶Éã¡õ´>>ܬö£Ùóþ ½å¢Z>Î𯯍œúÅâ{ïaà úÒïgØ7ÈÚš—–KœC͵_‡éÏP BìàžKëïÍù8 @Ùà] ·f1¤þBÜÉÄ:dÈk?táBNYWøÖ¾ 7…»¹7+~¸Ø³X>mv;ʯ¼éšï·ùûã8˜+3|günLãú[¼ã¸8´ªp3uÅŒ]mš¹;Œ%lûݺ›Ic¢­f{=nW<µH§\ê)`ûü8"ÎûëëbZn§Ùtù_²›ÑÑÔð[|¡Å+*}~H9¸
+§d+ɤõÈï\¬ð#7õÉ?gÕ/@%;àÈ×ÇI†ó^}sÇÍ©—åTB½_qhD)ê£f…­üɳU‘ðRT~òÀ÷ÌÔÆíŽG"µX¬úꆚwîSMúº’	9Wç$ªïR`tƒ«ÈUÝrY7–stroŽžúÊ#!Xºy5ªœÏ}!m¹žUñ_z¹’BìSn^_•ƿ¾((BŝÞÜS^
+™³j)uŠ>{´ àÅB¨³y‹æ£ä{äÚðÉ`YÎ…ŸšOn8P¶)¶ÅùŨH·ÛqF”
+†)ûÅ
+ =–OG4@âRÀ5—8ÿæhúB¢…çGsÑÄß–†½¥¨G¿33|£LRV_Mæ?<—ÊcZ¿Ø¤ˆ·lÕ/2H,øÞ‹Ó牥œ<¼`~ÀÉ—1Õ‹¥a^lz³§_®/¾|»¼xÿ›ùðáý·Ë_?›h>~üôùòâÓuÿe‘Ör”Vq€\ZQL:„Ûÿ®éŠ‰
+@Æ{¤ùÁó§²{äí-!˜ÚÖ„„OÐíœ;’ —ÅËô7ø>ÎkaN¹ÇþE	YÁ«»ŽütLO*.õÈ5q
+6éúyÒÄ\ø”KœI{àu—Tïé:8’0r ÜOÑ@nß=œ[+Q]’î-Äl°N¹JAù[‹êmm–)WLÚBƒ<t¢=´A>Ä!B÷z`âÀIsõ°Ñi÷È7ÕYU÷D燅K¯‘‹nž—ÐӐ¸úcæ\ˆKM²‡DXç\ƒä)¯ŸøagV\’ñz±Y5Þ­þ|oÇÕno6ëƒå™ÊòDz"
+’¥Â4k²¸ãg5ÇÚš!ºþ
+}m’b…|23Zƒg¤ÆÈ‡j¿ÒAŒ^¼rQïyE,bÀ<þé‘ïxˆ ³†lØCïy.ÄfU
+ä>5¦:Ô\ÛbßE4±]jYgTdfkZâÿ1ö
+ÈËF"ý'OØ!5k¼–
+Ï뢾â3•ìdíP±ÙúuVkJh	¾×¿!ÓÇÇéºVg[;›m³ÃÊîDcX÷’{ÜŸ3ñR@úqBîÌϹl›]T‡Órðd9Å ¾9mý¼ìé	ix¬ô
+-nª¢ݏh¯(o÷ÉãnÆ%¤&–½ÓÕw9â‡ÂýX­yMÕ
+AQu”#á†KR_å!Äá‘0
+ê•øö‹ ûêUùtû½Ez
+œI©.`‹ºæ–.«(pªª~I<fÈEµˆ
+W}Q—äÛꣅâÉVu‡s`\Ð@:Å>á‹%¨q§ÛïS’£pà@yo
+4¼nðh>«æŠ—Sð8Þªonù7‘
+lðu¹øGë|YîPÅ“þ"$ΐÄ7wGoxŠÅXBèT=ãÎð|
+öpÞ©­ ë|‚sey}B°CÉúxº>!@`žù(È`VMGÔ¾†ˆtcƒju
+cä².›Ú× S¤^‡º{l"†MKÀ/¼;¶R´l~áúÓô7yÕ˜!ߪ_®˜’.‡V-Ž.Q¹§‚‰u.jR¥Ê]"]¤ñ'JIUííÓ
+:…„¨®É]§d‹¤‡—ºãˆh‘šþâœGLXÈ uoÆ#¢ò¢3
+é[S¥s•K—ƒû:«¢kj%øá·ZZXî$·&
+äî¯AGõŽñb0–®Õ¶H–	ÂìŠΘÉ|~2’	q$Id\š ä`ñªžÂ™xÌC8ãÉÝ&¨)Å— s•ÌÍjm¾s?¦
+UŒÊéO:7Ïw÷{Ú4`§?ØÜšÕŽ.˜tˆVâÚ	N×5‹‹ÄÜG³[Ê>fRϪöÖ5uåqGS&ìÎá¸2€:ugP&Z‰žFsûð83n ³“îÑ×q}3¾›àﯯ‹Á#Þ
+óéhe¢švrý«r“¹©=ðŠ+H„‚ø¤>ix.	xo	Õ/I&Ü!c”°×.öè=×ãZá­œj/¥èРaN¹ØI0*!êãB0ÃÉIŠS‹×ÃbÖœX|Jµªû|…"<‹Í.,Žj"c­.ÎjŒ1+j鋱m²' }vŒ¯:u;céÐð!ç¦:D-],x`Õ~óî¹¢U‹¼2¿suhe€‘WX®aBÒñ¬¨gNçB¾ÅÆ7=l¨e¡PæÈ7TùmŠ‘tô±#ÍIì:7T‚@‰
+n¢>RÞ`ªí„ûAqX¹ªqœãEú¢äܐN‰CWÝÙ¹ÌàGöE}Ñìö›íH/ê€rîN0ë©×éÊ£ÈÃÙëp ^n]}Ã%+‹ž«K><òzŠX\«NߎTû'Át¾-—^'nÒctk8ÛŠ:¶XÔWGÃWÅÃW'›Ú}˜3¼™lê	H™Ùû†æ{¿X“Ò'¯šO߉ú‹<Éb@À&m¹Èä†O8º“>‰ÿѤ<âS¬Ósô°ž{°c¶Ùë÷¡È†Øô|ˆÇ£ŠhÛ`5ÑpÕcêôt¼ØóêXòÁ±Ø‰þ¨Mù(^ÍôÇ_®/¾|»¼xÿ›ùðáý·Ë_?›d>~üôùòâÓu÷åƒÉ‹G/Ý¿zì|~9áß´ *©Nüs¥ëŽmKµ}”¾g“ Ò#Ç›‡Õ#_O‡QŽç×½YíFƒ-åÌããÙ	ûûñà7ﶛ秇õhsû|Ô#ø¢W=ŠÔã1b´ç×àkŠ@Â=»Àìdwå˜`¶œø"Õ¸¹EÈШ\4xµ7Ûñü"ç²Îþ¶ãŒ?…ù·.¼ùþž“q ŘϺ· ¢|»i,ÿ,\˜MgHó€lanþ¾9%žpz•nŒDšìáÿ¯–Ý6’$x÷Wôí®w0`ǯç0ÀbGði.M[Üá’IÙëýúlÉ;íí“8º˜••ËsvÛõ8"ëóýQ›E__Öùz؎q¡_o73''øÕVi*:áÝvÿ×	T^j_=OÓ×9w6”F¸ÙìÇç{•Ÿ(dÐâ@ôÖ5cÇhS9»hpð)M¡òñÁ#a`äýäœÖz×r˜b;éšt¾¾-¨À,֐òy”)ÀAá:sœ½9‹5î×ZQ‡\é3_
+:ò›ö:9õnˆ\‰œWð5S‡µ/+°P(c
+Ýj(Œf­n
+ÕÆ°‚Ðkæb׋S+U )Ì;öŒî•Ð@:´¡.肇 ¹ÀÏ<³¹á5„gRöìÁ͹º g>0”9ÄɱšÌWQöó^­ð,ècAµ1ä8…þé}ÐýMˆ	Ùó¾Ýშχ³Ï/¶C{ÖRÐ7†jÍ´ˆXÚâñ`žÛ@Ì£µ§†jóÚ’(àu'GÓÛÃbÐðhåß=• 3Sp¶Å|jw+ç7x(O¥ä²„µöЦԅùaV©K\Ä¿>§ðÊëŸG2ð/½‘Ølr„ý"3”hL½djBiæ–LM¨ÑÌ
+”¾&,Â4шßK±ÀÃn:X‹Á²TŠšá%bI46R\#bO),?²_¶£:*õ¨ð`ä¹)öë­|²ˆ›3«¶Ô¬
+êÁ­®!¶>…@MÐÇL[]4á0Â}
+mÁÌÄŒ3K[@4HH/½“b1³Þ©}3ëS©K.UqjàSõ­N-|ªžíVl—ðXËV‘yîF.BB~i±8±ø ž¬oú‘õµò` mÉé$g³â
+O3Þ˺œíò€.NÀg¬œí]jn
+ž1µ¹/¡3Çz3hCžbµC„\8x©)Tß,ØÍ XÓ
+ÞkûëzÿâØ+
+5šj~
+}'¡–Ö
+A“†b*B	T¬Ü{—#6/×%¯ÿtƧƒÑ|å¤#rð.ÎWº™®Ž:úÂ%È=…Ç‚
+1ö®×†FÇóàvݵ¶ÔX	_ë‚	ó6Œ™¡ÚŽx_íipgTÓ#Ž¹˜ø`
+}ª/ÅÄ%QË´9…Ga.Y_ŸÚCï']/ÂXq™ID»^˜­ÄP}µ
+å2uW-H.û%7ƒ¤ÄPí€.¿dlÌJ‡äé^£ëiÝecxûWpŠà‘÷`i]vÆŠcÿCg¬x3‘&èn»—[äbð„Öœ0Í9Å%AæˍÛSwÚêƒÁnXWR/mpÁn0]·Ú9›µÈ¬¡û¥œÝêx³=WÇíî[·ÖÖ$p^¤î´7)À¦JØ“f‘ˆ•hxw%Ÿ>¶€ÀÆÒþ­ûòùx¸—6-yëQfVß‡Ž‡É”ƒùä<°C6£‚ïÏ·›î(½Gƒ+ô¶—ðýçnµÿ(/oÚáï$º€?!Ä)v…¨¸=w÷ûÚà%byúÑú?ø-ÿtý¢îQÄS6ªðx8œ»±éýœä„ˆT©qZr¶Ô#ÎL/vÆh¾}s}]:¼Î§%æ³ëQ4µéëís,E¤öÈÙƒÜ÷R3…Î07îžúAÇßÀ|£.^‚õ
+8?…ÞßÉÔ\íS‹‰êýtU„àÍÚNÁÿžc>Ì
+Ÿ«¡^±PwWÝúÛZNxÈ€1|óº³u[“_ y¨…ŠYï6ÝáÓLÈ
+àmÞçq’O3éÍbfå>ÎP$¶?G½ƒöC0-ý(M—XMƐƒ™‘Kè
+z¢9²aã=åaÿe&—ULuáõÖTê{`ET¸ùxA&á)ÇE?Ϧøµò=n÷ ÷Wï’fHT耟~s#ÇÁâQ2²»„>jÛ\B	ƒùøËTP³)0TÿúöpxH¢#)5ÉJ°Rfª/¿ƒ,h³Ž¢’Ñᤨ=dn–hå–K¸48F´Xr‚Úì› J;âôW®iJ'èfÜv­üfú|‘oª· ÎÌ؏ën·ZK%1÷9s9ÚQ&‡ýlºªij
+šS`M­mèÇ(1ÊÑBÈýu®ÏÜpí²œÝ°Ò tÑÝkŽßþAÂ56?jì(¯jˆ£­Kø*öù¯×¯~ýýí«7ÿè~úéÍïo»êr÷óÏ¿\½}õËõÅÙ#5ø'?äˆd¡õñGþ¦îd—ªŸ"wg9HH
+„=ÜË=qÐÙê››‚o;}²ó¶Áâ­'Þjp\²6q$dK_Ó’¥ÏuiŒjÔµ™ ãòhÏé~Ýé|”9ÃUdìÛ¾>ßë²[î]suI;ü`–¨u:·ÇÐOš@lG¢&w:Rx‚˜ø­uµ>a…*õáý•ÄÂ%…š©ï’ÄâíZá‡Ö%`QË’.$Ðeó‘&b7C;¾ø>;.xÖ4©.*£]¥"¤ò09ðíÔÝÍú|ÒÊ0;•7I.(¾oÞÓ¯ÎOÐ’Ï£m¤m1/©‘Z¢VÖÑuµæ€Á Õ7E†u/öO>M°·cH™ ³aˆµ"<Û<#¾	nÕê¡va!"¯Ÿ„bêbH\¯†Ûê¼èX0àéfww:u´ÂzAsq£¥HC·^Ég…<ròÜè"†¡2Õkh±ðòí_ëFDÌC
+-,èoµ¯…¡ÚKDŒy`ÎÔD18¥òÕÞEŸ2œ/sP÷I÷¤5×P2(|o(VaH,ú«MdÎ((6Ìyʉ)h.Àå¸ëÃ^Â"V>Y¶,s2bMÃé9À¹ïÎÌ<Ú¬YĆçÇïÿ¸ú£;µÝGããôƒ¿ÿsÆÙ› \‚7ÿ5`{êvÛ¿6fçÃØ‹"ËSÝþ9xzÉàÞ’á8Ý—‡oþ£cºm.±:A"¾€›»ê>hI.}pŽÚ¡£Zö=(«K Ýf®vÆ&úÑÊÅ:Ÿ´×¨&ó-Q4Á2ôt:%6x끡㯒pÁ¡‘žMCá;c‹:°2‰KЇÂÖ6ÐÄÏÆÓ8†ÈKè^’xÀB ¨µÝǹ [l5”‹ 뢣›Ig"ÜàòªU/YÞ¥QÜot± ˆ‚lA
+»ÑXä7—¨ßž–ÚâááFÊ•Aå]©t[¤´ÍŒ	bh˜äžà!
+ÓÝn­ßö½–Eøø:T–k…Œ7·`ab†7ÀÐóŸt¢Šèi.‘jX7ÝIkMí}Ê:’@å¾e.c½]íž}tøþ`ÚFòQñk!šñ|8âƒä?<­÷„<Ê]‚²¦d¹ð*s,|^
+Œ”—u-=é±r.˜#›b¥Årˆ!—6…jÃí6k2æ¹Äʸ€¹•DíàS³(t	½Ý»“Æ›íO|¹ãýZ£ñÀC‹TÈýq#gÏA_Ê‹nèf´ãPøà“Ž§˜Ôƒ§.khíS5cøKðP¢{8…ê „¬	M¯öò>øB“¦•3X¸d¨¦3Q¦‹½×&Á?ªVzyŸ|_b¦¼ë¤é†bôÙ9:W
+Œ7ß_^ôVB1b!ѽŽ«£~3è-úEp¥ûæ›Å	†>›ÑgÛ+Ý0Í¡Ò%ÇÏ:˺ҷbR4á—í7¦tÚ0@[Jg>}µ×l`àrËôÉŒQCî‡B]5Ÿþ?Ò«¦7Š$‰Þùu䀊ÌÈïBìáã0Ò#N#­ÊMÙôÈӍºšeÙ_¿/Û¸]~ezvO0ëìÈȈ÷AÁpPPõ¶pô}· Œ÷-'샮7ª‰Uy	Ï+ª‰ÔýÂbTÈýnè~$‘¥f“h*ƒìR4H8‡LÆç03G×SÿåhÔ1tÒ½‚H¹ŽÿJ‰r‹;Ÿ„,ð8޵ȑÊr¬ø¤ u£ÖÌÄÔB©w‡Ãî½ÄÜB·q
+…v¢®Å÷ßì»+ª¯\DmïƒW-À~qµ.£®v±`%À™ˆ;êrÜKÄ.Nå„'³	§Š†voÞ/I­
+º¿ª,`ø¨Îýå÷wKR›‚QoñlIj%=8´cK…Í“:&•‰¬¸:&‚S‹†.í³xé‘u©doTw)§š3ú!FÎßUA%8½K
+*NCyÇNMz'¸ÚƒkÌÁ\Ï¡ªÚ³zTt¹µ§Ü« _.éeçÐا¢™éóHoænæƒê
+Îâf9èAàГª¡ŸÆiµ£Tî<æ&…¿yÛð "A¡f$fÅOÜW ‰Æ`Ôw¼ÞHbO˜2—|_¬^a~/hsLî¤b³ôÖÕ*).ÃÛàN©µÔgг;ðÁ)µXýd^ý³ù„Z}M,8¹…rçè«sôºú^q\=Â(q™Wµ€#=Ò£/'¼¬w©ÇN¨ÆòR±
+4r»áV‰%ä¨ùƒzM(¦håãå‚om±á„ó¾µêxló	º¼ÂÒØæ1´NÏ,u þ ÓºÖ׊߇è´POM¬q^íkº+údŠžSÏ@·&€CCô§¬xuÝÆDUmO¡p‚x3M]³Ì&ÇÌ–uݸ‰‰w=ÜîxÚ@ÇóÑæhš6À9T£1GÜÍBˆJ®ô;Ç~¹Ÿu¯wÛ¯_&îÒÀÚ¶T—6ÿl{Õ­n¸Í´UÉhŽŸ¦Y¯Ê]¯¨H¯ðkH¬Å¶'üÿuvþüÍs]ÆfKÊê†Ü÷yhQ4ªÅÜÅxÄ cT?uµ ÷ïîêYq£zxVõì”Á1tIª ý°ÞtÃÍM‡†ï?ó­w_”Ê}óO/Î/¦cËñ?Zîk¹Ë槨vtÆÚ[ZONHF!­ž7ï'®ú9,ïO_¥ª‚d~P1§|”QB:¥bë‚š¡·ç¯AMuU–¸´ýv{®ÔÅ¡n=M×Klš½†r*›JÖO²§‚RÉÔä¢:7îèÕ*ñIÑ»øm½p´£IŸo7ßY2?Æ’®,Ã]on¶—ÃM‡yî†=USHNïbòíwÔÿXwȲ¶…®/¿îÇ©Ž;§@ØFS] ©ëþnáÈjìj‚MÀ­¥=£{ó~)•âBIqýJå$…}Q_ðL>Ë֪یӳn7N4—Ôp–ÂFûÅj¿þg½‚ê½zÆ¥t„SMSƒýÞßJëóR‡ÿuõ¤Õ
+L#1t­=><_HU©¢š°Y-"°B.AMD6°&ÙööK1ËÙ¤fbâPY«[º ð–Ω–.¤¬\¯åTxtrõZî„s	½­Žá„d‹Z³ÛÝbv2¢»œ²QíZŽNÎèá¾ä<£çúOŽ„»5IÁŠ‡ñI¯t´£=ó°.°®šI¸ð…Ê:zÌy$ècyÁÆ,FÓ:aÒ/±ÇOünPÒh£*‚›ŒCQ
+äBÜ‚+Nó)mC€·)öõòrƒ…QwY=ó´Úñ#Êdúr¼×G{d8GñQs®ÿ¹îÀ×·3ƒÑd§l]¨{uˆ#!¥G3–.ÚÇõ=6)¹9pK7ÎâkªjÞ#ÿÄ-D•ê	«‹¡×t/À9}ô¡éd÷–6	
+ê£+¾éRàI)b¥¹ÿ³Ž;%‹'
+¥îü=vüÎoUêDúæV?s•4‡n¹]@ÌÑ5#B‰T0á!6W¢Û(oo~þô"ø#ú2Ò—DkZ ÝA‘ºL±¹J·¾Þlw#¯4‚šCÛNžFêèR»<!B½Z¤…w­äm{­nµåŠi²Aš=¡ŽËá9ƒkFtÜMk4k¿$ÅŸÞÊ9èŒIÍ©õ‡ñÊÄIÝwµQ5ÌçsÑCù·§éÞÆ®ð@—Ô&ÿ€*ÿúáɯ¿=yþ{÷âÅóßÎޝw©{ùòÕùÙ“Wæ'W6–£ßt²q2Ø‘;j £”«q¨4‡^ÓÕ,ZgiÝq«W‰4bBZ°[À¢¥’îû…§$ûÐΡô¥,ò!ä¬EÒµpÜÞU+2‡ÒnYŒ¨˜ê/æPºÍC*ÞäŠ,G¹Â"úëÔ“ý›Ó>¦?8UÃð×ñÃðªÎR>µ˜KŸJzP/ïn†`ÔÉW
+ba¶ÐAA at Hú™V ¦bEã·Ž†±¥O)27Ï›­z6Ú\qÒûRTµ\
+\mX5âÝöŠKHFŠ(4õ¼±Sår‚uÍtµÓØMüd0ƒµz+éRVéð6ªîryéÁÏ«]ãéCàcÒÓKu•n‚†r¦7¾w«9“¯dÛ@é€9¸‘¯»Zq™ƒÃËá”[9lŽ{Ê­2’xµ½Ü=TQt°:-–+­O5Wª¾v—ÆJxúbüXÄ4L‚>–B£…-ÑPš-\Qñz¶¨uv)‚ǃVH
+Í(@4ÝÒ”á[RÔËØ]ñWÀtü«á¢ÔìJ†Û
+ZJhž4pÅ%©jÿÁ¡( èEX°"yfEÎäŸvæEì¢ÕÉå‡
+	ð#?~àÔ3Wßò²ñK·!ÓÕ£u´&ÕCsâÓ<r€ò­¯”?ǎ݆ëÚä*ìs4· ®ôÞU—_¬|Hn¡Ã
+¿û`èðG.뾆Ouî5‡\LCùÅôÌëîn¿Rgmsê}Õ°éΗ£
+&¯CCV/óñz·ðS5G¥"ê
+¿(Ã]Íp>ÚâÄ~X\ÀAú‚Ý°ù¤ÊžM#½„ Ö}|ój‡UÙxœjcéi™ÆºžBV3r¹¥úYE1X=}Ÿ;®J0˜`õžÛ
+?YPqpªŒó\uI¶´,ðtÓñƒ!MI’¨’—¤)
+»O?9VæU\ÈŸ@åê=¦‘Ÿ›A¸3y¼ÓçÉaŒULùôâüÂ>')썾„ìÛK99zI}ô¢VpØw»ñfد·›‰ÙÌ&¨_¡Ïæ…¨húýÒ­'ü]ó`ÀTºë7ëÕ°iÀ
+u›eks+!tÙî%4~jS¬
+ˆ"-–“·Í=ìšk¡{®LÈ›ÖW»<ÇŽÝÛóׁŒ{
+[q3ör]þ/¹ÆpxyT®Í‘Ò|x¼Ë³³ ÔcwKóÔCÛh )ՐÌ?ú›«d£««äÛCÎøï՝©2‡ž¿Æ?þ}m±å°€ê°ÿE[lMHú ÷KQõ@Ùsä»åßJO¹«_<ýY.Y—¿¹ÅЇT‘ßvëý~¤«$Ð|xs}>‡F¤®¤®uÉαhèwÅ©¢¡ßPg«‘÷jy+œ¸>F5oXežÐådu7ëËÝ°ûþ¬¦n ?âùÖª}ú6|ï¶Wü‡$ª¢Ö׃GcŒê²Ô!z‡!•‰æPê;½÷˜5
+¥zëëèåÔŽ>8òŠ\€`§m.ÿ¥¼êz›:‚è{~Å>¶Rt½»³ŸBÂ	PµUÆÜ«`SÛ!¥¿ž3¶ãxÇs#÷É/çŽgçãœ3¢ÿéL@!Ä|ÊÃ2R(ªÛ<{×bui-„;W’‘>r¡¢¹‘3·…ÍWöaáÝÍ	•CڲǍQ{„+¦U
+´®š·äØ[BÂÁ¢²+;Äêf/Ô#èÆ À°˜ÉtÚ¯V½Ê(Ø}sh?]aùu8h5EÅt(<çEdn‚¹[Íæ·úXxÜdÕSn¿RÇÂ瀍#Q÷Þü~9ÀÈ§×ÂËí@ì.ÝT¨2@<r(^ýftk¿y}'_.Vñäu¿¼™ mçC­ bÙ]{9Kßû>Ä~6ˆ?›÷ßÕÿ`ú©¬
+ziôY
+ì/¨ŠŽ@y;H^µ>OoE߸*«~€ZjŐò%xøŽn¬qú¸$¸ØÏ„«ª:Ta‰
+è6À­*ÒIžmü!VæÈrj¡Cæ*…ÔEÜóZø$_Ed­ê˜x0¡êÁá"¢	5Sýq‰YïŸ&}¨€ƒ;Š"ò?w:¸Âõ•(º1×™Æbí²ìÆ
+¦!¦ŽC¨ê¥<.µê$t€ë0s®V‘­ÎuÞvžª(Ù0EÃ)Ÿ’¬Gƒ­„šÕgµm>$f‘Ý
+ÅÙi‹¬‚^[Ø–\ªhƒ:dÇ^ñGC¦Ëˆë|‘Џ½NÖ>ãe©ˆT‹ã^$T÷õQ½„ꥭŽé.õþâš*–=iS°Â8Z¹<º
+9˜Òšåàª:éUwJX8h‚?a‰P'¡BÁwµ°oiRÐeŒ"«/WzÉXš’Ë'´²‡5–й¾íT|—ª§Ä-¹Ë¨Ü	ƒN𻨙€¾Ö¡g¬hÚ¥~RmØ\½R¡øq)‹DÊ2%¥²Ó]Šß<K`}y}öòíÅÙèyölôöâÍ%>1ÏŸ//ÎÆ×g£ÿ—3pr7[ýÞz:M¹KÝ
+7ï%6_ÏžY䩧çø£ÑõuÚFÚëÿÎÖ'ÀaÀ_ÞÌÍÕìöN_eÖâJ×|bhÈò¡Ð¸¼î52Ü¡ÍÔBÁ+3Q+î*m¯˜æƒ?n—‹»oþ*ξ¬ù`úc
+ƒÿ±_ß÷:{áì‹Ñûö«­UEÁëAÁ
+ö¬ÚÕ¨æ:þõ¸u.=´ŽœêìaÖk̲“ù§ÿ™^1lC›Ø«ñDËêÑ[bµhì|«l·¾0	ìÛ'ü©ÓKé(D1ªï LAÍÅÍX9 at DRŽ"‹ùw}ÅC—YÇÚÐê4œHá¨áë™*9!‹©(Û­Î3k’«Hx­?öƒdX£RmH¥s6ˆ·é\›#œ¾a¯â¹Ñ“¨±+äDdµÑÚ®d	U·2ZPsôrt(´)KèâFÅâàqþh(uhäH¨*¤‘o#\¦'ŒoGQ‘Ð~“Á–ÔýžÔóÓ¤Ž3d«›ónñô)æ[¼™
+x‡ñË”\WŸâbDÝ“ˆÜ›é PøP[°êº<FU¼Iœ¥b½žL?﫵c>&¬¢Ò²«Å"žÓëfÞÃÆRX³^@üôë£v!2]´ï×´=ŠR-uçÀB.Šç@knEÕ/;5:Îz¾™ýuXëDЩæt`:YõB„tå›Â‰Šw@‡Ì3EÙócñ´ÜîcÌÅÍQ4nÀš¹k¶+CBç°d(,ÆÖ&ŸŒèµˆ[Ý/3©Ë¼ÿŒR»ÄáδÁ`P´©Åª·.8‘D.õÁt ä¸1|‡à C#û±iVŸÕÑtžŸEÜ{ZAõ!´Ð•0—¹ˆ4î¦Ø%ê¼=P
+TÇîñz3cÞÙZfuMà/¢uå¨Ødîútò‹/:køÎg¢ª“Jˆ°(¢ù²Xü­ÓAù¯/¯ÔS‰p*W¢øB‡f¨|	'L*yßÕ£¨ªŽáøìŠË"åÙ\Ý¢Ú%[ÄôéŠáí[X÷ž@”lÅËzð¡n>)c8Jièæ¦ 	Û«>Šjèl‘K»žéþÌ"p¨b®ç«®køìÅr=»™L×Lk×?¾õfônr;›OunF/6²Û2ïGãÅz½øj>ŒÆãÅ¿æ}fÝA´LF|g1­ÄOX¤
+-n¸I‘ù!éW‡0TîÌ…‘Z8!*¾{74’Ázjãù³Èfâ¹+ÔO Y:[
+endstream
+endobj
+46 0 obj
+12746 
+endobj
+47 0 obj
+<< 
+/Type /Page 
+/Parent 3948 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT2 73 0 R /TT3 3963 0 R >> /ProcSet [ /PDF /Text ] >> 
+/Contents 48 0 R 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 14 
+>> 
+endobj
+48 0 obj
+<< /Filter /FlateDecode /Length 49 0 R >> 
+stream
+H‰ŒW]o\¹
+}Ÿ_qwƒÝk‰ú4Îæ£@Ú"cô¥Ûw2qŒÀvší¿ï!)ݹs£»6Œd†#Š")òêìÃ/¿œ½=ób0ï¿>q¾9;ßÒ°»‡ÌÃýîvc‡ëasön¸|¸þïþüóáóÝõÍþáîz7Ü]oÎ^aÃÕýæùÅæìâ‚;\|ؘÑ‹o»¿?\|,¾’XÕoɍaHøžŒ	ÃÅÍ懗×?^|Ú,õ2®ø|ªzõõn?ô´­ñ£Kiaٍ]]kÇòBw^w•ÉÑ•rªü¢«ê`×eZDç‡}WÛ—1¿Ðþ£«ü˜“·§ª—7_]íÇP¢?ÕÞÿÔÏ[Ž£q´ð⾯
+‡“YÜÈÇ®j	£÷‹œ}þÖS%“Ƴ;ÕíVáÃSY8pÛWEX&-<¸êª’K^ª÷_ö»¾a—qÙW-¸‰¥j÷Ò( Ü£]\ÚÐ÷  eHÄSòÝH´(œ‡ý]_9[$mY8—}sSÎˬ]Ýõ”ŽµiQ¬*8á1~æ¯è÷d8°Y8öõËýðûç/^vô	a±ÅtñÀ¡½|ÉKÝáòöýðî
+T~ÿñ§Þ>ÏqYæÝ6ó–Ɛ—ª—ÝkðäFkã©êû¾Y ºbÑ<»ÿí é«»Ï_¿twec|BËùF€ð¢€n¯úÞ”2š°ÌyK‚!¿eaöUãHÁ-Rw÷u×UF3ÇhóSìØ
+Ù4~ùíbóÛ[Ðâ›ÛÃõí~ûñòË~âL[9Óü§\Iœ§!q5E®ŠágJ íán¿aZLÁ
+óÿe“pîù¶qîöüoÐ,vàÞÂô'üûëð¯›áý°±Å£„†è"€´TÆ$ ÌòÏŸ©»Gb§êäŒÐ•ªÝ‘ªIÏpË”¼fÝú•|Ñr‘1¬.Ùy­ÍÖQŽ¸$Ó©º,“®99FÐæ·aãp) D7ÃHpópØlñ‹ãø£å1
+	@"&e' zÌ"δ›ÏZ†7¸@›úA
+o&êäɹ.ä 5a·!8IÇE|Xš6VIÍB·ÉXEštg(™WÕl ªg¶ÅæŸn<ñv·ù¸!4 úè•«ÅjÔE {Í¢€¤Y?­FË1€*M4YýНÍGµ{Œ@Om«ÍCÝyâ/Gà<‰Ž4YýpΩ$>bBáû"páÒ´ˆRœ6V©4Éâ†n¬V«“ÿõ̶ÚüӍ'ÞÊ
+à¼<¯ *×<LjP]´YŒGÿ-2W¦±˜‰mÛX…vNʼnº­:XÓ¯G¶ô7÷4ý'βûÛ%bøÚŒ'0!¬ŒÀ‰N×óèÄ9	œaîøó+ø€Ì†äÃ\÷¥YÑõÌœ­£î¸¦
+ œë­™;[Ò\õÝ›]°£w!=ÅlNc)!<ÅÓbFJŒß«Ç'Ó÷›x’§„ùq¶éŸBëéŸâp½©ÿý†çAq¨·ïÀøE…FÇÇÍQŽ˜÷<±¸}²á¾q11*W	íÃsé´ÈD0m«‚Ø„¢Š ‹º…1&OöT‚šV«¼éÄÅn-Ç^-)¯“¹àä¬È$i{õ|%ljG¼fÊ—e7U<Z”]ggÌh²·ý®È­/¤×ÂT‰Ó¤Ýë*’…Þk;«¤v¡ÛdËô×vRâÕfW%èÖSUž<”§þvSWSM+©†7‘mš1SíKz,‰¥•(n€{"òœ°@ÍØ0„¾s£Tß?v¥ïÇŒÕ–S¼[©„\0Ìá
+4S}¿¢Z€„&Õˇ¾®7Œª2`uÝ£C©]ÎRd=§Æ£MŠÐS1–‚ŒÇ¯f'vª³“™É–G,ß6N[ezR1fÞÑ6¢3BœÌªÄü$gªØÜэ'¾vËÌÒZÙ•:#"aÒM×8½ˆþ4‘m(%Ê’"xÆékÆH²Ò]tmŠß‰Ä’#æ_vÊÍWùŒÏ©`$l)B üX‰Ä•ÍÃJ¤jéæ(Z2åÜ‘
+Oœ‡£þBŽ…bYZœ×‹Ÿë«ã½éG>“Ñ9è¾.¦ã 3r9ø¸¿[iŸø•fÚÃëÕ PÈ9ÍTW&Z‰9͍®¼m„–bœkúuj Šnîèš&s&ÎýüüŸOûÝÃý£åy$jÇï3fÁ(9)+êK({¦^aIƒ0w˜Ü–)1ÀeÕ–ñœÅ$å€y…Ga.T­¸lFgËÙ¾ƒ,»’YvŒ â¨Ê×óš,¾ñ#VEð)†[?[ÌÄ*㙄pŒ¯gñ£#GŽ[]×€Y,çæ9¯—‘â,2ü}
+œ)­XŒg8K¬²a™ôÅÙòVjÇrZ9 ºÕu½†"èȲÕ7DàÉžeƒ.Ï@–y!Åê2Æ·P³-Ë~Ô	^óÌ¥²:ƒRì\©MŠ"Î<€Ûšç yæ¢ü"³¸è:‡55^rÄrfy3}¥ªo²…kƒðY¨Wއ͇gè÷b™mú9îè_0KÀo›WY¹; 	b”Ààaú°a9û8¤ð!Ü5Û•öÆûa4‰ûa¦»2š#{Ö†4Wµ¶ašXÂsa<5îî´$q¯¦Ì&>%dr(ôËSBö œtò£ã—mó³í<d÷'ÓÚüe`¯±BÔ̵7o_=êµùÇ¡V==Õ»îTÑÁkÐðÒ¥Gk„Üw#™úN\¼ÙX J"RÐþÞâǸIF/Ö°™Ñ~ Ë”Qu±v ¡'¸É›Ñ&ƒa3‰Q”š(FMœi4£,M¾­‹Q‡!4Ï<uÖ	T´-[0,~ÈÜö¬F™Y}…x|áy—ìXMÖP̬?†€Ç
+>Hmõ‡”ç
+V9‰s“Û²†îtŽ¡»Ä7Í¡‡ºâ7B«á$nš$ DÆ6kCc‰½ `aº©I(°$ü"Yï”銹ŒLQ§#ZÔ3§À›<ÎSaŽÇÀ'…x
+ë$r~€NY8Z§Ì¥2³„/´È¡2sH‘‹D¼Yü÷õ¢MEѐ޴ |%)D좰­Åãä"+MÜíˆÿ<œ©M0Ëb3‹Í׳©œÞ²b1Öº$ã,wµáFd9òæV˜”QG©—Ysê£6
+ó0NïQlJ/ñÃ×ŠÉ åG¾NȘ}P#ƒpjdƒT§”$jY 6`•Û!V¦fwÐAD^‹ZA0UâѪE¡ï€Ži$Îeëèä~‚¥ÚXA&•`ë\Ff¯!ê¼á¥I€W2Yym!kê,¥7òf…;GÕ•ßÉñd1“¤hÒ·ò2™É¤¡4û&óäÁÞÔÚ¾f¨çj­èrÐrDê£Ä&³a<"5±ˆœj"¼<ž¢‘ÂCždÚ!½ý)„Tæ5«ì5s5ïŒ^e™†øÈ%QÓX³Ô19…¦%@õ†jy˜ikA`Á>6Ž_ƒÊKÅ$c&Éõq­É EF‡Rœ!ycŒ±R™Ò „ƒ¡WÑrúƒÓÖªx³sš\༠EÄ3ž…ØS—tdeÖA‚+£.{¹s_/…e¾ï´îv¹}Ãàÿ3^5=rÜ8ô>¿¢Ž»â)QRI:zÏÃ"x‘K’Ãlgü̸ƒq{‘üû}”ª«ªUÓ†£9"YE>>"Âô¡(C†~oÔ:ZŸ² ñX¬ïò,ß(ó\ øÂw"ZäAŸèkýûíæ”­·‹ó¿À´	ØõÚìò 2¹=v؏¥o¸¥¡KŠÈ‡œâ	©‡ý‚Oz	¨Œ$畲ñŽ…ÏØó¹uGnUÿÀô%½èqMÒåLÝF¥núk"Qß~EÀ0wÀ›¸•Rz|æ»üÎ¥. )!#+ÝwŸŸ†®º'– +õ𪯋™(ÓFwøñ±« ãB\+÷U±%a×]k~îk¢ÑYkÕO}U4FAS­TO]Ueêó}WS+•q“ÞSÿ) ¿¹l/ö¿‡áÛ®6¨h(a£ýUu¡Á¨¯E"Ü)Ï®Å滶¿úóña8¾~øæ»8¼9=>œZ-¼H¶ÛBæþ>>j»ÙŒ+xLTë²×1N¢–ÿ«Y[i+ôÀÑ0d2&GÐEâî«‹fi›Ý¨WTG+øv[Á Çåˆ.š
+d`g}#3‰SZèÆ«ù)Ûe¤R|6’(úI8±8²‹‘gÏ’úP“‘.gÒHN _#cÔA³ÖWpo¹äÇÊà1
+uiâÄËõ^ü8p³³þ<`\órúgãÃM½IêëÐØ2©	l«•Ó§ù3épS¿dbÁÌVñnÞß°\€»\•ìîM.ze0J˜†vÄ"6á ÒT8%Ú!`3l’º=Ü4%:ñNf™”qW·&nÚ7ëa§®¢eüâô5çøgYà ¡ÀKÕ9ÄËt¾€Ã–PæÛ¹D2^
+›P¿SE¢™Y€Íi¿}ÒäŽY®ƒeøo¶ý…2èLâLdSäÈ^k9͙ӭƒýr;üúçãñôë?Ù8´uî…ÞtØ.$	!òV¨B:ùùÝóñóŸ¯ûMê>ØFBÏäîZ·zWoëÁíœUµ5N•£’O_œŽ¤}—]û‰jI#Û¸±·e6«’9=ÜÌ2fˆâsÙ|ÚOèÕÏÕ£šZ­âì¿ ì¾ Ò‰N
+±D—«éûþîþjî|ýNpJxûCdÌrfË…QqOĈeß$\å.çST¶„f9Kê—º&s÷á44Kn>aökÒá¦}Õä‘Y®ãíç°O9Zd'‡9kSâ#ö†9‹r5Orï- …R, !2BÌÁË § ËN€žë†<ëÍŸw
+‰M1—¥êï;ªXB¼ÓQ5«ÞŸúºÈw^éú«ÙIÛq*XK™ÒÜ*'Nu>xB¢s¤Ac•ˆ·ãBvIË©Î’º%âVÙU4œ
+EóªñV¿¨ÒÖöË,ï•™ë?¢x0#uéZ‘)Ð]Mcc%"™ÑâÎÚªMœ^XxÑE:räMgõQi‰x!m3_ë·9+1…|KU!Ï9ëPßý?Isõt–ë@Žä2¢KYkúñ¬¿•Ÿ¢8‘aò8çåq¼ó4aw:?ÏAןbàR:§ð¹=ÓO§÷Ï;]¹#¦´6vi)é!¶YëÇáøß?§O×j!œg^V2§Ry¢²¾>;–s5œÂmPÊÈ¥Š“JQy I¡ÉF¹ÀU1=3Núå(Í™Z1ÛÌ‚‘8L.ÆÚM,®«¢ÐU®ÔÓB46cŸI»Ù¾LZ„Í.KŒ°=EÆk2¿‰ñï…™Í<ðä»±&ÁS,Vv«–É9/’†wÒ`†q¼Ÿ×2¬€*í8iÖXµví_QÑ+ıŠMÝiVÑQ‹žÀmLP³Ì}ÏD+zò#Rà¶E`åLÙòìù£ŠIõ'­ÁԵ萦rXl%¤]ãd{ÌÄ
+ŽìR´žbVZÁ“B5àS]­-ØdŒ‡ùK
+½yoø….ÃÑŽ,ñ%v‰È€<ÛºæÍ7ýsœ˜Í•öΞˆgv.¦µ²»Úˆ@‘ïd{Xò›v{Éîí»ÜDoïw¦áNóŽ<¿|oñx#?•öž2zOï½T¾ÊxBc<Üu´"¿ìÞ{”gt;¼–‹Õ&¸ÿõýõøç0Œ9‡ç_Š®;Ê;1aƒ¬Ù2¨ëÅR.ˆW¦è1£½Îr@ùcdW²…¨‹ô%8TÐù,€
+ERVFžkF¢š:TT~j2i´'LNö—¼Ths~ªÇæÑxºD¦y®/‚ôâôrÖãLômþ¼x4\ †Ãc¨é¥›ŒÀ²úsÙ†þPòBX¤“ɝ[vl1¢i¹fa˜ôÚÞ‚Hƒ¸µWB#EQž
+Qql¾6Q‹ç©:Ì Xρ%YÏùõÞœ,
+E‘“6/_†ƒ!,é1IGáÄO=é*¬š\Å^ä^¯©¬˜`M$åÍ{‰Å˜ƒ-•>ÇW¹¢ µLˆY}m_ôˆ4.?˜lwó;œ?ÜHÅ;Ãu):‘ÆRŸ°Î(Ç©Ž @˜`ªA‰TƒZ]x^²ÁôäÎYñ5´Å[˜˜þÈgt…ažX‰¶ÏM0±ÜÆÔ÷ÄöhµÀœéy´‡ñq"9p%Ô	5Ê6ÁŒÔÞׁÔe»NД½†‹Üf­š•DœE½ôYYFŽÍ³ìÈDξ	–´º9VžÂ-lãÝ«”“ŠE´’}L–e<‚J2Q‚£Îj+¥cŠƒÉÑrl)— Ä•¢„¨bÒü@'“ŠÉD§ÔÞS$ÙûJEB“MS÷öâ”9°\¼ŠÑ´+˜€Ë³z’±J–!ûPùËÍ n4s¸¡wzg(.´m1Y/Q¿Bä ÅäJdRR&èŠæ¡Ö#§*ëä
+ÆÅêã‘\a(NÚ[Sƒ%~›ƒÂ1—LöžŸ’½W>[£o>F`àd`)ÊÙu0Qúz¬ìíæÔÀâ<ä/1•zHº1ìUC‡Ô‡=¯v؏§o¸ű¿º‘#àéá”ãØ~Á'½8T:F×®å ~ý|úðöþp¢ëÿüi|ûïûw>ÞŸ>?·¯O§ûÃû‡ß‡_nÓñiøíöîîø×ð@}!À’Ä}iô~@[yÿÛ‡Qê&Xì&¼Øë6RºDÙ‡¶ºxËH·jD ðZY\W•Œ…ůýö4#ª6Ž(ßÍš¨ÿ0 ‰w6’
+endstream
+endobj
+49 0 obj
+5185 
+endobj
+50 0 obj
+<< 
+/Type /Page 
+/Parent 3948 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT6 75 0 R /TT7 3963 0 R /C2_1 72 0 R /TT8 74 0 R /TT9 76 0 R /TT10 3960 0 R 
+/TT11 3958 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents 52 0 R 
+/Annots [ 51 0 R ] 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 15 
+>> 
+endobj
+51 0 obj
+<< 
+/Dest [ 54 0 R /XYZ 180 720 null ] 
+/Type /Annot 
+/Subtype /Link 
+/Rect [ 260 106 298 118 ] 
+/C [ 0 0 0 ] 
+/Border [ 0 0 0 ] 
+/H /O 
+>> 
+endobj
+52 0 obj
+<< /Filter /FlateDecode /Length 53 0 R >> 
+stream
+H‰”W]oG|ׯ˜GˆG3=߆aàbù#À91bÞ=0(jeÑ H…KÙñ¿¿JâN3½^]@J\;3Ý]]]}úA½xqúþÕogʨ—/={urúê#©Eÿ®T¿XŸXµT'§v«ùnù­{µYm¶Ëën·].Ôvyrú|éO~œÎfQY5»<yf´1†Ôl¡êoäÕ컲´??þ5Ygüïë“'^;õtöõdø{kŒN%0ÔÇ«ù¶»PïÎÞxµ9ÿÚ-výsu‡¬ûåfÝ«ùúBÝÌWÝn×õûã^ÏN^¿G at CŒö>Æ»§¦»§Ö÷YÿðRc÷/ů÷Ùÿ†÷Æâëoõ%gËýk0™´±ø¼^‹¸¢cÁ…
+®“pøkëœkqˆTBZtv&·ÐÍ¥›‹hgµ
+!µè•tºX:RûéÉb#ÂCÒÑþ
+I‡Ì[tñ!´À9Éé˜Xî×óˆÌ8Ó–8™~[ŒvѲËÕ71£dHSNºßI ³+……>?³OdtôÙM>”(hS+Sÿé©u¤±¬ôèê½&ÜÏr¯Dd°:ù\Z$úP„F0ª¤iîSÌڻ‚ËIÉj2¦<ˆ«#=âê„«gÀ^-æk1xdS“ì¡çµNÛâøÁUÓD°ƒ(’g•º4åuR"÷*rd÷‹¥w
+E‘3_H^æÀwg"2FýL82ð®ó20õ–õ±–_Y…9Nú™ˆDËÇÀéJÆH81¹éÔ¥õf~Z½µžYì!¥ÄË8¬9ÄÍdu°‰Ýü]dÇäÄN\@ǤD‰÷>i,;óV‚kÂ=vo.L6ºE‡Ž]xŸ4¡°xnnäë³Ód3è‡̐ùë÷¬ä@Qâ|qÚ“ñÓ/8Œjvu/ž†z˜>2XÒ‘÷·Xo´6&€cÍ(r
+œÐ)7©VÐŽ¿ìùìÁÏÝ9;hň³ƒ@„»´^u½,ÞèxãCl°÷TÖZKÃ;Ú/>¾Z¬˜N¼Þº¨­o¯‡
+°bÿí¶#žôŠ‘Ú“a	­Ž{ŸÜÉ>ÆWñ¥ùf+ÏqŸ!¾U[Àe·ýôTønj|÷+úlã}W©2ŨXýB¬ç¿0&eTÓ½ÄGÞ½Ô#îŠí¥ƒ,8\ðOsÜ“Ùw¹lVc ¦¹Q²=Då(UÏ=@ÿ–°|Ö°Ûeg
+Ñ4‰B”m1¹wäZà\¦
+¬™‹†!ߎXm[ìØå#æ=ê\8ðö¦—)X—8àjÄïX4XÀbÀ±¢ã!”ÓgÏ‚º­œ­o
+©d{Hé®Á&¯Úî¶y§|¢Ã3cbuÝDíºÀ‰$GãM.¨ÞÉŽ<b˾EŠ¶¬úñÝEWF&3uÍ3¨I—QÖ`8P$&D6û2],v6åÊÒ%Vl%úg0÷CH“¯tÆÕiÅ2¾}LÝàÞXSÜ<‘Õ—…£\ªODîéæ;
+Ü+Ÿu£:êàÚVÔöœ—îkb2+óÿùì·÷oÿüã?žþCz븽®NºÚcÝ-Søýúÿ#ñh)Èsà‘¼÷_è3¯Èçÿú÷X$ù!,
+ÂÕÕ·P*ö8­öônFÙÔR¢ü0…Fý†ÅþZ´HQ‹ý>¶À‘©A:ed·Ê
+Kž¢¥(RÙÂ’'ì--ðF¦z5;qÄiÛ˜aÊyÜr8	¬o#©LYçtO߉³Å–¤ÉW1°#òn ÚDÓé¬ã*D”%qÿƒx–ä»1×°v·<W‰@Oåq‰<K¨<¯À8(Ø#2_'VÌžE$+¡[-±´¿0°°<š‹¹OŽÐnbÏ”]/ö«ìø+ûN<Ó™Šð¬–¢õq&`°:Öj!òÃÙ¤3ñ
+­åº;”§Éæpp)hu–ÏÛ…|¦Õó³3E&9&vä…Xu÷QRf]Ê¡Ç ‰ŒÇ[ùL”ÝòfapØœIâ€p+•åz¬~âñƒbbÕ¼–Ø‹L“ÉôD §ñ<›gâ&çÑo¥d7};„†3Nßáƪ8åäË«C<êLì‘sq1ôû¬ËœMb‡„ÚJ.r¥¯E(,S.œ&wÔ3û~:q=lœß÷a¾êv»®ÿEmåwـΥZ™á#y¨EÈF¬ÛÍ ”W°ŸZàB–*—¶î–ߺÕ¸Xy€ï1Çö1.²¥®#,®Õ¦¨]Šì›ó¯Ýb72³«xÇèÙd/Lòôˆ7Ôéî\ü²ÚœÏW«êv-2ÕÑþGóÅ_{×òŒ{3Š¢G†²æTøÃvµ»’ßçr6Õ¦T'ª.—«îÕoįª<”#BnÖ‡GšÁM‹cR}ôH‘I¾"LbØCý]æÀ›js©ºùâJ"cŸé!7yÔ)ENýZöj¨ÌÁx;q…8ô0!wùÞɾÕÖö‰®…ÊÖ‘œ6•®nÄ
+bŒÙåj¹+dåpPUÇÐ#ŽÒa,äH–™T=ÔÑ©È‚l_1Ó`8§Ÿ@XXÍ~¢Hq¿ ¬p&p ÜÜÖjl‹Ûˆka¯u™•éF«OOî—²Òì‚{l¬v5†Ìòòû²-ôIJ={ýüþ:kÚݳÈ(®pUÀlÉ™bDÀŒÆâÁ*1“ít6è‘GÕ,c¾GÃ2Ñ}²ÃÌDŠX9d%à ‰…óKl†ª¯ÉQ"I)°€dsáœÕ)p¤HBç #…E«€ˆ‘̧Ãöù	ŒÖâp«¶—ÊWœ‚›NdÀ‰…•Üü.	9_,/—ù­Ø^]äLß-e᯲zÿZÉ6ÝC/)cýö'f~„ñîºæ±'PpÄx"{PôR°,#fkÏщrD;Wá@˜ZyÜÕÉÅò$Üìá9Eåeó3GñÒ¤#%–Ê®žÿ4ɘU{;: o×"%21vÛa$Ca|HþéHÆæêïíx›º¹¹–
+p ‹±Ö;=2Æ^d[ìì
+1÷7÷Ä¡×êûrµRçL¼,¾^'‡öo˾»¨–n3<¡h	k”©P{ÈmßUK8&QÆ$$|Ô嘦`þ³÷Éì½€‹å|¥ ûûŒŒm«ýÊN2'?¿¶ŽIu%lj4Ö:Ör ì±Í„TC󌊶Ø\w¤ƒ5w¢5?°ÍÄñ¦²wÕ-<€dwT’Mž8ŠÐHÔ –«ù¹ìáŒR]½îb[8ßì= ºâ£I`¡Ò'»…ýÖiZcß²y„„ø”ý-ûáR¾DÔFŒ—`潉C$rZÈ搕£[¦Éi8mÛý%ÛELjOf8p¹íT/CcÔ…šÊ¬»eÊ&ÎŒ|¨´X°“Q¢û?ÆËî·‰,‰âïüý8#±ÍýþÒe˜]1Ù·‘cœ`qÖvˆö¿ßSm“îjÎÝÎÑÌqõ½u«NýjšÎmð´0~ö•+5)¦ã–Ǫ€ÙÆJÿÚ­?¯ÆR6Çs7qWÃ,ÝóÏoЊôj>8yí±tè õ-Òø8ÝÈÇ,\6FÛtßVy
+^'yoˆ2´ŒËÝ“6£¸ÿâ}Å°ˆuü"'Pä=û‰Š{žqØ&*Žu«ÒiMû‘6ӏÌ%֏…Á‘&”¤8¹lÏ7“08ˆK€c6&®…ž“µsGsM죟˜4G”““*ÇAV>5Ìž«ðÅG‰íÿúõ¼ÏåÓ:gš‹c„ñØùQß\>{óþõ³ÿê^¾|ñþõ?.:ß½zõûÅëg¿_>{ñÚ}´ç°ÒbÃÀš‡E­áj_½”Óû%€ O½Rg;ÑG(ßHs{îYñ—ߎÇýöêþ¸á(S$ÆôŽŸWÇnÛ¼ùº»=pÛÆüIúü¿¬¿&?ÑÐDíÄ|:8¨…M.ãµÝì¼ÝŸv|Ã1(^ÿRzÞרÉbá$Jú‰oƒ¨9WÝ,ìß?tÛÛ†9"Yašc!¦W*uy½ZoèÜñ	c ûYèáñ¸Åá’ÆÏò}8îö#æºÇËìÉ‚‘sþd`å_ÆœŸM	³›ìóü…Û
+ÖÂêç? ñÆÆâz±ÑÏ2¼ÛGÆÄîزƒx‰…¨w’†æøÁ˜JɁJŽ„§ÑÒe;òI:vª½ë¶&¶tyi'¶4v¦9q´—ÝnøÐðø.F쨧}ïœË™Ä1ÂTøO<Ó¾[ïnÛO›ý°CºÆá¢:ÜÔílzÄêr8_{à†|ó=p(õ걑N„ØÚ'_ƒí#U¥þzځ8Ëø¦ôÑ(§®bñÿQhI‚s¿‡:u¯¡x1âѝéêÈý=!ª<ШüÄu;—ÒmÆŒ’‘1•>lùA¬ÂǤ²$8ࣱLñJL…QSQ™ºÞ~Å„£Ws1öÖ¸Ÿî&‡>'øTrå±ä<U5Ãgt…lºÍ–ãŸ,5E%‰s®³XehB>A\À×MZÌŽ‡?dðÕTH×ïmŸ«òêa°^'ð°]ó¯`o6JË·C+&‘Žú…O8קÙóq?éÂ\Ï»+ê£Þ…RVòc£á°×ô.ë—Ç€Ýr¦
+¨OS¢Î¢2Qž‹/L_J^¬¦€¬º¼˜ª êò¦¨íÁ.×»ý7>b/6m8t‡
+RŸŸpù‘Ó¬´‘ÿˆbe~7Œ¯ÇÆ5XdV¸‚Ç•ÚÝÑK–Ò'ªÖÒôUY8RÑÊã–Fµ(Ÿ£{BX‹Š¸º:,÷`+èfGà€qTÙÌ””£…®›K13¯6Ýš¢Ø'[gÇà3ɶ”t€>d`NV&ÇTÎá	sÞ`>%ÃXºB̳óòXCê\Ú¢¬¤@&ý´¶É_îDYçejìŸøª·§—~üÿV8»;U]`pmooN³Ki·ß\Ên×›îöþÛÕfhœ03ÔIëtÖj¼F9qò–¬ŒÖIÆOu4ÿÅË$Vñäô´Ç2R.É›A
+ ‡Ÿjïy3x'ëOšJ%iÈP,EI»ç1Ôv2˜HM€í+ÃÈ&BÞ‰ÙôÕêˆ_¹Ð£6l˜
+y=odUB;N¬Ø§ìLÉoSmïŒþ6_†YÅ­&Âç\jrZØÑ1ƒïöÀ]\
+A’S% 7‹xCKÓY¤Ò:]oXuè9qq~ñîðÝÞÝ0^N´@ªˆºûWë+†Åby8ÔQ¶,§)㉰¯ªú/UQfÝ@0êÃÃp§Ê»;šNç´ ש”ð=Ô×éóØdq)õñUÁ1ÂfeÌ¿í2éšÛݺõJo at 6ËEïñîÞÇåf÷±tÄEC¶Î1/·‘À5Œk¹×=œ+ÆR—“„ŠCFUÄk.”ñgÜ"°ƒ.v~kÌ¡RôØsÐ’-!©j»æ4?ªÁ©oïùv`ÉUÊß]P¥sâHêâoßðŒyfîüœx>SÒõ,„ˆžÔÂ/›5_O†UN×;-õMm±=×ÉÒ]ÞñlæÁ5U¹ýÁwž"9Š*›ß¹²:Ÿ:åžßâªîžÏê[Ãô@§¸^utbD'TÕ¯>,E-ŒCoúÓút $Œ0Xá(è¢o‰»Wùö(å`Bo<vŠ‰£™=ÿDØX“P±ªSv«»;Î{ Îè”–s””Øþ&Bš"+ó\ÖÖ‰pÍ煍P¤ú„˜ðu©:¥Ì‹{Î¥x¥P¢zÎMÇ)ZÈ”¦Úq;LÌ¥DõëS-J£]Åm ·ND@kœ`€Êl™ó_
+ i£¢rþKð¦¨t}-—q%Ô•(í»bp÷˜ŸÕÁqª/ºïZ¤T|чäB0ªNÐʗ7¨çUIQNŠV÷|ƒ> JÙë¯s@ƒ‚“T‹tÔ@r½‹JyϹÏ×p®^‡£O€ß¸ ?ÎëÍGä(}uºŽyÌ­u’8Ë“|Lº7Tƒrs¶<áêRFÖ„åö¥ôV#Ϻ¸‚ËõækìSÕ-A	> ÜpDu›ïNûÁÙ>T•¶np¨£`òâ11ÿ{c¬Òwµ¸'|ZÊÍyqEí-D HÖîFÛ'€ÉkÔ×¾¹ç&ËXuú>¨P%]-¨‰¹¨îåÏS3þÑ…I--Ž¬ëSòºŒ@^xÜ2,D‹	ಾ΁ÇDa°—å˜RE&*áž1)Ò@N<%Õ…ÿ°îä/^á…K9ýî?÷´Ä¿­8ã(ý¾â@‚…"$›“¨\3~ª»å8ÿNœ8Qr§·¶ˆã¨Q³µXtkÔßІƒí¨ü”^èNÞu6A¬Ú¤¾Më09ÙåˆXy¶Íå”,š¹ªg¨<𨠗_¾yF?y¯nNÄft¨ÕÂîU,ò –£’®šÂ‰(0¾åŠn…‘³ŠI§aÒþtàþa‡ut!uv¸µzÆÖBê€ÑèæäìGÊÕuèFŠY £U:¾
+î_Õ1ß5p7 Ã«zðöóðfôEZ,vìƒÀ¹ªkƒú¼@'FqVŸ§Â:8ÑSBb'*©wwj¬ŒM›R¨³dí}Ëc){ùå˜çtºv·ï>€³W½ÎK\²^=]>ŒC•¥Æªç³íÓ°AN©[5–=Á:Ÿ´Á·–½`Ä=Cž_¯Ð$.,WJðœF†ˆA?*§«àñOr‹î€`=ö\=‰ö¼•PÌh¥'T~H©wfVùë±Y£+¿v8gÑUrË?^D™UȆ݁¦ûœãò„d‹ØQf…ÏQÃ0Uz|ÀE”‡‰ZÙ@6x¨Mª•è€‹^¨6iRáß„¿ÜCS6@,dá´3äÒìñ4ñý©”&¢`2:B)ß]¼ÝîꇢÐ;'P4ýž®{àýe£ÃaäºÓÜqiÆ`“œJ)ÎZ¸L1ivŒâEQε\áÇ)h)u/›‡²œ½Ç^·åƒÆ#æYè›nuÛ­ŽÇýöŠz	v 8Y™cvµ”k™è/ç¼è_\^–t}*4ë‡JcEæ’ô»‰?UEøøáÍۏüûý9^>Åê¶H¸:D©‡ZùùðKœ Œ«Fáp)öŸ¿îƒ•åǏhÉ<ŠÙúGÙî°áë™xº–ÎJºîyP§ýçÕ²ãD’E÷|E.{Ñ$qã±hh‹–F4Û‘qe1–LJ›n1_?'Ґñè“viVU‹ãÈ7î=¨JÍ_'N¯0?¶|˜K[¹¢›a²¡VÔ·‡§t±cŠðó—=d<+ѯ¸;®x!	œ¶ÂÄsÑLt¹ÄsŠr{‘¸¢¸€97b>Šß„ˆ¹,OÅõ «‚
+¥¹:èAܾ¼(×!x•*ÿ$0ºPËÛõÓ)•¾~æ°Æ J+f>·6y¬)•QÂrJ²Ù»Ñêè¡w×{áàZ]¬FûŽ&iÄR•þoV‡˜¢¼+S;•“¸Êœá2w¡›U0¿
+%0pT!®¨ÝyàÀƒ²ùœ†=§Øñàœ[ó<¸¦ -Šÿ‰||¸£8ðwð¡àŸ¹ž¡÷0Ã+Žk©·Ù0–‹ð[ø”Ýbé]I	8ËVgq¹G0‹>–ú7LšÀÏaXm©ÿpδ<­<‡×ׯªñÇļ˜×.¡á㬮P<‹bbcՏš^Lå
+\Æ‘ÀÙužf:!Úºq¥š¥é<ÑÑÈ`K‡Ý‰÷“¼-¡Ã®#VU(žfñ`è¯_QòÌkrŠwT…(¯ÀgÜ€…`o<¼Av«ÞŠ/´?‚G}µÑü“c¢»^¿SÁÎ¥ë½0MLRº>kÆ*„Z)x@žÍ9•N“ÁzY¯KK6BªÉš+ã§%$mÊ·©¥„	Å6T(žM•uúúþYüq±BqÅËiK‡2ó8pg‚Œ¢Ës}8/<BgÀÂïšdl5[¦+¡«=ä”nAˆÉUç=ÂŽñ[cÞ½¶ÕVçïh
+TÓì=G´¯è“ßÙAvþ~åEG©—^uç;{»ð½~ÎŒ!àÊ‘)-u‡°‡G:—’·5t?€:pƒ‰Õ*¹'"YÔÆÊó¢A´´¡»Þ#]tAêq!vØ×w[³­±Ó°èVe9½0x犊Q®;™…Dô, dµ·£Ðd:¤ƒò»%œšTï¡O<¨hÎéÔ]ïó†ëU‡…=¸9°Vè‹áÒæu¾âß”‹/V$.Q­¹$‡â­­í ¼Ú˜Ý‹1O©rµí«ý6q`”3üþqNœí5vO«®’ý®ª¢“Éu¿á“oúã§ásÀë_†nŠI0EIº8+B˜‹®†ù4.ä¸$LŽiù
+ô[@ô?Ñå¹ÿøì÷?Þ<{ñáÕ«¼ùðvˆÃë׿½}ó췏Ï^|üè|É/ù9¿„œ½2ïþ¨'3î"Ãêr0Rïðîpœž§?§ãåAWh懨ð‡¼ä—…H7jJMM¡ªIÜš©¸à±Øò¡÷oßÙa·‘Y‚RH
+žSuæuHpw°ã¤šõôæ¡v‘¸ø‰S™Òã%+ä?"]…¨Ìíû¬(-pãDpcTM•t½%@ٳë€\u`îƒÒͧ7„ÁŒbmû<ûi>ïœh‡dYÃïÌ$.èÓÒr6_:š>ÜóØœl;U3]}
+å×v"¯Äfôðí÷9§)­®Ž[tð7g%ljO"ÑØøq#Ö¤1¤¦FØ_ÞùGB·¥û#$رͱœž-ò¥³M¡”!Œ[v´B¯x¸ò!›¿tû… ÄNÌíI2WŒ\¼=I&	!>e’,ž3¶\FË´"¸»iÖc+¡h=joRûùœhNg^ƒÃª:×¼µ³Öå,êZ² Oe=t´»(¸Œ‰ºýP>(¹¾ÓB*¿nؐƒ`Cš‰	ÉÐE¼´¬âå·Ô7	—ž¸GŒ9Øæ9_‘”@!·HdRÁæÓfrÖH¬°Jh/n¥à¸mÁ.ª®ñ55K`1Í]æ_¡Ø\A5ônƒ3/§<òcþô”\UíÂåV\aìhSƒvŸi4hËzU?çyc}´M0h©~¨‰s—}ˆõµ®Ì¢†€zêr÷¼€dF•‚mîš;ŸÖ¹•un5[#.³t]Úp:üw.pIFT]Ú‡…0æiϹl\ÿàËîêaŒ(›³9c€­UáÖYü‰Z»›ç¡Ñ7¸áÌéY"fº\´
+áÕõ«ì¶FimôAnu
+i4Æf380fé«os<r$,"\LÝÇ¿6ˆkf£»µfIÑÆX?àgŽÃy¾Á
+çï_)-+„O¥õ­·v`øº<ž:<¶KÍðÐæd=ðF5ýæ¸ì4T³‚y·‹r¨5öè-ápÙÔÿØóݼ۟¹¯VHk!ß±à©øJösÆÄx8ûÓðiÎó´Ûø ®pQ÷ò;À Ä1µ@áiJ÷ßö¨áîåF†U…È7úßrI‘Ÿ±N&Ï	åO`N|ç•RˆTÐë×øF‰¢Ë!!ryú(¢B>'5þò¯	:ÌE3ÁÃøÎ3¡ÉúÚC¹¨¦ò±…káZ”÷-–+¼[ìE¥ö4ëvÒ¡+–ÛÓä{è4¿Ü’ygc3Jº’ʹɉ·ÆòÌ1¿¡‡N
+’à;%tmàÏ›âhžÔlf\ì ónþÎm	X¤CséIAºŽQ“©¡>p¿ÝÅèÂÃ9Ž&e»Õ”ˇ\Cú­6æ	CŽñ‚’Ý
+ù†72cß°‡otu —h×ûišùÁ}€½éê¥,®1Ú=i‚›äž0„íBåún`äêïöžC3/˜îØ·šgÁ÷öŽB!ôÔq(¬¿ôPÈwŒÕv½¥+il„þø~)S£S”®„pSºIøÆ‹@þ³=éÞñ7ƒßI®¿$–7"áÙtêJæ	®'¨~)¸‰“|·~tgnˆ5žØIWÁݸ¥Âòÿª0<Q”¤¯¨ð%›øŸÎÈÈu®üå]vW9¢¼Þ¿}GT@1:iHßP‚µÝ7²ƒ;m¥>Ä”h³{­‡¿›7Ò–P£¤öÇÝLß>Ó,:Ö¡ÁqÕ@¢£7|GMlLj§OOhK¦Z0Wl¡º”~Ý=”YÑÕ¬¯µN	ô .Ç/ÿh„ÂÕÑÐÕËÉF6fаs/Ó×é1lzt4ùô嗏<ÎýP•Cö¼ƒ£¨ìö–Å *f+R€tàDÝžÈu$FIM™ˆ{[‰5š•¥ý±r²…4Ä%(Þú4xm÷5ðžšP“s¯ÕÍólh‚ÇmÚ#7€	Oósç/ÀïÃ<ÑXi°	v±ËL£”	zÞ7ï8&þæ	ÎÀ†¦Ÿ9œàqlôúfGmÎ|¶©ó@?nóÀ¹¶O™-[Tš²1)àq>ÐÁ³Hnb}'^.dmœ·l0£‹Òt`Âs¾Ò5qh˜¤vi4CB<èü;¬^ôª¹Øáx8_®¶ËF8Œ‹]3WR^~
+“µ~ÅQß)‚é†ã¨p</Ì¡©Ó°ûJ§[à£Tpõ׏‡ýîÌÍØß¼žKe%^aÙ#c­øúD.¼Ø–\£«’sZ[ã¦ýBuöÐQ×UòØ#Ù››%æ|Žªq\ƒµ…e”›MÔç٦١‹¿ÖΦ¦Èiwäuâ	ÝBäåÜÆ]@(§™›WÇ+F#ºÂe³5\3F™ÓÛ*~˜¢-«cþÇy•,Çq\Á_é#UÔòj󙁠O>¾ð2 šHx13©¿wÖ`Q×›, å‹%…5¯ß’:×>GšëJq9[.Ñâ\39å½/l„™O¹ä÷†½‘¿coäD,x.çmw‡îj‹ÇÏ|„.Jæ–FÔ5×å·ŽK`Õî¬GY ½“ôÓ¥6ënµøψgÓ#òbæì[Q +É©1G’ôØAR@§ðêÝéñ@‰£k‘ª^¦ÆÁEo¼m
+°„þΡÑDÛèÊÉ05‹QJåµ"ôÖÐÈf	å*þð¡™Õ%”«E¶˜ƒSÐCt0ùvUÕzÃÕ `¾¹(ðí¼'°¼¦aÞâKÖ
+Ûÿƒó}5³‰º"%KET{´Ÿ!Ý:]̓—EL©AMƒ.™Ç>ú¨ž7ü]$Å*6žÍƒ÷Ó^܁k…5¶_}sv¡qÿ»ûã+,_Ö[ÉÕªŠIgÌÙ!Ø
+s”–ûdloK)êÞ!‚£8峨UãY%8œ†f¨AöŠ™bM`$qñzß•!5‡ÃõžZrÍ
+¨—xNE´‚R—ÌŸE¸
+¹¨6ЂG6uÝš‘\åwäÊ2‘yѬ¶¤%WÿžfE&|¯Jµ|å×ۙól½-Qzô§‘TáÊrå
+Øòx×C
+A¢QØÁŽ;pHç{0Ýq—`Æ­Wå¤
+~\DµŒ÷Û%VT¿v\Ö°3ÙCS:ì·ÃL÷ցn<dHñõÃ@‚à1²êÃ@ *ÑÕ5P¸0©ºŸ9ë"t´XÔaH$<1½ß^¸ M¿ú_º¾-¼‹ú°¦¬j(±m¹îÁ×ß86žÞ>°pA•À…§Å)ÔEÜLtÍ}†%ôúÜyìDÜñÙÉšJvn¥!ÊW¼Z5”O¡‚l¢>Ižå`±lõkvºkbôjg¾~øWTAT
+¼ù5mèE„Ð<dÑw¶hZA¢Kj‡Ã×ß&z´‚kÚ‘*‘+í<ru/bl
+ú0xóªk†^Õ kHONàf=Ú·b-Ä9¬…†ÒeäTßd¸ÿ8
+õ® Ê¥Þ¶	>@-ÐL§,¡5Ì©½j{ù?£¨Ï.ÿ¶¬cÊxä÷ö¯)¿™E—~øWîuYzì-—Aä	ø†»Ÿ>}¼äZܘ¯ƒÇ‘rcÙKð
+=PîjbU/9cr!ÖÊ•"F
+} »ãpAHmªÃt#¦[’nðWx1Õjè¼ç\iá»O÷³s!´ ë´¢[Mß³m7±„¸#z8\¦ÂŽ¢h-H?ýŽ¢hM'ÙZ6–óXøì£*á¦W.›ˆ-_®èÄתvË[BÅEC¹h"NÔ¤ÛK·¦©¶=›—_"<¯W=»ÒS]ÐÓ—/é‰XNt‚µèarðñD,Ï?ã§æ$£ÅÀ­{ºb¦ÏÇÝ~óý¹×¯H‘+VzøÃ~÷€=¾›ƒ¢¼íŠÊË¢êSQ >al×JC
+þù·þÍÉ«ÚgzYbé˜jÇ7²DNœ=O.Dz(g+pÙA½ºÙî7G·pº’s^Q°":
+ý>m¶š…³]iù „þovW
+{j»ézˆTcFb¨ê7pZ"9Õ¥ùúÈ{ÚHÈ[5(~$.ã “S“±U¶Ü—Pt'^LwGþ'éìv–BM£O‘4s`ó!ö.ªýsºâ—!%
+@jÚ¡{ñÀWR£w´Šà",BQUÜÏÓ‘>ÇŠÍÐpn.á«*ȳ‡r£
+®‡Ñv+Z§Vzàñ„<ÑÉ_îI¨{
+љώš§…äMÊ{·å2ü4»G_óÀ<1~]Åqs·¥o<ŸËjYôÀÄo©.ç.®ÈiÞäŽ>¸çœÕhZÿãa¾™¾íöÓ+ͼHÎIì»»fe1v`£ìsd‚òÜm¿8ë$õB݆kÿÈʇçBžLÌ;æ׶„¹
+d	ß]ý ï™iº|î£Õ‹ú³ù׆óª4ÁïÐ÷óÅ˶»Wo>o¯÷pqUÿÞôÇf`¸LP¿Ç”¤æÍ|¥§íqp9EÕÙ'‹ñø½#»Wj*j|Í}&IUsÃk–JKWï/M³fÉY…å™ÂW47xÕ±ˆˆ†ÒL,^^5w)BÛ§âŠù†¦½˜œz÷€ëæLŸ@}¢6g?ÑaàxMªzÊÔú4²Î!Æ»°;°"êØ?伎cÏY5øó‚¶ä•¶*‘Ü”MÕf?O×ôçüœ²bôÒíÎFDÙAl2z³bKÄ9äYõè~†#Øm/xÍx£Ï‹Ò¬ óÉkèãö'8ü‚¯€T$nÍ
+HÅg§Š¿™æ_Gª¬ÑóëÛÙo7÷Ó+i¾jRûßÐ$8Õ ojm㊌÷:考ðÉÓÙc)á‹ar6\Q ‡Õ¶Y‚§rs´{è7Ž„ÈQ%LŠEÃE‚jÝC
+X·vÝ—òQIQM®jËGÁ¦ÚC©«›Š*€ŽË	|®³¾‡RÝtÏî¬[Ü¿ÄFÂr¶2t\FXʺށƒÉÁʪŽq1r%›è½ª>ŽÊ‘ÅAD«Šàãmk°K+fáñâÊ]ðØFŸD
+ø0p)<àòKQp˜SndÚì¬:
+ØX^3L‡
+ê–hÊ[-4Z§¡Ó'î9¤Éœ•._;ÕàK՝SŸ&Üq`Ù£Û‡¶ïÒ¯þ%þ•]uü¾¢ªPõ	rùGê±6ªÄl(i!“˜D¡yŠ>ˆGõÁTÞBc¢ª¡2J÷.„jÀ„g—ݲç‚ ]rEO~EÛÖ5œJ0Îj(eZÅ–¢Yƒ`CTØ™¾+¶Ù~-£§Dù—#K/kå[+Áð%Wõ{Í’q‚öÇZÔOþÁìM8ÓŒ»ûÍÕý<Ým'„ÄxÁ×'*²yÅš5ßRAŸªaÛõ—­8Yˆ@ûÑ'çs¤?©  õÐùÏép»{ä~ §åCíÿàžæ=ç
+ŒNS¸%–K–oˆ¤J¾âPœ–OA•<²àh·¦€à¡A¥Gò„?¢ÜIË»)«Jy¯o|h–¬+õ¸;ñÀHåA‰úõéx‹ðÁÿ—eÄ©Ù
+Éä\ô^P(ÖÕ{«*?<ð@^DžUá²)Ö8½Ä´wM¹($WmÉðÈAÕº¥,‡
+·k¶·™€w{(ø”‘¦ŠZ.ððpÞªW—qÚ]ýx¥W^© Ð|Š¿MÉê-¹>šiºHøSýèìF±`DõÙŽG›\Õ¦ëù2>
+þvĹZWNÂÄïwCøx)Ó珟§»Ãt}ûȃ%ô4ŠWuýäÐdbÑPzR¬©Iw’.°@N­ÕPjº°:O¡¡§	ÊíR‹ÉÕé#ÞàtÏèáÉVœVM^VÍRá}QW*X÷%§q&*°¹D;,GÜvŠ=r¦|ÛŒ†U ç!gEîé±t;œCª
+:<¼š±”çO‡Œë·¦ Sä4ôû@ÆœI5+ì'Ê/h+Z+
+{¹<A\œn6<×âœ$—Ü£©ùr¹i9]=Ìü]¤˜¦w=–"ëɨ+(<
+ªpY6«v÷£ Šô2pUð¾Ý“Ú†+¨3WÆÒäF½Ì+–`ªÓPjV¼tBC·?¹’§`œþ8.¥9˜ø?Æ«e·#ÞõóÎrÞÀ0`Y6âƒáÍñ")‰E$ÅùúÔ¬ÜiÕ{‘¨w¦§»«º*†<a€-<HÔA×É&$gÙ
+^PC±It™¿¬àeVSJì|h'jvOCÁ
+9ú))8pƒÓQ<L=,~ùGð±È¡ã¡pxðnâ`¾#19¢Ÿox‹]•öEÊ´mb)E'‚mW²,²‹Õ59ÁþŠKÈ%”A☇—¦<,C€ä «ËCa½ÝïŽGZ¯h=‹|¯)í€Eª@ã°æòà˜%ÿÒBx‹¶G^ç!M–¡+NÕÞ[ìÌä'àÂcåTDÕn¾Jrcı¼ºÐš1Ù)ûê»ÍÉÚrAêë<È]¬¨Ô÷ä$•ÑUìKÌ>Ÿ¨J;E'GÁóЂø)³û¢ÝÌ­†$ím%óTa6Ý(•–*êBÆR·Uµ[’	¬¹ÆÑ óâD잪Ç*Þ’‰Ed;&Þb‘¡{®Èpj¥&ÙW-Îv6XQJúÆ%hBú†£ÜÀôjgsL¥	øÕc¡É—‹ÍP°x‚ˆI!BÅ—¦¤K—]Š“ú•¢±bj¡Èd¹ØÅ(šPiJf0‹ÉqàOWm^Ä(Œc[íAÌbp)p¬ÕO¯$g[ÌL§{ÔôlÉO†ð=‡ƒ·üu¡×Ñâ`(XÎ6²ÙÙ¸$‘ÚdÅÙÔVYg¬hÏL—’}à
+¤›²½ã*@W)ïí„I‡•è‚•¡»Ÿü\´Ùõ.°y—¥¶²CÈøÉUÎ1¯B©´p^W‘ç'ð“óÂM†rç!,¼¤œí-'«,•]ã卐 E†r¼¹TV|ªø¦p9v:ê)›ÂK´—¡¼àE#›Âk, Ý„N ÀQY×Câãüâã—³¯êíÛÙ—Ÿ¯À;êݻ˫—ó‹Ù|ŽÚ©ùÍÅoµïõË¥Òà;ëÔü›íñ–ª°bÀWú™ÿ:¯®§Åq¿X®c7Ùæ¦4¼É>Þ„óRÓ+‚ýg:m½m~ÇwCÁÏjΑ¿_}
+êOkÝØ¢.©ŠÖó”bÀcT†…õÿ¨IŽì}¸Èh›W=Ézµä›¸Õí7»í’ò§é‡06s±Ò`›°ºåœŒ_)k7ŒÝòH—IUٝ#‹›ŸFãõÖÉØé¹9y±]©›Wú6‡ÎèÒö£?~ŒsKŠq­N=<Ξ«³×ÿ	b&ÃçLî°š"ñtœC3‚›Õš3¶‡ȶ‰=ªÝZq΄ÙM>4Ãz¿Þ7»-ž~úÅm&Øjî¾¼<£3Gîmî²)¾©óI-øÎöÐI7w©
+wj`t(v:lèÔ{8ŠäZìm8Cfu™L› ×.¾ ÑÅK®ðê\›øRC	ÜQ
+.ì×Ø
+Æë¿ÖËÓ±S#Ædl«19qµ>­÷›í¦î¾;Žääj¦nø— &¤›8æs5Ñ7‡ž‹3{¹)pX©4Ÿïö‡ÍâÄAöí¢wMüêyWԁy¹Í¶7´/ï	â …›*¯¢6ÇI
+×Óð›G«ª_J(#DØ\¸ÌᇛÛ;~	Æ»²iˆíöÐcH|òAF|ÇëJM«n„ju“€šóÈÒ9mšC©ÎB7;ðWÓRT™ƒ=˜ÎVIvåO¡‹15
+Üï+28ØѺàšTGuKÉ3èjÛ²þ½ÞÖsF¼§­~Á¹Î]pØ9=û/–wêiº(Â­­ô2üŠ¦f,̃­¶hº“!¡î±a¤úI`	(û†§Õ²ÎíWu»žo^¦=RÀÃ6ùTÄÅU?ïù~âu´¢h‹6ôª2òœ{Ï?™d¦×?Öõÿc’Ò1IùˆÞÿëf•GyhŸ~8mnh+n˜ÿÚ¯Õìëâv³]ô%ž½?Ðy<âÛìrw:íîÕ÷Ùååîõ-UHb÷{•|8Ádßy I}gvO4[%h´´ìõÈ
+³ç4MœÉ—ml
+çH°‹FÍšs)`l삶ùuäS¡þ` ¢¢[f
+endstream
+endobj
+53 0 obj
+12699 
+endobj
+54 0 obj
+<< 
+/Type /Page 
+/Parent 3948 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT3 73 0 R /TT4 3963 0 R /TT5 74 0 R >> /ProcSet [ /PDF /Text ] >> 
+/Contents 55 0 R 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 16 
+>> 
+endobj
+55 0 obj
+<< /Filter /FlateDecode /Length 56 0 R >> 
+stream
+H‰ŒW]oG|篘Ç;@ÍGÏ×!ÉC,'2pÎ"ÞÓáHÔʦc‹I'v~ýÕ¬Dq{ÔCdJ[œéí®®®>ÿ·úî»ów¯ß^(£~øáNj׳ó×WN-6ø½þS›Åý̪¥šÿ:|ºÞ.ÿ^¯>­ÖËÏÃv½\¨õrvþ3¾ð~3ûq>;ŸÏ½²j~73ÚKj¾Põ“ÁßþTÝxêã'›&g‚Jø=|˜žýmþ÷ùÇÙKhÒ&›Ì¡×"´8m)zóIÂ:ƒbJ;(›´/&r¬5"ÖV,5çju%‚]Ò%8Žý""½×Á#™úY„’ÕÙ”t
+4m©P“ÛµŒ-:„6ØorÂ"jæ‹çØ՝NIçDÍ«]^ˆXT8g×ñ“ͺobÔ¯KöMÔ­ˆµÿÙx=¨`¢m
+±¡Îh­?åT4ÕcЍ-ÚQKšêIg›Û ƒ|pp:šæÅԝÍèôØ`W"4z´dl:}­.EpÊÚ–6
+"i|Fƨ”Hã‹ÕÁÚ&c$C#úÁ6TîKÑƶÐՍ„%SÛ¬¥íÇAÄ‚`.‡&a‹íFa¼™ÏÞ¼ƒªï…Þ>	=×ë*Õ¯ªVS´:9Ñv“ÎSW¼6ÅYŽ3‡Æ´Þ5§ªÝ|¢ª»UÍÉbYž\ˆÍÑr2œ”Œ—ºBP'¥ÀÕ¶ð±¹^”’Ž	mÁ#½¸Þ^o†m'bJÄ•Â6Ù&½¿¬¶ÃfzlŒ•ŒÓ”1¨ñãÕøs=ÌîøCJPö	Ñöø—Ÿž€¤˜ã#í*gµKCçÙþ—Ï&ù!–šØ‘ôÌqÑáx‚º1YWWÿèPÜæb§P±ßKБra¸µìXbˆÝ~/ñ_ÎÄîþ]âDǁgb”pJ¸;°0o—22ƒ×<JÑOXÚ§Ú{ ¨\–ð:6{ï|9š*8ÃÎ\Ýo:-$
+ˆM¯ù²c¦Ð§Ñ²tŠ´ö~2(Ï€iÝñUÃn°©ÛkQø 1ev¨H8‡f¶ÕxO€›
+ý òŒ‹á¬ÃdoI£Tù(“½-UþÓQ&{‡ÊL®>ÇŠÇ™ìAP˜Â£Dö„|:‹ä©æ3ºˆì#8ï
+«gÇ…jà›3µì‚à ¬É/$éYë·°*€/UoìƒAŽp^ÏØ|Ñž*½§P™7äu‚“dȯ·þŠ¤]¬$›¢EÓé"|C¬›Bÿkþ§¾W—áê·ÿüòÏ·ïäEløßöʉAÄ‘ó72í’ÕðøM@«õ³÷cÇ.@ÀÎF§¤<œü=î«Ü
+°I¸;žpw-Q}Ë=®_ŸÕé©P®»äŠ*v…_ôÁØ£zƒ:C‡ŽFêá±–¾)PnY,{±XöJ
+›Î[y_›±ryòVò˜ŠÒ˜‰E¢Œ¦®”'=§Gb~ԝ8Ùº$î´s‡_oÄáAu£ô;ف;Õ ê¤i"ëáÂ•È¡ò&ƒ1›£m !%Æ›D%%P7Pƒ¼W+qS¥l.51ˆOÙéœZ¨œ\ØZìŽC?ˆÐbêNЄ;¨K	éTJàà
+›Ð”W\`BõÕ©y-q‡a£’ež‡Ž¸Nî©Gz”åS‚NÅU…ƒ•L7‹äªKbE•¤j-bäÈoêfPÝ!B)bµ´MØâ©SÊ–#çoä’[,DÔœz¡EÖÕ’[p©IÆÛ{µý°….`¾”ÔàŸ§“ßʈ;ѾPUÎüÓ×ØOÏ”Luµ+;U÷©î0:}•¥ê”l,ÚÓ=O˜“™c{²çci–¡±Z·æÜ[Yœl5o‰C;:“ém“`™ÛÑÁj¸xJ¾bÔ)PàО”¦ßF»º—³ }*!4AtÄ´”jl“\±•×!”xoBÕ_š—Nw\{RcÅ*’Ç.EÝ$é†ÔsìO¡Ë}šs{릭.¹zª)Z–*Ì[rµBS¨ØíØÕà¥a<TÜVGî›jt@È4YXêO™}	Ý¼úò©7qÇ=gŠ½íˆÈçG«<wæhõ3mÊäfM³³MÊĽµ²¥y³ŽP#	/Nýpý‡Cp Žk¼¥‡(ì2\ô!Ùð°Î…ªBå2̈\-ÍÚ[ÛÈy]œI-³ÒÁÚ98tÜÙdQ4:Åš»)üê7™l˜"®41c„ËdƒbׄÜö“ÖÕñÄ°s¹ØÓr¨8ì«xE,(Ú±l8±
+vºL@å«Ȥ1îªãp¹ê~Y³»ýc5þíÀî‘Ã@-gè\:Ï0S´í<›¬6IZmFmN{m
+GB¾ñ)ÇñeþUJâ+'M€gJD–ƒêó)º5k ÅÖÓ˜Ïd$†e}‚”ï¶ÕGgCÇ/wxžªÙ•ìuDcn1Zò(~“ å%4K•jÏs°!ñ‹¯dQpXâ0—ÙÕâôAga¤p 8 \€’‡Ú1{ ¨¡+a.ÄòؾKŒ…•Q”D‡®²–]¾y‘Åaâ«÷6y-¢½…ºgœ8r0 CžEú»÷ïÙë/Î&ïë¾fÙåNF’ƒÏìöÕZDB³#ªÿ‚s/^›\½éèÏNÞHF.V€°ùvAôµVÓÌN‘]Κh
+ì0w›ä§ÀŽ©vFÌó0…®î7‚¸Œùh<‹@Ü,*ÉRö,ù~øŸhÐÇ^Þct9Œ™)Pœá†Ææpôf	W(2à_æ³/zHT’¡EC‡Mü2'Üï3ÊÎÞG&,Y4ÍùéKÄž‡µvv·`"FÃàbnŽí³ÑÖŒL¡‡øhmá`,y2+!F}s´H—!{DžCåbWš'È4ÇŠå‰nBnò d„-	N”¿ôØ™0ÄO(…Ç ÷Å5U»‘µ·jÖj%3i ÒÄp×#©5-ËžYŠw,é0KÓhÇ¡´ê0/Wi)SèÃê^¦^ÌØ2-;ö¾3h£6!Ø)r£äS±ÔdÊìÔµzè¨\A¬%ßc¿¢¨uëXZ®¢ÑŽ8°c›Šd›Æ:`Ñzš_P郛[áiÓ»¸Þ^o¿‰F‰À­L;_n²X³ åÍÙj¹‡A(÷¦w‡Î"”°ê…úJ†"†Ð„p³Üª¥Øº&Y“"Ço‡÷òúf Ôñ”L`'J0ÕºÖj.ªM€€¸RsòéÓ๪ã0ñOt:°Cød#÷z­5û-wÕ!i‹ãØNù!-¥`cdØ•(Cs矇ÿ«Ä-…BUª+î)A퐛W“i…eֆܼ™(Æ”j-Z¨¨"”*¯K“9µÐ„älSay|f"Ĺ9VæB.:fj‚½~?lÔõz\uï‘šÂÉì	°.˜6ìgb—=±é0±Ð!–x\\æPÙ	.›Ò`ÅÞ$LìL¥p¨œ²(RJ
+V6e„4†‰Ó:T$-(4ÈÀ¨ëVɐGF˜·~b we]VíWbƒl/(Â┘8öÿ”W]‹G|ϯØpíô|Cðá@I0œ“!Â"ÉÉaG
+º5Ø„ü÷T¯vogV=:åI ©ééž®ª–ûï_»‹°âÄÊäCfX#cƒrn™[¹±3n¤›J–¢òè˜JæZHxjo)šcÎ7doªšƒ»T¬‚m»åKèDƒÂ= V‹ÌN=ŠKŒŽâéa×2i×cEy4Œ²¦¶QÍþÒR0«h[nYۍʭ‘æ3¾³
+àœÈ¬bcsÚó![Ë눣«DN¥ú²‰'¨.cNQº¾œ™6ÝÖ]Û”b´¹cÝ\œ<á»îÓ¾ï÷k¨µô•¯cîÉê<îƒ<‹Ùölï3dutô1æ8ÑP²¨À}Ú7;Ùç£ø<edX‘š›àQ3\ß=ÉŸQµL
+YÈíþ®9u‡²+‡7#¦ßyCóJ|«Æ@Uàr¨èQ „*Æx'Ï_ÇiŠ‹Íâi§W#wæ<|Ys]!6ÂyðÌMŽ¬Ö¸õ¾)ÏRßnÙ…ÍÀ
+¥‘7ŠÚ"$TèUó<£á‡n‹¦„®4¤s “¹Vi]}mâÓŽŠOË5kÑ‹ˆù·Ö®T%zžäDR˜‰7ka°èZöº°&˜JŠ¶Ûˆc(|ÈÜå›+¸œ|Vp™kwîD‡”˜s®­-\[[¹¶¶œ§ÕHizÅ<ËÕ¸–âT¸ßv]ßÕJgofZ6ÀsÐYµå÷«êc(b2…vÌy2?&RÖ¦"ô™ôĬ­ÒÃü0£¯^ðÌe3XßÍ$g‡o®³”·Pû2Oñ5rl©°Zç*Í,‡^c+b	>Æìà¸\×ϏM¼wÄì’.ý(KVRI/>é~ÿõ—ŸÞþüöýoÆ/g¯œÜsÚe×æ5‡eÌæxK ØÁ,ô?uˆ%ŠíîÅ
+ó<šc¯h‘[„½¢FÁ•Ð«zdS	*ü]­:ÎÄtË‘S ["´û"óA¶ÉÆú³lRØ',S,G5ø1%ô¹§caTó—ÃO»§ïkœènáijtÅ‚ŽÞt½<2¸qd˜¡ò|¨Yȍ΁rDM*ràWˆq"^ðñ¾‘GCJ&n‘û$=f*îÓlE¤5Ê}FŠE²6*Û–@yürÖׇüûøù b1niŠËï”<¢E at m[ÈEmœs­A•tʱk¿¢u!+¢sZ+ëtqЍ„P9]¨¦h€˜å0P@Á ™¨\Ýÿ˜Á-ŠÕ*R¾j“‡€£Y’òùÞÉU6!'6ߍ¾È¶OݠNí•í“»ªl—ÇíçåysÎ^ô^U%ü„XX.2½z}ê?tÛžc¿ÿŠæ[½ëþx<tý#øxõºï»íŸû]³^ÝûþøW³YÝß¿4k©yÛ0˜n
+6ÊÔ¦â¥&¨¢'_;¥ɲÆñ1uXÕÜ¿‰T‚I×øݶdʸâ‹Dá²䘨ÿ Óô¥
+endstream
+endobj
+56 0 obj
+3825 
+endobj
+57 0 obj
+<< 
+/Type /Page 
+/Parent 3948 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT5 75 0 R /TT6 3963 0 R /TT7 73 0 R /TT8 74 0 R /TT9 3958 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents 59 0 R 
+/Annots [ 58 0 R ] 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 17 
+>> 
+endobj
+58 0 obj
+<< 
+/Dest [ 57 0 R /XYZ 169 604 null ] 
+/Type /Annot 
+/Subtype /Link 
+/Rect [ 104 616 142 628 ] 
+/C [ 0 0 0 ] 
+/Border [ 0 0 0 ] 
+/H /O 
+>> 
+endobj
+59 0 obj
+<< /Filter /FlateDecode /Length 60 0 R >> 
+stream
+H‰ŒWMI½ûWäq‘˜ìŒÌŒü!tÃ2¤Ñ`í^¸¸ÝÕMÀFmbý¾,LW†'ŠBsp£y/"^\üiž=»xsùÇ•qæùóW—«‹Ë·Þløwû϶»™{³ºøkø°9Þ.÷ö÷‡ãÃýÖ<ܯ.þî«ëÕÅz͆Ìúvõ›³Î96ë­q6ŸÍú«!?ÚÄOö&ÕdK4돫±esµ9nŽß>
+ódý÷jBR"££?B^®W/ßÀÝ):EðÝ‘ôÝ‘Ñúîþˆ£øóôÀøWó¦øöW³þß÷Ãè¨:[Ø—¹SqlK
+=Ìl59osµGîu`¶9Kàî‹ê#yo)}8ÞïîÌÛ«·‡§æ?7›£ú‚©ÿnüF{W¬«~1ž‚¥à…ÑsÿQÅ–DÚ6w ÃíÃ^ÿ £^za^_½ŠæöþƒöApÕ"‰©ÿ@Ía h©’ ~'åÈiâ\
+•‚w–‹~Õ²_l¨NÔʨÀИ'ˆ”g#MÙDzi&Ë5	 Š~|¯‚Üu.
+«cÆ5tD|‘ÙVƒ‹`ìyY@ҍ>¨>G69‰W	17|äTšF0)';˜Ý0ܨèZ0…HÀÍqo®50S²©d^¬{².Mü1³¶f$×¹ñ… xül»W£,ÉÆ”;Üuv.SÓG!F\iSæö Âªõ±¤¦BGÎ/½J1°ï½»Q9E<µ&¿øp+Oͽƒú FurÈ}öôw}´žN „ÎO¡r‡û¤â¸žkZÆÁœZŠd+×>/{Ý ˜Bè
+Þë@¬‚Ì}$3&±íÍ
+z³ÇÔ‚Í*®  žõˆÛÐÊI¼|PCö®Õ˜h‰$Ì™úÎ,?ØcaO'ÌUØS3í©ZåÇ»à »3¯õ•‹ö$î=¼RqmG¡g×+×HS©g?›½ás+`Kâs²”D'«ÄñP–;Þ—&&E‡~ÓqˆÙ”©ŠÄËb‡´ºü µsè;Ŭßæv¯ïp´~å>?30°‡"/±6 óS¸¯*Í mv¨Ò,pÛlw§k‘±Ð=yÌÃg=–Œá]ßÔ3ªO‚ás3T‘òHì'YrÐõ`Þ«ÙŒ«5—¾æ_õ‹j¡ˆçÕ‹H'ÅP–z¬‰š”¨Çéò+Žú\εbl-A..µb,ÜÔb#7‘Em±XħÀ=çêҝÉ÷ÝxP5*S±Ñ-·°A²÷³Žƒ=É^•ºÜ®9~ÔaÏhWïÅ:šx§Ã"Í©\-*5’S³Ÿ3þ7ŽÝ§¶P+y挾hQ£Ý&äNŽäÒä ¯d,Fï|ì‘G]ï¡š¡¸Ü#Õ´ʉƒC<nô£«IªLY¼®K”Š²Ì¹Úâh[/Õ'vP}QTGmrÂ0ðÔ:m².ªJ–©üÝŒá¼\¯^¾¹\]üiž=»xsùÇ•ñæùóW—«ëÕÅz
+™õíx^„‘vã°C­H+¶?JèÝ“fÒd×Lüƒ;‚ª‰ÜékóÎûpúþäÁH}Ç?¨ï5?ȵíÕ®£ÉÔÛãfw³ÑÖJ7Òa‚ë¼·b»c& <Œf÷ùãðp¿Õ‰Q²õIÆÕÖã7Œ/k”ì¤Çó
+­©„çÁÉpž®Ø"¦FmªdÎH¶ŒYÝæÑœÑlx:Gñ´ºP<„~¤E5ºÆJÙrl×ÈmµšÕY±³jM}ÁҏË%õu¥ðSW:?Iº©KÇ–\YWYOƒ	¨+‚d‘ô;}XÏhì œTY<’îŸ%}NÖ|VÊ[]’adq,âù½.#Bò¶8‰×óŽKÔü…¼cG&çEÞu	áÈEzä…¬+òm]/Cĸ3'õhª³ÅGöNOPmºˆ¤—sšŒF}"˜¤‹2å|¢Enb="GY¤Ë2ßÊ#sºÒ «Ï"«GRŒŒãGx©ê·¾’$Ò8Ã`8UÀŃAT™˜Q%‡Ôî‰	ÌÈ’æZmóXÆ™/M×Y±¢'“	jS`®ZÜq¨
+2Æά…ãâ0b‡-ŸdqÔYÔT8¯‹\ƒT‡¼,¿ð4!˜àD07F·‰ù9–™Á³•rùÇÄW1ýÐN•Ø8ƒ°‰>nür»ŸÑ°Í›¶±O8Õz.ÔGРöáÆ(¡ž'اáÚ`e‚©ôhb´PKý	5£{`‹;”:Úˆ¡Ž¨Ö…!V¹v¨;]5¥ˆÉÛ´ü	öZ×ȹ híà:Á^éÂjÀ•4Áæ©ÇYRâäœ.B\Á0qSÕuS¸[Ü(¶O(u|zPڍ#ñG5Uæ{LÙ¦bB8šµ®ä<ƒ›"Pç¦GAÁéŽjj<G[}W„ƒZxì””QÿžêMéQ­àÚ!ùÓ”`éúÒ¡>ÍxW1Ó}™‚x7³r1ÙB(“3ûã
+8qd¸ÓŘG†KXèåà1%£Ÿœ›Qah,ç'&}9X]‚9KÕó‚5Ô>õŒ›i(~N4:«Ð¨]{]~Ÿè0ÌÀ&sOuT‚ðè<žvƒ.ä ¦¡4#¥àŸçüófÅEi£Ës0B܇’§Ôí†Ãái»ítÍ!ŽºÍ ‹¨€ÔtUÛÚ§3º(A‡µƒÃ"ñdO—0y
+eFèÀVélͨœõ0eXW8¹5Dþ97#47ÂœÈt=˜º`c¾›&ºŽ­Õrî˜Êvß5„Z{ÆrW¦‘‚´†øs·˜@ŒÌeÁ-¨rXps&䎒ƒš}„
+ž§fÁfx”/©É—ßFýB?×/„=Çï×›k•r©©Çêƒå³™ÚÁ8!‰t‘Ò$¢È›á°Õ…C»Xs}Ðu¤yòzä5.µ¬T ÿbXm>*[)Ÿ…¯{Ú.7ŽÂµU›ÚHU&JÝ&XK¶Ö_Àá'pIêi‹é‹"ù¸ì$vTf/2¤ÖX¨RÖCšæñ$ê¼ÔeJ°t–Hýi¬4:KävNÓ`r”è%;fä
+Z§Nýª!/+û倰Ùbο€ÃÜ¥&mºÀÍaF·xÌ{'’¤oBCEؼё8D*³xþA-e@«C«‰Rš×*­îdûªŠ>´]8.¹	øJâÜÈ% º­ÒCú8£xJÇÔ#U‰
+RàžÀ•7äã7º®,2ˆY|;#|°e¸,vEhKRTíE0È×*2©ëÇÖ%¢_°˜‘rÙáûÝÁè»&U·Üåq0gÛBbÀꬌx™–M{%„EZF¨fïXDÃ:Ý"擯‹t‹9ÙX}‘tS‘…m=k3£ó-ÖV£ÂË|c¬©½0º›Q6Ô*™Ô„R”™Ô´ÕΘ4§„\E?i¡ÿ3^®»uÜHþï§8ŒgÈá
+Ä7X€³Y ÒoC•¬ìõeyûmÎœa‘Tu 6Üu8MvõÇæëëg¯}ùìù?O?ýôü×—W¯NöôóÏ/^½|öâúÙóëëp’éègû dÊÌ$63ùl®dONÚ0¦ËÔt’íŸ^~Ò¯f#óƒïöEnçOîîÈ=0O~IíoôkMn™¦Z¥Ükÿ»ßßXe¼;“áã­Y9¹%¤Ð}O=m›ß@6šV«cU¶Sè’»•ËçˇÓÃ÷¿åÁYÓž—.MbzÓ­ÿñî¤ÃA ¶Û-¬“IþX\W²o·ßþþ|ÿu"ÎZ5gm‡ÃŸÃ—Ï“¿IN“œ¼L˜ù+o_½YOùCä3NûL¿¤?Ê[Õ•UÅ›gÇ}|øó$ßp¾‘í-	ºè'yÎÓs3Èÿ¿Ü?û£‹yÔÅ&.˜Tí‚_›sPçýµR˜@£ÕÊJ´:ßœL¬[{³š¶¶NÛ9¥ãØ]œ¬þÍ“]ªãošxŽ¥¸Ô‚´‚”½ß®¼wMò¦¼¯fäá²\µ/9®†æ`²
+2CYf‘	)™FÉ²ÖbÌ ÿ±N6¤Ms³ÎÛúCV2‘Gf#p@2Y¢ÜZl/6.GÏÓZ#½!Æ©¿·ù÷è<ÿ„X1ÄÕS×Ø5I’6ðœÀ3š@kjå•"¶Š´"Ö;Irn/A˜å‘•ÁëVà…ƒ1±šÍ*£®Ü¦çŽ›:Yþõ\¬Üm¦ïô-.OŽ¨Ä^—øR01w 8/.S1ùi^úQT>…¼ò[BŸÓêÃdèžçýÃs	ZY®OK‰–…ÕhÕ>Qk8d­«063B«VlÕ®ZBÐUK¼jɍŽ¯Zr¥Œ¦„Ñt±ZÒq.ä§H'!¤KO’nY½’ºØIÚe˜Ñ]í¼ónP„x®“(ÌËåÚ¨gýÀx;÷L岑o	Cìì›Ã Ný6¸Õ…±“(‰Wûhyg&©Óãq§ŠËÁ0$èÑ	z´òÙ2Œv†qÀ`‡Ýo‡o‡=Ž¾ÓÛÝ;]Ë
+M®e…þ¶Ãֶî–ÇEmm‡m‡Í¬e>ÖÎ-l‡Ý«®\W3	zVýniW­ZèTíÄѤšПvØšJµŽ®³’¹t¥œJy„<îJ=zt¥­}bô›zQnê%LÖoêZAÚ´–^­%¤ak	éÚZBZ·–Üèý[K®ô&¦;B'Ó¡kIÛñÖNóÖ«µ„µ½}ºíó«£^Jéýl¬Z¢ ÀûÁ¶v
+8?(ÔŽ‚µ³•ÂFÚ `FæÜÉß <—
+s8bcDè=®€"¦õvZ„N¢!ƒWûÀ‚q¹«96Œ£ÌPB0”Pm¯õò¹~¶“_¬@œÂ	%  Œ€àJ'É| 9€,: ð: `Mï.»ë±¹î! 7>Ù-.}râ¸÷! W?ûD¹ý‰¯0 °Ê@ªŽ1€Ô“ ©†^(Íݸ¿íþ¸L.øĪ~4·ÔtÔû¹ä¦jdßö?	 áÚqþâ©a•vMë@\‡ â:×€øJ ÄõŸäWúŸäWÚñEí~Ä[:Câᢉ ëèã âú,@öYR‡2 ® lýãþ'6+—?ûþqó”kŸÔ©Üù¤NåÂG\BÖp@ª|îvé“ü¥Ášr
+Ø0@¢ghí¯8ò×™²Kc@œP ‚   €@-T‚’$X@’  4€€à ƃt°„d·@)	˜ ûD¡1°Àr(\ UHÍ@R3 8¯°q]Í÷’¢[˜)<H“ÙÁ0±F+ìaôPƒ<Ô`åE3k^{(c„7“<'ª8A!„@@A7:B ¸ÒBv„] !,:B 襒
+ƘåiÆ„f!…1¾(ŒÉ!»Ý³zZ³1¶ñ•Âø'6Æ,Ü™;c2BX™1ù9Ál±3&&Z³1!ÑšíŒñ‰ZsgLsN
+chÍDäÏ"ac(BôèÁ=Z›Íèo‘ @dSôˆ N "ˆ@p¥C„ä ˆ ¬ŒìÓHÍB
+b#PIv»#À;zâ;\#P=È>±!Àzê«&ð¶1c	´êâhÍvdˆšíˆ@{‚4î×æŒÄª~t¹Ólp>#ì[ðÁ®-·ê XX7-£	â@@@ 7:  ’$@@’ °: hIQ¦	)Üe,D$	Ù-$¤$x@@$ìåABŒ‡	Ë¡<Hˆ-ð !5ÄÔ4RÔqýA¢×üà€œ…½7V3E:,¨Áƒj°¶šYíŒ#Ý3zh NÐ A
+4@@4$’$Ð A
+04„ËЀ…  h »HI€Ø'
+ˆñ€–CA©:Ð@j4š
+Äy
+ˆëhÐk~´¾I“AÂGèу
+z´6[ÔÌ&õWƇ9ä/rF Na„F@@ÁÎ®tF]€d`VgD¢T2÷>"éiˆ„f!"¾(ÉŒ »Ý!²zZ³"¶ñ•ø'6ˆ,Ü™;D2#X"Û;‚Øb‡HL´f;DB¢5Û!âµæ‘月К”XÜ”F+¥ˆ=(¢G+·ÙùéæUÜÍñQÅu|T•@ÇG%ÐñÁr(ø¨ïT|T‚ßT|T‚_T|°]|T•@ÇG% ø°ËEø¨ÒñQ	t|°Ý|°š|T‚+•àµŠ.8ãƒ
+|Ð$|0c|°¢|°¢ø¨â/4|Ð=D/)®Ì>fqç:À˼dŽ ¾å	€!áڐF3¤¤þxN±qžìà-SÅ	h   €€ô9…%	а
+h øM
+¿è !Ûh °:h hI$u@ `$²O“È7)$r@!Q
+ÙíN"ëiQw™F hiœ©h	„D!
+‰¤5i’‰B¤ÆÚIä-êN"—hQw­‰ZsGÑÊ7±¡È2SœQcc”×	%QÏô¹D¢g‘híÆõâç’õ~òƒçR'‚€`‚!†HÀdށ€Ì;y‡ì‚Àë‚`Õ1£Œ»lÞÁBdށ€Ì;d·˜wHÍ0ï@@æȼCǼÃeÞaI–y‡ó)*æRÔ2ï ®Ï;lǼ£{â HX§8xN帥Ï)=(£Gk7úˇ—m1 â„2Ê@@(¡dØ!I‚2l…BÈ°vÈ6A¼NZ•a†¡pÙ°ƒ…È°vÈn1쐢b؁€;a‡
+Ža‡	Ê°Ã’,Ã1†RT;¤¨vˆ5Ë°Ã6q;)J<IÑ0ÓòË´ÞeÖÏ™r…5’P^ôž„$ՏŒ‘[é[yâÇÆÔ¿>0G~}„·_ïQü¶î…Øô‚ß{a>]ßÉù—y›Õä¿ýoù¬òFƯ‰¤.:ÍóâòÊý¢R$›ò…·ˆ£Ììv€|΋÷Ò'/¨i¥Ÿÿ­I9ÀuÉÓ@­ý¨Ks3„VywûMÕšyŠ>ùée•lûu?=|UÅr¬nñ¶ŸþRµRÖú…oU©8ÛÈ-ÒJÿÖ¥aZR†p“ÁÝ¿>©j¹`—»Ri÷öÒ¯÷ª6Ê1ÓUí¤—Bº7Îë%¤0Åuí28iÒ|¡ÚÙ¦Vú]­™É¾ñ¡;ÜûÓíƒzÀÆJ³š¹ÏB=“í`–®)þó]5šqód‚íþï­ÚÆYÙöIëRÁçì:¯?¨Å0⟖¾poUmž‹¶Á©Ö¾R¥iÀÅ®Èot©ø7öä4©¥+Ì£fÓ¥²¯Ø÷ûy6HÖ»Ó™3B¿1ÝèÖøÉ¥.hbk󍘺2|¾ÿát?©z'“—äÒêÿÔµrÙ¸¥Ëâ‡íÔ0Gý¸qÞjœÏAo¦·îZýT”ûËùÎþï¿~õþÊšwÿ§¼ZvãÆ®àÞ_Áe&pèû~ ƒÆ–
+{1F(Y0èe5 ´„njý}ê°%Mߣ¢Å¬ìEéöáyÔãýÃožJK˜EÿÁåš1j"ìè=…P qVï=…Æ9ï©M:Ð1ô/Ä 8,&}O”ÞlPIF=|É¡N“&Ýü *NŨŽ}ãCN	)é5¢ïF_FuwÜ]З#ô£¬8©èpª&¤c‹®ö)èQô†&fhN6]þ‡ÉÚ½
+J2¸KÑœéÅÛ$YºSè4.hbŠ#t
+¾âH˜h¤š:LÝÄáˆb);UÆØ}<û@©Ôâ¨Sª
+¿à[ÄAgÙ¨æmîŒ8sÕ8þjÍŽ¢Ø§Ð ¶‡sŠÜßw ó¡›î©å„TŠæE»€¢CVEw‡«›;.¯Ü‘T9×Ýpýc¸?,È”«xõ7ß84÷~ú—ЛST¯v/Êe‹^Tzf"\Î	;6»Ç…æÈ(ä´ý“bƒTPx\š èVˆ:+!™µêak£ÑHÒ¬‹Uµ¨o^;©~ýüûù§ÿ¼ÿú÷^éSS)[‹Zû%³K‘Œ*u¶=YQóòt™Ÿv_~aŸ"‡êKl±
+Ë'TéªüÔ‘5åJØù¨_úâœÿLé2â”smÑ™Í@û}I-–ï–+ŽÆµØe„¥8˜j´êó/x·fŸxâØàzS‚šÁ´Ü`,¼S»9…X¸ú\¼ªâËß8c›•¨.sƆa«&÷ßûŽ{[‘sT/scHs¯
+¦KáÀy1FU=AgQ@ŒªÁ_ù³Nd\/Å'Ž“›/! 	»
+Ôr¨DM—[hâ'é"J0‰v<ï"†
+Ú¢÷{juÌ“Õ±Ôê8p§ÉE5éí¸î゘˜W¿
+§ºËí5ÖwÃ#‹ƒRXµ9Tï½4¢X5ãÝ4lw¼ ™II5n7¿}ìAy²{žŠ@©Âœj¢Ývwy³ÿï0movÝðíæNÌ×Ø
+›én¸æ9Ê2”'þ<–áiØ9VeÉ®·æ‘÷îøp3󾞂·ÓˆêöÐÔ+XÅ¡£òn–2ÈY4¿ÃÙRä†O¡únîBÒD^Ôwz¯àgçÐÒ{TÅݏS%rG_ð•-üÇ~;M#íˆ\žõÙ«÷/÷t=tÖϺtŠ¦&×åÚcçU%¯)ivXA»íÄ?±”ëšj•”éWL-Fxu
+zÏ·È# Tp[æ÷ëYcRïRÍ÷ƒÙ梺À¡ZÎjÜS{Øo`W¬š÷©O±Æ5xܱ…r/+’5”7K$Ãkèá°å_–¤_úˆ(;ù”û}ÕçI±Y6!©.€
+ø·ô!Y5‰¯MÍ}E;TÚ¶`ÀˆNß%‡ÂÔ¤¡×ÛÍLßô/0“Ö:tÎÕ¹‰Ž/ĈU{ö}ÏYcÇÍ–‚e$ÁÆ5½ ëø¢¡TE8;8=:zS.³ìŸB÷½ã€1ûgCKˆÆ¡Úèõ^R‰³ÏÅ®`³hQ¯*àúŽ"á“Ó7¼ŒY·Ÿ,À?Óm$ÖXû’Æ™Ã{
+´ã§bñ›þ¸hPhh±Üƒ7‘xK¥ÞzYЬ <QÁ?—Y‘šbyFÂwå¬úµ[ÈSµOÅ©ïâq3¯* ·dåHMT¯rS„ÃQ·Ð‘o½8«ZŠêYøJ/ÍíØѵ±UZ¦W­±÷\Ýshé“uªnߝxÛ™×^¬ÀáŸPƒZòÝŸÜÚAðáUµ:6ç…±W•àE8ô.ìzžÑ„Ý“Z×ñì2šž0å5—àƒ†Žt³¥´Fµl¼ä'>Ûؼb®dQfÕ²ñõ‚§„£3V-¥qŠ¦Ö¸‚n¼Å§EM”nÄR–ë
+º™-¥ÕП(’Õ¸9qÎUg¹Wö¾ÏUÜç‹Ä$–2êRé‚‹£ô¸´¼$ŽÒ'
+] CŸ‚[q8>Î|«V‹Ÿ
+¬§Zفw ‹éKZö8¶xñêšCoÇCwào×hW\d°®¯Yµì掺åàbŸS%_pˆ]ÀÔT×¾-ˆ„¸ÉjõMÒó
+Ñ‚öõEŽ¼Éâ&)«/”,òóìÖpç	¾©vÅ¢°MÊ6®ò+>LA»
+wrÂ6Y˜[9$£ÕšÁKŦ¸â,ÅtF½‘7»žv6‚C’±ZN>Q¬â¾Õ*ÐŽ¾ôð½Ú
+ô³õ«Õ‡ŸzT*“¯µÛðldÑ„/Û¹Ai‡ ¡TëŤDåÖ¤
+ÓZ(7]pï¸ÿª
+àÏÂAä ¤uŠå.†ÖÍr
+Ý;žål/%ýr`Lôªˆi¡âì±NÕµ`Jȶ€-ªQ%lù€±¦&Ý´nâVÆø	MϘ»ü“ƒË+VÇYplÑPJ««¨¾Ç9çJo¼yöm‹–Ò™ÔbyvsÁ?°q³<i$£¾ÎÂÅ©ÑPÞp¼MNµaÚòö"Ífóßßrû‡üTôÛÜ´‹StAmðën;u‡+*½±A)èëï6W7Nd'ê7c'¤µ§·âç/(úƒ·œä֯آfOkÂ\QC¹Z:/n¯®|À¢© ß—,L´Ú‘îãهȽ€í-îEÁ&2(ÜëÇéäCA#fÅjo`ÇÛVs_Œ[Á¶Ñྒྷ&qZmDõ³À¾X­¸T¼Ziº;Ñ‚”ƒWµr)†âùgG—8"¦øgÇp"Mzß)ÑG=w>‘¾½@|ò?µP¸d9„ÿ<¿Zè(®{|ƒsâ°üþ@/ÅÂÒÄ”}‹¦}´AT0«B¸²¼Z4´ïºO—ÂO"à;þµö9‰4}yý ‰ÇÎÚÇκÄZ+Šær©ºa\¦Àå9©9pjvð"VCé9{h“n*6 £ï~AР빔|˜öÃ4RÊr}!&ÛþÁ=…,´×Ðn{è®ÇËi!'"Ì!l„Ûãm~ÍóÓÕȽœÇÛiàt…AØ™ ^>löã´å¢ã¼Â¬‚M-
+•5FMýæ’ƒ%{É /_µ¯ˆ  ½¥Ã-—ð]õAÆõv3à#yµ}
+šaòÒûóWïÿx÷êÍ?»_}óÇ»OgÁî·ßÞž½{õöüÕ›óóÔáÈ._=ЮZ¶Âa¸3‹£uÖÍ¿à¿üÂʁdy/ÕœbçZðkù¯_³I~n¾s¬"#N÷`Nzlj3ö	þ«…ÜáCÏŒhTÝ,夝ìäf›¯¹x6ošZ¬z|‰7MÖЉޫ0V–ø{;öM}áÜJ瞺ê¨ÙTßt[;ʐ†ª/ªY8Ÿ—ÐGP‹Ý/D[KI¨OZ`n™Xtêex±°ÄÈ&¥¢'Ʊ’¨±<
+€zpZªˆiXr÷I.Æ(8w÷Iì S9<^L9®]¾PIp×êDÏ>|>ÿúîãïÿ*íªÈcÂGqE™äEïçõ!Ã{þŸ¥yd3ÿ졳”+,
+FÒbñÿ&_1ÿ°‰Oد[ðbñí‹b3Æ=ß·¢XCÕJ¨ãî†ã”ר’7ÜùÛ>}#œÔ¡Fåù9íçxu±Ý}?ñŸáÉ%ÕeŠ3Ê=DÏ¡
+3* =X·õ“‹·`ñ¡Š>…Ó[@ ýéÕ¶ÛÆ‘DßõóΨ/Õ7À0YÎÚ^kí¾dƒ€–F6weR éuü÷9=¢$vñÌr‚<)—ÞêêªsáTº=„vËÕdô²±¶´.Úá/zÅl	æ¥=¼:UÎæ©NÔÉœÍrìÇo.È)µ@"²UXnï+G:
+åìdˆL·øîë°Eï¸Å…
+TõiZ±àXø³’BQ`õಠJž¤jH‘$]5?8¡ïÕ`|¸üð¢Û,¶{ñ—á‰Ôå¢&SÖóE©a2†¢îB¢w˜pcz©OÃn¡ýÞŠºÌýâŽ3â˜f,OåÎR¢z'îæAY)ä0ŠÎgìœ`¶KtzªxH¨$:Õ2êÁ`@@…nÆ”ø®Ï
+yÃ_·DØ?çuÅxèA˜Ó$c"XmiZÌ)ªé_¯ø¬ŠõÉ«.l¹ÎHB"Hªâ‰ƒCè‘uÈkÂâ
+Þî>Ì %IïV4™S(¨Öe
+EöâãíBÐïL¹+Û‡’çÔŒÀfj((†‚Æ×
+åbo)ü÷#yJE{Y¶PÝbÀò“V`/Ë
+ð–A+H±-²[ÓÆXüÉÕŠ4à	Ͳ¸cŠ2£VëªiŒaFµ5ZYÈ·*w"/x˜d±ºÜíÐí¾­»)ど*Ù©†pã'ªîí‹n¹ëàü6Ã5½®ñ'il~öåËÀ…4XW£y2	8¸Ì©ÜUWS%­=t¢.¬ŽWO¹ØMÁKBJÕðá;g_S“¥Sú‘B-|^ÑP.*ðï¢+è®ùT{z±Nu˜º+W#ÁÏ©@¤Ï^ÔìmvšÌµ
+’£UgÿÙÔ”`SV-z®¸šÙÞX5½¿}¸ºüí]¾xsœýÜsh²44!ᘤ©„êsUœÜ_»®WIþèºã-þIoaÇ[Q³7õ¤ö ¾ëžâ³E¤qäåˆßgÿüûÉŒ })ß 9…™ˆõÐÐ)Æõh©w-ö\Áˆ4Äü•Ó("MêrÖcajƒ¨¸›³Rï&¶ÅrÚ¦wÁ«ºE÷/žÙêÁªʘ6ÙJ)-’{t¶rJƒå/Q£÷úfÔÑÙâ0ë"4ÝåVÐݨÛpÃÃOõÀ|
+½‹ºco„sXsÕHN@ábn‘¼‚:c.©›Ñ†91ÏúÑ>~å`Æbqzv¹z‚“Ý„
+߶šC‘öÔåÖt|]Bp
+s¶ÂeéíÑ<pk Ö±ùhtx¹°¿Ö8;§\S+N7s™7ðF/1å2¤WD"Í
+°cŒÑ‘¢Çw¢ïªÕT5|çКaÕ©÷Cõl)¢)•mm„n?¶TŽêXJ¨Õä,EË¡¾‡íÐë6дçsèaéô<pŸ`úô»ÑÔëkš8R
+ð“	ÉÎØLÁ)Yõ`u3PNØë’ͬé_‰Ï¹Ó+°~ÞèeãQÞ/f™14"˜rX¡YµL¹^ÊÏk¾>a3¡èƒ'Ì€`°?jr¨C6:léD6QT}wëÚç]÷}Ur½É ¯Q("udS[yÝ
+›ûÍP]÷bÛñ8†q¾N×áé'<û1("¹ŠIWVSÍrÇVÂÚ$Ÿ4zõ‰» _•½Ãm¹šÚ¬ú²™8ۍ¶°¨+¾è+ž8aùC©üØÔ2‘aù‹SØš"'åU*?¢'â)x/‹:y“¦H‡ö±¨öqGP X¡F²ævˆ‘<Úˆ-ªÓÆËô
+Úg”#ÙG'ê\úÞÃhD‰ú=Ö6GJÁ@FuÎC°šRo*ñïþþ·¹L0¦h zÄ}{suöæýë³óŸ»—/Ïß¿~w	âî^½º¸|}vqup¼>tt÷5¸©gºý™GJsdy®Ø”çà[ÆvaóÃwÆJ5Ot~ü@|àB…ÁÒ†\	áønµ§',c÷öò§ÐÝ.ï@¥ *ü›<…OžÂgdŸ÷&õµžýpÒ·ÏÃ
+Û8ÀÃ.·ÝjÝ
+¿ßß-¯—»ç³åyŽ+Žõ‹v0€ó´|رÛY›‘x\hÁ
+E~(Þ(èÍ‚Ÿÿl(sÎÅ###æ:õ؁ÍÏÓï%IØn¤Q•Äì?ða¸Þ-©°”jò0U‡h.+#ï’ËŠ	}Ž¾vþ
+­lä}h°¡»wÝ7®ƒ_Róƒ%§ò*„΂½šB8S”\{·‰3sŸ¬BrÅá#Ôµmàwʦ/Á´wâ‚c3”O½-ÿzï>ãêuÆé¹áÈÔøæÉ%	ŽJð¬
+òžZ…á0·‡nŸ¬—óOsžÙœ»ºÒ¡´å<ˆBÌ¢m›w#‰q#úbs9ÝB!Ö)·wXs]GP£jøÏ”_@Åm±ÅÛŽKW
+^'‡Óåúú:ØùY‰; P›)í õü\8 	¶-àÝí„ÏòXäâLT?ð£E­‰mÛ¨5ôPSÐq‹¤vÎÞ&¶¯¶|öüOƒçèàáÁûËÚüœÛ+¼QŽ„Ì¶=óŽ¿w
+±Eݳªò†wPœô¢8ù–2‡x‡T'ßÝ­¿MY¿‰ší—«îz3,v¼vØ€3%§Ÿ3 at JFÅ>9Õ¡ÚM·£]y4`ÃGƒâ¹dÖÿ…¿ˆhÂ|»dßÂÓÛê#‘4²‚ØsjO¤?S_àöEG?^Y¨ÁR­ !¤8Ý–«šÅÖ…åºb« !ñ"y\tU`OvÉ:,H
+¹AÒaC¬ímïÎU­rQjùf Ä^lÛû{~÷ ¤³íÝ·[úJ6J¥i+à×e¥ÜÖ:Q*/Á'4ÊKÍU«UK7 û.ÒNóbÕýÛ9?¥Ø®ÈCü[ŠÄ¬Hnk¸äÊ’c{äO‰Gi[ÀåÛÃh‹Bv‹{Š…wU•› ïÙ*íTÓ	p)·˜öú׺ª®Ò'™sjÕ7Úq]¯ðX£+Ug]:½ÚxÓ¾…ì¾pQõXñÅ‚"ñ'šØÞì¿*ï\¤´;ÙÒr=ö6™Òv‚K¥`mÂŒZñ¶ ŽöŨÃfiÐyñÇRÎI
+ð"‚œ&7ð
+ùuÊ:åº[¹}€õ-·P at kZ~ënøÈ
+F %ɧÛ*¶
+AL§/&¶f…ÜòÏ;xnÉJ±hÄ—ûÕ 7\]¥ª—xzªS%V!;J„RÇÅ{wš	¥AQ#H™P$Š)-’ZxIØkQ÷ï9WÒ+Õu^1Á¨!äÈ ·§ìTx›œÀo“v/™¶ûÔÛëúhó™aÔ{<©o®ÎÞ¼}vþãf·¼]\ﺗ/ϯ¾ßÝùÏ‹OËŒîz՝ÿ¸Û-®?c´~9¿Xïvë/ݯçëß»_Rîª\]’êÄ79¢X÷ë«W—¯Ï.®Îί®b‡ÞŽvuÌðP%ÂìQ»ŠÄ<–ió9§ê„LáZ°³œ«žº9—6jL…FGÈ}£þ` i´·ê
+endstream
+endobj
+60 0 obj
+11222 
+endobj
+61 0 obj
+<< 
+/Type /Page 
+/Parent 3948 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT4 3963 0 R /TT5 75 0 R /C2_1 72 0 R /TT6 3956 0 R /TT7 3960 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents 63 0 R 
+/Annots [ 62 0 R ] 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 18 
+>> 
+endobj
+62 0 obj
+<< 
+/Dest [ 4 0 R /XYZ 206 720 null ] 
+/Type /Annot 
+/Subtype /Link 
+/Rect [ 127 363 160 375 ] 
+/C [ 0 0 0 ] 
+/Border [ 0 0 0 ] 
+/H /O 
+>> 
+endobj
+63 0 obj
+<< /Filter /FlateDecode /Length 64 0 R >> 
+stream
+H‰ŒWËnG¼ó+êhv±ÞÃ𖬕ö.vyÔ¥5l‘#P3ÄôPöþýF5)ª+'ZXð´ èê¬ÌÈÈÈË«Ÿ¾üãÕﯕQ¿üòëëW—¯þëÔfÂßÛjÚì.¬Úª‹ËÿŒwÃqûy|µ¿Û¶ŸÆãa»Q‡íÅå?ñÂÍtñëÕÅåÕUPV]}¸øÑhc7ª=ù¤®þRn>öñ)㞊3Y]}ºøîöû«' ¬MèqëC±¥GÞß3hµ:Z :è¸cPkŒ®¹Ä;©í5ì}Ãe]¢§¿}ý&¨‡cSÕ¹Š;Þm7ÈöžâkÐ9dñ¿âè"¡ŠßÕY«sŽ¢(ƒsV»à{è?Öšmí±Çñ0Ñü¹P´µI=ð£cÖ±+®G¡	?Áד²Dõa{7Îï̤5Ϥµ”´Þxíc•×aßô&i“ì9,÷Ƚ5:Õõ~œè¾j³ ™ÚíjCñÉjÒ´¶>%
+xü:۝:ÞŽì•`¬6ÕžðŒc³®UÔ÷oŠ´ÍWŏ‡V88dÛH®owö‡O½¶É¤|»ß©é~Ül?lÇkµÝ}¥° Æ㣧‚fq³ZTBÛycÒc¼\Öª.ÆÇ:N£ºY“!ã}~àȨMö¶‡n94£ßƒˆášBQ‰bCárhÖ.&qêÝ–ëSKçå¹Ó?(8š˜u`ÅU8DR»¢¥°1¡Y±åòdSÔ5¥Úƒ§qÓx³¦Ö.Zqº¢“À¡ò	öÀ¡¨s„`tÐýg.ìU$cK+í*]\•Q7”n˜iŽg1¢sÔW¨á B!Ë"žfW@»dEï)Zp×è	vÖÂY÷ós›LÚܵ©«(Ó_k# Æ,Ò¹æ<¦jðFdó-‡\wxÍGEDIe/¼¡Ð€ LIŠú	UÔ›yH­2÷÷wkãÇïÎP0ŸŠ.IÊŒ£cÌåœsâµU6×Nmèõ‚i†¤ƒï=;´fUtÁîyÈX÷ŸÌÈ~bƒº?ŒG5¨wÎùÃð~“0ÊÕYÁ†g#¤õô·«‹ßþÀ2ðu?°Oû±ùÏ.?~s(âÃ%˜:ï÷柩7‡ÆcÎv`zêµ)p•²Ùl>”J³Wýã{>“@ìXR¦‘OÆ yGÛˆˆW­>¼pËýü-«_ÐÙ‰¸wkÖÔF+R½bà1ÑS3=vÅÁc&¤hĹ³ƒv+R´±%œQGxè|9á1§¶¸ÉSiçéQå©9} ‡qÞœ§hÛ Üì^¼´¼ÙxÂÒ§­ƒ{C”`¾ˆ·°¬Ée°^’VÅ£ázË©ö¹åÏâQÃ×tµä(ÒÁÝ“oSÚzQžåêà›$”[qjõ‚t„f¤c÷Rn*¼,l·$>‡ÂÔ(¸·	ÞáGjâ
+BpX8£¸Ý¨V–ø"‹Á÷0tSpYfm Ô	>/IåÓ07­=IÚ øÁ(s‰Eö‡æ6°„ÔN›³ÑZ\Ègˆ7.Ê1D84k’ì6Åë=ºó˜(Å<ê¿NóíÁ™
+
+ò»J¾<ûÙÐ#××ζ`,‘#ßF*–‘Ô&ÄK—‘µuͶv§RdÕÑ´„,‘ti±0U18q©ÕEցäóSρ|˜ÔÄWÙ¹M­¨À†–ÀúªÝ™á¢¡ÍI¸»é¾œÈ»ëÁŠ‡Ð£Õç3h`aœó,l]mGž<£˜ê»mƹHè=¯E±‚5ÓDsÖ¬MEüž.;.騸§p-iUtßu]KÚY
+é<œŠ‘yØphÔ5xÑ{ªî.`éAD0NØK¸qƒjW#Ô~Ã#)kÊ9©¨ª
+=ëùó÷@ O¬’Â+k†[_3žåÒ'&—ˆþQ.#&ŠyúŒ]‘+ã%RSd†jù["9ó¡AuæÑúç^­®$!ƒM%Š³7{îÁ-\j6mÏXÂÛÚÇû0Â<µq½D‡£ÿæí…`BÁl§#·q­iB‘—=òC+€."ð¯ã†¶-âà‘fˆ&¹Û¼õZ+Dçê¥tYœàÇžïXÐŒµ‚!|Ï(Eß½»6•Vð¬f»à¾tVÉou¤¥­¦í;N¯Ð¶´E-wØ«Ûñ°2-:8Ù­†ph©iþr	¦ºfáZŒ‚
+˜VòЩa§ö»¦à’®4o¾xé~ÿ4jÅÅ?‹Ka)µ?‹œrFx­µCò9w‹íÃWÃafGŸûƒWõÂUéj½@¯É…7©)b_*¨Åč†wØj}v/—Ë{£SÎý׶Þ`móI:žírh5šË++’OØ”f
+^œð†~+A­mî‘T7pML¯ÜG¥¸@Í1nmý8rÈ@u5‚ÉêÝw|kEÂSéÓ¸²ß–6ñ{žÞò¶ñ©Ç|­„UûŠ¿§N- Œ>‰So¨‹ÐlzèþaâÛj@ãË:l†i|÷ýŠ~†5ý„£ÿB¤ômµY÷ø-¿jJî‘ëþ ´øH­zË…ÖC±Z¾è×\e
+T¡öçòhcÛ]‹–S¹í1§þX:ÖlJ›Dê
+çmÆ´ñ°o/§;GŒy;p;bkBBèÀŸF—”ú`¹~¢åj£G*7ËLhSñÅCmÁÊ#>ÏuN#ýµCò BíÏä­é<æ ¸yØó[añôÆõ¬ØAô&¬lO¾bÀÅZ×V³’ÛÆ´M¦'À#уÉØ3 UŽ¢W¨wqÍ?Û}¢³³­B¦æž|{Z~op'{è5-•Ç[j¨/sÊÛ¤KÈ>¶-†ž@rýñmÍþýAëÉLñ™ÚDd?PBùØn/d•Ê7ç˜kz™P~vŽµ§ÞÃŽÏfÏàV/ÅCÑB,õeòù‚;Í«ÍyO›ßW„êJϓÊ‹ÈHj Šz:c7ãã<œ§ òÉýº<ÏçO8“±â€	íà¤íc½žÿÝBPs	ꆲ²?©?÷³—…Eíßq6èRb\¾ƒBÀ›¶•ÇžÎ˜å†Îòvƒ6ÏŸù׎:ñ’µq[ ÿG‡½Ãÿ—ÇQòB€ì-ŸÜ°jÕ#á_+sÛV,º¸èâÃ×”8m?„’Ïa!ª~yá•ó
+Œ~\À¦‘j[üÉ-ˆÇ>P–þA
+üÈ„j|ñ.X‹²]žHÛÏÂÇ›æ5¿â¨ðbaÕÅ»åMÞ?ðƒ5)Ôe¡©DØF›¾(<7ƈX–yXñ&¹Éã2Æk>˜-¼r‰KÊÞðÉè<’è–ÙáSفµÃqó ÿŠñ±ÄñáÙ¦Gÿ]šœN¶Ë¡âDŒpÏ/1ہˆ5v™Ù­x´TèZåvø¼b°Î„¼$Ÿ®®â§¹Ð¯@ª®‰»Bp_á44x‰ã»lãMé²ÍǯméÎÛp“ˆè0Ôò².ܤ¸ªKÛÞ^hfï[«û?çUÓSG’ïüŠ:ú`7U•õ)!$°ÖK#-šÓH£4ðF¬ñò±¿~#t%YtkNpˆ®—•¹4SDPì´<õ4-£6-ñB‚µóú6͘ÒBu‰±qcïçò5½Û‰_9Îçþ½êR„ KTç@—ÞwÒv$Ò9¹õ~W¾Õƒz™€µ)Q˜SLà@Y¼öҏ?Õ-Ž@ðø]Äð¥Ø– Ú‹# `®=ïþB ]Ãì¿ÆKµÛ!Â0\jŒÀ¨ä	‰¾¡÷­Šƒ©•<‡Ý?ª”Øg–šEÇ•¯“æ»Íf§–‘9).»AÄ2KÕÏ	©®²csXœþˆø]r/nc9†Y+a'&ü¬ëëB at Nl7s¤êˆƒa™Ÿs¤¹UM±>û,Ný6ªá,'¥ VÅ•ƒdŠªVëN­<žM¹:i?Jh'ÊòT½èG=,pŒé°\/lÚNycílmSb´,¹s°žÉ²°`QíG´,×BõÅÍ”;EÂæØN|¬ƒK^°qГ¡ÃôJ¨1ªz„Wl\Ñ]ΑÞ[AÈ£cÎ’¹ÊWÓó)D»hîNí‚÷»
+ëÍ»ùr©',Øt¡"Þâ­Ü¢åh²fÚ9Æ\ËTÅõ³†§ëä<–gkÅåô¨϶Qž«?0´|ŠRs¤jvœ3“Ë¢]æ¤ý^ÜŒnÍsàŒ±ŠƒÕ‘ ›°ÆYqª*ÿ䐊í¯¶]=¾dóXüš2kƒu+Ø€ô2¤$ÅìIy¬
+Ò'¾ŽèpèE½èälu8)ÇÁ:9œj¡‰<VTÜ‹!HC¤¼Æ¨âñª„ÞnôЂ?äI^N%P at r(žÖl at x(‰¤ÃöB *PݲÕ!gÙޏê³H	Q”»ÔëM~ðUN²š‹8æù,¡zà %$gSO™Ì›ú¯Ê)vÕÙLœê‚¡x^gÑu$ž6y©
+º	"‰²¨@5ÁhíP£„N<8;?8û|rpø›9::ü|òéÔds|üáôäàÃùÁáùy0 _¼Ãw8è{:Q;é0@Üütúɨ6£$È?Æ/¤z;8¼wæ¸Í¶á dxŽ9Ôt²–CË‚-sèGUþ±KmzÔ#üzuÍ‘W:0A:Úõ ðX™š÷›Ý¸ß½5›ý^Z…{àÓü›í…:8æ©øÅp“€ñ÷8îÌF-%_csꕹQ‹õ¼ÆÐtâþñ+Ž¾ÛéY‰3Q(‹á3GÞдA"1šB^|ÙÓN÷øMžbŠM·ô¤àÐÖ–/ƒ‡‚CÓ¨÷¾VP°ê¶hqbnºwqðQSÇð¤é£:yäÖØèšÉÃŽsÿ¨‡$„ƒj›fîÇU3)áö15'oTÞQGCËŽý`̹J‚¼¦œCKÿQøÈ1ÌP¿øV}H®^Þé‡1)¡¤Ee	T†RJ^¤^/¶éÅû¿423ÿ§{vÖ~ç&Ð Z}ÀO at 4pö‘µÞÒ1~BX	rNyv•ªå°_A}jsâ›÷º`gòӤ̱O0Ž¸G?äi-ã.ÛpL¦…꺝8‚GQñ¤Üºs`	Õ‹ªÕÁuXF"I¨î¬™l¦¹[Oà)J([LÇ:<â$œ¶ˆêÐ8x[EÅ£.tä—8 ͱë až)¼Ø4 IBÕøÍK,TôEµ*#|ÂÕÈ»”ðЦ”é%öOª”ùÂpvܦŒž98ïÒŠgöxæçEkÝîÌÝ$\rI¢Â¬ê6'ñrãUö`b Ñ7UN	Š³%Û܍·¨œ˜dɺ[`ô)ú}#~ç(¡ûΉà‘BYs,vŒX$TOU‰°1ËW†®é»–ƒ¬‡Ö膛€Äª,@ âÊFôXxDkv+XBáœ!æ–Ì7Ô×Ôy‹Ø?š/ôØb•Pý†•1ÒÊFx
+Qo‘‹³÷↻én“–Ÿ>héuÄãHvjþd„‹ª;&†¼X[èåî®à¶—<^©÷u”!ºls°Ñ7Ù1¯©7r‡ä±;½
+zçÅÕnôcÇ6j¡ã•Ñý½L}XU.¨gSåêùÔÊS~5o=ˆÀÞèHd]¿¦V„O<®Mt(;IYs-Ï9·AÝŸ0.Qky׋
+!'Añ·X*Æ*^×%=+L´Øwƒ#Ow#= `$'±ŸC}/V/OÕ»€Xá|7º‡ø®N\íJ¿x³lYRÍÆc?Š%ûõ’uXP’èÂEwóÄýVÈÙÊ\Ð]ßqp•¦¯rÄŠM«T”‡s–*ªW€<_(Žä0#yp£c©T¤ <ìÞê
+FPF[Ö\,3i
+c(!ËYPNØEï:µ²{;Okª…„æêý
+Y"6g	5ª&PÑg/„±¼Ü Ž­™…à°%:·f‚Á§ýlqofŽÖÌB Ý~™OggzBÃf­@w  ãËÞªÐA ¼VÓGˆÈ?H}-ö~£ß-[lrÔ•/d¸Ž%1»ƒ^n®˜é:fžœ}>98üÍ~>ùtjª9>þpzrðáüàðÄÿéŒ3ç×ÏaÏqسZÌ«ÖDkY|~Äa‡#á1~âðü<<2åDHŸ‚ÿ+_MŒ³ßœnö›Ý¸ß™¿·û[õ–.Àµßé¡…÷Z'¡zjBŸmäqíFk‡½ÉI¯GM6 i’æНnl6`mˆ¢`u•ó°•Rch¡×zâáˆ-ÒüG9„0’Dj,ö¾`’лýVm˜¥hEÛý“Ñ£!¯z^*ç_<¨P¬µ¾dQʸُf«›2⬓_t¶[våÊÛôO‡bUˆ‚DNGâvU ßöÜ;LòÚüü£^+ÅïHÓæq·ë5ɏ‰ËO:=
+SQÌŠ‚ßÃó“([å•:^šîUÚS­CŽE’Y7Fl®ˆ7þ]U
+¶»‹¨µhèȧ³ÿP?±˜ð÷²¤Ÿ6þÔÏWås~Þ›÷_žtÑôy€\¹ý¯ÓQ‡cuÀrXZøýÅ_ãåÞü}{¿Ó÷.””Š?‚ñcg£*Xþœ¸ÂvgnxvuQ€ŒX—ÚOtQÀ¢âŠ¶šý­JWfcŠ-º³©@¤‹„v•<P@öo ~ΨÝ|ùE*7#ÕO:ØŸtJv4>~úÇW^´i¨ÏyÖu¸êµc'–ù‰«Ïÿg¼?A§øá9.êz†·÷9¦Ðè›&-çgÀ§ž@f¸ý¸tÑ#t9Ðü·; 2´¥~Ÿ´œk\œ\÷crAÔWGwvà«£›y¨æàir7ûýÃöâq¯O—«nÀb’Úï¯
+øÖ|¶i¤ÓÐ~ôIÏ
+ôc×m°››Ñüñæ^ͽ<d5æÜ~¡úY­ªkBá@_EÍ“&<Ñúã9¨Ãp?¤\ÅO½lÏñJp€YɃu,tv+ZÁ “„ênÉÜɪ.D]ÅŽf÷u¼Ü^oG}OEjN¼¤µ7Ü~éu¯F¨DœÜêa8XN’Àº}[N/¸Þuú$¡—:´À¢ ¸†ñãð„ÿs^-;n\Wp¯¯¸Û R뾆a ÖX‘ŒÌÄÙxÓâôHDfHÝÅŸºM
+§ï™j“ˆ6¤âá¹çQUGBéÚx:ÄD¡éy¬£vQ„~ÿË¿ùÿÏ”Ie銹à²;³P6ÔƉM׳ķØ?!Áyí–ØJcܾ`ClY¨‘D½'
+†¸ßMê~ËÓÎOj³Äÿ›C¡úYBWv£Þ‰	ÒЂ{N¤:`2|à-¿MõVFµãpWÐÛ¢'õ…ƒƒÇ0ñB^8-x:$yE*p—DZ0Ï!…Îk	UýŠ#ƒy«÷NÞðÀÅ㬴¢Ê‡Ã0ò3Ìbcƒ´ßqæ´¨rÎFî{Ûéä9
+™9K,ŠÃé2º¢£è7¿þªÊI¤Ák¢×VBù¡ˆ‹Î¿¡iKÝ£¯ÞŠ²Ý
+·	'[‹ù4rö7ÓêY«–¶ÎŸ²£­ûöCV¥úC¹Zò=vöØšÓÿ•inö3ê]?Ê~§n>ªø¸ýô¸Õ¦þëJf‘ÞÍ¥h§£<Å8ÿ.~ï@m:ϝ–XÕs¨©¦:¿%–7l¼Ð¥t÷HÇ˸"®ëö¥C`°VÛ²k»¡fðÎ4éŽ7&GXTÝÄþúyåÜu]Èmuù%ªÓ7•EÏW©Z·%à\j«µ%à|g¡¢Vëî? ª«äøÆba]5H•LSðMö÷œK&?4E¸åÛW¢nÇà¸Ç5Œ§‹Õ6ïΠÜY7¯Øî&ÚÃêz‹
+
+öðå0Líêù„¸„¶'—_éq»aü¸55è”n†¯W++àÑ­âl<»Þé®$ÛÎÔ<|3
+ØS‰PqR¢ÊC°wöìøTêtÄC?PlÀfK³êWc]œf&ßS ×覞ãÀ>6]„"P(4ÃÕ@ë€3lÀ$ê\šÇEâÏ?[΀‹°¤Ò&ú„¬žZ§í‰ËÝ™#u$|“^s°ô¡”%”Š?8?ºšÎ3ŽS3¨ÎYàÈ•AçGÛ$©ÆÇÍgN¶Ø>ï½DWWÕ95—êü­p¾$ÿB]† Ç'uîŒz¦Àg‘†ªÄz.À¿ƒgoû	)M#þî×ÒÊLš·R>ÝJkýt}4Ýlöê
+hÄÛœ–è·hªµÙ-¡jÚ«›~UMcÕœœR¸ñpÑ7qu¬%—RXíЦÁq	ε >Š¾{fþòÌü‘Ó:dØT°ù8ì&u}uýzEpp‡zxÕeiúOø‚w€¶Yà¿ô÷Ã4Õo,óM'Ãh©P¥Œ‰ÓM·ê·ùíŒáv~¾º¨Wð1UjŽÍ·×X
+”ä<PI¯ü¼kšA7Ýê*èàaê·;%ú5¿ß¯Í>îG׏ƒ¥Ð
+Œò&Íd,ØGgÃFû%nKy® û²ÄÑUƒ©ÁÛÜ#ß^p14¿;m+Ïñ°±3¼¼À¿§n\„½3M…jø/Å0nΦèœî#¤É–y&¢œÍã9o`þt0M¼áõÚ½q!éÔ<ÝR æÏûv„Þp`ì`×ÒxÅí/|ºwMÄY'èVYWºyûÎL°õsžM™¨Û°MÇVª¸›¦DàJEÄÖ…ØD½£@t)„Ðä©F릵Og×ÒbbŽM¦ü”BŒm‹TuåD%Öœd”2¿ÃáñŸË Ô*ºj¼|¤cÞüY7´;ˆù:_ç}íðÙ½r¾€Î\?m)¡A
+Íoß|b«Ü×™˜Ëp{©4A§~úƒ&ë«5ŒÁŸí1¶TÕ.¬Úì)_z‹Ã2»|–[¼M«Ð´“‹ ÃxçÈ/xíC“&¿$<>räGÛƒMâÝü‚‚Üß<{÷ŸÕÊ»&èpÀÕÊ5½†-¼ä;Ÿ'˨Ûé3?Ž ÿ)ä6ƒê+úÝéš1§µÕ« ö3;ìÙ‘n©jc¿|†%ô=]ï*Ⱥ’ت®¹&×F;¥	œ'N[×B¯_síÖp[Þ‹þÆÕ±ŽÆû5¡O2uèGª%&8 µ(ÙpàÇê䲌ÍýFÂ’³hہCaÿgákÂrhµ²I¤ûÛÚQt•”%”ŸLp{ýÙózU “hZ¿bÏPØz)Š"ü‹B¡KV{åhg†’õ¢¤kÝÌ=å‚6X\+.ñ´=ë+6J,‡fl}C3r¿b;ƒhÙ ¸Š¶Ú*‘e ‹HûêªÛ¸ÜÝ`Æc}¸ÛSQ±ÌPd+PˆZCÎ+V*BùWz€l°;^`wŠ¬B¯CwET~:Sºeq¹ÿXg-¡<Y‹¨YB©Â9‡¨öEw9WKã	@‹1ºJ'Ñùª%ET‹·†-%ã.)Ô2ã/É5 j‘QùÚÀu8ã%$|):tk\½	^D=#ß»_‚L˜w·Tw-¡+œàq—%'3¦œàA'ì%MóJâü%æÁ⨅¤fjž½
+Å½Ùbé=P=i	ù‘'³™@ãbËWìs:Ë!Õ¦¹C…¨z«Eôï84áà<ªŽ:ùÓÍ«Ÿ~y÷êí¯êûïßþòîç+èªúᇯ޽úñæÕÛ››¤àI§‹Î2kÓ‡ðh$êé²6óý“.J‡*ÞKèý0ŽŠ[Wƒ°Ì$°üÂpÔvTÃÔßÒÎV—F)M	‰.„ËÇÛ]5Ä´Xn¿Jèr©®¹	»ÝQd±֘Η5ÕêÔB7ômåó34uX^Øcœ»àqÖåÆUô‘»¬C1¢ºÜ$ø€¢Ü€8÷"žuøº‡×¸iÖÔ_G9¼0£ÁÆÒB?\½=o*JöÀ0{Ô¢€Š6ÜU­¨ m"贐²Øë 	NÔp¦‘«F¨ÔEÆ_WîÈYŽ²ˆÍ©ÕaC–ypí̵^†E½ý›Íþº_g†hâÕ«tõ‹àPxêÜKè}D«“ˆú‘BƒéŒÎErmH•ƒì´èõÈ·ÛãlÑ%ò¥zïDÜË™æQ³©7¦Ø-ŽÅå$wŠS²õ;IäS?ýAªŒçh/à‚€MÊVR'­n¨ˆ EÔíq7æ½öUéæG­þLê@Â9>•q¤V¤”ΔzO.±Ô
+«ë$ô>×€drò¾ÅÞÒ÷Võô6,W6;c+¥.¡\Ù:Ê"¨Ã
+õš 5ZdÁÐ'¡(6ځÕ[èw`˜\U{	}Ï¡0(>‹Nxî\³„ªkžÂ<ýòa×Õ=wØ‘z½´mV7¶Í/l›.O¶­ŽõËYNõÐÅ<ûo¿ðwÚmøMœv¡…N+ö˜¤á 07vîßKh?©'}9u7 x¼ùŸ"¸“Rp5Ы~êg!ÜìwwûµùVcgcß\±a ÉJ;
+”{òE”û7l¶^²ª¦f	Y‚?µE¸x{¢6Ø8X_:ŸµèÈZ;l‚×	¸[Úßþù¡çïÂüëd|1î=œœ¢
+œãf#¥%ö×w„•…wh±÷ôâˆá¤:Jhñ׊©´Pªmð[Õ¼
+(%{S—RC¿ÙÞm¹#p°®%y1”Ó–Ž×¾2X2Á‚IP±oLò?ÆËe7Ž#¢{}E~ §œï`KÖÈÆ€ðÆð¢Ô,IpÔ
+vS„þ~"{Dº+e§74 `òÖ}Ä=WvN„aÑȘߥgFLBÌŽ>ýB(,î*Ö^“HÀ§€7…9ð\ŒAƒ±¥Õ±1Àô¡£"}¹ž5
+‚Âr¥„oð†ñE§.Fö^ln›ÇÞ‹PDgùÝíŽJ@ë]}ÑQÔ'öÜ!*¡	nŒ’³S<ßR øoÍ…sA­)øl>ƒc@›ß~ýwYŠ«0µ¼–êîÈuóº>ÞÞÝ™eÕЊe-—érXÙ¸2ëZúEK+–%˜f¾^„féÃÌ—Ó,K—ð£2§û­¤§Ùè°£”
+3¶¶$¬ø³3_Š5 £°-
+XÓ$š½x~UB߶±øÃÔl¤ŽCì-è"Æ´–n2Bá²éýèzò@ª¼ïßOJ@ú’‡ÞÆ•õx÷ÕÜj Á^,ž?L¶¢‡A–lËH¶²›pÌQewólúŠÃçÐZ/ÛwÂTKÑ·ºËƒíça nXŒüB Ü7[@í*Æ‚‡
+XjŽ:’„œD~|/«zþª¥üÝÝÙÆÊ€ý28ó…ýHm;Ì¡¥ijµRzmáZ°žmuCšá},•ß…E8ÅdÓ@G—¦øҁe_Fo§â\ÑèÓTUlƒ†ê;¡ÏšÍ¿þ}e~Ï{¥±o:ØðH4¨wÜ@¸Z_Â1¿É䥾>keË>ÍWR€õ› ñ ÜœŸ¢ZŽ‡ewºý²Ü}ÎÏütýê§_^¿úîWóý÷ßýòúç70UóÃ?¾yýêÇëN*ùí3Ñb­÷¿ùíâ¯õK¨ŸvßþVÈäÿŸÙg³%å5î®ûýþd>Þï[1ùULOôÔ9(mg ›y™ì<ýSº2’ë}ké^¶hÃwýp¼”~ÒìÑŠ§µöÞÌrüÑöSâ}/ýÞA‚‡ËZ+ףåëmw K©F‰€W#Ke¿»Ø/Œ”F^x5³ô¨¹Û1‡J9ØÁåÎCé˜éiIvrg½”jr;,Ò«šé°Ùw¨»”.杦Ÿ>øÙ­Åo6é'GÊÙ[-Ez+7™d| ¢e©‘.åaš(²è³Ïy×F¦ÇG‹ÕY)·²|ìžUi(?êh±ësó4•z×wVÊ­P'®´¶MîErÍ£ÔÀ­µìš©€ÌÑRÆ4Ùu¼·ž²°“Rì £	 xïxnÌ'Í€v›l²€¶­•}ÔHË
+°»PÙîdƒá£,•M rp¸_v2»!‚äR¤BÀmd‚C†é…0rÆTºàü1à.tœ3²Rúß_+嘅ҰøÙ?6É
+™^•Sp
+”([%±Ç¦RX:ßkêÃ’'±vüˆnÌ!Ž¤+:,x=+½9z„xÐ¥7Ç`§xÎ¥7#¯“³•>,NR»K-гÆ\KqŠð°8â5¸MQ4–.xsžrª :a ÊšrIn ÜšT²·rEuŽÎÕ±ƒl€tÁ>åBìõâIøû¨ÌBr½w=õ^<	g©m¹XB‚5Ù’G@,…ž1–ÊAKh1ÀJI;
+ã;ß¹ç%²¸“0Œ“Ã%ߘYŠf·ÕNw—êÇù«ÆV;åÒÏÖK±æ5x~r%¬¥æýâZÇŸ§‘éŠÝ–V¯jÇnÈÙRrE:àŽ?·–ËÍ`–„Û§ïßK½íځÉsfÏGcæ2kdBáÜ™r/ÅR$­‘r‘eó.NåÜŽ«LhnD‰qÑÒ»ÒÊqœMål«žÔ4ŠW=K5[áÞIµSã߀{'eOûQƒkX(ï4èglß–(Ú·Qfšp>p+ü¦±u@!(^-mSu,ՍÐÐ3®¹¾õ
+ÔØhÐ4+`¥ÃFH+y<àGʁ*f5Üa§Û©fš—|êÛŒ>LîÓ€õ_K7Ü1àÜÉ‘[|C¦h=[“–"ÚÌ}«,ä¾÷li°Pði…‡×hÀŵp¢®µÒž®èXúŸe§K­Þl&3—fƒm7•¹n–ãNšÄÆr÷ˆ¡bÜh"
+Ø—¥†‘gcœ<g`*cÄ«¥šÚ°}JªÔ‘43¥Š.kì^.ÀXÎÜÆí ¾ä	•˜ŸNƒ1r֏V°~~±û4‰ÅÖ@ƒ¹
+xS²0Ýš)Mb¯úL-¦I«”ØàGÎÅM®õX©ï4ä„|+ÊCðï«ãzgúÿõy4
+‘›ÿê´,X,Ù¥µRV7(Ö;)åÕ¾\ÃZ('¾D²+k¥Æ·Öé-üqôMô‘ÂüøIƒN(MúPu¨qrÞ•¶à<¾?±Ôlpqšë¨y©Õè€æ‰¥¬‹³+pš c?ceÖìæãr4»ûE2&¹•’úx{µ¹‘PPcðq£PfóEãžÃÊÜäË£Î49_¸$2b"ˆ¶¶‘ð!MpöµR›_'NËyÖR<}Øã|Ôêpßq[<hì-]Ë=¼pÅ·uY¿«á‹,½ß`(ly\	#‰¸ib‰”ˆ`œƒ=u”\Å°qY…~Žb˜ÖêƒlöÐç®5ªò½¦ ¢snÀ¦ú¡OµØiióqÆtvŽŠV)
+³\±!#„lÙþfMõ¥ßaœ0ü?Û<²)š,dŠv§²“¤MìÖúÙÖo H‹eÿy’¤%¼%33æg
+1¾Ó¯cµ&.tN.#K+lÂ0¸µÎ,ûä{
+ÉÔ—óX¼ Đ=,Ç­"L’fb1fq>¶šÚ€™$}ˉŸÖfr†´Àí¾
+i‰¥›–\Í#¾“|™j¬ž}§kÿq¦´üDiÁmPšk †øÔÒ¹ÏðÕòZz<ÍRÜÒÔ˜|%Þ-Wæ¤Á™…Õµ~ƒÀ6µ¯ó•Vž<®g¦4ú¼Ïlƒ+;o­E?äÞÅKÎÅ"‹éºËá?zz¯ã@[{âZ¬Á%±Ë5K¸‘r¬#Iãžáhµ´÷D¤Xõg5˜wd©?×­Ó³T®„Þñ5³ÔÌŸo4‚aA'G%FKš(ódæ»;#ƒ÷Åõó-MSiŽ#º=Íüç@>ŸM¾ªôH~—=îõª±€VgÓZý~Q\b©¬BpxµÙ<ЇÁÕ~P¸€÷
+^숒
+·ø»7o£ùp{· |zD#|9TŽh>ÝîŸ3Õ·Ì¢Z"³-ÀÅù|œŒ¹ÖkÛ30é1Ö)óˆëu˜\ºÌWLXq¾Q¹–û{ý2¬£¿Ör¹ŠðQSL)XG„u4—(i·§OzsYÊ7öÑãaٝοq®Níu:—,‡­„?lë_5€°d+¥lóòÂ\)eüµ£+å_8ÚŠºRÊæÀqâ| /ZŒöTk§°ßë
+€ÔeΕù¨_7¶$ýût9‰,ÕnÝo“Ò×Å¥TºµU ûÓE×ï.’šÇÅô·åÜï?ΚޚxÚs×öG9S}Å•’8ÃzoùÉ7–꺁lÊe w<úØU¹y´¶ô–¤gåEç]‚42;˜ A¢ÜJìë6V~õ‹–âUϯÊø`§ÿ1^.;AÝóý£v¿ÜBJ€Ñ°@Bšì“qˆ%H"âáïç¶!WÊ#¯`qÛ©®º]u*)l1#°À2gD
+ÜTL});aMçFåÆ$ËÁˆ%•®¾³ÚÒIƒEq„·(´:Fx=;»¾½<+îÄùyq{ys…{‰‹‹éÕåÙtvVÌf0ƒ˜-¾¸c%×s~ˆNóV–»=b²b£¥‰èX[m6ÏÍ<䕘W«ŒUCˆ«l~(½ÃCܪ•ÕV‡‘Ÿö£ÄzîZ:åÍ6¹þ7x£äs
+g¦èˆ¸Þ¢±®ÿløC@ÄÒ8hÃ'Ï`ÈD£I¦ß—U[¿Õ¯â½úõ¶=\1îÇKwx›,¹á"Sg7¨ó?oMý.Ö~Æ[ØKçMâø{" 
+xÍõ¼æŽ¼v0›f«‚.œRÞâð`Ô&b;0iK*e'­·DXÏ›êvÜ,gVãee=>Ô ^?a´EUW*“9¸ämœ‹$°-ŠÌ÷;üIÖ9ßï4ú] RÁ·|×…ûÚ;›}ÅøwdLá¤mØ`¢R~Ø £¥R>/Ö(r–Œƒeb^tŽ¥ü ¹[§	€ß K«R éf¥^Iã3ÇKùÎ›dÆÜœ“LäjxÚ‘ðÂ<•¾ðÒ$=É•øÉw.ì
+&í+EÛõÑ“¼þà7XV9ªã¥AçÒˆ
+XtSŽ«e“eu ãÐ`F°bë Vôf%¿ë‚ô¨»¥¸aŸ-ã<ô¢`mk³i‚&9cÒz즥ö'-.7ÅoèpìH@¢CÔô]ŠÏ9È‘ü|ac ºô›_ßÆì‚áJh;èµ±]èC2DrÛgö=ƒUeŒv„™\Ì—3¤æ¬4Yi#•²Í%ôC-*š§ëÒRG,’c\v îýˆ á2zš6]eâT*y)’p2òD—[‚î¿xßÚŽxÕµØÖóŽ/Ù1«“Œ.¯ǧBà…U÷Ë,)bÂYìfýó=ö™¼¶Í¢š·f›ZwÕS³údÞbÒ¶Õ|Yÿ÷ÅtݶëñPL§ë¿â> ØàïDpIje­ ý;‹ßx`ª›Â9N“›¸á	*¿#˜r¦NÅPÇ„ûb£‡º ËŒÙû.oš¼šxªüJÔ? æÚC^
+endstream
+endobj
+64 0 obj
+11852 
+endobj
+65 0 obj
+<< 
+/Type /Page 
+/Parent 3948 0 R 
+/Resources << /ColorSpace << /CS2 3961 0 R /CS3 3962 0 R >> /ExtGState << /GS2 3980 0 R /GS3 3982 0 R >> 
+/Font << /TT6 3956 0 R /TT7 3963 0 R /TT8 75 0 R /TT9 3958 0 R /TT10 3960 0 R 
+/TT11 74 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents 66 0 R 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 19 
+>> 
+endobj
+66 0 obj
+<< /Filter /FlateDecode /Length 67 0 R >> 
+stream
+H‰ŒW[O[I|÷¯èÇ	š¾_¤(d’‡ìŽ&~Œ4:câ1¬
+Iæßoµa8ý‘:œUJ¹»¿[U}g¿«W¯Î>ž¸PF½~ýæâ|qvþÉ©Õ·ê°Ú-¬ÚªÅÙ›ëánûms~s}³ß~ÝÜí·+µß.Î~î‹7ËÅÙr™”UËËÅ©ÑƧ–+et¨9¨åweÝñL|dü˜¢«Z~]ü’´Ó^}Ây»«ƒúuùŸÅÛåâíG<e|}|ÝÃ%ùá’v‡Ç;ŽÇãïÇŽ¿á’TCû­ÝòiÛN~Ž)FûSÜ­6êpÇÀÖxÄbÞÓc­©:†,»+Š´@FzäA
+êñØ”Š¸ž½Î.‰Û7Š"ƒÑ)‘¨Ý
+>"ødsUŠLíÞ÷È‘}/n¿½¦ÈìµuU\Ο£.ÕŠ#WØ*/ßÈ,^›g5çù)¸9ÆÚy,¥è”eoüMÕ£8Y´†:Üß2¬kUœ9‹Úä ^yCÎhk%pOwìŠÝFèßdªèß5F‚*Z‡þ­^–{ǁQWkÅ#éD¸P´Ï÷þ‚“ÓÅÑ’ïE¢y}	y2O±Ú–äf»Í¡-ë3âš:²¢<UDt ÀÚf,ˬï7tz¼ÉºÈ¡ ]„ÒèRî+Å¡Û’Káÿ ¢<)×Ùfó7É»õ†ö› ãå Ñ´û˜u,r*¾P º#9	¤¤Ž` b)ÍVܧª³$5ì(qø’tŽÏ°ï)²&
+™ÍA»=@ú²÷¢’ï8í­ F
+´A£-£d7zpEŽ¨ðPQv2:ÁUŠÌúîŠBV×*Åô¯¢Ý	}ÔéÙ±´ê!%ÌZw{K9@¨b2"¦5)„ÅÙs<új0rÚ(k†
+MÈ+T¡i&ÏËJD¥ ÜíD|ÄPÓì#Ñl˜I	œ8Ò9ø7+D¿èEˆ|ØcÖM3áÁØÂâÚ)çYœŽy¸œ2žÎç§V_è«1¢ÙºÔ!¹é3øÈÍH>á†w*Ö‚š¼>!7ûW4©Î&ÕK‹p´œA„Ãað
+¦‡qqµ±ùÒ>.­çl·' VjɝaÐÅ×>”¹m®Ðu»§zyôqE$üDÑZÛ
+ŽwV4U`ã´I­?_.µ3ðÍpR}¶7?JI~­x%·ØhFð±hŠ“	‡„†m¶ã¸Øò“íl±›?²^›*Fó<©Ö>Šç±ÂEÕêçšÖa´œ¯ýÍÜK˜æNDýN9¦Ì™>‡k:U¾Mà‘€Ÿ€Üí`9ô%—ÙB Ëq=>ð›a­£“ü´hC4W”«è5Ð~IJ§Mq±ï[Ϊ¾­g9Í—ÌžúÒÑ:Zß«špn ñèE*ùk››ÐeSPlÉàÔc‹9®™"19[þùiùÅFŒŒ	}z>püè³q;‚«“ ‰ß(.›Öà‚x(7†2É¢w(Ùü·“RtsO»±YcÄLsMyA'°kOÊ]šrŸ¥ÛOIw¶ðQÓfB’S3®#ŽŽE.ðxVœ7ì4ºÚ¼°G\»ÅüŠ37kÞñÖ6vkfÄÒYÃ#Q¬fFG 7PÍ
+ØҼ舜´6I Ÿ°§=»|ÒÀ>ÔH7#¼ƒÈå„w «W›HdŠºæ$ß¹u@Ô9ˆ'ÞP¥°e4NÉ¥ÂìS^œJéE)o9tP°Q´Å„X8‹xŽv­‹gB-œ7:˜è曨
+/…	çN£h_‹è"JÚ.6µ@Å}·K5ó|Ù]‚ÉüvB(x»QŸ³+n;BÌÔã¹õ÷ÇmIÇ^s$Ú$Šú¹iIþ].Þ~<_œý®^½:ûxþáB9õúõ›‹óÅ›åâl¹Ì
+KÌå 6[§èÉŽîÑϽ‹êp·ßî®ÜïׇÆïã—¾+0òîþúúôn³ÿºÝ
+w›õ‰ºÙ+î`CÔÙµtgðvi‘M쁫/Ã7>9Á´cD«[~0œ~^@×ë†|ÈY|Ò”ÀrW
+×ù¢éò¶9\#.úü‹9½Öëö¤èp;¬6§ü˜?¬.6ÉwnLJº§âföÐæT¢øöîêó¯'jØ­yiÖ¯Xs-MHI/ûàØ߆ývøëºè4
+´êÀðp%¢'u~ÑâcÇs¦4ü'¥€Š}̶
+æF=L#Þf½1t<LåxâÓb@$µIÜ#Œz:k2|y#ä
+l¡«>¥ñJŽŠ0ÝYW~¶ÈœòLV±Ä!­Í£=¢ö\+l@JO;ᨦ¥‹`P”Omjë^¯å.'5;Ô¡¨g³ô}¨3¨ŒäÖ0}C]pSy[Ëxå-ÖUw4óÿ”[×ÖËØV“§®Ríšü7^®­ōÓD]W“õÌx'µ\Îc͈eDQÃåœG-ÝÃ&U?“^.‹Êb\×k\œS›©.i"ÚHµŽÇÝsÆÀw
+~àÎKi°¡ë\0Ý%­©7=:úøÁuÁÂÜu(:~†?8;^»Vtü¼KÔ.V~šGófk_¦ÊÛ8‚hGúÐæ ;Šf͇ÖÞn|>e[î¨¾Cð.ò¢c˜y>_ï;ß)=öÞ‚¹ëþ…N²/ ¶ÐJ»ÈÃÒìÎ蘇ø„âÆš¯9*·}pDñ÷Cjé’†~¤5@×ê»zÒÖ¶¢žã{n@®vaÒر6ä—ë|ѦºqŠþ|XEo»ùÜðz†˜±ñš1ÌÊ1‹_¬±ãŽ	ß•[|z¹T(&ö‰yTFÙýŒÒHFu¢oiv±cBôüËÉÅ’£ûææ­a(B
+ñåñ„Ëiú9Ù9»2:;?åìÐ3ñqyýï=
+	Ãã\=ôÛ„Íh›n1UœÊÙlÝ5w4	Úš­ó=rÂX³]Ü%¸§æb¥¹µ®Ã::M‘õèÛ,p7»	ÕæJDÃO„m÷ÙŠ7^r ´Å[7ï§æÚè~.ìÔ$R7<é
+b«ü=µ5H]Ô‘:‰.¥ 57ðyè¡"îžð7mKó|Fäí-í`‡…,]f+îZÝT‘öçHЁƢ‘æÏD•”Ä;©ê¹ u¸ãVÝE§sŽbÒx’C[ùŽ½¼l¢ì£]³o¶ÑÅ”„QGŒgòÁéAXí,Å@áÍÂü¤akáˆ7ò:BÓC	¢«':
+O̳ŒåÛò’ ƒO™Ñ¢ÿé…Gj·¡±|ûÍUFòÃûšgÇ:Ž­e6µ‹L9ÚÞ¸ÿ¾=lNÔ?ÖÐÉÖ‚Úoø¼øƒb¥6Q¿ã«Á
+!€?¸Fmƒ$îzŒiýús¦:liVäJÑY
+øˆF")‘(]I’ñ«à@1Í‹bp`]+‰âýÅ»¨wû-_fCŒ~pþÇxµí¶q,Áw~Å~@²š™î¹‚€èâÄBŒ˜ð;%Q6
+Y"´”}ü÷§†²­éQO–¸8Ûתêi¸[ßš¢Gä™Ý䋏
+4/Aށ)ôû‹³1=Oƒ¯˜®u«:PC,*üÔqaôå¶xÝm@ò›µ+ŁpäXãU‚°™œ9ÕÀ}nËÅÅåÙâèÝp||työö| áääôülqº\-—i°Ãòö¹æeíþ?¾°¯€OÅï#=Æ¯·ò˜’­Qg«i=ÐÃòÓzø²Ún1¥éO÷«/W›OOS'@Æç ÷-òÿÕ"!Kû/ÿyÿ½g:=ST$-×ïý­ÂPpÃ÷ÓMŠ)ƒñ‚Ó=J!ä”jœïMDt×ñ®E&Sªp7:7ZÂèR¶RUóbHS™LkýEŽ`[¢Žƒ‘ cêêæ>‚Xà:©ÀFøàë¤;V8d¸XÏ‚nëaF#lÖ\±c µø:ãû=B!„hvm±QLõõÃWÝ•àE+èc˜`CÝèÎʼn3jd9ܺƒ
+¥GTes­HGJˆ©ŽrÍÖÍ Ì-X¯‚ê–5 'jù¨;ÆrBÆ&Hýúp8"ŽÃ
+ì:NË‚MD1§Ž‚þËÏ?<©>”€hŽnQ¨¤hn_‰–!Õnõ=$ìaŠìç
+NØÃlå:èŸÆ&+BT燰†17©#.	‘Š~R!o'ŠýF½ôŠÙrE/«TÞ÷¼‘Ø.õËl!|ÙÖ!¾ïø'?Šv®Ø—lœnÆ
+æÄtPLp¶uÕ«‰±§‘æ©–½s0b
+UgÂÕ¸ÎwÐ"Ì*åÙ&s‚lXQUR±t¸)r=®ª¤rF„!ϲ<Ãò“%ü¨öÄ”ÚÏò—7 D	?mUòô`üçÛ_|ë³£ž5
+ +6¶÷D,"Ã_	¤ºÛ‰á+ˆ$²C,×hÆ	)°j-r=µH]A¼9»$¡ÔÃÃâNEÙš`ÕžÙ²¿ŽÓ±ÚҍÀM°O:¯rûªzXrJ º+!\—Œ€þ6|Ó½Ž/ògtǐ•æ6óÒ±d0ÓÎÙ¦a}WfÚpõg!°èQBU7S¬YveËDëÿ]ë~
+4þ*^ýaLmÍ»[53ñžšµÑ-•y Ì×ÞÐùª0‹W©…ú³ÛÔÆz«#q³dŽ‡4וëÁ{@s][šñêø0¨¥vqõ¼|9Øb3^ºýv[oZFTòpÐ#c¢=€<\DÇLh
+ö R‚KÀÚ¶¸Ûßt,̸¶×zÀ¡q¯ð5øëZ˜ìžÃÙ²¥¾¡»›ŽóÃåá%øJ÷±Å¹øC·XÞìÛW¿ê®¯æöÕõ¸Ÿ²‹åââòlqôn8>>º<{{>øáääôülqº\-—ÉòöYV¹Èê^UmOUñ)ü)ïÿyÿ]ÕJ¤w¡FªÓ^\«•¸¿UÊP,æL5H8òF»Ÿ„ ê¬µcHQ|XµHÖü{Œ³™X›¡ x£;H[˜ƒ‚¨£:S–<Γ$€ÓZ“1«–EæÃ.ø8f’/SAu@²>‰Gõ'qŸDƒt°Èàr«oTQ.Ÿä£zî8]‰s< ˆñ°ÖÍçFá(¾ÜÑ6SäD®žt†`vâÛpðyÁäÕúúAµ¯ðMcpF²Jf0ƒ£	2ÔiXéâ
+—E¢Ï²+ý”ªãfž)Ì–ÞÁf'C4_{Hij­=(Oäù"‘òA&®?YþP3ñ:}ov¸ó¤+î'§©Ú	ÜH9çùt„1YI^º†ƒ‰÷~½êÏ£þª‡r9©ÆžBaw§þñƐeæ÷7j×	÷sºWÉ‹ A¼·¨Uòª¸ –£•²¦ªC]˜Ì¼º0Ô%sóÆ:0Œ9¥yua[Ò–@µ”ìpy:	TMc68$QóÏëku2¹XïE#UÛÆŒ
+Y/Ô>2¼k€	ª‘ª%gýñ‘æ÷‡ƒAGóûÃEÖl’û£—=‚ßQ{Qv½œ© e‰>ë@_̵H¼Wö\ÖB2Ü0©²êMa~t«.¥·@Z#SzT¿ï1"Žeé'CkÒk·÷{q‘ö§„ötì$¡vá‡a]ívµÄPy8§$áj5àml‘º#€2d¢&†õ4v<Î2Kôðþ4nÉP0üiýøm3­6»a3
+Um¹~(ØC(&i/Õ"Ê8;r“ëãöq½[ßèF¾
+¾¡IwÕµ
+Ø~‹ø_“à~|€2
+ÅËøÔþ^¥lVH”%R%m0››$Þ0r¸ï\“~ôüjzV»MGßQ$Ó<?Üê`l”
+m·‡®ó¡5¯z×/ۀ˖lS¾´”ÏÚvì·zÔ°d6”ÛBä¨ÎaÈàÇ›˜7ºDAÍ)De`^C‹ †v6ÎßèºJPÁ@íäêPÄàZè<<{×”M§y†õŠÔ¤¢f–‹åââòlqôn8>>º<{{>„áääôülqº\-—qÀn{þ¤Ÿ[ƒg;
+^Šü«&Z<	ÂÌE˜kèõä͸$Mn Ãruu§sb3ˆQÂur(E&Û¼¬Î‘-Ö5“„êg"z툛xu²,½Îá Wá‡yïïkè´Öß…#öÑ5ïªRi}x¾,E	&uÿÁcÚÛ÷üð¤÷!‚¹yùF×±T<@±55öj=è'¦‰hE[
+µj΢Ô›‡·ÛŽ¾î›ütsçh?•Í¬ëŽÖåÔVB-„c.ׄD~¸éœºP’Ì®´•Úf·7ŽÔLDo÷co÷Ëïԍg,©ssûŽ¥¨€ÿ±íQ ‡·êÀ5ŽÞ]}\wö´‡ðƒ ÷v’qµÔÀÎò—ç_„
+ê­€ÝÅEwbovÖ6Ðm‘Nok#þ$	uwﲈ´³±°yÐkìïkËùùBÁÊ‚ãdCû»JE&½(@gSKŸÀòuþ½åCÄ‹=[ ÿ5ð¯õ
+Å„r”]RÏOW“‹¤3Òè˹&‡~ê­rÒVùÀ;ˆ#4/˜ŸkýÆïVwëÝ®»b\ä”åï:K–ÆH¾ùÄn…µ˜ºcìFJe8êŸ<¨÷V™cvðq{w3¨.Ê¢’1ÀE	´ê°ïe–š :cíaãíåp6Œ‰ËÚ×Э~YhðÐâ$[¨ž”LòÚY¼0ÂÝ4ÐÎêAù|ÈMåÃR—'ŸÕ¡y4!ÇWóɃ^‡dÇ@ðn42e’mz¶ŸùI…Àm\Ëjš:çV(Ík’¼Þ¬:/y§Ãö€¢§Ñùf÷¾mvŸ†¿þ6ꀲ1Øj:¹ê\Fàpãšöi'ÚÉ•ƒÈÍõ OÏÚÿ_|¾jÀ"åñ9דA)æø^ÃYlkàD5p«­!“¾®Ñ–»aÏzÿ\}Æ¡¤ýÐá*H¾Hû˧áúq]::\}×~Ù9eþ°û´™†/«í—i¯¦Öô¹Üÿ¬*õ¸÷S>¶Tù5Ñh9r
+DHß<Üë>Ã-W¿Ð½‚ÃÓ{K÷ìÜX©ÄEº|ðeÙèàt­KDÝ™`tÂ6O*W؈€þÏxµì¶‘$Á»¿¢>Àh×#ë5Ìaüû0ÀbG˜Ó\h¹%s!“I{á¿ß¨–,u–£–<é `uUfdD¤Sex`Âõ¦ýêDkç=‚¤vý«ÍÉlÛãl¶´z-¼‡jUQ̆Cs„óųuÆ悪(\£oƒ>¤<‘„²$`\r¬úJ7Û»yðê€va­)Ý«ÿ»yš ú«`’¦Í×#x?ÒH½¢Äà:âÛŸ¨Þ?ÓBI3F—|W)1'ªÚ’`úÞ¥³
+$S*š<?:ð¶@G­ž7ž#¤6é-ª`Ô¼¢•	Ž¡îIIQTpïàÈm>;ÑåÉU¯*Ê}‹­¢¿,Õ´û(º°u¼j:PBÆ{YÆ
+• ˆ+匬,á3n6ïéJÚt[êIw\gÝä¥àgà;L?Ý‘²¤SI®±è”ON}úÀ‘Ì­qûý`¿ÅŠ—%ŸÿvÀÖD½æ–\ZÏ­ê!9kt¢\Þ#N,p½{L?}ú%±>Ñð%;[,êDn”F齪9÷?=®¨€œ‘"¼ç)Yý]©ç)YËd«jvä.c—W׳=ôø“ÒýË»ölUð§¼ÕCÁI[Õ89#:î6S¢`DgçêYa· ½[­ÜÛ199Õði™vÖÃ3X¦Ðlõ¬°ù‚:a£À±HµòŒ|OiÔÖœØÑ£ù%à¦H8KÐ¦ˆœ˜Ð¦;qpO»Ô f’ûoˆ¨{Ç:î¿!¡œÞ©·S…ŒYKºðô£œ63î—¡¶I×/šÌ[zÁŸRtw‰T‹b½hû?Ö=w–óâ[ÎVפ ðÿØ;Úq0î"PŸÊùkJ•ŠæÜŽJÃ’ærÕ"{ËOm
+õIÝõÛ R$¥œõÈÏüQæβ	EÂNêο=Ú¦u:uЦ#"KëC{‘:  Eë×Ó‘FÁÌ–¦£uÁÓQBäÊâ£FÒ×£œð8ÑÈÁ05YZø	£œµ8¤‡U|=šžT|[›)¬Ñ”Àýd¥{Õ8|ÙÖ‚5”ʽMoÛŠ´†ÎfOÍÖEпØîà‘ߺ®féÐÇ_xz	“D×ñÀp¡vïKö]4PÑð®%ðÜn:ÊTSS‚5”fG84Ø\{’q(N­¶ƒ¢̪ھ'q®»ë†—@RrOˆÙ\ï)Ý=VѸ„÷5ü‡bÈ‘z»“yX	¶¡È>Ê5!Öp×AÇf°] ºSÿ¬Oƒtãéå7¨2'á~U¬1vPó÷05¹˜/€ý-ƾ½´²È
+¸ÁEÀŠÍ¬tЯ÷”¸!4_ê‰ûr0ÀaÙ§z•d­ÄN6o6<?"ç¦T;4O\-éöŠsä¶Ð8$ýKFXà¨.†KFX°
+¥Ü3‡û>úÓ¾	ôi¢“tóí„@›²ï½ò/~]ô¸„/¹ƒ¸6½±bv×îfÏË€-
+a±{Ûg*¡b¸n?kèHŠÒ©ÓøÉ%·Éèn1H¡Ëš”º_Ò
+G+-=ôšNE:¶6§â™š-IBwum–Ìå¡+ M"¡G$§	¬kÜéD»ˆ•Äghû
+¹¥u®ØCcvk õ×Z°¯jkK,i
+¤Ms¶`­º"`áE9Ãh¸¯¢ì“´<töãÞç}Vg^óL_ǦÞë¤!³BÎüžª(ºüž	ÕôúíŸ8ßÆ> tâÊMì³ú:O¸¹`a˪šþ±ðvñÈç@—ר•«ªñ;¡6l“(ºÃ`öö#ÏzHe>F9KÆ–É°žj>yÀ@órqjyfˆ­%ÈCSÄÚã­æØf·ã§¢)¶$ÕèÓæ´Ä–0ÑDãÁSÛ3’Çëñú¤5-uz{õâퟯ_¼ú—ùõ×W¾þðCf~ûí÷7¯_ü~õâÕÕU6àÁÍ‹Æ·0b!Gí•k£{ØB¯>Ïæ–Òî.-¯À»ù°¹Í|ô)¯Áæþ@—KšÚi,_0C“;
+¼æG‚7Áa]!ïùE1ôPÇ´FÎ|ð0õ¶h$ÿxB$UT.¡-³‰UåkÖ‡haxëbhà
+œ}àÁÒ}—ž¤Á1”4!Áá:Éa[y´Ê«Ãw(–¹>ÌÔû\ÀÜ%ôNƒ
+Š)|Ô`n܍´.ˏEñ¸îïßpYkúãRßlïfsúLé›×qÝ#)Ô¹©
+æ¬;Ÿ‹ÝÁç؝»=}.½±Ñj
+¾áRŒB#Me½»ûnó=_PÖ(Û>Ø:íÒV
+ÝâAâA îÀ×P{¾@ÀrÄöÕ£å-êÿThλà Øy~"_¥P¼ê#Hƒ¯Äu'6IËæfûrŽF6¨‘-«‰Å	ëeùÎãG4£çÊrržÜÃßþß_®Q¡^ïwßæÃi»»Ñgóïýþdþ8ì¿Þ.&CKÉ#i•~0ª;ó…ºæZd¤³Qeª%Ö5n÷Ý\oŽ3¶‚v}.0e
+9Æõ¯š<L7ýEuÐà¤n~ü¼ÿJ½¤ &«ËÓÜçÈi³ºÏ7¾É§>q‡¶p ©|óßgì@¯à~î²F~›ÍÆÑûÇB<ð+>ñ‹5Ô£WE}ïïÝaϷ΀?¾í†ïÍß·d͈‘féŠ9hðqþÑí§ëº§ëv]öêGoOf{„æñB¤Tsñå¬`Œ±=)äLmK²Ã"kÏSDò"ªZ4uasÂÀøN„ÖÆâÏ“N
+b”xU)î9R±¿Ä ¦cs2Ût”¢_´j^}jžŒÔöý$ÎæÀ7%›q)¤Úœ³j e®Ã…Sl•{rµÀ\ãTY¹y2J“D(å
+{oš¶3c‹0Ïà»Oæã(À¸b–¯©ÅO1©²šý—-Ï-ÍyCV‡žæ¸¡Z9èjÝð^y_ñ¬’ÖX:a>d°F¹>t„ýϺV³Å=È\¤d}[ØÁd>Ü<~áq	ì«Î%Íö$Qu‡fR(^]Ây‚¶H«Weäß–¶Jià-¶UÊ«²Ð¸×:T¯ÞÍß‚Ì#A¢ô—Ãö®¨»H™š	…¬ž´=
+¸‰`:%Ô€¾¤@x…“ŽÄô®õ³ëüæt:lé|Š`[Q•–μD™bŽålû%fä׬^…͝ª)”hq¼YÓ(ïFˆZ¶ú¾f@ؤyL>{åfÑE£Î-fø)üÉ”­9ð¬ÓHJW˜e5k$—\ð
+5­úÚ¥©Í¿‚ßQÂ!úCwî(OË=ôãlŽ'îi¹fqA)èe17
+ÉÇÆ¥0!5ëën9dÉ®ÃÒ(ä2:ï\_…avG?ju]ŸÓû†¾e][cǍwíoæãuûÉ¢îᇺ[u!G¶ ·éºÒøR'ì
+]e﹯Ö4Õœºëñck…¯æî
+\<­€ù’.‹SkªÙp0¤.ÅÚÝv7ÈûÐI©+Ãf``8¸^PhFKMñ’"@g%¸îe»ãDÁ	.â{Š_qhmË[Wj
+ЏI¤‡bA‘¦ÒáÛ†nš¡(HìÆœêR¨°¼Ã%w‹!÷êÈý‰#ö-»áÐ0U×óÀp'smtÊ%µÅÊ3ùÐCùŠäQ{Ç¥e©ÒOï€ãÛNÓ縀b©-çY.Ð[„ízI# ¸!†îm;säKeÌÿÇyµí¶q$Ñw}E?®c4}ï´t‹×‹(lû˜É\($AÒÆúï÷Ԑ"§‹5'ð™fuuÕ¹¸cÚ›ˆBøØÈ%$¢•-MvT WI+—»˜(O¾F±*N¸3æõôEêhQȏÀD¤M~ÏgßÄ‘ËÄä>Vapº±ðK=¬«¼ä0b‹Ce šŽ.õqª‘EÕjÊŠº]Á¸ÎžÞÊxŸÐ>Sà·öQN˜ä`ëÁçK9áÁfOÜ«úÞ»K`¤ÌcÕýÓ‰ÌàOråmÈÕ>œÉÎ $’cÛ£O•µ)¾s÷_×í¬‘/C²ÞÙ…ý'íù?Ïš—ïˆýk{Žû¹ªkÝÍèäæöêäôNÞ^½¿F¯ÕùùåõÕÉåèät4JJ«Ñã¶îeHå¨ÛßÞŒ'tÏn~2Vfó.»ÿ×5üa"ÖÜ£>|þo;^¯À‡µ+p¥Æ˶¡Yüüý%8µžw1AýÕ,’¡ÊCQyÜTÞ®wÛ冶‹"="•6,xÁšÒCžÌÇ_Å׀ɬLMÒÚ‡‹{«;‡S§:[«Õ¢O§è‹È¬df‘+XùšàK"+§¹ÞÚ¦X‚›çÍ3ÌéåäÙÎU­iþúŸá×_šµZŠW'‹ëXËÝöéüòtV|:“A::³JÛU‹æu³ƒbEâaÐ-QJÙŽÍ@ÊN)V^Gv9%>=ÞU½úô*¢ÃAϱ§Þ;°sEúp:Uɦƒs+õYy‘X¼©ù|ÈfÅ“œ±F@”dñ׈5{ o24Òøð·”Ŷ5Vír=•k€.šdØz=©Ç¥(d^S„àÓ/>´7x=Ï:±u³£Q8hoMðÌN4ˆëčD`JÝú²/ÜÛÙv¦
+ÆÆòñ鵋UŠ’+	¦Ê†¢m=ß°¹L&º2Áùòµú2ÿ*Z0£}åYá>~"cÐÿ”-;{k¬6¢•v¢%«7žn£Þýdz³°MŒTÞ^l¹–¹
+™Mû¨ùMðƤmâÞÚ:Tºæ·)ÝjØ(ì9ƒ.ç‹åª¶Ó1ï5ã5/ƒTÍÎìÈe»Qe9å@ºŒawôfÎ&j7{°ùrú$GÑŒ-Š¼ä˜Ë¨9tdš‡×Ê:;v“NEdV!|Œâ"Tû¦ë½mÊ"
+€ 3Ù<§[y,%’éò\‰¹	å9G揔íLpJdlúP5nVíjÀ‘[ƒåëv©6¯cH˜¡…襪N¼’ÏO0½Ñ³âçb„Q€Âh†}µÖ ³%cX!2Õ‘ô…µã³Ln€†Ceö àÕñæëhb&çXdÆtÄÆîˆ2ˆiXB§kØó!÷-/w at cM@îrõ1sl"1ŒæËÓf`2†Ž
+½L¡V¸â`6ŠRÂؐ‹ß3«´ä]Ê mÁñCúþ¼^0o1S¢/ö)IÞx"çSùQg½ÇÍl6_+è"QùÑÌd,”8g[žØå39±†*hÏàJöd&`má²Xô2&’GF|,°òûÇ.t±ÎÉZd’ƒÔVñ½,ÌswZ<$́F¢€>NŸ[uÿ•ÈLÞ"„Èz'Úëbh>¢–òXbHÕlƬõf‚kÑ
+ at OmÎñ°;o~yøí÷Ûí)ý5Ø9^ð€$±–òß‚û7²S@†ò™=ú€8ÜTçÀ®*‹€óD–ì^ÏÚŽé“6ðã‡ÏæK1 ÏùØÛ·“J
+‘J&•Ý~jq?÷¤}eÓ†¼Ì9:ÜZ´ãi󬚵¼U&ëJ¦±ÿµØ^S“j¸²¨ñaì6d»;Šô©
+ÝöNú×µ,U CŤ~¸ü÷ÍÕèá·‹Û›rZ÷ô×UáÅþZSWÁÕå¥eCd‡QeOÑŠlfármsÙ êíÀh[o±¡ìÂ@t² U_‡²àn²¿®De¬Œwe-"¹;Ø!“Ëé‘m1LÒ%P샡úJä|o×ínø“È%ÚUÞÁÔm‚
+ÅyõñJ^;öÍ|¹lW‹ùl2=õ|ûNE.£}J´¢Vf?Ûe×Jæ|Dÿ#±;T!‚…)pÍK%›$¢‚:—˶²ö¥ô@ýYÑu¬ÖÊSÅØŠˆ\ù©•ºn†ÂÀ]ä×›a‚Çø²×°ACÐUN“–ö«^Ë CL³.O^¶D;ۏBØéš–‰"V9èò"Jkö¨.%/3‚SF -¢™¶.T¨¬DŠñÃz]ÕѼþž›â¼-_þY}ºþD#(S	üB`Mx÷Q5¢ýsØ–òü™x;g )°ÑZOe4õ¢ÄÎV°]2åb,«
+FH•×ñˆýrXñÔ‰r9@<öÖy]ÎêÄxºÀžP¼œG|‹õmã„ëÂü×âLïù
+3ã;8õ²éG#)äR	ûí$݇ªv6Y©©œk jÑóBdÒÔ”@<;ûDú“ÞCG¼wMƒÔ?éáݯ°‚óµV¶0$È5+õ¸·RU²
+BÃ,EÓƒR*é^3íÞ5ŠÇ%ÚÓ#zÕ¢ÁxC¡Mï>
+]";¼U‘G‰uÛÚùRŠÄäÃy}õÖfo!yoḜè¸tXàýÙ:dÁè"wÑc;í):°A—鈜©	¬ïô	ÏSs¨œŒ,ùÝÀjÅÉY0gl	•#Õ&…)•†]gÖX4™”MeRôG0nU™À¡ß†ÜÖüŸ±#ñys¡Køã2났JØФë|L	×ò†ÍãDÉçæŒõGM—bå$ýIÄâOš•+Æ4((\"§Cqo<&Ü0ç\ì-€mà½Ý;y³³ò ¾©‹™žÑ"’@@~ì]´C.Åï•pÙ¼hO	¦Àº—.xËN^)Ê'C¶ßeÒøþíx=GÜZeÃŽoŸ¿W]¯nF'7·W'§wêììôöêýµÂ£žŸ_^_\Ž8Sn[µ¨{šâH&]@.4ôKöþxiAmHàú`5úÒŠ“¡m¨àØ}	•¼Fô¢úP±“8sh;–-‰G.Š¼„FdJh|f·“¡Ņ̃ú$Î<åCЏ-±s9u&ÂF†]¬ÔÏš¢LÏìÚ§zÄq³ 2o]‰¿~ûîã‡ßïþŽu©q^æƒÒÌ&?{0Keù›l.rw!G,Šmì—¸‡Ù»/þ:ªé¶¶¸ÇJ”z›1˜úð¡eY®½4› É€3!ÏN:×Ç~–—ÎQÂ5=ý\[,/b*k⚁.–Ø(¼Wlš\Ä‹;)Ûð(K3Ö.hŽºFКƒmÐqr^‘,û¹L΋C[ÄFYFMU§Ì¸ê'k£XÕV ŸzxÑ;A¤5ï>zœ>·¥R\,×ÓÇf¼&Á}_´êô®yšÎHÝfêôb½nÆ_Ú‰úãôr¾^ÏÿRž^^Îÿ§þˆ4}ðcNEî§ð„ýÔêÏÁévWÈ°½RÉt¤«¬«79Êx*nSaFM	6Z„¬¸jYœ+÷˜R\ØrÛ¨ÿ0 e™ÆÈ
+endstream
+endobj
+67 0 obj
+10915 
+endobj
+68 0 obj
+<< 
+/Type /Page 
+/Parent 3949 0 R 
+/Resources << /ColorSpace << /CS0 3961 0 R /CS1 3962 0 R >> /ExtGState << /GS0 3980 0 R /GS1 3982 0 R >> 
+/Font << /TT0 3963 0 R /TT1 74 0 R /TT2 75 0 R /TT3 73 0 R /TT4 3958 0 R /TT5 3960 0 R >> 
+/ProcSet [ /PDF /Text ] >> 
+/Contents 70 0 R 
+/Annots [ 69 0 R ] 
+/MediaBox [ 0 0 612 792 ] 
+/CropBox [ 0 0 612 792 ] 
+/Rotate 0 
+/StructParents 20 
+>> 
+endobj
+69 0 obj
+<< 
+/Dest [ 57 0 R /XYZ 169 604 null ] 
+/Type /Annot 
+/Subtype /Link 
+/Rect [ 319 554 357 566 ] 
+/C [ 0 0 0 ] 
+/Border [ 0 0 0 ] 
+/H /O 
+>> 
+endobj
+70 0 obj
+<< /Filter /FlateDecode /Length 71 0 R >> 
+stream
+H‰¤W]oÛ¸}ϯࣽˆQߤq²ÉE›±»÷¡½(›ŽU8’WR’Í¿¿sfHù#v»w/‚È”HÉáœ3gÎΛ®\³N½ûpqrv1ñÕ¬U>ÿ©vVhUª“³;³*ºòÙ\Ô«º)M×”3Õ”'g¿Ó„‡öäÝôäl:õ•VÓʼnïù~¨¦3h/O‚DM_”¦[•V¨(òÂȧ'_4öl¨õ ÐÃd †:ŒRúùÏô_'—Ó“Klí“úõ׳7c²ñÛoïÆo
+¬:BÓO­ª}ßË|?V)½G‰,}òš£T‡ƒ«ºÁK1ÌÕp¤êš^ÇWÃlónÄxÖ¯ò:©§ƒ8¥e¦sœåæ±x0§d1tK#Ç jÙ)ÏÓì “#/Õä$;ùÓù{Zñr:½|3™º©þöT^1?ñâŒvä/:ºœû§á(tC=0ª]Öü¶šã©Èú½Qå^ªº1óSUTx™£«[¢ùÓ=ëÈK芶6Óüo·çíÜÇÔÜ‹ÓÈî”62ýnÝ™¸ÆGÝR„j¤=§‰¬c¬èè‘;=ŸZ3W]­fÔn†£p`ŠÎЉT±^7õzsi:íÝðB
+…,rGhJÌ[ãô.~µ2ݐbpÑÔøö8Ôþ@9ï\¯bv槂†Ñ¼úþ;÷̺öT½ð¨r¶<äzÆ‘ÕÂ>op$#cŠVmZØZÄ›¹]Ã5‚{§ÓÒŽ"¸5vDnê†ÁÀxÇ ¤AH:vnŠ!(ÍóH%INAAÀPŒ¥¿-ˆnð†=á÷ŠûFO/Á~ ˜¡e
+þ]•¦9åã/lG±;]Møe"ƒþ¨ÂwšÛPß|¸¼Ü|¼åÀ¤°ÛGTÞ‡F$pN³¨Ü"–•›¤;;ˆ#¹Â‚¥Q¥w„ðÿö–7€ÚÙ7ÛܶýÐÞUšfÛûF€†Bw¾ƒQ@žÄúW³†pC
+AžW¾ÏéQb(€°EAUµ%&U”Šf±–ˆ†B³jÇv—˜fÔœíeÐR˜^ñê?sŒ;¤â˜3`ï¹ç÷»Ÿ?p
+Çoæ…Ä öú=¦š· v@lm· HÃ@òˆ… ç­D±Ç}ê…j\tE÷º6Ü4ôf­ð(äúkBŽ–ŒóÔKlºú·D‡™šÕüû,¬BLÒ•üáaCQtŸóžÕº‚.¡%¾t]à-¾é92ŽL¼,HÂ>¢&ã	ñÛt¥ý4¿BÜÏUùˆäMY>3:ÙrL—¿1…=³d0þ…vÃ\nð\q´<r›Œ¦ƒ®åNnGDÈÄõ£ö3ù íꙿ4<•;d8¯¿	Xö\Ì¢¹eQÁ˜¹X“+ñßàµæj4ˆÜ
+Jfu㆘–haýÏñI¢7±(ò¹ƒƒß«]	Èj=u%)ÖÂØóÐHÁތϻ±Ð Øã¡KÞŒâTÈ„EyŒ!JÆñõVžØJ¹
+ª	­I‰‹ÎÀ¦±‡‡š<T¨íõzeÇÁ朦{êXÀG;îiÃ7QNZ1Ï3'™—dÀ‚]“6K7D±-&4å¡Ä’Ýàk„–ÂmïÅ3%…(ÔvΤ+ªyÑÌin¤ª§GM;w`Òø™¾%[|Ð}	ÂE1]1ᵈG†aþ‚¾â×^œ;Z¸u4ÒÜKâ¡-±´O½lŠ´.ˆâØí…ÈŸ&ä¥Wá€Ä)È	9ág †Ô¢‘1Ò3·¤¿á^Ó®Ù`ŃÊêÁÙ»Fï˜ H¶tã).AèÅyíB®åH¦[ 5ˆ&—4Ç6õ†ƒ¿ó¨¢°.\Ì2ÎðHª7è³fœï߀æ=$¸ÂE¿ý¨Ï¬ìZ*dü$Νo«Ý46¥½Áòý0¸)­éǃõó5µzÐÌŠ
+Ì@Š¡¹¯œ„—5’qkl^æÉ	۝ß<Hjn“ð0AC¶jþ|’ÃŽ*ç’øªÙ'¡ªø
+UÑ ñÚ©2 ‡<NÂ‰cµŸöuÉu<Ey0™Ž¿Ý„ÁûË}H# £MÐäV‡më™Gòpõ°~Ô½¡"M1Ú€©õÚplt.”«Ün§4ð}¾áVH­À
+roãÏ|ËŸ$µ³$Ø­BÆ`èÛ)¬½'ÇÜÐì[Ü?=*·ã£¹_÷I1È%ÿ,·´¨c‰ZXñ¶F"è&)®Y‰k“¨¯M"öŒ §R¼ðœæ•NÅñh)D¸J¡Ø«bõR¼¶–&\¡\¢/è”]ù,mÛx"ÂI†y¸·çÓ›?.¿ýr $œS‰ß‹·äPv‘
+ƪùTô('š,SDBžN´-`ø‰
+˜	3!Ós’J¢(‹‚»^qäµ­äwô$ìÊgi’ôQ,œ	Ê$#ˆ¦˜<AÝÞnðzK~w1zˆ» îã}q?#N„<3¢G£sK)¨0Y¶°ÃXpã(Ž	‘Ν–_Qð_\ŸßeoÓ£Ÿõ¬ÉÙ1öàg›Àˆå];&÷ÃIJ4Ú­ƒ°Þç#Š“/Î’¬—#ñ’þ5¢U”Rô5«ýAHbäÈ|ÊÐU©¿¥EÒ(ëÓõGRÍLEç]ý¸­C ±Å×^í÷Et\½Sª±øH7âc;ˆ"I€ÈBO˜„ØA½¨(^‚ã> ·Slé	‹3ÀÂåVXGBá*’Ó(×oÅŸÔz2<éµB	©¸h´Bv$s±—†$f‹}ì&Bª}Ý°W‘ÌÑq":"´:â±`4:Hj„»”8¥PÔÍCßÛ€·Z,T7RBpMUðK1ƒ 2ÒQ4ò
+³ˆËŠi6fšEiz[Hñr÷$ƒ¾³¾šuœþ§<ºlû*Œ‡ÍDœÇäÜVrš×"³˜lkùÖʉf8Åë½Òjɽ/¨„¨þ{–­v[Û¸L3ýê£ÐYšÖؘ°AF©œÕFA¿$•RBŸÐ	
+WfjÑ$0qO7‹²Ä ä+öÂKu¼ È~Aÿ(YùDAâ…‡Ñÿ…CÒÿN6'‡pßQºÒEvò|ÅUÁG±Ë¶‘-:Žû¢@Mj¹jÉÆtRìþ>,G‹Ù($w>÷#›²¸ÇËʨ•©8”%1¬í$YÅ0Qmì±¢EÇÛðj5¯RÍÝül¨ØŒ";+åªh‹ÐÄË#ÒÌ;è|qVoô!å÷r‹¬rãr.ºªÈ˜¶:§aTm‡“ã0¶ïKiç,¹hÀÛ_’W6-V"-X1¢Ú¬ët$˜ñ	žWEBÏkþrÙax—`—®ÿesH—qG»\0\§¿Ài¬×*ÑZM/ïv€+_NZÖo‚\ž'Çê­á)_î´WNsÉ%©Œ5n|i,¡E´å@ú=ýa`ç‡ä­ÿPG*ÌâMr=’¶µ¿c;Ú¼UΩ/2/$µ!‹p+
+T^±õLÝ™…iL5Á^Iÿ§ ÂÔ~¸û`Çf¼E{Yíu5ùT
+ðyC\ˆÔñàúâN}¥jíJ]ðeiIs‹’yà©)˜"ˆÇ¾wF8 a4f‘º.Á,\ìÄbç¿´WÉnÛ0ü] ¡$ŠÔâ[Ñ MŠ´9‚–Ø€^þ¿o†¦¬8dS èA)™Û¼™ÇyáD—OZahðse³Éß'ã<\¦©´Ôk·o‹µ3fÑ©Äc'•·²ÿt{d­‘ʉÒ²®ã§o×73†®ßQ;ñQ¨€ÝŒ¤i¬ŽÁži¥µ‡]+H>ªYH¾©3-Æ]ðî¤|AúŠ‚³ÅÏšB—Û[%Aôεe.W*:ùáÀXxìö£b N böÜ™¸å2;û ë­·PnB¦êM$ó	tmDx¤b’ý$HõÿI6hC€J~/v&ûÜ @¬¼›ˆHÜþ]â®Ó¸.%ƒ˜Ì8ÍLã Ño8¹i{•û˜çNàG~¶Îû3AË靦OY`¦ë)¿õOúŒ{¥¤
+›T½òï@-Á©ô‹á³êG‰$….1VÀ~ïÇ„ä ý1Å‹;Ðáֲݓþo¿»!ýà'½w¶ X<¨h¸êÀ	¹^¸¾£¼.£qFåúd9Ã1’tµˆuWßE at díß-sÖFŽ<$¿ÜEì7‹)SE`æJÇ	­
+ÝL`_%—p› Ú’½[ r„Ï°¡° Ò+VBBŒ³OÒXmNsÑÜth=ÈóCzOø3¬JG8Oc¤ª‘ÏXt‹…:5C at 6$‘®TfªæíTÑt	S R…äé2+]¤J¦ )J²YKMŒ ‚îk—ÜÉ¡˜“<LZþmZµÝݳçåUH-ó\^©Yýðïj9K¥ŒI…s´ô³»}zò±Æ‡.reçƒF:¹åyÒ[AÄHï'Ã
+»=ÖÚžYž®UQ7úƒ¸Õ!«¶y¹˜S¾3J Ãvp
+endstream
+endobj
+71 0 obj
+3411 
+endobj
+72 0 obj
+<< 
+/Type /Font 
+/Subtype /Type0 
+/BaseFont /EPELIJ+SymbolMT 
+/Encoding /Identity-H 
+/DescendantFonts [ 91 0 R ] 
+/ToUnicode 92 0 R 
+>> 
+endobj
+73 0 obj
+<< 
+/Type /Font 
+/Subtype /TrueType 
+/FirstChar 32 
+/LastChar 148 
+/Widths [ 250 0 0 0 0 0 0 0 333 333 0 0 250 333 250 0 500 500 500 500 500 500 
+500 500 500 500 0 0 570 0 570 0 0 722 0 722 722 667 611 778 778 
+389 0 0 667 944 722 778 611 0 722 556 667 0 722 0 0 0 0 0 0 0 0 
+500 0 500 556 444 556 444 333 500 556 278 333 0 278 833 556 500 
+556 0 444 389 333 556 500 722 500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 
+0 0 0 0 0 0 0 0 0 0 0 0 500 500 ] 
+/Encoding /WinAnsiEncoding 
+/BaseFont /EPEMDF+TimesNewRoman,Bold 
+/FontDescriptor 81 0 R 
+>> 
+endobj
+74 0 obj
+<< 
+/Type /Font 
+/Subtype /TrueType 
+/FirstChar 32 
+/LastChar 133 
+/Widths [ 600 0 0 0 0 0 0 0 600 600 600 0 600 600 600 600 600 600 600 600 600 
+600 600 0 600 0 0 0 600 0 600 0 0 600 600 600 600 600 600 600 600 
+600 600 0 600 600 600 600 600 0 600 600 600 600 600 0 600 600 0 
+0 0 0 0 600 0 600 600 600 600 600 600 600 600 600 0 0 600 600 600 
+600 600 0 600 600 600 600 0 600 0 600 0 0 0 0 0 0 0 0 0 0 0 600 
+] 
+/Encoding /WinAnsiEncoding 
+/BaseFont /EPENLO+CourierNew 
+/FontDescriptor 83 0 R 
+>> 
+endobj
+75 0 obj
+<< 
+/Type /Font 
+/Subtype /TrueType 
+/FirstChar 32 
+/LastChar 122 
+/Widths [ 278 0 0 0 0 0 0 0 0 0 0 0 0 333 278 0 0 556 556 556 556 556 556 556 
+0 0 333 0 0 0 0 0 0 722 0 722 722 0 611 778 722 0 0 0 0 0 722 778 
+667 0 722 667 611 0 667 0 0 0 0 0 0 0 0 0 0 556 611 556 611 556 
+333 611 611 278 278 0 278 889 611 611 611 0 389 556 333 611 556 
+778 0 556 500 ] 
+/Encoding /WinAnsiEncoding 
+/BaseFont /EPENNO+Arial,BoldItalic 
+/FontDescriptor 85 0 R 
+>> 
+endobj
+76 0 obj
+<< 
+/Type /Font 
+/Subtype /TrueType 
+/FirstChar 32 
+/LastChar 84 
+/Widths [ 250 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 333 0 0 0 0 
+0 0 0 0 0 0 667 0 0 0 0 0 0 0 0 722 722 0 0 0 0 611 ] 
+/Encoding /WinAnsiEncoding 
+/BaseFont /EPENPE+TimesNewRoman,BoldItalic 
+/FontDescriptor 87 0 R 
+>> 
+endobj
+77 0 obj
+<< 
+/Type /Font 
+/Subtype /TrueType 
+/FirstChar 32 
+/LastChar 125 
+/Widths [ 600 0 0 0 0 0 600 0 0 0 0 0 600 0 0 600 0 600 600 0 600 0 0 0 0 0 
+0 0 0 600 0 0 0 600 600 600 600 600 600 600 600 600 0 600 600 600 
+600 600 600 0 600 600 600 600 600 0 0 600 600 0 0 0 0 600 0 600 
+0 0 600 600 0 600 0 600 0 0 600 600 0 600 600 0 0 600 600 0 0 0 
+0 0 0 600 0 600 ] 
+/Encoding /WinAnsiEncoding 
+/BaseFont /EPEPAO+CourierNewPS-BoldMT 
+/FontDescriptor 89 0 R 
+>> 
+endobj
+78 0 obj
+<< 
+/Type /Font 
+/Subtype /Type1 
+/Encoding /WinAnsiEncoding 
+/BaseFont /Courier 
+>> 
+endobj
+79 0 obj
+<< 
+/Type /FontDescriptor 
+/Ascent 1005 
+/CapHeight 0 
+/Descent -219 
+/Flags 4 
+/FontBBox [ 0 -220 1113 1005 ] 
+/FontName /EPELIJ+SymbolMT 
+/ItalicAngle 0 
+/StemV 0 
+/FontFile2 80 0 R 
+>> 
+endobj
+80 0 obj
+<< /Filter /FlateDecode /Length 6571 /Length1 10232 >> 
+stream
+H‰ÜW	TSg~Y¤lMPÛ¡øE’øe³†ð90	­uLƒ<ÍFÞ¤¨¨Z-uÁ•ŠÚŠ
+ŒKq™ž©ƒGÇ…
+Å­¢ã62Nµ.ÕW@çPm9gΙ9sæ½óŸ÷îÿ÷Þïÿï½¹/AR‚°¨Á’/6O†3u"ó)v¸s|oD;Ûžcy€ÎE·CÙ;Ç\˜½}AýA	1AÝ&\Ÿõçú©8‚‡x$Ê'¼Å,'‚œò»&5« åÇÂì2ÛŒú!qCâd˜?‚0\ý,;“Å©úÕìÜ>×û ´؁ ,èaôÜôtçé¹P—à>×#¬t|é#O†³Ú%¸§.3©ú×½w…Éá èt./œË`3\£™vµMGEfü7”ø#q=wb at HĆ˜¡àKß(xÙÛgYíÂëͼ®åqç“kŸÅÉW»¼ßC]ÌF8B™BAyÃÉE7j%;ºnIYÓÐ&Mæ'¨ç®6¤äüT:}‡ËÊ`óƒ2q¡!r¬@ëÈ#) Â©›c¦t0êGø¯>€`V£D*BÃz‚û5	4”Þb'¬9@ƒ;ò	#Ô6%…Fô¢ÃUi “'`)˜v2+Êt­2QFC£Gƒ—} ƒ=£G£2i:…×(FK#"¥?‹ÿûpnxæÂr.ç^Ît:‘ÓpÏ4[$–8ýwqw×ð÷ùzNº iËk?¶ûÌC÷Gýt³â™Ç­ùÍ”?4÷°lWUã[st>äŒY_çúuÑ=­ÕM«dw‹
+¾:§SAº‘gO9ó£¾\±½!uÂÍ»±Aõ™kæ®7—6NH^5£aKÔÙ.ñé†èuLLêWR‚yÅø®_À{êfIgÑÙmu…]œ®•ñ¹ÁÛÂG\ùH€—?-d|<e­¡É·¦¤cßᾓ™kfº”G6}~AVÌ	ºì³K95³=-*î=”ú­ÛÒu>fÝ3žlUSù†+lûú°9ú¥oðs×n=šmHˆ_¹"(buPù¢§Yîï>8õæo3QL?ä+ßµw;“tóË›’Ê*Bî
+§ÿÿ%qt8Òk8àŸÓèÛ)ÿµ;ý·(öïçã‹zÓnwÌJá+N¡Îª_¤ôb……tJ×êï4Ô/©H®¸Øà;¸È+6Tp¥Í-ÏË>I:‡Å¬¸y†û^Uý¦YSn?é2*Óöó­è›¢jÅWîÛ†×zNœÎ‘¥·hÓZ÷‰Úø­KöO{¾·¤µ½²¡8Kð1Ÿ^½“‘¹ùÐ7’
+1Å[u[Îá×?ªµþç“Lï‹çtïa2X¿’Жék~÷ñÅé"{¸!8 LÜìw”b>Á~þöÔºÒ\™{øÏ/_ÝSycqÍoÛÉcã=ªv^X|ÁoYëºGH&÷;ÕgÉŸŸœ”tfLæƒÀæCÃbÅ!-ë®ýi\ò÷m–äüëèfï’–â¶Ø¹ÕOV†IÃýžÞ¹´óf†Üž$ÍE][àð®f1L¦Oav¥uÞÎÖ½Œ7­U
+xî@ÆL˜Ðú_9õ×G(•ö<ìEF(lî0z3Ðز©½éy3Ašp	òž”ƒŽ’F¡è‹”¤ÅˆHY´,z
+êb|ð'!MB{•â
+
+$ùP‘„Š£Í2v`IP6GáHEº†öasØ%ÀPÔx¶DDçµ$E›Hçr”t,×kG–Hätˆ%…YO’ ˆA*atØHH¡ŸG¦ÞLdé)ÂfùR>êAësÌT€úÒ‚»€7IOš`éQ6«Ôõê=
+75že±Y³¤¨?=Ãúõ›W@Ž6GÙ¾uþkÖáƒW«ÈÅðDà¼;ÓÅ` 
+§†mÍúû-¿CÏ-Eò4Þ[Xn‹dˆfKDÔÕ3¦¿Êº±7Û*»ðo4Bp€}üÃÇí–·O|±#]¡›½wÛ̐œ5×
+¾ç\ÿ¡½òQ=ÿ­-¿›o¿öØ65mŽÍ[­\äw¿8íñÍ«b¼ø!‚;_ƒ¥ÑæqŽ¿Ý¥®ª«J©<§ÒÅ»ŠîzÈ2÷˜”›b¥›;ÛVvfmÝ|(4­¥cù=ÖТû~1ÛoOŸÇ±î-”9ßîïEäŽûrÄ¡[ÍËrÈÞ½Qô-?göã……åuÙ¼íŸv;»J?8Ò1Áë¶NœÚº+&ëªàÓiÇXRíˆwƒ…¼ÙŹ„º8ç{¢óŽ€ÍD”O¿z³Ù,&§u–уí,Aç–øUþí¤¢Û´ú§1'¬±?ò]ÿ…Brq˜
+ð«
+¤™°ŒçìÁ¨¥¿üú¿ì±˜n%Œ6„ðØ\’çŽC]쨭êbÃé¡Õ¡%ÃMe'cFŽü…±ÑÅÚït±´&‚FÜAÙ„QOá€è):Ùp’®ž;p«½5	òH#I9#e.ä‘y†¸‘”M(úá…]º^Òz#E7DØš(Ü‚[)02	åAš$
+JPè$_O˜õ3Íäeký z*†÷ºÆÒ¬•b4q z;ðÜ<œ¤Èq/ãl„ö_Ž©DÈ¢#aõ°CÊóq8‘j˳RzÈ*“ÀD0„ z:*’—¡‘Cœ½ÐAä˜(ºIJ£££^1€ÜljAÂ"öd<KJµVŽ©x“äjµ\¥Å”ˆi)r,U™äªÄ}8KÅ`–ðh´
+S%Ç íx%ÈÐ(AZ|Å4=æ°$L!×*5Z5¦Ð¦LšŒ„	J…hÓh^¦RÁ?Nªx,MÒÕr…S(¡4ªTi!mÚ¦Ñd@@ž¡Ÿ¦†\x}$5}; Xjz
+ö3g¥.]­Ôüƒùj«1Íã¿çyÞ÷”ã’$t¡Â´ç¸ä.§‹Ré(¶ÓUt¡SM©L[¡‹[3‰d“¡f&bFɬbeY™Ö$†P¶Åãsλ¿“K¶Ýý|ö¯ýìûë­Þç}~Ïóû~—ç÷*$½¨wGí*½£b´{¾ÜÛÁß¡ôô–8¹.ôЪ;áÿv/;´ÑÁÇÝÎ[âåãí婐OêÙd‘«»»ÄÃs¡Ø^ÞC’»¼GÁÁÓC!_àƒÆ»Ú¹OB×…®¾ouÞ뉨¼%Žvóíœå
++‰B.kqjÏíŽrœå®@¦¢1÷£ÐeÑ¡}c1,\…e!$X¥
+«Ðð`Å›D°‹Å̌Ç$ ~OpÇ+#âB$ªJŒƒ¨èXI`ˆ$(_÷,¢TI”AAq1o204:&²'gÄñoŽœ‘ªµÀÕÎJ¼ß:uê“æïÆ#¢Ã¢­ÂÂC¥ëj+‰„[Pš*MõØäB6½”BpÀB¤‹U…籂3ýë#IÒÀ÷3©ÔWj8¬O=”b³BŒç¼4Wõ0Þ{¿¯)’ˆpe •$"s៻K蹤Ã>¨t&œ®T„Õúô=ÚNm§û¾DŸÖØ¥›Ç)“<Ž¨ù:É)iOñÚ“kD.†CBš–Y¾\`“¹¦êéÐ	­9Gú§Zç.sÉ?3ÄŠº¹Ó…,óHpžúÂÅÝ*æICó:µcô˜œ?o+¾³ãa§ çÏ<Š1ý±ˆE«Jšœàh³gcÖëôMÓ-¬:ËfL·=ùë/if²4nÖà‘]÷?8?þM38@¤û†Êó°wýa©Ñ{–ú1Ù‡‡=FïSYŸcG:ªW‘“
+áó¿SMnš_Ys¡ëùá¨ÆÇ¤^L ³—ÎÝ;"u( "!¢!$Š£ ¶dlêm4½
+¦ÈwMMO4ÅÆÄ…Ä&®ùMŸ–†K#°¤Ñ qeçîLå­“#æVŠ«‹Ll”Ø
+w
+
+iÈ>·áxÚ2ûœ¬¹çÜš·ñ«µFG.:Ì^ùÕEÞ‰½ÜÞêðs°E]B·çÊíÏÏxñnVàÖU_Þ=f…ÎOC3Çú=4O43Jˆ£ÜŒb·¹Æu‘ûÚZxŒÐù(È<jÉ„]ú*i÷71#SÊ>Wè>ëØ’ÖœY\?z­^{×ÍðÅS
+Üh­Ë¡ÏK36Ý·¹©ñ,¼ÒÙÚØ1áê©€oV\-0WZœKiVÞÍó½d1Ä5à.‰tU|±;Ààö³æµ
+I’ƒµe#ˆÏlêÈ»}Á/»=möùœƒš'“îM¹6Ñ¢$\Æ®®©×"Y9…C'´A¶¾æÿþû•Â)ý‚V‡‡£_;-NÏü£SFî¸GCúªŸtćqÚÿýƒÁ0}ÿ†—éi?=dRü֐ʦM™ºä_´+/wàÕ}âªuÛ…;õÜúÕúTyÒºHÿÈiöIñ?Þ»¶ºÛPß-ϯ¥)¥^ó´U=Kn¦³*D>t	|&¼:UPnYßQ(™r}é׏RUÅúåýŒS6Ÿ>yýÐúK÷$é­]“3üo_LÊwäÙ¦eùÛvcÿ3éû’uc<Óû¹üzÒºÐæ»CÍ[*TXÓøe ãÝaÞ¦l˜ ·ßÞw5~ÂC~˜iV
+mæz8ù›·÷›K	ã`9XÂ<8¡–L /8-\† XL?…q<ŽÃi¸	ŽŒI2H„"Øãaì…™œ±P
+îp_W†ÁX˜E¢A†{H¸‚®aΐ	1ø{Ž¿ 3ð
+1,ÃÝw@!ÔŸà'0­ ]ôBø0óƒ 	NÀMÞžß¡êá±"¥¤‹=ª…&áo¨e	2°¬°
+JpÞA¸@ÍØ~ÁXH~/œS´¾Q×ÃYÜë9‘_DËX¢æ•%T Ðf´ÅÑx@,À™-ðšôCI£ú	
+ÒèÃAFa%šˆöù`eZ°Q@1…û䲂\$è@šJëx/~uêgá9î1 F£µ‹`$ æ6Ø»P³÷úÊcPkbCl‰+ñ&9d9@^Ò‰ô:}Í1=6‰ù± –ÌÚY·.¯öÔäk.^BrIs1zÒq.„¥°Tð)$C*Z—’‹ìU T"Ÿu(ßÃ
+¸ƒÒ÷á¡„GŒb2EŠbCæ’yćü–„É'ÇH
+©%gIyJ§Rk:“zRoFWÓXšK+i­£wé/hå,&g*ö«`gØ9v…µrÀÍã”\8Çíà*¹¸ÇÜSNÃo†bÅ+ù½ê}7¿0^°…­B.Ê}äx$¢æˆÇ½„•?Q­†5(‰ÈÝFD´ö wZöŽA
+|‡QzýÛ —¡ñÝ€vxÝHŽŸ!M>&2äwqFY‚~Š'É$•d“乊T£œ&mˆRƒ}©]Nãi2ÝJói!=AOÓô„ÀDè‰Ì™¹±EÌŸ-g±lûœ}Áö°bVÃN³Žr³8/.†ÛÀårû¸£\#×̵ñRÞ†ÏB©ä«ùS|‡hˆÈD4U¤Õèˆtu;u5ð54BTCŸ‹dÁ¤
+¾$Œc©´‰.¦ýiIã.sôÀl|6žŠOЏÈ:,bAd	ò—FB‰?ìf¦l›M|Q0/
+.~å¿%ŸE¿Â×,¦&Ý´V at 6]¥.üÈ PRZ†“³Á’3†:“;AÆQKZ§s„Ô€­ŽˆÍd³tõð©”ÝA3ºz¤”¬óç6æ–7-ÚÐAÚt<Ñ:5;ŠsRÀ–”jô¡œ÷£Ä”–wõõ5V(#Ú ÖWÛQŒ8á­…¿C¾¦›»µô:ø`ÕêÉœ'˜{ÿ ¿zc›8Ïøóޝï.vþ8&8NLê3‡&þ䟗œc_H1x	N™èj;	Kж µ01FÅV¥t¦D®*ÑjÚ¤jC¢Óô:ÀäTtË·}ê'¦LZ¿€€vÆZMÀ¤ðž÷ℤCÓ>NÚÙ¿÷ù÷>ïóÜó¾wï{ßÃ7ÍxÄUáó”Ä÷È1}` ÿká¾Þžî®;¶wvlkßjÓZ[žo¶¨›ýŠï¹¦MÞÆO½{cÝW­³¦ºªÒa¯%Ñ&àéÚu(­Ð`š
+Aux8Äd5ƒŠÌEš*¨Z߇*i«›²¾§Ž=|¥§¾ÜS_íIœJ¡6ÅPúqLUŠäàh
+ùó1ÕTè=‹ßgñBЪPðûÑC1<S1…’´bСS9#Ãñ
+{TNÚCmP°;u GëÕcRßO,†«7zÈU˜mTcmPc,ÊŒÌM1¯ßo†Ú(‰Ž«Y
+ê ­Ñ¬.µÂP1J%+Œ2ÍnÎ)…¶ÅÜ[E'dÓZå„:‘9œ¢|Æd1j5Œ£õß¿ãy*âà®hêìZ«—Ïži…‰¹ÜY…¾?šZkõ³Ö4qôåCé܆~«O*›5S”ÌbH…Ý	»«åû›T
+¦IUh…:¨N厦qnsöŸôÏ76꥛Ðh(¹±”ê§^ÕÌÄ6ê ·ÿä•]iXo	µœµË…-T×”™ÊªµÌäªÍâ¬îŒ‹ï_­,a©/àŠ Ê¸‚™¤T¼§nÖLvCn¼»áeô¢8#Ó´"šÎ9{™žùS[À©*¹€+@½÷×õšLY#œ€±l¬®5´¯ðTÓhk+["Rçsì·ä¡¶E.¢s*H°|0‚µÍ˜½íX~¿ŸMð¹¢Yè™ÑÔ²¬@Ö;z»fR.Í,‹+–/2Ë™˪{ZÅ•|÷/€T®þkœî
+ÆT/%îÿ`ž\¶Ç“j|ô`J1rérmãcë¤e{÷ª­ÌÑ
+ÑïåÊçå-+.Ê띙ª¤B ÿ¢µ¨'Š’Œ«ÒÒeˆ:ÓÃË­i÷ûÿK§béæe‘§nå4i¯¶^î['¯K¯2ÇcÂB‹ÌåìkmÀŠ&;žôc{àɏ¶Ê¯Ze\{ýNøwUv}	x´C\†;¶« ÂŒŠ—a·ØÃüëЋ¶1Dmo£-€ý¿[¦os=¥ê÷ ¾@´!’‘E˜ˆ½ˆ F¹ø5âú†™?£üyH1Þö¨³€ÍH]Â]hnC³è…aᨨbüí¶JH °†:©‰ù”þ‚ò^1€}þ†9¼Aá:t£oŸmܘûn´uÛZ`P<ŒñnƒÇù•ø9Št-†:(}. ÿg{ó8‰â¾/ìæ÷àýÝ€÷sˆ"5оÑ!üïIƒç‘gùw!o"Æ>	ôÕоëÁ\Gø¿Ã!¤í8î!þOpƒü."]Âþ;„‡°|iÅ
+œ-ôÙ…µQ„Q$ېþñP> -Ò]ˆãø/­P~;aµÃ~º\Ó“èãDøßÀÑr¶°X2À§Â
+®G†Òy¼wE¼€s~BX›oJwɏ°V	 ƒtŽ×èBô•Ñk»JìÚ“(ï÷Ã8ƒäƒNôÝŠ±ÆØÚ@Û6ÌÓB9ÿ½åü-Šy¶c]#+þâhEwAr
+`÷ñ¼q¿s,J.¢Ïqôïç:ð;è4÷Ëe@”w•Þá]ÜKËTähQô%aSd#¸¸fü¹ Ì7>/[í×­vÀjÛY˵Ϸû|EnëüûŒ´Í7µ Ù¢;n5ú:š]¾p3“ëõ¾o·øn^nðÝB|ÐÜé{3Üé{ÑŽ82ë×|¹Å7Ó<ó™7fÎ
+]àvã,»je½HnÿöźŠºŠ®|‘ü^ï‘òIù+Rþ[R~BÊCÊIù]R~«”פ|@Êo‘êd—씫åJÙ.˲(2'ƒ\W,ÝÔ5öð׉NFDµ‚Å;9ֲߑ9üº£ø8OÒn-^”Jûi—§ÒÈ¡T9µ”{³H`,U$%¦šõ²]{)Íž÷–©i’8]‡xV¡“j‘ØñEeS	uÅ!>6è÷‰Ï€«¿¶g(öŒ&]nµ§—G[{ÅGN^9Î>¾È«W$ß;Ó&Q›·´y¦Í[ZO½O¦èå&“v2¦Ôd’+‘kú)vH«Æ$"Mϝ˜òÐ3YE)è×Ê„`:;>Åhf’^S'cTWcJ!rêæSÌQc8eŒ¥
+§ôÉØ|Dj&f.@‚d­sëÂýx%Ü´’쿏X$Y6d+‹˜˜{FÄ9fN°ˆs,⋘ÐVDc:9Hâ#©‚ƒ&n>½Â9ì8Ui¯ßt;õ[óÖç÷¼æýP r	¸Wâ¹®
+ÁL¡H(ÂL¸`˜©šùÊ&Ïk}~ï‡äRÙäDu­:Úqí+×+ì1cÀLJ‹Ü™y—¯S3Ù>ñ-¿þð1ÆIëÓŸ¥qÔÙ„qì¢mœç¹Æ
+I'Ð ·t{´„ó~xßãpÂù0¼Ïù8áÇa†ŽmþZm \ÛðHáé6ø'î8‹Ö.wƒûß}ð/ O®êÕ4V‰
+•UŸûÙ°ZâŽóSØw¯c©ÕÍÁ;vmïtsŸ,½ûÞÒÒ{ï.q‘eºd펝ÿg?óìg½¯`Ï*6k>8pB;èÈݳÕXfçÎÀ¥Ÿ}¹&ü@n’-õ/†¯÷1:¿÷·J¥'ýòg²EÇÊIè_ ­–G
+endstream
+endobj
+81 0 obj
+<< 
+/Type /FontDescriptor 
+/Ascent 891 
+/CapHeight 656 
+/Descent -216 
+/Flags 34 
+/FontBBox [ -558 -307 2000 1026 ] 
+/FontName /EPEMDF+TimesNewRoman,Bold 
+/ItalicAngle 0 
+/StemV 160 
+/XHeight 0 
+/FontFile2 82 0 R 
+>> 
+endobj
+82 0 obj
+<< /Filter /FlateDecode /Length 27146 /Length1 47040 >> 
+stream
+H‰\U	tg~Þïûÿ{#ˆF"¶W"$K[“ÈMÄ3ZQ‰$Ä’4–cKÐLÓ¡)¥3Ô2Æ™\%µC§
+±ãà¤&Š2sJgûϓ虶ó¿ç?ç[Þïýžw{>€ÆXä¿Žì6aHJ°?š«Ã3s3òÃ}º¤{vr2sö,GzAM5÷®^^ó'å~–”ۍc®™W&M›7ñzÞó#@ŸràÍS9ÙY•Ó{Œ ½•<Ó3‡~F³§€Ï眷Ïɝ5wì?½›q^…M{+3CºPl\ÂyDnÆÜ|ŸÃ²Žç©ïÈËÈÍžùæPVD<ïä¿5sqó+˯ÛÏŸ‘?µhd%ÐÑhê6‹¶æÐú¿•^–€u‹?±Z5žÁÖs*œž)V•ö£µö/ÿ¿,G{Ô G1_+y)0$- ¤7†ˆ/`Š7ÂàÄ$Ãñ4F)ºâ[IÄR	ÁlF;GsÄá=l‘Ö=,ÅE™ŒžþDbÑC%ɺ‰‘H¶öó />À‡âƒ¶Üñ§uƒfâÄeXHÅs­$ãWȳö#
+ç%UÆZ­0yX„
+؊è–•rÌ0­tôÀÌ»øI˜.°>A´y¥A™uÒ:_êo¥Õ*ÜH´¾C,j±rQ?t§äácìÃu	”:>ˆâ]ã°¥:Œ“°Š¾”Rª}¬íô¦2±U2WŽ©`óŠùØšfô/ŠH±_àîÓZ¢ŒÒ¹žk8^GoZŽ·ñgFî8å¤4‘`DË_È
+¹¥óô]Zþ#â)þ-a2Y©U`v«]j•!”ÆÒÆ ŒÆ4ì’P‰•±<»YÍQ‹Ôb½O_7ÂŒGV´u6DR· ŸÒ¯³¸ˆ¿3_‰2L.«Ezù¶µ€x#‘C/–cà‰˜Ò@É+âîÒ‹ž-crKµVN•¢'èRs5ÏZ‹`ÖÊ8dóä,Ã
+ìG%nã>JOFòdŒ$ËZyWNªJ=Z§éb#Ö(6JŒãƳ©yÜsÞSŨ×Ùé‚a”q˜ˆùŒu9宊––Ò†–úË`Z/e¡Éû²MvÊ>9-çäž<’ÿ¨@µF­W‡Ô_T¥:§[ëNÚ¥ÿ +Œ`ãªñÜžQÛÚsÔóÈjh…[Ý­"k³uÍzXŸ…V¬øijº¦’–£ïã#Æ|/Îàëîf½Tã1sð\l¬¦DÔNœÒA"èÝhI‘9R(ëd»œ’[R-/T#ÕŽÒIõTƒUš*PÔí­:NÏÕèú™1ÏìF)1ËÌǶj{ˆWÅ‹Mµ7<ðLö{6Y=X‹6Vž{.
+Xsƒ™å,L§ÌÀlÌaŒæ3â›Y9¥ø‡ð%*ûJ\#CÕá­“{ÌÄ÷¨…GóiŠå%ö.ÌL<«%]²™Û—²@
+d•l l’ßËVÆ÷¼\‹rSîÈúÕYÅ©ô(YUã(ãU¦ZªV«½”³ê²º¦n«gÚW7Õmu '镺P»õ^ý7}É5âŒ$cªqÚ8OÏ“ÌAæx3Ó\mn5·™ÇͯÌjÓ²­³}l+·Õؽí=íÉöQöUö?ÙÙ¯Û-¯¬§aDß?}ëd¬©ŠÄRåôûˆš¥¿Vë¥äg0‰ ãU¹>¬>ZX¤oë]ª 0\õÛýÉbøæEÃ߬Ái„ïȇëu†:¢6ª@é©û+Œ
+²Î<âܦn*»*¥Æ}fc<^—ø—ñ1þ•f!cš¨nH‰:¥³’¯`»:„Ø‚léEtY(Ã3¼'´Cö±îã ê'´Fdí cT³m}˜¡2Ò:­:Z÷Ùõ·d®ég¬ý7d¸Db'î0ë—$JÚ£%ΓùÚ`«öØÃüÊhÏz‚:
+©FsYûWËœ¥—ÉSÇtÔ3÷ˆ:6&o WÕñ¨JY	d‘úŽ¾3ÒŽQ¼h»Šñ.j„èj‰²ô—†¿C•Ê[C~j%Q´”‹ÉôÃaÝõl§…)ˆF´LT¸¸“„6V.‘ï$ÅZiÖFsŒŽ³2Tüq”ìÈ(›
+<©¹—}x
+I²{<Y8Æw%PB¤«é¡9Û,2?5÷šGÌ3¶®˜Ë®ÝÄ,ÞÆ÷|5’ÉX|‹XëØ=ìŸ8¢Hâ6MÑ‡/AÈ'†‘·0©ÌäLZ)ÀöÓ¾!gñX|%
+Gp…À>Ïäý^´3¯3ë3±“ì¸Löp%mЉqz&>­fñ¾:ž-&Ï#¦ë¸Kæ°êqEH_q1{™ø¡®—yCO$Ën¾ÉûЛ/¥KWà´çë:€=ºçÒY>hÞæQˆð·¢Õd}Xšó5ôaUâËÞ_¦EúQž´VB.K6wÄƍŠy­¿¾}zG÷êÕ½[×.‘¯vŽïÔ1¬ChH{g»`GÛ6­[µjÐÜÿ¿fM}›ø4nÔл—ÝfZ	"œ‰éwhºÛu&%u®›;3¸ñ³…t·ƒK‰¿Ôq;ÒëÕ¿ÔŒ¥æÄÿÓŒ}©û?MñuôC¿ÎŽ§Ã}Æåt”KêȎ׺œcî‡õãaõã¢úqcŽƒƒyÀ‘˜ãr¸%Ý‘àNœS˜î¢¹Ý
+½ãñÙޝ#°Û»!‡
+9r8ówKÀkR?P	}v+x5&(wÓ•ànátÕ!p됄Œ,wòÈ”WËàà1ÿe½Jc£º®ðy˼ӏMÌb›ð†Á6öŒ°Ä[(ƒÇ6^ؼ@f\ÚŽ(`Ñ@-h)
+uZæaš†¨	iAQÓÅ´áÙ‰ƒ(r„”´?PTFiÒà¨I*H€$URU©â×ïÜyo«Ðª–?Ÿ{Ϲ˹ç~÷œçâ)E:í&*Íô B±©EL·ØFßΧ¡£ú@hØèòQ{<èít¶mŽšJ[Œ÷Èbß*sæwß›u»‹Å3#ÑéÖŨžµ]ç®aÖÍӍÑT«ŸÿÆbXs弚¸Qƒ­ûĆf»É‡bQS:„-u>	Ÿ*q¾-jÖÄwèfZ 2°ÍØÇÕd&5íófg‡ÏYïPvµn´D~seN ÖV•;pMû^œÖg·‡|‰ÀLK·Þ©©-I›h‰áÜjhJFVbu „©wèð$À™JùÏ–R2:J1?1	³ÌNÜÈv3-7|å¬çù¦+ÏЍÏܼ1^Ófk´<ßgÄMæI’j°;m34‹Š˜"îî>~Yô—‡öÉÏvùt„6 ¶m±òE¿ßÏ|t(Líè˜=ÑD_§öœA
+/
+ÆL9ΖaÇ’µ‘-=Ž%9= “_"þ%Ëôä'Ó}3¦Wo+7¥ÿÁ¼%aoh44¶Fõj#nǶ¡e\/a/MÚì–9=Urd»%ç(Â
+RnNæNÔkªyøÕ©;‡Ü°Rh$½ÆôÅkcSüþ{œ4d}̳„¸=ÍvÓ,ŽïWŒësÏk(pXÍ—ZZ
+cÊ8[
+2aÔô#n´
+Y=íÝ0Îás¥ÀØUwntÈ:4Ǭé‹áÛ¤r°U¦Ê€ÔÛ8–z›[£ç|ø·«·%:(Kr$^˜[ôœNZ9©åžÎ=üã¦ÊaÊ9&êVU(D¿cH"¡ó8:‰:†ä„Î'tø)æ»wûǪéaýëÈX>œ‘h܏fheR.·dýtVÝM¦J´ X¤õS“\F}2Ë~š
+ý·ÔÇiÆW¢¿²vúzà0°ðKj`-k•¼pkò:B=êÞM›]¯“ϵ‰‚@Ú…ê»´P+£f ¨Ìcg ½¶|÷1*ĸ9èoÀ¸e,ÑÏW»iìõh/æ5qŽLÈi@&ô~ì…}†Œ¨¿ 'U²n¢µ7cnP9Fë ×C®‡¾úµè×`N‘Üo½ŽvÚAÄf
+ëÅÙ»© X‡9
+ð³Q¬×M+a›Ž}3 °g)ô¼t‰ž…üŠZH^qnŒçÞtûL«…O“€}dÿRÁ>ÉeÖ'ÀÛÀ»¶ouw€ýJQ‡²”* {€ ¯/_Æ™›H‚½Üõ9U0<d}s½ÌP;)ýëð³Ñõ-ç>0M€¿SO§OilAí)Zý2ùpl+-”N¥Z¥á|­[tî1:©÷aANUߧlØæù¸Ã³vœ|ôù~q>ë#øqcfæ–àW'ù°?Çœï>CÚ4nZ×aû*ðuœ«xöo‚Ã11ó±n…Íä˜{)XÀ>8à{ràe÷Ù( .'€]ÀVƒu‹0žyÒ…5«ÑŸÇü`n`-¾‡z›;àw¡àXâÍüq¬féÞ–©›Åï…9+ÞÞó‘¹Åœq$ó[ðþŒô
+Ÿ“ï<E渮R3û În¥È|æKe˜Š„,¢ÌYæ›#Å›LøŸÏo‘Ið>ù°Tƒ”Ço•¹˜”x§‹¤œI…Xs­ö|ÿ6=¬P½ÒE«ÔVªSLäŸ1ÞϺ©ŽÐòï)èœÁé™	’ïù„{DÚᦗË<õ2=PGäyêˆär±®»ÎÈpÚ©r"¤á„%#ÕößêÿÈW\gh+Ú¸FðvFè8ÎJî¥Å€îH聠ȔNxº¤!÷F¼'¢OGÔ0Þz˜JÔaä„,
+#NyÐoÔ~ÎuQÖþBÓkh¿ÜW¢Þ'ö’¯ _ ¼>äڍãÜ$\Òáë$2hsIHæ3òÚ›¶|Ë–· Càd×ÎÏ\8GµI¾:¼, dƒÃω<µù¹Îæ睼¼-—BFìÚ¹;“ß)örÛov3çGÎqœ#9ÏqŽsÆO”Éùýô4Îð†È×17ñ®çA û>; [E>ì´ö¸k¬=j±µG+³zµ!·Y{åýÖÎdMUé;—ùZ*êèJsꨫ‹ºíœÆuw™«µ)QGEýÔVÀm¢¾…ПÁïP¼Á£”)ïG\hŠZB[•‹¤(ëP7¡W‹‘“Ù¶›æ+·(W=‚\÷¤uCy‚VˆºYK[”8•ñ\eÒ]‘ßõgÔ²ýÖÇb=®W¬cÿµ­´Šsk§¨½;ì|â»÷häõ¨T Æ\Fn¥L>‹ˆA=Íq๏ñZîë4W-qÐbÎ?ÈËñà‹E¢6׋5GE>›&ÖÅž Mm.Õ»ßBÎä½vR<Mæ¼h]³kvêiò¾ƒ¼D‚ÿ—É«”PjeÕ꣈y7Æž´¿+X"ï‹z¹
+q¡&ñ=Á¶â»çUZÍPûi¾¶ù±¹åjs£
+^¯Iì
+}ø>á:Åß	ü^VW‹c>Þ…ðë
+¯](b[Ž®òLAmi§t¹_’À½\ñí׏{ï—ø;êñüØÖå&¤ä—¯‰úʶ[òEù¬|Ñêõ¾„BÊoP?BŽ|˜M+ä*•
+*UÓðmöÚߣRå×ÀqÄ`¿5ªÎD¯‚þgÀaÌûâ™Û'ó+ðà æޏöÛQ^¦R×ÐÏW_ƒþ‰y_¢>åêÓ|tHî°Ž‹õûÇþÎàõx°È‘쫃I}þ%y'õ·ê¶ŸI'ñ×àuÅ<SbYòr¬Q>Fg€Óò›˜;L¤§¬óîIz8iã·T+ä Ј;< õ U=@§ ‹!? F€“Àà–º±8F¯B¾¨á_†|‘¢,aøpÕ±¥‚÷šLŸ
+õoÖùÔ¾k	•1äužqÇøS´Lýríbë<CÙ‹ü hÓðn=Èû…~æMè»ÐÓê#tÿÝü¹¤?ÒbÃÂ÷rÆ{£q}þ­w¯Àý~ø†ˆÿiZ(8t
+ßänë’t¾&½c}®œ$‘èS¶ˆç)Ô%ûž ïú	÷®<¨4‘2QöC§?ñ^ïÖǺÛSáðÀ{	…êUŒ&ö==ÿæ¾ZcÛ¼Êð¹8N糝¤M»ôòy¶Û¥nR{_²¦‘|îe”Û´ŠÄʦ&?F¤mЄ"VºÙB€T­–†IÑÖAË4=ß n³Pÿ€nPMÉ*¤¤ÛhJ/l[ʲÑ[ÂsŽí,sBûƒ¬ç}Þ÷œ÷\|ÎùÎûbJØå«œnOŽ;šH
+Öén[ærnº;$$ÁÚaÿõELÚMˆMéó)µõK`­I°sx|3ê6+ÿz‰)ëz¯\Wž’mU{µ?Ùsž»?hKl¿C|¹@|ÐËsyò|gœùMéó>iË»äbŽÏ‡ßćß¾•™úü¾?/'>ÑqpÎ)ÁY<€ÊQ·!WÝŠïâÒ@ȍ!׎r=ý:¸Ü…Qþ5BÙÁkÀóWQ÷âRöñV[9y*“W¢n|#üž ’é~ÆË W¡ÿ¿ûï£ü"Ð
+xéwOÛQÿFºíø7Á߃}ü
+à$Ê6ÃçQèÏ÷Cþ	<
+„Òý]ƒßµ#2¹É;ôË3¼?þSN¿7H0˹oˆ[âm³sî›#»ÿ³qö-qVëy7½5åí3Óç#Œóã˜
+äÒ~ä”>™GË\VæÏ2̲z·á>ÈŒ_:…]2•¹³Ì_Áê}—w‰4bWMÎ+G¦Ü­¬’|(Ë ÷YŸS8k£ô qÓƒcé”$dlSqÀ|O‚ݸsÓ'ÆÀ¯À^„XæÈÆ´ìÝ:펝Ó>QûVcäLj©3x0ÙòÖrëCø$rcñ­b¶Øý±cù1zjœþoílœÏb¶¼47˜Íž­¿[µsóŽ)öa‰S¯ìܼ$kçbZýô³—ÎgÊñ½e‘óÝÝ*𝮶µMœÎ~¯Ù9ä|Ç…“ß[ƶÇÈZ`]–qTàYìμ»üÐÏ&v€·\'FÁ/‰1vâ7òÎo‘uàÝôäÒˆ²°¿;w±ô½7ƒ-³çÜs+ós•bÍÔÜØ‹÷Hø4P¾:¹×x{bìWy#r@¼sù…‰1ô56S.8㝷]¾÷`»a»‘¦‰”[ëÖf¼|…bQ±Ì8*+DùB£×ÆY¹ƒè( ¢lª!bõꌲrUZ±‚UÆP¤×ûÀlÄF±èª•U±Â=›òq\ÔT–òë–gFã7,w©aF<ü
+bÄÂH7?LR #m|ŒÄ ÷C¢êN9?dºüGˆˆœtARe›€ô±JËd÷o
+w±j7$Â5iÅòÌ7#sø˜Ïø)â':?^~	¼|‚¿L45Ïg-·Çˆc¼ýpßÏ!ËPýS¾'@çùcdr;-\éqN‹Š )äøNåòuþ5Rþ
+Xº·‡?‹™šüËá”ó{Gxæ½ü˜Ì×xÍÓݽ|	òŸ$-‡f$"E<‰¿™Ä²è˜#%û”4ù)Ž0ÞÏyœ”¡®ï"sÁÏñÇÅ\=ÕÃ?PnïË^0Þ3¢ Z’¥¹ŒTā(O±â—±â—ÕhïYKW$²”ï&a€aQÏC;ÍÇ¡
+c›†±5ÃØšaÌb™-áï¢æ]ø„øÒÎ_'	`tº|D`*%PaåòX	OÖŽ¢ô1Ëá’3Û)JJ•ÛN«Èe4ôò$fèÓäƒÖ¼ùF[Bý•„5lð'á(ÂÒ}+½h¸CîA/óÇÕJìR+Ðý[˜”¸ù·Uã	«¨Øˆa÷›`¶AîúÀ·&ü‡&Òp¸7Z.·áîá_R?'\Õz/_¿¾^­Öz1קæüYʦþy’|ƒx@Ç7	4–µ¬UuF¸‡oPxƒÐýébQz›RîŽôáYcËáÖ*Çå¢À¥Š—g¾;´æÌ3tÆ:õ—ª!	¯ÅÕbýkñ1T«7,O	ŽøÜPÓ6HÐt6l¤wi³ªÄÍWâ?­Ä3b%þv;ä(ÀP~'i ö ǁ³@ž*mÊá20ô‚í4 t)`È'}¼
+ãTÁ;º!À†
+©Ä<*QW½äF!:‰±³ŽÆHŒÆXŒÇl±¼˜'V\`Þµ¤Ò0’b…µ-ŽvGÜÁÃÓÑèà‡×Á’)‘_W
+2KìuÕ¯Eߎ^ò’Ú„=‘Ïú"E´˜# '}ÔËËc~—÷ÕՏÔó¾èPt$ÊûÎ9Ãûª†ªFª¸]PgÔ6Ó6£{¨M§!Ú@7R[3oã1¾‡Ûtâ
+8¶g»3îäa§éltrÓëd	g—³Û™rö;óºí){¿ý¬}Ôž×ho±·Ûãö„½Ën×óCù
+ù¦Ý6YÃ^Ç¢vAvŒÄ!Jó¨šd¿²ÊnlW¶	Ù¨4?dXj€}½¿8d~ÒöC†¥
+ <²Ó(k‡L Œ6úÂ3À<o€‘ 
+ÐþÀÙ ë¤,©cƒj–ƒ˜å šå Zª±Ñ/4ÀÙ(¿ø
+(¿øIífe-íJ3!•æ‡K
+­;2íEÍû€!€#ÛK€6eéÒƒí…4Y§uG¥O²N±!È—¦ÅiZ¨Èº­ÜhŽ¸Y'ºìD—èDZ:Ð ­‰ëk¥o‡øLšêª‡"µ•r*äÀqw ©… ”vHù¸'ínȳJk‡ìšl׬42Û–³Nü: ¹Ù”î0Œ”•!-)).(I²câÁ=É^•&!)RÊ8Ö^£ÃJþJÉ}Jþ@É/*é6~íŠ_û½_;à×"…ì@ñ¨’—”|Èt´·Ú‰€¶? =ÐzèyâCÅíf¹O»èÓþìÓŽø´ç|Ú“>í~Ÿ¶É§}Á'»ª ^¢±ERÒ­J.4çyµë^í/^í¤W{Ù«ýÄ«mñju^¸ÓËšý±’O)yבM¯ÑÕhÇn&zŸpGcô>¢ñB¬×“Ü¡ˆÝ.¢K@E4Z ¢›Aå"ºT*¢OêsÓÃÈHt梇$‰à.T;ÓT ‚[Ay"ø)=IÇEк&Z®ŠÖÅ ÷Ek
+hLÒ‹ôxU¡úwÑú4º§o“
+Ù-}“,e¿ 'E´ÞGÒ£#¡¬§KP,4J·çE“£E°t@ Ÿý‹øêm"¹â3c{w8‰'¶ƒ	ë?dãì’\þ9	
+q6þ“\H(gÓä.1Ä„#"ä줢ÐÑ
+GéI\KÉI¥wB\iOôÖ›ƒ:W¥‡T©í¡æK¥J½Ò| ­Ô6ªNå8]8}³v/œÄ§~é¬wÞì¼ß{ï7ã™Ý7qUyo¨©&WÔÔ« ~ ¦€xMõMQóȧù¹ŒM¦Õ˜Ô3jŒz8®Æž1­Æü Žª{ Ž¨Ôô0ÎbXÙ8…Dé¸šAý|q £È§©G_ó< Æè”ôS'}e8RH‡hb‡ƒ8«y‘U±`U@ôfn‡š’@t©>˜cÜ©ú®ÀÌu4ÐÿçÞ
+4¨#¯*¾ ^M5€Ø¢¦" œÔHY‹Q+áBÁU¤(³*ºøŸãR”Ò<– ¿v‹_¿Ÿrx¿Êÿ[ÎqXå?ñ¸Åÿ#–äÿËAZËÿ
+¶ð[·ø?ô~ šr)ÿ¡ø€ÿCÊÃÿZ„ìä%6ñw…|Îw›_ˆmá³@LI%ù·Sš‡Ÿ
+`¦ò×}9‚ÁúõÔWøË¢Ä_ÈQ|†Æ G§Åü7…Sü,,…LìŸkùã¾çø|4?"ñ“0Ã`3‘:̏‹¯òc~ñsâ=~د!šÒF´3 )¾œâû(z©túlÓ&ÿm:G¨‡îñ_í¼Cà+Œ_‚ûE¹‰}=É&Ù}l¾7õlëf·°U\%gæÊ9WÂqÃé9Â!‘ªÜúŠ,!x{U1f*=­õZÛLh
+ÍIæÚ…«.J¢ÃA¥SŠæØõ!¥KŠ*잯ų'£ÊÒAMº”GÃÞ.Ù{@1xƒX©Œ¢è¾ À
+9›Ãh_<‡×©Åi§RŠ/"Œ·¾à¤²ÿô…DÙæz½•ËöþðSª±b	KÅ!I_xªU.E‡ãÊOjJ+m¬×&¢Jðk$¾H¦È‘ð"9JE"¾ˆ'ÉTdˆöãÉp`ÝÈQ€¡ ##(@aÐ?òg¡;œ
+
+ Ý8KA°ivk PèIî<i î¼ºR((S0õ€¢aJƒ9(,+à)%PH¶U @VhÕÔ{7Ô¾‚úFA}ƒªsoèýB­	Zø #ýËDð0Â=sÇâ‘	odÌ™€{L9?7éP^Jº\ÙcsTáRtÂXòà$•ãÊœw"¬ó†]ÙžøSÔqªîñ†³(ÙÏÆ剰Ú#÷D¼ãáÄÂà©®™/Ä:÷y¬®SOqvŠ:뢱gž¢ž¡êAk†Æš¡±åA-Vt(ˆ£{âY¡‘‚\ ¥%°[ÆœîDÐf>жN·ÛqÒù®áë¨TJ(&oP)ƒ›ªûû¨
+¶4U•CwEQå8Ùív¾‹¯Ufè¶xƒ(ãˆ	Ã/
+%“™…sœNæÚQPd¤ˆ¦@Z­ ÚôNk½E}ÍnI*`QZ
+ų±XÄq$ì„$~æÝR"$©P’Ä„Qk‰¾MKôK[ÛïbŽ}Ó-iþ2Ü+Z†¿Ùý2Ü+áoÑ-–+ÝRl9¶ØûË÷Wîë–—WuE4TÍkVJÏÒn	k£ÕÆ
+)-Ñ!ÿwàI¢½tV ú5;	¼HŸÛJtA9«™zÓÞ«›2l6À©NRÁw¾Ë°9'[‘AW‡JXý]Œj8Æp—èîà>dÄux?rHæG;Övší@½Ð6?†ª¥Ùmq[ê Â›õè±K·ôX6 ÏK¿D_ãCù¹h8Š*ÑÙw¦üg¤S™|×x\3ðûHgz¿ÌZf2¶¹ª‚¥G›#ß“²›÷[§/ÑÀ£«£Ýê]í]miF£xW3,\s¥Ýf¯ÅŒÈÅÉ–°Ðül´}ô£|Ž6…û\x;ÿËüïó¹‰~ë^ü/È3d¼
+Üj€[Bã6${:ôgg+rúKdÞø&ù±Qì¬ÀfÉ̺Š¬,»)«*øl˜LeÍÖ¡sÀî¡FL#ù;«¿£.‹™Ôõ~eW3Ùª/Ã»óÙ|ª)ÒwàÛ
+þöá\¾,'ÿ‹¼•Î\0?ßÃmÈŽ:e˧³£*wšJôÑjÈžäRÜÆWàŠ>Ǎ”ÆèõU ðp[¶ooiÖ(tøÛ믇e¼ÁßÞÑÖj«®bR™#,Ë2¦Z©ûÙCû¿q#?¿­õ‡Ã#ÇZFÁC§3¯Ü§Zñ49A°N6É&8ô¡M\£§ÁÍÌAÏÄ`¬Øíw“k‹d Oÿ–ZXÿ+þnG¥ÈóÚÉ”êrØ*—ºŒÍFb¬1MŸ£ÖGc”*Xk„
+ä0êOF"ãã¸]‘H² ´kýî¦aِ„wÉ5F'Ã3uÆ;ëpV»ªë
+F–Ã_çjáë¯VêA,0e•öœ®D®CòV¡ÉRTmPu÷´ËhzŽ©±²ÂÃ{ˆ‡"Ë_)Ãe²µº½¬fÛÇQŠ¤c«£¡¸l÷È[ëÛ=Ô‰‡:ñP'Ó<CwS€Z#¶J³
+;¼\ l§/ÀkL¨¼	Vcö¢Uq„NÈI,ºÜ¼›0åærÂlõÖy	Sj*1MœIÏTÛªl„©qlr8:†`Öc#J
+a¶X<I$°Pm¶Ú“Øg€Ê]^›Ä^S}9lÐ’0´´Ï­Äb9…fð®bË	L<¬N˜üκ6ì6ƒ™>ÓûÊn³µµÂ"ÖÝÜîI_ÜŸ¼Ò³Í-Ú–3s÷šCùô%BM—TS·©ª¢«©µFdÈ›¿Q¦^Þ{h4<3õ‹óWß8{ûC|¨û|‹ËáÍ®ý3¿’hvuÍÒUr^?á_µ£oÝAåøö#_»åyžf	†Cíañ§p¦´ákpTûUC¹¼‚CŽ5A種Öà&®3z¿»»ÒJÚ•V«÷J¶¬µ$?lðPë¢å•Á¦žJH"jœ¦Ð„:%I˜GÈZ0¡¡3¼Ji› 6¦5&…¤à2aÚ™ÆmšÆSúM~ÔÐN‹—~weý¡{%ÍÕÕÞsÏùÎù’@;6Sñz;|+|?óq
+
+"õþC¤Hß#QíÚ5Œ•«Ph›§ŒXõÊ«¹[¥;pË€‚4ôñ¬Í¡TksjÆß’eÔdè¾ðC󒣓ÒçhêĪævþ),ýï×Ï—ÉÔ>ôXܘªJÛjÁ½…'J¿šé-ô§ô8ÇÕH»9êö¸=@„¸z |*LÃ	ŠÏäöˆ‰"tö«‘w"4Rý¨"£‹Gn‹\ú”W 	¥3bƉ TR?ô%` 	­Ò0  ±Š³ðì$¶ÝXºçŒ†I>_bnfD3,çE3âÅ!æÃAÎÙüCf<>ÆW\aóÙs\±ç	Þ^;ŒÕįæ _NÍáGå
++/¤JµµµÅÆÊ&ŠÙé€b8¹™ë¸ógX±ÿ•Å½2“†v>u¬sΓÖqÈ|kZ½žC4ì\¶½W>_ì<Ò¾ië«O5f1Sw?å¶!Ž4“N_Ä·ÔXcl
+m
+ïìÿH=>ðŒOä4(BÐ(QXϐò`S׉=FŠþÓå5¢#û[l\ÕÎôZ¿é4™‹4pª
+ at pŸ…ÝÄZef,§ý’:¥ŽÖ±Âà÷E ¢÷UB%+•±q`n æÝX%FОFFý¹Æ˜Vj#Ñ|^+†2:¬«¹ÆBIÍ•á‚Ö©ôA´°ò9d$¥×”«³­8¬ÙYh|îsÍ£¯uef²í»§<¶j­uÕ²Ž%7ÝHU(Ìyú<=ZÊ­j›¿z—|äèñ•_ÞÞš;òâ
+ëw¹Ú|Ã4¯øöªG·ÞD`š‘—?A<ÝD&{Íh^†f ŽðÔér¢,^”e§›
+ ^‡€SôÈÀ“sp‡ÄMSA%™`SGÅsœ7vB§mäó<õñIžòš0ˆHÌ[® Ã̸óFÚlÅåÑ'o·!y‘Ô\OƒÁ¯W.ù|¾26hö7‡ª1J¤&§üÍôÕÖ­³JVh	lƒ»Ü²;ß´~i2á¤0—èÐa6xàrÇܵ¤–ãƒîP<”à¦8Ú§Î#€w'ø
+Ç
+4žãʧÔñ”:V ºb€ë”Jxà‹ðY¿ZÅ
+pê'±-ÕŠÐkº}d€†$™éå“p]$稃è¤n™š)vˆDNÔÒÊõ:è=V]Æ`]dIRBÃAa–
+%LNL|f3Qbœ‰zã˜B9¦U[qV·-NY‹+ø1Qòc"µg\ÊæAÉþ‰±¨T`?2+u¶©Î6ÕÙ¦:ÛT7q™nªžòZcQÐ` øįFØuDŸ¤» Ϻ!Å¥œ|„Q“¯¾ÇJô…H™—é”î„)tí“£o†Eg÷¾nY½‡MfÔt,ùÒ¸dÍWWZ¬‘ø$a®eõÈoo¼¸þ³—§Ž›bL¯šY¯HÏ?üÎ qæâý]°k
+jÜäà›áï„©»x÷ßfH
+¶ÔséЯB\^ôh4)¸²¡ŸÓ÷1rí&Ãho_6«!‰FJ‘õ!©Ÿœ$Z]´H¯ôù´¤F5&\O]D0V{ï"P§%tëy·YòÀòßXRJÃ6#m3nˆg܁t6¯ˆS‡šñf3n½*ýZ©òá»jO¶âdIÉ8{ÆjÔ/¿L
+è%J½Ô‰¹¯,o–lPòj¡ ZQaþÊ]èûhCõ¸ŠiÓ÷|ðìû+×ßXý¼i][RãfÏ0Úk…¥‰†7÷Vº‚Øü§¶‚¸o¶þmôÙmæ6ËjÉ,?Áe3ÇÔ0ˆjp“ï™âŠ	Ô!¢´ÝEøé+Ú
+„s9At2?‘Ô*:@)¡
+¥iÞïr‰<‘EúéviÒN'8o{n7˜oþ¥À0c–Ò†¦Q&.e£Œc”qŒÞ'î°Z¦SM¯{1T dÃYH,‡nëæ¡ù_Èf»¸Z+—à¿nT·CÿÙú‘Ùx’¢ðò"Ùs¶YËI|À/³¤¥Ù5Yg&G¾Ö´šßH_õÊûÒÇäcé¢Ø”ÞuÐcRsq!_ýD=.e¢DjifŸlH–“aNï:d;zÝ'~Ül4Hž´HÜ|©#ó„´RÚH„Œ$ËMÑtšH¾hf¢NBñLˤCm‚tšÅÜÄ%æô&y¢ONCïxàoN8äø˜—Ç‹1+B&™\w€ã8­¥;‡|êM—ÜRÏVxw¸ÀÅëŠ53²øY2˜¯`í5ì§.?´íƹoƒÑã]_Ãö—jÎéUÚz¼Ê¥K¬Y4Ö'…?ÏØ“³Ÿ·Î{Ýr3Ìa'Åæ²ÎéÙ+þuãÊІ]?|ìæ•×»/fÒSêçÌX¼l|RVMXÔØþ
+j-ë[uðÓ÷v<spæÚ·žÚ2xú¥Î7Ŧus^™Õºdvû~ër"R½¹}ñ†)ËPõy¼ÝÓvŽ¯%ç͸›Ó¸zŽÛã:ê*º.KüLQˆTb$Yçl¥‹Ð{²¦†0XMÉ'9rÄ”1u«­¾zÈsf«»/ò[ãc!¨,òÿ×x“–u©©ŒœõgâZB«Ð8G&[å­î"•J¬².|§KÉ.ÐTÒîšt^/&t(DÐÊ';Æ@exª¡ åÁ´œŸC
+“{þðÍžøÔ…z¯®¸¶bõ¯ZOC»>Ú«mJÔL7Úk‰ì®ß¿^ûã/7¼v‹eú­õ|‰nùö‚þýëÂÆ[ÿ@™£ÎëÈþ~;q-f6,L
+œCò@þÇxÕÆ6uásÎýò½¶¯ïõǵcçÆ×÷&ÎMœ'Ѐ“¸ÐÆdB ©ÀâÒ
+¯@I(e"kiZŠ& A+SW
+ìG¡J!¡EÐ1ÖU͏Vêªn6*­H•iS3*Æì=×Iý1Í’Ï9ï‘-½Ïû>Ïó1Ç‚VÁ™0AÂñ„aĸx1û-rßäà0–@ ñP˜… Ô]Ç|Ô…“*aÅz'ƒy:Î8ó,3Sœžœœ¬t´+qûÛíl·áÆì¶{×ØEߌ2Å«øz/þÃKå3å³½øh!ý·˜é¼WàÑÃïe¾{¯$û[ùp8*`BC·èo%áp•«òìÅ?Yt
+ÛÔÿÿö ¼¼
+ã»èÞ5¦øÍ({¨Ü½¢Üq?Õª Ä]‚jM¢4n.K)n×eHÙe¼ Œ¿óŽ)Â/½£^‚ÓA)ÃHJ²[—ÂɈvC+—.jjH× ‚PJ{Úð)	%•$I$Ù¨*AUUb$IìʲÉX–öª8©*>V3’ªõ6|©t ñ?”‚âcÀ J’èòiX{?‹œ-	©ªÙ°†­ßXY·-ÞT¬„U°–ÃÍë’%ÞITJSNRJàO$uå£tšOö-–Àã;Ôâ¢é’!]p(ݲéÐÞAÊ$VÞ­¬¥AÉç…|~†olœ„ú‚k€
+F0œZ% ã¤Ó"µ@„«ÊÉöêllK¹ã‡/ÆŸðKSÓ±ž„Æ“ê-|„Ÿ=°Ðn).Ót¯ÿ;ÿÞùW2qÎ45¥Æ~…?.7BõÞÿš¡Ò¯"íþð¨(µVWv~f÷Â^XOTŒÍ
+£#Ú¡èáØÁjW¿ÚïߣîñTÏñç½gÃ
+OÄ$^CV·öhõ°ö|x$v zŒ}§Fj²6ÅwñCÞ¡ØHàmŸ0OVýi­%:†A$X€cò‚ê—¹-:#o	‰x]“ŠÕ者-¿ùÔUÜâ
+Ý«¢OŠKD*VUM¿(ÅF+§É5Ë”ÒÝÕZªPíí_NAj'§&·~´rÏ›-.௴VÍ{=VØt‰‚Hø˜åÕ$ñÕ°¸#²‰Ä(gâ
+_ÕS¶Â¥A¾ŽÒV
+:×ò?%úy!JaiÇ¡Ðáƒ^qÕ6üóäþ?Ïéê»uzø“¡_ŸýkùâØ^só𙾪D“Àõ—ëÇo:qõJù“—þtWÿxÉøMÜ÷ngº	Æ
+‚bÐ=ƒàIbÈÆîB_toÐE¡‹M—M‘æ©Ìx·QÝÁ	õ¤öZ€_/	¥R®„.§Œê¬O&©¶X¹üÕ>=®½ÓÕ,àåàR~ÖÐqÙ¡­Ò`(?_¤ÉU¥XÄ*¢ l2Á¹RHò«ØÄN4¹A€‡!­’ØÇib—¶õÔ áëj3µõµÿ]Dx-EBU!–O›¶b™¸ž.F–Ú@5]l¸³ÍPÊD¶’ŸUú©H
+sm4ÅsÛÔV ÂhKBÎA8À1ò£—=o®ªP
+‰5.èò‰Zw{#Y÷ÕñËïô½ñRÇsk•@,wnõînøi&B›™}›ZkÍ…½åñÿë×ë¢öþ½¿­²$ߎSxæNïmˆ;LŒØÿ sð²Â¤ÆV‰$‘kÎ
+äŽä·?
+~¾þ:,î‘v†öe2GƒÜAé$sR::Ïœ—øDpq¨[žÛÃp#I$Gljãìiñ5ö
+ñõ çÁHèõx&\ºHè‘TÊî3ç³Ýæ{1žàt>™Ð3)óÈ#xQH	‘fCÂÚ¨?™S—ÁY'’!/ø„tÁrX¸(|(ü]à}Âv-¹‹ö
+›4Ù]v½ÎÞnï·Ûgl—ýœ¢
+hG4F‹r8‡|Þ¸—x;“‰ª–™òpŠc¦¹Jƒ`Jƒ;šèHZñÊäd~ÖE•*NʆÆû)Ó3ÛlÈ(ÜÉÙƒ%ø A¬R at sª‘%†JÝ“2¦s€vü @M{N$ûùNŲ<Å
+OZç÷^ÿ¼Å츷µqA:*»9)f-ld·[úæ'9Å–§ÿòê+ÓówÏ•ŸhI\z«Ük†äTd³¯/d@Ñ•·®ñ¾YÀ÷uÀ·'E¥&å^êæxŽ— ‹µ$Ëmyz˜%R{ƒ4$HòÞÌ‘ìeö²ôûžt‡½#ÝåîJ’œÐƒ)COè¡TÊêmh'u…-µºåsaYÔ]Z¯—	^jz:e¸Á"ž/éÁÖ
+›ÑKYœEØë“ã2‘;uŠ'tÖÔèUÁPC]šÔá:ðØé ¬·ÓÕ™ir5f¯a’ہàJ›ŸüàÓÞ”Ÿtì ª€5Tó\!¾£Üq~4ƒÕ¿KßÛi¯S.¬@æ`F{°ZèÀ¬‡àÊÕ®ÝÑã1ŒÀ…þÚ04ãô‚
+T´1ÙÝùémùW¨ço›~ì÷Ï”Ÿ¤í8‹=—Ÿ9x sZyÿ6Ÿæ¶¢ÞZÐ$…K3¦œÙ1~ }ÀüEæÅzɘÑ*Ï÷´«žjW76	›Ü»Ü»ÒW™ëì8?–³Æê¥EÆ’L¡þ…ÌH=÷²u¢þÿ[á¼ûæDFX*Gè6Á5ï둾T˜z§ Üìcõ}=œ2rÈW
+­m¾`×ı÷†#‘×f3Þ¶”ˆTE%j'®‰¶Ñÿ‹¥µÍ_WÕÚv
+¯¬žÂ·)V˦ŠÝ«¯øĸHDÊ·oŠŽ ÙwóE°ÎôàÀŒ‚á‹”Ym³)/šŠñbJÄ-‰zÞç†ô›µi aÁô¢‰ä¤²'â>…¯‡HªõšÈ—ð.D®Œ£w@·ÔÔ8ªçðí C¸nÃJƒè‘YÍ›E´„PåY0ñ u›‚(W4ðy³»<uæä«úþËwÕÇFq\ñ™¹¯½ï½½óÝÞíîÝîìíùãð1öá;n…¹ §8U“šH	"¢¶Õâ”È­›Ò‘TuŠƒ’´nEÜJü%”U[QÅiJ‹¶rE
+ŠªRU%â„H±Ï}³>B¡çóÌ›ÝñÈóÞûýÞïýñ{+w¢••:9²q
+ï~®veòw‹o®~CÉ{êáo	r[
+"¹x¢öÎOÞ¬}p¸!‚}ùŒa8Réðçj/­Ùsbïá¸OóÜÆæ"ÓòYеÀk.›Be¨òªÂQ*š‚·,2?VËe$òâ”hc¬Z%ï¿AÛU¥…Ò’¥àa_É„=ÁRªt²d[§*%Øs–ºØ	®ÿžàâ]S.V;A©,ìÍË'4['4§šO6Ût`iØc>¡¯R•"Õ©ÖÔƒtËȆ\-ÍÍ¢#¥b‘ã\œŽÖñëȺµíÁU¾[wGQe[…˜•¾ÊTåTÅ^Qƒ8…	^B<†oùÑõì¯×ëázÁº±¼@˲”Bz¡Ûʍl}¼Ã´ˆ˜g\ŒïàÖ„± kÿóäî¿ mw#›¼Åì ]_\AfVtë°böB÷’M^¨m¹êKvmÝ^ͼmããK}"Ÿ@ìSè°Ùª± xT…PšPRIU0Õ½ª¢º"s‰ ”’ˆ´ÖëaQÔË—=¸Ícz=ç=ö­0O\ÕØKIR:.kxP;¯‘6ÍÔ¶jcÚ)X8-¿ƒ£³–ï³Ëþ.3¼0^Ùr2w‘Oîåp›qXw†›f@úá¦ú¾YxàgõÁFû„>‘žNÛn_º—.]Pj“ô4BocÆ”á0ªøœÉ«Z_`ŽpÆ%ô*®’“fô¶[♶F³qªÑö@?»e½Þ_¿¾ õ²i¡ûú@7ðN(V´.kµ(¶ÿwݘUƁü«nõÞqë?­±n-êñmCOOìÉãké{Ü~jw1àî=>µk×nð@o2‡“¬‡ô&±;ùl’´uU
+}]?CÃxÈ#ÊwѸ<®S~®üSù·âìºÜERB*œŠðiÞp…`8Aid¸Î;“&WR2´îÅTI1¨žW•N
+õäÙƒYÅ5ÉRD–%T( Ôª$#Š’D¸ È¶N B'Á$c(²âZÝ%ñ	œXëy×û‘—x]ïËÉëêbÕÈÝíèJ¦šò9ö.ÄÞå.çÈùÜlŽäâ«»ªø‹¯kuU¼â;¬8XIÅ:;œeågåZ„,d62ý2ŒÏeÐ~Â,ZFVÌfëy:00ÌÚ4”ÅøþxÆ:°£rö,Z¸3ʶY<HšVt§ã·áÌì…›âÂ5‡ÿKµ¶@ë盼^fI~Çö
+ˆª&>5ÿÜh¿z+k¿8_Ùk/Nu住ÛÛµªÑ`øV „˜kxè´  .ožöÙdŽøŠ¼,yYQ‚þ£{‰Ñ1%%ÅE5G{¡ðÑ@i¼ÃAEY‹pŽU$ŠBÁ ÆJLv!‹rA7&M oõcÿhŸŽu>Ô$#	÷II_xŒÒ:å
+0–eŒ{cÉbâj™k-ék	ßñ@.;nAðPä¡FŸ·Hwœïçg0‹BOÿ9„O™Ùp'
+òÁÕhXÔÆÔ1íE4œP'´3èŒæ·«v­ÅÞè¥á–„“¯.>~:Ü	Ó4ԝN;T„æù	<%ŸâOÉb* *öæž-ý¿ä¹ˆT†­—M· –—QuñZ}Œ”ƒÕÅ+¯Ã˜?8ˆ•­N+‹²ÙÍ3Áí4HCˆ¥ÁRf ¡ÊwâyUoÂç]£Ñù½{+j-5دd×­uôοA6È–ˆaxõMÛnMÚ÷Ìÿôk_€ ?ö´í7é%¨Ø>ˆî5Ç^äGI|Â\µ›ß>ê™æâï%Þ“ç”+‚Û%º’1"úb‰˜ÜÈ7†#M	O’µ¼164ÔE]°>ûë3Ç`µƒ©>¶³A˜Ä/‘cÎcÜK¾Iÿ4™ö½íxÛý{eÏùýÄîâœn§'†c$æ‹ù£Š{g|§üŒcÄ·?¾_™žÏ*sÒ5Îûh ЉlÑN—[ðÆSûú­t ±fÆ‘ÄCŠ<dÚ°-‘WË*QƒBJ è7¦ª‡˜Ž3ƒŸÙ <tuéÕÕÍ–¨[ÙÆdÛÃL¶uã$o(™HÆm82ñ„˜ Π_0ÀO’8°bN°B¾€ý2‡=Q%ì0d³Ýðc²ÅŠæ·0 | Òá犎êâuÓ+‰(}ðKª‹ÿ8*‚PþL¶òÝ°ú…¿ˆ²õÏf¼lAjá4èXÑÔÆLˆG`Ž<Œ!tòÐ!ÅðzüÃɵ#µ\ø~wýjû¦ÛUérÇËŽ­¾Ú¾Ú¥Zm¦6sûqéýí+µk¯MµÝÄñá™wvԝØk€þÐô»ç
+è÷U†þ-Þâ¦žoÄn¨ŸR{'#ì]F)¨3'ÕýŒÊu)' œ,;Ãq99^ÃÚ_·EÇ¢?†ööp>ƒ3Ò’¬jõ#ï#}¾m>â52Ÿé›Ý.ë+èy™þ¨/5»Ëâ	`üu3™Ò#	1§Ñò8•€6¤óX%ó1Um±äô [XLpj/ÔµSS£
+ a[ˆ	çÎ蘚¥Ê–…MOôHÒúèÓµãÛ¯h¡~›ì¬ÚW¤†¡wí³
+2kö•ƒ¿¦"9ºp–¼xtòæA¦Þê¨?c–I'Ž6Ø8]Ô7&6ÈèvùËÔ% ròÞioËï’F¤zH¿(ýAŸÍsÇ¢N|*ÞŠßJ8òœ¯JþrÆò±e07ƒa™«¡Z hÕiD×é7õçu¢£Y“Æèßèujãi¥¶YŠi¬E¦zÆÈIUü±ÓA¾§[sa’zIÓ(…Vâ?l—lçÇß÷|gŸcÇ÷ÚÉåÎçØw¶sNÎgÇIÎvplœ„ É
+…°yd`ʈ£•ªl]h!¥Ðnm€X¦±Uƒ++m!M°M£BÿM¢«Ôˆ?*ÂþXƤ½¯®­6E¾{õæ•£¼ßçù>Ÿ/‹28(ŠRÑ…)e68›T<4s:ˆO·.ž†^¬ƒdXâÁ¨Dòì§Œf+ÜRɼ¥¶eâÏűBÆM<º@Lºà“Q¬LE,¤Ò«—xÕiQcõÑl–ðCoˆ' &F@ò‘dTm‡ªš¤³¦A.K‡3£³ÎL£XÇçaÕDøÄÿ‘º£k'.Ä€$ðAhqJªh®`­K}šïy4säÙå߁+LŸ–.o(¯ʼvxÝÑŸQ#å_T¿çÊ·?“—Ë©¡Ù¢R#ÔÉÒ[ÆÄÎÉ’9:2ÿÄN›q3#¶mÔžZ¬.hçlºµMä=ÎéHs'BŠÞKGÓú7´CÚ¡èÙäTôj².óßdÛkò`3—–ÓTúl;¦žÍŠ_Vd(OáêZØ$$QÒY^Ó96Â98®ÑÑÈÑ{¸=Ú$wÚñžã&gÕ5ÎA‡™T»%œâíëฎÃ7 7‚ŠP‘)ˆL—GÊšŽÚd–ceªxë]¹½ÕÛ53o/xîÌ,öUýnÈ™BÅ=1’ŠDÛL …¹ÙD³s³Õueù¶•Z¶~“©XŽRµˆ>âØÁíu¼À½¢MèǸŽkŽpµ P"h[Äl[Ær…¬<F ê_O2n3Ù´…ÝFÃB«Fš[©T2m|šz-¿shþl{ž÷›‰sŸúRù_·Í±§Ûd©Ë£ª±ÇGG'Œí¦ßÜøð½¥ùÄAŸ¨ÅÉ7wîO»VÆÉÖàúç¶oåÜ?¥¦úw?Þ;ضypÉ—÷ýdË›3ȹDYLTíÃÝíÄÝ­€Ó 4ãQJ†Cf‘'©„LÜr7Bt^PðžÍök(*~
+Ù?‡éöž$=	øe›Ô
+q,…Dä¨Â4$Û){Þ‹D¨ˆâÑ"*H†Š< ËGdZ¾
+£@¤Þz'H† z„£PÐ	q¨”÷þ  î–êCg‘À‰_*¾ÁðÿÀfBÃnÆÙ¤¬í‰lÙ*,늗ºªùè™CùB„é/ßô<þä3„¤ºÃÝäF&ŠK^ôOƒ0¾‰.©)y'
+úO¡0\$ÀŒ°C8+L	tƒ ð¢×+ ú›	ïò×:Y‡ßôbd4§æ_7ӂͪ°À†§Íp<cµ¶^¼òò¬ÍJ;/6}že[°Ö	ð¤±ã¬pãJ¼7	\…­@€/›Åiâ½a'tzCágƒoìúèuÉ»¦T×.ßÚs_¯\^.‡éâbÆe}pM«NŠ!…›º$‚
+P~þY¨¾"WŽ|ªÕ~ETXw“
+¦BRÔÅ1ˆ©_‡¼•˜OŽ«Â?³„ÂÚ¤˜K}]ѧÊñ`9±>³Ž:Ü°IP+Bg[ƒ"ë+™~Õ¹¬cúñ~¿Ç®ª
+œßÓ¾³T †võIV§›ðûüly]W¾, at 2 Û%xé¾å¤‡gÐ}Xƒ©Çäƒutäñ_Ë·öã™õ•ùX>´¼ÚAŽê3y+BZA™3ד|-õÛdÊ’'EþµÕ©Ëø]Û™ø…Ü•øïãwƒŽßMݏÛS¶å¶¾º>¡7µIØÆ“©Óð2¼Ì:
+Ü—?Iÿ(þãväò_oΏ	Çù‹ðt×uøQ¾†mÈ+kYÅR¼‡§²ä¯Ü2σµ³6=Ö¢ÇT=¦åŒóÆ5ÃB‹5Æ‹Æ÷ŒSƯŒß4cÔ€F¶ž
+²[ÙçXšb³l?»—=ÄžbÏ°`ÿÂÚ¬e-õÖ"ÖFd£¶-‘]Euœ …D‚MMOr¢,nw‹§Ä‹âuÑö7ñøw¡hºPR¤dåàbr,ëŽÑ±m§Ê*¥~@ÂÞm·_·Ó
+~QÀŽpOÁk&2óûò”™ÎSù_ò÷‘ÿ®e ¥{Þ}:èDTgc†ÕänåTc2Ì0C3ÞÅ‹6àRmŸ ¾‹kgÍlq®¨ÿ¶€Û}gH2vîödôþ=¹sŽPinU]yÌCîj4Ê [,ʹr9\‘p¬Z¥ï:E¿HÂPe w,êj× ÍaªŽH&â
+¸À©Ø0î²t j¬
+Àš~,¢³BWx$“Á¼0—_z	Ž `QÇW×U+ömlÑ*qëjÁ7_ØÅÎM̽âH‚•l7»­ÕSFÕ{þՁ‘)˜Ì–%Q©1Ò›íÞ0vû›“‚«¦¾Vò:völ®y!ÛôÆ;ŸØ±nçùïu¤Só{D^Ö[Ú—÷«ö¯(.ž(3ƒHû–­>3+ӝ­aa5}~†öaï@349Ï
+H  èu7ÉÂ|hú‘[ âp¸Æ89 æ)Ó&y4¬æ¥Õ)ò2e'´;Õ¦™Ú€6ªýTûµvC³i.༲—òFÝÁ6d¢tÝÁìçmY[¬PT±3oG<T”Êû’ w“ @,>“@…1]¯ÕªGµ…£ÚçŽ>Z e4C´nq¡\ªK*]˨MŸÔˆÃ=¢¨*j†~§7 j]r
+^‡­‘f(Õ Èš¿ q”hŒcWøEfÔ>ªŒ7gÁœa¯ÐìË석§ÇkÆåqõ8s¢ÉZ	?CÐM$&‚W¤ÅS&Y
+±îúêÈÆÆG¦:¼¸çõásÃ{oïïß“™Ùjt°ÖôgÞötóÒ§™þRioñΫ'ÿ½¿-½•>=X×è£ÔÒÏËÃÿaºêc›8Ïø½w͝œ}gßù+N|¾ó·Ïö9É™|ÛGhhød¢Âê²1ÆÒ1š	(e„¶hÅ躉Jt"eR©Z&XCi`š`šR‰©¦“kÿ MÑ´1e€Õ¤6°ç½3l–îyî^ß½>?Ïóû=¿gO´{Yש›êhÕÃ9j#°X”¸kl»O£˜
+;Þ
+Ï’³Ñëèú+ÉÔÛQ–̈ë¤-ŽïI;;ê'ÂG…SÂ)q†¼ ž_ˆÎ†¯ÄÝò
+åjª7¡Fªè&"mH,нwÜÈýÏ@¢‘l
+œ¹T„Ñ,co„nCh
+'OÇoGpMRÙÔÊÔîÃþ\JÕ«§ º]:Œu6u–
+ýzpÞaÚêàÜ„)¶æÇùÀ³p݉E—P
+ÝGp7ñz¨ÇÜÂXÒÔLV›Áá¦©ovô·7·ì¾þÆý݃Úï—
+ŠþÔ²ö-ëï~´5~rñÓ?ÛÐùĪÍå`°mðøËw»Õ<ÆÊjÀJ?`%sÍ‹Fô-ç{ÎóΏ}6§ÝN„ù0é—r{à„žr%ø9‹NÐœ|óc»ú2dëF#èß%'D¶";jt
+ 3€.ˆ‡V#òH£FÍBvÓ 2ì
+â5¤U5rL›ÒHM‚¹ÒÀx1¼øÑG(«ò6>˜ï˜<&QSÀú¥u5o©&©€—yþþü×è~Å‚ÌcФ”ŒSˆÅ£q’ö$RÉt’¤]qEH$‰ŒLÜ-'Q’S“µaP’1Q¢9Ç„1e,sF»¤Ñc®=žþ=ѱôîÜ~ÿ¡Ü[Σ¾cÙw}d/d]{¹ƒng±2l¢[³Ð­ÕЭÕЍw6' H¢"Nxò1‘šØŠ3ãRÞN}FÛs¶?9ºtzä©‘F–Œt;ØBß«Ë·ÆqMÏùSëWÕ­üêÓm¢±Éƒ?_[šÚ÷»£·_ԣƭ¾æ¦ÌÂþâôö;¿y?!²ª€ª ƼDõ´g…XGÅïw»D&^’ü„¼ì¾J^¥®;¯{ÿMýÇY¿Ç|)xõµÔjTÙIíQ^¢ö»n9ÿîudì}Èîp¨¸"vÊ^©‹ø´Ô7ƒRgC	©›Aái¶ÁáÃÙm€ìúŒ ¢ûž#0‚p²ö8N
+.{#à.šRV6*·›I[£k+_CžéÃË'
+ºY5,”S•G|P®!°‚ùnp¡2‡1¨ª¸XTµÇDá½<ßÞ«Ì!þò¸Y!Ð&›ãУ$Ýä‘ÂD£è£°;F~/«.2ê$ª¨8ÉãH¶Ðhu<œ@äÑÕKU:6ô»gS‡²rfWuëÚ…÷_ýW4îêr7ºák–¬ó›œš¼xyÿqâ$OÛð±(„¢ ¨>˜9sH5ž14DRŒäh‚‘hž±eT¡´›w²¬_å96&1³
+ŠI4`6$…Ê!ê4H“ÖÄ>/ʹ^ÊÂ-Џë5Ãï*sš¤ÝÐ(
+6
+à°‚!=N+xåHZûüFå®Dºô[åw­
+yÍéô¤YsØ{CK·ê¶Ê’ 1Ø»—=ÂN±4Áòì·ÌÓ*{‡eØ`D+hd^û£|mF4€d€vŸÀ´=n|n¤yö7þKõÞï!{XÐW)úÁÀ÷<¦Qç¹ûšÅ@Yj‡™¨DÂ<Tl+&õÿ‘(fT«MÑ^¿·Í‹nˆ‘µ)ÅПÎîÞ¹¼Wï…‘„÷7'ÉCTÿÂÎgq*C¡ÂJòà¦~íÈ¥g:r}‹dG“›óÖs…â靛 MÄàƒ¥Ô€¤ÑK¬DŸ߈ó
+\9Õq ÷fú#ÛyLJésù;±ûOÔ×·9Št'ÝYUgئi©C^·¿’9æ8™;¹¤ÁˆõÉÎt€'¨.&&–ÒN5{#{Éðt–ŒDR/a	Œ7 J=í	è¥ÊfxECTln?ʲÍIZ‹NÍPMÜrTcúÍÜ€	5O{£Þ62€]3«&õ:»PWk`‚!Ñ„Ä 
+w7Š6ÒÙ>Õµ>ÄõI}d߀ÌãEÞ\äÇK<ÉÏPu†˜Ð°©#N—tR7䄚ſ'ÁjÖH¥õ,Ì\v4ûÓ,5”­fÉìÎAË¦’ÜÎõà|óó@qÍ.TÆ¿†™7—UÕrÏ‚ÚÚX›Çº¦‰EC’uux^5@µVÏ%øÛqfâfIÆ¢TóøpwšÕ
+XE0Þùü5á“T0·µ·š®)LÚí–Á¶­•±îi5+²Zví*AþuO·Ñ‹Ëé‰\o{éן­yzò½ŸT7ô?»ïû?ÜÿÂÍ3•å]C«õå"۷ȝ;~õÚq.´zûù–Ô¢îÍo®©ëNÇòdÞxåé×ä––u…ü² 1Ñ¿¯Ð2õÜÁË¥í3¿}þøôâÂWwÝR±mÍò%Aw؇ÕR‚°u@ÏÏ¢ç	úá:ó&zWõº¥$9”¯æI¦®ŽöÑ	ÚÆ9	…ÈJN^á³´ç´ë¢‹!BˆI®òí$c’U1ɍ6Å$y†üÜøN4“²Ñ(
+Á£D`‹QdÙårÖÛ%rdDÁ—£ÿI]0z‹‚±ŽÎ.¸(´€I¦À¨90JT·`ðnýŠ€8E„+ÉHÀ£˜çRIù3yRˏáH”ŠøLÃV¦‡ÝLšv2}6ozÃàÈ–ŒË¤’æ¼Ø$Ò’—’Õ$…—¦Û»tÓvL/eÞêh–õd0·Ê’"¸² B›*=|mzJƒÁóÚãýÀbÐm€ÂÊXú™Ë¦.T1•‚ŒÜP–ÍßÙ²”‘u%øœpdë2‚˜_váê•Åò£ý‡1ý¡ÊÔ¬
+%ë^d‰uÇü@…‹€õÜæÔF3˜ÿo
+ü÷ö¯ÿq:Õû ÑôxÔPje–º$ºÿKxÙƶmœqüŽ’HY¤DŠ¦LQ/¤$R¤cš–˜Pq<+•¤¶òæx[–ͼºË°%Ãì4–d›Ü®{+h·Å>Ôë‡
+ë—zs›X¶´C–n†h4<ôCÛ¢ìî$ÇMR`†Áçx<àsÿû?¿G‰[»¯¿ÿé='¾¿Ðzát…1&Ÿ:	vn8?øX‹=¡†AçzN.}ÅSô!¼ÔCg 2à¯~:—k|ˆ £ÅQÈв¡‰&QC‹ãž4´Ìoà?êÓèkãÞvïuÒ>€\†ã‘.œƒš]BÕå¶pÕ¢T´/)ûèõ2NƧ*8,åtÄn™D¿ä”½EÎː4ƒòE_W)MVÔE5XRkê<¬¨k*[Aƃ6îÎ1Ÿö¶	·×;¨¶Nœ„¤Ú†›5e{÷ƒyF95ë“Ç|rò݁=-f—*
+ì!¾¬5|7}|0hTA>NÐåíÞµÖ¼‹ª=\ð7Ü@~ä«=Ilƒ§Ê§ÜsåsîsÒ3ågÜÅò¢»²mm»ÐN,îWp©~Csq‹Ó“^y—£qÑšË(s8™‰å@À—@ZHçÒå´ŸOO§gÒsé®ôr€Y2m›äYþ¤<Øoãgñ˜à!q]±×l
+Ø‚MÙoQ7ÀVꤘ$k÷3&ÜlÍ®#s¶§pâÖ;Y›šgŽ¡;cR¥±[ÊviYñA’ÎþÄd­69ñn\ùÉ…‹OíÜböCJ9OG` ڏ…NOÔpvk­êwü þų'FûëŽÃ	‰°÷¥_“שÝ^­Ä‘ÚH¥òB i‰X£Ó"\!4´@Í"”"JEL"JEˆ%à,÷èè—t(6àˆÅ:dÛ:ÄaÉñ<¶£G}	r‘…ó,¬ÀRìEM\Å@I¬‰ó⊸&†D¼Þõ</9^œÈÛÉz$Rܐ!š‡ˆoiStÿóõûR¼ý%,5ôõ ŸB´2BùÚ(EQó#ê`˜ïU0¢u#›¡áöAÅФeê½7
+Ž¡õ¢/ê†VÕ¼¡uëºoÁ‚¡YËÔŸ/ëþ04´a4öûô݆6¢ëLÁÙžg`P­n=TOE"AŒÐÕá^KêŽ4|D =>§<ÐXh,6VÁÒÏk<Å÷¥T$\^Q®(ו€¯Ì+”r+_èpÐ#‡<r®8ם€ïÌ;”sðƒÚ 5Ø·»Np)[ð¦ëkuj¡¾X_©Jè²ZÔ•ÑÆ2õÙ¥<¶p»M Ä¿	rTïnÄ©êÆÏY̸‰ÄP=„zËõ¸(ZÀ›€ÿ7œ4FÉMgÙhˆ.›Ó
+
+¨f²lJ…\´DoUašSÛ­„Pµ¼•O£?°ïÈy_Ôrá®\XµBZWÞ¹|˜¸f O'¨1ÝXkP4gpç7n°¡Ã¡Ãá±®ÃìJ#´ƒ:LæþM1Ïžm·Ÿ
+$©ž,Iô’¨!?ø×*+$¢bƒèý£û1mÏ£Hîy¶}Ïwžß¡ˆïŁÍÛýl¢Ý¿þÿòƒéœL1xî!¿sè;c“òã/Œ?ñ¤cíje‡Ò¢dgí/8q¹ÞÊX/•Ò½ùR=SI•
+üââ‘=GŽNŽOüðÅÖÓg<T•BVú	øü·öækµVädªˆOî~>ßô„v 9^£Ií:C	¤vµ	i›
+bBúàMv¨‹†ÖÒŽ•q†éÀ_¨?¥	º‚¸)pþ=M‰|䁭ń¼`¿Î_áÃ0‘oÓ’‰I/D=ZÊaZJ舡l]Ïçr<‹(§B “^†/­B—ï½éMVày l:Bø)‘0 at IHû¼sÒu‰’0LI¤$R’_ÙŽ.ˆ$|6$ŒT¦)	Ó”„iJ „Š×œE‡*93èØ ~r:üD"z‰Óá(§ÃMN‡§œO‘œðˆ£œ4\ö-˼R&,™+æª0; ev@Êl”á™Jÿ&@~>PhæöÔ¦¶Èq:uÛžE U]oÃÔ#•kSTnƒ¢xLQ¹
+Šâ1Eñ˜¢xLQüÃ… ÿ,¢~R6@ÎÚQó'ùQÍ^m<{ðØ7$IҪȂh§Žî·*-«#Ïóc£'½ÚúñQEå8\x²š¿Øb¿¼ƒy@†(™ûïÝ\F:Œ‚<<â'¯¥ ÅAñóᘅ€‘M¦+Ìfý É7²Ñ oÚ„Á”Ž?è@…„Ñv¨‘°4´ÓÃÑ7zmoE_Õ) ûú´Ž‡!_E§t^ÔDJôWYH
+z/‰èÕ8^âb«Ð;æÞ°*;f±s¶7ïÐúÔ˜°A»wÐVZí
+ª®;ÜóB‘*jjN¥h©;ÑMÑ´™Î¤2J&@óQÑB_™UaO—¨‚$“µ`œ‹YP
+ÄTØ‘U	ÉèxŒm÷Ù}}È1‘º½pîƒû„ó\h†nrMaF™£ç¹yaNy›úi23Ѿ™œgæ¢sü|2§ÀÔìêê v'	·oTÅåM¨aÇ ÚP¼Ÿ&l]øÃWO^xï7o]߶OŽ±Gµ¢’YL®~ûƒç®}ïUØ{õhzÿ÷§§F÷+…ÃükÍlï ÕÚDQU‚ç|E,…y0 ®Ñ#Äéî’ŽèÖÐ,æú·z‡‡ý´î<+3q±/]45–fb¸ÅO§D·½¿8,
+ïôpôË莻«.Uv}wܝqƒ®ØÁ’¨ès°ÌùÜ8·Â­r!N)ÍR›%‡…C¯QòØÍW–’9-kø8Lò'Lá]%KÝöR·³ÔýØÒ;HJÖÛŒŒdLÀõ²SsfRUŠ¶™5­br‹M]úRŽ{3E€ÎÖÚí"7løµQOÇ—f²©6ÍfðœÔTf²ßÔg¬¦ý]éGú‹ÒKÉ—Õ—?5~.ý²ðšqIzË÷&þGu¹ÇÆqÔq|f_÷Øóîìãvï¹»÷ö=|ç:ëØNnÓP§¡$vx˜Xå’”<q¢V$!’¨I¨HT!J©ˆ‚„R쒸婐‰"^R‰y(‰KKÜÒª²Íoö.¥ØÒüfö~;;»3¿ïïóÃö¶óM @ïÐLº~ZÒ)q]úûM9â_4{GoùÔ„¿zÏŠõã\ØüЏ÷lXÛ70þ©•9w¨èí\³ué¹ÜX¡ÀdÌmìŸ)¹~ÀiýÛñ“·gÏúØíOÜû$e¬b?' ŒK^X,ŠC¢!íAûé¤íV;ÌöËSv¿?L[íË2ñ­WÒ
+—TñYñt•ã]Š+§‘…ÊvšX¤,à¨aš(û¬mù¨j^µÓ>ªæòv™ž¦t.Ü'{Ö0(^j )?B“*V:,·Pø%¼qxëåӁëÎãKžˆÊ²iC­TÉeÛç-ëg×õmÒñ­§«†;›Åû²eI–Éþ©²ñãw«€6ª.,´æçÉ\»v5¨Véáø‡ƒž
+(:\ˆU½+·íÚ ÔF!5idúZK7²Tô¡õ5ƒk×Ôû7Â]éD9êà@¤1¸X]
+†‹½ìùW¾µõþæÚ}ŒlóáG?8D’q `èÏ©Oóý¦å9æØ£>æ„÷I±7Jšé*ë$]æÝЯ®ÿHn’wH L
+•A²²rB<“;“¿ þ 7#¾ùß,G#ëÄ#‚'zFí³Ñ9ÆƘæì‰jó{4™ãû=
+SpÁmÜ©Æìø¹¤HPa—Ó	œ˜Á{½\üœqGUùb5 ZEUìı§F]üŠ2$Ãdè§EÙm²×A¬m	K	ÙÅ
+wÔÝê~Þ}ܽè
+®*í ôà†v/›(wÓ§Âr7îöÓ$H{w|Õt*é“Õ
+sP¿Q…øiЁ,ôëB¸!èé™fp8šƒÆ(À–ÞIœ4¼µ¤¿scƁׇµÞðB0CfÜMW>
+øæð-LCíÔ{3U'æü¼8öºcðS
+4$	dBÓe´' ´¤²,KnZ3˝ŽèmÔN»ïèû½ˆxà)|yy¼xý®¹M+VLææ¹MÏ“^Xi6¼
+¼u£Nm/úäB,
+âøútÛ«Wz€0`ô[/B@GafùiÐJ°s—©Ì¦@Hÿ‡ÎhBêÖr>'ÓtĽ§T
+9vÍO W¥b¿¡bÒÌ·åìêckÊ«t[OŽ¯Ýg‰#C²=ßé]=¼û;=÷ùæ‡×%Õˆ±W–®œÜ=OÆË¿üúøƳc±?~o¥wdÝžÁlÿÌÅ‚,CrBÅå;ÌYnÅÑSžtJ<aüFŒ ø¾ÛÃé:=Æ`Á{EOdÅý¡’È°3XòÒ¼x)’HbŽC2oó_ÑŒèA]×<øø=Oj³†6«]×X-ž Êg>/€à‚Ïz w	¤¢æâ\«	…E¾…aL~
+•ï$šÄÊŠhÎ×ù¾³-ýJtb ϼúª\$kVY›.MV‡¾ô“û¸Å¥m_üù¦Fz»1»}uö,~'7ñòAªÕÍå9îö<Êâ'_DyX݁öó×óL(’ŒT"ë#ÜPäéÔ…ÔLŠûWൠ“õÄ.7C™GšÍûK /0$r>—“ó¶–ËYy;›ËñŽï‰ae³ð$T:ÙÙ(¼@ó ¼@^ ì.Pl(¶”âÊîe÷k–ì×	D`
+òá<­	òÀðùÃç;ìžï°;µS•öÏ0s¾ƒðÔzq€‡Ù<¶óÏç™F~_žÉëvG+2Õ•i˜Xê¼Ô!x©=™/;€üënH³Òu‰•â¹ÒwD}xEú»dHÿZïÑ1ï3=üûÄèó|k’æ ?&öWqµi(‹\ÞÙõ•þýM÷ê¥ckŸøèèáJéøˆVNæÓ݃”»ó{¸Œ­øè³ø ìůìXei‰Q¼Ð©ú4 í×`÷Sø¸—PÄ`©˜ëµ&ؘ̉u9rÃzÝ
+X4Cwõ[ôÅ‹)Ûm£Æ¸À¤ àLl&c¶ÙÞÌÛ‚A¢¶1³ü5oŒRN2•‘‰.Ë#´E– '¥$Œ88 „Še/ñC’¦œ$²„ù$½@@RHLþ‡ì•=yLfå–t{p‹Ÿ^üfèaº†Y<FW6=<êú+LæJ®åuÉ.±¶YÏX7,ŽXøyx&
+œÀNg®@ÄUÛ»±0	q·_h-Äæý\M÷C5‡°¢
+ÁOÐ=Q¯JGÈË'øzÌïTcˆÌc2Ûn[ÿoüÍkÑrÌ‹Zt±],C”TÓÎ΍)}È7QjÞžå&¾+‡<¦
+¸ùdPÓ|̓± @€ÝZúŐcöà7J¬öôáþž!ÜW\úUŠùݱ\"T((†Uصô}Ü8ºÒ.1…‚°òøb–F¹²<ÇOÁ>טO¼ "×àÉÞyUw‹8ÑM‚K¸@Co
+³©7¦9ª£æf~³:n}–ßÞ!îV÷{ÍÖ.û1rH=b|Ñ<`t¾P:UªúáŸèïÒÍÚÛèÍð›â[Ò»µ¢DAâ¯p–W«o«‡0fTUÑ4&¢4¶c\	—ªÝv	…Hˆ	qA;dj¬L3l³èì¢7³üØ´Â2PÉð>m£šS­ÕFlG·mGC!$ØÚb[0´86Äbv‹BtE! 3ˆQTè«„c.T³4#A|Ëy×aœjÉ®:6\U‡ÃµR1f†CBeX§g¾Ö_÷5`Ðõ­“ñ­‹'ܺ'J.‚wb.ÖqÝ4¥G{÷\ò¶)ûFùîA
+w”òFèñÐòÙ¯úØ(Ž+þf÷noý±·çûðÝ®}·g|_ø¼·>ÛgããÆ66‡Ác>ÊAi1‡¤)©PKë: AHª†|H„?(mB!@)J£(i­&¢j›ªUA"ªÔHn	r4µéÛݳ!
+‘Úþµsú½y3·3;óö7oÞË£«òÒy]ytž ÇÎR½Ï’Êïb>©:Q@¯!z&Da³°µ¯å¯YÝa¨)¥ê$°LSsµ"$gg,Ê")ÍCÈÎAëÝšÆبx;g£_H]]ÙØ›R¯˜l=øn^:…1Šíìt}テbÖÙàF)êÒåô{uòjñªÊÝ»¨Lt>«½1+,Ԑ«þá½ù>Y!gù¼{CõÄ«‹Nþ³”:9ÑMû‘â·ƒ¥ö¢¥“‡ÈfOf&Ò‚»8ƒÍ®v10!Ó»'•é
+æ‘éIêít&ì}F¢ÄR[’²¿ì#IsIÚnuJ!iõ´õÙø{äbŠÅ´”µ¹m“ÇÍZÒºH–.ËÌ,ŒP›mhá*ߨ+gT
+ìqMÏ֝¯£b2Q¼>‰S¼V‰Kò “$oáÐ1
+^QrP
+Ô%륺óѼ£óO¹4C*O(µR"æ³¢+Ôd¹pT9¡P«”ýÊë
+­xó'’¯'éUÉýÉk<½Œâ&ioŸDš”U>"±°~7ý=’/Ëd‰¼G>!ÿV6ÉÄÎE𙉋É6²—˜‡¹_J×$ºGúŽtH:.™^âþ̍sô>òù¡ÿˆqújNrrœ”LÛË›xÂs¼Â'M‘8I‘’¦¤"K^ž#,3­	u‰@9#x,Lþó©7ST
+—ô_T›ÂàÚèFœxm3ç‰ñ½ªð¾A| S»`6¤¨¶SeWUG<6:>ÑFøhvšëÓÝ
+ƒƒÑ!+’<«–Á¨FH‚DįDTBºe½vFôš÷iõ«ké¼Dþ#•q<8…Ö„"uvÄç\ùí’dïõ%}…¡æö,O;½ž|k-¯
+«*|ªÐÂÛx†ð FŸP²žTê/)Ôw+Ù¨UvA»"ÄD´5J
+ÀÆ‚~ß@ìerB:á?'ýšû—Ùá
+\D–8ŠÝS`m8¬¥…êý=ÿÖÓú³h×E±Û]Û)£¶¼Ø/Q&®5zý‹[†u”UNlÜÔù¢…USRËši¡#ÔU.“Lã@3Õ89òBÔMa¦Xì(MékåHV>ÈÝF*6ã1#v‹·Y”ï×m©tyÍÁ 5o½v¿L¶Ñ£xêòõÓ<'qT¡šœt¸2'™ó¹vq…¸²dyl@(Ù.9[òn‰5âˆ8gÁ,±
+Ú¸~¦ßÒ_xD9ÇÅ?ÎÊ)\¡be
+-ãŠ%—ÍLÌÄ$aî␜®p$µ*J›(8EQ(ä8&6Üj NàTÆ•)¢`å
+Áâ
++PUb6‹£||àcŸË‰†™¡à«ñKñ+q:®žkٍ#y—â¢\.¤Ýæ™3ýáÚpK˜¿WóÓUñ[¡:ïα‰ìGºë,Þ6JtÚF›FGUº!ˆZÛ†ØXT)¬9
+úŸ
+_YèÒÂÚt¿¬ºå,†	÷ò¬”E
+µI%Ž(’«“ZæÄÈ'ñHõó›gÇ"
+±dËä§}ñÖ
+KúçÕV7²¼§$R¢Nÿ¸½-5Ãzdò )9<;X‰‘„¹ñ•‰Ìä¿R=kæ&¤ç†
+
+¼OP°˜zŸþ‰ùap£çݝ.§ÆEÊ’‡Ÿ©L(%oý,i{­pˆð–§õ3ákªé|S†Ç€ûz¸FP›®ÒŒœv	µ?”	/K2%÷V=>¬ÕÙhçèÄØx4uŽ¢UU¡]…*TÃÝÚŽqó˜?ê†Þ£ŸÞ·a'c2›óýñ†å}í=›¼pgùáxè¥åŽ<ÆâΦç®rÇÐïçÜÕ£Za	Zá§9+ìHûoP7DªL*,y&uç#Ž
+‚Ö)ì°ܦ¶{¡†ÇÐçº)ãR›RÃk»GßËK<Å÷Vm=GþӛϢÀŒplTÅçvïÐD¨|ÆmÀ½šïÑÿhÿN†6›üUÉeë:–|ó‰ÝÙC½_­o•Å­¶ô
+ãV›ïꁩ²éÁAXı[ "ˆÕˆ“:L{̽ Ìs –¿°oäï(ø
+@á ëN þÌ-Ø6è(
+Ü‚ýί¸®¸/ 8®äÛ Þoø6Ü‚4 P†ï/OW„žÓÁµUìˆþ@‡ì{ t먚Pí¨Áw&pŽz`Ö; ³ñ]¸®&´Az§Ž9; ZöÌs´£Eç¨cŽ[„ûíB{tãº{pì²€•¿Xõ¶ÿ²hßÕï0`À€0`À€0`À€@µ8V5""¸o¡suA! o+‡ÓUìöbI)€e …#3+¢• JU¼ºuõÐ05¼ZZÛæµwÌÏ,è„E]‹»—ÀÒÞeËW¬üʪ{¾òÔÏ↓ÿ^1ÁÏP†Àƒr&Äpù)xæ@tAô€Gàð”¿Ôï½yŸ÷C*¡*÷Ü\X ÝÚskalƒCús7/ÿ§ø/¾t8÷U¤Ð÷}‚…õ¹ùhP’Üüé:ƒZµÊ SöTC&§S`…'r:ýûrº	õ7r:ƒú?Z»Z;[Ú¢=7÷m_Ø·«{ëæµ[*›·nZ÷åÿ€V4o+tB´A
+½6Cl‡…(w¡A·b{-lAC7£¾	Öa_ô㨯E3ùñÿª¥™'á*rc+ÚŒ(°À2„Ì¡±F%À¬	5µ5UÃzʎç˝Ÿ·	¤‘{O±ê4#l‚ÞžûÊÈ
+_Ã'WÖð©OYÕž~ñr¢M­ÏýîtÇgÃûmÀ&°©~wmæ %æ›x
+endstream
+endobj
+83 0 obj
+<< 
+/Type /FontDescriptor 
+/Ascent 832 
+/CapHeight 578 
+/Descent -300 
+/Flags 34 
+/FontBBox [ -21 -680 638 1021 ] 
+/FontName /EPENLO+CourierNew 
+/ItalicAngle 0 
+/StemV 42 
+/FontFile2 84 0 R 
+>> 
+endobj
+84 0 obj
+<< /Filter /FlateDecode /Length 23470 /Length1 39672 >> 
+stream
+H‰\U	T•ÇþîyOQ$"*¢Ÿ;E%
+¬b0‚5úXE¢R7Ô’FµÖ%uoã‰ÑFqy¨iÍI¤¢‰\)ÆåÓTk#ÇXSmÓƒïŸ^žž,ýçüÿ?sçÎ]¾»@ –C!ýÅɃ‡¾µØV&Ô‰ù¥¹eï†VÚ€Íq ÕåWÌsìޝû@ön mªŠÊf–»ñí\ÀÏ
+ØRg–,,úCKew ×NÀ=½¸0· ¶2ø¢È;!g†!`1‹¬À÷dÝ»¸tÞ‚†=Õ1²®ü{•ÌÉÏ¥K9éÀk²Ý)®4wAYÛt:-ç…Ç+¹¥…w¿ýLämuˆ=ƒËæ̝'v˳µõã({µ°ìá±+@è?EÞA}Ð&ÿ*= sóéû¥µTödßòÃWätÆÓ÷É“!ã7¾o¥=ù£ (ÅzlÚ0:‡½HD¡7B(q؈Ÿã/È4„]¸F ØXèˆe°¨»ˆÁr*—Qˆu§"u3)ZUS¢DJ6!çEâ@ã/ë#.˜±ÐϪ~.m¾¡úŒÉÃ;ÇMú êqziX¯™Õf»Ùöx¨Â½'ÍS*§2áÆ|,–ãwh lŽçOÌ›bS–Ø°ÄYŠÔÐnã%áþ%¶àC|Œóø·‰¨õ§åt™mðÖYufœÉ3s‚‰HÇrÙ
+§>4šsTŽ: ®xÿf}azˆìT`ã×X‡j\ÁU\'ÅþœÁ™ê ä	šŦ½8ƒ›äG14’iíç
+­¼u[A0Õ‡þzlLwãêpEæÁTQWŠ¤LšF•ô:­¥·h7í§ƒÔÌ6þ\)õ}Z7[MÆßl3{EoºÃ™XLx6à®ø7\ô<]âHv)Òí¼–5̼`–™Sæ
+œè'¼ñHŸÓ0U¬^(	z§ålÎáïø ¤ÈŸ‚9é%šLóÅŠtŸ¼ÜYâË%|˜U¤jÐSõAïQ+Ä:lÝ·Œ©6sÒÔûâ;\ô$I^Fæú"ö¾è9…[ø
+D‡zŠ­©4^üÝ"òoÒcI'?^ÊûÙ¨xµNÑ]õk¢Ujm±Ž˜“&¹¥`CWÄÈ)Ù”‰l‘]%hîÂ>‰ÌÉž&|M]¨EÓ8šBYä¦bšCeTN‹i‰ º—ŽÒqj¢ëô5k¶sˆàÉù\Åù(×qßRP“U–*W‹ÕFuT]PÿÐAÚ¥£ušvë…z‘
+6eïìWÿ8ôq©7Ï»Í{Òd%[?³V[µV“õ¥	0Ÿ˜Û°#ZlÌÆL±±Rü_µx[òcŸØøWÜA³ÄüÁBQ[ê&÷ôÅ-IìN˧R6É(¦Ù‚ÿrª¦Ãô Z:CgéÝ ûLbý £¤
+2¹H|ØÆÕìá«2ñU_åRCÕ0• ÜâÍJõ†ø³YÝP·5ë=DOÖËô§6e+°m²m·ÕÙ>³ÝµÙú´G|ßAäQõ\«T	v"•ºË—8Ž*¹…~ÏáT+ÚÂUºJç$¦ã’å¥èÔf»=ÂÁÔÆÝ*ƒ·r”šªûªv˜'õÎáìÆú-œ*™V¡x'ÏPÛõ@W°Lt‚éߍє ±»Œr‰P”:¤ÏµJ´ù©Ç¶R4+õ«KÒã‰ÕŸ)‡îQ:w´FñZ8eD÷ä?N*ðªdþ‡4±úµ†Â×…V‚T+>G	§w$.±R¯R:íPC°”ʍ˜Ío¡—q/ÉçLü‹ª(D*·EbÓ›‹ U 磑³%ê(˜ÑRÉÓR¬¦Up‘—N ž×c8ªwõögz|jT*j¨EŸÑgX‹¤ZA3ZºG¢dÈ.é™R™ª¯dM,lì’üY:àtäG´„K0‹¶¨¯h7Æ‹(Tsy,m²éÑj˜ vLºI’}„lq¶p#¿ƒÉÆ™€½Xß´UµÎÕeõÐd›k†­½u‹Tén«¥–Rq:Ótš¤
+×ÆLA5Ò7L(µ£\4RaÖûG½ƒÊM M’ŸnßëݪWë×õ|½Dî¦éš+°Ûð'¹MÞ•{«Ÿà8AÐœ&½g–ÜÑŠgÅ»Œ‘®4NöÒ1Eú©[ºd^A¹tÞßb?jä†/xL—sE˜-ô¹rC-ÆR©ÿ•X#=`öà"ïã·U¿Á§¸‚gᮩOU"MA£~S/ÃdôÆ$zF4?'Qê)ç֘ˢm ¤ûÇH•JÞ›fÓdÞóžy{Äö
+ö1h¶'‰‰‰Ï'ÄǍ9"ö¹gc†
+=xP”+rà€þýúöéíìáèÙ#¼{X·®]B;‡tz&¸cP‡öíüÛúµ±Û´b‚+Å9Öíðôu{t_gjjTëÚ™+„Ü܇Æþ˜ÇãpûØ?æL΢ÿãL|™ø'9âår¤8ž†d§ãÊ™”%ó_%;³ž{¾yšo¾Î7”yD„p¤t)NvxÈíHñŒ­(^•âNq5þIΤBÿ(jüd 3O¨³¬†BÈ7áД‘5¿@1ÊÓÍ™œâéêLnµÀ£ú¤äxÒ'e¥$‡EDdG¹<””ïÌóÀ9ÆÓ!ÒÇ‚$Ÿ=ÉÓƧÆ1«Õ¬vÔ¸N¬ZóAòÜ‘í
+œ¹Ó²<*7»UGÇHÑ›ì	]t«Ë÷Kœ”µò‡»aÿc½|€£.®8þÞoÃ0á$Æ»Ì%HFeÂiî$	B´üUî°ÊAÈÌ82¶Š†&­¥­ZÀJÁ&TZÛ‘Ž—X“€5qpШíHÖNÕ*¶S럤uZõúٽ߉­;ÓÛûîÛ}»¿·oß¾Ý}k’
+36m5™üV0u`Elxk™Íãqdð­WјH62ôvŒØ´*ÈhÞ¶x,¥Û2hgbg•_K¨Ár7SãBW„Z“7%XšâdJVÞY–..Žôg^“â†`ru,T–ª+	Å×ןwxš$WÞÙ33œ9²enõá¢ÉYÃ>§Ð/Lœ4¼Ð’os%×Ý–šVæ-«V£Ð"l¢I,Äœجe$›Ѝ_\ù*µ‘Ù”·(‘,ªµ|û}jTEQ(˜<#x@蝿Žä¬÷9£+ŠÎˆ-Z?É»í¹rªª*5gŽu‘1‹XSt¼ÜÕ/ž[}{Ÿ·)´¹(Á|²Û®×ÎÃüeev;û"²JªcE,[ʆ’´DæUÅS^¶æZνƶtäZòŸ'Bxr¯Ø·Á¹©±•ùaÑô©
+­µ)þ_š[²íM«BM+ÖÆ‚
+É„oÛ¦Õ#jÙöù6¿”šº(fJ<¿ä•׊S~)ßÙVbSüG;§ÞØ7f,^é8lL%®ÌæññeeŸó£¾Ìûö+GÎ~æ«™ª­Y_8¢>B½‰IƒÂ•^ÓêµÉäømœ@Édc(ؘL$×÷e:6„‚E¡d?qGersC"·¢}™Î’Tãö8“hÕÚ¹ÖØöžà¶ʼ”ùuÁ?ùG„Cöž²=l®oëx¢Ç7Á'úºw½Î•?ÊN­âŽ"f=EË!yŠ¸ê˜Ná5ò'ªCº€›¢Eîç´™~
+gû>^	ûy9´ñÅ!"³™!J+w]+-ýÄ÷«¤H*¸šå¤w™¼¡a$ñÉNnªCÜ5ÈÚÊ-ô„ôÊ“hs.‘Ã.Ú:h}»â:YÈ]ÖÂ{ëÝM„t?}&»S̍´
+IgÓ!¾Ë¦?Yi¹tŸ>âf}“ˆc‡Þâ´vf!†­cœ)èz3’6Èý`­¤¤ŠÈû'ò:±u%q~Ñ÷[ú6ó¼—ôã7£K‹Ó©L‘]¼ðz¸ñ?Ö
+ät¡y3–#mÞjÞ^S‰I†°ókȲo,‹ÖË&A† Ó¦"Y Ö=¬ºP_Âz×2f?–9)ïxáÌÇò5¤ïf¼¹¬Þ9z;±³¿âv]¶"Óöngž_ÍœòŽ1æN‡}Ô?fô‡$çp!v³hÅj1¾³°rv°"«°¢Z8´3Cûb{LKx¾(wgNñÞ)a¾ïZ6'îj‘xÛ–ZåíSjó,r?¢àR×Ûý>«üÙ?ïÆ\TèãÖ»’hÏ ITú˜¥Çüök!z“©™Óžê…r„6O7é&yß°6ÊY.g¥¬¥¶æцï¶kÂƒ‡ãþÇ£ïËÛ³öߦY{Þ•·eø»]Ó—ÝøSð¸å²™]iù9ÐŽ…åÛh?‘~¤Ä‹ѱÉ|„—E3“9™—ˆ»íNmaÄ“n—Ʊ†Ý£ßcm7â7ÇС™J‰ÞNÁÙÀªuòÞX£ÒH”GÜêâ)Q⸥ڀî'Ð{
+kØ ·é,J»ÀmΓÛIýΏIˆyN&ž¬F¦ÕÀžK%Füz«Ì"m¡Ç4ÊjÑŽÕN8‘cɮݼ{:úîÄvwãWk¡Ó¨Õ’îùD›mŒÞæN’‡Ðó¼Z¥ŒÔ„ô‡ˆdËå¾ú._Ûóä	N„^™Ÿy—»ƒ/Úy/;üÒêUèR^ŠK¼r}œ´W÷RjòʽKðê½^ØtòÆyßÞÇå Ð-¼}î“Vý2kÕ+ƒœÛØçñnÄêÿ?ȃò4qös¼ðî’m´>)g}ÿLÿÝÎ?y¿`/‹]ÊIná¤=+w›“i%æåéV¤ÎϼEº ¡\ëqÞ|l*Þ±{Àïõ 8¡¯èou#'ÛÚ®«õR^Bcôù>½ßò–ê¯ô´NÒt2+{vÿð­=£êx‰Ý¬+áuëMà{®Ëíz¡‡ýíÄòvoÙßx’ý=ÌIù¾ìïÓk{„&öœÎò÷è=zͪ'è_Ê:Tåi®üø¡{·»áD¦±ËÇ˳Xhž?¨GõC§§;,(ûóÓgôù¹æxþ\ÿîÓΣ³¶ÉÓOÿ&úöñ©³¾Ãhζxïoíe¿Ûö±¼Ð,MkÚñ?Á«mý4ºÚóqsyXnwõÙ£_—J7'	ðf²Úø…¬—«°È+øÆ$<à –¸^‚2Šu8A:ÉjÜC«¥[ºõ/zFÏ°¿Ûô1ý@ßÐJ¯«¥Ø7Q©Ô×༡ïê/‘x+ìc¬—‰ž—!½I¿‚†CrÃøò½xàdyo?J:Îö6ý¦^Oúé¨þ@_=kí¼¬§X;—:]LŠÉiù~Èz=/âî(ÎMtx€]{LŸÕAÎÁ§ñÜ~­bgÌдÞl•gÜ÷ûõ	ý±>åöx•K³\ÊäÓ1,0¼~6]Ao¿??/†ßÿ	§8•ìagò¿àÓ7Çp4»¸#«ƒã3¾Ñy:MÎ éÏšÁô5ó#}ZGzÎ)¯é°tÂ$GÓãæ×Eç™AÙ/€YGÞîsŒÈë€åîpíÌIAð"°œ8pàÀ©3}¢æqóóty€¡{{f–×¼-6=’žÙÅ\†ì|ºÎ§; s ;}úÓ™^(ŒŽ£®òyxÌ­;½xYM¿+\v…®§«N :Ót£U7Zu£U7Z½G®Hí‚ß¿~—ãw‰:Qe³}Q~¡;]8ÝçPˆŽ7qs­Ô "æÓ5æÚtMàÉhÂ\ƒèG]~À¬&ßáòu._æòv×ÚîÊ·¸ò-®\çÊu~Ùæó†å—Úܬ4«¸Sf…YêèrÓÀ˜eÔ-ý¢YâèÕf±£WÁŸm¢ßèRÓèêK¨×C¯¤nébÓ˜®\ÝL}mÄYÆòëÑ¡ê1’åì À«Ž³Ž¼¼ Œë©¦ž´ˆ5Q¾ˆ #BKDŒ‰êH—›Ëi¹Œ¾—‘GLØÍ1L¯0#…±UÉa–'Ìò„eŒ	“ÍÅrˆ€å F!§šïªÑ«šªÍ\b„€)ó¶[LЧ¯S·žïu¦ÏD¢ã¼^Y`3èðzÓ£¦F§ÑÏö–u ì‚±R—m‰Lðê¼:³Ì[f
+ðîÙ=áp£ó/ÉÒóJ³tbqMaôV33Í–ýÀ òlTžÍTsµ ðpþÅxÕÇ6u]ñ{ïóó{Ïö³ß{vl?Û‰¿žc'Î_ù¢	yIèÈh‰‰CXD§)í:bL+l¢ˆ¦ôŸUëþÙ¦Ý"œÐEN
+ƒM“ZP§iÕD+폲)e0)k¡e±wî³)¤ ©>>çžwÏïÞ{Þ¹ç~<tøOÀÓ€Ç!qF^0íãÊlà>.3Dqè)†5Zè…Ö& &O	h“ lj?‰Ô¾	ø8ð…²-b$sÄHÎôoAvšd‰LÁ‘‡øâÕŽ®ˆûF`0’qˆæ8Ämœf¡‹¸,eÄqà3À,3TJ E€Â@! ˜A¦
+fïU ã@¯ ½tfÃu&y!Ižnz®é`Óñ¦Ÿ6iºÐĽEF€†É°nAn7ŠÌûº$bB$âÏ
+9aÈïR7¤G÷eĹŒøNF|=#þ(#dÄ
+qmFl̈y¼S÷$Å¿&ÅW“âSI±9)6%Å•I±&)vÉ8·!ý֐݆\aȈ!+ñ¶)	çð 
+óñ8þføÁÂyž
+¾ÎóPü°ô4X*£•ÓÁeáÝÁºRMu©ÐÂçMÐzÿq8©×q—¸§9kã¸z.ÁŹ(ä\¼ÂK¼·ñžçͼ‰'<â]ùâUŽ_Œ\f‰f•&C—•„ž­p‰Â<k~ÎÉô‘¾-ݸ/wqêÛÊÝÞÍcËÛsl´ç”>Ô·µÛ›kIöå¹âæ\k²/'l˜Äø•4<åÈKyŒ¶äq‘Vö甞„qÝáq¹L§i›IO#÷¾No§²Fn[›z„.ËäýŸ7ùàxR™{­oË@îÊtnUŠ•é>ˆÜ–Pf`†´’æÞÔi¡Ez`Ærˆ´ön¦õ–C©ô}
+A}j…iaàPˆâPèK¸*ÒBq1Z”pU®j	n²#Ü›š‡ïa:LÇRÌÝfwÔ0á0ÜU60aîêC˜ª¯€‰=ó@4G»“ÿç‡gà;òÊdρÞÑhïp´wx8wlß3ÞÜ¡¡ÐêÁW¨)”cª‡wîz†–#£y|%:šÊõDS¡Éõ¶çPóúhjèÝ:0y@MM­××÷FGRé³ëFj'–wôÞp“µ#èl„vVKÇZ7ñó5¯£cMб&èXëôuÆXFÖCZò¨;Ý“)•g‰Õ	<짻ÝÒ·×ÙüXØû‚Ö„ð)dM¦s¶hwN¦¦ú®ú.j‚UFMv¨v”MÞûgñ©²I‚j9ڍ¼½ßLÁ?›-+_ñŸÍf÷ìÈîÈÒÒøg÷ì¦Ó„²(»ÁtÙŒó-»1Ý›¿lìÑL6›ÞƒŒ9ÍîE´·=TÜïüm/ôŒ³&Ê~ùG3¾ù†î²{1 (po9m²ô²Ý êd©ºß€`à¤àÐÚI3—Ƕ7¡–5Q…A3Ê4ßÀѺiŒT~ã÷¼É
+ÒB{ÿbûév{¿´׈öÅvÊË—…å°;ºb.ÞÕYô_2]„-Žî2gLÿ@~´I×Øj%ÂzìN‹â6›YÉãvV¬q²ý‚àü™]CH‚©Ë³˜E^¬¦cõ/.´KóÒØÙ.+mm˜ŠåËà;h•¢´4¯\á®pqfRáR< ™£‘x5©&CíoÄmvEåžÝ±ãYNUì¶Ø)ßÊb‚7G­^Ùb»\ÈŸ8YÈ_²YdÕÁë°OÖî’ƒeok"øT¢úLÔcA1{Üko-püuÀñ@¯òÄ,î¿çïmêï8l¸»Ä[!xWÝ´ª¥YiZE⠁÷·â&éíÍl¡X˜ˆØTðö~üÄIüøeðÖk¦ÆñÁ1¼­Ç«ô])ªþí»£±=êç!ôµ¯kL­6,~Ã9¦½ëùTYð¢ñuµ%,.;ï
++uµq‡…5ÅP}½Ó\±˜¦EµXTø]€ßïó|šSq9ŠÀóš"»E®iÑ ‹>§"¬×"Ô›P,PEæ”AžGœÖï)ç‘Ûóø'ºƒ×ýýJˆ¬é?	Œò¸C·nL<— 	µáísÞ<ÖÊÓmÌöb»O•æ}^i~hžj^'-:ç:ÛÚ ¢UOeÓ‘†¤ýûҎؼIþ!Å
+2°+W3Au:Cèù!,¯2²GŽ•’È̱÷2(~o¦ZbÕåiÂOyŠËN‹ä•}…OKªì®8}º¢BQåÓ…©²×au2Çq0èóK›UÙáæÓ×=¢¢VÞ¸Q©*¢çúv¾Â!«fX8Yøù3n@Z©{ÞCWÑ'°‚¦MøSò;ôž®„;‡Œ,hW"o’knq5ÎéÆeñE,Þ÷W«Q7,~°"ªZlôr1K8““„•îÓmè"d*KTÓ®_Ñ¥<']Cý´£Šp“Éy÷—äàþýàÓ‹g0º	W©€nÁS¼ÕôUµÍà*dì ý×Ð*VŠWÔp ™<©µnz¢…Š›o ã_+ncþÉŽÁ¢ÓW‚«ÓŠÚ„µøk ð-aÞ/å
+¯á×…“ø´0¦ñÛø’p_Ã7„ÛøŽà±
+ØšÇïü†±®AƒBOSƒüùF3ïËyüÖä9ˆÊÂÐâüÂ|9.Ï
+á/Ó\šWæêbFö˪…üÂê²Ë*«}>S¶
+ö”Ç®:¬°ˆ?‚÷¾Î²HExâ¬B,ÑÙâ-Ħêùš.ôDqÅ‹Ÿ!7pEñ³é€]°óv2[¼ƒ¤â­©J{=mQ[¼¥GkØ€=h(c|U at A
+8Ί‘¨=Ü¡Ôu°
+ËŠ¾”'ïN/×:ì겟Ïb3lu‡Ká•nC„;aÌÉÚ&·•öžïêÛIƒTíýÛUÛÄy†¿ï|gŸís|öùbûì³Ïç¿ü8$‡ÆÍM´ƒÁ*•‚Fš2:EY§Èè†èÐhÆš!Z&hT-AýaUã¨ÔNꈶ´ Ð•E€Z‚¶	¥M²÷³cئ¬÷¾û⋬ç}Þçy>UQýªO•UÆ
+†ƒZ0¤íI3e¦ÍŒIÛÝœ‹sr,çà»ÍŒ	†…¢R½…³ö„…éfǽº…ƒ*“k°P¥bÈÀ•@…éþów³|‚&©²&()~M;c¥©o,I9$@	òPT/¥®3NJRö{`Å&Ã÷lšèîltAñ“UXVuòO.[
+,¼²!oE:)/Ü©‚ÿO2"?û‡ØÇWf5iÂ'Ÿç+† øáãhƒ¤Q>ŸÏŠ¿u†˜·]èÙ1oCSøn¯«ù¿nÒîâý‹ædÔTûw7ïž“
+¤Úç>µ›:sròŸ;×ݑ׷¯>‰y²ŽmíX¼~Íñb\OþíÃkNcªuâsh,õ}œãõý",MÝ°¼‚±Î ¼W¼7H;½eê%Äág,'Ïq^þ¨“¥È;"f
+eÕ  É!å2õ)¨ÞÄ8YN¥äQj 	H¡NÀQ«Wp/â1„Z…Bèy|¢Ê ˆñ~bœ¿Z±ŸññŠL"~¢(¶70íê[ÿõÐ’CÝ•.zužõÊ<·êS3ªYÔÕê뵉>RqtòŠìôª.V¥o|ó€Š%…Î-&jça€Ä+€Ä§0KYtó0ŒË9«!h´Íõ>V7˜L
+¦‡RCéQî`Æé]þ<WÈÐéxFËÊI-çd7!çKqÜSœðÓ)¶Òg#Ó1Gðh¦{@¯º:.®¾„¿>(c…“Ì3ì³_ÅÄw<ÔJÔˆØÕàûnêÔ€_8þúU2oPˆªwtcü8žFU‚ÁE1àODMŸ°,¬Dd‹”éÁ¨B	êÇýÙYz¾j. ¯Æ¬;©|Ñî°OûÊ´2Ùí䘠ž Îòí)ŒþÕ¿(òç_®xYµ;9^P>¼ü¹óf×/&ÿZ^¤ø¾î••?ùAªoèW݇Kás/>xzÓì嫝üìyÂÂ7§ÎÓ€‚–è+€Í‚µÎ˜‘fß3æ%æ~†ìëõÁÂémùí…=ù¡Âa©¬¼'½'WÎHg•ËÒMeªY ï
+Ë1è›P‚†`‘f½îlJ°5Ã	 &BªM™
+j	wˆFņÞ|À,¶‚Ûo‹öxqf	{,—¯h…Úmõ³›ËЁ50âVÛ[»çr?^í&â76¶¿ Ð/à¡'ˆ4cbÇA‰VÈL¬¼*‡¡¶¼‘dšI´Å-,1>yÓÂ2-ZUÚ2 Ü
+ÝýTèÇþª¹›·‚W댙гڑV¥òTéRýÕ&Ù¤G»Vê»ÔäUx^~fßÖ¿,?Ô­Õ«êÜþm;Ö-ÙÚÀn!°díŽ]ï?D½Ò6üÐÓÈñ"ð®Y5Ë}dJ𦮷t´ÉN…Oï?ö›EÛÁu>!“ù-Œtôå§ŽRšÎ„#!?ÀzáP8|Ôïõ‰%ü#K¬«;ê‹êz/eƒi£ôH€±ÙhF×<¬÷£:°p¢pˆLyaÏﳕ¨
+–3u½ápy5“ •©HÇ]–F«1šöqàCB;Œ[íè_0q½»¿£¦¢Ò7ßARÒY›d[hg ~AÄ‚a¹¹vª£v÷¶äú±žÇ­B-)ÔÓÓ*ql³M|„?zí˜î©ÔÉ·I}®ar	^¶Ü–üö}‚Ý䵚ÎàeÔç:ðü-Âs@®³bî 3s¦ÕÙ¦1ýýô²ôŠôŸÒï¨g_X•ØOH,Á"³25ü‘z	ëè • 2hŒYÎp‘¦]ÈLH%üwË©]õEށeê	”¦ú†á›½	£„ÏŽðjc‚vÕ(|3¯€ÑøDw•¾ä¸Ò<z<^¬íWØ„gˆg8¡ía«¬r›¹0ÂÙlw?jRAÎ5ÿÃÜx¬*'5ùÆëçm,îüø׬Xh™^žÞ¿í¡Ç7lˆzà1H½u²'97üö|b–îUqó;{·ïn>৉zŠ€n=¨HåðËד¶˜–ÕtÍ,O]Ghê¼U—§ï`çÐóÙû饬=  |£Ó÷Xåo3JS§,QxÛ`=%xs=MÓ¬LˬI›lFš-Í—º¤ŸJk¥Òƨ4lœvŸ¿òHnÌ°Ž¨ÝT½F4¡÷D¬¯ÕצV7¯Êˆf>áλ.pâRâ/ˆQIŽø4XQù€'†—p›.œk¦šÀDÒŽl†Qìu£fdÏpcÑfsKøœåe&Ytz_Ø‹(Ãg¢™\†Î¡Ž£ÈÀ⨡‘X1ǵeðÀ­°Ö½€XÇD7DòÎqðÒë1ÒåÚÙ¤*S‰†¨NK¼WðŠ^›ó¸=”½ÎX8*ÅJøUˇL¤´„‘ba3Ë4ZX÷FÈ_Ü8áIZ(íHVhAˆÁwT2ѵþŠßTrPÕy²ø6U*LÛ!\™æN<†|2£ÛÔÁ}÷ôž<º÷‘#3çtæv¼nQ!à<bºøæä1Õ|aåª]»{–/í ¤Õ+>qû׃OîûpçƇwõļª¨¸äÉ×/êzöµ§6¼zß,P¯‹¢/VRtµàßZw‰{cï¢+è
+G×Óa_¶qI¶‡bÜut X'6þ€w°;ÜÛ’»²Ï6¾„_HSÇ\e®œ=îz7+­Å{tªEn„@°?×JSg÷çâM婳¿oØTÊ {™T¬<u%¦¾ü7ååÜÄuÅñ{w%yW’½Ú•´z®V²¤5Òj%¿dc£5mxÆؤ„à8²4â0Å
+„ÐŽIp±i–6!˜’Æ¡¡1dLJ'´S’O´“NÒ|ÁÌdZÒÖ…dH›i±Üs×òú¥µåÕ½geÏþï9ÿßy«ª2BèAPèL´%‘°H-Ns¦ÅRÃÔ‰„èPZèëþ–œØ.RâžÐmuáÇõT뫽ÄAÚÛy¸’þ“!0Ñא´Z«	ȼÛÄ„„°Ž‚.¨ßtPtµìGæ¡’n¸hLFG5€ÜsxMé¿Ùåq¾€
+@×ç‘:ucø¹1
+ØLÞõj f³vf/¬0Ya¯sÙsn/|ÜMbns“Ø]°Ü9ë{Ð;gZ„Ê,†ÝÙpÎ[ÓÎÍOŒ;6þDï£É¦?¼øãšåÇŸÚ~ü莧zÞؽûÓýý§©¡ºS}üñ¡žSõÙ…k6
+^¹2¸©£éÓ-‡_éÝtð`±lë‰ßzòµ× [#Ô
+>×üºGý‚–!ìB¬a+Yó°fÏtá1üú(²vñ­,~Yñ¨¿ƒGƒ/¼e9Ç¨Ýš¿éPûsÞ1…æëË`¯QŸLLÀùn{'|¸0iµü	Þ½Æ&Ä<Kùc\ª
+ú€hã}•wþA³•>Þ&RËð¿ì>Þç,v;œ°°£»²Ø§W¾kùýs;}×??«.ÞÈ2jµA&$’M)„!
+;:Ÿ±`$Ò±‰ÌOdò“ÿ!‘¹A—|þðÎv#Úz知TŠ#|Ÿ™N…‚é]ӏP†Ó·uµ_
+,N5jË„þRK5XÄOªCû2É©(™L¥1EiVÇuBˇˏ–S×Êqy‚//wð’•¢	r«BQê’Š’HJÑdŠ¥ÅRGY,4%±”æs!Q\'ˆ¢S|_$¡å2’wËÏËôUˉ€,Ãl[ðûSÉd(àw~çC”ì£Å¢Q+<oR¹´œ¦ÒiÖ§¥¿Sñû(ÿ;x= þbÝ•T:Ç揹€Ü
+˜ á§Þ®¦^S„wðbÄO]å­9@Ü‹º>ËññíüM~Š7|©ÑÌý[@˜éÁª EE&…éå¤1a""ý!®Ÿ#L4`6ph DøP3;m}–/d`úšø¿¶Æo—w‘Cû}PáÆFð=7h:JÓ»&?*'þ_|\[ñ¶/yî~¹Õ¿OÀëØÁòu<P¼<\ô_<N§çß¿™°ê±É#€­èa8Cp†‚¨
+Õâoè¿z39¢¾g½dûÐjNªG‡ãGÕŸÇ-»býñmêSÚ°uØ5Ž39wô[û}|ŸÐç,[n‹¬ˆ­R÷U˜k¹Eá¦HS<—\¤ÞÏ-s0lÆFñ@2‰rI•yÆq!ö~†^^ßÞ¬>>>fR ³Š$RŒYÅXbªÃttAEm¸JJ(b•Â„¤PMm­ÈP"svÙž±çìíöûV{™}ïÑZñžâøçù‹üU~œ¿Å[x}Õ€fä@Ô-ÒvêV>3}&HšÛ&›W“#A`ŽDô2Ð1=µ3˽pl˜H(–\V›SQãI—¦á¸5ªá”ÐP̦hÍ9*äq¡PÈÃWœŸÙh`FcŸÚ©ml0¼=@Ø0=ÚD0*})Ç‘K'÷<Ûqrã䲿„=í-_}áéâ(þÙš‹;_*þ~í´Üçž}¹'óJ÷Ú¡MDrª!ìmlß{G\Þ»Pß¹BÿÔ5Ó¦Óè>tMß©¹påP;¢Í¢[\çyÜõuqsºÏµMìóžõXƒ
+Õ+Å•
+]ž®l¯ç›Ù½Á—2Öº.¨Äˆf*DOcm8â`úlѳªo´
+™Bqµ‘6Q*[¡0"Šâo
+(\\“©ÉÕ˜j|æ‰Ð6
+´MN’ÇŸ#O~úé#¯ÒܸРo´êŒík«ÎÄÖ<^²€ÞMðAšúÛ9Qô½bÉ“;‰%C¥—Ìrªªp"ßB`•3^J|$Mg³õDèÈsô8ye^·ý…ëteIU;ÎnéàÝ‚¨>xysW÷òîýµ{ÿ<pÕ$/"’|*û½µ­ª¬­îYºþà…â_»{Ü"ïÉ<š–üðá‘oczú÷«P{; ö$huv=òë~Û÷„ýÎý®îay8<ù~Õ`b8i·-ÀUáD b\g_ª:¡¾Âx$Òomþòû%$yŠì³æ6›)¨>ÍÉ!Q”BF
+±,b¨˜Âq˜ãÂÅùÓ©P‡Am
+ù´_â…˜™ãá¹b )`Jœ0.„ˆÑl'ûúÚüQõá¤Õ]Á•svÎÆ™,J¼*¾ žˆ›,NÁ%P–H<i¥qØMã8§¦q¥ §KƒÀ0аAÀ@ÄóëÃßD·²¹NhTE¶žÈH*CZf´Àßö¾™nOHOî}ì»Åf9ŒkzÏç}±%±kŠWJE±þ¾žÞ¶ÍÛŸûü‘%¤*Ýý“Õ-©PëAè‘Å‚îï‘·Zú-4o«PA²Uål4*iÖ>3Ê…rä]Oq¾œe®èò{T§SòקɧjÔlVJWid¡’ª¢H[ôf?…[4¦ø³0¡†²ù)S©pA|38¤‚­´‚XÜÁc¯²ãì-ÖÌf%4‡Ficàˆb<xbtf„›Â-|
++·zKÊML6ƒÝ&NæÈ& µ•ºì›ÁæȺ̵_ä?hž]”:š±UÕ™³q(¸<æ#¥"âgt˜U‰ŸæÒldî3¥~ˆÚGûD‘‚ÑÃèm$2ùSlÌ© ‚—ÊeÃÇŠgçܪxD.WõwþN®= ÒQPi;¨T>Ó»7˜1ÇÚU‡Cb#P¶²R
+Ôi\µ\MU«õõ’6Ò@lDð¹Už—|J
+%	*ñΫ¶‰ëŽ¿÷|¶Ï±“;ߝ/w¾/Þ9œãcqì8àâ[3 at eÐ ÒJ×-Ò4¤©‘ÒLÓ¤vcc«¦–5Tm@)û ÕÚieb…ªjEGµ*mWµt‚t ±¡
+Ec#aïÝ9 at B@Õ$çÉÿgljÿ¿ÿÿ÷açóZ1“5ånœØL dŒJDFº;ß™7A‘-®.Š¤ßÅ\. ÉfL ¤´Zù¹rÊó!Aem<ÅBÀnb·²WXŠ•+“‡ÉÝ”Ü|¶‰Þ :—·°˜Û}p;
+ó€ 	³MAϽ1x¦¼*30Q=°›4~jãlfù…Ö–ù!ÀlÂÊñC¬uhºµ±ÔÎrØÛψ-Ë=ˆ=”{>ú|îhèåX„ʶg͘•5sÕ\¨
+z·‚Þ^ U+!¬2Ó»ª¥®.§¤UZhÃb;y¨·KXž:«
+¤•ºYuÌê†J…âÓù¶ ¶_wS‚À£y*¢o(•:uAr‰e2´A#Z¾otxŽ¬ÔW‘Á?OòŸÇgÄ흿%/D[z{=¥'ú6fðyÎ/ˆ]¿My>ÛX¬9ÁWAñÆ%Ё
+7.ý1'fÄìŒþ` 'ÊRBMaiï®ÎÒ#’Ù<-¢ˆÍ,XÐÃ:D9ë
+Žþõ©þÍÿ{s,,¶Œâí0túÛß<²¦
+ÁG+°Î‡
+nÓ“¬ ÷Oÿ¬R]½uÿæ[`pËðg&©ÿِ۵/}í©oí8=™*À±ÛùV1Œ}oÕ0Þª>øªã~!¾äü^<æP~Tˆ¶ÚÍ„LyΟՠf§5-•Ö’Å.ï
+8Ðé(;NWY+Öï'W,Ó0¨a÷5÷÷iu?GDCv3Fø!"*v43„÷>‡)À‚+ò9Í^\!W} kvw­VéÖg3:€0"w™Å¢2“yÓ¶ýÌP_¼¸Š²žëÖs}®jtïéÛׇÆûÎö¡¾C舫,åôt:®/D.ÚŠýèBDÃ(€Ž¢#às`|¯/¼¹Äüá5¶q: ol$Ï’3Þ´ˆsGeÞêîŽ~kîgxÐ÷ely,=Fhˆ.>,DÛx\àƒ˜Í/Ât¼<Oà'þu6ž¾ãfnÜxrêm®§?ôÖ¾›‹kƒ ÎÇô¤l\#7݃3ÇPuZŸ9<"_	ÿ0óüº8ó:ž¹8€\Ä3g€÷ÜN‡*³±TkJH%ÕÑ—˱…ÂÂDCmèûb®à&>¯ökýz"Âx“«²±ƒ™_6¼Z­U5€&û^(Š™ß÷BGj+Q'\\“SæLYBȤ3¡I÷³•Scg¥›ˆ ŽÁ&¨_þ4P·Ö¾NϬvó=íSóԐ·½©ésžÉßFNjÉ­fÝj&aßß`ö݇ûf‚OÜï|7ð=þ	a3Œó[„‹tE…h"°í¿þ˜½ \C»=À¨.ÚLe+8`¥dCý@’4#ÌpÑ(•2‡ÙTj'Tê¶ÆÀ±s nÂ/Y`6´é4&/„É›Â0,[»Ãwšr‡-áØóžolunq?0·Î2¬ˆB	QÀg<È`ÖeBa>ÐÞ	Ùæ`q¾9$«g/h(ÜRŸ3ã¾ÈD±ìå¥9
+ì;ÿìàÁ!"lpÕOW¬} çKÓÉÀ¢
+~s§’;έû*¬zãûÉòåý©5hâf›±ÆaF|w9
+†Ü¶b‰ÉÀÝS°
+ü éú*Äõ!3ª#ÇD`$‰ý‚Îsræ¹Ç½æø~zb ë?nËåÛUþíÇCƒWón>ËÿjðT"¢}}=ùßßxÝ3#$«8ý•9c„¿Ï+øûԐå.ú»6¡£e`Eíp
+¼
+ÿ¦žÖ&Á$œÔZòÀÒ,ݬ-Wש¿ÖëgÀxF»ÿ¡µ>¬Ã˜·Jü$$:x†áx-fxäÍ‚ÌêÊt˜™LÞÔÇ£ïhW¹ÚÕU©jN4èÕt™¢é ¥E•„ÿad$CBR‡ I	ASJ_QìÕ6²;,Û.XZéЍ¹ªAJÕ4"’S¯ kº€¯À!¤¹Q=o†®«š	I½BU•Z
+$L•«j:N4£x3F›V­¦éºÖSÕ-œ„†5h
+[û¬cVÐr­ŽnËå*Œ5n²ÎYWðÝ!ô‘›Ð8Ñ8<	„”ªRQ8ˆ=îŠ|*@	”ÞÏŸäÏòÿâ)^î}µéÊWó—”ÙËR¼×ñ#¸°í‰HâMño‰Eô¼¡gÓë
+â½â²w‡'g4X²G7¾6J—$;¸‘}Í–î.#ÿŸxÌõ
+ìZF`Þ!7e»)G<‹ž]?ý'v—·Z'ȹ¼BηàØû–§ËÈ9ý¦®$]DgçrÝT™-K„ûp`¤¾§¸‡]‘F0¢Ê*:Ž`†Š
+{CÖÖÁµµÅñÆæm˜°­è(
+vQË·PÞ[Âå@8L°©¼ç·öv/sN'u&]ÖÒi]Ór
+‚ÔUEÀÓÀÛf>¯›¹–™'(‚‰7_ÅOÝmi´¦êÛOW èæ+L±¿8X.ŽÏCÅd	tN!oç¹A~˜ç¯ðÃC^î\ôèMÛ:B²Kxcr€é„/Gõ¦Õ½‡çZGK6¶.i¡Ð€B\Å«4 ñxT¤O©V÷´#ئ³ðîÃ0‡¢²šÚ¾Ë™œË<+ñ!ÚEØÉgÝåTûõûf£þߏ¯ßR: V:€sF+áu÷Æ_˜×eÄMˆÒ5öwU¼*‡Ž‹ï³ïsïŠïIÙ‹\8É&¹„(JÔqî?Ì$ØÙÛ‹^¾Ù;:AÓO¢±àéM±ÍüæÄ6´+H÷„zèr¤[Ä–¹²¸H¢ ;æ°y./:Òb>Êc÷sûùý‰ß‰Ç¤—eú·ÌKìsÜ/ù_%öŠû¤ez¿Fö°ÛùŸˆÏH;dz)¿4±T\!­”aa×rt‡´ˆ©ò=‰ÿq^í±M]güœk;~ÄŽ¯¯}í{í{m_;>™í؉_à ¸	-ÝŬý" h¶”v°UÕ:•¦é:T(b¥dlT&u“JŦ2µ´SÙÖnÊC
+*PP{ß¹×<ÂØC»NÎwÏ9>7¹ßï{ü~ÂCöylgjl°˜|
+>SÔÞâláù‹XorÚmzdô@vD,º¦B,
+¢v4Šh£+bǼ¥ÍjIY81Už Ý•†€§ÃÓ;¤^ezA£,CLq[$G«Ô®e+µëcœPpƒ-6¹|·à–Ì•Ú'cv‘n] ÖP©}pkÞÈÑù[ÔšëÖI-PžžÓìd±	h´qN?¸R;?涺e¨eù‚µn…Jí3`ÎN܃5Dïâÿr!Íô£2v1Ðõ‘ƒE‚œ1Ë„Cï‚	§Gß¿4|ªz
+çN
+_~øâ›o|{ß¼Èôî«þu÷ã&lÇËF«Ûÿ{Ü[}çOªâ[cPIJF	t¹(è½zŸÑNˆør¾ßѸ%ƵTj‹ìï6/ÓbŠ™žõ>`nòÏxÞ›o¦øxo¶ªl3ŒüÎÞ\hfš› Ñˆ]Â’·-䓓׿•üa¸©ü©ŒÔo.‚÷ÃÐh§L¿Hašùo„4ŸGCù<º›˜ÞÅ1Œð	G”4ðª,	+øFS«>•ÿ«¹ŒÏ<;7=Ѭ¯Uo`kù•ù¯m­žÁŸT×OÏèß
+/ÞÉ{K—lê|t„ú}øýø=f●"¥öÛâCA¥3îòäV§6¤tÆø¬Ô¼Ôrï²ÔúàúÖM¹gr{c¯¥Þ%gï?&g—ˆˆ{ª'ЫljÝxªõ‡Ÿ´ž¾£œ‹ÛüÇkבÙï‰QfF³ocÆâJC(Ñ$Ñ"‚D˜ò·%©Û“ÔãɤIˆ†I,F5Cà³%˜Ñ¢
+Á‹øÙLDB“
+.Ù"í’ #à¯À^/
+†N‡.‡ô!ÊHìŽ"‹ÛØË,Êùykna^ÔËCãåñ2UÐ÷¯ÕeçÄ*5!(Øšòä:ÔÄÿß•HÍ?Ä-™¨yñòe‡Öà±Ú$x~òqk΀
+q8LA¶çµåûi#ÊêÿmͯŠÛí¹ÉÒÉÜ
+™‡µê?zGÄ|ùâ‡Û÷,â™"­Ûs`°zõïkÇï¼zŠ±TçMœ·¿³ü¥\çžÏè*öœÈ-]´&¿ôy` G¡'¸ '܏Îc÷eøú2åÌF÷÷÷¼Ã¾§;~Òmy0ØÛÅАØßµ¯ûŒçœçªÇè£/éfTj)öÇ‹Ñûf{»Á…ð̦t{X—ÌÚmHçhÉœ9YG¤Ô¸SŸÜÙ’(%_17ÓÊ™‘ÿ Ÿñ{{]‘bŠ„I±k0º%º+úRôõ¨!*ö¼xpÑ…ãЪÕDžš0ᢎÂdo‚HÕ.®ÞCGà}L8Îi"€×Ô!áPïò3·Ç­º;Ô¢må´/z¨¢®oQ?ê¢îY­—rlxeÛΟ%¬\} ëëýç~söIêVmçøÈȯz{ÚŸÿÊï<¤ï”(:ø½‚oéŽ]«Ò_Í’ÜòÔ7vŸn§[ç°µâÇ#kºóóÞðlßv‚2³]×sÔzúƒbÌn¶æXH»˜Ëc2ä0¤StÏ %†9 ~¤‘XÁƒ¿dY‡·Å +µI+¥w%½]*H}Ò€´²éuécÉ$ý#B)5U˜“*C‡¡åO×RÓgTQÝŠ¦!s·o˜ÝÑw›úœŽU÷Q÷èR÷QMu;2«¦Q7V‡UJ-xü6¼w;G”ž@íúá +ƒ[ôÚÐFßxÃ9éBàsµáªïzà‹ ¹‘Ñ7`_c`»ï…†NдÏòŸy^e.Ö®ÑÖNDQ"ÑŽä˜Ã¢–0[Ôl³Y̲#¦ó¹$¢Ñ!GÛ¡2…I4*ÎB8#“)~ŒÆŽúÐ Ò!oZôúM¦>ó€yмżËl0‹©;˜'Ï:ïÔî(͸M9ÿA¡ÖŸ¡²ZVòXs8x\-#3o3F‡Ë­»˜¤nêÓW×ý|ó\¿·Éê×xã'¶.~LUÚ‚¾sªûËß|{s³YTýнó­#ª+Ä@§´ÎÇýEɈŒB;Z Ì‹¯”Äž–o7â–}hŸÌXU9ÐIJže]¼låÝ¡]‚¿Ž0ˆ°d%9Mô„Dã„Äâr(Žuô ۍã ”E”1uŒÜÈ`E¤›ÊrFeQÁÃ~ôÃB.qаÁåñwŒ„D¢¸ˆUGCŠbµ62›à?Ž“va‘pH¸,èªNP+iãø_ó:æc5öÃO"7sz¬µ‡ö•om³“çÊ“å	 u¢¬æÊMI?mm7Õ$ˆIU)˜n¡v¥
+0¼sªªÉÿ¸P‡T‚Šov†
+!ÅÀÅ™{­2{7Tû»<.›ÍåÁ‚ÓÖäô¼Œw4àïŽ
+.˜8¯Ù¢¾ÓÌ[­¼Y¿të.Ü9§Õg`û`[b2Å縞¥äùRÑÚçîKvå[Üåäâü*ëZ÷ÚäªüHrwþÕP…«(•l¥t’;©œÌž,ý}š½T˜(}Ž®à+lH€Ç¦1Wrp¥0
+³J6“ÆJ6[â8ίd]Š’M‡YŽõã´ã4ÝŸ%vbqŽ($H¼Ý¤D²$Gf§Hš+̦¢ìÁbòšf31æRgI©TÈçáp2ÙR¢„+tX‚±Áj5ȲÕí–1]vØ
+m†‚¡Ï0`0¼=i†Õ#-«eøKtßÒ'ȃ²Nï?Ž	Œ€y-›Å…“€#ÍiqḠˆ9Ô‘bG7Õ5&·Ëõv¥¶°‰;4”ŽúÙ¢˜.°EOžlˆóØ&›««Pgóýõø‚GW{΀"yŽ©NrTÀauç©=<ýv¸ÔðRŸ“©]):ÿIxµÀ6uás®ßÄ×ö½¶ïuü8×ñ;رÚdÇCŒµŒQÙaŒç’´cØhж+ˆçhaD…hã!:y+â–©P54JÝ‘–PÚi4ÎþcÇ!Ðu“rÏ=çÜ#+:ÿ÷}ÿ÷Z«H»FOÈ4s$Í°Elðq
+X›Ëý>¼ãð±œ&1æcüT‹xj£6òYwT¯¾°ÁìÃÛr.ù:¾šiÉy5»rŠ,—À[2›\t}‡¶Žx*ž¼€ÎîÒ=73ox8ßfðۙɹy¡EÉÈð`^Ã2)|hœžÕæ—æãx’F[­®j©sd0Y‰«]&.x„ø2ϲ¸²Ö´À²ÐQKäj²XÚ%µHòÏÈ¿<Œ’h<<<ò|¨)5Ì¢›®aâp¸‰C$R8;­lG:™I]<‰Åá8Ê[ëòQk-˜Ï0‡AˆàŒÉb1C·7CÅôLÂöøýÅGÈ#I˜•ŒH&hâsÌ.ö…Cn_H$&“Ù'
+Ôx|³â8ÞÉœo‚ûŒ,Ì’âC¦™¦m&™IHŒïZ5é!„@éFM•º4ýƒ¡*ï³Æ)ÖÃ'ôëíLýd?ûò“YX¢Fð×øk/øëVd3Ú&…N5Âþ³ÐÿK;ÇìˆàêËl‹ÓÕ ¾…ŸÅ‰Ùc¸‰3lfênÎ1‘1¨øñ‡cP¬Ô_Sˆ*@§UßÁ:y4Š¢iøçÉøv+ÿÛ£CÙŽšr	Âðµ±`Ðvp9seM(€*ð¢ä7ª»ŽFd>•×U)ÿ¡yø#{÷q·[<¦jæ‹'¢mªs…'¹Ób—³§p(Æk±€CXöºq—Ȭl‰¼9Zx,r)öAìNL€lt")z£Ä땈09ÌÖ`AA,Kè5%øv²o
+ m‚Èt‚JØ’†YI°R¯pûYâPÑÈí&IÐÁQRMf’…ä y‹œ'·ˆšˆ“¬ÛJ‰’~¯WTžWÞRÊ•ÂÄÐÙÇ0Âášá»T(qYÖý¤ÓPìt4•¦Nh(¿ò®ýã3Oa4gG*°€e#P9<ÂÈP«IQçÖ|”¢ÑÁQŽžEN8by‡~óŸ"åÊQH€µ§JR)GÓÄl.ÈcJæË~ã³îi¢ìÛ×÷½}ãÙM3›štkX«¶°nÿ¬ƒ§(d.Uþ|FÇ÷¿±æ¥UgëÖ¾¾¯~]»Ý4mÉ3Z›É¨5ˆ¡uýټõ¦‘Y9û…¥ó"¨ý¨ý<ù *B\|²ÀLk¥c£Ëš9© ÈB×f!Ê‚…—Šœ*Ö¹}ú”®×µùˆÆM ‡Õ%C²"„d*ÎApóŒRyæ ½›ç’Mµ«çnq2N.xm|9h²*› ªv ZVZÖ ­ <ÿƒ™pÃúÑb$ç,×àR]iñôÀÜÀâÀ©¥¸wéÎ9Ûý=ê^y¿z at qOm´Èc8®øŠn
+ž©›áœ‹_T¤T)Ýb¼D±R·šY¯]ï\ëÚì<ãú£Ôæµ@ÇypJÇ:GîtZh]iñçc#Ôñ¢)-Oí¼±Åe¹,G†C¿¹Ñ‰•™ÏÚúw^¢Äkl¤£ì·};vôÑG>8üþåÌÃ3.·PŽËŸ³A>ï>øÑGáfƒê<Ì¡mD«3Tóu“%0¹Â÷{?ôßvÝ&ÿðÞó«Šy¿eª»Æ[ãѝòÖú—–˼›½¥sä“äËfn¾y.¿Â»Äÿ©¨PŠË‹A6hòŠ[Ø7Ø=¶Ýbßg=-gÇH¦.Š¬†$3êÐ&#	ªt­reÑ›VâÑVªç7»ðv×;.Æ%–pÄG‹Üìß˷Ý'ó	á‹ãêl«Éú“Æš!¨sšR-=@U
+Œé›Öš. ¨4K€æBÇ9‚ð¼’’Ãï{|±9’p”4¨¼%â²Kp{6l5­Œò­]g/üõ袞Ù<k´~ïPwOæÖõüIVPDYò¶K´Ú§7ÝÛ{¨÷k³8«1<y–]éÁzÊ…
+pÛÇ€N¸ïÛg„–†ÚÿN at TS`E4Û%µÓF·X{Ôj·Û¬’Sk‘š”hÐ pß@·D8'Òë8}¶º4î&Œ
+c±ÄKšXÌvâ­­áPSî’ØOGïg¸
+¥uòð7DyðåQ,Vúü,£$h-T›ÔTbó¢…FîŸrs~W}à!<êbaL£ÆZ—§\9fàãÖ<”Íã ,gr³ãã—Þ[»ö½—û÷d×
+7wï¹ysÏî›òÁG«¨¶ü®{íí5?¾µ®÷åÜÜßßL‘Ì &¸Û( Y at nt=¹LkÙÇ3qf23›©c.3—ÍúL}B¿ýï¶;®[
+„¢PQ3Éùuû®ïÚk]õö•®
+ö­ö}Eûœ
+ÃjË™¢‹²‹¦«EWJõ%£èv#ŒbUɉQ§Ÿ#V6#Ü êÄw’VÉ]‰+›9\ϝ箁É9„Žƒh
+`(@z Ûà‚©ÉH?!2§,œ$ᴝs9™Î‘ûcRV ËÀC&Req«’Oøü÷–;G¼ûUs!kcKn¼™¹…
+Ýïbí<ო;{E|àЕçÁhdãó°ýj(Ç?7þêÄñ_ÓÜ`- ³õ$½Iý,E“âgú±fý)ýéð…poXkU4ún–•4eÃ`çäíIF­èÄɤˆ¹Å	ySAâ@Èä"lJZ+“Ú
+T‚Ýâµ,4w'¢|’oà¯ór^(_Ý…ÿ‚l9#6”ª¢½›õaU0¯ÈvKĦ’½U¹w*?é­Š•NY›,…íPÐ
+Ûƒ.L#ïƍHž2Oy=Írߚ͒ ³Y ò£g™(Îêèp={ÚéØ~üµ5¿Lð6NmÞ»ôkðæ¬ÐOÏ»'¦‹âñ•åû-j‹Éd•YWN{…îPÖÿ4³A¾éG	ìLƦq
+ÓOÞ÷Þ'ÞGd¨X¹"¸jB]´.±®à'ÁÆÄÖ`SâÀ¯öØ&î;~¿;û^~Ïw¶ÏoŸq灝'!1ñeYÌ
+…@×	´)Tâ¥.%­ A×MUÕˆ ëcŠD»ZVš-Ua›h)
+DLm mÕ¤54­X7
+ïû»Ë‹Ð lÝïw÷óÙú?ßÏã›è©~;Ñ[}&d'Y¬º@pf3Ë©$*«ôFO°´‡WF#|Y”8\Ä@kH#•#(Âó×˝â(×ÊmäÞå†93çK/ŒîŠõÆNÅLC±á؍ØxÌS•>}_±êj‘Y!Œ cÙ¿cIÍBÉ
+c÷+FÇ«<Køw_áN_)=ÓûB,1Wål
+O	k5^¬p'Áöêf½Œä‚ÒS’á”;›„˃K?U„L/««fKõ¢á}¼?l_qŸ~µlw±ûå‘“wïžyùâ|àÀEòÂ/uÅxÿÉï”o(\êE?VÚtï}„1±üÈ'—¹t	¸Ð\Ø\¨Ck´Š£¾»Ò„d´‰ÞEBGÈ^ô&y
+õ“ü[ôo˜ÓææÏÌ_™Qãc]·RX"¥v¯$y¼ª3‘ÔOy{ª¼<™Roè½
+ÙÚ9›çTÁȯ–xûd~­«Â×±t²2®ªTëP$ˆš%% wabžå"ʨOœÐ,õD4R9”N‘©Aô¯þÅKŸžRý£©Éä§$¿Çœó
+þ\õÈG:ëŸßÌÐq¿Y	#0xăr§‚.܈XÃ’q ¯Á@;±¸g‚è4?°Ê<°>žXux}ç+í ÃO|‰=bÃK»Ú›’Û7bä'tü7êô…ðswÍÒ–Ÿµæÿ3MRjý‘Ýù/¦Œ<„9ú`î6CK	9uŸVª*UŠ¦<¡<£t+?Q—MX+AZ¥­ÜZ³YµºÊë2¤UêOä :ò» m³ò:‹6Â÷Ih6ì&“9"·JHR‚«÷Ò†³¨×±Èd¿»OÎf«@Ž¥]s”+:õ‡öîCËðƒç½ø1Ѳ‡ü¾°ÙyíÚÄê{_ÏÒ#H,XÙÏ“IPÍ^¢C[Ô)ï”_’A¬k±’ƒv¯Åº-zåםNÕK€\(â„VaH E™½{¼ñ‡ìzÞ÷ܿ߯ñ~§}6
+ˆa¯C ”9’Ö2ŽZG}±£Þ‘q,qhŽfG'Yk¬§ý}å¦bTƒÈ¶@'Óèfºæ¦*дÚsŠ­]¢sl´Õçëë—4ªµ²/…""Z%^oˆã¢‰Q)1gE‡]•ãa¾„*¨¤š©j8¤ÆkRÆbµPMVç’ÕÕ©¤Z“ÓðâæÑfÔœË67kYµ"I‡ŠV”4bJkµ"G—F)_”ã(¦¶¦&—y›=âqkátʽßMºïC‘â"|]´¿ˆ,º×H$#ÙFÜ^CÃT£²´ô¤wV''e™é	ÐÀ|649›sNö•âbb?ôª£ë[))IxÞj2[â	Sq™i…÷„Q‰¹4Œ¼V¦<p^È`Úñ;:€ûþIî7ñ_¸M˜à`
+×A®¨peJíQWs;ÈS8×ïö5BòÑghŠÎõÁ?[Zá’õVύ3jÓebF%bsecn×ôÏmÛ›:£u;ë××,]Š«ðØÊê…Ï6åôÓÖÊŠò%Íúò-<wPm;[r¹–†ÇÀ•J¾¡=Ù²9E?ïi^Ll2.fì*x;Tð¨à:´]«¡GXò<}ž%O°}tKu1ûòf»ÉOó¿E“{Âýè4IÂ[Ã$L$.."‡eRÎ)²ìUTq®‹8-†‹Ø‘=ÇÛí^u."q!Nα[:gXIUCÎ DzW0jbÀUDÑÉs|Ä7ª Š Ê¡T/Š‚ÝdF¾&½Ä(¼üȏâà$’?`f–fI:`†ªò³AÃMJu7™ª¨¾°òÙ{~ɨ¡.°8:@2k&óÜ%p©<`(kÖ\÷TkÝzô›X§r?ÞñýºfûÉdAì[÷ÝDèÕÇò_Îøɺ=Í?Í5§
+H¢z‘T…ð ïiu¢Ûä–<nê#ô‘e„ü›ùSfÄBoc¶8ÉÍäfÓv¿Õ¶Ý¹Ùõ¬‡•£”#ÊQŽ±F	Ì	‡’Õg»GŸ5›œ>E HOÙ’/k^1Jkp­Á=ÏÑCô0}ƒ§Íô ºÕï	™JàÍcùŽ.ìÑc°nèÑÍ2ÝÜݤӂd—<g
+·WáV¿-äͤ4øÃÁÁºšÅ-	þ¬„ç`áÍåe-,ƒXÿBŠ–,#YDø·äô4JxpI	ßq^á„ç­|’r„3¨+Àì×:$3]ÏìÞ131öáù‰ÛH<ÿ!rµÝìí½‰ôqä:‡œãøõg£Çuc°©€4Ž‡&¦BËVòŽÅÅp¤+V£6²Ã¶	&ô6[7ÚSúüBËésü5æw½øZåçô?xV¡Ê©=ÌkÔQêŠvtZ*É ¢‚ªÛp‹xá>KiR““n‚l‰¤£A4@¡Ú“QŸˆ¢Ã&†7Ä風ƒE¬¯ºœ°GBŽ`kpcð¹ )¨Tm88Í138œ¯ Ç2z,ÿ¶T>?ãæÄõ¾kê ^¨—Ym„Q¯,|ú^qlsq(ƒd¸g ŠçeÔ,hPéòwvíýËΉü7_ûDg”ÞTué	:~åG¯^=úÆUªóèúöîáç&
+¿Ÿ 1  {L
+˜N[z†/ê¹<êú6îR©ÝDñ?MÚkGå\+¿Uü‘øŠøsú¸‹	A:|!«15à—ϐ¿%¼Ðr’×+Kª¿,Žïh-Y¹ ¤$¾@-³Ø%«…çX3cC.B²ü‚xQFóYÄQnð«
+€Ÿw0ãÉø*)²À[3Z¨ñSÊógr¥ðyÈã
+Ý’Ç ™|pÁÐîŒÛØGÇÈ9‰Ñ€K²»ÅÀ”mN w®EÅE†¼ÍÓç’ä›'Z–¿¨¸x»+¶H©=6„ºõ,¶#äSá‘ê¼zäÿŒWkl×½w»;ûðÎûµëÙ™Ù±wí%^{Yãug±'ÆE$
+˜PÐÊ%Bp 8*‚¤Xª„')U(QhûÃUCh…”‡X©ILÚBÕˆþ*9„*X!R©ÈâÞ;kcB”ªòú»s;–¿{Îùηb­. ››ÖWí¿[ôóÏs
+qjÆ—ŸºLÞEœé…Ÿy#bwòa‚¬Ïô0tü²ô'á\Ï?„‹òÅ®{>&Š×{>no÷ð! Ó]LOJd©+Ñó’½»x2Y)|«ôLi½»µôC÷ÅÒ‹î^ñ°þ±{,E<Ê5¥Û¼ù墮Æë‚R´­iªe^¼.J†Éiîüùg-W`ûQÒl-øš—lœgYÀ
+®è´úŒ5ÆFƒ4ô…mËÓn“dyX7e¤ÞêM°Iûú‚ h[‘ïÕ˜…»£nˆ/qñ-˜›d«>ŪÕI€o²…*×™ÇC×xÏh)þÍò~+uôðf²AhPº¤p)Øa¢À÷ ©Ü­¦€¢vÍÿZ}7Ý-—RóR@|˜ó
+.§µ kZç½™ë?êŠÅpòÔÔÇ@™ºz§nî;°±år²4ËÒþAÔYùžª„T—AFÒQ(a
+VY	ÍPèÅ¢Û+"™í#ñî$~Ê>t—‡ûDé}ÑGÛÜ2¾Ó’P9Ã?5fÄ Þlo¯E{˜üíÅL£Óèð@>ÛU@ 
+”–
+¿²Ä]غãPïw×üåìÙí!)†	ÏkJzÏÆ7Æ_v÷ìÈcì:HæêTbè²VΔ:síål2.¨éçmØ·Öëtãw¿RKªµ{kï’|Þ,”ŸÝŽñú*ª¿.õ*˜ÎyΝŒ%ôñFøXøá¿…'ÂôêvÔí®{³n<r1PB0ˆu‚‚ÏyRˆ¢‚!²"#qq–ãEZ‹6Uà¯<Îp'èBQK‹ˆ#TþÆçÌ	1f£5’lÒLnJžIÒ¨&|tä!l݈& ß4j::@ߨó>‚ <BQžG":“áD4°BXÀ.§ÎPœó¥µ£–ê`-ó3|Ÿ;}Èä½ïËmióàŠñ1ƪ1ó߃»þÜ·¼ø2È'1»«}äɹfLãâ1kñèf"oãC8ßFy\M>	2`Ê‹†©c2‘•¡Š3¾ÎFó¡h”	Ùq÷¬‘Ä%‘PÛÈXxþp ³ÐtË´3PŽ‹¦å‚LXQÝ”aÄCŒËÆ¢EFL EÆΓib93t>ƒøÉ‘,²ž3ÖÅo{P"'ý<V}Z-Oëkçÿe5§3Ìò ŠK> Ör\#œ0M¸Ó@BD“Q!䧮ÖLÏ ÕŽq~_¢ý[蘝N+2¹ãÀûÛ¼oúõí½%Þï'üSßAnûÅ‚U›	ÃOû+ËÖŸª=~þ/eZeKSSÔOQ¶³äooVÎ(;ÈßÊ{•
+qB>ª„ ÁÛåò!ùòeù®#Þ"Îdˆ
+I*¥JY¢‰ÊJ¥D•¤EÔ"i%µR\%­ÒVeŸ†¨i²N[—ÝFm‘^—_SÞ$öS¿–Æ”cÄIª"½¥׎gÏÉg•å”ÊJ."'ä‘“sÊ°6œ= Ÿ”Çéqñ’|^WnwäÛ
+ü&„eó"Ë
+¢%+ƒ—ælr pLÇsÈ›øiÌ¹à›œ!‡`¥á8{²Ž“ÉÚVDøMk˜íÌN†Œ3)¦!?eà!æs/@†ÙC3L€¶£4eêø4W_Ÿ×êëuÍ65u7!+feêQ¯ Q¤)ÒeJ¢ˆä*€©j¨îk$Hhª
+zF–€¤)Éè„LœA¿Â”~	^ñÒX!¹œ
+g\KwMÁܨeš±X4°Q…ê;¬À—½F°KóZÛ5/›+j^C…zMG!Î5×{"³'á>ä8ø’§È+¯­³Hàs>Gx,W$*pŸ£Í'$(½#R»D—FÅêpk;Ž”:‹þ4W›¢?ãè
+þˆ¾ïèexôxY)ÒžÔ¾ÞI€î£	ú4¼
+š`´Ðÿø”Ϥþ{Ú>9¡±ý:[Å“ªzMc«ýº:YÛ¼u
+oµÖëá*è{š[ev?T'‡é–\èö]4ª³xDÃðïær*ÝcßgyÄÅû§¨güòÚ—1málr,ÒB;[ðàsV$3ä§»?A˜+¬‘#'*›0?ÆaÃî#OUv®7zêvEYH$«Œa^ú4}š«7ˆŸÍÌ1Kw£þáuÄÒ<åu«@åU;³”vØÎõÅ<åŽð;Âßµà ·EØb#ö	î´ð¶=nÿÝ®C/á<WÂ,F³‹å¹XŒåì0Ç'lcÈ€ÆÛ@CÂNçÚБ£-­¾ËQ¼H¡¥¥­`ç
+CøÜ£é=¦	h3è¢O¥UJ^PQ°u¡ÐìàÕïe2ùt&ã¤íæ´-
+fÚÓi›ãy ¾Š , 
+žƒ dÐ<¶›Hˆ®®³n˜pÃLÀq›ÛÜ\®¹K
+b“qŸ‰=Vq)
+ÍÒ&½‰¾Bߤ´6·ùmo~Ë2Ñ?ˆ<ñà=S\žÄEºý¨t‡Zrô4nÐð¿PÓÿ Š¾b{fÊ>x:bË¡2Ô`¿k蘅„_ÀK 
+¿ØáXijw·j†“äk~WÂe¾Ð”ÒY±¥zãG~ÉMâƒE|Lb|õ¿¯A(&ï¼7Óß @‚µSW©pD€Ò`÷3JJ£qk4‘ˆÇɈ:j°ÕðP·Œ1ã‚0.EGM¶ò¿”âÇø|€¿Fóî@_`(0 šÓ·­Ö”,ž¼Õ?èÿ‚î{<nkmðÍ\Í+Ð_ñåæ\¹œk.ÿ—ý²	‰*Šâøo>{¦é8šù…Ù¤£9š¦ù‘
+æפ£63šÚ(–1†!)CbmÚÍF
+¤E”D›-ÚD«h­\º!hmƒ`:Ï÷Ô
+j$ªÕ=ß½ÿ{Þ¹wî;çÂ{cYÓ[}dy¬+9þ qk'd·g×÷EÿØX—t¬˜|”ÿyâ³_Gˆ‚6iï ý.d¼…Ì2pM¸oþHN«A®}¼^È7P4Å[PrGÞðˆïøW(Ÿ1ðÖCå¨ú 5pòµAÌ©¿
+²ÇÆÓÐì2h•õýu¿`Ñ mÚBÇ-èÜ€n7n@<gPtðÓ}áÂ8„§ "ûze0,ënBTÞmc.û
+&WÊÔ…B¡P(
+…B¡P(
+Åÿ+tËŦ+K¡à$¥ÙÌ>=ãY®lwNîá¼#ù‰ï(Ç ¬Ü[Qy¢ÊW]CmÝ©ú›š[ÎpÖ¿=­“îÀùžÞ`_ÿ „#ƒC½eœ‰ï~äyê}ü3³óBZ/¥¢œÒVÑD~Úè#Â(cL2Ç"K,s›D©7™”øR*©6ã:`ˆ¨ÄM3O|/.ùþ÷ÞÍ„Y•ý˜-e„Ƭ¹žli-æfËeh§(~ìiâñÐ`j+™Œ˜Ú&þ«¦¶‹N˜Ú)úY 
+„}]Kñ¹X<[Ní  ‰’4…ñÑÅ‚$3.II’vYÒãšxç%…ñ}Äÿ=#ŽL‹‡ ¸’µRKlO¤Â6ËÃ[VåŽf¥vzf­n™¾k?—áœírFš¾Ìºæs.˜Õ°>Z«¸—(™ÌòÖÒ´íè§åƒÓzÿ²³8¹±µê(Ô|2Ôë³½ò7 ççz
+endstream
+endobj
+85 0 obj
+<< 
+/Type /FontDescriptor 
+/Ascent 905 
+/CapHeight 718 
+/Descent -211 
+/Flags 96 
+/FontBBox [ -560 -376 1157 1031 ] 
+/FontName /EPENNO+Arial,BoldItalic 
+/ItalicAngle -15 
+/StemV 133 
+/FontFile2 86 0 R 
+>> 
+endobj
+86 0 obj
+<< /Filter /FlateDecode /Length 19733 /Length1 31352 >> 
+stream
+H‰\VtWþö9ç¿÷†$BWùãʍGŠ‘„ä¦Æ[h%–r/	Q™HÔhÑ2nC3ã½jy¬–Á)Ë«H)Æ¢ñhÔ«F[™ÑñX¡k4î?û^Ãܳþûïsö>g{Ÿ½¿{A Bð>$†Þ)aÜå¬M at Y¯_à)òü!¿'P² ãKŠõAõ9ËXw°¬É-šX0²4h8`-´É§”åžnQÓh{HMÊ›àÉ©Zþó`f*ïéžÇÁ™¶Oà<oWP\š÷ žØ€Pã=¸<<ÈS<_^à)-
+²ÓBÆs†íõBOÁ„Î…íãÒÑŒgZÑÔéÅæÖ 4ɯ/zgBÑwëÆ_ìËÙGWmìg3ì*vÀ¬ýïã›lÖúu¾)f­ø'ŸÖüÙóÛg&.P[ŠÂCjŒô
+Nâ\¤ö˜…Ó”ƒfˆD½h
+4X…Ø‚“dE6*ÍŸñFâ¶"|‚ëäÄ[8E¡œÝ7±ƒ©©¹·H˜×ù„žŠ%¡•hi.4’âC³Bxç<D kpžfí2kð:¾TÍ{XAQ¢=BQ„ ŽñÅ‹Dñ¶Y ÞCYdš¶Ìt¢õr¾¹‘X1œýŽÅlü…½&Óa±CËAs¤ úãm`3¶‰\­8LaìÇq“¶ÑySþ[ÙÔU®µñ¥°ÏVx
+‰ÙXŒÃt”c¨%eÒJ-áéΉÎ'ta›÷1QÉÚP
+§¦ô­³Eµ¸«>×.šÕlÕ%Œiªð5ná>Y¨#u¦¹´—Î
+eâ‰ÔM˜Ðo £1s°+±8›UbL“3¤¡n©_}GŒQŒé]Tâo¨á{kLÍEœ¸-cå‡rƒ<%r$MÔ<¶½ÎQtfŒyçø§ó=/Àb¬ÇVìÆ>ÆsgqµŒ:‘&Ó,ZGûé=±¢•HSÅŸ„!ö‰e39LŽÓäŸå*yLžW᪯ ÖªÝê²%ÞrÓêñmòýd6³Ì9æRs¿ù•yÞ¼‹ î´VpÀ‰|Îõ4Žë=Îäväqßá.sgÕrՁ‚ÉNݨ?
+§7i
+½C‹écZN+èkúF4ᢩ"†Š‰b¾8!ªeÙKîQíT‚r©Qj²*V󵃴rí3m‹¶U«Óê--[l°zÚþé5_ž¯Ä÷½ÙÀ5[˜Í|ó!4´àÛó`"çd5çd#WÇ_qGqŠ³ò-£»Šïq
+g„¿ ž"¨Eñ°““kk0M¢RšÃ·¸‚VÓÚM{è ¡Ót†ÎÒ9ºH?Џô/ºKuBŠhÑR8D1Vä‰÷xÌËÄJ±Jœä:©gÄqSÜ‘a²•ì$y$É>²¯ôÊ­òŒjª"9ÛCÔïÕLÎøfuXU©³ê'
+Z˜ÖDk­9µÚGÚaíx æPK”%ÎRh™gùÀ²É²Çª¬Í¬Ý­s­­«­ë­ßÚ"lÛ§¶ýE;Š¦¼ð¡,:†r eÓA!ä¥lDˆX¯¦‰þjøX´[ý––Êð¿åçX,I4RKä'´»ˆÐP2fÐR¾écTÄÕåÄ*yHúD1-ÐFJÄ#YÍœTÃÙêJ]è
+ô'Ô7ÚñÑDk1†.©1– uËÄ~åVÝqn˘¶ÿ(¡;îÊéòwEZÂ9‹z‹^xÀï\CaÔFtD
+ýNFÓP™K1§o
+³D¾¨)8JËÅdÙŽÞ¥<„•Ú¬Ô2U9Xí2u^™HÆ>‡c¤réV¯š#}iŒU2Nô¦ûÊ#ò}Ûiuµ²MÅô+UR;® “bèC1b#×þCÜæªÇ=ìTËä"óšÜê& µ6ç˜Ñ,&öÑ/8Ï|z«ÂÆœ»MuÇ.Yˆ:é{ÄSz,c¶3ïméŠHÅËXuj§†R™Ëœ&°‰Yyœ¼‹>æhIÅfµyˆìÜ/û˜—îiGÄT,e¾8ÈŒ2›yÌÃÕ<ÁTÆÊ£’kÿ>óC$_ÆZÈ}ºŠùróE
+³ÆMÖ_Å#îÝ•¸"C-ky¾âøž
+{‘À¿¡ÜK7ÌGêçî,”„#Ö&–d5_j‡¬É©}RS’{'õêÙ#ñõîݺ¾–Ð¥s§ŽñÎí_m×6®MkG«X½e‹WšÛc¢£"›5hÒ8<¬QhHpÃA6«ES’ý:]Ž·nĹ
+çè×/Þ?wxxÁó‚ÛÐy)ãeCwÌô—-SÙ2÷ÿ,SŸY¦>·¤0=	IñNÝåЍÓé}–Åò¢tG¶nÜ	ȃ²ŠLBxË;tWT^ºn[w%y^—;Ï«hØ Í‘6¡A¼
+²Ø%#ÒQTA‘ÉD¤«g…€-„Q1Žt—íH÷C0d—'Ç:,Ë•nÍŽw”6Þ1΀£¯Ñ¨CÀi7†%Í°Üèùþpð‘^á<ì-߆qîÁ9ŽÏè,Cz²ý>Â;°ßt#r捨ÿMùðÆiY^Ôڥו¯û§^ïÝ8<,ëEm¬ÿ;;›ÏརM†Û›Á®ËýYŒêÄ@üðý¡<j‚Ãå_qOҍ G_Gžw’›/$Æk ³,vgLLê^þÛãÒ½#²±FŠÝ‘íIo^ofYetªý²&ÞYþ,›¡~‚C^&<פ€¹_ù<ÿa½Z€£¼ªðù_»	²‰Õˆn²¦(Kݐ„PȆ “MQ–wÚ¨Pס@B6vSÚ(‚¥)ŽX\JÝf±†ÖB at gR¨,d4Óð°X"LØ¡!¿ß¹ÿÿo6Á¶èøþsî9÷Ü{î½çžsWb\¥ƒ°s‘žÔ¸°\þ,É¥à¢\tßO‚Ux1Žápr¡?èÈc9Û‡µL‡Ë¼N8vW×å¾’¦Ä–é¸NÌrpÄz‹»ÝáQ£8.ì…8Hø8Y´ÇÞ;ze«\íZáp‚`û¨²f¾<ö<=Oµ©ÕKѯŸUc´´0­…¼·/,ûYÓfiRæ²f½¥‰›û]ß½ÄOå”pÒ=ñÿC©ÃŠêòÂRꧨ—úòÙ®òYµ5΢ ßÜÛò9}Z†>7®39ÉP`ÃÃj&vªÔ…ˆ«ª­aþk™Å®¢ü%¸að1<¬°FI“}'§)b(„í¼øÈܨÄc©™6ö‹Ã
+ÂV$gqØá/1¾¾ééŸhÓjOJ0jÕ¯²• ½fæ’Âyî¾í‰}Ú}¼Tà¯z\>§6ÐGWŒ»œÅApA«¾~¡Ëép÷á1X\Qä·N¿U½)-\ü´‹¨“òðs'cŸÜ3“
+“Ý?ykIr¥#¯'ü);lâøˆä	&B´N9*yÔ -jí#èuí0…¤Hã k”Cº_AGÔ—i'ú§@VZ+OÐ_Bÿ'€µ@<ü
+8	4r6ÍÀlŒñGÐóÔm?F?Ôë1_pðiÕ4ºJÛú-·1×4Œ1ü,ÈçÙ0øyÐGÐw¶ ‡©ü:èo€üûºªUë‡ÀÇ ÏÁüÃ1Ö‹XÏ3˜ÿ´лä4cσ¾ôÐÕ £ï÷À{jØTa­NÈg€¯Äþ”²X«ž×¯ƒ®ÁþLþ^Ø=v3ø-ðk#æ8~0~äe Oµ<‰Âʽ
+ó?…uw™kgçÄ×ÿ…O}1Õ¤kØ¿Dþõ¢×·ÛÐÜÚ£äÐYÐUÀ(`´|Lœ[-ô%Ú{8 ‰¤¯aŸVam{ÔÅ´3‰ôýðs»¶—. ýX£nÕ÷*רº·l›ñz\ŒøÜ ]òeú©-“±ùÿ;ÀxŒy·ˆ‡Å8ó€~t¹úüÐ.àIDû=Ò/òÞ ½çŠuëÝàIE,v¬»¸Å~`þ§xÏùÜ¥ê<ϳ†Ïs>ü ö=è¿‘ãgcÇXM˜ãã0S€c/ìƒg&ÄÞ‡( ók.D¯ð^aÏfß0h Î`þ/£ÿ$¯ˆŽMŽŽ
+ŒUÎg%bÖXÃlÄX—ygÞ„}Ølµ½L¯ o/`=Wù¾p̲ŸÖØ[×ñ]OOË!ÙÁëä˜ê¥8ï­fÄDlY”ïÇ>SÅM3@}J”¦sÌr¼Y”÷EøûÈw"N{×z¾ÿˆ)ì·‰XG,ZÔÚ‹8=K>±ßø…¡Þ@ŸC®:I5Z­UŠh‡¶²zìOr7­NŠÒpœel·ô£Ï1ìQéAÌUwc?1¿Øרœ¡F%Mۍs'鈶[^'øÛhHm†Ž)#Q÷ßÊÿȧ´Ý´ü%-ªëXÏOøNØcRà´(ä-Àz`T’[z.©^jµÏ%‡è°\õRžæ¥ñjîe
+rQ&äsmSDޝ9fK1iœ•<öÚ ¦ÓžK>…˜ x|Ð	qÔ'æúÇ’E­xíO9͘ò™ùwš™ÛúÓ!À¹6p~õ9¨2âUoŠÇçZZeÅgß8ÕO'Äç1ÄçèþqÙŸrmáünÝS¾Öú9?rŽãÉyŽs€Õ¿?íµ—¸>ýLäácTkÞím@ø>t#P·þ`äa=ƵÃ¥€=ŸÊ
+ØÒ2ûCô„í0-ú;ã5u¾þªYOs¬ZÊû„ºøªUGµ)ôy‘ÏöÓý"ß죑¢ŽÂ7®Ÿ¶tÁ–OCͼã{Èw}æˆzóüþ—~
+¾ÿ\¹Bõ,WWÒ&¡kyý}õ„þ×De­µ¨]?¯N¡a»]ÿ–̓z¹‡Ç}@YÆþÛS¥$õ"ük5•ùì“ê'“ª‘'NÒ
+õ&rX=mÕ‚ò„D<V	ÛÃúR1V½~Nû*r÷ÔhƒþWs?D¾ºjÑ>$öcböˆ÷Dû’’íQòÙ/¢”Úqï Úh3û‚ûxJÔëkxEQ‹ð>øÀ¨ÝÚßõ·qϾ¯Ãw!çßԏ#÷V¢o‰Y«+ÄÛ÷G¼7#öá\cõšù3DG!o¶?‚˜ÜEMð¡
+÷wšú •Ûbà_ÓÛͼ]­ʏÒãâ}'èNûAý8âÇx/°üNažGnÿ=åbMÓ“ÝXKí@ü5!î: C€ÈJ
+ȃ ûb”kíve£ä¿Y^B[å:2èñŽü5ݯ¾@3•—h€ºõð=#{¨Q™‰3î¢FM¡3hÇÔÑtIéB¿è
+üjÔPäYJ*Þ'ð~ôÑ@¬ù”ÚB˝.«wcý›È
+»˜ÖJgµE¨!ߦ, ƐÇQ»šLí¶&¼i1Âøéu5e»_-°Ï¿Hðy­REÞc7aßüe_ã~¶Ñ9öñ?ù'üàqa'úü6é@¦A{f%ÐÔ;@Gu2å78×[q=¹oÞ,¯Q3Æü¨ýnñœx©ÝÚÙ<ðlð=úcô;
+¾òãÀ!›¢¦Q™§v¡Ý};hô»èó9PôíþÑÇWÜr£] ¸€e€yh®A{Þ‡])h‰¡ënÍà-©†¬{*06OBVLB; Ôslßþ®ù?ÓO¨gwJ{ë—~“Ñ¿&Ý1µÎó3hÿÚeÿgÑ„7h_jŽ„Zú©5Ó¢Å|óí#¯2#âÉÉö¶*3Z&ç0‰•ÍJÑl©5È’œõ¬LKÊÈÐá88{HAŠ2ƒ€+€BùøV Ï: ÒS/+Ó#RÆWüo*åh—“ŒéK#……Ù
+”Rd¬Rê!ÍN•FÆŽ5¨gŒAGŽ4hF&&„îù@ðŽi®	óäaÙž‚t¥ª2Ìó,¾€w€Nà
+ Á¯2ò €Ø—v
++¯RùzÏWf.¸,2Б]YàPJ0p	Jà.%˜”`ØaVIvdݧ·É-Þ‚lƒ™pŸ`ލÜW}²àò»0Ê’;Å;¨ðÎ W;~·uP3ð"Æêøæ‚ù(ìšå?áë¼WðY‚ϼSðN³ÏN’€•°ù%Fú7ëUÅu…ï½³;³ë¿ý3Þ5Æ™]lg6³àÌ®m°ñxmÓ–`~¼ÀvRZm$Ž
+MÚÚ 5a£¤­B”Ñ YXªÇëĬT[M’P¤Š4ªúÐÖŽ*@V*aH Øî7sׁJ<ô¡³>÷»÷ÜoÎ=sæÎ=ÇÆ>ÐjR³â¬Ä¦Åi‰Š£‡$ãsˆŽ¼ÎÑ‘¢PŠâ)£æ«Œ"âQ’‚ŒBf Ë‘Ôá€ÂPFˆ14í8äd2
+±‘Q´Ôä­pRù»—!"q²0FaÓVœ0F¤
+5gÛ!qC'lÇ/*DY~üÂ,Œ(ÿ1Øh†ûÚJ糕Χ+OŒNnyfüèêVo®ô`Cq:'óØ—ÇZŽYuc£	6phàPÏ¡ŽƒÊáA^eVq(åàáàæPÌ¡ˆC¡ãjÞ…;£pgîŒÂQ¸3
+wFáÎ(Ü…;£pgîŒÂQ¸3
+wFáÎ(Ü…;£pgPÀ@¼…ê°œÃ;0á3ŸrøD+­n•oczP“§!'!}Zˆ
+Q ƒ#´gßx°eÜ_%§:ìBJ6|‰møÀÛˆEh÷dçQ3¶m36j3¶n3¶íÚQÈ4DøvŽ	á	Ø=×ÞŠõË'àÊצ+㦇t„Ã>{9Th; · 7 /CŽAöCž…tBÚ aH%îYú/ÊÜÇéOh†
+”;eø¼^Än—M»ÊV‰Í¦=°ÿQ6ø#<ý-”Ètœ¦LÔIÚÄ¢Ðàeà>àŬú>nÂ8’
+V~
+ú‡³ÁzÀóÙ`‡ç¬ò¾Üa§û‰b3î#*=Ü›UÏbz‡ž¬Ú	¹…§²Á·äŽBZIÒlÜ
+¢˜XNT6’•(9ÍÊ÷•™¿Vãò-5g£òMõ”üE0Ǩæÿ\{]¾¸.¬“ŸS+”gÒ×å߁>Vm8¯"ÚP¿£6ËoªØµPcü2n=©ŽÈÇa
+˽(›ìc=Ù£Ê[òõ§rŸ‚ñ„œRUymŽÖdåÝXÄg1Ú7!Ç°ø¶üÂßQCrï4üÌÊAÓ¢T«ÛsòføÐT{U«›å†Ú9¹Jí–צa芼·Ø^loÊäh•‘2“2/I™½Rf£”©“2!)ó´”©‘2OI™J©Ôæ¶9m%¶"[Ífm³[inyV[Gp”•ŠND‹ÑZ̾“-´„Q#Û‰[÷1ë‰êÍ¡XNZÞ­7…bºm×ÁÞ1JßHZ}æ0‰}߯ßë©ÊÑ‚çèÖª(ÕÝ1Ûõéìµ%{z±ËÎTèîÎÞIBiù™×+ò˜HtöNáŒ.#t AÊN¶ûÚÝ[\-[»žÐôåÛУË÷X?ÛujÛcx\’#†=fŒaÆú*õ_ÅzzõË•	}ƒÑY®LÄô³=þC½“ÌÇʺ»&™×€Dï¤eœùºwzËxW"Ã+6yÈn>ðHµà•Øˆßà‰Íä±Γ™×à
+ Ïw‰È&Oö]2yjðÆÒþî®1¿ßä <N›œtyŒ3IS¤¬êjκ@S‹¦ª.,=dRPj“B×Å4¤Ð5&%üˆÈSRßRR&å(*§—W(ÂePBÿ‡ëH´;Ý¥±]½c6MtâXæ<¾ÅÜÅå[.UL‘ÂmRJèUQ½°
+‰¿Ýr¶Òº$nȾJi2aö¾2zb‘.‚&A›¾W*¦,„›Š .ÎO­ïXßaLaÏS%P;òS¾W6*¦èp~Ê	µë>éC+žÈúß.âëNwñ?_^`þ„)ƒƒÆ5ÐÝ…¿AÓÕž˜Þü܁Þ1IêÖµ¾®tµ+:A0ucv;ðù®Ä@þ
+
+žÄBˆ–Ö ¡jÐP2h¨4*
+e‚†®!{kHÝò¶†¤­!c_è(0ë¹f=7dö‡>©†ªBCI¡!¡kÈæÊ
+ÙYC}¡!­k(04µ´b6Æÿ
+’éØcW‚„ðÄÆÄ €Oсu>XçÊd+A&•H뇌^¥»«ùˆÕrE ’å
+%å6Ñz…	º}úïØ4÷Z[w:Zw,¶’vôÑ4Ô\W
+œ}ä¡_˜y¨YÉ¿‰ß2c~qú36ÁÞÅ*µ*²-.P
+ã¬rR2ú‚€ÿzdš|…{ïY¶®3VIÎ-&ûçH]r¾¡ÞgÙúM‹Ÿ³w—nÃÞÕé*ثѼd›PÀ†é6aØOêaE ¿µlÈÛ˜#í‹ÜÀÛtͦ¥9º
+`á!–2ëÇÄN~©UÄÈ{Š¤hÊn]'´kDÜ'Ü·‹«5GSI©(J™bǼZ¡ `F,’D§€Lz‘Xè‰Ä^'V¤v‘@‘Þ¯¹œÆ¡ßNâ¤OU^ zsBéØœ­^²Çܽù…Åy|ƒb{«sa±åçÖÚЏh¨§I’ôxª›iÀ#Šw"tàÚèÒµ¥|qධ’‹yÐ&|³©öOã)Þ´Îà|k‡ð,¤‘bâO•Òóê®sÔ9×{7y㎸3^_/ÛïyÛóϸgÊ÷‘<S0S8ãùÜóW߬ç˲/½ž»ew½«.‡Ûáq”ZêK´’™’?•XJrôÍåBÑà0tº©µBû½	§«(O¦ØK¤’®ÉZ¬Î)֏ZÿœV¼:}NZ–‘œîR'$í§”æØ‹ãNuMѝď üÚ|WÉyçÝdÿü‚ñÊæ’ØZÉV—»…:ç“I¿q<M’âåÙ¬»Å[þ&ëj±Ū«¥€C!‡"ÅJ8xpÃXQ	ÑGH6iM$Ò¸¡lU©(‰QÂ.Ùš"M‘HxãÓUkEV¹ôϵ÷¯^¿õÝÝ›—öéÃÈÃ3%‡ÿÃtÙ EqŸaüÿ±ßìÞîÝí{|„kAAŠX,ÿ(ƒÁÁhDЋN¬l#‚Õ©u¬Ê˜X¦3ÕNÓ ãG«¶M,j¼ ckÔLlbjÍ8¥¶ãŏbHXúîŠNÝ½ÙÙaà}žç÷>ûâé³+&ÖN+o wrÏ_þäµo,*ÿz~¡=ôãSûŽý*2³5oÆ‚g—5Žü›[ú|Ýe¹a«\Xœ¼1ƒË·¾‘HXš›Ô”²*²ðª¢é¡€6ÊÌòi¢ªÇp
+K1¬ä+ÕJŸr[áÒ²;Íó6æp7O§0=WÓ-Ül­³6[#g9÷ B*ón?:>«:‹dmðÁg¦¢°&á¤<¦b5†;˜¾ÅÚe«	…¶„†h(†w³„- Üùî |ZY†£ýÑ™ PU$rµiqOÞ’h~KƒFðƒî_¼…ÞÂûÆQÿØ`°°àþ(Åâ‡q,LxtêA8‹BfFV#ö{ëf<³¡q^Ð*Ð=+~:kêžIµ‡
+ê6>ûÁ+£óVì¸×}¯K_Y¿ñÙú&îYùÃéOÎ_6qOmÛ§;Zc‘	/?µçÝAÝš©XÃwC4ÜÊÖ*jH%"‘©ÄSŠR‚¤Í¢EKõi_)y‚Ô‘Fr€#BM—fºH[CÛi'ÝKöJûÕ=ʽCÞ¥ÓKÜ%É'ó²ZÉW&<¦ò„h84„J(c‘çdM@ª‚EB	¦1\ËdU3UUãdhÂTE5E¥Š($F-æ˜vA#Ú‡bLSYQA ¥G8Ê©†|˜¢€ØiHÅX0_)Sv*tÒ£ÜR ЕÍ
+Ubä=@’ŽÀ$¶éHv~gŒ<×åQcx›‹ O´ì¯9£-Ãq#qøs½¬ÔW’u×ïêY²ÉEѦ<+"ÁU‡/G`\â&=Ì"SŒjxKN´ê\åÓ‹q!-3iºßÉêឺ÷׮®2ûnëB{-ŽÜ¦;¿]2`DÒð»v±“”6HÊN~/JÇ„M󳄇^¥ú÷*½ÊxZ¯7š=פÁÀ`P
+ã0—cä˜áð£Ì[fv[½ÛÍÞÏ|ד¾èf Ão° á5
+ÃkèÕB5n|úœðàב€SŽ¤iÍ:Öcdó¡>7õÌ°üa³Ì¬6{Ì÷Í^S0p‡|^N† u%¿	9j9‚ü†ŸøUqÊD&¹ŒdÒáÎÀ —YnP(ãx‡›¡È͵øð5g
+đ˵üá(nx0ZrÚž¼ÿý‘ˆ¬0ÿ/0ÙÎþGQE8ˆKNÄó+~ÿôÌIMnö’O¿g‡¦åηï_öÀoŽÝÁ¯†L¥¡áÔ'ùHܺê÷_ýËVûò+w!!{Gú¹NàRÊAqÖ(…ùlR$eO•¦f7HÙ«¤¤—¤Îà^iPJú:Ó#HX•DÞ‚rCÅá
+q^°Ajò-…'7J¿•^“þ™ý™p#ØŸí«JÉ5cñØ%Ћ(`ê…x'îÅ&¿ÛÁV—Å?â N÷jùo֡ͨÖ6Œ—ù3št
+#ÍЖkëµ[Úˆ&h1ü3r“›X`}€ €Ø ãä=4ï"»=ZâîÉñ7*‹;|j…êÅ£hr'¼oÁ|–ƒ#A¦Ãž¬"¥±3òâÑ™\§ý…4­¤²dÖ„hã+Ûûׯ9ý#¼ §¾úöpÑ‚ò9¥³ê-^^ÆÍ	ÖVLžýÖ”gvÚ×ÛÖÜün'cû»Ÿ,›ÙôçÖçfqÜ}ˆô¸[G‡Y…ÎFpÜã°¬'r1<]¬P+<õü<¡VoàÄUüjmµgµþ<ÿKO»¾Û¦ï×ÏhgôKâ%5)\+Xö0ƒèa·bô ÷Q/³	æ€ †yˆ$yåã?`#;Duž]ˆv9…ÄèÆ{q'r-­gâ«®¹ejcƒýé¢@L-Ðí+¾XLÿYðɉÒÙ¦}Ë7íÉÁ×¹X>?þdÿúµkÍËNÞısðÆ‹¶À©ËrÛålf®—1”5®RtûÚ·‹:€¬fiœ°¯äöé"vÊBX/ž/@wŐԸØ­L¢è€ÓéâùqGR¹p¾ñ2œ<Ù¾¾Ô­x\–ý_›‡šGFþív1lú%›Ó+cØ~au¹ú1½ÈqÕêj®G½ ÞVù,šËåÈsé\e+×d–‘Z‰fHL$‹X‘eÂB†(›¢(s”fÙ$Nêº8	|†y`GSž#Ð	•„ic	aqHjÄ^h@Ç °Êˆ’:¦¤‘|²œôŽÄÈ›LG2“—ËdɆL@²”@ºÈQP'äüçƒQ+î~°~”¥.¯î-©á"¥¥›Þ)u…‹¶àVÔâLjd:¥˜3‡´ÏÒ)¸úsûêܧìWp¹}œïª “ÈÌá.ðéÛ#ýüWü‡(u±¼j¨íÌÃtNLLLŒÈ%b>ÆWëÓÍV©§õêK2$5ä©ÖêDïÆB>rŽ)	4<É@sçVnMæd”ÓŒ{0©vQ@ñ=yñœc©¸/‡SYjMê¢T.5˜ÃÄq‘H´Æí‡RJ
+D¼%Ú
+	ˆŽö²á— £ƒPfy'úÆp‰nÐr¤ÜÏðø:ûå[öö?ÎáÆ‹Ÿã¬$»×jo]{¹mÿÏWž"FÞWö7¸OÂ;¯Œ\IY¿b«}b÷Á“[ÁÅuà¢óà"/JC,ãy£"ß㉵¾Ú´îÀ[‰ggƒršÏ—†°	i÷Þ8sØ‹¤GÒW$ØÈÈå Å &±tü?¾«¸‰ë¿ÿí¥ÕZÖJ²$K–µ’OacluÂbˆ©aÊ☢„N á,‘KÓWÂÕhcCR®ìv€x	§SË¡Å!
+g —™ÒBÚ1MÓáSŽNS¼îÿÖ
+db{׫g<ï{ÿw…Âp OEÛO× f9ÈÍ‘º£ƒtZ‚ÀźÊñ¶Ñí»K™iãֱȌUã‰z–Âz;C7#jåûB©7È£ª!SÅì|Ü7²õ,?/;»Ê`ÕÖâï4üpBqëŠéÛžûhÛ†m?¼nÞÔÑåËw
+í‚\1õä÷¯«gx®ô«x
+RóËM~'Ó¯"°I«î³@-_kù“Ì[0ë`¨éÛ¶(àn[%‹Eæx¶o+î[&Ü:žbÕû"ìAl§#UzZ#‚BUځ)ÉR ¦€ÂïÇ]È´îëð°o;ÝŽÿèA at nÇëQ»ðåÝ"Õ]é0™ÑŒTÉÈÀaᯔñ´¼»h4=TÖ=t‰Ð~Ëh¾Õ݈{lí¹ Öàì‡a|’„°6¸¢alzÂõq%ÊÕpÏ*?	®n	6kòº7ˆ¡D*r*¨Tå¼~5¨jj¨ˆæÛŠƒý´¡b…½Bj1˜dŸ¤6ASp³ÖÚBÞ¦ïðgèí+:Üΐ¦eQ@%-D…@h'ÎCO‰;g 
+9„yóy'à“±ÊÍVR9šªâû«t7*;ÄHÚ@“wíx†¤6šÓ#
+f$¬Ò3ÝĬ|mÍöEt9&O–¹^ÕAª½ŸE½4ËMÒ÷Lœ+ûhw+nZkwü&fþÄ€ÏÍ¿tÜ­¬ÄûÚšó^–¹ëº@ß%……(D"ŸÊÏs”L!è!anm\6×عӸ¾úЄïÁ+†e¥Æ…Ü­×Ü\Ùòëï~2º¿±’³w¯3m~;óû+À_ù,´`Ñzãàþäî!yçج"[ŠΪBºôâg¬1µðµ´V¬•x‚Ó©à 
+T¶Z5Å’¦(ŒïǧqO€ï“ÄœSÞª((ⲇœZžS-¿£#ñCy¼cîFO{^9¥t)\—Di§…WÚ`Ö>Ý6ö:ÝÕÁur´„Ó¹Çq•)Š—3Y=Áíƒõ,QUý\e š3lÊ;ÞœëýAþ?gC6ޫ혲ñΏê>ºÂ8$ïÿ2ò#èoœ4NÓ†î„ÐÞ}Œþª‘™„Èø‹á°¾$?Ú¡4ÝÎnêü’ÅYD§ÐÒZºQº&]—¤.
+¹³"裸1¦Lƒ¹—é<éÇôuiÙ kéza£ÔB¶ñ;¤K‹¼Ÿ$¥¤¥]>LŽÀaî0L8$žƒËâ¿ÉmzGÊ{M™,°¤XDtQ^HãyAÚDè&ÁŠÞ
+ÄbW1ÏìÑ@
+ýÛ5å Wj€S,JÚa Z	Çž)1Óe&û6˜½™£`øYŒàó<-áu>†MªÒ
+^ÞéCà×ãËÛƒ¯^}ØZ–1»|OãõÔD,?RÏÉÝ´´¢¢Wsq5ÿ‘Õb\-î[mßM«{WKqµôÁU²ê{+•Ôs]÷*Qšž5-*ào!¤Fé`5*µõÛ­š-¿HoÕ
+‡ ¸ÂüEã‚1÷¤qJÁ?;éÜÙ;ùBûBî,‰ííù§Xê¦’L2W÷y\éŸß›áóR¦yŽò‡Yæ…¦¡Öì±ÉLrŠD.=´á¼ÌÉ~]›¬5kœæˆüÚL€)ód'×ñó™Q{º>‘ˆcšL0¯bYüªG\H{4fôg³ÁäÐ\“÷N3n“½ùe€Çƒ
+ãÎ+¯œ0¾˜mkçýíÍöÆ¿—é°%B`«ñžqé¢1ö‹vp­Y÷ɯ`Ô/ÞýؘÂö÷4:Ôfœm;všÝz™z„ˆ«Ö^çªõÏ	œuu.¹¬ƒüõƒŠoò¢Å)¤•ùVªÝ>? £8R
+ª;ÂBHL:/ñÒâ=09Àṳ̈š5M
+:–€1L5•`NØ”<ê¾e½;Å‘ÉxŽX@°¤¢uggA`XAۆŌÔt|SrÖ3çúèÃÒø—Í“LxóÏBû˜w_™szÑp‡õFå²qƒFjˆÃDÄáâàA{LŸo¡"š´GÐ욚鐜V5Å‘â*ðï•…[žÿ[Êc¶
+GÔ?ÎZc«QkI- R¦Ô†—Ê?u487Ú6¨oÛ’Ö¤’´%Õ£ÊqÛQõSÛ9õ¬ãÖ/]—üÿQÿëÏöxÃ$|Ìô·Ä«{×LE@Žµº=Ì<\‚‹P÷âkg©íJ…ÔõHÈŒüfì; qÒq=Bِþ¸³[M0J³XxŸÎ} Æ
+@Îéª_wF}x¥ãåÅ‹0~!»î‰(y¼W83sTßÙàc^7ÏfUË?8ÿ÷¡eSûóë¯.œ9¿¸ùFÓÄá‘åÆ>¡ý‰¶¥ÜÈ,Ÿ°Ã8´ ¤7fþeè‚‘±H:óªE=„éÈÊpè3«¤ÑjãÉŒé¶iêlלÌú5B“¥ÉÓäm¬nÏHfKépÉ8q“"¨N©	Éæªe]§½V$ŠšÏê
+ºµÁYO*ãlÕA]Ö³¶¸>Î=<R‰ î9ð´Anßé;à;åã4ß ß0çë=/2¿Õ‰Â
+ÀÞätW´YØ%tœ*„„˜6òeK„ä¨94ç–'¢ºÁí/
+DæØ¡	Ëi-Òí`êD½ÒWx²´¯f^e§ƒEÓ|b>/d1¾0¿›ä‰™ >îÊEØl†uN^Þ r»¡Áæõ°ow	gåä-MìWµç­eƒóŒw6M„OFªÑ¥,yuá́[ºŸxÑ8a\û­q¹>µ¯(;cÌðþá·^Ø<#yó_GmÓ_zvÄ°~5³GNÙtиúêgìln#“v°î~ý¹—d°sv>UHÏJ©x–vòÂÿÈ®Ø&Î3ü½ß÷ÝŸøÎvâ¿Øñ988$Êb 
+eõÑ&üÂOWpE–MÛJЈÃV~Ue…B -¤Ó*ZµŒ­…¢@øK2ZÐ
+‚v ¢j
+Õšj!¤›²dÚQ˜³÷΁U[ß{Ÿ}gûÞ{Þ燑>¤ç%¶—î•ŽR¶›ï~GØ6ú’ô:ekÈfò"0Cl 
+ÀfÂ,ZËY‚%øL¤‡CL4'CAŸ3!tsóFTOf™"dŠh:Q_õd"j"ÕÅ&±]dD<-ö‰#"ǤÙpTWPÝ* Þ­1(gíŒÖÄúÐzX;€„“Ó‡“ÓEg•ðné±äp ÓbUªå°¥/…·©Îƒþÿfo%‡2‡¤}5ýG¤Åù¦xz)?{çvpýF;(’.#ž“äixš×Ë
+ä54o§d›&ër­üàDž#ú1LQòkFÆË|ÁP5¡^h˜.´™˜~O?@»KiòX«g[ù+éqE¿sÂ5އꮉla!¼Z?/Ð7díø†,b¶$ÿU˼>7z¬‰é÷Ów¡´‡ÖC‰Ðsï ÿ>rí²Ñ›¼š'È82ö«Öm	¼÷bp{‘àâLÔIœÙ]3Õy³c­m±îÀ‡ëë±¯ÆÛ=~(‹_fƒeƒå}ñû%wÊî”Ë¥$êŸêJºžu-÷oðw“kôϾËþÁÀßb/R—úab4Èò:øÈh¢]à1Ár”¥¦`o°/(#ÕÆJÝ¥t¤J0G*ü	«ådê8—U@¾š(åØ…„ª¸©'«0m˜wŠE	ÏŒxZÄÀs"¯F`›QÌ%©:œZ¾žOó»hÈZäŒ<€6©§UJTMÕÕruTÇã$ªšd‚GúŠ«½Fbr½L¸äýUÂ_ñøGrH• ) )3=Ùí¡û芑ðU†3†Ì¬Ó̸1”B® 3ox-Ê@
+%Í©1BÃVEð	†‚U#tä•Â)Sâ¡›ÅqH,S*ñaù4þ’õ®I<S*áfz°|øìÅ3Îx±/ý…“'~³xó»ï}y±Æ5gö¼$@ äêãe³¾ºÊCïúv´ï[S¾ràýïU/žúØŒ¹[_?îvú¦E¿óX"}RÑïVÔ$~ü¬éWæ vzq6œØý+Fj¶ãIÔ^Ñ"®ˆ[ωz§»–°·É dõF š¿!S¦95ÕIµ\bè¤.—“RÒ¡@‚Å¢”s؝ÄDóG£¸|R‡rI¡
+Ô+;•ÑLÒÓ•…+]0÷¨Ž÷sŠÞé\ƒ÷g×	Ld‡N¼]Ð}x^FT-MEmM5—<01hè²øªÊœUUfÖÃÿ­2¾ä8“áð:’ŠãàŒµœš­ŽIîLc­^KâôªzCí¶…oT¿»ã‡ý…ϯ[4kÓ’_,^9¿QèI{¦Å?¿òjzøÀâóp¸qËòþŸ§~ù“mø+7`÷6ãäå‘ãÆ#yyPœ•¤IÖHÙº­šB­y亟½x'¯ŽÑÎC!w‰í:‹2ð‡KE²,0ìþ·‡U8eÉV‘pÅì‰BVUIz0j$ vbÌ8"¨ÕÄ¡9tsBž¨éWtLJ\ºœð”iëÆ®ÊÌe&ˆûëšq“éQ&¸5ƒ r{h‰+<cª6†;†¾¦&}«óÿhƒ‚ƒ'ûéa[rÖâ¶yËjjZ ­´ç·þt&>ÓJ>¹ñë•?xÆrÀëÐK$-$»
+ójÙYµ9s|s‚kƒÒ£¶©¾©yKsä·äÿ–ì÷œ#7É ãkò%»ksÛŠr׸šòy.éΦ Žì€ºêÍf ªª; ǁ{`sÇ{ ›äP±
+d´èÐ-¦À*Z=(Gƒ&@¾%²Iñ#2—o„À;ábUC˜m±;eC%ÿ('Žô<9´i¶¢Nåظ’x…#ï· Dy,=⛿«~ßEЇ.7®†ðýÊÕOÎߺpãÂç÷¬ž;ýóOGá­ý´ðÞWÍ-ŸþtõŽô vl
+¢¨	Qä%:\5^mumSo\/)­Ù›C
+wËšâ±± °…í>§?×véIYÞ®m
+¿§w\P®+•%»dsi Qi\Ë×ÂÕáÝöTö3Ù륵®µámÒkú^e_öIé”|IþDîµ]³!
+ËßHwå[9÷‚·Ãžg«‹.	7„÷ؘ.ûNé°S½‹^‚™hÐf›DW(æ–”²Iç…E“Ìjäúó'-¡V†L»{±á‚ÜEgq—˲Ë•!ß+>ò¯šx4îaž–=º	?2šaì•«7" Œ<ŒÛæÔm¿V43zb‘#¥ÞLEÇtŬ(V:MšŽ´2	Ù2å$dàY!SSB¦¦„Œ‡;ÍIAƒ^×<
+Ƥ.…ÒŒ”n}µ6ú¯N[•b~ƒ­JÎk¥dVJfå°V‡ÂϘxü˜Hf¬*>d2ÆЈÉH…cŒ/ñeÿ.‡uKvb‡çÞ{ërúöº}PñÁ@úX‘L¾â‡§²â…_—¼ù&¨Ÿ]Û?ðÏO–/sÛž{nË&ä¡ŸÂΠ÷ÁŒ½2•…Þ'Âˆ$öJW•>2Àx/¹J¯°«?ÇÎñóÂi‰’º•Óä<åä È:DøZe}ÖËY-^虢LΝAùx:^ЕB[‘%>¡ÕäÒ¨f¾ º¡Þ
+£np›}tÇà£ÌKóÉçŠS#^Æt®äàDKºEEe‹ÉD‹ÏBS+‰ŒÛ®
+:´^­Á‹ˆé$ ‡ÎFCUpŒ-âÒ±‡™ÑŸàõœ–qPy§¦ÃFcµÁϽ=´›ž%c!µûv¿ö¶«=¶‰ûŽÿw>ûî|/_°Ï/.Mœ‡/Æ!'F¡¸ ÚŒ²–°îŠÚ!­eH[Z”@@ÛEѶ2	M[ªµ!A-¤²Æ–?²:é6 at hS( ‰Hl¶ˆH›Ø£ÄÙ÷Î	˪Éñý“,ÇßÏ÷óš»Wðî¼c´Zu¶‘;—òOsJ]<¡Š¡ ä@¼*Ý8ûjãàÚ­/lÿD-Cµ_³©ßúß°ÉÑBô/Û­ÁUüœc"GS¿ÊM
+õVôúÃÆ]»}¯vWfe ì’)¹öè#úܵÝG’™ÆÊß-ןo´µ2“ÛÊ|̏¡Õ¸1óŽ™Â]þ·’$Uô¬·ñ‰gãL‰¿¬r%Z…C.Á¤ÁŸ
+ͦèÛÉÎÔÇ+ú“LSêµ²½©CÑ®2vÍŠ†P}tSÅö [j•­¨õÕi‹MøÊ«H@³Hˆ‰ 5„`(d
+†‡!¡\
+®ÊxW^*ñvK"‹eé-FlžZvôÏH€/”…ê2CP‚2È33ô’B@eÁFJ¼hz…_	³'Œà_gB) wwI1RÕTgUFýSµàªùw+m¼ê®?œQ ž¶™;ÊçhðÈG.[—+âûXœÓKµ9
+¾ÚuÀÏêËl®Ù‰ª&¯Öš ü5…TÊÞR݆¨µ'£Ö|½¦<¨ü{?ùÑøчß\Y†½#‰'›öõ½8õgüüîæÆï6îkÚ| nÖV¬H‡Ÿ,}«êÍ[¿¿ˆk{÷¾ü‹GïüaøÕ§Íg}$ÐÞÑvmgëÛû:v?·!Ä\ OâòÌ„Æ‹ÏxNi·<“â¤r]ý«ÆéÞª1 ÇpLŒÉÅÁ®%)wJLÉ©`½»^laZÄ–`»¸O>ÌŸÄýž“âIy@ÐNÏóÃâ°œEY<N&<Yï„:¡M¢ëâ¤÷¦rC½©ÝWî«I&"¡È’¤
+¢—PÄ{½¦¤‚ªó85ªšç8¯í±¼*Aô6÷HØ”®H$*KIi4/1¦´_"ҩʈ¨yˆwwHòc'°}æô8€óï6	í°æ®KÜÕ®6‹ì’ÆÆ Å±1 ¬³¡Dm ºN¥[Œm0n1­Á;7…Wáåßz±ǁãჹ©ÃëÓ›ÖoKåì…¹‡_Ùðƒ×3Gæ¾OÚwEª3UëwTÙlk†ËOjËNæmÓ³‰öxz=W!ˆº–á %2‘)ŒÀ˜ ÛϝñŒ3YW–›t͐:Íx‹˜"6éI¹RÜ6¶ÅÕé9î:Î}èú›¦^ R-$ƒt”ŒÒ«ä*}@P7¹ÇÊ
+",©ƒ¯v¹LéöIí¥ƒ”RÛ»üÆj:Bc‰Á°,ð)Ž‡Lgçá!W3dÄfdJK‡·Àßíæü#äçŸ,™Vò‚ÊÁCyhµ.	2Q•®n!Ø[aÊ0ãBžø^žÊMEñò?æ¦ ó>êùâŒkÞÌm%}ÎÌ4üJæì2¼Œ CTf³g¿g”fÕÇ?4ÿË©=Â^ÒëÂe2©§\•b¥7¥mäÖ«»\íê{ì	¥ŸégûÕ~íŒ~Eœ&÷`¸ÓÚœèb©:mpÁ®³ÔME5¨˜zƒëòíÕÏ‘azUFªi‹#Õì‘jH‡UÔ`¹	¢=”ÌR|›bg¨ž…¡ze[ËB>ÿjEƝ2¶bF¦ò›¼¬ùʐfÏ»4?ïÒ¯y›ñ:‹PN2ò¼†·hXëöy4¿æãGÈûùñ×å!À°ð ]sâå”Æ6«*øJÝBU\"b_ÆN˜ ‹Ìó¸Îî+5¶Tùðl¦r·£Ø¼Ô”ÞöËïìLlL®©O;`=ÚŸëhî0gÔ°zÓнï öFƇX“ía{Ù«ìmv–åYì(úÚ
+ÕI¶…v²gØ,ÇYzOÒiü*€‡›ëa¨s¹±B›ÑmØW„nÆä»Ùâòµ-äçÅ•³9Œ­6»wAd\…£¹Ëì…×Ã'ŸFÈõ7ð;‹p-ÅÕs
+u#·×­»MFKØéi}µ}Ë̯«nJìH÷iñめÂ[âuyRç’	ût4q;ÁÆä˜Å"%å%V
+Js “ZM(U¾Qh´†PCt›Ð"·„ºÈaá˜Ù™@ýbŸÜ§
+ô…N™'­3‰óÂYï°<Ž&ÆÑ„˜U&
+>
+™(ÌƳ|Ÿò¹ïFÁdø†y³p2>î*÷
+î†ÿbÞ+¼ÿú§øÔ|%Aö$0!´<Ç’¬(^Ÿ¦ª:WDJËi{ÅTuNBá°‰ê‘HÇ㦅tËBŠª†#‘¸Åûã<_g8Œ\º KQ2|sRWÉ«#äRF7'#ór%‚#É%d8›†âö¦>“Ñ+-¼ÃÂ[¬‹Xݪ?â·ypÄ8,¦jËr^”ój1S§Ì8ê_gxûX¥Án¯]jûâ[‘-ËIÈòüô’ÖGœ›7ŽÌÏÂ-·óJÚ(iü?±˜sŒùÿ	ýã×.—ó—b)ôãÓ¯Ôj.ïéèÍM5ª«_yn­õrnêˆ?]•|©1$†¾‘›bJœxi{Ó«G÷ÖtͽFŽíS*Vµn½œ‹’ƒ{
+ã©Ú›‹;rg¾i€ºã9ÛQÎ-3šÛe†šÜÔ ø´r‹»ÇÝS˜i4-ßWègJvY6pSaΉ?óŽsYé+róç&å¯wõñ}^&æ¯ák¼)‰¡b¾ÄK¯ó“Âç=%㏸Ï€DÛ¹7äv…Öó
+Þž  eWe/¸pÀ-¦(ëp€Ó@ºa A¯ÅY{QdŠÐ,Úd	7T÷ˆø8/S¼"YLŠëDjŠ"—4o1°Ñý†³›—º4ÈÔcŸ^—߆ÿð]õ±Mœgü}ï^¿wöž÷ÎöùìrIü‘ĉà ¤@¸RBø
+I$á#¤­XV±­0¾V‘h1Ñ6™¯­4֐šP´Š´òGD`¡#jEej@Ë4­YGË°÷œÑmìì»×²_Ëççù=¿ÿ§ÓÖeöË5i¼,ÅNC at Lwxö&,ŽLï	ãg'ûþ¤ëÿÛðÉ—al;ûž#¹?LÞÝ|ú©¹Ç‹‚5VK4/Iìœù‹Çorkö*çnhª~/¹t}gj”B³P ½e–-òù¿Aÿï\!Ô¨¿V]äo¶‘íþýþñ Ä¬,ȬÈ¢<hi&UZ«9
+ÞôEí’3DÍ¢ieÔ¬-§fMy½N¹Vz˜öÐ%ˆ2jÐ:Nm´¼»®.è	1€øçq Í?gÖ¥ClËkÿ"DcbÇb1ëLsdG»›¡ÜéÈ×¼Hg°ž‰‰;q–ïc1ùNò~â^?}Ûº–®†ë¶6tà0
+­ÉÇ·“ÉäþíÄKÚ^Þ|{mÇÞoÅþ{ò;ä&Tƒ¡©è‘ù“:çBuVlSmeÀŒ
+F›ºÉ8ŠNÈ'ØoÐò;ò9õ*p
+°Q™”2.äiœ^Fv·)C†S\2沱˓åR øaY6ò0ë¯Òl £'š%ÉLÖC=âu°AVÍ‹)‘k­7@?˜hˆ
+â&Ñ&B¥Îî4°‘v6rÆÙXáoˆa KÖ	ùÏŸÓ‡gõØ2‹±:ê,êj±JØëË`ôk+‰à&€ç$BŸ¨è×ci
+hý§ã§PAæk:Úôæ`Oâý¿»åðŽåµ¯4u4/ß·˜D¾·°ú³‘äÝ˧Î<¾Å¯Þù£o?hÛ¶{ËŸ@Ñ<0ÒÞdt×l	saG™}€¿õ×,ºœ¡Y¾¬0Š8K•Jç¡IjU6
+ݏ>|
+8䏝£NÕÉkÜ	ላ¬òátaÊÙ	çÄ.—!#,#—ì°÷á·À»XãŽdFÓ9lNyÅŒb€íãjLÅðsB§À	‡z at -\iM8_/cù“}ïr°†2J=2ÆZ¾héIƒñɸÿ»Ué:ZULS{G{Úˆ§ù9qiz>
+œKôT×¾-^|¬±h5˜͹ïÚtq0yªSÓ¸ªSŒuå§î˜vˆŽº—p_êáÛöª|X̃R‹ñiq3Þ·9\ba…T›µ-ÿ¶óFøžSòma-ß…8jò¨M`(Îñ²¼ŠpM^mØŒ· 5®Þm¹¯)´"ÒZÜßÛ;î:ííŽu÷ƽƒÚ¥Xñ—làUÉa7róòCáˆÓS„öåèXÖsôV}#xý>>dªj°È†Ës¸_Â÷ñASVIQ‘¤Ï/õÍõÕûx ϵ¿CCQµº•ÊQ”Eè´¨µEÅsæ3*E¸mD\êA×ÑD !yfV=ŒbœHïÃ'Ï•ÌkÔ3Úl¡|ŒÁë˜%ЀñÇi.%V";•ø2+“µ¾¯‚²øº™Þnz‚§MØ´ˆ-h>Ù?P•ž_•E<íà1qGú#wXK³MyY4
+E#åe•¹ Ç¶HÔj¹×ãÓ¬‡×3)ÁZø¥Öfzµç“ÿ¬~~Ý̽ÿA0ùo©¹zu}ÿµë“£Ÿ=Â…ÅÍ‹Š§Æ¦ø4£qú²]»ÖìNtÆŸš-°‚9³¾¹åȧ§¬Y:žå
+[ô÷šùy=˜æá‰}ÿTü¹t›ð/“WÉ+â«~‚±,TÞÉ¿Æ_á/“[ü¡ünþ Ïsœ@l6Ú©®qšM¡ŠÀ˜¦Üï°¿øÇ©2œ}»”·Äaå–ŸôÓ~ö!þˆóâ{J? ä¤økûúI/¾(ÐN¥3ûg$!&ìÝ„6ëÛí;ôNÚ)t2šç¯!µöf¾Ù¾ÊKóĈÝ`!¥ÄÑ)poÖKsáN$‰èšÆûy
+	"‘`#L9¯aøŒ¸.…¹ù>n¡YHˆDxÉÐxìÀÀ§ 2QŠ)ðâ8 %ê–”k½l¸ZÓI¯	Sî… x‘[‹²‘4`—ðµ×á{3ü)x¥P—Ö«]Òx¤1Í€šM{—[ŠØk9wxc#Y~À õÒ‰‰ö(ÀÓlÈ.³­ "1 ½tÄ"†˜u‘áØ—v‡.Öÿß& An3À]«œQægùü¤œYlË}¼ø`>^T×SÜÛâ/ªt/-Y¼ìèð*þÙ§/'»n$ŸÙ¡ä†…ò–¿qŸÿÓ|2A"pß‹ÍíœÈªfÙçxêìuž“6›Û¡Hœ¨ëȯ Ý.Ô7»ƒCA
+br`Q™ŸÓ™?Î
++3+]+”6g›k½²Ûâú¾²Wé·]a—}qÃÚǁñ °…[u{T™'6ž¹¯Û%«ÊïR_!œ$õ9ÒSãæ<ÄJV§ULˆ¡#܈2ª¨¡È+éÙ²Št¦lÛ­^W¹u®Z¯ò°ÝPw«T^íÃ7Í\B:îÒ»õ^ý’>¤Û}šÎé0uŸžíx¶q2_ÆJ¡A8cÖ2V-0ǬÐe¹µÉHiÙ5‹ÉgÂa5+­‹¾ª}"ëiœ´©Ç ^fSÍUVTº!lVN6ÇqÎ}~ydñ²êl·¶ç|šœ˜Ú{}O"Dÿ¸=Ÿ7eÖÒêø‹ø«GŸtJìª<iÍñ1ðу.IXº€$à'µ
+õ¥®˜«Ôªå VÎuÂJOEP>ŽÙfàEè܈Vàõx3Þ!îÁ¯¡øuî—ü1û1ÇQ©Ëy
+õ:¯:®HCÎlätã­h‡tǧÑ|‚ }[Í ¶‹u¥<rPÌKðÒa‡£{hþ‹ýªªÊâç~¼{ßG烙G§E¥S¨S°-µ£
+óŠm*iU”µXX-b:í²¢—nüHV«ü±I$‚†]5~@±
+±ÍFÐÕfmT–êڍ@0±ˆÁU§³ç¾‘l]³Ñ¿æ¾ù½{î×{sÏïsÏ	Y1«Ãbi‹€å·Â³”mžåž¤‡yh[ëct˜¦ú­„X.’ø$´¼ýä]È£ƒ¤ÎB†à¯ 9×UCVï$vÜëFÅuo ©øÇÝ D†»ÅÓ1¼UÉM
+)¦·œ9D¦4	ý/ÑI5LTìŸ7éŸ!2„úÛ ^Eýå‘=Π5Ò65Á¤>™ê< yWœý5H2*FõQãˆÉßæÓÞ5æÒQMþÉÚî}v“Wä>óUK>È7Ëm°MÛ&·v	¹Zvšøzy—¾Á»‘ÉfëFÙª'ŒkÍÛi'“UPÍ+´¨Ykż gÀ>K\*/ÑKòÂ^j}Eƒ\d9Þ­ûòÞ7MŒXš%ÀÌ'…–¤—¦b&D0fÜ4t]`Þ‚Q²n0Ia-ÅÝæѯööZd¿–vB&´uá‘;FþÈ$æF—A×éï9Ù4ú”cvˆ.±A|&8²ßî\*ê	ËréÈ$úÄ1Ì 
+Óet€þk·§U9ºSËRŠ>uÀŽ/w%dÊ:*ÁeR]!U‡ÝŠÃî³~­ÛM\ÜÙÄxÆEõ‚@TúnFã&4ÅÅMª2HŠñÇwM|qÙÄþ‰Ó›Ò‹H3ÑJÈB¦;Síh@µô-ԁg¢•ŸAÆmòš³'ÂH ò›ôMúXþI]+²|z<xZ;%ÎXü(=ÊŽòc?¨‡é!vˆk{µ~q`¸ö4û³ì§{Ø®mañ?ŠGõTëe›µ‡ƒ›ì-T»“ÞÉÖiwï§ÚR=&½Úè²µFÞ\B[Ù
+R«bµzÔh¢
+LÃ#ŒGŒ*ÊcÆýÁ>ÎJçÄXç÷<Æ‘^Nø:[ñ:@:œRÉm)qƒÔi`Û ¶.U¼(õø|•Æó4é\×8¶^ß+I†¯òµ;)u9 at cÎ,mcä$¡d-ÿ¤Üvì^»Ïæ~¼Øc6:¿¶—ÛCØökôL¦o¾ô<²‹Üö¤ÎrŠ‡Ú8'‡UçÖ™,
+bãÝŠõ¹dü;£Uns…ssÙl"+0uE–Òc{Qm†/j Øï‹Ú~_&“UÌ]óFJ¼“ŒuÔ=K¦.¸€Õþz‚”§’­Ëîk¿±§ð²Š×!ûŸ
+·íè'‡¿éytíüðß}o)Ï9
+=g¿ƒû…
+“	¾ÇYŠ‚F4šIÉÀ”Fð쎓8‹ó¸Œëq£ƒ&dº®’Ë­¤õx„<L’[å.ºK d/ÊAcÞaoˆ!ùŽ1"Fä	˜ŽúÚ1¨`ÔÁWЁôH(JKÑ¢Ò#¯„¢¢-UªØ6‡åŒPT–¤Lc¸Haz·6‚†iæÐËÞ(U–î•Ú‹?ždýèUý ^TŽaHÃ-šÏ”»Ù\÷âSãÊ ´øOgD—®ºTY¦"en§—:©”nŒP+ÑsÖKLC¦Í¤MÏaõÓSý$]ñºqìÙÔÇ!SVýŸØ‹øê{×Ñ{Ý„Ì|€~ù yÀÀyæMçàçGž7O	€7’Ïð¿0éÓÿŽ îÅÆObòH¡ßN˜ÒžÁuÿ;.º`*î©èm€ð· Óç”à"øßf¬˜¹ ¬%‹c ³q~9®«X0÷¹*qmê¢ÿCtà
+TMÝÌûÀ©Ë!‡rÈ!‡rÈ!‡rÈ(¦½ªØÀ”D0‡"~´°sþI¸~r~¨@eeúJ R
+3/)ss+¡ªº¢ß¯ihlºjÁÂEÍW/†x¢µí¸nÉõ7,ý´/ûñ—ÿ…CÞ§‚·ê…0̆¸ê¡@®…%°’°Ö§Ó8/—B…;~%4A´áø
+X=pw:þøüWVû?TPÕéÏp†«²ÏaÂ;Éî „WF(ÍVs{fCcV¦¸·ßde†ý¿ÏÊå²²@ùÃÆDcKK¼¬¾§sÅšYó»Ö¬\¸vŚΛZ7¾6hÁ+e¨¬ètÕ4æCÖ+a!¬u{:áfTâ-p+ü[+pæO[ûsÎÎh˜íÄ[®
+µè‡9¸ø‡ø50l£IŽè%Õú®†U4€ËÏ–ÿ¤2†üžÖëê1ÃzŒÓ,£X\ºûÊ_Ý—z¡îÎÞÑ:X­ê—›?úø›ÍߦŒz=†Műûä ƒøi·
+endstream
+endobj
+87 0 obj
+<< 
+/Type /FontDescriptor 
+/Ascent 891 
+/CapHeight 656 
+/Descent -216 
+/Flags 98 
+/FontBBox [ -547 -307 1206 1032 ] 
+/FontName /EPENPE+TimesNewRoman,BoldItalic 
+/ItalicAngle -15 
+/StemV 133 
+/FontFile2 88 0 R 
+>> 
+endobj
+88 0 obj
+<< /Filter /FlateDecode /Length 8137 /Length1 16336 >> 
+stream
+H‰\U	T”×þî}ÿ?ˆ‚‚‚qpX”ÅŨ¬Ê€âŠ1ö€€a•EÛ£†x¨’IE%M4Æc%G†Æ*II‚Æ¥¶¸ ‰RFp©&4š“àü½L<mÒ¹ç͹ï½ûîòÝåèŽuPH›1kXTî”ô
+@Â$9>¯Ð^<c{\Ó
+PÖ¼•%çÄæ»rw0—-(Î/<6â½FÀ-Ðãò—¬^ðCm¯“@ˆˆ˜+
+æÛóŽ´­÷};ä`txž4wˆÁ·dTPX²*¼i`˜ì=&/)šgG¿æ ‘²¾Ð¾ªØ­ˆ^•÷ƒEÞ²Ô^8ÿ§^f .Kü9U\´¢ÄøVnÛu_¼|~ñ¶ÓUâ€7àÞ®ËK}*Ê
+P[ám²nʺãœltê‹au.2ZUoyÝùtýüÆC²àÌÆWˆB	Î
+7µ” w|Gnà:øÒó`ôE=. 
+÷a5>ÆU|hãKôäCHÅ;”JéŠl”7V$`,Æa:nˆž8ò]ËÈÍi`*6à
+œD|ä¾PÍÔ[0Xh—^/šóäô2eÒZã¨Ñ"ñV ÿ¢ *ÑRDßrˆe÷¿bŒøXˆ7ÉObE¢58AƒŒ’㍸ÁáúsŽ‰¨Ä·i§ŒZãˆñ9"ÄÃÄËëŨÆ^ÔS#ª$£ãå켎?ãcò +êµÅÈtF Kq8‡r“F
+\Âkø’Ä4“$¢,¡D•¼­Á8p
+h$FÓ³”L[Õ¡'ë	0£ŸÄƒLÁñ8Úð˜úR(EÐ(š(èeSƒj×Jô(=Þ€±nðÍ…(Äþ€Í؇#x$o†P©±Ü(š»xdˆÌ2Áe½PƒdåêC>âåt‘¯iZ€±ÉFŠx:
+sP€%"½/aΠ×ÑNfH!”@‹¨UÍU{Ô>Õ¤·è÷-Æ*ã=£Í¸-ž	B³‘.¶6¾åØ"qþ
+GqLpi—Zx,VýDOÍ¥µ´ƒÞ¦&:O?r8òY¡kj¤ªT7´ýZ§æÔËõÛ¦OœÍÆd‰‚¤#5øŠ…Xñð7u>^$‚Ó§8¿ãKÜÅwbÁƒ<±h¡±âm*M£íbé$up§qºX*â­ü¾‚ê¯Â”]mS»µ‘Z¢¶Z»¬ÝÑ~Ò×èú~³Ý™ã¬Œ{ÃŒ‰F;ü$Ç	‚Îb©þUX+¹ÜŠíbýä±—¡›¸%tàždàG2‰=…úPÅK~»üȤ<*¢2ª¤÷éj¦6ºE÷XgâÑÃñ<žsx%¿.ô&ãÕ[…ªpµBU¨ÕQu^óÒ^Ö}$ûQzªn׫LÕ¦s¨y’9×ÍÛ­éIØ“/œV§Í™ïÜæ<`ã,Ãnì4ö‡¥WŽÿ0®÷]5¡¤r¼%¦ éÂpé€xÉü<‡¹BK¥KÖHæ_Æ&é‹×°CP®•8›¤Îâ<nã<‰Ü¨õ’šêªã1®h%ÒETL%´š6H¼åô
+½F¢·\´Ÿê©%ó—é
+µR+{sÀCx¸P§ðB.å2®â=|ðQ©Œ«ÜÆ_ó}å­Æ©dU®ªÕ»ê#õ™ú\ÝP_©‡ZˆÐR­YkÕ{ëSô•úý°~TlŠ1ešêMwÌ&ss9ÍüŽù3³áŠG"q\Ã/~ªŒkù!Õ³N¥Z¥ÐNÚ¥»þeq)fÒ¶«~*†TuP9¯bêý.©Ë ¶ÓN©ëe°Q*—¡úé
+–žHæ¢õ§j6*×l]Öx¸~AóQÙ´VZŠhí2õmZ%‚9—¯Ò9m”ò[Ϩ#ÚNýŽ’	ÏŒ{Zwu†Ý¥¶ñ,õ6_ãsðÀEé6 ŠÜ¥ŸjéEÖ¸”vò]Aükž®B´LÕ¡>ÕBpXåJÏ@¨ÑAAئòqIý–+Uˆ
+éò‘.¡„
+ÞË}y•JÃÈ´=LáT€0‚jhj¨I¾ÁÌÄ
+:iRìOH—JRѼœ*´$ºÅÈ‹‚Ëd>.™Îa¼—ÎÊܬãê/*|ð*eó^4;¯“CjhŽª’	õ½ù%åÍZ6v“M>Ã[qÐù‰:;ê­Pÿ¦¡<H«’eìë%[÷¥Îf©ƒT£w˜üè~‡ÓhVk¥n?BSçÄÎ:”ñ¾Îjyü!å«pÓh#Q(Pž4þÎ"ã§ÒþƹÚy°ó1A½ÛÙ£Ó®ÂdžTb·L—©`š+¾Qº$Sd²Ôc£q\úa¹Ì¶ù"US´|âd•Êä¹(ÓÞ,ùºÌ©Z„v.Af—Uì—Yš¦ïÅ–ÄÄÄ„ø¸Ø˜qcÇ<=jdÔˆáÆFF„‡
+dhøÌ€ ÿþýü|ûúôéÝ«§·WîžÝ<ÜÝÌ&]SLˆH¶¦äX!9-Ä:iRd×Þj—û/r9JùµŒÃ’ã³üZ2Q$üŸdâÏ’‰ÿ•$oK,b##,ÉV‹ã´Íj©§93Ó…ÅfÍ°8Ú]ü4¿ÅÅw>0PX’ý
+låX’)+6%çØD]]7$kÒ|ÈÔyt¶›p_kqùÆ“‹aßäqu·î┣¿Õ–ìègµuyàPÁÉö<GÚÌôd›``Fd„ƒ’æYs°Npx…»Dä2ã0%9Ì.3–…]Ñ`³¥.¢qSE½7rsÂ=ó¬yö¬t‡²gtÙè.vmßÒ›~ÿÛŠò^ÿa½j€ª:®ð¹wï½ü‰¨Á
+H|ÌMðH•'ÊLDƱ¨`ŒŽ	Ö65&´ù±ó„ÖŸ$Õ6Ñ8Τ´ñÊ<£ Q3Æ&ŽÍdˆ55c;‰cSccZüI…·ýÎÞûž<´­éTøøv÷ìÙ{öìÙsÖåzK“„¿pøcnîúý܁×KÊ{KSøoEÖ€®žê«òûðézvâðñ0„Íç­Ø›ªñòHÕ
+w ÖSàYî_Q…óHô¨tmJKb¢÷ ü%ºýeåž”@~’§bñÌÍ÷’¿tí¾¯;!Z’5¶9n°íÍæ{9{7j"2ÕRÓ¹UTq§ÆyBÜKÝ°¤ÜƒäðŸšò/ÍÁ4ü«Ð ¨Æ1<ˆQåËÃxëÌÔ8Û•pìžË_D,vF¬Ô¸«ÄMŽH|An23cÆp\¸fà aã4ÕŸ”5öÉ ~ÞSçÁ}T\µŠ¼ñðyJ
+ŸêÆ —– ¨+)·ûnZ’ÔBÞñ™½Š%aIü<–Ô…%õ*Âw?ñâ1i‘ßAqÆ.ÏhÃþƒ¸Æ–Íõ•T–»ýUŽo‹Ê¢z¶<'"sZ¡3ÊE’î´ô$¡¤ˆÄ…‘ÉÜ)0Rñk©H®ºbŠjDsûqU³ì¿ýRRîR)(¯°–¢[jŽ™¼ÌèþƒQý(óø6Òô¢²J¿¿_”̇´ã÷û<nŸ¿Ê¿8(ë–xÜqÿAqXö×V…O4(ßÚ˜ðÕW`˵¼,Rï@r¥„
+iA¬~sgw(ö
+¼b\QU|³•«PցH¦ÕÆj­Ä *æXô‰•K‹t¼õFzTo”	¿füœŠuBUh¤àz®¬Äøjà~ ày£€ï 뀯€ÙÀ蔯Ñk¼aΗõÀûæ|zÑ<![Ñ¢Mæ	ú™•+ÛE²$¯`¼ÝøT¶»’å!Ìk‡|úǘ!;b¬‘ŸÒnô; ÿW2ucüyŒ±Þ»ØÇ;z.½NÆ÷5gæ.Ø‘
+4œÎÒCüÍWŒ5” =7Ô
+Ù ´ïƒoîÅx"úÙ˜cGÇØ)!
+™kä†\Èw‹é…ì’~’hÇh§~RNÇ÷G;ûnPûæ=;{bû›nÖÍè
+|3«7ðýa¶m}°†
+¢@Ô,&Ð~ð*à!Øú™~ŠªÁ0(´Ûü'=Έ!Ù£7j[ૃF5e»`ó	šgîÇ«¬šîã1’—Weè¢9eZ¯`­jš ?€8K¡z}!©Q:tÓð½‘@,ü–nœÅ·«©úR­sAùv.pOÑ^ÇOõìW=‡¹_Á®/0çïØçÒXߟÏäs×æ‡6@žÛŸr5¡ÍÀ&èw!ö…±hÇw&:ß	öâ Ç^o8çFGÊ÷ô Ø[bôûƒG"îæ }^Åb.Ç+Öìæ>ø/°w"ÛnïA¾­bì,ÍBÌü>\Ô OXDkàüä÷ù¾p̪ûb¯}“c‹c&ÌßišÞ¤}Éû䘊0ß½ÊPqÈ{Gl…Ù±9…ÙÈ´YUö"Þn±Š¥l¾|'¶‡ï'òÆufÃËßB¬#Ãìøâb„;å+‰j­bú±±
+±‘@©b
+6Š© vM4ÞTwl¶é£èïR¬«ƒFá,çÀ†í}xÃÕ©­0;èœÊ?§h;8ÍèÄ˹S3Í&ù¹qYë0›ôg¸};÷Ex.3£·ì›Žÿ/Ð?2›hÚ5;qw:iöJ®KÚý€;Ìoê€11™Ú¶˜•ZÐ5â7]À8‡<ÓKSŒÊ7âÉ?¥b|žõ2âh%Á_•ºWË7Vj%Vm+‘ãñ-ý#ZÈàõÁÜŠ'k“o±Š¡¬Û؉׾Ì9Ÿón˜9žù~݁¿Åµù9¨êr´êâl‘—‰V¡<dÌ¥á‘øŒŠSÄ™Ÿq¹kN<úîÀÇ™íڂس練ëçrÞ¿“Ó8GržÃÝw…ç÷å[úZ
+rÃr•‡OQ¥s¯êãuòçaûÚšB^WÎk yͳäÅ<¯5‹¦aßW#5Ր;Øß|ŸÂµ”ý¬ÔQŸü€ý9Ï;ft¡îñý„m\?­etͼ!ÿ¦ò
+×RÜCu‘kÕ9\‚Í	²L”Q¾Ø€|Ê9|4•¨Z4•’°¿­ðïO¸&Šmœ»!)«ÄfÔI芠,1Ëi­y’„εæ0óÛom¤-œÌªtÎ*~¸fÊŸºNËvk=m1Wa›é=ì¥Mù ^þ‘ý t(ãy-W¹¬3†È÷yŽšÇ:ëåöû¨·/8†Õ›‚×<E[•?r±V7]‹Õeʧs®·åÇæyÖœD11kä>ó9ù#U¯C4]l¥‰z—¼$nÐ8Ž{×y]Œ”g8ŽîÁ»)	ç´Nî0V;ï
+õ¾ß~opŒ˜oÙï	¥3–âö0ØBß6¨BìJåEóÖ©üeŒ§á"Už¥ê¾Hû-Ãï„P+Îý5Ôé¾cl¾‘öTq÷ª‹ò‘K¦»JåoE417É®_q*þQÇlh§í9šyêô¢=MoOëí4…߁Æ(ùŽh“{…)׉ç¨	±sU
+us+á$7-Ó§ámòí/Ê¢ž^Ë?“ä×z-}Wß"_oÐ#N¾&.Ò3b—<l,Çüò´÷‹zÓ\A‡
+—|Á¸B­F+5OS³ö!ÕŠ'QK†Èëø^ŽZÿ%zTl—GE½<Šõ±^o°­aÜÁæZØ<˱wIo{•­Ža#öí¢aûxßj]Öã}̓׈ä9 Õæ¿Ë§r^W9«ˆ²­	ÈEˆzZ]˜û,úÝÀoО@%„WFè`€7Ï,S¤¡ÿ=#‘†8y¦ó1Ê–`^øwàÏ ¬Û}Àº=‹GÐþÀñÞl³¡Ú;¡ó<Ö©';ã¿Æ|´{¶£=ܼ˜á`0ÆÚÜ}ãó¶wÉÿŸï\î’ú“a³üú¶šòM¸è®8ª…Ïÿ¿q¸¶ôå°Âu´—=ÿ®æE1¥Ýù¡éý©÷m'°8
+²Ctì+,ÌöÁ™ã·¤gddAKbZv›èÀ[m4Ä@{Ë°$%ik)(p“sìƾ1YÙç§÷mô% ‹6ÑNé¶Ö¾ôqÙW‚¢ý€¶ÉÚô/â«?¶‰ëŽ¿÷î|w!9|6ùaêÚ/ç8Øä '1±“ØÅç`ÃZsK(MhC¬©¢Á$°eU›1u›ª­Z«ý1†ÎñëÒÐ&Ý*¶yìŸUêM‘¦NÊжM*,û¾sT6i쿝ý>Ÿ÷¾ßÏû~ß}ïîÙ'’‰ù¯“«fCT·ÈÕóG•´2ôAÛ
+CNÀsÐÊÞ¶{½€'í^0­\ÕOs!N/4'uà-zNÓ_Óêè _¤Ãô›”çi9
+ÒÕ4C3tŽ’3t’þ‚r×7
+ä…«…s…©_(ŒyÁxÕxÛx×à
+#>ʏ:È(刓Ã×¹[Ünžãq'¸sÜÇ·s½Ü 7Êñ'È92E®¾è¸ÎñEÇ1Ž§\„Kqí?šösý£A{ml·1ecÄFj£ÓÆyï0äúM5îLÉM6ð´[Ð8¨ÅM¨ÅM4hà]ì× FN@
+-­OnÂç|®BÕÊ1¼S L„ªªàq»$=í"‡ñq”B2~ÄÆJ†d¬bˆ‡/”ÿvPÞPNˤ	Á᱑cˆ·Ù¸D¯
+ʧ‚ò÷‚ò7‚ò`P~2(¯ʁ ›ô(òƒ|1Cü¾oÚøUÝç—ïúå¿øå?øå›~ùW~yŸ_Þí—Ÿö˝~y’”£8èNê¥qùÓ¸¼2.ûâ²E*.83NT2I*P'MÃG-Òj(nuô
+iDÚ’U&}‰¦KÈ
+Dq-Œ5àÍÀu¶]&a¬£S¼Ë¶ûQ”gó|ft¢yÍh¨ÒTWRÿÌ4ü@S¦ñÐ{¦Q Wðd1¾lÒg "¾ÂØD1	£~8oÆ&aÖ93v„ßÆ»Ð3`>¼ø”©® ÷Mµ	è-SM ½aª[!ÅëðCÎB=Ë_Á#È°#ïgHWà}ÅsÃCy'ðî…ŒƒÀÌþ¥â9á3z€¥îGªm߁6¯7 [ùZè3]EÉàVµÇ-ft5,&fª« {Þ,™µÑLœ!…¤`¸´X¢*S]ä2›
+@’iŒ 	&=ä0c{ÐeüžÖ¹	¬KX_BïDWÐ?CðYu½
+çtË°06éï@\{‘Þ ú[[z‰~;J?R-¼Ù¤¿IØT0lú¥1ÉÖŠ~Žuó8½6Á.§I?ŒZ ”þ4š ïG›é{0µÖ¤“‰I‰‰Ïã] þ‘…õË;é›j¾ÑdáWt'}NíPúo5ÍÀfbñù€ÚLGÙôKôÙè:”—è#D¿Á0©ßxŒîPÒ¾h'Ý’˜d— uA†½ô	XŽ„/ÒÇáÛ‹Ù6ÄŽÓ\D6é£	‹°E~.Q YµŽ®…xµz%m3:iª¡GÒ–ØNºJ­§+`¶9B5([TnÒ[‰I_!O mL_%þ^<-7‹kÄÕb½¸\\&ÖŠÕb¹ä–i±T&-’$Ix‰HH*·æoë+l4å‚ÂHàòv_! ÁA¡ï’ðYFSиü.GrÛòq-g‰óùf-—;žìÇøÛÝ8—ŸÞrÛ«ów7ÖXxѶä5m8ïΡܦ6ˆóäÜ›º,<ÏfòæÝk»&`·j9ô¢—qòЋÝÝ¡Êý)OʽÆÕ².ó_ oµ‡GûÃ£ùòßÏmìÊÿØםody_w.ÚXýT×9Bg3dŒQw×’#ÙNfÇÁL7ÈêmÞæS)ʶã]L÷Üv[¶Ö–Á.22ØÆlÙŠ(“}+“ÁU.êbv8ÔºNzÅl]LzÙÖñ¸˜VG­ÙÌxk«­òßƺT÷߶“–1Ñx"’h‚IÆÝ	Œ'ܶ»á[-º;ŠîÛÝòÀÝTt÷Ý=àÖþ/ÇÓmÿ³4;°±
+ç:ºÆ%ÔÖ½ö©"W*»×Øw’ëÔ#‡¼ï`/÷1*Õºó‹jÚò¥5m(•òhJGryy»ÝæóͬŒŸõ…²¼ R‹’P=Ï{ßá>mG)³¼àZ™^™f.xj˜k1˜.Ïó	rŸ^p)`vAnOv _FCpkÙÌðð¾…1†ñА–õ€§ˆ¶BÓÊf²lÚð>¤iC`ú¬ûà1…‡”½‰ÀþˆÈ'x;‘€D²×DÞÂÎZ$²ÎEŒ–J‚c
+üq8ÿª±† 0w“÷“ŸWæ’Æý$JA_¹ÐP¯ºTW- ìè^57}Ow OQ5?
+ó;çgH÷*EUh¥^*¤‘X–v—résºìLG*R¤b“gûwY‚žÙ¹Y”šMÍ6ÔãÆÊŠr¡&°¬iuŒû·>>›éëËBÛ“íÛ–æ^³)“ÙvÿX_±×WË‚óÝíØ€êñÙ	¤ÎÿU(SRK¥ÎTµ£Zˆˆ©ÃÑ!ôŠ½’¤4âªÀˆƒDB‘pj	6‡Ráõ®öP{xK°7ÔÞÚþJ`,ðaàô'þO‚wÅÊð:¥|õÒ
+“T,	9üS¤â È‰©ÑËÉ'"AúN°
+Øáô¥^W¸#²püBÀ×á÷[˜×+Ô>ØŽ±RÂ1á„pK¸#‚Å5èUXÁ
+¼l¹\T
+”ôò²”ª´:‹8¿|yØ›.#ÍȇBPà0òVÁßDªçú/„
+Q,®__†#ø¾ƒ9'ü.a_˜ø$µ!P—+Úú:Ý]šªûÉð"ÝýÐúïxOz‰wºQ­R5?;¥’´¯ËÌÖfµØhwËžžÈlRI*³Êì,èþ39¶xÖ4ÇsÊb2©y”¹ždŽ<ô5åžÈL]î–±_µ±MUaø}ïííîm×û1n×躵ka+n²uÛšõ2Û"Ý–9¾¢e[`ŒÁ>²
+eÙ@ŒˆÃ&‚@0ˆÆÑ!™ñ‡Ã£FB"‰ðc	 !l­ïí:‰Å„üÑsóœóž÷=÷ÜÞó¼}ι΢IïÄp¦!ªc±@l`bt/²¥%¡òRÖ*úçû½^ÖhUmÙ¥%ùäÌ+§Øœd¤<õRÜOñ·‹Îœ¨ôð
+K‚žÍ¯*Ù¹k>Ä¢á‚7ïgnXëOXCífCŪ|ÃÜÂ݇9œ¾Õ>2}£,¯|™dŠW„]6QÝ·?¾Ç}ín(ôdøâ­/Ъ(‡Î&n·Syñ­E•È,•±P*ö{+ ÌTq•–Ê©r‡=aoƒ¡N©Ë‰zd	CY7ØLÞfçw»`1¹{ŽÃeç™oS²]6Q§gžhQ-:±"‚h¡Í-ɪ„Œ$»);h@¦"«²>@QdÏ{D›ëõ‚ÀóÀØm¼$òŠ˜¿À"ÊŠ,Õ‰ðsšDÖMÄ&±MdÄ	æ»ÓïúÐG³ÕœÅJDiRv({Nù:_mŠMTòM‹'©“^i8)ÇîÆÐqÕ._•')äˆë—œä}†k‘¸ÞÅÙ“¤“´ê>;È“H©òPJ† åA’yˆ!Îrša4f ‘8Ï.Í ºËC¡rôSˆù	ß?'E¢f<ijÙì‹ꟾ¿g©kâË„
+{a³ÝeõõfnùÔ03*,	s>ײíþÃëS£Å¾ÐŸÏ$?¿’ý±ÊC'\zW¸s\Ȑ£šÙUhÊÎÓ+ëDâƸ93H' ‹šƒ«M«ÕÌ°eW§”ñ¬³[Ô0‘8¯Ij^„]‡Ç¥?x&ùƝsƒz«	6{0Óéé±廁À@ô:iç ¢×g.¦Ë3çñ“¬eAiI6‰dçxD†Ñߟ^>‹–…ÑŽÛÇS—FŸýæÀ©¦þám½›žë‹üª+wçµ¾Ëx¥m—¦ãìà
+®²bç½xëÞ‘í
+û˜E?¿1ªŸÑŽ‘î¦<v`©V‘eæ+™ˆ±’¯´6ð
+ÖUB—¹KÚjÚ"î2Ÿ@QV—,	¢KâÁ­ZU«ž{ªjeÌb­xëY`d‰W¬ªÌÖ1'³"x¿ÇrñilÃWðr;ðhRmऽΡ•Ï‹´;ðǘƒ¦Iœ?ítÂçô¦2Á3NAµ©NÓ:?>4#8¤88Y$͹]LÒ€´kê?uÁB}FZ¼5·')I
+G’ÒúSê«­Oòð‰[ã欱{mÜ¢$[ÍJ[ƒÙN[’+¬I•äêÔþ¹óRj”LK[FR…2Õ‹õ†gºò™‘}ñKŽê6aº-³kí|,:|iÕ|ny|¿+{ã?Å®(ð?Åø|ѝì4÷ò~H•—ž nü{°ÁGƒ£nêadìI#4ÒH#4ÒH#4ÒHã¿0€ÉïJXÝB'Á,ìßF\̳Ƣ½.ô´ÿŸb€zª3§2 at .TB-4Ak"AÞ™^£ÞKü:{¥ÖñA¡%JÜüÇgð°!unª1õd7]3¶‘¬jƒ@žjˆ¥lD8”²Yò²
+dÿ–²P¾ÚæÚÆæÚ@kwoçPcçÖ–þÞŽ¾…5ý=ë¶tôt¯{¼0-Bsr!ô: ­Ð
+½Ð	Cäé„­ÐýÔï€>X5d÷Àzh€-äé¡‘ë(Þ	]ð"õ:`ð1çz’wÏ0Ǿ· ›€#vd(†%DåRÊ–úDŽQ„7¥÷f[ØÀdÑ픿¦H„
+h”q­z"ÂE¾†Je
+sðžø…±6)|‡wðÉÑÇÜ_×ÛOž½‚÷NïÞãk¨«çNræß Ò{X
+endstream
+endobj
+89 0 obj
+<< 
+/Type /FontDescriptor 
+/Ascent 832 
+/CapHeight 593 
+/Descent -300 
+/Flags 34 
+/FontBBox [ -46 -710 702 1221 ] 
+/FontName /EPEPAO+CourierNewPS-BoldMT 
+/ItalicAngle 0 
+/StemV 100 
+/FontFile2 90 0 R 
+>> 
+endobj
+90 0 obj
+<< /Filter /FlateDecode /Length 26043 /Length1 45228 >> 
+stream
+H‰ÜW	Tgÿ&$)—	ÚmQ?@*G0( ÖÆå’DÛºNÂ@¢¹È ¢Ñ"hµ´ED”ŠRŏöµ.®û<¨"^]­®¬[ñªµÞ‚î7PEmÝ}oßÛ}ûvæ}oæ~¿ïä? À6˜«QÇÿió€Ĺ€Ø?Yê:)Œ
+€§ñÒõfÂ6!dÊ^ O€ÓçÑ°ºkæ1$7àt=Ë–mö¯´­`p¢ßÎ6d]Ž@c^m ‰Ì½OB= h¢#Ü€«X
+ Ãz˜ÁLÏÈ+G¯Õ |LV=Õ7Phñh31Ãæ’ ¾‚ìµHZ39éËó ØÜŽð̳Y)]››¹ÍNÚÞäû@ú5 "%âa½7ób„0çb|Ü!æòø¥ãJï»`N¬:‡èîÝfa˜ÌƒçÜ'aq¹ ŸÊñ0æÉÂ8u©x
+.yãµzH±Ý{' €˜ 	h´Æ07_öÇq_êzTkYGìmoèo¬Q×9ÜÞŬ´XbQyó±WþüüÀòEe­C[5éŸà.ϱb©äsÙP|0Æˆ¦“v£Æ˜mZ{.EÃ$’ηڧËឌ‚PäúLAÕ½T&Áû¾ý–F3	54a¶-ÙPCÚóŒz¦Z­´lÚ§””ÔŠu‚Z;	*”JUŠV+þú€ˆ‘ðå=ð!ƒ\"FârY(>G×dDFÈBÃd¿ÿû(YùbÌ1.`—,Bq/g•”€RxË0K,-ñÚÊÛÖ Üåá2ñ¬¦#·óPXඓ÷øïø¹«â	ÿö¿¼=ùË#?Ü+ÛZÛ2ßïÚìwjÚŒos<{ögÜؘ1¥ŠÓ¬óÈ(ñjÍ©<å“rê°˜;/ü«Ê
+͉ã»nFùlJ_6Ç{…©´e|üÒiÍkÃOuóƒO4G,g±QQ¿Rl„+ÒcŇÜ1Ç»ŠžZ§± ›Û½$:Çw}ÿ…DdùÉ|ìãÉ5ºV†â;»öˆwK_6ÝY§Ú¿zÍYy×ç{{0§”Û0‹?ð3±òÖý‰ß9-^înÊx"/m-_yc[8›X¼÷Š0§f݁,]Lô’JŸÐjŸò2‡Ý=þÕï´ÂYžàš³Êޏã2æ•·Æ•UøÝOýÿ+âFÙpܯÏñãÙI…¯=é¿ñY|¿ŠîÆœDÎjMÚ-$—Ôþª¤¢,ÌgJz#q£yÓ¢ŠøŠsÍSŒçEº
+žìHÛÓ²OâN«#+»NòÞ­Ý´zÆäë»õªäÝBþãêðÁü?Y‡ot™0•+O.jÓ&·ï’ÄtÛížòtgq{gUs‘:ÆÝt¢º	K¯ßwTº2òNѺŒµ§}ÈËmœ±âë3ñ1†÷‚g÷ì`aìß(hóÔÇËþð…qû‰B[ÎwH,œ°Å×ó Íz¨¾=ü­÷KsäÎA÷>þþ⎪+~ßIǯm:»ð¬ç§­ìË|¿tÞI_į961îä¨ô»ÞGö½ìÚ¶üÒÇÆ_í0Çç]nÁëÝŠÛŠ:¢æÔ=\(ò|tP|ã|SWšÂ,™ƒ;økÑr«c³0˽ «Ê2·©}'6ÀRÛÒL漈˜…
+šø¨¿>Ca¸¬/áÏ+Bi5›I»ÞH˜ ÆšEçv¦äêLFÊ@Ú)¨Tô–ä(|„,ÇŸ—$C††É#ä“qöÁ„,í3ŠÎÏÏ—æ!C
+JõVsšÀVÊH[í!Ê
+³‡Õn“B]L%³¤¦®¥	ÚX¦–ÃecðÑ}~ä±Æl#6TÇB¥‰ (ƒa¢Qo·RB?ŽtÂdÌ$h£ÕóBeBœÏØóD¬4L„{0„³H0‘ ¨õh«E掻ö…Â)•Ì4[-™²!¸Ãa‹=ûÝ+F«½×í3¹ð5r`øj90€øÎ,†æŠãï¬Ëüû5Ï}OÍ…ŠdÁCk`N›ôMÍÚÐð‹'
+•÷¨tTu“G5b¸‡shæÝC6såõÃÛ·â5¡³v®Ÿî—½¬åRþUîå;«îoþníæÑól—XßOžmuKU-ð<Mž‹‚ÜÎèU¦¥‘®B?Ñ
+ïoá∙º¹ÜC¾ou§Ö6Ö&T”í(¼É—§ï0´Ä¨VGÉêw,yœv@²®~_ at r۝Ïn±‡þä¹þÁ†”¹\³îÖBQÙ¨3^®Ô^Þدü÷];òi΁=YÛVi}¾fÏz0¿ ¼1K°a£»wwéûïŒw½žAø&¶oÌ¼(ú|ÊÁÍ	·D;¡F®wpÏãî™ÞìqX8À…Ì«‡Ãfqëð’2†Â8%Åøœb÷ª¿SöªuØu[èX¥ÿ/4’ƒËjF_…¸7ƒ„ƒaO9ƒp1Î|ùõÙ
+d³œŠÊ6Rpx8Ï‹;8á/èSDZ‡Ö7дŠ	ù±ÊÁÞ]â`7k
+F
+êI;mÌ2ê	š„ÆÞ†aŠ¤˜®±“Y¤´èI	$,™ÐHS0—Bj¤h»QO›
+T®n©§!m•@Ú@Âþ <÷ËôKŠÐÓÌ@D£‰&ͤ…†þI€ Á¤™G›äF¡31H^öÖ HБ‚×4ŠA­
+6#7H¢‚ídN.IÑÔØ—õ¬vR}¦ørN%0T†ÒH 	©È##Ñšk¡	„*ÝHæKP
+aÄ|D˜ M£@z¶»1Û@3CRþŠ;&Le4(ôCD¡™LfJ¡R•ªU¨“©©Š$­Z¥±j2A¡NTÅBERìs8A¨FcX*`´“ÔIñ‘P;NÓ4*˜‡^Õš^wê8µR¡UADj´©j¥6aԤŌW)µP›Ì˜ÒU©jôÇ+éÌWyXT×?ç¾7#‚!B!¸.ˆŠ8(¢F˜8,2ƒDÐ­È ›(¢€€â†(†h¬Š¨¨(ĺ
+V×(UÁåÃÄÏ…l£bཞ@,m¿¯õëÜyË]ιgùsÏ{o½ÒßOèî¡Qz(ˆŽø*ü4$¶~¥ZDûÉ܃4>þ$‹q§êN
+dJß •²CfEp@ B­–uiEFðóPyê¹t“ܾŠ@êvjé(óRjüôä^ôî.p'=‚T€ À µÂÁ°É,¥J%óó×OSŒ¤R<üýÔŠA$¼Ò]å@$~JrfM§°þ¤U ÌÓÝ×Ý[¡v”©
+c½žúóBÏÃSA«Tj²´‡Žb?–\¦‹êŽÅèù	”´se±ºX=¬¢ækçªÛÁ=‘"#2‰ÈX›Bôp'GÄ$ie	ó"±ºDY¤V6GGSs
+L"dsæ$Å·G`”.~¡!fŒ“ۏZAHÕK tw4.vIwþo¼s<F­sŒž%Ï(×gŸQ"O—§KMfçø`Îkö@¤{©e‰„2¨e¿ÿÈŸŒ$|·’ÉgÊ-,»åC9+ø‘kçà°ƒeçwÄïrŠ,f~D¤£,&‘b៫K0üä–ïe:ÞH.¥lGÿnu¾RÛ¢Ú½$è^bØÚ¡çöÉ~Ž©8šê•ºcçÒS‹¤>æÚkáÃ_Ϙ”»èÈßûNH¹—Wf’î²1ܧðL0VŸ™:^\óá°…àíüÊGåÿËźåmžºAy77íl(xÞ(•sMñýê·s±'ªæ¤ŽIñœ´#{MKVÎx{ÇÆ}ÆO9Õú2s°¥eÊÁcHuyÒÿàüø7Å`/©Q»Q˜D»2ÎÊ­ßY©'çôþÁÂSÑÕ3qêvìÈvòNæ|Ÿ{ßÜüÖÜîqý©¡ÅqV{äsß[ÞËi¦\³Ë!}x€’ 惖î2ð£çbzN£ñ˜KoQô‰ECÒéÖ°……Ža‰ñIÚÄ%qÚÑÝÊ>ÁÑ1ºÌ³abcba“«.à/–U•ágG™â9óq~	iGj¯–Œsk¶OÿØ&´©6è;Ì¿Ý8Æá¾Õšìßjʃv®íÙ7nU|ñ€­^3V64»´íöíRljå#´nµxë麾aô‚úË­æ¡“·ž¸_ ©<ò'·ýo¬Šz+m.ðwZ°¨µ¡Ý6¹Šý÷|úûF¸$hc0Ö<ò¤m¹eŸ«q;í¿vñÏ2þq«ß7.mPŽ
+ýk~ð-O·~wM‹³’ŸÂò8›^÷,9speùG!?üxeÞ
+—U¿5O¹R6ûµÆxü¯¬J+&O,Ø[6¯;R´ÐÍ&ïÅîóÁýªžkÈ÷geâ
+ªô®uùGꔉ§iè¤xÿ÷ß´ÌN›m»çñܶÅ+8+÷;¯Õ‡6õÝ
+¼!r«÷±kò®Ó	ºïf$N¦úÏ'9}ȝœÆ„þt·‘/žÝþºÿž?ÏúâzÖõòî ÊH·:s1.çÖÂ>¹!)Ç|6é{ë·¶RN<.ée®i®®Š<ƒGk¾Ü`òdzo²-EŸ†ãi¦f,joÞ´‘w.»9ðDõ1u.ï±óö…˜¶µ—˜{MoÙáSpÀ'Æ_¾ÿôÈy‘쫧E/7ì8ÖzÞ›ƒO?âvòçúЂLB>),¸^Ÿè¯a• l“Œ¥nÿö'QÌ\"a=¤=“0žXº*½=9éo¾ºXÅ•Ll•˜	 é=PEý,ßH×&°¡ç . ˆ:®ÇÂrü…ÐÀîÒ⚎«ý58Œúúö¤{]«`æ µat3 ûRÈ‚@0…ÀÁh†C0œÆëa$Ì„Bjo¨gi¾Fl¦\PÃz{+¤þyLcýÙ@`PÃ…:*gBsn/$ã
+|É}Nü‰ƒÀΈJ„lØnä –L……°òáhŠƒÄX±¤`I{+Ľâeˆ Ù#P‡¹ >MÜI”jÊ<›à:ò³ù+m
+ÂJQ'ÖB/È…}h‚¶ŒŒgA?˜ nWÛµG?¼Mî‹GˆÿHp'N+h×|87 =±Ž·“€€â@ñªxzÀ¢Ý‚µ>8½°”ýŽ»Î½%ïZ7Q‡QVŒ¦<%Ô‘”/ÐÇ¡'ódál5Ûª¹Í|¿œ<³¾EŽÀ©8ÕXŠµXKÖZÂ¥	älòüpʺ
+PA8é›GžºlºÚÞF¡Óð+Ü…5øˆç4¼ÿ“%f^]s²—-Wâ !ÿ–ÁQ8IԏhGk’},º‘~™LÅ’9g.€û”[Æmäör·øY|™à,4‰Ùb‘X)Þ¿Ÿ?3£`:YZÁJžË‡Ýĵ
+îÂ/8§a,fbîÆÃX†•xÖ›•r.ÜfîüT~Q0Š…
+á…¨CÄVÒ/VÂjB[1ì#Ä#nÐU8Cq6qÌÁ\,Áj|ÆxÆŽsvÜ"n)—Êmá~å‡òKùÛ’d!\Ø,œåbI¼ZüÉj
+Ö0>!I?£ó*â RHæedóL’<ÛÐÖ“‡iÏoà[²ËCx¿bOì`”S›€SH«`LÄu¸÷àclÄWI’‘Ì…ù±hòg;ÏêØ#NÃâ*¹:®Ž·ä}ù Ba	_&‰™ÔÕèZK}kyÛ—mÛ&ÂÅ¢ØOôËÅj±^l¢È•áҏbjl$ÔT§®o¯Ÿ@#aHBx3Ã!h‡¾†dé²õv,¦v€SŽÔ*©Åxƒ¬âlA/³c£Iâ0ÅRÙ~všU33ál¸ÁdÏÉœ–lšÆ­âö‘µ\3÷Šÿ€ÿ·ã'ñZ~_ÊWñõ|‹Ä[â+Y,5“®“æudŽ®|¢Or
+æLüÙ?h¯þ਋+þv¿wGÈráÇåÇ™ø=¿\ $—H•cwÀ Ð»Àt¾	‰'C™Žµ#SÆX;£|AVKÁ––_ì!	Z‡q¼±
+þ¢:¶ŽEtŠÚšÜö³{—´cÛzû}{o÷½Ý}ûö½Ý÷XþŸÿž¿ÄCðˆÔÿ¡lf_Ñi¶þ†aå›QáGßãö,é)6—ý‚íáïïIÚM{Œ§Ù›üÚ
+ﯥOP3ÞÇjÙCü:܆?çÏЇ°Œüås¾x
+']B)#Å6Ð×ìö0]Æ^l<pw²³TÏbQêçUdÑÝ,E:¢u‡]̽÷íêîumãù6v™ñ]Zæ­¬‹v³*Ø[Š­¦#üO®ïºžƒ•6ÃKËÀÝÆ=ì^ØæNî¢}ü%Øn~¶^ñ¼w7üd¤žIwS„µc_±‰TÄ6ÃÚ¿ÏÜyÑ!6l¤±V³|VÃÇüFØù6ú%Ä;NÓé |„žgÝðãc,—vÒ´Ôø›k^Œ+®rwLòt7—­ô2n,¯qÓ;lîÅô6óÑÙ/o†5¦drþŒú¨Ã½À]Û¸‹÷Óv{.x=³‘<lt÷¸ÛÜ-îˆ{®{¶»Êp—ºݹ®Ë®÷\g\Ï»öº~
+ß­uMsåp&íÆãÆíÆ|£6Yn¸øßùgü¯ü]~žŸäø}L@Êwäi¹]®óä\9%N_M¿˜>œÞ‘Þ–~$=Þ¶‡O
+½7ôúPrè·ìËáó¸¿^`/§¿Áð#Ù)—Ê/áoSåcr^ú{{Ò0üëÜ«á\öB·qÜpa¾˜y)MWéShèMЏÓ~Ø؏ɦUžvZŽó®„g>µÆ^ܵûÐ2pV“ñ̇ƗâLÖÇ-=/í)zZî1:0GR;Ë>þ*3Ó¿¡¸eÖã}j¡Y]D9Fdž…Õö{öaÕãžtÕó¤ñMø¶Uí+ÛZW,_vÛ’ùMóom¸¥~oúÎìëjC5Õ³ªfΨN·n˜×W”_ç/+-)öM›:er‘·pRA~^îÄœ	·ÉÕĬfÛ•¶pUZ‹‡TÛêBGט[˜èjÏ#L[³™ã9Ãà¼ã_8ÃÎð('óšÔª1c–)RQËd­qàG­„)>ÕøíwUêF F˜±’¾¨)˜mÆDó=}NÌŽb¾d^nÄŠôæ†j(™›4˜(¶6$YqÓ/Ž5$9å@*QfEc¢ÔŠ*„Œuõˆ­ñXÔ$B5‚EÖZÝ‚¬…¢°Z³PD/#<1A/c®SÛ¡-f²æ¤³uÐKÝvu~ÕÓµ&.Œ®„Z£¨ëFEñÆ?—\kbòÉ‘øƒc©~É•¬3UÓq4ÅîÖøXj@Õ‰æÀXl¶f,½Ui±¤‚(ñÕV2›êµbªÇ¾Ë­…VŸs—)sµÝ8ZV>.ߧ²˜é´Ç­€˜ï·]Ñë’SÉi»÷™Ò°Y:žªIz‹2ÚLN*Ì"ùc‘ÞQšÆ4»ÂZÚFÕÉ”DÖ˜0ך$na#õªê­'gm=ØðK0Œ=8†ubbÄv¼
+ª_î ×2«„c·>½4¾§+Ûã	zᣗ”F,Œè#¸¨®³f)»˜ÁABÆ&Ýžª¹g§¬
+^P­ˆcX¢¡:Ô©nS7b 5ži›Ôí?Jáºê„ජœ¡LëP”ÊèpÛ‚ùÃ{H4MäTŽ~…^ß”X_ƒ`¾ÿ@îÍÐ[VZ-­q3æØYݶ´keèõ£´,&¦D↟g1î74–¸f”Y5âùÂÄçÑ–Ü38!¦¨{˜Ù,¼öâLÈ
+þÇAƒòŠ¥ÿ®
+ËŠ)ªÇ·o×'^¾c@`W%oiïtœÜñ¢/«ùA11«A1IãS‚G}“:ªM1Éâ)­Użñ?ú	3nŠöY¸YK®Ô]i+àî"/{Uµ[ÏU¨ë=é´ (–0oãPã-óêJÞ¿¢ØrƒjùB]ç…7(Š4î--Réµ'Öª¢“@	àmüï2ê¯8(Jƒ%ämÌ¢¬,ú~,£üqÛß•Pž§>w°#.<Z½ufõ5I/áÕ_fÚvø­X^^š¸?㙁̰1?Ì`T2ï’[C50Ò˜YiáC2JÓ†z¿HJi«[U+€ÛAS‘¨%VÎRÔJӏëÀ®L`˜Þf<%ŽÓl™ÍŽít
+ʁnËôZÎqÃgøœ
+1{ÄIå³[ü¢ykvÙÇB¤Ès`x;¢®^üÝOj—û3\)de¤8t¬z‚å ·ýýÙмœ¾ ÞÆöÐ	ö*Þðý€õô mGŒs±Ó:‡ëqùò•v:KǐYú‘¡–#rïATˆõè‰Ê·åðlD”VŽL£|ò5ä#>d–O°4D´±Oa{)!?A†ØD),¤2 ,í~yn¢Uò2â­~D}c~B–T’dqÎ÷m’g±z˜*ôJ>D†×Ê1W¦df-Ùò⑃X{-›C›¨Tþå²›éT%ßÀŒ«©
+;mÇšåˆ,#Èk—Ðä…tèµ´Ÿoéhhd^„(ð-S2Å71öEd…guÌÄþwhÙwBã^¶Ú9è3Êš‰
+PögK•.>]Øõ,Yª…æ)d_ä”×S{ºšy‚’œÉw!«š£T±ù+l%›ÍÂr"bÒç²s*î04£ I᧰fBvׄ*À¥ Š"ÐìM
+ Ë*põkPó´áDø0B¤ÐЄó^N­°”אgþ:åÚÁ&CÎ6€ªa%U´Z¾Å+“Ÿór^®êŒ¶‰—+îLëÛðo/È>:Õ¿Z
+³pye¥:iH² Ùå úúiδ“òå9yŽç±¹ð†Ó ×°:ÌæhhnDK
+Œl7DyÐóÀ8X{öÃ:fèV´LësD§}þdT—Y³ö¾MŸÓÚ"kYJõ€¢Ã›>Âúð¯Ïä%ù5²¡Cl½ŽöðµB'µ§æë³R^êÇŒÊG×ý“õ²â8ð̬?1Ł¤ikĝ©‘L»ÆÒ,Pßá¤4ÉŒ
+l`À|˜1Âg…U•$ªP}•*•ZŠLÚª%màˆZ¨T0AQÀÐÊ*&eÝöGi£ÈÚ´®Ï¾¬1Žø‘½Ñ3³;»ó>3³³»·ôãkܧóèCwé'j‚ú9ÿép·è³êi¾r¦è™Œ|?{ßUåô¹JÇéû«<
+žfNªUJ;l-€ýÎ2Ò£:$ÏÝ<šØ÷«RéÏ|Õ(¾@«°PåfߣGÀ.Ú…gNe¤ÜcÿÈ^Ìp§0Ù«Ù~®ÂFiÿ$ãƒ÷Ò
+u__§?¥¬ý-´ŸÂ½ZFûDØžkúoÚÌÍþU͐çËœóy"Éþ“Uÿ"Lá[÷	ÒdƶÔLÖóõ<=Ï”èß’èl}Ç”˜™Œó€QNZÐTZ5òü[¨¾§=•eäŬšZ¾š~LïŸÒ_R½ê!¾7Oª3j¿ÚÊQ+3½™gÉ5Gÿ”¹õXcµª6Û“íá¼uQJKº;òpܧ$æ|݉Ǎ;£ZL•ÞÏ¿}RŸT¯€Òu+\Ôû S_ÒÝ:ü–û#yL}ˆáO|cmãÌCf†~“gQ‘º¡þ¢†_´º.é´îÑGu«@m½žÇ½ýˍÊX3áïEµføM•1æÃô÷0i-éW¤×Ô'Üo
+Q}«Þƒ«S¯ÒQK'*Ë„ÿÓOwéWä
+nŸd¼Ö/èêmu^¿¤ÏK?Ã#lGãã‹t֝±•¨ƒ÷*õ6=9DæàîyžgDùÙßëêýåÐܶ©Û³r)üý€»3ô5èÙï`í‡û ¯áñÈXce‡¿9¼¹Ú¸Ûx*ƒþ«ÍºànÚÎռļ±öéVžØErÕ;£«±‡5eµ¥U›îgœæ]÷¢ÞªÏðôe&±U¯vò$ùoø4–´€Õq»ÍÒê-õ–nÓm¼!ßæ2†÷ÝvÕ w°?eÿvªS›ôhõ‘úˆ«ðO–ÿèš»f{h•²6š¿p´>©‘û#Ðç¹^?¢*|žòÜÔiÝ]¤4w at Z?ez<Oó&Ýälç?ËËÙ—õõkrt=i©LýKþv'¥uzÄþpòõÃP6ôþü¼ŒxwÜ‹¡wÆÐÛáóò™7Çʆ“ôa(þ=ÎÕ…¬å~P'²=έcÞ슾äƒÎ-þC¦%KîB%øÐ	¯CžJ873£
+*Âv73{ÉÑá–šÍ߇ÊZJö-XXKN¤¢|öA.qoª¤!lšƒí&†›ªÃB|œ™é‰åãÌ3‹*’Ï„[tyº”£ò7Qù³¨|>*÷E妨lÊú¨¬ÊoE在œ•Q9-*'G夨ŒGeLÊ™Úéi{ƒ‰K9WíÐŽª!¿»&
+áô@Œ"Âu‰Pä\—×8ÿç_“×FÔ¤á ès®eF‹'Î÷U9„e
+äЪ‹V]´ê¢U5Š¼âP	¨<Ž\æÈeþ 
+8Õuàï$y!Ä¡;bÏqΘfþtÆœ_˜ÆLKÌe2\ð<Cßœ~bõK¬~bõÓºŸÖý´î—XÃ{ŽÓqZbǝ73UaqúXqKllršSEø*ÖLªbqg.“ÔC> üÓ#w!)h‡\§Ú)ãÙsf›zõ(å,öÃÒs¦JùxT~Ó)Ë<Šg’SN”rVa9딲WÊ^©ì•°WÂ^	Ý,'/¡e)åtÊç«á>1žÿeY±ñLñähã¿wŠMš%§{²º"•¼ß™@?'ÐûR§H]ÃÁ¢Ì´
+iV”ùvu´± ¶"ù€ó°Ù(®‡Ì-–\ÌyòÊñQËLœ;¡“f	WA±Ž
+˜í¦ª€ùåïÔ@
+Ú¡ÒpŽ@ô9Ǿ0n\â¸9—)™Þý;sV
+š³‰:/Öݹƒ¹¦;g0Çt;ƒŽé6ƒÆœÊ;•oby•yÍy6¯3/7–_™ßœoó;ós+M¥ãßɉOŒOŠ—Ƨƫs'N*,-œZX×œ\g6p›ÍU¥ÍUcyÛÅT‡yŸº¸y—¼œ<F¥ÈÛe«ƒ<-[ɏÈVœ¶éýÂ;íÂ3û` ©—¶æ]³QlqsËξ¢sÅ’ÚBs™#á}æ吀È1—M—œsȼ£ŽÃpÌ;f7VÌ\ÊÌK~j.™zÙ¿@:Oê%#eBÇ
+½2ªsôýœÊ‚£*©OA;¤¡r™^ÆvÐ\ wɐ‚ðü^Õ	§ÀáØYè¥6ŒÕL®Õ^³Gí2G1í5;`'ì‚ÝÜ@{ͳ°
+žƒíRÓ›al•>V%Ì&°RÓ
+ë`=l ÆâX-‹Ãâ°8¬8,‹Ãâ°â°8,‹ÃŠÃâ°8,+‹Ãâ°8¬8æãÐä;`'ì‚ÝRÿ,lƒç`»Ô´ÃfØ[¥f#´Á&°RÓ
+ë`=„ñ=‰ïß#¾G|Oâ{Ä÷ˆïß“øñ=â{Ä÷$¾G|øñ=cæxÉ,‡À+‹ÀEàŠÀEà"p¸"p¸\®\.+p‰ïß%¾+ñ‰? ~@ü@âĈ?øñâÄ$~@ü€øñ‰? ~@ü@âï5kYH¯Â¯Y\{Í*hÕ°FŽ7C
+VÀJ©YË¡š¤f1,¥Ð 5µ°ê ^.ýZµÏjñX<ÅcÅcñX<ÅcñX<V<ÅcñXñX<ÅcÅÓŒ§ÙV
+¸Â›e´ÀjX#Ç›!+`¥Ô,ƒåÐMR³–ÀRhšZX”Ì’×Ahò1ù˜æ‹ÉÇäcò1ùbò1ù˜|L¾˜|L>&“/&“ÉÇä‹ÉÇä3"/žJ<ÃÖ*hÕ°FŽ5C
+VÀJ©YË¡š¤f1,¥Ð 5µ°ê ^ÖÝZ5E.‡‹Ã‡‹ÃÅáâpÅáâpq¸8\q¸8\.W.‡‹ÃG€ã=q8Ž@Ž G€#G€#ÀàÄàp8q8Ž t˜=ú—f÷ÿX¯úئ®+~ïõÇó³ó’ç$¶ß°ýìØqBœOãä9~qìºÄƒ˜„51#ÅBŠ–Š†¤éº­.ýƒ±n*ó¨Ê´/º©*ZÏfNøXþ¨Ö?‘ªi*Ò$脺	ibÐà÷ìPTê»öùóÎùùÞóî»Çï^l‡*¹ÕrªæÔÆ"ÔÈi¨•P3cPI¨A¨*&uÑ
+õÑuâ‡zñBU¸¡:x¨T‹ƒLCŸ¡Ï)tÀY߃ìÏ@Ž‹ëiÈù ä>&!ÓAÈX€Ìƒ_+äÙùú!o/dç†,yÈÖEFE›ãÔÝÎ7AŽ€Ì‚´ƒl)a»Ø
+;£û ‹ I$âñ‚¸A\ ÔÐ ç%“Q'4’} Í®(øSO(øŠ‚ßT0©`¯Ø˜f®¤™§™ÃifošÉ¤™gÒLoš¹„ 0þ!nÊ1ïä˜æ˜=9f(ÇÄrÌ@Ž	瘞Ó¶ÿ@|WÁS
+þLF8÷ÉxWÁ›
+>¯   KAŠ¢KøßE>÷½Vä‡A­ùIPg‹|—ó2~ñjŒœøwEþyðþ¶È€š.òÝ ùvP±"?jà|Ðy/©±XçüŒ?âü„rJ|ØyFö§•Áy„8§øf灊{¬¢eõGg„ÿ½³µâi©x¾e¦Ít¾„—ÄN*ÿ1•ÏRù •Pùf*ï£òMTÞIå7QIÇêju5:½N§ÓêÔ:¢C:K©|Sl#.²hYYiÕ2ª›%2 "‚u
+¡ì2‰À6!R !ɬJ‘Ôh§¤•ý(5é’îŒzJX¿s·¤ñÄ°dJ¡Ô®X`Κ’l£)itçîñ‰HGã)4É6¢\®Ä3’O1KÝQµE°{«öQ°“Uø)H•¨òˆ´5’èô·ÇŸÈÀ•D~½ì/á²ì:ÆI¦Áñ%„±óØ[œ¬ËÇÞÊdPÃBÔ5õÃÏÄŸÙ*¾lÖ/Myìô«bóåLPÎNÊé¡djœùsT>AåáATœÖMÒ©Ôè¸TÞ7V5RðÔF]{Æ—H”Dñ%Ò/«Ìø’m‘D#²ß¶7ùÅÔf´ÊC^™‡¼ÿÃs“~™ç—U…çVxîÇx…$Ÿˆx~ƒ“T8ÉÇ9‹sÎb•£ªpøG8æ­ˆW8¼yë÷×àøŸÊ	|U›Š}eèц—оQè[HLyYOb
+$+ýdá«ttÒåZB}ø†rI*_vrÿ²Þ7UÂ7<Sq©ÏwFžŒKrxÄ/ …Ä®ñ‚8/Žˆ#	ϾxæÂðttæ±áÞÜ®~JgÓrgQy¬á™§„gäð°<ÖŒ<ÖŒ<Ö°8¬Œ•8$W_z¼ C±ÌàžŠ¾@zXõYŽÏÄØ—ú•èã­9nYðûÈÈH5ž˜Ä€È¡ÖÖ9…/‡jÁ]W
+Ys}<·Œß¯†Xp=1%ðDKÄÿÿŸy¥Í}öu˜h#>oMŠ?úUŠ:0˜ƒoàå‡ÁtŒæªŽù¹ ‚9k²þlK6©Ê:²<™›ËÈÎ+pª’O=òù
+ƒÏ#X|Õ©VôR1Ü’=Ð7®(9Eèj!U:Éà¹ù—ðÔ¶PXðïÿÒøÀNB}¢CKÝŸF}[…ôZÍm•ŠØiJ}#›.õ}k`»&l_v°w„í캀¢Âº K{7òF/ ¼Ð.ÕÊ¢ÝG.õ
+¼>+ÿ]=©^@a4€³„PyEl¬³D÷âéÞyô'¬ú€þ@Þp1¬Ö—Ê+ DWµ´èÃ(µiw¯z³…ÃË@¯ÃLk[zÊv±Ù—ÈßÄ­³Åá0÷†ÍH…Íqÿ‹]ɺ¦¶¦hÓp“º‰°Ø…	k££ô0½—>L¿NktMèù—h`
+.1Œ™ÌzK‰Ü¹hÒj~â?ÙrYky·.„ËHËj_Òæµjí%|
+¢Ù+êù³Žÿ¸„ @„™mˆsqANäÒ\–;Êå¹EŽæl±ó•Ù›Ø¾:±¶¶ÊÞ™X\[]EÑÕ[0ƒ³k³ë³B¸oa£©1|¼vKà¸æµÑÃ58ÃT­ [Óm|UüF¤¿»Çí±Ù»=!ê·	>Ôãîòáˆ=êC•…ô4<R’Þ¤^x“^A†ò§H_¾‰èòÍìX¶BËÈKnvMp¨³£±¡Þ¢¥´TÅðxüpáqûº»zB>;;eY”Ïïó¸µõ–F
+ ¡³#¤:‰Ö`g“Í·³±=:ô=këæÈ؇ï?ØÂ]~Ãý¬¯ÉÔ,ðϵ;mb_êÈŽ}ý]øççꜽÍaò±ÎÑÛv¹jLK'ö„m;·üà’ÑÄFš=­Ü––:Ct³ç¹õî™pÌoå3.ªžÅD£€ÈÂÂû᫈œD—…©e’Gz|µp€پµÊ®¢¶u¦ó¸r?!ÒƒM®Ûýv/…-ëiw××ÙåMËÙ²EíÕ¼‡ÌhÈ6 ëè¯zS£"Ø ƒ–Èn‘Ó,z½AµI§(M­Æd¯×]³”🿀1?ßÁ~ŽÚÚ*N~žÛáÖ¾ö6vvvt@³oÌl÷„*SªfÖÛ,vosÄJÞ¶™¹¦fA}çÞw»ÙzÁÇuiŽƒÑçãäRû5mÈŽÎ/!;T	k㣍öƒöWìªz»×Nì¥òíbƒ­K® š¬£õ†¦¶Ž5.“_’_‘_‹Œc¢u”V£†;CÞzÇ6ãël“ÝÑíí²ˆm]pS/~ˆ4´®¦ñ*I!ØåÁ9Áˆ0™icšÍ³‹¬Š½L†‡ÞÆב2ãÌ8{þ!¢«°º&@{Á*À(‹ÇÃ+‹ª³Óøp}‘k׆¢Ñ¡õwd¼v±¥ÁnÔü—ïjâºÂ÷ή÷ý˜™õ>fvfíٝÝõÎì{Öö:kï·ql‡àðpT‡€P-‚ŒTU¤KKÒ–¨R R¥*‰Yp¡HDBBRU"‰DÕJ‰ ‘©¶é¹3vªÔÍœ¹wæÎÌžs¾ï|§ôŸ_U‹…*Ýmʾ¾B®Äƒv‚šÁi,‡Œ¾H¨h=œ:¬LÛÓÞ\JWÔ£êûžË^ç°gځžQ·¤£¯ÒN>ɦX•M_K^K]S¯¥]~Ê7}uƒZì©œR.ú¯ùmìÀ¶¾9m6ÜÀ_œu¤Tm0Þ³ì@¢Éd©U†i~Ì´ï>^.Y=ƒÑ€Óåó_€æPÁ™Ýì³À*Ûˆ[¼åB$»Ò@KËM;øX¸êq»[\ÇAd™x
+?‰,Ú º¥nÆ î[}{ΤÞÀT}nŽ«V1»Ð[-Åû%{ï¡ÎÆ€hpwZ13+¬TPWgÅ ¸¶K_ƱŸÁN+¥®ù'moÏ‘ïîÌD+T­w×_]º30¹ýj¢oxËßð•#ýµá½$Ù¯©µ¶ÚÙŸŸY÷ã‰g€ãOB4ø¦ ä£Ì<BÄÃòqù—²­&­F¤­Ây¡©SÀ2é©È»ÓúººLÿts›eÛš© ?Q¨»Ä&YsbJ®ŠC"‘7Éߧä·äù#9 Ê+ädÏKI1nH$S‘’ÞŠ4äõ%Ü*—åD›WÆ<r.%ö7™Móæ?jG¢÷Î~Ÿ×ãv¹œK³3‰A!&Érƒyžø±YDQŽÄä8MŽ×ã	œpÆ¢Q'‰g癵(‚\ÐԐÄ#~$ÚƒŸ°&öNŒ‰Í2ÂU;s”x\Øétţњ IÈ %i”#$2Ù™ˆ¼¹qÓ!ù=3‚€¨'MD[ª-m7iVPxÁìBmQ§sszŠêdQ·‚Là«´\è§B_Wצˉ»KªË¤ÙGG7¦Á™ÔÎd*"øÔ¼!gë"bÒ0Ì0y8ën6lÚß«÷*‹Q³‚Àª”4A–DX"^é&„Vš€·Kðf‰À³–×™òÈ#“xʈÓLAîZ‚g|ïÁœÅáûi£¢TpˆÃ¶×VöÕ	ìC‹s”6F>ÄŸ¯Z¼Þ˜¿Q-zÖö,îXûÛ·æoà;‹. /”íö3¶]ÈœõÀŒ«€œÜ>G"á@!,DÂ^$`A”í¼ hXÒ‡Ò*ÕVÓ8|E£A«‰õ9Šùq¶ûFöÄüý$Ûz¼çœùõ2¡-¾Ø],ÂY±1wÿš·ÿåP²è9Ša=£wéÛôõãúÝ‘ÒñÛÜy(Hø:û÷±ð±øOíß‚gƒ°y–Û*ìÅûµ}ùIî%áeý•üIíDÞßÄù·Ö”ï溂W2ýþ•ìCÜzf#ç×bð|Ž¾¤¢	—6	ŽšÝprL†Ó„´˜Îe´
+Û-L²žšÖ‘g´$3¤é9œ×u†„ñr‰ùºÆœK’‰“}ï'nâ#~§’L©éL¶-‡V²Ö}åƒw/Ò2†2°ÇaÀËïð|]¥–AËÁsƒÄÏ1ªQB<ÇÞç¤ÒÚ’ã¢(|ózžÓ¦ÃÃrÍð…‚žËÑa«åV¸¼`Ä^K">ŸDAŒ1õK	Óz¿@¼î¤¢xà;„«\ƒ%n;È~è8GG$²¢*níâ,sÃŒžÓÙÙKPÌ­éÂ«Ý àÛcstç«Bi,F…Ÿ…ãÛã: ÛÄg0ØÊ›â7aÙáŒeCÔ¾.·PÃZk4k¶´F[Z£-­Ñî[S¿97Ù2äÐåÉbŒÄ™¡ëN”eª#}lÜÂåؘY?°â¼¯^G±U::šð’B\¤—±m^´·Ó4_üb¨¾êa¼ê(àYüó‡¢Å>s¶>Ô~ô­Óx萁bcK‚©âyŽU:-Tà!|bq;ô$q@ÄÏ ­HC~‰°Î ^ëB‚—äDK+Âÿ_̐Ä`P1:8¨ƒÆ³#Ÿ4èÀ #ŸäO)8¨´(›”SÊ'J=­+k`ø‰âP_Q̋ħky—ž]Œè
+6î~:ÈAZ­<åvR%,gÌÆ÷|Ð?>ð÷{¼·î»Z¾ÀlD<­îñ¿›gx±SSÃÐÌzâÁeÐ0Beí¹å¿`æ-ïúê…]‡L)A(P½ÎR¾¹
+Ùc†\±B®À«ÎÁÿP–¸t´
+ª( ”ó¡CèMµ{bÍ¡p(Š†ìŽbZM·³eÕVˆ•UÜæɨ8Ȩ¶\‡ŠÙR(¯¢¬7§â´?©B©Dl
+[[nH5h%Æ»¸Ô½çŒÀÑÒKY‚À”Ð.Ÿ]n¥aø}jT6oN‰™Ž©]§‡êdpî³#[w-~‰·êȾþêâ­«V6\ýQÿ¾öž7¶<Òß‘Ð*fNÜéÍõv>:#-}ûÁwºÊcö¿£.ô!QöwáJG;гøéìÓ¹í]/àçÃßËîï:/ÌÈÞRr:]hxq/ñ‡²›ç’‰gu7¢ :Jz`M`S`WàpÀ˜eF‘9™#Ói±
+Šw­@1óX¾{q&È-e\nàMwï<mj]ÖˆÜêÛµ¹1–ött»IëÃð;Á‘$™7šÅb©PbátGFÌÇ4ÔlD5$”⊴‡4¬[~¦^ÓѶ´ÅW2›¡m´a«Ë‚vÁ’nN³…Èf˜JÅàU˜²½*ˆ€¢BN|Îp^ïúŸö¬)­j4קõ>õƒ_ÌüdßéŸb×Ôèöc¢Ø7ôÛ¡z4Z×¢…Α³_™z¿…¯´†ú4­ü`[çp
+ÛNþðM>‘£uSD>ˆ” ‘Ÿñ¼rÅw%c[¯lÈóÛ¾"Ñ'º™®ÿc¾Ä`"ÕòN&êR©¿ƒ(‘`ÿËxµÆÆqUá{g_^ïsÆNöá}ÍìÎz½»ÞYï®Ç^ïc®›È[§i5‘"'(*B6	Ž •ªVV‚UÁ-åR$‘"¤MdœD‰ PZ¥ÐHNƒÔD"?J蟦MârÎ<ìukÝsgæž¹s}ïw¾ó@…S	žrÁ7‹ù8†
+g‰ߏØa#b
+zȘ›Qr±î‡
+W“9÷Ÿßë÷ø{ývgV”9§À÷ñý¼Í)J)‰sæÜ™<MnHç©ìÊS‰Oä"x
+yøá1=c¼Qò: æMpx¸ßÔx*ì;MúǨ@è/÷Ÿ›(ΔyNÛte? žú®<Þ~`‡<ñü/´i}˜®S/¼¸0û¹¯½ñdBhOÐté;óûöMz«Ïìðì°Êa}l2{Uµ	Īބ>kû 	ÆY/óØ2Ä´zv5ŸvŒ²o¸¤ŒTª£ªJ&½Ýc¨IN^ýîëK at 9µ2ì¹u‰Ú/õr¥áb!?ÿ¾l½”Itµ˜´€œ”5yZž‘ÊWeÞâ¥]FR•(办t1Êyz±dL‰Ù>‰ÑX;à¦AwÊý%·Í½H°Þ‹Œ–†Á#H²¤ ñgSjYeêvu¯êÔE:E3²LP¿ídý}eáe{N8'pÓ"c;Àš_%ÙàG(9#*‹4õ©>0!?ÃêSÀÞF¶Ôõv!XøpÏüõ=ó:Âî`¾Þ/Ÿ”™; ÉfÖÕ{(°?Ô\0è?'HÏ`|`À•0ð#l`”0ÓÑÊå,®¢«Š®*ºªèª¢›
+þ¦«Ñ”uÑì‰ãzè1ºÝì]fï4{J°8\¤Ð;‰&&ŽŸÑ3øÌ|æ>sŸ1ƒ )ôN¢I )Üã·Œ1r€¤xK X¹ÃÁ÷ëõç¨ÈWkc&Ï<6J8Òýí懔ž9l/¡H^‘^
+$ëÃõ`J­'ôã•wêJã5t75ÄÊŸ¦´vgvåòöЈÖù禐2z bj?ÄÔ	ˆ©*=	“If8Òc©U¾[UB8q–º¥îX(!–Ê•j•œ[HŒ… w·ø@â[¨÷ ŸÜ œÉ¤­—
+‰ŽX™bUH«™&3ä ±H¸ô„¹`Ñ
+…j©ëd¦WELbÁL²ªT÷VÏWíUµ[u‰ "x@ÞFG¥tä4·“ð$êÝXâÁ¦e½gždË@»‘Ú=NÿNL–-Ö¤ÉJs[ð·¨WQh ‚½¡¡J±lÚ‡´F¿Aïc Ø’­Ã3czfLÏÌ:ÏU¬˜ªë‹¿ÿ	%IWþªãc²H@¬Ü¹i ©^ý{å’UŒY zA4·²l€¨£š½ñ;ÐMº›Åwû-]ð]ßÌ.÷,û—×Jn—ß%gï”ì}‹ŸüƒEÓÙšêÛâ{„©çXÏ)ß©¬Ëí
+{ßÝ`ËÂð+MF7ÈO5¢Ž×'M=iþL‡A èF0bÁÄüPìAG¢œªVFÊJÉ‚K(1U¢áDªFÃJ¥F‰}¬¦ËDÁMbÃ5…Ec5M™Vf”ƒÊÊ'ŠSQÒEa‘¶^Ml‹ÔÆý\qÐî¡x"+ˆ(ÏËäׄÛNöô
+áC¢íê!Òm¯©‡zi/ê¡ÖÃëôPaþж€œkšÄ©¢ƒªyçº.Tu­
+IJ
+(7(ïÄÓ+¡žSAd†ºÏÔPA®U4j¡@‡}öÙßÏyæ=úÄ1*>ôýÍCƒÃãõáL´€øÆÏïfsçÞþö—ÿ¢—$s­@¿²rãþ1%s`ùé…·~zE’ävç鎶1ðy!>\‘ç~~|ô{:&ÆK00<rxd’ûø4¸×É&îÌ{1¸$ÈóÂd‚;ÖèCÐòFÀãféåmÌL¿)h9h
+4¿Å$u_x•–¸Ë«L’7øgd¤²d|€
+F†X^ÇI–Å@¤XŽ)¬®˜ß‡€jµ56I&£Æ4ŸZѽVâ7Wc¬ÄÓ-
+.ßÅio­$m®dÝ* ³~ÎoY9“–ºg˜¨”«•Êˆ5ÃdbJŠD‹PP%é=J¯R^jtÚ¼u¥”²­£´P‹Ôòù07Q¯÷ÂÓ’DÈ$¦þèH²¢T´Ête¦â¨0¾W«D7¥D´{„ó<-ó”Ü·ã·ôªIpó]•WaU! ·ÁØëוÂ!ðBÞ:)b^×
+°p¿Jk'%–Ìa©kØÊ‹€ô-›·l¦:¶ÁdGkÑè›´}páb`œhh²æø Ùç,¿8ŽÆÐ iã8š–ÙóÁ…eŽMÖ4{}>.â8C3€æ^y]'f*Zl¬‡ß˜2UrÈ|Ê‹=O\|%´æìmÛºÒÑ	ùkø³ê˜ÖÑ£2EOéáfLFö½¥“7ýheÙ éñdÚ$Çx^I—hÑÐü¸ãö{&±×QIƒh•!Z“ä}<FY„É€R·s-ùO
+ësZšlFÆíFŒ†€ËŠKBÿÿwîVˆ• ¬#j®dM!X½‰©H-‚¢‡ÇtMHÛyŠÌÐó”£xTnЫ4*¾ø/įY^›Úuaÿ5W¹·.âßyíEýš›Õ³ã·ßûT*Ä-Ɲ€\†döY¶ïpõëÃ­ç¥å‡å…ê/ÚoH´kÊMÅ›—&*Ê®ÊW¥Ç*N¢¸Û£Ê6iª|Uº¢¸‚RL{¢ýLù[íFŽ4Ž4{6ˆsì5ñ’x]¼):Ý#½Ú&ñ°ø¶ø®æ„¸ºÆ´âDMXn¢Ö”šÊéÊwËE:#-5O·.)‰ùxmN¡BF”Û?!?Uqx›Þ–·mceE!KÆÁ0oˆk|©s]Mºà:Ê€&@ëƒÆdxÂÏ|8!§1æ=cRhçßMدÀûup¹!ƒ¹•òdÿ:Ôt&h|Fç_ß‹õt#çØ=ôäÙî53„å9‹j%XÇYý•@bªÌ")„°­ÖôõWÕa­`Ú_#‹Ü,û¦(õ‹¸Ÿ"ó÷i£âq—8+>)>+‹ÿ&¾/Þ½q@ÔÄ‹¢]¥V*'ƒ¦¦•Ò>·`hZlËÖZMM‹Ýÿ Ü‚i ÑZÍŠ•¥†½J‡€Ës9àòFã?|Wl×ïìüp~ùì8¹wŽÿLìøÎñÝÙN°“Õ(á×ÒF at aZå.Z×V­&5ÎÖV¬CuÅ:þ@ZRµ4ƒ•TÁS©áG - *ÒÚ­hHCSW&ÚA´UÚ¼" t°ï{g'¤âï»{÷îì{ßï÷óƒéZ4oÓFäöü~kÃo>zlcŠcm†
+…cY>L=Ä_Þp~}+„åSÍrÖï—kûÏàý(Kê`" ”ñ‘©gã˜+$§˜Ž³I-Nã/Æ-ˆM;iýOx$1š($,	0—'VùòqoYçÐD,Ê+7}ircn's9°…Š’cv±ˆ˜Æ)£e~¬XA%Øá”ÒRºNwY{Ø­æqÓŽvwš”'Ħ3 €¹é<üw¯L±×åï
+¿|à1F 0uiJö›äÄ6ƒ¥ý`þÏ`#Û—ix„Ï_9)_ì9%þMÆÝ+ÔÖ$eß­0<]a¤cAe!€ <°ÍevPc_Ôç1¿Ð.³óm‚ƒ KO€yN˜ºr
+*- BXÆ;‚Äcù\·|;’xñàÖV©ÌLL*†ñ«¸øèžÀ},‚þó“tVÏO<ub°Iþ3ô»<;„^[ç/â´igà,–™?ÛcŠ­Ø»;ÿ”—!䃀¿„ô£[À5u ÊJÚ½º3Îf š%&kÂzø4À§‘u~SuL€gê­o4×Ó›¥R™•yeC¥c¨ns—±¢¼<… Ö·%ÝB}­hóÙ4µÚ
+¶	[ÍD¼ÀÛ›‘Stúœš“:‡£Î‚sÂiÓœØ)~ʬy^ô‰ÿÌ¡lvhÖ4iŒtü,°ùŽo¢>ÃvìNŠ%à…x2Þ+óÎ<Où¥Ôƒï~
+û:ûjXŽœ@D$auQ“P__œÌ¤t’IÁáIú,:Ó-ÛŒOK•T/·Hm²Õ-µÈQ©S¶:5F'ˆ:á‚FÝ>8‚`G˜Ø5‘ø%IÍ8×v뻍耶Wßk¼ƒÞÑÞÖß6ΡsÚçä:ŸÐŸ1^¯éûŒ·ôßÕÿfÔ]’þN.ËŸêŸUc+y§LŒ-ÌÙ–’Ù›g
+—ùB;·(÷M&›Ü¯'Ø#Ëœ Ú+gKlà÷ûʳ6Pš¾VÇ:ÁTÄHêl/“sÌn†Q¸L=Dv"KÈXg`ÃË
+k
+¶À ,d]3$¬ÑÍ©Ö¡$ݨµ/ä‰ÔJÉÖ¤;):ÜvƒÖcµ63˜‡~~l$ŇÍæ0lƒæ0À‡©U«“l¤}+ÒI+q‘‘×Éq2Kn‘	‘-ä|b†\"µ!’„	¶‚ÖÈ%ƒ­)Wƒ	_6g}6ÏÆ…8+t—¯ bC@~Ñïók at i´XAÅ$`=ø¸
+S¸…·…,Úéª5I;ªÉqp%ö¸]°Ë‰—,ØÙ¡9€ÿ¦Çòs€ç2Àز#b²€8w{ {ëÖ¬#ÏÎ;Óc
+üc~˜ÞÕÃc׎™]=¤|HœC>‡ØW±?ÑÞ.8˜%`ý+³…€X œbLA@,˜SLA@,BóKí
+ìR»Á õN8‚ ±ÀW4ÚÙE;[aygÏñ·UrKUhÙ"`¼à	C»%ˆ»L´¾¹!ûÀJæ	þ%켶!»"µò˜¿±>›]¿ñßÇ,ÚÜþ{mz¹IᙲÈÄÌkÂãs×A®‚œ‰â㧹$ìS†˜S«‘FT¶t¢¨œBÙÚ†\²ÐKÒÑUd(º‰ä¢O’§£ŸElü~eWÒ†VìC]áH¤{	º‹%ùØlºRW/ßÁ²n¡ƒ% ‘:h3ƒ…ª€ßçíh÷ ¨W¸‚¢Q_&e=)ÉÄ%Ë„àh·<m¸.“BËÓw§©;“’Q’”I¿_º£QÖƒî8¿Ì„Pì2+v_w÷Hd4RˆX"´ q«Ët„ö‚ꉤWÔDA¤Í$9Δ‘BŸã-‘WrÐ"I1OÐ=1$΂ÒQòðªÊŸUÿB½C¹çÐ+÷û
+©l-ñ‚qñ“ÄÙ¾(4ð)ÜSôO–ôÜëf娙ÍÜù£ðt‰ob™;$ î»W­‡­—Q#’ÑAªîÁ{ªöÙö6î³ïkžl™”k7
+kªÖØ66ä„Gª¶Øm¨ýŽ#\o‘Â[Ó´ð½)änsÁH½5×ü ÆR#»ûŸ7qb¨{1^­˜-êÚÆ£ÃÛi–m]UÎ:W‰
+M!Üj…#"ÀQs­#„íZª¥’1¶7Ø춗a‡rXDÁ@¸Ë!öù"K²+¨nqµ&Œ^ëáùC³}üñ¡³øÑW'Ư^Ÿ¸*<6ÿåüžÉwqGß›œß3ÿßw¿º}æÌW·à͝ò[è” Rp•Þè:Ô)X½Ö.¡»¶Ò.5-ªs{…‚±±¯«Z¾ÆïwºþŽõ>OA!5T 7ö,H)E•“DÀ*Ôh˜md»Ï£y¨gØ3âõ<žƒÛ„ç¼Gð¸c
+/Æ ‰>(D*‹#â¨X'ăbÝ„x^¼(Z|¬0Õi<XR0ù²„ÕÎ’1PÌÎÎ+Eq*À˜àêí´ÃÝÝÑîm÷µ[ª»ÝáîôCˆ´EC¸«=Bˆç"ú2¨óo—ª5MB09IA~‚øúŸy•>X!J?¹x³ÛûêäÏ?8ûËý/=ÿ|ð/K$èµ·¾?<ð\ÿ…포û1dª2õ?ÈT­ªé»:z;;¶vüKÿZ¯îÓõ-úVãq£J
+ô©kÕmêNõ•Ø½‡{Oû>ôÕ5)MjÑ©(j:6ÜÛܦ<üIðzRýƒjIý•*ôÔR™º%Ê<e(ôV&ò^)œ[Z	 _¿A£ÜŸý†ŽõÞxl§oñb/ Pc0NO%2l|ódÜHΘ—(]½9é}1v$ö~Ì£«S1ßÚ$?ÆP<¦Æ9š#5ÞØ©§§–ô©ò
+^FQEa`,=Æ7§zŒ$?‡ïa#uÁÃÁ“Á™ %xaXQ
+ŠEÇ7§”›IV‚®ré÷Ty¾Î€4E¨Ò¦7­¸gEÓç”|‘Óuóf‹b‘[ð‰E…¡žÂñÖŒå?-žOëuw	=ñ«¶³ŽßÙqü¸Ø÷ˆ}¶ï|w±;iz±›œÓºyÜ¥µ1Ðvcl
+mX¥­Q 	b[‡€&ÓÖ®E£‘Vi	6*+015´KZi+]76m'!l”iEé&h5Ô¦üÿwvÒ®DúþßÃßwçøÿÿ~Æו4³´¨B(ÉK³´3UÈU#\OµøÆÐ*aòÿÓ,ÕǤ˜Ô!¹æˆÉC5.íªÖã·š¤óœ鯴¯[—0ú*÷üãß>7xÛ—ú¿õà?é¹¹¹OÔæ…g¶|¿·<X~ˆÓ–e:¶îwrvC~ù½@C{ Kï ,½¾u,Ï6›Í Úíp¦Ù¤qŽ^oÀ$p Ð>ߊ”Â÷ÅV<"?š9Ð{hE°oòú%€ÑT86b’!ÅÛëÉ ‰…½ÐÛ9Ð+É4„]Ù{­‡´=Ù'Oõï|3òzçtäïõ~,_î
+÷â[:áLßÙÛ—½ÑeqjBÆסÚd7,/Å¡9[J|v’öÚz)ß䱌õÆ=Æ.ã ñŽá+Ô8cìà†à– '8I=G=~‚{ƒ|~U@˲±ã¶¶:Z¤„ù,Èi[‡"ï(t0 ‰Çì`kd½HÜu(c‹=lÚã¶×N®
+c‰ÂQè§'à4ΏÃéñ0ž;Æ€à$3H| í8§ê*3«^Rµ¯žøŠ¾s>ïÊšŸM8·AEö€R…™A†ð÷¹Xé"……™ ¥‹Ö̐53
+¸Y*»<Cq¸¤`‡bÙµÍ>V˜kû ºbXRPQù\¾qW%ÇbÉGÁUv’bÞ¢"ž§ÝrS¼P.²K’áÔ¡û7.ëêmùîó?¿ïòkë÷-miR3rJ,Ƨ¾ñÙ]c¥Î4í>2¼ó{þÂM]°T¬Ü §Ùv¾œ[‹$µÏ
+=ñ—L6o
+<S±$~[,gn_–[Óî«üà«OmÚÝ
+W—Üø¹ð3C»í&;g'mÉŽä…#²Y»!´ s5ÄA“åp‡Çµp ýH¿2ÀÀ´$4	èsÔ›¨üIð¦lpÔ#{+V.¼#9™µÏTµ’˜@°é„´œdPÊ% wMq/ŬÄûœ¬`µ³xklXQÞ§üIæ.B‡Ö~ ŽŽRG‡é8=EÏÓ:ŠÅ;ÔžhF_ã:(î_`fœ 8fõ€Šëéé©J´[!ÇÉu®Ä×ñî Äü怃.®ìaÛsÀcöêÛ@rځq:7‚ƒÓ˜£`Ç	ÈQ¾0q¥žò`sŽ‡K™ÑpI‚áÑp)æv‚ÛEÝNt»F4E™p)Û[ 5CËCËA{‡\ðÌ’‹¾wƒuKüý2d£±ªÓ]uôLM»ß˜E¹šYš‚¿n*Ìñ‚؍IñÄ+Ìô
+D(9ɡݶØh/ÀÿRK`’º•‹„ØP0¨­°ÞR_±Sö"LþhÄÿnQÊPžçPqs6“n:á¾ŸÆ-2[[yFÉ{é&7Ū 5é•%qGÎóA(˜€-FÍÀ•"
+tG_C³
+Õ(ä·gž{²Iñ×û}~ƧéªÎøäºD–¤<MYšô+Y¢3ʼôAú©YܪÑ"jM
+À»UÑìÖH†wd)@ÄÍÄäíž›=uÏO­ô÷õ}uºU©<ý•µßiI,(wÏ쵓/Ï]^ùðã0«—íË(ϵ#›_ÕßÚÍÜ=/àñßîöUT±tlŠ ˆ¼º’#EâáUw‰]éÜvñ1n¯ø’ðýuúÑ ïMÇù2-s]ürÁo¨‹ 4ïÍÞ®ªu_…fcÂ%_²µÛ<yeQIí˜Å;ŽÚÒ
+ðv2 at eçÖ7Š¢P}Äqxåx~’Ùi	ÅË›§$
+ÓtZ¡¤	²0“I?#ð~r…ð‹Ü»Ü%®5ð«âhG)"Zâñ øŠ8+^ë"_Õ‰óÍ:J^ÒHL2J^$ud’˜ÈŒƒ¬I€¬iK) E‘¸åx7´n¨_À¶¡oÛ¶¯=Ž]2^soCP
+m”Þ$ƒ}š¡@7¸¶³¶œL‹«(­™ÛôÚÜæµR¢V_¥HÛ˜3Õ/Õ¹«¼gt†3m/#N´A¾£öLÙ㇅ÃêýˆqAÖÿ!üÝðoU¿¬ïöªûõý†¯"¬U×諍íêý§êaÝSúݪç,9ËO“iþoÚGšÏÏoÕv“Ýü^mŠLñõ!²-µUû¦|jX{D{Z>”:"ÿH›’©½!ŸÒ"m¤7µ;µò}Ú~¹žÓš´¢v»¶EÖƵz¯G×”
+^^Vj4f\;¯1Žâ]ÿy3…‚(É™‚_÷Vê`Ê{§º	îØhH°ö(T¯+°¿Èxêð	E)i²6„„êØ¡qÅó¬B•½ª¢¨jBժı@\Ÿ(/–æò-*¤Ÿ½©¢sÐ录—ºXZ£$áæG
+Ø	‡qž*Féú¼eÎç‰'çW5
+Ë6č¼¦ó‚îÎeb4M%†*pº¡Q.næó‰›r‚ù¨p¸„©ø†®1ÎŒügLÒ¯£‚Í•ü, KšpJ`X?ʹ
+=Tõ†[8/‡äÖÞý€+† ÿ.tqAÖpmrƒ%¬j¾aŸ¿½-ümîôqg at PÅ]ós×zË…8å>*pg 
+‡F è!®Ü¼ÑnM¡Æ”1(Ô4è8u ‚!…AGWñk‹0HÛ2ge1d0¤°8 —«½Cç"Ò6'Ã>Î>èåjïìÀ@ǧ8OÀ@ǽjuœø¢gFmÙQi
+®``àL¨Ítœ©H®Ð·ýÿ¿A`ˆ‘!ø5¦ˆ†yƒjæm.jÕÏ¿>224„öåSÌu’ƒ¢˜ÃÙRÉÝÄœu5…6` œ{aLNT¬ÛO¿lä¬Ê¯ÀǬ¥×æÎ×Ô-ҏ€41V§çþJUÞL…¸ BÉ“€=€íöÉnöyöuò&û{ò'ö=òûoò6$4“Ål«tdëȧÜ
+qÍ-2{uõ˜Za%@ºóxˆm…Xi’6Ø)–mX3£Lˆ’Ł ?‘4© ý—îjâ:£sgö9³ÙñìØ»öÎcgwì}xf×Ø^ÃnE²€1ªR™:¸¥€ˆÌ¢Ú<Šù“ü¨"CZµ@Ô˜¶ª¤Ô”dD¦ŠTh#¨TEQ‹Uê‚•àõö»3k0-‘=sïÞ{çuÏwÎw>ªÖˆ—:+äœ.8ÂH†›“Ãä(¹‡<H#ϐvbZo
+øù¥ŒDgè£ô$}¾EÛè@Néfñ9‰\[õ:>CDW{¡ê„@¿ñ²Õé&Sš•.¦ðãN¸CbNÁÐÍ	·Ï„øI4UL+倫<RîÛ;?úºd¨òì7ÈòÜKx/©5ç÷¸¼vž
+ÿȐôo¢s‘V÷[µ¹„›ˆèn{;r´#‚	z-Oeó&~ûëì
+"ÝÛ~^°Šé^¿w ß˲²Au?~•€âçÉÚÇ–}Ô"F,†Â+·¢L
+Y;…Nµ³/&ŠÉ%íÏx^ð8­²_þ©ã}Ûä˶ë¶;‚X`¦Ly±äkÈć	ôRÅâ‹s.ŽÆÛ“åeÔz£4I+ë“h ‰’ɯ·wäøos¬"Úcôhå㼫¬£°Á>Ž)†ƒÝ/g*ä×uÎŽ™/Ùe{ÆNÙ]Å·MàýÕéÕ†)ë7üX¹XœÆ:âeõöuE#Åbl0"Ó	®;]Þ>]Þž0È‚}áW=ëè:ËÍÖo´æ¥p1N×¾nöŸó©¢*£ò’7‹¹\dQG#ÔpjØnþîÃfÀ?OPʘó󍆙£¤þS«}ˆì7‡žyjo§ëæ#Ý«^×'ÿ¤bÔn?¿éÅu]̓+N—2±ØÑ-»ÿÊgS=w!ÔYàÐØÜ:ƒ¤#MKZÛBœÒÓÈ.­MYþaõAv‰£µzšf«Ÿšñ –‘ü’ÌÆe&íOËrü#í£ø§Ú§ñY_Užxefrqcç¡#CJ(¿šœXÂÍz›[u_jÀDˆ¡Ó„ÍGF“X¢_r
+"VìºMq3PíJ@ÖAÝKŒ@EžA׉‚É(†9(±ìzvØ{‹­±ŽI°_DiÌ€»<ԏÑ2Ðîe
+ÿ—ºoR[=œÊE%¢Õ§ˆ/,!ÍÛ&Õ]÷îÝDé‰ïël,θâL›j‰¹$14b{ÁÌÏÊ
+ï—ýaÕªð0ëîÏâHBCDù¾èªúD>GÀ@c¾nÙp Òh˵¤šË÷퓹¨íÏk¬4ðU'vN|uï/¬¾{ïb;bqÄœ½ˆ´l¶Ö
+¢;{`×±c/”÷îTû Õ-À×A¯ét…«ðï4Ÿm¶¸+µkz©EÌm ·ògm±]á¯>±Ýäo>#?·}ÆÍòÿ‘îªÞNÛc6’ÛÌonÚÜ"mTLŽK{Ô_Ko¨_˜ÝJ1
+9pèÇ{rÓ‘„s£Ž‹ò¶&p‚õPÞÈŒÞ[Dº8*’c"+¨IÏ:§BŽR Ó’—ä%ˆUƒ<¡»¼9H
+¦£‚é¨(‚Ý¢°ŒX!‡'ˆN¬êò¢Ñ®ÔpÏW#¹kb‚Zd'ø‘aoÐÕ¼Ô°­lÐÝÞ\C ZÚj„EËÀu€OÿÌ4‹j"áëNƒ«ØcÓFƒµ[ÔŠ™Ïù6³…—6Z•3Ú‰¶yÆÿk¨œH@!l^êÚ’ k—u'TBRNj¥vyZ#)—‡ÀÄ E мÓnyðçoÕp\Ø-›gß‘ùÃíï­c]bÛÜÇîÌ]EÅ‹/^ZôxZþ{zßæMû2èé5ßÊò=ɶ–èWðÁä]»hÅ3«6<»vpp-Žˆ¹',¿£Þ$¢Díл=­d–´»]
+—åú¸ŠTQÎIç”»­w³Û,Eåætô'®éžòEë½ÄLûçY¦s<k0:­£@û,ö,nè4éj¬YO‡T3B‘”Åj³ƒAž'·"–øFã…`:$$½1EµÏ‘È–VBŒ×£íD`ù½ä ®ÒãΣÎIç§e›óŒóš“’œi瀓r­á†Áxþ>‰€—äy½<"o“­“2’¥ïÌS¿zc0.›ìg«½`<èÞëEH} Êõ²ª®ñ”Ž‡“‘á”Pbj—Òÿ«™lsK¶9­Z2-š
+äC:à‰´µFcªµ-sQ¢>·@òó"àãAêÜÊçŠÂB- ¿m0ÿ©wŸ½‰;{zÓW_Yq	d!xiõ+Å#;vÁ5°ëAUØúóïb!ظzC2‰ÏˆÛçJåÇËÛÂY|Hµ´ž"Zˆ÷O‚]8sœq/%1d~è¬q"Ý­{H³¢áxÿäC•‹ÛÐmÒíbhSÖ˜²a©k¹ŸŸ¥ÅRš,’$Ež"ÙàM=ÝE
+Áãmnm=
+£<Aêè{Câý~™ÏðÃ<ÅBëÞ˜÷Zlu ÃeC±ܬW½¿šÿ?[ßXòØbïàm«>†Ïwa]µú®^{¾ºì¾cý·aq±öfìMñ!v¿ñQv´DõJÍÇΏ:ÅR,®ÇrÐÇê`NXwÍúè THÀü‚jf¤·h~Ù—~ÐùG|™
+ðAí4¿¤ö1AXõ+¢Z®S^tØöVè­äéÐIñtò|胤ƒ³cª9„‘WüjŽ‘FR»¤]©1i,5.§¦¤©uLuMÉ"^íô二Ò:œ'"—ï\ÜÕÝS(ô¾GŽ?œÙëÛáõz–yÎ>888X¼Ök­±’$>b­×\‡¯Ñ]œ5Ÿ[ԑͤS©öSæRsÿû–éÅ¥Kz{õÑ	±ä=	Ýz‹ØÏ#{_P¡ãŠe'mï³ås¹hÔO¶€Í‰FAïÈøÚµ¼ ‹=¹”pK¨	–aa›0*ì,œPA·uŸ(K‰”0ŠÆS‚ëßnå4¸†oÑòšqmJ»¥Õ4Ë°¶MÕöh
+_£ák4¸ÓÑžÂJ×Ë¿¤åÇÈ[8X˜*\+Ü.X/ʘLBXÐÿKxµ7q]á»+YoK+±’¼’õX½¬÷®^Û²µ ËÆ&Æ&$$-É@ `è´¡%PÂ3©¡Í0M˜Ò–¤3
+t2ÂØ-Ø3ÐÐái;Ã4nJ[ê¶Óu“tŒ:cÑsïÊ<Z2¬|ι»wWÚ{|Ïw¾¯µm‘/ɶì)vÂhé2=¶F}O€{¦œmኅjk« ôbË_5¼µ…j¥+¨ûl5aA³€F¸„pwI¶Ú~ùa›‹D©~0$q&pÀŸåÆ–‡ÞXÎÏâlø’.;<aÃ7Úð6¼B^aU’’ŸÀ¢¶5ŸB—°81 at n©^
+ÿƒÞ(	¯m_M¡0L,öÖ¹4µõACЩu»Ë­Qsz»‹ri.E]­ÃELÆßÃÈ\m´œËZ[Á·\
+;Ÿd²´¥°+jni«¾ŠÉ„^
+‡ûpàUq}˜u’ó!ˆò½Û¨2e%ÄÜŽ=”ºyÅeò®~àüÞ©\´f9PÑôŠ\bU4÷å¦ík¤¶¶îK>¿ÏÌ‘¡ßèHIPգ݅¶Å‹Û
+ÝŠÃÍ©`<µöí­äš‰&ú°p¥Ê:ù$L屌bxß¼o'ð> ü»Òšsôˆj\÷ã5ËûÖñº÷¹kÎêo?¥o«j/s—´ezÁ¤uŠ»éT^«¯ÿ¾¡šÒÝ4~hQ¯¯{¾þ­šSÚ“ú·kbRo¤ŸS=«Ûd|Þ²Þ¦byƒÚŒÁ
+X‡ƒ¼h)Ñ;ô-(];ýä9FÔhšQ¸âš5
+³,,9Ëp`É¥wúLÚ‚;+Î<DâD9óÐ4)S¢ QG™´Ò¦Î6ÜÇ”wî«Ì9||ùÎàaJ±ÿםkOŽå[ç©_|íÏû^ºþõÓ/ÞܵnåÀÐW¿tꐱ€½ù	¡,‚sÎ3㛋Ì%fÄ™¬JåÔ…è³üeþƒÈïÿˆL%T'œÞÒ’ÀlGÄl§@lcN)ˆkîköJ-F,ýðŽÁý_Çp¸»¸:t0ã]Ž[Ü—ºN•æÐf
+8Ë~Ñ+yû¼
+äe¼^ï„Wy¸Ž£Ñù
+‡ƒãPè߀‰¤ÕpfÄàóÛªR¿åPnÝ‹UND ?…µ3)“£ÒXAÍL2ÓÌ?IQ‘2tg²á¨Û	ùBQwƒ‡ÊøÁ…=1•åÓóÄà]n‰¡´_™
+
+~HðÜÈO:ëÁ¤3毉×Ãü<w’e)GÊPg.ˆ^€a&$8Kb—ÀÌ3‰Ý<¼`>U~^§Ì‚E˜QÃ*"…*ïjÃNÜ?+¯u¤.?QV/=¾â*>}ô\ïqšm?òÅï=Ýzú¥½?ÛV9Cš+P*Å	<êH‰•¿\Ù¿%I};v`õWz»ÿþqàÇ êò°«:é_J9­E•ã,¶ÜsâAñuñÇÉŸ'/%ǵ¿Ó§¦´7R3†YÁ¬£Ô5j­º1,6
+‘AÀkЛ@Ó!¥ñ/Dm‘¤?Î	Bç¡Ô±Ômt‡ú̯³Ôè­`ízÖàªópÑÒ|@?(^ÕÿQ0N5ýµù¶ ðÚ)1`Wd’RÆÔÞfàD:éÓY;hÁád:««FƽæœNd¶±Iž…ˆg‡ûVâsÉ|w¯<‘<݉Ÿ“Ĥ/æDøqe*5WGIëhÈ6çn„Þ,•Ä$+ŠI¿Pí)}³ôQIa*õ–hO‰*Iþ`¶$5æJã­­y•]r&²ö?ÀOð
+ÄxšwèxV/!,/áb10{˜W™3ÌEf‚Q1Ž.õ;ô“(ƒ 	õn×rOÆ›3ŠQ2¼?›á–ö~§*{fòЧ°4왞™ÎÌÚVžŒA›&]µ0}ȘŒíb~… “Åb #ìM±íæ&¢áo[JDåmíHÒÕŠØu`W®;N(Ä@5z«‘'ï7]9ƒV+øL\¡– &‡%©_5òÕè%5ƒ".ŸNì:°+a{رšÂò‹Òùb±
+j«Q–(¡®.,N‰hÍãO.»ðn´Y«(ÚÓ[ò/tx¢Þ­ïõmܾvðúêc“Ï"BÃ
+¦Âþþ#˃¹ÜÉOW®,ï~¯s_~oŒ.b¼ƒ‹èx<
+fxÆT_<ºbK÷&»ÖXè.u"ép$n«;Gwצ-]ëõF˜Jë’Iµø]¨Å1åoPýtˆÓð#Ԑä	Ú
+]*í­Þ¬à(Žc‘5`˜0Ð’ZØñŽd0 SöËmE,Ö"} FØ3ìEv‚ý˜Õ1p_ØÃÖ°\bŒ¢¨šÇÖ¼Œ®Ë™ÅÊæ&ö‡PF…ž¹IL@NXe,h¥Z
+åBô‚’õ%…׋“J MÛ^(wÏä´[­¼ŒwtÖÝüÃW¸Å›ªüeÝ…ÝǺ	 ðF_¨<»ÄÊùXØ%ô¾µƒº„'Gñܨ¬¨U•‹ŠjL(vIQA+ö¢O2b¤N²³­æBàBZ%²‡žâuÑ`	\áï¸ÑuzȽöôY³öŠáŽÙ=Fm at fjƒ¤õÚE;mç’7F©gä´”{&'™¹i–Næ œ§0
+„Ú€í°É̬›Æ+óáídÎ&iÜña‡™å…³*lI3«¢_
+8<O4¶
+Å“®ú/¤Reù͍bkc¿Þâ¤>‰ôôWÆ"~us4žïìË–¨1¯¾1žhÔײQªˏòñH³ÆhTÆJË`·P+ $»%á¤ã–•VYƒÖˆGáÓòÃhýÇX£EµVÎMò ~ÊÀðJÄ°Ý!ÜMÁìÿf   ƒS`‘É0‘²¤ìæ×M
+l>#ÕuË¡šz‘ßùyIàpŠTGįiŽ$´WÞŽñºÆDœ$¡rlëÝ$Pý!ùXÿh£Ï?Üì}6"›r!ÕRÙ4Ÿ=Ú´‡4Ã	„ŒðŒˆù(BìBö(B”xýŸr‡dóÃ÷ÞD(ü7à#„â„ge× ”žE({¡Æ«-z÷žµÒµ­ˆ—Mzýž-ÙŒPûnÙ:öÊö_öɦµ‰(
+ÃO2“˜€´¢¡+i­­ñZ$¡Õ6™±i+º°’j¡2’º7â^.TPÿÿàop%¸s­7ñíJ*‚‹s‡çÌ˽ï;÷œ{g^o3{æ›1µÇà}Ú¦±‹OÿÌÒ³˜åç†a†a†a†a†ñÿAšaÂ	UjXdéÙœ(æ£8{Úρ_ƒÅá#…£ÇŽŸ(ŽprìÔøÄiÎœ=wþLN…Ži.ÁÌ,W˜Ïg¡¡ß¹ϾɭÞëÿóæòQqD{qÙ­Xc‚S\Æg™¬°J‹Û¬s—{Üç»]øíÜeæXàzänFî
+6cw÷K¿OR§þ›ÓÓ‘c-ùªƒêžhWz8ÑY©Rx2ܼz
+ԝf@ûµ#Ç£D»ÒþZõ«~Ù+V‚N{½Õ®·¶üÆèt°Ñ¬-îd„ª2RÆ£HEyìÐVF[ŠuÅ-5”í°*åyUýýÍÕ™4£I~×ùû9Êrf@á¢<euN®Á®'û*Êb|7Ó/^–¼Ío+ƒ“ßsù\T–·KA9|¿›û|¨ûæÇÕÌ«üÂ똊ëöS€ R=4Á
+endstream
+endobj
+91 0 obj
+<< 
+/Type /Font 
+/Subtype /CIDFontType2 
+/BaseFont /EPELIJ+SymbolMT 
+/FontDescriptor 79 0 R 
+/CIDSystemInfo << /Registry (Adobe)/Ordering (Identity)/Supplement 0 >> 
+/DW 1000 
+/W [ 3 [ 250 ] 120 [ 459 ] ] 
+>> 
+endobj
+92 0 obj
+<< /Filter /FlateDecode /Length 228 >> 
+stream
+H‰TÁnà †ï<…«z€²JÛ¤ˆKwÉ¡Û´d»SpR¤Cyû‹Zí È¿ýÙ?æ§öµõ.ÿ `:L08o	簐A¸àè<$XgÒÕÛL:Ïp·Î	§Öš†ñÏœœ­ðÐ÷/{±þNÉù1+Gùõ•n‰ñ'ô	(ÆOgßô„À+xû5"ȶÙÁâµAÒ~Dh„ª<OÏ
+ÐÛÿy&ÿ¨Ë`®šØ½Z
+Å6¨‘BJÅ2»U•.å‡7Wf!ʆ몭bÈy¼m*†Xf—Ã~  »m0
+endstream
+endobj
+93 0 obj
+<< 
+/Count 34 
+/First 94 0 R 
+/Last 95 0 R 
+>> 
+endobj
+94 0 obj
+<< 
+/Title (Introduction)
+/Dest [ 3953 0 R /XYZ 0 512 null ] 
+/Parent 93 0 R 
+/Next 121 0 R 
+>> 
+endobj
+95 0 obj
+<< 
+/Title (References)
+/Dest [ 68 0 R /XYZ 0 365 null ] 
+/Parent 93 0 R 
+/Prev 96 0 R 
+>> 
+endobj
+96 0 obj
+<< 
+/Title (Special HDF5 Objects created by this mapping.)
+/Dest [ 65 0 R /XYZ 0 460 null ] 
+/Parent 93 0 R 
+/Prev 97 0 R 
+/Next 95 0 R 
+/First 98 0 R 
+/Last 99 0 R 
+/Count 3 
+>> 
+endobj
+97 0 obj
+<< 
+/Title (Interpreting HDF5 files as HDF4 files when there is no explicit metadata\
+)
+/Dest [ 57 0 R /XYZ 0 134 null ] 
+/Parent 93 0 R 
+/Prev 101 0 R 
+/Next 96 0 R 
+/First 102 0 R 
+/Last 103 0 R 
+/Count 6 
+>> 
+endobj
+98 0 obj
+<< 
+/Title (Converting the Root Group)
+/Dest [ 65 0 R /XYZ 0 341 null ] 
+/Parent 96 0 R 
+/Next 100 0 R 
+>> 
+endobj
+99 0 obj
+<< 
+/Title (Datatypes)
+/Dest [ 68 0 R /XYZ 0 623 null ] 
+/Parent 96 0 R 
+/Prev 100 0 R 
+>> 
+endobj
+100 0 obj
+<< 
+/Title (Objects and attributes created by the HDF4 to HDF5 mapping)
+/Dest [ 65 0 R /XYZ 0 260 null ] 
+/Parent 96 0 R 
+/Prev 98 0 R 
+/Next 99 0 R 
+>> 
+endobj
+101 0 obj
+<< 
+/Title (Other considerations)
+/Dest [ 50 0 R /XYZ 0 568 null ] 
+/Parent 93 0 R 
+/Prev 108 0 R 
+/Next 97 0 R 
+/First 109 0 R 
+/Last 110 0 R 
+/Count 5 
+>> 
+endobj
+102 0 obj
+<< 
+/Title (Case 1: No HDF4 counterpart)
+/Dest [ 61 0 R /XYZ 0 598 null ] 
+/Parent 97 0 R 
+/Next 104 0 R 
+>> 
+endobj
+103 0 obj
+<< 
+/Title (Case 3: The mapping is unambiguous)
+/Dest [ 65 0 R /XYZ 0 599 null ] 
+/Parent 97 0 R 
+/Prev 104 0 R 
+>> 
+endobj
+104 0 obj
+<< 
+/Title (Case 2: The ambiguous case)
+/Dest [ 61 0 R /XYZ 0 449 null ] 
+/Parent 97 0 R 
+/Prev 102 0 R 
+/Next 103 0 R 
+/First 105 0 R 
+/Last 106 0 R 
+/Count 3 
+>> 
+endobj
+105 0 obj
+<< 
+/Title (\376\377\000H\000D\000F\0005\000  \034\000d\000a\000t\000a\000s\000e\000\
+t\000s \035)
+/Dest [ 61 0 R /XYZ 0 392 null ] 
+/Parent 104 0 R 
+/Next 107 0 R 
+>> 
+endobj
+106 0 obj
+<< 
+/Title (Strings)
+/Dest [ 65 0 R /XYZ 0 720 null ] 
+/Parent 104 0 R 
+/Prev 107 0 R 
+>> 
+endobj
+107 0 obj
+<< 
+/Title (The root group)
+/Dest [ 61 0 R /XYZ 0 253 null ] 
+/Parent 104 0 R 
+/Prev 105 0 R 
+/Next 106 0 R 
+>> 
+endobj
+108 0 obj
+<< 
+/Title (HDF4 and HDF5 File Organization)
+/Dest [ 35 0 R /XYZ 0 385 null ] 
+/Parent 93 0 R 
+/Prev 114 0 R 
+/Next 101 0 R 
+/First 115 0 R 
+/Last 116 0 R 
+/Count 6 
+>> 
+endobj
+109 0 obj
+<< 
+/Title (Dealing with HDF4 reference numbers)
+/Dest [ 50 0 R /XYZ 0 508 null ] 
+/Parent 101 0 R 
+/Next 113 0 R 
+>> 
+endobj
+110 0 obj
+<< 
+/Title (Datatypes)
+/Dest [ 57 0 R /XYZ 0 708 null ] 
+/Parent 101 0 R 
+/Prev 111 0 R 
+>> 
+endobj
+111 0 obj
+<< 
+/Title (Dataspaces)
+/Dest [ 50 0 R /XYZ 0 158 null ] 
+/Parent 101 0 R 
+/Prev 112 0 R 
+/Next 110 0 R 
+>> 
+endobj
+112 0 obj
+<< 
+/Title (Storage properties)
+/Dest [ 50 0 R /XYZ 0 262 null ] 
+/Parent 101 0 R 
+/Prev 113 0 R 
+/Next 111 0 R 
+>> 
+endobj
+113 0 obj
+<< 
+/Title (File-level information)
+/Dest [ 50 0 R /XYZ 0 403 null ] 
+/Parent 101 0 R 
+/Prev 109 0 R 
+/Next 112 0 R 
+>> 
+endobj
+114 0 obj
+<< 
+/Title (Representing HDF4 objects in HDF5)
+/Dest [ 1 0 R /XYZ 0 208 null ] 
+/Parent 93 0 R 
+/Prev 121 0 R 
+/Next 108 0 R 
+/First 122 0 R 
+/Last 123 0 R 
+/Count 6 
+>> 
+endobj
+115 0 obj
+<< 
+/Title (Object Names)
+/Dest [ 35 0 R /XYZ 0 220 null ] 
+/Parent 108 0 R 
+/Next 117 0 R 
+/First 118 0 R 
+/Last 119 0 R 
+/Count 3 
+>> 
+endobj
+116 0 obj
+<< 
+/Title (Shared HDF4 objects: dimensions and palettes)
+/Dest [ 50 0 R /XYZ 0 720 null ] 
+/Parent 108 0 R 
+/Prev 117 0 R 
+>> 
+endobj
+117 0 obj
+<< 
+/Title (Organization of the HDF4 and HDF5 Files)
+/Dest [ 44 0 R /XYZ 0 720 null ] 
+/Parent 108 0 R 
+/Prev 115 0 R 
+/Next 116 0 R 
+>> 
+endobj
+118 0 obj
+<< 
+/Title (Objects with unique names)
+/Dest [ 38 0 R /XYZ 0 548 null ] 
+/Parent 115 0 R 
+/Next 120 0 R 
+>> 
+endobj
+119 0 obj
+<< 
+/Title (Name Collisions)
+/Dest [ 38 0 R /XYZ 0 254 null ] 
+/Parent 115 0 R 
+/Prev 120 0 R 
+>> 
+endobj
+120 0 obj
+<< 
+/Title (Objects with no name)
+/Dest [ 38 0 R /XYZ 0 479 null ] 
+/Parent 115 0 R 
+/Prev 118 0 R 
+/Next 119 0 R 
+>> 
+endobj
+121 0 obj
+<< 
+/Title (HDF4 objects and HDF5 objects)
+/Dest [ 1 0 R /XYZ 0 575 null ] 
+/Parent 93 0 R 
+/Prev 94 0 R 
+/Next 114 0 R 
+>> 
+endobj
+122 0 obj
+<< 
+/Title (SDS)
+/Dest [ 8 0 R /XYZ 0 594 null ] 
+/Parent 114 0 R 
+/Next 127 0 R 
+>> 
+endobj
+123 0 obj
+<< 
+/Title (Annotation)
+/Dest [ 31 0 R /XYZ 0 247 null ] 
+/Parent 114 0 R 
+/Prev 124 0 R 
+>> 
+endobj
+124 0 obj
+<< 
+/Title (Palette)
+/Dest [ 31 0 R /XYZ 0 708 null ] 
+/Parent 114 0 R 
+/Prev 125 0 R 
+/Next 123 0 R 
+>> 
+endobj
+125 0 obj
+<< 
+/Title (Raster images)
+/Dest [ 21 0 R /XYZ 0 396 null ] 
+/Parent 114 0 R 
+/Prev 126 0 R 
+/Next 124 0 R 
+>> 
+endobj
+126 0 obj
+<< 
+/Title (Vgroup)
+/Dest [ 21 0 R /XYZ 0 708 null ] 
+/Parent 114 0 R 
+/Prev 127 0 R 
+/Next 125 0 R 
+>> 
+endobj
+127 0 obj
+<< 
+/Title (Vdata)
+/Dest [ 18 0 R /XYZ 0 708 null ] 
+/Parent 114 0 R 
+/Prev 122 0 R 
+/Next 126 0 R 
+>> 
+endobj
+128 0 obj
+<< 
+/TextBox /Div 
+/Frame /Div 
+/Footnote /Note 
+/Endnote /Note 
+/Shape /Figure 
+/InlineShape /Figure 
+/TOA /TOC 
+/TOAI /TOCI 
+/TOF /TOC 
+/TOFI /TOCI 
+/Superscript /Span 
+/Subscript /Span 
+/Strikeout /Span 
+/Underline /Span 
+/DropCap /Figure 
+/Title /P 
+/Subtitle /P 
+/Normal /P 
+/Heading#201,h1 /P 
+/List#20Bullet#202,lb2 /P 
+/Caption /P 
+/Header /P 
+/Endnote#20Text /P 
+/Heading#202,h2 /P 
+/List#20Number#202 /P 
+/Heading#203,h3 /P 
+>> 
+endobj
+129 0 obj
+<< 
+/S /Title 
+/C /Title 
+/Pg 3953 0 R 
+/K 0 
+/P 1704 0 R 
+>> 
+endobj
+130 0 obj
+<< 
+/S /Subtitle 
+/C /Subtitle 
+/Pg 3953 0 R 
+/K 1 
+/P 1704 0 R 
+>> 
+endobj
+131 0 obj
+<< 
+/Title 132 0 R 
+/Subtitle 134 0 R 
+/Normal 139 0 R 
+/Heading#201,h1 141 0 R 
+/List#20Bullet#202,lb2 160 0 R 
+/Caption 177 0 R 
+/Header 198 0 R 
+/Endnote#20Text 223 0 R 
+/Heading#202,h2 242 0 R 
+/List#20Number#202 1414 0 R 
+/Heading#203,h3 1447 0 R 
+>> 
+endobj
+132 0 obj
+<< 
+/O /Layout 
+/WritingMode /LrTb 
+/StartIndent 0 
+/EndIndent 0 
+/TextAlign /Center 
+/SpaceBefore 12 
+/SpaceAfter 3 
+/TextIndent 0 
+>> 
+endobj
+133 0 obj
+<< 
+/S /Subtitle 
+/C /Subtitle 
+/Pg 3953 0 R 
+/K 2 
+/P 1704 0 R 
+>> 
+endobj
+134 0 obj
+<< 
+/O /Layout 
+/WritingMode /LrTb 
+/StartIndent 0 
+/EndIndent 0 
+/TextAlign /Center 
+/SpaceBefore 0 
+/SpaceAfter 3 
+/TextIndent 0 
+>> 
+endobj
+135 0 obj
+<< 
+/S /Subtitle 
+/C /Subtitle 
+/Pg 3953 0 R 
+/K 3 
+/P 1704 0 R 
+>> 
+endobj
+136 0 obj
+<< 
+/S /Subtitle 
+/C /Subtitle 
+/Pg 3953 0 R 
+/K 4 
+/P 1704 0 R 
+>> 
+endobj
+137 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 3953 0 R 
+/K 5 
+/P 1704 0 R 
+>> 
+endobj
+138 0 obj
+<< 
+/S /LBody 
+/C /Heading#201,h1 
+/Pg 3953 0 R 
+/K 6 
+/P 3746 0 R 
+>> 
+endobj
+139 0 obj
+<< 
+/O /Layout 
+/WritingMode /LrTb 
+/StartIndent 0 
+/EndIndent 0 
+/TextAlign /Start 
+/SpaceBefore 0 
+/SpaceAfter 6 
+/TextIndent 0 
+>> 
+endobj
+140 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 3953 0 R 
+/K 7 
+/P 1704 0 R 
+>> 
+endobj
+141 0 obj
+<< 
+/O /Layout 
+/WritingMode /LrTb 
+/StartIndent 21.60001 
+/EndIndent 0 
+/TextAlign /Start 
+/SpaceBefore 12 
+/SpaceAfter 3 
+/TextIndent -21.59999 
+>> 
+endobj
+142 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 3953 0 R 
+/K 8 
+/P 1704 0 R 
+>> 
+endobj
+143 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 3953 0 R 
+/K 9 
+/P 1704 0 R 
+>> 
+endobj
+144 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 3953 0 R 
+/K 10 
+/P 1704 0 R 
+>> 
+endobj
+145 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 3953 0 R 
+/K 11 
+/P 1704 0 R 
+>> 
+endobj
+146 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 3953 0 R 
+/K 12 
+/P 1704 0 R 
+>> 
+endobj
+147 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 3953 0 R 
+/K 13 
+/P 1704 0 R 
+>> 
+endobj
+148 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 3953 0 R 
+/K 14 
+/P 1704 0 R 
+>> 
+endobj
+149 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 3953 0 R 
+/K 15 
+/P 1704 0 R 
+>> 
+endobj
+150 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 3953 0 R 
+/K 16 
+/P 1704 0 R 
+>> 
+endobj
+151 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 1 0 R 
+/K 0 
+/P 1704 0 R 
+>> 
+endobj
+152 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 1 0 R 
+/K 1 
+/P 1704 0 R 
+>> 
+endobj
+153 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 1 0 R 
+/K 2 
+/P 1704 0 R 
+>> 
+endobj
+154 0 obj
+<< 
+/S /Normal 
+/A [ 155 0 R ] 
+/C /Normal 
+/Pg 1 0 R 
+/K 3 
+/P 1704 0 R 
+>> 
+endobj
+155 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+156 0 obj
+<< 
+/S /LBody 
+/C /Heading#201,h1 
+/Pg 1 0 R 
+/K 4 
+/P 3748 0 R 
+>> 
+endobj
+157 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 1 0 R 
+/K 5 
+/P 1704 0 R 
+>> 
+endobj
+158 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 1 0 R 
+/K 6 
+/P 3750 0 R 
+>> 
+endobj
+159 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 1 0 R 
+/K 7 
+/P 3751 0 R 
+>> 
+endobj
+160 0 obj
+<< 
+/O /Layout 
+/WritingMode /LrTb 
+/StartIndent 36 
+/EndIndent 0 
+/TextAlign /Start 
+/SpaceBefore 0 
+/SpaceAfter 0 
+/TextIndent -17.99998 
+>> 
+endobj
+161 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 1 0 R 
+/K 8 
+/P 3752 0 R 
+>> 
+endobj
+162 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 1 0 R 
+/K 9 
+/P 3753 0 R 
+>> 
+endobj
+163 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 1 0 R 
+/K 10 
+/P 3754 0 R 
+>> 
+endobj
+164 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 1 0 R 
+/K 11 
+/P 3755 0 R 
+>> 
+endobj
+165 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 1 0 R 
+/K 12 
+/P 3756 0 R 
+>> 
+endobj
+166 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 1 0 R 
+/K 13 
+/P 3757 0 R 
+>> 
+endobj
+167 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 1 0 R 
+/K 14 
+/P 1704 0 R 
+>> 
+endobj
+168 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 1 0 R 
+/K 15 
+/P 1704 0 R 
+>> 
+endobj
+169 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 1 0 R 
+/K 16 
+/P 3759 0 R 
+>> 
+endobj
+170 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 1 0 R 
+/K 17 
+/P 3760 0 R 
+>> 
+endobj
+171 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 1 0 R 
+/K 18 
+/P 1704 0 R 
+>> 
+endobj
+172 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 1 0 R 
+/K 19 
+/P 1704 0 R 
+>> 
+endobj
+173 0 obj
+<< 
+/S /LBody 
+/C /Heading#201,h1 
+/Pg 1 0 R 
+/K 20 
+/P 3762 0 R 
+>> 
+endobj
+174 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 1 0 R 
+/K 21 
+/P 1704 0 R 
+>> 
+endobj
+175 0 obj
+<< 
+/S /Caption 
+/A [ 176 0 R ] 
+/C /Caption 
+/Pg 4 0 R 
+/K 0 
+/P 1704 0 R 
+>> 
+endobj
+176 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+/SpaceBefore 0 
+/SpaceAfter 3 
+>> 
+endobj
+177 0 obj
+<< 
+/O /Layout 
+/WritingMode /LrTb 
+/StartIndent 0 
+/EndIndent 0 
+/TextAlign /Start 
+/SpaceBefore 6 
+/SpaceAfter 6 
+/TextIndent 0 
+>> 
+endobj
+178 0 obj
+<< 
+/S /Normal 
+/A [ 179 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 1 
+/P 1707 0 R 
+>> 
+endobj
+179 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+180 0 obj
+<< 
+/S /Normal 
+/A [ 181 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 2 
+/P 1710 0 R 
+>> 
+endobj
+181 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+182 0 obj
+<< 
+/S /Normal 
+/A [ 183 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 3 
+/P 1713 0 R 
+>> 
+endobj
+183 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+184 0 obj
+<< 
+/S /Normal 
+/A [ 185 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 4 
+/P 1717 0 R 
+>> 
+endobj
+185 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+186 0 obj
+<< 
+/S /Normal 
+/A [ 187 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 5 
+/P 1720 0 R 
+>> 
+endobj
+187 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+188 0 obj
+<< 
+/S /Normal 
+/A [ 189 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 6 
+/P 1723 0 R 
+>> 
+endobj
+189 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+190 0 obj
+<< 
+/S /Normal 
+/A [ 191 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 7 
+/P 1727 0 R 
+>> 
+endobj
+191 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+192 0 obj
+<< 
+/S /Normal 
+/A [ 193 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 8 
+/P 1730 0 R 
+>> 
+endobj
+193 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+194 0 obj
+<< 
+/S /Normal 
+/A [ 195 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 9 
+/P 1733 0 R 
+>> 
+endobj
+195 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+196 0 obj
+<< 
+/S /Header 
+/A [ 197 0 R ] 
+/C /Header 
+/Pg 4 0 R 
+/K 10 
+/P 1733 0 R 
+>> 
+endobj
+197 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+198 0 obj
+<< 
+/O /Layout 
+/WritingMode /LrTb 
+/StartIndent 0 
+/EndIndent 0 
+/TextAlign /Start 
+/SpaceBefore 0 
+/SpaceAfter 6 
+/TextIndent 0 
+>> 
+endobj
+199 0 obj
+<< 
+/S /Normal 
+/A [ 200 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 11 
+/P 1737 0 R 
+>> 
+endobj
+200 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+201 0 obj
+<< 
+/S /Normal 
+/A [ 202 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 12 
+/P 1740 0 R 
+>> 
+endobj
+202 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+203 0 obj
+<< 
+/S /Normal 
+/A [ 204 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 13 
+/P 1743 0 R 
+>> 
+endobj
+204 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+205 0 obj
+<< 
+/S /Normal 
+/A [ 206 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 14 
+/P 1743 0 R 
+>> 
+endobj
+206 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+207 0 obj
+<< 
+/S /Normal 
+/A [ 208 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 15 
+/P 1747 0 R 
+>> 
+endobj
+208 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+209 0 obj
+<< 
+/S /Normal 
+/A [ 210 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 16 
+/P 1750 0 R 
+>> 
+endobj
+210 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+211 0 obj
+<< 
+/S /Normal 
+/A [ 212 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 17 
+/P 1753 0 R 
+>> 
+endobj
+212 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+213 0 obj
+<< 
+/S /Normal 
+/A [ 214 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 18 
+/P 1753 0 R 
+>> 
+endobj
+214 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+215 0 obj
+<< 
+/S /Normal 
+/A [ 216 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 19 
+/P 1757 0 R 
+>> 
+endobj
+216 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+217 0 obj
+<< 
+/S /Normal 
+/A [ 218 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 20 
+/P 1760 0 R 
+>> 
+endobj
+218 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+219 0 obj
+<< 
+/S /Normal 
+/A [ 220 0 R ] 
+/C /Normal 
+/Pg 4 0 R 
+/K 21 
+/P 1763 0 R 
+>> 
+endobj
+220 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+221 0 obj
+<< 
+/S /Endnote#20Text 
+/C /Endnote#20Text 
+/Pg 4 0 R 
+/K 22 
+/P 1767 0 R 
+>> 
+endobj
+222 0 obj
+<< 
+/S /Endnote#20Text 
+/C /Endnote#20Text 
+/Pg 4 0 R 
+/K 23 
+/P 1770 0 R 
+>> 
+endobj
+223 0 obj
+<< 
+/O /Layout 
+/WritingMode /LrTb 
+/StartIndent 0 
+/EndIndent 0 
+/TextAlign /Start 
+/SpaceBefore 0 
+/SpaceAfter 6 
+/TextIndent 0 
+>> 
+endobj
+224 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 4 0 R 
+/K 24 
+/P 1773 0 R 
+>> 
+endobj
+225 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 4 0 R 
+/K 25 
+/P 1704 0 R 
+>> 
+endobj
+226 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 4 0 R 
+/K 26 
+/P 1704 0 R 
+>> 
+endobj
+227 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 4 0 R 
+/K 27 
+/P 1704 0 R 
+>> 
+endobj
+228 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 4 0 R 
+/K 28 
+/P 1704 0 R 
+>> 
+endobj
+229 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 4 0 R 
+/K 29 
+/P 3764 0 R 
+>> 
+endobj
+230 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 4 0 R 
+/K 30 
+/P 3765 0 R 
+>> 
+endobj
+231 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 4 0 R 
+/K 31 
+/P 3766 0 R 
+>> 
+endobj
+232 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 4 0 R 
+/K 32 
+/P 3767 0 R 
+>> 
+endobj
+233 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 4 0 R 
+/K 33 
+/P 3768 0 R 
+>> 
+endobj
+234 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 8 0 R 
+/K 0 
+/P 1704 0 R 
+>> 
+endobj
+235 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 8 0 R 
+/K 1 
+/P 3770 0 R 
+>> 
+endobj
+236 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 8 0 R 
+/K 2 
+/P 3771 0 R 
+>> 
+endobj
+237 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 8 0 R 
+/K 3 
+/P 3772 0 R 
+>> 
+endobj
+238 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 8 0 R 
+/K 4 
+/P 3773 0 R 
+>> 
+endobj
+239 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 8 0 R 
+/K 5 
+/P 3774 0 R 
+>> 
+endobj
+240 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 8 0 R 
+/K 6 
+/P 3776 0 R 
+>> 
+endobj
+241 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 8 0 R 
+/K 7 
+/P 1704 0 R 
+>> 
+endobj
+242 0 obj
+<< 
+/O /Layout 
+/WritingMode /LrTb 
+/StartIndent 28.8 
+/EndIndent 0 
+/TextAlign /Start 
+/SpaceBefore 12 
+/SpaceAfter 3 
+/TextIndent -28.79999 
+>> 
+endobj
+243 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 8 0 R 
+/K 8 
+/P 1704 0 R 
+>> 
+endobj
+244 0 obj
+<< 
+/S /Caption 
+/A [ 245 0 R ] 
+/C /Caption 
+/Pg 8 0 R 
+/K 9 
+/P 1704 0 R 
+>> 
+endobj
+245 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+246 0 obj
+<< 
+/S /Normal 
+/A [ 247 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 10 
+/P 1778 0 R 
+>> 
+endobj
+247 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+248 0 obj
+<< 
+/S /Normal 
+/A [ 249 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 11 
+/P 1781 0 R 
+>> 
+endobj
+249 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+250 0 obj
+<< 
+/S /Normal 
+/A [ 251 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 12 
+/P 1784 0 R 
+>> 
+endobj
+251 0 obj
+<< 
+/O /Layout 
+/EndIndent -0.89998 
+/SpaceAfter 3 
+>> 
+endobj
+252 0 obj
+<< 
+/S /Normal 
+/A [ 253 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 13 
+/P 1787 0 R 
+>> 
+endobj
+253 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+254 0 obj
+<< 
+/S /Normal 
+/A [ 255 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 14 
+/P 1790 0 R 
+>> 
+endobj
+255 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+256 0 obj
+<< 
+/S /Normal 
+/A [ 257 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 15 
+/P 1794 0 R 
+>> 
+endobj
+257 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+258 0 obj
+<< 
+/S /Normal 
+/A [ 259 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 16 
+/P 1797 0 R 
+>> 
+endobj
+259 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+260 0 obj
+<< 
+/S /Normal 
+/A [ 261 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 17 
+/P 1800 0 R 
+>> 
+endobj
+261 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+262 0 obj
+<< 
+/S /Normal 
+/A [ 263 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 18 
+/P 1803 0 R 
+>> 
+endobj
+263 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+264 0 obj
+<< 
+/S /Normal 
+/A [ 265 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 19 
+/P 1806 0 R 
+>> 
+endobj
+265 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+266 0 obj
+<< 
+/S /Normal 
+/A [ 267 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 20 
+/P 1810 0 R 
+>> 
+endobj
+267 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+268 0 obj
+<< 
+/S /Normal 
+/A [ 269 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 21 
+/P 1813 0 R 
+>> 
+endobj
+269 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+270 0 obj
+<< 
+/S /Normal 
+/A [ 271 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 22 
+/P 1816 0 R 
+>> 
+endobj
+271 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+272 0 obj
+<< 
+/S /Normal 
+/A [ 273 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 23 
+/P 1819 0 R 
+>> 
+endobj
+273 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+274 0 obj
+<< 
+/S /Normal 
+/A [ 275 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 24 
+/P 1822 0 R 
+>> 
+endobj
+275 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+276 0 obj
+<< 
+/S /Normal 
+/A [ 277 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 25 
+/P 1826 0 R 
+>> 
+endobj
+277 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+278 0 obj
+<< 
+/S /Normal 
+/A [ 279 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 26 
+/P 1829 0 R 
+>> 
+endobj
+279 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+280 0 obj
+<< 
+/S /Normal 
+/A [ 281 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 27 
+/P 1832 0 R 
+>> 
+endobj
+281 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+282 0 obj
+<< 
+/S /Normal 
+/A [ 283 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 28 
+/P 1835 0 R 
+>> 
+endobj
+283 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+284 0 obj
+<< 
+/S /Normal 
+/A [ 285 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 29 
+/P 1838 0 R 
+>> 
+endobj
+285 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+286 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 8 0 R 
+/K 30 
+/P 1704 0 R 
+>> 
+endobj
+287 0 obj
+<< 
+/S /Normal 
+/A [ 288 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 31 
+/P 1843 0 R 
+>> 
+endobj
+288 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+289 0 obj
+<< 
+/S /Normal 
+/A [ 290 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 32 
+/P 1846 0 R 
+>> 
+endobj
+290 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+291 0 obj
+<< 
+/S /Normal 
+/A [ 292 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 33 
+/P 1849 0 R 
+>> 
+endobj
+292 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+293 0 obj
+<< 
+/S /Normal 
+/A [ 294 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 34 
+/P 1852 0 R 
+>> 
+endobj
+294 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+295 0 obj
+<< 
+/S /Normal 
+/A [ 296 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 35 
+/P 1855 0 R 
+>> 
+endobj
+296 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+297 0 obj
+<< 
+/S /Normal 
+/A [ 298 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 36 
+/P 1859 0 R 
+>> 
+endobj
+298 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+299 0 obj
+<< 
+/S /Normal 
+/A [ 300 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 37 
+/P 1862 0 R 
+>> 
+endobj
+300 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+301 0 obj
+<< 
+/S /Normal 
+/A [ 302 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 38 
+/P 1865 0 R 
+>> 
+endobj
+302 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+303 0 obj
+<< 
+/S /Normal 
+/A [ 304 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 39 
+/P 1868 0 R 
+>> 
+endobj
+304 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+305 0 obj
+<< 
+/S /Normal 
+/A [ 306 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 40 
+/P 1871 0 R 
+>> 
+endobj
+306 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+307 0 obj
+<< 
+/S /Normal 
+/A [ 308 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 41 
+/P 1875 0 R 
+>> 
+endobj
+308 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+309 0 obj
+<< 
+/S /Normal 
+/A [ 310 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 42 
+/P 1878 0 R 
+>> 
+endobj
+310 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+311 0 obj
+<< 
+/S /Normal 
+/A [ 312 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 43 
+/P 1881 0 R 
+>> 
+endobj
+312 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+313 0 obj
+<< 
+/S /Normal 
+/A [ 314 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 44 
+/P 1884 0 R 
+>> 
+endobj
+314 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+315 0 obj
+<< 
+/S /Normal 
+/A [ 316 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 45 
+/P 1887 0 R 
+>> 
+endobj
+316 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+317 0 obj
+<< 
+/S /Normal 
+/A [ 318 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 46 
+/P 1891 0 R 
+>> 
+endobj
+318 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+319 0 obj
+<< 
+/S /Normal 
+/A [ 320 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 47 
+/P 1894 0 R 
+>> 
+endobj
+320 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+321 0 obj
+<< 
+/S /Normal 
+/A [ 322 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 48 
+/P 1897 0 R 
+>> 
+endobj
+322 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+323 0 obj
+<< 
+/S /Normal 
+/A [ 324 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 49 
+/P 1900 0 R 
+>> 
+endobj
+324 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+325 0 obj
+<< 
+/S /Normal 
+/A [ 326 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 50 
+/P 1903 0 R 
+>> 
+endobj
+326 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+327 0 obj
+<< 
+/S /Normal 
+/A [ 328 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 51 
+/P 1907 0 R 
+>> 
+endobj
+328 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+329 0 obj
+<< 
+/S /Normal 
+/A [ 330 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 52 
+/P 1910 0 R 
+>> 
+endobj
+330 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+331 0 obj
+<< 
+/S /Normal 
+/A [ 332 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 53 
+/P 1913 0 R 
+>> 
+endobj
+332 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+333 0 obj
+<< 
+/S /Normal 
+/A [ 334 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 54 
+/P 1916 0 R 
+>> 
+endobj
+334 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+335 0 obj
+<< 
+/S /Normal 
+/A [ 336 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 55 
+/P 1919 0 R 
+>> 
+endobj
+336 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+337 0 obj
+<< 
+/S /Normal 
+/A [ 338 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 56 
+/P 1923 0 R 
+>> 
+endobj
+338 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+339 0 obj
+<< 
+/S /Normal 
+/A [ 340 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 57 
+/P 1926 0 R 
+>> 
+endobj
+340 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+341 0 obj
+<< 
+/S /Normal 
+/A [ 342 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 58 
+/P 1929 0 R 
+>> 
+endobj
+342 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+343 0 obj
+<< 
+/S /Normal 
+/A [ 344 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 59 
+/P 1932 0 R 
+>> 
+endobj
+344 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+345 0 obj
+<< 
+/S /Normal 
+/A [ 346 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 60 
+/P 1935 0 R 
+>> 
+endobj
+346 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+347 0 obj
+<< 
+/S /Normal 
+/A [ 348 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 61 
+/P 1939 0 R 
+>> 
+endobj
+348 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+349 0 obj
+<< 
+/S /Normal 
+/A [ 350 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 62 
+/P 1942 0 R 
+>> 
+endobj
+350 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+351 0 obj
+<< 
+/S /Normal 
+/A [ 352 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 63 
+/P 1945 0 R 
+>> 
+endobj
+352 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+353 0 obj
+<< 
+/S /Normal 
+/A [ 354 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 64 
+/P 1948 0 R 
+>> 
+endobj
+354 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+355 0 obj
+<< 
+/S /Normal 
+/A [ 356 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 65 
+/P 1951 0 R 
+>> 
+endobj
+356 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+357 0 obj
+<< 
+/S /Normal 
+/A [ 358 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 66 
+/P 1955 0 R 
+>> 
+endobj
+358 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+359 0 obj
+<< 
+/S /Normal 
+/A [ 360 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 67 
+/P 1958 0 R 
+>> 
+endobj
+360 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+361 0 obj
+<< 
+/S /Normal 
+/A [ 362 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 68 
+/P 1961 0 R 
+>> 
+endobj
+362 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+363 0 obj
+<< 
+/S /Normal 
+/A [ 364 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 69 
+/P 1964 0 R 
+>> 
+endobj
+364 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+365 0 obj
+<< 
+/S /Normal 
+/A [ 366 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 70 
+/P 1967 0 R 
+>> 
+endobj
+366 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+367 0 obj
+<< 
+/S /Normal 
+/A [ 368 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 71 
+/P 1971 0 R 
+>> 
+endobj
+368 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+369 0 obj
+<< 
+/S /Normal 
+/A [ 370 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 72 
+/P 1974 0 R 
+>> 
+endobj
+370 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+371 0 obj
+<< 
+/S /Normal 
+/A [ 372 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 73 
+/P 1977 0 R 
+>> 
+endobj
+372 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+373 0 obj
+<< 
+/S /Normal 
+/A [ 374 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 74 
+/P 1980 0 R 
+>> 
+endobj
+374 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+375 0 obj
+<< 
+/S /Normal 
+/A [ 376 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 75 
+/P 1983 0 R 
+>> 
+endobj
+376 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+377 0 obj
+<< 
+/S /Normal 
+/A [ 378 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 76 
+/P 1987 0 R 
+>> 
+endobj
+378 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+379 0 obj
+<< 
+/S /Normal 
+/A [ 380 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 77 
+/P 1990 0 R 
+>> 
+endobj
+380 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+381 0 obj
+<< 
+/S /Normal 
+/A [ 382 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 78 
+/P 1993 0 R 
+>> 
+endobj
+382 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+383 0 obj
+<< 
+/S /Normal 
+/A [ 384 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 79 
+/P 1996 0 R 
+>> 
+endobj
+384 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+385 0 obj
+<< 
+/S /Normal 
+/A [ 386 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 80 
+/P 1999 0 R 
+>> 
+endobj
+386 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+387 0 obj
+<< 
+/S /Normal 
+/A [ 388 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 81 
+/P 2003 0 R 
+>> 
+endobj
+388 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+389 0 obj
+<< 
+/S /Normal 
+/A [ 390 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 82 
+/P 2006 0 R 
+>> 
+endobj
+390 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+391 0 obj
+<< 
+/S /Normal 
+/A [ 392 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 83 
+/P 2009 0 R 
+>> 
+endobj
+392 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+393 0 obj
+<< 
+/S /Normal 
+/A [ 394 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 84 
+/P 2012 0 R 
+>> 
+endobj
+394 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+395 0 obj
+<< 
+/S /Normal 
+/A [ 396 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 85 
+/P 2015 0 R 
+>> 
+endobj
+396 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+397 0 obj
+<< 
+/S /Normal 
+/A [ 398 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 86 
+/P 2019 0 R 
+>> 
+endobj
+398 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+399 0 obj
+<< 
+/S /Normal 
+/A [ 400 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 87 
+/P 2022 0 R 
+>> 
+endobj
+400 0 obj
+<< 
+/O /Layout 
+/StartIndent 17.10001 
+/SpaceAfter 0 
+>> 
+endobj
+401 0 obj
+<< 
+/S /Normal 
+/A [ 402 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 88 
+/P 2025 0 R 
+>> 
+endobj
+402 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+403 0 obj
+<< 
+/S /Normal 
+/A [ 404 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 89 
+/P 2028 0 R 
+>> 
+endobj
+404 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+405 0 obj
+<< 
+/S /Normal 
+/A [ 406 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 90 
+/P 2031 0 R 
+>> 
+endobj
+406 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+407 0 obj
+<< 
+/S /Normal 
+/A [ 408 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 91 
+/P 2035 0 R 
+>> 
+endobj
+408 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+409 0 obj
+<< 
+/S /Normal 
+/A [ 410 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 92 
+/P 2038 0 R 
+>> 
+endobj
+410 0 obj
+<< 
+/O /Layout 
+/StartIndent 17.10001 
+/SpaceAfter 0 
+>> 
+endobj
+411 0 obj
+<< 
+/S /Normal 
+/A [ 412 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 93 
+/P 2041 0 R 
+>> 
+endobj
+412 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+413 0 obj
+<< 
+/S /Normal 
+/A [ 414 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 94 
+/P 2044 0 R 
+>> 
+endobj
+414 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+415 0 obj
+<< 
+/S /Normal 
+/A [ 416 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 95 
+/P 2047 0 R 
+>> 
+endobj
+416 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+417 0 obj
+<< 
+/S /Normal 
+/A [ 418 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 96 
+/P 2051 0 R 
+>> 
+endobj
+418 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+419 0 obj
+<< 
+/S /Normal 
+/A [ 420 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 97 
+/P 2054 0 R 
+>> 
+endobj
+420 0 obj
+<< 
+/O /Layout 
+/StartIndent 17.10001 
+/SpaceAfter 0 
+>> 
+endobj
+421 0 obj
+<< 
+/S /Normal 
+/A [ 422 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 98 
+/P 2057 0 R 
+>> 
+endobj
+422 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+423 0 obj
+<< 
+/S /Normal 
+/A [ 424 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 99 
+/P 2060 0 R 
+>> 
+endobj
+424 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+425 0 obj
+<< 
+/S /Normal 
+/A [ 426 0 R ] 
+/C /Normal 
+/Pg 8 0 R 
+/K 100 
+/P 2063 0 R 
+>> 
+endobj
+426 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+427 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 8 0 R 
+/K 101 
+/P 1704 0 R 
+>> 
+endobj
+428 0 obj
+<< 
+/S /Normal 
+/A [ 429 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 0 
+/P 2068 0 R 
+>> 
+endobj
+429 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+430 0 obj
+<< 
+/S /Normal 
+/A [ 431 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 1 
+/P 2071 0 R 
+>> 
+endobj
+431 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+432 0 obj
+<< 
+/S /Normal 
+/A [ 433 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 2 
+/P 2074 0 R 
+>> 
+endobj
+433 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+434 0 obj
+<< 
+/S /Normal 
+/A [ 435 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 3 
+/P 2077 0 R 
+>> 
+endobj
+435 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+436 0 obj
+<< 
+/S /Normal 
+/A [ 437 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 4 
+/P 2080 0 R 
+>> 
+endobj
+437 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+438 0 obj
+<< 
+/S /Normal 
+/A [ 439 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 5 
+/P 2084 0 R 
+>> 
+endobj
+439 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+440 0 obj
+<< 
+/S /Normal 
+/A [ 441 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 6 
+/P 2087 0 R 
+>> 
+endobj
+441 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+442 0 obj
+<< 
+/S /Normal 
+/A [ 443 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 7 
+/P 2090 0 R 
+>> 
+endobj
+443 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+444 0 obj
+<< 
+/S /Normal 
+/A [ 445 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 8 
+/P 2093 0 R 
+>> 
+endobj
+445 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+446 0 obj
+<< 
+/S /Normal 
+/A [ 447 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 9 
+/P 2096 0 R 
+>> 
+endobj
+447 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+448 0 obj
+<< 
+/S /Normal 
+/A [ 449 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 10 
+/P 2100 0 R 
+>> 
+endobj
+449 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+450 0 obj
+<< 
+/S /Normal 
+/A [ 451 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 11 
+/P 2103 0 R 
+>> 
+endobj
+451 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+452 0 obj
+<< 
+/S /Normal 
+/A [ 453 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 12 
+/P 2106 0 R 
+>> 
+endobj
+453 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+454 0 obj
+<< 
+/S /Normal 
+/A [ 455 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 13 
+/P 2109 0 R 
+>> 
+endobj
+455 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+456 0 obj
+<< 
+/S /Normal 
+/A [ 457 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 14 
+/P 2112 0 R 
+>> 
+endobj
+457 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+458 0 obj
+<< 
+/S /Normal 
+/A [ 459 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 15 
+/P 2116 0 R 
+>> 
+endobj
+459 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+460 0 obj
+<< 
+/S /Normal 
+/A [ 461 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 16 
+/P 2119 0 R 
+>> 
+endobj
+461 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+462 0 obj
+<< 
+/S /Normal 
+/A [ 463 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 17 
+/P 2122 0 R 
+>> 
+endobj
+463 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+464 0 obj
+<< 
+/S /Normal 
+/A [ 465 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 18 
+/P 2125 0 R 
+>> 
+endobj
+465 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+466 0 obj
+<< 
+/S /Normal 
+/A [ 467 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 19 
+/P 2128 0 R 
+>> 
+endobj
+467 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+468 0 obj
+<< 
+/S /Normal 
+/A [ 469 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 20 
+/P 2132 0 R 
+>> 
+endobj
+469 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+470 0 obj
+<< 
+/S /Normal 
+/A [ 471 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 21 
+/P 2135 0 R 
+>> 
+endobj
+471 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+472 0 obj
+<< 
+/S /Normal 
+/A [ 473 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 22 
+/P 2138 0 R 
+>> 
+endobj
+473 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+474 0 obj
+<< 
+/S /Normal 
+/A [ 475 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 23 
+/P 2141 0 R 
+>> 
+endobj
+475 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+476 0 obj
+<< 
+/S /Normal 
+/A [ 477 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 24 
+/P 2144 0 R 
+>> 
+endobj
+477 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+478 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 12 0 R 
+/K 25 
+/P 1704 0 R 
+>> 
+endobj
+479 0 obj
+<< 
+/S /Normal 
+/A [ 480 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 26 
+/P 2149 0 R 
+>> 
+endobj
+480 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+481 0 obj
+<< 
+/S /Normal 
+/A [ 482 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 27 
+/P 2152 0 R 
+>> 
+endobj
+482 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+483 0 obj
+<< 
+/S /Normal 
+/A [ 484 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 28 
+/P 2155 0 R 
+>> 
+endobj
+484 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+485 0 obj
+<< 
+/S /Normal 
+/A [ 486 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 29 
+/P 2158 0 R 
+>> 
+endobj
+486 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+487 0 obj
+<< 
+/S /Normal 
+/A [ 488 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 30 
+/P 2161 0 R 
+>> 
+endobj
+488 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+489 0 obj
+<< 
+/S /Normal 
+/A [ 490 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 31 
+/P 2165 0 R 
+>> 
+endobj
+490 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+491 0 obj
+<< 
+/S /Normal 
+/A [ 492 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 32 
+/P 2168 0 R 
+>> 
+endobj
+492 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+493 0 obj
+<< 
+/S /Normal 
+/A [ 494 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 33 
+/P 2171 0 R 
+>> 
+endobj
+494 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+495 0 obj
+<< 
+/S /Normal 
+/A [ 496 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 34 
+/P 2174 0 R 
+>> 
+endobj
+496 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+497 0 obj
+<< 
+/S /Normal 
+/A [ 498 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 35 
+/P 2177 0 R 
+>> 
+endobj
+498 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+499 0 obj
+<< 
+/S /Normal 
+/A [ 500 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 36 
+/P 2181 0 R 
+>> 
+endobj
+500 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+501 0 obj
+<< 
+/S /Normal 
+/A [ 502 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 37 
+/P 2184 0 R 
+>> 
+endobj
+502 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+503 0 obj
+<< 
+/S /Normal 
+/A [ 504 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 38 
+/P 2187 0 R 
+>> 
+endobj
+504 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+505 0 obj
+<< 
+/S /Normal 
+/A [ 506 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 39 
+/P 2190 0 R 
+>> 
+endobj
+506 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+507 0 obj
+<< 
+/S /Normal 
+/A [ 508 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 40 
+/P 2193 0 R 
+>> 
+endobj
+508 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+509 0 obj
+<< 
+/S /Normal 
+/A [ 510 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 41 
+/P 2197 0 R 
+>> 
+endobj
+510 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+511 0 obj
+<< 
+/S /Normal 
+/A [ 512 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 42 
+/P 2200 0 R 
+>> 
+endobj
+512 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+513 0 obj
+<< 
+/S /Normal 
+/A [ 514 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 43 
+/P 2203 0 R 
+>> 
+endobj
+514 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+515 0 obj
+<< 
+/S /Normal 
+/A [ 516 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 44 
+/P 2206 0 R 
+>> 
+endobj
+516 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+517 0 obj
+<< 
+/S /Normal 
+/A [ 518 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 45 
+/P 2209 0 R 
+>> 
+endobj
+518 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+519 0 obj
+<< 
+/S /Normal 
+/A [ 520 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 46 
+/P 2213 0 R 
+>> 
+endobj
+520 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+521 0 obj
+<< 
+/S /Normal 
+/A [ 522 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 47 
+/P 2216 0 R 
+>> 
+endobj
+522 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+523 0 obj
+<< 
+/S /Normal 
+/A [ 524 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 48 
+/P 2219 0 R 
+>> 
+endobj
+524 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+525 0 obj
+<< 
+/S /Normal 
+/A [ 526 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 49 
+/P 2222 0 R 
+>> 
+endobj
+526 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+527 0 obj
+<< 
+/S /Normal 
+/A [ 528 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 50 
+/P 2225 0 R 
+>> 
+endobj
+528 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+529 0 obj
+<< 
+/S /Normal 
+/A [ 530 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 51 
+/P 2229 0 R 
+>> 
+endobj
+530 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+531 0 obj
+<< 
+/S /Normal 
+/A [ 532 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 52 
+/P 2232 0 R 
+>> 
+endobj
+532 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+533 0 obj
+<< 
+/S /Normal 
+/A [ 534 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 53 
+/P 2235 0 R 
+>> 
+endobj
+534 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+535 0 obj
+<< 
+/S /Normal 
+/A [ 536 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 54 
+/P 2238 0 R 
+>> 
+endobj
+536 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+537 0 obj
+<< 
+/S /Normal 
+/A [ 538 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 55 
+/P 2241 0 R 
+>> 
+endobj
+538 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+539 0 obj
+<< 
+/S /Normal 
+/A [ 540 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 56 
+/P 2245 0 R 
+>> 
+endobj
+540 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+541 0 obj
+<< 
+/S /Normal 
+/A [ 542 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 57 
+/P 2248 0 R 
+>> 
+endobj
+542 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+543 0 obj
+<< 
+/S /Normal 
+/A [ 544 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 58 
+/P 2251 0 R 
+>> 
+endobj
+544 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+545 0 obj
+<< 
+/S /Normal 
+/A [ 546 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 59 
+/P 2254 0 R 
+>> 
+endobj
+546 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+547 0 obj
+<< 
+/S /Normal 
+/A [ 548 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 60 
+/P 2257 0 R 
+>> 
+endobj
+548 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+549 0 obj
+<< 
+/S /Normal 
+/A [ 550 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 61 
+/P 2261 0 R 
+>> 
+endobj
+550 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+551 0 obj
+<< 
+/S /Normal 
+/A [ 552 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 62 
+/P 2264 0 R 
+>> 
+endobj
+552 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+553 0 obj
+<< 
+/S /Normal 
+/A [ 554 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 63 
+/P 2267 0 R 
+>> 
+endobj
+554 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+555 0 obj
+<< 
+/S /Normal 
+/A [ 556 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 64 
+/P 2270 0 R 
+>> 
+endobj
+556 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+557 0 obj
+<< 
+/S /Normal 
+/A [ 558 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 65 
+/P 2273 0 R 
+>> 
+endobj
+558 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+559 0 obj
+<< 
+/S /Normal 
+/A [ 560 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 66 
+/P 2277 0 R 
+>> 
+endobj
+560 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+561 0 obj
+<< 
+/S /Normal 
+/A [ 562 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 67 
+/P 2280 0 R 
+>> 
+endobj
+562 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+563 0 obj
+<< 
+/S /Normal 
+/A [ 564 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 68 
+/P 2283 0 R 
+>> 
+endobj
+564 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+565 0 obj
+<< 
+/S /Normal 
+/A [ 566 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 69 
+/P 2286 0 R 
+>> 
+endobj
+566 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+567 0 obj
+<< 
+/S /Normal 
+/A [ 568 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 70 
+/P 2289 0 R 
+>> 
+endobj
+568 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+569 0 obj
+<< 
+/S /Normal 
+/A [ 570 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 71 
+/P 2293 0 R 
+>> 
+endobj
+570 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+571 0 obj
+<< 
+/S /Normal 
+/A [ 572 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 72 
+/P 2296 0 R 
+>> 
+endobj
+572 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+573 0 obj
+<< 
+/S /Normal 
+/A [ 574 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 73 
+/P 2299 0 R 
+>> 
+endobj
+574 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+575 0 obj
+<< 
+/S /Normal 
+/A [ 576 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 74 
+/P 2302 0 R 
+>> 
+endobj
+576 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+577 0 obj
+<< 
+/S /Normal 
+/A [ 578 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 75 
+/P 2305 0 R 
+>> 
+endobj
+578 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+579 0 obj
+<< 
+/S /Normal 
+/A [ 580 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 76 
+/P 2309 0 R 
+>> 
+endobj
+580 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+581 0 obj
+<< 
+/S /Normal 
+/A [ 582 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 77 
+/P 2312 0 R 
+>> 
+endobj
+582 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+583 0 obj
+<< 
+/S /Normal 
+/A [ 584 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 78 
+/P 2315 0 R 
+>> 
+endobj
+584 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+585 0 obj
+<< 
+/S /Normal 
+/A [ 586 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 79 
+/P 2318 0 R 
+>> 
+endobj
+586 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+587 0 obj
+<< 
+/S /Normal 
+/A [ 588 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 80 
+/P 2321 0 R 
+>> 
+endobj
+588 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+589 0 obj
+<< 
+/S /Normal 
+/A [ 590 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 81 
+/P 2325 0 R 
+>> 
+endobj
+590 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+591 0 obj
+<< 
+/S /Normal 
+/A [ 592 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 82 
+/P 2328 0 R 
+>> 
+endobj
+592 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+593 0 obj
+<< 
+/S /Normal 
+/A [ 594 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 83 
+/P 2331 0 R 
+>> 
+endobj
+594 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+595 0 obj
+<< 
+/S /Normal 
+/A [ 596 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 84 
+/P 2334 0 R 
+>> 
+endobj
+596 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+597 0 obj
+<< 
+/S /Normal 
+/A [ 598 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 85 
+/P 2337 0 R 
+>> 
+endobj
+598 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+599 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 12 0 R 
+/K 86 
+/P 1704 0 R 
+>> 
+endobj
+600 0 obj
+<< 
+/S /Normal 
+/A [ 601 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 87 
+/P 2342 0 R 
+>> 
+endobj
+601 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+602 0 obj
+<< 
+/S /Normal 
+/A [ 603 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 88 
+/P 2345 0 R 
+>> 
+endobj
+603 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+604 0 obj
+<< 
+/S /Normal 
+/A [ 605 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 89 
+/P 2348 0 R 
+>> 
+endobj
+605 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+606 0 obj
+<< 
+/S /Normal 
+/A [ 607 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 90 
+/P 2351 0 R 
+>> 
+endobj
+607 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+608 0 obj
+<< 
+/S /Normal 
+/A [ 609 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 91 
+/P 2354 0 R 
+>> 
+endobj
+609 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+610 0 obj
+<< 
+/S /Normal 
+/A [ 611 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 92 
+/P 2358 0 R 
+>> 
+endobj
+611 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+612 0 obj
+<< 
+/S /Normal 
+/A [ 613 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 93 
+/P 2361 0 R 
+>> 
+endobj
+613 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+614 0 obj
+<< 
+/S /Normal 
+/A [ 615 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 94 
+/P 2364 0 R 
+>> 
+endobj
+615 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+616 0 obj
+<< 
+/S /Normal 
+/A [ 617 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 95 
+/P 2367 0 R 
+>> 
+endobj
+617 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+618 0 obj
+<< 
+/S /Normal 
+/A [ 619 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 96 
+/P 2370 0 R 
+>> 
+endobj
+619 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+620 0 obj
+<< 
+/S /Normal 
+/A [ 621 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 97 
+/P 2374 0 R 
+>> 
+endobj
+621 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+622 0 obj
+<< 
+/S /Normal 
+/A [ 623 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 98 
+/P 2377 0 R 
+>> 
+endobj
+623 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+624 0 obj
+<< 
+/S /Normal 
+/A [ 625 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 99 
+/P 2380 0 R 
+>> 
+endobj
+625 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+626 0 obj
+<< 
+/S /Normal 
+/A [ 627 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 100 
+/P 2383 0 R 
+>> 
+endobj
+627 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+628 0 obj
+<< 
+/S /Normal 
+/A [ 629 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 101 
+/P 2386 0 R 
+>> 
+endobj
+629 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+630 0 obj
+<< 
+/S /Normal 
+/A [ 631 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 102 
+/P 2390 0 R 
+>> 
+endobj
+631 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+632 0 obj
+<< 
+/S /Normal 
+/A [ 633 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 103 
+/P 2393 0 R 
+>> 
+endobj
+633 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+634 0 obj
+<< 
+/S /Normal 
+/A [ 635 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 104 
+/P 2396 0 R 
+>> 
+endobj
+635 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+636 0 obj
+<< 
+/S /Normal 
+/A [ 637 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 105 
+/P 2399 0 R 
+>> 
+endobj
+637 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+638 0 obj
+<< 
+/S /Normal 
+/A [ 639 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 106 
+/P 2402 0 R 
+>> 
+endobj
+639 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+640 0 obj
+<< 
+/S /Normal 
+/A [ 641 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 107 
+/P 2406 0 R 
+>> 
+endobj
+641 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+642 0 obj
+<< 
+/S /Normal 
+/A [ 643 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 108 
+/P 2409 0 R 
+>> 
+endobj
+643 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+644 0 obj
+<< 
+/S /Normal 
+/A [ 645 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 109 
+/P 2412 0 R 
+>> 
+endobj
+645 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+646 0 obj
+<< 
+/S /Normal 
+/A [ 647 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 110 
+/P 2415 0 R 
+>> 
+endobj
+647 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+648 0 obj
+<< 
+/S /Normal 
+/A [ 649 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 111 
+/P 2418 0 R 
+>> 
+endobj
+649 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+650 0 obj
+<< 
+/S /Normal 
+/A [ 651 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 112 
+/P 2422 0 R 
+>> 
+endobj
+651 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+652 0 obj
+<< 
+/S /Normal 
+/A [ 653 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 113 
+/P 2425 0 R 
+>> 
+endobj
+653 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+654 0 obj
+<< 
+/S /Normal 
+/A [ 655 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 114 
+/P 2428 0 R 
+>> 
+endobj
+655 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+656 0 obj
+<< 
+/S /Normal 
+/A [ 657 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 115 
+/P 2431 0 R 
+>> 
+endobj
+657 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+658 0 obj
+<< 
+/S /Normal 
+/A [ 659 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 116 
+/P 2434 0 R 
+>> 
+endobj
+659 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+660 0 obj
+<< 
+/S /Normal 
+/A [ 661 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 117 
+/P 2438 0 R 
+>> 
+endobj
+661 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+662 0 obj
+<< 
+/S /Normal 
+/A [ 663 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 118 
+/P 2441 0 R 
+>> 
+endobj
+663 0 obj
+<< 
+/O /Layout 
+/StartIndent 17.10001 
+/SpaceAfter 3 
+>> 
+endobj
+664 0 obj
+<< 
+/S /Normal 
+/A [ 665 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 119 
+/P 2444 0 R 
+>> 
+endobj
+665 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+666 0 obj
+<< 
+/S /Normal 
+/A [ 667 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 120 
+/P 2447 0 R 
+>> 
+endobj
+667 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+668 0 obj
+<< 
+/S /Normal 
+/A [ 669 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 121 
+/P 2450 0 R 
+>> 
+endobj
+669 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+670 0 obj
+<< 
+/S /Normal 
+/A [ 671 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 122 
+/P 2454 0 R 
+>> 
+endobj
+671 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+672 0 obj
+<< 
+/S /Normal 
+/A [ 673 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 123 
+/P 2457 0 R 
+>> 
+endobj
+673 0 obj
+<< 
+/O /Layout 
+/StartIndent 17.10001 
+/SpaceAfter 3 
+>> 
+endobj
+674 0 obj
+<< 
+/S /Normal 
+/A [ 675 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 124 
+/P 2460 0 R 
+>> 
+endobj
+675 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+676 0 obj
+<< 
+/S /Normal 
+/A [ 677 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 125 
+/P 2463 0 R 
+>> 
+endobj
+677 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+678 0 obj
+<< 
+/S /Normal 
+/A [ 679 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 126 
+/P 2466 0 R 
+>> 
+endobj
+679 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+680 0 obj
+<< 
+/S /Normal 
+/A [ 681 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 127 
+/P 2470 0 R 
+>> 
+endobj
+681 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+682 0 obj
+<< 
+/S /Normal 
+/A [ 683 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 128 
+/P 2473 0 R 
+>> 
+endobj
+683 0 obj
+<< 
+/O /Layout 
+/StartIndent 17.10001 
+/SpaceAfter 3 
+>> 
+endobj
+684 0 obj
+<< 
+/S /Normal 
+/A [ 685 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 129 
+/P 2476 0 R 
+>> 
+endobj
+685 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+686 0 obj
+<< 
+/S /Normal 
+/A [ 687 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 130 
+/P 2479 0 R 
+>> 
+endobj
+687 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+688 0 obj
+<< 
+/S /Normal 
+/A [ 689 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 131 
+/P 2482 0 R 
+>> 
+endobj
+689 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+690 0 obj
+<< 
+/S /Normal 
+/A [ 691 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 132 
+/P 2486 0 R 
+>> 
+endobj
+691 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+692 0 obj
+<< 
+/S /Normal 
+/A [ 693 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 133 
+/P 2489 0 R 
+>> 
+endobj
+693 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+694 0 obj
+<< 
+/S /Normal 
+/A [ 695 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 134 
+/P 2492 0 R 
+>> 
+endobj
+695 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+696 0 obj
+<< 
+/S /Normal 
+/A [ 697 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 135 
+/P 2495 0 R 
+>> 
+endobj
+697 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+698 0 obj
+<< 
+/S /Normal 
+/A [ 699 0 R ] 
+/C /Normal 
+/Pg 12 0 R 
+/K 136 
+/P 2498 0 R 
+>> 
+endobj
+699 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+700 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 12 0 R 
+/K 137 
+/P 1704 0 R 
+>> 
+endobj
+701 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 12 0 R 
+/K 138 
+/P 1704 0 R 
+>> 
+endobj
+702 0 obj
+<< 
+/S /Caption 
+/A [ 703 0 R ] 
+/C /Caption 
+/Pg 15 0 R 
+/K 0 
+/P 1704 0 R 
+>> 
+endobj
+703 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+704 0 obj
+<< 
+/S /Normal 
+/A [ 705 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K [ 706 0 R 23 ] 
+/P 1704 0 R 
+>> 
+endobj
+705 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+706 0 obj
+<< 
+/S /InlineShape 
+/P 704 0 R 
+/Pg 15 0 R 
+/K [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ] 
+/Alt ()
+/A [ 3901 0 R ] 
+>> 
+endobj
+707 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 15 0 R 
+/K 24 
+/P 1704 0 R 
+>> 
+endobj
+708 0 obj
+<< 
+/S /Caption 
+/A [ 709 0 R ] 
+/C /Caption 
+/Pg 15 0 R 
+/K 25 
+/P 1704 0 R 
+>> 
+endobj
+709 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+710 0 obj
+<< 
+/S /Normal 
+/A [ 711 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 26 
+/P 2503 0 R 
+>> 
+endobj
+711 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+712 0 obj
+<< 
+/S /Normal 
+/A [ 713 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 27 
+/P 2506 0 R 
+>> 
+endobj
+713 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+714 0 obj
+<< 
+/S /Normal 
+/A [ 715 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 28 
+/P 2509 0 R 
+>> 
+endobj
+715 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+716 0 obj
+<< 
+/S /Normal 
+/A [ 717 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 29 
+/P 2512 0 R 
+>> 
+endobj
+717 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+718 0 obj
+<< 
+/S /Normal 
+/A [ 719 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 30 
+/P 2515 0 R 
+>> 
+endobj
+719 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+720 0 obj
+<< 
+/S /Normal 
+/A [ 721 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 31 
+/P 2519 0 R 
+>> 
+endobj
+721 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+722 0 obj
+<< 
+/S /Normal 
+/A [ 723 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 32 
+/P 2522 0 R 
+>> 
+endobj
+723 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+724 0 obj
+<< 
+/S /Normal 
+/A [ 725 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 33 
+/P 2525 0 R 
+>> 
+endobj
+725 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+726 0 obj
+<< 
+/S /Normal 
+/A [ 727 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 34 
+/P 2528 0 R 
+>> 
+endobj
+727 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+728 0 obj
+<< 
+/S /Normal 
+/A [ 729 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 35 
+/P 2531 0 R 
+>> 
+endobj
+729 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+730 0 obj
+<< 
+/S /Normal 
+/A [ 731 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 36 
+/P 2535 0 R 
+>> 
+endobj
+731 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+732 0 obj
+<< 
+/S /Normal 
+/A [ 733 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 37 
+/P 2538 0 R 
+>> 
+endobj
+733 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+734 0 obj
+<< 
+/S /Normal 
+/A [ 735 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 38 
+/P 2541 0 R 
+>> 
+endobj
+735 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+736 0 obj
+<< 
+/S /Normal 
+/A [ 737 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 39 
+/P 2544 0 R 
+>> 
+endobj
+737 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+738 0 obj
+<< 
+/S /Normal 
+/A [ 739 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 40 
+/P 2547 0 R 
+>> 
+endobj
+739 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+740 0 obj
+<< 
+/S /Normal 
+/A [ 741 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 41 
+/P 2551 0 R 
+>> 
+endobj
+741 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+742 0 obj
+<< 
+/S /Normal 
+/A [ 743 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 42 
+/P 2554 0 R 
+>> 
+endobj
+743 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+744 0 obj
+<< 
+/S /Normal 
+/A [ 745 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 43 
+/P 2557 0 R 
+>> 
+endobj
+745 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+746 0 obj
+<< 
+/S /Normal 
+/A [ 747 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 44 
+/P 2560 0 R 
+>> 
+endobj
+747 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+748 0 obj
+<< 
+/S /Normal 
+/A [ 749 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 45 
+/P 2563 0 R 
+>> 
+endobj
+749 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+750 0 obj
+<< 
+/S /Normal 
+/A [ 751 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 46 
+/P 2567 0 R 
+>> 
+endobj
+751 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+752 0 obj
+<< 
+/S /Normal 
+/A [ 753 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 47 
+/P 2570 0 R 
+>> 
+endobj
+753 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+754 0 obj
+<< 
+/S /Normal 
+/A [ 755 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 48 
+/P 2573 0 R 
+>> 
+endobj
+755 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+756 0 obj
+<< 
+/S /Normal 
+/A [ 757 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 49 
+/P 2576 0 R 
+>> 
+endobj
+757 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+758 0 obj
+<< 
+/S /Normal 
+/A [ 759 0 R ] 
+/C /Normal 
+/Pg 15 0 R 
+/K 50 
+/P 2579 0 R 
+>> 
+endobj
+759 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+760 0 obj
+<< 
+/S /Heading#202,h2 
+/A [ 761 0 R ] 
+/C /Heading#202,h2 
+/Pg 18 0 R 
+/K 0 
+/P 1704 0 R 
+>> 
+endobj
+761 0 obj
+<< 
+/O /Layout 
+/StartIndent 0 
+/TextIndent 0 
+>> 
+endobj
+762 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 18 0 R 
+/K 1 
+/P 1704 0 R 
+>> 
+endobj
+763 0 obj
+<< 
+/S /Caption 
+/A [ 764 0 R ] 
+/C /Caption 
+/Pg 18 0 R 
+/K 2 
+/P 1704 0 R 
+>> 
+endobj
+764 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+765 0 obj
+<< 
+/S /Normal 
+/A [ 766 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 3 
+/P 2584 0 R 
+>> 
+endobj
+766 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+767 0 obj
+<< 
+/S /Normal 
+/A [ 768 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 4 
+/P 2587 0 R 
+>> 
+endobj
+768 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+769 0 obj
+<< 
+/S /Normal 
+/A [ 770 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K [ 5 6 7 ] 
+/P 2590 0 R 
+>> 
+endobj
+770 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+771 0 obj
+<< 
+/S /Normal 
+/A [ 772 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 8 
+/P 2593 0 R 
+>> 
+endobj
+772 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+773 0 obj
+<< 
+/S /Normal 
+/A [ 774 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 9 
+/P 2596 0 R 
+>> 
+endobj
+774 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+775 0 obj
+<< 
+/S /Normal 
+/A [ 776 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 10 
+/P 2600 0 R 
+>> 
+endobj
+776 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+777 0 obj
+<< 
+/S /Normal 
+/A [ 778 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 11 
+/P 2603 0 R 
+>> 
+endobj
+778 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+779 0 obj
+<< 
+/S /Normal 
+/A [ 780 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 12 
+/P 2606 0 R 
+>> 
+endobj
+780 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+781 0 obj
+<< 
+/S /Normal 
+/A [ 782 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 13 
+/P 2609 0 R 
+>> 
+endobj
+782 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+783 0 obj
+<< 
+/S /Normal 
+/A [ 784 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 14 
+/P 2609 0 R 
+>> 
+endobj
+784 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+785 0 obj
+<< 
+/S /Normal 
+/A [ 786 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 15 
+/P 2612 0 R 
+>> 
+endobj
+786 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+787 0 obj
+<< 
+/S /Normal 
+/A [ 788 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 16 
+/P 2612 0 R 
+>> 
+endobj
+788 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+789 0 obj
+<< 
+/S /Normal 
+/A [ 790 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 17 
+/P 2616 0 R 
+>> 
+endobj
+790 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+791 0 obj
+<< 
+/S /Normal 
+/A [ 792 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 18 
+/P 2619 0 R 
+>> 
+endobj
+792 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+793 0 obj
+<< 
+/S /Normal 
+/A [ 794 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 19 
+/P 2622 0 R 
+>> 
+endobj
+794 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+795 0 obj
+<< 
+/S /Normal 
+/A [ 796 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 20 
+/P 2625 0 R 
+>> 
+endobj
+796 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+797 0 obj
+<< 
+/S /Normal 
+/A [ 798 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 21 
+/P 2628 0 R 
+>> 
+endobj
+798 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+799 0 obj
+<< 
+/S /Normal 
+/A [ 800 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 22 
+/P 2632 0 R 
+>> 
+endobj
+800 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+801 0 obj
+<< 
+/S /Normal 
+/A [ 802 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 23 
+/P 2635 0 R 
+>> 
+endobj
+802 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+803 0 obj
+<< 
+/S /Normal 
+/A [ 804 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 24 
+/P 2638 0 R 
+>> 
+endobj
+804 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+805 0 obj
+<< 
+/S /Normal 
+/A [ 806 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 25 
+/P 2641 0 R 
+>> 
+endobj
+806 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+807 0 obj
+<< 
+/S /Normal 
+/A [ 808 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 26 
+/P 2644 0 R 
+>> 
+endobj
+808 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+809 0 obj
+<< 
+/S /Normal 
+/A [ 810 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 27 
+/P 2648 0 R 
+>> 
+endobj
+810 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+811 0 obj
+<< 
+/S /Normal 
+/A [ 812 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 28 
+/P 2651 0 R 
+>> 
+endobj
+812 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+813 0 obj
+<< 
+/S /Normal 
+/A [ 814 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 29 
+/P 2654 0 R 
+>> 
+endobj
+814 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+815 0 obj
+<< 
+/S /Normal 
+/A [ 816 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 30 
+/P 2657 0 R 
+>> 
+endobj
+816 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+817 0 obj
+<< 
+/S /Normal 
+/A [ 818 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 31 
+/P 2660 0 R 
+>> 
+endobj
+818 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+819 0 obj
+<< 
+/S /Normal 
+/A [ 820 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 32 
+/P 2664 0 R 
+>> 
+endobj
+820 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+821 0 obj
+<< 
+/S /Normal 
+/A [ 822 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 33 
+/P 2667 0 R 
+>> 
+endobj
+822 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+823 0 obj
+<< 
+/S /Normal 
+/A [ 824 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 34 
+/P 2670 0 R 
+>> 
+endobj
+824 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+825 0 obj
+<< 
+/S /Normal 
+/A [ 826 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 35 
+/P 2673 0 R 
+>> 
+endobj
+826 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+827 0 obj
+<< 
+/S /Normal 
+/A [ 828 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 36 
+/P 2676 0 R 
+>> 
+endobj
+828 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+829 0 obj
+<< 
+/S /Normal 
+/A [ 830 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 37 
+/P 2680 0 R 
+>> 
+endobj
+830 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+831 0 obj
+<< 
+/S /Normal 
+/A [ 832 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 38 
+/P 2683 0 R 
+>> 
+endobj
+832 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+833 0 obj
+<< 
+/S /Normal 
+/A [ 834 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 39 
+/P 2686 0 R 
+>> 
+endobj
+834 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+835 0 obj
+<< 
+/S /Normal 
+/A [ 836 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 40 
+/P 2689 0 R 
+>> 
+endobj
+836 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+837 0 obj
+<< 
+/S /Normal 
+/A [ 838 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 41 
+/P 2692 0 R 
+>> 
+endobj
+838 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+839 0 obj
+<< 
+/S /Normal 
+/A [ 840 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 42 
+/P 2696 0 R 
+>> 
+endobj
+840 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+841 0 obj
+<< 
+/S /Normal 
+/A [ 842 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 43 
+/P 2699 0 R 
+>> 
+endobj
+842 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+843 0 obj
+<< 
+/S /Normal 
+/A [ 844 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 44 
+/P 2702 0 R 
+>> 
+endobj
+844 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+845 0 obj
+<< 
+/S /Normal 
+/A [ 846 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 45 
+/P 2705 0 R 
+>> 
+endobj
+846 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+847 0 obj
+<< 
+/S /Normal 
+/A [ 848 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 46 
+/P 2708 0 R 
+>> 
+endobj
+848 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+849 0 obj
+<< 
+/S /Normal 
+/A [ 850 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 47 
+/P 2712 0 R 
+>> 
+endobj
+850 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+851 0 obj
+<< 
+/S /Normal 
+/A [ 852 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 48 
+/P 2715 0 R 
+>> 
+endobj
+852 0 obj
+<< 
+/O /Layout 
+/StartIndent 17.10001 
+/SpaceAfter 3 
+>> 
+endobj
+853 0 obj
+<< 
+/S /Normal 
+/A [ 854 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 49 
+/P 2718 0 R 
+>> 
+endobj
+854 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+855 0 obj
+<< 
+/S /Normal 
+/A [ 856 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 50 
+/P 2721 0 R 
+>> 
+endobj
+856 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+857 0 obj
+<< 
+/S /Normal 
+/A [ 858 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 51 
+/P 2724 0 R 
+>> 
+endobj
+858 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+859 0 obj
+<< 
+/S /Normal 
+/A [ 860 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 52 
+/P 2724 0 R 
+>> 
+endobj
+860 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+861 0 obj
+<< 
+/S /Normal 
+/A [ 862 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 53 
+/P 2728 0 R 
+>> 
+endobj
+862 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+863 0 obj
+<< 
+/S /Normal 
+/A [ 864 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 54 
+/P 2731 0 R 
+>> 
+endobj
+864 0 obj
+<< 
+/O /Layout 
+/StartIndent 17.10001 
+/SpaceAfter 3 
+>> 
+endobj
+865 0 obj
+<< 
+/S /Normal 
+/A [ 866 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 55 
+/P 2734 0 R 
+>> 
+endobj
+866 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+867 0 obj
+<< 
+/S /Normal 
+/A [ 868 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 56 
+/P 2737 0 R 
+>> 
+endobj
+868 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+869 0 obj
+<< 
+/S /Normal 
+/A [ 870 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 57 
+/P 2740 0 R 
+>> 
+endobj
+870 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+871 0 obj
+<< 
+/S /Normal 
+/A [ 872 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 58 
+/P 2744 0 R 
+>> 
+endobj
+872 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+873 0 obj
+<< 
+/S /Normal 
+/A [ 874 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 59 
+/P 2747 0 R 
+>> 
+endobj
+874 0 obj
+<< 
+/O /Layout 
+/StartIndent 17.10001 
+/SpaceAfter 3 
+>> 
+endobj
+875 0 obj
+<< 
+/S /Normal 
+/A [ 876 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 60 
+/P 2750 0 R 
+>> 
+endobj
+876 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+877 0 obj
+<< 
+/S /Normal 
+/A [ 878 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 61 
+/P 2753 0 R 
+>> 
+endobj
+878 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+879 0 obj
+<< 
+/S /Normal 
+/A [ 880 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 62 
+/P 2756 0 R 
+>> 
+endobj
+880 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+881 0 obj
+<< 
+/S /Normal 
+/A [ 882 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 63 
+/P 2760 0 R 
+>> 
+endobj
+882 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+883 0 obj
+<< 
+/S /Normal 
+/A [ 884 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 64 
+/P 2763 0 R 
+>> 
+endobj
+884 0 obj
+<< 
+/O /Layout 
+/StartIndent 17.10001 
+/SpaceAfter 3 
+>> 
+endobj
+885 0 obj
+<< 
+/S /Normal 
+/A [ 886 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 65 
+/P 2766 0 R 
+>> 
+endobj
+886 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+887 0 obj
+<< 
+/S /Normal 
+/A [ 888 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 66 
+/P 2769 0 R 
+>> 
+endobj
+888 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+889 0 obj
+<< 
+/S /Normal 
+/A [ 890 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 67 
+/P 2772 0 R 
+>> 
+endobj
+890 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+891 0 obj
+<< 
+/S /Normal 
+/A [ 892 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 68 
+/P 2776 0 R 
+>> 
+endobj
+892 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+893 0 obj
+<< 
+/S /Normal 
+/A [ 894 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 69 
+/P 2779 0 R 
+>> 
+endobj
+894 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+895 0 obj
+<< 
+/S /Normal 
+/A [ 896 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 70 
+/P 2782 0 R 
+>> 
+endobj
+896 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+897 0 obj
+<< 
+/S /Normal 
+/A [ 898 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 71 
+/P 2785 0 R 
+>> 
+endobj
+898 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+899 0 obj
+<< 
+/S /Normal 
+/A [ 900 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 72 
+/P 2788 0 R 
+>> 
+endobj
+900 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+901 0 obj
+<< 
+/S /Normal 
+/A [ 902 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 73 
+/P 2792 0 R 
+>> 
+endobj
+902 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+903 0 obj
+<< 
+/S /Normal 
+/A [ 904 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 74 
+/P 2795 0 R 
+>> 
+endobj
+904 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+905 0 obj
+<< 
+/S /Normal 
+/A [ 906 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 75 
+/P 2798 0 R 
+>> 
+endobj
+906 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+907 0 obj
+<< 
+/S /Normal 
+/A [ 908 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 76 
+/P 2801 0 R 
+>> 
+endobj
+908 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+909 0 obj
+<< 
+/S /Normal 
+/A [ 910 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 77 
+/P 2804 0 R 
+>> 
+endobj
+910 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+911 0 obj
+<< 
+/S /Normal 
+/A [ 912 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 78 
+/P 2808 0 R 
+>> 
+endobj
+912 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+913 0 obj
+<< 
+/S /Normal 
+/A [ 914 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 79 
+/P 2811 0 R 
+>> 
+endobj
+914 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+915 0 obj
+<< 
+/S /Normal 
+/A [ 916 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 80 
+/P 2814 0 R 
+>> 
+endobj
+916 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+917 0 obj
+<< 
+/S /Normal 
+/A [ 918 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 81 
+/P 2817 0 R 
+>> 
+endobj
+918 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+919 0 obj
+<< 
+/S /Normal 
+/A [ 920 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 82 
+/P 2820 0 R 
+>> 
+endobj
+920 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+921 0 obj
+<< 
+/S /Normal 
+/A [ 922 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 83 
+/P 2824 0 R 
+>> 
+endobj
+922 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+923 0 obj
+<< 
+/S /Normal 
+/A [ 924 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 84 
+/P 2827 0 R 
+>> 
+endobj
+924 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+925 0 obj
+<< 
+/S /Normal 
+/A [ 926 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 85 
+/P 2830 0 R 
+>> 
+endobj
+926 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+927 0 obj
+<< 
+/S /Normal 
+/A [ 928 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 86 
+/P 2833 0 R 
+>> 
+endobj
+928 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+929 0 obj
+<< 
+/S /Normal 
+/A [ 930 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 87 
+/P 2836 0 R 
+>> 
+endobj
+930 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+931 0 obj
+<< 
+/S /Normal 
+/A [ 932 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 88 
+/P 2840 0 R 
+>> 
+endobj
+932 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+933 0 obj
+<< 
+/S /Normal 
+/A [ 934 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 89 
+/P 2843 0 R 
+>> 
+endobj
+934 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+935 0 obj
+<< 
+/S /Normal 
+/A [ 936 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 90 
+/P 2846 0 R 
+>> 
+endobj
+936 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+937 0 obj
+<< 
+/S /Normal 
+/A [ 938 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 91 
+/P 2849 0 R 
+>> 
+endobj
+938 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+939 0 obj
+<< 
+/S /Normal 
+/A [ 940 0 R ] 
+/C /Normal 
+/Pg 18 0 R 
+/K 92 
+/P 2852 0 R 
+>> 
+endobj
+940 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+941 0 obj
+<< 
+/S /Heading#202,h2 
+/A [ 942 0 R ] 
+/C /Heading#202,h2 
+/Pg 18 0 R 
+/K 93 
+/P 1704 0 R 
+>> 
+endobj
+942 0 obj
+<< 
+/O /Layout 
+/StartIndent 0 
+/TextIndent 0 
+>> 
+endobj
+943 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 21 0 R 
+/K 0 
+/P 3778 0 R 
+>> 
+endobj
+944 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 21 0 R 
+/K 1 
+/P 1704 0 R 
+>> 
+endobj
+945 0 obj
+<< 
+/S /Caption 
+/A [ 946 0 R ] 
+/C /Caption 
+/Pg 21 0 R 
+/K 2 
+/P 1704 0 R 
+>> 
+endobj
+946 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+947 0 obj
+<< 
+/S /Normal 
+/A [ 948 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 3 
+/P 2857 0 R 
+>> 
+endobj
+948 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+949 0 obj
+<< 
+/S /Normal 
+/A [ 950 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 4 
+/P 2860 0 R 
+>> 
+endobj
+950 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+951 0 obj
+<< 
+/S /Normal 
+/A [ 952 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K [ 5 6 7 ] 
+/P 2863 0 R 
+>> 
+endobj
+952 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+953 0 obj
+<< 
+/S /Normal 
+/A [ 954 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 8 
+/P 2866 0 R 
+>> 
+endobj
+954 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+955 0 obj
+<< 
+/S /Normal 
+/A [ 956 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 9 
+/P 2869 0 R 
+>> 
+endobj
+956 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+957 0 obj
+<< 
+/S /Normal 
+/A [ 958 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 10 
+/P 2873 0 R 
+>> 
+endobj
+958 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+959 0 obj
+<< 
+/S /Normal 
+/A [ 960 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 11 
+/P 2876 0 R 
+>> 
+endobj
+960 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+961 0 obj
+<< 
+/S /Normal 
+/A [ 962 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 12 
+/P 2879 0 R 
+>> 
+endobj
+962 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+963 0 obj
+<< 
+/S /Normal 
+/A [ 964 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 13 
+/P 2882 0 R 
+>> 
+endobj
+964 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+965 0 obj
+<< 
+/S /Normal 
+/A [ 966 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 14 
+/P 2885 0 R 
+>> 
+endobj
+966 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+967 0 obj
+<< 
+/S /Normal 
+/A [ 968 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 15 
+/P 2889 0 R 
+>> 
+endobj
+968 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+969 0 obj
+<< 
+/S /Normal 
+/A [ 970 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 16 
+/P 2892 0 R 
+>> 
+endobj
+970 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+971 0 obj
+<< 
+/S /Normal 
+/A [ 972 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 17 
+/P 2895 0 R 
+>> 
+endobj
+972 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+973 0 obj
+<< 
+/S /Normal 
+/A [ 974 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 18 
+/P 2898 0 R 
+>> 
+endobj
+974 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+975 0 obj
+<< 
+/S /Normal 
+/A [ 976 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 19 
+/P 2901 0 R 
+>> 
+endobj
+976 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+977 0 obj
+<< 
+/S /Normal 
+/A [ 978 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 20 
+/P 2905 0 R 
+>> 
+endobj
+978 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+979 0 obj
+<< 
+/S /Normal 
+/A [ 980 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 21 
+/P 2908 0 R 
+>> 
+endobj
+980 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+981 0 obj
+<< 
+/S /Normal 
+/A [ 982 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 22 
+/P 2911 0 R 
+>> 
+endobj
+982 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+983 0 obj
+<< 
+/S /Normal 
+/A [ 984 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 23 
+/P 2914 0 R 
+>> 
+endobj
+984 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+985 0 obj
+<< 
+/S /Normal 
+/A [ 986 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 24 
+/P 2917 0 R 
+>> 
+endobj
+986 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+987 0 obj
+<< 
+/S /Normal 
+/A [ 988 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 25 
+/P 2921 0 R 
+>> 
+endobj
+988 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+989 0 obj
+<< 
+/S /Normal 
+/A [ 990 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 26 
+/P 2924 0 R 
+>> 
+endobj
+990 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+991 0 obj
+<< 
+/S /Normal 
+/A [ 992 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 27 
+/P 2927 0 R 
+>> 
+endobj
+992 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+993 0 obj
+<< 
+/S /Normal 
+/A [ 994 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 28 
+/P 2930 0 R 
+>> 
+endobj
+994 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+995 0 obj
+<< 
+/S /Normal 
+/A [ 996 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 29 
+/P 2933 0 R 
+>> 
+endobj
+996 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+997 0 obj
+<< 
+/S /Normal 
+/A [ 998 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 30 
+/P 2937 0 R 
+>> 
+endobj
+998 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+999 0 obj
+<< 
+/S /Normal 
+/A [ 1000 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 31 
+/P 2940 0 R 
+>> 
+endobj
+1000 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1001 0 obj
+<< 
+/S /Normal 
+/A [ 1002 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 32 
+/P 2943 0 R 
+>> 
+endobj
+1002 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+1003 0 obj
+<< 
+/S /Normal 
+/A [ 1004 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 33 
+/P 2946 0 R 
+>> 
+endobj
+1004 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1005 0 obj
+<< 
+/S /Normal 
+/A [ 1006 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 34 
+/P 2949 0 R 
+>> 
+endobj
+1006 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1007 0 obj
+<< 
+/S /Normal 
+/A [ 1008 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 35 
+/P 2953 0 R 
+>> 
+endobj
+1008 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1009 0 obj
+<< 
+/S /Normal 
+/A [ 1010 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 36 
+/P 2956 0 R 
+>> 
+endobj
+1010 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1011 0 obj
+<< 
+/S /Normal 
+/A [ 1012 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 37 
+/P 2959 0 R 
+>> 
+endobj
+1012 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+1013 0 obj
+<< 
+/S /Normal 
+/A [ 1014 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 38 
+/P 2962 0 R 
+>> 
+endobj
+1014 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1015 0 obj
+<< 
+/S /Normal 
+/A [ 1016 0 R ] 
+/C /Normal 
+/Pg 21 0 R 
+/K 39 
+/P 2965 0 R 
+>> 
+endobj
+1016 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1017 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 21 0 R 
+/K 40 
+/P 1704 0 R 
+>> 
+endobj
+1018 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 21 0 R 
+/K 41 
+/P 1704 0 R 
+>> 
+endobj
+1019 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 21 0 R 
+/K 42 
+/P 3780 0 R 
+>> 
+endobj
+1020 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 21 0 R 
+/K 43 
+/P 1704 0 R 
+>> 
+endobj
+1021 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 21 0 R 
+/K 44 
+/P 1704 0 R 
+>> 
+endobj
+1022 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 21 0 R 
+/K 45 
+/P 1704 0 R 
+>> 
+endobj
+1023 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 21 0 R 
+/K 46 
+/P 1704 0 R 
+>> 
+endobj
+1024 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 21 0 R 
+/K 47 
+/P 1704 0 R 
+>> 
+endobj
+1025 0 obj
+<< 
+/S /Caption 
+/A [ 1026 0 R ] 
+/C /Caption 
+/Pg 25 0 R 
+/K 0 
+/P 1704 0 R 
+>> 
+endobj
+1026 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+1027 0 obj
+<< 
+/S /Normal 
+/A [ 1028 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 1 
+/P 2970 0 R 
+>> 
+endobj
+1028 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1029 0 obj
+<< 
+/S /Normal 
+/A [ 1030 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 2 
+/P 2973 0 R 
+>> 
+endobj
+1030 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1031 0 obj
+<< 
+/S /Normal 
+/A [ 1032 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 3 
+/P 2976 0 R 
+>> 
+endobj
+1032 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1033 0 obj
+<< 
+/S /Normal 
+/A [ 1034 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 4 
+/P 2979 0 R 
+>> 
+endobj
+1034 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1035 0 obj
+<< 
+/S /Normal 
+/A [ 1036 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 5 
+/P 2982 0 R 
+>> 
+endobj
+1036 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1037 0 obj
+<< 
+/S /Normal 
+/A [ 1038 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 6 
+/P 2986 0 R 
+>> 
+endobj
+1038 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1039 0 obj
+<< 
+/S /Normal 
+/A [ 1040 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 7 
+/P 2989 0 R 
+>> 
+endobj
+1040 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1041 0 obj
+<< 
+/S /Normal 
+/A [ 1042 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 8 
+/P 2992 0 R 
+>> 
+endobj
+1042 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1043 0 obj
+<< 
+/S /Normal 
+/A [ 1044 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 9 
+/P 2995 0 R 
+>> 
+endobj
+1044 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1045 0 obj
+<< 
+/S /Normal 
+/A [ 1046 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 10 
+/P 2998 0 R 
+>> 
+endobj
+1046 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1047 0 obj
+<< 
+/S /Normal 
+/A [ 1048 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 11 
+/P 3002 0 R 
+>> 
+endobj
+1048 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1049 0 obj
+<< 
+/S /Normal 
+/A [ 1050 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 12 
+/P 3005 0 R 
+>> 
+endobj
+1050 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1051 0 obj
+<< 
+/S /Normal 
+/A [ 1052 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 13 
+/P 3008 0 R 
+>> 
+endobj
+1052 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1053 0 obj
+<< 
+/S /Normal 
+/A [ 1054 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 14 
+/P 3011 0 R 
+>> 
+endobj
+1054 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1055 0 obj
+<< 
+/S /Normal 
+/A [ 1056 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 15 
+/P 3014 0 R 
+>> 
+endobj
+1056 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1057 0 obj
+<< 
+/S /Normal 
+/A [ 1058 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 16 
+/P 3018 0 R 
+>> 
+endobj
+1058 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1059 0 obj
+<< 
+/S /Normal 
+/A [ 1060 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 17 
+/P 3021 0 R 
+>> 
+endobj
+1060 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1061 0 obj
+<< 
+/S /Normal 
+/A [ 1062 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 18 
+/P 3024 0 R 
+>> 
+endobj
+1062 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1063 0 obj
+<< 
+/S /Normal 
+/A [ 1064 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 19 
+/P 3027 0 R 
+>> 
+endobj
+1064 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1065 0 obj
+<< 
+/S /Normal 
+/A [ 1066 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 20 
+/P 3030 0 R 
+>> 
+endobj
+1066 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1067 0 obj
+<< 
+/S /Normal 
+/A [ 1068 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 21 
+/P 3034 0 R 
+>> 
+endobj
+1068 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1069 0 obj
+<< 
+/S /Normal 
+/A [ 1070 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 22 
+/P 3037 0 R 
+>> 
+endobj
+1070 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1071 0 obj
+<< 
+/S /Normal 
+/A [ 1072 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 23 
+/P 3040 0 R 
+>> 
+endobj
+1072 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1073 0 obj
+<< 
+/S /Normal 
+/A [ 1074 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 24 
+/P 3043 0 R 
+>> 
+endobj
+1074 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1075 0 obj
+<< 
+/S /Normal 
+/A [ 1076 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 25 
+/P 3046 0 R 
+>> 
+endobj
+1076 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1077 0 obj
+<< 
+/S /Normal 
+/A [ 1078 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 26 
+/P 3050 0 R 
+>> 
+endobj
+1078 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1079 0 obj
+<< 
+/S /Normal 
+/A [ 1080 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 27 
+/P 3053 0 R 
+>> 
+endobj
+1080 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1081 0 obj
+<< 
+/S /Normal 
+/A [ 1082 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 28 
+/P 3056 0 R 
+>> 
+endobj
+1082 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1083 0 obj
+<< 
+/S /Normal 
+/A [ 1084 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 29 
+/P 3059 0 R 
+>> 
+endobj
+1084 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1085 0 obj
+<< 
+/S /Normal 
+/A [ 1086 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 30 
+/P 3062 0 R 
+>> 
+endobj
+1086 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1087 0 obj
+<< 
+/S /Normal 
+/A [ 1088 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 31 
+/P 3066 0 R 
+>> 
+endobj
+1088 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1089 0 obj
+<< 
+/S /Normal 
+/A [ 1090 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 32 
+/P 3069 0 R 
+>> 
+endobj
+1090 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1091 0 obj
+<< 
+/S /Normal 
+/A [ 1092 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 33 
+/P 3072 0 R 
+>> 
+endobj
+1092 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1093 0 obj
+<< 
+/S /Normal 
+/A [ 1094 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 34 
+/P 3075 0 R 
+>> 
+endobj
+1094 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1095 0 obj
+<< 
+/S /Normal 
+/A [ 1096 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 35 
+/P 3078 0 R 
+>> 
+endobj
+1096 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1097 0 obj
+<< 
+/S /Normal 
+/A [ 1098 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 36 
+/P 3082 0 R 
+>> 
+endobj
+1098 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1099 0 obj
+<< 
+/S /Normal 
+/A [ 1100 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 37 
+/P 3085 0 R 
+>> 
+endobj
+1100 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1101 0 obj
+<< 
+/S /Normal 
+/A [ 1102 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 38 
+/P 3088 0 R 
+>> 
+endobj
+1102 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1103 0 obj
+<< 
+/S /Normal 
+/A [ 1104 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 39 
+/P 3091 0 R 
+>> 
+endobj
+1104 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1105 0 obj
+<< 
+/S /Normal 
+/A [ 1106 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 40 
+/P 3094 0 R 
+>> 
+endobj
+1106 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1107 0 obj
+<< 
+/S /Normal 
+/A [ 1108 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 41 
+/P 3098 0 R 
+>> 
+endobj
+1108 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1109 0 obj
+<< 
+/S /Normal 
+/A [ 1110 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 42 
+/P 3101 0 R 
+>> 
+endobj
+1110 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1111 0 obj
+<< 
+/S /Normal 
+/A [ 1112 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 43 
+/P 3104 0 R 
+>> 
+endobj
+1112 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1113 0 obj
+<< 
+/S /Normal 
+/A [ 1114 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 44 
+/P 3107 0 R 
+>> 
+endobj
+1114 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1115 0 obj
+<< 
+/S /Normal 
+/A [ 1116 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 45 
+/P 3110 0 R 
+>> 
+endobj
+1116 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1117 0 obj
+<< 
+/S /Normal 
+/A [ 1118 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 46 
+/P 3114 0 R 
+>> 
+endobj
+1118 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1119 0 obj
+<< 
+/S /Normal 
+/A [ 1120 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 47 
+/P 3117 0 R 
+>> 
+endobj
+1120 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1121 0 obj
+<< 
+/S /Normal 
+/A [ 1122 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 48 
+/P 3120 0 R 
+>> 
+endobj
+1122 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1123 0 obj
+<< 
+/S /Normal 
+/A [ 1124 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 49 
+/P 3123 0 R 
+>> 
+endobj
+1124 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1125 0 obj
+<< 
+/S /Normal 
+/A [ 1126 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 50 
+/P 3126 0 R 
+>> 
+endobj
+1126 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1127 0 obj
+<< 
+/S /Normal 
+/A [ 1128 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 51 
+/P 3130 0 R 
+>> 
+endobj
+1128 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1129 0 obj
+<< 
+/S /Normal 
+/A [ 1130 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 52 
+/P 3133 0 R 
+>> 
+endobj
+1130 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1131 0 obj
+<< 
+/S /Normal 
+/A [ 1132 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 53 
+/P 3136 0 R 
+>> 
+endobj
+1132 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1133 0 obj
+<< 
+/S /Normal 
+/A [ 1134 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 54 
+/P 3139 0 R 
+>> 
+endobj
+1134 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1135 0 obj
+<< 
+/S /Normal 
+/A [ 1136 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 55 
+/P 3142 0 R 
+>> 
+endobj
+1136 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1137 0 obj
+<< 
+/S /Normal 
+/A [ 1138 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K [ 56 1139 0 R 58 ] 
+/P 3146 0 R 
+>> 
+endobj
+1138 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1139 0 obj
+<< 
+/S /Superscript 
+/P 1137 0 R 
+/A 3905 0 R 
+/Pg 25 0 R 
+/K 57 
+>> 
+endobj
+1140 0 obj
+<< 
+/S /Normal 
+/A [ 1141 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 59 
+/P 3149 0 R 
+>> 
+endobj
+1141 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1142 0 obj
+<< 
+/S /Normal 
+/A [ 1143 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 60 
+/P 3152 0 R 
+>> 
+endobj
+1143 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1144 0 obj
+<< 
+/S /Normal 
+/A [ 1145 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 61 
+/P 3155 0 R 
+>> 
+endobj
+1145 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1146 0 obj
+<< 
+/S /Normal 
+/A [ 1147 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 62 
+/P 3158 0 R 
+>> 
+endobj
+1147 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1148 0 obj
+<< 
+/S /Normal 
+/A [ 1149 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K [ 63 1150 0 R 65 ] 
+/P 3162 0 R 
+>> 
+endobj
+1149 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1150 0 obj
+<< 
+/S /Superscript 
+/P 1148 0 R 
+/A 3906 0 R 
+/Pg 25 0 R 
+/K 64 
+>> 
+endobj
+1151 0 obj
+<< 
+/S /Normal 
+/A [ 1152 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 66 
+/P 3165 0 R 
+>> 
+endobj
+1152 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1153 0 obj
+<< 
+/S /Normal 
+/A [ 1154 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 67 
+/P 3168 0 R 
+>> 
+endobj
+1154 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1155 0 obj
+<< 
+/S /Normal 
+/A [ 1156 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 68 
+/P 3171 0 R 
+>> 
+endobj
+1156 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1157 0 obj
+<< 
+/S /Normal 
+/A [ 1158 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 69 
+/P 3174 0 R 
+>> 
+endobj
+1158 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1159 0 obj
+<< 
+/S /Normal 
+/A [ 1160 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K [ 70 1161 0 R 72 ] 
+/P 3178 0 R 
+>> 
+endobj
+1160 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1161 0 obj
+<< 
+/S /Superscript 
+/P 1159 0 R 
+/A 3907 0 R 
+/Pg 25 0 R 
+/K 71 
+>> 
+endobj
+1162 0 obj
+<< 
+/S /Normal 
+/A [ 1163 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 73 
+/P 3181 0 R 
+>> 
+endobj
+1163 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1164 0 obj
+<< 
+/S /Normal 
+/A [ 1165 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 74 
+/P 3184 0 R 
+>> 
+endobj
+1165 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1166 0 obj
+<< 
+/S /Normal 
+/A [ 1167 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 75 
+/P 3187 0 R 
+>> 
+endobj
+1167 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1168 0 obj
+<< 
+/S /Normal 
+/A [ 1169 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 76 
+/P 3190 0 R 
+>> 
+endobj
+1169 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1170 0 obj
+<< 
+/S /Normal 
+/A [ 1171 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 77 
+/P 3190 0 R 
+>> 
+endobj
+1171 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1172 0 obj
+<< 
+/S /Normal 
+/A [ 1173 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 78 
+/P 3190 0 R 
+>> 
+endobj
+1173 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1174 0 obj
+<< 
+/S /Normal 
+/A [ 1175 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K [ 79 1176 0 R ] 
+/P 3194 0 R 
+>> 
+endobj
+1175 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1176 0 obj
+<< 
+/S /Superscript 
+/P 1174 0 R 
+/A 3908 0 R 
+/Pg 25 0 R 
+/K 80 
+>> 
+endobj
+1177 0 obj
+<< 
+/S /Normal 
+/A [ 1178 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 81 
+/P 3197 0 R 
+>> 
+endobj
+1178 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1179 0 obj
+<< 
+/S /Normal 
+/A [ 1180 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 82 
+/P 3200 0 R 
+>> 
+endobj
+1180 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1181 0 obj
+<< 
+/S /Normal 
+/A [ 1182 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 83 
+/P 3203 0 R 
+>> 
+endobj
+1182 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1183 0 obj
+<< 
+/S /Normal 
+/A [ 1184 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 84 
+/P 3206 0 R 
+>> 
+endobj
+1184 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1185 0 obj
+<< 
+/S /Normal 
+/A [ 1186 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 85 
+/P 3210 0 R 
+>> 
+endobj
+1186 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1187 0 obj
+<< 
+/S /Normal 
+/A [ 1188 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 86 
+/P 3213 0 R 
+>> 
+endobj
+1188 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1189 0 obj
+<< 
+/S /Normal 
+/A [ 1190 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 87 
+/P 3216 0 R 
+>> 
+endobj
+1190 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1191 0 obj
+<< 
+/S /Normal 
+/A [ 1192 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 88 
+/P 3219 0 R 
+>> 
+endobj
+1192 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1193 0 obj
+<< 
+/S /Normal 
+/A [ 1194 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 89 
+/P 3222 0 R 
+>> 
+endobj
+1194 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1195 0 obj
+<< 
+/S /Normal 
+/A [ 1196 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 90 
+/P 3226 0 R 
+>> 
+endobj
+1196 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1197 0 obj
+<< 
+/S /Normal 
+/A [ 1198 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 91 
+/P 3229 0 R 
+>> 
+endobj
+1198 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1199 0 obj
+<< 
+/S /Normal 
+/A [ 1200 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 92 
+/P 3232 0 R 
+>> 
+endobj
+1200 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1201 0 obj
+<< 
+/S /Normal 
+/A [ 1202 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 93 
+/P 3235 0 R 
+>> 
+endobj
+1202 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1203 0 obj
+<< 
+/S /Normal 
+/A [ 1204 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 94 
+/P 3238 0 R 
+>> 
+endobj
+1204 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1205 0 obj
+<< 
+/S /Normal 
+/A [ 1206 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 95 
+/P 3242 0 R 
+>> 
+endobj
+1206 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1207 0 obj
+<< 
+/S /Normal 
+/A [ 1208 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 96 
+/P 3245 0 R 
+>> 
+endobj
+1208 0 obj
+<< 
+/O /Layout 
+/StartIndent 14.39999 
+/SpaceAfter 3 
+>> 
+endobj
+1209 0 obj
+<< 
+/S /Normal 
+/A [ 1210 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 97 
+/P 3248 0 R 
+>> 
+endobj
+1210 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1211 0 obj
+<< 
+/S /Normal 
+/A [ 1212 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 98 
+/P 3251 0 R 
+>> 
+endobj
+1212 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1213 0 obj
+<< 
+/S /Normal 
+/A [ 1214 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 99 
+/P 3254 0 R 
+>> 
+endobj
+1214 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1215 0 obj
+<< 
+/S /Normal 
+/A [ 1216 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 100 
+/P 3258 0 R 
+>> 
+endobj
+1216 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1217 0 obj
+<< 
+/S /Normal 
+/A [ 1218 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 101 
+/P 3261 0 R 
+>> 
+endobj
+1218 0 obj
+<< 
+/O /Layout 
+/StartIndent 14.39999 
+/SpaceAfter 3 
+>> 
+endobj
+1219 0 obj
+<< 
+/S /Normal 
+/A [ 1220 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 102 
+/P 3264 0 R 
+>> 
+endobj
+1220 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1221 0 obj
+<< 
+/S /Normal 
+/A [ 1222 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 103 
+/P 3267 0 R 
+>> 
+endobj
+1222 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1223 0 obj
+<< 
+/S /Normal 
+/A [ 1224 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 104 
+/P 3270 0 R 
+>> 
+endobj
+1224 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1225 0 obj
+<< 
+/S /Normal 
+/A [ 1226 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 105 
+/P 3274 0 R 
+>> 
+endobj
+1226 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1227 0 obj
+<< 
+/S /Normal 
+/A [ 1228 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 106 
+/P 3277 0 R 
+>> 
+endobj
+1228 0 obj
+<< 
+/O /Layout 
+/StartIndent 14.39999 
+/SpaceAfter 3 
+>> 
+endobj
+1229 0 obj
+<< 
+/S /Normal 
+/A [ 1230 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 107 
+/P 3280 0 R 
+>> 
+endobj
+1230 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1231 0 obj
+<< 
+/S /Normal 
+/A [ 1232 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 108 
+/P 3283 0 R 
+>> 
+endobj
+1232 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1233 0 obj
+<< 
+/S /Normal 
+/A [ 1234 0 R ] 
+/C /Normal 
+/Pg 25 0 R 
+/K 109 
+/P 3286 0 R 
+>> 
+endobj
+1234 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1235 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 25 0 R 
+/K 110 
+/P 1704 0 R 
+>> 
+endobj
+1236 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 25 0 R 
+/P 1704 0 R 
+/K [ 111 << /Type /MCR /Pg 28 0 R /MCID 0 >> ] 
+>> 
+endobj
+1237 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 28 0 R 
+/K 1 
+/P 1704 0 R 
+>> 
+endobj
+1238 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 28 0 R 
+/K 2 
+/P 1704 0 R 
+>> 
+endobj
+1239 0 obj
+<< 
+/S /Caption 
+/A [ 1240 0 R ] 
+/C /Caption 
+/Pg 28 0 R 
+/K 3 
+/P 1704 0 R 
+>> 
+endobj
+1240 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+1241 0 obj
+<< 
+/S /Normal 
+/A [ 1242 0 R ] 
+/C /Normal 
+/Pg 28 0 R 
+/K [ 1243 0 R 17 ] 
+/P 1704 0 R 
+>> 
+endobj
+1242 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+1243 0 obj
+<< 
+/S /InlineShape 
+/Pg 28 0 R 
+/P 1241 0 R 
+/K [ 4 5 6 7 8 9 10 11 12 13 14 15 16 ] 
+/Alt ()
+/A [ 3910 0 R ] 
+>> 
+endobj
+1244 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 28 0 R 
+/K 18 
+/P 1704 0 R 
+>> 
+endobj
+1245 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 31 0 R 
+/K 0 
+/P 3782 0 R 
+>> 
+endobj
+1246 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 31 0 R 
+/K 1 
+/P 1704 0 R 
+>> 
+endobj
+1247 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 31 0 R 
+/K 2 
+/P 1704 0 R 
+>> 
+endobj
+1248 0 obj
+<< 
+/S /Caption 
+/A [ 1249 0 R ] 
+/C /Caption 
+/Pg 31 0 R 
+/K 3 
+/P 1704 0 R 
+>> 
+endobj
+1249 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+1250 0 obj
+<< 
+/S /Normal 
+/A [ 1251 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 4 
+/P 3291 0 R 
+>> 
+endobj
+1251 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1252 0 obj
+<< 
+/S /Normal 
+/A [ 1253 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 5 
+/P 3294 0 R 
+>> 
+endobj
+1253 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1254 0 obj
+<< 
+/S /Normal 
+/A [ 1255 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 6 
+/P 3297 0 R 
+>> 
+endobj
+1255 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1256 0 obj
+<< 
+/S /Normal 
+/A [ 1257 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 7 
+/P 3300 0 R 
+>> 
+endobj
+1257 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1258 0 obj
+<< 
+/S /Normal 
+/A [ 1259 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 8 
+/P 3303 0 R 
+>> 
+endobj
+1259 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1260 0 obj
+<< 
+/S /Normal 
+/A [ 1261 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 9 
+/P 3307 0 R 
+>> 
+endobj
+1261 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1262 0 obj
+<< 
+/S /Normal 
+/A [ 1263 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 10 
+/P 3310 0 R 
+>> 
+endobj
+1263 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1264 0 obj
+<< 
+/S /Normal 
+/A [ 1265 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 11 
+/P 3313 0 R 
+>> 
+endobj
+1265 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1266 0 obj
+<< 
+/S /Normal 
+/A [ 1267 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 12 
+/P 3316 0 R 
+>> 
+endobj
+1267 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1268 0 obj
+<< 
+/S /Normal 
+/A [ 1269 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 13 
+/P 3319 0 R 
+>> 
+endobj
+1269 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1270 0 obj
+<< 
+/S /Normal 
+/A [ 1271 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 14 
+/P 3323 0 R 
+>> 
+endobj
+1271 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1272 0 obj
+<< 
+/S /Normal 
+/A [ 1273 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 15 
+/P 3326 0 R 
+>> 
+endobj
+1273 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1274 0 obj
+<< 
+/S /Normal 
+/A [ 1275 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 16 
+/P 3329 0 R 
+>> 
+endobj
+1275 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1276 0 obj
+<< 
+/S /Normal 
+/A [ 1277 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 17 
+/P 3332 0 R 
+>> 
+endobj
+1277 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1278 0 obj
+<< 
+/S /Normal 
+/A [ 1279 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 18 
+/P 3335 0 R 
+>> 
+endobj
+1279 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1280 0 obj
+<< 
+/S /Normal 
+/A [ 1281 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 19 
+/P 3339 0 R 
+>> 
+endobj
+1281 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1282 0 obj
+<< 
+/S /Normal 
+/A [ 1283 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 20 
+/P 3342 0 R 
+>> 
+endobj
+1283 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1284 0 obj
+<< 
+/S /Normal 
+/A [ 1285 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 21 
+/P 3345 0 R 
+>> 
+endobj
+1285 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1286 0 obj
+<< 
+/S /Normal 
+/A [ 1287 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 22 
+/P 3348 0 R 
+>> 
+endobj
+1287 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1288 0 obj
+<< 
+/S /Normal 
+/A [ 1289 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 23 
+/P 3351 0 R 
+>> 
+endobj
+1289 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1290 0 obj
+<< 
+/S /Normal 
+/A [ 1291 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 24 
+/P 3355 0 R 
+>> 
+endobj
+1291 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1292 0 obj
+<< 
+/S /Normal 
+/A [ 1293 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 25 
+/P 3358 0 R 
+>> 
+endobj
+1293 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1294 0 obj
+<< 
+/S /Normal 
+/A [ 1295 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 26 
+/P 3361 0 R 
+>> 
+endobj
+1295 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1296 0 obj
+<< 
+/S /Normal 
+/A [ 1297 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 27 
+/P 3364 0 R 
+>> 
+endobj
+1297 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1298 0 obj
+<< 
+/S /Normal 
+/A [ 1299 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 28 
+/P 3364 0 R 
+>> 
+endobj
+1299 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1300 0 obj
+<< 
+/S /Normal 
+/A [ 1301 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 29 
+/P 3367 0 R 
+>> 
+endobj
+1301 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1302 0 obj
+<< 
+/S /Normal 
+/A [ 1303 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 30 
+/P 3371 0 R 
+>> 
+endobj
+1303 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1304 0 obj
+<< 
+/S /Normal 
+/A [ 1305 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 31 
+/P 3374 0 R 
+>> 
+endobj
+1305 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1306 0 obj
+<< 
+/S /Normal 
+/A [ 1307 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 32 
+/P 3377 0 R 
+>> 
+endobj
+1307 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1308 0 obj
+<< 
+/S /Normal 
+/A [ 1309 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 33 
+/P 3380 0 R 
+>> 
+endobj
+1309 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1310 0 obj
+<< 
+/S /Normal 
+/A [ 1311 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 34 
+/P 3383 0 R 
+>> 
+endobj
+1311 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1312 0 obj
+<< 
+/S /Normal 
+/A [ 1313 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 35 
+/P 3387 0 R 
+>> 
+endobj
+1313 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1314 0 obj
+<< 
+/S /Normal 
+/A [ 1315 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 36 
+/P 3390 0 R 
+>> 
+endobj
+1315 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1316 0 obj
+<< 
+/S /Normal 
+/A [ 1317 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 37 
+/P 3393 0 R 
+>> 
+endobj
+1317 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1318 0 obj
+<< 
+/S /Normal 
+/A [ 1319 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 38 
+/P 3396 0 R 
+>> 
+endobj
+1319 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1320 0 obj
+<< 
+/S /Normal 
+/A [ 1321 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 39 
+/P 3399 0 R 
+>> 
+endobj
+1321 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1322 0 obj
+<< 
+/S /Normal 
+/A [ 1323 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 40 
+/P 3403 0 R 
+>> 
+endobj
+1323 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1324 0 obj
+<< 
+/S /Normal 
+/A [ 1325 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 41 
+/P 3406 0 R 
+>> 
+endobj
+1325 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1326 0 obj
+<< 
+/S /Normal 
+/A [ 1327 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 42 
+/P 3409 0 R 
+>> 
+endobj
+1327 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1328 0 obj
+<< 
+/S /Normal 
+/A [ 1329 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 43 
+/P 3412 0 R 
+>> 
+endobj
+1329 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1330 0 obj
+<< 
+/S /Normal 
+/A [ 1331 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 44 
+/P 3415 0 R 
+>> 
+endobj
+1331 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1332 0 obj
+<< 
+/S /Normal 
+/A [ 1333 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 45 
+/P 3419 0 R 
+>> 
+endobj
+1333 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1334 0 obj
+<< 
+/S /Normal 
+/A [ 1335 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 46 
+/P 3422 0 R 
+>> 
+endobj
+1335 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1336 0 obj
+<< 
+/S /Normal 
+/A [ 1337 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 47 
+/P 3425 0 R 
+>> 
+endobj
+1337 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1338 0 obj
+<< 
+/S /Normal 
+/A [ 1339 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 48 
+/P 3428 0 R 
+>> 
+endobj
+1339 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1340 0 obj
+<< 
+/S /Normal 
+/A [ 1341 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 49 
+/P 3431 0 R 
+>> 
+endobj
+1341 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1342 0 obj
+<< 
+/S /Normal 
+/A [ 1343 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 50 
+/P 3435 0 R 
+>> 
+endobj
+1343 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1344 0 obj
+<< 
+/S /Normal 
+/A [ 1345 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 51 
+/P 3438 0 R 
+>> 
+endobj
+1345 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1346 0 obj
+<< 
+/S /Normal 
+/A [ 1347 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 52 
+/P 3441 0 R 
+>> 
+endobj
+1347 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1348 0 obj
+<< 
+/S /Normal 
+/A [ 1349 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 53 
+/P 3444 0 R 
+>> 
+endobj
+1349 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1350 0 obj
+<< 
+/S /Normal 
+/A [ 1351 0 R ] 
+/C /Normal 
+/Pg 31 0 R 
+/K 54 
+/P 3447 0 R 
+>> 
+endobj
+1351 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1352 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 31 0 R 
+/K 55 
+/P 1704 0 R 
+>> 
+endobj
+1353 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 31 0 R 
+/K 56 
+/P 1704 0 R 
+>> 
+endobj
+1354 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 31 0 R 
+/K 57 
+/P 3784 0 R 
+>> 
+endobj
+1355 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 31 0 R 
+/K 58 
+/P 1704 0 R 
+>> 
+endobj
+1356 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 31 0 R 
+/K 59 
+/P 1704 0 R 
+>> 
+endobj
+1357 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 31 0 R 
+/K 60 
+/P 1704 0 R 
+>> 
+endobj
+1358 0 obj
+<< 
+/S /Caption 
+/A [ 1359 0 R ] 
+/C /Caption 
+/Pg 35 0 R 
+/K 0 
+/P 1704 0 R 
+>> 
+endobj
+1359 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+1360 0 obj
+<< 
+/S /Normal 
+/A [ 1361 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 1 
+/P 3452 0 R 
+>> 
+endobj
+1361 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1362 0 obj
+<< 
+/S /Normal 
+/A [ 1363 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 2 
+/P 3455 0 R 
+>> 
+endobj
+1363 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1364 0 obj
+<< 
+/S /Normal 
+/A [ 1365 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 3 
+/P 3458 0 R 
+>> 
+endobj
+1365 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1366 0 obj
+<< 
+/S /Normal 
+/A [ 1367 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 4 
+/P 3461 0 R 
+>> 
+endobj
+1367 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1368 0 obj
+<< 
+/S /Normal 
+/A [ 1369 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 5 
+/P 3464 0 R 
+>> 
+endobj
+1369 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1370 0 obj
+<< 
+/S /Normal 
+/A [ 1371 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 6 
+/P 3468 0 R 
+>> 
+endobj
+1371 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1372 0 obj
+<< 
+/S /Normal 
+/A [ 1373 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 7 
+/P 3471 0 R 
+>> 
+endobj
+1373 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1374 0 obj
+<< 
+/S /Normal 
+/A [ 1375 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 8 
+/P 3474 0 R 
+>> 
+endobj
+1375 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1376 0 obj
+<< 
+/S /Normal 
+/A [ 1377 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 9 
+/P 3477 0 R 
+>> 
+endobj
+1377 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1378 0 obj
+<< 
+/S /Normal 
+/A [ 1379 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 10 
+/P 3480 0 R 
+>> 
+endobj
+1379 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1380 0 obj
+<< 
+/S /Normal 
+/A [ 1381 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 11 
+/P 3484 0 R 
+>> 
+endobj
+1381 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1382 0 obj
+<< 
+/S /Normal 
+/A [ 1383 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 12 
+/P 3487 0 R 
+>> 
+endobj
+1383 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1384 0 obj
+<< 
+/S /Normal 
+/A [ 1385 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 13 
+/P 3490 0 R 
+>> 
+endobj
+1385 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1386 0 obj
+<< 
+/S /Normal 
+/A [ 1387 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 14 
+/P 3493 0 R 
+>> 
+endobj
+1387 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1388 0 obj
+<< 
+/S /Normal 
+/A [ 1389 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 15 
+/P 3496 0 R 
+>> 
+endobj
+1389 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1390 0 obj
+<< 
+/S /Normal 
+/A [ 1391 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 16 
+/P 3500 0 R 
+>> 
+endobj
+1391 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1392 0 obj
+<< 
+/S /Normal 
+/A [ 1393 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 17 
+/P 3503 0 R 
+>> 
+endobj
+1393 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1394 0 obj
+<< 
+/S /Normal 
+/A [ 1395 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 18 
+/P 3506 0 R 
+>> 
+endobj
+1395 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1396 0 obj
+<< 
+/S /Normal 
+/A [ 1397 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 19 
+/P 3509 0 R 
+>> 
+endobj
+1397 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1398 0 obj
+<< 
+/S /Normal 
+/A [ 1399 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 20 
+/P 3512 0 R 
+>> 
+endobj
+1399 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1400 0 obj
+<< 
+/S /Normal 
+/A [ 1401 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 21 
+/P 3516 0 R 
+>> 
+endobj
+1401 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1402 0 obj
+<< 
+/S /Normal 
+/A [ 1403 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 22 
+/P 3519 0 R 
+>> 
+endobj
+1403 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1404 0 obj
+<< 
+/S /Normal 
+/A [ 1405 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 23 
+/P 3522 0 R 
+>> 
+endobj
+1405 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1406 0 obj
+<< 
+/S /Normal 
+/A [ 1407 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 24 
+/P 3525 0 R 
+>> 
+endobj
+1407 0 obj
+<< 
+/O /Layout 
+/EndIndent -9.89998 
+/SpaceAfter 3 
+>> 
+endobj
+1408 0 obj
+<< 
+/S /Normal 
+/A [ 1409 0 R ] 
+/C /Normal 
+/Pg 35 0 R 
+/K 25 
+/P 3528 0 R 
+>> 
+endobj
+1409 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 3 
+>> 
+endobj
+1410 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 35 0 R 
+/K 26 
+/P 1704 0 R 
+>> 
+endobj
+1411 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 35 0 R 
+/K 27 
+/P 1704 0 R 
+>> 
+endobj
+1412 0 obj
+<< 
+/S /LBody 
+/A [ 1413 0 R ] 
+/C /List#20Number#202 
+/Pg 35 0 R 
+/K 28 
+/P 3786 0 R 
+>> 
+endobj
+1413 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+1414 0 obj
+<< 
+/O /Layout 
+/WritingMode /LrTb 
+/StartIndent 36 
+/EndIndent 0 
+/TextAlign /Start 
+/SpaceBefore 0 
+/SpaceAfter 6 
+/TextIndent -17.99998 
+>> 
+endobj
+1415 0 obj
+<< 
+/S /LBody 
+/A [ 1416 0 R ] 
+/C /List#20Number#202 
+/Pg 35 0 R 
+/K 29 
+/P 3787 0 R 
+>> 
+endobj
+1416 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+1417 0 obj
+<< 
+/S /LBody 
+/A [ 1418 0 R ] 
+/C /List#20Number#202 
+/Pg 35 0 R 
+/K 30 
+/P 3788 0 R 
+>> 
+endobj
+1418 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+1419 0 obj
+<< 
+/S /LBody 
+/A [ 1420 0 R ] 
+/C /List#20Number#202 
+/Pg 35 0 R 
+/K 31 
+/P 3789 0 R 
+>> 
+endobj
+1420 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+1421 0 obj
+<< 
+/S /LBody 
+/A [ 1422 0 R ] 
+/C /List#20Number#202 
+/Pg 35 0 R 
+/K 32 
+/P 3790 0 R 
+>> 
+endobj
+1422 0 obj
+<< 
+/O /Layout 
+/SpaceAfter 0 
+>> 
+endobj
+1423 0 obj
+<< 
+/S /List#20Number#202 
+/A [ 1424 0 R ] 
+/C /List#20Number#202 
+/Pg 35 0 R 
+/K 33 
+/P 1704 0 R 
+>> 
+endobj
+1424 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 0 
+/TextIndent 0 
+>> 
+endobj
+1425 0 obj
+<< 
+/S /LBody 
+/C /Heading#201,h1 
+/Pg 35 0 R 
+/K 34 
+/P 3792 0 R 
+>> 
+endobj
+1426 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 35 0 R 
+/K 35 
+/P 1704 0 R 
+>> 
+endobj
+1427 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 35 0 R 
+/K 36 
+/P 1704 0 R 
+>> 
+endobj
+1428 0 obj
+<< 
+/S /LBody 
+/C /List#20Number#202 
+/Pg 35 0 R 
+/K 37 
+/P 3794 0 R 
+>> 
+endobj
+1429 0 obj
+<< 
+/S /LBody 
+/C /List#20Number#202 
+/Pg 35 0 R 
+/K 38 
+/P 3795 0 R 
+>> 
+endobj
+1430 0 obj
+<< 
+/S /LBody 
+/C /List#20Number#202 
+/Pg 35 0 R 
+/K 39 
+/P 3796 0 R 
+>> 
+endobj
+1431 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 35 0 R 
+/K 40 
+/P 3798 0 R 
+>> 
+endobj
+1432 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 35 0 R 
+/K 41 
+/P 1704 0 R 
+>> 
+endobj
+1433 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 35 0 R 
+/K 42 
+/P 3800 0 R 
+>> 
+endobj
+1434 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 35 0 R 
+/K 43 
+/P 3801 0 R 
+>> 
+endobj
+1435 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 35 0 R 
+/K 44 
+/P 3802 0 R 
+>> 
+endobj
+1436 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 35 0 R 
+/K 45 
+/P 3803 0 R 
+>> 
+endobj
+1437 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 0 
+/P 1704 0 R 
+>> 
+endobj
+1438 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 1 
+/P 1704 0 R 
+>> 
+endobj
+1439 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 38 0 R 
+/K 2 
+/P 3805 0 R 
+>> 
+endobj
+1440 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 38 0 R 
+/K 3 
+/P 3806 0 R 
+>> 
+endobj
+1441 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 38 0 R 
+/K 4 
+/P 3807 0 R 
+>> 
+endobj
+1442 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 5 
+/P 1704 0 R 
+>> 
+endobj
+1443 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 6 
+/P 1704 0 R 
+>> 
+endobj
+1444 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 7 
+/P 1704 0 R 
+>> 
+endobj
+1445 0 obj
+<< 
+/S /LBody 
+/C /Heading#203,h3 
+/Pg 38 0 R 
+/K 8 
+/P 3809 0 R 
+>> 
+endobj
+1446 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 9 
+/P 1704 0 R 
+>> 
+endobj
+1447 0 obj
+<< 
+/O /Layout 
+/WritingMode /LrTb 
+/StartIndent 36 
+/EndIndent 0 
+/TextAlign /Start 
+/SpaceBefore 12 
+/SpaceAfter 3 
+/TextIndent -35.99998 
+>> 
+endobj
+1448 0 obj
+<< 
+/S /LBody 
+/C /Heading#203,h3 
+/Pg 38 0 R 
+/K 10 
+/P 3811 0 R 
+>> 
+endobj
+1449 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 11 
+/P 1704 0 R 
+>> 
+endobj
+1450 0 obj
+<< 
+/S /Caption 
+/A [ 1451 0 R ] 
+/C /Caption 
+/Pg 38 0 R 
+/K 12 
+/P 1704 0 R 
+>> 
+endobj
+1451 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+1452 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 13 
+/P 3533 0 R 
+>> 
+endobj
+1453 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 14 
+/P 3536 0 R 
+>> 
+endobj
+1454 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 15 
+/P 3540 0 R 
+>> 
+endobj
+1455 0 obj
+<< 
+/S /Endnote#20Text 
+/C /Endnote#20Text 
+/Pg 38 0 R 
+/K 16 
+/P 3543 0 R 
+>> 
+endobj
+1456 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 17 
+/P 3547 0 R 
+>> 
+endobj
+1457 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 18 
+/P 3550 0 R 
+>> 
+endobj
+1458 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 19 
+/P 3554 0 R 
+>> 
+endobj
+1459 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 20 
+/P 3557 0 R 
+>> 
+endobj
+1460 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 21 
+/P 3561 0 R 
+>> 
+endobj
+1461 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 22 
+/P 3564 0 R 
+>> 
+endobj
+1462 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 23 
+/P 3568 0 R 
+>> 
+endobj
+1463 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 24 
+/P 3571 0 R 
+>> 
+endobj
+1464 0 obj
+<< 
+/S /Header 
+/C /Header 
+/Pg 38 0 R 
+/K 25 
+/P 1704 0 R 
+>> 
+endobj
+1465 0 obj
+<< 
+/S /LBody 
+/C /Heading#203,h3 
+/Pg 38 0 R 
+/K 26 
+/P 3813 0 R 
+>> 
+endobj
+1466 0 obj
+<< 
+/S /Header 
+/C /Header 
+/Pg 38 0 R 
+/K 27 
+/P 1704 0 R 
+>> 
+endobj
+1467 0 obj
+<< 
+/S /Normal 
+/A [ 1468 0 R ] 
+/C /Normal 
+/Pg 38 0 R 
+/K 28 
+/P 1704 0 R 
+>> 
+endobj
+1468 0 obj
+<< 
+/O /Layout 
+/StartIndent 14.39999 
+>> 
+endobj
+1469 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 38 0 R 
+/K 29 
+/P 1704 0 R 
+>> 
+endobj
+1470 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 44 0 R 
+/K 0 
+/P 3815 0 R 
+>> 
+endobj
+1471 0 obj
+<< 
+/S /Header 
+/C /Header 
+/Pg 44 0 R 
+/K 1 
+/P 1704 0 R 
+>> 
+endobj
+1472 0 obj
+<< 
+/S /Header 
+/A [ 1473 0 R ] 
+/C /Header 
+/Pg 44 0 R 
+/K 2 
+/P 1704 0 R 
+>> 
+endobj
+1473 0 obj
+<< 
+/O /Layout 
+/StartIndent 14.39999 
+>> 
+endobj
+1474 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 44 0 R 
+/K 3 
+/P 1704 0 R 
+>> 
+endobj
+1475 0 obj
+<< 
+/S /Header 
+/C /Header 
+/Pg 44 0 R 
+/K 4 
+/P 1704 0 R 
+>> 
+endobj
+1476 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 44 0 R 
+/K 5 
+/P 1704 0 R 
+>> 
+endobj
+1477 0 obj
+<< 
+/S /Header 
+/C /Header 
+/Pg 44 0 R 
+/K 6 
+/P 1704 0 R 
+>> 
+endobj
+1478 0 obj
+<< 
+/S /Header 
+/C /Header 
+/Pg 44 0 R 
+/K 7 
+/P 1704 0 R 
+>> 
+endobj
+1479 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 44 0 R 
+/K 8 
+/P 3817 0 R 
+>> 
+endobj
+1480 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 44 0 R 
+/K 9 
+/P 3818 0 R 
+>> 
+endobj
+1481 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 44 0 R 
+/K 10 
+/P 3819 0 R 
+>> 
+endobj
+1482 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 44 0 R 
+/K 11 
+/P 1704 0 R 
+>> 
+endobj
+1483 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 44 0 R 
+/K 12 
+/P 1704 0 R 
+>> 
+endobj
+1484 0 obj
+<< 
+/S /Caption 
+/A [ 1485 0 R ] 
+/C /Caption 
+/Pg 47 0 R 
+/K 0 
+/P 1704 0 R 
+>> 
+endobj
+1485 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+1486 0 obj
+<< 
+/S /Normal 
+/A [ 1487 0 R ] 
+/C /Normal 
+/Pg 47 0 R 
+/K [ 1488 0 R 24 ] 
+/P 1704 0 R 
+>> 
+endobj
+1487 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+1488 0 obj
+<< 
+/S /InlineShape 
+/Pg 47 0 R 
+/P 1486 0 R 
+/K [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ] 
+/Alt ()
+/A [ 3916 0 R ] 
+>> 
+endobj
+1489 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 47 0 R 
+/K 25 
+/P 1704 0 R 
+>> 
+endobj
+1490 0 obj
+<< 
+/S /Caption 
+/A [ 1491 0 R ] 
+/C /Caption 
+/Pg 47 0 R 
+/K 26 
+/P 1704 0 R 
+>> 
+endobj
+1491 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+1492 0 obj
+<< 
+/S /Normal 
+/A [ 1493 0 R ] 
+/C /Normal 
+/Pg 47 0 R 
+/K [ 1494 0 R 50 ] 
+/P 1704 0 R 
+>> 
+endobj
+1493 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+1494 0 obj
+<< 
+/S /InlineShape 
+/Pg 47 0 R 
+/P 1492 0 R 
+/K [ 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 
+49 ] 
+/Alt ()
+/A [ 3917 0 R ] 
+>> 
+endobj
+1495 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 50 0 R 
+/K 0 
+/P 3821 0 R 
+>> 
+endobj
+1496 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 50 0 R 
+/K 1 
+/P 1704 0 R 
+>> 
+endobj
+1497 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 50 0 R 
+/K 2 
+/P 3823 0 R 
+>> 
+endobj
+1498 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 50 0 R 
+/K 3 
+/P 3824 0 R 
+>> 
+endobj
+1499 0 obj
+<< 
+/S /LBody 
+/C /Heading#201,h1 
+/Pg 50 0 R 
+/K 4 
+/P 3826 0 R 
+>> 
+endobj
+1500 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 50 0 R 
+/K 5 
+/P 1704 0 R 
+>> 
+endobj
+1501 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 50 0 R 
+/K 6 
+/P 3828 0 R 
+>> 
+endobj
+1502 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 50 0 R 
+/K 7 
+/P 1704 0 R 
+>> 
+endobj
+1503 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 50 0 R 
+/K 8 
+/P 3830 0 R 
+>> 
+endobj
+1504 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 50 0 R 
+/K 9 
+/P 1704 0 R 
+>> 
+endobj
+1505 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 50 0 R 
+/K 10 
+/P 3832 0 R 
+>> 
+endobj
+1506 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 50 0 R 
+/K [ 11 1507 0 R 13 1508 0 R 15 ] 
+/P 3833 0 R 
+>> 
+endobj
+1507 0 obj
+<< 
+/S /Superscript 
+/P 1506 0 R 
+/A 3919 0 R 
+/Pg 50 0 R 
+/K 12 
+>> 
+endobj
+1508 0 obj
+<< 
+/S /Superscript 
+/P 1506 0 R 
+/A 3920 0 R 
+/Pg 50 0 R 
+/K 14 
+>> 
+endobj
+1509 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 50 0 R 
+/K 16 
+/P 3834 0 R 
+>> 
+endobj
+1510 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 50 0 R 
+/K 17 
+/P 3835 0 R 
+>> 
+endobj
+1511 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 50 0 R 
+/K 18 
+/P 3836 0 R 
+>> 
+endobj
+1512 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 50 0 R 
+/K 19 
+/P 3838 0 R 
+>> 
+endobj
+1513 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 50 0 R 
+/K 20 
+/P 1704 0 R 
+>> 
+endobj
+1514 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 50 0 R 
+/K 21 
+/P 3840 0 R 
+>> 
+endobj
+1515 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 50 0 R 
+/K 22 
+/P 1704 0 R 
+>> 
+endobj
+1516 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 50 0 R 
+/K 23 
+/P 1704 0 R 
+>> 
+endobj
+1517 0 obj
+<< 
+/S /Caption 
+/A [ 1518 0 R ] 
+/C /Caption 
+/Pg 54 0 R 
+/K 0 
+/P 1704 0 R 
+>> 
+endobj
+1518 0 obj
+<< 
+/O /Layout 
+/TextAlign /Center 
+>> 
+endobj
+1519 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 54 0 R 
+/K 1 
+/P 3576 0 R 
+>> 
+endobj
+1520 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 54 0 R 
+/K 2 
+/P 3579 0 R 
+>> 
+endobj
+1521 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 54 0 R 
+/K 3 
+/P 3582 0 R 
+>> 
+endobj
+1522 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 54 0 R 
+/K 4 
+/P 3586 0 R 
+>> 
+endobj
+1523 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 54 0 R 
+/K 5 
+/P 3589 0 R 
+>> 
+endobj
+1524 0 obj
+<< 
+/S /Header 
+/C /Header 
+/Pg 54 0 R 
+/K 6 
+/P 3592 0 R 
+>> 
+endobj
+1525 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 54 0 R 
+/K 7 
+/P 3596 0 R 
+>> 
+endobj
+1526 0 obj
+<< 
+/S /Header 
+/C /Header 
+/Pg 54 0 R 
+/K 8 
+/P 3599 0 R 
+>> 
+endobj
+1527 0 obj
+<< 
+/S /Header 
+/C /Header 
+/Pg 54 0 R 
+/K 9 
+/P 3602 0 R 
+>> 
+endobj
+1528 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 54 0 R 
+/K 10 
+/P 3606 0 R 
+>> 
+endobj
+1529 0 obj
+<< 
+/S /Header 
+/C /Header 
+/Pg 54 0 R 
+/K 11 
+/P 3609 0 R 
+>> 
+endobj
+1530 0 obj
+<< 
+/S /Header 
+/C /Header 
+/Pg 54 0 R 
+/K 12 
+/P 3612 0 R 
+>> 
+endobj
+1531 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 54 0 R 
+/K 13 
+/P 3616 0 R 
+>> 
+endobj
+1532 0 obj
+<< 
+/S /Header 
+/C /Header 
+/Pg 54 0 R 
+/K 14 
+/P 3619 0 R 
+>> 
+endobj
+1533 0 obj
+<< 
+/S /Header 
+/C /Header 
+/Pg 54 0 R 
+/K 15 
+/P 3622 0 R 
+>> 
+endobj
+1534 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 54 0 R 
+/K 16 
+/P 1704 0 R 
+>> 
+endobj
+1535 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 57 0 R 
+/K 0 
+/P 3842 0 R 
+>> 
+endobj
+1536 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 57 0 R 
+/K 1 
+/P 1704 0 R 
+>> 
+endobj
+1537 0 obj
+<< 
+/S /Normal 
+/A [ 1538 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 2 
+/P 1704 0 R 
+>> 
+endobj
+1538 0 obj
+<< 
+/O /Layout 
+/StartIndent 32.40001 
+/TextIndent -17.99998 
+>> 
+endobj
+1539 0 obj
+<< 
+/S /Caption 
+/A [ 1540 0 R ] 
+/C /Caption 
+/Pg 57 0 R 
+/K 3 
+/P 1704 0 R 
+>> 
+endobj
+1540 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextAlign /Center 
+/TextIndent -17.99998 
+>> 
+endobj
+1541 0 obj
+<< 
+/S /Normal 
+/A [ 1542 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 4 
+/P 3627 0 R 
+>> 
+endobj
+1542 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1543 0 obj
+<< 
+/S /Normal 
+/A [ 1544 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 5 
+/P 3630 0 R 
+>> 
+endobj
+1544 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1545 0 obj
+<< 
+/S /Normal 
+/A [ 1546 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 6 
+/P 3634 0 R 
+>> 
+endobj
+1546 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1547 0 obj
+<< 
+/S /Normal 
+/A [ 1548 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 7 
+/P 3637 0 R 
+>> 
+endobj
+1548 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1549 0 obj
+<< 
+/S /Normal 
+/A [ 1550 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 8 
+/P 3641 0 R 
+>> 
+endobj
+1550 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1551 0 obj
+<< 
+/S /Normal 
+/A [ 1552 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 9 
+/P 3644 0 R 
+>> 
+endobj
+1552 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1553 0 obj
+<< 
+/S /Normal 
+/A [ 1554 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 10 
+/P 3648 0 R 
+>> 
+endobj
+1554 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1555 0 obj
+<< 
+/S /Normal 
+/A [ 1556 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 11 
+/P 3651 0 R 
+>> 
+endobj
+1556 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1557 0 obj
+<< 
+/S /Normal 
+/A [ 1558 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 12 
+/P 3655 0 R 
+>> 
+endobj
+1558 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1559 0 obj
+<< 
+/S /Normal 
+/A [ 1560 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 13 
+/P 3658 0 R 
+>> 
+endobj
+1560 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1561 0 obj
+<< 
+/S /Normal 
+/A [ 1562 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 14 
+/P 3662 0 R 
+>> 
+endobj
+1562 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1563 0 obj
+<< 
+/S /Normal 
+/A [ 1564 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 15 
+/P 3665 0 R 
+>> 
+endobj
+1564 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1565 0 obj
+<< 
+/S /Normal 
+/A [ 1566 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 16 
+/P 3669 0 R 
+>> 
+endobj
+1566 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1567 0 obj
+<< 
+/S /Normal 
+/A [ 1568 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 17 
+/P 3672 0 R 
+>> 
+endobj
+1568 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1569 0 obj
+<< 
+/S /Normal 
+/A [ 1570 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 18 
+/P 3676 0 R 
+>> 
+endobj
+1570 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1571 0 obj
+<< 
+/S /Normal 
+/A [ 1572 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 19 
+/P 3679 0 R 
+>> 
+endobj
+1572 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1573 0 obj
+<< 
+/S /Normal 
+/A [ 1574 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 20 
+/P 3683 0 R 
+>> 
+endobj
+1574 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1575 0 obj
+<< 
+/S /Normal 
+/A [ 1576 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 21 
+/P 3686 0 R 
+>> 
+endobj
+1576 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1577 0 obj
+<< 
+/S /Normal 
+/A [ 1578 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 22 
+/P 3690 0 R 
+>> 
+endobj
+1578 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1579 0 obj
+<< 
+/S /Normal 
+/A [ 1580 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 23 
+/P 3693 0 R 
+>> 
+endobj
+1580 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1581 0 obj
+<< 
+/S /Normal 
+/A [ 1582 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 24 
+/P 3697 0 R 
+>> 
+endobj
+1582 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1583 0 obj
+<< 
+/S /Normal 
+/A [ 1584 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 25 
+/P 3700 0 R 
+>> 
+endobj
+1584 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1585 0 obj
+<< 
+/S /Normal 
+/A [ 1586 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 26 
+/P 3704 0 R 
+>> 
+endobj
+1586 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1587 0 obj
+<< 
+/S /Normal 
+/A [ 1588 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 27 
+/P 3707 0 R 
+>> 
+endobj
+1588 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1589 0 obj
+<< 
+/S /Normal 
+/A [ 1590 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 28 
+/P 3711 0 R 
+>> 
+endobj
+1590 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1591 0 obj
+<< 
+/S /Normal 
+/A [ 1592 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 29 
+/P 3714 0 R 
+>> 
+endobj
+1592 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1593 0 obj
+<< 
+/S /Normal 
+/A [ 1594 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 30 
+/P 3718 0 R 
+>> 
+endobj
+1594 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1595 0 obj
+<< 
+/S /Normal 
+/A [ 1596 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 31 
+/P 3721 0 R 
+>> 
+endobj
+1596 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1597 0 obj
+<< 
+/S /Normal 
+/A [ 1598 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 32 
+/P 3725 0 R 
+>> 
+endobj
+1598 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1599 0 obj
+<< 
+/S /Normal 
+/A [ 1600 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 33 
+/P 3728 0 R 
+>> 
+endobj
+1600 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1601 0 obj
+<< 
+/S /Normal 
+/A [ 1602 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 34 
+/P 3732 0 R 
+>> 
+endobj
+1602 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1603 0 obj
+<< 
+/S /Normal 
+/A [ 1604 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 35 
+/P 3735 0 R 
+>> 
+endobj
+1604 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1605 0 obj
+<< 
+/S /Normal 
+/A [ 1606 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 36 
+/P 3739 0 R 
+>> 
+endobj
+1606 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1607 0 obj
+<< 
+/S /Normal 
+/A [ 1608 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 37 
+/P 3742 0 R 
+>> 
+endobj
+1608 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/SpaceAfter 3 
+/TextIndent -17.99998 
+>> 
+endobj
+1609 0 obj
+<< 
+/S /Normal 
+/A [ 1610 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 38 
+/P 1704 0 R 
+>> 
+endobj
+1610 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1611 0 obj
+<< 
+/S /Normal 
+/A [ 1612 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 39 
+/P 1704 0 R 
+>> 
+endobj
+1612 0 obj
+<< 
+/O /Layout 
+/StartIndent 32.40001 
+/TextIndent -17.99998 
+>> 
+endobj
+1613 0 obj
+<< 
+/S /Normal 
+/A [ 1614 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 40 
+/P 1704 0 R 
+>> 
+endobj
+1614 0 obj
+<< 
+/O /Layout 
+/StartIndent 32.40001 
+/TextIndent -17.99998 
+>> 
+endobj
+1615 0 obj
+<< 
+/S /Normal 
+/A [ 1616 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 41 
+/P 1704 0 R 
+>> 
+endobj
+1616 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1617 0 obj
+<< 
+/S /Normal 
+/A [ 1618 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 42 
+/P 1704 0 R 
+>> 
+endobj
+1618 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1619 0 obj
+<< 
+/S /Normal 
+/A [ 1620 0 R ] 
+/C /Normal 
+/Pg 57 0 R 
+/K 43 
+/P 1704 0 R 
+>> 
+endobj
+1620 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1621 0 obj
+<< 
+/S /LBody 
+/C /Heading#201,h1 
+/Pg 57 0 R 
+/K 44 
+/P 3844 0 R 
+>> 
+endobj
+1622 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 57 0 R 
+/P 1704 0 R 
+/K [ 45 << /Type /MCR /Pg 61 0 R /MCID 0 >> ] 
+>> 
+endobj
+1623 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 61 0 R 
+/K 1 
+/P 1704 0 R 
+>> 
+endobj
+1624 0 obj
+<< 
+/S /LBody 
+/C /List#20Number#202 
+/Pg 61 0 R 
+/K 2 
+/P 3846 0 R 
+>> 
+endobj
+1625 0 obj
+<< 
+/S /LBody 
+/C /List#20Number#202 
+/Pg 61 0 R 
+/K 3 
+/P 3847 0 R 
+>> 
+endobj
+1626 0 obj
+<< 
+/S /LBody 
+/C /List#20Number#202 
+/Pg 61 0 R 
+/K 4 
+/P 3848 0 R 
+>> 
+endobj
+1627 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 61 0 R 
+/K 5 
+/P 3850 0 R 
+>> 
+endobj
+1628 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 61 0 R 
+/K 6 
+/P 1704 0 R 
+>> 
+endobj
+1629 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 61 0 R 
+/K 7 
+/P 1704 0 R 
+>> 
+endobj
+1630 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 61 0 R 
+/K 8 
+/P 3852 0 R 
+>> 
+endobj
+1631 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 61 0 R 
+/K 9 
+/P 3853 0 R 
+>> 
+endobj
+1632 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 61 0 R 
+/K [ 10 1633 0 R 12 ] 
+/P 3854 0 R 
+>> 
+endobj
+1633 0 obj
+<< 
+/S /Superscript 
+/P 1632 0 R 
+/A 3924 0 R 
+/Pg 61 0 R 
+/K 11 
+>> 
+endobj
+1634 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 61 0 R 
+/K 13 
+/P 3855 0 R 
+>> 
+endobj
+1635 0 obj
+<< 
+/S /LBody 
+/C /List#20Bullet#202,lb2 
+/Pg 61 0 R 
+/K 14 
+/P 3856 0 R 
+>> 
+endobj
+1636 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 61 0 R 
+/K 15 
+/P 3858 0 R 
+>> 
+endobj
+1637 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 61 0 R 
+/K 16 
+/P 1704 0 R 
+>> 
+endobj
+1638 0 obj
+<< 
+/S /LBody 
+/C /Heading#203,h3 
+/Pg 61 0 R 
+/K 17 
+/P 3860 0 R 
+>> 
+endobj
+1639 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 61 0 R 
+/K 18 
+/P 1704 0 R 
+>> 
+endobj
+1640 0 obj
+<< 
+/S /Normal 
+/A [ 1641 0 R ] 
+/C /Normal 
+/Pg 61 0 R 
+/K 19 
+/P 1704 0 R 
+>> 
+endobj
+1641 0 obj
+<< 
+/O /Layout 
+/StartIndent 14.39999 
+>> 
+endobj
+1642 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 61 0 R 
+/K 20 
+/P 1704 0 R 
+>> 
+endobj
+1643 0 obj
+<< 
+/S /LBody 
+/C /Heading#203,h3 
+/Pg 61 0 R 
+/K 21 
+/P 3862 0 R 
+>> 
+endobj
+1644 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 61 0 R 
+/K 22 
+/P 1704 0 R 
+>> 
+endobj
+1645 0 obj
+<< 
+/S /Normal 
+/A [ 1646 0 R ] 
+/C /Normal 
+/Pg 61 0 R 
+/K 23 
+/P 1704 0 R 
+>> 
+endobj
+1646 0 obj
+<< 
+/O /Layout 
+/StartIndent 14.39999 
+>> 
+endobj
+1647 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 61 0 R 
+/K 24 
+/P 1704 0 R 
+>> 
+endobj
+1648 0 obj
+<< 
+/S /LBody 
+/C /Heading#203,h3 
+/Pg 65 0 R 
+/K 0 
+/P 3864 0 R 
+>> 
+endobj
+1649 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 65 0 R 
+/K 1 
+/P 1704 0 R 
+>> 
+endobj
+1650 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 65 0 R 
+/K 2 
+/P 1704 0 R 
+>> 
+endobj
+1651 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 65 0 R 
+/K 3 
+/P 3866 0 R 
+>> 
+endobj
+1652 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 65 0 R 
+/K 4 
+/P 1704 0 R 
+>> 
+endobj
+1653 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 65 0 R 
+/K 5 
+/P 1704 0 R 
+>> 
+endobj
+1654 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 65 0 R 
+/K 6 
+/P 1704 0 R 
+>> 
+endobj
+1655 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 65 0 R 
+/K 7 
+/P 1704 0 R 
+>> 
+endobj
+1656 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 65 0 R 
+/K 8 
+/P 1704 0 R 
+>> 
+endobj
+1657 0 obj
+<< 
+/S /LBody 
+/C /Heading#201,h1 
+/Pg 65 0 R 
+/K 9 
+/P 3868 0 R 
+>> 
+endobj
+1658 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 65 0 R 
+/K 10 
+/P 1704 0 R 
+>> 
+endobj
+1659 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 65 0 R 
+/K 11 
+/P 1704 0 R 
+>> 
+endobj
+1660 0 obj
+<< 
+/S /Normal 
+/A [ 1661 0 R ] 
+/C /Normal 
+/Pg 65 0 R 
+/K 12 
+/P 1704 0 R 
+>> 
+endobj
+1661 0 obj
+<< 
+/O /Layout 
+/StartIndent 14.39999 
+>> 
+endobj
+1662 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 65 0 R 
+/K 13 
+/P 3870 0 R 
+>> 
+endobj
+1663 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 65 0 R 
+/K 14 
+/P 1704 0 R 
+>> 
+endobj
+1664 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 65 0 R 
+/K 15 
+/P 3872 0 R 
+>> 
+endobj
+1665 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 65 0 R 
+/K 16 
+/P 1704 0 R 
+>> 
+endobj
+1666 0 obj
+<< 
+/S /LBody 
+/A [ 1667 0 R ] 
+/C /Normal 
+/Pg 65 0 R 
+/K 17 
+/P 3874 0 R 
+>> 
+endobj
+1667 0 obj
+<< 
+/O /Layout 
+/StartIndent 46.8 
+/TextIndent -17.99998 
+>> 
+endobj
+1668 0 obj
+<< 
+/S /LBody 
+/A [ 1669 0 R ] 
+/C /Normal 
+/Pg 65 0 R 
+/K 18 
+/P 3875 0 R 
+>> 
+endobj
+1669 0 obj
+<< 
+/O /Layout 
+/StartIndent 46.8 
+/TextIndent -17.99998 
+>> 
+endobj
+1670 0 obj
+<< 
+/S /LBody 
+/A [ 1671 0 R ] 
+/C /Normal 
+/Pg 65 0 R 
+/K 19 
+/P 3876 0 R 
+>> 
+endobj
+1671 0 obj
+<< 
+/O /Layout 
+/StartIndent 46.8 
+/TextIndent -17.99998 
+>> 
+endobj
+1672 0 obj
+<< 
+/S /LBody 
+/A [ 1673 0 R ] 
+/C /Normal 
+/Pg 68 0 R 
+/K 0 
+/P 3877 0 R 
+>> 
+endobj
+1673 0 obj
+<< 
+/O /Layout 
+/StartIndent 46.8 
+/TextIndent -17.99998 
+>> 
+endobj
+1674 0 obj
+<< 
+/S /LBody 
+/A [ 1675 0 R ] 
+/C /Normal 
+/Pg 68 0 R 
+/K 1 
+/P 3878 0 R 
+>> 
+endobj
+1675 0 obj
+<< 
+/O /Layout 
+/StartIndent 46.8 
+/TextIndent -17.99998 
+>> 
+endobj
+1676 0 obj
+<< 
+/S /LBody 
+/C /Heading#202,h2 
+/Pg 68 0 R 
+/K 2 
+/P 3880 0 R 
+>> 
+endobj
+1677 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 68 0 R 
+/K 3 
+/P 1704 0 R 
+>> 
+endobj
+1678 0 obj
+<< 
+/S /LBody 
+/A [ 1679 0 R ] 
+/C /Normal 
+/Pg 68 0 R 
+/K 4 
+/P 3882 0 R 
+>> 
+endobj
+1679 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1680 0 obj
+<< 
+/S /Normal 
+/A [ 1681 0 R ] 
+/C /Normal 
+/Pg 68 0 R 
+/K 5 
+/P 1704 0 R 
+>> 
+endobj
+1681 0 obj
+<< 
+/O /Layout 
+/StartIndent 36 
+/TextIndent -17.99998 
+>> 
+endobj
+1682 0 obj
+<< 
+/S /LBody 
+/A [ 1683 0 R ] 
+/C /Normal 
+/Pg 68 0 R 
+/K 6 
+/P 3884 0 R 
+>> 
+endobj
+1683 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1684 0 obj
+<< 
+/S /Normal 
+/A [ 1685 0 R ] 
+/C /Normal 
+/Pg 68 0 R 
+/K 7 
+/P 1704 0 R 
+>> 
+endobj
+1685 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1686 0 obj
+<< 
+/S /Normal 
+/A [ 1687 0 R ] 
+/C /Normal 
+/Pg 68 0 R 
+/K 8 
+/P 1704 0 R 
+>> 
+endobj
+1687 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1688 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 68 0 R 
+/K 9 
+/P 1704 0 R 
+>> 
+endobj
+1689 0 obj
+<< 
+/S /LBody 
+/C /Heading#201,h1 
+/Pg 68 0 R 
+/K 10 
+/P 3886 0 R 
+>> 
+endobj
+1690 0 obj
+<< 
+/S /Normal 
+/C /Normal 
+/Pg 68 0 R 
+/K 11 
+/P 1704 0 R 
+>> 
+endobj
+1691 0 obj
+<< 
+/S /LBody 
+/A [ 1692 0 R ] 
+/C /Endnote#20Text 
+/Pg 68 0 R 
+/K 12 
+/P 3888 0 R 
+>> 
+endobj
+1692 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1693 0 obj
+<< 
+/S /LBody 
+/A [ 1694 0 R ] 
+/C /Endnote#20Text 
+/Pg 68 0 R 
+/K 13 
+/P 3889 0 R 
+>> 
+endobj
+1694 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1695 0 obj
+<< 
+/S /LBody 
+/A [ 1696 0 R ] 
+/C /Endnote#20Text 
+/Pg 68 0 R 
+/K 14 
+/P 3890 0 R 
+>> 
+endobj
+1696 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1697 0 obj
+<< 
+/S /LBody 
+/A [ 1698 0 R ] 
+/C /Endnote#20Text 
+/Pg 68 0 R 
+/K 15 
+/P 3891 0 R 
+>> 
+endobj
+1698 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1699 0 obj
+<< 
+/S /LBody 
+/A [ 1700 0 R ] 
+/C /Endnote#20Text 
+/Pg 68 0 R 
+/K 16 
+/P 3892 0 R 
+>> 
+endobj
+1700 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1701 0 obj
+<< 
+/S /LBody 
+/A [ 1702 0 R ] 
+/C /Endnote#20Text 
+/Pg 68 0 R 
+/K 17 
+/P 3893 0 R 
+>> 
+endobj
+1702 0 obj
+<< 
+/O /Layout 
+/StartIndent 18 
+/TextIndent -17.99998 
+>> 
+endobj
+1703 0 obj
+<< 
+/S /Endnote#20Text 
+/C /Endnote#20Text 
+/Pg 68 0 R 
+/K 18 
+/P 1704 0 R 
+>> 
+endobj
+1704 0 obj
+<< 
+/S /Sect 
+/P 3952 0 R 
+/K [ 129 0 R 130 0 R 133 0 R 135 0 R 136 0 R 137 0 R 3745 0 R 140 0 R 
+142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 
+150 0 R 151 0 R 152 0 R 153 0 R 154 0 R 3747 0 R 157 0 R 3749 0 R 
+167 0 R 168 0 R 3758 0 R 171 0 R 172 0 R 3761 0 R 174 0 R 175 0 R 
+1705 0 R 225 0 R 226 0 R 227 0 R 228 0 R 3763 0 R 234 0 R 3769 0 R 
+241 0 R 243 0 R 244 0 R 1776 0 R 286 0 R 1841 0 R 427 0 R 2066 0 R 
+478 0 R 2147 0 R 599 0 R 2340 0 R 700 0 R 701 0 R 702 0 R 704 0 R 
+707 0 R 708 0 R 2501 0 R 760 0 R 762 0 R 763 0 R 2582 0 R 941 0 R 
+3777 0 R 944 0 R 945 0 R 2855 0 R 1017 0 R 1018 0 R 3779 0 R 1020 0 R 
+1021 0 R 1022 0 R 1023 0 R 1024 0 R 1025 0 R 2968 0 R 1235 0 R 1236 0 R 
+1237 0 R 1238 0 R 1239 0 R 1241 0 R 1244 0 R 3781 0 R 1246 0 R 1247 0 R 
+1248 0 R 3289 0 R 1352 0 R 1353 0 R 3783 0 R 1355 0 R 1356 0 R 1357 0 R 
+1358 0 R 3450 0 R 1410 0 R 1411 0 R 3785 0 R 1423 0 R 3791 0 R 1426 0 R 
+1427 0 R 3793 0 R 1432 0 R 3799 0 R 1437 0 R 1438 0 R 3804 0 R 1442 0 R 
+1443 0 R 1444 0 R 3808 0 R 1446 0 R 3810 0 R 1449 0 R 1450 0 R 3531 0 R 
+1464 0 R 3812 0 R 1466 0 R 1467 0 R 1469 0 R 3814 0 R 1471 0 R 1472 0 R 
+1474 0 R 1475 0 R 1476 0 R 1477 0 R 1478 0 R 3816 0 R 1482 0 R 1483 0 R 
+1484 0 R 1486 0 R 1489 0 R 1490 0 R 1492 0 R 3820 0 R 1496 0 R 3822 0 R 
+3825 0 R 1500 0 R 3827 0 R 1502 0 R 3829 0 R 1504 0 R 3831 0 R 1513 0 R 
+3839 0 R 1515 0 R 1516 0 R 1517 0 R 3574 0 R 1534 0 R 3841 0 R 1536 0 R 
+1537 0 R 1539 0 R 3625 0 R 1609 0 R 1611 0 R 1613 0 R 1615 0 R 1617 0 R 
+1619 0 R 3843 0 R 1622 0 R 1623 0 R 3845 0 R 1628 0 R 1629 0 R 3851 0 R 
+1637 0 R 3859 0 R 1639 0 R 1640 0 R 1642 0 R 3861 0 R 1644 0 R 1645 0 R 
+1647 0 R 3863 0 R 1649 0 R 1650 0 R 3865 0 R 1652 0 R 1653 0 R 1654 0 R 
+1655 0 R 1656 0 R 3867 0 R 1658 0 R 1659 0 R 1660 0 R 3869 0 R 1663 0 R 
+3871 0 R 1665 0 R 3873 0 R 1677 0 R 3881 0 R 1680 0 R 3883 0 R 1684 0 R 
+1686 0 R 1688 0 R 3885 0 R 1690 0 R 3887 0 R 1703 0 R ] 
+>> 
+endobj
+1705 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 1706 0 R 1716 0 R 1726 0 R 1736 0 R 1746 0 R 1756 0 R 1766 0 R ] 
+/A [ 3927 0 R ] 
+>> 
+endobj
+1706 0 obj
+<< 
+/S /TR 
+/P 1705 0 R 
+/K [ 1707 0 R 1710 0 R 1713 0 R ] 
+>> 
+endobj
+1707 0 obj
+<< 
+/S /TD 
+/A [ 1708 0 R 1709 0 R ] 
+/P 1706 0 R 
+/K 178 0 R 
+>> 
+endobj
+1708 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1709 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1710 0 obj
+<< 
+/S /TD 
+/A [ 1711 0 R 1712 0 R ] 
+/P 1706 0 R 
+/K 180 0 R 
+>> 
+endobj
+1711 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1712 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1713 0 obj
+<< 
+/S /TD 
+/A [ 1714 0 R 1715 0 R ] 
+/P 1706 0 R 
+/K 182 0 R 
+>> 
+endobj
+1714 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1715 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1716 0 obj
+<< 
+/S /TR 
+/P 1705 0 R 
+/K [ 1717 0 R 1720 0 R 1723 0 R ] 
+>> 
+endobj
+1717 0 obj
+<< 
+/S /TD 
+/A [ 1718 0 R 1719 0 R ] 
+/P 1716 0 R 
+/K 184 0 R 
+>> 
+endobj
+1718 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1719 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1720 0 obj
+<< 
+/S /TD 
+/A [ 1721 0 R 1722 0 R ] 
+/P 1716 0 R 
+/K 186 0 R 
+>> 
+endobj
+1721 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1722 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1723 0 obj
+<< 
+/S /TD 
+/A [ 1724 0 R 1725 0 R ] 
+/P 1716 0 R 
+/K 188 0 R 
+>> 
+endobj
+1724 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1725 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1726 0 obj
+<< 
+/S /TR 
+/P 1705 0 R 
+/K [ 1727 0 R 1730 0 R 1733 0 R ] 
+>> 
+endobj
+1727 0 obj
+<< 
+/S /TD 
+/A [ 1728 0 R 1729 0 R ] 
+/P 1726 0 R 
+/K 190 0 R 
+>> 
+endobj
+1728 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1729 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1730 0 obj
+<< 
+/S /TD 
+/A [ 1731 0 R 1732 0 R ] 
+/P 1726 0 R 
+/K 192 0 R 
+>> 
+endobj
+1731 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1732 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1733 0 obj
+<< 
+/S /TD 
+/A [ 1734 0 R 1735 0 R ] 
+/P 1726 0 R 
+/K [ 194 0 R 196 0 R ] 
+>> 
+endobj
+1734 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1735 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1736 0 obj
+<< 
+/S /TR 
+/P 1705 0 R 
+/K [ 1737 0 R 1740 0 R 1743 0 R ] 
+>> 
+endobj
+1737 0 obj
+<< 
+/S /TD 
+/A [ 1738 0 R 1739 0 R ] 
+/P 1736 0 R 
+/K 199 0 R 
+>> 
+endobj
+1738 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1739 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1740 0 obj
+<< 
+/S /TD 
+/A [ 1741 0 R 1742 0 R ] 
+/P 1736 0 R 
+/K 201 0 R 
+>> 
+endobj
+1741 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1742 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1743 0 obj
+<< 
+/S /TD 
+/A [ 1744 0 R 1745 0 R ] 
+/P 1736 0 R 
+/K [ 203 0 R 205 0 R ] 
+>> 
+endobj
+1744 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1745 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1746 0 obj
+<< 
+/S /TR 
+/P 1705 0 R 
+/K [ 1747 0 R 1750 0 R 1753 0 R ] 
+>> 
+endobj
+1747 0 obj
+<< 
+/S /TD 
+/A [ 1748 0 R 1749 0 R ] 
+/P 1746 0 R 
+/K 207 0 R 
+>> 
+endobj
+1748 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1749 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1750 0 obj
+<< 
+/S /TD 
+/A [ 1751 0 R 1752 0 R ] 
+/P 1746 0 R 
+/K 209 0 R 
+>> 
+endobj
+1751 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1752 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1753 0 obj
+<< 
+/S /TD 
+/A [ 1754 0 R 1755 0 R ] 
+/P 1746 0 R 
+/K [ 211 0 R 213 0 R ] 
+>> 
+endobj
+1754 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1755 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1756 0 obj
+<< 
+/S /TR 
+/P 1705 0 R 
+/K [ 1757 0 R 1760 0 R 1763 0 R ] 
+>> 
+endobj
+1757 0 obj
+<< 
+/S /TD 
+/A [ 1758 0 R 1759 0 R ] 
+/P 1756 0 R 
+/K 215 0 R 
+>> 
+endobj
+1758 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1759 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1760 0 obj
+<< 
+/S /TD 
+/A [ 1761 0 R 1762 0 R ] 
+/P 1756 0 R 
+/K 217 0 R 
+>> 
+endobj
+1761 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1762 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1763 0 obj
+<< 
+/S /TD 
+/A [ 1764 0 R 1765 0 R ] 
+/P 1756 0 R 
+/K 219 0 R 
+>> 
+endobj
+1764 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1765 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1766 0 obj
+<< 
+/S /TR 
+/P 1705 0 R 
+/K [ 1767 0 R 1770 0 R 1773 0 R ] 
+>> 
+endobj
+1767 0 obj
+<< 
+/S /TD 
+/A [ 1768 0 R 1769 0 R ] 
+/P 1766 0 R 
+/K 221 0 R 
+>> 
+endobj
+1768 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1769 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1770 0 obj
+<< 
+/S /TD 
+/A [ 1771 0 R 1772 0 R ] 
+/P 1766 0 R 
+/K 222 0 R 
+>> 
+endobj
+1771 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1772 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1773 0 obj
+<< 
+/S /TD 
+/A [ 1774 0 R 1775 0 R ] 
+/P 1766 0 R 
+/K 224 0 R 
+>> 
+endobj
+1774 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1775 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1776 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 1777 0 R 1793 0 R 1809 0 R 1825 0 R ] 
+/A [ 3928 0 R ] 
+>> 
+endobj
+1777 0 obj
+<< 
+/S /TR 
+/P 1776 0 R 
+/K [ 1778 0 R 1781 0 R 1784 0 R 1787 0 R 1790 0 R ] 
+>> 
+endobj
+1778 0 obj
+<< 
+/S /TD 
+/A [ 1779 0 R 1780 0 R ] 
+/P 1777 0 R 
+/K 246 0 R 
+>> 
+endobj
+1779 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1780 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1781 0 obj
+<< 
+/S /TD 
+/A [ 1782 0 R 1783 0 R ] 
+/P 1777 0 R 
+/K 248 0 R 
+>> 
+endobj
+1782 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1783 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1784 0 obj
+<< 
+/S /TD 
+/A [ 1785 0 R 1786 0 R ] 
+/P 1777 0 R 
+/K 250 0 R 
+>> 
+endobj
+1785 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1786 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1787 0 obj
+<< 
+/S /TD 
+/A [ 1788 0 R 1789 0 R ] 
+/P 1777 0 R 
+/K 252 0 R 
+>> 
+endobj
+1788 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1789 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1790 0 obj
+<< 
+/S /TD 
+/A [ 1791 0 R 1792 0 R ] 
+/P 1777 0 R 
+/K 254 0 R 
+>> 
+endobj
+1791 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1792 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1793 0 obj
+<< 
+/S /TR 
+/P 1776 0 R 
+/K [ 1794 0 R 1797 0 R 1800 0 R 1803 0 R 1806 0 R ] 
+>> 
+endobj
+1794 0 obj
+<< 
+/S /TD 
+/A [ 1795 0 R 1796 0 R ] 
+/P 1793 0 R 
+/K 256 0 R 
+>> 
+endobj
+1795 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1796 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1797 0 obj
+<< 
+/S /TD 
+/A [ 1798 0 R 1799 0 R ] 
+/P 1793 0 R 
+/K 258 0 R 
+>> 
+endobj
+1798 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1799 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1800 0 obj
+<< 
+/S /TD 
+/A [ 1801 0 R 1802 0 R ] 
+/P 1793 0 R 
+/K 260 0 R 
+>> 
+endobj
+1801 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1802 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1803 0 obj
+<< 
+/S /TD 
+/A [ 1804 0 R 1805 0 R ] 
+/P 1793 0 R 
+/K 262 0 R 
+>> 
+endobj
+1804 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1805 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1806 0 obj
+<< 
+/S /TD 
+/A [ 1807 0 R 1808 0 R ] 
+/P 1793 0 R 
+/K 264 0 R 
+>> 
+endobj
+1807 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1808 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1809 0 obj
+<< 
+/S /TR 
+/P 1776 0 R 
+/K [ 1810 0 R 1813 0 R 1816 0 R 1819 0 R 1822 0 R ] 
+>> 
+endobj
+1810 0 obj
+<< 
+/S /TD 
+/A [ 1811 0 R 1812 0 R ] 
+/P 1809 0 R 
+/K 266 0 R 
+>> 
+endobj
+1811 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1812 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1813 0 obj
+<< 
+/S /TD 
+/A [ 1814 0 R 1815 0 R ] 
+/P 1809 0 R 
+/K 268 0 R 
+>> 
+endobj
+1814 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1815 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1816 0 obj
+<< 
+/S /TD 
+/A [ 1817 0 R 1818 0 R ] 
+/P 1809 0 R 
+/K 270 0 R 
+>> 
+endobj
+1817 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1818 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1819 0 obj
+<< 
+/S /TD 
+/A [ 1820 0 R 1821 0 R ] 
+/P 1809 0 R 
+/K 272 0 R 
+>> 
+endobj
+1820 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1821 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1822 0 obj
+<< 
+/S /TD 
+/A [ 1823 0 R 1824 0 R ] 
+/P 1809 0 R 
+/K 274 0 R 
+>> 
+endobj
+1823 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1824 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1825 0 obj
+<< 
+/S /TR 
+/P 1776 0 R 
+/K [ 1826 0 R 1829 0 R 1832 0 R 1835 0 R 1838 0 R ] 
+>> 
+endobj
+1826 0 obj
+<< 
+/S /TD 
+/A [ 1827 0 R 1828 0 R ] 
+/P 1825 0 R 
+/K 276 0 R 
+>> 
+endobj
+1827 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1828 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1829 0 obj
+<< 
+/S /TD 
+/A [ 1830 0 R 1831 0 R ] 
+/P 1825 0 R 
+/K 278 0 R 
+>> 
+endobj
+1830 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1831 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1832 0 obj
+<< 
+/S /TD 
+/A [ 1833 0 R 1834 0 R ] 
+/P 1825 0 R 
+/K 280 0 R 
+>> 
+endobj
+1833 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1834 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1835 0 obj
+<< 
+/S /TD 
+/A [ 1836 0 R 1837 0 R ] 
+/P 1825 0 R 
+/K 282 0 R 
+>> 
+endobj
+1836 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1837 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1838 0 obj
+<< 
+/S /TD 
+/A [ 1839 0 R 1840 0 R ] 
+/P 1825 0 R 
+/K 284 0 R 
+>> 
+endobj
+1839 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1840 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1841 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 1842 0 R 1858 0 R 1874 0 R 1890 0 R 1906 0 R 1922 0 R 1938 0 R 1954 0 R 
+1970 0 R 1986 0 R 2002 0 R 2018 0 R 2034 0 R 2050 0 R ] 
+/A [ 3929 0 R ] 
+>> 
+endobj
+1842 0 obj
+<< 
+/S /TR 
+/P 1841 0 R 
+/K [ 1843 0 R 1846 0 R 1849 0 R 1852 0 R 1855 0 R ] 
+>> 
+endobj
+1843 0 obj
+<< 
+/S /TD 
+/A [ 1844 0 R 1845 0 R ] 
+/P 1842 0 R 
+/K 287 0 R 
+>> 
+endobj
+1844 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1845 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1846 0 obj
+<< 
+/S /TD 
+/A [ 1847 0 R 1848 0 R ] 
+/P 1842 0 R 
+/K 289 0 R 
+>> 
+endobj
+1847 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1848 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1849 0 obj
+<< 
+/S /TD 
+/A [ 1850 0 R 1851 0 R ] 
+/P 1842 0 R 
+/K 291 0 R 
+>> 
+endobj
+1850 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1851 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1852 0 obj
+<< 
+/S /TD 
+/A [ 1853 0 R 1854 0 R ] 
+/P 1842 0 R 
+/K 293 0 R 
+>> 
+endobj
+1853 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1854 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1855 0 obj
+<< 
+/S /TD 
+/A [ 1856 0 R 1857 0 R ] 
+/P 1842 0 R 
+/K 295 0 R 
+>> 
+endobj
+1856 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1857 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1858 0 obj
+<< 
+/S /TR 
+/P 1841 0 R 
+/K [ 1859 0 R 1862 0 R 1865 0 R 1868 0 R 1871 0 R ] 
+>> 
+endobj
+1859 0 obj
+<< 
+/S /TD 
+/A [ 1860 0 R 1861 0 R ] 
+/P 1858 0 R 
+/K 297 0 R 
+>> 
+endobj
+1860 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1861 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1862 0 obj
+<< 
+/S /TD 
+/A [ 1863 0 R 1864 0 R ] 
+/P 1858 0 R 
+/K 299 0 R 
+>> 
+endobj
+1863 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1864 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1865 0 obj
+<< 
+/S /TD 
+/A [ 1866 0 R 1867 0 R ] 
+/P 1858 0 R 
+/K 301 0 R 
+>> 
+endobj
+1866 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1867 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1868 0 obj
+<< 
+/S /TD 
+/A [ 1869 0 R 1870 0 R ] 
+/P 1858 0 R 
+/K 303 0 R 
+>> 
+endobj
+1869 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1870 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1871 0 obj
+<< 
+/S /TD 
+/A [ 1872 0 R 1873 0 R ] 
+/P 1858 0 R 
+/K 305 0 R 
+>> 
+endobj
+1872 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1873 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1874 0 obj
+<< 
+/S /TR 
+/P 1841 0 R 
+/K [ 1875 0 R 1878 0 R 1881 0 R 1884 0 R 1887 0 R ] 
+>> 
+endobj
+1875 0 obj
+<< 
+/S /TD 
+/A [ 1876 0 R 1877 0 R ] 
+/P 1874 0 R 
+/K 307 0 R 
+>> 
+endobj
+1876 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1877 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1878 0 obj
+<< 
+/S /TD 
+/A [ 1879 0 R 1880 0 R ] 
+/P 1874 0 R 
+/K 309 0 R 
+>> 
+endobj
+1879 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1880 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1881 0 obj
+<< 
+/S /TD 
+/A [ 1882 0 R 1883 0 R ] 
+/P 1874 0 R 
+/K 311 0 R 
+>> 
+endobj
+1882 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1883 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1884 0 obj
+<< 
+/S /TD 
+/A [ 1885 0 R 1886 0 R ] 
+/P 1874 0 R 
+/K 313 0 R 
+>> 
+endobj
+1885 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1886 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1887 0 obj
+<< 
+/S /TD 
+/A [ 1888 0 R 1889 0 R ] 
+/P 1874 0 R 
+/K 315 0 R 
+>> 
+endobj
+1888 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1889 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1890 0 obj
+<< 
+/S /TR 
+/P 1841 0 R 
+/K [ 1891 0 R 1894 0 R 1897 0 R 1900 0 R 1903 0 R ] 
+>> 
+endobj
+1891 0 obj
+<< 
+/S /TD 
+/A [ 1892 0 R 1893 0 R ] 
+/P 1890 0 R 
+/K 317 0 R 
+>> 
+endobj
+1892 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1893 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1894 0 obj
+<< 
+/S /TD 
+/A [ 1895 0 R 1896 0 R ] 
+/P 1890 0 R 
+/K 319 0 R 
+>> 
+endobj
+1895 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1896 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1897 0 obj
+<< 
+/S /TD 
+/A [ 1898 0 R 1899 0 R ] 
+/P 1890 0 R 
+/K 321 0 R 
+>> 
+endobj
+1898 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1899 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1900 0 obj
+<< 
+/S /TD 
+/A [ 1901 0 R 1902 0 R ] 
+/P 1890 0 R 
+/K 323 0 R 
+>> 
+endobj
+1901 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1902 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1903 0 obj
+<< 
+/S /TD 
+/A [ 1904 0 R 1905 0 R ] 
+/P 1890 0 R 
+/K 325 0 R 
+>> 
+endobj
+1904 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1905 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1906 0 obj
+<< 
+/S /TR 
+/P 1841 0 R 
+/K [ 1907 0 R 1910 0 R 1913 0 R 1916 0 R 1919 0 R ] 
+>> 
+endobj
+1907 0 obj
+<< 
+/S /TD 
+/A [ 1908 0 R 1909 0 R ] 
+/P 1906 0 R 
+/K 327 0 R 
+>> 
+endobj
+1908 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1909 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1910 0 obj
+<< 
+/S /TD 
+/A [ 1911 0 R 1912 0 R ] 
+/P 1906 0 R 
+/K 329 0 R 
+>> 
+endobj
+1911 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1912 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1913 0 obj
+<< 
+/S /TD 
+/A [ 1914 0 R 1915 0 R ] 
+/P 1906 0 R 
+/K 331 0 R 
+>> 
+endobj
+1914 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1915 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1916 0 obj
+<< 
+/S /TD 
+/A [ 1917 0 R 1918 0 R ] 
+/P 1906 0 R 
+/K 333 0 R 
+>> 
+endobj
+1917 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1918 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1919 0 obj
+<< 
+/S /TD 
+/A [ 1920 0 R 1921 0 R ] 
+/P 1906 0 R 
+/K 335 0 R 
+>> 
+endobj
+1920 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1921 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1922 0 obj
+<< 
+/S /TR 
+/P 1841 0 R 
+/K [ 1923 0 R 1926 0 R 1929 0 R 1932 0 R 1935 0 R ] 
+>> 
+endobj
+1923 0 obj
+<< 
+/S /TD 
+/A [ 1924 0 R 1925 0 R ] 
+/P 1922 0 R 
+/K 337 0 R 
+>> 
+endobj
+1924 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1925 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1926 0 obj
+<< 
+/S /TD 
+/A [ 1927 0 R 1928 0 R ] 
+/P 1922 0 R 
+/K 339 0 R 
+>> 
+endobj
+1927 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1928 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1929 0 obj
+<< 
+/S /TD 
+/A [ 1930 0 R 1931 0 R ] 
+/P 1922 0 R 
+/K 341 0 R 
+>> 
+endobj
+1930 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1931 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1932 0 obj
+<< 
+/S /TD 
+/A [ 1933 0 R 1934 0 R ] 
+/P 1922 0 R 
+/K 343 0 R 
+>> 
+endobj
+1933 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1934 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1935 0 obj
+<< 
+/S /TD 
+/A [ 1936 0 R 1937 0 R ] 
+/P 1922 0 R 
+/K 345 0 R 
+>> 
+endobj
+1936 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1937 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1938 0 obj
+<< 
+/S /TR 
+/P 1841 0 R 
+/K [ 1939 0 R 1942 0 R 1945 0 R 1948 0 R 1951 0 R ] 
+>> 
+endobj
+1939 0 obj
+<< 
+/S /TD 
+/A [ 1940 0 R 1941 0 R ] 
+/P 1938 0 R 
+/K 347 0 R 
+>> 
+endobj
+1940 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1941 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1942 0 obj
+<< 
+/S /TD 
+/A [ 1943 0 R 1944 0 R ] 
+/P 1938 0 R 
+/K 349 0 R 
+>> 
+endobj
+1943 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1944 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1945 0 obj
+<< 
+/S /TD 
+/A [ 1946 0 R 1947 0 R ] 
+/P 1938 0 R 
+/K 351 0 R 
+>> 
+endobj
+1946 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1947 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1948 0 obj
+<< 
+/S /TD 
+/A [ 1949 0 R 1950 0 R ] 
+/P 1938 0 R 
+/K 353 0 R 
+>> 
+endobj
+1949 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1950 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1951 0 obj
+<< 
+/S /TD 
+/A [ 1952 0 R 1953 0 R ] 
+/P 1938 0 R 
+/K 355 0 R 
+>> 
+endobj
+1952 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1953 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1954 0 obj
+<< 
+/S /TR 
+/P 1841 0 R 
+/K [ 1955 0 R 1958 0 R 1961 0 R 1964 0 R 1967 0 R ] 
+>> 
+endobj
+1955 0 obj
+<< 
+/S /TD 
+/A [ 1956 0 R 1957 0 R ] 
+/P 1954 0 R 
+/K 357 0 R 
+>> 
+endobj
+1956 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1957 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1958 0 obj
+<< 
+/S /TD 
+/A [ 1959 0 R 1960 0 R ] 
+/P 1954 0 R 
+/K 359 0 R 
+>> 
+endobj
+1959 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1960 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1961 0 obj
+<< 
+/S /TD 
+/A [ 1962 0 R 1963 0 R ] 
+/P 1954 0 R 
+/K 361 0 R 
+>> 
+endobj
+1962 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1963 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1964 0 obj
+<< 
+/S /TD 
+/A [ 1965 0 R 1966 0 R ] 
+/P 1954 0 R 
+/K 363 0 R 
+>> 
+endobj
+1965 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1966 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1967 0 obj
+<< 
+/S /TD 
+/A [ 1968 0 R 1969 0 R ] 
+/P 1954 0 R 
+/K 365 0 R 
+>> 
+endobj
+1968 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1969 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1970 0 obj
+<< 
+/S /TR 
+/P 1841 0 R 
+/K [ 1971 0 R 1974 0 R 1977 0 R 1980 0 R 1983 0 R ] 
+>> 
+endobj
+1971 0 obj
+<< 
+/S /TD 
+/A [ 1972 0 R 1973 0 R ] 
+/P 1970 0 R 
+/K 367 0 R 
+>> 
+endobj
+1972 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1973 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1974 0 obj
+<< 
+/S /TD 
+/A [ 1975 0 R 1976 0 R ] 
+/P 1970 0 R 
+/K 369 0 R 
+>> 
+endobj
+1975 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1976 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1977 0 obj
+<< 
+/S /TD 
+/A [ 1978 0 R 1979 0 R ] 
+/P 1970 0 R 
+/K 371 0 R 
+>> 
+endobj
+1978 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1979 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1980 0 obj
+<< 
+/S /TD 
+/A [ 1981 0 R 1982 0 R ] 
+/P 1970 0 R 
+/K 373 0 R 
+>> 
+endobj
+1981 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1982 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1983 0 obj
+<< 
+/S /TD 
+/A [ 1984 0 R 1985 0 R ] 
+/P 1970 0 R 
+/K 375 0 R 
+>> 
+endobj
+1984 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1985 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1986 0 obj
+<< 
+/S /TR 
+/P 1841 0 R 
+/K [ 1987 0 R 1990 0 R 1993 0 R 1996 0 R 1999 0 R ] 
+>> 
+endobj
+1987 0 obj
+<< 
+/S /TD 
+/A [ 1988 0 R 1989 0 R ] 
+/P 1986 0 R 
+/K 377 0 R 
+>> 
+endobj
+1988 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1989 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1990 0 obj
+<< 
+/S /TD 
+/A [ 1991 0 R 1992 0 R ] 
+/P 1986 0 R 
+/K 379 0 R 
+>> 
+endobj
+1991 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1992 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1993 0 obj
+<< 
+/S /TD 
+/A [ 1994 0 R 1995 0 R ] 
+/P 1986 0 R 
+/K 381 0 R 
+>> 
+endobj
+1994 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1995 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1996 0 obj
+<< 
+/S /TD 
+/A [ 1997 0 R 1998 0 R ] 
+/P 1986 0 R 
+/K 383 0 R 
+>> 
+endobj
+1997 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+1998 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+1999 0 obj
+<< 
+/S /TD 
+/A [ 2000 0 R 2001 0 R ] 
+/P 1986 0 R 
+/K 385 0 R 
+>> 
+endobj
+2000 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2001 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2002 0 obj
+<< 
+/S /TR 
+/P 1841 0 R 
+/K [ 2003 0 R 2006 0 R 2009 0 R 2012 0 R 2015 0 R ] 
+>> 
+endobj
+2003 0 obj
+<< 
+/S /TD 
+/A [ 2004 0 R 2005 0 R ] 
+/P 2002 0 R 
+/K 387 0 R 
+>> 
+endobj
+2004 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2005 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2006 0 obj
+<< 
+/S /TD 
+/A [ 2007 0 R 2008 0 R ] 
+/P 2002 0 R 
+/K 389 0 R 
+>> 
+endobj
+2007 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2008 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2009 0 obj
+<< 
+/S /TD 
+/A [ 2010 0 R 2011 0 R ] 
+/P 2002 0 R 
+/K 391 0 R 
+>> 
+endobj
+2010 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2011 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2012 0 obj
+<< 
+/S /TD 
+/A [ 2013 0 R 2014 0 R ] 
+/P 2002 0 R 
+/K 393 0 R 
+>> 
+endobj
+2013 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2014 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2015 0 obj
+<< 
+/S /TD 
+/A [ 2016 0 R 2017 0 R ] 
+/P 2002 0 R 
+/K 395 0 R 
+>> 
+endobj
+2016 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2017 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2018 0 obj
+<< 
+/S /TR 
+/P 1841 0 R 
+/K [ 2019 0 R 2022 0 R 2025 0 R 2028 0 R 2031 0 R ] 
+>> 
+endobj
+2019 0 obj
+<< 
+/S /TD 
+/A [ 2020 0 R 2021 0 R ] 
+/P 2018 0 R 
+/K 397 0 R 
+>> 
+endobj
+2020 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2021 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2022 0 obj
+<< 
+/S /TD 
+/A [ 2023 0 R 2024 0 R ] 
+/P 2018 0 R 
+/K 399 0 R 
+>> 
+endobj
+2023 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2024 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2025 0 obj
+<< 
+/S /TD 
+/A [ 2026 0 R 2027 0 R ] 
+/P 2018 0 R 
+/K 401 0 R 
+>> 
+endobj
+2026 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2027 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2028 0 obj
+<< 
+/S /TD 
+/A [ 2029 0 R 2030 0 R ] 
+/P 2018 0 R 
+/K 403 0 R 
+>> 
+endobj
+2029 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2030 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2031 0 obj
+<< 
+/S /TD 
+/A [ 2032 0 R 2033 0 R ] 
+/P 2018 0 R 
+/K 405 0 R 
+>> 
+endobj
+2032 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2033 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2034 0 obj
+<< 
+/S /TR 
+/P 1841 0 R 
+/K [ 2035 0 R 2038 0 R 2041 0 R 2044 0 R 2047 0 R ] 
+>> 
+endobj
+2035 0 obj
+<< 
+/S /TD 
+/A [ 2036 0 R 2037 0 R ] 
+/P 2034 0 R 
+/K 407 0 R 
+>> 
+endobj
+2036 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2037 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2038 0 obj
+<< 
+/S /TD 
+/A [ 2039 0 R 2040 0 R ] 
+/P 2034 0 R 
+/K 409 0 R 
+>> 
+endobj
+2039 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2040 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2041 0 obj
+<< 
+/S /TD 
+/A [ 2042 0 R 2043 0 R ] 
+/P 2034 0 R 
+/K 411 0 R 
+>> 
+endobj
+2042 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2043 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2044 0 obj
+<< 
+/S /TD 
+/A [ 2045 0 R 2046 0 R ] 
+/P 2034 0 R 
+/K 413 0 R 
+>> 
+endobj
+2045 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2046 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2047 0 obj
+<< 
+/S /TD 
+/A [ 2048 0 R 2049 0 R ] 
+/P 2034 0 R 
+/K 415 0 R 
+>> 
+endobj
+2048 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2049 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2050 0 obj
+<< 
+/S /TR 
+/P 1841 0 R 
+/K [ 2051 0 R 2054 0 R 2057 0 R 2060 0 R 2063 0 R ] 
+>> 
+endobj
+2051 0 obj
+<< 
+/S /TD 
+/A [ 2052 0 R 2053 0 R ] 
+/P 2050 0 R 
+/K 417 0 R 
+>> 
+endobj
+2052 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2053 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2054 0 obj
+<< 
+/S /TD 
+/A [ 2055 0 R 2056 0 R ] 
+/P 2050 0 R 
+/K 419 0 R 
+>> 
+endobj
+2055 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2056 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2057 0 obj
+<< 
+/S /TD 
+/A [ 2058 0 R 2059 0 R ] 
+/P 2050 0 R 
+/K 421 0 R 
+>> 
+endobj
+2058 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2059 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2060 0 obj
+<< 
+/S /TD 
+/A [ 2061 0 R 2062 0 R ] 
+/P 2050 0 R 
+/K 423 0 R 
+>> 
+endobj
+2061 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2062 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2063 0 obj
+<< 
+/S /TD 
+/A [ 2064 0 R 2065 0 R ] 
+/P 2050 0 R 
+/K 425 0 R 
+>> 
+endobj
+2064 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2065 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2066 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 2067 0 R 2083 0 R 2099 0 R 2115 0 R 2131 0 R ] 
+/A [ 3930 0 R ] 
+>> 
+endobj
+2067 0 obj
+<< 
+/S /TR 
+/P 2066 0 R 
+/K [ 2068 0 R 2071 0 R 2074 0 R 2077 0 R 2080 0 R ] 
+>> 
+endobj
+2068 0 obj
+<< 
+/S /TD 
+/A [ 2069 0 R 2070 0 R ] 
+/P 2067 0 R 
+/K 428 0 R 
+>> 
+endobj
+2069 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2070 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2071 0 obj
+<< 
+/S /TD 
+/A [ 2072 0 R 2073 0 R ] 
+/P 2067 0 R 
+/K 430 0 R 
+>> 
+endobj
+2072 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2073 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2074 0 obj
+<< 
+/S /TD 
+/A [ 2075 0 R 2076 0 R ] 
+/P 2067 0 R 
+/K 432 0 R 
+>> 
+endobj
+2075 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2076 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2077 0 obj
+<< 
+/S /TD 
+/A [ 2078 0 R 2079 0 R ] 
+/P 2067 0 R 
+/K 434 0 R 
+>> 
+endobj
+2078 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2079 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2080 0 obj
+<< 
+/S /TD 
+/A [ 2081 0 R 2082 0 R ] 
+/P 2067 0 R 
+/K 436 0 R 
+>> 
+endobj
+2081 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2082 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2083 0 obj
+<< 
+/S /TR 
+/P 2066 0 R 
+/K [ 2084 0 R 2087 0 R 2090 0 R 2093 0 R 2096 0 R ] 
+>> 
+endobj
+2084 0 obj
+<< 
+/S /TD 
+/A [ 2085 0 R 2086 0 R ] 
+/P 2083 0 R 
+/K 438 0 R 
+>> 
+endobj
+2085 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2086 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2087 0 obj
+<< 
+/S /TD 
+/A [ 2088 0 R 2089 0 R ] 
+/P 2083 0 R 
+/K 440 0 R 
+>> 
+endobj
+2088 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2089 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2090 0 obj
+<< 
+/S /TD 
+/A [ 2091 0 R 2092 0 R ] 
+/P 2083 0 R 
+/K 442 0 R 
+>> 
+endobj
+2091 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2092 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2093 0 obj
+<< 
+/S /TD 
+/A [ 2094 0 R 2095 0 R ] 
+/P 2083 0 R 
+/K 444 0 R 
+>> 
+endobj
+2094 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2095 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2096 0 obj
+<< 
+/S /TD 
+/A [ 2097 0 R 2098 0 R ] 
+/P 2083 0 R 
+/K 446 0 R 
+>> 
+endobj
+2097 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2098 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2099 0 obj
+<< 
+/S /TR 
+/P 2066 0 R 
+/K [ 2100 0 R 2103 0 R 2106 0 R 2109 0 R 2112 0 R ] 
+>> 
+endobj
+2100 0 obj
+<< 
+/S /TD 
+/A [ 2101 0 R 2102 0 R ] 
+/P 2099 0 R 
+/K 448 0 R 
+>> 
+endobj
+2101 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2102 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2103 0 obj
+<< 
+/S /TD 
+/A [ 2104 0 R 2105 0 R ] 
+/P 2099 0 R 
+/K 450 0 R 
+>> 
+endobj
+2104 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2105 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2106 0 obj
+<< 
+/S /TD 
+/A [ 2107 0 R 2108 0 R ] 
+/P 2099 0 R 
+/K 452 0 R 
+>> 
+endobj
+2107 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2108 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2109 0 obj
+<< 
+/S /TD 
+/A [ 2110 0 R 2111 0 R ] 
+/P 2099 0 R 
+/K 454 0 R 
+>> 
+endobj
+2110 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2111 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2112 0 obj
+<< 
+/S /TD 
+/A [ 2113 0 R 2114 0 R ] 
+/P 2099 0 R 
+/K 456 0 R 
+>> 
+endobj
+2113 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2114 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2115 0 obj
+<< 
+/S /TR 
+/P 2066 0 R 
+/K [ 2116 0 R 2119 0 R 2122 0 R 2125 0 R 2128 0 R ] 
+>> 
+endobj
+2116 0 obj
+<< 
+/S /TD 
+/A [ 2117 0 R 2118 0 R ] 
+/P 2115 0 R 
+/K 458 0 R 
+>> 
+endobj
+2117 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2118 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2119 0 obj
+<< 
+/S /TD 
+/A [ 2120 0 R 2121 0 R ] 
+/P 2115 0 R 
+/K 460 0 R 
+>> 
+endobj
+2120 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2121 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2122 0 obj
+<< 
+/S /TD 
+/A [ 2123 0 R 2124 0 R ] 
+/P 2115 0 R 
+/K 462 0 R 
+>> 
+endobj
+2123 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2124 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2125 0 obj
+<< 
+/S /TD 
+/A [ 2126 0 R 2127 0 R ] 
+/P 2115 0 R 
+/K 464 0 R 
+>> 
+endobj
+2126 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2127 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2128 0 obj
+<< 
+/S /TD 
+/A [ 2129 0 R 2130 0 R ] 
+/P 2115 0 R 
+/K 466 0 R 
+>> 
+endobj
+2129 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2130 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2131 0 obj
+<< 
+/S /TR 
+/P 2066 0 R 
+/K [ 2132 0 R 2135 0 R 2138 0 R 2141 0 R 2144 0 R ] 
+>> 
+endobj
+2132 0 obj
+<< 
+/S /TD 
+/A [ 2133 0 R 2134 0 R ] 
+/P 2131 0 R 
+/K 468 0 R 
+>> 
+endobj
+2133 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2134 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2135 0 obj
+<< 
+/S /TD 
+/A [ 2136 0 R 2137 0 R ] 
+/P 2131 0 R 
+/K 470 0 R 
+>> 
+endobj
+2136 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2137 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2138 0 obj
+<< 
+/S /TD 
+/A [ 2139 0 R 2140 0 R ] 
+/P 2131 0 R 
+/K 472 0 R 
+>> 
+endobj
+2139 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2140 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2141 0 obj
+<< 
+/S /TD 
+/A [ 2142 0 R 2143 0 R ] 
+/P 2131 0 R 
+/K 474 0 R 
+>> 
+endobj
+2142 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2143 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2144 0 obj
+<< 
+/S /TD 
+/A [ 2145 0 R 2146 0 R ] 
+/P 2131 0 R 
+/K 476 0 R 
+>> 
+endobj
+2145 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2146 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2147 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 2148 0 R 2164 0 R 2180 0 R 2196 0 R 2212 0 R 2228 0 R 2244 0 R 2260 0 R 
+2276 0 R 2292 0 R 2308 0 R 2324 0 R ] 
+/A [ 3931 0 R ] 
+>> 
+endobj
+2148 0 obj
+<< 
+/S /TR 
+/P 2147 0 R 
+/K [ 2149 0 R 2152 0 R 2155 0 R 2158 0 R 2161 0 R ] 
+>> 
+endobj
+2149 0 obj
+<< 
+/S /TD 
+/A [ 2150 0 R 2151 0 R ] 
+/P 2148 0 R 
+/K 479 0 R 
+>> 
+endobj
+2150 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2151 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2152 0 obj
+<< 
+/S /TD 
+/A [ 2153 0 R 2154 0 R ] 
+/P 2148 0 R 
+/K 481 0 R 
+>> 
+endobj
+2153 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2154 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2155 0 obj
+<< 
+/S /TD 
+/A [ 2156 0 R 2157 0 R ] 
+/P 2148 0 R 
+/K 483 0 R 
+>> 
+endobj
+2156 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2157 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2158 0 obj
+<< 
+/S /TD 
+/A [ 2159 0 R 2160 0 R ] 
+/P 2148 0 R 
+/K 485 0 R 
+>> 
+endobj
+2159 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2160 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2161 0 obj
+<< 
+/S /TD 
+/A [ 2162 0 R 2163 0 R ] 
+/P 2148 0 R 
+/K 487 0 R 
+>> 
+endobj
+2162 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2163 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2164 0 obj
+<< 
+/S /TR 
+/P 2147 0 R 
+/K [ 2165 0 R 2168 0 R 2171 0 R 2174 0 R 2177 0 R ] 
+>> 
+endobj
+2165 0 obj
+<< 
+/S /TD 
+/A [ 2166 0 R 2167 0 R ] 
+/P 2164 0 R 
+/K 489 0 R 
+>> 
+endobj
+2166 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2167 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2168 0 obj
+<< 
+/S /TD 
+/A [ 2169 0 R 2170 0 R ] 
+/P 2164 0 R 
+/K 491 0 R 
+>> 
+endobj
+2169 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2170 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2171 0 obj
+<< 
+/S /TD 
+/A [ 2172 0 R 2173 0 R ] 
+/P 2164 0 R 
+/K 493 0 R 
+>> 
+endobj
+2172 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2173 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2174 0 obj
+<< 
+/S /TD 
+/A [ 2175 0 R 2176 0 R ] 
+/P 2164 0 R 
+/K 495 0 R 
+>> 
+endobj
+2175 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2176 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2177 0 obj
+<< 
+/S /TD 
+/A [ 2178 0 R 2179 0 R ] 
+/P 2164 0 R 
+/K 497 0 R 
+>> 
+endobj
+2178 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2179 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2180 0 obj
+<< 
+/S /TR 
+/P 2147 0 R 
+/K [ 2181 0 R 2184 0 R 2187 0 R 2190 0 R 2193 0 R ] 
+>> 
+endobj
+2181 0 obj
+<< 
+/S /TD 
+/A [ 2182 0 R 2183 0 R ] 
+/P 2180 0 R 
+/K 499 0 R 
+>> 
+endobj
+2182 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2183 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2184 0 obj
+<< 
+/S /TD 
+/A [ 2185 0 R 2186 0 R ] 
+/P 2180 0 R 
+/K 501 0 R 
+>> 
+endobj
+2185 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2186 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2187 0 obj
+<< 
+/S /TD 
+/A [ 2188 0 R 2189 0 R ] 
+/P 2180 0 R 
+/K 503 0 R 
+>> 
+endobj
+2188 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2189 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2190 0 obj
+<< 
+/S /TD 
+/A [ 2191 0 R 2192 0 R ] 
+/P 2180 0 R 
+/K 505 0 R 
+>> 
+endobj
+2191 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2192 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2193 0 obj
+<< 
+/S /TD 
+/A [ 2194 0 R 2195 0 R ] 
+/P 2180 0 R 
+/K 507 0 R 
+>> 
+endobj
+2194 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2195 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2196 0 obj
+<< 
+/S /TR 
+/P 2147 0 R 
+/K [ 2197 0 R 2200 0 R 2203 0 R 2206 0 R 2209 0 R ] 
+>> 
+endobj
+2197 0 obj
+<< 
+/S /TD 
+/A [ 2198 0 R 2199 0 R ] 
+/P 2196 0 R 
+/K 509 0 R 
+>> 
+endobj
+2198 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2199 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2200 0 obj
+<< 
+/S /TD 
+/A [ 2201 0 R 2202 0 R ] 
+/P 2196 0 R 
+/K 511 0 R 
+>> 
+endobj
+2201 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2202 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2203 0 obj
+<< 
+/S /TD 
+/A [ 2204 0 R 2205 0 R ] 
+/P 2196 0 R 
+/K 513 0 R 
+>> 
+endobj
+2204 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2205 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2206 0 obj
+<< 
+/S /TD 
+/A [ 2207 0 R 2208 0 R ] 
+/P 2196 0 R 
+/K 515 0 R 
+>> 
+endobj
+2207 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2208 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2209 0 obj
+<< 
+/S /TD 
+/A [ 2210 0 R 2211 0 R ] 
+/P 2196 0 R 
+/K 517 0 R 
+>> 
+endobj
+2210 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2211 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2212 0 obj
+<< 
+/S /TR 
+/P 2147 0 R 
+/K [ 2213 0 R 2216 0 R 2219 0 R 2222 0 R 2225 0 R ] 
+>> 
+endobj
+2213 0 obj
+<< 
+/S /TD 
+/A [ 2214 0 R 2215 0 R ] 
+/P 2212 0 R 
+/K 519 0 R 
+>> 
+endobj
+2214 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2215 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2216 0 obj
+<< 
+/S /TD 
+/A [ 2217 0 R 2218 0 R ] 
+/P 2212 0 R 
+/K 521 0 R 
+>> 
+endobj
+2217 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2218 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2219 0 obj
+<< 
+/S /TD 
+/A [ 2220 0 R 2221 0 R ] 
+/P 2212 0 R 
+/K 523 0 R 
+>> 
+endobj
+2220 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2221 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2222 0 obj
+<< 
+/S /TD 
+/A [ 2223 0 R 2224 0 R ] 
+/P 2212 0 R 
+/K 525 0 R 
+>> 
+endobj
+2223 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2224 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2225 0 obj
+<< 
+/S /TD 
+/A [ 2226 0 R 2227 0 R ] 
+/P 2212 0 R 
+/K 527 0 R 
+>> 
+endobj
+2226 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2227 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2228 0 obj
+<< 
+/S /TR 
+/P 2147 0 R 
+/K [ 2229 0 R 2232 0 R 2235 0 R 2238 0 R 2241 0 R ] 
+>> 
+endobj
+2229 0 obj
+<< 
+/S /TD 
+/A [ 2230 0 R 2231 0 R ] 
+/P 2228 0 R 
+/K 529 0 R 
+>> 
+endobj
+2230 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2231 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2232 0 obj
+<< 
+/S /TD 
+/A [ 2233 0 R 2234 0 R ] 
+/P 2228 0 R 
+/K 531 0 R 
+>> 
+endobj
+2233 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2234 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2235 0 obj
+<< 
+/S /TD 
+/A [ 2236 0 R 2237 0 R ] 
+/P 2228 0 R 
+/K 533 0 R 
+>> 
+endobj
+2236 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2237 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2238 0 obj
+<< 
+/S /TD 
+/A [ 2239 0 R 2240 0 R ] 
+/P 2228 0 R 
+/K 535 0 R 
+>> 
+endobj
+2239 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2240 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2241 0 obj
+<< 
+/S /TD 
+/A [ 2242 0 R 2243 0 R ] 
+/P 2228 0 R 
+/K 537 0 R 
+>> 
+endobj
+2242 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2243 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2244 0 obj
+<< 
+/S /TR 
+/P 2147 0 R 
+/K [ 2245 0 R 2248 0 R 2251 0 R 2254 0 R 2257 0 R ] 
+>> 
+endobj
+2245 0 obj
+<< 
+/S /TD 
+/A [ 2246 0 R 2247 0 R ] 
+/P 2244 0 R 
+/K 539 0 R 
+>> 
+endobj
+2246 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2247 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2248 0 obj
+<< 
+/S /TD 
+/A [ 2249 0 R 2250 0 R ] 
+/P 2244 0 R 
+/K 541 0 R 
+>> 
+endobj
+2249 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2250 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2251 0 obj
+<< 
+/S /TD 
+/A [ 2252 0 R 2253 0 R ] 
+/P 2244 0 R 
+/K 543 0 R 
+>> 
+endobj
+2252 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2253 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2254 0 obj
+<< 
+/S /TD 
+/A [ 2255 0 R 2256 0 R ] 
+/P 2244 0 R 
+/K 545 0 R 
+>> 
+endobj
+2255 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2256 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2257 0 obj
+<< 
+/S /TD 
+/A [ 2258 0 R 2259 0 R ] 
+/P 2244 0 R 
+/K 547 0 R 
+>> 
+endobj
+2258 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2259 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2260 0 obj
+<< 
+/S /TR 
+/P 2147 0 R 
+/K [ 2261 0 R 2264 0 R 2267 0 R 2270 0 R 2273 0 R ] 
+>> 
+endobj
+2261 0 obj
+<< 
+/S /TD 
+/A [ 2262 0 R 2263 0 R ] 
+/P 2260 0 R 
+/K 549 0 R 
+>> 
+endobj
+2262 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2263 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2264 0 obj
+<< 
+/S /TD 
+/A [ 2265 0 R 2266 0 R ] 
+/P 2260 0 R 
+/K 551 0 R 
+>> 
+endobj
+2265 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2266 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2267 0 obj
+<< 
+/S /TD 
+/A [ 2268 0 R 2269 0 R ] 
+/P 2260 0 R 
+/K 553 0 R 
+>> 
+endobj
+2268 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2269 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2270 0 obj
+<< 
+/S /TD 
+/A [ 2271 0 R 2272 0 R ] 
+/P 2260 0 R 
+/K 555 0 R 
+>> 
+endobj
+2271 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2272 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2273 0 obj
+<< 
+/S /TD 
+/A [ 2274 0 R 2275 0 R ] 
+/P 2260 0 R 
+/K 557 0 R 
+>> 
+endobj
+2274 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2275 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2276 0 obj
+<< 
+/S /TR 
+/P 2147 0 R 
+/K [ 2277 0 R 2280 0 R 2283 0 R 2286 0 R 2289 0 R ] 
+>> 
+endobj
+2277 0 obj
+<< 
+/S /TD 
+/A [ 2278 0 R 2279 0 R ] 
+/P 2276 0 R 
+/K 559 0 R 
+>> 
+endobj
+2278 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2279 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2280 0 obj
+<< 
+/S /TD 
+/A [ 2281 0 R 2282 0 R ] 
+/P 2276 0 R 
+/K 561 0 R 
+>> 
+endobj
+2281 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2282 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2283 0 obj
+<< 
+/S /TD 
+/A [ 2284 0 R 2285 0 R ] 
+/P 2276 0 R 
+/K 563 0 R 
+>> 
+endobj
+2284 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2285 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2286 0 obj
+<< 
+/S /TD 
+/A [ 2287 0 R 2288 0 R ] 
+/P 2276 0 R 
+/K 565 0 R 
+>> 
+endobj
+2287 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2288 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2289 0 obj
+<< 
+/S /TD 
+/A [ 2290 0 R 2291 0 R ] 
+/P 2276 0 R 
+/K 567 0 R 
+>> 
+endobj
+2290 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2291 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2292 0 obj
+<< 
+/S /TR 
+/P 2147 0 R 
+/K [ 2293 0 R 2296 0 R 2299 0 R 2302 0 R 2305 0 R ] 
+>> 
+endobj
+2293 0 obj
+<< 
+/S /TD 
+/A [ 2294 0 R 2295 0 R ] 
+/P 2292 0 R 
+/K 569 0 R 
+>> 
+endobj
+2294 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2295 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2296 0 obj
+<< 
+/S /TD 
+/A [ 2297 0 R 2298 0 R ] 
+/P 2292 0 R 
+/K 571 0 R 
+>> 
+endobj
+2297 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2298 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2299 0 obj
+<< 
+/S /TD 
+/A [ 2300 0 R 2301 0 R ] 
+/P 2292 0 R 
+/K 573 0 R 
+>> 
+endobj
+2300 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2301 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2302 0 obj
+<< 
+/S /TD 
+/A [ 2303 0 R 2304 0 R ] 
+/P 2292 0 R 
+/K 575 0 R 
+>> 
+endobj
+2303 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2304 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2305 0 obj
+<< 
+/S /TD 
+/A [ 2306 0 R 2307 0 R ] 
+/P 2292 0 R 
+/K 577 0 R 
+>> 
+endobj
+2306 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2307 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2308 0 obj
+<< 
+/S /TR 
+/P 2147 0 R 
+/K [ 2309 0 R 2312 0 R 2315 0 R 2318 0 R 2321 0 R ] 
+>> 
+endobj
+2309 0 obj
+<< 
+/S /TD 
+/A [ 2310 0 R 2311 0 R ] 
+/P 2308 0 R 
+/K 579 0 R 
+>> 
+endobj
+2310 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2311 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2312 0 obj
+<< 
+/S /TD 
+/A [ 2313 0 R 2314 0 R ] 
+/P 2308 0 R 
+/K 581 0 R 
+>> 
+endobj
+2313 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2314 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2315 0 obj
+<< 
+/S /TD 
+/A [ 2316 0 R 2317 0 R ] 
+/P 2308 0 R 
+/K 583 0 R 
+>> 
+endobj
+2316 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2317 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2318 0 obj
+<< 
+/S /TD 
+/A [ 2319 0 R 2320 0 R ] 
+/P 2308 0 R 
+/K 585 0 R 
+>> 
+endobj
+2319 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2320 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2321 0 obj
+<< 
+/S /TD 
+/A [ 2322 0 R 2323 0 R ] 
+/P 2308 0 R 
+/K 587 0 R 
+>> 
+endobj
+2322 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2323 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2324 0 obj
+<< 
+/S /TR 
+/P 2147 0 R 
+/K [ 2325 0 R 2328 0 R 2331 0 R 2334 0 R 2337 0 R ] 
+>> 
+endobj
+2325 0 obj
+<< 
+/S /TD 
+/A [ 2326 0 R 2327 0 R ] 
+/P 2324 0 R 
+/K 589 0 R 
+>> 
+endobj
+2326 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2327 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2328 0 obj
+<< 
+/S /TD 
+/A [ 2329 0 R 2330 0 R ] 
+/P 2324 0 R 
+/K 591 0 R 
+>> 
+endobj
+2329 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2330 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2331 0 obj
+<< 
+/S /TD 
+/A [ 2332 0 R 2333 0 R ] 
+/P 2324 0 R 
+/K 593 0 R 
+>> 
+endobj
+2332 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2333 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2334 0 obj
+<< 
+/S /TD 
+/A [ 2335 0 R 2336 0 R ] 
+/P 2324 0 R 
+/K 595 0 R 
+>> 
+endobj
+2335 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2336 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2337 0 obj
+<< 
+/S /TD 
+/A [ 2338 0 R 2339 0 R ] 
+/P 2324 0 R 
+/K 597 0 R 
+>> 
+endobj
+2338 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2339 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2340 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 2341 0 R 2357 0 R 2373 0 R 2389 0 R 2405 0 R 2421 0 R 2437 0 R 2453 0 R 
+2469 0 R 2485 0 R ] 
+/A [ 3932 0 R ] 
+>> 
+endobj
+2341 0 obj
+<< 
+/S /TR 
+/P 2340 0 R 
+/K [ 2342 0 R 2345 0 R 2348 0 R 2351 0 R 2354 0 R ] 
+>> 
+endobj
+2342 0 obj
+<< 
+/S /TD 
+/A [ 2343 0 R 2344 0 R ] 
+/P 2341 0 R 
+/K 600 0 R 
+>> 
+endobj
+2343 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2344 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2345 0 obj
+<< 
+/S /TD 
+/A [ 2346 0 R 2347 0 R ] 
+/P 2341 0 R 
+/K 602 0 R 
+>> 
+endobj
+2346 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2347 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2348 0 obj
+<< 
+/S /TD 
+/A [ 2349 0 R 2350 0 R ] 
+/P 2341 0 R 
+/K 604 0 R 
+>> 
+endobj
+2349 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2350 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2351 0 obj
+<< 
+/S /TD 
+/A [ 2352 0 R 2353 0 R ] 
+/P 2341 0 R 
+/K 606 0 R 
+>> 
+endobj
+2352 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2353 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2354 0 obj
+<< 
+/S /TD 
+/A [ 2355 0 R 2356 0 R ] 
+/P 2341 0 R 
+/K 608 0 R 
+>> 
+endobj
+2355 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2356 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2357 0 obj
+<< 
+/S /TR 
+/P 2340 0 R 
+/K [ 2358 0 R 2361 0 R 2364 0 R 2367 0 R 2370 0 R ] 
+>> 
+endobj
+2358 0 obj
+<< 
+/S /TD 
+/A [ 2359 0 R 2360 0 R ] 
+/P 2357 0 R 
+/K 610 0 R 
+>> 
+endobj
+2359 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2360 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2361 0 obj
+<< 
+/S /TD 
+/A [ 2362 0 R 2363 0 R ] 
+/P 2357 0 R 
+/K 612 0 R 
+>> 
+endobj
+2362 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2363 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2364 0 obj
+<< 
+/S /TD 
+/A [ 2365 0 R 2366 0 R ] 
+/P 2357 0 R 
+/K 614 0 R 
+>> 
+endobj
+2365 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2366 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2367 0 obj
+<< 
+/S /TD 
+/A [ 2368 0 R 2369 0 R ] 
+/P 2357 0 R 
+/K 616 0 R 
+>> 
+endobj
+2368 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2369 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2370 0 obj
+<< 
+/S /TD 
+/A [ 2371 0 R 2372 0 R ] 
+/P 2357 0 R 
+/K 618 0 R 
+>> 
+endobj
+2371 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2372 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2373 0 obj
+<< 
+/S /TR 
+/P 2340 0 R 
+/K [ 2374 0 R 2377 0 R 2380 0 R 2383 0 R 2386 0 R ] 
+>> 
+endobj
+2374 0 obj
+<< 
+/S /TD 
+/A [ 2375 0 R 2376 0 R ] 
+/P 2373 0 R 
+/K 620 0 R 
+>> 
+endobj
+2375 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2376 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2377 0 obj
+<< 
+/S /TD 
+/A [ 2378 0 R 2379 0 R ] 
+/P 2373 0 R 
+/K 622 0 R 
+>> 
+endobj
+2378 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2379 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2380 0 obj
+<< 
+/S /TD 
+/A [ 2381 0 R 2382 0 R ] 
+/P 2373 0 R 
+/K 624 0 R 
+>> 
+endobj
+2381 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2382 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2383 0 obj
+<< 
+/S /TD 
+/A [ 2384 0 R 2385 0 R ] 
+/P 2373 0 R 
+/K 626 0 R 
+>> 
+endobj
+2384 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2385 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2386 0 obj
+<< 
+/S /TD 
+/A [ 2387 0 R 2388 0 R ] 
+/P 2373 0 R 
+/K 628 0 R 
+>> 
+endobj
+2387 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2388 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2389 0 obj
+<< 
+/S /TR 
+/P 2340 0 R 
+/K [ 2390 0 R 2393 0 R 2396 0 R 2399 0 R 2402 0 R ] 
+>> 
+endobj
+2390 0 obj
+<< 
+/S /TD 
+/A [ 2391 0 R 2392 0 R ] 
+/P 2389 0 R 
+/K 630 0 R 
+>> 
+endobj
+2391 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2392 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2393 0 obj
+<< 
+/S /TD 
+/A [ 2394 0 R 2395 0 R ] 
+/P 2389 0 R 
+/K 632 0 R 
+>> 
+endobj
+2394 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2395 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2396 0 obj
+<< 
+/S /TD 
+/A [ 2397 0 R 2398 0 R ] 
+/P 2389 0 R 
+/K 634 0 R 
+>> 
+endobj
+2397 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2398 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2399 0 obj
+<< 
+/S /TD 
+/A [ 2400 0 R 2401 0 R ] 
+/P 2389 0 R 
+/K 636 0 R 
+>> 
+endobj
+2400 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2401 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2402 0 obj
+<< 
+/S /TD 
+/A [ 2403 0 R 2404 0 R ] 
+/P 2389 0 R 
+/K 638 0 R 
+>> 
+endobj
+2403 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2404 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2405 0 obj
+<< 
+/S /TR 
+/P 2340 0 R 
+/K [ 2406 0 R 2409 0 R 2412 0 R 2415 0 R 2418 0 R ] 
+>> 
+endobj
+2406 0 obj
+<< 
+/S /TD 
+/A [ 2407 0 R 2408 0 R ] 
+/P 2405 0 R 
+/K 640 0 R 
+>> 
+endobj
+2407 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2408 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2409 0 obj
+<< 
+/S /TD 
+/A [ 2410 0 R 2411 0 R ] 
+/P 2405 0 R 
+/K 642 0 R 
+>> 
+endobj
+2410 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2411 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2412 0 obj
+<< 
+/S /TD 
+/A [ 2413 0 R 2414 0 R ] 
+/P 2405 0 R 
+/K 644 0 R 
+>> 
+endobj
+2413 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2414 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2415 0 obj
+<< 
+/S /TD 
+/A [ 2416 0 R 2417 0 R ] 
+/P 2405 0 R 
+/K 646 0 R 
+>> 
+endobj
+2416 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2417 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2418 0 obj
+<< 
+/S /TD 
+/A [ 2419 0 R 2420 0 R ] 
+/P 2405 0 R 
+/K 648 0 R 
+>> 
+endobj
+2419 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2420 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2421 0 obj
+<< 
+/S /TR 
+/P 2340 0 R 
+/K [ 2422 0 R 2425 0 R 2428 0 R 2431 0 R 2434 0 R ] 
+>> 
+endobj
+2422 0 obj
+<< 
+/S /TD 
+/A [ 2423 0 R 2424 0 R ] 
+/P 2421 0 R 
+/K 650 0 R 
+>> 
+endobj
+2423 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2424 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2425 0 obj
+<< 
+/S /TD 
+/A [ 2426 0 R 2427 0 R ] 
+/P 2421 0 R 
+/K 652 0 R 
+>> 
+endobj
+2426 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2427 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2428 0 obj
+<< 
+/S /TD 
+/A [ 2429 0 R 2430 0 R ] 
+/P 2421 0 R 
+/K 654 0 R 
+>> 
+endobj
+2429 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2430 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2431 0 obj
+<< 
+/S /TD 
+/A [ 2432 0 R 2433 0 R ] 
+/P 2421 0 R 
+/K 656 0 R 
+>> 
+endobj
+2432 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2433 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2434 0 obj
+<< 
+/S /TD 
+/A [ 2435 0 R 2436 0 R ] 
+/P 2421 0 R 
+/K 658 0 R 
+>> 
+endobj
+2435 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2436 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2437 0 obj
+<< 
+/S /TR 
+/P 2340 0 R 
+/K [ 2438 0 R 2441 0 R 2444 0 R 2447 0 R 2450 0 R ] 
+>> 
+endobj
+2438 0 obj
+<< 
+/S /TD 
+/A [ 2439 0 R 2440 0 R ] 
+/P 2437 0 R 
+/K 660 0 R 
+>> 
+endobj
+2439 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2440 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2441 0 obj
+<< 
+/S /TD 
+/A [ 2442 0 R 2443 0 R ] 
+/P 2437 0 R 
+/K 662 0 R 
+>> 
+endobj
+2442 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2443 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2444 0 obj
+<< 
+/S /TD 
+/A [ 2445 0 R 2446 0 R ] 
+/P 2437 0 R 
+/K 664 0 R 
+>> 
+endobj
+2445 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2446 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2447 0 obj
+<< 
+/S /TD 
+/A [ 2448 0 R 2449 0 R ] 
+/P 2437 0 R 
+/K 666 0 R 
+>> 
+endobj
+2448 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2449 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2450 0 obj
+<< 
+/S /TD 
+/A [ 2451 0 R 2452 0 R ] 
+/P 2437 0 R 
+/K 668 0 R 
+>> 
+endobj
+2451 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2452 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2453 0 obj
+<< 
+/S /TR 
+/P 2340 0 R 
+/K [ 2454 0 R 2457 0 R 2460 0 R 2463 0 R 2466 0 R ] 
+>> 
+endobj
+2454 0 obj
+<< 
+/S /TD 
+/A [ 2455 0 R 2456 0 R ] 
+/P 2453 0 R 
+/K 670 0 R 
+>> 
+endobj
+2455 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2456 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2457 0 obj
+<< 
+/S /TD 
+/A [ 2458 0 R 2459 0 R ] 
+/P 2453 0 R 
+/K 672 0 R 
+>> 
+endobj
+2458 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2459 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2460 0 obj
+<< 
+/S /TD 
+/A [ 2461 0 R 2462 0 R ] 
+/P 2453 0 R 
+/K 674 0 R 
+>> 
+endobj
+2461 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2462 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2463 0 obj
+<< 
+/S /TD 
+/A [ 2464 0 R 2465 0 R ] 
+/P 2453 0 R 
+/K 676 0 R 
+>> 
+endobj
+2464 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2465 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2466 0 obj
+<< 
+/S /TD 
+/A [ 2467 0 R 2468 0 R ] 
+/P 2453 0 R 
+/K 678 0 R 
+>> 
+endobj
+2467 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2468 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2469 0 obj
+<< 
+/S /TR 
+/P 2340 0 R 
+/K [ 2470 0 R 2473 0 R 2476 0 R 2479 0 R 2482 0 R ] 
+>> 
+endobj
+2470 0 obj
+<< 
+/S /TD 
+/A [ 2471 0 R 2472 0 R ] 
+/P 2469 0 R 
+/K 680 0 R 
+>> 
+endobj
+2471 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2472 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2473 0 obj
+<< 
+/S /TD 
+/A [ 2474 0 R 2475 0 R ] 
+/P 2469 0 R 
+/K 682 0 R 
+>> 
+endobj
+2474 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2475 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2476 0 obj
+<< 
+/S /TD 
+/A [ 2477 0 R 2478 0 R ] 
+/P 2469 0 R 
+/K 684 0 R 
+>> 
+endobj
+2477 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2478 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2479 0 obj
+<< 
+/S /TD 
+/A [ 2480 0 R 2481 0 R ] 
+/P 2469 0 R 
+/K 686 0 R 
+>> 
+endobj
+2480 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2481 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2482 0 obj
+<< 
+/S /TD 
+/A [ 2483 0 R 2484 0 R ] 
+/P 2469 0 R 
+/K 688 0 R 
+>> 
+endobj
+2483 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2484 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2485 0 obj
+<< 
+/S /TR 
+/P 2340 0 R 
+/K [ 2486 0 R 2489 0 R 2492 0 R 2495 0 R 2498 0 R ] 
+>> 
+endobj
+2486 0 obj
+<< 
+/S /TD 
+/A [ 2487 0 R 2488 0 R ] 
+/P 2485 0 R 
+/K 690 0 R 
+>> 
+endobj
+2487 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2488 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2489 0 obj
+<< 
+/S /TD 
+/A [ 2490 0 R 2491 0 R ] 
+/P 2485 0 R 
+/K 692 0 R 
+>> 
+endobj
+2490 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2491 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2492 0 obj
+<< 
+/S /TD 
+/A [ 2493 0 R 2494 0 R ] 
+/P 2485 0 R 
+/K 694 0 R 
+>> 
+endobj
+2493 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2494 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2495 0 obj
+<< 
+/S /TD 
+/A [ 2496 0 R 2497 0 R ] 
+/P 2485 0 R 
+/K 696 0 R 
+>> 
+endobj
+2496 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2497 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2498 0 obj
+<< 
+/S /TD 
+/A [ 2499 0 R 2500 0 R ] 
+/P 2485 0 R 
+/K 698 0 R 
+>> 
+endobj
+2499 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2500 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2501 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 2502 0 R 2518 0 R 2534 0 R 2550 0 R 2566 0 R ] 
+/A [ 3933 0 R ] 
+>> 
+endobj
+2502 0 obj
+<< 
+/S /TR 
+/P 2501 0 R 
+/K [ 2503 0 R 2506 0 R 2509 0 R 2512 0 R 2515 0 R ] 
+>> 
+endobj
+2503 0 obj
+<< 
+/S /TD 
+/A [ 2504 0 R 2505 0 R ] 
+/P 2502 0 R 
+/K 710 0 R 
+>> 
+endobj
+2504 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2505 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2506 0 obj
+<< 
+/S /TD 
+/A [ 2507 0 R 2508 0 R ] 
+/P 2502 0 R 
+/K 712 0 R 
+>> 
+endobj
+2507 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2508 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2509 0 obj
+<< 
+/S /TD 
+/A [ 2510 0 R 2511 0 R ] 
+/P 2502 0 R 
+/K 714 0 R 
+>> 
+endobj
+2510 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2511 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2512 0 obj
+<< 
+/S /TD 
+/A [ 2513 0 R 2514 0 R ] 
+/P 2502 0 R 
+/K 716 0 R 
+>> 
+endobj
+2513 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2514 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2515 0 obj
+<< 
+/S /TD 
+/A [ 2516 0 R 2517 0 R ] 
+/P 2502 0 R 
+/K 718 0 R 
+>> 
+endobj
+2516 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2517 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2518 0 obj
+<< 
+/S /TR 
+/P 2501 0 R 
+/K [ 2519 0 R 2522 0 R 2525 0 R 2528 0 R 2531 0 R ] 
+>> 
+endobj
+2519 0 obj
+<< 
+/S /TD 
+/A [ 2520 0 R 2521 0 R ] 
+/P 2518 0 R 
+/K 720 0 R 
+>> 
+endobj
+2520 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2521 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2522 0 obj
+<< 
+/S /TD 
+/A [ 2523 0 R 2524 0 R ] 
+/P 2518 0 R 
+/K 722 0 R 
+>> 
+endobj
+2523 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2524 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2525 0 obj
+<< 
+/S /TD 
+/A [ 2526 0 R 2527 0 R ] 
+/P 2518 0 R 
+/K 724 0 R 
+>> 
+endobj
+2526 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2527 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2528 0 obj
+<< 
+/S /TD 
+/A [ 2529 0 R 2530 0 R ] 
+/P 2518 0 R 
+/K 726 0 R 
+>> 
+endobj
+2529 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2530 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2531 0 obj
+<< 
+/S /TD 
+/A [ 2532 0 R 2533 0 R ] 
+/P 2518 0 R 
+/K 728 0 R 
+>> 
+endobj
+2532 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2533 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2534 0 obj
+<< 
+/S /TR 
+/P 2501 0 R 
+/K [ 2535 0 R 2538 0 R 2541 0 R 2544 0 R 2547 0 R ] 
+>> 
+endobj
+2535 0 obj
+<< 
+/S /TD 
+/A [ 2536 0 R 2537 0 R ] 
+/P 2534 0 R 
+/K 730 0 R 
+>> 
+endobj
+2536 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2537 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2538 0 obj
+<< 
+/S /TD 
+/A [ 2539 0 R 2540 0 R ] 
+/P 2534 0 R 
+/K 732 0 R 
+>> 
+endobj
+2539 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2540 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2541 0 obj
+<< 
+/S /TD 
+/A [ 2542 0 R 2543 0 R ] 
+/P 2534 0 R 
+/K 734 0 R 
+>> 
+endobj
+2542 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2543 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2544 0 obj
+<< 
+/S /TD 
+/A [ 2545 0 R 2546 0 R ] 
+/P 2534 0 R 
+/K 736 0 R 
+>> 
+endobj
+2545 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2546 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2547 0 obj
+<< 
+/S /TD 
+/A [ 2548 0 R 2549 0 R ] 
+/P 2534 0 R 
+/K 738 0 R 
+>> 
+endobj
+2548 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2549 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2550 0 obj
+<< 
+/S /TR 
+/P 2501 0 R 
+/K [ 2551 0 R 2554 0 R 2557 0 R 2560 0 R 2563 0 R ] 
+>> 
+endobj
+2551 0 obj
+<< 
+/S /TD 
+/A [ 2552 0 R 2553 0 R ] 
+/P 2550 0 R 
+/K 740 0 R 
+>> 
+endobj
+2552 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2553 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2554 0 obj
+<< 
+/S /TD 
+/A [ 2555 0 R 2556 0 R ] 
+/P 2550 0 R 
+/K 742 0 R 
+>> 
+endobj
+2555 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2556 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2557 0 obj
+<< 
+/S /TD 
+/A [ 2558 0 R 2559 0 R ] 
+/P 2550 0 R 
+/K 744 0 R 
+>> 
+endobj
+2558 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2559 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2560 0 obj
+<< 
+/S /TD 
+/A [ 2561 0 R 2562 0 R ] 
+/P 2550 0 R 
+/K 746 0 R 
+>> 
+endobj
+2561 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2562 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2563 0 obj
+<< 
+/S /TD 
+/A [ 2564 0 R 2565 0 R ] 
+/P 2550 0 R 
+/K 748 0 R 
+>> 
+endobj
+2564 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2565 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2566 0 obj
+<< 
+/S /TR 
+/P 2501 0 R 
+/K [ 2567 0 R 2570 0 R 2573 0 R 2576 0 R 2579 0 R ] 
+>> 
+endobj
+2567 0 obj
+<< 
+/S /TD 
+/A [ 2568 0 R 2569 0 R ] 
+/P 2566 0 R 
+/K 750 0 R 
+>> 
+endobj
+2568 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2569 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2570 0 obj
+<< 
+/S /TD 
+/A [ 2571 0 R 2572 0 R ] 
+/P 2566 0 R 
+/K 752 0 R 
+>> 
+endobj
+2571 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2572 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2573 0 obj
+<< 
+/S /TD 
+/A [ 2574 0 R 2575 0 R ] 
+/P 2566 0 R 
+/K 754 0 R 
+>> 
+endobj
+2574 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2575 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2576 0 obj
+<< 
+/S /TD 
+/A [ 2577 0 R 2578 0 R ] 
+/P 2566 0 R 
+/K 756 0 R 
+>> 
+endobj
+2577 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2578 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2579 0 obj
+<< 
+/S /TD 
+/A [ 2580 0 R 2581 0 R ] 
+/P 2566 0 R 
+/K 758 0 R 
+>> 
+endobj
+2580 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2581 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2582 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 2583 0 R 2599 0 R 2615 0 R 2631 0 R 2647 0 R 2663 0 R 2679 0 R 2695 0 R 
+2711 0 R 2727 0 R 2743 0 R 2759 0 R 2775 0 R 2791 0 R 2807 0 R 2823 0 R 
+2839 0 R ] 
+/A [ 3934 0 R ] 
+>> 
+endobj
+2583 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2584 0 R 2587 0 R 2590 0 R 2593 0 R 2596 0 R ] 
+>> 
+endobj
+2584 0 obj
+<< 
+/S /TD 
+/A [ 2585 0 R 2586 0 R ] 
+/P 2583 0 R 
+/K 765 0 R 
+>> 
+endobj
+2585 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2586 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2587 0 obj
+<< 
+/S /TD 
+/A [ 2588 0 R 2589 0 R ] 
+/P 2583 0 R 
+/K 767 0 R 
+>> 
+endobj
+2588 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2589 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2590 0 obj
+<< 
+/S /TD 
+/A [ 2591 0 R 2592 0 R ] 
+/P 2583 0 R 
+/K 769 0 R 
+>> 
+endobj
+2591 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2592 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2593 0 obj
+<< 
+/S /TD 
+/A [ 2594 0 R 2595 0 R ] 
+/P 2583 0 R 
+/K 771 0 R 
+>> 
+endobj
+2594 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2595 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2596 0 obj
+<< 
+/S /TD 
+/A [ 2597 0 R 2598 0 R ] 
+/P 2583 0 R 
+/K 773 0 R 
+>> 
+endobj
+2597 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2598 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2599 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2600 0 R 2603 0 R 2606 0 R 2609 0 R 2612 0 R ] 
+>> 
+endobj
+2600 0 obj
+<< 
+/S /TD 
+/A [ 2601 0 R 2602 0 R ] 
+/P 2599 0 R 
+/K 775 0 R 
+>> 
+endobj
+2601 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2602 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2603 0 obj
+<< 
+/S /TD 
+/A [ 2604 0 R 2605 0 R ] 
+/P 2599 0 R 
+/K 777 0 R 
+>> 
+endobj
+2604 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2605 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2606 0 obj
+<< 
+/S /TD 
+/A [ 2607 0 R 2608 0 R ] 
+/P 2599 0 R 
+/K 779 0 R 
+>> 
+endobj
+2607 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2608 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2609 0 obj
+<< 
+/S /TD 
+/A [ 2610 0 R 2611 0 R ] 
+/P 2599 0 R 
+/K [ 781 0 R 783 0 R ] 
+>> 
+endobj
+2610 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2611 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2612 0 obj
+<< 
+/S /TD 
+/A [ 2613 0 R 2614 0 R ] 
+/P 2599 0 R 
+/K [ 785 0 R 787 0 R ] 
+>> 
+endobj
+2613 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2614 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2615 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2616 0 R 2619 0 R 2622 0 R 2625 0 R 2628 0 R ] 
+>> 
+endobj
+2616 0 obj
+<< 
+/S /TD 
+/A [ 2617 0 R 2618 0 R ] 
+/P 2615 0 R 
+/K 789 0 R 
+>> 
+endobj
+2617 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2618 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2619 0 obj
+<< 
+/S /TD 
+/A [ 2620 0 R 2621 0 R ] 
+/P 2615 0 R 
+/K 791 0 R 
+>> 
+endobj
+2620 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2621 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2622 0 obj
+<< 
+/S /TD 
+/A [ 2623 0 R 2624 0 R ] 
+/P 2615 0 R 
+/K 793 0 R 
+>> 
+endobj
+2623 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2624 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2625 0 obj
+<< 
+/S /TD 
+/A [ 2626 0 R 2627 0 R ] 
+/P 2615 0 R 
+/K 795 0 R 
+>> 
+endobj
+2626 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2627 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2628 0 obj
+<< 
+/S /TD 
+/A [ 2629 0 R 2630 0 R ] 
+/P 2615 0 R 
+/K 797 0 R 
+>> 
+endobj
+2629 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2630 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2631 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2632 0 R 2635 0 R 2638 0 R 2641 0 R 2644 0 R ] 
+>> 
+endobj
+2632 0 obj
+<< 
+/S /TD 
+/A [ 2633 0 R 2634 0 R ] 
+/P 2631 0 R 
+/K 799 0 R 
+>> 
+endobj
+2633 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2634 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2635 0 obj
+<< 
+/S /TD 
+/A [ 2636 0 R 2637 0 R ] 
+/P 2631 0 R 
+/K 801 0 R 
+>> 
+endobj
+2636 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2637 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2638 0 obj
+<< 
+/S /TD 
+/A [ 2639 0 R 2640 0 R ] 
+/P 2631 0 R 
+/K 803 0 R 
+>> 
+endobj
+2639 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2640 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2641 0 obj
+<< 
+/S /TD 
+/A [ 2642 0 R 2643 0 R ] 
+/P 2631 0 R 
+/K 805 0 R 
+>> 
+endobj
+2642 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2643 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2644 0 obj
+<< 
+/S /TD 
+/A [ 2645 0 R 2646 0 R ] 
+/P 2631 0 R 
+/K 807 0 R 
+>> 
+endobj
+2645 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2646 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2647 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2648 0 R 2651 0 R 2654 0 R 2657 0 R 2660 0 R ] 
+>> 
+endobj
+2648 0 obj
+<< 
+/S /TD 
+/A [ 2649 0 R 2650 0 R ] 
+/P 2647 0 R 
+/K 809 0 R 
+>> 
+endobj
+2649 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2650 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2651 0 obj
+<< 
+/S /TD 
+/A [ 2652 0 R 2653 0 R ] 
+/P 2647 0 R 
+/K 811 0 R 
+>> 
+endobj
+2652 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2653 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2654 0 obj
+<< 
+/S /TD 
+/A [ 2655 0 R 2656 0 R ] 
+/P 2647 0 R 
+/K 813 0 R 
+>> 
+endobj
+2655 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2656 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2657 0 obj
+<< 
+/S /TD 
+/A [ 2658 0 R 2659 0 R ] 
+/P 2647 0 R 
+/K 815 0 R 
+>> 
+endobj
+2658 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2659 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2660 0 obj
+<< 
+/S /TD 
+/A [ 2661 0 R 2662 0 R ] 
+/P 2647 0 R 
+/K 817 0 R 
+>> 
+endobj
+2661 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2662 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2663 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2664 0 R 2667 0 R 2670 0 R 2673 0 R 2676 0 R ] 
+>> 
+endobj
+2664 0 obj
+<< 
+/S /TD 
+/A [ 2665 0 R 2666 0 R ] 
+/P 2663 0 R 
+/K 819 0 R 
+>> 
+endobj
+2665 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2666 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2667 0 obj
+<< 
+/S /TD 
+/A [ 2668 0 R 2669 0 R ] 
+/P 2663 0 R 
+/K 821 0 R 
+>> 
+endobj
+2668 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2669 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2670 0 obj
+<< 
+/S /TD 
+/A [ 2671 0 R 2672 0 R ] 
+/P 2663 0 R 
+/K 823 0 R 
+>> 
+endobj
+2671 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2672 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2673 0 obj
+<< 
+/S /TD 
+/A [ 2674 0 R 2675 0 R ] 
+/P 2663 0 R 
+/K 825 0 R 
+>> 
+endobj
+2674 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2675 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2676 0 obj
+<< 
+/S /TD 
+/A [ 2677 0 R 2678 0 R ] 
+/P 2663 0 R 
+/K 827 0 R 
+>> 
+endobj
+2677 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2678 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2679 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2680 0 R 2683 0 R 2686 0 R 2689 0 R 2692 0 R ] 
+>> 
+endobj
+2680 0 obj
+<< 
+/S /TD 
+/A [ 2681 0 R 2682 0 R ] 
+/P 2679 0 R 
+/K 829 0 R 
+>> 
+endobj
+2681 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2682 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2683 0 obj
+<< 
+/S /TD 
+/A [ 2684 0 R 2685 0 R ] 
+/P 2679 0 R 
+/K 831 0 R 
+>> 
+endobj
+2684 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2685 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2686 0 obj
+<< 
+/S /TD 
+/A [ 2687 0 R 2688 0 R ] 
+/P 2679 0 R 
+/K 833 0 R 
+>> 
+endobj
+2687 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2688 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2689 0 obj
+<< 
+/S /TD 
+/A [ 2690 0 R 2691 0 R ] 
+/P 2679 0 R 
+/K 835 0 R 
+>> 
+endobj
+2690 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2691 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2692 0 obj
+<< 
+/S /TD 
+/A [ 2693 0 R 2694 0 R ] 
+/P 2679 0 R 
+/K 837 0 R 
+>> 
+endobj
+2693 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2694 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2695 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2696 0 R 2699 0 R 2702 0 R 2705 0 R 2708 0 R ] 
+>> 
+endobj
+2696 0 obj
+<< 
+/S /TD 
+/A [ 2697 0 R 2698 0 R ] 
+/P 2695 0 R 
+/K 839 0 R 
+>> 
+endobj
+2697 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2698 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2699 0 obj
+<< 
+/S /TD 
+/A [ 2700 0 R 2701 0 R ] 
+/P 2695 0 R 
+/K 841 0 R 
+>> 
+endobj
+2700 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2701 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2702 0 obj
+<< 
+/S /TD 
+/A [ 2703 0 R 2704 0 R ] 
+/P 2695 0 R 
+/K 843 0 R 
+>> 
+endobj
+2703 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2704 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2705 0 obj
+<< 
+/S /TD 
+/A [ 2706 0 R 2707 0 R ] 
+/P 2695 0 R 
+/K 845 0 R 
+>> 
+endobj
+2706 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2707 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2708 0 obj
+<< 
+/S /TD 
+/A [ 2709 0 R 2710 0 R ] 
+/P 2695 0 R 
+/K 847 0 R 
+>> 
+endobj
+2709 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2710 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2711 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2712 0 R 2715 0 R 2718 0 R 2721 0 R 2724 0 R ] 
+>> 
+endobj
+2712 0 obj
+<< 
+/S /TD 
+/A [ 2713 0 R 2714 0 R ] 
+/P 2711 0 R 
+/K 849 0 R 
+>> 
+endobj
+2713 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2714 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2715 0 obj
+<< 
+/S /TD 
+/A [ 2716 0 R 2717 0 R ] 
+/P 2711 0 R 
+/K 851 0 R 
+>> 
+endobj
+2716 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2717 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2718 0 obj
+<< 
+/S /TD 
+/A [ 2719 0 R 2720 0 R ] 
+/P 2711 0 R 
+/K 853 0 R 
+>> 
+endobj
+2719 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2720 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2721 0 obj
+<< 
+/S /TD 
+/A [ 2722 0 R 2723 0 R ] 
+/P 2711 0 R 
+/K 855 0 R 
+>> 
+endobj
+2722 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2723 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2724 0 obj
+<< 
+/S /TD 
+/A [ 2725 0 R 2726 0 R ] 
+/P 2711 0 R 
+/K [ 857 0 R 859 0 R ] 
+>> 
+endobj
+2725 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2726 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2727 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2728 0 R 2731 0 R 2734 0 R 2737 0 R 2740 0 R ] 
+>> 
+endobj
+2728 0 obj
+<< 
+/S /TD 
+/A [ 2729 0 R 2730 0 R ] 
+/P 2727 0 R 
+/K 861 0 R 
+>> 
+endobj
+2729 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2730 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2731 0 obj
+<< 
+/S /TD 
+/A [ 2732 0 R 2733 0 R ] 
+/P 2727 0 R 
+/K 863 0 R 
+>> 
+endobj
+2732 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2733 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2734 0 obj
+<< 
+/S /TD 
+/A [ 2735 0 R 2736 0 R ] 
+/P 2727 0 R 
+/K 865 0 R 
+>> 
+endobj
+2735 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2736 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2737 0 obj
+<< 
+/S /TD 
+/A [ 2738 0 R 2739 0 R ] 
+/P 2727 0 R 
+/K 867 0 R 
+>> 
+endobj
+2738 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2739 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2740 0 obj
+<< 
+/S /TD 
+/A [ 2741 0 R 2742 0 R ] 
+/P 2727 0 R 
+/K 869 0 R 
+>> 
+endobj
+2741 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2742 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2743 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2744 0 R 2747 0 R 2750 0 R 2753 0 R 2756 0 R ] 
+>> 
+endobj
+2744 0 obj
+<< 
+/S /TD 
+/A [ 2745 0 R 2746 0 R ] 
+/P 2743 0 R 
+/K 871 0 R 
+>> 
+endobj
+2745 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2746 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2747 0 obj
+<< 
+/S /TD 
+/A [ 2748 0 R 2749 0 R ] 
+/P 2743 0 R 
+/K 873 0 R 
+>> 
+endobj
+2748 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2749 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2750 0 obj
+<< 
+/S /TD 
+/A [ 2751 0 R 2752 0 R ] 
+/P 2743 0 R 
+/K 875 0 R 
+>> 
+endobj
+2751 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2752 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2753 0 obj
+<< 
+/S /TD 
+/A [ 2754 0 R 2755 0 R ] 
+/P 2743 0 R 
+/K 877 0 R 
+>> 
+endobj
+2754 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2755 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2756 0 obj
+<< 
+/S /TD 
+/A [ 2757 0 R 2758 0 R ] 
+/P 2743 0 R 
+/K 879 0 R 
+>> 
+endobj
+2757 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2758 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2759 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2760 0 R 2763 0 R 2766 0 R 2769 0 R 2772 0 R ] 
+>> 
+endobj
+2760 0 obj
+<< 
+/S /TD 
+/A [ 2761 0 R 2762 0 R ] 
+/P 2759 0 R 
+/K 881 0 R 
+>> 
+endobj
+2761 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2762 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2763 0 obj
+<< 
+/S /TD 
+/A [ 2764 0 R 2765 0 R ] 
+/P 2759 0 R 
+/K 883 0 R 
+>> 
+endobj
+2764 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2765 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2766 0 obj
+<< 
+/S /TD 
+/A [ 2767 0 R 2768 0 R ] 
+/P 2759 0 R 
+/K 885 0 R 
+>> 
+endobj
+2767 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2768 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2769 0 obj
+<< 
+/S /TD 
+/A [ 2770 0 R 2771 0 R ] 
+/P 2759 0 R 
+/K 887 0 R 
+>> 
+endobj
+2770 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2771 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2772 0 obj
+<< 
+/S /TD 
+/A [ 2773 0 R 2774 0 R ] 
+/P 2759 0 R 
+/K 889 0 R 
+>> 
+endobj
+2773 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2774 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2775 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2776 0 R 2779 0 R 2782 0 R 2785 0 R 2788 0 R ] 
+>> 
+endobj
+2776 0 obj
+<< 
+/S /TD 
+/A [ 2777 0 R 2778 0 R ] 
+/P 2775 0 R 
+/K 891 0 R 
+>> 
+endobj
+2777 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2778 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2779 0 obj
+<< 
+/S /TD 
+/A [ 2780 0 R 2781 0 R ] 
+/P 2775 0 R 
+/K 893 0 R 
+>> 
+endobj
+2780 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2781 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2782 0 obj
+<< 
+/S /TD 
+/A [ 2783 0 R 2784 0 R ] 
+/P 2775 0 R 
+/K 895 0 R 
+>> 
+endobj
+2783 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2784 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2785 0 obj
+<< 
+/S /TD 
+/A [ 2786 0 R 2787 0 R ] 
+/P 2775 0 R 
+/K 897 0 R 
+>> 
+endobj
+2786 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2787 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2788 0 obj
+<< 
+/S /TD 
+/A [ 2789 0 R 2790 0 R ] 
+/P 2775 0 R 
+/K 899 0 R 
+>> 
+endobj
+2789 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2790 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2791 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2792 0 R 2795 0 R 2798 0 R 2801 0 R 2804 0 R ] 
+>> 
+endobj
+2792 0 obj
+<< 
+/S /TD 
+/A [ 2793 0 R 2794 0 R ] 
+/P 2791 0 R 
+/K 901 0 R 
+>> 
+endobj
+2793 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2794 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2795 0 obj
+<< 
+/S /TD 
+/A [ 2796 0 R 2797 0 R ] 
+/P 2791 0 R 
+/K 903 0 R 
+>> 
+endobj
+2796 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2797 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2798 0 obj
+<< 
+/S /TD 
+/A [ 2799 0 R 2800 0 R ] 
+/P 2791 0 R 
+/K 905 0 R 
+>> 
+endobj
+2799 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2800 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2801 0 obj
+<< 
+/S /TD 
+/A [ 2802 0 R 2803 0 R ] 
+/P 2791 0 R 
+/K 907 0 R 
+>> 
+endobj
+2802 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2803 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2804 0 obj
+<< 
+/S /TD 
+/A [ 2805 0 R 2806 0 R ] 
+/P 2791 0 R 
+/K 909 0 R 
+>> 
+endobj
+2805 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2806 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2807 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2808 0 R 2811 0 R 2814 0 R 2817 0 R 2820 0 R ] 
+>> 
+endobj
+2808 0 obj
+<< 
+/S /TD 
+/A [ 2809 0 R 2810 0 R ] 
+/P 2807 0 R 
+/K 911 0 R 
+>> 
+endobj
+2809 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2810 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2811 0 obj
+<< 
+/S /TD 
+/A [ 2812 0 R 2813 0 R ] 
+/P 2807 0 R 
+/K 913 0 R 
+>> 
+endobj
+2812 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2813 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2814 0 obj
+<< 
+/S /TD 
+/A [ 2815 0 R 2816 0 R ] 
+/P 2807 0 R 
+/K 915 0 R 
+>> 
+endobj
+2815 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2816 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2817 0 obj
+<< 
+/S /TD 
+/A [ 2818 0 R 2819 0 R ] 
+/P 2807 0 R 
+/K 917 0 R 
+>> 
+endobj
+2818 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2819 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2820 0 obj
+<< 
+/S /TD 
+/A [ 2821 0 R 2822 0 R ] 
+/P 2807 0 R 
+/K 919 0 R 
+>> 
+endobj
+2821 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2822 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2823 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2824 0 R 2827 0 R 2830 0 R 2833 0 R 2836 0 R ] 
+>> 
+endobj
+2824 0 obj
+<< 
+/S /TD 
+/A [ 2825 0 R 2826 0 R ] 
+/P 2823 0 R 
+/K 921 0 R 
+>> 
+endobj
+2825 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2826 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2827 0 obj
+<< 
+/S /TD 
+/A [ 2828 0 R 2829 0 R ] 
+/P 2823 0 R 
+/K 923 0 R 
+>> 
+endobj
+2828 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2829 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2830 0 obj
+<< 
+/S /TD 
+/A [ 2831 0 R 2832 0 R ] 
+/P 2823 0 R 
+/K 925 0 R 
+>> 
+endobj
+2831 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2832 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2833 0 obj
+<< 
+/S /TD 
+/A [ 2834 0 R 2835 0 R ] 
+/P 2823 0 R 
+/K 927 0 R 
+>> 
+endobj
+2834 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2835 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2836 0 obj
+<< 
+/S /TD 
+/A [ 2837 0 R 2838 0 R ] 
+/P 2823 0 R 
+/K 929 0 R 
+>> 
+endobj
+2837 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2838 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2839 0 obj
+<< 
+/S /TR 
+/P 2582 0 R 
+/K [ 2840 0 R 2843 0 R 2846 0 R 2849 0 R 2852 0 R ] 
+>> 
+endobj
+2840 0 obj
+<< 
+/S /TD 
+/A [ 2841 0 R 2842 0 R ] 
+/P 2839 0 R 
+/K 931 0 R 
+>> 
+endobj
+2841 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2842 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2843 0 obj
+<< 
+/S /TD 
+/A [ 2844 0 R 2845 0 R ] 
+/P 2839 0 R 
+/K 933 0 R 
+>> 
+endobj
+2844 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2845 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2846 0 obj
+<< 
+/S /TD 
+/A [ 2847 0 R 2848 0 R ] 
+/P 2839 0 R 
+/K 935 0 R 
+>> 
+endobj
+2847 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2848 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2849 0 obj
+<< 
+/S /TD 
+/A [ 2850 0 R 2851 0 R ] 
+/P 2839 0 R 
+/K 937 0 R 
+>> 
+endobj
+2850 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2851 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2852 0 obj
+<< 
+/S /TD 
+/A [ 2853 0 R 2854 0 R ] 
+/P 2839 0 R 
+/K 939 0 R 
+>> 
+endobj
+2853 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2854 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2855 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 2856 0 R 2872 0 R 2888 0 R 2904 0 R 2920 0 R 2936 0 R 2952 0 R ] 
+/A [ 3935 0 R ] 
+>> 
+endobj
+2856 0 obj
+<< 
+/S /TR 
+/P 2855 0 R 
+/K [ 2857 0 R 2860 0 R 2863 0 R 2866 0 R 2869 0 R ] 
+>> 
+endobj
+2857 0 obj
+<< 
+/S /TD 
+/A [ 2858 0 R 2859 0 R ] 
+/P 2856 0 R 
+/K 947 0 R 
+>> 
+endobj
+2858 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2859 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2860 0 obj
+<< 
+/S /TD 
+/A [ 2861 0 R 2862 0 R ] 
+/P 2856 0 R 
+/K 949 0 R 
+>> 
+endobj
+2861 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2862 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2863 0 obj
+<< 
+/S /TD 
+/A [ 2864 0 R 2865 0 R ] 
+/P 2856 0 R 
+/K 951 0 R 
+>> 
+endobj
+2864 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2865 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2866 0 obj
+<< 
+/S /TD 
+/A [ 2867 0 R 2868 0 R ] 
+/P 2856 0 R 
+/K 953 0 R 
+>> 
+endobj
+2867 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2868 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2869 0 obj
+<< 
+/S /TD 
+/A [ 2870 0 R 2871 0 R ] 
+/P 2856 0 R 
+/K 955 0 R 
+>> 
+endobj
+2870 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2871 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2872 0 obj
+<< 
+/S /TR 
+/P 2855 0 R 
+/K [ 2873 0 R 2876 0 R 2879 0 R 2882 0 R 2885 0 R ] 
+>> 
+endobj
+2873 0 obj
+<< 
+/S /TD 
+/A [ 2874 0 R 2875 0 R ] 
+/P 2872 0 R 
+/K 957 0 R 
+>> 
+endobj
+2874 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2875 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2876 0 obj
+<< 
+/S /TD 
+/A [ 2877 0 R 2878 0 R ] 
+/P 2872 0 R 
+/K 959 0 R 
+>> 
+endobj
+2877 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2878 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2879 0 obj
+<< 
+/S /TD 
+/A [ 2880 0 R 2881 0 R ] 
+/P 2872 0 R 
+/K 961 0 R 
+>> 
+endobj
+2880 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2881 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2882 0 obj
+<< 
+/S /TD 
+/A [ 2883 0 R 2884 0 R ] 
+/P 2872 0 R 
+/K 963 0 R 
+>> 
+endobj
+2883 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2884 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2885 0 obj
+<< 
+/S /TD 
+/A [ 2886 0 R 2887 0 R ] 
+/P 2872 0 R 
+/K 965 0 R 
+>> 
+endobj
+2886 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2887 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2888 0 obj
+<< 
+/S /TR 
+/P 2855 0 R 
+/K [ 2889 0 R 2892 0 R 2895 0 R 2898 0 R 2901 0 R ] 
+>> 
+endobj
+2889 0 obj
+<< 
+/S /TD 
+/A [ 2890 0 R 2891 0 R ] 
+/P 2888 0 R 
+/K 967 0 R 
+>> 
+endobj
+2890 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2891 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2892 0 obj
+<< 
+/S /TD 
+/A [ 2893 0 R 2894 0 R ] 
+/P 2888 0 R 
+/K 969 0 R 
+>> 
+endobj
+2893 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2894 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2895 0 obj
+<< 
+/S /TD 
+/A [ 2896 0 R 2897 0 R ] 
+/P 2888 0 R 
+/K 971 0 R 
+>> 
+endobj
+2896 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2897 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2898 0 obj
+<< 
+/S /TD 
+/A [ 2899 0 R 2900 0 R ] 
+/P 2888 0 R 
+/K 973 0 R 
+>> 
+endobj
+2899 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2900 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2901 0 obj
+<< 
+/S /TD 
+/A [ 2902 0 R 2903 0 R ] 
+/P 2888 0 R 
+/K 975 0 R 
+>> 
+endobj
+2902 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2903 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2904 0 obj
+<< 
+/S /TR 
+/P 2855 0 R 
+/K [ 2905 0 R 2908 0 R 2911 0 R 2914 0 R 2917 0 R ] 
+>> 
+endobj
+2905 0 obj
+<< 
+/S /TD 
+/A [ 2906 0 R 2907 0 R ] 
+/P 2904 0 R 
+/K 977 0 R 
+>> 
+endobj
+2906 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2907 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2908 0 obj
+<< 
+/S /TD 
+/A [ 2909 0 R 2910 0 R ] 
+/P 2904 0 R 
+/K 979 0 R 
+>> 
+endobj
+2909 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2910 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2911 0 obj
+<< 
+/S /TD 
+/A [ 2912 0 R 2913 0 R ] 
+/P 2904 0 R 
+/K 981 0 R 
+>> 
+endobj
+2912 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2913 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2914 0 obj
+<< 
+/S /TD 
+/A [ 2915 0 R 2916 0 R ] 
+/P 2904 0 R 
+/K 983 0 R 
+>> 
+endobj
+2915 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2916 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2917 0 obj
+<< 
+/S /TD 
+/A [ 2918 0 R 2919 0 R ] 
+/P 2904 0 R 
+/K 985 0 R 
+>> 
+endobj
+2918 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2919 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2920 0 obj
+<< 
+/S /TR 
+/P 2855 0 R 
+/K [ 2921 0 R 2924 0 R 2927 0 R 2930 0 R 2933 0 R ] 
+>> 
+endobj
+2921 0 obj
+<< 
+/S /TD 
+/A [ 2922 0 R 2923 0 R ] 
+/P 2920 0 R 
+/K 987 0 R 
+>> 
+endobj
+2922 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2923 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2924 0 obj
+<< 
+/S /TD 
+/A [ 2925 0 R 2926 0 R ] 
+/P 2920 0 R 
+/K 989 0 R 
+>> 
+endobj
+2925 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2926 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2927 0 obj
+<< 
+/S /TD 
+/A [ 2928 0 R 2929 0 R ] 
+/P 2920 0 R 
+/K 991 0 R 
+>> 
+endobj
+2928 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2929 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2930 0 obj
+<< 
+/S /TD 
+/A [ 2931 0 R 2932 0 R ] 
+/P 2920 0 R 
+/K 993 0 R 
+>> 
+endobj
+2931 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2932 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2933 0 obj
+<< 
+/S /TD 
+/A [ 2934 0 R 2935 0 R ] 
+/P 2920 0 R 
+/K 995 0 R 
+>> 
+endobj
+2934 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2935 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2936 0 obj
+<< 
+/S /TR 
+/P 2855 0 R 
+/K [ 2937 0 R 2940 0 R 2943 0 R 2946 0 R 2949 0 R ] 
+>> 
+endobj
+2937 0 obj
+<< 
+/S /TD 
+/A [ 2938 0 R 2939 0 R ] 
+/P 2936 0 R 
+/K 997 0 R 
+>> 
+endobj
+2938 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2939 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2940 0 obj
+<< 
+/S /TD 
+/A [ 2941 0 R 2942 0 R ] 
+/P 2936 0 R 
+/K 999 0 R 
+>> 
+endobj
+2941 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2942 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2943 0 obj
+<< 
+/S /TD 
+/A [ 2944 0 R 2945 0 R ] 
+/P 2936 0 R 
+/K 1001 0 R 
+>> 
+endobj
+2944 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2945 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2946 0 obj
+<< 
+/S /TD 
+/A [ 2947 0 R 2948 0 R ] 
+/P 2936 0 R 
+/K 1003 0 R 
+>> 
+endobj
+2947 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2948 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2949 0 obj
+<< 
+/S /TD 
+/A [ 2950 0 R 2951 0 R ] 
+/P 2936 0 R 
+/K 1005 0 R 
+>> 
+endobj
+2950 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2951 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2952 0 obj
+<< 
+/S /TR 
+/P 2855 0 R 
+/K [ 2953 0 R 2956 0 R 2959 0 R 2962 0 R 2965 0 R ] 
+>> 
+endobj
+2953 0 obj
+<< 
+/S /TD 
+/A [ 2954 0 R 2955 0 R ] 
+/P 2952 0 R 
+/K 1007 0 R 
+>> 
+endobj
+2954 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2955 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2956 0 obj
+<< 
+/S /TD 
+/A [ 2957 0 R 2958 0 R ] 
+/P 2952 0 R 
+/K 1009 0 R 
+>> 
+endobj
+2957 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2958 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2959 0 obj
+<< 
+/S /TD 
+/A [ 2960 0 R 2961 0 R ] 
+/P 2952 0 R 
+/K 1011 0 R 
+>> 
+endobj
+2960 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2961 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2962 0 obj
+<< 
+/S /TD 
+/A [ 2963 0 R 2964 0 R ] 
+/P 2952 0 R 
+/K 1013 0 R 
+>> 
+endobj
+2963 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2964 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2965 0 obj
+<< 
+/S /TD 
+/A [ 2966 0 R 2967 0 R ] 
+/P 2952 0 R 
+/K 1015 0 R 
+>> 
+endobj
+2966 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2967 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2968 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 2969 0 R 2985 0 R 3001 0 R 3017 0 R 3033 0 R 3049 0 R 3065 0 R 3081 0 R 
+3097 0 R 3113 0 R 3129 0 R 3145 0 R 3161 0 R 3177 0 R 3193 0 R 3209 0 R 
+3225 0 R 3241 0 R 3257 0 R 3273 0 R ] 
+/A [ 3936 0 R ] 
+>> 
+endobj
+2969 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 2970 0 R 2973 0 R 2976 0 R 2979 0 R 2982 0 R ] 
+>> 
+endobj
+2970 0 obj
+<< 
+/S /TD 
+/A [ 2971 0 R 2972 0 R ] 
+/P 2969 0 R 
+/K 1027 0 R 
+>> 
+endobj
+2971 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2972 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2973 0 obj
+<< 
+/S /TD 
+/A [ 2974 0 R 2975 0 R ] 
+/P 2969 0 R 
+/K 1029 0 R 
+>> 
+endobj
+2974 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2975 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2976 0 obj
+<< 
+/S /TD 
+/A [ 2977 0 R 2978 0 R ] 
+/P 2969 0 R 
+/K 1031 0 R 
+>> 
+endobj
+2977 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2978 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2979 0 obj
+<< 
+/S /TD 
+/A [ 2980 0 R 2981 0 R ] 
+/P 2969 0 R 
+/K 1033 0 R 
+>> 
+endobj
+2980 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2981 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2982 0 obj
+<< 
+/S /TD 
+/A [ 2983 0 R 2984 0 R ] 
+/P 2969 0 R 
+/K 1035 0 R 
+>> 
+endobj
+2983 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2984 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2985 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 2986 0 R 2989 0 R 2992 0 R 2995 0 R 2998 0 R ] 
+>> 
+endobj
+2986 0 obj
+<< 
+/S /TD 
+/A [ 2987 0 R 2988 0 R ] 
+/P 2985 0 R 
+/K 1037 0 R 
+>> 
+endobj
+2987 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2988 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2989 0 obj
+<< 
+/S /TD 
+/A [ 2990 0 R 2991 0 R ] 
+/P 2985 0 R 
+/K 1039 0 R 
+>> 
+endobj
+2990 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2991 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2992 0 obj
+<< 
+/S /TD 
+/A [ 2993 0 R 2994 0 R ] 
+/P 2985 0 R 
+/K 1041 0 R 
+>> 
+endobj
+2993 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2994 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2995 0 obj
+<< 
+/S /TD 
+/A [ 2996 0 R 2997 0 R ] 
+/P 2985 0 R 
+/K 1043 0 R 
+>> 
+endobj
+2996 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+2997 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+2998 0 obj
+<< 
+/S /TD 
+/A [ 2999 0 R 3000 0 R ] 
+/P 2985 0 R 
+/K 1045 0 R 
+>> 
+endobj
+2999 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3000 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3001 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3002 0 R 3005 0 R 3008 0 R 3011 0 R 3014 0 R ] 
+>> 
+endobj
+3002 0 obj
+<< 
+/S /TD 
+/A [ 3003 0 R 3004 0 R ] 
+/P 3001 0 R 
+/K 1047 0 R 
+>> 
+endobj
+3003 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3004 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3005 0 obj
+<< 
+/S /TD 
+/A [ 3006 0 R 3007 0 R ] 
+/P 3001 0 R 
+/K 1049 0 R 
+>> 
+endobj
+3006 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3007 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3008 0 obj
+<< 
+/S /TD 
+/A [ 3009 0 R 3010 0 R ] 
+/P 3001 0 R 
+/K 1051 0 R 
+>> 
+endobj
+3009 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3010 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3011 0 obj
+<< 
+/S /TD 
+/A [ 3012 0 R 3013 0 R ] 
+/P 3001 0 R 
+/K 1053 0 R 
+>> 
+endobj
+3012 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3013 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3014 0 obj
+<< 
+/S /TD 
+/A [ 3015 0 R 3016 0 R ] 
+/P 3001 0 R 
+/K 1055 0 R 
+>> 
+endobj
+3015 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3016 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3017 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3018 0 R 3021 0 R 3024 0 R 3027 0 R 3030 0 R ] 
+>> 
+endobj
+3018 0 obj
+<< 
+/S /TD 
+/A [ 3019 0 R 3020 0 R ] 
+/P 3017 0 R 
+/K 1057 0 R 
+>> 
+endobj
+3019 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3020 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3021 0 obj
+<< 
+/S /TD 
+/A [ 3022 0 R 3023 0 R ] 
+/P 3017 0 R 
+/K 1059 0 R 
+>> 
+endobj
+3022 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3023 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3024 0 obj
+<< 
+/S /TD 
+/A [ 3025 0 R 3026 0 R ] 
+/P 3017 0 R 
+/K 1061 0 R 
+>> 
+endobj
+3025 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3026 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3027 0 obj
+<< 
+/S /TD 
+/A [ 3028 0 R 3029 0 R ] 
+/P 3017 0 R 
+/K 1063 0 R 
+>> 
+endobj
+3028 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3029 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3030 0 obj
+<< 
+/S /TD 
+/A [ 3031 0 R 3032 0 R ] 
+/P 3017 0 R 
+/K 1065 0 R 
+>> 
+endobj
+3031 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3032 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3033 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3034 0 R 3037 0 R 3040 0 R 3043 0 R 3046 0 R ] 
+>> 
+endobj
+3034 0 obj
+<< 
+/S /TD 
+/A [ 3035 0 R 3036 0 R ] 
+/P 3033 0 R 
+/K 1067 0 R 
+>> 
+endobj
+3035 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3036 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3037 0 obj
+<< 
+/S /TD 
+/A [ 3038 0 R 3039 0 R ] 
+/P 3033 0 R 
+/K 1069 0 R 
+>> 
+endobj
+3038 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3039 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3040 0 obj
+<< 
+/S /TD 
+/A [ 3041 0 R 3042 0 R ] 
+/P 3033 0 R 
+/K 1071 0 R 
+>> 
+endobj
+3041 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3042 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3043 0 obj
+<< 
+/S /TD 
+/A [ 3044 0 R 3045 0 R ] 
+/P 3033 0 R 
+/K 1073 0 R 
+>> 
+endobj
+3044 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3045 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3046 0 obj
+<< 
+/S /TD 
+/A [ 3047 0 R 3048 0 R ] 
+/P 3033 0 R 
+/K 1075 0 R 
+>> 
+endobj
+3047 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3048 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3049 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3050 0 R 3053 0 R 3056 0 R 3059 0 R 3062 0 R ] 
+>> 
+endobj
+3050 0 obj
+<< 
+/S /TD 
+/A [ 3051 0 R 3052 0 R ] 
+/P 3049 0 R 
+/K 1077 0 R 
+>> 
+endobj
+3051 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3052 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3053 0 obj
+<< 
+/S /TD 
+/A [ 3054 0 R 3055 0 R ] 
+/P 3049 0 R 
+/K 1079 0 R 
+>> 
+endobj
+3054 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3055 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3056 0 obj
+<< 
+/S /TD 
+/A [ 3057 0 R 3058 0 R ] 
+/P 3049 0 R 
+/K 1081 0 R 
+>> 
+endobj
+3057 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3058 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3059 0 obj
+<< 
+/S /TD 
+/A [ 3060 0 R 3061 0 R ] 
+/P 3049 0 R 
+/K 1083 0 R 
+>> 
+endobj
+3060 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3061 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3062 0 obj
+<< 
+/S /TD 
+/A [ 3063 0 R 3064 0 R ] 
+/P 3049 0 R 
+/K 1085 0 R 
+>> 
+endobj
+3063 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3064 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3065 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3066 0 R 3069 0 R 3072 0 R 3075 0 R 3078 0 R ] 
+>> 
+endobj
+3066 0 obj
+<< 
+/S /TD 
+/A [ 3067 0 R 3068 0 R ] 
+/P 3065 0 R 
+/K 1087 0 R 
+>> 
+endobj
+3067 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3068 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3069 0 obj
+<< 
+/S /TD 
+/A [ 3070 0 R 3071 0 R ] 
+/P 3065 0 R 
+/K 1089 0 R 
+>> 
+endobj
+3070 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3071 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3072 0 obj
+<< 
+/S /TD 
+/A [ 3073 0 R 3074 0 R ] 
+/P 3065 0 R 
+/K 1091 0 R 
+>> 
+endobj
+3073 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3074 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3075 0 obj
+<< 
+/S /TD 
+/A [ 3076 0 R 3077 0 R ] 
+/P 3065 0 R 
+/K 1093 0 R 
+>> 
+endobj
+3076 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3077 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3078 0 obj
+<< 
+/S /TD 
+/A [ 3079 0 R 3080 0 R ] 
+/P 3065 0 R 
+/K 1095 0 R 
+>> 
+endobj
+3079 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3080 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3081 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3082 0 R 3085 0 R 3088 0 R 3091 0 R 3094 0 R ] 
+>> 
+endobj
+3082 0 obj
+<< 
+/S /TD 
+/A [ 3083 0 R 3084 0 R ] 
+/P 3081 0 R 
+/K 1097 0 R 
+>> 
+endobj
+3083 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3084 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3085 0 obj
+<< 
+/S /TD 
+/A [ 3086 0 R 3087 0 R ] 
+/P 3081 0 R 
+/K 1099 0 R 
+>> 
+endobj
+3086 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3087 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3088 0 obj
+<< 
+/S /TD 
+/A [ 3089 0 R 3090 0 R ] 
+/P 3081 0 R 
+/K 1101 0 R 
+>> 
+endobj
+3089 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3090 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3091 0 obj
+<< 
+/S /TD 
+/A [ 3092 0 R 3093 0 R ] 
+/P 3081 0 R 
+/K 1103 0 R 
+>> 
+endobj
+3092 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3093 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3094 0 obj
+<< 
+/S /TD 
+/A [ 3095 0 R 3096 0 R ] 
+/P 3081 0 R 
+/K 1105 0 R 
+>> 
+endobj
+3095 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3096 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3097 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3098 0 R 3101 0 R 3104 0 R 3107 0 R 3110 0 R ] 
+>> 
+endobj
+3098 0 obj
+<< 
+/S /TD 
+/A [ 3099 0 R 3100 0 R ] 
+/P 3097 0 R 
+/K 1107 0 R 
+>> 
+endobj
+3099 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3100 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3101 0 obj
+<< 
+/S /TD 
+/A [ 3102 0 R 3103 0 R ] 
+/P 3097 0 R 
+/K 1109 0 R 
+>> 
+endobj
+3102 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3103 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3104 0 obj
+<< 
+/S /TD 
+/A [ 3105 0 R 3106 0 R ] 
+/P 3097 0 R 
+/K 1111 0 R 
+>> 
+endobj
+3105 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3106 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3107 0 obj
+<< 
+/S /TD 
+/A [ 3108 0 R 3109 0 R ] 
+/P 3097 0 R 
+/K 1113 0 R 
+>> 
+endobj
+3108 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3109 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3110 0 obj
+<< 
+/S /TD 
+/A [ 3111 0 R 3112 0 R ] 
+/P 3097 0 R 
+/K 1115 0 R 
+>> 
+endobj
+3111 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3112 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3113 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3114 0 R 3117 0 R 3120 0 R 3123 0 R 3126 0 R ] 
+>> 
+endobj
+3114 0 obj
+<< 
+/S /TD 
+/A [ 3115 0 R 3116 0 R ] 
+/P 3113 0 R 
+/K 1117 0 R 
+>> 
+endobj
+3115 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3116 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3117 0 obj
+<< 
+/S /TD 
+/A [ 3118 0 R 3119 0 R ] 
+/P 3113 0 R 
+/K 1119 0 R 
+>> 
+endobj
+3118 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3119 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3120 0 obj
+<< 
+/S /TD 
+/A [ 3121 0 R 3122 0 R ] 
+/P 3113 0 R 
+/K 1121 0 R 
+>> 
+endobj
+3121 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3122 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3123 0 obj
+<< 
+/S /TD 
+/A [ 3124 0 R 3125 0 R ] 
+/P 3113 0 R 
+/K 1123 0 R 
+>> 
+endobj
+3124 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3125 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3126 0 obj
+<< 
+/S /TD 
+/A [ 3127 0 R 3128 0 R ] 
+/P 3113 0 R 
+/K 1125 0 R 
+>> 
+endobj
+3127 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3128 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3129 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3130 0 R 3133 0 R 3136 0 R 3139 0 R 3142 0 R ] 
+>> 
+endobj
+3130 0 obj
+<< 
+/S /TD 
+/A [ 3131 0 R 3132 0 R ] 
+/P 3129 0 R 
+/K 1127 0 R 
+>> 
+endobj
+3131 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3132 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3133 0 obj
+<< 
+/S /TD 
+/A [ 3134 0 R 3135 0 R ] 
+/P 3129 0 R 
+/K 1129 0 R 
+>> 
+endobj
+3134 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3135 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3136 0 obj
+<< 
+/S /TD 
+/A [ 3137 0 R 3138 0 R ] 
+/P 3129 0 R 
+/K 1131 0 R 
+>> 
+endobj
+3137 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3138 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3139 0 obj
+<< 
+/S /TD 
+/A [ 3140 0 R 3141 0 R ] 
+/P 3129 0 R 
+/K 1133 0 R 
+>> 
+endobj
+3140 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3141 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3142 0 obj
+<< 
+/S /TD 
+/A [ 3143 0 R 3144 0 R ] 
+/P 3129 0 R 
+/K 1135 0 R 
+>> 
+endobj
+3143 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3144 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3145 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3146 0 R 3149 0 R 3152 0 R 3155 0 R 3158 0 R ] 
+>> 
+endobj
+3146 0 obj
+<< 
+/S /TD 
+/A [ 3147 0 R 3148 0 R ] 
+/P 3145 0 R 
+/K 1137 0 R 
+>> 
+endobj
+3147 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3148 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3149 0 obj
+<< 
+/S /TD 
+/A [ 3150 0 R 3151 0 R ] 
+/P 3145 0 R 
+/K 1140 0 R 
+>> 
+endobj
+3150 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3151 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3152 0 obj
+<< 
+/S /TD 
+/A [ 3153 0 R 3154 0 R ] 
+/P 3145 0 R 
+/K 1142 0 R 
+>> 
+endobj
+3153 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3154 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3155 0 obj
+<< 
+/S /TD 
+/A [ 3156 0 R 3157 0 R ] 
+/P 3145 0 R 
+/K 1144 0 R 
+>> 
+endobj
+3156 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3157 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3158 0 obj
+<< 
+/S /TD 
+/A [ 3159 0 R 3160 0 R ] 
+/P 3145 0 R 
+/K 1146 0 R 
+>> 
+endobj
+3159 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3160 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3161 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3162 0 R 3165 0 R 3168 0 R 3171 0 R 3174 0 R ] 
+>> 
+endobj
+3162 0 obj
+<< 
+/S /TD 
+/A [ 3163 0 R 3164 0 R ] 
+/P 3161 0 R 
+/K 1148 0 R 
+>> 
+endobj
+3163 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3164 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3165 0 obj
+<< 
+/S /TD 
+/A [ 3166 0 R 3167 0 R ] 
+/P 3161 0 R 
+/K 1151 0 R 
+>> 
+endobj
+3166 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3167 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3168 0 obj
+<< 
+/S /TD 
+/A [ 3169 0 R 3170 0 R ] 
+/P 3161 0 R 
+/K 1153 0 R 
+>> 
+endobj
+3169 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3170 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3171 0 obj
+<< 
+/S /TD 
+/A [ 3172 0 R 3173 0 R ] 
+/P 3161 0 R 
+/K 1155 0 R 
+>> 
+endobj
+3172 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3173 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3174 0 obj
+<< 
+/S /TD 
+/A [ 3175 0 R 3176 0 R ] 
+/P 3161 0 R 
+/K 1157 0 R 
+>> 
+endobj
+3175 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3176 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3177 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3178 0 R 3181 0 R 3184 0 R 3187 0 R 3190 0 R ] 
+>> 
+endobj
+3178 0 obj
+<< 
+/S /TD 
+/A [ 3179 0 R 3180 0 R ] 
+/P 3177 0 R 
+/K 1159 0 R 
+>> 
+endobj
+3179 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3180 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3181 0 obj
+<< 
+/S /TD 
+/A [ 3182 0 R 3183 0 R ] 
+/P 3177 0 R 
+/K 1162 0 R 
+>> 
+endobj
+3182 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3183 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3184 0 obj
+<< 
+/S /TD 
+/A [ 3185 0 R 3186 0 R ] 
+/P 3177 0 R 
+/K 1164 0 R 
+>> 
+endobj
+3185 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3186 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3187 0 obj
+<< 
+/S /TD 
+/A [ 3188 0 R 3189 0 R ] 
+/P 3177 0 R 
+/K 1166 0 R 
+>> 
+endobj
+3188 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3189 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3190 0 obj
+<< 
+/S /TD 
+/A [ 3191 0 R 3192 0 R ] 
+/P 3177 0 R 
+/K [ 1168 0 R 1170 0 R 1172 0 R ] 
+>> 
+endobj
+3191 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3192 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3193 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3194 0 R 3197 0 R 3200 0 R 3203 0 R 3206 0 R ] 
+>> 
+endobj
+3194 0 obj
+<< 
+/S /TD 
+/A [ 3195 0 R 3196 0 R ] 
+/P 3193 0 R 
+/K 1174 0 R 
+>> 
+endobj
+3195 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3196 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3197 0 obj
+<< 
+/S /TD 
+/A [ 3198 0 R 3199 0 R ] 
+/P 3193 0 R 
+/K 1177 0 R 
+>> 
+endobj
+3198 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3199 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3200 0 obj
+<< 
+/S /TD 
+/A [ 3201 0 R 3202 0 R ] 
+/P 3193 0 R 
+/K 1179 0 R 
+>> 
+endobj
+3201 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3202 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3203 0 obj
+<< 
+/S /TD 
+/A [ 3204 0 R 3205 0 R ] 
+/P 3193 0 R 
+/K 1181 0 R 
+>> 
+endobj
+3204 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3205 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3206 0 obj
+<< 
+/S /TD 
+/A [ 3207 0 R 3208 0 R ] 
+/P 3193 0 R 
+/K 1183 0 R 
+>> 
+endobj
+3207 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3208 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3209 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3210 0 R 3213 0 R 3216 0 R 3219 0 R 3222 0 R ] 
+>> 
+endobj
+3210 0 obj
+<< 
+/S /TD 
+/A [ 3211 0 R 3212 0 R ] 
+/P 3209 0 R 
+/K 1185 0 R 
+>> 
+endobj
+3211 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3212 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3213 0 obj
+<< 
+/S /TD 
+/A [ 3214 0 R 3215 0 R ] 
+/P 3209 0 R 
+/K 1187 0 R 
+>> 
+endobj
+3214 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3215 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3216 0 obj
+<< 
+/S /TD 
+/A [ 3217 0 R 3218 0 R ] 
+/P 3209 0 R 
+/K 1189 0 R 
+>> 
+endobj
+3217 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3218 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3219 0 obj
+<< 
+/S /TD 
+/A [ 3220 0 R 3221 0 R ] 
+/P 3209 0 R 
+/K 1191 0 R 
+>> 
+endobj
+3220 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3221 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3222 0 obj
+<< 
+/S /TD 
+/A [ 3223 0 R 3224 0 R ] 
+/P 3209 0 R 
+/K 1193 0 R 
+>> 
+endobj
+3223 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3224 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3225 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3226 0 R 3229 0 R 3232 0 R 3235 0 R 3238 0 R ] 
+>> 
+endobj
+3226 0 obj
+<< 
+/S /TD 
+/A [ 3227 0 R 3228 0 R ] 
+/P 3225 0 R 
+/K 1195 0 R 
+>> 
+endobj
+3227 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3228 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3229 0 obj
+<< 
+/S /TD 
+/A [ 3230 0 R 3231 0 R ] 
+/P 3225 0 R 
+/K 1197 0 R 
+>> 
+endobj
+3230 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3231 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3232 0 obj
+<< 
+/S /TD 
+/A [ 3233 0 R 3234 0 R ] 
+/P 3225 0 R 
+/K 1199 0 R 
+>> 
+endobj
+3233 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3234 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3235 0 obj
+<< 
+/S /TD 
+/A [ 3236 0 R 3237 0 R ] 
+/P 3225 0 R 
+/K 1201 0 R 
+>> 
+endobj
+3236 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3237 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3238 0 obj
+<< 
+/S /TD 
+/A [ 3239 0 R 3240 0 R ] 
+/P 3225 0 R 
+/K 1203 0 R 
+>> 
+endobj
+3239 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3240 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3241 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3242 0 R 3245 0 R 3248 0 R 3251 0 R 3254 0 R ] 
+>> 
+endobj
+3242 0 obj
+<< 
+/S /TD 
+/A [ 3243 0 R 3244 0 R ] 
+/P 3241 0 R 
+/K 1205 0 R 
+>> 
+endobj
+3243 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3244 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3245 0 obj
+<< 
+/S /TD 
+/A [ 3246 0 R 3247 0 R ] 
+/P 3241 0 R 
+/K 1207 0 R 
+>> 
+endobj
+3246 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3247 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3248 0 obj
+<< 
+/S /TD 
+/A [ 3249 0 R 3250 0 R ] 
+/P 3241 0 R 
+/K 1209 0 R 
+>> 
+endobj
+3249 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3250 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3251 0 obj
+<< 
+/S /TD 
+/A [ 3252 0 R 3253 0 R ] 
+/P 3241 0 R 
+/K 1211 0 R 
+>> 
+endobj
+3252 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3253 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3254 0 obj
+<< 
+/S /TD 
+/A [ 3255 0 R 3256 0 R ] 
+/P 3241 0 R 
+/K 1213 0 R 
+>> 
+endobj
+3255 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3256 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3257 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3258 0 R 3261 0 R 3264 0 R 3267 0 R 3270 0 R ] 
+>> 
+endobj
+3258 0 obj
+<< 
+/S /TD 
+/A [ 3259 0 R 3260 0 R ] 
+/P 3257 0 R 
+/K 1215 0 R 
+>> 
+endobj
+3259 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3260 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3261 0 obj
+<< 
+/S /TD 
+/A [ 3262 0 R 3263 0 R ] 
+/P 3257 0 R 
+/K 1217 0 R 
+>> 
+endobj
+3262 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3263 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3264 0 obj
+<< 
+/S /TD 
+/A [ 3265 0 R 3266 0 R ] 
+/P 3257 0 R 
+/K 1219 0 R 
+>> 
+endobj
+3265 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3266 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3267 0 obj
+<< 
+/S /TD 
+/A [ 3268 0 R 3269 0 R ] 
+/P 3257 0 R 
+/K 1221 0 R 
+>> 
+endobj
+3268 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3269 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3270 0 obj
+<< 
+/S /TD 
+/A [ 3271 0 R 3272 0 R ] 
+/P 3257 0 R 
+/K 1223 0 R 
+>> 
+endobj
+3271 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3272 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3273 0 obj
+<< 
+/S /TR 
+/P 2968 0 R 
+/K [ 3274 0 R 3277 0 R 3280 0 R 3283 0 R 3286 0 R ] 
+>> 
+endobj
+3274 0 obj
+<< 
+/S /TD 
+/A [ 3275 0 R 3276 0 R ] 
+/P 3273 0 R 
+/K 1225 0 R 
+>> 
+endobj
+3275 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3276 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3277 0 obj
+<< 
+/S /TD 
+/A [ 3278 0 R 3279 0 R ] 
+/P 3273 0 R 
+/K 1227 0 R 
+>> 
+endobj
+3278 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3279 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3280 0 obj
+<< 
+/S /TD 
+/A [ 3281 0 R 3282 0 R ] 
+/P 3273 0 R 
+/K 1229 0 R 
+>> 
+endobj
+3281 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3282 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3283 0 obj
+<< 
+/S /TD 
+/A [ 3284 0 R 3285 0 R ] 
+/P 3273 0 R 
+/K 1231 0 R 
+>> 
+endobj
+3284 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3285 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3286 0 obj
+<< 
+/S /TD 
+/A [ 3287 0 R 3288 0 R ] 
+/P 3273 0 R 
+/K 1233 0 R 
+>> 
+endobj
+3287 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3288 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3289 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 3290 0 R 3306 0 R 3322 0 R 3338 0 R 3354 0 R 3370 0 R 3386 0 R 3402 0 R 
+3418 0 R 3434 0 R ] 
+/A [ 3937 0 R ] 
+>> 
+endobj
+3290 0 obj
+<< 
+/S /TR 
+/P 3289 0 R 
+/K [ 3291 0 R 3294 0 R 3297 0 R 3300 0 R 3303 0 R ] 
+>> 
+endobj
+3291 0 obj
+<< 
+/S /TD 
+/A [ 3292 0 R 3293 0 R ] 
+/P 3290 0 R 
+/K 1250 0 R 
+>> 
+endobj
+3292 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3293 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3294 0 obj
+<< 
+/S /TD 
+/A [ 3295 0 R 3296 0 R ] 
+/P 3290 0 R 
+/K 1252 0 R 
+>> 
+endobj
+3295 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3296 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3297 0 obj
+<< 
+/S /TD 
+/A [ 3298 0 R 3299 0 R ] 
+/P 3290 0 R 
+/K 1254 0 R 
+>> 
+endobj
+3298 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3299 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3300 0 obj
+<< 
+/S /TD 
+/A [ 3301 0 R 3302 0 R ] 
+/P 3290 0 R 
+/K 1256 0 R 
+>> 
+endobj
+3301 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3302 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3303 0 obj
+<< 
+/S /TD 
+/A [ 3304 0 R 3305 0 R ] 
+/P 3290 0 R 
+/K 1258 0 R 
+>> 
+endobj
+3304 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3305 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3306 0 obj
+<< 
+/S /TR 
+/P 3289 0 R 
+/K [ 3307 0 R 3310 0 R 3313 0 R 3316 0 R 3319 0 R ] 
+>> 
+endobj
+3307 0 obj
+<< 
+/S /TD 
+/A [ 3308 0 R 3309 0 R ] 
+/P 3306 0 R 
+/K 1260 0 R 
+>> 
+endobj
+3308 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3309 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3310 0 obj
+<< 
+/S /TD 
+/A [ 3311 0 R 3312 0 R ] 
+/P 3306 0 R 
+/K 1262 0 R 
+>> 
+endobj
+3311 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3312 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3313 0 obj
+<< 
+/S /TD 
+/A [ 3314 0 R 3315 0 R ] 
+/P 3306 0 R 
+/K 1264 0 R 
+>> 
+endobj
+3314 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3315 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3316 0 obj
+<< 
+/S /TD 
+/A [ 3317 0 R 3318 0 R ] 
+/P 3306 0 R 
+/K 1266 0 R 
+>> 
+endobj
+3317 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3318 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3319 0 obj
+<< 
+/S /TD 
+/A [ 3320 0 R 3321 0 R ] 
+/P 3306 0 R 
+/K 1268 0 R 
+>> 
+endobj
+3320 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3321 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3322 0 obj
+<< 
+/S /TR 
+/P 3289 0 R 
+/K [ 3323 0 R 3326 0 R 3329 0 R 3332 0 R 3335 0 R ] 
+>> 
+endobj
+3323 0 obj
+<< 
+/S /TD 
+/A [ 3324 0 R 3325 0 R ] 
+/P 3322 0 R 
+/K 1270 0 R 
+>> 
+endobj
+3324 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3325 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3326 0 obj
+<< 
+/S /TD 
+/A [ 3327 0 R 3328 0 R ] 
+/P 3322 0 R 
+/K 1272 0 R 
+>> 
+endobj
+3327 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3328 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3329 0 obj
+<< 
+/S /TD 
+/A [ 3330 0 R 3331 0 R ] 
+/P 3322 0 R 
+/K 1274 0 R 
+>> 
+endobj
+3330 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3331 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3332 0 obj
+<< 
+/S /TD 
+/A [ 3333 0 R 3334 0 R ] 
+/P 3322 0 R 
+/K 1276 0 R 
+>> 
+endobj
+3333 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3334 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3335 0 obj
+<< 
+/S /TD 
+/A [ 3336 0 R 3337 0 R ] 
+/P 3322 0 R 
+/K 1278 0 R 
+>> 
+endobj
+3336 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3337 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3338 0 obj
+<< 
+/S /TR 
+/P 3289 0 R 
+/K [ 3339 0 R 3342 0 R 3345 0 R 3348 0 R 3351 0 R ] 
+>> 
+endobj
+3339 0 obj
+<< 
+/S /TD 
+/A [ 3340 0 R 3341 0 R ] 
+/P 3338 0 R 
+/K 1280 0 R 
+>> 
+endobj
+3340 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3341 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3342 0 obj
+<< 
+/S /TD 
+/A [ 3343 0 R 3344 0 R ] 
+/P 3338 0 R 
+/K 1282 0 R 
+>> 
+endobj
+3343 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3344 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3345 0 obj
+<< 
+/S /TD 
+/A [ 3346 0 R 3347 0 R ] 
+/P 3338 0 R 
+/K 1284 0 R 
+>> 
+endobj
+3346 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3347 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3348 0 obj
+<< 
+/S /TD 
+/A [ 3349 0 R 3350 0 R ] 
+/P 3338 0 R 
+/K 1286 0 R 
+>> 
+endobj
+3349 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3350 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3351 0 obj
+<< 
+/S /TD 
+/A [ 3352 0 R 3353 0 R ] 
+/P 3338 0 R 
+/K 1288 0 R 
+>> 
+endobj
+3352 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3353 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3354 0 obj
+<< 
+/S /TR 
+/P 3289 0 R 
+/K [ 3355 0 R 3358 0 R 3361 0 R 3364 0 R 3367 0 R ] 
+>> 
+endobj
+3355 0 obj
+<< 
+/S /TD 
+/A [ 3356 0 R 3357 0 R ] 
+/P 3354 0 R 
+/K 1290 0 R 
+>> 
+endobj
+3356 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3357 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3358 0 obj
+<< 
+/S /TD 
+/A [ 3359 0 R 3360 0 R ] 
+/P 3354 0 R 
+/K 1292 0 R 
+>> 
+endobj
+3359 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3360 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3361 0 obj
+<< 
+/S /TD 
+/A [ 3362 0 R 3363 0 R ] 
+/P 3354 0 R 
+/K 1294 0 R 
+>> 
+endobj
+3362 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3363 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3364 0 obj
+<< 
+/S /TD 
+/A [ 3365 0 R 3366 0 R ] 
+/P 3354 0 R 
+/K [ 1296 0 R 1298 0 R ] 
+>> 
+endobj
+3365 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3366 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3367 0 obj
+<< 
+/S /TD 
+/A [ 3368 0 R 3369 0 R ] 
+/P 3354 0 R 
+/K 1300 0 R 
+>> 
+endobj
+3368 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3369 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3370 0 obj
+<< 
+/S /TR 
+/P 3289 0 R 
+/K [ 3371 0 R 3374 0 R 3377 0 R 3380 0 R 3383 0 R ] 
+>> 
+endobj
+3371 0 obj
+<< 
+/S /TD 
+/A [ 3372 0 R 3373 0 R ] 
+/P 3370 0 R 
+/K 1302 0 R 
+>> 
+endobj
+3372 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3373 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3374 0 obj
+<< 
+/S /TD 
+/A [ 3375 0 R 3376 0 R ] 
+/P 3370 0 R 
+/K 1304 0 R 
+>> 
+endobj
+3375 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3376 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3377 0 obj
+<< 
+/S /TD 
+/A [ 3378 0 R 3379 0 R ] 
+/P 3370 0 R 
+/K 1306 0 R 
+>> 
+endobj
+3378 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3379 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3380 0 obj
+<< 
+/S /TD 
+/A [ 3381 0 R 3382 0 R ] 
+/P 3370 0 R 
+/K 1308 0 R 
+>> 
+endobj
+3381 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3382 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3383 0 obj
+<< 
+/S /TD 
+/A [ 3384 0 R 3385 0 R ] 
+/P 3370 0 R 
+/K 1310 0 R 
+>> 
+endobj
+3384 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3385 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3386 0 obj
+<< 
+/S /TR 
+/P 3289 0 R 
+/K [ 3387 0 R 3390 0 R 3393 0 R 3396 0 R 3399 0 R ] 
+>> 
+endobj
+3387 0 obj
+<< 
+/S /TD 
+/A [ 3388 0 R 3389 0 R ] 
+/P 3386 0 R 
+/K 1312 0 R 
+>> 
+endobj
+3388 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3389 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3390 0 obj
+<< 
+/S /TD 
+/A [ 3391 0 R 3392 0 R ] 
+/P 3386 0 R 
+/K 1314 0 R 
+>> 
+endobj
+3391 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3392 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3393 0 obj
+<< 
+/S /TD 
+/A [ 3394 0 R 3395 0 R ] 
+/P 3386 0 R 
+/K 1316 0 R 
+>> 
+endobj
+3394 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3395 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3396 0 obj
+<< 
+/S /TD 
+/A [ 3397 0 R 3398 0 R ] 
+/P 3386 0 R 
+/K 1318 0 R 
+>> 
+endobj
+3397 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3398 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3399 0 obj
+<< 
+/S /TD 
+/A [ 3400 0 R 3401 0 R ] 
+/P 3386 0 R 
+/K 1320 0 R 
+>> 
+endobj
+3400 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3401 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3402 0 obj
+<< 
+/S /TR 
+/P 3289 0 R 
+/K [ 3403 0 R 3406 0 R 3409 0 R 3412 0 R 3415 0 R ] 
+>> 
+endobj
+3403 0 obj
+<< 
+/S /TD 
+/A [ 3404 0 R 3405 0 R ] 
+/P 3402 0 R 
+/K 1322 0 R 
+>> 
+endobj
+3404 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3405 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3406 0 obj
+<< 
+/S /TD 
+/A [ 3407 0 R 3408 0 R ] 
+/P 3402 0 R 
+/K 1324 0 R 
+>> 
+endobj
+3407 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3408 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3409 0 obj
+<< 
+/S /TD 
+/A [ 3410 0 R 3411 0 R ] 
+/P 3402 0 R 
+/K 1326 0 R 
+>> 
+endobj
+3410 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3411 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3412 0 obj
+<< 
+/S /TD 
+/A [ 3413 0 R 3414 0 R ] 
+/P 3402 0 R 
+/K 1328 0 R 
+>> 
+endobj
+3413 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3414 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3415 0 obj
+<< 
+/S /TD 
+/A [ 3416 0 R 3417 0 R ] 
+/P 3402 0 R 
+/K 1330 0 R 
+>> 
+endobj
+3416 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3417 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3418 0 obj
+<< 
+/S /TR 
+/P 3289 0 R 
+/K [ 3419 0 R 3422 0 R 3425 0 R 3428 0 R 3431 0 R ] 
+>> 
+endobj
+3419 0 obj
+<< 
+/S /TD 
+/A [ 3420 0 R 3421 0 R ] 
+/P 3418 0 R 
+/K 1332 0 R 
+>> 
+endobj
+3420 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3421 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3422 0 obj
+<< 
+/S /TD 
+/A [ 3423 0 R 3424 0 R ] 
+/P 3418 0 R 
+/K 1334 0 R 
+>> 
+endobj
+3423 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3424 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3425 0 obj
+<< 
+/S /TD 
+/A [ 3426 0 R 3427 0 R ] 
+/P 3418 0 R 
+/K 1336 0 R 
+>> 
+endobj
+3426 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3427 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3428 0 obj
+<< 
+/S /TD 
+/A [ 3429 0 R 3430 0 R ] 
+/P 3418 0 R 
+/K 1338 0 R 
+>> 
+endobj
+3429 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3430 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3431 0 obj
+<< 
+/S /TD 
+/A [ 3432 0 R 3433 0 R ] 
+/P 3418 0 R 
+/K 1340 0 R 
+>> 
+endobj
+3432 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3433 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3434 0 obj
+<< 
+/S /TR 
+/P 3289 0 R 
+/K [ 3435 0 R 3438 0 R 3441 0 R 3444 0 R 3447 0 R ] 
+>> 
+endobj
+3435 0 obj
+<< 
+/S /TD 
+/A [ 3436 0 R 3437 0 R ] 
+/P 3434 0 R 
+/K 1342 0 R 
+>> 
+endobj
+3436 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3437 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3438 0 obj
+<< 
+/S /TD 
+/A [ 3439 0 R 3440 0 R ] 
+/P 3434 0 R 
+/K 1344 0 R 
+>> 
+endobj
+3439 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3440 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3441 0 obj
+<< 
+/S /TD 
+/A [ 3442 0 R 3443 0 R ] 
+/P 3434 0 R 
+/K 1346 0 R 
+>> 
+endobj
+3442 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3443 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3444 0 obj
+<< 
+/S /TD 
+/A [ 3445 0 R 3446 0 R ] 
+/P 3434 0 R 
+/K 1348 0 R 
+>> 
+endobj
+3445 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3446 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3447 0 obj
+<< 
+/S /TD 
+/A [ 3448 0 R 3449 0 R ] 
+/P 3434 0 R 
+/K 1350 0 R 
+>> 
+endobj
+3448 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3449 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3450 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 3451 0 R 3467 0 R 3483 0 R 3499 0 R 3515 0 R ] 
+/A [ 3938 0 R ] 
+>> 
+endobj
+3451 0 obj
+<< 
+/S /TR 
+/P 3450 0 R 
+/K [ 3452 0 R 3455 0 R 3458 0 R 3461 0 R 3464 0 R ] 
+>> 
+endobj
+3452 0 obj
+<< 
+/S /TD 
+/A [ 3453 0 R 3454 0 R ] 
+/P 3451 0 R 
+/K 1360 0 R 
+>> 
+endobj
+3453 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3454 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3455 0 obj
+<< 
+/S /TD 
+/A [ 3456 0 R 3457 0 R ] 
+/P 3451 0 R 
+/K 1362 0 R 
+>> 
+endobj
+3456 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3457 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3458 0 obj
+<< 
+/S /TD 
+/A [ 3459 0 R 3460 0 R ] 
+/P 3451 0 R 
+/K 1364 0 R 
+>> 
+endobj
+3459 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3460 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3461 0 obj
+<< 
+/S /TD 
+/A [ 3462 0 R 3463 0 R ] 
+/P 3451 0 R 
+/K 1366 0 R 
+>> 
+endobj
+3462 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3463 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3464 0 obj
+<< 
+/S /TD 
+/A [ 3465 0 R 3466 0 R ] 
+/P 3451 0 R 
+/K 1368 0 R 
+>> 
+endobj
+3465 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3466 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3467 0 obj
+<< 
+/S /TR 
+/P 3450 0 R 
+/K [ 3468 0 R 3471 0 R 3474 0 R 3477 0 R 3480 0 R ] 
+>> 
+endobj
+3468 0 obj
+<< 
+/S /TD 
+/A [ 3469 0 R 3470 0 R ] 
+/P 3467 0 R 
+/K 1370 0 R 
+>> 
+endobj
+3469 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3470 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3471 0 obj
+<< 
+/S /TD 
+/A [ 3472 0 R 3473 0 R ] 
+/P 3467 0 R 
+/K 1372 0 R 
+>> 
+endobj
+3472 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3473 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3474 0 obj
+<< 
+/S /TD 
+/A [ 3475 0 R 3476 0 R ] 
+/P 3467 0 R 
+/K 1374 0 R 
+>> 
+endobj
+3475 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3476 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3477 0 obj
+<< 
+/S /TD 
+/A [ 3478 0 R 3479 0 R ] 
+/P 3467 0 R 
+/K 1376 0 R 
+>> 
+endobj
+3478 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3479 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3480 0 obj
+<< 
+/S /TD 
+/A [ 3481 0 R 3482 0 R ] 
+/P 3467 0 R 
+/K 1378 0 R 
+>> 
+endobj
+3481 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3482 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3483 0 obj
+<< 
+/S /TR 
+/P 3450 0 R 
+/K [ 3484 0 R 3487 0 R 3490 0 R 3493 0 R 3496 0 R ] 
+>> 
+endobj
+3484 0 obj
+<< 
+/S /TD 
+/A [ 3485 0 R 3486 0 R ] 
+/P 3483 0 R 
+/K 1380 0 R 
+>> 
+endobj
+3485 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3486 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3487 0 obj
+<< 
+/S /TD 
+/A [ 3488 0 R 3489 0 R ] 
+/P 3483 0 R 
+/K 1382 0 R 
+>> 
+endobj
+3488 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3489 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3490 0 obj
+<< 
+/S /TD 
+/A [ 3491 0 R 3492 0 R ] 
+/P 3483 0 R 
+/K 1384 0 R 
+>> 
+endobj
+3491 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3492 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3493 0 obj
+<< 
+/S /TD 
+/A [ 3494 0 R 3495 0 R ] 
+/P 3483 0 R 
+/K 1386 0 R 
+>> 
+endobj
+3494 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3495 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3496 0 obj
+<< 
+/S /TD 
+/A [ 3497 0 R 3498 0 R ] 
+/P 3483 0 R 
+/K 1388 0 R 
+>> 
+endobj
+3497 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3498 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3499 0 obj
+<< 
+/S /TR 
+/P 3450 0 R 
+/K [ 3500 0 R 3503 0 R 3506 0 R 3509 0 R 3512 0 R ] 
+>> 
+endobj
+3500 0 obj
+<< 
+/S /TD 
+/A [ 3501 0 R 3502 0 R ] 
+/P 3499 0 R 
+/K 1390 0 R 
+>> 
+endobj
+3501 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3502 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3503 0 obj
+<< 
+/S /TD 
+/A [ 3504 0 R 3505 0 R ] 
+/P 3499 0 R 
+/K 1392 0 R 
+>> 
+endobj
+3504 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3505 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3506 0 obj
+<< 
+/S /TD 
+/A [ 3507 0 R 3508 0 R ] 
+/P 3499 0 R 
+/K 1394 0 R 
+>> 
+endobj
+3507 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3508 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3509 0 obj
+<< 
+/S /TD 
+/A [ 3510 0 R 3511 0 R ] 
+/P 3499 0 R 
+/K 1396 0 R 
+>> 
+endobj
+3510 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3511 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3512 0 obj
+<< 
+/S /TD 
+/A [ 3513 0 R 3514 0 R ] 
+/P 3499 0 R 
+/K 1398 0 R 
+>> 
+endobj
+3513 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3514 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3515 0 obj
+<< 
+/S /TR 
+/P 3450 0 R 
+/K [ 3516 0 R 3519 0 R 3522 0 R 3525 0 R 3528 0 R ] 
+>> 
+endobj
+3516 0 obj
+<< 
+/S /TD 
+/A [ 3517 0 R 3518 0 R ] 
+/P 3515 0 R 
+/K 1400 0 R 
+>> 
+endobj
+3517 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3518 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3519 0 obj
+<< 
+/S /TD 
+/A [ 3520 0 R 3521 0 R ] 
+/P 3515 0 R 
+/K 1402 0 R 
+>> 
+endobj
+3520 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3521 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3522 0 obj
+<< 
+/S /TD 
+/A [ 3523 0 R 3524 0 R ] 
+/P 3515 0 R 
+/K 1404 0 R 
+>> 
+endobj
+3523 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3524 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3525 0 obj
+<< 
+/S /TD 
+/A [ 3526 0 R 3527 0 R ] 
+/P 3515 0 R 
+/K 1406 0 R 
+>> 
+endobj
+3526 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3527 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3528 0 obj
+<< 
+/S /TD 
+/A [ 3529 0 R 3530 0 R ] 
+/P 3515 0 R 
+/K 1408 0 R 
+>> 
+endobj
+3529 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3530 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3531 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 3532 0 R 3539 0 R 3546 0 R 3553 0 R 3560 0 R 3567 0 R ] 
+/A [ 3939 0 R ] 
+>> 
+endobj
+3532 0 obj
+<< 
+/S /TR 
+/P 3531 0 R 
+/K [ 3533 0 R 3536 0 R ] 
+>> 
+endobj
+3533 0 obj
+<< 
+/S /TD 
+/A [ 3534 0 R 3535 0 R ] 
+/P 3532 0 R 
+/K 1452 0 R 
+>> 
+endobj
+3534 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3535 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3536 0 obj
+<< 
+/S /TD 
+/A [ 3537 0 R 3538 0 R ] 
+/P 3532 0 R 
+/K 1453 0 R 
+>> 
+endobj
+3537 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3538 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3539 0 obj
+<< 
+/S /TR 
+/P 3531 0 R 
+/K [ 3540 0 R 3543 0 R ] 
+>> 
+endobj
+3540 0 obj
+<< 
+/S /TD 
+/A [ 3541 0 R 3542 0 R ] 
+/P 3539 0 R 
+/K 1454 0 R 
+>> 
+endobj
+3541 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3542 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3543 0 obj
+<< 
+/S /TD 
+/A [ 3544 0 R 3545 0 R ] 
+/P 3539 0 R 
+/K 1455 0 R 
+>> 
+endobj
+3544 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3545 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3546 0 obj
+<< 
+/S /TR 
+/P 3531 0 R 
+/K [ 3547 0 R 3550 0 R ] 
+>> 
+endobj
+3547 0 obj
+<< 
+/S /TD 
+/A [ 3548 0 R 3549 0 R ] 
+/P 3546 0 R 
+/K 1456 0 R 
+>> 
+endobj
+3548 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3549 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3550 0 obj
+<< 
+/S /TD 
+/A [ 3551 0 R 3552 0 R ] 
+/P 3546 0 R 
+/K 1457 0 R 
+>> 
+endobj
+3551 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3552 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3553 0 obj
+<< 
+/S /TR 
+/P 3531 0 R 
+/K [ 3554 0 R 3557 0 R ] 
+>> 
+endobj
+3554 0 obj
+<< 
+/S /TD 
+/A [ 3555 0 R 3556 0 R ] 
+/P 3553 0 R 
+/K 1458 0 R 
+>> 
+endobj
+3555 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3556 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3557 0 obj
+<< 
+/S /TD 
+/A [ 3558 0 R 3559 0 R ] 
+/P 3553 0 R 
+/K 1459 0 R 
+>> 
+endobj
+3558 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3559 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3560 0 obj
+<< 
+/S /TR 
+/P 3531 0 R 
+/K [ 3561 0 R 3564 0 R ] 
+>> 
+endobj
+3561 0 obj
+<< 
+/S /TD 
+/A [ 3562 0 R 3563 0 R ] 
+/P 3560 0 R 
+/K 1460 0 R 
+>> 
+endobj
+3562 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3563 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3564 0 obj
+<< 
+/S /TD 
+/A [ 3565 0 R 3566 0 R ] 
+/P 3560 0 R 
+/K 1461 0 R 
+>> 
+endobj
+3565 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3566 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3567 0 obj
+<< 
+/S /TR 
+/P 3531 0 R 
+/K [ 3568 0 R 3571 0 R ] 
+>> 
+endobj
+3568 0 obj
+<< 
+/S /TD 
+/A [ 3569 0 R 3570 0 R ] 
+/P 3567 0 R 
+/K 1462 0 R 
+>> 
+endobj
+3569 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3570 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3571 0 obj
+<< 
+/S /TD 
+/A [ 3572 0 R 3573 0 R ] 
+/P 3567 0 R 
+/K 1463 0 R 
+>> 
+endobj
+3572 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3573 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3574 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 3575 0 R 3585 0 R 3595 0 R 3605 0 R 3615 0 R ] 
+/A [ 3940 0 R ] 
+>> 
+endobj
+3575 0 obj
+<< 
+/S /TR 
+/P 3574 0 R 
+/K [ 3576 0 R 3579 0 R 3582 0 R ] 
+>> 
+endobj
+3576 0 obj
+<< 
+/S /TD 
+/A [ 3577 0 R 3578 0 R ] 
+/P 3575 0 R 
+/K 1519 0 R 
+>> 
+endobj
+3577 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3578 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3579 0 obj
+<< 
+/S /TD 
+/A [ 3580 0 R 3581 0 R ] 
+/P 3575 0 R 
+/K 1520 0 R 
+>> 
+endobj
+3580 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3581 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3582 0 obj
+<< 
+/S /TD 
+/A [ 3583 0 R 3584 0 R ] 
+/P 3575 0 R 
+/K 1521 0 R 
+>> 
+endobj
+3583 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3584 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3585 0 obj
+<< 
+/S /TR 
+/P 3574 0 R 
+/K [ 3586 0 R 3589 0 R 3592 0 R ] 
+>> 
+endobj
+3586 0 obj
+<< 
+/S /TD 
+/A [ 3587 0 R 3588 0 R ] 
+/P 3585 0 R 
+/K 1522 0 R 
+>> 
+endobj
+3587 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3588 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3589 0 obj
+<< 
+/S /TD 
+/A [ 3590 0 R 3591 0 R ] 
+/P 3585 0 R 
+/K 1523 0 R 
+>> 
+endobj
+3590 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3591 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3592 0 obj
+<< 
+/S /TD 
+/A [ 3593 0 R 3594 0 R ] 
+/P 3585 0 R 
+/K 1524 0 R 
+>> 
+endobj
+3593 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3594 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3595 0 obj
+<< 
+/S /TR 
+/P 3574 0 R 
+/K [ 3596 0 R 3599 0 R 3602 0 R ] 
+>> 
+endobj
+3596 0 obj
+<< 
+/S /TD 
+/A [ 3597 0 R 3598 0 R ] 
+/P 3595 0 R 
+/K 1525 0 R 
+>> 
+endobj
+3597 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3598 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3599 0 obj
+<< 
+/S /TD 
+/A [ 3600 0 R 3601 0 R ] 
+/P 3595 0 R 
+/K 1526 0 R 
+>> 
+endobj
+3600 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3601 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3602 0 obj
+<< 
+/S /TD 
+/A [ 3603 0 R 3604 0 R ] 
+/P 3595 0 R 
+/K 1527 0 R 
+>> 
+endobj
+3603 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3604 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3605 0 obj
+<< 
+/S /TR 
+/P 3574 0 R 
+/K [ 3606 0 R 3609 0 R 3612 0 R ] 
+>> 
+endobj
+3606 0 obj
+<< 
+/S /TD 
+/A [ 3607 0 R 3608 0 R ] 
+/P 3605 0 R 
+/K 1528 0 R 
+>> 
+endobj
+3607 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3608 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3609 0 obj
+<< 
+/S /TD 
+/A [ 3610 0 R 3611 0 R ] 
+/P 3605 0 R 
+/K 1529 0 R 
+>> 
+endobj
+3610 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3611 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3612 0 obj
+<< 
+/S /TD 
+/A [ 3613 0 R 3614 0 R ] 
+/P 3605 0 R 
+/K 1530 0 R 
+>> 
+endobj
+3613 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3614 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3615 0 obj
+<< 
+/S /TR 
+/P 3574 0 R 
+/K [ 3616 0 R 3619 0 R 3622 0 R ] 
+>> 
+endobj
+3616 0 obj
+<< 
+/S /TD 
+/A [ 3617 0 R 3618 0 R ] 
+/P 3615 0 R 
+/K 1531 0 R 
+>> 
+endobj
+3617 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3618 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3619 0 obj
+<< 
+/S /TD 
+/A [ 3620 0 R 3621 0 R ] 
+/P 3615 0 R 
+/K 1532 0 R 
+>> 
+endobj
+3620 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3621 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3622 0 obj
+<< 
+/S /TD 
+/A [ 3623 0 R 3624 0 R ] 
+/P 3615 0 R 
+/K 1533 0 R 
+>> 
+endobj
+3623 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3624 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3625 0 obj
+<< 
+/S /Table 
+/P 1704 0 R 
+/K [ 3626 0 R 3633 0 R 3640 0 R 3647 0 R 3654 0 R 3661 0 R 3668 0 R 3675 0 R 
+3682 0 R 3689 0 R 3696 0 R 3703 0 R 3710 0 R 3717 0 R 3724 0 R 3731 0 R 
+3738 0 R ] 
+/A [ 3941 0 R ] 
+>> 
+endobj
+3626 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3627 0 R 3630 0 R ] 
+>> 
+endobj
+3627 0 obj
+<< 
+/S /TD 
+/A [ 3628 0 R 3629 0 R ] 
+/P 3626 0 R 
+/K 1541 0 R 
+>> 
+endobj
+3628 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3629 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3630 0 obj
+<< 
+/S /TD 
+/A [ 3631 0 R 3632 0 R ] 
+/P 3626 0 R 
+/K 1543 0 R 
+>> 
+endobj
+3631 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3632 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3633 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3634 0 R 3637 0 R ] 
+>> 
+endobj
+3634 0 obj
+<< 
+/S /TD 
+/A [ 3635 0 R 3636 0 R ] 
+/P 3633 0 R 
+/K 1545 0 R 
+>> 
+endobj
+3635 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3636 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3637 0 obj
+<< 
+/S /TD 
+/A [ 3638 0 R 3639 0 R ] 
+/P 3633 0 R 
+/K 1547 0 R 
+>> 
+endobj
+3638 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3639 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3640 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3641 0 R 3644 0 R ] 
+>> 
+endobj
+3641 0 obj
+<< 
+/S /TD 
+/A [ 3642 0 R 3643 0 R ] 
+/P 3640 0 R 
+/K 1549 0 R 
+>> 
+endobj
+3642 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3643 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3644 0 obj
+<< 
+/S /TD 
+/A [ 3645 0 R 3646 0 R ] 
+/P 3640 0 R 
+/K 1551 0 R 
+>> 
+endobj
+3645 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3646 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3647 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3648 0 R 3651 0 R ] 
+>> 
+endobj
+3648 0 obj
+<< 
+/S /TD 
+/A [ 3649 0 R 3650 0 R ] 
+/P 3647 0 R 
+/K 1553 0 R 
+>> 
+endobj
+3649 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3650 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3651 0 obj
+<< 
+/S /TD 
+/A [ 3652 0 R 3653 0 R ] 
+/P 3647 0 R 
+/K 1555 0 R 
+>> 
+endobj
+3652 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3653 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3654 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3655 0 R 3658 0 R ] 
+>> 
+endobj
+3655 0 obj
+<< 
+/S /TD 
+/A [ 3656 0 R 3657 0 R ] 
+/P 3654 0 R 
+/K 1557 0 R 
+>> 
+endobj
+3656 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3657 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3658 0 obj
+<< 
+/S /TD 
+/A [ 3659 0 R 3660 0 R ] 
+/P 3654 0 R 
+/K 1559 0 R 
+>> 
+endobj
+3659 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3660 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3661 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3662 0 R 3665 0 R ] 
+>> 
+endobj
+3662 0 obj
+<< 
+/S /TD 
+/A [ 3663 0 R 3664 0 R ] 
+/P 3661 0 R 
+/K 1561 0 R 
+>> 
+endobj
+3663 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3664 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3665 0 obj
+<< 
+/S /TD 
+/A [ 3666 0 R 3667 0 R ] 
+/P 3661 0 R 
+/K 1563 0 R 
+>> 
+endobj
+3666 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3667 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3668 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3669 0 R 3672 0 R ] 
+>> 
+endobj
+3669 0 obj
+<< 
+/S /TD 
+/A [ 3670 0 R 3671 0 R ] 
+/P 3668 0 R 
+/K 1565 0 R 
+>> 
+endobj
+3670 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3671 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3672 0 obj
+<< 
+/S /TD 
+/A [ 3673 0 R 3674 0 R ] 
+/P 3668 0 R 
+/K 1567 0 R 
+>> 
+endobj
+3673 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3674 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3675 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3676 0 R 3679 0 R ] 
+>> 
+endobj
+3676 0 obj
+<< 
+/S /TD 
+/A [ 3677 0 R 3678 0 R ] 
+/P 3675 0 R 
+/K 1569 0 R 
+>> 
+endobj
+3677 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3678 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3679 0 obj
+<< 
+/S /TD 
+/A [ 3680 0 R 3681 0 R ] 
+/P 3675 0 R 
+/K 1571 0 R 
+>> 
+endobj
+3680 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3681 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3682 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3683 0 R 3686 0 R ] 
+>> 
+endobj
+3683 0 obj
+<< 
+/S /TD 
+/A [ 3684 0 R 3685 0 R ] 
+/P 3682 0 R 
+/K 1573 0 R 
+>> 
+endobj
+3684 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3685 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3686 0 obj
+<< 
+/S /TD 
+/A [ 3687 0 R 3688 0 R ] 
+/P 3682 0 R 
+/K 1575 0 R 
+>> 
+endobj
+3687 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3688 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3689 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3690 0 R 3693 0 R ] 
+>> 
+endobj
+3690 0 obj
+<< 
+/S /TD 
+/A [ 3691 0 R 3692 0 R ] 
+/P 3689 0 R 
+/K 1577 0 R 
+>> 
+endobj
+3691 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3692 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3693 0 obj
+<< 
+/S /TD 
+/A [ 3694 0 R 3695 0 R ] 
+/P 3689 0 R 
+/K 1579 0 R 
+>> 
+endobj
+3694 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3695 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3696 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3697 0 R 3700 0 R ] 
+>> 
+endobj
+3697 0 obj
+<< 
+/S /TD 
+/A [ 3698 0 R 3699 0 R ] 
+/P 3696 0 R 
+/K 1581 0 R 
+>> 
+endobj
+3698 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3699 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3700 0 obj
+<< 
+/S /TD 
+/A [ 3701 0 R 3702 0 R ] 
+/P 3696 0 R 
+/K 1583 0 R 
+>> 
+endobj
+3701 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3702 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3703 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3704 0 R 3707 0 R ] 
+>> 
+endobj
+3704 0 obj
+<< 
+/S /TD 
+/A [ 3705 0 R 3706 0 R ] 
+/P 3703 0 R 
+/K 1585 0 R 
+>> 
+endobj
+3705 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3706 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3707 0 obj
+<< 
+/S /TD 
+/A [ 3708 0 R 3709 0 R ] 
+/P 3703 0 R 
+/K 1587 0 R 
+>> 
+endobj
+3708 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3709 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3710 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3711 0 R 3714 0 R ] 
+>> 
+endobj
+3711 0 obj
+<< 
+/S /TD 
+/A [ 3712 0 R 3713 0 R ] 
+/P 3710 0 R 
+/K 1589 0 R 
+>> 
+endobj
+3712 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3713 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3714 0 obj
+<< 
+/S /TD 
+/A [ 3715 0 R 3716 0 R ] 
+/P 3710 0 R 
+/K 1591 0 R 
+>> 
+endobj
+3715 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3716 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3717 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3718 0 R 3721 0 R ] 
+>> 
+endobj
+3718 0 obj
+<< 
+/S /TD 
+/A [ 3719 0 R 3720 0 R ] 
+/P 3717 0 R 
+/K 1593 0 R 
+>> 
+endobj
+3719 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3720 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3721 0 obj
+<< 
+/S /TD 
+/A [ 3722 0 R 3723 0 R ] 
+/P 3717 0 R 
+/K 1595 0 R 
+>> 
+endobj
+3722 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3723 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3724 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3725 0 R 3728 0 R ] 
+>> 
+endobj
+3725 0 obj
+<< 
+/S /TD 
+/A [ 3726 0 R 3727 0 R ] 
+/P 3724 0 R 
+/K 1597 0 R 
+>> 
+endobj
+3726 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3727 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3728 0 obj
+<< 
+/S /TD 
+/A [ 3729 0 R 3730 0 R ] 
+/P 3724 0 R 
+/K 1599 0 R 
+>> 
+endobj
+3729 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3730 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3731 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3732 0 R 3735 0 R ] 
+>> 
+endobj
+3732 0 obj
+<< 
+/S /TD 
+/A [ 3733 0 R 3734 0 R ] 
+/P 3731 0 R 
+/K 1601 0 R 
+>> 
+endobj
+3733 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3734 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3735 0 obj
+<< 
+/S /TD 
+/A [ 3736 0 R 3737 0 R ] 
+/P 3731 0 R 
+/K 1603 0 R 
+>> 
+endobj
+3736 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3737 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3738 0 obj
+<< 
+/S /TR 
+/P 3625 0 R 
+/K [ 3739 0 R 3742 0 R ] 
+>> 
+endobj
+3739 0 obj
+<< 
+/S /TD 
+/A [ 3740 0 R 3741 0 R ] 
+/P 3738 0 R 
+/K 1605 0 R 
+>> 
+endobj
+3740 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3741 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3742 0 obj
+<< 
+/S /TD 
+/A [ 3743 0 R 3744 0 R ] 
+/P 3738 0 R 
+/K 1607 0 R 
+>> 
+endobj
+3743 0 obj
+<< 
+/O /Table 
+/ColSpan 1 
+/RowSpan 1 
+>> 
+endobj
+3744 0 obj
+<< 
+/O /Layout 
+/BlockAlign /Before 
+>> 
+endobj
+3745 0 obj
+<< 
+/S /L 
+/K 3746 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3746 0 obj
+<< 
+/S /LI 
+/P 3745 0 R 
+/K 138 0 R 
+>> 
+endobj
+3747 0 obj
+<< 
+/S /L 
+/K 3748 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3748 0 obj
+<< 
+/S /LI 
+/P 3747 0 R 
+/K 156 0 R 
+>> 
+endobj
+3749 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3750 0 R 3751 0 R 3752 0 R 3753 0 R 3754 0 R 3755 0 R 3756 0 R 3757 0 R 
+] 
+>> 
+endobj
+3750 0 obj
+<< 
+/S /LI 
+/P 3749 0 R 
+/K 158 0 R 
+>> 
+endobj
+3751 0 obj
+<< 
+/S /LI 
+/P 3749 0 R 
+/K 159 0 R 
+>> 
+endobj
+3752 0 obj
+<< 
+/S /LI 
+/P 3749 0 R 
+/K 161 0 R 
+>> 
+endobj
+3753 0 obj
+<< 
+/S /LI 
+/P 3749 0 R 
+/K 162 0 R 
+>> 
+endobj
+3754 0 obj
+<< 
+/S /LI 
+/P 3749 0 R 
+/K 163 0 R 
+>> 
+endobj
+3755 0 obj
+<< 
+/S /LI 
+/P 3749 0 R 
+/K 164 0 R 
+>> 
+endobj
+3756 0 obj
+<< 
+/S /LI 
+/P 3749 0 R 
+/K 165 0 R 
+>> 
+endobj
+3757 0 obj
+<< 
+/S /LI 
+/P 3749 0 R 
+/K 166 0 R 
+>> 
+endobj
+3758 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3759 0 R 3760 0 R ] 
+>> 
+endobj
+3759 0 obj
+<< 
+/S /LI 
+/P 3758 0 R 
+/K 169 0 R 
+>> 
+endobj
+3760 0 obj
+<< 
+/S /LI 
+/P 3758 0 R 
+/K 170 0 R 
+>> 
+endobj
+3761 0 obj
+<< 
+/S /L 
+/K 3762 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3762 0 obj
+<< 
+/S /LI 
+/P 3761 0 R 
+/K 173 0 R 
+>> 
+endobj
+3763 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3764 0 R 3765 0 R 3766 0 R 3767 0 R 3768 0 R ] 
+>> 
+endobj
+3764 0 obj
+<< 
+/S /LI 
+/P 3763 0 R 
+/K 229 0 R 
+>> 
+endobj
+3765 0 obj
+<< 
+/S /LI 
+/P 3763 0 R 
+/K 230 0 R 
+>> 
+endobj
+3766 0 obj
+<< 
+/S /LI 
+/P 3763 0 R 
+/K 231 0 R 
+>> 
+endobj
+3767 0 obj
+<< 
+/S /LI 
+/P 3763 0 R 
+/K 232 0 R 
+>> 
+endobj
+3768 0 obj
+<< 
+/S /LI 
+/P 3763 0 R 
+/K 233 0 R 
+>> 
+endobj
+3769 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3770 0 R 3771 0 R 3772 0 R 3773 0 R 3774 0 R 3775 0 R ] 
+>> 
+endobj
+3770 0 obj
+<< 
+/S /LI 
+/P 3769 0 R 
+/K 235 0 R 
+>> 
+endobj
+3771 0 obj
+<< 
+/S /LI 
+/P 3769 0 R 
+/K 236 0 R 
+>> 
+endobj
+3772 0 obj
+<< 
+/S /LI 
+/P 3769 0 R 
+/K 237 0 R 
+>> 
+endobj
+3773 0 obj
+<< 
+/S /LI 
+/P 3769 0 R 
+/K 238 0 R 
+>> 
+endobj
+3774 0 obj
+<< 
+/S /LI 
+/P 3769 0 R 
+/K 239 0 R 
+>> 
+endobj
+3775 0 obj
+<< 
+/S /L 
+/K 3776 0 R 
+/P 3769 0 R 
+>> 
+endobj
+3776 0 obj
+<< 
+/S /LI 
+/P 3775 0 R 
+/K 240 0 R 
+>> 
+endobj
+3777 0 obj
+<< 
+/S /L 
+/K 3778 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3778 0 obj
+<< 
+/S /LI 
+/P 3777 0 R 
+/K 943 0 R 
+>> 
+endobj
+3779 0 obj
+<< 
+/S /L 
+/K 3780 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3780 0 obj
+<< 
+/S /LI 
+/P 3779 0 R 
+/K 1019 0 R 
+>> 
+endobj
+3781 0 obj
+<< 
+/S /L 
+/K 3782 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3782 0 obj
+<< 
+/S /LI 
+/P 3781 0 R 
+/K 1245 0 R 
+>> 
+endobj
+3783 0 obj
+<< 
+/S /L 
+/K 3784 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3784 0 obj
+<< 
+/S /LI 
+/P 3783 0 R 
+/K 1354 0 R 
+>> 
+endobj
+3785 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3786 0 R 3787 0 R 3788 0 R 3789 0 R 3790 0 R ] 
+>> 
+endobj
+3786 0 obj
+<< 
+/S /LI 
+/P 3785 0 R 
+/K 1412 0 R 
+>> 
+endobj
+3787 0 obj
+<< 
+/S /LI 
+/P 3785 0 R 
+/K 1415 0 R 
+>> 
+endobj
+3788 0 obj
+<< 
+/S /LI 
+/P 3785 0 R 
+/K 1417 0 R 
+>> 
+endobj
+3789 0 obj
+<< 
+/S /LI 
+/P 3785 0 R 
+/K 1419 0 R 
+>> 
+endobj
+3790 0 obj
+<< 
+/S /LI 
+/P 3785 0 R 
+/K 1421 0 R 
+>> 
+endobj
+3791 0 obj
+<< 
+/S /L 
+/K 3792 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3792 0 obj
+<< 
+/S /LI 
+/P 3791 0 R 
+/K 1425 0 R 
+>> 
+endobj
+3793 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3794 0 R 3795 0 R 3796 0 R 3797 0 R ] 
+>> 
+endobj
+3794 0 obj
+<< 
+/S /LI 
+/P 3793 0 R 
+/K 1428 0 R 
+>> 
+endobj
+3795 0 obj
+<< 
+/S /LI 
+/P 3793 0 R 
+/K 1429 0 R 
+>> 
+endobj
+3796 0 obj
+<< 
+/S /LI 
+/P 3793 0 R 
+/K 1430 0 R 
+>> 
+endobj
+3797 0 obj
+<< 
+/S /L 
+/K 3798 0 R 
+/P 3793 0 R 
+>> 
+endobj
+3798 0 obj
+<< 
+/S /LI 
+/P 3797 0 R 
+/K 1431 0 R 
+>> 
+endobj
+3799 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3800 0 R 3801 0 R 3802 0 R 3803 0 R ] 
+>> 
+endobj
+3800 0 obj
+<< 
+/S /LI 
+/P 3799 0 R 
+/K 1433 0 R 
+>> 
+endobj
+3801 0 obj
+<< 
+/S /LI 
+/P 3799 0 R 
+/K 1434 0 R 
+>> 
+endobj
+3802 0 obj
+<< 
+/S /LI 
+/P 3799 0 R 
+/K 1435 0 R 
+>> 
+endobj
+3803 0 obj
+<< 
+/S /LI 
+/P 3799 0 R 
+/K 1436 0 R 
+>> 
+endobj
+3804 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3805 0 R 3806 0 R 3807 0 R ] 
+>> 
+endobj
+3805 0 obj
+<< 
+/S /LI 
+/P 3804 0 R 
+/K 1439 0 R 
+>> 
+endobj
+3806 0 obj
+<< 
+/S /LI 
+/P 3804 0 R 
+/K 1440 0 R 
+>> 
+endobj
+3807 0 obj
+<< 
+/S /LI 
+/P 3804 0 R 
+/K 1441 0 R 
+>> 
+endobj
+3808 0 obj
+<< 
+/S /L 
+/K 3809 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3809 0 obj
+<< 
+/S /LI 
+/P 3808 0 R 
+/K 1445 0 R 
+>> 
+endobj
+3810 0 obj
+<< 
+/S /L 
+/K 3811 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3811 0 obj
+<< 
+/S /LI 
+/P 3810 0 R 
+/K 1448 0 R 
+>> 
+endobj
+3812 0 obj
+<< 
+/S /L 
+/K 3813 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3813 0 obj
+<< 
+/S /LI 
+/P 3812 0 R 
+/K 1465 0 R 
+>> 
+endobj
+3814 0 obj
+<< 
+/S /L 
+/K 3815 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3815 0 obj
+<< 
+/S /LI 
+/P 3814 0 R 
+/K 1470 0 R 
+>> 
+endobj
+3816 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3817 0 R 3818 0 R 3819 0 R ] 
+>> 
+endobj
+3817 0 obj
+<< 
+/S /LI 
+/P 3816 0 R 
+/K 1479 0 R 
+>> 
+endobj
+3818 0 obj
+<< 
+/S /LI 
+/P 3816 0 R 
+/K 1480 0 R 
+>> 
+endobj
+3819 0 obj
+<< 
+/S /LI 
+/P 3816 0 R 
+/K 1481 0 R 
+>> 
+endobj
+3820 0 obj
+<< 
+/S /L 
+/K 3821 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3821 0 obj
+<< 
+/S /LI 
+/P 3820 0 R 
+/K 1495 0 R 
+>> 
+endobj
+3822 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3823 0 R 3824 0 R ] 
+>> 
+endobj
+3823 0 obj
+<< 
+/S /LI 
+/P 3822 0 R 
+/K 1497 0 R 
+>> 
+endobj
+3824 0 obj
+<< 
+/S /LI 
+/P 3822 0 R 
+/K 1498 0 R 
+>> 
+endobj
+3825 0 obj
+<< 
+/S /L 
+/K 3826 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3826 0 obj
+<< 
+/S /LI 
+/P 3825 0 R 
+/K 1499 0 R 
+>> 
+endobj
+3827 0 obj
+<< 
+/S /L 
+/K 3828 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3828 0 obj
+<< 
+/S /LI 
+/P 3827 0 R 
+/K 1501 0 R 
+>> 
+endobj
+3829 0 obj
+<< 
+/S /L 
+/K 3830 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3830 0 obj
+<< 
+/S /LI 
+/P 3829 0 R 
+/K 1503 0 R 
+>> 
+endobj
+3831 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3832 0 R 3833 0 R 3834 0 R 3835 0 R 3836 0 R 3837 0 R ] 
+>> 
+endobj
+3832 0 obj
+<< 
+/S /LI 
+/P 3831 0 R 
+/K 1505 0 R 
+>> 
+endobj
+3833 0 obj
+<< 
+/S /LI 
+/P 3831 0 R 
+/K 1506 0 R 
+>> 
+endobj
+3834 0 obj
+<< 
+/S /LI 
+/P 3831 0 R 
+/K 1509 0 R 
+>> 
+endobj
+3835 0 obj
+<< 
+/S /LI 
+/P 3831 0 R 
+/K 1510 0 R 
+>> 
+endobj
+3836 0 obj
+<< 
+/S /LI 
+/P 3831 0 R 
+/K 1511 0 R 
+>> 
+endobj
+3837 0 obj
+<< 
+/S /L 
+/K 3838 0 R 
+/P 3831 0 R 
+>> 
+endobj
+3838 0 obj
+<< 
+/S /LI 
+/P 3837 0 R 
+/K 1512 0 R 
+>> 
+endobj
+3839 0 obj
+<< 
+/S /L 
+/K 3840 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3840 0 obj
+<< 
+/S /LI 
+/P 3839 0 R 
+/K 1514 0 R 
+>> 
+endobj
+3841 0 obj
+<< 
+/S /L 
+/K 3842 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3842 0 obj
+<< 
+/S /LI 
+/P 3841 0 R 
+/K 1535 0 R 
+>> 
+endobj
+3843 0 obj
+<< 
+/S /L 
+/K 3844 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3844 0 obj
+<< 
+/S /LI 
+/P 3843 0 R 
+/K 1621 0 R 
+>> 
+endobj
+3845 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3846 0 R 3847 0 R 3848 0 R 3849 0 R ] 
+>> 
+endobj
+3846 0 obj
+<< 
+/S /LI 
+/P 3845 0 R 
+/K 1624 0 R 
+>> 
+endobj
+3847 0 obj
+<< 
+/S /LI 
+/P 3845 0 R 
+/K 1625 0 R 
+>> 
+endobj
+3848 0 obj
+<< 
+/S /LI 
+/P 3845 0 R 
+/K 1626 0 R 
+>> 
+endobj
+3849 0 obj
+<< 
+/S /L 
+/K 3850 0 R 
+/P 3845 0 R 
+>> 
+endobj
+3850 0 obj
+<< 
+/S /LI 
+/P 3849 0 R 
+/K 1627 0 R 
+>> 
+endobj
+3851 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3852 0 R 3853 0 R 3854 0 R 3855 0 R 3856 0 R 3857 0 R ] 
+>> 
+endobj
+3852 0 obj
+<< 
+/S /LI 
+/P 3851 0 R 
+/K 1630 0 R 
+>> 
+endobj
+3853 0 obj
+<< 
+/S /LI 
+/P 3851 0 R 
+/K 1631 0 R 
+>> 
+endobj
+3854 0 obj
+<< 
+/S /LI 
+/P 3851 0 R 
+/K 1632 0 R 
+>> 
+endobj
+3855 0 obj
+<< 
+/S /LI 
+/P 3851 0 R 
+/K 1634 0 R 
+>> 
+endobj
+3856 0 obj
+<< 
+/S /LI 
+/P 3851 0 R 
+/K 1635 0 R 
+>> 
+endobj
+3857 0 obj
+<< 
+/S /L 
+/K 3858 0 R 
+/P 3851 0 R 
+>> 
+endobj
+3858 0 obj
+<< 
+/S /LI 
+/P 3857 0 R 
+/K 1636 0 R 
+>> 
+endobj
+3859 0 obj
+<< 
+/S /L 
+/K 3860 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3860 0 obj
+<< 
+/S /LI 
+/P 3859 0 R 
+/K 1638 0 R 
+>> 
+endobj
+3861 0 obj
+<< 
+/S /L 
+/K 3862 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3862 0 obj
+<< 
+/S /LI 
+/P 3861 0 R 
+/K 1643 0 R 
+>> 
+endobj
+3863 0 obj
+<< 
+/S /L 
+/K 3864 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3864 0 obj
+<< 
+/S /LI 
+/P 3863 0 R 
+/K 1648 0 R 
+>> 
+endobj
+3865 0 obj
+<< 
+/S /L 
+/K 3866 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3866 0 obj
+<< 
+/S /LI 
+/P 3865 0 R 
+/K 1651 0 R 
+>> 
+endobj
+3867 0 obj
+<< 
+/S /L 
+/K 3868 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3868 0 obj
+<< 
+/S /LI 
+/P 3867 0 R 
+/K 1657 0 R 
+>> 
+endobj
+3869 0 obj
+<< 
+/S /L 
+/K 3870 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3870 0 obj
+<< 
+/S /LI 
+/P 3869 0 R 
+/K 1662 0 R 
+>> 
+endobj
+3871 0 obj
+<< 
+/S /L 
+/K 3872 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3872 0 obj
+<< 
+/S /LI 
+/P 3871 0 R 
+/K 1664 0 R 
+>> 
+endobj
+3873 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3874 0 R 3875 0 R 3876 0 R 3877 0 R 3878 0 R 3879 0 R ] 
+>> 
+endobj
+3874 0 obj
+<< 
+/S /LI 
+/P 3873 0 R 
+/K 1666 0 R 
+>> 
+endobj
+3875 0 obj
+<< 
+/S /LI 
+/P 3873 0 R 
+/K 1668 0 R 
+>> 
+endobj
+3876 0 obj
+<< 
+/S /LI 
+/P 3873 0 R 
+/K 1670 0 R 
+>> 
+endobj
+3877 0 obj
+<< 
+/S /LI 
+/P 3873 0 R 
+/K 1672 0 R 
+>> 
+endobj
+3878 0 obj
+<< 
+/S /LI 
+/P 3873 0 R 
+/K 1674 0 R 
+>> 
+endobj
+3879 0 obj
+<< 
+/S /L 
+/K 3880 0 R 
+/P 3873 0 R 
+>> 
+endobj
+3880 0 obj
+<< 
+/S /LI 
+/P 3879 0 R 
+/K 1676 0 R 
+>> 
+endobj
+3881 0 obj
+<< 
+/S /L 
+/K 3882 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3882 0 obj
+<< 
+/S /LI 
+/P 3881 0 R 
+/K 1678 0 R 
+>> 
+endobj
+3883 0 obj
+<< 
+/S /L 
+/K 3884 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3884 0 obj
+<< 
+/S /LI 
+/P 3883 0 R 
+/K 1682 0 R 
+>> 
+endobj
+3885 0 obj
+<< 
+/S /L 
+/K 3886 0 R 
+/P 1704 0 R 
+>> 
+endobj
+3886 0 obj
+<< 
+/S /LI 
+/P 3885 0 R 
+/K 1689 0 R 
+>> 
+endobj
+3887 0 obj
+<< 
+/S /L 
+/P 1704 0 R 
+/K [ 3888 0 R 3889 0 R 3890 0 R 3891 0 R 3892 0 R 3893 0 R ] 
+>> 
+endobj
+3888 0 obj
+<< 
+/S /LI 
+/P 3887 0 R 
+/K 1691 0 R 
+>> 
+endobj
+3889 0 obj
+<< 
+/S /LI 
+/P 3887 0 R 
+/K 1693 0 R 
+>> 
+endobj
+3890 0 obj
+<< 
+/S /LI 
+/P 3887 0 R 
+/K 1695 0 R 
+>> 
+endobj
+3891 0 obj
+<< 
+/S /LI 
+/P 3887 0 R 
+/K 1697 0 R 
+>> 
+endobj
+3892 0 obj
+<< 
+/S /LI 
+/P 3887 0 R 
+/K 1699 0 R 
+>> 
+endobj
+3893 0 obj
+<< 
+/S /LI 
+/P 3887 0 R 
+/K 1701 0 R 
+>> 
+endobj
+3894 0 obj
+<< 
+/Nums [ 0 3895 0 R 1 3896 0 R 2 3897 0 R 3 3898 0 R 4 3899 0 R 5 3900 0 R 
+6 3902 0 R 7 3903 0 R 8 3904 0 R 9 3909 0 R 10 3911 0 R 11 3912 0 R 
+12 3913 0 R 13 3914 0 R 14 3915 0 R 15 3918 0 R 16 3921 0 R 17 3922 0 R 
+18 3923 0 R 19 3925 0 R 20 3926 0 R ] 
+>> 
+endobj
+3895 0 obj
+[ 
+129 0 R 130 0 R 133 0 R 135 0 R 136 0 R 137 0 R 138 0 R 140 0 R 142 0 R 
+143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R 
+
+]
+endobj
+3896 0 obj
+[ 
+151 0 R 152 0 R 153 0 R 154 0 R 156 0 R 157 0 R 158 0 R 159 0 R 161 0 R 
+162 0 R 163 0 R 164 0 R 165 0 R 166 0 R 167 0 R 168 0 R 169 0 R 
+170 0 R 171 0 R 172 0 R 173 0 R 174 0 R 
+]
+endobj
+3897 0 obj
+[ 
+175 0 R 178 0 R 180 0 R 182 0 R 184 0 R 186 0 R 188 0 R 190 0 R 192 0 R 
+194 0 R 196 0 R 199 0 R 201 0 R 203 0 R 205 0 R 207 0 R 209 0 R 
+211 0 R 213 0 R 215 0 R 217 0 R 219 0 R 221 0 R 222 0 R 224 0 R 
+225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 
+233 0 R 
+]
+endobj
+3898 0 obj
+[ 
+234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 243 0 R 
+244 0 R 246 0 R 248 0 R 250 0 R 252 0 R 254 0 R 256 0 R 258 0 R 
+260 0 R 262 0 R 264 0 R 266 0 R 268 0 R 270 0 R 272 0 R 274 0 R 
+276 0 R 278 0 R 280 0 R 282 0 R 284 0 R 286 0 R 287 0 R 289 0 R 
+291 0 R 293 0 R 295 0 R 297 0 R 299 0 R 301 0 R 303 0 R 305 0 R 
+307 0 R 309 0 R 311 0 R 313 0 R 315 0 R 317 0 R 319 0 R 321 0 R 
+323 0 R 325 0 R 327 0 R 329 0 R 331 0 R 333 0 R 335 0 R 337 0 R 
+339 0 R 341 0 R 343 0 R 345 0 R 347 0 R 349 0 R 351 0 R 353 0 R 
+355 0 R 357 0 R 359 0 R 361 0 R 363 0 R 365 0 R 367 0 R 369 0 R 
+371 0 R 373 0 R 375 0 R 377 0 R 379 0 R 381 0 R 383 0 R 385 0 R 
+387 0 R 389 0 R 391 0 R 393 0 R 395 0 R 397 0 R 399 0 R 401 0 R 
+403 0 R 405 0 R 407 0 R 409 0 R 411 0 R 413 0 R 415 0 R 417 0 R 
+419 0 R 421 0 R 423 0 R 425 0 R 427 0 R 
+]
+endobj
+3899 0 obj
+[ 
+428 0 R 430 0 R 432 0 R 434 0 R 436 0 R 438 0 R 440 0 R 442 0 R 444 0 R 
+446 0 R 448 0 R 450 0 R 452 0 R 454 0 R 456 0 R 458 0 R 460 0 R 
+462 0 R 464 0 R 466 0 R 468 0 R 470 0 R 472 0 R 474 0 R 476 0 R 
+478 0 R 479 0 R 481 0 R 483 0 R 485 0 R 487 0 R 489 0 R 491 0 R 
+493 0 R 495 0 R 497 0 R 499 0 R 501 0 R 503 0 R 505 0 R 507 0 R 
+509 0 R 511 0 R 513 0 R 515 0 R 517 0 R 519 0 R 521 0 R 523 0 R 
+525 0 R 527 0 R 529 0 R 531 0 R 533 0 R 535 0 R 537 0 R 539 0 R 
+541 0 R 543 0 R 545 0 R 547 0 R 549 0 R 551 0 R 553 0 R 555 0 R 
+557 0 R 559 0 R 561 0 R 563 0 R 565 0 R 567 0 R 569 0 R 571 0 R 
+573 0 R 575 0 R 577 0 R 579 0 R 581 0 R 583 0 R 585 0 R 587 0 R 
+589 0 R 591 0 R 593 0 R 595 0 R 597 0 R 599 0 R 600 0 R 602 0 R 
+604 0 R 606 0 R 608 0 R 610 0 R 612 0 R 614 0 R 616 0 R 618 0 R 
+620 0 R 622 0 R 624 0 R 626 0 R 628 0 R 630 0 R 632 0 R 634 0 R 
+636 0 R 638 0 R 640 0 R 642 0 R 644 0 R 646 0 R 648 0 R 650 0 R 
+652 0 R 654 0 R 656 0 R 658 0 R 660 0 R 662 0 R 664 0 R 666 0 R 
+668 0 R 670 0 R 672 0 R 674 0 R 676 0 R 678 0 R 680 0 R 682 0 R 
+684 0 R 686 0 R 688 0 R 690 0 R 692 0 R 694 0 R 696 0 R 698 0 R 
+700 0 R 701 0 R 
+]
+endobj
+3900 0 obj
+[ 
+702 0 R 706 0 R 706 0 R 706 0 R 706 0 R 706 0 R 706 0 R 706 0 R 706 0 R 
+706 0 R 706 0 R 706 0 R 706 0 R 706 0 R 706 0 R 706 0 R 706 0 R 
+706 0 R 706 0 R 706 0 R 706 0 R 706 0 R 706 0 R 704 0 R 707 0 R 
+708 0 R 710 0 R 712 0 R 714 0 R 716 0 R 718 0 R 720 0 R 722 0 R 
+724 0 R 726 0 R 728 0 R 730 0 R 732 0 R 734 0 R 736 0 R 738 0 R 
+740 0 R 742 0 R 744 0 R 746 0 R 748 0 R 750 0 R 752 0 R 754 0 R 
+756 0 R 758 0 R 
+]
+endobj
+3901 0 obj
+<< 
+/O /Layout 
+/BBox [ 107 405 504 703 ] 
+/Placement /Inline 
+>> 
+endobj
+3902 0 obj
+[ 
+760 0 R 762 0 R 763 0 R 765 0 R 767 0 R 769 0 R 769 0 R 769 0 R 771 0 R 
+773 0 R 775 0 R 777 0 R 779 0 R 781 0 R 783 0 R 785 0 R 787 0 R 
+789 0 R 791 0 R 793 0 R 795 0 R 797 0 R 799 0 R 801 0 R 803 0 R 
+805 0 R 807 0 R 809 0 R 811 0 R 813 0 R 815 0 R 817 0 R 819 0 R 
+821 0 R 823 0 R 825 0 R 827 0 R 829 0 R 831 0 R 833 0 R 835 0 R 
+837 0 R 839 0 R 841 0 R 843 0 R 845 0 R 847 0 R 849 0 R 851 0 R 
+853 0 R 855 0 R 857 0 R 859 0 R 861 0 R 863 0 R 865 0 R 867 0 R 
+869 0 R 871 0 R 873 0 R 875 0 R 877 0 R 879 0 R 881 0 R 883 0 R 
+885 0 R 887 0 R 889 0 R 891 0 R 893 0 R 895 0 R 897 0 R 899 0 R 
+901 0 R 903 0 R 905 0 R 907 0 R 909 0 R 911 0 R 913 0 R 915 0 R 
+917 0 R 919 0 R 921 0 R 923 0 R 925 0 R 927 0 R 929 0 R 931 0 R 
+933 0 R 935 0 R 937 0 R 939 0 R 941 0 R 
+]
+endobj
+3903 0 obj
+[ 
+943 0 R 944 0 R 945 0 R 947 0 R 949 0 R 951 0 R 951 0 R 951 0 R 953 0 R 
+955 0 R 957 0 R 959 0 R 961 0 R 963 0 R 965 0 R 967 0 R 969 0 R 
+971 0 R 973 0 R 975 0 R 977 0 R 979 0 R 981 0 R 983 0 R 985 0 R 
+987 0 R 989 0 R 991 0 R 993 0 R 995 0 R 997 0 R 999 0 R 1001 0 R 
+1003 0 R 1005 0 R 1007 0 R 1009 0 R 1011 0 R 1013 0 R 1015 0 R 1017 0 R 
+1018 0 R 1019 0 R 1020 0 R 1021 0 R 1022 0 R 1023 0 R 1024 0 R 
+]
+endobj
+3904 0 obj
+[ 
+1025 0 R 1027 0 R 1029 0 R 1031 0 R 1033 0 R 1035 0 R 1037 0 R 1039 0 R 
+1041 0 R 1043 0 R 1045 0 R 1047 0 R 1049 0 R 1051 0 R 1053 0 R 1055 0 R 
+1057 0 R 1059 0 R 1061 0 R 1063 0 R 1065 0 R 1067 0 R 1069 0 R 1071 0 R 
+1073 0 R 1075 0 R 1077 0 R 1079 0 R 1081 0 R 1083 0 R 1085 0 R 1087 0 R 
+1089 0 R 1091 0 R 1093 0 R 1095 0 R 1097 0 R 1099 0 R 1101 0 R 1103 0 R 
+1105 0 R 1107 0 R 1109 0 R 1111 0 R 1113 0 R 1115 0 R 1117 0 R 1119 0 R 
+1121 0 R 1123 0 R 1125 0 R 1127 0 R 1129 0 R 1131 0 R 1133 0 R 1135 0 R 
+1137 0 R 1139 0 R 1137 0 R 1140 0 R 1142 0 R 1144 0 R 1146 0 R 1148 0 R 
+1150 0 R 1148 0 R 1151 0 R 1153 0 R 1155 0 R 1157 0 R 1159 0 R 1161 0 R 
+1159 0 R 1162 0 R 1164 0 R 1166 0 R 1168 0 R 1170 0 R 1172 0 R 1174 0 R 
+1176 0 R 1177 0 R 1179 0 R 1181 0 R 1183 0 R 1185 0 R 1187 0 R 1189 0 R 
+1191 0 R 1193 0 R 1195 0 R 1197 0 R 1199 0 R 1201 0 R 1203 0 R 1205 0 R 
+1207 0 R 1209 0 R 1211 0 R 1213 0 R 1215 0 R 1217 0 R 1219 0 R 1221 0 R 
+1223 0 R 1225 0 R 1227 0 R 1229 0 R 1231 0 R 1233 0 R 1235 0 R 1236 0 R 
+
+]
+endobj
+3905 0 obj
+<< 
+/O /Layout 
+/BaselineShift 4 
+>> 
+endobj
+3906 0 obj
+<< 
+/O /Layout 
+/BaselineShift 4 
+>> 
+endobj
+3907 0 obj
+<< 
+/O /Layout 
+/BaselineShift 4 
+>> 
+endobj
+3908 0 obj
+<< 
+/O /Layout 
+/BaselineShift 4 
+>> 
+endobj
+3909 0 obj
+[ 
+1236 0 R 1237 0 R 1238 0 R 1239 0 R 1243 0 R 1243 0 R 1243 0 R 1243 0 R 
+1243 0 R 1243 0 R 1243 0 R 1243 0 R 1243 0 R 1243 0 R 1243 0 R 1243 0 R 
+1243 0 R 1241 0 R 1244 0 R 
+]
+endobj
+3910 0 obj
+<< 
+/O /Layout 
+/BBox [ 107 287 504 585 ] 
+/Placement /Inline 
+>> 
+endobj
+3911 0 obj
+[ 
+1245 0 R 1246 0 R 1247 0 R 1248 0 R 1250 0 R 1252 0 R 1254 0 R 1256 0 R 
+1258 0 R 1260 0 R 1262 0 R 1264 0 R 1266 0 R 1268 0 R 1270 0 R 1272 0 R 
+1274 0 R 1276 0 R 1278 0 R 1280 0 R 1282 0 R 1284 0 R 1286 0 R 1288 0 R 
+1290 0 R 1292 0 R 1294 0 R 1296 0 R 1298 0 R 1300 0 R 1302 0 R 1304 0 R 
+1306 0 R 1308 0 R 1310 0 R 1312 0 R 1314 0 R 1316 0 R 1318 0 R 1320 0 R 
+1322 0 R 1324 0 R 1326 0 R 1328 0 R 1330 0 R 1332 0 R 1334 0 R 1336 0 R 
+1338 0 R 1340 0 R 1342 0 R 1344 0 R 1346 0 R 1348 0 R 1350 0 R 1352 0 R 
+1353 0 R 1354 0 R 1355 0 R 1356 0 R 1357 0 R 
+]
+endobj
+3912 0 obj
+[ 
+1358 0 R 1360 0 R 1362 0 R 1364 0 R 1366 0 R 1368 0 R 1370 0 R 1372 0 R 
+1374 0 R 1376 0 R 1378 0 R 1380 0 R 1382 0 R 1384 0 R 1386 0 R 1388 0 R 
+1390 0 R 1392 0 R 1394 0 R 1396 0 R 1398 0 R 1400 0 R 1402 0 R 1404 0 R 
+1406 0 R 1408 0 R 1410 0 R 1411 0 R 1412 0 R 1415 0 R 1417 0 R 1419 0 R 
+1421 0 R 1423 0 R 1425 0 R 1426 0 R 1427 0 R 1428 0 R 1429 0 R 1430 0 R 
+1431 0 R 1432 0 R 1433 0 R 1434 0 R 1435 0 R 1436 0 R 
+]
+endobj
+3913 0 obj
+[ 
+1437 0 R 1438 0 R 1439 0 R 1440 0 R 1441 0 R 1442 0 R 1443 0 R 1444 0 R 
+1445 0 R 1446 0 R 1448 0 R 1449 0 R 1450 0 R 1452 0 R 1453 0 R 1454 0 R 
+1455 0 R 1456 0 R 1457 0 R 1458 0 R 1459 0 R 1460 0 R 1461 0 R 1462 0 R 
+1463 0 R 1464 0 R 1465 0 R 1466 0 R 1467 0 R 1469 0 R 
+]
+endobj
+3914 0 obj
+[ 
+1470 0 R 1471 0 R 1472 0 R 1474 0 R 1475 0 R 1476 0 R 1477 0 R 1478 0 R 
+1479 0 R 1480 0 R 1481 0 R 1482 0 R 1483 0 R 
+]
+endobj
+3915 0 obj
+[ 
+1484 0 R 1488 0 R 1488 0 R 1488 0 R 1488 0 R 1488 0 R 1488 0 R 1488 0 R 
+1488 0 R 1488 0 R 1488 0 R 1488 0 R 1488 0 R 1488 0 R 1488 0 R 1488 0 R 
+1488 0 R 1488 0 R 1488 0 R 1488 0 R 1488 0 R 1488 0 R 1488 0 R 1488 0 R 
+1486 0 R 1489 0 R 1490 0 R 1494 0 R 1494 0 R 1494 0 R 1494 0 R 1494 0 R 
+1494 0 R 1494 0 R 1494 0 R 1494 0 R 1494 0 R 1494 0 R 1494 0 R 1494 0 R 
+1494 0 R 1494 0 R 1494 0 R 1494 0 R 1494 0 R 1494 0 R 1494 0 R 1494 0 R 
+1494 0 R 1494 0 R 1492 0 R 
+]
+endobj
+3916 0 obj
+<< 
+/O /Layout 
+/BBox [ 125 426 486 702 ] 
+/Placement /Inline 
+>> 
+endobj
+3917 0 obj
+<< 
+/O /Layout 
+/BBox [ 125 103 486 379 ] 
+/Placement /Inline 
+>> 
+endobj
+3918 0 obj
+[ 
+1495 0 R 1496 0 R 1497 0 R 1498 0 R 1499 0 R 1500 0 R 1501 0 R 1502 0 R 
+1503 0 R 1504 0 R 1505 0 R 1506 0 R 1507 0 R 1506 0 R 1508 0 R 1506 0 R 
+1509 0 R 1510 0 R 1511 0 R 1512 0 R 1513 0 R 1514 0 R 1515 0 R 1516 0 R 
+
+]
+endobj
+3919 0 obj
+<< 
+/O /Layout 
+/BaselineShift 5 
+>> 
+endobj
+3920 0 obj
+<< 
+/O /Layout 
+/BaselineShift 5 
+>> 
+endobj
+3921 0 obj
+[ 
+1517 0 R 1519 0 R 1520 0 R 1521 0 R 1522 0 R 1523 0 R 1524 0 R 1525 0 R 
+1526 0 R 1527 0 R 1528 0 R 1529 0 R 1530 0 R 1531 0 R 1532 0 R 1533 0 R 
+1534 0 R 
+]
+endobj
+3922 0 obj
+[ 
+1535 0 R 1536 0 R 1537 0 R 1539 0 R 1541 0 R 1543 0 R 1545 0 R 1547 0 R 
+1549 0 R 1551 0 R 1553 0 R 1555 0 R 1557 0 R 1559 0 R 1561 0 R 1563 0 R 
+1565 0 R 1567 0 R 1569 0 R 1571 0 R 1573 0 R 1575 0 R 1577 0 R 1579 0 R 
+1581 0 R 1583 0 R 1585 0 R 1587 0 R 1589 0 R 1591 0 R 1593 0 R 1595 0 R 
+1597 0 R 1599 0 R 1601 0 R 1603 0 R 1605 0 R 1607 0 R 1609 0 R 1611 0 R 
+1613 0 R 1615 0 R 1617 0 R 1619 0 R 1621 0 R 1622 0 R 
+]
+endobj
+3923 0 obj
+[ 
+1622 0 R 1623 0 R 1624 0 R 1625 0 R 1626 0 R 1627 0 R 1628 0 R 1629 0 R 
+1630 0 R 1631 0 R 1632 0 R 1633 0 R 1632 0 R 1634 0 R 1635 0 R 1636 0 R 
+1637 0 R 1638 0 R 1639 0 R 1640 0 R 1642 0 R 1643 0 R 1644 0 R 1645 0 R 
+1647 0 R 
+]
+endobj
+3924 0 obj
+<< 
+/O /Layout 
+/BaselineShift 5 
+>> 
+endobj
+3925 0 obj
+[ 
+1648 0 R 1649 0 R 1650 0 R 1651 0 R 1652 0 R 1653 0 R 1654 0 R 1655 0 R 
+1656 0 R 1657 0 R 1658 0 R 1659 0 R 1660 0 R 1662 0 R 1663 0 R 1664 0 R 
+1665 0 R 1666 0 R 1668 0 R 1670 0 R 
+]
+endobj
+3926 0 obj
+[ 
+1672 0 R 1674 0 R 1676 0 R 1677 0 R 1678 0 R 1680 0 R 1682 0 R 1684 0 R 
+1686 0 R 1688 0 R 1689 0 R 1690 0 R 1691 0 R 1693 0 R 1695 0 R 1697 0 R 
+1699 0 R 1701 0 R 1703 0 R 
+]
+endobj
+3927 0 obj
+<< 
+/O /Layout 
+/BBox [ 72.4799 362.80394 541.0883 705.98099 ] 
+/Placement /Block 
+/StartIndent 0.4799 
+/EndIndent -1.0883 
+>> 
+endobj
+3928 0 obj
+<< 
+/O /Layout 
+/BBox [ 72.48 384.89728 538.69487 484.67387 ] 
+/Placement /Block 
+/StartIndent 0.48 
+/EndIndent 1.30513 
+>> 
+endobj
+3929 0 obj
+<< 
+/O /Layout 
+/BBox [ 70.2 89.75717 542.66122 369.60887 ] 
+/Placement /Block 
+/StartIndent -1.8 
+/EndIndent -2.66122 
+>> 
+endobj
+3930 0 obj
+<< 
+/O /Layout 
+/BBox [ 70.2 638.97008 540.06009 721.02867 ] 
+/Placement /Block 
+/StartIndent -1.8 
+/EndIndent -0.06009 
+>> 
+endobj
+3931 0 obj
+<< 
+/O /Layout 
+/BBox [ 70.2 423.87007 542.37183 623.58836 ] 
+/Placement /Block 
+/StartIndent -1.8 
+/EndIndent -2.37183 
+>> 
+endobj
+3932 0 obj
+<< 
+/O /Layout 
+/BBox [ 70.2 216.24007 542.99339 408.48886 ] 
+/Placement /Block 
+/StartIndent -1.8 
+/EndIndent -2.99339 
+>> 
+endobj
+3933 0 obj
+<< 
+/O /Layout 
+/BBox [ 70.2 255.45018 527.81358 336.66867 ] 
+/Placement /Block 
+/StartIndent -1.8 
+/EndIndent 12.18642 
+>> 
+endobj
+3934 0 obj
+<< 
+/O /Layout 
+/BBox [ 70.2 190.13718 542.96393 627.59418 ] 
+/Placement /Block 
+/StartIndent -1.8 
+/EndIndent -2.96393 
+>> 
+endobj
+3935 0 obj
+<< 
+/O /Layout 
+/BBox [ 70.2 469.91737 543.7881 627.59418 ] 
+/Placement /Block 
+/StartIndent -1.8 
+/EndIndent -3.7881 
+>> 
+endobj
+3936 0 obj
+<< 
+/O /Layout 
+/BBox [ 67.92 138.41718 546.26485 702.89388 ] 
+/Placement /Block 
+/StartIndent -4.08 
+/EndIndent -6.26485 
+>> 
+endobj
+3937 0 obj
+<< 
+/O /Layout 
+/BBox [ 70.2 319.31738 531.57573 552.65387 ] 
+/Placement /Block 
+/StartIndent -1.8 
+/EndIndent 8.42427 
+>> 
+endobj
+3938 0 obj
+<< 
+/O /Layout 
+/BBox [ 74.7 572.57738 537.74956 702.89388 ] 
+/Placement /Block 
+/StartIndent 2.7 
+/EndIndent 2.25044 
+>> 
+endobj
+3939 0 obj
+<< 
+/O /Layout 
+/BBox [ 205.44 286.37987 405.52138 387.35387 ] 
+/Placement /Block 
+/StartIndent 133.44 
+/EndIndent 134.47862 
+>> 
+endobj
+3940 0 obj
+<< 
+/O /Layout 
+/BBox [ 72 501.94443 542.29883 702.98088 ] 
+/Placement /Block 
+/StartIndent 0 
+/EndIndent -2.29883 
+>> 
+endobj
+3941 0 obj
+<< 
+/O /Layout 
+/BBox [ 173.7 346.86006 465.27802 587.2653 ] 
+/Placement /Block 
+/StartIndent 101.7 
+/EndIndent 74.72198 
+>> 
+endobj
+3942 0 obj
+<< 
+/S /D 
+>> 
+endobj
+3943 0 obj
+<< 
+/Nums [ 0 3942 0 R ] 
+>> 
+endobj
+3944 0 obj
+<< 
+/Producer (Acrobat Distiller 5.0.5 \(Windows\))
+/Author (mfolk)
+/Creator (Acrobat PDFMaker 5.0 for Word)
+/ModDate (D:20030812101658-04'00')
+/Title (Mapping HDF4 Objects to HDF5 Objects)
+/CreationDate (D:20030812101616-05'00')
+>> 
+endobj
+3945 0 obj
+<< /Type /Metadata /Subtype /XML /Length 1093 >> 
+stream
+<?xpacket begin='' id='W5M0MpCehiHzreSzNTczkc9d' bytes='1092'?><rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#' xmlns:iX='http://ns.adobe.com/iX/1.0/'><rdf:Description about='' xmlns='http://ns.adobe.com/pdf/1.3/' xmlns:pdf='http://ns.adobe.com/pdf/1.3/' pdf:CreationDate='2003-08-12T15:16:16Z' pdf:ModDate='2003-08-12T15:16:16Z' pdf:Producer='Acrobat Distiller 5.0.5 (Windows)' pdf:Author='mfolk' pdf:Creator='Acrobat PDFMaker 5.0 for Word' pdf:Title='Mapping HDF4 Objects to HDF5 Objects'/>
+<rdf:Description about='' xmlns='http://ns.adobe.com/xap/1.0/' xmlns:xap='http://ns.adobe.com/xap/1.0/' xap:CreateDate='2003-08-12T15:16:16Z' xap:ModifyDate='2003-08-12T15:16:16Z' xap:Author='mfolk' xap:MetadataDate='2003-08-12T15:16:16Z'><xap:Title><rdf:Alt><rdf:li xml:lang='x-default'>Mapping HDF4 Objects to HDF5 Objects</rdf:li></rdf:Alt></xap:Title></rdf:Description>
+<rdf:Description about='' xmlns='http://purl.org/dc/elements/1.1/' xmlns:dc='http://purl.org/dc/elements/1.1/' dc:creator='mfolk' dc:title='Mapping HDF4 Objects to HDF5 Objects'/>
+</rdf:RDF><?xpacket end='r'?>
+endstream
+endobj
+3946 0 obj
+<< 
+/Type /Pages 
+/Kids [ 3953 0 R 1 0 R 4 0 R 8 0 R 12 0 R 15 0 R 18 0 R 21 0 R 25 0 R 28 0 R 
+] 
+/Count 10 
+/Parent 3947 0 R 
+>> 
+endobj
+3947 0 obj
+<< 
+/Type /Pages 
+/Kids [ 3946 0 R 3948 0 R 3949 0 R ] 
+/Count 21 
+>> 
+endobj
+3948 0 obj
+<< 
+/Type /Pages 
+/Kids [ 31 0 R 35 0 R 38 0 R 44 0 R 47 0 R 50 0 R 54 0 R 57 0 R 61 0 R 65 0 R 
+] 
+/Count 10 
+/Parent 3947 0 R 
+>> 
+endobj
+3949 0 obj
+<< 
+/Type /Pages 
+/Kids [ 68 0 R ] 
+/Count 1 
+/Parent 3947 0 R 
+>> 
+endobj
+xref
+0 3950 
+0000000000 65535 f
+0000130819 00000 n
+0000131174 00000 n
+0000142541 00000 n
+0000142563 00000 n
+0000142935 00000 n
+0000143090 00000 n
+0000156562 00000 n
+0000156584 00000 n
+0000157010 00000 n
+0000157165 00000 n
+0000166006 00000 n
+0000166028 00000 n
+0000166379 00000 n
+0000175451 00000 n
+0000175473 00000 n
+0000175824 00000 n
+0000184738 00000 n
+0000184760 00000 n
+0000185141 00000 n
+0000191858 00000 n
+0000191880 00000 n
+0000192280 00000 n
+0000192436 00000 n
+0000200474 00000 n
+0000200496 00000 n
+0000200847 00000 n
+0000208499 00000 n
+0000208521 00000 n
+0000208872 00000 n
+0000215658 00000 n
+0000215680 00000 n
+0000216080 00000 n
+0000216237 00000 n
+0000226716 00000 n
+0000226739 00000 n
+0000227122 00000 n
+0000239085 00000 n
+0000239108 00000 n
+0000239525 00000 n
+0000239682 00000 n
+0000239839 00000 n
+0000239996 00000 n
+0000250419 00000 n
+0000250442 00000 n
+0000250823 00000 n
+0000263647 00000 n
+0000263670 00000 n
+0000263998 00000 n
+0000269261 00000 n
+0000269283 00000 n
+0000269700 00000 n
+0000269857 00000 n
+0000282634 00000 n
+0000282657 00000 n
+0000282997 00000 n
+0000286900 00000 n
+0000286922 00000 n
+0000287309 00000 n
+0000287466 00000 n
+0000298766 00000 n
+0000298789 00000 n
+0000299179 00000 n
+0000299335 00000 n
+0000311265 00000 n
+0000311288 00000 n
+0000311674 00000 n
+0000322667 00000 n
+0000322690 00000 n
+0000323091 00000 n
+0000323248 00000 n
+0000326737 00000 n
+0000326759 00000 n
+0000326912 00000 n
+0000327463 00000 n
+0000327978 00000 n
+0000328446 00000 n
+0000328760 00000 n
+0000329231 00000 n
+0000329333 00000 n
+0000329538 00000 n
+0000336199 00000 n
+0000336433 00000 n
+0000363670 00000 n
+0000363881 00000 n
+0000387442 00000 n
+0000387664 00000 n
+0000407488 00000 n
+0000407718 00000 n
+0000415945 00000 n
+0000416166 00000 n
+0000442300 00000 n
+0000442526 00000 n
+0000442828 00000 n
+0000442892 00000 n
+0000443005 00000 n
+0000443113 00000 n
+0000443309 00000 n
+0000443537 00000 n
+0000443661 00000 n
+0000443769 00000 n
+0000443940 00000 n
+0000444115 00000 n
+0000444242 00000 n
+0000444376 00000 n
+0000444558 00000 n
+0000444744 00000 n
+0000444852 00000 n
+0000444982 00000 n
+0000445169 00000 n
+0000445305 00000 n
+0000445415 00000 n
+0000445541 00000 n
+0000445675 00000 n
+0000445813 00000 n
+0000446001 00000 n
+0000446155 00000 n
+0000446300 00000 n
+0000446455 00000 n
+0000446581 00000 n
+0000446697 00000 n
+0000446833 00000 n
+0000446975 00000 n
+0000447078 00000 n
+0000447189 00000 n
+0000447312 00000 n
+0000447441 00000 n
+0000447563 00000 n
+0000447684 00000 n
+0000448140 00000 n
+0000448220 00000 n
+0000448306 00000 n
+0000448580 00000 n
+0000448734 00000 n
+0000448820 00000 n
+0000448973 00000 n
+0000449059 00000 n
+0000449145 00000 n
+0000449227 00000 n
+0000449316 00000 n
+0000449468 00000 n
+0000449550 00000 n
+0000449718 00000 n
+0000449800 00000 n
+0000449882 00000 n
+0000449965 00000 n
+0000450048 00000 n
+0000450131 00000 n
+0000450214 00000 n
+0000450297 00000 n
+0000450380 00000 n
+0000450463 00000 n
+0000450542 00000 n
+0000450621 00000 n
+0000450700 00000 n
+0000450795 00000 n
+0000450847 00000 n
+0000450933 00000 n
+0000451012 00000 n
+0000451105 00000 n
+0000451198 00000 n
+0000451359 00000 n
+0000451452 00000 n
+0000451545 00000 n
+0000451639 00000 n
+0000451733 00000 n
+0000451827 00000 n
+0000451921 00000 n
+0000452001 00000 n
+0000452081 00000 n
+0000452175 00000 n
+0000452269 00000 n
+0000452349 00000 n
+0000452429 00000 n
+0000452516 00000 n
+0000452596 00000 n
+0000452693 00000 n
+0000452781 00000 n
+0000452933 00000 n
+0000453028 00000 n
+0000453080 00000 n
+0000453175 00000 n
+0000453227 00000 n
+0000453322 00000 n
+0000453374 00000 n
+0000453469 00000 n
+0000453521 00000 n
+0000453616 00000 n
+0000453668 00000 n
+0000453763 00000 n
+0000453815 00000 n
+0000453910 00000 n
+0000453962 00000 n
+0000454057 00000 n
+0000454109 00000 n
+0000454204 00000 n
+0000454256 00000 n
+0000454352 00000 n
+0000454404 00000 n
+0000454556 00000 n
+0000454652 00000 n
+0000454704 00000 n
+0000454800 00000 n
+0000454852 00000 n
+0000454948 00000 n
+0000455000 00000 n
+0000455096 00000 n
+0000455148 00000 n
+0000455244 00000 n
+0000455296 00000 n
+0000455392 00000 n
+0000455444 00000 n
+0000455540 00000 n
+0000455592 00000 n
+0000455688 00000 n
+0000455740 00000 n
+0000455836 00000 n
+0000455888 00000 n
+0000455984 00000 n
+0000456036 00000 n
+0000456132 00000 n
+0000456184 00000 n
+0000456280 00000 n
+0000456376 00000 n
+0000456528 00000 n
+0000456608 00000 n
+0000456688 00000 n
+0000456768 00000 n
+0000456848 00000 n
+0000456928 00000 n
+0000457022 00000 n
+0000457116 00000 n
+0000457210 00000 n
+0000457304 00000 n
+0000457398 00000 n
+0000457477 00000 n
+0000457570 00000 n
+0000457663 00000 n
+0000457756 00000 n
+0000457849 00000 n
+0000457942 00000 n
+0000458028 00000 n
+0000458107 00000 n
+0000458271 00000 n
+0000458350 00000 n
+0000458447 00000 n
+0000458504 00000 n
+0000458600 00000 n
+0000458652 00000 n
+0000458748 00000 n
+0000458800 00000 n
+0000458896 00000 n
+0000458969 00000 n
+0000459065 00000 n
+0000459117 00000 n
+0000459213 00000 n
+0000459265 00000 n
+0000459361 00000 n
+0000459413 00000 n
+0000459509 00000 n
+0000459561 00000 n
+0000459657 00000 n
+0000459709 00000 n
+0000459805 00000 n
+0000459857 00000 n
+0000459953 00000 n
+0000460005 00000 n
+0000460101 00000 n
+0000460153 00000 n
+0000460249 00000 n
+0000460301 00000 n
+0000460397 00000 n
+0000460449 00000 n
+0000460545 00000 n
+0000460597 00000 n
+0000460693 00000 n
+0000460745 00000 n
+0000460841 00000 n
+0000460893 00000 n
+0000460989 00000 n
+0000461041 00000 n
+0000461137 00000 n
+0000461189 00000 n
+0000461285 00000 n
+0000461337 00000 n
+0000461433 00000 n
+0000461485 00000 n
+0000461565 00000 n
+0000461661 00000 n
+0000461713 00000 n
+0000461809 00000 n
+0000461861 00000 n
+0000461957 00000 n
+0000462009 00000 n
+0000462105 00000 n
+0000462157 00000 n
+0000462253 00000 n
+0000462305 00000 n
+0000462401 00000 n
+0000462453 00000 n
+0000462549 00000 n
+0000462601 00000 n
+0000462697 00000 n
+0000462749 00000 n
+0000462845 00000 n
+0000462897 00000 n
+0000462993 00000 n
+0000463045 00000 n
+0000463141 00000 n
+0000463193 00000 n
+0000463289 00000 n
+0000463341 00000 n
+0000463437 00000 n
+0000463489 00000 n
+0000463585 00000 n
+0000463637 00000 n
+0000463733 00000 n
+0000463785 00000 n
+0000463881 00000 n
+0000463933 00000 n
+0000464029 00000 n
+0000464081 00000 n
+0000464177 00000 n
+0000464229 00000 n
+0000464325 00000 n
+0000464377 00000 n
+0000464473 00000 n
+0000464525 00000 n
+0000464621 00000 n
+0000464673 00000 n
+0000464769 00000 n
+0000464821 00000 n
+0000464917 00000 n
+0000464969 00000 n
+0000465065 00000 n
+0000465117 00000 n
+0000465213 00000 n
+0000465265 00000 n
+0000465361 00000 n
+0000465413 00000 n
+0000465509 00000 n
+0000465561 00000 n
+0000465657 00000 n
+0000465709 00000 n
+0000465805 00000 n
+0000465857 00000 n
+0000465953 00000 n
+0000466005 00000 n
+0000466101 00000 n
+0000466153 00000 n
+0000466249 00000 n
+0000466301 00000 n
+0000466397 00000 n
+0000466449 00000 n
+0000466545 00000 n
+0000466597 00000 n
+0000466693 00000 n
+0000466745 00000 n
+0000466841 00000 n
+0000466893 00000 n
+0000466989 00000 n
+0000467041 00000 n
+0000467137 00000 n
+0000467189 00000 n
+0000467285 00000 n
+0000467337 00000 n
+0000467433 00000 n
+0000467485 00000 n
+0000467581 00000 n
+0000467633 00000 n
+0000467729 00000 n
+0000467781 00000 n
+0000467877 00000 n
+0000467929 00000 n
+0000468025 00000 n
+0000468077 00000 n
+0000468173 00000 n
+0000468225 00000 n
+0000468321 00000 n
+0000468373 00000 n
+0000468469 00000 n
+0000468521 00000 n
+0000468617 00000 n
+0000468669 00000 n
+0000468765 00000 n
+0000468817 00000 n
+0000468913 00000 n
+0000468965 00000 n
+0000469061 00000 n
+0000469113 00000 n
+0000469209 00000 n
+0000469261 00000 n
+0000469357 00000 n
+0000469409 00000 n
+0000469505 00000 n
+0000469557 00000 n
+0000469653 00000 n
+0000469705 00000 n
+0000469801 00000 n
+0000469853 00000 n
+0000469949 00000 n
+0000470024 00000 n
+0000470120 00000 n
+0000470172 00000 n
+0000470268 00000 n
+0000470320 00000 n
+0000470416 00000 n
+0000470468 00000 n
+0000470564 00000 n
+0000470616 00000 n
+0000470712 00000 n
+0000470787 00000 n
+0000470883 00000 n
+0000470935 00000 n
+0000471031 00000 n
+0000471083 00000 n
+0000471179 00000 n
+0000471231 00000 n
+0000471327 00000 n
+0000471379 00000 n
+0000471475 00000 n
+0000471550 00000 n
+0000471646 00000 n
+0000471698 00000 n
+0000471794 00000 n
+0000471846 00000 n
+0000471943 00000 n
+0000471995 00000 n
+0000472076 00000 n
+0000472172 00000 n
+0000472224 00000 n
+0000472320 00000 n
+0000472372 00000 n
+0000472468 00000 n
+0000472520 00000 n
+0000472616 00000 n
+0000472668 00000 n
+0000472764 00000 n
+0000472816 00000 n
+0000472912 00000 n
+0000472964 00000 n
+0000473060 00000 n
+0000473112 00000 n
+0000473208 00000 n
+0000473260 00000 n
+0000473356 00000 n
+0000473408 00000 n
+0000473504 00000 n
+0000473556 00000 n
+0000473653 00000 n
+0000473705 00000 n
+0000473802 00000 n
+0000473854 00000 n
+0000473951 00000 n
+0000474003 00000 n
+0000474100 00000 n
+0000474152 00000 n
+0000474249 00000 n
+0000474301 00000 n
+0000474398 00000 n
+0000474450 00000 n
+0000474547 00000 n
+0000474599 00000 n
+0000474696 00000 n
+0000474748 00000 n
+0000474845 00000 n
+0000474897 00000 n
+0000474994 00000 n
+0000475046 00000 n
+0000475143 00000 n
+0000475195 00000 n
+0000475292 00000 n
+0000475344 00000 n
+0000475441 00000 n
+0000475493 00000 n
+0000475590 00000 n
+0000475642 00000 n
+0000475739 00000 n
+0000475791 00000 n
+0000475872 00000 n
+0000475969 00000 n
+0000476021 00000 n
+0000476118 00000 n
+0000476170 00000 n
+0000476267 00000 n
+0000476319 00000 n
+0000476416 00000 n
+0000476468 00000 n
+0000476565 00000 n
+0000476617 00000 n
+0000476714 00000 n
+0000476766 00000 n
+0000476863 00000 n
+0000476915 00000 n
+0000477012 00000 n
+0000477064 00000 n
+0000477161 00000 n
+0000477213 00000 n
+0000477310 00000 n
+0000477362 00000 n
+0000477459 00000 n
+0000477511 00000 n
+0000477608 00000 n
+0000477660 00000 n
+0000477757 00000 n
+0000477809 00000 n
+0000477906 00000 n
+0000477958 00000 n
+0000478055 00000 n
+0000478107 00000 n
+0000478204 00000 n
+0000478256 00000 n
+0000478353 00000 n
+0000478405 00000 n
+0000478502 00000 n
+0000478554 00000 n
+0000478651 00000 n
+0000478703 00000 n
+0000478800 00000 n
+0000478852 00000 n
+0000478949 00000 n
+0000479001 00000 n
+0000479098 00000 n
+0000479150 00000 n
+0000479247 00000 n
+0000479299 00000 n
+0000479396 00000 n
+0000479448 00000 n
+0000479545 00000 n
+0000479597 00000 n
+0000479694 00000 n
+0000479746 00000 n
+0000479843 00000 n
+0000479895 00000 n
+0000479992 00000 n
+0000480044 00000 n
+0000480141 00000 n
+0000480193 00000 n
+0000480290 00000 n
+0000480342 00000 n
+0000480439 00000 n
+0000480491 00000 n
+0000480588 00000 n
+0000480640 00000 n
+0000480737 00000 n
+0000480789 00000 n
+0000480886 00000 n
+0000480938 00000 n
+0000481035 00000 n
+0000481087 00000 n
+0000481184 00000 n
+0000481236 00000 n
+0000481333 00000 n
+0000481385 00000 n
+0000481482 00000 n
+0000481534 00000 n
+0000481631 00000 n
+0000481683 00000 n
+0000481780 00000 n
+0000481832 00000 n
+0000481929 00000 n
+0000481981 00000 n
+0000482078 00000 n
+0000482130 00000 n
+0000482227 00000 n
+0000482279 00000 n
+0000482376 00000 n
+0000482428 00000 n
+0000482525 00000 n
+0000482577 00000 n
+0000482674 00000 n
+0000482726 00000 n
+0000482823 00000 n
+0000482875 00000 n
+0000482972 00000 n
+0000483024 00000 n
+0000483121 00000 n
+0000483173 00000 n
+0000483270 00000 n
+0000483322 00000 n
+0000483419 00000 n
+0000483471 00000 n
+0000483568 00000 n
+0000483620 00000 n
+0000483717 00000 n
+0000483769 00000 n
+0000483866 00000 n
+0000483918 00000 n
+0000484015 00000 n
+0000484067 00000 n
+0000484164 00000 n
+0000484216 00000 n
+0000484313 00000 n
+0000484365 00000 n
+0000484462 00000 n
+0000484514 00000 n
+0000484611 00000 n
+0000484663 00000 n
+0000484760 00000 n
+0000484812 00000 n
+0000484893 00000 n
+0000484990 00000 n
+0000485042 00000 n
+0000485139 00000 n
+0000485191 00000 n
+0000485288 00000 n
+0000485340 00000 n
+0000485437 00000 n
+0000485489 00000 n
+0000485586 00000 n
+0000485638 00000 n
+0000485735 00000 n
+0000485787 00000 n
+0000485884 00000 n
+0000485936 00000 n
+0000486033 00000 n
+0000486085 00000 n
+0000486182 00000 n
+0000486234 00000 n
+0000486331 00000 n
+0000486383 00000 n
+0000486480 00000 n
+0000486532 00000 n
+0000486629 00000 n
+0000486681 00000 n
+0000486778 00000 n
+0000486830 00000 n
+0000486928 00000 n
+0000486980 00000 n
+0000487078 00000 n
+0000487130 00000 n
+0000487228 00000 n
+0000487280 00000 n
+0000487378 00000 n
+0000487430 00000 n
+0000487528 00000 n
+0000487580 00000 n
+0000487678 00000 n
+0000487730 00000 n
+0000487828 00000 n
+0000487880 00000 n
+0000487978 00000 n
+0000488030 00000 n
+0000488128 00000 n
+0000488180 00000 n
+0000488278 00000 n
+0000488330 00000 n
+0000488428 00000 n
+0000488480 00000 n
+0000488578 00000 n
+0000488630 00000 n
+0000488728 00000 n
+0000488780 00000 n
+0000488878 00000 n
+0000488930 00000 n
+0000489028 00000 n
+0000489080 00000 n
+0000489178 00000 n
+0000489230 00000 n
+0000489328 00000 n
+0000489380 00000 n
+0000489478 00000 n
+0000489530 00000 n
+0000489628 00000 n
+0000489703 00000 n
+0000489801 00000 n
+0000489853 00000 n
+0000489951 00000 n
+0000490003 00000 n
+0000490101 00000 n
+0000490153 00000 n
+0000490251 00000 n
+0000490303 00000 n
+0000490401 00000 n
+0000490476 00000 n
+0000490574 00000 n
+0000490626 00000 n
+0000490724 00000 n
+0000490776 00000 n
+0000490874 00000 n
+0000490926 00000 n
+0000491024 00000 n
+0000491076 00000 n
+0000491174 00000 n
+0000491249 00000 n
+0000491347 00000 n
+0000491399 00000 n
+0000491497 00000 n
+0000491549 00000 n
+0000491647 00000 n
+0000491699 00000 n
+0000491797 00000 n
+0000491849 00000 n
+0000491947 00000 n
+0000491999 00000 n
+0000492097 00000 n
+0000492149 00000 n
+0000492247 00000 n
+0000492299 00000 n
+0000492397 00000 n
+0000492449 00000 n
+0000492531 00000 n
+0000492613 00000 n
+0000492711 00000 n
+0000492768 00000 n
+0000492877 00000 n
+0000492934 00000 n
+0000493090 00000 n
+0000493171 00000 n
+0000493270 00000 n
+0000493327 00000 n
+0000493424 00000 n
+0000493476 00000 n
+0000493573 00000 n
+0000493625 00000 n
+0000493722 00000 n
+0000493774 00000 n
+0000493871 00000 n
+0000493923 00000 n
+0000494020 00000 n
+0000494072 00000 n
+0000494169 00000 n
+0000494221 00000 n
+0000494318 00000 n
+0000494370 00000 n
+0000494467 00000 n
+0000494519 00000 n
+0000494616 00000 n
+0000494668 00000 n
+0000494765 00000 n
+0000494817 00000 n
+0000494914 00000 n
+0000494966 00000 n
+0000495063 00000 n
+0000495115 00000 n
+0000495212 00000 n
+0000495264 00000 n
+0000495361 00000 n
+0000495413 00000 n
+0000495510 00000 n
+0000495562 00000 n
+0000495659 00000 n
+0000495711 00000 n
+0000495808 00000 n
+0000495860 00000 n
+0000495957 00000 n
+0000496009 00000 n
+0000496106 00000 n
+0000496158 00000 n
+0000496255 00000 n
+0000496307 00000 n
+0000496404 00000 n
+0000496456 00000 n
+0000496553 00000 n
+0000496605 00000 n
+0000496702 00000 n
+0000496754 00000 n
+0000496851 00000 n
+0000496903 00000 n
+0000497000 00000 n
+0000497052 00000 n
+0000497164 00000 n
+0000497232 00000 n
+0000497312 00000 n
+0000497410 00000 n
+0000497467 00000 n
+0000497563 00000 n
+0000497615 00000 n
+0000497711 00000 n
+0000497763 00000 n
+0000497867 00000 n
+0000497940 00000 n
+0000498036 00000 n
+0000498088 00000 n
+0000498184 00000 n
+0000498236 00000 n
+0000498333 00000 n
+0000498385 00000 n
+0000498482 00000 n
+0000498534 00000 n
+0000498631 00000 n
+0000498704 00000 n
+0000498801 00000 n
+0000498853 00000 n
+0000498950 00000 n
+0000499002 00000 n
+0000499099 00000 n
+0000499151 00000 n
+0000499248 00000 n
+0000499300 00000 n
+0000499397 00000 n
+0000499449 00000 n
+0000499546 00000 n
+0000499598 00000 n
+0000499695 00000 n
+0000499768 00000 n
+0000499865 00000 n
+0000499917 00000 n
+0000500014 00000 n
+0000500066 00000 n
+0000500163 00000 n
+0000500215 00000 n
+0000500312 00000 n
+0000500364 00000 n
+0000500461 00000 n
+0000500534 00000 n
+0000500631 00000 n
+0000500683 00000 n
+0000500780 00000 n
+0000500832 00000 n
+0000500929 00000 n
+0000500981 00000 n
+0000501078 00000 n
+0000501130 00000 n
+0000501227 00000 n
+0000501300 00000 n
+0000501397 00000 n
+0000501449 00000 n
+0000501546 00000 n
+0000501598 00000 n
+0000501695 00000 n
+0000501747 00000 n
+0000501844 00000 n
+0000501896 00000 n
+0000501993 00000 n
+0000502066 00000 n
+0000502163 00000 n
+0000502215 00000 n
+0000502312 00000 n
+0000502364 00000 n
+0000502461 00000 n
+0000502513 00000 n
+0000502610 00000 n
+0000502662 00000 n
+0000502759 00000 n
+0000502832 00000 n
+0000502929 00000 n
+0000502981 00000 n
+0000503078 00000 n
+0000503130 00000 n
+0000503227 00000 n
+0000503279 00000 n
+0000503376 00000 n
+0000503428 00000 n
+0000503525 00000 n
+0000503598 00000 n
+0000503695 00000 n
+0000503747 00000 n
+0000503844 00000 n
+0000503896 00000 n
+0000503993 00000 n
+0000504045 00000 n
+0000504142 00000 n
+0000504217 00000 n
+0000504314 00000 n
+0000504387 00000 n
+0000504484 00000 n
+0000504536 00000 n
+0000504633 00000 n
+0000504685 00000 n
+0000504782 00000 n
+0000504834 00000 n
+0000504931 00000 n
+0000504983 00000 n
+0000505080 00000 n
+0000505155 00000 n
+0000505252 00000 n
+0000505325 00000 n
+0000505422 00000 n
+0000505474 00000 n
+0000505571 00000 n
+0000505623 00000 n
+0000505720 00000 n
+0000505772 00000 n
+0000505869 00000 n
+0000505944 00000 n
+0000506041 00000 n
+0000506114 00000 n
+0000506211 00000 n
+0000506263 00000 n
+0000506360 00000 n
+0000506412 00000 n
+0000506509 00000 n
+0000506561 00000 n
+0000506658 00000 n
+0000506733 00000 n
+0000506830 00000 n
+0000506903 00000 n
+0000507000 00000 n
+0000507052 00000 n
+0000507149 00000 n
+0000507201 00000 n
+0000507298 00000 n
+0000507350 00000 n
+0000507447 00000 n
+0000507499 00000 n
+0000507596 00000 n
+0000507669 00000 n
+0000507766 00000 n
+0000507818 00000 n
+0000507915 00000 n
+0000507967 00000 n
+0000508064 00000 n
+0000508116 00000 n
+0000508213 00000 n
+0000508265 00000 n
+0000508362 00000 n
+0000508435 00000 n
+0000508532 00000 n
+0000508584 00000 n
+0000508681 00000 n
+0000508733 00000 n
+0000508830 00000 n
+0000508882 00000 n
+0000508979 00000 n
+0000509031 00000 n
+0000509128 00000 n
+0000509201 00000 n
+0000509298 00000 n
+0000509350 00000 n
+0000509447 00000 n
+0000509499 00000 n
+0000509596 00000 n
+0000509648 00000 n
+0000509745 00000 n
+0000509797 00000 n
+0000509894 00000 n
+0000509967 00000 n
+0000510064 00000 n
+0000510116 00000 n
+0000510213 00000 n
+0000510265 00000 n
+0000510362 00000 n
+0000510414 00000 n
+0000510511 00000 n
+0000510563 00000 n
+0000510660 00000 n
+0000510733 00000 n
+0000510830 00000 n
+0000510882 00000 n
+0000510979 00000 n
+0000511031 00000 n
+0000511144 00000 n
+0000511212 00000 n
+0000511299 00000 n
+0000511379 00000 n
+0000511477 00000 n
+0000511534 00000 n
+0000511630 00000 n
+0000511682 00000 n
+0000511778 00000 n
+0000511830 00000 n
+0000511934 00000 n
+0000512007 00000 n
+0000512103 00000 n
+0000512155 00000 n
+0000512251 00000 n
+0000512303 00000 n
+0000512400 00000 n
+0000512452 00000 n
+0000512549 00000 n
+0000512601 00000 n
+0000512698 00000 n
+0000512771 00000 n
+0000512868 00000 n
+0000512920 00000 n
+0000513017 00000 n
+0000513069 00000 n
+0000513166 00000 n
+0000513218 00000 n
+0000513315 00000 n
+0000513367 00000 n
+0000513464 00000 n
+0000513537 00000 n
+0000513634 00000 n
+0000513686 00000 n
+0000513783 00000 n
+0000513835 00000 n
+0000513932 00000 n
+0000513984 00000 n
+0000514081 00000 n
+0000514133 00000 n
+0000514230 00000 n
+0000514303 00000 n
+0000514400 00000 n
+0000514452 00000 n
+0000514549 00000 n
+0000514601 00000 n
+0000514698 00000 n
+0000514750 00000 n
+0000514847 00000 n
+0000514899 00000 n
+0000514996 00000 n
+0000515069 00000 n
+0000515166 00000 n
+0000515218 00000 n
+0000515315 00000 n
+0000515367 00000 n
+0000515464 00000 n
+0000515516 00000 n
+0000515614 00000 n
+0000515667 00000 n
+0000515766 00000 n
+0000515840 00000 n
+0000515939 00000 n
+0000515992 00000 n
+0000516091 00000 n
+0000516144 00000 n
+0000516243 00000 n
+0000516296 00000 n
+0000516395 00000 n
+0000516448 00000 n
+0000516547 00000 n
+0000516621 00000 n
+0000516720 00000 n
+0000516773 00000 n
+0000516872 00000 n
+0000516925 00000 n
+0000517007 00000 n
+0000517089 00000 n
+0000517178 00000 n
+0000517260 00000 n
+0000517342 00000 n
+0000517424 00000 n
+0000517506 00000 n
+0000517588 00000 n
+0000517688 00000 n
+0000517746 00000 n
+0000517844 00000 n
+0000517897 00000 n
+0000517995 00000 n
+0000518048 00000 n
+0000518146 00000 n
+0000518199 00000 n
+0000518297 00000 n
+0000518350 00000 n
+0000518448 00000 n
+0000518501 00000 n
+0000518599 00000 n
+0000518652 00000 n
+0000518750 00000 n
+0000518803 00000 n
+0000518901 00000 n
+0000518954 00000 n
+0000519052 00000 n
+0000519105 00000 n
+0000519204 00000 n
+0000519257 00000 n
+0000519356 00000 n
+0000519409 00000 n
+0000519508 00000 n
+0000519561 00000 n
+0000519660 00000 n
+0000519713 00000 n
+0000519812 00000 n
+0000519865 00000 n
+0000519964 00000 n
+0000520017 00000 n
+0000520116 00000 n
+0000520169 00000 n
+0000520268 00000 n
+0000520321 00000 n
+0000520420 00000 n
+0000520473 00000 n
+0000520572 00000 n
+0000520625 00000 n
+0000520724 00000 n
+0000520777 00000 n
+0000520876 00000 n
+0000520929 00000 n
+0000521028 00000 n
+0000521081 00000 n
+0000521180 00000 n
+0000521233 00000 n
+0000521332 00000 n
+0000521385 00000 n
+0000521484 00000 n
+0000521537 00000 n
+0000521636 00000 n
+0000521689 00000 n
+0000521788 00000 n
+0000521841 00000 n
+0000521940 00000 n
+0000521993 00000 n
+0000522092 00000 n
+0000522145 00000 n
+0000522244 00000 n
+0000522297 00000 n
+0000522396 00000 n
+0000522449 00000 n
+0000522548 00000 n
+0000522601 00000 n
+0000522700 00000 n
+0000522753 00000 n
+0000522852 00000 n
+0000522905 00000 n
+0000523004 00000 n
+0000523057 00000 n
+0000523156 00000 n
+0000523209 00000 n
+0000523308 00000 n
+0000523361 00000 n
+0000523460 00000 n
+0000523513 00000 n
+0000523612 00000 n
+0000523665 00000 n
+0000523764 00000 n
+0000523817 00000 n
+0000523916 00000 n
+0000523969 00000 n
+0000524068 00000 n
+0000524121 00000 n
+0000524220 00000 n
+0000524273 00000 n
+0000524372 00000 n
+0000524425 00000 n
+0000524524 00000 n
+0000524577 00000 n
+0000524676 00000 n
+0000524729 00000 n
+0000524828 00000 n
+0000524881 00000 n
+0000524980 00000 n
+0000525033 00000 n
+0000525132 00000 n
+0000525185 00000 n
+0000525284 00000 n
+0000525337 00000 n
+0000525436 00000 n
+0000525489 00000 n
+0000525588 00000 n
+0000525641 00000 n
+0000525740 00000 n
+0000525793 00000 n
+0000525892 00000 n
+0000525945 00000 n
+0000526044 00000 n
+0000526097 00000 n
+0000526212 00000 n
+0000526265 00000 n
+0000526353 00000 n
+0000526452 00000 n
+0000526505 00000 n
+0000526604 00000 n
+0000526657 00000 n
+0000526756 00000 n
+0000526809 00000 n
+0000526908 00000 n
+0000526961 00000 n
+0000527076 00000 n
+0000527129 00000 n
+0000527217 00000 n
+0000527316 00000 n
+0000527369 00000 n
+0000527468 00000 n
+0000527521 00000 n
+0000527620 00000 n
+0000527673 00000 n
+0000527772 00000 n
+0000527825 00000 n
+0000527940 00000 n
+0000527993 00000 n
+0000528081 00000 n
+0000528180 00000 n
+0000528233 00000 n
+0000528332 00000 n
+0000528385 00000 n
+0000528484 00000 n
+0000528537 00000 n
+0000528636 00000 n
+0000528689 00000 n
+0000528788 00000 n
+0000528841 00000 n
+0000528940 00000 n
+0000528993 00000 n
+0000529105 00000 n
+0000529158 00000 n
+0000529246 00000 n
+0000529345 00000 n
+0000529398 00000 n
+0000529497 00000 n
+0000529550 00000 n
+0000529649 00000 n
+0000529702 00000 n
+0000529801 00000 n
+0000529854 00000 n
+0000529953 00000 n
+0000530006 00000 n
+0000530105 00000 n
+0000530158 00000 n
+0000530257 00000 n
+0000530310 00000 n
+0000530409 00000 n
+0000530462 00000 n
+0000530561 00000 n
+0000530614 00000 n
+0000530713 00000 n
+0000530766 00000 n
+0000530865 00000 n
+0000530918 00000 n
+0000531017 00000 n
+0000531070 00000 n
+0000531169 00000 n
+0000531222 00000 n
+0000531321 00000 n
+0000531374 00000 n
+0000531473 00000 n
+0000531526 00000 n
+0000531625 00000 n
+0000531701 00000 n
+0000531800 00000 n
+0000531853 00000 n
+0000531952 00000 n
+0000532005 00000 n
+0000532104 00000 n
+0000532157 00000 n
+0000532257 00000 n
+0000532310 00000 n
+0000532410 00000 n
+0000532486 00000 n
+0000532586 00000 n
+0000532639 00000 n
+0000532739 00000 n
+0000532792 00000 n
+0000532892 00000 n
+0000532945 00000 n
+0000533045 00000 n
+0000533098 00000 n
+0000533198 00000 n
+0000533274 00000 n
+0000533374 00000 n
+0000533427 00000 n
+0000533527 00000 n
+0000533580 00000 n
+0000533680 00000 n
+0000533733 00000 n
+0000533816 00000 n
+0000533939 00000 n
+0000534020 00000 n
+0000534101 00000 n
+0000534201 00000 n
+0000534259 00000 n
+0000534371 00000 n
+0000534429 00000 n
+0000534563 00000 n
+0000534645 00000 n
+0000534733 00000 n
+0000534814 00000 n
+0000534895 00000 n
+0000534995 00000 n
+0000535053 00000 n
+0000535151 00000 n
+0000535204 00000 n
+0000535302 00000 n
+0000535355 00000 n
+0000535453 00000 n
+0000535506 00000 n
+0000535604 00000 n
+0000535657 00000 n
+0000535755 00000 n
+0000535808 00000 n
+0000535906 00000 n
+0000535959 00000 n
+0000536058 00000 n
+0000536111 00000 n
+0000536210 00000 n
+0000536263 00000 n
+0000536362 00000 n
+0000536415 00000 n
+0000536514 00000 n
+0000536567 00000 n
+0000536666 00000 n
+0000536719 00000 n
+0000536818 00000 n
+0000536871 00000 n
+0000536970 00000 n
+0000537023 00000 n
+0000537122 00000 n
+0000537175 00000 n
+0000537274 00000 n
+0000537327 00000 n
+0000537426 00000 n
+0000537479 00000 n
+0000537578 00000 n
+0000537631 00000 n
+0000537730 00000 n
+0000537783 00000 n
+0000537882 00000 n
+0000537935 00000 n
+0000538034 00000 n
+0000538087 00000 n
+0000538186 00000 n
+0000538239 00000 n
+0000538338 00000 n
+0000538391 00000 n
+0000538490 00000 n
+0000538543 00000 n
+0000538642 00000 n
+0000538695 00000 n
+0000538794 00000 n
+0000538847 00000 n
+0000538946 00000 n
+0000538999 00000 n
+0000539098 00000 n
+0000539151 00000 n
+0000539250 00000 n
+0000539303 00000 n
+0000539402 00000 n
+0000539455 00000 n
+0000539554 00000 n
+0000539607 00000 n
+0000539706 00000 n
+0000539759 00000 n
+0000539858 00000 n
+0000539911 00000 n
+0000540010 00000 n
+0000540063 00000 n
+0000540162 00000 n
+0000540215 00000 n
+0000540314 00000 n
+0000540367 00000 n
+0000540466 00000 n
+0000540519 00000 n
+0000540618 00000 n
+0000540671 00000 n
+0000540770 00000 n
+0000540823 00000 n
+0000540922 00000 n
+0000540975 00000 n
+0000541074 00000 n
+0000541127 00000 n
+0000541226 00000 n
+0000541279 00000 n
+0000541378 00000 n
+0000541431 00000 n
+0000541530 00000 n
+0000541583 00000 n
+0000541682 00000 n
+0000541735 00000 n
+0000541834 00000 n
+0000541887 00000 n
+0000541986 00000 n
+0000542039 00000 n
+0000542138 00000 n
+0000542191 00000 n
+0000542290 00000 n
+0000542343 00000 n
+0000542442 00000 n
+0000542495 00000 n
+0000542594 00000 n
+0000542647 00000 n
+0000542746 00000 n
+0000542799 00000 n
+0000542881 00000 n
+0000542963 00000 n
+0000543052 00000 n
+0000543134 00000 n
+0000543216 00000 n
+0000543298 00000 n
+0000543398 00000 n
+0000543456 00000 n
+0000543554 00000 n
+0000543607 00000 n
+0000543705 00000 n
+0000543758 00000 n
+0000543856 00000 n
+0000543909 00000 n
+0000544007 00000 n
+0000544060 00000 n
+0000544158 00000 n
+0000544211 00000 n
+0000544309 00000 n
+0000544362 00000 n
+0000544460 00000 n
+0000544513 00000 n
+0000544611 00000 n
+0000544664 00000 n
+0000544762 00000 n
+0000544815 00000 n
+0000544914 00000 n
+0000544967 00000 n
+0000545066 00000 n
+0000545119 00000 n
+0000545218 00000 n
+0000545271 00000 n
+0000545370 00000 n
+0000545423 00000 n
+0000545522 00000 n
+0000545575 00000 n
+0000545674 00000 n
+0000545727 00000 n
+0000545826 00000 n
+0000545879 00000 n
+0000545978 00000 n
+0000546031 00000 n
+0000546130 00000 n
+0000546183 00000 n
+0000546282 00000 n
+0000546335 00000 n
+0000546434 00000 n
+0000546487 00000 n
+0000546586 00000 n
+0000546639 00000 n
+0000546738 00000 n
+0000546791 00000 n
+0000546890 00000 n
+0000546943 00000 n
+0000547042 00000 n
+0000547116 00000 n
+0000547215 00000 n
+0000547268 00000 n
+0000547350 00000 n
+0000547432 00000 n
+0000547541 00000 n
+0000547594 00000 n
+0000547756 00000 n
+0000547865 00000 n
+0000547918 00000 n
+0000548027 00000 n
+0000548080 00000 n
+0000548189 00000 n
+0000548242 00000 n
+0000548351 00000 n
+0000548404 00000 n
+0000548525 00000 n
+0000548610 00000 n
+0000548699 00000 n
+0000548781 00000 n
+0000548863 00000 n
+0000548955 00000 n
+0000549047 00000 n
+0000549139 00000 n
+0000549228 00000 n
+0000549310 00000 n
+0000549406 00000 n
+0000549502 00000 n
+0000549598 00000 n
+0000549694 00000 n
+0000549775 00000 n
+0000549856 00000 n
+0000549951 00000 n
+0000550046 00000 n
+0000550141 00000 n
+0000550222 00000 n
+0000550303 00000 n
+0000550384 00000 n
+0000550472 00000 n
+0000550553 00000 n
+0000550716 00000 n
+0000550805 00000 n
+0000550887 00000 n
+0000550988 00000 n
+0000551046 00000 n
+0000551128 00000 n
+0000551210 00000 n
+0000551292 00000 n
+0000551390 00000 n
+0000551472 00000 n
+0000551554 00000 n
+0000551636 00000 n
+0000551718 00000 n
+0000551800 00000 n
+0000551882 00000 n
+0000551964 00000 n
+0000552046 00000 n
+0000552128 00000 n
+0000552217 00000 n
+0000552299 00000 n
+0000552398 00000 n
+0000552459 00000 n
+0000552541 00000 n
+0000552629 00000 n
+0000552710 00000 n
+0000552808 00000 n
+0000552869 00000 n
+0000552950 00000 n
+0000553031 00000 n
+0000553112 00000 n
+0000553193 00000 n
+0000553274 00000 n
+0000553369 00000 n
+0000553464 00000 n
+0000553560 00000 n
+0000553642 00000 n
+0000553724 00000 n
+0000553824 00000 n
+0000553882 00000 n
+0000553994 00000 n
+0000554052 00000 n
+0000554213 00000 n
+0000554295 00000 n
+0000554396 00000 n
+0000554454 00000 n
+0000554566 00000 n
+0000554624 00000 n
+0000554795 00000 n
+0000554883 00000 n
+0000554964 00000 n
+0000555059 00000 n
+0000555154 00000 n
+0000555242 00000 n
+0000555323 00000 n
+0000555411 00000 n
+0000555492 00000 n
+0000555580 00000 n
+0000555661 00000 n
+0000555757 00000 n
+0000555881 00000 n
+0000555969 00000 n
+0000556057 00000 n
+0000556153 00000 n
+0000556249 00000 n
+0000556345 00000 n
+0000556434 00000 n
+0000556516 00000 n
+0000556605 00000 n
+0000556687 00000 n
+0000556769 00000 n
+0000556869 00000 n
+0000556927 00000 n
+0000557008 00000 n
+0000557089 00000 n
+0000557170 00000 n
+0000557251 00000 n
+0000557332 00000 n
+0000557413 00000 n
+0000557494 00000 n
+0000557575 00000 n
+0000557656 00000 n
+0000557738 00000 n
+0000557820 00000 n
+0000557902 00000 n
+0000557984 00000 n
+0000558066 00000 n
+0000558148 00000 n
+0000558230 00000 n
+0000558318 00000 n
+0000558399 00000 n
+0000558497 00000 n
+0000558581 00000 n
+0000558681 00000 n
+0000558779 00000 n
+0000558877 00000 n
+0000558955 00000 n
+0000559053 00000 n
+0000559131 00000 n
+0000559229 00000 n
+0000559322 00000 n
+0000559420 00000 n
+0000559513 00000 n
+0000559611 00000 n
+0000559704 00000 n
+0000559802 00000 n
+0000559895 00000 n
+0000559994 00000 n
+0000560087 00000 n
+0000560186 00000 n
+0000560279 00000 n
+0000560378 00000 n
+0000560471 00000 n
+0000560570 00000 n
+0000560663 00000 n
+0000560762 00000 n
+0000560855 00000 n
+0000560954 00000 n
+0000561047 00000 n
+0000561146 00000 n
+0000561239 00000 n
+0000561338 00000 n
+0000561431 00000 n
+0000561530 00000 n
+0000561623 00000 n
+0000561722 00000 n
+0000561815 00000 n
+0000561914 00000 n
+0000562007 00000 n
+0000562106 00000 n
+0000562199 00000 n
+0000562298 00000 n
+0000562391 00000 n
+0000562490 00000 n
+0000562583 00000 n
+0000562682 00000 n
+0000562775 00000 n
+0000562874 00000 n
+0000562967 00000 n
+0000563066 00000 n
+0000563159 00000 n
+0000563258 00000 n
+0000563351 00000 n
+0000563450 00000 n
+0000563543 00000 n
+0000563642 00000 n
+0000563735 00000 n
+0000563834 00000 n
+0000563927 00000 n
+0000564026 00000 n
+0000564119 00000 n
+0000564218 00000 n
+0000564311 00000 n
+0000564410 00000 n
+0000564503 00000 n
+0000564602 00000 n
+0000564695 00000 n
+0000564794 00000 n
+0000564887 00000 n
+0000564986 00000 n
+0000565079 00000 n
+0000565178 00000 n
+0000565271 00000 n
+0000565370 00000 n
+0000565448 00000 n
+0000565547 00000 n
+0000565631 00000 n
+0000565730 00000 n
+0000565814 00000 n
+0000565913 00000 n
+0000565991 00000 n
+0000566090 00000 n
+0000566168 00000 n
+0000566267 00000 n
+0000566345 00000 n
+0000566434 00000 n
+0000566556 00000 n
+0000566637 00000 n
+0000566728 00000 n
+0000566819 00000 n
+0000566910 00000 n
+0000566998 00000 n
+0000567079 00000 n
+0000567160 00000 n
+0000567255 00000 n
+0000567350 00000 n
+0000567462 00000 n
+0000567550 00000 n
+0000567646 00000 n
+0000567742 00000 n
+0000567831 00000 n
+0000567913 00000 n
+0000568002 00000 n
+0000568084 00000 n
+0000568183 00000 n
+0000568244 00000 n
+0000568326 00000 n
+0000568415 00000 n
+0000568497 00000 n
+0000568596 00000 n
+0000568657 00000 n
+0000568739 00000 n
+0000568827 00000 n
+0000568908 00000 n
+0000568989 00000 n
+0000569077 00000 n
+0000569158 00000 n
+0000569239 00000 n
+0000569320 00000 n
+0000569401 00000 n
+0000569482 00000 n
+0000569570 00000 n
+0000569652 00000 n
+0000569734 00000 n
+0000569833 00000 n
+0000569894 00000 n
+0000569983 00000 n
+0000570065 00000 n
+0000570154 00000 n
+0000570236 00000 n
+0000570334 00000 n
+0000570414 00000 n
+0000570512 00000 n
+0000570592 00000 n
+0000570690 00000 n
+0000570770 00000 n
+0000570867 00000 n
+0000570947 00000 n
+0000571044 00000 n
+0000571124 00000 n
+0000571212 00000 n
+0000571293 00000 n
+0000571390 00000 n
+0000571468 00000 n
+0000571566 00000 n
+0000571644 00000 n
+0000571741 00000 n
+0000571819 00000 n
+0000571917 00000 n
+0000571995 00000 n
+0000572093 00000 n
+0000572171 00000 n
+0000572252 00000 n
+0000572341 00000 n
+0000572423 00000 n
+0000572529 00000 n
+0000572607 00000 n
+0000572713 00000 n
+0000572791 00000 n
+0000572897 00000 n
+0000572975 00000 n
+0000573081 00000 n
+0000573159 00000 n
+0000573265 00000 n
+0000573343 00000 n
+0000573449 00000 n
+0000573527 00000 n
+0000573625 00000 n
+0000575583 00000 n
+0000575721 00000 n
+0000575803 00000 n
+0000575888 00000 n
+0000575949 00000 n
+0000576008 00000 n
+0000576093 00000 n
+0000576154 00000 n
+0000576213 00000 n
+0000576298 00000 n
+0000576359 00000 n
+0000576418 00000 n
+0000576500 00000 n
+0000576585 00000 n
+0000576646 00000 n
+0000576705 00000 n
+0000576790 00000 n
+0000576851 00000 n
+0000576910 00000 n
+0000576995 00000 n
+0000577056 00000 n
+0000577115 00000 n
+0000577197 00000 n
+0000577282 00000 n
+0000577343 00000 n
+0000577402 00000 n
+0000577487 00000 n
+0000577548 00000 n
+0000577607 00000 n
+0000577704 00000 n
+0000577765 00000 n
+0000577824 00000 n
+0000577906 00000 n
+0000577991 00000 n
+0000578052 00000 n
+0000578111 00000 n
+0000578196 00000 n
+0000578257 00000 n
+0000578316 00000 n
+0000578413 00000 n
+0000578474 00000 n
+0000578533 00000 n
+0000578615 00000 n
+0000578700 00000 n
+0000578761 00000 n
+0000578820 00000 n
+0000578905 00000 n
+0000578966 00000 n
+0000579025 00000 n
+0000579122 00000 n
+0000579183 00000 n
+0000579242 00000 n
+0000579324 00000 n
+0000579409 00000 n
+0000579470 00000 n
+0000579529 00000 n
+0000579614 00000 n
+0000579675 00000 n
+0000579734 00000 n
+0000579819 00000 n
+0000579880 00000 n
+0000579939 00000 n
+0000580021 00000 n
+0000580106 00000 n
+0000580167 00000 n
+0000580226 00000 n
+0000580311 00000 n
+0000580372 00000 n
+0000580431 00000 n
+0000580516 00000 n
+0000580577 00000 n
+0000580636 00000 n
+0000580747 00000 n
+0000580847 00000 n
+0000580932 00000 n
+0000580993 00000 n
+0000581052 00000 n
+0000581137 00000 n
+0000581198 00000 n
+0000581257 00000 n
+0000581342 00000 n
+0000581403 00000 n
+0000581462 00000 n
+0000581547 00000 n
+0000581608 00000 n
+0000581667 00000 n
+0000581752 00000 n
+0000581813 00000 n
+0000581872 00000 n
+0000581972 00000 n
+0000582057 00000 n
+0000582118 00000 n
+0000582177 00000 n
+0000582262 00000 n
+0000582323 00000 n
+0000582382 00000 n
+0000582467 00000 n
+0000582528 00000 n
+0000582587 00000 n
+0000582672 00000 n
+0000582733 00000 n
+0000582792 00000 n
+0000582877 00000 n
+0000582938 00000 n
+0000582997 00000 n
+0000583097 00000 n
+0000583182 00000 n
+0000583243 00000 n
+0000583302 00000 n
+0000583387 00000 n
+0000583448 00000 n
+0000583507 00000 n
+0000583592 00000 n
+0000583653 00000 n
+0000583712 00000 n
+0000583797 00000 n
+0000583858 00000 n
+0000583917 00000 n
+0000584002 00000 n
+0000584063 00000 n
+0000584122 00000 n
+0000584222 00000 n
+0000584307 00000 n
+0000584368 00000 n
+0000584427 00000 n
+0000584512 00000 n
+0000584573 00000 n
+0000584632 00000 n
+0000584717 00000 n
+0000584778 00000 n
+0000584837 00000 n
+0000584922 00000 n
+0000584983 00000 n
+0000585042 00000 n
+0000585127 00000 n
+0000585188 00000 n
+0000585247 00000 n
+0000585449 00000 n
+0000585549 00000 n
+0000585634 00000 n
+0000585695 00000 n
+0000585754 00000 n
+0000585839 00000 n
+0000585900 00000 n
+0000585959 00000 n
+0000586044 00000 n
+0000586105 00000 n
+0000586164 00000 n
+0000586249 00000 n
+0000586310 00000 n
+0000586369 00000 n
+0000586454 00000 n
+0000586515 00000 n
+0000586574 00000 n
+0000586674 00000 n
+0000586759 00000 n
+0000586820 00000 n
+0000586879 00000 n
+0000586964 00000 n
+0000587025 00000 n
+0000587084 00000 n
+0000587169 00000 n
+0000587230 00000 n
+0000587289 00000 n
+0000587374 00000 n
+0000587435 00000 n
+0000587494 00000 n
+0000587579 00000 n
+0000587640 00000 n
+0000587699 00000 n
+0000587799 00000 n
+0000587884 00000 n
+0000587945 00000 n
+0000588004 00000 n
+0000588089 00000 n
+0000588150 00000 n
+0000588209 00000 n
+0000588294 00000 n
+0000588355 00000 n
+0000588414 00000 n
+0000588499 00000 n
+0000588560 00000 n
+0000588619 00000 n
+0000588704 00000 n
+0000588765 00000 n
+0000588824 00000 n
+0000588924 00000 n
+0000589009 00000 n
+0000589070 00000 n
+0000589129 00000 n
+0000589214 00000 n
+0000589275 00000 n
+0000589334 00000 n
+0000589419 00000 n
+0000589480 00000 n
+0000589539 00000 n
+0000589624 00000 n
+0000589685 00000 n
+0000589744 00000 n
+0000589829 00000 n
+0000589890 00000 n
+0000589949 00000 n
+0000590049 00000 n
+0000590134 00000 n
+0000590195 00000 n
+0000590254 00000 n
+0000590339 00000 n
+0000590400 00000 n
+0000590459 00000 n
+0000590544 00000 n
+0000590605 00000 n
+0000590664 00000 n
+0000590749 00000 n
+0000590810 00000 n
+0000590869 00000 n
+0000590954 00000 n
+0000591015 00000 n
+0000591074 00000 n
+0000591174 00000 n
+0000591259 00000 n
+0000591320 00000 n
+0000591379 00000 n
+0000591464 00000 n
+0000591525 00000 n
+0000591584 00000 n
+0000591669 00000 n
+0000591730 00000 n
+0000591789 00000 n
+0000591874 00000 n
+0000591935 00000 n
+0000591994 00000 n
+0000592079 00000 n
+0000592140 00000 n
+0000592199 00000 n
+0000592299 00000 n
+0000592384 00000 n
+0000592445 00000 n
+0000592504 00000 n
+0000592589 00000 n
+0000592650 00000 n
+0000592709 00000 n
+0000592794 00000 n
+0000592855 00000 n
+0000592914 00000 n
+0000592999 00000 n
+0000593060 00000 n
+0000593119 00000 n
+0000593204 00000 n
+0000593265 00000 n
+0000593324 00000 n
+0000593424 00000 n
+0000593509 00000 n
+0000593570 00000 n
+0000593629 00000 n
+0000593714 00000 n
+0000593775 00000 n
+0000593834 00000 n
+0000593919 00000 n
+0000593980 00000 n
+0000594039 00000 n
+0000594124 00000 n
+0000594185 00000 n
+0000594244 00000 n
+0000594329 00000 n
+0000594390 00000 n
+0000594449 00000 n
+0000594549 00000 n
+0000594634 00000 n
+0000594695 00000 n
+0000594754 00000 n
+0000594839 00000 n
+0000594900 00000 n
+0000594959 00000 n
+0000595044 00000 n
+0000595105 00000 n
+0000595164 00000 n
+0000595249 00000 n
+0000595310 00000 n
+0000595369 00000 n
+0000595454 00000 n
+0000595515 00000 n
+0000595574 00000 n
+0000595674 00000 n
+0000595759 00000 n
+0000595820 00000 n
+0000595879 00000 n
+0000595964 00000 n
+0000596025 00000 n
+0000596084 00000 n
+0000596169 00000 n
+0000596230 00000 n
+0000596289 00000 n
+0000596374 00000 n
+0000596435 00000 n
+0000596494 00000 n
+0000596579 00000 n
+0000596640 00000 n
+0000596699 00000 n
+0000596799 00000 n
+0000596884 00000 n
+0000596945 00000 n
+0000597004 00000 n
+0000597089 00000 n
+0000597150 00000 n
+0000597209 00000 n
+0000597294 00000 n
+0000597355 00000 n
+0000597414 00000 n
+0000597499 00000 n
+0000597560 00000 n
+0000597619 00000 n
+0000597704 00000 n
+0000597765 00000 n
+0000597824 00000 n
+0000597924 00000 n
+0000598009 00000 n
+0000598070 00000 n
+0000598129 00000 n
+0000598214 00000 n
+0000598275 00000 n
+0000598334 00000 n
+0000598419 00000 n
+0000598480 00000 n
+0000598539 00000 n
+0000598624 00000 n
+0000598685 00000 n
+0000598744 00000 n
+0000598829 00000 n
+0000598890 00000 n
+0000598949 00000 n
+0000599049 00000 n
+0000599134 00000 n
+0000599195 00000 n
+0000599254 00000 n
+0000599339 00000 n
+0000599400 00000 n
+0000599459 00000 n
+0000599544 00000 n
+0000599605 00000 n
+0000599664 00000 n
+0000599749 00000 n
+0000599810 00000 n
+0000599869 00000 n
+0000599954 00000 n
+0000600015 00000 n
+0000600074 00000 n
+0000600174 00000 n
+0000600259 00000 n
+0000600320 00000 n
+0000600379 00000 n
+0000600464 00000 n
+0000600525 00000 n
+0000600584 00000 n
+0000600669 00000 n
+0000600730 00000 n
+0000600789 00000 n
+0000600874 00000 n
+0000600935 00000 n
+0000600994 00000 n
+0000601079 00000 n
+0000601140 00000 n
+0000601199 00000 n
+0000601319 00000 n
+0000601419 00000 n
+0000601504 00000 n
+0000601565 00000 n
+0000601624 00000 n
+0000601709 00000 n
+0000601770 00000 n
+0000601829 00000 n
+0000601914 00000 n
+0000601975 00000 n
+0000602034 00000 n
+0000602119 00000 n
+0000602180 00000 n
+0000602239 00000 n
+0000602324 00000 n
+0000602385 00000 n
+0000602444 00000 n
+0000602544 00000 n
+0000602629 00000 n
+0000602690 00000 n
+0000602749 00000 n
+0000602834 00000 n
+0000602895 00000 n
+0000602954 00000 n
+0000603039 00000 n
+0000603100 00000 n
+0000603159 00000 n
+0000603244 00000 n
+0000603305 00000 n
+0000603364 00000 n
+0000603449 00000 n
+0000603510 00000 n
+0000603569 00000 n
+0000603669 00000 n
+0000603754 00000 n
+0000603815 00000 n
+0000603874 00000 n
+0000603959 00000 n
+0000604020 00000 n
+0000604079 00000 n
+0000604164 00000 n
+0000604225 00000 n
+0000604284 00000 n
+0000604369 00000 n
+0000604430 00000 n
+0000604489 00000 n
+0000604574 00000 n
+0000604635 00000 n
+0000604694 00000 n
+0000604794 00000 n
+0000604879 00000 n
+0000604940 00000 n
+0000604999 00000 n
+0000605084 00000 n
+0000605145 00000 n
+0000605204 00000 n
+0000605289 00000 n
+0000605350 00000 n
+0000605409 00000 n
+0000605494 00000 n
+0000605555 00000 n
+0000605614 00000 n
+0000605699 00000 n
+0000605760 00000 n
+0000605819 00000 n
+0000605919 00000 n
+0000606004 00000 n
+0000606065 00000 n
+0000606124 00000 n
+0000606209 00000 n
+0000606270 00000 n
+0000606329 00000 n
+0000606414 00000 n
+0000606475 00000 n
+0000606534 00000 n
+0000606619 00000 n
+0000606680 00000 n
+0000606739 00000 n
+0000606824 00000 n
+0000606885 00000 n
+0000606944 00000 n
+0000607128 00000 n
+0000607228 00000 n
+0000607313 00000 n
+0000607374 00000 n
+0000607433 00000 n
+0000607518 00000 n
+0000607579 00000 n
+0000607638 00000 n
+0000607723 00000 n
+0000607784 00000 n
+0000607843 00000 n
+0000607928 00000 n
+0000607989 00000 n
+0000608048 00000 n
+0000608133 00000 n
+0000608194 00000 n
+0000608253 00000 n
+0000608353 00000 n
+0000608438 00000 n
+0000608499 00000 n
+0000608558 00000 n
+0000608643 00000 n
+0000608704 00000 n
+0000608763 00000 n
+0000608848 00000 n
+0000608909 00000 n
+0000608968 00000 n
+0000609053 00000 n
+0000609114 00000 n
+0000609173 00000 n
+0000609258 00000 n
+0000609319 00000 n
+0000609378 00000 n
+0000609478 00000 n
+0000609563 00000 n
+0000609624 00000 n
+0000609683 00000 n
+0000609768 00000 n
+0000609829 00000 n
+0000609888 00000 n
+0000609973 00000 n
+0000610034 00000 n
+0000610093 00000 n
+0000610178 00000 n
+0000610239 00000 n
+0000610298 00000 n
+0000610383 00000 n
+0000610444 00000 n
+0000610503 00000 n
+0000610603 00000 n
+0000610688 00000 n
+0000610749 00000 n
+0000610808 00000 n
+0000610893 00000 n
+0000610954 00000 n
+0000611013 00000 n
+0000611098 00000 n
+0000611159 00000 n
+0000611218 00000 n
+0000611303 00000 n
+0000611364 00000 n
+0000611423 00000 n
+0000611508 00000 n
+0000611569 00000 n
+0000611628 00000 n
+0000611728 00000 n
+0000611813 00000 n
+0000611874 00000 n
+0000611933 00000 n
+0000612018 00000 n
+0000612079 00000 n
+0000612138 00000 n
+0000612223 00000 n
+0000612284 00000 n
+0000612343 00000 n
+0000612428 00000 n
+0000612489 00000 n
+0000612548 00000 n
+0000612633 00000 n
+0000612694 00000 n
+0000612753 00000 n
+0000612853 00000 n
+0000612938 00000 n
+0000612999 00000 n
+0000613058 00000 n
+0000613143 00000 n
+0000613204 00000 n
+0000613263 00000 n
+0000613348 00000 n
+0000613409 00000 n
+0000613468 00000 n
+0000613553 00000 n
+0000613614 00000 n
+0000613673 00000 n
+0000613758 00000 n
+0000613819 00000 n
+0000613878 00000 n
+0000613978 00000 n
+0000614063 00000 n
+0000614124 00000 n
+0000614183 00000 n
+0000614268 00000 n
+0000614329 00000 n
+0000614388 00000 n
+0000614473 00000 n
+0000614534 00000 n
+0000614593 00000 n
+0000614678 00000 n
+0000614739 00000 n
+0000614798 00000 n
+0000614883 00000 n
+0000614944 00000 n
+0000615003 00000 n
+0000615103 00000 n
+0000615188 00000 n
+0000615249 00000 n
+0000615308 00000 n
+0000615393 00000 n
+0000615454 00000 n
+0000615513 00000 n
+0000615598 00000 n
+0000615659 00000 n
+0000615718 00000 n
+0000615803 00000 n
+0000615864 00000 n
+0000615923 00000 n
+0000616008 00000 n
+0000616069 00000 n
+0000616128 00000 n
+0000616228 00000 n
+0000616313 00000 n
+0000616374 00000 n
+0000616433 00000 n
+0000616518 00000 n
+0000616579 00000 n
+0000616638 00000 n
+0000616723 00000 n
+0000616784 00000 n
+0000616843 00000 n
+0000616928 00000 n
+0000616989 00000 n
+0000617048 00000 n
+0000617133 00000 n
+0000617194 00000 n
+0000617253 00000 n
+0000617353 00000 n
+0000617438 00000 n
+0000617499 00000 n
+0000617558 00000 n
+0000617643 00000 n
+0000617704 00000 n
+0000617763 00000 n
+0000617848 00000 n
+0000617909 00000 n
+0000617968 00000 n
+0000618053 00000 n
+0000618114 00000 n
+0000618173 00000 n
+0000618258 00000 n
+0000618319 00000 n
+0000618378 00000 n
+0000618478 00000 n
+0000618563 00000 n
+0000618624 00000 n
+0000618683 00000 n
+0000618768 00000 n
+0000618829 00000 n
+0000618888 00000 n
+0000618973 00000 n
+0000619034 00000 n
+0000619093 00000 n
+0000619178 00000 n
+0000619239 00000 n
+0000619298 00000 n
+0000619383 00000 n
+0000619444 00000 n
+0000619503 00000 n
+0000619603 00000 n
+0000619688 00000 n
+0000619749 00000 n
+0000619808 00000 n
+0000619893 00000 n
+0000619954 00000 n
+0000620013 00000 n
+0000620098 00000 n
+0000620159 00000 n
+0000620218 00000 n
+0000620303 00000 n
+0000620364 00000 n
+0000620423 00000 n
+0000620508 00000 n
+0000620569 00000 n
+0000620628 00000 n
+0000620794 00000 n
+0000620894 00000 n
+0000620979 00000 n
+0000621040 00000 n
+0000621099 00000 n
+0000621184 00000 n
+0000621245 00000 n
+0000621304 00000 n
+0000621389 00000 n
+0000621450 00000 n
+0000621509 00000 n
+0000621594 00000 n
+0000621655 00000 n
+0000621714 00000 n
+0000621799 00000 n
+0000621860 00000 n
+0000621919 00000 n
+0000622019 00000 n
+0000622104 00000 n
+0000622165 00000 n
+0000622224 00000 n
+0000622309 00000 n
+0000622370 00000 n
+0000622429 00000 n
+0000622514 00000 n
+0000622575 00000 n
+0000622634 00000 n
+0000622719 00000 n
+0000622780 00000 n
+0000622839 00000 n
+0000622924 00000 n
+0000622985 00000 n
+0000623044 00000 n
+0000623144 00000 n
+0000623229 00000 n
+0000623290 00000 n
+0000623349 00000 n
+0000623434 00000 n
+0000623495 00000 n
+0000623554 00000 n
+0000623639 00000 n
+0000623700 00000 n
+0000623759 00000 n
+0000623844 00000 n
+0000623905 00000 n
+0000623964 00000 n
+0000624049 00000 n
+0000624110 00000 n
+0000624169 00000 n
+0000624269 00000 n
+0000624354 00000 n
+0000624415 00000 n
+0000624474 00000 n
+0000624559 00000 n
+0000624620 00000 n
+0000624679 00000 n
+0000624764 00000 n
+0000624825 00000 n
+0000624884 00000 n
+0000624969 00000 n
+0000625030 00000 n
+0000625089 00000 n
+0000625174 00000 n
+0000625235 00000 n
+0000625294 00000 n
+0000625394 00000 n
+0000625479 00000 n
+0000625540 00000 n
+0000625599 00000 n
+0000625684 00000 n
+0000625745 00000 n
+0000625804 00000 n
+0000625889 00000 n
+0000625950 00000 n
+0000626009 00000 n
+0000626094 00000 n
+0000626155 00000 n
+0000626214 00000 n
+0000626299 00000 n
+0000626360 00000 n
+0000626419 00000 n
+0000626519 00000 n
+0000626604 00000 n
+0000626665 00000 n
+0000626724 00000 n
+0000626809 00000 n
+0000626870 00000 n
+0000626929 00000 n
+0000627014 00000 n
+0000627075 00000 n
+0000627134 00000 n
+0000627219 00000 n
+0000627280 00000 n
+0000627339 00000 n
+0000627424 00000 n
+0000627485 00000 n
+0000627544 00000 n
+0000627644 00000 n
+0000627729 00000 n
+0000627790 00000 n
+0000627849 00000 n
+0000627934 00000 n
+0000627995 00000 n
+0000628054 00000 n
+0000628139 00000 n
+0000628200 00000 n
+0000628259 00000 n
+0000628344 00000 n
+0000628405 00000 n
+0000628464 00000 n
+0000628549 00000 n
+0000628610 00000 n
+0000628669 00000 n
+0000628769 00000 n
+0000628854 00000 n
+0000628915 00000 n
+0000628974 00000 n
+0000629059 00000 n
+0000629120 00000 n
+0000629179 00000 n
+0000629264 00000 n
+0000629325 00000 n
+0000629384 00000 n
+0000629469 00000 n
+0000629530 00000 n
+0000629589 00000 n
+0000629674 00000 n
+0000629735 00000 n
+0000629794 00000 n
+0000629894 00000 n
+0000629979 00000 n
+0000630040 00000 n
+0000630099 00000 n
+0000630184 00000 n
+0000630245 00000 n
+0000630304 00000 n
+0000630389 00000 n
+0000630450 00000 n
+0000630509 00000 n
+0000630594 00000 n
+0000630655 00000 n
+0000630714 00000 n
+0000630799 00000 n
+0000630860 00000 n
+0000630919 00000 n
+0000631019 00000 n
+0000631104 00000 n
+0000631165 00000 n
+0000631224 00000 n
+0000631309 00000 n
+0000631370 00000 n
+0000631429 00000 n
+0000631514 00000 n
+0000631575 00000 n
+0000631634 00000 n
+0000631719 00000 n
+0000631780 00000 n
+0000631839 00000 n
+0000631924 00000 n
+0000631985 00000 n
+0000632044 00000 n
+0000632164 00000 n
+0000632264 00000 n
+0000632349 00000 n
+0000632410 00000 n
+0000632469 00000 n
+0000632554 00000 n
+0000632615 00000 n
+0000632674 00000 n
+0000632759 00000 n
+0000632820 00000 n
+0000632879 00000 n
+0000632964 00000 n
+0000633025 00000 n
+0000633084 00000 n
+0000633169 00000 n
+0000633230 00000 n
+0000633289 00000 n
+0000633389 00000 n
+0000633474 00000 n
+0000633535 00000 n
+0000633594 00000 n
+0000633679 00000 n
+0000633740 00000 n
+0000633799 00000 n
+0000633884 00000 n
+0000633945 00000 n
+0000634004 00000 n
+0000634089 00000 n
+0000634150 00000 n
+0000634209 00000 n
+0000634294 00000 n
+0000634355 00000 n
+0000634414 00000 n
+0000634514 00000 n
+0000634599 00000 n
+0000634660 00000 n
+0000634719 00000 n
+0000634804 00000 n
+0000634865 00000 n
+0000634924 00000 n
+0000635009 00000 n
+0000635070 00000 n
+0000635129 00000 n
+0000635214 00000 n
+0000635275 00000 n
+0000635334 00000 n
+0000635419 00000 n
+0000635480 00000 n
+0000635539 00000 n
+0000635639 00000 n
+0000635724 00000 n
+0000635785 00000 n
+0000635844 00000 n
+0000635929 00000 n
+0000635990 00000 n
+0000636049 00000 n
+0000636134 00000 n
+0000636195 00000 n
+0000636254 00000 n
+0000636339 00000 n
+0000636400 00000 n
+0000636459 00000 n
+0000636544 00000 n
+0000636605 00000 n
+0000636664 00000 n
+0000636764 00000 n
+0000636849 00000 n
+0000636910 00000 n
+0000636969 00000 n
+0000637054 00000 n
+0000637115 00000 n
+0000637174 00000 n
+0000637259 00000 n
+0000637320 00000 n
+0000637379 00000 n
+0000637464 00000 n
+0000637525 00000 n
+0000637584 00000 n
+0000637669 00000 n
+0000637730 00000 n
+0000637789 00000 n
+0000638019 00000 n
+0000638119 00000 n
+0000638204 00000 n
+0000638265 00000 n
+0000638324 00000 n
+0000638409 00000 n
+0000638470 00000 n
+0000638529 00000 n
+0000638614 00000 n
+0000638675 00000 n
+0000638734 00000 n
+0000638819 00000 n
+0000638880 00000 n
+0000638939 00000 n
+0000639024 00000 n
+0000639085 00000 n
+0000639144 00000 n
+0000639244 00000 n
+0000639329 00000 n
+0000639390 00000 n
+0000639449 00000 n
+0000639534 00000 n
+0000639595 00000 n
+0000639654 00000 n
+0000639739 00000 n
+0000639800 00000 n
+0000639859 00000 n
+0000639956 00000 n
+0000640017 00000 n
+0000640076 00000 n
+0000640173 00000 n
+0000640234 00000 n
+0000640293 00000 n
+0000640393 00000 n
+0000640478 00000 n
+0000640539 00000 n
+0000640598 00000 n
+0000640683 00000 n
+0000640744 00000 n
+0000640803 00000 n
+0000640888 00000 n
+0000640949 00000 n
+0000641008 00000 n
+0000641093 00000 n
+0000641154 00000 n
+0000641213 00000 n
+0000641298 00000 n
+0000641359 00000 n
+0000641418 00000 n
+0000641518 00000 n
+0000641603 00000 n
+0000641664 00000 n
+0000641723 00000 n
+0000641808 00000 n
+0000641869 00000 n
+0000641928 00000 n
+0000642013 00000 n
+0000642074 00000 n
+0000642133 00000 n
+0000642218 00000 n
+0000642279 00000 n
+0000642338 00000 n
+0000642423 00000 n
+0000642484 00000 n
+0000642543 00000 n
+0000642643 00000 n
+0000642728 00000 n
+0000642789 00000 n
+0000642848 00000 n
+0000642933 00000 n
+0000642994 00000 n
+0000643053 00000 n
+0000643138 00000 n
+0000643199 00000 n
+0000643258 00000 n
+0000643343 00000 n
+0000643404 00000 n
+0000643463 00000 n
+0000643548 00000 n
+0000643609 00000 n
+0000643668 00000 n
+0000643768 00000 n
+0000643853 00000 n
+0000643914 00000 n
+0000643973 00000 n
+0000644058 00000 n
+0000644119 00000 n
+0000644178 00000 n
+0000644263 00000 n
+0000644324 00000 n
+0000644383 00000 n
+0000644468 00000 n
+0000644529 00000 n
+0000644588 00000 n
+0000644673 00000 n
+0000644734 00000 n
+0000644793 00000 n
+0000644893 00000 n
+0000644978 00000 n
+0000645039 00000 n
+0000645098 00000 n
+0000645183 00000 n
+0000645244 00000 n
+0000645303 00000 n
+0000645388 00000 n
+0000645449 00000 n
+0000645508 00000 n
+0000645593 00000 n
+0000645654 00000 n
+0000645713 00000 n
+0000645798 00000 n
+0000645859 00000 n
+0000645918 00000 n
+0000646018 00000 n
+0000646103 00000 n
+0000646164 00000 n
+0000646223 00000 n
+0000646308 00000 n
+0000646369 00000 n
+0000646428 00000 n
+0000646513 00000 n
+0000646574 00000 n
+0000646633 00000 n
+0000646718 00000 n
+0000646779 00000 n
+0000646838 00000 n
+0000646923 00000 n
+0000646984 00000 n
+0000647043 00000 n
+0000647143 00000 n
+0000647228 00000 n
+0000647289 00000 n
+0000647348 00000 n
+0000647433 00000 n
+0000647494 00000 n
+0000647553 00000 n
+0000647638 00000 n
+0000647699 00000 n
+0000647758 00000 n
+0000647843 00000 n
+0000647904 00000 n
+0000647963 00000 n
+0000648060 00000 n
+0000648121 00000 n
+0000648180 00000 n
+0000648280 00000 n
+0000648365 00000 n
+0000648426 00000 n
+0000648485 00000 n
+0000648570 00000 n
+0000648631 00000 n
+0000648690 00000 n
+0000648775 00000 n
+0000648836 00000 n
+0000648895 00000 n
+0000648980 00000 n
+0000649041 00000 n
+0000649100 00000 n
+0000649185 00000 n
+0000649246 00000 n
+0000649305 00000 n
+0000649405 00000 n
+0000649490 00000 n
+0000649551 00000 n
+0000649610 00000 n
+0000649695 00000 n
+0000649756 00000 n
+0000649815 00000 n
+0000649900 00000 n
+0000649961 00000 n
+0000650020 00000 n
+0000650105 00000 n
+0000650166 00000 n
+0000650225 00000 n
+0000650310 00000 n
+0000650371 00000 n
+0000650430 00000 n
+0000650530 00000 n
+0000650615 00000 n
+0000650676 00000 n
+0000650735 00000 n
+0000650820 00000 n
+0000650881 00000 n
+0000650940 00000 n
+0000651025 00000 n
+0000651086 00000 n
+0000651145 00000 n
+0000651230 00000 n
+0000651291 00000 n
+0000651350 00000 n
+0000651435 00000 n
+0000651496 00000 n
+0000651555 00000 n
+0000651655 00000 n
+0000651740 00000 n
+0000651801 00000 n
+0000651860 00000 n
+0000651945 00000 n
+0000652006 00000 n
+0000652065 00000 n
+0000652150 00000 n
+0000652211 00000 n
+0000652270 00000 n
+0000652355 00000 n
+0000652416 00000 n
+0000652475 00000 n
+0000652560 00000 n
+0000652621 00000 n
+0000652680 00000 n
+0000652780 00000 n
+0000652865 00000 n
+0000652926 00000 n
+0000652985 00000 n
+0000653070 00000 n
+0000653131 00000 n
+0000653190 00000 n
+0000653275 00000 n
+0000653336 00000 n
+0000653395 00000 n
+0000653480 00000 n
+0000653541 00000 n
+0000653600 00000 n
+0000653685 00000 n
+0000653746 00000 n
+0000653805 00000 n
+0000653905 00000 n
+0000653990 00000 n
+0000654051 00000 n
+0000654110 00000 n
+0000654195 00000 n
+0000654256 00000 n
+0000654315 00000 n
+0000654400 00000 n
+0000654461 00000 n
+0000654520 00000 n
+0000654605 00000 n
+0000654666 00000 n
+0000654725 00000 n
+0000654810 00000 n
+0000654871 00000 n
+0000654930 00000 n
+0000655030 00000 n
+0000655115 00000 n
+0000655176 00000 n
+0000655235 00000 n
+0000655320 00000 n
+0000655381 00000 n
+0000655440 00000 n
+0000655525 00000 n
+0000655586 00000 n
+0000655645 00000 n
+0000655730 00000 n
+0000655791 00000 n
+0000655850 00000 n
+0000655935 00000 n
+0000655996 00000 n
+0000656055 00000 n
+0000656155 00000 n
+0000656240 00000 n
+0000656301 00000 n
+0000656360 00000 n
+0000656445 00000 n
+0000656506 00000 n
+0000656565 00000 n
+0000656650 00000 n
+0000656711 00000 n
+0000656770 00000 n
+0000656855 00000 n
+0000656916 00000 n
+0000656975 00000 n
+0000657060 00000 n
+0000657121 00000 n
+0000657180 00000 n
+0000657318 00000 n
+0000657418 00000 n
+0000657503 00000 n
+0000657564 00000 n
+0000657623 00000 n
+0000657708 00000 n
+0000657769 00000 n
+0000657828 00000 n
+0000657913 00000 n
+0000657974 00000 n
+0000658033 00000 n
+0000658118 00000 n
+0000658179 00000 n
+0000658238 00000 n
+0000658323 00000 n
+0000658384 00000 n
+0000658443 00000 n
+0000658543 00000 n
+0000658628 00000 n
+0000658689 00000 n
+0000658748 00000 n
+0000658833 00000 n
+0000658894 00000 n
+0000658953 00000 n
+0000659038 00000 n
+0000659099 00000 n
+0000659158 00000 n
+0000659243 00000 n
+0000659304 00000 n
+0000659363 00000 n
+0000659448 00000 n
+0000659509 00000 n
+0000659568 00000 n
+0000659668 00000 n
+0000659753 00000 n
+0000659814 00000 n
+0000659873 00000 n
+0000659958 00000 n
+0000660019 00000 n
+0000660078 00000 n
+0000660163 00000 n
+0000660224 00000 n
+0000660283 00000 n
+0000660368 00000 n
+0000660429 00000 n
+0000660488 00000 n
+0000660573 00000 n
+0000660634 00000 n
+0000660693 00000 n
+0000660793 00000 n
+0000660878 00000 n
+0000660939 00000 n
+0000660998 00000 n
+0000661083 00000 n
+0000661144 00000 n
+0000661203 00000 n
+0000661288 00000 n
+0000661349 00000 n
+0000661408 00000 n
+0000661493 00000 n
+0000661554 00000 n
+0000661613 00000 n
+0000661698 00000 n
+0000661759 00000 n
+0000661818 00000 n
+0000661918 00000 n
+0000662003 00000 n
+0000662064 00000 n
+0000662123 00000 n
+0000662208 00000 n
+0000662269 00000 n
+0000662328 00000 n
+0000662413 00000 n
+0000662474 00000 n
+0000662533 00000 n
+0000662618 00000 n
+0000662679 00000 n
+0000662738 00000 n
+0000662823 00000 n
+0000662884 00000 n
+0000662943 00000 n
+0000663043 00000 n
+0000663128 00000 n
+0000663189 00000 n
+0000663248 00000 n
+0000663333 00000 n
+0000663394 00000 n
+0000663453 00000 n
+0000663539 00000 n
+0000663600 00000 n
+0000663659 00000 n
+0000663745 00000 n
+0000663806 00000 n
+0000663865 00000 n
+0000663951 00000 n
+0000664012 00000 n
+0000664071 00000 n
+0000664171 00000 n
+0000664257 00000 n
+0000664318 00000 n
+0000664377 00000 n
+0000664463 00000 n
+0000664524 00000 n
+0000664583 00000 n
+0000664669 00000 n
+0000664730 00000 n
+0000664789 00000 n
+0000664875 00000 n
+0000664936 00000 n
+0000664995 00000 n
+0000665081 00000 n
+0000665142 00000 n
+0000665201 00000 n
+0000665458 00000 n
+0000665558 00000 n
+0000665644 00000 n
+0000665705 00000 n
+0000665764 00000 n
+0000665850 00000 n
+0000665911 00000 n
+0000665970 00000 n
+0000666056 00000 n
+0000666117 00000 n
+0000666176 00000 n
+0000666262 00000 n
+0000666323 00000 n
+0000666382 00000 n
+0000666468 00000 n
+0000666529 00000 n
+0000666588 00000 n
+0000666688 00000 n
+0000666774 00000 n
+0000666835 00000 n
+0000666894 00000 n
+0000666980 00000 n
+0000667041 00000 n
+0000667100 00000 n
+0000667186 00000 n
+0000667247 00000 n
+0000667306 00000 n
+0000667392 00000 n
+0000667453 00000 n
+0000667512 00000 n
+0000667598 00000 n
+0000667659 00000 n
+0000667718 00000 n
+0000667818 00000 n
+0000667904 00000 n
+0000667965 00000 n
+0000668024 00000 n
+0000668110 00000 n
+0000668171 00000 n
+0000668230 00000 n
+0000668316 00000 n
+0000668377 00000 n
+0000668436 00000 n
+0000668522 00000 n
+0000668583 00000 n
+0000668642 00000 n
+0000668728 00000 n
+0000668789 00000 n
+0000668848 00000 n
+0000668948 00000 n
+0000669034 00000 n
+0000669095 00000 n
+0000669154 00000 n
+0000669240 00000 n
+0000669301 00000 n
+0000669360 00000 n
+0000669446 00000 n
+0000669507 00000 n
+0000669566 00000 n
+0000669652 00000 n
+0000669713 00000 n
+0000669772 00000 n
+0000669858 00000 n
+0000669919 00000 n
+0000669978 00000 n
+0000670078 00000 n
+0000670164 00000 n
+0000670225 00000 n
+0000670284 00000 n
+0000670370 00000 n
+0000670431 00000 n
+0000670490 00000 n
+0000670576 00000 n
+0000670637 00000 n
+0000670696 00000 n
+0000670782 00000 n
+0000670843 00000 n
+0000670902 00000 n
+0000670988 00000 n
+0000671049 00000 n
+0000671108 00000 n
+0000671208 00000 n
+0000671294 00000 n
+0000671355 00000 n
+0000671414 00000 n
+0000671500 00000 n
+0000671561 00000 n
+0000671620 00000 n
+0000671706 00000 n
+0000671767 00000 n
+0000671826 00000 n
+0000671912 00000 n
+0000671973 00000 n
+0000672032 00000 n
+0000672118 00000 n
+0000672179 00000 n
+0000672238 00000 n
+0000672338 00000 n
+0000672424 00000 n
+0000672485 00000 n
+0000672544 00000 n
+0000672630 00000 n
+0000672691 00000 n
+0000672750 00000 n
+0000672836 00000 n
+0000672897 00000 n
+0000672956 00000 n
+0000673042 00000 n
+0000673103 00000 n
+0000673162 00000 n
+0000673248 00000 n
+0000673309 00000 n
+0000673368 00000 n
+0000673468 00000 n
+0000673554 00000 n
+0000673615 00000 n
+0000673674 00000 n
+0000673760 00000 n
+0000673821 00000 n
+0000673880 00000 n
+0000673966 00000 n
+0000674027 00000 n
+0000674086 00000 n
+0000674172 00000 n
+0000674233 00000 n
+0000674292 00000 n
+0000674378 00000 n
+0000674439 00000 n
+0000674498 00000 n
+0000674598 00000 n
+0000674684 00000 n
+0000674745 00000 n
+0000674804 00000 n
+0000674890 00000 n
+0000674951 00000 n
+0000675010 00000 n
+0000675096 00000 n
+0000675157 00000 n
+0000675216 00000 n
+0000675302 00000 n
+0000675363 00000 n
+0000675422 00000 n
+0000675508 00000 n
+0000675569 00000 n
+0000675628 00000 n
+0000675728 00000 n
+0000675814 00000 n
+0000675875 00000 n
+0000675934 00000 n
+0000676020 00000 n
+0000676081 00000 n
+0000676140 00000 n
+0000676226 00000 n
+0000676287 00000 n
+0000676346 00000 n
+0000676432 00000 n
+0000676493 00000 n
+0000676552 00000 n
+0000676638 00000 n
+0000676699 00000 n
+0000676758 00000 n
+0000676858 00000 n
+0000676944 00000 n
+0000677005 00000 n
+0000677064 00000 n
+0000677150 00000 n
+0000677211 00000 n
+0000677270 00000 n
+0000677356 00000 n
+0000677417 00000 n
+0000677476 00000 n
+0000677562 00000 n
+0000677623 00000 n
+0000677682 00000 n
+0000677768 00000 n
+0000677829 00000 n
+0000677888 00000 n
+0000677988 00000 n
+0000678074 00000 n
+0000678135 00000 n
+0000678194 00000 n
+0000678280 00000 n
+0000678341 00000 n
+0000678400 00000 n
+0000678486 00000 n
+0000678547 00000 n
+0000678606 00000 n
+0000678692 00000 n
+0000678753 00000 n
+0000678812 00000 n
+0000678898 00000 n
+0000678959 00000 n
+0000679018 00000 n
+0000679118 00000 n
+0000679204 00000 n
+0000679265 00000 n
+0000679324 00000 n
+0000679410 00000 n
+0000679471 00000 n
+0000679530 00000 n
+0000679616 00000 n
+0000679677 00000 n
+0000679736 00000 n
+0000679822 00000 n
+0000679883 00000 n
+0000679942 00000 n
+0000680028 00000 n
+0000680089 00000 n
+0000680148 00000 n
+0000680248 00000 n
+0000680334 00000 n
+0000680395 00000 n
+0000680454 00000 n
+0000680540 00000 n
+0000680601 00000 n
+0000680660 00000 n
+0000680746 00000 n
+0000680807 00000 n
+0000680866 00000 n
+0000680952 00000 n
+0000681013 00000 n
+0000681072 00000 n
+0000681180 00000 n
+0000681241 00000 n
+0000681300 00000 n
+0000681400 00000 n
+0000681486 00000 n
+0000681547 00000 n
+0000681606 00000 n
+0000681692 00000 n
+0000681753 00000 n
+0000681812 00000 n
+0000681898 00000 n
+0000681959 00000 n
+0000682018 00000 n
+0000682104 00000 n
+0000682165 00000 n
+0000682224 00000 n
+0000682310 00000 n
+0000682371 00000 n
+0000682430 00000 n
+0000682530 00000 n
+0000682616 00000 n
+0000682677 00000 n
+0000682736 00000 n
+0000682822 00000 n
+0000682883 00000 n
+0000682942 00000 n
+0000683028 00000 n
+0000683089 00000 n
+0000683148 00000 n
+0000683234 00000 n
+0000683295 00000 n
+0000683354 00000 n
+0000683440 00000 n
+0000683501 00000 n
+0000683560 00000 n
+0000683660 00000 n
+0000683746 00000 n
+0000683807 00000 n
+0000683866 00000 n
+0000683952 00000 n
+0000684013 00000 n
+0000684072 00000 n
+0000684158 00000 n
+0000684219 00000 n
+0000684278 00000 n
+0000684364 00000 n
+0000684425 00000 n
+0000684484 00000 n
+0000684570 00000 n
+0000684631 00000 n
+0000684690 00000 n
+0000684790 00000 n
+0000684876 00000 n
+0000684937 00000 n
+0000684996 00000 n
+0000685082 00000 n
+0000685143 00000 n
+0000685202 00000 n
+0000685288 00000 n
+0000685349 00000 n
+0000685408 00000 n
+0000685494 00000 n
+0000685555 00000 n
+0000685614 00000 n
+0000685700 00000 n
+0000685761 00000 n
+0000685820 00000 n
+0000685920 00000 n
+0000686006 00000 n
+0000686067 00000 n
+0000686126 00000 n
+0000686212 00000 n
+0000686273 00000 n
+0000686332 00000 n
+0000686418 00000 n
+0000686479 00000 n
+0000686538 00000 n
+0000686624 00000 n
+0000686685 00000 n
+0000686744 00000 n
+0000686830 00000 n
+0000686891 00000 n
+0000686950 00000 n
+0000687050 00000 n
+0000687136 00000 n
+0000687197 00000 n
+0000687256 00000 n
+0000687342 00000 n
+0000687403 00000 n
+0000687462 00000 n
+0000687548 00000 n
+0000687609 00000 n
+0000687668 00000 n
+0000687754 00000 n
+0000687815 00000 n
+0000687874 00000 n
+0000687960 00000 n
+0000688021 00000 n
+0000688080 00000 n
+0000688246 00000 n
+0000688346 00000 n
+0000688432 00000 n
+0000688493 00000 n
+0000688552 00000 n
+0000688638 00000 n
+0000688699 00000 n
+0000688758 00000 n
+0000688844 00000 n
+0000688905 00000 n
+0000688964 00000 n
+0000689050 00000 n
+0000689111 00000 n
+0000689170 00000 n
+0000689256 00000 n
+0000689317 00000 n
+0000689376 00000 n
+0000689476 00000 n
+0000689562 00000 n
+0000689623 00000 n
+0000689682 00000 n
+0000689768 00000 n
+0000689829 00000 n
+0000689888 00000 n
+0000689974 00000 n
+0000690035 00000 n
+0000690094 00000 n
+0000690180 00000 n
+0000690241 00000 n
+0000690300 00000 n
+0000690386 00000 n
+0000690447 00000 n
+0000690506 00000 n
+0000690606 00000 n
+0000690692 00000 n
+0000690753 00000 n
+0000690812 00000 n
+0000690898 00000 n
+0000690959 00000 n
+0000691018 00000 n
+0000691104 00000 n
+0000691165 00000 n
+0000691224 00000 n
+0000691310 00000 n
+0000691371 00000 n
+0000691430 00000 n
+0000691516 00000 n
+0000691577 00000 n
+0000691636 00000 n
+0000691736 00000 n
+0000691822 00000 n
+0000691883 00000 n
+0000691942 00000 n
+0000692028 00000 n
+0000692089 00000 n
+0000692148 00000 n
+0000692234 00000 n
+0000692295 00000 n
+0000692354 00000 n
+0000692440 00000 n
+0000692501 00000 n
+0000692560 00000 n
+0000692646 00000 n
+0000692707 00000 n
+0000692766 00000 n
+0000692866 00000 n
+0000692952 00000 n
+0000693013 00000 n
+0000693072 00000 n
+0000693158 00000 n
+0000693219 00000 n
+0000693278 00000 n
+0000693364 00000 n
+0000693425 00000 n
+0000693484 00000 n
+0000693583 00000 n
+0000693644 00000 n
+0000693703 00000 n
+0000693789 00000 n
+0000693850 00000 n
+0000693909 00000 n
+0000694009 00000 n
+0000694095 00000 n
+0000694156 00000 n
+0000694215 00000 n
+0000694301 00000 n
+0000694362 00000 n
+0000694421 00000 n
+0000694507 00000 n
+0000694568 00000 n
+0000694627 00000 n
+0000694713 00000 n
+0000694774 00000 n
+0000694833 00000 n
+0000694919 00000 n
+0000694980 00000 n
+0000695039 00000 n
+0000695139 00000 n
+0000695225 00000 n
+0000695286 00000 n
+0000695345 00000 n
+0000695431 00000 n
+0000695492 00000 n
+0000695551 00000 n
+0000695637 00000 n
+0000695698 00000 n
+0000695757 00000 n
+0000695843 00000 n
+0000695904 00000 n
+0000695963 00000 n
+0000696049 00000 n
+0000696110 00000 n
+0000696169 00000 n
+0000696269 00000 n
+0000696355 00000 n
+0000696416 00000 n
+0000696475 00000 n
+0000696561 00000 n
+0000696622 00000 n
+0000696681 00000 n
+0000696767 00000 n
+0000696828 00000 n
+0000696887 00000 n
+0000696973 00000 n
+0000697034 00000 n
+0000697093 00000 n
+0000697179 00000 n
+0000697240 00000 n
+0000697299 00000 n
+0000697399 00000 n
+0000697485 00000 n
+0000697546 00000 n
+0000697605 00000 n
+0000697691 00000 n
+0000697752 00000 n
+0000697811 00000 n
+0000697897 00000 n
+0000697958 00000 n
+0000698017 00000 n
+0000698103 00000 n
+0000698164 00000 n
+0000698223 00000 n
+0000698309 00000 n
+0000698370 00000 n
+0000698429 00000 n
+0000698529 00000 n
+0000698615 00000 n
+0000698676 00000 n
+0000698735 00000 n
+0000698821 00000 n
+0000698882 00000 n
+0000698941 00000 n
+0000699027 00000 n
+0000699088 00000 n
+0000699147 00000 n
+0000699233 00000 n
+0000699294 00000 n
+0000699353 00000 n
+0000699439 00000 n
+0000699500 00000 n
+0000699559 00000 n
+0000699679 00000 n
+0000699779 00000 n
+0000699865 00000 n
+0000699926 00000 n
+0000699985 00000 n
+0000700071 00000 n
+0000700132 00000 n
+0000700191 00000 n
+0000700277 00000 n
+0000700338 00000 n
+0000700397 00000 n
+0000700483 00000 n
+0000700544 00000 n
+0000700603 00000 n
+0000700689 00000 n
+0000700750 00000 n
+0000700809 00000 n
+0000700909 00000 n
+0000700995 00000 n
+0000701056 00000 n
+0000701115 00000 n
+0000701201 00000 n
+0000701262 00000 n
+0000701321 00000 n
+0000701407 00000 n
+0000701468 00000 n
+0000701527 00000 n
+0000701613 00000 n
+0000701674 00000 n
+0000701733 00000 n
+0000701819 00000 n
+0000701880 00000 n
+0000701939 00000 n
+0000702039 00000 n
+0000702125 00000 n
+0000702186 00000 n
+0000702245 00000 n
+0000702331 00000 n
+0000702392 00000 n
+0000702451 00000 n
+0000702537 00000 n
+0000702598 00000 n
+0000702657 00000 n
+0000702743 00000 n
+0000702804 00000 n
+0000702863 00000 n
+0000702949 00000 n
+0000703010 00000 n
+0000703069 00000 n
+0000703169 00000 n
+0000703255 00000 n
+0000703316 00000 n
+0000703375 00000 n
+0000703461 00000 n
+0000703522 00000 n
+0000703581 00000 n
+0000703667 00000 n
+0000703728 00000 n
+0000703787 00000 n
+0000703873 00000 n
+0000703934 00000 n
+0000703993 00000 n
+0000704079 00000 n
+0000704140 00000 n
+0000704199 00000 n
+0000704299 00000 n
+0000704385 00000 n
+0000704446 00000 n
+0000704505 00000 n
+0000704591 00000 n
+0000704652 00000 n
+0000704711 00000 n
+0000704797 00000 n
+0000704858 00000 n
+0000704917 00000 n
+0000705003 00000 n
+0000705064 00000 n
+0000705123 00000 n
+0000705209 00000 n
+0000705270 00000 n
+0000705329 00000 n
+0000705458 00000 n
+0000705531 00000 n
+0000705617 00000 n
+0000705678 00000 n
+0000705737 00000 n
+0000705823 00000 n
+0000705884 00000 n
+0000705943 00000 n
+0000706016 00000 n
+0000706102 00000 n
+0000706163 00000 n
+0000706222 00000 n
+0000706308 00000 n
+0000706369 00000 n
+0000706428 00000 n
+0000706501 00000 n
+0000706587 00000 n
+0000706648 00000 n
+0000706707 00000 n
+0000706793 00000 n
+0000706854 00000 n
+0000706913 00000 n
+0000706986 00000 n
+0000707072 00000 n
+0000707133 00000 n
+0000707192 00000 n
+0000707278 00000 n
+0000707339 00000 n
+0000707398 00000 n
+0000707471 00000 n
+0000707557 00000 n
+0000707618 00000 n
+0000707677 00000 n
+0000707763 00000 n
+0000707824 00000 n
+0000707883 00000 n
+0000707956 00000 n
+0000708042 00000 n
+0000708103 00000 n
+0000708162 00000 n
+0000708248 00000 n
+0000708309 00000 n
+0000708368 00000 n
+0000708488 00000 n
+0000708570 00000 n
+0000708656 00000 n
+0000708717 00000 n
+0000708776 00000 n
+0000708862 00000 n
+0000708923 00000 n
+0000708982 00000 n
+0000709068 00000 n
+0000709129 00000 n
+0000709188 00000 n
+0000709270 00000 n
+0000709356 00000 n
+0000709417 00000 n
+0000709476 00000 n
+0000709562 00000 n
+0000709623 00000 n
+0000709682 00000 n
+0000709768 00000 n
+0000709829 00000 n
+0000709888 00000 n
+0000709970 00000 n
+0000710056 00000 n
+0000710117 00000 n
+0000710176 00000 n
+0000710262 00000 n
+0000710323 00000 n
+0000710382 00000 n
+0000710468 00000 n
+0000710529 00000 n
+0000710588 00000 n
+0000710670 00000 n
+0000710756 00000 n
+0000710817 00000 n
+0000710876 00000 n
+0000710962 00000 n
+0000711023 00000 n
+0000711082 00000 n
+0000711168 00000 n
+0000711229 00000 n
+0000711288 00000 n
+0000711370 00000 n
+0000711456 00000 n
+0000711517 00000 n
+0000711576 00000 n
+0000711662 00000 n
+0000711723 00000 n
+0000711782 00000 n
+0000711868 00000 n
+0000711929 00000 n
+0000711988 00000 n
+0000712218 00000 n
+0000712291 00000 n
+0000712377 00000 n
+0000712438 00000 n
+0000712497 00000 n
+0000712583 00000 n
+0000712644 00000 n
+0000712703 00000 n
+0000712776 00000 n
+0000712862 00000 n
+0000712923 00000 n
+0000712982 00000 n
+0000713068 00000 n
+0000713129 00000 n
+0000713188 00000 n
+0000713261 00000 n
+0000713347 00000 n
+0000713408 00000 n
+0000713467 00000 n
+0000713553 00000 n
+0000713614 00000 n
+0000713673 00000 n
+0000713746 00000 n
+0000713832 00000 n
+0000713893 00000 n
+0000713952 00000 n
+0000714038 00000 n
+0000714099 00000 n
+0000714158 00000 n
+0000714231 00000 n
+0000714317 00000 n
+0000714378 00000 n
+0000714437 00000 n
+0000714523 00000 n
+0000714584 00000 n
+0000714643 00000 n
+0000714716 00000 n
+0000714802 00000 n
+0000714863 00000 n
+0000714922 00000 n
+0000715008 00000 n
+0000715069 00000 n
+0000715128 00000 n
+0000715201 00000 n
+0000715287 00000 n
+0000715348 00000 n
+0000715407 00000 n
+0000715493 00000 n
+0000715554 00000 n
+0000715613 00000 n
+0000715686 00000 n
+0000715772 00000 n
+0000715833 00000 n
+0000715892 00000 n
+0000715978 00000 n
+0000716039 00000 n
+0000716098 00000 n
+0000716171 00000 n
+0000716257 00000 n
+0000716318 00000 n
+0000716377 00000 n
+0000716463 00000 n
+0000716524 00000 n
+0000716583 00000 n
+0000716656 00000 n
+0000716742 00000 n
+0000716803 00000 n
+0000716862 00000 n
+0000716948 00000 n
+0000717009 00000 n
+0000717068 00000 n
+0000717141 00000 n
+0000717227 00000 n
+0000717288 00000 n
+0000717347 00000 n
+0000717433 00000 n
+0000717494 00000 n
+0000717553 00000 n
+0000717626 00000 n
+0000717712 00000 n
+0000717773 00000 n
+0000717832 00000 n
+0000717918 00000 n
+0000717979 00000 n
+0000718038 00000 n
+0000718111 00000 n
+0000718197 00000 n
+0000718258 00000 n
+0000718317 00000 n
+0000718403 00000 n
+0000718464 00000 n
+0000718523 00000 n
+0000718596 00000 n
+0000718682 00000 n
+0000718743 00000 n
+0000718802 00000 n
+0000718888 00000 n
+0000718949 00000 n
+0000719008 00000 n
+0000719081 00000 n
+0000719167 00000 n
+0000719228 00000 n
+0000719287 00000 n
+0000719373 00000 n
+0000719434 00000 n
+0000719493 00000 n
+0000719566 00000 n
+0000719652 00000 n
+0000719713 00000 n
+0000719772 00000 n
+0000719858 00000 n
+0000719919 00000 n
+0000719978 00000 n
+0000720051 00000 n
+0000720137 00000 n
+0000720198 00000 n
+0000720257 00000 n
+0000720343 00000 n
+0000720404 00000 n
+0000720463 00000 n
+0000720522 00000 n
+0000720581 00000 n
+0000720640 00000 n
+0000720699 00000 n
+0000720826 00000 n
+0000720885 00000 n
+0000720944 00000 n
+0000721003 00000 n
+0000721062 00000 n
+0000721121 00000 n
+0000721180 00000 n
+0000721239 00000 n
+0000721298 00000 n
+0000721370 00000 n
+0000721429 00000 n
+0000721488 00000 n
+0000721547 00000 n
+0000721606 00000 n
+0000721705 00000 n
+0000721764 00000 n
+0000721823 00000 n
+0000721882 00000 n
+0000721941 00000 n
+0000722000 00000 n
+0000722108 00000 n
+0000722167 00000 n
+0000722226 00000 n
+0000722285 00000 n
+0000722344 00000 n
+0000722403 00000 n
+0000722462 00000 n
+0000722521 00000 n
+0000722580 00000 n
+0000722639 00000 n
+0000722698 00000 n
+0000722758 00000 n
+0000722817 00000 n
+0000722877 00000 n
+0000722936 00000 n
+0000722996 00000 n
+0000723095 00000 n
+0000723155 00000 n
+0000723215 00000 n
+0000723275 00000 n
+0000723335 00000 n
+0000723395 00000 n
+0000723454 00000 n
+0000723514 00000 n
+0000723604 00000 n
+0000723664 00000 n
+0000723724 00000 n
+0000723784 00000 n
+0000723843 00000 n
+0000723903 00000 n
+0000723993 00000 n
+0000724053 00000 n
+0000724113 00000 n
+0000724173 00000 n
+0000724233 00000 n
+0000724314 00000 n
+0000724374 00000 n
+0000724434 00000 n
+0000724494 00000 n
+0000724553 00000 n
+0000724613 00000 n
+0000724672 00000 n
+0000724732 00000 n
+0000724791 00000 n
+0000724851 00000 n
+0000724910 00000 n
+0000724970 00000 n
+0000725051 00000 n
+0000725111 00000 n
+0000725171 00000 n
+0000725231 00000 n
+0000725290 00000 n
+0000725350 00000 n
+0000725422 00000 n
+0000725482 00000 n
+0000725542 00000 n
+0000725601 00000 n
+0000725661 00000 n
+0000725720 00000 n
+0000725780 00000 n
+0000725839 00000 n
+0000725899 00000 n
+0000726007 00000 n
+0000726067 00000 n
+0000726127 00000 n
+0000726187 00000 n
+0000726247 00000 n
+0000726307 00000 n
+0000726366 00000 n
+0000726426 00000 n
+0000726485 00000 n
+0000726545 00000 n
+0000726604 00000 n
+0000726664 00000 n
+0000726723 00000 n
+0000726783 00000 n
+0000726873 00000 n
+0000726933 00000 n
+0000726993 00000 n
+0000727053 00000 n
+0000727112 00000 n
+0000727172 00000 n
+0000727280 00000 n
+0000727340 00000 n
+0000727400 00000 n
+0000727460 00000 n
+0000727520 00000 n
+0000727580 00000 n
+0000727639 00000 n
+0000727699 00000 n
+0000727758 00000 n
+0000727818 00000 n
+0000727877 00000 n
+0000727937 00000 n
+0000727996 00000 n
+0000728056 00000 n
+0000728115 00000 n
+0000728175 00000 n
+0000728234 00000 n
+0000728294 00000 n
+0000728353 00000 n
+0000728413 00000 n
+0000728472 00000 n
+0000728532 00000 n
+0000728640 00000 n
+0000728700 00000 n
+0000728760 00000 n
+0000728820 00000 n
+0000728880 00000 n
+0000728940 00000 n
+0000728999 00000 n
+0000729059 00000 n
+0000729118 00000 n
+0000729178 00000 n
+0000729237 00000 n
+0000729297 00000 n
+0000729356 00000 n
+0000729416 00000 n
+0000729524 00000 n
+0000729584 00000 n
+0000729644 00000 n
+0000729704 00000 n
+0000729764 00000 n
+0000729824 00000 n
+0000729884 00000 n
+0000730166 00000 n
+0000730328 00000 n
+0000730530 00000 n
+0000730830 00000 n
+0000731682 00000 n
+0000732835 00000 n
+0000733273 00000 n
+0000733358 00000 n
+0000734145 00000 n
+0000734574 00000 n
+0000735620 00000 n
+0000735676 00000 n
+0000735732 00000 n
+0000735788 00000 n
+0000735844 00000 n
+0000736041 00000 n
+0000736126 00000 n
+0000736706 00000 n
+0000737149 00000 n
+0000737446 00000 n
+0000737588 00000 n
+0000738077 00000 n
+0000738162 00000 n
+0000738247 00000 n
+0000738490 00000 n
+0000738546 00000 n
+0000738602 00000 n
+0000738781 00000 n
+0000739224 00000 n
+0000739476 00000 n
+0000739532 00000 n
+0000739738 00000 n
+0000739935 00000 n
+0000740081 00000 n
+0000740224 00000 n
+0000740366 00000 n
+0000740509 00000 n
+0000740652 00000 n
+0000740795 00000 n
+0000740938 00000 n
+0000741081 00000 n
+0000741222 00000 n
+0000741367 00000 n
+0000741509 00000 n
+0000741650 00000 n
+0000741798 00000 n
+0000741936 00000 n
+0000742080 00000 n
+0000742113 00000 n
+0000742161 00000 n
+0000742413 00000 n
+0000743592 00000 n
+0000743742 00000 n
+0000743831 00000 n
+0000743982 00000 n
+trailer
+<<
+/Size 3950
+/ID[<c44f9ff94a078cf1a842c8465d2f0318><f8ab1f204d72b45346d7940a6afbbe37>]
+>>
+startxref
+173
+%%EOF
Added: packages/hdf5/branches/upstream/current/doc/html/ADGuide/HISTORY.txt
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ADGuide/HISTORY.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ADGuide/HISTORY.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5817 @@
+HDF5 HISTORY
+============
+This file contains history of the HDF5 libraries releases
+
+CONTENTS
+
+18.     Release Information for hdf5-1.6.4
+17.     Release Information for hdf5-1.6.3
+16.     Release Information for hdf5-1.6.2
+15.     Release Information for hdf5-1.6.1
+14.     Release Information for hdf5-1.6.0
+13.     Release Information for hdf5-1.4.5
+12.     Release Information for hdf5-1.4.4
+11.     Release Information for hdf5-1.4.3
+10.     Release Information for hdf5-1.4.2
+9.      Release Information for hdf5-1.4.1
+8.      Release Information for hdf5-1.4.0
+7.      Release Information for hdf5-1.2.2
+6.      Release Information for hdf5-1.2.1
+5.      Release Information for hdf5-1.2.0
+4.      Changes from Release 1.0.0 to Release 1.0.1
+3.      Changes from the Beta 1.0.0 Release to Release 1.0.0
+2.      Changes from the Second Alpha 1.0.0 Release to the Beta 1.0.0 Release
+1.      Changes from the First Alpha 1.0.0 Release to the 
+                Second Alpha 1.0.0 Release
+
+[Search on the string '%%%%' for per-release section breaks.]
+
+%%%%1.6.4%%%%   Release Information for hdf5-1.6.4 (15/March/05)
+
+
+HDF5 version 1.6.4 released on Tue Mar 15 20:38:48 CST 2005
+================================================================================
+
+INTRODUCTION
+============
+This document describes the differences between HDF5-1.6.3 and
+HDF5-1.6.4, and contains information on the platforms tested and
+known problems in HDF5-1.6.4. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+========
+- New Features
+- Support for new platforms and languages
+- Bug Fixes since HDF5-1.6.3
+- Documentation
+- Platforms Tested
+- Supported Configuration Features Summary
+- Known Problems
+
+
+New Features
+============
+    Source code distribution:
+    -------------------------
+
+    The High-Level (HL) C APIs were added to the source code distribution.
+    For HL documentation, see
+    http://hdf.ncsa.uiuc.edu/HDF5/hdf5_hl/doc/RM_hdf5hl.html.
+
+    The HL library, libhdf5_hl.a(so), is built and installed by default. 
+    Use --disable-hl configure flag to disable the HL library.
+
+    Library:
+    --------
+        - We recommend you to use SZIP v2.0 with this release. 
+          For more information see
+          http://hdf.ncsa.uiuc.edu/doc_resource/SZIP/ 
+        - The compound datatype has been enhanced with a new feature of size 
+            adjustment.  The size can be increased and decreased (without
+            cutting the last member).  No API change is involved.  SLU - 
+            2004/10/1
+        - Removed PABLO support.  2005/01/20 EIP 
+
+    Parallel Library:
+    -----------------
+        - Allow compressed, chunked datasets to be read in parallel.
+            QAK - 2004/10/04
+
+    Tools:
+    ------
+	- New tool, h5jam.  See HDF5 Reference Manual.  2004/10/08	      
+
+    F90 API:
+    --------
+          No new features in this release.
+
+    C++ API:
+    --------
+	- Started using C library's reference counting in place of the class
+	  RefCounter, which existed before the C mechanism was available.  
+	  As a result, RefCounter has been removed.  2005/03/12 BMR
+
+
+Support for new platforms, languages and compilers.
+=======================================
+
+    Configuration
+    -------------
+	- Upgraded from GNU autoconf 2.53 to autoconf 2.59.  JML - 2005/01/31
+
+
+Bug Fixes since HDF5-1.6.3 release
+==================================
+
+    Library
+    -------
+        - Fixed a racing condition in MPIPOSIX virtual file drive close
+	  function.  Now all processes must completed the close before any
+	  of them is returned.  This prevents some "faster" processes start
+	  accessing the file for another purpose (e.g., open with truncate)
+	  while other "slower" processes have not closed the same file with
+	  the previous purpose.  AKC - 2005/03/01
+	- H5Tget_member_value calls for enum datatype didn't return correct 
+          value if H5Tenum_valueof was called first.  It's fixed.  SLU - 
+          2005/02/08
+        - For variable-length string, H5Tget_class returned H5T_STRING as its
+          class.  But H5Tdetect_class and H5Tget_member_class considered it
+          as H5T_VLEN.  This is fixed to let all these 3 functions treat it
+          as H5T_STRING.  SLU - 2005/02/08
+        - The byte order of all 1-byte integer types was fixed as
+          little-endian even on a big-endian machine.  It's corrected.
+          SLU - 2005/02/07
+        - Fixed segmentation fault when calling H5Fflush with an attribute that
+          hasn't had a value written to it open.  QAK - 2004/10/18
+        - Backed out support for bitfield and time types in H5Tget_native_type.
+          Leave it to future support.  The function simply returns error 
+          message of "not support" for bitfield and time types. SLU - 2004/10/5
+        - Fixed address check in Core VFL driver to avoid spurious address/size
+          overflows for odd valued addresses and/or sizes.  QAK - 2004/09/27
+        - Fixed problem where chunked datasets were not able to be deleted
+          from a file under certain circumstances.  QAK - 2004/09/27/
+
+    Configuration
+    -------------
+	- IRIX64 MIPSpro compiler of 7.4.x supports C99 features.  Default
+	  to use the 'c99' compiler if available. AKC - 2004/12/13
+	- Intel v8.0 compiler would infinite loop when compiling some test
+	  code with -O3 option.  Changed enable-production default compiler
+	  option to -O2. AKC - 2004/12/06
+	- Long double is assumed to be a supported C data type.  It is a
+	  standard C89 type. AKC - 2004/10/22
+
+    Performance
+    -------------
+    Many changes were made to the library to improve performance,
+    especially for the variable-length datatypes and metadata cache.
+   
+    Tools
+    -----
+        - h5fc and h5c++ work correctly when -c compiler flag
+          is used.  EIP - 2005/03/14        
+	- Fixed h5dump to print attributes data in ASCII if -r option is used.
+	  AKC - 2004/11/18
+        - Fixed space utilization reported in h5ls to correct error 
+          in formula used.  QAK - 2004/10/22
+
+    Documentation 
+    ------------- 
+
+    F90 API
+    -------
+       - On windows, previously Fortran DLL built and tested failed.
+         Now Fortran DLL has been built and tested successfully
+         with Dec Fortran 6.6c or Dec Fortran 6.0.
+
+    C++ API
+    -------
+
+
+Documentation
+=============
+
+    HDF5 Library documentation
+    --------------------------
+    No substantive changes to the structure or types of content in the 
+    HDF5 Library documentation.
+
+    Windows installation documentation
+    ----------------------------------
+    1. On Windows zlib has been updated to 1.2.2. You may find the binary at
+       either http://www.zlib.net/zlib122-dll.zip or
+              ftp://hdf.ncsa.uiuc.edu/lib-external/zlib/bin/windows
+
+    2. Only DLLs of external libraries (zlib and szip) are linked with the 
+       HDF5 Library. We will no longer provide binary to link static library 
+       with HDF5. For details, please check INSTALL_Windows in this directory.
+        
+
+Platforms Tested
+================
+
+    AIX 5.1  (32 and 64-bit)      xlc 6.0.0.6
+                                  xlf 8.1.1.3
+    				  xlC 6.0.0.6
+				  mpcc_r 6.0.0.6
+                                  mpxlf_r 8.1.1.3
+				  xlc 5.0.2.5
+				  xlf 7.1.1.2
+				  xlC 5.0.2.5
+				  mpcc_r 5.0.2.5
+				  mpxlf_r 7.1.1.2
+    AIX 5.2 (32/64 bit)           xlc 6.0.0.8
+                                  xlC 6.0.0.9
+                                  xlf 8.1.1.7
+                                  mpcc_r 6.0.0.8
+                                  mpxlf_r 8.1.1.7
+    AIX 5.2 (32/64 bit, LLNL frost)    xlc 6.0.0.8
+                                  xlC 6.0.0.8
+                                  xlf 8.1.1.7
+                                  mpcc_r 6.0.0.8
+                                  mpxlf_r 8.1.1.7
+    Cray T90 sn7001 10.0.0md      Cray Standard C Version 6.4.0.3
+                                  Cray Fortran Version 3.4.0.0
+    Cray SV1 sn9617 10.0.1.2      Cray Standard C Version 6.6.0.3.6
+                                  Cray Fortran Version 3.6.0.3.1
+    FreeBSD 4.9                   gcc 2.95.4
+                                  g++ 2.95.4
+                                  gcc 3.2.3, 3.3.6, 3.4.4, 4.0.0
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP ANSI C++ B3910B A.03.13
+                                  MPIch 1.2.4
+    IRIX64 6.5 (tesla -64)        MIPSpro cc 7.4.2m
+                                  F90 MIPSpro 7.4.2m
+                                  C++ MIPSpro cc 7.4.2m
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+                                  C++ MIPSpro cc 7.3.1.3m
+				  mpt 1.6
+    Linux 2.4.20-28.7             gcc 2.96
+    (eirene, verbena)             gcc 3.3.2
+                                  PGI compilers (pgcc, pgf90, pgCC) 
+                                  version 5.2-1
+                                  Absoft Fortran compiler v9.0
+                         	  Intel(R) C++ 32-bit Version 8.1
+    				  Intel(R) Fortran 32-bit Version 8.1
+                                  MPIch 1.2.6
+    Linux 2.4.21-268-smp x86_64   gcc 3.3.1 (SuSE Linux, AMD)
+    (mir)                         PGI 5.2-1 C and F90 (with k3-32) 
+                         	  Intel(R) C++ 32-bit Version 8.1
+    				  Intel(R) Fortran 32-bit Version 8.1
+    Linux 2.4.21-sgi303r2 Altix 
+          SMP ia64                Intel(R) C++ Version 8.1
+    (cobalt)                      Intel(R) Fortran Itanium(R) Version 8.1
+                                  SGI MPI
+    OSF1 V5.1 (QSC)               Compaq C V6.5-011 
+                                  HP Fortran V5.5A-3548
+				  Compaq C++ V6.5-036  
+				  MPIX200_64_r13.4
+    OSF1 V5.1 (PSC)               Compaq C V6.5-303 
+                                  HP Fortran V5.5A-3548
+				  Compaq C++ V6.5-040  
+				  MPIX200_64_r13.4
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8 32,46               Sun WorkShop 6 update 2 C 5.3
+     (Solaris 2.8)                Sun WorkShop 6 update 2 Fortran 90
+                                  Sun WorkShop 6 update 2 C++ 5.3
+    SunOS 5.9 32,64               Sun C 5.6 2004/07/15
+     (Solaris 2.9)                Sun Fortran 95 8.0 2004/07/15
+                                  Sun C++ 5.6 2004/07/15
+    TFLOPS r1.0.4 v4.5.2 i386     pgcc Rel 3.1-4i with mpich-1.2.4 with
+                                          local modifications
+    Xeon Linux 2.4.20-31.9smp_perfctr_lustre
+    (tungsten)	                  Intel(R) C++ Version 8.0
+                                  Intel(R) Fortran Compiler Version 8.0
+    IA-64 Linux 2.4.21.SuSE_128.bef1 ia64
+    (NCSA tg-login)               Intel(R) C++ Version 8.0
+                                  Intel(R) Fortran Compiler Version 8.0
+				  mpich-gm-1.2.5..intel
+    Windows XP                    MSVC++.NET
+                                  MSVC++ 6.0
+                                  Compaq Visual Fortran 6.6C
+                                  Intel 8.1 C++
+    MAC OS X                      Darwin 7.5
+                                  gcc and g++ Apple Computer, Inc. GCC 
+                                  version 1175, based on gcc version 3.3.2
+                                  IBM XL Fortran version 8.1 
+                                  Absoft Fortran compiler v8.2
+
+
+Supported Configuration Features Summary
+========================================
+
+Key:   y   = tested and supported
+       n   = not supported or not tested in this release
+       x   = not working in this release
+       dna = does not apply
+       ( ) = footnote appears below second table
+
+Platform                             C        F90    F90      C++  zlib  SZIP
+                                     parallel        parallel      
+Solaris2.8 64-bit                    y        y      y(1)     y    y     y
+Solaris2.8 32-bit                    y        y      y(1)     y    y     y
+Solaris2.9 64-bit                    y(1)     y      y(1)     y    y     y
+Solaris2.9 32-bit                    y(1)     y      y(1)     y    y     y
+IRIX64_6.5 64-bit                    y(2)     y      y        y    y     y
+IRIX64_6.5 32-bit                    y(2)     n      n        n    y     y
+HPUX11.00                            y(1)     y      y        y    y     y
+OSF1 v5.1                            y        y      y        y    y     y
+T90 IEEE                             n        y      n        n    y     n
+SV1                                  y(5)     y      y(5)     n    y     n
+TFLOPS                               y(1)     n      n        n    y     n
+AIX-5.1 & 5.2 32-bit                 y        y      y        y    y     y
+AIX-5.1 & 5.2 64-bit                 y        y      y        y    y     y
+WinXP Visual Studio 6.0              n        y(9)   n        y    y     y
+WinXP .Net                           n        n      n        y(8) y     y
+Mac OS X 10.3                        n        y(10)  n        y    y     y
+FreeBSD 4.9                          y(1)     n      n        y    y     y
+RedHat 7.3  W (3)                    y(1)     y(11)  n        y    y     y
+RedHat 7.3  W Intel (3)              n        y      n        y    y     y
+RedHat 7.3  W PGI (3)                n        y      n        y    y     y
+SuSe x86_64 gcc (3,13)               n        y(12)  n        y    y     y
+SuSe x86_64 icc (3,13)               n        y(14)  n        y    y     y
+Linux 2.4 Xeon C Lustre Intel (3,6)  n        y      n        y    y     y
+Linux 2.4 SuSE ia64 C Intel (3,7)    y        y      y        y    y     y
+Linux 2.4 SGI Altix ia64 Intel (3)   y        y      y        y    y     y
+
+
+Platform                             Shared        static-  Thread-  STREAM- 
+                                     libraries(4)  exec     safe     VFD    
+Solaris2.8 64-bit                    y              x       y        y
+Solaris2.8 32-bit                    y              x       y        y
+Solaris2.9 64-bit                    y              x       y        y
+Solaris2.9 32-bit                    y              x       y        y
+IRIX64_6.5 64-bit                    y              y       y        y
+IRIX64_6.5 32-bit                    y              y       y        y
+HPUX11.00                            y              x       n        y
+OSF1 v5.1                            y              y       n        y
+T90 IEEE                             n              y       n        y
+SV1                                  n              y       n        y
+TFLOPS                               n              y       n        n
+AIX-5.1 & 5.2 32-bit                 n              y       n        y
+AIX-5.1 & 5.2 64-bit                 n              y       n        y
+WinXP Visual Studio 6.0              y              y       n        n
+WinXP .Net                           y              y       n        n
+Mac OS X 10.3                        y              y       n        y
+FreeBSD 4.9                          y              y       y        y
+RedHat 7.3   W (3)                   y              y       y        y
+RedHat 7.3  W  Intel (3)             n              y       n        y
+RedHat 7.3  W  PGI (3)               n              y       n        y
+SuSe x86_64 gcc (3,13)               n              y       n        y
+SuSe x86_64 icc (3,13)               y              y(15)   n        y
+Linux 2.4 Xeon C Lustre Intel (3,6)  y              y       n        y
+Linux 2.4 SuSE ia64 C Intel (3,7)    y              y       n        n
+Linux 2.4 SGI Altix ia64 Intel  (3)  y              y       n        y
+
+
+Compiler versions for each platform are listed in the "Platforms Tested" 
+table found elsewhere in this file (RELEASE.txt).  Unless otherwise noted, 
+compilers used are the system compilers.
+
+Footnotes:  (1) Using mpich 1.2.6
+            (2) Using mpt and mpich 1.2.6.
+            (3) Linux 2.4 with GNU, Intel, and PGI compilers, as indicated.  
+                  W or C indicates workstation or cluster, respectively.
+            (4) Shared libraries are provided only for the C library, 
+                except on Windows where they are provided for C and C++.
+            (5) Using mpt.
+            (6) Linux 2.4.20-31.9.  Xeon cluster with smp_perfctr_lustre 
+                and Intel compilers
+            (7) Linux 2.4.21, SuSE_128.befl.  Ia64 cluster with Intel compilers
+            (8) Intel 8.1
+            (9) Compaq Visual Fortran 6.6C
+           (10) IBM XLF and Absoft
+           (11) PGI, Absoft.  No shared libraries with Absoft; 
+                use '--disable-shared'.
+           (12) PGI and Intel compilers for both C and Fortran
+           (13) AMD Opteron x86_64
+           (14) ifort
+           (15) Yes with C and Fortran, but not with C++
+       FMB/EIP - 2005/03/15
+
+
+Known Problems
+==============
+* test/big fails sometimes with the message "Possible overlap with another
+  region."  The test selects regions randomly, and this error occurs when
+  two regions overlap each other; it is an bug in the test and not in
+  HDF5.  Since the error is triggered by a random situation, it will
+  usually disappear if the test is re-run.
+
+* Cray SV1 fails to correctly convert between floating-point and "long double"
+  for software conversion.  Problem is being investigated. SLU - 2005/03/04
+
+* Newer SGI MIPSpro compilers (version 7.4.x) support C99 features but it
+  has a "guard" statement in stdint.h that will #error and skip the rest
+  of the header file if C99 option is not used explicitly.  Hardset
+  $CC to c99 will resolve the problem. AKC - 2004/12/13
+
+* On IBM AIX systems, parallel HDF5 mode will fail some tests with error
+  messages like "INFO: 0031-XXX ...".  This is from the command poe.
+  Set the environment variable MP_INFOLEVEL to 0 to minimize the messages
+  and run the tests again.
+  The tests may fail with messages like "The socket name is already
+  in use".  HDF5 does not use sockets (except for stream-VFD).  This is
+  due to problems of the poe command trying to set up the debug socket.
+  Check if there are many old /tmp/s.pedb.* staying around.  These are
+  sockets used by the poe command and left behind due to failed commands.
+  Ask your system administrator to clean them out.  Lastly, request IBM
+  to provide a mean to run poe without the debug socket.
+
+* Fortran subroutine h5pget_driver_f doesn't return a correct driver 
+  information.
+
+* There are two h5dump xml tests(h5dump --xml thlink.h5 and 
+  h5dump --xml tmany.h5) failed on windows xp with .NET for debug and 
+  debug dll. Release and Release dll work fine. 
+
+* The h5dump tests may fail to match the expected output on some platforms
+  (e.g. parallel jobs, Windows) where the error messages directed to
+  "stderr" do not appear in the "right order" with output from stdout.
+  This is not an error.
+
+* The stream-vfd test uses ip port 10007 for testing. If another
+  application is already using that port address, the test will hang
+  indefinitely and has to be terminated by the kill command. To try the
+  test again, change the port address in test/stream_test.c to one not
+  being used in the host.
+
+* The --enable-static-exec configure flag fails to compile for Solaris
+  platforms. This is due to the fact that not all of the system
+  libraries on Solaris are available in a static format.
+
+  The --enable-static-exec configure flag also fails to correctly compile
+  on IBM SP2 platform for the serial mode. The parallel mode works fine
+  with this option.
+  
+  It is suggested that you don't use this option on these platforms
+  during configuration.
+
+* The Stream VFD was not tested yet under Windows. It is not supported
+  in the TFLOPS machine.
+
+* The ./dsets tests failed in the TFLOPS machine if the test program,
+  dsets.c, is compiled with the -O option.  The hdf5 library still works
+  correctly with the -O option.  The test program works fine if it is
+  compiled with -O1 or -O0.  Only -O (same as -O2) causes the test
+  program to fail.
+
+* Certain platforms give false negatives when testing h5ls:
+    - Cray T90IEEE give errors during testing when displaying
+      some floating-point values. These are benign differences due to
+      the different precision in the values displayed.
+      h5ls appears to be dumping floating-point numbers correctly.
+
+* Before building HDF5 F90 Library from source on Crays 
+  replace H5Aff.f90, H5Dff.f90 and H5Pff.f90 files in the fortran/src
+  subdirectory in the top level directory with the Cray-specific files
+  from the site:
+  ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/src/patches/
+
+* On some platforms that use Intel and Absoft compilers to build HDF5 fortran 
+  library, compilation may fail for fortranlib_test.f90, fflush1.f90 and 
+  fflush2.f90 complaining about exit subroutine. Comment out the line 
+  IF (total_error .ne. 0) CALL exit (total_error)
+
+* Use --disable-shared configure flag if building with Absoft Fortran
+  compiler
+
+* Information about building with PGI and Intel compilers is available in
+  INSTALL file sections 5.7 and 5.8
+
+* In LANL QSC, the new cc compiler has problems converting small values of
+  long long (absolute values less than 1**-308) to double.  This triggers
+  the test/dtypes to report failure in the
+      Testing random sw long double -> double conversions
+  If -ieee is used, the converted doubles spread over the range 0.0 to 1**-308.
+  If -ieee is not used, the converted double values are mostly 0.0 but
+  occasionally as 1**-308.  This has been reported to the system staff.
+  All other tests have passed.
+
+* The C++ library's tests fails when compiling with PGI C++ compiler.  The
+  workaround until the problem is correctly handled is to use the
+  flag "--instantiate=local" prior to the configure and build steps, as:
+        setenv CXX "pgCC --instantiate=local"  for pgCC 5.02 and higher
+        setenv CXX "pgCC -tlocal" for others
+
+* Fortran release DLL randomly failed with compaq visual fortran 6.6c on
+  windows. 
+
+* Fortran DLL built with Intel 8.1 in .NET environment crushed the compiler,
+  To build Fortran Static library with Intel 8.1 in .NET environment 
+  needs manually setting the project file,
+  please contact to hdfhelp at ncsa.uiuc.edu if you need to build
+  fortran static library with Intel 8.1 with .NET environment.
+
+* On at least one system, (SDSC DataStar), the scheduler (in this case
+  LoadLeveler) sends job status updates to standard error when you run
+  any executable that was compiled with the parallel compilers.
+
+  This causes problems when running "make check" on parallel builds, as
+  many of the tool tests function by saving the output from test runs,
+  and comparing it to an exemplar.
+
+  The best solution is to reconfigure the target system so it no longer
+  inserts the extra text.  However, this may not be practical.
+
+  In such cases, one solution is to "setenv HDF5_Make_Ignore yes" prior to
+  the configure and build.  This will cause "make check" to continue after
+  detecting errors in the tool tests.  However, in the case of SDSC DataStar,
+  it also leaves you with some 150 "failed" tests to examine by hand.
+
+  A second solution is to write a script to run serial tests and filter
+  out the text added by the scheduler.  A sample script used on SDSC
+  DataStar is given below, but you will probably have to customize it
+  for your installation.
+
+  Observe that the basic idea is to insert the script as the first item
+  on the command line which executes the test.  The script then
+  executes the test and filters out the offending text before passing
+  it on.
+
+        #!/bin/csh
+
+        set STDOUT_FILE=~/bin/serial_filter.stdout
+        set STDERR_FILE=~/bin/serial_filter.stderr
+
+        rm -f $STDOUT_FILE $STDERR_FILE
+
+        ($* > $STDOUT_FILE) >& $STDERR_FILE
+
+        set RETURN_VALUE=$status
+
+        cat $STDOUT_FILE
+
+        tail +3 $STDERR_FILE
+
+        exit $RETURN_VALUE
+
+  You get the HDF make files and test scripts to execute your filter script
+  by setting the environment variable "RUNSERIAL" to the full path of the
+  script prior to running configure for parallel builds.  Remember to
+  "unsetenv RUNSERIAL" before running configure for a serial build.
+
+  Note that the RUNSERIAL environment variable exists so that we can
+  can prefix serial runs as necessary on the target system.  On DataStar,
+  no prefix is necessary.  However on an MPICH system, the prefix might
+  have to be set to something like "/usr/local/mpi/bin/mpirun -np 1" to
+  get the serial tests to run at all.
+
+  In such cases, you will have to include the regular prefix in your
+  filter script.
+
+
+%%%%1.6.3%%%%   Release Information for hdf5-1.6.3 (22/September/04)
+
+HDF5 version 1.6.3 released on Wed Sep 22 11:30:11 CDT 2004
+================================================================================
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.6.2 and
+HDF5-1.6.3, and contains information on the platforms tested and
+known problems in HDF5-1.6.3. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+CONTENTS
+
+- New Features
+- Support for new platforms and languages
+- Bug Fixes since HDF5-1.6.2
+- Documentation
+- Platforms Tested
+- Supported Configuration Features Summary
+- Known Problems
+
+
+New Features
+============
+
+    Configuration:
+    --------------
+        - Added some initial support for making purify (or similar memory
+            checking products) happier by initializing buffers to zero and
+            disabling the internal free list code.  To take advantage of this,
+            define 'H5_USING_PURIFY' in your CFLAGS when building the library.
+            QAK - 2004/07/23
+
+        - WINDOWS building,testing and installing improvements
+
+          - On Windows, FORTRAN,C++ and C projects are merged into one zip file, 
+            users can choose an option to build either FORTRAN or C++ or both 
+            with basic C library.For detailed information,
+            please read INSTALL_Windows.txt.
+
+          - On Windows, szip compression library with or without encoder can be easily
+            turned off or on when building HDF5.  For detailed information,
+            please read INSTALL_Windows.txt, especially section V. 
+  
+          - On Windows, an optional procedure for building,testing and installing
+            HDF5 from command line is provided. This procedure is supposed to be
+            convenient for experienced users, please read 
+            INSTALL_windows_From_Command_Line.txt for details.
+
+          - On Windows, an alternative short instruction document for building,
+            testing and installing HDF5 is provided. This instruction is supposed to
+            be convenient for general users, please read 
+            INSTALL_Windows_Short.txt for details.
+
+          - On Windows, h5repack,h5diff,h5ls and h5import tool tests have been added.
+          KY - 2004/9/16
+  
+
+    Library:
+    --------
+        - Modified the way how HDF5 calculates 'pixels_per_scanline' parameter for
+          SZIP compression. Now there is no restriction on the size and shape of the 
+          chunk except that the total number of elements in the chunk cannot be 
+          bigger than 'pixels_per_block' parameter provided by the user.
+                                                                    EIP - 2004/07/21 
+        - HDF5 can now link to SZIP with or without szip's encoder.
+          The new API function H5Zget_filter_info can be used to check
+          szip's status.  Attempting to assign szip to a dataset property
+          list or attempting to write with szip will generate an error if
+          szip's encoder is disabled.  JL/NF - 2004/6/30
+        - SZIP always uses K13 compression.  This flag no longer needs to
+          be set when calling H5Pset_szip.  If the flag for CHIP
+          compression is set, it will be ignored (since the two are mutually
+          exclusive).  JL/NF - 2004/6/30
+        - A new API function H5Fget_name was added.  It returns the name
+          of the file by object(file, group, data set, named data type,
+          attribute) ID.  SLU - 2004/06/29
+        - A new API function H5Fget_filesize was added.  It returns the
+          actual file size of the opened file.  SLU - 2004/06/24
+	- Added option that if $HDF5_DISABLE_VERSION_CHECK is set to 2,
+	  will suppress all library version mismatch warning messages.
+	  AKC - 2004/4/14
+
+    Parallel Library:
+    -----------------
+
+    Tools:
+    ------
+        - h5repack was added to the tools suite. h5repack regenerates an HDF5 file 
+	  from another HDF5 file, optionally applying HDF5 filters (compression) 
+	  and/or chunking to the copied file. The filters options are read from 
+	  the command line. See /doc/html/Tools.html for more details.
+	  PVN - 2004/9/13
+
+        - h5dump includes new features:
+           1) Printing of dataset filters, storage layout and fill value information.
+           2) Print a list of the file contents.
+	   3) Escape non printing characters.
+	   4) Print the content of the boot block.
+	   5) Print array indices with the data (the default).
+	  These options are all switch controlled. See /doc/html/Tools.html for more details.
+	  PVN - 2004/9/13
+	      
+
+    F90 API:
+    --------
+        - added new subroutines:
+                h5fget_filesize_f
+                h5iget_file_id_f
+                h5premove_filter_f
+                h5zget_filter_info_f
+                                         EIP 2004/9/21
+ 
+        - added new h5fget_name_f and h5fget_filesize_f subroutines
+                                         EIP 2004/07/08
+
+    C++ API:
+    --------
+	- Added wrappers for array and variable length datatypes APIs
+	- Added wrappers for newly added APIs from H5T, H5F, and H5I
+	- Added many wrappers that were missing from the H5P API
+	- Added the ability to reference HDF5 objects to these classes:
+	  DataSet, DataType, Group, and H5File (wrappers for H5R APIs)
+	BMR 2004/08/04
+
+
+Support for new platforms, languages and compilers.
+=======================================
+        - Added PGI Fortran support for Linux64 (x86_64) systems
+                            EIP - 2004/08/19
+        - Absoft compiler f95 v9.0 is supported on Linux 2.4 32bit
+                            EIP - 2004/07/29 
+        - HDF5 Fortran APIs are supported on Mac OSX with IBM XL Fortran
+          compiler version 8.1. This is a default compiler.
+        - HDF5 Fortran APIs are supported on MAC OSX with Absoft F95 compiler
+          version 8.2; set F9X environment variable to f95, for example
+          setenv F9X f95
+          Use --disable-shared --enable-static configure flags when Absoft
+          compiler is used.
+                             EIP - 2004/07/27
+
+Bug Fixes since HDF5-1.6.2 release
+==================================
+
+    Library
+    -------
+	- Fixed parallel bug in which some processes attempted collective
+	  I/O while others did independent I/O.  Bug appeared when some
+	  processes used point selections, and others didn't.  JRM - 2004/9/15
+        - Corrected error where dataset region references were written in an
+          incorrect way on Cray machines.  PVN & QAK - 2004/09/13
+        - The H5Tget_native_type now determines the native type for integers
+          based on the precision. This is to avoid cases of wrongly converting        
+          an int to a short in machines that have a short of 8 bytes but with
+	  32bit precision (e.g Cray SV1). PVN - 2004/09/07 
+        - Changed H5Dread() to not overwrite data in an application's buffer
+          with garbage when accessing a chunked dataset with an undefined fill
+          value and an unwritten chunk is uncountered.  QAK - 2004/08/25
+        - Fixed error which could cause a core dump when a type conversion
+          routine was registered after a compound datatype had been
+          converted and then an equivalent compound datatype was converted
+          again.  QAK - 2004/08/07
+        - Fixed memory overwrite when encoding "multi" file driver information
+          for file's superblock.  QAK - 2004/08/05
+        - Fixed obscure bug where a filter which failed during chunk allocation
+          could allow library to write uncompressed data to disk but think
+          the data was compressed.  QAK - 2004/07/29
+        - Fixed bug where I/O to an extendible chunked dataset with zero-sized
+          dimensions would cause library to fail an assertion.
+          QAK - 2004/07/27
+        - Fixed bug where chunked datasets which have filters defined,
+          allocation time set to "late" and whose chunks don't align with
+          the dataspace bounds could have incorrect data stored when
+          overwriting the entire dataset on the first write.  QAK - 2004/07/27
+        - Added check to ensure that dataspaces have extents set. JML-2004/07/26
+        - Fixed bug on some Solaris systems where HDF5 would try to use
+          gettimeofday() when that function didn't work properly.
+          JML - 2004/07/23
+        - Fixed bug in H5Sset_extent_simple where setting maximum size to
+          non-zero, then to zero would cause an error.  JML - 2004/07/20
+        - Allow NULL pointer for buffer parameter to H5Dread & H5Dwrite
+          when not writing data ("none" selection or hyperslab or point
+          selection with no elements defined).  QAK - 2004/07/20
+        - Calling H5Gcreate() on "/" or "." throws an error instead of
+          failing quietly. JML - 2004/07/19
+        - Fixed bug where setting file address size to be very small could
+          trigger an assert if the file grew to more than 64 KB.  Now throws
+          an error and data can be recovered. JL/NF - 2004/07/14
+        - Fixed bug where "resurrecting" a dataset was failing.
+          QAK - 2004/07/14
+        - Fixed bug where incorrect data could be read from a chunked dataset
+          after it was extended.  QAK - 2004/07/12
+        - After compound datatype with variable-length string in the fields
+          is committed to file, the size is messed up when it's read back.
+          Fixed.  SLU - 2004/06/11
+        - Fixed potential file corruption bug when a block of metadata could
+          overlap the end of the internal metadata accumulator buffer and
+          the buffer would be extended correctly, but would incorrectly 
+          change it's starting address.  QAK - 2004/06/09
+        - Opaque datatype with no tag failed for some operations.  Fixed.
+          SLU - 2004/6/3
+        - Fixed potential file corruption bug where dimensions that were
+          too large (a value greater than could be represented in 32-bits)
+          could cause the incorrect amount of space to be allocated in a
+          file for the raw data for the dataset.  QAK - 2004/06/01
+	- Fixed dtypes "sw long double -> double" failure in QSC class
+	  machines.  AKC - 2004/4/16
+
+    Configuration
+    -------------
+        - Fixed the long compile time of H5detect.c when v7.x Intel Compiler
+	  is used with optimization NOT off.  AKC - 2004/05/20
+
+    Performance
+    -------------
+
+    Tools
+    -----
+        - On SGI h5dump displayed only part of the data due to the bug
+          in the system printf; fixed.
+                                             EIP - 2004/09/21 
+    Documentation 
+    ------------- 
+        - Several descriptive errors have been fixed throughout the 
+          documentation, particularly in the reference manual (RM).
+          A selection particularly worthy of note would be these: 
+        - The H5Pset_szip description in the RM has been expanded and
+          corrected to facilitate use of SZIP compression.
+        - A note has been added to the H5Dcreate description that an
+          unexplained failure is likely to be due to a property list error 
+          that is detected only at the time of dataset creation.
+        -
+        FMB - 2004/09/21
+
+    F90 API
+    -------
+    
+    Fortran functions h5dwrite/read_f and h5awrite/read_f do not
+    accept dims parameter of INTEGER type anymore. Code was removed.
+                                                    2004/04/15
+    C++ API
+    -------
+	- H5::Exception's and its subclasses' constructors that were 
+	  overloaded to take char pointers are removed and constructors
+	  that passed in reference of 'string' are changed to pass 
+	  by value.  In addition, the default value of the data member
+	  H5::Exception::detailMessage is changed from 0/NULL to 
+	  DEFAULT_MSG ("No detailed information provided".)
+	- Prototype for DSetCreatPropList::setLayout is changed: 1st parameter
+          is removed because it was there only by mistake.
+	BMR 2004/08/04
+
+Documentation
+=============
+    HDF5 Library documentation
+    --------------------------
+        - HDF5 C++ API Reference Manual
+          This document has been added to the HDF5 document set.  
+          The predecessor document, "HDF5 C++ Interfaces," has been removed.
+        - HDF5 C++ API Design Specification
+          A first draft of this document has been added to the HDF5 document 
+          set.  The draft has been posted on the HDF5 website and a link 
+          has been added to the HDF5 documents index (index.html at the top 
+          level of the document set).
+        - Parallel HDF5
+          In prior releases, the HDF5 document set included two parallel
+          HDF5 documents.  Those documents have been deleted and the 
+          HDF5 documents index (index.html) now links to a "Parallel HDF5" 
+          page on the HDF5 website (http://hdf.ncsa.uiuc.edu/HDF5/PHDF5/).
+        - HDF5 High Level APIs
+          Links to the HDF5 High Level APIs and to the HDF5 High Level 
+          Reference Manual have been added to the HDF5 documents index
+          (index.html).
+        - HDF5 Reference Manual
+          Tools: h5repack -- A description of the new h5repack tool has been 
+              added to the Tools page.
+          Tools: h5dump -- Several new options have been added to h5dump.
+          New functions -- All new functions have been added to the RM.
+          API changes -- Relevant function descriptions have been updated in
+              instances where programming interfaces have changed. 
+        FMB - 2004/09/21
+
+    Windows installation documentation
+    ----------------------------------
+        -  INSTALL_Windows.txt has been enhanced to include instructions building 
+           HDF5 with FORTRAN and C++. 
+        -  Two optional installation documents have been added. They are
+           INSTALL_Windows_Short.txt and INSTALL_Windows_From_Command_Line.txt.
+           INSTALL_Windows_Short.txt is supposed to help general users who
+           only want to build,test and install HDF5 in a quick way.
+           INSTALL_Windows_From_Command_Line.txt is supposed to help users who
+           would like to compile,test and install HDF5 in command line environment.
+        -  INSTALL_Windows_withcpp.txt and INSTALL_Windows_withF90.txt became
+           obsolete. Files are deleted from the release_docs directory.
+        KY 2004/09/16, EIP 2004/9/21
+        
+
+
+Platforms Tested
+================
+
+    AIX 5.1  (32 and 64-bit)      xlc 6.0.0.6
+                                  xlf 8.1.1.3
+    				  xlC 6.0.0.6
+				  mpcc_r 6.0.0.6
+                                  mpxlf_r 8.1.1.3
+				  xlc 5.0.2.5
+				  xlf 7.1.1.2
+				  xlC 5.0.2.5
+				  mpcc_r 5.0.2.5
+				  mpxlf_r 7.1.1.2
+    AIX 5.2                       xlc 6.0.0.8
+                                  xlC 6.0.0.8
+                                  xlf 8.1.1.6
+                                  mpcc_r 6.0.0.8
+                                  mpxlf_r 8.1.1.6
+    Cray T90 sn7001 10.0.0md      Cray Standard C Version 6.4.0.3
+                                  Cray Fortran Version 3.4.0.0
+    Cray T3E sn6606 2.0.6.08      Cray Standard C Version 6.6.0.3
+                                  Cray Fortran Version 3.6.0.3
+    Cray SV1 sn9617 10.0.1.2      Cray Standard C Version 6.6.0.3.6
+                                  Cray Fortran Version 3.6.0.3.1
+    FreeBSD 4.9                   gcc 2.95.4
+                                  g++ 2.95.4
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP ANSI C++ B3910B A.03.13
+                                  MPIch 1.2.4
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+                                  C++ MIPSpro cc 7.3.1.3m
+				  mpt 1.6
+    Linux 2.4.18                  gcc 2.96, 3.3.2
+                                  g++ 3.3.2
+                                  Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Compiler Version 7.1
+                                  PGI compilers (pgcc, pgf90, pgCC) version 5.0-2
+                                  MPIch 1.2.4
+                                  Absoft Fortran compiler v9.0
+    Linux 2.4.20-8                gcc 3.3.2
+                                  PGI compilers (pgcc, pgf90, pgCC) version 5.0-2
+                                  MPIch 1.2.4
+    Linux 2.4.21-2.9.5ws #3       gcc 3.2.3 (Red Hat Linux 3.2.3-16)
+          SMP x86_64              g++ 3.2.3
+    Linux 2.4.21-4.ELsmp	  Intel(R) C++ 32-bit Version 8.0
+    				  Intel(R) Fortran 32-bit Version 8.0
+				  gcc 3.4.0
+				  MPICH 1..5.2 Inmel 8.0
+    Linux 2.4.19-SMP  x86_64      gcc (GCC) 3.2.2 (SuSE Linux)
+                                  g++ 3.2.2
+    Linux 2.6.4-52smp x86_64      gcc 3.3.3 (SuSE Linux 9.1 AMD64))
+                                  PGI 5.2-1 C and F90 
+
+    Linux 2.4.21-sgi Altix 
+          SMP ia64                Intel(R) C++ Version 8.0
+                                  Intel(R) Fortran Itanium(R) Version 8.0
+                                  SGI MPI
+    OSF1 V5.1                     Compaq C V6.5-303 
+                                  HP Fortran V5.5A-3548
+				  Compaq C++ V6.5-040  
+				  MPI_64bit_R13
+    SunOS 5.7(32 and 64 bit)      WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                WorkShop Compilers 5.0 98/12/15 C++ 5.0 
+                                  WorkShop Compilers 5.0 98/10/25 
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8(32 and 64 bit)      Sun WorkShop 6 update 2 C 5.3
+     (Solaris 2.8)                Sun WorkShop 6 update 2 Fortran 90
+                                  Sun WorkShop 6 update 2 C++ 5.3
+    TFLOPS r1.0.4 v4.4.3 i386     pgcc Rel 3.1-4i with mpich-1.2.4 with
+                                          local modifications
+    IA-32 Linux 2.4.18            gcc 2.96
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+
+    Xeon Linux 2.4.20-31.9smp_perfctr_lustre
+	                          Intel(R) C++ Version 8.0
+                                  Intel(R) Fortran Compiler Version 8.0
+                                  
+    IA-64 Linux 2.4.16 ia64       gcc version 3.0.4
+                                  Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Compiler Version 7.1
+
+    IA-64 Linux 2.4.21.SuSE_128.bef1 ia64
+                                  Intel(R) C++ Version 8.0
+                                  Intel(R) Fortran Compiler Version 8.0
+				  mpich-gm-1.2.5..intel
+
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+                                  MSVC++ .NET
+                                  DEC Visual Fortran 6.0
+                                  Intel C and F90 compilers version 7.1
+				  Code Warrior 8.0
+    Windows XP                    MSVC++.NET
+                                  MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+
+    MAC OS X                      Darwin 7.5
+                                  gcc and g++ Apple Computer, Inc. GCC 
+                                  version 1175, based on gcc version 3.3.2
+                                  IBM XL Fortran version 8.1 
+                                  Absoft Fortran compiler v8.2
+                                  
+
+
+Supported Configuration Features Summary
+========================================
+
+Key:   y = tested and supported
+       n = not supported or not tested in this release
+       x = not working in this release
+       dna = does not apply
+       ( ) = footnote appears below second table
+
+Platform                             C        F90    F90      C++  zlib  SZIP
+                                     parallel        parallel      
+Solaris2.7 64-bit                    y (1)    y      y (1)    y    y     y
+Solaris2.7 32-bit                    y (1)    y      y (1)    y    y     y
+Solaris2.8 64-bit                    y (1)    y      y (1)    y    y     y
+Solaris2.8 32-bit                    y        y      y (1)    y    y     y
+IRIX64_6.5 64-bit                    y (2)    y      y        y    y     y
+IRIX64_6.5 32-bit                    y (2)    n      n        n    y     y
+HPUX11.00                            y (1)    y      y        y    y     y
+OSF1 v5.1                            y        y      y        y    y     y
+T90 IEEE                             n        y      n        n    y     n
+T3E                                  y (5)    y      y (5)    n    y     n
+SV1                                  y (5)    y      y (5)    n    y     n
+TFLOPS                               y (1)    n      n        n    y     n
+AIX-5.1 & 5.2 32-bit                 y        y      y        y    y     y
+AIX-5.1 & 5.2 64-bit                 y        y      y        y    y     y
+WinXP Visual Studio 6.0              n        y (9)  n        y    y     y
+WinXP .Net                           n        n      n        y    y     y
+WinXP Code Warrior                   n        n      n        n    y     y
+Win2000 Visual Studio 6.0            n        y (10) n        y    y     y
+Win2000 Visual Studio Intel (6)      n        y      n        y    y     y
+Win2000 .Net                         n        n      n        y    y     y
+Mac OS X 10.3                        n        y (11) n        y    y     y
+FreeBSD 4.9                          y (1)    n      n        y    y     y
+RedHat 7   W        (3)              y (1)    y (12) n        y    y     y
+RedHat 7.3  W Intel (3)              n        y      n        y    y     y
+RedHat 7.3  W PGI   (3)              n        y      n        y    y     y
+RedHat 8 & SuSe x86_64 gcc     (3)   n        y (13) n        y    y     y
+Linux 2.4 Xeon C Lustre Intel (3,7)  n        y      n        y    y     y
+Linux 2.4 SuSE ia64 C   Intel (3,8)  y        y      y        y    y     y
+Linux 2.4 SGI Altix ia64 Intel (3)   y        y      y        y    y     y
+
+
+Platform                             Shared         static-  Thread-  STREAM- 
+                                     libraries (4)  exec     safe     VFD    
+Solaris2.7 64-bit                    y              x        y        y
+Solaris2.7 32-bit                    y              x        y        y
+Solaris2.8 64-bit                    y              x        y        y
+Solaris2.8 32-bit                    y              x        y        y
+IRIX64_6.5 64-bit                    y              y        y        y
+IRIX64_6.5 32-bit                    y              y        y        y
+HPUX11.00                            y              x        n        y
+OSF1 v5.1                            y              y        n        y
+T90 IEEE                             n              y        n        y
+T3E                                  n              y        n        y
+SV1                                  n              y        n        y
+TFLOPS                               n              y        n        n
+AIX-5.1 & 5.2 32-bit                 n              y        n        y
+AIX-5.1 & 5.2 64-bit                 n              y        n        y
+WinXP Visual Studio 6.0              y              y        n        n
+WinXP .Net                           y              y        n        n
+WinXP Code Warrior                   n              y        n        n
+Win2000 Visual Studio 6.0            y              y        n        n
+Win2000 Visual Studio Intel (6)      y              y        n        n
+Win2000 .Net                         y              y        n        n
+Mac OS X 10.3                        y              y        n        y
+FreeBSD 4.9                          y              y        y        y
+RedHat 7    W       (3)              y              y        y        y
+RedHat 7.3  W Intel (3)              n              y        n        y
+RedHat 7.3  W PGI   (3)              n              y        n        y
+RedHat 8 & SuSe x86_64 gcc     (3)   n              y        n        y
+Linux 2.4 Xeon C Lustre Intel (3,7)  y              y        n        y
+Linux 2.4 SuSE ia64 C Intel   (3,8)  y              y        n        n
+Linux 2.4 SGI Altix ia64 Intel (3)   y              y        n        y
+
+
+
+Compiler versions for each platform are listed in the "Platforms Tested" 
+table found elsewhere in this file (RELEASE.txt).  Unless otherwise noted, 
+compilers used are the system compilers.
+
+Footnotes:  (1) Using mpich 1.2.4
+            (2) Using mpt and mpich 1.2.4
+            (3) Linux 2.4 with GNU, Intel, and PGI compilers, as indicated  
+                W or C indicates workstation or cluster, respectively
+            (4) Shared libraries are provided only for the C library, 
+                except on Windows where they are provided for C and C++
+            (5) Using mpt
+            (6) Intel 7.1 compilers in Visual Studio 6.0 environment
+            (7) Linux 2.4.20-31.9.  Xeon cluster with smp_perfctr_lustre 
+                and Intel compilers
+            (8) Linux 2.4.21, SuSE_128.befl.  Ia64 cluster with Intel compilers
+            (9) DEC Visual Fortran 6.0 and Intel 7.1
+            (10) DEC Visual Fortran 6.0
+            (11) IBM XLF and Absoft
+            (12) PGI, Absoft
+            (13) PGI
+       FMB/EIP - 2004/09/21
+
+
+
+Known Problems
+==============
+* h5fc and h5c++ compilation scripts have a bug: object files (*.o) cannot be
+  created when source code is compiled using h5fc or h5c++. We will provide
+  a fix. Please check ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/src/patches/ 
+  for the patches.
+
+* Fortran subroutine h5pget_driver_f doesn't return a correct driver information.
+
+* There are two h5dump xml tests(h5dump --xml thlink.h5 and h5dump --xml tmany.h5)
+  failed on windows xp with .NET for debug and debug dll. Release and Release
+  dll work fine. 
+
+* The h5dump tests may fail to match the expected output on some platforms
+  (e.g. parallel jobs, Windows) where the error messages directed to
+  "stderr" do not appear in the "right order" with output from stdout.
+  This is not an error.
+
+* The stream-vfd test uses ip port 10007 for testing. If another
+  application is already using that port address, the test will hang
+  indefinitely and has to be terminated by the kill command. To try the
+  test again, change the port address in test/stream_test.c to one not
+  being used in the host.
+
+* The --enable-static-exec configure flag fails to compile for Solaris
+  platforms. This is due to the fact that not all of the system
+  libraries on Solaris are available in a static format.
+
+  The --enable-static-exec configure flag also fails to correctly compile
+  on IBM SP2 platform for the serial mode. The parallel mode works fine
+  with this option.
+  
+  It is suggested that you don't use this option on these platforms
+  during configuration.
+
+* The Stream VFD was not tested yet under Windows. It is not supported
+  in the TFLOPS machine.
+
+* The ./dsets tests failed in the TFLOPS machine if the test program,
+  dsets.c, is compiled with the -O option.  The hdf5 library still works
+  correctly with the -O option.  The test program works fine if it is
+  compiled with -O1 or -O0.  Only -O (same as -O2) causes the test
+  program to fail.
+
+* Certain platforms give false negatives when testing h5ls:
+    - Cray J90 and Cray T90IEEE give errors during testing when displaying
+      some floating-point values. These are benign differences due to
+      the different precision in the values displayed and h5ls appears to
+      be dumping floating-point numbers correctly.
+
+* Before building HDF5 F90 Library from source on Crays 
+  replace H5Aff.f90, H5Dff.f90 and H5Pff.f90 files in the fortran/src
+  subdirectory in the top level directory with the Cray-specific files
+  from the site:
+  ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/src/patches/
+
+* On some platforms that use Intel and Absoft compilers to build HDF5 fortran library,
+  compilation may fail for fortranlib_test.f90, fflush1.f90 and fflush2.f90
+  complaining about exit subroutine. Comment out the line 
+  IF (total_error .ne. 0) CALL exit (total_error)
+
+* On IA32 and IA64 systems, if you use a compiler other than GCC (such as
+  Intel's ecc or icc compilers), you will need to modify the generated
+  "libtool" program after configuration is finished. On or around line 104 of
+  the libtool file, there are lines which look like:
+
+      # How to pass a linker flag through the compiler.
+      wl=""
+
+  change these lines to this:
+
+      # How to pass a linker flag through the compiler.
+      wl="-Wl,"
+
+  UPDATE: This is now done automatically by the configure script. However, if
+  you still experience a problem, you may want to check this line in the
+  libtool file and make sure that it has the correct value.
+
+* Information about building with PGI and Intel compilers is available in
+  INSTALL file sections 5.7 and 5.8
+
+* In LANL QSC, the new cc compiler has problems converting small values of
+  long long (absolute values less than 1**-308) to double.  This triggers
+  the test/dtypes to report failure in the
+      Testing random sw long double -> double conversions
+  If -ieee is used, the converted doubles spread over the range 0.0 to 1**-308.
+  If -ieee is not used, the converted double values are mostly 0.0 but
+  occasionally as 1**-308.  This has been reported to the system staff.
+  All other tests have passed.
+
+* On at least one system, (SDSC DataStar), the scheduler (in this case
+  LoadLeveler) sends job status updates to standard error when you run
+  any executable that was compiled with the parallel compilers.
+
+  This causes problems when running "make check" on parallel builds, as
+  many of the tool tests function by saving the output from test runs,
+  and comparing it to an exemplar.
+
+  The best solution is to reconfigure the target system so it no longer
+  inserts the extra text.  However, this may not be practical.
+
+  In such cases, one solution is to "setenv HDF5_Make_Ignore yes" prior to
+  the configure and build.  This will cause "make check" to continue after
+  detecting errors in the tool tests.  However, in the case of SDSC DataStar,
+  it also leaves you with some 150 "failed" tests to examine by hand.
+
+  A second solution is to write a script to run serial tests and filter
+  out the text added by the scheduler.  A sample script used on SDSC
+  DataStar is given below, but you will probably have to customize it
+  for your installation.
+
+  Observe that the basic idea is to insert the script as the first item
+  on the command line which executes the test.  The script then
+  executes the test and filters out the offending text before passing
+  it on.
+
+        #!/bin/csh
+
+        set STDOUT_FILE=~/bin/serial_filter.stdout
+        set STDERR_FILE=~/bin/serial_filter.stderr
+
+        rm -f $STDOUT_FILE $STDERR_FILE
+
+        ($* > $STDOUT_FILE) >& $STDERR_FILE
+
+        set RETURN_VALUE=$status
+
+        cat $STDOUT_FILE
+
+        tail +3 $STDERR_FILE
+
+        exit $RETURN_VALUE
+
+  You get the HDF make files and test scripts to execute your filter script
+  by setting the environment variable "RUNSERIAL" to the full path of the
+  script prior to running configure for parallel builds.  Remember to
+  "unsetenv RUNSERIAL" before running configure for a serial build.
+
+  Note that the RUNSERIAL environment variable exists so that we can
+  can prefix serial runs as necessary on the target system.  On DataStar,
+  no prefix is necessary.  However on an MPICH system, the prefix might
+  have to be set to something like "/usr/local/mpi/bin/mpirun -np 1" to
+  get the serial tests to run at all.
+
+  In such cases, you will have to include the regular prefix in your
+  filter script.
+
+%%%%1.6.2%%%%   Release Information for hdf5-1.6.2 (12/February/04)
+
+HDF5 version 1.6.2 released on Thu Feb 12 14:18:13 CST 2004
+================================================================================
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.6.1 and
+HDF5-1.6.2, and contains information on the platforms tested and
+known problems in HDF5-1.6.2. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+CONTENTS
+
+- New Features
+- Support for new platforms and languages
+- Bug Fixes since HDF5-1.6.1
+- Documentation
+- Platforms Tested
+- Supported Configuration Features Summary
+- Known Problems
+
+
+New Features
+============
+
+    Configuration:
+    --------------
+        - Default of $prefix is changed to $PWD/hdf5 so that multiple
+	  builds using --srcdir is possible in the same machine.
+	  AKC - 2003/12/1
+
+    Library:
+    --------
+        - Added H5Iget_ref, H5Iinc_ref and H5Idec_ref routines to the C
+          library and the FORTRAN wrapper.  See the reference manual for a
+          full description of these new routines.  QAK - 2003/12/11
+
+    Parallel Library:
+    -----------------
+	- The parallel tests in testpar/ now provides different levels of
+	  verbosity via the '-v' option.  The default is less verbose
+	  than before.  AKC - 2004/01/23
+        - Added parallel test, test_mpio_1wMr, which tests if the
+          underlaying parallel I/O system is conforming to the POSIX
+          write/read requirement. This version includes options of using
+          atomicity and file-sync.  AKC - 2003/11/27
+
+    Tools:
+    ------
+        - Added option -showconfig to compiler tools (h5cc,h5fc,h5c++).
+	  AKC - 2004/01/08
+	- Install the "h5cc" and "h5fc" tools as "h5pcc" and "h5pfc"
+	  respectively if library is built in parallel mode.  AKC - 2004/01/07
+        - Added metadata benchmark (perform/perf_meta).  SLU - 2003/10/03
+
+    C++ API:
+    --------
+
+
+Support for new platforms, languages and compilers.
+=======================================
+        - HDF5 Fortran APIs are supported on MAC OSX with IBM XL Fortran compiler
+          version 8.1 Beta  
+          Use --disbale-shared --enable-static flags with configure when 
+          building HDF5 Fortran Library on MAC OSX.
+        - C and C++ Libraries are available for Linux64 RH8
+        - C, C++ and Fortran sequential Libraries, and C and Fortran parallel
+          Libraries are available for Altix (Linux ia64)
+
+Bug Fixes since HDF5-1.6.1 release
+==================================
+
+    Library
+    -------
+        - Fixed problem with H5Tget_native_type() not handling opaque fields
+            correctly.  QAK - 2004/01/31
+        - Fixed several errors in B-tree deletion code which could cause a
+            B-tree (used with groups and chunked datasets) to become corrupt
+            with the right sequence of deleted objects.  QAK - 2004/01/19
+        - Fixed small internal memory leaks of fill-value information.
+            QAK - 2004/01/13
+        - Fixed bug that caused variable-length datatypes (strings or sequences)
+            used for datasets in files with objects that were unlinked to
+            fail to be read/written to a file.  QAK - 2004/01/13
+        - Detect situation where szip 'pixels per block' is larger than the
+            fastest changing dimension of a dataset's chunk size and disallow
+            this (due to limits in szip library).  QAK - 2003/12/31
+        - Fixed bug with flattened hyperslab selections that would generate
+            incorrect hyperslab information with certain high-dimensionality
+            combinations of start/stride/count/block information.
+            QAK - 2003/12/31
+        - Fixed bug with variable-length datatypes used in compound datatypes.
+            SLU - 2003/12/29
+        - Fixed bug in parallel I/O routines that would cause reads from
+            "short datasets" (datasets which were only partially written out)
+            to return invalid data.  QAK & AKC - 2003/12/19
+        - Fixed bug where scalar dataspaces for attributes were reporting as
+            simple dataspaces.  QAK - 2003/12/13
+        - Fixed problem with selection offsets of hyperslab selections in
+            chunked datasets causing the library to go into an infinite loop.
+            QAK - 2003/12/13
+        - Fixed H5Giterate to avoid re-using index parameter after iteration
+            callback has been called (allows iteration callback to modify the
+            index parameter itself).  QAK - 2003/12/06
+        - Fixed various floating-point conversion problems, including a
+            change which could corrupt data when converting from double->float.
+            QAK - 2003/11/24
+        - Changed "single process" metadata writing in library to collective
+            I/O by all processes, in order to guarantee correct data being
+            written with MPI-I/O.  QAK - 2003/11/20
+        - Fixed problems with fill values and variable-length types and also
+            I/O on VL values that were set to NULL.  QAK - 2003/11/08
+        - Fixed problems with MPI datatypes that caused ASCI Q machine to
+            hang.  QAK - 2003/10/28
+        - Removed HDF5_MPI_PREFER_DERIVED_TYPES environment variable support,
+            since it had no benefit.  QAK - 2003/10/28
+        - Single hyperslab selections (which were set with only one call to
+            H5Sselect_hyperslab) that had dimensions that could be "flattened"
+            but were interspersed with dimensions that could not be flattened
+            were not correctly handled, causing core dumps.  QAK - 2003/10/25
+        - Avoid metadata cache from preempting current dataset object header
+            when looking up information about the named datatype that the
+            dataset uses.  QAK - 2003/10/20
+
+    Configuration
+    -------------
+        - Parallel I/O with the MPI-I/O driver will no longer work if the
+            filesystem is not POSIX compliant.  The "HDF5_MPI_1_METAWRITE"
+            environment variable has been removed.  QAK - 2004/01/30
+
+    Performance
+    -------------
+        - More optimizations to inner loops of datatype conversions for
+            integers and floats which give a 10-50% speedup.  QAK - 2003/11/07
+        - Hoisted invariant 'if/else's out of inner datatype conversion loop for
+            integer and floating-point values, giving about a 20% speedup.
+            QAK - 2003/10/20
+
+    Tools
+    -----
+	- Fixed h5redeploy which sometimes complain too many argument for the
+	  test command. (The complain did not hinder the h5redploy to proceed
+	  correctly.) AKC - 2003/11/03
+
+    Documentation 
+    ------------- 
+
+
+Documentation
+=============
+
+
+
+Platforms Tested
+================
+
+    AIX 5.1  (32 and 64-bit)      xlc 6.0.0.2
+                                  xlf 8.1.0.3
+    				  xlC 6.0.0.4
+				  xlc 5.0.2.5
+				  xlf 7.1.1.2
+				  xlC 5.0.2.5
+				  mpcc_r 5.0.2.5
+				  mpxlf_r 7.1.1.2
+                                  poe 3.2.0.10
+    Cray T3E sn6606 2.0.6.08      Cray Standard C Version 6.6.0.2
+                                  Cray Fortran Version 3.6.0.2
+    Cray SV1 sn9617 10.0.1.2      Cray Standard C Version 6.6.0.2
+                                  Cray Fortran Version 3.6.0.2
+    Cray T90IEEE 10.0.0md         Cray Standard C Version 6.4.0.3
+                                  Cray Fortran Version 3.4.0.0
+    FreeBSD 4.9                   gcc 2.95.4
+                                  g++ 2.95.4
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP ANSI C++ B3910B A.03.13
+                                  MPIch 1.2.4
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+                                  C++ MIPSpro cc 7.3.1.3m
+    Linux 2.4.18                  gcc 2.96, 3.3.2
+                                  g++ 3.3.2
+                                  Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Compiler Version 7.1
+                                  PGI compilers (pgcc, pgf90, pgCC) version 5.0-2
+                                  MPIch 1.2.4
+    Linux 2.4.20-8                gcc 3.3.2
+                                  PGI compilers (pgcc, pgf90, pgCC) version 5.0-2
+                                  MPIch 1.2.4
+    Linux 2.4.21-2.9.5ws #3       gcc 3.2.3 (Red Hat Linux 3.2.3-16)
+          SMP x86_64              g++ 3.2.3
+    Linux 2.4.19-SMP  x86_64      gcc (GCC) 3.2.2 (SuSE Linux)
+                                  g++ 3.2.2
+
+    Linux 2.4.21-sgi Altix 
+          SMP ia64                Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Itanium(R) Version 7.1
+                                  SGI MPI
+    OSF1 V5.1                     Compaq C V6.4-014
+				  Compaq Fortran V5.5-2602
+				  Compaq Fortran V5.5-1877
+				  Compaq C++ V6.5-033
+				  Compaq C++ V6.5-030
+				  MPI_64bit_R13
+    SunOS 5.7(32 and 64 bit)      WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                WorkShop Compilers 5.0 98/12/15 C++ 5.0 
+                                  WorkShop Compilers 5.0 98/10/25 
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8(32 and 64 bit)      Sun WorkShop 6 update 2 C 5.3
+     (Solaris 2.8)                Sun WorkShop 6 update 2 Fortran 90
+                                  Sun WorkShop 6 update 2 C++ 5.3
+    TFLOPS r1.0.4 v4.4.2 i386     pgcc Rel 3.1-4i with mpich-1.2.4 with
+                                          local modifications
+    IA-32 Linux 2.4.18            gcc 2.96
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+                                  
+    IA-64 Linux 2.4.16 ia64       gcc version 3.0.4
+                                  Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Compiler Version 7.1
+
+    IA-64 Linux 2.4.21.SuSE_128.bef1 ia64
+                                  Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Compiler Version 7.1
+				  mpich-gm-1.2.5..intel
+
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+                                  Intel C and F90 compilers version 7.1
+				  Code Warrior 8.0
+    Windows XP                    MSVC++.NET
+    MAC OS X                      Darwin 7.2
+                                  gcc and g++ Apple Computer, Inc. GCC 
+                                  version 1175, based on gcc version 3.3.2
+                                  IBM XL Fortran version 8.1 Beta
+                                  
+
+
+Supported Configuration Features Summary
+========================================
+
+Key:   y = tested and supported
+       n = not supported or not tested in this release
+       x = not working in this release
+       dna = does not apply
+       ( ) = footnote appears below second table
+
+Platform                    C   C        F90    F90      C++  Shared        zlib
+                                parallel        parallel      libraries (4)
+Solaris2.7 64-bit           y   y (1)    y      y (1)    y    y             y
+Solaris2.7 32-bit           y   y (1)    y      y (1)    y    y             y
+Solaris2.8 64-bit           y   y (1)    y      y (1)    y    y             y
+Solaris2.8 32-bit           y   y        y      y (1)    y    y             y
+IRIX64_6.5 64-bit           y   y (2)    y      y        y    y             y
+IRIX64_6.5 32-bit           y   y (2)    n      n        n    y             y
+HPUX11.00                   y   y (1)    y      y        y    y             y
+OSF1 v5.1                   y   y        y      y        y    y             y
+T3E                         y   y (5)    y      y (5)    n    n             y
+SV1                         y   y (5)    y      y (5)    n    n             y
+T90 IEEE                    y   y (5)    y      y (5)    n    n             y
+TFLOPS                      n   y (1)    n      n        n    n             y
+AIX-5.1 32-bit              y   y        y      y        y    n             y
+AIX-5.1 64-bit              y   y        y      y        y    n             y
+WinXP Visual Studio (7)     y   n        n      n        y    y             y
+WinXP Intel                 y   n        n      n        y    y             y
+WinXP CW                    y   n        n      n        n    n             y
+Win2000 Visual Studio       y   n        y      n        y    y             y
+Win2000 Intel               y   n        y      n        y    y             y
+Mac OS X 10.3               y   n        y      n        y    y             y
+FreeBSD 4.9                 y   y (1)    n      n        y    y             y
+RedHat 7, 8 & 9 ia32        y   y (1)    y(PGI) n        y    y             y
+    W gcc (3)
+RedHat 7.3 ia32 W Intel (3) y   n        y      n        y    n             y
+RedHat 7.3 ia32 W PGI (3)   y   n        y      n        y    n             y
+RedHat 7 ia32 C Intel (3)   y   n        y      n        y    n             y
+RedHat 7.1 ia64 C Intel (3) y   n        y      n        y    n             y
+RedHat 8 & SuSe x86_64      y   n        n      n        y    n             y
+    gcc (3)
+Linux 2.4 SGI Altix ia64    y   n        y      n        y    y             y
+    Intel (3) 
+
+
+Platform                    static-  Thread-  SZIP  GASS  STREAM-  High-  H4/H5 
+                            exec     safe                 VFD      level  tools
+                                                                   APIs   (6)
+Solaris2.7 64-bit           x        y        y     n     y        y      n
+Solaris2.7 32-bit           x        y        y     n     y        y      y
+Solaris2.8 64-bit           x        y        y     n     y        y      n
+Solaris2.8 32-bit           x        y        y     n     y        y      y
+IRIX64_6.5 64-bit           x        y        y     y     y        y      y
+IRIX64_6.5 32-bit           x        y        y     y     y        y      y
+HPUX11.00                   x        n        y     n     y        y      y
+OSF1 v5.1                   y        n        y     n     y        y      y
+T3E                         y        n        n     n     y        y      y
+SV1                         y        n        n     n     y        y      y
+T90 IEEE                    y        n        n     n     y        y      n
+TFLOPS                      y        n        n     n     n        n      n
+AIX-5.1 32-bit              y        n        y     n     y        y      y
+AIX-5.1 64-bit              y        n        y     n     y        y      y
+WinXP Visual Studio         y        n        y     n     n        y      y
+WinXP Intel                 y        n        y     n     n        y      y
+WinXP CW                    y        n        y     n     n        y      y
+Win2000 Visual Studio       y        n        y     n     n        y      y
+Win2000 Intel               y        n        y     n     n        y      y
+Mac OS X 10.3               y        n        y     n     y        y      n
+FreeBSD 4.9                 y        y        y     n     y        y      y
+RedHat 7, 8 & 9 ia32        y        y        y     n     y        y      y
+    W gcc (3)
+RedHat 7.3 ia32 W Intel (3) y        n        y     n     y        n      n
+RedHat 7.3 ia32 W PGI (3)   y        n        y     n     y        n      n
+RedHat 7 ia32 C Intel (3)   y        n        y     n     y        y      y
+RedHat 7.1 ia64 C Intel (3) y        n        y     n     y        y      y
+RedHat 8 & SuSe x86_64      y        n        y     n     y        y      y
+    gcc (3)
+Linux 2.4 SGI Altix ia64    y        n        y     n     y        y      y
+    Intel (3) 
+
+
+Compiler versions for each platform are listed in the "Platforms Tested" 
+table found elsewhere in this file (RELEASE.txt).  Unless otherwise noted, 
+compilers used are the system compilers.
+
+Footnotes:  (1) Using mpich 1.2.4.
+            (2) Using mpt and mpich 1.2.4.
+            (3) Linux 2.4 with GNU, Intel, and PGI compilers, as indicated.  
+                W or C indicates workstation or cluster, respectively.
+            (4) Shared libraries are provided only for the C library, 
+                except on Windows where they are provided for C and C++.
+            (5) Using mpt.
+            (6) Includes the H4toH5 Library and the h4toh5 and h5toh4 
+                utilities.
+
+
+Known Problems
+==============
+* Fortran subroutine h5pget_driver_f doesn't return a correct driver information.
+
+* There are two h5dump xml tests(h5dump --xml thlink.h5 and h5dump --xml tmany.h5)
+  failed on windows xp with .NET for debug and debug dll. Release and Release
+  dll work fine. 
+
+* The h5dump tests may fail to match the expected output on some platforms
+  (e.g. parallel jobs, Windows) where the error messages directed to
+  "stderr" do not appear in the "right order" with output from stdout.
+  This is not an error.
+
+* The stream-vfd test uses ip port 10007 for testing. If another
+  application is already using that port address, the test will hang
+  indefinitely and has to be terminated by the kill command. To try the
+  test again, change the port address in test/stream_test.c to one not
+  being used in the host.
+
+* The --enable-static-exec configure flag fails to compile for Solaris
+  platforms. This is due to the fact that not all of the system
+  libraries on Solaris are available in a static format.
+
+  The --enable-static-exec configure flag also fails to correctly compile
+  on IBM SP2 platform for the serial mode. The parallel mode works fine
+  with this option.
+  
+  It is suggested that you don't use this option on these platforms
+  during configuration.
+
+* The Stream VFD was not tested yet under Windows. It is not supported
+  in the TFLOPS machine.
+
+
+* The ./dsets tests failed in the TFLOPS machine if the test program,
+  dsets.c, is compiled with the -O option.  The hdf5 library still works
+  correctly with the -O option.  The test program works fine if it is
+  compiled with -O1 or -O0.  Only -O (same as -O2) causes the test
+  program to fail.
+
+* Certain platforms give false negatives when testing h5ls:
+    - Cray J90 and Cray T90IEEE give errors during testing when displaying
+      some floating-point values. These are benign differences due to
+      the different precision in the values displayed and h5ls appears to
+      be dumping floating-point numbers correctly.
+
+* Before building HDF5 F90 Library from source on Crays 
+  replace H5Aff.f90, H5Dff.f90 and H5Pff.f90 files in the fortran/src
+  subdirectory in the top level directory with the Cray-specific files
+  from the site:
+  ftp://hdf.ncsa.uiuc.edu/pub/outgoing/hdf5/hdf5-1.6.2/F90_source_for_Crays
+
+* On some platforms that use Intel compilers to build HDF5 fortran library,
+  compilation may fail for fortranlib_test.f90, fflush1.f90 and fflush2.f90
+  complaining about exit subroutine. Comment out the line 
+  IF (total_error .ne. 0) CALL exit (total_error)
+
+* On IA32 and IA64 systems, if you use a compiler other than GCC (such as
+  Intel's ecc or icc compilers), you will need to modify the generated
+  "libtool" program after configuration is finished. On or around line 104 of
+  the libtool file, there are lines which look like:
+
+      # How to pass a linker flag through the compiler.
+      wl=""
+
+  change these lines to this:
+
+      # How to pass a linker flag through the compiler.
+      wl="-Wl,"
+
+  UPDATE: This is now done automatically by the configure script. However, if
+  you still experience a problem, you may want to check this line in the
+  libtool file and make sure that it has the correct value.
+
+* Information about building with PGI and Intel compilers is available in
+  INSTALL file sections 5.7 and 5.8
+
+* In LANL QSC, the new cc compiler has problems converting small values of
+  long long (absolute values less than 1**-308) to double.  This triggers
+  the test/dtypes to report failure in the
+      Testing random sw long double -> double conversions
+  If -ieee is used, the converted doubles spread over the range 0.0 to 1**-308.
+  If -ieee is not used, the converted double values are mostly 0.0 but
+  occassionaly as 1**-308.  This has been reported to the system staff.
+  All other tests have passed.
+
+* On AIX 5.1 when 64-bit parallel C Library is built with zlib configured in,
+  compilation fails for H5Zdeflate.c. To bypass the problem, remove "const"
+  definition in front of H5Z_DEFLATE in H5Zpkg.h line 29.
+
+%%%%1.6.1%%%%   Release Information for hdf5-1.6.1 (16/October/03)
+
+15.  Release information for HDF5 version 1.6.1
+================================================
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.6.0 and
+HDF5-1.6.1, and contains information on the platforms tested and
+known problems in HDF5-1.6.1. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+CONTENTS
+
+- New Features
+- Support for new platforms and languages
+- Bug Fixes since HDF5-1.6.0
+- Documentation
+- Platforms Tested
+- Known Problems
+
+
+New Features
+============
+
+    Configuration:
+    --------------
+
+    Library:
+    --------
+        - Added new fields to the H5G_stat_t for more information about an
+            object's object header.  QAK 2003/10/06
+        - Added new H5Fget_freespace() routine to query the free space in a
+            given file.  QAK 2003/10/06
+
+    Parallel Library:
+    -----------------
+
+    Tools:
+    ------
+
+    C++ API:
+    --------
+        - Added overloaded functions read and write to H5::Attribute.
+          BMR - 2003/04/21
+        - Added an overloaded constructor H5::StrType so the need to separately
+          set the length of the string type can be eliminated. BMR - 2003/04/21
+        - Added overloaded functions read and write to H5::DataSet.
+          BMR - 2003/04/27
+
+        The following items were added but not documented in previous releases:
+
+        - On windows, any application, that uses the C++ API dll, must
+          include the name HDF5CPP_USEDLL in its project setting. (Feb 17, 2002)
+          BMR - 2003/10/10
+        - Added missing default constructor H5::H5File. (Apr 26, 2002)
+          BMR - 2003/10/10
+        - Added new member function H5::DataSet::fillMemBuf per the new C
+          API H5Dfill, which fills the elements in a selection for a memory
+          buffer with a fill value. (May 16, 2002) BMR - 2003/10/10
+        - Added the new member function getMemberIndex to H5::EnumType
+          and H5::CompType to match the new C API H5Tget_member_index.  Given
+          the name of a member of an enumeration or compound datatype, this
+          new function queries the index of the member. (May 16, 2002)
+          BMR - 2003/10/10
+        - Added these member functions to H5::Group per the new C functions
+          H5Gget_num_objs, H5Gget_objname_by_idx and H5Gget_objtype_by_idx:
+          + getNumObjs: Returns the number of objects in the group.
+          + getObjnameByIdx: Retrieves the name of an object in a group,
+                             given an index
+          + getObjTypeByIdx: Returns the type of an object in a group,
+                             given an index
+          (Jan 20, 2003) BMR - 2003/10/10
+
+
+Support for new platforms, languages and compilers.
+=======================================
+         - gcc 3.3.1 is supported on Linux.
+  
+
+Bug Fixes since HDF5-1.6.0 release
+==================================
+
+    Library
+    -------
+        - Fixed incorrect datatype of the third parameter to the Fortran90
+          h5pset(get)_cache_f functions (INTEGER to INTEGER(SIZE_T)) EIP - 2003/10/13
+        - Fixed problems with accessing variable-length data datatypes on
+            Crays.  QAK - 2003/10/10
+        - Fixed potential file corruption bug when too many object header
+            messages (probably attributes, from a user perspective) were
+            inserted into an object header and certain other conditions were
+            met.  QAK - 2003/10/08
+        - Changed implementation of internal ID searching algorithm to avoid
+            O(n) behavior for many common cases.  QAK - 2003/10/06
+        - Allow partial parallel writing to compact datasets.  QAK - 2003/10/06
+        - Correctly create reference to shared datatype in attribute, instead
+            of making a copy of the shared datatype in the attribute.
+            QAK - 2003/10/01
+        - Revert changes which caused files >2GB to fail when created with
+            MPI-I/O file driver on certain platforms.  QAK - 2003/09/16
+        - Allow compound datatypes to grow in size.  SLU - 2003/09/10
+        - Detect if a type is already packed before attempting to pack it
+            again or check if it is locked.  SLU - 2003/09/10
+        - Corrected bug when opening a file twice with read-only permission
+            for one open and then closing the read-only access file ID would
+            generate an error.  QAK - 2003/09/10
+        - Corrected bug in repeated calls to H5Pget_access_plist() which would
+            incorrectly manage reference counts of internal information and
+            eventually blow up.  QAK - 2003/09/02
+        - Return rank of the array datatype on successful call to
+            H5Tget_array_dims().  QAK - 2003/08/30
+        - Corrected bug in H5Tdetect_class which was not correctly detecting
+            datatype classes of fields in nested compound datatypes in some
+            circumstances.  QAK - 2003/08/30
+        - Corrected bug in sieve buffer code which could cause loss of data
+            when a small dataset was created and deleted in quick succession.
+            QAK - 2003/08/27
+        - Corrected bug in H5Gget_objname_by_idx which was not allowing NULL
+            for the name when just querying for the object name's length.
+            QAK - 2003/08/25
+        - Corrected bug in variable-length string handling which could
+            generate a core dump on writing variable-length strings as part
+            of a compound datatype on certain architectures.  QAK - 2003/08/25
+        - Corrected bug in H5Tget_native_type which would incorrectly compute
+            the size of certain compound datatypes and also incorrectly
+            compute the offset of the last field for those compound datatypes.
+            QAK - 2003/08/25
+        - Corrected bug in H5Tget_native_type which would drop string datatype
+            metadata (padding, etc.)  QAK - 2003/08/25
+        - Corrected bugs in H5Gget_num_objs, H5Gget_objname_by_idx and
+            H5Gget_objtype_by_idx to allow them to accept location IDs, not just
+            group IDs.  QAK - 2003/08/21
+        - Corrected bug when using scalar dataspace for memory selection and
+            operating on chunked dataset.  QAK - 2003/08/18
+        - Corrected bugs with multiple '/' characters in names for H5Glink
+            and H5Gunlink.  QAK - 2003/08/16
+        - Corrected bug with user blocks that didn't allow a user block to
+            be inserted in front of a file after the file was created.
+            QAK - 2003/08/13
+        - Corrected errors with using point selections to access data in
+            chunked datasets.  QAK - 2003/07/23
+        - Corrected error with variable-length datatypes and chunked datasets
+            which caused H5Dwrite to fail sometimes.  QAK - 2003/07/19
+        - Modified library and file format to support storing indexed storage
+            (chunked dataset) B-tree's with non-default internal 'K' values.
+            QAK - 2003/07/15
+        - Returned H5T_BKG_TEMP support to library after it was accidentally
+            removed.  QAK - 2003/07/14
+
+    Configuration
+    -------------
+        - Fixed the error that caused "make install" to fail because of the
+            macro definition syntax of "prefix?=..."  AKC - 2003/07/22
+
+    Performance
+    -------------
+
+    Tools
+    -----
+	- Fixed a segmentation fault of h5diff when percentage option is used.
+            AKC - 2003/08/27
+        - Switched away from tools using internal "fixtype" function(s) to use
+            H5Tget_native_type() internally.  QAK - 2003/08/25
+
+    Documentation 
+    ------------- 
+        - Added two missing Fortran APIs (h5pget_fapl_mpiposix_f and 
+            h5pset_fapl_mpiposix_f) to the reference manual.
+            FMB - 2003/10/15
+        - Corrected the reference manual descriptions of H5open/h5open_f and 
+            H5close/h5close_f to indicate that these calls are required in 
+            Fortran90 applications.   FMB - 2003/10/15
+
+
+Documentation
+=============
+
+    Fortran90 APIs are being integrated into the main body of the 
+    HDF5 Reference Manual (RM).  This process is complete in all RM sections
+    except H5P.
+
+    A PDF version of the RM will be posted on the HDF5 website
+    (at http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/) approximately one week
+    after the release.
+
+
+Platforms Tested
+================
+
+    AIX 5.1  (32 and 64-bit)      xlc 6.0.0.2
+                                  xlf 8.1.0.3
+    				  xlC 6.0.0.4
+				  xlc 5.0.2.5
+				  xlf 7.1.1.2
+				  xlC 5.0.2.5
+				  mpcc_r 5.0.2.5
+				  mpxlf_r 7.1.1.2
+                                  poe 3.2.0.10
+    Cray T3E sn6606 2.0.6.08      Cray Standard C Version 6.6.0.2
+                                  Cray Fortran Version 3.6.0.2
+    Cray SV1 sn9617 10.0.1.2      Cray Standard C Version 6.6.0.2
+                                  Cray Fortran Version 3.6.0.2
+    Cray T90IEEE 10.0.1.01y       Cray Standard C Version 6.4.0.2.3
+                                  Cray Fortran Version 3.4.0.3
+    FreeBSD 4.9                   gcc 2.95.4
+                                  g++ 2.95.4
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP ANSI C++ B3910B A.03.13
+                                  HP MPI 01.07.00.00
+    IRIX 6.5                      MIPSpro cc 7.3.1.2m
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+                                  MPIch 1.2.4
+    Linux 2.4.18                  gcc 2.96, 3.2.2, 3.3.1
+                                  g++ 3.2.2, 3.2.3
+                                  Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Compiler Version 7.1
+                                  PGI compilers (pgcc, pgf90, pgCC) version 4.0-2
+                                  MPIch 1.2.4
+    Linux 2.4.20-8                gcc 3.2.2
+    OSF1 V5.1                     Compaq C V6.4-014
+                                  Compaq C V6.3-027
+				  Compaq Fortran V5.5-2602
+				  Compaq C++ V6.5-030
+				  MPI_64bit_R5
+                                  g++ version 3.0 for C++
+    SunOS 5.7(32 and 64 bit)      WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                WorkShop Compilers 5.0 98/12/15 C++ 5.0 
+                                  WorkShop Compilers 5.0 98/10/25 
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8(32 and 64 bit)      Sun WorkShop 6 update 2 C 5.3
+     (Solaris 2.8)                Sun WorkShop 6 update 2 Fortran 90
+                                  Sun WorkShop 6 update 2 C++ 5.3
+    TFLOPS r1.0.4 v4.4.0 i386     pgcc Rel 3.1-4i with mpich-1.2.4 with
+                                          local modifications
+    IA-32 Linux 2.4.9             gcc 2.96
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+                                  
+    IA-64 Linux 2.4.16 ia64       gcc version 2.96 20000731
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+                                  Intel C and F90 compilers version 7.1
+				  Code Warrior 8.0
+    Windows XP                    MSVC++.NET
+    MAC OS X                      Darwin 6.8
+                                  gcc and g++ Apple Computer, Inc. GCC 
+                                  version 1175, based on gcc version 3.1
+                                  
+
+
+Supported Configuration Features Summary
+========================================
+
+    In the tables below
+          y   = tested and supported
+          n   = not supported or not tested in this release
+          x   = not working in this release
+          dna = does not apply
+          ( ) = footnote appears below second table
+
+Platform              C   C         F90      F90       C++  Shared        zlib
+                          parallel           parallel       libraries (4)
+Solaris2.7 64-bit     y   y (1)     y        y (1)     y    y             y
+Solaris2.7 32-bit     y   y (1)     y        y (1)     y    y             y
+Solaris2.8 64-bit     y   y (1)     y        y (1)     y    y             y
+Solaris2.8 32-bit     y   y         y        y (1)     y    y             y
+IRIX6.5               y   y (1)     n        n         n    y             y 
+IRIX64_6.5 64-bit     y   y (2)     y        y         y    y             y
+IRIX64_6.5 32-bit     y   y (2)     n        n         n    y             y
+HPUX11.00             y   y (1)     y        y         y    y             y
+OSF1 v5.1             y   y         y        y         y    y             y
+T3E                   y   y (5)     y        y (5)     n    n             y
+SV1                   y   y (5)     y        y (5)     n    n             y
+T90 IEEE              y   y (5)     y        y (5)     n    n             y
+TFLOPS                n   y (1)     n        n         n    n             y
+AIX-5.1 32-bit        y   y         y        y         y    n             y
+AIX-5.1 64-bit        y   y         y        y         y    n             y
+WinXP           (6)   y   n         n        n         y    y             y
+WinXP Intel           y   n         n        n         y    y             y
+Win2000               y   n         y        n         y    y             y
+Win2000 Intel         y   n         y        n         y    y             y
+WinNT CW              y   n         n        n         n    n             y
+Mac OS X 10.2         y   n         n        n         y    y             y
+FreeBSD               y   y (1)     n        n         y    y             y
+Linux 2.4 gcc   (3)   y   y (1)     y (PGI)  n         y    y             y
+Linux 2.4 Intel (3)   y   n         y        n         y    n             y
+Linux 2.4 PGI   (3)   y   n         y        n         y    n             y
+Linux 2.4 IA32 Intel  y   n         y        n         y    n             y
+Linux 2.4 IA64 Intel  y   n         y        n         y    n             y
+
+
+ASCII Table 2 -- for RELEASE.txt
+
+Platform              static- Thread- SZIP GASS STREAM-  High-level  H4/H5 
+                      exec    safe              VFD      APIs        tools (7)
+Solaris2.7 64-bit     x       y       y    n    y        y           n
+Solaris2.7 32-bit     x       y       y    n    y        y           y
+Solaris2.8 64-bit     x       y       y    n    y        y           n
+Solaris2.8 32-bit     x       y       y    n    y        y           y
+IRIX6.5               x       n       y    n    y        y           y
+IRIX64_6.5 64-bit     x       y       y    y    y        y           y
+IRIX64_6.5 32-bit     x       y       y    y    y        y           y
+HPUX11.00             x       n       y    n    y        y           y
+OSF1 v5.1             y       n       y    n    y        y           y
+T3E                   y       n       n    n    y        y           y
+SV1                   y       n       n    n    y        y           y
+T90 IEEE              y       n       n    n    y        y           n
+TFLOPS                y       n       n    n    n        n           n
+AIX-5.1 32-bit        y       n       y    n    y        y           y
+AIX-5.1 64-bit        y       n       y    n    y        y           y
+WinXP           (6)   y       n       y    n    n        y           y
+WinXP Intel           y       n       y    n    n        y           y
+Win2000               y       n       y    n    n        y           y
+Win2000 Intel         y       n       y    n    n        y           y
+WinNT CW              y       n       y    n    n        y           y
+Mac OS X 10.2         y       n       y    n    y        y           n
+FreeBSD               y       y       y    n    y        y           y
+Linux 2.4 gcc   (3)   y       y       y    n    y        y           y
+Linux 2.4 Intel (3)   y       n       y    n    y        n           n
+Linux 2.4 PGI   (3)   y       n       y    n    y        n           n
+Linux 2.4 IA32 Intel  y       n       y    n    y        y           y
+Linux 2.4 IA64 Intel  y       n       y    n    y        y           y
+
+    Notes: (1) Using mpich 1.2.4.
+           (2) Using mpt and mpich 1.2.4.
+           (3) Linux 2.4 with GNU, Intel, and PGI compilers, respectively.
+           (4) Shared libraries are provided only for the C library, except 
+               on Windows where they are provided for C and C++.
+           (5) Using mpt.
+           (6) Binaries only; source code for this platform is not being 
+               released at this time.
+           (7) Includes the H4toH5 Library and the h4toh5 and h5toh4 
+               utilities.
+    Compiler versions for each platform are listed in the preceding
+    "Platforms Tested" table.
+
+
+
+Known Problems
+==============
+* Fortran subroutine h5pget_driver_f doesn't return a correct driver information.
+  The fix willl be available in the 1.6.2 release. 
+* There are two h5dump xml tests(h5dump --xml thlink.h5 and h5dump --xml tmany.h5)
+  failed on windows xp with .NET for debug and debug dll. Release and Release
+  dll work fine. 
+
+* The h5dump tests may fail to match the expected output on some platforms
+  (e.g. parallel jobs, Windows) where the error messages directed to
+  "stderr" do not appear in the "right order" with output from stdout.
+  This is not an error.
+
+* The stream-vfd test uses ip port 10007 for testing. If another
+  application is already using that port address, the test will hang
+  indefinitely and has to be terminated by the kill command. To try the
+  test again, change the port address in test/stream_test.c to one not
+  being used in the host.
+
+* The --enable-static-exec configure flag fails to compile for Solaris
+  platforms. This is due to the fact that not all of the system
+  libraries on Solaris are available in a static format.
+
+  The --enable-static-exec configure flag also fails to correctly compile
+  on IBM SP2 platform for the serial mode. The parallel mode works fine
+  with this option.
+  
+  It is suggested that you don't use this option on these platforms
+  during configuration.
+
+* With the gcc 2.95.2 compiler, HDF 5 uses the `-ansi' flag during
+  compilation. The ANSI version of the compiler complains about not being
+  able to handle the `long long' datatype with the warning:
+
+        warning: ANSI C does not support `long long'
+  
+  This warning is innocuous and can be safely ignored.
+
+
+* The Stream VFD was not tested yet under Windows. It is not supported
+  in the TFLOPS machine.
+
+
+* The ./dsets tests failed in the TFLOPS machine if the test program,
+  dsets.c, is compiled with the -O option.  The hdf5 library still works
+  correctly with the -O option.  The test program works fine if it is
+  compiled with -O1 or -O0.  Only -O (same as -O2) causes the test
+  program to fail.
+
+* Certain platforms give false negatives when testing h5ls:
+    - Cray J90 and Cray T90IEEE give errors during testing when displaying
+      some floating-point values. These are benign differences due to
+      the different precision in the values displayed and h5ls appears to
+      be dumping floating-point numbers correctly.
+
+* Before building HDF5 F90 Library from source on Crays 
+  replace H5Aff.f90, H5Dff.f90 and H5Pff.f90 files in the fortran/src
+  subdirectory in the top level directory with the Cray-specific files
+  from the site:
+
+* On some platforms that use Intel compilers to build HDF5 fortran library,
+  compilation may fail for fortranlib_test.f90, fflush1.f90 and fflush2.f90
+  complaining about exit subroutine. Comment out the line 
+  IF (total_error .ne. 0) CALL exit (total_error)
+
+  ftp://hdf.ncsa.uiuc.edu/pub/outgoing/hdf5/hdf5-1.6.0/F90_source_for_Crays
+
+* On IA32 and IA64 systems, if you use a compiler other than GCC (such as
+  Intel's ecc or icc compilers), you will need to modify the generated
+  "libtool" program after configuration is finished. On or around line 104 of
+  the libtool file, there are lines which look like:
+
+      # How to pass a linker flag through the compiler.
+      wl=""
+
+  change these lines to this:
+
+      # How to pass a linker flag through the compiler.
+      wl="-Wl,"
+
+  UPDATE: This is now done automatically by the configure script. However, if
+  you still experience a problem, you may want to check this line in the
+  libtool file and make sure that it has the correct value.
+
+* Information about building with PGI and Intel compilers is available in
+  INSTALL file sections 5.7 and 5.8
+%%%%1.6.0%%%%   Release Information for hdf5-1.6.0 (03/July/03)
+
+14.  Release information for HDF5 version 1.6.0
+================================================
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.4.* and
+HDF5-1.6.0, and contains information on the platforms tested and
+known problems in HDF5-1.6.0. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+CONTENTS
+
+- New Features
+- Support for new platforms and languages
+- Bug Fixes since HDF5-1.4.0
+- Platforms Tested
+- Known Problems
+
+
+New Features
+============
+
+Configuration:
+--------------
+The following flags have been added to the configuration script:
+--enable-hdf5v1_4       Compile the HDF5 v1.4 compatibility interface
+--enable-filters=all    Turn on all internal I/O filters. One may also
+                        specify a comma-separated list of filters or the
+                        word no. The default is all internal I/O filters.
+--with-mpe=DIR          Use MPE instrumentation [default=no]
+--with-szlib=DIR        Use szlib library for external szlib I/O filter
+                        [default=no]
+
+Library:
+--------
+    Summary: This release has the following new features that are not
+             available in 1.4.* releases
+
+    1. Generic properties to give application more control on I/O pipeline
+    2. Time allocation and fill value properties
+    3. New  filters: external compression filter szip
+                     internal shuffling and checksum filters
+    4. Compact storage layout for datasets
+    5. Redesigned I/O pipeline for better performance.
+
+    For more information see
+    http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/SZIP/index.html
+    http://hdf.ncsa.uiuc.edu/HDF5/doc/ADGuide.html
+    http://hdf.ncsa.uiuc.edu/HDF5/doc/ADGuide/Changes.html 
+    
+    Complete list of changes:
+
+    * Changed dataset modification time to _not_ be updated when raw data is
+      written to a dataset.  The modification time is only updated when the
+      dataset's metadata is modified.  QAK - 2003/06/10
+    * Changed H5Sget_select_bounds to use 'hssize_t *' for start and end
+      parameters, instead of 'hsize_t *', to better match other parts of the
+      dataspace API.  QAK - 2003/06/04
+    * Changed raw data I/O to only access each chunk once, improving performance
+      in many situations with hyperslabs and large chunks or chunks with
+      filters.  These improvements are currently limited to serial I/O, with
+      similar parallel I/O improvements forthcoming sometime in the future.
+      QAK - 2003/05/07
+    * Added parameter to the MPI/POSIX driver. If GPFS is enabled (by
+      modifying the H5FDmpiposix.c file to uncomment the USE_GPFS_HINTS
+      macro), then this extra parameter will turn GPFS hints on and off
+      during runtime. BW - 2003/05/05
+    * Added option to print 1-byte integer datasets as ASCII to h5dump. BW -
+      2003/04/30
+    * Added a new utility "h5fc". It can be used to compile easily Fortran
+      programs which use HDF5. It automatically uses the compiler the HDF5
+      library was built with and links in any libraries HDF5 requires.
+      BW - 2003/04/10
+    * Added new dataset creation property list functions for working with
+      I/O filters: H5Pmodify_filter, H5Pget_filter_by_id and
+      H5Pall_filters_avail.  Also changed H5Zregister to use new method
+      of registering filters with library.  QAK - 2003/04/08
+    * The first version of szip compression support were implemented. 
+      User should have static szlib library installed. Using function
+      H5Pset_szip to pass the szip parameters to the HDF5 library.
+      More detailed decription of the process will be followed.
+      KY-2003/04/01
+    * Added Fletcher32 checksum as a filter in pipeline.  It only works in 
+      chunked dataset.  SLU - 2003/2/11
+    * MPICH/MPE instrumentation feature added.  Use --with-mpe[=DIR] to configure
+      it.  AKC - 2003/1/3
+    * New functions H5Gget_num_objs, H5Gget_objname_by_idx and H5Gget_objtype_by_idx 
+      are added to the library.  SLU - 2002/11/25
+    * H5Dget_offset is added to return the offset of a dataset's data relative
+      to the beginning of the file.  SLU - 2002/11/7
+    * Functions H5Tget_native_type and H5Tis_variable_str are added.  The first
+      one reconstructs a datatype based on native memory datatype.  The second
+      one checks if a datatype is variable string.  SLU - 2002/11/6
+    * Added environment variable "HDF5_DISABLE_VERSION_CHECK", which disables
+      the version checking between the header files and the library linked into
+      an application if set to '1'.  This should be used with caution, mis-
+      matched headers and library binaries can cause _serious_ problems.
+      QAK - 2002/10/15
+    * Added new API function to get the name of an object in a file, using
+      an open ID (hid_t).  QAK - 2002/10/14
+    * Added API functions to return pointer to low-level file handle
+      (H5Fget_vfd_handle and H5FDget_vfd_handle) and related property list
+      setting functions(H5Pset_family_offset and H5Pset_multi_type).
+      SLU - 2002/09/30
+    * Changed "H5P[set|get]_space_time" functions to "H5P[set|get]_alloc_time"
+      Unify all symbolic names for these functions to use "alloc time" instead
+      of other names.  QAK - 2002/09/13
+    * Added "H5D_SPACE_ALLOC_INCR" setting to H5D_SPACE_ALLOC_EARLY and
+      H5D_SPACE_ALLOC_LATE for H5Dset_space_time().  This allows chunked
+      datasets to be incrementally allocated as in the 1.4.x branch.
+      QAK - 2002/08/27
+    * Compact dataset is added to the library.  The data will be stored in 
+      the header message of dataset layout.  Space allocation time has to be
+      EARLY.  No hyperslab is supported for parallel collective write.  There
+      is no API changes except activating H5Pset_layout and H5Pget_layout for
+      compact dataset.  -SLU, 2002/8/20
+    * Added 'closing' parameter to VFL 'flush' callback function and H5FDflush.
+      This allows the library to indicate that the file will be closed
+      immediately following the call to 'flush' and can be used to avoid actions
+      that are duplicated in the VFL 'close' callback function.  QAK - 2002/05/20
+    * Added feature to parallel chunk allocation routine to not write fill
+      values to chunks allocated if the user has set the "fill time" to never.
+      This can improve parallel I/O performance for chunked
+      datasets.  QAK - 2002/05/17
+    * New functions H5Glink2 and H5Gmove2 were added to allow link and move to
+      be in different locations in the same file.  The old functions H5Glink 
+      and H5Gmove remain valid.  SLU - 2002/04/26 
+    * Fill-value's behaviors for contiguous dataset have been redefined.  
+      Basicly, dataset won't allocate space until it's necessary.  Full details
+      are available at http://hdf.ncsa.uiuc.edu/RFC/Fill_Value, at this moment.
+      SLU - 2002/04/11
+    * Added new routine "H5Dfill" to fill a selection with a particular value
+      in memory.  QAK - 2002/04/09
+    * Improved performance of "regular" hyperslab I/O when using MPI-IO and the
+      datatype conversion is unneccessary.  QAK - 2002/04/02
+    * Improved performance of single hyperslab I/O when datatype conversion is
+      unneccessary.  QAK - 2002/04/02
+    * Added new "H5Sget_select_type" API function to determine which type of
+      selection is defined for a dataspace ("all", "none", "hyperslab" or
+      "point"). QAK - 2002/02/07
+    * Added support to read/write portions of chunks directly, if they are
+      uncompressed and too large to cache.  This should speed up I/O on chunked
+      datasets for a few more cases.  QAK - 2002/01/31
+    * Added H5Rget_obj_type() API function, which performs the same functionality
+      as H5Rget_object_type(), but requires the reference type as a parameter
+      in order to correctly handle dataset region references.  Moved
+      H5Rget_object_type() to be only compiled into the library when v1.4
+      compatibility is enabled.
+    * Added a new file access property, file close degree, to control file 
+      close behavior.  It has four values, H5F_CLOSE_WEAK, H5F_CLOSE_SEMI,
+      H5F_CLOSE_STRONG, and H5F_CLOSE_DEFAULT.  Two correspont functions 
+      H5Pset_fclose_degree and H5Pget_fclose_degree are also provided.  Two 
+      new functions H5Fget_obj_count and H5Fget_obj_ids are offerted to assist
+      this new feature.  For full details, please refer to the reference 
+      manual under the description of H5Fcreate, H5Fopen, H5Fclose and the 
+      functions mentioned above. 
+    * Removed H5P(get|set)_hyper_cache API function, since the property is no
+      longer used.
+    * Improved performance of non-contiguous hyperslabs (built up with
+      several hyperslab selection calls).
+    * Improved performance of single, contiguous hyperslabs when reading or
+      writing.
+    * As part of the transition to using generic properties everywhere, the
+      parameter of H5Pcreate changed from H5P_class_t to hid_t, as well
+      the return type of H5Pget_class changed from H5P_class_t to hid_t.
+      Further changes are still necessary and will be documented here as they
+      are made.
+    * Improved regular hyperslab I/O by about a factor of 6 or so.
+    * Modified the Pablo build procedure to permit building of the instrumented
+      library to link either with the Trace libraries as before or with the
+      Pablo Performance Caputure Facility.
+    * Added new F90 APIs for generic properties, new filters, and
+      time/space allocation properties.
+    * C++ API:
+        - Added two new member functions: Exception::getFuncName() and
+          Exception::getCFuncName() to provide the name of the member
+          function, where an exception is thrown.
+        - IdComponent::operator= becomes a virtual function because
+          DataType, DataSpace, and PropList provide their own
+          implementation.  The new operator= functions invoke H5Tcopy,
+          H5Scopy, and H5Pcopy to make a copy of a datatype, dataspace,
+          and property list, respectively.
+
+Parallel Library:
+-----------------
+
+Tools:
+------
+    * When the "-S" option for "simple" output is chosen, h5ls now displays
+        modification times of datasets in UTC instead of local time.
+        QAK - 2003/06/06
+    * h5diff to compare two HDF5 files was added
+    * h5import to import ascii and binary data to an HDF5 file was added.
+      Old h5import tool in the tools/misc directory was renamed to 
+      h5createU8 to reflect its purpose. h5createU8 will be deleted in 
+      1.6.1 release. 
+    * Two new scripts h5fc and h5c++ were added to compile F90 and C++
+      HDF5 applications.
+
+Support for new platforms, languages and compilers.
+=======================================
+    * Added C++ API support on HPUX11.00.  BMR - 2003/03/19
+    * Absoft compiler is supported for Fortran HDF5 Library. 
+      When building with Absoft compiler, add -DH5_ABSOFT to
+      C compilation flags to get correct names of C functions
+      called by Fortran APIs. 
+
+
+Bug Fixes since HDF5-1.4.0 release
+==================================
+
+Library
+-------
+    * Don't attempt to perform collective I/O on chunked datasets with
+      parallel I/O.  QAK - 2003/06/05
+    * The library now correctly reuses space when objects are deleted in the
+      file.  This should be handled correctly for every situation, except
+      datasets with variable-length datatypes are not returning the space they
+      use in the global heap currently. QAK - 2003/04/13
+    * Fixed error in B-tree deletion routine which could cause groups to be
+      corrupted when objects are removed from them.
+      QAK - 2003/04/11
+    * Fixed error in file space freeing code which could cause metadata to
+      fail to be written to the file.
+      QAK - 2003/04/11
+    * -O caused errors in AIX 5.x platforms.  Removed it from
+      --enable-production mode.  AKC - 2003/03/31
+    * Corrected memory/resource leaks in per-thread key information when
+      thread-safe operation was enabled.  QAK - 2003/02/07
+    * Improved error assertion for nil VL strings, making it fails with error
+      stack instead of just assertion failure.  SLU - 2002/12/16
+    * Added two new API functions: H5Zunregister & H5Zfilter_avail.
+      QAK - 2002/11/16
+    * Add data shuffle filter(source code H5Zshuffle.c), the combination of the
+      shuffling and compression can make data compression better without suffering
+      much encoding and decoding CPU time for many application datasets(especially
+      for floating point data). This adds a new API function: H5Pset_shuffle.
+      KY - 2002/11/13
+    * Allow scalar dataspaces to be used for parallel I/O.  QAK - 2002/11/05
+    * New functions H5Gget_comment(modification), H5Aget_storage_size, 
+      H5Arename.  SLU - 2002/10/29
+    * Fixed an assertion of H5S_select_iterate that did not account for scalar
+      type that has no dimension sizes.   AKC - 2002/10/15
+    * Partially fixed space allocation inefficiencies in the file by
+      improving our algorithms for re-using freed space.  QAK - 2002/08/27
+    * Fixed data corruption problem which could occur when fill values were
+      written to a contiguously stored dataset in parallel.  QAK - 2002/08/27
+    * Fixed VL memory leak when data is overwritten.  The heap objects holding
+      old data are freed.  If the fill value writting time is set to 
+      H5D_FILL_TIME_NEVER, the library prohibits user to create VL type dataset.
+      The library free all the heap objects storing VL type if there is nested 
+      VL type(a VL type contains another VL type).  SLU - 2002/07/10 
+    * Tweaked a few API functions to use 'size_t' instead of 'unsigned' or
+      'hsize_t', which may cause errors in some cases.
+
+
+Configuration
+-------------
+    * Included the both the examples of fortran and c++ "make check-install"
+      testing. This tests the correctness of the h5fc command. AKC - 2003/04/22
+    * When using gcc 3.x, we use -std=c99 instead of -ansi for compiling.
+      QAK - 2003/04/11
+    * IA64 platform has its own configure setting and use Intel Compilers as
+      the default compilers (were gcc and pgf90 before.)  This also eliminated
+      the segmentation fault in the fortran test.  The missing reference of
+      "exit" is fixed too.  AKC - 2003/04/02
+
+Performance
+-------------
+    * Improved dataset creation time by about 30% (relative to the 1.4.x
+      branch).
+
+Tools
+-----
+
+    * Added a -force option to h5redeploy.  AKC - 2003/03/04 
+    * The VL string bug(data and datatype cannot be shown) in h5dump is fixed.
+      -SLU - 2002/11/18
+    * Fixed segfault if h5dump was invoked with some options but no file 
+      (e.g., h5dump -H). -AKC, 2002/10/15
+    * Fixed so that the "-i" flag works correctly with the h5dumper.
+    * Fixed segfault when "-v" flag was used with the h5dumper.
+
+
+Documentation 
+------------- 
+
+
+
+
+
+
+Platforms Tested
+================
+
+    AIX 5.1  (32 and 64-bit)      xlc 6.0.0.2
+                                  xlf 8.1.0.3
+    				  xlC 6.0.0.4
+				  xlc 5.0.2.5
+				  xlf 7.1.1.2
+				  xlC 5.0.2.5
+				  mpcc_r 5.0.2.5
+				  mpxlf_r 7.1.1.2
+                                  poe 3.2.0.10
+    Cray T3E sn6606 2.0.6.08      Cray Standard C Version 6.6.0.2
+                                  Cray Fortran Version 3.6.0.0.2
+                                  mpt 2.2.0.0
+    Cray SV1 sn9617 10.0.1.2      Cray Standard C Version 6.6.0.2
+                                  mpt 2.2.0.0
+                                  Cray Fortran Version 3.6.0.0.2
+    Cray T90IEEE 10.0.1.01y       Cray Standard C Version 6.4.0.2.3
+                                  Cray Fortran Version 3.4.0.3
+                                  mpt 2.1.0.0
+    FreeBSD 4.7                   gcc 2.95.4
+                                  g++ 2.95.5
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP ANSI C++ B3910B A.03.13
+                                  MPIch 1.2.4
+    IRIX 6.5                      MIPSpro cc 7.30
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+                                  MPIch 1.2.4
+    Linux 2.4.18                  gcc 2.96, 3.2.2, 3.2.3
+                                  g++ 3.2.2, 3.2.3
+                                  Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Compiler Version 7.1
+                                  PGI compilers (pgcc, pgf90, pgCC) version 4.0-2
+                                  MPIch 1.2.4
+    OSF1 V5.1                     Compaq C V6.4-014
+                                  Compaq C V6.3-027
+				  Compaq Fortran V5.5-1877
+				  Compaq C++ V6.5-014
+				  MPI_64bit_R5
+                                  g++ version 3.0 for C++
+    SunOS 5.7                     WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                WorkShop Compilers 5.0 98/12/15 C++ 5.0 
+                                  WorkShop Compilers 5.0 98/10/25 
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8/32                  Sun WorkShop 6 update 2 C 5.3
+     (Solaris 2.8)                Sun WorkShop 6 update 2 Fortran 90
+                                  Sun WorkShop 6 update 2 C++ 5.3
+    SunOS 5.8/64                  Sun WorkShop 6 update 2 C 5.3
+     (Solaris 2.8)                Sun WorkShop 6 update 2 Fortran 90
+                                  Sun WorkShop 6 update 2 C++ 5.3
+    TFLOPS r1.0.4 v4.3.3 i386     pgcc Rel 3.1-4i with mpich-1.2.4 with
+                                          local modifications
+    IA-32 Linux 2.4.9             gcc 2.96
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+                                  
+    IA-64 Linux 2.4.16 ia64       gcc version 2.96 20000731
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+                                  Intel C and F90 compilers version 7.1
+				  Code Warrior 8.0
+    Windows XP                    MSVC++.NET
+    MAC OS X                      Darwin 6.5
+                                  gcc and g++ Apple Computer, Inc. GCC 
+                                  version 1161, based on gcc version 3.1
+                                  
+
+
+Supported Configuration Features Summary
+========================================
+
+    In the tables below
+          y   = tested and supported
+          n   = not supported or not tested in this release
+          x   = not working in this release
+          dna = does not apply
+          ( ) = footnote appears below second table
+
+Platform              C   C         F90      F90       C++  Shared        zlib
+                          parallel           parallel       libraries (4)
+Solaris2.7 64-bit     y   y (1)     y        y (1)     y    y             y
+Solaris2.7 32-bit     y   y (1)     y        y (1)     y    y             y
+Solaris2.8 64-bit     y   y (1)     y        y (1)     y    y             y
+Solaris2.8 32-bit     y   y         y        y (1)     y    y             y
+IRIX6.5               y   y (1)     n        n         n    y             y 
+IRIX64_6.5 64-bit     y   y (2)     y        y         y    y             y
+IRIX64_6.5 32-bit     y   y (2)     n        n         n    y             y
+HPUX11.00             y   y (1)     y        y         y    y             y
+OSF1 v5.1             y   y         y        y         y    y             y
+T3E                   y   y (5)     y        y (5)     n    n             y
+SV1                   y   y (5)     y        y (5)     n    n             y
+T90 IEEE              y   y (5)     y        y (5)     n    n             y
+TFLOPS                n   y (1)     n        n         n    n             y
+AIX-5.1 32-bit        y   y         y        y         y    n             y
+AIX-5.1 64-bit        y   y         y        y         y    n             y
+WinXP           (6)   y   n         n        n         y    y             y
+WinXP Intel           y   n         n        n         y    y             y
+Win2000               y   n         y        n         y    y             y
+Win2000 Intel         y   n         y        n         y    y             y
+WinNT CW              y   n         n        n         n    n             y
+Mac OS X 10.2         y   n         n        n         y    y             y
+FreeBSD               y   y (1)     n        n         y    y             y
+Linux 2.4 gcc   (3)   y   y (1)     y (PGI)  n         y    y             y
+Linux 2.4 Intel (3)   y   n         y        n         y    n             y
+Linux 2.4 PGI   (3)   y   n         y        n         y    n             y
+Linux 2.4 IA32 Intel  y   n         y        n         y    n             y
+Linux 2.4 IA64 Intel  y   n         y        n         y    n             y
+
+
+ASCII Table 2 -- for RELEASE.txt
+
+Platform              static- Thread- SZIP GASS STREAM-  High-level  H4/H5 
+                      exec    safe              VFD      APIs        tools (7)
+Solaris2.7 64-bit     x       y       y    n    y        y           n
+Solaris2.7 32-bit     x       y       y    n    y        y           y
+Solaris2.8 64-bit     x       y       y    n    y        y           n
+Solaris2.8 32-bit     x       y       y    n    y        y           y
+IRIX6.5               x       n       y    n    y        y           y
+IRIX64_6.5 64-bit     x       y       y    y    y        y           y
+IRIX64_6.5 32-bit     x       y       y    y    y        y           y
+HPUX11.00             x       n       y    n    y        y           y
+OSF1 v5.1             y       n       y    n    y        y           y
+T3E                   y       n       n    n    y        y           y
+SV1                   y       n       n    n    y        y           y
+T90 IEEE              y       n       n    n    y        y           n
+TFLOPS                y       n       n    n    n        n           n
+AIX-5.1 32-bit        y       n       y    n    y        y           y
+AIX-5.1 64-bit        y       n       y    n    y        y           y
+WinXP           (6)   y       n       y    n    n        y           y
+WinXP Intel           y       n       y    n    n        y           y
+Win2000               y       n       y    n    n        y           y
+Win2000 Intel         y       n       y    n    n        y           y
+WinNT CW              y       n       y    n    n        y           y
+Mac OS X 10.2         y       n       y    n    y        y           n
+FreeBSD               y       y       y    n    y        y           y
+Linux 2.4 gcc   (3)   y       y       y    n    y        y           y
+Linux 2.4 Intel (3)   y       n       y    n    y        n           n
+Linux 2.4 PGI   (3)   y       n       y    n    y        n           n
+Linux 2.4 IA32 Intel  y       n       y    n    y        y           y
+Linux 2.4 IA64 Intel  y       n       y    n    y        y           y
+
+    Notes: (1) Using mpich 1.2.4.
+           (2) Using mpt and mpich 1.2.4.
+           (3) Linux 2.4 with GNU, Intel, and PGI compilers, respectively.
+           (4) Shared libraries are provided only for the C library, except 
+               on Windows where they are provided for C and C++.
+           (5) Using mpt.
+           (6) Binaries only; source code for this platform is not being 
+               released at this time.
+           (7) Includes the H4toH5 Library and the h4toh5 and h5toh4 
+               utilities.
+    Compiler versions for each platform are listed in the preceding
+    "Platforms Tested" table.
+
+
+
+Known Problems
+==============
+
+* PGI C++ compiler fails when compiling the C++ library's tests.
+  Therefore, we cannot verify that the C++ library built with the PGI C++
+  compiler is correct.
+
+* The h5dump tests may fail to match the expected output on some platforms
+  (e.g. parallel jobs, Windows) where the error messages directed to
+  "stderr" do not appear in the "right order" with output from stdout.
+  This is not an error.
+
+* The stream-vfd test uses ip port 10007 for testing. If another
+  application is already using that port address, the test will hang
+  indefinitely and has to be terminated by the kill command. To try the
+  test again, change the port address in test/stream_test.c to one not
+  being used in the host.
+
+* The --enable-static-exec configure flag fails to compile for Solaris
+  platforms. This is due to the fact that not all of the system
+  libraries on Solaris are available in a static format.
+
+  The --enable-static-exec configure flag also fails to correctly compile
+  on IBM SP2 platform for the serial mode. The parallel mode works fine
+  with this option.
+  
+  It is suggested that you don't use this option on these platforms
+  during configuration.
+
+* With the gcc 2.95.2 compiler, HDF 5 uses the `-ansi' flag during
+  compilation. The ANSI version of the compiler complains about not being
+  able to handle the `long long' datatype with the warning:
+
+        warning: ANSI C does not support `long long'
+  
+  This warning is innocuous and can be safely ignored.
+
+
+* The Stream VFD was not tested yet under Windows. It is not supported
+  in the TFLOPS machine.
+
+
+* The ./dsets tests failed in the TFLOPS machine if the test program,
+  dsets.c, is compiled with the -O option.  The hdf5 library still works
+  correctly with the -O option.  The test program works fine if it is
+  compiled with -O1 or -O0.  Only -O (same as -O2) causes the test
+  program to fail.
+
+* Certain platforms give false negatives when testing h5ls:
+    - Cray J90 and Cray T90IEEE give errors during testing when displaying
+      some floating-point values. These are benign differences due to
+      the different precision in the values displayed and h5ls appears to
+      be dumping floating-point numbers correctly.
+
+* Before building HDF5 F90 Library from source on Crays 
+  replace H5Aff.f90, H5Dff.f90 and H5Pff.f90 files in the fortran/src
+  subdirectory in the top level directory with the Cray-specific files
+  from the site:
+
+* On some platforms that use Intel compilers to build HDF5 fortran library,
+  compilation may fail for fortranlib_test.f90, fflush1.f90 and fflush2.f90
+  complaining about exit subroutine. Comment out the line 
+  IF (total_error .ne. 0) CALL exit (total_error)
+
+  ftp://hdf.ncsa.uiuc.edu/pub/outgoing/hdf5/hdf5-1.6.0/F90_source_for_Crays
+
+* On IA32 and IA64 systems, if you use a compiler other than GCC (such as
+  Intel's ecc or icc compilers), you will need to modify the generated
+  "libtool" program after configuration is finished. On or around line 104 of
+  the libtool file, there are lines which look like:
+
+      # How to pass a linker flag through the compiler.
+      wl=""
+
+  change these lines to this:
+
+      # How to pass a linker flag through the compiler.
+      wl="-Wl,"
+
+  UPDATE: This is now done automatically by the configure script. However, if
+  you still experience a problem, you may want to check this line in the
+  libtool file and make sure that it has the correct value.
+
+* Information about building with PGI and Intel compilers is available in
+  INSTALL file sections 5.7 and 5.8
+-----------------------------------------------------------------------
+%%%%1.4.5%%%%   Release Information for hdf5-1.4.5 (02/February/03)
+
+
+13.   Release information for HDF5 version 1.4.5
+==============================================================================
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.4.4 and
+HDF5-1.4.5, and contains information on the platforms tested and
+known problems in HDF5-1.4.5. For additional information check the 
+HISTORY.txt file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+    /HDF/HDF5/docs/
+
+For more information, see the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+
+- New Features
+- Bug Fixes since HDF5-1.4.4
+- Performance Improvements
+- Documentation
+- Platforms Tested
+- Supported Configuration Features
+- Known Problems
+
+
+New Features
+============
+  o Configuration
+  ================
+    * Added "unofficial support" for building with a C++ compiler (or at least
+      not failing badly when building with a C++ compiler).  QAK - 2003/01/09
+    * Added "unofficial support" for AIX 64bits.  See INSTALL for configure
+      details. AKC - 2002/08/29
+    * Added "--with-dmalloc" flag, to easily enable support for the 'dmalloc'
+      debugging malloc implementation. QAK - 2002/07/15
+
+  o Library
+  =========
+    o General
+    --------- 
+      * Allow scalar dataspaces to be used for parallel I/O.  QAK - 2002/11/05
+      * Added environment variable "HDF5_DISABLE_VERSION_CHECK", which disables
+        the version checking between the header files and the library linked
+        into an application if set to '1'.  This should be used with caution,
+        mis-matched headers and library binaries can cause _serious_ problems.
+        QAK - 2002/10/15
+      * Partially fixed space allocation inefficiencies in the file by
+        improving our algorithms for re-using freed space.  QAK - 2002/08/27
+      * API tracing has been improved. Nested API calls don't screw up the
+        output format; function call and return event times can be logged;
+        total time spent in each function can be logged.  The following
+        HDF5_DEBUG environment variable words affect tracing:
+	    trace   -- turn on/off basic tracing
+	    ttimes  -- turn on tracing and report event times and
+                       time spent in each API function.
+        ttop    -- turn on tracing but display only top-level
+                       API calls.
+
+    o APIs
+    ------
+      * Several missing fortran APIs have been added to the library:
+
+        h5get_libversion_f        h5tget_member_index_f  h5dget_storage_size_f 
+        h5check_version_f         h5tvlen_create_f       h5dvlen_get_max_len_f
+        h5garbage_collect_f                              h5dwrite_vl_f
+        h5dont_atexit_f                                  h5dread_vl_f
+
+      Functions h5dvlen_get_max_len_f, h5dwrite_vl_f, and h5dread_vl_f support
+      VL Length C APIs functionality for integer, real and string datatypes.
+      See HDF5 Reference Manual and HDF5 FORTRAN90 User's Notes for more
+      information and for the functions description.
+
+  o Parallel library
+  ==================
+    * The MPI-posix virtual file driver makes gpfs_fcntl() hints to tell
+        the underlying GPFS file system to avoid prefetching byte range
+        tokens if USE_GPFS_HINTS is defined when this file is compiled.
+        This temporary solution is intended to be removed once the HDF5
+        API supports the necessary functionality that makes it possible
+        for this sort of thing do be done at a higher software layer.
+        RPM - 2002/12/03
+    * Added MPI-posix VFL driver.  This VFL driver uses MPI functions to
+        coordinate actions, but performs I/O directly with POSIX sec(2)
+        (i.e. open/close/read/write/etc.) calls.  This driver should _NOT_
+        be used to access files that are not on a parallel filesystem.
+        The following API functions were added:
+            herr_t H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm);
+            herr_t H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/);
+        QAK - 2002/07/15
+
+
+
+  o Support for new platforms and languages
+  =========================================
+    * C++ API now works on the Origin2000 (IRIX6.5.14.)  BMR - 2002/11/14
+
+  
+  o Misc.
+  =========================================
+    HDF5 1.4.5 works with Portland Group Compilers (pgcc, pgf90 and pgCC 
+    version 4.0-2) on Linux 2.4 
+
+
+Bug Fixes since HDF5-1.4.4 Release
+==================================
+    * H5Fopen without the H5F_ACC_CREAT flag should not succeed in creating
+        a new file with the 'core' VFL driver.  QAK - 2003/01/24
+    * Corrected metadata caching bug in parallel I/O which could cause hangs
+        when chunked datasets were accessed with independent transfer mode.
+        QAK - 2003/01/23
+    * Allow opening objects with unknown object header messages.
+        QAK - 2003/01/21
+    * Added improved error assertion for nil VL strings.  It return error
+        stack instead of a simple assertion.  SLU - 2002/12/16
+    * Fixed h5dump bug(cannot dump data and datatype) for VL string. 
+        SLU - 2002/11/18 
+    * Fixed error condition where "none" selections were not being handled
+        correctly in serial & parallel.  QAK - 2002/10/29
+    * Fixed problem where optimized hyperslab routines were incorrectly
+        invoked for parallel I/O operations in collective mode.  QAK - 2002/07/22
+    * Fixed metadata corruption problem which could occur when many objects
+        are created in a file during parallel I/O.  QAK - 2002/07/19
+    * Fixed minor problem with configuration when users specified /usr/include
+        and /usr/lib for the --with-* options that some compilers can't
+        handle. BW - 2003/01/23
+
+
+
+Documentation
+=============
+    New PDF files are not available for this release.
+
+
+Platforms Tested
+================
+
+    AIX 5.1  (32 and 64-bit)      C for AIX Compiler, Version 6
+                                  xlf 8.1.0.2
+                                  poe 3.2.0.11
+    Cray T3E sn6606 2.0.6.08      Cray Standard C Version 6.6.0.1.3 
+                                  Cray Fortran Version 3.6.0.0.12 
+    Cray SV1 10.0.1. 0            Cray Standard C Version 6.6.0.1.3
+                                  Cray Fortran Version 3.6.0.0.12
+    Cray T90IEEE 10.0.1.01u       Cray Standard C Version 6.4.0.2.3
+                                  Cray Fortran Version 3.4.0.3
+    FreeBSD 4.7                   gcc 2.95.4
+                                  g++ 2.95.5
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+    IRIX 6.5                      MIPSpro cc 7.30
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+    Linux 2.4.18                  gcc 3.2.1
+                                  g++ 3.2.1
+                                  Intel(R) C++ Version 6.0
+                                  Intel(R) Fortran Compiler Version 6.0
+                                  PGI compilers (pgcc, pgf90, pgCC) version 4.0-2
+                                  pgf90  3.2-4
+    OSF1 V5.1                     Compaq C V6.4-014
+                                  Compaq Fortran X5.4A-1684
+                                  gcc version 3.0 for C++
+    SunOS 5.7                     WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                WorkShop Compilers 5.0 98/12/15 C++ 5.0 
+                                  WorkShop Compilers 5.0 98/10/25 
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8/32                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          Patch 109503-07 2001/08/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 Patch
+                                        109508-04 2001/07/11
+    SunOS 5.8/64                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          Patch 109503-07 2001/08/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 Patch
+                                        109508-04 2001/07/11
+    TFLOPS r1.0.4 v4.3.3 i386     pgcc Rel 3.1-4i with mpich-1.2.4 with
+                                          local modifications
+    IA-32 Linux 2.4.9             gcc 2.96
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+                                  
+    IA-64 Linux 2.4.16 ia64       gcc version 2.96 20000731
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+    Windows XP                    .NET
+    Windows NT4.0                 Code Warrior 6.0
+    MAC OS X                      Darwin 6.2
+                                  gcc and g++ Apple Computer, Inc. GCC 
+                                  version 1161, based on gcc version 3.1
+                                  
+
+
+Supported Configuration Features Summary
+========================================
+
+    In the tables below
+          y   = tested and supported
+          n   = not supported or not tested in this release
+          x   = not working in this release
+          dna = does not apply
+          ( ) = footnote appears below second table
+
+
+    Platform             C   C         F90  F90       C++  Shared         zlib
+                             parallel       parallel       libraries (5)
+    Solaris2.6           y   n         y    n         y    y              y
+    Solaris2.7 64-bit    y   y (1)     y    y (1)     y    y              y
+    Solaris2.7 32-bit    y   y (1)     y    y (1)     y    y              y
+    Solaris2.8 64-bit    y   n         y    y (1)     y    y              y
+    Solaris2.8 32-bit    y   n         y    y (1)     y    y              y
+    IRIX6.5              y   y (1)     n    n         n    y              y 
+    IRIX64_6.5 64-bit    y   y (2)     y    y         y    y              y
+    IRIX64_6.5 32-bit    y   y (2)     n    n         n    y              y
+    HPUX11.00            y   y (1)     y    n         n    y              y
+    OSF1 v5.1            y   n         y    n         y    y              y
+    T3E             (6)  y   n         y    n         n    n              y
+    SV1                  y   n         y    n         n    n              y
+    T90 IEEE             y   n         y    n         n    n              y
+    TFLOPS               n   y (1)     n    n         n    n              y
+    AIX-5.1 32-bit       y   y         y    y         y    n              y
+    AIX-5.1 64-bit       y   y         y    y         y    n              y
+    WinXP           (7)  y   n         n    n         y    y              y
+    WinNT/2000           y   n         y    n         y    y              y
+    WinNT CW             y   n         n    n         n    n              y
+    Mac OS X 10.2        y   n         n    n         y    y              y
+    FreeBSD              y   y (1)     n    n         y    y              y
+    Linux 2.2            y   y (1)     y    y (1)     y    y              y
+    Linux 2.4 gcc   (3)  y   y (1)     y    n         y    y              y
+    Linux 2.4 Intel (3)  y   n         y    n         n    n              y
+    Linux 2.4 PGI   (3)  y   n         y    n         y    n              y
+    Linux 2.4 IA32       y   n         y    n         n    n              y
+    Linux 2.4 IA64       y   n         y    n         n    n              y
+    
+
+    Platform             static-  Thread-  SRB  GASS  STREAM-
+                         exec     safe                VFD
+    Solaris2.6           x        y        n    n     y
+    Solaris2.7 64-bit    x        y        n    n     y
+    Solaris2.7 32-bit    x        y        n    n     y
+    Solaris2.8 64-bit    x        n        n    n     y
+    Solaris2.8 32-bit    x        y        n    n     y
+    IRIX6.5              x        n        n    n     y
+    IRIX64_6.5 64-bit    x        y        n    y     y
+    IRIX64_6.5 32-bit    x        y        n    y     y
+    HPUX11.00            x        n        n    n     y
+    OSF1 v5.1            y        n        n    n     y
+    T3E             (6)  y        n        n    n     y
+    SV1                  y        n        n    n     y
+    T90 IEEE             y        n        n    n     y
+    TFLOPS               y        n        n    n     n
+    AIX-5.1 32-bit       y        n        n    n     y
+    AIX-5.1 64-bit       y        n        n    n     y
+    WinXP           (7)  dna      n        n    n     n
+    WinNT/2000           dna      n        n    n     n
+    WinNT CW             dna      n        n    n     n
+    Mac OS X 10.2        y        n        n    n     y
+    FreeBSD              y        y        n    n     y
+    Linux 2.2            y        y        n    n     y
+    Linux 2.4 gcc   (3)  y        y        n    n     y
+    Linux 2.4 Intel (3)  y        n        n    n     y
+    Linux 2.4 PGI   (3)  y        n        n    n     y
+    Linux 2.4 IA32       y        n        n    n     y
+    Linux 2.4 IA64       y        n        n    n     y
+
+    Notes: (1) Using mpich 1.2.4.
+           (2) Using mpt and mpich 1.2.4.
+           (3) Linux 2.4 with GNU, Intel, and PGI compilers.
+           (4) No HDF4-related tools.
+           (5) Shared libraries are provided only for the C library, 
+               except on Windows where they are provided for all languages.
+           (6) Debug mode only.
+           (7) Binaries only; source code for this platform is not being 
+               released at this time.
+
+
+Known Problems
+==============
+
+    * On Linux 2.4 IA64, Fortran test fails for h5dwrite_vl_f 
+      for integer and real base datatypes.
+
+    * When fortran library is built with Intel compilers, compilation
+      for fflush1.f90, fflush2.f90 and fortanlib_test.f90 will fail 
+      complaining about EXEC function. Comment the call to EXEC subroutine
+      in each program, or get a patch for the HDF5 Fortran source code. 
+
+    * Fortran external dataset test fails on Linux 2.4 with pgf90 compiler.
+
+    * On Windows, h5dump may abort printing if a VL string is longer than 4096
+      bytes due to a compiler problem.  It'll be fixed in v1.6 release.
+
+    * Datasets or attributes which have a variable-length string datatype are
+      not printing correctly with h5dump and h5ls.
+
+    * When a dataset with the variable-length datatype is overwritten, 
+      the library can develop memory leaks that cause the file to become 
+      unnecessarily large.  This is planned to be fixed in the next release.
+
+    * On the SV1, the h5ls test fails due to a difference between the 
+      SV1 printf precision and the printf precision on other platforms.
+
+    * The h5dump tests may fail to match the expected output on some
+      platforms (e.g. SP2 parallel, Windows) where the error messages
+      directed to "stderr" do not appear in the "right order" with output
+      from stdout.  This is not an error.
+
+    * The --enable-static-exec configure flag fails to compile for HP-UX
+      11.00 platforms.
+
+    * The executables are always dynamic on IRIX64 6.5(64 and n32) and 
+      IRIX 6.5 even if they are configured with --enable-static-exec.
+
+    * IRIX 6.5 fails to compile if configured with --enable-static-exec.
+
+    * The executables are always dynamic on Solaris 2.7 ans 2.8(64 and n32)
+      even if they are configured with --enable-static-exec.
+    
+    * The HDF5_MPI_OPT_TYPES optimization code in the parallel HDF5 will cause
+      a hang in some cases when chunked storage is used.  This is now set to
+      be off by default.  One may turn it on by setting the environment 
+      variable HDF5_MPI_OPT_TYPES to a non-zero value such as 1.
+
+    * On OSF1 v5.1 and IA32 h5dumpgentst program that generates test files
+      for h5dump, gives segmentation fault.
+
+    * On Windows platforms, C and Fortran tests fail with the debug DLL version
+      of the Library if built from all_withf90.zip file.
+
+    * On Cray T3E (sn6606 2.0.6.08 unicosmk CRAY T3E) with Cray Standard C Version 6.6.0.1.3
+      compiler optimization causes errors in many HDF5 Library tests. Use -g -h zero flags
+      to build HDF5 Library. 
+
+    * On Cray SV1 10.0.1. 0 datatype convertion test fails. Please check HDF FTP site
+      if patch is available. We will try to provide one in the nearest future. 
+
+    * For configuration, building and testing with Intel and PGI compilers see
+      corresponding section in INSTALL file.
+
+
+%%%%1.4.4%%%%   Release Information for hdf5-1.4.4 (02/July/02)
+
+12.   Release information for HDF5 version 1.4.4
+==============================================================================
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.4.3 and
+HDF5-1.4.4, and contains information on the platforms tested and
+known problems in HDF5-1.4.4. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+    /HDF/HDF5/docs/
+
+For more information, see the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+
+- New Features
+- Bug Fixes since HDF5-1.4.3
+- Performance Improvements
+- Documentation
+- Platforms Tested
+- Supported Configuration Features
+- Known Problems
+
+
+New Features
+============
+  o Configuration
+  ================
+    * The H4 to H5 tools have been removed from the main source and placed 
+      in a separate package. You can get these tools from the HDF ftp site
+      (ftp://hdf.ncsa.uiuc.edu/). The "--with-hdf4" command-line option 
+      during configure is no longer valid.  BW - 2002/06/25
+
+  o Library
+  =========
+    o General
+    --------- 
+      * Fill-value forward-compatibility with release 1.5 was added.  SLU -
+        2002/04/11
+      * A new query function H5Tget_member_index has been added for compound
+        and enumeration data types.  This function retrieves a member's index 
+        by name.  SLU - 2002/04/05
+      * Added serial multi-gigabyte file size test.  "test/big -h" shows
+        the help page.  AKC - 2002/03/29
+ 
+    o APIs
+    ------
+      * The F90 subroutines h5dwrite_f, h5dread_f, h5awrite_f, and h5aread_f 
+        were overloaded with a "dims" argument of type INTEGER(HSIZE_T) to 
+        specify the size of the array.  We recommend using these subroutines 
+        with the new type; module subroutines that accept "dims" as an i
+        INTEGER array of size 7 will be deprecated in release 1.6.  
+        EIP - 2002/05/06
+ 
+    o Performance
+    -------------
+      * Added internal "small data" aggregation, which can reduce the number of
+        actual I/O calls made, improving performance.  QAK - 2002/06/05
+      * Improved internal metadata aggregation, which can reduce the number of
+        actual I/O calls made, improving performance.  Additionally, this can
+        reduce the size of files produced.  QAK - 2002/06/04
+      * Improved internal metadata caching, which can reduce the number of
+        actual I/O calls made by a substantial amount, improving
+        performance.  QAK - 2002/06/03
+
+
+  o Parallel library
+  ==================
+    * Fixed bug in parallel I/O routines where a collective I/O which used
+      MPI derived types, followed by an independent I/O would cause the library
+      to hang.  QAK 2002/06/24
+    * Added environment variable flag to control whether creating MPI derived
+      types is preferred or not.  This can affect performance, depending on
+      which way the MPI-I/O library is optimized.  The default is set to
+      prefer MPI derived types for collective raw data transfers; setting the
+      HDF5_MPI_PREFER_DERIVED_TYPES environment variable to "0" (i.e.:
+      "setenv HDF5_MPI_PREFER_DERIVED_TYPES 0") changes the preference to avoid
+      using them whenever possible.  QAK - 2002/06/19
+    * Changed MPI I/O routines to avoid creating MPI derived types (and thus
+      needing to set the file view) for contiguous selections within datasets.
+      This should result in some performance improvement for those types of
+      selections.  QAK - 2002/06/18
+    * Changed MPI type support for collective I/O to be enabled by default.
+      This can be disabled by setting the HDF5_MPI_OPT_TYPES environment
+      variable to the value "0".  QAK - 2002/06/14
+    * Allowed chunks in chunked datasets to be cached when parallel file is
+      opened for read-only access (bug #709).  QAK - 2002/06/10
+    * Changed method for allocating chunked dataset blocks to only allocate
+      blocks that don't already exist, instead of attempting to create all the
+      blocks all the time.  This improves performance for chunked
+      datasets.  QAK - 2002/05/17
+    * Allowed the call to MPI_File_sync to be avoided when the file is going to
+      immediately be closed, improving performance.  QAK - 2002/05/13
+    * Allowed the metadata writes to be shared among all processes, easing the
+      burden on process 0.  QAK - 2002/05/10
+
+
+  o Tools
+  =======
+    * h5redeploy utility was added. It updates HDF5 compiler tools
+      after the HDF5 software has been installed in a new location.
+
+
+  o Support for new platforms and languages
+  =========================================
+    * Parallel Fortran Library works now on HP-UX B.11.00 Sys V.
+      EIP - 2002/05/06
+    * Intel C++ and F90 compilers Version 6.0 are supported on Linux 2.4.
+    * Intel C++ compilers Version 6.0 are supported on Windows 2000.
+
+  
+  o Misc.
+  =========================================
+   * zlib has been moved out of the Windows source release. Users should go to
+     the ZLIB homepage(http://www.zlib.org) to download the corresponding 
+     zlib library.
+   * The Windows binary release is built with the old version of the zlib 
+     library.  We expect users to use zlib 1.1.4 to build with the source 
+     release.  
+   * In the Windows-specific install document, we specify how to test backward
+     compatibility. However, in this release, we are not testing the backward
+     compatibility of HDF5.
+
+
+Bug Fixes since HDF5-1.4.3 Release
+==================================
+    * Fixed bug in chunking routines where they were using internal allocation
+        free routines, instead of malloc/free, preventing user filters from
+        working correctly.  Chunks are now allocated/freed with malloc/free and
+        so should the chunks in user filters.  QAK 2002/06/18
+    * Fixed bug where regular hyperslab selection could get incorrectly
+        transferred when the number of elements in a row did not fit evenly
+        into the buffer provided.  QAK 2002/06/12
+    * Fixed bug (#499) which allowed an "empty" compound or enumerated datatype
+        (one with no members) to be used to create a dataset or to be committed
+        to a file.  QAK - 2002/06/11
+    * Fixed bug (#777) which allowed a compound datatype to be inserted into
+        itself.  QAK - 2002/06/10
+    * Fixed bug (#789) where creating 1-D dataset region reference caused the
+        library to go into infinite loop.  QAK - 2002/06/10
+    * Fixed bug (#699, fix provided by a user) where a scalar dataspace was
+        written to the file and then subsequently queried with the
+        H5Sget_simple_extent_type function; type was reported as H5S_SIMPLE 
+        instead of H5S_SCALAR. EIP - 2002/06/04
+    * Clear symbol table node "dirty" flag when flushing symbol tables to
+        disk, to reduce I/O calls made & improve performance.  QAK - 2002/06/03
+    * Fixed bug where an object's header could get corrupted in certain
+        obscure situations when many objects were created in the
+        file.  QAK - 2002/05/31
+    * Fixed bug where read/write intent in file IDs created with H5Freopen
+        was not being kept the same as the original file.  QAK - 2002/05/14
+    * Fixed bug where selection offsets were not being used when iterating
+        through point and hyperslab selections with
+        H5Diterate().  QAK - 2002/04/29
+    * Fixed bug where the data for several level deep nested compound &
+        variable-length datatypes used for datasets were getting corrupted when
+        written to the file.  QAK - 2002/04/17
+    * Fixed bug where selection offset was being ignored for certain hyperslab
+        selections when optimized I/O was being performed.  QAK - 2002/04/02
+    * Fixed limitation in h5dumper with object names which reached over 1024
+        characters in length. We can now handle arbitrarily larger sizes for
+        object names. BW - 2002/03/29
+    * Fixed bug where variable-length string type did not behave as a
+        string.  SLU - 2002/03/28
+    * Fixed bug in H5Gget_objinfo() which was not setting the 'fileno'
+        of the H5G_stat_t struct.  QAK - 2002/03/27
+    * Fixed data corruption bug in hyperslab routines when contiguous
+        hyperslab that spans entire dimension and is larger than type
+        conversion buffer is attempted to be read.  QAK - 2002/03/26
+
+
+Performance Improvements
+========================
+    This release of the HDF5 library has been extensively tuned to improve
+performance, especially to improve parallel I/O performance.
+    Most of the specific information for particular performance improvements
+is mentioned in the "New Features" and "Bug Fixes since HDF5-1.4.3" sections
+of this document, but in general, the library should make fewer and larger
+I/O requests when accessing a file.  Additionally, improvements to the parallel
+I/O portions of the library should have reduced the communications and barriers
+used in various internal algorithms, improving the performance of the library.
+    However, with the extensive changes to some portions of the library that
+were required for these improvements, some errors or unanticipated results may
+have been introduced also.  Please report any problems encountered to our
+support team at hdfhelp at ncsa.uiuc.edu.
+    Hopefully these improvements will benefit all HDF5 applications, but if
+there are particular I/O patterns that appear to be slower than necessary,
+please send e-mail to hdfhelp at ncsa.uiuc.edu with a sample program showing the
+problem behavior; we will look into the issue to see if it is possible to
+address it.
+
+
+Documentation
+=============
+    * Documentation was updated for the hdf5-1.4.4 release.
+    * A new "HDF5 User's Guide" is under development.  See 
+      http://hdf.ncsa.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/current/.
+    * A "Parallel HDF5 Tutorial" is available at 
+      http://hdf.ncsa.uiuc.edu/HDF5/doc/Tutor/.
+    * The "HDF5 Tutorial" is not distributed with this release.  It is 
+      available at http://hdf.ncsa.uiuc.edu/HDF5/doc/Tutor/.
+
+
+Platforms Tested
+================
+
+    AIX 4.3.3.0 (IBM SP powerpc)  xlc 5.0.2.0
+                                  mpcc_r 5.0.2.0
+                                  xlf 07.01.0000.0002
+                                  mpxlf 07.01.0000.0002
+    AIX 4.3 (IBM SP RS6000)       C for AIX Compiler, Version 5.0.2.0
+                                  xlf 7.1.0.2
+                                  poe 3.1.0.12 (includes mpi)
+    AIX 5.1                       xlc 5.0.2.0 
+                                  xlf 07.01.0000.0002
+                                  mpcc_r 5.0.2.0; mpxlf_r 07.01.0000.0002
+    Cray T3E sn6711 2.0.5.57      Cray Standard C Version 6.5.0.3
+                                  Cray Fortran Version 3.5.0.4
+    Cray SV1 10.0.1.1             Cray Standard C Version 6.5.0.3 
+                                  Cray Fortran Version 3.5.0.4
+    FreeBSD 4.6                   gcc 2.95.4
+                                  g++ 2.95.4
+    HP-UX B.10.20                 HP C  HP92453-01 A.10.32.30
+                                  HP F90 v2.3
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+    HP-UX B.11.00 SysV            HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP MPI [not a product] (03/24/2000) B6060BA
+    IRIX 6.5                      MIPSpro cc 7.30
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+    Linux 2.4.9-31smp             gcc 2.95.3
+                                  g++ 2.95.3
+                                  Intel(R) C++ Version 6.0
+                                  Intel(R) Fortran Compiler Version 6.0
+                                  MPICH 1.2.2
+    Linux 2.2.18smp               gcc 2.95.2
+                                  gcc 2.95.2 with mpich 1.2.1
+                                  g++ 2.95.2
+                                  pgf90 3.2-4
+    OSF1 V5.1                     Compaq C V6.4-014
+                                  Compaq Fortran V5.5-1877-48BBF
+                                  gcc version 3.0 for C++
+    SunOS 5.7                     WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                WorkShop Compilers 5.0 98/12/15 C++ 5.0 
+                                  WorkShop Compilers 5.0 98/10/25 
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8/32                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          Patch 109503-07 2001/08/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 Patch
+                                        109508-04 2001/07/11
+    SunOS 5.8/64                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          Patch 109503-07 2001/08/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 Patch
+                                        109508-04 2001/07/11
+    TFLOPS r1.0.4 v4.2.2 i386     pgcc Rel 3.1-4i with mpich-1.2.3 with
+                                          local modifications
+    IA-32 Linux 2.4.9             cc Intel 5.0.1
+                                  gcc 2.96
+                                  Intel(R) C++ Version 6.0
+                                  Intel(R) Fortran Compiler Version 6.0
+                                  
+    IA-64 Linux 2.4.16 ia64       gcc version 2.96 20000731
+                                  Intel(R) C++ Version 6.0
+                                  Intel(R) Fortran Compiler Version 6.0
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+    Windows NT4.0                 MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+    Windows NT4.0                 Code Warrior 6.0
+
+
+Supported Configuration Features Summary
+========================================
+
+    In the tables below
+          y  = tested and supported
+          n  = not supported or not tested in this release
+          x  = not working in this release
+         ( ) = footnote appears below second table
+
+
+    Platform           C  C         F90  F90      C++  Shared       zlib  Tools
+                          parallel       parallel      libraries(5)
+    Solaris2.6         y  n         y    n        y    y            y     y
+    Solaris2.7 64      y  y (1)     y    n        y    y            y     y
+    Solaris2.7 32      y  y (1)     y    n        y    y            y     y
+    Solaris2.8 64      y  n         y    n        y    y            y     y
+    Solaris2.8 32      y  n         y    n        y    y            y     y
+    IRIX6.5            y  y (1)     n    n        n    y            y     y
+    IRIX64_6.5 64      y  y (2)     y    y        n    y            y     y
+    IRIX64_6.5 n32     y  y (2)     n    n        n    y            y     y
+    HPUX10.20          y  n         y    n        n    y            y     y
+    HPUX11.00          y  n         y    n        n    y            y     y
+    HPUX11 SysV        y  y         y    y        n    y            y     y
+    OSF1 v5.1          y  n         y    n        y    y            y     y
+    T3E                y  y         y    y        n    n            y     y
+    SV1                y  n         y    n        n    n            y     y
+    TFLOPS             n  y (1)     n    n        n    n            y     y (4)
+    AIX-4.3            y  y         y    y        y    n            y     y
+    AIX-5.1            y  y         y    y        n    n            y     y
+    WinNT/2000         y  n         y    n        y    y            y     y
+    WinNT CW           y  n         n    n        n    n            y     y
+    FreeBSD            y  n         n    n        y    y            y     y
+    Linux 2.2          y  y (1)     y    n        y    y            y     y
+    Linux 2.4          y  y (1)     n    n        y    y            y     y
+    Linux 2.4 Intel(6) y  n         y    n        y    n            y     y
+    Linux 2.4 IA32     y  n         y    n        n    n            y     y
+    Linux 2.4 IA64     y  n         y    n        n    n            y     y
+
+
+    Platform           1.2            static-  Thread-  SRB  GASS  STREAM-
+                       compatibility  exec     safe                VFD
+    Solaris2.6         y              x        y        n    n     y
+    Solaris2.7 64      y              x        y        n    n     y
+    Solaris2.7 32      y              x        y        n    n     y
+    Solaris2.8 64      y              y        n        n    n     y
+    Solaris2.8 32      y              x        y        n    n     y
+    IRIX6.5            y              x        n        n    n     y
+    IRIX64_6.5 64      y              x        y        n    y     y
+    IRIX64_6.5 n32     y              x        y        n    y     y
+    HPUX10.20          y              y        n        n    n     y
+    HPUX11.00          y              x        n        n    n     y
+    HPUX11 SysV        y              x        n        n    n     y
+    OSF1 v5.1          y              y        n        n    n     y
+    T3E                y              y        n        n    n     y
+    SV1                y              y        n        n    n     y
+    TFLOPS             y              y        n        n    n     n
+    AIX-4.3            y              y (3)    n        n    n     y
+    AIX-5.1            y              y        n        n    n     y
+    WinNT/2000         y              y        n        n    n     n
+    WinNT CW           n              n        n        n    n     n
+    FreeBSD            y              y        y        n    n     y
+    Linux 2.2          y              y        y        n    n     y
+    Linux 2.4          y              y        y        n    n     y
+    Linux 2.4 Intel(6) y              y        n        n    n     y
+    Linux 2.4 IA32     y              y        n        n    n     y
+    Linux 2.4 IA64     y              y        n        n    n     y
+
+
+    Footnotes: (1) Using mpich.
+               (2) Using mpt and mpich.
+               (3) When configured with static-exec enabled, tests fail in 
+                   serial mode.
+               (4) No HDF4-related tools.
+               (5) Shared libraries are provided only for the C library, 
+                   except on Windows where they are provided for all languages.
+               (6) Linux 2.4 with Intel compilers.
+
+
+Known Problems
+==============
+
+    * Datasets or attributes which have a variable-length string datatype are
+      not printing correctly with h5dump and h5ls.
+
+    * When a dataset with the variable-length datatype is overwritten, 
+      the library can develop memory leaks that cause the file to become 
+      unnecessarily large.  This is planned to be fixed in the next release.
+
+    * On the SV1, the h5ls test fails due to a difference between the 
+      SV1 printf precision and the printf precision on other platforms.
+
+    * The h5dump tests may fail to match the expected output on some
+      platforms (e.g. SP2 parallel, Windows) where the error messages
+      directed to "stderr" do not appear in the "right order" with output
+      from stdout.  This is not an error.
+
+    * The --enable-static-exec configure flag fails to compile for HP-UX
+      11.00 platforms.
+
+    * The executables are always dynamic on IRIX64 6.5(64 and n32) and 
+      IRIX 6.5 even if they are configured with --enable-static-exec.
+
+    * IRIX 6.5 fails to compile if configured with --enable-static-exec.
+    
+    * The HDF5_MPI_OPT_TYPES optimization code in the parallel HDF5 will cause
+      a hang in some cases when chunked storage is used.  This is now set to
+      be off by default.  One may turn it on by setting the environment 
+      variable HDF5_MPI_OPT_TYPES to a non-zero value such as 1.
+
+    * On IA32 and IA64 systems, if you use a compiler other than GCC (such as
+      Intel's ecc or icc compilers), you will need to modify the generated
+      "libtool" program after configuration is finished. On or around line 104
+      of the libtool file, there are lines which look like:
+
+          # How to pass a linker flag through the compiler.
+          wl=""
+
+      Change these lines to this:
+
+          # How to pass a linker flag through the compiler.
+          wl="-Wl,"
+
+    * To build the Fortran library using Intel compilers, one has to 
+          x modify the source code in the fortran/src directory to remove the
+            !DEC and !MS compiler directives.
+          x The build will fail in the fortran/test directory and then in the
+            fortran/examples directory; to proceed, edit the work.pcl files in
+            those directories to contain two lines
+
+                    work.pc
+                    ../src/work.pc 
+
+    * To build the Fortran library on IA64 use
+                   setenv CC "ecc -DIA64"
+                   setenv F9X "efc -cl,work.pcl"
+            before running configure and see the steps described above.
+
+
+%%%%1.4.3%%%%   Release Information for hdf5-1.4.3 (18/Februaru/02)
+
+11.  Release information for HDF5 version 1.4.3
+==============================================================================
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.4.2 and
+HDF5-1.4.3, and contains information on the platforms tested and
+known problems in HDF5-1.4.2. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+
+- New Features
+- Bug Fixes since HDF5-1.4.2
+- Documentation
+- Platforms Tested
+- Supported Configuration Features
+- Known Problems
+
+
+New Features
+============
+  o Configuration
+  ================
+    * Can use just enable-threadsafe if the C compiler has built-in pthreads
+      support.
+
+  o Library
+  =========
+   o General
+   --------- 
+    * Added a new test to verify the information provided by the configure
+      command.
+    * Changed internal error handling macros to reduce code size of library by
+      about 10%.
+
+   o APIs
+   ------
+    * Changed prototype for H5Awrite from:
+        H5Awrite(hid_t attr_id, hid_t type_id, void *buf)
+      to:
+        H5Awrite(hid_t attr_id, hid_t type_id, const void *buf)
+    * The H5Pset_fapl_split() accepts raw and meta file names similar to the
+      syntax of H5Pset_fapl_multi() in addition to what it used to accept.
+
+    C++ API:
+    * Added operator= to class PredType
+    * Add the overloaded member function Attribute::getName to return
+      the attribute name's length as in C API.  Note that the current
+      Attribute::getName, that returns "string", is still available.
+    * Following the change in the C library, the corresponding C++ API
+      is changed from:
+        void Attribute::write( const DataType& mem_type, void *buf )
+      to:
+        void Attribute::write( const DataType& mem_type, const void *buf )
+
+   o Performance
+   -------------
+    * Added perform programs to test the HDF5 library performance.  Programs
+      are installed in directory perform/.
+    * Improved performance of byte-swapping during data conversions.
+    * Improved performance of single, contiguous hyperslabs when reading or
+      writing.
+    * Added support to read/write portions of chunks directly, if they are
+      uncompressed and too large to cache.  This should speed up I/O on chunked
+      datasets for a few more cases.  -QAK, 1/31/02
+
+  o Parallel Library
+  ==================
+    * Parallel C HDF5 now works on HP-UX platforms, Compaq clusters,
+      Linux clusters, Cplants (alpha-linux clusters).
+
+  o Tools
+  =======
+    * A helper script called ``h5cc'', which helps compilation of HDF5
+      programs, is now distributed with HDF5. See the reference manual
+      for information on how to use this feature.
+    * The H5Dumper can now dump comments associated with groups. -WCW 01-05-02
+
+  o Support for new platforms and languages
+  =========================================
+    * HDF5 C++ Library is supported on Windows platforms (shared and static)
+    * HDF5 F90 shared library is supported on Windows platforms.
+    * HDF5 C Library is supported on IA32 and IA64 platforms.
+
+
+
+Bug Fixes since HDF5-1.4.2 Release
+==================================
+
+    * Fixed a bug when reading chunked datasets where the edge of the dataset
+      would be incorrectly detected and generate an assertion failure.
+    * Fixed a bug where reading an entire dataset wasn't being handled
+      optimally when the dataset had unlimited dimensions.  Dataset is read
+      in a single low-level I/O now, instead of being broken into separate
+      pieces internally.
+    * Fixed a bug where reading or writing chunked data which needed datatype
+      conversion could result in data values getting corrupted.
+    * Fixed a bug where appending a point selection to the current selection
+      would not actually append the point when there were no points defined
+      currently.
+    * Fixed a bug where 'or'ing a hyperslab with a 'none' selection would
+      fail.  Now adds that hyperslab as the first hyperlab in the selection.
+    * Fixed a bug in the 'big' test where quota limits weren't being detected
+      properly if they caused close() to fail.
+    * Fixed a bug in internal B-tree code where a B-tree was not being copied
+      correctly.
+    * Fixed an off-by-one error in H5Sselect_valid when hyperslab selections
+      which would allow hyperslab selections which overlapped the edge of the
+      selection by one element as valid.
+    * Fixed the internal macros used to encode & decode file metadata, to avoid
+      an unaligned access warning on IA64 machines.
+    * Corrected behavior of H5Tinsert to not allow compound datatype fields to
+      be inserted past the end of the datatype.
+    * Retired the DPSS virtual file driver (--with-gridstorage configure
+      option).
+    * Fixed bug where variable-length datatypes for attributes was not working
+      correctly.
+    * Fixed bug where raw data re-allocated from the free-list would sometimes
+      overlap with the metadata accumulator and get corrupted. QAK - 1/23/02
+    * Fixed bug where a preempted chunk in the chunk data could still be
+      used by an internal pointer and cause an assertion failure or core
+      dump. QAK - 2/13/02
+    * Fixed bug where non-zero fill-value was not being read correctly from
+      certain chunked datasets when using an "all" or contiguous hyperslab
+      selection.  QAK - 2/14/02
+
+
+Documentation
+=============
+    * Documentation was updated for the hdf5-1.4.3 release.
+    * A new "HDF5 User's Guide" is under development.  See 
+      http://hdf.ncsa.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/current/.
+    * Parallel Tutorial is available at http://hdf.ncsa.uiuc.edu/HDF5/doc/Tutor/
+
+
+Platforms Tested
+================
+
+    AIX 4.3.3.0 (IBM SP powerpc)  xlc 5.0.2.0
+                                  mpcc_r 5.0.2.0
+                                  xlf 07.01.0000.0002
+                                  mpxlf 07.01.0000.0002
+    AIX 4.3 (IBM SP RS6000)       C for AIX Compiler, Version 5.0.2.0
+                                  xlf 7.1.0.2
+                                  poe 3.1.0.12 (includes mpi)
+    Cray T3E sn6711 2.0.5.57      Cray Standard C Version 6.5.0.3
+                                  Cray Fortran Version 3.5.0.4
+    Cray SV1 10.0.0.8             Cray Standard C Version 6.5.0.3 
+                                  Cray Fortran Version 3.5.0.4
+    FreeBSD 4.5                   gcc 2.95.3
+                                  g++ 2.95.3
+    HP-UX B.10.20                 HP C  HP92453-01 A.10.32.30
+                                  HP F90 v2.3
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+    HP-UX B.11.00 SysV            HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP MPI [not a product] (03/24/2000) B6060BA
+    IRIX 6.5                      MIPSpro cc 7.30
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.2m
+    Linux 2.4.4                   gcc 2.95.3
+                                  g++ 2.95.3
+    Linux 2.2.18smp               gcc 2.95.2
+                                  gcc 2.95.2 with mpich 1.2.1
+                                  g++ 2.95.2
+                                  pgf90 3.2-4
+    OSF1 V5.1                     Compaq C V6.3-028         
+                                  Compaq Fortran V5.4-1283
+    SunOS 5.7                     WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                Workshop Compilers 5.0 98/12/15 C++ 5.0 
+                                  Workshop Compilers 5.0 98/10/25 
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8/32                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          Patch 109503-07 2001/08/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 Patch
+                                        109508-04 2001/07/11
+    SunOS 5.8/64                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          Patch 109503-07 2001/08/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 Patch
+                                        109508-04 2001/07/11
+    TFLOPS r1.0.4 v4.0.8 i386     pgcc Rel 3.1-4i with mpich-1.2.1 with
+                                          local modifications
+    IA-32 Linux 2.2.10smpx        cc Intel 5.0.1
+                                  egcs-2.91.66
+    IA-64 Linux 2.4.16 ia64       gcc version 2.96 20000731
+                                  Intel(R) C++ Itanium(TM) Compiler 
+                                  for the Itanium(TM)-based applications,
+                                  Version 6.0 Beta, Build 20010905       
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+    Windows NT4.0                 MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+    Windows NT4.0                 Code Warrior 6.0
+    Windows 98                    MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+
+
+Supported Configuration Features Summary
+========================================
+
+    In the tables below
+          y  = tested and supported
+          n  = not supported or not tested in this release
+          x  = not working in this release
+         ( ) = footnote appears below second table
+
+
+    Platform       C  C         F90  F90       C++   Shared     zlib  Tools
+                      parallel       parallel        libraries
+                                                     (5)
+    Solaris2.7     y  y (1)     y    n         y     y          y     y
+    Solaris2.8 64  y  n         y    n         y     y          y     y
+    Solaris2.8 32  y  n         y    n         y     y          y     y
+    IA-64          y  n         n    n         n     n          y     y 
+    IRIX6.5        y  y (1)     n    n         n     y          y     y
+    IRIX64_6.5 64  y  y (2)     y    y         n     y          y     y
+    IRIX64_6.5 32  y  y (2)     n    n         n     y          y     y
+    HPUX10.20      y  n         y    n         n     y          y     y
+    HPUX11.00      y  y         y    n         n     y          y     y
+    HPUX11 SysV    y  y         y    n         n     y          y     y
+    DECOSF         y  n         y    n         y     y          y     y
+    T3E            y  y         y    y         n     n          y     y
+    SV1            y  n         y    n         n     n          y     y
+    TFLOPS         y  y (1)     n    n         n     n          y     y (4)
+    AIX-4.3 SP2    y  y         y    y         n     n          y     n
+    AIX-4.3 SP3    y  y         y    y         y     n          y     n
+    Win2000        y  n         y    n         y (6) y          y     y
+    Win98          y  n         y    n         y (6) y          y     y
+    WinNT          y  n         y    n         y (6) y          y     y
+    WinNT CW       y  n         n    n         n     n          y     y
+    FreeBSD        y  n         n    n         y     y          y     y
+    Linux 2.2      y  y (1)     y    n         y     y          y     y
+    Linux 2.4      y  y (1)     n    n         y     y          y     y
+
+
+    Platform       1.2            static-   Thread-  SRB  GASS	STREAM-
+                   compatibility  exec      safe                VFD
+    Solaris2.7     n              x         y        n    n     y
+    Solaris2.8 64  n              y         n        n    n     y
+    Solaris2.8 32  n              x         n        n    n     y
+    IA-64          n              n         n        n    n     y   
+    IRIX6.5        n              x         y        n    n     y
+    IRIX64_6.5 64  n              x         y        n    y     y
+    IRIX64_6.5 32  n              x         y        n    y     y
+    HPUX10.20      n              y         n        n    n     y
+    HPUX11.00      n              x         n        n    n     y
+    HPUX11 SysV    n              x         n        n    n     y
+    DECOSF         n              y         n        n    n     y
+    T3E            n              y         n        n    n     y
+    SV1            n              y         n        n    n     y
+    TFLOPS         n              y         n        n    n     n
+    AIX-4.3 SP2    n              y (3)     n        n    n     y
+    AIX-4.3 SP3    n              y         n        n    n     y
+    Win2000        n              y         n        n    n     n
+    Win98          n              y         n        n    n     n
+    WinNT          n              y         n        n    n     n
+    WinNT CW       n              n         n        n    n     n
+    FreeBSD        n              y         y        n    n     y
+    Linux 2.2      n              y         y        n    n     y
+    Linux 2.4      n              y         y        n    n     y
+
+
+    Footnotes:  (1) Using mpich.
+                (2) Using mpt and mpich.
+                (3) When configured with static-exec enabled, tests fail 
+                    in serial mode.
+                (4) No HDF4-related tools.
+                (5) Shared libraries are provided only for the C library.
+		(6) Exception of (5): DLL is available for C++ API on Windows
+
+
+Known Problems
+==============
+
+    * Datasets or attributes which have a variable-length string datatype are
+      not printing correctly with h5dump and h5ls.
+
+    * When a dataset with the variable-legth datatype is overwritten, 
+      the library can develop memory leaks that cause the file to become 
+      unnecessarily large.  This is planned to be fixed in the next release.
+
+    * On the SV1, the h5ls test fails due to a difference between the 
+      SV1 printf precision and the printf precision on other platforms.
+
+
+    * The h5dump tests may fail to match the expected output in some
+      platforms (e.g. SP2 parallel, Windows) where the error messages
+      directed to "stderr" do not appear in the "right order" with output
+      from stdout.  This is not an error.
+
+    * The --enable-static-exec configure flag fails to compile for HP-UX
+      11.00 platforms.
+
+    * The executables are always dynamic on IRIX64 6.5(64 and n32) and 
+      IRIX 6.5 even if they are configured with --enable-static-exec.
+
+    * IRIX 6.5 fails to compile if configured with --enable-static-exec.
+    
+    * The HDF5_MPI_OPT_TYPES optimization code in the parallel HDF5 will cause
+      a hang in some cases when chunked storage is used.  This is now set to
+      be off by default.  One may turn it on by setting environment variable
+      HDF5_MPI_OPT_TYPES to a non-zero value such as 1.
+
+    * On IA64 systems one has to use -DIA64 compilation flag to compile
+      h4toh5 and h5toh4 utilites. After configuration step manually modify
+      Makefile in the tools/h4toh4 and tools/h5toh4 directories to add 
+      -DIA64 to the compilation flags.
+
+    * On IA32 ansd IA64 systems, if you use a compiler other than GCC 
+      (such as Intel's ecc compiler), you will need to modify the generated
+      "libtool" program after configuration is finished. On or around line 102 
+      of the libtool file, there are lines which look like:
+
+          # How to pass a linker flag through the compiler.
+          wl=""
+
+      change the lines to this:
+
+          # How to pass a linker flag through the compiler.
+          wl="-Wl,"
+
+
+%%%%1.4.2%%%%   Release Information for hdf5-1.4.2 (31/July/01)
+
+10.   Release Information for hdf5-1.4.2 
+=================================================================
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.4.1 and
+HDF5-1.4.2, and contains information on the platforms tested and
+known problems in HDF5-1.4.2.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+
+- New Features
+- Bug Fixes since HDF5-1.4.1
+- Documentation
+- Platforms Tested
+- Supported Configuration Features
+- Known Problems
+
+
+New Features
+============
+
+    * File sizes greater than 2GB are now supported on Linux systems with
+      version 2.4.x or higher kernels.
+    * Added a global string variable H5_lib_vers_info_g which holds the
+      HDF5 library version information.  This can be used to identify
+      an hdf5 library or hdf5 application binary.
+      Also added a verification of the consistency between H5_lib_vers_info_g
+      and other version information in the source code.
+    * Parallel HDF5 now runs on the HP V2500 and HP N4000 machines.
+    * F90 API:
+        - Added aditional parameter "dims" to the h5dread_f/h5dwrite_f and
+          h5aread_f/h5awrite_f subroutines.  This parameter is a 1-D array 
+          of size 7 and contains the sizes of the data buffer dimensions. 
+          This change enables portability between Windows and UNIX platforms.
+          In previous versions of the F90 APIs, the data buffer parameters of 
+          the above functions were declared as assumed-shape arrays, which 
+          were passed to the C functions by a descriptor.  There is no 
+          portable means, however, of passing descriptors from F90 to C, 
+          causing portability problems between Windows and UNIX and among
+          UNIX platforms.  With this change, the data buffers are assumed-
+          size arrays, which can be portably passed to the C functions.
+    * F90 static library is available on Windows platforms. 
+      See INSTALL_Windows_withF90.txt for details.
+    * F90 APIs are available on HPUX 11.00 and 10.20 and IBM SP platforms.
+    * H5 <-> GIF convertor has been added. This is available under 
+      tools/gifconv. The convertor supports the ability to create animated
+      gifs as well.
+    * Verified correct operation of library on Solaris 2.8 in both 64-bit and
+      32-bit compilation modes.  See INSTALL document for instructions on
+      compiling the distribution with 64-bit support.
+    * Added support for the Metrowerks Code Warrior compiler for Windows.  
+    * For H4->H5 converter utility, added a new option to choose not to convert
+      HDF4 specified attributes(reference number, class) into HDF5 attributes.
+    * Added support chunking and compression in SDS and image in H4->H5 converter. 
+      Currently HDF5 only supports gzip compression, so by default an HDF4 file 
+      with any other compression method will be converted into an HDF5 file in 
+      gzip compression. 
+    * correct the order or reading HDF4 image array in H4->H5 conversion.  
+    * Added new parallel hdf5 tests in t_mpi.  The new test checks if the
+      filesystem or the MPI-IO can really handle greater than 2GB files.
+      If it fails, it prints information message only without failing the
+      test.
+    * Added a parallel HDF5 example examples/ph5example.c to illustrate
+      the basic way of using parallel HDF5.
+    * Added a new public macro, H5_VERS_INFO, which is a string holding
+      the HDF5 library version information.  This string is also compiled
+      into all HDF5 binary code which helps to identify the version information
+      of the binary code.  One may use the Unix strings command on the binary
+      file and looks for the pattern "HDF5 library version".
+    * Added new checking in H5check_version() to verify the five HDF5 version
+      information macros (H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE,
+      H5_VERS_SUBRELEASE and H5_VERS_INFO) are consistent.
+      
+         
+Bug Fixes since HDF5-1.4.1 Release
+==================================
+
+    * Fixed bug with non-zero userblock sizes causing raw data to not
+      write correctly.
+    * Fixed problems with Pablo build and linking with non-standard MPI I/O.
+    * Fixed build on Linux systems with --enable-static-exec flag. It now
+      works correctly.
+    * IMPORTANT: Fixed file metadata corruption bug which could cause 
+      metadata data loss in certain situations.
+    * The allocation by alignment (H5Pset_alignment) feature code somehow
+      got dropped in some 1.3.x version. Re-implemented it with "new and
+      improved" algorithm.  It keeps track of "wasted" file-fragment in
+      the free-list too.
+    * Removed limitation that the data transfer buffer size needed to be
+      set for datasets whose dimensions were too large for the 'all' 
+      selection code to handle.  Any size dimensioned datasets should be 
+      handled correctly now.
+    * Changed behavior of H5Tget_member_type to correctly emulate HDF5 v1.2.x
+      when --enable-hdf5v1_2 configure flag is enabled.
+    * Added --enable-linux-lfs flag to allow more control over whether to 
+      enable or disable large file support on Linux.
+    * Fixed various bugs releated to SDS dimensional scale conversions in H4->H5 
+      converter.
+    * Fixed a bug to correctly convert HDF4 objects with fill value into HDF5.
+    * Fixed a bug of H5pubconf.h causing repeated definitions if it is included
+      more than once.  hdf5.h now includes H5public.h which includes
+      H5pubconf.h.  Applications should #include hdf5.h which handles multiple
+      inclusion correctly.
+    * Fixed H5FDmpio.h to be C++ friendly by making Parallel HDF5 API's to be
+      external to C++.
+    * Fixed a bug in H5FD_mpio_flush() that might result in negative file seek
+      if both MPIO and Split-file drivers are used together.
+
+
+
+Documentation
+=============
+
+    * The H5T_conv_t and H5T_cdata_t structures are now properly defined
+      in the H5Tregister entry in the "H5T" section of the "HDF5 Reference 
+      Manual" and described in detail in section 12, "Data Conversions," in 
+      the "Datatypes" chapter of the "HDF5 User's Guide."
+    * The new tools h52gif and gif2h5 have been added to the "Tools" section
+      of the Reference Manual.
+    * A "Freespace Management" section has been added to the "Performance" 
+      chapter of the User's Guide.
+    * Several user-reported bugs have been fixed since Release 1.4.1.
+    * The "HDF5 Image and Palette Specification" (in the "HDF5 Application
+      Developer's Guide") has been heavily revised.  Based on extensive user 
+      feedback and input from visualization software developers, Version 1.2 
+      of the image specification is substantially different from prior 
+      versions.
+
+
+Platforms Tested
+================
+
+    AIX 4.3.3.0 (IBM SP powerpc)  xlc 3.6.6.0
+                                  mpcc_r 3.6.6.0
+                                  xlf 07.01.0000.0002
+                                  mpxlf 07.01.0000.0002
+    AIX 4.3 (IBM SP RS6000)       C for AIX Compiler, Version 5.0.2.0
+                                  xlf 7.1.0.2
+                                  poe 2.4.0.14 (includes mpi)
+    Cray T3E sn6711 2.0.5.49a     Cray Standard C Version 6.5.0.1
+    Cray SV1 10.0.0.2             Cray Standard C Version 6.5.0.1  
+                                  Cray Fortran Version 3.5.0.1
+    FreeBSD 4.3                   gcc 2.95.3
+                                  g++ 2.95.3
+    HP-UX B.10.20                 HP C  HP92453-01 A.10.32.30
+                                  HP F90 v2.3
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+    HP-UX B.11.00 SysV            HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+    IRIX 6.5                      MIPSpro cc 7.30
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.2m
+    Linux 2.4.4                   gcc 2.95.3
+                                  g++ 2.95.3
+    Linux 2.2.18smp               gcc 2.95.2
+                                  gcc 2.95.2 with mpich 1.2.1
+                                  g++ 2.95.2
+                                  pgf90 3.2-4
+    OSF1 V4.0                     DEC-V5.2-040 on Digital UNIX V4.0 (Rev 564)
+                                  Digital Fortran 90 V4.1-270
+    SunOS 5.6                     WorkShop Compilers 5.0 98/12/15 C 5.0 
+     (Solaris 2.6)                WorkShop Compilers 5.0 98/10/25 FORTRAN 90 
+                                          2.0 Patch 107356-04
+    SunOS 5.7                     WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                Workshop Compilers 5.0 98/12/15 C++ 5.0 
+                                  Workshop Compilers 5.0 98/10/25 FORTRAN 90
+                                          2.0 Patch 107356-04 
+    SunOS 5.8/32                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          2000/09/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 2000/09/11
+    SunOS 5.8/64                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          2000/09/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 2000/09/11
+    TFLOPS r1.0.4 v4.0.7 i386     pgcc Rel 3.1-4i with mpich-1.2.1 with
+                                          local modifications
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+    Windows NT4.0                 MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+    Windows NT4.0                 Code Warrior 6.0
+    Windows 98                    MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+
+
+Supported Configuration Features Summary
+========================================
+
+    In the tables below
+          y  = tested and supported
+          n  = not supported or not tested in this release
+          x  = not working in this release
+         ( ) = footnote appears below second table
+
+
+    Platform       C  C         F90  F90       C++  Shared     zlib  Tools
+                      parallel       parallel       libraries
+                                                    (5)
+    Solaris2.6     y  n         y    n         y    y          y     y
+    Solaris2.7     y  y (1)     y    n         y    y          y     y
+    Solaris2.8 64  y  n         n    n         y    y          y     y
+    Solaris2.8 32  y  n         y    n         y    y          y     y
+    IRIX6.5        y  y (1)     n    n         n    y          y     y
+    IRIX64_6.5 64  y  y (2)     y    y         n    y          y     y
+    IRIX64_6.5 32  y  y (2)     n    n         n    y          y     y
+    HPUX10.20      y  n         y    n         n    y          y     y
+    HPUX11.00      y  n         y    n         n    y          y     y
+    HPUX11 SysV    y  n         y    n         n    y          y     y
+    DECOSF         y  n         y    n         n    y          y     y
+    T3E            y  y         y    y         n    n          y     y
+    SV1            y  n         y    n         n    n          y     y
+    TFLOPS         y  y (1)     n    n         n    n          y     y (4)
+    AIX-4.3 SP2    y  y         y    y         n    n          y     n
+    AIX-4.3 SP3    y  y         y    y         n    n          y     n
+    Win2000        y  n         n    n         n    y          y     y
+    Win98          y  n         y    n         n    y          y     y
+    WinNT          y  n         y    n         n    y          y     y
+    WinNT CW       y  n         n    n         n    n          y     y
+    FreeBSD        y  n         n    n         y    y          y     y
+    Linux 2.2      y  y (1)     y    n         y    y          y     y
+    Linux 2.4      y  y (1)     n    n         y    y          y     y
+
+
+    Platform       1.2            static-   Thread-  SRB  GASS	STREAM-
+                   compatibility  exec      safe                VFD
+    Solaris2.6     y              x         n        n    n     y
+    Solaris2.7     y              x         y        n    n     y
+    Solaris2.8 64  y              y         n        n    n     y
+    Solaris2.8 32  y              x         n        n    n     y
+    IRIX6.5        y              x         y        n    n     y
+    IRIX64_6.5 64  y              x         n        n    n     y
+    IRIX64_6.5 32  y              x         n        n    n     y
+    HPUX10.20      y              y         n        n    n     y
+    HPUX11.00      y              x         n        n    n     y
+    HPUX11 SysV    y              x         n        n    n     y
+    DECOSF         y              y         n        n    n     y
+    T3E            y              y         n        n    n     y
+    SV1            y              y         n        n    n     y
+    TFLOPS         y              y         n        n    n     n
+    AIX-4.3 SP2    y              y (3)     n        n    n     y
+    AIX-4.3 SP3    y              y         n        n    n     y
+    Win2000        y              y         n        n    n     n
+    Win98          n              y         n        n    n     n
+    WinNT          y              y         n        n    n     n
+    WinNT CW       n              n         n        n    n     n
+    FreeBSD        y              y         n        n    n     y
+    Linux 2.2      y              y         y        n    n     y
+    Linux 2.4      y              y         y        n    n     y
+
+
+    Footnotes:  (1) Using mpich.
+                (2) Using mpt and mpich.
+                (3) When configured with static-exec enabled, tests fail 
+                    in serial mode.
+                (4) No HDF4-related tools.
+                (5) Shared libraries are provided only for the C library.
+
+
+Known Problems
+==============
+
+    * When a dataset with the variable-legth datatype is overwritten, 
+      the library can develop memory leaks that cause the file to become 
+      unnecessarily large.  This is planned to be fixed in the next release.
+
+    * On the SV1, the h5ls test fails due to a difference between the 
+      SV1 printf precision and the printf precision on other platforms.
+
+    * The h5dump tests may fail to match the expected output in some
+      platforms (e.g. SP2 parallel, Windows) where the error messages
+      directed to "stderr" do not appear in the "right order" with output
+      from stdout.  This is not an error.
+
+    * The --enable-static-exec configure flag fails to compile for HP-UX
+      11.00 platforms.
+
+    * The executables are always dynamic on IRIX64 6.5(64 and n32) and 
+      IRIX 6.5 even if they are configured with --enable-static-exec.
+
+    * IRIX 6.5 fails to compile if configured with --enable-static-exec.
+    
+    * For 24-bit image conversion from H4->H5, the current conversion is
+      not consistent with HDF5 image specification. 
+
+    * In some cases, and SDS with an UNLIMITED dimension that has not
+      been written (current size = 0) is not converted correctly.
+
+    * After "make install" or "make install-doc" one may need to reload
+      the source from the tar file before doing another build.
+
+    * The HDF5_MPI_OPT_TYPES optimization code in the parallel HDF5 will cause
+      a hang in some cases when chunked storage is used.  This is now set to
+      be off by default.  One may turn it on by setting environment variable
+      HDF5_MPI_OPT_TYPES to a non-zero value such as 1.
+
+%%%%1.4.1%%%%   Release Information for hdf5-1.4.1 (April/01)
+
+9.   Release Information for hdf5-1.4.1 (April/01)
+=====================================================================
+
+
+ 
+                       HDF5 Release 1.4.1
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.4.0 and
+HDF5-1.4.1, and contains information on the platforms tested and
+known problems in HDF5-1.4.1.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+
+- New Features
+- Bug Fixes since HDF5-1.4.0
+- Documentation
+- Platforms Tested
+- Supported Configuration Features
+- Known Problems
+
+
+New Features
+============
+
+   * XML output option for h5dump utility.
+  
+     A new option --xml to output data in XML format has been added. The
+     XML output contains a complete description of the file, marked up in
+     XML. 
+
+     The XML conforms to the HDF5 Document Type Definition (DTD), which
+     is available at:
+
+       http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.dtd
+
+     The XML output is suitable for use with other tools, including the
+     Java Tools:
+
+       http://hdf.ncsa.uiuc.edu/java-hdf5-html
+
+
+Bug Fixes since HDF5-1.4.0 Release
+==================================
+
+   * h4toh5 utility: conversion of images is fixed
+
+     Earlier releases of the h4toh5 utility produced images that did not
+     correctly conform to the HDF5 Image and Palette Specification.
+
+       http://hdf.ncsa.uiuc.edu/HDF5/doc/ImageSpec.html
+
+     Several required HDF5 attributes are omitted, and the dataspace
+     is reversed (i.e., the ht. and width of the image dataset is
+     incorrectly described.)  For more information, please see:
+
+       http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageDetails.htm
+
+   * Fixed bug with contiguous hyperslabs not being detected, causing
+     slower I/O than necessary.
+   * Fixed bug where non-aligned hyperslab I/O on chunked datasets was
+     causing errors during I/O
+   * The RCSID string in H5public.h was causing the C++ compiling problem
+     because when it was included multiple times, C++ did not like
+     multiple definitions of the same static variable. All occurance of
+     RCSID definition are removed since we have not used it consistently
+     before.
+
+
+Documentation
+=============
+
+    PDF and Postscript versions of the following documents are available 
+    for this release:
+        Document                                 Filename
+        --------                                 --------
+        Introduction to HDF5                     H5-R141-Introduction.pdf
+        HDF5 Reference Manual                    H5-R141-RefManual.pdf 
+        C++ APIs to HDF5 documents               H5-R141-Cplusplus.pdf
+        Fortran90 APIs to HDF5 documents         H5-R141-Fortran90.pdf
+
+        PDF and Postscript files containing      H5-R141-DocSet.pdf
+            all of the above                     H5-R141-DocSet.ps
+
+    These files are not included in this distribution, but are available 
+    via the Web or FTP at the following locations:
+        http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/
+        ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/docs/
+
+    While these documents are labeled Release 1.4.1, they describe 
+    Release 1.4.0 as well.  
+
+
+Platforms Tested
+================
+
+Due to the nature of this release only C, C++ libraries and tools were tested.
+
+    AIX 4.3.3.0 (IBM SP powerpc)  xlc 3.6.6
+                                  mpcc_r 3.6.6
+    Cray T3E sn6711 2.0.5.47      Cray Standard C Version 6.5.0.0
+    Cray SV1 10.0.0.8             Cray Standard C Version 6.5.0.0
+    FreeBSD 4.3                   gcc 2.95.2
+    HP-UX B.10.20                 HP C  HP92453-01 A.10.32.30
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20
+    IRIX 6.5                      MIPSpro cc 7.30
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1m
+    Linux 2.2.18smp               gcc-2.95.2
+                                  g++ 2.95.2
+    OSF1 V4.0                     DEC-V5.2-040
+                                  Digital Fortran 90 V4.1-270
+    SunOS 5.6                     WorkShop Compilers 5.0 98/12/15 C 5.0 
+     (Solaris 2.6)                
+
+    SunOS 5.7                     WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                Workshop Compilers 5.0 98/12/15 C++ 5.0
+    TFLOPS r1.0.4 v4.0            mpich-1.2.1 with local changes
+    Windows NT4.0, 2000 (NT5.0)   MSVC++ 6.0
+    Windows 98                    MSVC++ 6.0
+
+
+Supported Configuration Features Summary
+========================================
+
+    * See "Supported Configuration Features Summary" section for the HDF5
+      1.4.0 release in the HISTORY.txt file.
+
+Known Problems
+==============
+
+    * The h5dump tests may fail to match the expected output in some
+      platforms (e.g. SP2 parallel, Windows) where the error messages
+      directed to "stderr" do not appear in the "right order" with output
+      from stdout.  This is not an error.
+
+    * The --enable-static-exec configure flag fails to compile for HP-UX
+      11.00 platforms.
+
+    * The executable are always dynamic on IRIX64 6.5(64 and n32) and 
+      IRIX 6.5 even if they are configured with --enable-static-exec.
+
+    * The shared library failed compilation on IRIX 6.5.
+    
+    * After "make install" or "make install-doc" one may need to reload the source
+      from the tar file before doing another build.
+
+    * See "Known problems" section for the HDF5 1.4.0 release in the
+      HISTORY.txt file.
+
+%%%%1.4.0%%%%   Release Information for hdf5-1.4.0 (2/22/01)
+
+8.  Release Information for hdf5-1.4.0
+===================================================================
+ 
+                       HDF5 Release 1.4.0
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.2.0 and
+HDF5-1.4.0, and contains information on the platforms tested and
+known problems in HDF5-1.4.0. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+
+- New Features
+- h4toh5 Utility 
+- F90 Support
+- C++ Support
+- Pablo Support 
+- Bug Fixes since HDF5-1.2.0 
+- Bug Fixes since HDF5-1.4.0-beta2
+- Bug Fixes since HDF5-1.4.0
+- Documentation
+- Platforms Tested
+- Supported Configuration Features
+- Known Problems
+
+
+New Features
+============
+   * The Virtual File Layer, VFL, was added to replace the old file
+     drivers. It also provides an API for user defined file drivers.
+   * New features added to snapshots. Use 'snapshot help' to see a
+     complete list of features.
+   * Improved configure to detect if MPIO routines are available when
+     parallel mode is requested.
+   * Added Thread-Safe support. Phase I implemented. See:
+
+        http://hdf.ncsa.uiuc.edu/HDF5/papers/mthdf/MTHDFpaper.htm
+
+     for more details.
+   * Added data sieve buffering to raw data I/O path. This is enabled
+     for all VFL drivers except the mpio & core drivers. Setting the
+     sieve buffer size is controlled with the new API function,
+     H5Pset_sieve_buf_size(), and retrieved with H5Pget_sieve_buf_size().
+   * Added new Virtual File Driver, Stream VFD, to send/receive entire
+     HDF5 files via socket connections.
+   * As parts of VFL, HDF-GASS and HDF-SRB are also added to this
+     release. To find out details, please read INSTALL_VFL file. 
+   * Increased maximum number of dimensions for a dataset (H5S_MAX_RANK)
+     from 31 to 32 to align with HDF4 & netCDF.
+   * Added 'query' function to VFL drivers.  Also added 'type' parameter to
+     VFL 'read' & 'write' calls, so they are aware of the type of data
+     being accessed in the file.  Updated the VFL document also.
+   * A new h4toh5 utility, to convert HDF4 files to analogous HDF5 files.
+   * Added a new array datatype to the datatypes which can be created.  
+     Removed "array fields" from compound datatypes (use an array datatype 
+     instead).
+   * Parallel HDF5 works correctly with mpich-1.2.1 on Solaris, SGI, Linux.
+   * You can now install the HDF5 documentation using the
+     ``make install-doc'' command. The documentation is installed in the
+     $(prefix)/doc directory where $(prefix) is the prefix specified by
+     the (optional) ``--prefix'' flag during configuration.
+   * HDF5 can operate correctly in the OpenMP environment in a limited way.
+     Check doc/html/TechNotes/openmp-hdf5.html for details.
+
+
+h4toh5 Utility 
+==============
+    The h4toh5 utility is a new utility that converts an HDF4 file to an 
+    HDF5 file.  For details, see the document, "Mapping HDF4 Objects to 
+    HDF5 Objects":
+       http://hdf.ncsa.uiuc.edu/HDF5/papers/H4-H5MappingGuidelines.pdf
+
+    Known Bugs:
+
+      The h4toh5 utility produces images that do not correctly conform
+      to the HDF5 Image and Palette Specification. 
+
+        http://hdf.ncsa.uiuc.edu/HDF5/doc/ImageSpec.html
+
+      Several required HDF5 attributes are omitted, and the dataspace 
+      is reversed (i.e., the ht. and width of the image dataset is 
+      incorrectly described.)  For more information, please see:
+
+        http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageDetails.html
+ 
+      This bug has been fixed for the snapshot of hdf5 1.4 release. March 12th,2001
+
+    Known Limitations of the h4toh5 release
+    ---------------------------------------------
+
+    1. Error handlings
+
+       h4toh5 utility will print out an error message when an error occurs.
+
+    2. String Datatype
+
+    HDF4 has no 'string' type. String valued data are usually defined as
+    an array of 'char' in HDF4. The h4toh5 utility will generally map
+    these to HDF5 'String' types rather than array of char, with the
+    following additional rules:
+
+       * For the data of an HDF4 SDS, image, and palette, if the data is
+         declared 'DFNT_CHAR8' it will be assumed to be integer and will
+         be an H5T_INTEGER type.
+       * For attributes of any HDF4 object, data of type 'DFNT_CHAR8'
+         will be converted to an HDF5 'H5T_STRING' type.
+       * For an HDF4 Vdata, it is difficult to determine whether data 
+         of type 'DFNT_CHAR8' is intended to be bytes or characters. The
+         h4toh5 utility will consider them to be C characters, and will
+         convert them to an HDF5 'H5T_STRING' type.
+
+
+    3. Compression, Chunking and External Storage
+
+    Chunking is supported, but compression and external storage is not.
+
+    An HDF4 object that uses chunking will be converted to an HDF5 file
+    with analogous chunked storage.
+
+    An HDF4 object that uses compression will be converted to an
+    uncompressed HDF5 object.  
+
+    An HDF4 object that uses external storage will be converted to an
+    HDF5 object without external storage.  
+
+    4. Memory Use
+
+    This version of the h4toh5 utility copies data from HDF4 objects
+    in a single read followed by a single write to the HDF5 object. For
+    large objects, this requires a very large amount of memory, which may
+    be extremely slow or fail on some platforms.
+
+    Note that a dataset that has only been partly written will
+    be read completely, including uninitialized data, and all the
+    data will be written to the HDF5 object.
+
+    5. Platforms
+
+    The h4toh5 utility requires HDF5-1.4.0 and HDF4r1.4
+
+    h4toh5 utility has been tested on all platforms listed below (see 
+    section "Platforms Tested") except TFLOPS.
+
+ 
+F90 Support
+===========
+    This is the first release of the HDF5 Library with fully integrated 
+    F90 API support.  The Fortran Library is created when the 
+    --enable-fortran flag is specified during configuration.
+
+    Not all F90 subroutines are implemented. Please refer to the HDF5 
+    Reference Manual for more details.
+   
+    F90 APIs are available for the Solaris 2.6 and 2.7, Linux, DEC UNIX, 
+    T3E, SV1 and O2K (64 bit option only) platforms. The Parallel version of 
+    the HDF5 F90 Library is supported on the O2K and T3E platforms.
+
+    Changes since the last prototype release (July 2000)
+    ----------------------------------------------------
+       * h5open_f and h5close_f must be called instead of h5init_types and 
+         h5close_types.
+
+       * The following subroutines are no longer available: 
+
+             h5pset_xfer_f
+             h5pget_xfer_f
+             h5pset_mpi_f
+             h5pget_mpi_f
+             h5pset_stdio_f
+             h5pget_stdio_f
+             h5pset_sec2_f
+             h5pget_sec2_f
+             h5pset_core_f
+             h5pget_core_f
+             h5pset_family_f
+             h5pget_family_f
+             
+       * The following functions have been added:
+
+             h5pset_fapl_mpio_f
+             h5pget_fapl_mpio_f
+             h5pset_dxpl_mpio_f
+             h5pget_dxpl_mpio_f
+        
+       * In the previous HDF5 F90 releases, the implementation of object 
+         references and dataset region references was not portable. This 
+         release introduces a portable implementation, but it also introduces 
+         changes to the read/write APIs that handle references.  If object or 
+         dataset region references are written or read to/from an HDF5 file, 
+         h5dwrite_f and h5dread_f must use the extra parameter, n, for the 
+         buffer size:
+
+            h5dwrite(read)_f(dset_id, mem_type_id, buf, n, hdferr, &
+                                                       ^^^ 
+                             mem_space_id, file_space_id, xfer_prp)
+
+         For other datatypes the APIs were not changed. 
+              
+             
+C++ Support
+===========
+    This is the first release of the HDF5 Library with fully integrated 
+    C++ API support. The HDF5 C++ library is built when the --enable-cxx
+    flag is specified during configuration.
+
+    Check the HDF5 Reference Manual for available C++ documentation.
+
+    C++ APIs are available for Solaris 2.6 and 2.7, Linux, and FreeBSD. 
+
+
+Pablo Support
+=============
+    This version does not allow proper building of the Pablo-instrumented
+    version of the library.  A version supporting the pablo build is
+    available on the Pablo Website at 
+    www-pablo.cs.uiuc.edu/pub/Pablo.Release.5/HDFLibrary/hdf5_v1.4.tar.gz
+
+
+Bug Fixes since HDF5-1.2.0
+==========================
+
+Library
+-------
+   * The function H5Pset_mpi is renamed as H5Pset_fapl_mpio.
+   * Corrected a floating point number conversion error for the Cray J90
+     platform. The error did not convert the value 0.0 correctly.
+   * Error was fixed which was not allowing dataset region references to
+     have their regions retrieved correctly.
+   * Corrected a bug that caused non-parallel file drivers to fail in
+     the parallel version.
+   * Added internal free-lists to reduce memory required by the library
+     and H5garbage_collect API function
+   * Fixed error in H5Giterate which was not updating the "index"
+     parameter correctly.
+   * Fixed error in hyperslab iteration which was not walking through the
+     correct sequence of array elements if hyperslabs were staggered in a
+     certain pattern
+   * Fixed several other problems in hyperslab iteration code.
+   * Fixed another H5Giterate bug which was causes groups with large
+     numbers of objects in them to misbehave when the callback function
+     returned non-zero values.
+   * Changed return type of H5Aiterate and H5A_operator_t typedef to be
+     herr_t, to align them with the dataset and group iterator functions.
+   * Changed H5Screate_simple and H5Sset_extent_simple to not allow
+     dimensions of size 0 with out the same dimension being unlimited.
+   * QAK - 4/19/00 - Improved metadata hashing & caching algorithms to
+     avoid many hash flushes and also remove some redundant I/O when
+     moving metadata blocks in the file.
+   * The "struct(opt)" type conversion function which gets invoked for
+     certain compound datatype conversions was fixed for nested compound
+     types. This required a small change in the datatype conversion
+     function API.
+   * Re-wrote lots of the hyperslab code to speed it up quite a bit.
+   * Added bounded garbage collection for the free lists when they run
+     out of memory and also added H5set_free_list_limits API call to
+     allow users to put an upper limit on the amount of memory used for
+     free lists.
+   * Checked for non-existent or deleted objects when dereferencing one
+     with object or region references and disallow dereference.
+   * "Time" datatypes (H5T_UNIX_D*) were not being stored and retrieved
+     from object headers correctly, fixed now.
+   * Fixed H5Dread or H5Dwrite calls with H5FD_MPIO_COLLECTIVE requests
+     that may hang because not all processes are transfer the same amount
+     of data. (A.K.A. prematured collective return when zero amount data
+     requested.) Collective calls that may cause hanging is done via the
+     corresponding MPI-IO independent calls.
+   * If configure with --enable-debug=all, couple functions would issue
+     warning messages to "stderr" that the operation is expensive time-wise.
+     This messed up applications (like testings) that did not expect the
+     extra output. It is changed so that the warning will be printed only
+     if the corresponding Debug key is set.
+
+Configuration
+-------------
+   * The hdf5.h include file was fixed to allow the HDF5 Library to be
+     compiled with other libraries/applications that use GNU autoconf. 
+   * Configuration for parallel HDF5 was improved. Configure now attempts
+     to link with libmpi.a and/or libmpio.a as the MPI libraries by
+     default. It also uses "mpirun" to launch MPI tests by default. It
+     tests to link MPIO routines during the configuration stage, rather
+     than failing later as before. One can just do "./configure
+     --enable-parallel" if the MPI library is in the system library.
+   * Added support for pthread library and thread-safe option.
+   * The libhdf5.settings file shows the correct machine byte-sex.
+   * Added option "--enable-stream-vfd" to configure w/o the Stream VFD.
+     For Solaris, added -lsocket to the LIBS list of libraries.
+
+Tools
+-----
+   * h5dump now accepts both short and long command-line parameters:
+         -h, --help          Print a usage message and exit
+         -B, --bootblock     Print the content of the boot block
+         -H, --header        Print the header only; no data is displayed
+         -i, --object-ids    Print the object ids
+         -V, --version       Print version number and exit
+         -a P, --attribute=P Print the specified attribute
+         -d P, --dataset=P   Print the specified dataset
+         -g P, --group=P     Print the specified group and all members
+         -l P, --soft-link=P Print the value(s) of the specified soft link
+         -o F, --output=F    Output raw data into file F
+         -t T, --datatype=T  Print the specified named data type
+         -w #, --width=#     Set the number of columns
+
+     P - is the full path from the root group to the object.
+     T - is the name of the data type.
+     F - is a filename.
+     # - is an integer greater than 1.
+   * A change from the old way command line parameters were interpreted
+     is that multiple attributes, datasets, groups, soft-links, and
+     object-ids cannot be specified with just one flag but you have to
+     use a flag with each object. I.e., instead of doing this:
+
+       h5dump -a /attr1 /attr2 foo.h5
+
+     do this:
+
+       h5dump -a /attr1 -a /attr2 foo.h5
+
+     The cases are similar for the other object types.
+   * h5dump correctly displays compound datatypes.
+   * Corrected an error in h5toh4 which did not convert the 32bits
+     int from HDF5 to HDF4 correctly for the T3E platform.
+   * h5dump correctly displays the committed copy of predefined types
+     correctly.
+   * Added an option, -V, to show the version information of h5dump.
+   * Fixed a core dumping bug of h5toh4 when executed on platforms like 
+     TFLOPS.
+   * The test script for h5toh4 used to not able to detect the hdp
+     dumper command was not valid.  It now detects and reports the
+     failure of hdp execution.
+   * Merged the tools with the 1.2.2 branch. Required adding new
+     macros, VERSION12 and VERSION13, used in conditional compilation.
+     Updated the Windows project files for the tools.            
+   * h5dump displays opaque and bitfield data correctly.
+   * h5dump and h5ls can browse files created with the Stream VFD
+     (eg. "h5ls <hostname>:<port>").
+   * h5dump has a new feature "-o <filename>" which outputs the raw data
+     of the dataset into ascii text file <filename>.
+   * h5toh4 used to converts hdf5 strings type to hdf4 DFNT_INT8 type.
+     Corrected to produce hdf4 DFNT_CHAR type instead.
+   * h5dump and h5ls displays array data correctly.
+
+
+Bug Fixes since HDF5-1.4.0-beta2
+================================
+   * Fixed a bug in the conversion from a little endian double to a big 
+     endian float in some special cases.
+   * Corrected configuration error which was not including compression 
+     support correctly. 
+   * Cleaned up lots of warnings.
+   * Changed a few h5dump command line switches and added long versions of
+     the switches.
+   * Changed parameters for H5Tconvert, H5Pset_bufer and H5Pget_buffer from
+     size_t to hsize_t
+   * Fixed fairly obscure bug in hyperslab I/O which could (in rare cases)
+     not copy all the data during a transfer.
+   * Removed ragged array code from library.
+   * F90 library and module files are installed properly now on all supported 
+     platforms.
+
+
+Bug Fixes since HDF5-1.4.0 Release
+==================================
+
+   * Fixed bug with contiguous hyperslabs not being detected, causing
+     slower I/O than necessary.
+   * Fixed bug where non-aligned hyperslab I/O on chunked datasets was
+     causing errors during I/O
+   * Implemented XML support in h5dump.
+
+
+Documentation
+=============
+   * A new document summarizing the changes in the library leading up to 
+     the current release has been added: 
+           HDF5 Software Changes from Release to Release
+     This document is in the Application Developer's Guide and is of 
+     particular interest to developers who must keep an application 
+     synchronized with the library.
+   * The documentation for the Fortran90 and C++ APIs is linked to the
+     opening page of the Reference Manual.  Fortran90 functions are 
+     individually referenced from the corresponding C functions through-
+     out the Reference Manual.
+   * User's Guide and Reference Manual were updated to reflect changed 
+     function syntax and to fix reported bugs. 
+   * Functions that are new at this release were added to the Reference 
+     Manual.  
+   * Functions that have been removed from the library were removed from 
+     the User's Guide and the Reference Manual.
+   * PostScript and PDF versions of the Release 1.4 document set are 
+     not available at the time of Release 1.4.0.
+
+   
+Platforms Tested
+================
+    AIX 4.3.3.0 (IBM SP powerpc)  xlc 3.6.6
+                                  mpcc_r 3.6.6
+    Cray T3E sn6711 2.0.5.45      Cray Standard C Version 6.4.0.0
+                                  Cray Fortran Version 3.4.0.2
+    Cray SV1 sn9605 10.0.0.7      Cray Standard C Version 6.4.0.0
+                                  Cray Fortran Version 3.4.0.2
+    FreeBSD 4.2                   gcc 2.95.2
+                                  g++ 2.95.2
+    HP-UX B.10.20                 HP C  HP92453-01 A.10.32.30
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.00.13
+    IRIX 6.5                      MIPSpro cc 7.30
+                                  mpich-1.2.1
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1m
+                                  mpt.1.4.0.2
+                                  mpich-1.2.1
+    Linux 2.2.16-3smp             gcc-2.95.2
+                                  g++ 2.95.2
+                                  pgf90 3.1-3
+                                  mpich-1.2.1
+    OSF1 V4.0                     DEC-V5.2-040
+                                  Digital Fortran 90 V4.1-270
+    SunOS 5.6                     WorkShop Compilers 5.0 98/12/15 C 5.0 
+    (Solaris 2.6)                 WorkShop Compilers 5.0 99/10/25 Fortran 90
+                                         2.0 Patch 107356-04
+                                  Workshop Compilers 5.0 98/12/15 C++ 5.0
+    SunOS 5.7                     WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                WorkShop Compilers 5.0 99/10/25 Fortran 90
+                                         2.0 Patch 107356-04
+                                  Workshop Compilers 5.0 98/12/15 C++ 5.0
+                                  mpich-1.2.1
+    SunOS 5.5.1                   gcc-2.7.2 
+     (Solaris 2.5.1 (x86))
+    TFLOPS r1.0.4 v4.0            mpich-1.2.1 with local changes
+    Windows NT4.0, 2000 (NT5.0)   MSVC++ 6.0
+    Windows 98                    MSVC++ 6.0
+
+
+Supported Configuration Features Summary
+========================================
+    In the tables below
+          y  = tested and supported
+          n  = not supported or not working in this release
+         ( ) = footnote appears below table
+
+    Platform       C   C         F90  F90       C++  Shared     zlib   Tools
+                       parallel       parallel       libraries
+    Solaris2.6     y   n         y    n         y    y          y      y
+    Solaris2.7     y   y (1)     y    n         y    y          y      y
+    Solarisx86     y   n         n    n         n    y          y      y
+    IRIX6.5        y   y (1)     n    n         n    n          y      y
+    IRIX64_6.5 64  y   y (2)     y    y         n    y          y      y
+    IRIX64_6.5 32  y   y (2)     n    n         n    y          y      y
+    HPUX10.20      y   n         n    n         n    y          y      y
+    DECOSF         y   n         y    n         n    y          y      y
+    T3E            y   y         y    y         n    n          y      y
+    SV1            y   n         y    n         n    n          y      y
+    TFLOPS         y   y (1)     n    n         n    n          y      y (4)
+    AIX-4.3        y   y         n    n         n    n          y      n
+    Win2000        y   n         n    n         n    y          y      y
+    Win98          y   n         n    n         n    y          y      y
+    WinNT          y   n         n    n         n    y          y      y
+    FreeBSD        y   n         n    n         y    y          y      y
+    Linux          y   y (1)     y    n         y    y          y      y
+
+
+    Platform       1.2            static-   Thread-  SRB  GASS  STREAM-
+                   compatibility  exec      safe                VFD
+    Solaris2.6     y              n         n        n    n     y
+    Solaris2.7     y              n         y        n    n     y
+    Solarisx86     y              n         n        n    n     y
+    IRIX6.5        y              n         y        n    n     y
+    IRIX64_6.5 64  y              n         n        n    n     y
+    IRIX64_6.5 32  y              n         n        n    n     y
+    HPUX10.20      y              y         n        n    n     y
+    DECOSF         y              y         n        n    n     y
+    T3E            y              y         n        n    n     y
+    SV1            y              y         n        n    n     y
+    TFLOPS         y              y         n        n    n     n
+    AIX-4.3        y              y (3)     n        n    n     y
+    Win2000        y              y         n        n    n     n
+    Win98          y              y         n        n    n     n
+    WinNT          y              y         n        n    n     n
+    FreeBSD        y              y         n        n    n     y
+    Linux          y              n         y        n    n     y
+
+    Footnotes:  (1) Using mpich.
+                (2) Using mpt and mpich.
+                (3) When configured with static-exec enabled, tests fail 
+                    in serial mode.
+                (4) No HDF4-related tools.
+
+
+Known Problems
+==============
+   * The stream-vfd test uses ip port 10007 for testing.  If another 
+     application is already using that port address, the test will hang 
+     indefinitely and has to be terminated by the kill command.  To try the 
+     test again, change the port address in test/stream_test.c to one not 
+     being used in the host.
+
+   * The --enable-static-exec configure flag fails to compile for Solaris
+     platforms. This is due to the fact that not all of the system
+     libraries on Solaris are available in a static format.
+
+     The --enable-static-exec configure flag also fails to correctly compile
+     on Linux platforms using the gcc-2.95.2 compiler.
+   
+     The --enable-static-exec configure flag also fails to correctly compile
+     on IBM SP2 platform for the serial mode.  The parallel mode works fine
+     with this option.
+
+     The compilation fails if configured with --enable-static-exec on IRIX 6.5.
+
+     The executable files in hdf5/bin are dynamic-linked for IRIX64 6.5(64 and
+     n32 modes) and IRIX 6.5, even though they are compiled with static library.
+  
+     It is suggested that you don't use this option on these platforms
+     during configuration.
+
+   * testhdf5 got bus error with configuration options --prefix and --with-hdf4
+     on IRIX 6.5.
+
+   * With the gcc 2.95.2 compiler, HDF 5 uses the `-ansi' flag during
+     compilation. The ANSI version of the compiler complains about not being
+     able to handle the `long long' datatype with the warning:
+
+           warning: ANSI C does not support `long long'
+  
+     This warning is innocuous and can be safely ignored.
+
+   * SunOS 5.6 with C WorkShop Compilers 4.2:  Hyperslab selections will 
+     fail if library is compiled using optimization of any level.
+
+   * When building hdf5 tools and applications on windows platform, a linking
+     warning: defaultlib "LIBC" conflicts with use of other libs will appear
+     on debug version when running VC++6.0. This warning doesn't affect building
+     and testing hdf5 applications. We will continue investigating this.
+
+   * h5toh4 converter fails two cases(tstr.h5 and tmany.h5) for release dll 
+     version on windows 2000 and NT.  The reason is possibly due to Windows NT 
+     DLL convention on freeing memory. It seems that memory cannot be freed
+     across library or DLL. It is still under investigation.
+
+   * HDF-GASS testings and testhdf5 in the test directory will get bus error if
+     the configured with --with-gass.
+
+   * HDF-SRB testing got segmentation error on Solaris 2.7.
+    
+   * The Stream VFD was not tested yet under Windows.
+     It is not supported in the TFLOPS machine.
+
+   * Shared library option is broken for IBM SP and some Origin 2000 platforms.
+     One needs to run ./configure with '--disable-shared --enable-static'.
+
+   * The ./dsets tests failed in the TFLOPS machine if the test program,
+     dsets.c, is compiled with the -O option.  The hdf5 library still works
+     correctly with the -O option.  The test program works fine if it is
+     compiled with -O1 or -O0.  Only -O (same as -O2) causes the test
+     program to fail.
+
+   * Certain platforms give false negatives when testing h5ls:
+       - Solaris x86 2.5.1, Cray T3E and Cray J90 give errors during testing
+         when displaying object references in certain files.  These are benign 
+         differences due to the difference in sizes of the objects created on
+         those platforms.  h5ls appears to be dumping object references
+         correctly.
+       - Cray J90 give errors during testing when displaying
+         some floating-point values.  These are benign differences due to the
+         different precision in the values displayed and h5ls appears to be
+         dumping floating-point numbers correctly.
+
+   * Before building HDF5 F90 Library from source on Crays (T3E and SV1) 
+     replace H5Aff.f90, H5Dff.f90 and H5Pff.f90 files in the fortran/src 
+     subdirectory in the top level directory with the Cray-specific files from 
+     the ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/hdf5-1.4.0/src/crayf90/  directory.
+
+   * The h4toh5 utility produces images that do not correctly conform
+     to the HDF5 Image and Palette Specification. 
+
+         http://hdf.ncsa.uiuc.edu/HDF5/doc/ImageSpec.html
+
+     Several required HDF5 attributes are omitted, and the dataspace 
+     is reversed (i.e., the ht. and width of the image dataset is 
+     incorrectly described.)  For more information, please see:
+
+         http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageDetails.htm
+
+%%%%1.2.2%%%%   Release Information for hdf5-1.2.2 (6/23/00)
+
+7.  Release Information for hdf5-1.2.2
+=================================================================
+INTRODUCTION
+
+This document describes the differences between HDF5-1.2.1 and 
+HDF5-1.2.2, and contains information on the platforms where HDF5-1.2.2
+was tested and known problems in HDF5-1.2.2. 
+
+The HDF5 documentation can be found on the NCSA ftp server 
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+
+- Features Added since HDF5-1.2.1 
+- Bug Fixes since HDF5-1.2.1
+- Known Problems
+- Platforms Tested
+
+
+Features Added since HDF5-1.2.1
+===============================
+   * Added internal free-lists to reduce memory required by the library and
+     H5garbage_collect API function.
+   * h5dump displays opaque and bitfield types.
+   * New features added to snapshots.  Use 'snapshot help' to see a
+     complete list of features.
+   * Improved configure to detect if MPIO routines are available when
+     parallel mode is requested.
+
+Bug Fixes since HDF5-1.2.1
+==========================
+   * h5dump correctly displays compound datatypes, including simple and
+     nested compound types.
+   * h5dump correctly displays the committed copy of predefined types.
+   * Corrected an error in h5toh4 which did not convert the 32-bit
+     int from HDF5 to HDF4 correctly for the T3E platform.
+   * Corrected a floating point number conversion error for the
+     Cray J90 platform.  The error did not convert the value 0.0
+     correctly.
+   * Fixed error in H5Giterate which was not updating the "index" parameter
+     correctly.
+   * Fixed error in hyperslab iteration which was not walking through the
+     correct sequence of array elements if hyperslabs were staggered in a
+     certain pattern.
+   * Fixed several other problems in hyperslab iteration code.
+   * Fixed another H5Giterate bug which caused groups with large numbers
+     of objects in them to misbehave when the callback function returned
+     non-zero values.
+   * Changed return type of H5Aiterate and H5A_operator_t typedef to be
+     herr_t, to align them with the dataset and group iterator functions.
+   * Changed H5Screate_simple and H5Sset_extent_simple to not allow dimensions
+     of size 0 without the same dimension being unlimited.
+   * Improved metadata hashing & caching algorithms to avoid
+     many hash flushes and also removed some redundant I/O when moving metadata
+     blocks in the file.
+   * The libhdf5.settings file shows the correct machine byte-sex.
+   * The "struct(opt)" type conversion function which gets invoked for
+     certain compound datatype conversions was fixed for nested compound
+     types. This required a small change in the datatype conversion
+     function API.
+
+Known Problems
+==============
+
+o SunOS 5.6 with C WorkShop Compilers 4.2:  hyperslab selections will 
+  fail if library is compiled using optimization of any level.
+o TFLOPS: dsets test fails if compiled with optimization turned on.
+o J90: tools fail to dispay data for the datasets with a compound datatype. 
+
+Platforms Tested
+================
+
+  AIX 4.3.3 (IBM SP)            3.6.6                               | binaries
+                                mpicc using mpich 1.1.2             | are not
+                                mpicc_r using IBM MPI-IO prototype  | available
+  AIX 4.3.2.0 (IBM SP)          xlc 5.0.1.0
+  Cray J90 10.0.0.7             cc 6.3.0.2
+  Cray T3E 2.0.5.29             cc 6.3.0.2
+                                mpt.1.3
+  FreeBSD 4.0                   gcc 2.95.2
+  HP-UX B.10.20                 HP C  HP92453-01 A.10.32
+  HP-UX B.11.00                 HP92453-01 A.11.00.13 HP C Compiler 
+                                (static library only, h5toh4 tool is not available) 
+  IRIX 6.5                      MIPSpro cc 7.30
+  IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1m
+                                mpt.1.4
+
+  Linux 2.2.10 SMP              gcc 2.95.1 
+                                mpicc(gcc-2.95.1)
+                                gcc (egcs-2.91.66)
+                                mpicc (egcs-2.91.66)
+  Linux 2.2.16 (RedHat 6.2)     gcc 2.95.2
+
+  OSF1 V4.0                     DEC-V5.2-040
+  SunOS 5.6                     cc WorkShop Compilers 5.0 no optimization
+  SunOS 5.7                     cc WorkShop Compilers 5.0
+  SolarisX86 SunOS 5.5.1        gcc version 2.7.2 with --disable-hsizet
+  TFLOPS 3.2.1                  pgcc Rel 3.1-3i
+                                mpich-1.1.2 with local changes
+  Windows NT4.0 sp5             MSVC++ 6.0
+  Windows 98                    MSVC++ 6.0
+  Windows 2000                  MSVC++ 6.0
+
+
+
+%%%%1.2.1%%%%   Release Information for hdf5-1.2.1
+
+6.  Release Information for hdf5-1.2.1
+================================================================
+
+
+Bug fixes since HDF5-1.2.0
+==========================
+
+Configuration
+-------------
+
+   * The hdf5.h include file was fixed to allow the HDF5 Library to be compiled
+     with other libraries/applications that use GNU autoconf. 
+   * Configuration for parallel HDF5 was improved. Configure now attempts to
+     link with libmpi.a and/or libmpio.a as the MPI libraries by default.
+     It also uses "mpirun" to launch MPI tests by default.  It tests to
+     link MPIO routines during the configuration stage, rather than failing
+     later as before.  One can just do "./configure --enable-parallel"
+     if the MPI library is in the system library.
+
+Library
+-------
+
+   * Error was fixed which was not allowing dataset region references to have
+     their regions retrieved correctly.
+   * Added internal free-lists to reduce memory required by the library and
+     H5garbage_collect API function
+   * Fixed error in H5Giterate which was not updating the "index" parameter
+     correctly.
+   * Fixed error in hyperslab iteration which was not walking through the
+     correct sequence of array elements if hyperslabs were staggered in a
+     certain pattern
+   * Fixed several other problems in hyperslab iteration code.
+
+Tests
+------
+
+   * Added additional tests for group and attribute iteration.
+   * Added additional test for staggered hyperslab iteration.
+   * Added additional test for random 5-D hyperslab selection.
+
+Tools
+------
+
+   * Added an option, -V, to show the version information of h5dump.
+   * Fixed a core dumping bug of h5toh4 when executed on platforms like 
+     TFLOPS.
+   * The test script for h5toh4 used to not able to detect the hdp
+     dumper command was not valid.  It now detects and reports the
+     failure of hdp execution.
+
+Documentation
+-------------
+
+   * User's Guide and Reference Manual were updated. 
+     See doc/html/PSandPDF/index.html for more details. 
+
+   
+Platforms Tested:
+================
+Note: Due to the nature of bug fixes, only static versions of the library and tools were tested.
+
+
+  AIX 4.3.2 (IBM SP)            3.6.6
+  Cray T3E 2.0.4.81             cc 6.3.0.1
+                                mpt.1.3
+  FreeBSD 3.3-STABLE            gcc 2.95.2
+  HP-UX B.10.20                 HP C  HP92453-01 A.10.32
+  IRIX 6.5                      MIPSpro cc 7.30
+  IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1m
+                                mpt.1.3 (SGI MPI 3.2.0.0)
+
+  Linux 2.2.10 SuSE             egcs-2.91.66               configured with
+  (i686-pc-linux-gnu)                                      --disable-hsizet
+                                mpich-1.2.0 egcs-2.91.66 19990314/Linux 
+
+  OSF1 V4.0                     DEC-V5.2-040
+  SunOS 5.6                     cc WorkShop Compilers 4.2  no optimization
+  SunOS 5.7                     cc WorkShop Compilers 5.0
+  TFLOPS 2.8                    cicc (pgcc Rel 3.0-5i)
+                                mpich-1.1.2 with local changes
+  Windows NT4.0 sp5             MSVC++ 6.0
+
+Known Problems:
+==============
+
+o SunOS 5.6 with C WorkShop Compilers 4.2:  Hyperslab selections will 
+  fail if library is compiled using optimization of any level.
+
+
+
+%%%%1.2.0%%%%   Release Information for hdf5-1.2.0
+         
+5. Release Information for hdf5-1.2.0
+===================================================================
+
+A. Platforms Supported
+   -------------------
+
+Operating systems listed below with compiler information and MPI library, if
+applicable, are systems that HDF5 1.2.0 was tested on.
+
+                           Compiler & libraries
+  Platform                      Information              Comment
+  --------                      ----------               -------- 
+                                
+  AIX 4.3.2 (IBM SP)            3.6.6
+
+  Cray J90 10.0.0.6             cc 6.3.0.0
+
+  Cray T3E 2.0.4.61             cc 6.2.1.0 
+                                mpt.1.3
+
+  FreeBSD 3.2                   gcc 2.95.1
+
+  HP-UX B.10.20                 HP C  HP92453-01 A.10.32
+                                gcc 2.8.1
+
+  IRIX 6.5                      MIPSpro cc 7.30 
+
+  IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1m
+  			        mpt.1.3 (SGI MPI 3.2.0.0)
+
+  Linux 2.2.10                  egcs-2.91.66               configured with
+  						         --disable-hsizet
+                                                           lbraries: glibc2
+
+  OSF1 V4.0                     DEC-V5.2-040
+
+  SunOS 5.6                     cc WorkShop Compilers 4.2   
+                                                           no optimization
+  			        gcc 2.8.1
+
+  SunOS 5.7                     cc WorkShop Compilers 5.0
+                                gcc 2.8.1
+ 
+  TFLOPS 2.7.1                  cicc (pgcc Rel 3.0-4i)
+  			        mpich-1.1.2 with local changes
+
+  Windows NT4.0 intel           MSVC++ 5.0 and 6.0
+
+  Windows NT alpha 4.0          MSVC++ 5.0 
+
+  Windows 98                    MSVC++ 5.0
+
+
+B. Known Problems
+   --------------
+
+* NT alpha 4.0
+  Dumper utiliy h5dump fails if linked with DLL.
+
+* SunOS 5.6 with C WorkShop Compilers 4.2
+  Hyperslab selections will fail if library is compiled using optimization
+  of any level.
+
+ 
+C. Changes Since Version 1.0.1
+   ---------------------------
+
+1. Documentation
+   -------------
+
+* More examples
+
+* Updated user guide, reference manual, and format specification.
+
+* Self-contained documentation for installations isolated from the
+  Internet.
+
+* HDF5 Tutorial was added to the documentation  
+
+2. Configuration
+   -------------
+
+* Better detection and support for MPI-IO.
+
+* Recognition of compilers with known code generation problems.
+
+* Support for various compilers on a single architecture (e.g., the
+  native compiler and the GNU compilers).
+
+* Ability to build from read-only media and with different compilers
+  and/or options concurrently.
+
+* Added a libhdf5.settings file which summarizes the configuration
+  information and is installed along with the library.
+
+* Builds a shared library on most systems that support it.
+
+* Support for Cray T3E, J90 and Windows/NT.
+
+3. Debugging
+   ---------
+
+* Improved control and redirection of debugging and tracing messages.
+
+4. Datatypes
+   ---------
+
+* Optimizations to compound datatype conversions and I/O operations.
+
+* Added nearly 100 optimized conversion functions for native datatypes 
+  including support for non-aligned data.
+
+* Added support for bitfield, opaque, and enumeration types.
+
+* Added distinctions between signed and unsigned char types to the
+  list of predefined native hdf5 datatypes.
+
+* Added HDF5 type definitions for C9x types like int32_t.
+
+* Application-defined type conversion functions can handle non-packed
+  data.
+
+* Changed the H5Tunregister() function to use wildcards when matching
+  conversion functions.  H5Tregister_hard() and H5Tregister_soft()
+  were combined into H5Tregister().
+
+* Support for variable-length datatypes (arrays of varying length per
+  dataset element). Variable length strings currently supported only
+  as variable length arrays of 1-byte integers.
+
+5. Dataspaces
+   ----------
+
+* New query functions for selections.
+
+* I/O operations bypass the stripmining loop and go directly to
+  storage for certain contiguous selections in the absense of type
+  conversions.  In other cases the stripmining buffers are used more
+  effectively.
+
+* Reduced the number of I/O requests under certain circumstances,
+  improving performance on systems with high I/O latency.
+
+6. Persistent Pointers
+   -------------------
+
+* Object (serial and parallel) and dataset region (serial only)
+  references are implemented.
+
+7. Parallel Support
+   ----------------
+
+* Improved parallel I/O performance.
+
+* Supported new platforms: Cray T3E, Linux, DEC Cluster.
+
+* Use vendor supported version of MPIO on SGI O2K and Cray platforms.
+
+* Improved the algorithm that translates an HDF5 hyperslab selection
+  into an MPI type for better collective I/O performance.
+
+8. New API functions 
+   -----------------
+
+  a. Property List Interface:
+     ------------------------
+
+  H5Pset_xfer		- set data transfer properties
+  H5Pset_preserve      - set dataset transfer property list status 
+  H5Pget_preserve      - get dataset transfer property list status
+  H5Pset_hyper_cache   - indicates whether to cache hyperslab blocks during I/O
+  H5Pget_hyper_cache   - returns information regarding the caching of 
+                         hyperslab blocks during I/O
+  H5Pget_btree_ratios  - sets B-tree split ratios for a dataset 
+                         transfer property list
+  H5Pset_btree_ratios  - gets B-tree split ratios for a dataset
+                         transfer property list
+  H5Pset_vlen_mem_manager - sets the memory manager for variable-length 
+                            datatype allocation
+  H5Pget_vlen_mem_manager - sets the memory manager for variable-length
+                            datatype allocation
+
+  b. Dataset Interface:
+     ------------------
+
+  H5Diterate           - iterate over all selected elements in a dataspace
+  H5Dget_storage_size  - return the amount of storage required for a dataset
+  H5Dvlen_reclaim      - reclaim VL datatype memory buffers
+
+  c. Dataspace Interface:
+     --------------------
+  H5Sget_select_hyper_nblocks   - get number of hyperslab blocks
+  H5Sget_select_hyper_blocklist - get the list of hyperslab blocks 
+                                  currently selected
+  H5Sget_select_elem_npoints    - get the number of element points 
+                                  in the current selection
+  H5Sget_select_elem_pointlist  - get the list of element points 
+                                  currently selected
+  H5Sget_select_bounds          - gets the bounding box containing 
+                                  the current selection
+
+  d. Datatype Interface:
+     -------------------
+  H5Tget_super         - return the base datatype from which a 
+                         datatype is derived
+  H5Tvlen_create       - creates a new variable-length dataype
+  H5Tenum_create       - creates a new enumeration datatype
+  H5Tenum_insert       - inserts a new enumeration datatype member
+  H5Tenum_nameof       - returns the symbol name corresponding to a 
+                         specified member of an enumeration datatype
+  H5Tvalueof           - return the value corresponding to a 
+                         specified member of an enumeration datatype 
+  H5Tget_member_value  - return the value of an enumeration datatype member
+  H5Tset_tag           - tags an opaque datatype
+  H5Tget_tag           - gets the tag associated with an opaque datatype
+
+  e. Identifier Interface:
+     ---------------------
+  H5Iget_type          - retrieve the type of an object
+
+  f. Reference Interface:
+     --------------------
+  H5Rcreate            - creates a reference
+  H5Rdereference       - open the HDF5 object referenced
+  H5Rget_region        - retrieve a dataspace with the specified region selected
+  H5Rget_object_type   - retrieve the type of object that an 
+                         object reference points to
+
+  g. Ragged Arrays (alpha) (names of those API functions were changed):
+     ------------------------------------------------------------------
+   H5RAcreate		- create a new ragged array (old name was H5Rcreate)
+   H5RAopen		- open an existing array    (old name was H5Ropen)
+   H5RAclose		- close a ragged array      (old name was H5Rclose)
+   H5RAwrite		- write to an array         (old name was H5Rwrite)
+   H5RAread		- read from an array        (old name was H5Rread)
+
+
+9. Tools
+   -----
+
+* Enhancements to the h5ls tool including the ability to list objects
+  from more than one file, to display raw hexadecimal data, to
+  show file addresses for raw data, to format output more reasonably,
+  to show object attributes, and to perform a recursive listing, 
+
+* Enhancements to h5dump: support new data types added since previous
+  versions.
+
+* h5toh4: An hdf5 to hdf4 converter.
+
+
+
+%%%%1.0.1%%%%   Release Information for hdf5-1.0.1
+         
+4.  Changes from Release 1.0.0 to Release 1.0.1
+=====================================================================
+
+* [Improvement]: configure sets up the Makefile in the parallel tests
+  suit (testpar/) correctly.
+
+* [Bug-Fix]: Configure failed for all IRIX versions other than 6.3.
+  It now configures correctly for all IRIX 6.x version.
+
+* Released Parallel HDF5 
+
+     Supported Features:
+     ------------------
+
+     HDF5 files are accessed according to the communicator and INFO
+     object defined in the property list set by H5Pset_mpi.
+
+     Independent read and write accesses to fixed and extendable dimension
+     datasets.
+
+     Collective read and write accesses to fixed dimension datasets.
+
+     Supported Platforms:
+     -------------------
+
+     Intel Red
+     IBM SP2
+     SGI Origin 2000
+
+     Changes In This Release: 
+     -----------------------
+
+   o Support of Access to Extendable Dimension Datasets.
+     Extendable dimension datasets must use chunked storage methods.
+     A new function, H5Dextend, is created to extend the current
+     dimensions of a dataset.  The current release requires the
+     MPI application must make a collective call to extend the
+     dimensions of an extendable dataset before writing to the
+     newly extended area.  (The serial does not require the
+     call of H5Dextend.  The dimensions of an extendable
+     dataset is increased when data is written to beyond the
+     current dimensions but within the maximum dimensions.)
+     The required collective call of H5Dextend may be relaxed
+     in future release.
+
+     This release only support independent read and write accesses
+     to extendable datasets.  Collective accesses to extendable
+     datasets will be implemented in future releases.
+
+   o Collective access to fixed dimension datasets.
+     Collective access to a dataset can be specified in the transfer
+     property list argument in H5Dread and H5Dwrite.  The current
+     release supports collective access to fixed dimension datasets.
+     Collective access to extendable datasets will be implemented in
+     future releases.
+
+   o HDF5 files are opened according to Communicator and INFO object.
+     H5Dopen now records the communicator and INFO setup by H5Pset_mmpi
+     and pass them to the corresponding MPIO open file calls for
+     processing.
+
+   o This release has been tested on IBM SP2, Intel Red and SGI Origin 2000
+     systems.  It uses the ROMIO version of MPIO interface for parallel
+     I/O supports.
+
+
+
+%%%%1.0.0%%%%   Release Information for hdf5-1.0.0
+
+3.  Changes from the Beta 1.0.0 Release to Release 1.0.0
+====================================================================
+
+* Added fill values for datasets.  For contiguous datasets fill value
+  performance may be quite poor since the fill value is written to the 
+  entire dataset when the dataset is created.  This will be remedied
+  in a future version.  Chunked datasets using fill values do not
+  incur any additional overhead. See H5Pset_fill_value().
+
+* Multiple hdf5 files can be "mounted" on one another to create a
+  larger virtual file. See H5Fmount().
+
+* Object names can be removed or changed but objects are never
+  actually removed from the file yet. See H5Gunlink() and H5Gmove().
+
+* Added a tuning mechanism for B-trees to insure that sequential
+  writes to chunked datasets use less overhead.  See H5Pset_btree_ratios().
+
+* Various optimizations and bug fixes.
+
+
+
+%%%%1.0.0 Beta%%%%   Release Information for hdf5-1.0.0 Beta
+
+2. Changes from the Second Alpha 1.0.0 Release to the Beta 1.0.0 Release
+=========================================================================
+
+* Strided hyperslab selections in dataspaces now working.
+
+* The compression API has been replaced with a more general filter
+  API.  See doc/html/Filters.html for details.
+
+* Alpha-quality 2d ragged arrays are implemented as a layer built on
+  top of other hdf5 objects.  The API and storage format will almost
+  certainly change.
+
+* More debugging support including API tracing.  See Debugging.html.
+
+* C and Fortran style 8-bit fixed-length character string types are
+  supported with space or null padding or null termination and
+  translations between them.
+
+* Added function H5Fflush() to write all cached data immediately to
+  the file.
+
+* Datasets maintain a modification time which can be retrieved with
+  H5Gstat().
+
+* The h5ls tool can display much more information, including all the
+  values of a dataset.
+
+
+
+%%%%1.0.0 Alpha 2%%%%   Release Information for hdf5-1.0.0 Alpha 2
+
+1.  Changes from the First Alpha 1.0.0 Release to 
+     the Second Alpha 1.0.0 Release
+=====================================================================
+
+* Two of the packages have been renamed.  The data space API has been
+  renamed from `H5P' to `H5S' and the property list (template) API has 
+  been renamed from `H5C' to `H5P'.
+
+* The new attribute API `H5A' has been added.  An attribute is a small 
+  dataset which can be attached to some other object (for instance, a
+  4x4 transformation matrix attached to a 3-dimensional dataset, or an 
+  English abstract attached to a group).
+
+* The error handling API `H5E' has been completed.  By default, when an
+  API function returns failure an error stack is displayed on the
+  standard error stream.  The H5Eset_auto() controls the automatic
+  printing and H5E_BEGIN_TRY/H5E_END_TRY macros can temporarily
+  disable the automatic error printing.
+
+* Support for large files and datasets (>2GB) has been added.  There
+  is an html document that describes how it works.  Some of the types
+  for function arguments have changed to support this: all arguments
+  pertaining to sizes of memory objects are `size_t' and all arguments 
+  pertaining to file sizes are `hsize_t'.
+
+* More data type conversions have been added although none of them are
+  fine tuned for performance.  There are new converters from integer
+  to integer and float to float, but not between integers and floating
+  points.  A bug has been fixed in the converter between compound
+  types.
+
+* The numbered types have been removed from the API: int8, uint8,
+  int16, uint16, int32, uint32, int64, uint64, float32, and float64.
+  Use standard C types instead.  Similarly, the numbered types were
+  removed from the H5T_NATIVE_* architecture; use unnumbered types
+  which correspond to the standard C types like H5T_NATIVE_INT.
+
+* More debugging support was added.  If tracing is enabled at
+  configuration time (the default) and the HDF5_TRACE environment
+  variable is set to a file descriptor then all API calls will emit
+  the function name, argument names and values, and return value on
+  that file number.  There is an html document that describes this.
+  If appropriate debugging options are enabled at configuration time,
+  some packages will display performance information on stderr.
+
+* Data types can be stored in the file as independent objects and
+  multiple datasets can share a data type.
+
+* The raw data I/O stream has been implemented and the application can 
+  control meta and raw data caches, so I/O performance should be
+  improved from the first alpha release.
+
+* Group and attribute query functions have been implemented so it is
+  now possible to find out the contents of a file with no prior
+  knowledge.
+
+* External raw data storage allows datasets to be written by other
+  applications or I/O libraries and described and accessed through
+  HDF5.
+
+* Hard and soft (symbolic) links are implemented which allow groups to 
+  share objects. Dangling and recursive symbolic links are supported.
+
+* User-defined data compression is implemented although we may
+  generalize the interface to allow arbitrary user-defined filters
+  which can be used for compression, checksums, encryption,
+  performance monitoring, etc.  The publicly-available `deflate'
+  method is predefined if the GNU libz.a can be found at configuration 
+  time.
+
+* The configuration scripts have been modified to make it easier to
+  build debugging vs. production versions of the library.
+
+* The library automatically checks that the application was compiled
+  with the correct version of header files.
+
+
+		    Parallel HDF5 Changes
+
+* Parallel support for fixed dimension datasets with contiguous or
+  chunked storages.  Also, support unlimited dimension datasets which
+  must use chunk storage.  No parallel support for compressed datasets.
+
+* Collective data transfer for H5Dread/H5Dwrite.  Collective access
+  support for datasets with contiguous storage only, thus only fixed
+  dimension datasets for now.
+
+* H5Pset_mpi and H5Pget_mpi no longer have the access_mode
+  argument.  It is taken over by the data-transfer property list
+  of H5Dread/H5Dwrite.
+
+* New functions H5Pset_xfer and H5Pget_xfer to handle the
+  specification of independent or collective data transfer_mode
+  in the dataset transfer properties list.  The properties
+  list can be used to specify data transfer mode in the H5Dwrite
+  and H5Dread function calls.
+
+* Added parallel support for datasets with chunked storage layout.
+  When a dataset is extend in a PHDF5 file, all processes that open
+  the file must collectively call H5Dextend with identical new dimension
+  sizes.
+
+
+			LIST OF API FUNCTIONS
+
+The following functions are implemented. Errors are returned if an
+attempt is made to use some feature which is not implemented and
+printing the error stack will show `not implemented yet'.
+
+Library
+   H5check		- check that lib version matches header version
+   H5open		- initialize library (happens automatically)
+   H5close		- shut down the library (happens automatically)
+   H5dont_atexit	- don't call H5close on exit
+   H5get_libversion	- retrieve library version info
+   H5check_version	- check for specific library version
+
+Property Lists
+   H5Pclose		- release template resources
+   H5Pcopy		- copy a template
+   H5Pcreate		- create a new template
+   H5Pget_chunk		- get chunked storage properties
+   H5Pset_chunk		- set chunked storage properties
+   H5Pget_class		- get template class
+   H5Pget_istore_k	- get chunked storage properties
+   H5Pset_istore_k	- set chunked storage properties
+   H5Pget_layout	- get raw data layout class
+   H5Pset_layout	- set raw data layout class
+   H5Pget_sizes		- get address and size sizes
+   H5Pset_sizes		- set address and size sizes
+   H5Pget_sym_k		- get symbol table storage properties
+   H5Pset_sym_k		- set symbol table storage properties
+   H5Pget_userblock	- get user-block size
+   H5Pset_userblock	- set user-block size
+   H5Pget_version	- get file version numbers
+   H5Pget_alignment	- get data alignment properties
+   H5Pset_alignment	- set data alignment properties
+   H5Pget_external_count- get count of external data files
+   H5Pget_external	- get information about an external data file
+   H5Pset_external	- add a new external data file to the list
+   H5Pget_driver	- get low-level file driver class
+   H5Pget_stdio		- get properties for stdio low-level driver
+   H5Pset_stdio		- set properties for stdio low-level driver
+   H5Pget_sec2		- get properties for sec2 low-level driver
+   H5Pset_sec2		- set properties for sec2 low-level driver
+   H5Pget_core		- get properties for core low-level driver
+   H5Pset_core		- set properties for core low-level driver
+   H5Pget_split		- get properties for split low-level driver
+   H5Pset_split		- set properties for split low-level driver
+   H5P_get_family	- get properties for family low-level driver
+   H5P_set_family	- set properties for family low-level driver
+   H5Pget_cache		- get meta- and raw-data caching properties
+   H5Pset_cache		- set meta- and raw-data caching properties
+   H5Pget_buffer	- get raw-data I/O pipe buffer properties
+   H5Pset_buffer	- set raw-data I/O pipe buffer properties
+   H5Pget_preserve	- get type conversion preservation properties
+   H5Pset_preserve	- set type conversion preservation properties
+   H5Pget_nfilters	- get number of raw data filters
+   H5Pget_filter	- get raw data filter properties
+   H5Pset_filter	- set raw data filter properties
+   H5Pset_deflate	- set deflate compression filter properties
+   H5Pget_mpi		- get MPI-IO properties
+   H5Pset_mpi		- set MPI-IO properties
+   H5Pget_xfer		- get data transfer properties
+ + H5Pset_xfer		- set data transfer properties
+ + H5Pset_preserve      - set dataset transfer property list status 
+ + H5Pget_preserve      - get dataset transfer property list status
+ + H5Pset_hyper_cache   - indicates whether to cache hyperslab blocks during I/O
+ + H5Pget_hyper_cache   - returns information regarding the caching of 
+                          hyperslab blocks during I/O
+ + H5Pget_btree_ratios  - sets B-tree split ratios for a dataset 
+                          transfer property list
+ + H5Pset_btree_ratios  - gets B-tree split ratios for a dataset
+                          transfer property list
+ + H5Pset_vlen_mem_manager - sets the memory manager for variable-length 
+                             datatype allocation
+ + H5Pget_vlen_mem_manager - sets the memory manager for variable-length
+                             datatype allocation
+
+Datasets
+   H5Dclose		- release dataset resources
+   H5Dcreate		- create a new dataset
+   H5Dget_space		- get data space
+   H5Dget_type		- get data type
+   H5Dget_create_plist	- get dataset creation properties
+   H5Dopen		- open an existing dataset
+   H5Dread		- read raw data
+   H5Dwrite		- write raw data
+   H5Dextend		- extend a dataset
+ + H5Diterate           - iterate over all selected elements in a dataspace
+ + H5Dget_storage_size  - return the amount of storage required for a dataset
+ + H5Dvlen_reclaim      - reclaim VL datatype memory buffers
+
+Attributes
+   H5Acreate		- create a new attribute
+   H5Aopen_name		- open an attribute by name
+   H5Aopen_idx		- open an attribute by number
+   H5Awrite		- write values into an attribute
+   H5Aread		- read values from an attribute
+   H5Aget_space		- get attribute data space
+   H5Aget_type		- get attribute data type
+   H5Aget_name		- get attribute name
+   H5Anum_attrs		- return the number of attributes for an object
+   H5Aiterate		- iterate over an object's attributes
+   H5Adelete		- delete an attribute
+   H5Aclose		- close an attribute
+
+Errors
+   H5Eclear		- clear the error stack
+   H5Eprint		- print an error stack
+   H5Eget_auto		- get automatic error reporting settings
+   H5Eset_auto		- set automatic error reporting
+   H5Ewalk		- iterate over the error stack
+   H5Ewalk_cb		- the default error stack iterator function
+   H5Eget_major		- get the message for the major error number
+   H5Eget_minor		- get the message for the minor error number
+
+Files
+   H5Fclose		- close a file and release resources
+   H5Fcreate		- create a new file
+   H5Fget_create_plist	- get file creation property list
+   H5Fget_access_plist	- get file access property list
+   H5Fis_hdf5		- determine if a file is an hdf5 file
+   H5Fopen		- open an existing file
+   H5Freopen            - reopen an HDF5 file
+   H5Fmount             - mount a file
+   H5Funmount           - unmount a file
+   H5Fflush             - flush all buffers associated with a file to disk
+
+Groups
+   H5Gclose		- close a group and release resources
+   H5Gcreate    	- create a new group
+   H5Gopen		- open an existing group
+   H5Giterate   	- iterate over the contents of a group
+   H5Gmove		- change the name of some object
+   H5Glink		- create a hard or soft link to an object
+   H5Gunlink    	- break the link between a name and an object
+   H5Gget_objinfo	- get information about a group entry
+   H5Gget_linkval	- get the value of a soft link
+   H5Gget_comment	- get the comment string for an object
+   H5Gset_comment	- set the comment string for an object
+
+Dataspaces
+   H5Screate	        - create a new data space
+   H5Scopy		- copy a data space
+   H5Sclose		- release data space
+   H5Screate_simple	- create a new simple data space
+   H5Sset_space		- set simple data space extents
+   H5Sis_simple		- determine if data space is simple
+   H5Sset_extent_simple	- set simple data space dimensionality and size
+   H5Sget_simple_extent_npoints	- get number of points in simple extent
+   H5Sget_simple_extent_ndims - get simple data space dimensionality
+   H5Sget_simple_extent_dims - get simple data space size
+   H5Sget_simple_extent_type - get type of simple extent
+   H5Sset_extent_none	- reset extent to be empty
+   H5Sextent_copy	- copy the extent from one data space to another
+   H5Sget_select_npoints - get number of points selected for I/O
+   H5Sselect_hyperslab	- set hyperslab dataspace selection
+   H5Sselect_elements   - set element sequence dataspace selection
+   H5Sselect_all	- select entire extent for I/O
+   H5Sselect_none	- deselect all elements of extent
+   H5Soffset_simple	- set selection offset
+   H5Sselect_valid	- determine if selection is valid for extent
+ + H5Sget_select_hyper_nblocks   - get number of hyperslab blocks
+ + H5Sget_select_hyper_blocklist - get the list of hyperslab blocks 
+                                   currently selected
+ + H5Sget_select_elem_npoints    - get the number of element points 
+                                   in the current selection
+ + H5Sget_select_elem_pointlist  - get the list of element points 
+                                   currently selected
+ + H5Sget_select_bounds          - gets the bounding box containing 
+                                   the current selection
+
+Datatypes
+   H5Tclose		- release data type resources
+   H5Topen		- open a named data type
+   H5Tcommit		- name a data type
+   H5Tcommitted		- determine if a type is named
+   H5Tcopy		- copy a data type
+   H5Tcreate		- create a new data type
+   H5Tequal		- compare two data types
+   H5Tlock		- lock type to prevent changes
+   H5Tfind		- find a data type conversion function
+   H5Tconvert		- convert data from one type to another
+   H5Tregister    	- register a conversion function
+   H5Tunregister	- remove a conversion function
+   H5Tget_overflow	- get function that handles overflow conv. cases
+   H5Tset_overflow	- set function to handle overflow conversion cases
+   H5Tget_class		- get data type class
+   H5Tget_cset		- get character set
+   H5Tget_ebias		- get exponent bias
+   H5Tget_fields	- get floating point fields
+   H5Tget_inpad		- get inter-field padding
+   H5Tget_member_dims	- get struct member dimensions
+   H5Tget_member_name	- get struct member name
+   H5Tget_member_offset	- get struct member byte offset
+   H5Tget_member_type	- get struct member type
+   H5Tget_nmembers	- get number of struct members
+   H5Tget_norm		- get floating point normalization
+   H5Tget_offset	- get bit offset within type
+   H5Tget_order		- get byte order
+   H5Tget_pad		- get padding type
+   H5Tget_precision	- get precision in bits
+   H5Tget_sign		- get integer sign type
+   H5Tget_size		- get size in bytes
+   H5Tget_strpad	- get string padding
+   H5Tinsert		- insert scalar struct member
+   H5Tinsert_array	- insert array struct member
+   H5Tpack		- pack struct members
+   H5Tset_cset		- set character set
+   H5Tset_ebias		- set exponent bias
+   H5Tset_fields	- set floating point fields
+   H5Tset_inpad		- set inter-field padding
+   H5Tset_norm		- set floating point normalization
+   H5Tset_offset	- set bit offset within type
+   H5Tset_order		- set byte order
+   H5Tset_pad		- set padding type
+   H5Tset_precision	- set precision in bits
+   H5Tset_sign		- set integer sign type
+   H5Tset_size		- set size in bytes
+   H5Tset_strpad	- set string padding
+ + H5Tget_super         - return the base datatype from which a 
+                          datatype is derived
+ + H5Tvlen_create       - creates a new variable-length dataype
+ + H5Tenum_create       - creates a new enumeration datatype
+ + H5Tenum_insert       - inserts a new enumeration datatype member
+ + H5Tenum_nameof       - returns the symbol name corresponding to a 
+                          specified member of an enumeration datatype
+ + H5Tvalueof           - return the value corresponding to a 
+                          specified member of an enumeration datatype 
+ + H5Tget_member_value  - return the value of an enumeration datatype member
+ + H5Tset_tag           - tags an opaque datatype
+ + H5Tget_tag           - gets the tag associated with an opaque datatype
+
+ - H5Tregister_hard	- register specific type conversion function
+ - H5Tregister_soft	- register general type conversion function
+
+Filters
+   H5Tregister		- register a conversion function 
+
+Compression
+   H5Zregister		- register new compression and uncompression 
+                          functions for a method specified by a method number
+
+Identifiers
+ + H5Iget_type          - retrieve the type of an object
+
+References
+ + H5Rcreate            - creates a reference
+ + H5Rdereference       - open the HDF5 object referenced
+ + H5Rget_region        - retrieve a dataspace with the specified region selected
+ + H5Rget_object_type   - retrieve the type of object that an 
+                          object reference points to
+
+Ragged Arrays (alpha)
+   H5RAcreate		- create a new ragged array
+   H5RAopen		- open an existing array
+   H5RAclose		- close a ragged array
+   H5RAwrite		- write to an array
+   H5RAread		- read from an array
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/ADGuide/ImageSpec.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ADGuide/ImageSpec.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ADGuide/ImageSpec.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1283 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.72 [en] (WinNT; U) [Netscape]">
+   <title>Image Specification</title>
+   
+</html><!-- #BeginLibraryItem "/ed_libs/styles_Gen.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="../ed_styles/GenElect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem --><html></head>
+
+<body text="#000000" bgcolor="#FFFFFF" link="#0000EE" vlink="#551A8B" alink="#FF0000">
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="../index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="../H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+    <a href="../RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+    <a href="../ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>
+HDF5 Image and Palette Specification</h1></center>
+
+<center>
+<h3>
+<i>Version 1.2</i></h3></center>
+The HDF5 specification defines the standard objects and storage for the
+standard HDF5 objects. (For information about the HDF5 library, model and
+specification, see the HDF documentation.)&nbsp; This document is an additional
+specification do define a standard profile for how to store image data
+in HDF5. Image data in HDF5 is stored as HDF5 datasets with standard attributes
+to define the properties of the image.
+<p>This specification is primarily concerned with two dimensional raster
+data similar to HDF4 Raster Images.&nbsp; Specifications for storing other
+types of imagery will be covered in other documents.
+<p>This specification defines:
+<ul>
+<li>
+Standard storage and attributes for an Image dataset (<a href="#Sect1">Section
+1</a>)</li>
+
+<li>
+Standard storage and attributes for Palettes (<a href="#sect2">Section
+2</a>)</li>
+
+<li>
+Standard for associating Palettes with Images. (<a href="#Sect3">Section
+3</a>)</li>
+</ul>
+
+<h2>
+<a NAME="Sect1"></a>1. HDF5 Image Specification</h2>
+
+<h3>
+1.1 Overview</h3>
+Image data is stored as an HDF5 dataset with values of HDF5 class Integer
+or Float.&nbsp; A common example would be a two dimensional dataset, with
+elements of class Integer, e.g., a two dimensional array of unsigned 8
+bit integers.&nbsp; However, this specification does not limit the dimensions
+or number type that may be used for an Image.
+<p>The dataset for an image is distinguished from other datasets by giving
+it an attribute "CLASS=IMAGE".&nbsp; In addition, the Image dataset may
+have an optional attribute "PALETTE" that is an array of object references
+for zero or more palettes. The Image dataset may have additional attributes
+to describe the image data, as defined in <a href="#Sect1.2">Section 1.2</a>.
+<p>A Palette is an HDF5 dataset which contains color map information.&nbsp;
+A Pallet dataset has an attribute "CLASS=PALETTE" and other attributes
+indicating the type and size of the palette, as defined in <a href="#sect2">Section
+2.1</a>.&nbsp; A Palette is an independent object, which can be shared
+among several Image datasets.
+<h3>
+<a NAME="Sect1.2"></a>1.2&nbsp; Image Attributes</h3>
+The attributes for the Image are scalars unless otherwise noted.&nbsp;
+The length of String valued attributes should be at least the number of
+characters. Optionally, String valued attributes may be stored in a String
+longer than the minimum, in which case it must be zero terminated or null
+padded.&nbsp; "Required" attributes must always be used. "Optional" attributes
+must be used when required.
+<br>&nbsp;
+<h4>
+Attributes</h4>
+
+<dl>
+<dt>
+Attribute name="<b>CLASS</b>" (Required)</dt>
+
+<dd>
+This attribute is type H5T_C_S1, with size 5.</dd>
+
+<dd>
+For all Images, the value of this attribute is "IMAGE".</dd>
+
+<dd>
+</dd>
+
+<dd>
+This attribute identifies this data set as intended to be interpreted as
+an image that conforms to the specifications on this page.</dd>
+</dl>
+
+<dt>
+Attribute name="<b>PALETTE</b>"</dt>
+
+<dl>
+<dd>
+A Image dataset within an HDF5 file may optionally specify an array of
+palettes to be viewed with. The dataset will have an attribute field called
+"<b>PALETTE</b>" which contains a one-dimensional array of object reference
+pointers (HDF5 datatype H5T_STD_REF_OBJ) which refer to palettes in the
+file. The palette datasets must conform to the Palette specification in
+<a href="#sect2">section
+2 below</a>. The first palette in this array will be the default palette
+that the data may be viewed with.</dd>
+</dl>
+
+<dl>
+<dt>
+</dt>
+
+<dt>
+Attribute name="<b>IMAGE_SUBCLASS</b>"</dt>
+
+<dd>
+If present, the value of this attribute indicates the type of Palette that
+should be used with the Image.&nbsp; This attribute is a scalar of type
+H5T_C_S1, with size according to the string plus one.&nbsp; The values
+are:</dd>
+
+<dl>
+<dt>
+"IMAGE_GRAYSCALE" (length 15)</dt>
+
+<dd>
+A grayscale image</dd>
+
+<dt>
+"IMAGE_BITMAP" (length 12)</dt>
+
+<dd>
+A bit map image</dd>
+
+<dt>
+"IMAGE_TRUECOLOR" (length 15)</dt>
+
+<dd>
+A truecolor image</dd>
+
+<dt>
+"IMAGE_INDEXED" (length 13)</dt>
+
+<dd>
+An indexed image</dd>
+
+<dd>
+</dd>
+</dl>
+
+<dt>
+Attribute name="<b>INTERLACE_MODE</b>"</dt>
+
+<dd>
+For images with more than one component for each pixel, this optional attribute
+specifies the layout of the data. The values are type H5T_C_S1 of length
+15. See <a href="#Section1.3">section 1.3</a> for information about the
+storage layout for data.</dd>
+
+<dd>
+"INTERLACE_PIXEL" (default): the component value for a pixel are contiguous.</dd>
+
+<dd>
+"INTERLACE_PLANE": each component is stored as a plane.</dd>
+
+<dt>
+</dt>
+
+<dt>
+Attribute name="<b>DISPLAY_ORIGIN</b>"</dt>
+
+<dd>
+This optional attribute indicates the intended orientation of the data
+on a two-dimensional raster display.&nbsp; The value indicates which corner
+the pixel at (0, 0) should be viewed.&nbsp; The values are type H5T_C_S1
+of length 2. If DISPLAY_ORIGIN is not set, the orientation is undefined.</dd>
+
+<dd>
+"UL": (0,0) is at the upper left.</dd>
+
+<dd>
+"LL": (0,0) is at the lower left.</dd>
+
+<dd>
+"UR": (0,0) is at the upper right.</dd>
+
+<dd>
+"LR": (0,0) is at the lower right.</dd>
+</dl>
+
+<dt>
+Attribute name="<b>IMAGE_WHITE_IS_ZERO</b>"</dt>
+
+<dl>
+<dd>
+This attribute is of type H5T_NATIVE_UCHAR.&nbsp; 0 = false, 1 = true .&nbsp;
+This is used for images with IMAGE_SUBCLASS="IMAGE_GRAYSCALE" or "IMAGE_BITMAP".</dd>
+</dl>
+
+<dl>
+<dt>
+Attribute name="<b>IMAGE_MINMAXRANGE</b>"</dt>
+
+<dd>
+If present, this attribute is an array of two numbers, of the same HDF5
+datatype as the data.&nbsp; The first element is the minimum value of the
+data, and the second is the maximum.&nbsp; This is used for images with
+IMAGE_SUBCLASS="IMAGE_GRAYSCALE", "IMAGE_BITMAP" or "IMAGE_INDEXED".</dd>
+</dl>
+
+<dt>
+Attribute name="<b>IMAGE_BACKGROUNDINDEX</b>"</dt>
+
+<dl>
+<dd>
+If set, this attribute indicates the index value that should be interpreted
+as the "background color".&nbsp; This attribute is HDF5 type H5T_NATIVE_UINT.</dd>
+</dl>
+
+<dt>
+Attribute name="<b>IMAGE_TRANSPARENCY</b>"</dt>
+
+<dl>
+<dd>
+If set, this attribute indicates the index value that should be interpreted
+as the "transparent color".&nbsp; This attribute is HDF5 type H5T_NATIVE_UINT.&nbsp;
+This attribute may not be used for IMAGE_SUBCLASS="IMAGE_TRUE_COLOR".</dd>
+</dl>
+
+<dt>
+Attribute name="<b>IMAGE_ASPECTRATIO</b>"</dt>
+
+<dl>
+<dd>
+If set, this attribute indicates the aspect ratio.</dd>
+</dl>
+
+<dt>
+Attribute name="<b>IMAGE_COLORMODEL</b>"</dt>
+
+<dl>
+<dd>
+If set, this attribute indicates the color model of Palette that should
+be used with the Image.&nbsp; This attribute is of type H5T_C_S1, with
+size 3, 4, or 5.&nbsp; The value is one of the color models described in
+the Palette specification in <a href="#sect2.2">section 2.2 below</a>.&nbsp;
+This attribute may be used only for IMAGE_SUBCLASS="IMAGE_TRUECOLOR" or
+"IMAGE_INDEXED".</dd>
+</dl>
+
+<dt>
+Attribute name="<b>IMAGE_GAMMACORRECTION</b>"</dt>
+
+<dl>
+<dd>
+If set, this attribute gives the Gamma correction.&nbsp; The attribute
+is type H5T_NATIVE_FLOAT.&nbsp; This attribute may be used only for IMAGE_SUBCLASS="IMAGE_TRUECOLOR"
+or "IMAGE_INDEXED".</dd>
+</dl>
+Attribute name="<b>IMAGE_VERSION</b>" (Required)
+<dl>
+<dd>
+This attribute is of type H5T_C_S1, with size corresponding to the length
+of the version string.&nbsp; This attribute identifies the version number
+of this specification to which it conforms.&nbsp; The current version number
+is "1.2".</dd>
+
+<br>&nbsp;
+<p>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<center><table BORDER=2 BGCOLOR="#FFFFFF" >
+<caption><b>Table 1. Attributes of an Image Dataset</b></caption>
+
+<tr>
+<td><b>Attribute Name</b></td>
+
+<td><b>(R = Required</b>
+<br><b>O= Optional)</b></td>
+
+<td><b>Type</b></td>
+
+<td><b>String Size</b></td>
+
+<td><b>Value</b></td>
+</tr>
+
+<tr>
+<td>CLASS</td>
+
+<td>R</td>
+
+<td>String</td>
+
+<td>5</td>
+
+<td>"IMAGE"</td>
+</tr>
+
+<tr>
+<td>PALETTE</td>
+
+<td>O</td>
+
+<td>Array Object References</td>
+
+<td></td>
+
+<td>&lt;references to Palette datasets><sup>1</sup></td>
+</tr>
+
+<tr>
+<td>IMAGE_SUBCLASS</td>
+
+<td>O<sup>2</sup></td>
+
+<td>String</td>
+
+<td>15,&nbsp;
+<br>12,&nbsp;
+<br>15,
+<br>13</td>
+
+<td>
+<dt>
+"IMAGE_GRAYSCALE",</dt>
+
+<dt>
+"IMAGE_BITMAP",</dt>
+
+<dt>
+"IMAGE_TRUECOLOR",</dt>
+
+<dt>
+"IMAGE_INDEXED"</dt>
+</td>
+</tr>
+
+<tr>
+<td>INTERLACE_MODE</td>
+
+<td>O<sup>3,6</sup></td>
+
+<td>String</td>
+
+<td>15</td>
+
+<td>The layout of components if more than one component per pixel.</td>
+</tr>
+
+<tr>
+<td>DISPLAY_ORIGIN</td>
+
+<td>O</td>
+
+<td>String</td>
+
+<td>2</td>
+
+<td>If set, indicates the intended location of the pixel (0,0).</td>
+</tr>
+
+<tr>
+<td>IMAGE_WHITE_IS_ZERO</td>
+
+<td>O<sup>3,4</sup></td>
+
+<td>Unsigned Integer</td>
+
+<td></td>
+
+<td>0 = false, 1 = true</td>
+</tr>
+
+<tr>
+<td>IMAGE_MINMAXRANGE</td>
+
+<td>O<sup>3,5</sup></td>
+
+<td>Array [2] &lt;same datatype as data values></td>
+
+<td></td>
+
+<td>The (&lt;minimum>, &lt;maximum>) value of the data.</td>
+</tr>
+
+<tr>
+<td>IMAGE_BACKGROUNDINDEX</td>
+
+<td>O<sup>3</sup></td>
+
+<td>Unsigned Integer</td>
+
+<td></td>
+
+<td>The index of the background color.</td>
+</tr>
+
+<tr>
+<td>IMAGE_TRANSPARENCY</td>
+
+<td>O<sup>3,5</sup></td>
+
+<td>Unsigned Integer</td>
+
+<td></td>
+
+<td>The index of the transparent color.</td>
+</tr>
+
+<tr>
+<td>IMAGE_ASPECTRATIO</td>
+
+<td>O<sup>3,4</sup></td>
+
+<td>Unsigned Integer</td>
+
+<td></td>
+
+<td>The aspect ratio.</td>
+</tr>
+
+<tr>
+<td>IMAGE_COLORMODEL</td>
+
+<td>O<sup>3,6</sup></td>
+
+<td>String</td>
+
+<td>3, 4, or 5</td>
+
+<td>The color model, as defined below in the Palette specification for
+attribute <b>PAL_COLORMODEL</b>.</td>
+</tr>
+
+<tr>
+<td>IMAGE_GAMMACORRECTION</td>
+
+<td>O<sup>3,6</sup></td>
+
+<td>Float</td>
+
+<td></td>
+
+<td>The gamma correction.</td>
+</tr>
+
+<tr>
+<td>IMAGE_VERSION</td>
+
+<td>R</td>
+
+<td>String</td>
+
+<td>3</td>
+
+<td>"1.2"</td>
+</tr>
+</table></center>
+
+<dl><font size=-1>1.&nbsp; The first element of the array is the default
+Palette.</font>
+<br><font size=-1>2.&nbsp; This attribute is <b>required</b> for images
+that use one of the standard color map types listed.</font>
+<br><font size=-1>3. This attribute is <b>required</b> if set for the source
+image, in the case that the image is translated from another file into
+HDF5.</font>
+<br><font size=-1>4.&nbsp; This applies to:&nbsp; IMAGE_SUBCLASS="IMAGE_GRAYSCALE"
+or "IMAGE_BITMAP".</font>
+<br><font size=-1>5.&nbsp; This applies to:&nbsp; IMAGE_SUBCLASS="IMAGE_GRAYSCALE",
+"IMAGE_BITMAP", or "IMAGE_INDEXED".</font>
+<br><font size=-1>6.&nbsp; This applies to: IMAGE_SUBCLASS="IMAGE_TRUECOLOR",
+or "IMAGE_INDEXED".</font></dl>
+</dl>
+Table 2 summarizes the standard attributes for an Image datasets using
+the common sub-classes. R means that the attribute listed on the leftmost
+column is Required for the image subclass on the first row, O means that
+the attribute is Optional for that subclass and N that the attribute cannot
+be applied to that subclass. The two first rows show the only required
+attributes
+for all subclasses.
+<br>&nbsp;
+<table BORDER WIDTH="100%" >
+<caption><b>Table 2a. Applicability of Attributes to IMAGE sub-classes</b></caption>
+
+<tr>
+<td WIDTH="20%"><b>IMAGE_SUBCLASS</b><sup>1</sup></td>
+
+<td WIDTH="20%"><b>IMAGE_GRAYSCALE</b></td>
+
+<td WIDTH="20%"><b>IMAGE_BITMAP</b></td>
+</tr>
+
+<tr>
+<td WIDTH="20%">CLASS</td>
+
+<td WIDTH="20%">R</td>
+
+<td WIDTH="20%">R</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_VERSION</td>
+
+<td WIDTH="20%">R</td>
+
+<td WIDTH="20%">R</td>
+</tr>
+
+<tr>
+<td>INTERLACE_MODE</td>
+
+<td>N</td>
+
+<td>N</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_WHITE_IS_ZERO</td>
+
+<td WIDTH="20%">R</td>
+
+<td WIDTH="20%">R</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_MINMAXRANGE</td>
+
+<td WIDTH="20%">O</td>
+
+<td WIDTH="20%">O</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_BACKGROUNDINDEX</td>
+
+<td WIDTH="20%">O</td>
+
+<td WIDTH="20%">O</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_TRANSPARENCY</td>
+
+<td WIDTH="20%">O</td>
+
+<td WIDTH="20%">O</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_ASPECTRATIO</td>
+
+<td WIDTH="20%">O</td>
+
+<td WIDTH="20%">O</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_COLORMODEL</td>
+
+<td WIDTH="20%">N</td>
+
+<td WIDTH="20%">N</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_GAMMACORRECTION</td>
+
+<td WIDTH="20%">N</td>
+
+<td WIDTH="20%">N</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">PALETTE</td>
+
+<td WIDTH="20%">O</td>
+
+<td WIDTH="20%">O</td>
+</tr>
+
+<tr>
+<td>DISPLAY_ORIGIN</td>
+
+<td>O</td>
+
+<td>O</td>
+</tr>
+</table>
+
+<blockquote>&nbsp;</blockquote>
+
+<table BORDER WIDTH="100%" >
+<caption><b>Table 2b. Applicability of Attributes to IMAGE sub-classes</b></caption>
+
+<tr>
+<td WIDTH="20%"><b>IMAGE_SUBCLASS</b></td>
+
+<td WIDTH="20%"><b>IMAGE_TRUECOLOR</b></td>
+
+<td><b>IMAGE_INDEXED</b></td>
+</tr>
+
+<tr>
+<td WIDTH="20%">CLASS</td>
+
+<td WIDTH="20%">R</td>
+
+<td>R</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_VERSION</td>
+
+<td WIDTH="20%">R</td>
+
+<td>R</td>
+</tr>
+
+<tr>
+<td>INTERLACE_MODE</td>
+
+<td>R</td>
+
+<td>N</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_WHITE_IS_ZERO</td>
+
+<td WIDTH="20%">N</td>
+
+<td>N</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_MINMAXRANGE</td>
+
+<td WIDTH="20%">N</td>
+
+<td>O</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_BACKGROUNDINDEX</td>
+
+<td WIDTH="20%">N</td>
+
+<td>O</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_TRANSPARENCY</td>
+
+<td WIDTH="20%">N</td>
+
+<td>O</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_ASPECTRATIO</td>
+
+<td WIDTH="20%">O</td>
+
+<td>O</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_COLORMODEL</td>
+
+<td WIDTH="20%">O</td>
+
+<td>O</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">IMAGE_GAMMACORRECTION</td>
+
+<td WIDTH="20%">O</td>
+
+<td>O</td>
+</tr>
+
+<tr>
+<td WIDTH="20%">PALETTE</td>
+
+<td WIDTH="20%">O</td>
+
+<td>O</td>
+</tr>
+
+<tr>
+<td>DISPLAY_ORIGIN</td>
+
+<td>O</td>
+
+<td>O</td>
+</tr>
+</table>
+
+<h3>
+<a NAME="Section1.3"></a>1.3 Storage Layout and Properties for Images</h3>
+In the case of an image with more than one component per pixel (e.g., Red,
+Green, and Blue), the data may be arranged in one of two ways.&nbsp; Following
+HDF4 terminology, the data may be interlaced by pixel or by plane, which
+should be indicated by the INTERLACE_MODE&nbsp; attribute.&nbsp; In both
+cases, the dataset will have a dataspace with three dimensions, height,
+width, and components.&nbsp; The interlace modes specify different orders
+for the dimensions.
+<br>&nbsp;
+<table BORDER COLS=2 WIDTH="100%" >
+<caption><b>Table 3. Storage of multiple component image data.</b></caption>
+
+<tr>
+<td><b>Interlace Mode</b></td>
+
+<td><b>Dimensions in the Dataspace</b></td>
+</tr>
+
+<tr>
+<td>INTERLACE_PIXEL</td>
+
+<td>[height][width][pixel components]</td>
+</tr>
+
+<tr>
+<td>INTERLACE_PLANE</td>
+
+<td>[pixel components][height][width]</td>
+</tr>
+</table>
+
+<p>For example, consider a 5 (rows) by 10 (column) image, with Red, Green,
+and Blue components.&nbsp; Each component is an unsigned byte. In HDF5,
+the datatype would be declared as an unsigned 8 bit integer.&nbsp; For
+pixel interlace, the dataspace would be a three dimensional array, with
+dimensions: [10][5][3].&nbsp; For plane interleave, the dataspace would
+be three dimensions: [3][10][5].
+<p>In the case of images with only one component, the dataspace may be
+either a two dimensional array, or a three dimensional array with the third
+dimension of size 1.&nbsp; For example, a 5 by 10 image with 8 bit color
+indexes would be an HDF5 dataset with type unsigned 8 bit integer.&nbsp;
+The dataspace could be either a two dimensional array, with dimensions
+[10][5], or three dimensions, with dimensions either [10][5][1] or [1][10][5].
+<p>Image datasets may be stored with any chunking or compression properties
+supported by HDF5.
+<p><b>A note concerning compatibility with HDF5 GR interface: </b>An Image
+dataset is stored as an HDF5 dataset.&nbsp; It is important to note that
+the order of the dimensions is the same as for any other HDF5 dataset.&nbsp;
+For a two dimensional image that is to be stored as a series of horizontal
+scan lines, with the scan lines contiguous (i.e., the fastest changing
+dimension is 'width'), the image will have a dataspace with <i>dim[0] =
+height</i> and <i>dim[1]</i> = <i>width</i>.&nbsp; This is completely consistent
+with all other HDF5 datasets.
+<p>Users familiar with HDF4 should be cautioned that <i>this is not the
+same as HDF4</i>, and specifically is not consistent with what the HDF4
+GR interface does.
+<br>&nbsp;
+<h2>
+<a NAME="sect2"></a>2.&nbsp; HDF5 Palette Specification</h2>
+
+<h3>
+2.1 Overview</h3>
+A palette is the means by which color is applied to an image and is also
+referred to as a color lookup table. It is a table in which every row contains
+the numerical representation of a particular color. In the example of an
+8 bit standard RGB color model palette, this numerical representation of
+a color is presented as a triplet specifying the intensity of red, green,
+and blue components that make up each color.
+<center>
+<p><img SRC="Palettes.fm.anc.gif" ></center>
+
+<p>In this example, the color component numeric type is an 8 bit unsigned
+integer. While this is most common and recommended for general use, other
+component color numeric datatypes, such as a 16 bit unsigned integer ,
+may be used. This type is specified as the type attribute of the palette
+dataset. (see H5Tget_type(), H5Tset_type())
+<p>The minimum and maximum values of the component color numeric are specified
+as attribute of the palette dataset. See below (attribute PAL_MINMAXNUMERIC).
+If these attributes do not exist, it is assumed that the range of values
+will fill the space of the color numeric type. i.e. with an 8 bit unsigned
+integer, the valid range would be 0 to 255 for each color component.
+<p>The HDF5 palette specification additionally allows for color models
+beyond RGB. YUV, HSV, CMY, CMYK, YCbCr color models are supported, and
+may be specified as a color model attribute of the palette dataset. <i>(see
+"Palette Attributes" for details)</i>.
+<p>In HDF 4 and earlier, palettes were limited to 256 colors. The HDF5
+palette specification allows for palettes of varying length. The length
+is specified as the number of rows of the palette dataset.
+<br>&nbsp;
+<br>&nbsp;
+<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#666666" >
+<tr>
+<td><font color="#FFFFFF">Important Note: The specification of the Indexed
+Palette will change substantially in the next version.&nbsp; The Palette
+described here is <i>denigrated</i> and is not supported.</font></td>
+</tr>
+</table>
+
+<br>&nbsp;
+<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#CCCCCC" >
+<tr>
+<td><i>Denigrated</i>
+<p>In a standard palette, the color entries are indexed directly. HDF5
+supports the notion of a range index table. Such a table defines an ascending
+ordered list of ranges that map dataset values to the palette. If a range
+index table exists for the palette, the PAL_TYPE attribute will be set
+to "RANGEINDEX", and the PAL_RANGEINDEX attribute will contain an object
+reference to a range index table array. If not, the PAL_TYPE attribute
+either does not exist, or will be set to "STANDARD".
+<p>The range index table array consists of a one dimensional array with
+the same length as the palette dataset - 1. Ideally, the range index would
+be of the same type as the dataset it refers to, however this is not a
+requirement.
+<p><b>Example 2: A range index array of type floating point</b>
+<center>
+<p><img SRC="PaletteExample1.gif" ></center>
+
+<p>The range index array attribute defines the "<i>to</i>" of the range.
+Notice that the range index array attribute is one less entry in size than
+the palette. The first entry of 0.1259, specifies that all values below
+and up to 0.1259 inclusive, will map to the first palette entry. The second
+entry signifies that all values greater than 0.1259 up to 0.3278 inclusive,
+will map to the second palette entry, etc. All value greater than the last
+range index array attribute (100000) map to the last entry in the palette.</td>
+</tr>
+</table>
+
+<h3>
+<a NAME="sect2.2"></a>2.2. Palette Attributes</h3>
+A palette exists in an HDF file as an independent data set with accompanying
+attributes.&nbsp; The Palette attributes are scalars except where noted
+otherwise.&nbsp; String values should have size the length of the string
+value plus one.&nbsp; "Required" attributes must be used.&nbsp; "Optional"
+attributes must be used when required.
+<p>These attributes are defined as follows:
+<dl>
+<dt>
+Attribute name="<b>CLASS</b>" (Required)</dt>
+
+<dd>
+This attribute is of type H5T_C_S1, with size 7.</dd>
+
+<dd>
+For all palettes, the value of this attribute is "PALETTE". This attribute
+identifies this palette data set as a palette that conforms to the specifications
+on this page.</dd>
+
+<dt>
+Attribute name="<b>PAL_COLORMODEL</b>" (Required)</dt>
+
+<dd>
+This attribute is of type H5T_C_S1, with size 3, 4, or 5.</dd>
+
+<dd>
+Possible values for this are "RGB", "YUV", "CMY", "CMYK", "YCbCr", "HSV".</dd>
+
+<dd>
+This defines the color model that the entries in the palette data set represent.</dd>
+
+<dl>
+<dt>
+"RGB"</dt>
+
+<dd>
+Each color index contains a triplet where the the first value defines the
+red component, second defines the green component, and the third the blue
+component.</dd>
+
+<dt>
+"CMY"</dt>
+
+<dd>
+Each color index contains a triplet where the the first value defines the
+cyan component, second defines the magenta component, and the third the
+yellow component.</dd>
+
+<dt>
+"CMYK"</dt>
+
+<dd>
+Each color index contains a quadruplet where the the first value defines
+the cyan component, second defines the magenta component, the third the
+yellow component, and the forth the black component.</dd>
+
+<dt>
+"YCbCr"</dt>
+
+<dd>
+Class Y encoding model. Each color index contains a triplet where the the
+first value defines the luminance, second defines the Cb Chromonance, and
+the third the Cr Chromonance.</dd>
+
+<dt>
+"YUV"</dt>
+
+<dd>
+Composite encoding color model. Each color index contains a triplet where
+the the first value defines the luminance component, second defines the
+chromonance component, and the third the value component.</dd>
+
+<dt>
+"HSV"</dt>
+
+<dd>
+Each color index contains a triplet where the the first value defines the
+hue component, second defines the saturation component, and the third the
+value component. The hue component defines the hue spectrum with a low
+value representing magenta/red progressing to a high value which would
+represent blue/magenta, passing through yellow, green, cyan. A low value
+for the saturation component means less color saturation than a high value.
+A low value for <i>value</i> will be darker than a high value.</dd>
+
+<dd>
+</dd>
+</dl>
+
+<dt>
+Attribute name="<b>PAL_TYPE</b>" (Required)</dt>
+
+<dd>
+This attribute is of type H5T_C_S1, with size 9 or 10.</dd>
+
+<dd>
+The current supported values for this attribute are : "STANDARD8" or "RANGEINDEX"</dd>
+
+<dd>
+A PAL_TYPE of "STANDARD8" defines a palette dataset such that the first
+entry defines index 0, the second entry defines index 1, etc. up until
+the length of the palette - 1. This assumes an image dataset with direct
+indexes into the palette.</dd>
+</dl>
+
+<dl>&nbsp;
+<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#CCCCCC" >
+<tr>
+<td><i>Denigrated</i>
+<p>If the PAL_TYPE is set to "RANGEINDEX", there will be an additional
+attribute with a name of "<b>PAL_RANGEINDEX</b>",&nbsp; (See example 2
+for more details)</td>
+</tr>
+</table>
+
+<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#CCCCCC" >
+<tr>
+<td>
+<dt>
+Attribute name="<b>PAL_RANGEINDEX</b>"&nbsp;&nbsp; <i>(Denigrated)</i></dt>
+
+<dl>
+<dd>
+The <b>PAL_RANGEINDEX</b> attribute contains an HDF object reference (HDF5
+datatype H5T_STD_REF_OBJ) pointer which specifies a range index array in
+the file to be used for color lookups for the palette.&nbsp; (Only for
+PAL_TYPE="RANGEINDEX")</dd>
+</dl>
+</td>
+</tr>
+</table>
+
+<dt>
+Attribute name="<b>PAL_MINMAXNUMERIC</b>"</dt>
+
+<dl>
+<dt>
+If present, this attribute is an array of two numbers, of the same HDF5
+datatype as the palette elements or color numerics.</dt>
+
+<br>They specify the minimum and maximum values of the color numeric components.
+For example, if the palette was an RGB of type Float, the color numeric
+range for Red, Green, and Blue could be set to be between 0.0 and 1.0.
+The intensity of the color guns would then be scaled accordingly to be
+between this minimum and maximum attribute.</dl>
+Attribute name="<b>PAL_VERSION</b>"&nbsp; (Required)
+<dl>This attribute is of type H5T_C_S1, with size corresponding to the
+length of the version string.&nbsp; This attribute identifies the version
+number of this specification to which it conforms.&nbsp; The current version
+is "1.2".</dl>
+
+<center><table BORDER=2 BGCOLOR="#FFFFFF" >
+<caption><b>Table 4. Attributes of a Palette Dataset</b></caption>
+
+<tr>
+<td><b>Attribute Name</b></td>
+
+<td><b>(R = Required,</b>
+<br><b>O = Optional)</b></td>
+
+<td><b>Type</b></td>
+
+<td><b>String Size</b></td>
+
+<td><b>Value</b></td>
+</tr>
+
+<tr>
+<td>CLASS</td>
+
+<td>R</td>
+
+<td>String</td>
+
+<td>
+<center>7</center>
+</td>
+
+<td>"PALETTE"</td>
+</tr>
+
+<tr>
+<td>PAL_COLORMODEL</td>
+
+<td>R</td>
+
+<td>String</td>
+
+<td>
+<center>3, 4, or 5</center>
+</td>
+
+<td>Color Model:&nbsp; "RGB", YUV", "CMY", "CMYK", "YCbCr", or "HSV"</td>
+</tr>
+
+<tr>
+<td>PAL_TYPE</td>
+
+<td>R</td>
+
+<td>String</td>
+
+<td>
+<center>9</center>
+
+<p><br>
+<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#CCCCCC" >
+<tr>
+<td>or 10</td>
+</tr>
+</table>
+</td>
+
+<td>"STANDARD8"&nbsp;
+<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#CCCCCC" >
+<tr>
+<td>or "RANGEINDEX" <i>(Denigrated)</i></td>
+</tr>
+</table>
+</td>
+</tr>
+
+<tr>
+<td>
+<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#CCCCCC" >
+<tr>
+<td><i>Denigrated</i>
+<br>RANGE_INDEX</td>
+</tr>
+</table>
+</td>
+
+<td></td>
+
+<td>
+<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#CCCCCC" >
+<tr>
+<td>Object Reference&nbsp;</td>
+</tr>
+</table>
+</td>
+
+<td></td>
+
+<td>
+<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#CCCCCC" >
+<tr>
+<td>&lt;Object Reference to Dataset of range index values></td>
+</tr>
+</table>
+</td>
+</tr>
+
+<tr>
+<td>PAL_MINMAXNUMERIC</td>
+
+<td>O</td>
+
+<td>Array[2] of &lt;same datatype as palette></td>
+
+<td></td>
+
+<td>The first value is the &lt;Minimum value for color values>, the second
+value is &lt;Maximum value for color values><sup>2</sup></td>
+</tr>
+
+<tr>
+<td>PAL_VERSION</td>
+
+<td>R</td>
+
+<td>String</td>
+
+<td>4</td>
+
+<td>"1.2"</td>
+</tr>
+</table></center>
+
+<dl>&nbsp;
+<table BORDER COLS=1 WIDTH="100%" BGCOLOR="#CCCCCC" >
+<tr>
+<td><font size=-1>1.&nbsp; The RANGE_INDEX attribute is required if the
+PAL_TYPE is "RANGEINDEX".&nbsp; Otherwise, the RANGE_INDEX attribute should
+be omitted. (Range index is denigrated.)</font></td>
+</tr>
+</table>
+<font size=-1>2.&nbsp; The minimum and maximum are optional.&nbsp; If not
+set, the range is assumed to the maximum range of the number type.&nbsp;
+If one of these attributes is set, then both should be set.&nbsp; The value
+of the minimum must be less than or equal to the value of the maximum.</font></dl>
+</dl>
+Table 5 summarized the uses of the standard attributes for a palette dataset.
+R means that the attribute listed on the leftmost column is Required for
+the palette type on the first row, O means that the attribute is Optional
+for that type and N that the attribute cannot be applied to that type.
+The four first rows show the attributes that are always required&nbsp;
+for the two palette types.
+<br>&nbsp;
+<br>&nbsp;
+<table BORDER WIDTH="100%" >
+<caption><b>Table 5. Applicability of Attributes</b></caption>
+
+<tr>
+<td WIDTH="33%"><b>PAL_TYPE</b></td>
+
+<td WIDTH="33%"><b>STANDARD8</b></td>
+
+<td WIDTH="34%"><b>RANGEINDEX</b></td>
+</tr>
+
+<tr>
+<td WIDTH="33%">CLASS</td>
+
+<td WIDTH="33%">R</td>
+
+<td WIDTH="34%">R</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">PAL_VERSION</td>
+
+<td WIDTH="33%">R</td>
+
+<td WIDTH="34%">R</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">PAL_COLORMODEL</td>
+
+<td WIDTH="33%">R</td>
+
+<td WIDTH="34%">R</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">RANGE_INDEX</td>
+
+<td WIDTH="33%">N</td>
+
+<td WIDTH="34%">R</td>
+</tr>
+
+<tr>
+<td WIDTH="33%">PAL_MINMAXNUMERIC</td>
+
+<td WIDTH="33%">O</td>
+
+<td WIDTH="34%">O</td>
+</tr>
+</table>
+
+<h3>
+2.3. Storage Layout for Palettes</h3>
+The values of the Palette are stored as a dataset.&nbsp; The datatype can
+be any HDF 5 atomic numeric type.&nbsp; The dataset will have dimensions
+(<tt>nentries</tt>&nbsp; by&nbsp; <tt>ncomponents</tt>), where '<tt>nentries</tt>'
+is the number of colors (usually 256) and '<tt>ncomponents'</tt> is the
+number of values per color (3 for <b>RGB</b>, 4 for <b>CMYK</b>, etc.)
+<br>&nbsp;
+<h2>
+<a NAME="Sect3"></a>3.&nbsp; Consistency and Correlation of Image and Palette
+Attributes</h2>
+The objects in this specification are an extension to the base HDF5 specification
+and library.&nbsp; They are accessible with the standard HDF5 library,
+but the semantics of the objects are not enforced by the base library.&nbsp;
+For example, it is perfectly possible to add an attribute called <b>IMAGE</b>
+to <i>any</i> dataset, or to include an object reference to <i>any</i>
+HDF5 dataset in a <b>PALETTE</b> attribute.&nbsp; This would be a valid
+HDF5 file, but not conformant to this specification.&nbsp; The rules defined
+in this specification must be implemented with appropriate software, and
+applications must use conforming software to assure correctness.
+<p>The Image and Palette specifications include several redundant standard
+attributes, such as the <b>IMAGE_COLORMODEL</b> and the <b>PAL_COLORMODEL</b>.&nbsp;
+These attributes are informative not normative, in that it is acceptable
+to attach a Palette to an Image dataset even if their attributes do not
+match.&nbsp; Software is not required to enforce consistency, and files
+may contain mismatched associations of Images and Palettes.&nbsp; In all
+cases, it is up to applications to determine what kinds of images and color
+models can be supported.
+<p>For example, an Image that was created from a file with an "RGB" may
+have a "YUV" Palette in its <b>PALETTE</b> attribute array.&nbsp; This
+would be a legal HDF5 file and also conforms to this specification, although
+it may or may not be correct for a given application.</p>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="../index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="../H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+    <a href="../RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+    <a href="../ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><!-- Created: Spring 1999 -->
+<!-- hhmts start -->
+Last modified: 8 June 2005 
+<!-- hhmts end -->
+
+</body>
+</html>


Property changes on: packages/hdf5/branches/upstream/current/doc/html/ADGuide/ImageSpec.html
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/doc/html/ADGuide/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ADGuide/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ADGuide/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,36 @@
+# HDF5 Library Makefile(.in)
+#
+# 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.
+#
+# 
+top_srcdir=@top_srcdir@
+top_builddir=../../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+SUBDIRS=
+DOCDIR=$(docdir)/hdf5/ADGuide
+
+# Temporary files
+MOSTLYCLEAN=
+
+# Public doc files (to be installed)...
+PUB_DOCS=Changes.html H4toH5Mapping.pdf HISTORY.txt ImageSpec.html  \
+         PaletteExample1.gif Palettes.fm.anc.gif RELEASE.txt
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/ADGuide/PaletteExample1.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/ADGuide/PaletteExample1.gif
___________________________________________________________________
Name: svn:executable
   + 
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/ADGuide/Palettes.fm.anc.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/ADGuide/Palettes.fm.anc.gif
___________________________________________________________________
Name: svn:executable
   + 
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/ADGuide/RELEASE.txt
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ADGuide/RELEASE.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ADGuide/RELEASE.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,616 @@
+HDF5 version 1.6.5 released on Thu Nov 10 18:17:53 CST 2005
+================================================================================
+
+INTRODUCTION
+============
+This document describes the differences between HDF5-1.6.4 and
+HDF5-1.6.5.  It contains information on the platforms tested and
+known problems in HDF5-1.6.5. For more details, check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+Documentation for the current release is also on the HDF web site:
+
+     http://hdf.ncsa.uiuc.edu/HDF5/doc/
+
+For more information look at the HDF5 home page at:
+
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+========
+- New Features
+- Support for New Platforms, Languages and Compilers
+- Bug Fixes since HDF5-1.6.4
+- Documentation
+- Platforms Tested
+- Supported Configuration Features Summary
+- Known Problems
+
+
+New Features
+============
+    Configuration:
+    -------------------------
+	- Added yodconfigure, a configure tool, that patches up the configure
+	  file to allow configure to launch executable via the proper
+	  launching command like "yod -sz 1".  AKC - 2005/11/10
+	- Configure now recognizes the TR variable as the location of the
+          tr utility.  JML 2005/10/20
+
+    Source code distribution:
+    -------------------------
+	- Added g95 as a testing "platform" informally. AKC - 2005/10/04.
+        - Added MD5 checksumming to snapshot releases.  Releases will now
+          produce an .md5 file as well as a .tar archive.  md5sum can be
+          used to verify the arvhice with the .md5 checksum.  -JL 2005/09/06
+
+    Library:
+    --------
+        - Added HSYS_ERROR which retrieves the system error message and pushes
+          it to the error stack.  This provides more information regarding the 
+	  failed system call. AKC - 2005/08/04
+        - Added H5F_OBJ_LOCAL flag to H5Fget_obj_count() & H5Fget_obj_ids(), to
+          allow querying for objects in a file that was opened with a particular
+          file ID, instead of all objects opened in the file with any file ID.
+          QAK - 2005/06/01
+
+    Parallel Library:
+    -----------------
+	- Added mpich2 as a testing "platform" informally. AKC - 2005/10/04.
+	- HDF5 supports collective MPI-IO for irregular selection with HDF5
+	  dataset. Irregular selection is when users use API H5Sselect_hyperslab
+	  more than once for the same dataset.
+	  Currently, not all MPI-IO packages support the complicated 
+	  MPI derived datatypes used in the implementation of irregular 
+	  selections INSIDE HDF5. 
+	  1) DEC 5.x wdoes not support complicated derived datatypes.
+	  2) For AIX 5.1:
+	     If your poe version number is 3.2.0.20 or lower,
+	     please edit powerpc-ibm-aix5.x in the directory hdf5/config/.
+	     Find the line with
+	          << hdf5_mpi_complex_derived_datatype_works >>
+	     and UNCOMMENT this line before the configure.
+	     check poe version with the following command:
+	     lpp -l all | grep ppe.poe
+	  3) For Linux cluster,:
+	     If mpich version is 1.2.5 or lower, collective irregular selection
+	     IO is not supported; internally independent IO is used.
+	  4) For IRIX 6.5:
+	     if C compiler version is 7.3 or lower, collective irregular 
+	     selection IO is not supported; internally independent IO is used.
+	  5) For platforms which internally used mpich: 
+	     If the mpich version is 1.2.5 or lower, please find the 
+	     corresponding config (in hdf5/config) file and add
+	         hdf5_mpi_complex_derived_datatype_works='no' 
+	     at the end of the configuration file. For example, on the 
+	     NCSA SGI Altix, the internal mpich library is 1.2.5. So 
+	         hdf5_mpi_complex_derived_datatype_works='no' 
+	     should be added at the end of the config file ia64-linux-gnu.
+	     KY - 2005/09/12
+
+    Tools:
+    ------
+        - Removed obsolete pdb2hdf tool.  JML - 2005/10/28
+        - Sped up h5dump on files with large numbers of objects.
+            QAK - 2005/08/25
+
+    F90 API:
+    --------
+        - Added missing h5tget_member_class_f function
+                                            EIP 2005/04/06
+    C++ API:
+    --------
+        - Added missing member functions:
+		H5::CompType::getMemberArrayType
+		H5::CompType::getMemberVarLenType
+		H5::AbstractDs::getArrayType
+		H5::AbstractDs::getVarLenType
+		H5::CommonFG::openArrayType
+		H5::CommonFG::openVarLenType
+		H5::PropList::copyProp -- this will replace the current
+			H5::PropList::copyProp in later releases due
+			to incorrect prototype.
+		BMR - 2005/07/27
+
+
+Support for New Platforms, Languages and Compilers
+==================================================
+    - Added support for RedStorm platform (serial only.)  AKC 2005/11/10
+    - Added support for BG/L platform (serial only.)  LA 2005/11/10
+    - Added support for HPUX 11.23 (IA64); only C and C++ are supported
+      with the +DD64 flag 
+                                             EIP 2005/10/05
+ 
+
+    Configuration
+    -------------
+        - Added support for Cray X1.  JML 2005/10/03
+
+
+Bug Fixes since HDF5-1.6.4 Release
+==================================
+
+    Library
+    -------
+        - Fixed collective IO in chunking-storage.  HDF5 may have called the 
+            wrong routine when the shape of the dataspace in the file and in 
+            the bufferred chunk were different. This bug was fixed to make sure
+            the correct routine is called. KY - 2005/10/19
+        - Fixed core dump when closing root groups opened through two different
+            file handles that operate on the same actual file.  QAK - 2005/10/02
+        - The ./dsets tests used to fail in the TFLOPS machine if the
+            test program, dsets.c, was compiled with the -O option.
+            The HDF5 library still worked correctly with the -O option. Only
+            the ./dsets failed.  It is fixed. AKC - 2005/09/14
+        - Corrected errors when performing various operations on a group opened
+            by dereferencing an object reference.  QAK - 2005/07/30
+        - Fixed a bug with named datatypes where a copy of a named datatype
+            used to create a dataset would accidentally use the original
+            named datatype for the dataset's datatype.  QAK - 2005/07/23
+        - Made H5Fget_name() to be consistent and always return name of actual
+            file the ID is in.  (Instead of the name of the top file in a
+            file mounting hierarchy).  QAK - 2005/07/19
+        - Reworked internal file mounting semantics to hopefully eliminate
+            mounting problems.  We now require that files that are mounting
+            together all have the same "file close degree".  QAK - 2005/07/19
+        - More bug fixes on holding open files that are mounted and have
+            IDs open.  QAK - 2005/07/14
+        - Dataset sieve buffer cache was inadvertantly disabled; it has been
+            re-enabled.  QAK - 2005/07/08
+        - Don't unmount child files until the parent file actually closes.
+            (Previously, if an object was holding open a file, the child files
+            would get unmounted too early).  QAK - 2005/07/05
+        - Fixed bug where unmounted files could cause the library to go into
+            an infinite loop when shutting down.  QAK - 2005/06/30
+        - Fixed bug with hyperslab selections that use selection offsets and
+            operate on chunked datasets going into infinite loop or dumping
+            core.  QAK - 2005/06/17
+        - Corrected memory leak and possible corruption when opening a group.
+            QAK - 2005/06/17
+        - Added check for opaque datatype tags being too long (check against
+            H5T_OPAQUE_TAG_MAX, currently set to 256).  QAK - 2005/06/14
+        - Fixed various errors in maintaining names for open objects in the
+            face of unusual mount & unmount operations.  QAK - 2005/06/08
+        - "SEMI" and "STRONG" file close degree settings now apply only to the
+            particular file ID being closed, instead of operating on all open
+            file IDs for a given file.  QAK - 2005/06/01
+        - Fixed error in opening object in a group that was opened in a mounted
+            file which has been unmounted.  QAK - 2005/03/17
+
+    Configuration
+    -------------
+	- Configure can recognize -lmpich as a form of MPI library. -AKC-
+	  2005/9/28.
+	- Changed default C++ compiler for the IA64 platform from icc to
+	    icpc which is the preferred compiler for Intel Compiler version
+	    8. AKC - 2005/09/02
+
+    Performance
+    -------------
+        - Optimized I/O for enumerated datatypes that are a superset of a 
+            source enumerated datatype.  QAK - 2005/03/19
+   
+    Tools
+    -----
+
+    Documentation 
+    ------------- 
+
+    F90 API
+    -------
+       - h5pget_driver_f was returning information that could not be
+         interpreted by a Fortran application program; fixed. EIP - 2005/04/10
+                                
+    C++ API
+    -------
+	- Several member functions' prototype changed due to the 
+	  "int -> unsigned" change in the main library.  They are:
+		H5::CompType::getMemberDataType(unsigned member_num)
+		H5::CompType::getMemberCompType(unsigned member_num)
+		H5::CompType::getMemberEnumType(unsigned member_num)
+		H5::CompType::getMemberIntType(unsigned member_num)
+		H5::CompType::getMemberFloatType(unsigned member_num)
+		H5::CompType::getMemberStrType(unsigned member_num)
+		BMR - 2005/07/27
+
+
+
+   
+
+Platforms Tested
+================
+
+    AIX 5.1  (32 and 64-bit)      xlc 6.0.0.6
+                                  xlf 8.1.1.3
+    				  xlC 6.0.0.6
+				  mpcc_r 6.0.0.6
+                                  mpxlf_r 8.1.1.3
+				  xlc 5.0.2.5
+				  xlf 7.1.1.2
+				  xlC 5.0.2.5
+				  mpcc_r 5.0.2.5
+				  mpxlf_r 7.1.1.2
+    AIX 5.2 (32/64 bit)           xlc 6.0.0.8
+                                  xlC 6.0.0.9
+                                  xlf 8.1.1.7
+                                  mpcc_r 6.0.0.8
+                                  mpxlf_r 8.1.1.7
+    AIX 5.2 (32/64 bit, LLNL frost)    xlc 6.0.0.8
+                                  xlC 6.0.0.8
+                                  xlf 8.1.1.7
+                                  mpcc_r 6.0.0.8
+                                  mpxlf_r 8.1.1.7
+    AIX 5.3 (32/64 bit)           xlc 7.0.0.0
+                                  xlC 7.0.
+                                  xlf 9.1.0.3
+    Cray X1 water 3.0.35          Cray Standard C Version 5.4.0.7.4
+                                  Cray Fortran 5.4.0.7.3
+                                  Cray C++ 5.4.0.7.4
+    FreeBSD 4.11                  gcc 2.95.4
+                                  g++ 2.95.4
+                                  gcc 3.2.3, 3.3.6, 3.4.4, 4.0.0
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP ANSI C++ B3910B A.03.13
+    HP-UX B.11.23                 HP aC++/ANSI C B3910B A.06.00
+                                  HP F90 v2.9
+                                  HP aC++/ANSI C B3910B A.06.00
+    IRIX64 6.5 (tesla -64)        MIPSpro cc 7.4.2m
+                                  F90 MIPSpro 7.4.2m
+                                  C++ MIPSpro cc 7.4.2m
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+                                  C++ MIPSpro cc 7.3.1.3m
+				  mpt 1.6
+    Linux 2.4.20-28.7             gcc 2.96
+    (eirene, verbena)             gcc 3.3.2
+                                  PGI compilers (pgcc, pgf90, pgCC) 
+                                  version 5.2-1
+                                  Absoft Fortran compiler v9.0
+                         	  Intel(R) C++ 32-bit Version 8.1
+    				  Intel(R) Fortran 32-bit Version 8.1
+                                  MPIch 1.2.6
+    Linux 2.4.21-268-smp x86_64   gcc 3.3.1 (SuSE Linux, AMD)
+    (mir)                         PGI 5.2-1 C and F90 (with k3-32) 
+                         	  Intel(R) C++ 32-bit Version 8.1
+    				  Intel(R) Fortran 32-bit Version 8.1
+    Linux 2.4.21-sgi306rp21 Altix 
+          SMP ia64                Intel(R) C++ Version 8.1
+    (cobalt)                      Intel(R) Fortran Itanium(R) Version 8.1
+                                  SGI MPI
+    OSF1 V5.1 (QSC)               Compaq C V6.5-011 
+                                  HP Fortran V5.5A-3548
+				  Compaq C++ V6.5-036  
+				  MPIX200_64_r13.4
+    OSF1 V5.1 (PSC)               Compaq C V6.5-303 
+                                  HP Fortran V5.5A-3548
+				  Compaq C++ V6.5-040  
+    SunOS 5.8 32,46               Sun WorkShop 6 update 2 C 5.3
+     (Solaris 2.8)                Sun WorkShop 6 update 2 Fortran 90
+                                  Sun WorkShop 6 update 2 C++ 5.3
+    SunOS 5.9 32,64               Sun C 5.6 2004/07/15
+     (Solaris 2.9)                Sun Fortran 95 8.0 2004/07/15
+                                  Sun C++ 5.6 2004/07/15
+    SunOS 5.10                    Sun WorkShop 6 update 2 C 5.3
+                                  Sun WorkShop 6 update 2 Fortran 95 6.2
+                                  Sun WorkShop 6 update 2 C++ 5.3
+                                  Patch 111685-13 
+    Xeon Linux 2.4.21-32.0.1.ELsmp-perfctr-lustre
+    (tungsten)	                  Intel(R) C++ Version 9.0
+                                  Intel(R) Fortran Compiler Version 9.0
+    IA-64 Linux 2.4.21.SuSE_292.til1 ia64
+    (NCSA tg-login)               Intel(R) C++ Version 8.0
+                                  Intel(R) Fortran Compiler Version 8.0
+				  mpich-gm-1.2.5..10-intel-r2
+    Windows XP                    MSVC++.NET
+                                  MSVC++ 6.0
+                                  Intel 8.1 C++
+    MAC OS X                      Darwin 7.5
+                                  gcc and g++ Apple Computer, Inc. GCC 
+                                  version 1175, based on gcc version 3.3.2
+                                  IBM XL Fortran version 8.1 
+                                  Absoft Fortran compiler v8.2
+
+
+Supported Configuration Features Summary
+========================================
+
+Key:   y   = tested and supported
+       n   = not supported or not tested in this release
+       x   = not working in this release
+       dna = does not apply
+       ( ) = footnote appears below second table
+
+Platform                             C        F90    F90      C++  zlib  SZIP
+                                     parallel        parallel      
+IBM BG/L (16)			     n        n      n        n    y     y
+Solaris2.8 64-bit                    y        y      y(1)     y    y     y
+Solaris2.8 32-bit                    y        y      y(1)     y    y     y
+Solaris2.9 64-bit                    y(1)     y      y(1)     y    y     y
+Solaris2.9 32-bit                    y(1)     y      y(1)     y    y     y
+Solaris2.10 64-bit                   y(1)     y      n        y    y     y
+Solaris2.10 32-bit                   y(1)     y      n        y    y     y
+IRIX64_6.5 64-bit                    y(2)     y      y        y    y     y
+IRIX64_6.5 32-bit                    y(2)     n      n        n    y     y
+HPUX11.00                            y(1)     y      y        y    y     y
+HPUX11.23-32bit                      n        y      n        y    y     y
+HPUX11.23-64bit                      n        n      n        y    y     y
+OSF1 v5.1                            y        y      y        y    y     y
+X1                                   y        y      y        y    y     n
+AIX-5.1, 5.2 & 5.3 32-bit            y        y      y        y    y     y
+AIX-5.1, 5.2 & 5.3 64-bit            y        y      y        y    y     y
+WinXP Visual Studio 6.0              n        n(9)   n        y    y     y
+WinXP .Net                           n        n      n        y(8) y     y
+Mac OS X 10.3                        n        y(10)  n        y    y     y
+FreeBSD 4.11                         n        n      n        y    y     y
+RedHat 7.3  W (3)                    y(1)     y(11)  n        y    y     y
+RedHat 7.3  W Intel (3)              n        y      n        y    y     y
+RedHat 7.3  W PGI (3)                n        y      n        y    y     y
+RedStorm (16)			     n        y      n        y    y     n
+SuSe x86_64 gcc (3,13)               n        y(12)  n        y    y     y
+SuSe x86_64 icc (3,13)               n        y(14)  n        y    y     y
+Linux 2.4 Xeon C Lustre Intel (3,6)  n        y      n        y    y     y
+Linux 2.4 SuSE ia64 C Intel (3,7)    y        y      y        y    y     y
+Linux 2.4 SGI Altix ia64 Intel (3)   y        y      y        y    y     y
+
+
+Platform                             Shared        static-  Thread-  STREAM- 
+                                     libraries(4)  exec     safe     VFD    
+IBM BG/L 			     n              y       n        n
+Solaris2.8 64-bit                    y              x       y        y
+Solaris2.8 32-bit                    y              x       y        y
+Solaris2.9 64-bit                    y              x       y        y
+Solaris2.9 32-bit                    y              x       y        y
+Solaris2.10 64-bit                   y              x       y        y
+Solaris2.10 32-bit                   y              x       y        y
+IRIX64_6.5 64-bit                    y              y       y        y
+IRIX64_6.5 32-bit                    y              y       y        y
+HPUX11.00                            y              x       n        y
+HPUX11.23                            y              y       n        y
+OSF1 v5.1                            y              y       n        y
+X1                                   n              y       n        y
+AIX-5.1, 5.2 & 5.3 32-bit            n              y       n        y
+AIX-5.1, 5.2 & 5.3 64-bit            n              y       n        y
+WinXP Visual Studio 6.0              y              y       n        n
+WinXP .Net                           y              y       n        n
+Mac OS X 10.3                        y              y       n        y
+FreeBSD 4.11                         y              y       y        y
+RedHat 7.3   W (3)                   y              y       y        y
+RedHat 7.3  W  Intel (3)             n              y       n        y
+RedHat 7.3  W  PGI (3)               n              y       n        y
+RedStorm 			     n              y       n        y
+SuSe x86_64 gcc (3,13)               n              y       n        y
+SuSe x86_64 icc (3,13)               y              y(15)   n        y
+Linux 2.4 Xeon C Lustre Intel (3,6)  y              y       n        y
+Linux 2.4 SuSE ia64 C Intel (3,7)    y              y       n        n
+Linux 2.4 SGI Altix ia64 Intel  (3)  y              y       n        y
+
+
+Compiler versions for each platform are listed in the "Platforms Tested" 
+table found elsewhere in this file (RELEASE.txt).  Unless otherwise noted, 
+compilers used are the system compilers.
+
+Footnotes:  (1) Using mpich 1.2.6
+            (2) Using mpt and mpich 1.2.6.
+            (3) Linux 2.4 with GNU, Intel, and PGI compilers, as indicated.  
+                  W or C indicates workstation or cluster, respectively.
+            (4) Shared libraries are provided only for the C library, 
+                except on Windows where they are provided for C and C++.
+            (5) Using mpt.
+            (6) Linux 2.4.21-32.0.1.  Xeon cluster with ELsmp-perfctr-lustre 
+                and Intel compilers
+            (7) Linux 2.4.21, SuSE_292.til1.  Ia64 cluster with Intel compilers
+            (8) Intel 8.1
+            (9) One test of this release failed with Compaq Visual Fortran 6.6c.
+                No binary fortran release will be provided. Users should build
+                the library by themselves and use it at their own risk. 
+                We recommend that users use HDF5 1.7 instead 
+                or use Compaq Visual Fortran 6.0.
+           (10) IBM XLF and Absoft
+           (11) PGI, Absoft.  No shared libraries with Absoft; 
+                use '--disable-shared'.
+           (12) PGI and Intel compilers for both C and Fortran
+           (13) AMD Opteron x86_64
+           (14) ifort
+           (15) Yes with C and Fortran, but not with C++
+           (16) Only serial is ported.  PFS does not work for PHDF5 yet.
+           FMB/EIP - 2005/11/10
+
+
+Known Problems
+==============
+* Intel Compilers for Linux x86_86 platforms (EM64T-based, v8.1) has
+  optimization error in the data types conversion code.  Before running
+  configure, edit the file config/intel-flags by changing the setting of
+  PROD_CFLAGS from -O3 to -O0, then run configure.  AKC - 2005/11/10.
+
+* Fortran testing and compiling failures on windows XP 
+  1. Compaq visual fortran 6.6c with VS 6.0
+     The Fortran tests failed for both release, release dll, debug and debug
+     dll. The failure is a random one. We won't provide fortran libraries. The
+     same test passed with the 1.7.51 snapshot. You may find the 1.7.51 
+     snapshot under ftp://hdf.ncsa.uiuc.edu/pub/outgoing/hdf5/snapshots/.
+  2. Intel fortran 8.1 under .Net environment
+     The fortran library cannot even be compiled. Some users have pointed this
+     to intel forum.
+
+* When testing parallel HDF5 with the C compiler version MIPSpro 7.4.3 at IRIX
+  6.5, set enviroment variable MPI_TYPE_MAX to be a bigger number, for example 
+  120000, in order to pass the complicated collective IO tests inside parallel 
+  HDF5 library. This is not a problem inside parallel HDF5 library. You can 
+  always set a bigger number in your system.
+                                  KY - 2005/10/6
+
+* A contiguous or chunked dataset created by a sequential version may
+  not be modified with a parallel version of the library. 
+  Use the H5Pset_alloc_time function with H5D_ALLOC_TIME_EARLY to set up the 
+  dataset creation property list to avoid the problem.
+                                    EIP - 2005/09/09
+
+* The dataset created or rewritten with the v1.6.3 library or after can't 
+  be read with the v1.6.2 library or before when Fletcher32 EDC(filter) is 
+  enabled.  There was a bug in the calculating code of the Fletcher32 
+  checksum in the library before v1.6.3.  The checksum value wasn't consistent 
+  between big-endian and little-endian systems.  This bug was fixed in 
+  Release 1.6.3.  However, after fixing the bug, the checksum value is no 
+  longer the same as before on little-endian system.  The library release 
+  after 1.6.4 can still read the dataset created or rewritten with the library
+  of v1.6.2 or before.  SLU - 2005/7/8
+
+* For version 6 (6.02 and 6.04) of the Portland Group compiler on AMD Opteron
+  processor, there's a bug in the compiler for optimization(-O2).  The library
+  failed in several tests but all related to multi driver.  The problem has 
+  been reported to the vendor.  
+
+* test/big fails sometimes with the message "Possible overlap with another
+  region."  The test selects regions randomly, and this error occurs when
+  two regions overlap each other; it is a bug in the test and not in
+  HDF5.  Since the error is triggered by a random situation, it will
+  usually disappear if the test is re-run.
+
+* Newer SGI MIPSpro compilers (version 7.4.x) support C99 features but it
+  has a "guard" statement in stdint.h that will #error and skip the rest
+  of the header file if C99 option is not used explicitly.  Hardset
+  $CC to c99 will resolve the problem. AKC - 2004/12/13
+
+* On IBM AIX systems, parallel HDF5 mode will fail some tests with error
+  messages like "INFO: 0031-XXX ...".  This is from the command poe.
+  Set the environment variable MP_INFOLEVEL to 0 to minimize the messages
+  and run the tests again.
+  The tests may fail with messages like "The socket name is already
+  in use".  HDF5 does not use sockets (except for stream-VFD).  This is
+  due to problems of the poe command trying to set up the debug socket.
+  Check if there are many old /tmp/s.pedb.* staying around.  These are
+  sockets used by the poe command and left behind due to failed commands.
+  Ask your system administrator to clean them out.  Lastly, request IBM
+  to provide a means to run poe without the debug socket.
+
+* Two h5dump xml tests(h5dump --xml thlink.h5 and h5dump --xml tmany.h5) 
+  failed on windows xp with .NET for debug and debug dll. Release and 
+  Release dll work fine. 
+
+* The h5dump tests may fail to match the expected output on some platforms
+  (e.g. parallel jobs, Windows) where the error messages directed to
+  "stderr" do not appear in the "right order" with output from stdout.
+  This is not an error.
+
+* The stream-vfd test uses ip port 10007 for testing. If another
+  application is already using that port address, the test will hang
+  indefinitely and has to be terminated by the kill command. To try the
+  test again, change the port address in test/stream_test.c to one not
+  being used in the host.
+
+* The --enable-static-exec configure flag fails to compile for Solaris
+  platforms. This is due to the fact that not all of the system
+  libraries on Solaris are available in a static format.
+
+  The --enable-static-exec configure flag also fails to correctly compile
+  on IBM SP2 platform for the serial mode. The parallel mode works fine
+  with this option.
+
+  The --enable-static-exec configure flag also fails to correctly compile
+  on the HPUX 11.00.
+  
+  It is suggested that you don't use this option on these platforms
+  during configuration.
+
+* The Stream VFD was not tested yet under Windows.
+
+
+* Before building HDF5 F90 Library from source on Crays 
+  replace H5Aff.f90, H5Dff.f90 and H5Pff.f90 files in the fortran/src
+  subdirectory in the top level directory with the Cray-specific files
+  from the site:
+  ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/src/patches/
+
+* Use --disable-shared configure flag if building with Absoft Fortran
+  compiler.
+
+* Information about building with PGI and Intel compilers is available in
+  INSTALL file sections 5.7 and 5.8.
+
+* In LANL QSC, the new cc compiler has problems converting small values of
+  long long (absolute values less than 1**-308) to double.  This triggers
+  the test/dtypes to report failure in the
+      Testing random sw long double -> double conversions
+  If -ieee is used, the converted doubles spread over the range 0.0 to 1**-308.
+  If -ieee is not used, the converted double values are mostly 0.0 but
+  occasionally as 1**-308.  This has been reported to the system staff.
+  All other tests have passed.
+
+* Fortran release DLL randomly failed with Compaq Visual Fortran 6.6c on
+  Windows. 
+
+* Fortran DLL built with Intel 8.1 in .NET environment crushed the compiler,
+  Building Fortran static library with Intel 8.1 in .NET environment 
+  requires manually setting the project file.
+  Please contact to hdfhelp at ncsa.uiuc.edu if you need to build
+  Fortran static library with Intel 8.1 with .NET environment.
+
+* On at least one system, SDSC DataStar, the scheduler (in this case
+  LoadLeveler) sends job status updates to standard error when you run
+  any executable that was compiled with the parallel compilers.
+
+  This causes problems when running "make check" on parallel builds, as
+  many of the tool tests function by saving the output from test runs,
+  and comparing it to an exemplar.
+
+  The best solution is to reconfigure the target system so it no longer
+  inserts the extra text.  However, this may not be practical.
+
+  In such cases, one solution is to "setenv HDF5_Make_Ignore yes" prior to
+  the configure and build.  This will cause "make check" to continue after
+  detecting errors in the tool tests.  However, in the case of SDSC DataStar,
+  it also leaves you with some 150 "failed" tests to examine by hand.
+
+  A second solution is to write a script to run serial tests and filter
+  out the text added by the scheduler.  A sample script used on SDSC
+  DataStar is given below, but you will probably have to customize it
+  for your installation.
+
+  Observe that the basic idea is to insert the script as the first item
+  on the command line which executes the test.  The script then
+  executes the test and filters out the offending text before passing
+  it on.
+
+        #!/bin/csh
+
+        set STDOUT_FILE=~/bin/serial_filter.stdout
+        set STDERR_FILE=~/bin/serial_filter.stderr
+
+        rm -f $STDOUT_FILE $STDERR_FILE
+
+        ($* > $STDOUT_FILE) >& $STDERR_FILE
+
+        set RETURN_VALUE=$status
+
+        cat $STDOUT_FILE
+
+        tail +3 $STDERR_FILE
+
+        exit $RETURN_VALUE
+
+  You get the HDF make files and test scripts to execute your filter script
+  by setting the environment variable "RUNSERIAL" to the full path of the
+  script prior to running configure for parallel builds.  Remember to
+  "unsetenv RUNSERIAL" before running configure for a serial build.
+
+  Note that the RUNSERIAL environment variable exists so that we can
+  prefix serial runs as necessary on the target system.  On DataStar,
+  no prefix is necessary.  However, on an MPICH system, the prefix might
+  have to be set to something like "/usr/local/mpi/bin/mpirun -np 1" to
+  get the serial tests to run at all.
+
+  In such cases, you will have to include the regular prefix in your
+  filter script.
+

Added: packages/hdf5/branches/upstream/current/doc/html/ADGuide.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ADGuide.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ADGuide.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,272 @@
+<html>
+  <head>
+    <title>
+      HDF5 Application Developer's Guide
+    </title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_Gen.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/GenElect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+    <a href="ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>HDF5 Application Developer's Guide</h1>
+</center>
+
+
+<center>
+<table border=0 width=80%>
+
+
+      <tr><td valign=top colspan=3>
+        These documents provide information of particular interest to 
+        developers of applications that employ the HDF5 library.
+        <p>
+        </td></tr>
+
+      <tr><td colspan=3>&nbsp;</td></tr>
+
+<!--
+      <tr><td valign=top><a href="XML_DTD.html">The XML DTD </a>
+          <br>&nbsp;&nbsp;&nbsp;<a href="XML_DTD.html">for HDF5</a>
+	</td><td></td><td valign=top>The standard HDF5 XML DTD and 
+          design notes.
+        </td></tr>
+
+      <tr><td colspan=3>&nbsp;</td></tr>
+-->
+
+      <tr><td valign=top width=35%><a href="ADGuide/Changes.html">
+          HDF5 Library Changes</a>
+          <br>&nbsp;&nbsp;&nbsp;
+          <a href="ADGuide/Changes.html">from Release to Release</a>
+	</td><td></td><td valign=top>A summary of changes in the HDF5 
+          library
+        </td></tr>
+
+      <tr><td colspan=3>&nbsp;</td></tr>
+
+      <tr><td valign=top width=35%><a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/SuppConfigFeats.html" target="External">
+          Supported Configuration</a>
+          <br>&nbsp;&nbsp;&nbsp;
+          <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/SuppConfigFeats.html" target="External">Features Summary</a>
+        </td><td></td><td valign=top>A summary of configuration features
+          supported in this release
+          &nbsp;&nbsp;
+          <em>(external link)</em>
+        </td></tr>
+
+      <tr><td colspan=3>&nbsp;</td></tr>
+
+      <tr><td valign=top width=35%><a href="ADGuide/ImageSpec.html">
+          HDF5 Image and</a>
+          <br>&nbsp;&nbsp;&nbsp;
+          <a href="ADGuide/ImageSpec.html">Palette Specification</a>
+        </td><td></td><td valign=top>A specification for the implementation
+          of images and palettes in HDF5 applications
+        </td></tr>
+
+      <tr><td colspan=3>&nbsp;</td></tr>
+      
+      <tr><td valign=top width=35%><a href="ADGuide/H4toH5Mapping.pdf">
+           Mapping HDF4 Objects</a>
+           <br>&nbsp;&nbsp;&nbsp;
+           <a href="ADGuide/H4toH5Mapping.pdf">to HDF5 Objects</a>
+        </td><td></td><td valign=top>Guidelines for translating
+           HDF4 file objects into valid HDF5 file objects&nbsp;&nbsp;
+           <i>(PDF format only)</i>
+        </td></tr>
+
+      <tr><td colspan=3>&nbsp;</td></tr>
+
+      <tr><td valign=top width=35%><a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/H5Fill_Values.html" target="External">
+          Fill Value and Space</a>
+          <br>&nbsp;&nbsp;&nbsp;
+          <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/H5Fill_Values.html" target="External">Allocation Issues</a>
+	</td><td></td><td valign=top>A summary of HDF5 fill value and storage allocation issues&nbsp;&nbsp;
+          <em>(external link)</em>
+        </td></tr>
+
+      <tr><td valign=top width=35%><a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/H5Fill_Behavior.html" target="External">
+          Fill Value and Space</a>
+          <br>&nbsp;&nbsp;&nbsp;
+          <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/H5Fill_Behavior.html" target="External">Allocation Behavior</a>
+	</td><td></td><td valign=top>A table summarizing of the behavioral interactions 
+	   of HDF5 fill value and storage allocation settings&nbsp;&nbsp;
+          <em>(external link)</em>
+        </td></tr>
+
+      <tr><td colspan=3>&nbsp;</td></tr>
+
+      <tr><td valign=top width=35%><a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/SZIP/index.html" target="External">
+          SZIP Compression</a>
+          <br>&nbsp;&nbsp;&nbsp;
+	  <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/SZIP/index.html" target="External">
+          in HDF5</a>
+	</td><td></td><td valign=top>A description of SZIP compression in HDF5, 
+	  <code>H5Pset_szip</code>, terms of use and copyright notice,
+	  and references&nbsp;&nbsp;
+          <em>(external link)</em>
+        </td></tr>
+      <tr><td colspan=3>&nbsp;</td></tr>
+
+      <tr><td valign=top width=35%><a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/H5Shuffle_Perf.pdf" target="External">
+          Shuffle Performance</a>
+	</td><td></td><td valign=top>An analysis of bzip and gzip compression 
+	  performance in HDF5 with and without the shuffle filter, 
+	  <code>H5Pset_shuffle</code>&nbsp;&nbsp;
+          <em>(external link)</em>
+        </td></tr>
+	
+      <tr><td colspan=3>&nbsp;</td></tr>
+
+      <tr><td valign=top width=35%><a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/H5Generic_Props.html" target="External">
+          Generic Properties</a>
+	</td><td></td><td valign=top>An overview of and the motivation for 
+	  the implementation and use of generic properties in HDF5&nbsp;&nbsp;
+          <em>(external link)</em>
+        </td></tr>
+
+      <tr><td colspan=3>&nbsp;</td></tr>
+
+      <tr><td valign=top width=35%><a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/H5Checksum/ChecksumProposal.htm" target="External">
+          Error-detecting Codes</a>
+          <br>&nbsp;&nbsp;&nbsp;
+          <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/H5Checksum/ChecksumProposal.htm" target="External">
+          for HDF5</a>
+	</td><td></td><td valign=top>A discussion of error-detection codes, 
+	  e.g., checksums, in HDF5&nbsp;&nbsp;
+          <em>(external link)</em>
+        </td></tr>
+
+      <tr><td valign=top width=35%><a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/H5Checksum/EDC_spec.htm" target="External">
+          Fletcher32 Checksum</a>
+          <br>&nbsp;&nbsp;&nbsp;
+	  <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/H5Checksum/EDC_spec.htm" target="External">
+          Design and Spec</a>
+	</td><td></td><td valign=top>Design, API function specification, and test  
+          for the Fletcher32 checksum implementation in HDF5&nbsp;&nbsp;
+          <em>(external link)</em>
+        </td></tr>
+	
+      <tr><td colspan=3>&nbsp;</td></tr>
+
+      <tr><td colspan=3>
+      <hr>
+      The HDF5 source code, as distributed to users and developers,
+      contains two additional files that will be of interest to readers
+      of this document.  Both files are located at the top level of the
+      HDF5 source code tree and are duplicated here for your reference:
+      </td></tr>
+
+      <tr><td valign=top>
+          <a href="ADGuide/RELEASE.txt" target="ExtWin">RELEASE.txt</a>
+        </td><td></td><td valign=top>
+          Technical notes regarding this release
+        </td></tr>
+
+      <tr><td valign=top>
+          <a href="ADGuide/HISTORY.txt" target="ExtWin">HISTORY.txt</a>
+        </td><td></td><td valign=top>
+          A release-by-release history of the HDF5 library
+        </td></tr>
+
+      </td></tr>
+
+<!--
+      <tr><td valign=top><a href="xxx.html">xxx</a>
+          <br>&nbsp;&nbsp;&nbsp;<a href="xxx.html">xxx</a>
+	</td><td></td><td valign=top>xxx
+          <br>&nbsp;&nbsp;&nbsp;
+          xxx
+        </td></tr>
+-->
+
+
+</table>
+</center>
+
+<br>
+<br>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+    <a href="ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<table width=100% border=0>
+<tr><td align=left valign=top> 
+
+<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem -->
+ 
+Last modified:  3 July 2003
+
+</td>
+<td align=right valign=top>
+<a href="Copyright.html">Copyright</a>&nbsp;&nbsp;
+</td></tr>
+</table>             
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Attributes.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Attributes.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Attributes.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,289 @@
+
+<html>
+  <head>
+    <title>Attribute Interface (H5A)</title>
+    
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>The Attribute Interface (H5A)</h1>
+
+    <h2>1. Introduction</h2>
+
+    <p>The attribute API (H5A) is primarily designed to easily allow small
+        datasets to be attached to primary datasets as metadata information.
+        Additional goals for the H5A interface include keeping storage
+        requirements for each attribute to a minimum and easily sharing
+        attributes among datasets.
+    <p>Because attributes are intended to be small objects, large datasets
+        intended as additional information for a primary dataset should be
+        stored as supplemental datasets in a group with the primary dataset.
+        Attributes can then be attached to the group containing everything to
+        indicate a particular type of dataset with supplemental datasets is
+        located in the group.  How small is "small" is not defined by the
+        library and is up to the user's interpretation.
+    <p>Attributes are not separate objects in the file, they are always
+        contained in the object header of the object they are attached to.  The
+        I/O functions defined below are required to read or write attribute
+        information, not the H5D I/O routines.
+
+    <h2>2. Creating, Opening, Closing and Deleting Attributes</h2>
+
+    <p>Attributes are created with the <code>H5Acreate()</code> function,
+      and existing attributes can be accessed with either the
+      <code>H5Aopen_name()</code> or <code>H5Aopen_idx()</code> functions. All
+      three functions return an object ID which should be eventually released
+      by calling <code>H5Aclose()</code>.
+
+    <dl>
+      <dt><code>hid_t H5Acreate (hid_t <em>loc_id</em>, const char
+	  *<em>name</em>, hid_t <em>type_id</em>, hid_t <em>space_id</em>,
+	  hid_t <em>create_plist_id</em>)</code>
+        <dd>This function creates an attribute which is attached to the object
+    specified with <em>loc_id</em>.  The name specified with <em>name</em>
+    for each attribute for an object must be unique for that object.  The <em>type_id</em>
+    and <em>space_id</em> are created with the H5T and H5S interfaces
+    respectively.  Currently only simple dataspaces are allowed for attribute
+    dataspaces.  The <em>create_plist_id</em> property list is currently
+    unused, but will be used in the future for optional properties of
+    attributes.  The attribute ID returned from this function must be released
+    with H5Aclose or resource leaks will develop.  Attempting to create an
+    attribute with the same name as an already existing attribute will fail,
+    leaving the pre-existing attribute in place.
+    This function returns an attribute ID for success or negative for failure.
+
+	<br><br>
+      <dt><code>hid_t H5Aopen_name (hid_t <em>loc_id</em>, const char
+	  *<em>name</em>)</code>
+      <dd> This function opens an attribute which is attached to the object
+    specified with <em>loc_id</em>.  The name specified with <em>name</em>
+    indicates the attribute to access.  The attribute ID returned from this
+    function must be released with H5Aclose or resource leaks will develop.
+    This function returns an attribute ID for success or negative for failure.
+
+	<br><br>
+      <dt><code>hid_t H5Aopen_idx (hid_t <em>loc_id</em>, unsigned
+	  <em>idx</em>)</code>
+      <dd>This function opens an attribute which is attached to the object
+    specified with <em>loc_id</em>.  The attribute specified with <em>idx</em>
+    indicates the <em>idx</em>th attribute to access, starting with '0'. The
+    attribute ID returned from this function must be released with H5Aclose or
+    resource leaks will develop.
+    This function returns an attribute ID for success or negative for failure.
+
+	<br><br>
+      <dt><code>herr_t H5Aclose (hid_t <em>attr_id</em>)</code>
+      <dd>This function releases an attribute from use.  Further use of the
+    attribute ID will result in undefined behavior.
+    This function returns non-negative on success, negative on failure.
+
+	<br><br>
+      <dt><code>herr_t H5Adelete (hid_t <em>loc_id</em>, 
+        const char *<em>name</em>)</code>
+      <dd>This function removes the named attribute from a dataset or group.
+    This function should not be used when attribute IDs are open on <em>loc_id</em>
+    as it may cause the internal indexes of the attributes to change and future 
+    writes to the open attributes to produce incorrect results.
+    Returns non-negative on success, negative on failure.
+    </dl>
+
+    <h2>3. Attribute I/O Functions</h2>
+
+    <p>Attributes may only be written as an entire object, no partial I/O
+        is currently supported.
+
+    <dl>
+      <dt><code>herr_t H5Awrite (hid_t <em>attr_id</em>,
+      hid_t <em>mem_type_id</em>, void *<em>buf</em>)</code>
+      <dd>This function writes an attribute, specified with <em>attr_id</em>,
+    with <em>mem_type_id</em> specifying the datatype in memory.  The entire
+    attribute is written from <em>buf</em> to the file.
+    This function returns non-negative on success, negative on failure.
+
+	<br><br>
+      <dt><code>herr_t H5Aread (hid_t <em>attr_id</em>,
+      hid_t <em>mem_type_id</em>, void *<em>buf</em>)</code>
+      <dd>This function read an attribute, specified with <em>attr_id</em>, with
+    <em>mem_type_id</em> specifying the datatype in memory.  The entire
+    attribute is read into <em>buf</em> from the file.
+    This function returns non-negative on success, negative on failure.
+
+    </dl>
+
+    <h2>4. Attribute Inquiry Functions</h2>
+
+    <dl>
+      <dt><code>herr_t H5Aiterate (hid_t <em>loc_id</em>, 
+      unsigned *<em>attr_number</em>, 
+      H5A_operator <em>operator</em>, 
+	  void *<em>operator_data</em>)</code>
+      <dd> This function iterates over the attributes of the dataset or group
+    specified with <em>loc_id</em>.  For each attribute of the object, the
+    <em>operator_data</em> and some additional information (specified below)
+    are passed to the <em>operator</em> function.  The iteration begins with
+    the <em>*attr_number</em> object in the group and the next attribute to be
+    processed by the operator is returned in <em>*attr_number</em>.
+        <P>The iterator returns a negative value if something is wrong, the return
+    value of the last operator if it was non-zero, or zero if all attributes
+    were processed.
+        <P>The prototype for H5A_operator_t is: <br>
+            <code>typedef herr_t (*H5A_operator_t)(hid_t <em>loc_id</em>,
+                const char *<em>attr_name</em>, void *<em>operator_data</em>);</code>
+    <P>The operation receives the ID for the group or dataset being iterated over
+    (<em>loc_id</em>), the name of the current attribute about the object (<em>attr_name</em>)
+    and the pointer to the operator data passed in to H5Aiterate
+    (<em>operator_data</em>).  The return values from an operator are:
+        <ul>
+        <li>Zero causes the iterator to continue, returning zero when all 
+            attributes have been processed.
+        <li>Positive causes the iterator to immediately return that positive
+            value, indicating short-circuit success.  The iterator can be
+            restarted at the next attribute.
+        <li>Negative causes the iterator to immediately return that value,
+            indicating failure.  The iterator can be restarted at the next
+            attribute.
+        </ul>
+	<br><br>
+      <dt><code>hid_t H5Aget_space (hid_t <em>attr_id</em>)</code>
+      <dd>This function retrieves a copy of the dataspace for an attribute.
+    The dataspace ID returned from this function must be released with H5Sclose
+    or resource leaks will develop.
+    This function returns a dataspace ID for success or negative for failure.
+	<br><br>
+      <dt><code>hid_t H5Aget_type (hid_t <em>attr_id</em>)</code>
+      <dd>This function retrieves a copy of the datatype for an attribute.
+    The datatype ID returned from this function must be released with H5Tclose
+    or resource leaks will develop.
+    This function returns a datatype ID for success or negative for failure.
+	<br><br>
+      <dt><code>ssize_t H5Aget_name (hid_t <em>attr_id</em>,
+          size_t <em>buf_size</em>, char *<em>buf</em>)</code>
+      <dd>This function retrieves the name of an attribute for an attribute ID.
+    Up to <em>buf_size</em> characters are stored in <em>buf</em> followed by a
+    '\0' string terminator.  If the name of the attribute is longer than
+    <em>buf_size</em>-1, the string terminator is stored in the last position
+    of the buffer to properly terminate the string.
+    This function returns the length of the attribute's name (which may be
+    longer than <em>buf_size</em>) on success or negative for failure.
+	<br><br>
+      <dt><code>int H5Aget_num_attrs (hid_t <em>loc_id</em>)</code>
+      <dd>This function returns the number of attributes attached to a dataset or
+    group, <em>loc_id</em>.
+    This function returns non-negative for success or negative for failure.
+    </dl>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+
+ 
+Last modified: 6 July 2000 
+
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Big.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Big.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Big.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Big Datasets on Small Machines</title>
+  </head>
+
+  <body>
+    <h1>Big Datasets on Small Machines</h1>
+
+    <h2>1. Introduction</h2>
+
+    <p>The HDF5 library is able to handle files larger than the
+      maximum file size, and datasets larger than the maximum memory
+      size.  For instance, a machine where <code>sizeof(off_t)</code>
+      and <code>sizeof(size_t)</code> are both four bytes can handle
+      datasets and files as large as 18x10^18 bytes.  However, most
+      Unix systems limit the number of concurrently open files, so a
+      practical file size limit is closer to 512GB or 1TB.
+
+    <p>Two "tricks" must be imployed on these small systems in order
+      to store large datasets.  The first trick circumvents the
+      <code>off_t</code> file size limit and the second circumvents
+      the <code>size_t</code> main memory limit.
+
+    <h2>2. File Size Limits</h2>
+
+    <p>Systems that have 64-bit file addresses will be able to access
+      those files automatically.  One should see the following output
+      from configure:
+
+    <p><code><pre>
+checking size of off_t... 8
+    </pre></code>
+
+    <p>Also, some 32-bit operating systems have special file systems
+      that can support large (&gt;2GB) files and HDF5 will detect
+      these and use them automatically.  If this is the case, the
+      output from configure will show:
+
+    <p><code><pre>
+checking for lseek64... yes
+checking for fseek64... yes
+    </pre></code>
+
+    <p>Otherwise one must use an HDF5 file family.  Such a family is
+      created by setting file family properties in a file access
+      property list and then supplying a file name that includes a
+      <code>printf</code>-style integer format.  For instance:
+
+    <p><code><pre>
+hid_t plist, file;
+plist = H5Pcreate (H5P_FILE_ACCESS);
+H5Pset_family (plist, 1&lt;&lt;30, H5P_DEFAULT);
+file = H5Fcreate ("big%03d.h5", H5F_ACC_TRUNC, H5P_DEFAULT, plist);
+    </code></pre>
+
+    <p>The second argument (<code>1&lt;&lt;30</code>) to
+      <code>H5Pset_family()</code> indicates that the family members
+      are to be 2^30 bytes (1GB) each although we could have used any
+      reasonably large value.  In general, family members cannot be
+      2GB because writes to byte number 2,147,483,647 will fail, so
+      the largest safe value for a family member is 2,147,483,647.
+      HDF5 will create family members on demand as the HDF5 address
+      space increases, but since most Unix systems limit the number of
+      concurrently open files the effective maximum size of the HDF5
+      address space will be limited (the system on which this was
+      developed allows 1024 open files, so if each family member is
+      approx 2GB then the largest HDF5 file is approx 2TB).
+
+    <p>If the effective HDF5 address space is limited then one may be
+      able to store datasets as external datasets each spanning
+      multiple files of any length since HDF5 opens external dataset
+      files one at a time.  To arrange storage for a 5TB dataset split
+      among 1GB files one could say:
+
+    <p><code><pre>
+hid_t plist = H5Pcreate (H5P_DATASET_CREATE);
+for (i=0; i&lt;5*1024; i++) {
+   sprintf (name, "velocity-%04d.raw", i);
+   H5Pset_external (plist, name, 0, (size_t)1&lt;&lt;30);
+}
+    </code></pre>
+
+    <h2>3. Dataset Size Limits</h2>
+
+    <p>The second limit which must be overcome is that of
+      <code>sizeof(size_t)</code>.  HDF5 defines a data type called
+      <code>hsize_t</code> which is used for sizes of datasets and is,
+      by default, defined as <code>unsigned long long</code>.
+
+    <p>To create a dataset with 8*2^30 4-byte integers for a total of
+      32GB one first creates the dataspace.  We give two examples
+      here: a 4-dimensional dataset whose dimension sizes are smaller
+      than the maximum value of a <code>size_t</code>, and a
+      1-dimensional dataset whose dimension size is too large to fit
+      in a <code>size_t</code>.
+
+    <p><code><pre>
+hsize_t size1[4] = {8, 1024, 1024, 1024};
+hid_t space1 = H5Screate_simple (4, size1, size1);
+
+hsize_t size2[1] = {8589934592LL};
+hid_t space2 = H5Screate_simple (1, size2, size2};
+    </pre></code>
+
+    <p>However, the <code>LL</code> suffix is not portable, so it may
+      be better to replace the number with
+      <code>(hsize_t)8*1024*1024*1024</code>.
+
+    <p>For compilers that don't support <code>long long</code> large
+      datasets will not be possible.  The library performs too much
+      arithmetic on <code>hsize_t</code> types to make the use of a
+      struct feasible.
+
+    <hr>
+    <address><a href="mailto:matzke at llnl.gov">Robb Matzke</a></address>
+<!-- Created: Fri Apr 10 13:26:04 EDT 1998 -->
+<!-- hhmts start -->
+Last modified: Sun Jul 19 11:37:25 EDT 1998
+<!-- hhmts end -->
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Caching.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Caching.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Caching.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,193 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Data Caching</title>
+    
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>Data Caching</h1>
+
+    <h2>1. Meta Data Caching</h2>
+
+    <p>The HDF5 library caches two types of data: meta data and raw
+      data.  The meta data cache holds file objects like the file
+      header, symbol table nodes, global heap collections, object
+      headers and their messages, etc. in a partially decoded
+      state. The cache has a fixed number of entries which is set with 
+      the file access property list (defaults to 10k) and each entry
+      can hold a single meta data object.  Collisions between objects
+      are handled by preempting the older object in favor of the new
+      one.
+
+    <h2>2. Raw Data Chunk Caching</h2>
+
+    <p>Raw data chunks are cached because I/O requests at the
+      application level typically don't map well to chunks at the
+      storage level.  The chunk cache has a maximum size in bytes
+      set with the file access property list (defaults to 1MB) and
+      when the limit is reached chunks are preempted based on the
+      following set of heuristics.
+
+    <ul>
+      <li>Chunks which have not been accessed for a long time
+	relative to other chunks are penalized.
+      <li>Chunks which have been accessed frequently in the recent
+	past are favored.
+      <li>Chunks which are completely read and not written, completely 
+	written but not read, or completely read and completely
+	written are penalized according to <em>w0</em>, an
+	application-defined weight between 0 and 1 inclusive. A weight 
+	of zero does not penalize such chunks while a weight of 1
+	penalizes those chunks more than all other chunks.  The
+	default is 0.75.
+      <li>Chunks which are larger than the maximum cache size do not
+	participate in the cache.
+    </ul>
+
+    <p>One should choose large values for <em>w0</em> if I/O requests
+      typically do not overlap but smaller values for <em>w0</em> if
+      the requests do overlap.  For instance, reading an entire 2d
+      array by reading from non-overlapping "windows" in a row-major
+      order would benefit from a high <em>w0</em> value while reading
+      a diagonal accross the dataset where each request overlaps the
+      previous request would benefit from a small <em>w0</em>.
+
+    <h2>3. Data Caching Operations</h2>
+
+    <p>The cache parameters for both caches are part of a file access
+      property list and are set and queried with this pair of
+      functions:
+
+    <dl>
+      <dt><code>herr_t H5Pset_cache(hid_t <em>plist</em>, unsigned int 
+	  <em>mdc_nelmts</em>, size_t <em>rdcc_nbytes</em>, double
+	  <em>w0</em>)</code>
+      <dt><code>herr_t H5Pget_cache(hid_t <em>plist</em>, unsigned int 
+	  *<em>mdc_nelmts</em>, size_t *<em>rdcc_nbytes</em>, double
+	  <em>w0</em>)</code>
+      <dd>Sets or queries the meta data cache and raw data chunk cache 
+	parameters.  The <em>plist</em> is a file access property
+	list.  The number of elements (objects) in the meta data cache 
+	is <em>mdc_nelmts</em>.  The total size of the raw data chunk
+	cache and the preemption policy is <em>rdcc_nbytes</em> and
+	<em>w0</em>.  For <code>H5Pget_cache()</code> any (or all) of
+	the pointer arguments may be null pointers.
+    </dl>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+<!-- Created: Tue May 26 15:20:14 EDT 1998 -->
+<!-- hhmts start -->
+Last modified: 13 December 1999 
+<!-- hhmts end -->
+
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Chunk_f1.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Chunk_f1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Chunk_f2.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Chunk_f2.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Chunk_f3.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Chunk_f3.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Chunk_f4.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Chunk_f4.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Chunk_f5.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Chunk_f5.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Chunk_f6.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Chunk_f6.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Chunking.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Chunking.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Chunking.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,316 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Dataset Chunking</title>
+    
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>Dataset Chunking Issues</h1>
+
+    <h2>Table of Contents</h2>
+
+    <ul>
+      <li><a href="#S1">1. Introduction</a>
+      <li><a href="#S2">2. Raw Data Chunk Cache</a>
+      <li><a href="#S3">3. Cache Efficiency</a>
+      <li><a href="#S4">4. Fragmentation</a>
+      <li><a href="#S5">5. File Storage Overhead</a>
+      <li><a href="#S6">6. Chunk Compression</a>
+    </ul>
+
+    <h2><a name="S1">1. Introduction</a></h2>
+
+
+    <p><em>Chunking</em> refers to a storage layout where a dataset is
+      partitioned into fixed-size multi-dimensional chunks.  The
+      chunks cover the dataset but the dataset need not be an integral
+      number of chunks.  If no data is ever written to a chunk then
+      that chunk isn't allocated on disk.  Figure 1 shows a 25x48
+      element dataset covered by nine 10x20 chunks and 11 data points
+      written to the dataset.  No data was written to the region of
+      the dataset covered by three of the chunks so those chunks were
+      never allocated in the file -- the other chunks are allocated at 
+      independent locations in the file and written in their entirety.
+
+      <center><image src="Chunk_f1.gif"><br><b>Figure 1</b></center>
+
+    <p>The HDF5 library treats chunks as atomic objects -- disk I/O is 
+      always in terms of complete chunks<a href="#fn1">(1)</a>. This
+      allows data filters to be defined by the application to perform
+      tasks such as compression, encryption, checksumming,
+      <em>etc</em>. on entire chunks. As shown in Figure 2, if
+      <code>H5Dwrite()</code> touches only a few bytes of the chunk,
+      the entire chunk is read from the file, the data passes upward
+      through the filter pipeline, the few bytes are modified, the
+      data passes downward through the filter pipeline, and the entire
+      chunk is written back to the file.
+
+      <center><image src="Chunk_f2.gif"><br><b>Figure 2</b></center>
+
+    <h2><a name="S2">2. The Raw Data Chunk Cache</a></h2>
+
+    <p>It's obvious from Figure 2 that calling <code>H5Dwrite()</code> 
+      many times from the application would result in poor performance
+      even if the data being written all falls within a single chunk.
+      A raw data chunk cache layer was added between the top of the
+      filter stack and the bottom of the byte modification layer<a
+      href="#fn2">(2)</a>. By default, the chunk cache will store 521
+      chunks or 1MB of data (whichever is less) but these values can
+      be modified with <code>H5Pset_cache()</code>.
+
+    <p>The preemption policy for the cache favors certain chunks and
+      tries not to preempt them.
+
+    <ul>
+      <li>Chunks that have been accessed frequently in the near past
+	are favored.
+      <li>A chunk which has just entered the cache is favored.
+      <li>A chunk which has been completely read or completely written 
+	but not partially read or written is penalized according to
+	some application specified weighting between zero and one.
+      <li>A chunk which is larger than the maximum cache size is not
+	eligible for caching.
+    </ul>
+
+    <h2><a name="S3">3. Cache Efficiency</a></h2>
+
+    <p>Now for some real numbers... A 2000x2000 element dataset is
+      created and covered by a 20x20 array of chunks (each chunk is 100x100
+      elements). The raw data cache is adjusted to hold at most 25 chunks by
+      setting the maximum number of bytes to 25 times the chunk size in
+      bytes. Then the application creates a square, two-dimensional memory
+      buffer and uses it as a window into the dataset, first reading and then
+      rewriting in row-major order by moving the window across the dataset
+      (the read and write tests both start with a cold cache).
+
+    <p>The measure of efficiency in Figure 3 is the number of bytes requested
+      by the application divided by the number of bytes transferred from the
+      file.  There are at least a couple ways to get an estimate of the cache
+      performance: one way is to turn on <a href="Debugging.html">cache
+      debugging</a> and look at the number of cache misses.  A more accurate
+      and specific way is to register a data filter whose sole purpose is to
+      count the number of bytes that pass through it (that's the method used
+      below).
+
+    <center><image src="Chunk_f3.gif"><br><b>Figure 3</b></center>
+
+    <p>The read efficiency is less than one for two reasons: collisions in the
+      cache are handled by preempting one of the colliding chunks, and the
+      preemption algorithm occasionally preempts a chunk which hasn't been
+      referenced for a long time but is about to be referenced in the near
+      future.
+
+    <p>The write test results in lower efficiency for most window
+      sizes because HDF5 is unaware that the application is about to
+      overwrite the entire dataset and must read in most chunks before 
+      modifying parts of them.
+
+    <p>There is a simple way to improve efficiency for this example.
+      It turns out that any chunk that has been completely read or
+      written is a good candidate for preemption.  If we increase the
+      penalty for such chunks from the default 0.75 to the maximum
+      1.00 then efficiency improves.
+
+      <center><image src="Chunk_f4.gif"><br><b>Figure 4</b></center>
+
+    <p>The read efficiency is still less than one because of
+      collisions in the cache.  The number of collisions can often be
+      reduced by increasing the number of slots in the cache.  Figure
+      5 shows what happens when the maximum number of slots is
+      increased by an order of magnitude from the default (this change 
+      has no major effect on memory used by the test since the byte
+      limit was not increased for the cache).
+
+      <center><image src="Chunk_f5.gif"><br><b>Figure 5</b></center>
+
+    <p>Although the application eventually overwrites every chunk
+      completely the library has know way of knowing this before hand
+      since most calls to <code>H5Dwrite()</code> modify only a
+      portion of any given chunk. Therefore, the first modification of 
+      a chunk will cause the chunk to be read from disk into the chunk 
+      buffer through the filter pipeline.  Eventually HDF5 might
+      contain a data set transfer property that can turn off this read 
+      operation resulting in write efficiency which is equal to read
+      efficiency.
+
+
+    <h2><a name="S4">4. Fragmentation</a></h2>
+
+    <p>Even if the application transfers the entire dataset contents with a
+      single call to <code>H5Dread()</code> or <code>H5Dwrite()</code> it's
+      possible the request will be broken into smaller, more manageable
+      pieces by the library.  This is almost certainly true if the data
+      transfer includes a type conversion.
+
+      <center><image src="Chunk_f6.gif"><br><b>Figure 6</b></center>
+
+    <p>By default the strip size is 1MB but it can be changed by calling
+      <code>H5Pset_buffer()</code>.
+
+
+    <h2><a name="S5">5. File Storage Overhead</a></h2>
+
+    <p>The chunks of the dataset are allocated at independent
+      locations throughout the HDF5 file and a B-tree maps chunk
+      N-dimensional addresses to file addresses. The more chunks that
+      are allocated for a dataset the larger the B-tree. Large B-trees
+      have two disadvantages:
+
+    <ul>
+      <li>The file storage overhead is higher and more disk I/O is
+	required to traverse the tree from root to leaves.
+      <li>The increased number of B-tree nodes will result in higher
+	contention for the meta data cache.
+    </ul>
+
+    <p>There are three ways to reduce the number of B-tree nodes.  The
+      obvious way is to reduce the number of chunks by choosing a larger chunk
+      size (doubling the chunk size will cut the number of B-tree nodes in
+      half).  Another method is to adjust the split ratios for the B-tree by
+      calling <code>H5Pset_btree_ratios()</code>, but this method typically
+      results in only a slight improvement over the default settings.
+      Finally, the out-degree of each node can be increased by calling
+      <code>H5Pset_istore_k()</code> (increasing the out degree actually
+      increases file overhead while decreasing the number of nodes).
+
+
+    <h2><a name="S6">6. Chunk Compression</a></h2>
+
+    <p>Dataset chunks can be compressed through the use of filters.
+     See the chapter &ldquo;<a href="Filters.html">Filters in HDF5</a>.&rdquo;
+
+    <p>Reading and rewriting compressed chunked data can result in holes 
+     in an HDF5 file.  In time, enough such holes can increase the 
+     file size enough to impair application or library performance 
+     when working with that file.  See
+     &ldquo;<a href="Performance.html#Freespace">Freespace Management</a>&rdquo;
+     in the chapter
+     &ldquo;<a href="Performance.html">Performance Analysis and Issues</a>.&rdquo;
+
+
+<hr>
+
+    <p><a name="fn1">Footnote 1:</a> Parallel versions of the library
+      can access individual bytes of a chunk when the underlying file
+      uses MPI-IO.
+
+    <p><a name="fn2">Footnote 2:</a> The raw data chunk cache was
+      added before the second alpha release.</p>
+      
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+<!-- Created: Tue Oct 20 12:38:40 EDT 1998 -->
+<!-- hhmts start -->
+Last modified: 2 August 2001 
+<!-- hhmts end -->
+
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Coding.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Coding.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Coding.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,300 @@
+<HTML>
+<HEAD><TITLE>
+             HDF5 Naming Scheme
+      </TITLE> </HEAD>
+
+<BODY bgcolor="#ffffff">
+  
+
+<H1>
+<FONT color="#c80028"
+ <I> <B> <CENTER>  HDF5 Naming Scheme for </CENTER> </B> </I> </H1>
+</FONT>
+<P>
+<UL>
+
+<LI>       <A HREF = "#01"><I>  FILES </I> </A>
+<LI>       <A HREF = "#02"><I>  PACKAGES </I> </A>
+<LI>       <A HREF = "#03"><I>  PUBLIC vs PRIVATE </I> </A>
+<LI>       <A HREF = "#04"><I>  INTEGRAL TYPES </I> </A>
+<LI>       <A HREF = "#05"><I>  OTHER TYPES </I> </A>
+<LI>       <A HREF = "#06"><I>  GLOBAL VARIABLES </I> </A>
+<LI>       <A HREF = "#07"><I>  MACROS, PREPROCESSOR CONSTANTS, AND ENUM MEMEBERs </I> </A>
+
+</UL>
+<P>
+<center>
+	 Authors: <A HREF = "mailto:koziol at ncsa.uiuc.edu">
+        <I>Quincey Koziol</I> </A> and 
+                  <A HREF = "mailto:matzke at llnl.gov">   
+        <I>		  Robb Matzke </I> </A>   
+
+</center>
+<UL>
+
+<FONT color="#c80028"
+<LI> <A NAME="01">  <B> <I> FILES </I> </B>  </A>
+</FONT>
+
+<UL>
+
+  <LI>  Source files are named according to the package they contain (see
+    below).  All files will begin with `H5' so we can stuff our
+    object files into someone else's library and not worry about file
+    name conflicts.
+  <P>For Example:
+<i><b>
+<dd>	H5.c		-- "Generic" library functions 
+   <br>
+<dd>	H5B.c		-- B-link tree functions
+</i></b>
+  <p>
+   <LI> If a package is in more than one file, then another name is tacked
+    on.  It's all lower case with no underscores or hyphens.
+   <P>For Example:
+<i><b>
+<dd>	H5F.c		-- the file for this package
+   <br>
+<dd>	H5Fstdio.c	-- stdio functions (just an example)
+   <br>
+<dd>	H5Ffcntl.c	-- fcntl functions (just an example)
+</i></b>
+   <p>
+  <LI> Each package file has a header file of API stuff (unless there is
+    no API component to the package)
+   <P>For Example:
+<i><b>
+<dd>	H5F.h		-- things an application would see. </i> </b>
+   <P>
+    and a header file of private stuff
+<i><b>
+   <p>
+<dd>	H5Fprivate.h	-- things an application wouldn't see. The
+                    	   private header includes the public header.
+</i></b>
+    <p>
+    and a header for private prototypes
+<i><b>
+   <p>
+<dd>	H5Fproto.h	-- prototypes for internal functions.
+</i></b>
+    <P>
+    By splitting the prototypes into separate include files we don't
+    have to recompile everything when just one function prototype
+    changes.
+
+   <LI> The main API header file is `hdf5.h' and it includes each of the
+    public header files but none of the private header files.  Or the
+    application can include just the public header files it needs.
+
+   <LI> There is no main private or prototype header file because it
+    prevents make from being efficient.  Instead, each source file
+    includes only the private header and prototype files it needs
+    (first all the private headers, then all the private prototypes).
+
+   <LI> Header files should include everything they need and nothing more.
+
+</UL>
+<P>
+
+<FONT color="#c80028"
+<LI> <A NAME="02">  <B> <I> PACKAGES </I> </B>  </A>
+</FONT>
+
+<P>
+Names exported beyond function scope begin with `H5' followed by zero,
+one, or two upper-case letters that describe the class of object.
+This prefix is the package name.  The implementation of packages
+doesn't necessarily have to map 1:1 to the source files.
+<P>
+<i><b>
+<dd>	H5	-- library functions
+<br>
+<dd>	H5A	-- atoms
+<br>
+<dd>	H5AC	-- cache
+<br>
+<dd>	H5B	-- B-link trees
+<br>
+<dd>	H5D	-- datasets
+<br>
+<dd>	H5E	-- error handling
+<br>
+<dd>	H5F	-- files
+<br>
+<dd>	H5G	-- groups
+<br>
+<dd>	H5M	-- meta data
+<br>
+<dd>	H5MM	-- core memory management
+<br>
+<dd>	H5MF	-- file memory management
+<br>
+<dd>	H5O	-- object headers
+<br>
+<dd>	H5P	-- Property Lists
+<br>
+<dd>	H5S	-- dataspaces
+<br>
+<dd>	H5R	-- relationships
+<br>
+<dd>	H5T	-- datatype
+</i></b>
+<p>
+Each package implements a single main class of object (e.g., the H5B
+package implements B-link trees).  The main data type of a package is
+the package name followed by `_t'.
+<p>
+<i><b>
+<dd>	H5F_t		-- HDF5 file type
+<br>
+<dd>	H5B_t		-- B-link tree data type
+</i></b>
+<p>
+
+Not all packages implement a data type (H5, H5MF) and some
+packages provide access to a preexisting data type (H5MM, H5S).
+<p>
+
+
+<FONT color="#c80028"
+<LI> <A NAME="03">  <B> <I> PUBLIC vs PRIVATE </I> </B>  </A>
+</FONT>
+<p>
+If the symbol is for internal use only, then the package name is
+followed by an underscore and the rest of the name.  Otherwise, the
+symbol is part of the API and there is no underscore between the
+package name and the rest of the name.
+<p>
+<i><b>
+<dd>	H5Fopen		-- an API function.
+<br>
+<dd>	H5B_find	-- an internal function.
+</i></b>
+<p>
+For functions, this is important because the API functions never pass
+pointers around (they use atoms instead for hiding the implementation)
+and they perform stringent checks on their arguments.  Internal
+unctions, on the other hand, check arguments with assert().
+<p>
+Data types like H5B_t carry no information about whether the type is
+public or private since it doesn't matter.
+
+<p>
+
+
+<FONT color="#c80028"
+<LI> <A NAME="04"> <B> <I> INTEGRAL TYPES </I> </B>  </A>
+</FONT>
+<p>
+Integral fixed-point type names are an optional `u' followed by `int'
+followed by the size in bits (8, 16,
+32, or 64).  There is no trailing `_t' because these are common
+enough and follow their own naming convention.
+<p>
+<pre><H4>
+<dd>	hbool_t     -- boolean values (BTRUE, BFALSE, BFAIL)
+<br>
+<dd>	int8		-- signed 8-bit integers
+<br>
+<dd>	uint8       -- unsigned 8-bit integers
+<br>
+<dd>	int16       -- signed 16-bit integers
+<br>
+<dd>	uint16      -- unsigned 16-bit integers
+<br>
+<dd>	int32       -- signed 32-bit integers
+<br>
+<dd>	uint32      -- unsigned 32-bit integers
+<br>
+<dd>	int64       -- signed 64-bit integers
+<br>
+<dd>	uint64      -- unsigned 64-bit integers
+<br>
+<dd>	intn		-- "native" integers
+<br>
+<dd>	uintn		-- "native" unsigned integers
+
+</pre></H4>
+<p>
+
+<FONT color="#c80028"
+<LI> <A NAME="05"> <B> <I> OTHER TYPES </I> </B> </A>
+</FONT>
+
+<p>
+
+Other data types are always followed by `_t'.
+<p>
+<pre><H4>
+<dd>	H5B_key_t-- additional data type used by H5B package.
+</pre></H4>
+<p>
+
+However, if the name is so common that it's used almost everywhere,
+then we make an alias for it by removing the package name and leading
+underscore and replacing it with an `h'  (the main datatype for a
+package already has a short enough name, so we don't have aliases for
+them).
+<P>
+<pre><H4>
+<dd>	typedef H5E_err_t herr_t;
+</pre> </H4>
+<p>
+
+<FONT color="#c80028"
+<LI> <A NAME="06">  <B> <I> GLOBAL VARIABLES </I> </B>  </A>
+</FONT>
+<p>
+Global variables include the package name and end with `_g'.
+<p>
+<pre><H4>
+<dd>	H5AC_methods_g	-- global variable in the H5AC package.
+</pre> </H4>
+<p>
+
+
+<FONT color="#c80028"
+<LI> <A NAME="07">   
+<I> <B>
+MACROS, PREPROCESSOR CONSTANTS, AND ENUM MEMBERS
+  </I> </B>  </A>
+</FONT>
+<p>
+Same rules as other symbols except the name is all upper case.  There
+are a few exceptions: <br>
+<ul>
+<li>	Constants and macros defined on a system that is deficient: 
+       <p><pre><H4> 
+<dd>		MIN(x,y), MAX(x,y) and their relatives
+        </pre></H4>
+
+<li>	Platform constants :
+       <P> 
+		No naming scheme; determined by OS and compiler.<br>
+		These appear only in one header file anyway.
+        <p>
+<li>	Feature test constants (?)<br>
+		Always start with `HDF5_HAVE_' like HDF5_HAVE_STDARG_H for a
+		header file, or HDF5_HAVE_DEV_T for a data type, or
+		HDF5_HAVE_DIV for a function.
+</UL>
+<p>
+
+</UL>
+<p>
+<H6>
+<center>
+	 This file /hdf3/web/hdf/internal/HDF_standard/HDF5.coding_standard.html is
+	 maintained by Elena Pourmal <A HREF = "mailto:epourmal at ncsa.uiuc.edu">
+         <I>epourmal at ncsa.uiuc.edu</I> </A>.
+</center>
+<p>
+<center>
+          Last modified August 5, 1997
+</center>
+
+</H6>
+</BODY>
+<HTML>
+

Added: packages/hdf5/branches/upstream/current/doc/html/Copyright.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Copyright.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Copyright.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,119 @@
+<html>
+  <head>
+    <title>
+      HDF5 Copyright Notice
+    </title>
+  </head>
+
+  <body bgcolor="#FFFFFF">
+
+
+
+<hr>               
+
+<h3>Copyright Notice and Statement for
+<br>
+NCSA HDF5 (Hierarchical Data Format 5) Software Library and Utilities</h3>
+<hr>               
+
+<font size="-1">
+<p>
+ 
+NCSA HDF5 (Hierarchical Data Format 5) Software Library and Utilities
+<br>
+Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 by 
+the Board of Trustees of the University of Illinois
+<br>
+<strong>All rights reserved.</strong>
+
+<p>
+Contributors:   National Center for Supercomputing Applications (NCSA) at
+the University of Illinois at Urbana-Champaign (UIUC), Lawrence Livermore 
+National Laboratory (LLNL), Sandia National Laboratories (SNL), Los Alamos 
+National Laboratory (LANL), Jean-loup Gailly and Mark Adler (gzip library).
+
+<p>
+Redistribution and use in source and binary forms, with or without
+modification, are permitted for any purpose (including commercial purposes)
+provided that the following conditions are met:
+
+<ol>
+<li>Redistributions of source code must retain the above copyright notice,
+this list of conditions, and the following disclaimer.
+
+<li>Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions, and the following disclaimer in the
+documentation and/or materials provided with the distribution.
+
+<li>In addition, redistributions of modified forms of the source or binary
+code must carry prominent notices stating that the original code was
+changed and the date of the change.
+
+<li>All publications or advertising materials mentioning features or use of
+this software are asked, but not required, to acknowledge that it was 
+developed by the National Center for Supercomputing Applications at the 
+University of Illinois at Urbana-Champaign and to credit the contributors.
+
+<li>Neither the name of the University nor the names of the Contributors may
+be used to endorse or promote products derived from this software without
+specific prior written permission from the University or the Contributors,
+as appropriate for the name(s) to be used.
+
+<li>THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND THE CONTRIBUTORS "AS IS"
+WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED.  In no event
+shall the University or the Contributors be liable for any damages suffered
+by the users arising out of the use of this software, even if advised of
+the possibility of such damage.
+</ol>
+
+
+
+<hr>
+Portions of HDF5 were developed with support from the University of 
+California, Lawrence Livermore National Laboratory (UC LLNL).
+The following statement applies to those portions of the product
+and must be retained in any redistribution of source code, binaries,
+documentation, and/or accompanying materials:
+
+<dir>
+	This work was partially produced at the University of California,
+	Lawrence Livermore National Laboratory (UC LLNL) under contract no.
+	W-7405-ENG-48 (Contract 48) between the U.S. Department of Energy 
+	(DOE) and The Regents of the University of California (University) 
+	for the operation of UC LLNL.
+	
+	<br><br>
+	<b>DISCLAIMER:</b>
+	This work was prepared as an account of work sponsored by an agency 
+	of the United States Government.  Neither the United States 
+	Government nor the University of California nor any of their 
+	employees, makes any warranty, express or implied, or assumes any 
+	liability or responsibility for the accuracy, completeness, or 
+	usefulness of any information, apparatus, product, or process 
+	disclosed, or represents that its use would not infringe privately-
+	owned rights.  Reference herein to any specific commercial products, 
+	process, or service by trade name, trademark, manufacturer, or 
+	otherwise, does not necessarily constitute or imply its endorsement, 
+	recommendation, or favoring by the United States Government or the 
+	University of California.  The views and opinions of authors 
+	expressed herein do not necessarily state or reflect those of the 
+	United States Government or the University of California, and shall 
+	not be used for advertising or product endorsement purposes.
+</dir>
+</font>
+
+<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 1 November 2005");
+-->
+</SCRIPT>
+
+</body>
+</html>
+

Added: packages/hdf5/branches/upstream/current/doc/html/Datasets.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Datasets.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Datasets.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,957 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Dataset Interface (H5D)</title>
+    
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>The Dataset Interface (H5D)</h1>
+
+    <h2>1. Introduction</h2>
+
+    <p>The purpose of the dataset interface is to provide a mechanism
+      to describe properties of datasets and to transfer data between
+      memory and disk.  A dataset is composed of a collection of raw
+      data points and four classes of meta data to describe the data
+      points.  The interface is hopefully designed in such a way as to
+      allow new features to be added without disrupting current
+      applications that use the dataset interface.
+
+    <p>The four classes of meta data are:
+
+    <dl>
+      <dt>Constant Meta Data
+      <dd>Meta data that is created when the dataset is created and
+	exists unchanged for the life of the dataset.  For instance,
+	the datatype of stored array elements is defined when the
+	dataset is created and cannot be subsequently changed.
+	
+      <dt>Persistent Meta Data
+      <dd>Meta data that is an integral and permanent part of a
+	dataset but can change over time.  For instance, the size in
+	any dimension can increase over time if such an increase is
+	allowed when the dataset was created.
+
+      <dt>Memory Meta Data
+      <dd>Meta data that exists to describe how raw data is organized
+	in the application's memory space.  For instance, the data
+	type of elements in an application array might not be the same
+	as the datatype of those elements as stored in the HDF5 file.
+
+      <dt>Transport Meta Data
+      <dd>Meta data that is used only during the transfer of raw data
+	from one location to another.  For instance, the number of
+	processes participating in a collective I/O request or hints
+	to the library to control caching of raw data.
+    </dl>
+
+    <p>Each of these classes of meta data is handled differently by
+      the library although the same API might be used to create them.
+      For instance, the datatype exists as constant meta data and as
+      memory meta data; the same API (the <code>H5T</code> API) is
+      used to manipulate both pieces of meta data but they're handled
+      by the dataset API (the <code>H5D</code> API) in different
+      manners.
+
+
+
+    <h2>2. Storage Layout Properties</h2>
+
+    <p>The dataset API partitions these terms on three orthogonal axes
+      (layout, compression, and external storage) and uses a
+      <em>dataset creation property list</em> to hold the various
+      settings and pass them through the dataset interface.  This is
+      similar to the way HDF5 files are created with a file creation
+      property list.  A dataset creation property list is always
+      derived from the default dataset creation property list (use
+      <code>H5Pcreate()</code> to get a copy of the default property
+      list) by modifying properties with various
+      <code>H5Pset_<em>property</em>()</code> functions.
+
+    <dl>
+      <dt><code>herr_t H5Pset_layout (hid_t <em>plist_id</em>,
+	  H5D_layout_t <em>layout</em>)</code>
+      <dd>The storage layout is a piece of constant meta data that
+	describes what method the library uses to organize the raw
+	data on disk. The default layout is contiguous storage.
+
+	<br><br>
+	<dl>
+	  <dt><code>H5D_COMPACT</code>  &nbsp;&nbsp; <i><b>(Not yet implemented.)</b></i>
+	  <dd>The raw data is presumably small and can be stored
+	    directly in the object header.  Such data is
+	    non-extendible, non-compressible, non-sparse, and cannot
+	    be stored externally. Most of these restrictions are
+	    arbitrary but are enforced because of the small size of
+	    the raw data. Storing data in this format eliminates the
+	    disk seek/read request normally necessary to read raw
+	    data. 
+
+	    <br><br>
+	  <dt><code>H5D_CONTIGUOUS</code>
+	  <dd>The raw data is large, non-extendible, non-compressible,
+	    non-sparse, and can be stored externally.  This is the
+	    default value for the layout property.  The term
+	    <em>large</em> means that it may not be possible to hold
+	    the entire dataset in memory.  The non-compressibility is
+	    a side effect of the data being large, contiguous, and
+	    fixed-size at the physical level, which could cause
+	    partial I/O requests to be extremely expensive if
+	    compression were allowed.
+
+	    <br><br>
+	  <dt><code>H5D_CHUNKED</code>
+	  <dd>The raw data is large and can be extended in any
+	    dimension at any time (provided the data space also allows
+	    the extension). It may be sparse at the chunk level (each
+	    chunk is non-sparse, but there might only be a few chunks)
+	    and each chunk can be compressed and/or stored externally.
+	    A dataset is partitioned into chunks so each chunk is the
+	    same logical size.  The chunks are indexed by a B-tree and
+	    are allocated on demand (although it might be useful to be
+	    able to preallocate storage for parts of a chunked array
+	    to reduce contention for the B-tree in a parallel
+	    environment). The chunk size must be defined with
+	    <code>H5Pset_chunk()</code>.
+
+	    <br><br>
+	  <dt><em>others...</em>
+	  <dd>Other layout types may be defined later without breaking
+	    existing code.  However, to be able to correctly read or
+	    modify data stored with one of these new layouts, the
+	    application will need to be linked with a new version of
+	    the library.  This happens automatically on systems with
+	    dynamic linking.
+	</dl>
+    </dl>
+
+    <a name="Dataset_PSetChunk">
+    <p>Once the general layout is defined, the user can define
+    </a>
+      properties of that layout.  Currently, the only layout that has
+      user-settable properties is the <code>H5D_CHUNKED</code> layout,
+      which needs to know the dimensionality and chunk size.
+    <dl>
+      <dt><code>herr_t H5Pset_chunk (hid_t <em>plist_id</em>, int
+	  <em>ndims</em>, hsize_t <em>dim</em>[])</code>
+      <dd>This function defines the logical size of a chunk for
+	chunked layout.  If the layout property is set to
+	<code>H5D_CHUNKED</code> and the chunk size is set to
+	<em>dim</em>. The number of elements in the <em>dim</em> array
+	is the dimensionality, <em>ndims</em>. One need not call
+	<code>H5Dset_layout()</code> when using this function since
+	the chunked layout is implied.
+    </dl>
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example: Chunked Storage</h4></caption>
+	  <tr>
+	    <td>
+	      <p>This example shows how a two-dimensional dataset
+		is partitioned into chunks.  The library can manage file
+		memory by moving the chunks around, and each chunk could be
+		compressed.  The chunks are allocated in the file on demand
+		when data is written to the chunk.
+	      <center>
+		<img alt="Chunked Storage" src="chunk1.gif">
+	      </center>
+
+	      <p><code><pre>
+size_t hsize[2] = {1000, 1000};
+plist = H5Pcreate (H5P_DATASET_CREATE);
+H5Pset_chunk (plist, 2, size);
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+
+    <p>Although it is most efficient if I/O requests are aligned on chunk
+      boundaries, this is not a constraint.  The application can perform I/O
+      on any set of data points as long as the set can be described by the
+      data space.  The set on which I/O is performed is called the
+      <em>selection</em>.
+
+    <h2>3. Compression Properties</h2>
+
+    <p>Chunked data storage 
+      (see <a href="#Dataset_PSetChunk"><code>H5Pset_chunk</code></a>) 
+      allows data compression as defined by the function 
+      <code>H5Pset_deflate</code>.
+
+<!--
+    <dl>
+      <dt><code>herr_t H5Pset_compression (hid_t <em>plist_id</em>,
+	  H5Z_method_t <em>method</em>)</code>
+      <dt><code>H5Z_method_t H5Pget_compression (hid_t
+	  <em>plist_id</em>)</code>
+      <dd>These functions set and query the compression method that
+	is used to compress the raw data of a dataset.  The
+	<em>plist_id</em> is a dataset creation property list.  The
+	possible values for the compression method are:
+
+	<br><br>
+	<dl>
+	  <dt><code>H5Z_NONE</code>
+	  <dd>This is the default and specifies that no compression is
+	    to be performed.
+
+	    <br><br>
+	  <dt><code>H5Z_DEFLATE</code>
+	  <dd>This specifies that a variation of the Lempel-Ziv 1977
+	    (LZ77) encoding is used, the same encoding used by the
+	    free GNU <code>gzip</code> program.
+	</dl>
+-->
+
+	<br><br>
+      <dt><code>herr_t H5Pset_deflate (hid_t <em>plist_id</em>,
+	  int <em>level</em>)</code>
+      <dt><code>int H5Pget_deflate (hid_t <em>plist_id</em>)</code>
+      <dd>These functions set or query the deflate level of
+	dataset creation property list <em>plist_id</em>.  The
+	<code>H5Pset_deflate()</code> sets the compression method to
+	<code>H5Z_DEFLATE</code> and sets the compression level to
+	some integer between one and nine (inclusive).  One results in
+	the fastest compression while nine results in the best
+	compression ratio.  The default value is six if
+	<code>H5Pset_deflate()</code> isn't called.  The
+	<code>H5Pget_deflate()</code> returns the compression level
+	for the deflate method, or negative if the method is not the
+	deflate method.
+    </dl>
+
+    <h2>4. External Storage Properties</h2>
+
+    <p>Some storage formats may allow storage of data across a set of
+      non-HDF5 files. Currently, only the <code>H5D_CONTIGUOUS</code> storage
+      format allows external storage.  A set segments (offsets and sizes) in
+      one or more files is defined as an external file list, or <em>EFL</em>,
+      and the contiguous logical addresses of the data storage are mapped onto
+      these segments.
+
+    <dl>
+      <dt><code>herr_t H5Pset_external (hid_t <em>plist</em>, const
+	  char *<em>name</em>, off_t <em>offset</em>, hsize_t
+	  <em>size</em>)</code>
+      <dd>This function adds a new segment to the end of the external
+	file list of the specified dataset creation property list.  The
+	segment begins a byte <em>offset</em> of file <em>name</em> and
+	continues for <em>size</em> bytes.  The space represented by this
+	segment is adjacent to the space already represented by the external
+	file list.  The last segment in a file list may have the size
+	<code>H5F_UNLIMITED</code>, in which case the external file may be 
+        of unlimited size and no more files can be added to the external files list.
+
+	  <br><br>
+      <dt><code>int H5Pget_external_count (hid_t <em>plist</em>)</code>
+      <dd>Calling this function returns the number of segments in an
+	external file list. If the dataset creation property list has no
+	external data then zero is returned.
+
+	<br><br>
+      <dt><code>herr_t H5Pget_external (hid_t <em>plist</em>, unsigned
+	  <em>idx</em>, size_t <em>name_size</em>, char *<em>name</em>, off_t
+	  *<em>offset</em>, hsize_t *<em>size</em>)</code>
+      <dd>This is the counterpart for the <code>H5Pset_external()</code>
+	function.  Given a dataset creation property list and a zero-based
+	index into that list, the file name, byte offset, and segment size are
+	returned through non-null arguments.  At most <em>name_size</em>
+	characters are copied into the <em>name</em> argument which is not
+	null terminated if the file name is longer than the supplied name
+	buffer (this is similar to <code>strncpy()</code>).
+    </dl>
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example: Multiple Segments</h4></caption>
+	  <tr>
+	    <td>
+	      <p>This example shows how a contiguous, one-dimensional dataset
+		is partitioned into three parts and each of those parts is
+		stored in a segment of an external file. The top rectangle
+		represents the logical address space of the dataset
+		while the bottom rectangle represents an external file.
+	      <center>
+		<img alt="Multiple Segments" src="extern1.gif">
+	      </center>
+
+	      <p><code><pre>
+plist = H5Pcreate (H5P_DATASET_CREATE);
+H5Pset_external (plist, "velocity.data", 3000, 1000);
+H5Pset_external (plist, "velocity.data", 0, 2500);
+H5Pset_external (plist, "velocity.data", 4500, 1500);
+	      </pre></code>
+
+	      <p>One should note that the segments are defined in order of the
+		logical addresses they represent, not their order within the
+		external file.  It would also have been possible to put the
+		segments in separate files.  Care should be taken when setting
+		up segments in a single file since the library doesn't
+		automatically check for segments that overlap.
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example: Multi-Dimensional</h4></caption>
+	  <tr>
+	    <td>
+	      <p>This example shows how a contiguous, two-dimensional dataset
+		is partitioned into three parts and each of those parts is
+		stored in a separate external file. The top rectangle
+		represents the logical address space of the dataset
+		while the bottom rectangles represent external files.
+	      <center>
+		<img alt="Multiple Dimensions" src="extern2.gif">
+	      </center>
+
+	      <p><code><pre>
+plist = H5Pcreate (H5P_DATASET_CREATE);
+H5Pset_external (plist, "scan1.data", 0, 24);
+H5Pset_external (plist, "scan2.data", 0, 24);
+H5Pset_external (plist, "scan3.data", 0, 16);
+	      </pre></code>
+
+	      <p>The library maps the multi-dimensional array onto a linear
+		address space like normal, and then maps that address space
+		into the segments defined in the external file list.
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>The segments of an external file can exist beyond the end of the
+      file. The library reads that part of a segment as zeros.  When writing
+      to a segment that exists beyond the end of a file, the file is
+      automatically extended. Using this feature, one can create a segment
+      (or set of segments) which is larger than the current size of the
+      dataset, which allows to dataset to be extended at a future time
+      (provided the data space also allows the extension).
+
+    <p>All referenced external data files must exist before performing raw
+      data I/O on the dataset. This is normally not a problem since those
+      files are being managed directly by the application, or indirectly
+      through some other library.
+
+
+    <h2>5. Datatype</h2>
+
+    <p>Raw data has a constant datatype which describes the datatype
+      of the raw data stored in the file, and a memory datatype that
+      describes the datatype stored in application memory.  Both data
+      types are manipulated with the <a
+      href="Datatypes.html"><code>H5T</code></a> API.
+
+    <p>The constant file datatype is associated with the dataset when
+      the dataset is created in a manner described below.  Once
+      assigned, the constant datatype can never be changed.
+
+    <p>The memory datatype is specified when data is transferred
+      to/from application memory.  In the name of data sharability,
+      the memory datatype must be specified, but can be the same
+      type identifier as the constant datatype.
+
+    <p>During dataset I/O operations, the library translates the raw
+      data from the constant datatype to the memory datatype or vice
+      versa.  Structured datatypes include member offsets to allow
+      reordering of struct members and/or selection of a subset of
+      members and array datatypes include index permutation
+      information to allow things like transpose operations (<b>the
+      prototype does not support array reordering</b>) Permutations
+      are relative to some extrinsic descritpion of the dataset.
+
+
+
+    <h2>6. Data Space</h2>
+
+    <p>The dataspace of a dataset defines the number of dimensions
+      and the size of each dimension and is manipulated with the
+      <code>H5S</code> API.  The <em>simple</em> dataspace consists of
+      maximum dimension sizes and actual dimension sizes, which are
+      usually the same.  However, maximum dimension sizes can be the
+      constant <code>H5D_UNLIMITED</code> in which case the actual
+      dimension size can be incremented with calls to
+      <code>H5Dextend()</code>. The maximium dimension sizes are
+      constant meta data while the actual dimension sizes are
+      persistent meta data.  Initial actual dimension sizes are
+      supplied at the same time as the maximum dimension sizes when
+      the dataset is created.
+
+    <p>The dataspace can also be used to define partial I/O
+      operations. Since I/O operations have two end-points, the raw
+      data transfer functions take two data space arguments: one which
+      describes the application memory data space or subset thereof
+      and another which describes the file data space or subset
+      thereof.
+
+
+    <h2>7. Setting Constant or Persistent Properties</h2>
+
+    <p>Each dataset has a set of constant and persistent properties
+      which describe the layout method, pre-compression
+      transformation, compression method, datatype, external storage,
+      and data space.  The constant properties are set as described
+      above in a dataset creation property list whose identifier is
+      passed to <code>H5Dcreate()</code>.
+
+    <dl>
+      <dt><code>hid_t H5Dcreate (hid_t <em>file_id</em>, const char
+	  *<em>name</em>, hid_t <em>type_id</em>, hid_t
+	  <em>space_id</em>, hid_t <em>create_plist_id</em>)</code>
+      <dd>A dataset is created by calling <code>H5Dcreate</code> with
+	a file identifier, a dataset name, a datatype, a dataspace,
+	and constant properties.  The datatype and dataspace are the
+	type and space of the dataset as it will exist in the file,
+	which may be different than in application memory.  
+        Dataset names within a group must be unique: 
+        <code>H5Dcreate</code> returns an error if a dataset with the
+        name specified in <code><em>name</em></code> already exists 
+        at the location specified in <code><em>file_id</em></code>.
+        The <em>create_plist_id</em> is a <code>H5P_DATASET_CREATE</code>
+	property list created with <code>H5Pcreate()</code> and
+	initialized with the various functions described above.
+	<code>H5Dcreate()</code> returns a dataset handle for success
+	or negative for failure. The handle should eventually be
+	closed by calling <code>H5Dclose()</code> to release resources
+	it uses.
+
+	<br><br>
+      <dt><code>hid_t H5Dopen (hid_t <em>file_id</em>, const char
+	  *<em>name</em>)</code>
+      <dd>An existing dataset can be opened for access by calling this
+	function.  A dataset handle is returned for success or a
+	negative value is returned for failure.  The handle should
+	eventually be closed by calling <code>H5Dclose()</code> to
+	release resources it uses.
+
+	<br><br>
+      <dt><code>herr_t H5Dclose (hid_t <em>dataset_id</em>)</code>
+      <dd>This function closes a dataset handle and releases all
+	resources it might have been using.  The handle should not be
+	used in subsequent calls to the library.
+
+	<br><br>
+      <dt><code>herr_t H5Dextend (hid_t <em>dataset_id</em>,
+	  hsize_t <em>dim</em>[])</code>
+      <dd>This function extends a dataset by increasing the size in
+	one or more dimensions.  Not all datasets can be extended.
+    </dl>
+
+
+
+    <h2>8. Querying Constant or Persistent Properties</h2>
+
+    <p>Constant or persistent properties can be queried with a set of
+      three functions.  Each function returns an identifier for a copy
+      of the requested properties.  The identifier can be passed to
+      various functions which modify the underlying object to derive a
+      new object; the original dataset is completely unchanged.  The
+      return values from these functions should be properly destroyed
+      when no longer needed.
+
+    <dl>
+      <dt><code>hid_t H5Dget_type (hid_t <em>dataset_id</em>)</code>
+      <dd>Returns an identifier for a copy of the dataset permanent
+	datatype or negative for failure.
+
+      <dt><code>hid_t H5Dget_space (hid_t <em>dataset_id</em>)</code>
+      <dd>Returns an identifier for a copy of the dataset permanent
+	data space, which also contains information about the current
+	size of the dataset if the data set is extendable with
+	<code>H5Dextend()</code>.
+
+      <dt><code>hid_t H5Dget_create_plist (hid_t
+	  <em>dataset_id</em>)</code>
+      <dd>Returns an identifier for a copy of the dataset creation
+	property list. The new property list is created by examining
+	various permanent properties of the dataset.  This is mostly a
+	catch-all for everything but type and space.
+    </dl>
+
+
+
+    <h2>9. Setting Memory and Transfer Properties</h2>
+
+    <p>A dataset also has memory properties which describe memory
+      within the application, and transfer properties that control
+      various aspects of the I/O operations.  The memory can have a
+      datatype different than the permanent file datatype (different
+      number types, different struct member offsets, different array
+      element orderings) and can also be a different size (memory is a
+      subset of the permanent dataset elements, or vice versa).  The
+      transfer properties might provide caching hints or collective
+      I/O information. Therefore, each I/O operation must specify
+      memory and transfer properties.
+
+    <p>The memory properties are specified with <em>type_id</em> and
+      <em>space_id</em> arguments while the transfer properties are
+      specified with the <em>transfer_id</em> property list for the
+      <code>H5Dread()</code> and <code>H5Dwrite()</code> functions
+      (these functions are described below).
+
+    <dl>
+      <dt><code>herr_t H5Pset_buffer (hid_t <em>xfer_plist</em>,
+	  hsize_t <em>max_buf_size</em>, void *<em>tconv_buf</em>, void
+	  *<em>bkg_buf</em>)</code>
+      <dt><code>hsize_t H5Pget_buffer (hid_t <em>xfer_plist</em>, void
+	  **<em>tconv_buf</em>, void **<em>bkg_buf</em>)</code>
+      <dd>Sets or retrieves the maximum size in bytes of the temporary
+	buffer used for datatype conversion in the I/O pipeline.  An
+	application-defined buffer can also be supplied as the
+	<em>tconv_buf</em> argument, otherwise a buffer will be
+	allocated and freed on demand by the library. A second
+	temporary buffer <em>bkg_buf</em> can also be supplied and
+	should be the same size as the <em>tconv_buf</em>.  The
+	default values are 1MB for the maximum buffer size, and null
+	pointers for each buffer indicating that they should be
+	allocated on demand and freed when no longer needed. The
+	<code>H5Pget_buffer()</code> function returns the maximum
+	buffer size or zero on error.
+    </dl>
+
+    <p>If the maximum size of the temporary I/O pipeline buffers is
+      too small to hold the entire I/O request, then the I/O request
+      will be fragmented and the transfer operation will be strip
+      mined.  However, certain restrictions apply to the strip
+      mining.  For instance, when performing I/O on a hyperslab of a
+      simple data space the strip mining is in terms of the slowest
+      varying dimension.  So if a 100x200x300 hyperslab is requested,
+      the temporary buffer must be large enough to hold a 1x200x300
+      sub-hyperslab.
+
+    <p>To prevent strip mining from happening, the application should
+      use <code>H5Pset_buffer()</code> to set the size of the
+      temporary buffer so it's large enough to hold the entire
+      request.
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example</h4></caption>
+	  <tr>
+	    <td>
+	      <p>This example shows how to define a function that sets
+		a dataset transfer property list so that strip mining
+		does not occur.  It takes an (optional) dataset transfer
+		property list, a dataset, a data space that describes
+		what data points are being transfered, and a datatype
+		for the data points in memory.  It returns a (new)
+		dataset transfer property list with the temporary
+		buffer size set to an appropriate value. The return
+		value should be passed as the fifth argument to
+		<code>H5Dread()</code> or <code>H5Dwrite()</code>.
+	      <p><code><pre>
+ 1 hid_t
+ 2 disable_strip_mining (hid_t xfer_plist, hid_t dataset,
+ 3                       hid_t space, hid_t mem_type)
+ 4 {
+ 5     hid_t file_type;          /* File datatype */
+ 6     size_t type_size;         /* Sizeof larger type */
+ 7     size_t size;              /* Temp buffer size */
+ 8     hid_t xfer_plist;         /* Return value */
+ 9 
+10     file_type = H5Dget_type (dataset);
+11     type_size = MAX(H5Tget_size(file_type), H5Tget_size(mem_type));
+12     H5Tclose (file_type);
+13     size = H5Sget_npoints(space) * type_size;
+14     if (xfer_plist&lt;0) xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+15     H5Pset_buffer(xfer_plist, size, NULL, NULL);
+16     return xfer_plist;
+17 }
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+      
+
+    <h2>10. Querying Memory or Transfer Properties</h2>
+
+    <p>Unlike constant and persistent properties, a dataset cannot be
+      queried for it's memory or transfer properties.  Memory
+      properties cannot be queried because the application already
+      stores those properties separate from the buffer that holds the
+      raw data, and the buffer may hold multiple segments from various
+      datasets and thus have more than one set of memory properties.
+      The transfer properties cannot be queried from the dataset
+      because they're associated with the transfer itself and not with
+      the dataset (but one can call
+      <code>H5Pget_<em>property</em>()</code> to query transfer
+      properties from a tempalate).
+
+
+    <h2>11. Raw Data I/O</h2>
+
+    <p>All raw data I/O is accomplished through these functions which
+      take a dataset handle, a memory datatype, a memory data space,
+      a file data space, transfer properties, and an application
+      memory buffer.  They translate data between the memory datatype
+      and space and the file datatype and space.  The data spaces can
+      be used to describe partial I/O operations.
+      
+    <dl>
+      <dt><code>herr_t H5Dread (hid_t <em>dataset_id</em>, hid_t
+	  <em>mem_type_id</em>, hid_t <em>mem_space_id</em>, hid_t
+	  <em>file_space_id</em>, hid_t <em>xfer_plist_id</em>,
+	  void *<em>buf</em>/*out*/)</code>
+      <dd>Reads raw data from the specified dataset into <em>buf</em>
+	converting from file datatype and space to memory datatype
+	and space.
+
+	<br><br>
+      <dt><code>herr_t H5Dwrite (hid_t <em>dataset_id</em>, hid_t
+	  <em>mem_type_id</em>, hid_t <em>mem_space_id</em>, hid_t
+	  <em>file_space_id</em>, hid_t <em>xfer_plist_id</em>,
+	  const void *<em>buf</em>)</code>
+      <dd>Writes raw data from an application buffer <em>buf</em> to
+	the specified dataset converting from memory datatype and
+	space to file datatype and space.
+    </dl>
+
+
+    <p>In the name of sharability, the memory datatype must be
+      supplied.  However, it can be the same identifier as was used to
+      create the dataset or as was returned by
+      <code>H5Dget_type()</code>; the library will not implicitly
+      derive memory datatypes from constant datatypes.
+
+    <p>For complete reads of the dataset one may supply
+      <code>H5S_ALL</code> as the argument for the file data space.
+      If <code>H5S_ALL</code> is also supplied as the memory data
+      space then no data space conversion is performed.  This is a
+      somewhat dangerous situation since the file data space might be
+      different than what the application expects.
+
+
+
+    <h2>12. Examples</h2>
+
+    <p>The examples in this section illustrate some common dataset
+      practices.
+
+
+    <p>This example shows how to create a dataset which is stored in
+      memory as a two-dimensional array of native <code>double</code>
+      values but is stored in the file in Cray <code>float</code>
+      format using LZ77 compression.  The dataset is written to the
+      HDF5 file and then read back as a two-dimensional array of
+      <code>float</code> values.
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example 1</h4></caption>
+	  <tr>
+	    <td>
+	      <p><code><pre>
+ 1 hid_t file, data_space, dataset, properties;
+ 2 double dd[500][600];
+ 3 float ff[500][600];
+ 4 hsize_t dims[2], chunk_size[2];
+ 5 
+ 6 /* Describe the size of the array */
+ 7 dims[0] = 500;
+ 8 dims[1] = 600;
+ 9 data_space = H5Screate_simple (2, dims);
+10 
+11 
+12 /*
+13  * Create a new file using with read/write access,
+14  * default file creation properties, and default file
+15  * access properties.
+16  */
+17 file = H5Fcreate ("test.h5", H5F_ACC_RDWR, H5P_DEFAULT,
+18                   H5P_DEFAULT);
+19 
+20 /* 
+21  * Set the dataset creation plist to specify that
+22  * the raw data is to be partitioned into 100x100 element
+23  * chunks and that each chunk is to be compressed with
+24  * LZ77.
+25  */
+26 chunk_size[0] = chunk_size[1] = 100;
+27 properties = H5Pcreate (H5P_DATASET_CREATE);
+28 H5Pset_chunk (properties, 2, chunk_size);
+29 H5Pset_deflate (properties, 9);
+30 
+31 /*
+32  * Create a new dataset within the file.  The datatype
+33  * and data space describe the data on disk, which may
+34  * be different than the format used in the application's
+35  * memory.
+36  */
+37 dataset = H5Dcreate (file, "dataset", H5T_CRAY_FLOAT,
+38                      data_space, properties);
+39 
+40 /*
+41  * Write the array to the file.  The datatype and data
+42  * space describe the format of the data in the `dd'
+43  * buffer.  The raw data is translated to the format
+44  * required on disk defined above.  We use default raw
+45  * data transfer properties.
+46  */
+47 H5Dwrite (dataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL,
+48           H5P_DEFAULT, dd);
+49 
+50 /*
+51  * Read the array as floats.  This is similar to writing
+52  * data except the data flows in the opposite direction.
+53  */
+54 H5Dread (dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL,
+55          H5P_DEFAULT, ff);
+56 
+64 H5Dclose (dataset);
+65 H5Sclose (data_space);
+66 H5Pclose (properties);
+67 H5Fclose (file);
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>This example uses the file created in Example 1 and reads a
+      hyperslab of the 500x600 file dataset.  The hyperslab size is
+      100x200 and it is located beginning at element
+      &lt;200,200&gt;. We read the hyperslab into an 200x400 array in
+      memory beginning at element &lt;0,0&gt; in memory.  Visually,
+      the transfer looks something like this: 
+
+      <center>
+	<img alt="Raw Data Transfer" src="dataset_p1.gif">
+      </center>
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example 2</h4></caption>
+	  <tr>
+	    <td>
+	      <p><code><pre>
+ 1 hid_t file, mem_space, file_space, dataset;
+ 2 double dd[200][400];
+ 3 hsize_t offset[2];
+ 4 hsize size[2];
+ 5 
+ 6 /*
+ 7  * Open an existing file and its dataset.
+ 8  */
+ 9 file = H5Fopen ("test.h5", H5F_ACC_RDONLY, H5P_DEFAULT);
+10 dataset = H5Dopen (file, "dataset");
+11 
+12 /*
+13  * Describe the file data space.
+14  */
+15 offset[0] = 200; /*offset of hyperslab in file*/
+16 offset[1] = 200;
+17 size[0] = 100;   /*size of hyperslab*/
+18 size[1] = 200;
+19 file_space = H5Dget_space (dataset);
+20 H5Sselect_hyperslab (file_space, H5S_SELECT_SET, offset, NULL, size, NULL);
+21 
+22 /*
+23  * Describe the memory data space.
+24  */
+25 size[0] = 200;  /*size of memory array*/
+26 size[1] = 400;
+27 mem_space = H5Screate_simple (2, size);
+28 
+29 offset[0] = 0;  /*offset of hyperslab in memory*/
+30 offset[1] = 0;
+31 size[0] = 100;  /*size of hyperslab*/
+32 size[1] = 200;
+33 H5Sselect_hyperslab (mem_space, H5S_SELECT_SET, offset, NULL, size, NULL);
+34 
+35 /*
+36  * Read the dataset.
+37  */
+38 H5Dread (dataset, H5T_NATIVE_DOUBLE, mem_space,
+39          file_space, H5P_DEFAULT, dd);
+40 
+41 /*
+42  * Close/release resources.
+43  */
+44 H5Dclose (dataset);
+45 H5Sclose (mem_space);
+46 H5Sclose (file_space);
+47 H5Fclose (file);
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>If the file contains a compound data structure one of whose
+      members is a floating point value (call it "delta") but the
+      application is interested in reading an array of floating point
+      values which are just the "delta" values, then the application
+      should cast the floating point array as a struct with a single
+      "delta" member.
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example 3</h4></caption>
+	  <tr>
+	    <td>
+	      <p><code><pre>
+ 1 hid_t file, dataset, type;
+ 2 double delta[200];
+ 3 
+ 4 /*
+ 5  * Open an existing file and its dataset.
+ 6  */
+ 7 file = H5Fopen ("test.h5", H5F_ACC_RDONLY, H5P_DEFAULT);
+ 8 dataset = H5Dopen (file, "dataset");
+ 9 
+10 /*
+11  * Describe the memory datatype, a struct with a single
+12  * "delta" member.
+13  */
+14 type = H5Tcreate (H5T_COMPOUND, sizeof(double));
+15 H5Tinsert (type, "delta", 0, H5T_NATIVE_DOUBLE);
+16 
+17 /*
+18  * Read the dataset.
+19  */
+20 H5Dread (dataset, type, H5S_ALL, H5S_ALL,
+21          H5P_DEFAULT, dd);
+22 
+23 /*
+24  * Close/release resources.
+25  */
+26 H5Dclose (dataset);
+27 H5Tclose (type);
+28 H5Fclose (file);
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+
+  <!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+<!-- Created: Tue Dec  2 09:17:09 EST 1997 -->
+  <!-- hhmts start -->
+  Last modified: 2 March 2001 
+  <!-- hhmts end -->
+  
+  
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Dataspaces.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Dataspaces.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Dataspaces.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,746 @@
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <TITLE>Dataspace Interface (H5S)</TITLE>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</HEAD>
+
+<body bgcolor="#FFFFFF">
+<!--   Note to Developers:                                            -->
+<!--   The following H5S functions were originally documented in this -->
+<!--   file and are in the HDF5 design.  However, they have not been  -->
+<!--   implemented and are not on the current development schedule.   -->
+<!--   So as to cease confusing the user, the relevant sections have  -->
+<!--   been commented out of this file.                               -->
+<!--     H5Sopen            H5Sselect_op       H5Ssubspace            -->
+<!--     H5Scommit          H5Sselect_order    H5Ssubspace_name       -->
+<!--     H5Sis_subspace                        H5Ssubspace_location   -->
+<!--     H5Slock                                                      -->
+<!--   The corresponding list of these same functions in the          -->
+<!--   Ref Manual, pointing to this document for a description, has   -->
+<!--   similarly been commented out.                                  -->
+<!--                                    - - -  F Baker, 7 May 2002    -->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><H1>
+The Dataspace Interface (H5S)</H1>
+
+<H2>
+1. Introduction</H2>
+The dataspace interface (H5S) provides a mechanism to describe the positions
+of the elements of a dataset and is designed in such a way as to allow
+new features to be easily added without disrupting applications that use
+the dataspace interface. A dataset (defined with the dataset interface) is
+composed of a collection of raw data points of homogeneous type, defined in the
+datatype (H5T) interface, organized according to the dataspace with this
+interface.
+
+<P>A dataspace describes the locations that dataset elements are located at.
+A dataspace is either a regular N-dimensional array of data points,
+called a <I>simple</I> dataspace, or a more general collection of data
+points organized in another manner, called a <I>complex</I> dataspace.
+A <I>scalar</I> dataspace is a special case of the <I>simple</I> data
+space and is defined to be a 0-dimensional single data point in size. Currently
+only <I>scalar</I> and <I>simple</I> dataspaces are supported with this version
+of the H5S interface.
+<I>Complex</I> dataspaces will be defined and implemented in a future
+version.  <I>Complex</I> dataspaces are intended to be used for such structures
+which are awkward to express in <I>simple</I> dataspaces, such as irregularly
+gridded data or adaptive mesh refinement data. This interface provides
+functions to set and query properties of a dataspace.
+
+<P>Operations on a dataspace include defining or extending the extent of
+the dataspace, selecting portions of the dataspace for I/O and storing the
+dataspaces in the file.  The extent of a dataspace is the range of coordinates
+over which dataset elements are defined and stored.  Dataspace selections are 
+subsets of the extent (up to the entire extent) which are selected for some
+operation.
+
+<P>For example, a 2-dimensional dataspace with an extent of 10 by 10 may have
+the following very simple selection:
+    <br><br><center>
+      <table border cellpadding=4>
+	<tr align=center>
+	  <th > </th> <th >0</th> <th >1</th> <th >2</th> <th >3</th> <th >4</th> <th >5</th> <th >6</th> <th >7</th> <th >8</th> <th >9</th>
+	<tr align=center>
+	  <th>0</th>
+          <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>1</th>
+          <td>-</td><td>X</td><td>X</td><td>X</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>2</th>
+          <td>-</td><td>X</td><td>X</td><td>X</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>3</th>
+          <td>-</td><td>X</td><td>X</td><td>X</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>4</th>
+          <td>-</td><td>X</td><td>X</td><td>X</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>5</th>
+          <td>-</td><td>X</td><td>X</td><td>X</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>6</th>
+          <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>7</th>
+          <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>8</th>
+          <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>9</th>
+          <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+      </table>
+      <br><strong>Example 1: Contiguous rectangular selection</strong>
+    </center>
+
+
+<br>Or, a more complex selection may be defined:
+    <br><br><center>
+      <table border cellpadding=4>
+	<tr align=center>
+	  <th > </th> <th >0</th> <th >1</th> <th >2</th> <th >3</th> <th >4</th> <th >5</th> <th >6</th> <th >7</th> <th >8</th> <th >9</th>
+	<tr align=center>
+	  <th>0</th>
+          <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>1</th>
+          <td>-</td><td>X</td><td>X</td><td>X</td><td>-</td><td>-</td><td>X</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>2</th>
+          <td>-</td><td>X</td><td>-</td><td>X</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>3</th>
+          <td>-</td><td>X</td><td>-</td><td>X</td><td>-</td><td>-</td><td>X</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>4</th>
+          <td>-</td><td>X</td><td>-</td><td>X</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>5</th>
+          <td>-</td><td>X</td><td>X</td><td>X</td><td>-</td><td>-</td><td>X</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>6</th>
+          <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>7</th>
+          <td>-</td><td>-</td><td>X</td><td>X</td><td>X</td><td>X</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>8</th>
+          <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>9</th>
+          <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+      </table>
+      <br><strong>Example 2: Non-contiguous selection</strong>
+    </center>
+
+<P>Selections within dataspaces have an offset within the extent which is used
+to locate the selection within the extent of the dataspace.  Selection offsets
+default to 0 in each dimension, but may be changed to move the selection within
+a dataspace.  In example 2 above, if the offset was changed to 1,1, the selection
+would look like this:
+    <br><br><center>
+      <table border cellpadding=4>
+	<tr align=center>
+	  <th > </th> <th >0</th> <th >1</th> <th >2</th> <th >3</th> <th >4</th> <th >5</th> <th >6</th> <th >7</th> <th >8</th> <th >9</th>
+	<tr align=center>
+	  <th>0</th>
+          <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>1</th>
+          <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>2</th>
+          <td>-</td><td>-</td><td>X</td><td>X</td><td>X</td><td>-</td><td>-</td><td>X</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>3</th>
+          <td>-</td><td>-</td><td>X</td><td>-</td><td>X</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>4</th>
+          <td>-</td><td>-</td><td>X</td><td>-</td><td>X</td><td>-</td><td>-</td><td>X</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>5</th>
+          <td>-</td><td>-</td><td>X</td><td>-</td><td>X</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>6</th>
+          <td>-</td><td>-</td><td>X</td><td>X</td><td>X</td><td>-</td><td>-</td><td>X</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>7</th>
+          <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>8</th>
+          <td>-</td><td>-</td><td>-</td><td>X</td><td>X</td><td>X</td><td>X</td><td>-</td><td>-</td><td>-</td>
+	<tr align=center>
+	  <th>9</th>
+          <td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td><td>-</td>
+      </table>
+      <br><strong>Example 3: Non-contiguous selection with 1,1 offset</strong>
+    </center>
+
+<P>Selections also have a linearization ordering of the points selected
+(defaulting to "C" order, ie. last dimension changing fastest).  The
+linearization order may be specified for each point or it may be chosen by
+the axis of the dataspace.  For example, with the default "C" ordering,
+example 1's selected points are iterated through in this order: (1,1), (1,2),
+(1,3), (2,1), (2,2), etc.  With "FORTRAN" ordering, example 1's selected points 
+would be iterated through in this order: (1,1), (2,1), (3,1), (4,1), (5,1),
+(1,2), (2,2), etc.
+
+<P>A dataspace may be stored in the file as a permanent object, to allow many
+datasets to use a commonly defined dataspace.  Dataspaces with extendable
+extents (ie. unlimited dimensions) are not able to be stored as permanent
+dataspaces.
+
+<P>Dataspaces may be created using an existing permanent dataspace as a
+container to locate the new dataspace within.  These dataspaces are complete
+dataspaces and may be used to define datasets.  A dataspaces with a "parent"
+can be queried to determine the parent dataspace and the location within the
+parent.  These dataspaces must currently be the same number of dimensions as
+the parent dataspace.
+
+<H2> 2. General Dataspace Operations</H2>
+The functions defined in this section operate on dataspaces as a whole.
+New dataspaces can be created from scratch or copied from existing data
+spaces. When a dataspace is no longer needed its resources should be released
+by calling <TT>H5Sclose()</TT>.
+<DL>
+
+<DT>
+<TT>hid_t H5Screate(H5S_class_t <I>type</I>)</TT></DT>
+
+<DD>
+    This function creates a new dataspace of a particular <I>type</I>.  The
+types currently supported are H5S_SCALAR and H5S_SIMPLE; 
+others are planned to be added later.  
+</DD>
+
+<!-- Unimplemented function
+<DT>
+<TT>hid_t H5Sopen(hid_t <I>location</I>, const char *<I>name</I>)</TT></DT>
+
+<DD>
+    This function opens a permanent dataspace for use in an application.
+The <I>location</I> argument is a file or group ID and <I>name</I> is
+an absolute or relative path to the permanent dataspace.  The dataspace ID which
+is returned is a handle to a permanent dataspace which can't be modified.
+</DD>
+-->
+
+<DT>
+<TT>hid_t H5Scopy (hid_t <I>space</I>)</TT></DT>
+
+<DD>
+    This function creates a new dataspace which is an exact copy of the
+dataspace <I>space</I>.
+</DD>
+
+<!-- Unimplemented function
+<DT>
+<TT>hid_t H5Ssubspace (hid_t <I>space</I>)</TT></DT>
+
+<DD>
+    This function uses the currently defined selection and offset in <I>space</I>
+to create a dataspace which is located within <I>space</I>.  The <I>space</I>
+dataspace must be a sharable dataspace located in the file, not a dataspace for
+a dataset.  The relationship of the new dataspace within the existing dataspace
+is preserved when the new dataspace is used to create datasets.  Currently,
+only subspaces which are equivalent to simple dataspaces (ie. rectangular
+contiguous areas) are allowed.  A subspace is not "simplified" or reduced in
+the number of dimensions used if the selection is "flat" in one dimension, they
+always have the same number of dimensions as their parent dataspace.
+</DD>
+-->
+
+<!-- Unimplemented function
+<DT>
+<TT>herr_t H5Scommit (hid_t <I>location</I>, const char *<I>name</I>, hid_t <I>space</I>)</TT></DT>
+
+<DD>
+    The dataspaces specified with <I>space</I> is stored in the file specified
+by <I>location</I>.  <I>Location</I> may be either a file or group handle
+and <I>name</I> is an absolute or relative path to the location to store the
+dataspace.  After this call, the dataspace is permanent and can't be modified.
+</DD>
+-->
+
+<DT>
+<TT>herr_t H5Sclose (hid_t <I>space</I>)</TT></DT>
+
+<DD>
+Releases resources associated with a dataspace. Subsequent use of the
+dataspace identifier after this call is undefined.
+</DD>
+
+<!--		NOT YET IMPLEMENTED (R1.2 -- 9908)
+
+<DT>
+<TT>H5S_class_t H5Sextent_class (hid_t <I>space</I>)</TT></DT>
+
+<DD>
+Query a dataspace to determine the current class of a dataspace.  The value
+which is returned is one of: H5S_SCALAR, H5S_SIMPLE on success or
+H5S_NO_CLASS on failure.
+</DD>
+
+-->
+
+</DL>
+
+
+<H2> 3. Dataspace Extent Operations</H2>
+These functions operate on the extent portion of a dataspace.
+
+<DL>
+<DT>
+<TT>herr_t H5Sset_extent_simple (hid_t <I>space</I>, int <I>rank</I>, const hsize_t
+*<I>current_size</I>, const hsize_t *<I>maximum_size</I>)</TT></DT>
+
+<DD>
+Sets or resets the size of an existing dataspace, where <I>rank</I> is
+the dimensionality, or number of dimensions, of the dataspace.
+<I>current_size</I> is an array of size <I>rank</I> which contains the new size
+of each dimension in the dataspace.  <I>maximum_size</I> is an array of size
+<I>rank</I> which contains the maximum size of each dimension in the dataspace. 
+Any previous extent is removed from the dataspace, the dataspace type is set to
+H5S_SIMPLE and the extent is set as specified.
+</DD>
+
+<DT>
+<TT>herr_t H5Sset_extent_none (hid_t <I>space</I>)</TT></DT>
+
+<DD>
+Removes the extent from a dataspace and sets the type to H5S_NO_CLASS.
+</DD>
+
+<DT>
+<TT>herr_t H5Sextent_copy (hid_t <I>dest_space</I>,
+    hid_t <I>source_space</I>)</TT></DT>
+
+<DD>
+Copies the extent from <I>source_space</I> to <I>dest_space</I>, which may
+change the type of the dataspace.  Returns non-negative on success, negative on
+failure.
+</DD>
+
+<DT>
+<TT>hsize_t H5Sget_simple_extent_npoints (hid_t <I>space</I>)</TT></DT>
+
+<DD>
+This function determines the number of elements in a dataspace. For example, a
+simple 3-dimensional dataspace with dimensions 2, 3 and 4 would have 24
+elements.
+Returns the number of elements in the dataspace, negative on failure.
+</DD>
+
+<DT>
+<TT>int H5Sget_simple_extent_ndims (hid_t <I>space</I>)</TT></DT>
+
+<DD>
+This function determines the dimensionality (or rank) of a dataspace. 
+Returns the number of dimensions in the dataspace, negative on failure.
+</DD>
+
+<DT>
+<TT>herr_t H5Sget_simple_extent_dims (hid_t <I>space</I>, hsize_t *<I>dims</I>,
+    hsize_t *<I>max</I>)</TT></DT>
+
+<DD>
+The function retrieves the size of the extent of the dataspace <I>space</I> by
+placing the size of each dimension in the array <I>dims</I>.  Also retrieves
+the size of the maximum extent of the dataspace, placing the results in
+<I>max</I>.
+Returns non-negative on success, negative on failure.
+</DD>
+
+</DL>
+
+<H2> 4. Dataspace Selection Operations</H2>
+Selections are maintained separately from extents in dataspaces and operations
+on the selection of a dataspace do not affect the extent of the dataspace.
+Selections are independent of extent type and the boundaries of selections are
+reconciled with the extent at the time of the data transfer.  Selection offsets
+apply a selection to a location within an extent, allowing the same selection
+to be moved within the extent without requiring a new selection to be specified.
+Offsets default to 0 when the dataspace is created.  Offsets are applied when
+an I/O transfer is performed (and checked during calls to H5Sselect_valid).
+Selections have an iteration order for the points selected, which can be any
+permutation of the dimensions involved (defaulting to 'C' array order) or a
+specific order for the selected points, for selections composed of single array
+elements with H5Sselect_elements.  
+
+<!-- Unimplemented function
+Selections can also be copied or combined
+together in various ways with H5Sselect_op.  
+-->
+
+Further methods of selecting
+portions of a dataspace may be added in the future.
+
+<DL>
+<DT>
+<TT>herr_t H5Sselect_hyperslab (hid_t <I>space</I>, h5s_seloper_t <I>op</I>,
+    const hsize_t * <I>start</I>, const hsize_t * <I>stride</I>,
+    const hsize_t * <I>count</I>, const hsize_t * <I>block</I>)</TT></DT>
+
+<DD>
+This function selects a hyperslab region to add to the current selected region
+for the <I>space</I> dataspace.  The <I>start</I>, <I>stride</I>, <I>count</I>
+and <I>block</I> arrays must be the same size as the rank of the dataspace.  
+The selection operator <I>op</I> determines how the new selection is to be
+combined with the already existing selection for the dataspace.  
+Currently, The following operators are supported:
+  <dir>
+  <table width=80% border=0>
+    <tr><td valign=top>
+      <code>H5S_SELECT_SET</code>
+      </td><td valign=top>
+      Replaces the existing selection with the parameters from this call.  
+      Overlapping blocks are not supported with this operator.
+    </td></tr><tr><td valign=top>
+      <code>H5S_SELECT_OR</code>
+      </td><td valign=top>
+      Adds the new selection to the existing selection.
+    </td></tr>
+  </table>
+  </dir>
+<P>
+The <I>start</I> array determines the starting coordinates of the hyperslab
+to select.  The <I>stride</I> array chooses array locations from the dataspace
+with each value in the <I>stride</I> array determining how many elements to move
+in each dimension.  Setting a value in the <I>stride</I> array to 1 moves to
+each element in that dimension of the dataspace, setting a value of 2 in a
+location in the <I>stride</I> array moves to every other element in that
+dimension of the dataspace.  In other words, the <I>stride</I> determines the
+number of elements to move from the <I>start</I> location in each dimension.
+Stride values of 0 are not allowed.  If the <I>stride</I> parameter is <TT>NULL</TT>,
+a contiguous hyperslab is selected (as if each value in the <I>stride</I> array
+was set to all 1's).  The <I>count</I> array determines how many blocks to
+select from the dataspace, in each dimension.  The <I>block</I> array determines
+the size of the element block selected from the dataspace.  If the <I>block</I>
+parameter is set to <TT>NULL</TT>, the block size defaults to a single element
+in each dimension (as if the <I>block</I> array was set to all 1's).
+<P>For example, in a 2-dimensional dataspace, setting <I>start</I> to [1,1],
+<I>stride</I> to [4,4], <I>count</I> to [3,7] and <I>block</I> to [2,2] selects
+21 2x2 blocks of array elements starting with location (1,1) and selecting
+blocks at locations (1,1), (5,1), (9,1), (1,5), (5,5), etc.
+<P>Regions selected with this function call default to 'C' order iteration when
+I/O is performed.
+</DD>
+
+<DT>
+<TT>herr_t H5Sselect_elements (hid_t <I>space</I>, h5s_seloper_t <I>op</I>,
+    const size_t <I>num_elements</I>, const hsize_t *<I>coord</I>[])</TT></DT>
+
+<DD>
+This function selects array elements to be included in the selection for the
+<I>space</I> dataspace.  The number of elements selected must be set with the
+<I>num_elements</I>.  The <I>coord</I> array is a two-dimensional array of size
+&lt;dataspace rank&gt; by &lt;<I>num_elements</I>&gt; in size (ie. a list of
+coordinates in the array).  The order of the element coordinates in the
+<I>coord</I> array also specifies the order that the array elements are
+iterated through when I/O is performed.  Duplicate coordinate locations are not
+checked for.
+
+<P>The selection operator <I>op</I> determines how the new selection is to be
+combined with the already existing selection for the dataspace.  
+The following operators are supported:
+  <dir>
+  <table width=80% border=0>
+    <tr><td valign=top>
+      <code>H5S_SELECT_SET</code>
+      </td><td valign=top>
+      Replaces the existing selection with the parameters from this call.  
+      Overlapping blocks are not supported with this operator.
+    </td></tr><tr><td valign=top>
+      <code>H5S_SELECT_OR</code>
+      </td><td valign=top>
+      Adds the new selection to the existing selection.
+    </td></tr>
+  </table>
+  </dir>
+When operators other than
+H5S_SELECT_SET are used to combine a new selection with an existing selection,
+the selection ordering is reset to 'C' array ordering.
+</DD>
+
+<DT>
+<TT>herr_t H5Sselect_all (hid_t <I>space</I>)</TT></DT>
+
+<DD>
+This function selects the special H5S_SELECT_ALL region for the <I>space</I>
+dataspace.  H5S_SELECT_ALL selects the entire dataspace for any dataspace is is
+applied to.
+</DD>
+
+<DT>
+<TT>herr_t H5Sselect_none (hid_t <I>space</I>)</TT></DT>
+
+<DD>
+This function resets the selection region for the <I>space</I>
+dataspace not to include any elements.
+</DD>
+
+<DT>
+<!-- Unimplemented function
+<TT>herr_t H5Sselect_op (hid_t <I>space1</I>, h5s_seloper_t <I>op</I>,
+    hid_t <I>space2</I>)</TT></DT>
+
+<DD>
+Uses <I>space2</I> to perform an operation on <I>space1</I>.  The valid
+operations for <I>op</I> are:
+<DL>
+    <DT>H5S_SELECT_COPY
+    <DD>Copies the selection from <I>space2</I> into <I>space1</I>, removing any
+        previously defined selection for <I>space1</I>.  The selection order
+        and offset are also copied to <I>space1</I>
+    <DT>H5S_SELECT_UNION
+    <DD>Performs a set union of the selection of the dataspace <I>space2</I>
+        with the selection from the dataspace <I>space1</I>, with the result
+        being stored in <I>space1</I>.  The selection order for <I>space1</I> is
+        reset to 'C' order.
+    <DT>H5S_SELECT_INTERSECT
+    <DD>Performs an set intersection of the selection from <I>space2</I> with
+        <I>space1</I>, with the result being stored in <I>space1</I>.  The
+        selection order for <I>space1</I> is reset to 'C' order.
+    <DT>H5S_SELECT_DIFFERENCE
+    <DD>Performs a set difference of the selection from <I>space2</I> with
+        <I>space1</I>, with the result being stored in <I>space1</I>.  The
+        selection order for <I>space1</I> is reset to 'C' order.
+</DL>
+
+</DD>
+-->
+
+<!-- Unimplemented function
+<DT>
+<TT>herr_t H5Sselect_order (hid_t <I>space</I>,
+        hsize_t <I>perm_vector</I>[])</TT></DT>
+
+<DD>
+This function selects the order to iterate through the dimensions of a dataspace
+when performing I/O on a selection.  If a specific order has already been
+selected for the selection with H5Sselect_elements, this function will remove
+it and use a dimension oriented ordering on the selected elements.  The elements
+of the <I>perm_vector</I> array must be unique and between 0 and the rank of the
+dataspace, minus 1.  The order of the elements in <I>perm_vector</I> specify
+the order to iterate through the selection for each dimension of the dataspace.
+To iterate through a 3-dimensional dataspace selection in 'C' order, specify
+the elements of the <I>perm_vector</I> as [0, 1, 2], for FORTRAN order they
+would be [2, 1, 0].  Other orderings, such as [1, 2, 0] are also possible, but
+may execute slower.
+</DD>
+-->
+
+<DT>
+<TT>htri_t H5Sselect_valid (hid_t <I>space</I>)</TT></DT>
+
+<DD>
+This function verifies that the selection for a dataspace is within the extent
+of the dataspace, if the currently set offset for the dataspace is used.
+Returns TRUE if the selection is contained within the extent, FALSE if it
+is not contained within the extent and FAIL on error conditions (such as if
+the selection or extent is not defined).
+</DD>
+
+<DT>
+<TT>hsize_t H5Sget_select_npoints (hid_t <I>space</I>)</TT></DT>
+
+<DD>
+This function determines the number of elements in the current selection
+of a dataspace.
+</DD>
+
+<DT>
+<TT>herr_t H5Soffset_simple (hid_t <I>space</I>, const hssize_t *
+    <I>offset</I>)</TT></DT>
+
+<DD>
+Sets the offset of a simple dataspace <I>space</I>.  The <I>offset</I> array
+must be the same number of elements as the number of dimensions for the
+dataspace.  If the <I>offset</I> array is set to <TT>NULL</TT>, the offset
+for the dataspace is reset to 0.
+</DD>
+
+</DL>
+
+<!-- Inappropriate header until "Unimplemented functions" reinstated.
+<H2> 5. Misc. Dataspace Operations</H2>
+-->
+<H2> 5. Convenience Dataspace Operation</H2>
+
+<DL>
+
+<!-- Unimplemented function
+<DT>
+<TT>herr_t H5Slock (hid_t <I>space</I>)</TT></DT>
+
+<DD>
+Locks the dataspace so that it cannot be modified or closed.  When the library
+exits, the dataspace will be unlocked and closed.
+</DD>
+-->
+
+<DT>
+<TT>hid_t H5Screate_simple(int <I>rank</I>, const hsize_t *<I>current_size</I>,
+    const hsize_t *<I>maximum_size</I>)</TT></DT>
+
+<DD>
+    This function is a "convenience" wrapper to create a simple dataspace
+and set it's extent in one call.  It is equivalent to calling H5Screate
+and H5Sset_extent_simple() in two steps.
+</DD>
+
+<!-- Unimplemented function
+<DT>
+<TT>int H5Sis_subspace(hid_t <I>space</I>)</TT></DT>
+
+<DD>
+    This function returns positive if <I>space</I> is located within another
+dataspace, zero if it is not, and negative on a failure.
+</DD>
+-->
+
+<!-- Unimplemented function
+<DT>
+<TT>char *H5Ssubspace_name(hid_t <I>space</I>)</TT></DT>
+
+<DD>
+    This function returns the name of the named dataspace that <I>space</I>
+is located within.  If <I>space</I> is not located within another dataspace,
+or an error occurs, NULL is returned.  The application is responsible for
+freeing the string returned.
+</DD>
+-->
+
+<!-- Unimplemented function
+<DT>
+<TT>herr_t H5Ssubspace_location(hid_t <I>space</I>, hsize_t *<I>loc</I>)</TT></DT>
+
+<DD>
+    If <I>space</I> is located within another dataspace, this function puts
+the location of the origin of <I>space</I> in the <I>loc</I> array.  The <I>loc</I>
+array must be at least as large as the number of dimensions of <I>space</I>.
+If <I>space</I> is not located within another dataspace
+or an error occurs, a negative value is returned, otherwise a non-negative value
+is returned.
+</DD>
+-->
+
+</DL>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+<!-- Created: Thu Dec  4 14:57:32 EST 1997 -->
+<!-- hhmts start -->
+Last modified: 7 May 2002 
+<!-- hhmts end -->
+
+
+</BODY>
+</HTML>

Added: packages/hdf5/branches/upstream/current/doc/html/Datatypes.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Datatypes.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Datatypes.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3117 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Datatype Interface (H5T)</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>The Datatype Interface (H5T)</h1>
+
+    <h2>1. Introduction</h2>
+    
+    <p>The datatype interface provides a mechanism to describe the
+      storage format of individual data points of a data set and is
+      hopefully designed in such a way as to allow new features to be
+      easily added without disrupting applications that use the 
+      datatype interface.  A dataset (the H5D interface) is composed of a
+      collection or raw data points of homogeneous type organized
+      according to the data space (the H5S interface).
+
+    <p>A datatype is a collection of datatype properties, all of
+      which can be stored on disk, and which when taken as a whole,
+      provide complete information for data conversion to or from that
+      datatype.  The interface provides functions to set and query
+      properties of a datatype.
+      
+    <p>A <em>data point</em> is an instance of a <em>datatype</em>,
+      which is an instance of a <em>type class</em>.  We have defined
+      a set of type classes and properties which can be extended at a
+      later time.  The atomic type classes are those which describe
+      types which cannot be decomposed at the datatype interface
+      level; all other classes are compound.
+
+    <h2>2. General Datatype Operations</h2>
+
+    <p>The functions defined in this section operate on datatypes as
+      a whole. New datatypes can be created from scratch or copied
+      from existing datatypes.  When a datatype is no longer needed
+      its resources should be released by calling <code>H5Tclose()</code>.
+
+    <p> Datatypes come in two flavors: named datatypes and transient
+      datatypes. A named datatype is stored in a file while the
+      transient flavor is independent of any file. Named datatypes
+      are always read-only, but transient types come in three
+      varieties: modifiable, read-only, and immutable.  The difference 
+      between read-only and immutable types is that immutable types
+      cannot be closed except when the entire library is closed (the
+      predefined types like <code>H5T_NATIVE_INT</code> are immutable
+      transient types).
+
+    <dl>
+      <dt><code>hid_t H5Tcreate (H5T_class_t <em>class</em>, size_t
+	  <em>size</em>)</code>
+      <dd> Datatypes can be created by calling this
+	function, where <em>class</em> is a datatype class
+	identifier.  However, the only class currently allowed is
+	<code>H5T_COMPOUND</code> to create a new empty compound 
+	datatype where <em>size</em> is the total size in bytes of an
+	instance of this datatype.  Other datatypes are created with
+	<code>H5Tcopy()</code>. All functions that return datatype
+	identifiers return a negative value for failure.
+
+	<br><br>
+      <dt><code>hid_t H5Topen (hid_t <em>location</em>, const char
+	  *<em>name</em>)</code>
+      <dd>A named datatype can be opened by calling this function,
+	which returns a datatype identifier.  The identifier should
+	eventually be released by calling <code>H5Tclose()</code> to
+	release resources. The named datatype returned by this
+	function is read-only or a negative value is returned for
+	failure.  The <em>location</em> is either a file or group
+	identifier.
+
+	<br><br>
+      <dt><code>herr_t H5Tcommit (hid_t <em>location</em>, const char
+	  *<em>name</em>, hid_t <em>type</em>)</code>
+      <dd>A transient datatype (not immutable) can be committed to a
+	file and turned into a named datatype by calling this
+	function.  The <em>location</em> is either a file or group
+	identifier and when combined with <em>name</em> refers to a new
+	named datatype.
+
+	<br><br>
+      <dt><code>htri_t H5Tcommitted (hid_t <em>type</em>)</code>
+      <dd>A type can be queried to determine if it is a named type or
+	a transient type.  If this function returns a positive value
+	then the type is named (that is, it has been committed perhaps 
+	by some other application).  Datasets which return committed
+	datatypes with <code>H5Dget_type()</code> are able to share
+	the datatype with other datasets in the same file.
+
+	<br><br>
+      <dt><code>hid_t H5Tcopy (hid_t <em>type</em>)</code>
+      <dd>This function returns a modifiable transient datatype
+	which is a copy of <em>type</em> or a negative value for
+	failure.  If <em>type</em> is a dataset identifier then the type
+	returned is a modifiable transient copy of the datatype of
+	the specified dataset.
+
+	<br><br>
+      <dt><code>herr_t H5Tclose (hid_t <em>type</em>)</code>
+      <dd>Releases resources associated with a datatype.  The 
+	datatype identifier should not be subsequently used since the
+	results would be unpredictable.  It is illegal to close an
+	immutable transient datatype.
+
+	<br><br>
+      <dt><code>htri_t H5Tequal (hid_t <em>type1</em>, hid_t
+	  <em>type2</em>)</code>
+      <dd>Determines if two types are equal.  If <em>type1</em> and
+	<em>type2</em> are the same then this function returns
+	<code>TRUE</code>, otherwise it returns <code>FALSE</code> (an
+	error results in a negative return value).
+
+	<br><br>
+      <dt><code>herr_t H5Tlock (hid_t <em>type</em>)</code>
+      <dd>A transient datatype can be locked, making it immutable
+	(read-only and not closable). The library does this to all
+	predefined types to prevent the application from inadvertently
+	modifying or deleting (closing) them, but the application is
+	also allowed to do this for its own datatypes.  Immutable
+	datatypes are closed when the library closes (either by
+	<code>H5close()</code> or by normal program termination).
+    </dl>
+
+    <h2>3. Properties of Atomic Types</h2>
+
+    <p>An atomic type is a type which cannot be decomposed into
+      smaller units at the API level.  All atomic types have a common
+      set of properties which are augmented by properties specific to
+      a particular type class.  Some of these properties also apply to
+      compound datatypes, but we discuss them only as they apply to
+      atomic datatypes here. The properties and the functions that
+      query and set their values are:
+
+    <dl>
+      <dt><code>H5T_class_t H5Tget_class (hid_t <em>type</em>)</code>
+      <dd>This property holds one of the class names:
+	<code>H5T_INTEGER, H5T_FLOAT, H5T_TIME, H5T_STRING, or
+	H5T_BITFIELD</code>.  This property is read-only and is set
+	when the datatype is created or copied (see
+	<code>H5Tcreate()</code>, <code>H5Tcopy()</code>). If this
+	function fails it returns <code>H5T_NO_CLASS</code> which has
+	a negative value (all other class constants are non-negative).
+
+	<br><br>
+      <dt><code>size_t H5Tget_size (hid_t <em>type</em>)</code>
+      <dt><code>herr_t H5Tset_size (hid_t <em>type</em>, size_t
+	  <em>size</em>)</code>
+      <dd>This property is total size of the datum in bytes, including
+	padding which may appear on either side of the actual value.
+	If this property is reset to a smaller value which would cause
+	the significant part of the data to extend beyond the edge of
+	the datatype then the <code>offset</code> property is
+	decremented a bit at a time.  If the offset reaches zero and
+	the significant part of the data still extends beyond the edge
+	of the datatype then the <code>precision</code> property is
+	decremented a bit at a time.  Decreasing the size of a 
+	datatype may fail if the <code>H5T_FLOAT</code> bit fields would
+	extend beyond the significant part of the type.  Adjusting the
+	size of an <code>H5T_STRING</code> automatically adjusts the
+	precision as well.  On error, <code>H5Tget_size()</code>
+	returns zero which is never a valid size.
+
+	<br><br>
+      <dt><code>H5T_order_t H5Tget_order (hid_t <em>type</em>)</code>
+      <dt><code>herr_t H5Tset_order (hid_t <em>type</em>, H5T_order_t
+	  <em>order</em>)</code>
+      <dd>All atomic datatypes have a byte order which describes how
+	the bytes of the datatype are layed out in memory.  If the
+	lowest memory address contains the least significant byte of
+	the datum then it is said to be <em>little-endian</em> or
+	<code>H5T_ORDER_LE</code>.  If the bytes are in the oposite
+	order then they are said to be <em>big-endian</em> or
+	<code>H5T_ORDER_BE</code>. Some datatypes have the same byte
+	order on all machines and are <code>H5T_ORDER_NONE</code>
+	(like character strings).  If <code>H5Tget_order()</code>
+	fails then it returns <code>H5T_ORDER_ERROR</code> which is a
+	negative value (all successful return values are
+	non-negative).
+
+	<br><br>
+      <dt><code>size_t H5Tget_precision (hid_t <em>type</em>)</code>
+      <dt><code>herr_t H5Tset_precision (hid_t <em>type</em>, size_t
+	  <em>precision</em>)</code>
+      <dd>Some datatypes occupy more bytes than what is needed to
+	store the value.  For instance, a <code>short</code> on a Cray
+	is 32 significant bits in an eight-byte field.  The
+	<code>precision</code> property identifies the number of
+	significant bits of a datatype and the <code>offset</code>
+	property (defined below) identifies its location.  The
+	<code>size</code> property defined above represents the entire
+	size (in bytes) of the datatype.  If the precision is
+	decreased then padding bits are inserted on the MSB side of
+	the significant bits (this will fail for
+	<code>H5T_FLOAT</code> types if it results in the sign,
+	mantissa, or exponent bit field extending beyond the edge of
+	the significant bit field).  On the other hand, if the
+	precision is increased so that it "hangs over" the edge of the
+	total size then the <code>offset</code> property is
+	decremented a bit at a time.  If the <code>offset</code>
+	reaches zero and the significant bits still hang over the
+	edge, then the total size is increased a byte at a time.  The
+	precision of an <code>H5T_STRING</code> is read-only and is
+	always eight times the value returned by
+	<code>H5Tget_size()</code>.  <code>H5Tget_precision()</code>
+	returns zero on failure since zero is never a valid precision.
+
+	<br><br>
+      <dt><code>size_t H5Tget_offset (hid_t <em>type</em>)</code>
+      <dt><code>herr_t H5Tset_offset (hid_t <em>type</em>, size_t
+	  <em>offset</em>)</code>
+      <dd>While the <code>precision</code> property defines the number
+	of significant bits, the <code>offset</code> property defines
+	the location of those bits within the entire datum.  The bits
+	of the entire data are numbered beginning at zero at the least
+	significant bit of the least significant byte (the byte at the
+	lowest memory address for a little-endian type or the byte at
+	the highest address for a big-endian type).  The
+	<code>offset</code> property defines the bit location of the
+	least signficant bit of a bit field whose length is
+	<code>precision</code>.  If the offset is increased so the
+	significant bits "hang over" the edge of the datum, then the
+	<code>size</code> property is automatically incremented.  The
+	offset is a read-only property of an <code>H5T_STRING</code>
+	and is always zero.  <code>H5Tget_offset()</code> returns zero
+	on failure which is also a valid offset, but is guaranteed to
+	succeed if a call to <code>H5Tget_precision()</code> succeeds
+	with the same arguments.
+	
+	<br><br>
+      <dt><code>herr_t H5Tget_pad (hid_t <em>type</em>, H5T_pad_t
+	  *<em>lsb</em>, H5T_pad_t *<em>msb</em>)</code>
+      <dt><code>herr_t H5Tset_pad (hid_t <em>type</em>, H5T_pad_t
+	  <em>lsb</em>, H5T_pad_t <em>msb</em>)</code>
+      <dd>The bits of a datum which are not significant as defined by
+	the <code>precision</code> and <code>offset</code> properties
+	are called <em>padding</em>.  Padding falls into two
+	categories: padding in the low-numbered bits is <em>lsb</em>
+	padding and padding in the high-numbered bits is <em>msb</em>
+	padding (bits are numbered according to the description for
+	the <code>offset</code> property).  Padding bits can always be
+	set to zero (<code>H5T_PAD_ZERO</code>) or always set to one
+	(<code>H5T_PAD_ONE</code>). The current pad types are returned
+	through arguments of <code>H5Tget_pad()</code> either of which
+	may be null pointers.
+    </dl>
+
+    <h3>3.1. Properties of Integer Atomic Types</h3>
+
+    <p>Integer atomic types (<code>class=H5T_INTEGER</code>)
+      describe integer number formats. Such types include the
+      following information which describes the type completely and
+      allows conversion between various integer atomic types.
+
+    <dl>
+      <dt><code>H5T_sign_t H5Tget_sign (hid_t <em>type</em>)</code>
+      <dt><code>herr_t H5Tset_sign (hid_t <em>type</em>, H5T_sign_t
+	  <em>sign</em>)</code>
+      <dd>Integer data can be signed two's complement
+	(<code>H5T_SGN_2</code>) or unsigned
+	(<code>H5T_SGN_NONE</code>). Whether data is signed or not
+	becomes important when converting between two integer 
+	datatypes of differing sizes as it determines how values are
+	truncated and sign extended.
+    </dl>
+
+    <h3>3.2. Properties of Floating-point Atomic Types</h3>
+
+    <p>The library supports floating-point atomic types
+      (<code>class=H5T_FLOAT</code>) as long as the bits of the
+      exponent are contiguous and stored as a biased positive number,
+      the bits of the mantissa are contiguous and stored as a positive
+      magnitude, and a sign bit exists which is set for negative
+      values.  Properties specific to floating-point types are:
+
+    <dl>
+      <dt><code>herr_t H5Tget_fields (hid_t <em>type</em>, size_t
+	  *<em>spos</em>, size_t *<em>epos</em>, size_t
+	  *<em>esize</em>, size_t *<em>mpos</em>, size_t
+	  *<em>msize</em>)</code>
+      <dt><code>herr_t H5Tset_fields (hid_t <em>type</em>, size_t
+	  <em>spos</em>, size_t <em>epos</em>, size_t <em>esize</em>,
+	  size_t <em>mpos</em>, size_t <em>msize</em>)</code>
+      <dd>A floating-point datum has bit fields which are the exponent
+	and mantissa as well as a mantissa sign bit.  These properties
+	define the location (bit position of least significant bit of
+	the field) and size (in bits) of each field.  The bit
+	positions are numbered beginning at zero at the beginning of
+	the significant part of the datum (see the descriptions of the
+	<code>precision</code> and <code>offset</code>
+	properties). The sign bit is always of length one and none of
+	the fields are allowed to overlap.  When expanding a
+	floating-point type one should set the precision first; when
+	decreasing the size one should set the field positions and
+	sizes first.
+	
+	<br><br>
+      <dt><code>size_t H5Tget_ebias (hid_t <em>type</em>)</code>
+      <dt><code>herr_t H5Tset_ebias (hid_t <em>type</em>, size_t
+	  <em>ebias</em>)</code>
+      <dd>The exponent is stored as a non-negative value which is
+	<code>ebias</code> larger than the true exponent.
+	<code>H5Tget_ebias()</code> returns zero on failure which is
+	also a valid exponent bias, but the function is guaranteed to
+	succeed if <code>H5Tget_precision()</code> succeeds when
+	called with the same arguments.
+
+	<br><br>
+      <dt><code>H5T_norm_t H5Tget_norm (hid_t <em>type</em>)</code>
+      <dt><code>herr_t H5Tset_norm (hid_t <em>type</em>, H5T_norm_t
+	  <em>norm</em>)</code>
+      <dd>This property determines the normalization method of the
+	mantissa.
+	<ul>
+	  <li>If the value is <code>H5T_NORM_MSBSET</code> then the
+	    mantissa is shifted left (if non-zero) until the first bit
+	    after the radix point is set and the exponent is adjusted
+	    accordingly.  All bits of the mantissa after the radix
+	    point are stored.
+
+	  <li>If its value is <code>H5T_NORM_IMPLIED</code> then the
+	    mantissa is shifted left (if non-zero) until the first bit
+	    after the radix point is set and the exponent is adjusted
+	    accordingly. The first bit after the radix point is not stored
+	    since it's always set.
+
+	  <li>If its value is <code>H5T_NORM_NONE</code> then the fractional
+	    part of the mantissa is stored without normalizing it.
+	</ul>
+
+	<br><br>
+      <dt><code>H5T_pad_t H5Tget_inpad (hid_t <em>type</em>)</code>
+      <dt><code>herr_t H5Tset_inpad (hid_t <em>type</em>, H5T_pad_t
+	  <em>inpad</em>)</code>
+      <dd>If any internal bits (that is, bits between the sign bit,
+	the mantissa field, and the exponent field but within the
+	precision field) are unused, then they will be filled
+	according to the value of this property.  The <em>inpad</em>
+	argument can be <code>H5T_PAD_ZERO</code> if the internal
+	padding should always be set to zero, or <code>H5T_PAD_ONE</code>
+	if it should always be set to one.
+	<code>H5Tget_inpad()</code> returns <code>H5T_PAD_ERROR</code>
+	on failure which is a negative value (successful return is
+	always non-negative).
+    </dl>
+
+    <h3>3.3. Properties of Date and Time Atomic Types</h3>
+
+    <p>Dates and times (<code>class=H5T_TIME</code>) are stored as
+      character strings in one of the ISO-8601 formats like
+      "<em>1997-12-05 16:25:30</em>"; as character strings using the
+      Unix asctime(3) format like "<em>Thu Dec 05 16:25:30 1997</em>";
+      as an integer value by juxtaposition of the year, month, and
+      day-of-month, hour, minute and second in decimal like
+      <em>19971205162530</em>; as an integer value in Unix time(2)
+      format; or other variations.
+
+    <h3>3.4. Properties of Character String Atomic Types</h3>
+
+    <p>Fixed-length character string types are used to store textual
+      information.  The <code>offset</code> property of a string is
+      always zero and the <code>precision</code> property is eight
+      times as large as the value returned by
+      <code>H5Tget_size()</code> (since precision is measured in bits
+      while size is measured in bytes).  Both properties are
+      read-only.
+
+    <dl>
+      <dt><code>H5T_cset_t H5Tget_cset (hid_t <em>type</em>)</code>
+      <dt><code>herr_t H5Tset_cset (hid_t <em>type</em>, H5T_cset_t
+	  <em>cset</em>)</code>
+      <dd>HDF5 is able to distinguish between character sets of
+	different nationalities and to convert between them to the
+	extent possible.  The only character set currently supported
+	is <code>H5T_CSET_ASCII</code>.
+
+	<br><br>
+      <dt><code>H5T_str_t H5Tget_strpad (hid_t <em>type</em>)</code>
+      <dt><code>herr_t H5Tset_strpad (hid_t <em>type</em>, H5T_str_t
+	  <em>strpad</em>)</code>
+      <dd>The method used to store character strings differs with the
+	programming language: C usually null terminates strings while
+	Fortran left-justifies and space-pads strings.  This property
+	defines the storage mechanism and can be
+
+	<p>
+	<dl>
+	  <dt><code>H5T_STR_NULLTERM</code>
+	  <dd>A C-style string which is guaranteed to be null
+	    terminated.  When converting  from a longer string the
+	    value will be truncated and then a null character
+	    appended.
+
+	    <br><br>
+	  <dt><code>H5T_STR_NULLPAD</code>
+	  <dd>A C-style string which is padded with null characters
+	    but not necessarily null terminated.  Conversion from a
+	    long string to a shorter <code>H5T_STR_NULLPAD</code>
+	    string will truncate but not null terminate.  Conversion
+	    from a short value to a longer value will append null
+	    characters as with <code>H5T_STR_NULLTERM</code>.
+
+	    <br><br>
+	  <dt><code>H5T_STR_SPACEPAD</code>
+	  <dd>A Fortran-style string which is padded with space
+	    characters.  This is the same as
+	    <code>H5T_STR_NULLPAD</code> except the padding character
+	    is a space instead of a null.
+	</dl>
+
+	<p><code>H5Tget_strpad()</code> returns
+	<code>H5T_STR_ERROR</code> on failure, a negative value (all
+	successful return values are non-negative).
+    </dl>
+
+    <h3>3.5. Properties of Bit Field Atomic Types</h3>
+
+    <p>Converting a bit field (<code>class=H5T_BITFIELD</code>) from
+      one type to another simply copies the significant bits.  If the
+      destination is smaller than the source then bits are truncated.
+      Otherwise new bits are filled according to the <code>msb</code>
+      padding type.
+
+    <h3>3.6. Character and String Datatype Issues</h3>
+
+      The <code>H5T_NATIVE_CHAR</code> and <code>H5T_NATIVE_UCHAR</code> 
+      datatypes are actually numeric data (1-byte integers).  If the 
+      application wishes to store character data, then an HDF5 
+      <em>string</em> datatype should be derived from 
+      <code>H5T_C_S1</code> instead.
+
+        <h4>Motivation</h4>
+
+          HDF5 defines at least three classes of datatypes: 
+          integer data, floating point data, and character data.  
+          However, the C language defines only integer and 
+          floating point datatypes; character data in C is 
+          overloaded on the 8- or 16-bit integer types and 
+          character strings are overloaded on arrays of those 
+          integer types which, by convention, are terminated with 
+          a zero element.
+
+          In C, the variable <code>unsigned char s[256]</code> is 
+          either an array of numeric data, a single character string 
+          with at most 255 characters, or an array of 256 characters, 
+          depending entirely on usage.  For uniformity with the 
+          other <code>H5T_NATIVE_</code> types, HDF5 uses the 
+          numeric interpretation of <code>H5T_NATIVE_CHAR</code> 
+          and <code>H5T_NATIVE_UCHAR</code>.
+
+
+        <h4>Usage</h4>
+
+          To store <code>unsigned char s[256]</code> data as an 
+          array of integer values, use the HDF5 datatype 
+          <code>H5T_NATIVE_UCHAR</code> and a data space that 
+          describes the 256-element array. Some other application 
+          that reads the data will then be able to read, say, a 
+          256-element array of 2-byte integers and HDF5 will 
+          perform the numeric translation.
+
+          To store <code>unsigned char s[256]</code> data as a 
+          character string, derive a fixed length string datatype 
+          from <code>H5T_C_S1</code> by increasing its size to 
+          256 characters. Some other application that reads the 
+          data will be able to read, say, a space padded string 
+          of 16-bit characters and HDF5 will perform the character 
+          and padding translations.
+
+          <pre>
+                hid_t s256 = H5Tcopy(H5T_C_S1);
+                             H5Tset_size(s256, 256);
+          </pre>
+
+          To store <code>unsigned char s[256]</code> data as 
+          an array of 256 ASCII characters, use an 
+          HDF5 data space to describe the array and derive a 
+          one-character string type from <code>H5T_C_S1</code>. 
+          Some other application will be able to read a subset 
+          of the array as 16-bit characters and HDF5 will 
+          perform the character translations.  
+          The <code>H5T_STR_NULLPAD</code> is necessary because 
+          if <code>H5T_STR_NULLTERM</code> were used 
+          (the default) then the single character of storage 
+          would be for the null terminator and no useful data 
+          would actually be stored (unless the length were 
+          incremented to more than one character).
+
+          <pre>
+                hid_t s1 = H5Tcopy(H5T_C_S1);
+                           H5Tset_strpad(s1, H5T_STR_NULLPAD);
+          </pre>
+
+        <h4>Summary</h4>
+
+          The C language uses the term <code>char</code> to 
+          represent one-byte numeric data and does not make 
+          character strings a first-class datatype.  
+          HDF5 makes a distinction between integer and 
+          character data and maps the C <code>signed char</code> 
+          (<code>H5T_NATIVE_CHAR</code>) and 
+          <code>unsigned char</code> (<code>H5T_NATIVE_UCHAR</code>) 
+          datatypes to the HDF5 integer type class.
+
+    <h2>4. Properties of Opaque Types</h2>
+
+    <p>Opaque types (<code>class=H5T_OPAQUE</code>) provide the
+      application with a mechanism for describing data which cannot be 
+      otherwise described by HDF5. The only properties associated with 
+      opaque types are a size in bytes and an ASCII tag which is
+      manipulated with <code>H5Tset_tag()</code> and
+      <code>H5Tget_tag()</code> functions. The library contains no
+      predefined conversion functions but the application is free to
+      register conversions between any two opaque types or between an
+      opaque type and some other type.
+
+    <h2>5. Properties of Compound Types</h2>
+
+    <p>A compound datatype is similar to a <code>struct</code> in C
+      or a common block in Fortran: it is a collection of one or more
+      atomic types or small arrays of such types.  Each
+      <em>member</em> of a compound type has a name which is unique
+      within that type, and a byte offset that determines the first
+      byte (smallest byte address) of that member in a compound datum.
+      A compound datatype has the following properties:
+
+    <dl>
+      <dt><code>H5T_class_t H5Tget_class (hid_t <em>type</em>)</code>
+      <dd>All compound datatypes belong to the type class
+      <code>H5T_COMPOUND</code>.  This property is read-only and is
+      defined when a datatype is created or copied (see
+      <code>H5Tcreate()</code> or <code>H5Tcopy()</code>).
+
+	<br><br>
+      <dt><code>size_t H5Tget_size (hid_t <em>type</em>)</code>
+      <dd>Compound datatypes have a total size in bytes which is
+	returned by this function.  All members of a compound 
+	datatype must exist within this size.  A value of zero is returned
+	for failure; all successful return values are positive.
+
+	<br><br>
+      <dt><code>int H5Tget_nmembers (hid_t <em>type</em>)</code>
+      <dd>A compound datatype consists of zero or more members
+	(defined in any order) with unique names and which occupy
+	non-overlapping regions within the datum.  In the functions
+	that follow, individual members are referenced by an index
+	number between zero and <em>N</em>-1, inclusive, where
+	<em>N</em> is the value returned by this function.
+	<code>H5Tget_nmembers()</code> returns -1 on failure.
+
+	<br><br>
+      <dt><code>char *H5Tget_member_name (hid_t <em>type</em>, unsigned
+	  <em>membno</em>)</code>
+      <dd>Each member has a name which is unique among its siblings in
+	a compound datatype.  This function returns a pointer to a
+	null-terminated copy of the name allocated with
+	<code>malloc()</code> or the null pointer on failure.  The
+	caller is responsible for freeing the memory returned by this
+	function.
+
+	<br><br>
+      <dt><code>size_t H5Tget_member_offset (hid_t <em>type</em>, unsigned
+	  <em>membno</em>)</code>
+      <dd>The byte offset of member number <em>membno</em> with
+	respect to the beginning of the containing compound datum is
+	returned by this function.  A zero is returned on failure
+	which is also a valid offset, but this function is guaranteed
+	to succeed if a call to <code>H5Tget_member_class()</code>
+	succeeds when called with the same <em>type</em> and
+	<em>membno</em> arguments.
+
+	<br><br>
+      <dt><code>hid_t H5Tget_member_type (hid_t <em>type</em>, unsigned
+	  <em>membno</em>)</code>
+      <dd>Each member has its own datatype, a copy of which is
+	returned by this function.  The returned datatype identifier
+	should be released by eventually calling
+	<code>H5Tclose()</code> on that type.
+    </dl>
+
+    <p>Properties of members of a compound datatype are
+      defined when the member is added to the compound type (see
+      <code>H5Tinsert()</code>) and cannot be subsequently modified.
+      This makes it imposible to define recursive data structures.
+
+
+    <a name="DTypes-PredefinedAtomic">
+    <h2>6. Predefined Atomic Datatypes</h2>
+    </a>
+
+    <p>The library predefines a modest number of datatypes having
+      names like <code>H5T_<em>arch</em>_<em>base</em></code> where
+      <em>arch</em> is an architecture name and <em>base</em> is a
+      programming type name.  New types can be derived from the
+      predifined types by copying the predefined type (see
+      <code>H5Tcopy()</code>) and then modifying the result.
+
+    <p>
+      <center>
+	<table align=center width="80%">
+	  <tr>
+	    <th align=left width="20%">Architecture Name</th>
+	    <th align=left width="80%">Description</th>
+	  </tr>
+
+	  <tr valign=top>
+	    <td><code>IEEE</code></td>
+	    <td>This architecture defines standard floating point
+	      types in various byte orders.</td>
+	  </tr>
+
+	  <tr valign=top>
+	    <td><code>STD</code></td>
+	    <td>This is an architecture that contains semi-standard
+	      datatypes like signed two's complement integers,
+	      unsigned integers, and bitfields in various byte
+	      orders.</td>
+	  </tr>
+
+	  <tr valign=top>
+	    <td><code>UNIX</code></td>
+	    <td>Types which are specific to Unix operating systems are 
+	      defined in this architecture.  The only type currently
+	      defined is the Unix date and time types
+	      (<code>time_t</code>).</td>
+	  </tr>
+
+	  <tr valign=top>
+	    <td><code>C<br>FORTRAN</code></td>
+	    <td>Types which are specific to the C or Fortran
+	      programming languages are defined in these
+	      architectures.  For instance, <code>H5T_C_STRING</code>
+	      defines a base string type with null termination which
+	      can be used to derive string types of other
+	      lengths.</td>
+	  </tr>
+
+	  <tr valign=top>
+	    <td><code>NATIVE</code></td>
+	    <td>This architecture contains C-like datatypes for the
+	      machine on which the library was compiled.  The types
+	      were actually defined by running the
+	      <code>H5detect</code> program when the library was
+	      compiled. In order to be portable, applications should
+	      almost always use this architecture to describe things
+	      in memory.</td>
+	  </tr>
+
+	  <tr valign=top>
+	    <td><code>CRAY</code></td>
+	    <td>Cray architectures.  These are word-addressable,
+	      big-endian systems with non-IEEE floating point.</td>
+	  </tr>
+
+	  <tr valign=top>
+	    <td><code>INTEL</code></td>
+	    <td>All Intel and compatible CPU's including 80286, 80386,
+	      80486, Pentium, Pentium-Pro, and Pentium-II. These are
+	      little-endian systems with IEEE floating-point.</td>
+	  </tr>
+
+	  <tr valign=top>
+	    <td><code>MIPS</code></td>
+	    <td>All MIPS CPU's commonly used in SGI systems.  These
+	      are big-endian systems with IEEE floating-point.</td>
+	  </tr>
+
+	  <tr valign=top>
+	    <td><code>ALPHA</code></td>
+	    <td>All DEC Alpha CPU's, little-endian systems with IEEE
+	    floating-point.</td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>The base name of most types consists of a letter, a precision
+      in bits, and an indication of the byte order.  The letters are:
+
+    <p>
+      <center>
+	<table border align=center width="40%">
+	  <tr>
+	    <td align=center width="30%">B</td>
+	    <td width="70%">Bitfield</td>
+	  </tr>
+	  <tr>
+	    <td align=center>D</td>
+	    <td>Date and time</td>
+	  </tr>
+	  <tr>
+	    <td align=center>F</td>
+	    <td>Floating point</td>
+	  </tr>
+	  <tr>
+	    <td align=center>I</td>
+	    <td>Signed integer</td>
+	  </tr>
+	  <tr>
+	    <td align=center>R</td>
+	    <td>References</td>
+	  </tr>
+	  <tr>
+	    <td align=center>S</td>
+	    <td>Character string</td>
+	  </tr>
+	  <tr>
+	    <td align=center>U</td>
+	    <td>Unsigned integer</td>
+	  </tr>
+	</table>
+      </center>
+	
+    <p>The byte order is a two-letter sequence:
+
+    <p>
+      <center>
+	<table border align=center width="40%">
+	  <tr>
+	    <td align=center width="30%">BE</td>
+	    <td width="70%">Big endian</td>
+	  </tr>
+	  <tr>
+	    <td align=center>LE</td>
+	    <td>Little endian</td>
+	  </tr>
+	  <tr>
+	    <td align=center>VX</td>
+	    <td>Vax order</td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>
+      <center>
+	<table align=center width="80%">
+	  <tr>
+	    <th align=left><br><br>Example</th>
+	    <th align=left><br><br>Description</th>
+	  </tr>
+	  
+	  <tr valign=top>
+	    <td><code>H5T_IEEE_F64LE</code></td>
+	    <td>Eight-byte, little-endian, IEEE floating-point</td>
+	  </tr>
+	  <tr valign=top>
+	    <td><code>H5T_IEEE_F32BE</code></td>
+	    <td>Four-byte, big-endian, IEEE floating point</td>
+	  </tr>
+	  <tr valign=top>
+	    <td><code>H5T_STD_I32LE</code></td>
+	    <td>Four-byte, little-endian, signed two's complement integer</td>
+	  </tr>
+	  <tr valign=top>
+	    <td><code>H5T_STD_U16BE</code></td>
+	    <td>Two-byte, big-endian, unsigned integer</td>
+	  </tr>
+	  <tr valign=top>
+	    <td><code>H5T_UNIX_D32LE</code></td>
+	    <td>Four-byte, little-endian, time_t</td>
+	  </tr>
+	  <tr valign=top>
+	    <td><code>H5T_C_S1</code></td>
+	    <td>One-byte, null-terminated string of eight-bit characters</td>
+	  </tr>
+	  <tr valign=top>
+	    <td><code>H5T_INTEL_B64</code></td>
+	    <td>Eight-byte bit field on an Intel CPU</td>
+	  </tr>
+	  <tr valign=top>
+	    <td><code>H5T_CRAY_F64</code></td>
+	    <td>Eight-byte Cray floating point</td>
+	  </tr>
+	  <tr valign=top>
+	    <td><code>H5T_STD_ROBJ</code></td>
+	    <td>Reference to an entire object in a file</td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>The <code>NATIVE</code> architecture has base names which don't 
+      follow the same rules as the others.  Instead, native type names 
+      are similar to the C type names.  Here are some examples:
+
+    <p>
+      <center>
+	<table align=center width="80%">
+	  <tr>
+	    <th align=left><br><br>Example</th>
+	    <th align=left><br><br>Corresponding C Type</th>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_CHAR</code></td>
+	    <td><code>char</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_SCHAR</code></td>
+	    <td><code>signed char</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_UCHAR</code></td>
+	    <td><code>unsigned char</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_SHORT</code></td>
+	    <td><code>short</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_USHORT</code></td>
+	    <td><code>unsigned short</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_INT</code></td>
+	    <td><code>int</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_UINT</code></td>
+	    <td><code>unsigned</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_LONG</code></td>
+	    <td><code>long</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_ULONG</code></td>
+	    <td><code>unsigned long</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_LLONG</code></td>
+	    <td><code>long long</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_ULLONG</code></td>
+	    <td><code>unsigned long long</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_FLOAT</code></td>
+	    <td><code>float</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_DOUBLE</code></td>
+	    <td><code>double</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_LDOUBLE</code></td>
+	    <td><code>long double</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_HSIZE</code></td>
+	    <td><code>hsize_t</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_HSSIZE</code></td>
+	    <td><code>hssize_t</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_HERR</code></td>
+	    <td><code>herr_t</code></td>
+	  </tr>
+	  <tr>
+	    <td><code>H5T_NATIVE_HBOOL</code></td>
+	    <td><code>hbool_t</code></td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+ 	  <caption align=bottom><h4>Example:  A 128-bit
+	      integer</h4></caption>
+	  <tr>
+	    <td>
+	      <p>To create a 128-bit, little-endian signed integer
+		type one could use the following (increasing the
+		precision of a type automatically increases the total
+		size):
+
+	      <p><code><pre>
+hid_t new_type = H5Tcopy (H5T_NATIVE_INT);
+H5Tset_precision (new_type, 128);
+H5Tset_order (new_type, H5T_ORDER_LE);
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+    
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example: An 80-character
+	      string</h4></caption> 
+	  <tr>
+	    <td>
+	      <p>To create an 80-byte null terminated string type one
+		might do this (the offset of a character string is
+		always zero and the precision is adjusted
+		automatically to match the size):
+
+	      <p><code><pre>
+hid_t str80 = H5Tcopy (H5T_C_S1);
+H5Tset_size (str80, 80);
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>A complete list of the datatypes predefined in HDF5 can be found in 
+      <a href="PredefDTypes.html"><cite>HDF5 Predefined Datatypes</cite></a>
+      in the <a href="RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a>.
+
+
+    <h2>7. Defining Compound Datatypes</h2>
+
+    <p>Unlike atomic datatypes which are derived from other atomic
+      datatypes, compound datatypes are created from scratch. First,
+      one creates an empty compound datatype and specifies it's total
+      size.  Then members are added to the compound datatype in any
+      order.
+
+    <p>Usually a C struct will be defined to hold a data point in
+      memory, and the offsets of the members in memory will be the
+      offsets of the struct members from the beginning of an instance
+      of the struct.
+
+    <dl>
+      <dt><code>HOFFSET(s,m)</code>
+      <dd>This macro computes the offset of member <em>m</em> within
+	a struct <em>s</em>.
+      <dt><code>offsetof(s,m)</code>
+      <dd>This macro defined in <code>stddef.h</code> does
+	exactly the same thing as the <code>HOFFSET()</code> macro.
+    </dl>
+
+    <p>Each member must have a descriptive name which is the
+      key used to uniquely identify the member within the compound
+      datatype.  A member name in an HDF5 datatype does not
+      necessarily have to be the same as the name of the member in the
+      C struct, although this is often the case.  Nor does one need to
+      define all members of the C struct in the HDF5 compound 
+      datatype (or vice versa).
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example: A simple struct</h4></caption>
+	  <tr>
+	    <td>
+	      <p>An HDF5 datatype is created to describe complex
+		numbers whose type is defined by the
+		<code>complex_t</code> struct.
+
+	      <p><code><pre>
+typedef struct {
+   double re;   /*real part*/
+   double im;   /*imaginary part*/
+} complex_t;
+
+hid_t complex_id = H5Tcreate (H5T_COMPOUND, sizeof tmp);
+H5Tinsert (complex_id, "real", HOFFSET(complex_t,re),
+           H5T_NATIVE_DOUBLE);
+H5Tinsert (complex_id, "imaginary", HOFFSET(complex_t,im),
+           H5T_NATIVE_DOUBLE);
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>Member alignment is handled by the <code>HOFFSET</code>
+      macro.  However, data stored on disk does not require alignment,
+      so unaligned versions of compound data structures can be created
+      to improve space efficiency on disk.  These unaligned compound
+      datatypes can be created by computing offsets by hand to
+      eliminate inter-member padding, or the members can be packed by
+      calling <code>H5Tpack()</code> (which modifies a datatype
+      directly, so it is usually preceded by a call to
+      <code>H5Tcopy()</code>):
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example: A packed struct</h4></caption>
+	  <tr>
+	    <td>
+	      <p>This example shows how to create a disk version of a
+		compound datatype in order to store data on disk in
+		as compact a form as possible.  Packed compound 
+		datatypes should generally not be used to describe memory
+		as they may violate alignment constraints for the
+		architecture being used.  Note also that using a
+		packed datatype for disk storage may involve a higher
+		data conversion cost.
+	      <p><code><pre>
+hid_t complex_disk_id = H5Tcopy (complex_id);
+H5Tpack (complex_disk_id);
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example: A flattened struct</h4></caption>
+	  <tr>
+	    <td>
+	      <p>Compound datatypes that have a compound datatype
+		member can be handled two ways.  This example shows
+		that the compound datatype can be flattened,
+		resulting in a compound type with only atomic
+		members.
+
+	      <p><code><pre>
+typedef struct {
+   complex_t x;
+   complex_t y;
+} surf_t;
+
+hid_t surf_id = H5Tcreate (H5T_COMPOUND, sizeof tmp);
+H5Tinsert (surf_id, "x-re", HOFFSET(surf_t,x.re),
+           H5T_NATIVE_DOUBLE);
+H5Tinsert (surf_id, "x-im", HOFFSET(surf_t,x.im),
+           H5T_NATIVE_DOUBLE);
+H5Tinsert (surf_id, "y-re", HOFFSET(surf_t,y.re),
+           H5T_NATIVE_DOUBLE);
+H5Tinsert (surf_id, "y-im", HOFFSET(surf_t,y.im),
+           H5T_NATIVE_DOUBLE);
+	      </code></pre>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example: A nested struct</h4></caption>
+	  <tr>
+	    <td>
+	      <p>However, when the <code>complex_t</code> is used
+		often it becomes inconvenient to list its members over
+		and over again.  So the alternative approach to
+		flattening is to define a compound datatype and then
+		use it as the type of the compound members, as is done
+		here (the typedefs are defined in the previous
+		examples).
+
+	      <p><code><pre>
+hid_t complex_id, surf_id; /*hdf5 datatypes*/
+
+complex_id = H5Tcreate (H5T_COMPOUND, sizeof c);
+H5Tinsert (complex_id, "re", HOFFSET(complex_t,re),
+           H5T_NATIVE_DOUBLE);
+H5Tinsert (complex_id, "im", HOFFSET(complex_t,im),
+           H5T_NATIVE_DOUBLE);
+
+surf_id = H5Tcreate (H5T_COMPOUND, sizeof s);
+H5Tinsert (surf_id, "x", HOFFSET(surf_t,x), complex_id);
+H5Tinsert (surf_id, "y", HOFFSET(surf_t,y), complex_id);
+	      </code></pre>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+
+
+    <a name="Datatypes_Enum">&nbsp;</a>
+    <h2>8. Enumeration Datatypes</h2>
+
+    <h3>8.1. Introduction</h3>
+
+    <p>An HDF enumeration datatype is a 1:1 mapping between a set of
+      symbols and a set of integer values, and an order is imposed on
+      the symbols by their integer values.  The symbols are passed
+      between the application and library as character strings and all
+      the values for a particular enumeration type are of the same
+      integer type, which is not necessarily a native type.
+
+    <h3>8.2. Creation</h3>
+    
+    <p>Creation of an enumeration datatype resembles creation of a
+      compound datatype: first an empty enumeration type is created,
+      then members are added to the type, then the type is optionally
+      locked.
+
+    <dl>
+      <dt><code>hid_t H5Tcreate(H5T_class_t <em>type_class</em>,
+	  size_t <em>size</em>)</code>
+      <dd>This function creates a new empty enumeration datatype based 
+	on a native signed integer type. The first argument is the
+	constant <code>H5T_ENUM</code> and the second argument is the
+	size in bytes of the native integer on which the enumeration
+	type is based. If the architecture does not support a native
+	signed integer of the specified size then an error is
+	returned.
+
+	<pre>
+/* Based on a native signed short */
+hid_t hdf_en_colors = H5Tcreate(H5T_ENUM, sizeof(short));</pre>
+
+
+      <dt><code>hid_t H5Tenum_create(hid_t <em>base</em>)</code>
+      <dd>This function creates a new empty enumeration datatype based 
+	on some integer datatype <em>base</em> and is a
+	generalization of the <code>H5Tcreate()</code> function.  This 
+	function is useful when creating an enumeration type based on
+	some non-native integer datatype, but it can be used for
+	native types as well.
+
+	<pre>
+/* Based on a native unsigned short */
+hid_t hdf_en_colors_1 = H5Tenum_create(H5T_NATIVE_USHORT);
+
+/* Based on a MIPS 16-bit unsigned integer */
+hid_t hdf_en_colors_2 = H5Tenum_create(H5T_MIPS_UINT16);
+
+/* Based on a big-endian 16-bit unsigned integer */
+hid_t hdf_en_colors_3 = H5Tenum_create(H5T_STD_U16BE);</pre>
+
+
+      <dt><code>herr_t H5Tenum_insert(hid_t <em>etype</em>, const char
+	  *<em>symbol</em>, void *<em>value</em>)</code>
+      <dd>Members are inserted into the enumeration datatype
+	<em>etype</em> with this function.  Each member has a symbolic 
+	name <em>symbol</em> and some integer representation
+	<em>value</em>.  The <em>value</em> argument must point to a value
+	of the same datatype as specified when the enumeration type
+	was created. The order of member insertion is not important
+	but all symbol names and values must be unique within a
+	particular enumeration type.
+
+	<pre>
+short val;
+H5Tenum_insert(hdf_en_colors, "RED",   (val=0,&amp;val));
+H5Tenum_insert(hdf_en_colors, "GREEN", (val=1,&amp;val));
+H5Tenum_insert(hdf_en_colors, "BLUE",  (val=2,&amp;val));
+H5Tenum_insert(hdf_en_colors, "WHITE", (val=3,&amp;val));
+H5Tenum_insert(hdf_en_colors, "BLACK", (val=4,&amp;val));</pre>
+
+
+      <dt><code>herr_t H5Tlock(hid_t <em>etype</em>)</code>
+      <dd>This function locks a datatype so it cannot be modified or
+	freed unless the entire HDF5 library is closed.  Its use is
+	completely optional but using it on an application datatype
+	makes that datatype act like a predefined datatype.
+
+	<pre>
+H5Tlock(hdf_en_colors);</pre>
+
+    </dl>
+
+    <h3>8.3. Integer Operations</h3>
+
+    <p>Because an enumeration datatype is derived from an integer
+      datatype, any operation which can be performed on integer 
+      datatypes can also be performed on enumeration datatypes.  This
+      includes:
+
+    <p>
+      <center>
+	  <table>
+	    <tr>
+	      <td><code>H5Topen()</code></td>
+	      <td><code>H5Tcreate()</code></td>
+	      <td><code>H5Tcopy()</code></td>
+	      <td><code>H5Tclose()</code></td>
+	    </tr><tr>
+	      <td><code>H5Tequal()</code></td>
+	      <td><code>H5Tlock()</code></td>
+	      <td><code>H5Tcommit()</code></td>
+	      <td><code>H5Tcommitted()</code></td>
+	    </tr><tr>
+	      <td><code>H5Tget_class()</code></td>
+	      <td><code>H5Tget_size()</code></td>
+	      <td><code>H5Tget_order()</code></td>
+	      <td><code>H5Tget_pad()</code></td>
+	    </tr><tr>
+	      <td><code>H5Tget_precision()</code></td>
+	      <td><code>H5Tget_offset()</code></td>
+	      <td><code>H5Tget_sign()</code></td>
+	      <td><code>H5Tset_size()</code></td>
+	    </tr><tr>
+	      <td><code>H5Tset_order()</code></td>
+	      <td><code>H5Tset_precision()</code></td>
+	      <td><code>H5Tset_offset()</code></td>
+	      <td><code>H5Tset_pad()</code></td>
+	    </tr><tr>
+	      <td><code>H5Tset_sign()</code></td>
+	    </tr>
+	  </table>
+      </center>
+
+    <p>In addition, the new function <code>H5Tget_super()</code> will
+      be defined for all datatypes that are derived from existing
+      types (currently just enumeration types).
+
+    <dl>
+      <dt><code>hid_t H5Tget_super(hid_t <em>type</em>)</code>
+      <dd>Return the datatype from which <em>type</em> is
+	derived. When <em>type</em> is an enumeration datatype then
+	the returned value will be an integer datatype but not
+	necessarily a native type.  One use of this function would be
+	to create a new enumeration type based on the same underlying
+	integer type and values but with possibly different symbols.
+
+	<pre>
+hid_t itype = H5Tget_super(hdf_en_colors);
+hid_t hdf_fr_colors = H5Tenum_create(itype);
+H5Tclose(itype);
+
+short val;
+H5Tenum_insert(hdf_fr_colors, "ouge",  (val=0,&amp;val));
+H5Tenum_insert(hdf_fr_colors, "vert",  (val=1,&amp;val));
+H5Tenum_insert(hdf_fr_colors, "bleu",  (val=2,&amp;val));
+H5Tenum_insert(hdf_fr_colors, "blanc", (val=3,&amp;val));
+H5Tenum_insert(hdf_fr_colors, "noir",  (val=4,&amp;val));
+H5Tlock(hdf_fr_colors);</pre>
+    </dl>
+
+    <h3>8.4. Type Functions</h3>
+
+    <p>A small set of functions is available for querying properties
+      of an enumeration type.  These functions are likely to be used
+      by browsers to display datatype information.
+
+    <dl>
+      <dt><code>int H5Tget_nmembers(hid_t <em>etype</em>)</code>
+      <dd>When given an enumeration datatype <em>etype</em> this
+	function returns the number of members defined for that
+	type. This function is already implemented for compound 
+	datatypes.
+
+	<br><br>
+      <dt><code>char *H5Tget_member_name(hid_t <em>etype</em>, unsigned
+	  <em>membno</em>)</code>
+      <dd>Given an enumeration datatype <em>etype</em> this function
+	returns the symbol name for the member indexed by
+	<em>membno</em>. Members are numbered from zero to
+	<em>N</em>-1 where <em>N</em> is the return value from
+	<code>H5Tget_nmembers()</code>. The members are stored in no
+	particular order.  This function is already implemented for
+	compound datatypes.  If an error occurs then the null pointer 
+	is returned.  The return value should be freed by calling
+	<code>free()</code>.
+
+	<br><br>
+      <dt><code>herr_t H5Tget_member_value(hid_t <em>etype</em>, unsigned
+	  <em>membno</em>, void *<em>value</em>/*out*/)</code>
+      <dd>Given an enumeration datatype <em>etype</em> this function
+	returns the value associated with the member indexed by
+	<em>membno</em> (as described for
+	<code>H5Tget_member_name()</code>). The value returned
+	is in the domain of the underlying integer
+	datatype which is often a native integer type. The
+	application should ensure that the memory pointed to by
+	<em>value</em> is large enough to contain the result (the size 
+	can be obtained by calling <code>H5Tget_size()</code> on
+	either the enumeration type or the underlying integer type
+	when the type is not known by the C compiler.
+
+	<pre>
+int n = H5Tget_nmembers(hdf_en_colors);
+unsigned u;
+for (u=0; u&lt;(unsigned)n; u++) {
+    char *symbol = H5Tget_member_name(hdf_en_colors, u);
+    short val;
+    H5Tget_member_value(hdf_en_colors, u, &amp;val);
+    printf("#%u %20s = %d\n", u, symbol, val);
+    free(symbol);
+}</pre>
+
+	  <p>
+          Output:
+	  <pre>
+#0                BLACK = 4
+#1                 BLUE = 2
+#2                GREEN = 1
+#3                  RED = 0
+#4                WHITE = 3</pre>
+    </dl>
+
+    <h3>8.5. Data Functions</h3>
+
+    <p>In addition to querying about the enumeration type properties,
+      an application may want to make queries about enumerated
+      data. These functions perform efficient mappings between symbol
+      names and values.
+
+    <dl>
+      <dt><code>herr_t H5Tenum_valueof(hid_t <em>etype</em>, const char 
+	  *<em>symbol</em>, void *<em>value</em>/*out*/)</code>
+      <dd>Given an enumeration datatype <em>etype</em> this function
+      returns through <em>value</em> the bit pattern associated with
+      the symbol name <em>symbol</em>.  The <em>value</em> argument
+      should point to memory which is large enough to hold the result, 
+      which is returned as the underlying integer datatype specified
+      when the enumeration type was created, often a native integer
+      type.
+
+	<br><br>
+      <dt><code>herr_t H5Tenum_nameof(hid_t <em>etype</em>, void
+	  *<em>value</em>, char *<em>symbol</em>, size_t
+	  <em>size</em>)</code>
+      <dd>This function translates a bit pattern pointed to by
+	<em>value</em> to a symbol name according to the mapping
+	defined in the enumeration datatype <em>etype</em> and stores
+	at most <em>size</em> characters of that name (counting the
+	null terminator) to the <em>symbol</em> buffer. If the name is 
+	longer than the result buffer then the result is not null
+	terminated and the function returns failure. If <em>value</em> 
+	points to a bit pattern which is not in the domain of the
+	enumeration type then the first byte of the <em>symbol</em>
+	buffer is set to zero and the function fails.
+
+	<pre>
+short data[1000] = {4, 2, 0, 0, 5, 1, ...};
+int i;
+char symbol[32];
+
+for (i=0; i&lt;1000; i++) {
+    if (H5Tenum_nameof(hdf_en_colors, data+i, symbol,
+                       sizeof symbol))&lt;0) {
+        if (symbol[0]) {
+            strcpy(symbol+sizeof(symbol)-4, "...");
+        } else {
+            strcpy(symbol, "UNKNOWN");
+        }
+    }
+    printf("%d %s\n", data[i], symbol);
+}
+printf("}\n");</pre>
+
+	  <p>
+          Output:
+	  <pre>
+4 BLACK
+2 BLUE
+0 RED
+0 RED
+5 UNKNOWN
+1 GREEN
+...</pre>
+    </dl>
+
+    <h3>8.6. Conversion</h3>
+
+    <p>Enumerated data can be converted from one type to another
+      provided the destination enumeration type contains all the
+      symbols of the source enumeration type. The conversion operates
+      by matching up the symbol names of the source and destination
+      enumeration types to build a mapping from source value to
+      destination value.  For instance, if we are translating from an
+      enumeration type that defines a sequence of integers as the
+      values for the colors to a type that defines a different bit for 
+      each color then the mapping might look like this:
+
+    <p><img src="EnumMap.gif" alt="Enumeration Mapping">
+
+    <p>That is, a source value of <code>2</code> which corresponds to
+      <code>BLUE</code> would be mapped to <code>0x0004</code>. The
+      following code snippet builds the second datatype, then
+      converts a raw data array from one datatype to another, and
+      then prints the result.
+
+      <pre>
+/* Create a new enumeration type */
+short val;
+hid_t bits = H5Tcreate(H5T_ENUM, sizeof val);
+H5Tenum_insert(bits, "RED",   (val=0x0001,&amp;val));
+H5Tenum_insert(bits, "GREEN", (val=0x0002,&amp;val));
+H5Tenum_insert(bits, "BLUE",  (val=0x0004,&amp;val));
+H5Tenum_insert(bits, "WHITE", (val=0x0008,&amp;val));
+H5Tenum_insert(bits, "BLACK", (val=0x0010,&amp;val));
+
+/* The data */
+short data[6] = {1, 4, 2, 0, 3, 5};
+
+/* Convert the data from one type to another */
+H5Tconvert(hdf_en_colors, bits, 5, data, NULL, plist_id);
+
+/* Print the data */
+for (i=0; i&lt;6; i++) {
+    printf("0x%04x\n", (unsigned)(data[i]));
+}</pre>
+
+        <p>
+        Output:
+	<pre>
+
+0x0002
+0x0010
+0x0004
+0x0001
+0x0008
+0xffff</pre>
+
+    <p>If the source data stream contains values which are not in the
+      domain of the conversion map then an overflow exception is
+      raised within the library, causing the application defined
+      overflow handler to be invoked (see
+      <code>H5Tset_overflow()</code>). If no overflow handler is
+      defined then all bits of the destination value will be set.
+
+    <p>The HDF library will not provide conversions between enumerated 
+      data and integers although the application is free to do so
+      (this is a policy we apply to all classes of HDF datatypes). 
+      However, since enumeration types are derived from
+      integer types it is permissible to treat enumerated data as
+      integers and perform integer conversions in that context.
+
+    <h3>8.7. Symbol Order</h3>
+
+    <p>Symbol order is determined by the integer values associated
+      with each symbol.  When the integer datatype is a native type,
+      testing the relative order of two symbols is an easy process:
+      simply compare the values of the symbols.  If only the symbol
+      names are available then the values must first be determined by
+      calling <code>H5Tenum_valueof()</code>.
+
+      <pre>
+short val1, val2;
+H5Tenum_valueof(hdf_en_colors, "WHITE", &amp;val1);
+H5Tenum_valueof(hdf_en_colors, "BLACK", &amp;val2);
+if (val1 &lt; val2) ...</pre>
+
+    <p>When the underlying integer datatype is not a native type then 
+      the easiest way to compare symbols is to first create a similar
+      enumeration type that contains all the same symbols but has a
+      native integer type (HDF type conversion features can be used to
+      convert the non-native values to native values). Once we have a
+      native type we can compare symbol order as just described.  If
+      <code>foreign</code> is some non-native enumeration type then a
+      native type can be created as follows:
+
+      <pre>
+int n = H5Tget_nmembers(foreign);
+hid_t itype = H5Tget_super(foreign);
+void *val = malloc(n * MAX(H5Tget_size(itype), sizeof(int)));
+char *name = malloc(n * sizeof(char*));
+unsigned u;
+
+/* Get foreign type information */
+for (u=0; u&lt;(unsigned)n; u++) {
+    name[u] = H5Tget_member_name(foreign, u);
+    H5Tget_member_value(foreign, u,
+                        (char*)val+u*H5Tget_size(foreign));
+}
+
+/* Convert integer values to new type */
+H5Tconvert(itype, H5T_NATIVE_INT, n, val, NULL, plist_id);
+
+/* Build a native type */
+hid_t native = H5Tenum_create(H5T_NATIVE_INT);
+for (i=0; i&lt;n; i++) {
+    H5Tenum_insert(native, name[i], ((int*)val)[i]);
+    free(name[i]);
+}
+free(name);
+free(val);</pre>
+
+    <p>It is also possible to convert enumerated data to a new type
+      that has a different order defined for the symbols.  For
+      instance, we can define a new type, <code>reverse</code> that
+      defines the same five colors but in the reverse order.
+
+      <pre>
+short val;
+int i;
+char sym[8];
+short data[5] = {0, 1, 2, 3, 4};
+
+hid_t reverse = H5Tenum_create(H5T_NATIVE_SHORT);
+H5Tenum_insert(reverse, "BLACK", (val=0,&amp;val));
+H5Tenum_insert(reverse, "WHITE", (val=1,&amp;val));
+H5Tenum_insert(reverse, "BLUE",  (val=2,&amp;val));
+H5Tenum_insert(reverse, "GREEN", (val=3,&amp;val));
+H5Tenum_insert(reverse, "RED",   (val=4,&amp;val));
+
+/* Print data */
+for (i=0; i&lt;5; i++) {
+    H5Tenum_nameof(hdf_en_colors, data+i, sym, sizeof sym);
+    printf ("%d %s\n", data[i], sym);
+}
+
+puts("Converting...");
+H5Tconvert(hdf_en_colors, reverse, 5, data, NULL, plist_id);
+
+/* Print data */
+for (i=0; i&lt;5; i++) {
+    H5Tenum_nameof(reverse, data+i, sym, sizeof sym);
+    printf ("%d %s\n", data[i], sym);
+}</pre>
+	
+      <p>
+      Output:
+      <pre>
+0 RED
+1 GREEN
+2 BLUE
+3 WHITE
+4 BLACK
+Converting...
+4 RED
+3 GREEN
+2 BLUE
+1 WHITE
+0 BLACK</pre>
+
+    <h3>8.8. Equality</h3>
+
+    <p>The order that members are inserted into an enumeration type is 
+      unimportant; the important part is the associations between the
+      symbol names and the values.  Thus, two enumeration datatypes
+      will be considered equal if and only if both types have the same
+      symbol/value associations and both have equal underlying integer
+      datatypes. Type equality is tested with the
+      <code>H5Tequal()</code> function.
+
+    <h3>8.9. Interacting with C's <code>enum</code> Type</h3>
+
+    <p>Although HDF enumeration datatypes are similar to C
+      <code>enum</code> datatypes, there are some important
+      differences:
+
+    <p>
+      <center>
+	<table border width="80%">
+	  <tr>
+	    <th>Difference</th>
+	    <th>Motivation/Implications</th>
+	  </tr>
+
+	  <tr>
+	    <td valign=top>Symbols are unquoted in C but quoted in
+	      HDF.</td>
+	    <td valign=top>This allows the application to manipulate
+	      symbol names in ways that are not possible with C.</td>
+	  </tr>
+
+	  <tr>
+	    <td valign=top>The C compiler automatically replaces all
+	      symbols with their integer values but HDF requires
+	      explicit calls to do the same.</td>
+	    <td valign=top>C resolves symbols at compile time while
+	      HDF resolves symbols at run time.</td>
+	  </tr>
+
+	  <tr>
+	    <td valign=top>The mapping from symbols to integers is
+	      <em>N</em>:1 in C but 1:1 in HDF.</td>
+	    <td valign=top>HDF can translate from value to name
+	      uniquely and large <code>switch</code> statements are
+	      not necessary to print values in human-readable
+	      format.</td>
+	  </tr>
+
+	  <tr>
+	    <td valign=top>A symbol must appear in only one C
+	      <code>enum</code> type but may appear in multiple HDF
+	      enumeration types.</td>
+	    <td valign=top>The translation from symbol to value in HDF 
+	      requires the datatype to be specified while in C the
+	      datatype is not necessary because it can be inferred
+	      from the symbol.</td>
+	  </tr>
+
+	  <tr>
+	    <td valign=top>The underlying integer value is always a
+	      native integer in C but can be a foreign integer type in 
+	      HDF.</td>
+	    <td valign=top>This allows HDF to describe data that might 
+	      reside on a foreign architecture, such as data stored in 
+	      a file.</td>
+	  </tr>
+
+	  <tr>
+	    <td valign=top>The sign and size of the underlying integer 
+	      datatype is chosen automatically by the C compiler but
+	      must be fully specified with HDF.</td>
+	    <td valign=top>Since HDF doesn't require finalization of a 
+	      datatype, complete specification of the type must be
+	      supplied before the type is used.  Requiring that
+	      information at the time of type creation was a design
+	      decision to simplify the library.</td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>The examples below use the following C datatypes:
+
+    <p>
+      <table width="90%" bgcolor="white">
+	<tr>
+	  <td>
+	    <code><pre>
+/* English color names */
+typedef enum {
+    RED,
+    GREEN,
+    BLUE,
+    WHITE,
+    BLACK
+} c_en_colors;
+
+/* Spanish color names, reverse order */
+typedef enum {
+    NEGRO
+    BLANCO,
+    AZUL,
+    VERDE,
+    ROJO,
+} c_sp_colors;
+
+/* No enum definition for French names */
+	    </pre></code>
+	  </td>
+	</tr>
+      </table>
+
+    <h4>Creating HDF Types from C Types</h4>
+
+    <p>An HDF enumeration datatype can be created from a C
+      <code>enum</code> type simply by passing pointers to the C
+      <code>enum</code> values to <code>H5Tenum_insert()</code>.  For
+      instance, to create HDF types for the <code>c_en_colors</code>
+      type shown above:
+
+    <p>
+      <table width="90%" bgcolor="white">
+	<tr>
+	  <td>
+	    <code><pre>
+
+c_en_colors val;
+hid_t hdf_en_colors = H5Tcreate(H5T_ENUM, sizeof(c_en_colors));
+H5Tenum_insert(hdf_en_colors, "RED",   (val=RED,  &amp;val));
+H5Tenum_insert(hdf_en_colors, "GREEN", (val=GREEN,&amp;val));
+H5Tenum_insert(hdf_en_colors, "BLUE",  (val=BLUE, &amp;val));
+H5Tenum_insert(hdf_en_colors, "WHITE", (val=WHITE,&amp;val));
+H5Tenum_insert(hdf_en_colors, "BLACK", (val=BLACK,&amp;val));</pre></code>
+	  </td>
+	</tr>
+      </table>
+
+    <h4>Name Changes between Applications</h4>
+
+    <p>Occassionally two applicatons wish to exchange data but they
+      use different names for the constants they exchange.  For
+      instance, an English and a Spanish program may want to
+      communicate color names although they use different symbols in
+      the C <code>enum</code> definitions. The communication is still
+      possible although the applications must agree on common terms
+      for the colors. The following example shows the Spanish code to
+      read the values assuming that the applications have agreed that
+      the color information will be exchanged using Enlish color
+      names:
+
+    <p>
+      <table width="90%" bgcolor="white">
+	<tr>
+	  <td>
+	    <code><pre>
+
+c_sp_colors val, data[1000];
+hid_t hdf_sp_colors = H5Tcreate(H5T_ENUM, sizeof(c_sp_colors));
+H5Tenum_insert(hdf_sp_colors, "RED",   (val=ROJO,   &amp;val));
+H5Tenum_insert(hdf_sp_colors, "GREEN", (val=VERDE,  &amp;val));
+H5Tenum_insert(hdf_sp_colors, "BLUE",  (val=AZUL,   &amp;val));
+H5Tenum_insert(hdf_sp_colors, "WHITE", (val=BLANCO, &amp;val));
+H5Tenum_insert(hdf_sp_colors, "BLACK", (val=NEGRO,  &amp;val));
+
+H5Dread(dataset, hdf_sp_colors, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);</pre></code>
+	  </td>
+	</tr>
+      </table>
+
+
+    <h4>Symbol Ordering across Applications</h4>
+
+    <p>Since symbol ordering is completely determined by the integer values
+      assigned to each symbol in the <code>enum</code> definition,
+      ordering of <code>enum</code> symbols cannot be preserved across
+      files like with HDF enumeration types.  HDF can convert from one
+      application's integer values to the other's so a symbol in one
+      application's C <code>enum</code> gets mapped to the same symbol
+      in the other application's C <code>enum</code>, but the relative
+      order of the symbols is not preserved.
+
+    <p>For example, an application may be defined to use the
+      definition of <code>c_en_colors</code> defined above where
+      <code>WHITE</code> is less than <code>BLACK</code>, but some
+      other application might define the colors in some other
+      order. If each application defines an HDF enumeration type based 
+      on that application's C <code>enum</code> type then HDF will
+      modify the integer values as data is communicated from one
+      application to the other so that a <code>RED</code> value
+      in the first application is also a <code>RED</code> value in the
+      other application.
+
+    <p>A case of this reordering of symbol names was also shown in the 
+      previous code snippet (as well as a change of language), where
+      HDF changed the integer values so 0 (<code>RED</code>) in the
+      input file became 4 (<code>ROJO</code>) in the <code>data</code>
+      array. In the input file, <code>WHITE</code> was less than
+      <code>BLACK</code>; in the application the opposite is true.
+
+    <p>In fact, the ability to change the order of symbols is often
+      convenient when the enumeration type is used only to group
+      related symbols that don't have any well defined order
+      relationship.
+
+    <h4>Internationalization</h4>
+
+    <p>The HDF enumeration type conversion features can also be used
+      to provide internationalization of debugging output.  A program
+      written with the <code>c_en_colors</code> datatype could define 
+      a separate HDF datatype for languages such as English, Spanish, 
+      and French and cast the enumerated value to one of these HDF
+      types to print the result.
+
+    <p>
+      <table width="90%" bgcolor="white">
+	<tr>
+	  <td>
+	    <code><pre>
+
+c_en_colors val, *data=...;
+
+hid_t hdf_sp_colors = H5Tcreate(H5T_ENUM, sizeof val);
+H5Tenum_insert(hdf_sp_colors, "ROJO",   (val=RED,   &amp;val));
+H5Tenum_insert(hdf_sp_colors, "VERDE",  (val=GREEN, &amp;val));
+H5Tenum_insert(hdf_sp_colors, "AZUL",   (val=BLUE,  &amp;val));
+H5Tenum_insert(hdf_sp_colors, "BLANCO", (val=WHITE, &amp;val));
+H5Tenum_insert(hdf_sp_colors, "NEGRO",  (val=BLACK, &amp;val));
+
+hid_t hdf_fr_colors = H5Tcreate(H5T_ENUM, sizeof val);
+H5Tenum_insert(hdf_fr_colors, "OUGE",  (val=RED,   &amp;val));
+H5Tenum_insert(hdf_fr_colors, "VERT",  (val=GREEN, &amp;val));
+H5Tenum_insert(hdf_fr_colors, "BLEU",  (val=BLUE,  &amp;val));
+H5Tenum_insert(hdf_fr_colors, "BLANC", (val=WHITE, &amp;val));
+H5Tenum_insert(hdf_fr_colors, "NOIR",  (val=BLACK, &amp;val));
+
+void
+nameof(lang_t language, c_en_colors val, char *name, size_t size)
+{
+    switch (language) {
+    case ENGLISH:
+        H5Tenum_nameof(hdf_en_colors, &amp;val, name, size);
+        break;
+    case SPANISH:
+        H5Tenum_nameof(hdf_sp_colors, &amp;val, name, size);
+        break;
+    case FRENCH:
+        H5Tenum_nameof(hdf_fr_colors, &amp;val, name, size);
+        break;
+    }
+}</pre></code>
+	  </td>
+	</tr>
+      </table>
+
+    <h3>8.10. Goals That Have Been Met</h3>
+
+    <p>The main goal of enumeration types is to provide communication
+      of enumerated data using symbolic equivalence.  That is, a
+      symbol written to a dataset by one application should be read as
+      the same symbol by some other application.
+
+    <p>
+      <table width="90%">
+	<tr>
+	  <td valign=top><b>Architecture Independence</b></td>
+	  <td valign=top>Two applications shall be able to exchange
+	    enumerated data even when the underlying integer values
+	    have different storage formats. HDF accomplishes this for
+	    enumeration types by building them upon integer types.</td>
+	</tr>
+
+	<tr>
+	  <td valign=top><b>Preservation of Order Relationship</b></td>
+	  <td valign=top>The relative order of symbols shall be
+	    preserved between two applications that use equivalent
+	    enumeration datatypes. Unlike numeric values that have
+	    an implicit ordering, enumerated data has an explicit
+	    order defined by the enumeration datatype and HDF
+	    records this order in the file.</td>
+	</tr>
+
+	<tr>
+	  <td valign=top><b>Order Independence</b></td>
+	  <td valign=top>An application shall be able to change the
+	    relative ordering of the symbols in an enumeration 
+	    datatype.  This is accomplished by defining a new type with
+	    different integer values and converting data from one type 
+	    to the other.</td>
+	</tr>
+
+	<tr>
+	  <td valign=top><b>Subsets</b></td>
+	  <td valign=top>An application shall be able to read
+	    enumerated data from an archived dataset even after the
+	    application has defined additional members for the
+	    enumeration type. An application shall be able to write
+	    to a dataset when the dataset contains a superset of the 
+	    members defined by the application.  Similar rules apply 
+	    for in-core conversions between enumerated datatypes.</td>
+	</tr>
+
+	<tr>
+	  <td valign=top><b>Targetable</b></td>
+	  <td valign=top>An application shall be able to target a
+	    particular architecture or application when storing
+	    enumerated data. This is accomplished by allowing
+	    non-native underlying integer types and converting the
+	    native data to non-native data.</td>
+	</tr>
+
+	<tr>
+	  <td valign=top><b>Efficient Data Transfer</b></td>
+	  <td valign=top>An application that defines a file dataset
+	    that corresponds to some native C enumerated data array
+	    shall be able to read and write to that dataset directly
+	    using only Posix read and write functions. HDF already
+	    optimizes this case for integers, so the same optimization 
+	    will apply to enumerated data.
+	</tr>
+
+	<tr>
+	  <td valign=top><b>Efficient Storage</b></td>
+	  <td valign=top>Enumerated data shall be stored in a manner 
+	    which is space efficient. HDF stores the enumerated data
+	    as integers and allows the application to chose the size
+	    and format of those integers.</td>
+	</tr>
+      </table>
+
+
+
+
+
+
+
+<h2>9. Variable-length Datatypes</h2>
+
+<h3>9.1. Overview And Justification</h3>
+
+Variable-length (VL) datatypes are sequences of an existing datatype
+(atomic, VL, or compound) which are not fixed in length from one dataset location
+to another.  In essence, they are similar to C character strings -- a sequence of 
+a type which is pointed to by a particular type of <em>pointer</em> -- although 
+they are implemented more closely to FORTRAN strings by including an explicit 
+length in the pointer instead of using a particular value to terminate the 
+sequence.
+
+<p>
+VL datatypes are useful to the scientific community in many different ways,
+some of which are listed below:
+<ul>
+    <li>Ragged arrays: Multi-dimensional ragged arrays can be implemented with
+        the last (fastest changing) dimension being ragged by using a
+        VL datatype as the type of the element stored. (Or as a field in a
+        compound datatype.)
+    <li>Fractal arrays: If a compound datatype has a VL field of another compound
+        type with VL fields (a <em>nested</em> VL datatype), this can be used to
+        implement ragged arrays of ragged arrays, to whatever nesting depth is
+        required for the user.
+    <li>Polygon lists: A common storage requirement is to efficiently store arrays
+        of polygons with different numbers of vertices.  VL datatypes can be
+        used to efficiently and succinctly describe an array of polygons with
+        different numbers of vertices.
+    <li>Character strings: Perhaps the most common use of VL datatypes will be to
+        store C-like VL character strings in dataset elements or as attributes
+        of objects.
+    <li>Indices: An array of VL object references could be used as an index to
+        all the objects in a file which contain a particular sequence of
+        dataset values. Perhaps an array something like the following:
+        <pre>
+            Value1: Object1, Object3,  Object9
+            Value2: Object0, Object12, Object14, Object21, Object22
+            Value3: Object2
+            Value4: &lt;none&gt;
+            Value5: Object1, Object10, Object12
+                .
+                .
+        </pre>
+    <li>Object Tracking: An array of VL dataset region references can be used as
+        a method of tracking objects or features appearing in a sequence of
+        datasets.  Perhaps an array of them would look like:
+        <pre>
+            Feature1: Dataset1:Region,  Dataset3:Region,  Dataset9:Region
+            Feature2: Dataset0:Region,  Dataset12:Region, Dataset14:Region,
+                      Dataset21:Region, Dataset22:Region
+            Feature3: Dataset2:Region
+            Feature4: &lt;none&gt;
+            Feature5: Dataset1:Region,  Dataset10:Region, Dataset12:Region
+                .
+                .
+        </pre>
+</ul>
+
+
+<h3>9.2. Variable-length Datatype Memory Management</h3>
+
+With each element possibly being of different sequence lengths for a
+dataset with a VL datatype, the memory for the VL datatype must be dynamically
+allocated.  Currently there are two methods of managing the memory for 
+VL datatypes: the standard C malloc/free memory allocation routines or a method
+of calling user-defined memory management routines to allocate or free memory.
+Since the memory allocated when reading (or writing) may be complicated to
+release, an HDF5 routine is provided to traverse a memory buffer and free the
+VL datatype information without leaking memory.
+
+
+<h4>Variable-length datatypes cannot be divided</h4>
+
+VL datatypes are designed so that they cannot be subdivided by the library
+with selections, etc.  This design was chosen due to the complexities in
+specifying selections on each VL element of a dataset through a selection API
+that is easy to understand.  Also, the selection APIs work on dataspaces, not
+on datatypes.  At some point in time, we may want to create a way for
+dataspaces to have VL components to them and we would need to allow selections
+of those VL regions, but that is beyond the scope of this document.
+
+
+<h4>What happens if the library runs out of memory while reading?</h4>
+
+It is possible for a call to <code>H5Dread</code> to fail while reading in 
+VL datatype information if the memory required exceeds that which is available.  
+In this case, the <code>H5Dread</code> call will fail gracefully and any 
+VL data which has been allocated prior to the memory shortage will be returned 
+to the system via the memory management routines detailed below.  
+It may be possible to design a <em>partial read</em> API function at a 
+later date, if demand for such a function warrants.
+
+
+<h4>Strings as variable-length datatypes</h4>
+
+Since character strings are a special case of VL data that is implemented
+in many different ways on different machines and in different programming 
+languages, they are handled somewhat differently from other VL datatypes in HDF5.
+
+<p>
+HDF5 has native VL strings for each language API, which are stored the
+same way on disk, but are exported through each language API in a natural way
+for that language.  When retrieving VL strings from a dataset, users may choose
+to have them stored in memory as a native VL string or in HDF5's <code>hvl_t</code> 
+struct for VL datatypes.
+
+<p>
+VL strings may be created in one of two ways: by creating a VL datatype with
+a base type of <code>H5T_NATIVE_ASCII</code>, <code>H5T_NATIVE_UNICODE</code>, 
+etc., or by creating a string datatype and setting its length to 
+<code>H5T_VARIABLE</code>.  The second method is used to access 
+native VL strings in memory.  The library will convert between the two types, 
+but they are stored on disk using different datatypes and have different 
+memory representations.
+
+<p>
+Multi-byte character representations, such as UNICODE or <em>wide</em> 
+characters in C/C++, will need the appropriate character and string datatypes 
+created so that they can be described properly through the datatype API.  
+Additional conversions between these types and the current ASCII characters 
+will also be required.
+
+<p>
+Variable-width character strings (which might be compressed data or some
+other encoding) are not currently handled by this design.  We will evaluate
+how to implement them based on user feedback.
+
+
+<h3>9.3. Variable-length Datatype API</h3>
+
+<h4>Creation</h4>
+
+VL datatypes are created with the <code>H5Tvlen_create()</code> function 
+as follows:
+<dl>
+    <dd><em>type_id</em> = <code>H5Tvlen_create</code>(<em>hid_t</em> <code>base_type_id</code>);
+</dl>
+
+<p>
+The base datatype will be the datatype that the sequence is composed of,
+characters for character strings, vertex coordinates for polygon lists, etc.
+The base datatype specified for the VL datatype can be of any HDF5 datatype,
+including another VL datatype, a compound datatype, or an atomic datatype.
+
+
+<h4>Query base datatype of VL datatype</h4>
+
+It may be necessary to know the base datatype of a VL datatype before 
+memory is allocated, etc.  The base datatype is queried with the 
+<code>H5Tget_super()</code> function, described in the H5T documentation.
+
+
+<h4>Query minimum memory required for VL information</h4>
+
+It order to predict the memory usage that <code>H5Dread</code> may need 
+to allocate to store VL data while reading the data, the 
+<code>H5Dget_vlen_size()</code> function is provided:
+<dl>
+    <dd><em>herr_t</em> 
+        <code>H5Dget_vlen_buf_size</code>(<em>hid_t</em> <code>dataset_id</code>, 
+        <em>hid_t</em> <code>type_id</code>,
+        <em>hid_t</em> <code>space_id</code>, 
+        <em>hsize_t</em> *<code>size</code>) 
+</dl>
+        (This function is not implemented in Release 1.2.)
+
+<p>
+This routine checks the number of bytes required to store the VL data from
+the dataset, using the <code>space_id</code> for the selection in the dataset 
+on disk and the <code>type_id</code> for the memory representation of the 
+VL data in memory.  The *<code>size</code> value is modified according to 
+how many bytes are required to store the VL data in memory.
+
+
+<h4>Specifying how to manage memory for the VL datatype</h4>
+
+The memory management method is determined by dataset transfer properties
+passed into the <code>H5Dread</code> and <code>H5Dwrite</code> functions 
+with the dataset transfer property list.  
+
+<p>
+Default memory management is set by using <code>H5P_DEFAULT</code> 
+for the dataset transfer property list identifier.
+If <code>H5P_DEFAULT</code> is used with <code>H5Dread</code>,
+the system <code>malloc</code> and <code>free</code> calls
+will be used for allocating and freeing memory.
+In such a case,  <code>H5P_DEFAULT</code> should also be passed
+as the property list identifier to <code>H5Dvlen_reclaim</code>.
+
+<p>
+The rest of this subsection is relevant only to those who choose 
+<i>not</i> to use default memory management.
+
+<p>
+The user can choose whether to use the 
+system <code>malloc</code> and <code>free</code> calls  or
+user-defined, or custom, memory management functions.
+If user-defined memory management functions are to be used, 
+the memory allocation and free routines must be defined via 
+<code>H5Pset_vlen_mem_manager()</code>, as follows:
+<dl>
+    <dd><em>herr_t</em> 
+        <code>H5Pset_vlen_mem_manager</code>(<em>hid_t</em> <code>plist_id</code>,
+        <em>H5MM_allocate_t</em> <code>alloc</code>, 
+        <em>void</em> *<code>alloc_info</code>,
+        <em>H5MM_free_t</em> <code>free</code>, 
+        <em>void</em> *<code>free_info</code>)
+</dl>
+
+
+<p>
+The <code>alloc</code> and <code>free</code> parameters 
+identify the memory management routines to be used.
+If the user has defined custom memory management routines,
+<code>alloc</code> and/or <code>free</code> should be set to make 
+those routine calls (i.e., the name of the routine is used as 
+the value of the parameter);  
+if the user prefers to use the system's <code> malloc</code>
+and/or <code>free</code>, the <code>alloc</code> and 
+<code>free</code> parameters, respectively, should be set to 
+<code> NULL</code>
+<p>
+The prototypes for the user-defined functions would appear as follows:
+<dl>
+    <dd><code>typedef</code> <em>void</em> 
+        *(*<code>H5MM_allocate_t</code>)(<em>size_t</em> <code>size</code>, 
+        <em>void</em> *<code>info</code>) ;
+    <dd><code>typedef</code> <em>void</em> 
+        (*<code>H5MM_free_t</code>)(<em>void</em> *<code>mem</code>, 
+        <em>void</em> *<code>free_info</code>) ;
+</dl>
+
+<p>
+The <code>alloc_info</code> and <code>free_info</code> parameters can be 
+used to pass along any required information to the user's memory management 
+routines.
+
+<p>
+In summary, if the user has defined custom memory management 
+routines, the name(s) of the routines are passed in the 
+<code>alloc</code> and <code>free</code> parameters and the 
+custom routines' parameters are passed in the 
+<code>alloc_info</code> and <code>free_info</code> parameters.
+If the user wishes to use the system <code> malloc</code> and 
+<code>free</code> functions, the <code>alloc</code> and/or 
+<code>free</code> parameters are set to <code> NULL</code> 
+and the  <code>alloc_info</code> and <code>free_info</code> 
+parameters are ignored.
+
+<h4>Recovering memory from VL buffers read in</h4>
+
+The complex memory buffers created for a VL datatype may be reclaimed with
+the <code>H5Dvlen_reclaim()</code> function call, as follows:
+<dl>
+    <dd><em>herr_t</em> 
+        <code>H5Dvlen_reclaim</code>(<em>hid_t</em> <code>type_id</code>, 
+        <em>hid_t</em> <code>space_id</code>, 
+        <em>hid_t</em> <code>plist_id</code>,
+        <em>void</em> *<code>buf</code>);
+</dl>
+
+<p>
+The <code>type_id</code> must be the datatype stored in the buffer, 
+<code>space_id</code> describes the selection for the memory buffer 
+to free the VL datatypes within, 
+<code>plist_id</code> is the dataset transfer property list which 
+was used for the I/O transfer to create the buffer, and 
+<code>buf</code> is the pointer to the buffer to free the VL memory within.  
+The VL structures (<code>hvl_t</code>) in the user's buffer are 
+modified to zero out the VL information after it has been freed.
+
+<p>
+If nested VL datatypes were used to create the buffer, 
+this routine frees them from the bottom up, 
+releasing all the memory without creating memory leaks.
+
+
+<h3>9.4. Code Examples</h3>
+
+The following example creates the following one-dimensional array 
+of size 4 of variable-length datatype.
+<pre>
+          0 10 20 30
+            11 21 31
+               22 32
+                  33
+</pre>
+Each element of the VL datatype is of H5T_NATIVE_UINT type.
+<p>
+The array is stored in the dataset and then read back into memory. 
+Default memory management routines are used for writing the VL data.
+Custom memory management routines are used for reading the VL data and
+reclaiming memory space.
+
+<center>
+<table border align=center width="100%">
+  <caption align=bottom><h4>Example: Variable-length Datatypes</h4></caption>
+  <tr>
+    <td>
+      <pre>
+#include &lt;hdf5.h&gt;
+
+#define FILE   "vltypes.h5"
+#define MAX(X,Y)        ((X)&gt;(Y)?(X):(Y))
+
+/* 1-D dataset with fixed dimensions */
+#define SPACE_NAME  "Space"
+#define SPACE_RANK	1
+#define SPACE_DIM	4
+
+void *vltypes_alloc_custom(size_t size, void *info);
+void vltypes_free_custom(void *mem, void *info);
+
+/****************************************************************
+**
+**  vltypes_alloc_custom():  VL datatype custom memory
+**      allocation routine.  This routine just uses malloc to
+**      allocate the memory and increments the amount of memory
+**      allocated.
+** 
+****************************************************************/
+void *vltypes_alloc_custom(size_t size, void *info)
+{
+
+    void *ret_value=NULL;       /* Pointer to return */
+    int *mem_used=(int *)info;  /* Get the pointer to the memory used */
+    size_t extra;               /* Extra space needed */
+
+    /*
+     *  This weird contortion is required on the DEC Alpha to keep the
+     *  alignment correct.
+     */
+    extra=MAX(sizeof(void *),sizeof(int));
+
+    if((ret_value=(void *)malloc(extra+size))!=NULL) {
+        *(int *)ret_value=size;
+        *mem_used+=size;
+    } /* end if */
+    ret_value=((unsigned char *)ret_value)+extra;
+    return(ret_value);
+}
+/******************************************************************
+**  vltypes_free_custom(): VL datatype custom memory
+**      allocation routine.  This routine just uses free to
+**      release the memory and decrements the amount of memory
+**      allocated.
+** ****************************************************************/
+void vltypes_free_custom(void *_mem, void *info)
+
+{  
+    unsigned char *mem;
+    int *mem_used=(int *)info;  /* Get the pointer to the memory used */
+    size_t extra;               /* Extra space needed */    
+    /*
+     *  This weird contortion is required on the DEC Alpha to keep the
+     *  alignment correct.      
+     */ 
+    extra=MAX(sizeof(void *),sizeof(int));
+    if(_mem!=NULL) {        
+        mem=((unsigned char *)_mem)-extra;
+       *mem_used-=*(int *)mem; 
+       free(mem); 
+    } /* end if */
+}
+
+int main(void)
+
+{   
+    hvl_t wdata[SPACE_DIM];   /* Information to write */
+    hvl_t rdata[SPACE_DIM];   /* Information read in */
+    hid_t		fid;	   /* HDF5 File IDs */  
+    hid_t		dataset;   /* Dataset ID */
+    hid_t		sid;       /* Dataspace ID */
+    hid_t		tid;       /* Datatype ID	   	 */
+    hid_t       xfer_pid;   /* Dataset transfer property list ID */
+    hsize_t		dims[] = {SPACE_DIM};
+    uint       i,j;        /* counting variables */
+    int         mem_used=0; /* Memory used during allocation */
+    herr_t		ret;		/* Generic return value	 */
+
+    /*
+     * Allocate and initialize VL data to write 
+     */
+    for(i=0; i&lt;SPACE_DIM; i++) {
+
+        wdata[i].p= (unsigned int *)malloc((i+1)*sizeof(unsigned int));
+        wdata[i].len=i+1;
+        for(j=0; j&lt;(i+1); j++)
+            ((unsigned int *)wdata[i].p)[j]=i*10+j;
+    } /* end for */
+
+    /* 
+     * Create file. 
+     */
+    fid = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* 
+     * Create dataspace for datasets. 
+     */
+    sid = H5Screate_simple(SPACE_RANK, dims, NULL);
+
+    /* 
+     * Create a datatype to refer to. 
+     */
+    tid = H5Tvlen_create (H5T_NATIVE_UINT);
+
+    /* 
+     * Create a dataset. 
+     */
+    dataset=H5Dcreate(fid, "Dataset", tid, sid, H5P_DEFAULT);
+
+    /* 
+     * Write dataset to disk. 
+     */
+    ret=H5Dwrite(dataset, tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+
+    /* 
+     * Change to the custom memory allocation routines for reading 
+     * VL data 
+     */
+    xfer_pid=H5Pcreate(H5P_DATASET_XFER);
+
+    ret=H5Pset_vlen_mem_manager(xfer_pid, vltypes_alloc_custom,
+                                &mem_used, vltypes_free_custom, 
+                                &mem_used);
+
+    /* 
+     * Read dataset from disk. vltypes_alloc_custom and
+     * will be used to manage memory.
+     */
+    ret=H5Dread(dataset, tid, H5S_ALL, H5S_ALL, xfer_pid, rdata);   
+
+    /* 
+     * Display data read in 
+     */
+    for(i=0; i&lt;SPACE_DIM; i++) {
+        printf("%d-th element length is %d \n", i, 
+                                   (unsigned) rdata[i].len);
+        for(j=0; j&lt;rdata[i].len; j++) {
+            printf(" %d ",((unsigned int *)rdata[i].p)[j] );   
+        } 
+        printf("\n"); 
+    } /* end for */
+
+    /* 
+     * Reclaim the read VL data. vltypes_free_custom will be used 
+     * to reclaim the space. 
+     */
+    ret=H5Dvlen_reclaim(tid, sid, xfer_pid, rdata);
+
+    /* 
+     * Reclaim the write VL data.  C language free function will be 
+     * used to reclaim space. 
+     */
+    ret=H5Dvlen_reclaim(tid, sid, H5P_DEFAULT, wdata);
+
+    /* 
+     * Close Dataset 
+     */
+    ret = H5Dclose(dataset);
+
+    /* 
+     * Close datatype 
+     */
+    ret = H5Tclose(tid);
+
+    /* 
+     * Close disk dataspace 
+     */
+    ret = H5Sclose(sid);
+    
+    /* 
+     * Close dataset transfer property list 
+     */
+    ret = H5Pclose(xfer_pid);
+    
+    /* 
+     * Close file 
+     */
+    ret = H5Fclose(fid);
+
+} 
+      </pre>
+    </td>
+  </tr>
+</table>
+</center>
+
+And the output from this sample code would be as follows:
+
+<center>
+<table border align=center width="100%">
+  <caption align=bottom><h4>Example: Variable-length Datatypes, Sample Output</h4></caption>
+  <tr>
+    <td>
+      <pre>
+0-th element length is 1 
+0 
+1-th element length is 2 
+10  11 
+2-th element length is 3 
+20  21  22 
+3-th element length is 4 
+30  31  32  33 
+      </pre>
+    </td>
+  </tr>
+</table>
+</center>
+
+<p>
+For further samples of VL datatype code, see the tests in <code>test/tvltypes.c</code> 
+in the HDF5 distribution.
+
+
+
+
+<h2>10. Array Datatypes</h2>
+
+The array class of datatypes, <code>H5T_ARRAY</code>, allows the 
+construction of true, homogeneous, multi-dimensional arrays.  
+Since these are homogeneous arrays, each element of the array will be 
+of the same datatype, designated at the time the array is created.
+
+<p>
+Arrays can be nested.
+Not only is an array datatype used as an element of an HDF5 dataset,
+but the elements of an array datatype may be of any datatype, 
+including another array datatype.
+
+<p>
+Array datatypes cannot be subdivided for I/O; the entire array must 
+be transferred from one dataset to another. 
+
+<p>
+Within the limitations outlined in the next paragraph, array datatypes 
+may be <em>N</em>-dimensional and of any dimension size.  
+Unlimited dimensions, however, are not supported. 
+Functionality similar to unlimited dimension arrays is available through 
+the use of variable-length datatypes.
+
+<p>
+The maximum number of dimensions, i.e., the maximum rank, of an array
+datatype is specified by the HDF5 library constant <code>H5S_MAX_RANK</code>.
+The minimum rank is 1 (one).
+All dimension sizes must be greater than 0 (zero). 
+
+<p>
+One array dataype may only be converted to another array datatype 
+if the number of dimensions and the sizes of the dimensions are equal 
+and the datatype of the first array's elements can be converted 
+to the datatype of the second array's elements.
+
+<h3>10.1 Array Datatype APIs</h2>
+
+The functions for creating and manipulating array datadypes are 
+as follows:
+
+<dir>
+<table>
+    <tr>
+        <td><code><b>H5Tarray_create</b></code>
+        </td><td>&nbsp;&nbsp;
+        </td><td>Creates an array datatype.
+        </td></tr><tr><td colspan=3><dir>
+            <em>hid_t</em> <code>H5Tarray_create</code>(
+                       <em>hid_t</em> <code>base</code>,
+                       <em>int</em> <code>rank</code>,
+                       <em>const hsize_t</em> <code>dims[/*rank*/]</code>,
+                       <em>const int</em> <code>perm[/*rank*/]</code>
+            )
+        </dir>
+    </td></tr><tr>
+        <td><code><b>H5Tget_array_ndims</b></code>
+        </td><td>&nbsp;&nbsp;
+        </td><td>Retrieves the rank of the array datatype.
+        </td></tr><tr><td colspan=3><dir>
+            <em>int</em> <code>H5Tget_array_ndims</code>(
+                       <em>hid_t</em> <code>adtype_id</code>
+            )
+        </dir>
+    </td></tr><tr>
+        <td><code><b>H5Tget_array_dims</b></code>
+        </td><td>&nbsp;&nbsp;
+        </td><td>Retrieves the dimension sizes of the array datatype.
+        </td></tr><tr><td colspan=3><dir>
+            <em>int</em> <code>H5Tget_array_dims</code>(
+                       <em>hid_t</em> <code>adtype_id</code>,
+                       <em>hsize_t *</em><code>dims[]</code>,
+                       <em>int *</em><code>perm[]</code>
+            )
+        </dir>
+    </td></tr>
+</table>
+</dir>
+
+
+<h3>10.2 Transition Issues in Adapting Existing Software<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+(Transition to HDF5 Release 1.4 Only)</h3>
+
+The array datatype class is new with Release 1.4;  
+prior releases included an array element for compound datatypes.
+<p>
+The use of the array datatype class will not interfere with the 
+use of existing compound datatypes.  Applications may continue to 
+read and write the older field arrays, but they will no longer be 
+able to create array fields in newly-defined compound datatypes.
+<p>
+Existing array fields will be transparently mapped to array datatypes
+when they are read in.
+
+
+<h3>10.3 Code Example</h3>
+
+The following example creates an array datatype and a dataset 
+containing elements of the array datatype in an HDF5 file.
+It then writes the dataset to the file.  
+<p>
+
+<center>
+<table border align=center width="100%">
+  <caption align=bottom><h4>Example: Array Datatype</h4></caption>
+  <tr>
+    <td>
+      <pre>
+#include &lt;hdf5.h&gt;
+
+#define FILE        "SDS_array_type.h5"
+#define DATASETNAME "IntArray" 
+#define ARRAY_DIM1     5                      /* array dimensions and rank */
+#define ARRAY_DIM2     4 
+#define ARRAY_RANK     2 
+#define SPACE_DIM     10                      /* dataset dimensions and rank */ 
+#define RANK  1 
+
+int
+main (void)
+{
+    hid_t       file, dataset;         /* file and dataset handles */
+    hid_t       datatype, dataspace;   /* handles */
+    hsize_t     sdims[] = {SPACE_DIM};              /* dataset dimensions */
+    hsize_t     adims[] = {ARRAY_DIM1, ARRAY_DIM2}; /* array dimensions */
+    hsize_t     adims_out[2]; 
+    herr_t      status;                             
+    int         data[SPACE_DIM][ARRAY_DIM1][ARRAY_DIM2];   /* data to write */
+    int         k, i, j;
+    int         array_rank_out; 
+
+    /* 
+     * Data  and output buffer initialization. 
+     */
+    for (k = 0; k &lt; SPACE_DIM; k++) {
+      for (j = 0; j &lt; ARRAY_DIM1; j++) {
+	for (i = 0; i &lt; ARRAY_DIM2; i++)
+               data[k][j][i] = k;
+      }
+    }     
+    /*
+     * Create a new file using H5F_ACC_TRUNC access,
+     * default file creation properties, and default file
+     * access properties.
+     */
+    file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Describe the size of the array and create the data space for fixed
+     * size dataset. 
+     */
+    dataspace = H5Screate_simple(RANK, sdims, NULL); 
+
+    /* 
+     * Define array datatype for the data in the file.
+     */
+    datatype = H5Tarray_create(H5T_NATIVE_INT, ARRAY_RANK, adims, NULL);
+
+    /*
+     * Create a new dataset within the file using defined dataspace and
+     * datatype and default dataset creation properties.
+     */
+    dataset = H5Dcreate(file, DATASETNAME, datatype, dataspace,
+			H5P_DEFAULT);
+
+    /*
+     * Write the data to the dataset using default transfer properties.
+     */
+    status = H5Dwrite(dataset, datatype, H5S_ALL, H5S_ALL,
+		      H5P_DEFAULT, data);
+
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    /*
+     * Reopen dataset, and return information about its datatype.
+     */
+    dataset = H5Dopen(file, DATASETNAME);
+    datatype = H5Dget_type(dataset);
+    array_rank_out = H5Tget_array_ndims(datatype);
+    status = H5Tget_array_dims(datatype, adims_out, NULL); 
+    printf(" Array datatype rank is %d \n", array_rank_out);
+    printf(" Array dimensions are %d x %d \n", (int)adims_out[0],   
+                                               (int)adims_out[1]);
+
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Fclose(file);
+ 
+    return 0;
+}     
+      </pre>
+    </td>
+  </tr>
+</table>
+</center>
+
+
+
+    <h2>11. Sharing Datatypes among Datasets</h2>
+
+    <p>If a file has lots of datasets which have a common datatype,
+      then the file could be made smaller by having all the datasets
+      share a single datatype.  Instead of storing a copy of the 
+      datatype in each dataset object header, a single datatype is stored
+      and the object headers point to it.  The space savings is
+      probably only significant for datasets with a compound datatype,
+      since the atomic datatypes can be described with just a few
+      bytes anyway.
+
+    <p>To create a bunch of datasets that share a single datatype
+      just create the datasets with a committed (named) datatype.
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example: Shared Datatypes</h4></caption>
+	  <tr>
+	    <td>
+	      <p>To create two datasets that share a common datatype
+		one just commits the datatype, giving it a name, and
+		then uses that datatype to create the datasets.
+
+	      <p><code><pre>
+hid_t t1 = ...some transient type...;
+H5Tcommit (file, "shared_type", t1);
+hid_t dset1 = H5Dcreate (file, "dset1", t1, space, H5P_DEFAULT);
+hid_t dset2 = H5Dcreate (file, "dset2", t1, space, H5P_DEFAULT);
+	      </code></pre>
+
+	      <p>And to create two additional datasets later which
+		share the same type as the first two datasets:
+
+	      <p><code><pre>
+hid_t dset1 = H5Dopen (file, "dset1");
+hid_t t2 = H5Dget_type (dset1);
+hid_t dset3 = H5Dcreate (file, "dset3", t2, space, H5P_DEFAULT);
+hid_t dset4 = H5Dcreate (file, "dset4", t2, space, H5P_DEFAULT);
+	      </code></pre>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+
+
+
+    <a name="Datatypes-DataConversion">
+    <h2>12. Data Conversion</h2>
+    </a>
+
+    <p>The library is capable of converting data from one type to
+      another and does so automatically when reading or writing the
+      raw data of a dataset, attribute data, or fill values. The
+      application can also change the type of data stored in an array.
+
+    <p>In order to insure that data conversion exceeds disk I/O rates,
+      common data conversion paths can be hand-tuned and optimized for
+      performance.  The library contains very efficient code for
+      conversions between most native datatypes and a few non-native
+      datatypes, but if a hand-tuned conversion function is not
+      available, then the library falls back to a slower but more
+      general conversion function.  The application programmer can
+      define additional conversion functions when the libraries
+      repertoire is insufficient. In fact, if an application does
+      define a conversion function which would be of general interest,
+      we request that the function be submitted to the HDF5
+      development team for inclusion in the library.
+
+    <p><b>Note:</b> The HDF5 library contains a deliberately limited
+      set of conversion routines.  It can convert from one integer
+      format to another, from one floating point format to another,
+      and from one struct to another.  It can also perform byte
+      swapping when the source and destination types are otherwise the
+      same.  The library does not contain any functions for converting
+      data between integer and floating point formats.  It is
+      anticipated that some users will find it necessary to develop
+      float to integer or integer to float conversion functions at the
+      application level; users are invited to submit those functions
+      to be considered for inclusion in future versions of the
+      library.
+
+    <p>A conversion path contains a source and destination datatype
+      and each path contains a <em>hard</em> conversion function
+      and/or a <em>soft</em> conversion function.  The only difference
+      between hard and soft functions is the way in which the library
+      chooses which function applies: A hard function applies to a
+      specific conversion path while a soft function may apply to
+      multiple paths.  When both hard and soft functions apply to a
+      conversion path, then the hard function is favored and when
+      multiple soft functions apply, the one defined last is favored.
+
+    <p>A data conversion function is of type <code>H5T_conv_t</code>,
+	which is defined as follows:
+
+<dir><pre><em>typedef</em> herr_t (<em>*H5T_conv_t</em>) (hid_t <em>src_id</em>, 
+                              hid_t <em>dst_id</em>, 
+                              H5T_cdata_t *<em>cdata</em>,
+                              hsize_t <em>nelmts</em>, 
+                              size_t <em>buf_stride</em>, 
+                              size_t <em>bkg_stride</em>, 
+                              void *<em>buffer</em>, 
+                              void *<em>bkg_buffer</em>,
+                              hid_t <em>dset_xfer_plist</em>);</pre></dir>
+      
+
+    <p>The conversion function is called with 
+      the source and destination datatypes (<em>src_id</em> and 
+          <em>dst_id</em>), 
+      the path-constant data struct (<em>cdata</em>), 
+      the number of instances of the datatype to convert (<em>nelmts</em>), 
+      a conversion buffer (<em>buffer</em>) which initially contains 
+          an array of data having the source type and on return will 
+          contain an array of data having the destination type, 
+      a temporary or background buffer (<em>bkg_buffer</em>, 
+          see description of <code>H5T_BKG_YES</code> below),
+      conversion and background buffer strides (<em>buf_stride</em> and
+          <em>bkg_stride</em>) that indicate what data is to be converted, and
+      a dataset transfer properties list (<em>dset_xfer_plist</em>).  
+
+     <p><em>buf_stride</em> and <em>bkg_stride</em> are in bytes and
+      are related to the size of the datatype.
+      If every data element is to be converted, the parameter's value 
+      is equal to the size of the datatype; 
+      if every other data element is to be converted, the parameter's value
+      is equal to twice the size of the datatype; etc.
+
+     <p><em>dset_xfer_plist</em> may contain properties that are passed
+      to the read and write calls.  
+      This parameter is currently used only with variable-length data.
+
+     <p><em>bkg_buffer</em> and <em>bkg_stride</em> are used only with 
+      compound datatypes.
+
+     <p>The path-constant data struct, <code>H5T_cdata_t</code>, 
+      is declared as follows:
+        
+<dir><pre><em>typedef</em> struct <em>*H5T_cdata_t</em> (H5T_cmd_t <em>command</em>, 
+                             H5T_bkg_t <em>need_bkg</em>, 
+                             hbool_t *<em>recalc</em>,
+                             void *<em>priv</em>)</pre></dir>
+
+    <p>The <code>command</code> field of the <em>cdata</em> argument
+      determines what happens within the conversion function.  It's
+      values can be:
+
+    <dl>
+      <dt><code>H5T_CONV_INIT</code>
+      <dd>This command is to hard conversion functions when they're
+	registered or soft conversion functions when the library is
+	determining if a conversion can be used for a particular path.
+	The <em>src_type</em> and <em>dst_type</em> are the end-points
+	of the path being queried and <em>cdata</em> is all zero.  The
+	library should examine the source and destination types and
+	return zero if the conversion is possible and negative
+	otherwise (hard conversions need not do this since they've
+	presumably been registered only on paths they support).  If
+	the conversion is possible the library may allocate and
+	initialize private data and assign the pointer to the
+	<code>priv</code> field of <em>cdata</em> (or private data can
+	be initialized later). It should also initialize the
+	<code>need_bkg</code> field described below.  The <em>buf</em>
+	and <em>background</em> pointers will be null pointers.
+
+	<br><br>
+      <dt><code>H5T_CONV_CONV</code>
+      <dd>This command indicates that data points should be converted.
+	The conversion function should initialize the
+	<code>priv</code> field of <em>cdata</em> if it wasn't
+	initialize during the <code>H5T_CONV_INIT</code> command and
+	then convert <em>nelmts</em> instances of the
+	<em>src_type</em> to the <em>dst_type</em>. The
+	<em>buffer</em> serves as both input and output.  The
+	<em>background</em> buffer is supplied according to the value
+	of the <code>need_bkg</code> field of <em>cdata</em> (the
+	values are described below).
+
+	<br><br>
+      <dt><code>H5T_CONV_FREE</code>
+      <dd>The conversion function is about to be removed from some
+	path and the private data (the
+	<code><em>cdata</em>->priv</code> pointer) should be freed and
+	set to null.  All other pointer arguments are null, the
+	<em>src_type</em> and <em>dst_type</em> are invalid
+	(negative), and the <em>nelmts</em> argument is zero.
+
+	<br><br>
+      <dt><em>Others...</em>
+      <dd>Other commands might be implemented later and conversion
+	functions that don't support those commands should return a
+	negative value.
+    </dl>
+
+
+    <p>Whether a background buffer is supplied to a conversion
+      function, and whether the background buffer is initialized
+      depends on the value of <code><em>cdata</em>->need_bkg</code>
+      which the conversion function should have initialized during the
+      H5T_CONV_INIT command.  It can have one of these values:
+
+    <dl>
+      <dt><code>H5T_BKG_NONE</code>
+      <dd>No background buffer will be supplied to the conversion
+	function. This is the default.
+
+	<br><br>
+      <dt><code>H5T_BKG_TEMP</code>
+      <dd>A background buffer will be supplied but it will not be
+	initialized. This is useful for those functions requiring some
+	extra buffer space as the buffer can probably be allocated
+	more efficiently by the library (the application can supply
+	the buffer as part of the dataset transfer property list).
+
+	<br><br>
+      <dt><code>H5T_BKG_YES</code>
+      <dd>An initialized background buffer is passed to the conversion
+	function.  The buffer is initialized with the current values
+	of the destination for the data which is passed in through the
+	<em>buffer</em> argument. It can be used to "fill in between
+	the cracks".  For instance, if the destination type is a
+	compound datatype and we are initializing only part of the
+	compound datatype from the source type then the background
+	buffer can be used to initialize the other part of the
+	destination.
+    </dl>
+
+    <p>The <code>recalc</code> field of <em>cdata</em> is set when the 
+      conversion path table changes. It can be used by conversion
+      function that cache other conversion paths so they know when
+      their cache needs to be recomputed.
+
+
+    <p>Once a conversion function is written it can be registered and
+      unregistered with these functions:
+
+    <dl>
+      <dt><code>herr_t H5Tregister(H5T_pers_t <em>pers</em>, const
+	  char *<em>name</em>, hid_t <em>src_type</em>, hid_t
+	  <em>dest_type</em>, H5T_conv_t <em>func</em>)</code>
+      <dd>Once a conversion function is written, the library must be
+	notified so it can be used.  The function can be registered as
+	a hard (<code>H5T_PERS_HARD</code>) or soft
+	(<code>H5T_PERS_SOFT</code>) conversion depending on the value
+	of <em>pers</em>, displacing any previous conversions for all
+	applicable paths.  The <em>name</em> is used only for
+	debugging but must be supplied.  If <em>pers</em> is
+	<code>H5T_PERS_SOFT</code> then only the type classes of the
+	<em>src_type</em> and <em>dst_type</em> are used. For
+	instance, to register a general soft conversion function that
+	can be applied to any integer to integer conversion one could
+	say: <code>H5Tregister(H5T_PERS_SOFT, "i2i", H5T_NATIVE_INT,
+	H5T_NATIVE_INT, convert_i2i)</code>.  One special conversion
+	path called the "no-op" conversion path is always defined by
+	the library and used as the conversion function when no data
+	transformation is necessary. The application can redefine this 
+	path by specifying a new hard conversion function with a
+	negative value for both the source and destination datatypes, 
+	but the library might not call the function under certain
+	circumstances.
+
+	<br><br>
+      <dt><code>herr_t H5Tunregister (H5T_pers_t <em>pers</em>, const
+	  char *<em>name</em>, hid_t <em>src_type</em>, hid_t
+	  <em>dest_type</em>, H5T_conv_t <em>func</em>)</code>
+      <dd>Any conversion path or function that matches the critera
+	specified by a call to this function is removed from the type
+	conversion table. All fields have the same interpretation as
+	for <code>H5Tregister()</code> with the added feature that any
+	(or all) may be wild cards.  The
+	<code>H5T_PERS_DONTCARE</code> constant should be used to
+	indicate a wild card for the <em>pers</em> argument. The wild
+	card <em>name</em> is the null pointer or empty string, the
+	wild card for the <em>src_type</em> and <em>dest_type</em>
+	arguments is any negative value, and the wild card for the
+	<em>func</em> argument is the null pointer.  The special no-op 
+	conversion path is never removed by this function.
+    </dl>
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example: A conversion
+	      function</h4></caption>
+	  <tr>
+	    <td>
+	      <p>Here's an example application-level function that
+		converts Cray <code>unsigned short</code> to any other
+		16-bit unsigned big-endian integer.  A cray
+		<code>short</code> is a big-endian value which has 32
+		bits of precision in the high-order bits of a 64-bit
+		word.
+
+	      <p><code><pre>
+ 1 typedef struct {
+ 2     size_t dst_size;
+ 3     int direction;
+ 4 } cray_ushort2be_t;
+ 5 
+ 6 herr_t
+ 7 cray_ushort2be (hid_t src, hid_t dst,
+ 8                 H5T_cdata_t *cdata, hsize_t nelmts, 
+ 9                 size_t buf_str, size_t bkg_str, void *buf, 
+10                 const void *background, hid_t plist)
+11 {
+12     unsigned char *src = (unsigned char *)buf;
+13     unsigned char *dst = src;
+14     cray_ushort2be_t *priv = NULL;
+15 
+16     switch (cdata-&gt;command) {
+17     case H5T_CONV_INIT:
+18         /*
+19          * We are being queried to see if we handle this
+20          * conversion.  We can handle conversion from
+21          * Cray unsigned short to any other big-endian
+22          * unsigned integer that doesn't have padding.
+23          */
+24         if (!H5Tequal (src, H5T_CRAY_USHORT) ||
+25             H5T_ORDER_BE != H5Tget_order (dst) ||
+26             H5T_SGN_NONE != H5Tget_signed (dst) ||
+27             8*H5Tget_size (dst) != H5Tget_precision (dst)) {
+28             return -1;
+29         }
+30 
+31         /*
+32          * Initialize private data.  If the destination size
+33          * is larger than the source size, then we must
+34          * process the elements from right to left.
+35          */
+36         cdata-&gt;priv = priv = malloc (sizeof(cray_ushort2be_t));
+37         priv-&gt;dst_size = H5Tget_size (dst);
+38         if (priv-&gt;dst_size&gt;8) {
+39             priv-&gt;direction = -1;
+40         } else {
+41             priv-&gt;direction = 1;
+42         }
+43         break;
+44 
+45     case H5T_CONV_FREE:
+46         /*
+47          * Free private data.
+48          */
+49         free (cdata-&gt;priv);
+50         cdata-&gt;priv = NULL;
+51         break;
+52 
+53     case H5T_CONV_CONV:
+54         /*
+55          * Convert each element, watch out for overlap src
+56          * with dst on the left-most element of the buffer.
+57          */
+58         priv = (cray_ushort2be_t *)(cdata-&gt;priv);
+59         if (priv-&gt;direction&lt;0) {
+60             src += (nelmts - 1) * 8;
+61             dst += (nelmts - 1) * dst_size;
+62         }
+63         for (i=0; i&lt;n; i++) {
+64             if (src==dst && dst_size&lt;4) {
+65                 for (j=0; j&lt;dst_size; j++) {
+66                     dst[j] = src[j+4-dst_size];
+67                 }
+68             } else {
+69                 for (j=0; j&lt;4 && j&lt;dst_size; j++) {
+70                     dst[dst_size-(j+1)] = src[3-j];
+71                 }
+72                 for (j=4; j&lt;dst_size; j++) {
+73                     dst[dst_size-(j+1)] = 0;
+74                 }
+75             }
+76             src += 8 * direction;
+77             dst += dst_size * direction;
+78         }
+79         break;
+80 
+81     default:
+82         /*
+83          * Unknown command.
+84          */
+85         return -1;
+86     }
+87     return 0;
+88 }
+	      </pre></code>
+
+	      <p>The <em>background</em> argument is ignored since
+		it's generally not applicable to atomic datatypes.
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom><h4>Example: Soft
+	      Registration</h4></caption>
+	  <tr>
+	    <td>
+	      <p>The convesion function described in the previous
+		example applies to more than one conversion path.
+		Instead of enumerating all possible paths, we register
+		it as a soft function and allow it to decide which
+		paths it can handle.
+
+	      <p><code><pre>
+H5Tregister(H5T_PERS_SOFT, "cus2be",
+            H5T_NATIVE_INT, H5T_NATIVE_INT,
+            cray_ushort2be);
+	      </pre></code>
+
+	      <p>This causes it to be consulted for any conversion
+		from an integer type to another integer type.  The
+		first argument is just a short identifier which will
+		be printed with the datatype conversion statistics.
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+
+    <p><b>NOTE:</b> The idea of a master soft list and being able to
+      query conversion functions for their abilities tries to overcome
+      problems we saw with AIO.  Namely, that there was a dichotomy
+      between generic conversions and specific conversions that made
+      it very difficult to write a conversion function that operated
+      on, say, integers of any size and order as long as they don't
+      have zero padding.  The AIO mechanism required such a function
+      to be explicitly registered (like
+      <code>H5Tregister_hard()</code>) for each an every possible
+      conversion path whether that conversion path was actually used
+      or not.</p>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+<!-- Created: Thu Dec  4 14:57:32 EST 1997 -->
+<!-- hhmts start -->
+Last modified: 2 August 2001 
+<!-- hhmts end -->
+
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/DatatypesEnum.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/DatatypesEnum.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/DatatypesEnum.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,926 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Enumeration Data Types in the Data Type Interface (H5T)</title>
+  </head>
+
+  <body bgcolor="#FFFFFF">
+
+
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+   <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+   <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+   <a href="index.html">Other HDF5 documents and links</a>&nbsp;<br>
+   <!--
+   <a href="Glossary.html">Glossary</a><br>
+   -->
+</td>
+<td valign=top align=right>
+   And in this document, the 
+   <a href="H5.user.html">HDF5 User's Guide</a>:&nbsp;&nbsp;&nbsp;&nbsp;
+      <a href="Files.html">Files</a>&nbsp;&nbsp;
+      <br>
+      <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+      <a href="Datatypes.html">Data Types</a>&nbsp;&nbsp;
+      <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+      <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+      <a href="References.html">References</a>&nbsp;&nbsp;
+      <br>
+      <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+      <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+      <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+      <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+      <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+      <br>
+      <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+      <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+      <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+      <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+      <a href="Ragged.html">Ragged Arrays</a>&nbsp;&nbsp;
+<!--
+<hr>
+And in this document, the 
+<a href="H5.user.html">HDF5 User's Guide</a>:&nbsp;&nbsp;&nbsp;&nbsp;
+      <a href="Attributes.html">H5A</a>&nbsp;&nbsp;
+      <a href="Datasets.html">H5D</a>&nbsp;&nbsp;
+      <a href="Errors.html">H5E</a>&nbsp;&nbsp;
+      <a href="Files.html">H5F</a>&nbsp;&nbsp;
+      <a href="Groups.html">H5G</a>&nbsp;&nbsp;
+      <a href="Properties.html">H5P</a>&nbsp;&nbsp;
+      <a href="References.html">H5R & H5I</a>&nbsp;&nbsp;
+      <a href="Ragged.html">H5RA</a>&nbsp;&nbsp;
+      <a href="Dataspaces.html">H5S</a>&nbsp;&nbsp;
+      <a href="Datatypes.html">H5T</a>&nbsp;&nbsp;
+      <a href="Filters.html">H5Z</a>&nbsp;&nbsp;
+      <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+      <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+      <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+      <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+      <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+-->
+</td></tr>
+</table>
+</center>
+<hr>
+
+
+    <h1>The Data Type Interface (H5T) <font size=-1><i>(contitnued)</i></font></h1>
+
+    <p align=right><font size=-1><i>
+    (Return to <a href="Datatypes.html#Datatypes_Enum">Data Types Interface (H5T)</a>.)
+    </font></i>
+
+    <h2>7. Enumeration Data Types</h2>
+
+    <h3>7.1. Introduction</h2>
+
+    <p>An HDF enumeration data type is a 1:1 mapping between a set of
+      symbols and a set of integer values, and an order is imposed on
+      the symbols by their integer values.  The symbols are passed
+      between the application and library as character strings and all
+      the values for a particular enumeration type are of the same
+      integer type, which is not necessarily a native type.
+
+    <h3>7.2. Creation</h2>
+    
+    <p>Creation of an enumeration data type resembles creation of a
+      compound data type: first an empty enumeration type is created,
+      then members are added to the type, then the type is optionally
+      locked.
+
+    <dl>
+      <dt><code>hid_t H5Tcreate(H5T_class_t <em>type_class</em>,
+	  size_t <em>size</em>)</code>
+      <dd>This function creates a new empty enumeration data type based 
+	on a native signed integer type. The first argument is the
+	constant <code>H5T_ENUM</code> and the second argument is the
+	size in bytes of the native integer on which the enumeration
+	type is based. If the architecture does not support a native
+	signed integer of the specified size then an error is
+	returned.
+
+	<pre>
+/* Based on a native signed short */
+hid_t hdf_en_colors = H5Tcreate(H5T_ENUM, sizeof(short));</pre>
+
+
+      <dt><code>hid_t H5Tenum_create(hid_t <em>base</em>)</code>
+      <dd>This function creates a new empty enumeration data type based 
+	on some integer data type <em>base</em> and is a
+	generalization of the <code>H5Tcreate()</code> function.  This 
+	function is useful when creating an enumeration type based on
+	some non-native integer data type, but it can be used for
+	native types as well.
+
+	<pre>
+/* Based on a native unsigned short */
+hid_t hdf_en_colors_1 = H5Tenum_create(H5T_NATIVE_USHORT);
+
+/* Based on a MIPS 16-bit unsigned integer */
+hid_t hdf_en_colors_2 = H5Tenum_create(H5T_MIPS_UINT16);
+
+/* Based on a big-endian 16-bit unsigned integer */
+hid_t hdf_en_colors_3 = H5Tenum_create(H5T_STD_U16BE);</pre>
+
+
+      <dt><code>herr_t H5Tenum_insert(hid_t <em>etype</em>, const char
+	  *<em>symbol</em>, void *<em>value</em>)</code>
+      <dd>Members are inserted into the enumeration data type
+	<em>etype</em> with this function.  Each member has a symbolic 
+	name <em>symbol</em> and some integer representation
+	<em>value</em>.  The <em>value</em> argument must point to a value
+	of the same data type as specified when the enumeration type
+	was created. The order of member insertion is not important
+	but all symbol names and values must be unique within a
+	particular enumeration type.
+
+	<pre>
+short val;
+H5Tenum_insert(hdf_en_colors, "RED",   (val=0,&amp;val));
+H5Tenum_insert(hdf_en_colors, "GREEN", (val=1,&amp;val));
+H5Tenum_insert(hdf_en_colors, "BLUE",  (val=2,&amp;val));
+H5Tenum_insert(hdf_en_colors, "WHITE", (val=3,&amp;val));
+H5Tenum_insert(hdf_en_colors, "BLACK", (val=4,&amp;val));</pre>
+
+
+      <dt><code>herr_t H5Tlock(hid_t <em>etype</em>)</code>
+      <dd>This function locks a data type so it cannot be modified or
+	freed unless the entire HDF5 library is closed.  Its use is
+	completely optional but using it on an application data type
+	makes that data type act like a predefined data type.
+
+	<pre>
+H5Tlock(hdf_en_colors);</pre>
+
+    </dl>
+
+    <h3>7.3. Integer Operations</h2>
+
+    <p>Because an enumeration data type is derived from an integer
+      data type, any operation which can be performed on integer data
+      types can also be performed on enumeration data types.  This
+      includes:
+
+    <p>
+      <center>
+	  <table>
+	    <tr>
+	      <td><code>H5Topen()</code></td>
+	      <td><code>H5Tcreate()</code></td>
+	      <td><code>H5Tcopy()</code></td>
+	      <td><code>H5Tclose()</code></td>
+	    </tr><tr>
+	      <td><code>H5Tequal()</code></td>
+	      <td><code>H5Tlock()</code></td>
+	      <td><code>H5Tcommit()</code></td>
+	      <td><code>H5Tcommitted()</code></td>
+	    </tr><tr>
+	      <td><code>H5Tget_class()</code></td>
+	      <td><code>H5Tget_size()</code></td>
+	      <td><code>H5Tget_order()</code></td>
+	      <td><code>H5Tget_pad()</code></td>
+	    </tr><tr>
+	      <td><code>H5Tget_precision()</code></td>
+	      <td><code>H5Tget_offset()</code></td>
+	      <td><code>H5Tget_sign()</code></td>
+	      <td><code>H5Tset_size()</code></td>
+	    </tr><tr>
+	      <td><code>H5Tset_order()</code></td>
+	      <td><code>H5Tset_precision()</code></td>
+	      <td><code>H5Tset_offset()</code></td>
+	      <td><code>H5Tset_pad()</code></td>
+	    </tr><tr>
+	      <td><code>H5Tset_sign()</code></td>
+	    </tr>
+	  </table>
+      </center>
+
+    <p>In addition, the new function <code>H5Tget_super()</code> will
+      be defined for all data types that are derived from existing
+      types (currently just enumeration types).
+
+    <dl>
+      <dt><code>hid_t H5Tget_super(hid_t <em>type</em>)</code>
+      <dd>Return the data type from which <em>type</em> is
+	derived. When <em>type</em> is an enumeration data type then
+	the returned value will be an integer data type but not
+	necessarily a native type.  One use of this function would be
+	to create a new enumeration type based on the same underlying
+	integer type and values but with possibly different symbols.
+
+	<pre>
+hid_t itype = H5Tget_super(hdf_en_colors);
+hid_t hdf_fr_colors = H5Tenum_create(itype);
+H5Tclose(itype);
+
+short val;
+H5Tenum_insert(hdf_fr_colors, "ouge",  (val=0,&amp;val));
+H5Tenum_insert(hdf_fr_colors, "vert",  (val=1,&amp;val));
+H5Tenum_insert(hdf_fr_colors, "bleu",  (val=2,&amp;val));
+H5Tenum_insert(hdf_fr_colors, "blanc", (val=3,&amp;val));
+H5Tenum_insert(hdf_fr_colors, "noir",  (val=4,&amp;val));
+H5Tlock(hdf_fr_colors);</pre>
+    </dl>
+
+    <h3>7.4. Type Functions</h2>
+
+    <p>A small set of functions is available for querying properties
+      of an enumeration type.  These functions are likely to be used
+      by browsers to display data type information.
+
+    <dl>
+      <dt><code>int H5Tget_nmembers(hid_t <em>etype</em>)</code>
+      <dd>When given an enumeration data type <em>etype</em> this
+	function returns the number of members defined for that
+	type. This function is already implemented for compound data
+	types.
+
+	<br><br>
+      <dt><code>char *H5Tget_member_name(hid_t <em>etype</em>, unsigned
+	  <em>membno</em>)</code>
+      <dd>Given an enumeration data type <em>etype</em> this function
+	returns the symbol name for the member indexed by
+	<em>membno</em>. Members are numbered from zero to
+	<em>N</em>-1 where <em>N</em> is the return value from
+	<code>H5Tget_nmembers()</code>. The members are stored in no
+	particular order.  This function is already implemented for
+	compound data types.  If an error occurs then the null pointer 
+	is returned.  The return value should be freed by calling
+	<code>free()</code>.
+
+	<br><br>
+      <dt><code>herr_t H5Tget_member_value(hid_t <em>etype</em>, unsigned
+	  <em>membno</em>, void *<em>value</em>/*out*/)</code>
+      <dd>Given an enumeration data type <em>etype</em> this function
+	returns the value associated with the member indexed by
+	<em>membno</em> (as described for
+	<code>H5Tget_member_name()</code>). The value returned
+	is in the domain of the underlying integer
+	data type which is often a native integer type. The
+	application should ensure that the memory pointed to by
+	<em>value</em> is large enough to contain the result (the size 
+	can be obtained by calling <code>H5Tget_size()</code> on
+	either the enumeration type or the underlying integer type
+	when the type is not known by the C compiler.
+
+	<pre>
+int n = H5Tget_nmembers(hdf_en_colors);
+unsigned u;
+for (u=0; u&lt;(unsigned)n; u++) {
+    char *symbol = H5Tget_member_name(hdf_en_colors, u);
+    short val;
+    H5Tget_member_value(hdf_en_colors, u, &amp;val);
+    printf("#%u %20s = %d\n", u, symbol, val);
+    free(symbol);
+}</pre>
+
+	  <p>
+          Output:
+	  <pre>
+#0                BLACK = 4
+#1                 BLUE = 2
+#2                GREEN = 1
+#3                  RED = 0
+#4                WHITE = 3</pre>
+    </dl>
+
+    <h3>7.5. Data Functions</h2>
+
+    <p>In addition to querying about the enumeration type properties,
+      an application may want to make queries about enumerated
+      data. These functions perform efficient mappings between symbol
+      names and values.
+
+    <dl>
+      <dt><code>herr_t H5Tenum_valueof(hid_t <em>etype</em>, const char 
+	  *<em>symbol</em>, void *<em>value</em>/*out*/)</code>
+      <dd>Given an enumeration data type <em>etype</em> this function
+      returns through <em>value</em> the bit pattern associated with
+      the symbol name <em>symbol</em>.  The <em>value</em> argument
+      should point to memory which is large enough to hold the result, 
+      which is returned as the underlying integer data type specified
+      when the enumeration type was created, often a native integer
+      type.
+
+	<br><br>
+      <dt><code>herr_t H5Tenum_nameof(hid_t <em>etype</em>, void
+	  *<em>value</em>, char *<em>symbol</em>, size_t
+	  <em>size</em>)</code>
+      <dd>This function translates a bit pattern pointed to by
+	<em>value</em> to a symbol name according to the mapping
+	defined in the enumeration data type <em>etype</em> and stores
+	at most <em>size</em> characters of that name (counting the
+	null terminator) to the <em>symbol</em> buffer. If the name is 
+	longer than the result buffer then the result is not null
+	terminated and the function returns failure. If <em>value</em> 
+	points to a bit pattern which is not in the domain of the
+	enumeration type then the first byte of the <em>symbol</em>
+	buffer is set to zero and the function fails.
+
+	<pre>
+short data[1000] = {4, 2, 0, 0, 5, 1, ...};
+int i;
+char symbol[32];
+
+for (i=0; i<1000; i++) {
+    if (H5Tenum_nameof(hdf_en_colors, data+i, symbol,
+                       sizeof symbol))&lt;0) {
+        if (symbol[0]) {
+            strcpy(symbol+sizeof(symbol)-4, "...");
+        } else {
+            strcpy(symbol, "UNKNOWN");
+        }
+    }
+    printf("%d %s\n", data[i], symbol);
+}
+printf("}\n");</pre>
+
+	  <p>
+          Output:
+	  <pre>
+
+4 BLACK
+2 BLUE
+0 RED
+0 RED
+5 UNKNOWN
+1 GREEN
+...</pre>
+    </dl>
+
+    <h3>7.6. Conversion</h2>
+
+    <p>Enumerated data can be converted from one type to another
+      provided the destination enumeration type contains all the
+      symbols of the source enumeration type. The conversion operates
+      by matching up the symbol names of the source and destination
+      enumeration types to build a mapping from source value to
+      destination value.  For instance, if we are translating from an
+      enumeration type that defines a sequence of integers as the
+      values for the colors to a type that defines a different bit for 
+      each color then the mapping might look like this:
+
+    <p><img src="EnumMap.gif" alt="Enumeration Mapping">
+
+    <p>That is, a source value of <code>2</code> which corresponds to
+      <code>BLUE</code> would be mapped to <code>0x0004</code>. The
+      following code snippet builds the second data type, then
+      converts a raw data array from one data type to another, and
+      then prints the result.
+
+      <pre>
+/* Create a new enumeration type */
+short val;
+hid_t bits = H5Tcreate(H5T_ENUM, sizeof val);
+H5Tenum_insert(bits, "RED",   (val=0x0001,&amp;val));
+H5Tenum_insert(bits, "GREEN", (val=0x0002,&amp;val));
+H5Tenum_insert(bits, "BLUE",  (val=0x0004,&amp;val));
+H5Tenum_insert(bits, "WHITE", (val=0x0008,&amp;val));
+H5Tenum_insert(bits, "BLACK", (val=0x0010,&amp;val));
+
+/* The data */
+short data[6] = {1, 4, 2, 0, 3, 5};
+
+/* Convert the data from one type to another */
+H5Tconvert(hdf_en_colors, bits, 5, data, NULL);
+
+/* Print the data */
+for (i=0; i&lt;6; i++) {
+    printf("0x%04x\n", (unsigned)(data[i]));
+}</pre>
+
+        <p>
+        Output:
+	<pre>
+
+0x0002
+0x0010
+0x0004
+0x0001
+0x0008
+0xffff</pre>
+
+    <p>If the source data stream contains values which are not in the
+      domain of the conversion map then an overflow exception is
+      raised within the library, causing the application defined
+      overflow handler to be invoked (see
+      <code>H5Tset_overflow()</code>). If no overflow handler is
+      defined then all bits of the destination value will be set.
+
+    <p>The HDF library will not provide conversions between enumerated 
+      data and integers although the application is free to do so
+      (this is a policy we apply to all classes of HDF data
+      types). However, since enumeration types are derived from
+      integer types it is permissible to treat enumerated data as
+      integers and perform integer conversions in that context.
+
+    <h3>7.7. Symbol Order</h2>
+
+    <p>Symbol order is determined by the integer values associated
+      with each symbol.  When the integer data type is a native type,
+      testing the relative order of two symbols is an easy process:
+      simply compare the values of the symbols.  If only the symbol
+      names are available then the values must first be determined by
+      calling <code>H5Tenum_valueof()</code>.
+
+      <pre>
+short val1, val2;
+H5Tenum_valueof(hdf_en_colors, "WHITE", &amp;val1);
+H5Tenum_valueof(hdf_en_colors, "BLACK", &amp;val2);
+if (val1 &lt; val2) ...</pre>
+
+    <p>When the underlying integer data type is not a native type then 
+      the easiest way to compare symbols is to first create a similar
+      enumeration type that contains all the same symbols but has a
+      native integer type (HDF type conversion features can be used to
+      convert the non-native values to native values). Once we have a
+      native type we can compare symbol order as just described.  If
+      <code>foreign</code> is some non-native enumeration type then a
+      native type can be created as follows:
+
+      <pre>
+int n = H5Tget_nmembers(foreign);
+hid_t itype = H5Tget_super(foreign);
+void *val = malloc(n * MAX(H5Tget_size(itype), sizeof(int)));
+char *name = malloc(n * sizeof(char*));
+unsigned u;
+
+/* Get foreign type information */
+for (u=0; u&lt;(unsigned)n; u++) {
+    name[u] = H5Tget_member_name(foreign, u);
+    H5Tget_member_value(foreign, u,
+                        (char*)val+u*H5Tget_size(foreign));
+}
+
+/* Convert integer values to new type */
+H5Tconvert(itype, H5T_NATIVE_INT, n, val, NULL);
+
+/* Build a native type */
+hid_t native = H5Tenum_create(H5T_NATIVE_INT);
+for (i=0; i&lt;n; i++) {
+    H5Tenum_insert(native, name[i], ((int*)val)[i]);
+    free(name[i]);
+}
+free(name);
+free(val);</pre>
+
+    <p>It is also possible to convert enumerated data to a new type
+      that has a different order defined for the symbols.  For
+      instance, we can define a new type, <code>reverse</code> that
+      defines the same five colors but in the reverse order.
+
+      <pre>
+short val;
+int i;
+char sym[8];
+short data[5] = {0, 1, 2, 3, 4};
+
+hid_t reverse = H5Tenum_create(H5T_NATIVE_SHORT);
+H5Tenum_insert(reverse, "BLACK", (val=0,&amp;val));
+H5Tenum_insert(reverse, "WHITE", (val=1,&amp;val));
+H5Tenum_insert(reverse, "BLUE",  (val=2,&amp;val));
+H5Tenum_insert(reverse, "GREEN", (val=3,&amp;val));
+H5Tenum_insert(reverse, "RED",   (val=4,&amp;val));
+
+/* Print data */
+for (i=0; i<5; i++) {
+    H5Tenum_nameof(hdf_en_colors, data+i, sym, sizeof sym);
+    printf ("%d %s\n", data[i], sym);
+}
+
+puts("Converting...");
+H5Tconvert(hdf_en_colors, reverse, 5, data, NULL);
+
+/* Print data */
+for (i=0; i<5; i++) {
+    H5Tenum_nameof(reverse, data+i, sym, sizeof sym);
+    printf ("%d %s\n", data[i], sym);
+}</pre>
+	
+      <p>
+      Output:
+      <pre>
+0 RED
+1 GREEN
+2 BLUE
+3 WHITE
+4 BLACK
+Converting...
+4 RED
+3 GREEN
+2 BLUE
+1 WHITE
+0 BLACK</pre>
+
+    <h3>7.8. Equality</h2>
+
+    <p>The order that members are inserted into an enumeration type is 
+      unimportant; the important part is the associations between the
+      symbol names and the values.  Thus, two enumeration data types
+      will be considered equal if and only if both types have the same
+      symbol/value associations and both have equal underlying integer
+      data types. Type equality is tested with the
+      <code>H5Tequal()</code> function.
+
+    <h3>7.9. Interacting with C's <code>enum</code> Type</h2>
+
+    <p>Although HDF enumeration data types are similar to C
+      <code>enum</code> data types, there are some important
+      differences:
+
+    <p>
+      <center>
+	<table border width="80%">
+	  <tr>
+	    <th>Difference</th>
+	    <th>Motivation/Implications</th>
+	  </tr>
+
+	  <tr>
+	    <td valign=top>Symbols are unquoted in C but quoted in
+	      HDF.</td>
+	    <td valign=top>This allows the application to manipulate
+	      symbol names in ways that are not possible with C.</td>
+	  </tr>
+
+	  <tr>
+	    <td valign=top>The C compiler automatically replaces all
+	      symbols with their integer values but HDF requires
+	      explicit calls to do the same.</td>
+	    <td valign=top>C resolves symbols at compile time while
+	      HDF resolves symbols at run time.</td>
+	  </tr>
+
+	  <tr>
+	    <td valign=top>The mapping from symbols to integers is
+	      <em>N</em>:1 in C but 1:1 in HDF.</td>
+	    <td valign=top>HDF can translate from value to name
+	      uniquely and large <code>switch</code> statements are
+	      not necessary to print values in human-readable
+	      format.</td>
+	  </tr>
+
+	  <tr>
+	    <td valign=top>A symbol must appear in only one C
+	      <code>enum</code> type but may appear in multiple HDF
+	      enumeration types.</td>
+	    <td valign=top>The translation from symbol to value in HDF 
+	      requires the data type to be specified while in C the
+	      data type is not necessary because it can be inferred
+	      from the symbol.</td>
+	  </tr>
+
+	  <tr>
+	    <td valign=top>The underlying integer value is always a
+	      native integer in C but can be a foreign integer type in 
+	      HDF.</td>
+	    <td valign=top>This allows HDF to describe data that might 
+	      reside on a foreign architecture, such as data stored in 
+	      a file.</td>
+	  </tr>
+
+	  <tr>
+	    <td valign=top>The sign and size of the underlying integer 
+	      data type is chosen automatically by the C compiler but
+	      must be fully specified with HDF.</td>
+	    <td valign=top>Since HDF doesn't require finalization of a 
+	      data type, complete specification of the type must be
+	      supplied before the type is used.  Requiring that
+	      information at the time of type creation was a design
+	      decision to simplify the library.</td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>The examples below use the following C data types:
+
+    <p>
+      <table width="90%" bgcolor="white">
+	<tr>
+	  <td>
+	    <code><pre>
+/* English color names */
+typedef enum {
+    RED,
+    GREEN,
+    BLUE,
+    WHITE,
+    BLACK
+} c_en_colors;
+
+/* Spanish color names, reverse order */
+typedef enum {
+    NEGRO
+    BLANCO,
+    AZUL,
+    VERDE,
+    ROJO,
+} c_sp_colors;
+
+/* No enum definition for French names */
+	    </pre></code>
+	  </td>
+	</tr>
+      </table>
+
+    <h4>Creating HDF Types from C Types</h3>
+
+    <p>An HDF enumeration data type can be created from a C
+      <code>enum</code> type simply by passing pointers to the C
+      <code>enum</code> values to <code>H5Tenum_insert()</code>.  For
+      instance, to create HDF types for the <code>c_en_colors</code>
+      type shown above:
+
+    <p>
+      <table width="90%" bgcolor="white">
+	<tr>
+	  <td>
+	    <code><pre>
+
+c_en_colors val;
+hid_t hdf_en_colors = H5Tcreate(H5T_ENUM, sizeof(c_en_colors));
+H5Tenum_insert(hdf_en_colors, "RED",   (val=RED,  &amp;val));
+H5Tenum_insert(hdf_en_colors, "GREEN", (val=GREEN,&amp;val));
+H5Tenum_insert(hdf_en_colors, "BLUE",  (val=BLUE, &amp;val));
+H5Tenum_insert(hdf_en_colors, "WHITE", (val=WHITE,&amp;val));
+H5Tenum_insert(hdf_en_colors, "BLACK", (val=BLACK,&amp;val));</pre></code>
+	  </td>
+	</tr>
+      </table>
+
+    <h4>Name Changes between Applications</h3>
+
+    <p>Occassionally two applicatons wish to exchange data but they
+      use different names for the constants they exchange.  For
+      instance, an English and a Spanish program may want to
+      communicate color names although they use different symbols in
+      the C <code>enum</code> definitions. The communication is still
+      possible although the applications must agree on common terms
+      for the colors. The following example shows the Spanish code to
+      read the values assuming that the applications have agreed that
+      the color information will be exchanged using Enlish color
+      names:
+
+    <p>
+      <table width="90%" bgcolor="white">
+	<tr>
+	  <td>
+	    <code><pre>
+
+c_sp_colors val, data[1000];
+hid_t hdf_sp_colors = H5Tcreate(H5T_ENUM, sizeof(c_sp_colors));
+H5Tenum_insert(hdf_sp_colors, "RED",   (val=ROJO,   &amp;val));
+H5Tenum_insert(hdf_sp_colors, "GREEN", (val=VERDE,  &amp;val));
+H5Tenum_insert(hdf_sp_colors, "BLUE",  (val=AZUL,   &amp;val));
+H5Tenum_insert(hdf_sp_colors, "WHITE", (val=BLANCO, &amp;val));
+H5Tenum_insert(hdf_sp_colors, "BLACK", (val=NEGRO,  &amp;val));
+
+H5Dread(dataset, hdf_sp_colors, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);</pre></code>
+	  </td>
+	</tr>
+      </table>
+
+
+    <h4>Symbol Ordering across Applications</h3>
+
+    <p>Since symbol ordering is completely determined by the integer values
+      assigned to each symbol in the <code>enum</code> definition,
+      ordering of <code>enum</code> symbols cannot be preserved across
+      files like with HDF enumeration types.  HDF can convert from one
+      application's integer values to the other's so a symbol in one
+      application's C <code>enum</code> gets mapped to the same symbol
+      in the other application's C <code>enum</code>, but the relative
+      order of the symbols is not preserved.
+
+    <p>For example, an application may be defined to use the
+      definition of <code>c_en_colors</code> defined above where
+      <code>WHITE</code> is less than <code>BLACK</code>, but some
+      other application might define the colors in some other
+      order. If each application defines an HDF enumeration type based 
+      on that application's C <code>enum</code> type then HDF will
+      modify the integer values as data is communicated from one
+      application to the other so that a <code>RED</code> value
+      in the first application is also a <code>RED</code> value in the
+      other application.
+
+    <p>A case of this reordering of symbol names was also shown in the 
+      previous code snippet (as well as a change of language), where
+      HDF changed the integer values so 0 (<code>RED</code>) in the
+      input file became 4 (<code>ROJO</code>) in the <code>data</code>
+      array. In the input file, <code>WHITE</code> was less than
+      <code>BLACK</code>; in the application the opposite is true.
+
+    <p>In fact, the ability to change the order of symbols is often
+      convenient when the enumeration type is used only to group
+      related symbols that don't have any well defined order
+      relationship.
+
+    <h4>Internationalization</h3>
+
+    <p>The HDF enumeration type conversion features can also be used
+      to provide internationalization of debugging output.  A program
+      written with the <code>c_en_colors</code> data type could define 
+      a separate HDF data type for languages such as English, Spanish, 
+      and French and cast the enumerated value to one of these HDF
+      types to print the result.
+
+    <p>
+      <table width="90%" bgcolor="white">
+	<tr>
+	  <td>
+	    <code><pre>
+
+c_en_colors val, *data=...;
+
+hid_t hdf_sp_colors = H5Tcreate(H5T_ENUM, sizeof val);
+H5Tenum_insert(hdf_sp_colors, "ROJO",   (val=RED,   &amp;val));
+H5Tenum_insert(hdf_sp_colors, "VERDE",  (val=GREEN, &amp;val));
+H5Tenum_insert(hdf_sp_colors, "AZUL",   (val=BLUE,  &amp;val));
+H5Tenum_insert(hdf_sp_colors, "BLANCO", (val=WHITE, &amp;val));
+H5Tenum_insert(hdf_sp_colors, "NEGRO",  (val=BLACK, &amp;val));
+
+hid_t hdf_fr_colors = H5Tcreate(H5T_ENUM, sizeof val);
+H5Tenum_insert(hdf_fr_colors, "OUGE",  (val=RED,   &amp;val));
+H5Tenum_insert(hdf_fr_colors, "VERT",  (val=GREEN, &amp;val));
+H5Tenum_insert(hdf_fr_colors, "BLEU",  (val=BLUE,  &amp;val));
+H5Tenum_insert(hdf_fr_colors, "BLANC", (val=WHITE, &amp;val));
+H5Tenum_insert(hdf_fr_colors, "NOIR",  (val=BLACK, &amp;val));
+
+void
+nameof(lang_t language, c_en_colors val, char *name, size_t size)
+{
+    switch (language) {
+    case ENGLISH:
+        H5Tenum_nameof(hdf_en_colors, &amp;val, name, size);
+        break;
+    case SPANISH:
+        H5Tenum_nameof(hdf_sp_colors, &amp;val, name, size);
+        break;
+    case FRENCH:
+        H5Tenum_nameof(hdf_fr_colors, &amp;val, name, size);
+        break;
+    }
+}</pre></code>
+	  </td>
+	</tr>
+      </table>
+
+    <h3>7.10. Goals That Have Been Met</h2>
+
+    <p>The main goal of enumeration types is to provide communication
+      of enumerated data using symbolic equivalence.  That is, a
+      symbol written to a dataset by one application should be read as
+      the same symbol by some other application.
+
+    <p>
+      <table width="90%">
+	<tr>
+	  <td valign=top><b>Architecture Independence</b></td>
+	  <td valign=top>Two applications shall be able to exchange
+	    enumerated data even when the underlying integer values
+	    have different storage formats. HDF accomplishes this for
+	    enumeration types by building them upon integer types.</td>
+	</tr>
+
+	<tr>
+	  <td valign=top><b>Preservation of Order Relationship</b></td>
+	  <td valign=top>The relative order of symbols shall be
+	    preserved between two applications that use equivalent
+	    enumeration data types. Unlike numeric values that have
+	    an implicit ordering, enumerated data has an explicit
+	    order defined by the enumeration data type and HDF
+	    records this order in the file.</td>
+	</tr>
+
+	<tr>
+	  <td valign=top><b>Order Independence</b></td>
+	  <td valign=top>An application shall be able to change the
+	    relative ordering of the symbols in an enumeration data
+	    type.  This is accomplished by defining a new type with
+	    different integer values and converting data from one type 
+	    to the other.</td>
+	</tr>
+
+	<tr>
+	  <td valign=top><b>Subsets</b></td>
+	  <td valign=top>An application shall be able to read
+	    enumerated data from an archived dataset even after the
+	    application has defined additional members for the
+	    enumeration type. An application shall be able to write
+	    to a dataset when the dataset contains a superset of the 
+	    members defined by the application.  Similar rules apply 
+	    for in-core conversions between enumerated data
+	    types.</td>
+	</tr>
+
+	<tr>
+	  <td valign=top><b>Targetable</b></td>
+	  <td valign=top>An application shall be able to target a
+	    particular architecture or application when storing
+	    enumerated data. This is accomplished by allowing
+	    non-native underlying integer types and converting the
+	    native data to non-native data.</td>
+	</tr>
+
+	<tr>
+	  <td valign=top><b>Efficient Data Transfer</b></td>
+	  <td valign=top>An application that defines a file dataset
+	    that corresponds to some native C enumerated data array
+	    shall be able to read and write to that dataset directly
+	    using only Posix read and write functions. HDF already
+	    optimizes this case for integers, so the same optimization 
+	    will apply to enumerated data.
+	</tr>
+
+	<tr>
+	  <td valign=top><b>Efficient Storage</b></td>
+	  <td valign=top>Enumerated data shall be stored in a manner 
+	    which is space efficient. HDF stores the enumerated data
+	    as integers and allows the application to chose the size
+	    and format of those integers.</td>
+	</tr>
+      </table>
+
+
+    <p align=right><font size=-1><i>
+    (Return to <a href="Datatypes.html#Datatypes_Enum">Data Types Interface (H5T)</a>.)
+    </font></i>
+
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+   <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+   <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+   <a href="index.html">Other HDF5 documents and links</a>&nbsp;<br>
+   <!--
+   <a href="Glossary.html">Glossary</a><br>
+   -->
+</td>
+<td valign=top align=right>
+   And in this document, the 
+   <a href="H5.user.html">HDF5 User's Guide</a>:&nbsp;&nbsp;&nbsp;&nbsp;
+      <a href="Files.html">Files</a>&nbsp;&nbsp;
+      <br>
+      <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+      Data Types&nbsp;&nbsp;
+      <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+      <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+      <a href="References.html">References</a>&nbsp;&nbsp;
+      <br>
+      <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+      <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+      <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+      <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+      <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+      <br>
+      <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+      <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+      <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+      <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+      <a href="Ragged.html">Ragged Arrays</a>&nbsp;&nbsp;
+<!--
+<hr>
+And in this document, the 
+<a href="H5.user.html">HDF5 User's Guide</a>:&nbsp;&nbsp;&nbsp;&nbsp;
+      <a href="Attributes.html">H5A</a>&nbsp;&nbsp;
+      <a href="Datasets.html">H5D</a>&nbsp;&nbsp;
+      <a href="Errors.html">H5E</a>&nbsp;&nbsp;
+      <a href="Files.html">H5F</a>&nbsp;&nbsp;
+      <a href="Groups.html">H5G</a>&nbsp;&nbsp;
+      <a href="Properties.html">H5P</a>&nbsp;&nbsp;
+      <a href="References.html">H5R & H5I</a>&nbsp;&nbsp;
+      <a href="Ragged.html">H5RA</a>&nbsp;&nbsp;
+      <a href="Dataspaces.html">H5S</a>&nbsp;&nbsp;
+      <a href="Datatypes.html">H5T</a>&nbsp;&nbsp;
+      <a href="Filters.html">H5Z</a>&nbsp;&nbsp;
+      <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+      <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+      <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+      <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+      <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+-->
+</td></tr>
+</table>
+</center>
+
+
+<hr>
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a>
+</address>
+<!-- Created: Thu Dec  4 14:57:32 EST 1997 -->
+<!-- hhmts start -->
+Last modified: 30 April 1999
+Footer modified: 3 July 2002
+<!-- hhmts end -->
+
+<br>
+This file is longer used; the material has been integrated into Datatypes.html.
+
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Debugging.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Debugging.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Debugging.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,519 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Debugging HDF5 Applications</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>Debugging HDF5 Applications</h1>
+
+    <h2>Introduction</h2>
+
+    <p>The HDF5 library contains a number of debugging features to
+      make programmers' lives easier including the ability to print
+      detailed error messages, check invariant conditions, display
+      timings and other statistics, and trace API function calls and
+      return values.
+
+    <dl>
+      <dt><b>Error Messages</b>
+      <dd>Error messages are normally displayed automatically on the
+	standard error stream and include a stack trace of the library
+	including file names, line numbers, and function names. The
+	application has complete control over how error messages are
+	displayed and can disable the display on a permanent or
+	temporary basis. Refer to the documentation for the H5E error
+	handling package.
+
+	<br><br>
+      <dt><b>Invariant Conditions</b>
+      <dd>Unless <code>NDEBUG</code> is defined during compiling, the
+	library will include code to verify that invariant conditions
+	have the expected values.  When a problem is detected the
+	library will display the file and line number within the
+	library and the invariant condition that failed.  A core dump
+	may be generated for post mortem debugging. The code to
+	perform these checks can be included on a per-package bases.
+
+	<br><br>
+      <dt><b>Timings and Statistics</b>
+      <dd>The library can be configured to accumulate certain
+	statistics about things like cache performance, datatype
+	conversion, data space conversion, and data filters. The code
+	is included on a per-package basis and enabled at runtime by
+	an environment variable.
+
+	<br><br>
+      <dt><b>API Tracing</b>
+      <dd>All API calls made by an application can be displayed and
+	include formal argument names and actual values and the
+	function return value. This code is also conditionally
+	included at compile time and enabled at runtime.
+    </dl>
+
+    <p>The statistics and tracing can be displayed on any output
+      stream (including streams opened by the shell) with output from
+      different packages even going to different streams.
+
+    <h2>Error Messages</h2>
+
+    <p>By default any API function that fails will print an error
+      stack to the standard error stream.
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <tr>
+	    <td>
+	      <p><code><pre>
+
+HDF5-DIAG: Error detected in thread 0.  Back trace follows.
+  #000: H5F.c line 1245 in H5Fopen(): unable to open file
+    major(04): File interface
+    minor(10): Unable to open file
+  #001: H5F.c line 846 in H5F_open(): file does not exist
+    major(04): File interface
+    minor(10): Unable to open file
+	      </code></pre>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>The error handling package (H5E) is described
+      <a href="Errors.html">elsewhere</a>.
+
+    <h2>Invariant Conditions</h2>
+
+    <p>To include checks for invariant conditions the library should
+      be configured with <code>--disable-production</code>, the
+      default for versions before 1.2. The library designers have made
+      every attempt to handle error conditions gracefully but an
+      invariant condition assertion may fail in certain cases.  The
+      output from a failure usually looks something like this:
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <tr>
+	    <td>
+	      <p><code><pre>
+
+Assertion failed: H5.c:123: i&lt;NELMTS(H5_debug_g)
+IOT Trap, core dumped.
+	      </code></pre>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <h2>Timings and Statistics</h2>
+
+    <p>Code to accumulate statistics is included at compile time by
+      using the <code>--enable-debug</code> configure switch. The
+      switch can be followed by an equal sign and a comma-separated
+      list of package names or else a default list is used.
+
+    <p>
+      <center>
+        <table border align=center width="80%">
+          <tr>
+            <th>Name</th>
+	    <th>Default</th>
+            <th>Description</th>
+          </tr>
+	  <tr>
+	    <td align=center>a</td>
+	    <td align=center>No</td>
+	    <td>Attributes</td>
+	  </tr>
+	  <tr>
+	    <td align=center>ac</td>
+	    <td align=center>Yes</td>
+	    <td>Meta data cache</td>
+	  </tr>
+	  <tr>
+	    <td align=center>b</td>
+	    <td align=center>Yes</td>
+	    <td>B-Trees</td>
+	  </tr>
+	  <tr>
+	    <td align=center>d</td>
+	    <td align=center>Yes</td>
+	    <td>Datasets</td>
+	  </tr>
+	  <tr>
+	    <td align=center>e</td>
+	    <td align=center>Yes</td>
+	    <td>Error handling</td>
+	  </tr>
+	  <tr>
+	    <td align=center>f</td>
+	    <td align=center>Yes</td>
+	    <td>Files</td>
+	  </tr>
+	  <tr>
+	    <td align=center>g</td>
+	    <td align=center>Yes</td>
+	    <td>Groups</td>
+	  </tr>
+	  <tr>
+	    <td align=center>hg</td>
+	    <td align=center>Yes</td>
+	    <td>Global heap</td>
+	  </tr>
+	  <tr>
+	    <td align=center>hl</td>
+	    <td align=center>No</td>
+	    <td>Local heaps</td>
+	  </tr>
+	  <tr>
+	    <td align=center>i</td>
+	    <td align=center>Yes</td>
+	    <td>Interface abstraction</td>
+	  </tr>
+	  <tr>
+	    <td align=center>mf</td>
+	    <td align=center>No</td>
+	    <td>File memory management</td>
+	  </tr>
+	  <tr>
+	    <td align=center>mm</td>
+	    <td align=center>Yes</td>
+	    <td>Library memory managment</td>
+	  </tr>
+	  <tr>
+	    <td align=center>o</td>
+	    <td align=center>No</td>
+	    <td>Object headers and messages</td>
+	  </tr>
+	  <tr>
+	    <td align=center>p</td>
+	    <td align=center>Yes</td>
+	    <td>Property lists</td>
+	  </tr>
+	  <tr>
+	    <td align=center>s</td>
+	    <td align=center>Yes</td>
+	    <td>Data spaces</td>
+	  </tr>
+	  <tr>
+	    <td align=center>t</td>
+	    <td align=center>Yes</td>
+	    <td>Datatypes</td>
+	  </tr>
+	  <tr>
+	    <td align=center>v</td>
+	    <td align=center>Yes</td>
+	    <td>Vectors</td>
+	  </tr>
+	  <tr>
+	    <td align=center>z</td>
+	    <td align=center>Yes</td>
+	    <td>Raw data filters</td>
+	  </tr>
+        </table>
+      </center>
+
+    <p>In addition to including the code at compile time the
+      application must enable each package at runtime.  This is done
+      by listing the package names in the <code>HDF5_DEBUG</code>
+      environment variable. That variable may also contain file
+      descriptor numbers (the default is `2') which control the output
+      for all following packages up to the next file number.  The
+      word <code>all</code> refers to all packages. Any word my be
+      preceded by a minus sign to turn debugging off for the package.
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=top><b>Sample debug specifications</b></caption>
+	  <tr valign=top>
+	    <td><code>all</code></td>
+	    <td>This causes debugging output from all packages to be
+	      sent to the standard error stream.</td>
+	  </tr>
+	  <tr valign=top>
+	    <td><code>all -t -s</code></td>
+	    <td>Debugging output for all packages except datatypes
+	      and data spaces will appear on the standard error
+	      stream.</td>
+	  </tr>
+	  <tr valign=top>
+	    <td><code>-all ac 255 t,s</code></td>
+	    <td>This disables all debugging even if the default was to
+	      debug something, then output from the meta data cache is
+	      send to the standard error stream and output from data
+	      types and spaces is sent to file descriptor 255 which
+	      should be redirected by the shell.</td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>The components of the <code>HDF5_DEBUG</code> value may be
+      separated by any non-lowercase letter.
+
+    <h2>API Tracing</h2>
+
+    <p>The HDF5 library can trace API calls by printing the
+      function name, the argument names and their values, and the
+      return value. Some people like to see lots of output during
+      program execution instead of using a good symbolic debugger, and
+      this feature is intended for their consumption.  For example,
+      the output from <code>h5ls foo</code> after turning on tracing,
+      includes:
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <tr>
+	    <td>
+	      <code><pre>
+
+H5Tcopy(type=184549388) = 184549419 (type);
+H5Tcopy(type=184549392) = 184549424 (type);
+H5Tlock(type=184549424) = SUCCEED;
+H5Tcopy(type=184549393) = 184549425 (type);
+H5Tlock(type=184549425) = SUCCEED;
+H5Fopen(filename="foo", flags=0, access=H5P_DEFAULT) = FAIL;
+HDF5-DIAG: Error detected in thread 0.  Back trace follows.
+  #000: H5F.c line 1245 in H5Fopen(): unable to open file
+    major(04): File interface
+    minor(10): Unable to open file
+  #001: H5F.c line 846 in H5F_open(): file does not exist
+    major(04): File interface
+    minor(10): Unable to open file
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>The code that performs the tracing must be included in the
+      library by specifying the <code>--enable-trace</code>
+      configuration switch (the default for versions before 1.2). Then
+      the word <code>trace</code> must appear in the value of the
+      <code>HDF5_DEBUG</code> variable.  The output will appear on the
+      last file descriptor before the word <code>trace</code> or two
+      (standard error) by default.
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <tr>
+	    <td>To display the trace on the standard error stream:
+	      <code><pre>
+$ env HDF5_DEBUG=trace a.out
+	      </pre></code>
+	    </td>
+	  </tr>
+	  <tr>
+	    <td>To send the trace to a file:
+	      <code><pre>
+$ env HDF5_DEBUG="55 trace" a.out 55>trace-output
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <h3>Performance</h3>
+
+    <p>If the library was not configured for tracing then there is no
+      unnecessary overhead since all tracing code is excluded.
+      However, if tracing is enabled but not used there is a small
+      penalty. First, code size is larger because of extra
+      statically-declared character strings used to store argument
+      types and names and extra auto variable pointer in each
+      function.  Also, execution is slower because each function sets
+      and tests a local variable and each API function calls the
+      <code>H5_trace()</code> function.
+
+    <p>If tracing is enabled and turned on then the penalties from the 
+      previous paragraph apply plus the time required to format each
+      line of tracing information.  There is also an extra call to
+      H5_trace() for each API function to print the return value.
+
+    <h3>Safety</h3>
+
+    <p>The tracing mechanism is invoked for each API function before
+      arguments are checked for validity.  If bad arguments are passed 
+      to an API function it could result in a segmentation fault.
+      However, the tracing output is line-buffered so all previous
+      output will appear.
+
+    <h3>Completeness</h3>
+
+    <p>There are two API functions that don't participate in
+      tracing. They are <code>H5Eprint()</code> and
+      <code>H5Eprint_cb()</code> because their participation would
+      mess up output during automatic error reporting.
+
+    <p>On the other hand, a number of API functions are called during
+      library initialization and they print tracing information.
+
+    <h3>Implementation</h3>
+
+    <p>For those interested in the implementation here is a
+      description.  Each API function should have a call to one of the 
+      <code>H5TRACE()</code> macros immediately after the
+      <code>FUNC_ENTER()</code> macro.  The first argument is the
+      return type encoded as a string.  The second argument is the
+      types of all the function arguments encoded as a string.  The
+      remaining arguments are the function arguments.  This macro was
+      designed to be as terse and unobtrousive as possible.
+
+    <p>In order to keep the <code>H5TRACE()</code> calls synchronized
+      with the source code we've written a perl script which gets
+      called automatically just before Makefile dependencies are
+      calculated for the file.  However, this only works when one is
+      using GNU make.  To reinstrument the tracing explicitly, invoke
+      the <code>trace</code> program from the hdf5 bin directory with
+      the names of the source files that need to be updated.  If any
+      file needs to be modified then a backup is created by appending
+      a tilde to the file name.
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=top><b>Explicit Instrumentation</b></caption>
+	  <tr>
+	    <td>
+	      <code><pre>
+
+$ ../bin/trace *.c
+H5E.c: in function `H5Ewalk_cb':
+H5E.c:336: warning: trace info was not inserted
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>Note: The warning message is the result of a comment of the
+      form <code>/*NO TRACE*/</code> somewhere in the function
+      body. Tracing information will not be updated or inserted if
+      such a comment exists.
+
+    <p>Error messages have the same format as a compiler so that they
+      can be parsed from program development environments like
+      Emacs. Any function which generates an error will not be
+      modified.</p>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+<!-- Created: Wed Jun 17 12:29:12 EDT 1998 -->
+<!-- hhmts start -->
+Last modified: 13 December 1999 
+<!-- hhmts end -->
+
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3 @@
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+

Added: packages/hdf5/branches/upstream/current/doc/html/EnumMap.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/EnumMap.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Environment.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Environment.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Environment.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,168 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+
+<head>
+<title>Environment Variables and Configuration Parameters</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>HDF5 Library Environment Variables and Configuration Parameters</h1>
+
+<h2>1. Environment Variables</h2>
+
+The HDF5 library uses UNIX environment variables to control
+or adjust certain library features at runtime.  The variables and 
+their defined effects are as follows:
+
+<dir>
+<dl>
+    <dt><tt>HDF5_DEBUG</tt>
+        <dd>Defines a list of debugging switches documented in the
+            <a href="Debugging.html">Debugging</a> section of the
+            <cite>HDF5 User's Guide</cite>.
+
+    <dt><tt>HDF5_NOCLEANUP</tt>
+        <dd>When set to a non-empty value, the programs in the test
+            directory do not remove temporary HDF5 data files.
+            The default is for each test to remove the files before exit.
+
+    <dt><tt>HDF5_DISABLE_VERSION_CHECK</tt> 
+        <dd>When set to <code>1</code>, HDF5 will not abort when the version
+            of the HDF5 headers doesn't match the version of the HDF5 library.
+
+    <dt><tt>HDF5_MPI_OPT_TYPES</tt> 
+            &nbsp;&nbsp;(for parallel beta version only)
+        <dd>When set to <code>1</code>, PHDF5 will use the MPI optimized 
+            code to perform parallel read/write accesses to datasets.
+            Currently, this optimization fails when accessing extendable
+            datasets.  The default is not to use the optimized code.
+
+</dl>
+</dir>
+
+<h2>2. Configuration Parameters</h2>
+
+The HDF5 configuration script accepts a list of parameters to control
+configuration features when creating the Makefiles for the library.  
+The command
+<br>
+<code>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;configure --help </code>
+<br>
+will display the current list of parameters and their effects. 
+<br><br>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+ 
+Last modified: 13 December 1999
+ 
+</body>
+</html>
+

Added: packages/hdf5/branches/upstream/current/doc/html/Errors.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Errors.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Errors.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,389 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Error Handling Interface (H5E)</title>
+    
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>The Error Handling Interface (H5E)</h1>
+
+    <h2>1. Introduction</h2>
+
+    <p>When an error occurs deep within the HDF5 library a record is
+      pushed onto an error stack and that function returns a failure
+      indication.  Its caller detects the failure, pushes another
+      record onto the stack, and returns a failure indication.  This
+      continues until the application-called API function returns a
+      failure indication (a negative integer or null pointer).  The
+      next API function which is called (with a few exceptions) resets
+      the stack.
+
+    <h2>2. Error Handling Operations</h2>
+
+    <p>In normal circumstances, an error causes the stack to be
+      printed on the standard error stream.  The first item, number
+      "#000" is produced by the API function itself and is usually
+      sufficient to indicate to the application programmer what went
+      wrong.
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=top><h4>Example: An Error Message</h4></caption>
+	  <tr>
+	    <td>
+	      <p>If an application calls <code>H5Tclose</code> on a
+		predefined datatype then the following message is
+		printed on the standard error stream.  This is a
+		simple error that has only one component, the API
+		function; other errors may have many components.
+
+	      <p><code><pre>
+HDF5-DIAG: Error detected in thread 0.  Back trace follows.
+  #000: H5T.c line 462 in H5Tclose(): predefined datatype
+    major(01): Function argument
+    minor(05): Bad value
+	      </code></pre>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>The error stack can also be printed and manipulated by these
+      functions, but if an application wishes make explicit calls to
+      <code>H5Eprint()</code> then the automatic printing should be
+      turned off to prevent error messages from being displayed twice
+      (see <code>H5Eset_auto()</code> below).
+
+    <dl>
+      <dt><code>herr_t H5Eprint (FILE *<em>stream</em>)</code>
+      <dd>The error stack is printed on the specified stream. Even if
+	the error stack is empty a one-line message will be printed:
+	<code>HDF5-DIAG: Error detected in thread 0.</code>
+
+	<br><br>
+      <dt><code>herr_t H5Eclear (void)</code>
+      <dd>The error stack can be explicitly cleared by calling this
+	function.  The stack is also cleared whenever an API function
+	is called, with certain exceptions (for instance,
+	<code>H5Eprint()</code>).
+    </dl>
+
+    <p>Sometimes an application will call a function for the sake of
+      its return value, fully expecting the function to fail.  Under
+      these conditions, it would be misleading if an error message
+      were automatically printed.  Automatic printing of messages is
+      controlled by the <code>H5Eset_auto()</code> function:
+
+    <dl>
+      <dt><code>herr_t H5Eset_auto (herr_t(*<em>func</em>)(void*),
+	  void *<em>client_data</em>)</code>
+      <dd>If <em>func</em> is not a null pointer, then the function to
+	which it points will be called automatically when an API
+	function is about to return an indication of failure.  The
+	function is called with a single argument, the
+	<em>client_data</em> pointer.  When the library is first
+	initialized the auto printing function is set to
+	<code>H5Eprint()</code> (cast appropriately) and
+	<em>client_data</em> is the standard error stream pointer,
+	<code>stderr</code>.
+
+	<br><br>
+      <dt><code>herr_t H5Eget_auto (herr_t(**<em>func</em>)(void*),
+	  void **<em>client_data</em>)</code>
+      <dd>This function returns the current automatic error traversal
+	settings through the <em>func</em> and <em>client_data</em>
+	arguments. Either (or both) arguments may be null pointers in
+	which case the corresponding information is not returned.
+    </dl>
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=top><h4>Example: Error Control</h4></caption>
+	  <tr>
+	    <td>
+	      <p>An application can temporarily turn off error
+		messages while "probing" a function.
+
+	      <p><code><pre>
+/* Save old error handler */
+herr_t (*old_func)(void*);
+void *old_client_data;
+H5Eget_auto(&amp;old_func, &amp;old_client_data);
+
+/* Turn off error handling */
+H5Eset_auto(NULL, NULL);
+
+/* Probe. Likely to fail, but that's okay */
+status = H5Fopen (......);
+
+/* Restore previous error handler */
+H5Eset_auto(old_func, old_client_data);
+	      </code></pre>
+
+	      <p>Or automatic printing can be disabled altogether and
+		error messages can be explicitly printed.
+
+	      <p><code><pre>
+/* Turn off error handling permanently */
+H5Eset_auto (NULL, NULL);
+
+/* If failure, print error message */
+if (H5Fopen (....)<0) {
+    H5Eprint (stderr);
+    exit (1);
+}
+	      </code></pre>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>The application is allowed to define an automatic error
+      traversal function other than the default
+      <code>H5Eprint()</code>.  For instance, one could define a
+      function that prints a simple, one-line error message to the
+      standard error stream and then exits.
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=top><h4>Example: Simple Messages</h4></caption>
+	  <tr>
+	    <td>
+	      <p>The application defines a function to print a simple
+		error message to the standard error stream.
+
+	      <p><code><pre>
+herr_t
+my_hdf5_error_handler (void *unused)
+{
+   fprintf (stderr, "An HDF5 error was detected. Bye.\n");
+   exit (1);
+}
+	      </code></pre>
+
+	      <p>The function is installed as the error handler by
+		saying
+
+	      <p><code><pre>
+H5Eset_auto (my_hdf5_error_handler, NULL);
+	      </code></pre>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>The <code>H5Eprint()</code> function is actually just a wrapper
+      around the more complex <code>H5Ewalk()</code> function which
+      traverses an error stack and calls a user-defined function for
+      each member of the stack.
+
+    <dl>
+      <dt><code>herr_t H5Ewalk (H5E_direction_t <em>direction</em>,
+	  H5E_walk_t <em>func</em>, void *<em>client_data</em>)</code>
+      <dd>The error stack is traversed and <em>func</em> is called for
+	each member of the stack.  Its arguments are an integer
+	sequence number beginning at zero (regardless of
+	<em>direction</em>), a pointer to an error description record,
+	and the <em>client_data</em> pointer.  If <em>direction</em>
+	is <code>H5E_WALK_UPWARD</code> then traversal begins at the
+	inner-most function that detected the error and concludes with
+	the API function.  The opposite order is
+	<code>H5E_WALK_DOWNWARD</code>.
+
+	<br><br>
+      <dt><code>typedef herr_t (*H5E_walk_t)(int <em>n</em>,
+	  H5E_error_t *<em>eptr</em>, void
+	  *<em>client_data</em>)</code>
+      <dd>An error stack traversal callback function takes three
+	arguments: <em>n</em> is a sequence number beginning at zero
+	for each traversal, <em>eptr</em> is a pointer to an error
+	stack member, and <em>client_data</em> is the same pointer
+	passed to <code>H5Ewalk()</code>.
+
+	<br><br>
+      <dt><pre><code>typedef struct {
+    H5E_major_t <em>maj_num</em>;
+    H5E_minor_t <em>min_num</em>;
+    const char  *<em>func_name</em>;
+    const char  *<em>file_name</em>;
+    unsigned    <em>line</em>;
+    const char  *<em>desc</em>;
+} H5E_error_t;</code></pre>
+      <dd>The <em>maj_num</em> and <em>min_num</em> are major
+	and minor error numbers, <em>func_name</em> is the name of
+	the function where the error was detected,
+	<em>file_name</em> and <em>line</em> locate the error
+	within the HDF5 library source code, and <em>desc</em>
+	points to a description of the error.
+
+        <br><br>
+      <dt><code>const char *H5Eget_major (H5E_major_t <em>num</em>)</code>
+      <dt><code>const char *H5Eget_minor (H5E_minor_t <em>num</em>)</code>
+      <dd>These functions take a major or minor error number and
+        return a constant string which describes the error.  If
+        <em>num</em> is out of range than a string like "Invalid major
+        error number" is returned.
+    </dl>
+      
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=top><h4>Example: H5Ewalk_cb</h4></caption>
+	  <tr>
+	    <td>
+	      <p>This is the implementation of the default error stack
+	        traversal callback.
+
+	      <p><code><pre>
+herr_t
+H5Ewalk_cb(int n, H5E_error_t *err_desc, void *client_data)
+{
+    FILE		*stream = (FILE *)client_data;
+    const char		*maj_str = NULL;
+    const char		*min_str = NULL;
+    const int		indent = 2;
+
+    /* Check arguments */
+    assert (err_desc);
+    if (!client_data) client_data = stderr;
+
+    /* Get descriptions for the major and minor error numbers */
+    maj_str = H5Eget_major (err_desc-&gt;maj_num);
+    min_str = H5Eget_minor (err_desc-&gt;min_num);
+
+    /* Print error message */
+    fprintf (stream, "%*s#%03d: %s line %u in %s(): %s\n",
+	     indent, "", n, err_desc-&gt;file_name, err_desc-&gt;line,
+	     err_desc-&gt;func_name, err_desc-&gt;desc);
+    fprintf (stream, "%*smajor(%02d): %s\n",
+	     indent*2, "", err_desc-&gt;maj_num, maj_str);
+    fprintf (stream, "%*sminor(%02d): %s\n",
+	     indent*2, "", err_desc-&gt;min_num, min_str);
+
+    return 0;
+}
+	      </code></pre>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+<!-- Created: Fri Feb 27 23:42:52 EST 1998 -->
+<!-- hhmts start -->
+Last modified: 13 December 1999 
+<!-- hhmts end -->
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/FF-IH_FileGroup.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/FF-IH_FileGroup.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/FF-IH_FileObject.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/FF-IH_FileObject.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Files.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Files.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Files.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,610 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>File Interface (H5F)</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>The File Interface (H5F)</h1>
+
+    <h2>1. Introduction</h2>
+
+    <p>HDF5 files are composed of a <em>super block</em> describing information
+        required to portably access files on multiple platforms, followed
+        by information about the groups in a file and the datasets in the
+        file.  The super block contains information about the size of offsets
+        and lengths of objects, the number of entries in symbol tables
+        (used to store groups) and additional version information for the
+        file.
+
+    <h2>2. File access modes</h2>
+
+    <p>The HDF5 library assumes that all files are implicitly opened for read
+        access at all times.  Passing the <code>H5F_ACC_RDWR</code>
+        parameter to <code>H5Fopen()</code> allows write access to a
+        file also.  <code>H5Fcreate()</code> assumes write access as
+        well as read access, passing <code>H5F_ACC_TRUNC</code> forces
+        the truncation of an existing file, otherwise H5Fcreate will
+        fail to overwrite an existing file.
+
+    <h2>3. Creating, Opening, and Closing Files</h2>
+
+    <p>Files are created with the <code>H5Fcreate()</code> function,
+      and existing files can be accessed with <code>H5Fopen()</code>. Both
+      functions return an object ID which should be eventually released by
+      calling <code>H5Fclose()</code>.
+
+    <dl>
+      <dt><code>hid_t H5Fcreate (const char *<em>name</em>, uintn
+	  <em>flags</em>, hid_t <em>create_properties</em>, hid_t
+	  <em>access_properties</em>)</code>
+      <dd>This function creates a new file with the specified name in
+        the current directory.  The file is opened with read and write
+        permission, and if the <code>H5F_ACC_TRUNC</code> flag is set,
+        any current file is truncated when the new file is created.
+        If a file of the same name exists and the
+        <code>H5F_ACC_TRUNC</code> flag is not set (or the
+        <code>H5F_ACC_EXCL</code> bit is set), this function will
+        fail.  Passing <code>H5P_DEFAULT</code> for the creation
+        and/or access property lists uses the library's default
+        values for those properties.  Creating and changing the
+        values of a property list is documented further below.  The
+        return value is an ID for the open file and it should be
+        closed by calling <code>H5Fclose()</code> when it's no longer
+        needed. A negative value is returned for failure.
+
+	<br><br>
+      <dt><code>hid_t H5Fopen (const char *<em>name</em>, uintn
+	  <em>flags</em>, hid_t <em>access_properties</em>)</code>
+      <dd>This function opens an existing file with read permission
+	and write permission if the <code>H5F_ACC_RDWR</code> flag is
+	set.  The <em>access_properties</em> is a file access property
+	list ID or <code>H5P_DEFAULT</code> for the default I/O access
+        parameters.  Creating and changing the parameters for access
+        property lists is documented further below.  Files which are opened
+        more than once return a unique identifier for each
+        <code>H5Fopen()</code> call and can be accessed through all
+        file IDs.  The return value is an ID for the open file and it
+        should be closed by calling <code>H5Fclose()</code> when it's
+        no longer needed. A negative value is returned for failure.
+
+	<br><br>
+      <dt><code>herr_t H5Fclose (hid_t <em>file_id</em>)</code>
+      <dd>This function releases resources used by a file which was
+        opened by <code>H5Fcreate()</code> or <code>H5Fopen()</code>. After
+        closing a file the <em>file_id</em> should not be used again.  This
+        function returns zero for success or a negative value for failure.
+
+	<br><br>
+      <dt><code>herr_t H5Fflush (hid_t <em>object_id</em>, 
+          H5F_scope_t <em>scope</em>)</code>
+      <dd>This function will cause all buffers associated with a file
+	to be immediately flushed to the file.  The <em>object_id</em> 
+	can be any object which is associated with a file, including
+	the file itself.  <em>scope</em> specifies whether the flushing
+        action is to be global or local.
+    </dl>
+
+    <h2>4. File Property Lists</h2>
+
+    <p>Additional parameters to <code>H5Fcreate()</code> or
+        <code>H5Fopen()</code> are passed through property list
+        objects, which are created with the <code>H5Pcreate()</code>
+        function.  These objects allow many parameters of a file's
+        creation or access to be changed from the default values.
+        Property lists are used as a portable and extensible method of
+        modifying multiple parameter values with simple API functions.
+        There are two kinds of file-related property lists,
+	namely file creation properties and file access properties.
+
+    <h3>4.1. File Creation Properties</h3>
+
+    <P>File creation property lists apply to <code>H5Fcreate()</code> only
+      and are used to control the file meta-data which is maintained
+      in the super block of the file.  The parameters which can be
+      modified are:
+
+    <dl>
+      <dt>User-Block Size <dd>The <em>user-block</em> is a fixed length block of
+	data located at the beginning of the file which is ignored by the
+	HDF5 library and may be used to store any data information found
+	to be useful to applications.  This value may be set to any power
+	of two equal to 512 or greater (i.e.  512, 1024, 2048, etc).  This
+	parameter is set and queried with the
+	<code>H5Pset_userblock()</code> and
+	<code>H5Pget_userblock()</code> calls.
+
+	<br><br>
+      <dt>Offset and Length Sizes
+      <dd>The number of bytes used to store the offset and length of
+	objects in the HDF5 file can be controlled with this 
+	parameter.  Values of 2, 4 and 8 bytes are currently
+	supported to allow 16-bit, 32-bit and 64-bit files to
+	be addressed.  These parameters are set and queried
+	with the <code>H5Pset_sizes()</code> and
+	<code>H5Pget_sizes()</code> calls.
+
+	<br><br>
+      <dt>Symbol Table Parameters
+      <dd>The size of symbol table B-trees can be controlled by setting
+	the 1/2 rank and 1/2 node size parameters of the B-tree. These
+	parameters are set and queried with the
+	<code>H5Pset_sym_k()</code> and <code>H5Pget_sym_k()</code> calls.
+
+	<br><br>
+      <dt>Indexed Storage Parameters
+      <dd>The size of indexed storage B-trees can be controlled by
+	setting the 1/2 rank and 1/2 node size parameters of the B-tree.
+	These parameters are set and queried with the
+	<code>H5Pset_istore_k()</code> and <code>H5Pget_istore_k()</code>
+	calls.
+    </dl>
+
+    <h3>4.2. File Access Property Lists</h3>
+
+    <p>File access property lists apply to <code>H5Fcreate()</code> or
+      <code>H5Fopen()</code> and are used to control different methods of
+      performing I/O on files.
+
+    <dl>
+      <dt>Unbuffered I/O
+      <dd>Local permanent files can be accessed with the functions described
+	in Section 2 of the Posix manual, namely <code>open()</code>,
+	<code>lseek()</code>, <code>read()</code>, <code>write()</code>, and
+	<code>close()</code>.  The <code>lseek64()</code> function is used
+	on operating systems that support it. This driver is enabled and
+	configured with <code>H5Pset_fapl_sec2()</code>.
+
+	<br><br>
+      <dt>Buffered I/O
+      <dd>Local permanent files can be accessed with the functions declared
+	in the standard C header file <code>stdio.h</code>, namely
+	<code>fopen()</code>, <code>fseek()</code>, <code>fread()</code>,
+	<code>fwrite()</code>, and <code>fclose()</code>.  The
+	<code>fseek64()</code> function is used on operating systems that
+	support it.  This driver is enabled and configured with
+	<code>H5Pset_fapl_stdio()</code>.
+	
+	<br><br>
+      <dt>Memory I/O
+      <dd>Local temporary files can be created and accessed directly from
+	memory without ever creating permanent storage.  The library uses
+	<code>malloc()</code> and <code>free()</code> to create storage
+	space for the file.  The total size of the file must be small enough
+	to fit in virtual memory.  The name supplied to
+	<code>H5Fcreate()</code> is irrelevant, and <code>H5Fopen()</code>
+	will always fail.
+	
+	<br><br>
+      <dt>Parallel Files using MPI I/O
+      <dd>This driver allows parallel access to a file through the MPI I/O
+	library.  The parameters which can be modified are the MPI
+	communicator, the info object, and the access mode.
+	The communicator and info object are saved and then
+	passed to <code>MPI_File_open()</code> during file creation or open.
+	The access_mode controls the kind of parallel access the application
+	intends.  (Note that it is likely that the next API revision will
+	remove the access_mode parameter and have access control specified
+	via the raw data transfer property list of <code>H5Dread()</code>
+	and <code>H5Dwrite()</code>.)  These parameters are set and queried
+	with the <code>H5Pset_fapl_mpi()</code> and 
+        <code>H5Pget_fapl_mpi()</code> calls.
+
+	<br><br>
+      <dt>Data Alignment
+      <dd>Sometimes file access is faster if certain things are
+	aligned on file blocks. This can be controlled by setting
+	alignment properties of a file access property list with the
+	<code>H5Pset_alignment()</code> function. Any allocation
+	request at least as large as some threshold will be aligned on 
+	an address which is a multiple of some number.
+    </dl> </ul>
+
+    <h2>5. Examples of using file property lists</h2>
+    
+    <h3>5.1. Example of using file creation property lists</h3>
+    
+    <p>This following example shows how to create a file with 64-bit object
+      offsets and lengths:<br>
+    <pre>
+        hid_t create_plist;
+        hid_t file_id;
+
+        create_plist = H5Pcreate(H5P_FILE_CREATE);
+        H5Pset_sizes(create_plist, 8, 8);
+
+        file_id = H5Fcreate("test.h5", H5F_ACC_TRUNC,
+                             create_plist, H5P_DEFAULT);
+        .
+        .
+        .
+        H5Fclose(file_id);
+    </pre>
+        
+    <h3>5.2. Example of using file creation plist</h3>
+
+    <p>This following example shows how to open an existing file for
+      independent datasets access by MPI parallel I/O:<br>
+    <pre>
+        hid_t access_plist;
+        hid_t file_id;
+
+        access_plist = H5Pcreate(H5P_FILE_ACCESS);
+        H5Pset_fapl_mpi(access_plist, MPI_COMM_WORLD, MPI_INFO_NULL);
+
+	/* H5Fopen must be called collectively */
+        file_id = H5Fopen("test.h5", H5F_ACC_RDWR, access_plist);
+        .
+        .
+        .
+	/* H5Fclose must be called collectively */
+        H5Fclose(file_id);
+        </pre>
+        
+
+    <h2>6. Low-level File Drivers</h2>
+
+    <p>HDF5 is able to access its address space through various types of
+      low-level <em>file drivers</em>.  For instance, an address space might
+      correspond to a single file on a Unix file system, multiple files on a
+      Unix file system, multiple files on a parallel file system, or a block
+      of memory within the application. Generally, an HDF5 address space is
+      referred to as an <em>HDF5 file</em> regardless of how the space is organized
+      at the storage level.
+
+    <h3>6.1. Unbuffered Permanent Files</h3>
+
+    <p>The <em>sec2</em> driver uses functions from section 2 of the
+      Posix manual to access files stored on a local file system.  These are
+      the <code>open()</code>, <code>close()</code>, <code>read()</code>,
+      <code>write()</code>, and <code>lseek()</code> functions.  If the
+      operating system supports <code>lseek64()</code> then it is used instead
+      of <code>lseek()</code>.  The library buffers meta data regardless of
+      the low-level driver, but using this driver prevents data from being
+      buffered again by the lowest layers of the HDF5 library.
+
+    <dl>
+      <dt><code>hid_t H5Pget_driver (hid_t <em>access_properties</em>)</code>
+      <dd>This function returns the constant <code>H5FD_SEC2</code> if the
+	<em>sec2</em> driver is defined as the low-level driver for the
+	specified access property list.
+
+	<br><br>
+      <dt><code>herr_t H5Pset_fapl_sec2 
+          (hid_t <em>access_properties</em>)</code>
+      <dd>The file access properties are set to use the <em>sec2</em>
+	driver. Any previously defined driver properties are erased from the
+	property list.  Additional parameters may be added to this function in
+	the future.
+
+    </dl>
+
+    <h3>6.2. Buffered Permanent Files</h3>
+
+    <p>The <em>stdio</em> driver uses the functions declared in the
+      <code>stdio.h</code> header file to access permanent files in a local
+      file system.  These are the <code>fopen()</code>, <code>fclose()</code>,
+      <code>fread()</code>, <code>fwrite()</code>, and <code>fseek()</code>
+      functions.  If the operating system supports <code>fseek64()</code> then
+      it is used instead of <code>fseek()</code>. Use of this driver
+      introduces an additional layer of buffering beneath the HDF5 library.
+
+    <dl>
+      <dt><code>hid_t H5Pget_driver(hid_t <em>access_properties</em>)</code>
+      <dd>This function returns the constant <code>H5FD_STDIO</code> if the
+	<em>stdio</em> driver is defined as the low-level driver for the
+	specified access property list.
+
+	<br><br>
+      <dt><code>herr_t H5Pset_fapl_stdio 
+          (hid_t <em>access_properties</em>)</code>
+      <dd>The file access properties are set to use the <em>stdio</em>
+	driver.  Any previously defined driver properties are erased from the
+	property list.  Additional parameters may be added to this function in
+	the future.
+
+    </dl>
+
+    <h3>6.3. Buffered Temporary Files</h3>
+
+    <p>The <em>core</em> driver uses <code>malloc()</code> and
+      <code>free()</code> to allocate space for a file in the heap. Reading
+      and writing to a file of this type results in mem-to-mem copies instead
+      of disk I/O and as a result is somewhat faster.  However, the total file
+      size must not exceed the amount of available virtual memory, and only
+      one HDF5 file handle can access the file (because the name of such a
+      file is insignificant and <code>H5Fopen()</code> always fails).
+
+    <dl>
+      <dt><code>hid_t H5Pget_driver (hid_t <em>access_properties</em>)</code>
+      <dd>This function returns the constant <code>H5FD_CORE</code> if the
+	<em>core</em> driver is defined as the low-level driver for the
+	specified access property list.
+
+	<br><br>
+      <dt><code>herr_t H5Pset_fapl_core (hid_t <em>access_properties</em>, 
+          size_t <em>block_size</em>, 
+          hbool_t <em>backing_store</em>)</code>
+      <dd>The file access properties are set to use the <em>core</em>
+	driver and any previously defined driver properties are erased from
+	the property list.  Memory for the file will always be allocated in
+	units of the specified <em>block_size</em>.  Additional parameters may
+	be added to this function in the future.
+
+	<br><br>
+      <dt><code>herr_t H5Pget_fapl_core (hid_t <em>access_properties</em>, 
+          size_t *<em>block_size</em>),
+          hbool_t *<em>backing_store</em>)</code>
+      <dd>If the file access property list is set to the <em>core</em> driver
+	then this function returns zero and <em>block_size</em> is set to the
+	block size used for the file; otherwise it returns a negative
+	value. In the future, additional arguments may be added to this
+	function to match those added to <code>H5Pset_fapl_core()</code>.
+    </dl>
+
+    <h3>6.4. Parallel Files</h3>
+
+    <p>This driver uses MPI I/O to provide parallel access to a file.
+
+    <dl>
+      <dt><code>hid_t H5Pget_driver (hid_t <em>access_properties</em>)</code>
+      <dd>This function returns the constant <code>H5FD_MPI</code> if the
+	<em>mpi</em> driver is defined as the low-level driver for the
+	specified access property list.
+
+	<br><br>
+      <dt><code>herr_t H5Pset_fapl_mpi (hid_t <em>access_properties</em>, MPI_Comm
+	  <em>comm</em>, MPI_info <em>info</em>)</code>
+      <dd>The file access properties are set to use the <em>mpi</em>
+	driver and any previously defined driver properties are erased from
+	the property list.  Additional parameters may be added to this
+	function in the future.
+
+	<br><br>
+      <dt><code>herr_t H5Pget_fapl_mpi 
+          (hid_t <em>access_properties</em>, 
+	  MPI_Comm *<em>comm</em>, 
+          MPI_info *<em>info</em>)</code>
+      <dd>If the file access property list is set to the <em>mpi</em> driver
+	then this function returns zero and <em>comm</em>, and <em>info</em>
+	are set to the values stored in the property
+	list; otherwise the function returns a negative value. In the future,
+	additional arguments may be added to this function to match those
+	added to <code>H5Pset_fapl_mpi()</code>.
+    </dl>
+
+    <a name="Files_Families">
+    <h3>6.5. File Families</h3>
+    </a>
+
+    <p>A single HDF5 address space may be split into multiple files which,
+      together, form a file family.  Each member of the family must be the
+      same logical size although the size and disk storage reported by
+      <code>ls</code>(1) may be substantially smaller.  The name passed to
+      <code>H5Fcreate()</code> or <code>H5Fopen()</code> should include a
+      <code>printf(3c)</code> style integer format specifier which will be
+      replaced with the family member number (the first family member is
+      zero).
+
+    <p>Any HDF5 file can be split into a family of files by running
+      the file through <code>split</code>(1) and numbering the output
+      files.  However, because HDF5 is lazy about extending the size
+      of family members, a valid file cannot generally be created by
+      concatenation of the family members.  Additionally,
+      <code>split</code> and <code>cat</code> don't attempt to
+      generate files with holes.  The <code>h5repart</code> program
+      can be used to repartition an HDF5 file or family into another
+      file or family and preserves holes in the files.
+
+    <dl>
+      <dt><code>h5repart</code> [<code>-v</code>] [<code>-b</code>
+	<em>block_size</em>[<em>suffix</em>]] [<code>-m</code>
+	<em>member_size</em>[<em>suffix</em>]] <em>source
+	destination</em>
+      <dd>This program repartitions an HDF5 file by copying the source
+	file or family to the destination file or family preserving
+	holes in the underlying Unix files.  Families are used for the
+	source and/or destination if the name includes a
+	<code>printf</code>-style integer format such as "%d".  The
+	<code>-v</code> switch prints input and output file names on
+	the standard error stream for progress monitoring,
+	<code>-b</code> sets the I/O block size (the default is 1kB),
+	and <code>-m</code> sets the output member size if the
+	destination is a family name (the default is 1GB).  The block
+	and member sizes may be suffixed with the letters
+	<code>g</code>, <code>m</code>, or <code>k</code> for GB, MB,
+	or kB respectively.
+
+	<br><br>
+      <dt><code>hid_t H5Pget_driver (hid_t <em>access_properties</em>)</code>
+      <dd>This function returns the constant <code>H5FD_FAMILY</code> if
+	the <em>family</em> driver is defined as the low-level driver for the
+	specified access property list.
+
+	<br><br>
+      <dt><code>herr_t H5Pset_fapl_family (hid_t <em>access_properties</em>,
+	  hsize_t <em>memb_size</em>, hid_t <em>member_properties</em>)</code>
+      <dd>The file access properties are set to use the <em>family</em>
+	driver and any previously defined driver properties are erased
+	from the property list.  Each member of the file family will
+	use <em>member_properties</em> as its file access property
+	list. The <em>memb_size</em> argument gives the logical size
+	in bytes of each family member but the actual size could be
+	smaller depending on whether the file contains holes.  The
+	member size is only used when creating a new file or
+	truncating an existing file; otherwise the member size comes
+	from the size of the first member of the family being
+	opened. Note: if the size of the <code>off_t</code> type is
+	four bytes then the maximum family member size is usually
+	2^31-1 because the byte at offset 2,147,483,647 is generally
+	inaccessible.  Additional parameters may be added to this
+	function in the future.
+
+	<br><br>
+      <dt><code>herr_t H5Pget_fapl_family (hid_t <em>access_properties</em>,
+	  hsize_t *<em>memb_size</em>, 
+	  hid_t *<em>member_properties</em>)</code>
+      <dd>If the file access property list is set to the <em>family</em>
+	driver then this function returns zero; otherwise the function
+	returns a negative value.  On successful return,
+	<em>access_properties</em> will point to a copy of the member
+	access property list which should be closed by calling
+	<code>H5Pclose()</code> when the application is finished with
+	it.  If <em>memb_size</em> is non-null then it will contain
+	the logical size in bytes of each family member.  In the
+	future, additional arguments may be added to this function to
+	match those added to <code>H5Pset_fapl_family()</code>.
+    </dl>
+
+    <h3>6.6. Split Meta/Raw Files</h3>
+
+    <p>On occasion, it might be useful to separate meta data from raw
+      data. The <em>split</em> driver does this by creating two files: one for
+      meta data and another for raw data.  The application provides a base
+      file name to <code>H5Fcreate()</code> or <code>H5Fopen()</code> and this
+      driver appends a file extension which defaults to <code>.meta</code> for 
+      the meta data file and <code>.raw</code> for the raw data file.  
+      Each file can have its own
+      file access property list which allows, for instance, a split file with
+      meta data stored with the <em>core</em> driver and raw data stored with
+      the <em>sec2</em> driver.
+
+    <dl>
+      <dt><code>hid_t H5Pget_driver (hid_t <em>access_properties</em>)</code>
+      <dd>This function returns the constant <code>H5FD_SPLIT</code> if
+	the <em>split</em> driver is defined as the low-level driver for the
+	specified access property list.
+
+	<br><br>
+      <dt><code>herr_t H5Pset_fapl_split (hid_t <em>access_properties</em>,
+	  const char *<em>meta_extension</em>, 
+	  hid_t <em>meta_properties</em>, const char *<em>raw_extension</em>, 
+	  hid_t <em>raw_properties</em>)</code>
+      <dd>The file access properties are set to use the <em>split</em>
+	driver and any previously defined driver properties are erased from
+	the property list.  The meta file will have a name which is formed by
+	adding <em>meta_extension</em> (or <code>.meta</code>) to the end of 
+        the base name and will be accessed according to the
+	<em>meta_properties</em>. The raw file will have a name which is
+	formed by appending <em>raw_extension</em> (or <code>.raw</code>) to the base
+	name and will be accessed according to the <em>raw_properties</em>.
+	Additional parameters may be added to this function in the future.
+
+    </dl>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+<!-- Created: Tue Jan 27 09:11:27 EST 1998 -->
+<!-- hhmts start -->
+Last modified: 26 April 2001 
+<!-- hhmts end -->
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Filters.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Filters.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Filters.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,596 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Filters</title>
+ 
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>Filters in HDF5</h1>
+
+    <b>Note: Transient pipelines described in this document have not
+      been implemented.</b>
+
+    <h2>1. Introduction</h2>
+
+    <p>HDF5 allows chunked data<sup><a href="#fn1">1</a></sup> 
+      to pass through user-defined filters
+      on the way to or from disk.  The filters operate on chunks of an
+      <code>H5D_CHUNKED</code> dataset can be arranged in a pipeline
+      so output of one filter becomes the input of the next filter.
+
+    <p>Each filter has a two-byte identification number (type
+      <code>H5Z_filter_t</code>) allocated by NCSA and can also be
+      passed application-defined integer resources to control its
+      behavior.  Each filter also has an optional ASCII comment
+      string.
+
+    <p>
+      <center>
+	<table align=center width="80%">
+	  <caption alignment=top>
+	    <b>Values for <code>H5Z_filter_t</code></b>
+	  </caption>
+
+	  <tr>
+	    <th width="30%">Value</th>
+	    <th width="70%">Description</th>
+	  </tr>
+
+	  <tr valign=top>
+	    <td><code>0-255</code></td>
+	    <td>These values are reserved for filters predefined and
+	      registered by the HDF5 library and of use to the general 
+	      public.  They are described in a separate section
+	      below.</td>
+	  </tr>
+
+	  <tr valign=top>
+	    <td><code>256-511</code></td>
+	    <td>Filter numbers in this range are used for testing only 
+	      and can be used temporarily by any organization.  No
+	      attempt is made to resolve numbering conflicts since all 
+	      definitions are by nature temporary.</td>
+	  </tr>
+
+	  <tr valign=top>
+	    <td><code>512-65535</code></td>
+	    <td>Reserved for future assignment.  Please contact the
+	      <a href="mailto:hdf5dev at ncsa.uiuc.edu">HDF5 development
+	      team</a> to reserve a value or range of values for
+	      use by your filters.</td>
+	</table>
+      </center>
+
+    <h2>2. Defining and Querying the Filter Pipeline</h2>
+
+    <p>Two types of filters can be applied to raw data I/O: permanent
+      filters and transient filters.  The permanent filter pipeline is
+      defned when the dataset is created while the transient pipeline
+      is defined for each I/O operation.  During an
+      <code>H5Dwrite()</code> the transient filters are applied first
+      in the order defined and then the permanent filters are applied
+      in the order defined.  For an <code>H5Dread()</code> the
+      opposite order is used: permanent filters in reverse order, then
+      transient filters in reverse order.  An <code>H5Dread()</code>
+      must result in the same amount of data for a chunk as the
+      original <code>H5Dwrite()</code>.
+
+    <p>The permanent filter pipeline is defined by calling
+      <code>H5Pset_filter()</code> for a dataset creation property
+      list while the transient filter pipeline is defined by calling
+      that function for a dataset transfer property list.
+
+    <dl>
+      <dt><code>herr_t H5Pset_filter (hid_t <em>plist</em>,
+	  H5Z_filter_t <em>filter</em>, unsigned int <em>flags</em>,
+	  size_t <em>cd_nelmts</em>, const unsigned int
+	  <em>cd_values</em>[])</code>
+      <dd>This function adds the specified <em>filter</em> and
+	corresponding properties to the end of the transient or
+	permanent output filter pipeline (depending on whether
+	<em>plist</em> is a dataset creation or dataset transfer
+	property list).  The <em>flags</em> argument specifies certain
+	general properties of the filter and is documented below. The
+	<em>cd_values</em> is an array of <em>cd_nelmts</em> integers
+	which are auxiliary data for the filter.  The integer values
+	will be stored in the dataset object header as part of the
+	filter information.
+
+	<br><br>
+      <dt><code>int H5Pget_nfilters (hid_t <em>plist</em>)</code>
+      <dd>This function returns the number of filters defined in the
+	permanent or transient filter pipeline depending on whether
+	<em>plist</em> is a dataset creation or dataset transfer
+	property list.  In each pipeline the filters are numbered from
+	0 through <em>N</em>-1 where <em>N</em> is the value returned
+	by this function. During output to the file the filters of a
+	pipeline are applied in increasing order (the inverse is true
+	for input).  Zero is returned if there are no filters in the
+	pipeline and a negative value is returned for errors.
+
+	<br><br>
+      <dt><code>H5Z_filter_t H5Pget_filter (hid_t <em>plist</em>,
+	  int <em>filter_number</em>, unsigned int *<em>flags</em>,
+	  size_t *<em>cd_nelmts</em>, unsigned int
+	  *<em>cd_values</em>, size_t namelen, char name[])</code>
+      <dd>This is the query counterpart of
+	<code>H5Pset_filter()</code> and returns information about a
+	particular filter number in a permanent or transient pipeline
+	depending on whether <em>plist</em> is a dataset creation or
+	dataset transfer property list.  On input, <em>cd_nelmts</em>
+	indicates the number of entries in the <em>cd_values</em>
+	array allocated by the caller while on exit it contains the
+	number of values defined by the filter.  The
+	<em>filter_number</em> should be a value between zero and
+	<em>N</em>-1 as described for <code>H5Pget_nfilters()</code>
+	and the function will return failure (a negative value) if the
+	filter number is out of range.  If <em>name</em> is a pointer
+	to an array of at least <em>namelen</em> bytes then the filter 
+	name will be copied into that array.  The name will be null
+	terminated if the <em>namelen</em> is large enough.  The
+	filter name returned will be the name appearing in the file or 
+	else the name registered for the filter or else an empty string.
+    </dl>
+
+    <p>The flags argument to the functions above is a bit vector of
+      the following fields:
+
+    <p>
+      <center>
+	<table align=center width="80%">
+	  <caption align=top>
+	    <b>Values for the <em>flags</em> argument</b>
+	  </caption>
+
+	  <tr>
+	    <th width="30%">Value</th>
+	    <th width="70%">Description</th>
+	  </tr>
+
+	  <tr valign=top>
+	    <td><code>H5Z_FLAG_OPTIONAL</code></td>
+	    <td>If this bit is set then the filter is optional.  If
+	      the filter fails (see below) during an
+	      <code>H5Dwrite()</code> operation then the filter is
+	      just excluded from the pipeline for the chunk for which
+	      it failed; the filter will not participate in the
+	      pipeline during an <code>H5Dread()</code> of the chunk.
+	      This is commonly used for compression filters: if the
+	      compression result would be larger than the input then
+	      the compression filter returns failure and the
+	      uncompressed data is stored in the file.  If this bit is
+	      clear and a filter fails then the
+	      <code>H5Dwrite()</code> or <code>H5Dread()</code> also
+	      fails.</td>
+	  </tr>
+	</table>
+      </center>
+
+    <h2>3. Defining Filters</h2>
+
+    <p>Each filter is bidirectional, handling both input and output to 
+      the file, and a flag is passed to the filter to indicate the
+      direction.  In either case the filter reads a chunk of data from 
+      a buffer, usually performs some sort of transformation on the
+      data, places the result in the same or new buffer, and returns
+      the buffer pointer and size to the caller. If something goes
+      wrong the filter should return zero to indicate a failure.
+
+    <p>During output, a filter that fails or isn't defined and is
+      marked as optional is silently excluded from the pipeline and
+      will not be used when reading that chunk of data.  A required
+      filter that fails or isn't defined causes the entire output
+      operation to fail. During input, any filter that has not been
+      excluded from the pipeline during output and fails or is not
+      defined will cause the entire input operation to fail.
+
+    <p>Filters are defined in two phases.  The first phase is to
+      define a function to act as the filter and link the function
+      into the application.  The second phase is to register the
+      function, associating the function with an
+      <code>H5Z_filter_t</code> identification number and a comment.
+
+    <dl>
+      <dt><code>typedef size_t (*H5Z_func_t)(unsigned int
+	  <em>flags</em>, size_t <em>cd_nelmts</em>, const unsigned int
+	  <em>cd_values</em>[], size_t <em>nbytes</em>, size_t
+	  *<em>buf_size</em>, void **<em>buf</em>)</code>
+      <dd>The <em>flags</em>, <em>cd_nelmts</em>, and
+	<em>cd_values</em> are the same as for the
+	<code>H5Pset_filter()</code> function with the additional flag
+	<code>H5Z_FLAG_REVERSE</code> which is set when the filter is
+	called as part of the input pipeline. The input buffer is
+	pointed to by <em>*buf</em> and has a total size of
+	<em>*buf_size</em> bytes but only <em>nbytes</em> are valid
+	data. The filter should perform the transformation in place if
+	possible and return the number of valid bytes or zero for
+	failure.  If the transformation cannot be done in place then
+	the filter should allocate a new buffer with
+	<code>malloc()</code> and assign it to <em>*buf</em>,
+	assigning the allocated size of that buffer to
+	<em>*buf_size</em>. The old buffer should be freed
+	by calling <code>free()</code>.
+
+	<br><br>
+      <dt><code>herr_t H5Zregister (H5Z_filter_t <em>filter_id</em>,
+	  const char *<em>comment</em>, H5Z_func_t
+	  <em>filter</em>)</code>
+      <dd>The <em>filter</em> function is associated with a filter
+	number and a short ASCII comment which will be stored in the
+	hdf5 file if the filter is used as part of a permanent
+	pipeline during dataset creation.
+    </dl>
+    
+      
+    <h2>4. Predefined Filters</h2>
+
+    <p>If <code>zlib</code> version 1.1.2 or later was found
+      during configuration then the library will define a filter whose
+      <code>H5Z_filter_t</code> number is
+      <code>H5Z_FILTER_DEFLATE</code>. Since this compression method
+      has the potential for generating compressed data which is larger
+      than the original, the <code>H5Z_FLAG_OPTIONAL</code> flag
+      should be turned on so such cases can be handled gracefully by
+      storing the original data instead of the compressed data.  The
+      <em>cd_nvalues</em> should be one with <em>cd_value[0]</em>
+      being a compression agression level between zero and nine,
+      inclusive (zero is the fastest compression while nine results in
+      the best compression ratio).
+
+    <p>A convenience function for adding the
+      <code>H5Z_FILTER_DEFLATE</code> filter to a pipeline is:
+
+    <dl>
+      <dt><code>herr_t H5Pset_deflate (hid_t <em>plist</em>, unsigned
+	  <em>aggression</em>)</code>
+      <dd>The deflate compression method is added to the end of the
+	permanent or transient filter pipeline depending on whether
+	<em>plist</em> is a dataset creation or dataset transfer
+	property list. The <em>aggression</em> is a number between
+	zero and nine (inclusive) to indicate the tradeoff between
+	speed and compression ratio (zero is fastest, nine is best
+	ratio).
+    </dl>
+
+    <p>Even if the <code>zlib</code> isn't detected during
+      configuration the application can define
+      <code>H5Z_FILTER_DEFLATE</code> as a permanent filter.  If the
+      filter is marked as optional (as with
+      <code>H5Pset_deflate()</code>) then it will always fail and be
+      automatically removed from the pipeline.  Applications that read
+      data will fail only if the data is actually compressed; they
+      won't fail if <code>H5Z_FILTER_DEFLATE</code> was part of the
+      permanent output pipeline but was automatically excluded because
+      it didn't exist when the data was written.
+
+    <p><code>zlib</code> can be acquired from 
+      <code><a href="http://www.cdrom.com/pub/infozip/zlib/">http://www.cdrom.com/pub/infozip/zlib/</a></code>.
+
+    <h2>5. Example</h2>
+
+    <p>This example shows how to define and register a simple filter
+      that adds a checksum capability to the data stream.
+
+    <p>The function that acts as the filter always returns zero
+      (failure) if the <code>md5()</code> function was not detected at 
+      configuration time (left as an excercise for the reader).
+      Otherwise the function is broken down to an input and output
+      half.  The output half calculates a checksum, increases the size 
+      of the output buffer if necessary, and appends the checksum to
+      the end of the buffer.  The input half calculates the checksum
+      on the first part of the buffer and compares it to the checksum
+      already stored at the end of the buffer.  If the two differ then 
+      zero (failure) is returned, otherwise the buffer size is reduced 
+      to exclude the checksum.
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <tr>
+	    <td>
+	      <p><code><pre>
+
+size_t
+md5_filter(unsigned int flags, size_t cd_nelmts,
+           const unsigned int cd_values[], size_t nbytes,
+           size_t *buf_size, void **buf)
+{
+#ifdef HAVE_MD5
+    unsigned char       cksum[16];
+
+    if (flags & H5Z_REVERSE) {
+        /* Input */
+        assert(nbytes>=16);
+        md5(nbytes-16, *buf, cksum);
+
+        /* Compare */
+        if (memcmp(cksum, (char*)(*buf)+nbytes-16, 16)) {
+            return 0; /*fail*/
+        }
+
+        /* Strip off checksum */
+        return nbytes-16;
+            
+    } else {
+        /* Output */
+        md5(nbytes, *buf, cksum);
+
+        /* Increase buffer size if necessary */
+        if (nbytes+16>*buf_size) {
+            *buf_size = nbytes + 16;
+            *buf = realloc(*buf, *buf_size);
+        }
+
+        /* Append checksum */
+        memcpy((char*)(*buf)+nbytes, cksum, 16);
+        return nbytes+16;
+    }
+#else
+    return 0; /*fail*/
+#endif
+}
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>Once the filter function is defined it must be registered so
+      the HDF5 library knows about it.  Since we're testing this
+      filter we choose one of the <code>H5Z_filter_t</code> numbers
+      from the reserved range.  We'll randomly choose 305.
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <tr>
+	    <td>
+	      <p><code><pre>
+
+#define FILTER_MD5 305
+herr_t status = H5Zregister(FILTER_MD5, "md5 checksum", md5_filter);
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>Now we can use the filter in a pipeline.  We could have added
+      the filter to the pipeline before defining or registering the
+      filter as long as the filter was defined and registered by time
+      we tried to use it (if the filter is marked as optional then we
+      could have used it without defining it and the library would
+      have automatically removed it from the pipeline for each chunk
+      written before the filter was defined and registered).
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <tr>
+	    <td>
+	      <p><code><pre>
+
+hid_t dcpl = H5Pcreate(H5P_DATASET_CREATE);
+hsize_t chunk_size[3] = {10,10,10};
+H5Pset_chunk(dcpl, 3, chunk_size);
+H5Pset_filter(dcpl, FILTER_MD5, 0, 0, NULL);
+hid_t dset = H5Dcreate(file, "dset", H5T_NATIVE_DOUBLE, space, dcpl);
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+    <h2>6. Filter Diagnostics</h2>
+
+    <p>If the library is compiled with debugging turned on for the H5Z
+      layer (usually as a result of <code>configure
+      --enable-debug=z</code>) then filter statistics are printed when
+      the application exits normally or the library is closed.  The
+      statistics are written to the standard error stream and include
+      two lines for each filter that was used: one for input and one
+      for output.  The following fields are displayed:
+
+    <p>
+      <center>
+	<table align=center width="80%">
+	  <tr>
+	    <th width="30%">Field Name</th>
+	    <th width="70%">Description</th>
+	  </tr>
+
+	  <tr valign=top>
+	    <td>Method</td>
+	    <td>This is the name of the method as defined with
+	      <code>H5Zregister()</code> with the charaters
+	      &quot;&lt; or &quot;&gt;&quot; prepended to indicate
+	      input or output.</td>
+	  </tr>
+
+	  <tr valign=top>
+	    <td>Total</td>
+	    <td>The total number of bytes processed by the filter
+	      including errors.  This is the maximum of the
+	      <em>nbytes</em> argument or the return value.
+	  </tr>
+
+	  <tr valign=top>
+	    <td>Errors</td>
+	    <td>This field shows the number of bytes of the Total
+	      column which can be attributed to errors.</td>
+	  </tr>
+
+	  <tr valign=top>
+	    <td>User, System, Elapsed</td>
+	    <td>These are the amount of user time, system time, and
+	      elapsed time in seconds spent in the filter function.
+	      Elapsed time is sensitive to system load. These times
+	      may be zero on operating systems that don't support the
+	      required operations.</td>
+	  </tr>
+
+	  <tr valign=top>
+	    <td>Bandwidth</td>
+	    <td>This is the filter bandwidth which is the total
+	      number of bytes processed divided by elapsed time.
+	      Since elapsed time is subject to system load the
+	      bandwidth numbers cannot always be trusted.
+	      Furthermore, the bandwidth includes bytes attributed to
+	      errors which may significanly taint the value if the
+	      function is able to detect errors without much
+	      expense.</td>
+	  </tr>
+	</table>
+      </center>
+
+    <p>
+      <center>
+	<table border align=center width="100%">
+	  <caption align=bottom>
+	    <b>Example: Filter Statistics</b>
+	  </caption>
+	  <tr>
+	    <td>
+	      <p><code><pre>
+H5Z: filter statistics accumulated over life of library:
+   Method     Total  Errors  User  System  Elapsed Bandwidth
+   ------     -----  ------  ----  ------  ------- ---------
+   >deflate  160000   40000  0.62    0.74     1.33 117.5 kBs
+   &lt;deflate  120000       0  0.11    0.00     0.12 1.000 MBs
+	      </pre></code>
+	    </td>
+	  </tr>
+	</table>
+      </center>
+
+
+<hr>
+
+
+    <p><a name="fn1">Footnote 1:</a> Dataset chunks can be compressed 
+     through the use of filters.  Developers should be aware that 
+     reading and rewriting compressed chunked data can result in holes 
+     in an HDF5 file.  In time, enough such holes can increase the 
+     file size enough to impair application or library performance 
+     when working with that file.  See
+     &ldquo;<a href="Performance.html#Freespace">Freespace Management</a>&rdquo;
+     in the chapter
+     &ldquo;<a href="Performance.html">Performance Analysis and Issues</a>.&rdquo;</p>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+<!-- Created: Fri Apr 17 13:39:35 EDT 1998 -->
+<!-- hhmts start -->
+Last modified: 2 August 2001 
+<!-- hhmts end -->
+
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Glossary.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Glossary.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Glossary.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,579 @@
+<html><head><title>
+HDF5 Glossary
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_Gen.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/GenElect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+    <a href="ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>HDF5 Glossary</h1>
+</center>
+
+<center>
+<table width=90% border=0>
+<tr><td valign=top align=left width=33%>
+<dl>
+    <dt><a href="#Glossary-AtomicDType">atomic datatype</a>
+    <dt><a href="#Glossary-Attribute">attribute</a>
+<!--<dt><a href="#Glossary-BasicDType">basic datatype</a>-->
+    <dt><a href="#Glossary-LayoutChunked">chunked layout</a>
+    <dt><a href="#Glossary-Chunking">chunking</a>
+<!--<dt><a href="#Glossary-ComplexDType">complex datatype</a>-->
+    <dt><a href="#Glossary-CompoundDType">compound datatype</a>
+<!--<dt>compound element-->
+    <dt><a href="#Glossary-LayoutContig">contiguous layout</a>
+<!--<dt>conversion function-->
+    <dt><a href="#Glossary-Dataset">dataset</a>
+    <dt><a href="#Glossary-Dataspace">dataspace</a>
+<!--<dl>-->
+<!--    <dt>dimensions-->
+<!--    <dt>selection-->
+<!--</dl>-->
+    <dt><a href="#Glossary-Datatype">datatype</a>
+    <dl>
+        <dt><a href="#Glossary-AtomicDType">atomic</a>
+<!--    <dt><a href="#Glossary-BasicDType">basic</a>-->
+<!--    <dt><a href="#Glossary-ComplexDType">complex</a>-->
+        <dt><a href="#Glossary-CompoundDType">compound</a>
+<!--    <dt>conversion function-->
+<!--    <dt><a href="#Glossary-DiskIO">disk I/O</a>-->
+        <dt><a href="#Glossary-DTypeEnum">enumeration</a>
+        <dt><a href="#Glossary-DTypeNamed">named</a>
+        <dt><a href="#Glossary-DTypeOpaque">opaque</a>
+<!--    <dt>transient-->
+        <dt><a href="#Glossary-DTypeVLen">variable-length</a>
+    </dl>
+<!--<dt>DDL-->
+<!--<dt>dimensions-->
+<!--<dt><a href="#Glossary-DiskIO">disk I/O datatype</a>-->
+<!--<dt>element-->
+    <dt><a href="#Glossary-DTypeEnum">enumeration datatype</a>
+    <dt><a href="#Glossary-File">file</a>
+    <dl>
+<!--    <dt>compound element-->
+<!--    <dt>element-->
+        <dt><a href="#Glossary-Group">group</a>
+        <dt><a href="#Glossary-Path">path</a>
+        <dt><a href="#Glossary-RootGroup">root group</a>
+        <dt><a href="#Glossary-SuperBlock">super block</a>
+    </dl>
+</dl>
+</td>
+<td valign=top align=left width=34%>
+<dl>
+    <dt><a href="#Glossary-FileAccessMode">file access mode</a>
+    <dt><a href="#Glossary-Group">group</a>
+    <dl>
+<!--    <dt>element-->
+        <dt><a href="#Glossary-GroupMember">member</a>
+        <dt><a href="#Glossary-RootGroup">root group</a>
+    </dl>
+    <dt><a href="#Glossary-LinkHard">hard link</a>
+<!--<dt>HDF5-->
+    <dt><a href="#Glossary-Hyperslab">hyperslab</a>
+    <dt><a href="#Glossary-Identifier">identifier</a>
+    <dt><a href="#Glossary-Link">link</a>
+    <dl>
+        <dt><a href="#Glossary-LinkHard">hard</a>
+        <dt><a href="#Glossary-LinkSoft">soft</a>
+<!--    <dt><a href="#Glossary-LinkSoftName">soft link name</a>-->
+<!--    <dt>target-->
+    </dl>
+    <dt><a href="#Glossary-GroupMember">member</a>
+    <dt><a href="#Glossary-Name">name</a>
+    <dt><a href="#Glossary-DTypeNamed">named datatype</a>
+    <dt><a href="#Glossary-DTypeOpaque">opaque datatype</a>
+    <dt><a href="#Glossary-Path">path</a>
+<!--<dt>parallel I/O-->
+    <dt><a href="#Glossary-PList">property list</a>
+    <dl>
+        <dt><a href="#Glossary-PListDataTransfer">data transfer</a>
+        <dt><a href="#Glossary-PListDSetAccess">dataset access</a>
+        <dt><a href="#Glossary-PListDSetCreate">dataset creation</a>
+        <dt><a href="#Glossary-PListFileAccess">file access</a>
+        <dt><a href="#Glossary-PListFileCreate">file creation</a>
+    </dl>
+</dl>
+</td>
+<td valign=top align=left width=33%>
+<dl>
+    <dt><a href="#Glossary-RootGroup">root group</a>
+    <dt><a href="#Glossary-Selection">selection</a>
+    <dl>
+        <dt><a href="#Glossary-Hyperslab">hyperslab</a>
+<!--    <dt>point-->
+    </dl>
+    <dt><a href="#Glossary-Serialization">serialization</a>
+    <dt><a href="#Glossary-LinkSoft">soft link</a>
+<!--<dt><a href="#Glossary-LinkSoftName">soft link name</a>-->
+    <dt><a href="#Glossary-StorageLayout">storage layout</a>
+    <dl>
+        <dt><a href="#Glossary-LayoutChunked">chunked</a>
+        <dt><a href="#Glossary-Chunking">chunking</a>
+        <dt><a href="#Glossary-LayoutContig">contiguous</a>
+    </dl>
+    <dt><a href="#Glossary-SuperBlock">super block</a>
+<!--<dt>target-->
+<!--<dt>threadsafe-->
+<!--<dt>transient datatype-->
+    <dt><a href="#Glossary-DTypeVLen">variable-length datatype</a>
+</dl>
+</td></tr>
+</table>
+</center>
+
+<hr>
+
+
+<DL>
+
+<dt><strong><a name="Glossary-AtomicDType">atomic datatype</a></strong>
+    <dd>A datatype which cannot be decomposed into smaller units at the 
+       API level. 
+<P>
+
+<DT><a name="Glossary-Attribute"><B>attribute</B></a>
+<DD>A small dataset that can be used to describe the nature and/or 
+    the intended usage of the object it is attached to.
+<P>
+
+<!--
+<dt><strong><a name="Glossary-Basic">basic datatypes</a></strong>
+    <ul>
+        <li>char     - 8-bit character (only for ASCII information)
+        <li>int8     - 8-bit signed integer
+        <li>uint8    - 8-bit unsigned integer
+        <li>int16    - 16-bit signed integer
+        <li>uint16   - 16-bit unsigned integer
+        <li>int32    - 32-bit signed integer
+        <li>uint32   - 32-bit unsigned integer
+        <li>intn     - "native" signed integer
+        <li>uintn    - "native" unsigned integer
+        <li>int64    - 64-bit signed integer (new)
+        <li>uint64   - 64-bit unsigned integer (new)
+        <li>float32  - 32-bit IEEE float
+        <li>float64  - 64-bit IEEE float
+    </ul>
+<P>
+-->
+
+<dt><strong><a name="Glossary-LayoutChunked">chunked layout</a></strong>
+<dd>The storage layout of a chunked dataset.
+<P>
+
+<dt><strong><a name="Glossary-Chunking">chunking</a></strong>
+<dd>A storage layout where a dataset is partitioned into fixed-size 
+    multi-dimensional chunks.  Chunking tends to improve performance
+    and facilitates dataset extensibility.
+<P>
+
+<dt><strong><a name="Glossary-CompoundDType">compound datatype</a></strong>
+<dd>A collection of one or more atomic types or small arrays of such types.
+    Similar to a struct in C or a common block in Fortran.
+<P>
+
+<!--
+<dt><strong><a name="Glossary-ComplexDType">complex datatype</a></strong>
+<dd>A collection of one or more atomic types or small arrays of such types.
+    <ul>
+        <li>hid_t   - 32-bit unsigned integer used as ID for memory objects
+        <li>hoid_t  - 32-bit unsigned integer (currently) used as ID for 
+            disk-based objects
+        <li>hbool_t - boolean to indicate true/false/error codes from functions
+        <li>herr_t  - 32-bit integer to indicate succeed/fail codes from 
+            functions
+    </ul>
+<P>
+-->
+
+<dt><strong><a name="Glossary-LayoutContig">contiguous layout</a></strong>
+<dd>The storage layout of a dataset that is not chunked, so that the entire
+    data portion of the dataset is stored in a single contiguous block.
+<P>
+
+<DT><B><a name="Glossary-PListDataTransfer">data transfer property list</a></B>
+<DD>The data transfer property list is used to control various aspects 
+    of the I/O, such as caching hints or collective I/O information.
+<P>
+
+<DT><B><a name="Glossary-Dataset">dataset</a></B>
+<DD>A multi-dimensional array of data elements, together with 
+    supporting metadata. 
+<P>
+
+<!-- NEW PAGE -->
+<DT><B><a name="Glossary-PListDSetAccess">dataset access property list</a></B>
+<DD>A property list containing information on how a dataset is to be accessed.
+<P>
+
+<DT><B><a name="Glossary-PListDSetCreate">dataset creation property list</a></B>
+<DD>A property list containing information on how 
+    raw data is organized on disk and how the raw data is compressed.
+<!--
+    The dataset API partitions these terms by layout, compression,
+    and external storage:
+    <UL>
+    <B> Layout:</B>
+    <UL>
+    <LI>H5D_COMPACT: Data is small and can be stored in object header (not
+        implemented yet).  This eliminates disk seek/read requests.
+    <LI>H5D_CONTIGUOUS: (<B>default</B>) The data is large, non-extendible, 
+        non-compressible, non-sparse, and can be stored externally.
+    <LI>H5D_CHUNKED:  The data is large and can be extended in any dimension.
+        It is partitioned into chunks so each chunk is the same logical size. 
+    </UL>
+    <B>Compression:</B>  (gzip compression)<BR>
+    <B>External Storage Properties:</B>  The data must be contiguous to be 
+       stored externally. It allows you to store 
+       the data in one or more non-HDF5 files.
+    </UL>
+-->
+<P>
+
+<DT><B><a name="Glossary-Dataspace">dataspace</a></B>
+<DD>An object that describes the dimensionality of the data array. 
+    A dataspace is either a regular N-dimensional array of data points, 
+    called a simple dataspace, or a more general collection of data points 
+    organized in another manner, called a complex dataspace.
+<P>
+
+<DT><B><a name="Glossary-Datatype">datatype</a></B>
+<DD>An object that describes the storage format of the individual data 
+    points of a data set.
+    There are two categories of datatypes: atomic and compound datatypes.
+    An atomic type is a type which cannot be decomposed into smaller 
+    units at the API level. A compound datatype is a collection of one or 
+    more atomic types or small arrays of such types.
+<P>
+
+<!--
+<DT><B>DDL</B>         
+<DD>A detailed description of the HDF5 format and objects, written in a 
+    Data Description Language using Backus-Naur Form.
+<P>
+-->
+
+<!--
+<dt><strong><a name="Glossary-DiskIO">disk I/O datatypes</a></strong>
+<ul>
+    <li>hoff_t  - (64-bit?) offset on disk in bytes
+    <li>hlen_t  - (64-bit?) length on disk in bytes
+</ul>
+<P>
+-->
+
+<dt><strong><a name="Glossary-DTypeEnum">enumeration datatype</a></strong>         
+<dd>A one-to-one mapping between a set of symbols and a set of 
+    integer values, and an order is imposed on the symbols by their 
+    integer values. The symbols are passed between the application 
+    and library as character strings and all the values for a 
+    particular enumeration datatype are of the same integer type, 
+    which is not necessarily a native type.
+<P>
+
+<DT><B><a name="Glossary-File">file</a></B>
+<DD>A container for storing grouped collections of 
+    multi-dimensional arrays containing scientific data. 
+<P>
+
+<DT><B><a name="Glossary-FileAccessMode">file access mode</a></B>
+<DD>Determines whether an existing file will be overwritten,
+    opened for read-only access, or opened for read/write access.  
+    All newly created files are opened for both reading and
+    writing.  
+<!--
+    Possible values are:
+    <PRE>
+      H5F_ACC_RDWR:   Allow read and write access to file. 
+      H5F_ACC_RDONLY: Allow read-only access to file. 
+      H5F_ACC_TRUNC:  Truncate file, if it already exists, erasing all data 
+                      previously stored in the file. 
+      H5F_ACC_EXCL:   Fail if file already exists. 
+      H5F_ACC_DEBUG:  Print debug information. 
+      H5P_DEFAULT:    Apply default file access and creation properties. 
+    </PRE>
+-->
+<P>
+
+<DT><B><a name="Glossary-PListFileAccess">file access property list</a></B>
+<DD>File access property lists are used to control different methods 
+    of performing I/O on files:
+<!--
+    <UL>
+    <B>Unbuffered I/O:</B> Local permanent files can be accessed with the 
+       functions described in Section 2 of the Posix manual, namely open(), 
+       lseek(), read(), write(), and close(). <BR>
+    <B>Buffered I/O:</B> Local permanent files can be accessed with the 
+       functions declared in the stdio.h header file, namely fopen(), 
+       fseek(), fread(), fwrite(), and fclose().<BR>
+    <B>Memory I/O:</B> Local temporary files can be created and accessed 
+       directly from memory without ever creating permanent storage. 
+       The library uses malloc() and free() to create storage space for the 
+       file<BR>
+    <B>Parallel Files using MPI I/O:</B> This driver allows parallel access 
+       to a file through the MPI I/O library. The parameters which can be 
+       modified are the MPI communicator, the info object, and the access mode.
+       The communicator and info object are saved and then passed to 
+       MPI_File_open() during file creation or open. The access_mode 
+       controls the kind of parallel access the application intends.<BR> 
+    <B>Data Alignment:</B> Sometimes file access is faster if certain things 
+       are aligned on file blocks. This can be controlled by setting alignment
+       properties of a file access property list with the H5Pset_alignment() 
+       function. 
+    </UL>
+-->
+<P>
+
+<DT><B><a name="Glossary-PListFileCreate">file creation property list</a></B>
+<DD>The property list used to control file metadata. 
+<!--
+    The parameters that can be modified are:
+    <UL>
+    <B>User-Block Size:</B> The "user-block" is a fixed length block 
+       of data located at the beginning of the file which is ignored 
+       by the HDF5 library and may be used to store any data information 
+       found to be useful to applications. 
+    <BR>
+    <B>Offset and Length Sizes:</B> The number of bytes used to store the
+       offset and length of objects in the HDF5 file can be controlled 
+       with this parameter. 
+    <BR>
+    <b>Symbol Table Parameters:</b> The size of symbol table B-trees can 
+       be controlled by setting the 1/2 rank and 1/2 node size 
+       parameters of the B-tree. 
+    <BR>
+    <B>Indexed Storage Parameters:</B> The size of indexed storage 
+       B-trees can be controlled by setting the 1/2 rank and 1/2 node 
+       size parameters of the B-tree.
+    </UL>
+-->
+<P>
+
+<DT><B><a name="Glossary-Group">group</a></B>
+<DD>A structure containing zero or more HDF5 objects, 
+    together with supporting metadata. 
+    The two primary HDF5 objects are datasets and groups.
+<P>
+
+<dt><strong><a name="Glossary-LinkHard">hard link</a></strong>
+<dd>A direct association between a name and the object where both exist 
+    in a single HDF5 address space.
+<P>
+
+<!--
+<DT><B>HDF5</B> 
+<DD>HDF5 is an abbreviation for Hierarchical Data Format Version 5. 
+    This file format is intended to make it easy to write and read 
+    scientific data
+    <P>
+    <UL>
+    <LI>by including the information needed to understand the data 
+        within the file
+    <P>
+    <LI>by providing a library of C, FORTRAN, and other language 
+        programs that reduce the work required to provide efficient 
+        writing and reading - even with parallel IO
+    </UL>
+<P>
+-->
+
+<DT><B><a name="Glossary-Hyperslab">hyperslab</a></B>
+<DD>A portion of a dataset. A hyperslab selection can be a 
+    logically contiguous collection of points in a dataspace or
+    a regular pattern of points or blocks in a dataspace. 
+<P>
+
+<dt><strong><a name="Glossary-Identifier">identifier</a></strong>
+<dd>A unique entity provided by the HDF5 library and used to access
+    an HDF5 object, such as a file, goup, dataset, datatype, etc.
+<P>
+
+<dt><strong><a name="Glossary-Link">link</a></strong>
+<dd>An association between a name and the object in an HDF5 file group.
+<P>
+
+<dt><strong><a name="Glossary-GroupMember">member</a></strong>
+<dd>A group or dataset that is in another dataset, <i>dataset A</i>,
+    is a member of <i>dataset A</i>.
+<P>
+
+<DT><B><a name="Glossary-Name">name</a></B>
+<DD>A slash-separated list of components that uniquely identifies an 
+    element of an HDF5 file.  A name begins that begins with a slash 
+    is an absolute name which is accessed beginning with the root group 
+    of the file; all other names are relative names and the associated
+    objects are accessed beginning with the current or specified group.
+<P>
+
+<dt><strong><a name="Glossary-DTypeNamed">named datatype</a></strong>
+<dd>A datatype that is named and stored in a file.  Naming is permanent;
+    a datatype cannot be changed after being named.
+<P>
+
+<dt><strong><a name="Glossary-DTypeOpaque">opaque datatype</a></strong>
+<dd>A mechanism for describing data which cannot be otherwise described 
+    by HDF5. The only properties associated with opaque types are a 
+    size in bytes and an ASCII tag.
+<P>
+
+<!--
+<DT><B>parallel I/O HDF5</B>
+<DD>The parallel I/O version of HDF5 supports parallel file access using 
+    MPI (Message Passing Interface).  
+<P> 
+-->
+
+<dt><strong><a name="Glossary-Path">path</a></strong>
+<dd>The slash-separated list of components that forms the name 
+    uniquely identifying an element of an HDF5 file.
+<P>
+
+<dt><strong><a name="Glossary-PList">property list</a></strong>
+<dd>A collection of name/value pairs that can be passed to other 
+    HDF5 functions to control features that are typically unimportant 
+    or whose default values are usually used. 
+<P>
+
+<dt><strong><a name="Glossary-RootGroup">root group</a></strong>
+<dd>The group that is the entry point to the group graph in an HDF5 file.
+    Every HDF5 file has exactly one root group.
+<P>
+
+<dt><strong><a name="Glossary-Selection">selection</a></strong>
+<dd>(1) A subset of a dataset or a dataspace, up to the entire dataset or 
+    dataspace.
+    (2) The elements of an array or dataset that are marked for I/O.
+<P>
+
+<dt><strong><a name="Glossary-Serialization">serialization</a></strong>
+<dd>The flattening of an <em>N</em>-dimensional data object into a 
+    1-dimensional object so that, for example, the data object can be 
+    transmitted over the network as a 1-dimensional bitstream.
+<P>
+
+<dt><strong><a name="Glossary-LinkSoft">soft link</a></strong>
+<dd>An indirect association between a name and an object in an 
+    HDF5 file group.
+<P>
+
+<dt><strong><a name="Glossary-StorageLayout">storage layout</a></strong>
+<dd>The manner in which a dataset is stored, either contiguous or
+    chunked, in the HDF5 file.
+<P>
+
+<DT><B><a name="Glossary-SuperBlock">super block</a></B>
+<DD>A block of data containing the information required to portably access 
+    HDF5 files on multiple platforms, followed by information about the groups 
+    and datasets in the file. 
+    The super block contains information about the size of offsets, 
+    lengths of objects, the number of entries in group tables,
+    and additional version information for the file. 
+<P>
+
+<!--
+<DT><B>threadsafe</B>
+<DD>A "thread-safe" version of HDF-5 (TSHDF5) is one that can be called 
+    from any thread of a multi-threaded program. Any calls to HDF
+    can be made in any order, and each individual HDF call will perform 
+    correctly. A calling program does not have to explicitly lock the HDF
+    library in order to do I/O. Applications programmers may assume that 
+    the TSHDF5 guarantees the following: 
+    <UL>
+        <LI>the HDF-5 library does not create or destroy threads. 
+        <LI>the HDF-5 library uses modest amounts of per-thread 
+          private memory. 
+        <LI>the HDF-5 library only locks/unlocks it's own locks (no locks 
+          are passed in or returned from HDF), and the internal locking 
+          is guaranteed to be deadlock free. 
+    </UL>
+    <P>
+    These properties mean that the TSHDF5 library will not interfere 
+    with an application's use of threads. A TSHDF5 library is the same
+    library as regular HDF-5 library, with additional code to synchronize 
+    access to the HDF-5 library's internal data structures. 
+<P>
+-->
+
+<dt><strong><a name="Glossary-DTypeVLen">variable-length datatype</a></strong>
+<dd>A sequence of an existing datatype (atomic, variable-length (VL), 
+    or compound) which are not fixed in length from one dataset location 
+    to another.
+<P>
+
+</DL>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+    <a href="ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 18 October 1999");
+-->
+</SCRIPT> 
+ 
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Graphics/C++.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Graphics/C++.gif
___________________________________________________________________
Name: svn:executable
   + 
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Graphics/Dependencies
===================================================================

Added: packages/hdf5/branches/upstream/current/doc/html/Graphics/FORTRAN.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Graphics/FORTRAN.gif
___________________________________________________________________
Name: svn:executable
   + 
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Graphics/Java.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Graphics/Java.gif
___________________________________________________________________
Name: svn:executable
   + 
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Graphics/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Graphics/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Graphics/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,37 @@
+# HDF5 Library Makefile(.in)
+#
+# 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.
+#
+# 
+top_srcdir=@top_srcdir@
+top_builddir=../../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+SUBDIRS=
+DOCDIR=$(docdir)/hdf5/Graphics
+
+TRACE=perl $(top_srcdir)/bin/trace
+
+# Temporary files
+MOSTLYCLEAN=
+
+# Public doc files (to be installed)...
+PUB_DOCS=C++.gif FORTRAN.gif Java.gif OtherAPIs.gif
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/Graphics/OtherAPIs.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Graphics/OtherAPIs.gif
___________________________________________________________________
Name: svn:executable
   + 
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Groups.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Groups.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Groups.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,407 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Group Interface (H5G)</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>The Group Interface (H5G)</h1>
+
+    <h2>1. Introduction</h2>
+
+    <p>An object in HDF5 consists of an object header at a fixed file
+      address that contains messages describing various properties of
+      the object such as its storage location, layout, compression,
+      etc. and some of these messages point to other data such as the
+      raw data of a dataset. The address of the object header is also
+      known as an <em>OID</em> and HDF5 has facilities for translating
+      names to OIDs.
+
+    <p>Every HDF5 object has at least one name and a set of names can
+      be stored together in a group.  Each group implements a name
+      space where the names are any length and unique with respect to
+      other names in the group.
+
+    <p>Since a group is a type of HDF5 object it has an object header
+      and a name which exists as a member of some other group. In this
+      way, groups can be linked together to form a directed graph.
+      One particular group is called the <em>Root Group</em> and is
+      the group to which the HDF5 file super block points.  Its name is
+      "/" by convention.  The <em>full name</em> of an object is
+      created by joining component names with slashes much like Unix.
+
+    <p>
+      <center>
+	<img alt="Group Graph Example" src="group_p1.gif">
+      </center>
+
+    <p>However, unlike Unix which arranges directories hierarchically,
+      HDF5 arranges groups in a directed graph.  Therefore, there is
+      no ".." entry in a group since a group can have more than one
+      parent. There is no "." entry either but the library understands
+      it internally.
+
+    <h2>2. Names</h2>
+
+    <p>HDF5 places few restrictions on names: component names may be
+      any length except zero and may contain any character except
+      slash ("/") and the null terminator.  A full name may be
+      composed of any number of component names separated by slashes,
+      with any of the component names being the special name ".".  A
+      name which begins with a slash is an <em>absolute</em> name
+      which is looked up beginning at the root group of the file while
+      all other <em>relative</em> names are looked up beginning at the
+      specified group.
+      Multiple consecutive slashes in a full name are treated as
+      single slashes and trailing slashes are not significant.  A
+      special case is the name "/" (or equivalent) which refers to the
+      root group.
+
+    <p>Functions which operate on names generally take a location
+      identifier which is either a file ID or a group ID and perform
+      the lookup with respect to that location.  Some possibilities
+      are:
+
+    <p>
+      <center>
+	<table border cellpadding=4>
+	  <tr>
+	    <th>Location Type</th>
+	    <th>Object Name</th>
+	    <th>Description</th>
+	  </tr>
+
+	  <tr>
+	    <td>File ID</td>
+	    <td><code>/foo/bar</code></td>
+	    <td>The object <code>bar</code> in group <code>foo</code>
+	      in the root group.</td>
+	  </tr>
+
+	  <tr>
+	    <td>Group ID</td>
+	    <td><code>/foo/bar</code></td>
+	    <td>The object <code>bar</code> in group <code>foo</code>
+	      in the root group of the file containing the specified
+	      group.  In other words, the group ID's only purpose is
+	      to supply a file.</td>
+	  </tr>
+
+	  <tr>
+	    <td>File ID</td>
+	    <td><code>/</code></td>
+	    <td>The root group of the specified file.</td>
+	  </tr>
+
+	  <tr>
+	    <td>Group ID</td>
+	    <td><code>/</code></td>
+	    <td>The root group of the file containing the specified
+	      group.</td>
+	  </tr>
+
+	  <tr>
+	    <td>File ID</td>
+	    <td><code>foo/bar</code></td>
+	    <td>The object <code>bar</code> in group <code>foo</code>
+	      in the specified group.</td>
+	  </tr>
+
+	  <tr>
+	    <td>Group ID</td>
+	    <td><code>foo/bar</code></td>
+	    <td>The object <code>bar</code> in group <code>foo</code>
+	      in the specified group.</td>
+	  </tr>
+
+	  <tr>
+	    <td>File ID</td>
+	    <td><code>.</code></td>
+	    <td>The root group of the file.</td>
+	  </tr>
+
+	  <tr>
+	    <td>Group ID</td>
+	    <td><code>.</code></td>
+	    <td>The specified group.</td>
+	  </tr>
+
+	  <tr>
+	    <td>Other ID</td>
+	    <td><code>.</code></td>
+	    <td>The specified object.</td>
+	  </tr>
+
+	</table>
+      </center>
+
+    <p>Note, however, that object names within a group must be unique. 
+       For example, <code>H5Dcreate</code> returns an error if a 
+       dataset with the dataset name specified in the parameter list
+       already exists at the location specified in the parameter list.
+
+
+    <h2>3. Creating, Opening, and Closing Groups</h2>
+
+    <p>Groups are created with the <code>H5Gcreate()</code> function,
+      and existing groups can be access with
+      <code>H5Gopen()</code>. Both functions return an object ID which
+      should be eventually released by calling
+      <code>H5Gclose()</code>.
+
+    <dl>
+      <dt><code>hid_t H5Gcreate (hid_t <em>location_id</em>, const char
+	  *<em>name</em>, size_t <em>size_hint</em>)</code>
+      <dd>This function creates a new group with the specified
+	name at the specified location which is either a file ID or a
+	group ID.  The name must not already be taken by some other
+	object and all parent groups must already exist.  The
+	<em>size_hint</em> is a hint for the number of bytes to
+	reserve to store the names which will be eventually added to
+	the new group.  Passing a value of zero for <em>size_hint</em>
+	is usually adequate since the library is able to dynamically
+	resize the name heap, but a correct hint may result in better
+	performance.  The return value is a handle for the open group
+	and it should be closed by calling <code>H5Gclose()</code>
+	when it's no longer needed. A negative value is returned for
+	failure.
+
+	<br><br>
+      <dt><code>hid_t H5Gopen (hid_t <em>location_id</em>, const char
+	  *<em>name</em>)</code>
+      <dd>This function opens an existing group with the specified
+	name at the specified location which is either a file ID or a
+	group ID and returns an object ID.  The object ID should be
+	released by calling <code>H5Gclose()</code> when it is no
+	longer needed.  A negative value is returned for failure.
+
+	<br><br>
+      <dt><code>herr_t H5Gclose (hid_t <em>group_id</em>)</code>
+      <dd>This function releases resources used by an group which was
+	opened by <code>H5Gcreate()</code> or
+	<code>H5Gopen()</code>. After closing a group the
+	<em>group_id</em> should not be used again.  This function
+	returns zero for success or a negative value for failure.
+    </dl>
+
+    <h2>4. Objects with Multiple Names</h2>
+
+    <p>An object (including a group) can have more than one
+      name. Creating the object gives it the first name, and then
+      functions described here can be used to give it additional
+      names.  The association between a name and the object is called
+      a <em>link</em> and HDF5 supports two types of links: a <em>hard
+      link</em> is a direct association between the name and the
+      object where both exist in a single HDF5 address space, and a
+      <em>soft link</em> is an indirect association.
+
+    <p>
+      <center>
+	<img alt="Hard Link Example" src="group_p2.gif">
+      </center>
+
+    <p>
+      <center>
+	<img alt="Soft Link Example" src="group_p3.gif">
+      </center>
+
+    <dl>
+      <dt>Object Creation</dt>
+      <dd>The creation of an object creates a hard link which is
+	indistinguishable from other hard links that might be added
+	later.
+
+	<br><br>
+      <dt><code>herr_t H5Glink (hid_t <em>file_id</em>, H5G_link_t
+	  <em>link_type</em>, const char *<em>current_name</em>,
+	  const char *<em>new_name</em>)</code>
+      <dd>Creates a new name for an object that has some current name
+	(possibly one of many names it currently has).  If the
+	<em>link_type</em> is <code>H5G_LINK_HARD</code> then a new
+	hard link is created.  Otherwise if <em>link_type</em> is
+	<code>H5T_LINK_SOFT</code> a soft link is created which is an
+	alias for the <em>current_name</em>.  When creating a soft
+	link the object need not exist.  This function returns zero
+	for success or negative for failure. 
+
+	<br><br>
+      <dt><code>herr_t H5Gunlink (hid_t <em>file_id</em>, const char
+	  *<em>name</em>)</code>
+      <dd>This function removes an association between a name and an
+	object. Object headers keep track of how many hard links refer
+	to the object and when the hard link count reaches zero the
+	object can be removed from the file (but objects which are
+	open are not removed until all handles to the object are
+	closed).  
+    </dl>
+
+    <h2>5. Comments</h2>
+
+    <p>Objects can have a comment associated with them.  The comment
+      is set and queried with these two functions:
+
+    <dl>
+      <dt><code>herr_t H5Gset_comment (hid_t <em>loc_id</em>, const
+	  char *<em>name</em>, const char *<em>comment</em>)</code>
+      <dd>The previous comment (if any) for the specified object is
+	replace with a new comment.  If the <em>comment</em> argument
+	is the empty string or a null pointer then the comment message 
+	is removed from the object.  Comments should be relatively
+	short, null-terminated, ASCII strings.
+
+	<br><br>
+      <dt><code>herr_t H5Gget_comment (hid_t <em>loc_id</em>, const
+	  char *<em>name</em>, size_t <em>bufsize</em>, char
+	  *<em>comment</em>)</code>
+      <dd>The comment string for an object is returned through the
+	<em>comment</em> buffer.  At most <em>bufsize</em> characters
+	including a null terminator are copied, and the result is
+	not null terminated if the comment is longer than the supplied 
+	buffer.  If an object doesn't have a comment then the empty
+	string is returned.
+    </dl>
+
+    <a name="H5GUnlinkToCorrupt">
+    <h2>6. Unlinking Datasets with H5Gmove and H5Gunlink</h2>
+    </a>
+
+    <p>Exercise caution in the use of <code>H5Gmove</code> and 
+       <code>H5Gunlink</code>.
+
+    <p>Note that <code>H5Gmove</code> and <code>H5Gunlink</code>
+       each include a step that unlinks pointers to a set or group.
+       If the link that is removed is on the only path leading 
+       to a dataset or group, that dataset or group will become 
+       inaccessible in the file.
+
+    <p>Consider the following example.  Assume that the group
+       <code>group2</code> can only be accessed via the following path,
+       where <code>top_group</code> is a member of the file's root group:
+       <pre>
+              <code>/top_group/group1/group2/</code> </pre>
+       Using <code>H5Gmove</code>, <code>top_group</code> is renamed
+       to be a member of <code>group2</code>.  At this point, since 
+       <code>top_group</code> was the only route from the root group 
+       to <code>group1</code>, there is no longer a path by which 
+       one can access <code>group1</code>, <code>group2</code>, or 
+       any member datasets.
+       <code>top_group</code> and any member datasets have also 
+       become inaccessible.</p>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+<!-- Created: Tue Jan 27 09:11:27 EST 1998 -->
+<!-- hhmts start -->
+Last modified: 1 November 2000 
+<!-- hhmts end -->
+
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/H5.api_map.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/H5.api_map.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/H5.api_map.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,849 @@
+<html><head><title>
+HDF5 Legacy API Equivalence
+</title></head><body>
+
+<center>
+<h1>HDF5: API Mapping to legacy APIs</h1>
+</center>
+
+<table border=1 cellpadding=2 cellspacing=0>
+<tr>
+<th>Functionality</th>
+<th>netCDF</th>
+<th>SD</th>
+<th>AIO</th>
+<th>HDF5</th>
+<th>Comments</th>
+</tr>
+
+<tr align=center>
+<td>Open existing file for read/write</td>
+<td>ncopen</td>
+<td>SDstart</td>
+<td>AIO_open</td>
+<td>H5Fopen</td>
+</tr>
+
+<tr align=center>
+<td>Creates new file for read/write.</td>
+<td>nccreate</td>
+<td><hr></td>
+<td><hr></td>
+<td>H5Fcreate</td>
+<td>SD API handles this with SDopen</td>
+</tr>
+
+<tr align=center>
+<td>Close file</td>
+<td>ncclose</td>
+<td>SDend</td>
+<td>AIO_close</td>
+<td>H5Fclose</td>
+</tr>
+
+<tr align=center>
+<td>Redefine parameters</td>
+<td>ncredef</td>
+<td><hr></td>
+<td><hr></td>
+<td><hr></td>
+<td>Unneccessary under SD & HDF5 data-models</td>
+</tr>
+
+<tr align=center>
+<td>End "define" mode</td>
+<td>ncendef</td>
+<td><hr></td>
+<td><hr></td>
+<td><hr></td>
+<td>Unneccessary under SD & HDF5 data-models</td>
+</tr>
+
+<tr align=center>
+<td>Query the number of datasets, dimensions and attributes in a file</td>
+<td>ncinquire</td>
+<td>SDfileinfo</td>
+<td><hr></td>
+<td>H5Dget_info<br>H5Rget_num_relations<br>H5Gget_num_contents</td>
+<td>HDF5 interface is more granular and flexible</td>
+</tr>
+
+<tr align=center>
+<td>Update a writeable file with current changes</td>
+<td>ncsync</td>
+<td><hr></td>
+<td>AIO_flush</td>
+<td>H5Mflush</td>
+<td>HDF5 interface is more flexible because it can be applied to parts of the
+file hierarchy instead of the whole file at once.  The SD interface does not
+have this feature, although most of the lower HDF library supports it.</td>
+</tr>
+
+<tr align=center>
+<td>Close file access without applying recent changes</td>
+<td>ncabort</td>
+<td><hr></td>
+<td><hr></td>
+<td><hr></td>
+<td>How useful is this feature?</td>
+</tr>
+
+<tr align=center>
+<td>Create new dimension</td>
+<td>ncdimdef</td>
+<td>SDsetdimname</td>
+<td><hr></td>
+<td>H5Mcreate</td>
+<td>SD interface actually creates dimensions with datasets, this just allows
+naming them</td>
+</tr>
+
+<tr align=center>
+<td>Get ID of existing dimension</td>
+<td>ncdimid</td>
+<td>SDgetdimid</td>
+<td><hr></td>
+<td>H5Maccess</td>
+<td>SD interface looks up dimensions by index and the netCDF interface uses
+names, but they are close enough.  The HDF5 interface does not current allow
+access to particular dimensions, only the dataspace as a whole.</td>
+</tr>
+
+<tr align=center>
+<td>Get size & name of dimension</td>
+<td>ncdiminq</td>
+<td>SDdiminfo</td>
+<td><hr></td>
+<td>H5Mget_name<br>H5Sget_lrank</td>
+<td>Only a rough match</td>
+</tr>
+
+<tr align=center>
+<td>Rename dimension</td>
+<td>ncdimrename</td>
+<td>SDsetdimname</td>
+<td><hr></td>
+<td>H5Mset_name</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Create a new dataset</td>
+<td>ncvardef</td>
+<td>SDcreate</td>
+<td>AIO_mkarray</td>
+<td>H5Mcreate</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Attach to an existing dataset</td>
+<td>ncvarid</td>
+<td>SDselect</td>
+<td>AIO_arr_load</td>
+<td>H5Maccess</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Get basic information about a dataset</td>
+<td>ncvarinq</td>
+<td>SDgetinfo</td>
+<td>AIO_arr_get_btype<br>AIO_arr_get_nelmts<br>AIO_arr_get_nbdims<br>AIO_arr_get_bdims<br>AIO_arr_get_slab</td>
+<td>H5Dget_info</td>
+<td>All interfaces have different levels of information that they return, some
+use of auxilliary functions is required to get equivalent amount of information</td>
+</tr>
+
+<tr align=center>
+<td>Write a single value to a dataset</td>
+<td>ncvarput1</td>
+<td>SDwritedata</td>
+<td>AIO_write</td>
+<td>H5Dwrite</td>
+<td>What is this useful for?</td>
+</tr>
+
+<tr align=center>
+<td>Read a single value from a dataset</td>
+<td>ncvarget1</td>
+<td>SDreaddata</td>
+<td>AIO_read</td>
+<td>H5Dread</td>
+<td>What is this useful for?</td>
+</tr>
+
+<tr align=center>
+<td>Write a solid hyperslab of data (i.e. subset) to a dataset</td>
+<td>ncvarput</td>
+<td>SDwritedata</td>
+<td>AIO_write</td>
+<td>H5Dwrite</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Read a solid hyperslab of data (i.e. subset) from a dataset</td>
+<td>ncvarget</td>
+<td>SDreaddata</td>
+<td>AIO_read</td>
+<td>H5Dread</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Write a general hyperslab of data (i.e. possibly subsampled) to a dataset</td>
+<td>ncvarputg</td>
+<td>SDwritedata</td>
+<td>AIO_write</td>
+<td>H5Dwrite</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Read a general hyperslab of data (i.e. possibly subsampled) from a dataset</td>
+<td>ncvargetg</td>
+<td>SDreaddata</td>
+<td>AIO_read</td>
+<td>H5Dread</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Rename a dataset variable</td>
+<td>ncvarrename</td>
+<td><hr></td>
+<td><hr></td>
+<td>H5Mset_name</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Add an attribute to a dataset</td>
+<td>ncattput</td>
+<td>SDsetattr</td>
+<td><hr></td>
+<td>H5Rattach_oid</td>
+<td>HDF5 requires creating a seperate object to attach to a dataset, but it also
+allows objects to be attributes of any other object, even nested.</td>
+</tr>
+
+<tr align=center>
+<td>Get attribute information</td>
+<td>ncattinq</td>
+<td>SDattrinfo</td>
+<td><hr></td>
+<td>H5Dget_info</td>
+<td>HDF5 has no specific function for attributes, they are treated as all other
+objects in the file.</td>
+</tr>
+
+<tr align=center>
+<td>Retrieve attribute for a dataset</td>
+<td>ncattget</td>
+<td>SDreadattr</td>
+<td><hr></td>
+<td>H5Dread</td>
+<td>HDF5 uses general dataset I/O for attributes.</td>
+</tr>
+
+<tr align=center>
+<td>Copy attribute from one dataset to another</td>
+<td>ncattcopy</td>
+<td><hr></td>
+<td><hr></td>
+<td><hr></td>
+<td>What is this used for?</td>
+</tr>
+
+<tr align=center>
+<td>Get name of attribute</td>
+<td>ncattname</td>
+<td>SDattrinfo</td>
+<td><hr></td>
+<td>H5Mget_name</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Rename attribute</td>
+<td>ncattrename</td>
+<td><hr></td>
+<td><hr></td>
+<td>H5Mset_name</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Delete attribute</td>
+<td>ncattdel</td>
+<td><hr></td>
+<td><hr></td>
+<td>H5Mdelete</td>
+<td>This can be faked in current HDF interface with lower-level calls</td>
+</tr>
+
+<tr align=center>
+<td>Compute # of bytes to store a number-type</td>
+<td>nctypelen</td>
+<td>DFKNTsize</td>
+<td><hr></td>
+<td><hr></td>
+<td>Hmm, the HDF5 Datatype interface needs this functionality.</td>
+</tr>
+
+<tr align=center>
+<td>Indicate that fill-values are to be written to dataset</td>
+<td>ncsetfill</td>
+<td>SDsetfillmode</td>
+<td><hr></td>
+<td><hr></td>
+<td>HDF5 Datatype interface should work on this functionality</td>
+</tr>
+
+<tr align=center>
+<td>Get information about "record" variables (Those datasets which share the
+same unlimited dimension</td>
+<td>ncrecinq</td>
+<td><hr></td>
+<td><hr></td>
+<td><hr></td>
+<td>This should probably be wrapped in a higher layer interface, if it's
+needed for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Get a record from each dataset sharing the unlimited dimension</td>
+<td>ncrecget</td>
+<td><hr></td>
+<td><hr></td>
+<td><hr></td>
+<td>This is somewhat equivalent to reading a vdata with non-interlaced
+fields, only in a dataset oriented way.  This should also be wrapped in a
+higher layer interface if it's necessary for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Put a record from each dataset sharing the unlimited dimension</td>
+<td>ncrecput</td>
+<td><hr></td>
+<td><hr></td>
+<td><hr></td>
+<td>This is somewhat equivalent to writing a vdata with non-interlaced
+fields, only in a dataset oriented way.  This should also be wrapped in a
+higher layer interface if it's necessary for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Map a dataset's name to an index to reference it with</td>
+<td><hr></td>
+<td>SDnametoindex</td>
+<td><hr></td>
+<td>H5Mfind_name</td>
+<td>Equivalent functionality except HDF5 call returns an OID instead of an
+index.</td>
+</tr>
+
+<tr align=center>
+<td>Get the valid range of values for data in a dataset</td>
+<td><hr></td>
+<td>SDgetrange</td>
+<td><hr></td>
+<td><hr></td>
+<td>Easily implemented with attributes at a higher level for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Release access to a dataset</td>
+<td><hr></td>
+<td>SDendaccess</td>
+<td>AIO_arr_destroy</td>
+<td>H5Mrelease</td>
+<td>Odd that the netCDF API doesn't have this...</td>
+</tr>
+
+<tr align=center>
+<td>Set the valid range of data in a dataset</td>
+<td><hr></td>
+<td>SDsetrange</td>
+<td><hr></td>
+<td><hr></td>
+<td>Easily implemented with attributes at a higher level for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Set the label, units, format, etc. of the data values in a dataset</td>
+<td><hr></td>
+<td>SDsetdatastrs</td>
+<td><hr></td>
+<td><hr></td>
+<td>Easily implemented with attributes at a higher level for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Get the label, units, format, etc. of the data values in a dataset</td>
+<td><hr></td>
+<td>SDgetdatastrs</td>
+<td><hr></td>
+<td><hr></td>
+<td>Easily implemented with attributes at a higher level for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Set the label, units, format, etc. of the dimensions in a dataset</td>
+<td><hr></td>
+<td>SDsetdimstrs</td>
+<td><hr></td>
+<td><hr></td>
+<td>Easily implemented with attributes at a higher level for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Get the label, units, format, etc. of the dimensions in a dataset</td>
+<td><hr></td>
+<td>SDgetdimstrs</td>
+<td><hr></td>
+<td><hr></td>
+<td>Easily implemented with attributes at a higher level for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Set the scale of the dimensions in a dataset</td>
+<td><hr></td>
+<td>SDsetdimscale</td>
+<td><hr></td>
+<td><hr></td>
+<td>Easily implemented with attributes at a higher level for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Get the scale of the dimensions in a dataset</td>
+<td><hr></td>
+<td>SDgetdimscale</td>
+<td><hr></td>
+<td><hr></td>
+<td>Easily implemented with attributes at a higher level for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Set the calibration parameters of the data values in a dataset</td>
+<td><hr></td>
+<td>SDsetcal</td>
+<td><hr></td>
+<td><hr></td>
+<td>Easily implemented with attributes at a higher level for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Get the calibration parameters of the data values in a dataset</td>
+<td><hr></td>
+<td>SDgetcal</td>
+<td><hr></td>
+<td><hr></td>
+<td>Easily implemented with attributes at a higher level for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Set the fill value for the data values in a dataset</td>
+<td><hr></td>
+<td>SDsetfillvalue</td>
+<td><hr></td>
+<td><hr></td>
+<td>HDF5 needs something like this, I'm not certain where to put it.</td>
+</tr>
+
+<tr align=center>
+<td>Get the fill value for the data values in a dataset</td>
+<td><hr></td>
+<td>SDgetfillvalue</td>
+<td><hr></td>
+<td><hr></td>
+<td>HDF5 needs something like this, I'm not certain where to put it.</td>
+</tr>
+
+<tr align=center>
+<td>Move/Set the dataset to be in an 'external' file</td>
+<td><hr></td>
+<td>SDsetexternalfile</td>
+<td><hr></td>
+<td>H5Dset_storage</td>
+<td>HDF5 has simple functions for this, but needs an API for setting up the
+storage flow.</td>
+</tr>
+
+<tr align=center>
+<td>Move/Set the dataset to be stored using only certain bits from the dataset</td>
+<td><hr></td>
+<td>SDsetnbitdataset</td>
+<td><hr></td>
+<td>H5Dset_storage</td>
+<td>HDF5 has simple functions for this, but needs an API for setting up the
+storage flow.</td>
+</tr>
+
+<tr align=center>
+<td>Move/Set the dataset to be stored in compressed form</td>
+<td><hr></td>
+<td>SDsetcompress</td>
+<td><hr></td>
+<td>H5Dset_storage</td>
+<td>HDF5 has simple functions for this, but needs an API for setting up the
+storage flow.</td>
+</tr>
+
+<tr align=center>
+<td>Search for an dataset attribute with particular name</td>
+<td><hr></td>
+<td>SDfindattr</td>
+<td><hr></td>
+<td>H5Mfind_name<br>H5Mwild_search</td>
+<td>HDF5 can handle wildcard searchs for this feature.</td>
+</tr>
+
+<tr align=center>
+<td>Map a run-time dataset handle to a persistant disk reference</td>
+<td><hr></td>
+<td>SDidtoref</td>
+<td><hr></td>
+<td><hr></td>
+<td>I'm not certain this is needed for HDF5.</td>
+</tr> 
+
+<tr align=center>
+<td>Map a persistant disk reference for a dataset to an index in a group</td>
+<td><hr></td>
+<td>SDreftoindex</td>
+<td><hr></td>
+<td><hr></td>
+<td>I'm not certain this is needed for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Determine if a dataset is a 'record' variable (i.e. it has an unlimited dimension)</td>
+<td><hr></td>
+<td>SDisrecord</td>
+<td><hr></td>
+<td><hr></td>
+<td>Easily implemented by querying the dimensionality at a higher level for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Determine if a dataset is a 'coordinate' variable (i.e. it is used as a dimension)</td>
+<td><hr></td>
+<td>SDiscoord</td>
+<td><hr></td>
+<td><hr></td>
+<td>I'm not certain this is needed for HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Set the access type (i.e. parallel or serial) for dataset I/O</td>
+<td><hr></td>
+<td>SDsetaccesstype</td>
+<td><hr></td>
+<td><hr></td>
+<td>HDF5 has functions for reading the information about this, but needs a better
+API for setting up the storage flow.</td>
+</tr>
+
+<tr align=center>
+<td>Set the size of blocks used to store a dataset with unlimited dimensions</td>
+<td><hr></td>
+<td>SDsetblocksize</td>
+<td><hr></td>
+<td><hr></td>
+<td>HDF5 has functions for reading the information about this, but needs a better
+API for setting up the storage flow.</td>
+</tr>
+
+<tr align=center>
+<td>Sets backward compatibility of dimensions created.</td>
+<td><hr></td>
+<td>SDsetdimval_comp</td>
+<td><hr></td>
+<td><hr></td>
+<td>Unneccessary in HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Checks backward compatibility of dimensions created.</td>
+<td><hr></td>
+<td>SDisdimval_comp</td>
+<td><hr></td>
+<td><hr></td>
+<td>Unneccessary in HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Move/Set the dataset to be stored in chunked form</td>
+<td><hr></td>
+<td>SDsetchunk</td>
+<td><hr></td>
+<td>H5Dset_storage</td>
+<td>HDF5 has simple functions for this, but needs an API for setting up the
+storage flow.</td>
+</tr>
+
+<tr align=center>
+<td>Get the chunking information for a dataset stored in chunked form</td>
+<td><hr></td>
+<td>SDgetchunkinfo</td>
+<td><hr></td>
+<td>H5Dstorage_detail</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Read/Write chunks of a dataset using a chunk index</td>
+<td><hr></td>
+<td>SDreadchunk<br>SDwritechunk</td>
+<td><hr></td>
+<td><hr></td>
+<td>I'm not certain that HDF5 needs something like this.</td>
+</tr>
+
+<tr align=center>
+<td>Tune chunk caching parameters for chunked datasets</td>
+<td><hr></td>
+<td>SDsetchunkcache</td>
+<td><hr></td>
+<td><hr></td>
+<td>HDF5 needs something like this.</td>
+</tr>
+
+<tr align=center>
+<td>Change some default behavior of the library</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_defaults</td>
+<td><hr></td>
+<td>Something like this would be useful in HDF5, to tune I/O pipelines, etc.</td>
+</tr>
+
+<tr align=center>
+<td>Flush and close all open files</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_exit</td>
+<td><hr></td>
+<td>Something like this might be useful in HDF5, although it could be
+    encapsulated with a higher-level function.</td>
+</tr>
+
+<tr align=center>
+<td>Target an architecture for data-type storage</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_target</td>
+<td><hr></td>
+<td>There are some rough parallels with using the data-type in HDF5 to create
+    data-type objects which can be used to write out future datasets.</td>
+</tr>
+
+<tr align=center>
+<td>Map a filename to a file ID</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_filename</td>
+<td>H5Mget_name</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Get the active directory (where new datasets are created)</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_getcwd</td>
+<td><hr></td>
+<td>HDF5 allows multiple directories (groups) to be attached to, any of which
+    can have new datasets created within it.</td>
+</tr>
+
+<tr align=center>
+<td>Change active directory</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_chdir</td>
+<td><hr></td>
+<td>Since HDF5 has a slightly different access method for directories (groups),
+    this functionality can be wrapped around calls to H5Gget_oid_by_name.</td>
+</tr>
+
+<tr align=center>
+<td>Create directory</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_mkdir</td>
+<td>H5Mcreate</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Return detailed information about an object</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_stat</td>
+<td>H5Dget_info<br>H5Dstorage_detail</td>
+<td>Perhaps more information should be provided through another function in
+    HDF5?</td>
+</tr>
+
+<tr align=center>
+<td>Get "flag" information</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_getflags</td>
+<td><hr></td>
+<td>Not required in HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Set "flag" information</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_setflags</td>
+<td><hr></td>
+<td>Not required in HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Get detailed information about all objects in a directory</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_ls</td>
+<td>H5Gget_content_info_mult<br>H5Dget_info<br>H5Dstorage_detail</td>
+<td>Only roughly equivalent functionality in HDF5, perhaps more should be
+    added?</td>
+</tr>
+
+<tr align=center>
+<td>Get base type of object</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_BASIC</td>
+<td>H5Gget_content_info</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Set base type of dataset</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_arr_set_btype</td>
+<td>H5Mcreate(DATATYPE)</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Set dimensionality of dataset</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_arr_set_bdims</td>
+<td>H5Mcreate(DATASPACE)</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Set slab of dataset to write</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_arr_set_slab</td>
+<td><hr></td>
+<td>This is similar to the process of creating a dataspace for use when
+    performing I/O on an HDF5 dataset</td>
+</tr>
+
+<tr align=center>
+<td>Describe chunking of dataset to write</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_arr_set_chunk</td>
+<td>H5Dset_storage</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Describe array index permutation of dataset to write</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_arr_set_perm</td>
+<td>H5Dset_storage</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Create a new dataset with dataspace and datatype information from an
+    existing dataset.</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_arr_copy</td>
+<td><hr></td>
+<td>This can be mimicked in HDF5 by attaching to the datatype and dataspace of
+an existing dataset and using the IDs to create new datasets.</td>
+</tr>
+
+<tr align=center>
+<td>Create a new directory to group objects within</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_mkgroup</td>
+<td>H5Mcreate(GROUP)</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Read name of objects in directory</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_read_group</td>
+<td>H5Gget_content_info_mult</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Add objects to directory</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_write_group</td>
+<td>H5Ginsert_item_mult</td>
+<td></td>
+</tr>
+
+<tr align=center>
+<td>Combine an architecture and numeric type to derive the format's datatype</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_COMBINE</td>
+<td><hr></td>
+<td>This is a nice feature to add to HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Derive an architecture from the format's datatype</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_ARCH</td>
+<td><hr></td>
+<td>This is a nice feature to add to HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Derive a numeric type from the format's datatype</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_PNT</td>
+<td><hr></td>
+<td>This is a nice feature to add to HDF5.</td>
+</tr>
+
+<tr align=center>
+<td>Register error handling function for library to call when errors occur</td>
+<td><hr></td>
+<td><hr></td>
+<td>AIO_error_handler</td>
+<td><hr></td>
+<td>This should be added to HDF5.</td>
+</tr>
+
+</table>
+

Added: packages/hdf5/branches/upstream/current/doc/html/H5.format.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/H5.format.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/H5.format.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5962 @@
+<html>
+  <head>
+    <title>
+      HDF5 File Format Specification
+    </title>
+
+<STYLE TYPE="text/css">
+
+P { text-indent: 2em}
+P.item { margin-left: 2em; text-indent: -2em}
+P.item2 { margin-left: 2em; text-indent: 2em}
+
+TABLE.format { border:solid; border-collapse:collapse; caption-side:top; text-align:center; width:80%;}
+TABLE.format TH { border:ridge; padding:4px; width:25%;}
+TABLE.format TD { border:ridge; padding:4px; }
+TABLE.format CAPTION { font-weight:bold; font-size:larger;}
+
+TABLE.note {border:none; text-align:right; width:80%;}
+
+TABLE.desc { border:solid; border-collapse:collapse; caption-size:top; text-align:left; width:80%;}
+TABLE.desc TR { vertical-align:top;}
+TABLE.desc TH { border-style:ridge; font-size:larger; padding:4px; text-decoration:underline;}
+TABLE.desc TD { border-style:ridge; padding:4px; }
+TABLE.desc CAPTION { font-weight:bold; font-size:larger;}
+
+TABLE.list { border:none; }
+TABLE.list TR { vertical-align:top;}
+TABLE.list TH { border:none; text-decoration:underline;}
+TABLE.list TD { border:none; }
+
+</STYLE>
+       
+<!-- #BeginLibraryItem "/ed_libs/styles_Format.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/FormatElect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+    <a href="ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center><h1>HDF5 File Format Specification</h1></center>
+
+    <center>
+    <table border=0 width=90%>
+    <tr>
+    <td valign=top>
+    <ol type=I>
+      <li><a href="#Intro">Introduction</a>
+      <li><a href="#FileMetaData">Disk Format Level 0 - File Metadata</a>
+        <font size=-2>
+	<ol type=A>
+	  <li><a href="#SuperBlock">Disk Format Level 0A - File Signature and Super Block</a>
+	  <li><a href="#DriverInfo">Disk Format Level 0B - File Driver Info</a>
+	</ol>
+        </font>
+      <li><a href="#FileInfra">Disk Format Level 1 - File Infrastructure</a>
+        <font size=-2>
+	<ol type=A>
+	  <li><a href="#Btrees">Disk Format Level 1A - B-link Trees and B-tree Nodes</a>
+	  <li><a href="#SymbolTable">Disk Format Level 1B - Group</a>
+	  <li><a href="#SymbolTableEntry">Disk Format Level 1C - Group Entry</a>
+	  <li><a href="#LocalHeap">Disk Format Level 1D - Local Heaps</a>
+	  <li><a href="#GlobalHeap">Disk Format Level 1E - Global Heap</a>
+	  <li><a href="#FreeSpaceIndex">Disk Format Level 1F - Free-space Index</a>
+	</ol>
+        </font>
+      <li><a href="#DataObject">Disk Format Level 2 - Data Objects</a>
+        <font size=-2>
+	<ol type=A>
+	  <li><a href="#ObjectHeader">Disk Format Level 2a - Data Object Headers</a>
+	    <ol type=1>
+	      <li><a href="#NILMessage">Name: NIL</a>                                                       <!-- 0x0000 -->
+	      <li><a href="#SimpleDataSpace">Name: Simple Dataspace</a>                                     <!-- 0x0001 -->
+<!--          <li><a href="#DataSpaceMessage">Name: Complex Dataspace</a>  -->                              <!-- 0x0002 -->
+	      <li><a href="#ReservedMessage_0002">Name: Reserved - not assigned yet</a>                     <!-- 0x0002 -->
+	      <li><a href="#DataTypeMessage">Name: Datatype</a>                                             <!-- 0x0003 -->
+	      <li><a href="#OldFillValueMessage">Name: Data Storage - Fill Value (Old)</a>                  <!-- 0x0004 -->
+	      <li><a href="#FillValueMessage">Name: Data Storage - Fill Value</a>                           <!-- 0x0005 -->
+	    </ol>
+        </ol>
+        </font>
+    </ol>
+    </td><td>&nbsp;&nbsp;</td><td valign=top>
+    <ol type=I start=4>
+
+      <li><a href="#DataObject">Disk Format Level 2 - Data Objects</a> 
+        <font size=-2><i>(Continued)</i>
+	<ol type=A>
+	  <li><a href="#ObjectHeader">Disk Format Level 2a - Data Object Headers</a><i>(Continued)</i>
+	    <ol type=1 start=6>
+<!--          <li><a href="#CompactDataStorageMessage">Name: Data Storage - Compact</a>  -->                <!-- 0x0006 -->
+	      <li><a href="#ReservedMessage_0006">Name: Reserved - not assigned yet</a>                     <!-- 0x0006 -->
+	      <li><a href="#ExternalFileListMessage">Name: Data Storage - External Data Files</a>           <!-- 0x0007 -->
+	      <li><a href="#LayoutMessage">Name: Data Storage - Layout</a>                                  <!-- 0x0008 -->
+	      <li><a href="#ReservedMessage_0009">Name: Reserved - not assigned yet</a>                     <!-- 0x0009 -->
+	      <li><a href="#ReservedMessage_000A">Name: Reserved - not assigned yet</a>                     <!-- 0x000a -->
+	      <li><a href="#FilterMessage">Name: Data Storage - Filter Pipeline</a>                	    <!-- 0x000b -->
+	      <li><a href="#AttributeMessage">Name: Attribute</a>                                           <!-- 0x000c -->
+	      <li><a href="#CommentMessage">Name: Object Comment</a>                                              <!-- 0x000d -->
+	      <li><a href="#OldModifiedMessage">Name: Object Modification Date and Time (Old)</a>           <!-- 0x000e -->
+              <li><a href="#SharedMessage">Name: Shared Object Message</a>                                  <!-- 0x000f -->
+	      <li><a href="#ContinuationMessage">Name: Object Header Continuation</a>                       <!-- 0x0010 -->
+	      <li><a href="#SymbolTableMessage">Name: Group Message</a>                                     <!-- 0x0011 -->
+	      <li><a href="#ModifiedMessage">Name: Object Modification Date and Time</a>                    <!-- 0x0012 -->
+	    </ol>
+	  <li><a href="#SharedObjectHeader">Disk Format: Level 2b - Shared Data Object Headers</a>
+	  <li><a href="#DataStorage">Disk Format: Level 2c - Data Object Data Storage</a>
+	</ol>
+        </font>
+      <LI><A href="#Appendix">Appendix</A>
+    </ol>
+</td></tr>
+</table>
+</center>
+
+    <BR>
+    <HR>
+
+
+    <h2>Introduction</h2>
+
+    <table align=right width=100>
+    <tr><td>&nbsp;</td><td align=center>
+        <hr>
+        <img src="FF-IH_FileGroup.gif" alt="HDF5 Groups" hspace=15 vspace=15>
+    </td><td>&nbsp;</td></tr>
+    <tr><td>&nbsp;</td><td align=center>
+        <strong>Figure 1:</strong> Relationships among the HDF5 root group, other groups, and objects
+        <hr>
+    </td><td>&nbsp;</td></tr>
+
+    <tr><td>&nbsp;</td><td align=center>
+        <img src="FF-IH_FileObject.gif" alt="HDF5 Objects" hspace=15 vspace=15>
+    </td><td>&nbsp;</td></tr>
+    <tr><td>&nbsp;</td><td align=center>
+        <strong>Figure 2:</strong> HDF5 objects -- datasets, datatypes, or dataspaces
+        <hr>
+    </td><td>&nbsp;</td></tr>
+    </table>
+
+
+    <P>The format of an HDF5 file on disk encompasses several
+      key ideas of the HDF4 and AIO file formats as well as
+      addressing some shortcomings therein.  The new format is
+      more self-describing than the HDF4 format and is more
+      uniformly applied to data objects in the file.
+      
+    <P>An HDF5 file appears to the user as a directed graph.  
+      The nodes of this graph are the higher-level HDF5 objects
+      that are exposed by the HDF5 APIs:
+
+      <ul>
+         <li>Groups
+         <li>Datasets
+         <li>Named datatypes
+      </ul>
+
+    <P>At the lowest level, as information is actually written to the disk, 
+       an HDF5 file is made up of the following objects:
+      <ul>
+         <li>A super block
+         <li>B-tree nodes (containing either symbol nodes or raw data chunks)
+         <li>Object headers
+         <li>A global heap
+         <li>Local heaps
+         <li>Free space
+      </ul>
+
+    <P>The HDF5 library uses these low-level objects to represent the
+      higher-level objects that are then presented to the user or 
+      to applications through the APIs.
+      For instance, a group is an object header that contains a message that
+      points to a local heap and to a B-tree which points to symbol nodes.
+      A dataset is an object header that contains messages that describe
+      datatype, space, layout, filters, external files, fill value, etc
+      with the layout message pointing to either a raw data chunk or to a
+      B-tree that points to raw data chunks.
+
+
+    <h3>This Document</h3>
+
+    <p>This document describes the lower-level data objects;
+      the higher-level objects and their properties are described 
+      in the <a href="H5.user.html"><cite>HDF5 User's Guide</cite></a>.
+
+    <P>Three levels of information comprise the file format.  
+      Level 0 contains basic information for identifying and
+      defining information about the file.  Level 1 information contains
+      the information about the pieces of a file shared by many objects
+      in the file (such as a B-trees and heaps).  Level 2 is the rest 
+      of the file and contains all of the data objects, with each object
+      partitioned into header information, also known as 
+      <em>metadata</em>, and data.
+
+    <p>The sizes of various fields in the following layout tables are
+      determined by looking at the number of columns the field spans
+      in the table.  There are three exceptions: (1) The size may be
+      overridden by specifying a size in parentheses, (2) the size of
+      addresses is determined by the <em>Size of Offsets</em> field
+      in the super block and is indicated in this document with a
+      superscripted 'O', and (3) the size of length fields is determined
+      by the <em>Size of Lengths</em> field in the super block and is
+      indicated in this document with a superscripted 'L'.
+
+    <P>Values for all fields in this document should be treated as unsigned
+      integers, unless otherwise noted in the description of a field.
+      Additionally, all metadata fields are stored in little-endian byte
+      order.
+    </P>
+
+    <BR>
+    <HR>
+
+    <h2><a name="FileMetaData">
+	Disk Format: Level 0 - File Metadata</a></h2>
+
+    <H3><A name="SuperBlock">
+	Disk Format: Level 0A - File Signature and Super Block</A></H3>
+
+    <P>The super block may begin at certain predefined offsets within
+      the HDF5 file, allowing a block of unspecified content for
+      users to place additional information at the beginning (and
+      end) of the HDF5 file without limiting the HDF5 library's
+      ability to manage the objects within the file itself.  This
+      feature was designed to accommodate wrapping an HDF5 file in
+      another file format or adding descriptive information to the
+      file without requiring the modification of the actual file's
+      information.  The super block is located by searching for the
+      HDF5 file signature at byte offset 0, byte offset 512 and at
+      successive locations in the file, each a multiple of two of
+      the previous location, i.e.  0, 512, 1024, 2048, etc.
+
+    <P>The super block is composed of a file signature, followed by
+      super block and group version numbers, information
+      about the sizes of offset and length values used to describe
+      items within the file, the size of each group page,
+      and a group entry for the root object in the file.
+
+    <br>
+    <div align=center>
+      <table class=format>
+	<caption>
+	  HDF5 Super Block Layout
+	</caption>
+
+	<tr>
+	  <th>byte</th>
+	  <th>byte</th>
+	  <th>byte</th>
+	  <th>byte</th>
+	</tr>  
+
+	<tr>
+	  <td colspan=4><br>HDF5 File Signature (8 bytes)<br><br></td>
+	</tr>
+
+	<tr>
+	  <td>Version # of Super Block</td>
+	  <td>Version # of Global Free-space Storage</td>
+	  <td>Version # of Root Group Symbol Table Entry</td>
+	  <td>Reserved (zero)</td>
+	</tr>
+
+	<tr>
+	  <td>Version # of Shared Header Message Format</td>
+	  <td>Size of Offsets</td>
+	  <td>Size of Lengths</td>
+	  <td>Reserved (zero)</td>
+	</tr>
+
+	<tr>
+	  <td colspan=2>Group Leaf Node K</td>
+	  <td colspan=2>Group Internal Node K</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>File Consistency Flags</td>
+	</tr>
+
+	<tr>
+	  <td colspan=2 style="border:dotted;">Indexed Storage Internal Node K<sup>1</sup></td>
+	  <td colspan=2 style="border:dotted;">Reserved (zero)<sup>1</sup></td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Base Address<sup>O</sup></td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Address of Global Free-space Heap<sup>O</sup></td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>End of File Address<sup>O</sup></td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Driver Information Block Address<sup>O</sup></td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Root Group Symbol Table Entry</td>
+	</tr>
+      </table>
+
+      <table class=note>
+        <tr><td>
+            (Items marked with an 'O' the above table are
+            <br>
+            of the size specified in "Size of Offsets.")
+        </td></tr>
+        <tr><td>
+            (Items marked with an '1' the above table are
+            <br>
+            new in version 1 of the superblock)
+        </td></tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>HDF5 File Signature</td>
+	  <td>
+            <P>This field contains a constant value and can be used to
+	    quickly identify a file as being an HDF5 file.  The
+	    constant value is designed to allow easy identification of
+	    an HDF5 file and to allow certain types of data corruption
+	    to be detected.  The file signature of an HDF5 file always
+	    contains the following values:
+            </P>
+
+            <center>
+	      <table border align=center cellpadding=4>
+		<tr align=center>
+		  <td align=right>Decimal:</td>
+                  <td width="8%">137</td>
+		  <td width="8%">72</td>
+		  <td width="8%">68</td>
+		  <td width="8%">70</td>
+		  <td width="8%">13</td>
+		  <td width="8%">10</td>
+		  <td width="8%">26</td>
+		  <td width="8%">10</td>
+		</tr>
+
+		<tr align=center>
+		  <td align=right>Hexadecimal:</td>
+		  <td>89</td>
+		  <td>48</td>
+		  <td>44</td>
+		  <td>46</td>
+		  <td>0d</td>
+		  <td>0a</td>
+		  <td>1a</td>
+		  <td>0a</td>
+		</tr>
+
+		<tr align=center>
+		  <td align=right>ASCII C Notation:</td>
+		  <td>\211</td>
+		  <td>H</td>
+		  <td>D</td>
+		  <td>F</td>
+		  <td>\r</td>
+		  <td>\n</td>
+		  <td>\032</td>
+		  <td>\n</td>
+		</tr>
+	      </table>
+	    </center>
+	    <br>
+
+	    <P>This signature both identifies the file as an HDF5 file
+	    and provides for immediate detection of common
+	    file-transfer problems. The first two bytes distinguish
+	    HDF5 files on systems that expect the first two bytes to
+	    identify the file type uniquely. The first byte is
+	    chosen as a non-ASCII value to reduce the probability
+	    that a text file may be misrecognized as an HDF5 file;
+	    also, it catches bad file transfers that clear bit
+	    7. Bytes two through four name the format. The CR-LF
+	    sequence catches bad file transfers that alter newline
+	    sequences. The control-Z character stops file display
+	    under MS-DOS. The final line feed checks for the inverse
+	    of the CR-LF translation problem.  (This is a direct
+	    descendent of the <A href="http://www.libpng.org/pub/png/spec/PNG-Rationale.html#R.PNG-file-signature">PNG</A> file
+            signature.)
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+            </td>
+	</tr>
+
+	<tr>
+	  <td>Version Number of the Super Block</td>
+	  <td>
+            <P>This value is used to determine the format of the
+	    information in the super block.  When the format of the
+	    information in the super block is changed, the version number
+	    is incremented to the next integer and can be used to
+	    determine how the information in the super block is
+	    formatted.
+            </P>
+
+            <P>Values of 0 and 1 are defined for this field.
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Version Number of the File Free-space Information</td>
+	  <td>
+            <P>This value is used to determine the format of the
+	    information in the File Free-space Information.
+            </P>
+            <P>The only value currently valid in this field is '0', which
+            indicates that the free space index is formatted as described 
+            <A href="#FreeSpaceIndex">below</A>.
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Version Number of the Root Group Symbol Table Entry</td>
+	  <td>
+            <P>This value is used to determine the format of the
+	    information in the Root Group Symbol Table Entry.  When the
+            format of the information in that field is changed, the
+	    version number is incremented to the next integer and can be
+	    used to determine how the information in the field
+	    is formatted.
+            </P>
+            <P>The only value currently valid in this field is '0', which
+            indicates that the root group symbol table entry is formatted as
+            described <A href="#SymbolTableEntry">below</A>.
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Version Number of the Shared Header Message Format</td>
+	  <td>
+            <P>This value is used to determine the format of the
+	    information in a shared object header message, which is
+	    stored in the global small-data heap.  Since the format
+	    of the shared header messages differs from the private
+	    header messages, a version number is used to identify changes
+	    in the format.
+            </P>
+            <P>The only value currently valid in this field is '0', which
+            indicates that shared header messages are formatted as
+            described <A href="#SharedObjectHeader">below</A>.
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Size of Offsets</td>
+	  <td>
+            <P>This value contains the number of bytes used to store
+	    addresses in the file.  The values for the addresses of
+	    objects in the file are offsets relative to a base address,
+	    usually the address of the super block signature.  This
+	    allows a wrapper to be added after the file is created
+	    without invalidating the internal offset locations.
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Size of Lengths</td>
+	  <td>
+            <P>This value contains the number of bytes used to store
+	    the size of an object.
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Group Leaf Node K</td>
+	  <td>
+            <P>Each leaf node of a group B-tree will have at
+	    least this many entries but not more than twice this
+	    many.  If a group has a single leaf node then it
+	    may have fewer entries.
+            </P>
+            <P>This value must be greater than zero.
+            </P>
+            <P>See the <A href="#Btrees">description</A> of B-trees below.
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Group Internal Node K</td>
+	  <td>
+            <P>Each internal node of a group B-tree will have at
+	    least this many entries but not more than twice this
+	    many.  If the group has only one internal
+	    node then it might have fewer entries.
+            </P>
+            <P>This value must be greater than zero.
+            </P>
+            <P>See the <A href="#Btrees">description</A> of B-trees below.
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+          </td>
+	</tr>
+
+        <tr>
+          <td>File Consistency Flags</td>
+          <td>
+            <P>This value contains flags to indicate information
+            about the consistency of the information contained
+            within the file.  Currently, the following bit flags are
+            defined: 
+            <ul>
+            <li>Bit 0 set indicates that the file is opened for
+            write-access.
+            <li>Bit 1 set indicates that the file has
+            been verified for consistency and is guaranteed to be
+            consistent with the format defined in this document.
+            <li>Bits 2-31 are reserved for future use.
+            </ul>
+            Bit 0 should be
+            set as the first action when a file is opened for write
+            access and should be cleared only as the final action
+            when closing a file.  Bit 1 should be cleared during
+            normal access to a file and only set after the file's
+            consistency is guaranteed by the library or a
+            consistency utility.
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+          </td>
+        </tr>
+
+	<tr>
+	  <td>Indexed Storage Internal Node K</td>
+	  <td>
+            <P>Each internal node of a indexed storage B-tree will have at
+	    least this many entries but not more than twice this
+	    many.  If the group has only one internal
+	    node then it might have fewer entries.
+            </P>
+            <P>This value must be greater than zero.
+            </P>
+            <P>See the <A href="#Btrees">description</A> of B-trees below.
+            </P>
+
+            <P><EM>This field is present in version 1+ of the superblock.</EM>
+            </P>
+          </td>
+	</tr>
+
+        <tr>
+          <td>Base Address</td>
+          <td>
+            <P>This is the absolute file address of the first byte of
+            the HDF5 data within the file.  The library currently 
+            constrains this value to be the absolute file address 
+            of the super block itself when creating new files; 
+            future versions of the library may provide greater 
+            flexibility.  When opening an existing file and this address does
+            not match the offset of the superblock, the library assumes
+            that the entire contents of the HDF5 file have been adjusted in
+            the file and adjusts the base address and end of file address to
+            reflect their new positions in the file.  Unless otherwise noted,
+            all other file addresses are relative to this base
+            address.
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Address of Global Free-space Index</td>
+          <td>
+            <P>Free-space management is not yet defined in the HDF5
+            file format and is not handled by the library.
+            Currently this field always contains the 
+            <A href="#UndefinedAddress">undefined address</A>. 
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>End of File Address</td>
+          <td>
+            <P>This is the absolute file address of the first byte past
+            the end of all HDF5 data.  It is used to determine whether a
+            file has been accidently truncated and as an address where
+            file data allocation can occur if space from the free list is
+            not used.
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Driver Information Block Address</td>
+          <td>
+            <P>This is the relative file address of the file driver
+            information block which contains driver-specific
+            information needed to reopen the file. If there is no
+            driver information block then this entry should be the
+            <A href="#UndefinedAddress">undefined address</A>.
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Root Group Symbol Table Entry</td>
+          <td>
+            <P>This is the <A href="#SymbolTableEntry">symbol table entry</A>
+            of the root group, which serves as the entry point into 
+            the group graph for the file.
+            </P>
+
+            <P><EM>This field is present in version 0+ of the superblock.</EM>
+            </P>
+          </td>
+        </tr>
+      </table>
+    </div>
+
+    <H3><A name="DriverInfo">
+	Disk Format: Level 0B - File Driver Info</A></H3>
+
+    <p>The <em>file driver information block</em> is an optional region of the
+      file which contains information needed by the file driver in
+      order to reopen a file.  The format of the file driver information
+      block is:
+ 
+    <br>
+    <div align=center>
+      <table class=format>
+        <caption>
+          Driver Information Block
+        </caption>
+ 
+        <tr>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+	</tr>  
+ 
+        <tr>
+          <td>Version</td>
+          <td colspan=3>Reserved (zero)</td>
+        </tr>
+
+        <tr>
+          <td colspan=4>Driver Information Size (4 bytes)</td>
+        </tr>
+
+        <tr>
+          <td colspan=4><br>Driver Identification (8 bytes)<br><br></td>
+        </tr>
+
+        <tr>
+          <td colspan=4><br><br>Driver Information (<em>n</em> bytes)<br><br><br></td>
+        </tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+        </tr>
+
+        <tr>
+          <td>Version</td>
+          <td>
+            <P>The version number of the driver information block. The
+            file format documented here is version zero.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Driver Information Size</td>
+          <td>
+            <P>The size in bytes of the Driver Information part of this 
+            structure.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Driver Identification</td>
+          <td>
+            <P>This is an eight-byte ASCII string without null
+            termination which identifies the driver and version number 
+            of the Driver Information block. The predefined drivers
+            supplied with the HDF5 library are identified by the
+            letters <code>NCSA</code> followed by the first four characters of
+            the driver name. If the Driver Information block is not
+            the original version then the last letter(s) of the
+            identification will be replaced by a version number in
+            ASCII.  
+            </P>
+            <P>
+            For example, the various versions of the <em>family driver</em> 
+            will be identified by <code>NCSAfami</code>, <code>NCSAfam0</code>,
+            <code>NCSAfam1</code>, etc. 
+            (<code>NCSAfami</code> is simply <code>NCSAfamily</code> truncated 
+            to eight characters.  Subsequent identifiers will be created by
+            substituting sequential numerical values for the final character, 
+            starting with zero.)
+            </P>
+            <P>
+            Identification for user-defined drivers 
+            is arbitrary but should be unique and avoid the four character
+            prefix "NCSA".
+            </P>
+          </td>
+        </tr>
+
+        <tr valign=top>
+          <td>Driver Information</td>
+          <td>Driver information is stored in a format defined by the
+            file driver and encoded/decoded by the driver callbacks
+            invoked from the <code>H5FD_sb_encode</code> and
+            <code>H5FD_sb_decode</code> functions.</td>
+        </tr>
+      </table>
+    </div>
+
+    <BR>
+    <HR>
+
+    <h2><a name="FileInfra">
+        Disk Format: Level 1 - File Infrastructure</a></h2>
+    <h3><a name="Btrees">Disk Format: Level 1A - B-link Trees and B-tree Nodes</a></h3>
+
+    <p>B-link trees allow flexible storage for objects which tend to grow
+      in ways that cause the object to be stored discontiguously.  B-trees
+      are described in various algorithms books including "Introduction to
+      Algorithms" by Thomas H. Cormen, Charles E. Leiserson, and Ronald
+      L. Rivest.  The B-link tree, in which the sibling nodes at a
+      particular level in the tree are stored in a doubly-linked list,
+      is described in the "Efficient Locking for Concurrent Operations
+      on B-trees" paper by Phillip Lehman and S. Bing Yao as published
+      in the <cite>ACM Transactions on Database Systems</cite>, Vol. 6,
+      No. 4, December 1981.
+
+    <p>The B-link trees implemented by the file format contain one more
+      key than the number of children.  In other words, each child
+      pointer out of a B-tree node has a left key and a right key.
+      The pointers out of internal nodes point to sub-trees while
+      the pointers out of leaf nodes point to symbol nodes and 
+      raw data chunks.
+      Aside from that difference, internal nodes and leaf nodes
+      are identical.
+
+    <br>
+    <div align=center>
+      <table class=format>
+        <caption>
+          B-tree Nodes
+        </caption>
+
+        <tr>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+
+        <tr>
+          <td colspan=4>Signature</td>
+
+        <tr>
+          <td>Node Type</td>
+          <td>Node Level</td>
+          <td colspan=2>Entries Used</td>
+
+        <tr>
+          <td colspan=4>Address of Left Sibling<sup>O</sup></td>
+
+        <tr>
+          <td colspan=4>Address of Right Sibling<sup>O</sup></td>
+
+        <tr>
+          <td colspan=4>Key 0 (variable size)</td>
+
+        <tr>
+          <td colspan=4>Address of Child 0<sup>O</sup></td>
+
+        <tr>
+          <td colspan=4>Key 1 (variable size)</td>
+
+        <tr>
+          <td colspan=4>Address of Child 1<sup>O</sup></td>
+
+        <tr>
+          <td colspan=4>...</td>
+
+        <tr>
+          <td colspan=4>Key 2<em>K</em> (variable size)</td>
+
+        <tr>
+          <td colspan=4>Address of Child 2<em>K</em><sup>O</sup></td>
+
+        <tr>
+          <td colspan=4>Key 2<em>K</em>+1 (variable size)</td>
+      </table>
+
+      <table class=note>
+        <tr><td>
+            (Items marked with an 'O' the above table are
+            <br>
+            of the size specified in "Size of Offsets.")
+        </td></tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+        </tr>
+
+        <tr>
+          <td>Signature</td>
+          <td>
+            <P>The ASCII character string "<code>TREE</code>" is 
+            used to indicate the
+            beginning of a B-link tree node.  This gives file
+            consistency checking utilities a better chance of
+            reconstructing a damaged file.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Node Type</td>
+          <td>
+            <P>Each B-link tree points to a particular type of data.
+            This field indicates the type of data as well as
+            implying the maximum degree <em>K</em> of the tree and
+            the size of each Key field.
+            </P>
+
+            <table class=list>
+                <tr>
+                <th width="30%">Node Type</th>
+                <th align=left>Description</th>
+                </tr>
+                <tr>
+                    <td align=center>0</td>
+                    <td>This tree points to group nodes.</td>
+                </tr>
+                <tr>
+                    <td align=center>1</td>
+                    <td>This tree points to raw data chunk nodes.</td>
+                </tr>
+            </table>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Node Level</td>
+          <td>
+            <P>The node level indicates the level at which this node
+            appears in the tree (leaf nodes are at level zero).  Not
+            only does the level indicate whether child pointers
+            point to sub-trees or to data, but it can also be used
+            to help file consistency checking utilities reconstruct
+            damanged trees.
+            </P>
+          </td>
+        </tr>
+
+        <tr valign=top>
+          <td>Entries Used</td>
+          <td>
+            <P>This determines the number of children to which this
+            node points.  All nodes of a particular type of tree
+            have the same maximum degree, but most nodes will point
+            to less than that number of children.  The valid child
+            pointers and keys appear at the beginning of the node
+            and the unused pointers and keys appear at the end of
+            the node.  The unused pointers and keys have undefined
+            values.
+            </P>
+          </td>
+        </tr>
+
+        <tr valign=top>
+          <td>Address of Left Sibling</td>
+          <td>
+            <P>This is the relative file address of the left sibling of
+            the current node.  If the current
+            node is the left-most node at this level then this field
+            is the <A href="#UndefinedAddress">undefined address</A>.
+            </P>
+          </td>
+        </tr>
+
+        <tr valign=top>
+          <td>Address of Right Sibling</td>
+          <td>
+            <P>This is the relative file address of the right sibling of
+            the current node.  If the current
+            node is the right-most node at this level then this
+            field is the <A href="#UndefinedAddress">undefined address</A>.
+            </P>
+          </td>
+        </tr>
+
+        <tr valign=top>
+          <td>Keys and Child Pointers</td>
+          <td>
+            <P>Each tree has 2<em>K</em>+1 keys with 2<em>K</em>
+            child pointers interleaved between the keys.  The number
+            of keys and child pointers actually containing valid
+            values is determined by the node's <em>Entries Used</em> field.
+            If that field is <em>N</em> then the B-link tree contains
+            <em>N</em> child pointers and <em>N</em>+1 keys.
+            </P>
+          </td>
+        </tr>
+
+        <tr valign=top>
+          <td>Key</td>
+          <td>
+            <P>The format and size of the key values is determined by
+            the type of data to which this tree points.  The keys are
+            ordered and are boundaries for the contents of the child
+            pointer; that is, the key values represented by child
+            <em>N</em> fall between Key <em>N</em> and Key
+            <em>N</em>+1. Whether the interval is open or closed on
+            each end is determined by the type of data to which the
+            tree points.
+            </P>
+
+            <P>
+            The format of the key depends on the node type.
+            For nodes of node type 0 (group nodes), the key is formatted as
+            follows:
+            <center>
+            <table class=list>
+            <tr>
+              <td width=30%>A single field of <i>Size of Lengths</i> 
+                bytes:</td>
+              <td>Indicates the byte offset into the local heap 
+                for the first object name in the subtree which 
+                that key describes.
+              </td>
+            </tr>
+            </table>
+            </center>
+            </P>
+
+            <P>
+            For nodes of node type 1 (chunked raw data nodes), the key is
+            formatted as follows:
+            <center>
+            <table class=list>
+            <tr>
+              <td width=30%>Bytes 1-4:</td>
+              <td>Size of chunk in bytes.</td>
+            </tr>
+            <tr>
+              <td>Bytes 4-8:</td>
+              <td>Filter mask, a 32-bit bitfield indicating which 
+                filters have been skipped for this chunk.  Each filter
+                has an index number in the pipeline (starting at 0, with
+                the first filter to apply) and if that filter is skipped,
+                the bit corresponding to it's index is set.</td>
+            </tr>
+            <tr>
+              <td><em>N</em> 64-bit fields:</td>
+              <td>A 64-bit index indicating the offset of the 
+                chunk within the dataset where <i>N</i> is the number 
+                of dimensions of the dataset.  For example, if 
+                a chunk in a 3-dimensional dataset begins at the
+                position <code>[5,5,5]</code>, there will be three
+                such 64-bit indices, each with the value of 
+                <code>5</code>.</td>
+            </tr>
+            </table>
+            </center>
+            </P>
+          </td>
+        </tr>
+
+        <tr valign=top>
+          <td>Child Pointer</td>
+          <td>
+            <P>The tree node contains file addresses of subtrees or
+            data depending on the node level.  Nodes at Level 0 point 
+            to data addresses, either raw data chunk or group nodes.
+            Nodes at non-zero levels point to other nodes of the 
+            same B-tree.
+            </P>
+            <P>For raw data chunk nodes, the child pointer is the address
+            of a single raw data chunk.  For group nodes, the child pointer
+            points to a <A href="#SymbolTable">symbol table</A>, which contains
+            information for multiple symbol table entries.
+            </P>
+          </td>
+        </tr>
+      </table>
+    </div>
+
+    <p>
+     Conceptually, each B-tree node looks like this:
+     <center>
+     <table>
+       <tr valign=top align=center>
+         <td>key[0]</td><td>&nbsp;</td>
+         <td>child[0]</td><td>&nbsp;</td>
+         <td>key[1]</td><td>&nbsp;</td>
+         <td>child[1]</td><td>&nbsp;</td>
+         <td>key[2]</td><td>&nbsp;</td>
+         <td>...</td><td>&nbsp;</td>
+         <td>...</td><td>&nbsp;</td>
+         <td>key[<i>N</i>-1]</td><td>&nbsp;</td>
+         <td>child[<i>N</i>-1]</td><td>&nbsp;</td>
+         <td>key[<i>N</i>]</td>
+       </tr>
+     </table>
+     </center>
+     <br>
+
+     where child[<i>i</i>] is a pointer to a sub-tree (at a level 
+     above Level 0) or to data (at Level 0).  
+     Each key[<i>i</i>] describes an <i>item</i> stored by the B-tree 
+     (a chunk or an object of a group node).  The range of values 
+     represented by child[<i>i</i>] is indicated by key[<i>i</i>] 
+     and key[<i>i</i>+1].
+
+
+    <p>The following question must next be answered: 
+     "Is the value described by key[<i>i</i>] contained in 
+     child[<i>i</i>-1] or in child[<i>i</i>]?"  
+     The answer depends on the type of tree. 
+     In trees for groups (node type 0) the object described by 
+     key[<i>i</i>] is the greatest object contained in 
+     child[<i>i</i>-1] while in chunk trees (node type 1) the 
+     chunk described by key[<i>i</i>] is the least chunk in 
+     child[<i>i</i>].
+
+    <p>That means that key[0] for group trees is sometimes unused; 
+     it points to offset zero in the heap, which is always the 
+     empty string and compares as "less-than" any valid object name.
+
+    <p>And key[<i>N</i>] for chunk trees is sometimes unused; 
+     it contains a chunk offset which compares as "greater-than" 
+     any other chunk offset and has a chunk byte size of zero 
+     to indicate that it is not actually allocated.
+
+
+    <h3><a name="SymbolTable">Disk Format: Level 1B - Group and Symbol Nodes</a></h3>
+
+    <p>A group is an object internal to the file that allows
+      arbitrary nesting of objects within the file (including other groups).
+      A group maps a set of names in the group to a set of relative
+      file addresses where objects with those names are located in
+      the file.  Certain metadata for an object to which the group points
+      can be cached in the group's symbol table in addition to the
+      object's header.
+
+    <p>An HDF5 object name space can be stored hierarchically by
+      partitioning the name into components and storing each
+      component in a group.  The group entry for a
+      non-ultimate component points to the group containing
+      the next component.  The group entry for the last
+      component points to the object being named.
+
+    <p>A group is a collection of group nodes pointed
+      to by a B-link tree.  Each group node contains entries
+      for one or more symbols.  If an attempt is made to add a
+      symbol to an already full group node containing
+      2<em>K</em> entries, then the node is split and one node
+      contains <em>K</em> symbols and the other contains
+      <em>K</em>+1 symbols.
+
+    <br>
+    <div align=center>
+      <table class=format>
+        <caption>
+          Group Node (A Leaf of a B-tree)
+        </caption>
+
+        <tr>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+
+        <tr>
+          <td colspan=4>Signature</td>
+
+        <tr>
+          <td>Version Number</td>
+          <td>Reserved (0)</td>
+          <td colspan=2>Number of Symbols</td>
+
+        <tr>
+          <td colspan=4><br><br>Group Entries<br><br><br></td>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+        </tr>
+
+        <tr>
+          <td>Signature</td>
+          <td>
+            <P>The ASCII character string "<code>SNOD</code>" is 
+            used to indicate the
+            beginning of a group node.  This gives file
+            consistency checking utilities a better chance of
+            reconstructing a damaged file.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Version Number</td>
+          <td>
+            <P>The version number for the group node.  This
+            document describes version 1. (There is no version '0'
+            of the group node)
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Number of Symbols</td>
+          <td>
+            <P>Although all group nodes have the same length,
+            most contain fewer than the maximum possible number of
+            symbol entries.  This field indicates how many entries
+            contain valid data.  The valid entries are packed at the
+            beginning of the group node while the remaining
+            entries contain undefined values.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Group Entries</td>
+          <td>
+            <P>Each symbol has an entry in the group node.
+            The format of the entry is described below.
+            There are 2<EM>K</EM> entries in each group node, where
+            <EM>K</EM> is the "Group Leaf Node K" value from the
+            <A href="#SuperBlock">super block</A>.
+            </P>
+          </td>
+        </tr>
+      </table>
+    </div>
+
+    <h3><a name="SymbolTableEntry">
+        Disk Format: Level 1C - Group Entry </a></h3>
+
+    <p>Each group entry in a group node is designed 
+      to allow for very fast browsing of stored objects.
+      Toward that design goal, the group entries
+      include space for caching certain constant metadata from the
+      object header.
+
+    <br>
+    <div align=center>
+      <table class=format>
+        <caption>
+          Group Entry
+        </caption>
+
+        <tr>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+        </tr>
+
+        <tr>
+          <td colspan=4>Name Offset<sup>O</sup></td>
+        </tr>
+
+        <tr>
+          <td colspan=4>Object Header Address<sup>O</sup></td>
+        </tr>
+
+        <tr>
+          <td colspan=4>Cache Type</td>
+        </tr>
+
+        <tr>
+          <td colspan=4>Reserved</td>
+        </tr>
+
+        <tr>
+          <td colspan=4><br><br>Scratch-pad Space (16 bytes)<br><br><br></td>
+        </tr>
+      </table>
+
+      <table class=note>
+        <tr><td>
+            (Items marked with an 'O' the above table are
+            <br>
+            of the size specified in "Size of Offsets.")
+        </td></tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+        </tr>
+
+        <tr>
+          <td>Name Offset</td>
+          <td>
+            <P>This is the byte offset into the group local
+            heap for the name of the object. The name is null
+            terminated.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Object Header Address</td>
+          <td>
+            <P>Every object has an object header which serves as a
+            permanent location for the object's metadata.  In addition
+            to appearing in the object header, some metadata can be
+            cached in the scratch-pad space.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Cache Type</td>
+          <td>
+            <P>The cache type is determined from the object header.
+            It also determines the format for the scratch-pad space:
+            <br>
+            <table class=list>
+                <tr align=left>
+                    <th>Type:</th>
+                    <th>Description:</th>
+                </tr>
+                <tr>
+                    <td width="10%" align=center>0</td>
+                    <td>No data is cached by the group entry.  This
+                        is guaranteed to be the case when an object header
+                        has a link count greater than one.
+                    </td>
+                </tr>
+                <tr>
+                    <td align=center>1</td>
+                    <td>Object header metadata is cached in the group
+                        entry.  This implies that the group
+                        entry refers to another group.
+                    </td>
+                </tr>
+                <tr>
+                    <td align=center>2</td>
+                    <td>The entry is a symbolic link.  The first four bytes
+                        of the scratch-pad space are the offset into the local
+                        heap for the link value.  The object header address
+                        will be undefined.
+                    </td>
+                </tr>
+                <tr>
+                    <td align=center><em>N</em></td>
+                    <td>Other cache values can be defined later and
+                        libraries that do not understand the new values will
+                        still work properly.
+                    </td>
+                </tr>
+            </table>
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Reserved</td>
+          <td>
+            <P>These four bytes are present so that the scratch-pad
+            space is aligned on an eight-byte boundary.  They are
+            always set to zero.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Scratch-pad Space</td>
+          <td>
+            <P>This space is used for different purposes, depending
+            on the value of the Cache Type field. Any metadata
+            about a dataset object represented in the scratch-pad
+            space is duplicated in the object header for that
+            dataset.  This metadata can include the datatype
+            and the size of the dataspace for a dataset whose datatype 
+            is atomic and whose dataspace is fixed and less than 
+            four dimensions.
+            </P>
+            <P>
+            Furthermore, no data is cached in the group
+            entry scratch-pad space if the object header for
+            the group entry has a link count greater than
+            one.
+            </P>
+          </td>
+        </tr>
+      </table>
+    </div>
+
+    <h4>Format of the Scratch-pad Space</h4>
+
+    <p>The group entry scratch-pad space is formatted
+      according to the value in the Cache Type field.  
+
+    <p>If the Cache Type field contains the value zero 
+      <code>(0)</code> then no information is
+      stored in the scratch-pad space.
+
+    <p>If the Cache Type field contains the value one
+      <code>(1)</code>, then the scratch-pad space
+      contains cached metadata for another object header 
+      in the following format:
+
+    <br>
+    <div align=center>
+      <table class=format>
+        <caption>
+          Object Header Scratch-pad Format
+        </caption>
+
+        <tr>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+
+        <tr>
+          <td colspan=4>Address of B-tree<sup>O</sup></td>
+
+        <tr>
+          <td colspan=4>Address of Name Heap<sup>O</sup></td>
+      </table>
+
+      <table class=note>
+        <tr><td>
+            (Items marked with an 'O' the above table are
+            <br>
+            of the size specified in "Size of Offsets.")
+        </td></tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+        </tr>
+
+        <tr>
+          <td>Address of B-tree</td>
+          <td>
+            <P>This is the file address for the root of the 
+            group's B-tree.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Address of Name Heap</td>
+          <td>
+            <P>This is the file address for the group's local
+            heap, in which are stored the group's symbol names.
+            </P>
+          </td>
+        </tr>
+      </table>
+    </div>
+
+
+    <P>If the Cache Type field contains the value two
+      <code>(2)</code>, then the scratch-pad space
+      contains cached metadata for another symbolic link
+      in the following format:
+
+    <br>
+    <div align=center>
+      <table class=format>
+        <caption>
+          Symbolic Link Scratch-pad Format
+        </caption>
+
+        <tr>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+        </tr>
+
+        <tr>
+          <td colspan=4>Offset to Link Value</td>
+        </tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+        </tr>
+
+        <tr>
+          <td>Offset to Link Value</td>
+          <td>
+            <P>The value of a symbolic link (that is, the name of the
+            thing to which it points) is stored in the local heap.
+            This field is the 4-byte offset into the local heap for
+            the start of the link value, which is null terminated.
+            </P>
+          </td>
+        </tr>
+      </table>
+    </div>
+
+    <h3><a name="LocalHeap">Disk Format: Level 1D - Local Heaps</a></h3>
+
+    <P>A heap is a collection of small heap objects.  Objects can be
+      inserted and removed from the heap at any time.  
+      The address of a heap does not change once the heap is created. 
+      References to objects are stored in the group table; 
+      the names of those objects are stored in the local heap.
+    </P>
+
+    <br>
+    <div align=center>
+      <table class=format>
+        <caption>
+          Local Heap
+        </caption>
+
+        <tr>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+        </tr>
+
+        <tr>
+          <td colspan=4>Signature</td>
+        </tr>
+
+        <tr>
+          <td>Version</td>
+          <td colspan=3>Reserved (zero)</td>
+        </td>
+          
+        <tr>
+          <td colspan=4>Data Segment Size<sup>L</sup></td>
+        </tr>
+
+        <tr>
+          <td colspan=4>Offset to Head of Free-list<sup>L</sup></td>
+        </tr>
+
+        <tr>
+          <td colspan=4>Address of Data Segment<sup>O</sup></td>
+        </tr>
+      </table>
+
+      <table class=note>
+        <tr><td>
+            (Items marked with an 'L' the above table are
+            <br>
+            of the size specified in "Size of Lengths.")
+        </td></tr>
+        <tr><td>
+            (Items marked with an 'O' the above table are
+            <br>
+            of the size specified in "Size of Offsets.")
+        </td></tr>
+      </table>
+    </div>
+
+    <p>
+    <center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+        </tr>
+
+        <tr>
+          <td>Signature</td>
+          <td>
+            <P>The ASCII character string "<code>HEAP</code>"
+            is used to indicate the
+            beginning of a heap.  This gives file consistency
+            checking utilities a better chance of reconstructing a
+            damaged file.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Version</td>
+          <td>
+            <P>Each local heap has its own version number so that new
+            heaps can be added to old files.  This document
+            describes version zero (0) of the local heap.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Data Segment Size</td>
+          <td>
+            <P>The total amount of disk memory allocated for the heap
+            data.  This may be larger than the amount of space
+            required by the objects stored in the heap.  The extra
+            unused space in the heap holds a linked list of free blocks.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Offset to Head of Free-list</td>
+          <td>
+            <P>This is the offset within the heap data segment of the
+            first free block (or the
+            <A href="#UndefinedAddress">undefined address</A> if there is no
+            free block).  The free block contains "Size of Lengths" bytes that
+            are the offset of the next free block (or the
+            value '1' if this is the
+            last free block) followed by "Size of Lengths" bytes that store
+            the size of this free block.  The size of the free block includes
+            the space used to store the offset of the next free block and
+            the of the current block, making the minimum size of a free block
+            2 * "Size of Lengths".
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Address of Data Segment</td>
+          <td>
+            <P>The data segment originally starts immediately after
+            the heap header, but if the data segment must grow as a
+            result of adding more objects, then the data segment may
+            be relocated, in its entirety, to another part of the 
+            file.
+            </P>
+          </td>
+        </tr>
+      </table>
+    </center>
+
+    <p>Objects within the heap should be aligned on an 8-byte boundary.
+
+    <h3><a name="GlobalHeap">Disk Format: Level 1E - Global Heap</a></h3>
+
+    <P>Each HDF5 file has a global heap which stores various types of
+      information which is typically shared between datasets.  The
+      global heap was designed to satisfy these goals:
+
+    <ol type="A">
+      <li>Repeated access to a heap object must be efficient without
+        resulting in repeated file I/O requests. Since global heap
+        objects will typically be shared among several datasets, it is
+        probable that the object will be accessed repeatedly.
+      <li>Collections of related global heap objects should result in
+        fewer and larger I/O requests.  For instance, a dataset of
+        object references will have a global heap object for each
+        reference.  Reading the entire set of object references
+        should result in a few large I/O requests instead of one small
+        I/O request for each reference.
+      <li>It should be possible to remove objects from the global heap
+        and the resulting file hole should be eligible to be reclaimed
+        for other uses.
+    </ol>
+    </P>
+
+    <P>The implementation of the heap makes use of the memory
+      management already available at the file level and combines that
+      with a new top-level object called a <em>collection</em> to
+      achieve Goal B. The global heap is the set of all collections.
+      Each global heap object belongs to exactly one collection and
+      each collection contains one or more global heap objects. For
+      the purposes of disk I/O and caching, a collection is treated as
+      an atomic object.
+    </P>
+
+    <P>The HDF5 library creates global heap collections as needed, so there may
+        be multiple collections throughout the file. The set of all of them is
+        abstractly called the "global heap", although they don't actually link
+        to each other, and there is no global place in the file where you can
+        discover all of the collections.  The collections are found simply by
+        finding a reference to one through another object in the file (eg.
+        variable-length datatype elements, etc).
+    </P>
+
+    <br>
+    <div align=center>
+      <table class=format>
+        <caption>
+          A Global Heap Collection
+        </caption>
+
+        <tr>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+        </tr>
+
+        <tr>
+          <td colspan=4>Signature</td>
+        </tr>
+          
+        <tr>
+          <td>Version</td>
+          <td colspan=3>Reserved (zero)</td>
+        </td>
+          
+        <tr>
+          <td colspan=4>Collection Size<sup>L</sup></td>
+        </tr>
+          
+        <tr>
+          <td colspan=4><br>Global Heap Object 1<br><br></td>
+        </tr>
+
+        <tr>
+          <td colspan=4><br>Global Heap Object 2<br><br></td>
+        </tr>
+
+        <tr>
+          <td colspan=4><br>...<br><br></td>
+        </tr>
+
+        <tr>
+          <td colspan=4><br>Global Heap Object <em>N</em><br><br></td>
+        </tr>
+
+        <tr>
+          <td colspan=4><br>Global Heap Object 0 (free space)<br><br></td>
+        </tr>
+      </table>
+
+      <table class=note>
+        <tr><td>
+            (Items marked with an 'L' the above table are
+            <br>
+            of the size specified in "Size of Lengths.")
+        </td></tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+        </tr>
+
+        <tr>
+          <td>Signature</td>
+          <td>
+            <P>The ASCII character string "<code>GCOL</code>"
+            is used to indicate the
+            beginning of a collection.  This gives file consistency
+            checking utilities a better chance of reconstructing a
+            damaged file.
+            </P>
+          </td>
+        </tr>
+          
+        <tr>
+          <td>Version</td>
+          <td>
+            <P>Each collection has its own version number so that new
+            collections can be added to old files.  This document
+            describes version one (1) of the collections (there is no
+            version zero (0)).
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Collection Size</td>
+          <td>
+            <P>This is the size in bytes of the entire collection
+            including this field.  The default (and minimum)
+            collection size is 4096 bytes which is a typical file
+            system block size.  This allows for 127 16-byte heap
+            objects plus their overhead (the collection header of 16 bytes
+            and the 16 bytes of information about each heap object).
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Global Heap Object 1 through <em>N</em></td> 
+          <td>
+            <P>The objects are stored in any order with no 
+            intervening unused space.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Global Heap Object 0</td>
+          <td>
+            <P>Global Heap Object 0 (zero), when present, represents the free
+            space in the collection.  Free space always appears at the end of
+            the collection.  If the free space is too small to store the header
+            for Object 0 (described below) then the header is implied and the
+            collection contains no free space.
+            </P>
+          </td>
+      </table>
+    </div>
+    
+    <br>
+    <div align=center>
+      <table class=format>
+        <caption>
+          Global Heap Object
+        </caption>
+
+        <tr>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+          <th>byte</th>
+        </tr>
+          
+        <tr>
+          <td colspan=2>Heap Object ID</td>
+          <td colspan=2>Reference Count</td>
+        </tr>
+
+        <tr>
+          <td colspan=4>Reserved</td>
+        </tr>
+
+        <tr>
+          <td colspan=4>Object Size<sup>L</sup></td>
+        </tr>
+
+        <tr>
+          <td colspan=4><br>Object Data<br><br></td>
+        </tr>
+      </table>
+
+      <table class=note>
+        <tr><td>
+            (Items marked with an 'L' the above table are
+            <br>
+            of the size specified in "Size of Lengths.")
+        </td></tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+        </tr>
+
+        <tr>
+          <td>Heap Object ID</td>
+          <td>
+            <P>Each object has a unique identification number within a
+            collection.  The identification numbers are chosen so that
+            new objects have the smallest value possible with the
+            exception that the identifier <code>0</code> always refers to the
+            object which represents all free space within the
+            collection.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Reference Count</td>
+          <td>
+            <P>All heap objects have a reference count field.  An
+            object which is referenced from some other part of the
+            file will have a positive reference count. The reference
+            count for Object 0 is always zero.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Reserved</td>
+          <td>
+            <P>Zero padding to align next field on an 8-byte boundary.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Object Size</td>
+          <td>
+            <P>This is the size of the object data stored for the object.
+            The actual storage space allocated for the object data is rounded
+            up to a multiple of eight.
+            </P>
+          </td>
+        </tr>
+
+        <tr>
+          <td>Object Data</td>
+          <td>
+            <P>The object data is treated as a one-dimensional array
+            of bytes to be interpreted by the caller.
+            </P>
+          </td>
+        </tr>
+      </table>
+    </div>
+
+    <h3><a name="FreeSpaceIndex">Disk Format: Level 1F - Free-space Index</a></h3>
+
+    <p>The free-space index is a collection of blocks of data,
+      dispersed throughout the file, which are currently not used by
+      any file objects.  
+
+    <p>The super block contains a pointer to root of the free-space description;
+      that pointer is currently required to be the
+      <A href="#UndefinedAddress">undefined address</A>.
+
+    <p>The format of the free-space index is not defined at this time.
+
+<!--
+    <p>The Free-space Index is a collection of blocks of data,
+      dispersed throughout the file, which are currently not used by
+      any file objects.  The blocks of data are indexed by a B-tree of
+      their length within the file.
+
+
+    <p>Each B-tree page is composed of the following entries and
+      B-tree management information, organized as follows:
+
+    <p>
+    <center>
+      <table border cellpadding=4 width="80%">
+        <caption align=bottom>
+          <B>HDF5 Free-space Heap Page</B>
+        </caption>
+
+        <tr align=center>
+          <th width="25%">byte</th>
+          <th width="25%">byte</th>
+          <th width="25%">byte</th>
+          <th width="25%">byte</th>
+
+        <tr align=center>
+          <td colspan=4>Signature</td>
+        <tr align=center>
+          <td colspan=4>B-tree Left-link Offset</td>
+        <tr align=center>
+          <td colspan=4><br>Length of Free-block #1<br> <br></td>
+        <tr align=center>
+          <td colspan=4><br>Offset of Free-block #1<br> <br></td>
+        <tr align=center>
+          <td colspan=4>.<br>.<br>.<br></td>
+        <tr align=center>
+          <td colspan=4><br>Length of Free-block #n<br> <br></td>
+        <tr align=center>
+          <td colspan=4><br>Offset of Free-block #n<br> <br></td>
+        <tr align=center>
+          <td colspan=4>"High" Offset</td>
+        <tr align=center>
+          <td colspan=4>Right-link Offset</td>
+      </table>
+    </center>
+
+    <p>
+    <dl>
+      <dt> The elements of the free-space heap page are described below:
+      <dd>
+        <dl>
+          <dt>Signature: (4 bytes)
+          <dd>The ASCII character string <code>FREE</code> 
+            is used to indicate the
+            beginning of a free-space heap B-tree page.  This gives
+            file consistency checking utilities a better chance of
+            reconstructing a damaged file.
+
+          <dt>B-tree Left-link Offset: (&lt;offset&gt; bytes)
+          <dd>This value is used to indicate the offset of all offsets
+            in the B-link-tree which are smaller than the value of the
+            offset in entry #1.  This value is also used to indicate a
+            leaf node in the B-link-tree by being set to all ones.
+
+          <dt>Length of Free-block #n: (&lt;length&gt; bytes)
+          <dd>This value indicates the length of an unused block in
+            the file.
+
+          <dt>Offset of Free-block #n: (&lt;offset&gt; bytes)
+          <dd>This value indicates the offset in the file of an
+            unused block in the file.
+
+          <dt>"High" Offset: (4-bytes)
+          <dd>This offset is used as the upper bound on offsets
+            contained within a page when the page has been split.
+
+          <dt>Right-link Offset: (&lt;offset&gt; bytes)
+          <dd>This value is used to indicate the offset of the next
+            child to the right of the parent of this group
+            page.  When there is no node to the right, this value is
+            all zeros.
+        </dl>
+    </dl>
+
+    <p>The algorithms for searching and inserting objects in the
+      B-tree pages are described fully in the Lehman and Yao paper,
+      which should be read to provide a full description of the
+      B-tree's usage.
+-->
+
+    <BR>
+    <HR>
+
+    <h2><a name="DataObject">Disk Format: Level 2 - Data Objects </a></h2>
+
+    <P>Data objects contain the real information in the file.  These
+      objects compose the scientific data and other information which
+      are generally thought of as "data" by the end-user.  All the
+      other information in the file is provided as a framework for
+      these data objects.
+    </P>
+
+    <P>A data object is composed of header information and data
+      information.  The header information contains the information
+      needed to interpret the data information for the data object as
+      well as additional "metadata" or pointers to additional
+      "metadata" used to describe or annotate each data object.
+    </P>
+
+    <h3><a name="ObjectHeader">
+	Disk Format: Level 2A - Data Object Headers</a></h3>
+
+    <P>The header information of an object is designed to encompass
+      all the information about an object, except for the data itself.
+      This information includes
+      the dataspace, datatype, information about how the data
+      is stored on disk (in external files, compressed, broken up in
+      blocks, etc.), as well as other information used by the library
+      to speed up access to the data objects or maintain a file's
+      integrity.  Information stored by user applications as attributes
+      is also stored in the object's header.  The header of each object is
+      not necessarily located immediately prior to the object's data in the
+      file and in fact may be located in any position in the file.  The order
+      of the messages in an object header is not significant.
+    </P>
+
+    <P>Header messages are aligned on 8-byte boundaries.
+    </P>
+
+    <br>
+    <div align=center>
+      <table class=format>
+	<caption>
+	  Object Headers
+	</caption>
+
+	<tr>
+	  <th>byte</th>
+	  <th>byte</th>
+	  <th>byte</th>
+	  <th>byte</th>
+	</tr>
+
+	<tr>
+	  <td>Version</td>
+	  <td>Reserved (zero)</td>
+	  <td colspan=2>Number of Header Messages</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Object Reference Count</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Object Header Size</td>
+	</tr>
+
+	<tr>
+	  <td colspan=2>Header Message Type #1</td>
+	  <td colspan=2>Size of Header Message Data #1</td>
+	</tr>
+
+	<tr>
+	  <td>Header Message #1 Flags</td>
+	  <td colspan=3>Reserved (zero)</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4><br>Header Message Data #1<br><br></td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>.<br>.<br>.<br></td>
+	</tr>
+
+	<tr>
+	  <td colspan=2>Header Message Type #n</td>
+	  <td colspan=2>Size of Header Message Data #n</td>
+	</tr>
+
+	<tr>
+	  <td>Header Message #n Flags</td>
+	  <td colspan=3>Reserved (zero)</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4><br>Header Message Data #n<br><br></td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>Version</td>
+	  <td>
+            <P>This value is used to determine the format of the
+	    information in the object header.  When the format of the
+	    information in the object header is changed, the version number
+	    is incremented and can be used to determine how the
+	    information in the object header is formatted.  This
+            document describes version one (1) (there was no version
+            zero (0)).
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Number of Header Messages</td>
+	  <td>
+            <P>This value determines the number of messages listed in
+	    object headers for this object.  This value includes the messages
+            in continuation messages for this object.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Object Reference Count</td>
+	  <td>
+            <P>This value specifies the number of "hard links" to this object
+            within the current file.  References to the object from external
+            files, "soft links" in this file and object references in this
+            file are not tracked.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Object Header Size</td>
+	  <td>
+            <P>This value specifies the number of bytes of header message data
+            following this length field that contain object header messages
+            for this object header.  This value does not include the size of
+            object header continuation blocks for this object elsewhere in the
+            file.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Header Message Type</td>
+	  <td>
+            <P>This value specifies the type of information included in the
+            following header message data.  The header message types for the
+            pre-defined header messages are included in sections below.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Size of Header Message Data</td>
+	  <td>
+            <P>This value specifies the number of bytes of header
+	    message data following the header message type and length
+	    information for the current message. The size includes
+	    padding bytes to make the message a multiple of eight
+	    bytes.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Header Message Flags</td>
+	  <td>
+            <P>This is a bit field with the following definition:
+            <table class=list>
+                <tr>
+                  <th width="30%">Bit</th>
+                  <th align=left>Description</th>
+                </tr>
+
+                <tr>
+                  <td align=center><code>0</code></td>
+                  <td>If set, the message data is constant.  This is used
+                    for messages like the datatype message of a dataset.
+                  </td>
+                </tr>
+                <tr>
+                  <td align=center><code>1</code></td>
+                  <td>If set, the message is stored in the global heap.
+                    The Header Message Data field contains a Shared Object
+                    message and the Size of Header Message Data field
+                    contains the size of that Shared Object message.
+                  </td>
+                </tr>
+                <tr>
+                  <td align=center><code>2-7</code></td>
+                  <td>Reserved</td>
+                </tr>
+	    </table>
+            </P>
+          </td>
+        </tr>
+
+	<tr>
+	  <td>Header Message Data</td>
+	  <td>
+            <P>The format and length of this field is determined by the
+	    header message type and size respectively.  Some header
+	    message types do not require any data and this information
+	    can be eliminated by setting the length of the message to
+	    zero. The data is padded with enough zeros to make the
+	    size a multiple of eight.
+            </P>
+          </td>
+	</tr>
+      </table>
+    </div>
+
+    <P>The header message types and the message data associated with
+      them compose the critical "metadata" about each object.  Some
+      header messages are required for each object while others are
+      optional.  Some optional header messages may also be repeated
+      several times in the header itself, the requirements and number
+      of times allowed in the header will be noted in each header
+      message description below.
+    </P>
+
+    <P>The following is a list of currently defined header messages:
+    </P>
+
+    <hr>
+    <h4><a name="NILMessage">Name: NIL</a></h4>
+
+    <P class=item><B>Header Message Type: </B>0x0000
+    </P>
+    <P class=item><B>Length:</B> varies
+    </P>
+    <P class=item><B>Status:</B> Optional, may be repeated.
+    </P>
+    <P class=item><B>Purpose and Description:</B> The NIL message is used to indicate a
+        message which is to be ignored when reading the header messages for a
+        data object.  [Possibly one which has been deleted for some reason.]
+    </P>
+    <P class=item><B>Format of Data:</B> Unspecified.
+    </P>
+
+    <hr>
+    <h4><a name="SimpleDataSpace">Name: Simple Dataspace</a></h4>
+
+    <P class=item><B>Header Message Type: </B>0x0001
+    </P>
+    <P class=item><B>Length:</B> Varies according to the number of dimensions, 
+      as described in the following table.
+    </P>
+    <P class=item><B>Status:</B> Required for dataset objects, may not be
+        repeated.
+    </P>
+    <P class=item><B>Description:</B> The simple dataspace message describes the
+        number of dimensions (i.e. "rank") and size of each dimension that the
+        data object has.  This message is only used for datasets which have a
+        simple, rectilinear grid layout; datasets requiring a more complex
+        layout (irregularly structured or unstructured grids, etc.) must use
+        the <em>Complex Dataspace</em> message for expressing the space the
+        dataset inhabits.  <i>(Note: The <em>Complex Dataspace</em>
+        functionality is not yet implemented and it is not described in this
+        document.)</i>
+    </P>
+
+    <P class=item><B>Format of Data:</B>
+    <br>
+    <div align=center>
+      <table class=format>
+	<caption>
+	  Simple Dataspace Message
+	</caption>
+
+	<tr>
+	  <th>byte</th>
+	  <th>byte</th>
+	  <th>byte</th>
+	  <th>byte</th>
+	</tr>
+
+	<tr>
+	  <td>Version</td>
+	  <td>Dimensionality</td>
+	  <td>Flags</td>
+	  <td>Reserved</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Reserved</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Dimension #1 Size<sup>L</sup></td>
+	<tr>
+	  <td colspan=4>.<br>.<br>.<br></td>
+	<tr>
+	  <td colspan=4>Dimension #n Size<sup>L</sup></td>
+	<tr>
+	  <td colspan=4>Dimension #1 Maximum Size<sup>L</sup></td>
+	<tr>
+	  <td colspan=4>.<br>.<br>.<br></td>
+	<tr>
+	  <td colspan=4>Dimension #n Maximum Size<sup>L</sup></td>
+	<tr>
+	  <td colspan=4>Permutation Index #1<sup>L</sup></td>
+	<tr>
+	  <td colspan=4>.<br>.<br>.<br></td>
+	<tr>
+	  <td colspan=4>Permutation Index #n<sup>L</sup></td>
+      </table>
+
+      <table class=note>
+        <tr><td>
+            (Items marked with an 'L' the above table are
+            <br>
+            of the size specified in "Size of Lengths.")
+        </td></tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>Version</td>
+	  <td>
+            <P>This value is used to determine the format of the
+	    Simple Dataspace Message.  When the format of the
+	    information in the message is changed, the version number
+	    is incremented and can be used to determine how the
+	    information in the object header is formatted.  This
+            document describes version one (1) (there was no version
+            zero (0)).
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Dimensionality</td>
+	  <td>
+            <P>This value is the number of dimensions that the data
+	    object has.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Flags</td>
+	  <td>
+            <P>This field is used to store flags to indicate the
+	    presence of parts of this message.  Bit 0 (the least
+	    significant bit) is used to indicate that maximum
+	    dimensions are present.  Bit 1 is used to indicate that
+	    permutation indices are present.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Dimension #n Size</td>
+	  <td>
+            <P>This value is the current size of the dimension of the
+	    data as stored in the file.  The first dimension stored in
+	    the list of dimensions is the slowest changing dimension
+	    and the last dimension stored is the fastest changing
+	    dimension.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Dimension #n Maximum Size</td>
+	  <td>
+            <P>This value is the maximum size of the dimension of the
+	    data as stored in the file.  This value may be the special
+            "<A href="#UnlimitedDim">unlimited</A>" size which indicates
+	    that the data may expand along this dimension indefinitely.
+            If these values are not stored, the maximum size of each
+            dimension is assumed to be the dimension's current size.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Permutation Index #n</td>
+	  <td>
+            <P>This value is the index permutation used to map
+	    each dimension from the canonical representation to an
+	    alternate axis for each dimension.  If these values are
+	    not stored, the first dimension stored in the list of
+	    dimensions is the slowest changing dimension and the last
+	    dimension stored is the fastest changing dimension.
+            </P>
+          </td>
+	</tr>
+      </table>
+    </div>
+
+    </P>
+
+<!--
+    <hr>
+    <h4><a name="DataSpaceMessage">Name: Complex Dataspace (Fiber Bundle?)</a></h4>
+    <b>Header Message Type: </b>0x0002<br>
+    <b>Length:</b> varies<br>
+
+    <b>Status:</b> One of the <em>Simple Dataspace</em> or
+    <em>Complex Dataspace</em> messages is required (but not both) and may
+    not be repeated.<br> <b>Purpose and Description:</b> The
+    <em>Dataspace</em> message describes space that the dataset is
+    mapped onto in a more comprehensive way than the <em>Simple
+    Dimensionality</em> message is capable of handling.  The
+    dataspace of a dataset encompasses the type of coordinate system
+    used to locate the dataset's elements as well as the structure and
+    regularity of the coordinate system.  The dataspace also
+    describes the number of dimensions which the dataset inhabits as
+    well as a possible higher dimensional space in which the dataset
+    is located within.
+
+    <br>
+    <b>Format of Data:</b>
+
+    <center>
+      <table border cellpadding=4 width="80%">
+	<caption align=bottom>
+	  <B>HDF5 Dataspace Message Layout</B>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+
+	<tr align=center>
+	  <td colspan=4>Mesh Type</td>
+	<tr align=center>
+	  <td colspan=4>Logical Dimensionality</td>
+      </table>
+    </center>
+
+    <p>
+    <dl>
+      <dt>The elements of the dimensionality message are described below: 
+      <dd>
+	<dl>
+	  <dt>Mesh Type: (unsigned 32-bit integer)
+	  <dd>This value indicates whether the grid is
+	    polar/spherical/cartesion, 
+	    structured/unstructured and regular/irregular. <br>
+	    The mesh type value is broken up as follows: <br>
+
+	    <P>
+	    <center>
+	      <table border cellpadding=4 width="80%">
+		<caption align=bottom>
+		  <B>HDF5 Mesh-type Layout</B>
+		</caption>
+
+		<tr align=center>
+		  <th width="25%">byte</th>
+		  <th width="25%">byte</th>
+		  <th width="25%">byte</th>
+		  <th width="25%">byte</th>
+
+		<tr align=center>
+		  <td colspan=1>Mesh Embedding</td>
+		  <td colspan=1>Coordinate System</td>
+		  <td colspan=1>Structure</td>
+		  <td colspan=1>Regularity</td>
+	      </table>
+	    </center>
+	    The following are the definitions of mesh-type bytes:
+	    <dl>
+	      <dt>Mesh Embedding
+	      <dd>This value indicates whether the dataset dataspace
+		is located within 
+		another dataspace or not:
+		<dl> <dl>
+		    <dt>&lt;STANDALONE&gt;
+		    <dd>The dataset mesh is self-contained and is not
+		      embedded in another mesh. 
+		    <dt>&lt;EMBEDDED&gt;
+		    <dd>The dataset's dataspace is located within
+		      another dataspace, as 
+		      described in information below.
+		  </dl> </dl>
+	      <dt>Coordinate System
+	      <dd>This value defines the type of coordinate system
+		used for the mesh: 
+		<dl> <dl>
+		    <dt>&lt;POLAR&gt;
+		    <dd>The last two dimensions are in polar
+		      coordinates, higher dimensions are 
+		      cartesian.
+		    <dt>&lt;SPHERICAL&gt;
+		    <dd>The last three dimensions are in spherical
+		      coordinates, higher dimensions 
+		      are cartesian.
+		    <dt>&lt;CARTESIAN&gt;
+		    <dd>All dimensions are in cartesian coordinates.
+		  </dl> </dl>
+	      <dt>Structure
+	      <dd>This value defines the locations of the grid-points
+		on the axes: 
+		<dl> <dl>
+		    <dt>&lt;STRUCTURED&gt;
+		    <dd>All grid-points are on integral, sequential
+		      locations, starting from 0. 
+		    <dt>&lt;UNSTRUCTURED&gt;
+		    <dd>Grid-points locations in each dimension are
+		      explicitly defined and 
+		      may be of any numeric datatype.
+		  </dl> </dl>
+	      <dt>Regularity
+	      <dd>This value defines the locations of the dataset
+		points on the grid: 
+		<dl> <dl>
+		    <dt>&lt;REGULAR&gt;
+		    <dd>All dataset elements are located at the
+		      grid-points defined. 
+		    <dt>&lt;IRREGULAR&gt;
+		    <dd>Each dataset element has a particular
+		      grid-location defined. 
+		  </dl> </dl>
+	    </dl>
+	    <p>The following grid combinations are currently allowed:
+	    <dl> <dl>
+		<dt>&lt;POLAR-STRUCTURED-REGULAR&gt;
+		<dt>&lt;SPHERICAL-STRUCTURED-REGULAR&gt;
+		<dt>&lt;CARTESIAN-STRUCTURED-REGULAR&gt;
+		<dt>&lt;POLAR-UNSTRUCTURED-REGULAR&gt;
+		<dt>&lt;SPHERICAL-UNSTRUCTURED-REGULAR&gt;
+		<dt>&lt;CARTESIAN-UNSTRUCTURED-REGULAR&gt;
+		<dt>&lt;CARTESIAN-UNSTRUCTURED-IRREGULAR&gt;
+	      </dl> </dl>
+	    All of the above grid types can be embedded within another
+	    dataspace.
+	    <br> <br>
+	  <dt>Logical Dimensionality: (unsigned 32-bit integer)
+	  <dd>This value is the number of dimensions that the dataset occupies.
+
+	    <P>
+	    <center>
+	      <table border cellpadding=4 width="80%">
+		<caption align=bottom>
+		  <B>HDF5 Dataspace Embedded Dimensionality Information</B>
+		</caption>
+
+		<tr align=center>
+		  <th width="25%">byte</th>
+		  <th width="25%">byte</th>
+		  <th width="25%">byte</th>
+		  <th width="25%">byte</th>
+
+		<tr align=center>
+		  <td colspan=4>Embedded Dimensionality</td>
+		<tr align=center>
+		  <td colspan=4>Embedded Dimension Size #1</td>
+		<tr align=center>
+		  <td colspan=4>.<br>.<br>.<br></td>
+		<tr align=center>
+		  <td colspan=4>Embedded Dimension Size #n</td>
+		<tr align=center>
+		  <td colspan=4>Embedded Origin Location #1</td>
+		<tr align=center>
+		  <td colspan=4>.<br>.<br>.<br></td>
+		<tr align=center>
+		  <td colspan=4>Embedded Origin Location #n</td>
+	      </table>
+	    </center>
+
+	  <dt>Embedded Dimensionality: (unsigned 32-bit integer)
+	  <dd>This value is the number of dimensions of the space the
+	    dataset is located 
+	    within.  i.e. a planar dataset located within a 3-D space,
+	    or a 3-D dataset 
+	    which is a subset of another 3-D space, etc.
+	  <dt>Embedded Dimension Size: (unsigned 32-bit integer)
+	  <dd>These values are the sizes of the dimensions of the
+	    embedded dataspace 
+	    that the dataset is located within.
+	  <dt>Embedded Origin Location: (unsigned 32-bit integer)
+	  <dd>These values comprise the location of the dataset's
+	    origin within the embedded dataspace. 
+	</dl>
+    </dl>
+    [Comment: need some way to handle different orientations of the
+    dataset dataspace 
+    within the embedded dataspace]<br>
+
+    <P>
+    <center>
+      <table border cellpadding=4 width="80%">
+	<caption align=bottom>
+	  <B>HDF5 Dataspace Structured/Regular Grid Information</B>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+
+	<tr align=center>
+	  <td colspan=4>Logical Dimension Size #1</td>
+	<tr align=center>
+	  <td colspan=4>Logical Dimension Maximum #1</td>
+	<tr align=center>
+	  <td colspan=4>.<br>.<br>.<br></td>
+	<tr align=center>
+	  <td colspan=4>Logical Dimension Size #n</td>
+	<tr align=center>
+	  <td colspan=4>Logical Dimension Maximum #n</td>
+      </table>
+    </center>
+
+    <p>
+    <dl>
+      <dt>The elements of the dimensionality message are described below: 
+      <dd>
+	<dl>
+	  <dt>Logical Dimension Size #n: (unsigned 32-bit integer)
+	  <dd>This value is the current size of the dimension of the
+	    data as stored in 
+	    the file.  The first dimension stored in the list of
+	    dimensions is the slowest 
+	    changing dimension and the last dimension stored is the
+	    fastest changing 
+	    dimension. 
+	  <dt>Logical Dimension Maximum #n: (unsigned 32-bit integer)
+	  <dd>This value is the maximum size of the dimension of the
+	    data as stored in 
+	    the file.  This value may be the special value
+	    &lt;UNLIMITED&gt; which 
+	    indicates that the data may expand along this dimension
+	    indefinitely. 
+	</dl>
+    </dl>
+    <P>
+    <center>
+      <table border cellpadding=4 width="80%">
+	<caption align=bottom>
+	  <B>HDF5 Dataspace Structured/Irregular Grid Information</B>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+
+	<tr align=center>
+	  <td colspan=4># of Grid Points in Dimension #1</td>
+	<tr align=center>
+	  <td colspan=4>.<br>.<br>.<br></td>
+	<tr align=center>
+	  <td colspan=4># of Grid Points in Dimension #n</td>
+	<tr align=center>
+	  <td colspan=4>Datatype of Grid Point Locations</td>
+	<tr align=center>
+	  <td colspan=4>Location of Grid Points in Dimension #1</td>
+	<tr align=center>
+	  <td colspan=4>.<br>.<br>.<br></td>
+	<tr align=center>
+	  <td colspan=4>Location of Grid Points in Dimension #n</td>
+      </table>
+    </center>
+
+    <P>
+    <center>
+      <table border cellpadding=4 width="80%">
+	<caption align=bottom>
+	  <B>HDF5 Dataspace Unstructured Grid Information</B>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+
+	<tr align=center>
+	  <td colspan=4># of Grid Points</td>
+	<tr align=center>
+	  <td colspan=4>Datatype of Grid Point Locations</td>
+	<tr align=center>
+	  <td colspan=4>Grid Point Locations<br>.<br>.<br></td>
+      </table>
+    </center>
+-->
+
+    <hr>
+    <h4><a name="ReservedMessage_0002">Name: Reserved - Not Assigned Yet</a></h4>
+    <b>Header Message Type:</b> 0x0002<BR>
+    <b>Length:</b> N/A<BR>
+    <b>Status:</b> N/A<BR>
+    <b>Format of Data:</b> N/A<BR>
+
+    <p><b>Purpose and Description:</b> This message type was skipped during
+      the initial specification of the file format and may be used in a
+      future expansion to the format.
+
+
+    <hr>
+    <h4><a name="DataTypeMessage">Name: Datatype</a></h4>
+
+    <P class=item><B>Header Message Type:</B> 0x0003
+    </P>
+    <P class=item><B>Length:</B> variable
+    </P>
+    <P class=item><B>Status:</B> Required for dataset or named datatype objects,
+        may not be repeated.
+    </P>
+
+    <P class=item><B>Description:</B> The datatype message defines the datatype
+        for each element of a dataset.  A datatype can describe an atomic type
+        like a fixed- or floating-point type or a compound type like a C
+        struct.
+        Datatypes messages are stored 
+        as a list of datatype classes and
+        their associated properties.
+    </P>
+
+    <P class=item2>Datatype messages that are part of a dataset object, 
+        do not describe how elements are related to one another, the dataspace
+        message is used for that purpose.  Datatype messages that are part of
+        a named datatype message describe an "abstract" datatype that can be
+        used by other objects in the file.
+    </P>
+
+    <P class=item><B>Format of Data:</B>
+    <br>
+    <div align=center>
+      <table class=format>
+	<caption>
+	  Datatype Message
+	</caption>
+
+	<tr>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>
+
+	<tr>
+	  <td>Class and Version</td>
+	  <td>Class Bit Field, Bits 0-7</td>
+	  <td>Class Bit Field, Bits 8-15</td>
+	  <td>Class Bit Field, Bits 16-23</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Size</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4><br><br>Properties<br><br><br></td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>Class and Version</td>
+	  <td>
+            <P>The version of the datatype message and the datatype's class
+                information are packed together in this field.  The version
+                number is packed in the top 4 bits of the field and the class
+                is contained in the bottom 4 bits.
+            </P>
+            <P>The version number information is used for changes in the
+                format of the datatype message and is described here:
+                <table class=list>
+                    <tr>
+                      <th width="30%">Version</th>
+                      <th align=left>Description</th>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>0</code></td>
+                      <td>Never used
+                      </td>
+                    </tr>
+                    <tr>
+                      <td align=center><code>1</code></td>
+                      <td>Used by early versions of the library to encode
+                            compound datatypes with explicit array fields.
+                            See the compound datatype description below for
+                            further details.
+                      </td>
+                    </tr>
+                    <tr>
+                      <td align=center><code>2</code></td>
+                      <td>The current version used by the library.
+                      </td>
+                    </tr>
+                </table>
+            </P>
+            <P>The class of the datatype determines the format for the class
+                bit field and properties portion of the datatype message, which
+                are described below.  The
+                following classes are currently defined:
+                <table width=100% class=list>
+                    <tr>
+                      <th width="30%">Value</th>
+                      <th align=left>Description</th>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>0</code></td>
+                      <td>Fixed-Point</td>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>1</code></td>
+                      <td>Floating-Point</td>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>2</code></td>
+                      <td>Time</td>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>3</code></td>
+                      <td>String</td>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>4</code></td>
+                      <td>Bitfield</td>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>5</code></td>
+                      <td>Opaque</td>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>6</code></td>
+                      <td>Compound</td>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>7</code></td>
+                      <td>Reference</td>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>8</code></td>
+                      <td>Enumerated</td>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>9</code></td>
+                      <td>Variable-Length</td>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>10</code></td>
+                      <td>Array</td>
+                    </tr>
+                </table>
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Class Bit Fields</td>
+	  <td>
+            <P>The information in these bit fields is specific to each datatype
+                class and is described below.  All bits not defined for a
+                datatype class are set to zero.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Size</td>
+	  <td>
+            <P>The size of the datatype in bytes.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Properties</td>
+	  <td>
+            <P>This variable-sized field encodes information specific to each
+                datatype class and is described below.  If there is no
+                property information specified for a datatype class, the size
+                of this field is zero.
+            </P>
+          </td>
+	</tr>
+
+      </table>
+    </div>
+    </P>
+
+    <P>Class specific information for Fixed-Point Numbers (Class 0):
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<caption>
+	  Bit Field Description
+	</caption>
+
+	<tr>
+	  <th width="10%">Bits</th>
+	  <th>Meaning</th>
+	</tr>
+
+	<tr>
+	  <td>0</td>
+	  <td><b>Byte Order.</b> If zero, byte order is little-endian;
+	    otherwise, byte order is big endian.</td>
+	</tr>
+
+	<tr>
+	  <td>1, 2</td>
+	  <td><b>Padding type.</b>  Bit 1 is the lo_pad type and bit 2
+	    is the hi_pad type.  If a datum has unused bits at either
+	    end, then the lo_pad or hi_pad bit is copied to those
+	    locations.</td>
+	</tr>
+
+	<tr>
+	  <td>3</td>
+	  <td><b>Signed.</b> If this bit is set then the fixed-point
+	    number is in 2's complement form.</td>
+	</tr>
+
+	<tr>
+	  <td>4-23</td>
+	  <td>Reserved (zero).</td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=format>
+	<caption>
+	  Property Descriptions
+	</caption>
+
+	<tr>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	</tr>
+
+	<tr>
+	  <td colspan=2>Bit Offset</td>
+	  <td colspan=2>Bit Precision</td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>Bit Offset</td>
+	  <td>
+            <P>The bit offset of the first significant bit of the fixed-point
+                value within the datatype.  The bit offset specifies the number
+                of bits "to the right of" the value.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Bit Precision</td>
+	  <td>
+            <P>The number of bits of precision of the fixed-point value
+                within the datatype.
+            </P>
+          </td>
+	</tr>
+
+      </table>
+    </div>
+    </P>
+
+    <P>Class specific information for Floating-Point Numbers (Class 1):
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<caption>
+	  Bit Field Description
+	</caption>
+
+	<tr>
+	  <th width="10%">Bits</th>
+	  <th>Meaning</th>
+	</tr>
+
+	<tr>
+	  <td>0</td>
+	  <td><b>Byte Order.</b> If zero, byte order is little-endian;
+	    otherwise, byte order is big endian.</td>
+	</tr>
+
+	<tr>
+	  <td>1, 2, 3</td>
+	  <td><b>Padding type.</b>  Bit 1 is the low bits pad type, bit 2
+	    is the high bits pad type, and bit 3 is the internal bits
+	    pad type.  If a datum has unused bits at either end or between
+	    the sign bit, exponent, or mantissa, then the value of bit
+	    1, 2, or 3 is copied to those locations.</td>
+	</tr>
+
+	<tr>
+	  <td>4-5</td>
+	  <td><b>Normalization.</b> The value can be 0 if there is no
+	    normalization, 1 if the most significant bit of the
+	    mantissa is always set (except for 0.0), and 2 if the most
+	    signficant bit of the mantissa is not stored but is
+	    implied to be set. The value 3 is reserved and will not
+	    appear in this field.</td>
+	</tr>
+
+	<tr>
+	  <td>6-7</td>
+	  <td>Reserved (zero).</td>
+	</tr>
+
+	<tr>
+	  <td>8-15</td>
+	  <td><b>Sign Location.</b> This is the bit position of the sign
+	    bit.  Bits are numbered with the least significant bit zero.</td>
+	</tr>
+
+	<tr>
+	  <td>16-23</td>
+	  <td>Reserved (zero).</td>
+	</tr>
+
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=format>
+	<caption>
+	  Property Descriptions
+	</caption>
+
+	<tr>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	</tr>
+
+	<tr>
+	  <td colspan=2>Bit Offset</td>
+	  <td colspan=2>Bit Precision</td>
+	</tr>
+
+	<tr>
+	  <td>Exponent Location</td>
+	  <td>Exponent Size</td>
+	  <td>Mantissa Location</td>
+	  <td>Mantissa Size</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Exponent Bias</td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>Bit Offset</td>
+	  <td>
+            <P>The bit offset of the first significant bit of the floating-point
+                value within the datatype.  The bit offset specifies the number
+                of bits "to the right of" the value.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Bit Precision</td>
+	  <td>
+            <P>The number of bits of precision of the floating-point value
+                within the datatype.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Exponent Location</td>
+	  <td>
+            <P>The bit position of the exponent field.  Bits are numbered with
+                the least significant bit number zero.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Exponent Size</td>
+	  <td>
+            <P>The size of the exponent field in bits.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Mantissa Location</td>
+	  <td>
+            <P>The bit position of the mantissa field.  Bits are numbered with
+                the least significant bit number zero.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Mantissa Size</td>
+	  <td>
+            <P>The size of the mantissa field in bits.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Exponent Bias</td>
+	  <td>
+            <P>The bias of the exponent field.
+            </P>
+          </td>
+	</tr>
+
+      </table>
+    </div>
+    </P>
+
+    <P>Class specific information for Time (Class 2):
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<caption>
+	  Bit Field Description
+	</caption>
+
+	<tr>
+	  <th width="10%">Bits</th>
+	  <th>Meaning</th>
+	</tr>
+
+	<tr>
+	  <td>0</td>
+	  <td><b>Byte Order.</b> If zero, byte order is little-endian;
+	    otherwise, byte order is big endian.</td>
+	</tr>
+
+	<tr>
+	  <td>1-23</td>
+	  <td>Reserved (zero).</td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=format>
+	<caption>
+	  Property Descriptions
+	</caption>
+
+	<tr>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	</tr>
+
+	<tr>
+	  <td colspan=2>Bit Precision</td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>Bit Precision</td>
+	  <td>
+            <P>The number of bits of precision of the time value.
+            </P>
+          </td>
+	</tr>
+
+      </table>
+    </div>
+    </P>
+
+    <P>Class specific information for Strings (Class 3):
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<caption>
+	  Bit Field Description
+	</caption>
+
+	<tr>
+	  <th width="10%">Bits</th>
+	  <th>Meaning</th>
+	</tr>
+
+	<tr>
+	  <td>0-3</td>
+	  <td><b>Padding type.</b>  This four-bit value determines the
+	    type of padding to use for the string.  The values are:
+
+            <table width=100% class=list>
+                <tr>
+                  <th width="30%">Value</th>
+                  <th align=left>Description</th>
+                </tr>
+
+                <tr>
+                  <td align=center><code>0</code></td>
+                  <td>Null Terminate: A zero byte marks the end of the
+                    string and is guaranteed to be present after
+                    converting a long string to a short string.  When
+                    converting a short string to a long string the value is
+                    padded with additional null characters as necessary.
+                  </td>
+                </tr>
+
+                <tr>
+                  <td align=center><code>1</code></td>
+                  <td>Null Pad: Null characters are added to the end of
+                    the value during conversions from short values to long
+                    values but conversion in the opposite direction simply
+                    truncates the value.
+                  </td>
+                </tr>
+
+                <tr>
+                  <td align=center><code>2</code></td>
+                  <td>Space Pad: Space characters are added to the end of
+                    the value during conversions from short values to long
+                    values but conversion in the opposite direction simply
+                    truncates the value.  This is the Fortran
+                    representation of the string.
+                  </td>
+                </tr>
+
+                <tr>
+                  <td align=center><code>3-15</code></td>
+                  <td>Reserved
+                  </td>
+                </tr>
+            </table>
+	</tr>
+
+	<tr>
+	  <td>4-7</td>
+	  <td><b>Character Set.</b>  The character set to use for
+	    encoding the string.  The only character set supported is
+	    the 8-bit ASCII (zero) so no translations have been defined
+	    yet.</td>
+	</tr>
+
+	<tr>
+	  <td>8-23</td>
+	  <td>Reserved (zero).</td>
+	</tr>
+      </table>
+    </div>
+
+    <P>There are no properties defined for the string class.
+    </P>
+    </P>
+
+    <P>Class specific information for Bitfields (Class 4):
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<caption>
+	  Bit Field Description
+	</caption>
+
+	<tr>
+	  <th width="10%">Bits</th>
+	  <th>Meaning</th>
+	</tr>
+
+	<tr>
+	  <td>0</td>
+	  <td><b>Byte Order.</b> If zero, byte order is little-endian;
+	    otherwise, byte order is big endian.</td>
+	</tr>
+
+	<tr>
+	  <td>1, 2</td>
+	  <td><b>Padding type.</b>  Bit 1 is the lo_pad type and bit 2
+	    is the hi_pad type.  If a datum has unused bits at either
+	    end, then the lo_pad or hi_pad bit is copied to those
+	    locations.</td>
+	</tr>
+
+	<tr>
+	  <td>3-23</td>
+	  <td>Reserved (zero).</td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=format>
+	<caption>
+	  Property Description
+	</caption>
+
+	<tr>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	</tr>
+
+	<tr>
+	  <td colspan=2>Bit Offset</td>
+	  <td colspan=2>Bit Precision</td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>Bit Offset</td>
+	  <td>
+            <P>The bit offset of the first significant bit of the bitfield
+                within the datatype.  The bit offset specifies the number
+                of bits "to the right of" the value.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Bit Precision</td>
+	  <td>
+            <P>The number of bits of precision of the bitfield
+                within the datatype.
+            </P>
+          </td>
+	</tr>
+      </table>
+    </div>
+    </P>
+
+    <P>Class specific information for Opaque (Class 5):
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<caption>
+	  Bit Field Description
+	</caption>
+
+	<tr>
+	  <th width="10%">Bits</th>
+	  <th>Meaning</th>
+	</tr>
+
+	<tr>
+	  <td>0-7</td>
+	  <td>Length of ASCII tag in bytes.</td>
+	</tr>
+
+	<tr>
+	  <td>8-23</td>
+	  <td>Reserved (zero).</td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=format>
+	<caption>
+	  Property Description
+	</caption>
+
+	<tr>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	</tr>
+
+	<tr>
+	  <td colspan=4><br>ASCII Tag<br>
+	    <br></td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>ASCII Tag</td>
+	  <td>
+            <P>This NUL-terminated string provides a description for the
+                opaque type.  It is NUL-padded to a multiple of 8 bytes.
+            </P>
+          </td>
+	</tr>
+      </table>
+    </div>
+    </P>
+
+    <P>Class specific information for Compound (Class 6):
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<caption>
+	  Bit Field Description
+	</caption>
+
+	<tr>
+	  <th width="10%">Bits</th>
+	  <th>Meaning</th>
+	</tr>
+
+	<tr>
+	  <td>0-15</td>
+	  <td><b>Number of Members.</b> This field contains the number
+	    of members defined for the compound datatype.  The member
+	    definitions are listed in the Properties field of the data
+	    type message.
+	</tr>
+
+	<tr>
+	  <td>15-23</td>
+	  <td>Reserved (zero).</td>
+	</tr>
+      </table>
+    </div>
+    </P>
+
+    <P>The Properties field of a compound datatype is a list of the
+      member definitions of the compound datatype.  The member
+      definitions appear one after another with no intervening bytes.
+      The member types are described with a recursive datatype
+      message.
+
+    <P>Note that the property descriptions are different for different
+      versions of the datatype version.  Additionally note that the version
+      0 properties are deprecated and have been replaced with the version
+      1 properties in versions of the HDF5 library from the 1.4 release
+      onward.
+
+    <br>
+    <div align=center>
+      <table class=format>
+	<caption>
+	  Properties Description for Datatype Version 1
+	</caption>
+
+	<tr>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	</tr>
+
+	<tr>
+	  <td colspan=4><br>Name<br><br></td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Byte Offset of Member</td>
+	</tr>
+
+	<tr>
+	  <td>Dimensionality</td>
+	  <td colspan=3>Reserved (zero)</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Dimension Permutation</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Reserved (zero)</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Dimension #1 Size (required)</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Dimension #2 Size (required)</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Dimension #3 Size (required)</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Dimension #4 Size (required)</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4><br>Member Type Message<br><br></td>
+	</tr>
+
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>Name</td>
+	  <td>
+            <P>This NUL-terminated string provides a description for the
+                opaque type.  It is NUL-padded to a multiple of 8 bytes.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Byte Offset of Member</td>
+	  <td>
+            <P>This is the byte offset of the member within the datatype.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Dimensionality</td>
+	  <td>
+            <P>If set to zero, this field indicates a scalar member.  If set
+                to a value greater than zero, this field indicates that the
+                member is an array of values.  For array members, the size of
+                the array is indicated by the 'Size of Dimension n' field in
+                this message.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Dimension Permutation</td>
+	  <td>
+            <P>This field was intended to allow an array field to have 
+                it's dimensions permuted, but this was never implemented.
+                This field should always be set to zero.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Dimension #n Size</td>
+	  <td>
+            <P>This field is the size of a dimension of the array field as
+            stored in the file.  The first dimension stored in the list of
+            dimensions is the slowest changing dimension and the last
+            dimension stored is the fastest changing dimension.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Member Type Message</td>
+	  <td>
+            <P>This field is a datatype message describing the datatype of
+            the member.
+            </P>
+          </td>
+	</tr>
+
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=format>
+	<caption>
+	  Properties Description for Datatype Version 2
+	</caption>
+
+	<tr>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	</tr>
+
+	<tr>
+	  <td colspan=4><br>Name<br><br></td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Byte Offset of Member</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4><br>Member Type Message<br><br></td>
+	</tr>
+
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>Name</td>
+	  <td>
+            <P>This NUL-terminated string provides a description for the
+                opaque type.  It is NUL-padded to a multiple of 8 bytes.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Byte Offset of Member</td>
+	  <td>
+            <P>This is the byte offset of the member within the datatype.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Member Type Message</td>
+	  <td>
+            <P>This field is a datatype message describing the datatype of
+            the member.
+            </P>
+          </td>
+	</tr>
+
+      </table>
+    </div>
+    </P>
+
+    <P>Class specific information for Reference (Class 7):
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<caption>
+	  Bit Field Description
+	</caption>
+
+	<tr>
+	  <th width="10%">Bits</th>
+	  <th>Meaning</th>
+	</tr>
+
+	<tr>
+	  <td>0-3</td>
+	  <td><b>Type.</b> This four-bit value contains the type of reference
+            described.  The values defined are:
+
+            <table width=100% class=list>
+                <tr>
+                  <th width="30%">Value</th>
+                  <th align=left>Description</th>
+                </tr>
+
+                <tr>
+                  <td align=center><code>0</code></td>
+                  <td>Object Reference: A reference to another object in this
+                    HDF5 file.
+                  </td>
+                </tr>
+
+                <tr>
+                  <td align=center><code>1</code></td>
+                  <td>Dataset Region Reference: A reference to a region within
+                    a dataset in this HDF5 file.
+                  </td>
+                </tr>
+
+                <tr>
+                  <td align=center><code>2</code></td>
+                  <td>Internal Reference: A reference to a region within the
+                    current dataset.  (Not currently implemented)
+                  </td>
+                </tr>
+
+                <tr>
+                  <td align=center><code>3-15</code></td>
+                  <td>Reserved
+                  </td>
+                </tr>
+            </table>
+
+            </td>
+	</tr>
+
+	<tr>
+	  <td>15-23</td>
+	  <td>Reserved (zero).</td>
+	</tr>
+      </table>
+    </div>
+
+    <P>There are no properties defined for the reference class.
+    </P>
+    </P>
+
+    <P>Class specific information for Enumeration (Class 8):
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<caption>
+	  Bit Field Description
+	</caption>
+
+	<tr>
+	  <th width="10%">Bits</th>
+	  <th>Meaning</th>
+	</tr>
+
+	<tr>
+	  <td>0-15</td>
+	  <td><b>Number of Members.</b> The number of name/value
+	    pairs defined for the enumeration type.</td>
+	</tr>
+
+	<tr>
+	  <td>16-23</td>
+	  <td>Reserved (zero).</td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=format>
+	<caption>
+	  Property Description
+	</caption>
+
+	<tr>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	  <th width="25%">Byte</th>
+	</tr>
+
+	<tr>
+	  <td colspan=4><br>Base Type<br><br></td>
+	</tr>
+
+	<tr>
+	  <td colspan=4><br>Names<br><br></td>
+	</tr>
+
+	<tr>
+	  <td colspan=4><br>Values<br><br></td>
+        </tr>
+
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>Base Type</td>
+	  <td>
+            <P>Each enumeration type is based on some parent type, usually an
+                integer. The information for that parent type is described
+                recursively by this field.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Names</td>
+	  <td>
+            <P>The name for each name/value pair. Each name is stored as a null
+                terminated ASCII string in a multiple of eight bytes. The names
+                are in no particular order.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Values</td>
+	  <td>
+            <P>The list of values in the same order as the names.  The values
+                are packed (no inter-value padding) and the size of each value
+                is determined by the parent type.
+            </P>
+          </td>
+	</tr>
+
+      </table>
+    </div>
+    </P>
+
+
+    <P>Class specific information for Variable-Length (Class 9):
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<caption>
+	  Bit Field Description
+	</caption>
+
+	<tr>
+	  <th width="10%">Bits</th>
+	  <th>Meaning</th>
+	</tr>
+
+	<tr>
+	  <td>0-3</td>
+	  <td><b>Type.</b> This four-bit value contains the type of
+            variable-length datatype described.  The values defined are:
+
+            <table width=100% class=list>
+                <tr>
+                  <th width="30%">Value</th>
+                  <th align=left>Description</th>
+                </tr>
+
+                <tr>
+                  <td align=center><code>0</code></td>
+                  <td>Sequence: A variable-length sequence of any sequence of
+                    data.  Variable-length sequences do not have padding or
+                    character set information.
+                  </td>
+                </tr>
+
+                <tr>
+                  <td align=center><code>1</code></td>
+                  <td>String: A variable-length sequence of characters.
+                    Variable-length strings have padding and character set
+                    information.
+                  </td>
+                </tr>
+
+                <tr>
+                  <td align=center><code>2-15</code></td>
+                  <td>Reserved
+                  </td>
+                </tr>
+            </table>
+
+            </td>
+	</tr>
+
+	<tr>
+	  <td>4-7</td>
+	  <td><b>Padding type.</b> (variable-length string only)
+                  This four-bit value determines the type of padding 
+                  used for variable-length strings.  The values are the same 
+                  as for the string padding type, as follows:
+            <table width=100% class=list>
+                <tr>
+                  <th width="30%">Value</th>
+                  <th align=left>Description</th>
+                </tr>
+
+                <tr>
+                  <td align=center><code>0</code></td>
+                  <td>Null terminate: A zero byte marks the end of a string
+                    and is guaranteed to be present after converting a long
+                    string to a short string.  When converting a short string
+                    to a long string, the value is padded with additional null
+                    characters as necessary.
+                  </td>
+                </tr>
+
+                <tr>
+                  <td align=center><code>1</code></td>
+                  <td>Null pad: Null characters are added to the end of the
+                    value during conversion from a short string to a longer
+                    string.  Conversion from a long string to a shorter string
+                    simply truncates the value.
+                  </td>
+                </tr>
+
+                <tr>
+                  <td align=center><code>2</code></td>
+                  <td>Space pad: Space characters are added to the end of the
+                    value during conversion from a short string to a longer
+                    string.  Conversion from a long string to a shorter string
+                    simply truncates the value.  This is the Fortran
+                    representation of the string.
+                  </td>
+                </tr>
+
+                <tr>
+                  <td align=center><code>3-15</code></td>
+                  <td>Reserved
+                  </td>
+                </tr>
+            </table>
+
+            This value is set to zero for variable-length sequences.
+
+          </td>
+	</tr>
+
+	<tr>
+	  <td>8-11</td>
+	  <td><b>Character Set.</b> (variable-length string only)
+                  This four-bit value specifies the character set 
+                  to be used for encoding the string:
+            <table width=100% class=list>
+                <tr>
+                  <th width="30%">Value</th>
+                  <th align=left>Description</th>
+                </tr>
+
+                <tr>
+                  <td align=center><code>0</code></td>
+                  <td>ASCII: As of this writing (July 2003, Release 1.6.0),
+                    8-bit ASCII is the only character set supported.  Therefore,
+                    no translations have been defined.
+                  </td>
+                </tr>
+
+                <tr>
+                  <td align=center><code>1-15</code></td>
+                  <td>Reserved
+                  </td>
+                </tr>
+            </table>
+
+            This value is set to zero for variable-length sequences.
+
+          </td>
+	</tr>
+
+	<tr>
+	  <td>12-23</td>
+	  <td>Reserved (zero).</td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=format>
+        <caption>
+          Property Description
+        </caption>
+
+        <tr>
+          <th width="25%">Byte</th>
+          <th width="25%">Byte</th>
+          <th width="25%">Byte</th>
+          <th width="25%">Byte</th>
+        </tr>
+
+        <tr>
+          <td colspan=4><br>Base Type<br><br></td>
+        </tr>
+
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>Base Type</td>
+	  <td>
+            <P>Each variable-length type is based on some parent type.  The
+                information for that parent type is described recursively by
+                this field.
+            </P>
+          </td>
+	</tr>
+
+      </table>
+    </div>
+    </P>
+
+    <P>Class specific information for Array (Class 10):
+
+    <P>There are no bit fields defined for the array class.
+    </P>
+
+    <P>Note that the dimension information defined in the property for this
+      datatype class is independent of dataspace information for a dataset.
+      The dimension information here describes the dimensionality of the
+      information within a data element (or a component of an element, if the
+      array datatype is nested within another datatype) and the dataspace for a
+      dataset describes the location of the elements in a dataset.
+    </P>
+
+    <br>
+    <div align=center>
+      <table class=format>
+        <caption>
+          Property Description
+        </caption>
+
+        <tr>
+          <th width="25%">Byte</th>
+          <th width="25%">Byte</th>
+          <th width="25%">Byte</th>
+          <th width="25%">Byte</th>
+        </tr>
+
+	<tr>
+	  <td>Dimensionality</td>
+	  <td colspan=3>Reserved (zero)</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Dimension #1 Size</td>
+	</tr>
+	<tr>
+	  <td colspan=4>.<br>.<br>.<br></td>
+	</tr>
+	<tr>
+	  <td colspan=4>Dimension #n Size</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Permutation Index #1</td>
+	</tr>
+	<tr>
+	  <td colspan=4>.<br>.<br>.<br></td>
+	</tr>
+	<tr>
+	  <td colspan=4>Permutation Index #n</td>
+	</tr>
+
+        <tr>
+          <td colspan=4><br>Base Type<br><br></td>
+        </tr>
+
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>Dimensionality</td>
+	  <td>
+            <P>This value is the number of dimensions that the array has.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Dimension #n Size</td>
+	  <td>
+            <P>This value is the size of the dimension of the array
+	    as stored in the file.  The first dimension stored in
+	    the list of dimensions is the slowest changing dimension
+	    and the last dimension stored is the fastest changing
+	    dimension.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Permutation Index #n</td>
+	  <td>
+            <P>This value is the index permutation used to map
+	    each dimension from the canonical representation to an
+	    alternate axis for each dimension.  Currently, dimension
+            permutations are not supported and these indices should be set
+            to the index position minus one (i.e. the first dimension should
+            be set to 0, the second dimension should be set to 1, etc.)
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Base Type</td>
+	  <td>
+            <P>Each array type is based on some parent type.  The
+                information for that parent type is described recursively by
+                this field.
+            </P>
+          </td>
+	</tr>
+
+      </table>
+    </div>
+
+    </P>
+
+    <hr>
+    <h4><a name="OldFillValueMessage">Name: Data Storage - Fill Value (Old)</a></h4>
+
+    <P class=item><B>Header Message Type:</B> 0x0004
+    </P>
+    <P class=item><B>Length:</B> varies
+    </P>
+    <P class=item><B>Status:</B> Optional, may not be repeated.
+    </P>
+
+    <P class=item><B>Description:</B> The fill value message stores a single
+        data value which is returned to the application when an uninitialized
+        data element is read from a dataset.  The fill value is interpreted
+        with the same datatype as the dataset.  If no fill value message is
+        present then a fill value of all zero bytes is assumed.
+    </P>
+
+    <P class=item2>This fill value message is deprecated in favor of the "new"
+        fill value message (Message Type 0x0005) and is only written to the
+        file for forward compatibility with versions of the HDF5 library before
+        the 1.6.0 version.  Additionally, it only appears for datasets with a
+        user defined fill value (as opposed to the library default fill value
+        or an explicitly set "undefined" fill value).
+    </P>
+
+    <P class=item><B>Format of Data:</B>
+    <br>
+    <div align=center>
+      <table class=format>
+	<caption>
+	  Fill Value Message (Old)
+	</caption>
+
+	<tr>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Size</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4><br>Fill Value<br><br></td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>Size</td>
+	  <td>
+            <P>This is the size of the Fill Value field in bytes.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Fill Value</td>
+	  <td>
+            <P>The fill value.  The bytes of the fill value are interpreted
+                using the same datatype as for the dataset.
+            </P>
+          </td>
+	</tr>
+      </table>
+    </div>
+    </P>
+
+    <hr>
+    <h4><a name="FillValueMessage">Name: Data Storage - Fill Value </a></h4>
+
+    <P class=item><B>Header Message Type:</B> 0x0005
+    </P>
+    <P class=item><B>Length:</B> varies
+    </P>
+    <P class=item><B>Status:</B> Required for dataset objects, may not be repeated.
+    </P>
+
+    <P class=item><B>Description:</B> The fill value message stores a single
+        data value which is returned to the application when an uninitialized
+        data element is read from a dataset.  The fill value is interpreted
+        with the same datatype as the dataset.
+    </P>
+
+    <P class=item><B>Format of Data:</B>
+    <br>
+    <div align=center>
+      <table class=format>
+	<caption>
+	  Fill Value Message
+	</caption>
+
+	<tr>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>
+
+	<tr>
+	  <td>Version</td>
+	  <td>Space Allocation Time</td>
+	  <td>Fill Value Write Time</td>
+	  <td>Fill Value Defined</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4>Size</td>
+	</tr>
+
+	<tr>
+	  <td colspan=4><br>Fill Value<br><br></td>
+	</tr>
+      </table>
+    </div>
+
+    <br>
+    <div align=center>
+      <table class=desc>
+	<tr>
+          <th width="30%">Field Name</th>
+          <th>Description</th>
+	</tr>
+
+	<tr>
+	  <td>Version</td>
+	  <td>
+            <P>The version number information is used for changes in the
+                format of the fill value message and is described here:
+                <table class=list>
+                    <tr>
+                      <th width="30%">Version</th>
+                      <th align=left>Description</th>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>0</code></td>
+                      <td>Never used
+                      </td>
+                    </tr>
+                    <tr>
+                      <td align=center><code>1</code></td>
+                      <td>Used by version 1.6.x of the library to encode
+                            fill values.  In this version, the Size field is
+                            always present.
+                      </td>
+                    </tr>
+                    <tr>
+                      <td align=center><code>2</code></td>
+                      <td>The current version used by the library (version
+                        1.7.3 or later).  In this version, the Size and
+                        Fill Value fields are
+                        only present if the Fill Value Defined field is set
+                        to 1.
+                      </td>
+                    </tr>
+                </table>
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Space Allocation Time</td>
+	  <td>
+            <P>When the storage space for the dataset's raw data will be
+                allocated.  The allowed values are:
+                <table class=list>
+                    <tr>
+                      <th width="30%">Value</th>
+                      <th align=left>Description</th>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>1</code></td>
+                      <td>Early allocation.  Storage space for the entire dataset
+                        should be allocated in the file when the dataset is
+                        created.
+                      </td>
+                    </tr>
+                    <tr>
+                      <td align=center><code>2</code></td>
+                      <td>Late allocation.  Storage space for the entire dataset
+                        should not be allocated until the dataset is written
+                        to.
+                      </td>
+                    </tr>
+                    <tr>
+                      <td align=center><code>3</code></td>
+                      <td>Incremental allocation.  Storage space for the
+                        dataset should not be allocated until the portion
+                        of the dataset is written to.  This is currently
+                        used in conjunction with chunked data storage for
+                        datasets.
+                      </td>
+                    </tr>
+                </table>
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Fill Value Write Time</td>
+	  <td>
+            <P>At the time that storage space for the dataset's raw data is
+                allocated, this value indicates whether the fill value should
+                be written to the raw data storage elements.  The allowed values
+                are:
+                <table class=list>
+                    <tr>
+                      <th width="30%">Value</th>
+                      <th align=left>Description</th>
+                    </tr>
+
+                    <tr>
+                      <td align=center><code>0</code></td>
+                      <td>On allocation.  The fill value is always written to
+                        the raw data storage when the storage space is allocated.
+                      </td>
+                    </tr>
+                    <tr>
+                      <td align=center><code>1</code></td>
+                      <td>Never.  The fill value should never be written to
+                        the raw data storage.
+                      </td>
+                    </tr>
+                    <tr>
+                      <td align=center><code>2</code></td>
+                      <td>Fill value written if set by user.  The fill value
+                        will be written to the raw data storage when the storage
+                        space is allocated only if the user explicitly set
+                        the fill value.  If the fill value is the library
+                        default or is undefined, it will not be written to
+                        the raw data storage.
+                      </td>
+                    </tr>
+                </table>
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Fill Value Defined</td>
+	  <td>
+            <P>This value indicates if a fill value is defined for this
+                dataset.  If this value is 0, the fill value is undefined.
+                If this value is 1, a fill value is defined for this dataset.
+                For version 2 or later of the fill value message, this value
+                controls the presence of the Size field.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Size</td>
+	  <td>
+            <P>This is the size of the Fill Value field in bytes.  This field
+                is not present if the Version field is >1 and the Fill Value
+                Defined field is set to 0.
+            </P>
+          </td>
+	</tr>
+
+	<tr>
+	  <td>Fill Value</td>
+	  <td>
+            <P>The fill value.  The bytes of the fill value are interpreted
+                using the same datatype as for the dataset.  This field is
+                not present if the Version field is >1 and the Fill Value
+                Defined field is set to 0.
+            </P>
+          </td>
+	</tr>
+      </table>
+    </div>
+    </P>
+
+<!--
+    <hr>
+    <h4><a name="CompactDataStorageMessage">Name: Data Storage - Compact</a></h4>
+
+    <b>Header Message Type:</b> 0x0006<br>
+    <b>Length:</b> varies<br>
+    <b>Status:</b> Optional, may not be repeated.<br>
+
+    <p>This message indicates that the data for the data object is
+      stored within the current HDF file by including the actual 
+      data as the header data for this message.  The data is
+      stored internally in 
+      the <em>normal format</em>, i.e. in one chunk, uncompressed, etc.
+
+    <P>Note that one and only one of the <em>Data Storage</em> headers can be
+      stored for each data object.
+
+    <P><b>Format of Data:</b>  The message data is actually composed
+      of dataset data, so the format will be determined by the dataset
+      format.
+-->
+
+    <hr>
+    <h4><a name="ReservedMessage_0006">Name: Reserved - Not Assigned Yet</a></h4>
+    <b>Header Message Type:</b> 0x0006<BR>
+    <b>Length:</b> N/A<BR>
+    <b>Status:</b> N/A<BR>
+    <b>Format of Data:</b> N/A<BR>
+
+    <p><b>Purpose and Description:</b> This message type was skipped during
+      the initial specification of the file format and may be used in a
+      future expansion to the format.
+
+    <hr>
+    <h4><a name="ExternalFileListMessage">Name: Data Storage -
+	External Data Files</a></h4>
+    <b>Header Message Type:</b> 0x0007<BR>
+    <b>Length:</b> varies<BR>
+    <b>Status:</b> Optional, may not be repeated.<BR>
+
+    <p><b>Purpose and Description:</b> The external object message
+      indicates that the data for an object is stored outside the HDF5
+      file.  The filename of the object is stored as a Universal
+      Resource Location (URL) of the actual filename containing the
+      data. An external file list record also contains the byte offset
+      of the start of the data within the file and the amount of space
+      reserved in the file for that data.
+
+    <p>
+    <center>
+      <table border cellpadding=4 width="80%">
+	<caption align=top>
+	  <b>External File List Message</b>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>
+
+	<tr align=center>
+	  <td>Version</td>
+	  <td colspan=3>Reserved</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=2>Allocated Slots</td>
+	  <td colspan=2>Used Slots</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Heap Address<br><br></td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Slot Definitions...<br><br></td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table align=center width="80%">
+	<tr align=left>
+          <th width="30%"><U><font size=+1>Field Name</font></U></th>
+          <th><U><font size=+1>Description</font></U></th>
+	</tr>
+
+	<tr valign=top>
+	  <td>Version </td>
+	  <td>This value is used to determine the format of the
+	    External File List Message.  When the format of the
+	    information in the message is changed, the version number
+	    is incremented and can be used to determine how the
+	    information in the object header is formatted.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Reserved</td>
+	  <td>This field is reserved for future use.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Allocated Slots</td>
+	  <td>The total number of slots allocated in the message.  Its
+	    value must be at least as large as the value contained in
+	    the Used Slots field.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Used Slots</td>
+	  <td>The number of initial slots which contain valid
+	    information.  The remaining slots are zero filled.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Heap Address</td>
+	  <td>This is the address of a local name heap which contains
+	    the names for the external files. The name at offset zero
+	    in the heap is always the empty string.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Slot Definitions</td>
+	  <td>The slot definitions are stored in order according to
+	    the array addresses they represent. If more slots have
+	    been allocated than what has been used then the defined
+	    slots are all at the beginning of the list.</td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table border cellpadding=4 width="80%">
+	<caption align=top>
+	  <b>External File List Slot</b>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Name Offset (&lt;size&gt; bytes)<br><br></td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>File Offset (&lt;size&gt; bytes)<br><br></td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Size<br><br></td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table align=center width="80%">
+	<tr align=left>
+          <th width="30%"><U><font size=+1>Field Name</font></U></th>
+          <th><U><font size=+1>Description</font></U></th>
+	</tr>
+
+	<tr valign=top>
+	  <td>Name Offset (&lt;size&gt; bytes)</td>
+	  <td>The byte offset within the local name heap for the name
+	    of the file.  File names are stored as a URL which has a
+	    protocol name, a host name, a port number, and a file
+	    name:
+	    <code><em>protocol</em>:<em>port</em>//<em>host</em>/<em>file</em></code>.
+	    If the protocol is omitted then "file:" is assumed.  If
+	    the port number is omitted then a default port for that
+	    protocol is used.  If both the protocol and the port
+	    number are omitted then the colon can also be omitted. If
+	    the double slash and host name are omitted then
+	    "localhost" is assumed.  The file name is the only
+	    mandatory part, and if the leading slash is missing then
+	    it is relative to the application's current working
+	    directory (the use of relative names is not
+	    recommended).</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>File Offset (&lt;size&gt; bytes)</td>
+	  <td>This is the byte offset to the start of the data in the
+	    specified file. For files that contain data for a single
+	    dataset this will usually be zero.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Size</td>
+	  <td>This is the total number of bytes reserved in the
+	    specified file for raw data storage.  For a file that
+	    contains exactly one complete dataset which is not
+	    extendable, the size will usually be the exact size of the
+	    dataset.  However, by making the size larger one allows
+	    HDF5 to extend the dataset. The size can be set to a value
+	    larger than the entire file since HDF5 will read zeros
+	    past the end of the file without failing.</td>
+	</tr>
+      </table>
+    </center>
+
+
+    <hr>
+    <h4><a name="LayoutMessage">Name: Data Storage - Layout</a></h4>
+
+    <b>Header Message Type:</b> 0x0008<BR>
+    <b>Length:</b> varies<BR>
+    <b>Status:</b> Required for datasets, may not be repeated.
+
+    <p><b>Purpose and Description:</b> Data layout describes how the
+      elements of a multi-dimensional array are arranged in the linear
+      address space of the file. Three types of data layout are
+      supported:
+
+    <ol>
+      <li>The array can be stored in one contiguous area of the file.
+	The layout requires that the size of the array be constant and
+	does not permit chunking, compression, checksums, encryption,
+	etc.  The message stores the total size of the array and the
+	offset of an element from the beginning of the storage area is
+	computed as in C.
+
+      <li>The array domain can be regularly decomposed into chunks and
+	each chunk is allocated separately.  This layout supports
+	arbitrary element traversals, compression, encryption, and
+	checksums, and the chunks can be distributed across external
+	raw data files (these features are described in other
+	messages).  The message stores the size of a chunk instead of
+	the size of the entire array; the size of the entire array can
+	be calculated by traversing the B-tree that stores the chunk
+	addresses.
+
+      <li>The array can be stored in one contiguous block, as part of
+        this object header message (this is called "compact" storage below).
+    </ol>
+    
+    <P>Version 3 of this message re-structured the format into specific
+        properties that are required for each layout class.
+
+    <p>
+    <center>
+      <table border cellpadding=4 width="80%">
+	<caption align=top>
+	  <B>Data Layout Message, Versions 1 and 2</B>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>
+
+	<tr align=center>
+	  <td>Version</td>
+	  <td>Dimensionality</td>
+	  <td>Layout Class</td>
+	  <td>Reserved</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4>Reserved</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Address<br><br></td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4>Dimension 0 (4-bytes)</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4>Dimension 1 (4-bytes)</td>
+	</tr>
+	
+	<tr align=center>
+	  <td colspan=4>...</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4>Compact Data Size (4-bytes)</td>
+	</tr>
+	
+	<tr align=center>
+	  <td colspan=4>Compact Data</td>
+	</tr>
+	
+	<tr align=center>
+	  <td colspan=4>...</td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table align=center width="80%">
+	<tr align=left>
+          <th width="30%"><U><font size=+1>Field Name</font></U></th>
+          <th><U><font size=+1>Description</font></U></th>
+	</tr>
+
+	<tr valign=top>
+	  <td>Version</td>
+	  <td>A version number for the layout message. This value can be
+            either 1 or 2.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Dimensionality</td>
+	  <td>An array has a fixed dimensionality.  This field
+	    specifies the number of dimension size fields later in the
+	    message.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Layout Class</td>
+	  <td>The layout class specifies how the other fields of the
+	    layout message are to be interpreted.  A value of one
+	    indicates contiguous storage, a value of two
+	    indicates chunked storage,
+	    while a value of zero
+	    indicates compact storage.  Other values will be defined
+	    in the future.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Address</td>
+	  <td>For contiguous storage, this is the address of the first
+	    byte of storage.  For chunked storage this is the address
+	    of the B-tree that is used to look up the addresses of the
+	    chunks.  This field is not present for compact storage.
+            If the version for this message is set to 2, the address
+            may have the "undefined address" value, to indicate that
+            storage has not yet been allocated for this array.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Dimensions</td>
+	  <td>For contiguous storage the dimensions define the entire
+	    size of the array while for chunked storage they define
+	    the size of a single chunk.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Compact Data Size</td>
+	  <td>This field is only present for compact data storage.
+            It contains the size of the raw data for the dataset array.</td>
+
+	<tr valign=top>
+	  <td>Compact Data</td>
+	  <td>This field is only present for compact data storage.
+            It contains the raw data for the dataset array.</td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table border cellpadding=4 width="80%">
+	<caption align=top>
+	  <B>Data Layout Message, Version 3</B>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>
+
+	<tr align=center>
+	  <td>Version</td>
+	  <td>Layout Class</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4>Properties</td>
+	</tr>
+
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table align=center width="80%">
+	<tr align=left>
+          <th width="30%"><U><font size=+1>Field Name</font></U></th>
+          <th><U><font size=+1>Description</font></U></th>
+	</tr>
+
+	<tr valign=top>
+	  <td>Version</td>
+	  <td>A version number for the layout message. This value can be
+            either 1, 2 or 3.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Layout Class</td>
+	  <td>The layout class specifies how the other fields of the
+	    layout message are to be interpreted.  A value of one
+	    indicates contiguous storage, a value of two
+	    indicates chunked storage,
+	    while a value of three
+	    indicates compact storage.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Properties</td>
+	  <td>This variable-sized field encodes information specific to each
+            layout class and is described below.  If there is no property
+            information specified for a layout class, the size of this field
+            is zero bytes.</td>
+	</tr>
+
+      </table>
+    </center>
+
+    <P>Class-specific information for contiguous layout (Class 0):
+
+    <p>
+    <center>
+      <table border cellpadding=4 width="80%">
+	<caption align=top>
+	  <B>Property Descriptions</B>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Address<br><br></td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Size<br><br></td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table align=center width="80%">
+	<tr align=left>
+          <th width="30%"><U><font size=+1>Field Name</font></U></th>
+          <th><U><font size=+1>Description</font></U></th>
+	</tr>
+
+	<tr valign=top>
+	  <td>Address</td>
+	  <td>This is the address of the first byte of raw data storage.
+            The address may have the "undefined address" value, to indicate
+            that storage has not yet been allocated for this array.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Size</td>
+	  <td>This field contains the size allocated to store the raw data.</td>
+      </table>
+    </center>
+
+    <P>Class-specific information for chunked layout (Class 1):
+
+    <p>
+    <center>
+      <table border cellpadding=4 width="80%">
+	<caption align=top>
+	  <B>Property Descriptions</B>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>
+
+	<tr align=center>
+	  <td>Dimensionality</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Address<br><br></td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4>Dimension 0 (4-bytes)</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4>Dimension 1 (4-bytes)</td>
+	</tr>
+	
+	<tr align=center>
+	  <td colspan=4>...</td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table align=center width="80%">
+	<tr align=left>
+          <th width="30%"><U><font size=+1>Field Name</font></U></th>
+          <th><U><font size=+1>Description</font></U></th>
+	</tr>
+
+	<tr valign=top>
+	  <td>Dimensionality</td>
+	  <td>A chunk has a fixed dimensionality.  This field
+	    specifies the number of dimension size fields later in the
+	    message.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Address</td>
+	  <td>This is the address
+	    of the B-tree that is used to look up the addresses of the
+	    chunks.
+            The address
+            may have the "undefined address" value, to indicate that
+            storage has not yet been allocated for this array.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Dimensions</td>
+	  <td>The dimension sizes define the size of a single chunk.</td>
+	</tr>
+      </table>
+    </center>
+
+    <P>Class-specific information for compact layout (Class 2):
+
+    <p>
+    <center>
+      <table border cellpadding=4 width="80%">
+	<caption align=top>
+	  <B>Property Descriptions</B>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=2>Size</td>
+	</tr>
+	
+	<tr align=center>
+	  <td colspan=4>Raw Data</td>
+	</tr>
+	
+	<tr align=center>
+	  <td colspan=4>...</td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table align=center width="80%">
+	<tr align=left>
+          <th width="30%"><U><font size=+1>Field Name</font></U></th>
+          <th><U><font size=+1>Description</font></U></th>
+	</tr>
+
+	<tr valign=top>
+	  <td>Size</td>
+	  <td>This field contains the size of the raw data for the dataset array.</td>
+
+	<tr valign=top>
+	  <td>Raw Data</td>
+	  <td>This field contains the raw data for the dataset array.</td>
+	</tr>
+      </table>
+    </center>
+
+
+    <hr>
+    <h4><a name="ReservedMessage_0009">Name: Reserved - Not Assigned Yet</a></h4>
+    <b>Header Message Type:</b> 0x0009<BR>
+    <b>Length:</b> N/A<BR>
+    <b>Status:</b> N/A<BR>
+    <b>Format of Data:</b> N/A<BR>
+
+    <p><b>Purpose and Description:</b> This message type was skipped during
+      the initial specification of the file format and may be used in a
+      future expansion to the format.
+
+    <hr>
+    <h4><a name="ReservedMessage_000A">Name: Reserved - Not Assigned Yet</a></h4>
+    <b>Header Message Type:</b> 0x000A<BR>
+    <b>Length:</b> N/A<BR>
+    <b>Status:</b> N/A<BR>
+    <b>Format of Data:</b> N/A<BR>
+
+    <p><b>Purpose and Description:</b> This message type was skipped during
+      the initial specification of the file format and may be used in a
+      future expansion to the format.
+
+    <hr>
+    <h4><a name="FilterMessage">Name: Data Storage - Filter Pipeline</a></h4>
+    <b>Header Message Type:</b> 0x000B<BR>
+    <b>Length:</b> varies<BR>
+    <b>Status:</b> Optional, may not be repeated.
+
+    <p><b>Purpose and Description:</b> This message describes the
+      filter pipeline which should be applied to the data stream by
+      providing filter identification numbers, flags, a name, an
+      client data.
+
+    <p>
+    <center>
+      <table border align=center cellpadding=4 width="80%">
+	<caption align=top>
+	  <b>Filter Pipeline Message</b>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>  
+
+	<tr align=center>
+	  <td>Version</td>
+	  <td>Number of Filters</td>
+	  <td colspan=2>Reserved</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4>Reserved</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Filter List<br><br></td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table align=center width="80%">
+	<tr align=left>
+          <th width="30%"><U><font size=+1>Field Name</font></U></th>
+          <th><U><font size=+1>Description</font></U></th>
+	</tr>
+
+	<tr valign=top>
+	  <td>Version</td>
+	  <td>The version number for this message.  This document
+	    describes version one.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Number of Filters</td>
+	  <td>The total number of filters described by this
+	    message. The maximum possible number of filters in a
+	    message is 32.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Filter List</td>
+	  <td>A description of each filter.  A filter description
+	    appears in the next table.</td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table border align=center cellpadding=4 width="80%">
+	<caption align=top>
+	  <b>Filter Pipeline Message</b>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>  
+
+	<tr align=center>
+	  <td colspan=2>Filter Identification</td>
+	  <td colspan=2>Name Length</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=2>Flags</td>
+	  <td colspan=2>Client Data Number of Values</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Name<br><br></td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Client Data<br><br></td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4>Padding</td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table align=center width="80%">
+	<tr align=left>
+          <th width="30%"><U><font size=+1>Field Name</font></U></th>
+          <th><U><font size=+1>Description</font></U></th>
+	</tr>
+
+	<tr valign=top>
+	  <td>Filter Identification</td>
+	  <td>This is a unique (except in the case of testing)
+	    identifier for the filter.  Values from zero through 255
+	    are reserved for filters defined by the NCSA HDF5
+	    library. Values 256 through 511 have been set aside for
+	    use when developing/testing new filters.  The remaining
+	    values are allocated to specific filters by contacting the 
+	    <a href="mailto:hdf5dev at ncsa.uiuc.edu">HDF5 Development
+	    Team</a>.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Name Length</td>
+	  <td>Each filter has an optional null-terminated ASCII name
+	    and this field holds the length of the name including the
+	    null termination padded with nulls to be a multiple of
+	    eight. If the filter has no name then a value of zero is
+	    stored in this field.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Flags</td>
+	  <td>The flags indicate certain properties for a filter.  The 
+	    bit values defined so far are:
+
+	    <dl>
+	      <dt><code>bit 1</code>
+	      <dd>If set then the filter is an optional filter.
+		During output, if an optional filter fails it will be
+		silently removed from the pipeline.
+	    </dl>
+	</tr>
+
+	<tr valign=top>
+	  <td>Client Data Number of Values</td>
+	  <td>Each filter can store a few integer values to control
+	    how the filter operates.  The number of entries in the
+	    Client Data array is stored in this field.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Name</td>
+	  <td>If the Name Length field is non-zero then it will
+	    contain the size of this field, a multiple of eight.  This 
+	    field contains a null-terminated, ASCII character
+	    string to serve as a comment/name for the filter.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Client Data</td>
+	  <td>This is an array of four-byte integers which will be
+	    passed to the filter function.  The Client Data Number of
+	    Values determines the number of elements in the
+	    array.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Padding</td>
+	  <td>Four bytes of zeros are added to the message at this
+	    point if the Client Data Number of Values field contains
+	    an odd number.</td>
+	</tr>
+      </table>
+    </center>
+
+    <hr>
+    <h4><a name="AttributeMessage">Name: Attribute</a></h4>
+    <b>Header Message Type:</b> 0x000C<BR>
+    <b>Length:</b> varies<BR>
+    <b>Status:</b> Optional, may be repeated.<BR>
+    
+    <p><b>Purpose and Description:</b>  The <em>Attribute</em>
+      message is used to list objects in the HDF file which are used
+      as attributes, or "metadata" about the current object.  An
+      attribute is a small dataset; it has a name, a datatype, a data
+      space, and raw data.  Since attributes are stored in the object
+      header they must be relatively small (<64KB) and can be
+      associated with any type of object which has an object header
+      (groups, datasets, named types and spaces, etc.).
+
+    <p>Note: Attributes on an object must have unique names.  (The HDF5 library
+      currently enforces this by causing the creation of an attribute with
+      a duplicate name to fail)
+      Attributes on different objects may have the same name, however.
+
+    <p>
+    <center>
+      <table border align=center cellpadding=4 width="80%">
+	<caption align=top>
+	  <b>Attribute Message</b>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>
+
+	<tr align=center>
+	  <td>Version</td>
+	  <td>Reserved</td>
+	  <td colspan=2>Name Size</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=2>Type Size</td>
+	  <td colspan=2>Space Size</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Name<br><br></td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Type<br><br></td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Space<br><br></td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Data<br><br></td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table align=center width="80%">
+	<tr align=left>
+          <th width="30%"><U><font size=+1>Field Name</font></U></th>
+          <th><U><font size=+1>Description</font></U></th>
+	</tr>
+
+	<tr valign=top>
+	  <td>Version</td>
+	  <td>Version number for the message.  This document describes 
+	    version 1 of attribute messages.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Reserved</td>
+	  <td>This field is reserved for later use and is set to
+	    zero.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Name Size</td>
+	  <td>The length of the attribute name in bytes including the
+	    null terminator.  Note that the Name field below may
+	    contain additional padding not represented by this
+	    field.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Type Size</td>
+	  <td>The length of the datatype description in the Type
+	    field below.  Note that the Type field may contain
+	    additional padding not represented by this field.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Space Size</td>
+	  <td>The length of the dataspace description in the Space
+	    field below.  Note that the Space field may contain
+	    additional padding not represented by this field.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Name</td>
+	  <td>The null-terminated attribute name.  This field is
+	    padded with additional null characters to make it a
+	    multiple of eight bytes.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Type</td>
+	  <td>The datatype description follows the same format as
+	    described for the datatype object header message.  This
+	    field is padded with additional zero bytes to make it a
+	    multiple of eight bytes.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Space</td>
+	  <td>The dataspace description follows the same format as
+	    described for the dataspace object header message.  This
+	    field is padded with additional zero bytes to make it a
+	    multiple of eight bytes.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Data</td>
+	  <td>The raw data for the attribute.  The size is determined
+	    from the datatype and dataspace descriptions.  This
+	    field is <em>not</em> padded with additional zero
+	    bytes.</td>
+	</tr>
+      </table>
+    </center>
+    
+    <hr>
+    <h4><a name="CommentMessage">Name: Object Comment</a></h4>
+
+    <p><b>Header Message Type:</b> 0x000D<br>
+      <b>Length:</b> varies<br>
+      <b>Status:</b> Optional, may not be repeated.
+
+    <p><b>Purpose and Description:</b> The object comment is
+      designed to be a short description of an object.  An object comment
+      is a sequence of non-zero (<code>\0</code>) ASCII characters with no other
+      formatting included by the library.
+
+    <p>
+    <center>
+      <table border align=center cellpadding=4 width="80%">
+	<caption align=top>
+	  <b>Name Message</b>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Comment<br><br></td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table align=center width="80%">
+	<tr align=left>
+          <th width="30%"><U><font size=+1>Field Name</font></U></th>
+          <th><U><font size=+1>Description</font></U></th>
+	</tr>
+
+	<tr valign=top>
+	  <td>Name</td>
+	  <td>A null terminated ASCII character string.</td>
+	</tr>
+      </table>
+    </center>
+    
+    <hr>
+    <h4><a name="OldModifiedMessage">Name: Object Modification Date &amp; Time (Old)</a></h4>
+
+    <p><b>Header Message Type:</b> 0x000E<br>
+      <b>Length:</b> fixed<br>
+      <b>Status:</b> Optional, may not be repeated.
+
+    <p><b>Purpose and Description:</b>  The object modification date
+      and time is a timestamp which indicates (using ISO-8601 date and
+      time format) the last modification of an object.  The time is
+      updated when any object header message changes according to the
+      system clock where the change was posted.
+
+    <p>This modification time message is deprecated in favor of the "new"
+        modification time message (Message Type 0x0012) and is no longer written
+        to the file in versions of the HDF5 library after the 1.6.0 version.
+    </p>
+
+
+    <p>
+    <center>
+      <table border align=center cellpadding=4 width="80%">
+	<caption align=top>
+	  <b>Modification Time Message</b>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4>Year</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=2>Month</td>
+	  <td colspan=2>Day of Month</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=2>Hour</td>
+	  <td colspan=2>Minute</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=2>Second</td>
+	  <td colspan=2>Reserved</td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table align=center width="80%">
+	<tr align=left>
+          <th width="30%"><U><font size=+1>Field Name</font></U></th>
+          <th><U><font size=+1>Description</font></U></th>
+	</tr>
+
+	<tr valign=top>
+	  <td>Year</td>
+	  <td>The four-digit year as an ASCII string. For example,
+	    <code>1998</code>.  All fields of this message should be interpreted
+	    as coordinated universal time (UTC)</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Month</td>
+	  <td>The month number as a two digit ASCII string where
+	    January is <code>01</code> and December is <code>12</code>.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Day of Month</td>
+	  <td>The day number within the month as a two digit ASCII
+	    string. The first day of the month is <code>01</code>.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Hour</td>
+	  <td>The hour of the day as a two digit ASCII string where
+	    midnight is <code>00</code> and 11:00pm is <code>23</code>.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Minute</td>
+	  <td>The minute of the hour as a two digit ASCII string where
+	    the first minute of the hour is <code>00</code> and 
+	    the last is <code>59</code>.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Second</td>
+	  <td>The second of the minute as a two digit ASCII string
+	    where the first second of the minute is <code>00</code> 
+	    and the last is <code>59</code>.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Reserved</td>
+	  <td>This field is reserved and should always be zero.</td>
+	</tr>
+      </table>
+    </center>
+    
+    <hr>
+    <h4><a name="SharedMessage">Name: Shared Object Message</a></h4>
+    <b>Header Message Type:</b> 0x000F<br>
+    <b>Length:</b> 4 Bytes<br>
+    <b>Status:</b> Optional, may be repeated.
+
+    <p>A constant message can be shared among several object headers
+      by writing that message in the global heap and having the object
+      headers all point to it.  The pointing is accomplished with a
+      Shared Object message which is understood directly by the object
+      header layer of the library. It is also possible to have a
+      message of one object header point to a message in some other
+      object header, but care must be exercised to prevent cycles.
+
+    <p>If a message is shared, then the message appears in the global
+      heap and its message ID appears in the Header Message Type
+      field of the object header.  Also, the Flags field in the object
+      header for that message will have bit two set (the
+      <code>H5O_FLAG_SHARED</code> bit).  The message body in the
+      object header will be that of a Shared Object message defined
+      here and not that of the pointed-to message.
+
+    <p>
+    <center>
+      <table border cellpadding=4 width="80%">
+	<caption align=top>
+	  <b>Shared Message Message</b>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</td>
+	  <th width="25%">byte</td>
+	  <th width="25%">byte</td>
+	  <th width="25%">byte</td>
+	</tr>
+
+	<tr align=center>
+	  <td>Version</td>
+	  <td>Flags</td>
+	  <td colspan=2>Reserved</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4>Reserved</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4><br>Pointer<br><br></td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table align=center width="80%">
+	<tr align=left>
+          <th width="30%"><U><font size=+1>Field Name</font></U></th>
+          <th><U><font size=+1>Description</font></U></th>
+	</tr>
+
+	<tr valign=top>
+	  <td>Version</td>
+	  <td>The version number for the message.  This document
+	    describes version one of shared messages.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Flags</td>
+	  <td>The Shared Message message points to a message which is
+	    shared among multiple object headers.  The Flags field
+	    describes the type of sharing:
+
+	    <dl>
+	      <dt><code>Bit 0</code>
+	      <dd>If this bit is clear then the actual message is the
+		first message in some other object header; otherwise
+		the actual message is stored in the global heap.
+
+	      <dt><code>Bits 2-7</code>
+	      <dd>Reserved (always zero)
+	    </dl>
+	</tr>
+
+	<tr valign=top>
+	  <td>Pointer</td>
+	  <td>This field points to the actual message.  The format of
+	    the pointer depends on the value of the Flags field.  If
+	    the actual message is in the global heap then the pointer
+	    is the file address of the global heap collection that
+	    holds the message, and a four-byte index into that
+	    collection.  Otherwise the pointer is a group entry 
+	    that points to some other object header.</td>
+	</tr>
+      </table>
+    </center>
+
+
+<hr>
+<h4><a name="ContinuationMessage">Name: Object Header Continuation</a></h4>
+<b>Header Message Type:</b> 0x0010<BR>
+<b>Length:</b> fixed<BR>
+<b>Status:</b> Optional, may be repeated.<BR>
+<b>Purpose and Description:</b>  The object header continuation is the location
+in the file of more header messages for the current data object.  This can be
+used when header blocks are large, or likely to change over time.<BR>
+<b>Format of Data:</b><p>
+    The object header continuation is formatted as follows (assuming a 4-byte
+length &amp; offset are being used in the current file):
+
+<P>
+<center>
+<table border cellpadding=4 width=60%>
+<caption align=bottom>
+<B>HDF5 Object Header Continuation Message Layout</B>
+</caption>
+
+<tr align=center>
+<th width=25%>byte</th>
+<th width=25%>byte</th>
+<th width=25%>byte</th>
+<th width=25%>byte</th>
+
+<tr align=center>
+<td colspan=4>Header Continuation Offset</td>
+<tr align=center>
+<td colspan=4>Header Continuation Length</td>
+</table>
+</center>
+
+<P>
+<dl>
+<dt>The elements of the Header Continuation Message are described below:
+<dd>
+<dl>
+<dt>Header Continuation Offset: (&lt;offset&gt; bytes)
+<dd>This value is the offset in bytes from the beginning of the file where the
+header continuation information is located.
+<dt>Header Continuation Length: (&lt;length&gt; bytes)
+<dd>This value is the length in bytes of the header continuation information in
+the file.
+</dl>
+</dl>
+
+<hr>
+<h4><a name="SymbolTableMessage">Name: Group Message</a></h4>
+<b>Header Message Type:</b> 0x0011<BR>
+<b>Length:</b> fixed<BR>
+<b>Status:</b> Required for groups, may not be repeated.<BR>
+<b>Purpose and Description:</b> Each group has a B-tree and a
+name heap which are pointed to by this message.<BR>
+<b>Format of data:</b>
+<p>The group message is formatted as follows:
+
+<p>
+<center>
+<table border cellpadding=4 width="80%">
+<caption align=bottom>
+<b>HDF5 Object Header Group Message Layout</b>
+</caption>
+
+<tr align=center>
+<th width="25%">byte</th>
+<th width="25%">byte</th>
+<th width="25%">byte</th>
+<th width="25%">byte</th>
+
+<tr align=center>
+<td colspan=4>B-tree Address</td>
+
+<tr align=center>
+<td colspan=4>Heap Address</td>
+</table>
+</center>
+
+<P>
+<dl>
+<dt>The elements of the Group Message are described below:
+<dd>
+<dl>
+<dt>B-tree Address (&lt;offset&gt; bytes)
+<dd>This value is the offset in bytes from the beginning of the file
+where the B-tree is located.
+<dt>Heap Address (&lt;offset&gt; bytes)
+<dd>This value is the offset in bytes from the beginning of the file
+where the group name heap is located.
+</dl>
+</dl>
+
+    <hr>
+    <h4><a name="ModifiedMessage">Name: Object Modification Date &amp; Time</a></h4>
+
+    <P class=item><B>Header Message Type:</B> 0x0012
+    </P>
+    <P class=item><B>Length:</B> Fixed
+    </P>
+    <P class=item><B>Status:</B> Optional, may not be repeated.
+    </P>
+
+    <P class=item><B>Description:</B> The object modification date
+      and time is a timestamp which indicates
+      the last modification of an object.  The time is
+      updated when any object header message changes according to the
+      system clock where the change was posted.
+    </P>
+
+    <p>
+    <center>
+      <table border align=center cellpadding=4 width="80%">
+	<caption align=top>
+	  <b>Modification Time Message</b>
+	</caption>
+
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=1>Version</td>
+	  <td colspan=3>Reserved</td>
+	</tr>
+
+	<tr align=center>
+	  <td colspan=4>Seconds After Epoch</td>
+	</tr>
+      </table>
+    </center>
+
+    <p>
+    <center>
+      <table align=center width="80%">
+	<tr align=left>
+          <th width="30%"><U><font size=+1>Field Name</font></U></th>
+          <th><U><font size=+1>Description</font></U></th>
+	</tr>
+
+	<tr valign=top>
+	  <td>Version</td>
+	  <td>The version number for the message.  This document
+	    describes version one of the new modification time message.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Reserved</td>
+	  <td>This field is reserved and should always be zero.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Seconds After Epoch</td>
+	  <td>The number of seconds since 0 hours, 0
+               minutes, 0 seconds, January 1, 1970, Coordinated Universal Time.
+	</tr>
+      </table>
+    </center>
+    
+<h3><a name="SharedObjectHeader">Disk Format: Level 2b - Shared Data Object Headers</a></h3>
+<P>In order to share header messages between several dataset objects, object
+header messages may be placed into the global heap.  Since these
+messages require additional information beyond the basic object header message
+information, the format of the shared message is detailed below.
+
+<BR> <BR>
+<center>
+<table border cellpadding=4 width=60%>
+<caption align=bottom>
+<B>HDF5 Shared Object Header Message</B>
+</caption>
+
+<tr align=center>
+<th width=25%>byte</th>
+<th width=25%>byte</th>
+<th width=25%>byte</th>
+<th width=25%>byte</th>
+
+<tr align=center>
+<td colspan=4>Reference Count of Shared Header Message</td>
+<tr align=center>
+<td colspan=4><br> Shared Object Header Message<br> <br></td>
+</table>
+</center>
+
+<p>
+<dl>
+<dt> The elements of the shared object header message are described below:
+<dd>
+<dl>
+<dt>Reference Count of Shared Header Message: (32-bit unsigned integer)
+<dd>This value is used to keep a count of the number of dataset objects which
+refer to this message from their dataset headers.  When this count reaches zero,
+the shared message header may be removed from the global heap.
+<dt>Shared Object Header Message: (various lengths)
+<dd>The data stored for the shared object header message is formatted in the
+same way as the private object header messages described in the object header
+description earlier in this document and begins with the header message Type.
+</dl>
+</dl>
+
+
+<h3><a name="DataStorage">Disk Format: Level 2c - Data Object Data Storage</a></h3>
+<P>The data for an object is stored separately from the header
+information in the file and may not actually be located in the HDF5 file
+itself if the header indicates that the data is stored externally.  The
+information for each record in the object is stored according to the
+dimensionality of the object (indicated in the dimensionality header message).
+Multi-dimensional data is stored in C order [same as current scheme], i.e. the
+"last" dimension changes fastest.
+<P>Data whose elements are composed of simple number-types are stored in
+native-endian IEEE format, unless they are specifically defined as being stored
+in a different machine format with the architecture-type information from the
+number-type header message.  This means that each architecture will need to
+[potentially] byte-swap data values into the internal representation for that
+particular machine.
+<P> Data with a variable-length datatype is stored in the global heap
+of the HDF5 file.  Global heap identifiers are stored in the 
+data object storage.
+<P>Data whose elements are composed of pointer number-types are stored in several
+different ways depending on the particular pointer type involved. Simple
+pointers are just stored as the dataset offset of the object being pointed to with the
+size of the pointer being the same number of bytes as offsets in the file.
+Dataset region references are stored as a heap-ID which points to the following
+information within the file-heap: an offset of the object pointed to, number-type
+information (same format as header message), dimensionality information (same
+format as header message), sub-set start and end information (i.e. a coordinate
+location for each), and field start and end names (i.e.  a [pointer to the]
+string indicating the first field included and a [pointer to the] string name
+for the last field).  
+
+<P>Data of a compound datatype is stored as a contiguous stream of the items
+in the structure, with each item formatted according to its datatype.</p>
+
+<h3><a name="Appendix">Appendix</a></h3>
+<P>Definitions of various terms used in this document.
+</P>
+<P>The <A name="UndefinedAddress">"undefined address"</A> for a file is a
+file address with all bits set, i.e. <code>0xffff...ff</code>.
+<P>The <A name="UnlimitedDim">"unlimited size"</A> for a size is a
+value with all bits set, i.e. <code>0xffff...ff</code>.
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_ADevG.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+    <a href="ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!--
+<address><a href="mailto:koziol at ncsa.uiuc.edu">Quincey Koziol</a></address>
+<address><a href="mailto:matzke at llnl.gov">Robb Matzke</a></address>
+-->
+
+
+<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><!-- hhmts start -->
+Last modified: 12 July 2004 
+<!-- hhmts end -->
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/H5.intro.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/H5.intro.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/H5.intro.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3166 @@
+<HTML>
+<HEAD>
+<TITLE>Introduction to HDF5</TITLE>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_Intro.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/IntroElect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</HEAD>
+
+<BODY  bgcolor="#FFFFFF">
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_Intro.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+<a href="index.html">Other HDF5 documents and links</a>&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><a name="Intro-Intro">
+<h1 ALIGN="CENTER">Introduction to HDF5</h1></a>
+
+</FONT><FONT FACE="Times"><P>This is an introduction to the HDF5 data model and programming model.  Being a <I>Getting Started</I> or <I>QuickStart</I> document, this </FONT><I>Introduction to HDF5</I> <FONT FACE="Times">is intended to provide enough information for you to develop a basic understanding of how HDF5 works and is meant to be used. Knowledge of the current version of HDF will make it easier to follow the text, but it is not required.  More complete information of the sort you will need to actually use HDF5 is available in <A HREF="index.html">the HDF5 documentation</FONT></a><FONT FACE="Times">.  Available documents include the following:
+
+<UL>
+</FONT><LI><A HREF="H5.user.html"><I>HDF5 User&#146s Guide</I></A>.  Where appropriate, this <I>Introduction</I> will refer to specific sections of the <I>User&#146s Guide</I>.
+<LI><I><A HREF="RM_H5Front.html">HDF5 Reference Manual</I></A>.</UL>
+
+<FONT FACE="Times"><P>Code examples are available in the source code tree when you install HDF5.  
+
+<UL>
+</FONT><LI>The directories <code>hdf5/examples</code>,
+<code>hdf5/doc/html/examples/</code>, and 
+<code>hdf5/doc/html/Tutor/examples/</code> contain the examples 
+used in this document.
+<LI>The directory<FONT FACE="Courier" SIZE=2> hdf5/test</FONT> contains the development tests used by the HDF5 developers.  Since these codes are intended to fully exercise the system, they provide more diverse and sophisticated examples of what HDF5 can do.</UL>
+
+<a name="Intro-TOC">
+<hr>
+<center>
+<table border=0 width=90%>
+<tr><th colspan=3>Table of Contents</th></tr></a>
+<tr><td valign=top align=left width=42%>
+
+    <a href="#Intro-Intro">Introduction to HDF5</a><p>
+    <a href="#Intro-WhatIs">1. What Is HDF5?</a><br>
+        <font size=-1>
+        &nbsp;&nbsp&nbsp;&nbsp;<a href="#Intro-Why">Why HDF5?</a><br>
+        <!--
+        &nbsp;&nbsp&nbsp;&nbsp;<a href="#Intro-Limits">Limitations of the 
+              Current Release</a><br>
+        -->
+        &nbsp;&nbsp&nbsp;&nbsp;<a href="#Intro-Changes">Changes in the 
+              Current Release</a><p>
+        </font>
+    <a href="#Intro-FileOrg">2. HDF5 File Organization and</a></br>
+        <font size=-1>&nbsp;&nbsp&nbsp;&nbsp;</font><a href="#Intro-FileOrg">Data Model</a><br>
+        <font size=-1>
+        &nbsp;&nbsp&nbsp;&nbsp;<a href="#Intro-OGroups">HDF5 Groups</a><br>
+        &nbsp;&nbsp&nbsp;&nbsp;<a href="#Intro-ODatasets">HDF5 Datasets</a><br>
+        &nbsp;&nbsp&nbsp;&nbsp;<a href="#Intro-OAttributes">HDF5 Attributes</a><br>
+        &nbsp;&nbsp&nbsp;&nbsp;<a href="#Intro-FileTech">The File as Written to Media</a><p>
+        </font>
+    <a href="#Intro-APIs">3. The HDF5 API</a><br>
+        <font size=-1>
+        &nbsp;&nbsp&nbsp;&nbsp;<a href="#Intro-NameConv">Naming 
+              Conventions</a><br>
+        &nbsp;&nbsp&nbsp;&nbsp;<a href="#Intro-Include">Include Files</a><br>
+        &nbsp;&nbsp&nbsp;&nbsp;<a href="#Intro-ProgModels">Programming 
+              Models</a><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMCreateFile">Creating an HDF5 file</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMDiscard">Discarding objects</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMWriteNew">Writing a dataset to a 
+              new file</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMGetInfo">Getting information about 
+              a dataset</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMRdWrPortion">Reading/writing a portion of 
+              a dataset</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMSelectHyper">Selecting hyperslabs</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMSelectPoints">Selecting of independent 
+              points</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMCreateVariableLength">Creating 
+              variable-length datatypes</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMCreateArray">Creating array datatypes</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMCreateCompound">Creating compound 
+              datatypes</A>
+
+</td><td width=6%>&nbsp;&nbsp;</td><td valign=top align=left width=42%>
+
+    <a href="#Intro-APIs">3. The HDF5 API</a> <i>(continued)</i><br>
+        <font size=-1>
+        &nbsp;&nbsp&nbsp;&nbsp;<a href="#Intro-ProgModels">Programming 
+              Models</a> <i>(continued)</i><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMCreateExtendible">Creating/writing extendible 
+                 and</a><br>
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMCreateExtendible">chunked datasets</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMWorkGroups">Working with groups</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMWorkAttributes">Working with attributes</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMWorkRefObjects">Working with references to 
+              objects</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Intro-PMWorkRefRegions">Working with references to 
+                 dataset</a><br>
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+               <A href="#Intro-PMWorkRefRegions">regions</A><p>
+        </font>
+    <a href="Intro/IntroExamples.html" 
+       target="ExampleWin">Introduction to HDF5 -- Example Codes</a><br>
+        <font size=-1>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="Intro/IntroExamples.html#CreateExample" 
+                 target="ExampleWin">1: Creating and writing a dataset</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="Intro/IntroExamples.html#CheckAndReadExample" 
+                 target="ExampleWin">2. Reading a hyperslab</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="Intro/IntroExamples.html#WriteSelected" 
+                 target="ExampleWin">3. Writing selected data</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="Intro/IntroExamples.html#VariableLength" 
+                 target="ExampleWin">4. Working with variable-length</A><br>
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="Intro/IntroExamples.html#VariableLength"
+                  target="ExampleWin">datatypes</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="Intro/IntroExamples.html#Array" 
+                 target="ExampleWin">5. Working with array datatypes</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="Intro/IntroExamples.html#Compound" 
+                 target="ExampleWin">6. Working with compound datatypes</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="Intro/IntroExamples.html#CreateExtendWrite" 
+                 target="ExampleWin">7. Creating and writing an 
+                 extendible</a><br>
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="Intro/IntroExamples.html#CreateExtendWrite" 
+                 target="ExampleWin">dataset</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="Intro/IntroExamples.html#ReadExtended" 
+                 target="ExampleWin">8. Reading data</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="Intro/IntroExamples.html#CreateGroups" 
+                 target="ExampleWin">9. Creating groups</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="Intro/IntroExamples.html#ReadWriteAttributes" 
+                 target="ExampleWin">10. Writing and reading 
+              attributes</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <a href="Intro/IntroExamples.html#CreateWriteRefObj" 
+                 target="ExampleWin">11. Creating and writing references</a><br>
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <a href="Intro/IntroExamples.html#CreateWriteRefObj" 
+                 target="ExampleWin">to objects</a><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <a href="Intro/IntroExamples.html#ReadRefObj" 
+                 target="ExampleWin">12. Reading references to objects</a><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <a href="Intro/IntroExamples.html#CreateWriteRefReg" 
+                 target="ExampleWin">13. Creating and writing references</a><br>
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <a href="Intro/IntroExamples.html#CreateWriteRefReg" 
+                 target="ExampleWin">to dataset regions</a><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <a href="Intro/IntroExamples.html#ReadRefReg" 
+                 target="ExampleWin">14. Reading references to dataset</a><br>
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <a href="Intro/IntroExamples.html#ReadRefReg" 
+                 target="ExampleWin">regions</a>
+        </font>
+</td></tr>
+</table>
+</center>
+<p>
+
+<hr>
+<H2><A NAME="Intro-WhatIs">1. What Is HDF5?</A></H2>
+<FONT FACE="Times"><P>HDF5 is a completely new Hierarchical Data Format 
+product consisting of a data format specification and a 
+supporting library implementation.  HDF5 is designed to address some 
+of the limitations of the older HDF product and to address current and 
+anticipated requirements of modern systems and applications. 
+<sup><a href="#H4H5footnote">1</a></sup>
+<P>We urge you to look at HDF5, the format and the library, and give us 
+feedback on what you like or do not like about it, and what features 
+you would like to see added to it.
+<a name="Intro-Why">
+<P><B>Why HDF5?</B></a>
+The development of HDF5 is motivated by a number of limitations in the 
+older HDF format and library. Some of these limitations are:
+
+<UL>
+</FONT><LI>A single file cannot store more than 20,000 complex objects, and a single file cannot be larger than 2 gigabytes.
+<LI>The data models are less consistent than they should be, there are more object types than necessary, and datatypes are too restricted. 
+<LI>The library source is old and overly complex, does not support parallel I/O effectively, and is difficult to use in threaded applications.</UL>
+
+<FONT FACE="Times"><P>HDF5 includes the following improvements.
+
+<UL>
+</FONT><LI>A new file format designed to address some of the deficiencies of HDF4.x, particularly the need to store larger files and more objects per file. 
+<LI>A simpler, more comprehensive data model that includes only two basic structures: a multidimensional array of record structures, and a grouping structure. 
+<LI>A simpler, better-engineered library and API, with improved support for parallel I/O, threads, and other requirements imposed by modern systems and applications.</UL>
+
+<font size=-1>
+<a name="H4H5footnote">1.</a>
+Note that HDF and HDF5 are two different products.  
+HDF is a data format first developed in the 1980s and currently 
+in Release 4.<i>x</i> (HDF Release 4.<i>x</i>).
+HDF5 is a new data format first released in <i>Beta</i> in 1998 and 
+designed to better meet the ever-increasing demands of scientific computing 
+and to take better advantage of the ever-increasing capabilities of 
+computing systems.
+HDF5 is currently in Release 1.<i>x</i> (HDF5 Release 1.<i>x</i>).
+</font>
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<H3><A NAME="Intro-Changes">Changes in the Current Release</A></H3>
+<P>A detailed list of changes in HDF5 between the current release and
+the preceding major release can be found in the file 
+<a href="ADGuide/RELEASE.txt" target="ExtWin"><code>RELEASE.txt</code></a>,
+with a highlights summary in the document 
+"<a href="ADGuide/Changes.html">HDF5 Software Changes from Release to Release</a>"
+in the 
+<a href="ADGuide.html"><cite>HDF5 Application Developer's Guide</cite></a>.
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+<hr>
+
+
+<H2><A NAME="Intro-FileOrg">2. HDF5 File Organization and Data Model</A></H2>
+<FONT FACE="Times"><P>HDF5 files are organized in a hierarchical structure, with two primary structures: <I>groups</I> and <I>datasets</I>.
+
+<UL>
+</FONT><I><LI>HDF5 group: </I>a grouping structure containing instances of zero or more groups or datasets, together with supporting metadata.
+<I><LI>HDF5 dataset:</I> a multidimensional array of data elements, together with supporting metadata. </UL>
+
+<FONT FACE="Times"><P>Working with groups and group members is similar in many ways to working with directories and files in UNIX. As with UNIX directories and files, objects in an HDF5 file are often described by giving their full (or absolute) path names. 
+</FONT><CODE><DL>
+<DD>/</CODE> signifies the root group. </DD>
+<CODE><DD>/foo</CODE> signifies a member of the root group called <CODE>foo</CODE>.</DD>
+<CODE><DD>/foo/zoo</CODE> signifies a member of the group <CODE>foo</CODE>, which in turn is a member of the root group.</DD>
+</DL>
+<FONT FACE="Times"><P>Any HDF5 group or dataset may have an associated <I>attribute list.</I> An HDF5 <I>attribute</I> is a user-defined HDF5 structure that provides extra information about an HDF5 object. Attributes are described in more detail below. 
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+</FONT><H3><A NAME="Intro-OGroups">HDF5 Groups</A></H3>
+<FONT FACE="Times"><P>An<I> HDF5 group</I> is a structure containing zero or more HDF5 objects. A group has two parts:
+
+<UL>
+</FONT><LI>A <I>group header</I>, which contains a group name and a list of group attributes. 
+<LI>A group symbol table, which is a list of the HDF5 objects that belong to the group.</UL>
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<H3><A NAME="Intro-ODatasets">HDF5 Datasets</A></H3>
+<FONT FACE="Times"><P>A dataset is stored in a file in two parts: a header and a data array. 
+<P>The header contains information that is needed to interpret the array portion of the dataset, as well as metadata (or pointers to metadata) that describes or annotates the dataset. Header information includes the name of the object, its dimensionality, its number-type, information about how the data itself is stored on disk, and other information used by the library to speed up access to the dataset or maintain the file's integrity.
+<P>There are four essential classes of information in any header: <I>name</I>, <I>datatype</I>, <I>dataspace</I>, and <I>storage layout</I>:
+</FONT><B><DFN><P>Name.</B></DFN><FONT FACE="Times"> A dataset <I>name</I> is a sequence of alphanumeric ASCII characters.
+</FONT><B><DFN><P>Datatype.</B></DFN><FONT FACE="Times"> HDF5 allows one to define many different kinds of datatypes. There are two categories of datatypes: <I>atomic</I> datatypes and <I>compound</I> datatypes. 
+Atomic datatypes can also be system-specific, or <I><CODE>NATIVE</CODE></I>, and all datatypes can be <I>named</I>:
+<ul>
+<li><em>Atomic</em> datatypes are those that are not decomposed at the datatype interface level, such as integers and floats.
+<li><I><CODE>NATIVE</CODE></I> datatypes are system-specific instances of atomic datatypes. 
+<li>Compound datatypes are made up of atomic datatypes.
+<li><em>Named</em> datatypes are either atomic or compound datatypes that have been specifically designated to be shared across datasets.
+</ul>
+<I><P>Atomic datatypes</I> include integers and floating-point numbers. Each atomic type belongs to a particular class and has several properties: size, order, precision, and offset. In this introduction, we consider only a few of these properties.
+<P>Atomic classes include integer, float, date and time, string, bit field, and opaque. <I>(Note: Only integer, float and string  classes are available in the current implementation.)
+</I><P>Properties of integer types include size, order (endian-ness), and signed-ness (signed/unsigned).
+<P>Properties of float types include the size and location of the exponent and mantissa, and the location of the sign bit.
+<P>The datatypes that are supported in the current implementation are: 
+
+<UL>
+</FONT><LI>Integer datatypes: 8-bit, 16-bit, 32-bit, and 64-bit integers in both little and big-endian format 
+<LI>Floating-point numbers: IEEE 32-bit and 64-bit floating-point numbers in both little and big-endian format
+<li>References
+<LI>Strings</UL>
+
+<p>
+<em><code>NATIVE</code> datatypes.</em>  Although it is possible to describe nearly any kind of atomic datatype, most applications will use predefined datatypes that are supported by their compiler.  In HDF5 these are called <i>native</i> datatypes. <CODE>NATIVE</CODE> datatypes are C-like datatypes that are generally supported by the hardware of the machine on which the library was compiled. In order to be portable, applications should almost always use the <CODE>NATIVE </CODE>designation to describe data values in memory.
+<P>The <CODE>NATIVE</CODE> architecture has base names which do not follow the same rules as the others.  Instead, native type names are similar to the C type names.  The following figure shows several examples.
+<p>
+
+<center>
+<b>Examples of Native Datatypes and Corresponding C Types</b><br>
+<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=462>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<B><P ALIGN="CENTER">Example</B></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<B><P ALIGN="CENTER">Corresponding C Type</B></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<code>H5T_NATIVE_CHAR</code></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<code>signed char</code></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<code>H5T_NATIVE_UCHAR</code></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<code>unsigned char</code></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<code>H5T_NATIVE_SHORT</code></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<code>short</code></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<code>H5T_NATIVE_USHORT</code></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<code>unsigned short</code></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<code>H5T_NATIVE_INT</code></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<code>int</code></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<code>H5T_NATIVE_UINT</code></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<code>unsigned</code></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<code>H5T_NATIVE_LONG</code></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<code>long</code></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<code>H5T_NATIVE_ULONG</code></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<code>unsigned long</code></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<code>H5T_NATIVE_LLONG</code></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<code>long long</code></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<code>H5T_NATIVE_ULLONG</code></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<code>unsigned long long</code></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<code>H5T_NATIVE_FLOAT</code></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<code>float</code></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<code>H5T_NATIVE_DOUBLE</code></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<code>double</code></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<code>H5T_NATIVE_LDOUBLE</code></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<code>long double</code></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<CODE>H5T_NATIVE_HSIZE</CODE></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<CODE>hsize_t</CODE></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<CODE>H5T_NATIVE_HSSIZE</CODE></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<CODE>hssize_t</CODE></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<CODE>H5T_NATIVE_HERR</CODE></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<CODE>herr_t</CODE></TD>
+</TR>
+<TR><TD WIDTH="49%" VALIGN="TOP">
+<CODE>H5T_NATIVE_HBOOL</CODE></TD>
+<TD WIDTH="51%" VALIGN="TOP">
+<CODE>hbool_t</CODE></TD>
+</TR>
+</TABLE>
+</CENTER>
+
+<FONT FACE="Times"><P>See <A HREF="Datatypes.html"><I>Datatypes</I></A> in the<I> HDF User&#146s Guide</I> for further information.</font>
+
+
+<FONT FACE="Times"><P>A <I>compound datatype</I> is one in which a 
+collection of several datatypes are represented as a single unit, 
+a compound datatype, similar to a <I>struct</I> in C. 
+The parts of a compound datatype are called <I>members.</I> 
+The members of a compound datatype may be of any datatype, 
+including another compound datatype. It is possible to read members 
+from a compound type without reading the whole type.
+<p>
+<ta/FONT><I><P>Named datatypes.</I>  Normally each dataset has its own datatype, but sometimes we may want to share a datatype among several datasets.  This can be done using a <I>named </I>datatype. A named datatype is stored in the file independently of any dataset, and referenced by all datasets that have that datatype.  Named datatypes may have an associated attributes list.  
+See <A HREF="Datatypes.html"><I>Datatypes</I></A></font><FONT FACE="Times"> in the<I> HDF User&#146s Guide</I> for further information.
+<B><DFN><P>Dataspace.</B> </DFN>A dataset <I>dataspace </I>describes the dimensionality of the dataset. The dimensions of a dataset can be fixed (unchanging), or they may be <I>unlimited</I>, which means that they are extendible (i.e. they can grow larger). 
+<P>Properties of a dataspace consist of the <I>rank </I>(number of dimensions) of the data array, the <I>actual sizes of the dimensions</I> of the array, and the <I>maximum sizes of the dimensions </I>of the array. For a fixed-dimension dataset, the actual size is the same as the maximum size of a dimension. When a dimension is unlimited, the maximum size is set to the </FONT>value <CODE>H5P_UNLIMITED</CODE>.<FONT FACE="Times"> (An example below shows how to create extendible datasets.)
+<P>A dataspace can also describe portions of a dataset, making it possible to do partial I/O operations on  <I>selections</I>.  <I>Selection</I> is supported by the dataspace interface (H5S). Given an n-dimensional dataset, there are currently four ways to do partial selection: 
+<OL>
+
+</FONT><LI>Select a logically contiguous n-dimensional hyperslab.  
+<LI>Select a non-contiguous hyperslab consisting of elements or blocks of elements (hyperslabs) that are equally spaced.
+<li>Select a union of hyperslabs.
+<LI>Select a list of independent points. </OL>
+
+<FONT FACE="Times"><P>Since I/O operations have two end-points, the raw data transfer functions require two dataspace arguments: one describes the application memory dataspace or subset thereof, and the other describes the file dataspace or subset thereof.
+<P>See <A HREF="Dataspaces.html"><I>Dataspaces</I></A></font><FONT FACE="Times"> in the<I> HDF User&#146s Guide</I> for further information.
+</FONT><B><DFN><P>Storage layout.</B></DFN><FONT FACE="Times"> The HDF5 format makes it possible to store data in a variety of ways. The default storage layout format is <I>contiguous</I>, meaning that data is stored in the same linear way that it is organized in memory. Two other storage layout formats are currently defined for HDF5: <I>compact, </I>and<I> chunked. </I>In the future, other storage layouts may be added.<I> 
+<P>Compact</I> storage is used when the amount of data is small and can be stored directly in the object header. <I>(Note: Compact storage is not supported in this release.)</I> 
+<I><P>Chunked</I> storage involves dividing the dataset into equal-sized "chunks" that are stored separately. Chunking has three important benefits. 
+<OL>
+
+<LI>It makes it possible to achieve good performance when accessing subsets of the datasets, even when the subset to be chosen is orthogonal to the normal storage order of the dataset. 
+<LI>It makes it possible to compress large datasets and still achieve good performance when accessing subsets of the dataset. 
+<LI>It makes it possible efficiently to extend the dimensions of a dataset in any direction.</OL>
+
+<P>
+See <A HREF="Datasets.html"><I>Datasets</I></A> and <A HREF="Chunking.html"><I>Dataset Chunking Issues</I></A></font><FONT FACE="Times"> in the<I> HDF User&#146s Guide</I> for further information.
+We particularly encourage you to read <A HREF="Chunking.html"><I>Dataset Chunking Issues</I></A> since the issue is complex and beyond the scope of this document.
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+</FONT><H3><A NAME="Intro-OAttributes">HDF5 Attributes</A></H3>
+<I>Attributes </I>are small named datasets that are attached to primary datasets, groups, or named datatypes.  Attributes can be used to describe the nature and/or the intended usage of a dataset or group. An attribute has two parts: (1) a <I>name</I> and (2) a <I>value</I>.  The value part contains one or more data entries of the same datatype. 
+<FONT FACE="Times"><P>The Attribute API (H5A) is used to read or write attribute information. When accessing attributes, they can be identified by name or by an <I>index value</I>.  The use of an index value makes it possible to iterate through all of the attributes associated with a given object.
+<P>The HDF5 format and I/O library are designed with the assumption that attributes are small datasets. They are always stored in the object header of the object they are attached to.  Because of this, large datasets should not be stored as attributes. How large is "large" is not defined by the library and is up to the user's interpretation. (Large datasets with metadata can be stored as supplemental datasets in a group with the primary dataset.) 
+<P>See <A HREF="Attributes.html"><I>Attributes</I></A></font><FONT FACE="Times"> in the<I> HDF User&#146s Guide</I> for further information.
+</FONT>
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<H3><A NAME="Intro-FileTech">The File as Written to Media</A></H3>
+
+    <p>For those who are interested, this section takes a look at 
+      the low-level elements of the file as the file is written to disk 
+      (or other storage media) and the relation of those low-level 
+      elements to the higher level elements with which users typically 
+      are more familiar.  The HDF5 API generally exposes only the 
+      high-level elements to the user; the low-level elements are 
+      often hidden.
+      The rest of this <cite>Introduction</cite> does not assume 
+      an understanding of this material.
+
+    <P>The format of an HDF5 file on disk encompasses several
+      key ideas of the HDF4 and AIO file formats as well as
+      addressing some shortcomings therein.  The new format is
+      more self-describing than the HDF4 format and is more
+      uniformly applied to data objects in the file.
+      
+    <table align=left width=100>
+    <tr><td align=center>
+        <hr>
+        <img src="FF-IH_FileGroup.gif" alt="HDF5 Groups" hspace=15 vspace=15>
+    </td><td>&nbsp;</td></tr><tr><td align=center>
+        <strong>Figure 1:</strong> Relationships among the 
+          HDF5 root group, other groups, and objects
+        <hr>
+    </td><td>&nbsp;</td></tr>
+    </table>
+
+
+    <P>An HDF5 file appears to the user as a directed graph.  
+      The nodes of this graph are the higher-level HDF5 objects
+      that are exposed by the HDF5 APIs:
+
+      <ul>
+         <li>Groups
+         <li>Datasets
+         <li>Datatypes
+         <li>Dataspaces
+      </ul>
+
+    <P>At the lowest level, as information is actually written to the disk, 
+       an HDF5 file is made up of the following objects:
+      <ul>
+         <li>A super block
+         <li>B-tree nodes (containing either symbol nodes or raw data chunks)
+         <li>Object headers
+
+    <table align=right width=95>
+    <tr><td>&nbsp;</td><td align=center>
+        <hr>
+        <img src="FF-IH_FileObject.gif" alt="HDF5 Objects" hspace=15 vspace=15>
+    </td></tr><tr><td>&nbsp;</td><td align=center>
+        <strong>Figure 2:</strong> HDF5 objects -- datasets, datatypes, or dataspaces
+        <hr>
+    </td></tr>
+    </table>
+
+         <li>Collections
+         <li>Local heaps
+         <li>Free space
+      </ul>
+
+      The HDF5 library uses these lower-level objects to represent the
+      higher-level objects that are then presented to the user or 
+      to applications through the APIs.
+      For instance, a group is an object header that contains a message that
+      points to a local heap and to a B-tree which points to symbol nodes.
+      A dataset is an object header that contains messages that describe
+      datatype, space, layout, filters, external files, fill value, etc
+      with the layout message pointing to either a raw data chunk or to a
+      B-tree that points to raw data chunks.
+
+    <P>See the <A HREF="H5.format.html"><cite>HDF5 File Format 
+      Specification</cite></A><FONT FACE="Times"> for further information.
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+<hr>
+
+
+</FONT><H2><A NAME="Intro-APIs">3. The HDF5 Applications Programming Interface (API)</A></H2>
+<FONT FACE="Times"><P>The current HDF5 API is implemented only in C. The API provides routines for creating HDF5 files, creating and writing groups, datasets, and their attributes to HDF5 files, and reading groups, datasets and their attributes from HDF5 files.
+</FONT><H3><A NAME="Intro-NameConv">Naming conventions</A></H3>
+<FONT FACE="Times"><P>All C routines in the HDF 5 library begin with a prefix of the form <B>H5*</B>, where <B>*</B> is a single letter indicating the object on which the operation is to be performed:
+
+<UL>
+</FONT><B><LI>H5F</B>: <B>F</B>ile-level access routines. <BR>
+Example: <CODE>H5Fopen</CODE>, which opens an HDF5 file. 
+<B><LI>H5G</B>: <B>G</B>roup functions, for creating and operating on groups of objects. <BR>
+Example: <CODE>H5Gset</CODE><FONT FACE="Courier">,</FONT>which sets the working group to the specified group. 
+<B><LI>H5T: </B>Data<B>T</B>ype functions, for creating and operating on simple and compound datatypes to be used as the elements in data arrays.<B><BR>
+</B>Example: <CODE>H5Tcopy</CODE><FONT FACE="Courier">,</FONT>which creates a copy of an existing datatype. 
+<B><LI>H5S: </B>Data<B>S</B>pace functions, which create and manipulate the dataspace in which the elements of a data array are stored.<BR>
+Example: <CODE>H5Screate_simple</CODE>, which creates simple dataspaces. 
+<B><LI>H5D: D</B>ataset functions, which manipulate the data within datasets and determine how the data is to be stored in the file. <BR>
+Example: <CODE>H5Dread</CODE>, which reads all or part of a dataset into a buffer in memory. 
+<B><LI>H5P</B>: <B>P</B>roperty list functions, for manipulating object creation and access properties. <BR>
+Example: <CODE>H5Pset_chunk</CODE>, which sets the number of dimensions and the size of a chunk.
+<B><LI>H5A</B>: <B>A</B>ttribute access and manipulating routines. <BR>
+Example: <CODE>H5Aget_name</CODE>, which retrieves name of an attribute.
+<B><LI>H5Z</B>: <B>C</B>ompression registration routine. <BR>
+Example: <CODE>H5Zregister</CODE>, which registers new compression and uncompression functions for use with the HDF5 library.
+<B><LI>H5E</B>: <B>E</B>rror handling routines. <BR>
+Example: <CODE>H5Eprint</CODE>, which prints the current error stack.
+<B><LI>H5R</B>: <B>R</B>eference routines. <BR>
+Example: <CODE>H5Rcreate</CODE>, which creates a reference.
+<B><LI>H5I</B>: <B>I</B>dentifier routine. <BR>
+Example: <CODE>H5Iget_type</CODE>, which retrieves the type of an object.</UL>
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<H3><A NAME="Intro-Include">Include Files</A> </H3>
+<FONT FACE="Times"><P>There are a number definitions and declarations that should be included with any HDF5 program. These definitions and declarations are contained in several <I>include</I> files. The main include </FONT>file is <CODE>hdf5.h</CODE>. This file<FONT FACE="Times"> includes all of the other files that your program is likely to need. <I>Be sure to include </i><code>hdf5.h</code><i> in any program that uses the HDF5 library.</I></FONT>
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<H3><A NAME="Intro-ProgModels">Programming Models</A></H3>
+<FONT FACE="Times"><P>In this section we describe how to program some basic operations on files, including how to
+
+<UL>
+</FONT><LI>Create a file.
+<LI>Create and initialize a dataset.
+<LI>Discard objects when they are no longer needed.
+<LI>Write a dataset to a new file.
+<LI>Obtain information about a dataset.
+<LI>Read a portion of a dataset.
+<LI>Create and write compound datatypes.
+<LI>Create and write extendible datasets.
+<LI>Create and populate groups.
+<LI>Work with attributes. </UL>
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<h3><A NAME="Intro-PMCreateFile">How to create an HDF5 file</A></h3>
+<P>This programming model shows how to create a file and also how to close the file.
+<OL>
+
+<LI>Create the file.
+<LI>Close the file.
+</ol>
+
+<P>The following code fragment implements the specified model. If there is a possibility that the file already exists, the user must add the flag <CODE>H5ACC_TRUNC</CODE> to the access mode to overwrite the previous file's information. 
+</font>
+<CODE><PRE>hid_t       file;                          /* identifier */
+/*
+* Create a new file using H5ACC_TRUNC access,
+* default file creation properties, and default file
+* access properties.
+* Then close the file.
+*/
+file = H5Fcreate(FILE, H5ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+status = H5Fclose(file); </PRE>
+</CODE><DL>
+<DT>&nbsp;</DT>
+</DL>
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<h3><A NAME="Intro-PMComponents">How to create and initialize the essential components of a dataset for writing to a file</A></h3>
+<P>Recall that datatypes and dimensionality (dataspace) are independent objects, which are created separately from any dataset that they might be attached to. Because of this the creation of a dataset requires, at a minimum, separate definitions of datatype, dimensionality, and dataset. Hence, to create a dataset the following steps need to be taken:
+<ol>
+<FONT FACE="Times"><LI VALUE=1>Create and initialize a dataspace for the dataset to be written.
+<LI>Define the datatype for the dataset to be written. 
+<LI>Create and initialize the dataset itself.</OL>
+
+</FONT><FONT FACE="Times"><P>The following code illustrates the creation of these three components of a dataset object.
+</FONT><CODE><PRE>hid_t    dataset, datatype, dataspace;   /* declare identifiers */
+
+/* 
+ * Create dataspace: Describe the size of the array and 
+ * create the data space for fixed size dataset. 
+ */
+dimsf[0] = NX;
+dimsf[1] = NY;
+dataspace = H5Screate_simple(RANK, dimsf, NULL); 
+/*
+ * Define datatype for the data in the file.
+ * We will store little endian integer numbers.
+ */
+datatype = H5Tcopy(H5T_NATIVE_INT);
+status = H5Tset_order(datatype, H5T_ORDER_LE);
+/*
+ * Create a new dataset within the file using defined 
+ * dataspace and datatype and default dataset creation
+ * properties.
+ * NOTE: H5T_NATIVE_INT can be used as datatype if conversion
+ * to little endian is not needed.
+ */
+dataset = H5Dcreate(file, DATASETNAME, datatype, dataspace, H5P_DEFAULT);</PRE>
+</CODE>
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<h3><A NAME="Intro-PMDiscard">How to discard objects when they are no longer needed</A></h3>
+<FONT FACE="Times"><P>The datatype, dataspace and dataset objects should be released once they are no longer needed by a program. Since each is an independent object, the must be released (or <I>closed</I>) separately. The following lines of code close the datatype, dataspace, and datasets that were created in the preceding section.
+</FONT><CODE><P>H5Tclose(datatype);
+<P>H5Dclose(dataset);
+<P>H5Sclose(dataspace);
+</CODE>
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<h3><A NAME="Intro-PMWriteNew">How to write a dataset to a new file</A></h3>
+<FONT FACE="Times"><P>Having defined the datatype, dataset, and dataspace parameters, you write out the data with a call to </FONT><CODE>H5Dwrite</CODE><FONT FACE="Courier">.
+</FONT><CODE><PRE>/*
+* Write the data to the dataset using default transfer
+* properties.
+*/
+status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+	  H5P_DEFAULT, data);</PRE>
+</CODE><FONT FACE="Times"><P>The third and fourth parameters of </FONT><CODE>H5Dwrite</CODE><FONT FACE="Times"> in the example describe the dataspaces in memory and in the file, respectively. They are set to the value </FONT><CODE>H5S_ALL</CODE><FONT FACE="Times"> to indicate that an entire dataset is to be written. In a later section we look at how we would access a portion of a dataset.
+</FONT><P><A HREF="Intro/IntroExamples.html#CreateExample" target="ExampleWin"><FONT FACE="Times">Example 1</FONT></A><FONT FACE="Times"> contains a program that creates a file and a dataset, and writes the dataset to the file. 
+<P>Reading is analogous to writing. If, in the previous example, we wish to read an entire dataset, we would use the same basic calls with the same parameters. Of course, the routine </FONT><CODE>H5Dread</CODE><FONT FACE="Times"> would replace </FONT><CODE>H5Dwrite</CODE><FONT FACE="Courier">.</FONT><FONT FACE="Times"> 
+</FONT>
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<h3><A NAME="Intro-PMGetInfo">Getting information about a dataset</A></h3>
+<FONT FACE="Times"><P>Although reading is analogous to writing, it is often necessary to query a file to obtain information about a dataset. For instance, we often need to know about the datatype associated with a dataset, as well dataspace information (e.g. rank and dimensions). There are several "get" routines for obtaining this information.  The following code segment illustrates how we would get this kind of information: 
+</FONT><CODE><PRE>/*
+* Get datatype and dataspace identifiers and then query
+* dataset class, order, size, rank and dimensions.
+*/
+
+datatype  = H5Dget_type(dataset);     /* datatype identifier */ 
+class     = H5Tget_class(datatype);
+if (class == H5T_INTEGER) printf("Data set has INTEGER type \n");
+order     = H5Tget_order(datatype);
+if (order == H5T_ORDER_LE) printf("Little endian order \n");
+
+size  = H5Tget_size(datatype);
+printf(" Data size is %d \n", size);
+
+dataspace = H5Dget_space(dataset);    /* dataspace identifier */
+rank      = H5Sget_simple_extent_ndims(dataspace);
+status_n  = H5Sget_simple_extent_dims(dataspace, dims_out);
+printf("rank %d, dimensions %d x %d \n", rank, dims_out[0], dims_out[1]);</PRE>
+</CODE>
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<h3><A NAME="Intro-PMRdWrPortion">Reading and writing a portion of a dataset</A></h3>
+<P>In the previous discussion, we describe how to access an entire dataset with one write (or read) operation. HDF5 also supports access to portions (or selections) of a dataset in one read/write operation. Currently selections are limited to hyperslabs, their unions, and the lists of independent points. Both types of selection will be discussed in the following sections. Several sample cases of selection reading/writing are shown on the following figure.
+<center>
+<table bgcolor="#FFFFFF" border=1>
+<tr><td align=center>
+<img src="IH_mapHead.gif">
+</tr></td><tr><td align=center>
+a&nbsp;<img src="IH_map1.gif">
+</tr></td><tr><td align=center>
+b&nbsp;<img src="IH_map2.gif">
+</tr></td><tr><td align=center>
+c&nbsp;<img src="IH_map3.gif">
+</tr></td><tr><td align=center>
+d&nbsp;<img src="IH_map4.gif">
+</tr></td><tr><td align=center>
+<img src="IH_mapFoot.gif">
+</tr></td>
+</table>
+</center>
+</B><P>In example (a) a single hyperslab is read from the midst of a two-dimensional array in a file and stored in the corner of a smaller two-dimensional array in memory.  In (b) a regular series of blocks is read from a two-dimensional array in the file and stored as a contiguous sequence of values at a certain offset in a one-dimensional array in memory.  In (c) a sequence of points with no regular pattern is read from a two-dimensional array in a file and stored as a sequence of points with no regular pattern in a three-dimensional array in memory. 
+In (d) a union of hyperslabs in the file dataspace is read and 
+the data is stored in another union of hyperslabs in the memory dataspace.
+<P>As these examples illustrate, whenever we perform partial read/write operations on the data, the following information must be provided: file dataspace, file dataspace selection, memory dataspace and memory dataspace selection. After the required information is specified, actual read/write operation on the portion of data is done in a single call to the HDF5 read/write functions H5Dread(write).
+
+
+<H5><A NAME="Intro-PMSelectHyper">Selecting hyperslabs</A></H5>
+<FONT FACE="Times"><P>Hyperslabs are portions of datasets.  A hyperslab selection can be a logically contiguous collection of points in a dataspace, or it can be regular pattern of points or blocks in a dataspace.  The following picture illustrates a selection of regularly spaced 3x2 blocks in an 8x12 dataspace.</FONT>
+<p>
+
+<center>
+<b>Hyperslab selection</b><br>
+<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=345>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+</TABLE>
+</center>
+
+<FONT FACE="Times"><P>Four parameters are required to describe a completely general hyperslab.  Each parameter is an array whose rank is the same as that of the dataspace: 
+
+<UL>
+</FONT><CODE><LI>start</CODE>: a starting location for the hyperslab.  In the example <CODE>start</CODE> is (0,1). 
+<CODE><LI>stride</CODE>: the number of elements to separate each element or block to be selected.  In the example <CODE>stride</CODE><I> </I> is (4,3).  If the stride parameter is set to NULL, the stride size defaults to 1 in each dimension.
+<CODE><LI>count</CODE>: the number of elements or blocks to select along each dimension.  In the example, <CODE>count</CODE> is (2,4).
+<CODE><LI>block</CODE>: the size of the block selected from the dataspace.  In the example, <CODE>block</CODE> is (3,2).  If the block parameter is set to NULL, the block size defaults to a single element in each dimension, as if the block array was set to all 1s.</UL>
+
+<B><P>In what order is data copied?  </B>When actual I/O is performed data values are copied by default from one dataspace to another in so-called row-major, or C order.  That is, it is assumed that the first dimension varies slowest, the second next slowest, and so forth.  
+<p><B>Example without strides or blocks.</B> Suppose we want to read a 3x4 hyperslab from a dataset in a file beginning at the element <CODE>&lt;1,2&gt;</CODE><FONT FACE="Times"> in the dataset. In order to do this, we must create a dataspace that describes the overall rank and dimensions of the dataset in the file, as well as the position and size of the hyperslab that we are extracting from that dataset. The following code illustrates the selection of the hyperslab in the file dataspace.
+</FONT><CODE><PRE>
+/* 
+* Define file dataspace.
+*/
+dataspace = H5Dget_space(dataset);    /* dataspace identifier */
+rank      = H5Sget_simple_extent_ndims(dataspace);
+status_n  = H5Sget_simple_extent_dims(dataspace, dims_out, NULL);
+
+/* 
+* Define hyperslab in the dataset. 
+*/
+offset[0] = 1;
+offset[1] = 2;
+count[0]  = 3;
+count[1]  = 4;
+status = H5Sselect_hyperslab(dataspace, H5S_SELECT_SET, offset, NULL, 
+         count, NULL);</PRE>
+</CODE><FONT FACE="Times"><P>This describes the dataspace from which we wish to read. We need to define the dataspace in memory analogously. Suppose, for instance, that we have in memory a 3 dimensional 7x7x3 array into which we wish to read the 3x4 hyperslab described above beginning at the element </FONT><CODE>&lt;3,0,0&gt;</CODE><FONT FACE="Times">. Since the in-memory dataspace has three dimensions, we have to describe the hyperslab as an array with three dimensions, with the last dimension being 1: </FONT><CODE>&lt;3,4,1&gt;</CODE><FONT FACE="Times">.
+<P>Notice that we must describe two things: the dimensions of the in-memory array, and the size and position of the hyperslab that we wish to read in. The following code illustrates how this would be done. 
+</FONT><CODE><PRE>/*
+* Define memory dataspace.
+*/
+dimsm[0] = 7;
+dimsm[1] = 7;
+dimsm[2] = 3;
+memspace = H5Screate_simple(RANK_OUT,dimsm,NULL);   
+
+/* 
+* Define memory hyperslab. 
+*/
+offset_out[0] = 3;
+offset_out[1] = 0;
+offset_out[2] = 0;
+count_out[0]  = 3;
+count_out[1]  = 4;
+count_out[2]  = 1;
+status = H5Sselect_hyperslab(memspace, H5S_SELECT_SET, offset_out, NULL, 
+         count_out, NULL);
+
+/*</PRE>
+</CODE><P><A HREF="Intro/IntroExamples.html#CheckAndReadExample" target="ExampleWin"><FONT FACE="Times">Example 2</FONT></A><FONT FACE="Times"> contains a complete program that performs these operations.
+<B><P>Example with strides and blocks</B>.  Consider the 8x12 dataspace described above, in which we selected eight 3x2 blocks.  Suppose we wish to fill these eight blocks. </FONT>
+<p>
+
+<center>
+<b>Hyperslab selection</b><br>
+<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=345>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>X</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+</TABLE>
+</center>
+
+<P>This hyperslab has the following parameters:<FONT FACE="Times"> </FONT><CODE>start=(0,1), stride=(4,3), count=(2,4), block=(3,2).
+</CODE><FONT FACE="Times"><P>Suppose that the source dataspace in memory is this 50-element one dimensional array called </FONT><CODE>vector</CODE><FONT FACE="Times">:</FONT>
+<p>
+
+<center>
+<b>A 50-element one dimensional array</b><br>
+<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=457>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>-1</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>1</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>2</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>3</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>4</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>5</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>6</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>7</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<FONT FACE="Courier"><CODE><P>... </FONT></CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>47</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>48</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>-1</CODE></TD>
+</TR>
+</TABLE>
+</center>
+
+<FONT FACE="Times"><P>The following code will write 48 elements from </FONT><CODE>vector</code> to our file dataset, starting with the second element in <code>vector</code>.
+<pre>
+/* Select hyperslab for the dataset in the file, using 3x2 blocks, (4,3) stride
+ * (2,4) count starting at the position (0,1).
+ */
+start[0]  = 0; start[1]  = 1;
+stride[0] = 4; stride[1] = 3;
+count[0]  = 2; count[1]  = 4;    
+block[0]  = 3; block[1]  = 2;
+ret = H5Sselect_hyperslab(fid, H5S_SELECT_SET, start, stride, count, block);
+
+/*
+ * Create dataspace for the first dataset.
+ */
+mid1 = H5Screate_simple(MSPACE1_RANK, dim1, NULL);
+
+/*
+ * Select hyperslab. 
+ * We will use 48 elements of the vector buffer starting at the second element.
+ * Selected elements are 1 2 3 . . . 48
+ */
+start[0]  = 1;
+stride[0] = 1;
+count[0]  = 48;
+block[0]  = 1;
+ret = H5Sselect_hyperslab(mid1, H5S_SELECT_SET, start, stride, count, block);
+ 
+/*
+ * Write selection from the vector buffer to the dataset in the file.
+ *
+ret = H5Dwrite(dataset, H5T_NATIVE_INT, midd1, fid, H5P_DEFAULT, vector)
+</pre><CODE><P>&nbsp;
+</CODE><P>After these operations, the file dataspace will have the following values.
+<p>
+
+<center>
+<b>Hyperslab selection with assigned values</b><br>
+<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=460>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>1</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>2</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>3</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>4</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>5</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>6</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>7</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>8</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>9</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>10</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>11</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>12</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>13</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>14</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>15</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>16</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>17</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>18</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>19</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>20</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>21</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>22</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>23</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>24</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>25</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>26</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>27</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>28</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>29</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>30</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>31</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>32</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>33</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>34</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>35</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>36</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>37</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>38</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>39</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>40</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>41</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>42</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>43</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>44</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>45</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>46</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>47</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>48</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+</TABLE>
+</center>
+
+<P>Notice that the values are inserted in the file dataset in row-major order.
+<P><a href="Intro/IntroExamples.html#WriteSelected" target="ExampleWin">Example 3</a> includes this code and other example code illustrating the use of hyperslab selection.
+
+
+<H5><A NAME="Intro-PMSelectPoints">Selecting a list of independent points</A></H5>
+A hyperslab specifies a regular pattern of elements in a dataset.  It is also possible to specify a list of independent elements to read or write using the function <CODE>H5Sselect_elements</CODE>.  Suppose, for example, that we wish to write the values 53, 59, 61, 67 to the following elements of the 8x12 array used in the previous example: (0,0), (3,3), (3,5), and (5,6).  The following code selects the points and writes them to the dataset:
+<pre>
+#define FSPACE_RANK      2    /* Dataset rank as it is stored in the file */
+#define NPOINTS          4    /* Number of points that will be selected 
+                                 and overwritten */ 
+#define MSPACE2_RANK     1    /* Rank of the second dataset in memory */ 
+#define MSPACE2_DIM      4    /* Dataset size in memory */ 
+
+&nbsp;
+hsize_t dim2[] = {MSPACE2_DIM};       /* Dimension size of the second 
+                                         dataset (in memory) */ 
+int     values[] = {53, 59, 61, 67};  /* New values to be written */
+hsize_t coord[NPOINTS][FSPACE_RANK];  /* Array to store selected points 
+                                         from the file dataspace */ 
+
+/*
+ * Create dataspace for the second dataset.
+ */
+mid2 = H5Screate_simple(MSPACE2_RANK, dim2, NULL);
+
+/*
+ * Select sequence of NPOINTS points in the file dataspace.
+ */
+coord[0][0] = 0; coord[0][1] = 0;
+coord[1][0] = 3; coord[1][1] = 3;
+coord[2][0] = 3; coord[2][1] = 5;
+coord[3][0] = 5; coord[3][1] = 6;
+
+ret = H5Sselect_elements(fid, H5S_SELECT_SET, NPOINTS, 
+                         (const hsize_t **)coord);
+
+/*
+ * Write new selection of points to the dataset.
+ */
+ret = H5Dwrite(dataset, H5T_NATIVE_INT, mid2, fid, H5P_DEFAULT, values);   
+</pre>
+
+<P>&nbsp;
+</FONT><P>After these operations, the file dataspace will have the following values:
+<p>
+
+<center>
+<b>Hyperslab selection with an overlay of independent points</b><br>
+<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=460>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<B><CODE><P>53</B></CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>1</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>2</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>3</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>4</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>5</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>6</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>7</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>8</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>9</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>10</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>11</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>12</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>13</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>14</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>15</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>16</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>17</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>18</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>19</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>20</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>21</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>22</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>23</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>24</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<B><CODE><P>59</B></CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<B><CODE><P>61</B></CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>25</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>26</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>27</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>28</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>29</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>30</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>31</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>32</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>33</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>34</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>35</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>36</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<B><CODE><P>67</B></CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>37</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>38</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>39</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>40</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>41</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>42</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>43</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>44</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>45</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>46</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>47</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>48</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+</TABLE>
+</center>
+
+<P><A HREF="Intro/IntroExamples.html#WriteSelected" target="ExampleWin"><FONT FACE="Times">Example 3</FONT></A><FONT FACE="Times"> contains a complete program that performs these subsetting operations.
+
+
+<H5><A NAME="_SelectUnion">Selecting a union of hyperslabs</A></H5>
+
+</font>
+The HDF5 Library allows the user to select a union of hyperslabs and 
+write or read the selection into another selection.  The shapes of
+the two selections may differ, but the number of elements must be equal.
+<p>
+Suppose that we want to read two overlapping hyperslabs from the dataset 
+written in the previous example into a union of hyperslabs in the memory 
+dataset.  This exercise is illustrated in the two figures immediately below.
+Note that the memory dataset has a different shape from the previously
+written dataset.  Similarly, the selection in the memory dataset
+could have a different shape than the selected union of hyperslabs in 
+the original file; for simplicity, we will preserve the selection's shape
+in this example.
+<p>
+
+<center>
+<b>Selection of a union of hyperslabs in a file dataset</b><br>
+<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=460>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<B><CODE><P>53</B></CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>1</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>2</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>3</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>4</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>5</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>6</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>7</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>8</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>9</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">
+<CODE><P>10</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">
+<CODE><P>11</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">
+<CODE><P>12</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>13</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>14</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>15</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>16</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>17</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">
+<CODE><P>18</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#88FF88">
+<CODE><P>19</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#88FF88">
+<CODE><P>20</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>21</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44" border=1>
+<CODE><P>22</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>23</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>24</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">
+<B><CODE><P>59</B></CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#88FF88">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#88FF88">
+<B><CODE><P>61</B></CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>25</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>26</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>27</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>28</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>29</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>30</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>31</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>32</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>33</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>34</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>35</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>36</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<B><CODE><P>67</B></CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>37</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>38</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>39</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>40</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>41</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>42</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>43</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>44</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>45</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>46</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>47</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>
+<CODE><P>48</CODE></TD>
+</TR>
+<TR><TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+</TABLE>
+<font size=-1><i>(Note: The above table highlights hyperslab selections 
+with green, blue, and yellow<br> shading.  This shading may not 
+appear properly in black-and-white printed copies.)</i></font>
+</center>
+
+
+<p>
+
+<center>
+<b>Selection of a union of hyperslabs in a memory dataset</b><br>
+<font size=-1>Blank cells in this figure actually contain values written 
+when the dataset was initialized.</font>
+<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=345>
+<TR>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">
+<CODE><P>10</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">
+<CODE><P>11</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">
+<CODE><P>12</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+<TR>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">
+<CODE><P>18</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#88FF88">
+<CODE><P>19</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#88FF88">
+<CODE><P>20</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>21</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44" border=1>
+<CODE><P>22</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+<TR>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#44FFFF">
+<B><CODE><P>59</B></CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#88FF88">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#88FF88">
+<B><CODE><P>61</B></CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+<TR>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>27</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>28</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>29</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>30</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+<TR>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>35</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>36</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<B><CODE><P>67</B></CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>37</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>38</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+<TR>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>43</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>44</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>45</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1 bgcolor="#FFFF44">
+<CODE><P>46</CODE></TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+<TR>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+<TD WIDTH="8%" VALIGN="TOP" HEIGHT=1>&nbsp;</TD>
+</TR>
+</TABLE>
+<font size=-1><i>(Note: The above table highlights hyperslab selections 
+with green, blue, and yellow<br> shading.  This shading may not 
+appear properly in black-and-white printed copies.)</i></font>
+</center>
+
+
+<p>
+The following lines of code show the required steps.
+<p>
+First obtain the dataspace identifier for the dataset in the file.
+
+<pre>
+    /*
+     * Get dataspace of the open dataset.
+     */  
+    fid = H5Dget_space(dataset);
+</pre>
+
+Then select the hyperslab with the size 3x4 and 
+the left upper corner at the position (1,2):
+
+<pre>
+    /*
+     * Select first hyperslab for the dataset in the file. The following
+     * elements are selected:
+     *                     10  0 11 12
+     *                     18  0 19 20
+     *                      0 59  0 61
+     *   
+     */ 
+    start[0] = 1; start[1] = 2;
+    block[0] = 1; block[1] = 1;
+    stride[0] = 1; stride[1] = 1;
+    count[0]  = 3; count[1]  = 4;
+    ret = H5Sselect_hyperslab(fid, H5S_SELECT_SET, start, stride, count, block); 
+</pre>
+
+Now select the second hyperslab with the size 6x5 at the position (2,4), 
+and create the union with the first hyperslab.
+
+<pre>
+    /*
+     * Add second selected hyperslab to the selection.
+     * The following elements are selected:
+     *                    19 20  0 21 22
+     *                     0 61  0  0  0
+     *                    27 28  0 29 30
+     *                    35 36 67 37 38
+     *                    43 44  0 45 46
+     *                     0  0  0  0  0
+     * Note that two hyperslabs overlap. Common elements are:
+     *                                              19 20
+     *                                               0 61
+     */
+    start[0] = 2; start[1] = 4;
+    block[0] = 1; block[1] = 1;
+    stride[0] = 1; stride[1] = 1;
+    count[0]  = 6; count[1]  = 5;
+    ret = H5Sselect_hyperslab(fid, H5S_SELECT_OR, start, stride, count, block);
+</pre>
+ 
+Note that when we add the selected hyperslab to the union, the 
+second argument to the <code>H5Sselect_hyperslab</code> function 
+has to be <code>H5S_SELECT_OR</code> instead of <code>H5S_SELECT_SET</code>. 
+Using <code>H5S_SELECT_SET</code> would reset the selection to 
+the second hyperslab.
+<p>
+Now define the memory dataspace and select the union of the hyperslabs 
+in the memory dataset.
+
+<pre>
+    /*
+     * Create memory dataspace.
+     */
+    mid = H5Screate_simple(MSPACE_RANK, mdim, NULL);
+     
+    /*
+     * Select two hyperslabs in memory. Hyperslabs has the same
+     * size and shape as the selected hyperslabs for the file dataspace.
+     */
+    start[0] = 0; start[1] = 0;
+    block[0] = 1; block[1] = 1;
+    stride[0] = 1; stride[1] = 1;
+    count[0]  = 3; count[1]  = 4;
+    ret = H5Sselect_hyperslab(mid, H5S_SELECT_SET, start, stride, count, block);     
+    start[0] = 1; start[1] = 2;
+    block[0] = 1; block[1] = 1;
+    stride[0] = 1; stride[1] = 1;
+    count[0]  = 6; count[1]  = 5;
+    ret = H5Sselect_hyperslab(mid, H5S_SELECT_OR, start, stride, count, block);
+</pre>
+     
+Finally we can read the selected data from the file dataspace to the selection
+in memory with one call to the <code>H5Dread</code> function.
+
+<pre>    ret = H5Dread(dataset, H5T_NATIVE_INT, mid, fid, H5P_DEFAULT, matrix_out);
+</pre>
+
+<P>
+<A HREF="Intro/IntroExamples.html#WriteSelected" target="ExampleWin">Example 3</a> 
+includes this code along with the previous selection example.
+
+
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+</FONT><h3><A NAME="Intro-PMCreateVariableLength">Creating variable-length datatypes</A></h3>
+
+Variable-length (VL) datatypes are sequences of an existing datatype
+(atomic, VL, or compound) which are not fixed in length from one dataset location
+to another.  In essence, they are similar to C character strings -- a sequence of 
+a type which is pointed to by a particular type of <em>pointer</em> -- although 
+they are implemented more closely to FORTRAN strings by including an explicit 
+length in the pointer instead of using a particular value to terminate the 
+sequence.
+
+<p>
+VL datatypes are useful to the scientific community in many different ways,
+some of which are listed below:
+<ul>
+    <li>Ragged arrays: Multi-dimensional ragged arrays can be implemented with
+        the last (fastest changing) dimension being ragged by using a
+        VL datatype as the type of the element stored. (Or as a field in a
+        compound datatype.)
+    <li>Fractal arrays: If a compound datatype has a VL field of another compound
+        type with VL fields (a <em>nested</em> VL datatype), this can be used to
+        implement ragged arrays of ragged arrays, to whatever nesting depth is
+        required for the user.
+    <li>Polygon lists: A common storage requirement is to efficiently store arrays
+        of polygons with different numbers of vertices.  VL datatypes can be
+        used to efficiently and succinctly describe an array of polygons with
+        different numbers of vertices.
+    <li>Character strings: Perhaps the most common use of VL datatypes will be to
+        store C-like VL character strings in dataset elements or as attributes
+        of objects.
+    <li>Indices: An array of VL object references could be used as an index to
+        all the objects in a file which contain a particular sequence of
+        dataset values. Perhaps an array something like the following:
+        <pre>
+            Value1: Object1, Object3,  Object9
+            Value2: Object0, Object12, Object14, Object21, Object22
+            Value3: Object2
+            Value4: &lt;none&gt;
+            Value5: Object1, Object10, Object12
+                .
+                .
+        </pre>
+    <li>Object Tracking: An array of VL dataset region references can be used as
+        a method of tracking objects or features appearing in a sequence of
+        datasets.  Perhaps an array of them would look like:
+        <pre>
+            Feature1: Dataset1:Region,  Dataset3:Region,  Dataset9:Region
+            Feature2: Dataset0:Region,  Dataset12:Region, Dataset14:Region,
+                      Dataset21:Region, Dataset22:Region
+            Feature3: Dataset2:Region
+            Feature4: &lt;none&gt;
+            Feature5: Dataset1:Region,  Dataset10:Region, Dataset12:Region
+                .
+                .
+        </pre>
+</ul>
+
+
+<h4>Variable-length datatype memory management</h4>
+
+With each element possibly being of different sequence lengths for a
+dataset with a VL datatype, the memory for the VL datatype must be dynamically
+allocated.  Currently there are two methods of managing the memory for 
+VL datatypes: the standard C malloc/free memory allocation routines or a method
+of calling user-defined memory management routines to allocate or free memory.
+Since the memory allocated when reading (or writing) may be complicated to
+release, an HDF5 routine is provided to traverse a memory buffer and free the
+VL datatype information without leaking memory.
+
+
+<h5>Variable-length datatypes cannot be divided</h5>
+
+VL datatypes are designed so that they cannot be subdivided by the library
+with selections, etc.  This design was chosen due to the complexities in
+specifying selections on each VL element of a dataset through a selection API
+that is easy to understand.  Also, the selection APIs work on dataspaces, not
+on datatypes.  At some point in time, we may want to create a way for
+dataspaces to have VL components to them and we would need to allow selections
+of those VL regions, but that is beyond the scope of this document.
+
+
+<h5>What happens if the library runs out of memory while reading?</h5>
+
+It is possible for a call to <code>H5Dread</code> to fail while reading in 
+VL datatype information if the memory required exceeds that which is available.  
+In this case, the <code>H5Dread</code> call will fail gracefully and any 
+VL data which has been allocated prior to the memory shortage will be returned 
+to the system via the memory management routines detailed below.  
+It may be possible to design a <em>partial read</em> API function at a 
+later date, if demand for such a function warrants.
+
+
+<h5>Strings as variable-length datatypes</h5>
+
+Since character strings are a special case of VL data that is implemented
+in many different ways on different machines and in different programming 
+languages, they are handled somewhat differently from other VL datatypes in HDF5.
+
+<p>
+HDF5 has native VL strings for each language API, which are stored the
+same way on disk, but are exported through each language API in a natural way
+for that language.  When retrieving VL strings from a dataset, users may choose
+to have them stored in memory as a native VL string or in HDF5's <code>hvl_t</code> 
+struct for VL datatypes.
+
+<p>
+VL strings may be created in one of two ways: by creating a VL datatype with
+a base type of <code>H5T_NATIVE_ASCII</code>, <code>H5T_NATIVE_UNICODE</code>, 
+etc., or by creating a string datatype and setting its length to 
+<code>H5T_VARIABLE</code>.  The second method is used to access 
+native VL strings in memory.  The library will convert between the two types, 
+but they are stored on disk using different datatypes and have different 
+memory representations.
+
+<p>
+Multi-byte character representations, such as UNICODE or <em>wide</em> 
+characters in C/C++, will need the appropriate character and string datatypes 
+created so that they can be described properly through the datatype API.  
+Additional conversions between these types and the current ASCII characters 
+will also be required.
+
+<p>
+Variable-width character strings (which might be compressed data or some
+other encoding) are not currently handled by this design.  We will evaluate
+how to implement them based on user feedback.
+
+
+<h4>Variable-length datatype APIs</h4>
+
+<h5>Creation</h5>
+
+VL datatypes are created with the <code>H5Tvlen_create()</code> function 
+as follows:
+<dl>
+    <dd><em>type_id</em> = <code>H5Tvlen_create</code>(<em>hid_t</em> <code>base_type_id</code>);
+</dl>
+
+<p>
+The base datatype will be the datatype that the sequence is composed of,
+characters for character strings, vertex coordinates for polygon lists, etc.
+The base datatype specified for the VL datatype can be of any HDF5 datatype,
+including another VL datatype, a compound datatype, or an atomic datatype.
+
+
+<h5>Querying base datatype of VL datatype</h5>
+
+It may be necessary to know the base datatype of a VL datatype before 
+memory is allocated, etc.  The base datatype is queried with the 
+<code>H5Tget_super()</code> function, described in the H5T documentation.
+
+
+<h5>Querying minimum memory required for VL information</h5>
+
+It order to predict the memory usage that <code>H5Dread</code> may need 
+to allocate to store VL data while reading the data, the 
+<code>H5Dget_vlen_size()</code> function is provided:
+<dl>
+    <dd><em>herr_t</em> 
+        <code>H5Dvlen_get_buf_size</code>(<em>hid_t</em> <code>dataset_id</code>, 
+        <em>hid_t</em> <code>type_id</code>,
+        <em>hid_t</em> <code>space_id</code>, 
+        <em>hsize_t</em> *<code>size</code>) 
+</dl>
+
+<p>
+This routine checks the number of bytes required to store the VL data from
+the dataset, using the <code>space_id</code> for the selection in the dataset 
+on disk and the <code>type_id</code> for the memory representation of the 
+VL data in memory.  The *<code>size</code> value is modified according to 
+how many bytes are required to store the VL data in memory.
+
+
+<h5>Specifying how to manage memory for the VL datatype</h5>
+
+The memory management method is determined by dataset transfer properties
+passed into the <code>H5Dread</code> and <code>H5Dwrite</code> functions 
+with the dataset transfer property list.  
+
+<p>
+Default memory management is set by using <code>H5P_DEFAULT</code> 
+for the dataset transfer property list identifier.
+If <code>H5P_DEFAULT</code> is used with <code>H5Dread</code>,
+the system <code>malloc</code> and <code>free</code> calls
+will be used for allocating and freeing memory.
+In such a case,  <code>H5P_DEFAULT</code> should also be passed
+as the property list identifier to <code>H5Dvlen_reclaim</code>.
+
+<p>
+The rest of this subsection is relevant only to those who choose 
+<i>not</i> to use default memory management.
+
+<p>
+The user can choose whether to use the 
+system <code>malloc</code> and <code>free</code> calls  or
+user-defined, or custom, memory management functions.
+If user-defined memory management functions are to be used, 
+the memory allocation and free routines must be defined via 
+<code>H5Pset_vlen_mem_manager()</code>, as follows:
+<dl>
+    <dd><em>herr_t</em> 
+        <code>H5Pset_vlen_mem_manager</code>(<em>hid_t</em> <code>plist_id</code>,
+        <em>H5MM_allocate_t</em> <code>alloc</code>, 
+        <em>void</em> *<code>alloc_info</code>,
+        <em>H5MM_free_t</em> <code>free</code>, 
+        <em>void</em> *<code>free_info</code>)
+</dl>
+
+
+<p>
+The <code>alloc</code> and <code>free</code> parameters 
+identify the memory management routines to be used.
+If the user has defined custom memory management routines,
+<code>alloc</code> and/or <code>free</code> should be set to make 
+those routine calls (i.e., the name of the routine is used as 
+the value of the parameter);  
+if the user prefers to use the system's <code> malloc</code>
+and/or <code>free</code>, the <code>alloc</code> and 
+<code>free</code> parameters, respectively, should be set to 
+<code> NULL</code>
+<p>
+The prototypes for the user-defined functions would appear as follows:
+<dl>
+    <dd><code>typedef</code> <em>void</em> 
+        *(*<code>H5MM_allocate_t</code>)(<em>size_t</em> <code>size</code>, 
+        <em>void</em> *<code>info</code>) ;
+    <dd><code>typedef</code> <em>void</em> 
+        (*<code>H5MM_free_t</code>)(<em>void</em> *<code>mem</code>, 
+        <em>void</em> *<code>free_info</code>) ;
+</dl>
+
+<p>
+The <code>alloc_info</code> and <code>free_info</code> parameters can be 
+used to pass along any required information to the user's memory management 
+routines.
+
+<p>
+In summary, if the user has defined custom memory management 
+routines, the name(s) of the routines are passed in the 
+<code>alloc</code> and <code>free</code> parameters and the 
+custom routines' parameters are passed in the 
+<code>alloc_info</code> and <code>free_info</code> parameters.
+If the user wishes to use the system <code> malloc</code> and 
+<code>free</code> functions, the <code>alloc</code> and/or 
+<code>free</code> parameters are set to <code> NULL</code> 
+and the  <code>alloc_info</code> and <code>free_info</code> 
+parameters are ignored.
+
+<h5>Recovering memory from VL buffers read in</h5>
+
+The complex memory buffers created for a VL datatype may be reclaimed with
+the <code>H5Dvlen_reclaim()</code> function call, as follows:
+<dl>
+    <dd><em>herr_t</em> 
+        <code>H5Dvlen_reclaim</code>(<em>hid_t</em> <code>type_id</code>, 
+        <em>hid_t</em> <code>space_id</code>, 
+        <em>hid_t</em> <code>plist_id</code>,
+        <em>void</em> *<code>buf</code>);
+</dl>
+
+<p>
+The <code>type_id</code> must be the datatype stored in the buffer, 
+<code>space_id</code> describes the selection for the memory buffer 
+to free the VL datatypes within, 
+<code>plist_id</code> is the dataset transfer property list which 
+was used for the I/O transfer to create the buffer, and 
+<code>buf</code> is the pointer to the buffer to free the VL memory within.  
+The VL structures (<code>hvl_t</code>) in the user's buffer are 
+modified to zero out the VL information after it has been freed.
+
+<p>
+If nested VL datatypes were used to create the buffer, 
+this routine frees them from the bottom up, 
+releasing all the memory without creating memory leaks.
+
+<P>
+<A HREF="Intro/IntroExamples.html#VariableLength" target="ExampleWin">Example 4</a>
+creates a dataset with the variable-length datatype using user-defined 
+functions for memory management.
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<h3><A NAME="Intro-PMCreateArray">Creating array datatypes</A></h3>
+
+The array class of datatypes, <code>H5T_ARRAY</code>, allows the 
+construction of true, homogeneous, multi-dimensional arrays.  
+Since these are homogeneous arrays, each element of the array will be 
+of the same datatype, designated at the time the array is created.
+
+<p>
+Arrays can be nested.
+Not only is an array datatype used as an element of an HDF5 dataset,
+but the elements of an array datatype may be of any datatype, 
+including another array datatype.
+
+<p>
+Array datatypes cannot be subdivided for I/O; the entire array must 
+be transferred from one dataset to another. 
+
+<p>
+Within certain limitations, outlined in the next paragraph, array datatypes 
+may be <em>N</em>-dimensional and of any dimension size.  
+Unlimited dimensions, however, are not supported. 
+Functionality similar to unlimited dimension arrays is available through 
+the use of variable-length datatypes.
+
+<p>
+The maximum number of dimensions, i.e., the maximum rank, of an array
+datatype is specified by the HDF5 library constant <code>H5S_MAX_RANK</code>.
+The minimum rank is 1 (one).
+All dimension sizes must be greater than 0 (zero). 
+
+<p>
+One array dataype may only be converted to another array datatype 
+if the number of dimensions and the sizes of the dimensions are equal 
+and the datatype of the first array's elements can be converted 
+to the datatype of the second array's elements.
+
+<h4>Array datatype APIs</h4>
+
+There are three functions that are specific to array datatypes: 
+one, <code>H5Tarray_create</code>, for creating an array datatype, 
+and two, <code>H5Tget_array_ndims</code> and <code>H5Tget_array_dims</code>,
+for working with existing array datatypes.
+
+<h5>Creating</h5>
+
+The function <code>H5Tarray_create</code> creates a new array datatype object.
+Parameters specify 
+  <ul>
+  <li>the base datatype of each element of the array,
+  <li>the rank of the array, i.e., the number of dimensions, 
+  <li>the size of each dimension, and
+  <li>the dimension permutation of the array, i.e., whether the 
+      elements of the array are listed in C or FORTRAN order.
+      (<b>Note:</b> The permutation feature is not implemented in Release 1.4.)
+  </ul>
+
+<dir>
+    <em>hid_t</em> <code>H5Tarray_create</code>(
+                   <em>hid_t</em> <code>base</code>,
+                   <em>int</em> <code>rank</code>,
+                   <em>const hsize_t</em> <code>dims[/*rank*/]</code>,
+                   <em>const int</em> <code>perm[/*rank*/]</code>
+            )
+</dir>
+
+<h5>Working with existing array datatypes</h5>
+
+When working with existing arrays, one must first determine the 
+the rank, or number of dimensions, of the array.
+
+<p>
+The function <code>H5Tget_array_ndims</code> returns the rank of a
+specified array datatype.
+
+<dir>
+    <em>int</em> <code>H5Tget_array_ndims</code>(
+                 <em>hid_t</em> <code>adtype_id</code>
+            )
+</dir>
+
+In many instances, one needs further information.
+The function <code>H5Tget_array_dims</code> retrieves the 
+permutation of the array and the size of each dimension.
+(<b>Note:</b> The permutation feature is not implemented in Release 1.4.)
+
+<dir>
+    <em>int</em> <code>H5Tget_array_dims</code>(
+                 <em>hid_t</em> <code>adtype_id</code>,
+                 <em>hsize_t *</em><code>dims[]</code>,
+                 <em>int *</em><code>perm[]</code>
+            )
+</dir>
+
+
+<p>
+<A HREF="Intro/IntroExamples.html#Array" target="ExampleWin">Example 5</a> 
+creates an array datatype and a dataset containing elements of the 
+array datatype in an HDF5 file.  It then writes the dataset to the file.  
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+</FONT><h3><A NAME="Intro-PMCreateCompound">Creating compound datatypes</A></h3>
+<B><P>Properties of compound datatypes. </B>A compound datatype is similar to a struct in C or a common block in Fortran. It is a collection of one or more atomic types or small arrays of such types. To create and use of a compound datatype you need to refer to various <i>properties</i> of the data compound datatype:
+
+<UL>
+<LI>It is of class <i>compound</i><I>.</I> 
+<LI>It has a fixed total <i>size</i>, in bytes. 
+<LI>It consists of zero or more <i>members</i> (defined in any order) with unique names and which occupy non-overlapping regions within the datum. 
+<LI>Each member has its own <i>datatype</i>. 
+<LI>Each member is referenced by an <i>index number</i> between zero and N-1, where N is the number of members in the compound datatype. 
+<LI>Each member has a <i>name</i> which is unique among its siblings in a compound datatype. 
+<LI>Each member has a fixed <i>byte offset</i>, which is the first byte (smallest byte address) of that member in a compound datatype. 
+<LI>Each member can be a small array of up to four dimensions.</UL>
+
+<FONT FACE="Times"><P>Properties of members of a compound datatype are defined when the member is added to the compound type and cannot be subsequently modified.
+<B><P>Defining compound datatypes. </B>Compound datatypes must be built out of other datatypes. First, one creates an empty compound datatype and specifies its total size. Then members are added to the compound datatype in any order.
+<I><P>Member names. </I>Each member must have a descriptive name, which is the key used to uniquely identify the member within the compound datatype. A member name in an HDF5 datatype does not necessarily have to be the same as the name of the corresponding member in the C struct in memory, although this is often the case. Nor does one need to define all members of the C struct in the HDF5 compound datatype (or vice versa). 
+<I><P>Offsets. </I>Usually a C struct will be defined to hold a data point in memory, and the offsets of the members in memory will be the offsets of the struct members from the beginning of an instance of the struct. The library defines the macro to compute the offset of a member within a struct:
+</FONT><CODE><br>&nbsp;&nbsp;HOFFSET(s,m)<FONT SIZE=5> </FONT></CODE>
+<br><FONT FACE="Times">This macro computes the offset of member </FONT><FONT FACE="Courier"><EM>m</EM> </FONT><FONT FACE="Times">within a struct variable <EM>s</EM>. 
+<P>Here is an example in which a compound datatype is created to describe complex numbers whose type is defined by the </FONT><CODE>complex_t</CODE><FONT FACE="Times" SIZE=2> </FONT><FONT FACE="Times">struct. 
+</FONT><CODE><PRE>typedef struct {
+   double re;   /*real part */
+   double im;   /*imaginary part */
+} complex_t;
+
+complex_t tmp;  /*used only to compute offsets */
+hid_t complex_id = H5Tcreate (H5T_COMPOUND, sizeof tmp);
+H5Tinsert (complex_id, "real", HOFFSET(tmp,re),
+           H5T_NATIVE_DOUBLE);
+H5Tinsert (complex_id, "imaginary", HOFFSET(tmp,im),
+           H5T_NATIVE_DOUBLE);</PRE>
+</CODE><P><A HREF="Intro/IntroExamples.html#Compound" target="ExampleWin">Example 6</A><FONT FACE="Times"> shows how to create a compound datatype, write an array that has the compound datatype to the file, and read back subsets of the members.
+</FONT>
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<h3><A NAME="Intro-PMCreateExtendible">Creating and writing extendible and chunked datasets</A></h3>
+<FONT FACE="Times"><P>An <I>extendible</I> dataset is one whose dimensions can grow. In HDF5, it is possible to define a dataset to have certain initial dimensions, then later to increase the size of any of the initial dimensions. 
+<P>For example, you can create and store the following 3x3 HDF5 dataset:
+</FONT><PRE>     1 1 1
+     1 1 1 
+     1 1 1 </PRE>
+<FONT FACE="Times"><P>then later to extend this into a 10x3 dataset by adding 7 rows, such as this:
+</FONT><PRE>     1 1 1 
+     1 1 1 
+     1 1 1 
+     2 2 2
+     2 2 2
+     2 2 2
+     2 2 2
+     2 2 2
+     2 2 2
+     2 2 2</PRE>
+<FONT FACE="Times"><P>then further extend it to a 10x5 dataset by adding two columns, such as this:
+</FONT><PRE>     1 1 1 3 3 
+     1 1 1 3 3 
+     1 1 1 3 3 
+     2 2 2 3 3
+     2 2 2 3 3
+     2 2 2 3 3
+     2 2 2 3 3
+     2 2 2 3 3
+     2 2 2 3 3
+     2 2 2 3 3</PRE>
+<FONT FACE="Times"><P>HDF 5 requires you to use <I>chunking</I> in order to define extendible datasets. Chunking makes it possible to extend datasets efficiently, without having to reorganize storage excessively. 
+<P>The following operations are required in order to write an extendible dataset:
+<OL>
+
+<LI>Declare the dataspace of the dataset to have <I>unlimited dimensions</I> for all dimensions that might eventually be extended.
+<LI>Set dataset creation properties to enable chunking and create a dataset.
+<LI>Extend the size of the dataset.</OL>
+
+<P>For example, suppose we wish to create a dataset similar to the one shown above. We want to start with a 3x3 dataset, then later extend it in both directions. 
+<B><P>Declaring unlimited dimensions. </B>We could declare the dataspace to have unlimited dimensions with the following code, which uses the predefined constant </FONT><CODE>H5S_UNLIMITED</CODE><FONT FACE="Times"> to specify unlimited dimensions.
+</FONT><PRE>hsize_t dims[2] = { 3, 3}; /* dataset dimensions
+at the creation time */ 
+hsize_t maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};
+/*
+ * Create the data space with unlimited dimensions. 
+ */
+dataspace = H5Screate_simple(RANK, dims, maxdims); </PRE>
+<B><P>Enabling chunking.  </B>We can then set the dataset storage layout properties to enable chunking.  We do this using the routine <CODE>H5Pset_chunk</CODE><FONT SIZE=4>:
+</FONT><PRE>hid_t cparms; 
+hsize_t chunk_dims[2] ={2, 5};
+/* 
+ * Modify dataset creation properties to enable chunking.
+ */
+cparms = H5Pcreate (H5P_DATASET_CREATE);
+status = H5Pset_chunk( cparms, RANK, chunk_dims);
+</PRE>
+
+Then create a dataset.
+<pre>
+/*
+ * Create a new dataset within the file using cparms
+ * creation properties.
+ */
+dataset = H5Dcreate(file, DATASETNAME, H5T_NATIVE_INT, dataspace,
+                 cparms);
+</pre>
+
+<B><P>Extending dataset size.  </B>Finally, when we want to extend the size of the dataset, we invoke <CODE>H5Dextend </CODE>to extend the size of the dataset.  In the following example, we extend the dataset along the first dimension, by seven rows, so that the new dimensions are <CODE>&lt;10,3&gt;</CODE>:
+<PRE>/*
+ * Extend the dataset. Dataset becomes 10 x 3.
+ */
+dims[0] = dims[0] + 7;
+size[0] = dims[0]; 
+size[1] = dims[1]; 
+status = H5Dextend (dataset, size);</PRE>
+<FONT FACE="Courier" SIZE=2><P>&nbsp;
+</FONT><P><A HREF="Intro/IntroExamples.html#CreateExtendWrite" target="ExampleWin">Example 7</A> shows how to create a 3x3 extendible dataset, write the dataset, extend the dataset to 10x3, write the dataset again, extend it again to 10x5, write the dataset again.
+<P><A HREF="Intro/IntroExamples.html#ReadExtended" target="ExampleWin">Example 8</A> shows how to read the data written by Example 7.  
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<h3><A NAME="Intro-PMWorkGroups">Working with groups in a file</A></h3>
+<P>Groups provide a mechanism for organizing meaningful and extendible sets of datasets within an HDF5 file. The H5G API contains routines for working with groups. 
+<B><P>Creating a group. </B>To create a group, use 
+<CODE>H5Gcreate</CODE>.  For example, the following code 
+creates a group called <code>Data</code> in the root group.
+<pre>
+ /*
+  *  Create a group in the file.
+  */
+ grp = H5Gcreate(file, "/Data", 0);
+</pre>
+A group may be created in another group by providing the 
+absolute name of the group to the <code>H5Gcreate</code> 
+function or by specifying its location.  For example, 
+to create the group <code>Data_new</code> in the 
+<code>Data</code> group, one can use the following sequence 
+of calls:
+<pre>
+ /*
+  * Create group "Data_new" in the group "Data" by specifying
+  * absolute name of the group.
+  */
+ grp_new = H5Gcreate(file, "/Data/Data_new", 0);
+</pre>
+or
+<pre>
+ /*
+  * Create group "Data_new" in the "Data" group.
+  */
+ grp_new = H5Gcreate(grp, "Data_new", 0);
+</pre>
+Note that the group identifier <code>grp</code> is used 
+as the first parameter in the <code>H5Gcreate</code> function 
+when the relative name is provided.   
+<p>
+The third parameter in <code>H5Gcreate</code> optionally 
+specifies how much file space to reserve to store the names 
+that will appear in this group.  If a non-positive
+value is supplied, then a default size is chosen.
+<p>
+<code>H5Gclose</code> closes the group and releases the 
+group identifier.
+<p>
+
+<b>Creating a dataset in a particular group.</b>
+As with groups, a dataset can be created in a particular 
+group by specifying its absolute name as illustrated in 
+the following example:
+
+<pre> 
+ /*
+  * Create the dataset "Compressed_Data" in the group using the 
+  * absolute name. The dataset creation property list is modified 
+  * to use GZIP compression with the compression effort set to 6.
+  * Note that compression can be used only when the dataset is 
+  * chunked.
+  */
+ dims[0] = 1000;
+ dims[1] = 20;
+ cdims[0] = 20;
+ cdims[1] = 20;
+ dataspace = H5Screate_simple(RANK, dims, NULL);
+ plist     = H5Pcreate(H5P_DATASET_CREATE);
+             H5Pset_chunk(plist, 2, cdims);
+             H5Pset_deflate( plist, 6);
+ dataset = H5Dcreate(file, "/Data/Compressed_Data", H5T_NATIVE_INT,
+                     dataspace, plist);
+</pre>
+A relative dataset name may also be used when a dataset is 
+created.  First obtain the identifier of the group in which 
+the dataset is to be created.  Then create the dataset
+with <code>H5Dcreate</code> as illustrated in the following 
+example:
+<pre>
+ /* 
+  * Open the group.
+  */
+ grp = H5Gopen(file, "Data");
+
+ /*
+  * Create the dataset "Compressed_Data" in the "Data" group
+  * by providing a group identifier and a relative dataset 
+  * name as parameters to the H5Dcreate function.
+  */
+ dataset = H5Dcreate(grp, "Compressed_Data", H5T_NATIVE_INT,
+                     dataspace, plist);
+</pre>
+<p>
+
+<b>Accessing an object in a group.</b>
+Any object in a group can be accessed by its absolute or 
+relative name.  The following lines of code show how to use 
+the absolute name to access the dataset 
+<code>Compressed_Data</code> in the group <code>Data</code> 
+created in the examples above:
+<pre>
+  /*
+   * Open the dataset "Compressed_Data" in the "Data" group. 
+   */
+  dataset = H5Dopen(file, "/Data/Compressed_Data");
+</pre>
+The same dataset can be accessed in another manner.  First
+access the group to which the dataset belongs, then open 
+the dataset. 
+<pre>
+  /*
+   * Open the group "data" in the file.
+   */
+  grp  = H5Gopen(file, "Data");
+ 
+  /*
+   * Access the "Compressed_Data" dataset in the group.
+   */
+  dataset = H5Dopen(grp, "Compressed_Data");
+</pre>
+
+<p>
+<A HREF="Intro/IntroExamples.html#CreateGroups" target="ExampleWin">Example 9</A> 
+shows how to create a group in a file and a 
+dataset in a group.  It uses the iterator function 
+<code>H5Giterate</code> to find the names of the objects
+in the root group, and <code>H5Glink</code> and <code>H5Gunlink</code>
+to create a new group name and delete the original name.
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<h3><A NAME="Intro-PMWorkAttributes">Working with attributes</A></h3>
+<P>Think of an attribute as a small datasets that is attached to a normal dataset or group.  The H5A API contains routines for working with attributes.  Since attributes share many of the characteristics of datasets, the programming model for working with attributes is analogous in many ways to the model for working with datasets.  The primary differences are that an attribute must be attached to a dataset or a group, and subsetting operations cannot be performed on attributes.
+<B><P>To create an attribute </B>belonging to a particular dataset or group<B>, </B>first create a dataspace for the attribute with the call to <CODE>H5Screate</CODE>, then create the attribute using <CODE>H5Acreate</CODE>.  For example, the following code creates an attribute called <CODE> Integer_attribute </CODE>that is a member of a dataset whose identifier is <CODE>dataset</CODE>. The attribute identifier is <CODE>attr2</CODE>.<CODE> H5Awrite</CODE> then sets the value of the attribute of that of the integer variable <CODE>point</code>. <code>H5Aclose</code> <FONT FACE="Times">then releases the attribute identifier.
+</CODE>
+</FONT>
+<pre>
+int point = 1;                         /* Value of the scalar attribute */ 
+
+/*
+ * Create scalar attribute.
+ */
+aid2  = H5Screate(H5S_SCALAR);
+attr2 = H5Acreate(dataset, "Integer attribute", H5T_NATIVE_INT, aid2,
+                  H5P_DEFAULT);
+
+/*
+ * Write scalar attribute.
+ */
+ret = H5Awrite(attr2, H5T_NATIVE_INT, &amp;point); 
+
+/*
+ * Close attribute dataspace.
+ */
+ret = H5Sclose(aid2); 
+
+/*
+ * Close attribute.
+ */
+ret = H5Aclose(attr2); 
+</pre>
+<CODE><P>&nbsp;
+</CODE><B><P>To read a scalar attribute whose name and datatype are known</B>, first open the attribute using <CODE>H5Aopen_name</CODE>, then use H5Aread to get its value.  For example the following reads a scalar attribute called <CODE>Integer_attribute</CODE> whose datatype is a native integer, and whose parent dataset has the identifier <CODE>dataset</CODE>.
+<pre>
+/*
+ * Attach to the scalar attribute using attribute name, then read and 
+ * display its value.
+ */
+attr = H5Aopen_name(dataset,"Integer attribute");
+ret  = H5Aread(attr, H5T_NATIVE_INT, &amp;point_out);
+printf("The value of the attribute \"Integer attribute\" is %d \n", point_out); 
+ret =  H5Aclose(attr);
+</pre>
+</FONT><B><P>Reading an attribute whose characteristics are not known. </B>It may be necessary to query a<FONT FACE="Times"> file to obtain information about an attribute, namely its name, datatype, rank and dimensions. The following code opens an attribute by its index value using </FONT><CODE>H5Aopen_index</CODE><FONT FACE="Times">, then reads in information about its datatype.
+</FONT>
+<pre>
+/*
+ * Attach to the string attribute using its index, then read and display the value.
+ */
+attr =  H5Aopen_idx(dataset, 2);
+atype = H5Tcopy(H5T_C_S1);
+        H5Tset_size(atype, 4);
+ret   = H5Aread(attr, atype, string_out);
+printf("The value of the attribute with the index 2 is %s \n", string_out);
+</pre>
+<code>
+</CODE><P>In practice, if the characteristics of attributes are not known, 
+the code involved in accessing and processing the attribute can be quite 
+complex.  For this reason, HDF5 includes a function called 
+<CODE>H5Aiterate</CODE>, which applies a user-supplied function to each 
+of a set of attributes.  The user-supplied function can contain the code 
+that interprets, accesses and processes each attribute. 
+<p>
+<a href="Intro/IntroExamples.html#ReadWriteAttributes" target="ExampleWin">Example 10</a> <A NAME="_Toc429885323">illustrates the use of the <code>H5Aiterate</code> function, as well as the other attribute examples described above.</A> 
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<h3><A NAME="Intro-PMWorkRefObjects">Working with references to objects</A></h3>
+
+In HDF5, objects (i.e. groups, datasets, and named datatypes) are usually 
+accessed by name. This access method was discussed in previous sections. 
+There is another way to access stored objects -- by reference.
+<P>
+An object reference is based on the relative file address of the object header
+in the file and is constant for the life of the object. Once a reference to
+an object is created and stored in a dataset in the file, it can be used
+to dereference the object it points to. References are handy for creating
+a file index or for grouping related objects by storing references to them in
+one dataset.
+<P>
+
+<h4>Creating and storing references to objects</h4>
+The following steps are involved in creating and storing file references
+to objects:
+<OL>
+<LI> Create the objects or open them if they already exist in the file.
+<LI> Create a dataset to store the objects' references.
+<LI> Create and store references to the objects in a buffer.
+<LI> Write a buffer with the references to the dataset.
+</OL>
+
+
+<h5>Programming example</h5>
+<a href="Intro/IntroExamples.html#CreateWriteRefObj" target="ExampleWin">Example 11</a> 
+creates a group and two datasets and a named datatype in the group. 
+References to these four objects are stored in the dataset in the 
+root group.  
+
+<p>
+<b>Notes:</b>
+Note the following elements of this example:
+<UL>
+<LI> The following code, 
+<PRE>
+    dataset = H5Dcreate ( fid1,"Dataset3",H5T_STD_REF_OBJ,sid1,H5P_DEFAULT );
+</PRE>
+  creates a dataset to store references. Notice that the 
+  <code>H5T_SDT_REF_OBJ</code> datatype is used to specify that 
+  references to objects will be stored. 
+  The datatype <code>H5T_STD_REF_DSETREG</code> is used to store the 
+  dataset region references and is be discussed later.
+<LI>The next few calls to the <code>H5Rcreate</code> function create 
+  references to the objects and store them in the buffer <I>wbuf</I>. 
+  The signature of the <code>H5Rcreate</code> function is:
+<PRE>
+   herr_t H5Rcreate ( void* buf, hid_t loc_id, const char *name, 
+                      H5R_type_t ref_type, hid_t space_id )    
+</PRE>
+<UL>
+    <LI> The first argument specifies the buffer to store the reference.
+    <LI> The second and third arguments specify the name of the referenced 
+         object.  In the example, the file identifier <I>fid1</I> and 
+         absolute name of the dataset <code>/Group1/Dataset1</code> 
+         identify the dataset. One could also use the group identifier 
+         of group <code>Group1</code> and the relative name of the dataset 
+         <code>Dataset1</code> to create the same reference.
+    <LI> The fourth argument specifies the type of the reference. 
+         The example uses references to the objects (<code>H5R_OBJECT</code>).
+         Another type of reference, reference to the dataset region 
+         (<code>H5R_DATASET_REGION</code>), is discussed later. 
+    <LI> The fifth argument specifies the space identifier. When references 
+         to the objects are created, it should be set to <code>-1</code>. 
+</UL>
+<LI>The <code>H5Dwrite</code> function writes a dataset with the 
+    references to the file. Notice that the <code>H5T_SDT_REF_OBJ</code>
+    datatype is used to describe the dataset's memory datatype.
+</UL>
+
+<b>Output file contents:</b>
+The contents of the <code>trefer1.h5</code> file created by this example 
+are as follows:
+<PRE>
+
+HDF5 "trefer1.h5" {
+GROUP "/" {
+   DATASET "Dataset3" {
+      DATATYPE { H5T_REFERENCE }
+      DATASPACE { SIMPLE ( 4 ) / ( 4 ) }
+      DATA {
+         DATASET 0:1696, DATASET 0:2152, GROUP 0:1320, DATATYPE 0:2268
+      }
+   }
+   GROUP "Group1" {
+      DATASET "Dataset1" {
+         DATATYPE { H5T_STD_U32LE }
+         DATASPACE { SIMPLE ( 4 ) / ( 4 ) }
+         DATA {
+            0, 3, 6, 9
+         }
+      }
+      DATASET "Dataset2" {
+         DATATYPE { H5T_STD_U8LE }
+         DATASPACE { SIMPLE ( 4 ) / ( 4 ) }
+         DATA {
+            0, 0, 0, 0
+         }
+      }
+      DATATYPE "Datatype1" {
+         H5T_STD_I32BE "a";
+         H5T_STD_I32BE "b";
+         H5T_IEEE_F32BE "c";
+      }
+   }
+}
+}
+
+</PRE>
+Notice how the data in  dataset <code>Dataset3</code> is described. 
+The two numbers with the colon in between represent a unique identifier 
+of the object. These numbers are constant for the life of the object.
+ 
+
+<h4>Reading references and accessing objects using references</h4>
+
+The following steps are involved:
+<OL>
+<LI> Open the dataset with the references and read them. 
+     The <code>H5T_STD_REF_OBJ</code> datatype must be used to 
+     describe the memory datatype.
+<LI> Use the read reference to obtain the identifier of the object the 
+     reference points to.
+<LI> Open the dereferenced object and perform the desired operations.
+<LI> Close all objects when the task is complete. 
+</OL>
+
+<h5>Programming example</h5>
+
+<a href="Intro/IntroExamples.html#ReadRefObj" target="ExampleWin">Example 12</a>
+opens and reads dataset <code>Dataset3</code> from the file created created 
+in Example 11. Then the program dereferences the references 
+to dataset <code>Dataset1</code>, the group and the named datatype,
+and opens those objects. 
+The program reads and displays the dataset's data, the group's comment, and 
+the number of members of the compound datatype.
+
+<p>
+<b>Output file contents:</b>
+The output of this program is as follows:
+
+<PRE>
+
+Dataset data : 
+ 0  3  6  9 
+
+Group comment is Foo! 
+ 
+Number of compound datatype members is 3 
+</PRE> 
+
+
+<p>
+<b>Notes:</b>
+Note the following elements of this example:
+
+<UL>
+<LI> The <code>H5Dread</code> function was used to read dataset 
+     <code>Dataset3</code> containing the references to the objects. 
+     The <code>H5T_STD_REF_OBJ</code> memory datatype was 
+     used to read references to memory.
+<LI> <code>H5Rdereference</code> obtains the object's identifier. 
+     The signature of this function is:
+<PRE>
+         hid_t H5Rdereference (hid_t datatset, H5R_type_t ref_type, void *ref)
+</PRE> 
+   <UL>
+    <LI> The first argument is an identifier of the dataset with the 
+         references.
+    <LI> The second argument specifies the reference type. 
+         <code>H5R_OBJECT</code> was used to specify a reference to an 
+         object. Another type, used to specifiy a reference to a dataset 
+         region and discussed later, is <code>H5R_DATASET_REGION</code>.
+    <LI> The third argument is a buffer to store the reference to be read.
+    <LI> The function returns an identifier of the object the reference 
+         points to.  In this simplified situation, the type that was
+         stored in the dataset is known. When the type of the object is 
+         unknown, <code>H5Rget_object_type</code> should be used to 
+         identify the type of object the reference points to. 
+    </UL>
+</UL>
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+
+
+<h3><A NAME="Intro-PMWorkRefRegions">Working with references to dataset regions</A></h3>
+
+A dataset region reference points to the dataset selection by storing the
+relative file address  of the dataset header and the global heap offset of
+the referenced selection.  The selection referenced is located by retrieving
+the coordinates of the areas in the selection from the global heap. This
+internal mechanism of storing and retrieving dataset selections is transparent
+to the user. A reference to the dataset selection (region) is constant for 
+the life of the dataset.
+
+<h4>Creating and storing references to dataset regions</h4>
+The following steps are involved in creating and storing references to
+the dataset regions:
+<OL>
+
+<LI> Create a dataset to store the dataset regions (selections).
+<P>
+<LI> Create selections in the dataset(s). Dataset(s) should already exist 
+   in the file.
+<P>
+<LI> Create references to the selections and store them in a buffer.
+<P>
+<LI> Write references to the dataset regions in the file.
+<P>
+<LI> Close all objects.
+</OL>
+
+<h5>Programming example</H5>
+
+<a href="Intro/IntroExamples.html#CreateWriteRefReg" target="ExampleWin">Example 13</a>
+creates a dataset in the file. Then it creates a dataset to store 
+references to the dataset regions (selections).
+The first selection is a 6 x 6 hyperslab. 
+The second selection is a point selection in the same dataset.
+References to both selections are created and stored in the buffer, 
+and then written to the dataset in the file.
+
+<p>
+<b>Notes:</b>
+Note the following elements of this example:
+<UL>
+<LI> The code, 
+<PRE>
+    dset1=H5Dcreate(fid1,"Dataset1",H5T_STD_REF_DSETREG,sid1,H5P_DEFAULT);
+</PRE>
+   creates a dataset to store references to the dataset(s) regions (selections).
+   Notice that the <code>H5T_STD_REF_DSETREG</code> datatype is used.
+
+<LI> This program uses hyperslab and point selections. The dataspace 
+   handle <I>sid2</I> is used for the calls to <code>H5Sselect_hyperslab</code>
+   and <code>H5Sselect_elements</code>.  The handle was created when dataset 
+   <code><b>Dataset2</b></code> was created and it describes the dataset's 
+   dataspace. It was not closed when the dataset was closed to decrease 
+   the number of function calls used in the example. 
+   In a real application program, one should open the dataset and determine 
+   its dataspace using the <code>H5Dget_space</code> function. 
+<LI> <code>H5Rcreate</code> is used to create a dataset region reference 
+   and store it in a buffer.  The signature of the function is:
+<PRE>
+     herr_t H5Rcreate(void *buf, hid_t loc_id, const char *name,
+                      H5R_type_t ref_type, hid_t space_id)
+</PRE>
+<UL>
+    <LI> The first argument specifies the buffer to store the reference.
+    <LI> The second and third arguments specify the name of the referenced 
+         dataset.  In the example, the file identifier <I>fid1</I> and the 
+         absolute name of the dataset <code><b>/Dataset2</b></code> were 
+         used to identify the dataset. The reference to the region of this 
+         dataset is stored in the buffer <I>buf</I>.  
+    
+    <LI> The fourth argument specifies the type of the reference. Since 
+       the example creates references to the dataset regions, the 
+       <code>H5R_DATASET_REGION</code> datatype is used. 
+    <LI> The fifth argument is a dataspace identifier of the referenced 
+       dataset. 
+</UL>
+</UL>
+
+<b>Output file contents:</b>
+The contents of the file <code>trefer2.h5</code> created by this program 
+are as follows:
+
+<PRE>
+HDF5 "trefer2.h5" {
+GROUP "/" {
+   DATASET "Dataset1" {
+      DATATYPE { H5T_REFERENCE }
+      DATASPACE { SIMPLE ( 4 ) / ( 4 ) }
+      DATA {
+         DATASET 0:744 {(2,2)-(7,7)}, DATASET 0:744 {(6,9), (2,2), (8,4), (1,6),
+          (2,8), (3,2), (0,4), (9,0), (7,1), (3,3)}, NULL, NULL
+      }
+   }
+   DATASET "Dataset2" {
+      DATATYPE { H5T_STD_U8LE }
+      DATASPACE { SIMPLE ( 10, 10 ) / ( 10, 10 ) }
+      DATA {
+         0, 3, 6, 9, 12, 15, 18, 21, 24, 27,
+         30, 33, 36, 39, 42, 45, 48, 51, 54, 57,
+         60, 63, 66, 69, 72, 75, 78, 81, 84, 87,
+         90, 93, 96, 99, 102, 105, 108, 111, 114, 117,
+         120, 123, 126, 129, 132, 135, 138, 141, 144, 147,
+         150, 153, 156, 159, 162, 165, 168, 171, 174, 177,
+         180, 183, 186, 189, 192, 195, 198, 201, 204, 207,
+         210, 213, 216, 219, 222, 225, 228, 231, 234, 237,
+         240, 243, 246, 249, 252, 255, 255, 255, 255, 255,
+         255, 255, 255, 255, 255, 255, 255, 255, 255, 255
+      }
+   }
+}
+}
+</PRE>
+Notice how raw data of the dataset with the dataset regions is displayed.
+Each element of the raw data consists of a reference to the dataset 
+(<code>DATASET  number1:number2</code>) and its selected region. 
+If the selection is a hyperslab, the corner coordinates of the hyperslab 
+are displayed. 
+For the point selection, the coordinates of each point are displayed.
+Since only two selections were stored, the third and fourth elements of the 
+dataset <code>Dataset1</code> are set to <code>NULL</code>. 
+This was done by the buffer inizialization in the program.
+
+<h4>Reading references to dataset regions</h4>
+
+The following steps are involved in reading references to dataset 
+regions and referenced dataset regions (selections).
+<OL>
+<LI> Open and read the dataset containing references to the dataset regions.
+   The datatype <code>H5T_STD_REF_DSETREG</code> must be used during 
+   read operation.
+<LI>Use <code>H5Rdereference</code> to obtain the dataset identifier 
+    from the read dataset region reference.
+    <PRE>                       <B>OR</B>
+    </PRE>
+   Use <code>H5Rget_region</code> to obtain the dataspace identifier for 
+   the dataset containing the selection from the read dataset region reference.
+<LI> With the dataspace identifier, the H5S interface functions,  
+     <code>H5Sget_select_</code>*, can be used to obtain information 
+     about the selection.
+<LI> Close all objects when they are no longer needed.
+</OL>
+
+<H5>Programming example</H5>
+
+<a href="Intro/IntroExamples.html#ReadRefReg" target="ExampleWin">Example 14</a>
+reads a dataset containing dataset region references.
+It reads data from the dereferenced dataset and displays the number of 
+elements and raw data. Then it reads two selections:
+a hyperslab selection and a point selection. The program queries a 
+number of points in the hyperslab  and the coordinates and displays them. 
+Then it queries a number of selected points and their coordinates and 
+displays the information.
+
+
+<p>
+<b>Output:</b>
+The output of this program is :
+<PRE>
+
+ Number of elements in the dataset is : 100
+ 0  3  6  9  12  15  18  21  24  27 
+ 30  33  36  39  42  45  48  51  54  57 
+ 60  63  66  69  72  75  78  81  84  87 
+ 90  93  96  99  102  105  108  111  114  117 
+ 120  123  126  129  132  135  138  141  144  147 
+ 150  153  156  159  162  165  168  171  174  177 
+ 180  183  186  189  192  195  198  201  204  207 
+ 210  213  216  219  222  225  228  231  234  237 
+ 240  243  246  249  252  255  255  255  255  255 
+ 255  255  255  255  255  255  255  255  255  255 
+ Number of elements in the hyperslab is : 36 
+ Hyperslab coordinates are : 
+ ( 2 , 2 ) ( 7 , 7 ) 
+ Number of selected elements is : 10
+ Coordinates of selected elements are : 
+ ( 6 , 9 ) 
+ ( 2 , 2 ) 
+ ( 8 , 4 ) 
+ ( 1 , 6 ) 
+ ( 2 , 8 ) 
+ ( 3 , 2 ) 
+ ( 0 , 4 ) 
+ ( 9 , 0 ) 
+ ( 7 , 1 ) 
+ ( 3 , 3 ) 
+ 
+</PRE>
+
+<b>Notes:</b>
+Note the following elements of this example:
+<UL>
+<LI> The dataset with the region references was read by <code>H5Dread</code>
+   with the <code>H5T_STD_REF_DSETREG</code> datatype specified.
+<LI> The read reference can be used to obtain the dataset identifier 
+    with the following call:
+<PRE>
+    dset2 = H5Rdereference (dset1,H5R_DATASET_REGION,&rbuf[0]);
+</PRE>
+   or to obtain spacial information (dataspace and selection) with the call
+   to <code>H5Rget_region</code>:
+<PRE>
+    sid2=H5Rget_region(dset1,H5R_DATASET_REGION,&rbuf[0]);
+</PRE> 
+   The reference to the dataset region has information for both the dataset 
+   itself and its selection. In both functions:
+<UL>
+       <LI> The first parameter is an identifier of the dataset with the 
+         region references.
+       <LI> The second parameter specifies the type of  reference stored. 
+         In this example, a reference to the dataset region is stored.
+       <LI> The third parameter is a buffer containing the reference of the 
+         specified type.
+</UL>
+<LI> This example introduces several <code>H5Sget_select</code>* 
+   functions used to obtain information about selections:
+
+<UL>
+    <code>H5Sget_select_npoints:</code>  returns the number of elements in 
+       the hyperslab<BR>
+    <code>H5Sget_select_hyper_nblocks:</code> returns the number of blocks 
+       in the hyperslab<BR>
+    <code>H5Sget_select_blocklist:</code> returns the "lower left" and 
+       "upper right" coordinates of the blocks in the hyperslab selection<BR>
+    <code>H5Sget_select_bounds:</code> returns the coordinates of the 
+       "minimal" block containing a hyperslab selection<BR>
+    <code>H5Sget_select_elem_npoints:</code> returns the number of points 
+       in the element selection<BR>  
+    <code>H5Sget_select_elem_points:</code> returns the coordinates of 
+       the element selection
+</UL>
+</UL>
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font>
+<hr>
+
+
+<H2>4. Example Codes</H2>
+For the example codes, see 
+<a href="Intro/IntroExamples.html" target="ExampleWin" target="ExampleWin"><cite>Introduction to HDF5 -- Example Codes</cite></a>.
+
+
+<p align=right><font size=-1><a href="#Intro-TOC">(Return to TOC)</a></font> 
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_Intro.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+<a href="index.html">Other HDF5 documents and links</a>&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<table width=100% border=0>
+<tr><td align=left valign=top>
+ 
+<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem -->
+ 
+Last modified: 26 March 2001 
+
+</td><td align=right valign=top>
+<a href="Copyright.html">Copyright</a>&nbsp;&nbsp;
+</td></tr>
+</table>             
+
+
+</BODY>
+</HTML>

Added: packages/hdf5/branches/upstream/current/doc/html/H5.sample_code.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/H5.sample_code.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/H5.sample_code.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,123 @@
+<html><head><title>
+HDF5 Draft API Example Code
+</title></head><body>
+
+<center>
+<h1>HDF5: API Example Code</h1>
+</center>
+
+<P>Example programs/sections of code below:
+<dl COMPACT>
+    <dt><a href="#Example1">#1</a>
+    <dd>A simple example showing how to create a file.
+    <dt><a href="#Example2">#2</a>
+    <dd>A example showing how to create a homogenous multi-dimensional dataset.
+    <dt><a href="#Example3">#3</a>
+    <dd>A example showing how to read a generic dataset.
+</dl>
+
+<hr>
+<h2><a name="Example1">Simple Example showing how to create a file.</a></h2>
+
+<P>Notes:<br>
+This example creates a new HDF5 file and allows write access.
+If the file exists already, the H5F_ACC_TRUNC flag would also be necessary to
+overwrite the previous file's information.
+
+<P>Code:
+
+<code> <pre>
+    hid_t file_id;
+
+    file_id=<A HREF="H5.apiv2.html#File-Create">H5Fcreate</a>("example1.h5",H5F_ACC_EXCL,H5P_DEFAULT,H5P_DEFAULT);
+
+    <A HREF="H5.apiv2.html#File-Close">H5Fclose</a>(file_id);
+
+</pre> </code>
+
+<hr>
+<h2><a name="Example2">Example showing how create a homogenous multi-dimensional dataset.</a></h2>
+
+<P>Notes:<br>
+This example creates a 4-dimensional dataset of 32-bit floating-point
+numbers, corresponding to the current Scientific Dataset functionality.
+
+<P>Code:
+
+<code> <pre>
+ 1 hid_t file_id;              /* new file's ID */
+ 2 hid_t dim_id;               /* new dimensionality's ID */
+ 3 int rank=4;                 /* the number of dimensions */
+ 4 hsize_t dims[4]={6,5,4,3};  /* the size of each dimension */
+ 5 hid_t dataset_id;           /* new dataset's ID */
+ 6 float buf[6][5][4][3];      /* storage for the dataset's data */
+ 7 herr_t status;              /* function return status */
+ 8 
+ 9 file_id = H5Fcreate ("example3.h5", H5F_ACC_TRUNC, H5P_DEFAULT,
+10                      H5P_DEFAULT);
+11 assert (file_id &gt;= 0);
+12 
+13 /* Create & initialize a dimensionality object */
+14 dim_id = H5Screate_simple (rank, dims);
+15 assert (dim_id &gt;= 0);
+16 
+17 /* Create & initialize the dataset object */
+18 dataset_id = H5Dcreate (file_id, "Simple Object", H5T_NATIVE_FLOAT,
+19                         dim_id, H5P_DEFAULT);
+20 assert (dataset_id &gt;= 0);
+21 
+22 &lt;initialize data array&gt;
+23 
+24 /* Write the entire dataset out */
+25 status = H5Dwrite (dataset_id, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL,
+26                    H5P_DEFAULT, buf);
+27 assert (status &gt;= 0);
+28 
+29 /* Release the IDs we've created */
+30 H5Sclose (dim_id);
+31 H5Dclose (dataset_id);
+32 H5Fclose (file_id);
+</pre> </code>
+
+<hr>
+<h2><a name="Example3">Example showing how read a generic dataset.</a></h2>
+
+<P>Notes:<br>
+This example shows how to get the information for and display a generic
+dataset.
+
+<P>Code:
+
+<code> <pre>
+ 1 hid_t file_id;          /* file's ID */
+ 2 hid_t dataset_id;       /* dataset's ID in memory */
+ 3 hid_t space_id;         /* dataspace's ID in memory */
+ 4 uintn nelems;           /* number of elements in array */
+ 5 double *buf;            /* pointer to the dataset's data */
+ 6 herr_t status;          /* function return value */
+ 7 
+ 8 file_id = H5Fopen ("example6.h5", H5F_ACC_RDONLY, H5P_DEFAULT);
+ 9 assert (file_id &gt;= 0);
+10 
+11 /* Attach to a datatype object */
+12 dataset_id = H5Dopen (file_id, "dataset1");
+13 assert (dataset_id &gt;= 0);
+14 
+15 /* Get the OID for the dataspace */
+16 space_id = H5Dget_space (dataset_id);
+17 assert (space_id &gt;= 0);
+18 
+19 /* Allocate space for the data */
+20 nelems = H5Sget_npoints (space_id);
+21 buf = malloc (nelems * sizeof(double));
+22 
+23 /* Read in the dataset */
+24 status = H5Dread (dataset_id, H5T_NATIVE_DOUBLE, H5S_ALL,, H5S_ALL,
+25                   H5P_DEFAULT, buf);
+26 assert (status &gt;= 0);
+27 
+28 /* Release the IDs we've accessed */
+29 H5Sclose (space_id);
+30 H5Dclose (dataset_id);
+31 H5Fclose (file_id);
+</pre> </code>

Added: packages/hdf5/branches/upstream/current/doc/html/H5.user.PrintGen.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/H5.user.PrintGen.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/H5.user.PrintGen.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,132 @@
+<html>
+  <head>
+    <title>
+      HDF5 User's Guide -- Single Print
+    </title>
+  </head>
+
+  <body bgcolor="#FFFFFF">
+
+
+<hr>
+
+
+    <center><h1>A User's Guide for HDF5</h1></center>
+
+This page provides a means of printing the <cite>HDF5 User's Guide</cite>
+with a single print command as follows:
+<ol><li>Open this page in Internet Explorer, version 4.0 or or later.
+        (Sorry, but as of this writing, Netscape does not offer the required 
+        print feature.)
+    <li>On the <strong>File</strong> menu, select <strong>Print</strong>.
+    <li>In the <strong>Print</strong> dialogue box, select 
+        <strong>Print all linked documents</strong>.
+    <li>Select <strong>OK</strong>.  Depending on the print settings of your
+        browser, this will produce a 100- to 200-page set of documents, 
+        one chapter or section at a time.
+    <li>Once the print job is complete, discard the first page printed (this page).  
+        The rest of the printout should form a complete copy of the 
+        <cite>HDF5 User's Guide</cite>.
+</ol>
+
+
+<br><br>
+<center>
+<table border=0 width=85%>
+
+      <tr><td valign=top><a href="H5.user.PrintTpg.html" target="PrintWin">Title Page</a>
+	</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+        <td valign=top>Title page.
+        </td></tr>
+      <tr><td valign=top><a href="Copyright.html" target="PrintWin">Copyright</a>
+	</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+        <td valign=top>The HDF5 copyright notice, contact information, 
+           and other <i>back-of-the-title-page</i> material.
+        </td></tr>
+      <tr><td valign=top><a href="H5.user.html" target="PrintWin">TOC</a>
+	</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+        <td valign=top>Table of contents.
+        </td></tr>
+      <tr><td valign=top><a href="Files.html" target="PrintWin">HDF5 Files</a>
+	</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+        <td valign=top>A guide to the <strong>H5F</strong> interface.
+        </td></tr>
+      <tr><td valign=top><a href="Datasets.html" target="PrintWin">Datasets</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5D</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="Datatypes.html" target="PrintWin">Datatypes</a> 
+	</td><td></td><td valign=top>A guide to the <strong>H5T</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="Dataspaces.html" target="PrintWin">Dataspaces</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5S</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="Groups.html" target="PrintWin">Groups</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5G</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="References.html" target="PrintWin">References and
+          Identifiers</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5R</strong> 
+          and <strong>H5I</strong> interfaces.
+        </td></tr>
+      <tr><td valign=top><a href="Attributes.html" target="PrintWin">Attributes</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5A</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="Properties.html" target="PrintWin">Property Lists</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5P</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="Errors.html" target="PrintWin">Error Handling</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5E</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="Filters.html" target="PrintWin">Filters</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5Z</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="Caching.html" target="PrintWin">Caching</a>
+	</td><td></td><td valign=top>A guide for meta and raw data caching.
+        </td></tr>
+      <tr><td valign=top><a href="Chunking.html" target="PrintWin">Dataset Chunking</a>
+	</td><td></td><td valign=top>A guide to the issues and pitfalls 
+          of dataset chunking.
+        </td></tr>
+      <tr><td valign=top><a href="MountingFiles.html" target="PrintWin">Mounting Files</a>
+	</td><td></td><td valign=top>A guide to mounting files containing 
+          external HDF5 datasets.
+        </td></tr>
+      <tr><td valign=top><a href="Debugging.html" target="PrintWin">Debugging</a>
+	</td><td></td><td valign=top>A guide to debugging HDF5 API calls.
+        </td></tr>
+      <tr><td valign=top><a href="Environment.html" target="PrintWin">Environment Variables 
+          and Configuration Parameters</a>
+	</td><td></td><td valign=top>A list of HDF5 environment variables
+          and <br>&nbsp;&nbsp;&nbsp;configuration parameters.
+        </td></tr>
+      <tr><td valign=top><a href="ddl.html" target="PrintWin">DDL for HDF5</a>
+	</td><td></td><td valign=top>A DDL in BNF for HDF5.
+        </td></tr>
+</table>
+</center>
+
+
+<br><br>
+
+<hr>
+
+
+<address>
+<table width=100% border=0>
+<tr><td align=left valign=top>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a>
+<br>
+Last modified:  22 July 1999
+
+</table>             
+
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/H5.user.PrintTpg.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/H5.user.PrintTpg.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/H5.user.PrintTpg.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,79 @@
+<html>
+  <head>
+    <title>
+      HDF5 User's Guide
+    </title>
+  </head>
+
+  <body bgcolor="#FFFFFF">
+
+
+<hr>
+<br>
+<br><br>
+
+<center>
+
+<font size=7>
+HDF5 User's Guide 
+</font>
+
+<br><br><br>
+<hr>
+<hr>
+<br><br><br>
+
+<font size=6>
+Release 1.2
+<br>
+October 1999
+</font>
+
+<br><br><br><br>
+
+<font size=3>
+Hierarchical Data Format (HDF) Group
+<br>
+National Center for Supercomputing Applications (NCSA)
+<br>
+University of Illinois at Urbana-Champaign (UIUC)
+</font>
+
+</center>
+
+<br><br><br>
+<hr>
+<hr>
+<br><br><br>
+<br><br><br>
+
+<blockquote>
+<strong>A Note to the Reader:</strong>
+The primary HDF5 user documents are the online HTML documents
+distributed with the HDF5 code and binaries and found on the HDF5 website.
+These PDF and PostScript versions are generated from the HTML to provide
+the following capabilites:
+<ul>
+<li>To provide a version that can be reasonably printed in a 
+    single print operation.
+<li>To provide an easily searchable version.
+</ul>
+In this package, you will find four PDF and PostScript documents:
+<ul>
+<li><cite>Introduction to HDF5</cite>
+<li><cite>A User's Guide for HDF5</cite>
+<li><cite>HDF5 Reference Manual</cite>
+<li>All three of the above documents concatenated into a single file
+</ul>
+Note that these versions were created in response to user feedback;
+the HDF Group is eager to hear from you so as to improve the delivered 
+product.
+</blockquote>
+
+<br><br>
+<hr>
+
+
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/H5.user.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/H5.user.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/H5.user.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,245 @@
+<html>
+  <head>
+    <title>
+      HDF5 User's Guide
+    </title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center><h1>A User's Guide for HDF5<br>Release 1.4.5</h1></center>
+
+    <p>This document is the <cite>HDF5 User's Guide</cite> from
+      HDF5 Release 1.4.5.
+      Since a 
+      <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">new 
+      HDF5 User's Guide</a> is under development, 
+      this version has not been updated for Release 1.6.0.
+    <p>The following documents form a loosely organized user's guide
+      to the HDF5 library.
+    <p>
+
+<center>
+<table border=0>
+
+<tr><td valign=top><a href="Files.html">HDF5 Files</a>
+	</td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+        <td valign=top>A guide to the <strong>H5F</strong> interface.
+        </td></tr>
+      <tr><td valign=top><a href="Datasets.html">Datasets</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5D</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="Datatypes.html">Datatypes</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5T</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="Dataspaces.html">Dataspaces</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5S</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="Groups.html">Groups</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5G</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="References.html">References and
+          Identifiers</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5R</strong> 
+          and <strong>H5I</strong> interfaces.
+        </td></tr>
+      <tr><td valign=top><a href="Attributes.html">Attributes</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5A</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="Properties.html">Property Lists</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5P</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="Errors.html">Error Handling</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5E</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="Filters.html">Filters</a>
+	</td><td></td><td valign=top>A guide to the <strong>H5Z</strong> 
+          interface.
+        </td></tr>
+      <tr><td valign=top><a href="Caching.html">Caching</a>
+	</td><td></td><td valign=top>A guide for meta and raw data caching.
+        </td></tr>
+      <tr><td valign=top><a href="Chunking.html">Dataset Chunking</a>
+	</td><td></td><td valign=top>A guide to the issues and pitfalls 
+          of dataset chunking.
+        </td></tr>
+      <tr><td valign=top><a href="MountingFiles.html">Mounting Files</a>
+	</td><td></td><td valign=top>A guide to mounting files containing 
+          external HDF5 datasets.
+        </td></tr>
+      <tr><td valign=top><a href="Performance.html">Performance</a>
+	</td><td></td><td valign=top>A guide to performance issues and 
+          analysis tools.
+        </td></tr>
+      <tr><td valign=top><a href="Debugging.html">Debugging</a>
+	</td><td></td><td valign=top>A guide to debugging HDF5 API calls.
+        </td></tr>
+      <tr><td valign=top><a href="Environment.html">Environment Variables 
+          and</a>
+          <br>&nbsp;&nbsp;&nbsp;<a href="Environment.html">Configuration 
+          Parameters</a>
+	</td><td></td><td valign=top>A list of HDF5 environment variables
+          and configuration <br>&nbsp;&nbsp;&nbsp;parameters.
+        </td></tr>
+      <tr><td valign=top><a href="ddl.html">DDL for HDF5</a>
+	</td><td></td><td valign=top>A DDL in BNF for HDF5.
+        </td></tr>
+</table>
+</center>
+<br>
+<!--
+    <p>The following documents form a loosely organized developer's guide to
+      aspects of the HDF5 library. (Some of the following documents
+      may be rather out of date as they were working papers for design
+      goals.)
+
+    <ul>
+      <li><a href="Version.html">Version Numbers</a> -
+	A description of HDF5 version numbers.
+      <li><a href="IOPipe.html">I/O Pipeline</a> -
+	A description of the raw data I/O pipeline.
+      <li><a href="ExternalFiles.html">Working with External Files</a> -
+	A guide to the use of multiple files with HDF5.
+      <li><a href="Big.html">Large Datasets</a> -
+	A guide to accessing large datasets on small computers.
+      <li><a href="MemoryManagement.html">Memory Management</a> -
+	A white	paper about memory management issues in HDF5.
+      <li><a href="Coding.html">Coding Style</a> -
+	A white paper about coding style in the HDF5 library code.
+      <li><a href="compat.html">HDF4/HDF5 Compatibility</a> -
+	A white paper about compatibility issues between HDF4 and HDF5.
+      <li><a href="study.html">Chunking Performance Study</a> -
+	A white paper describing the HDF5 chunking performance.
+    </ul>
+-->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<table width=100% border=0>
+<tr><td align=left valign=top> 
+
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+
+Last modified:  3 July 2003
+
+
+</td><td align=right valign=top>
+<a href="Copyright.html">Copyright</a>&nbsp;&nbsp;
+</td></tr>
+</table>             
+
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/IH_map1.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/IH_map1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/IH_map2.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/IH_map2.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/IH_map3.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/IH_map3.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/IH_map4.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/IH_map4.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/IH_mapFoot.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/IH_mapFoot.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/IH_mapHead.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/IH_mapHead.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/IOPipe.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/IOPipe.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/IOPipe.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,114 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>The Raw Data I/O Pipeline</title>
+  </head>
+
+  <body>
+    <h1>The Raw Data I/O Pipeline</h1>
+
+    <p>The HDF5 raw data pipeline is a complicated beast that handles
+      all aspects of raw data storage and transfer of that data
+      between the file and the application.  Data can be stored
+      contiguously (internal or external), in variable size external
+      segments, or regularly chunked; it can be sparse, extendible,
+      and/or compressible. Data transfers must be able to convert from
+      one data space to another, convert from one number type to
+      another, and perform partial I/O operations. Furthermore,
+      applications will expect their common usage of the pipeline to
+      perform well.
+
+    <p>To accomplish these goals, the pipeline has been designed in a
+      modular way so no single subroutine is overly complicated and so
+      functionality can be inserted easily at the appropriate
+      locations in the pipeline.  A general pipeline was developed and
+      then certain paths through the pipeline were optimized for
+      performance.
+
+    <p>We describe only the file-to-memory side of the pipeline since
+      the memory-to-file side is a mirror image. We also assume that a
+      proper hyperslab of a simple data space is being read from the
+      file into a proper hyperslab of a simple data space in memory,
+      and that the data type is a compound type which may require
+      various number conversions on its members.
+
+      <img alt="Figure 1" src="pipe1.gif">
+
+    <p>The diagrams should be read from the top down. The Line A
+      in the figure above shows that <code>H5Dread()</code> copies
+      data from a hyperslab of a file dataset to a hyperslab of an
+      application buffer by calling <code>H5D_read()</code>. And
+      <code>H5D_read()</code> calls, in a loop,
+      <code>H5S_simp_fgath()</code>, <code>H5T_conv_struct()</code>,
+      and <code>H5S_simp_mscat()</code>. A temporary buffer, TCONV, is
+      loaded with data points from the file, then data type conversion
+      is performed on the temporary buffer, and finally data points
+      are scattered out to application memory. Thus, data type
+      conversion is an in-place operation and data space conversion
+      consists of two steps. An additional temporary buffer, BKG, is
+      large enough to hold <em>N</em> instances of the destination
+      data type where <em>N</em> is the same number of data points
+      that can be held by the TCONV buffer (which is large enough to
+      hold either source or destination data points).
+
+    <p>The application sets an upper limit for the size of the TCONV
+      buffer and optionally supplies a buffer. If no buffer is
+      supplied then one will be created by calling
+      <code>malloc()</code> when the pipeline is executed (when
+      necessary) and freed when the pipeline exits.  The size of the
+      BKG buffer depends on the size of the TCONV buffer and if the
+      application supplies a BKG buffer it should be at least as large
+      as the TCONV buffer.  The default size for these buffers is one
+      megabyte but the buffer might not be used to full capacity if
+      the buffer size is not an integer multiple of the source or
+      destination data point size (whichever is larger, but only
+      destination for the BKG buffer).
+
+
+
+    <p>Occassionally the destination data points will be partially
+      initialized and the <code>H5Dread()</code> operation should not
+      clobber those values.  For instance, the destination type might
+      be a struct with members <code>a</code> and <code>b</code> where
+      <code>a</code> is already initialized and we're reading
+      <code>b</code> from the file.  An extra line, G, is added to the
+      pipeline to provide the type conversion functions with the
+      existing data.
+
+      <img alt="Figure 2" src="pipe2.gif">
+
+    <p>It will most likely be quite common that no data type
+      conversion is necessary.  In such cases a temporary buffer for
+      data type conversion is not needed and data space conversion
+      can happen in a single step. In fact, when the source and
+      destination data are both contiguous (they aren't in the
+      picture) the loop degenerates to a single iteration.
+
+
+      <img alt="Figure 3" src="pipe3.gif">
+
+    <p>So far we've looked only at internal contiguous storage, but by
+      replacing Line B in Figures 1 and 2 and Line A in Figure 3 with
+      Figure 4 the pipeline is able to handle regularly chunked
+      objects. Line B of Figure 4 is executed once for each chunk
+      which contains data to be read and the chunk address is found by
+      looking at a multi-dimensional key in a chunk B-tree which has
+      one entry per chunk.
+
+      <img alt="Figure 4" src="pipe4.gif">
+
+    <p>If a single chunk is requested and the destination buffer is
+      the same size/shape as the chunk, then the CHUNK buffer is
+      bypassed and the destination buffer is used instead as shown in
+      Figure 5.
+
+      <img alt="Figure 5" src="pipe5.gif">
+
+    <hr>
+    <address><a href="mailto:matzke at llnl.gov">Robb Matzke</a></address>
+<!-- Created: Tue Mar 17 11:13:35 EST 1998 -->
+<!-- hhmts start -->
+Last modified: Wed Mar 18 10:38:30 EST 1998
+<!-- hhmts end -->
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Intro/Dependencies
===================================================================

Added: packages/hdf5/branches/upstream/current/doc/html/Intro/IntroExamples.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Intro/IntroExamples.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Intro/IntroExamples.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2130 @@
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
+<META NAME="Generator" CONTENT="Microsoft Word 97">
+<TITLE>Introduction to HDF5</TITLE>
+
+</HTML><!-- #BeginLibraryItem "/ed_libs/styles_Intro.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="../ed_styles/IntroElect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem --><HTML></HEAD>
+<BODY LINK="#0000ff" VLINK="#800080" bgcolor="#FFFFFF">
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_Intro.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="../H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+<a href="../RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+<a href="../index.html">Other HDF5 documents and links</a>&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1 ALIGN="CENTER">Introduction to HDF5 -- Example Codes</h1></a>
+
+
+<a name="IEx-TOC">
+<hr>
+<center>
+<table border=0 width=90%>
+<tr><th colspan=3>Table of Contents</th></tr></a>
+<tr><td valign=top align=left width=42%>
+
+        <font size=-1>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#CreateExample">1: Creating and writing a
+              dataset</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#CheckAndReadExample">2. Reading a hyperslab</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#WriteSelected">3. Writing selected data</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#Compound">4. Working with compound datatypes</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#CreateExtendWrite">5. Creating and writing an extendible</a> <br>
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#CreateExtendWrite">dataset</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#ReadExtended">6. Reading data</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#CreateGroups">7. Creating groups</A><br>
+        </font>
+
+</td><td width=6%>&nbsp;&nbsp;</td><td valign=top align=left width=42%>
+
+        <font size=-1>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <A href="#ReadWriteAttributes">8. Writing and reading 
+              attributes</A><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <a href="#CreateWriteRefObj">9. Creating and writing references</a><br>
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <a href="#CreateWriteRefObj">to objects</a><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <a href="#ReadRefObj">10. Reading references to objects</a><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <a href="#CreateWriteRefReg">11. Creating and writing references</a><br>
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <a href="#CreateWriteRefReg">to dataset regions</a><br>
+            &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <a href="#ReadRefReg">12. Reading references to dataset</a><br>
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              &nbsp;&nbsp&nbsp;&nbsp;&nbsp;&nbsp&nbsp;&nbsp;
+              <a href="#ReadRefReg">regions</a>
+        </font>
+</td></tr>
+</table>
+</center>
+<p>
+
+<hr>
+
+
+
+<H4><A NAME="CreateExample">Example 1: How to create a homogeneous multi-dimensional dataset</A> and write it to a file.</A></H4>
+<P>This example creates a 2-dimensional HDF 5 dataset of little endian 32-bit integers.
+<PRE>
+<!-- Insert Example 1, h5_write.c, here. -->
+/*  
+ *  This example writes data to the HDF5 file.
+ *  Data conversion is performed during write operation.  
+ */
+ 
+#include <hdf5.h>
+
+#define FILE        "SDS.h5"
+#define DATASETNAME "IntArray" 
+#define NX     5                      /* dataset dimensions */
+#define NY     6
+#define RANK   2
+
+int
+main (void)
+{
+    hid_t       file, dataset;         /* file and dataset handles */
+    hid_t       datatype, dataspace;   /* handles */
+    hsize_t     dimsf[2];              /* dataset dimensions */
+    herr_t      status;                             
+    int         data[NX][NY];          /* data to write */
+    int         i, j;
+
+    /* 
+     * Data  and output buffer initialization. 
+     */
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++)
+	    data[j][i] = i + j;
+    }     
+    /*
+     * 0 1 2 3 4 5 
+     * 1 2 3 4 5 6
+     * 2 3 4 5 6 7
+     * 3 4 5 6 7 8
+     * 4 5 6 7 8 9
+     */
+
+    /*
+     * Create a new file using H5F_ACC_TRUNC access,
+     * default file creation properties, and default file
+     * access properties.
+     */
+    file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Describe the size of the array and create the data space for fixed
+     * size dataset. 
+     */
+    dimsf[0] = NX;
+    dimsf[1] = NY;
+    dataspace = H5Screate_simple(RANK, dimsf, NULL); 
+
+    /* 
+     * Define datatype for the data in the file.
+     * We will store little endian INT numbers.
+     */
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    status = H5Tset_order(datatype, H5T_ORDER_LE);
+
+    /*
+     * Create a new dataset within the file using defined dataspace and
+     * datatype and default dataset creation properties.
+     */
+    dataset = H5Dcreate(file, DATASETNAME, datatype, dataspace,
+			H5P_DEFAULT);
+
+    /*
+     * Write the data to the dataset using default transfer properties.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+		      H5P_DEFAULT, data);
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Fclose(file);
+ 
+    return 0;
+}     
+</pre>
+
+
+
+
+<P>&nbsp;
+<p align=right><font size=-1><a href="#IEx-TOC">(Return to TOC)</a></font>
+
+
+<A NAME="CheckAndReadExample">&nbsp;</a>
+<H4><A NAME="_Toc429885326">Example 2.</A> How to read a hyperslab from file into memory.</A></H4>
+<P>This example reads a hyperslab from a 2-d HDF5 dataset into a 3-d dataset in memory.
+<PRE>
+<!-- Insert Example 2, h5_read.c, here. -->
+/*  
+ *   This example reads hyperslab from the SDS.h5 file 
+ *   created by h5_write.c program into two-dimensional
+ *   plane of the three-dimensional array. 
+ *   Information about dataset in the SDS.h5 file is obtained. 
+ */
+ 
+#include "hdf5.h"
+
+#define FILE        "SDS.h5"
+#define DATASETNAME "IntArray" 
+#define NX_SUB  3           /* hyperslab dimensions */ 
+#define NY_SUB  4 
+#define NX 7           /* output buffer dimensions */ 
+#define NY 7 
+#define NZ  3 
+#define RANK         2
+#define RANK_OUT     3
+
+int
+main (void)
+{
+    hid_t       file, dataset;         /* handles */
+    hid_t       datatype, dataspace;   
+    hid_t       memspace; 
+    H5T_class_t class;                 /* datatype class */
+    H5T_order_t order;                 /* data order */
+    size_t      size;                  /*
+				        * size of the data element	       
+				        * stored in file
+				        */
+    hsize_t     dimsm[3];              /* memory space dimensions */
+    hsize_t     dims_out[2];           /* dataset dimensions */      
+    herr_t      status;                             
+
+    int         data_out[NX][NY][NZ ]; /* output buffer */
+   
+    hsize_t      count[2];              /* size of the hyperslab in the file */
+    hsize_t      offset[2];             /* hyperslab offset in the file */
+    hsize_t      count_out[3];          /* size of the hyperslab in memory */
+    hsize_t      offset_out[3];         /* hyperslab offset in memory */
+    int          i, j, k, status_n, rank;
+
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++) {
+	    for (k = 0; k < NZ ; k++)
+		data_out[j][i][k] = 0;
+	}
+    } 
+ 
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    dataset = H5Dopen(file, DATASETNAME);
+
+    /*
+     * Get datatype and dataspace handles and then query
+     * dataset class, order, size, rank and dimensions.
+     */
+    datatype  = H5Dget_type(dataset);     /* datatype handle */ 
+    class     = H5Tget_class(datatype);
+    if (class == H5T_INTEGER) printf("Data set has INTEGER type \n");
+    order     = H5Tget_order(datatype);
+    if (order == H5T_ORDER_LE) printf("Little endian order \n");
+
+    size  = H5Tget_size(datatype);
+    printf(" Data size is %d \n", size);
+
+    dataspace = H5Dget_space(dataset);    /* dataspace handle */
+    rank      = H5Sget_simple_extent_ndims(dataspace);
+    status_n  = H5Sget_simple_extent_dims(dataspace, dims_out, NULL);
+    printf("rank %d, dimensions %lu x %lu \n", rank,
+	   (unsigned long)(dims_out[0]), (unsigned long)(dims_out[1]));
+
+    /* 
+     * Define hyperslab in the dataset. 
+     */
+    offset[0] = 1;
+    offset[1] = 2;
+    count[0]  = NX_SUB;
+    count[1]  = NY_SUB;
+    status = H5Sselect_hyperslab(dataspace, H5S_SELECT_SET, offset, NULL, 
+				 count, NULL);
+
+    /*
+     * Define the memory dataspace.
+     */
+    dimsm[0] = NX;
+    dimsm[1] = NY;
+    dimsm[2] = NZ ;
+    memspace = H5Screate_simple(RANK_OUT,dimsm,NULL);   
+
+    /* 
+     * Define memory hyperslab. 
+     */
+    offset_out[0] = 3;
+    offset_out[1] = 0;
+    offset_out[2] = 0;
+    count_out[0]  = NX_SUB;
+    count_out[1]  = NY_SUB;
+    count_out[2]  = 1;
+    status = H5Sselect_hyperslab(memspace, H5S_SELECT_SET, offset_out, NULL, 
+				 count_out, NULL);
+
+    /*
+     * Read data from hyperslab in the file into the hyperslab in 
+     * memory and display.
+     */
+    status = H5Dread(dataset, H5T_NATIVE_INT, memspace, dataspace,
+		     H5P_DEFAULT, data_out);
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++) printf("%d ", data_out[j][i][0]);
+	printf("\n");
+    }
+    /*
+     * 0 0 0 0 0 0 0
+     * 0 0 0 0 0 0 0
+     * 0 0 0 0 0 0 0
+     * 3 4 5 6 0 0 0  
+     * 4 5 6 7 0 0 0
+     * 5 6 7 8 0 0 0
+     * 0 0 0 0 0 0 0
+     */
+
+    /*
+     * Close/release resources.
+     */
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Sclose(dataspace);
+    H5Sclose(memspace);
+    H5Fclose(file);
+
+    return 0;
+}     
+</pre>
+
+
+
+
+
+<P>&nbsp;
+<p align=right><font size=-1><a href="#IEx-TOC">(Return to TOC)</a></font>
+
+
+<H4><A NAME="_Toc429885331"><A NAME="WriteSelected"></A>Example 3. Writing selected data from memory to a file.</A></H4>
+<P>This example shows how to use the selection capabilities of HDF5 to write selected data to a file.  It includes the examples discussed in the text.
+
+<pre>
+<!-- Insert Example 3, h5_select.c, here. -->
+/* 
+ *  This program shows how the H5Sselect_hyperslab and H5Sselect_elements
+ *  functions are used to write selected data from memory to the file.
+ *  Program takes 48 elements from the linear buffer and writes them into
+ *  the matrix using 3x2 blocks, (4,3) stride and (2,4) count. 
+ *  Then four elements  of the matrix are overwritten with the new values and 
+ *  file is closed. Program reopens the file and reads and displays the result.
+ */ 
+ 
+#include <hdf5.h>
+
+#define FILE "Select.h5"
+
+#define MSPACE1_RANK     1          /* Rank of the first dataset in memory */
+#define MSPACE1_DIM      50         /* Dataset size in memory */ 
+
+#define MSPACE2_RANK     1          /* Rank of the second dataset in memory */ 
+#define MSPACE2_DIM      4          /* Dataset size in memory */ 
+
+#define FSPACE_RANK      2          /* Dataset rank as it is stored in the file */
+#define FSPACE_DIM1      8          /* Dimension sizes of the dataset as it is
+                                       stored in the file */
+#define FSPACE_DIM2      12 
+
+                                    /* We will read dataset back from the file
+                                       to the dataset in memory with these
+                                       dataspace parameters. */  
+#define MSPACE_RANK      2
+#define MSPACE_DIM1      8 
+#define MSPACE_DIM2      12 
+
+#define NPOINTS          4          /* Number of points that will be selected 
+                                       and overwritten */ 
+int main (void)
+{
+
+   hid_t   file, dataset;           /* File and dataset identifiers */
+   hid_t   mid1, mid2, fid;         /* Dataspace identifiers */
+   hsize_t dim1[] = {MSPACE1_DIM};  /* Dimension size of the first dataset 
+                                       (in memory) */ 
+   hsize_t dim2[] = {MSPACE2_DIM};  /* Dimension size of the second dataset
+                                       (in memory */ 
+   hsize_t fdim[] = {FSPACE_DIM1, FSPACE_DIM2}; 
+                                    /* Dimension sizes of the dataset (on disk) */
+
+   hsize_t start[2];  /* Start of hyperslab */
+   hsize_t stride[2]; /* Stride of hyperslab */
+   hsize_t count[2];  /* Block count */
+   hsize_t block[2];  /* Block sizes */
+
+   hsize_t coord[NPOINTS][FSPACE_RANK]; /* Array to store selected points 
+                                            from the file dataspace */ 
+   herr_t  ret;
+   uint    i,j;
+   int     matrix[MSPACE_DIM1][MSPACE_DIM2];
+   int     vector[MSPACE1_DIM];
+   int     values[] = {53, 59, 61, 67};  /* New values to be written */
+
+   /*
+    * Buffers' initialization.
+    */
+   vector[0] = vector[MSPACE1_DIM - 1] = -1;
+   for (i = 1; i < MSPACE1_DIM - 1; i++) vector[i] = i;
+
+   for (i = 0; i < MSPACE_DIM1; i++) {
+       for (j = 0; j < MSPACE_DIM2; j++)
+       matrix[i][j] = 0;
+    }
+
+    /*
+     * Create a file.
+     */
+    file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* 
+     * Create dataspace for the dataset in the file.
+     */
+    fid = H5Screate_simple(FSPACE_RANK, fdim, NULL);
+
+    /*
+     * Create dataset and write it into the file.
+     */
+    dataset = H5Dcreate(file, "Matrix in file", H5T_NATIVE_INT, fid, H5P_DEFAULT);
+    ret = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, matrix);
+
+    /*
+     * Select hyperslab for the dataset in the file, using 3x2 blocks, 
+     * (4,3) stride and (2,4) count starting at the position (0,1).
+     */
+    start[0]  = 0; start[1]  = 1;
+    stride[0] = 4; stride[1] = 3;
+    count[0]  = 2; count[1]  = 4;    
+    block[0]  = 3; block[1]  = 2;
+    ret = H5Sselect_hyperslab(fid, H5S_SELECT_SET, start, stride, count, block);
+
+    /*
+     * Create dataspace for the first dataset.
+     */
+    mid1 = H5Screate_simple(MSPACE1_RANK, dim1, NULL);
+
+    /*
+     * Select hyperslab. 
+     * We will use 48 elements of the vector buffer starting at the second element.
+     * Selected elements are 1 2 3 . . . 48
+     */
+    start[0]  = 1;
+    stride[0] = 1;
+    count[0]  = 48;
+    block[0]  = 1;
+    ret = H5Sselect_hyperslab(mid1, H5S_SELECT_SET, start, stride, count, block);
+ 
+    /*
+     * Write selection from the vector buffer to the dataset in the file.
+     *
+     * File dataset should look like this:       
+     *                    0  1  2  0  3  4  0  5  6  0  7  8 
+     *                    0  9 10  0 11 12  0 13 14  0 15 16
+     *                    0 17 18  0 19 20  0 21 22  0 23 24
+     *                    0  0  0  0  0  0  0  0  0  0  0  0
+     *                    0 25 26  0 27 28  0 29 30  0 31 32
+     *                    0 33 34  0 35 36  0 37 38  0 39 40
+     *                    0 41 42  0 43 44  0 45 46  0 47 48
+     *                    0  0  0  0  0  0  0  0  0  0  0  0
+     */
+     ret = H5Dwrite(dataset, H5T_NATIVE_INT, mid1, fid, H5P_DEFAULT, vector);
+
+    /*
+     * Reset the selection for the file dataspace fid.
+     */
+    ret = H5Sselect_none(fid);
+
+    /*
+     * Create dataspace for the second dataset.
+     */
+    mid2 = H5Screate_simple(MSPACE2_RANK, dim2, NULL);
+
+    /*
+     * Select sequence of NPOINTS points in the file dataspace.
+     */
+    coord[0][0] = 0; coord[0][1] = 0;
+    coord[1][0] = 3; coord[1][1] = 3;
+    coord[2][0] = 3; coord[2][1] = 5;
+    coord[3][0] = 5; coord[3][1] = 6;
+
+    ret = H5Sselect_elements(fid, H5S_SELECT_SET, NPOINTS, 
+                             (const hsize_t **)coord);
+
+    /*
+     * Write new selection of points to the dataset.
+     */
+    ret = H5Dwrite(dataset, H5T_NATIVE_INT, mid2, fid, H5P_DEFAULT, values);   
+
+    /*
+     * File dataset should look like this:     
+     *                   53  1  2  0  3  4  0  5  6  0  7  8 
+     *                    0  9 10  0 11 12  0 13 14  0 15 16
+     *                    0 17 18  0 19 20  0 21 22  0 23 24
+     *                    0  0  0 59  0 61  0  0  0  0  0  0
+     *                    0 25 26  0 27 28  0 29 30  0 31 32
+     *                    0 33 34  0 35 36 67 37 38  0 39 40
+     *                    0 41 42  0 43 44  0 45 46  0 47 48
+     *                    0  0  0  0  0  0  0  0  0  0  0  0
+     *                                        
+     */
+   
+    /*
+     * Close memory file and memory dataspaces.
+     */
+    ret = H5Sclose(mid1); 
+    ret = H5Sclose(mid2); 
+    ret = H5Sclose(fid); 
+ 
+    /*
+     * Close dataset.
+     */
+    ret = H5Dclose(dataset);
+
+    /*
+     * Close the file.
+     */
+    ret = H5Fclose(file);
+
+    /*
+     * Open the file.
+     */
+    file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+
+    /*
+     * Open the dataset.
+     */
+    dataset = dataset = H5Dopen(file,"Matrix in file");
+
+    /*
+     * Read data back to the buffer matrix.
+     */
+    ret = H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+                  H5P_DEFAULT, matrix);
+
+    /*
+     * Display the result.
+     */
+    for (i=0; i < MSPACE_DIM1; i++) {
+        for(j=0; j < MSPACE_DIM2; j++) printf("%3d  ", matrix[i][j]);
+        printf("\n");
+    }
+
+    return 0;
+}
+</pre>
+
+
+
+
+<P>&nbsp;
+<p align=right><font size=-1><a href="#IEx-TOC">(Return to TOC)</a></font>
+
+
+<H4><A NAME="Compound"><A NAME="_Toc429885327"></A>Example 4. Working with compound datatypes.</A></H4>
+<P>This example shows how to create a compound datatype, write an array which has the compound datatype to the file, and read back subsets of fields.
+<PRE>
+<!-- Insert Example 4, h5_compound.c, here. -->
+/*
+ * This example shows how to create a compound datatype,
+ * write an array which has the compound datatype to the file,
+ * and read back fields' subsets.
+ */
+
+#include "hdf5.h"
+
+#define FILE          "SDScompound.h5"
+#define DATASETNAME   "ArrayOfStructures"
+#define LENGTH        10
+#define RANK          1
+
+int
+main(void)
+{
+
+    /* First structure  and dataset*/
+    typedef struct s1_t {
+	int    a;
+	float  b;
+	double c; 
+    } s1_t;
+    s1_t       s1[LENGTH];
+    hid_t      s1_tid;     /* File datatype identifier */
+
+    /* Second structure (subset of s1_t)  and dataset*/
+    typedef struct s2_t {
+	double c;
+	int    a;
+    } s2_t;
+    s2_t       s2[LENGTH];
+    hid_t      s2_tid;    /* Memory datatype handle */
+
+    /* Third "structure" ( will be used to read float field of s1) */
+    hid_t      s3_tid;   /* Memory datatype handle */
+    float      s3[LENGTH];
+
+    int        i;
+    hid_t      file, dataset, space; /* Handles */
+    herr_t     status;
+    hsize_t    dim[] = {LENGTH};   /* Dataspace dimensions */
+
+
+    /*
+     * Initialize the data
+     */
+    for (i = 0; i< LENGTH; i++) {
+        s1[i].a = i;
+        s1[i].b = i*i;
+        s1[i].c = 1./(i+1);
+    }
+
+    /*
+     * Create the data space.
+     */
+    space = H5Screate_simple(RANK, dim, NULL);
+
+    /*
+     * Create the file.
+     */
+    file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Create the memory datatype. 
+     */
+    s1_tid = H5Tcreate (H5T_COMPOUND, sizeof(s1_t));
+    H5Tinsert(s1_tid, "a_name", HOFFSET(s1_t, a), H5T_NATIVE_INT);
+    H5Tinsert(s1_tid, "c_name", HOFFSET(s1_t, c), H5T_NATIVE_DOUBLE);
+    H5Tinsert(s1_tid, "b_name", HOFFSET(s1_t, b), H5T_NATIVE_FLOAT);
+
+    /* 
+     * Create the dataset.
+     */
+    dataset = H5Dcreate(file, DATASETNAME, s1_tid, space, H5P_DEFAULT);
+
+    /*
+     * Wtite data to the dataset; 
+     */
+    status = H5Dwrite(dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1);
+
+    /*
+     * Release resources
+     */
+    H5Tclose(s1_tid);
+    H5Sclose(space);
+    H5Dclose(dataset);
+    H5Fclose(file);
+ 
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+ 
+    dataset = H5Dopen(file, DATASETNAME);
+
+    /* 
+     * Create a datatype for s2
+     */
+    s2_tid = H5Tcreate(H5T_COMPOUND, sizeof(s2_t));
+
+    H5Tinsert(s2_tid, "c_name", HOFFSET(s2_t, c), H5T_NATIVE_DOUBLE);
+    H5Tinsert(s2_tid, "a_name", HOFFSET(s2_t, a), H5T_NATIVE_INT);
+
+    /*
+     * Read two fields c and a from s1 dataset. Fields in the file
+     * are found by their names "c_name" and "a_name".
+     */
+    status = H5Dread(dataset, s2_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s2);
+
+    /*
+     * Display the fields
+     */
+    printf("\n");
+    printf("Field c : \n");
+    for( i = 0; i < LENGTH; i++) printf("%.4f ", s2[i].c);
+    printf("\n");
+
+    printf("\n");
+    printf("Field a : \n");
+    for( i = 0; i < LENGTH; i++) printf("%d ", s2[i].a);
+    printf("\n");
+
+    /* 
+     * Create a datatype for s3.
+     */
+    s3_tid = H5Tcreate(H5T_COMPOUND, sizeof(float));
+
+    status = H5Tinsert(s3_tid, "b_name", 0, H5T_NATIVE_FLOAT);
+
+    /*
+     * Read field b from s1 dataset. Field in the file is found by its name.
+     */
+    status = H5Dread(dataset, s3_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s3);
+
+    /*
+     * Display the field
+     */
+    printf("\n");
+    printf("Field b : \n");
+    for( i = 0; i < LENGTH; i++) printf("%.4f ", s3[i]);
+    printf("\n");
+
+    /*
+     * Release resources
+     */
+    H5Tclose(s2_tid);
+    H5Tclose(s3_tid);
+    H5Dclose(dataset);
+    H5Fclose(file);
+
+    return 0;
+}
+</pre>
+
+
+
+
+<P>&nbsp;
+<p align=right><font size=-1><a href="#IEx-TOC">(Return to TOC)</a></font>
+
+
+<H4><A NAME="CreateExtendWrite"><A NAME="_Toc429885328"></A>Example 5. Creating and writing an extendible dataset.</A></H4>
+<P>This example shows how to create a 3x3 extendible dataset, to extend the dataset to 10x3, then to extend it again to 10x5.
+<PRE>
+<!-- Insert Example 5, h5_extend_write.c, here. -->
+/*  
+ *   This example shows how to work with extendible dataset.
+ *   In the current version of the library dataset MUST be
+ *   chunked.
+ *   
+ */
+ 
+#include "hdf5.h"
+
+#define FILE        "SDSextendible.h5"
+#define DATASETNAME "ExtendibleArray" 
+#define RANK         2
+#define NX     10
+#define NY     5 
+
+int
+main (void)
+{
+    hid_t       file;                          /* handles */
+    hid_t       dataspace, dataset;  
+    hid_t       filespace;                   
+    hid_t       cparms;                     
+    hsize_t      dims[2]  = { 3, 3};            /*
+						 * dataset dimensions				
+						 * at the creation time
+						 */
+    hsize_t      dims1[2] = { 3, 3};            /* data1 dimensions */ 
+    hsize_t      dims2[2] = { 7, 1};            /* data2 dimensions */  
+    hsize_t      dims3[2] = { 2, 2};            /* data3 dimensions */ 
+
+    hsize_t      maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};
+    hsize_t      chunk_dims[2] ={2, 5};
+    hsize_t      size[2];
+    hsize_t      offset[2];
+
+    herr_t      status;                             
+
+    int         data1[3][3] = { {1, 1, 1},       /* data to write */
+				{1, 1, 1},
+				{1, 1, 1} };      
+
+    int         data2[7]    = { 2, 2, 2, 2, 2, 2, 2};
+
+    int         data3[2][2] = { {3, 3},
+				{3, 3} };
+
+    /*
+     * Create the data space with unlimited dimensions. 
+     */
+    dataspace = H5Screate_simple(RANK, dims, maxdims); 
+
+    /*
+     * Create a new file. If file exists its contents will be overwritten.
+     */
+    file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* 
+     * Modify dataset creation properties, i.e. enable chunking.
+     */
+    cparms = H5Pcreate (H5P_DATASET_CREATE);
+    status = H5Pset_chunk( cparms, RANK, chunk_dims);
+
+    /*
+     * Create a new dataset within the file using cparms
+     * creation properties.
+     */
+    dataset = H5Dcreate(file, DATASETNAME, H5T_NATIVE_INT, dataspace,
+			cparms);
+
+    /*
+     * Extend the dataset. This call assures that dataset is at least 3 x 3.
+     */
+    size[0]   = 3; 
+    size[1]   = 3; 
+    status = H5Dextend (dataset, size);
+
+    /*
+     * Select a hyperslab.
+     */
+    filespace = H5Dget_space (dataset);
+    offset[0] = 0;
+    offset[1] = 0;
+    status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL,
+				 dims1, NULL);  
+
+    /*
+     * Write the data to the hyperslab.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, dataspace, filespace,
+		      H5P_DEFAULT, data1);
+
+    /*
+     * Extend the dataset. Dataset becomes 10 x 3.
+     */
+    dims[0]   = dims1[0] + dims2[0];
+    size[0]   = dims[0];  
+    size[1]   = dims[1]; 
+    status = H5Dextend (dataset, size);
+
+    /*
+     * Select a hyperslab.
+     */
+    filespace = H5Dget_space (dataset);
+    offset[0] = 3;
+    offset[1] = 0;
+    status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL,
+				 dims2, NULL);  
+
+    /*
+     * Define memory space
+     */
+    dataspace = H5Screate_simple(RANK, dims2, NULL); 
+
+    /*
+     * Write the data to the hyperslab.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, dataspace, filespace,
+		      H5P_DEFAULT, data2);
+
+    /*
+     * Extend the dataset. Dataset becomes 10 x 5.
+     */
+    dims[1]   = dims1[1] + dims3[1];
+    size[0]   = dims[0];  
+    size[1]   = dims[1]; 
+    status = H5Dextend (dataset, size);
+
+    /*
+     * Select a hyperslab
+     */
+    filespace = H5Dget_space (dataset);
+    offset[0] = 0;
+    offset[1] = 3;
+    status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL, 
+				 dims3, NULL);  
+
+    /*
+     * Define memory space.
+     */
+    dataspace = H5Screate_simple(RANK, dims3, NULL); 
+
+    /*
+     * Write the data to the hyperslab.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, dataspace, filespace,
+		      H5P_DEFAULT, data3);
+
+    /*
+     * Resulting dataset
+     * 
+     *	 1 1 1 3 3
+     *	 1 1 1 3 3
+     *	 1 1 1 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     */
+    /*
+     * Close/release resources.
+     */
+    H5Dclose(dataset);
+    H5Sclose(dataspace);
+    H5Sclose(filespace);
+    H5Fclose(file);
+
+    return 0;
+}     
+</pre>
+
+
+
+
+<P>&nbsp;
+<p align=right><font size=-1><a href="#IEx-TOC">(Return to TOC)</a></font>
+
+
+<H4><A NAME="ReadExtended"><A NAME="_Toc429885329"></A>Example 6. Reading data.</A></H4>
+<P>This example shows how to read information the chunked dataset written by <A HREF="#CreateExtendWrite">Example 5</A>.
+<PRE>
+<!-- Insert Example 6, h5_chunk_read.c, here. -->
+/*  
+ *   This example shows how to read data from a chunked dataset.
+ *   We will read from the file created by h5_extend_write.c 
+ */
+ 
+#include "hdf5.h"
+
+#define FILE        "SDSextendible.h5"
+#define DATASETNAME "ExtendibleArray" 
+#define RANK         2
+#define RANKC        1
+#define NX           10
+#define NY           5 
+
+int
+main (void)
+{
+    hid_t       file;                        /* handles */
+    hid_t       dataset;  
+    hid_t       filespace;                   
+    hid_t       memspace;                  
+    hid_t       cparms;                   
+    hsize_t     dims[2];                     /* dataset and chunk dimensions*/ 
+    hsize_t     chunk_dims[2];
+    hsize_t     col_dims[1];
+    hsize_t     count[2];
+    hsize_t     offset[2];
+
+    herr_t      status, status_n;                             
+
+    int         data_out[NX][NY];  /* buffer for dataset to be read */
+    int         chunk_out[2][5];   /* buffer for chunk to be read */
+    int         column[10];        /* buffer for column to be read */
+    int         rank, rank_chunk;
+    hsize_t	i, j;
+    
+
+ 
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    dataset = H5Dopen(file, DATASETNAME);
+ 
+    /*
+     * Get dataset rank and dimension.
+     */
+
+    filespace = H5Dget_space(dataset);    /* Get filespace handle first. */
+    rank      = H5Sget_simple_extent_ndims(filespace);
+    status_n  = H5Sget_simple_extent_dims(filespace, dims, NULL);
+    printf("dataset rank %d, dimensions %lu x %lu\n",
+	   rank, (unsigned long)(dims[0]), (unsigned long)(dims[1]));
+
+    /*
+     * Get creation properties list.
+     */
+    cparms = H5Dget_create_plist(dataset); /* Get properties handle first. */
+
+    /* 
+     * Check if dataset is chunked.
+     */
+    if (H5D_CHUNKED == H5Pget_layout(cparms))  {
+
+	/*
+	 * Get chunking information: rank and dimensions
+	 */
+	rank_chunk = H5Pget_chunk(cparms, 2, chunk_dims);
+	printf("chunk rank %d, dimensions %lu x %lu\n", rank_chunk,
+	       (unsigned long)(chunk_dims[0]), (unsigned long)(chunk_dims[1]));
+    }
+ 
+    /*
+     * Define the memory space to read dataset.
+     */
+    memspace = H5Screate_simple(RANK,dims,NULL);
+ 
+    /*
+     * Read dataset back and display.
+     */
+    status = H5Dread(dataset, H5T_NATIVE_INT, memspace, filespace,
+		     H5P_DEFAULT, data_out);
+    printf("\n");
+    printf("Dataset: \n");
+    for (j = 0; j < dims[0]; j++) {
+	for (i = 0; i < dims[1]; i++) printf("%d ", data_out[j][i]);
+	printf("\n");
+    }     
+
+    /*
+     *	    dataset rank 2, dimensions 10 x 5 
+     *	    chunk rank 2, dimensions 2 x 5 
+
+     *	    Dataset:
+     *	    1 1 1 3 3 
+     *	    1 1 1 3 3 
+     *	    1 1 1 0 0 
+     *	    2 0 0 0 0 
+     *	    2 0 0 0 0 
+     *	    2 0 0 0 0 
+     *	    2 0 0 0 0 
+     *	    2 0 0 0 0 
+     *	    2 0 0 0 0 
+     *	    2 0 0 0 0 
+     */
+
+    /*
+     * Read the third column from the dataset.
+     * First define memory dataspace, then define hyperslab
+     * and read it into column array.
+     */
+    col_dims[0] = 10;
+    memspace =  H5Screate_simple(RANKC, col_dims, NULL);
+
+    /*
+     * Define the column (hyperslab) to read.
+     */
+    offset[0] = 0;
+    offset[1] = 2;
+    count[0]  = 10;
+    count[1]  = 1;
+    status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL,
+				 count, NULL);
+    status = H5Dread(dataset, H5T_NATIVE_INT, memspace, filespace,
+		     H5P_DEFAULT, column);
+    printf("\n");
+    printf("Third column: \n");
+    for (i = 0; i < 10; i++) {
+	printf("%d \n", column[i]);
+    }
+
+    /*
+     *	    Third column: 
+     *	    1 
+     *	    1 
+     *	    1 
+     *	    0 
+     *	    0 
+     *	    0 
+     *	    0 
+     *	    0 
+     *	    0 
+     *	    0 
+     */
+
+    /*
+     * Define the memory space to read a chunk.
+     */
+    memspace = H5Screate_simple(rank_chunk,chunk_dims,NULL);
+
+    /*
+     * Define chunk in the file (hyperslab) to read.
+     */
+    offset[0] = 2;
+    offset[1] = 0;
+    count[0]  = chunk_dims[0];
+    count[1]  = chunk_dims[1];
+    status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL, 
+				 count, NULL);
+
+    /*
+     * Read chunk back and display.
+     */
+    status = H5Dread(dataset, H5T_NATIVE_INT, memspace, filespace,
+		     H5P_DEFAULT, chunk_out);
+    printf("\n");
+    printf("Chunk: \n");
+    for (j = 0; j < chunk_dims[0]; j++) {
+	for (i = 0; i < chunk_dims[1]; i++) printf("%d ", chunk_out[j][i]);
+	printf("\n");
+    }     
+    /*
+     *	 Chunk: 
+     *	 1 1 1 0 0 
+     *	 2 0 0 0 0 
+     */
+
+    /*
+     * Close/release resources.
+     */
+    H5Pclose(cparms);
+    H5Dclose(dataset);
+    H5Sclose(filespace);
+    H5Sclose(memspace);
+    H5Fclose(file);
+
+    return 0;
+}
+
+</pre>
+
+
+
+
+<P>&nbsp;
+<p align=right><font size=-1><a href="#IEx-TOC">(Return to TOC)</a></font>
+
+
+<H4><A NAME="CreateGroups"><A NAME="_Toc429885330"></A>Example 7. Creating groups.</A></H4>
+<P>This example shows how to create and access a group in an 
+HDF5 file and to place a dataset within this group.  
+It also illustrates the usage of the <code>H5Giterate</code>, 
+<code>H5Glink</code>, and <code>H5Gunlink</code> functions.
+
+<PRE>
+<!-- Insert Example 7, h5_group.c, here. -->
+/*
+ * This example creates a group in the file and dataset in the group. 
+ * Hard link to the group object is created and the dataset is accessed
+ * under different names. 
+ * Iterator function is used to find the object names in the root group.
+ */ 
+
+
+#include "hdf5.h"
+
+
+#define FILE    "group.h5"
+#define RANK    2
+
+ 
+herr_t file_info(hid_t loc_id, const char *name, void *opdata);
+                                     /* Operator function */
+int
+main(void)
+{
+
+    hid_t    file;
+    hid_t    grp;
+    hid_t    dataset, dataspace;
+    hid_t    plist; 
+
+    herr_t   status;
+    hsize_t  dims[2];
+    hsize_t  cdims[2];
+ 
+    int      idx;
+
+    /*
+     * Create a file.
+     */
+    file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Create a group in the file. 
+     */
+    grp = H5Gcreate(file, "/Data", 0);
+
+    /*
+     * Create dataset "Compressed Data" in the group using absolute
+     * name. Dataset creation property list is modified to use 
+     * GZIP compression with the compression effort set to 6. 
+     * Note that compression can be used only when dataset is chunked. 
+     */
+    dims[0] = 1000;
+    dims[1] = 20;
+    cdims[0] = 20;
+    cdims[1] = 20;
+    dataspace = H5Screate_simple(RANK, dims, NULL);
+    plist     = H5Pcreate(H5P_DATASET_CREATE);
+                H5Pset_chunk(plist, 2, cdims);
+                H5Pset_deflate( plist, 6); 
+    dataset = H5Dcreate(file, "/Data/Compressed_Data", H5T_NATIVE_INT, 
+                        dataspace, plist); 
+ 
+    /* 
+     * Close the dataset and the file.
+     */
+    H5Sclose(dataspace);
+    H5Dclose(dataset);
+    H5Fclose(file);
+
+    /*
+     * Now reopen the file and group in the file. 
+     */
+    file = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+    grp  = H5Gopen(file, "Data");
+
+    /* 
+     * Access "Compressed_Data" dataset in the group. 
+     */
+    dataset = H5Dopen(grp, "Compressed_Data");
+    if( dataset < 0) printf(" Dataset is not found. \n");
+    printf("\"/Data/Compressed_Data\" dataset is open \n");
+
+    /*
+     * Close the dataset.
+     */
+    status = H5Dclose(dataset);
+
+    /*
+     * Create hard link to the Data group.
+     */
+    status = H5Glink(file, H5G_LINK_HARD, "Data", "Data_new");
+
+    /* 
+     * We can access "Compressed_Data" dataset using created
+     * hard link "Data_new". 
+     */
+    dataset = H5Dopen(file, "/Data_new/Compressed_Data");
+    if( dataset < 0) printf(" Dataset is not found. \n");
+    printf("\"/Data_new/Compressed_Data\" dataset is open \n");
+
+    /*
+     * Close the dataset.
+     */
+    status = H5Dclose(dataset);
+
+    /* 
+     * Use iterator to see the names of the objects in the file
+     * root directory.
+     */
+    idx = H5Giterate(file, "/", NULL, file_info, NULL);
+
+    /*
+     * Unlink  name "Data" and use iterator to see the names
+     * of the objects in the file root direvtory.
+     */
+    if (H5Gunlink(file, "Data") < 0)  
+      printf(" H5Gunlink failed \n");
+    else  
+      printf("\"Data\" is unlinked \n");
+
+    idx = H5Giterate(file, "/", NULL, file_info, NULL);
+    
+
+    /*
+     * Close the file.
+     */
+     
+    status = H5Fclose(file);
+
+    return 0;
+}
+/*
+ * Operator function.
+ */
+herr_t
+file_info(hid_t loc_id, const char *name, void *opdata)
+{
+    hid_t grp;
+    /*
+     * Open the group using its name.
+     */
+    grp = H5Gopen(loc_id, name);
+ 
+    /*
+     * Display group name.
+     */
+    printf("\n");
+    printf("Name : ");
+    puts(name);
+    
+    H5Gclose(grp);
+    return 0;
+ }
+</pre>
+
+
+
+
+<P>&nbsp;
+<p align=right><font size=-1><a href="#IEx-TOC">(Return to TOC)</a></font>
+
+
+<H4><A NAME="_Toc429885332"><A NAME="ReadWriteAttributes">Example 8</A>. Writing and reading attributes.</A></H4>
+<P>This example shows how to create HDF5 attributes, to attach them to a dataset, and to read through all of the attributes of a dataset. 
+
+<pre>
+<!-- Insert Example 8, h5_attribute.c, here. -->
+/* 
+ *  This program illustrates the usage of the H5A Interface functions.
+ *  It creates and writes a dataset, and then creates and writes array,
+ *  scalar, and string attributes of the dataset. 
+ *  Program reopens the file, attaches to the scalar attribute using
+ *  attribute name and reads and displays its value. Then index of the
+ *  third attribute is used to read and display attribute values.
+ *  The H5Aiterate function is used to iterate through the dataset attributes,
+ *  and display their names. The function is also reads and displays the values 
+ *  of the array attribute. 
+ */ 
+ 
+#include <stdlib.h>
+#include <hdf5.h>
+
+#define FILE "Attributes.h5"
+
+#define RANK  1   /* Rank and size of the dataset  */ 
+#define SIZE  7
+
+#define ARANK  2   /* Rank and dimension sizes of the first dataset attribute */
+#define ADIM1  2
+#define ADIM2  3 
+#define ANAME  "Float attribute"      /* Name of the array attribute */
+#define ANAMES "Character attribute" /* Name of the string attribute */
+
+herr_t attr_info(hid_t loc_id, const char *name, void *opdata); 
+                                     /* Operator function */
+
+int 
+main (void)
+{
+
+   hid_t   file, dataset;       /* File and dataset identifiers */
+   
+   hid_t   fid;                 /* Dataspace identifier */
+   hid_t   attr1, attr2, attr3; /* Attribute identifiers */
+   hid_t   attr;
+   hid_t   aid1, aid2, aid3;    /* Attribute dataspace identifiers */ 
+   hid_t   atype;               /* Attribute type */
+
+   hsize_t fdim[] = {SIZE};
+   hsize_t adim[] = {ADIM1, ADIM2};  /* Dimensions of the first attribute  */
+   
+   float matrix[ADIM1][ADIM2]; /* Attribute data */ 
+
+   herr_t  ret;                /* Return value */
+   uint    i,j;                /* Counters */
+   int     idx;                /* Attribute index */
+   char    string_out[80];     /* Buffer to read string attribute back */
+   int     point_out;          /* Buffer to read scalar attribute back */
+
+   /*
+    * Data initialization.
+    */
+   int vector[] = {1, 2, 3, 4, 5, 6, 7};  /* Dataset data */
+   int point = 1;                         /* Value of the scalar attribute */ 
+   char string[] = "ABCD";                /* Value of the string attribute */
+
+   
+   for (i=0; i < ADIM1; i++) {            /* Values of the array attribute */
+       for (j=0; j < ADIM2; j++)
+       matrix[i][j] = -1.;
+   }
+
+   /*
+    * Create a file.
+    */
+   file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* 
+    * Create the dataspace for the dataset in the file.
+    */
+   fid = H5Screate(H5S_SIMPLE);
+   ret = H5Sset_extent_simple(fid, RANK, fdim, NULL);
+
+   /*
+    * Create the dataset in the file.
+    */
+   dataset = H5Dcreate(file, "Dataset", H5T_NATIVE_INT, fid, H5P_DEFAULT);
+
+   /*
+    * Write data to the dataset.
+    */
+   ret = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL , H5S_ALL, H5P_DEFAULT, vector);
+
+   /*
+    * Create dataspace for the first attribute. 
+    */
+   aid1 = H5Screate(H5S_SIMPLE);
+   ret  = H5Sset_extent_simple(aid1, ARANK, adim, NULL);
+
+   /*
+    * Create array attribute.
+    */
+   attr1 = H5Acreate(dataset, ANAME, H5T_NATIVE_FLOAT, aid1, H5P_DEFAULT);
+
+   /*
+    * Write array attribute.
+    */
+   ret = H5Awrite(attr1, H5T_NATIVE_FLOAT, matrix);
+
+   /*
+    * Create scalar attribute.
+    */
+   aid2  = H5Screate(H5S_SCALAR);
+   attr2 = H5Acreate(dataset, "Integer attribute", H5T_NATIVE_INT, aid2,
+                     H5P_DEFAULT);
+
+   /*
+    * Write scalar attribute.
+    */
+   ret = H5Awrite(attr2, H5T_NATIVE_INT, &point); 
+
+   /*
+    * Create string attribute.
+    */
+   aid3  = H5Screate(H5S_SCALAR);
+   atype = H5Tcopy(H5T_C_S1);
+           H5Tset_size(atype, 4);
+   attr3 = H5Acreate(dataset, ANAMES, atype, aid3, H5P_DEFAULT);
+
+   /*
+    * Write string attribute.
+    */
+   ret = H5Awrite(attr3, atype, string); 
+
+   /*
+    * Close attribute and file dataspaces.
+    */
+   ret = H5Sclose(aid1); 
+   ret = H5Sclose(aid2); 
+   ret = H5Sclose(aid3); 
+   ret = H5Sclose(fid); 
+
+   /*
+    * Close the attributes.
+    */ 
+   ret = H5Aclose(attr1);
+   ret = H5Aclose(attr2);
+   ret = H5Aclose(attr3);
+ 
+   /*
+    * Close the dataset.
+    */
+   ret = H5Dclose(dataset);
+
+   /*
+    * Close the file.
+    */
+   ret = H5Fclose(file);
+
+   /*
+    * Reopen the file.
+    */
+   file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+
+   /*
+    * Open the dataset.
+    */
+   dataset = H5Dopen(file,"Dataset");
+
+   /*
+    * Attach to the scalar attribute using attribute name, then read and 
+    * display its value.
+    */
+   attr = H5Aopen_name(dataset,"Integer attribute");
+   ret  = H5Aread(attr, H5T_NATIVE_INT, &point_out);
+   printf("The value of the attribute \"Integer attribute\" is %d \n", point_out); 
+   ret =  H5Aclose(attr);
+
+   /*
+    * Attach to the string attribute using its index, then read and display the value.
+    */
+   attr  = H5Aopen_idx(dataset, 2);
+   atype = H5Tcopy(H5T_C_S1);
+           H5Tset_size(atype, 4);
+   ret   = H5Aread(attr, atype, string_out);
+   printf("The value of the attribute with the index 2 is %s \n", string_out);
+   ret   = H5Aclose(attr);
+   ret   = H5Tclose(atype);
+
+   /*
+    * Get attribute info using iteration function. 
+    */
+   idx = H5Aiterate(dataset, NULL, attr_info, NULL);
+
+   /*
+    * Close the dataset and the file.
+    */
+   H5Dclose(dataset);
+   H5Fclose(file);
+
+   return 0;  
+}
+
+/*
+ * Operator function.
+ */
+herr_t 
+attr_info(hid_t loc_id, const char *name, void *opdata)
+{
+    hid_t attr, atype, aspace;  /* Attribute, datatype and dataspace identifiers */
+    int   rank;
+    hsize_t sdim[64]; 
+    herr_t ret;
+    int i;
+    size_t npoints;             /* Number of elements in the array attribute. */ 
+    float *float_array;         /* Pointer to the array attribute. */
+    /*
+     * Open the attribute using its name.
+     */    
+    attr = H5Aopen_name(loc_id, name);
+
+    /*
+     * Display attribute name.
+     */
+    printf("\n");
+    printf("Name : ");
+    puts(name);
+
+    /* 
+     * Get attribute datatype, dataspace, rank, and dimensions.
+     */
+    atype  = H5Aget_type(attr);
+    aspace = H5Aget_space(attr);
+    rank = H5Sget_simple_extent_ndims(aspace);
+    ret = H5Sget_simple_extent_dims(aspace, sdim, NULL);
+
+    /*
+     *  Display rank and dimension sizes for the array attribute.
+     */
+
+    if(rank > 0) {
+    printf("Rank : %d \n", rank); 
+    printf("Dimension sizes : ");
+    for (i=0; i< rank; i++) printf("%d ", (int)sdim[i]);
+    printf("\n");
+    }
+
+    /*
+     * Read array attribute and display its type and values.
+     */
+
+    if (H5T_FLOAT == H5Tget_class(atype)) {
+    printf("Type : FLOAT \n"); 
+    npoints = H5Sget_simple_extent_npoints(aspace);
+    float_array = (float *)malloc(sizeof(float)*(int)npoints); 
+    ret = H5Aread(attr, atype, float_array);
+    printf("Values : ");
+    for( i = 0; i < (int)npoints; i++) printf("%f ", float_array[i]); 
+    printf("\n");
+    free(float_array);
+    }
+
+    /*
+     * Release all identifiers.
+     */
+    H5Tclose(atype);
+    H5Sclose(aspace);
+    H5Aclose(attr);
+
+    return 0;
+}
+</pre>
+
+
+
+<P>&nbsp;
+<p align=right><font size=-1><a href="#IEx-TOC">(Return to TOC)</a></font>
+
+
+<H4><A NAME="CreateWriteRefObj">Example 9</A>. Creating and storing references to objects.</A></H4>
+This example creates a group and two datasets and a named datatype 
+in the group. References to these four objects are stored in the dataset 
+in the root group.  
+
+<PRE>
+
+#include &lt;hdf5.h&gt;
+
+#define FILE1   "trefer1.h5"
+
+/* 1-D dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	1
+#define SPACE1_DIM1	4
+
+/* 2-D dataset with fixed dimensions */
+#define SPACE2_NAME  "Space2"
+#define SPACE2_RANK	2
+#define SPACE2_DIM1	10
+#define SPACE2_DIM2	10
+
+int 
+main(void) {
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		group;      /* Group ID             */
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1;       /* Datatype ID			*/
+    hsize_t		dims1[] = {SPACE1_DIM1};
+    hobj_ref_t      *wbuf;      /* buffer to write to disk */
+    int       *tu32;      /* Temporary pointer to int data */
+    int        i;          /* counting variables */
+    const char *write_comment="Foo!"; /* Comments for group */
+    herr_t		ret;		/* Generic return value		*/
+
+/* Compound datatype */
+typedef struct s1_t {
+    unsigned int a;
+    unsigned int b;
+    float c;
+} s1_t;
+
+    /* Allocate write buffers */
+    wbuf=(hobj_ref_t *)malloc(sizeof(hobj_ref_t)*SPACE1_DIM1);
+    tu32=malloc(sizeof(int)*SPACE1_DIM1);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+
+    /* Create a group */
+    group=H5Gcreate(fid1,"Group1",-1);
+
+    /* Set group's comment */
+    ret=H5Gset_comment(group,".",write_comment);
+
+    /* Create a dataset (inside Group1) */
+    dataset=H5Dcreate(group,"Dataset1",H5T_STD_U32LE,sid1,H5P_DEFAULT);
+
+    for(i=0; i &lt; SPACE1_DIM1; i++)
+        tu32[i] = i*3;
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,tu32);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+
+    /* Create another dataset (inside Group1) */
+    dataset=H5Dcreate(group,"Dataset2",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tcreate (H5T_COMPOUND, sizeof(s1_t));
+
+    /* Insert fields */
+    ret=H5Tinsert (tid1, "a", HOFFSET(s1_t,a), H5T_NATIVE_INT);
+
+    ret=H5Tinsert (tid1, "b", HOFFSET(s1_t,b), H5T_NATIVE_INT);
+
+    ret=H5Tinsert (tid1, "c", HOFFSET(s1_t,c), H5T_NATIVE_FLOAT);
+
+    /* Save datatype for later */
+    ret=H5Tcommit (group, "Datatype1", tid1);
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+
+    /* Close group */
+    ret = H5Gclose(group);
+
+    /* Create a dataset to store references */
+    dataset=H5Dcreate(fid1,"Dataset3",H5T_STD_REF_OBJ,sid1,H5P_DEFAULT);
+
+    /* Create reference to dataset */
+    ret = H5Rcreate(&wbuf[0],fid1,"/Group1/Dataset1",H5R_OBJECT,-1);
+
+    /* Create reference to dataset */
+    ret = H5Rcreate(&wbuf[1],fid1,"/Group1/Dataset2",H5R_OBJECT,-1);
+
+    /* Create reference to group */
+    ret = H5Rcreate(&wbuf[2],fid1,"/Group1",H5R_OBJECT,-1);
+
+    /* Create reference to named datatype */
+    ret = H5Rcreate(&wbuf[3],fid1,"/Group1/Datatype1",H5R_OBJECT,-1);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_STD_REF_OBJ,H5S_ALL,H5S_ALL,H5P_DEFAULT,wbuf);
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    free(wbuf);
+    free(tu32);
+    return 0;
+}
+
+</PRE>
+
+
+
+
+<P>&nbsp;
+<p align=right><font size=-1><a href="#IEx-TOC">(Return to TOC)</a></font>
+
+
+<H4><A NAME="ReadRefObj">Example 10</A>. Reading references to objects.</A></H4>
+This example opens and reads dataset <code>Dataset3</code> from 
+the file created in Example 9. Then the program dereferences the references 
+to dataset <code>Dataset1</code>, the group and the named datatype,
+and opens those objects. 
+The program reads and displays the dataset's data, the group's comment, and 
+the number of members of the compound datatype.
+
+
+<PRE>
+
+#include &lt;stdlib.h&gt;
+#include &lt;hdf5.h&gt;
+
+#define FILE1   "trefer1.h5"
+
+/* dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	1
+#define SPACE1_DIM1	4
+
+int 
+main(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset,	/* Dataset ID			*/
+                dset2;      /* Dereferenced dataset ID */
+    hid_t		group;      /* Group ID             */
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1;       /* Datatype ID			*/
+    hobj_ref_t      *rbuf;      /* buffer to read from disk */
+    int                *tu32;      /* temp. buffer read from disk */
+    int        i;          /* counting variables */
+    char read_comment[10];
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Allocate read buffers */
+    rbuf = malloc(sizeof(hobj_ref_t)*SPACE1_DIM1);
+    tu32 = malloc(sizeof(int)*SPACE1_DIM1);
+
+    /* Open the file */
+    fid1 = H5Fopen(FILE1, H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,"/Dataset3");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_STD_REF_OBJ,H5S_ALL,H5S_ALL,H5P_DEFAULT,rbuf);
+
+    /* Open dataset object */
+    dset2 = H5Rdereference(dataset,H5R_OBJECT,&rbuf[0]);
+
+    /* Check information in referenced dataset */
+    sid1 = H5Dget_space(dset2);
+
+    ret=H5Sget_simple_extent_npoints(sid1);
+
+    /* Read from disk */
+    ret=H5Dread(dset2,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,tu32);
+    printf("Dataset data : \n");
+     for (i=0; i &lt; SPACE1_DIM1 ; i++) printf (" %d ", tu32[i]);
+    printf("\n");
+    printf("\n");
+
+    /* Close dereferenced Dataset */
+    ret = H5Dclose(dset2);
+
+    /* Open group object */
+    group = H5Rdereference(dataset,H5R_OBJECT,&rbuf[2]);
+
+    /* Get group's comment */
+    ret=H5Gget_comment(group,".",10,read_comment);
+    printf("Group comment is %s \n", read_comment);
+    printf(" \n");
+    /* Close group */
+    ret = H5Gclose(group);
+
+    /* Open datatype object */
+    tid1 = H5Rdereference(dataset,H5R_OBJECT,&rbuf[3]);
+
+    /* Verify correct datatype */
+    {
+        H5T_class_t tclass;
+
+        tclass= H5Tget_class(tid1);
+        if ((tclass == H5T_COMPOUND))
+           printf ("Number of compound datatype members is %d \n", H5Tget_nmembers(tid1)); 
+    printf(" \n");
+    }
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+
+    /* Free memory buffers */
+    free(rbuf);
+    free(tu32);
+    return 0;
+}   
+
+</PRE>
+
+
+
+<P>&nbsp;
+<p align=right><font size=-1><a href="#IEx-TOC">(Return to TOC)</a></font>
+
+
+<H4><A NAME="CreateWriteRefReg">Example 11</A>. Creating and writing a reference to a region.</A></H4>
+
+This example creates a dataset in the file. Then it creates a dataset 
+to store references to the dataset regions (selections).
+The first selection is a 6 x 6 hyperslab. 
+The second selection is a point selection in the same dataset.
+References to both selections are created and stored in the buffer, 
+and then written to the dataset in the file.
+
+<pre>
+#include &lt;stdlib.h&gt;
+#include &lt;hdf5.h&gt;
+
+#define FILE2	"trefer2.h5"
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK     1
+#define SPACE1_DIM1     4
+
+/* Dataset with fixed dimensions */
+#define SPACE2_NAME  "Space2"
+#define SPACE2_RANK	2
+#define SPACE2_DIM1	10
+#define SPACE2_DIM2	10
+
+/* Element selection information */
+#define POINT1_NPOINTS 10
+
+int
+main(void)
+{
+    hid_t	fid1;		/* HDF5 File IDs		*/
+    hid_t	dset1,		/* Dataset ID			*/
+                dset2;      /* Dereferenced dataset ID */
+    hid_t	sid1,       /* Dataspace ID	#1		*/
+                sid2;       /* Dataspace ID	#2		*/
+    hsize_t	dims1[] = {SPACE1_DIM1},
+            	dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t	start[SPACE2_RANK];     /* Starting location of hyperslab */
+    hsize_t	stride[SPACE2_RANK];    /* Stride of hyperslab */
+    hsize_t	count[SPACE2_RANK];     /* Element count of hyperslab */
+    hsize_t	block[SPACE2_RANK];     /* Block size of hyperslab */
+    hsize_t	coord1[POINT1_NPOINTS][SPACE2_RANK]; 
+                                    /* Coordinates for point selection */
+    hdset_reg_ref_t      *wbuf;      /* buffer to write to disk */
+    int     *dwbuf;      /* Buffer for writing numeric data to disk */
+    int        i;          /* counting variables */
+    herr_t		ret;		/* Generic return value		*/
+
+
+    /* Allocate write & read buffers */
+    wbuf=calloc(sizeof(hdset_reg_ref_t), SPACE1_DIM1);
+    dwbuf=malloc(sizeof(int)*SPACE2_DIM1*SPACE2_DIM2);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+
+    /* Create a dataset */
+    dset2=H5Dcreate(fid1,"Dataset2",H5T_STD_U8LE,sid2,H5P_DEFAULT);
+
+    for(i=0; i &lt; SPACE2_DIM1*SPACE2_DIM2; i++)
+        dwbuf[i]=i*3;
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dset2,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,dwbuf);
+
+    /* Close Dataset */
+    ret = H5Dclose(dset2);
+
+    /* Create dataspace for the reference dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+
+    /* Create a dataset */
+    dset1=H5Dcreate(fid1,"Dataset1",H5T_STD_REF_DSETREG,sid1,H5P_DEFAULT);
+
+    /* Create references */
+
+    /* Select 6x6 hyperslab for first reference */
+    start[0]=2; start[1]=2;
+    stride[0]=1; stride[1]=1;
+    count[0]=6; count[1]=6;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+
+    /* Store first dataset region */
+    ret = H5Rcreate(&wbuf[0],fid1,"/Dataset2",H5R_DATASET_REGION,sid2);
+
+    /* Select sequence of ten points for second reference */
+    coord1[0][0]=6; coord1[0][1]=9;
+    coord1[1][0]=2; coord1[1][1]=2;
+    coord1[2][0]=8; coord1[2][1]=4;
+    coord1[3][0]=1; coord1[3][1]=6;
+    coord1[4][0]=2; coord1[4][1]=8;
+    coord1[5][0]=3; coord1[5][1]=2;
+    coord1[6][0]=0; coord1[6][1]=4;
+    coord1[7][0]=9; coord1[7][1]=0;
+    coord1[8][0]=7; coord1[8][1]=1;
+    coord1[9][0]=3; coord1[9][1]=3;
+    ret = H5Sselect_elements(sid2,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord1);
+
+    /* Store second dataset region */
+    ret = H5Rcreate(&wbuf[1],fid1,"/Dataset2",H5R_DATASET_REGION,sid2);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dset1,H5T_STD_REF_DSETREG,H5S_ALL,H5S_ALL,H5P_DEFAULT,wbuf);
+
+    /* Close all objects */
+    ret = H5Sclose(sid1);
+    ret = H5Dclose(dset1);
+    ret = H5Sclose(sid2);
+    
+    /* Close file */
+    ret = H5Fclose(fid1);
+
+    free(wbuf);
+    free(dwbuf);
+    return 0;
+}   
+
+</pre>
+
+
+
+<P>&nbsp;
+<p align=right><font size=-1><a href="#IEx-TOC">(Return to TOC)</a></font>
+
+
+<H4><A NAME="ReadRefReg">Example 12</A>. Reading a reference to a region.</A></H4>
+
+This example reads a dataset containing dataset region references.
+It reads data from the dereferenced dataset and displays the number of 
+elements and raw data. Then it reads two selections:
+a hyperslab selection and a point selection. The program queries a 
+number of points in the hyperslab  and the coordinates and displays them. 
+Then it queries a number of selected points and their coordinates and 
+displays the information.
+
+<PRE>
+   
+#include &lt;stdlib.h&gt;
+#include &lt;hdf5.h&gt;
+
+#define FILE2	"trefer2.h5"
+#define NPOINTS 10
+ 
+/* 1-D dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	1
+#define SPACE1_DIM1	4
+
+/* 2-D dataset with fixed dimensions */
+#define SPACE2_NAME  "Space2"
+#define SPACE2_RANK	2
+#define SPACE2_DIM1	10
+#define SPACE2_DIM2	10
+
+int 
+main(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dset1,	/* Dataset ID			*/
+                dset2;      /* Dereferenced dataset ID */
+    hid_t		sid1,       /* Dataspace ID	#1		*/
+                sid2;       /* Dataspace ID	#2		*/
+    hsize_t *   coords;             /* Coordinate buffer */
+    hsize_t		low[SPACE2_RANK];   /* Selection bounds */
+    hsize_t		high[SPACE2_RANK];     /* Selection bounds */
+    hdset_reg_ref_t      *rbuf;      /* buffer to to read disk */
+    int    *drbuf;      /* Buffer for reading numeric data from disk */
+    int        i, j;          /* counting variables */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+
+    /* Allocate write & read buffers */
+    rbuf=malloc(sizeof(hdset_reg_ref_t)*SPACE1_DIM1);
+    drbuf=calloc(sizeof(int),SPACE2_DIM1*SPACE2_DIM2);
+
+    /* Open the file */
+    fid1 = H5Fopen(FILE2, H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* Open the dataset */
+    dset1=H5Dopen(fid1,"/Dataset1");
+
+    /* Read selection from disk */
+    ret=H5Dread(dset1,H5T_STD_REF_DSETREG,H5S_ALL,H5S_ALL,H5P_DEFAULT,rbuf);
+
+    /* Try to open objects */
+    dset2 = H5Rdereference(dset1,H5R_DATASET_REGION,&rbuf[0]);
+
+    /* Check information in referenced dataset */
+    sid1 = H5Dget_space(dset2);
+
+    ret=H5Sget_simple_extent_npoints(sid1);
+    printf(" Number of elements in the dataset is : %d\n",ret);
+
+    /* Read from disk */
+    ret=H5Dread(dset2,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,drbuf);
+
+    for(i=0; i &lt; SPACE2_DIM1; i++) {
+        for (j=0; j &lt; SPACE2_DIM2; j++) printf (" %d ", drbuf[i*SPACE2_DIM2+j]);
+        printf("\n"); }
+
+    /* Get the hyperslab selection */
+    sid2=H5Rget_region(dset1,H5R_DATASET_REGION,&rbuf[0]);
+
+    /* Verify correct hyperslab selected */
+    ret = H5Sget_select_npoints(sid2);
+    printf(" Number of elements in the hyperslab is : %d \n", ret);
+    ret = H5Sget_select_hyper_nblocks(sid2);
+    coords=malloc(ret*SPACE2_RANK*sizeof(hsize_t)*2); /* allocate space for the hyperslab blocks */
+    ret = H5Sget_select_hyper_blocklist(sid2,0,ret,coords);
+    printf(" Hyperslab coordinates are : \n");
+    printf (" ( %lu , %lu ) ( %lu , %lu ) \n", \
+(unsigned long)coords[0],(unsigned long)coords[1],(unsigned long)coords[2],(unsigned long)coords[3]); 
+    free(coords);
+    ret = H5Sget_select_bounds(sid2,low,high);
+
+    /* Close region space */
+    ret = H5Sclose(sid2);
+
+    /* Get the element selection */
+    sid2=H5Rget_region(dset1,H5R_DATASET_REGION,&rbuf[1]);
+
+    /* Verify correct elements selected */
+    ret = H5Sget_select_elem_npoints(sid2);
+    printf(" Number of selected elements is : %d\n", ret);
+
+    /* Allocate space for the element points */
+    coords= malloc(ret*SPACE2_RANK*sizeof(hsize_t)); 
+    ret = H5Sget_select_elem_pointlist(sid2,0,ret,coords);
+    printf(" Coordinates of selected elements are : \n");
+    for (i=0; i &lt; 2*NPOINTS; i=i+2) 
+         printf(" ( %lu , %lu ) \n", (unsigned long)coords[i],(unsigned long)coords[i+1]); 
+          
+    free(coords);
+    ret = H5Sget_select_bounds(sid2,low,high);
+
+    /* Close region space */
+    ret = H5Sclose(sid2);
+
+    /* Close first space */
+    ret = H5Sclose(sid1);
+
+    /* Close dereferenced Dataset */
+    ret = H5Dclose(dset2);
+
+    /* Close Dataset */
+    ret = H5Dclose(dset1);
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+
+    /* Free memory buffers */
+    free(rbuf);
+    free(drbuf);
+    return 0;
+}   
+
+</PRE>
+
+
+<P>&nbsp;
+<p align=right><font size=-1><a href="#IEx-TOC">(Return to TOC)</a></font> 
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_Intro.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="../H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+<a href="../RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+<a href="../index.html">Other HDF5 documents and links</a>&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<table width=100% border=0>
+<tr><td align=left valign=top> 
+
+<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem -->
+ 
+Last modified: 3 August 2004
+ 
+</td><td align=right valign=top>
+<a href="../Copyright.html">Copyright</a>&nbsp;&nbsp;
+</td></tr>
+</table>             
+
+
+</BODY>
+</HTML>

Added: packages/hdf5/branches/upstream/current/doc/html/Intro/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Intro/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Intro/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,32 @@
+# HDF5 Library Makefile(.in)
+#
+# 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.
+#
+# 
+top_srcdir=@top_srcdir@
+top_builddir=../../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order
+SUBDIRS=
+DOCDIR=$(docdir)/hdf5/Intro
+
+# Public doc files (to be installed)...
+PUB_DOCS=IntroExamples.html
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,56 @@
+# HDF5 Library Makefile(.in)
+#
+# 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.
+#
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+SUBDIRS=ADGuide Graphics Intro PSandPDF TechNotes Tutor \
+        cpplus cpplus_RM fortran ed_libs ed_styles 
+DOCDIR=$(docdir)/hdf5
+
+# Public doc files (to be installed)...
+PUB_DOCS=ADGuide.html Attributes.html Big.html Caching.html Chunk_f1.gif  \
+         Chunk_f2.gif Chunk_f3.gif Chunk_f4.gif Chunk_f5.gif Chunk_f6.gif \
+         Chunking.html Coding.html Copyright.html Datasets.html           \
+         Dataspaces.html Datatypes.html DatatypesEnum.html Debugging.html \
+         EnumMap.gif Environment.html Errors.html FF-IH_FileGroup.gif     \
+         FF-IH_FileObject.gif Files.html Filters.html Glossary.html       \
+         Groups.html H5.api_map.html H5.format.html H5.intro.html         \
+         H5.sample_code.html H5.user.PrintGen.html H5.user.PrintTpg.html  \
+         H5.user.html IH_map1.gif IH_map2.gif IH_map3.gif IH_map4.gif     \
+         IH_mapFoot.gif IH_mapHead.gif IOPipe.html MountingFiles.html     \
+         NCSAfooterlogo.gif Performance.html PredefDTypes.html            \
+         Properties.html RM_H5.html RM_H5A.html RM_H5D.html RM_H5E.html   \
+         RM_H5F.html RM_H5Front.html RM_H5G.html RM_H5I.html RM_H5P.html  \
+         RM_H5R.html RM_H5S.html RM_H5T.html RM_H5Z.html References.html  \
+         TechNotes.html Tools.html Version.html chunk1.gif compat.html    \
+         dataset_p1.gif ddl.html extern1.gif extern2.gif group_p1.gif     \
+         group_p2.gif group_p3.gif h5s.examples hdf2.jpg ph5design.html   \
+         ph5example.c ph5implement.txt pipe1.gif pipe2.gif pipe3.gif      \
+         pipe4.gif pipe5.gif index.html version.gif
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=Chunk_f1.obj Chunk_f2.obj Chunk_f6.obj CodeReview.html      \
+             ExternalFiles.html Lib_Maint.html MemoryManagement.html     \
+             ObjectHeader.txt chunk1.obj dataset_p1.obj extern1.obj      \
+             extern2.obj group_p1.obj group_p2.obj group_p3.obj heap.txt \
+             move.html pipe1.obj pipe2.obj pipe3.obj pipe4.obj           \
+             pipe5.obj review1.html review1a.html storage.html symtab    \
+             version.obj
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/MountingFiles.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/MountingFiles.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/MountingFiles.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,430 @@
+<html>
+  <head>
+    <title>Mounting Files</title>
+    
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>Mounting Files</h1>
+
+    <h2>Purpose</h2>
+
+    <p>This document contrasts two methods for mounting an hdf5 file
+      on another hdf5 file: the case where the relationship between
+      files is a tree and the case where it's a graph.  The tree case
+      simplifies current working group functions and allows symbolic
+      links to point into ancestor files whereas the graph case is
+      more consistent with the organization of groups within a
+      particular file.
+
+    <h2>Definitions</h2>
+
+    <p>If file <code>child</code> is mounted on file
+      <code>parent</code> at group <code>/mnt</code> in
+      <code>parent</code> then the contents of the root group of
+      <code>child</code> will appear in the group <code>/mnt</code> of
+      <code>parent</code>. The group <code>/mnt</code> is called the
+      <em>mount point</em> of the child in the parent.
+
+    <h2>Common Features</h2>
+
+    <p>These features are common to both mounting schemes.
+
+    <ul>
+      <li>The previous contents of <code>/mnt</code> in
+	<code>parent</code> is temporarily hidden.  If objects in that
+	group had names from other groups then the objects will still
+	be visible by those other names.
+
+      <li>The mount point is actually an OID (not a name) so if there
+	are other names besides <code>/mnt</code> for that group then
+	the root group of the child will be visible in all those
+	names.
+
+      <li>At most one file can be mounted per mount point but a parent 
+	can have any number of mounted children.
+
+      <li>Name lookups will entail a search through the mount table at
+	each stage of the lookup.  The search will be O(log
+	<em>N</em>) where <em>N</em> is the number of children mounted
+	on that file.
+
+      <li>Files open for read-only can be mounted on other files that
+	are open for read-only.  Mounting a file in no way changes the
+	contents of the file.
+
+      <li>Mounting a child may hide mount points that exist below the
+	child's mount point, but it does not otherwise affect mounted
+	files.
+
+      <li>Hard links cannot cross file boundaries.  An object cannot
+	be moved or renamed with <code>H5Gmove()</code> in such a way
+	that the new location would be in a different file than the
+	original location.
+
+      <li>The child can be accessed in a manner different from the
+	parent. For instance, a read-write child in a read-only
+	parent, a parallel child in a serial parent, <em>etc</em>.
+
+      <li>If some object in the child is open and the child is
+	unmounted and/or closed, the object will remain open and
+	accessible until explicitly closed. As in the mountless case,
+	the underlying UNIX file will be held open until all member
+	objects are closed.
+
+      <li>Current working groups that point into a child will remain
+	open and usable even after the child has been unmounted and/or 
+	closed.
+
+      <li>Datasets that share a committed datatype must reside in the 
+	same file as the datatype.
+
+    </ul>
+
+    <h2>Contrasting Features</h2>
+
+    <center>
+      <table border width="90%">
+	<tr>
+	  <th width="50%">Tree</th>
+	  <th width="50%">Graph</th>
+	</tr>
+
+	<tr valign=top>
+	  <td>The set of mount-related files makes a tree.</td>
+	  <td>The set of mount-related files makes a directed
+	    graph.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>A file can be mounted at only one mount point.</td>
+	  <td>A file can be mounted at any number of mount points.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Symbolic links in the child that have a link value which 
+	    is an absolute name can be interpreted with respect to the 
+	    root group of either the child or the root of the mount
+	    tree, a property which is determined when the child is
+	    mounted.</td>
+	  <td>Symbolic links in the child that have a link value which 
+	    is an absolute name are interpreted with respect to the
+	    root group of the child.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Closing a child causes it to be unmounted from the
+	    parent.</td>
+	  <td>Closing a child has no effect on its relationship with
+	    the parent.  One can continue to access the child contents 
+	    through the parent.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Closing the parent recursively unmounts and closes all 
+	    mounted children.</td>
+	  <td>Closing the parent unmounts all children but 
+	    does not close them or unmount their children.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>The current working group functions
+	    <code>H5Gset()</code>, <code>H5Gpush()</code>, and
+	    <code>H5Gpop()</code> operate on the root of the mount
+	    tree.</td>
+	  <td>The current working group functions operate on the file
+	    specified by their first argument.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Absolute name lookups (like for <code>H5Dopen()</code>)
+	    are always performed with respect to the root of the mount 
+	    tree.</td>
+	  <td>Absolute name lookups are performed with respect to the
+	    file specified by the first argument.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Relative name lookups (like for <code>H5Dopen()</code>)
+	    are always performed with respect to the specified group
+	    or the current working group of the root of the mount
+	    tree.</td>
+	  <td>Relative name lookups are always performed with respect
+	    to the specified group or the current working group of the 
+	    file specified by the first argument.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Mounting a child temporarily hides the current working
+	    group stack for that child</td>
+	  <td>Mounting a child has no effect on its current working
+	    group stack.</td>
+	</tr>
+
+	<tr valign=top>
+	  <td>Calling <code>H5Fflush()</code> will flush all files of
+	    the mount tree regardless of which file is specified as
+	    the argument.</td>
+	  <td>Calling <code>H5Fflush()</code> will flush only the
+	    specified file.</td>
+	</tr>
+
+	
+      </table>
+    </center>
+
+
+    <h2>Functions</h2>
+
+    <dl>
+      <dt><code>herr_t H5Fmount(hid_t <em>loc</em>, const char
+	  *<em>name</em>, hid_t <em>child</em>, hid_t
+	  <em>plist</em>)</code>
+      <dd>The file <em>child</em> is mounted at the specified location 
+	in the parent. The <em>loc</em> and <em>name</em> specify the
+	mount point, a group in the parent.  The <em>plist</em>
+	argument is an optional mount property list. The call will
+	fail if some file is already mounted on the specified group.
+
+	<table border>
+	  <tr>
+	    <th width="50%">Tree</th>
+	    <th width="50%">Graph</th>
+	  </tr>
+	  <tr valign=top>
+	    <td>The call will fail if the child is already mounted
+	      elsewhere.</td>
+	    <td>A child can be mounted at numerous mount points.</td>
+	  </tr>
+	  <tr valign=top>
+	    <td>The call will fail if the child is an ancestor of the
+	      parent.</td>
+	    <td>The mount graph is allowed to have cycles.</td>
+	  </tr>
+	  <tr valign=top>
+	    <td>Subsequently closing the child will cause it to be
+	      unmounted from the parent.</td>
+	    <td>Closing the child has no effect on its mount
+	      relationship with the parent.</td>
+	  </tr>
+	</table>
+
+	<br><br>
+      <dt><code>herr_t H5Funmount(hid_t <em>loc</em>, const char
+	  *<em>name</em>)</code>
+      <dd>Any file mounted at the group specified by <em>loc</em> and
+	<em>name</em> is unmounted.  The child is not closed.  This
+	function fails if no child is mounted at the specified point.
+
+	<br><br>
+      <dt><code>hid_t H5Pcreate(H5P_MOUNT)</code>
+      <dd>Creates and returns a new mount property list initialized
+	with default values.
+
+	<br><br>
+      <dt><code>herr_t H5Pset_symlink_locality(hid_t <em>plist</em>,
+	  H5G_symlink_t <em>locality</em>)</code>
+      <dt><code>herr_t H5Pget_symlink_locality(hid_t <em>plist</em>,
+	  H5G_symlink_t *<em>locality</em>)</code>
+      <dd>These functions exist only for the tree scheme.  They set or 
+	query the property that determines whether symbolic links with 
+	absolute name value in the child are looked up with respect to 
+	the child or to the mount root.  The possible values are
+	<code>H5G_SYMLINK_LOCAL</code> or
+	<code>H5G_SYMLINK_GLOBAL</code> (the default).
+
+	<br><br>
+      <dt><code>hid_t H5Freopen(hid_t <em>file</em>)</code>
+      <dd>A file handle is reopened, creating an additional file
+	handle. The new file handle refers to the same file but has an 
+	empty current working group stack.
+
+	<table border>
+	  <tr>
+	    <th width="50%">Tree</th>
+	    <th width="50%">Graph</th>
+	  </tr>
+	  <tr valign=top>
+	    <td>The new handle is not mounted but the old handle
+	      continues to be mounted.</td>
+	    <td>The new handle is mounted at the same location(s) as
+	      the original handle.</td>
+	  </tr>
+	</table>
+    </dl>
+
+    <h2>Example</h2>
+
+    <p>A file <code>eos.h5</code> contains data which is constant for
+      all problems.  The output of a particular physics application is
+      dumped into <code>data1.h5</code> and <code>data2.h5</code> and
+      the physics expects various constants from <code>eos.h5</code>
+      in the <code>eos</code> group of the two data files.  Instead of
+      copying the contents of <code>eos.h5</code> into every physics
+      output file we simply mount <code>eos.h5</code> as a read-only
+      child of <code>data1.h5</code> and <code>data2.h5</code>. 
+
+      <center>
+	<table border width="90%">
+	  <tr><td><h3>Tree</h3><code><pre>
+/* Create data1.h5 */
+data1 = H5Fcreate("data1.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+H5Gclose(H5Gcreate(data1, "/eos", 0));
+H5Gset_comment(data1, "/eos", "EOS mount point");
+
+/* Create data2.h5 */
+data2 = H5Fcreate("data2.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+H5Gclose(H5Gcreate(data2, "/eos", 0));
+H5Gset_comment(data2, "/eos", "EOS mount point");
+
+/* Open eos.h5 and mount it in both files */
+eos1 = H5Fopen("eos.h5", H5F_ACC_RDONLY, H5P_DEFAULT);
+H5Fmount(data1, "/eos", eos1, H5P_DEFAULT);
+eos2 = H5Freopen(eos1);
+H5Fmount(data2, "/eos", eos2, H5P_DEFAULT);
+
+    ... physics output ...
+
+H5Fclose(data1);
+H5Fclose(data2);
+	      </pre></code></td></tr>
+	  <tr><td><h3>Graph</h3><code><pre>
+/* Create data1.h5 */
+data1 = H5Fcreate("data1.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+H5Gclose(H5Gcreate(data1, "/eos", 0));
+H5Gset_comment(data1, "/eos", "EOS mount point");
+
+/* Create data2.h5 */
+data2 = H5Fcreate("data2.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+H5Gclose(H5Gcreate(data2, "/eos", 0));
+H5Gset_comment(data2, "/eos", "EOS mount point");
+
+/* Open eos.h5 and mount it in both files */
+eos = H5Fopen("eos.h5", H5F_ACC_RDONLY, H5P_DEFAULT);
+H5Fmount(data1, "/eos", eos, H5P_DEFAULT);
+H5Fmount(data2, "/eos", eos, H5P_DEFAULT);
+H5Fclose(eos);
+
+    ... physics output ...
+
+H5Fclose(data1);
+H5Fclose(data2);
+	      </pre></code></td></tr>
+	</table>
+      </center>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+<!-- Created: Spring 1999 -->
+<!-- hhmts start -->
+Last modified: 14 October 1999 
+<!-- hhmts end -->
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/NCSAfooterlogo.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/NCSAfooterlogo.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/PSandPDF/Dependencies
===================================================================

Added: packages/hdf5/branches/upstream/current/doc/html/PSandPDF/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/PSandPDF/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/PSandPDF/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,37 @@
+# HDF5 Library Makefile(.in)
+#
+# 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.
+#
+# 
+top_srcdir=@top_srcdir@
+top_builddir=../../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+SUBDIRS=
+DOCDIR=$(docdir)/hdf5/PSandPDF
+
+TRACE=perl $(top_srcdir)/bin/trace
+
+# Temporary files
+MOSTLYCLEAN=
+
+# Public doc files (to be installed)...
+PUB_DOCS=
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/Performance.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Performance.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Performance.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,263 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Performance</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>Performance Analysis and Issues</h1>
+
+    <h2>1. Introduction</h2>
+
+    <p>This section includes brief discussions of performance issues 
+      in HDF5 and performance analysis tools for HDF5 or pointers to 
+      such discussions.
+
+    <h2>2. Dataset Chunking</h2>
+
+      Appropriate dataset chunking can make a siginificant difference
+      in HDF5 performance.  This topic is discussed in 
+      <a href="Chunking.html">Dataset Chunking Issues</a> elsewhere
+      in this <cite>User's Guide</cite>.
+
+    <a name="Freespace">
+    <h2>3. Freespace Management</h2>
+    </a>
+
+     <p>HDF5 does not yet manage freespace as effectively as it might.
+      While a file is opened, the library actively tracks and re-uses
+      <em>freespace</em>, i.e., space that is freed (or released) 
+      during the run.  
+      But the library does not yet manage freespace across the 
+      closing and reopening of a file; when a file is closed, 
+      all knowledge of available freespace is lost.  
+      What was freespace becomes an unusable <em>hole</em> in the file.
+
+     <p>There are several circumstances that can result in freespace 
+      in an HDF5 file:
+      <ul>
+      <li>Reading then rewriting a dataset or compressed dataset 
+        chunk.<sup><a href="#footcchunk">1</a></sup>  
+        <ul>
+        <li>If the rewritten dataset or compressed chunk is the same 
+          size as or smaller than the original, it will be written 
+          to the same file location.  
+        <li>If, however, the dataset or compressed chunk is larger 
+          than the original, it will be written contiguously elsewhere 
+          in the file, leaving freespace at the original location.
+        <li>If the rewritten dataset or compressed chunk is 
+          substantially smaller than the original, the remaining 
+          space will be released and identified as freespace.
+        </ul>
+      <li>Deleting (or unlinking) a dataset or group.
+        <ul>
+        <li>If an object, such as a dataset, group, or named datatype, 
+          is deleted (normally with <code>H5Gunlink</code>), 
+          the space previously occupied by the object is released 
+          and identified as freespace.
+        </ul>
+      </ul>
+
+     <p>As stated above, freespace is not managed across the 
+      closing and reopening of an HDF5 file; file space that was 
+      known freespace while the file remained open becomes an 
+      inaccessible hole when the file is closed.  
+      Thus, if a file is often closed and reopened, datasets 
+      frequently rewritten, or groups and/or datasets frequently 
+      added and deleted, that file can develop large numbers of 
+      holes and grow unnecessarily large.  This can, in turn, 
+      seriously impair application or library performance 
+      as the file ages.
+
+     <p>An <code>h5pack</code> utility would enable <em>packing</em> 
+      a file to remove the holes, but writing such a utility to 
+      universally pack the file correctly is a complex task and the 
+      HDF5 development team has not to date had the resources to 
+      complete the task.
+
+     <p>For application developers or researchers who find themselves 
+      working with files that become bloated in this manner, there 
+      are, at this time, two remedies:
+      <ul>
+        <li><code>H5view</code>, an HDF5 Java tool, allows the user 
+          to open a file and, using the <code>Save As...</code> feature, 
+          save the file under a new filename.  The new file can then 
+          be closed and will be a packed version of the original file.  
+          This approach is reasonably reliable, but with two caveats:
+        <ul>
+          <li>It is not automated.
+          <li>This ability is a side-effect of the tool's design;
+            it was not designed for this purpose and this approach 
+            to file packing has not been exhaustively tested. 
+        </ul>
+        <li>An application developer or researcher can write a utility 
+          that is tuned to their data and file structures.  This
+          untility can then read in a file, copy the structures and
+          datasets to a new file, and write the new file to storage.  
+          This will eliminate the holes, making the new file a 
+          fully-packed version of the original file. 
+      </ul>
+
+     <a name="footcchunk">
+     <p></a>
+      <sup>1</sup>
+      <font size=-1>
+        This is a problem only with compressed chunks.
+        The compression ratio of data is highly dependent on the data 
+        itself; regardless of whether the <em>size</em> of the data 
+        changes, the size of the compressed data change substantially 
+        as the data changes.  Uncompressed chunks do not vary in size, 
+        so this issue does not arise.
+      </font>
+
+    <h2>4. Use of the Pablo Instrumentation of HDF5</h2>
+
+      Pablo HDF5 Trace software provides a means of measuring the 
+      performance of programs using HDF5. 
+
+    <p>The Pablo software consists 
+      of an instrumented copy of the HDF5 library, the Pablo Trace and 
+      Trace Extensions libraries, and some utilities for processing the 
+      output.  The instrumented version of the HDF5 library has hooks 
+      inserted into the HDF5 code which call routines in the Pablo Trace 
+      library just after entry to each instrumented HDF5 routine and 
+      just prior to exit from the routine.  The Pablo Trace Extension 
+      library has programs that track the I/O activity between the 
+      entry and exit of the HDF5 routine during execution.  
+
+    <p>A few lines of code must be inserted in the user's main program 
+      to enable tracing and to specify which HDF5 procedures are to be 
+      traced.  The program is linked with the special HDF5 and Pablo 
+      libraries to produce an executable.   Running this executable on 
+      a single processor produces an output file called the trace file 
+      which contains records, called Pablo Self-Defining Data Format 
+      (SDDF) records, which can later be analyzed using the 
+      HDF5 Analysis Utilities. The HDF5 Analysis Utilites can be used 
+      to interpret the SDDF records in the trace files to produce a 
+      report describing the HDF5 IO activity that occurred during 
+      execution.  
+
+    <p>For further instructions, see the file <code>READ_ME</code> 
+      in the <code> $(toplevel)/hdf5/pablo/ </code> subdirectory of 
+      the HDF5 source code distribution. 
+
+    <p>For further information about Pablo and the 
+      Self-Defining Data Format, visit the Pablo website at
+      <code><a href="http://www-pablo.cs.uiuc.edu/">http://www-pablo.cs.uiuc.edu/</a></code>.</p>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+<!-- Created: Thu Oct 14 16:46:00 CDT 1999 -->
+<!-- hhmts start -->
+Last modified: 2 August 2001 
+<!-- hhmts end -->
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/PredefDTypes.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/PredefDTypes.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/PredefDTypes.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,518 @@
+<html>
+<head><title>
+HDF5/Predefined Datatypes
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+<!-- HEADER RIGHT " " -->
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>HDF5 Predefined Datatypes</h1>
+</center>
+
+
+The following datatypes are predefined in HDF5.
+
+
+<h4>IEEE floating point datatypes</h4>
+    <ul>
+    <li>32-bit and 64-bit
+    <li>Big-endian and little-endian
+    </ul>
+
+<pre>
+        H5T_IEEE_F32BE
+        H5T_IEEE_F32LE
+        H5T_IEEE_F64BE
+        H5T_IEEE_F64LE
+</pre>
+
+
+<h4>Standard datatypes</h4>
+    <ul>
+    <li>Signed integer (2's complement), unsigned integer, and bitfield
+    <li>8-bit, 16-bit, 32-bit, and 64-bit
+    <li>Big-endian and little-endian
+    </ul>
+
+    <table border=0 width=76%>
+    <tr><td valign=top width=33% align=left>
+<pre>
+        H5T_STD_I8BE
+        H5T_STD_I8LE
+        H5T_STD_I16BE
+        H5T_STD_I16LE
+        H5T_STD_I32BE
+        H5T_STD_I32LE
+        H5T_STD_I64BE
+        H5T_STD_I64LE
+</pre>
+    </td>
+    <td valign=top width=34% align=left>
+<pre>
+        H5T_STD_U8BE 
+        H5T_STD_U8LE
+        H5T_STD_U16BE
+        H5T_STD_U16LE
+        H5T_STD_U32BE
+        H5T_STD_U32LE
+        H5T_STD_U64BE 
+        H5T_STD_U64LE
+</pre>
+    </td>
+    <td valign=top width=33% align=left>
+<pre>
+        H5T_STD_B8BE
+        H5T_STD_B8LE
+        H5T_STD_B16BE 
+        H5T_STD_B16LE
+        H5T_STD_B32BE
+        H5T_STD_B32LE
+        H5T_STD_B64BE 
+        H5T_STD_B64LE
+</pre>
+    </tr></td>
+    </table>
+
+    <ul>
+    <li>Object reference or dataset region reference
+    </ul>
+
+<pre>
+        H5T_STD_REF_OBJ
+        H5T_STD_REF_DSETREG 
+</pre>
+
+
+<h4>UNIX-specific datatypes</h4>
+    <ul>
+    <li>32-bit and 64-bit
+    <li>Big-endian and little-endian
+    </ul>
+
+<pre>
+        H5T_UNIX_D32BE
+        H5T_UNIX_D32LE
+        H5T_UNIX_D64BE
+        H5T_UNIX_D64LE
+</pre>
+
+
+<h4>C-specific datatype</h4>
+    <ul>
+    <li>String datatype in C (size defined in bytes rather than in bits)
+    </ul>
+
+<pre>
+        H5T_C_S1
+</pre>
+
+
+<h4>FORTRAN-specific datatype</h4>
+    <ul>
+    <li>String datatype in FORTRAN (as defined for the HDF5 C library)
+    </ul>
+
+<pre>
+        H5T_FORTRAN_S1
+</pre>
+
+
+<h4>Intel-specific datatypes</h4>
+    <ul>
+    <li>For Intel CPUs
+    <li>Little-endian 
+    <li>Signed integer (2's complement), unsigned integer, bitfield, and 
+        IEEE floating point
+    <li>8-bit, 16-bit, 32-bit, and 64-bit
+    </ul>
+
+    <table border=0 width=76%>
+    <tr><td valign=top width=50% align=left>
+<pre>
+        H5T_INTEL_I8
+        H5T_INTEL_I16
+        H5T_INTEL_I32
+        H5T_INTEL_I64
+
+        H5T_INTEL_U8
+        H5T_INTEL_U16
+        H5T_INTEL_U32
+        H5T_INTEL_U64
+</pre>
+    </td>
+    <td valign=top width=50% align=left>
+<pre>
+        H5T_INTEL_B8
+        H5T_INTEL_B16
+        H5T_INTEL_B32
+        H5T_INTEL_B64
+
+        H5T_INTEL_F32
+        H5T_INTEL_F64
+</pre>
+    </tr></td>
+    </table>
+
+
+<h4>DEC Alpha-specific datatypes</h4>
+    <ul>
+    <li>For DEC Alpha CPUs
+    <li>Little-endian 
+    <li>Signed integer (2's complement), unsigned integer, bitfield, and 
+        IEEE floating point
+    <li>8-bit, 16-bit, 32-bit, and 64-bit
+    </ul>
+
+    <table border=0 width=76%>
+    <tr><td valign=top width=50% align=left>
+<pre>
+        H5T_ALPHA_I8
+        H5T_ALPHA_I16
+        H5T_ALPHA_I32
+        H5T_ALPHA_I64
+
+        H5T_ALPHA_U8
+        H5T_ALPHA_U16
+        H5T_ALPHA_U32
+        H5T_ALPHA_U64
+</pre>
+    </td>
+    <td valign=top width=50% align=left>
+<pre>
+        H5T_ALPHA_B8
+        H5T_ALPHA_B16
+        H5T_ALPHA_B32
+        H5T_ALPHA_B64
+
+        H5T_ALPHA_F32
+        H5T_ALPHA_F64
+</pre>
+    </tr></td>
+    </table>
+
+
+<h4>MIPS-specific datatypes</h4>
+    <ul>
+    <li>For MIPS CPUs, commonly used in SGI system
+    <li>Big-endian 
+    <li>Signed integer (2's complement), unsigned integer, bitfield, and 
+        IEEE floating point
+    <li>8-bit, 16-bit, 32-bit, and 64-bit
+    </ul>
+
+    <table border=0 width=76%>
+    <tr><td valign=top width=50% align=left>
+<pre>
+        H5T_MIPS_I8
+        H5T_MIPS_I16
+        H5T_MIPS_I32
+        H5T_MIPS_I64
+
+        H5T_MIPS_U8
+        H5T_MIPS_U16
+        H5T_MIPS_U32
+        H5T_MIPS_U64
+</pre>
+    </td>
+    <td valign=top width=50% align=left>
+<pre>
+        H5T_MIPS_B8
+        H5T_MIPS_B16
+        H5T_MIPS_B32
+        H5T_MIPS_B64
+
+        H5T_MIPS_F32
+        H5T_MIPS_F64
+</pre>
+    </tr></td>
+    </table>
+
+
+<h4>Predefined native datatypes</h4>
+    <dir>
+    These are the datatypes detected by <code>H5detect</code>. 
+    Their names differ from other HDF5 datatype names as follows:  
+    <ul>
+    <li>Instead of a class name, precision, and byte order as the last 
+        component, they have a C-like datatype name.  
+    <li>If the datatype begins with <code>U</code>, then it is the unsigned 
+        version of the integer datatype; other integer datatypes are signed.  
+    <li>The datatype <code>LLONG</code> corresponds to 
+        C's <code>long_long</code> and
+        <code>LDOUBLE</code> is <code>long_double</code>.
+        These datatypes might be the same as <code>LONG</code> and 
+        <code>DOUBLE</code>, respectively.
+    </ul>
+    </dir>
+
+    <table border=0 width=76%>
+    <tr><td valign=top width=50% align=left>
+<pre>
+        H5T_NATIVE_CHAR
+        H5T_NATIVE_SCHAR        
+        H5T_NATIVE_UCHAR        
+
+        H5T_NATIVE_SHORT        
+        H5T_NATIVE_USHORT       
+
+        H5T_NATIVE_INT          
+        H5T_NATIVE_UINT         
+
+        H5T_NATIVE_LONG         
+        H5T_NATIVE_ULONG        
+        H5T_NATIVE_LLONG        
+        H5T_NATIVE_ULLONG       
+</pre>
+    </td>
+    <td valign=top width=50% align=left>
+<pre>
+        H5T_NATIVE_FLOAT        
+        H5T_NATIVE_DOUBLE       
+        H5T_NATIVE_LDOUBLE
+
+        H5T_NATIVE_B8
+        H5T_NATIVE_B16
+        H5T_NATIVE_B32
+        H5T_NATIVE_B64
+
+        H5T_NATIVE_OPAQUE       
+        H5T_NATIVE_HADDR
+        H5T_NATIVE_HSIZE
+        H5T_NATIVE_HSSIZE
+        H5T_NATIVE_HERR
+        H5T_NATIVE_HBOOL
+</pre>
+    </tr></td>
+    </table>
+
+
+<h4>ANSI C9x-specific native integer datatypes</h4>
+    <ul>
+    <li>Signed integer (2's complement), unsigned integer, and bitfield
+    <li>8-bit, 16-bit, 32-bit, and 64-bit
+    <li><code>LEAST</code> -- storage to use least amount of space
+        <br>
+        <code>FAST</code> -- storage to maximize performance
+    </ul>
+
+    <table border=0 width=76%>
+    <tr><td valign=top width=50% align=left>
+<pre>
+        H5T_NATIVE_INT8
+        H5T_NATIVE_UINT8
+        H5T_NATIVE_INT_LEAST8
+        H5T_NATIVE_UINT_LEAST8
+        H5T_NATIVE_INT_FAST8 
+        H5T_NATIVE_UINT_FAST8
+
+        H5T_NATIVE_INT16
+        H5T_NATIVE_UINT16
+        H5T_NATIVE_INT_LEAST16
+        H5T_NATIVE_UINT_LEAST16
+        H5T_NATIVE_INT_FAST16
+        H5T_NATIVE_UINT_FAST16
+</pre>
+    </td>
+    <td valign=top width=50% align=left>
+<pre>
+        H5T_NATIVE_INT32
+        H5T_NATIVE_UINT32
+        H5T_NATIVE_INT_LEAST32
+        H5T_NATIVE_UINT_LEAST32
+        H5T_NATIVE_INT_FAST32
+        H5T_NATIVE_UINT_FAST32
+
+        H5T_NATIVE_INT64
+        H5T_NATIVE_UINT64
+        H5T_NATIVE_INT_LEAST64
+        H5T_NATIVE_UINT_LEAST64 
+        H5T_NATIVE_INT_FAST64
+        H5T_NATIVE_UINT_FAST64
+</pre>
+    </tr></td>
+    </table>
+
+<!-- NEW PAGE -->
+<a name="F90">
+<h4>FORTRAN90 API datatypes</h4>
+</a>
+    <ul>
+    <li>Datatypes defined for the FORTRAN90 APIs
+    <br>
+    <br>
+    <li>Native integer, single-precision real, double-precision real,
+        and character
+    </ul>
+
+<pre>
+        H5T_NATIVE_INTEGER
+        H5T_NATIVE_REAL
+        H5T_NATIVE_DOUBLE
+        H5T_NATIVE_CHARACTER 
+</pre>
+
+    <ul>
+    <li>Signed integer (2's complement), unsigned integer, and 
+        IEEE floating point
+    <li>8-bit, 16-bit, 32-bit, and 64-bit
+    <li>Big-endian and little-endian
+    </ul>
+
+    <table border=0 width=76%>
+    <tr><td valign=top width=33% align=left>
+<pre>
+        H5T_STD_I8BE
+        H5T_STD_I8LE
+        H5T_STD_I16BE
+        H5T_STD_I16LE
+        H5T_STD_I32BE
+        H5T_STD_I32LE
+        H5T_STD_I64BE
+        H5T_STD_I64LE
+</pre>
+    </td>
+    <td valign=top width=34% align=left>
+<pre>
+        H5T_STD_U8BE
+        H5T_STD_U8LE
+        H5T_STD_U16BE
+        H5T_STD_U16LE
+        H5T_STD_U32BE
+        H5T_STD_U32LE
+        H5T_STD_U64BE
+        H5T_STD_U64LE
+</pre>
+    </td>
+    <td valign=top width=33% align=left>
+<pre>
+        H5T_IEEE_F32BE
+        H5T_IEEE_F32LE
+        H5T_IEEE_F64BE
+        H5T_IEEE_F64LE
+</pre>
+    </tr></td>
+    </table>
+
+
+    <ul>
+    <li>Object reference or dataset region reference
+    </ul>
+
+<pre>
+        H5T_STD_REF_OBJ
+        H5T_STD_REF_DSETREG
+</pre>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 12 December 2000");
+-->
+</SCRIPT>
+ 
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Properties.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Properties.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Properties.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,188 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Property List Interface (H5P)</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+  <body bgcolor="#FFFFFF">
+  
+  
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>The Property List Interface (H5P)</h1>
+
+    <h2>1. Introduction</h2>
+
+    <p>The property list (a.k.a., template) interface provides a
+      mechanism for default named arguments for a C function
+      interface. A property list is a collection of name/value pairs
+      which can be passed to various other HDF5 functions to control
+      features that are typically unimportant or whose default values
+      are usually used.
+
+    <p>For instance, file creation needs to know various things such
+      as the size of the user-block at the beginning of the file, or
+      the size of various file data structures.  Wrapping this
+      information in a property list simplifies the API by reducing
+      the number of arguments to <code>H5Fcreate()</code>.
+
+    <h2>2. General Property List Operations</h2>
+
+    <p>Property lists follow the same create/open/close paradigm as
+      the rest of the library.
+
+    <dl>
+      <dt><code>hid_t H5Pcreate (H5P_class_t <em>class</em>)</code>
+      <dd>A new property list can be created as an instance of some
+	property list class.  The new property list is initialized
+	with default values for the specified class. The classes are:
+
+	<br><br>
+	<dl>
+	  <dt><code>H5P_FILE_CREATE</code>
+	  <dd>Properties for file creation.  See <a href="Files.html">H5F</a>
+	    for details about the file creation properties.
+	  <dt><code>H5P_FILE_ACCESS</code>
+	  <dd>Properties for file access. See <a href="Files.html">H5F</a>
+	    for details about the file creation properties.
+	  <dt><code>H5P_DATASET_CREATE</code>
+	  <dd>Properties for dataset creation.  See
+	    <a href="Datasets.html">H5D</a> for details about dataset
+	    creation properties.
+	  <dt><code>H5P_DATASET_XFER</code>
+	  <dd>Properties for raw data transfer.  See
+	    <a href="Datasets.html">H5D</a> for details about raw data
+	    transfer properties.
+	</dl>
+
+	<br><br>
+      <dt><code>hid_t H5Pcopy (hid_t <em>plist</em>)</code>
+      <dd>A property list can be copied to create a new property
+	list. The new property list has the same properties and values
+	as the original property list.
+
+	<br><br>
+      <dt><code>herr_t H5Pclose (hid_t <em>plist</em>)</code>
+      <dd>All property lists should be closed when the application is
+	finished accessing them.  This frees resources used by the
+	property list.
+
+	<br><br>
+      <dt><code>H5P_class_t H5Pget_class (hid_t <em>plist</em>)</code>
+      <dd>The class of which the property list is a member can be
+	obtained by calling this function.  The property list classes
+	are defined above for <code>H5Pcreate()</code>.
+    </dl>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+<!-- Created: Tue Feb 10 17:06:58 PST 1998 -->
+<!-- hhmts start -->
+Last modified: 13 December 1999 
+<!-- hhmts end -->
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/RM_H5.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/RM_H5.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/RM_H5.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,715 @@
+<html>
+<head><title>
+HDF5/H5 API Specification
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>H5: General Library Functions</h1>
+</center>
+
+These functions serve general-purpose needs of the HDF5 library
+and it users.
+
+<p>
+<strong>The C Interfaces:</strong>
+
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li><a href="#Library-Open">H5open</a>
+    <li><a href="#Library-Close">H5close</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Library-Version">H5get_libversion</a>
+    <li><a href="#Library-VersCheck">H5check_version</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Library-SetFreeListLimits">H5set_free_list_limits</a>
+    <li><a href="#Library-GarbageCollect">H5garbage_collect</a>
+    <li><a href="#Library-DontAtExit">H5dont_atexit</a>
+</ul>
+</td></tr>
+</table>
+<br>
+
+<i>Alphabetical Listing</i>
+
+<table border="0">
+  <tr>
+
+    <td valign="top">
+	<ul>
+      <li><a href="#Library-VersCheck">H5check_version</a>
+      <li><a href="#Library-Close">H5close</a>
+      <li><a href="#Library-DontAtExit">H5dont_atexit</a>
+	</ul>
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#Library-GarbageCollect">H5garbage_collect</a>
+      <li><a href="#Library-Version">H5get_libversion</a>
+      <li><a href="#Library-Open">H5open</a>
+	</ul>
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#Library-SetFreeListLimits">H5set_free_list_limits</a>
+	</ul>
+    </td>
+  </tr>
+</table>
+
+<br>
+<strong>The FORTRAN90 Interfaces:</strong>
+<br>
+In general, each FORTRAN90 subroutine performs exactly the same task 
+as the corresponding C function.  
+<br>
+
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li><a href="#Library-Open">h5open_f</a>
+    <li><a href="#Library-Close">h5close_f</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Library-Version">h5get_libversion_f</a>
+    <li><a href="#Library-VersCheck">h5check_version_f</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Library-SetFreeListLimits">h5set_free_list_limits_f</a>
+    <li><a href="#Library-GarbageCollect">h5garbage_collect_f</a>
+    <li><a href="#Library-DontAtExit">h5dont_atexit_f</a>
+</ul>
+</td></tr>
+</table>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT " " -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5check_version" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Library-VersCheck">H5check_version</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5check_version</code>(<em>unsigned</em> <code>majnum</code>,
+            <em>unsigned</em> <code>minnum</code>,
+            <em>unsigned</em> <code>relnum</code>
+        )
+<dt><strong>Purpose:</strong>
+    <dd>Verifies that library versions are consistent.
+<dt><strong>Description:</strong>
+    <dd><code>H5check_version</code> verifies that the arguments provided 
+        with the function call match the version numbers compiled into 
+        the library.  
+        <p>
+        <code>H5check_version</code> serves two slightly differing purposes.
+        <p>
+        First, the function is intended to be called by the user to verify 
+        that the version of the header files compiled into an application 
+        matches the version of the HDF5 library being used.  
+        One may look at the <code>H5check</code> definition in the file 
+        <code>H5public.h</code> as an example.
+        <p>
+        Due to the risks of data corruption or segmentation faults, 
+        <code>H5check_version</code> causes the application to abort if the
+        version numbers do not match.
+	The abort is achieved by means of a call to the
+        standard C function <code>abort()</code>.
+        <p>
+        Note that <code>H5check_version</code> verifies only the 
+        major and minor version numbers and the release number; 
+        it does not verify the sub-release value as that should be 
+        an empty string for any official release.
+	This means that any two incompatible library versions must
+	have different {major,minor,release} numbers. (Notice the
+	reverse is not necessarily true.)
+        <p>
+        Secondarily, <code>H5check_version</code> verifies that the 
+        library version identifiers <code>H5_VERS_MAJOR</code>, 
+        <code>H5_VERS_MINOR</code>, <code>H5_VERS_RELEASE</code>, 
+        <code>H5_VERS_SUBRELEASE</code>, and <code>H5_VERS_INFO</code> 
+        are consistent.
+        This is designed to catch source code inconsistencies, 
+        but does not generate the fatal error as in the first stage
+	because this inconsistency does not cause errors in the data files.
+        If this check reveals inconsistencies, the library issues a warning
+        but the function does not fail.
+<!--
+        <p>
+<strong><em>Alternate to preceding paragraph / More to the point?</em></strong>
+<br>
+        If the function passes the above test and does not generate 
+        an <code>abort()</code> call, the function's second purpose 
+        comes into play. 
+        <code>H5check_version</code> then procedes to verify
+        that the additional library version identifiers 
+        <code>H5_VERS_SUBRELEASE</code>, and <code>H5_VERS_INFO</code> 
+        are consistent.
+        This is designed to catch source code inconsistencies, 
+        but does not generate the fatal error 
+        that is generated under the first function.
+        <p>
+        The version and release numbers passed as 
+        <code>H5check_version</code> parameters have the 
+        following relationsips to each other:  
+        <dir>
+            An official HDF5 release is labelled as 
+            <br>
+            HDF5 Release &lt;<code>majnum</code>&gt;<strong>.</strong>&lt;<code>minnum</code>&gt;<strong>.</strong>&lt;<code>relnum</code>&gt;
+        </dir>  
+        For example, in the version of the library known as HDF5 Release 1.4.2,
+        the 1 is the major version number, <code>majnum</code>;
+        the 1 is the minor version number, <code>minnum</code>; and
+        the 1 is the release number, <code>relnum</code>.
+-->
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>unsigned </em><code>majnum</code></td>
+            <td valign="top">IN: The major version of the library.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned&nbsp;</em><code>minnum&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: The minor version of the library.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned </em><code>relnum</code></td>
+            <td valign="top">IN: The release number of the library.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Upon failure, this function causes the application to abort.
+<dt><strong>Fortran90 Interface:</strong> h5check_version_f
+    <dd>
+	<pre>
+SUBROUTINE h5check_version_f(hdferr) 
+  IMPLICIT NONE
+  INTEGER, INTENT(IN)  :: majnum      ! The major version of the library
+  INTEGER, INTENT(IN)  :: minnum      ! The minor version of the library
+  INTEGER, INTENT(IN)  :: relnum      ! The release number 
+  INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+END SUBROUTINE h5check_version_f
+	</pre>
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.5</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5close" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Library-Close">H5close</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5close</code>(<em>void</em>)
+<dt><strong>Purpose:</strong>
+    <dd>Flushes all data to disk, closes file identifiers, and cleans up memory.
+<dt><strong>Description:</strong>
+    <dd><code>H5close</code> flushes all data to disk, 
+        closes all file identifiers, and cleans up all memory used by
+        the library.  This function is generally called when the 
+        application calls <code>exit()</code>, but may be called earlier 
+        in event of an emergency shutdown or out of desire to free all 
+        resources used by the HDF5 library.
+        <p>
+        <code>h5close_f</code> and <code>h5open_f</code> are 
+        required calls in Fortran90 applications.	
+<dt><strong>Parameters:</strong>
+    <dl>
+        <dt>None.
+    </dl>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5close_f
+    <dd>
+	<pre>
+SUBROUTINE h5close_f(hdferr) 
+  IMPLICIT NONE
+  INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+END SUBROUTINE h5close_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5H5dont_atexit" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Library-DontAtExit">H5dont_atexit</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5dont_atexit</code>(<em>void</em>)
+<dt><strong>Purpose:</strong>
+    <dd>Instructs library not to install <code>atexit</code> cleanup routine.
+<dt><strong>Description:</strong>
+    <dd><code>H5dont_atexit</code> indicates to the library that an 
+        <code>atexit()</code> cleanup routine should not be installed.  
+        The major purpose for this is in situations where the 
+        library is dynamically linked into an application and is 
+        un-linked from the application before <code>exit()</code> gets 
+        called.  In those situations, a routine installed with 
+        <code>atexit()</code> would jump to a routine which was 
+        no longer in memory, causing errors.
+        <p>
+        In order to be effective, this routine <em>must</em> be called 
+        before any other HDF function calls, and must be called each 
+        time the library is loaded/linked into the application 
+        (the first time and after it's been un-loaded).
+<dt><strong>Parameters:</strong>
+    <dl>
+        <dt>None.
+    </dl>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5dont_atexit_f
+    <dd>
+	<pre>
+SUBROUTINE h5dont_atexit_f(hdferr) 
+  IMPLICIT NONE
+  INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+END SUBROUTINE h5dont_atexit_f
+	</pre>
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.5</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5garbage_collect" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Library-GarbageCollect">H5garbage_collect</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5garbage_collect</code>(<em>void</em>)
+<dt><strong>Purpose:</strong>
+    <dd>Garbage collects on all free-lists of all types.
+<dt><strong>Description:</strong>
+    <dd><code>H5garbage_collect</code> walks through all the garbage 
+        collection routines of the library, freeing any unused memory. 
+        <p>
+        It is not required that <code>H5garbage_collect</code> be called 
+        at any particular time; it is only necessary in certain situations 
+        where the application has performed actions that cause the library 
+        to allocate many objects.  The application should call
+        <code>H5garbage_collect</code> if it eventually releases those 
+        objects and wants to reduce the memory used by the library from
+        the peak usage required.  
+        <p>
+        The library automatically garbage collects all the free lists 
+        when the application ends.
+<dt><strong>Parameters:</strong>
+    <dl>
+        <dt>None.
+    </dl>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5garbage_collect_f
+    <dd>
+	<pre>
+SUBROUTINE h5garbage_collect_f(hdferr) 
+  IMPLICIT NONE
+  INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+END SUBROUTINE h5garbage_collect_f
+	</pre>
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.5</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5get_libversion" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Library-Version">H5get_libversion</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5get_libversion</code>(<em>unsigned *</em><code>majnum</code>,
+            <em>unsigned *</em><code>minnum</code>,
+            <em>unsigned *</em><code>relnum</code>
+        )
+<dt><strong>Purpose:</strong>
+    <dd>Returns the HDF library release number.
+<dt><strong>Description:</strong>
+    <dd><code>H5get_libversion</code> retrieves the major, minor, and release
+        numbers of the version of the HDF library which is linked to 
+        the application.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>unsigned *</em><code>majnum</code></td>
+            <td valign="top">OUT: The major version of the library.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned&nbsp;*</em><code>minnum&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: The minor version of the library.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned *</em><code>relnum</code></td>
+            <td valign="top">OUT: The release number of the library.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5get_libversion_f
+    <dd>
+	<pre>
+SUBROUTINE h5get_libversion_f(hdferr) 
+  IMPLICIT NONE
+  INTEGER, INTENT(OUT) :: majnum      ! The major version of the library
+  INTEGER, INTENT(OUT) :: minnum      ! The minor version of the library
+  INTEGER, INTENT(OUT) :: relnum      ! The release number 
+  INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+END SUBROUTINE h5get_libversion_f
+	</pre>
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.5</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5open" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Library-Open">H5open</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5open</code>(<em>void</em>)
+<dt><strong>Purpose:</strong>
+    <dd>Initializes the HDF5 library.
+<dt><strong>Description:</strong>
+    <dd><code>H5open</code> initialize the library.  
+        <p>
+        When the HDF5 Library is employed in a C application,
+        this function is normally called automatically, but if you 
+        find that an HDF5 library function is failing inexplicably, 
+        try calling this function first.
+        If you wish to elimnate this possibility, it is safe to 
+        routinely call <code>H5open</code> before an application 
+        starts working with the library as there are no damaging 
+        side-effects in calling it more than once.
+        <p>
+        When the HDF5 Library is employed in a Fortran90 application,
+        <code>h5open_f</code> initializes global variables 
+        (e.g. predefined types) and performs other tasks required to
+        initialize the library.
+        <code>h5open_f</code> and <code>h5close_f</code> are therefore
+        required calls in Fortran90 applications.
+<dt><strong>Parameters:</strong>
+    <dl>
+        <dt>None.
+    </dl>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5open_f
+    <dd>
+	<pre>
+SUBROUTINE h5open_f(hdferr) 
+  IMPLICIT NONE
+  INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+END SUBROUTINE h5open_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5set_free_list_limits" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Library-SetFreeListLimits">H5set_free_list_limits</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5set_free_list_limits</code>(<em>int</em> <code>reg_global_lim</code>, 
+                        <em>int</em> <code>reg_list_lim</code>, 
+			<em>int</em> <code>arr_global_lim</code>,
+                        <em>int</em> <code>arr_list_lim</code>, 
+			<em>int</em> <code>blk_global_lim</code>, 
+			<em>int</em> <code>blk_list_lim</code>
+                        )
+<dt><strong>Purpose:</strong>
+    <dd>Sets  free-list size limits.
+<dt><strong>Description:</strong>
+    <dd><code>H5set_free_list_limits</code> sets size limits 
+        on all types of free lists.
+	The HDF5 library uses free lists internally to manage memory.
+	There are three types of free lists:
+	<ul><li><span class=termDef>Regular</span> 
+	        free lists manage a single data structure.
+	    <li><span class=termDef>Array</span> 
+	        free lists manage arrays of a data structure.
+	    <li><span class=termDef>Block</span> 
+	        free lists manage blocks of bytes.
+	</ul> 
+	<em>Alternate phrasing?</em>:
+	<ul><li><span class=termDef>Regular</span> 
+	        free lists manage data structures containing atomic data.
+	    <li><span class=termDef>Array</span> 
+	        free lists manage data structures containing array data.
+	    <li><span class=termDef>Block</span> 
+	        free lists manage blocks of bytes.
+	</ul> 
+	<p>
+	These are global limits, but each limit applies only to 
+        free lists of the specified type. 
+        Therefore, if an application sets a 1Mb limit on each of 
+        the global lists, up to 3Mb of total storage might be 
+	allocated, 1Mb for each of the regular, array, and 
+	block type lists.
+	<p>
+        Using a value of <code>-1</code> for a limit means that 
+	no limit is set for the specified type of free list.  
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>int</em>&nbsp;<code>reg_global_lim&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+	        <td valign="top">IN: The limit on all regular free list memory used</td></tr>
+        <tr>
+		    <td valign="top"><em>int</em> <code>reg_list_lim</code></td>
+	        <td valign="top">IN: The limit on memory used in each regular free list</td></tr>
+        <tr>
+		    <td valign="top"><em>int</em> <code>arr_global_lim</code></td>
+	        <td valign="top">IN: The limit on all array free list memory used</td></tr>
+        <tr>
+		    <td valign="top"><em>int</em> <code>arr_list_lim</code></td>
+	        <td valign="top">IN: The limit on memory used in each array free list</td></tr>
+        <tr>
+		    <td valign="top"><em>int</em> <code>blk_global_lim</code></td>
+	        <td valign="top">IN: The limit on all block free list memory used</td></tr>
+        <tr>
+		    <td valign="top"><em>int</em> <code>blk_list_lim</code></td>
+	        <td valign="top">IN: The limit on memory used in each block free list</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 16 October 2003");
+-->
+</SCRIPT>
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/RM_H5A.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/RM_H5A.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/RM_H5A.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,976 @@
+<html>
+<head><title>
+HDF5/H5A API Specification
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+<!-- HEADER RIGHT " " -->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>H5A: Attribute Interface</h1>
+</center>
+
+<h2>Attribute API Functions</h2>
+
+These functions create and manipulate attributes 
+and information about attributes.
+
+<p>
+<strong>The C Interfaces:</strong>
+
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li><a href="#Annot-Create">H5Acreate</a>
+    <li><a href="#Annot-Write">H5Awrite</a>
+    <li><a href="#Annot-Read">H5Aread</a>
+    <li><a href="#Annot-Close">H5Aclose</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Annot-GetName">H5Aget_name</a>
+    <li><a href="#Annot-OpenName">H5Aopen_name</a>
+    <li><a href="#Annot-OpenIdx">H5Aopen_idx</a>
+    <li><a href="#Annot-GetSpace">H5Aget_space</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Annot-GetType">H5Aget_type</a>
+    <li><a href="#Annot-NumAttrs">H5Aget_num_attrs</a>
+    <li><a href="#Annot-Iterate">H5Aiterate</a>
+    <li><a href="#Annot-Delete">H5Adelete</a>
+</ul>
+</td></tr>
+</table>
+<br>
+
+<i>Alphabetical Listing</i>
+
+<table border="0">
+  <tr>
+    <td valign="top">
+	<ul>
+      <li><a href="#Annot-Close">H5Aclose</a>
+      <li><a href="#Annot-Create">H5Acreate</a>
+      <li><a href="#Annot-Delete">H5Adelete</a>
+      <li><a href="#Annot-GetName">H5Aget_name</a>
+	</ul>      
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#Annot-NumAttrs">H5Aget_num_attrs</a>
+      <li><a href="#Annot-GetSpace">H5Aget_space</a>
+      <li><a href="#Annot-GetType">H5Aget_type</a>
+      <li><a href="#Annot-Iterate">H5Aiterate</a>
+    </ul>
+	</td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#Annot-OpenIdx">H5Aopen_idx</a>
+      <li><a href="#Annot-OpenName">H5Aopen_name</a>
+      <li><a href="#Annot-Read">H5Aread</a>
+      <li><a href="#Annot-Write">H5Awrite</a>
+	</ul>
+    </td>
+  </tr>
+</table>
+
+<br>
+<strong>The FORTRAN90 Interfaces:</strong>
+<br>
+In general, each FORTRAN90 subroutine performs exactly the same task 
+as the corresponding C function.  
+<br>
+
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li><a href="#Annot-Create">h5acreate_f</a>
+    <li><a href="#Annot-Write">h5awrite_f</a>
+    <li><a href="#Annot-Read">h5aread_f</a>
+    <li><a href="#Annot-Close">h5aclose_f</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Annot-GetName">h5aget_name_f</a>
+    <li><a href="#Annot-OpenName">h5aopen_name_f</a>
+    <li><a href="#Annot-OpenIdx">h5aopen_idx_f</a>
+    <li><a href="#Annot-GetSpace">h5aget_space_f</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Annot-GetType">h5aget_type_f</a>
+    <li><a href="#Annot-NumAttrs">h5aget_num_attrs_f</a>
+ <!--<li><a href="#Annot-Iterate">h5aiterate_f</a>-->
+    <li><a href="#Annot-Delete">h5adelete_f</a>
+</ul>
+</td></tr>
+</table>
+
+
+<p>
+The Attribute interface, H5A, is primarily designed to easily allow 
+small datasets to be attached to primary datasets as metadata information. 
+Additional goals for the H5A interface include keeping storage requirement 
+for each attribute to a minimum and easily sharing attributes among 
+datasets. 
+<p>
+Because attributes are intended to be small objects, large datasets 
+intended as additional information for a primary dataset should be 
+stored as supplemental datasets in a group with the primary dataset. 
+Attributes can then be attached to the group containing everything 
+to indicate a particular type of dataset with supplemental datasets 
+is located in the group. How small is "small" is not defined by the 
+library and is up to the user's interpretation. 
+<p>
+See <a href="Attributes.html"><cite>Attributes</cite></a> in the
+<a href="H5.user.html"><cite>HDF5 User's Guide</cite></a> for further information.
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT " " -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Aclose" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Annot-Close">H5Aclose</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Aclose</code>(<em>hid_t</em> <code>attr_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Closes the specified attribute.
+<dt><strong>Description:</strong>
+    <dd><code>H5Aclose</code> terminates access to the attribute 
+        specified by <code>attr_id</code> by releasing the identifier.
+        <p>
+        Further use of a released attribute identifier is illegal; 
+        a function using such an identifier will fail.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+	        <tr>
+			<td valign="top"><em>hid_t</em> <code>attr_id</code></td>
+            <td>IN: Attribute to release access to.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5aclose_f
+    <dd>
+	<pre>
+SUBROUTINE h5aclose_f(attr_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(OUT) :: attr_id  ! Attribute identifier 
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code:
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5aclose_f	
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Acreate" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Annot-Create">H5Acreate</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Acreate</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>const char *</em><code>name</code>,
+        <em>hid_t</em> <code>type_id</code>,
+        <em>hid_t</em> <code>space_id</code>,
+        <em>hid_t</em> <code>create_plist</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Creates a dataset as an attribute of another group, dataset, 
+        or named datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Acreate</code> creates an attribute named <code>name</code>
+        and attached to the object specified with <code>loc_id</code>.  
+        <code>loc_id</code> is a group, dataset, or named datatype identifier.
+        <p>
+        The attribute name specified in <code>name</code> must be unique. 
+        Attempting to create an attribute with the same name as an already 
+        existing attribute will fail, leaving the pre-existing attribute 
+        in place.  To overwrite an existing attribute with a new attribute 
+        of the same name, first call <code>H5Adelete</code> then recreate 
+        the attribute with <code>H5Acreate</code>.
+        <p>
+        The datatype and dataspace identifiers of the attribute, 
+        <code>type_id</code> and <code>space_id</code>, respectively, 
+        are created with the H5T and H5S interfaces, respectively.  
+        <p>
+        Currently only simple dataspaces are allowed for attribute dataspaces.
+        <p>
+        The attribute creation property list, <code>create_plist</code>, 
+        is currently unused;
+        it may be used in the future for optional attribute properties.  
+        At this time, <code>H5P_DEFAULT</code> is the only accepted value.
+        </p>
+        The attribute identifier returned from this function must be released 
+        with <code>H5Aclose</code> or resource leaks will develop.  
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+            <td valign="top">IN: Object (dataset, group, or named datatype) to be attached to.</td></tr>
+        <tr>
+		    <td valign="top"><em>const char *</em><code>name</code></td>
+            <td valign="top">IN: Name of attribute to create.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">IN: Identifier of datatype for attribute.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>space_id</code></td>
+            <td valign="top">IN: Identifier of dataspace for attribute.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>create_plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of creation property list. (Currently unused;
+                    the only accepted value is <code>H5P_DEFAULT</code>.)</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns an attribute identifier if successful;
+        otherwise returns a negative value.
+			
+		<!--<dt><strong>Non-C API(s):</strong>        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+		
+<dt><strong>Fortran90 Interface:</strong> h5acreate_f
+    <dd>
+	<pre>
+SUBROUTINE h5acreate_f(obj_id, name, type_id, space_id, attr_id, &amp; 
+                       hdferr, creation_prp) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: obj_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) :: creation_prp
+                                          ! Attribute creation property 
+                                          ! list identifier 
+END SUBROUTINE h5acreate_f
+	</pre>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Adelete" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Annot-Delete">H5Adelete</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Adelete</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>const char *</em><code>name</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Deletes an attribute from a location.
+<dt><strong>Description:</strong>
+    <dd><code>H5Adelete</code> removes the attribute specified by its  
+        name, <code>name</code>, from a dataset, group, or named datatype. 
+        This function should not be used when attribute identifiers are 
+        open on <code>loc_id</code> as it may cause the internal indexes 
+        of the attributes to change and future writes to the open 
+        attributes to produce incorrect results. 
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+            <td valign="top">IN: Identifier of the dataset, group, or named datatype 
+                to have the attribute deleted from.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char&nbsp;*</em><code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Name of the attribute to delete.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5adelete_f
+    <dd>
+	<pre>
+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:
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5adelete_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Aget_name" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Annot-GetName">H5Aget_name</a>
+<dt><strong>Signature:</strong>
+    <dd><em>ssize_t</em> <code>H5Aget_name</code>(<em>hid_t</em> <code>attr_id</code>,
+        <em>size_t</em> <code>buf_size</code>,
+        <em>char *</em><code>buf</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Gets an attribute name.
+<dt><strong>Description:</strong>
+    <dd><code>H5Aget_name</code> retrieves the name of an attribute 
+        specified by the identifier, <code>attr_id</code>.
+        Up to <code>buf_size</code> characters are stored in 
+        <code>buf</code> followed by a <code>\0</code> string
+        terminator.  If the name of the attribute is longer than 
+        <code>(buf_size -1)</code>, the string terminator is stored in the
+        last position of the buffer to properly terminate the string.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>attr_id</code></td>
+            <td valign="top">IN: Identifier of the attribute.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em>&nbsp;<code>buf_size&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: The size of the buffer to store the name in.</td></tr>
+        <tr>
+		    <td valign="top"><em>char *</em><code>buf</code></td>
+            <td valign="top">IN: Buffer to store name in.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the length of the attribute's name, which may be
+        longer than <code>buf_size</code>, if successful.
+        Otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5aget_name_f
+    <dd>
+	<pre>
+SUBROUTINE h5aget_name_f(attr_id, size, buf, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier 
+  INTEGER, INTENT(IN) :: size            ! Buffer size 
+  CHARACTER(LEN=*), INTENT(OUT) :: buf   ! Buffer to hold attribute name
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code: name length  
+                                         ! on success and -1 on failure
+END SUBROUTINE h5aget_name_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Aget_num_attrs" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Annot-NumAttrs">H5Aget_num_attrs</a>
+<dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Aget_num_attrs</code>(<em>hid_t</em> <code>loc_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Determines the number of attributes attached to an object.
+<dt><strong>Description:</strong>
+    <dd><code>H5Aget_num_attrs</code> returns the number of attributes 
+        attached to the object specified by its identifier, 
+        <code>loc_id</code>.  
+        The object can be a group, dataset, or named datatype.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>loc_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of a group, dataset, or named datatype.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the number of attributes if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5aget_num_attrs_f
+    <dd>
+	<pre>
+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:
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5aget_num_attrs_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Aget_space" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Annot-GetSpace">H5Aget_space</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Aget_space</code>(<em>hid_t</em> <code>attr_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Gets a copy of the dataspace for an attribute.
+<dt><strong>Description:</strong>
+    <dd><code>H5Aget_space</code> retrieves a copy of the dataspace 
+        for an attribute.  The dataspace identifier returned from 
+        this function must be released with <code>H5Sclose</code>
+        or resource leaks will develop.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>attr_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of an attribute.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns attribute dataspace identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5aget_space_f
+    <dd>
+	<pre>
+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:
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5aget_space_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Aget_type" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Annot-GetType">H5Aget_type</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Aget_type</code>(<em>hid_t</em> <code>attr_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Gets an attribute datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Aget_type</code> retrieves a copy of the datatype 
+        for an attribute.  
+        <p>
+        The datatype is reopened if it is a named type before returning
+        it to the application.  The datatypes returned by this function
+        are always read-only.  If an error occurs when atomizing the 
+        return datatype, then the datatype is closed.
+        <p>
+        The datatype identifier returned from this function must be 
+        released with <code>H5Tclose</code> or resource leaks will develop.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>attr_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of an attribute.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a datatype identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5aget_type_f
+    <dd>
+	<pre>
+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:
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5aget_type_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Aiterate" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Annot-Iterate">H5Aiterate</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Aiterate</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>unsigned *</em> <code>idx</code>,
+        <em>H5A_operator_t</em> <code>op</code>,
+        <em>void *</em><code>op_data</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Calls a user's function for each attribute on an object.
+<dt><strong>Description:</strong>
+    <dd><code>H5Aiterate</code> iterates over the attributes of
+        the object specified by its identifier, <code>loc_id</code>.
+        The object can be a group, dataset, or named datatype.
+        For each attribute of the object, the <code>op_data</code>
+        and some additional information specified below are passed 
+        to the operator function <code>op</code>.
+        The iteration begins with the attribute specified by its
+        index, <code>idx</code>; the index for the next attribute 
+        to be processed by the operator, <code>op</code>, is 
+        returned in <code>idx</code>.
+        If <code>idx</code> is the null pointer, then all attributes
+        are processed.
+        <p>
+        The prototype for <code>H5A_operator_t</code> is: <br>
+            <code>typedef herr_t (*H5A_operator_t)(hid_t <em>loc_id</em>,
+                  const char *<em>attr_name</em>, 
+                  void *<em>operator_data</em>);
+            </code>
+        <p>
+        The operation receives the identifier for the group, dataset
+        or named datatype being iterated over, <code>loc_id</code>, the
+        name of the current attribute about the object, <code>attr_name</code>,
+        and the pointer to the operator data passed in to <code>H5Aiterate</code>,
+        <code>op_data</code>.  The return values from an operator are:
+        <ul>
+        <li>Zero causes the iterator to continue, returning zero when all 
+            attributes have been processed.
+        <li>Positive causes the iterator to immediately return that positive
+            value, indicating short-circuit success.  The iterator can be
+            restarted at the next attribute.
+        <li>Negative causes the iterator to immediately return that value,
+            indicating failure.  The iterator can be restarted at the next
+            attribute.
+        </ul>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+            <td valign="top">IN: Identifier of a group, dataset or named datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned *</em> <code>idx</code></td>
+            <td valign="top">IN/OUT: Starting (IN) and ending (OUT) attribute index.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5A_operator_t</em>&nbsp;<code>op&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: User's function to pass each attribute to</td></tr>
+        <tr>
+		    <td valign="top"><em>void *</em><code>op_data</code></td>
+            <td valign="top">IN/OUT: User's data to pass through to iterator operator function</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>If successful, returns the return value of the last operator 
+        if it was non-zero, or zero if all attributes were processed.
+        Otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--	
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Aopen_idx" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Annot-OpenIdx">H5Aopen_idx</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Aopen_idx</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>unsigned int</em> <code>idx</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Opens the attribute specified by its index.
+<dt><strong>Description:</strong>
+    <dd><code>H5Aopen_idx</code> opens an attribute which is attached 
+        to the object specified with <code>loc_id</code>. 
+        The location object may be either a group, dataset, or 
+        named datatype, all of which may have any sort of attribute.  
+        The attribute specified by the index, <code>idx</code>, 
+        indicates the attribute to access.  
+        The value of <code>idx</code> is a 0-based, non-negative integer.
+        The attribute identifier returned from this function must be 
+        released with <code>H5Aclose</code> or resource leaks will develop. 
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+            <td valign="top">IN: Identifier of the group, dataset, or named datatype 
+                attribute to be attached to.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned&nbsp;int</em>&nbsp;<code>idx&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Index of the attribute to open.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns attribute identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5aopen_idx_f
+    <dd>
+	<pre>
+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:
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5aopen_idx_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Aopen_name" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Annot-OpenName">H5Aopen_name</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Aopen_name</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>const char *</em><code>name</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd> Opens an attribute specified by name.
+<dt><strong>Description:</strong>
+    <dd><code>H5Aopen_name</code> opens an attribute specified by 
+         its name, <code>name</code>, which is attached to the 
+         object specified with <code>loc_id</code>. 
+         The location object may be either a group, dataset, or 
+         named datatype, which may have any sort of attribute. 
+         The attribute identifier returned from this function must 
+         be released with <code>H5Aclose</code> or resource leaks 
+         will develop. 
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+            <td valign="top">IN: Identifier of a group, dataset, or named datatype 
+                atttribute to be attached to.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char&nbsp;*</em><code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Attribute name.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns attribute identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5aopen_name_f
+    <dd>
+	<pre>
+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:
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5aopen_name_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Aread" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Annot-Read">H5Aread</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Aread</code>(<em>hid_t</em> <code>attr_id</code>,
+        <em>hid_t</em> <code>mem_type_id</code>,
+        <em>void *</em><code>buf</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Reads an attribute.
+<dt><strong>Description:</strong>
+    <dd><code>H5Aread</code> reads an attribute, specified with 
+        <code>attr_id</code>.  The attribute's memory datatype 
+        is specified with <code>mem_type_id</code>.  The entire 
+        attribute is read into <code>buf</code> from the file. 
+        <p>
+        Datatype conversion takes place at the time of a read or write
+        and is automatic.  See the
+        <a href="Datatypes.html#Datatypes-DataConversion">Data Conversion</a> 
+        section of <cite>The Data Type Interface (H5T)</cite> in the 
+        <cite>HDF5 User's Guide</cite> for a discussion of 
+        data conversion, including the range of conversions currently 
+        supported by the HDF5 libraries.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>attr_id</code></td>
+            <td valign="top">IN: Identifier of an attribute to read.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>mem_type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the attribute datatype (in memory).</td></tr>
+        <tr>
+		    <td valign="top"><em>void *</em><code>buf</code></td>
+            <td valign="top">OUT: Buffer for data to be read.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5aread_f
+    <dd>
+	<pre>
+SUBROUTINE h5aread_f(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)
+  TYPE, INTENT(INOUT)  :: buf              ! Data buffer; may be a scalar or 
+                                           ! an array
+  DIMENSION(*), INTEGER(HSIZE_T), INTENT(IN)  :: 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
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code:
+                                           ! 0 on success and -1 on failure
+END SUBROUTINE h5aread_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+            <strong>Fortran90</strong></td></tr>
+        <tr>
+          <td valign="top">1.4.2</td>
+          <td valign="top">
+            The <code>dims</code> parameter was added in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Awrite" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Annot-Write">H5Awrite</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Awrite</code>(<em>hid_t</em> <code>attr_id</code>,
+        <em>hid_t</em> <code>mem_type_id</code>,
+        <em>const void *</em><code>buf</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Writes data to an attribute.
+<dt><strong>Description:</strong>
+    <dd><code>H5Awrite</code> writes an attribute, specified with 
+        <code>attr_id</code>.  The attribute's memory datatype 
+        is specified with <code>mem_type_id</code>.  The entire 
+        attribute is written from <code>buf</code> to the file. 
+        <p>
+        Datatype conversion takes place at the time of a read or write
+        and is automatic.  See the
+        <a href="Datatypes.html#Datatypes-DataConversion">Data Conversion</a> 
+        section of <cite>The Data Type Interface (H5T)</cite> in the 
+        <cite>HDF5 User's Guide</cite> for a discussion of 
+        data conversion, including the range of conversions currently 
+        supported by the HDF5 libraries.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>attr_id</code></td>
+            <td valign="top">IN: Identifier of an attribute to write.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>mem_type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the attribute datatype (in memory).</td></tr>
+        <tr>
+		    <td valign="top"><em>const void *</em><code>buf</code></td>
+            <td valign="top">IN: Data to be written.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5awrite_f
+    <dd>
+	<pre>
+SUBROUTINE h5awrite_f(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)
+  TYPE, INTENT(IN) :: buf                  ! Data buffer; may be a scalar or 
+                                           ! an array
+  DIMENSION(*), INTEGER(HSIZE_T), INTENT(IN)  :: 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
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code:
+                                           ! 0 on success and -1 on failure
+END SUBROUTINE h5awrite_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+            <strong>Fortran90</strong></td></tr>
+        <tr>
+          <td valign="top">1.4.2</td>
+          <td valign="top">
+            The <code>dims</code> parameter was added in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 16 October 2003");
+-->
+</SCRIPT>
+ 
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/RM_H5D.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/RM_H5D.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/RM_H5D.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1683 @@
+<html>
+<head><title>
+HDF5/H5D API Specification
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+<!-- HEADER RIGHT " " -->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>H5D: Datasets Interface</h1>
+</center>
+
+<h2>Dataset Object API Functions</h2>
+
+These functions create and manipulate dataset objects, 
+and set and retrieve their constant or persistent properties.
+
+<p>
+<strong>The C Interfaces:</strong>
+
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li><a href="#Dataset-Create">H5Dcreate</a>
+    <li><a href="#Dataset-Open">H5Dopen</a>
+    <li><a href="#Dataset-Close">H5Dclose</a>
+    <li><a href="#Dataset-GetSpace">H5Dget_space</a>
+    <li><a href="#Dataset-GetSpaceStatus">H5Dget_space_status</a>
+    
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Dataset-GetType">H5Dget_type</a>
+    <li><a href="#Dataset-GetCreatePlist">H5Dget_create_plist</a>
+    <li><a href="#Dataset-GetOffset">H5Dget_offset</a>
+    <li><a href="#Dataset-GetStorageSize">H5Dget_storage_size</a>
+    <li><a href="#Dataset-VLGetBuf">H5Dvlen_get_buf_size</a>
+    <li><a href="#Dataset-VLReclaim">H5Dvlen_reclaim</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+<!--
+    <li><a href="#Dataset-Debug">H5Ddebug</a>
+       This function is in the distributed source code and is technically 
+       a public function, but it is NOT intended for public  use.  
+       It is used only by certain tools.
+       DO NOT list it in the Reference Manual.
+    -->
+    <li><a href="#Dataset-Read">H5Dread</a>
+    <li><a href="#Dataset-Write">H5Dwrite</a>
+    <li><a href="#Dataset-Iterate">H5Diterate</a>
+    <li><a href="#Dataset-Extend">H5Dextend</a>
+    <li><a href="#Dataset-Fill">H5Dfill</a>
+</ul>
+</td></tr>
+</table>
+<br>
+
+<i>Alphabetical Listing</i>
+
+<table border="0">
+  <tr>
+    <td valign="top">
+	<ul>
+      <li><a href="#Dataset-Close">H5Dclose</a>
+      <li><a href="#Dataset-Create">H5Dcreate</a>
+      <li><a href="#Dataset-Extend">H5Dextend</a>
+      <li><a href="#Dataset-Fill">H5Dfill</a>
+      <li><a href="#Dataset-GetCreatePlist">H5Dget_create_plist</a>
+      <li><a href="#Dataset-GetOffset">H5Dget_offset</a>
+	</ul>     
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#Dataset-GetSpace">H5Dget_space</a>
+      <li><a href="#Dataset-GetSpaceStatus">H5Dget_space_status</a>
+      <li><a href="#Dataset-GetStorageSize">H5Dget_storage_size</a>
+      <li><a href="#Dataset-GetType">H5Dget_type</a>
+      <li><a href="#Dataset-Iterate">H5Diterate</a>
+      <li><a href="#Dataset-Open">H5Dopen</a>
+	</ul>
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#Dataset-Read">H5Dread</a>
+      <li><a href="#Dataset-VLGetBuf">H5Dvlen_get_buf_size</a>
+      <li><a href="#Dataset-VLReclaim">H5Dvlen_reclaim</a>
+      <li><a href="#Dataset-Write">H5Dwrite</a>
+	</ul>
+    </td>
+  </tr>
+</table>
+
+<br>
+<strong>The FORTRAN90 Interfaces:</strong>
+<br>
+In general, each FORTRAN90 subroutine performs exactly the same task 
+as the corresponding C function.  
+<br>
+
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li><a href="#Dataset-Create">h5dcreate_f</a>
+    <li><a href="#Dataset-Open">h5dopen_f</a>
+    <li><a href="#Dataset-Close">h5dclose_f</a>
+    <li><a href="#Dataset-GetSpace">h5dget_space_f</a>
+    <li><a href="#Dataset-GetSpaceStatus">h5dget_space_status_f</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Dataset-GetType">h5dget_type_f</a>
+    <li><a href="#Dataset-GetCreatePlist">h5dget_create_plist_f</a>
+    <li><a href="#Dataset-GetOffset">h5dget_offset_f</a>
+    <li><a href="#Dataset-GetStorageSize">h5dget_storage_size_f</a>
+    <li><a href="#Dataset-VLGetBuf">h5dvlen_get_max_len_f</a>
+<!--<li><a href="#Dataset-VLReclaim">h5dvlen_reclaim_f</a>               -->
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Dataset-Read">h5dread_f</a>
+    <li><a href="#Dataset-Write">h5dwrite_f</a>
+<!--<li><a href="#Dataset-Iterate">h5diterate_f</a>                     -->
+<!--<li><a href="#Dataset-Debug">h5ddebug_f</a>                         -->
+    <li><a href="#Dataset-Extend">h5dextend_f</a>
+    <li><a href="#Dataset-Fill">h5dfill_f</a>
+</ul>
+</td></tr>
+</table>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT " " -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dclose" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-Close">H5Dclose</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Dclose</code>(<em>hid_t </em><code>dataset_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Closes the specified dataset.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dclose</code> ends access to a dataset specified by 
+        <code>dataset_id</code> and releases resources used by it.
+        Further use of the dataset identifier is illegal in calls to 
+        the dataset API.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>dataset_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the dataset to close access to.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5dclose_f
+    <dd>
+	<pre>
+SUBROUTINE h5dclose_f(dset_id, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier  
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code  
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5dclose_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dcreate" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-Create">H5Dcreate</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Dcreate</code>(<em>hid_t </em><code>loc_id</code>,
+        <em>const char *</em><code>name</code>,
+        <em>hid_t</em> <code>type_id</code>,
+        <em>hid_t</em> <code>space_id</code>,
+        <em>hid_t</em> <code>create_plist_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Creates a dataset at the specified location.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dcreate</code> creates a data set with a name, 
+        <code>name</code>, in the file or in the group specified by 
+        the identifier <code>loc_id</code>.
+        The dataset has the datatype and dataspace identified by
+        <code>type_id</code> and <code>space_id</code>, respectively.
+        The specified datatype and dataspace are the datatype and
+        dataspace of the dataset as it will exist in the file,
+        which may be different than in application memory.
+        Dataset creation properties are specified by the argument
+        <code>create_plist_id</code>.
+        <p>
+        Dataset names within a group are unique:
+        <code>H5Dcreate</code> will return an error if a dataset with
+        the name specified in <code>name</code> already exists at the
+        location specified in <code>loc_id</code>.
+        <p>
+        <code>create_plist_id</code> is a <code>H5P_DATASET_CREATE</code>
+        property list created with <code>H5Pcreate</code> and
+        initialized with the various functions described above.
+	<p>
+	<code>H5Dcreate</code> returns an error if the dataset's datatype 
+	includes a variable-length (VL) datatype and the fill value 
+	is undefined, i.e., set to <code>NULL</code> in the 
+	dataset creation property list. 
+	Such a VL datatype may be directly included,  
+	indirectly included as part of a compound or array datatype, or 
+	indirectly included as part of a nested compound or array datatype.
+	<p>
+        <code>H5Dcreate</code> returns a dataset identifier for success
+        or a negative value for failure. 
+	The dataset identifier should eventually be closed by 
+        calling <code>H5Dclose</code> to release resources it uses.
+	<p>
+	<strong>Fill values and space allocation:</strong><br>
+	The HDF5 library provides flexible means 
+	of specifying a fill value, 
+	of specifying when space will be allocated for a dataset, and
+	of specifying when fill values will be written to a dataset.
+	For further information on these topics, see the document 
+	<a href="http://hdf.ncsa.uiuc.edu/RFC/Fill_Value/FillValue.html"> 
+	<cite>Fill Value and Dataset Storage Allocation Issues in HDF5</cite></a> 
+	and the descriptions of the following HDF5 functions in this 
+	<cite>HDF5 Reference Manual</cite>:
+	<table width=80% border="0">
+	<tr valign="top" align="left"><td width=10%>&nbsp;
+	  </td><td width=45%>
+            <a href="#Dataset-Fill"><code>H5Dfill</code></a><br>
+            <a href="RM_H5P.html#Property-SetFillValue"><code>H5Pset_fill_value</code></a><br>
+            <a href="RM_H5P.html#Property-GetFillValue"><code>H5Pget_fill_value</code></a><br>
+            <a href="RM_H5P.html#Property-FillValueDefined"><code>H5Pfill_value_defined</code></a>
+	  </td><td width=45%>
+            <a href="RM_H5P.html#Property-SetFillTime"><code>H5Pset_fill_time</code></a><br>
+            <a href="RM_H5P.html#Property-GetFillTime"><code>H5Pget_fill_time</code></a><br>
+            <a href="RM_H5P.html#Property-SetAllocTime"><code>H5Pset_alloc_time</code></a><br>
+            <a href="RM_H5P.html#Property-GetAllocTime"><code>H5Pget_alloc_time</code></a>
+	  </td></tr>
+	</table>
+	This information is also included in the 
+	&ldquo;HDF5 Datasets&rdquo; chapter of 
+	the new <cite>HDF5 User's Guide</cite>, 
+	which is being prepared for release.
+<dt><strong>Note:</strong>
+    <dd><code>H5Dcreate</code> can fail if there has been an error
+        in setting up an element of the dataset creation property list.
+        In such cases, each item in the property list must be examined
+        to ensure that the setup satisfies to all required conditions.
+        This problem is most likely to occur with the use of filters.
+        <p>
+        For example, <code>H5Dcreate</code> will fail without a meaningful
+        explanation if 
+        <ul>
+          <li>SZIP compression is being used on the dataset and 
+          <li>the SZIP parameter <code>pixels_per_block</code> 
+              is set to an inappropriate value.
+        </ul>
+        <p>
+        In such a case, one would refer to the description of 
+        <a href="RM_H5P.html#Property-SetSzip"><code>H5Pset_szip</code></a>,
+        looking for any conditions or requirements that might affect the
+        local computing environment.
+        <!--
+        <p>
+        Other known similar problems can occur with . . .
+        --> 
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+            <td valign="top">IN: Identifier of the file or group 
+                within which to create the dataset.</td></tr>
+        <tr>
+		    <td valign="top"><em>const char *</em> <code>name</code></td>
+            <td valign="top">IN: The name of the dataset to create.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">IN: Identifier of the datatype to use 
+                when creating the dataset.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>space_id</code></td>
+            <td valign="top">IN: Identifier of the dataspace to use 
+                when creating the dataset.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>create_plist_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the set creation property list.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a dataset identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5dcreate_f
+    <dd>
+	<pre>
+SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, & 
+                       hdferr, creation_prp) 
+  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(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 
+                                         ! 0 on success and -1 on failure
+  INTEGER(HID_T), OPTIONAL, INTENT(IN) :: creation_prp
+                                         ! Dataset creation propertly 
+                                         ! list identifier , default
+                                         ! value is H5P_DEFAULT_F (6) 
+END SUBROUTINE h5dcreate_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dextend" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-Extend">H5Dextend</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Dextend</code>(<em>hid_t </em><code>dataset_id</code>,
+        <em>const hsize_t *</em> <code>size</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Extends a dataset with unlimited dimension.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dextend</code> verifies that the dataset is at least of size
+        <code>size</code>.  
+        The dimensionality of <code>size</code> is the same as that of
+        the dataspace of the dataset being changed.
+        This function cannot be applied to a dataset with fixed dimensions.
+	<p>
+	Space on disk is immediately allocated for the new dataset extent 
+        if the dataset's space allocation time is set to 
+	<code>H5D_ALLOC_TIME_EARLY</code>.
+	Fill values will be written to the dataset if the dataset's fill time 
+	is set to <code>H5D_FILL_TIME_IFSET</code> or 
+	<code>H5D_FILL_TIME_ALLOC</code>.
+	(Also see 
+	<a href="RM_H5P.html#Property-SetFillTime">H5Pset_fill_time</a>
+	and 
+	<a href="RM_H5P.html#Property-SetAllocTime">H5Pset_alloc_time</a>.)
+
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dataset_id</code></td>
+            <td valign="top">IN: Identifier of the dataset.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;hsize_t&nbsp;*</em>&nbsp;<code>size&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Array containing the new magnitude of each dimension.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5dextend_f
+    <dd>
+	<pre>
+SUBROUTINE h5dextend_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 
+                                             ! 0 on success and -1 on failure
+END SUBROUTINE h5dextend_f 
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dfill" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-Fill">H5Dfill</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Dfill</code>(
+        <em>const void *</em><code>fill</code>,
+        <em>hid_t </em><code>fill_type_id</code>,
+        <em>void *</em><code>buf</code>,
+        <em>hid_t </em><code>buf_type_id</code>,
+        <em>hid_t </em><code>space_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Fills dataspace elements with a fill value in a memory buffer.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dfill</code> explicitly fills 
+        the dataspace selection in memory, <code>space_id</code>, 
+        with the fill value specified in <code>fill</code>.
+        If <code>fill</code> is <code>NULL</code>, 
+        a fill value of <code>0</code> (zero) is used.
+        <p>
+	<code>fill_type_id</code> specifies the datatype 
+	of the fill value.<br>
+	<code>buf</code> specifies the buffer in which 
+	the dataspace elements will be written.<br>
+	<code>buf_type_id</code> specifies the datatype of 
+	those data elements.
+	<p>
+        Note that if the fill value datatype differs 
+        from the memory buffer datatype, the fill value 
+        will be converted to the memory buffer datatype 
+        before filling the selection.
+<dt><strong>Note:</strong>
+    <dd>Applications sometimes write data only to portions of 
+	an allocated dataset.  It is often useful in such cases 
+	to fill the unused space with a known 
+	<span class="termEmphasis">fill value</span>.  
+	See <a href="RM_H5P.html#Property-SetFillValue">H5Pset_fill_value</a>
+	for further discussion.  
+	Other related functions include
+	<a href="RM_H5P.html#Property-GetFillValue">H5Pget_fill_value</a>,
+	<a href="RM_H5P.html#Property-FillValueDefined">H5Pfill_value_defined</a>,
+	<a href="RM_H5P.html#Property-SetFillTime">H5Pset_fill_time</a>,
+	<a href="RM_H5P.html#Property-GetFillTime">H5Pget_fill_time</a>,
+	and
+	<a href="#Dataset-Create">H5Dcreate</a>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>const void *</em><code>fill</code></td>
+            <td valign="top">IN: Pointer to the fill value to be used.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t&nbsp;</em><code>fill_type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN:  Fill value datatype identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>void *</em><code>buf</code></td>
+            <td valign="top">IN/OUT: Pointer to the memory buffer containing the 
+                selection to be filled.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t </em><code>buf_type_id</code></td>
+            <td valign="top">IN: Datatype of dataspace elements to be filled.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t </em><code>space_id</code></td>
+            <td valign="top">IN: Dataspace describing memory buffer and 
+                    containing the selection to be filled.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5dfill_f
+    <dd>
+	<pre>
+SUBROUTINE h5dfill_f(fill_value, space_id, buf, hdferr)
+  IMPLICIT NONE
+  TYPE, INTENET(IN) :: fill_value        ! Fill value; may be have one of the
+                                         ! following types:
+                                         ! INTEGER, REAL, DOUBLE PRECISION, 
+                                         ! CHARACTER
+  INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier 
+  TYPE, DIMENSION(*) :: buf              ! Memory buffer to fill in; must have
+                                         ! the same datatype as fill value
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code  
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5dfill_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dget_create_plist" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-GetCreatePlist">H5Dget_create_plist</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Dget_create_plist</code>(<em>hid_t </em><code>dataset_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns an identifier for a copy of the 
+        dataset creation property list for a dataset.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dget_create_plist</code> returns an identifier for a 
+        copy of the dataset creation property list for a dataset.
+        The creation property list identifier should be released with 
+        the <code>H5Pclose</code> function.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>dataset_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the dataset to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a dataset creation property list identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5dget_create_plist_f
+    <dd>
+	<pre>
+SUBROUTINE h5dget_create_plist_f(dataset_id, creation_prp, hdferr) 
+  IMPLICIT NONE 
+  INTEGER(HID_T), INTENT(IN) :: dataset_id    ! Dataset identifier
+  INTEGER(HID_T), INTENT(OUT) :: creation_id  ! Dataset creation
+                                              ! property list identifier
+  INTEGER, INTENT(OUT) :: hdferr              ! Error code 
+                                              ! 0 on success and -1 on failure
+END SUBROUTINE h5dget_create_plist_f  
+
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dget_offset" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-GetOffset">H5Dget_offset</a>
+<dt><strong>Signature:</strong>
+    <dd><em>haddr_t </em><code>H5Dget_offset</code>(<em>hid_t </em><code>dset_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Returns dataset address in file.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dget_offset</code> returns the address in the file 
+        of the dataset <code>dset_id</code>.
+	That address is expressed as the offset in bytes from 
+	the beginning of the file.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t&nbsp;</em><code>dset_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Dataset identifier.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the offset in bytes; 
+        otherwise returns <code>HADDR_UNDEF</code>, a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dget_space" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-GetSpace">H5Dget_space</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Dget_space</code>(<em>hid_t </em><code>dataset_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns an identifier for  a copy of the dataspace for a dataset.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dget_space</code> returns an identifier for a copy of the 
+        dataspace for a dataset.  
+        The dataspace identifier should be released with the 
+        <code>H5Sclose</code> function.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>dataset_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the dataset to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a dataspace identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5dget_space_f
+    <dd>
+	<pre>
+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 
+                                                ! 0 on success and -1 on failure
+END SUBROUTINE h5dget_space_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dget_space_status" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-GetSpaceStatus">H5Dget_space_status</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Dget_space_status</code>(<em>hid_t </em><code>dset_id</code>,
+                        <em>H5D_space_status_t *</em><code>status</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Determines whether space has been allocated for a dataset.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dget_space_status</code> determines whether space has been 
+        allocated for the dataset <code>dset_id</code>.
+	<p>
+        Space allocation status is returned in <code>status</code>,
+        which will have one of the following values:
+        <center>
+	<table border="0">
+          <tr valign="top"><td rowspan="3">&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+            <code>H5D_SPACE_STATUS_NOT_ALLOCATED</code>
+	    </td><td>
+            Space has not been allocated for this dataset.
+          </td></tr><tr valign="top"><td>
+            <code>H5D_SPACE_STATUS_ALLOCATED</code>
+	    </td><td>
+            Space has been allocated for this dataset.
+          </td></tr><tr valign="top"><td>
+            <code>H5D_SPACE_STATUS_PART_ALLOCATED</code>&nbsp;&nbsp;
+	    </td><td>
+            Space has been partially allocated for this dataset.  
+	    (Used only for datasets with chunked storage.)
+          </td></tr>
+        </table>
+	</center>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dset_id</code></td>
+            <td valign="top">IN: Identifier of the dataset to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5D_space_status_t&nbsp;*</em><code>status&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Space allocation status.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5dget_space_status_f
+    <dd>
+	<pre>
+SUBROUTINE h5dget_space_status_f(dset_id, flag, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: dset_id  ! Dataset identifier 
+  INTEGER, INTENET(OUT)      :: flag     ! Status flag ; possible values:
+                                         ! H5D_SPACE_STS_ERROR_F
+                                         ! H5D_SPACE_STS_NOT_ALLOCATED_F
+                                         ! H5D_SPACE_STS_PART_ALLOCATED_F
+                                         ! H5D_SPACE_STS_ALLOCATED_F
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code  
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5dget_space_status_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dget_storage_size" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-GetStorageSize">H5Dget_storage_size</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hsize_t </em><code>H5Dget_storage_size</code>(<em>hid_t </em><code>dataset_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns the amount of storage required for a dataset.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dget_storage_size</code> returns the amount of storage 
+        that is required for the specified dataset, <code>dataset_id</code>. 
+        For chunked datasets, this is the number of allocated chunks times 
+        the chunk size.        
+        The return value may be zero if no data has been stored.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>dataset_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the dataset to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the amount of storage space allocated for the dataset, 
+        not counting meta data; 
+        otherwise returns 0 (zero).
+<dt><strong>Fortran90 Interface:</strong> h5dget_storage_size_f
+    <dd>
+	<pre>
+SUBROUTINE h5dget_storage_size_f(dset_id, size, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: dset_id  ! Dataset identifier  
+  INTEGER(HSIZE_T), INTENT(OUT)  :: size ! Amount of storage required 
+                                         ! for dataset
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code  
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5dget_storage_size_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.5</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dget_type" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-GetType">H5Dget_type</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Dget_type</code>(<em>hid_t </em><code>dataset_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns an identifier for a copy of the datatype for a dataset.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dget_type</code> returns an identifier for a copy of the 
+        datatype for a dataset.  
+        The datatype should be released with the <code>H5Tclose</code> function.
+        <p>
+        If a dataset has a named datatype, then an identifier to the 
+        opened datatype is returned.  
+        Otherwise, the returned datatype is read-only.  
+        If atomization of the datatype fails, then the datatype is closed.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>dataset_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the dataset to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a datatype identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5dget_type_f
+    <dd>
+	<pre>
+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 
+                                              ! 0 on success and -1 on failure
+END SUBROUTINE h5dget_type_f 
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Diterate" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-Iterate">H5Diterate</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Diterate</code>(
+        <em>void *</em><code>buf</code>,
+        <em>hid_t </em><code>type_id</code>,
+        <em>hid_t </em><code>space_id</code>,
+        <em>H5D_operator_t </em><code>operator</code>,
+        <em>void *</em><code>operator_data</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Iterates over all selected elements in a dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Diterate</code> iterates over all the elements selected 
+        in a memory buffer.  The callback function is called once for each 
+        element selected in the dataspace.  
+        <p>
+        The selection in the dataspace is modified so that any elements 
+        already iterated over are removed from the selection if the 
+        iteration is interrupted (by the <code>H5D_operator_t</code> 
+        function returning non-zero) before the iteration is complete;
+        the iteration may then be re-started by the user where it left off.  
+        
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>void *</em><code>buf</code></td>
+            <td valign="top">IN/OUT: Pointer to the buffer in memory containing the 
+                elements to iterate over.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t </em><code>type_id</code></td>
+            <td valign="top">IN:  Datatype identifier for the elements stored in 
+                <code>buf</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t </em><code>space_id</code></td>
+            <td valign="top">IN: Dataspace identifier for <code>buf</code>.  
+                Also contains the selection to iterate over.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5D_operator_t&nbsp;</em><code>operator&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Function pointer to the routine to be called 
+                for each element in <code>buf</code> iterated over.</td></tr>
+        <tr>
+		    <td valign="top"><em>void *</em><code>operator_data</code></td>
+            <td valign="top">IN/OUT: Pointer to any user-defined data associated 
+                with the operation.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the return value of the last operator if it was non-zero,
+        or zero if all elements have been processed.
+        Otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+            <strong>C</strong></td></tr>
+        <tr>
+          <td valign="top">1.6.4</td>
+          <td valign="top">
+            The following changes occured in the 
+            <code>H5D_operator_t</code> function in this release:<br>
+            &nbsp;&nbsp;
+            <code>ndim</code> parameter type was changed to 
+            <em>unsigned</em><br>
+            &nbsp;&nbsp;
+            <code>point</code> parameter type was changed to
+            <em>const hsize_t</em></td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dopen" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-Open">H5Dopen</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Dopen</code>(<em>hid_t </em><code>loc_id</code>,
+        <em>const char *</em><code>name</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Opens an existing dataset.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dopen</code> opens an existing dataset for access in the file
+        or group specified in <code>loc_id</code>.  <code>name</code> is
+        a dataset name and is used to identify the dataset in the file.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+            <td valign="top">IN: Identifier of the file or group 
+                within which the dataset to be accessed will be found.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char&nbsp;*</em>&nbsp;<code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: The name of the dataset to access.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a dataset identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5dopen_f
+    <dd>
+	<pre>
+SUBROUTINE h5dopen_f(loc_id, name, dset_id, hdferr) 
+  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 
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5dopen_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dread" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-Read">H5Dread</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Dread</code>(<em>hid_t </em><code>dataset_id</code>,
+        <em>hid_t</em> <code>mem_type_id</code>,
+        <em>hid_t</em> <code>mem_space_id</code>,
+        <em>hid_t</em> <code>file_space_id</code>,
+        <em>hid_t</em> <code>xfer_plist_id</code>,
+        <em>void *</em> <code>buf</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Reads raw data from a dataset into a buffer.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dread</code> reads a (partial) dataset, specified by its
+        identifier <code>dataset_id</code>, from the 
+        file into an application memory buffer <code>buf</code>.
+        Data transfer properties are defined by the argument 
+        <code>xfer_plist_id</code>.
+        The memory datatype of the (partial) dataset is identified by 
+        the identifier <code>mem_type_id</code>.
+        The part of the dataset to read is defined by 
+        <code>mem_space_id</code> and <code>file_space_id</code>.
+        <p>
+        <code>file_space_id</code> is used to specify only the selection within
+        the file dataset's dataspace.  Any dataspace specified in <code>file_space_id</code>
+        is ignored by the library and the dataset's dataspace is always used.
+        <code>file_space_id</code> can be the constant <code>H5S_ALL</code>. 
+        which indicates that the entire file dataspace, as defined by the
+        current dimensions of the dataset, is to be selected.
+        <p>
+        <code>mem_space_id</code> is used to specify both the memory dataspace
+        and the selection within that dataspace.
+        <code>mem_space_id</code> can be the constant <code>H5S_ALL</code>,
+        in which case the file dataspace is used for the memory dataspace and
+        the selection defined with <code>file_space_id</code> is used for the
+        selection within that dataspace.
+        <p>
+	If raw data storage space has not been allocated for the dataset 
+	and a fill value has been defined, the returned buffer <code>buf</code> 
+	is filled with the fill value. 
+        <p>
+        The behavior of the library for the various combinations of valid
+        dataspace identifiers and H5S_ALL for the <code>mem_space_id</code> and the
+        <code>file_space_id</code> parameters is described below:
+
+        <br><br>
+        <table border=0>
+        <tr>
+        <th>
+        <code>mem_space_id&nbsp;&nbsp;</code>
+        </th>
+        <th>
+        <code>file_space_id&nbsp;&nbsp;</code>
+        </th>
+        <th>
+        Behavior
+        </th>
+        </tr>
+	
+        <tr valign="top">
+        <td>
+        valid dataspace identifier
+        </td>
+        <td>
+        valid dataspace identifier
+        </td>
+        <td>
+        <code>mem_space_id</code> specifies the memory dataspace and the
+        selection within it.
+        <code>file_space_id</code> specifies the selection within the file
+        dataset's dataspace.
+        </td>
+        </tr>
+
+        <tr valign="top">
+        <td>
+        <code>H5S_ALL</code>
+        </td>
+        <td>
+        valid dataspace identifier
+        </td>
+        <td>
+        The file dataset's dataspace is used for the memory dataspace and the
+        selection specified with <code>file_space_id</code> specifies the
+        selection within it.
+        The combination of the file dataset's dataspace and the selection from 
+	<code>file_space_id</code> is used for memory also.
+        </td>
+        </tr>
+
+        <tr valign="top">
+        <td>
+        valid dataspace identifier
+        </td>
+        <td>
+        <code>H5S_ALL</code>
+        </td>
+        <td>
+        <code>mem_space_id</code> specifies the memory dataspace and the
+        selection within it.
+        The selection within the file dataset's dataspace is set to the "all"
+        selection.
+        </td>
+        </tr>
+
+        <tr valign="top">
+        <td>
+        <code>H5S_ALL</code>
+        </td>
+        <td>
+        <code>H5S_ALL</code>
+        </td>
+        <td>
+        The file dataset's dataspace is used for the memory dataspace and the
+        selection within the memory dataspace is set to the "all" selection.
+        The selection within the file dataset's dataspace is set to the "all"
+        selection.
+        </td>
+        </tr>
+
+        </table>
+
+        <p>
+        Setting an <code>H5S_ALL</code> selection indicates that the entire dataspace, as
+        defined by the current dimensions of a dataspace, will be selected.
+        The number of elements selected in the memory dataspace must match the
+        number of elements selected in the file dataspace.
+        <p>
+        <code>xfer_plist_id</code> can be the constant <code>H5P_DEFAULT</code>.
+        in which case the default data transfer properties are used.           
+        <p>
+	Data is automatically converted from the file datatype 
+        and dataspace to the memory datatype and dataspace
+	at the time of the read.  See the
+        <a href="Datatypes.html#Datatypes-DataConversion">Data Conversion</a> 
+        section of <cite>The Data Type Interface (H5T)</cite> in the 
+        <cite>HDF5 User's Guide</cite> for a discussion of 
+        data conversion, including the range of conversions currently 
+        supported by the HDF5 libraries.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dataset_id</code></td>
+            <td valign="top">IN: Identifier of the dataset read from.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>mem_type_id</code></td>
+            <td valign="top">IN: Identifier of the memory datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>mem_space_id</code></td>
+            <td valign="top">IN: Identifier of the memory dataspace.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>file_space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the dataset's dataspace in the file.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>xfer_plist_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of a transfer property list 
+                for this I/O operation.</td></tr>
+        <tr>
+		    <td valign="top"><em>void *</em> <code>buf</code></td>
+            <td valign="top">OUT: Buffer to receive data read from file.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5dread_f
+    
+	<dd>
+	<pre>
+SUBROUTINE h5dread_f(dset_id, mem_type_id, buf, dims, hdferr, &amp; 
+                     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
+  TYPE, INTENT(INOUT) :: buf                ! Data buffer; may be a scalar 
+                                            ! or an array
+  DIMENSION(*), INTEGER(HSIZE_T), INTENT(IN)  :: 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
+  INTEGER, INTENT(OUT) :: hdferr            ! Error code 
+                                            ! 0 on success and -1 on failure
+  INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id 
+                                            ! Memory dataspace identfier 
+                                            ! Default value is H5S_ALL_F 
+  INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id 
+                                            ! File dataspace identfier 
+                                            ! Default value is H5S_ALL_F
+  INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp 
+                                            ! Transfer property list identifier
+                                            ! Default value is H5P_DEFAULT_F             
+END SUBROUTINE h5dread_f
+	</pre>
+
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+            <strong>Fortran90</strong></td></tr>
+        <tr>
+          <td valign="top">1.4.2</td>
+          <td valign="top">
+            The <code>dims</code> parameter was added in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dvlen_get_buf_size" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-VLGetBuf">H5Dvlen_get_buf_size</a>
+<dt><strong>Signature:</strong>   
+    <dd><em>herr_t </em><code>H5Dvlen_get_buf_size</code>(<em>hid_t </em><code>dataset_id</code>,
+    <em>hid_t</em> <code>type_id</code>,
+    <em>hid_t</em> <code>space_id</code>,
+    <em>hsize_t</em> *<code>size</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Determines the number of bytes required to store VL data.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dvlen_get_buf_size</code> determines the number of bytes 
+        required to store the VL data from the dataset, using the 
+        <code>space_id</code> for the selection in the dataset on 
+        disk and the <code>type_id</code> for the memory representation 
+        of the VL data in memory.  
+        <p>
+        <code>*size</code> is returned with the number of bytes 
+        required to store the VL data in memory.          
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>dataset_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the dataset to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">IN: Datatype identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>space_id</code></td>
+            <td valign="top">IN: Dataspace identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t</em> *<code>size</code></td>
+            <td valign="top">OUT: The size in bytes of the memory 
+			                 buffer required to store the VL data.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5dvlen_get_max_len_f
+    <dd>There is no direct FORTRAN couterpart for the C function 
+        <code>H5Dvlen_get_buf_size</code>;  
+        corresponding functionality is provided by the FORTRAN function
+        <code>h5dvlen_get_max_len_f</code></a>.
+        <br>
+    <pre>
+SUBROUTINE h5dvlen_get_max_len_f(dset_id, size, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: dset_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)  :: elem_len ! Maximum length of the element
+  INTEGER, INTENT(OUT) :: hdferr            ! Error code  
+                                            ! 0 on success and -1 on failure
+END SUBROUTINE h5dvlen_get_max_len_f
+	</pre>
+	
+        <!--
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top" align="left">
+		    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.5</td>
+          <td valign="top">&nbsp;</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">Function introduced 
+		    in this release.</td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">&nbsp;</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dvlen_reclaim" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-VLReclaim">H5Dvlen_reclaim</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Dvlen_reclaim</code>(<em>hid_t </em><code>type_id</code>,
+    <em>hid_t</em> <code>space_id</code>,
+    <em>hid_t</em> <code>plist_id</code>,
+    <em>void</em> *<code>buf</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Reclaims VL datatype memory buffers.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dvlen_reclaim</code> reclaims memory buffers created to 
+        store VL datatypes.
+        <p>
+        The <code>type_id</code> must be the datatype stored in the buffer.
+        The <code>space_id</code> describes the selection for the memory buffer 
+        to free the VL datatypes within.  
+        The <code>plist_id</code> is the dataset transfer property list which 
+        was used for the I/O transfer to create the buffer.
+        And <code>buf</code> is the pointer to the buffer to be reclaimed.
+        <p>
+        The VL structures (<code>hvl_t</code>) in the user's buffer are 
+        modified to zero out the VL information after the memory has been reclaimed.
+        <p>
+        If nested VL datatypes were used to create the buffer, 
+        this routine frees them <em>from the bottom up</em>, releasing all 
+        the memory without creating memory leaks.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">IN: Identifier of the datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the dataspace.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist_id</code></td>
+            <td valign="top">IN: Identifier of the property list used to create the buffer.</td></tr>
+        <tr>
+		    <td valign="top"><em>void</em> *<code>buf</code></td>
+            <td valign="top">IN: Pointer to the buffer to be reclaimed.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Dwrite" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataset-Write">H5Dwrite</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Dwrite</code>(<em>hid_t </em><code>dataset_id</code>,
+        <em>hid_t</em> <code>mem_type_id</code>,
+        <em>hid_t</em> <code>mem_space_id</code>,
+        <em>hid_t</em> <code>file_space_id</code>,
+        <em>hid_t</em> <code>xfer_plist_id</code>,
+        <em>const void *</em> <code>buf</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Writes raw data from a buffer to a dataset.
+<dt><strong>Description:</strong>
+    <dd><code>H5Dwrite</code> writes a (partial) dataset, specified by its
+        identifier <code>dataset_id</code>, from the 
+        application memory buffer <code>buf</code> into the file.
+        Data transfer properties are defined by the argument 
+        <code>xfer_plist_id</code>.
+        The memory datatype of the (partial) dataset is identified by 
+        the identifier <code>mem_type_id</code>.
+        The part of the dataset to write is defined by 
+        <code>mem_space_id</code> and <code>file_space_id</code>.
+        <p>
+        <code>file_space_id</code> is used to specify only the selection within
+        the file dataset's dataspace.  Any dataspace specified in <code>file_space_id</code>
+        is ignored by the library and the dataset's dataspace is always used.
+        <code>file_space_id</code> can be the constant <code>H5S_ALL</code>. 
+        which indicates that the entire file dataspace, as defined by the
+        current dimensions of the dataset, is to be selected.
+        <p>
+        <code>mem_space_id</code> is used to specify both the memory dataspace
+        and the selection within that dataspace.
+        <code>mem_space_id</code> can be the constant <code>H5S_ALL</code>,
+        in which case the file dataspace is used for the memory dataspace and
+        the selection defined with <code>file_space_id</code> is used for the
+        selection within that dataspace.
+        <p>
+        The behavior of the library for the various combinations of valid
+        dataspace IDs and H5S_ALL for the <code>mem_space_id</code> and the
+        <code>file_space_id</code> parameters is described below:
+
+        <br><br>
+        <table border=0>
+        <tr>
+        <th>
+        <code>mem_space_id&nbsp;&nbsp;</code>
+        </th>
+        <th>
+        <code>file_space_id&nbsp;&nbsp;</code>
+        </th>
+        <th>
+        Behavior
+        </th>
+        </tr>
+	
+        <tr valign="top">
+        <td>
+        valid dataspace identifier
+        </td>
+        <td>
+        valid dataspace identifier
+        </td>
+        <td>
+        <code>mem_space_id</code> specifies the memory dataspace and the
+        selection within it.
+        <code>file_space_id</code> specifies the selection within the file
+        dataset's dataspace.
+        </td>
+        </tr>
+
+        <tr valign="top">
+        <td>
+        H5S_ALL
+        </td>
+        <td>
+        valid dataspace identifier
+        </td>
+        <td>
+        The file dataset's dataspace is used for the memory dataspace and the
+        selection specified with <code>file_space_id</code> specifies the
+        selection within it.
+        The combination of the file dataset's dataspace and the selection from 
+	<code>file_space_id</code> is used for memory also.
+        </td>
+        </tr>
+
+        <tr valign="top">
+        <td>
+        valid dataspace identifier
+        </td>
+        <td>
+        H5S_ALL
+        </td>
+        <td>
+        <code>mem_space_id</code> specifies the memory dataspace and the
+        selection within it.
+        The selection within the file dataset's dataspace is set to the "all"
+        selection.
+        </td>
+        </tr>
+
+        <tr valign="top">
+        <td>
+        H5S_ALL
+        </td>
+        <td>
+        H5S_ALL
+        </td>
+        <td>
+        The file dataset's dataspace is used for the memory dataspace and the
+        selection within the memory dataspace is set to the "all" selection.
+        The selection within the file dataset's dataspace is set to the "all"
+        selection.
+        </td>
+        </tr>
+        </table>
+
+        <p>
+        Setting an "all" selection indicates that the entire dataspace, as
+        defined by the current dimensions of a dataspace, will be selected.
+        The number of elements selected in the memory dataspace must match the
+        number of elements selected in the file dataspace.
+        <p>
+        <code>xfer_plist_id</code> can be the constant <code>H5P_DEFAULT</code>.
+        in which case the default data transfer properties are used.           
+        <p>
+        Writing to an dataset will fail if the HDF5 file was 
+        not opened with write access permissions.
+        <p>
+        Data is automatically converted from the memory datatype 
+        and dataspace to the file datatype and dataspace
+	at the time of the write.  See the
+        <a href="Datatypes.html#Datatypes-DataConversion">Data Conversion</a> 
+        section of <cite>The Data Type Interface (H5T)</cite> in the 
+        <cite>HDF5 User's Guide</cite> for a discussion of 
+        data conversion, including the range of conversions currently 
+        supported by the HDF5 libraries.
+        <p>
+	If the dataset's space allocation time is set to 
+	<code>H5D_ALLOC_TIME_LATE</code> or <code>H5D_ALLOC_TIME_INCR</code>
+	and the space for the dataset has not yet been allocated, 
+	that space is allocated when the first raw data is written to the 
+	dataset.
+	Unused space in the dataset will be written with fill values at the 
+	same time if the dataset's fill time is set to 
+	<code>H5D_FILL_TIME_IFSET</code> or <code>H5D_FILL_TIME_ALLOC</code>.
+	(Also see 
+	<a href="RM_H5P.html#Property-SetFillTime">H5Pset_fill_time</a>
+	and 
+	<a href="RM_H5P.html#Property-SetAllocTime">H5Pset_alloc_time</a>.)
+        <p>
+        If a dataset's storage layout is 'compact', care must be taken when
+        writing data to the dataset in parallel.  A compact dataset's raw data
+        is cached in memory and may be flushed to the file from any of the
+        parallel processes, so parallel applications should always attempt to
+        write identical data to the dataset from all processes.
+	
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dataset_id</code></td>
+            <td valign="top">IN: Identifier of the dataset to write to.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>mem_type_id</code></td>
+            <td valign="top">IN: Identifier of the memory datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>mem_space_id</code></td>
+            <td valign="top">IN: Identifier of the memory dataspace.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>file_space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the dataset's dataspace in the file.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>xfer_plist_id</code></td>
+            <td valign="top">IN: Identifier of a transfer property list 
+                for this I/O operation.</td></tr>
+        <tr>
+		    <td valign="top"><em>const void *</em> <code>buf</code></td>
+            <td valign="top">IN: Buffer with data to be written to the file.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5dwrite_f
+	
+	<dd>
+	<pre>
+SUBROUTINE h5dwrite_f(dset_id, mem_type_id, buf, dims, hdferr, &amp; 
+                      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
+  TYPE, INTENT(IN) :: buf                    ! Data buffer; may be a scalar 
+                                             ! or an array
+
+  DIMENSION(*), INTEGER(HSIZE_T), INTENT(IN)  :: 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
+  INTEGER, INTENT(OUT) :: hdferr             ! Error code 
+                                             ! 0 on success and -1 on failure
+  INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id 
+                                             ! Memory dataspace identfier 
+                                             ! Default value is H5S_ALL_F
+  INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id 
+                                             ! File dataspace identfier 
+                                             ! Default value is H5S_ALL_F
+  INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp 
+                                             ! Transfer property list 
+                                             ! identifier; default value 
+                                             ! is H5P_DEFAULT_F 
+            
+END SUBROUTINE h5dwrite_f
+	</pre>
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.2</td>
+          <td valign="top">
+		    A <code>dims</code> parameter has been added.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 8 September 2004");
+-->
+</SCRIPT>
+ 
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/RM_H5E.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/RM_H5E.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/RM_H5E.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,758 @@
+<html>
+<head><title>
+HDF5/H5E API Specification
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+<!-- HEADER RIGHT " " -->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>H5E: Error Interface</h1>
+</center>
+
+<h2>Error API Functions</h2>
+
+These functions provide error handling capabilities in the HDF5 environment.
+
+<p>
+<strong>The C Interfaces:</strong>
+
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li><a href="#Error-Clear">H5Eclear</a>
+    <li><a href="#Error-Print">H5Eprint</a>
+    <li><a href="#Error-Push">H5Epush</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Error-SetAuto">H5Eset_auto</a>
+    <li><a href="#Error-GetAuto">H5Eget_auto</a>
+    <li><a href="#Error-Walk">H5Ewalk</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Error-WalkCB">H5Ewalk_cb</a>
+    <li><a href="#Error-GetMajor">H5Eget_major</a>
+    <li><a href="#Error-GetMinor">H5Eget_minor</a>
+</ul>
+</td></tr>
+</table>
+<br>
+
+<i>Alphabetical Listing</i>
+
+<table border="0">
+  <tr>
+    <td valign="top">
+	<ul>
+      <li><a href="#Error-Clear">H5Eclear</a>
+      <li><a href="#Error-GetAuto">H5Eget_auto</a>
+      <li><a href="#Error-GetMajor">H5Eget_major</a>
+	</ul>     
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#Error-GetMinor">H5Eget_minor</a>
+      <li><a href="#Error-Print">H5Eprint</a>
+      <li><a href="#Error-Push">H5Epush</a>
+	</ul>
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#Error-SetAuto">H5Eset_auto</a>
+      <li><a href="#Error-Walk">H5Ewalk</a>
+      <li><a href="#Error-WalkCB">H5Ewalk_cb</a>
+	</ul>
+    </td>
+  </tr>
+</table>
+
+<br>
+<strong>The FORTRAN90 Interfaces:</strong>
+<br>
+In general, each FORTRAN90 subroutine performs exactly the same task 
+as the corresponding C function.  
+<br>
+
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li><a href="#Error-Clear">h5eclear_f</a>
+    <li><a href="#Error-Print">h5eprint_f</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Error-SetAuto">h5eset_auto_f</a>
+<!--<li><a href="#Error-GetAuto">h5eget_auto_f</a>                    -->
+<!--<li><a href="#Error-Walk">h5ewalk_f</a>                          -->
+<!--<li><a href="#Error-WalkCB">h5ewalk_cb_f</a>                     -->
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Error-GetMajor">h5eget_major_f</a>
+    <li><a href="#Error-GetMinor">h5eget_minor_f</a>
+</ul>
+</td></tr>
+</table>
+
+<p>
+The Error interface provides error handling in the form of a stack.  
+The <code>FUNC_ENTER()</code> macro clears the error stack whenever 
+an interface function is entered.  
+When an error is detected, an entry is pushed onto the stack.  
+As the functions unwind, additional entries are pushed onto the stack. 
+The API function will return some indication that an error occurred and 
+the application can print the error stack.
+<p>
+Certain API functions in the H5E package, such as <code>H5Eprint</code>,
+do not clear the error stack.  Otherwise, any function which
+does not have an underscore immediately after the package name
+will clear the error stack.  For instance, <code>H5Fopen</code> 
+clears the error stack while <code>H5F_open</code> does not.
+<p>
+An error stack has a fixed maximum size.  
+If this size is exceeded then the stack will be truncated and only the
+inner-most functions will have entries on the stack. 
+This is expected to be a rare condition. 
+<p>
+Each thread has its own error stack, but since
+multi-threading has not been added to the library yet, this
+package maintains a single error stack. The error stack is
+statically allocated to reduce the complexity of handling
+errors within the H5E package.    
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT " " -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Eclear" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Error-Clear">H5Eclear</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Eclear</code>(<code>void</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Clears the error stack for the current thread.
+<dt><strong>Description:</strong>
+    <dd><code>H5Eclear</code> clears the error stack for the current thread.
+        <p>
+        The stack is also cleared whenever an API function is called, 
+	  with certain exceptions (for instance, <code>H5Eprint</code>).
+        <p>
+        <code>H5Eclear</code> can fail if there are problems initializing 
+        the library.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr><td valign="top">None</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5eclear_f
+    <dd>
+	<pre>
+SUBROUTINE h5eclear_f(hdferr) 
+  IMPLICIT NONE
+  INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+END SUBROUTINE h5eclear_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Eget_auto" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Error-GetAuto">H5Eget_auto</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Eget_auto</code>(<em>H5E_auto_t *</em> <code>func</code>,
+        <em>void **</em><code>client_data</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns the current settings for the automatic error stack
+        traversal function and its data.  
+<dt><strong>Description:</strong>
+    <dd><code>H5Eget_auto</code> returns the current settings for the 
+        automatic error stack traversal function, <code>func</code>, 
+        and its data, <code>client_data</code>.  Either (or both) 
+        arguments may be null in which case the value is not returned.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>H5E_auto_t *</em> <code>func</code></td>
+            <td valign="top">OUT: Current setting for the function to be called upon an 
+                error condition.</td></tr>
+        <tr>
+		    <td valign="top"><em>void&nbsp;**</em><code>client_data&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Current setting for the data passed to the error function.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+	
+<!--
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Eget_major" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Error-GetMajor">H5Eget_major</a>
+<dt><strong>Signature:</strong>
+    <dd><em>const char *</em> <code>H5Eget_major</code>(<em>H5E_major_t</em> <code>n</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Returns a character string describing an error specified by a 
+        major error number.
+<dt><strong>Description:</strong>
+    <dd>Given a major error number, <code>H5Eget_major</code> returns a 
+        constant character string that describes the error.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>H5E_major_t</em>&nbsp;<code>n&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Major error number.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd> Returns a character string describing the error if successful.
+         Otherwise returns "Invalid major error number."
+<dt><strong>Fortran90 Interface:</strong> h5eget_major_f
+    <dd>
+	<pre>
+SUBROUTINE h5eget_major_f(error_no, name, hdferr)
+  INTEGER, INTENT(IN) :: error_no         !Major error number
+  CHARACTER(LEN=*), INTENT(OUT) :: name   ! File name
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+END SUBROUTINE h5eget_major_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Eget_minor" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Error-GetMinor">H5Eget_minor</a>
+<dt><strong>Signature:</strong>
+    <dd><em>const char *</em> <code>H5Eget_minor</code>(<em>H5E_minor_t</em> <code>n</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Returns a character string describing an error specified by a 
+        minor error number.
+<dt><strong>Description:</strong>
+    <dd>Given a minor error number, <code>H5Eget_minor</code> returns a 
+        constant character string that describes the error.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>H5E_minor_t</em>&nbsp;<code>n&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Minor error number.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd> Returns a character string describing the error if successful.
+         Otherwise returns "Invalid minor error number."
+<dt><strong>Fortran90 Interface:</strong> h5eget_minor_f
+    <dd>
+	<pre>
+SUBROUTINE h5eget_minor_f(error_no, name, hdferr)
+  INTEGER, INTENT(IN) :: error_no         !Major error number
+  CHARACTER(LEN=*), INTENT(OUT) :: name   ! File name
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+END SUBROUTINE h5eget_minor_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Eprint" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Error-Print">H5Eprint</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Eprint</code>(<em>FILE *</em> <code>stream</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Prints the error stack in a default manner.  
+<dt><strong>Description:</strong>
+    <dd><code>H5Eprint</code> prints the error stack on the specified 
+        stream, <code>stream</code>.  
+        Even if the error stack is empty, a one-line message will be printed:
+        <br>&nbsp;&nbsp;&nbsp;&nbsp;
+	  <code>HDF5-DIAG: Error detected in thread 0.</code>
+        <p>
+        <code>H5Eprint</code> is a convenience function for 
+        <code>H5Ewalk</code> with a function that prints error messages.  
+        Users are encouraged to write their own more specific error handlers.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>FILE&nbsp;*</em>&nbsp;<code>stream&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: File pointer, or stderr if NULL.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5eprint_f
+    <dd>
+	<pre>
+SUBROUTINE h5eprint_f(hdferr, name)
+  CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: name ! File name
+  INTEGER, INTENT(OUT) :: hdferr                 ! Error code
+
+END SUBROUTINE h5eprint_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Epush" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Error-Push">H5Epush</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Epush</code>(
+            <em>const char *</em><code>file</code>,
+            <em>const char *</em><code>func</code>,
+            <em>unsigned</em> <code>line</code>,
+            <em>H5E_major_t</em> <code>maj_num</code>,
+            <em>H5E_minor_t</em> <code>min_num</code>,
+            <em>const char *</em><code>str</code>
+            )
+<dt><strong>Purpose:</strong>
+    <dd>Pushes new error record onto error stack.
+<dt><strong>Description:</strong>
+    <dd><code>H5Epush</code> pushes a new error record onto the 
+        error stack for the current thread.  
+        <p>
+        The error has major and minor numbers <code>maj_num</code> and 
+        <code>min_num</code>, 
+        the function <code>func</code> where the error was detected,
+        the name of the file <code>file</code> where the error was detected, 
+        the line <code>line</code> within that file, 
+        and an error description string <code>str</code>.  
+        <p>
+        The function name, file name, and error description strings 
+        must be statically allocated.   
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>const char *</em><code>file</code>,</td>
+            <td valign="top">IN: Name of the file in which the error was detected.</td></tr>
+        <tr>
+		    <td valign="top"><em>const char *</em><code>func</code>,</td>
+            <td valign="top">IN: Name of the function in which the error was detected.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned</em> <code>line</code>,</td>
+            <td valign="top">IN: Line within the file at which the error was detected.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5E_major_t</em>&nbsp;<code>maj_num,&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Major error number.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5E_minor_t</em> <code>min_num</code>,</td>
+            <td valign="top">IN: Minor error number.</td></tr>
+        <tr>
+		    <td valign="top"><em>const char *</em><code>str</code></td>
+            <td valign="top">IN: Error description string.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+	
+<!--
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Eset_auto" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Error-SetAuto">H5Eset_auto</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Eset_auto</code>(<em>H5E_auto_t</em> <code>func</code>,
+        <em>void *</em><code>client_data</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Turns automatic error printing on or off.
+<dt><strong>Description:</strong>
+    <dd><code>H5Eset_auto</code> turns on or off automatic printing of 
+        errors.  When turned on (non-null <code>func</code> pointer), 
+        any API function which returns an error indication will 
+        first call <code>func</code>, passing it <code>client_data</code>
+        as an argument.
+        <p>
+        When the library is first initialized the auto printing function 
+	  is set to <code>H5Eprint</code> (cast appropriately) and
+	  <code>client_data</code> is the standard error stream pointer,
+	  <code>stderr</code>.
+        <p>
+        Automatic stack traversal is always in the 
+        <code>H5E_WALK_DOWNWARD</code> direction. 
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>H5E_auto_t</em> <code>func</code></td>
+            <td valign="top">IN: Function to be called upon an error condition.</td></tr>
+        <tr>
+		    <td valign="top"><em>void&nbsp;*</em><code>client_data&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Data passed to the error function.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5eset_auto_f
+    <dd>
+	<pre>
+SUBROUTINE h5eset_auto_f(printflag, hdferr)
+  INTEGER, INTENT(IN) :: printflag  !flag to turn automatic error
+                                    !printing on or off
+                                    !possible values are:
+                                    !printon (1)
+                                    !printoff(0)
+  INTEGER, INTENT(OUT) :: hdferr    ! Error code
+
+END SUBROUTINE h5eset_auto_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Ewalk" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Error-Walk">H5Ewalk</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Ewalk</code>(<em>H5E_direction_t</em> <code>direction</code>,
+        <em>H5E_walk_t</em> <code>func</code>,
+        <em>void *</em> <code>client_data</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Walks the error stack for the current thread, calling a specified
+        function.
+<dt><strong>Description:</strong>
+    <dd><code>H5Ewalk</code> walks the error stack for the current thread 
+        and calls the specified function for each error along the way.
+        <p>
+        <code>direction</code> determines whether the stack is walked 
+        from the inside out or the outside in.  
+        A value of <code>H5E_WALK_UPWARD</code> means begin with the
+        most specific error and end at the API; 
+        a value of <code>H5E_WALK_DOWNWARD</code> means to start at the 
+        API and end at the inner-most function where the error was first 
+        detected.
+        <p>
+        <code>func</code> will be called for each error in the error stack. 
+        Its arguments will include an index number (beginning at zero 
+        regardless of stack traversal direction), an error stack entry, 
+        and the <code>client_data</code> pointer passed to 
+        <code>H5E_print</code>.
+        The <code>H5E_walk_t</code> prototype is as follows:
+        <dir>
+        <p>
+        <code>typedef</code> <em>herr_t</em> <code>(*H5E_walk_t)(</code><em>int</em> <code>n,</code> 
+            <em>H5E_error_t *</em><code>err_desc,</code> 
+            <em>void *</em><code>client_data)</code>
+        <p>
+        where the parameters have the following meanings:
+            <dl>
+            <dt><em>int</em> <code>n</code>
+                <dd>Indexed position of the error in the stack.
+            <dt><em>H5E_error_t *</em><code>err_desc</code>
+                <dd>Pointer to a data structure describing the error.
+                    <em>(This structure is currently described only in the
+                        source code file </em><code>hdf5/src/H5Epublic.h</code><em>.  
+                        That file also contains the definitive list of major 
+                        and minor error codes.  That information will 
+                        eventually be presented as an appendix to this 
+                        <cite>Reference Manual</cite>.)</em>
+            <dt><em>void *</em><code>client_data</code>
+                <dd>Pointer to client data in the format expected by 
+                    the user-defined function.
+            </dl>
+        </dir>
+        <p>
+        <code>H5Ewalk</code> can fail if there are problems initializing 
+        the library.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>H5E_direction_t</em>&nbsp;<code>direction&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Direction in which the error stack is to be walked.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5E_walk_t</em> <code>func</code></td>
+            <td valign="top">IN: Function to be called for each error encountered.</td></tr>
+        <tr>
+		    <td valign="top"><em>void *</em> <code>client_data</code></td>
+            <td valign="top">IN: Data to be passed with <code>func</code>.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+	
+<!--
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Ewalk_cb" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Error-WalkCB">H5Ewalk_cb</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Ewalk_cb</code>(<em>int</em> <code>n</code>,
+        <em>H5E_error_t *</em><code>err_desc</code>,
+        <em>void</em> <code>*client_data</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Default error stack traversal callback function
+        that prints error messages to the specified output stream.
+<dt><strong>Description:</strong>
+    <dd><code>H5Ewalk_cb</code> is a default error stack traversal callback
+        function that prints error messages to the specified output stream.
+        It is not meant to be called directly but rather as an
+        argument to the <code>H5Ewalk</code> function.  
+        This function is called also by <code>H5Eprint</code>.  
+        Application writers are encouraged to use this function as a 
+        model for their own error stack walking functions.
+        <p>
+        <code>n</code> is a counter for how many times this function 
+        has been called for this particular traversal of the stack.  
+        It always begins at zero for the first error on the stack 
+        (either the top or bottom error, or even both, depending on 
+        the traversal direction and the size of the stack).
+        <p>
+        <code>err_desc</code> is an error description.  It contains all the
+        information about a particular error. 
+        <p>
+        <code>client_data</code> is the same pointer that was passed as the
+        <code>client_data</code> argument of <code>H5Ewalk</code>.  
+        It is expected to be a file pointer (or stderr if NULL). 
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>int</em> <code>n</code></td>
+            <td valign="top">IN/OUT: Number of times this function has been called 
+                for this traversal of the stack.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5E_error_t&nbsp;*</em><code>err_desc&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Error description.</td></tr>
+        <tr>
+		    <td valign="top"><em>void</em> <code>*client_data</code></td>
+            <td valign="top">IN: A file pointer, or stderr if NULL.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+	
+<!--
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 16 October 2003");
+-->
+</SCRIPT>
+ 
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/RM_H5F.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/RM_H5F.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/RM_H5F.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1506 @@
+<html>
+<head><title>
+HDF5/H5F API Specification
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+<!-- HEADER RIGHT " " -->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>H5F: File Interface</h1>
+</center>
+
+<h2>File API Functions</h2>
+
+These functions are designed to provide file-level access to HDF5 files.
+Further manipulation of objects inside a file is performed through one of APIs
+documented below.
+
+<p>
+<strong>The C Interfaces:</strong>
+
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li><a href="#File-Create">H5Fcreate</a>
+    <li><a href="#File-Open">H5Fopen</a>
+    <li><a href="#File-Reopen">H5Freopen</a>
+    <li><a href="#File-Close">H5Fclose</a>
+    <li><a href="#File-Flush">H5Fflush</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#File-IsHDF5">H5Fis_hdf5</a>
+    <li><a href="#File-Mount">H5Fmount</a>
+    <li><a href="#File-Unmount">H5Funmount</a>
+    <li><a href="#File-GetVfdHandle">H5Fget_vfd_handle</a>
+    <li><a href="#File-GetFilesize">H5Fget_filesize</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#File-GetCreatePlist">H5Fget_create_plist</a>
+    <li><a href="#File-GetAccessPlist">H5Fget_access_plist</a>
+    <li><a href="#File-GetName">H5Fget_name</a>
+    <li><a href="#File-GetObjCount">H5Fget_obj_count</a>
+    <li><a href="#File-GetObjIDs">H5Fget_obj_ids</a>
+    <li><a href="#File-GetFreeSpace">H5Fget_freespace</a>
+</ul>
+</td></tr>
+</table>
+<br>
+
+<i>Alphabetical Listing</i>
+
+<table border="0">
+  <tr>
+    <td valign="top">
+	<ul>
+      <li><a href="#File-Close">H5Fclose</a>
+      <li><a href="#File-Create">H5Fcreate</a>
+      <li><a href="#File-Flush">H5Fflush</a>
+      <li><a href="#File-GetAccessPlist">H5Fget_access_plist</a>
+      <li><a href="#File-GetCreatePlist">H5Fget_create_plist</a>
+      <li><a href="#File-GetFilesize">H5Fget_filesize</a>
+    </ul>      
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#File-GetFreeSpace">H5Fget_freespace</a>
+      <li><a href="#File-GetName">H5Fget_name</a>
+      <li><a href="#File-GetObjCount">H5Fget_obj_count</a>
+      <li><a href="#File-GetObjIDs">H5Fget_obj_ids</a>
+      <li><a href="#File-GetVfdHandle">H5Fget_vfd_handle</a>
+	</ul>
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#File-IsHDF5">H5Fis_hdf5</a>
+      <li><a href="#File-Mount">H5Fmount</a>
+      <li><a href="#File-Open">H5Fopen</a>
+      <li><a href="#File-Reopen">H5Freopen</a>
+      <li><a href="#File-Unmount">H5Funmount</a>
+	</ul>
+    </td>
+  </tr>
+</table>
+
+<br>
+<strong>The FORTRAN90 Interfaces:</strong>
+<br>
+In general, each FORTRAN90 subroutine performs exactly the same task 
+as the corresponding C function.  
+<br>
+
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li><a href="#File-Create">h5fcreate_f</a>
+    <li><a href="#File-Open">h5fopen_f</a>
+    <li><a href="#File-Reopen">h5freopen_f</a>
+    <li><a href="#File-Close">h5fclose_f</a>
+    <li><a href="#File-Flush">h5fflush_f</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#File-IsHDF5">h5fis_hdf5_f</a>
+    <li><a href="#File-Mount">h5fmount_f</a>
+    <li><a href="#File-Unmount">h5funmount_f</a>
+    <li><a href="#File-GetVfdHandle">h5fget_vfd_handle_f</a>
+    <li><a href="#File-GetFilesize">h5fget_filesize_f</a>
+    <li><a href="#File-GetFreespace">h5fget_freespace_f</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#File-GetCreatePlist">h5fget_create_plist_f</a>
+    <li><a href="#File-GetAccessPlist">h5fget_access_plist_f</a>
+    <li><a href="#File-GetName">h5fget_name_f</a>
+    <li><a href="#File-GetObjCount">h5fget_obj_count_f</a>
+    <li><a href="#File-GetObjIDs">h5fget_obj_ids_f</a>
+</ul>
+</td></tr>
+</table>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT " " -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fclose" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-Close">H5Fclose</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Fclose</code>(<em>hid_t</em> <code>file_id</code>
+        )
+<dt><strong>Purpose:</strong>
+        <dd>Terminates access to an HDF5 file.  
+<dt><strong>Description:</strong>
+        <dd><code>H5Fclose</code> terminates access to an HDF5 file
+            by flushing all data to storage and terminating access
+            to the file through <code>file_id</code>.  
+            <p>
+            If this is the last file identifier open for the file 
+            and no other access identifier is open (e.g., a dataset 
+            identifier, group identifier, or shared datatype identifier),
+            the file will be fully closed and access will end.
+            <p>
+            <strong>Delayed close:</strong> 
+            <br>
+            Note the following deviation from the above-described behavior.
+            If <code>H5Fclose</code> is called for a file but one or more 
+            objects within the file remain open, those objects will remain 
+            accessible until they are individually closed.  
+            Thus, if the dataset <code>data_sample</code> is open when 
+            <code>H5Fclose</code> is called for the file containing it, 
+            <code>data_sample</code> will remain open and accessible 
+            (including writable) until it is explicitely closed.  
+            The file will be automatically closed once all objects in the
+            file have been closed.
+            <p>
+            Be warned, hoever, that there are circumstances where it is 
+            not possible to delay closing a file.  
+            For example, an MPI-IO file close is a collective call; all of
+            the processes that opened the file must close it collectively.
+            The file cannot be closed at some time in the future by each 
+            process in an independent fashion.
+            Another example is that an application using an AFS token-based 
+            file access privilage may destroy its AFS token after 
+            <code>H5Fclose</code> has returned successfully.  
+            This would make any future access to the file, or any object 
+            within it, illegal. 
+            <p>
+            In such situations, applications must close all open objects 
+            in a file before calling <code>H5Fclose</code>.  
+            It is generally recommended to do so in all cases.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>file_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of a file to terminate access to.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5fclose_f
+    <dd>
+	<pre>
+SUBROUTINE h5fclose_f(file_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5fclose_f 
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fcreate" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-Create">H5Fcreate</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Fcreate</code>(<em>const char *</em><code>name</code>,
+            <em>unsigned</em> <code>flags</code>,
+            <em>hid_t</em> <code>create_id</code>,
+            <em>hid_t</em> <code>access_id</code>
+        )
+<dt><strong>Purpose:</strong>
+        <dd>Creates HDF5 files.
+<dt><strong>Description:</strong>
+        <dd><code>H5Fcreate</code> is the primary function for creating 
+            HDF5 files . 
+            <p>
+            The <code>flags</code> parameter determines whether an 
+            existing file will be overwritten.  All newly created files 
+            are opened for both reading and writing.  All flags may be 
+            combined with the bit-wise OR operator (`|') to change 
+            the behavior of the <code>H5Fcreate</code> call.
+            <p>
+            The more complex behaviors of file creation and access
+            are controlled through the file-creation and file-access
+            property lists.  The value of <code>H5P_DEFAULT</code> for 
+            a property list value indicates that the library should use
+            the default values for the appropriate property list.
+            <p>
+            The return value is a file identifier for the newly-created file;
+            this file identifier should be closed by calling 
+            <code>H5Fclose</code> when it is no longer needed. 
+            <p>
+
+            <b>Special case -- File creation in the case of an 
+            already-open file:</b>
+            <br>
+            If a file being created is already opened, by either a 
+            previous <code>H5Fopen</code> or <code>H5Fcreate</code> call, 
+            the HDF5 library may or may not detect that the open file and 
+            the new file are the same physical file. 
+            (See <a href="#File-Open"><code>H5Fopen</code></a> regarding 
+            the limitations in detecting the re-opening of an already-open 
+            file.) 
+            <p>
+            If the library detects that the file is already opened, 
+            <code>H5Fcreate</code> will return a failure, regardless 
+            of the use of <code>H5F_ACC_TRUNC</code>.
+            <p>
+            If the library does not detect that the file is already opened 
+            and <code>H5F_ACC_TRUNC</code> is not used, 
+            <code>H5Fcreate</code> will return a failure because the file 
+            already exists.  Note that this is correct behavior.
+            <p>
+            But if the library does not detect that the file is already 
+            opened and <code>H5F_ACC_TRUNC</code> is used, 
+            <code>H5Fcreate</code> will truncate the existing file
+            and return a valid file identifier.
+            Such a truncation of a currently-opened file will almost 
+            certainly result in errors. 
+            While unlikely, the HDF5 library may not be able to detect,
+            and thus report, such errors.
+            <p>
+            Applications should avoid calling <code>H5Fcreate</code> 
+            with an already opened file.
+
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char&nbsp;*</em><code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Name of the file to access.</td></tr>
+        <tr>
+		    <td valign="top"><em>uintn</em> <code>flags</code></td>
+            <td valign="top">IN: File access flags.  Allowable values are:
+                <ul><dl>
+                    <dt><code>H5F_ACC_TRUNC</code>
+                        <dd>Truncate file, if it already exists,  
+                            erasing all data previously stored in the file.
+                    <dt><code>H5F_ACC_EXCL</code>
+                        <dd>Fail if file already exists.
+                </dl></ul>
+                <li><code>H5F_ACC_TRUNC</code> and <code>H5F_ACC_EXCL</code> 
+                are mutually exclusive; use exactly one.
+                <li>An additional flag, <code>H5F_ACC_DEBUG</code>, prints 
+                debug information.  This flag is used only by HDF5 library 
+                developers; <i>it is neither tested nor supported</i> 
+                for use in applications.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>create_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: File creation property list identifier, used when modifying
+                default file meta-data.
+                Use <code>H5P_DEFAULT</code> for default file creation properties.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>access_id</code></td>
+            <td valign="top">IN: File access property list identifier.
+                If parallel file access is desired, this is a collective
+                call according to the communicator stored in the
+                <code>access_id</code>. 
+                Use <code>H5P_DEFAULT</code> for default file access properties.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a file identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5fcreate_f
+    <dd>
+	<pre>
+SUBROUTINE h5fcreate_f(name, access_flags, file_id, hdferr, &  
+                       creation_prp, access_prp)
+  IMPLICIT NONE 
+  CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the file
+  INTEGER, INTENT(IN) :: access_flag     ! File access flags 
+                                         ! Possible values are:
+                                         !     H5F_ACC_RDWR_F   
+                                         !     H5F_ACC_RDONLY_F   
+                                         !     H5F_ACC_TRUNC_F  
+                                         !     H5F_ACC_EXCL_F    
+                                         !     H5F_ACC_DEBUG_F   
+  INTEGER(HID_T), INTENT(OUT) :: file_id ! File identifier 
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+                                         ! 0 on success and -1 on failure
+  INTEGER(HID_T), OPTIONAL, INTENT(IN) :: creation_prp 
+                                         ! File creation propertly 
+                                         ! list identifier, if not 
+                                         ! specified its value is
+                                         ! H5P_DEFAULT_F  
+  INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp  
+                                         ! File access property list 
+                                         ! identifier, if not 
+                                         ! specified its value is
+                                         ! H5P_DEFAULT_F  
+END SUBROUTINE h5fcreate_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fflush" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-Flush">H5Fflush</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Fflush</code>(<em>hid_t </em><code>object_id</code>,
+        <em>H5F_scope_t</em> <code>scope</code>
+        )
+<dt><strong>Purpose:</strong>
+        <dd>Flushes all buffers associated with a file to disk.
+<dt><strong>Description:</strong>
+        <dd><code>H5Fflush</code> causes all buffers associated with a
+        file to be immediately flushed to disk without removing the
+        data from the cache.  
+        <p>
+        <code>object_id</code> can be any object associated with the file, 
+        including the file itself, a dataset, a group, an attribute, or 
+        a named data type.
+        <p>
+        <code>scope</code> specifies whether the scope of the flushing 
+        action is global or local.  Valid values are
+        <center>
+        <table border=0>
+        <tr><td align=left valign=top><code>H5F_SCOPE_GLOBAL</code></td>
+            <td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+            <td align=left valign=top>Flushes the entire virtual file.</td></tr>
+        <tr><td align=left valign=top><code>H5F_SCOPE_LOCAL</code></td>
+            <td></td>
+            <td align=left valign=top>Flushes only the specified file.</td></tr>
+        </table>
+        </center>       
+<dt><strong>Note:</strong>
+        <dd>HDF5 does not possess full control over buffering.
+        <code>H5Fflush</code> flushes the internal HDF5 buffers then 
+        asks the operating system (the OS) to flush the system buffers for the 
+        open files.  After that, the OS is responsible for ensuring that
+        the data is actually flushed to disk.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t </em><code>object_id</code></td>
+            <td valign="top">IN: Identifier of object used to identify the file.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5F_scope_t</em>&nbsp;<code>scope&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Specifies the scope of the flushing action.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5fflush_f
+    <dd>
+	<pre>
+SUBROUTINE h5fflush_f(obj_id, new_file_id, hdferr)
+  IMPLICIT NONE 
+  INTEGER(HID_T), INTENT(IN)  :: obj_id      ! Object identifier
+  INTEGER, INTENT(IN)         :: scope       ! Flag with two possible values:
+                                             !     H5F_SCOPE_GLOBAL_F  
+                                             !     H5F_SCOPE_LOCAL_F  
+  INTEGER, INTENT(OUT)        :: hdferr      ! Error code 
+                                             ! 0 on success and -1 on failure
+END SUBROUTINE h5fflush_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fget_access_plist" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-GetAccessPlist">H5Fget_access_plist</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Fget_access_plist</code>(<em>hid_t</em> <code>file_id</code>)
+<dt><strong>Purpose:</strong>
+        <dd>Returns a file access property list identifier.
+<dt><strong>Description:</strong>
+        <dd><code>H5Fget_access_plist</code> returns the 
+            file access property list identifier of the specified file.
+            <p>
+            See "File Access Properties" in 
+            <a href="RM_H5P.html">H5P: Property List Interface</a> 
+            in this reference manual and 
+            "File Access Property Lists" 
+            in <a href="Files.html"><cite>Files</cite></a> in the 
+            <cite>HDF5 User's Guide</cite> for 
+            additional information and related functions.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>file_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of file to get access property list of</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a file access property list identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5fget_access_plist_f
+    <dd>
+	<pre>
+SUBROUTINE h5fget_access_plist_f(file_id, fcpl_id, hdferr)
+
+  IMPLICIT NONE 
+  INTEGER(HID_T), INTENT(IN)   :: file_id ! File identifier
+  INTEGER(HID_T), INTENT(OUT)  :: fapl_id ! File access property list identifier
+  INTEGER, INTENT(OUT)         :: hdferr  ! Error code 
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5fget_access_plist_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fget_create_plist" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-GetCreatePlist">H5Fget_create_plist</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Fget_create_plist</code>(<em>hid_t</em> <code>file_id</code>
+        )
+<dt><strong>Purpose:</strong>
+        <dd>Returns a file creation property list identifier.
+<dt><strong>Description:</strong>
+        <dd><code>H5Fget_create_plist</code> returns a file creation 
+            property list identifier identifying the creation properties 
+            used to create this file.  This function is useful for 
+            duplicating properties when creating another file.
+            <p>
+            See "File Creation Properties" in 
+            <a href="RM_H5P.html">H5P: Property List Interface</a> 
+            in this reference manual and 
+            "File Creation Properties" 
+            in <a href="Files.html"><cite>Files</cite></a> in the 
+            <cite>HDF5 User's Guide</cite> for 
+            additional information and related functions.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <dt>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>file_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the file to get creation property list of</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a file creation property list identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5fget_create_plist_f
+    <dd>
+	<pre>
+SUBROUTINE h5fget_create_plist_f(file_id, fcpl_id, hdferr)
+
+  IMPLICIT NONE 
+  INTEGER(HID_T), INTENT(IN)   :: file_id ! File identifier
+  INTEGER(HID_T), INTENT(OUT)  :: fcpl_id ! File creation property list 
+                                          ! identifier
+  INTEGER, INTENT(OUT)         :: hdferr  ! Error code 
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5fget_create_plist_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fget_filesize" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-GetFilesize">H5Fget_filesize</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Fget_filesize</code>(<em>hid_t</em> <code>file_id</code>,
+                        <em>hsize_t *</em><code>size</code>
+        )
+<dt><strong>Purpose:</strong>
+        <dd>Returns the size of an HDF5 file.
+<dt><strong>Description:</strong>
+    <dd><code>H5Fget_filesize</code> returns the size
+        of the HDF5 file specified by <code>file_id</code>.
+        <p>
+        The returned size is that of the entire file, 
+        as opposed to only the HDF5 portion of the file.
+        I.e., <code>size</code> includes the user block, if any, 
+        the HDF5 portion of the file, and
+        any data that may have been appended 
+        beyond the data written through the HDF5 Library.
+<dt><strong>Parameters:</strong>
+    <dl>
+        <dt><em>hid_t</em> <code>file_id</code>
+            <dd>IN: Identifier of a currently-open HDF5 file
+        <dt><em>hsize_t *</em><code>size</code>
+            <dd>OUT: Size of the file, in bytes.
+    </dl>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5fget_freespace_f
+    <dd>
+	<pre>
+SUBROUTINE h5fget_filesize_f(file_id, size, hdferr)
+
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: file_id    ! file identifier
+  INTEGER(HSIZE_T), INTENT(OUT) :: size    ! Size of the file 
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code: 0 on success,
+                                           ! -1 if fail
+END SUBROUTINE h5fget_filesize_f 
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top" align="left">
+		    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.3</td>
+          <td valign="top">
+		    Function introduced in this release.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">
+		    Fortran subroutine introduced in this 
+			release.</td></tr>
+    </table></ul>
+</dl>
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fget_freespace" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-GetFreeSpace">H5Fget_freespace</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hssize_t </em><code>H5Fget_freespace</code>(<em>hid_t</em> <code>file_id</code>)
+<dt><strong>Purpose:</strong>
+        <dd>Returns the amount of free space in a file.
+<dt><strong>Description:</strong>
+    <dd>Given the identifier of an open file, <code>file_id</code>, 
+	<code>H5Fget_freespace</code> returns the amount of space that is
+        unused by any objects in the file.
+        <p>
+        Currently, the HDF5 library only tracks free space in a file from a
+        file open or create until that file is closed, so this routine will
+        only report the free space that has been created during that
+        interval.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>file_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of a currently-open HDF5 file</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a the amount of free space in the file if successful;
+        otherwise returns a negative value.
+<dt><strong>Returns:</strong>
+    <dd>Returns a file creation property list identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5fget_freespace_f
+    <dd>
+	<pre>
+SUBROUTINE h5fget_freespace_f(file_id, free_space, hdferr)
+
+  IMPLICIT NONE 
+  INTEGER(HID_T), INTENT(IN)  :: file_id       ! File identifier
+  INTEGER(HSSIZE_T), INTENT(OUT) :: free_space ! Amount of free space in file
+  INTEGER, INTENT(OUT)        :: hdferr        ! Error code 
+                                               ! 0 on success and -1 on failure
+END SUBROUTINE h5fget_freespace_f 
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.1</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fget_name" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-GetName">H5Fget_name</a>
+<dt><strong>Signature:</strong>
+    <dd><em>ssize_t</em> <code>H5Fget_name</code>(<em>hid_t</em> <code>obj_id</code>,
+                     <em>char *</em><code>name</code>,
+                     <em>size_t</em> <code>size</code>
+        )
+
+<dt><strong>Purpose:</strong>
+        <dd>Retrieves name of file to which object belongs.
+<dt><strong>Description:</strong>
+        <dd><code>H5Fget_name</code> retrieves the name of the file 
+	    to which the object <code>obj_id</code> belongs.
+	    The object can be a group, dataset, attribute, or 
+	    named datatype.
+            <p> 
+	    Up to <code>size</code> characters of the filename 
+	    are returned in <code>name</code>; 
+	    additional characters, if any, are not returned to 
+	    the user application. 
+            <p>
+	    If the length of the name, 
+	    which determines the required value of <code>size</code>, 
+	    is unknown, a preliminary <code>H5Fget_name</code> call 
+	    can be made by setting <code>name</code> to NULL. 
+	    The return value of this call will be the size of the filename;
+	    that value can then be assigned to <code>size</code> 
+	    for a second <code>H5Fget_name</code> call, 
+	    which will retrieve the actual name. 
+            <p>
+            If an error occurs, the buffer pointed to by 
+	    <code>name</code> is unchanged and 
+	    the function returns a negative value.
+<dt><strong>Parameters:</strong>
+    <dl>
+        <dt><em>hid_t</em> <code>obj_id</code>
+            <dd>IN: Identifier of the object for which the 
+	        associated filename is sought.
+	        The object can be a group, dataset, attribute, or 
+	        named datatype.
+        <dt><em>char *</em><code>name</code>
+            <dd>OUT: Buffer to contain the returned filename.
+        <dt><em>size_t</em> <code>size</code>
+            <dd>IN: Size, in bytes, of the <code>name</code> buffer.
+    </dl>
+<dt><strong>Returns:</strong>
+    <dd>Returns the length of the filename if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5fget_name_f
+    <dd>
+	<pre>
+SUBROUTINE h5fget_name_f(obj_id, buf, size, hdferr)
+
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: obj_id     ! Object identifier 
+  CHARACTER(LEN=*), INTENT(INOUT) :: buf   ! Buffer to hold filename
+  INTEGER(SIZE_T), INTENT(OUT) :: size     ! Size of the filename
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code: 0 on success,
+                                           ! -1 if fail
+END SUBROUTINE h5fget_name_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top" align="left">
+		    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.3</td>
+          <td valign="top">
+		    Function introduced in this release.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">
+		    Fortran subroutine introduced in this 
+			release.</td></tr>
+    </table></ul>
+</dl>
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fget_obj_count" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-GetObjCount">H5Fget_obj_count</a>
+<dt><strong>Signature:</strong>
+    <dd><em>int </em><code>H5Fget_obj_count</code>(<em>hid_t</em> <code>file_id</code>,
+	    <em>unsigned int</em> <code>types</code>
+            )
+<dt><strong>Purpose:</strong>
+        <dd>Returns the number of open object identifiers for an open file.
+<dt><strong>Description:</strong>
+    <dd>Given the identifier of an open file, <code>file_id</code>, 
+	and the desired object types, <code>types</code>,
+	<code>H5Fget_obj_count</code> returns the number of 
+        open object identifiers for the file.
+        <p>
+        To retrieve a count of open identifiers for open objects in 
+	all HDF5 application files that are currently open, 
+        pass the value <code>H5F_OBJ_ALL</code> in <code>file_id</code>.
+        <p>
+        The types of objects to be counted are specified 
+	in <code>types</code> as follows:
+	<center>
+        <table width=90% border=0>
+          <tr><td valign=top>
+            <code>H5F_OBJ_FILE</code>
+            </td><td valign=top>
+            Files only
+          </td></tr><tr><td valign=top>
+            <code>H5F_OBJ_DATASET</code>
+            </td><td valign=top>
+            Datasets only
+          </td></tr><tr><td valign=top>
+            <code>H5F_OBJ_GROUP</code>
+            </td><td valign=top>
+            Groups only
+          </td></tr><tr><td valign=top>
+            <code>H5F_OBJ_DATATYPE&nbsp;&nbsp;</code>
+            </td><td valign=top>
+            Named datatypes only
+          </td></tr><tr><td valign=top>
+            <code>H5F_OBJ_ATTR</code>
+            </td><td valign=top>
+            Attributes only
+          </td></tr><tr><td valign=top>
+            <code>H5F_OBJ_ALL</code>
+            </td><td valign=top>
+            All of the above
+	    <br>
+	    (I.e., <code>H5F_OBJ_FILE</code> | <code>H5F_OBJ_DATASET</code> | 
+	    <code>H5F_OBJ_GROUP</code> | <code>H5F_OBJ_DATATYPE</code> 
+	    | <code>H5F_OBJ_ATTR</code> )
+          </td></tr><tr><td valign=top>
+            <code>H5F_OBJ_LOCAL</code>
+            </td><td valign=top>
+            Restrict search to objects opened through current file identifier.
+          </td></tr>
+        </table>
+	</center>
+        <p>
+	Multiple object types can be combined with the 
+	logical <code>OR</code> operator (<code>|</code>).
+	For example, the expression <code>(H5F_OBJ_DATASET|H5F_OBJ_GROUP)</code> would call for 
+	datasets and groups.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>file_id</code></td>
+            <td valign="top">IN: Identifier of a currently-open HDF5 file or 
+	        <code>H5F_OBJ_ALL</code> for all currently-open HDF5 files.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned&nbsp;int</em>&nbsp;<code>types&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Type of object for which identifiers are to be returned.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a the number of open objects if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5fget_obj_count_f
+    <dd>
+	<pre>
+SUBROUTINE h5fget_obj_count_f(file_id, obj_type, obj_count, hdferr)
+
+  IMPLICIT NONE 
+  INTEGER(HID_T), INTENT(IN)  :: file_id   ! File identifier
+  INTEGER, INTENT(IN)         :: obj_type  ! Object types, possible values are:
+                                           !     H5F_OBJ_FILE_F
+                                           !     H5F_OBJ_GROUP_F
+                                           !     H5F_OBJ_DATASET_F
+                                           !     H5F_OBJ_DATATYPE_F
+                                           !     H5F_OBJ_ALL_F
+  INTEGER, INTENT(OUT)        :: obj_count ! Number of opened objects
+  INTEGER, INTENT(OUT)        :: hdferr    ! Error code 
+                                           ! 0 on success and -1 on failure
+END SUBROUTINE h5fget_obj_count_f
+	</pre>
+	
+<dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.5</td>
+          <td valign="top">
+		    <code>H5F_OBJ_LOCAL</code> has been added as a qualifier 
+			on the types of objects to be counted. <code>H5F_OBJ_LOCAL</code> 
+			restricts the search to objects opened through current 
+			file identifier.</td></tr>
+    </table></ul>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fget_obj_ids" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-GetObjIDs">H5Fget_obj_ids</a>
+<dt><strong>Signature:</strong>
+    <dd><em>int </em><code>H5Fget_obj_ids</code>(<em>hid_t</em> <code>file_id</code>,
+            <em>unsigned int</em> <code>types</code>,
+            <em>int</em> <code>max_objs</code>,
+            <em>hid_t *</em><code>obj_id_list</code>
+            )
+<dt><strong>Purpose:</strong>
+    <dd>Returns a list of open object identifiers.
+<dt><strong>Description:</strong>
+    <dd>Given the file identifier <code>file_id</code> and 
+        the type of objects to be identified, <code>types</code>,
+        <code>H5Fget_obj_ids</code> returns the list of identifiers 
+        for all open HDF5 objects fitting the specified criteria. 
+        <p>
+        To retrieve identifiers for open objects in all HDF5 application 
+        files that are currently open, pass the value 
+        <code>H5F_OBJ_ALL</code> in <code>file_id</code>.
+        <p>
+        The types of object identifiers to be retrieved are specified 
+	in <code>types</code> using the codes listed for the same 
+	parameter in <a href="#File-GetObjCount"><code>H5Fget_obj_count</code></a>
+        <p>
+        To retrieve identifiers for all open objects, pass a negative value
+        for the <code>max_objs</code>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>file_id</code></td>
+            <td valign="top">IN: Identifier of a currently-open HDF5 file or 
+	        <code>H5F_OBJ_ALL</code> for all currently-open HDF5 files.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned int</em> <code>types</code></td>
+            <td valign="top">IN: Type of object for which identifiers are to be returned.</td></tr> 
+        <tr>
+		    <td valign="top"><em>int</em> <code>max_objs</code></td>
+            <td valign="top">IN: Maximum number of object identifiers to place into 
+			<code>obj_id_list</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t&nbsp;*</em><code>obj_id_list&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Pointer to the returned list of open object identifiers.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns number of objects placed into <code>obj_id_list</code> if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5fget_obj_ids_f
+    <dd>
+	<pre>
+SUBROUTINE h5fget_obj_ids_f(file_id, obj_type, max_objs, obj_ids, hdferr)
+
+  IMPLICIT NONE 
+  INTEGER(HID_T), INTENT(IN)   :: file_id  ! File identifier
+  INTEGER,        INTENT(IN)   :: obj_type ! Object types, possible values are:
+                                           !     H5F_OBJ_FILE_F
+                                           !     H5F_OBJ_GROUP_F
+                                           !     H5F_OBJ_DATASET_F
+                                           !     H5F_OBJ_DATATYPE_F
+                                           !     H5F_OBJ_ALL_F
+  INTEGER, INTENT(IN)          :: max_objs ! Maximum number of object 
+                                           ! identifiers to retrieve
+  INTEGER(HID_T), DIMENSION(*), INTENT(OUT) :: obj_ids
+                                           ! Array of requested object 
+                                           ! identifiers
+  INTEGER, INTENT(OUT)        :: hdferr    ! Error code 
+                                           ! 0 on success and -1 on failure
+END SUBROUTINE h5fget_obj_ids_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fget_vfd_handle" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-GetVfdHandle">H5Fget_vfd_handle</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Fget_vfd_handle</code>(<em>hid_t</em> <code>file_id</code>,
+                <em>hid_t</em> <code>fapl_id</code>,
+                <em>void *</em><code>file_handle</code>
+                )
+<dt><strong>Purpose:</strong>
+    <dd>Returns pointer to the file handle from the virtual file driver.
+<dt><strong>Description:</strong>
+    <dd>Given the file identifier <code>file_id</code> and 
+    the file access property list <code>fapl_id</code>, 
+    <code>H5Fget_vfd_handle</code> returns a pointer to the file handle 
+    from the low-level file driver currently being used by the 
+    HDF5 library for file I/O.
+<dt><strong>Notes:</strong>
+    <dd>Users are not supposed to modify any file through this file handle.
+    <p>
+    This file handle is dynamic and is valid only while the file remains
+    open; it will be invalid if the file is closed and reopened or 
+    opened during a subsequent session.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>file_id</code></td>
+            <td valign="top">IN: Identifier of the file to be queried.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list  identifier.
+	        For most drivers, the value will be <code>H5P_DEFAULT</code>. 
+		    For the <code>FAMILY</code> or <code>MULTI</code> drivers,
+		    this value should be defined through the property list
+		    functions: 
+		    <code>H5Pset_family_offset</code> for the <code>FAMILY</code> 
+		    driver and <code>H5Pset_multi_type</code> for the 
+		    <code>MULTI</code> driver.</td></tr>
+        <tr>
+		    <td valign="top"><em>void&nbsp;*</em><code>file_handle&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Pointer to the file handle being used by 
+	        the low-level virtual file driver.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+	
+<!--
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fis_hdf5" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-IsHDF5">H5Fis_hdf5</a>
+<dt><strong>Signature:</strong>
+    <dd><em>htri_t </em><code>H5Fis_hdf5</code>(<em>const char *</em><code>name</code>
+        )
+<dt><strong>Purpose:</strong>
+        <dd>Determines whether a file is in the HDF5 format.
+<dt><strong>Description:</strong>
+        <dd><code>H5Fis_hdf5</code> determines whether a file is in 
+            the HDF5 format.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char&nbsp;*</em><code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: File name to check format.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>When successful, returns a positive value, for <code>TRUE</code>,
+        or <code>0</code> (zero), for <code>FALSE</code>.
+        Otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5fis_hdf5_f
+    <dd>
+	<pre>
+SUBROUTINE h5fis_hdf5_f(name, status, hdferr)   
+  IMPLICIT NONE 
+  CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the file
+  LOGICAL, INTENT(OUT) :: status         ! This parameter indicates 
+                                         ! whether file is an HDF5 file 
+                                         ! ( TRUE or FALSE ) 
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5fis_hdf5_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fmount" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-Mount">H5Fmount</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Fmount</code>(<em>hid_t</em> <code>loc_id</code>,
+            <em>const char *</em><code>name</code>,
+            <em>hid_t</em> <code>child_id</code>,
+            <em>hid_t</em> <code>plist_id</code>
+        )
+<dt><strong>Purpose:</strong>
+        <dd>Mounts a file.
+<dt><strong>Description:</strong>
+        <dd><code>H5Fmount</code> mounts the file specified by 
+            <code>child_id</code> onto the group specified by 
+            <code>loc_id</code> and <code>name</code> using 
+            the mount properties <code>plist_id</code>.
+            <p>
+            Note that <code>loc_id</code> is either a file or group identifier
+            and <code>name</code> is relative to <code>loc_id</code>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+            <td valign="top">IN: Identifier for of file or group in 
+                which <code>name</code> is defined.</td>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char&nbsp;*</em><code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Name of the group onto which the 
+                file specified by <code>child_id</code> 
+                is to be mounted.</td>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>child_id</code></td>
+            <td valign="top">IN: Identifier of the file to be mounted.</td>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist_id</code></td>
+            <td valign="top">IN: Identifier of the property list to be used.</td>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5fmount_f
+    <dd>
+	<pre>
+SUBROUTINE h5fmount_f(loc_id, name, child_id, hdferr)
+  IMPLICIT NONE 
+  INTEGER(HID_T), INTENT(IN)  :: loc_id      ! File or group identifier
+  CHARACTER(LEN=*), INTENT(IN):: name        ! Group name at locationloc_id
+  INTEGER(HID_T), INTENT(IN)  :: child_id    ! File(to be mounted) identifier
+  INTEGER, INTENT(OUT)        :: hdferr      ! Error code 
+                                             ! 0 on success and -1 on failure
+END SUBROUTINE h5fmount_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Fopen" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-Open">H5Fopen</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Fopen</code>(<em>const char *</em><code>name</code>,
+            <em>unsigned</em> <code>flags</code>,
+            <em>hid_t</em> <code>access_id</code>
+        )
+<dt><strong>Purpose:</strong>
+        <dd>Opens an existing file.
+<dt><strong>Description:</strong>
+        <dd><code>H5Fopen</code> opens an existing file and is the primary 
+            function for accessing existing HDF5 files.  
+            <p>
+            The parameter <code>access_id</code> is a file access property
+            list identifier or <code>H5P_DEFAULT</code> if the 
+            default I/O access parameters are to be used  
+            <p>
+            The <code>flags</code> argument determines whether writing 
+            to an existing file will be allowed.  
+            The file is opened with read and write permission if 
+            <code>flags</code> is set to <code>H5F_ACC_RDWR</code>.  
+            All flags may be combined with the bit-wise OR operator (`|') 
+            to change the behavior of the file open call.  
+            More complex behaviors of file access are controlled 
+            through the file-access property list.
+            <p>
+            The return value is a file identifier for the open file;
+            this file identifier should be closed by calling 
+            <code>H5Fclose</code> when it is no longer needed. 
+            <p>
+
+            <b>Special case -- Multiple opens:</b>
+            <br>
+            A file can often be opened with a new <code>H5Fopen</code> 
+            call without closing an already-open identifier established 
+            in a previous <code>H5Fopen</code> or <code>H5Fcreate</code> 
+            call.  Each such <code>H5Fopen</code> call will return a 
+            unique identifier and the file can be accessed through any 
+            of these identifiers as long as the identifier remains valid.
+            In such multiply-opened cases, all the open calls should 
+            use the same <code>flags</code> argument. 
+            <p>
+            In some cases, such as files on a local Unix file system, 
+            the HDF5 library can detect that a file is multiply opened and 
+            will maintain coherent access among the file identifiers.
+            <p>
+            But in many other cases, such as parallel file systems or
+            networked file systems, it is not always possible to detect 
+            multiple opens of the same physical file.  
+            In such cases, HDF5 will treat the file identifiers 
+            as though they are accessing different files and
+            will be unable to maintain coherent access.
+            Errors are likely to result in these cases.
+            While unlikely, the HDF5 library may not be able to detect,
+            and thus report, such errors.
+            <p>
+            It is generally recommended that applications avoid 
+            multiple opens of the same file.
+
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char&nbsp;*</em><code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Name of the file to access.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned</em> <code>flags</code></td>
+            <td valign="top">IN: File access flags.  Allowable values are:
+                <ul><dl>
+                    <dt><code>H5F_ACC_RDWR</code>
+                        <dd>Allow read and write access to file.
+                    <dt><code>H5F_ACC_RDONLY</code>
+                        <dd>Allow read-only access to file.
+                </dl>
+                <li><code>H5F_ACC_RDWR</code> and <code>H5F_ACC_RDONLY</code> 
+                are mutually exclusive; use exactly one.
+                <li>An additional flag, <code>H5F_ACC_DEBUG</code>, prints 
+                debug information.  This flag is used only by HDF5 library 
+                developers; it is neither tested nor supported
+                for use in applications.
+                </ul></td></tr>
+<!-- NEW PAGE -->
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>access_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier for the file access properties list.
+                If parallel file access is desired, this is a collective
+                call according to the communicator stored in the
+                <code>access_id</code>. 
+                Use <code>H5P_DEFAULT</code> for default file access properties.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a file identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5fopen_f
+    <dd>
+	<pre>
+SUBROUTINE h5fopen_f(name, access_flags, file_id, hdferr, &  
+                     access_prp)
+  IMPLICIT NONE 
+  CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the file
+  INTEGER, INTENT(IN) :: access_flag     ! File access flags  
+                                         ! Possible values are:
+                                         !     H5F_ACC_RDWR_F   
+                                         !     H5F_ACC_RDONLY_F    
+  INTEGER(HID_T), INTENT(OUT) :: file_id ! File identifier 
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+                                         ! 0 on success and -1 on failure
+  INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp  
+                                         ! File access property list 
+                                         ! identifier  
+END SUBROUTINE h5fopen_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Freopen" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-Reopen">H5Freopen</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Freopen</code>(<em>hid_t</em> <code>file_id</code>
+        )
+<dt><strong>Purpose:</strong>
+        <dd>Returns a new identifier for a previously-opened HDF5 file.
+<dt><strong>Description:</strong>
+        <dd><code>H5Freopen</code> returns a new file identifier for an
+            already-open HDF5 file, as specified by <code>file_id</code>.  
+            Both identifiers share caches and other information.  
+            The only difference between the identifiers is that the 
+            new identifier is not mounted anywhere and no files are 
+            mounted on it.
+            <p>
+            Note that there is no circumstance under which 
+            <code>H5Freopen</code> can actually open a closed file; 
+            the file  must already be open and have an active 
+            <code>file_id</code>.  E.g., one cannot close a file with 
+            <code> H5Fclose&nbsp;(file_id) </code> then use 
+            <code> H5Freopen&nbsp;(file_id) </code> to reopen it.
+            <p>
+            The new file identifier should be closed by calling
+            <code>H5Fclose</code> when it is no longer needed.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>file_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of a file for which an additional identifier 
+                is required.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a new file identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5freopen_f
+    <dd>
+	<pre>
+SUBROUTINE h5freopen_f(file_id, new_file_id, hdferr)
+  IMPLICIT NONE 
+  INTEGER(HID_T), INTENT(IN)  :: file_id     ! File identifier 
+  INTEGER(HID_T), INTENT(OUT) :: new_file_id ! New file identifier 
+  INTEGER, INTENT(OUT)        :: hdferr      ! Error code 
+                                             ! 0 on success and -1 on failure
+END SUBROUTINE h5freopen_f 
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Funmount" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="File-Unmount">H5Funmount</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Funmount</code>(<em>hid_t</em> <code>loc_id</code>,
+            <em>const char *</em><code>name</code>
+        )
+<dt><strong>Purpose:</strong>
+        <dd>Unmounts a file.
+<dt><strong>Description:</strong>
+        <dd>Given a mount point, <code>H5Funmount</code> 
+            dissassociates the mount point's file
+            from the file mounted there.  This function
+            does  not close either file.
+            <p> 
+            The mount point can be either the group in the
+            parent or the root group of the mounted file 
+            (both groups have the same name).  If the mount 
+            point was opened before the mount then it is the 
+            group in the parent; if it was opened after the 
+            mount then it is the root group of the child.
+            <p>
+            Note that <code>loc_id</code> is either a file or group identifier
+            and <code>name</code> is relative to <code>loc_id</code>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+            <td valign="top">IN: File or group identifier for the location at which
+                the specified file is to be unmounted.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char&nbsp;*</em><code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Name of the mount point.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5funmount_f
+    <dd>
+	<pre>
+SUBROUTINE h5funmount_f(loc_id, name, child_id, hdferr)
+  IMPLICIT NONE 
+  INTEGER(HID_T), INTENT(IN)  :: loc_id      ! File or group identifier
+  CHARACTER(LEN=*), INTENT(IN):: name        ! Group name at location loc_id
+  INTEGER, INTENT(OUT)        :: hdferr      ! Error code 
+                                             ! 0 on success and -1 on failure
+END SUBROUTINE h5funmount_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 7 November 2005");
+-->
+</SCRIPT>
+ 
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/RM_H5Front.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/RM_H5Front.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/RM_H5Front.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,273 @@
+<html>
+<head>
+<a name="TopofRM"></a>
+<title>
+HDF5 API Specification
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+
+<body bgcolor="#FFFFFF">
+
+<!-- HEADER LEFT "HDF5 Reference Manual -->
+<!-- FOOTER $PAGE (format=1) -->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>HDF5: API Specification<br>Reference Manual</h1>
+
+
+</center>
+The HDF5 library provides several interfaces, each of which provides the 
+tools required to meet specific aspects of the HDF5 data-handling requirements.
+<p>
+See <a href="#F90andCPPlus">below</a> for the FORTRAN90 and C++ APIs.
+<p>
+
+<center>
+<table border=0 width=90%>
+
+<tr><td valign=top><a href="RM_H5.html">Library Functions</a>
+    </td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>The general-purpose <strong>H5</strong> functions.
+</td></tr>
+<tr><td valign=top><a href="RM_H5A.html">Attribute Interface</a>
+    </td><td></td><td valign=top>The <strong>H5A</strong> API for attributes.
+</td></tr>
+<tr><td valign=top><a href="RM_H5D.html">Dataset Interface</a>
+    </td><td></td><td valign=top>The <strong>H5D</strong> API for manipulating scientific datasets. 
+</td></tr>
+<tr><td valign=top><a href="RM_H5E.html">Error Interface</a>
+    </td><td></td><td valign=top>The <strong>H5E</strong> API for error handling.
+</td></tr>
+<tr><td valign=top><a href="RM_H5F.html">File Interface</a>
+    </td><td></td><td valign=top>The <strong>H5F</strong> API for accessing HDF files.
+</td></tr>
+<tr><td valign=top><a href="RM_H5G.html">Group Interface</a>
+    </td><td></td><td valign=top>The <strong>H5G</strong> API for creating physical groups of objects on disk.
+</td></tr>
+<tr><td valign=top><a href="RM_H5I.html">Identifier Interface</a>
+    </td><td></td><td valign=top>The <strong>H5I</strong> API for working with object identifiers.
+</td></tr>
+<tr><td valign=top><a href="RM_H5P.html">Property List Interface</a>
+    </td><td></td><td valign=top>The <strong>H5P</strong> API for manipulating object property lists.
+</td></tr>
+<tr><td valign=top><a href="RM_H5R.html">Reference Interface</a>
+    </td><td></td><td valign=top>The <strong>H5R</strong> API for references.
+</td></tr>
+<tr><td valign=top><a href="RM_H5S.html">Dataspace Interface</a>
+    </td><td></td><td valign=top>The <strong>H5S</strong> API for defining dataset dataspace.
+</td></tr>
+<tr><td valign=top><a href="RM_H5T.html">Datatype Interface</a>
+    </td><td></td><td valign=top>The <strong>H5T</strong> API for defining dataset element information.
+</td></tr>
+<tr><td valign=top><a href="RM_H5Z.html">Filters and</a><br>
+                                        &nbsp;&nbsp;<a href="RM_H5Z.html">Compression Interface</a>
+    </td><td></td><td valign=top>The <strong>H5Z</strong> API for inline data filters and data compression.
+</td></tr>
+<tr><td valign=top><a href="Tools.html">Tools</a>
+    </td><td></td><td valign=top>Interactive tools for the examination of existing HDF5 files.
+</td></tr>
+<tr><td valign=top><a href="PredefDTypes.html">Predefined Datatypes</a>
+    </td><td></td><td valign=top>Predefined datatypes in HDF5.
+<!--
+</td></tr>
+<tr><td valign=top><a href="Glossary.html">Glossary</a>
+    </td><td></td><td valign=top>A glossary of data-types used in the APIs.
+-->
+</td></tr>
+</table>
+</center>
+
+<p>
+A PDF version of this <cite>HDF5 Reference Manual</cite>, 
+formatted specifically for use as a printed book, is available 
+at <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">
+<code>http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/</code></a>
+within one week after each release.
+
+<!-- NEW PAGE -->
+<a name="F90andCPPlus">
+<hr>
+
+<SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("<div align=right><a href='#TopofRM'>To top of <cite>Reference Manual</cite></a></div>");
+-->
+</SCRIPT> 
+
+<h3>The Fortran90 and C++ APIs to HDF5</h3>
+</a>
+
+The HDF5 Library distribution includes FORTRAN90 and C++ APIs,
+which are described in the following documents.
+
+<p>
+<strong>Fortran90 API</strong>
+    <dir>
+    <a href="fortran/F90UserNotes.html" target="External">
+    <cite>HDF5 FORTRAN90 User's Notes</cite></a>
+    contains general information regarding the API.
+    Specific information on each API call is found in the 
+    <cite>HDF5 Reference Manual</cite>.
+    <p>
+    <u>Fortran90 APIs in the <cite>Reference Manual</cite>:</u>
+    The current version of the <cite>HDF5 Reference Manual</cite> includes 
+    descriptions of the Fortran90 APIs to HDF5.
+    Fortran subroutines exist in the H5, H5A, H5D, H5E, H5F, H5G, H5I, H5P, 
+    H5R, H5S, H5T, and H5Z interfaces and are described on those pages.
+    In general, each Fortran subroutine performs exactly the same task 
+    as the corresponding C function.  
+    <p>  
+    Whereas Fortran subroutines had been described on separate pages in
+    prior releases, those descriptions were fully integrated into the 
+    body of the reference manual for HDF5 Release 1.6.2 
+    (and mostly so for Release 1.6.1).  
+    <p>
+    <a href="fortran/F90Flags.html" target="External">
+    <cite>HDF5 Fortran90 Flags and Datatypes</cite></a>
+    lists the flags employed in the Fortran90 interface and 
+    contains a pointer to the HDF5 Fortran90 datatypes.
+    </dir>
+
+<strong>C++ API</strong>
+    <dir>
+    <A HREF="cpplus_RM/index.html" target="CppExternal">
+    <cite>HDF5 C++ API Reference Manual</cite></A>
+    <br>
+    This document supersedes all prior documentation of the C++ APIs.
+<!--
+    <p>
+    (Note that the C++ APIs are not yet integrated into the 
+    <cite>HDF5 Reference Manual</cite>.)
+-->
+    </dir>
+
+
+<br><br>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><table width=100% border=0>
+<tr><td align=left valign=top> 
+
+<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 10 January 2005");
+-->
+</SCRIPT>
+
+
+</td><td align=right valign=top>
+<SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("<a href=Copyright.html>Copyright</a>&nbsp;&nbsp;");
+-->
+</SCRIPT>
+</td></tr>
+</table>
+
+</body>
+</html>
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/RM_H5G.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/RM_H5G.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/RM_H5G.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1578 @@
+<html>
+<head><title>
+HDF5/H5G API Specification
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+<!-- HEADER RIGHT " " -->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>H5G: Group Interface</h1>
+</center>
+
+<h2>Group Object API Functions</h2>
+
+The Group interface functions create and manipulate groups
+of objects in an HDF5 file.
+<p>
+<strong>The C Interfaces:</strong>
+
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li><a href="#Group-Create">H5Gcreate</a>
+    <li><a href="#Group-Open">H5Gopen</a>
+    <li><a href="#Group-Close">H5Gclose</a>
+    <li><a href="#Group-SetComment">H5Gset_comment</a>
+    <li><a href="#Group-GetComment">H5Gget_comment</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+<td valign=top> 
+<ul>
+    <li><a href="#Group-Link">H5Glink</a> 
+    <li><a href="#Group-Link2">H5Glink2</a> 
+    <li><a href="#Group-Unlink">H5Gunlink</a> 
+    <li><a href="#Group-Move">H5Gmove</a>
+    <li><a href="#Group-Move2">H5Gmove2</a> 
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Group-Iterate">H5Giterate</a> 
+    <li><a href="#Group-GetObjinfo">H5Gget_objinfo</a>
+    <li><a href="#Group-GetNumObjs">H5Gget_num_objs</a>
+    <li><a href="#Group-GetObjNameByIdx">H5Gget_objname_by_idx</a>
+    <li><a href="#Group-GetObjTypeByIdx">H5Gget_objtype_by_idx</a>
+    <li><a href="#Group-GetLinkval">H5Gget_linkval</a>
+</ul>
+</td></tr>
+</table>
+
+<i>Alphabetical Listing</i>
+
+<table border="0">
+  <tr>
+    <td valign="top">
+	<ul>
+      <li><a href="#Group-Close">H5Gclose</a>
+      <li><a href="#Group-Create">H5Gcreate</a>
+      <li><a href="#Group-GetComment">H5Gget_comment</a>
+      <li><a href="#Group-GetLinkval">H5Gget_linkval</a>
+      <li><a href="#Group-GetNumObjs">H5Gget_num_objs</a>
+      <li><a href="#Group-GetObjinfo">H5Gget_objinfo</a>
+    </ul>     
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#Group-GetObjNameByIdx">H5Gget_objname_by_idx</a>
+      <li><a href="#Group-GetObjTypeByIdx">H5Gget_objtype_by_idx</a>
+      <li><a href="#Group-Iterate">H5Giterate</a>
+      <li><a href="#Group-Link">H5Glink</a>
+      <li><a href="#Group-Link2">H5Glink2</a>
+      <li><a href="#Group-Move">H5Gmove</a>
+	</ul>
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#Group-Move2">H5Gmove2</a>
+      <li><a href="#Group-Open">H5Gopen</a>
+      <li><a href="#Group-SetComment">H5Gset_comment</a>
+      <li><a href="#Group-Unlink">H5Gunlink</a>
+	</ul>
+    </td>
+  </tr>
+</table>
+
+<br>
+<strong>The FORTRAN90 Interfaces:</strong>
+<br>
+In general, each FORTRAN90 subroutine performs exactly the same task 
+as the corresponding C function.  
+<br>
+
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li><a href="#Group-Create">h5gcreate_f</a>
+    <li><a href="#Group-Open">h5gopen_f</a>
+    <li><a href="#Group-Close">h5gclose_f</a>
+    <li><a href="#Group-SetComment">h5gset_comment_f</a>
+    <li><a href="#Group-GetComment">h5gget_comment_f</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Group-Link">h5glink_f</a>
+    <li><a href="#Group-Link2">h5glink2_f</a>
+    <li><a href="#Group-Unlink">h5gunlink_f</a>  
+    <li><a href="#Group-Move">h5gmove_f</a> 
+    <li><a href="#Group-Move2">h5gmove2_f</a> 
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Group-Iterate">h5gget_obj_info_idx_f</a>
+    <li><a href="#Group-Iterate">h5gn_members_f</a>
+<!--<li><a href="#Group-GetObjinfo">h5gget_objinfo_f</a>          -->
+<!--<li><a href="#Group-GetNumObjs">h5gget_num_objs_f</a>         -->
+<!--<li><a href="#Group-GetObjNameByIdx">h5gget_objname_by_idx_f</a>   -->
+<!--<li><a href="#Group-GetObjTypeByIdx">h5gget_objtype_by_idx_f</a>   -->
+    <li><a href="#Group-GetLinkval">h5gget_linkval_f</a>
+</ul>
+</td></tr>
+</table>
+
+<p>
+A group associates names with objects and provides a mechanism
+for mapping a name to an object. Since all objects appear in at 
+least one group (with the possible exception of the root object) 
+and since objects can have names in more than one group, the set 
+of all objects in an HDF5 file is a directed graph.  The internal
+nodes (nodes with out-degree greater than zero) must be groups 
+while the leaf nodes (nodes with out-degree zero) are either empty 
+groups or objects of some other type.  Exactly one object in every 
+non-empty file is the root object.  The root object always has a 
+positive in-degree because it is pointed to by the file super block.
+
+<p>
+An object name consists of one or more components separated from
+one another by slashes. An absolute name begins with a slash and the
+object is located by looking for the first component in the root
+object, then looking for the second component in the first object, etc.,
+until the entire name is traversed.  A relative name does not begin 
+with a slash and the traversal begins at the location specified by the 
+create or access function.
+
+<p>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT " " -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Gclose" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Group-Close">H5Gclose</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Gclose</code>(<em>hid_t </em><code>group_id</code>)
+  <dt><strong>Purpose:</strong>
+    <dd>Closes the specified group.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Gclose</code> releases resources used by a group which was
+        opened by <code>H5Gcreate</code> or <code>H5Gopen</code>. 
+        After closing a group, the <code>group_id</code> cannot be used again.  
+        <p>
+        Failure to release a group with this call will result in resource leaks.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+      <tr>
+	      <td valign="top"><em>hid_t</em>&nbsp;<code>group_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: Group identifier to release.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5gclose_f
+    <dd>
+	<pre>
+SUBROUTINE h5gclose_f( gr_id, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: gr_id     ! Group identifier
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code 
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5gclose_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Gcreate" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Group-Create">H5Gcreate</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Gcreate</code>(<em>hid_t</em> <code>loc_id</code>, 
+        <em>const char *</em><code>name</code>,
+	  <em>size_t</em> <code>size_hint</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Creates a new empty group and gives it a name.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Gcreate</code> creates a new group with the specified
+	  name at the specified location, <code>loc_id</code>.  
+        The location is identified by a file or group identifier.  
+	  The name, <code>name</code>, must not already be taken by some 
+	  other object and all parent groups must already exist.  
+        <p>
+	  <code>size_hint</code> is a hint for the number of bytes to
+	  reserve to store the names which will be eventually added to
+	  the new group.  Passing a value of zero for <code>size_hint</code>
+	  is usually adequate since the library is able to dynamically
+	  resize the name heap, but a correct hint may result in better
+	  performance.  
+        If a non-positive value is supplied for <code>size_hint</code>, 
+        then a default size is chosen.
+        <p>
+        The return value is a group identifier for the open group.
+	This group identifier should be closed by calling 
+        <code>H5Gclose</code> when it is no longer needed. 
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+      <tr>
+	      <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+          <td valign="top">IN: File or group identifier.</td></tr>
+      <tr>
+	      <td valign="top"><em>const char *</em><code>name</code></td>
+          <td valign="top">IN: Absolute or relative name of the new group.</td></tr>
+      <tr>
+	      <td valign="top"><em>size_t</em>&nbsp;<code>size_hint&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: Optional parameter indicating the number of bytes 
+              to reserve for the names that will appear in the group. 
+              A conservative estimate could result in multiple 
+              system-level I/O requests to read the group name heap; 
+              a liberal estimate could result in a single large 
+              I/O request even when the group has just a few names.  
+              HDF5 stores each name with a null terminator.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a valid group identifier for the open group if successful; 
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5gcreate_f
+    <dd>
+	<pre>
+SUBROUTINE h5gcreate_f(loc_id, name, gr_id, hdferr, size_hint)
+
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
+  CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the group to be created 
+  INTEGER(HID_T), INTENT(OUT) :: gr_id   ! Group identifier
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+                                         ! 0 on success and -1 on failure
+  INTEGER(SIZE_T), OPTIONAL, INTENT(IN) :: size_hint  
+                                         ! Number of bytes to store the names 
+                                         ! of objects in the group. 
+                                         ! Default value is 
+                                         ! OBJECT_NAMELEN_DEFAULT_F
+END SUBROUTINE h5gcreate_f 
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Gget_comment" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Group-GetComment">H5Gget_comment</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Gget_comment</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>const char *</em><code>name</code>,
+        <em>size_t</em> <code>bufsize</code>,
+        <em>char *</em><code>comment</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves comment for specified object.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Gget_comment</code> retrieves the comment for the the
+        object specified by <code>loc_id</code> and <code>name</code>.  
+        The comment is returned in the buffer <code>comment</code>.
+        <p>
+        At most <code>bufsize</code> characters, including a null 
+        terminator, are returned in <code>comment</code>.  
+        The returned value is not null terminated 
+        if the comment is longer than the supplied buffer.  
+        <p>
+        If an object does not have a comment, the empty string 
+        is returned.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+      <tr>
+        <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+        <td valign="top">IN: Identifier of the file, group, dataset, or 
+            named datatype.</td></tr>
+      <tr>
+        <td valign="top"><em>const&nbsp;char&nbsp;*</em><code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: Name of the object in <code>loc_id</code> whose 
+            comment is to be retrieved.
+            <br>
+            <code>name</code> can be '.' (dot) if <code>loc_id</code> 
+            fully specifies the object for which the associated comment 
+            is to be retrieved.
+            <br>
+            <code>name</code> is ignored if <code>loc_id</code> 
+            is a dataset or named datatype.
+            </td></tr>
+      <tr>
+        <td valign="top"><em>size_t</em> <code>bufsize</code></td>
+        <td valign="top">IN: Anticipated required size of the  
+            <code>comment</code> buffer.</td></tr>
+      <tr>
+        <td valign="top"><em>char *</em><code>comment</code></td>
+        <td valign="top">OUT: The comment.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns the number of characters in the comment, 
+        counting the null terminator, if successful; the value 
+        returned may be larger than <code>bufsize</code>.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5gget_comment_f
+    <dd>
+    <pre>
+SUBROUTINE h5gget_comment_f(loc_id, name, size, buffer, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: loc_id         ! File, group, dataset, or
+                                               ! named datatype identifier  
+  CHARACTER(LEN=*), INTENT(IN) :: name         ! Name of the object link 
+  CHARACTER(LEN=size), INTENT(OUT) :: buffer   ! Buffer to hold the comment
+  INTEGER, INTENT(OUT) :: hdferr               ! Error code 
+                                               ! 0 on success and -1 on failure
+END SUBROUTINE h5gget_comment_f
+    </pre>
+
+    <!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Gget_linkval" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Group-GetLinkval">H5Gget_linkval</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Gget_linkval</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>const char *</em><code>name</code>,
+        <em>size_t</em> <code>size</code>,
+        <em>char *</em><code>value</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns the name of the object that the symbolic link points to.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Gget_linkval</code> returns <code>size</code> 
+        characters of the name of the object that the symbolic link <code>name</code> points to.
+        <p>
+        The parameter <code>loc_id</code> is a file or group identifier.
+        <p>
+        The parameter <code>name</code> must be a symbolic link pointing to
+        the desired object and must be defined relative to <code>loc_id</code>.
+        <p>
+        If <code>size</code> is smaller than the size of the returned object name, then 
+        the name stored in the buffer <code>value</code> will not be null terminated. 
+        <p> 
+        This function fails if <code>name</code> is not a symbolic link.  
+        The presence of a symbolic link can be tested by passing zero for  
+        <code>size</code> and NULL for <code>value</code>.  
+        <p>
+        This function should be used only after <code>H5Gget_objinfo</code> has been called
+        to verify that <code>name</code> is a symbolic link.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+      <tr>
+	    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+        <td valign="top">IN: Identifier of the file or group.</td></tr>
+      <tr>
+	    <td valign="top"><em>const&nbsp;char&nbsp;*</em><code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: Symbolic link to the object whose name is to be returned.</td></tr>
+      <tr>
+	    <td valign="top"><em>size_t</em> <code>size</code></td>
+        <td valign="top">IN: Maximum number of characters of <code>value</code> 
+            to be returned.</td></tr>
+      <tr>
+	    <td valign="top"><em>char *</em><code>value</code></td>
+        <td valign="top">OUT: A buffer to hold the name of the object being sought.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value, with the link value in <code>value</code>, 
+        if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5gget_linkval_f
+    <dd>
+	<pre>
+SUBROUTINE h5gget_linkval_f(loc_id, name, size, buffer, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: loc_id         ! File or group identifier
+  CHARACTER(LEN=*), INTENT(IN) :: name         ! Name of the symbolic link 
+  CHARACTER(LEN=size), INTENT(OUT) :: buffer   ! Buffer to hold a
+                                               ! name of the object 
+                                               ! symbolic link points to
+  INTEGER, INTENT(OUT) :: hdferr               ! Error code 
+                                               ! 0 on success and -1 on failure
+END SUBROUTINE h5gget_linkval_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Gget_num_objs" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Group-GetNumObjs">H5Gget_num_objs</a>
+<dt><strong>Signature:</strong>
+  <dd><em>herr_t</em> <code>H5Gget_num_objs</code>(<em>hid_t</em> <code>loc_id</code>,
+      <em>hsize_t* </em> <code>num_obj</code>)
+<dt><strong>Purpose:</strong>
+  <dd>Returns number of objects in the group specified by its identifier
+<dt><strong>Description:</strong>
+  <dd><code>H5Gget_num_objs</code> returns number of objects in a group.
+      Group is specified by its identifier <code>loc_id</code>. 
+      If a file identifier is passed in, then the number of objects in the 
+      root group is returned.
+<dt><strong>Parameters:</strong>
+  <ul><table>
+    <tr>
+	  <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+      <td valign="top">IN: Identifier of the group or the file</td></tr>
+    <tr>
+	  <td valign="top"><em>hsize_t&nbsp;*</em><code>num_obj&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+      <td valign="top">OUT: Number of objects in the group.</td></tr>
+  </table></ul>
+<dt><strong>Returns:</strong>
+  <dd>Returns positive value if successful;
+      otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+	
+<!--
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Gget_objinfo" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Group-GetObjinfo">H5Gget_objinfo</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Gget_objinfo</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>const char *</em><code>name</code>,
+        <em>hbool_t</em> <code>follow_link</code>,
+        <em>H5G_stat_t *</em><code>statbuf</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns information about an object.  
+  <dt><strong>Description:</strong>
+    <dd><code>H5Gget_objinfo</code> returns information about the 
+        specified object through the <code>statbuf</code> argument. 
+        <code>loc_id</code> (a file or group identifier) and 
+        <code>name</code> together determine the object.  
+        If the object is a symbolic link and <code>follow_link</code> is
+        zero (<code>0</code>), then the information returned is that for the link itself;
+        otherwise the link is followed and information is returned about
+        the object to which the link points.  
+        If <code>follow_link</code> is non-zero but the final symbolic link 
+        is dangling (does not point to anything), then an error is returned.  
+        The <code>statbuf</code> fields are undefined for an error.  
+        The existence of an object can be tested by calling this function 
+        with a null <code>statbuf</code>.
+        <p>
+        <code>H5Gget_objinfo</code> fills in the following data structure
+        (defined in H5Gpublic.h):
+        <pre>
+                  typedef struct H5G_stat_t {
+                      unsigned long fileno[2];
+                      unsigned long objno[2];
+                      unsigned nlink;
+                      int type;
+                      time_t mtime; 
+                      size_t linklen;
+                      H5O_stat_t ohdr;
+                  } H5G_stat_t
+        </pre>
+
+        where H5O_stat_t (defined in H5Opublic.h) is:
+
+        <pre>
+                  typedef struct H5O_stat_t {
+                      hsize_t size;
+                      hsize_t free;
+                      unsigned nmesgs;
+                      unsigned nchunks;
+                  } H5O_stat_t
+        </pre>
+        The <code>fileno</code> and <code>objno</code> fields contain 
+        four values which uniquely identify an object among those 
+        HDF5 files which are open: if all four values are the same 
+        between two objects, then the two objects are the same 
+        (provided both files are still open).  
+        <ul>
+        <li>Note that if a file is closed and re-opened, the
+        value in <code>fileno</code> will change.
+        <li>If a VFL driver either does not or cannot detect that 
+        two <code>H5Fopen</code> calls referencing the same file 
+        actually open the same file, each will get a different 
+        <code>fileno</code>.
+        </ul>
+        <p>
+        The <code>nlink</code> field is the number of hard links to  
+        the object or zero when information is being returned about a 
+        symbolic link (symbolic links do not have hard links but 
+        all other objects always have at least one).  
+        <p>
+        The <code>type</code> field contains the type of the object, 
+        one of 
+		<code>H5G_GROUP</code>, 
+		<code>H5G_DATASET</code>,
+        	<code>H5G_LINK</code>, or
+        	<code>H5G_TYPE</code>.  
+        <p>
+        The <code>mtime</code> field contains the modification time.
+        <p>
+        If information is being returned about a symbolic link then 
+        <code>linklen</code> will be the length of the link value 
+        (the name of the pointed-to object with the null terminator);
+        otherwise <code>linklen</code> will be zero.  
+        <p>
+        The fields in the <code>H5O_stat_t</code> struct contain information
+        about the object header for the object queried:
+            <ul><dl>
+                <dt><code>size</code>
+                <dd>The total size of all the object header information in
+                    the file (for all chunks).
+                <dt><code>free</code>
+                <dd>The size of unused space in the object header.
+                <dt><code>nmesgs</code>
+                <dd>The number of object header messages.
+                <dt><code>nchunks</code>
+                <dd>The number of chunks the object header is broken up into.
+            </dl> </ul>
+
+        <p>
+        Other fields may be added to this structure in the future.
+  <dt><strong>Note:</strong>
+    <dd>Some systems will be able to record the time accurately but
+        unable to retrieve the correct time; such systems (e.g., Irix64) 
+        will report an <code>mtime</code> value of 0 (zero).
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+      <tr>
+	    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+        <td valign="top">IN: File or group identifier.</td></tr>
+      <tr>
+	    <td valign="top"><em>const char</em> <code>*name</code></td>
+        <td valign="top">IN: Name of the object for which status is being sought.</td></tr>
+	  <tr>
+	    <td valign="top"><em>hbool_t</em> <code>follow_link</code></td>
+        <td valign="top">IN: Link flag.</td></tr>
+      <tr>
+	    <td valign="top"><em>H5G_stat_t</em>&nbsp;<code>*statbuf&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">OUT: Buffer in which to return information about the object.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd> Returns a non-negative value if successful, with the fields of 
+         <code>statbuf</code> (if non-null) initialized.
+         Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+	
+<!--
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+            <strong>C</strong></td></tr>
+        <tr>
+          <td valign="top">1.6.1</td>
+          <td valign="top">
+            Two new fields were added to the 
+            <code>H5G_stat_t</code> struct in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Gget_objname_by_idx" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Group-GetObjNameByIdx">H5Gget_objname_by_idx</a>
+<dt><strong>Signature:</strong>
+  <dd><em>ssize_t</em> <code>H5Gget_objname_by_idx</code>(<em>hid_t</em> <code>loc_id</code>, 
+                      <em>hsize_t</em> <code>idx</code>, 
+                      <em>char *</em><code>name</code>, 
+                      <em>size_t</em> <code>size</code> )
+<dt><strong>Purpose:</strong>
+  <dd>Returns a name of an object specified by an index.
+<dt><strong>Description:</strong>
+  <dd><code>H5Gget_objname_by_idx</code> returns a name of the object 
+      specified by the index <code>idx</code> in the group <code>loc_id</code>.
+      <p>
+      The group is specified by a group identifier <code>loc_id</code>. 
+      If preferred, a file identifier may be passed in <code>loc_id</code>; 
+      that file's root group will be assumed. 
+      <p>
+      <code>idx</code> is the transient index used to iterate through 
+      the objects in the group.
+      The value of <code>idx</code> is any nonnegative number less than 
+      the total number of objects in the group, which is returned by the
+      function <code>H5Gget_num_objs</code>. 
+      Note that this is a transient index; an object may have a 
+      different index each time a group is opened.
+      <p>
+      The object name is returned in the user-specified buffer <code>name</code>.
+      <p>
+      If the size of the provided buffer <code>name</code> is 
+      less or equal the actual object name length, 
+      the object name is truncated to <code>max_size - 1</code> characters.
+      <p>
+      Note that if the size of the object's name is unkown, a 
+      preliminary call to <code>H5Gget_objname_by_idx</code> with <code>name</code>
+      set to NULL will return the length of the object's name.
+      A second call to <code>H5Gget_objname_by_idx</code> 
+      can then be used to retrieve the actual name.
+<dt><strong>Parameters:</strong>
+  <ul><table>
+    <tr>
+	    <td valign="top"><em>hid_t</em>&nbsp;<code>loc_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: Group or file identifier.</td></tr>
+    <tr>
+	    <td valign="top"><em>hsize_t</em> <code>idx</code></td>
+        <td valign="top">IN: Transient index identifying object.</td></tr>
+    <tr>
+	    <td valign="top"><em>char *</em><code>name</code></td>
+        <td valign="top">IN/OUT: Pointer to user-provided buffer the object name.</td></tr>
+    <tr>
+	    <td valign="top"><em>size_t</em> <code>size</code></td>
+        <td valign="top">IN: Name length.</td></tr>
+  </table></ul>
+<dt><strong>Returns:</strong>
+  <dd>Returns the size of the object name if successful, 
+      or <code>0</code> if no name is associated with the group identifier.
+      Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+	
+<!--
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Gget_objtype_by_idx" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Group-GetObjTypeByIdx">H5Gget_objtype_by_idx</a>
+<dt><strong>Signature:</strong>
+  <dd><em>int</em> <code>H5Gget_objtype_by_idx</code>(<em>hid_t</em> <code>loc_id</code>, 
+                      <em>hsize_t</em> <code>idx</code> )
+<dt><strong>Purpose:</strong>
+  <dd>Returns the type of an object specified by an index.
+<dt><strong>Description:</strong>
+  <dd><code>H5Gget_objtype_by_idx</code> returns the type of the object 
+      specified by the index <code>idx</code> in the group <code>loc_id</code>.
+      <p>
+      The group is specified by a group identifier <code>loc_id</code>. 
+      If preferred, a file identifier may be passed in <code>loc_id</code>; 
+      that file's root group will be assumed. 
+      <p>
+      <code>idx</code> is the transient index used to iterate through 
+      the objects in the group.
+      This parameter is described in more detail in the discussion of 
+      <a href="#Group-GetObjNameByIdx"><code>H5Gget_objname_by_idx</code></a>.
+      <p>
+      The object type is returned as the function return value:
+        <table>	
+        <tr valign=top align=left><td>
+            &nbsp;&nbsp;&nbsp;&nbsp;
+            </td><td>
+            <code>H5G_LINK</code> 
+            <!--</td><td>
+            <code>0x0001</code>-->
+            </td><td>
+            <code>0</code>
+            </td><td>
+            Object is a symbolic link. 
+        </td></tr>
+        <tr valign=top align=left><td>&nbsp;
+            
+            </td><td>
+            <code>H5G_GROUP</code> 
+            <!--</td><td>
+            <code>0x0001</code>-->
+            </td><td>
+            <code>1</code>
+            </td><td>
+            Object is a group. 
+        </td></tr>
+        <tr valign=top align=left><td>&nbsp;
+            
+            </td><td>
+            <code>H5G_DATASET</code>  &nbsp;&nbsp;
+            <!--</td><td>
+            <code>0x0001</code>-->
+            </td><td>
+            <code>2</code> &nbsp;&nbsp;
+            </td><td>
+            Object is a dataset. 
+        </td></tr>
+        <tr valign=top align=left><td>&nbsp;
+            
+            </td><td>
+            <code>H5G_TYPE</code> 
+            <!--</td><td>
+            <code>0x0001</code>-->
+            </td><td>
+            <code>3</code>
+            </td><td>
+            Object is a named datatype. 
+        </td></tr>
+	</table>
+
+<dt><strong>Parameters:</strong>
+  <ul><table>
+    <tr>
+	    <td valign="top"><em>hid_t</em>&nbsp;<code>loc_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: Group or file identifier.</td></tr>
+    <tr>
+	    <td valign="top"><em>hsize_t</em> <code>idx</code></td>
+        <td valign="top">IN: Transient index identifying object.</td></tr>
+  </table></ul>
+<dt><strong>Returns:</strong>
+  <dd>Returns the type of the object if successful.
+      Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+	
+<!--
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    The function return type changed from 
+			<em>int</em> to the enumerated type 
+			<em>H5G_obj_t</em>.</td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Giterate" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Group-Iterate">H5Giterate</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Giterate</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>const char</em> <code>*name</code>,
+        <em>int</em> <code>*idx</code>,
+        <em>H5G_iterate_t</em> <code>operator</code>,
+        <em>void</em> <code>*operator_data</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Iterates an operation over the entries of a group.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Giterate</code> iterates over the members of 
+        <code>name</code> in the file or group specified with 
+        <code>loc_id</code>.  
+        For each object in the group, the <code>operator_data</code> 
+        and some additional information, specified below, are
+        passed to the <code>operator</code> function.  
+        The iteration begins with the <code>idx</code> object in the 
+        group and the next element to be processed by the operator is 
+        returned in <code>idx</code>.  If <code>idx</code>
+        is NULL, then the iterator starts at the first group member; 
+        since no stopping point is returned in this case, the iterator 
+        cannot be restarted if one of the calls to its operator returns 
+        non-zero.  
+        <p>
+        The prototype for <code>H5G_iterate_t</code> is:
+        <table>
+		    <tr>
+			  <td valign="top">&nbsp;&nbsp;&nbsp;&nbsp;</td>
+			  <td valign="top"><code>typedef</code> <em>herr_t </em>(*<code>H5G_iterate_t</code>)
+			                   (<em>hid_t</em> <code>group_id</code>, <em>const char *</em>
+							   <code>member_name</code>, <em>void *</em><code>operator_data</code>);</td></tr>
+        </table>
+				
+        <p>The operation receives the group identifier for the group being 
+        iterated over, <code>group_id</code>, the name of the current 
+        object within the group, <code>member_name</code>, and the 
+        pointer to the operator data passed in to <code>H5Giterate</code>, 
+        <code>operator_data</code>.  
+        <p>
+        The return values from an operator are:
+        <ul>
+            <li>Zero causes the iterator to continue, returning 
+                zero when all group members have been processed.
+            <li>Positive causes the iterator to immediately return that positive
+                value, indicating short-circuit success.  The iterator can be
+                restarted at the next group member.
+            <li>Negative causes the iterator to immediately return that value,
+                indicating failure.  The iterator can be restarted at the next
+                group member.
+        </ul>
+        <p>
+        <code>H5Giterate</code> assumes that the membership of the group 
+        identified by <code>name</code> remains unchanged through the 
+        iteration.  If the membership changes during the iteration, 
+        the function's behavior is undefined.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+      <tr>
+	    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+        <td valign="top">IN: File or group identifier.</td></tr>
+      <tr>
+	    <td valign="top"><em>const char</em> <code>*name</code></td>
+        <td valign="top">IN: Group over which the iteration is performed.</td></tr>
+      <tr>
+	    <td valign="top"><em>int</em> <code>*idx</code></td>
+        <td valign="top">IN/OUT: Location at which to begin the iteration.</td></tr>
+      <tr>
+	    <td valign="top"><em>H5G_iterate_t</em>&nbsp;<code>operator&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: Operation to be performed on an object at each step of 
+            the iteration.</td></tr>
+      <tr>
+	    <td valign="top"><em>void</em> <code>*operator_data</code></td>
+        <td valign="top">IN/OUT: Data associated with the operation.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns the return value of the last operator if it was non-zero, 
+        or zero if all group members were processed.
+        Otherwise returns a negative value.
+<!-- NEW PAGE -->
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>There is no direct FORTRAN couterpart for the C function 
+        <code>H5Giterate</code>.  
+        Instead, that functionality is provided by two FORTRAN functions:
+        
+    <center>
+    <table width=80%>
+      <tr valign=top align=left>
+        <td>
+          <code>h5gn_members_f</code>
+        </td>
+		<td>&nbsp;&nbsp;</td>
+		<td>
+          <strong>Purpose:</strong>
+          Returns the number of group members.
+        </tr>
+		<tr valign=top align=left>
+            <td>
+            <code>h5gget_obj_info_idx_f</code>
+            </td><td>&nbsp;&nbsp;</td><td>
+            <strong>Purpose:</strong>
+            Returns name and type of the group member identified by its index.
+          </td>
+		</tr>
+    </table>
+    </center>
+				
+		<pre>
+SUBROUTINE h5gn_members_f(loc_id, name, nmembers, hdferr)           
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: loc_id        ! File or group identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name        ! Name of the group 
+  INTEGER, INTENT(OUT) :: nmembers            ! Number of members in the group
+  INTEGER, INTENT(OUT) :: hdferr              ! Error code 
+                                              ! 0 on success and -1 on failure
+END SUBROUTINE h5gn_members_f
+		</pre>
+		
+		<pre>
+SUBROUTINE h5gget_obj_info_idx_f(loc_id, name, idx, &amp; 
+                                 obj_name, obj_type, hdferr)           
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: loc_id        ! File or group identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name        ! Name of the group 
+  INTEGER, INTENT(IN) :: idx                  ! Index of member object 
+  CHARACTER(LEN=*), INTENT(OUT) :: obj_name   ! Name of the object 
+  INTEGER, INTENT(OUT) :: obj_type            ! Object type : 
+                                              !     H5G_LINK_F 
+                                              !     H5G_GROUP_F 
+                                              !     H5G_DATASET_F 
+                                              !     H5G_TYPE_F 
+  INTEGER, INTENT(OUT) :: hdferr              ! Error code 
+                                              ! 0 on success and -1 on failure
+END SUBROUTINE h5gget_obj_info_idx_f
+		</pre>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Glink" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Group-Link">H5Glink</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Glink</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>H5G_link_t</em> <code>link_type</code>,
+        <em>const char *</em><code>current_name</code>,
+        <em>const char *</em><code>new_name</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Creates a link of the specified type from <code>new_name</code> 
+        to <code>current_name</code>.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Glink</code> creates a new name for an object that has some current 
+	  name, possibly one of many names it currently has.  
+        <p>
+        If <code>link_type</code> is <code>H5G_LINK_HARD</code>, then 
+        <code>current_name</code> must specify the name of an 
+        existing object and both
+        names are interpreted relative to <code>loc_id</code>, which is 
+        either a file identifier or a group identifier.
+        <p>
+        If <code>link_type</code> is <code>H5G_LINK_SOFT</code>, then 
+        <code>current_name</code> can be anything and is interpreted at 
+        lookup time relative to the group which contains the final 
+        component of <code>new_name</code>.  For instance, if
+        <code>current_name</code> is <code>./foo</code>,  
+        <code>new_name</code> is <code>./x/y/bar</code>, and a request
+        is made for <code>./x/y/bar</code>, then the actual object looked 
+        up is <code>./x/y/./foo</code>.                            
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+      <tr>
+	    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+        <td valign="top">IN: File or group identifier.</td></tr>
+      <tr>
+	    <td valign="top"><em>H5G_link_t</em> <code>link_type</code></td>
+        <td valign="top">IN: Link type.
+            Possible values are <code>H5G_LINK_HARD</code> and 
+            <code>H5G_LINK_SOFT</code>.</td></tr>
+      <tr>
+	    <td valign="top"><em>const&nbsp;char&nbsp;*</em>&nbsp;<code>current_name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: Name of the existing object if link is a hard link.
+            Can be anything for the soft link.</td></tr>
+      <tr>
+	    <td valign="top"><em>const char *</em> <code>new_name</code></td>
+        <td valign="top">IN: New name for the object.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5glink_f
+    <dd>
+	<pre>
+SUBROUTINE h5glink_f(loc_id, link_type, current_name, new_name, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: loc_id      ! File or group location identifier
+  INTEGER, INTENT(IN)        :: link_type   ! Link type, possible values are:
+                                            !     H5G_LINK_HARD_F
+                                            !     H5G_LINK_SOFT_F
+  CHARACTER(LEN=*), INTENT(IN) :: current_name
+                                            ! Current object name relative
+                                            ! to loc_id 
+  CHARACTER(LEN=*), INTENT(IN) :: new_name  ! New object name 
+  INTEGER, INTENT(OUT) :: hdferr            ! Error code
+
+END SUBROUTINE h5glink_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Glink2" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Group-Link2">H5Glink2</a> 
+  <dt><strong>Signature:</strong>
+    
+  <dd><em>herr_t</em> <code>H5Glink2</code>(
+    <em>hid_t</em> <code>curr_loc_id</code>, <em>const char *</em><code>current_name</code>,
+    <em>H5G_link_t</em> <code>link_type</code>, 
+	<em>hid_t</em> <code>new_loc_id</code>, <em>const char *</em><code>new_name</code> ) 
+  <dt><strong>Purpose:</strong>
+    <dd>Creates a link of the specified type from <code>new_name</code> 
+        to <code>current_name</code>.
+  <dt><strong>Description:</strong>
+    
+  <dd><code>H5Glink2</code> creates a new name for an object that has some current 
+    name, possibly one of many names it currently has. 
+    <p> 
+	  If <code>link_type</code> is <code>H5G_LINK_HARD</code>, then <code>current_name</code> 
+      must specify the name of an existing object. 
+	  In this case, <code>current_name</code> and <code>new_name</code> are interpreted 
+	  relative to <code>curr_loc_id</code> and <code>new_loc_id</code>, respectively, 
+      which are either file or group identifiers.
+    <p>
+        If <code>link_type</code> is <code>H5G_LINK_SOFT</code>, then 
+        <code>current_name</code> can be anything and is interpreted at 
+        lookup time relative to the group which contains the final 
+        component of <code>new_name</code>.  For instance, if
+        <code>current_name</code> is <code>./foo</code>,  
+        <code>new_name</code> is <code>./x/y/bar</code>, and a request
+        is made for <code>./x/y/bar</code>, then the actual object looked 
+        up is <code>./x/y/./foo</code>.                            
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+	  <tr>
+	    <td valign="top"><em>hid_t</em> <code>curr_loc_id</code></td>
+        <td valign="top">IN: The file or group identifier for the original object.</td></tr>
+	  <tr>
+        <td valign="top"><em>const&nbsp;char&nbsp;*</em>&nbsp;<code>current_name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: Name of the existing object if link is a hard link.
+            Can be anything for the soft link.</td></tr>
+	  <tr>
+        <td valign="top"><em>H5G_link_t</em> <code>link_type</code></td>
+        <td valign="top">IN: Link type.
+            Possible values are <code>H5G_LINK_HARD</code> and 
+            <code>H5G_LINK_SOFT</code>.</td></tr>
+	  <tr>
+        <td valign="top"><em>hid_t</em> <code>new_loc_id</code></td>
+        <td valign="top">IN: The file or group identifier for the new link.</td></tr> 
+        <td valign="top"><em>const char *</em> <code>new_name</code></td>
+        <td valign="top">IN: New name for the object.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5glink2_f
+    <dd>
+	<pre>
+SUBROUTINE h5glink2_f(cur_loc_id, cur_name, link_type, new_loc_id, new_name, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: cur_loc_id ! File or group location identifier
+  CHARACTER(LEN=*), INTENT(IN) :: cur_name ! Name of the existing object
+                                           ! is relative to cur_loc_id 
+                                           ! Can be anything for the soft link
+  INTEGER, INTENT(IN) :: link_type         ! Link type, possible values are:
+                                           !     H5G_LINK_HARD_F
+                                           !     H5G_LINK_SOFT_F
+  INTEGER(HID_T), INTENT(IN) :: new_loc_id ! New location identifier
+  CHARACTER(LEN=*), INTENT(IN) :: new_name ! New object name 
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+END SUBROUTINE h5glink2_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Gmove" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Group-Move">H5Gmove</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Gmove</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>const char</em> <code>*src_name</code>,
+        <em>const char</em> <code>*dst_name</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Renames an object within an HDF5 file.  
+  <dt><strong>Description:</strong>
+    <dd><code>H5Gmove</code> renames an object within an HDF5 file.  
+        The original name, <code>src_name</code>, is unlinked from the 
+        group graph and the new name, <code>dst_name</code>, is inserted   
+        as an atomic operation.  Both names are interpreted relative 
+        to <code>loc_id</code>, which is either a file or a group 
+        identifier.
+  <dt><strong>Warning:</strong>
+    <dd>Exercise care in moving groups as it is possible to render data in 
+        a file inaccessible with <code>H5Gmove</code>.  
+        See <a href="Groups.html#H5GUnlinkToCorrupt">The Group Interface</a> 
+        in the <cite>HDF5 User's Guide</cite>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+      <tr>
+	    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+        <td valign="top">IN: File or group identifier.</td></tr>
+      <tr>
+	    <td valign="top"><em>const&nbsp;char</em>&nbsp;<code>*src_name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: Object's original name.</td></tr>
+      <tr>
+	    <td valign="top"><em>const char</em> <code>*dst_name</code></td>
+        <td valign="top">IN: Object's new name.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5gmove_f
+    <dd>
+	<pre>
+SUBROUTINE h5gmove_f(loc_id, name, new_name, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: loc_id     ! File or group identifier
+  CHARACTER(LEN=*), INTENT(IN) :: name     ! Original name of an object 
+  CHARACTER(LEN=*), INTENT(IN) :: new_name ! New name of an object 
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code 
+                                           ! 0 on success and -1 on failure
+END SUBROUTINE h5gmove_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Gmove2" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Group-Move2">H5Gmove2</a> 
+  <dt><strong>Signature:</strong> 
+  <dd><em>herr_t</em> <code>H5Gmove2</code>( <em>hid_t</em> <code>src_loc_id</code>, 
+    <em>const char</em> <code>*src_name</code>, <em>hid_t</em> <code>dst_loc_id</code>, 
+    <em>const char</em> <code>*dst_name</code> ) 
+  <dt><strong>Purpose:</strong> 
+  <dd>Renames an object within an HDF5 file. 
+  <dt><strong>Description:</strong> 
+  <dd><code>H5Gmove2</code> renames an object within an HDF5 file. The original 
+    name, <code>src_name</code>, is unlinked from the group graph and the new 
+    name, <code>dst_name</code>, is inserted as an atomic operation. 
+	<p>
+	</p><code>src_name</code> and <code>dst_name</code> are interpreted relative to 
+    <code>src_name</code> and <code>dst_name</code>, respectively,
+     which are either file or group identifiers. 
+  <dt><strong>Warning:</strong> 
+  <dd>Exercise care in moving groups as it is possible to render data in a file 
+    inaccessible with <code>H5Gmove</code>. See <a href="Groups.html#H5GUnlinkToCorrupt">The 
+    Group Interface</a> in the <cite>HDF5 User's Guide</cite>. 
+  <dt><strong>Parameters:</strong> 
+    <ul><table>
+      <tr>
+	    <td valign="top"><em>hid_t</em> <code>src_loc_id</code></td> 
+        <td valign="top">IN: Original file or group identifier.</td></tr>
+      <tr>
+	    <td valign="top"><em>const&nbsp;char</em>&nbsp;<code>*src_name&nbsp;&nbsp;&nbsp;&nbsp;</code></td> 
+        <td valign="top">IN: Object's original name.</td></tr>
+      <tr>
+	    <td valign="top"><em>hid_t</em> <code>dst_loc_id</code></td> 
+        <td valign="top">IN: Destination file or group identifier.</td></tr>
+      <tr>
+	    <td valign="top"><em>const char</em> <code>*dst_name</code></td> 
+        <td valign="top">IN: Object's new name.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong> 
+  <dd>Returns a non-negative value if successful; otherwise returns a negative 
+    value. 
+  <dt><strong>Fortran90 Interface:</strong> h5gmove2_f
+    <dd>
+	<pre>
+SUBROUTINE h5gmove2_f(src_loc_id, src_name, dst_loc_id, dst_name, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: src_loc_id   ! File or group identifier
+  CHARACTER(LEN=*), INTENT(IN) :: src_name   ! Original name of an object 
+                                             ! relative to src_loc_id 
+  INTEGER(HID_T), INTENT(IN) :: dst_loc_id   ! File or group identifier
+  CHARACTER(LEN=*), INTENT(IN) :: dst_name   ! New name of an object
+                                             ! relative to dst_loc_id 
+  INTEGER, INTENT(OUT) :: hdferr             ! Error code 
+                                             ! 0 on success and -1 on failure
+END SUBROUTINE h5gmove2_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Gopen" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Group-Open">H5Gopen</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Gopen</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>const char *</em><code>name</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Opens an existing group for modification and returns a group 
+        identifier for that group.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Gopen</code> opens an existing group with the specified 
+        name at the specified location, <code>loc_id</code>.
+        <p>
+        The location is identified by a file or group identifier
+        <p>
+        <code>H5Gopen</code> returns a group identifier for the group
+        that was opened.  This group identifier should be released by 
+        calling <code>H5Gclose</code> when it is no longer needed.  
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+      <tr>
+	    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+        <td valign="top">IN: File or group identifier within which group is to be open.</td></tr>
+      <tr>
+	    <td valign="top"><em>const&nbsp;char&nbsp;*</em>&nbsp;<code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: Name of group to open.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a valid group identifier if successful; 
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5gopen_f
+    <dd>
+	<pre>
+SUBROUTINE h5gopen_f(loc_id, name, gr_id, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
+  CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the group to open 
+  INTEGER(HID_T), INTENT(OUT) :: gr_id   ! Group identifier
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5gopen_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Gset_comment" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Group-SetComment">H5Gset_comment</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Gset_comment</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>const char *</em><code>name</code>,
+        <em>const char *</em><code>comment</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets comment for specified object.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Gset_comment</code> sets the comment for the 
+        object specified by <code>loc_id</code> and <code>name</code> 
+        to <code>comment</code>.
+        Any previously existing comment is overwritten.
+        <p>
+        If <code>comment</code> is the empty string or a 
+        null pointer, the comment message is removed from the object. 
+        <p>
+        Comments should be relatively short, null-terminated, 
+        ASCII strings.
+        <p>
+        Comments can be attached to any object that has an object header, 
+        e.g., datasets, groups, named datatypes, and dataspaces, but 
+        not symbolic links.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+      <tr>
+	    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+        <td valign="top">IN: Identifier of the file, group, dataset, 
+            or named datatype.</td></tr>
+      <tr>
+	    <td valign="top"><em>const char *</em><code>name</code></td>
+        <td valign="top">IN: Name of the object whose comment is to be 
+            set or reset.
+            <br>
+            <code>name</code> can be '.' (dot) if <code>loc_id</code> 
+            fully specifies the object for which the comment is to be set.
+            <br>
+            <code>name</code> is ignored if <code>loc_id</code> 
+            is a dataset or named datatype.
+	    </td></tr>
+      <tr>
+	    <td valign="top"><em>const&nbsp;char&nbsp;*</em><code>comment&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: The new comment.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5gset_comment_f
+    <dd>
+	<pre>
+SUBROUTINE h5gset_comment_f(loc_id, name, comment, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: loc_id      ! File, group, dataset, or 
+                                            ! named datatype identifier
+  CHARACTER(LEN=*), INTENT(IN) :: name      ! Name of object 
+  CHARACTER(LEN=*), INTENT(IN) :: comment   ! Comment for the object 
+  INTEGER, INTENT(OUT) :: hdferr            ! Error code 
+                                            ! 0 on success and -1 on failure
+END SUBROUTINE h5gset_comment_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Gunlink" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Group-Unlink">H5Gunlink</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Gunlink</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>const char *</em><code>name</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Removes the link to an object from a group. 
+  <dt><strong>Description:</strong>
+    <dd><code>H5Gunlink</code> removes the object specified by 
+        <code>name</code> from the group graph and decrements the 
+        link count for the object to which <code>name</code> points.
+        This action eliminates any association between <code>name</code>
+        and the object to which <code>name</code> pointed.
+        <p>
+        Object headers keep track of how many hard links refer to an object;
+        when the link count reaches zero, the object can be removed  
+        from the file.  Objects which are open are not removed until all  
+        identifiers to the object are closed.
+        <p>
+        If the link count reaches zero, all file space associated with 
+        the object will be released, i.e., identified in memory as freespace.
+        If the any object identifier is open for the object, the space
+        will not be released until after the object identifier is closed.
+        <p>
+        Note that space identified as freespace is available for re-use 
+        only as long as the file remains open; once a file has been 
+        closed, the HDF5 library loses track of freespace.  See
+        &ldquo;<a href="Performance.html#Freespace">Freespace Management</a>&rdquo;
+        in the <cite>HDF5 User's Guide</cite> for further details.
+  <dt><strong>Warning:</strong>
+    <dd>Exercise care in unlinking groups as it is possible to render data in 
+        a file inaccessible with <code>H5Gunlink</code>.  
+        See <a href="Groups.html#H5GUnlinkToCorrupt">The Group Interface</a> 
+        in the <cite>HDF5 User's Guide</cite>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>      
+	  <tr>
+	    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+        <td valign="top">IN: Identifier of the file or group containing the object.</td></tr>
+      <tr>
+	    <td valign="top"><em>const&nbsp;char&nbsp;*</em>&nbsp;<code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: Name of the object to unlink.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5gunlink_f
+    <dd>
+	<pre>
+SUBROUTINE h5gunlink_f(loc_id, name, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
+  CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the object to unlink 
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5gunlink_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 25 May 2004");
+-->
+</SCRIPT>
+ 
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/RM_H5I.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/RM_H5I.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/RM_H5I.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,721 @@
+<html>
+<head><title>
+HDF5/H5I API Specification
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+<!-- HEADER RIGHT " " -->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>H5I: Identifier Interface</h1>
+</center>
+
+<h2>Identifier API Functions</h2>
+
+These functions provides tools for working with object identifiers and 
+object names.
+
+
+<p>
+<strong>The C Interface:</strong>
+
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li><a href="#Identify-GetName">H5Iget_name</a>
+    <li><a href="#Identify-GetType">H5Iget_type</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Identify-GetFileId">H5Iget_file_id</a>
+    <li><a href="#Identify-GetRef">H5Iget_ref</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Identify-IncRef">H5Iinc_ref</a>
+    <li><a href="#Identify-DecRef">H5Idec_ref</a>
+</ul>
+</td></tr>
+</table>
+<br>
+
+
+<i>Alphabetical Listing</i>
+
+<table border="0">
+  <tr>
+    <td valign="top">
+	<ul>
+            <li><a href="#Identify-DecRef">H5Idec_ref</a>
+            <li><a href="#Identify-GetFileId">H5Iget_file_id</a>
+	</ul>     
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+            <li><a href="#Identify-GetName">H5Iget_name</a>
+            <li><a href="#Identify-GetRef">H5Iget_ref</a>
+	</ul>
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+            <li><a href="#Identify-GetType">H5Iget_type</a>
+            <li><a href="#Identify-IncRef">H5Iinc_ref</a>
+	</ul>
+    </td>
+  </tr>
+</table>
+
+<br>
+<strong>The FORTRAN90 Interfaces:</strong>
+<br>
+In general, each FORTRAN90 subroutine performs exactly the same task 
+as the corresponding C function.  
+<br>
+
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li><a href="#Identify-GetName">h5iget_name_f</a>
+    <li><a href="#Identify-GetType">h5iget_type_f</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Identify-GetFileId">H5Iget_file_id</a>
+    <li><a href="#Identify-GetRef">h5iget_ref_f</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li><a href="#Identify-IncRef">h5iinc_ref_f</a>
+    <li><a href="#Identify-DecRef">h5idec_ref_f</a>
+</ul>
+</td></tr>
+</table>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT " " -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Idec_ref" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Identify-DecRef">H5Idec_ref</a>
+<dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Idec_ref</code>(<em>hid_t</em> <code>obj_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Decrements the reference count for an object.
+<dt><strong>Description:</strong>
+    <dd><code>H5Idec_ref</code> decrements the reference count of the object
+        identified by <code>obj_id</code>.
+
+        <p>
+        The reference count for an object ID is attached to the information
+        about an object in memory and has no relation to the number of links to
+        an object on disk.
+
+        <p>
+        The reference count for a newly created object will be 1.
+        Reference counts for objects may be explicitly modified with this
+        function or with <code>H5Iinc_ref</code>.
+        When an object ID's reference count reaches zero, the object will be
+        closed.
+        Calling an object ID's 'close' function decrements the reference count
+        for the ID which normally closes the object, but
+        if the reference count for the ID has been incremented with
+        <code>H5Iinc_ref</code>, the object will only be closed when the
+        reference count
+        reaches zero with further calls to this function or the
+        object ID's 'close' function.
+
+        <p>
+        If the object ID was created by a collective parallel call (such as
+        <code>H5Dcreate</code>, <code>H5Gopen</code>, etc.), the reference
+        count should be modified by all the processes which have copies of
+        the ID.  Generally this means that group, dataset, attribute, file
+        and named datatype IDs should be modified by all the processes and
+        that all other types of IDs are safe to modify by individual processes.
+
+        <p>
+        This function is of particular value when an application is maintaining
+        multiple copies of an object ID.  The object ID can be incremented when
+        a copy is made.  Each copy of the ID can then be safely closed or
+        decremented and the HDF5 object will be closed when the reference count
+        for that that object drops to zero.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>obj_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: Object identifier whose reference count will be modified.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative reference count of the object ID after
+        decrementing it if successful; otherwise a negative value is returned.
+<dt><strong>Fortran90 Interface:</strong> h5idec_ref_f
+    <dd>
+	<pre>
+SUBROUTINE h5idec_ref_f(obj_id, ref_count, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: obj_id  !Object identifier 
+  INTEGER, INTENT(OUT) :: ref_count     !Reference count of object ID
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success, and -1 on failure
+END SUBROUTINE h5idec_ref_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top" align="left">
+		    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.2</td>
+          <td valign="top">
+		    Function introduced in this release.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">
+		    Fortran subroutine introduced in this 
+			release.</td></tr>
+    </table></ul>
+</dl>
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Iget_file_id" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Identify-GetFileId">H5Iget_file_id</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Iget_file_id</code>(<em>hid_t</em> <code>obj_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves an identifier for the file containing the specified object.
+<dt><strong>Description:</strong>
+    <dd><code>H5Iget_file_id</code> returns the identifier of the file 
+        associated with the object referenced by <code>obj_id</code>.  
+        <p>
+        <code>obj_id</code> can be a file, group, dataset, named datatype, 
+        or attribute identifier.
+        <p>
+        Note that the HDF5 Library permits an application to close a file
+        while objects within the file remain open.
+        If the file containing the object <code>obj_id</code> 
+        is still open, <code>H5Iget_file_id</code> will retrieve the 
+        existing file identifier.
+        If there is no existing file identifier for the file, 
+        i.e., the file has been closed, 
+        <code>H5Iget_file_id</code> will reopen the file and 
+        return a new file identifier.
+        In either case, the file identifier must eventually be released 
+        using <code>H5Fclose</code>.  
+<dt><strong>Parameters:</strong>
+    <ul>
+    <table>
+      <tr>
+        <td valign="top"><em>hid_t</em>&nbsp;<code>obj_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: Identifier of the object whose associated 
+            file identifier will be returned.</td>
+      </tr>
+    </table>
+    </ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a file identifier on success, negative on failure.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>
+    <pre>
+SUBROUTINE h5iget_file_id_f(obj_id, file_id, hdferr) 
+
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)  :: obj_id     ! Object identifier 
+  INTEGER(HID_T), INTENT(OUT) :: file_id    ! File identifier
+  INTEGER, INTENT(OUT) :: hdferr            ! Error code
+
+END SUBROUTINE h5iget_file_id_f
+    </pre>
+
+<!--<dt><strong>Non-C API(s):</strong>
+    <dd>
+        <img src="Graphics/Java.gif">
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top" align="left">
+		    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.3</td>
+          <td valign="top">
+		    Function introduced in this release.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">
+		    Fortran subroutine introduced in this 
+			release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Iget_name" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Identify-GetName">H5Iget_name</a>
+<dt><strong>Signature:</strong>
+    <dd><em>ssize_t</em> <code>H5Iget_name</code>(<em>hid_t</em> <code>obj_id</code>,
+		     <em>char *</em><code>name</code>,
+		     <em>size_t</em> <code>size</code>
+                     )
+<dt><strong>Purpose:</strong> </dt>
+    <dd>Retrieves a name of an object based on the object identifier.
+<dt><strong>Description:</strong>
+    <dd><code>H5Iget_name</code> retrieves a name for the object identified 
+        by <code>obj_id</code>.
+        <p>
+        Up to <code>size</code> characters of the name are returned in 
+        <code>name</code>; additional characters, if any, are not returned
+        to the user application.
+        <p>
+	If the length of the name, which determines the required 
+	value of <code>size</code>, is unknown, a preliminary  
+	<code>H5Iget_name</code> call can be made.  
+	The return value of this call will be the size of the 
+	object name.  
+	That value can then be assigned to <code>size</code> 
+	for a second <code>H5Iget_name</code> call, 
+	which will retrieve the actual name.
+	<p>
+        If the object identified by <code>obj_id</code> is an attribute,
+        as determined via 
+        <a href="#Identify-GetType"><code>H5Iget_type</code></a>,
+        <code>H5Iget_name</code> retrieves the name of the object 
+        to which that attribute is attached. 
+        To retrieve the name of the attribute itself, use
+        <a href="RM_H5A.html#Annot-GetName"><code>H5Aget_name</code></a>.
+        <p>     
+        If there is no name associated with the object identifier
+	or if the name is <code>NULL</code>, <code>H5Iget_name</code>
+        returns <code>0</code> (zero).
+	<p>
+	Note that an object in an HDF5 file may have multiple names,
+	varying according to the path through the HDF5 group 
+	hierarchy used to reach that object.
+<dt><strong>Parameters:</strong> 
+    <ul><table>
+      <tr>
+	    <td valign="top"><em>hid_t</em>&nbsp;<code>obj_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: Identifier of the object.  
+            This identifier can refer to a group, dataset, or named datatype.</td></tr>
+      <tr>
+	    <td valign="top"><em>char *</em><code>name</code></td> 
+        <td valign="top">OUT: A name associated with the identifier.</td></tr>
+      <tr>
+	    <td valign="top"><em>size_t size</em></td> 
+        <td valign="top">IN: The size of the <code>name</code> buffer.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong> 
+    <dd>Returns the length of the name if successful,
+        returning <code>0</code> (zero) if no name is associated with the identifier.
+        Otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5iget_name_f
+    <dd>
+	<pre>
+SUBROUTINE h5iget_name_f(obj_id, buf, buf_size, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)    :: obj_id     ! Object identifier 
+  CHARACTER(LEN=*), INTENT(OUT) :: buf        ! Buffer to hold object name 
+  INTEGER(SIZE_T), INTENT(IN)   :: buf_size   ! Buffer size
+  INTEGER(SIZE_T), INTENT(OUT)  :: name_size  ! Name size
+  INTEGER, INTENT(OUT) :: hdferr              ! Error code
+                                              ! 0 on success, and -1 on failure
+END SUBROUTINE h5iget_name_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Iget_ref" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Identify-GetRef">H5Iget_ref</a>
+<dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Iget_ref</code>(<em>hid_t</em> <code>obj_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the reference count for an object.
+<dt><strong>Description:</strong>
+    <dd><code>H5Iget_ref</code> retrieves the reference count of the object
+        identified by <code>obj_id</code>.
+
+        <p>
+        The reference count for an object ID is attached to the information
+        about an object in memory and has no relation to the number of links to
+        an object on disk.
+
+        <p>
+        This function can also be used to check if an object ID is still valid.
+        A non-negative return value from this function indicates that the ID
+        is still valid.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>obj_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: Object identifier whose reference count will be retrieved.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative current reference count of the object ID
+        if successful; otherwise a negative value is returned.
+<dt><strong>Fortran90 Interface:</strong> h5iget_ref_f
+    <dd>
+	<pre>
+SUBROUTINE h5iget_ref_f(obj_id, ref_count, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: obj_id  !Object identifier 
+  INTEGER, INTENT(OUT) :: ref_count     !Reference count of object ID
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success, and -1 on failure
+END SUBROUTINE h5iget_ref_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top" align="left">
+		    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.2</td>
+          <td valign="top">
+		    Function introduced in this release.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">
+		    Fortran subroutine introduced in this 
+			release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Iget_type" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Identify-GetType">H5Iget_type</a>
+<dt><strong>Signature:</strong>
+    <dd><em>H5I_type_t</em> <code>H5Iget_type</code>(<em>hid_t</em> <code>obj_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the type of an object.
+<dt><strong>Description:</strong>
+    <dd><code>H5Iget_type</code> retrieves the type of the object
+        identified by <code>obj_id</code>.
+        <p>
+        Valid types returned by the function are 
+        <table>
+        <tr><td width=200><code>&nbsp;&nbsp;&nbsp;&nbsp;H5I_FILE</code>
+           </td><td>File</td></tr>
+        <tr><td><code>&nbsp;&nbsp;&nbsp;&nbsp;H5I_GROUP</code>
+           </td><td>Group</td></tr>
+        <tr><td><code>&nbsp;&nbsp;&nbsp;&nbsp;H5I_DATATYPE</code>
+           </td><td>Datatype</td></tr>
+        <tr><td><code>&nbsp;&nbsp;&nbsp;&nbsp;H5I_DATASPACE</code>
+           </td><td>Dataspace</td></tr>
+        <tr><td><code>&nbsp;&nbsp;&nbsp;&nbsp;H5I_DATASET</code>
+           </td><td>Dataset</td></tr>
+        <tr><td><code>&nbsp;&nbsp;&nbsp;&nbsp;H5I_ATTR</code>
+           </td><td>Attribute</td></tr>
+        </table>
+        If no valid type can be determined or the identifier 
+        submitted is invalid, the function returns
+        <table>
+        <tr><td width=200><code>&nbsp;&nbsp;&nbsp;&nbsp;H5I_BADID</code>
+           </td><td>Invalid identifier</td></tr>
+        </table>
+        <p>
+        This function is of particular value in determining the 
+        type of object closing function (<code>H5Dclose</code>, 
+        <code>H5Gclose</code>, etc.) to call after a call to 
+        <code>H5Rdereference</code>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>obj_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: Object identifier whose type is to be determined.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the object type if successful;
+        otherwise <code>H5I_BADID</code>.
+<dt><strong>Fortran90 Interface:</strong> h5iget_type_f
+    <dd>
+	<pre>
+SUBROUTINE h5iget_type_f(obj_id, type, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: obj_id  !Object identifier 
+  INTEGER, INTENT(OUT) :: type          !type of an object. 
+                                        !possible values are:
+                                        !H5I_FILE_F
+                                        !H5I_GROUP_F
+                                        !H5I_DATATYPE_F
+                                        !H5I_DATASPACE_F
+                                        !H5I_DATASET_F
+                                        !H5I_ATTR_F
+                                        !H5I_BADID_F
+  INTEGER, INTENT(OUT) :: hdferr        ! E rror code
+                                        ! 0 on success, and -1 on failure
+END SUBROUTINE h5iget_type_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Iinc_ref" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Identify-IncRef">H5Iinc_ref</a>
+<dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Iinc_ref</code>(<em>hid_t</em> <code>obj_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Increments the reference count for an object.
+<dt><strong>Description:</strong>
+    <dd><code>H5Iinc_ref</code> increments the reference count of the object
+        identified by <code>obj_id</code>.
+
+        <p>
+        The reference count for an object ID is attached to the information
+        about an object in memory and has no relation to the number of links to
+        an object on disk.
+
+        <p>
+        The reference count for a newly created object will be 1.
+        Reference counts for objects may be explicitly modified with this
+        function or with <code>H5Idec_ref</code>.
+        When an object ID's reference count reaches zero, the object will be
+        closed.
+        Calling an object ID's 'close' function decrements the reference count
+        for the ID which normally closes the object, but
+        if the reference count for the ID has been incremented with this
+        function, the object will only be closed when the reference count
+        reaches zero with further calls to <code>H5Idec_ref</code> or the
+        object ID's 'close' function.
+
+        <p>
+        If the object ID was created by a collective parallel call (such as
+        <code>H5Dcreate</code>, <code>H5Gopen</code>, etc.), the reference
+        count should be modified by all the processes which have copies of
+        the ID.  Generally this means that group, dataset, attribute, file
+        and named datatype IDs should be modified by all the processes and
+        that all other types of IDs are safe to modify by individual processes.
+
+        <p>
+        This function is of particular value when an application is maintaining
+        multiple copies of an object ID.  The object ID can be incremented when
+        a copy is made.  Each copy of the ID can then be safely closed or
+        decremented and the HDF5 object will be closed when the reference count
+        for that that object drops to zero.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>obj_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: Object identifier whose reference count will be modified.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative reference count of the object ID after
+        incrementing it if successful; otherwise a negative value is returned.
+<dt><strong>Fortran90 Interface:</strong> h5iinc_ref_f
+    <dd>
+	<pre>
+SUBROUTINE h5iinc_ref_f(obj_id, ref_count, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: obj_id  !Object identifier 
+  INTEGER, INTENT(OUT) :: ref_count     !Reference count of object ID
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success, and -1 on failure
+END SUBROUTINE h5iinc_ref_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top" align="left">
+		    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.2</td>
+          <td valign="top">
+		    Function introduced in this release.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">
+		    Fortran subroutine introduced in this 
+			release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 4 October 2005");
+-->
+</SCRIPT>
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/RM_H5P.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/RM_H5P.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/RM_H5P.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,10837 @@
+<html>
+<head><title>
+HDF5/H5P API Specification
+</title>
+
+</html><!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem --><html></head>
+
+<body bgcolor="#FFFFFF">
+<!-- HEADER RIGHT " " -->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>H5P: Property List Interface</h1>
+</center>
+<h2>Property List API Functions</h2>
+
+These functions manipulate property list objects to allow objects 
+which require many different parameters to be easily manipulated.
+
+
+<p>
+<strong>The C Interfaces:</strong>
+
+<!-- FOR USE WITH PRINT VERSION ----------------------------------------
+<table border="0" width="95%">
+<tr>
+<td valign="top" width="31%">
+
+  <i>General Functions</i>
+  <ul>
+    <li><a href="#Property-Create">H5Pcreate</a>
+    <li><a href="#Property-GetClass">H5Pget_class</a>
+    <li><a href="#Property-Copy">H5Pcopy</a>
+    <li><a href="#Property-Close">H5Pclose</a>
+  </ul>
+	
+  <i>Generic Properties</i> 
+  <ul>
+    <li><a href="#Property-CreateClass">H5Pcreate_class</a> 
+    <li><a href="#Property-CreateList">H5Pcreate_list</a> 
+    <li><a href="#Property-Register">H5Pregister</a> 
+    <li><a href="#Property-Insert">H5Pinsert</a> 
+    <li><a href="#Property-Set">H5Pset</a> 
+    <li><a href="#Property-Exist">H5Pexist</a> 
+    <li><a href="#Property-GetSize">H5Pget_size</a> 
+    <li><a href="#Property-GetNProps">H5Pget_nprops</a> 
+    <li><a href="#Property-GetClassName">H5Pget_class_name</a> 
+    <li><a href="#Property-GetClassParent">H5Pget_class_parent</a> 
+    <li><a href="#Property-IsAClass">H5Pisa_class</a> 
+    <li><a href="#Property-Get">H5Pget</a> 
+    <li><a href="#Property-Equal">H5Pequal</a> 
+    <li><a href="#Property-Iterate">H5Piterate</a> 
+    <li><a href="#Property-CopyProp">H5Pcopy_prop</a> 
+    <li><a href="#Property-Remove">H5Premove</a> 
+    <li><a href="#Property-Unregister">H5Punregister</a> 
+    <li><a href="#Property-CloseList">H5Pclose_list</a> 
+    <li><a href="#Property-CloseClass">H5Pclose_class</a> 
+  </ul>
+</td>
+<td valign="top" width="3%">&nbsp;</td>
+<td valign="top" width="32%">
+  <i>File Access Properties</i>
+  <ul>
+    <li><a href="#Property-SetFcloseDegree">H5Pset_fclose_degree</a>
+    <li><a href="#Property-GetFcloseDegree">H5Pget_fclose_degree</a>
+    <li><a href="#Property-SetFaplCore">H5Pset_fapl_core</a>
+    <li><a href="#Property-GetFaplCore">H5Pget_fapl_core</a>
+    <li><a href="#Property-SetFaplFamily">H5Pset_fapl_family</a>
+    <li><a href="#Property-GetFaplFamily">H5Pget_fapl_family</a>
+    <li><a href="#Property-SetFamilyOffset">H5Pset_family_offset</a>
+    <li><a href="#Property-GetFamilyOffset">H5Pget_family_offset</a>    
+    <li><a href="#Property-SetFaplLog">H5Pset_fapl_log</a>
+    <li><a href="#Property-SetFaplMpio">H5Pset_fapl_mpio</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-GetFaplMpio">H5Pget_fapl_mpio</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-SetFaplMpiPosix">H5Pset_fapl_mpiposix</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-GetFaplMpiPosix">H5Pget_fapl_mpiposix</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-SetFaplMulti">H5Pset_fapl_multi</a>
+    <li><a href="#Property-GetFaplMulti">H5Pget_fapl_multi</a>
+    <li><a href="#Property-SetMultiType">H5Pset_multi_type</a>
+    <li><a href="#Property-GetMultiType">H5Pget_multi_type</a>
+    <li><a href="#Property-SetFaplSplit">H5Pset_fapl_split</a>
+    <li><a href="#Property-SetFaplSec2">H5Pset_fapl_sec2</a>
+    <li><a href="#Property-SetFaplStdio">H5Pset_fapl_stdio</a>
+    <li><a href="#Property-SetFaplStream">H5Pset_fapl_stream</a>
+    <li><a href="#Property-GetFaplStream">H5Pget_fapl_stream</a>
+<!-- FOR USE WITH PRINT VERSION ---------------------------------------->
+<!--<li><a href="#Property-SetDriver">H5Pset_driver</a>                              -->
+<!-- FOR USE WITH PRINT VERSION ----------------------------------------
+    <li><a href="#Property-GetDriver">H5Pget_driver</a>
+<!-- FOR USE WITH PRINT VERSION ---------------------------------------->
+<!--<li><a href="#Property-GetDriverInfo">H5Pget_driver_info</a>                     -->
+<!-- FOR USE WITH PRINT VERSION ----------------------------------------
+    <li><a href="#Property-SetMetaBlockSize">H5Pset_meta_block_size</a>
+    <li><a href="#Property-GetMetaBlockSize">H5Pget_meta_block_size</a>
+    <li><a href="#Property-SetSieveBufSize">H5Pset_sieve_buf_size</a>
+    <li><a href="#Property-GetSieveBufSize">H5Pget_sieve_buf_size</a>
+    <li><a href="#Property-SetAlignment">H5Pset_alignment</a>
+    <li><a href="#Property-GetAlignment">H5Pget_alignment</a>
+    <li><a href="#Property-SetCache">H5Pset_cache</a>
+    <li><a href="#Property-GetCache">H5Pget_cache</a>
+    <li><a href="#Property-SetGCReferences">H5Pset_gc_references</a>
+    <li><a href="#Property-GetGCReferences">H5Pget_gc_references</a>
+    <li><a href="#Property-SetFaplGass">H5Pset_fapl_gass</a>
+    <li><a href="#Property-GetFaplGass">H5Pget_fapl_gass</a>
+    <li><a href="#Property-SetFaplSrb">H5Pset_fapl_srb</a>
+    <li><a href="#Property-GetFaplSrb">H5Pget_fapl_srb</a>
+<!-- FOR USE WITH PRINT VERSION ---------------------------------------->
+    <!--
+    <li><a href="#Property-xxx">xxx</a>
+    <li><a href="#Property-xxx">xxx</a>&nbsp;&nbsp;&nbsp;||
+    -->
+<!-- FOR USE WITH PRINT VERSION ----------------------------------------
+  </ul>
+</td>
+<td valign="top" width="3%">&nbsp;</td>
+<td valign="top" width="31%">
+  <i>File Creation Properties</i>
+  <ul>
+    <li><a href="#Property-GetVersion">H5Pget_version</a>
+    <li><a href="#Property-SetUserblock">H5Pset_userblock</a>
+    <li><a href="#Property-GetUserblock">H5Pget_userblock</a>
+    <li><a href="#Property-SetSizes">H5Pset_sizes</a>
+    <li><a href="#Property-GetSizes">H5Pget_sizes</a>
+    <li><a href="#Property-SetSymK">H5Pset_sym_k</a>
+    <li><a href="#Property-GetSymK">H5Pget_sym_k</a>
+    <li><a href="#Property-SetIstoreK">H5Pset_istore_k</a>
+    <li><a href="#Property-GetIstoreK">H5Pget_istore_k</a>
+  </ul>
+	<br><br><br><br><br><br>
+&nbsp;&nbsp;&nbsp;|| <i>Indicates functions<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;available only in the<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parallel HDF5 library.</i>
+	<br><br><br><br><br><br><br><br><br><br><br><br>
+&nbsp;&nbsp;&nbsp;<i>(Function listing<br>
+&nbsp;&nbsp;&nbsp;continues on next page.)</i></pre>
+</td>
+</tr>
+</table>
+<!-- FOR USE WITH PRINT VERSION ---------------------------------------->
+
+<!-- NEW PAGE -->
+
+<!-- FOR USE WITH PRINT VERSION ----------------------------------------
+<table border="0" width="95%">
+<tr>
+<td valign="top" width="31%">
+  <i>Dataset Creation Properties</i>
+  <ul>
+    <li><a href="#Property-SetLayout">H5Pset_layout</a>
+    <li><a href="#Property-GetLayout">H5Pget_layout</a>
+    <li><a href="#Property-SetChunk">H5Pset_chunk</a>
+    <li><a href="#Property-GetChunk">H5Pget_chunk</a>
+    <li><a href="#Property-SetDeflate">H5Pset_deflate</a>
+<!-- FOR USE WITH PRINT VERSION ---------------------------------------->
+<!--
+    <li><a href="#Property-GetDeflate">H5Pget_deflate</a>
+    <li><a href="#Property-SetCompression">H5Pset_compression</a>
+    <li><a href="#Property-GetCompression">H5Pget_compression</a>
+-->
+<!-- FOR USE WITH PRINT VERSION ----------------------------------------
+    <li><a href="#Property-SetFillValue">H5Pset_fill_value</a>
+    <li><a href="#Property-GetFillValue">H5Pget_fill_value</a>
+    <li><a href="#Property-FillValueDefined">H5Pfill_value_defined</a>
+    <li><a href="#Property-SetFillTime">H5Pset_fill_time</a>
+    <li><a href="#Property-GetFillTime">H5Pget_fill_time</a>
+    <li><a href="#Property-SetAllocTime">H5Pset_alloc_time</a>
+    <li><a href="#Property-GetAllocTime">H5Pget_alloc_time</a>
+    <li><a href="#Property-SetFilter">H5Pset_filter</a>
+    <li><a href="#Property-AllFiltersAvail">H5Pall_filters_avail</a>
+    <li><a href="#Property-GetNFilters">H5Pget_nfilters</a>
+    <li><a href="#Property-GetFilter">H5Pget_filter</a>
+    <li><a href="#Property-GetFilterById">H5Pget_filter_by_id</a>
+    <li><a href="#Property-ModifyFilter">H5Pmodify_filter</a>
+    <li><a href="#Property-RemoveFilter">H5Premove_filter</a>
+    <li><a href="#Property-SetFletcher32">H5Pset_fletcher32</a>
+    <li><a href="#Property-SetShuffle">H5Pset_shuffle</a>
+    <li><a href="#Property-SetSzip">H5Pset_szip</a>
+    <li><a href="#Property-SetExternal">H5Pset_external</a>
+    <li><a href="#Property-GetExternalCount">H5Pget_external_count</a>
+    <li><a href="#Property-GetExternal">H5Pget_external</a>
+  </ul>
+</td>
+<td valign="top" width="3%">&nbsp;</td>
+<td valign="top" width="32%">
+  <i>Dataset Access, Memory, and <br> Transfer Properties</i>
+  <ul>
+    <li><a href="#Property-SetBuffer">H5Pset_buffer</a>
+    <li><a href="#Property-GetBuffer">H5Pget_buffer</a>
+    <li><a href="#Property-SetPreserve">H5Pset_preserve</a>
+    <li><a href="#Property-GetPreserve">H5Pget_preserve</a>
+    <li><a href="#Property-SetEdcCheck">H5Pset_edc_check</a>
+    <li><a href="#Property-GetEdcCheck">H5Pget_edc_check</a>
+    <li><a href="#Property-SetFilterCallback">H5Pset_filter_callback</a>
+    <li><a href="#Property-SetHyperCache">H5Pset_hyper_cache</a>&nbsp;*
+    <li><a href="#Property-GetHyperCache">H5Pget_hyper_cache</a>&nbsp;*
+    <li><a href="#Property-SetHyperVectorSize">H5Pset_hyper_vector_size</a>
+    <li><a href="#Property-GetHyperVectorSize">H5Pget_hyper_vector_size</a>
+    <li><a href="#Property-SetBTreeRatios">H5Pset_btree_ratios</a>
+    <li><a href="#Property-GetBTreeRatios">H5Pget_btree_ratios</a>
+    <li><a href="#Property-SetVLMemManager">H5Pset_vlen_mem_manager</a>
+    <li><a href="#Property-GetVLMemManager">H5Pget_vlen_mem_manager</a>
+    <li><a href="#Property-SetDxplMpio">H5Pset_dxpl_mpio</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-GetDxplMpio">H5Pget_dxpl_mpio</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-SetDxplMulti">H5Pset_dxpl_multi</a>
+    <li><a href="#Property-GetDxplMulti">H5Pget_dxpl_multi</a>
+    <li><a href="#Property-SetMultiType">H5Pset_multi_type</a> 
+    <li><a href="#Property-GetMultiType">H5Pget_multi_type</a>
+        <br>&nbsp;
+    <li><a href="#Property-SetSmallData">H5Pset_small_data_block_size</a>
+    <li><a href="#Property-GetSmallData">H5Pget_small_data_block_size</a>
+  </ul>
+</td>
+<td valign="top" width="3%">&nbsp;</td>
+<td valign="top" width="31%">
+<br>
+&nbsp;&nbsp;&nbsp;|| <i>Indicates functions<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;available only in the<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parallel HDF5 library.</i>
+</td>
+</tr>
+</table>
+<!-- FOR USE WITH PRINT VERSION ---------------------------------------->
+
+<br><br>
+
+<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
+<table border=0>
+<tr><td valign=top>
+
+    <i>General Property List <br> Operations</i>
+    <ul>
+    <li><a href="#Property-Create">H5Pcreate</a>
+    <li><a href="#Property-GetClass">H5Pget_class</a>
+    <li><a href="#Property-Copy">H5Pcopy</a>
+    <li><a href="#Property-Close">H5Pclose</a>
+    </ul>
+
+    <p><i>Generic Properties</i> 
+    <ul>
+    <li><a href="#Property-CreateClass">H5Pcreate_class</a> 
+    <li><a href="#Property-CreateList">H5Pcreate_list</a> 
+    <li><a href="#Property-Register">H5Pregister</a> 
+    <li><a href="#Property-Insert">H5Pinsert</a> 
+    <li><a href="#Property-Set">H5Pset</a> 
+    <li><a href="#Property-Exist">H5Pexist</a> 
+    <li><a href="#Property-GetSize">H5Pget_size</a> 
+    <li><a href="#Property-GetNProps">H5Pget_nprops</a> 
+    <li><a href="#Property-GetClassName">H5Pget_class_name</a> 
+    <li><a href="#Property-GetClassParent">H5Pget_class_parent</a> 
+    <li><a href="#Property-IsAClass">H5Pisa_class</a> 
+    <li><a href="#Property-Get">H5Pget</a> 
+    <li><a href="#Property-Equal">H5Pequal</a> 
+    <li><a href="#Property-Iterate">H5Piterate</a> 
+    <li><a href="#Property-CopyProp">H5Pcopy_prop</a> 
+    <li><a href="#Property-Remove">H5Premove</a> 
+    <li><a href="#Property-Unregister">H5Punregister</a> 
+    <li><a href="#Property-CloseList">H5Pclose_list</a> 
+    <li><a href="#Property-CloseClass">H5Pclose_class</a> 
+    </ul>
+
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>
+&nbsp;&nbsp;&nbsp;&nbsp;||&nbsp;&nbsp;
+  <i>Indicates functions <br> 
+  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+  available only in <br>
+  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+  the parallel HDF5</i>
+  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+  library.</i>
+
+
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+
+    <p><i>File Creation Properties</i>
+    <ul>
+    <li><a href="#Property-GetVersion">H5Pget_version</a>
+    <li><a href="#Property-SetUserblock">H5Pset_userblock</a>
+    <li><a href="#Property-GetUserblock">H5Pget_userblock</a>
+    <li><a href="#Property-SetSizes">H5Pset_sizes</a>
+    <li><a href="#Property-GetSizes">H5Pget_sizes</a>
+    <li><a href="#Property-SetSymK">H5Pset_sym_k</a>
+    <li><a href="#Property-GetSymK">H5Pget_sym_k</a>
+    <li><a href="#Property-SetIstoreK">H5Pset_istore_k</a>
+    <li><a href="#Property-GetIstoreK">H5Pget_istore_k</a>
+    </ul>
+
+    <p></p><i>File Access Properties</i>
+    <ul>
+    <li><a href="#Property-SetFcloseDegree">H5Pset_fclose_degree</a>
+    <li><a href="#Property-GetFcloseDegree">H5Pget_fclose_degree</a>
+    <li><a href="#Property-SetFaplCore">H5Pset_fapl_core</a>
+    <li><a href="#Property-GetFaplCore">H5Pget_fapl_core</a>
+    <li><a href="#Property-SetFaplFamily">H5Pset_fapl_family</a>
+    <li><a href="#Property-GetFaplFamily">H5Pget_fapl_family</a>
+    <li><a href="#Property-SetFamilyOffset">H5Pset_family_offset</a>
+    <li><a href="#Property-GetFamilyOffset">H5Pget_family_offset</a>    
+    <li><a href="#Property-SetFaplLog">H5Pset_fapl_log</a>
+    <li><a href="#Property-SetFaplMpio">H5Pset_fapl_mpio</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-GetFaplMpio">H5Pget_fapl_mpio</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-SetFaplMpiPosix">H5Pset_fapl_mpiposix</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-GetFaplMpiPosix">H5Pget_fapl_mpiposix</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-SetFaplMulti">H5Pset_fapl_multi</a>
+    <li><a href="#Property-GetFaplMulti">H5Pget_fapl_multi</a>
+    <li><a href="#Property-SetMultiType">H5Pset_multi_type</a>
+    <li><a href="#Property-GetMultiType">H5Pget_multi_type</a>
+    <li><a href="#Property-SetFaplSplit">H5Pset_fapl_split</a>
+    <li><a href="#Property-SetFaplSec2">H5Pset_fapl_sec2</a>
+    <li><a href="#Property-SetFaplStdio">H5Pset_fapl_stdio</a>
+    <li><a href="#Property-SetFaplStream">H5Pset_fapl_stream</a>
+    <li><a href="#Property-GetFaplStream">H5Pget_fapl_stream</a>
+<!--<li><a href="#Property-SetDriver">H5Pset_driver</a>                              -->
+<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
+    <li><a href="#Property-GetDriver">H5Pget_driver</a>
+<!--<li><a href="#Property-GetDriverInfo">H5Pget_driver_info</a>                     -->
+<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
+    <li><a href="#Property-SetMetaBlockSize">H5Pset_meta_block_size</a>
+    <li><a href="#Property-GetMetaBlockSize">H5Pget_meta_block_size</a>
+    <li><a href="#Property-SetSieveBufSize">H5Pset_sieve_buf_size</a>
+    <li><a href="#Property-GetSieveBufSize">H5Pget_sieve_buf_size</a>
+    <li><a href="#Property-SetAlignment">H5Pset_alignment</a>
+    <li><a href="#Property-GetAlignment">H5Pget_alignment</a>
+    <li><a href="#Property-SetCache">H5Pset_cache</a>
+    <li><a href="#Property-GetCache">H5Pget_cache</a>
+    <li><a href="#Property-SetGCReferences">H5Pset_gc_references</a>
+    <li><a href="#Property-GetGCReferences">H5Pget_gc_references</a>
+    <li><a href="#Property-SetFaplGass">H5Pset_fapl_gass</a>
+    <li><a href="#Property-GetFaplGass">H5Pget_fapl_gass</a>
+    <li><a href="#Property-SetFaplSrb">H5Pset_fapl_srb</a>
+    <li><a href="#Property-GetFaplSrb">H5Pget_fapl_srb</a>
+    <!--
+    <li><a href="#Property-xxx">xxx</a>
+    <li><a href="#Property-xxx">xxx</a>&nbsp;&nbsp;&nbsp;||
+    -->
+<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
+    </ul>
+
+
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+
+    <i>Dataset Creation Properties</i>
+    <ul>
+    <li><a href="#Property-SetLayout">H5Pset_layout</a>
+    <li><a href="#Property-GetLayout">H5Pget_layout</a>
+    <li><a href="#Property-SetChunk">H5Pset_chunk</a>
+    <li><a href="#Property-GetChunk">H5Pget_chunk</a>
+    <li><a href="#Property-SetDeflate">H5Pset_deflate</a>
+<!--
+    <li><a href="#Property-GetDeflate">H5Pget_deflate</a>
+    <li><a href="#Property-SetCompression">H5Pset_compression</a>
+    <li><a href="#Property-GetCompression">H5Pget_compression</a>
+-->
+<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
+    <li><a href="#Property-SetFillValue">H5Pset_fill_value</a>
+    <li><a href="#Property-GetFillValue">H5Pget_fill_value</a>
+    <li><a href="#Property-FillValueDefined">H5Pfill_value_defined</a>
+    <li><a href="#Property-SetFillTime">H5Pset_fill_time</a>
+    <li><a href="#Property-GetFillTime">H5Pget_fill_time</a>
+    <li><a href="#Property-SetAllocTime">H5Pset_alloc_time</a>
+    <li><a href="#Property-GetAllocTime">H5Pget_alloc_time</a>
+    <li><a href="#Property-SetFilter">H5Pset_filter</a>
+    <li><a href="#Property-AllFiltersAvail">H5Pall_filters_avail</a>
+    <li><a href="#Property-GetNFilters">H5Pget_nfilters</a>
+    <li><a href="#Property-GetFilter">H5Pget_filter</a>
+    <li><a href="#Property-GetFilterById">H5Pget_filter_by_id</a>
+    <li><a href="#Property-ModifyFilter">H5Pmodify_filter</a>
+    <li><a href="#Property-RemoveFilter">H5Premove_filter</a>
+    <li><a href="#Property-SetFletcher32">H5Pset_fletcher32</a>
+    <li><a href="#Property-SetShuffle">H5Pset_shuffle</a>
+    <li><a href="#Property-SetSzip">H5Pset_szip</a>
+    <li><a href="#Property-SetExternal">H5Pset_external</a>
+    <li><a href="#Property-GetExternalCount">H5Pget_external_count</a>
+    <li><a href="#Property-GetExternal">H5Pget_external</a>
+    </ul>
+
+    <p><i>Dataset Access, Memory, and <br> Transfer Properties</i>
+    <ul>
+    <li><a href="#Property-SetBuffer">H5Pset_buffer</a>
+    <li><a href="#Property-GetBuffer">H5Pget_buffer</a>
+    <li><a href="#Property-SetPreserve">H5Pset_preserve</a>
+    <li><a href="#Property-GetPreserve">H5Pget_preserve</a>
+    <li><a href="#Property-SetEdcCheck">H5Pset_edc_check</a>
+    <li><a href="#Property-GetEdcCheck">H5Pget_edc_check</a>
+    <li><a href="#Property-SetFilterCallback">H5Pset_filter_callback</a>
+    <li><a href="#Property-SetHyperCache">H5Pset_hyper_cache</a> *
+    <li><a href="#Property-GetHyperCache">H5Pget_hyper_cache</a> *
+    <li><a href="#Property-SetHyperVectorSize">H5Pset_hyper_vector_size</a>
+    <li><a href="#Property-GetHyperVectorSize">H5Pget_hyper_vector_size</a>
+    <li><a href="#Property-SetBTreeRatios">H5Pset_btree_ratios</a>
+    <li><a href="#Property-GetBTreeRatios">H5Pget_btree_ratios</a>
+    <li><a href="#Property-SetVLMemManager">H5Pset_vlen_mem_manager</a>
+    <li><a href="#Property-GetVLMemManager">H5Pget_vlen_mem_manager</a>
+    <li><a href="#Property-SetDxplMpio">H5Pset_dxpl_mpio</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-GetDxplMpio">H5Pget_dxpl_mpio</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-SetDxplMulti">H5Pset_dxpl_multi</a>
+    <li><a href="#Property-GetDxplMulti">H5Pget_dxpl_multi</a>
+    <li><a href="#Property-SetMultiType">H5Pset_multi_type</a> 
+    <li><a href="#Property-GetMultiType">H5Pget_multi_type</a>
+        <br>&nbsp;
+    <li><a href="#Property-SetSmallData">H5Pset_small_data_block_size</a>
+    <li><a href="#Property-GetSmallData">H5Pget_small_data_block_size</a>
+    </ul>
+
+</td></tr>
+
+<!--
+<tr><td colspan=5 align=right>
+<br>
+||&nbsp;&nbsp;&nbsp;<i>Available only in the parallel HDF5 library.</i>
+</td></tr>
+-->
+<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
+</table>
+<!-- FOR USE WITH ELECTRONIC VERSION ----------------------------------->
+
+<br>
+
+* Functions labeled with an asterisk (*) are provided only for 
+backwards compatibility with HDF5 Releases 1.4.<i>x</i>.  
+See further notes in the description of each function.
+<p>
+
+<!-- NEW PAGE -->
+<i>Alphabetical Listing</i>
+<table border="0">
+  <tr>
+    <td valign="top">
+	<ul>
+      <li><a href="#Property-AllFiltersAvail">H5Pall_filters_avail</a>
+      <li><a href="#Property-Close">H5Pclose</a>
+      <li><a href="#Property-CloseClass">H5Pclose_class</a>
+      <li><a href="#Property-CloseList">H5Pclose_list</a>
+      <li><a href="#Property-Copy">H5Pcopy</a>
+      <li><a href="#Property-CopyProp">H5Pcopy_prop</a>
+      <li><a href="#Property-Create">H5Pcreate</a>
+      <li><a href="#Property-CreateClass">H5Pcreate_class</a>
+      <li><a href="#Property-CreateList">H5Pcreate_list</a>
+      <li><a href="#Property-Equal">H5Pequal</a>
+      <li><a href="#Property-Exist">H5Pexist</a>
+      <li><a href="#Property-FillValueDefined">H5Pfill_value_defined</a>
+      <li><a href="#Property-Get">H5Pget</a>
+      <li><a href="#Property-GetAlignment">H5Pget_alignment</a>
+      <li><a href="#Property-GetAllocTime">H5Pget_alloc_time</a>
+      <li><a href="#Property-GetBTreeRatios">H5Pget_btree_ratios</a>
+      <li><a href="#Property-GetBuffer">H5Pget_buffer</a>
+      <li><a href="#Property-GetCache">H5Pget_cache</a>
+      <li><a href="#Property-GetChunk">H5Pget_chunk</a>
+      <li><a href="#Property-GetClass">H5Pget_class</a>
+      <li><a href="#Property-GetClassName">H5Pget_class_name</a>
+      <li><a href="#Property-GetClassParent">H5Pget_class_parent</a>
+      <li><a href="#Property-GetDriver">H5Pget_driver</a>
+  <!--<li><a href="#Property-GetDriverInfo">H5Pget_driver_info</a>                   -->
+      <li><a href="#Property-GetDxplMpio">H5Pget_dxpl_mpio</a>&nbsp;&nbsp;&nbsp;||
+      <li><a href="#Property-GetDxplMulti">H5Pget_dxpl_multi</a>
+      <li><a href="#Property-GetEdcCheck">H5Pget_edc_check</a>
+      <li><a href="#Property-GetExternal">H5Pget_external</a>
+      <li><a href="#Property-GetExternalCount">H5Pget_external_count</a>
+      <li><a href="#Property-GetFamilyOffset">H5Pget_family_offset</a>
+      <li><a href="#Property-GetFaplCore">H5Pget_fapl_core</a>
+      <li><a href="#Property-GetFaplFamily">H5Pget_fapl_family</a>
+      <li><a href="#Property-GetFaplGass">H5Pget_fapl_gass</a>
+      <li><a href="#Property-GetFaplMpio">H5Pget_fapl_mpio</a>&nbsp;&nbsp;&nbsp;||
+      <li><a href="#Property-GetFaplMpiPosix">H5Pget_fapl_mpiposix</a>&nbsp;&nbsp;&nbsp;||
+      <li><a href="#Property-GetFaplMulti">H5Pget_fapl_multi</a>
+      <li><a href="#Property-GetFaplSrb">H5Pget_fapl_srb</a>
+      <li><a href="#Property-GetFaplStream">H5Pget_fapl_stream</a>
+      <li><a href="#Property-GetFcloseDegree">H5Pget_fclose_degree</a>
+      <li><a href="#Property-GetFillTime">H5Pget_fill_time</a>
+	</ul>
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>      
+      <li><a href="#Property-GetFillValue">H5Pget_fill_value</a>
+      <li><a href="#Property-GetFilter">H5Pget_filter</a>
+      <li><a href="#Property-GetFilterById">H5Pget_filter_by_id</a>
+      <li><a href="#Property-GetGCReferences">H5Pget_gc_references</a>
+      <li><a href="#Property-GetHyperCache">H5Pget_hyper_cache</a> *
+      <li><a href="#Property-GetHyperVectorSize">H5Pget_hyper_vector_size</a>
+      <li><a href="#Property-GetIstoreK">H5Pget_istore_k</a>
+      <li><a href="#Property-GetLayout">H5Pget_layout</a>
+      <li><a href="#Property-GetMetaBlockSize">H5Pget_meta_block_size</a>
+      <li><a href="#Property-GetMultiType">H5Pget_multi_type</a>
+      <li><a href="#Property-GetNFilters">H5Pget_nfilters</a>
+      <li><a href="#Property-GetNProps">H5Pget_nprops</a>
+      <li><a href="#Property-GetPreserve">H5Pget_preserve</a>
+      <li><a href="#Property-GetSieveBufSize">H5Pget_sieve_buf_size</a>
+      <li><a href="#Property-GetSize">H5Pget_size</a>
+      <li><a href="#Property-GetSizes">H5Pget_sizes</a>
+      <li><a href="#Property-GetSmallData">H5Pget_small_data_block_size</a>
+      <li><a href="#Property-GetSymK">H5Pget_sym_k</a>
+      <li><a href="#Property-GetUserblock">H5Pget_userblock</a>
+      <li><a href="#Property-GetVersion">H5Pget_version</a>
+      <li><a href="#Property-GetVLMemManager">H5Pget_vlen_mem_manager</a>
+      <li><a href="#Property-Insert">H5Pinsert</a>
+      <li><a href="#Property-IsAClass">H5Pisa_class</a>
+      <li><a href="#Property-Iterate">H5Piterate</a>
+      <li><a href="#Property-ModifyFilter">H5Pmodify_filter</a>
+      <li><a href="#Property-Register">H5Pregister</a>
+      <li><a href="#Property-Remove">H5Premove</a>
+      <li><a href="#Property-RemoveFilter">H5Premove_filter</a>
+      <li><a href="#Property-Set">H5Pset</a>
+      <li><a href="#Property-SetAlignment">H5Pset_alignment</a>
+      <li><a href="#Property-SetAllocTime">H5Pset_alloc_time</a>
+      <li><a href="#Property-SetBTreeRatios">H5Pset_btree_ratios</a>
+      <li><a href="#Property-SetBuffer">H5Pset_buffer</a>
+      <li><a href="#Property-SetCache">H5Pset_cache</a>
+      <li><a href="#Property-SetChunk">H5Pset_chunk</a>
+      <li><a href="#Property-SetDeflate">H5Pset_deflate</a>
+<!--  <li><a href="#Property-SetDriver">H5Pset_driver</a>                              -->
+      <li><a href="#Property-SetDxplMpio">H5Pset_dxpl_mpio</a>&nbsp;&nbsp;&nbsp;||
+      <li><a href="#Property-SetDxplMulti">H5Pset_dxpl_multi</a>
+      <li><a href="#Property-SetEdcCheck">H5Pset_edc_check</a>
+      <li><a href="#Property-SetExternal">H5Pset_external</a>
+	</ul>
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#Property-SetFamilyOffset">H5Pset_family_offset</a>
+      <li><a href="#Property-SetFaplCore">H5Pset_fapl_core</a>
+      <li><a href="#Property-SetFaplFamily">H5Pset_fapl_family</a>
+      <li><a href="#Property-SetFaplGass">H5Pset_fapl_gass</a>
+      <li><a href="#Property-SetFaplLog">H5Pset_fapl_log</a>
+      <li><a href="#Property-SetFaplMpio">H5Pset_fapl_mpio</a>&nbsp;&nbsp;&nbsp;||
+      <li><a href="#Property-SetFaplMpiPosix">H5Pset_fapl_mpiposix</a>&nbsp;&nbsp;&nbsp;||
+      <li><a href="#Property-SetFaplMulti">H5Pset_fapl_multi</a>
+      <li><a href="#Property-SetFaplSec2">H5Pset_fapl_sec2</a>
+      <li><a href="#Property-SetFaplSplit">H5Pset_fapl_split</a>
+      <li><a href="#Property-SetFaplSrb">H5Pset_fapl_srb</a>
+      <li><a href="#Property-SetFaplStdio">H5Pset_fapl_stdio</a>
+      <li><a href="#Property-SetFaplStream">H5Pset_fapl_stream</a>
+      <li><a href="#Property-SetFcloseDegree">H5Pset_fclose_degree</a>
+      <li><a href="#Property-SetFillTime">H5Pset_fill_time</a>
+      <li><a href="#Property-SetFillValue">H5Pset_fill_value</a>
+      <li><a href="#Property-SetFilter">H5Pset_filter</a>
+      <li><a href="#Property-SetFilterCallback">H5Pset_filter_callback</a>
+      <li><a href="#Property-SetFletcher32">H5Pset_fletcher32</a>
+      <li><a href="#Property-SetGCReferences">H5Pset_gc_references</a>
+      <li><a href="#Property-SetHyperCache">H5Pset_hyper_cache</a> *
+      <li><a href="#Property-SetHyperVectorSize">H5Pset_hyper_vector_size</a>
+      <li><a href="#Property-SetIstoreK">H5Pset_istore_k</a>
+      <li><a href="#Property-SetLayout">H5Pset_layout</a>
+      <li><a href="#Property-SetMetaBlockSize">H5Pset_meta_block_size</a>
+      <li><a href="#Property-SetMultiType">H5Pset_multi_type</a>
+      <li><a href="#Property-SetPreserve">H5Pset_preserve</a>
+      <li><a href="#Property-SetShuffle">H5Pset_shuffle</a>
+      <li><a href="#Property-SetSieveBufSize">H5Pset_sieve_buf_size</a>
+      <li><a href="#Property-SetSizes">H5Pset_sizes</a>
+      <li><a href="#Property-SetSmallData">H5Pset_small_data_block_size</a>
+      <li><a href="#Property-SetSymK">H5Pset_sym_k</a>
+      <li><a href="#Property-SetSzip">H5Pset_szip</a>
+      <li><a href="#Property-SetUserblock">H5Pset_userblock</a>
+      <li><a href="#Property-SetVLMemManager">H5Pset_vlen_mem_manager</a>
+      <li><a href="#Property-Unregister">H5Punregister</a>
+	</ul>
+      <br><br>
+      ||&nbsp;&nbsp;<i>Available only in the parallel HDF5 library.</i>
+    </td>
+  </tr>
+</table>
+
+<!-- NEW PAGE -->
+<br>
+<strong>The FORTRAN90 Interfaces:</strong>
+
+<br>
+In general, each FORTRAN90 subroutine performs exactly the same task 
+as the corresponding C function.  
+<br>
+
+<table border=0>
+<tr><td valign=top>
+
+    <i>General Property List Operations</i>
+    <ul>
+    <li><a href="#Property-Create">h5pcreate_f</a>
+    <li><a href="#Property-GetClass">h5pget_class_f</a>
+    <li><a href="#Property-Copy">h5pcopy_f</a>
+    <li><a href="#Property-Close">h5pclose_f</a>
+    </ul>
+
+
+    <p><i>Generic Properties</i> 
+    <ul>
+    <li><a href="#Property-CreateClass">h5pcreate_class_f</a>
+<!--<li><a href="#Property-CreateList">H5Pcreate_list</a>           -->
+    <li><a href="#Property-Register">h5pregister_f</a>
+    <li><a href="#Property-Insert">h5pinsert_f</a>
+    <li><a href="#Property-Set">h5pset_f</a>
+    <li><a href="#Property-Exist">h5pexist_f</a>
+    <li><a href="#Property-GetSize">h5pget_size_f</a>
+    <li><a href="#Property-GetNProps">h5pget_nprops_f</a>
+    <li><a href="#Property-GetClassName">h5pget_class_name_f</a>
+    <li><a href="#Property-GetClassParent">h5pget_class_parent_f</a>
+    <li><a href="#Property-IsAClass">h5pisa_class_f</a>
+    <li><a href="#Property-Get">h5pget_f</a>
+    <li><a href="#Property-Equal">h5pequal_f</a>
+<!--<li><a href="#Property-Iterate">h5piterate_f</a>           -->
+    <li><a href="#Property-CopyProp">h5pcopy_prop_f</a>
+    <li><a href="#Property-Remove">h5premove_f</a>
+    <li><a href="#Property-Unregister">h5punregister_f</a>
+    <li><a href="#Property-CloseList">h5pclose_list_f</a>
+    <li><a href="#Property-CloseClass">h5pclose_class_f</a>
+    </ul>
+
+    <p><i>File Creation Properties</i>
+    <ul>
+    <li><a href="#Property-GetVersion">h5pget_version_f</a>
+    <li><a href="#Property-SetUserblock">h5pset_userblock_f</a>
+    <li><a href="#Property-GetUserblock">h5pget_userblock_f</a>
+    <li><a href="#Property-SetSizes">h5pset_sizes_f</a>
+    <li><a href="#Property-GetSizes">h5pget_sizes_f</a>
+    <li><a href="#Property-SetSymK">h5pset_sym_k_f</a>
+    <li><a href="#Property-GetSymK">h5pget_sym_k_f</a>
+    <li><a href="#Property-SetIstoreK">h5pset_istore_k_f</a>
+    <li><a href="#Property-GetIstoreK">h5pget_istore_k_f</a>
+    </ul>
+
+<!--<p><i>Variable-length Datatype Properties</i>                         -->
+<!--<ul>                                                                  -->
+<!--<li><a href="#Property-SetVLMemManager">h5pset_vlen_mem_manager_f</a> -->
+<!--<li><a href="#Property-GetVLMemManager">h5pget_vlen_mem_manager_f</a> -->
+<!--</ul>                                                                 -->
+
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+
+
+    <i>File Close Properties</i>
+    <ul>
+    <li><a href="#Property-SetFcloseDegree">h5pset_fclose_degree_f</a>
+    <li><a href="#Property-GetFcloseDegree">h5pget_fclose_degree_f</a>
+    </ul>
+
+    <p><i>Dataset Creation Properties</i>
+    <ul>
+    <li><a href="#Property-SetLayout">h5pset_layout_f</a>
+    <li><a href="#Property-GetLayout">h5pget_layout_f</a>
+    <li><a href="#Property-SetChunk">h5pset_chunk_f</a>
+    <li><a href="#Property-GetChunk">h5pget_chunk_f</a>
+    <li><a href="#Property-SetDeflate">h5pset_deflate_f</a>
+<!--<li><a href="#Property-GetDeflate">h5pget_deflate_f</a>               -->
+<!--<li><a href="#Property-SetCompression">h5pset_compression_f</a>       -->
+<!--<li><a href="#Property-GetCompression">h5pget_compression_f</a>       -->
+    <li><a href="#Property-SetFillValue">h5pset_fill_value_f</a>
+    <li><a href="#Property-GetFillValue">h5pget_fill_value_f</a>
+    <li><a href="#Property-FillValueDefined">h5pfill_value_defined_f</a>
+    <li><a href="#Property-SetFillTime">h5pset_fill_time_f</a>
+    <li><a href="#Property-GetFillTime">h5pget_fill_time_f</a>
+    <li><a href="#Property-SetAllocTime">h5pset_alloc_time_f</a>
+    <li><a href="#Property-GetAllocTime">h5pget_alloc_time_f</a>
+    <li><a href="#Property-SetFilter">h5pset_filter_f</a>
+<!--<li><a href="#Property-AllFiltersAvail">h5pall_filters_avail_f</a>    -->
+    <li><a href="#Property-GetNFilters">h5pget_nfilters_f</a>  
+    <li><a href="#Property-GetFilter">h5pget_filter_f</a>
+    <li><a href="#Property-GetFilterById">h5pget_filter_by_id_f</a> 
+    <li><a href="#Property-ModifyFilter">h5pmodify_filter_f</a>  
+    <li><a href="#Property-RemoveFilter">h5premove_filter_f</a>
+    <li><a href="#Property-SetFletcher32">h5pset_fletcher32_f</a>
+    <li><a href="#Property-SetShuffle">h5pset_shuffle_f</a>
+    <li><a href="#Property-SetSzip">h5pset_szip_f</a>  
+    <li><a href="#Property-SetExternal">h5pset_external_f</a>
+    <li><a href="#Property-GetExternalCount">h5pget_external_count_f</a>
+    <li><a href="#Property-GetExternal">h5pget_external_f</a>
+    </ul>
+
+<!--
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+-->
+<br>&nbsp;
+<br>&nbsp;
+<br>&nbsp;
+<br>
+||&nbsp;&nbsp;<i>Available only in the parallel HDF5 library.</i>
+
+
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+
+
+    <i>File Access Properties</i>
+    <ul>
+<!--<li><a href="#Property-SetDriver">h5pset_driver_f</a>                 -->
+    <li><a href="#Property-GetDriver">h5pget_driver_f</a>
+<!--<li><a href="#Property-GetDriverInfo">h5pget_driver_info_f</a>        -->
+    <li><a href="#Property-SetMetaBlockSize">h5pset_meta_block_size_f</a>
+    <li><a href="#Property-GetMetaBlockSize">h5pget_meta_block_size_f</a>
+    <li><a href="#Property-SetSieveBufSize">h5pset_sieve_buf_size_f</a>
+    <li><a href="#Property-GetSieveBufSize">h5Pget_sieve_buf_size_f</a>
+    <li><a href="#Property-SetStdio">h5pset_stdio_f</a> 
+    <li><a href="#Property-GetStdio">h5pget_stdio_f</a>  
+    <li><a href="#Property-SetSec2">h5pset_sec2_f</a>   
+<!--<li><a href="#Property-GetSec2">h5pget_sec2_f</a>                     -->
+    <li><a href="#Property-SetAlignment">h5pset_alignment_f</a>
+    <li><a href="#Property-GetAlignment">h5pget_alignment_f</a>
+<!--<li><a href="#Property-SetCore">h5pset_core_f</a>                     -->
+<!--<li><a href="#Property-GetCore">h5pget_core_f</a>                     -->
+    <li><a href="#Property-SetFaplMpio">h5pset_fapl_mpio_f</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-GetFaplMpio">h5pget_fapl_mpio_f</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-SetFaplMpiPosix">h5pset_fapl_mpiposix_f</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-GetFaplMpiPosix">h5pget_fapl_mpiposix_f</a>&nbsp;&nbsp;&nbsp;||
+    <li><a href="#Property-SetFamily">h5pset_family_f</a>  
+    <li><a href="#Property-GetFamily">h5pget_family_f</a> 
+<!--<li><a href="#Property-SetFamilyOffset">h5pset_family_offset_f</a>    -->
+<!--<li><a href="#Property-GetFamilyOffset">h5pget_family_offset_f</a>    -->
+    <li><a href="#Property-SetFaplMulti">h5pset_fapl_multi_f</a>
+    <li><a href="#Property-GetFaplMulti">h5pget_fapl_multi_f</a> 
+<!--<li><a href="#Property-SetMultiType">h5pset_multi_type_f</a>          -->
+<!--<li><a href="#Property-GetMultiType">h5pget_multi_type_f</a>          -->
+    <li><a href="#Property-SetCache">h5pset_cache_f</a>
+    <li><a href="#Property-GetCache">h5pget_cache_f</a>
+    <li><a href="#Property-SetSplit">h5pset_split_f</a>
+    <li><a href="#Property-GetSplit">h5pget_split_f</a>
+    <li><a href="#Property-SetGCReferences">h5pset_gc_references_f</a>
+    <li><a href="#Property-GetGCReferences">h5pget_gc_references_f</a>
+    </ul>
+
+
+    <p><i>Dataset Access, Memory, and Transfer Properties</i>
+    <ul>
+    <li><a href="#Property-SetBuffer">h5pset_buffer_f</a>
+    <li><a href="#Property-GetBuffer">h5pget_buffer_f</a>
+    <li><a href="#Property-SetPreserve">h5pset_preserve_f</a>  
+    <li><a href="#Property-GetPreserve">h5pget_preserve_f</a> 
+    <li><a href="#Property-SetEdcCheck">h5pset_edc_check_f</a>
+    <li><a href="#Property-GetEdcCheck">h5pget_edc_check_f</a>
+    <li><a href="#Property-SetHyperCache">h5pset_hyper_cache_f</a>
+    <li><a href="#Property-GetHyperCache">h5pget_hyper_cache_f</a>
+    <li><a href="#Property-SetHyperVectorSize">h5pset_hyper_vector_size_f</a>
+    <li><a href="#Property-GetHyperVectorSize">h5pget_hyper_vector_size_f</a>
+    <li><a href="#Property-SetBTreeRatios">h5pset_btree_ratios_f</a>
+    <li><a href="#Property-GetBTreeRatios">h5pget_btree_ratios_f</a>
+    <li><a href="#Property-SetDxplMpio">h5pset_dxpl_mpio_f</a>&nbsp;&nbsp;&nbsp;|| 
+    <li><a href="#Property-GetDxplMpio">h5pget_dxpl_mpio_f</a>&nbsp;&nbsp;&nbsp;|| 
+<!--<li><a href="#Property-SetDxplMulti">h5pset_dxpl_multi_f</a>          -->
+<!--<li><a href="#Property-GetDxplMulti">h5pget_dxpl_multi_f</a>          -->
+<!--<li><a href="#Property-SetMultiType">h5pset_multi_type_f</a>          -->
+<!--<li><a href="#Property-GetMultiType">h5pget_multi_type_f</a>          -->
+        <br>&nbsp;
+    <li><a href="#Property-SetSmallData">h5pset_small_data_block_size_f</a>
+    <li><a href="#Property-GetSmallData">h5pget_small_data_block_size_f</a>
+    </ul>
+
+</td></tr>
+</table>
+
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pall_filters_avail" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-AllFiltersAvail">H5Pall_filters_avail</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>htri_t</em> <code>H5Pall_filters_avail</code>(<em>hid_t</em> <code>dcpl_id</code>)
+  <dt><strong>Purpose:</strong>
+    <dd>Verifies that all required filters are available.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pall_filters_avail</code> verifies that all of the filters     
+        set in the dataset creation property list <code>dcpl_id</code> are 
+	currently available.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>dcpl_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Dataset creation property list identifier.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns <code>TRUE</code> if all filters are available
+        and <code>FALSE</code> if one or more is not currently available.<br>
+        Returns <code>FAIL</code>, a  negative value, on error.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pclose" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-Close">H5Pclose</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pclose</code>(<em>hid_t</em> <code>plist</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Terminates access to a property list.
+  <dt><strong>Description:</strong>
+        <dd><code>H5Pclose</code> terminates access to a property list.  
+            All property lists should be closed when the application is 
+            finished accessing them. 
+            This frees resources used by the property list.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the property list to terminate access to.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pclose_f
+    <dd>
+	<pre>
+SUBROUTINE h5pclose_f(prp_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pclose_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pclose_class" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-CloseClass">H5Pclose_class</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pclose_class</code>(
+                  <em>hid_t</em> <code>class</code>
+	)
+
+  <dt><strong>Purpose:</strong>
+    <dd>Closes an existing property list class.
+
+  <dt><strong>Description:</strong>
+    <dd>Removes a property list class from the library.  
+    
+    <p>
+    Existing property lists of this class will continue to exist, 
+    but new ones are not able to be created.
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em>&nbsp;<code>class&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>IN: Property list class to close</td></tr>
+    </table></ul>
+
+  <dt><strong>Returns:</strong>
+    <dd>Success: a non-negative value
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong> h5pclose_class_f
+    <dd>
+	<pre>
+SUBROUTINE h5pclose_class_f(class, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: class ! Property list class identifier 
+                                      ! to close
+  INTEGER, INTENT(OUT) :: hdferr      ! Error code
+                                      ! 0 on success and -1 on failure
+END SUBROUTINE h5pclose_class_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pclose_list" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-CloseList">H5Pclose_list</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pclose_list</code>(
+                  <em>hid_t</em> <code>plist</code>
+	)
+
+  <dt><strong>Purpose:</strong>
+    <dd>Closes a property list.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pclose_list</code> closes a property list.  
+    
+    <p>
+    If a <code>close</code> callback exists for the property list class, 
+    it is called before the property list is destroyed.  
+    If <code>close</code> callbacks exist for any individual properties 
+    in the property list, they are called after the class 
+    <code>close</code> callback.
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code><td>
+        <td>IN: Property list to close</td></tr>
+    </table></ul>
+    
+  <dt><strong>Returns:</strong>
+    <dd>Success: a non-negative value
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong> h5pclose_list_f
+    <dd>
+	<pre>
+SUBROUTINE h5pclose_list_f(plist, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist  ! Property list identifier to close
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pclose_list_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pcopy" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-Copy">H5Pcopy</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Pcopy</code>(<em>hid_t</em> <code>plist</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Copies an existing property list to create a new property list.
+  <dt><strong>Description:</strong>
+        <dd><code>H5Pcopy</code> copies an existing property list to create 
+            a new property list.
+            The new property list has the same properties and values 
+            as the original property list.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of property list to duplicate.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a property list identifier if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pcopy_f
+    <dd>
+	<pre>
+SUBROUTINE h5pcopy_f(prp_id, new_prp_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id       ! Property list identifier 
+  INTEGER(HID_T), INTENT(OUT) :: new_prp_id  ! Identifier  of property list
+                                             ! copy  
+  INTEGER, INTENT(OUT) :: hdferr             ! Error code
+                                             ! 0 on success and -1 on failure
+END SUBROUTINE h5pcopy_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pcopy_prop" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-CopyProp">H5Pcopy_prop</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pcopy_prop</code>(
+                  <em>hid_t</em> <code>dst_id</code>,
+                  <em>hid_t</em> <code>src_id</code>,
+                  <em>const char *</em><code>name</code>
+	)
+
+  <dt><strong>Purpose:</strong>
+    <dd>Copies a property from one list or class to another.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pcopy_prop</code> copies a property from one property 
+    list or class to another.
+    
+    <p>
+    If a property is copied from one class to another, all the property 
+    information will be first deleted from the destination class and 
+    then the property information will be copied from the source class 
+    into the destination class.  
+	
+    <p>
+    If a property is copied from one list to another, the property 
+    will be first deleted from the destination list (generating a call 
+    to the <code>close</code> callback for the property, if one exists)  
+    and then the property is copied from the source list to the 
+    destination list (generating a call to the <code>copy</code> 
+    callback for the property, if one exists).
+	
+    <p>
+    If the property does not exist in the class or list, this call is 
+    equivalent to calling <code>H5Pregister</code> or <code>H5Pinsert</code> 
+    (for a class or list, as appropriate) and the <code>create</code> 
+    callback will be called in the case of the property being 
+    copied into a list (if such a callback exists for the property).
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>dst_id</code></td>
+        <td>IN: Identifier of the destination property list or 
+	        class</td></tr>
+    <tr>
+        <td><em>hid_t</em> <code>src_id</code></td>
+        <td>IN: Identifier of the source property list or class</td></tr>
+    <tr>
+        <td><em>const&nbsp;char&nbsp;*</em><code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>IN: Name of the property to copy</td></tr>
+    </table></ul>
+
+  <dt><strong>Returns:</strong>
+    <dd>Success: a non-negative value
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong> h5pcopy_prop_f
+    <dd>
+	<pre>
+SUBROUTINE h5pcopy_prop_f(dst_id, src_id, name, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: dst_id  ! Destination property list 
+                                        ! identifier 
+  INTEGER(HID_T), INTENT(IN) :: src_id  ! Source property list identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name  ! Property name
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pcopy_prop_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pcreate" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-Create">H5Pcreate</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Pcreate</code>(<em>hid_t</em> <code>cls_id</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Creates a new property as an instance of a property list class.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pcreate</code> creates a new property as an instance of some
+        property list class.  The new property list is initialized
+        with default values for the specified class. The classes are:
+      <dl>
+        <dt><code>H5P_FILE_CREATE</code>
+	    <dd>Properties for file creation.  
+              See <a href="Files.html">Files</a>
+              in the <cite>HDF User's Guide</cite>
+	        for details about the file creation properties.
+        <dt><code>H5P_FILE_ACCESS</code>
+	    <dd>Properties for file access. 
+              See <a href="Files.html">Files</a>
+              in the <cite>HDF User's Guide</cite>
+	        for details about the file creation properties.
+        <dt><code>H5P_DATASET_CREATE</code>
+	    <dd>Properties for dataset creation.  
+              See <a href="Datasets.html">Datasets</a> 
+              in the <cite>HDF User's Guide</cite>
+	        for details about dataset creation properties.
+        <dt><code>H5P_DATASET_XFER</code>
+	    <dd>Properties for raw data transfer.  
+              See <a href="Datasets.html">Datasets</a> 
+              in the <cite>HDF User's Guide</cite>
+              for details about raw data transfer properties.
+        <dt><code>H5P_MOUNT</code>
+	    <dd>Properties for file mounting.  
+              With this parameter, <code>H5Pcreate</code> 
+              creates and returns a new mount property list
+              initialized with default values.
+      </dl>
+      <p>
+      This property list must eventually be closed with 
+      <code>H5Pclose</code>;  
+      otherwise, errors are likely to occur.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+      <tr>
+	    <td valign="top"><em>hid_t</em>&nbsp;<code>cls_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: The class of the property list to create.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a property list identifier (<code>plist</code>) if successful; 
+        otherwise Fail (-1).
+  <dt><strong>Fortran90 Interface:</strong> h5pcreate_f
+    <dd>
+	<pre>
+SUBROUTINE h5pcreate_f(classtype, prp_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER, INTENT(IN) :: classtype       ! The type of the property list 
+                                         ! to be created 
+                                         ! Possible values are: 
+                                         !    H5P_FILE_CREATE_F 
+                                         !    H5P_FILE_ACCESS_F
+                                         !    H5P_DATASET_CREATE_F
+                                         !    H5P_DATASET_XFER_F 
+                                         !    H5P_MOUNT_F 
+  INTEGER(HID_T), INTENT(OUT) :: prp_id  ! Property list identifier 
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pcreate_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pcreate_class" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-CreateClass">H5Pcreate_class</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Pcreate_class</code>(
+                 <em>hid_t</em> <code>class</code>,
+                 <em>const char *</em><code>name</code>,
+                 <em>H5P_cls_create_func_t</em> <code>create</code>,
+                 <em>H5P_cls_copy_func_t</em> <code>copy</code>,
+                 <em>H5P_cls_close_func_t</em> <code>close</code>
+         )
+
+  <dt><strong>Purpose:</strong>
+    <dd>Creates a new property list class.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pcreate_class</code> registers a new property list class 
+	with the library.  
+	The new property list class can inherit from an existing property 
+    list class or may be derived from the default "empty" class.  
+	New classes with inherited properties from existing classes 
+    may not remove those existing properties, only add or remove 
+    their own class properties.
+    </P>
+	
+	The <code>create</code> routine is called when a new property list 
+	of this class is being created.  
+	The <code>H5P_cls_create_func_t</code> callback function is defined 
+	as follows:
+    <ul><em>typedef herr_t</em> (*<code>H5P_cls_create_func_t</code>)(
+            <em>hid_t</em> <code>prop_id</code>,
+            <em>void *</em> <code>create_data</code>
+            );
+    </ul>
+    The parameters to this callback function are defined as follows:
+    <ul><table>
+      <tr>
+        <td><em>hid_t</em> <code>prop_id</code></td>
+        <td>IN: The identifier of the property list being created</td></tr>
+      <tr>
+        <td><em>void *</em> <code>create_data</code></td>
+        <td>IN/OUT: User pointer to any class creation information needed</td></tr>
+    </table></ul>
+    The <code>create</code> routine is called after any registered 
+	<code>create</code> function is called for each property value.  
+    If the <code>create</code> routine returns a negative value, 
+    the new list is not returned to the user and the
+    property list creation routine returns an error value.
+    </P>
+	
+	The <code>copy</code> routine is called when an existing property list 
+    of this class is copied.  
+	The <code>H5P_cls_copy_func_t</code> callback function  
+	is defined as follows:
+        <ul><em>typedef herr_t</em> (*<code>H5P_cls_copy_func_t</code>)(
+            <em>hid_t</em> <code>prop_id</code>,
+            <em>void *</em> <code>copy_data</code>
+            );
+        </ul>
+    The parameters to this callback function are defined as follows:
+    <ul><table>
+      <tr>
+        <td><em>hid_t</em> <code>prop_id</code></td>
+        <td>IN: The identifier of the property list created by copying</td></tr>
+      <tr>
+        <td><em>void *</em> <code>copy_data</code></td>
+        <td>IN/OUT: User pointer to any class copy information needed</td></tr>
+    </table></ul>
+    The <code>copy</code> routine is called after any registered 
+	<code>copy</code> function is called for each property value.  
+    If the <code>copy</code> routine returns a negative value, the new list 
+    is not returned to the user and the property list copy routine returns 
+    an error value.
+    </P>
+
+	The <code>close</code> routine is called when a property list of this 
+	class
+    is being closed.  
+	The <code></code>H5P_cls_close_func_t</code> callback function is defined 
+	as follows:
+        <ul><em>typedef herr_t</em> (*<code>H5P_cls_close_func_t</code>)(
+            <em>hid_t</em> <code>prop_id</code>,
+            <em>void *</em> <code>close_data</code>
+            );
+        </ul>
+    The parameters to this callback function are defined as follows:
+    <ul><table>
+      <tr>
+        <td><em>hid_t</em> <code>prop_id</code></td>
+        <td>IN: The identifier of the property list being closed</td></tr>
+      <tr>
+        <td><em>void *</em> <code>close_data</code></td>
+        <td>IN/OUT: User pointer to any class close information needed</td></tr>
+    </table></ul>
+    The <code>close</code> routine is called before any registered 
+	<code>close</code> function is called for each property value.  
+    If the <code>close</code> routine returns a negative value, 
+    the property list close routine returns an error value 
+    but the property list is still closed.
+	
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>class</code></td>
+        <td>IN: Property list class to inherit from.</td></tr>
+    <tr>
+        <td><em>const char *</em><code>name</code></td>
+        <td>IN: Name of property list class to register</td></tr>
+    <tr>
+        <td><em>H5P_cls_create_func_t</em>&nbsp;<code>create&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>IN: Callback routine called when a property list is created</td></tr>
+    <tr>
+        <td><em>H5P_cls_copy_func_t</em> <code>copy</code></td>
+        <td>IN: Callback routine called when a property list is copied</td></tr>
+    <tr>
+        <td><em>H5P_cls_close_func_t</em> <code>close</code></td>
+        <td>IN: Callback routine called when a property list is being closed</td></tr>
+    </table>
+    </ul>
+	
+  <dt><strong>Returns:</strong>
+    <dd>Success: a valid property list class identifier
+    <dd>Failure: a negative value
+
+<!-- NEW PAGE -->
+  <dt><strong>Fortran90 Interface:</strong> h5pcreate_class_f
+    <dd>
+	<pre>
+SUBROUTINE h5pcreate_class_f(parent, name, class, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: parent  ! Parent property list class 
+                                        ! identifier
+                                        ! Possible values include:
+                                        !    H5P_NO_CLASS_F
+                                        !    H5P_FILE_CREATE_F
+                                        !    H5P_FILE_ACCESS_F
+                                        !    H5P_DATASET_CREATE_F
+                                        !    H5P_DATASET_XFER_F
+                                        !    H5P_MOUNT_F
+  CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to create 
+  INTEGER(HID_T), INTENT(OUT) :: class  ! Property list class identifier
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pcreate_class_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pcreate_list" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-CreateList">H5Pcreate_list</a>
+  
+  <dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Pcreate_list</code>(
+                 <em>hid_t</em> <code>class</code>)
+
+  <dt><strong>Purpose:</strong>
+    <dd>Creates a new property list class of a given class.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pcreate_list</code> creates a new property list of a  
+	given class.  If a <code>create</code> callback exists for the 
+    property list class, it is called before the property list 
+    is passed back to the user.  
+	If <code>create</code> callbacks exist for any individual properties 
+    in the property list, they are called before the class 
+    <code>create</code> callback.
+	
+  <dt><strong>Parameter:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em>&nbsp;<code>class;&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>IN: Class of property list to create.</td></tr>
+    </table></ul>
+
+  <dt><strong>Returns:</strong>
+    <dd>Success: a valid property list identifier
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Premove_filter" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-RemoveFilter">H5Premove_filter</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Premove_filter</code>(<em>hid_t</em> <code>plist</code>,
+        <em>H5Z_filter_t</em> <code>filter</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Delete one or more filters in the filter pipeline.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Premove_filter</code> removes the specified 
+        <code>filter</code> from the filter pipeline in the
+        dataset creation property list <code>plist</code>.
+	<p>
+	The <code>filter</code> parameter specifies the filter to be removed.  
+	Valid values for use in <code>filter</code> are as follows:
+
+        <center>
+        <table width=75%>
+        <tr valign=top align=left><td>
+            <code>H5Z_FILTER_ALL</code> 
+            </td><td>
+            Removes all filters from the permanent filter pipeline.
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5Z_FILTER_DEFLATE</code> 
+            </td><td>
+            Data compression filter, employing the gzip algorithm 
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5Z_FILTER_SHUFFLE</code> 
+            </td><td>
+            Data shuffling filter 
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5Z_FILTER_FLETCHER32&nbsp;&nbsp;</code> 
+            </td><td>
+            Error detection filter, employing the Fletcher32 checksum algorithm 
+        </td></tr>	
+        <tr valign=top align=left><td>
+            <code>H5Z_FILTER_SZIP</code> 
+            </td><td>
+            Data compression filter, employing the SZIP algorithm 
+        </td></tr>
+	</table>
+	</center>
+        <p>
+        Additionally, user-defined filters can be removed with this routine
+        by passing the filter identifier with which they were registered 
+        with the HDF5 Library.
+        <p>
+        Attempting to remove a filter that is not in the permanent filter
+        pipeline is an error.
+  <dt><strong>Note:</strong>
+    <dd>This function currently supports only the permanent filter
+        pipeline; <code>plist</code> must be a dataset creation 
+        property list.
+  <dt><strong>Parameters:</strong>
+    <dl>
+        <dt><em>hid_t</em> <code>plist_id</code>
+            <dd>IN: Dataset creation property list identifier.
+        <dt><em>H5Z_filter_t</em> <code>filter</code>
+            <dd>IN: Filter to be deleted.
+    </dl>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+
+    <dt><strong>Fortran90 Interface:</strong> h5premove_filter_f
+    <dd>
+	<pre>
+SUBROUTINE h5premove_filter_f(prp_id, filter, hdferr) 
+
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Dataset creation property 
+                                       ! list identifier
+  INTEGER, INTENT(IN) :: filter        ! Filter to be removed
+                                       ! Valid values are:
+                                       !     H5Z_FILTER_ALL_F
+                                       !     H5Z_FILTER_DEFLATE_F
+                                       !     H5Z_FILTER_SHUFFLE_F
+                                       !     H5Z_FILTER_FLETCHER32_F
+                                       !     H5Z_FILTER_SZIP_F
+                                       !</pre>
+<!-- NEW PAGE -->
+<pre>
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success, -1 on failure
+END SUBROUTINE h5premove_filter_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top" align="left">
+		    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.3</td>
+          <td valign="top">
+		    Function introduced in this release.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">
+		    Fortran subroutine introduced in this 
+			release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pequal" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong>  <a name="Property-Equal">H5Pequal</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>htri_t</em> <code>H5Pequal</code>(
+                  <em></em>hid_t</em> <em>id1</em>,
+                  <em>hid_t</em> <em>id2</em>
+	)
+
+  <dt><strong>Purpose:</strong>
+    <dd>Compares two property lists or classes for equality.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pequal</code> compares two property lists or classes 
+    to determine whether they are equal to one another.  
+	
+    <p>
+    Either both <code>id1</code> and <code>id2</code> must be
+    property lists or both must be classes; comparing a list to a 
+    class is an error.
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em>&nbsp;<code>id1&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>IN: First property object to be compared</td></tr>
+    <tr>
+        <td><em>hid_t</em> <code>id2</code></td>
+        <td>IN: Second property object to be compared</td></tr>
+    </table></ul>
+
+  <dt><strong>Returns:</strong>
+    <dd>Success: TRUE (positive) if equal; FALSE (zero) if unequal
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong> h5pequal_f
+    <dd>
+	<pre>
+SUBROUTINE h5pequal_f(plist1_id, plist2_id, flag, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist1_id ! Property list identifier
+  INTEGER(HID_T), INTENT(IN) :: plist2_id ! Property list identifier
+  LOGICAL, INTENET(OUT)      :: flag      ! Flag
+                                          !    .TRUE. if lists are equal 
+                                          !    .FALSE. otherwise 
+  INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5pequal_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pexist" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-Exist">H5Pexist</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>htri_t</em> <code>H5Pexist</code>(
+                  <em>hid_t</em> <code>id</code>;
+                  <em>const char *</em><code>name</code>
+	)
+
+  <dt><strong>Purpose:</strong>
+    <dd>Queries whether a property name exists in a property list 
+    or class.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pexist</code> determines  whether a property exists 
+    within a property list or class.
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>id</code></td>
+        <td>IN: Identifier for the property to query</td></tr>
+    <tr>
+        <td><em>const&nbsp;char&nbsp;*</em><code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>IN: Name of property to check for</td></tr>
+    </table></ul>
+
+  <dt><strong>Returns:</strong>
+    <dd>Success: a positive value if the property exists in the 
+        property object; zero if the property does not exist
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong> h5pexist_f
+    <dd>
+	<pre>
+SUBROUTINE h5pexist_f(prp_id, name, flag, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+  LOGICAL, INTENT(OUT) :: flag          ! Logical flag
+                                        !    .TRUE. if exists 
+                                        !    .FALSE. otherwise
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pexist_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pfill_value_defined" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-FillValueDefined">H5Pfill_value_defined</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pfill_value_defined</code>(<em>hid_t</em> <code>plist_id</code>,
+            <em>H5D_fill_value_t *</em><code>status</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Determines whether fill value is defined.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pfill_value_defined</code> determines whether a fill value 
+        is defined in the dataset creation property list <code>plist_id</code>.
+        <p>
+	Valid values returned in <code>status</code> are as follows:
+	<table border=0 width="80%">
+           <tr valign="top"><td rowspan="3">&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+	     <code>H5D_FILL_VALUE_UNDEFINED</code> 
+             </td><td>
+	     Fill value is undefined.
+	   </td></tr><tr valign="top"><td>
+             <code>H5D_FILL_VALUE_DEFAULT</code>
+             </td><td>
+             Fill value is the library default.
+	   </td></tr><tr valign="top"><td>
+             <code>H5D_FILL_VALUE_USER_DEFINED</code>&nbsp;&nbsp;
+             </td><td>
+             Fill value is defined by the application. 
+ 	</td></tr></table>
+  <dt><strong>Note:</strong>
+    <dd><code>H5Pfill_value_defined</code> is designed for use in  
+	concert with the dataset fill value properties functions 
+	<code>H5Pget_fill_value</code> and <code>H5Pget_fill_time</code>.
+	<p>
+	See <a href="RM_H5D.html#Dataset-Create">H5Dcreate</a> for 
+	further cross-references.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist_id</code></td>
+            <td valign="top">IN: Dataset creation property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5D_fill_value_t&nbsp;*</em><code>status&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Status of fill value in property list.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-Get">H5Pget</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget</code>(
+                  <em>hid_t</em> <code>plid</code>,
+                  <em>const char *</em><code>name</code>,
+                  <em>void *</em><code>value</code>
+	)
+
+  <dt><strong>Purpose:</strong>
+    <dd>Queries the value of a property.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget</code> retrieves a copy of the value for a property  
+    in a property list.  If there is a <code>get</code> callback routine 
+    registered for this property, the copy of the value of the property 
+    will first be passed to that routine and any changes to the copy of 
+    the value will be used when returning the property value from this 
+    routine.   
+    
+    <p>
+    This routine may be called for zero-sized properties with the 
+    <code>value</code> set to NULL.  The <code>get</code> routine 
+    will be called with a NULL value if the callback exists.
+     
+    <p>
+    The property name must exist or this routine will fail.  
+   
+    <p>
+    If the <code>get</code> callback routine returns an error,
+    <code>value</code> will not be modified.   
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>plid</ecodem></td>
+        <td>IN: Identifier of the property list to query</td></tr>
+    <tr>
+        <td><em>const&nbsp;char&nbsp;*</em><code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>IN: Name of property to query</td></tr>
+    <tr>
+        <td><em>void *</em><code>value</code></td>
+        <td>OUT: Pointer to a location to which to copy the value of 
+	         of the property</td></tr>
+    </table></ul>
+
+  <dt><strong>Returns:</strong>
+    <dd>Success: a non-negative value
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong> h5pget_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_f(plid, name, value, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plid    ! Property list identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to get
+  TYPE,  INTENT(OUT) :: value           ! Property value
+                                        ! Supported types are:
+                                        !    INTEGER
+                                        !    REAL
+                                        !    DOUBLE PRECISION
+                                        !    CHARACTER(LEN=*)
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_alignment" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetAlignment">H5Pget_alignment</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_alignment</code>(<em>hid_t</em> <code>plist</code>,
+        <em>hsize_t</em> <code>*threshold</code>,
+        <em>hsize_t</em> <code>*alignment</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves the current settings for alignment properties from a
+        file access property list.  
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_alignment</code> retrieves the current settings for 
+        alignment properties from a file access property list. 
+        The <code>threshold</code> and/or <code>alignment</code> pointers 
+        may be null pointers (NULL). 
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier of a file access property list.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t</em>&nbsp;<code>*threshold&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Pointer to location of return threshold value.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t</em> <code>*alignment</code></td>
+            <td valign="top">OUT: Pointer to location of return alignment value.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_alignment_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_alignment_f(prp_id, threshold,  alignment, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id        ! Property list identifier
+  INTEGER(HSIZE_T), INTENT(OUT) :: threshold  ! Threshold value
+  INTEGER(HSIZE_T), INTENT(OUT) :: alignment  ! Alignment value
+  INTEGER, INTENT(OUT) :: hdferr              ! Error code
+                                              ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_alignment_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_alloc_time" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetAllocTime">H5Pget_alloc_time</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pget_alloc_time</code>(<em>hid_t</em> <code>plist_id</code>,
+            <em>H5D_alloc_time_t *</em><code>alloc_time</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves the timing for storage space allocation.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_alloc_time</code> retrieves the timing for allocating 
+        storage space for a dataset's raw data.  
+	This property is set in the dataset creation property list 
+	<code>plist_id</code>.
+        <p>
+	The timing setting is returned in <code>fill_time</code> as one of the 
+	following values:
+	<table border=0 >
+           <tr valign="top"><td rowspan="4">&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+	     <code>H5D_ALLOC_TIME_DEFAULT</code>&nbsp;&nbsp; 
+             </td><td>
+	     Uses the default allocation time, based on the dataset storage method.<br>
+	     See the <code>fill_time</code> description in 
+	     <a href="#Property-SetAllocTime">H5Pset_alloc_time</a> for 
+	     default allocation times for various storage methods.
+	   </td></tr><tr valign="top"><td>
+             <code>H5D_ALLOC_TIME_EARLY</code>
+             </td><td>
+             All space is allocated when the dataset is created.
+	   </td></tr><tr valign="top"><td>
+	     <code>H5D_ALLOC_TIME_INCR</code>&nbsp;&nbsp; 
+             </td><td>
+	     Space is allocated incrementally as data is written to the dataset.
+	   </td></tr><tr valign="top"><td>
+             <code>H5D_ALLOC_TIME_LATE</code>
+             </td><td>
+             All space is allocated when data is first written to the dataset.
+ 	</td></tr></table>
+  <dt><strong>Note:</strong>
+    <dd><code>H5Pget_alloc_time</code> is designed to work in concert  
+        with the dataset fill value and fill value write time properties, 
+	set with the functions 
+	<code>H5Pget_fill_value</code> and <code>H5Pget_fill_time</code>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist_id</code></td>
+            <td valign="top">IN: Dataset creation property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5D_alloc_time_t&nbsp;*</em><code>alloc_time&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: When to allocate dataset storage space.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_alloc_time_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_alloc_time_f(plist_id, flag, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist_id   ! Dataset creation
+                                           ! property list identifier
+  INTEGER(HSIZE_T), INTENT(OUT) :: flag    ! Allocation time flag
+                                           ! Possible values are:
+                                           !    H5D_ALLOC_TIME_ERROR_F
+                                           !    H5D_ALLOC_TIME_DEFAULT_F
+                                           !    H5D_ALLOC_TIME_EARLY_F
+                                           !    H5D_ALLOC_TIME_LATE_F
+                                           !    H5D_ALLOC_TIME_INCR_F
+  INTEGER, INTENT(OUT)       :: hdferr     ! Error code
+                                           ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_alloc_time_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_btree_ratios" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetBTreeRatios">H5Pget_btree_ratios</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_btree_ratios</code>(<em>hid_t</em> <code>plist</code>,
+        <em>double</em> *<code>left</code>,
+        <em>double</em> *<code>middle</code>,
+        <em>double</em> *<code>right</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Gets B-tree split ratios for a dataset transfer property list.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_btree_ratios</code> returns the B-tree split ratios 
+        for a dataset transfer property list.
+        <p>
+        The B-tree split ratios are returned through the non-<code>NULL</code>
+        arguments <code>left</code>, <code>middle</code>, and <code>right</code>,
+        as set by the <a href="#Property-SetBTreeRatios">H5Pset_btree_ratios</a> function.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: The dataset transfer property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>double</em> <code>left</code></td>
+            <td valign="top">OUT: The B-tree split ratio for left-most nodes.</td></tr>
+        <tr>
+		    <td valign="top"><em>double</em> <code>right</code></td>
+            <td valign="top">OUT: The B-tree split ratio for right-most nodes and lone nodes.</td></tr>
+        <tr>
+		    <td valign="top"><em>double</em>&nbsp;<code>middle&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: The B-tree split ratio for all other nodes.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_btree_ratios_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_btree_ratios_f(prp_id, left, middle, right, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  
+                                  ! Property list identifier
+  REAL, INTENT(OUT) :: left       ! B-tree split ratio for left-most nodes
+  REAL, INTENT(OUT) :: middle     ! B-tree split ratio for all other nodes
+  REAL, INTENT(OUT) :: right      ! The B-tree split ratio for right-most
+                                  ! nodes and lone nodes.
+  INTEGER, INTENT(OUT) :: hdferr  ! Error code
+                                  ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_btree_ratios_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_buffer" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetBuffer">H5Pget_buffer</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>hsize_t</em> <code>H5Pget_buffer</code>(<em>hid_t</em> <code>plist</code>,
+        <em>void</em> <code>**tconv</code>,
+        <em>void</em> <code>**bkg</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Reads buffer settings.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_buffer</code> reads values previously set 
+        with H5Pset_buffer.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier for the dataset transfer property list.</td></tr>
+        <tr>
+		    <td valign="top"><em>void</em>&nbsp;<code>**tconv&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Address of the pointer to application-allocated 
+                type conversion buffer.</td></tr>
+        <tr>
+		    <td valign="top"><em>void</em> <code>**bkg</code></td>
+            <td valign="top">OUT: Address of the pointer to application-allocated 
+                background buffer.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns buffer size, in bytes, if successful;
+        otherwise 0 on failure.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_buffer_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_buffer_f(plist_id, size, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)    :: plist_id ! Dataset transfer 
+                                            ! property list identifier
+  INTEGER(HSIZE_T), INTENT(OUT) :: size     ! Conversion buffer size
+  INTEGER, INTENT(OUT)          :: hdferr   ! Error code
+                                            ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_buffer_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+            <strong>C</strong></td></tr>
+        <tr>
+          <td valign="top">1.6.0</td>
+          <td valign="top">
+            The return type changed from 
+            <em>hsize_t</em> to <em>size_t</em>.</td></tr>
+        <tr>
+          <td valign="top">1.4.0</td>
+          <td valign="top">
+            The return type changed to <em>hsize_t</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_cache" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetCache">H5Pget_cache</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_cache</code>(<em>hid_t</em> <code>plist_id</code>,
+        <em>int</em> <code>*mdc_nelmts</code>,
+        <em>int</em> <code>*rdcc_nelmts</code>,
+        <em>size_t</em> <code>*rdcc_nbytes</code>,
+        <em>double</em> <code>*rdcc_w0</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Queries the meta data cache and raw data chunk cache parameters.  
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_cache</code> retrieves the maximum possible 
+        number of elements in the meta
+        data cache and raw data chunk cache, the maximum possible number of 
+        bytes in the raw data chunk cache, and the preemption policy value.
+        <p>
+        Any (or all) arguments may be null pointers, in which case the 
+        corresponding datum is not returned.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist_id</code></td>
+            <td valign="top">IN: Identifier of the file access property list.</td></tr>
+        <tr>
+		    <td valign="top"><em>int</em> <code>*mdc_nelmts</code></td>
+            <td valign="top">IN/OUT: Number of elements (objects) in the meta data cache.</td></tr>
+        <tr>
+		    <td valign="top"><em>int</em> <code>*rdcc_nelmts</code></td>
+            <td valign="top">IN/OUT: Number of elements (objects) in the raw data chunk cache.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em>&nbsp;<code>*rdcc_nbytes&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN/OUT: Total size of the raw data chunk cache, in bytes.</td></tr>
+        <tr>
+		    <td valign="top"><em>double</em> <code>*rdcc_w0</code></td>
+            <td valign="top">IN/OUT: Preemption policy.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_cache_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_cache_f(prp_id, mdc_nelmts, rdcc_nelmts, rdcc_nbytes,
+                          rdcc_w0, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id         ! Property list identifier
+  INTEGER, INTENT(OUT) :: mdc_nelmts           ! Number of elements (objects)
+                                               ! in the meta data cache
+  INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nelmts  ! Number of elements (objects)
+                                               ! in the meta data cache
+  INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nbytes  ! Total size of the raw data
+                                               ! chunk cache, in bytes
+  REAL, INTENT(OUT) :: rdcc_w0                 ! Preemption policy
+  INTEGER, INTENT(OUT) :: hdferr               ! Error code
+                                               ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_cache_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+            <strong>C</strong></td></tr>
+        <tr>
+          <td valign="top">1.6.0</td>
+          <td valign="top">
+            The <code>rdcc_nbytes</code> parameter changed from 
+            type <em>int</em> to <em>size_t</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_chunk" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetChunk">H5Pget_chunk</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>int </em><code>H5Pget_chunk</code>(<em>hid_t</em> <code>plist</code>,
+            <em>int</em> <code>max_ndims</code>,
+            <em>hsize_t *</em> <code>dims</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves the size of chunks for the raw data of a chunked layout dataset.  
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_chunk</code> retrieves the size of chunks for the 
+            raw data of a chunked layout dataset.  
+            This function is only valid for dataset creation property lists. 
+            At most, <code>max_ndims</code> elements of <code>dims</code> 
+            will be initialized.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier of property list to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>int</em>&nbsp;<code>max_ndims&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Size of the <code>dims</code> array.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t *</em> <code>dims</code></td>
+            <td valign="top">OUT: Array to store the chunk dimensions.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns chunk dimensionality successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_chunk_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_chunk_f(prp_id, ndims, dims, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+  INTEGER, INTENT(IN) :: ndims          ! Number of chunk dimensions 
+                                        ! to return
+  INTEGER(HSIZE_T), DIMENSION(ndims), INTENT(OUT) :: dims    
+                                        ! Array containing sizes of
+                                        ! chunk dimensions
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! chunk rank on success 
+                                        ! and -1 on failure
+END SUBROUTINE h5pget_chunk_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_class" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetClass">H5Pget_class</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>H5P_class_t </em><code>H5Pget_class</code>(<em>hid_t</em> <code>plist</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns the property list class for a property list.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_class</code> returns the property list class for the 
+        property list identified by the <code>plist</code> parameter.
+        Valid property list classes are defined in the description of
+        <code>H5Pcreate</code>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+      <tr>
+	    <td valign="top"><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td valign="top">IN: Identifier of property list to query.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a property list class if successful.
+        Otherwise returns H5P_NO_CLASS (-1).
+  <dt><strong>Fortran90 Interface:</strong> h5pget_class_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_class_f(prp_id, classtype, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+  INTEGER, INTENT(OUT) :: classtype    ! The type of the property list 
+                                       ! to be created 
+                                       ! Possible values are: 
+                                       !    H5P_NO_CLASS  
+                                       !    H5P_FILE_CREATE_F 
+                                       !    H5P_FILE_ACCESS_F 
+                                       !    H5PE_DATASET_CREATE_F 
+                                       !    H5P_DATASET_XFER_F
+                                       !    H5P_MOUNT_F 
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_class_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_class_name" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetClassName">H5Pget_class_name</a>
+
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves the name of a class.
+
+  <dt><strong>Signature:</strong>
+    <dd><em>char *</em> <code>H5Pget_class_name</code>(
+                  <em>hid_t</em> <code>pcid</code>
+	)
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_class_name</code> retrieves the name of a 
+    generic property list class.  The pointer to the name 
+    must be freed by the user after each successful call.
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em>&nbsp;<code>pcid&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>IN: Identifier of the property class  to query</td></tr>
+    </table></ul>
+
+  <dt><strong>Returns:</strong>
+    <dd>Success: a pointer to an allocated string containing the class name
+    <dd>Failure: NULL
+
+  <dt><strong>Fortran90 Interface:</strong> h5pget_class_name_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_class_name_f(prp_id, name, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id     ! Property list identifier to
+                                           ! query 
+  CHARACTER(LEN=*), INTENT(INOUT) :: name  ! Buffer to retrieve class name
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code, possible values:
+                                           ! Success:  Actual length of the 
+                                           ! class name
+                                           ! If provided buffer "name" is 
+                                           ! smaller, than name will be 
+                                           ! truncated to fit into
+                                           ! provided user buffer
+                                           ! Failure: -1   
+END SUBROUTINE h5pget_class_name_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_class_parent" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetClassParent">H5Pget_class_parent</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Pget_class_parent</code>(
+                  <em>hid_t</em> <code>pcid</code>
+	)
+	
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves the parent class of a property class.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_class_parent</code> retrieves an identifier for the 
+	parent class of a property class.
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em>&nbsp;<code>pcid&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>IN: Identifier of the property class to query</td></tr>
+    </table></ul>
+
+  <dt><strong>Returns:</strong>
+    <dd>Success: a valid parent class object identifier
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong> h5pget_class_parent_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_class_parent_f(prp_id, parent_id, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id     ! Property list identifier 
+  INTEGER(HID_T), INTENT(OUT) :: parent_id ! Parent class property list 
+                                           ! identifier
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code
+                                           ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_class_parent_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_driver" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetDriver">H5Pget_driver</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Pget_driver</code>(
+                     <em>hid_t</em> <code>plist_id</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns low-lever driver identifier.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_driver</code> returns the identifier of the 
+        low-level file driver associated with the file access property list 
+        or data transfer property list <code>plist_id</code>.
+        <p>
+        Valid driver identifiers with the standard HDF5 library distribution
+        include the following:
+        <pre>
+           H5FD_CORE
+           H5FD_FAMILY
+           H5FD_GASS
+           H5FD_LOG
+           H5FD_MPIO
+           H5FD_MULTI
+           H5FD_SEC2
+           H5FD_STDIO
+           H5FD_STREAM </pre>
+        If a user defines and registers custom drivers or 
+        if additional drivers are defined in an HDF5 distribution, 
+        this list will be longer.
+        <p>
+        The returned driver identifier is only valid as long as the 
+        file driver remains registered.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: File access or data transfer property list identifier.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a valid low-level driver identifier if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_driver_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_driver_f(prp_id, driver, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+  INTEGER, INTENT(OUT) :: driver       ! Low-level file driver identifier
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_driver_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!--      ********** MOVED TO TechNotes/VFLfunc.html **********
+
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetDriverInfo">H5Pget_driver_info</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>void *</em><code>H5Pget_driver_info</code>(
+                     <em>hid_t</em> <code>plist_id</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns a pointer to file driver information.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_driver_info</code> returns a pointer to 
+        file driver-specific information for the low-level driver 
+        associated with the file access or data transfer property list
+        <code>plist_id</code>.
+
+        <p>
+        <font color=red><b><i>Need more on "a pointer" or on what 
+        is "pointed to."  Might this be the <code>driver_info</code> 
+        struct definition in <code>H5Pset_driver</code>?</i></b></font>
+        
+        <p>
+        If  no driver-specific properties have been registered, 
+        <code>H5Pget_driver_info</code> returns <code>NULL</code>. 
+  <dt><strong>Parameters:</strong>
+    <dl>
+        <dt><em>hid_t</em> <code>plist_id</code>
+            <dd>IN: File access or data transfer property list identifier.
+    </dl>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a pointer to the struct containing 
+        low-level driver information. 
+        Otherwise returns <code>NULL</code>.
+        <p>
+        <code>NULL</code> is also returned if no driver-specific properties
+        have been registered.  
+        No error is pushed on the stack in this case.
+  <dt><strong>Non-C API(s):</strong>
+    <dd><a href="fortran/h5p_FORTRAN.html#h5pxxx_f" 
+        target="FortranWin"><img src="Graphics/FORTRAN.gif" border=0></a>
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+</dl>
+
+-->
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_dxpl_mpio" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetDxplMpio">H5Pget_dxpl_mpio</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_dxpl_mpio</code>(
+                     <em>hid_t</em> <code>dxpl_id</code>,
+                     <em>H5FD_mpio_xfer_t *</em><code>xfer_mode</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns the data transfer mode.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_dxpl_mpio</code> queries the data transfer mode 
+        currently set in the data transfer property list <code>dxpl_id</code>. 
+        <p>
+        Upon return, <code>xfer_mode</code> contains the data transfer mode, 
+        if it is non-null.        
+        <p>
+        <code>H5Pget_dxpl_mpio</code> is not a collective function.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dxpl_id</code></td>
+            <td valign="top">IN: Data transfer property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5FD_mpio_xfer_t&nbsp;*</em><code>xfer_mode&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Data transfer mode.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_dxpl_mpio_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_dxpl_mpio_f(prp_id, data_xfer_mode, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id    ! Property list identifier
+  INTEGER, INTENT(OUT) :: data_xfer_mode  ! Data transfer mode
+                                          ! Possible values are:
+                                          !    H5FD_MPIO_INDEPENDENT_F
+                                          !    H5FD_MPIO_COLLECTIVE_F
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_dxpl_mpio_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_dxpl_multi" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetDxplMulti">H5Pget_dxpl_multi</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_dxpl_multi</code>(
+                     <em>hid_t</em> <code>dxpl_id</code>,
+                     <em>const hid_t *</em><code>memb_dxpl</code>
+    )
+<br>
+<br>
+  <dt><strong>Purpose:</strong>
+    <dd>Returns multi-file data transfer property list information.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_dxpl_multi</code> returns the data transfer property list
+        information for the multi-file driver.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dxpl_id</code>,</td>
+            <td valign="top">IN: Data transfer property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;hid_t&nbsp;*</em><code>memb_dxpl&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Array of data access property lists.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_edc_check" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetEdcCheck">H5Pget_edc_check</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>H5Z_EDC_t</em> <code>H5Pget_edc_check</code>(<em>hid_t</em> <code>plist</code>)
+  <dt><strong>Purpose:</strong>
+    <dd>Determines whether error-detection is enabled for dataset reads.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_edc_check</code> queries the dataset transfer property 
+        list <code>plist</code> to determine whether error detection 
+        is enabled for data read operations. 
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Dataset transfer property list identifier.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns <code>H5Z_ENABLE_EDC</code> or <code>H5Z_DISABLE_EDC</code> 
+        if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_edc_check_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_edc_check_f(prp_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Dataset transfer property list 
+                                        ! identifier 
+  INTEGER, INTENT(OUT)       :: flag    ! EDC flag; possible values
+                                        !    H5Z_DISABLE_EDC_F 
+                                        !    H5Z_ENABLE_EDC_F 
+  INTEGER, INTENT(OUT)       :: hdferr  ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_edc_check_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_external" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetExternal">H5Pget_external</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_external</code>(<em>hid_t</em> <code>plist</code>,
+        <em>unsigned</em> <code>idx</code>,
+        <em>size_t</em> <code>name_size</code>,
+        <em>char</em> <code>*name</code>,
+        <em>off_t</em> <code>*offset</code>,
+        <em>hsize_t</em> <code>*size</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns information about an external file.  
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_external</code> returns information about an external 
+        file.  The external file is specified by its index, <code>idx</code>,
+        which is a number from zero to N-1, where N is the value 
+        returned by <code>H5Pget_external_count</code>.  
+        At most <code>name_size</code> characters are copied into the 
+        <code>name</code> array.  If the external file name is
+        longer than <code>name_size</code> with the null terminator, the
+        return value is not null terminated (similar to <code>strncpy()</code>).
+        <p>
+        If <code>name_size</code> is zero or <code>name</code> is the 
+        null pointer, the external file name is not returned.  
+        If <code>offset</code> or <code>size</code> are null pointers 
+        then the corresponding information is not returned.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier of a dataset creation property list.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned</em> <code>idx</code></td>
+            <td valign="top">IN: External file index.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em>&nbsp;<code>name_size&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Maximum length of <code>name</code> array.</td></tr>
+        <tr>
+		    <td valign="top"><em>char</em> <code>*name</code></td>
+            <td valign="top">OUT: Name of the external file.</td></tr>
+        <tr>
+		    <td valign="top"><em>off_t</em> <code>*offset</code></td>
+            <td valign="top">OUT: Pointer to a location to return an offset value.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t</em> <code>*size</code></td>
+            <td valign="top">OUT: Pointer to a location to return the size of the 
+                external file data.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_external_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_external_f(prp_id, idx, name_size, name, offset,bytes, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id   ! Property list identifier
+  INTEGER, INTENT(IN) :: idx             ! External file index.
+  INTEGER, INTENT(IN) :: name_size       ! Maximum length of name array
+  CHARACTER(LEN=*), INTENT(OUT) :: name  ! Name of an external file
+  INTEGER, INTENT(OUT) :: offset         ! Offset, in bytes, from the 
+                                         ! beginning of the file to the 
+                                         ! location in the file where
+                                         ! the data starts.
+  INTEGER(HSIZE_T), INTENT(OUT) :: bytes ! Number of bytes reserved in 
+                                         ! the file for the data
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_external_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+            <strong>C</strong></td></tr>
+        <tr>
+          <td valign="top">1.6.4</td>
+          <td valign="top">
+            <code>idx</code> parameter type changed to 
+            <em>unsigned</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_external_count" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetExternalCount">H5Pget_external_count</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Pget_external_count</code>(<em>hid_t</em> <code>plist</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns the number of external files for a dataset.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_external_count</code> returns the number of external files 
+        for the specified dataset.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of a dataset creation property list.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns the number of external files if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_external_count_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_external_count_f (prp_id, count, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+  INTEGER, INTENT(OUT) :: count        ! Number of external files for 
+                                       ! the specified dataset
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_external_count_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_family_offset" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetFamilyOffset">H5Pget_family_offset</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_family_offset</code> (
+                        <em>hid_t</em> <code>fapl_id</code>,
+                        <em>hsize_t *</em><code>offset</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves a data offset from the file access property list.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_family_offset</code> retrieves the value of <code>offset</code>
+        from the file access property list <code>fapl_id</code>
+	so that the user application 
+	can retrieve a file handle for low-level access to a particular member 
+	of a family of files.  The file handle is retrieved with a separate call 
+	to <a href="RM_H5F.html#File-GetVfdHandle"><code>H5Fget_vfd_handle</code></a>
+	(or, in special circumstances, to <code>H5FDget_vfd_handle</code>; 
+	see <cite>Virtual File Layer</cite> and <cite>List of VFL Functions</cite>
+	in <a href="TechNotes.html"><cite>HDF5 Technical Notes</cite></a>).
+	<p>
+	The data offset returned in <code>offset</code> is the offset
+	of the data in the HDF5 file that is stored on disk in the selected 
+	member file in a family of files.
+	<p>
+	Use of this function is only appropriate for an HDF5 file written as a 
+	family of files with the <code>FAMILY</code> file driver.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t&nbsp;*</em><code>offset&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Offset in bytes within the HDF5 file.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_fapl_core" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetFaplCore">H5Pget_fapl_core</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_fapl_core</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>size_t</em> *<code>increment</code>,
+                     <em>hbool_t</em> *<code>backing_store</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Queries core file driver properties.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_fapl_core</code> queries the <code>H5FD_CORE</code> 
+    driver properties as set by <code>H5Pset_fapl_core</code>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> *<code>increment</code></td>
+            <td valign="top">OUT: Size, in bytes, of memory increments.</td></tr>
+        <tr>
+		    <td valign="top"><em>hbool_t</em>&nbsp;*<code>backing_store&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Boolean flag indicating whether to write the file
+                contents to disk when the file is closed.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_fapl_core_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_fapl_core_f(prp_id, increment, backing_store, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)  :: prp_id     ! Property list identifier
+  INTEGER(SIZE_T), INTENT(OUT) :: increment ! File block size in bytes
+  LOGICAL, INTENT(OUT) :: backing_store     ! Flag to indicate that entire
+                                            ! file contents are flushed to 
+                                            ! a file with the same name as 
+                                            ! this core file
+  INTEGER, INTENT(OUT) :: hdferr            ! Error code
+                                            ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_fapl_core_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+          <td valign="top" align="left" width="10%">
+            <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+            <strong>C</strong></td>
+          <td valign="top" align="left">
+            &nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+            <strong>Fortran90</strong></td></tr>
+        <tr>
+          <td valign="top">1.6.0</td>
+          <td valign="top">&nbsp;</td>
+          <td valign="top">&nbsp;</td>
+          <td valign="top">
+            The <code>backing_store</code> parameter type
+            changed from <em>INTEGER</em> to <em>LOGICAL</em> 
+            to better match the C API</td></tr>
+        <tr>
+          <td valign="top">1.4.0</td>
+          <td valign="top">Function introduced in this release.</td>
+          <td valign="top">&nbsp;</td>
+          <td valign="top">&nbsp;</td>
+        </tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_fapl_family" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetFaplFamily">H5Pget_fapl_family</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_fapl_family</code> (
+                        <em>hid_t</em> <code>fapl_id</code>,
+                        <em>hsize_t *</em><code>memb_size</code>,
+                        <em>hid_t *</em><code>memb_fapl_id</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns file access property list information.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_fapl_family</code> returns file access property list 
+        for use with the family driver.
+        This information is returned through the output parameters.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em> hsize_t *</em><code>memb_size</code></td>
+            <td valign="top">OUT: Size in bytes of each file member.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t&nbsp;*</em><code>memb_fapl_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Identifier of file access property list for each 
+                    family member.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_fapl_family_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_fapl_family_f(prp_id, imemb_size, memb_plist, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)    :: prp_id    ! Property list identifier
+  INTEGER(HSIZE_T), INTENT(OUT) :: memb_size ! Logical size, in bytes,
+                                             ! of each family member
+  INTEGER(HID_T), INTENT(OUT) :: memb_plist  ! Identifier of the file 
+                                             ! access property list to be
+                                             ! used for each family member
+  INTEGER, INTENT(OUT) :: hdferr             ! Error code
+                                             ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_fapl_family_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_fapl_gass" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetFaplGass">H5Pget_fapl_gass</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_fapl_gass</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>GASS_Info *</em><code>info</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves GASS information.
+  <dt><strong>Description:</strong>
+    <dd>If the file access property list <code>fapl_id</code> is set 
+        for use of the <code>H5FD_GASS</code> driver, 
+        <code>H5Pget_fapl_gass</code> returns the <em>GASS_Info</em>
+        object through the <code>info</code> pointer.
+        <p>
+        The <em>GASS_Info</em> information is copied, so it is valid 
+        only until the file access property list is modified or closed.
+  <dt><strong>Note:</strong>
+    <dd><code>H5Pget_fapl_gass</code> is an experimental function.
+        It is designed for use only when accessing files via the 
+        GASS facility of the Globus environment. 
+        For further information, see 
+        <a href="http://www.globus.org/">http//www.globus.org/</a>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code>,</td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>GASS_Info&nbsp;*</em><code>info&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Pointer to the GASS information structure.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_fapl_mpio" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetFaplMpio">H5Pget_fapl_mpio</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_fapl_mpio</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>MPI_Comm *</em><code>comm</code>,
+                     <em>MPI_Info *</em><code>info</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd> Returns MPI communicator information.
+  <dt><strong>Description:</strong>
+    <dd>If the file access property list is set to the <code>H5FD_MPIO</code> 
+        driver, <code>H5Pget_fapl_mpio</code> returns the MPI communicator and 
+        information through the <code>comm</code> and <code>info</code>
+        pointers, if those values are non-null.
+        <p>
+        Neither <code>comm</code> nor <code>info</code> is copied, 
+        so they are valid only until the file access property list 
+        is either modified or closed.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>MPI_Comm&nbsp;*</em><code>comm&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: MPI-2 communicator.</td></tr>
+        <tr>
+		    <td valign="top"><em>MPI_Info *</em><code>info</code></td>
+            <td valign="top">OUT: MPI-2 info object.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_fapl_mpio_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_fapl_mpio_f(prp_id, comm, info, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+  INTEGER, INTENT(OUT) :: comm         ! Buffer to return communicator 
+  INTEGER, INTENT(IN) :: info          ! Buffer to return info object as
+                                       ! defined in MPI_FILE_OPEN of MPI-2
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_fapl_mpio_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong></dt>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.5</td>
+          <td valign="top">
+		    This function's handling of the MPI Communicator 
+			and Info objects changed at this release. A copy 
+			of each of these objects is now stored in the 
+			property list instead of pointers to each 
+			object.</td></tr>
+	    <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_fapl_mpiposix" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetFaplMpiPosix">H5Pget_fapl_mpiposix</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_fapl_mpiposix</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>MPI_Comm *</em><code>comm</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd> Returns MPI communicator information.
+  <dt><strong>Description:</strong>
+    <dd>If the file access property list is set to the <code>H5FD_MPIO</code> 
+        driver, <code>H5Pget_fapl_mpiposix</code> returns 
+        the MPI communicator through the <code>comm</code> 
+        pointer, if those values are non-null.
+        <p>
+        <code>comm</code> is not copied, so it is valid only 
+        until the file access property list is either modified or closed.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>MPI_Comm&nbsp;*</em><code>comm&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: MPI-2 communicator.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_fapl_mpiposix_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+  INTEGER, INTENT(OUT) :: comm          ! Buffer to return communicator
+  LOGICAL, INTENT(OUT) :: use_gpfs
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5pget_fapl_mpiposix_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top">&nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td>
+			</tr>
+        <tr>
+		  <td valign="top">1.6.1</td>
+          <td valign="top">&nbsp;</td>
+          <td valign="top">&nbsp;</td>
+		  <td valign="top">
+			Fortran subroutine introduced in this release.</td></tr>
+		<tr>
+		  <td valign="top">1.6.0</td>
+		  <td valign="top">Function introduced in this release.<br></td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">&nbsp;</td></tr>
+		<tr>
+		  <td valign="top">1.6.0</td>
+		  <td valign="top">A <code>use_gpfs</code> 
+		    parameter of type <em>hbool_t</em> has been added.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">&nbsp;</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_fapl_multi" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetFaplMulti">H5Pget_fapl_multi</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_fapl_multi</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>const H5FD_mem_t *</em><code>memb_map</code>,
+                     <em>const hid_t *</em><code>memb_fapl</code>,
+                     <em>const char **</em><code>memb_name</code>,
+                     <em>const haddr_t *</em><code>memb_addr</code>,
+                     <em>hbool_t *</em><code>relax</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns information about the multi-file access property list.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_fapl_multi</code> returns information about the 
+        multi-file access property list.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;H5FD_mem_t&nbsp;*</em><code>memb_map&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Maps memory usage types to other memory usage types.</td></tr>
+        <tr>
+		    <td valign="top"><em>const hid_t *</em><code>memb_fapl</code></td>
+            <td valign="top">OUT: Property list for each memory usage type.</td></tr>
+        <tr>
+		    <td valign="top"><em>const char **</em><code>memb_name</code></td>
+            <td valign="top">OUT: Name generator for names of member files.</td></tr>
+        <tr>
+		    <td valign="top"><em>const haddr_t *</em><code>memb_addr</code></td>
+            <td valign="top">OUT:</td></tr>
+        <tr>
+		    <td valign="top"><em>hbool_t *</em><code>relax</code></td>
+            <td valign="top">OUT: Allows read-only access to incomplete file sets 
+                when <code>TRUE</code>.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_fapl_multi_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_fapl_multi_f(prp_id, memb_map, memb_fapl, memb_name,
+                               memb_addr, relax, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T),INTENT(IN)   :: prp_id    ! Property list identifier
+
+  INTEGER,DIMENSION(0:H5FD_MEM_NTYPES_F-1),INTENT(OUT)          :: memb_map
+  INTEGER(HID_T),DIMENSION(0:H5FD_MEM_NTYPES_F-1),INTENT(OUT)   :: memb_fapl
+  CHARACTER(LEN=*),DIMENSION(0:H5FD_MEM_NTYPES_F-1),INTENT(OUT) :: memb_name
+  REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT)           :: memb_addr
+               ! Numbers in the interval [0,1) (e.g. 0.0 0.1 0.5 0.2 0.3 0.4)
+               ! real address in the file will be calculated as X*HADDR_MAX 
+
+  LOGICAL, INTENT(OUT) :: relax
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code
+                                           ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_fapl_multi_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_fapl_srb" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetFaplSrb">H5Pget_fapl_srb</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_fapl_srb</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>SRB_Info *</em><code>info</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves SRB information.
+  <dt><strong>Description:</strong>
+    <dd>If the file access property list <code>fapl_id</code> is set 
+        for use of the <code>H5FD_SRB</code> driver, 
+        <code>H5Pget_fapl_srb</code> returns the <em>SRB_Info</em>
+        object through the <code>info</code> pointer.
+        <p>
+        The <em>SRB_Info</em> information is copied, so it is valid 
+        only until the file access property list is modified or closed.
+  <dt><strong>Note:</strong>
+    <dd><code>H5Pset_fapl_gass</code> is an experimental function.
+        It is designed for use only when accessing files via the 
+        Storage Resource Broker (SRB).  For further information, see 
+        <a href="http://www.npaci.edu/Research/DI/srb/">http//www.npaci.edu/Research/DI/srb/</a>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>SRB_Info&nbsp;*</em><code>info&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Pointer to the SRB information structure.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_fapl_stream" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetFaplStream">H5Pget_fapl_stream</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_fapl_stream</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>H5FD_stream_fapl_t *</em><code>fapl</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns the streaming I/O driver settings.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_fapl_stream</code> returns the file access properties 
+        set for the use of the streaming I/O driver.
+        <p>
+        <code>H5Pset_fapl_stream</code> and <code>H5Pget_fapl_stream</code> 
+        are not intended for use in a parallel environment.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5FD_stream_fapl_t&nbsp;*</em><code>fapl&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: The streaming I/O file access property list.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_fclose_degree" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetFcloseDegree">H5Pget_fclose_degree</a> 
+  <dt><strong>Signature:</strong> 
+  <dd><em>herr_t</em> <code>H5Pget_fclose_degree</code>(<em>hid_t</em> <code>fapl_id</code>, 
+    <em>H5F_close_degree_t *</em><code>fc_degree</code>) 
+  <dt><strong>Purpose:</strong> 
+  <dd>Returns the file close degree. 
+  <dt><strong>Description:</strong> 
+  <dd><code>H5Pget_fclose_degree</code> returns the current setting of the file 
+    close degree property <code>fc_degree</code> in the file access property list 
+    <code>fapl_id</code>.  
+    <p> The value of <code>fc_degree</code> determines how aggressively <code>H5Fclose</code> 
+      deals with objects within a file that remain open when <code>H5Fclose</code> 
+      is called to close that file.  <code>fc_degree</code> can have any one of 
+      four valid values as described above in <a href="#Property-SetFcloseDegree"><code>H5Pset_fclose_degree</code></a>. 
+  <dt><strong>Parameters:</strong> 
+    <ul><table>
+      <tr>
+	      <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+          <td valign="top">IN: File access property list identifier.</td></tr>
+      <tr>
+	      <td valign="top"><em>H5F_close_degree_t&nbsp;*</em><code>fc_degree&nbsp;&nbsp;&nbsp;&nbsp;</code></td> 
+          <td valign="top">OUT: Pointer to a location to which to return the file close degree 
+            property, the value of <code>fc_degree</code>.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong> 
+  <dd>Returns a non-negative value if successful. Otherwise returns a negative 
+    value. 
+  <dt><strong>Fortran90 Interface:</strong> h5pget_fclose_degree_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_fclose_degree_f(fapl_id, degree, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: fapl_id ! File access property list identifier
+  INTEGER, INTENT(OUT) :: degree        ! Info about file close behavior
+                                        ! Possible values:
+                                        !    H5F_CLOSE_DEFAULT_F
+                                        !    H5F_CLOSE_WEAK_F
+                                        !    H5F_CLOSE_SEMI_F
+                                        !    H5F_CLOSE_STRONG_F
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_fclose_degree_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_fill_time" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetFillTime">H5Pget_fill_time</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pget_fill_time</code>(<em>hid_t</em> <code>plist_id</code>,
+            <em>H5D_fill_time_t *</em><code>fill_time</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves the time when fill value are written to a dataset.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_fill_time</code> examines the dataset creation  
+	property list <code>plist_id</code> to determine when fill values 
+        are to be written to a dataset.  
+        <p>
+	Valid values returned in <code>fill_time</code> are as follows:
+	<table border=0 >
+           <tr valign="top"><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+	     <code>H5D_FILL_TIME_IFSET</code>&nbsp;&nbsp; 
+             </td><td>
+	     Fill values are written to the dataset when storage space is allocated 
+	     only if there is a user-defined fill value, i.e., one set with 
+	     <a href="#Property-SetFillValue">H5Pset_fill_value</a>.
+	     &nbsp;&nbsp;(Default)
+	   </td></tr><tr valign="top"><td>&nbsp;</td><td>
+	     <code>H5D_FILL_TIME_ALLOC</code>&nbsp;&nbsp; 
+             </td><td>
+	     Fill values are written to the dataset when storage space is allocated.
+	   </td></tr><tr valign="top"><td>&nbsp;</td><td>
+             <code>H5D_FILL_TIME_NEVER</code>
+             </td><td>
+             Fill values are never written to the dataset.
+ 	</td></tr></table>
+  <dt><strong>Note:</strong>
+    <dd><code>H5Pget_fill_time</code> is designed to work in coordination 
+        with the dataset fill value and 
+	dataset storage allocation time properties, retrieved with the functions 
+	<code>H5Pget_fill_value</code> and <code>H5Pget_alloc_time</code>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist_id</code></td>
+            <td valign="top">IN: Dataset creation property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5D_fill_time_t&nbsp;*</em><code>fill_time&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Setting for the timing of writing fill values to the dataset.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_fill_time_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_fill_time_f(plist_id, flag, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset creation property 
+                                         ! list identifier
+  INTEGER(HSIZE_T), INTENT(OUT) :: flag  ! Fill time flag
+                                         ! Possible values are:
+                                         !    H5D_FILL_TIME_ERROR_F
+                                         !    H5D_FILL_TIME_ALLOC_F
+                                         !    H5D_FILL_TIME_NEVER_F
+  INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_fill_time_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_fill_value" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetFillValue">H5Pget_fill_value</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_fill_value</code>(<em>hid_t</em> <code>plist_id</code>,
+        <em>hid_t</em> <code>type_id</code>,
+        <em>void *</em><code>value</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves a dataset fill value.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_fill_value</code> returns the dataset
+        fill value defined in the dataset creation property list
+        <code>plist_id</code>.
+        <p>
+	The fill value is returned through the <code>value</code>
+        pointer and will be converted to the datatype specified 
+        by <code>type_id</code>.  
+        This datatype may differ from the 
+        fill value datatype in the property list, 
+	but the HDF5 library must be able to convert between the 
+	two datatypes.  
+        <p>
+        If the fill value is undefined, 
+	i.e., set to <code>NULL</code> in the property list,
+	<code>H5Pget_fill_value</code> will return an error.  
+	<code>H5Pfill_value_defined</code> should be used to 
+	check for this condition before 
+	<code>H5Pget_fill_value</code> is called.
+        <p>
+        Memory must be allocated by the calling application.  
+  <dt><strong>Note:</strong>
+    <dd><code>H5Pget_fill_value</code> is designed to coordinate  
+	with the dataset storage allocation time and 
+	fill value write time properties, which can be retrieved 
+	with the functions <code>H5Pget_alloc_time</code> 
+	and <code>H5Pget_fill_time</code>, respectively.
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Dataset creation property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code>,</td>
+            <td valign="top">IN: Datatype identifier for the value passed 
+	        via <code>value</code>.</td></tr>
+        <tr><td valign="top"><em>void *</em><code>value</code></td>
+            <td valign="top">OUT: Pointer to buffer to contain the returned fill value.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_fill_value_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_fill_value_f(prp_id, type_id, fillvalue, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of fill
+                                        ! value datatype (in memory) 
+  TYPE(VOID), INTENT(IN) :: fillvalue   ! Fillvalue
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+ 
+END SUBROUTINE h5pget_fill_value_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_filter" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetFilter">H5Pget_filter</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>H5Z_filter_t</em> <code>H5Pget_filter</code>(<em>hid_t</em> <code>plist</code>,
+        <em>int</em> <code>filter_number</code>,
+        <em>unsigned int *</em><code>flags</code>,
+        <em>size_t *</em><code>cd_nelmts</code>,
+        <em>unsigned int *</em><code>cd_values</code>,
+        <em>size_t</em> <code>namelen</code>,
+        <em>char</em> <code>name[]</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns information about a filter in a pipeline.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_filter</code> returns information about a
+        filter, specified by its filter number, in a filter pipeline,
+        specified by the property list with which it is associated.
+        <p>
+        If <code>plist</code> is a dataset creation property list, 
+        the pipeline is a permanent filter pipeline; 
+        if <code>plist</code> is a dataset transfer property list, 
+        the pipeline is a transient filter pipeline.
+        <p>
+        On input, <code>cd_nelmts</code> indicates the number of entries 
+        in the <code>cd_values</code> array, as allocated by the caller;
+        on return,<code>cd_nelmts</code> contains the number of values 
+        defined by the filter. 
+        <p>
+        <code>filter_number</code> is a value between zero and 
+        <em>N</em>-1, as described in 
+        <a href="#Property-GetNFilters"><code>H5Pget_nfilters</code></a>.
+        The function will return a negative value if the filter number 
+        is out of range.  
+        <p>
+        If <code>name</code> is a pointer to an array of at least 
+        <code>namelen</code> bytes, the filter name will be copied 
+        into that array.  The name will be null terminated if 
+        <code>namelen</code> is large enough.  The filter name returned 
+        will be the name appearing in the file, the name registered
+        for the filter, or an empty string.  
+        <p>
+        The structure of the <code>flags</code> argument is discussed
+        in <a href="#Property-SetFilter"><code>H5Pset_filter</code></a>.
+  <dt><strong>Note:</strong>
+    <dd>This function currently supports only the permanent filter
+        pipeline; <code>plist</code> must be a dataset creation property 
+        list.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>int</em> <code>filter_number</code></td>
+            <td valign="top">IN: Sequence number within the filter pipeline of 
+                the filter for which information is sought.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned int *</em><code>flags</code></td>
+            <td valign="top">OUT: Bit vector specifying certain general properties
+                of the filter.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t *</em><code>cd_nelmts</code></td>
+            <td valign="top">IN/OUT: Number of elements in <code>cd_values</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned&nbsp;int&nbsp;*</em><code>cd_values&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Auxiliary data for the filter.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>namelen</code></td>
+            <td valign="top">IN: Anticipated number of characters in <code>name</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>char</em> <code>name[]</code></td>
+            <td valign="top">OUT: Name of the filter.</td></tr>
+    </table></ul>
+<!-- NEW PAGE -->
+  <dt><strong>Returns:</strong>
+    <dd>Returns the filter identifier if successful:
+         <center>
+        <table width=75%>
+        <tr valign=top align=left><td>
+            <code>H5Z_FILTER_DEFLATE</code> 
+            </td><td>
+            Data compression filter, employing the gzip algorithm 
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5Z_FILTER_SHUFFLE</code> 
+            </td><td>
+            Data shuffling filter 
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5Z_FILTER_FLETCHER32&nbsp;&nbsp;</code> 
+            </td><td>
+            Error detection filter, employing the Fletcher32 checksum algorithm 
+        </td></tr>	
+        <tr valign=top align=left><td>
+            <code>H5Z_FILTER_SZIP</code> 
+            </td><td>
+            Data compression filter, employing the SZIP algorithm 
+        </td></tr>
+	</table>
+	</center>
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_filter_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_filter_f(prp_id, filter_number, flags, cd_nelmts, 
+                           cd_values, namelen, name, filter_id, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id    ! Property list identifier
+  INTEGER, INTENT(IN) :: filter_number    ! Sequence number within the filter
+                                          ! pipeline of the filter for which
+                                          ! information is sought
+  INTEGER, DIMENSION(*), INTENT(OUT) :: cd_values  
+                                          ! Auxiliary data for the filter
+  INTEGER, INTENT(OUT) :: flags           ! Bit vector specifying certain 
+                                          ! general properties of the filter
+  INTEGER(SIZE_T), INTENT(INOUT) :: cd_nelmts      
+                                          ! Number of elements in cd_values
+  INTEGER(SIZE_T), INTENT(IN) :: namelen  ! Anticipated number of characters 
+                                          ! in name
+  CHARACTER(LEN=*), INTENT(OUT) :: name   ! Name of the filter
+  INTEGER, INTENT(OUT) :: filter_id       ! Filter identification number
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_filter_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.4</td>
+          <td valign="top">
+		    <code>filter</code> parameter type changed to 
+			<em>unsigned</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_filter_by_id" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetFilterById">H5Pget_filter_by_id</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_filter_by_id</code>(
+            <em>hid_t</em> <code>plist_id</code>,
+            <em>H5Z_filter_t</em> <code>filter</code>,
+            <em>unsigned int *</em><code>flags</code>,
+            <em>size_t *</em><code>cd_nelmts</code>,
+            <em>unsigned int</em> <code>cd_values[]</code>,
+            <em>size_t</em> <code>namelen</code>,
+            <em>char </em><code>name[]</code>
+            )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns information about the specified filter.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_filter_by_id</code> returns information about the
+        filter specified in <code>filter</code>, a filter identifier. 
+	<p>
+	<code>plist_id</code> must identify a dataset creation property list
+	and <code>filter</code> will be in a permanent filter pipeline.
+	<p>
+	The <code>filter</code> and <code>flags</code> parameters are used 
+	in the same manner as described in the discussion of
+	<a href="#Property-SetFilter"><code>H5Pset_filter</code></a>.
+	<p>
+	Aside from the fact that they are used for output, the 
+	parameters <code>cd_nelmts</code> and <code>cd_values[]</code> are 
+        used in the same manner as described in the discussion 
+	of <a href="#Property-SetFilter"><code>H5Pset_filter</code></a>.
+	On input, the <code>cd_nelmts</code> parameter indicates the 
+	number of entries in the <code>cd_values[]</code> array
+	allocated by the calling program; on exit it contains the
+        number of values defined by the filter.
+ 	<p>
+	On input, the <code>name_len</code> parameter indicates the 
+	number of characters allocated for the filter name 
+	by the calling program in the array <code>name[]</code>.
+	On exit it contains the length in characters of name of the filter.
+	On exit <code>name[]</code> contains the name of the filter
+        with one character of the name in each element of the array.
+	<p>
+        If the filter specified in <code>filter</code> is not
+        set for the property list, an error will be returned
+	and <code>H5Pget_filter_by_id</code> will fail.
+ <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist_id</code></td>
+            <td valign="top">IN: Property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5Z_filter_t</em> <code>filter</code></td>
+            <td valign="top">IN: Filter identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned int</em> <code>flags</code></td>
+            <td valign="top">OUT:  Bit vector specifying certain general properties
+                of the filter.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>cd_nelmts</code></td>
+            <td valign="top">IN/OUT: Number of elements in <code>cd_values</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;unsigned&nbsp;int</em>&nbsp;<code>cd_values[]&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Auxiliary data for the filter.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>namelen</code></td>
+            <td valign="top">IN/OUT: Length of filter name and 
+	        number of elements in <code>name[]</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>char *</em><code>name[]</code></td>
+            <td valign="top">OUT: Name of filter.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<!-- NEW PAGE -->
+  <dt><strong>Fortran90 Interface:</strong> h5pget_filter_by_id_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_filter_by_id_f(prp_id, filter_id, flags, cd_nelmts,
+                                 cd_values, namelen, name, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id      ! Property list identifier
+  INTEGER, INTENT(IN)        :: filter_id   ! Filter identifier
+  INTEGER(SIZE_T), INTENT(INOUT)     :: cd_nelmts  
+                                            ! Number of elements in cd_values
+  INTEGER, DIMENSION(*), INTENT(OUT) :: cd_values  
+                                            ! Auxiliary data for the filter
+  INTEGER, INTENT(OUT)          :: flags    ! Bit vector specifying certain 
+                                            ! general properties of the filter
+  INTEGER(SIZE_T), INTENT(IN)   :: namelen  ! Anticipated number of characters 
+                                            ! in name
+  CHARACTER(LEN=*), INTENT(OUT) :: name     ! Name of the filter
+  INTEGER, INTENT(OUT)          :: hdferr   ! Error code
+                                            ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_filter_by_id_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_gc_references" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetGCReferences">H5Pget_gc_references</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_gc_references</code>(<em>hid_t</em> <code>plist</code>,
+        <em>unsigned</em> *<code>gc_ref</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns garbage collecting references setting.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_gc_references</code> returns the current setting 
+        for the garbage collection references property from 
+        the specified file access property list.  
+        The garbage collection references property is set 
+        by <a href="#Property-SetGCReferences">H5Pset_gc_references</a>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned</em>&nbsp;<code>gc_ref&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Flag returning the state of reference garbage collection.
+                A returned value of <code>1</code> indicates that 
+                garbage collection is on while 
+                <code>0</code> indicates that garbage collection is off.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_gc_references_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_gc_references_f (prp_id, gc_reference, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+  INTEGER, INTENT(OUT) :: gc_reference ! The flag for garbage collecting
+                                       ! references for the file
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_gc_references_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_hyper_cache" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetHyperCache">H5Pget_hyper_cache</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_hyper_cache</code>(<em>hid_t</em> <code>plist</code>,
+        <em>unsigned</em> *<code>cache</code>,
+        <em>unsigned</em> *<code>limit</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>[<strong>NOTE:</strong>
+        <span class="1_4_compat">
+	This function is deprecated in HDF5 Release 1.6 
+	and will eventually be removed from the HDF5 distribution.
+        It is provided in this release only to enable backward compatibility
+        with HDF5 Releases 1.4.<i>x</i> 
+	and is enabled only if the HDF5 library is configured 
+	with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>;
+        the function is not enabled in the binaries distributed by NCSA.
+	</span>]
+        <p>
+        Returns information regarding the caching of hyperslab blocks during I/O.
+  <dt><strong>Description:</strong>
+    <dd>Given a dataset transfer property list, <code>H5Pget_hyper_cache</code> 
+        returns instructions regarding the caching of hyperslab blocks during I/O.
+        These parameters are set with the <code>H5Pset_hyper_cache</code> function.
+  <dt><strong>Parameters:</strong>
+    <dl>
+        <dt><em>hid_t</em> <code>plist</code>
+            <dd>IN: Dataset transfer property list identifier.
+        <dt><em>unsigned</em> *<code>cache</code>
+            <dd>OUT: A flag indicating whether caching is 
+                set to on (<code>1</code>) or off (<code>0</code>).
+        <dt><em>unsigned</em> *<code>limit</code>
+            <dd>OUT: Maximum size of the hyperslab block to cache. 
+                <code>0</code> (zero) indicates no limit.
+    </dl>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_hyper_cache_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_hyper_cache_f(prp_id, cache, limit, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+  INTEGER, INTENT(OUT) :: cache        !
+  INTEGER, INTENT(OUT) :: limit        ! Maximum size of the hyperslab 
+                                       ! block to cache 
+                                       ! 0 (zero) indicates no limit
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_hyper_cache_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_hyper_vector_size" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetHyperVectorSize">H5Pget_hyper_vector_size</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_hyper_vector_size</code>(<em>hid_t</em> <code>dxpl_id</code>,
+        <em>size_t *</em><code>vector_size</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves number of I/O vectors to be read/written in hyperslab I/O.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_hyper_vector_size</code> retrieves the number of  
+	I/O vectors to be accumulated in memory before being issued  
+	to the lower levels of the HDF5 library for reading or writing the 
+	actual data.
+        <p>
+	The number of I/O vectors set in the dataset transfer property list 
+	<code>dxpl_id</code> is returned in <code>vector_size</code>.
+	Unless the default value is in use, <code>vector_size</code>
+	was previously set with a call to 
+	<a href="#Property-SetHyperVectorSize">H5Pset_hyper_vector_size</a>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dxpl_id</code></td>
+            <td valign="top">IN: Dataset transfer property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t&nbsp;*</em><code>vector_size&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Number of I/O vectors to accumulate in memory for I/O operations.</td></tr> 
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_hyper_vector_size_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_hyper_vector_size_f(plist_id, size, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset transfer property list 
+                                         ! identifier
+  INTEGER(SIZE_T), INTENT(OUT) :: size   ! Vector size 
+  INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_hyper_vector_size_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_istore_k" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetIstoreK">H5Pget_istore_k</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pget_istore_k</code>(<em>hid_t</em> <code>plist</code>,
+            <em>unsigned *</em> <code>ik</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Queries the 1/2 rank of an indexed storage B-tree.  
+  <dt><strong>Description:</strong>
+        <dd><code>H5Pget_istore_k</code> queries the 1/2 rank of 
+            an indexed storage B-tree.  
+            The argument <code>ik</code> may be the null pointer (NULL).  
+            This function is only valid for file creation property lists.
+            <p>
+            See <a href="#Property-SetIstoreK">H5Pset_istore_k</a> for details.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of property list to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned *</em> <code>ik</code></td>
+            <td valign="top">OUT: Pointer to location to return the chunked storage B-tree 1/2 rank.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_istore_k_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_istore_k_f(prp_id, ik, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+  INTEGER, INTENT(OUT) :: ik           ! 1/2 rank of chunked storage B-tree
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_istore_k_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.4</td>
+          <td valign="top">
+		    <code>ik</code> parameter type changed to 
+			<em>unsigned</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_layout" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetLayout">H5Pget_layout</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>H5D_layout_t</em> <code>H5Pget_layout</code>(<em>hid_t</em> <code>plist</code>)
+  <dt><strong>Purpose:</strong>
+    <dd>Returns the layout of the raw data for a dataset.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_layout</code> returns the layout of the raw data for 
+        a dataset.  This function is only valid for dataset creation 
+        property lists.  
+        <p>
+        Note that a compact storage layout may affect writing data to
+        the dataset with parallel applications.  See note in
+	<a href="RM_H5D.html#Dataset-Write">H5Dwrite</a>
+        documentation for details.
+	
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier for property list to query.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns the layout type (a non-negative value)  
+        of a dataset creation property list if successful.  
+	Valid return values are:
+            <ul> <dl>
+                <dt>H5D_COMPACT 
+                    <dd>Raw data is stored in the object header in the file.
+                <dt>H5D_CONTIGUOUS
+                    <dd>Raw data is stored separately from the object header in 
+                        one contiguous chunk in the file.
+                <dt>H5D_CHUNKED
+                    <dd>Raw data is stored separately from the object header in 
+                        chunks in separate locations in the file.
+            </dl> </ul>	
+	<p>
+        Otherwise, returns a negative value indicating failure.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_layout_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_layout_f (prp_id, layout, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+  INTEGER, INTENT(OUT) :: layout       ! Type of storage layout for raw data
+                                       ! possible values are:
+                                       !    H5D_COMPACT_F
+                                       !    H5D_CONTIGUOUS_F
+                                       !    H5D_CHUNKED_F
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_layout_f 
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_meta_block_size" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetMetaBlockSize">H5Pget_meta_block_size</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_meta_block_size</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>hsize_t *</em><code>size</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns the current metadata block size setting.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_meta_block_size</code> returns the current 
+        minimum size, in bytes, of new metadata block allocations. 
+        This setting is retrieved from the file access property list
+        <code>fapl_id</code>. 
+        <p>
+        This value is set by 
+        <a href="#Property-SetMetaBlockSize">H5Pset_meta_block_size</a>
+        and is retrieved from the file access property list
+        <code>fapl_id</code>. 
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>fapl_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t *</em><code>size</code></td>
+            <td valign="top">OUT: Minimum size, in bytes, of metadata block allocations.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_meta_block_size_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_meta_block_size_f(plist_id, size, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list 
+                                         ! identifier
+  INTEGER(HSIZE_T), INTENT(OUT) :: size  ! Metadata block size
+  INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_meta_block_size_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_multi_type" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetMultiType">H5Pget_multi_type</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_multi_type</code> (
+                        <em>hid_t</em> <code>fapl_id</code>,
+                        <em>H5FD_mem_t *</em><code>type</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves type of data property for <code>MULTI</code> driver.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_multi_type</code> retrieves the type of data setting from the
+        file access or data transfer property list <code>fapl_id</code>.
+	This enables a user application to specify the type of data the
+        application wishes to access so that the application 
+	can retrieve a file handle for low-level access to the particular member 
+	of a set of <code>MULTI</code> files in which that type of data is stored.  
+	The file handle is retrieved with a separate call 
+	to <a href="RM_H5F.html#File-GetVfdHandle"><code>H5Fget_vfd_handle</code></a>
+	(or, in special circumstances, to <code>H5FDget_vfd_handle</code>; 
+	see <cite>Virtual File Layer</cite> and <cite>List of VFL Functions</cite>
+	in <a href="TechNotes.html"><cite>HDF5 Technical Notes</cite></a>).
+	<p>
+	The type of data returned in <code>type</code> will be one of those
+	listed in the discussion of the <code>type</code> parameter in the the 
+	description of the function 
+	<a href="#Property-SetMultiType"><code>H5Pset_multi_type</code></a>.
+	<p>
+	Use of this function is only appropriate for an HDF5 file written 
+	as a set of files with the <code>MULTI</code> file driver.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list or data transfer property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5FD_mem_t&nbsp;*</em><code>type&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Type of data.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_nfilters" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetNFilters">H5Pget_nfilters</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Pget_nfilters</code>(<em>hid_t</em> <code>plist</code>)
+  <dt><strong>Purpose:</strong>
+    <dd>Returns the number of filters in the pipeline.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_nfilters</code> returns the number of filters 
+        defined in the filter pipeline associated with the property list 
+        <code>plist</code>.
+        <p>
+        In each pipeline, the filters are numbered from
+        0 through <em>N</em>-1, where <em>N</em> is the value returned
+        by this function. During output to the file, the filters are 
+        applied in increasing order; during input from the file, they
+        are applied in decreasing order.
+        <p>
+        <code>H5Pget_nfilters</code> returns the number of filters 
+        in the pipeline, including zero (<code>0</code>) if there 
+        are none.
+  <dt><strong>Note:</strong>
+    <dd>This function currently supports only the permanent filter
+        pipeline; <code>plist_id</code> must be a dataset creation 
+        property list.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Property list identifier.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns the number of filters in the pipeline if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_nfilters_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_nfilters_f(prp_id, nfilters, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id   ! Dataset creation property 
+                                         ! list identifier 
+  INTEGER, INTENT(OUT) :: nfilters       ! The number of filters in 
+                                         ! the pipeline
+  INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_nfilters_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_nprops" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetNProps">H5Pget_nprops</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Pget_nprops</code>(
+               <em>hid_t</em> <code>id</code>,
+               <em>size_t *</em><code>nprops</code>
+	)
+
+  <dt><strong>Purpose:</strong>
+    <dd>Queries number of properties in property list or class.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_nprops</code> retrieves the number of properties in a 
+    property list or class.  
+    If a property class identifier is given, the number of registered  
+    properties in the class is returned in <code>nprops</code>.  
+    If a property list identifier is given, the current number of 
+    properties in the list is returned in <code>nprops</code>.
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>id</code></td>
+        <td>IN: Identifier of property object to query</td></tr>
+    <tr>
+        <td><em>size_t&nbsp;*</em><code>nprops&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>OUT: Number of properties in object</td></tr>
+    </table></ul>
+
+  <dt><strong>Returns:</strong>
+    <dd>Success: a non-negative value
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong> h5pget_nprops_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_nprops_f(prp_id, nprops, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id    ! Property list identifier 
+  INTEGER(SIZE_T), INTENT(OUT) :: nprops  ! Number of properties
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_nprops_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_preserve" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetPreserve">H5Pget_preserve</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Pget_preserve</code>(<em>hid_t</em> <code>plist</code>)
+  <dt><strong>Purpose:</strong>
+    <dd>Checks status of the dataset transfer property list.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_preserve</code> checks the status of the 
+        dataset transfer property list.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier for the dataset transfer property list.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns TRUE or FALSE if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_preserve_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_preserve_f(prp_id, flag, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id   ! Dataset transfer property 
+                                         ! list identifier 
+  LOGICAL, INTENT(OUT)       :: flag     ! Status of for the dataset 
+                                         ! transfer property list 
+  INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_preserve_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    The <code>flag</code> parameter was changed from 
+			<em>INTEGER</em> to <em>LOGICAL</em> to better 
+			match the C API.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_sieve_buf_size" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetSieveBufSize">H5Pget_sieve_buf_size</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_sieve_buf_size</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>hsize_t *</em><code>size</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd> Returns maximum data sieve buffer size.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_sieve_buf_size</code> retrieves, <code>size</code>,
+        the current maximum size of the data sieve buffer.
+        <p>
+        This value is set by 
+        <a href="#Property-SetSieveBufSize">H5Pset_sieve_buf_size</a>
+        and is retrieved from the file access property list
+        <code>fapl_id</code>. 
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>fapl_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t *</em><code>size</code></td>
+            <td valign="top">IN: Maximum size, in bytes, of data sieve buffer.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_sieve_buf_size_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_sieve_buf_size_f(plist_id, size, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list 
+                                         ! identifier
+  INTEGER(SIZE_T), INTENT(OUT) :: size   ! Sieve buffer size 
+  INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_sieve_buf_size_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+			</tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">The <code>size</code> 
+		    parameter has changed from type <em>hsize_t</em> 
+			to <em>size_t</em>.</td></tr>
+		<tr>
+		  <td valign="top">1.4.0</td>
+		  <td valign="top">Function introduced in this release.</td>
+		</tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_size" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetSize">H5Pget_size</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Pget_size</code>(
+               <em>hid_t</em> <code>id</code>,
+               <em>const char *</em><code>name</code>,
+               <em>size_t *</em><code>size</code>
+		)
+
+  <dt><strong>Purpose:</strong>
+    <dd>Queries the size of a property value in bytes.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_size</code> retrieves the size of a 
+    property's value in bytes.  This function operates on both 
+    property lists and property classes
+	
+    <p>
+    Zero-sized properties are allowed and return <code>0</code>.  
+	
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>id</code></td>
+        <td>IN: Identifier of property object to query</td></tr>
+    <tr>
+        <td><em>const&nbsp;char&nbsp;*</em><code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>IN: Name of property to query</td></tr>
+    <tr>
+        <td><em>size_t *</em><code>size</code></td>
+        <td>OUT: Size of property in bytes</td></tr>
+    </table></ul>
+
+  <dt><strong>Returns:</strong>
+    <dd>Success: a non-negative value
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong> h5pget_size_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_size_f(prp_id, name, size, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to query
+  INTEGER(SIZE_T), INTENT(OUT) :: size  ! Size in bytes
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_size_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_sizes" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetSizes">H5Pget_sizes</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pget_sizes</code>(<em>hid_t</em> <code>plist</code>,
+            <em>size_t *</em> <code>sizeof_addr</code>,
+            <em>size_t *</em> <code>sizeof_size</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves the size of the offsets and lengths used in an HDF5 file.  
+  <dt><strong>Description:</strong>
+        <dd><code>H5Pget_sizes</code> retrieves the size of the offsets 
+            and lengths used in an HDF5 file.  
+            This function is only valid for file creation property lists.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier of property list to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t&nbsp;*</em>&nbsp;<code>size&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Pointer to location to return offset size in bytes.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t *</em> <code>size</code></td>
+            <td valign="top">OUT: Pointer to location to return length size in bytes.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_sizes_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_sizes_f(prp_id, sizeof_addr, sizeof_size, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+  INTEGER(SIZE_T), DIMENSION(:), INTENT(OUT) :: sizeof_addr
+                                        ! Size of an object address in bytes
+  INTEGER(SIZE_T), DIMENSION(:), INTENT(OUT) :: sizeof_size 
+                                        ! Size of an object in bytes
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_sizes_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_small_data_block_size" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetSmallData">H5Pget_small_data_block_size</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_small_data_block_size</code>(<em>hid_t</em> <code>fapl_id</code>,
+        <em>hsize_t *</em><code>size</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves the current small data block size setting.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_small_data_block_size</code> retrieves the 
+        current setting for the size of the small data block.
+        <p>
+        If the returned value is zero (<code>0</code>), the small data 
+        block mechanism has been disabled for the file.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>fapl_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t *</em><code>size</code></td>
+            <td valign="top">OUT: Maximum size, in bytes, of the small data block.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_small_data_block_size_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_small_data_block_size_f(plist_id, size, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist_id  ! File access property list 
+                                          ! identifier
+  INTEGER(HSIZE_T), INTENT(OUT) :: size   ! Small raw data block size
+  INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_small_data_block_size_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.4</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_sym_k" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetSymK">H5Pget_sym_k</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pget_sym_k</code>(<em>hid_t</em> <code>plist</code>,
+            <em>unsigned *</em> <code>ik</code>,
+            <em>unsigned *</em> <code>lk</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves the size of the symbol table B-tree 1/2 rank 
+        and the symbol table leaf node 1/2 size.
+  <dt><strong>Description:</strong>
+        <dd><code>H5Pget_sym_k</code> retrieves the size of the 
+            symbol table B-tree 1/2 rank and the symbol table leaf 
+            node 1/2 size.  This function is only valid for file creation 
+            property lists.  If a parameter valued is set to NULL, that
+            parameter is not retrieved.  See the description for 
+            <a href="#Property-SetSymK">H5Pset_sym_k</a> for more 
+            information.  
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Property list to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned *</em> <code>ik</code></td>
+            <td valign="top">OUT: Pointer to location to return the symbol table's B-tree 1/2 rank.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned *</em> <code>size</code></td>
+            <td valign="top">OUT: Pointer to location to return the symbol table's leaf node 1/2 size.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_sym_k_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_sym_k_f(prp_id, ik, lk, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+  INTEGER, INTENT(OUT) :: ik            ! Symbol table tree rank
+  INTEGER, INTENT(OUT) :: lk            ! Symbol table node size
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_sym_k_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.4</td>
+          <td valign="top">
+		    <code>ik</code> parameter type changed to 
+			<em>unsigned</em></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    The <code>ik</code> parameter has changed 
+			from type <em>int</em> to <em>unsigned</em></td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_userblock" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetUserblock">H5Pget_userblock</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pget_userblock</code>(<em>hid_t</em> <code>plist</code>,
+            <em>hsize_t *</em> <code>size</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves the size of a user block.
+  <dt><strong>Description:</strong>
+        <dd><code>H5Pget_userblock</code> retrieves the size of a user block 
+            in a file creation property list.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier for property list to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t&nbsp;*</em>&nbsp;<code>size&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Pointer to location to return user-block size.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_userblock_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_userblock_f(prp_id, block_size, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id   ! Property list identifier
+  INTEGER(HSIZE_T), DIMENSION(:), INTENT(OUT) ::  block_size 
+                                         ! Size of the user-block in bytes
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_userblock_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_version" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetVersion">H5Pget_version</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pget_version</code>(<em>hid_t</em> <code>plist</code>,
+            <em>unsigned *</em> <code>super</code>,
+            <em>unsigned *</em> <code>freelist</code>,
+            <em>unsigned *</em> <code>stab</code>,
+            <em>unsigned *</em> <code>shhdr</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Retrieves the version information of various objects for 
+        a file creation property list.  
+  <dt><strong>Description:</strong>
+        <dd><code>H5Pget_version</code> retrieves the version information of various objects
+            for a file creation property list.  Any pointer parameters which are
+            passed as NULL are not queried.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier of the file creation property list.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned *</em> <code>super</code></td>
+            <td valign="top">OUT: Pointer to location to return super block version number.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned&nbsp;*</em>&nbsp;<code>freelist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Pointer to location to return global freelist version number.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned *</em> <code>stab</code></td>
+            <td valign="top">OUT: Pointer to location to return symbol table version number.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned *</em> <code>shhdr</code></td>
+            <td valign="top">OUT: Pointer to location to return shared object header version number.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pget_version_f
+    <dd>
+	<pre>
+SUBROUTINE h5pget_version_f(prp_id, boot, freelist, &amp; 
+                            stab, shhdr, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id         ! Property list identifier
+  INTEGER, DIMENSION(:), INTENT(OUT) :: boot   ! Array to put boot block 
+                                               ! version number
+  INTEGER, DIMENSION(:), INTENT(OUT) :: freelist  
+                                               ! Array to put global
+                                               ! freelist version number
+  INTEGER, DIMENSION(:), INTENT(OUT) :: stab   ! Array to put symbol table
+                                               ! version number
+  INTEGER, DIMENSION(:), INTENT(OUT) :: shhdr  ! Array to put shared object 
+                                               ! header version number
+  INTEGER, INTENT(OUT) :: hdferr               ! Error code
+                                               ! 0 on success and -1 on failure
+END SUBROUTINE h5pget_version_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.4</td>
+          <td valign="top">
+		    <code>boot</code>, <code>freelist</code>, 
+			<code>stab</code>, <code>shhdr</code> 
+			parameter types changed to 
+			<em>unsigned</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_vlen_mem_manager" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetVLMemManager">H5Pget_vlen_mem_manager</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pget_vlen_mem_manager</code>(<em>hid_t</em> <code>plist</code>,
+        <em>H5MM_allocate_t</em> *<code>alloc</code>,
+        <em>void</em> **<code>alloc_info</code>,
+        <em>H5MM_free_t</em> *<code>free</code>,
+        <em>void</em> **<code>free_info</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Gets the memory manager for variable-length datatype allocation in 
+        <code>H5Dread</code> and <code>H5Dvlen_reclaim</code>.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_vlen_mem_manager</code> is the companion function to
+        <code>H5Pset_vlen_mem_manager</code>, returning the parameters
+        set by that function.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier for the dataset transfer property list.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5MM_allocate_t</em>&nbsp;<code>alloc&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: User's allocate routine, or &nbsp; <code> NULL</code> 
+                for system &nbsp; <code> malloc</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>void</em> *<code>alloc_info</code></td>
+            <td valign="top">OUT: Extra parameter for user's allocation routine.  
+                <br>
+                Contents are ignored if preceding parameter is &nbsp; 
+                <code> NULL</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5MM_free_t</em> <code>free</code></td>
+            <td valign="top">OUT: User's free routine, or &nbsp; <code> NULL</code> for 
+                system <code>free</code>.</td></tr> 
+        <tr>
+		    <td valign="top"><em>void</em> *<code>free_info</code></td>
+            <td valign="top">OUT: Extra parameter for user's free routine.  
+                <br>
+                Contents are ignored if preceding parameter is &nbsp; 
+                <code> NULL</code>.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pinsert" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-Insert">H5Pinsert</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pinsert</code>(
+                  <em>hid_t</em> <code>plid</code>,
+                  <em>const char *</em><code>name</code>,
+                  <em>size_t</em> <code>size</code>,
+                  <em>void *</em><code>value</code>,
+                  <em>H5P_prp_set_func_t</em> <code>set</code>,
+                  <em>H5P_prp_get_func_t</em> <code>get</code>,
+                  <em>H5P_prp_delete_func_t</em> <code>delete</code>,
+                  <em>H5P_prp_copy_func_t</em> <code>copy</code>,
+                  <em>H5P_prp_close_func_t</em> <code>close</code>
+		)
+
+  <dt><strong>Purpose:</strong>
+    <dd>Registers a temporary property with a property list.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pinsert</code> create a new property in a property list.  
+    The property will exist only in this property list and copies made 
+    from it.  
+	
+    <p>
+    The initial property value must be provided in 
+    <code>value</code> and the property value will be set accordingly.  
+	
+    <p>
+    The name of the property must not already exist in this list, 
+    or this routine will fail.  
+	
+    <p>
+    The <code>set</code> and <code>get</code> callback routines may 
+    be set to NULL if they are not needed.
+
+    <p>
+    Zero-sized properties are allowed and do not store any data in the
+    property list.  The default value of a zero-size property may be set 
+    to NULL.  They may be used to indicate the presence or absence of a 
+    particular piece of information.
+    </p>
+
+    The <code>set</code> routine is called before a new value is copied 
+    into the property.  
+    The <code>H5P_prp_set_func_t</code> callback function is defined 
+    as follows:
+        <ul><em>typedef herr_t</em> (*<code>H5P_prp_set_func_t</code>)(
+            <em>hid_t</em> <code>prop_id</code>,
+            <em>const char *</em><code>name</code>,
+            <em>size_t </em><code>size</code>,
+            <em>void *</em><code>new_value</code>);
+        </ul>
+    The parameters to the callback function are defined as follows:
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>prop_id</code></td>
+        <td>IN: The identifier of the property list being modified</td></tr>
+    <tr>
+        <td><em>const char *</em><code>name</code></td>
+        <td>IN: The name of the property being modified</td></tr>
+    <tr>
+        <td><em>size_t </em> <code>size</code></td>
+        <td>IN: The size of the property in bytes</td></tr>
+    <tr>
+        <td><em>void **</em><code>new_value</code></td>
+        <td>IN: Pointer to new value pointer for the property being 
+		    modified</td></tr>
+    </table></ul>
+    The <code>set</code> routine may modify the value pointer to be set 
+    and those changes will be used when setting the property's value.  
+    If the <code>set</code> routine returns a negative value, the new 
+    property value is not copied into the property and the set routine 
+    returns an error value.  
+    The <code>set</code> routine will be called for the initial value.
+    <p>
+    <strong>Note:</strong> 
+    The <code>set</code> callback function may be useful 
+    to range check the value being set for the property 
+    or may perform some transformation or translation of the
+    value set.  The <code>get</code> callback would then 
+    reverse the transformation or translation.  
+    A single <code>get</code> or <code>set</code> callback 
+    could handle multiple properties by 
+    performing different actions based on the
+    property name or other properties in the property list.
+
+    <p>
+    The <code>get</code> routine is called when a value is retrieved 
+    from a property value.  
+    The <code>H5P_prp_get_func_t</code> callback function is defined 
+    as follows:
+        <ul><em>typedef herr_t</em> (*<code>H5P_prp_get_func_t</code>)(
+            <em>hid_t</em> <code>prop_id</code>, 
+            <em>const char *</em><code>name</code>,
+            <em>size_t </em><code>size</code>,
+            <em>void *</em><code>value</code>);
+        </ul>
+    where the parameters to the callback function are:
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>prop_id</code></td>
+        <td>IN: The identifier of the property list being queried</td></tr>
+    <tr>
+        <td><em>const char *</em><code>name</code></td>
+        <td>IN: The name of the property being queried</td></tr>
+    <tr>
+        <td><em>size_t </em> <code>size</code></td>
+        <td>IN: The size of the property in bytes</td></tr>
+    <tr>
+        <td><em>void *</em><code>value</code></td>
+        <td>IN: The value of the property being returned</td></tr>
+    </table></ul>
+    The <code>get</code> routine may modify the value to be returned from 
+    the query and those changes will be preserved. 
+    If the <code>get</code> routine returns a negative value, the query 
+    routine returns an error value.
+    </p>
+
+    <P>
+    The <code>delete</code> routine is called when a property is being 
+    deleted from a property list.  
+    The <code>H5P_prp_delete_func_t</code> callback function is defined 
+    as follows:
+        <ul><code>typedef herr_t</code> (*<code>H5P_prp_delete_func_t</code>)(
+            <em>hid_t </em><code>prop_id</code>, 
+            <em>const char *</em><code>name</code>,
+            <em>size_t </em><code>size</code>,
+            <em>void *</em><code>value</code>);
+        </ul>
+    where the parameters to the callback function are:
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>prop_id</code></td>
+        <td>IN: The identifier of the property list the property is 
+		    being deleted from</td></tr>
+    <tr>
+        <td><em>const char *</em> <code>name</code></td>
+        <td>IN: The name of the property in the list</td></tr>
+    <tr>
+        <td><em>size_t </em> <code>size</code></td>
+        <td>IN: The size of the property in bytes</td></tr>
+    <tr>
+        <td><em>void *</em> <code>value</code></td>
+        <td>IN: The value for the property being deleted</td></tr>
+    </table></ul>
+    The <code>delete</code> routine may modify the value passed in, 
+    but the value is not used by the library when the <code>delete</code> 
+    routine returns.  If the <code>delete</code> routine returns a 
+    negative value, the property list delete routine returns an 
+    error value but the property is still deleted. 
+    </P>
+    
+    <P>
+    The <code>copy</code> routine is called when a new property list 
+    with this property is being created through a copy operation.  
+    The <code>H5P_prp_copy_func_t</code> callback function is defined 
+    as follows:
+        <ul><em>typedef herr_t</em> (*<code>H5P_prp_copy_func_t</code>)(
+            <em>const char *</em><code>name</code>,
+            <em>size_t </em><code>size</code>,
+            <em>void *</em><code>value</code>);
+        </ul>
+    where the parameters to the callback function are:
+    <ul><table>
+    <tr>
+        <td><em>const char *</em><code>name</code></td>
+        <td>IN: The name of the property being copied</td></tr>
+    <tr>
+        <td><em>size_t </em> <code>size</code></td>
+        <td>IN: The size of the property in bytes</td></tr>
+    <tr>
+        <td><em>void *</em> <code>value</code></td>
+        <td>IN/OUT: The value for the property being copied</td></tr>
+    </table></ul>
+    The <code>copy</code> routine may modify the value to be set and 
+    those changes will be stored as the new value of the property.  
+    If the <code>copy</code> routine returns a negative value, the 
+    new property value is not copied into the property and the 
+    copy routine returns an error value.
+
+    <P>The <code>close</code> routine is called when a property list 
+    with this property is being closed.  
+    The <code>H5P_prp_close_func_t</code> callback function is defined 
+    as follows:
+        <ul><em>typedef herr_t</em> (*<code>H5P_prp_close_func_t</code>)(
+            <em>hid_t</em> <code>prop_id</code>,
+            <em>const char *</em><code>name</code>,
+            <em>size_t </em><code>size</code>,
+            <em>void *</em><code>value</code>);
+        </ul>
+    The parameters to the callback function are defined as follows:
+    <ul><table>
+    <tr>
+        <td><code>hid_t</em> <code>prop_id</em></td>
+        <td>IN: The ID of the property list being closed</td></tr>
+    <tr>
+        <td><code>const char *</code><em>name</em></td>
+        <td>IN: The name of the property in the list</td></tr>
+    <tr>
+        <td><code>size_t </code> <em>size</em></td>
+        <td>IN: The size of the property in bytes</td></tr>
+    <tr>
+        <td><code>void *</code><em>value</em></td>
+        <td>IN: The value for the property being closed</td></tr>
+    </table></ul>
+    The <code>close</code> routine may modify the value passed in, the value 
+    is not used by the library when the <code>close</code> routine returns.  
+    If the <code>close</code> routine returns a negative value, the  
+    property list close routine returns an error value but the property list 
+    is still closed.
+
+    <p>
+    <strong>Note:</strong>
+    There is no <code>create</code> callback routine for temporary property 
+    list objects; the initial value is assumed to have any necessary setup 
+    already performed on it.
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><code>hid_t</code> <code>plid</em></td>
+        <td>IN: Property list identifier to create temporary property 
+	        within</td></tr>
+    <tr>
+        <td><em>const char *</em><code>name</code></td>
+        <td>IN: Name of property to create</td></tr>
+    <tr>
+        <td><em>size_t</em> <code>size</code></td>
+        <td>IN: Size of property in bytes</td></tr>
+    <tr>
+        <td><em>void *</em><code>value</code></td>
+        <td>IN: Initial value for the property</td></tr>
+    <tr>
+        <td><em>H5P_prp_set_func_t</em> <code>set</code></td>
+        <td>IN: Callback routine called before a new value is copied into 
+                the property's value</td></tr>
+    <tr>
+        <td><em>H5P_prp_get_func_t</em> <code>get</code></td>
+        <td>IN: Callback routine called when a property value is retrieved 
+                from the property</td></tr>
+    <tr>
+        <td><em>H5P_prp_delete_func_t</em>&nbsp;<code>delete&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>IN: Callback routine called when a property is deleted from
+                a property list</td></tr>
+    <tr>
+        <td><em>H5P_prp_copy_func_t</em> <code>copy</code></td>
+        <td>IN: Callback routine called when a property is copied from
+                an existing property list</td></tr>
+    <tr>
+        <td><em>H5P_prp_close_func_t</em> <code>close</code></td>
+        <td>IN: Callback routine called when a property list is being closed 
+                and the property value will be disposed of</td></tr>
+    </table></ul>
+
+  <dt><strong>Returns:</strong>
+    <dd>Success: a non-negative value
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong> h5pinsert_f
+    <dd>
+	<pre>
+SUBROUTINE h5pinsert_f
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist   ! Property list class identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to insert
+  INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value	
+  TYPE,   INTENT(IN) :: value           ! Property value
+                                        ! Supported types are:
+                                        !    INTEGER
+                                        !    REAL
+                                        !    DOUBLE PRECISION
+                                        !    CHARACTER(LEN=*)
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pinsert_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pisa_class" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-IsAClass">H5Pisa_class</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>htri_t</em> <code>H5Pisa_class</code>(
+                  <em>hid_t</em> <code>plist</code>,
+                  <em>hid_t</em> <code>pclass</code>
+	)
+
+  <dt><strong>Purpose:</strong>
+    <dd>Determines whether a property list is a member of a class.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pisa_class</code> checks to determine whether a property list 
+    is a member of the specified class.
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>plist</code></td>
+        <td>IN: Identifier of the property list</td></tr>
+    <tr>
+        <td><code>hid_t</code>&nbsp;<em>pclass&nbsp;&nbsp;&nbsp;&nbsp;</em></td>
+        <td>IN: Identifier of the property class</td></tr>
+    </table></ul>
+
+  <dt><strong>Returns:</strong>
+    <dd>Success: TRUE (positive) if equal; FALSE (zero) if unequal
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong> h5pisa_class_f
+    <dd>
+	<pre>
+SUBROUTINE h5pisa_class_f(plist, pclass, flag, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist     ! Property list identifier 
+  INTEGER(HID_T), INTENT(IN) :: pclass    ! Class identifier
+  LOGICAL, INTENT(OUT) :: flag            ! Logical flag
+                                          !    .TRUE. if a member
+                                          !    .FALSE. otherwise
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5pisa_class_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Piterate" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-Iterate">H5Piterate</a>
+
+  <dt><strong>Purpose:</strong>
+    <dd>Iterates over properties in a property class or list.
+
+  <dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Piterate</code>(
+               <em>hid_t</em> <code>id</code>,
+               <em>int *</em> <code>idx</code>,
+               <em>H5P_iterate_t</em> <code>iter_func</code>,
+               <em>void *</em> <code>iter_data</code>
+	)
+
+  <dt><strong>Description:</strong>
+    <p><code>H5Piterate</code> iterates over the properties in the 
+    property object specified in <code>id</code>, which may be either a
+    property list or a property class, performing a specified 
+    operation on each property in turn.  
+	
+    <p>
+    For each property in the object, <code>iter_func</code> and
+    the additional information specified below are passed to the
+    <code>H5P_iterate_t</code> operator function.  
+	
+	<b><i>(NOTE: <code>iter_func</code> was changed to 
+	<code>H5P_iterate_t</code> in the preceding sentence.
+	Is this correct?)</i></b>
+	
+    <p>
+    The iteration begins with the <code>idx</code>-th property in 
+    the object; the next element to be processed by the operator 
+    is returned in <code>idx</code>.
+    If <code>idx</code> is NULL, the iterator starts at the first 
+    property; since no stopping point is returned in this case, 
+    the iterator cannot be restarted if one of the calls to its 
+    operator returns non-zero.
+    </p>
+
+    The prototype for the <code>H5P_iterate_t</code> operator is
+    as follows:
+        <ul> <dl>
+            <dt><em>typedef herr_t</em> (*<code>H5P_iterate_t</code>)(
+                                  <em>hid_t</em> <code>id</code>, 
+                                  <em>const char *</em><code>>name</code>, 
+                                  <em>void *</em><code>iter_data</code>
+	        )
+        </dl> </ul>
+    The operation receives the property list or class identifier for 
+    the object being iterated over, <code>id</code>,
+    the name of the current property within the object, <code>name</code>, 
+    and the pointer to the operator data passed in to
+    <code>H5Piterate</code>, <code>iter_data</code>.
+    </p>
+
+    The valid return values from an operator are as follows:
+        <ul><table>
+        <tr>
+            <td valign=top>Zero</td>
+            <td>Causes the iterator to continue, returning zero when all
+                properties have been processed</td></tr>
+        <tr>
+            <td valign=top>Positive</td>
+            <td>Causes the iterator to immediately return that positive 
+                value, indicating short-circuit success.  The iterator can 
+                be restarted at the index of the next property</td></tr>
+        <tr>
+            <td valign=top>Negative</td>
+            <td>Causes the iterator to immediately return that value,
+                indicating failure.  The iterator can be restarted at the 
+                index of the next property</td></tr>
+        </table></ul>
+
+    <P>
+    <code>H5Piterate</code> assumes that the properties in the object 
+    identified by <code>id</code> remain unchanged through the iteration.  
+    If the membership changes during the iteration, the function's behavior 
+    is undefined.
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>id</code></td>
+        <td>IN: Identifier of property object to iterate over</td></tr>
+    <tr>
+        <td><em>int *</em> <code>idx</code></td>
+        <td>IN/OUT: Index of the property to begin with</td></tr>
+    <tr>
+        <td><em>H5P_iterate_t</em>&nbsp;<code>iter_func&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>IN: Function pointer to function to be called with each 
+                property iterated over</td></tr>
+    <tr>
+        <td><em>void *</em> <code>iter_data</code></td>
+        <td>IN/OUT: Pointer to iteration data from user</td></tr>
+    </table></ul>
+
+<dt><strong>Returns:</strong>
+    <dd>Success: the return value of the last call to
+            <code>iter_func</code> if it was non-zero;
+            zero if all properties have been processed
+    <dd>Failure: a negative value
+    </table></ul>
+
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pmodify_filter" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-ModifyFilter">H5Pmodify_filter</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pmodify_filter</code>(<em>hid_t</em> <code>plist</code>,
+        <em>H5Z_filter_t</em> <code>filter</code>,
+        <em>unsigned int</em> <code>flags</code>,
+        <em>size_t</em> <code>cd_nelmts</code>,
+        <em>const unsigned int</em> <code>cd_values[]</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Modifies a filter in the filter pipeline.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pmodify_filter</code> modifies the specified 
+        <code>filter</code> in the filter pipeline.
+        <code>plist</code> must be a dataset creation property list 
+        and the modified filter will be in a permanent filter pipeline.
+	<p>
+	The <code>filter</code>, <code>flags</code> 
+        <code>cd_nelmts[]</code>, and <code>cd_values</code> parameters 
+	are used in the same manner and accept the same values as described 
+	in the discussion of <a href="#Property-SetFilter">H5Pset_filter</a>.	
+  <dt><strong>Note:</strong>
+    <dd>This function currently supports only the permanent filter
+        pipeline; <code>plist_id</code> must be a dataset creation 
+        property list.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist_id</code></td>
+            <td valign="top">IN: Property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5Z_filter_t</em> <code>filter</code></td>
+            <td valign="top">IN: Filter to be modified.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned int</em> <code>flags</code></td>
+            <td valign="top">IN:  Bit vector specifying certain general properties
+                of the filter.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>cd_nelmts</code></td>
+            <td valign="top">IN: Number of elements in <code>cd_values</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;unsigned&nbsp;int</em>&nbsp;<code>cd_values[]&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Auxiliary data for the filter.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+
+    <dt><strong>Fortran90 Interface:</strong> h5pmodify_filter_f
+    <dd>
+	<pre>
+SUBROUTINE h5pmodify_filter_f(prp_id, filter, flags, cd_nelmts, &amp; 
+                              cd_values, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id      ! Property list identifier
+  INTEGER, INTENT(IN)        :: filter      ! Filter to be modified
+  INTEGER, INTENT(IN)        :: flags       ! Bit vector specifying certain 
+                                            ! general properties of the filter
+  INTEGER(SIZE_T), INTENT(IN) :: cd_nelmts  ! Number of elements in cd_values
+  INTEGER, DIMENSION(*), INTENT(IN) :: cd_values  
+                                            ! Auxiliary data for the filter
+  INTEGER, INTENT(OUT)       :: hdferr      ! Error code
+                                            ! 0 on success and -1 on failure
+END SUBROUTINE h5pmodify_filter_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pregister" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-Register">H5Pregister</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pregister</code>(
+                  <em>hid_t</em> <code>class</code>,
+                  <em>const char *</em> <code>name</code>,
+                  <em>size_t</em> <code>size</code>,
+                  <em>void *</em> <code>default</code>,
+                  <em>H5P_prp_create_func_t</em> <code>create</code>,
+                  <em>H5P_prp_set_func_t</em> <code>set</code>,
+                  <em>H5P_prp_get_func_t</em> <code>get</code>,
+                  <em>H5P_prp_delete_func_t</em> <code>delete</code>,
+                  <em>H5P_prp_copy_func_t</em> <code>copy</code>,
+                  <em>H5P_prp_close_func_t</em> <code>close</code>
+				 )
+				 
+  <dt><strong>Purpose:</strong>
+    <dd>Registers a permanent property with a property list class.
+	
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pregister</code> registers a new property with a 
+    property list class.  
+    The property will exist in all property list objects of 
+    <code>class</code> created after this routine finishes.  The name 
+    of the property must not already exist, or this routine will fail.  
+    The default property value must be provided and all new property 
+    lists created with this property will have the property value set 
+    to the default value.  Any of the callback routines may be set to
+    NULL if they are not needed.
+
+    <P>
+    Zero-sized properties are allowed and do not store any data in the
+    property list.  These may be used as flags to indicate the presence 
+    or absence of a particular piece of information.  The default pointer 
+    for a zero-sized property may be set to NULL.  
+    The property <code>create</code> and <code>close</code> callbacks 
+    are called for zero-sized properties, but the <code>set</code> and 
+    <code>get</code> callbacks are never called.
+    </P>
+	
+    <P>
+    The <code>create</code> routine is called when a new property list 
+    with this property is being created.  
+    The <code>H5P_prp_create_func_t</code> callback function is defined 
+    as follows:
+        <ul><em>typedef herr_t</em> (*<code>H5P_prp_create_func_t</code>)(
+            <em>const char *</em><code>name</code>,
+            <em>size_t </em><code>size</code>,
+            <em>void *</em><code>initial_value</code>);
+        </ul>
+    The parameters to this callback function are defined as follows:
+    <ul><table>
+    <tr>
+        <td><em>const char *</em><code>name</code></td>
+        <td>IN: The name of the property being modified</td></tr>
+    <tr>
+        <td><em>size_t</em> <code>size</code></td>
+        <td>IN: The size of the property in bytes</td></tr>
+    <tr>
+        <td><em>void *</em><code>initial_value</code></td>
+        <td>IN/OUT: The default value for the property being created,
+                which will be passed to <code>H5Pregister</code></td></tr>
+    </table></ul>
+    The <code>create</code> routine may modify the value to be set and 
+    those changes will be stored as the initial value of the property.  
+    If the <code>create</code> routine returns a negative value, 
+    the new property value is not copied into the property and the 
+    create routine returns an error value.
+    </P>
+	
+    <P>
+    The <code>set</code> routine is called before a new value is copied 
+    into the property.  
+    The <code>H5P_prp_set_func_t</code> callback function is defined 
+    as follows:
+        <ul><em>typedef herr_t</em> (*H5P_prp_set_func_t)(
+            <em>hid_t </em><code>prop_id</code>, 
+            <em>const char *</em><code>name</code>,
+            <em>size_t </em><code>size</code>,
+            <em>void *</em><code>new_value</code>);
+        </ul>
+    The parameters to this callback function are defined as follows:
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>prop_id</code></td>
+        <td>IN: The identifier of the property list being modified</td></tr>
+    <tr>
+        <td><em>const char *</em><code>name</code></td>
+        <td>IN: The name of the property being modified</td></tr>
+    <tr>
+        <td><em>size_t </em><code>size</code></td>
+        <td>IN: The size of the property in bytes</td></tr>
+    <tr>
+        <td><em>void **</em><code>new_value</code></td>
+        <td>IN/OUT: Pointer to new value pointer for the property being 
+		    modified</td></tr>
+    </table></ul>
+    The <code>set</code> routine may modify the value pointer to be set 
+    and those changes will be used when setting the property's value.  
+    If the <code>set</code> routine returns a negative value, the new 
+    property value is not copied into the property and the 
+    <code>set</code> routine returns an error value.  
+    The <code>set</code> routine will not be called for the initial 
+    value, only the <code>create</code> routine will be called.
+    <p>
+    <strong>Note:</strong> 
+    The <code>set</code> callback function may be useful 
+    to range check the value being set for the property 
+    or may perform some transformation or translation of the
+    value set.  The <code>get</code> callback would then 
+    reverse the transformation or translation.  
+    A single <code>get</code> or <code>set</code> callback 
+    could handle multiple properties by 
+    performing different actions based on the
+    property name or other properties in the property list.
+
+    <p>
+    The <code>get</code> routine is called when a value is retrieved 
+    from a property value.  
+    The <code>H5P_prp_get_func_t</code> callback function is defined 
+	as follows:
+        <ul><em>typedef herr_t</em> (*<code>H5P_prp_get_func_t</code>)(
+            <em>hid_t </em><code>prop_id</code>, 
+            <em>const char *</em><code>name</code>,
+            <em>size_t </em><code>size</code>,
+            <em>void *</em><code>value</code>);
+        </ul>
+    The parameters to the callback function are defined as follows:
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>prop_id</code></td>
+        <td>IN: The identifier of the property list being queried</td></tr>
+    <tr>
+        <td><em>const char *</em> <code>name</code></td>
+        <td>IN: The name of the property being queried</td></tr>
+    <tr>
+        <td><em>size_t </em> <code>size</code></td>
+        <td>IN: The size of the property in bytes</td></tr>
+    <tr>
+        <td><em>void *</em> <code>value</code></td>
+        <td>IN/OUT: The value of the property being returned</td></tr>
+    </table></ul>
+    The <code>get</code> routine may modify the value to be returned from 
+    the query and those changes will be returned to the calling routine.  
+    If the <code>set</code> routine returns a negative value, the query 
+    routine returns an error value.
+    </P>
+
+    <P>
+    The <code>delete</code> routine is called when a property is being 
+    deleted from a property list.  
+    The <code>H5P_prp_delete_func_t</code> callback function is defined 
+    as follows:
+        <ul><em>typedef herr_t</em> (*<code>H5P_prp_delete_func_t</code>)(
+            <em>hid_t </em><code>prop_id</code>, 
+            <em>const char *</em><code>name</code>,
+            <em>size_t </em><code>size</code>,
+            <em>void *</em><code>value</code>);
+        </ul>
+    The parameters to the callback function are defined as follows:
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>prop_id</code></td>
+        <td>IN: The identifier of the property list the property is being 
+		    deleted from</td></tr>
+    <tr>
+        <td><em>const char *</em> <code>name</code></td>
+        <td>IN: The name of the property in the list</td></tr>
+    <tr>
+        <td><em>size_t </em> <code>size</code></td>
+        <td>IN: The size of the property in bytes</td></tr>
+    <tr>
+        <td><em>void *</em> <code>value</code></td>
+        <td>IN: The value for the property being deleted</td></tr>
+    </table></ul>
+    The <code>delete</code> routine may modify the value passed in, 
+    but the value is not used by the library when the <code>delete</code> 
+    routine returns.  If the <code>delete</code> routine returns 
+    a negative value, the property list delete routine returns 
+    an error value but the property is still deleted.
+    </P>
+
+    <P>
+    The <code>copy</code> routine is called when a new property list with 
+    this property is being created through a copy operation.  
+    The <code>H5P_prp_copy_func_t</code> callback function is defined
+    as follows:
+        <ul><em>typedef herr_t</em> (*<code>H5P_prp_copy_func_t</code>)(
+            <em>const char *</em><code>name</code>,
+            <em>size_t </em><code>size</code>,
+            <em>void *</em><code>value</code>);
+        </ul>
+    The parameters to the callback function are defined as follows:
+    <ul><table>
+    <tr>
+        <td><em>const char *</em><code>name</code></td>
+        <td>IN: The name of the property being copied</td></tr>
+    <tr>
+        <td><em>size_t </em><code>size</code></td>
+        <td>IN: The size of the property in bytes</td></tr>
+    <tr>
+        <td><em>void *</em><code>value</code></td>
+        <td>IN/OUT: The value for the property being copied</td></tr>
+    </table></ul>
+    The <code>copy</code> routine may modify the value to be set and 
+    those changes will be stored as the new value of the property.  
+    If the <code>copy</code> routine returns a negative value, 
+    the new property value is not copied into the property and 
+    the copy routine returns an error value.
+    </P>
+
+    The <code>close</code> routine is called when a property list with 
+    this property is being closed.  
+    The <code>H5P_prp_close_func_t</code> callback function is defined 
+    as follows:
+        <ul><em>typedef herr_t</em> (*<code>H5P_prp_close_func_t</code>)(
+            <em>hid_t </em><code>prop_id</code>, 
+            <em>const char *</em><code>name</code>,
+            <em>size_t </em><code>size</code>,
+            <em>void *</em><code>value</code>);
+        </ul>
+    The parameters to the callback function are defined as follows:
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>prop_id</code></td>
+        <td>IN: The identifier of the property list being 
+		    closed</td></tr>
+    <tr>
+        <td><em>const char *</em><code>name</code></td>
+        <td>IN: The name of the property in the list</td></tr>
+    <tr>
+        <td><em>size_t</em> <code>size</code></td>
+        <td>IN: The size of the property in bytes</td></tr>
+    <tr>
+        <td><em>void *</em><code>value</code></td>
+        <td>IN: The value for the property being closed</td></tr>
+    </table></ul>
+    The <code>close</code> routine may modify the value passed in, 
+    but the value is not used by the library when the 
+    <code>close</code> routine returns.  
+    If the <code>close</code> routine returns a negative value, 
+    the property list close routine returns an error value but
+    the property list is still closed.
+    </P>
+	
+<dt><strong>Parameters:</strong>
+    <ul><table>
+      <tr>
+	    <td valign="top"><code>hid_t</code> <em>class</em></td>
+        <td valign="top">IN: Property list class to register permanent property 
+		    within</td></tr>
+      <tr>
+	    <td valign="top"><code>const char *</code> <em>name</em></td>
+        <td valign="top">IN: Name of property to register</td></tr>
+      <tr>
+	    <td valign="top"><code>size_t</code> <em>size</em></td>
+        <td valign="top">IN: Size of property in bytes</td></tr>
+      <tr>
+	    <td valign="top"><code>void *</code> <em>default</em></td>
+        <td valign="top">IN: Default value for property in newly created property 
+		    lists</td></tr>
+      <tr>
+	    <td valign="top"><code>H5P_prp_create_func_t</code>&nbsp;<em>create&nbsp;&nbsp;&nbsp;&nbsp;</em></td>
+        <td valign="top">IN: Callback routine called when a property list is being 
+            created and the property value will be initialized</td></tr>
+      <tr>
+	    <td valign="top"><code>H5P_prp_set_func_t</code> <em>set</em></td>
+        <td valign="top">IN: Callback routine called before a new value is copied 
+            into the property's value</td></tr>
+      <tr>
+	    <td valign="top"><code>H5P_prp_get_func_t</code> <em>get</em></td>
+        <td valign="top">IN: Callback routine called when a property value is 
+            retrieved from the property</td></tr>
+      <tr>
+	    <td valign="top"><code>H5P_prp_delete_func_t</code> <em>delete</em></td>
+        <td valign="top">IN: Callback routine called when a property is deleted from
+            a property list</td></tr>
+      <tr>
+	    <td valign="top"><code>H5P_prp_copy_func_t</code> <em>copy</em></td>
+        <td valign="top">IN: Callback routine called when a property is copied from
+            a property list</td></tr>
+      <tr>
+	    <td valign="top"><code>H5P_prp_close_func_t</code> <em>close</em></td>
+        <td valign="top">IN: Callback routine called when a property list is being 
+            closed and the property value will be disposed of</td></tr>
+    </table></ul>
+
+<dt><strong>Returns:</strong>
+    <dd>Success: a non-negative value
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong> h5pregister_f
+    <dd>
+	<pre>
+SUBROUTINE h5pregister_f
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: class   ! Property list class identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to register
+  INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value	
+  TYPE,   INTENT(IN) :: value           ! Property value
+                                        ! Supported types are:
+                                        !    INTEGER
+                                        !    REAL
+                                        !    DOUBLE PRECISION
+                                        !    CHARACTER(LEN=*)
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pregister_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Premove" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-Remove">H5Premove</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Premove</code>(
+                  <em>hid_t</em> <code>plid</code>;
+                  <em>const char *</em><code>name</code>
+		)
+
+  <dt><strong>Purpose:</strong>
+    <dd>Removes a property from a property list.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Premove</code> removes a property from a property list.  
+	
+    <p>
+    Both properties which were in existence when the property list 
+    was created (i.e. properties registered with <code>H5Pregister</code>) 
+    and properties added to the list after it was created (i.e. added 
+    with <code>H5Pinsert</code>) may be removed from a property list.  
+    Properties do not need to be removed from a property list before the 
+    list itself is closed; they will be released automatically when 
+    <code>H5Pclose</code> is called.
+	
+    <p>
+    If a <code>close</code> callback exists for the removed property, 
+    it will be called before the property is released.
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>plid</code></td>
+        <td>IN: Identifier of the property list to modify</td></tr>
+    <tr>
+        <td><em>const&nbsp;char&nbsp;*</em><code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>IN: Name of property to remove</td></tr>
+    </table></ul>
+
+  <dt><strong>Returns:</strong>
+    <dd>Success: a non-negative value
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong> h5premove_f
+    <dd>
+	<pre>
+SUBROUTINE h5premove_f(plid, name, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plid   ! Property list identifier
+  CHARACTER(LEN=*), INTENT(IN) :: name ! Name of property to remove
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5premove_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-Set">H5Pset</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset</code>(
+                  <em>hid_t</em> <code>plid</code>,
+                  <em>const char *</em><code>name</code>,
+                  <em>void *</em><code>value</code>)
+        )
+
+  <dt><strong>Purpose:</strong>
+    <dd>Sets a property list value.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset</code> sets a new value for a property in a 
+    property list.  If there is a <code>set</code> callback 
+    routine registered for this property, the <code>value</code> will be 
+    passed to that routine and any changes to the <code>value</code> 
+    will be used when setting the property value.  
+    The information pointed to by the <code>value</code> pointer 
+    (possibly modified by the <code>set</code> callback) is copied into 
+    the property list value and may be changed by the application making 
+    the <code>H5Pset</code> call without affecting the property value.
+
+    <P>
+    The property name must exist or this routine will fail.  
+
+    <P>
+    If the <code>set</code> callback routine returns an error, the 
+    property value will not be modified.  
+
+    <P>
+    This routine may not be called for zero-sized properties 
+    and will return an error in that case.
+	
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>hid_t</em> <code>plid</code>;
+        <td>IN: Property list identifier to modify</td></tr>
+    <tr>
+        <td><em>const&nbsp;char&nbsp;*</em><code>name;&nbsp;&nbsp;&nbsp;&nbsp;</code>
+        <td>IN: Name of property to modify</td></tr>
+    <tr>
+        <td><em>void *</em><code>value</code>;
+        <td>IN: Pointer to value to set the property to</td></tr>
+    </table></ul>
+
+ <dt><strong>Returns:</strong>
+    <dd>Success: a non-negative value
+    <dd>Failure: a negative value
+
+  <dt><strong>Fortran90 Interface:</strong> h5pset_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_f(plid, name, value, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plid    ! Property list identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to set
+  TYPE,   INTENT(IN) :: value           ! Property value
+                                        ! Supported types are:
+                                        !    INTEGER
+                                        !    REAL
+                                        !    DOUBLE PRECISION
+                                        !    CHARACTER(LEN=*)
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_alignment" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetAlignment">H5Pset_alignment</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_alignment</code>(<em>hid_t</em> <code>plist</code>,
+        <em>hsize_t</em> <code>threshold</code>,
+        <em>hsize_t</em> <code>alignment</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets alignment properties of a file access property list.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_alignment</code> sets the alignment properties 
+        of a file access property list
+        so that any file object greater than or equal in size to 
+        <code>threshold</code> bytes will be aligned on an address 
+        which is a multiple of <code>alignment</code>.  The addresses
+        are relative to the end of the user block; the alignment is
+        calculated by subtracting the user block size from the
+        absolute file address and then adjusting the address to be a
+        multiple of <code>alignment</code>.
+        <p>
+        Default values for <code>threshold</code> and 
+        <code>alignment</code> are one, implying
+        no alignment.  Generally the default values will result in
+        the best performance for single-process access to the file.
+        For MPI-IO and other parallel systems, choose an alignment
+        which is a multiple of the disk block size.   
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier for a file access property list.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t</em>&nbsp;<code>threshold&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Threshold value.  
+                Note that setting the threshold value to 0 (zero) has 
+                the effect of a special case, forcing everything 
+                to be aligned.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t</em> <code>alignment</code></td>
+            <td valign="top">IN: Alignment value.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_alignment_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_alignment_f(prp_id, threshold,  alignment, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id       ! Property list identifier
+  INTEGER(HSIZE_T), INTENT(IN) :: threshold  ! Threshold value
+  INTEGER(HSIZE_T), INTENT(IN) :: alignment  ! Alignment value
+  INTEGER, INTENT(OUT) :: hdferr             ! Error code
+                                             ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_alignment_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_alloc_time" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetAllocTime">H5Pset_alloc_time</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pset_alloc_time</code>(<em>hid_t</em> <code>plist_id</code>,
+            <em>H5D_alloc_time_t</em> <code>alloc_time</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the timing for storage space allocation.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_alloc_time</code> sets up the timing for the allocation of
+        storage space for a dataset's raw data.  
+	This property is set in the dataset creation property list 
+	<code>plist_id</code>.
+        <p>
+	Timing is specified in <code>fill_time</code> with one of the 
+	following values:
+	<table border=0 >
+           <tr valign="top"><td rowspan="4">&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+	     <code>H5D_ALLOC_TIME_DEFAULT</code>&nbsp;&nbsp; 
+             </td><td>
+	     Allocate dataset storage space at the default time.<br> 
+	     (Defaults differ by storage method.)
+	   </td></tr><tr valign="top"><td>
+             <code>H5D_ALLOC_TIME_EARLY</code>
+             </td><td>
+             Allocate all space when the dataset is created.<br>
+	     (Default for compact datasets.)
+	   </td></tr><tr valign="top"><td>
+	     <code>H5D_ALLOC_TIME_INCR</code>&nbsp;&nbsp; 
+             </td><td>
+	     Allocate space incrementally, as data is written to the dataset.<br>
+	     (Default for chunked storage datasets.)
+	       <li>Chunked datasets:  
+	         Storage space allocation for each chunk is deferred until data 
+                 is written to the chunk.  
+	       <li>Contiguous datasets: 
+	         Incremental storage space allocation for contiguous data    
+                 is treated as late allocation.
+	       <li>Compact datasets:  
+	         Incremental allocation is not allowed with compact datasets; 
+                 </em><code>H5Pset_alloc_time</code> will return an error.
+	   </td></tr><tr valign="top"><td>
+             <code>H5D_ALLOC_TIME_LATE</code>
+             </td><td>
+             Allocate all space when data is first written to the dataset.<br>
+	     (Default for contiguous datasets.)
+ 	</td></tr></table>
+  <dt><strong>Note:</strong>
+    <dd><code>H5Pset_alloc_time</code> is designed to work in concert  
+        with the dataset fill value and fill value write time properties, 
+	set with the functions 
+	<code>H5Pset_fill_value</code> and <code>H5Pset_fill_time</code>.
+	<p>
+	<p>
+	See <a href="RM_H5D.html#Dataset-Create">H5Dcreate</a> for 
+	further cross-references.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist_id</code></td>
+            <td valign="top">IN: Dataset creation property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5D_alloc_time_t</em>&nbsp;<code>alloc_time&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: When to allocate dataset storage space.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_alloc_time_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_alloc_time_f(plist_id, flag, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist_id  ! Dataset creation property
+                                          ! list identifier
+  INTEGER(HSIZE_T), INTENT(IN) :: flag    ! Allocation time flag
+                                          ! Possible values are:
+                                          !    H5D_ALLOC_TIME_ERROR_F
+                                          !    H5D_ALLOC_TIME_DEFAULT_F
+                                          !    H5D_ALLOC_TIME_EARLY_F
+                                          !    H5D_ALLOC_TIME_LATE_F
+                                          !    H5D_ALLOC_TIME_INCR_F</pre>
+<!-- NEW PAGE -->
+<pre>
+  INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_alloc_time_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_btree_ratios" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetBTreeRatios">H5Pset_btree_ratios</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_btree_ratios</code>(<em>hid_t</em> <code>plist</code>,
+        <em>double</em> <code>left</code>,
+        <em>double</em> <code>middle</code>,
+        <em>double</em> <code>right</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets B-tree split ratios for a dataset transfer property list.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_btree_ratios</code> sets the B-tree split ratios 
+        for a dataset transfer property list. The split ratios determine 
+        what percent of children go in the first node when a node splits.  
+        <p>
+        The ratio <code>left</code> is used when the splitting node is 
+        the left-most node at its level in the tree; 
+        the ratio <code>right</code> is used when the splitting node is 
+        the right-most node at its level; 
+        and the ratio <code>middle</code> is used for all other cases.  
+        <p>
+        A node which is the only node at its level in the tree uses 
+        the ratio <code>right</code> when it splits.  
+        <p>
+        All ratios are real numbers between 0 and 1, inclusive. 
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: The dataset transfer property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>double</em> <code>left</code></td>
+            <td valign="top">IN: The B-tree split ratio for left-most nodes.</td></tr>
+        <tr>
+		    <td valign="top"><em>double</em> <code>right</code></td>
+            <td valign="top">IN: The B-tree split ratio for right-most nodes and lone nodes.</td></tr>
+        <tr>
+		    <td valign="top"><em>double</em>&nbsp;<code>middle&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: The B-tree split ratio for all other nodes.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_btree_ratios_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_btree_ratios_f(prp_id, left, middle, right, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id   
+                                  ! Property list identifier
+  REAL, INTENT(IN) :: left        ! The B-tree split ratio for left-most nodes
+  REAL, INTENT(IN) :: middle      ! The B-tree split ratio for all other nodes
+  REAL, INTENT(IN) :: right       ! The B-tree split ratio for right-most
+                                  ! nodes and lone nodes.
+  INTEGER, INTENT(OUT) :: hdferr  ! Error code
+                                  ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_btree_ratios_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_buffer" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetBuffer">H5Pset_buffer</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_buffer</code>(<em>hid_t</em> <code>plist</code>,
+        <em>hsize_t</em> <code>size</code>,
+        <em>void</em> <code>*tconv</code>,
+        <em>void</em> <code>*bkg</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets type conversion and background buffers.
+  <dt><strong>Description:</strong>
+    <dd> Given a dataset transfer property list, <code>H5Pset_buffer</code> 
+         sets the maximum size
+         for the type conversion buffer and background buffer and
+         optionally supplies pointers to application-allocated buffers.
+         If the buffer size is smaller than the entire amount of data
+         being transferred between the application and the file, and a type
+         conversion buffer or background buffer is required, then
+         strip mining will be used.  
+         <p>
+         Note that there are minimum size requirements for the buffer.
+         Strip mining can only break the data up along the first dimension,
+         so the buffer must be large enough to accommodate a complete slice 
+         that encompasses all of the remaining dimensions.  
+         For example, when strip mining a 100x200x300 hyperslab 
+         of a simple data space, the buffer must be large enough to 
+         hold 1x200x300 data elements.  
+         When strip mining a 100x200x300x150 hyperslab of a simple data space, 
+         the buffer must be large enough to hold 1x200x300x150 data elements.  
+         <p>
+         If <code>tconv</code> and/or <code>bkg</code> are null pointers,
+         then buffers will be allocated and freed during the data transfer.  
+         <p>
+         The default value for the maximum buffer is 1 Mb.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier for the dataset transfer property list.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t</em>&nbsp;<code>size&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Size, in bytes, of the type conversion and background buffers.</td></tr>
+        <tr>
+		    <td valign="top"><em>void</em> <code>tconv</code></td>
+            <td valign="top">IN: Pointer to application-allocated type conversion buffer.</td></tr>
+        <tr>
+		    <td valign="top"><em>void</em> <code>bkg</code></td>
+            <td valign="top">IN: Pointer to application-allocated background buffer.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_buffer_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_buffer_f(plist_id, size, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)   :: plist_id ! Dataset transfer property 
+                                           ! list identifier
+  INTEGER(HSIZE_T), INTENT(IN) :: size     ! Conversion buffer size
+  INTEGER, INTENT(OUT)         :: hdferr   ! Error code
+                                           ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_buffer_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+		  <td valign="top">The <code>size</code> 
+		    parameter has changed from type 
+			<em>hsize_t</em> to <em>size_t</em>.</td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+		  <td valign="top">The <code>size</code> 
+		    parameter has changed to type 
+			<em>hsize_t</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_cache" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetCache">H5Pset_cache</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_cache</code>(<em>hid_t</em> <code>plist_id</code>,
+        <em>int</em> <code>mdc_nelmts</code>,
+        <em>int</em> <code>rdcc_nelmts</code>,
+        <em>size_t</em> <code>rdcc_nbytes</code>,
+        <em>double</em> <code>rdcc_w0</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the meta data cache and raw data chunk cache parameters.  
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_cache</code> sets 
+        the number of elements (objects) in the meta data cache and 
+        the number of elements, the total number of bytes, and 
+        the preemption policy value in the raw data chunk cache.
+        <p>
+	The <em>plist_id</em> is a file access property list.  
+        The number of elements (objects) in the meta data cache 
+	and the raw data chunk cache are <em>mdc_nelmts</em> and 
+	<em>rdcc_nelmts</em>, respectively.  
+        The total size of the raw data chunk cache and the preemption policy 
+        are <em>rdcc_nbytes</em> and <em>rdcc_w0</em>.  
+        <p>
+        Any (or all) of the <code>H5Pget_cache</code> pointer arguments 
+        may be null pointers.
+        <p>
+        The <em>rdcc_w0</em> value should be between 0 and 1 inclusive and
+        indicates how much chunks that have been fully read are
+        favored for preemption.  A value of zero means fully read
+        chunks are treated no differently than other chunks (the
+        preemption is strictly LRU) while a value of one means fully
+        read chunks are always preempted before other chunks. 
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist_id</code></td>
+            <td valign="top">IN: Identifier of the file access property list.</td></tr>
+        <tr>
+		    <td valign="top"><em>int</em> <code>mdc_nelmts</code></td>
+            <td valign="top">IN: Number of elements (objects) in the meta data cache.</td></tr>
+        <tr>
+		    <td valign="top"><em>int</em> <code>rdcc_nelmts</code></td>
+            <td valign="top">IN: Number of elements (objects) in the raw data chunk cache.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em>&nbsp;<code>rdcc_nbytes&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Total size of the raw data chunk cache, in bytes.</td></tr>
+        <tr>
+		    <td valign="top"><em>double</em> <code>rdcc_w0</code></td>
+            <td valign="top">IN: Preemption policy.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_cache_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_cache_f(prp_id, mdc_nelmts,rdcc_nelmts, rdcc_nbytes, rdcc_w0, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id        ! Property list identifier
+  INTEGER, INTENT(IN) :: mdc_nelmts           ! Number of elements (objects)
+                                              ! in the meta data cache
+  INTEGER(SIZE_T), INTENT(IN) :: rdcc_nelmts  ! Number of elements (objects)
+                                              ! in the meta data cache
+  INTEGER(SIZE_T), INTENT(IN) :: rdcc_nbytes  ! Total size of the raw data
+                                              ! chunk cache, in bytes
+  REAL, INTENT(IN) :: rdcc_w0                 ! Preemption policy
+  INTEGER, INTENT(OUT) :: hdferr              ! Error code
+                                              ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_cache_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top">&nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top"><strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.1</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">&nbsp;</td>
+          <td valign="top"><code>rdcc_nbytes</code>&nbsp;parameter&nbsp;type&nbsp;changed&nbsp;
+		    to <code>INTEGER(SIZE_T)</code>.</td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+		  <td valign="top">The&nbsp;<code>rdcc_nbytes</code>&nbsp;parameter&nbsp;has&nbsp;changed 
+		    from type <em>int</em> to <em>size_t</em>.</td>
+		  <td valign="top">&nbsp;</td>
+          <td valign="top">&nbsp;</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_chunk" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetChunk">H5Pset_chunk</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pset_chunk</code>(<em>hid_t</em> <code>plist</code>,
+            <em>int</em> <code>ndims</code>,
+            <em>const hsize_t *</em> <code>dim</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the size of the chunks used to store a chunked layout dataset.  
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_chunk</code> sets the size of the chunks used to 
+        store a chunked layout dataset.  This function is only valid 
+        for dataset creation property lists.  
+        <p>
+        The <code>ndims</code> parameter currently must be the same size 
+        as the rank of the dataset.  
+        <p>
+        The values of the <code>dim</code> 
+        array define the size of the chunks to store the dataset's raw data.
+        The unit of measure for <code>dim</code> values is 
+        <em>dataset elements</em>.
+        <p>
+        As a side-effect of this function, the layout of the dataset is 
+        changed to <code>H5D_CHUNKED</code>, if it is not already so set.
+        (See <a href="#Property-SetLayout"><code>H5Pset_layout</code></a>.)
+        <p>
+        <em>Note regarding fixed-size datasets:</em><br>
+        Chunk size cannot exceed the size of a fixed-size dataset.
+        For example, a dataset consisting of a 5x4 fixed-size array cannot be 
+        defined with 10x10 chunks.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+          <td valign="top"><em>hid_t</em> <code>plist</code></td>
+          <td valign="top">IN: Identifier for property list to query.</td></tr>
+        <tr>
+          <td valign="top"><em>int</em> <code>ndims</code></td>
+          <td valign="top">IN: The number of dimensions of each chunk.</td></tr>
+        <tr>
+          <td valign="top"><em>const&nbsp;hsize_t&nbsp;*</em>&nbsp;<code>dim&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: An array defining the size, in dataset elements, 
+              of each chunk.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_chunk_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_chunk_f(prp_id, ndims, dims, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+  INTEGER, INTENT(IN) :: ndims          ! Number of chunk dimensions
+  INTEGER(HSIZE_T), DIMENSION(ndims), INTENT(IN) :: dims    
+                                        ! Array containing sizes of
+                                        ! chunk dimensions
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_chunk_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_deflate" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetDeflate">H5Pset_deflate</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_deflate</code>(<em>hid_t</em> <code>plist</code>,
+        <em>int</em> <code>level</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets compression method and compression level. 
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_deflate</code> sets the compression method for a 
+        dataset creation property list to <code>H5D_COMPRESS_DEFLATE</code>
+        and the compression level to <code>level</code>, which should 
+        be a value from zero to nine, inclusive.  
+        Lower compression levels are faster but result in less compression.  
+        This is the same algorithm as used by the GNU gzip program.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier for the dataset creation property list.</td></tr>
+        <tr>
+		    <td valign="top"><em>int</em> <code>level</code></td>
+            <td valign="top">IN: Compression level.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_deflate_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_deflate_f(prp_id, level, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+  INTEGER, INTENT(IN)        :: level  ! Compression level 
+  INTEGER, INTENT(OUT)       :: hdferr ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_deflate_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!--      ********** MOVED TO TechNotes/VFLfunc.html **********
+
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetDriver">H5Pset_driver</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_driver</code>(
+                     <em>hid_t</em> <code>plist_id</code>,
+                     <em>hid_t</em> <code>driver_id</code>,
+                     <em>const void *</em> <code>driver_info</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the file driver.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_driver</code> sets the file driver, 
+        <code>driver_id</code>, for a file access or data transfer 
+        property list, <code>plist_id</code>, and supplies an 
+        optional struct containing the driver-specific properties, 
+        <code>driver_info</code>.
+        <p>
+        <font color=red><b><i>Need <code>driver_info</code> struct definition.</i></b></font>
+        <p>
+        The driver properties will be copied into the property list 
+        and the reference count on the driver will be incremented, 
+        allowing the caller to close the driver identifier but still use 
+        the property list.
+  <dt><strong>Parameters:</strong>
+    <dl>
+        <dt><em>hid_t</em> <code>plist_id</code>
+            <dd>IN: File access or data transfer property list identifier.
+        <dt><em>hid_t</em> <code>driver_id</code>
+            <dd>IN: Driver identifier.
+        <dt><em>const void *</em> <code>driver_info</code>
+            <dd>IN: Optional struct containing driver properties.
+    </dl>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Non-C API(s):</strong>
+    <dd><a href="fortran/h5p_FORTRAN.html#h5pxxx_f" 
+        target="FortranWin"><img src="Graphics/FORTRAN.gif" border=0></a>
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+</dl>
+
+-->
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_dxpl_mpio" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetDxplMpio">H5Pset_dxpl_mpio</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_dxpl_mpio</code>(
+                     <em>hid_t</em> <code>dxpl_id</code>,
+                     <em>H5FD_mpio_xfer_t</em> <code>xfer_mode</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets data transfer mode.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_dxpl_mpio</code> sets the data transfer property list 
+        <code>dxpl_id</code> to use transfer mode <code>xfer_mode</code>. 
+        The property list can then be used to control the I/O transfer mode 
+        during data I/O operations. 
+        <p>
+        Valid transfer modes are as follows:
+        <dir>
+        <dl>
+          <dt><code>H5FD_MPIO_INDEPENDENT</code>
+            <dd>Use independent I/O access (default).
+          <dt><code>H5FD_MPIO_COLLECTIVE</code>
+            <dd>Use collective I/O access.
+        </dl>
+        </dir></p>
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dxpl_id</code></td>
+            <td valign="top">IN: Data transfer property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5FD_mpio_xfer_t</em>&nbsp;<code>xfer_mode&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Transfer mode.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>
+	<pre>
+SUBROUTINE h5pset_dxpl_mpio_f(prp_id, data_xfer_mode, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+  INTEGER, INTENT(IN) :: data_xfer_mode ! Data transfer mode 
+                                        ! Possible values are:
+                                        !    H5FD_MPIO_INDEPENDENT_F
+                                        !    H5FD_MPIO_COLLECTIVE_F
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_dxpl_mpio_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_dxpl_multi" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetDxplMulti">H5Pset_dxpl_multi</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_dxpl_multi</code>(
+                     <em>hid_t</em> <code>dxpl_id</code>,
+                     <em>const hid_t *</em><code>memb_dxpl</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the data transfer property list for the multi-file driver.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_dxpl_multi</code> sets the data transfer property list 
+        <code>dxpl_id</code> to use the multi-file driver for each 
+        memory usage type <code>memb_dxpl[]</code>.
+        <p>
+        <code>H5Pset_dxpl_multi</code> can only be used after 
+        the member map has been set with <code>H5Pset_fapl_multi</code>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dxpl_id</code>,</td>
+            <td valign="top">IN: Data transfer property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;hid_t&nbsp;*</em><code>memb_dxpl&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Array of data access property lists.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_edc_check" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetEdcCheck">H5Pset_edc_check</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_edc_check</code>(<em>hid_t</em> <code>plist</code>,
+                         <em>H5Z_EDC_t</em> <code>check</code>)
+  <dt><strong>Purpose:</strong>
+    <dd>Sets whether to enable error-detection when reading a dataset.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_edc_check</code> sets the dataset transfer property 
+        list <code>plist</code> to enable or disable error detection 
+        when reading data. 
+	<p>
+	Whether error detection is enabled or disabled is specified
+	in the <code>check</code> parameter.  
+	Valid values are as follows:
+	<table border="0">
+	<tr><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+	<code>H5Z_ENABLE_EDC</code> &nbsp; (default)
+	<br>
+	<code>H5Z_DISABLE_EDC</code>
+	</td></tr>
+	</table>
+	<p>
+	The error detection algorithm used is the algorithm previously  
+	specified in the corresponding dataset creation property list.  
+	<p>
+	This function does not affect the use of error detection when 
+	writing data.  
+  <dt><strong>Note:</strong>
+    <dd>The initial error detection implementation, Fletcher32 checksum, 
+        supports error detection for chunked datasets only.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Dataset transfer property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5Z_EDC_t</em>&nbsp;<code>check&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Specifies whether error checking is enabled or disabled 
+	        for dataset read operations.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_edc_check_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_edc_check_f(prp_id, flag, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id   ! Dataset transfer property 
+                                         ! list identifier 
+  INTEGER, INTENT(IN)        :: flag     ! EDC flag; possible values
+                                         !    H5Z_DISABLE_EDC_F 
+                                         !    H5Z_ENABLE_EDC_F 
+  INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                         ! 0 on success and -1 on failure
+ 
+END SUBROUTINE h5pset_edc_check_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_external" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetExternal">H5Pset_external</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_external</code>(<em>hid_t</em> <code>plist</code>,
+        <em>const char</em> <code>*name</code>,
+        <em>off_t</em> <code>offset</code>,
+        <em>hsize_t</em> <code>size</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Adds an external file to the list of external files.
+  <dt><strong>Description:</strong>
+    <dd>The first call to <code>H5Pset_external</code> sets the 
+        <i>external storage</i> property in the property list,
+        thus designating that the dataset will be stored in 
+        one or more non-HDF5 file(s) external to the HDF5 file.
+        This call also adds the file <code>name</code> as the 
+        first file in the list of external files.
+        Subsequent calls to the function add the named file as
+        the next file in the list.
+        <p>
+        If a dataset is split across multiple files, then the files
+        should be defined in order. The total size of the dataset is
+        the sum of the <code>size</code> arguments for all the external files.
+        If the total size is larger than the size of a dataset then the
+        dataset can be extended (provided the data space also allows
+        the extending).
+        <p>
+        The <code>size</code> argument specifies the number of bytes reserved 
+        for data in the external file.
+        If  <code>size</code> is set to <code>H5F_UNLIMITED</code>, the 
+        external file can be of unlimited size and no more files can be added 
+        to the external files list.
+        <p>
+        All of the external files for a given dataset must be 
+        specified with <code>H5Pset_external</code> 
+        <i>before</i> <code>H5Dcreate</code> is called to create 
+        the dataset. 
+        If one these files does not exist on the system when 
+        <code>H5Dwrite</code> is called to write data to it, 
+        the library will create the file.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+            <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier of a dataset creation property list.</td></tr>
+        <tr>
+            <td valign="top"><em>const&nbsp;char</em>&nbsp;<code>*name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Name of an external file.</td></tr>
+        <tr>
+            <td valign="top"><em>off_t</em> <code>offset</code></td>
+            <td valign="top">IN: Offset, in bytes, from the beginning of the file
+                to the location in the file where the data starts.</td></tr>
+        <tr>
+            <td valign="top"><em>hsize_t</em> <code>size</code></td>
+            <td valign="top">IN: Number of bytes reserved in the file for the data.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_external_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_external_f(prp_id, name, offset,bytes, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+  CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of an external file
+  INTEGER, INTENT(IN) :: offset         ! Offset, in bytes, from the 
+                                        ! beginning of the file to the 
+                                        ! location in the file where 
+                                        ! the data starts
+  INTEGER(HSIZE_T), INTENT(IN) :: bytes ! Number of bytes reserved in 
+                                        ! the file for the data
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_external_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_family_offset" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFamilyOffset">H5Pset_family_offset</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_family_offset</code> (
+                        <em>hid_t</em> <code>fapl_id</code>,
+                        <em>hsize_t</em> <code>offset</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets offset property for low-level access to a file in a family  of files.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_family_offset</code> sets the offset property in the 
+        file access property list <code>fapl_id</code> so that the user application 
+	can retrieve a file handle for low-level access to a particular member 
+	of a family of files.  The file handle is retrieved with a separate call 
+	to <a href="RM_H5F.html#File-GetVfdHandle"><code>H5Fget_vfd_handle</code></a>
+	(or, in special circumstances, to <code>H5FDget_vfd_handle</code>; 
+	see <cite>Virtual File Layer</cite> and <cite>List of VFL Functions</cite>
+	in <a href="TechNotes.html"><cite>HDF5 Technical Notes</cite></a>).
+	<p>
+	The value of <code>offset</code> is an offset in bytes from the 
+	beginning of the HDF5 file, identifying a user-determined location 
+	within the HDF5 file.  The file handle the user application is seeking 
+	is for the specific member-file in the associated family of files 
+	to which this offset is mapped. 
+	<p>
+	Use of this function is only appropriate for an HDF5 file written as a 
+	family of files with the <code>FAMILY</code> file driver.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t</em>&nbsp;<code>offset&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Offset in bytes within the HDF5 file.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_family_offset_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_family_offset_f(prp_id, offset, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)   :: prp_id   ! Property list identifier
+  INTEGER(HSIZE_T), INTENT(IN) :: offset   ! Offset in bytes
+  INTEGER, INTENT(OUT)         :: hdferr   ! Error code
+                                           ! 0 on success and -1 on failure
+ 
+END SUBROUTINE h5pset_family_offset_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fapl_core" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFaplCore">H5Pset_fapl_core</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_fapl_core</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>size_t</em> <code>increment</code>,
+                     <em>hbool_t</em> <code>backing_store</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Modifies the file access property list to use the 
+        <code>H5FD_CORE</code> driver.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fapl_core</code> modifies the file access property list 
+        to use the <code>H5FD_CORE</code> driver.  
+        <p>
+        The <code>H5FD_CORE</code> driver enables an application to work
+        with a file in memory, speeding reads and writes as no disk access 
+        is made.  File contents are stored only in memory until the file
+        is closed.  The <code>backing_store</code> parameter determines 
+        whether file contents are ever written to disk.
+        <p>
+        <code>increment</code> specifies the increment by which allocated 
+        memory is to be increased each time more memory is required.
+        <p>
+        If <code>backing_store</code> is set to <code>1</code> 
+        (<code>TRUE</code>), the file contents are flushed to a file 
+        with the same name as this core file when the file is closed 
+        or access to the file is terminated in memory.
+  <dt><strong>Note:</strong>
+    <dd>There is currently no means for reading a file from disk then
+        using the <code>H5FD_CORE</code> driver to manipulate the file.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>increment</code></td>
+            <td valign="top">IN: Size, in bytes, of memory increments.</td></tr>
+        <tr>
+		    <td valign="top"><em>hbool_t</em>&nbsp;<code>backing_store&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Boolean flag indicating whether to write the file
+                contents to disk when the file is closed.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_fapl_core_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_fapl_core_f(prp_id, increment, backing_store, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)  :: prp_id    ! Property list identifier
+  INTEGER(SIZE_T), INTENT(IN) :: increment ! File block size in bytes
+  LOGICAL, INTENT(IN) :: backing_store     ! Flag to indicate that entire 
+                                           ! file contents are flushed to 
+                                           ! a file with the same name as 
+                                           ! this core file
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code
+                                           ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_fapl_core_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top" align="left">
+		    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">&nbsp;</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">
+		    The <code>backing_store</code> parameter 
+			has changed from <em>INTEGER</em> to 
+			<em>LOGICAL</em> to better match the C API.</td></tr>
+		<tr>
+		  <td valign="top">1.4.0</td>
+		  <td valign="top">Function introduced in this release.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">&nbsp;</td>
+		</tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fapl_family" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFaplFamily">H5Pset_fapl_family</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_fapl_family</code> (
+                        <em>hid_t</em> <code>fapl_id</code>,
+                        <em> hsize_t</em> <code>memb_size</code>,
+                        <em>hid_t</em> <code>memb_fapl_id</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the file access property list to use the family driver.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fapl_family</code> sets the file access property list 
+        identifier, <code>fapl_id</code>, to use the family driver.
+        <p>
+        <code>memb_size</code> is the size in bytes of each file member.  Because 
+        this size is not saved in the file, it is used both for creating a new 
+        file, for re-opening and for extending an existing file.
+        <p>
+        When re-opening an existing family file, if there is only one member file,
+        the library allows this <code>memb_size</code> to be bigger than or equal to
+        the size of existing member file; if there are more than one member file, 
+        the library sets the <code>memb_size</code> to be equal to the size of first 
+        existing member file internally.  In either case, no <code>memb_size</code> 
+        smaller than the size of existing member file is allowed.  If this happens, 
+        the library will adjust the <code>memb_size</code> to the first existing 
+        member file size internally instead of returning error.
+        <p>
+        For example, if the total file size is 1MB and the only existing member 
+        file size is 1MB, <code>memb_size</code> can be bigger than or equal to 
+        1MB.  If the first member file size is 0.6MB and the second one is 0.4MB,
+        the library will set <code>memb_size</code> to 0.6MB internally no matter
+        what value the user passes in.
+        <p>
+        <code>memb_fapl_id</code> is the identifier of the 
+        file access property list to be used for each family member. 
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em> hsize_t</em> <code>memb_size</code></td>
+            <td valign="top">IN: Size in bytes of each file member.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>memb_fapl_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of file access property list for each 
+                    family member.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_fapl_family_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_fapl_family_f(prp_id, imemb_size, memb_plist, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)   :: prp_id    ! Property list identifier
+  INTEGER(HSIZE_T), INTENT(IN) :: memb_size ! Logical size, in bytes,
+                                            ! of each family member
+  INTEGER(HID_T), INTENT(IN) :: memb_plist  ! Identifier of the file 
+                                            ! access property list to be
+                                            ! used for each family member
+  INTEGER, INTENT(OUT) :: hdferr            ! Error code
+                                            ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_fapl_family_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fapl_gass" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFaplGass">H5Pset_fapl_gass</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_fapl_gass</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>GASS_Info</em> <code>info</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Stores user-supplied GASS information.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fapl_gass</code> stores user-supplied GASS information,
+        the <em>GASS_Info</em> struct data as passed in <code>info</code>, 
+        to the file access property list <code>fapl_id</code>.
+        <code>fapl_id</code> can then be used to create and/or open the file. 
+        <p>
+        The <em>GASS_Info</em> object, <code>info</code>, is used for 
+        file open operations when using GASS in the Globus environment. 
+        <p>
+        Any modification to <code>info</code> after this function call 
+        returns may have undetermined effect to the access property list.  
+        Users must call <code>H5Pset_fapl_gass</code> again to setup 
+        the property list.   
+  <dt><strong>Note:</strong>
+    <dd><code>H5Pset_fapl_gass</code> is an experimental function.
+        It is designed for use only when accessing files via the 
+        GASS facility of the Globus environment. 
+        For further information, see 
+        <a href="http://www.globus.org/">http//www.globus.org/</a>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code>,</td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>GASS_Info</em>&nbsp;<code>info&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Pointer to the GASS information structure.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fapl_log" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFaplLog">H5Pset_fapl_log</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_fapl_log</code>(
+                        <em>hid_t</em> <code>fapl_id</code>,
+                        <em>const char *</em><code>logfile</code>,
+                        <em>unsigned int</em> <code>flags</code>,
+                        <em>size_t</em> <code>buf_size</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets up the use of the logging driver.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fapl_log</code> modifies the 
+        file access property list to use the logging driver 
+        <code>H5FD_LOG</code>.
+        <p>
+        <code>logfile</code> is the name of the file in which the 
+        logging entries are to be recorded.
+        <p>
+	The actions to be logged are specified in the parameter <code>flags</code> 
+	using the pre-defined constants described in the following table.
+	Multiple flags can be set through the use of an logical OR contained 
+	in parentheses.  For example, logging read and write locations would 
+	be specified as <code>(H5FD_LOG_LOC_READ|H5FD_LOG_LOC_WRITE)</code>.
+        <!--The <code>flags</code> parameter contains a 2-byte hexadecimal value 
+	which is computed from the following elements:-->
+        <center>
+        <table width=100%>
+        <tr valign=top align=left><td>
+            <hr>
+            <b>Flag</b>
+            <!--</td><td width="20%">
+            <hr>
+            <b>Hex value</b>-->
+            </td><td>
+            <hr>
+            <b>Description</b>
+        </td></tr>
+	
+        <tr valign=top align=left><td>
+            <hr>
+            <code>H5FD_LOG_LOC_READ</code> 
+            <!--</td><td>
+            <code>0x0001</code>-->
+            </td><td rowspan="3">
+            <hr>
+            Track the location and length of every read, write, or seek operation. 
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5FD_LOG_LOC_WRITE&nbsp;&nbsp;</code> 
+            <!--</td><td>
+            <code>0x0002&nbsp;&nbsp;</code>-->
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5FD_LOG_LOC_SEEK</code> 
+            <!--</td><td>
+            <code>0x0004</code>-->
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5FD_LOG_LOC_IO</code> 
+            <!--</td><td>
+            <code>0x0007</code>-->
+            </td><td>
+            Track all I/O locations and lengths.  
+	    The logical equivalent of the following:
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>&nbsp;</code> 
+            </td><td>
+            <code>(H5FD_LOG_LOC_READ | H5FD_LOG_LOC_WRITE | H5FD_LOG_LOC_SEEK)</code>
+        </td></tr>
+	
+        <tr valign=top align=left><td>
+            <hr>
+            <code>H5FD_LOG_FILE_READ</code> 
+            <!--</td><td>
+            <code>0x0008</code>-->
+            </td><td rowspan="2">
+            <hr>
+            Track the number of times each byte is read or written. 
+        </td></tr>
+	<tr valign=top align=left><td>
+            <code>H5FD_LOG_FILE_WRITE&nbsp;&nbsp;</code> 
+            <!--</td><td>
+            <code>0x0010</code>-->
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5FD_LOG_FILE_IO</code> 
+            <!--</td><td>
+            <code>0x0018</code>-->
+            </td><td>
+            Track the number of times each byte is read and written.
+	    The logical equivalent of the following:
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>&nbsp;</code> 
+            </td><td>
+            <code>(H5FD_LOG_FILE_READ | H5FD_LOG_FILE_WRITE)</code>
+        </td></tr>
+	
+	<tr valign=top align=left><td>
+            <hr>
+            <code>H5FD_LOG_FLAVOR</code> 
+            <!--</td><td>
+            <code>0x0020</code>-->
+            </td><td>
+            <hr>
+            Track the type, or flavor, of information stored at each byte. 
+        </td></tr>	
+	
+	<tr valign=top align=left><td>
+            <hr>
+            <code>H5FD_LOG_NUM_READ</code> 
+            <!--</td><td>
+            <code>0x0040</code>-->
+            </td><td rowspan="3">
+            <hr>
+            Track the total number of read, write, or seek operations that occur. 
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5FD_LOG_NUM_WRITE</code> 
+            <!--</td><td>
+            <code>0x0080</code>-->
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5FD_LOG_NUM_SEEK</code> 
+            <!--</td><td>
+            <code>0x0100</code>-->
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5FD_LOG_NUM_IO</code> 
+            <!--</td><td>
+            <code>0x01C0</code>-->
+            </td><td>
+            Track the total number of all types of I/O operations.
+	    The logical equivalent of the following:
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>&nbsp;</code> 
+            </td><td>
+            <code>(H5FD_LOG_NUM_READ | H5FD_LOG_NUM_WRITE | H5FD_LOG_NUM_SEEK)</code>
+        </td></tr>
+	
+<!-- NEW PAGE -->
+	<tr valign=top align=left><td>
+            <hr>
+            <code>H5FD_LOG_TIME_OPEN</code> 
+            <!--</td><td>
+            <code>0x0200</code>-->
+            </td><td rowspan="5">
+            <hr>
+            Track the time spent in open, read, write, seek, or close operations. 
+	    <dir>
+	    <span class="termEmphasis"><i>
+	    Not implemented in this release: open and read
+	    <br> 
+	    Partially implemented: write and seek
+	    <br> 
+	    Fully implemented: close</i></span>
+	    </dir>
+        </td></tr>
+        <tr valign=top align=left><td>
+	    <code>H5FD_LOG_TIME_READ</code> 
+            <!--</td><td>
+            <code>0x0400</code>-->
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5FD_LOG_TIME_WRITE</code> 
+            <!--</td><td>
+            <code>0x0800</code>-->
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5FD_LOG_TIME_SEEK</code> 
+            <!--</td><td>
+            <code>0x1000</code>-->
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5FD_LOG_TIME_CLOSE</code> 
+            <!--</td><td>
+            <code>0x2000</code>-->
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5FD_LOG_TIME_IO</code> 
+            <!--</td><td>
+            <code>0x3E00</code>-->
+            </td><td>
+	    Track the time spent in each of the above operations.
+	    The logical equivalent of the following:
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>&nbsp;</code> 
+            </td><td>
+            <code>(H5FD_LOG_TIME_OPEN | H5FD_LOG_TIME_READ | H5FD_LOG_TIME_WRITE 
+	                              | H5FD_LOG_TIME_SEEK | H5FD_LOG_TIME_CLOSE)</code>
+        </td></tr>
+
+        <tr valign=top align=left><td>
+            <hr>
+            <code>H5FD_LOG_ALLOC</code> 
+            <!--</td><td>
+            <code>0x4000</code>-->
+            </td><td>
+            <hr>
+            Track the allocation of space in the file.
+        </td></tr>
+
+        <tr valign=top align=left><td>
+            <hr>
+            <code>H5FD_LOG_ALL</code> 
+            <!--</td><td>
+            <code>0xFFFF -- all possible
+	      <br>0x8FFF -- all current at r1.6</code>-->
+            </td><td>
+            <hr>
+            Track everything.
+	    The logical equivalent of the following:
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>&nbsp;</code> 
+            </td><td>
+            <code>(H5FD_LOG_ALLOC | H5FD_LOG_TIME_IO | H5FD_LOG_NUM_IO | H5FD_LOG_FLAVOR 
+	                          |H5FD_LOG_FILE_IO | H5FD_LOG_LOC_IO)</code>
+        </td></tr>
+	
+        <tr valign=top align=left><td>
+            <hr>
+            </td><td>
+            <hr>
+        </td></tr>
+	
+        </table>
+        </center>
+
+	<p>
+	The logging driver can track the number of times 
+	each byte in the file is read from or written to 
+	(using <code>H5FD_LOG_FILE_READ</code> and <code>H5FD_LOG_FILE_WRITE</code>)
+	and what kind of data is at that location 
+	(e.g., meta data, raw data; using <code>H5FD_LOG_FLAVOR</code>).  
+	This information is tracked in a buffer of size <code>buf_size</code>,
+	which must be at least the size in bytes of the file to be logged.
+ 
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>char *</em><code>logfile</code></td>
+            <td valign="top">IN: Name of the log file.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned&nbsp;int</em>&nbsp;<code>flags&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Flags specifying the types of logging activity.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>buf_size</code></td>
+            <td valign="top">IN: The size of the logging buffer.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns non-negative if successful.
+        Otherwise returns negative.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    The <code>verbosity</code> parameter 
+			has been removed.<br>
+			Two new parameters have been added: 
+			<code>flags</code> of type <em>unsigned</em> 
+			and <code>buf_size</code> of type 
+			<em>size_t</em>.
+			</td></tr>
+		<tr>
+		  <td valign="top">1.4.0</td>
+		  <td valign="top">Function introduced in this release.</td>
+		</tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fapl_mpio" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFaplMpio">H5Pset_fapl_mpio</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_fapl_mpio</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>MPI_Comm</em> <code>comm</code>,
+                     <em>MPI_Info</em> <code>info</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Stores MPI IO communicator information to the file access property list.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fapl_mpio</code> stores the user-supplied 
+        MPI IO parameters <code>comm</code>, for communicator, and 
+        <code>info</code>, for information, in
+        the file access property list <code>fapl_id</code>. 
+        That property list can then be used to create and/or open the file.  
+        <p>
+        <code>H5Pset_fapl_mpio</code> is available only in the 
+        parallel HDF5 library and is not a collective function.
+        <p>
+        <code>comm</code> is the MPI communicator to be used for 
+        file open as defined in <code>MPI_FILE_OPEN</code> of MPI-2. 
+        This function does not create a duplicated communicator. 
+        Modifications to <code>comm</code> after this function call 
+        returns may have an undetermined effect on the access property list. 
+        Users should not modify the communicator while it is defined 
+        in a property list.
+        <p>
+        <code>info</code> is the MPI info object to be used for 
+        file open as defined in <code>MPI_FILE_OPEN</code> of MPI-2. 
+        This function does not create a duplicated info object. 
+        Any modification to the info object after this function call 
+        returns may have an undetermined effect on the access property list. 
+        Users should not modify the info while it is defined 
+        in a property list.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>MPI_Comm</em>&nbsp;<code>comm&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: MPI-2 communicator.</td></tr>
+        <tr>
+		    <td valign="top"><em>MPI_Info</em> <code>info</code></td>
+            <td valign="top">IN: MPI-2 info object.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_fapl_mpio_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_fapl_mpio_f(prp_id, comm, info, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+  INTEGER, INTENT(IN) :: comm           ! MPI communicator to be used for 
+                                        ! file open as defined in 
+                                        ! MPI_FILE_OPEN of MPI-2
+  INTEGER, INTENT(IN) :: info           ! MPI info object to be used for 
+                                        ! file open as defined in 
+                                        ! MPI_FILE_OPEN of MPI-2
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_fapl_mpio_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.5</td>
+          <td valign="top">
+		    This function's handling of the MPI Communicator 
+			and Info objects changed at this release. A copy 
+			of each of these objects is now stored in the 
+			property list instead of pointers to each 
+			object.</td></tr>
+		<tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pget_fapl_mpio" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFaplMpiPosix">H5Pset_fapl_mpiposix</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_fapl_mpiposix</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>MPI_Comm</em> <code>comm</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Stores MPI IO communicator information to a file access property list.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fapl_mpiposix</code> stores the user-supplied 
+        MPI IO parameter <code>comm</code>, for communicator, 
+        in the file access property list <code>fapl_id</code>. 
+        That property list can then be used to create and/or open the file.  
+        <p>
+        <code>H5Pset_fapl_mpiposix</code> is available only in the 
+        parallel HDF5 library and is not a collective function.
+        <p>
+        <code>comm</code> is the MPI communicator to be used for 
+        file open as defined in <code>MPI_FILE_OPEN</code> of MPI-2. 
+        This function does not create a duplicated communicator. 
+        Modifications to <code>comm</code> after this function call 
+        returns may have an undetermined effect on the access property list. 
+        Users should not modify the communicator while it is defined 
+        in a property list.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>MPI_Comm</em>&nbsp;<code>comm&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: MPI-2 communicator.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_fapl_mpiposix_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+  INTEGER, INTENT(IN) :: comm           ! MPI communicator to be used 
+                                        ! for file open as defined in 
+                                        ! MPI_FILE_OPEN of MPI-2
+  LOGICAL, INTENT(IN) :: use_gpfs
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5pset_fapl_mpiposix_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top">&nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.1</td>
+          <td valign="top">&nbsp;</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">
+		    Fortran subroutine introduced in this release.
+		  </td></tr>
+		<tr>
+		  <td valign="top">1.6.0</td>
+		  <td valign="top">
+		    A <code>use_gpfs</code> parameter of type 
+			<em>hbool_t</em> has been added.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">&nbsp;</td>
+		</tr>
+		<tr>
+		  <td valign="top">1.6.0</td>
+		  <td valign="top">
+		    Function introduced in this release.
+			</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">&nbsp;</td>
+		</tr>
+    </table></ul>
+</dl>
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fapl_multi" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFaplMulti">H5Pset_fapl_multi</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_fapl_multi</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>const H5FD_mem_t *</em><code>memb_map</code>,
+                     <em>const hid_t *</em><code>memb_fapl</code>,
+                     <em>const char * const *</em><code>memb_name</code>,
+                     <em>const haddr_t *</em><code>memb_addr</code>,
+                     <em>hbool_t</em> <code>relax</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets up use of the multi-file driver.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fapl_multi</code> sets the file access property list 
+        <code>fapl_id</code> to use the multi-file driver. 
+        <p>
+        The multi-file driver enables different types of HDF5 data and 
+        metadata to be written to separate files.  These files are viewed 
+        by the HDF5 library and the application as a single virtual HDF5 file
+        with a single HDF5 file address space.
+        The types of data that can be broken out into separate files include 
+        raw data, the superblock, B-tree data, global heap data, 
+        local heap data, and object headers.
+        At the programmer's discretion, two or more types of data can be 
+        written to the same file while other types of data are written to 
+        separate files.
+        <p>
+        The array <code>memb_map</code> maps memory usage types to other
+        memory usage types and is the mechanism that allows the caller 
+        to specify how many files are created. 
+        The array contains <code>H5FD_MEM_NTYPES</code> entries, 
+        which are either the value <code>H5FD_MEM_DEFAULT</code>
+        or a memory usage type.
+        The number of unique values determines the number of files 
+        that are opened.  
+        <p>
+        The array <code>memb_fapl</code> contains a property list
+        for each memory usage type that will be associated with a file. 
+        <p>
+        The array <code>memb_name</code> should be a name generator 
+        (a printf-style format with a %s which will be replaced with the
+        name passed to <code>H5FDopen</code>, usually from 
+        <code>H5Fcreate</code> or <code>H5Fopen</code>).
+        <p>
+        The array <code>memb_addr</code> specifies the offsets within the 
+        virtual address space, from <code>0</code> (zero) to 
+        <code>HADDR_MAX</code>, at which each type of data storage begins.
+        <p>
+        If <code>relax</code> is set to <code>TRUE</code> (or <code>1</code>),
+        then opening an existing file for read-only access will not fail 
+        if some file members are missing.  
+        This allows a file to be accessed in a limited sense if just the
+        meta data is available.
+        <p>
+        Default values for each of the optional arguments are as follows:
+        <dir>
+        <dl>
+          <dt><code>memb_map</code>
+            <dd>The default member map contains the value
+              <code>H5FD_MEM_DEFAULT</code> for each element.
+          <dt><code>memb_fapl</code>
+            <dd>The default value is <code>H5P_DEFAULT</code> for each element.
+          <dt><code>memb_name</code>
+            <dd>The default string is &nbsp; <code>%s-<i>X</i>.h5</code> &nbsp;
+              where &nbsp; <code><i>X</i></code> &nbsp; is one of the 
+              following letters:
+              <dir>
+                  <code>s</code> &nbsp;&nbsp; for <code>H5FD_MEM_SUPER</code>
+                  <br>
+                  <code>b</code> &nbsp;&nbsp; for <code>H5FD_MEM_BTREE</code>
+                  <br>
+                  <code>r</code> &nbsp;&nbsp; for <code>H5FD_MEM_DRAW</code>
+                  <br>
+                  <code>g</code> &nbsp;&nbsp; for <code>H5FD_MEM_GHEAP</code>
+                  <br>
+                  <code>l</code> &nbsp;&nbsp; for <code>H5FD_MEM_LHEAP</code>
+                  <br>
+                  <code>o</code> &nbsp;&nbsp; for <code>H5FD_MEM_OHDR</code>
+              </dir></dd></dt>
+<!-- NEW PAGE -->
+          <dt><code>memb_addr</code>
+            <dd>The default value is <code>HADDR_UNDEF</code> for each element.
+        </dl>
+        </dir>
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;H5FD_mem_t&nbsp;*</em><code>memb_map&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Maps memory usage types to other memory usage types.</td></tr>
+        <tr>
+		    <td valign="top"><em>const hid_t *</em><code>memb_fapl</code></td>
+            <td valign="top">IN: Property list for each memory usage type.</td></tr>
+        <tr>
+		    <td valign="top"><em>const char * const *</em><code>memb_name</code></td>
+            <td valign="top">IN: Name generator for names of member files.</td></tr>
+        <tr>
+		    <td valign="top"><em>const haddr_t *</em><code>memb_addr</code></td>
+            <td valign="top">IN: The offsets within the virtual address space, 
+                from <code>0</code> (zero) to <code>HADDR_MAX</code>, 
+                at which each type of data storage begins.</td></tr>
+        <tr>
+		    <td valign="top"><em>hbool_t</em> <code>relax</code></td>
+            <td valign="top">IN: Allows read-only access to incomplete file sets 
+                when <code>TRUE</code>.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Example:</strong>
+    <dd>The following code sample sets up a multi-file access property list 
+        that partitions data into meta and raw files, each being 
+        one-half of the address:
+        <pre>
+                  H5FD_mem_t mt, memb_map[H5FD_MEM_NTYPES];
+                  hid_t memb_fapl[H5FD_MEM_NTYPES];
+                  const char *memb[H5FD_MEM_NTYPES];
+                  haddr_t memb_addr[H5FD_MEM_NTYPES];
+ 
+                  // The mapping...
+                  for (mt=0; mt&lt;H5FD_MEM_NTYPES; mt++) {
+                     memb_map[mt] = H5FD_MEM_SUPER;
+                  }
+                  memb_map[H5FD_MEM_DRAW] = H5FD_MEM_DRAW;
+ 
+                  // Member information
+                  memb_fapl[H5FD_MEM_SUPER] = H5P_DEFAULT;
+                  memb_name[H5FD_MEM_SUPER] = "%s.meta";
+                  memb_addr[H5FD_MEM_SUPER] = 0;
+ 
+                  memb_fapl[H5FD_MEM_DRAW] = H5P_DEFAULT;
+                  memb_name[H5FD_MEM_DRAW] = "%s.raw";
+                  memb_addr[H5FD_MEM_DRAW] = HADDR_MAX/2;
+ 
+                  hid_t fapl = H5Pcreate(H5P_FILE_ACCESS);
+                  H5Pset_fapl_multi(fapl, memb_map, memb_fapl,
+                                  memb_name, memb_addr, TRUE);
+        </pre>
+  
+  <dt><strong>Fortran90 Interface:</strong> h5pset_fapl_multi_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_fapl_multi_f(prp_id, memb_map, memb_fapl, memb_name,
+                               memb_addr, relax, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T),INTENT(IN)  :: prp_id     ! Property list identifier
+
+  INTEGER,DIMENSION(0:H5FD_MEM_NTYPES_F-1),INTENT(IN)          :: memb_map
+  INTEGER(HID_T),DIMENSION(0:H5FD_MEM_NTYPES_F-1),INTENT(IN)   :: memb_fapl
+  CHARACTER(LEN=*),DIMENSION(0:H5FD_MEM_NTYPES_F-1),INTENT(IN) :: memb_name
+  REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN)           :: memb_addr
+              ! Numbers in the interval [0,1) (e.g. 0.0 0.1 0.5 0.2 0.3 0.4)
+              ! real address in the file will be calculated as X*HADDR_MAX</pre>
+<!-- NEW PAGE -->
+<pre>
+  LOGICAL, INTENT(IN)  :: relax
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code
+                                           ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_fapl_multi_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.3</td>
+          <td valign="top">
+			<code>memb_name</code> parameter type changed to 
+			<em>const char* const*</em>.</td></tr>
+		<tr>
+		  <td valign="top">1.4.0</td>
+		  <td valign="top">Function introduced in this release.</td>
+		</tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fapl_sec2" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFaplSec2">H5Pset_fapl_sec2</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_fapl_sec2</code>(
+                     <em>hid_t</em> <code>fapl_id</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the sec2 driver.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fapl_sec2</code> modifies the file access property list 
+        to use the <code>H5FD_SEC2</code> driver.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>fapl_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_fapl_sec2_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_fapl_sec2_f(prp_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)    :: prp_id  ! Property list identifier
+  INTEGER, INTENT(OUT)          :: hdferr  ! Error code
+                                           ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_fapl_sec2_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fapl_split" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFaplSplit">H5Pset_fapl_split</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_fapl_split</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>const char *</em><code>meta_ext</code>,
+                     <em>hid_t</em> <code>meta_plist_id</code>,
+                     <em>const char *</em><code>raw_ext</code>,
+                     <em>hid_t</em> <code>raw_plist_id</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Emulates the old split file driver.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fapl_split</code> is a compatibility function that
+        enables the multi-file driver to emulate the split driver from 
+        HDF5 Releases 1.0 and 1.2. 
+        The split file driver stored metadata and raw data in separate files
+        but provided no mechanism for separating types of metadata.
+        <p> 
+        <code>fapl_id</code> is a file access property list identifier.
+        <p> 
+        <code>meta_ext</code> is the filename extension for the metadata file.
+	The extension is appended to the name passed to <code>H5FDopen</code>,
+	usually from <code>H5Fcreate</code> or <code>H5Fopen</code>,
+	to form the name of the metadata file.
+	If the string %s is used in the extension, it works like the
+	name generator as in <code>H5Pset_fapl_multi</code>.
+        <p> 
+        <code>meta_plist_id</code> is the file access property list identifier 
+        for the metadata file.
+        <p> 
+        <code>raw_ext</code> is the filename extension for the raw data file.
+	The extension is appended to the name passed to <code>H5FDopen</code>,
+	usually from <code>H5Fcreate</code> or <code>H5Fopen</code>,
+	to form the name of the rawdata file.
+	If the string %s is used in the extension, it works like the
+	name generator as in <code>H5Pset_fapl_multi</code>.
+        <p> 
+        <code>raw_plist_id</code> is the file access property list identifier 
+        for the raw data file.
+        <p>
+        If a user wishes to check to see whether this driver is in use, 
+        the user must call <code>H5Pget_driver</code> and compare the
+        returned value to the string <code>H5FD_MULTI</code>.
+        A positive match will confirm that the multi driver is in use; 
+        HDF5 provides no mechanism to determine whether it was called
+        as the special case invoked by <code>H5Pset_fapl_split</code>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code>,</td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char&nbsp;*</em><code>meta_ext,&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Metadata filename extension.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>meta_plist_id</code>,</td>
+            <td valign="top">IN: File access property list identifier for the metadata file.</td></tr>
+        <tr>
+		    <td valign="top"><em>const char *</em><code>raw_ext</code>,</td>
+            <td valign="top">IN: Raw data filename extension.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>raw_plist_id</code></td>
+            <td valign="top">IN: File access property list identifier for the raw data file.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Example:</strong>
+    <dd>
+    <pre>
+/* Example 1: Both metadata and rawdata files are in the same  */
+/*    directory.   Use Station1-m.h5 and Station1-r.h5 as      */
+/*    the metadata and rawdata files.                          */
+hid_t fapl, fid;
+fapl = H5Pcreate(H5P_FILE_ACCESS);
+H5Pset_fapl_split(fapl, "-m.h5", H5P_DEFAULT, "-r.h5", H5P_DEFAULT);
+fid=H5Fcreate("Station1",H5F_ACC_TRUNC,H5P_DEFAULT,fapl);</pre>
+<!-- NEW PAGE -->
+<pre>
+/* Example 2: metadata and rawdata files are in different      */
+/*    directories.  Use PointA-m.h5 and /pfs/PointA-r.h5 as    */
+/*    the metadata and rawdata files.                          */
+hid_t fapl, fid;
+fapl = H5Pcreate(H5P_FILE_ACCESS);
+H5Pset_fapl_split(fapl, "-m.h5", H5P_DEFAULT, "/pfs/%s-r.h5", H5P_DEFAULT);
+fid=H5Fcreate("PointA",H5F_ACC_TRUNC,H5P_DEFAULT,fapl);</pre>
+  </dt>
+  
+  <dt><strong>Fortran90 Interface:</strong> h5pset_fapl_split_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_fapl_split_f(prp_id, meta_ext, meta_plist, raw_ext, &
+                               raw_plist, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T),INTENT(IN)   :: prp_id     ! Property list identifier
+  CHARACTER(LEN=*),INTENT(IN) :: meta_ext   ! Name of the extension for
+                                            ! the metafile filename
+  INTEGER(HID_T),INTENT(IN)   :: meta_plist ! Identifier of the meta file
+                                            ! access property list
+  CHARACTER(LEN=*),INTENT(IN) :: raw_ext    ! Name extension for the raw 
+                                            ! file filename
+  INTEGER(HID_T),INTENT(IN)   :: raw_plist  ! Identifier of the raw file
+                                            ! access property list
+  INTEGER, INTENT(OUT) :: hdferr            ! Error code
+                                            ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_fapl_split_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fapl_srb" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFaplSrb">H5Pset_fapl_srb</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_fapl_srb</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>SRB_Info</em> <code>info</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Saves SRB connection handler and sets SRB settings.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fapl_srb</code> stores the SRB client-to-server 
+        connection handler <code>SRB_CONN</code> after the connection
+        is established and other user-supplied SRB information.
+        <p>
+        The  user-supplied SRB information is contained in the 
+        <em>SRB_Info</em> struct pointed to by <code>info</code>
+        and is stored in the file access property list <code>fapl_id</code>.
+        This information can then be used to create or open a file.           
+  <dt><strong>Note:</strong>
+    <dd><code>H5Pset_fapl_gass</code> is an experimental function.
+        It is designed for use only when accessing files via the 
+        Storage Resource Broker (SRB).  For further information, see 
+        <a href="http://www.npaci.edu/Research/DI/srb/">http//www.npaci.edu/Research/DI/srb/</a>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>fapl_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>SRB_Info</em> <code>info</code></td>
+            <td valign="top">IN: Pointer to the SRB information structure.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fapl_stdio" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFaplStdio">H5Pset_fapl_stdio</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_fapl_stdio</code>(
+                     <em>hid_t</em> <code>fapl_id</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the standard I/O driver.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fapl_stdio</code> modifies the file access property list 
+        to use the standard I/O driver, <code>H5FD_STDIO</code>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>fapl_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_fapl_stdio_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_fapl_stdio_f(prp_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)    :: prp_id  ! Property list identifier
+  INTEGER, INTENT(OUT)          :: hdferr  ! Error code
+                                           ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_fapl_stdio_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fapl_stream" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFaplStream">H5Pset_fapl_stream</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_fapl_stream</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>H5FD_stream_fapl_t *</em><code>fapl</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets up the use of the streaming I/O driver.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fapl_stream</code> sets up the use of the 
+        streaming I/O driver.
+        <p>
+        <code>fapl_id</code> is the identifier for the 
+        file access property list currently in use.
+        <p>
+        <code>fapl</code> is the file access property list.
+        <p>
+        The <code>H5FD_stream_fapl_t</code> struct contains the following 
+        elements:
+        <dir>
+            <table border=0>
+              <tr align=left>
+                <td><em>size_t</em></td>
+                <td><code>increment</code></td></tr>
+              <tr align=left>
+                <td><em><font size=-1>H5FD_STREAM_SOCKET_TYPE</font></em></td>
+                <td><code>socket</code></td></tr>
+              <tr align=left>
+                <td><em>hbool_t</em></td>
+                <td><code>do_socket_io</code></td></tr>
+              <tr align=left>
+                <td><em>unsigned int</em></td>
+                <td><code>backlog</code></td></tr>
+              <tr align=left>
+                <td><em><font size=-1>H5FD</font>_stream_broadcast_t</em></td>
+                <td><code>broadcast_fn</code></td></tr>
+              <tr align=left>
+                <td><em>void *</em></td>
+                <td><code>broadcast_arg</code></td></tr>
+            </table>
+            <ul>
+            <li><code>increment</code> specifies how much memory to allocate
+              each time additional memory is required.  
+            <li><code>socket</code> is an external socket descriptor;
+              if a valid socket argument is provided, that socket will be used.
+            <li><code>do_socket_io</code> is a boolean value specifying whether
+              to perform I/O on <code>socket</code>.
+            <li><code>backlog</code> is the argument for the 
+              <code>listen</code> call.
+            <li><code>broadcast_fn</code> is the broadcast callback function.
+            <li><code>broadcast_arg</code> is the user argument to 
+              the broadcast callback function.
+            </ul>
+        </dir>
+        <p>
+        <code>H5Pset_fapl_stream</code> and <code>H5Pget_fapl_stream</code> 
+        are not intended for use in a parallel environment.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5FD_stream_fapl_t&nbsp;*</em><code>fapl&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: The streaming I/O file access property list.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fclose_degree" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFcloseDegree">H5Pset_fclose_degree</a> 
+  <dt><strong>Signature:</strong> 
+  <dd><em>herr_t</em> <code>H5Pset_fclose_degree</code>(<em>hid_t</em> <code>fapl_id</code>, 
+    <em>H5F_close_degree_t</em> <code>fc_degree</code>) 
+  <dt><strong>Purpose:</strong> 
+  <dd>Sets the file close degree. 
+  <dt><strong>Description:</strong> 
+  <dd><code>H5Pset_fclose_degree</code> sets the file close degree property <code>fc_degree</code> 
+    in the file access property list <code>fapl_id</code>.  
+    <p> The value of <code>fc_degree</code> determines how aggressively <code>H5Fclose</code> 
+      deals with objects within a file that remain open when <code>H5Fclose</code> 
+      is called to close that file.  <code>fc_degree</code> can have any one of 
+      four valid values: 
+    <div align="center"> 
+      <table width="75%" border="1" cellpadding="3">
+        <tr> 
+          <th valign="top">Degree name</th>
+          <th valign="top"><code>H5Fclose</code> behavior with no open object 
+            in file</th>
+          <th valign="top"><code>H5Fclose</code> behavior with open object(s) 
+            in file</th>
+        </tr>
+        <tr> 
+          <td valign="top"><code>H5F_CLOSE_WEAK</code></td>
+          <td valign="top">Actual file is closed.</td>
+          <td valign="top">Access to file identifier is terminated; actual file 
+            close is delayed until all objects in file are closed</td>
+        </tr>
+        <tr> 
+          <td valign="top"><code>H5F_CLOSE_SEMI</code></td>
+          <td valign="top">Actual file is closed.</td>
+          <td valign="top">Function returns FAILURE</td>
+        </tr>
+        <tr> 
+          <td valign="top"><code>H5F_CLOSE_STRONG</code></td>
+          <td valign="top">Actual file is closed.</td>
+          <td valign="top">All open objects remaining in the file are closed then 
+            file is closed</td>
+        </tr>
+        <tr> 
+          <td valign="top"><code>H5F_CLOSE_DEFAULT</code></td>
+          <td colspan="2" valign="top">The VFL driver chooses the behavior.  Currently, 
+            all VFL drivers set this value to <code>H5F_CLOSE_WEAK</code>, except 
+            for the MPI-I/O driver, which sets it to <code>H5F_CLOSE_SEMI</code>. 
+          </td>
+        </tr>
+      </table>
+    </div>
+  <dt><strong>Parameters:</strong> 
+    <ul><table>
+      <tr>
+	      <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+          <td valign="top">IN: File access property list identifier.</td></tr>
+      <tr>
+	      <td valign="top"><em>H5F_close_degree_t</em>&nbsp;<code>fc_degree&nbsp;&nbsp;&nbsp;&nbsp;</code></td> 
+          <td valign="top">IN: Pointer to a location containing the file close degree property, 
+        the value of <code>fc_degree</code>.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong> 
+  <dd>Returns a non-negative value if successful. Otherwise returns a negative 
+    value. 
+  <dt><strong>Fortran90 Interface:</strong> h5pset_fclose_degree_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_fclose_degree_f(fapl_id, degree, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: fapl_id  ! File access property list identifier
+  INTEGER, INTENT(IN) :: degree          ! Info about file close behavior 
+                                         ! Possible values:
+                                         !    H5F_CLOSE_DEFAULT_F
+                                         !    H5F_CLOSE_WEAK_F
+                                         !    H5F_CLOSE_SEMI_F
+                                         !    H5F_CLOSE_STRONG_F
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_fclose_degree_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fill_time" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFillTime">H5Pset_fill_time</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pset_fill_time</code>(<em>hid_t</em> <code>plist_id</code>,
+            <em>H5D_fill_time_t</em> <code>fill_time</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the time when fill values are written to a dataset.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fill_time</code> sets up the timing for writing fill values 
+        to a dataset.  
+	This property is set in the dataset creation property list <code>plist_id</code>.
+        <p>
+	Timing is specified in <code>fill_time</code> with one of the following values:
+	<table border=0 >
+           <tr valign="top"><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+	     <code>H5D_FILL_TIME_IFSET</code>&nbsp;&nbsp; 
+             </td><td>
+	     Write fill values to the dataset when storage space is allocated 
+	     only if there is a user-defined fill value, i.e., one set with 
+	     <a href="#Property-SetFillValue">H5Pset_fill_value</a>.
+	     &nbsp;&nbsp;(Default)
+	   </td></tr><tr valign="top"><td>&nbsp;</td><td>
+	     <code>H5D_FILL_TIME_ALLOC</code>
+             </td><td>
+	     Write fill values to the dataset when storage space is allocated.
+	   </td></tr><tr valign="top"><td>&nbsp;</td><td>
+             <code>H5D_FILL_TIME_NEVER</code>
+             </td><td>
+             Never write fill values to the dataset.
+ 	</td></tr></table>
+  <dt><strong>Note:</strong>
+    <dd><code>H5Pset_fill_time</code> is designed for coordination 
+        with the dataset fill value and 
+	dataset storage allocation time properties, set with the functions 
+	<code>H5Pset_fill_value</code> and <code>H5Pset_alloc_time</code>.
+	<p>
+	See <a href="RM_H5D.html#Dataset-Create">H5Dcreate</a> for 
+	further cross-references.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist_id</code></td>
+            <td valign="top">IN: Dataset creation property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5D_fill_time_t</em>&nbsp;<code>fill_time&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: When to write fill values to a dataset.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_fill_time_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_fill_time_f(plist_id, flag, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset creation property
+                                         ! list identifier
+  INTEGER(HSIZE_T), INTENT(IN) :: flag   ! File time flag
+                                         ! Possible values are:
+                                         !    H5D_FILL_TIME_ERROR_F
+                                         !    H5D_FILL_TIME_ALLOC_F
+                                         !    H5D_FILL_TIME_NEVER_F
+  INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_fill_time_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fill_value" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFillValue">H5Pset_fill_value</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_fill_value</code>(<em>hid_t</em> <code>plist_id</code>,
+        <em>hid_t</em> <code>type_id</code>,
+        <em>const void *</em><code>value</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the fill value for a dataset.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fill_value</code> sets the fill value for
+        a dataset in the dataset creation property list.  
+        <p>
+        <code>value</code> is interpreted as being of datatype 
+        <code>type_id</code>.  This datatype may differ from that of 
+        the dataset, but the HDF5 library must be able to convert 
+        <code>value</code> to the dataset datatype when the dataset 
+        is created. 
+	<p>
+	The default fill value is <code>0</code> (zero), which is
+	interpreted according to the actual dataset datatype.
+	<p>
+	Setting <code>value</code> to <code>NULL</code> indicates
+	that the fill value is to be undefined. 
+  <dt><strong>Notes:</strong>
+    <dd> Applications sometimes write data only to portions of 
+	an allocated dataset.  It is often useful in such cases 
+	to fill the unused space with a known 
+	<span class="termEmphasis">fill value</span>.  
+	This function allows the user application to set that fill value;
+	the functions
+	<a href="RM_H5D.html#Dataset-Fill">H5Dfill</a> and
+	<a href="RM_H5P.html#Property-SetFillTime">H5Pset_fill_time</a>,
+	respectively, provide the ability  
+	to apply the fill value on demand or 
+	to set up its automatic application.
+	<p>
+	A fill value should be defined so that it is appropriate for 
+	the application.  While the HDF5 default fill value is 
+	<code>0</code> (zero), it is often appropriate to use another value.
+        It might be useful, for example, to use a value that is 
+	known to be impossible for the application to legitimately generate.
+	<p>
+        <code>H5Pset_fill_value</code> is designed to work in  
+	concert with <code>H5Pset_alloc_time</code> and 
+	<code>H5Pset_fill_time</code>.
+	<code>H5Pset_alloc_time</code> and <code>H5Pset_fill_time</code> 
+	govern the timing of dataset storage allocation and fill value 
+	write operations and can be important in tuning application 
+	performance.
+	<p>
+	See <a href="RM_H5D.html#Dataset-Create">H5Dcreate</a> for 
+	further cross-references.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist_id</code></td>
+            <td valign="top">IN: Dataset creation property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code>,</td>
+            <td valign="top">IN: Datatype of <code>value</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;void&nbsp;*</em><code>value&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Pointer to buffer containing value to use as fill value.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_fill_value_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_fill_value_f(prp_id, type_id, fillvalue, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of fill
+                                        ! value datatype (in memory)
+  TYPE(VOID), INTENT(IN) :: fillvalue   ! Fillvalue
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_fill_value_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_filter" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFilter">H5Pset_filter</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_filter</code>(<em>hid_t</em> <code>plist</code>,
+        <em>H5Z_filter_t</em> <code>filter</code>,
+        <em>unsigned int</em> <code>flags</code>,
+        <em>size_t</em> <code>cd_nelmts</code>,
+        <em>const unsigned int</em> <code>cd_values[]</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Adds a filter to the filter pipeline.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_filter</code> adds the specified 
+        <code>filter</code> and corresponding properties to the 
+        end of an output filter pipeline.
+        If <code>plist</code> is a dataset creation property list, 
+        the filter is added to the permanent filter pipeline; 
+        if <code>plist</code> is a dataset transfer property list, 
+        the filter is added to the transient filter pipeline.
+        <p>
+        The array <code>cd_values</code> contains
+        <code>cd_nelmts</code> integers which are auxiliary data 
+        for the filter.  The integer values will be stored in the 
+        dataset object header as part of the filter information.
+        <p>
+        The <code>flags</code> argument is a  bit vector with 
+        the following fields specifying certain general properties 
+        of the filter:  
+        <center>
+        <table align=center width="75%">
+          <tr valign=top>
+            <td valign=top><code>H5Z_FLAG_OPTIONAL</code>&nbsp;&nbsp;</td>
+            <td valign=top>If this bit is set then the filter is 
+              optional.  If the filter fails (see below) during an
+              <code>H5Dwrite</code> operation then the filter is
+              just excluded from the pipeline for the chunk for which
+              it failed; the filter will not participate in the
+              pipeline during an <code>H5Dread</code> of the chunk.
+              This is commonly used for compression filters: if the
+              filter result would be larger than the input, then
+              the compression filter returns failure and the
+              uncompressed data is stored in the file.  If this bit is
+              clear and a filter fails, then <code>H5Dwrite</code> 
+              or <code>H5Dread</code> also fails.
+	      <p>
+	      This flag should not be set for the Fletcher32 checksum 
+	      filter as it will bypass the checksum filter without 
+	      reporting checksum errors to an application.</td>
+          </tr>
+        </table>
+        </center>
+	<p>
+	The <code>filter</code> parameter specifies the filter to be set.  
+	Valid filter identifiers are as follows:
+
+        <center>
+        <table width=75%>
+        <tr valign=top align=left><td>
+            <code>H5Z_FILTER_DEFLATE</code> 
+            </td><td>
+            Data compression filter, employing the gzip algorithm 
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5Z_FILTER_SHUFFLE</code> 
+            </td><td>
+            Data shuffling filter 
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5Z_FILTER_FLETCHER32&nbsp;&nbsp;</code> 
+            </td><td>
+            Error detection filter, employing the Fletcher32 checksum algorithm 
+        </td></tr>	
+        <tr valign=top align=left><td>
+            <code>H5Z_FILTER_SZIP</code> 
+            </td><td>
+            Data compression filter, employing the SZIP algorithm 
+        </td></tr>
+	</table>
+	</center>
+	<p>
+	Also see <a href="#Property-SetEdcCheck">H5Pset_edc_check</a> and
+	<a href="Property-SetFilterCallback">H5Pset_filter_callback</a>.
+	
+  <dt><strong>Notes:</strong>
+    <dd>This function currently supports only the permanent filter
+        pipeline; <code>plist</code> must be a dataset creation 
+        property list.
+	<p>
+	If multiple filters are set for a property list, they will be 
+	applied to each chunk in the order in which they were set.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5Z_filter_t</em> <code>filter</code></td>
+            <td valign="top">IN: Filter identifier for the filter  
+                             to be added to the pipeline.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned int</em> <code>flags</code></td>
+            <td valign="top">IN:  Bit vector specifying certain general properties
+                of the filter.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>cd_nelmts</code></td>
+            <td valign="top">IN: Number of elements in <code>cd_values</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;unsigned&nbsp;int</em>&nbsp;<code>cd_values[]&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Auxiliary data for the filter.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_filter_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_filter_f(prp_id, filter, flags, cd_nelmts, cd_values,  hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+  INTEGER, INTENT(IN) :: filter         ! Filter to be added to the pipeline
+  INTEGER, INTENT(IN) :: flags          ! Bit vector specifying certain 
+                                        ! general properties of the filter
+  INTEGER(SIZE_T), INTENT(IN) :: cd_nelmts        
+                                        ! Number of elements in cd_values
+  INTEGER, DIMENSION(*), INTENT(IN) :: cd_values  
+                                        ! Auxiliary data for the filter
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_filter_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_filter_callback" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFilterCallback">H5Pset_filter_callback</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_filter_callback</code>(<em>hid_t</em> <code>plist</code>,
+                         <em>H5Z_filter_func_t</em> <code>func</code>,
+                         <em>void *</em><code>op_data</code>)
+  <dt><strong>Purpose:</strong>
+    <dd>Sets user-defined filter callback function.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_filter_callback</code> sets the user-defined 
+        filter callback function <code>func</code> in the 
+	dataset transfer property list <code>plist</code>.
+	<p>
+	The parameter <code>op_data</code> is a pointer to user-defined
+	input data for the callback function and will be passed through 
+	to the callback function.
+	<p>
+	The callback function <code>func</code> defines the actions 
+	an application is to take when a filter fails.  
+	The function prototype is as follows:
+	<dir>
+	<code>typedef</code> <em>H5Z_cb_return_t</em> (<code>H5Z_filter_func_t</code>)
+	                (<em>H5Z_filter_t</em> <code>filter</code>,
+                         <em>void *</em><code>buf</code>,
+                         <em>size_t</em> <code>buf_size</code>,
+                         <em>void *</em><code>op_data</code>)
+	</dir>
+	<p>
+	where <code>filter</code> indicates which filter has failed,
+	<code>buf</code> and <code>buf_size</code> are used to pass in 
+	the failed data,
+	and <code>op_data</code> is the required input data for this 
+	callback function.
+	<p>
+	Valid callback function return values are 
+	<code>H5Z_CB_FAIL</code> and <code>H5Z_CB_CONT</code>.  
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Dataset transfer property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5Z_filter_func_t</em>&nbsp;<code>func&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: User-defined filter callback function.</td></tr>
+        <tr>
+		    <td valign="top"><em>void *</em><code>op_data</code></td>
+            <td valign="top">IN: User-defined input data for the callback function.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_fletcher32" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetFletcher32">H5Pset_fletcher32</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_fletcher32</code>(<em>hid_t</em> <code>plist</code>)
+  <dt><strong>Purpose:</strong>
+    <dd>Sets up use of the Fletcher32 checksum filter.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_fletcher32</code> sets the Fletcher32 checksum filter
+        in the dataset creation property list <code>plist</code>.  
+  <dt><strong>Note:</strong>
+    <dd>The initial error detection implementation supports 
+        error detection for chunked datasets only.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Dataset creation property list identifier.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_fletcher32_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_fletcher32_f(prp_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Dataset creation property list 
+                                        ! identifier 
+  INTEGER, INTENT(OUT)       :: hdferr  ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_fletcher32_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_gc_references" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetGCReferences">H5Pset_gc_references</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_gc_reference</code>(<em>hid_t</em> <code>plist</code>,
+        <em>unsigned</em> <code>gc_ref</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets garbage collecting references flag.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_gc_references</code> sets the flag for 
+        garbage collecting references for the file.  
+        <p>
+        Dataset region references and other reference types use space 
+        in an HDF5 file's global heap.  If garbage collection is on 
+        and the user passes in an uninitialized value in a reference structure, 
+        the heap might get corrupted.  When garbage collection is off, however,
+        and the user re-uses a reference, the previous heap block will be 
+        orphaned and not returned to the free heap space.  
+        <p>
+        When garbage collection is on, the user must initialize the 
+        reference structures to 0 or risk heap corruption.
+        <p>
+        The default value for garbage collecting references is off.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned</em>&nbsp;<code>gc_ref&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Flag setting reference garbage collection to 
+                on (<code>1</code>) or off (<code>0</code>).</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_gc_references_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_gc_references_f (prp_id, gc_reference, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+  INTEGER, INTENT(IN) :: gc_reference  ! Flag for garbage collecting
+                                       ! references for the file
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_gc_references_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_hyper_cache" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetHyperCache">H5Pset_hyper_cache</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_hyper_cache</code>(<em>hid_t</em> <code>plist</code>,
+        <em>unsigned</em> <code>cache</code>,
+        <em>unsigned</em> <code>limit</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Indicates whether to cache hyperslab blocks during I/O.
+  <dt><strong>Description:</strong>
+    <dd>[<strong>NOTE:</strong>
+        <span class="1_4_compat">
+	This function is deprecated in HDF5 Release 1.6 
+	and will eventually be removed from the HDF5 distribution.
+        It is provided in this release only to enable backward compatibility
+        with HDF5 Releases 1.4.<i>x</i> 
+	and is enabled only if the HDF5 library is configured 
+	with the flag <code>H5_WANT_H5_V1_4_COMPAT</code>;
+        the function is not enabled in the binaries distributed by NCSA.
+        </span>]
+        <p>
+        Given a dataset transfer property list, <code>H5Pset_hyper_cache</code> 
+        indicates whether to cache hyperslab blocks during I/O, 
+        a process which can significantly increase I/O speeds.  
+        <p>
+        When working with hyperslab selections, it is possible to 
+        significantly speed up I/O operations by retrieving an 
+        entire hyperslab from the file in one operation and 
+        caching it in memory.  
+        The <code>cache</code> parameter specifies whether to turn 
+        caching on for hyperslab I/O operations.
+        If <code>cache</code> is set to <code>1</code>, 
+        caching is turned on; 
+        if set to <code>0</code>, caching is turned off.
+        <p>
+        The parameter <code>limit</code> sets the maximum size of the 
+        hyperslab block to cache.  If a block is smaller than that limit, 
+        it may still not be cached if no memory is available. 
+        Setting <code>limit</code> to <code>0</code> (zero) indicates 
+        no limitation on the size of block to attempt to cache.
+        <p>
+        The default is to cache blocks with no limit on block size 
+        for serial I/O and to not cache blocks for parallel I/O.
+  <dt><strong>Parameters:</strong>
+    <dl>
+        <dt><em>hid_t</em> <code>plist</code>
+            <dd>IN: Dataset transfer property list identifier.
+        <dt><em>unsigned</em> <code>cache</code>
+            <dd>IN: A flag indicating whether caching is to be 
+                set to on (<code>1</code>) or off (<code>0</code>).
+        <dt><em>unsigned</em> <code>limit</code>
+            <dd>IN: Maximum size of the hyperslab block to cache. 
+                <code>0</code> (zero) indicates no limit.
+    </dl>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_hyper_cache_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_hyper_cache_f(prp_id, cache, limit, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+  INTEGER, INTENT(IN) :: cache         !
+  INTEGER, INTENT(IN) :: limit         ! Maximum size of the hyperslab 
+                                       ! block to cache 
+                                       ! 0 (zero) indicates no limit
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_hyper_cache_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_hyper_vector_size" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetHyperVectorSize">H5Pset_hyper_vector_size</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_hyper_vector_size</code>(<em>hid_t</em> <code>dxpl_id</code>,
+        <em>size_t</em> <code>vector_size</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets number of I/O vectors to be read/written in hyperslab I/O.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_hyper_vector_size</code> sets the number of  
+	I/O vectors to be accumulated in memory before being issued  
+	to the lower levels of the HDF5 library for reading or writing the 
+	actual data.
+        <p>
+        The <em>I/O vectors</em> are hyperslab offset and length pairs 
+	and are generated during hyperslab I/O.
+        <p>
+	The number of I/O vectors is passed in <code>vector_size</code>
+	to be  set in the dataset transfer property list <code>dxpl_id</code>.
+	<code>vector_size</code> must be greater than <code>1</code> (one).
+        <p>
+	<code>H5Pset_hyper_vector_size</code> is an I/O optimization function;
+	increasing <code>vector_size</code> should provide better performance, 
+	but the library will use more memory during hyperslab I/O.  
+	The default value of <code>vector_size</code> is <code>1024</code>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dxpl_id</code></td>
+            <td valign="top">IN: Dataset transfer property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em>&nbsp;<code>vector_size&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Number of I/O vectors to accumulate in memory for I/O operations. 
+                Must be greater than <code>1</code> (one). Default value: <code>1024</code>.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_hyper_vector_size_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_hyper_vector_size_f(plist_id, size, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset transfer property list 
+                                         ! identifier
+  INTEGER(SIZE_T), INTENT(IN) :: size    ! Vector size 
+  INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_hyper_vector_size_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_istore_k" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetIstoreK">H5Pset_istore_k</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pset_istore_k</code>(<em>hid_t</em> <code>plist</code>,
+            <em>unsigned</em> <code>ik</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the size of the parameter used to control the
+        B-trees for indexing chunked datasets.  
+  <dt><strong>Description:</strong>
+        <dd><code>H5Pset_istore_k</code> sets the size of the parameter 
+            used to control the B-trees for indexing chunked datasets.  
+            This function is only valid for file creation property lists.
+            <p>
+            <code>ik</code> is one half the rank of a tree that stores 
+            chunked raw data.  On average, such a tree will be 75% full, 
+            or have an average rank of 1.5 times the value of 
+            <code>ik</code>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of property list to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned</em> <code>ik</code></td>
+            <td valign="top">IN: 1/2 rank of chunked storage B-tree.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_istore_k_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_istore_k_f (prp_id, ik, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+  INTEGER, INTENT(IN) :: ik            ! 1/2 rank of chunked storage B-tree
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_istore_k_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.4</td>
+          <td valign="top">
+		    <code>ik</code> parameter type changed to 
+			<em>unsigned</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_layout" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetLayout">H5Pset_layout</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pset_layout</code>(<em>hid_t</em> <code>plist</code>,
+            <em>H5D_layout_t</em> <code>layout</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the type of storage used to store the raw data for a dataset.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_layout</code> sets the type of storage used to store the 
+        raw data for a dataset.  
+        This function is only valid for dataset creation property lists.
+        <p>
+	Valid values for <code>layout</code> are:
+            <ul><dl>
+                <dt>H5D_COMPACT  
+                    <dd>Store raw data in the dataset object header in file.
+                        This should only be used for very small amounts of raw
+                        data.  
+			The current limit is approximately 64K (HDF5 Release 1.6).
+                <dt>H5D_CONTIGUOUS
+                    <dd>Store raw data separately from the object header in one
+                        large chunk in the file.
+                <dt>H5D_CHUNKED
+                    <dd>Store raw data separately from the object header as 
+                        chunks of data in separate locations in the file.
+            </dl></ul>
+        <p>
+        Note that a compact storage layout may affect writing data to
+        the dataset with parallel applications.  See note in
+	<a href="RM_H5D.html#Dataset-Write">H5Dwrite</a>
+        documentation for details.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier of property list to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5D_layout_t</em>&nbsp;<code>layout&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Type of storage layout for raw data.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_layout_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_layout_f (prp_id, layout, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+  INTEGER, INTENT(IN) :: layout        ! Type of storage layout for raw data
+                                       ! Possible values are:
+                                       !    H5D_COMPACT_F
+                                       !    H5D_CONTIGUOUS_F
+                                       !    H5D_CHUNKED_F
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_layout_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_meta_block_size" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetMetaBlockSize">H5Pset_meta_block_size</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_meta_block_size</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>hsize_t</em> <code>size</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the minimum metadata block size.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_meta_block_size</code> sets the 
+        minimum size, in bytes, of metadata block allocations when 
+        <code>H5FD_FEAT_AGGREGATE_METADATA</code> is set by a VFL driver.
+        <p>
+        Each <i>raw</i> metadata block is initially allocated to be of the 
+        given size.  Specific metadata objects (e.g., object headers, 
+        local heaps, B-trees) are then sub-allocated from this block.
+        <p>
+        The default setting is 2048 bytes, meaning that the library 
+        will attempt to aggregate metadata in at least 2K blocks in the file.
+        Setting the value to <code>0</code> (zero) with this function 
+        will turn off metadata aggregation, even if the VFL driver attempts 
+        to use the metadata aggregation strategy.               
+        <p>
+        Metadata aggregation reduces the number of small data objects 
+        in the file that would otherwise be required for metadata.  
+        The aggregated block of metadata is usually written in a 
+        single write action and always in a contiguous block, 
+        potentially significantly improving library and application 
+        performance.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>fapl_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t</em> <code>size</code></td>
+            <td valign="top">IN: Minimum size, in bytes, of metadata block allocations.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_meta_block_size_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_meta_block_size_f(plist_id, size, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list 
+                                         ! identifier
+  INTEGER(HSIZE_T), INTENT(IN) :: size   ! Metadata block size
+  INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_meta_block_size_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_multi_type" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetMultiType">H5Pset_multi_type</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_multi_type</code> (
+                        <em>hid_t</em> <code>fapl_id</code>,
+                        <em>H5FD_mem_t</em> <code>type</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets type of data property for <code>MULTI</code> driver.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_multi_type</code> sets the type of data property in the 
+        file access or data transfer property list <code>fapl_id</code>.
+	This enables a user application to specify the type of data the
+        application wishes to access so that the application 
+	can retrieve a file handle for low-level access to the particular member 
+	of a set of <code>MULTI</code> files in which that type of data is stored.  
+	The file handle is retrieved with a separate call 
+	to <a href="RM_H5F.html#File-GetVfdHandle"><code>H5Fget_vfd_handle</code></a>
+	(or, in special circumstances, to <code>H5FDget_vfd_handle</code>; 
+	see <cite>Virtual File Layer</cite> and <cite>List of VFL Functions</cite>
+	in <a href="TechNotes.html"><cite>HDF5 Technical Notes</cite></a>).
+	<p>
+	The type of data specified in <code>type</code> may be one of the following:
+        <table border=0>
+        <tr valign=top align=left><td>&nbsp;</td><td>
+            <code>H5FD_MEM_SUPER</code>
+            </td><td>
+            Super block data
+        </td></tr>
+        <tr valign=top align=left><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+            <code>H5FD_MEM_BTREE</code>&nbsp;&nbsp;&nbsp;&nbsp;
+            </td><td>
+            B-tree data
+        </td></tr>
+        <tr valign=top align=left><td>&nbsp;</td><td>
+            <code>H5FD_MEM_DRAW</code>
+            </td><td>
+            Dataset raw data 
+        </td></tr>
+        <tr valign=top align=left><td>&nbsp;</td><td>
+            <code>H5FD_MEM_GHEAP</code>
+            </td><td>
+            Global heap data
+        </td></tr>
+        <tr valign=top align=left><td>&nbsp;</td><td>
+            <code>H5FD_MEM_LHEAP</code>
+            </td><td>
+            Local heap data
+        </td></tr>
+        <tr valign=top align=left><td>&nbsp;</td><td>
+            <code>H5FD_MEM_OHDR</code>
+            </td><td>
+            Object header data
+        </td></tr>
+	</table>
+	<p>
+	Use of this function is appropriate only for an HDF5 file written 
+	as a set of files with the <code>MULTI</code> file driver.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>fapl_id</code></td>
+            <td valign="top">IN: File access property list or data transfer property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5FD_mem_t</em>&nbsp;<code>type&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Type of data.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_preserve" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetPreserve">H5Pset_preserve</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_preserve</code>(<em>hid_t</em> <code>plist</code>,
+        <em>hbool_t</em> <code>status</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the dataset transfer property list status to TRUE or FALSE.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_preserve</code> sets the 
+        dataset transfer property list status to TRUE or FALSE.
+        <p>
+        When reading or writing compound data types and the
+        destination is partially initialized and the read/write is
+        intended to initialize the other members, one must set this
+        property to TRUE.  Otherwise the I/O pipeline treats the
+        destination datapoints as completely uninitialized.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier for the dataset transfer property list.</td></tr>
+        <tr>
+		    <td valign="top"><em>hbool_t</em>&nbsp;<code>status&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Status of for the dataset transfer property list 
+                (TRUE/FALSE).</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_preserve_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_preserve_f(prp_id, flag, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id   ! Dataset transfer property 
+                                         ! list identifier 
+  LOGICAL, INTENT(IN)        :: flag     ! Status for the dataset 
+                                         ! transfer property list 
+  INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_preserve_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    The <code>flag</code> parameter 
+			has changed from <em>INTEGER</em> to 
+			<em>LOGICAL</em> to better match the C API.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_shuffle" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetShuffle">H5Pset_shuffle</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_shuffle</code>(<em>hid_t</em> <code>plist_id</code>)
+  <dt><strong>Purpose:</strong>
+    <dd>Sets up use of the shuffle filter.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_shuffle</code> sets the shuffle filter,
+        <code>H5Z_FILTER_SHUFFLE</code>,
+        in the dataset creation property list <code>plist_id</code>.  
+	<p>
+	The shuffle filter <span class=termEmphasis>de-interlaces</span> 
+        a block of data by reordering the bytes.  
+	All the bytes from one consistent byte position of 
+        each data element are placed together in one block;
+	all bytes from a second consistent byte position of 
+        each data element are placed together a second block; etc.
+	For example, given three data elements of a 4-byte datatype 
+	stored as <code>012301230123</code>, 
+        shuffling will re-order data as <code>000111222333</code>.
+        This can be a valuable step in an effective compression
+	algorithm because the bytes in each byte position are often 
+	closely related to each other and putting them together 
+        can increase the compression ratio.
+	<p>
+        As implied above, the primary value of the shuffle filter 
+        lies in its coordinated use with a compression filter; 
+        it does not provide data compression when used alone. 
+        When the shuffle filter is applied to a dataset 
+        immediately prior to the use of a compression filter, 
+        the compression ratio achieved is often superior to that
+        achieved by the use of a compression filter without 
+        the shuffle filter.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Dataset creation property list identifier.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_shuffle_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_shuffle_f(prp_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id      ! Property list identifier 
+  INTEGER, INTENT(OUT)       :: hdferr      ! Error code
+                                            ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_shuffle_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_sieve_buf_size" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetSieveBufSize">H5Pset_sieve_buf_size</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_sieve_buf_size</code>(
+                     <em>hid_t</em> <code>fapl_id</code>,
+                     <em>hsize_t</em> <code>size</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the maximum size of the data sieve buffer.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_sieve_buf_size</code> sets <code>size</code>, 
+        the maximum size in bytes of the data sieve buffer, which is 
+        used by file drivers that are capable of using data sieving.
+        <p>
+        The data sieve buffer is used when performing I/O on datasets 
+        in the file.  Using a buffer which is large enough to hold 
+        several pieces of the dataset being read in for 
+        hyperslab selections boosts performance by quite a bit. 
+        <p>
+        The default value is set to 64KB, indicating that file I/O for 
+        raw data reads and writes will occur in at least 64KB blocks.  
+        Setting the value to 0 with this API function will turn off the 
+        data sieving, even if the VFL driver attempts to use that strategy. 
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>fapl_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t</em> <code>size</code></td>
+            <td valign="top">IN: Maximum size, in bytes, of data sieve buffer.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_sieve_buf_size_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_sieve_buf_size_f(plist_id, size, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list 
+                                         ! identifier
+  INTEGER(SIZE_T), INTENT(IN) :: size    ! Sieve buffer size 
+  INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_sieve_buf_size_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    The <code>size</code> parameter has 
+			changed from type <em>hsize_t</em> to 
+			<em>size_t</em>.</td></tr>
+		<tr>
+		  <td valign="top">1.4.0</td>
+		  <td valign="top">Function introduced in this release.</td>
+		</tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_sizes" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetSizes">H5Pset_sizes</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pset_sizes</code>(<em>hid_t</em> <code>plist</code>,
+            <em>size_t</em> <code>sizeof_addr</code>,
+            <em>size_t</em> <code>sizeof_size</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the byte size of the offsets and lengths used to address objects 
+        in an HDF5 file.  
+  <dt><strong>Description:</strong>
+        <dd><code>H5Pset_sizes</code> sets the byte size of the offsets 
+            and lengths used to address objects in an HDF5 file.  
+            This function is only valid for file creation property lists.  
+            Passing in a value of 0 for one of the <code>sizeof_...</code> 
+            parameters retains the current value.  
+            The default value for both values is the same as 
+            <code>sizeof(hsize_t)</code> in the library (normally 8 bytes).  
+            Valid values currently are 2, 4, 8 and 16.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier of property list to modify.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em>&nbsp;<code>sizeof_addr&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Size of an object offset in bytes.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>sizeof_size</code></td>
+            <td valign="top">IN: Size of an object length in bytes.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_sizes_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_sizes_f (prp_id, sizeof_addr, sizeof_size, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id       ! Property list identifier
+  INTEGER(SIZE_T), INTENT(IN) :: sizeof_addr ! Size of an object offset 
+                                             ! in bytes
+  INTEGER(SIZE_T), INTENT(IN) :: sizeof_size ! Size of an object length 
+                                             ! in bytes
+  INTEGER, INTENT(OUT) :: hdferr             ! Error code
+                                             ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_sizes_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_small_data_block_size" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetSmallData">H5Pset_small_data_block_size</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_small_data_block_size</code>(<em>hid_t</em> <code>fapl_id</code>,
+        <em>hsize_t</em> <code>size</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the size of a contiguous block reserved for small data.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_small_data_block_size</code> reserves blocks of 
+        <code>size</code> bytes for the contiguous storage of the raw data 
+        portion of <em>small</em> datasets.
+        The HDF5 library then writes the raw data from small datasets
+        to this reserved space, thus reducing unnecessary discontinuities
+        within blocks of meta data and improving IO performance.
+        <p>
+        A small data block is actually allocated the first time a 
+        qualifying small dataset is written to the file.  
+        Space for the raw data portion of this small dataset is suballocated
+        within the small data block.  
+        The raw data from each subsequent small dataset is also written to
+        the small data block until it is filled; additional small data blocks
+        are allocated as required.
+        <p>
+        The HDF5 library employs an algorithm that determines whether 
+        IO performance is likely to benefit from the use of this mechanism
+        with each dataset as storage space is allocated in the file.
+        A larger <code>size</code> will result in this mechanism being 
+        employed with larger datasets.  
+        <p>
+        The small data block size is set as an allocation property in the 
+        file access property list identified by <code>fapl_id</code>.
+        <p>
+        Setting <code>size</code> to zero (<code>0</code>) disables the
+        small data block mechanism.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>fapl_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: File access property list identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t</em> <code>size</code></td>
+            <td valign="top">IN: Maximum size, in bytes, of the small data block.
+                <br>
+                The default size is <code>2048</code>.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_small_data_block_size_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_small_data_block_size_f(plist_id, size, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: plist_id ! File access
+                                         ! property list identifier
+  INTEGER(HSIZE_T), INTENT(IN) :: size   ! Small raw data block size
+  INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_small_data_block_size_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.4</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_sym_k" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetSymK">H5Pset_sym_k</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pset_sym_k</code>(<em>hid_t</em> <code>plist</code>,
+            <em>unsigned</em> <code>ik</code>,
+            <em>unsigned</em> <code>lk</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the size of parameters used to control the symbol table nodes.
+  <dt><strong>Description:</strong>
+        <dd><code>H5Pset_sym_k</code> sets the size of parameters used to 
+            control the symbol table nodes.  This function is only valid 
+            for file creation property lists.  Passing in a value of 0 for 
+            one of the parameters retains the current value. 
+            <p>
+            <code>ik</code> is one half the rank of a tree that stores a symbol
+            table for a group.  Internal nodes of the symbol table are on
+            average 75% full.  That is, the average rank of the tree is
+            1.5 times the value of <code>ik</code>.
+            <p>
+            <code>lk</code> is one half of the number of symbols that can 
+            be stored in a symbol table node.  A symbol table node is the 
+            leaf of a symbol table tree which is used to store a group.  
+            When symbols are inserted randomly into a group, the group's
+            symbol table nodes are 75% full on average.  That is, they
+            contain 1.5 times the number of symbols specified by 
+            <code>lk</code>.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>plist&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier for property list to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned</em> <code>ik</code></td>
+            <td valign="top">IN: Symbol table tree rank.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned</em> <code>lk</code></td>
+            <td valign="top">IN: Symbol table node size.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_sym_k_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_sym_k_f (prp_id, ik, lk, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+  INTEGER, INTENT(IN) :: ik            ! Symbol table tree rank
+  INTEGER, INTENT(IN) :: lk            ! Symbol table node size
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_sym_k_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.4</td>
+          <td valign="top">
+		    <code>ik</code> parameter type changed to 
+			<em>unsigned</em>.</td></tr>
+		<tr>
+		  <td valign="top">1.6.0</td>
+		  <td valign="top">
+		    The <code>ik</code> parameter has 
+			changed from type <em>int</em> to 
+			<em>unsigned</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_szip" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetSzip">H5Pset_szip</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_szip</code>(<em>hid_t</em> <code>plist</code>,
+                <em>unsigned int</em> <code>options_mask</code>,
+                <em>unsigned int</em> <code>pixels_per_block</code>)
+  <dt><strong>Purpose:</strong>
+    <dd>Sets up use of the SZIP compression filter.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_szip</code> sets an SZIP compression filter, 
+        <code>H5Z_FILTER_SZIP</code>, for a dataset. 
+        SZIP is a compression method designed for use with scientific data.
+	<p>
+        Before proceeding, be aware that there are factors that affect
+        your rights and ability to use SZIP compression.
+        See the documents at
+	<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/SZIP/index.html" 
+        target="External">SZIP Compression in HDF5</a>
+	for <em>important information regarding terms of use and 
+	the SZIP copyright notice</em>,
+	for further discussion of SZIP compression in HDF5, 
+	and for a list of SZIP-related references.
+
+	<p>
+        In the text below, the term <em>pixel</em> refers to
+        an HDF5 data element. 
+        This terminology derives from SZIP compression's use with image data, 
+        where pixel referred to an image pixel.
+	<p>
+	The SZIP <code>bits_per_pixel</code> value (see <b>Notes</b>, below) 
+	is automatically set, based on the HDF5 datatype.
+	SZIP can be used with atomic datatypes that may have size 
+        of 8, 16, 32, or 64 bits.
+        Specifically, a dataset with a datatype that is 
+            8-, 16-, 32-, or 64-bit 
+	    signed or unsigned integer; 
+            char; or
+            32- or 64-bit float
+        can be compressed with SZIP.  
+	See <b>Notes</b>, below, for further discussion of the
+	the SZIP <code>bits_per_pixel</code> setting.
+	
+	<p>
+        SZIP compression cannot be applied to 
+            compound datatypes, 
+            array datatypes, 
+            variable-length datatypes, 
+	    enumerations, or 
+            any other user-defined datatypes.
+        If an SZIP filter is set up for a dataset containing a non-allowed 
+        datatype, <code>H5Pset_szip</code> will succeed but the subsequent call
+        to <a href="RM_H5D.html#Dataset-Create"><code>H5Dcreate</code></a>
+        will fail; 
+        the conflict is detected only when the property list is used.
+        
+
+	<p>
+	SZIP options are passed in an options mask, <code>options_mask</code>,
+	as follows.
+        <center>
+        <table>
+        <tr valign=top align=left><td>
+            <hr>
+            <b>Option</b>
+            </td><td>
+            <hr>
+            <b>Description</b>
+            <br>
+            <font size=-1>(Mutually exclusive; select one.)</font>
+        </td></tr>
+        <tr valign=top align=left><td>
+            <hr>
+	    <code>H5_SZIP_EC_OPTION_MASK&nbsp;&nbsp;</code> 
+            </td><td>
+            <hr>
+            Selects entropy coding method. 
+        </td></tr>
+        <tr valign=top align=left><td>
+            <code>H5_SZIP_NN_OPTION_MASK</code> 
+            </td><td>
+            Selects nearest neighbor coding method. 
+        </td></tr>
+        <tr valign=top align=left><td>
+            <hr>
+            </td><td>
+            <hr>
+        </td></tr>
+	</table>
+	</center>
+	The following guidelines can be used in determining 
+        which option to select:
+	<ul>
+	  <li>The entropy coding method, the EC option specified by
+	      <code>H5_SZIP_EC_OPTION_MASK</code>, is best suited for 
+              data that has been processed.
+	      The EC method works best for small numbers.
+	  <li>The nearest neighbor coding method, the NN option 
+              specified by <code>H5_SZIP_NN_OPTION_MASK</code>,
+              preprocesses the data then applies the EC method as above.
+	</ul>
+        Other factors may affect results, but the above criteria 
+        provide a good starting point for optimizing data compression.
+
+	<p>
+        SZIP compresses data block by block, with a user-tunable block size.  
+	This block size is passed in the parameter 
+        <code>pixels_per_block</code> and must be even and not greater than 32, 
+        with typical values being <code>8</code>, <code>10</code>, 
+        <code>16</code>, or <code>32</code>.
+        This parameter affects compression ratio;
+	the more pixel values vary, the smaller this number should be to
+        achieve better performance.
+	<p>
+        In HDF5, compression can be applied only to chunked datasets.
+        If <code>pixels_per_block</code> is bigger than the total 
+        number of elements in a dataset chunk, 
+        <code>H5Pset_szip</code> will succeed but the subsequent call to 
+        <a href="RM_H5D.html#Dataset-Create"><code>H5Dcreate</code></a>
+        will fail; the conflict is detected only when the property list 
+        is used.
+	<p>
+        To achieve optimal performance for SZIP compression, 
+        it is recommended that a chunk's fastest-changing dimension 
+        be equal to <em>N</em> times <code>pixels_per_block</code>
+        where <em>N</em> is the maximum number of blocks per scan line
+        allowed by the SZIP library.
+        In the current version of SZIP, <em>N</em> is set to 128.
+        <p>
+		<code>H5Pset_szip</code> will fail if SZIP encoding is 
+		disabled in the available copy of the SZIP library.
+		<a href="RM_H5Z.html#Compression-GetFilterInfo">
+		<code>H5Zget_filter_info</code></a> can be employed 
+		to avoid such a failure.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Dataset creation property list 
+                identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned int</em> <code>options_mask</code></td>
+            <td valign="top">IN: A bit-mask conveying the desired SZIP options.
+                Valid values are <code>H5_SZIP_EC_OPTION_MASK</code>
+                and <code>H5_SZIP_NN_OPTION_MASK</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned&nbsp;int</em>&nbsp;<code>pixels_per_block&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: The number of pixels or data elements in each data block.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Notes:</strong>
+    <dd>The following notes are of interest primarily to those who have 
+        used SZIP compression outside of the HDF5 context.
+	<p>
+	In non-HDF5 applications, SZIP typically requires that the 
+        user application supply additional parameters:
+        <ul>
+          <li><code>pixels_in_object</code>, 
+              the number of pixels in the object to be compressed 
+          <li><code>bits_per_pixel</code>, 
+              the number of bits per pixel
+          <li><code>pixels_per_scanline</code>, 
+              the number of pixels per scan line  
+        </ul>
+        <p>
+        These values need not be independently supplied in the HDF5 
+        environment as they are derived from the datatype and dataspace, 
+        which are already known.
+        In particular, HDF5 sets 
+        <code>pixels_in_object</code> to the number of elements in a chunk 
+        and <code>bits_per_pixel</code> to the size of the element or 
+        pixel datatype.  
+        The following algorithm is used to set 
+        <code>pixels_per_scanline</code>:
+        <ul>
+          <li>If the size of a chunk's fastest-changing dimension, 
+              <em>size</em>, is greater than 4K, 
+              set <code>pixels_per_scanline</code> to 
+              128 times <code>pixels_per_block</code>.
+          <li>If <em>size</em> is less than 4K 
+              but greater than <code>pixels_per_block</code>, 
+              set <code>pixels_per_scanline</code> to the minimum of
+              <em>size</em> and 128 times <code>pixels_per_block</code>.
+          <li>If <em>size</em> is less than <code>pixels_per_block</code> 
+              but greater than the number elements in the chunk, 
+              set <code>pixels_per_scanline</code> to the minimum of 
+              the number elements in the chunk and 
+              128 times <code>pixels_per_block</code>.
+        </ul>
+
+<!-- NEW PAGE -->	
+	<p>
+	The HDF5 datatype may have precision that is less than the 
+	full size of the data element, e.g., an 11-bit integer can be
+	defined using 
+	<a href="RM_H5T.html#Datatype-SetPrecision"><code>H5Tset_precision</code></a>.
+	To a certain extent, SZIP can take advantage of the 
+	precision of the datatype to improve compression:
+	<ul><li>
+	If the HDF5 datatype size is 24-bit or less and
+	the offset of the bits in the HDF5 datatype is zero
+	(see <a href="RM_H5T.html#Datatype-SetOffset"><code>H5Tset_offset</code></a>  
+	or <a href="RM_H5T.html#Datatype-GetOffset"><code>H5Tget_offset</code></a>), 
+	the data is the in lowest N bits of the data element. 
+	In this case, the SZIP <code>bits_per_pixel</code> 
+	is set to the precision 
+	of the HDF5 datatype.
+	<li>
+	If the offset is not zero, the SZIP <code>bits_per_pixel</code> 
+	will be set to the number of bits in the full size of the data 
+	element.
+	<li>
+	If the HDF5 datatype precision is 25-bit to 32-bit, 
+	the SZIP <code>bits_per_pixel</code> will be set to 32.
+	<li>
+	If the HDF5 datatype precision is 33-bit to 64-bit, 
+	the SZIP <code>bits_per_pixel</code> will be set to 64.
+	</ul>
+
+	<p>
+	HDF5 always modifies the options mask provided by the user
+        to set up usage of <code>RAW_OPTION_MASK</code>, 
+        <code>ALLOW_K13_OPTION_MASK</code>, and one of
+        <code>LSB_OPTION_MASK</code> or <code>MSB_OPTION_MASK</code>, 
+        depending on endianness of the datatype.
+ 
+  <dt><strong>Fortran90 Interface:</strong> h5pset_szip_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_szip_f(prp_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id     
+                                   ! Dataset creation property list identifier 
+  INTEGER, INTENT(IN) :: options_mask      
+                                   ! A bit-mask conveying the desired
+                                   ! SZIP options
+                                   ! Current valid values in Fortran are:
+                                   !    H5_SZIP_EC_OM_F
+                                   !    H5_SZIP_NN_OM_F
+  INTEGER, INTENT(IN) :: pixels_per_block  
+                                   ! The number of pixels or data elements 
+                                   ! in each data block
+  INTEGER, INTENT(OUT)  :: hdferr  ! Error code
+                                   ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_szip_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+		
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+
+<!--
+    <p>
+  <dt><strong>References:</strong>
+    (This material will appear in a separate file in the final release documents.)
+    <ul>
+    <li>J. Venbrux, P.S. Yeh, G. Zweigle, J. Vesel, 
+        "A VLSI Chip Solution for Lossless Medical Imagery Compression,"
+        <cite>SPIE conference on Medical Imaging 1994</cite>. 
+        Vol. 2164, pp. 561-572, February 13-14, 1994, 
+        Newport Beach, California.
+
+    <li>J. Venbrux, J. Gambles, D. Wiseman, G. Zweigle, W.H. Miller, P.S. Yeh, 
+        "A VLSI Chip Set Development for Lossless Data Compression,"
+        <cite>AIAA Computing in Aerospace 9 Conference</cite>. 
+        October 1993, San Diego, California.
+
+    <li>J. Venbrux, G. Zweigle, J. Gambles, D.Wiseman, W. Miller, P. Yeh,
+        "An Adaptive, Lossless Data Compression Algorithm and VLSI 
+        Implementations,"
+        <cite>NASA Symposium on VLSI Design</cite>. 
+        Pp 1.2.1-1.2.16, November 1993.
+
+    <li>J. Venbrux, P.S. Yeh, and M. N. Liu,
+        "A VLSI Chip Set for High Speed Lossless Data Compression,"
+        <cite>IEEE Transactions on Circuits and Systems for Video 
+        Technology</cite>.
+        Pp. 381-391, December 1992.
+
+    <li>CCSDS 120.0-G-1. 
+        <cite>Lossless Data Compression</cite>. 
+        Green Book. Issue 1, May 1997.
+        This Report presents a summary of the key operational concepts and 
+        rationale underlying the requirements for the CCSDS Recommendation, 
+        Lossless Data Compression. Supporting performance information along 
+        with illustrations are also included. This Report also provides a 
+        broad tutorial overview of the CCSDS Lossless Data Compression 
+        algorithm and is aimed at helping first-time readers
+        to understand the Recommendation.
+        <br>
+        Appears In: CCSDS Publications TGannett 02/04/2003 387K Services 
+        Check Out View
+
+    <li>CCSDS 121.0-B-1. 
+        <cite>Lossless Data Compression</cite>. 
+        Blue Book. Issue 1, May 1997.
+        This Recommendation defines a source-coding data-compression 
+        algorithm and specifies how data compressed using the algorithm 
+        are inserted into source packets for retrieval and decoding.  
+        <br>
+        Appears In: CCSDS Publications
+
+    </ul>
+-->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_userblock" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetUserblock">H5Pset_userblock</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Pset_userblock</code>(<em>hid_t</em> <code>plist</code>,
+            <em>hsize_t</em> <code>size</code>
+        )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets user block size.
+  <dt><strong>Description:</strong>
+        <dd><code>H5Pset_userblock</code> sets the user block size of a 
+            file creation property list.  
+            The default user block size is 0; it may be set to any 
+            power of 2 equal to 512 or greater (512, 1024, 2048, etc.).
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier of property list to modify.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t</em>&nbsp;<code>size&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Size of the user-block in bytes.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5pset_userblock_f
+    <dd>
+	<pre>
+SUBROUTINE h5pset_userblock_f (prp_id, size, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+  INTEGER(HSIZE_T), INTENT(IN) :: size  ! Size of the user-block in bytes
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5pset_userblock_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Pset_vlen_mem_manager" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetVLMemManager">H5Pset_vlen_mem_manager</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_vlen_mem_manager</code>(<em>hid_t</em> <code>plist</code>,
+        <em>H5MM_allocate_t</em> <code>alloc</code>,
+        <em>void</em> *<code>alloc_info</code>,
+        <em>H5MM_free_t</em> <code>free</code>,
+        <em>void</em> *<code>free_info</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets the memory manager for variable-length datatype allocation in 
+        <code>H5Dread</code> and <code>H5Dvlen_reclaim</code>.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_vlen_mem_manager</code> sets the memory manager for 
+        variable-length datatype allocation in <code>H5Dread</code> 
+        and free in <code>H5Dvlen_reclaim</code>.
+        <p>
+        The <code>alloc</code> and <code>free</code> parameters 
+        identify the memory management routines to be used.
+        If the user has defined custom memory management routines,
+        <code>alloc</code> and/or <code>free</code> should be set to make 
+        those routine calls (i.e., the name of the routine is used as 
+        the value of the parameter);  
+        if the user prefers to use the system's <code> malloc</code>
+        and/or <code>free</code>, the <code>alloc</code> and 
+        <code>free</code> parameters, respectively, should be set to 
+        <code> NULL</code>
+        <p>
+        The prototypes for these user-defined functions would appear as follows:
+            <br>&nbsp;&nbsp;&nbsp;&nbsp;
+            <em>typedef void</em> *(*<code>H5MM_allocate_t</code>)(<em>size_t</em> <code>size</code>, 
+                <em>void</em> *<code>alloc_info</code>) ;
+           
+            <br>&nbsp;&nbsp;&nbsp;&nbsp;
+            <em>typedef void</em> (*<code>H5MM_free_t</code>)(<em>void</em> *<code>mem</code>, 
+                <em>void</em> *<code>free_info</code>) ;
+        <br>
+        The <code>alloc_info</code> and <code>free_info</code> parameters 
+        can be used to pass along any required information to 
+        the user's memory management routines.
+        <p>
+        In summary, if the user has defined custom memory management 
+        routines, the name(s) of the routines are passed in the 
+        <code>alloc</code> and <code>free</code> parameters and the 
+        custom routines' parameters are passed in the 
+        <code>alloc_info</code> and <code>free_info</code> parameters.
+        If the user wishes to use the system <code> malloc</code> and 
+        <code>free</code> functions, the <code>alloc</code> and/or 
+        <code>free</code> parameters are set to <code> NULL</code> 
+        and the  <code>alloc_info</code> and <code>free_info</code> 
+        parameters are ignored.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist</code></td>
+            <td valign="top">IN: Identifier for the dataset transfer property list.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5MM_allocate_t</em>&nbsp;<code>alloc&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: User's allocate routine, or &nbsp; <code> NULL</code> 
+                for system &nbsp; <code> malloc</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>void</em> *<code>alloc_info</code></td>
+            <td valign="top">IN: Extra parameter for user's allocation routine.  
+                <br>
+                Contents are ignored if preceding parameter is &nbsp; 
+                <code> NULL</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5MM_free_t</em> <code>free</code></td>
+            <td valign="top">IN: User's free routine, or &nbsp; <code> NULL</code> 
+                for system <code>free</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>void</em> *<code>free_info</code></td>
+            <td valign="top">IN: Extra parameter for user's free routine.  
+                <br>
+                Contents are ignored if preceding parameter is &nbsp; 
+                <code> NULL</code>.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Punregister" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-Unregister">H5Punregister</a>
+
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Punregister</code>(
+                  <em>H5P_class_t</em> <code>class</code>,
+                  <em>const char *</em><code>name</code>
+        )
+	
+  <dt><strong>Purpose:</strong>
+    <dd>Removes a property from a property list class.
+
+  <dt><strong>Description:</strong>
+    <dd><code>H5Punregister</code> removes a property from a 
+    property list class. 
+    
+    <p>
+    Future property lists created of that class will not contain 
+    this property;  
+    existing property lists containing this property are not affected.
+
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+    <tr>
+        <td><em>H5P_class_t</em>&nbsp;<code>class&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+        <td>IN: Property list class from which to remove 
+	        permanent property</td></tr>
+    <tr>
+        <td><em>const char *</em><code>name</code></td>
+        <td>IN: Name of property to remove</td></tr>
+    </table></ul>
+
+  <dt><strong>Returns:</strong>
+    <dd>Success: a non-negative value
+    <dd>Failure: a negative value
+  <dt><strong>Fortran90 Interface:</strong> h5punregister_f
+    <dd>
+	<pre>
+SUBROUTINE h5punregister_f(class, name, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: class  ! Property list class identifier
+  CHARACTER(LEN=*), INTENT(IN) :: name ! Name of property to remove
+  INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                       ! 0 on success and -1 on failure
+END SUBROUTINE h5punregister_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+
+<!--
+
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SetCompression">H5Pset_compression</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Pset_compression</code>(<em>hid_t</em> <code>plist</code>,
+        <em>H5Z_method_t</em> <code>method</code>,
+        <em>unsigned int</em> <code>flags</code>,
+        <em>size_t</em> <code>cd_size</code>,
+        <em>const void</em> <code>*client_data</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Sets compression method.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pset_compression</code> sets the compression method 
+        in a dataset creation property list.  This is a catch-all 
+        function for defining compression methods
+	and is intended to be called from a wrapper such as
+	<code>H5Pset_deflate</code>. The dataset creation property
+	list <em>plist</em> is adjusted to use the specified
+	compression method.  The <em>flags</em> is an 8-bit vector
+	which is stored in the file as part of the compression message
+	and passed to the compress and uncompress functions.  The
+	<em>client_data</em> is a byte array of length
+	<em>cd_size</em> which is copied to the file and passed to the
+	compress and uncompress methods.
+        <p>
+        The FLAGS, CD_SIZE, and CLIENT_DATA are copied to the
+        property list and eventually to the file and passed to the
+        compression functions.
+        <p>
+        See <a href="Datasets.html"><cite>The Dataset Interface (H5D)</cite></a> 
+        in the <cite>HDF5 User's Guide</cite> for further information 
+        regarding data compression.
+  <dt><strong>Parameters:</strong>
+    <dl>
+        <dt><em>hid_t</em> <code>plist</code>
+            <dd>IN: Identifier for the dataset creation property list.
+        <dt><em>H5Z_method_t</em> <code>method</code>
+            <dd>IN: Compression method, an integer from 16 to 225.
+        <dt><em>unsigned int</em> <code>flags</code>
+            <dd>IN: Compression flags.
+        <dt><em>size_t</em> <code>cd_size</code>
+            <dd>IN: Size of the byte array <code>client_data</code>.
+        <dt><em>const void</em> <code>*client_data</code>
+            <dd>IN: Client data byte array passed to the compression method.
+    </dl>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Non-C API(s):</strong>
+    <dd><a href="fortran/h5p_FORTRAN.html#h5pxxx" 
+        target="FortranWin"><img src="Graphics/FORTRAN.gif" border=0></a>
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+</dl>
+
+-->
+
+
+<!--
+
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetCompression">H5Pget_compression</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>H5Z_method_t</em> <code>H5Pget_compression</code>(<em>hid_t</em> <code>plist</code>,
+        <em>unsigned int</em> <code>*flags</code>,
+        <em>size_t</em> <code>*cd_size</code>,
+        <em>void</em> <code>*client_data</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Gets compression method.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_compression</code> gets the compression method 
+        information from a dataset creation property list.  
+        The <code>client_data</code> buffer is initially 
+        <code>cd_size</code> bytes.  On return, <code>client_data</code>
+        will be initialized with at most that many bytes, and 
+        <code>cd_size</code> will contain the actual size of the 
+        client data, which might be larger than its original value.
+  <dt><strong>Parameters:</strong>
+    <dl>
+        <dt><em>hid_t</em> <code>plist</code>
+            <dd>IN: Identifier for the dataset creation property list.
+        <dt><em>unsigned int</em> <code>*flags</code>
+            <dd>OUT: Compression flags.
+        <dt><em>size_t</em> <code>*cd_size</code>
+            <dd>IN/OUT: Size of the <code>client_data</code> array.
+        <dt><em>void</em> <code>*client_data</code>
+            <dd>OUT: Byte array for the client data.
+    </dl>
+  <dt><strong>Returns:</strong>
+    <dd>Returns compression method if successful;
+        otherwise returns a negative value.
+  <dt><strong>Non-C API(s):</strong>
+    <dd><a href="fortran/h5p_FORTRAN.html#h5pxxx" 
+        target="FortranWin"><img src="Graphics/FORTRAN.gif" border=0></a>
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+</dl>
+
+-->
+
+
+<!--
+
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-GetDeflate">H5Pget_deflate</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Pget_deflate</code>(<em>hid_t</em> <code>plist</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>Returns the deflate compression level from a dataset creation
+        property list.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Pget_deflate</code> returns the deflate compression level 
+        from a dataset creation property list that uses that method.
+  <dt><strong>Parameters:</strong>
+    <dl>
+        <dt><em>hid_t</em> <code>plist</code>
+            <dd>IN: Identifier for the dataset creation property list.
+    </dl>
+  <dt><strong>Returns:</strong>
+    <dd>Returns compression level, a value between 0 and 9, if successful.
+        Otherwise returns a negative value.
+  <dt><strong>Non-C API(s):</strong>
+    <dd><a href="fortran/h5p_FORTRAN.html#h5pxxx" 
+        target="FortranWin"><img src="Graphics/FORTRAN.gif" border=0></a>
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+</dl>
+
+-->
+
+
+<!--  ***** TEMPLATE *****
+
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-SGetFaplxxx">H5Psget_fapl_xxx</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>xxx</em> <code>H5Psget_fapl_xxx</code>(
+                     <em>xxx</em> <code>xxx</code>,
+                     <em>xxx</em> <code>xxx</code>,
+                     <em>xxx</em> <code>xxx</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>
+  <dt><strong>Description:</strong>
+    <dd><code>H5Psget_fapl_xxx</code>
+        
+  <dt><strong>Parameters:</strong>
+    <dl>
+        <dt><em>xxx</em> <code>xxx</code>
+            <dd>IN: 
+            <dd>OUT: 
+    </dl>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value.
+-->
+<!--
+  <dt><strong>Non-C API(s):</strong>
+    <dd><a href="fortran/h5p_FORTRAN.html#h5pxxx_f" 
+        target="FortranWin"><img src="Graphics/FORTRAN.gif" border=0></a>
+  -->
+<!--
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<!--
+</dl>
+-->
+<!--    ***** TEMPLATE *****
+
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Property-xxx">xxx</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>xxx</em> <code>xxx</code>(
+                     <em>xxx</em> <code>xxx</code>,
+                     <em>xxx</em> <code>xxx</code>,
+                     <em>xxx</em> <code>xxx</code>
+    )
+  <dt><strong>Purpose:</strong>
+    <dd>
+  <dt><strong>Description:</strong>
+    <dd><code>xxx</code>
+        
+  <dt><strong>Parameters:</strong>
+    <dl>
+        <dt><em>xxx</em> <code>xxx</code>
+            <dd>IN: 
+            <dd>OUT: 
+    </dl>
+  <dt><strong>Returns:</strong>
+    <dd>Returns xxx if successful.
+        Otherwise returns xxx.
+-->
+<!--
+  <dt><strong>Non-C API(s):</strong>
+    <dd><a href="fortran/h5p_FORTRAN.html#h5pxxx_f" 
+        target="FortranWin"><img src="Graphics/FORTRAN.gif" border=0></a>
+  -->
+<!--
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<!--
+</dl>
+-->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 5 October 2005");
+-->
+</SCRIPT>
+ 
+</body>
+</html>
+

Added: packages/hdf5/branches/upstream/current/doc/html/RM_H5R.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/RM_H5R.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/RM_H5R.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,608 @@
+<html>
+<head><title>
+HDF5/H5R API Specification
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+<!-- HEADER RIGHT " " -->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>H5R: Reference Interface</h1>
+</center>
+
+<h2>Reference API Functions</h2>
+
+The Reference interface allows the user to create references 
+to specific objects and data regions in an HDF5 file.
+
+<p>
+<strong>The C Interfaces:</strong>
+
+<table border=0 width=80%>
+<tr><td valign=top width=40%>
+<ul>
+    <li><a href="#Reference-Create">H5Rcreate</a>
+    <li><a href="#Reference-Dereference">H5Rdereference</a>
+</ul>
+</td><td valign=top width=40%>
+<ul>
+    <li><a href="#Reference-GetRegion">H5Rget_region</a>
+    <li><a href="#Reference-GetObjType">H5Rget_obj_type</a>
+</ul>
+</td><td valign=top width=20%>
+<ul>
+    &nbsp;
+</ul>
+</td></tr>
+</table>
+
+<p>
+
+<i>Alphabetical Listing</i>
+
+<table border="0">
+  <tr>
+    <td valign="top">
+	<ul>
+      <li><a href="#Reference-Create">H5Rcreate</a>
+      <li><a href="#Reference-Dereference">H5Rdereference</a>
+	</ul>      
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#Reference-GetObjType">H5Rget_obj_type</a>
+      <li><a href="#Reference-GetObjectType">H5Rget_object_type</a> *
+	</ul>
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+	<ul>
+      <li><a href="#Reference-GetRegion">H5Rget_region</a>
+	</ul>
+    </td>
+  </tr>
+</table>
+
+* Functions labelled with an asterisk (*) are provided only for 
+backwards compatibility with HDF5 Releases 1.4.<i>x</i>.  
+See further notes in the description of each function.
+<p>
+
+<strong>The FORTRAN90 Interfaces:</strong>
+<br>
+In general, each FORTRAN90 subroutine performs exactly the same task 
+as the corresponding C function.  
+<br>
+
+<table border=0 width=80%>
+<tr><td valign=top width=40%>
+<ul>
+    <li><a href="#Reference-Create">h5rcreate_f</a>
+    <li><a href="#Reference-Dereference">h5rdereference_f</a>
+</ul>
+</td><td valign=top width=40%>
+<ul>
+    <li><a href="#Reference-GetRegion">h5rget_region_f</a>
+    <li><a href="#Reference-GetObjectType">h5rget_object_type_f</a>
+</ul>
+</td><td valign=top width=20%>
+<ul>
+
+</ul>
+</td></tr>
+</table>
+
+
+<p>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT " " -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Rcreate" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Reference-Create">H5Rcreate</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Rcreate</code>(<em>void *</em><code>ref</code>,
+        <em>hid_t</em> <code>loc_id</code>,
+        <em>const char *</em><code>name</code>,
+        <em>H5R_type_t</em> <code>ref_type</code>,
+        <em>hid_t</em> <code>space_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Creates a reference.
+<dt><strong>Description:</strong>
+    <dd><code>H5Rcreate</code> creates the reference, <code>ref</code>,
+        of the type specified in <code>ref_type</code>, pointing to 
+        the object <code>name</code> located at <code>loc_id</code>.
+        <p>
+        The HDF5 library maps the <em>void</em> type specified above 
+        for <code>ref</code> to the type specified in <code>ref_type</code>,
+        which will be one of those appearing in the first column of
+        the following table.  
+        The second column of the table lists the HDF5 constant associated 
+        with each reference type.
+        <dir>
+        <table border=0>
+        <tr><td><em>hdset_reg_ref_t</em>&nbsp;&nbsp;</td>
+            <td><code>H5R_DATASET_REGION</code>&nbsp;&nbsp;</td>
+            <td>Dataset region reference</td></tr>
+        <tr><td><em>hobj_ref_t</em></td>
+            <td><code>H5R_OBJECT</code></td>
+            <td>Object reference</td></tr>
+        </table>
+        </dir>
+        <p>
+        The parameters <code>loc_id</code> and <code>name</code> are 
+        used to locate the object.
+        <p>
+        The parameter <code>space_id</code> identifies the region 
+        to be pointed to for a dataset region reference.
+        This parameter is unused with object references.  
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>void *</em><code>ref</code></td>
+            <td valign="top">OUT: Reference created by the function call.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+            <td valign="top">IN: Location identifier used to locate the object being 
+                    pointed to.</td></tr>
+        <tr>
+		    <td valign="top"><em>const char *</em><code>name</code></td>
+            <td valign="top">IN: Name of object at location <code>loc_id</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5R_type_t</em>&nbsp;<code>ref_type&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Type of reference.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>space_id</code></td>
+            <td valign="top">IN: Dataspace identifier with selection. 
+                    Used for dataset region references.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5rcreate_f
+
+    <p><strong>To create an object reference</strong> 
+    <dd>
+	<pre>
+SUBROUTINE h5rcreate_f(loc_id, name, ref, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: loc_id     ! Location identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name     ! Name of the object at location 
+                                           ! specified by loc_id identifier 
+  TYPE(hobj_ref_t_f), INTENT(OUT) :: ref   ! Object reference 
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code 
+
+END SUBROUTINE h5rcreate_f
+	</pre></dt>
+
+<!-- NEW PAGE -->	
+<dt><strong>To create a region reference</strong>	
+	<dd>
+	<pre>
+SUBROUTINE h5rcreate_f(loc_id, name, space_id, ref, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: loc_id        ! Location identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name        ! Name of the dataset at location 
+                                              ! specified by loc_id identifier 
+  INTEGER(HID_T), INTENT(IN) :: space_id      ! Dataset's dataspace identifier 
+  TYPE(hdset_reg_ref_t_f), INTENT(OUT) :: ref ! Dataset region reference 
+  INTEGER, INTENT(OUT) :: hdferr              ! Error code 
+
+END SUBROUTINE h5rcreate_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Rdereference" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Reference-Dereference">H5Rdereference</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Rdereference</code>(<em>hid_t</em> <code>dataset</code>,
+        <em>H5R_type_t</em> <code>ref_type</code>,
+        <em>void *</em><code>ref</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Opens the HDF5 object referenced.
+<dt><strong>Description:</strong>
+    <dd>Given a reference to some object, <code>H5Rdereference</code>
+        opens that object and returns an identifier.
+        <p>
+        The parameter <code>ref_type</code> specifies the reference type
+        of <code>ref</code>. 
+        <code>ref_type</code> may contain either of the following values:
+        <ul>
+        <li><code>H5R_OBJECT</code>  (<code>0</code>)
+        <li><code>H5R_DATASET_REGION</code>  (<code>1</code>)
+        </ul>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dataset</code></td>
+            <td valign="top">IN: Dataset containing reference object.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5R_type_t</em>&nbsp;<code>ref_type&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: The reference type of <code>ref</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>void *</em><code>ref</code></td>
+            <td valign="top">IN: Reference to open.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns valid identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5rdereference_f
+
+    <p><strong>To dereference an object</strong> 
+    <dd>
+	<pre>
+SUBROUTINE h5rdereference_f(dset_id, ref, obj_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier 
+  TYPE(hobj_ref_t_f), INTENT(IN) :: ref   ! Object reference 
+  INTEGER(HID_T), INTENT(OUT) :: obj_id   ! Object identifier 
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code 
+
+END SUBROUTINE h5rdereference_f
+	</pre>
+</dt>
+	
+<dt><strong>To dereference a region</strong>	
+	<dd>
+	<pre>
+SUBROUTINE h5rdereference_f(dset_id, ref, obj_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: dset_id        ! Dataset identifier 
+  TYPE(hdset_reg_ref_t_f), INTENT(IN) :: ref   ! Object reference 
+  INTEGER(HID_T), INTENT(OUT) :: obj_id        ! Object identifier 
+  INTEGER, INTENT(OUT) :: hdferr               ! Error code 
+          
+END SUBROUTINE h5rdereference_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Rget_obj_type" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Reference-GetObjType">H5Rget_obj_type</a>
+<dt><strong>Signature:</strong>
+    <dd><em>H5G_obj_t</em> <code>H5Rget_obj_type</code>(<em>hid_t</em> <code>id</code>,
+    <em>H5R_type_t</em> <code>ref_type</code>,
+    <em>void *</em><code>ref</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the type of object that an object reference points to.
+<dt><strong>Description:</strong>
+    <dd>Given type of object reference, <code>ref_type</code>, 
+        and a reference to an object, <code>ref</code>, 
+        <code>H5Rget_obj_type</code> 
+        returns the type of the referenced object.
+	<p>
+	Valid object reference types, to pass in as <code>ref_type</code>, 
+	include the following:
+	<table border="0">
+	<tr align=left valign=top><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+	<code>H5R_OBJECT</code></td><td>
+	Reference is an object reference.
+	</td></tr>
+	<tr align=left valign=top><td>&nbsp;</td><td>
+	<code>H5R_DATASET_REGION&nbsp;&nbsp;</code></td><td>
+	Reference is a dataset region reference.
+	</td></tr>
+	</table>
+	<p>
+	Valid object type return values include the following:
+	<table border="0">
+	<tr align=left valign=top><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+	<code>H5G_LINK</code></td><td>
+	Object is a symbolic link.
+	</td></tr>
+	<tr align=left valign=top><td>&nbsp;</td><td>
+	<code>H5G_GROUP</code></td><td>
+	Object is a group.
+	</td></tr>
+	<tr align=left valign=top><td>&nbsp;</td><td>
+	<code>H5G_DATASET&nbsp;&nbsp;</code></td><td>
+	Object is a dataset.
+	</td></tr>
+	<tr align=left valign=top><td>&nbsp;</td><td>
+	<code>H5G_TYPE</code></td><td>
+	Object is a named datatype.
+	</td></tr>
+	</table>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>id</code></td>
+            <td valign="top">IN: The dataset containing the reference object or 
+                the location identifier of the object that the 
+                dataset is located within.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5R_type_t</em>&nbsp;<code>ref_type&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Type of reference to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>void *</em><code>ref</code></td>
+            <td valign="top">IN: Reference to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns an object type as defined in <code>H5Gpublic.h</code> if successful;
+        otherwise returns <code>H5G_UNKNOWN</code>.
+<dt><strong>Fortran90 Interface:</strong> h5rget_object_type_f
+    <dd>
+	<pre>
+SUBROUTINE h5rget_object_type_f(dset_id, ref, obj_type, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier 
+  TYPE(hobj_ref_t_f), INTENT(IN) :: ref   ! Object reference 
+  INTEGER, INTENT(OUT) :: obj_type        ! Object type  
+                                          !     H5G_UNKNOWN_F (-1)
+                                          !     H5G_LINK_F      0
+                                          !     H5G_GROUP_F     1
+                                          !     H5G_DATASET_F   2
+                                          !     H5G_TYPE_F      3
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code 
+
+END SUBROUTINE h5rget_object_type_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Rget_object_type" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Reference-GetObjectType">H5Rget_object_type</a>
+<dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Rget_object_type</code>(<em>hid_t</em> <code>id</code>,
+    <em>void *</em><code>ref</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the type of object that an object reference points to.
+<dt><strong>Description:</strong>
+    <dd>[<strong>NOTE:</strong>
+        <span class="1_4_compat">
+        This function is provided only to enable backward compatibility
+        with HDF5 Releases 1.4.<i>x</i>. 
+	This function is enabled only if the HDF5 library is configured 
+	with the flag <code>H5_WANT_H5_V1_4_COMPAT</code> and is not
+	enabled in the binaries distributed by NCSA.
+	This function has been replaced in Release 1.6 by the function 
+	<a href="#Reference-GetObjType"><code>H5Rget_obj_type</code></a>
+	and will eventually be deleted from the HDF5 distribution.</span>]
+        <p>
+	</p>Given a reference to an object <code>ref</code>, 
+        <code>H5Rget_object_type</code> returns the 
+        type of the object pointed to.
+<dt><strong>Parameters:</strong>
+    <dl>
+        <dt><em>hid_t</em> <code>id</code>,
+            <dd>IN: The dataset containing the reference object or 
+                the location identifier of the object that the dataset 
+                is located within.
+        <dt><em>void *</em><code>ref</code>
+            <dd>IN: Reference to query.
+    </dl>
+<dt><strong>Returns:</strong>
+    <dd>Returns an object type as defined in <code>H5Gpublic.h</code>;
+        otherwise returns <code>H5G_UNKNOWN</code>.
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Rget_region" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Reference-GetRegion">H5Rget_region</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Rget_region</code>(<em>hid_t</em> <code>dataset</code>,
+    <em>H5R_type_t</em> <code>ref_type</code>,
+    <em>void *</em><code>ref</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves a dataspace with the specified region selected.
+<dt><strong>Description:</strong>
+    <dd>Given a reference to an object <code>ref</code>, 
+        <code>H5Rget_region</code> creates a copy of the dataspace 
+        of the dataset pointed to and defines a selection in the copy 
+        which is the region pointed to.
+        <p>
+        The parameter <code>ref_type</code> specifies the reference type
+        of <code>ref</code>. 
+        <code>ref_type</code> may contain the following value:
+        <ul>
+        <li><code>H5R_DATASET_REGION</code>  (<code>1</code>)
+        </ul>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dataset</code></td>
+            <td valign="top">IN: Dataset containing reference object.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5R_type_t</em>&nbsp;<code>ref_type&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: The reference type of <code>ref</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>void *</em><code>ref</code></td>
+            <td valign="top">IN: Reference to open.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a valid identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5rget_region_f
+    <dd>
+	<pre>
+SUBROUTINE h5rget_region_f(dset_id, ref, space_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: dset_id       ! Dataset identifier 
+  TYPE(hdset_reg_ref_t_f), INTENT(IN) :: ref  ! Dataset region reference 
+  INTEGER(HID_T), INTENT(OUT) :: space_id     ! Space identifier 
+  INTEGER, INTENT(OUT) :: hdferr              ! Error code
+ 
+END SUBROUTINE h5rget_region_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 16 October 2003");
+-->
+</SCRIPT> 
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/RM_H5S.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/RM_H5S.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/RM_H5S.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1952 @@
+<html>
+<head><title>
+HDF5/H5S API Specification
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+<!-- HEADER RIGHT " " -->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>H5S: Dataspace Interface</h1>
+</center>
+
+<h2>Dataspace Object API Functions</h2>
+
+These functions create and manipulate the dataspace in which to store the
+elements of a dataset.
+
+
+<p>
+<strong>The C Interfaces:</strong>
+
+<table border=0>
+<tr><td valign=top>
+    <li><a href="#Dataspace-Create">H5Screate</a>
+    <li><a href="#Dataspace-Copy">H5Scopy</a>
+    <li><a href="#Dataspace-Close">H5Sclose</a>
+    <li><a href="#Dataspace-CreateSimple">H5Screate_simple</a>
+    <li><a href="#Dataspace-IsSimple">H5Sis_simple</a>
+    <li><a href="#Dataspace-OffsetSimple">H5Soffset_simple</a>
+    <li><a href="#Dataspace-ExtentDims">H5Sget_simple_extent_dims</a>
+    <li><a href="#Dataspace-ExtentNdims">H5Sget_simple_extent_ndims</a>
+
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+    <li><a href="#Dataspace-ExtentNpoints">H5Sget_simple_extent_npoints</a>
+    <li><a href="#Dataspace-ExtentType">H5Sget_simple_extent_type</a>
+<!--		NOT YET IMPLEMENTED (R1.2 -- 9908)
+    <li><a href="#Dataspace-ExtentClass">H5Sextent_class</a>
+-->
+    <li><a href="#Dataspace-ExtentCopy">H5Sextent_copy</a>
+    <li><a href="#Dataspace-SetExtentSimple">H5Sset_extent_simple</a>
+    <li><a href="#Dataspace-SetExtentNone">H5Sset_extent_none</a>
+    <li><a href="#Dataspace-GetSelectType">H5Sget_select_type</a>
+    <li><a href="#Dataspace-SelectNpoints">H5Sget_select_npoints</a>
+    <li><a href="#Dataspace-SelectHyperNBlocks">H5Sget_select_hyper_nblocks</a>
+    <li><a href="#Dataspace-SelectHyperBlockList">H5Sget_select_hyper_blocklist</a>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+    <li><a href="#Dataspace-SelectElemNPoints">H5Sget_select_elem_npoints</a>
+    <li><a href="#Dataspace-SelectElemPointList">H5Sget_select_elem_pointlist</a>
+    <li><a href="#Dataspace-SelectBounds">H5Sget_select_bounds</a>
+    <li><a href="#Dataspace-SelectElements">H5Sselect_elements</a>
+    <li><a href="#Dataspace-SelectAll">H5Sselect_all</a>
+    <li><a href="#Dataspace-SelectNone">H5Sselect_none</a>
+    <li><a href="#Dataspace-SelectValid">H5Sselect_valid</a>
+    <li><a href="#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a>
+<!--<li><a href="#Dataspace-CombineHyperslab">H5Scombine_hyperslab</a>    -->
+<!--<li><a href="#Dataspace-CombineSelect">H5Scombine_select</a>          -->
+<!--<li><a href="#Dataspace-SelectSelect">H5Sselect_select</a>            -->
+</td></tr>
+</table>
+<br>
+
+<i>Alphabetical Listing</i>
+
+<table border="0">
+  <tr>
+    <td valign="top">
+      <li><a href="#Dataspace-Close">H5Sclose</a>
+      <li><a href="#Dataspace-Copy">H5Scopy</a>
+      <li><a href="#Dataspace-Create">H5Screate</a>
+      <li><a href="#Dataspace-CreateSimple">H5Screate_simple</a>
+      <li><a href="#Dataspace-ExtentCopy">H5Sextent_copy</a>
+      <li><a href="#Dataspace-SelectBounds">H5Sget_select_bounds</a>
+      <li><a href="#Dataspace-SelectElemNPoints">H5Sget_select_elem_npoints</a>
+      <li><a href="#Dataspace-SelectElemPointList">H5Sget_select_elem_pointlist</a>
+      <li><a href="#Dataspace-SelectHyperBlockList">H5Sget_select_hyper_blocklist</a>      
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">      
+      <li><a href="#Dataspace-SelectHyperNBlocks">H5Sget_select_hyper_nblocks</a>
+      <li><a href="#Dataspace-SelectNpoints">H5Sget_select_npoints</a>
+      <li><a href="#Dataspace-GetSelectType">H5Sget_select_type</a>
+      <li><a href="#Dataspace-ExtentDims">H5Sget_simple_extent_dims</a>
+      <li><a href="#Dataspace-ExtentNdims">H5Sget_simple_extent_ndims</a>
+      <li><a href="#Dataspace-ExtentNpoints">H5Sget_simple_extent_npoints</a>
+      <li><a href="#Dataspace-ExtentType">H5Sget_simple_extent_type</a>
+      <li><a href="#Dataspace-IsSimple">H5Sis_simple</a>
+      <li><a href="#Dataspace-OffsetSimple">H5Soffset_simple</a>
+    </td>
+    
+    <td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">
+      
+      <li><a href="#Dataspace-SelectAll">H5Sselect_all</a>
+      <li><a href="#Dataspace-SelectElements">H5Sselect_elements</a>
+      <li><a href="#Dataspace-SelectHyperslab">H5Sselect_hyperslab</a>
+      <li><a href="#Dataspace-SelectNone">H5Sselect_none</a>
+      <li><a href="#Dataspace-SelectValid">H5Sselect_valid</a>
+      <li><a href="#Dataspace-SetExtentNone">H5Sset_extent_none</a>
+      <li><a href="#Dataspace-SetExtentSimple">H5Sset_extent_simple</a>
+    </td>
+  </tr>
+</table>
+
+<br>
+<strong>The FORTRAN90 Interfaces:</strong>
+<br>
+In general, each FORTRAN90 subroutine performs exactly the same task 
+as the corresponding C function.  
+<br>
+
+<table border=0>
+<tr><td valign=top>
+    <li><a href="#Dataspace-Create">h5screate_f</a>
+    <li><a href="#Dataspace-Copy">h5scopy_f</a>
+    <li><a href="#Dataspace-Close">h5sclose_f</a>
+    <li><a href="#Dataspace-CreateSimple">h5screate_simple_f</a>
+    <li><a href="#Dataspace-IsSimple">h5sis_simple_f</a>
+    <li><a href="#Dataspace-OffsetSimple">h5soffset_simple_f</a>
+    <li><a href="#Dataspace-ExtentDims">h5sget_simple_extent_dims_f</a>
+    <li><a href="#Dataspace-ExtentNdims">h5sget_simple_extent_ndims_f</a>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+    <li><a href="#Dataspace-ExtentNpoints">h5sget_simple_extent_npoints_f</a>
+    <li><a href="#Dataspace-ExtentType">h5sget_simple_extent_type_f</a>
+<!--		NOT YET IMPLEMENTED (R1.2 -- 9908)
+    <li><a href="#Dataspace-ExtentClass">h5sextent_class_f</a>            -->
+    <li><a href="#Dataspace-ExtentCopy">h5sextent_copy_f</a>
+    <li><a href="#Dataspace-SetExtentSimple">h5sset_extent_simple_f</a>
+    <li><a href="#Dataspace-SetExtentNone">h5sset_extent_none_f</a>
+    <li><a href="#Dataspace-GetSelectType">h5sget_select_type_f</a>
+    <li><a href="#Dataspace-SelectNpoints">h5sget_select_npoints_f</a>
+    <li><a href="#Dataspace-SelectHyperNBlocks">h5sget_select_hyper_nblocks_f</a>
+    <li><a href="#Dataspace-SelectHyperBlockList">h5sget_select_hyper_blocklist_f</a>
+<!--<li><a href="#Dataspace-SelectBounds">h5sget_select_bounds_f</a>      -->
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+    <li><a href="#Dataspace-SelectElemNPoints">h5sget_select_elem_npoints_f</a>
+    <li><a href="#Dataspace-SelectElemPointList">h5sget_select_elem_pointlist_f</a>
+    <li><a href="#Dataspace-SelectElements">h5sselect_elements_f</a>
+    <li><a href="#Dataspace-SelectAll">h5sselect_all_f</a>
+    <li><a href="#Dataspace-SelectNone">h5sselect_none_f</a>
+    <li><a href="#Dataspace-SelectValid">h5sselect_valid_f</a>
+    <li><a href="#Dataspace-SelectHyperslab">h5sselect_hyperslab_f</a>
+<!--<li><a href="#Dataspace-CombineHyperslab">h5scombine_hyperslab_f</a>  -->
+<!--<li><a href="#Dataspace-CombineSelect">h5scombine_select_f</a>        -->
+<!--<li><a href="#Dataspace-SelectSelect">h5sselect_select_f</a>          -->
+</td></tr>
+</table>
+
+
+<!-- Unimplemented functions
+<p>
+The following H5S functions are included in the HDF5 specification, 
+but have not yet been implemented.  They are described in the 
+<a href="Dataspaces.html">The Dataspace Interface (H5S)</a> section
+of the <cite>HDF5 User's Guide.</cite>.
+<table border=0>
+<tr><td valign=top>
+<ul>
+    <li>H5Scommit
+    <li>H5Sis_subspace
+    <li>H5Slock
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li>H5Sopen
+    <li>H5Sselect_op
+    <li>H5Sselect_order
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<ul>
+    <li>H5Ssubspace
+    <li>H5Ssubspace_name
+    <li>H5Ssubspace_location
+</ul>
+</td></tr>
+</table>
+-->
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT " " -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sclose" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-Close">H5Sclose</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Sclose</code>(<em>hid_t </em><code>space_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Releases and terminates access to a dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sclose</code> releases a dataspace.  
+        Further access through the dataspace identifier is illegal.  
+        Failure to release a dataspace with this call will
+        result in resource leaks.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">Identifier of dataspace to release.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sclose_f
+    <dd>
+	<pre>
+SUBROUTINE h5sclose_f(space_id, hdferr)     
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5sclose_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Scopy" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-Copy">H5Scopy</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Scopy</code>(<em>hid_t </em><code>space_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Creates an exact copy of a dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Scopy</code> creates a new dataspace which is an exact
+        copy of the dataspace identified by <code>space_id</code>.
+        The dataspace identifier returned from this function should be 
+        released with <code>H5Sclose</code> or resource leaks will occur.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">Identifier of dataspace to copy.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a dataspace identifier if successful; 
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5scopy_f
+    <dd>
+	<pre>
+SUBROUTINE h5scopy_f(space_id, new_space_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id      ! Dataspace identifier 
+  INTEGER(HID_T), INTENT(OUT) :: new_space_id ! Identifier of dataspace copy 
+  INTEGER, INTENT(OUT) :: hdferr              ! Error code
+                                              ! 0 on success and -1 on failure
+END SUBROUTINE h5scopy_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Screate" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-Create">H5Screate</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Screate</code>(<em>H5S_class_t</em> <code>type</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Creates a new dataspace of a specified type.
+<dt><strong>Description:</strong>
+    <dd><code>H5Screate</code> creates a new dataspace of a particular 
+        <code>type</code>.  
+        The types currently supported are <code>H5S_SCALAR</code> and 
+        <code>H5S_SIMPLE</code>;
+        others are planned to be added later.  
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>H5S_class_t</em>&nbsp;<code>type&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">The type of dataspace to be created.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a dataspace identifier if successful; 
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5screate_f
+    <dd>
+	<pre>
+SUBROUTINE h5screate_f(classtype, space_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER, INTENT(IN) :: classtype        ! The type of the dataspace
+                                          ! to be created. Possible values
+                                          ! are: 
+                                          !    H5S_SCALAR_F 
+                                          !    H5S_SIMPLE_F 
+  INTEGER(HID_T), INTENT(OUT) :: space_id ! Dataspace identifier 
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5screate_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Screate_simple" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-CreateSimple">H5Screate_simple</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Screate_simple</code>(<em>int</em> <code>rank</code>,
+        <em>const hsize_t *</em> <code>dims</code>,
+        <em>const hsize_t *</em> <code>maxdims</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Creates a new simple dataspace and opens it for access. 
+<dt><strong>Description:</strong>
+
+    <dd><code>H5Screate_simple</code> creates a new simple dataspace 
+        and opens it for access. 
+        <p>
+        <code>rank</code> is the number of dimensions used in the dataspace.  
+        <p>
+        <code>dims</code> is an array specifying the size of each dimension
+        of the dataset while
+        <code>maxdims</code> is an array specifying the upper limit on 
+        the size of each dimension.  
+        <code>maxdims</code> may be the null pointer, in which case the 
+        upper limit is the same as <code>dims</code>.  
+        <p>
+        If an element of <code>maxdims</code> is 
+        <code>H5S_UNLIMITED</code>, (<code>-1</code>), 
+        the maximum size of the corresponding dimension is unlimited.
+        Otherwise, no element of <code>maxdims</code> should be 
+        smaller than the corresponding element of <code>dims</code>.  
+        <p>
+        The dataspace identifier returned from this function must be 
+        released with <code>H5Sclose</code> or resource leaks will occur.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>int</em> <code>rank</code></td>
+          <td valign="top">Number of dimensions of dataspace.</td></tr>
+        <tr>
+		  <td valign="top"><em>const hsize_t *</em> <code>dims</code></td>
+          <td valign="top">An array of the size of each dimension.</td></tr>
+        <tr>
+		  <td valign="top"><em>const&nbsp;hsize_t&nbsp;*</em>&nbsp;<code>maxdims&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">An array of the maximum size of each dimension.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a dataspace identifier if successful; 
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5screate_simple_f
+    <dd>
+	<pre>
+SUBROUTINE h5screate_simple_f(rank, dims, space_id, hdferr, maxdims) 
+  IMPLICIT NONE
+  INTEGER, INTENT(IN) :: rank             ! Number of dataspace dimensions 
+  INTEGER(HSIZE_T), INTENT(IN) :: dims(*) ! Array with the dimension sizes 
+  INTEGER(HID_T), INTENT(OUT) :: space_id ! Dataspace identifier 
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+  INTEGER(HSIZE_T), OPTIONAL, INTENT(IN) :: maxdims(*) 
+                                          ! Array with the maximum 
+                                          ! dimension sizes 
+END SUBROUTINE h5screate_simple_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sextent_copy" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-ExtentCopy">H5Sextent_copy</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Sextent_copy</code>(<em>hid_t</em> <code>dest_space_id</code>,
+    <em>hid_t</em> <code>source_space_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Copies the extent of a dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sextent_copy</code> copies the extent from 
+    <code>source_space_id</code> to <code>dest_space_id</code>. 
+    This action may change the type of the dataspace.  
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em> <code>dest_space_id</code></td>
+          <td valign="top">IN: The identifier for the dataspace to which 
+              the extent is copied.</td></tr>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>source_space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: The identifier for the dataspace from which 
+              the extent is copied.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sextent_copy_f
+    <dd>
+	<pre>
+SUBROUTINE h5sextent_copy_f(dest_space_id, source_space_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: dest_space_id   ! Identifier of destination
+                                                ! dataspace
+  INTEGER(HID_T), INTENT(IN) :: source_space_id ! Identifier of source 
+                                                ! dataspace
+  INTEGER, INTENT(OUT) :: hdferr                ! Error code
+                                                ! 0 on success and -1 on failure 
+END SUBROUTINE h5sextent_copy_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sget_select_bounds" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-SelectBounds">H5Sget_select_bounds</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Sget_select_bounds</code>(<em>hid_t </em><code>space_id</code>,
+        <em>hsize_t *</em><code>start</code>,
+        <em>hsize_t *</em><code>end</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Gets the bounding box containing the current selection.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sget_select_bounds</code> retrieves the coordinates of 
+        the bounding box containing the current selection and places
+        them into user-supplied buffers.  
+        <p>
+        The <code>start</code> and <code>end</code> buffers must be large
+        enough to hold the dataspace rank number of coordinates.  
+        <p>
+        The bounding box exactly contains the selection.  
+        I.e., if a 2-dimensional element selection is currently
+        defined as containing the points (4,5), (6,8), and (10,7), 
+        then the bounding box will be (4, 5), (10, 8).  
+        <p>
+        The bounding box calculation includes the current offset of the
+        selection within the dataspace extent.
+        <p>
+        Calling this function on a <code>none</code> selection will 
+        return <code>FAIL</code>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: Identifier of dataspace to query.</td></tr>
+        <tr>
+		  <td valign="top"><em>hsize_t *</em><code>start</code></td>
+          <td valign="top">OUT: Starting coordinates of the bounding box.</td></tr>
+        <tr>
+		  <td valign="top"><em>hsize_t *</em><code>end</code></td>
+          <td valign="top">OUT: Ending coordinates of the bounding box, 
+                i.e., the coordinates of the diagonally opposite corner.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>
+	<pre>
+SUBROUTINE  h5sget_select_bounds_f(space_id, start, end, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id 
+                                   ! Dataspace identifier 
+  INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: start
+                                   ! Starting coordinates of the bounding box 
+  INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: end
+                                   ! Ending coordinates of the bounding box,
+                                   ! i.e., the coordinates of the diagonally 
+                                   ! opposite corner 
+  INTEGER, INTENT(OUT) :: hdferr   ! Error code
+END SUBROUTINE h5sget_select_bounds_f
+	</pre>
+
+<!--<dt><strong>Non-C API(s):</strong>
+    <dd>
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    The <code>start</code> and <code>end</code> 
+			parameters have changed from type <em>hsize_t *</em> 
+			to <em>hssize_t *</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sget_select_elem_npoints" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-SelectElemNPoints">H5Sget_select_elem_npoints</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hssize_t </em><code>H5Sget_select_elem_npoints</code>(<em>hid_t </em><code>space_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Gets the number of element points in the current selection.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sget_select_elem_npoints</code> returns
+    the number of element points in the current dataspace selection.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: Identifier of dataspace to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the number of element points in the current dataspace selection if successful.
+        Otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sget_select_elem_npoints_f
+    <dd>
+	<pre>
+SUBROUTINE h5sget_select_elem_npoints_f(space_id, num_points, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
+  INTEGER, INTENT(OUT) :: num_points     ! Number of points in 
+                                         ! the current elements selection
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+END SUBROUTINE h5sget_select_elem_npoints_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sget_select_elem_pointlist" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-SelectElemPointList">H5Sget_select_elem_pointlist</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Sget_select_elem_pointlist</code>(<em>hid_t </em><code>space_id</code>,
+        <em>hsize_t </em><code>startpoint</code>,
+        <em>hsize_t </em><code>numpoints</code>,
+        <em>hsize_t *</em><code>buf</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Gets the list of element points currently selected.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sget_select_elem_pointlist</code> returns the list of 
+        element points in the current dataspace selection.  Starting with 
+        the <code>startpoint</code>-th point in the list of points,
+        <code>numpoints</code> points are put into the user's buffer.
+        If the user's buffer fills up before <code>numpoints</code>
+        points are inserted, the buffer will contain only as many 
+        points as fit.
+        <p>
+        The element point coordinates have the same dimensionality (rank) 
+        as the dataspace they are located within.  The list of element points 
+        is formatted as follows: 
+            <br>&nbsp;&nbsp;&nbsp;&nbsp;
+            &lt;coordinate&gt;, followed by 
+            <br>&nbsp;&nbsp;&nbsp;&nbsp;
+            the next coordinate, 
+            <br>&nbsp;&nbsp;&nbsp;&nbsp;
+            etc. 
+            <br>
+        until all of the selected element points have been listed.
+        <p>
+        The points are returned in the order they will be iterated through
+        when the selection is read/written from/to disk.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em> <code>space_id</code></td>
+          <td valign="top">IN: Dataspace identifier of selection to query.</td></tr>
+        <tr>
+		  <td valign="top"><em>hsize_t&nbsp;</em><code>startpoint&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: Element point to start with.</td></tr>
+        <tr>
+		  <td valign="top"><em>hsize_t </em><code>numpoints</code></td>
+          <td valign="top">IN: Number of element points to get.</td></tr>
+        <tr>
+		  <td valign="top"><em>hsize_t *</em><code>buf</code></td>
+          <td valign="top">OUT: List of element points selected.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sget_select_elem_pointlist_f
+    <dd>
+	<pre>
+SUBROUTINE h5sget_select_elem_pointlist_f(space_id, startpoint, num_points,
+                                          buf, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)   :: space_id   ! Dataspace identifier
+  INTEGER(HSIZE_T), INTENT(IN) :: startpoint ! Element point to start with
+  INTEGER, INTENT(OUT) :: num_points         ! Number of points to get in 
+                                             ! the current element selection
+  INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: buf
+                                             ! List of points selected 
+  INTEGER, INTENT(OUT) :: hdferr             ! Error code
+END SUBROUTINE h5sget_select_elem_pointlist_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sget_select_hyper_blocklist" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-SelectHyperBlockList">H5Sget_select_hyper_blocklist</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Sget_select_hyper_blocklist</code>(<em>hid_t </em><code>space_id</code>,
+        <em>hsize_t </em><code>startblock</code>,
+        <em>hsize_t </em><code>numblocks</code>,
+        <em>hsize_t *</em><code>buf</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Gets the list of hyperslab blocks currently selected.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sget_select_hyper_blocklist</code> returns a list of 
+        the hyperslab blocks currently selected.  Starting with the 
+        <code>startblock</code>-th block in the list of blocks,
+        <code>numblocks</code> blocks are put into the user's buffer.
+        If the user's buffer fills up before <code>numblocks</code>
+        blocks are inserted, the buffer will contain only as many 
+        blocks as fit.
+        <p>
+        The block coordinates have the same dimensionality (rank) 
+        as the dataspace they are located within.  The list of blocks 
+        is formatted as follows: 
+            <br>&nbsp;&nbsp;&nbsp;&nbsp;
+            &lt;"start" coordinate&gt;, immediately followed by 
+            <br>&nbsp;&nbsp;&nbsp;&nbsp;
+            &lt;"opposite" corner coordinate&gt;, followed by 
+            <br>&nbsp;&nbsp;&nbsp;&nbsp;
+            the next "start" and "opposite" coordinates, 
+            <br>&nbsp;&nbsp;&nbsp;&nbsp;
+            etc. 
+            <br>
+        until all of the selected blocks have been listed.
+        <p>
+        No guarantee is implied as the order in which blocks are listed.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em> <code>space_id</code></td>
+          <td valign="top">IN: Dataspace identifier of selection to query.</td></tr>
+        <tr>
+		  <td valign="top"><em>hsize_t&nbsp;</em><code>startblock&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: Hyperslab block to start with.</td></tr>
+        <tr>
+		  <td valign="top"><em>hsize_t </em><code>numblocks</code></td>
+          <td valign="top">IN: Number of hyperslab blocks to get.</td></tr>
+        <tr>
+		  <td valign="top"><em>hsize_t *</em><code>buf</code></td>
+          <td valign="top">OUT: List of hyperslab blocks selected.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sget_select_hyper_blocklist_f
+    <dd>
+	<pre>
+SUBROUTINE h5sget_select_hyper_blocklist_f(space_id, startblock, num_blocks,
+                                           buf, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)   :: space_id   ! Dataspace identifier
+  INTEGER(HSIZE_T), INTENT(IN) :: startblock ! Hyperslab block to start with
+  INTEGER, INTENT(OUT) :: num_blocks         ! Number of hyperslab blocks to 
+                                             ! get in the current hyperslab 
+                                             ! selection
+  INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: buf
+                                             ! List of hyperslab blocks selected
+  INTEGER, INTENT(OUT) :: hdferr             ! Error code
+END SUBROUTINE h5sget_select_hyper_blocklist_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sget_select_hyper_nblocks" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-SelectHyperNBlocks">H5Sget_select_hyper_nblocks</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hssize_t </em><code>H5Sget_select_hyper_nblocks</code>(<em>hid_t </em><code>space_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Get number of hyperslab blocks.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sget_select_hyper_nblocks</code> returns the 
+        number of hyperslab blocks in the current dataspace selection.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: Identifier of dataspace to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the number of hyperslab blocks in 
+        the current dataspace selection if successful.
+        Otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sget_select_hyper_nblocks_f
+    <dd>
+	<pre>
+SUBROUTINE h5sget_select_hyper_nblocks_f(space_id, num_blocks, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
+  INTEGER, INTENT(OUT) :: num_blocks     ! Number of hyperslab blocks in 
+                                         ! the current hyperslab selection
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+END SUBROUTINE h5sget_select_hyper_nblocks_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sget_select_npoints" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-SelectNpoints">H5Sget_select_npoints</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hssize_t</em> <code>H5Sget_select_npoints</code>(<em>hid_t</em> <code>space_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Determines the number of elements in a dataspace selection.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sget_select_npoints</code> determines the number of elements 
+        in the current selection of a dataspace.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">Dataspace identifier.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the number of elements in the selection if successful; 
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sget_select_npoints_f
+    <dd>
+	<pre>
+SUBROUTINE h5sget_select_npoints_f(space_id, npoints, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id     ! Dataspace identifier 
+  INTEGER(HSSIZE_T), INTENT(OUT) :: npoints  ! Number of elements in the
+                                             ! selection 
+  INTEGER, INTENT(OUT) :: hdferr             ! Error code
+                                             ! 0 on success and -1 on failure 
+END SUBROUTINE h5sget_select_npoints_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sget_select_type" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-GetSelectType">H5Sget_select_type</a>
+<dt><strong>Signature:</strong>
+    <dd><em>H5S_sel_type</em> <code>H5Sget_select_type</code>(<em>hid_t</em> <code>space_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Determines the type of the dataspace selection.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sget_select_type</code> retrieves the  
+        type of selection currently defined for the dataspace 
+	<code>space_id</code>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">Dataspace identifier.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the dataspace selection type, a value of       
+        the  enumerated datatype <code>H5S_sel_type</code>, 
+	if successful.
+	Valid return values are as follows:
+        <center>
+        <table width=90% border=0>
+          <tr><td valign=top>
+            <code>H5S_SEL_NONE</code>
+            </td><td valign=top>
+            No selection is defined.
+          </td></tr><tr><td valign=top>
+            <code>H5S_SEL_POINTS</code>
+            </td><td valign=top>
+            A sequence of points is selected.
+          </td></tr><tr><td valign=top>
+            <code>H5S_SEL_HYPERSLABS</code>
+            </td><td valign=top>
+            A hyperslab or compound hyperslab is selected.
+          </td></tr><tr><td valign=top>
+            <code>H5S_SEL_ALL</code>
+            </td><td valign=top>
+            The entire dataset is selected.
+          </td></tr>
+        </table>
+        </center>
+        Otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sget_select_type_f
+    <dd>
+	<pre>
+SUBROUTINE h5sget_select_type_f(space_id, type, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
+  INTEGER, INTENT(OUT) :: type           ! Selection type
+                                         ! Valid values are:
+                                         !    H5S_SEL_ERROR_F 
+                                         !    H5S_SEL_NONE_F 
+                                         !    H5S_SEL_POINTS_F 
+                                         !    H5S_SEL_HYPERSLABS_F 
+                                         !    H5S_SEL_ALL_F 
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+END SUBROUTINE h5sget_select_type_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sget_simple_extent_dims" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-ExtentDims">H5Sget_simple_extent_dims</a>
+<dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Sget_simple_extent_dims</code>(<em>hid_t</em> <code>space_id</code>,
+        <em>hsize_t *</em><code>dims</code>,
+        <em>hsize_t *</em><code>maxdims</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves dataspace dimension size and maximum size.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sget_simple_extent_dims</code> returns the size and maximum sizes 
+        of each dimension of a dataspace through the <code>dims</code> 
+        and <code>maxdims</code> parameters.
+        <p>
+        Either or both of <code>dims</code> and <code>maxdims</code> 
+        may be NULL.
+        <p>
+        If a value in the returned array <code>maxdims</code> is
+        <code>H5S_UNLIMITED</code> (</code>-1</code>), 
+        the maximum size of that dimension is unlimited.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em> <code>space_id</code></td>
+          <td valign="top">IN: Identifier of the dataspace object to query</td></tr>
+        <tr>
+		  <td valign="top"><em>hsize_t *</em><code>dims</code></td>
+          <td valign="top">OUT: Pointer to array to store the size of each dimension.</td></tr>
+        <tr>
+		  <td valign="top"><em>hsize_t&nbsp;*</em><code>maxdims&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">OUT: Pointer to array to store the maximum size of each dimension.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the number of dimensions in the dataspace if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sget_simple_extent_dims_f
+    <dd>
+	<pre>
+SUBROUTINE h5sget_simple_extent_dims_f(space_id, dims, maxdims, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id   ! Dataspace identifier 
+  INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: dims 
+                                           ! Array to store dimension sizes 
+  INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: maxdims 
+                                           ! Array to store max dimension sizes
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code
+                                           ! Dataspace rank on success 
+                                           ! and -1 on failure
+END SUBROUTINE h5sget_simple_extent_dims_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sget_simple_extent_ndims" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-ExtentNdims">H5Sget_simple_extent_ndims</a>
+<dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Sget_simple_extent_ndims</code>(<em>hid_t</em> <code>space_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Determines the dimensionality of a dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sget_simple_extent_ndims</code> determines the dimensionality (or rank) 
+        of a dataspace.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">Identifier of the dataspace</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the number of dimensions in the dataspace if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sget_simple_extent_ndims_f
+    <dd>
+	<pre>
+SUBROUTINE h5sget_simple_extent_ndims_f(space_id, rank, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id   ! Dataspace identifier 
+  INTEGER, INTENT(OUT) :: rank             ! Number of dimensions 
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code
+                                           ! 0 on success and -1 on failure
+END SUBROUTINE h5sget_simple_extent_ndims_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sget_simple_extent_npoints" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-ExtentNpoints">H5Sget_simple_extent_npoints</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hssize_t</em> <code>H5Sget_simple_extent_npoints</code>(<em>hid_t </em><code>space_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Determines the number of elements in a dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sget_simple_extent_npoints</code> determines the number of elements 
+        in a dataspace.  For example, a simple 3-dimensional dataspace 
+        with dimensions 2, 3, and 4 would have 24 elements.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">ID of the dataspace object to query</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the number of elements in the dataspace if successful; 
+        otherwise returns 0.
+<dt><strong>Fortran90 Interface:</strong> h5sget_simple_extent_npoints_f
+    <dd>
+	<pre>
+SUBROUTINE h5sget_simple_extent_npoints_f(space_id, npoints, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id    ! Dataspace identifier 
+  INTEGER(HSIZE_T), INTENT(OUT) :: npoints  ! Number of elements in dataspace
+  INTEGER, INTENT(OUT) :: hdferr            ! Error code
+                                            ! 0 on success and -1 on failure
+END SUBROUTINE h5sget_simple_extent_npoints_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sget_simple_extent_type" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-ExtentType">H5Sget_simple_extent_type</a>
+<dt><strong>Signature:</strong>
+    <dd><em>H5S_class_t</em> <code>H5Sget_simple_extent_type</code>(<em>hid_t</em> <code>space_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Determine the current class of a dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sget_simple_extent_type</code> queries a dataspace to determine the 
+        current class of a dataspace.  
+        <p>
+        The function returns a class name, one of the following: 
+            <code>H5S_SCALAR</code>, 
+            <code>H5S_SIMPLE</code>, or 
+            <code>H5S_NONE</code>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">Dataspace identifier.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a dataspace class name if successful; 
+        otherwise H5S_NO_CLASS (-1).
+<dt><strong>Fortran90 Interface:</strong> h5sget_simple_extent_type_f
+    <dd>
+	<pre>
+SUBROUTINE h5sget_simple_extent_type_f(space_id, classtype, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 
+  INTEGER, INTENT(OUT) :: classtype      ! Class type 
+                                         ! Possible values are: 
+                                         !    H5S_NO_CLASS_F 
+                                         !    H5S_SCALAR_F 
+                                         !    H5S_SIMPLE_F 
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5sget_simple_extent_type_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sis_simple" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-IsSimple">H5Sis_simple</a>
+<dt><strong>Signature:</strong>
+    <dd><em>htri_t </em><code>H5Sis_simple</code>(<em>hid_t </em><code>space_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Determines whether a dataspace is a simple dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sis_simple</code> determines whether a dataspace is 
+        a simple dataspace.  [Currently, all dataspace objects are simple
+        dataspaces, complex dataspace support will be added in the future]
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">Identifier of the dataspace to query</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>When successful, returns a positive value, for <code>TRUE</code>,
+        or <code>0</code> (zero), for <code>FALSE</code>.
+        Otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sis_simple_f
+    <dd>
+	<pre>
+SUBROUTINE h5sis_simple_f(space_id, flag, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id    ! Dataspace identifier 
+  LOGICAL, INTENT(OUT) :: flag              ! Flag, indicates if dataspace
+                                            ! is simple or not: 
+                                            ! TRUE or FALSE  
+  INTEGER, INTENT(OUT) :: hdferr            ! Error code
+                                            ! 0 on success and -1 on failure 
+END SUBROUTINE h5sis_simple_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Soffset_simple" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-OffsetSimple">H5Soffset_simple</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Soffset_simple</code>(<em>hid_t</em> <code>space_id</code>,
+    <em>const hssize_t *</em><code>offset</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Sets the offset of a simple dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Soffset_simple</code> sets the offset of a 
+    simple dataspace <code>space_id</code>.  The <code>offset</code> 
+    array must be the same number of elements as the number of 
+    dimensions for the dataspace.  If the <code>offset</code> 
+    array is set to <TT>NULL</TT>, the offset for the dataspace 
+    is reset to 0.
+    <p>
+    This function allows the same shaped selection to be moved 
+    to different locations within a dataspace without requiring it 
+    to be redefined.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em> <code>space_id</code></td>
+          <td valign="top">IN: The identifier for the dataspace object to reset.</td></tr>
+        <tr>
+		  <td valign="top"><em>const&nbsp;hssize_t&nbsp;*</em><code>offset&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: The offset at which to position the selection.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5soffset_simple_f
+    <dd>
+	<pre>
+SUBROUTINE h5soffset_simple_f(space_id, offset, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id    ! Dataspace identifier 
+  INTEGER(HSSIZE_T), DIMENSION(*), INTENT(IN) ::  offset
+                                            ! The offset at which to position
+                                            ! the selection  
+  INTEGER, INTENT(OUT) :: hdferr            ! Error code
+                                            ! 0 on success and -1 on failure
+END SUBROUTINE h5soffset_simple_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sselect_all" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-SelectAll">H5Sselect_all</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Sselect_all</code>(<em>hid_t</em> <code>space_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Selects the entire dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sselect_all</code> selects the entire extent
+    of the dataspace <code>space_id</code>.
+    <p>
+    More specifically, <code>H5Sselect_all</code> selects 
+    the special <tt>5S_SELECT_ALL</tt> region for the dataspace
+    <code>space_id</code>.  <tt>H5S_SELECT_ALL</tt> selects the
+    entire dataspace for any dataspace it is applied to.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: The identifier for the dataspace in which the 
+                selection is being made.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sselect_all_f
+    <dd>
+	<pre>
+SUBROUTINE h5sselect_all_f(space_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier 
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5sselect_all_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sselect_elements" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-SelectElements">H5Sselect_elements</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Sselect_elements</code>(<em>hid_t </em><code>space_id</code>,
+        <em>H5S_seloper_t</em> <code>op</code>,
+        <em>const size_t</em> <code>num_elements</code>,
+        <em>const hsize_t *</em><code>coord</code>[ ]
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Selects array elements to be included in the selection for a dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sselect_elements</code> selects array elements to be 
+        included in the selection for the <code>space_id</code> dataspace. 
+        <p>
+        The number of elements selected is set in the 
+        <code>num_elements</code> parameter.  
+        <p>
+        The <code>coord</code> array is a two-dimensional array of 
+        size <code><i>dataspace_rank</i></code> by <code>num_elements</code> 
+        containing a list of of zero-based values specifying the 
+        coordinates in the dataset of the selected elements.  
+        The order of the element coordinates in the 
+        <code>coord</code> array specifies the order in which  
+        the array elements are iterated through when I/O is performed.  
+        Duplicate coordinate locations are not checked for.
+        <p>
+        The selection operator <code>op</code> determines how the 
+        new selection is to be combined with the previously existing
+        selection for the dataspace.  
+        The following operators are supported:
+        <center>
+        <table width=90% border=0>
+          <tr><td valign=top>
+            <code>H5S_SELECT_SET</code>
+            </td><td valign=top>
+            Replaces the existing selection with the parameters from 
+            this call.
+            Overlapping blocks are not supported with this operator.
+<!--      </td></tr><tr><td valign=top>
+            <code>H5S_SELECT_OR</code>
+            </td><td valign=top>
+-->         Adds the new selection to the existing selection.
+          </td></tr><tr><td valign=top>
+            <code>H5S_SELECT_APPEND</code>
+            </td><td valign=top>
+            Adds the new selection following the last element of the 
+            existing selection.
+          </td></tr><tr><td valign=top>
+            <code>H5S_SELECT_PREPEND&nbsp;&nbsp;</code>
+            </td><td valign=top>
+            Adds the new selection preceding the first element of the 
+            existing selection.
+          </td></tr>
+        </table>
+        </center>
+<!--    When operator <code>H5S_SELECT_OR</code> 
+        is used to combine a new selection with an existing selection,
+        the selection ordering is reset to C array ordering.
+-->
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em> <code>space_id</code></td>
+          <td valign="top">Identifier of the dataspace.</td></tr>
+        <tr>
+		  <td valign="top"><em>H5S_seloper_t</em> <code>op</code></td>
+          <td valign="top">Operator specifying how the new selection is to be 
+                combined with the existing selection for the dataspace.</td></tr>
+        <tr>
+		  <td valign="top"><em>const&nbsp;size_t</em>&nbsp;<code>num_elements&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">Number of elements to be selected.</td></tr>
+        <tr>
+		  <td valign="top"><em>const hsize_t *</em><code>coord</code>[ ]</td>
+          <td valign="top">A 2-dimensional array of 0-based values specifying the 
+                coordinates of the elements being selected.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful; 
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sselect_elements_f
+    <dd>
+	<pre>
+SUBROUTINE h5sselect_elements_f(space_id, operator, num_elements,
+                                coord, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier 
+  INTEGER, INTENT(IN) :: op               ! Flag, valid values are:
+                                          !    H5S_SELECT_SET_F 
+                                          !    H5S_SELECT_OR_F 
+  INTEGER, INTENT(IN) :: num_elements     ! Number of elements to be selected
+  INTEGER(HSIZE_T), DIMENSION(*,*), INTENT(IN) :: coord 
+                                          ! Array with the coordinates
+                                          ! of the selected elements:
+                                          ! coord(num_elements, rank)</pre>
+<!-- NEW PAGE -->
+<pre>
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5sselect_elements_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top">&nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.4</td>
+          <td valign="top">
+		    <code>coord</code> parameter type changed to 
+			<em>const hsize_t</em>.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">
+		    <code>coord</code> parameter type changed to 
+			<code>INTEGER(HSIZE_T)</code>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sselect_hyperslab" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-SelectHyperslab">H5Sselect_hyperslab</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Sselect_hyperslab</code>(<em>hid_t</em> <code>space_id</code>,
+        <em>H5S_seloper_t</em> <code>op</code>,
+        <em>const hsize_t *</em><code>start</code>,
+        <em>const hsize_t *</em><code>stride</code>,
+        <em>const hsize_t *</em><code>count</code>,
+        <em>const hsize_t *</em><code>block</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Selects a hyperslab region to add to the current selected region.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sselect_hyperslab</code> selects a hyperslab region 
+        to add to the current selected region for the dataspace 
+        specified by <code>space_id</code>.  
+        <p>
+        The <code>start</code>, <code>stride</code>, <code>count</code>,
+        and <code>block</code> arrays must be the same size as the rank 
+        of the dataspace.  
+        <p>
+        The selection operator <code>op</code> determines how the new 
+        selection is to be combined with the already existing selection 
+        for the dataspace.  
+        The following operators are supported:
+        <center>
+        <table width=90% border=0>
+          <tr><td valign=top>
+            <code>H5S_SELECT_SET</code>
+            </td><td valign=top>
+            Replaces the existing selection with the parameters from this call.  
+            Overlapping blocks are not supported with this operator.
+          </td></tr><tr><td valign=top>
+            <code>H5S_SELECT_OR</code>
+            </td><td valign=top>
+            Adds the new selection to the existing selection.
+	    &nbsp;&nbsp;
+	    (Binary OR)
+          </td></tr><tr><td valign=top>
+            <code>H5S_SELECT_AND</code>
+            </td><td valign=top>
+            Retains only the overlapping portions of the new selection and 
+	    the existing selection.
+	    &nbsp;&nbsp;
+	    (Binary AND)
+          </td></tr><tr><td valign=top>
+            <code>H5S_SELECT_XOR</code>
+            </td><td valign=top>
+            Retains only the elements that are members of the new selection or 
+	    the existing selection, excluding elements that are members of 
+	    both selections.
+	    &nbsp;&nbsp;
+	    (Binary exclusive-OR, XOR)
+          </td></tr><tr><td valign=top>
+            <code>H5S_SELECT_NOTB&nbsp;&nbsp;</code>
+            </td><td valign=top>
+            Retains only elements of the existing selection that are not in 
+	    the new selection.
+          </td></tr><tr><td valign=top>
+            <code>H5S_SELECT_NOTA</code>
+            </td><td valign=top>
+            Retains only elements of the new selection that are not in 
+	    the existing selection.
+          </td></tr>
+        </table>
+        </center>
+   
+        <p>
+        The <code>start</code> array determines the starting coordinates 
+        of the hyperslab to select.  
+        <p>
+        The <code>stride</code> array chooses array locations 
+        from the dataspace with each value in the <code>stride</code> 
+        array determining how many elements to move in each dimension.  
+        Setting a value in the <code>stride</code> array to 1 moves to
+        each element in that dimension of the dataspace; setting a value 
+	of <code>2</code> in alocation in the <code>stride</code> array 
+	moves to every other element in that dimension of the dataspace.  
+	In other words, the <code>stride</code> determines the
+        number of elements to move from the <code>start</code> location 
+        in each dimension.
+        Stride values of <code>0</code> are not allowed.  
+	If the <code>stride</code> parameter is <code>NULL</code>,
+        a contiguous hyperslab is selected (as if each value in the 
+        <code>stride</code> array were set to all 1's).  
+        <p>
+        The <code>count</code> array determines how many blocks to
+        select from the dataspace, in each dimension.
+        <p>  
+        The <code>block</code> array determines
+        the size of the element block selected from the dataspace.  
+        If the <code>block</code> parameter is set to <code>NULL</code>, 
+        the block size defaults to a single element in each dimension 
+        (as if the <code>block</code> array were set to all 
+	<code>1</code>'s).
+        <p>
+        For example, in a 2-dimensional dataspace, setting 
+        <code>start</code> to [1,1],
+        <code>stride</code> to [4,4], 
+	<code>count</code> to [3,7], and 
+        <code>block</code> to [2,2] 
+	selects 21 2x2 blocks of array elements starting with 
+	location (1,1) and selecting blocks at locations 
+	(1,1), (5,1), (9,1), (1,5), (5,5), etc.
+        <p>
+        Regions selected with this function call default to C order 
+        iteration when I/O is performed.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em> <code>space_id</code></td>
+          <td valign="top">IN: Identifier of dataspace selection to modify</td></tr>
+        <tr>
+		  <td valign="top"><em>H5S_seloper_t</em> <code>op</code></td>
+          <td valign="top">IN: Operation to perform on current selection.</td></tr>
+        <tr>
+		  <td valign="top"><em>const hsize_t *</em><code>start</code></td>
+          <td valign="top">IN: Offset of start of hyperslab</td></tr>
+        <tr>
+		  <td valign="top"><em>const hsize_t *</em><code>count</code></td>
+          <td valign="top">IN: Number of blocks included in hyperslab.</td></tr>
+        <tr>
+		  <td valign="top"><em>const&nbsp;hsize_t&nbsp;*</em><code>stride&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: Hyperslab stride.</td></tr>
+        <tr>
+		  <td valign="top"><em>const hsize_t *</em><code>block</code></td>
+          <td valign="top">IN: Size of block in hyperslab.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sselect_hyperslab_f
+    <dd>
+	<pre>
+SUBROUTINE h5sselect_hyperslab_f(space_id, operator, start, count,
+                                 hdferr, stride, block) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier 
+  INTEGER, INTENT(IN) :: op               ! Flag, valid values are:
+                                          !    H5S_SELECT_SET_F
+                                          !    H5S_SELECT_OR_F
+  INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: start
+                                          ! Starting coordinates of hyperslab 
+  INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: count 
+                                          ! Number of blocks to select 
+                                          ! from dataspace 
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+  INTEGER(HSIZE_T), DIMENSION(*), OPTIONAL, INTENT(IN) :: stride
+                                          ! Array of how many elements to 
+                                          ! move in each direction
+  INTEGER(HSIZE_T), DIMENSION(*), OPTIONAL, INTENT(IN) :: block 
+                                          ! Size of the element block 
+END SUBROUTINE h5sselect_hyperslab_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top">&nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.4</td>
+          <td valign="top">
+		    <code>start[]</code> parameter type changed to 
+			<em>const hsize_t</em>.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">
+		    <code>start</code> parameter type changed to 
+			<code>INTEGER(HSIZE_T)</code>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sselect_none" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-SelectNone">H5Sselect_none</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Sselect_none</code>(<em>hid_t</em> <code>space_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Resets the selection region to include no elements.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sselect_none</code> resets the selection region 
+    for the dataspace <code>space_id</code> to include no elements.     
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: The identifier for the dataspace in which the 
+                selection is being reset.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sselect_none_f
+    <dd>
+	<pre>
+SUBROUTINE h5sselect_none_f(space_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier 
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5sselect_none_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sselect_valid" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-SelectValid">H5Sselect_valid</a>
+<dt><strong>Signature:</strong>
+    <dd><em>htri_t</em> <code>H5Sselect_valid</code>(<em>hid_t</em> <code>space_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Verifies that the selection is within the extent of the dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sselect_valid</code> verifies that the selection 
+    for the dataspace <code>space_id</code> is within the extent
+    of the dataspace if the current offset for the dataspace is used.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">The identifier for the dataspace being queried.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a positive value, for <code>TRUE</code>, 
+        if the selection is contained within the extent 
+        or <code>0</code> (zero), for <code>FALSE</code>, if it is not.
+        Returns a negative value on error conditions 
+        such as the selection or extent not being defined.
+<dt><strong>Fortran90 Interface:</strong> h5sselect_valid_f
+    <dd>
+	<pre>
+SUBROUTINE h5sselect_valid_f(space_id, flag, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier 
+  LOGICAL, INTENT(OUT) :: flag            ! TRUE if the selection is
+                                          ! contained within the extent,
+                                          ! FALSE otherwise. 
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5sselect_valid_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sset_extent_none" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-SetExtentNone">H5Sset_extent_none</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Sset_extent_none</code>(<em>hid_t</em> <code>space_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Removes the extent from a dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sset_extent_none</code> removes the extent from 
+    a dataspace and sets the type to <tt>H5S_NO_CLASS</tt>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>space_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">The identifier for the dataspace from which
+                the extent is to be removed.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sset_extent_none_f
+    <dd>
+	<pre>
+SUBROUTINE h5sset_extent_none_f(space_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier 
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5sset_extent_none_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Sset_extent_simple" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-SetExtentSimple">H5Sset_extent_simple</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Sset_extent_simple</code>(<em>hid_t</em> <code>space_id</code>,
+        <em>int</em> <code>rank</code>,
+        <em>const hsize_t *</em><code>current_size</code>,
+        <em>const hsize_t *</em><code>maximum_size</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Sets or resets the size of an existing dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sset_extent_simple</code> sets or resets the size of 
+        an existing dataspace.
+        <p>
+        <code>rank</code> is the dimensionality, or number of 
+        dimensions, of the dataspace.
+        <p>
+        <code>current_size</code> is an array of size <code>rank</code> 
+        which contains the new size of each dimension in the dataspace.  
+        <code>maximum_size</code> is an array of size <code>rank</code> 
+        which contains the maximum size of each dimension in the 
+        dataspace. 
+        <p>
+        Any previous extent is removed from the dataspace, the dataspace 
+        type is set to <code>H5S_SIMPLE</code>, and the extent is set as 
+        specified.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em> <code>space_id</code></td>
+          <td valign="top">Dataspace identifier.</td>
+        <tr>
+		  <td valign="top"><em>int</em> <code>rank</code></td>
+          <td valign="top">Rank, or dimensionality, of the dataspace.</td>
+        <tr>
+		  <td valign="top"><em>const&nbsp;hsize_t&nbsp;*</em><code>current_size&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">Array containing current size of dataspace.</td>
+        <tr>
+		  <td valign="top"><em>const hsize_t *</em><code>maximum_size</code></td>
+          <td valign="top">Array containing maximum size of dataspace.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5sset_extent_simple_f
+    <dd>
+	<pre>
+SUBROUTINE h5sset_extent_simple_f(space_id, rank, current_size,
+                                  maximum_size, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: space_id     ! Dataspace identifier 
+  INTEGER, INTENT(IN) :: rank                ! Dataspace rank 
+  INTEGER(HSIZE_T), DIMENSION(rank), INTENT(IN) :: current_size 
+                                             ! Array with the new sizes
+                                             ! of dimensions 
+  INTEGER(HSIZE_T), DIMENSION(rank), INTENT(IN) ::  
+                                             ! Array with the new maximum
+                                             ! sizes of dimensions 
+  INTEGER, INTENT(OUT) :: hdferr             ! Error code
+                                             ! 0 on success and -1 on failure
+END SUBROUTINE h5sset_extent_simple_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+
+<!--		NOT YET IMPLEMENTED (R1.2 -- 9908)
+
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-ExtentClass">H5Sextent_class</a>
+<dt><strong>Signature:</strong>
+    <dd><em>H5S_class_t</em> <code>H5Sextent_class</code>(<em>hid_t</em> <code>space_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Determine the current class of a dataspace.
+<dt><strong>Description:</strong>
+    <dd><code>H5Sextent_class</code> queries a dataspace to determine the 
+        current class of a dataspace.  
+        <p>
+        The function returns a class name, one of the following: 
+            <code>H5S_SCALAR</code>, 
+            <code>H5S_SIMPLE</code>.
+<dt><strong>Parameters:</strong>
+    <dl>
+        <dt><em>hid_t</em> <code>space_id</code>
+            <dd>Dataspace identifier.
+    </dl>
+<dt><strong>Returns:</strong>
+    <dd>Returns a dataspace class name if successful; 
+        otherwise H5S_NO_CLASS (-1).
+<dt><strong>Non-C API(s):</strong>
+    <dd><a href="fortran/h5s_FORTRAN.html#h5sextent_class_f" 
+        target="FortranWin"><img src="Graphics/FORTRAN.gif" border=0></a>
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+</dl>
+
+-->
+
+
+<!--<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-CombineHyperslab">H5Scombine_hyperslab</a>
+
+
+
+
+<dt><strong>Non-C API(s):</strong>
+    <dd><a href="fortran/h5s_FORTRAN.html#h5scombine_hyperslab_f" 
+        target="FortranWin"><img src="Graphics/FORTRAN.gif" border=0></a>
+ -->    <!--
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<!--</dl>
+-->
+
+
+<!--<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-CombineSelect">H5Scombine_select</a>
+
+<dt><strong>Non-C API(s):</strong>
+    <dd><a href="fortran/h5s_FORTRAN.html#h5scombine_select_f" 
+        target="FortranWin"><img src="Graphics/FORTRAN.gif" border=0></a>
+-->     <!--
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<!--</dl>
+-->
+
+
+<!--<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Dataspace-SelectSelect">H5Sselect_select</a>
+
+<dt><strong>Non-C API(s):</strong>
+    <dd><a href="fortran/h5s_FORTRAN.html#h5sselect_select_f" 
+        target="FortranWin"><img src="Graphics/FORTRAN.gif" border=0></a>
+-->     <!--
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<!--</dl>
+-->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 3 October 2005");
+-->
+</SCRIPT> 
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/RM_H5T.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/RM_H5T.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/RM_H5T.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,4247 @@
+<html>
+<head><title>
+HDF5/H5T API Specification
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+<!-- HEADER RIGHT " " -->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>H5T: Datatype Interface</h1>
+</center>
+
+<h2>Datatype Object API Functions</h2>
+
+These functions create and manipulate the datatype which describes elements
+of a dataset.
+
+
+<p>
+<strong>The C Interfaces:</strong>
+
+<table border=0>
+<tr><td valign=top>
+<i>General Datatype Operations</i>
+    <li><a href="#Datatype-Create">H5Tcreate</a>
+    <li><a href="#Datatype-Open">H5Topen</a>
+    <li><a href="#Datatype-Commit">H5Tcommit</a>
+    <li><a href="#Datatype-Committed">H5Tcommitted</a>
+    <li><a href="#Datatype-Copy">H5Tcopy</a>
+    <li><a href="#Datatype-Equal">H5Tequal</a>
+    <li><a href="#Datatype-Lock">H5Tlock</a>
+    <li><a href="#Datatype-GetClass">H5Tget_class</a>
+    <li><a href="#Datatype-GetSize">H5Tget_size</a>
+    <li><a href="#Datatype-GetSuper">H5Tget_super</a>
+    <li><a href="#Datatype-GetNativeType">H5Tget_native_type</a>
+    <li><a href="#Datatype-DetectClass">H5Tdetect_class</a>
+    <li><a href="#Datatype-Close">H5Tclose</a>
+<br><br>
+<i>Conversion Functions</i>
+    <li><a href="#Datatype-Convert">H5Tconvert</a>
+    <li><a href="#Datatype-Find">H5Tfind</a>
+    <li><a href="#Datatype-SetOverflow">H5Tset_overflow</a>
+    <li><a href="#Datatype-GetOverflow">H5Tget_overflow</a>
+    <li><a href="#Datatype-Register">H5Tregister</a>
+    <li><a href="#Datatype-Unregister">H5Tunregister</a>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<i>Atomic Datatype Properties</i>
+  <table><tr><td valign=top>
+    <li><a href="#Datatype-SetSize">H5Tset_size</a>
+    <li><a href="#Datatype-GetOrder">H5Tget_order</a>
+    <li><a href="#Datatype-SetOrder">H5Tset_order</a>
+    <li><a href="#Datatype-GetPrecision">H5Tget_precision</a>
+    <li><a href="#Datatype-SetPrecision">H5Tset_precision</a>
+    <li><a href="#Datatype-GetOffset">H5Tget_offset</a>
+    <li><a href="#Datatype-SetOffset">H5Tset_offset</a>
+    <li><a href="#Datatype-GetPad">H5Tget_pad</a>
+    <li><a href="#Datatype-SetPad">H5Tset_pad</a>
+    <li><a href="#Datatype-GetSign">H5Tget_sign</a>
+    <li><a href="#Datatype-SetSign">H5Tset_sign</a>
+  </td><td valign=top>
+    <li><a href="#Datatype-GetFields">H5Tget_fields</a>
+    <li><a href="#Datatype-SetFields">H5Tset_fields</a>
+    <li><a href="#Datatype-GetEbias">H5Tget_ebias</a>
+    <li><a href="#Datatype-SetEbias">H5Tset_ebias</a>
+    <li><a href="#Datatype-GetNorm">H5Tget_norm</a>
+    <li><a href="#Datatype-SetNorm">H5Tset_norm</a>
+    <li><a href="#Datatype-GetInpad">H5Tget_inpad</a>
+    <li><a href="#Datatype-SetInpad">H5Tset_inpad</a>
+    <li><a href="#Datatype-GetCset">H5Tget_cset</a>
+    <li><a href="#Datatype-SetCset">H5Tset_cset</a>
+    <li><a href="#Datatype-GetStrpad">H5Tget_strpad</a>
+    <li><a href="#Datatype-SetStrpad">H5Tset_strpad</a>
+  </td></tr></table>
+<br>
+<i>Enumeration Datatypes</i>
+    <li><a href="#Datatype-EnumCreate">H5Tenum_create</a>
+    <li><a href="#Datatype-EnumInsert">H5Tenum_insert</a>
+    <li><a href="#Datatype-EnumNameOf">H5Tenum_nameof</a>
+    <li><a href="#Datatype-EnumValueOf">H5Tenum_valueof</a>
+    <li><a href="#Datatype-GetMemberValue">H5Tget_member_value</a>
+    <li><a href="#Datatype-GetNmembers">H5Tget_nmembers</a>
+    <li><a href="#Datatype-GetMemberName">H5Tget_member_name</a>
+    <li><a href="#Datatype-GetMemberIndex">H5Tget_member_index</a>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+<i>Compound Datatype Properties</i>
+    <li><a href="#Datatype-GetNmembers">H5Tget_nmembers</a>
+    <li><a href="#Datatype-GetMemberClass">H5Tget_member_class</a>
+    <li><a href="#Datatype-GetMemberName">H5Tget_member_name</a>
+    <li><a href="#Datatype-GetMemberIndex">H5Tget_member_index</a>
+    <li><a href="#Datatype-GetMemberOffset">H5Tget_member_offset</a>
+    <li><a href="#Datatype-GetMemberType">H5Tget_member_type</a>
+    <li><a href="#Datatype-Insert">H5Tinsert</a>
+    <li><a href="#Datatype-Pack">H5Tpack</a>
+<br><br>
+<i>Array Datatypes</i>
+    <li><a href="#Datatype-ArrayCreate">H5Tarray_create</a>
+    <li><a href="#Datatype-GetArrayNdims">H5Tget_array_ndims</a>
+    <li><a href="#Datatype-GetArrayDims">H5Tget_array_dims</a>
+<br><br>
+<i>Variable-length Datatypes</i>
+    <li><a href="#Datatype-VLCreate">H5Tvlen_create</a>
+    <li><a href="#Datatype-IsVariableString">H5Tis_variable_str</a>
+<br><br>
+<i>Opaque Datatypes</i>
+    <li><a href="#Datatype-SetTag">H5Tset_tag</a>
+    <li><a href="#Datatype-GetTag">H5Tget_tag</a>
+</td></tr>
+</table>
+
+<br>
+
+<!-- NEW PAGE -->
+<i>Alphabetical Listing</i>
+<table border="0" width=100%>
+  <tr>
+    <td valign="top" width=30%>
+      <li><a href="#Datatype-ArrayCreate">H5Tarray_create</a>
+      <li><a href="#Datatype-Close">H5Tclose</a>
+      <li><a href="#Datatype-Commit">H5Tcommit</a>
+      <li><a href="#Datatype-Committed">H5Tcommitted</a>
+      <li><a href="#Datatype-Convert">H5Tconvert</a>
+      <li><a href="#Datatype-Copy">H5Tcopy</a>
+      <li><a href="#Datatype-Create">H5Tcreate</a>
+      <li><a href="#Datatype-DetectClass">H5Tdetect_class</a>
+      <li><a href="#Datatype-EnumCreate">H5Tenum_create</a>
+      <li><a href="#Datatype-EnumInsert">H5Tenum_insert</a>
+      <li><a href="#Datatype-EnumNameOf">H5Tenum_nameof</a>
+      <li><a href="#Datatype-EnumValueOf">H5Tenum_valueof</a>
+      <li><a href="#Datatype-Equal">H5Tequal</a>
+      <li><a href="#Datatype-Find">H5Tfind</a>
+      <li><a href="#Datatype-GetArrayDims">H5Tget_array_dims</a>
+      <li><a href="#Datatype-GetArrayNdims">H5Tget_array_ndims</a>
+      <li><a href="#Datatype-GetClass">H5Tget_class</a>
+      <li><a href="#Datatype-GetCset">H5Tget_cset</a>
+      <li><a href="#Datatype-GetEbias">H5Tget_ebias</a>
+      <li><a href="#Datatype-GetFields">H5Tget_fields</a>
+      <li><a href="#Datatype-GetInpad">H5Tget_inpad</a>    
+    </td>
+    
+    <td width=3%>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top" width=30%>      
+      <li><a href="#Datatype-GetMemberClass">H5Tget_member_class</a>
+      <li><a href="#Datatype-GetMemberIndex">H5Tget_member_index</a>
+      <li><a href="#Datatype-GetMemberName">H5Tget_member_name</a>
+      <li><a href="#Datatype-GetMemberOffset">H5Tget_member_offset</a>
+      <li><a href="#Datatype-GetMemberType">H5Tget_member_type</a>
+      <li><a href="#Datatype-GetMemberValue">H5Tget_member_value</a>
+      <li><a href="#Datatype-GetNativeType">H5Tget_native_type</a>
+      <li><a href="#Datatype-GetNmembers">H5Tget_nmembers</a>
+      <li><a href="#Datatype-GetNorm">H5Tget_norm</a>
+      <li><a href="#Datatype-GetOffset">H5Tget_offset</a>
+      <li><a href="#Datatype-GetOrder">H5Tget_order</a>
+      <li><a href="#Datatype-GetOverflow">H5Tget_overflow</a>
+      <li><a href="#Datatype-GetPad">H5Tget_pad</a>
+      <li><a href="#Datatype-GetPrecision">H5Tget_precision</a>
+      <li><a href="#Datatype-GetSign">H5Tget_sign</a>
+      <li><a href="#Datatype-GetSize">H5Tget_size</a>
+      <li><a href="#Datatype-GetStrpad">H5Tget_strpad</a>
+      <li><a href="#Datatype-GetSuper">H5Tget_super</a>
+      <li><a href="#Datatype-GetTag">H5Tget_tag</a>
+      <li><a href="#Datatype-Insert">H5Tinsert</a>
+      <li><a href="#Datatype-IsVariableString">H5Tis_variable_str</a>
+    </td>
+    
+    <td width=3%>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td>
+    
+    <td valign="top">      
+      <li><a href="#Datatype-Lock">H5Tlock</a>
+      <li><a href="#Datatype-Open">H5Topen</a>
+      <li><a href="#Datatype-Pack">H5Tpack</a>
+      <li><a href="#Datatype-Register">H5Tregister</a>
+      <li><a href="#Datatype-SetCset">H5Tset_cset</a>
+      <li><a href="#Datatype-SetEbias">H5Tset_ebias</a>
+      <li><a href="#Datatype-SetFields">H5Tset_fields</a>
+      <li><a href="#Datatype-SetInpad">H5Tset_inpad</a>
+      <li><a href="#Datatype-SetNorm">H5Tset_norm</a>
+      <li><a href="#Datatype-SetOffset">H5Tset_offset</a>
+      <li><a href="#Datatype-SetOrder">H5Tset_order</a>
+      <li><a href="#Datatype-SetOverflow">H5Tset_overflow</a>
+      <li><a href="#Datatype-SetPad">H5Tset_pad</a>
+      <li><a href="#Datatype-SetPrecision">H5Tset_precision</a>
+      <li><a href="#Datatype-SetSign">H5Tset_sign</a>
+      <li><a href="#Datatype-SetSize">H5Tset_size</a>
+      <li><a href="#Datatype-SetStrpad">H5Tset_strpad</a>
+      <li><a href="#Datatype-SetTag">H5Tset_tag</a>
+      <li><a href="#Datatype-Unregister">H5Tunregister</a>
+      <li><a href="#Datatype-VLCreate">H5Tvlen_create</a>
+    </td>
+  </tr>
+</table>
+
+<br>
+<strong>The FORTRAN90 Interfaces:</strong>
+<br>
+In general, each FORTRAN90 subroutine performs exactly the same task 
+as the corresponding C function.  
+<br>
+
+<table border=0>
+<tr><td valign=top width=32%>
+<i>General Datatype Operations</i>
+    <li><a href="#Datatype-Create">h5tcreate_f</a>
+    <li><a href="#Datatype-Open">h5topen_f</a>
+    <li><a href="#Datatype-Commit">h5tcommit_f</a>
+    <li><a href="#Datatype-Committed">h5tcommitted_f</a>
+    <li><a href="#Datatype-Copy">h5tcopy_f</a>
+    <li><a href="#Datatype-Equal">h5tequal_f</a>
+<!--<li><a href="#Datatype-Lock">h5tlock_f</a>                          -->
+    <li><a href="#Datatype-GetClass">h5tget_class_f</a>
+    <li><a href="#Datatype-GetSize">h5tget_size_f</a>
+    <li><a href="#Datatype-GetSuper">h5tget_super_f</a>
+<!--<li><a href="#Datatype-GetNativeType">h5tget_native_type_f</a>      -->
+<!--<li><a href="#Datatype-DetectClass">h5tdetect_class_f</a>             -->
+    <li><a href="#Datatype-Close">h5tclose_f</a>
+<!--<p>                                                                     -->
+<!--<i>Conversion Functions</i>                                             -->
+<!--<li><a href="#Datatype-Convert">h5tconvert_f</a>                    -->
+<!--<li><a href="#Datatype-Find">h5tfind_f</a>                          -->
+<!--<li><a href="#Datatype-SetOverflow">h5tset_overflow_f</a>           -->
+<!--<li><a href="#Datatype-GetOverflow">h5tget_overflow_f</a>           -->
+<!--<li><a href="#Datatype-Register">h5tregister_f</a>                  -->
+<!--<li><a href="#Datatype-Unregister">h5tunregister_f</a>              -->
+    <br><br>
+    <i>Enumeration Datatypes</i>
+    <li><a href="#Datatype-EnumCreate">h5tenum_create_f</a>
+    <li><a href="#Datatype-EnumInsert">h5tenum_insert_f</a>
+    <li><a href="#Datatype-EnumNameOf">h5tenum_nameof_f</a>
+    <li><a href="#Datatype-EnumValueOf">h5tenum_valueof_f</a>
+    <li><a href="#Datatype-GetMemberValue">h5tget_member_value_f</a>
+    <li><a href="#Datatype-GetNmembers">h5tget_nmembers_f</a>
+    <li><a href="#Datatype-GetMemberName">h5tget_member_name_f</a>
+    <li><a href="#Datatype-GetMemberIndex">h5tget_member_index_f</a>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top width=32%>
+<i>Atomic Datatype Properties</i>
+    <li><a href="#Datatype-SetSize">h5tset_size_f</a>
+    <li><a href="#Datatype-GetOrder">h5tget_order_f</a>
+    <li><a href="#Datatype-SetOrder">h5tset_order_f</a>
+    <li><a href="#Datatype-GetPrecision">h5tget_precision_f</a>
+    <li><a href="#Datatype-SetPrecision">h5tset_precision_f</a>
+    <li><a href="#Datatype-GetOffset">h5tget_offset_f</a>
+    <li><a href="#Datatype-SetOffset">h5tset_offset_f</a>
+<!--  <table><tr><td valign=top>                                            -->
+    <li><a href="#Datatype-GetPad">h5tget_pad_f</a>
+    <li><a href="#Datatype-SetPad">h5tset_pad_f</a>
+    <li><a href="#Datatype-GetSign">h5tget_sign_f</a>
+    <li><a href="#Datatype-SetSign">h5tset_sign_f</a>
+    <li><a href="#Datatype-GetFields">h5tget_fields_f</a>
+    <li><a href="#Datatype-SetFields">h5tset_fields_f</a>
+    <li><a href="#Datatype-GetEbias">h5tget_ebiass_f</a>
+    <li><a href="#Datatype-SetEbias">h5tset_ebiass_f</a>
+<!--  </td><td valign=top>                                                  -->
+    <li><a href="#Datatype-GetNorm">h5tget_norm_f</a>
+    <li><a href="#Datatype-SetNorm">h5tset_norm_f</a>
+    <li><a href="#Datatype-GetInpad">h5tget_inpad_f</a>
+    <li><a href="#Datatype-SetInpad">h5tset_inpad_f</a>
+    <li><a href="#Datatype-GetCset">h5tget_cset_f</a>
+    <li><a href="#Datatype-SetCset">h5tset_cset_f</a>
+    <li><a href="#Datatype-GetStrpad">h5tget_strpad_f</a>
+    <li><a href="#Datatype-SetStrpad">h5tset_strpad_f</a>
+<!--  </td></tr></table>                                                    -->
+<!--<p>                                                                     -->
+<!--<i>Variable-length Datatypes</i>                                        -->
+<!--<li><a href="#Datatype-VLCreate">h5tvlen_create_f</a>               -->
+    </td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top width=32%>
+    <i>Array Datatypes</i>
+    <li><a href="#Datatype-ArrayCreate">h5tarray_create_f</a>   
+    <li><a href="#Datatype-GetArrayNdims">h5tget_array_ndims_f</a>  
+    <li><a href="#Datatype-GetArrayDims">h5tget_array_dims_f</a>  
+    <br><br>     
+    <i>Compound Datatype Properties</i>
+    <li><a href="#Datatype-GetNmembers">h5tget_nmembers_f</a>
+    <li><a href="#Datatype-GetMemberClass">h5tget_member_class_f</a>
+    <li><a href="#Datatype-GetMemberName">h5tget_member_name_f</a>
+    <li><a href="#Datatype-GetMemberIndex">h5tget_member_index_f</a>
+    <li><a href="#Datatype-GetMemberOffset">h5tget_member_offset_f</a>
+<!--<li><a href="#Datatype-GetMemberDims">h5tget_member_dims_f</a>          -->
+    <li><a href="#Datatype-GetMemberType">h5tget_member_type_f</a>
+    <li><a href="#Datatype-Insert">h5tinsert_f</a>
+    <li><a href="#Datatype-Pack">h5tpack_f</a>
+<!--<li><a href="#Datatype-InsertArray">h5tinsert_array_f</a>               -->
+    <br><br>
+    <i>Variable-length Datatypes</i>
+    <li><a href="#Datatype-VLCreate">h5tvlen_create_f</a>
+    <li><a href="#Datatype-IsVariableString">h5tis_variable_str_f</a>
+    <br><br>
+    <i>Opaque Datatypes</i>
+    <li><a href="#Datatype-SetTag">h5tset_tag_f</a>
+    <li><a href="#Datatype-GetTag">h5tget_tag_f</a>
+</td></tr>
+</table>
+
+
+<p>
+The Datatype interface, H5T, provides a mechanism to describe the
+      storage format of individual data points of a data set and is
+      hopefully designed in such a way as to allow new features to be
+      easily added without disrupting applications that use the data
+      type interface.  A dataset (the H5D interface) is composed of a
+      collection or raw data points of homogeneous type organized
+      according to the data space (the H5S interface).
+
+<p>
+A datatype is a collection of datatype properties, all of
+      which can be stored on disk, and which when taken as a whole,
+      provide complete information for data conversion to or from that
+      datatype.  The interface provides functions to set and query
+      properties of a datatype.
+      
+<p>
+A <em>data point</em> is an instance of a <em>datatype</em>,
+      which is an instance of a <em>type class</em>.  We have defined
+      a set of type classes and properties which can be extended at a
+      later time.  The atomic type classes are those which describe
+      types which cannot be decomposed at the datatype interface
+      level; all other classes are compound.
+
+<p>
+See <a href="Datatypes.html"><cite>The Datatype Interface (H5T)</cite></a>
+in the <cite>HDF5 User's Guide</cite> for further information, including a complete list of all supported datatypes.
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT " " -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tarray_create" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-ArrayCreate">H5Tarray_create</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Tarray_create</code>(
+                       <em>hid_t</em> <code>base</code>,
+                       <em>int</em> <code>rank</code>,
+                       <em>const hsize_t</em> <code>dims[/*rank*/]</code>,
+                       <em>const int</em> <code>perm[/*rank*/]</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Creates an array datatype object.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tarray_create</code> creates a new array datatype object.
+         <p>
+         <code>base</code> is the datatype of every element of the array, 
+         i.e., of the number at each position in the array.
+         <p>
+         <code>rank</code> is the number of dimensions and the 
+         size of each dimension is specified in the array <code>dims</code>.
+         The value of <code>rank</code> is currently limited to
+         <code>H5S_MAX_RANK</code> and must be greater than <code>0</code> 
+         (zero).
+         All dimension sizes specified in <code>dims</code> must be greater
+         than <code>0</code> (zero).
+         <p>
+         The array <code>perm</code> is designed to contain the dimension 
+         permutation, i.e. C versus FORTRAN array order.  
+         &nbsp;
+         <b><i>(The parameter </i><code>perm</code><i> is currently unused and is not yet implemented.)</i></b>
+         
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>base</code></td>
+            <td valign="top">IN: Datatype identifier for the array base datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>int</em> <code>rank</code></td>
+            <td valign="top">IN: Rank of the array.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;hsize_t</em>&nbsp;<code>dims[/*rank*/]&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Size of each array dimension.</td></tr>
+        <tr>
+		    <td valign="top"><em>const int</em> <code>perm[/*rank*/]</code></td>
+            <td valign="top">IN: Dimension permutation.  
+                &nbsp;
+                <b><i>(Currently not implemented.)</i></b></td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tarray_create_f
+    <dd>
+	<pre>
+SUBROUTINE h5tarray_create_f(base_id, rank, dims, type_id, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: base_id   ! Identifier of array base datatype
+  INTEGER, INTENT(IN)        ::  rank     ! Rank of the array
+  INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims 
+                                          ! Sizes of each array dimension
+  INTEGER(HID_T), INTENT(OUT) :: type_id  ! Identifier of the array datatype
+  INTEGER, INTENT(OUT)        :: hdferr   ! Error code
+END SUBROUTINE h5tarray_create_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tclose" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-Close">H5Tclose</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tclose</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Releases a datatype.  
+<dt><strong>Description:</strong>
+    <dd><code>H5Tclose</code> releases a datatype.  Further access 
+        through the datatype identifier is illegal.  Failure to release 
+        a datatype with this call will result in resource leaks.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">Identifier of datatype to release.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tclose_f
+    <dd>
+	<pre>
+SUBROUTINE h5tclose_f(type_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5tclose_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tcommit" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-Commit">H5Tcommit</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em><code>H5Tcommit</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>const char *</em> <code>name</code>,
+        <em>hid_t</em> <code>type</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Commits a transient datatype to a file, creating a new named datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tcommit</code> commits a transient datatype 
+        (not immutable) to a file, turned it into a named datatype.  
+        The <code>loc_id</code> is either a file or group identifier  
+        which, when combined with <code>name</code>, refers to a new 
+        named datatype.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		  <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+          <td valign="top">IN: A file or group identifier.</td></tr>
+        <tr>
+		  <td valign="top"><em>const&nbsp;char&nbsp;*</em>&nbsp;<code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td valign="top">IN: A datatype name.</td></tr>
+        <tr>
+		  <td valign="top"><em>hid_t</em> <code>type</code></td>
+          <td valign="top">IN: A datatype identifier.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tcommit_f
+    <dd>
+	<pre>
+SUBROUTINE h5tcommit_f(loc_id, name, type_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: loc_id  ! File or group identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name  ! Datatype name within file or group
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5tcommit_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tcommitted" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-Committed">H5Tcommitted</a>
+<dt><strong>Signature:</strong>
+    <dd><em>htri_t</em><code>H5Tcommitted</code>(<em>hid_t</em> <code>type</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Determines whether a datatype is a named type or a transient type.  
+<dt><strong>Description:</strong>
+    <dd><code>H5Tcommitted</code> queries a type to determine whether 
+        the type specified by the <code>type</code> identifier 
+        is a named type or a transient type.  If this function returns 
+        a positive value, then the type is named (that is, it has been 
+        committed, perhaps by some other application).  Datasets which
+        return committed datatypes with <code>H5Dget_type()</code> are 
+        able to share the datatype with other datasets in the same file.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Datatype identifier.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>When successful, returns a positive value, for <code>TRUE</code>, 
+        if the datatype has been committed, or <code>0</code> (zero), 
+        for <code>FALSE</code>, if the datatype has not been committed.
+        Otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tcommitted_f
+    <dd>
+	<pre>
+SUBROUTINE h5tcommitted_f(type_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tcommitted_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tconvert" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-Convert">H5Tconvert</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Tconvert</code>(<em>hid_t</em> <code>src_id</code>,
+        <em>hid_t</em> <code>dst_id</code>,
+        <em>size_t</em> <code>nelmts</code>,
+        <em>void *</em><code>buf</code>,
+        <em>void *</em><code>background</code>,
+        <em>hid_t</em> <code>plist_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Converts data from between specified datatypes.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tconvert</code> converts <code>nelmts</code> elements 
+        from the type specified by the <code>src_id</code> identifier 
+        to type <code>dst_id</code>.  
+        The source elements are packed in <code>buf</code> and on return 
+        the destination will be packed in <code>buf</code>.  
+        That is, the conversion is performed in place.  
+        The optional background buffer is an array of <code>nelmts</code> 
+        values of destination type which are merged with the converted 
+        values to fill in cracks (for instance, <code>background</code> 
+        might be an array of structs with the <code>a</code> and 
+        <code>b</code> fields already initialized and the conversion  
+        of <code>buf</code> supplies the <code>c</code> and <code>d</code> 
+        field values).
+        <p>
+        The parameter <code>plist_id</code> contains the dataset transfer 
+        property list identifier which is passed to the conversion functions.  
+        As of Release 1.2, this parameter is only used to pass along the 
+        variable-length datatype custom allocation information.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>src_id</code></td>
+            <td valign="top">Identifier for the source datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dst_id</code></td>
+            <td valign="top">Identifier for the destination datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>nelmts</code></td>
+            <td valign="top">Size of array <code>buf</code>.</td></tr>
+        <tr>
+		    <td valign="top"><em>void *</em><code>buf</code></td>
+            <td valign="top">Array containing pre- and post-conversion values.</td></tr>
+        <tr>
+		    <td valign="top"><em>void&nbsp;*</em><code>background&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Optional background buffer.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>plist_id</code></td>
+            <td valign="top">Dataset transfer property list identifier.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.3</td>
+          <td valign="top">
+			<code>nelmts</code> parameter type changed to 
+			<em>size_t</em>.</td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+			<code>nelmts</code> parameter type changed to 
+			<em>hsize_t</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tcopy" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-Copy">H5Tcopy</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Tcopy</code>(<em>hid_t </em><code>type_id</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Copies an existing datatype.  
+<dt><strong>Description:</strong>
+    <dd><code>H5Tcopy</code> copies an existing datatype.  
+        The returned type is always transient and unlocked.  
+        <p>
+        The <code>type_id</code> argument can be either a datatype
+        identifier, a predefined datatype (defined in 
+        <code>H5Tpublic.h</code>), or a dataset identifier.
+        If <code>type_id</code> is a dataset identifier instead of a 
+        datatype identifier, then this function returns a transient, 
+        modifiable datatype which is a copy of the dataset's datatype.
+        <p>
+        The datatype identifier returned should be released with 
+        <code>H5Tclose</code> or resource leaks will occur.  
+<!--
+        <p>
+        Native datatypes supported by the library are:
+        <ul> <dl>
+            <dt>H5T_NATIVE_CHAR
+                <dd> Native character type, declare dataset array as 'char'
+            <dt>H5T_NATIVE_UCHAR
+                <dd> Native unsigned character type, declare dataset array as 'unsigned char'
+            <dt>H5T_NATIVE_SHORT
+                <dd> Native short type, declare dataset array as 'short'
+            <dt>H5T_NATIVE_USHORT
+                <dd> Native unsigned short type, declare dataset array as 'unsigned short'
+            <dt>H5T_NATIVE_INT
+                <dd> Native int type, declare dataset array as 'int'
+            <dt>H5T_NATIVE_UINT
+                <dd> Native unsigned int type, declare dataset array as 'unsigned int'
+            <dt>H5T_NATIVE_LONG
+                <dd> Native long type, declare dataset array as 'unsigned long'
+            <dt>H5T_NATIVE_ULONG
+                <dd> Native unsigned long type, declare dataset array as 'unsigned long'
+            <dt>H5T_NATIVE_LLONG
+                <dd> Native long long type, declare dataset array as 'unsigned long long'
+            <dt>H5T_NATIVE_ULLONG
+                <dd> Native unsigned long long type, declare dataset array as 'unsigned long long'
+            <dt>H5T_NATIVE_INT8
+                <dd> Native signed 8-bit type, declare dataset array as 'int8'
+            <dt>H5T_NATIVE_UINT8
+                <dd> Native unsigned 8-bit type, declare dataset array as 'uint8'
+            <dt>H5T_NATIVE_INT16
+                <dd> Native signed 16-bit type, declare dataset array as 'int16'
+            <dt>H5T_NATIVE_UINT16
+                <dd> Native unsigned 16-bit type, declare dataset array as 'uint16'
+            <dt>H5T_NATIVE_INT32
+                <dd> Native signed 32-bit type, declare dataset array as 'int32'
+            <dt>H5T_NATIVE_UINT32
+                <dd> Native unsigned 32-bit type, declare dataset array as 'uint32'
+            <dt>H5T_NATIVE_INT64
+                <dd> Native signed 64-bit type, declare dataset array as 'uint64'
+            <dt>H5T_NATIVE_UINT64
+                <dd> Native unsigned 64-bit type, declare dataset array as 'uint64'
+            <dt>H5T_NATIVE_FLOAT
+                <dd> Native single-precision float type, declare dataset array as 'float'
+            <dt>H5T_NATIVE_DOUBLE
+                <dd> Native double-precision float type, declare dataset array as 'double'
+            <dt>H5T_NATIVE_HSIZE
+                <dd> Native size_t type, declare dataset array as 'hsize_t'
+            <dt>H5T_NATIVE_HSSIZE
+                <dd> Native signed size_t type, declare dataset array as 'hssize_t'
+            <dt>H5T_NATIVE_HERR
+                <dd> Native error type, declare dataset array as 'herr_t'
+            <dt>H5T_NATIVE_HBOOL
+                <dd> Native boolean type, declare dataset array as 'hbool_t'
+        </dl> </ul>
+-->
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to copy.  Can be a datatype
+                identifier, a predefined datatype (defined in 
+                <code>H5Tpublic.h</code>), or a dataset identifier.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a datatype identifier if successful;
+        otherwise returns a negative value
+<dt><strong>Fortran90 Interface:</strong> h5tcopy_f
+    <dd>
+	<pre>
+SUBROUTINE h5tcopy_f(type_id, new_type_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id      ! Datatype identifier 
+  INTEGER(HID_T), INTENT(OUT) :: new_type_id ! Identifier of datatype's copy 
+  INTEGER, INTENT(OUT) :: hdferr             ! Error code
+                                             ! 0 on success and -1 on failure
+END SUBROUTINE h5tcopy_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tcreate" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-Create">H5Tcreate</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Tcreate</code>(<em>H5T_class_t </em><code>class</code>,
+        <em>size_t</em><code>size</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Creates a new datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tcreate</code> creates a new datatype of the specified 
+        class with the specified number of bytes.  
+        <p>
+        The following datatype classes are supported with this function:
+        <ul>
+            <li><code>H5T_COMPOUND</code> 
+            <li><code>H5T_OPAQUE</code> 
+            <li><code>H5T_ENUM</code> 
+        </ul>
+        <p>
+        Use <code>H5Tcopy</code> to create integer or floating-point datatypes. 
+        <p>
+        The datatype identifier returned from this function should be 
+        released with <code>H5Tclose</code> or resource leaks will result.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>H5T_class_t</em>&nbsp;<code>class&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Class of datatype to create.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>size</code></td>
+            <td valign="top">The number of bytes in the datatype to create.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns datatype identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tcreate_f
+    <dd>
+	<pre>
+SUBROUTINE h5tcreate_f(class, size, type_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER, INTENT(IN) :: class             ! Datatype class can be one of
+                                           !    H5T_COMPOUND_F (6)
+                                           !    H5T_ENUM_F     (8)
+                                           !    H5T_OPAQUE_F   (9)
+  INTEGER(SIZE_T), INTENT(IN) :: size      ! Size of the datatype
+  INTEGER(HID_T), INTENT(OUT) :: type_id   ! Datatype identifier
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code
+END SUBROUTINE h5tcreate_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tdetect_class" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-DetectClass">H5Tdetect_class</a>
+<dt><strong>Signature:</strong>
+    <dd><em>htri_t </em><code>H5Tdetect_class</code>(<em>hid_t</em> <code>dtype_id</code>,
+        <em>H5T_class_t</em><code>dtype_class</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Determines whether a datatype contains any datatypes of the 
+        given datatype class.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tdetect_class</code> determines whether the datatype 
+        specified in <code>dtype_id</code> contains any datatypes of the 
+        datatype class specified in <code>dtype_class</code>.
+        <p>
+        This function is useful primarily in recursively examining 
+        all the fields and/or base types 
+        of compound, array, and variable-length datatypes.
+        <p>
+        Valid class identifiers are as defined in 
+	<a href="#Datatype-GetClass"><code>H5Tget_class</code></a>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dtype_id</code></td>
+            <td valign="top">Datatype identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5T_class_t</em>&nbsp;<code>dtype_class&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Datatype class.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns <code>TRUE</code> or <code>FALSE</code> if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tenum_create" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-EnumCreate">H5Tenum_create</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Tenum_create</code>(<em>hid_t</em> <code>parent_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Creates a new enumeration datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tenum_create</code> creates a new enumeration datatype 
+        based on the specified base datatype, <code>parent_id</code>, 
+        which must be an integer type.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>parent_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Datatype identifier for the base datatype.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the datatype identifier for the new enumeration datatype if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tenum_create_f
+    <dd>
+	<pre>
+SUBROUTINE h5tenum_create_f(parent_id, new_type_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: parent_id     ! Datatype identifier for
+                                              ! the  base datatype
+  INTEGER(HID_T), INTENT(OUT) :: new_type_id  ! Datatype identifier for the
+                                              ! new enumeration datatype    
+  INTEGER, INTENT(OUT) :: hdferr              ! Error code
+END SUBROUTINE h5tenum_create_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tenum_insert" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-EnumInsert">H5Tenum_insert</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Tenum_insert</code>(<em>hid_t</em> <code>type</code>,
+        <em>const char</em> *<code>name</code>,
+        <em>void</em> *<code>value</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Inserts a new enumeration datatype member.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tenum_insert</code> inserts a 
+        new enumeration datatype member into an enumeration datatype. 
+        <p>
+        <code>type</code> is the enumeration datatype, 
+        <code>name</code> is the name of the new member, and 
+        <code>value</code> points to the value of the new member.
+        <p>
+        <code>name</code> and <code>value</code> must both 
+        be unique within <code>type</code>. 
+        <p>
+        <code>value</code> points to data which is of the 
+        datatype defined when the enumeration datatype was created.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type</code></td>
+            <td valign="top">IN: Datatype identifier for the enumeration datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char</em>&nbsp;*<code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Name of the new member.</td></tr>
+        <tr>
+		    <td valign="top"><em>void</em> *<code>value</code></td>
+            <td valign="top">IN: Pointer to the value of the new member.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tenum_insert_f
+    <dd>
+	<pre>
+SUBROUTINE h5tenum_insert_f(type_id,  name, value, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of the new member
+  INTEGER, INTENT(IN) :: value          ! Value of the new member
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tenum_insert_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tenum_nameof" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-EnumNameOf">H5Tenum_nameof</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Tenum_nameof</code>(<em>hid_t</em> <code>type</code>
+        <em>void</em> *<code>value</code>,
+        <em>char</em> *<code>name</code>,
+        <em>size_t</em> <code>size</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns the symbol name corresponding to a specified member of an enumeration datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tenum_nameof</code> finds the symbol name that 
+        corresponds to the specified <code>value</code>
+        of the enumeration datatype <code>type</code>. 
+        <p>
+        At most <code>size</code> characters of the symbol 
+        name are copied into the <code>name</code> buffer. 
+        If the entire symbol name and null terminator 
+        do not fit in the <code>name</code> buffer, then as 
+        many characters as possible are copied 
+        (not null terminated) and the function fails.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type</code></td>
+            <td valign="top">IN: Enumeration datatype identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>void</em>&nbsp;*<code>value,&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Value of the enumeration datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>char</em> *<code>name</code>,</td>
+            <td valign="top">OUT: Buffer for output of the symbol name.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>size</code></td>
+            <td valign="top">IN: Anticipated size of the symbol name, in bytes (characters).</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful.
+        Otherwise returns a negative value 
+        and, if <code>size</code> allows it, 
+        the first character of <code>name</code> is 
+        set to <code>NULL</code>.
+<dt><strong>Fortran90 Interface:</strong> h5tenum_nameof_f
+    <dd>
+	<pre>
+SUBROUTINE h5tenum_nameof_f(type_id,  name, namelen, value, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier 
+  CHARACTER(LEN=*), INTENT(OUT) :: name  ! Name of the  enumeration datatype
+  INTEGER(SIZE_T), INTENT(IN) :: namelen ! Length of the name
+  INTEGER, INTENT(IN) :: value           ! Value of the  enumeration datatype
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+END SUBROUTINE h5tenum_nameof_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tenum_valueof" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-EnumValueOf">H5Tenum_valueof</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Tenum_valueof</code>(<em>hid_t</em> <code>type</code>
+        <em>char</em> *<code>name</code>,
+        <em>void</em> *<code>value</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns the value corresponding to a specified member of an enumeration datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tenum_valueof</code> finds the value that
+        corresponds to the specified <code>name</code>
+        of the enumeration datatype <code>type</code>. 
+        <p>
+        The <code>value</code> argument should be at least
+        as large as the value of <code>H5Tget_size(type)</code>
+        in order to hold the result.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type</code></td>
+            <td valign="top">IN: Enumeration datatype identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char</em>&nbsp;*<code>name,&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Symbol name of the enumeration datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>void</em> *<code>value</code>,</td>
+            <td valign="top">OUT: Buffer for output of the value of the enumeration datatype.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tenum_valueof_f
+    <dd>
+	<pre>
+SUBROUTINE h5tenum_valueof_f(type_id,  name, value, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of the enumeration datatype
+  INTEGER, INTENT(OUT) :: value         ! Value of the enumeration datatype
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tenum_valueof_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tequal" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-Equal">H5Tequal</a>
+<dt><strong>Signature:</strong>
+    <dd><em>htri_t </em><code>H5Tequal</code>(<em>hid_t </em><code>type_id1</code>,
+        <em>hid_t</em><code>type_id2</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Determines whether two datatype identifiers refer to the same datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tequal</code> determines whether two datatype identifiers 
+        refer to the same datatype.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id1&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to compare.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id2</code></td>
+            <td valign="top">Identifier of datatype to compare.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>When successful, returns a positive value, for <code>TRUE</code>, 
+        if the datatype identifiers refer to the same datatype, 
+        or <code>0</code> (zero), for <code>FALSE</code>.
+        Otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tequal_f
+    <dd>
+	<pre>
+SUBROUTINE h5tequal_f(type1_id, type2_id, flag, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type1_id ! Datatype identifier 
+  INTEGER(HID_T), INTENT(IN) :: type2_id ! Datatype identifier 
+  LOGICAL, INTENT(OUT) :: flag           ! TRUE/FALSE flag to indicate 
+                                         ! if two datatypes are equal
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+END SUBROUTINE h5tequal_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tfind" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-Find">H5Tfind</a>
+<dt><strong>Signature:</strong>
+    <dd><em>H5T_conv_t</em> <code>H5Tfind</code>(<em>hid_t</em> <code>src_id</code>,
+        <em>hid_t</em> <code>dst_id</code>,
+        <em>H5T_cdata_t **</em><code>pcdata</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Finds a conversion function.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tfind</code> finds a conversion function that can 
+        handle a conversion from type <code>src_id</code> to type 
+        <code>dst_id</code>.
+        The <code>pcdata</code> argument is a pointer to a pointer 
+        to type conversion data which was created and initialized 
+        by the soft type conversion function of this path when the 
+        conversion function was installed on the path.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>src_id</code></td>
+            <td valign="top">IN: Identifier for the source datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dst_id</code></td>
+            <td valign="top">IN: Identifier for the destination datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5T_cdata_t&nbsp;**</em><code>pcdata&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Pointer to type conversion data.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a pointer to a suitable conversion function if successful.
+        Otherwise returns NULL.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_array_dims" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetArrayDims">H5Tget_array_dims</a>
+<dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Tget_array_dims</code>(
+                       <em>hid_t</em> <code>adtype_id</code>,
+                       <em>hsize_t *</em><code>dims[]</code>,
+                       <em>int *</em><code>perm[]</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves sizes of array dimensions and dimension permutations.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_array_dims</code> returns the sizes of the dimensions
+        and the dimension permutations of the specified array datatype object.
+        <p>
+        The sizes of the dimensions are returned in the array <code>dims</code>.
+        The dimension permutations, i.e., C versus FORTRAN array order,
+        are returned in the array <code>perm</code>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>adtype_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Datatype identifier of array object.</td></tr>
+        <tr>
+		    <td valign="top"><em>hsize_t *</em><code>dims[]</code></td>
+            <td valign="top">OUT: Sizes of array dimensions.</td></tr>
+        <tr>
+		    <td valign="top"><em>int *</em><code>perm[]</code></td>
+            <td valign="top">OUT: Dimension permutations.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the non-negative number of dimensions of the array type if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tget_array_dims_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_array_dims_f(type_id, dims, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id      ! Identifier of the array datatype
+  INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) ::  dims 
+                                             ! Buffer to store array datatype
+  INTEGER, INTENT(OUT)  :: hdferr            ! Error code
+END SUBROUTINE h5tget_array_dims_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_array_ndims" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetArrayNdims">H5Tget_array_ndims</a>
+<dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Tget_array_ndims</code>(
+                       <em>hid_t</em> <code>adtype_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns the rank of an array datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_array_ndims</code> returns the rank, 
+        the number of dimensions, of an array datatype object.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>adtype_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Datatype identifier of array object.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the rank of the array if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tget_array_ndims_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_array_ndims_f(type_id, ndims, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id  ! Identifier of the array datatype
+  INTEGER, INTENT(OUT)       ::  ndims   ! Number of array dimensions
+  INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+END SUBROUTINE h5tget_array_ndims_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.4.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_class" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetClass">H5Tget_class</a>
+<dt><strong>Signature:</strong>
+    <dd><em>H5T_class_t </em><code>H5Tget_class</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns the datatype class identifier.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_class</code> returns the datatype class identifier.
+        <p>
+        Valid class identifiers, as defined in <code>H5Tpublic.h</code>, are:
+        <ul><li><code>H5T_INTEGER</code>
+            <li><code>H5T_FLOAT</code>
+            <li><code>H5T_TIME</code>
+            <li><code>H5T_STRING</code>
+            <li><code>H5T_BITFIELD</code>
+            <li><code>H5T_OPAQUE</code>
+            <li><code>H5T_COMPOUND</code>
+            <li><code>H5T_REFERENCE</code>
+            <li><code>H5T_ENUM</code>
+            <li><code>H5T_VLEN</code>
+            <li><code>H5T_ARRAY</code>
+        </ul>
+        <p>
+        Note that the library returns <code>H5T_STRING</code> for 
+        both fixed-length and variable-length strings.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+            <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns datatype class identifier if successful;
+        otherwise <code>H5T_NO_CLASS</code> (-1).
+<dt><strong>Fortran90 Interface:</strong> h5tget_class_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_class_f(type_id, class, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: class          ! Datatype class, possible values are:
+                                         !    H5T_NO_CLASS_F 
+                                         !    H5T_INTEGER_F 
+                                         !    H5T_FLOAT_F
+                                         !    H5T_TIME_F
+                                         !    H5T_STRING_F
+                                         !    H5T_BITFIELD_F
+                                         !    H5T_OPAQUE_F
+                                         !    H5T_COMPOUND_F
+                                         !    H5T_REFERENCE_F
+                                         !    H5T_ENUM_F
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5tget_class_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_cset" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetCset">H5Tget_cset</a>
+<dt><strong>Signature:</strong>
+    <dd><em>H5T_cset_t </em><code>H5Tget_cset</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the character set type of a string datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_cset</code> retrieves the character set type 
+        of a string datatype.  Valid character set types are:
+        <dl><ul>
+            <dt>H5T_CSET_ASCII (<code>0</code>)
+               <dd>Character set is US ASCII
+        </ul></dl>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a valid character set type if successful;
+        otherwise <code>H5T_CSET_ERROR</code> (-1).
+<dt><strong>Fortran90 Interface:</strong> h5tget_cset_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_cset_f(type_id, cset, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: cset          ! Character set type of a string 
+                                        ! datatype 
+                                        ! Possible values of padding type are:
+                                        !    H5T_CSET_ASCII_F = 0
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tget_cset_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_ebias" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetEbias">H5Tget_ebias</a>
+<dt><strong>Signature:</strong>
+    <dd><em>size_t </em><code>H5Tget_ebias</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the exponent bias of a floating-point type.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_ebias</code> retrieves the exponent bias of a floating-point type.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the bias if successful;
+        otherwise 0.
+<dt><strong>Fortran90 Interface:</strong> h5tget_ebias_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_ebias_f(type_id, ebias, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: ebias         ! Datatype exponent bias 
+                                        ! of a floating-point type
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tget_ebias_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_fields" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetFields">H5Tget_fields</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tget_fields</code>(<em>hid_t </em><code>type_id</code>,
+        <em>size_t *</em><code>spos</code>,
+        <em>size_t *</em><code>epos</code>,
+        <em>size_t *</em><code>esize</code>,
+        <em>size_t *</em><code>mpos</code>,
+        <em>size_t *</em><code>msize</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves floating point datatype bit field information.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_fields</code> retrieves information about the locations of the various
+        bit fields of a floating point datatype.  The field positions are bit
+        positions in the significant region of the datatype.  Bits are
+        numbered with the least significant bit number zero.
+        Any (or even all) of the arguments can be null pointers.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of datatype to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t *</em><code>spos</code></td>
+            <td valign="top">OUT: Pointer to location to return floating-point sign bit.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t *</em><code>epos</code></td>
+            <td valign="top">OUT: Pointer to location to return exponent bit-position.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t *</em><code>esize</code></td>
+            <td valign="top">OUT: Pointer to location to return size of exponent in bits.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t *</em><code>mpos</code></td>
+            <td valign="top">OUT: Pointer to location to return mantissa bit-position.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t *</em><code>msize</code></td>
+            <td valign="top">OUT: Pointer to location to return size of mantissa in bits.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tget_fields_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_fields_f(type_id, epos, esize, mpos, msize, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: epos          ! Exponent bit-position 
+  INTEGER, INTENT(OUT) :: esize         ! Size of exponent in bits
+  INTEGER, INTENT(OUT) :: mpos          ! Mantissa bit-position 
+  INTEGER, INTENT(OUT) :: msize         ! Size of mantissa in bits
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tget_fields_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_inpad" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetInpad">H5Tget_inpad</a>
+<dt><strong>Signature:</strong>
+    <dd><em>H5T_pad_t </em><code>H5Tget_inpad</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the internal padding type for unused bits in floating-point datatypes.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_inpad</code> retrieves the internal padding type for 
+        unused bits in floating-point datatypes.
+        Valid padding types are:
+        <ul> <dl>
+            <dt>H5T_PAD_ZERO (<code>0</code>)
+               <dd>Set background to zeros.
+            <dt>H5T_PAD_ONE (<code>1</code>)
+               <dd>Set background to ones.
+            <dt>H5T_PAD_BACKGROUND (<code>2</code>)
+               <dd>Leave background alone.
+        </dl> </ul>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a valid padding type if successful;
+        otherwise <code>H5T_PAD_ERROR</code> (-1).
+<dt><strong>Fortran90 Interface:</strong> h5tget_inpad_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_inpad_f(type_id, padtype, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: padtype       ! Padding type for unused bits 
+                                        ! in floating-point datatypes
+                                        ! Possible values of padding type are:
+                                        !     H5T_PAD_ZERO_F = 0
+                                        !     H5T_PAD_ONE_F = 1
+                                        !     H5T_PAD_BACKGROUND_F = 2
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tget_inpad_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_member_class" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetMemberClass">H5Tget_member_class</a>
+<dt><strong>Signature:</strong>
+    <dd><em>H5T_class_t</em> <code>H5Tget_member_class</code>(
+                       <em>hid_t</em> <code>cdtype_id</code>,
+                       <em>unsigned </em><code>member_no</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns datatype class of compound datatype member.
+<dt><strong>Description:</strong>
+    <dd>Given a compound datatype, <code>cdtype_id</code>, the function 
+        <code>H5Tget_member_class</code> returns the datatype class of 
+        the compound datatype member specified by <code>member_no</code>.
+        <p>
+        Valid class identifiers are as defined in 
+	<a href="#Datatype-GetClass"><code>H5Tget_class</code></a>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>cdtype_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Datatype identifier of compound object.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned</em> <code>member_no</code></td>
+            <td valign="top">IN: Compound object member number.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the datatype class, a non-negative value, if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tget_member_class_f
+    <dd>
+        <pre>
+SUBROUTINE h5tget_member_class_f(type_id, member_no, class, hdferr) 
+  INTEGER(HID_T), INTENT(IN) :: type_id       ! Datatype identifier 
+  INTEGER, INTENT(IN) :: member_no            ! Member number
+  INTEGER, INTENT(OUT) :: class               ! Member class
+  INTEGER, INTENT(OUT) :: hdferr              ! Error code
+END SUBROUTINE h5tget_member_class_f
+        </pre>		
+        <!--
+        <dt><strong>Non-C API(s):</strong>
+        <dd>
+ 
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.4</td>
+          <td valign="top">
+		    <code>membno</code> parameter type changed to 
+			<em>unsigned</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_member_index" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetMemberIndex">H5Tget_member_index</a>
+<dt><strong>Signature:</strong>
+    <dd><em>int</em> <code>H5Tget_member_index</code>(<em>hid_t </em><code>type_id</code>,
+        <em>const char *</em> <code>field_name</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the index of a compound or enumeration datatype member.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_member_index</code> retrieves the index of a field 
+        of a compound datatype or an element of an enumeration datatype.  
+        <p>
+        The name of the target field or element is specified in
+        <code>field_name</code>.
+        <p>
+        Fields are stored in no particular order 
+        with index values of 0 through <em>N</em>-1, where <em>N</em> is 
+        the value returned by <code>H5Tget_nmembers</code>.  
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char&nbsp;*</em>&nbsp;<code>field_name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Name of the field or member whose index is to be retrieved.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a valid field or member index if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tget_member_index_f
+    <dd>
+        <pre>
+SUBROUTINE h5tget_member_index_f(type_id, name, index, hdferr) 
+  INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name   ! Member name
+  INTEGER, INTENT(OUT) :: index          ! Member index
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+END SUBROUTINE h5tget_member_index_f
+	</pre>		
+        <!--
+        <dt><strong>Non-C API(s):</strong>
+        <dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top" align="left">&nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+		<tr>
+		  <td valign="top">1.4.5</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top" align="left">
+		    Function introduced in this release.</td></tr>
+		<tr>
+		  <td valign="top">1.4.4</td>
+          <td valign="top">
+		    Function introduced in this release.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">&nbsp;</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_member_name" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetMemberName">H5Tget_member_name</a>
+<dt><strong>Signature:</strong>
+    <dd><em>char *</em> <code>H5Tget_member_name</code>(<em>hid_t </em><code>type_id</code>,
+        <em>unsigned</em> <code>field_idx</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the name of a compound or enumeration datatype member.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_member_name</code> retrieves the name of a field 
+        of a compound datatype or an element of an enumeration datatype.  
+        <p>
+        The index of the target field or element is specified in
+        <code>field_idx</code>.
+        Compound datatype fields and enumeration datatype elements 
+        are stored in no particular order
+        with index values of 0 through <em>N</em>-1, where <em>N</em> 
+        is the value returned by <code>H5Tget_nmembers</code>.  
+        <p>
+        A buffer to receive the name of the field is 
+        allocated with <code>malloc()</code> and the caller is responsible 
+        for freeing the memory used.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned</em> <code>field_idx</code></td>
+            <td valign="top">Zero-based index of the field or element whose name
+                is to be retrieved.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a valid pointer to a string allocated with 
+        <code>malloc()</code> if successful; 
+        otherwise returns NULL.
+<dt><strong>Fortran90 Interface:</strong> h5tget_member_name_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_member_name_f(type_id,index, member_name,  namelen, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id        ! Datatype identifier 
+  INTEGER, INTENT(IN) :: index                 ! Field index (0-based) of 
+                                               ! the field name to retrieve 
+  CHARACTER(LEN=*), INTENT(OUT) :: member_name ! Name of a field of
+                                               ! a compound datatype 
+  INTEGER, INTENT(OUT) :: namelen              ! Length of the name 
+  INTEGER, INTENT(OUT) :: hdferr               ! Error code
+END SUBROUTINE h5tget_member_name_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.4</td>
+          <td valign="top">
+		    <code>membno</code> parameter type changed to 
+			<em>unsigned</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_member_offset" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetMemberOffset">H5Tget_member_offset</a>
+<dt><strong>Signature:</strong>
+    <dd><em>size_t</em> <code>H5Tget_member_offset</code>(<em>hid_t </em><code>type_id</code>,
+        <em>unsigned</em> <code>memb_no</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the offset of a field of a compound datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_member_offset</code> retrieves the 
+        byte offset of the beginning of a field within a 
+        compound datatype with respect to the beginning 
+        of the compound data type datum. 
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned</em> <code>memb_no</code></td>
+            <td valign="top">Number of the field whose offset is requested.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the byte offset of the field if successful;
+        otherwise returns <code>0</code> (zero).
+        Note that zero is a valid offset and that this function 
+        will fail only if a call to <code>H5Tget_member_class()</code> 
+        fails with the same arguments.
+<dt><strong>Fortran90 Interface:</strong> h5tget_member_offset_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_member_offset_f(type_id, member_no, offset, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id    ! Datatype identifier 
+  INTEGER, INTENT(IN) :: member_no         ! Number of the field  
+                                           ! whose offset is requested
+  INTEGER(SIZE_T), INTENT(OUT) :: offset   ! Byte offset of the the 
+                                           ! beginning of the field
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code
+END SUBROUTINE h5tget_member_offset_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.4</td>
+          <td valign="top">
+		    <code>membno</code> parameter type changed to 
+			<em>unsigned</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_member_type" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetMemberType">H5Tget_member_type</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Tget_member_type</code>(<em>hid_t </em><code>type_id</code>,
+        <em>unsigned</em> <code>field_idx</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns the datatype of the specified member.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_member_type</code> returns the datatype of the specified member.  The caller
+        should invoke H5Tclose() to release resources associated with the type.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned</em> <code>field_idx</code></td>
+            <td valign="top">Field index (0-based) of the field type to retrieve.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the identifier of a copy of the datatype of the field
+        if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tget_member_type_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_member_type_f(type_id,  field_idx, datatype, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id   ! Datatype identifier 
+  INTEGER, INTENT(IN) :: field_idx        ! Field index (0-based) of the 
+                                          ! field type to retrieve
+  INTEGER(HID_T), INTENT(OUT) :: datatype ! Identifier of a copy of 
+                                          ! the datatype of the field 
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+END SUBROUTINE h5tget_member_type_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.4</td>
+          <td valign="top">
+		    <code>membno</code> parameter type changed to 
+			<em>unsigned</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_member_value" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetMemberValue">H5Tget_member_value</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Tget_member_value</code>(<em>hid_t</em> <code>type</code>
+        <em>unsigned</em> <code>memb_no</code>,
+        <em>void</em> *<code>value</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns the value of an enumeration datatype member.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_member_value</code> returns the value of 
+        the enumeration datatype member <code>memb_no</code>.
+        <p>
+        The member value is returned in a user-supplied buffer 
+        pointed to by <code>value</code>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type</code></td>
+            <td valign="top">IN: Datatype identifier for the enumeration datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>unsigned</em> <code>memb_no</code>,</td>
+            <td valign="top">IN: Number of the enumeration datatype member.</td></tr>
+        <tr>
+		    <td valign="top"><em>void</em>&nbsp;*<code>value&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Pointer to a buffer for output of the 
+                value of the enumeration datatype member.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tget_member_value_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_member_value_f(type_id,  member_no, value, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(IN) :: member_no      ! Number of the enumeration 
+                                        ! datatype member
+  INTEGER, INTENT(OUT) :: value         ! Value of the enumeration datatype
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tget_member_value_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History</strong>:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.4</td>
+          <td valign="top">
+		    <code>membno</code> parameter type changed to 
+			<em>unsigned</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_native_type" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetNativeType">H5Tget_native_type</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Tget_native_type</code>(<em>hid_t</em> <code>type_id</code>,
+        <em>H5T_direction_t</em> <code>direction</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns the native datatype of a specified datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_native_type</code> returns the equivalent native datatype  
+        for the datatype specified in <code>type_id</code>.  
+        <p>
+        <code>H5Tget_native_type</code> is a high-level function designed
+	primarily to facilitate use of the <code>H5Dread</code> function,
+	for which users otherwise must undertake a multi-step process to 
+	determine the native datatype of a dataset prior to reading it 
+	into memory.     
+        It can be used not only to determine 
+	the native datatype for atomic datatypes, 
+	but also to determine the native datatypes of the individual components of 
+	a compound datatype, an enumerated datatype, an array datatype, or 
+        a variable-length datatype.
+        <p>
+	<code>H5Tget_native_type</code> selects the matching native datatype 
+	from the following list:
+        <pre>        H5T_NATIVE_CHAR         
+        H5T_NATIVE_SHORT        
+        H5T_NATIVE_INT          
+        H5T_NATIVE_LONG         
+        H5T_NATIVE_LLONG        
+
+        H5T_NATIVE_UCHAR
+        H5T_NATIVE_USHORT
+        H5T_NATIVE_UINT
+        H5T_NATIVE_ULONG
+        H5T_NATIVE_ULLONG
+
+        H5T_NATIVE_FLOAT
+        H5T_NATIVE_DOUBLE
+        H5T_NATIVE_LDOUBLE</pre>
+        <p>
+        The <code>direction</code> parameter indicates the order 
+	in which the library searches for a native datatype match.
+	Valid values for <code>direction</code> are as follows:
+	<table border=0>
+	<tr valign=top><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+	    <code>H5T_DIR_ASCEND</code></td><td>
+	    Searches the above list in ascending size of the datatype,<br>
+	    i.e., from top to bottom.  (Default)
+	    </td></tr>
+	<tr valign=top><td>&nbsp;</td><td>
+	    <code>H5T_DIR_DESCEND</code>&nbsp;&nbsp;</td><td>
+	    Searches the above list in descending size of the datatype,<br>
+	    i.e., from bottom to top.
+	    </td></tr>
+	</table>
+        <p>
+	<code>H5Tget_native_type</code> is designed primarily for
+	use with intenger and floating point datatypes.
+	Time, bifield, opaque, and reference datatypes are returned
+	as a copy of <code>type_id</code>.
+        <p>
+        The identifier returned by <code>H5Tget_native_type</code> 
+        should eventually be closed by calling <code>H5Tclose</code> 
+        to release resources.    
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">Datatype identifier for the dataset datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5T_direction_t</em>&nbsp;<code>direction&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Direction of search.</td></tr>
+    </table></ul>
+<!-- NEW PAGE -->
+<dt><strong>Returns:</strong>
+    <dd>Returns the native datatype identifier for the  
+        specified dataset datatype if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_nmembers" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetNmembers">H5Tget_nmembers</a>
+<dt><strong>Signature:</strong>
+    <dd><em>int </em><code>H5Tget_nmembers</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the number of elements in a compound or enumeration datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_nmembers</code> retrieves 
+        the number of fields in a compound datatype or 
+        the number of members of an enumeration datatype.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the number of elements if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tget_nmembers_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_nmembers_f(type_id, num_members, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: num_members   ! Number of fields in a 
+                                        ! compound datatype 
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tget_nmembers_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_norm" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetNorm">H5Tget_norm</a>
+<dt><strong>Signature:</strong>
+    <dd><em>H5T_norm_t </em><code>H5Tget_norm</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves mantissa normalization of a floating-point datatype.  
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_norm</code> retrieves the mantissa normalization of 
+        a floating-point datatype.  Valid normalization types are:
+        <ul> <dl>
+            <dt>H5T_NORM_IMPLIED (<code>0</code>)
+                <dd>MSB of mantissa is not stored, always 1
+            <dt>H5T_NORM_MSBSET (<code>1</code>)
+                <dd>MSB of mantissa is always 1
+            <dt>H5T_NORM_NONE (<code>2</code>)
+                <dd>Mantissa is not normalized
+        </dl> </ul>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a valid normalization type if successful;
+        otherwise <code>H5T_NORM_ERROR</code> (-1).
+<dt><strong>Fortran90 Interface:</strong> h5tget_norm_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_norm_f(type_id, norm, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id  
+                                 ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: norm   ! Mantissa normalization of a 
+                                 ! floating-point datatype
+                                 ! Valid normalization types are:
+                                 !    H5T_NORM_IMPLIED_F(0) 
+                                 !        MSB of mantissa is not 
+                                 !        stored, always 1
+                                 !    H5T_NORM_MSBSET_F(1) 
+                                 !        MSB of mantissa is always 1 
+                                 !    H5T_NORM_NONE_F(2) 
+                                 !        Mantissa is not normalized
+  INTEGER, INTENT(OUT) :: hdferr ! Error code
+END SUBROUTINE h5tget_norm_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_offset" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetOffset">H5Tget_offset</a>
+<dt><strong>Signature:</strong>
+    <dd><em>int </em><code>H5Tget_offset</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the bit offset of the first significant bit.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_offset</code> retrieves the bit offset of the first significant bit.
+        The significant bits of an atomic datum can be offset from the beginning
+        of the memory for that datum by an amount of padding. The `offset'
+        property specifies the number of bits of padding that appear to the
+        "right of" the value.  That is, if we have a 32-bit datum with 16-bits
+        of precision having the value 0x1122 then it will be laid out in
+        memory as (from small byte address toward larger byte addresses):
+        <br>
+        <br>
+
+      <table border align=center cellpadding=4 width="80%">
+        <tr align=center>
+          <th width="20%">Byte Position</th>
+          <th width="20%">Big-Endian Offset=0</th>
+          <th width="20%">Big-Endian Offset=16</th>
+          <th width="20%">Little-Endian Offset=0</th>
+          <th width="20%">Little-Endian Offset=16</th>
+        </tr>  
+        <tr align=center>
+          <td>0:</td>
+          <td>[ pad]</td>
+          <td>[0x11]</td>
+          <td>[0x22]</td>
+          <td>[ pad]</td>
+        </tr>
+        <tr align=center>
+          <td>1:</td>
+          <td>[ pad]</td>
+          <td>[0x22]</td>
+          <td>[0x11]</td>
+          <td>[ pad]</td>
+        </tr>
+        <tr align=center>
+          <td>2:</td>
+          <td>[0x11]</td>
+          <td>[ pad]</td>
+          <td>[ pad]</td>
+          <td>[0x22]</td>
+        </tr>
+        <tr align=center>
+          <td>3:</td>
+          <td>[0x22]</td>
+          <td>[ pad]</td>
+          <td>[ pad]</td>
+          <td>[0x11]</td>
+        </tr>
+      </table>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns an offset value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tget_offset_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_offset_f(type_id, offset, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: offset        ! Datatype bit offset of the
+                                        ! first significant bit
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tget_offset_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_order" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetOrder">H5Tget_order</a>
+<dt><strong>Signature:</strong>
+    <dd><em>H5T_order_t </em><code>H5Tget_order</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns the byte order of an atomic datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_order</code> returns the byte order of an 
+        atomic datatype.
+        <p>
+        Possible return values are:
+        <ul><dl>
+            <dt><code>H5T_ORDER_LE</code> (<code>0</code>)
+                <dd>Little endian byte ordering (default).
+            <dt><code>H5T_ORDER_BE</code> (<code>1</code>)
+                <dd>Big endian byte ordering.
+            <dt><code>H5T_ORDER_VAX</code> (<code>2</code>)
+                <dd>VAX mixed byte ordering (not currently supported).
+        </dl></ul>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a byte order constant if successful;
+        otherwise <code>H5T_ORDER_ERROR</code> (-1).
+<dt><strong>Fortran90 Interface:</strong> h5tget_order_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_order_f(type_id, order, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: order         ! Datatype byte order 
+                                        ! Possible values are:
+                                        !    H5T_ORDER_LE_F 
+                                        !    H5T_ORDER_BE_F 
+                                        !    H5T_ORDER_VAX_F  
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5tget_order_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_overflow" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetOverflow">H5Tget_overflow</a>
+<dt><strong>Signature:</strong>
+
+
+H5Tget_overflow ()
+    <dd><em>H5T_overflow_t</em> <code>H5Tget_overflow</code>(<code>void</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Returns a pointer to the current global overflow function.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tset_overflow</code> returns a pointer 
+        to the current global overflow function.
+        This is an application-defined function that is called whenever a 
+        datatype conversion causes an overflow. 
+<dt><strong>Parameters:</strong>
+    <dl>
+        <dt>None.
+    </dl>
+<dt><strong>Returns:</strong>
+    <dd>Returns a pointer to an application-defined function if successful.
+        Otherwise returns NULL; this can happen if no overflow handling
+        function is registered.  
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_pad" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetPad">H5Tget_pad</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tget_pad</code>(<em>hid_t </em><code>type_id</code>,
+        <em>H5T_pad_t *</em> <code>lsb</code>,
+        <em>H5T_pad_t *</em> <code>msb</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the padding type of the least and most-significant bit padding.  
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_pad</code> retrieves the padding type of the least and most-significant
+        bit padding.  Valid types are:
+        <ul> <dl>
+            <dt>H5T_PAD_ZERO (<code>0</code>)
+               <dd>Set background to zeros.
+            <dt>H5T_PAD_ONE (<code>1</code>)
+               <dd>Set background to ones.
+            <dt>H5T_PAD_BACKGROUND (<code>2</code>)
+               <dd>Leave background alone.
+        </dl> </ul>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">IN: Identifier of datatype to query.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5T_pad_t&nbsp;*</em>&nbsp;<code>lsb&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">OUT: Pointer to location to return least-significant 
+                bit padding type.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5T_pad_t *</em> <code>msb</code></td>
+            <td valign="top">OUT: Pointer to location to return most-significant 
+                bit padding type.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tget_pad_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_pad_f(type_id, lsbpad, msbpad, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: lsbpad        ! Padding type of the  
+                                        ! least significant bit
+  INTEGER, INTENT(OUT) :: msbpad        ! Padding type of the 
+                                        ! most significant bit
+                                        ! Possible values of 
+                                        ! padding type are:
+                                        !    H5T_PAD_ZERO_F = 0
+                                        !    H5T_PAD_ONE_F = 1
+                                        !    H5T_PAD_BACKGROUND_F = 2
+                                        !    H5T_PAD_ERROR_F = -1
+                                        !    H5T_PAD_NPAD_F = 3
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tget_pad_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_precision" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetPrecision">H5Tget_precision</a>
+<dt><strong>Signature:</strong>
+    <dd><em>size_t </em><code>H5Tget_precision</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns the precision of an atomic datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_precision</code> returns the precision of an atomic datatype.  The
+        precision is the number of significant bits which, unless padding is
+        present, is 8 times larger than the value returned by H5Tget_size().
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the number of significant bits if successful;
+        otherwise 0.
+<dt><strong>Fortran90 Interface:</strong> h5tget_precision_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_precision_f(type_id, precision, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: precision     ! Datatype precision
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tget_precision_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_sign" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetSign">H5Tget_sign</a>
+<dt><strong>Signature:</strong>
+    <dd><em>H5T_sign_t </em><code>H5Tget_sign</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the sign type for an integer type.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_sign</code> retrieves the sign type for an integer type.
+        Valid types are:
+        <ul> <dl>
+            <dt>H5T_SGN_NONE (<code>0</code>)
+               <dd>Unsigned integer type.
+            <dt>H5T_SGN_2 (<code>1</code>)
+               <dd>Two's complement signed integer type.
+        </dl> </ul>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a valid sign type if successful;
+        otherwise <code>H5T_SGN_ERROR</code> (-1).
+<dt><strong>Fortran90 Interface:</strong> h5tget_sign_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_sign_f(type_id, sign, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: sign           ! Sign type for an integer type
+                                         ! Possible values are:
+                                         !    Unsigned integer type 
+                                         !        H5T_SGN_NONE_F = 0
+                                         !    Two's complement signed 
+                                         !        integer type
+                                         !        H5T_SGN_2_F = 1
+                                         !    or error value
+                                         !         H5T_SGN_ERROR_F = -1 
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+END SUBROUTINE h5tget_sign_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_size" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetSize">H5Tget_size</a>
+<dt><strong>Signature:</strong>
+    <dd><em>size_t </em><code>H5Tget_size</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns the size of a datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_size</code> returns the size of a datatype in bytes.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the size of the datatype in bytes if successful;
+        otherwise 0.
+<dt><strong>Fortran90 Interface:</strong> h5tget_size_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_size_f(type_id, size, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER(SIZE_T), INTENT(OUT) :: size  ! Datatype size
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                        ! 0 on success and -1 on failure
+END SUBROUTINE h5tget_size_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_strpad" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetStrpad">H5Tget_strpad</a>
+<dt><strong>Signature:</strong>
+    <dd><em>H5T_str_t </em><code>H5Tget_strpad</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves the storage mechanism for a string datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_strpad</code> retrieves the storage mechanism
+        for a string datatype, as defined in 
+        <a href="#Datatype-SetStrpad"><code>H5Tset_strpad</code></a>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to query.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a valid string storage mechanism if successful;
+        otherwise <code>H5T_STR_ERROR</code> (-1).
+<dt><strong>Fortran90 Interface:</strong> h5tget_strpad_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_strpad_f(type_id, strpad, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id    
+                                  ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: strpad  ! String padding method for a string datatype 
+                                  ! Possible values of padding type are:
+                                  !    Pad with zeros (as C does): 
+                                  !        H5T_STR_NULLPAD_F(0) 
+                                  !    Pad with spaces (as FORTRAN does): 
+                                  !        H5T_STR_SPACEPAD_F(1)
+  INTEGER, INTENT(OUT) :: hdferr  ! Error code
+END SUBROUTINE h5tget_strpad_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_super" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetSuper">H5Tget_super</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em> <code>H5Tget_super</code>(<em>hid_t</em> <code>type</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Returns the base datatype from which a datatype is derived.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_super</code> returns the base datatype from which the 
+        datatype <code>type</code> is derived.  
+        <P>
+        In the case of an enumeration type, the return value is an integer type.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Datatype identifier for the derived datatype.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns the datatype identifier for the base datatype if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tget_super_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_super_f(type_id, base_type_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier 
+  INTEGER(HID_T), INTENT(OUT) :: type_id ! Base datatype identifier 
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+END SUBROUTINE h5tget_super_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tget_tag" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-GetTag">H5Tget_tag</a>
+<dt><strong>Signature:</strong>
+    <dd><em>char</em> *<code>H5Tget_tag</code>(<em>hid_t</em> <code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Gets the tag associated with an opaque datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tget_tag</code> returns the tag associated with 
+        the opaque datatype <code>type_id</code>.
+        <P>
+        The tag is returned via a pointer to an 
+        allocated string, which the caller must free.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Datatype identifier for the opaque datatype.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a pointer to an allocated string if successful;
+        otherwise returns <code>NULL</code>.
+<dt><strong>Fortran90 Interface:</strong> h5tget_tag_f
+    <dd>
+	<pre>
+SUBROUTINE h5tget_tag_f(type_id, tag,taglen, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier 
+  CHARACTER(LEN=*), INTENT(OUT) :: tag   ! Unique ASCII string with which the
+                                         ! opaque datatype is to be tagged
+  INTEGER, INTENT(OUT) :: taglen         ! Length of tag 
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+END SUBROUTINE h5tget_tag_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tinsert" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-Insert">H5Tinsert</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Tinsert</code>(<em>hid_t </em><code>type_id</code>,
+        <em>const char *</em> <code>name</code>,
+        <em>size_t</em> <code>offset</code>,
+        <em>hid_t</em> <code>field_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Adds a new member to a compound datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tinsert</code> adds another member to the compound datatype
+        <code>type_id</code>.  The new member has a <code>name</code> which
+        must be unique within the compound datatype. 
+        The <code>offset</code> argument defines the start of the member 
+        in an instance of the compound datatype, and <code>field_id</code> 
+        is the datatype identifier of the new member.
+        <P>
+        Note: Members of a compound datatype do not have to be atomic datatypes; 
+        a compound datatype can have a member which is a compound datatype.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">Identifier of compound datatype to modify.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char&nbsp;*</em>&nbsp;<code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Name of the field to insert.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>offset</code></td>
+            <td valign="top">Offset in memory structure of the field to insert.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>field_id</code></td>
+            <td valign="top">Datatype identifier of the field to insert.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tinsert_f
+    <dd>
+	<pre>
+SUBROUTINE h5tinsert_f(type_id,  name, offset, field_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the field to insert
+  INTEGER(SIZE_T), INTENT(IN) :: offset  ! Offset in memory structure 
+                                         ! of the field to insert
+  INTEGER(HID_T), INTENT(IN) :: field_id ! Datatype identifier of the 
+                                         ! new member
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+END SUBROUTINE h5tinsert_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tis_variable_str" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-IsVariableString">H5Tis_variable_str</a>
+<dt><strong>Signature:</strong>
+    <dd><em>htri_t </em><code>H5Tis_variable_str</code>(<em>hid_t </em><code>dtype_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Determines whether datatype is a variable-length string.  
+<dt><strong>Description:</strong>
+    <dd><code>H5Tvlen_create</code> determines whether the datatype 
+        identified in <code>dtype_id</code> is a variable-length string.
+        <p>
+        This function can be used to distinguish between 
+        fixed and variable-length string datatypes.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>dtype_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Datatype identifier.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns <code>TRUE</code> or <code>FALSE</code> if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tis_variable_str_f
+    <dd>
+	<pre>
+SUBROUTINE h5tis_variable_str_f(type_id, status, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id   ! Datatype identifier 
+  LOGICAL, INTENT(OUT)       :: status    ! Logical flag:
+                                          !    .TRUE. if datatype is a 
+                                          !         varibale string
+                                          !    .FALSE. otherwise 
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+END SUBROUTINE h5tis_variable_str_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tlock" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-Lock">H5Tlock</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tlock</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Locks a datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tlock</code> locks the datatype specified by the 
+        <code>type_id</code> identifier, making it read-only and 
+        non-destructible.  This is normally done by the library for 
+        predefined datatypes so the application does not 
+        inadvertently change or delete a predefined type.  
+        Once a datatype is locked it can never be unlocked.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to lock.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Topen" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-Open">H5Topen</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t</em><code>H5Topen</code>(<em>hid_t</em> <code>loc_id</code>,
+        <em>const char *</em> <code>name</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Opens a named datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Topen</code> opens a named datatype at the location
+        specified by <code>loc_id</code> and returns an identifier 
+        for the datatype.  <code>loc_id</code> is either a file or 
+        group identifier.  The identifier should eventually be closed 
+        by calling <code>H5Tclose</code> to release resources.    
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>loc_id</code></td>
+            <td valign="top">IN: A file or group identifier.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char&nbsp;*</em>&nbsp;<code>name&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: A datatype name, defined within the file 
+			  or group identified by <code>loc_id</code>.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a named datatype identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5topen_f
+    <dd>
+	<pre>
+SUBROUTINE h5topen_f(loc_id, name, type_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: loc_id    ! File or group identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: name    ! Datatype name within file or
+                                          ! group
+  INTEGER(HID_T), INTENT(out) :: type_id  ! Datatype identifier 
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5topen_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tpack" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-Pack">H5Tpack</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Tpack</code>(<em>hid_t </em><code>type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Recursively removes padding from within a compound datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tpack</code> recursively removes padding from within a compound
+        datatype to make it more efficient (space-wise) to store that data.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to modify.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tpack_f
+    <dd>
+	<pre>
+SUBROUTINE h5tpack_f(type_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tpack_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tregister" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-Register">H5Tregister</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Tregister</code>(<em>H5T_pers_t</em> <code>pers</code>, 
+        <em>const char *</em> <code>name</code>, 
+        <em>hid_t </em><code>src_id</code>,
+        <em>hid_t</em> <code>dst_id</code>,
+        <em>H5T_conv_t</em> <code>func</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Registers a conversion function.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tregister</code> registers a hard or soft conversion function 
+        for a datatype conversion path.  
+        <p>
+        The parameter <code>pers</code> indicates whether a conversion function 
+        is <em>hard</em> (<code>H5T_PERS_HARD</code>) 
+        or <em>soft</em> (<code>H5T_PERS_SOFT</code>).
+        <p>
+        A conversion path can have only one hard function.
+        When <code>pers</code> is <code>H5T_PERS_HARD</code>, 
+        <code>func</code> replaces any previous hard function.
+        If  <code>pers</code> is <code>H5T_PERS_HARD</code> and 
+        <code>func</code> is the null pointer, then any hard function 
+        registered for this path is removed.  
+        <p>
+        When <code>pers</code> is <code>H5T_PERS_SOFT</code>, 
+        <code>H5Tregister</code> 
+        adds the function to the end of the master soft list and replaces 
+        the soft function in all applicable existing conversion paths. 
+        Soft functions are used when determining which conversion function 
+        is appropriate for this path.  
+        <p>
+        The <code>name</code> is used only for debugging and should be a 
+        short identifier for the function.  
+        <p>
+        The path is specified by the source and destination datatypes 
+        <code>src_id</code> and <code>dst_id</code>.  
+        For soft conversion functions, only the class of these types is important.
+        <p>
+        The type of the conversion function pointer is declared as:
+        <dir>
+<pre><code>typedef</code> <em>herr_t </em>(<code>*H5T_conv_t</code>) (<em>hid_t </em><code>src_id</code>, 
+                              <em>hid_t </em><code>dst_id</code>, 
+                              <em>H5T_cdata_t *</em><code>cdata</code>,
+                              <em>size_t </em><code>nelmts</code>, 
+                              <em>size_t </em><code>buf_stride</code>, 
+                              <em>size_t </em><code>bkg_stride</code>, 
+                              <em>void *</em><code>buf</code>, 
+                              <em>void *</em><code>bkg</code>,
+                              <em>hid_t </em><code>dset_xfer_plist</code>)</pre>
+        </dir>
+        <p>
+        The <code>H5T_cdata_t</code> struct is declared as:
+        <dir>
+<pre><code>typedef</code> <em>struct </em><code>*H5T_cdata_t</code> (<em>H5T_cmd_t </em><code>command</code>, 
+                             <em>H5T_bkg_t </em><code>need_bkg</code>, 
+                             <em>hbool_t *</em><code>recalc</code>,
+                             <em>void *</em><code>priv</code>)</pre>
+        </dir>
+        <p>
+        The <code>H5T_conv_t</code> parameters and 
+        the elements of the <code>H5T_cdata_t</code> struct
+        are described more fully in the 
+        &ldquo;<a href="Datatypes.html#Datatypes-DataConversion" 
+        target="WinUG">Data Conversion</a>&rdquo; 
+        section of&nbsp; &ldquo;The Datatype Interface (H5T)&rdquo; 
+        in the <cite>HDF5 User's Guide</cite>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>H5T_pers_t</em> <code>pers</code></td>
+            <td valign="top"><code>H5T_PERS_HARD</code> for hard conversion functions;
+                <code>H5T_PERS_SOFT</code> for soft conversion functions.</td></tr>
+        <tr>
+		    <td valign="top"><em>const char *</em> <code>name</code></td>
+            <td valign="top">Name displayed in diagnostic output.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>src_id</code></td>
+            <td valign="top">Identifier of source datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>dst_id</code></td>
+            <td valign="top">Identifier of destination datatype.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5T_conv_t</em>&nbsp;<code>func&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Function to convert between source and destination datatypes.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.3</td>
+          <td valign="top">
+			The following change occurred in the 
+			<code>H5Tconv_t</code> function:<br>
+                        &nbsp;&nbsp;
+			<code>nelmts</code> parameter type changed to 
+			<em>size_t</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tset_cset" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-SetCset">H5Tset_cset</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tset_cset</code>(<em>hid_t </em><code>type_id</code>,
+        <em>H5T_cset_t</em> <code>cset</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Sets character set to be used.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tset_cset</code> the character set to be used.
+        <p>
+        HDF5 is able to distinguish between character sets of different
+        nationalities and to convert between them to the extent possible.
+        Valid character set types are:
+        <ul> <dl>
+            <dt>H5T_CSET_ASCII (<code>0</code>)
+               <dd>Character set is US ASCII.
+        </dl> </ul>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">Identifier of datatype to modify.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5T_cset_t</em>&nbsp;<code>cset&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Character set type.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tset_cset_f
+    <dd>
+	<pre>
+SUBROUTINE h5tset_cset_f(type_id, cset, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id 
+                                  ! Datatype identifier 
+  INTEGER, INTENT(IN) :: cset     ! Character set type of a string datatype  
+                                  ! Possible values of padding type are:
+                                  !    H5T_CSET_ASCII_F = 0
+  INTEGER, INTENT(OUT) :: hdferr  ! Error code
+END SUBROUTINE h5tset_cset_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tset_ebias" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-SetEbias">H5Tset_ebias</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tset_ebias</code>(<em>hid_t </em><code>type_id</code>,
+        <em>size_t</em> <code>ebias</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Sets the exponent bias of a floating-point type.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tset_ebias</code> sets the exponent bias of a floating-point type.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to set.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>ebias</code></td>
+            <td valign="top">Exponent bias value.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tset_ebias_f
+    <dd>
+	<pre>
+SUBROUTINE h5tset_ebias_f(type_id, ebias, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(IN) :: ebias          ! Datatype exponent bias 
+                                        ! of a floating-point type, 
+                                        ! which cannot be 0
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tset_ebias_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tset_fields" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-SetFields">H5Tset_fields</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tset_fields</code>(<em>hid_t </em><code>type_id</code>,
+        <em>size_t</em> <code>spos</code>,
+        <em>size_t</em> <code>epos</code>,
+        <em>size_t</em> <code>esize</code>,
+        <em>size_t</em> <code>mpos</code>,
+        <em>size_t</em> <code>msize</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Sets locations and sizes of floating point bit fields.  
+<dt><strong>Description:</strong>
+    <dd><code>H5Tset_fields</code> sets the locations and sizes of the various
+        floating-point bit fields.  The field positions are bit positions in the
+        significant region of the datatype.  Bits are numbered with the least
+        significant bit number zero.
+    
+        <P>Fields are not allowed to extend beyond the number of bits of
+        precision, nor are they allowed to overlap with one another.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to set.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>spos</code></td>
+            <td valign="top">Sign position, i.e., the bit offset of the floating-point 
+                sign bit.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>epos</code></td>
+            <td valign="top">Exponent bit position.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>esize</code></td>
+            <td valign="top">Size of exponent in bits.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>mpos</code></td>
+            <td valign="top">Mantissa bit position.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>msize</code></td>
+            <td valign="top">Size of mantissa in bits.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tset_fields_f
+    <dd>
+	<pre>
+SUBROUTINE h5tset_fields_f(type_id, epos, esize, mpos, msize, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
+  INTEGER, INTENT(IN) :: epos           ! Exponent bit-position 
+  INTEGER, INTENT(IN) :: esize          ! Size of exponent in bits
+  INTEGER, INTENT(IN) :: mpos           ! Mantissa bit-position 
+  INTEGER, INTENT(IN) :: msize          ! Size of mantissa in bits
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tset_fields_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tset_inpad" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-SetInpad">H5Tset_inpad</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tset_inpad</code>(<em>hid_t </em><code>type_id</code>,
+        <em>H5T_pad_t</em> <code>inpad</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Fills unused internal floating point bits.
+<dt><strong>Description:</strong>
+    <dd>If any internal bits of a floating point type are unused
+        (that is, those significant bits which are not part of the
+        sign, exponent, or mantissa), then <code>H5Tset_inpad</code> will be filled
+        according to the value of the padding value property <code>inpad</code>.
+        Valid padding types are:
+        <ul> <dl>
+            <dt>H5T_PAD_ZERO (<code>0</code>)
+               <dd>Set background to zeros.
+            <dt>H5T_PAD_ONE (<code>1</code>)
+               <dd>Set background to ones.
+            <dt>H5T_PAD_BACKGROUND (<code>2</code>)
+               <dd>Leave background alone.
+        </dl> </ul>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">Identifier of datatype to modify.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5T_pad_t</em>&nbsp;<code>pad&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Padding type.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tset_inpad_f
+    <dd>
+	<pre>
+SUBROUTINE h5tset_inpad_f(type_id, padtype, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id 
+                                  ! Datatype identifier 
+  INTEGER, INTENT(IN) :: padtype  ! Padding type for unused bits 
+                                  ! in floating-point datatypes.
+                                  ! Possible values of padding type are:
+                                  !    H5T_PAD_ZERO_F = 0
+                                  !    H5T_PAD_ONE_F = 1
+                                  !    H5T_PAD_BACKGROUND_F = 2
+  INTEGER, INTENT(OUT) :: hdferr  ! Error code
+END SUBROUTINE h5tset_inpad_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tset_norm" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-SetNorm">H5Tset_norm</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tset_norm</code>(<em>hid_t </em><code>type_id</code>,
+        <em>H5T_norm_t</em> <code>norm</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Sets the mantissa normalization of a floating-point datatype.  
+<dt><strong>Description:</strong>
+    <dd><code>H5Tset_norm</code> sets the mantissa normalization of 
+        a floating-point datatype.  Valid normalization types are:
+        <ul> <dl>
+            <dt>H5T_NORM_IMPLIED (<code>0</code>)
+                <dd>MSB of mantissa is not stored, always 1
+            <dt>H5T_NORM_MSBSET (<code>1</code>)
+                <dd>MSB of mantissa is always 1
+            <dt>H5T_NORM_NONE (<code>2</code>)
+                <dd>Mantissa is not normalized
+        </dl> </ul>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">Identifier of datatype to set.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5T_norm_t</em>&nbsp;<code>norm&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Mantissa normalization type.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tset_norm_f
+    <dd>
+	<pre>
+SUBROUTINE h5tset_norm_f(type_id, norm, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id  
+                                  ! Datatype identifier 
+  INTEGER, INTENT(IN) :: norm     ! Mantissa normalization of a 
+                                  ! floating-point datatype
+                                  ! Valid normalization types are:
+                                  !    H5T_NORM_IMPLIED_F(0)
+                                  !       MSB of mantissa is not stored,
+                                  !       always 1 
+                                  !    H5T_NORM_MSBSET_F(1) 
+                                  !       MSB of mantissa is always 1 
+                                  !    H5T_NORM_NONE_F(2)
+                                  !       Mantissa is not normalized
+  INTEGER, INTENT(OUT) :: hdferr  ! Error code
+END SUBROUTINE h5tset_norm_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tset_offset" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-SetOffset">H5Tset_offset</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tset_offset</code>(<em>hid_t </em><code>type_id</code>,
+        <em>size_t</em> <code>offset</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Sets the bit offset of the first significant bit.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tset_offset</code> sets the bit offset of the first significant bit.  The
+        significant bits of an atomic datum can be offset from the beginning of
+        the memory for that datum by an amount of padding. The `offset'
+        property specifies the number of bits of padding that appear to the
+        "right of" the value.  That is, if we have a 32-bit datum with 16-bits
+        of precision having the value 0x1122 then it will be laid out in
+        memory as (from small byte address toward larger byte addresses):
+        <br>
+        <br>
+
+      <table border align=center cellpadding=4 width="80%">
+        <tr align=center>
+          <th width="20%">Byte Position</th>
+          <th width="20%">Big-Endian Offset=0</th>
+          <th width="20%">Big-Endian Offset=16</th>
+          <th width="20%">Little-Endian Offset=0</th>
+          <th width="20%">Little-Endian Offset=16</th>
+        </tr>  
+        <tr align=center>
+          <td>0:</td>
+          <td>[ pad]</td>
+          <td>[0x11]</td>
+          <td>[0x22]</td>
+          <td>[ pad]</td>
+        </tr>
+        <tr align=center>
+          <td>1:</td>
+          <td>[ pad]</td>
+          <td>[0x22]</td>
+          <td>[0x11]</td>
+          <td>[ pad]</td>
+        </tr>
+        <tr align=center>
+          <td>2:</td>
+          <td>[0x11]</td>
+          <td>[ pad]</td>
+          <td>[ pad]</td>
+          <td>[0x22]</td>
+        </tr>
+        <tr align=center>
+          <td>3:</td>
+          <td>[0x22]</td>
+          <td>[ pad]</td>
+          <td>[ pad]</td>
+          <td>[0x11]</td>
+        </tr>
+      </table>
+
+<P>If the offset is incremented then the total size is
+incremented also if necessary to prevent significant bits of
+the value from hanging over the edge of the datatype.
+
+<P>The offset of an H5T_STRING cannot be set to anything but
+zero.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to set.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>offset</code></td>
+            <td valign="top">Offset of first significant bit.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tset_offset_f
+    <dd>
+	<pre>
+SUBROUTINE h5tset_offset_f(type_id, offset, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(IN) :: offset         ! Datatype bit offset of 
+                                        ! the first significant bit
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tset_offset_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tset_order" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-SetOrder">H5Tset_order</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tset_order</code>(<em>hid_t </em><code>type_id</code>,
+        <em>H5T_order_t</em><code>order</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Sets the byte ordering of an atomic datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tset_order</code> sets the byte ordering of an atomic datatype.
+        Byte orderings currently supported are:
+        <ul> <dl>
+            <dt>H5T_ORDER_LE (<code>0</code>)
+                <dd> Little-endian byte ordering (default).
+            <dt>H5T_ORDER_BE (<code>1</code>)
+                <dd> Big-endian byte ordering.
+            <dt>H5T_ORDER_VAX (<code>2</code>)
+                <dd>VAX mixed byte ordering (not currently supported).
+        </dl> </ul>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">Identifier of datatype to set.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5T_order_t</em>&nbsp;<code>order&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Byte ordering constant.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tset_order_f
+    <dd>
+	<pre>
+SUBROUTINE h5tset_order_f(type_id, order, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id   ! Datatype identifier 
+  INTEGER, INTENT(IN) :: order            ! Datatype byte order 
+                                          ! Possible values are:
+                                          !    H5T_ORDER_LE_F 
+                                          !    H5T_ORDER_BE_F 
+                                          !    H5T_ORDER_VAX_F  
+  INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                          ! 0 on success and -1 on failure
+END SUBROUTINE h5tset_order_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tset_overflow" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-SetOverflow">H5Tset_overflow</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Tset_overflow</code>(<em>H5T_overflow_t</em> <code>func</code>)
+<dt><strong>Purpose:</strong>
+    <dd>Sets the overflow handler to a specified function. 
+<dt><strong>Description:</strong>
+    <dd><code>H5Tset_overflow</code> sets the overflow handler 
+        to be the function specified by <code>func</code>.
+        <code>func</code> will be called for all datatype conversions that 
+        result in an overflow.  
+        <p>
+        See the definition of <code>H5T_overflow_t</code> in 
+        <code>H5Tpublic.h</code> for documentation  
+        of arguments and return values.  
+        The prototype for <code>H5T_overflow_t</code> is as follows:<br>
+              <code>herr_t (*H5T_overflow_t)(hid_t src_id, hid_t dst_id,
+                                 void *src_buf, void *dst_buf);
+              </code>
+        <p>
+        The NULL pointer may be passed to remove the overflow handler.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>H5T_overflow_t</em>&nbsp;<code>func&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Overflow function.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tset_pad" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-SetPad">H5Tset_pad</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tset_pad</code>(<em>hid_t </em><code>type_id</code>,
+        <em>H5T_pad_t</em> <code>lsb</code>,
+        <em>H5T_pad_t</em> <code>msb</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Sets the least and most-significant bits padding types.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tset_pad</code> sets the least and most-significant bits padding types.
+        <dl> <ul>
+            <dt>H5T_PAD_ZERO (<code>0</code>)
+               <dd>Set background to zeros.
+            <dt>H5T_PAD_ONE (<code>1</code>)
+               <dd>Set background to ones.
+            <dt>H5T_PAD_BACKGROUND (<code>2</code>)
+               <dd>Leave background alone.
+        </ul> </dl>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">Identifier of datatype to set.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5T_pad_t</em>&nbsp;<code>lsb&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Padding type for least-significant bits.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5T_pad_t</em> <code>msb</code></td>
+            <td valign="top">Padding type for most-significant bits.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tset_pad_f
+    <dd>
+	<pre>
+SUBROUTINE h5tset_pad_f(type_id, lsbpad, msbpad, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(IN) :: lsbpad         ! Padding type of the 
+                                        ! least significant bit
+  INTEGER, INTENT(IN) :: msbpad         ! Padding type of the 
+                                        ! most significant bit
+                                        ! Possible values of padding 
+                                        ! type are:
+                                        !    H5T_PAD_ZERO_F = 0
+                                        !    H5T_PAD_ONE_F = 1
+                                        !    H5T_PAD_BACKGROUND_F = 2
+                                        !    H5T_PAD_ERROR_F = -1
+                                        !    H5T_PAD_NPAD_F = 3
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tset_pad_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tset_precision" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-SetPrecision">H5Tset_precision</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tset_precision</code>(<em>hid_t </em><code>type_id</code>,
+        <em>size_t</em><code>precision</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Sets the precision of an atomic datatype.  
+<dt><strong>Description:</strong>
+    <dd><code>H5Tset_precision</code> sets the precision of an atomic datatype.  
+        The precision is the number of significant bits which, unless padding 
+        is present, is 8 times larger than the value returned by H5Tget_size().
+        <P>If the precision is increased then the offset is decreased and then
+            the size is increased to insure that significant bits do not "hang
+            over" the edge of the datatype.
+        <P>Changing the precision of an H5T_STRING automatically changes the
+            size as well.  The precision must be a multiple of 8.
+        <P>When decreasing the precision of a floating point type, set the
+            locations and sizes of the sign, mantissa, and exponent fields
+            first.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">Identifier of datatype to set.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em>&nbsp;<code>precision&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Number of bits of precision for datatype.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tset_precision_f
+    <dd>
+	<pre>
+SUBROUTINE h5tset_precision_f(type_id, precision, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  INTEGER, INTENT(IN) :: precision      ! Datatype precision
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tset_precision_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tset_sign" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-SetSign">H5Tset_sign</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tset_sign</code>(<em>hid_t </em><code>type_id</code>,
+        <em>H5T_sign_t</em> <code>sign</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Sets the sign property for an integer type.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tset_sign</code> sets the sign property for an integer type.
+        <dl> 
+          <dt>H5T_SGN_NONE (<code>0</code>)
+            <dd>Unsigned integer type.
+          <dt>H5T_SGN_2 (<code>1</code>)
+            <dd>Two's complement signed integer type.
+         </dl>
+<dt><strong>Parameters:</strong>
+    <ul><table>
+		<tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">Identifier of datatype to set.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5T_sign_t</em>&nbsp;<code>sign&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Sign type.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tset_sign_f
+    <dd>
+	<pre>
+SUBROUTINE h5tset_sign_f(type_id, sign, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id  
+                                  ! Datatype identifier 
+  INTEGER, INTENT(IN) :: sign     ! Sign type for an integer type 
+                                  ! Possible values are:
+                                  !    Unsigned integer type 
+                                  !       H5T_SGN_NONE_F = 0
+                                  !    Two's complement signed integer type
+                                  !       H5T_SGN_2_F = 1
+                                  !    or error value 
+                                  !       H5T_SGN_ERROR_F=-1 
+  INTEGER, INTENT(OUT) :: hdferr  ! Error code
+END SUBROUTINE h5tset_sign_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tset_size" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-SetSize">H5Tset_size</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tset_size</code>(<em>hid_t </em><code>type_id</code>,
+        <em>size_t</em><code>size</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Sets the total size for an atomic datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tset_size</code> sets the total size in bytes, 
+        <code>size</code>, for a datatype.  If the datatype is atomic and size
+         is decreased so that the significant bits of the datatype extend beyond
+         the edge of the new size, then the `offset' property is decreased
+         toward zero.  If the `offset' becomes zero and the significant
+         bits of the datatype still hang over the edge of the new size, then
+         the number of significant bits is decreased.
+         The size set for a string should include space for the null-terminator
+         character, otherwise it will not be stored on (or retrieved from) disk.
+         Adjusting the size of a string automatically sets the precision
+         to 8*<code>size</code>.  A compound datatype may increase in size, 
+         but may not shrink.  All datatypes must have a positive size.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Identifier of datatype to change size.</td></tr>
+        <tr>
+		    <td valign="top"><em>size_t</em> <code>size</code></td>
+            <td valign="top">Size in bytes to modify datatype.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tset_size_f
+    <dd>
+	<pre>
+SUBROUTINE h5tset_size_f(type_id, size, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier 
+  INTEGER(SIZE_T), INTENT(IN) :: size    ! Datatype size
+  INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                         ! 0 on success and -1 on failure
+END SUBROUTINE h5tset_size_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tset_strpad" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-SetStrpad">H5Tset_strpad</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t </em><code>H5Tset_strpad</code>(<em>hid_t </em><code>type_id</code>,
+        <em>H5T_str_t</em> <code>strpad</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Defines the storage mechanism for character strings.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tset_strpad</code> defines the storage mechanism for the string.
+        <p>
+        The method used to store character strings differs with the 
+        programming language: 
+        <ul>
+            <li>C usually null terminates strings while 
+            <li>Fortran left-justifies and space-pads strings.
+        </ul>
+        Valid string padding values, as passed in the parameter 
+        <code>strpad</code>, are as follows:
+        <ul> <dl>
+            <dt>H5T_STR_NULLTERM (<code>0</code>)
+               <dd>Null terminate (as C does)
+            <dt>H5T_STR_NULLPAD (<code>1</code>)
+               <dd>Pad with zeros 
+            <dt>H5T_STR_SPACEPAD (<code>2</code>)
+               <dd>Pad with spaces (as FORTRAN does)
+        </dl> </ul>
+        <p>
+        When converting from a longer string to a shorter string,
+        the behavior is as follows.
+        If the short string is <code>H5T_STR_NULLPAD</code> or 
+        <code>H5T_STR_SPACEPAD</code>, then the string is simply truncated. 
+        If the short string is <code>H5T_STR_NULLTERM</code>, it is
+        truncated and a null terminator is appended.  
+        <p>
+        When converting from a shorter string to a longer string,
+        the long string is padded on the end by appending nulls or spaces.
+
+
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">Identifier of datatype to modify.</td></tr>
+        <tr>
+		    <td valign="top"><em>H5T_str_t</em>&nbsp;<code>strpad&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">String padding type.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tset_strpad_f
+    <dd>
+	<pre>
+SUBROUTINE h5tset_strpad_f(type_id, strpad, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id 
+                                 ! Datatype identifier 
+  INTEGER, INTENT(IN) :: strpad  ! String padding method for a string datatype 
+                                 ! Possible values of padding type are:
+                                 !    Pad with zeros (as C does): 
+                                 !       H5T_STR_NULLPAD_F(0)
+                                 !    Pad with spaces (as FORTRAN does): 
+                                 !       H5T_STR_SPACEPAD_F(1)
+  INTEGER, INTENT(OUT) :: hdferr ! Error code
+END SUBROUTINE h5tset_strpad_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tset_tag" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-SetTag">H5Tset_tag</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Tset_tag</code>(<em>hid_t</em> <code>type_id</code>
+        <em>const char</em> *<code>tag</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Tags an opaque datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tset_tag</code> tags an opaque datatype <code>type_id</code>
+        with a descriptive ASCII identifier,<code> tag</code>.
+        <p>     
+        <code>tag</code> is intended to provide a concise description;
+        the maximum size is hard-coded in the HDF5 Library as 256 bytes 
+        (<code>H5T_OPAQUE_TAG_MAX</code>).
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em> <code>type_id</code></td>
+            <td valign="top">IN: Datatype identifier for the opaque datatype to be tagged.</td></tr>
+        <tr>
+		    <td valign="top"><em>const&nbsp;char</em>&nbsp;*<code>tag&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Descriptive ASCII string with which the 
+                opaque datatype is to be tagged.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tset_tag_f
+    <dd>
+	<pre>
+SUBROUTINE h5tset_tag_f(type_id, tag, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+  CHARACTER(LEN=*), INTENT(IN) :: tag   ! Unique ASCII string with which the
+                                        ! opaque datatype is to be tagged 
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+END SUBROUTINE h5tset_tag_f
+	</pre>
+	
+<dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.5</td>
+          <td valign="top">
+		    The <code>H5T_OPAQUE_TAG_MAX</code> macro constant, 
+			specifying the maximum size of an opaque datatype tag, 
+			was added in <code>H5Tpublic.h</code>.</td></tr>
+    </table></ul>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tunregister" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-Unregister">H5Tunregister</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Tunregister</code>(<em>H5T_conv_t</em> <code>func</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Removes a conversion function from all conversion paths.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tunregister</code> removes a conversion function from all conversion paths.
+        <P>
+        The conversion function pointer type declaration is described in 
+        <a href="#Datatype-Register">H5Tregister</a>.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>H5T_conv_t</em>&nbsp;<code>func&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Function to remove from conversion paths.</td>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+SUBROUTINE
+	</pre>		
+-->
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.3</td>
+          <td valign="top">
+			The following change occurred in the 
+			<code>H5Tconv_t</code> function:<br>
+                        &nbsp;&nbsp;
+			<code>nelmts</code> parameter type changed to 
+			<em>size_t</em>.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Tvlen_create" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Datatype-VLCreate">H5Tvlen_create</a>
+<dt><strong>Signature:</strong>
+    <dd><em>hid_t </em><code>H5Tvlen_create</code>(<em>hid_t </em><code>base_type_id</code>
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Creates a new variable-length datatype.
+<dt><strong>Description:</strong>
+    <dd><code>H5Tvlen_create</code> creates a new variable-length (VL) datatype.
+        <p>
+        The base datatype will be the datatype that the sequence is composed of,
+        characters for character strings, vertex coordinates for polygon lists, etc.
+        The base type specified for the VL datatype can be of any HDF5 datatype,
+        including another VL datatype, a compound datatype or an atomic datatype.
+        <p>
+        When necessary, use <code>H5Tget_super</code> to determine the base type 
+        of the VL datatype.
+        <p>
+        The datatype identifier returned from this function should be 
+        released with <code>H5Tclose</code> or resource leaks will result.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>hid_t</em>&nbsp;<code>base_type_id&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">Base type of datatype to create.</td></tr>
+    </table></ul>
+<dt><strong>See Also:</strong>
+    <dd><a href="RM_H5D.html#Dataset-GetVLBuf">H5Dget_vlen_buf_size</a>
+    <dd><a href="RM_H5D.html#Dataset-VLReclaim">H5Dvlen_reclaim</a>
+<dt><strong>Returns:</strong>
+    <dd>Returns datatype identifier if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong> h5tvlen_create_f
+    <dd>
+	<pre>
+SUBROUTINE h5tvlen_create_f(type_id, vltype_id, hdferr) 
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN) :: type_id    ! Datatype identifier of base type 
+                                           ! Base type can only be atomic 
+  INTEGER(HID_T), INTENT(OUT) :: vltype_id ! VL datatype identifier 
+  INTEGER, INTENT(OUT) :: hdferr           ! Error code
+END SUBROUTINE h5tvlen_create_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+		<tr>
+		  <td valign="top">1.4.5</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 7 November 2005");
+-->
+</SCRIPT>
+ 
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/RM_H5Z.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/RM_H5Z.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/RM_H5Z.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,715 @@
+<html>
+<head>
+<title>
+HDF5/H5Z API Specification
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+<!-- HEADER RIGHT " " -->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>H5Z: Filter and Compression Interface</h1>
+</center>
+
+<h2>Filter and Compression API Functions</h2>
+
+These functions enable the user to configure new filters
+for the local environment.
+
+<table border=0 width=80%>
+<tr><td valign=top width="30%">
+<ul>
+    <li><a href="#Compression-FilterAvail">H5Zfilter_avail</a><br>
+    <li><a href="#Compression-GetFilterInfo">H5Zget_filter_info</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top width="30%">
+<ul>
+    <li><a href="#Compression-Register">H5Zregister</a>
+</ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top width="30%">
+<ul>
+    <li><a href="#Compression-Unregister">H5Zunregister</a>
+</ul>
+</td></tr>
+</table>
+
+<br>
+<strong>The FORTRAN90 Interfaces:</strong>
+<br>
+In general, each FORTRAN90 subroutine performs exactly the same task 
+as the corresponding C function.  
+<br>
+
+<table border=0 width=80%>
+<tr><td valign=top width="30%">
+    <ul>
+    <li><a href="#Compression-FilterAvail">h5zfilter_avail_f</a>
+    </ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top width="30%">
+    <ul>
+<!--<li><a href="#Compression-Register">h5zregister_f</a><br>    -->
+    <li><a href="#Compression-GetFilterInfo">h5zget_filter_info_f</a>
+    </ul>
+</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top width="30%">
+    <ul>
+    <li><a href="#Compression-Unregister">h5zunregister_f</a>
+    </ul>
+</td></tr>
+</table>
+
+<p>
+HDF5 supports a filter pipeline that provides the capability for standard 
+and customized raw data processing during I/O operations.  
+HDF5 is distributed with a small set of standard filters such as 
+compression (gzip, SZIP, and a shuffling algorithm) and 
+error checking (Fletcher32 checksum).
+For further flexibility, the library allows a 
+user application to extend the pipeline through the 
+creation and registration of customized filters.
+<p>
+The flexibility of the filter pipeline implementation enables the 
+definition of additional filters by a user application.
+A filter
+  <ul>
+    <li>is associated with a dataset when the dataset is created,
+    <li>can be used only with chunked data
+        <br>(i.e., datasets stored in the <code>H5D_CHUNKED</code> 
+        storage layout), and
+    <li>is applied independently to each chunk of the dataset.
+  </ul>
+<p>
+The HDF5 library does not support filters for contiguous datasets 
+because of the difficulty of implementing random access for partial I/O. 
+Compact dataset filters are not supported because it would not produce 
+significant results.
+<p>
+Filter identifiers for the filters distributed with the HDF5 Library
+are as follows:
+<table align=center border=0>
+  <tr valign=top align=left>
+  <td>
+    <code>H5Z_FILTER_DEFLATE</code></td><td>The gzip compression,
+          or deflation, filter
+  </td></tr><tr><td>
+    <code>H5Z_FILTER_SZIP</code></td><td>The SZIP compression filter
+  </td></tr><tr><td>
+    <code>H5Z_FILTER_SHUFFLE</code></td><td>The shuffle algorithm filter
+  </td></tr><tr><td>
+    <code>H5Z_FILTER_FLETCHER32&nbsp;&nbsp;</code></td><td>The Fletcher32 checksum,
+          or error checking, filter
+  </td></tr>
+</table>
+Custom filters that have been registered with the library will have
+additional unique identifiers.
+<p>
+See <a href="Datasets.html"><cite>The Dataset Interface (H5D)</cite></a> 
+in the <cite>HDF5 User's Guide</cite> for further information regarding 
+data compression.
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT " " -->
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Zfilter_avail" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Compression-FilterAvail">H5Zfilter_avail</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Zfilter_avail</code>(<em>H5Z_filter_t</em> <code>filter</code>)
+  <dt><strong>Purpose:</strong>
+    <dd>Determines whether a filter is available.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Zfilter_avail</code> determines whether the filter 
+        specified in <code>filter</code> is available to the application.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>H5Z_filter_t</em>&nbsp;<code>filter&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Filter identifier.
+              See the introduction to this section of the reference manual 
+              for a list of valid filter identifiers.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5zfilter_avail_f
+    <dd>
+	<pre>
+SUBROUTINE h5zfilter_avail_f(filter, status, hdferr)
+  IMPLICIT NONE
+  INTEGER, INTENT(IN)  :: filter     ! Filter
+                                     ! Valid values are:
+                                     !    H5Z_FILTER_DEFLATE_F
+                                     !    H5Z_FILTER_SHUFFLE_F
+                                     !    H5Z_FILTER_FLETCHER32_F
+                                     !    H5Z_FILTER_SZIP_F
+  LOGICAL, INTENT(OUT) :: status     ! Flag indicating whether 
+                                     ! filter is available: 
+                                     !    .TRUE.
+                                     !    .FALSE.
+END SUBROUTINE h5zfilter_avail_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Zget_filter_info" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Compression-GetFilterInfo">H5Zget_filter_info</a>
+<dt><strong>Signature:</strong> 
+    <dd><em>herr_t</em> 
+        <code>H5Zget_filter_info</code>(
+        <em>H5Z_filter_t</em> <code>filter</code>, 
+        <em>unsigned int *</em><code>filter_config_flags</code>
+        )
+<dt><strong>Purpose:</strong>
+    <dd>Retrieves information about a filter.
+<dt><strong>Description:</strong>
+    <dd>
+      <code>H5Zget_filter_info</code> retrieves information about a filter.  
+      At present, this means that the function retrieves a 
+      filter's configuration flags, indicating whether the filter is  
+      configured to decode data, to encode data, neither, or both.
+      <p>
+      If <code>filter_config_flags</code> is not set to <small>NULL</small>
+      prior to the function call, the returned parameter contains a 
+      bit field specifying the available filter configuration. 
+      The configuration flag values can then be determined through
+      a series of bitwise <small>AND</small> operations, as described below. 
+      <p>
+      Valid filter configuration flags include the following:
+      <table>
+        <tr><td><code>&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+          <td><code>H5Z_FILTER_CONFIG_ENCODE_ENABLED</code></td>
+          <td>Encoding is enabled for this filter
+        </td></tr>
+        <tr><td>&nbsp;</td>
+          <td><code>H5Z_FILTER_CONFIG_DECODE_ENABLED</code>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td>Decoding is enabled for this filter
+        </td></tr>
+        <tr><td>&nbsp;</td>
+          <td colspan="2" align="right"><small>(These flags 
+          are defined in the HDF5 Library source code file 
+          <code>H5Zpublic.h</code>.)</small>
+        </td></tr>
+       </table>
+      A bitwise <small>AND</small> of the returned 
+      <code>filter_config_flags</code> and a valid 
+      filter configuration flag will reveal whether
+      the related configuration option is available.
+      For example, if the value of 
+      <br>
+      <code>&nbsp;&nbsp;&nbsp;&nbsp;
+            H5Z_FILTER_CONFIG_ENCODE_ENABLED 
+            &amp; 
+            filter_config_flags</code>
+      <br>
+      is true, i.e., greater than <code>0</code> (zero), 
+      the queried filter is configured to encode data;  
+      if the value is <code>FALSE</code>, 
+      i.e., equal to <code>0</code> (zero), 
+      the filter is not so configured.
+      <p>
+      If a filter is not encode-enabled, the corresponding
+      <code>H5Pset_*</code> function will return an error if the
+      filter is added to a dataset creation property list (which is
+      required if the filter is to be used to encode that dataset).
+      For example, if the <code>H5Z_FILTER_CONFIG_ENCODE_ENABLED</code>
+      flag is not returned for the SZIP filter,
+      <code>H5Z_FILTER_SZIP</code>, a call to <code>H5Pset_szip</code>
+      will fail.
+      <p>
+      If a filter is not decode-enabled, the application will not be
+      able to read an existing file encoded with that filter.
+      <p>
+      This function should be called, and the returned
+      <code>filter_config_flags</code> analyzed, before calling
+      any other function, such as <code>H5Pset_szip</code>,
+      that might require a particular filter configuration.
+
+<dt><strong>Parameters:</strong>
+    <dl>
+      <dt><em>H5Z_filter_t</em> <code>filter</code>
+        <dd>IN: Identifier of the filter to query.
+            See the introduction to this section of the reference manual
+            for a list of valid filter identifiers.
+      <dt><em>unsigned int *</em><code>filter_config_flags</code>
+        <dd>OUT: A bit field encoding the returned filter information
+    </dl>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value on success,
+        a negative value on failure.
+
+<!-- NEW PAGE -->
+<dt><strong>Fortran90 Interface:</strong> 
+    <dd>
+    <pre>
+SUBROUTINE h5zget_filter_info_f(filter, config_flags, hdferr)
+
+  IMPLICIT NONE
+  INTEGER, INTENT(IN)  :: filter        ! Filter, may be one of the
+                                        ! following:
+                                        !     H5Z_FILTER_DEFLATE_F
+                                        !     H5Z_FILTER_SHUFFLE_F
+                                        !     H5Z_FILTER_FLETCHER32_F
+                                        !     H5Z_FILTER_SZIP_F
+  INTEGER, INTENT(OUT) :: config_flags  ! Bit field indicating whether
+                                        ! a filter's encoder and/or
+                                        ! decoder are available
+  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+END SUBROUTINE h5zfilter_avail_f
+    </pre>
+        <!--<dt><strong>Non-C API(s):</strong>
+        <dd>
+
+        <img src="Graphics/Java.gif">
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td>
+		  <td valign="top" align="left">
+		    &nbsp;&nbsp;&nbsp;&nbsp;</td>
+		  <td valign="top" align="left">
+		    <strong>Fortran90</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.3</td>
+          <td valign="top">
+		    Function introduced in this release.</td>
+		  <td valign="top">&nbsp;</td>
+		  <td valign="top">
+		    Fortran subroutine introduced in this 
+			release.</td></tr>
+    </table></ul>
+</dl>
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Zregister" -->
+<hr>
+<dl>
+<dt><strong>Name:</strong> <a name="Compression-Register">H5Zregister</a>
+<dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Zregister</code>(<em>const H5Z_class_t</em> <code>filter_class</code>)
+    )
+<dt><strong>Purpose:</strong>
+    <dd>Registers new filter.
+<dt><strong>Description:</strong>
+    <dd><code>H5Zregister</code> registers a new filter with the
+      HDF5 library.  
+      <p>
+      Making a new filter available to an application is a two-step 
+      process.  The first step is to write
+      the three filter callback functions described below:
+      <code>can_apply_func</code>, <code>set_local_func</code>, and
+      <code>filter_func</code>.
+      This call to <code>H5Zregister</code>, 
+      <span class="termEmphasis">registering</span> the filter with the
+      library, is the second step.  
+      The <code>can_apply_func</code> and <code>set_local_func</code>
+      fields can be set to <code>NULL</code> 
+      if they are not required for the filter being registered.
+      <p>
+      <code>H5Zregister</code> accepts a single parameter, 
+      the <code>filter_class</code> data structure, 
+      which is defined as follows:
+      <pre>
+   &nbsp;   typedef struct H5Z_class_t {
+   &nbsp;       H5Z_filter_t filter_id;
+   &nbsp;       const char  *comment;
+   &nbsp;       H5Z_can_apply_func_t can_apply_func;
+   &nbsp;       H5Z_set_local_func_t set_local_func;
+   &nbsp;       H5Z_func_t filter_func;            
+   &nbsp;   } H5Z_class_t;
+      </pre>
+        
+      <p>
+      <code>filter_id</code> is the identifier for the new filter. 
+      This is a user-defined value between 
+      <code>H5Z_FILTER_RESERVED</code> and <code>H5Z_FILTER_MAX</code>, 
+      both of which are defined in the HDF5 source file 
+      <code>H5Zpublic.h</code>.
+      <p>
+      <code>comment</code> is used for debugging, 
+      may contain a descriptive name for the filter, 
+      and may be the null pointer. 
+      <p>
+      <code>can_apply_func</code>, described in detail below, 
+      is a user-defined callback function which determines whether 
+      the combination of the dataset creation property list values, 
+      the datatype, and the dataspace represent a valid combination 
+      to apply this filter to.
+      <p>
+      <code>set_local_func</code>, described in detail below, 
+      is a user-defined callback function which sets any parameters that 
+      are specific to this dataset, based on the combination of the 
+      dataset creation property list values, the datatype, and the 
+      dataspace.
+      <p>
+      <code>filter_func</code>, described in detail below, 
+      is a user-defined callback function which performs the action 
+      of the filter.
+      <p>
+      The statistics associated with a filter are not reset
+      by this function; they accumulate over the life of the library.
+
+      <p>
+      <strong>The callback functions</strong> 
+      <br>
+      Before <code>H5Zregister</code> can link a filter into an 
+      application, three callback functions must be defined 
+      as described in the HDF5 Library header file <code>H5Zpublic.h</code>.
+
+      <p>
+      <u>The <i>can apply</i> callback function</u> is defined as follows:<br>
+      <dir>
+          <em>typedef herr_t</em> (*<code>H5Z_can_apply_func_t</code>)
+          (<em>hid_t</em> <code>dcpl_id</code>,
+          <em>hid_t</em> <code>type_id</code>,
+          <em>hid_t</em> <code>space_id</code>)
+      </dir>
+      <p>
+      Before a dataset is created, the <i>can apply</i> callbacks for 
+      any filters used in the dataset creation property list are called
+      with the dataset's dataset creation property list, <code>dcpl_id</code>,
+      the dataset's datatype, <code>type_id</code>, and
+      a dataspace describing a chunk, <code>space_id</code>,
+      (for chunked dataset storage).
+      <p>
+      This callback must determine whether the combination of the 
+      dataset creation property list settings, the datatype, and the 
+      dataspace represent a valid combination to which to apply this filter.  
+      For example, an invalid combination may involve 
+      the filter not operating correctly on certain datatypes,
+      on certain datatype sizes, or on certain sizes of the chunk dataspace.
+      <p>
+      This callback can be the <code>NULL</code> pointer, in which case 
+      the library will assume that the filter can be applied to a dataset with 
+      any combination of dataset creation property list values, datatypes, 
+      and dataspaces.
+      <p>
+      The <i>can apply</i> callback function must return 
+      a positive value for a valid combination, 
+      zero for an invalid combination, and 
+      a negative value for an error.
+
+      <p>
+      <u>The <i>set local</i> callback function</u> is defined as follows:<br>
+      <dir>
+          <em>typedef herr_t</em> (*<code>H5Z_set_local_func_t</code>)
+          (<em>hid_t</em> <code>dcpl_id</code>,
+          <em>hid_t</em> <code>type_id</code>,
+          <em>hid_t</em> <code>space_id</code>)
+      </dir>
+      <p>
+      After the <i>can apply</i> callbacks are checked for a new dataset, 
+      the <i>set local</i> callback functions for any filters used in the 
+      dataset creation property list are called.  
+      These callbacks receive 
+      <code>dcpl_id</code>, the dataset's private copy of the dataset
+      creation property list passed in to <code>H5Dcreate</code> 
+      (i.e. not the actual property list passed in to <code>H5Dcreate</code>);
+      <code>type_id</code>, the datatype identifier passed in to 
+      <code>H5Dcreate</code>, 
+      which is not copied and should not be modified; and 
+      <code>space_id</code>, a dataspace describing the chunk 
+      (for chunked dataset storage), which should also not be modified.
+      <p>
+      The <i>set local</i> callback must set any filter parameters that are  
+      specific to this dataset, based on the combination of the 
+      dataset creation property list values, the datatype, and the dataspace.  
+      For example, some filters perform different actions based on 
+      different datatypes, datatype sizes, numbers of dimensions, 
+      or dataspace sizes.
+      <p>
+      The <i>set local</i> callback may be the <code>NULL</code> pointer, 
+      in which case, the library will assume that there are 
+      no dataset-specific settings for this filter.
+      <p>
+      The <i>set local</i> callback function must return 
+      a non-negative value on success and 
+      a negative value for an error.
+
+      <p>
+      <u>The <i>filter operation</i> callback function</u>, 
+      defining the filter's operation on the data, is defined as follows:
+      <dir>
+          <em>typedef size_t</em> (*<code>H5Z_func_t</code>)
+          (<em>unsigned int</em> <code>flags</code>,
+          <em>size_t</em> <code>cd_nelmts</code>,
+          <em>const unsigned int</em> <code>cd_values[]</code>,
+          <em>size_t</em> <code>nbytes</code>,
+          <em>size_t *</em><code>buf_size</code>,
+          <em>void **</em><code>buf</code>)
+      </dir>
+
+      <p>
+      The parameters <code>flags</code>, <code>cd_nelmts</code>, 
+      and <code>cd_values</code> are the same as for the function
+      <a href="RM_H5P.html#Property-SetFilter"><code>H5Pset_filter</code></a>.
+      The one exception is that an additional flag, 
+      <code>H5Z_FLAG_REVERSE</code>, is set when 
+      the filter is called as part of the input pipeline. 
+      <p>
+      The parameter <code>*buf</code> points to the input buffer 
+      which has a size of <code>*buf_size</code> bytes,
+      <code>nbytes</code> of which are valid data. 
+      <p>
+      The filter should perform the transformation in place if
+      possible.  If the transformation cannot be done in place, 
+      then the filter should allocate a new buffer with
+      <code>malloc()</code> and assign it to <code>*buf</code>,
+      assigning the allocated size of that buffer to
+      <code>*buf_size</code>. 
+      The old buffer should be freed by calling <code>free()</code>.
+      <p>
+      If successful, the <i>filter operation</i> callback function 
+      returns the number of valid bytes of data contained in <code>*buf</code>.
+      In the case of failure, the return value is <code>0</code> (zero)
+      and all pointer arguments are left unchanged.
+<dt><strong>Note:</strong>
+    <dd>The <code>H5Zregister</code> interface is substantially revised 
+      from the HDF5 Release 1.4.x series.  
+      The <code>H5Z_class_t</code> struct and 
+      the <i>set local</i> and <i>can apply</i> callback functions
+      first appeared in HDF5 Release 1.6.
+<dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>const&nbsp;H5Z_class_t</em>&nbsp;<code>filter_class&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Struct containing filter-definition information.</td></tr>
+    </table></ul>
+<dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+<dt><strong>Fortran90 Interface:</strong>
+    <dd>None.
+<!--
+	<pre>
+
+	</pre>
+-->		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+<dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    This function is substantially revised in 
+			Release 1.6.0 with a new <code>H5Z_class_t</code> 
+			struct and new <em>set local</em> and <em>can apply</em> 
+			callback functions.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "H5Zunregister" -->
+<hr>
+<dl>
+  <dt><strong>Name:</strong> <a name="Compression-Unregister">H5Zunregister</a>
+  <dt><strong>Signature:</strong>
+    <dd><em>herr_t</em> <code>H5Zunregister</code>(<em>H5Z_filter_t</em> <code>filter</code>)
+  <dt><strong>Purpose:</strong>
+    <dd>Unregisters a filter.
+  <dt><strong>Description:</strong>
+    <dd><code>H5Zunregister</code> unregisters the filter 
+        specified in <code>filter</code>.  
+	<p>
+	After a call to <code>H5Zunregister</code>, the filter
+	specified in <code>filter</code> will no longer be 
+	available to the application.
+  <dt><strong>Parameters:</strong>
+    <ul><table>
+        <tr>
+		    <td valign="top"><em>H5Z_filter_t</em>&nbsp;<code>filter&nbsp;&nbsp;&nbsp;&nbsp;</code></td>
+            <td valign="top">IN: Identifier of the filter to be unregistered.
+                See the introduction to this section of the reference manual 
+                for a list of identifiers for standard filters
+                distributed with the HDF5 Library.</td></tr>
+    </table></ul>
+  <dt><strong>Returns:</strong>
+    <dd>Returns a non-negative value if successful;
+        otherwise returns a negative value.
+  <dt><strong>Fortran90 Interface:</strong> h5zunregister_f
+    <dd>
+	<pre>
+SUBROUTINE h5zunregister_f(filter, hdferr) 
+  IMPLICIT NONE
+  INTEGER, INTENT(IN)  :: filter  ! Filter; one of the possible values:
+                                  !    H5Z_FILTER_DEFLATE_F
+                                  !    H5Z_FILTER_SHUFFLE_F
+                                  !    H5Z_FILTER_FLETCHER32_F
+                                  !    H5Z_FILTER_SZIP_F
+  INTEGER, INTENT(OUT) :: hdferr  ! Error code
+                                  ! 0 on success, and -1 on failure
+END SUBROUTINE h5zunregister_f
+	</pre>		
+		
+		<!--<dt><strong>Non-C API(s):</strong>
+    	<dd>
+        
+        <img src="Graphics/Java.gif"> 
+        <img src="Graphics/C++.gif">
+        -->
+  <dt><strong>History:</strong>
+    <ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>C</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Function introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" -->
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified:  2 September 2004");
+-->
+</SCRIPT>
+ 
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/References.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/References.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/References.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,653 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<title>Reference (H5R) and Identifier Interfaces (H5I)</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>The Reference Interface (H5R) and <br> the Identifier Interface (H5I)</h1>
+
+<h2>1. Introduction</h2>
+
+This document discusses the kinds of references implemented 
+(and planned) in HDF5 and the functions implemented (and planned) 
+to support them.
+
+
+<h2>2. References</h2>
+
+This section contains an overview of the kinds of references 
+implemented, or planned for implementation, in HDF5.
+
+<p>
+
+<dl>
+    <dt>Object reference
+        <dd>Reference to an entire object in the current HDF5 file.
+            <p>
+            An object reference points to an entire object in the 
+            current HDF5 file by storing the relative file address 
+            (OID) of the object header for the object pointed to.  
+            The relative file address of an object header is
+            constant for the life of the object.  
+            An object reference is of a fixed size in the file.
+            <p>
+    <dt>Dataset region reference
+        <dd>Reference to a specific dataset region.
+            <p>
+            A dataset region reference points to a region of a 
+            dataset in the current HDF5 file by storing the OID 
+            of the dataset and the global heap offset of the 
+            region referenced.  The region referenced is located 
+            by retrieving the coordinates of the areas in the 
+            region from the global heap.  A dataset region 
+            reference is of a variable size in the file.
+</dl>
+
+
+<b>Note:</b> All references are treated as soft links for the 
+purposes of reference counting.  The library does not keep track of 
+reference links and they may dangle if the object they refer to 
+is deleted, moved, or not yet available.
+
+
+<h2>3. Reference Types</h2>
+
+Valid HDF5 reference types for use in the H5R functions
+are as follows:
+
+<center>
+<table>
+<tr><th align=left>Reference Type</th><th align=left>Value&nbsp;&nbsp;</th><th align=left>Description</th></tr>
+<!-- NOT USER-LEVEL INFORMATION; DELETED FROM HDF5 USER'S GUIDE
+<tr><td><code>H5R_BADTYPE</code></td>
+    <td align=right><code>-1&nbsp;&nbsp;</code></td>
+    <td>Invalid reference type</td></tr>
+-->
+<tr><td><code>H5R_OBJECT</code></td>
+    <td align=right><code>0&nbsp;&nbsp;</code></td>
+    <td>Object reference</td></tr>
+<tr><td><code>H5R_DATASET_REGION</code></td>
+    <td align=right><code>1&nbsp;&nbsp;</code></td>
+    <td>Dataset region reference</td></tr>
+</table>
+</center>
+
+
+<h2>4. Functions</h2>
+
+Five functions, four in the H5R interface and one in the 
+H5I interface,  have been implemented to support references.
+The H5I function is also useful outside the context of references.
+<p>
+<dl>
+    <dt><em>herr_t</em> <code>H5Rcreate(</code><em>void *</em><code>reference,</code>
+        <em>hid_t</em> <code>loc_id,</code>
+        <em>const char *</em><code>name,</code>
+        <em>H5R_type_t</em> <code>type,</code>
+        <em>hid_t</em> <code>space_id)</code>
+    <dd><code>H5Rcreate</code> creates an object which is a 
+        particular type of reference (specified with the 
+        <code>type</code> parameter) to some file object and/or 
+        location specified with the <code>space_id</code> parameter.  
+        For dataset region references, the selection specified 
+        in the dataspace is the portion of the dataset which 
+        will be referred to.
+        <p>
+
+    <dt><em>hid_t</em> <code>H5Rdereference(</code><em>hid_t</em> <code>dset,</code>
+        <em>H5R_type_t</em> <code>rtype,</code>
+        <em>void *</em><code>reference)</code>
+    <dd><code>H5Rdereference</code> opens the object referenced 
+        and returns an identifier for that object.
+        The parameter <code>reference</code> specifies a reference of 
+        type <code>rtype</code> that is stored in the dataset 
+        <code>dset</code>.
+        <p>
+
+    <dt><em>int</em> <code>H5Rget_object_type(</code><em>hid_t</em> <code>obj_id,</code>
+        <em>void *</em><code>reference)</code>
+    <dd><code>H5Rget_object_type</code> retrieves the type of object 
+        that an object reference points to.
+        The parameter <code>obj_id</code> specifies the dataset 
+        containing the reference object or the location identifier 
+        of the object that the dataset is located within.
+        The parameter <code>reference</code> specifies the 
+        reference being queried.
+        <p>
+
+    <dt><em>H5S_t</em> <code>H5Rget_region(</code><em>H5D_t</em> <code>dataset,</code>
+        <em>H5R_type_t</em> <code>type,</code>
+        <em>void *</em><code>reference)</code>
+    <dd><code>H5Rget_region</code> creates a copy of dataspace of
+        the dataset that is pointed to and defines a selection in 
+        the copy which is the location (or region) pointed to.
+        The parameter <code>ref</code> specifies a reference of 
+        type <code>rtype</code> that is stored in the dataset 
+        <code>dset</code>.
+        <p>
+
+    <dt><em>H5I_type_t</em> <code>H5Iget_type(</code><em>hid_t</em> <code>id)</code>
+    <dd>Returns the type of object referred to by the 
+        identifier <code>id</code>.  Valid return values appear 
+        in the following list:
+        <center>
+        <table>
+        <tr valign=bottom><td><code>H5I_FILE</code></td>
+            <td>File objects</td></tr>
+        <tr valign=bottom><td><code>H5I_GROUP</code></td>
+            <td>Group objects</td></tr>
+        <tr valign=bottom><td><code>H5I_DATATYPE</code></td>
+            <td>Datatype objects</td></tr>
+        <tr valign=bottom><td><code>H5I_DATASPACE</code></td>
+            <td>Dataspace objects</td></tr>
+        <tr valign=bottom><td><code>H5I_DATASET</code></td>
+            <td>Dataset objects</td></tr>
+        <tr valign=bottom><td><code>H5I_ATTR</code></td>
+            <td>Attribute objects</td></tr>
+        </table>
+        </center>
+        <p>
+        This function was inspired by the need of users to figure 
+        out which type of object closing function 
+        (<code>H5Dclose</code>, <code>H5Gclose</code>, etc.) 
+        to call after a call to <code>H5Rdereference</code>, 
+        but it is also of general use.
+        <p>
+</dl>
+
+
+
+<h2>5. Examples</h2>
+
+<b>Object Reference Writing Example</b>
+<br>
+Create a dataset which has links to other datasets as part 
+of its raw data and write the dataset to the file.
+<p>
+
+<pre>
+{
+    hid_t file1;
+    hid_t dataset1;
+    hid_t datatype, dataspace;
+    char buf[128];
+    hobj_ref_t link;
+    hobj_ref_t data[10][10];
+    int rank;
+    size_t dimsf[2];
+    int i, j;
+
+    /* Open the file */
+    file1=H5Fopen("example.h5", H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* Describe the size of the array and create the data space */
+    rank=2;
+    dimsf[0] = 10;
+    dimsf[1] = 10;
+    dataspace = H5Screate_simple(rank, dimsf, NULL); 
+
+    /* Define datatype */
+    datatype = H5Tcopy(H5T_STD_REF_OBJ);
+
+    /* Create a dataset */
+    dataset1=H5Dcreate(file1,"Dataset One",datatype,dataspace,H5P_DEFAULT);
+
+    /* Construct array of OIDs for other datasets in the file */
+    /* somewhat hokey and artificial, but demonstrates the point */
+    for(i=0; i<10; i++)
+        for(j=0; j<10; j++)
+          {
+            sprintf(buf,"/Group/Linked Set %d-%d",i,j);
+            if(H5Rcreate(&link,file1,buf,H5R_OBJECT,-1)>0)
+                data[i][j]=link;
+          } /* end for */
+
+    /* Write the data to the dataset using default transfer properties.  */
+    H5Dwrite(dataset, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
+
+    /* Close everything */
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Dclose(dataset1);
+    H5Fclose(file1);
+}
+</pre>
+
+
+<b>Object Reference Reading Example</b>
+<br>
+Open a dataset which has links to other datasets as part of 
+its raw data and read in those links.
+<p>
+
+<pre>
+{
+    hid_t file1;
+    hid_t dataset1, tmp_dset;
+    href_t data[10][10];
+    int i, j;
+
+    /* Open the file */
+    file1=H5Fopen("example.h5", H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* Open the dataset */
+    dataset1=H5Dopen(file1,"Dataset One",H5P_DEFAULT);
+
+    /* 
+     * Read the data to the dataset using default transfer properties.
+     * (we are assuming the dataset is the same and not querying the
+     *  dimensions, etc.)
+     */
+    H5Dread(dataset, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
+
+    /* Analyze array of OIDs of linked datasets in the file */
+    /* somewhat hokey and artificial, but demonstrates the point */
+    for(i=0; i<10; i++)
+        for(j=0; j<10; i++)
+          {
+            if((tmp_dset=H5Rdereference(dataset, H5T_STD_REF_OBJ, data[i][j]))>0)
+              {
+                  <perform operations on linked dataset>
+              } /* end if */
+            H5Dclose(tmp_dset);
+          } /* end for */
+
+
+    /* Close everything */
+    H5Dclose(dataset1);
+    H5Fclose(file1);
+}
+</pre>
+
+
+<b>Dataset Region Reference Writing Example</b>
+<br>
+Create a dataset which has links to other dataset regions 
+(single elements in this case) as part of its raw data and 
+write the dataset to the file.
+<p>
+
+<pre>
+{
+    hid_t file1;
+    hid_t dataset1, dataset2;
+    hid_t datatype, dataspace1, dataspace2;
+    char buf[128];
+    href_t link;
+    href_t data[10][10];     /* HDF5 reference type */
+    int rank;
+    size_t dimsf[2];
+    hsize_t start[3],count[3];
+    int i, j;
+
+    /* Open the file */
+    file1=H5Fopen("example.h5", H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* Describe the size of the array and create the data space */
+    rank=2;
+    dimsf[0] = 10;
+    dimsf[1] = 10;
+    dataspace1 = H5Screate_simple(rank, dimsf, NULL); 
+
+    /* Define Dataset Region Reference datatype */
+    datatype = H5Tcopy(H5T_STD_REF_DATAREG);
+
+    /* Create a dataset */
+    dataset1=H5Dcreate(file1,"Dataset One",datatype,dataspace1,H5P_DEFAULT);
+
+    /* Construct array of OIDs for other datasets in the file */
+    /* (somewhat artificial, but demonstrates the point) */
+    for(i=0; i<10; i++)
+        for(j=0; j<10; i++)
+          {
+            sprintf(buf,"/Group/Linked Set %d-%d",i,j);
+            
+            /* Get the dataspace for the object to point to */
+            dataset2=H5Dopen(file1,buf,H5P_DEFAULT);
+            dataspace2=H5Dget_space(dataspace2);
+
+            /* Select the region to point to */
+            /* (could be different region for each pointer) */
+            start[0]=5; start[1]=4; start[2]=3;
+            count[0]=2; count[1]=4; count[2]=1;
+            H5Sselect_hyperslab(dataspace2,H5S_SELECT_SET,start,NULL,count,NULL);
+
+            if(H5Rcreate(&link,file1,buf,H5R_REF_DATAREG,dataspace2)>0)
+                /* Store the reference */
+                data[i][j]=link;
+
+            H5Sclose(dataspace2);
+            H5Dclose(dataspace2);
+          } /* end for */
+
+    /* Write the data to the dataset using default transfer properties.  */
+    H5Dwrite(dataset, H5T_STD_REF_DATAREG, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
+
+    /* Close everything */
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Dclose(dataset1);
+    H5Fclose(file1);
+}
+</pre>
+
+
+<b>Dataset Region Reference Reading Example</b>
+<br>
+Open a dataset which has links to other datasets regions 
+(single elements in this case) as part of its raw data and 
+read in those links.
+<p>
+
+<pre>
+{
+    hid_t file1;
+    hid_t dataset1, tmp_dset;
+    hid_t dataspace;
+    href_t data[10][10];     /* HDF5 reference type */
+    int i, j;
+
+    /* Open the file */
+    file1=H5Fopen("example.h5", H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* Open the dataset */
+    dataset1=H5Dopen(file1,"Dataset One",H5P_DEFAULT);
+
+    /* 
+     * Read the data to the dataset using default transfer properties.
+     * (we are assuming the dataset is the same and not querying the
+     *  dimensions, etc.)
+     */
+    H5Dread(dataset, H5T_STD_REF_DATAREG, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
+
+    /* Analyze array of OIDs of linked datasets in the file */
+    /* (somewhat artificial, but demonstrates the point) */
+    for(i=0; i<10; i++)
+        for(j=0; j<10; i++)
+          {
+            if((tmp_dset=H5Rdereference(dataset, H5D_STD_REF_DATAREG,data[i][j]))>0)
+              {
+                  /* Get the dataspace with the pointed to region selected */
+                  dataspace=H5Rget_space(data[i][j]);
+
+                  <perform operation on linked dataset region>
+
+                  H5Sclose(dataspace);
+              } /* end if */
+            H5Dclose(tmp_dset);
+          } /* end for */
+
+
+    /* Close everything */
+    H5Dclose(dataset1);
+    H5Fclose(file1);
+}
+</pre>
+<!--
+
+<h1>Material to Be Omitted!!!</h1>
+
+Additional material above will also need to be deleted or 
+commented out.
+<p>
+
+<h2>"Kinds of Reference" Information</h2>
+
+<dl>
+    <dt>Dataset Offset Reference
+        <dd>Reference to a specific byte sequence in a dataset (3)
+    <dt>Disk Offset Reference
+        <dd>Reference to a specific byte sequence in a file (3)
+    <dt>External Object Reference
+        <dd>Reference to an entire object in another HDF5 file (3)
+    <dt>External Dataset Region Reference
+        <dd>Reference an a specific dataset region in another HDF5 file (3)
+    <dt>External Dataset Offset Reference
+        <dd>Reference to a specific byte sequence in a dataset in 
+            another HDF5 file (3)
+    <dt>External Disk Offset Reference
+        <dd>Reference to a specific byte sequence in another HDF5 file (3)
+    <dt>Generic Reference
+        <dd>A reference which may be any of the types defined above. (3)
+</dl>
+
+Notes:
+<ul>
+    <li>1 - Planned for in final release.
+    <li>2 - Most useful reference types to tackle next
+    <li>3 - Optional reference types.
+</ul>
+
+<h2>Comments</h2>
+<pre>
+    Reference types are atomic types and may be included as fields in compound
+        datatypes.
+
+    There are (at least) three levels of reference strength:
+        Weak - We allow the user to store any type of reference in an array
+            of references.  (u.e., the array of references in the example above
+            could be a mix of Object, Dataset Region and Internal references)
+        Medium - We force the user to stick with a particular type of
+            reference within a dataset, but the datasets pointed to (with
+            Object and Dataset Region references) may be of any datatype
+            or dataspace.
+        Strong - We force the user to stick with a particular type of
+            reference and Object and Dataset Region references must point to
+            datasets with the same datatype.
+        Extra Strong - We force the user to stick with a particular type of
+            reference and Object and Dataset Region references must point to
+            datasets with the same datatype <i>and</i> dataspace.
+
+    The library is currently implemented with "medium" strength references.
+</pre>
+
+
+<h2>Reference Type</h2>
+
+<center>
+<table>
+<tr><td><code>H5R_MAXTYPE</code></td>
+    <td align=right><code>3&nbsp;&nbsp;</code></td>
+    <td>Highest type in group (invalid as true type)</td></tr>
+</table>
+</center>
+
+
+<h2>Information Regarding Specific Kinds of References</h2>
+
+<dl>
+<dt>Dataset Offset Reference
+    <dd>Points to a sequence of bytes within a dataset in
+        the current HDF5 file by storing the OID of the dataset and the byte
+        length and offset of the sequence within the dataset.  The offset is
+        the logical byte offset within the dataset, meaning that the data is
+        de-compressed before returning the sequence of bytes requested.  No
+        interpretation of the data at that location is provided.  However,
+        if the dataset is extendible and the size of the dimensions are changed,
+        the element(s) that the sequence is located within may vary.  Fixed size
+        in file.
+
+<dt>Disk Offset Reference
+    <dd>Points to a sequence of bytes in the current
+        HDF5 file by storing the byte length and offset of the sequence within
+        the file, relative to the super block (as are all the other high-level
+        addresses used in the file).  The offset is the absolute byte offset
+        within the file, no interpretation of the data at that location is
+        provided.  Fixed size in file.
+
+<dt>External Object Reference
+    <dd>Points to an entire object in another HDF5 file by
+        storing a global heap offset which points to the URL of the external
+        file and the OID of the object pointed to.  Variable size in file.
+
+<dt>External Dataset Region Reference
+    <dd>Points to a region of a dataset in
+        another HDF5 file by storing a global heap offset which points to the
+        URL of the external file, OID of the dataset and the coordinates of the
+        region.  Variable size in file.
+
+<dt>External Dataset Offset Reference
+    <dd>Points to a sequence of bytes within a
+        dataset in another HDF5 file by storing a global heap offset which
+        points to the URL of the external file, the OID of the dataset and the
+        byte length and offset of the sequence within the dataset.  The offset
+        is the logical byte offset within the dataset, meaning that the data is
+        de-compressed before returning the sequence of bytes requested.
+        However, if the dataset is not stored contiguously and the size of the
+        dimensions are changed, the element(s) that the sequence is located
+        within may vary.  Variable size in file.
+
+<dt>External Disk Offset Reference
+    <dd>Points to a sequence of bytes in another
+        HDF5 file by storing a global heap reference which points to the URL
+        of the external file and the byte length and offset of the sequence
+        within the file.  The offset is the absolute byte offset within the
+        file, no interpretation of the data at that location is provided.
+        Variable size in file.
+
+<dt>Generic Reference
+    <dd>A reference which may contain any of the other
+        references defined above.  (Mostly useful for implementing "weak"
+        strength pointers within the medium strength model we are using)
+        Variable size in file.
+
+</dl>
+
+<h2>Implementation Details</h2>
+
+<dl>
+<dt>File Storage
+    <dd>In order to efficiently index an array, each element must be the
+        same size when stored in the dataset on disk.  Fixed-sized references
+        will be stored directly in the dataset array on disk; variable-sized
+        references will have a fixed-size head offset stored in the array on
+        disk with a file heap used to store the actual variable-sized
+        information stored in the heap.
+    
+<dt>Memory Storage
+    <dd>Each <code>href_t</code> object in memory is a struct containing 
+        a pointer type and union of information required for each 
+        pointer type.  
+        Information in this structure is not designed for users to view.  
+        Non-C APIs may have to mangle this structure in some way, in order 
+        to provide users with access to references in a language-appropriate 
+        way.
+</dl>
+
+-->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.4.5, February 2003
+</address>
+ 
+Last modified: 2 August 2004
+ 
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/Basic_perform.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/Basic_perform.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/Basic_perform.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,96 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Description of the three basic performance tools</title>
+  </head>
+
+  <body>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+  <!-- separator -->
+  <!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+  <!-- separator -->
+  <!-- #EndLibraryItem -->
+ 
+  <h1>Description of the three basic performance tools</h1>
+
+    <h2>iopipe</h2>
+  <p>Times reads and writes to an HDF5 2-d dataset and compares that with
+  reads and writes using POSIX I/O.  Reports seven measurements in
+  terms of CPU user time, CPU system time, elapsed time, and
+  bandwidth:
+
+
+<DL>
+<DD>fill raw: time it takes to memset() a buffer.</DD>
+<DD> fill hdf5: time it takes to read from a dataset never written</DD>
+<DD>out raw: time it takes to write using POSIX I/O</DD>
+<DD>out hdf5: time it takes to write using H5Dwrite()</DD>
+<DD>in raw: time it takes to read data just written using POSIX I/O</DD>
+<DD>in hdf5: time it takes to H5Dread() data written with H5Dwrite()</DD>
+<DD>in hdf5 partial: time it takes to H5Dread() the "center" area.</DD>
+</DL>
+
+
+  <p>This is a pretty stupid performance test. It accesses the same area
+  of file and memory over and over and the file size is way too
+  small. But it is good at showing how much overhead there is in the
+  library itself.
+
+
+  <h2>chunk</h2>
+  <p>Determines how efficient the raw data cache is for various access
+  patterns of a chunked dataset, both reading and writing.  The access
+  pattern is either (a) we access the entire dataset by moving a window
+  across and down a 2-d dataset in row-major order a full window
+  height and width at a time, or (b) we access part of a dataset by moving
+  the window diagonally from the (0,0) corner to the opposite corner
+  by half the window height and width at a time. The window is
+  measured in terms of the chunk size.
+
+
+  <p>The result is:
+    <br>A table written to stdout that contains the window size as a
+    fraction of the chunk size and the efficiencey of the cache (i.e.,
+    number of bytes accessed by H5Dread() or H5Dwrite() divided by the
+    number of bytes of the dataset actually read or written by lower
+    layers.
+
+
+  <p>A gnuplot script and data files which can be displayed by running
+    gnuplot and typing the command `load "x-gnuplot"'.
+
+
+  <h2>overhead</h2>
+  <p>Measures the overhead used by the B-tree for indexing chunked
+  datasets. As data is written to a chunked dataset the B-tree
+  grows and its nodes get split.  When a node splits one of three
+  ratios are used to determine how many items from the original node
+  go into the new left and right nodes, and these ratios affect the
+  total size of the B-tree in a way that depends on the order that
+  data is written to the dataset.
+
+
+  <p>Invoke as `overhead usage' for more information.
+  <hr>
+    <address><a href="mailto:matzke at llnl.gov">Robb Matzke</a></address>
+<!-- Created: Tue Mar 17 11:13:35 EST 1998 -->
+<!-- hhmts start -->
+Last modified: Jun 4, 2003
+<!-- hhmts end -->
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/BigDataSmMach.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/BigDataSmMach.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/BigDataSmMach.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Big Datasets on Small Machines</title>
+  </head>
+
+  <body>
+  
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+  <!-- separator -->
+  <!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+  <!-- separator -->
+  <!-- #EndLibraryItem -->
+ 
+  <h1>Big Datasets on Small Machines</h1>
+
+    <h2>1. Introduction</h2>
+
+    <p>The HDF5 library is able to handle files larger than the
+      maximum file size, and datasets larger than the maximum memory
+      size.  For instance, a machine where <code>sizeof(off_t)</code>
+      and <code>sizeof(size_t)</code> are both four bytes can handle
+      datasets and files as large as 18x10^18 bytes.  However, most
+      Unix systems limit the number of concurrently open files, so a
+      practical file size limit is closer to 512GB or 1TB.
+
+    <p>Two "tricks" must be imployed on these small systems in order
+      to store large datasets.  The first trick circumvents the
+      <code>off_t</code> file size limit and the second circumvents
+      the <code>size_t</code> main memory limit.
+
+    <h2>2. File Size Limits</h2>
+
+    <p>Systems that have 64-bit file addresses will be able to access
+      those files automatically.  One should see the following output
+      from configure:
+
+    <p><code><pre>
+checking size of off_t... 8
+    </pre></code>
+
+    <p>Also, some 32-bit operating systems have special file systems
+      that can support large (&gt;2GB) files and HDF5 will detect
+      these and use them automatically.  If this is the case, the
+      output from configure will show:
+
+    <p><code><pre>
+checking for lseek64... yes
+checking for fseek64... yes
+    </pre></code>
+
+    <p>Otherwise one must use an HDF5 file family.  Such a family is
+      created by setting file family properties in a file access
+      property list and then supplying a file name that includes a
+      <code>printf</code>-style integer format.  For instance:
+
+    <p><code><pre>
+hid_t plist, file;
+plist = H5Pcreate (H5P_FILE_ACCESS);
+H5Pset_family (plist, 1&lt;&lt;30, H5P_DEFAULT);
+file = H5Fcreate ("big%03d.h5", H5F_ACC_TRUNC, H5P_DEFAULT, plist);
+    </code></pre>
+
+    <p>The second argument (<code>1&lt;&lt;30</code>) to
+      <code>H5Pset_family()</code> indicates that the family members
+      are to be 2^30 bytes (1GB) each although we could have used any
+      reasonably large value.  In general, family members cannot be
+      2GB because writes to byte number 2,147,483,647 will fail, so
+      the largest safe value for a family member is 2,147,483,647.
+      HDF5 will create family members on demand as the HDF5 address
+      space increases, but since most Unix systems limit the number of
+      concurrently open files the effective maximum size of the HDF5
+      address space will be limited (the system on which this was
+      developed allows 1024 open files, so if each family member is
+      approx 2GB then the largest HDF5 file is approx 2TB).
+
+    <p>If the effective HDF5 address space is limited then one may be
+      able to store datasets as external datasets each spanning
+      multiple files of any length since HDF5 opens external dataset
+      files one at a time.  To arrange storage for a 5TB dataset split
+      among 1GB files one could say:
+
+    <p><code><pre>
+hid_t plist = H5Pcreate (H5P_DATASET_CREATE);
+for (i=0; i&lt;5*1024; i++) {
+   sprintf (name, "velocity-%04d.raw", i);
+   H5Pset_external (plist, name, 0, (size_t)1&lt;&lt;30);
+}
+    </code></pre>
+
+    <h2>3. Dataset Size Limits</h2>
+
+    <p>The second limit which must be overcome is that of
+      <code>sizeof(size_t)</code>.  HDF5 defines a data type called
+      <code>hsize_t</code> which is used for sizes of datasets and is,
+      by default, defined as <code>unsigned long long</code>.
+
+    <p>To create a dataset with 8*2^30 4-byte integers for a total of
+      32GB one first creates the dataspace.  We give two examples
+      here: a 4-dimensional dataset whose dimension sizes are smaller
+      than the maximum value of a <code>size_t</code>, and a
+      1-dimensional dataset whose dimension size is too large to fit
+      in a <code>size_t</code>.
+
+    <p><code><pre>
+hsize_t size1[4] = {8, 1024, 1024, 1024};
+hid_t space1 = H5Screate_simple (4, size1, size1);
+
+hsize_t size2[1] = {8589934592LL};
+hid_t space2 = H5Screate_simple (1, size2, size2};
+    </pre></code>
+
+    <p>However, the <code>LL</code> suffix is not portable, so it may
+      be better to replace the number with
+      <code>(hsize_t)8*1024*1024*1024</code>.
+
+    <p>For compilers that don't support <code>long long</code> large
+      datasets will not be possible.  The library performs too much
+      arithmetic on <code>hsize_t</code> types to make the use of a
+      struct feasible.
+
+    <hr>
+    <address><a href="mailto:matzke at llnl.gov">Robb Matzke</a></address>
+<!-- Created: Fri Apr 10 13:26:04 EDT 1998 -->
+<!-- hhmts start -->
+Last modified: Sun Jul 19 11:37:25 EDT 1998
+<!-- hhmts end -->
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_1000x1000.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_1000x1000.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_250x250.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_250x250.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_499x499.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_499x499.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_5000x1000.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_5000x1000.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_500x500.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_500x500.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_p1.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChStudy_p1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChunkingStudy.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChunkingStudy.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/ChunkingStudy.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,210 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Testing the chunked layout of HDF5</title>
+  </head>
+
+  <body>
+  
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<i> 
+This document is of interest primarily for its discussion of the
+HDF team's motivation for implementing raw data caching.  
+At a more abstract level, the discussion of the principles of 
+data chunking is also of interest, but a more recent discussion 
+of that topic can be found in 
+<a href="../Chunking.html">Dataset Chunking Issues</a> in the 
+<cite><a href="../H5.user.html">HDF5 User's Guide</a></cite>.
+
+The performance study described here predates the current chunking 
+implementation in the HDF5 library, so the particular performance data 
+is no longer apropos. 
+&nbsp;&nbsp;&nbsp;&nbsp; --&nbsp;the Editor
+</i>  
+
+    <h1>Testing the chunked layout of HDF5</h1>
+
+    <p>This is the results of studying the chunked layout policy in
+      HDF5. A 1000 by 1000 array of integers was written to a file
+      dataset extending the dataset with each write to create, in the
+      end, a 5000 by 5000 array of 4-byte integers for a total data
+      storage size of 100 million bytes.
+
+    <p>
+      <center>
+	<img alt="Order that data was written" src="ChStudy_p1.gif">
+	<br><b>Fig 1: Write-order of Output Blocks</b>
+      </center>
+
+    <p>After the array was written, it was read back in blocks that
+      were 500 by 500 bytes in row major order (that is, the top-left
+      quadrant of output block one, then the top-right quadrant of
+      output block one, then the top-left quadrant of output block 2,
+      etc.).
+
+    <p>I tried to answer two questions:
+    <ul>
+      <li>How does the storage overhead change as the chunk size
+	changes?
+      <li>What does the disk seek pattern look like as the chunk size
+	changes?
+    </ul>
+
+    <p>I started with chunk sizes that were multiples of the read
+      block size or k*(500, 500).
+
+    <p>
+  <center>
+	<table border>
+	  <caption align=bottom>
+	    <b>Table 1: Total File Overhead</b>
+	  </caption>
+	  <tr>
+	    <th>Chunk Size (elements)</th>
+	    <th>Meta Data Overhead (ppm)</th>
+	    <th>Raw Data Overhead (ppm)</th>
+	  </tr>
+
+	  <tr align=center>
+	    <td>500 by 500</td>
+	    <td>85.84</td>
+	    <td>0.00</td>
+	  </tr>
+	  <tr align=center>
+	    <td>1000 by 1000</td>
+	    <td>23.08</td>
+	    <td>0.00</td>
+	  </tr>
+	  <tr align=center>
+	    <td>5000 by 1000</td>
+	    <td>23.08</td>
+	    <td>0.00</td>
+	  </tr>
+	  <tr align=center>
+	    <td>250 by 250</td>
+	    <td>253.30</td>
+	    <td>0.00</td>
+	  </tr>
+	  <tr align=center>
+	    <td>499 by 499</td>
+	    <td>85.84</td>
+	    <td>205164.84</td>
+	  </tr>
+	</table>
+  </center>
+
+    <hr>
+    <p>
+      <center>
+	<img alt="500x500" src="ChStudy_500x500.gif">
+	<br><b>Fig 2: Chunk size is 500x500</b>
+      </center>
+
+    <p>The first half of Figure 2 shows output to the file while the
+      second half shows input.  Each dot represents a file-level I/O
+      request and the lines that connect the dots are for visual
+      clarity. The size of the request is not indicated in the
+      graph. The output block size is four times the chunk size which
+      results in four file-level write requests per block for a total
+      of 100 requests. Since file space for the chunks was allocated
+      in output order, and the input block size is 1/4 the output
+      block size, the input shows a staircase effect.  Each input
+      request results in one file-level read request. The downward
+      spike at about the 60-millionth byte is probably the result of a
+      cache miss for the B-tree and the downward spike at the end is
+      probably a cache flush or file boot block update.
+
+    <hr>
+    <p>
+      <center>
+	<img alt="1000x1000" src="ChStudy_1000x1000.gif">
+	<br><b>Fig 2: Chunk size is 1000x1000</b>
+      </center>
+
+    <p>In this test I increased the chunk size to match the output
+      chunk size and one can see from the first half of the graph that
+      25 file-level write requests were issued, one for each output
+      block.  The read half of the test shows that four times the
+      amount of data was read as written.  This results from the fact
+      that HDF5 must read the entire chunk for any request that falls
+      within that chunk, which is done because (1) if the data is
+      compressed the entire chunk must be decompressed, and (2) the
+      library assumes that a chunk size was chosen to optimize disk
+      performance.
+
+    <hr>
+    <p>
+      <center>
+	<img alt="5000x1000" src="ChStudy_5000x1000.gif">
+	<br><b>Fig 3: Chunk size is 5000x1000</b>
+      </center>
+
+    <p>Increasing the chunk size further results in even worse
+      performance since both the read and write halves of the test are
+      re-reading and re-writing vast amounts of data.  This proves
+      that one should be careful that chunk sizes are not much larger
+      than the typical partial I/O request.
+
+    <hr>
+    <p>
+      <center>
+	<img alt="250x250" src="ChStudy_250x250.gif">
+	<br><b>Fig 4: Chunk size is 250x250</b>
+      </center>
+
+    <p>If the chunk size is decreased then the amount of data
+      transfered between the disk and library is optimal for no
+      caching, but the amount of meta data required to describe the
+      chunk locations increases to 250 parts per million.  One can
+      also see that the final downward spike contains more file-level
+      write requests as the meta data is flushed to disk just before
+      the file is closed.
+
+    <hr>
+    <p>
+      <center>
+	<img alt="499x499" src="ChStudy_499x499.gif">
+	<br><b>Fig 4: Chunk size is 499x499</b>
+      </center>
+
+    <p>This test shows the result of choosing a chunk size which is 
+      close to the I/O block size.  Because the total size of the
+      array isn't a multiple of the chunk size, the library allocates
+      an extra zone of chunks around the top and right edges of the
+      array which are only partially filled.  This results in
+      20,516,484 extra bytes of storage, a 20% increase in the total
+      raw data storage size.  But the amount of meta data overhead is
+      the same as for the 500 by 500 test.  In addition, the mismatch
+      causes entire chunks to be read in order to update a few
+      elements along the edge or the chunk which results in a 3.6-fold
+      increase in the amount of data transfered.
+
+    <hr>
+    <address><a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a></address>
+<!-- Created: Fri Jan 30 21:04:49 EST 1998 -->
+<!-- hhmts start -->
+Last modified: 30 Jan 1998 (technical content)
+<br>
+Last modified: 9 May 2000 (editor's note)
+<!-- hhmts end -->
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/CodeReview.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/CodeReview.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/CodeReview.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,321 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Code Review</title>
+  </head>
+  <body>
+  
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+  <!-- separator -->
+  <!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+  <!-- separator -->
+  <!-- #EndLibraryItem --> 
+   
+  <center><h1>Code Review 1</h1></center>
+
+    <h3>Some background...</h3>
+    <p>This is one of the functions exported from the
+      <code>H5B.c</code> file that implements a B-link-tree class
+      without worrying about concurrency yet (thus the `Note:' in the
+      function prologue). The <code>H5B.c</code> file provides the
+      basic machinery for operating on generic B-trees, but it isn't
+      much use by itself. Various subclasses of the B-tree (like
+      symbol tables or indirect storage) provide their own interface
+      and back end to this function.  For instance,
+      <code>H5G_stab_find()</code> takes a symbol table OID and a name
+      and calls <code>H5B_find()</code> with an appropriate
+      <code>udata</code> argument that eventually gets passed to the
+      <code>H5G_stab_find()</code> function.
+
+    <p><code><pre>
+ 1 /*-------------------------------------------------------------------------
+ 2  * Function:    H5B_find
+ 3  *
+ 4  * Purpose:     Locate the specified information in a B-tree and return
+ 5  *              that information by filling in fields of the caller-supplied
+ 6  *              UDATA pointer depending on the type of leaf node
+ 7  *              requested.  The UDATA can point to additional data passed
+ 8  *              to the key comparison function.
+ 9  *
+10  * Note:        This function does not follow the left/right sibling
+11  *              pointers since it assumes that all nodes can be reached
+12  *              from the parent node.
+13  *
+14  * Return:      Success:        SUCCEED if found, values returned through the
+15  *                              UDATA argument.
+16  *
+17  *              Failure:        FAIL if not found, UDATA is undefined.
+18  *
+19  * Programmer:  Robb Matzke
+20  *              matzke at llnl.gov
+21  *              Jun 23 1997
+22  *
+23  * Modifications:
+24  *
+25  *-------------------------------------------------------------------------
+26  */
+27 herr_t
+28 H5B_find (H5F_t *f, const H5B_class_t *type, const haddr_t *addr, void *udata)
+29 {
+30    H5B_t        *bt=NULL;
+31    intn         idx=-1, lt=0, rt, cmp=1;
+32    int          ret_value = FAIL;
+    </pre></code>
+
+    <p>All pointer arguments are initialized when defined. I don't
+      worry much about non-pointers because it's usually obvious when
+      the value isn't initialized.
+
+    <p><code><pre>
+33 
+34    FUNC_ENTER (H5B_find, NULL, FAIL);
+35 
+36    /*
+37     * Check arguments.
+38     */
+39    assert (f);
+40    assert (type);
+41    assert (type->decode);
+42    assert (type->cmp3);
+43    assert (type->found);
+44    assert (addr && H5F_addr_defined (addr));
+    </pre></code>
+
+    <p>I use <code>assert</code> to check invariant conditions. At
+      this level of the library, none of these assertions should fail
+      unless something is majorly wrong.  The arguments should have
+      already been checked by higher layers.  It also provides
+      documentation about what arguments might be optional.
+
+    <p><code><pre>
+45    
+46    /*
+47     * Perform a binary search to locate the child which contains
+48     * the thing for which we're searching.
+49     */
+50    if (NULL==(bt=H5AC_protect (f, H5AC_BT, addr, type, udata))) {
+51       HGOTO_ERROR (H5E_BTREE, H5E_CANTLOAD, FAIL);
+52    }
+    </pre></code>
+
+    <p>You'll see this quite often in the low-level stuff and it's
+      documented in the <code>H5AC.c</code> file.  The
+      <code>H5AC_protect</code> insures that the B-tree node (which
+      inherits from the H5AC package) whose OID is <code>addr</code>
+      is locked into memory for the duration of this function (see the
+      <code>H5AC_unprotect</code> on line 90).  Most likely, if this
+      node has been accessed in the not-to-distant past, it will still
+      be in memory and the <code>H5AC_protect</code> is almost a
+      no-op. If cache debugging is compiled in, then the protect also
+      prevents other parts of the library from accessing the node
+      while this function is protecting it, so this function can allow
+      the node to be in an inconsistent state while calling other
+      parts of the library.
+
+    <p>The alternative is to call the slighlty cheaper
+      <code>H5AC_find</code> and assume that the pointer it returns is
+      valid only until some other library function is called, but
+      since we're accessing the pointer throughout this function, I
+      chose to use the simpler protect scheme. All protected objects
+      <em>must be unprotected</em> before the file is closed, thus the
+      use of <code>HGOTO_ERROR</code> instead of
+      <code>HRETURN_ERROR</code>.
+
+    <p><code><pre>
+53    rt = bt->nchildren;
+54 
+55    while (lt&lt;rt && cmp) {
+56       idx = (lt + rt) / 2;
+57       if (H5B_decode_keys (f, bt, idx)&lt;0) {
+58          HGOTO_ERROR (H5E_BTREE, H5E_CANTDECODE, FAIL);
+59       }
+60 
+61       /* compare */
+62       if ((cmp=(type-&gt;cmp3)(f, bt->key[idx].nkey, udata,
+63                             bt->key[idx+1].nkey))&lt;0) {
+64          rt = idx;
+65       } else {
+66          lt = idx+1;
+67       }
+68    }
+69    if (cmp) {
+70       HGOTO_ERROR (H5E_BTREE, H5E_NOTFOUND, FAIL);
+71    }
+    </pre></code>
+
+    <p>Code is arranged in paragraphs with a comment starting each
+    paragraph. The previous paragraph is a standard binary search
+    algorithm. The <code>(type-&gt;cmp3)()</code> is an indirect
+    function call into the subclass of the B-tree.  All indirect
+    function calls have the function part in parentheses to document
+    that it's indirect (quite obvious here, but not so obvious when
+    the function is a variable).
+
+    <p>It's also my standard practice to have side effects in
+      conditional expressions because I can write code faster and it's
+      more apparent to me what the condition is testing.  But if I
+      have an assignment in a conditional expr, then I use an extra
+      set of parens even if they're not required (usually they are, as
+      in this case) so it's clear that I meant <code>=</code> instead
+      of <code>==</code>.
+
+    <p><code><pre>
+72 
+73    /*
+74     * Follow the link to the subtree or to the data node.
+75     */
+76    assert (idx&gt;=0 && idx<bt->nchildren);
+77    if (bt->level > 0) {
+78       if ((ret_value = H5B_find (f, type, bt->child+idx, udata))&lt;0) {
+79          HGOTO_ERROR (H5E_BTREE, H5E_NOTFOUND, FAIL);
+80       }
+81    } else {
+82       ret_value = (type-&gt;found)(f, bt->child+idx, bt->key[idx].nkey,
+83                                 udata, bt->key[idx+1].nkey);
+84       if (ret_value&lt;0) {
+85          HGOTO_ERROR (H5E_BTREE, H5E_NOTFOUND, FAIL);
+86       }
+87    }
+    </pre></code>
+
+    <p>Here I broke the "side effect in conditional" rule, which I
+      sometimes do if the expression is so long that the
+      <code>&lt;0</code> gets lost at the end.  Another thing to note is
+      that success/failure is always determined by comparing with zero
+      instead of <code>SUCCEED</code> or <code>FAIL</code>. I do this
+      because occassionally one might want to return other meaningful
+      values (always non-negative) or distinguish between various types of
+      failure (always negative).
+
+    <p><code><pre>
+88 
+89 done:
+90    if (bt && H5AC_unprotect (f, H5AC_BT, addr, bt)&lt;0) {
+91       HRETURN_ERROR (H5E_BTREE, H5E_PROTECT, FAIL);
+92    }
+93    FUNC_LEAVE (ret_value);
+94 }
+    </pre></code>
+
+    <p>For lack of a better way to handle errors during error cleanup,
+      I just call the <code>HRETURN_ERROR</code> macro even though it
+      will make the error stack not quite right.  I also use short
+      circuiting boolean operators instead of nested <code>if</code>
+      statements since that's standard C practice.
+
+  <center><h1>Code Review 2</h1></center>
+
+
+    <p>The following code is an API function from the H5F package...
+
+    <p><code><pre>
+ 1 /*--------------------------------------------------------------------------
+ 2  NAME
+ 3     H5Fflush
+ 4 
+ 5  PURPOSE
+ 6     Flush all cached data to disk and optionally invalidates all cached
+ 7     data.
+ 8 
+ 9  USAGE
+10     herr_t H5Fflush(fid, invalidate)
+11         hid_t fid;              IN: File ID of file to close.
+12         hbool_t invalidate;     IN: Invalidate all of the cache?
+13 
+14  ERRORS
+15     ARGS      BADTYPE       Not a file atom. 
+16     ATOM      BADATOM       Can't get file struct. 
+17     CACHE     CANTFLUSH     Flush failed. 
+18 
+19  RETURNS
+20     SUCCEED/FAIL
+21 
+22  DESCRIPTION
+23         This function flushes all cached data to disk and, if INVALIDATE
+24     is non-zero, removes cached objects from the cache so they must be
+25     re-read from the file on the next access to the object.
+26 
+27  MODIFICATIONS:
+28 --------------------------------------------------------------------------*/
+    </pre></code>
+
+    <p>An API prologue is used for each API function instead of my
+      normal function prologue. I use the prologue from Code Review 1
+      for non-API functions because it's more suited to C programmers,
+      it requires less work to keep it synchronized with the code, and
+      I have better editing tools for it.
+
+    <p><code><pre>
+29 herr_t
+30 H5Fflush (hid_t fid, hbool_t invalidate)
+31 {
+32    H5F_t        *file = NULL;
+33 
+34    FUNC_ENTER (H5Fflush, H5F_init_interface, FAIL);
+35    H5ECLEAR;
+    </pre></code>
+
+    <p>API functions are never called internally, therefore I always
+      clear the error stack before doing anything.
+
+    <p><code><pre>
+36 
+37    /* check arguments */
+38    if (H5_FILE!=H5Aatom_group (fid)) {
+39       HRETURN_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL); /*not a file atom*/
+40    }
+41    if (NULL==(file=H5Aatom_object (fid))) {
+42       HRETURN_ERROR (H5E_ATOM, H5E_BADATOM, FAIL); /*can't get file struct*/
+43    }
+    </pre></code>
+
+    <p>If something is wrong with the arguments then we raise an
+      error.  We never <code>assert</code> arguments at this level.
+      We also convert atoms to pointers since atoms are really just a
+      pointer-hiding mechanism.  Functions that can be called
+      internally always have pointer arguments instead of atoms
+      because (1) then they don't have to always convert atoms to
+      pointers, and (2) the various pointer data types provide more
+      documentation and type checking than just an <code>hid_t</code>
+      type.
+
+    <p><code><pre>
+44 
+45    /* do work */
+46    if (H5F_flush (file, invalidate)&lt;0) {
+47       HRETURN_ERROR (H5E_CACHE, H5E_CANTFLUSH, FAIL); /*flush failed*/
+48    }
+    </pre></code>
+
+    <p>An internal version of the function does the real work.  That
+      internal version calls <code>assert</code> to check/document
+      it's arguments and can be called from other library functions.
+
+    <p><code><pre>
+49 
+50    FUNC_LEAVE (SUCCEED);
+51 }
+    </pre></code>
+    
+    <hr>
+    <address><a href="mailto:matzke at llnl.gov">Robb Matzke</a></address>
+<!-- Created: Sat Nov  8 17:09:33 EST 1997 -->
+<!-- hhmts start -->
+Last modified: Mon Nov 10 15:33:33 EST 1997
+<!-- hhmts end -->
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/Daily_Test_Explained.htm
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/Daily_Test_Explained.htm	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/Daily_Test_Explained.htm	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,883 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List href="./Daily_Test_Explained_files/filelist.xml">
+<title>Daily Test Explained</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Albert Cheng</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Albert Cheng</o:LastAuthor>
+  <o:Revision>4</o:Revision>
+  <o:TotalTime>21</o:TotalTime>
+  <o:LastPrinted>2002-10-24T16:02:00Z</o:LastPrinted>
+  <o:Created>2002-10-28T17:28:00Z</o:Created>
+  <o:LastSaved>2002-10-28T17:49:00Z</o:LastSaved>
+  <o:Pages>2</o:Pages>
+  <o:Words>608</o:Words>
+  <o:Characters>3468</o:Characters>
+  <o:Company>NCSA</o:Company>
+  <o:Lines>28</o:Lines>
+  <o:Paragraphs>6</o:Paragraphs>
+  <o:CharactersWithSpaces>4258</o:CharactersWithSpaces>
+  <o:Version>9.3821</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+ at font-face
+	{font-family:Tahoma;
+	panose-1:2 11 6 4 3 5 4 4 2 4;
+	mso-font-charset:0;
+	mso-generic-font-family:swiss;
+	mso-font-pitch:variable;
+	mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+h1
+	{mso-style-next:Normal;
+	margin-top:12.0pt;
+	margin-right:0in;
+	margin-bottom:3.0pt;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	page-break-after:avoid;
+	mso-outline-level:1;
+	font-size:16.0pt;
+	font-family:Arial;
+	mso-font-kerning:16.0pt;}
+h2
+	{mso-style-next:Normal;
+	margin-top:12.0pt;
+	margin-right:0in;
+	margin-bottom:3.0pt;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	page-break-after:avoid;
+	mso-outline-level:2;
+	font-size:14.0pt;
+	font-family:Arial;
+	font-style:italic;}
+p.MsoHeader, li.MsoHeader, div.MsoHeader
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:center 3.0in right 6.0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.MsoFooter, li.MsoFooter, div.MsoFooter
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:center 3.0in right 6.0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.MsoDocumentMap, li.MsoDocumentMap, div.MsoDocumentMap
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:navy;
+	font-size:12.0pt;
+	font-family:Tahoma;
+	mso-fareast-font-family:"Times New Roman";}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.2in .9in 1.2in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.3in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+ /* List Definitions */
+ at list l0
+	{mso-list-id:28529256;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-796201994 67698689 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l0:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0B7;
+	mso-level-tab-stop:.75in;
+	mso-level-number-position:left;
+	margin-left:.75in;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l0:level2
+	{mso-level-number-format:alpha-lower;
+	mso-level-tab-stop:1.25in;
+	mso-level-number-position:left;
+	margin-left:1.25in;
+	text-indent:-.25in;}
+ at list l0:level3
+	{mso-level-tab-stop:1.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l0:level4
+	{mso-level-tab-stop:2.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l0:level5
+	{mso-level-tab-stop:2.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l0:level6
+	{mso-level-tab-stop:3.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l0:level7
+	{mso-level-tab-stop:3.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l0:level8
+	{mso-level-tab-stop:4.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l0:level9
+	{mso-level-tab-stop:4.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l1
+	{mso-list-id:535626758;
+	mso-list-type:hybrid;
+	mso-list-template-ids:2106240834 67698689 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l1:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0B7;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l1:level2
+	{mso-level-tab-stop:1.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l1:level3
+	{mso-level-tab-stop:1.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l1:level4
+	{mso-level-tab-stop:2.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l1:level5
+	{mso-level-tab-stop:2.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l1:level6
+	{mso-level-tab-stop:3.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l1:level7
+	{mso-level-tab-stop:3.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l1:level8
+	{mso-level-tab-stop:4.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l1:level9
+	{mso-level-tab-stop:4.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l2
+	{mso-list-id:610862704;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-796201994 67698689 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l2:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0B7;
+	mso-level-tab-stop:.75in;
+	mso-level-number-position:left;
+	margin-left:.75in;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l2:level2
+	{mso-level-number-format:alpha-lower;
+	mso-level-tab-stop:1.25in;
+	mso-level-number-position:left;
+	margin-left:1.25in;
+	text-indent:-.25in;}
+ at list l2:level3
+	{mso-level-tab-stop:1.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l2:level4
+	{mso-level-tab-stop:2.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l2:level5
+	{mso-level-tab-stop:2.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l2:level6
+	{mso-level-tab-stop:3.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l2:level7
+	{mso-level-tab-stop:3.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l2:level8
+	{mso-level-tab-stop:4.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l2:level9
+	{mso-level-tab-stop:4.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l3
+	{mso-list-id:831875463;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-796201994 67698689 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l3:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0B7;
+	mso-level-tab-stop:.75in;
+	mso-level-number-position:left;
+	margin-left:.75in;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l3:level2
+	{mso-level-number-format:alpha-lower;
+	mso-level-tab-stop:1.25in;
+	mso-level-number-position:left;
+	margin-left:1.25in;
+	text-indent:-.25in;}
+ at list l3:level3
+	{mso-level-tab-stop:1.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l3:level4
+	{mso-level-tab-stop:2.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l3:level5
+	{mso-level-tab-stop:2.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l3:level6
+	{mso-level-tab-stop:3.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l3:level7
+	{mso-level-tab-stop:3.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l3:level8
+	{mso-level-tab-stop:4.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l3:level9
+	{mso-level-tab-stop:4.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l4
+	{mso-list-id:1024131184;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-218050110 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+ at list l4:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0B7;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l4:level2
+	{mso-level-tab-stop:1.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l4:level3
+	{mso-level-tab-stop:1.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l4:level4
+	{mso-level-tab-stop:2.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l4:level5
+	{mso-level-tab-stop:2.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l4:level6
+	{mso-level-tab-stop:3.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l4:level7
+	{mso-level-tab-stop:3.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l4:level8
+	{mso-level-tab-stop:4.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l4:level9
+	{mso-level-tab-stop:4.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l5
+	{mso-list-id:1066879027;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-796201994 67698689 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l5:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0B7;
+	mso-level-tab-stop:.75in;
+	mso-level-number-position:left;
+	margin-left:.75in;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l5:level2
+	{mso-level-number-format:alpha-lower;
+	mso-level-tab-stop:1.25in;
+	mso-level-number-position:left;
+	margin-left:1.25in;
+	text-indent:-.25in;}
+ at list l5:level3
+	{mso-level-tab-stop:1.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l5:level4
+	{mso-level-tab-stop:2.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l5:level5
+	{mso-level-tab-stop:2.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l5:level6
+	{mso-level-tab-stop:3.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l5:level7
+	{mso-level-tab-stop:3.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l5:level8
+	{mso-level-tab-stop:4.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l5:level9
+	{mso-level-tab-stop:4.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l6
+	{mso-list-id:1353801443;
+	mso-list-type:hybrid;
+	mso-list-template-ids:56765176 67698689 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
+ at list l6:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0B7;
+	mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l6:level2
+	{mso-level-tab-stop:1.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l6:level3
+	{mso-level-tab-stop:1.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l6:level4
+	{mso-level-tab-stop:2.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l6:level5
+	{mso-level-tab-stop:2.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l6:level6
+	{mso-level-tab-stop:3.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l6:level7
+	{mso-level-tab-stop:3.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l6:level8
+	{mso-level-tab-stop:4.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l6:level9
+	{mso-level-tab-stop:4.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l7
+	{mso-list-id:1585335932;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-796201994 67698689 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l7:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0B7;
+	mso-level-tab-stop:.75in;
+	mso-level-number-position:left;
+	margin-left:.75in;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l7:level2
+	{mso-level-number-format:alpha-lower;
+	mso-level-tab-stop:1.25in;
+	mso-level-number-position:left;
+	margin-left:1.25in;
+	text-indent:-.25in;}
+ at list l7:level3
+	{mso-level-tab-stop:1.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l7:level4
+	{mso-level-tab-stop:2.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l7:level5
+	{mso-level-tab-stop:2.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l7:level6
+	{mso-level-tab-stop:3.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l7:level7
+	{mso-level-tab-stop:3.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l7:level8
+	{mso-level-tab-stop:4.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l7:level9
+	{mso-level-tab-stop:4.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l8
+	{mso-list-id:1594970409;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-796201994 67698689 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l8:level1
+	{mso-level-number-format:bullet;
+	mso-level-text:\F0B7;
+	mso-level-tab-stop:.75in;
+	mso-level-number-position:left;
+	margin-left:.75in;
+	text-indent:-.25in;
+	font-family:Symbol;}
+ at list l8:level2
+	{mso-level-tab-stop:1.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l8:level3
+	{mso-level-tab-stop:1.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l8:level4
+	{mso-level-tab-stop:2.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l8:level5
+	{mso-level-tab-stop:2.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l8:level6
+	{mso-level-tab-stop:3.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l8:level7
+	{mso-level-tab-stop:3.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l8:level8
+	{mso-level-tab-stop:4.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l8:level9
+	{mso-level-tab-stop:4.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l9
+	{mso-list-id:1945573783;
+	mso-list-type:hybrid;
+	mso-list-template-ids:-796201994 67698703 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
+ at list l9:level1
+	{mso-level-tab-stop:.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l9:level2
+	{mso-level-number-format:alpha-lower;
+	mso-level-tab-stop:1.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l9:level3
+	{mso-level-tab-stop:1.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l9:level4
+	{mso-level-tab-stop:2.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l9:level5
+	{mso-level-tab-stop:2.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l9:level6
+	{mso-level-tab-stop:3.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l9:level7
+	{mso-level-tab-stop:3.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l9:level8
+	{mso-level-tab-stop:4.0in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ at list l9:level9
+	{mso-level-tab-stop:4.5in;
+	mso-level-number-position:left;
+	text-indent:-.25in;}
+ol
+	{margin-bottom:0in;}
+ul
+	{margin-bottom:0in;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<div class=Section1>
+
+<h1 align=center style='text-align:center'>Daily Test Explained</h1>
+
+<h2>Requirements for a Daily Test Host</h2>
+
+<ul style='margin-top:0in' type=disc>
+ <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>Kerberos
+     and AFS support</li>
+ <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>Remote
+     command execution (rsh or ssh) with Kerberos authentication support</li>
+ <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>make
+     that support srcdir compiling (highly desirable)</li>
+ <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>diff
+     that supports –I option (highly desirable for launching host)</li>
+ <li class=MsoNormal style='mso-list:l1 level1 lfo3;tab-stops:list .5in'>cvs
+     command support (desirable)</li>
+</ul>
+
+<h2>Directories/Files Used</h2>
+
+<p class=MsoNormal><b>$HOME/snapshots-XXX</b> is where daily tests occur.</p>
+
+<ul style='margin-top:0in' type=disc>
+ <li class=MsoNormal style='mso-list:l4 level1 lfo6;tab-stops:list .5in'><b>$HOME/snapshots-hdf5</b>
+     for hdf5 main trunk version (currently v1.5).</li>
+ <li class=MsoNormal style='mso-list:l4 level1 lfo6;tab-stops:list .5in'><b>$HOME/snapshots-hdf5_1_4
+     </b>for hdf5 version 1.4.</li>
+ <li class=MsoNormal style='mso-list:l4 level1 lfo6;tab-stops:list .5in'><b>$HOME/snapshots-hdf4
+     </b>for hdf4 main trunk version (currenly post 4.1r5).</li>
+</ul>
+
+<h2>Inside snapshots-XXX Directory</h2>
+
+<p class=MsoNormal style='margin-left:135.0pt;text-indent:-117.0pt;mso-list:
+l6 level1 lfo8;tab-stops:list .5in'><![if !supportLists]><span
+style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span><![endif]>current/<span style='mso-tab-count:1'>                     </span>latest
+version</p>
+
+<p class=MsoNormal style='margin-left:135.0pt;text-indent:-117.0pt;mso-list:
+l6 level1 lfo8;tab-stops:list .5in'><![if !supportLists]><span
+style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span><![endif]>previous/<span style='mso-tab-count:1'>                  </span>last
+released version</p>
+
+<p class=MsoNormal style='margin-left:135.0pt;text-indent:-117.0pt;mso-list:
+l6 level1 lfo8;tab-stops:list .5in'><![if !supportLists]><span
+style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span><![endif]>log/<span style='mso-tab-count:1'>                           </span>log
+files of most recent tests</p>
+
+<p class=MsoNormal style='margin-left:135.0pt;text-indent:-117.0pt;mso-list:
+l6 level1 lfo8;tab-stops:list .5in'><![if !supportLists]><span
+style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span><![endif]>log/OLD/<span style='mso-tab-count:1'>                  </span>previous
+log files</p>
+
+<p class=MsoNormal style='margin-left:135.0pt;text-indent:-117.0pt;mso-list:
+l6 level1 lfo8;tab-stops:list .5in'><![if !supportLists]><span
+style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span><![endif]>TestDir/&lt;host&gt;/<span style='mso-tab-count:1'>        </span>build
+and test area of machine &lt;host&gt; supporting srcdir build</p>
+
+<p class=MsoNormal style='margin-left:135.0pt;text-indent:-117.0pt;mso-list:
+l6 level1 lfo8;tab-stops:list .5in'><![if !supportLists]><span
+style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span><![endif]>allhostfile<span style='mso-tab-count:1'>                 </span>holds
+all test host names</p>
+
+<p class=MsoNormal style='margin-left:135.0pt;text-indent:-117.0pt;mso-list:
+l6 level1 lfo8;tab-stops:list .5in'><![if !supportLists]><span
+style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span><![endif]>snaptest.cfg<span style='mso-tab-count:1'>               </span>holds
+various test configurations</p>
+
+<p class=MsoNormal style='margin-left:135.0pt;text-indent:-117.0pt;mso-list:
+l6 level1 lfo8;tab-stops:list .5in'><![if !supportLists]><span
+style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span><![endif]>release_always<span style='mso-tab-count:1'>        </span>always
+make snapshot release tarball if all tests pass (implemented for hdf4 daily
+tests only)</p>
+
+<p class=MsoNormal style='margin-left:135.0pt;text-indent:-117.0pt;mso-list:
+l6 level1 lfo8;tab-stops:list .5in'><![if !supportLists]><span
+style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span><![endif]>release_asap<span style='mso-tab-count:1'>            </span>make
+<i>one</i> snapshot release tarball if all tests pass (file is renamed after
+release)</p>
+
+<p class=MsoNormal style='margin-left:135.0pt;text-indent:-117.0pt;mso-list:
+l6 level1 lfo8;tab-stops:list .5in'><![if !supportLists]><span
+style='font-family:Symbol'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span></span><![endif]>release_not<span style='mso-tab-count:1'>               </span>do
+not make snapshot release tarball even if all tests pass</p>
+
+<h2>Steps</h2>
+
+<p class=MsoNormal>This shows steps of the daily tests for HDF5 development
+version (currenly v1.5).<span style="mso-spacerun: yes">  </span>The HDF5 v1.4
+and HDF4 are similar.<span style="mso-spacerun: yes">  </span>snapshots-XXX
+here means $HOME/snapshots-hdf5/.</p>
+
+<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
+
+<ol style='margin-top:0in' start=1 type=1>
+ <li class=MsoNormal style='mso-list:l9 level1 lfo11;tab-stops:list .5in'>“hdfadmin”
+     starts a cron job after midnight in eirene.</li>
+ <li class=MsoNormal style='mso-list:l9 level1 lfo11;tab-stops:list .5in'>Cron
+     job acquires kerberos credential and AFS tokens.</li>
+ <li class=MsoNormal style='mso-list:l9 level1 lfo11;tab-stops:list .5in'>Execute
+     <b>$HOME/.crondir/DailyMaint</b> to start daily maintenance</li>
+</ol>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l8 level1 lfo13;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>CVS
+updates some documents on websites</p>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l8 level1 lfo13;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>CVS
+updates $HOME/HDF5/v_1_5/hdf5/<span style="mso-spacerun: yes">   </span>(the
+bin/runtest in it is ready to be used in<span style="mso-spacerun: yes"> 
+</span>next step)</p>
+
+<ol style='margin-top:0in' start=4 type=1>
+ <li class=MsoNormal style='mso-list:l9 level1 lfo11;tab-stops:list .5in'>Execute
+     <b>$HOME/.bin-sys/DailyHDF5Test</b></li>
+</ol>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l7 level1 lfo16;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>Clean
+up snapshots-XXX/log area</p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;mso-list:l7 level2 lfo16;
+tab-stops:list 1.25in'><![if !supportLists]>a.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span><![endif]>Purge older files from OLD/</p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;mso-list:l7 level2 lfo16;
+tab-stops:list 1.25in'><![if !supportLists]>b.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;
+</span><![endif]>Moves log files from yesterday to OLD/</p>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l7 level1 lfo16;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>cd
+$HOME/HDF5/v_1_5/hdf5</p>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l7 level1 lfo16;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>Launch
+“bin/runtest –all” from eirene</p>
+
+<ol style='margin-top:0in' start=5 type=1>
+ <li class=MsoNormal style='mso-list:l9 level1 lfo11;tab-stops:list .5in'><b>bin/runtest
+     –all<o:p></o:p></b></li>
+</ol>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l5 level1 lfo19;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>CVS
+updates $HOME/snapshots-XXX/current (the commands in bin/ are now ready be used
+in the following steps).</p>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l5 level1 lfo19;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>Executes
+snapshots-XXX/current/bin/chkmanifest for MANIFEST file.</p>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l5 level1 lfo19;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>Diff
+current/ and previous/ versions.<span style="mso-spacerun: yes">  </span>If no
+significant differences found, no need to run daily test per hosts.<span
+style="mso-spacerun: yes">  </span>Will not make snapshot release tarball
+either.</p>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l5 level1 lfo19;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>If
+significant differences found, prepare to run the daily tests for all hosts.</p>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l5 level1 lfo19;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>Reads
+allhostfile for test hosts.<span style="mso-spacerun: yes">  </span>For each
+host:</p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;mso-list:l5 level2 lfo19;
+tab-stops:list 1.25in'><![if !supportLists]>a.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span><![endif]>use ping then rsh/ssh to make sure the host is on line and
+responding</p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;mso-list:l5 level2 lfo19;
+tab-stops:list 1.25in'><![if !supportLists]>b.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;
+</span><![endif]>if srcdir is support, fork off the following command for all
+hosts and wait for them to finish.<span style="mso-spacerun: yes"> 
+</span>Otherwise, launch one at a time.</p>
+
+<p class=MsoNormal style='margin-left:1.25in;text-indent:-.25in;mso-list:l5 level2 lfo19;
+tab-stops:list 1.25in'><![if !supportLists]>c.<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+</span><![endif]>rsh host “cd $HOME/snapshots-XXX/hdf5; bin/runtest” &gt;&amp;
+#&lt;host&gt;</p>
+
+<ol style='margin-top:0in' start=6 type=1>
+ <li class=MsoNormal style='mso-list:l9 level1 lfo11;tab-stops:list .5in'><b>bin/runtest
+     </b>(one each in multiple hosts)</li>
+</ol>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l0 level1 lfo22;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>Since
+“-all” is not used, it is for launching the test for this host only.</p>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l0 level1 lfo22;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>Reads
+snapshots-XXX/snaptest.cfg and looks for configuration entries that are for
+this host.</p>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l0 level1 lfo22;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>For
+each configuration, runs snapshots-XXX/bin/snapshot with the configuration.</p>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l0 level1 lfo22;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>Configure,
+build and test results are stored in log/&lt;host&gt;_YYMMDD_HHMM (e.g.,
+arabica_021024_0019)</p>
+
+<ol style='margin-top:0in' start=7 type=1>
+ <li class=MsoNormal style='mso-list:l9 level1 lfo11;tab-stops:list .5in'>Back
+     to <b>“bin/runtest –all”</b> in eirene</li>
+</ol>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l2 level1 lfo25;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>Gather
+all those #&lt;host&gt; files and other summary report into one daily report
+(e.g., DailyHDF5Tests-eirene_021024)</p>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l3 level1 lfo27;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>Checks
+the tail of log/&lt;host&gt;_YYMMDD_HHMM to make sure it does complete
+properly.</p>
+
+<ol style='margin-top:0in' start=8 type=1>
+ <li class=MsoNormal style='mso-list:l9 level1 lfo11;tab-stops:list .5in'>Back
+     to <b>“.bin-sys/DailyHDF5Test”</b></li>
+</ol>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l3 level1 lfo27;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>Do
+a snapshot release if<br>
+<span style="mso-spacerun: yes">    </span>test-succeeded &amp;&amp;<br>
+<span style="mso-spacerun: yes">    </span>release-not-is-not-present
+&amp;&amp;<br>
+<span style="mso-spacerun: yes">    </span>( today-is-saturday ||
+release-asap-is-requested )</p>
+
+<p class=MsoNormal style='margin-left:.75in;text-indent:-.25in;mso-list:l3 level1 lfo27;
+tab-stops:list .75in'><![if !supportLists]><span style='font-family:Symbol'>·<span
+style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><![endif]>HDF4
+does not know how to create a release tarball.<span style="mso-spacerun: yes"> 
+</span>Its release process only renames current/ as previous/ to reduce future
+test time.<span style="mso-spacerun: yes">  </span>It also supports an option
+of release-always which tells daily test to make a release whenever all tests
+pass.<span style="mso-spacerun: yes">  </span>The release-asap only make the
+release once and the file is renamed, blocking any future ASAP release until
+someone turns it on again.</p>
+
+<ol style='margin-top:0in' start=9 type=1>
+ <li class=MsoNormal style='mso-list:l9 level1 lfo11;tab-stops:list .5in'>Compose
+     a report and email “hdf5-cvs”</li>
+</ol>
+
+<h2>Acknowledgement</h2>
+
+<p class=MsoNormal>Robb Matzke first setup the snapshot directory structure and
+created pretty complete version of commands snaptest, release and h5ver. The
+initial version is for testing in one host with the default configuration.<span
+style="mso-spacerun: yes">  </span>I just added more whistles and bells.<span
+style="mso-spacerun: yes">  </span>Jim Barlow helped me how to authenticate a
+cron task with <i>keytab</i>.</p>
+
+<p class=MsoHeader style='tab-stops:.5in center 3.0in right 6.0in'>----</p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;mso-bidi-font-size:12.0pt'>First
+created by Albert Cheng, October 24, 2002.<o:p></o:p></span></p>
+
+<p class=MsoNormal><span style='font-size:10.0pt;mso-bidi-font-size:12.0pt'>Revised
+October 28, 2002.<o:p></o:p></span></p>
+
+</div>
+
+</body>
+
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/Dependencies
===================================================================

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ExternalFiles.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/ExternalFiles.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/ExternalFiles.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,300 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>External Files in HDF5</title>
+  </head>
+
+  <body>
+  
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+  <!-- separator -->
+  <!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+  <!-- separator -->
+  <!-- #EndLibraryItem --> 
+   
+  <center><h1>External Files in HDF5</h1></center>
+
+    <h3>Overview of Layers</h3>
+
+    <p>This table shows some of the layers of HDF5.  Each layer calls
+      functions at the same or lower layers and never functions at
+      higher layers.  An object identifier (OID) takes various forms
+      at the various layers: at layer 0 an OID is an absolute physical
+      file address; at layers 1 and 2 it's an absolute virtual file
+      address. At layers 3 through 6 it's a relative address, and at
+      layers 7 and above it's an object handle.
+
+    <p><center>
+	<table border cellpadding=4 width="60%">
+	  <tr align=center>
+	    <td>Layer-7</td>
+	    <td>Groups</td>
+	    <td>Datasets</td>
+	  </tr>
+	  <tr align=center>
+	    <td>Layer-6</td>
+	    <td>Indirect Storage</td>
+	    <td>Symbol Tables</td>
+	  </tr>
+	  <tr align=center>
+	    <td>Layer-5</td>
+	    <td>B-trees</td>
+	    <td>Object Hdrs</td>
+	    <td>Heaps</td>
+	  </tr>
+	  <tr align=center>
+	    <td>Layer-4</td>
+	    <td>Caching</td>
+	  </tr>
+	  <tr align=center>
+	    <td>Layer-3</td>
+	    <td>H5F chunk I/O</td>
+	  </tr>
+	  <tr align=center>
+	    <td>Layer-2</td>
+	    <td>H5F low</td>
+	  </tr>
+	  <tr align=center>
+	    <td>Layer-1</td>
+	    <td>File Family</td>
+	    <td>Split Meta/Raw</td>
+	  </tr>
+	  <tr align=center>
+	    <td>Layer-0</td>
+	    <td>Section-2 I/O</td>
+	    <td>Standard I/O</td>
+	    <td>Malloc/Free</td>
+	  </tr>
+	</table>
+      </center>
+
+    <h3>Single Address Space</h3>
+
+    <p>The simplest form of hdf5 file is a single file containing only
+      hdf5 data. The file begins with the boot block, which is
+      followed until the end of the file by hdf5 data.  The next most
+      complicated file allows non-hdf5 data (user defined data or
+      internal wrappers) to appear before the boot block and after the
+      end of the hdf5 data.  The hdf5 data is treated as a single
+      linear address space in both cases.
+
+    <p>The next level of complexity comes when non-hdf5 data is
+      interspersed with the hdf5 data.  We handle that by including
+      the non-hdf5 interspersed data in the hdf5 address space and
+      simply not referencing it (eventually we might add those
+      addresses to a "do-not-disturb" list using the same mechanism as
+      the hdf5 free list, but it's not absolutely necessary).  This is
+      implemented except for the "do-not-disturb" list.
+
+    <p>The most complicated single address space hdf5 file is when we
+      allow the address space to be split among multiple physical
+      files. For instance, a >2GB file can be split into smaller
+      chunks and transfered to a 32 bit machine, then accessed as a
+      single logical hdf5 file.  The library already supports >32 bit
+      addresses, so at layer 1 we split a 64-bit address into a 32-bit
+      file number and a 32-bit offset (the 64 and 32 are
+      arbitrary). The rest of the library still operates with a linear
+      address space.
+
+    <p>Another variation might be a family of two files where all the
+      meta data is stored in one file and all the raw data is stored
+      in another file to allow the HDF5 wrapper to be easily replaced
+      with some other wrapper.
+
+    <p>The <code>H5Fcreate</code> and <code>H5Fopen</code> functions
+      would need to be modified to pass file-type info down to layer 2
+      so the correct drivers can be called and parameters passed to
+      the drivers to initialize them.
+      
+    <h4>Implementation</h4>
+
+    <p>I've implemented fixed-size family members.  The entire hdf5
+      file is partitioned into members where each member is the same
+      size.  The family scheme is used if one passes a name to
+      <code>H5F_open</code> (which is called by <code>H5Fopen()</code>
+      and <code>H5Fcreate</code>) that contains a
+      <code>printf(3c)</code>-style integer format specifier.
+      Currently, the default low-level file driver is used for all
+      family members (H5F_LOW_DFLT, usually set to be Section 2 I/O or
+      Section 3 stdio), but we'll probably eventually want to pass
+      that as a parameter of the file access property list, which
+      hasn't been implemented yet.  When creating a family, a default
+      family member size is used (defined at the top H5Ffamily.c,
+      currently 64MB) but that also should be settable in the file
+      access property list. When opening an existing family, the size
+      of the first member is used to determine the member size
+      (flushing/closing a family ensures that the first member is the
+      correct size) but the other family members don't have to be that
+      large (the local address space, however, is logically the same
+      size for all members).
+
+    <p>I haven't implemented a split meta/raw family yet but am rather
+      curious to see how it would perform. I was planning to use the
+      `.h5' extension for the meta data file and `.raw' for the raw
+      data file.  The high-order bit in the address would determine
+      whether the address refers to meta data or raw data. If the user
+      passes a name that ends with `.raw' to <code>H5F_open</code>
+      then we'll chose the split family and use the default low level
+      driver for each of the two family members.  Eventually we'll
+      want to pass these kinds of things through the file access
+      property list instead of relying on naming convention.
+
+    <h3>External Raw Data</h3>
+
+    <p>We also need the ability to point to raw data that isn't in the
+      HDF5 linear address space.  For instance, a dataset might be
+      striped across several raw data files.
+
+    <p>Fortunately, the only two packages that need to be aware of
+      this are the packages for reading/writing contiguous raw data
+      and discontiguous raw data.  Since contiguous raw data is a
+      special case, I'll discuss how to implement external raw data in
+      the discontiguous case.
+
+    <p>Discontiguous data is stored as a B-tree whose keys are the
+      chunk indices and whose leaf nodes point to the raw data by
+      storing a file address. So what we need is some way to name the
+      external files, and a way to efficiently store the external file
+      name for each chunk.
+
+    <p>I propose adding to the object header an <em>External File
+	List</em> message that is a 1-origin array of file names.
+      Then, in the B-tree, each key has an index into the External
+      File List (or zero for the HDF5 file) for the file where the
+      chunk can be found. The external file index is only used at
+      the leaf nodes to get to the raw data (the entire B-tree is in
+      the HDF5 file) but because of the way keys are copied among
+      the B-tree nodes, it's much easier to store the index with
+      every key.
+
+    <h3>Multiple HDF5 Files</h3>
+
+    <p>One might also want to combine two or more HDF5 files in a
+      manner similar to mounting file systems in Unix.  That is, the
+      group structure and meta data from one file appear as though
+      they exist in the first file.  One opens File-A, and then
+      <em>mounts</em> File-B at some point in File-A, the <em>mount
+      point</em>, so that traversing into the mount point actually
+      causes one to enter the root object of File-B.  File-A and
+      File-B are each complete HDF5 files and can be accessed
+      individually without mounting them.
+
+    <p>We need a couple additional pieces of machinery to make this
+      work.  First, an haddr_t type (a file address) doesn't contain
+      any info about which HDF5 file's address space the address
+      belongs to.  But since haddr_t is an opaque type except at
+      layers 2 and below, it should be quite easy to add a pointer to
+      the HDF5 file.  This would also remove the H5F_t argument from
+      most of the low-level functions since it would be part of the
+      OID.
+
+    <p>The other thing we need is a table of mount points and some
+      functions that understand them.  We would add the following
+      table to each H5F_t struct:
+
+    <p><code><pre>
+struct H5F_mount_t {
+   H5F_t *parent;         /* Parent HDF5 file if any */
+   struct {
+      H5F_t *f;           /* File which is mounted */
+      haddr_t where;      /* Address of mount point */
+   } *mount;              /* Array sorted by mount point */
+   intn nmounts;          /* Number of mounted files */
+   intn alloc;            /* Size of mount table */
+}
+    </pre></code>
+
+    <p>The <code>H5Fmount</code> function takes the ID of an open
+      file or group, the name of a to-be-mounted file, the name of the mount
+      point, and a file access property list (like <code>H5Fopen</code>).
+      It opens the new file and adds a record to the parent's mount
+      table.  The <code>H5Funmount</code> function takes the parent
+      file or group ID and the name of the mount point and disassociates
+      the mounted file from the mount point.  It does not close the 
+      mounted file.  The <code>H5Fclose</code>
+      function closes/unmounts files recursively.
+
+    <p>The <code>H5G_iname</code> function which translates a name to
+      a file address (<code>haddr_t</code>) looks at the mount table
+      at each step in the translation and switches files where
+      appropriate.  All name-to-address translations occur through
+      this function.
+
+    <h3>How Long?</h3>
+
+    <p>I'm expecting to be able to implement the two new flavors of
+      single linear address space in about two days. It took two hours
+      to implement the malloc/free file driver at level zero and I
+      don't expect this to be much more work.
+
+    <p>I'm expecting three days to implement the external raw data for
+      discontiguous arrays.  Adding the file index to the B-tree is
+      quite trivial; adding the external file list message shouldn't
+      be too hard since the object header message class from wich this
+      message derives is fully implemented; and changing
+      <code>H5F_istore_read</code> should be trivial.  Most of the
+      time will be spent designing a way to cache Unix file
+      descriptors efficiently since the total number open files
+      allowed per process could be much smaller than the total number
+      of HDF5 files and external raw data files.
+
+    <p>I'm expecting four days to implement being able to mount one
+      HDF5 file on another.  I was originally planning a lot more, but
+      making <code>haddr_t</code> opaque turned out to be much easier
+      than I planned (I did it last Fri).  Most of the work will
+      probably be removing the redundant H5F_t arguments for lots of
+      functions.
+
+    <h3>Conclusion</h3>
+
+    <p>The external raw data could be implemented as a single linear
+      address space, but doing so would require one to allocate large
+      enough file addresses throughout the file (>32bits) before the
+      file was created.  It would make mixing an HDF5 file family with
+      external raw data, or external HDF5 wrapper around an HDF4 file
+      a more difficult process. So I consider the implementation of
+      external raw data files as a single HDF5 linear address space a
+      kludge.
+
+    <p>The ability to mount one HDF5 file on another might not be a
+      very important feature especially since each HDF5 file must be a
+      complete file by itself.  It's not possible to stripe an array
+      over multiple HDF5 files because the B-tree wouldn't be complete
+      in any one file, so the only choice is to stripe the array
+      across multiple raw data files and store the B-tree in the HDF5
+      file.  On the other hand, it might be useful if one file
+      contains some public data which can be mounted by other files
+      (e.g., a mesh topology shared among collaborators and mounted by
+      files that contain other fields defined on the mesh).  Of course
+      the applications can open the two files separately, but it might
+      be more portable if we support it in the library.
+
+    <p>So we're looking at about two weeks to implement all three
+      versions.  I didn't get a chance to do any of them in AIO
+      although we had long-term plans for the first two with a
+      possibility of the third. They'll be much easier to implement in
+      HDF5 than AIO since I've been keeping these in mind from the
+      start.
+
+    <hr>
+    <address><a href="mailto:matzke at llnl.gov">Robb Matzke</a></address>
+<!-- Created: Sat Nov  8 18:08:52 EST 1997 -->
+<!-- hhmts start -->
+Last modified: Tue Sep  8 14:43:32 EDT 1998
+<!-- hhmts end -->
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/FreeLists.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/FreeLists.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/FreeLists.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,225 @@
+<html>
+<head>
+<title>Memory Management and Free Lists</title>
+</head>
+
+<body>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<h1>Memory Management and Free Lists</h1>
+
+<pre>
+
+At Release 1.2.2, free list management code was introduced to the HDF5 
+library.  This included one user-level function, H5garbage_collect, which 
+garbage collects on all the free-lists.  H5garbage_collect is the only user-
+accessible (i.e., application developer-accessible) element of this 
+functionality.
+
+The free-lists generally reduce the amount of dynamic memory used to around 
+75% of the pre-optimized amount as well as speed up the time in the library 
+code by ~5% The free-lists also help linearize the amount of memory used with 
+increasing numbers of datasets or re-writes on the data, so the amount of 
+memory used for the 1500/45 free-list case is only 66% of the memory used for 
+the unoptimized case.
+
+Overall, the introduction of free list management is a win: the library is 
+slightly faster and uses much less system resources than before.  Most of the
+emphasis has been focused on the main "thouroughfares" through the code;
+less attention was paid to the "back streets" which are used much less 
+frequently and offer less potential for abuse.
+
+Adding a free-list for a data structure in the HDF5 library code is easy:
+
+Old code:
+---------
+    int foo(void)
+    {
+        H5W_t *w;
+
+        for(i=0; i&lt;x; i++) {
+            w=H5MM_malloc(sizeof(H5W_t));
+            &lt;use w&gt;
+            H5MM_xfree(w);
+        }
+    }
+
+New code:
+---------
+H5FL_DEFINE(H5W_t);
+
+    int foo(void)
+    {
+        H5W_t *w;
+
+        for(i=0; i&lt;x; i++) {
+            w=H5FL_ALLOC(H5W_t,0);
+            &lt;use w&gt;
+            H5FL_FREE(H5W_t,w);
+        }
+    }
+
+
+There are three kinds of free-lists: 
+   -- for "regular" objects, 
+   -- arrays of fixed size object (both fixed length and unknown length), and 
+   -- "blocks" of bytes.  
+ 
+   "Regular" free-lists use the H5FL_&lt;*&gt; macros in H5FLprivate.h and are
+   designed for single, fixed-size data structures like typedef'ed structs,
+   etc.  
+
+   Arrays of objects use the H5FL_ARR_&lt;*&gt; macros and are designed for arrays 
+   (both fixed in length and varying lengths) of fixed length data structures 
+   (like typedef'ed types).  
+
+   "Block" free-lists use the H5FL_BLK_&lt;*&gt; macros and are designed to hold 
+   varying sized buffers of bytes, with no structure.  
+
+   H5S.c contains examples for "regular" and fixed-sized arrays;
+   H5B.c contains examples for variable-sized arrays and "blocks".
+
+A free-list doesn't have to be used for every data structure allocated and
+freed, just for those which are prone to abuse when multiple operations are
+being performed.  It is important to use the macros for declaring and
+manipulating the free-lists however; they allow the free'd objects on the 
+lists to be garbage collected by the library at the library's termination 
+or at the user's request.
+
+One public API function has been added: H5garbage_collect, which garbage 
+collects on all the free-lists of all the different types.  It's not required 
+to be called and is only necessary in situations when the application 
+performs actions which cause the library to allocate many objects and then 
+the application eventually releases those objects and wants to reduce the 
+memory used by the library from the peak usage required.  The library 
+automatically garbage collects all the free lists when the application ends.
+
+Questions should be sent to the HDF Help Desk at hdfhelp at ncsa.uiuc.edu.
+
+
+===========================================
+BENCHMARK INFORMATION
+===========================================
+
+New version with free lists:
+
+Datasets=500, Data Rewrites=15:
+    Peak Heap Usage: 18210820 bytes
+    Time in library code: 2.260 seconds
+    # of malloc calls: 22864
+
+Datasets=1000, Data Rewrites=15:
+    Peak Heap Usage: 31932420 bytes
+    Time in library code: 5.090 seconds
+    # of malloc calls: 43045
+
+Datasets=1500, Data Rewrites=15:
+    Peak Heap Usage: 41566212 bytes
+    Time in library code: 8.623 seconds
+    # of malloc calls: 60623
+
+Datasets=500, Data Rewrites=30:
+    Peak Heap Usage: 19456004 bytes
+    Time in library code: 4.274 seconds
+    # of malloc calls: 23353
+
+Datasets=1000, Data Rewrites=30:
+    Peak Heap Usage: 33988612 bytes
+    Time in library code: 9.955 seconds
+    # of malloc calls: 43855
+
+Datasets=1500, Data Rewrites=30:
+    Peak Heap Usage: 43950084 bytes
+    Time in library code: 17.413 seconds
+    # of malloc calls: 61554
+
+Datasets=500, Data Rewrites=45:
+    Peak Heap Usage: 20717572 bytes
+    Time in library code: 6.326 seconds
+    # of malloc calls: 23848
+
+Datasets=1000, Data Rewrites=45:
+    Peak Heap Usage: 35807236 bytes
+    Time in library code: 15.146 seconds
+    # of malloc calls: 44572
+
+Datasets=1500, Data Rewrites=45:
+    Peak Heap Usage: 46022660 bytes
+    Time in library code: 27.140 seconds
+    # of malloc calls: 62370
+
+
+Older version with no free lists:
+
+Datasets=500, Data Rewrites=15:
+    Peak Heap Usage: 25370628 bytes
+    Time in library code: 2.329 seconds
+    # of malloc calls: 194991
+
+Datasets=1000, Data Rewrites=15:
+    Peak Heap Usage: 39550980 bytes
+    Time in library code: 5.251 seconds
+    # of malloc calls: 417971
+
+Datasets=1500, Data Rewrites=15:
+    Peak Heap Usage: 68870148 bytes
+    Time in library code: 8.913 seconds
+    # of malloc calls: 676564
+
+Datasets=500, Data Rewrites=30:
+    Peak Heap Usage: 31670276 bytes
+    Time in library code: 4.435 seconds
+    # of malloc calls: 370320
+
+Datasets=1000, Data Rewrites=30:
+    Peak Heap Usage: 44646404 bytes
+    Time in library code: 10.325 seconds
+    # of malloc calls: 797125
+
+Datasets=1500, Data Rewrites=30:
+    Peak Heap Usage: 68870148 bytes
+    Time in library code: 18.057 seconds
+    # of malloc calls: 1295336
+
+Datasets=500, Data Rewrites=45:
+    Peak Heap Usage: 33906692 bytes
+    Time in library code: 6.577 seconds
+    # of malloc calls: 545656
+
+Datasets=1000, Data Rewrites=45:
+    Peak Heap Usage: 56778756 bytes
+    Time in library code: 15.720 seconds
+    # of malloc calls: 1176285
+
+Datasets=1500, Data Rewrites=45:
+    Peak Heap Usage: 68870148 bytes
+    Time in library code: 28.138 seconds
+    # of malloc calls: 1914097
+
+
+===========================================
+Last Modified:  3 May 2000
+HDF Help Desk:  hdfhelp at ncsa.uiuc.edu
+
+</pre>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/H4-H5Compat.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/H4-H5Compat.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/H4-H5Compat.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,292 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Backward/Forward Compatability</title>
+  </head>
+
+  <body>
+  
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+  <!-- separator -->
+  <!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+  <!-- separator -->
+  <!-- #EndLibraryItem -->  
+
+  <h1>Backward/Forward Compatability</h1>
+
+    <p>The HDF5 development must proceed in such a manner as to
+      satisfy the following conditions:
+
+    <ol type=A>
+      <li>HDF5 applications can produce data that HDF5
+	applications can read and write and HDF4 applications can produce
+	data that HDF4 applications can read and write. The situation
+	that demands this condition is obvious.</li>
+
+      <li>HDF5 applications are able to produce data that HDF4 applications
+	can read and HDF4 applications can subsequently modify the
+	file subject to certain constraints depending on the
+	implementation. This condition is for the temporary
+	situation where a consumer has neither been relinked with a new
+	HDF4 API built on top of the HDF5 API nor recompiled with the
+	HDF5 API.</li>
+
+      <li>HDF5 applications can read existing HDF4 files and subsequently
+	modify the file subject to certain constraints depending on
+	the implementation. This is condition is for the temporary
+	situation in which the producer has neither been relinked with a
+	new HDF4 API built on top of the HDF5 API nor recompiled with
+	the HDF5 API, or the permanent situation of HDF5 consumers
+	reading archived HDF4 files.</li>
+    </ul>
+
+    <p>There's at least one invarient: new object features introduced
+      in the HDF5 file format (like 2-d arrays of structs) might be
+      impossible to "translate" to a format that an old HDF4
+      application can understand either because the HDF4 file format
+      or the HDF4 API has no mechanism to describe the object.
+
+    <p>What follows is one possible implementation based on how
+      Condition B was solved in the AIO/PDB world.  It also attempts
+      to satisfy these goals:
+
+    <ol type=1>
+      <li>The main HDF5 library contains as little extra baggage as
+	possible by either relying on external programs to take care
+	of compatability issues or by incorporating the logic of such
+	programs as optional modules in the HDF5 library.  Conditions B
+	and C are separate programs/modules.</li>
+
+      <li>No extra baggage not only means the library proper is small,
+	but also means it can be implemented (rather than migrated
+	from HDF4 source) from the ground up with minimal regard for
+	HDF4 thus keeping the logic straight forward.</li>
+
+      <li>Compatability issues are handled behind the scenes when
+	necessary (and possible) but can be carried out explicitly
+	during things like data migration.</li>
+    </ol>
+
+    <hr>
+    <h2>Wrappers</h2>
+
+    <p>The proposed implementation uses <i>wrappers</i> to handle
+      compatability issues.  A Format-X file is <i>wrapped</i> in a
+      Format-Y file by creating a Format-Y skeleton that replicates
+      the Format-X meta data.  The Format-Y skeleton points to the raw
+      data stored in Format-X without moving the raw data.  The
+      restriction is that raw data storage methods in Format-Y is a
+      superset of raw data storage methods in Format-X (otherwise the
+      raw data must be copied to Format-Y).  We're assuming that meta
+      data is small wrt the entire file.
+
+    <p>The wrapper can be a separate file that has pointers into the
+      first file or it can be contained within the first file.  If
+      contained in a single file, the file can appear as a Format-Y
+      file or simultaneously a Format-Y and Format-X file.
+
+    <p>The Format-X meta-data can be thought of as the original
+      wrapper around raw data and Format-Y is a second wrapper around
+      the same data.  The wrappers are independend of one another;
+      modifying the meta-data in one wrapper causes the other to
+      become out of date.  Modification of raw data doesn't invalidate
+      either view as long as the meta data that describes its storage
+      isn't modifed. For instance, an array element can change values
+      if storage is already allocated for the element, but if storage
+      isn't allocated then the meta data describing the storage must
+      change, invalidating all wrappers but one.
+
+    <p>It's perfectly legal to modify the meta data of one wrapper
+      without modifying the meta data in the other wrapper(s).  The
+      illegal part is accessing the raw data through a wrapper which
+      is out of date.
+
+    <p>If raw data is wrapped by more than one internal wrapper
+      (<i>internal</i> means that the wrapper is in the same file as
+      the raw data) then access to that file must assume that
+      unreferenced parts of that file contain meta data for another
+      wrapper and cannot be reclaimed as free memory.
+
+    <hr>
+    <h2>Implementation of Condition B</h2>
+
+    <p>Since this is a temporary situation which can't be
+      automatically detected by the HDF5 library, we must rely
+      on the application to notify the HDF5 library whether or not it
+      must satisfy Condition B. (Even if we don't rely on the
+      application, at some point someone is going to remove the
+      Condition B constraint from the library.)  So the module that
+      handles Condition B is conditionally compiled and then enabled
+      on a per-file basis.
+
+    <p>If the application desires to produce an HDF4 file (determined
+      by arguments to <code>H5Fopen</code>), and the Condition B
+      module is compiled into the library, then <code>H5Fclose</code>
+      calls the module to traverse the HDF5 wrapper and generate an
+      additional internal or external HDF4 wrapper (wrapper specifics
+      are described below).  If Condition B is implemented as a module
+      then it can benefit from the metadata already cached by the main
+      library.
+
+    <p>An internal HDF4 wrapper would be used if the HDF5 file is
+      writable and the user doesn't mind that the HDF5 file is
+      modified.  An external wrapper would be used if the file isn't
+      writable or if the user wants the data file to be primarily HDF5
+      but a few applications need an HDF4 view of the data.
+
+    <p>Modifying through the HDF5 library an HDF5 file that has
+      internal HDF4 wrapper should invalidate the HDF4 wrapper (and
+      optionally regenerate it when <code>H5Fclose</code> is
+      called). The HDF5 library must understand how wrappers work, but
+      not necessarily anything about the HDF4 file format.
+
+    <p>Modifying through the HDF5 library an HDF5 file that has an
+      external HDF4 wrapper will cause the HDF4 wrapper to become out
+      of date (but possibly regenerated during <code>H5Fclose</code>).
+      <b>Note:  Perhaps the next release of the HDF4 library should
+      insure that the HDF4 wrapper file has a more recent modification
+      time than the raw data file (the HDF5 file) to which it
+      points(?)</b>
+
+    <p>Modifying through the HDF4 library an HDF5 file that has an
+      internal or external HDF4 wrapper will cause the HDF5 wrapper to
+      become out of date. However, there is now way for the old HDF4
+      library to notify the HDF5 wrapper that it's out of date.
+      Therefore the HDF5 library must be able to detect when the HDF5
+      wrapper is out of date and be able to fix it. If the HDF4
+      wrapper is complete then the easy way is to ignore the original
+      HDF5 wrapper and generate a new one from the HDF4 wrapper. The
+      other approach is to compare the HDF4 and HDF5 wrappers and
+      assume that if they differ HDF4 is the right one, if HDF4 omits
+      data then it was because HDF4 is a partial wrapper (rather than
+      assume HDF4 deleted the data), and if HDF4 has new data then
+      copy the new meta data to the HDF5 wrapper. On the other hand,
+      perhaps we don't need to allow these situations (modifying an
+      HDF5 file with the old HDF4 library and then accessing it with
+      the HDF5 library is either disallowed or causes HDF5 objects
+      that can't be described by HDF4 to be lost).
+
+    <p>To convert an HDF5 file to an HDF4 file on demand, one simply
+      opens the file with the HDF4 flag and closes it. This is also
+      how AIO implemented backward compatability with PDB in its file
+      format.
+
+    <hr>
+    <h2>Implementation of Condition C</h2>
+
+    <p>This condition must be satisfied for all time because there
+      will always be archived HDF4 files. If a pure HDF4 file (that
+      is, one without HDF5 meta data) is opened with an HDF5 library,
+      the <code>H5Fopen</code> builds an internal or external HDF5
+      wrapper and then accesses the raw data through that wrapper. If
+      the HDF5 library modifies the file then the HDF4 wrapper becomes
+      out of date.  However, since the HDF5 library hasn't been
+      released, we can at least implement it to disable and/or reclaim
+      the HDF4 wrapper.
+
+    <p>If an external and temporary HDF5 wrapper is desired, the
+      wrapper is created through the cache like all other HDF5 files.
+      The data appears on disk only if a particular cached datum is
+      preempted. Instead of calling <code>H5Fclose</code> on the HDF5
+      wrapper file we call <code>H5Fabort</code> which immediately
+      releases all file resources without updating the file, and then
+      we unlink the file from Unix.
+
+    <hr>
+    <h2>What do wrappers look like?</h2>
+
+    <p>External wrappers are quite obvious: they contain only things
+      from the format specs for the wrapper and nothing from the
+      format specs of the format which they wrap.
+
+    <p>An internal HDF4 wrapper is added to an HDF5 file in such a way
+      that the file appears to be both an HDF4 file and an HDF5
+      file. HDF4 requires an HDF4 file header at file offset zero. If
+      a user block is present then we just move the user block down a
+      bit (and truncate it) and insert the minimum HDF4 signature.
+      The HDF4 <code>dd</code> list and any other data it needs are
+      appended to the end of the file and the HDF5 signature uses the
+      logical file length field to determine the beginning of the
+      trailing part of the wrapper.
+
+    <p>
+  <center>
+	<table border width="60%">
+	  <tr>
+	    <td>HDF4 minimal file header. Its main job is to point to
+	      the <code>dd</code> list at the end of the file.</td>
+	  </tr>
+	  <tr>
+	    <td>User-defined block which is truncated by the size of the
+	      HDF4 file header so that the HDF5 boot block file address
+	      doesn't change.</td>
+	  </tr>
+	  <tr>
+	    <td>The HDF5 boot block and data, unmodified by adding the
+	      HDF4 wrapper.</td>
+	  </tr>
+	  <tr>
+	    <td>The main part of the HDF4 wrapper.  The <code>dd</code>
+	      list will have entries for all parts of the file so
+	      hdpack(?) doesn't (re)move anything.</td>
+	  </tr>
+	</table>
+  </center>
+    
+    <p>When such a file is opened by the HDF5 library for
+      modification it shifts the user block back down to address zero
+      and fills with zeros, then truncates the file at the end of the
+      HDF5 data or adds the trailing HDF4 wrapper to the free
+      list. This prevents HDF4 applications from reading the file with
+      an out of date wrapper.
+
+    <p>If there is no user block then we have a problem.  The HDF5
+      boot block must be moved to make room for the HDF4 file header.
+      But moving just the boot block causes problems because all file
+      addresses stored in the file are relative to the boot block
+      address.  The only option is to shift the entire file contents
+      by 512 bytes to open up a user block (too bad we don't have
+      hooks into the Unix i-node stuff so we could shift the entire
+      file contents by the size of a file system page without ever
+      performing I/O on the file :-)
+
+    <p>Is it possible to place an HDF5 wrapper in an HDF4 file?  I
+      don't know enough about the HDF4 format, but I would suspect it
+      might be possible to open a hole at file address 512 (and
+      possibly before) by moving some things to the end of the file
+      to make room for the HDF5 signature.  The remainder of the HDF5
+      wrapper goes at the end of the file and entries are added to the
+      HDF4 <code>dd</code> list to mark the location(s) of the HDF5
+      wrapper.
+
+    <hr>
+    <h2>Other Thoughts</h2>
+
+    <p>Conversion programs that copy an entire HDF4 file to a separate,
+      self-contained HDF5 file and vice versa might be useful.
+
+
+
+
+    <hr>
+    <address><a href="mailto:matzke at llnl.gov">Robb Matzke</a></address>
+<!-- Created: Fri Oct  3 11:52:31 EST 1997 -->
+<!-- hhmts start -->
+Last modified: Wed Oct  8 12:34:42 EST 1997
+<!-- hhmts end -->
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/HeapMgmt.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/HeapMgmt.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/HeapMgmt.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,104 @@
+<html>
+<body>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<h1>Heap Management in HDF5</h1>
+
+<pre>
+
+Heap functions are in the H5H package.
+
+
+off_t
+H5H_new (hdf5_file_t *f, size_t size_hint, size_t realloc_hint);
+
+	Creates a new heap in the specified file which can efficiently
+	store at least SIZE_HINT bytes.  The heap can store more than
+	that, but doing so may cause the heap to become less efficient
+	(for instance, a heap implemented as a B-tree might become
+	discontigous).  The REALLOC_HINT is the minimum number of bytes
+	by which the heap will grow when it must be resized. The hints
+	may be zero in which case reasonable (but probably not
+	optimal) values will be chosen.
+
+	The return value is the address of the new heap relative to
+	the beginning of the file boot block.
+
+off_t
+H5H_insert (hdf5_file_t *f, off_t addr, size_t size, const void *buf);
+
+	Copies SIZE bytes of data from BUF into the heap whose address
+	is ADDR in file F.  BUF must be the _entire_ heap object.  The
+	return value is the byte offset of the new data in the heap.
+
+void *
+H5H_read (hdf5_file_t *f, off_t addr, off_t offset, size_t size, void *buf);
+
+	Copies SIZE bytes of data from the heap whose address is ADDR
+	in file F into BUF and then returns the address of BUF.  If
+	BUF is the null pointer then a new buffer will be malloc'd by
+	this function and its address is returned.
+
+	Returns buffer address or null.
+
+const void *
+H5H_peek (hdf5_file_t *f, off_t addr, off_t offset)
+
+	A more efficient version of H5H_read that returns a pointer
+	directly into the cache; the data is not copied from the cache
+	to a buffer.  The pointer is valid until the next call to an
+	H5AC function directly or indirectly.
+
+	Returns a pointer or null.  Do not free the pointer.
+
+void *
+H5H_write (hdf5_file_t *f, off_t addr, off_t offset, size_t size,
+           const void *buf);
+
+	Modifies (part of) an object in the heap at address ADDR of
+	file F by copying SIZE bytes from the beginning of BUF to the
+	file.  OFFSET is the address withing the heap where the output
+	is to occur.
+
+	This function can fail if the combination of OFFSET and SIZE
+	would write over a boundary between two heap objects.
+
+herr_t
+H5H_remove (hdf5_file_t *f, off_t addr, off_t offset, size_t size);
+
+	Removes an object or part of an object which begins at byte
+	OFFSET within a heap whose address is ADDR in file F.  SIZE
+	bytes are returned to the free list.  Removing the middle of
+	an object has the side effect that one object is now split
+	into two objects.
+
+	Returns success or failure.
+
+===========================================
+Last Modified:  8 July 1998 (technical content)
+Last Modified:  28 April 2000 (included in HDF5 Technical Notes)
+HDF Help Desk:  hdfhelp at ncsa.uiuc.edu
+
+</pre>
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/IOPipe.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/IOPipe.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/IOPipe.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>The Raw Data I/O Pipeline</title>
+  </head>
+
+  <body>
+  
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+  <!-- separator -->
+  <!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+  <!-- separator -->
+  <!-- #EndLibraryItem -->
+  
+  <h1>The Raw Data I/O Pipeline</h1>
+
+    <p>The HDF5 raw data pipeline is a complicated beast that handles
+      all aspects of raw data storage and transfer of that data
+      between the file and the application.  Data can be stored
+      contiguously (internal or external), in variable size external
+      segments, or regularly chunked; it can be sparse, extendible,
+      and/or compressible. Data transfers must be able to convert from
+      one data space to another, convert from one number type to
+      another, and perform partial I/O operations. Furthermore,
+      applications will expect their common usage of the pipeline to
+      perform well.
+
+    <p>To accomplish these goals, the pipeline has been designed in a
+      modular way so no single subroutine is overly complicated and so
+      functionality can be inserted easily at the appropriate
+      locations in the pipeline.  A general pipeline was developed and
+      then certain paths through the pipeline were optimized for
+      performance.
+
+    <p>We describe only the file-to-memory side of the pipeline since
+      the memory-to-file side is a mirror image. We also assume that a
+      proper hyperslab of a simple data space is being read from the
+      file into a proper hyperslab of a simple data space in memory,
+      and that the data type is a compound type which may require
+      various number conversions on its members.
+
+      <img alt="Figure 1" src="pipe1.gif">
+
+    <p>The diagrams should be read from the top down. The Line A
+      in the figure above shows that <code>H5Dread()</code> copies
+      data from a hyperslab of a file dataset to a hyperslab of an
+      application buffer by calling <code>H5D_read()</code>. And
+      <code>H5D_read()</code> calls, in a loop,
+      <code>H5S_simp_fgath()</code>, <code>H5T_conv_struct()</code>,
+      and <code>H5S_simp_mscat()</code>. A temporary buffer, TCONV, is
+      loaded with data points from the file, then data type conversion
+      is performed on the temporary buffer, and finally data points
+      are scattered out to application memory. Thus, data type
+      conversion is an in-place operation and data space conversion
+      consists of two steps. An additional temporary buffer, BKG, is
+      large enough to hold <em>N</em> instances of the destination
+      data type where <em>N</em> is the same number of data points
+      that can be held by the TCONV buffer (which is large enough to
+      hold either source or destination data points).
+
+    <p>The application sets an upper limit for the size of the TCONV
+      buffer and optionally supplies a buffer. If no buffer is
+      supplied then one will be created by calling
+      <code>malloc()</code> when the pipeline is executed (when
+      necessary) and freed when the pipeline exits.  The size of the
+      BKG buffer depends on the size of the TCONV buffer and if the
+      application supplies a BKG buffer it should be at least as large
+      as the TCONV buffer.  The default size for these buffers is one
+      megabyte but the buffer might not be used to full capacity if
+      the buffer size is not an integer multiple of the source or
+      destination data point size (whichever is larger, but only
+      destination for the BKG buffer).
+
+
+
+    <p>Occassionally the destination data points will be partially
+      initialized and the <code>H5Dread()</code> operation should not
+      clobber those values.  For instance, the destination type might
+      be a struct with members <code>a</code> and <code>b</code> where
+      <code>a</code> is already initialized and we're reading
+      <code>b</code> from the file.  An extra line, G, is added to the
+      pipeline to provide the type conversion functions with the
+      existing data.
+
+      <img alt="Figure 2" src="pipe2.gif">
+
+    <p>It will most likely be quite common that no data type
+      conversion is necessary.  In such cases a temporary buffer for
+      data type conversion is not needed and data space conversion
+      can happen in a single step. In fact, when the source and
+      destination data are both contiguous (they aren't in the
+      picture) the loop degenerates to a single iteration.
+
+
+      <img alt="Figure 3" src="pipe3.gif">
+
+    <p>So far we've looked only at internal contiguous storage, but by
+      replacing Line B in Figures 1 and 2 and Line A in Figure 3 with
+      Figure 4 the pipeline is able to handle regularly chunked
+      objects. Line B of Figure 4 is executed once for each chunk
+      which contains data to be read and the chunk address is found by
+      looking at a multi-dimensional key in a chunk B-tree which has
+      one entry per chunk.
+
+      <img alt="Figure 4" src="pipe4.gif">
+
+    <p>If a single chunk is requested and the destination buffer is
+      the same size/shape as the chunk, then the CHUNK buffer is
+      bypassed and the destination buffer is used instead as shown in
+      Figure 5.
+
+      <img alt="Figure 5" src="pipe5.gif">
+
+    <hr>
+    <address><a href="mailto:matzke at llnl.gov">Robb Matzke</a></address>
+<!-- Created: Tue Mar 17 11:13:35 EST 1998 -->
+<!-- hhmts start -->
+Last modified: Wed Mar 18 10:38:30 EST 1998
+<!-- hhmts end -->
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/LibMaint.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/LibMaint.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/LibMaint.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,147 @@
+<html>
+<body>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<h1>Information for HDF5 Maintainers</h1>
+
+<pre>
+
+* You can run make from any directory.  However, running in a
+  subdirectory only knows how to build things in that directory and
+  below.  However, all makefiles know when their target depends on
+  something outside the local directory tree:
+
+	$ cd test
+	$ make
+	make: *** No rule to make target ../src/libhdf5.a
+
+* All Makefiles understand the following targets:
+
+        all              -- build locally.
+        install          -- install libs, headers, progs.
+        uninstall        -- remove installed files.
+        mostlyclean      -- remove temp files (eg, *.o but not *.a).
+        clean            -- mostlyclean plus libs and progs.
+        distclean        -- all non-distributed files.
+        maintainer-clean -- all derived files but H5config.h.in and configure.
+
+* Most Makefiles also understand:
+
+	TAGS		-- build a tags table
+	dep, depend	-- recalculate source dependencies
+	lib		-- build just the libraries w/o programs
+
+* If you have personal preferences for which make, compiler, compiler
+  flags, preprocessor flags, etc., that you use and you don't want to
+  set environment variables, then use a site configuration file.
+
+  When configure starts, it looks in the config directory for files
+  whose name is some combination of the CPU name, vendor, and
+  operating system in this order:
+
+	CPU-VENDOR-OS
+	VENDOR-OS
+	CPU-VENDOR
+	OS
+	VENDOR
+	CPU
+
+  The first file which is found is sourced and can therefore affect
+  the behavior of the rest of configure. See config/BlankForm for the
+  template.
+
+* If you use GNU make along with gcc the Makefile will contain targets
+  that automatically maintain a list of source interdependencies; you
+  seldom have to say `make clean'.  I say `seldom' because if you
+  change how one `*.h' file includes other `*.h' files you'll have
+  to force an update.
+
+  To force an update of all dependency information remove the
+  `.depend' file from each directory and type `make'.  For
+  instance:
+
+	$ cd $HDF5_HOME
+	$ find . -name .depend -exec rm {} \;
+	$ make
+
+  If you're not using GNU make and gcc then dependencies come from
+  ".distdep" files in each directory.  Those files are generated on
+  GNU systems and inserted into the Makefile's by running
+  config.status (which happens near the end of configure).
+
+* If you use GNU make along with gcc then the Perl script `trace' is
+  run just before dependencies are calculated to update any H5TRACE()
+  calls that might appear in the file.  Otherwise, after changing the
+  type of a function (return type or argument types) one should run
+  `trace' manually on those source files (e.g., ../bin/trace *.c).
+
+* Object files stay in the directory and are added to the library as a
+  final step instead of placing the file in the library immediately
+  and removing it from the directory.  The reason is three-fold:
+
+	1.  Most versions of make don't allow `$(LIB)($(SRC:.c=.o))'
+	    which makes it necessary to have two lists of files, one
+	    that ends with `.c' and the other that has the library
+	    name wrapped around each `.o' file.
+
+	2.  Some versions of make/ar have problems with modification
+	    times of archive members.
+
+	3.  Adding object files immediately causes problems on SMP
+	    machines where make is doing more than one thing at a
+	    time.
+
+* When using GNU make on an SMP you can cause it to compile more than
+  one thing at a time.  At the top of the source tree invoke make as
+
+	$ make -j -l6
+
+  which causes make to fork as many children as possible as long as
+  the load average doesn't go above 6.  In subdirectories one can say
+
+	$ make -j2
+
+  which limits the number of children to two (this doesn't work at the
+  top level because the `-j2' is not passed to recursive makes).
+
+* To create a release tarball go to the top-level directory and run
+  ./bin/release.  You can optionally supply one or more of the words
+  `tar', `gzip', `bzip2' or `compress' on the command line.  The
+  result will be a (compressed) tar file(s) in the `releases'
+  directory.  The README file is updated to contain the release date
+  and version number.
+
+* To create a tarball of all the files which are part of HDF5 go to
+  the top-level directory and type:
+
+      tar cvf foo.tar `grep '^\.' MANIFEST |unexpand |cut -f1`
+
+
+===========================================
+Last Modified:  15 October 1999 (technical content)
+Last Modified:  28 April 2000 (included in HDF5 Technical Notes)
+HDF Help Desk:  hdfhelp at ncsa.uiuc.edu
+
+</pre>
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,45 @@
+# HDF5 Library Makefile(.in)
+#
+# 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.
+#
+# 
+top_srcdir=@top_srcdir@
+top_builddir=../../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+SUBDIRS=
+DOCDIR=$(docdir)/hdf5/TechNotes
+
+TRACE=perl $(top_srcdir)/bin/trace
+
+# Temporary files
+MOSTLYCLEAN=
+
+# Public doc files (to be installed)...
+PUB_DOCS=BigDataSmMach.html ChStudy_1000x1000.gif ChStudy_250x250.gif      \
+         ChStudy_499x499.gif ChStudy_5000x1000.gif ChStudy_500x500.gif     \
+         ChStudy_p1.gif ChunkingStudy.html CodeReview.html                 \
+         ExternalFiles.html FreeLists.html H4-H5Compat.html HeapMgmt.html  \
+         IOPipe.html LibMaint.html MemoryMgmt.html MoveDStruct.html        \
+         NamingScheme.html ObjectHeader.html RawDStorage.html              \
+         SWControls.html SymbolTables.html ThreadSafeLibrary.html VFL.html \
+         VFLfunc.html Version.html openmp-hdf5.c openmp-hdf5.html          \
+         pipe1.gif pipe2.gif pipe3.gif pipe4.gif pipe5.gif version.gif
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=ChStudy_p1.obj pipe1.obj pipe2.obj pipe3.obj pipe4.obj pipe5.obj
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/MemoryMgmt.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/MemoryMgmt.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/MemoryMgmt.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,531 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Memory Management in HDF5</title>
+  </head>
+
+  <body>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+  <!-- separator -->
+  <!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+  <!-- separator -->
+  <!-- #EndLibraryItem -->
+   
+  <h1>Memory Management in HDF5</h1>
+
+      <!-- ---------------------------------------------------------------- -->
+      <h2>Is a Memory Manager Necessary?</h2>
+
+      <p>Some form of memory management may be necessary in HDF5 when
+	the various deletion operators are implemented so that the
+	file memory is not permanently orphaned.  However, since an
+	HDF5 file was designed with persistent data in mind, the
+	importance of a memory manager is questionable.
+
+      <p>On the other hand, when certain meta data containers (file glue)
+	grow, they may need to be relocated in order to keep the
+	container contiguous.
+
+	<blockquote>
+	  <b>Example:</b> An object header consists of up to two
+	  chunks of contiguous memory.  The first chunk is a fixed
+	  size at a fixed location when the header link count is
+	  greater than one.  Thus, inserting additional items into an
+	  object header may require the second chunk to expand.  When
+	  this occurs, the second chunk may need to move to another
+	  location in the file, freeing the file memory which that
+	  chunk originally occupied.
+  </blockquote>
+
+      <p>The relocation of meta data containers could potentially
+	orphan a significant amount of file memory if the application
+	has made poor estimates for preallocation sizes.
+
+      <!-- ---------------------------------------------------------------- -->
+      <h2>Levels of Memory Management</h2>
+
+      <p>Memory management by the library can be independent of memory
+	management support by the file format.  The file format can
+	support no memory management, some memory management, or full
+	memory management.  Similarly with the library.
+
+      <h3>Support in the Library</h3>
+
+      <dl>
+	<dt><b>No Support: I</b>
+	<dd>When memory is deallocated it simply becomes unreferenced
+	  (orphaned) in the file.  Memory allocation requests are
+	  satisfied by extending the file.
+	  
+	<dd>A separate off-line utility can be used to detect the
+	  unreferenced bytes of a file and "bubble" them up to the end
+	  of the file and then truncate the file.
+
+	<dt><b>Some Support: II</b>
+	<dd>The library could support partial memory management all
+	  the time, or full memory management some of the time.
+	  Orphaning free blocks instead of adding them to a free list
+	  should not affect the file integrity, nor should fulfilling
+	  new requests by extending the file instead of using the free
+	  list.
+
+	<dt><b>Full Support: III</b>
+	<dd>The library supports space-efficient memory management by
+	  always fulfilling allocation requests from the free list when
+	  possible, and by coalescing adjacent free blocks into a
+	  single larger free block.
+      </dl>
+
+      <h3>Support in the File Format</h3>
+      
+      <dl>
+	<dt><b>No Support: A</b>
+	<dd>The file format does not support memory management; any
+	  unreferenced block in the file is assumed to be free.  If
+	  the library supports full memory management then it will
+	  have to traverse the entire file to determine which blocks
+	  are unreferenced.
+
+	<dt><b>Some Support: B</b>
+	<dd>Assuming that unreferenced blocks are free can be
+	  dangerous in a situation where the file is not consistent.
+	  For instance, if a directory tree becomes detached from the
+	  main directory hierarchy, then the detached directory and
+	  everything that is referenced only through the detached
+	  directory become unreferenced.  File repair utilities will
+	  be unable to determine which unreferenced blocks need to be
+	  linked back into the file hierarchy.
+
+	<dd>Therefore, it might be useful to keep an unsorted,
+	  doubly-linked list of free blocks in the file.  The library
+	  can add and remove blocks from the list in constant time,
+	  and can generate its own internal free-block data structure
+	  in time proportional to the number of free blocks instead of
+	  the size of the file.  Additionally, a library can use a
+	  subset of the free blocks, an alternative which is not
+	  feasible if the file format doesn't support any form of
+	  memory management.
+
+	<dt><b>Full Support: C</b>
+	<dd>The file format can mirror library data structures for
+	  space-efficient memory management.  The free blocks are
+	  linked in unsorted, doubly-linked lists with one list per
+	  free block size.  The heads of the lists are pointed to by a
+	  B-tree whose nodes are sorted by free block size.  At the
+	  same time, all free blocks are the leaf nodes of another
+	  B-tree sorted by starting and ending address.  When the
+	  trees are used in combination we can deallocate and allocate
+	  memory in O(log <em>N</em>) time where <em>N</em> is the
+	  number of free blocks.
+      </dl>
+
+      <h3>Combinations of Library and File Format Support</h3>
+
+      <p>We now evaluate each combination of library support with file
+	support:
+
+      <dl>
+	<dt><b>I-A</b>
+	<dd>If neither the library nor the file support memory
+	  management, then each allocation request will come from the
+	  end of the file and each deallocation request is a no-op
+	  that simply leaves the free block unreferenced.
+
+	  <ul>
+	    <li>Advantages
+	      <ul>
+		<li>No file overhead for allocation or deallocation.
+		<li>No library overhead for allocation or
+		  deallocation.
+		<li>No file traversal required at time of open.
+		<li>No data needs to be written back to the file when
+		  it's closed.
+		<li>Trivial to implement (already implemented).
+	      </ul>
+
+	    <li>Disadvantages
+	      <ul>
+		<li>Inefficient use of file space.
+		<li>A file repair utility must reclaim lost file space.
+		<li>Difficulties for file repair utilities. (Is an
+		  unreferenced block a free block or orphaned data?)
+	      </ul>
+	  </ul>
+
+	<dt><b>II-A</b>
+	<dd>In order for the library to support memory management, it
+	  will be required to build the internal free block
+	  representation by traversing the entire file looking for
+	  unreferenced blocks.
+
+	  <ul>
+	    <li>Advantages
+	      <ul>
+		<li>No file overhead for allocation or deallocation.
+		<li>Variable amount of library overhead for allocation
+		  and deallocation depending on how much work the
+		  library wants to do.
+		<li>No data needs to be written back to the file when
+		  it's closed.
+		<li>Might use file space efficiently.
+	      </ul>
+	    <li>Disadvantages
+	      <ul>
+		<li>Might use file space inefficiently.
+		<li>File traversal required at time of open.
+		<li>A file repair utility must reclaim lost file space.
+		<li>Difficulties for file repair utilities.
+		<li>Sharing of the free list between processes falls
+		  outside the HDF5 file format documentation.
+	      </ul>
+	  </ul>
+
+	<dt><b>III-A</b>
+	<dd>In order for the library to support full memory
+	  management, it will be required to build the internal free
+	  block representation by traversing the entire file looking
+	  for unreferenced blocks.
+
+	  <ul>
+	    <li>Advantages
+	      <ul>
+		<li>No file overhead for allocation or deallocation.
+		<li>Efficient use of file space.
+		<li>No data needs to be written back to the file when
+		  it's closed.
+	      </ul>
+	    <li>Disadvantages
+	      <ul>
+		<li>Moderate amount of library overhead for allocation
+		  and deallocation.
+		<li>File traversal required at time of open.
+		<li>A file repair utility must reclaim lost file space.
+		<li>Difficulties for file repair utilities.
+		<li>Sharing of the free list between processes falls
+		  outside the HDF5 file format documentation.
+	      </ul>
+	  </ul>
+
+	<dt><b>I-B</b>
+	<dd>If the library doesn't support memory management but the
+	  file format supports some level of management, then a file
+	  repair utility will have to be run occasionally to reclaim
+	  unreferenced blocks.
+
+	  <ul>
+	    <li>Advantages
+	      <ul>
+		<li>No file overhead for allocation or deallocation.
+		<li>No library overhead for allocation or
+		  deallocation.
+		<li>No file traversal required at time of open.
+		<li>No data needs to be written back to the file when
+		  it's closed.
+	      </ul>
+	    <li>Disadvantages
+	      <ul>
+		<li>A file repair utility must reclaim lost file space.
+		<li>Difficulties for file repair utilities.
+	      </ul>
+	  </ul>
+
+	<dt><b>II-B</b>
+	<dd>Both the library and the file format support some level
+	  of memory management.
+
+	  <ul>
+	    <li>Advantages
+	      <ul>
+		<li>Constant file overhead per allocation or
+		  deallocation.
+		<li>Variable library overhead per allocation or
+		  deallocation depending on how much work the library
+		  wants to do.
+		<li>Traversal at file open time is on the order of the
+		  free list size instead of the file size.
+		<li>The library has the option of reading only part of
+		  the free list.
+		<li>No data needs to be written at file close time if
+		  it has been amortized into the cost of allocation
+		  and deallocation.
+		<li>File repair utilties don't have to be run to
+		  reclaim memory.
+		<li>File repair utilities can detect whether an
+		  unreferenced block is a free block or orphaned data.
+		<li>Sharing of the free list between processes might
+		  be easier.
+		<li>Possible efficient use of file space.
+	      </ul>
+	    <li>Disadvantages
+	      <ul>
+		<li>Possible inefficient use of file space.
+	      </ul>
+	  </ul>
+
+	<dt><b>III-B</b>
+	<dd>The library provides space-efficient memory management but
+	  the file format only supports an unsorted list of free
+	  blocks.
+
+	  <ul>
+	    <li>Advantages
+	      <ul>
+		<li>Constant time file overhead per allocation or
+		  deallocation.
+		<li>No data needs to be written at file close time if
+		  it has been amortized into the cost of allocation
+		  and deallocation.
+		<li>File repair utilities don't have to be run to
+		  reclaim memory.
+		<li>File repair utilities can detect whether an
+		  unreferenced block is a free block or orphaned data.
+		<li>Sharing of the free list between processes might
+		  be easier.
+		<li>Efficient use of file space.
+	      </ul>
+	    <li>Disadvantages
+	      <ul>
+		<li>O(log <em>N</em>) library overhead per allocation or
+		  deallocation where <em>N</em> is the total number of
+		  free blocks.
+		<li>O(<em>N</em>) time to open a file since the entire
+		  free list must be read to construct the in-core
+		  trees used by the library.
+		<li>Library is more complicated.
+	      </ul>
+	  </ul>
+
+	<dt><b>I-C</b>
+	<dd>This has the same advantages and disadvantages as I-C with
+	  the added disadvantage that the file format is much more
+	  complicated.
+
+	<dt><b>II-C</b>
+	<dd>If the library only provides partial memory management but
+	  the file requires full memory management, then this method
+	  degenerates to the same as II-A with the added disadvantage
+	  that the file format is much more complicated.
+
+	<dt><b>III-C</b>
+	<dd>The library and file format both provide complete data
+	  structures for space-efficient memory management.
+
+	  <ul>
+	    <li>Advantages
+	      <ul>
+		<li>Files can be opened in constant time since the
+		  free list is read on demand and amortised into the
+		  allocation and deallocation requests.
+		<li>No data needs to be written back to the file when
+		  it's closed.
+		<li>File repair utilities don't have to be run to
+		  reclaim memory.
+		<li>File repair utilities can detect whether an
+		  unreferenced block is a free block or orphaned data.
+		<li>Sharing the free list between processes is easy.
+		<li>Efficient use of file space.
+	      </ul>
+	    <li>Disadvantages
+	      <ul>
+		<li>O(log <em>N</em>) file allocation and deallocation
+		  cost where <em>N</em> is the total number of free
+		  blocks.
+		<li>O(log <em>N</em>) library allocation and
+		  deallocation cost.
+		<li>Much more complicated file format.
+		<li>More complicated library.
+	      </ul>
+	  </ul>
+
+      </dl>
+
+      <!-- ---------------------------------------------------------------- -->
+      <h2>The Algorithm for II-B</h2>
+
+      <p>The file contains an unsorted, doubly-linked list of free
+	blocks.  The address of the head of the list appears in the
+	boot block.  Each free block contains the following fields:
+
+      <center>
+      <table border cellpadding=4 width="60%">
+	<tr align=center>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+	  <th width="25%">byte</th>
+
+	<tr align=center>
+	  <th colspan=4>Free Block Signature</th>
+
+	<tr align=center>
+	  <th colspan=4>Total Free Block Size</th>
+
+	<tr align=center>
+	  <th colspan=4>Address of Left Sibling</th>
+
+	<tr align=center>
+	  <th colspan=4>Address of Right Sibling</th>
+
+	<tr align=center>
+	  <th colspan=4><br><br>Remainder of Free Block<br><br><br></th>
+      </table>
+      </center>
+      
+      <p>The library reads as much of the free list as convenient when
+	convenient and pushes those entries onto stacks.  This can
+	occur when a file is opened or any time during the life of the
+	file. There is one stack for each free block size and the
+	stacks are sorted by size in a balanced tree in memory.
+
+      <p>Deallocation involves finding the correct stack or creating
+	a new one (an O(log <em>K</em>) operation where <em>K</em> is
+	the number of stacks), pushing the free block info onto the
+	stack (a constant-time operation), and inserting the free
+	block into the file free block list (a constant-time operation
+	which doesn't necessarily involve any I/O since the free blocks
+	can be cached like other objects).  No attempt is made to
+	coalesce adjacent free blocks into larger blocks.
+
+      <p>Allocation involves finding the correct stack (an O(log
+	<em>K</em>) operation), removing the top item from the stack
+	(a constant-time operation), and removing the block from the
+	file free block list (a constant-time operation).  If there is
+	no free block of the requested size or larger, then the file
+	is extended.
+
+      <p>To provide sharability of the free list between processes,
+	the last step of an allocation will check for the free block
+	signature and if it doesn't find one will repeat the process.
+	Alternatively, a process can temporarily remove free blocks
+	from the file and hold them in it's own private pool.
+
+      <p>To summarize...
+	<dl>
+	<dt>File opening
+	<dd>O(<em>N</em>) amortized over the time the file is open,
+	  where <em>N</em> is the number of free blocks.  The library
+	  can still function without reading any of the file free
+	  block list.
+
+	<dt>Deallocation
+	<dd>O(log <em>K</em>) where <em>K</em> is the number of unique
+	  sizes of free blocks.  File access is constant.
+
+	<dt>Allocation
+	<dd>O(log <em>K</em>).  File access is constant.
+
+	<dt>File closing
+	<dd>O(1) even if the library temporarily removes free
+	  blocks from the file to hold them in a private pool since
+	  the pool can still be a linked list on disk.
+  </dl>
+
+      <!-- ---------------------------------------------------------------- -->
+      <h2>The Algorithm for III-C</h2>
+
+      <p>The HDF5 file format supports a general B-tree mechanism
+	for storing data with keys.  If we use a B-tree to represent
+	all parts of the file that are free and the B-tree is indexed
+	so that a free file chunk can be found if we know the starting
+	or ending address, then we can efficiently determine whether a
+	free chunk begins or ends at the specified address.  Call this
+	the <em>Address B-Tree</em>.
+
+      <p>If a second B-tree points to a set of stacks where the
+	members of a particular stack are all free chunks of the same
+	size, and the tree is indexed by chunk size, then we can
+	efficiently find the best-fit chunk size for a memory request.
+	Call this the <em>Size B-Tree</em>.
+
+      <p>All free blocks of a particular size can be linked together
+	with an unsorted, doubly-linked, circular list and the left
+	and right sibling addresses can be stored within the free
+	chunk, allowing us to remove or insert items from the list in
+	constant time.
+
+      <p>Deallocation of a block fo file memory consists of:
+
+	<ol type="I">
+	<li>Add the new free block whose address is <em>ADDR</em> to the
+	  address B-tree.
+
+	  <ol type="A">
+	    <li>If the address B-tree contains an entry for a free
+	      block that ends at <em>ADDR</em>-1 then remove that
+	      block from the B-tree and from the linked list (if the
+	      block was the first on the list then the size B-tree
+	      must be updated).  Adjust the size and address of the
+	      block being freed to include the block just removed from
+	      the free list.  The time required to search for and
+	      possibly remove the left block is O(log <em>N</em>)
+	      where <em>N</em> is the number of free blocks.
+
+	    <li>If the address B-tree contains an entry for the free
+	      block that begins at <em>ADDR</em>+<em>LENGTH</em> then
+	      remove that block from the B-tree and from the linked
+	      list (if the block was the first on the list then the
+	      size B-tree must be updated).  Adjust the size of the
+	      block being freed to include the block just removed from
+	      the free list.  The time required to search for and
+	      possibly remove the right block is O(log <em>N</em>).
+
+	    <li>Add the new (adjusted) block to the address B-tree.
+	      The time for this operation is O(log <em>N</em>).
+	  </ol>
+
+	<li>Add the new block to the size B-tree and linked list.
+
+	  <ol type="A">
+	    <li>If the size B-tree has an entry for this particular
+	      size, then add the chunk to the tail of the list. This
+	      is an O(log <em>K</em>) operation where <em>K</em> is
+	      the number of unique free block sizes.
+
+	    <li>Otherwise make a new entry in the B-tree for chunks of
+	      this size.  This is also O(log <em>K</em>).
+	  </ol>
+  </ol>
+
+      <p>Allocation is similar to deallocation.
+
+      <p>To summarize...
+
+      <dl>
+	<dt>File opening
+	<dd>O(1)
+
+	<dt>Deallocation
+	<dd>O(log <em>N</em>) where <em>N</em> is the total number of
+	  free blocks.  File access time is O(log <em>N</em>).
+
+	<dt>Allocation
+	<dd>O(log <em>N</em>).  File access time is O(log <em>N</em>).
+
+	<dt>File closing
+	<dd>O(1).
+      </dl>
+
+
+      <hr>
+      <address><a href="mailto:matzke at llnl.gov">Robb Matzke</a></address>
+<!-- Created: Thu Jul 24 15:16:40 PDT 1997 -->
+<!-- hhmts start -->
+Last modified: Thu Jul 31 14:41:01 EST 
+<!-- hhmts end -->
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/MoveDStruct.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/MoveDStruct.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/MoveDStruct.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,87 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Relocating a File Data Structure</title>
+  </head>
+
+  <body>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+  <!-- separator -->
+  <!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+  <!-- separator -->
+  <!-- #EndLibraryItem -->
+   
+  <h1>Relocating a File Data Structure</h1>
+
+      <p>Since file data structures can be cached in memory by the H5AC
+	package it becomes problematic to move such a data structure in
+	the file. One cannot just copy a portion of the file from one
+	location to another because:
+
+      <ol>
+	<li>the file might not contain the latest information, and</li>
+	<li>the H5AC package might not realize that the object's
+	  address has changed and attempt to write the object to disk
+	  at the old address.</li>
+      </ol>
+      
+      <p>Here's a correct method to move data from one location to
+	another.  The example code assumes that one is moving a B-link
+	tree node from <code>old_addr</code> to <code>new_addr</code>.
+	
+      <ol>
+	<li>Make sure the disk is up-to-date with respect to the
+	  cache.  There is no need to remove the item from the cache,
+	  hence the final argument to <code>H5AC_flush</code> is
+	  <code>FALSE</code>.
+	  <br><br>
+	  <code>
+	    H5AC_flush (f, H5AC_BT, old_addr, FALSE);<br>
+	  </code>
+	  <br>
+	</li>
+	
+	<li>Read the data from the old address and write it to the new
+	  address.
+	  <br><br>
+	  <code>
+	    H5F_block_read (f, old_addr, size, buf);<br>
+	    H5F_block_write (f, new_addr, size, buf);<br>
+	  </code>
+	  <br>
+	</li>
+	  
+	<li>Notify the cache that the address of the object changed.
+	  <br><br>
+	  <code>
+	    H5AC_rename (f, H5AC_BT, old_addr, new_addr);<br>
+	  </code>
+	  <br>
+	</li>
+      </ol>
+	  
+
+
+      <hr>
+      <address><a href="mailto:robb at maya.nuance.com">Robb Matzke</a></address>
+<!-- Created: Mon Jul 14 15:09:06 EST 1997 -->
+<!-- hhmts start -->
+Last modified: Mon Jul 14 15:38:29 EST 
+<!-- hhmts end -->
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/NamingScheme.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/NamingScheme.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/NamingScheme.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,319 @@
+<HTML>
+<HEAD><TITLE>
+             HDF5 Naming Scheme
+      </TITLE> </HEAD>
+
+<BODY bgcolor="#ffffff">
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<H1>
+<FONT color="#c80028">
+ <I> <B> <CENTER>  HDF5 Naming Scheme for </CENTER> </B> </I> 
+</FONT></H1>
+<P>
+<UL>
+
+<LI>       <A HREF = "#01"><I>  FILES </I> </A>
+<LI>       <A HREF = "#02"><I>  PACKAGES </I> </A>
+<LI>       <A HREF = "#03"><I>  PUBLIC vs PRIVATE </I> </A>
+<LI>       <A HREF = "#04"><I>  INTEGRAL TYPES </I> </A>
+<LI>       <A HREF = "#05"><I>  OTHER TYPES </I> </A>
+<LI>       <A HREF = "#06"><I>  GLOBAL VARIABLES </I> </A>
+<LI>       <A HREF = "#07"><I>  MACROS, PREPROCESSOR CONSTANTS, AND ENUM MEMEBERs </I> </A>
+
+</UL>
+<P>
+<center>
+	 Authors: <A HREF = "mailto:koziol at ncsa.uiuc.edu">
+        <I>Quincey Koziol</I> </A> and 
+                  <A HREF = "mailto:matzke at llnl.gov">   
+        <I>		  Robb Matzke </I> </A>   
+
+</center>
+<UL>
+
+<FONT color="#c80028"
+<LI> <A NAME="01">  <B> <I> FILES </I> </B>  </A>
+</FONT>
+
+<UL>
+
+  <LI>  Source files are named according to the package they contain (see
+    below).  All files will begin with `H5' so we can stuff our
+    object files into someone else's library and not worry about file
+    name conflicts.
+  <P>For Example:
+<i><b>
+<dd>	H5.c		-- "Generic" library functions 
+   <br>
+<dd>	H5B.c		-- B-link tree functions
+</i></b>
+  <p>
+   <LI> If a package is in more than one file, then another name is tacked
+    on.  It's all lower case with no underscores or hyphens.
+   <P>For Example:
+<i><b>
+<dd>	H5F.c		-- the file for this package
+   <br>
+<dd>	H5Fstdio.c	-- stdio functions (just an example)
+   <br>
+<dd>	H5Ffcntl.c	-- fcntl functions (just an example)
+</i></b>
+   <p>
+  <LI> Each package file has a header file of API stuff (unless there is
+    no API component to the package)
+   <P>For Example:
+<i><b>
+<dd>	H5F.h		-- things an application would see. </i> </b>
+   <P>
+    and a header file of private stuff
+<i><b>
+   <p>
+<dd>	H5Fprivate.h	-- things an application wouldn't see. The
+                    	   private header includes the public header.
+</i></b>
+    <p>
+    and a header for private prototypes
+<i><b>
+   <p>
+<dd>	H5Fproto.h	-- prototypes for internal functions.
+</i></b>
+    <P>
+    By splitting the prototypes into separate include files we don't
+    have to recompile everything when just one function prototype
+    changes.
+
+   <LI> The main API header file is `hdf5.h' and it includes each of the
+    public header files but none of the private header files.  Or the
+    application can include just the public header files it needs.
+
+   <LI> There is no main private or prototype header file because it
+    prevents make from being efficient.  Instead, each source file
+    includes only the private header and prototype files it needs
+    (first all the private headers, then all the private prototypes).
+
+   <LI> Header files should include everything they need and nothing more.
+
+</UL>
+<P>
+
+<FONT color="#c80028"
+<LI> <A NAME="02">  <B> <I> PACKAGES </I> </B>  </A>
+</FONT>
+
+<P>
+Names exported beyond function scope begin with `H5' followed by zero,
+one, or two upper-case letters that describe the class of object.
+This prefix is the package name.  The implementation of packages
+doesn't necessarily have to map 1:1 to the source files.
+<P>
+<i><b>
+<dd>	H5	-- library functions
+<br>
+<dd>	H5A	-- atoms
+<br>
+<dd>	H5AC	-- cache
+<br>
+<dd>	H5B	-- B-link trees
+<br>
+<dd>	H5D	-- datasets
+<br>
+<dd>	H5E	-- error handling
+<br>
+<dd>	H5F	-- files
+<br>
+<dd>	H5G	-- groups
+<br>
+<dd>	H5M	-- meta data
+<br>
+<dd>	H5MM	-- core memory management
+<br>
+<dd>	H5MF	-- file memory management
+<br>
+<dd>	H5O	-- object headers
+<br>
+<dd>	H5P	-- Property Lists
+<br>
+<dd>	H5S	-- dataspaces
+<br>
+<dd>	H5R	-- relationships
+<br>
+<dd>	H5T	-- datatype
+</i></b>
+<p>
+Each package implements a single main class of object (e.g., the H5B
+package implements B-link trees).  The main data type of a package is
+the package name followed by `_t'.
+<p>
+<i><b>
+<dd>	H5F_t		-- HDF5 file type
+<br>
+<dd>	H5B_t		-- B-link tree data type
+</i></b>
+<p>
+
+Not all packages implement a data type (H5, H5MF) and some
+packages provide access to a preexisting data type (H5MM, H5S).
+<p>
+
+
+<FONT color="#c80028"
+<LI> <A NAME="03">  <B> <I> PUBLIC vs PRIVATE </I> </B>  </A>
+</FONT>
+<p>
+If the symbol is for internal use only, then the package name is
+followed by an underscore and the rest of the name.  Otherwise, the
+symbol is part of the API and there is no underscore between the
+package name and the rest of the name.
+<p>
+<i><b>
+<dd>	H5Fopen		-- an API function.
+<br>
+<dd>	H5B_find	-- an internal function.
+</i></b>
+<p>
+For functions, this is important because the API functions never pass
+pointers around (they use atoms instead for hiding the implementation)
+and they perform stringent checks on their arguments.  Internal
+unctions, on the other hand, check arguments with assert().
+<p>
+Data types like H5B_t carry no information about whether the type is
+public or private since it doesn't matter.
+
+<p>
+
+
+<FONT color="#c80028"
+<LI> <A NAME="04"> <B> <I> INTEGRAL TYPES </I> </B>  </A>
+</FONT>
+<p>
+Integral fixed-point type names are an optional `u' followed by `int'
+followed by the size in bits (8, 16,
+32, or 64).  There is no trailing `_t' because these are common
+enough and follow their own naming convention.
+<p>
+<pre><H4>
+<dd>	hbool_t     -- boolean values (BTRUE, BFALSE, BFAIL)
+<br>
+<dd>	int8		-- signed 8-bit integers
+<br>
+<dd>	uint8       -- unsigned 8-bit integers
+<br>
+<dd>	int16       -- signed 16-bit integers
+<br>
+<dd>	uint16      -- unsigned 16-bit integers
+<br>
+<dd>	int32       -- signed 32-bit integers
+<br>
+<dd>	uint32      -- unsigned 32-bit integers
+<br>
+<dd>	int64       -- signed 64-bit integers
+<br>
+<dd>	uint64      -- unsigned 64-bit integers
+<br>
+<dd>	intn		-- "native" integers
+<br>
+<dd>	uintn		-- "native" unsigned integers
+
+</pre></H4>
+<p>
+
+<FONT color="#c80028"
+<LI> <A NAME="05"> <B> <I> OTHER TYPES </I> </B> </A>
+</FONT>
+
+<p>
+
+Other data types are always followed by `_t'.
+<p>
+<pre><H4>
+<dd>	H5B_key_t-- additional data type used by H5B package.
+</pre></H4>
+<p>
+
+However, if the name is so common that it's used almost everywhere,
+then we make an alias for it by removing the package name and leading
+underscore and replacing it with an `h'  (the main datatype for a
+package already has a short enough name, so we don't have aliases for
+them).
+<P>
+<pre><H4>
+<dd>	typedef H5E_err_t herr_t;
+</pre> </H4>
+<p>
+
+<FONT color="#c80028"
+<LI> <A NAME="06">  <B> <I> GLOBAL VARIABLES </I> </B>  </A>
+</FONT>
+<p>
+Global variables include the package name and end with `_g'.
+<p>
+<pre><H4>
+<dd>	H5AC_methods_g	-- global variable in the H5AC package.
+</pre> </H4>
+<p>
+
+
+<FONT color="#c80028"
+<LI> <A NAME="07">   
+<I> <B>
+MACROS, PREPROCESSOR CONSTANTS, AND ENUM MEMBERS
+  </I> </B>  </A>
+</FONT>
+<p>
+Same rules as other symbols except the name is all upper case.  There
+are a few exceptions: <br>
+<ul>
+<li>	Constants and macros defined on a system that is deficient: 
+       <p><pre><H4> 
+<dd>		MIN(x,y), MAX(x,y) and their relatives
+        </pre></H4>
+
+<li>	Platform constants :
+       <P> 
+		No naming scheme; determined by OS and compiler.<br>
+		These appear only in one header file anyway.
+        <p>
+<li>	Feature test constants (?)<br>
+		Always start with `HDF5_HAVE_' like HDF5_HAVE_STDARG_H for a
+		header file, or HDF5_HAVE_DEV_T for a data type, or
+		HDF5_HAVE_DIV for a function.
+</UL>
+<p>
+
+</UL>
+<p>
+<H6>
+<center>
+	 This file /hdf3/web/hdf/internal/HDF_standard/HDF5.coding_standard.html is
+	 maintained by Elena Pourmal <A HREF = "mailto:epourmal at ncsa.uiuc.edu">
+         <I>epourmal at ncsa.uiuc.edu</I> </A>.
+</center>
+<p>
+<center>
+          Last modified August 5, 1997
+</center>
+
+</H6>
+</BODY>
+<HTML>
+

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ObjectHeader.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/ObjectHeader.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/ObjectHeader.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,92 @@
+<html>
+<body>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<h1>Object Headers</h1>
+
+<pre>
+
+haddr_t
+H5O_new (hdf5_file_t *f, intn nrefs, size_t size_hint)
+
+	Creates a new empty object header and returns its address.
+	The SIZE_HINT is the initial size of the data portion of the
+	object header and NREFS is the number of symbol table entries
+	that reference this object header (normally one).
+
+	If SIZE_HINT is too small, then at least some default amount
+	of space is allocated for the object header.
+
+intn				        /*num remaining links		*/
+H5O_link (hdf5_file_t *f,		/*file containing header	*/
+	  haddr_t addr,			/*header file address		*/
+	  intn adjust)			/*link adjustment amount	*/
+
+
+size_t
+H5O_sizeof (hdf5_file_t *f,		/*file containing header	*/
+	    haddr_t addr,		/*header file address		*/
+            H5O_class_t *type,		/*message type or H5O_ANY	*/
+	    intn sequence)		/*sequence number, usually zero	*/
+		
+	Returns the size of a particular instance of a message in an
+	object header.  When an object header has more than one
+	instance of a particular message type, then SEQUENCE indicates
+	which instance to return.
+
+void *
+H5O_read (hdf5_file_t *f,		/*file containing header	*/
+	  haddr_t addr,			/*header file address		*/
+	  H5G_entry_t *ent,		/*optional symbol table entry	*/
+	  H5O_class_t *type,		/*message type or H5O_ANY	*/
+	  intn sequence,		/*sequence number, usually zero	*/
+	  size_t size,			/*size of output message	*/
+	  void *mesg)			/*output buffer			*/
+
+	Reads a message from the object header into memory.
+
+const void *
+H5O_peek (hdf5_file_t *f,		/*file containing header	*/
+          haddr_t addr,			/*header file address		*/
+	  H5G_entry_t *ent,		/*optional symbol table entry	*/
+	  H5O_class_t *type,		/*type of message or H5O_ANY	*/
+	  intn sequence)		/*sequence number, usually zero	*/
+
+haddr_t					/*new heap address		*/
+H5O_modify (hdf5_file_t *f,		/*file containing header	*/
+            haddr_t addr,		/*header file address		*/
+	    H5G_entry_t *ent,		/*optional symbol table entry	*/
+	    hbool_t *ent_modified,	/*entry modification flag	*/
+	    H5O_class_t *type,		/*message type			*/
+	    intn overwrite,		/*sequence number or -1		*/
+	    void *mesg)			/*the message			*/  
+	  
+
+===========================================
+Last Modified:  8 July 1998 (technical content)
+Last Modified:  28 April 2000 (included in HDF5 Technical Notes)
+HDF Help Desk:  hdfhelp at ncsa.uiuc.edu
+
+</pre>
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/RawDStorage.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/RawDStorage.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/RawDStorage.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,295 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Raw Data Storage in HDF5</title>
+  </head>
+
+  <body>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+  <!-- separator -->
+  <!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+  <!-- separator -->
+  <!-- #EndLibraryItem -->
+ 
+  <h1>Raw Data Storage in HDF5</h1>
+
+    <p>This document describes the various ways that raw data is
+      stored in an HDF5 file and the object header messages which
+      contain the parameters for the storage.
+
+    <p>Raw data storage has three components: the mapping from some
+      logical multi-dimensional element space to the linear address
+      space of a file, compression of the raw data on disk, and
+      striping of raw data across multiple files.  These components
+      are orthogonal.
+      
+    <p>Some goals of the storage mechanism are to be able to
+      efficently store data which is:
+
+    <dl>
+      <dt>Small
+      <dd>Small pieces of raw data can be treated as meta data and
+	stored in the object header.  This will be achieved by storing
+	the raw data in the object header with message 0x0006.
+	Compression and striping are not supported in this case.
+
+      <dt>Complete Large
+      <dd>The library should be able to store large arrays
+	contiguously in the file provided the user knows the final
+	array size a priori.  The array can then be read/written in a
+	single I/O request.  This is accomplished by describing the
+	storage with object header message 0x0005. Compression and
+	striping are not supported in this case.
+
+      <dt>Sparse Large
+      <dd>A large sparse raw data array should be stored in a manner
+	that is space-efficient but one in which any element can still
+	be accessed in a reasonable amount of time. Implementation
+	details are below.
+	
+      <dt>Dynamic Size
+      <dd>One often doesn't have prior knowledge of the size of an
+	array. It would be nice to allow arrays to grow dynamically in
+	any dimension. It might also be nice to allow the array to
+	grow in the negative dimension directions if convenient to
+	implement. Implementation details are below.
+
+      <dt>Subslab Access
+      <dd>Some multi-dimensional arrays are almost always accessed by
+	subslabs. For instance, a 2-d array of pixels might always be
+	accessed as smaller 1k-by-1k 2-d arrays always aligned on 1k
+	index values.  We should be able to store the array in such a
+	way that striding though the entire array is not necessary.
+	Subslab access might also be useful with compression
+	algorithms where each storage slab can be compressed
+	independently of the others. Implementation details are below.
+
+      <dt>Compressed
+      <dd>Various compression algorithms can be applied to the entire
+	array. We're not planning to support separate algorithms (or a
+	single algorithm with separate parameters) for each chunk
+	although it would be possible to implement that in a manner
+	similar to the way striping across files is
+	implemented.
+
+      <dt>Striped Across Files
+      <dd>The array access functions should support arrays stored
+	discontiguously across a set of files.
+    </dl>
+
+    <h1>Implementation of Indexed Storage</h1>
+
+    <p>The Sparse Large, Dynamic Size, and Subslab Access methods
+      share so much code that they can be described with a single
+      message.  The new Indexed Storage Message (<code>0x0008</code>)
+      will replace the old Chunked Object (<code>0x0009</code>) and
+      Sparse Object (<code>0x000A</code>) Messages.
+
+    <p>
+  <center>
+	<table border cellpadding=4 width="60%">
+	  <caption align=bottom>
+	    <b>The Format of the Indexed Storage Message</b>
+	  </caption>
+	  <tr align=center>
+	    <th width="25%">byte</th>
+	    <th width="25%">byte</th>
+	    <th width="25%">byte</th>
+	    <th width="25%">byte</th>
+	  </tr>
+
+	  <tr align=center>
+	    <td colspan=4><br>Address of B-tree<br><br></td>
+	  </tr>
+	  <tr align=center>
+	    <td>Number of Dimensions</td>
+	    <td>Reserved</td>
+	    <td>Reserved</td>
+	    <td>Reserved</td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4>Reserved (4 bytes)</td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4>Alignment for Dimension 0 (4 bytes)</td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4>Alignment for Dimension 1 (4 bytes)</td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4>...</td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4>Alignment for Dimension N (4 bytes)</td>
+	  </tr>
+	</table>
+  </center>
+
+    <p>The alignment fields indicate the alignment in logical space to
+      use when allocating new storage areas on disk.  For instance,
+      writing every other element of a 100-element one-dimensional
+      array (using one HDF5 I/O partial write operation per element)
+      that has unit storage alignment would result in 50
+      single-element, discontiguous storage segments.  However, using
+      an alignment of 25 would result in only four discontiguous
+      segments.  The size of the message varies with the number of
+      dimensions.
+
+    <p>A B-tree is used to point to the discontiguous portions of
+      storage which has been allocated for the object.  All keys of a
+      particular B-tree are the same size and are a function of the
+      number of dimensions. It is therefore not possible to change the
+      dimensionality of an indexed storage array after its B-tree is
+      created.
+
+    <p>
+  <center>
+	<table border cellpadding=4 width="60%">
+	  <caption align=bottom>
+	    <b>The Format of a B-Tree Key</b>
+	  </caption>
+	  <tr align=center>
+	    <th width="25%">byte</th>
+	    <th width="25%">byte</th>
+	    <th width="25%">byte</th>
+	    <th width="25%">byte</th>
+	  </tr>
+
+	  <tr align=center>
+	    <td colspan=4>External File Number or Zero (4 bytes)</td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4>Chunk Offset in Dimension 0 (4 bytes)</td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4>Chunk Offset in Dimension 1 (4 bytes)</td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4>...</td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4>Chunk Offset in Dimension N (4 bytes)</td>
+	  </tr>
+	</table>
+  </center>
+
+    <p>The keys within a B-tree obey an ordering based on the chunk
+      offsets.  If the offsets in dimension-0 are equal, then
+      dimension-1 is used, etc. The External File Number field
+      contains a 1-origin offset into the External File List message
+      which contains the name of the external file in which that chunk
+      is stored.
+
+    <h1>Implementation of Striping</h1>
+
+    <p>The indexed storage will support arbitrary striping at the
+      chunk level; each chunk can be stored in any file.  This is
+      accomplished by using the External File Number field of an
+      indexed storage B-tree key as a 1-origin offset into an External
+      File List Message (0x0009) which takes the form:
+
+    <p>
+  <center>
+	<table border cellpadding=4 width="60%">
+	  <caption align=bottom>
+	    <b>The Format of the External File List Message</b>
+	  </caption>
+	  <tr align=center>
+	    <th width="25%">byte</th>
+	    <th width="25%">byte</th>
+	    <th width="25%">byte</th>
+	    <th width="25%">byte</th>
+	  </tr>
+
+	  <tr align=center>
+	    <td colspan=4><br>Name Heap Address<br><br></td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4>Number of Slots Allocated (4 bytes)</td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4>Number of File Names (4 bytes)</td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4>Byte Offset of Name 1 in Heap (4 bytes)</td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4>Byte Offset of Name 2 in Heap (4 bytes)</td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4>...</td>
+	  </tr>
+	  <tr align=center>
+	    <td colspan=4><br>Unused Slot(s)<br><br></td>
+	  </tr>
+	</table>
+  </center>
+
+    <p>Each indexed storage array that has all or part of its data
+      stored in external files will contain a single external file
+      list message.  The size of the messages is determined when the
+      message is created, but it may be possible to enlarge the
+      message on demand by moving it.  At this time, it's not possible
+      for multiple arrays to share a single external file list
+      message.
+
+    <dl>
+      <dt><code>
+	  H5O_efl_t *H5O_efl_new (H5G_entry_t *object, intn
+	  nslots_hint, intn heap_size_hint)
+	</code>
+      <dd>Adds a new, empty external file list message to an object
+	header and returns a pointer to that message.  The message
+	acts as a cache for file descriptors of external files that
+	are open.
+
+      <p><dt><code>
+	  intn H5O_efl_index (H5O_efl_t *efl, const char *filename)
+	</code>
+      <dd>Gets the external file index number for a particular file name.
+	If the name isn't in the external file list then it's added to
+	the H5O_efl_t struct and immediately written to the object
+	header to which the external file list message belongs. Name
+	comparison is textual.  Each name should be relative to the
+	directory which contains the HDF5 file.
+
+      <p><dt><code>
+	  H5F_low_t *H5O_efl_open (H5O_efl_t *efl, intn index, uintn mode)
+	</code>
+      <dd>Gets a low-level file descriptor for an external file.  The
+	external file list caches file descriptors because we might
+	have many more external files than there are file descriptors
+	available to this process.  The caller should not close this file.
+
+      <p><dt><code>
+	  herr_t H5O_efl_release (H5O_efl_t *efl)
+	</code>
+      <dd>Releases an external file list, closes all files
+	associated with that list, and if the list has been modified
+	since the call to <code>H5O_efl_new</code> flushes the message
+	to disk.
+    </dl>
+
+    <hr>
+    <address><a href="mailto:robb at arborea.spizella.com">Robb Matzke</a></address>
+<!-- Created: Fri Oct  3 09:52:32 EST 1997 -->
+<!-- hhmts start -->
+Last modified: Tue Nov 25 12:36:50 EST 1997
+<!-- hhmts end -->
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ReservedFileSpace.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/ReservedFileSpace.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/ReservedFileSpace.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,50 @@
+<html>
+   <head>
+      <title>Reserved File Address Space</title>
+   </head>
+
+   <body>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->   
+
+<hl>Reserved File Address Space</hl>
+
+      <p>HDF5 files use 8-byte addresses by default, but users can change this to 2, 4, or even 16 bytes.  This means that it is possible to have files that only address 64 KB of space, and thus that HDF must handle the case of files that have enough space on disk but not enough internal address space to be written.</p>
+
+      <p>Thus, every time space is allocated in a file, HDF needs to check that this allocation is within the file’s address space.  If not, HDF should output an error and ensure that all the data currently in the file (everything that is still addressable) is successfully written to disk.</p>
+
+      <p>Unfortunately, some structures are stored in memory and do not allocate space for themselves until the file is actually flushed to disk (object headers and the local heap).  This is good for efficiency, since these structures can grow without creating the fragmentation that would result from frequent allocation and deallocation, but means that if the library runs out of addressable space while allocating memory, these structures will not be present in the file.  Without them, HDF5 does not know how to parse the data in the file, rendering it unreadable.</p>
+
+      <p>Thus, HDF keeps track of the space “reserved for allocation” in the file (H5FD_t struct).  When a function tries to allocate space in the file, it first checks that the allocation would not overflow the address space, taking the reserved space into account.  When object headers or the heap finally allocate the space they have reserved, they free the reserved space before allocating file space.</p>
+
+      <p>A given object header is only flushed to disk once, but the heap can be flushed to disk multiple times over the life of the file and will require contiguous space every time.  To handle this, the heap keeps track of how much space it has reserved.  This allows it to reserve space only when it grows (when it is dirty and needs to be re-written to disk).</p>
+
+      <p>For instance, if the heap is flushed to disk, it frees its reserved space.  If new data is inserted into the heap in memory, the heap may need to flush to disk again in a new, larger section of memory.  Thus, not only does it reserve space in the file for this new data, but also for all of the previously-existing data in the heap to be re-written.  The next insert, however, will only need to reserve space for its new data, since the rest of the heap already has space reserved for it.</p>
+
+      <p>Potential issues:
+      <ol>
+         <li>This system does not take into accout deleted space.  Deleted space can still be allocated as usual, but "reserved" space is always taken off the end of a file.  This means that a file that was filled to capacity but then had a significant number of objects deleted will still throw errors if more data is written.  This occurs because the file's free space is in the middle of the file, not at the end.  A more complete space-reservation system would test if the reserved data can fit into the file's free list, but this would be significantly more complicated to implement.</li>
+
+         <li>HDF5 currently claims to support 16-byte addresses, but since the size of a long long is only 8 bytes, addresses of this size cannot be represented in memory.  This solution does not attempt to address this issue.</li>
+      </ol>
+      </p>
+   </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/SWControls.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/SWControls.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/SWControls.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
+<META NAME="Generator" CONTENT="Microsoft Word 97">
+<TITLE>HDF5 Software Controls</TITLE>
+<META NAME="Template" CONTENT="E:\Program Files\Microsoft Office\Office\html.dot">
+</HEAD>
+
+<BODY LINK="#0000ff" VLINK="#800080">
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<H1>HDF5 Software Controls</H1>
+
+<P>
+<I>(Work in progress draft)</i>
+</P>
+
+<P>
+A descriptions knobs and turns such as environment variables and settings
+that controls the functionality of HDF5 libraries and tools.  This is
+intended for HDF5 libraries and tools developers. HDF5 application users
+may consult the document <A HREF="../Debugging.html"><I>A guide to
+debugging HDF5 API calls</I></A>.
+</P>
+
+<P>
+<H2><FONT FACE="Arial">Library Building Controls</FONT></H2>
+</P>
+
+<P>
+<H3><FONT FACE="Arial">Environment variables</FONT></H3>
+</P>
+
+<DL>
+    <DT><B>CC</B></DT>
+        <DD><I>Used by configure.</I> Override the default C compiler.</DD>
+    <DT><B>LIBS</B></DT>
+        <DD><I>Used by configure.</I> Add more libraries to be used.</DD>
+    <DT><B>NP</B></DT>
+        <DD>Number of MPI-processes to invoke for testing. Default to 2.</DD>
+    <DT><B>HDF5_NOCLEANUP</B></DT>
+        <DD><I>Used by most test programs.</I> When set, temporary files
+                created during tests are NOT removed. Default is to remove them
+                by the end of each test. Note that the variable value does not
+                matter. E.g., the values of "yes", "no" and "" all have the 
+                same effect, that is, NO cleanup.</DD>
+    <DT><B>H5FD_mpio_Debug</B></DT>
+        <DD><I>Used by the MPIO file driver for debugging.</I> Need to have
+                H5FDmpio_DEBUG macro defined during compiling. Should be set to a
+                string to turn on various tracing. Valid values (cases matter)
+                are:
+                <DL>
+                    <DT>t</DT>
+                        <DD>Trace all routine</DD>
+                    <DT>r</DT>
+                        <DD>Trace read routines</DD>
+                    <DT>w</DT>
+                        <DD>Trace write routines</DD>
+                    <DT>c</DT>
+                        <DD>Show result of MPI_Get_count</DD>
+                </DL>
+        </DD>
+    <DT><B>HDF5_MPI_OPT_TYPES</B></DT>
+        <DD><I>Used by the MPIO file driver to control the use of the optimized
+                mpi input/output routine.</I> 0 turns it off, 1 turns it on 
+                (uses optimized code if it can).</DD>
+</DL>
+
+<P>
+<H3><FONT FACE="Arial">Compile Macros</FONT></H3>
+</P>
+
+<DL>
+    <DT><B>H5FDmpio_DEBUG</B></DT>
+        <DD><I>Compile macro.</I> Compile in the MPIO file driver related 
+                debugging statements. Defined if macro H5F_DEBUG is 
+                defined.</DD>
+    <DT><B>H5FD_mpio_Debug</B></DT>
+        <DD>Compile in debugging used by the MPIO file driver. Need to have
+            FDmpio_DEBUG macro defined during compiling. Should be set to a
+            string to turn on the tracing. See environment variable
+            H5FD_mpio_Debug for valid values.</DD>
+</DL>
+
+<P>
+<HR>
+</P>
+
+<ADDRESS>
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</A>
+</ADDRESS>
+
+<P><!-- Created: Fri Oct  3 11:52:31 EST 1997 --><!-- hhmts start -->Last
+modified: December 11, 2000 <!-- hhmts end --></P>
+
+</BODY>
+</HTML>


Property changes on: packages/hdf5/branches/upstream/current/doc/html/TechNotes/SWControls.html
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/SymbolTables.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/SymbolTables.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/SymbolTables.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,349 @@
+<html>
+<body>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<h1>Symbol Table Caching Issues</h1>
+
+<pre>
+
+A number of issues involving caching of object header messages in
+symbol table entries must be resolved.
+
+What is the motivation for these changes?
+
+   If we make objects completely independent of object name it allows
+   us to refer to one object by multiple names (a concept called hard
+   links in Unix file systems), which in turn provides an easy way to
+   share data between datasets.
+
+   Every object in an HDF5 file has a unique, constant object header
+   address which serves as a handle (or OID) for the object.  The
+   object header contains messages which describe the object.
+
+   HDF5 allows some of the object header messages to be cached in
+   symbol table entries so that the object header doesn't have to be
+   read from disk.  For instance, an entry for a directory caches the
+   directory disk addresses required to access that directory, so the
+   object header for that directory is seldom read.
+
+   If an object has multiple names (that is, a link count greater than
+   one), then it has multiple symbol table entries which point to it.
+   All symbol table entries must agree on header messages.  The
+   current mechanism is to turn off the caching of header messages in
+   symbol table entries when the header link count is more than one,
+   and to allow caching once the link count returns to one.
+
+   However, in the current implementation, a package is allowed to
+   copy a symbol table entry and use it as a private cache for the
+   object header.  This doesn't work for a number of reasons (all but
+   one require a `delete symbol entry' operation).
+
+      1. If two packages hold copies of the same symbol table entry,
+         they don't notify each other of changes to the symbol table
+         entry. Eventually, one package reads a cached message and
+         gets the wrong value because the other package changed the
+         message in the object header.
+
+      2. If one package holds a copy of the symbol table entry and
+         some other part of HDF5 removes the object and replaces it
+         with some other object, then the original package will
+         continue to access the non-existent object using the new
+         object header.
+
+      3. If one package holds a copy of the symbol table entry and
+         some other part of HDF5 (re)moves the directory which
+         contains the object, then the package will be unable to
+         update the symbol table entry with the new cached
+         data. Packages that refer to the object by the new name will
+         use old cached data.
+
+
+The basic problem is that there may be multiple copies of the object
+symbol table entry floating around in the code when there should
+really be at most one per hard link.
+
+   Level 0: A copy may exist on disk as part of a symbol table node, which
+            is a small 1d array of symbol table entries.
+
+   Level 1: A copy may be cached in memory as part of a symbol table node
+	    in the H5Gnode.c file by the H5AC layer.
+
+   Level 2a: Another package may be holding a copy so it can perform
+   	     fast lookup of any header messages that might be cached in
+   	     the symbol table entry.  It can't point directly to the
+   	     cached symbol table node because that node can dissappear
+   	     at any time.
+
+   Level 2b: Packages may hold more than one copy of a symbol table
+             entry.  For instance, if H5D_open() is called twice for
+             the same name, then two copies of the symbol table entry
+             for the dataset exist in the H5D package.
+
+How can level 2a and 2b be combined?
+
+   If package data structures contained pointers to symbol table
+   entries instead of copies of symbol table entries and if H5G
+   allocated one symbol table entry per hard link, then it's trivial
+   for Level 2a and 2b to benefit from one another's actions since
+   they share the same cache.
+
+How does this work conceptually?
+
+   Level 2a and 2b must notify Level 1 of their intent to use (or stop
+   using) a symbol table entry to access an object header.  The
+   notification of the intent to access an object header is called
+   `opening' the object and releasing the access is `closing' the
+   object.
+
+   Opening an object requires an object name which is used to locate
+   the symbol table entry to use for caching of object header
+   messages.  The return value is a handle for the object.  Figure 1
+   shows the state after Dataset1 opens Object with a name that maps
+   through Entry1.  The open request created a copy of Entry1 called
+   Shadow1 which exists even if SymNode1 is preempted from the H5AC
+   layer.
+
+                                                     ______
+                                            Object  /      \
+	     SymNode1                     +--------+        |
+	    +--------+            _____\  | Header |        |
+	    |        |           /     /  +--------+        |
+	    +--------+ +---------+                  \______/
+	    | Entry1 | | Shadow1 | /____
+	    +--------+ +---------+ \    \
+	    :        :                   \
+	    +--------+                    +----------+
+					  | Dataset1 |
+					  +----------+
+			     FIGURE 1
+
+
+
+  The SymNode1 can appear and disappear from the H5AC layer at any
+  time without affecting the Object Header data cached in the Shadow.
+  The rules are:
+
+  * If the SymNode1 is present and is about to disappear and the
+    Shadow1 dirty bit is set, then Shadow1 is copied over Entry1, the
+    Entry1 dirty bit is set, and the Shadow1 dirty bit is cleared.
+
+  * If something requests a copy of Entry1 (for a read-only peek
+    request), and Shadow1 exists, then a copy (not pointer) of Shadow1
+    is returned instead.
+
+  * Entry1 cannot be deleted while Shadow1 exists.
+
+  * Entry1 cannot change directly if Shadow1 exists since this means
+    that some other package has opened the object and may be modifying
+    it.  I haven't decided if it's useful to ever change Entry1
+    directly (except of course within the H5G layer itself).
+
+  * Shadow1 is created when Dataset1 `opens' the object through
+    Entry1. Dataset1 is given a pointer to Shadow1 and Shadow1's
+    reference count is incremented.
+
+  * When Dataset1 `closes' the Object the Shadow1 reference count is
+    decremented.  When the reference count reaches zero, if the
+    Shadow1 dirty bit is set, then Shadow1's contents are copied to
+    Entry1, and the Entry1 dirty bit is set. Shadow1 is then deleted
+    if its reference count is zero.  This may require reading SymNode1
+    back into the H5AC layer.
+
+What happens when another Dataset opens the Object through Entry1?
+
+  If the current state is represented by the top part of Figure 2,
+  then Dataset2 will be given a pointer to Shadow1 and the Shadow1
+  reference count will be incremented to two.  The Object header link
+  count remains at one so Object Header messages continue to be cached
+  by Shadow1. Dataset1 and Dataset2 benefit from one another
+  actions. The resulting state is represented by Figure 2.
+
+                                                     _____
+             SymNode1                       Object  /     \
+            +--------+            _____\  +--------+       |
+            |        |           /     /  | Header |       |
+            +--------+ +---------+        +--------+       |
+            | Entry1 | | Shadow1 | /____            \_____/
+            +--------+ +---------+ \    \
+            :        :        _          \
+            +--------+       |\           +----------+
+                               \          | Dataset1 |
+                                \________ +----------+
+                                         \              \
+                                          +----------+   |
+                                          | Dataset2 |   |- New Dataset
+                                          +----------+   |
+                                                        /
+			     FIGURE 2
+
+
+What happens when the link count for Object increases while Dataset
+has the Object open?
+
+                                                     SymNode2
+                                                    +--------+
+    SymNode1                       Object           |        |
+   +--------+             ____\  +--------+ /______ +--------+
+   |        |            /    /  | header | \      `| Entry2 |
+   +--------+ +---------+        +--------+         +--------+
+   | Entry1 | | Shadow1 | /____                     :        :
+   +--------+ +---------+ \    \                    +--------+
+   :        :                   \
+   +--------+                    +----------+   \________________/
+                                 | Dataset1 |            |
+                                 +----------+         New Link
+
+			     FIGURE 3
+
+  The current state is represented by the left part of Figure 3.  To
+  create a new link the Object Header had to be located by traversing
+  through Entry1/Shadow1.  On the way through, the Entry1/Shadow1 
+  cache is invalidated and the Object Header link count is
+  incremented. Entry2 is then added to SymNode2.
+
+  Since the Object Header link count is greater than one, Object
+  header data will not be cached in Entry1/Shadow1.
+
+  If the initial state had been all of Figure 3 and a third link is
+  being added and Object is open by Entry1 and Entry2, then creation
+  of the third link will invalidate the cache in Entry1 or Entry2.  It
+  doesn't matter which since both caches are already invalidated
+  anyway.
+
+What happens if another Dataset opens the same object by another name?
+
+  If the current state is represented by Figure 3, then a Shadow2 is
+  created and associated with Entry2.  However, since the Object
+  Header link count is more than one, nothing gets cached in Shadow2
+  (or Shadow1).
+
+What happens if the link count decreases?
+
+  If the current state is represented by all of Figure 3 then it isn't
+  possible to delete Entry1 because the object is currently open
+  through that entry.  Therefore, the link count must have
+  decreased because Entry2 was removed.
+
+  As Dataset1 reads/writes messages in the Object header they will
+  begin to be cached in Shadow1 again because the Object header link
+  count is one.
+
+What happens if the object is removed while it's open?
+
+  That operation is not allowed.
+
+What happens if the directory containing the object is deleted?
+
+  That operation is not allowed since deleting the directory requires
+  that the directory be empty.  The directory cannot be emptied
+  because the open object cannot be removed from the directory.
+
+What happens if the object is moved?
+
+  Moving an object is a process consisting of creating a new
+  hard-link with the new name and then deleting the old name.
+  This will fail if the object is open.
+
+What happens if the directory containing the entry is moved?
+
+  The entry and the shadow still exist and are associated with one
+  another.
+
+What if a file is flushed or closed when objects are open?
+
+  Flushing a symbol table with open objects writes correct information
+  to the file since Shadow is copied to Entry before the table is
+  flushed.
+
+  Closing a file with open objects will create a valid file but will
+  return failure.
+
+How is the Shadow associated with the Entry?
+
+  A symbol table is composed of one or more symbol nodes.  A node is a
+  small 1-d array of symbol table entries.  The entries can move
+  around within a node and from node-to-node as entries are added or
+  removed from the symbol table and nodes can move around within a
+  symbol table, being created and destroyed as necessary.
+
+  Since a symbol table has an object header with a unique and constant
+  file offset, and since H5G contains code to efficiently locate a
+  symbol table entry given it's name, we use these two values as a key
+  within a shadow to associate the shadow with the symbol table
+  entry.
+
+	struct H5G_shadow_t {
+	   haddr_t	stab_addr;    /*symbol table header address*/   
+	   char         *name;	      /*entry name wrt symbol table*/
+           hbool_t      dirty;	      /*out-of-date wrt stab entry?*/
+	   H5G_entry_t  ent;	      /*my copy of stab entry      */
+	   H5G_entry_t  *main;	      /*the level 1 entry or null  */
+           H5G_shadow_t *next, *prev; /*other shadows for this stab*/
+      	};
+
+  The set of shadows will be organized in a hash table of linked
+  lists.  Each linked list will contain the shadows associated with a
+  particular symbol table header address and the list will be sorted
+  lexicographically.
+
+  Also, each Entry will have a pointer to the corresponding Shadow or
+  null if there is no shadow.
+
+  When a symbol table node is loaded into the main cache, we look up
+  the linked list of shadows in the shadow hash table based on the
+  address of the symbol table object header.  We then traverse that
+  list matching shadows with symbol table entries.
+
+  We assume that opening/closing objects will be a relatively
+  infrequent event compared with loading/flushing symbol table
+  nodes. Therefore, if we keep the linked list of shadows sorted it
+  costs O(N) to open and close objects where N is the number of open
+  objects in that symbol table (instead of O(1)) but it costs only
+  O(N) to load a symbol table node (instead of O(N^2)).
+
+What about the root symbol entry?
+
+  Level 1 storage for the root symbol entry is always available since
+  it's stored in the hdf5_file_t struct instead of a symbol table
+  node.  However, the contents of that entry can move from the file
+  handle to a symbol table node by H5G_mkroot().  Therefore, if the
+  root object is opened, we keep a shadow entry for it whose
+  `stab_addr' field is zero and whose `name' is null.
+
+  For this reason, the root object should always be read through the
+  H5G interface.
+
+One more key invariant:  The H5O_STAB message in a symbol table header
+never changes.  This allows symbol table entries to cache the H5O_STAB
+message for the symbol table to which it points without worrying about
+whether the cache will ever be invalidated.
+
+
+===========================================
+Last Modified:  8 July 1998 (technical content)
+Last Modified:  28 April 2000 (included in HDF5 Technical Notes)
+HDF Help Desk:  hdfhelp at ncsa.uiuc.edu
+
+</pre>
+  
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/TestReview/H5Dget_offset.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/TestReview/H5Dget_offset.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/TestReview/H5Dget_offset.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,220 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+  <TITLE>H5Dget_offset Test Review</TITLE>
+  <META http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+  <META name="author" content="Quincey Koziol">
+</HEAD>
+<body text="#000000" bgcolor="#FFFFFF">
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<STYLE type="text/css">
+OL.loweralpha { list-style-type: lower-alpha }
+OL.upperroman { list-style-type: upper-roman }
+</STYLE>
+       
+<CENTER><H1>H5Dget_offset Test Review</H1></CENTER>
+
+<OL class="upperroman">
+
+<LI><H3><U>Purpose:</U></H3>
+<P>This document describes the API test review results for <a href="../../RM_H5D.html#Dataset-GetOffset">H5Dget_offset</a>().
+</P>
+
+<LI><H3><U>Serial Review:</U></H3>
+<TABLE border="1">
+<TR>
+<TH>Test case
+</TH>
+
+<TH>Test source file
+</TH>
+
+<TH>Test method
+</TH>
+
+<TH>Expected test results
+</TH>
+
+<TH>Notes
+</TH>
+
+<TR>
+<TD>Chunked dataset
+</TD>
+
+<TD>dsets.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create chunked dataset
+<LI>Query dataset offset
+</OL>
+</TD>
+
+<TD>FAIL
+</TD>
+
+<TD>
+<P>Because dataset is stored in chunks that are indexed by a B-tree, there is
+no single piece of data to query the offset of.
+</P>
+<P>It may be possible in the future to
+enhance this function by querying the offset of a particular chunk (or chunks),
+but that has limited use because chunks could be compressed, etc. with an I/O
+filter.
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Compact dataset
+</TD>
+
+<TD>dsets.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create chunked dataset
+<LI>Query dataset offset
+</OL>
+</TD>
+
+<TD>FAIL
+</TD>
+
+<TD>
+<P>Because dataset is stored in the object header of the dataset, there is
+no separate piece of data to query the offset of.
+</P>
+<P>It may be possible in the future to get the offset of the data in the object
+header, but this is problematic due to the fact that the messages in the object
+header can get relocated in the file when changes (like adding attributes, etc.)
+are made to the dataset, invalidating the address given to the user.
+filter.
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Contiguous dataset, [user block size] == 0, not external
+</TD>
+
+<TD>dsets.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create file with 0 sized user-block (the default)
+<LI>Create contigous dataset
+<LI>Query dataset offset
+</OL>
+</TD>
+
+<TD>
+<P>Succeed in getting the proper address and be able to verify
+that the data at that address in the file is what was written out.
+</P>
+<P>When data storage allocation is "late" (the default), querying the offset
+should fail if performed before data is written to the dataset.
+</P>
+</TD>
+
+<TD>Needs additional test to verify that the data written out is located at the
+correct offset in the file.
+</TD>
+
+</TR>
+
+<TR>
+<TD>Contiguous dataset, [user block size] != 0, not external
+</TD>
+
+<TD>dsets.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create file with non-0 sized user-block
+<LI>Create contigous dataset
+<LI>Query dataset offset
+</OL>
+</TD>
+
+<TD>
+<P>Succeed in getting the proper address and be able to verify
+that the data at that address in the file is what was written out.
+</P>
+<P>When data storage allocation is "late" (the default), querying the offset
+should fail if performed before data is written to the dataset.
+</P>
+</TD>
+
+<TD>Needs test for this case.
+</TD>
+
+</TR>
+
+<TR>
+<TD>Contiguous dataset, [user block size] == 0, external data storage
+</TD>
+
+<TD>external.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create contigous dataset with external storage
+<LI>Query dataset offset
+</OL>
+</TD>
+
+<TD>FAIL
+</TD>
+
+<TD>
+<P>In theory, it's easy to return the offset of the data in the external file,
+but this wasn't done because it would be too easy for users to assume that the
+offset returned was in the HDF5 file instead of the external file.
+</P>
+</TD>
+
+</TR>
+
+</TABLE>
+<BR>
+
+<LI><H3><U>Parallel Review:</U></H3>
+<P>The H5Dget_offset() function is not tested in parallel.  Currently, there
+does not appear to be a need for this.
+</P>
+
+         
+</OL>
+
+</BODY>
+</HTML>
+

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/TestReview/H5Tget_native_type.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/TestReview/H5Tget_native_type.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/TestReview/H5Tget_native_type.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,543 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+  <TITLE>H5Dget_native_type Test Review</TITLE>
+  <META http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+  <META name="author" content="Quincey Koziol">
+</HEAD>
+<body text="#000000" bgcolor="#FFFFFF">
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<STYLE type="text/css">
+OL.loweralpha { list-style-type: lower-alpha }
+OL.upperroman { list-style-type: upper-roman }
+</STYLE>
+       
+<CENTER><H1>H5Dget_native_type Test Review</H1></CENTER>
+
+<OL class="upperroman">
+
+<LI><H3><U>Purpose:</U></H3>
+<P>This document describes the API test review results for <a href="../../RM_H5T.html#Datatype-GetNativeType">H5Dget_native_type</a>().
+</P>
+
+<LI><H3><U>Serial Review:</U></H3>
+<TABLE border="1">
+<TR>
+<TH>Test case
+</TH>
+
+<TH>Test source file
+</TH>
+
+<TH>Test method
+</TH>
+
+<TH>Expected test results
+</TH>
+
+<TH>Notes
+</TH>
+
+<TR>
+<TD>Native int datatype
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create dataset with I32BE datatype
+<LI>Query dataset's datatype
+<LI>Create native datatype from dataset datatype
+<LI>Compare order, class & size of native datatype to known results
+</OL>
+</TD>
+
+<TD>Check that type's size, order and class are correct.
+</TD>
+
+<TD>
+<P>Data is written & read back in for this test.
+</P>
+<P>It would be convenient to have a function in the test module for choosing
+the correct atomic datatype based on the particular platform settings.  This
+should use the H5_SIZEOF_<foo> macros.
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Native long long datatype
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create dataset with I64LE datatype
+<LI>Query dataset's datatype
+<LI>Create native datatype from dataset datatype
+<LI>Compare order, class & size of native datatype to known results
+</OL>
+</TD>
+
+<TD>Check that type's size, order and class are correct.
+</TD>
+
+<TD>
+<P>Data is NOT written & read back in for this test.
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Native char datatype
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create dataset with I8LE datatype
+<LI>Query dataset's datatype
+<LI>Create native datatype from dataset datatype
+<LI>Compare order, class & size of native datatype to known results
+</OL>
+</TD>
+
+<TD>Check that type's size, order and class are correct.
+</TD>
+
+<TD>
+<P>Data is NOT written & read back in for this test.
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Native float datatype
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create dataset with F32BE datatype
+<LI>Query dataset's datatype
+<LI>Create native datatype from dataset datatype
+<LI>Compare order, class & size of native datatype to known results
+</OL>
+</TD>
+
+<TD>Check that type's size, order and class are correct.
+</TD>
+
+<TD>
+<P>Data is NOT written & read back in for this test.
+</P>
+<P>Need test for native double datatype (stored as 32-bit floating-point
+datatype in file).  This will probably require using an "epsilon" if the data
+is compared for this test.
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Compound datatype with atomic fields
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create datatype describing native (unpacked) struct in memory
+<LI>Create datatype describing packed struct for disk
+<LI>Create dataset with "packed" compound datatype
+<LI>Query dataset's datatype
+<LI>Get native datatype from dataset's datatype
+<LI>Use H5Tequal to verify that the native datatype is the same as the native,
+unpacked datatype.
+</OL>
+</TD>
+
+<TD>Check that native and unpacked datatypes are equal.
+</TD>
+
+<TD>
+<P>Data is written & read back in for this test.
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Compound datatype with one compound field
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create datatype describing nested native (unpacked) structs in memory
+<LI>Create datatype describing nested packed structs for disk
+<LI>Create dataset with "packed" compound datatype
+<LI>Query dataset's datatype
+<LI>Get native datatype from dataset's datatype
+<LI>Use H5Tequal to verify that the native datatype is the same as the native,
+unpacked datatype.
+</OL>
+</TD>
+
+<TD>Check that native and unpacked datatypes are equal.
+</TD>
+
+<TD>
+<P>Data is written & read back in for this test.
+</P>
+<P>Could use test for compound datatype with multiple compound fields.
+</P>
+<P>Could use test for 3 or more nested deep compound datatype.
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Enum datatype
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create enum datatype
+<LI>Create dataset with enum datatype
+<LI>Query dataset's datatype
+<LI>Get native datatype from dataset's datatype
+<LI>Use H5Tequal to verify that the native datatype is the same as the original
+enum datatype.
+</OL>
+</TD>
+
+<TD>Check that native and original datatypes are equal.
+</TD>
+
+<TD>
+<P>Data is written & read back in for this test.
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Array datatype
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create array datatype
+<LI>Create dataset with array datatype
+<LI>Query dataset's datatype
+<LI>Get native datatype from dataset's datatype
+<LI>Use H5Tequal to verify that the native datatype is the same as the original
+array datatype.
+</OL>
+</TD>
+
+<TD>Check that native and original datatypes are equal.
+</TD>
+
+<TD>
+<P><EM>This is not tested currently.</EM>
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Array of compound datatype
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create array of compound datatype
+<LI>Create dataset with array of compound datatype
+<LI>Query dataset's datatype
+<LI>Get native datatype from dataset's datatype
+<LI>Use H5Tequal to verify that the native datatype is the same as the original
+array of compound datatype.
+</OL>
+</TD>
+
+<TD>Check that native and original datatypes are equal.
+</TD>
+
+<TD>
+<P>Data is written & read back in for this test.
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Compound datatype with array field
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create compound datatype with array field
+<LI>Create dataset with compound datatype
+<LI>Query dataset's datatype
+<LI>Get native datatype from dataset's datatype
+<LI>Use H5Tequal to verify that the native datatype is the same as the original
+compound datatype.
+</OL>
+</TD>
+
+<TD>Check that native and original datatypes are equal.
+</TD>
+
+<TD>
+<P><EM>This is not tested currently.</EM>
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>VL datatype with atomic base type
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create VL datatype
+<LI>Create dataset with VL datatype
+<LI>Query dataset's datatype
+<LI>Get native datatype from dataset's datatype
+<LI>Use H5Tequal to verify that the native datatype is the same as the original
+VL datatype.
+</OL>
+</TD>
+
+<TD>Check that native and original datatypes are equal.
+</TD>
+
+<TD>
+<P>Data is written & read back in for this test.
+</P>
+<P><EM>Combinations with VL datatypes in other composite types and with other
+datatypes for the base type of the VL datatype are not tested.</EM>
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>VL string datatype
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create VL string datatype
+<LI>Create dataset with VL string datatype
+<LI>Query dataset's datatype
+<LI>Get native datatype from dataset's datatype
+<LI>Use H5Tequal to verify that the native datatype is the same as the original
+VL string datatype.
+</OL>
+</TD>
+
+<TD>Check that native and original datatypes are equal.
+</TD>
+
+<TD>
+<P>Data is written & read back in for this test.
+</P>
+<P><EM>Combinations with VL string datatypes in composite types 
+are not tested.</EM>
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Reference datatype
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create reference datatype
+<LI>Create dataset with reference datatype
+<LI>Query dataset's datatype
+<LI>Get native datatype from dataset's datatype
+<LI>Use H5Tequal to verify that the native datatype is the same as the original
+reference datatype.
+</OL>
+</TD>
+
+<TD>Check that native and original datatypes are equal.
+</TD>
+
+<TD>
+<P>Data is written & read back in for this test.
+</P>
+<P><EM>Combinations with reference datatypes in composite types 
+are not tested.</EM>
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Opaque datatype
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create opaque datatype
+<LI>Create dataset with opaque datatype
+<LI>Query dataset's datatype
+<LI>Get native datatype from dataset's datatype
+<LI>Use H5Tequal to verify that the native datatype is the same as the original
+opaque datatype.
+</OL>
+</TD>
+
+<TD>Check that native and original datatypes are equal.
+</TD>
+
+<TD>
+<P>Data is written & read back in for this test.
+</P>
+<P><EM>Combinations with opaque datatypes in composite types 
+are not tested.</EM>
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Bitfield datatype
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create bitfield datatype
+<LI>Create dataset with bitfield datatype
+<LI>Query dataset's datatype
+<LI>Get native datatype from dataset's datatype
+<LI>Use H5Tequal to verify that the native datatype is the same as the original
+bitfield datatype.
+</OL>
+</TD>
+
+<TD>Check that native and original datatypes are equal.
+</TD>
+
+<TD>
+<P>Data is written & read back in for this test.
+</P>
+<P><EM>Combinations with bitfield datatypes in composite types 
+are not tested.</EM>
+</P>
+</TD>
+
+</TR>
+
+<TR>
+<TD>Time datatype
+</TD>
+
+<TD>native.c
+</TD>
+
+<TD>
+<OL>
+<LI>Create time datatype
+<LI>Create dataset with time datatype
+<LI>Query dataset's datatype
+<LI>Get native datatype from dataset's datatype
+<LI>Use H5Tequal to verify that the native datatype is the same as the original
+time datatype.
+</OL>
+</TD>
+
+<TD>Check that native and original datatypes are equal.
+</TD>
+
+<TD>
+<P><EM>This is not tested currently.</EM>
+</P>
+</TD>
+
+</TR>
+
+</TABLE>
+<BR>
+
+<LI><H3><U>Parallel Review:</U></H3>
+<P>The H5Dget_native_type() function is not tested in parallel.  Currently,
+there does not appear to be a need for this.
+</P>
+
+         
+</OL>
+
+</BODY>
+</HTML>
+

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/TestReview.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/TestReview.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/TestReview.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,78 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<HTML>
+<HEAD>
+  <TITLE>State of API Test Review for HDF5</TITLE>
+  <META http-equiv="content-type" content="text/html; charset=ISO-8859-1">
+  <META name="author" content="Quincey Koziol">
+</HEAD>
+<body text="#000000" bgcolor="#FFFFFF">
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<STYLE type="text/css">
+OL.loweralpha { list-style-type: lower-alpha }
+OL.upperroman { list-style-type: upper-roman }
+</STYLE>
+       
+<CENTER><H1>State of API Testing Review for HDF5</H1></CENTER>
+
+<OL class="upperroman">
+
+<LI><H3><U>Purpose:</U></H3>
+<P>This document describes the current state of the API test review.  Currently,
+the tests for each API function are being reviewed on an individual basis and
+each API's tests are being described and improvements made.
+</P>
+
+<LI><H3><U>APIs Reviewed:</U></H3>
+
+<TABLE border=1 cellpadding=5>
+<TR>
+<TH>API Function</TH>
+<TH>Date Last Reviewed</TH>
+<TH>Status</TH>
+</TR>
+
+<TR>
+<TD><A href="TestReview/H5Dget_offset.html">H5Dget_offset</A>
+</TD>
+<TD>Tuesday, November 11th, 2002
+</TD>
+<TD><FONT color="orange">Tests need to be updated</FONT>
+</TD>
+</TR>
+
+<TR>
+<TD><A href="TestReview/H5Tget_native_type.html">H5Tget_native_type</A>
+</TD>
+<TD>Tuesday, November 11th, 2002
+</TD>
+<TD><FONT color="orange">Tests need to be updated</FONT>
+</TD>
+</TR>
+
+</TABLE>
+         
+         
+</OL>
+
+</BODY>
+</HTML>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/ThreadSafeLibrary.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/ThreadSafeLibrary.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/ThreadSafeLibrary.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,814 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+		"http://www.w3.org/TR/REC-html40/loose.dtd">
+<html lang="en-US">
+<head>
+  <title>Thread Safe Library</title>
+</head>
+
+<body bgcolor=#ffffff>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<center><h1>HDF5 Thread Safe library</h1></center>
+
+<p>
+
+<h1>1. Library header files and conditional compilation</h1>
+
+<p>
+The following code is placed at the beginning of H5private.h:
+</p>
+
+<blockquote>
+  <pre>
+  #ifdef H5_HAVE_THREADSAFE
+  #include &lt;pthread.h&gt;
+  #endif
+  </pre>
+</blockquote>
+
+<p>
+<code>H5_HAVE_THREADSAFE</code> is defined when the HDF-5 library is
+compiled with the --enable-threadsafe configuration option. In general,
+code for the non-threadsafe version of HDF-5 library are placed within
+the <code>#else</code> part of the conditional compilation. The exception
+to this rule are the changes to the <code>FUNC_ENTER</code> (in
+H5private.h), <code>HRETURN</code> and <code>HRETURN_ERROR</code> (in
+H5Eprivate.h) macros (see section 3.2).
+</p>
+
+
+<h1>2. Global variables/structures</h1>
+
+<h2>2.1 Global library initialization variable</h2>
+
+<p>
+In the threadsafe implementation, the global library initialization
+variable <code>H5_libinit_g</code> is changed to a global structure
+consisting of the variable with its associated lock (locks are explained
+in section 4.1):
+</p>
+
+<blockquote>
+  <pre>
+    hbool_t  H5_libinit_g = FALSE;
+  </pre>
+</blockquote>
+
+<p>
+becomes
+</p>
+
+<blockquote>
+  <pre>
+    H5_api_t H5_g;
+  </pre>
+</blockquote>
+
+<p>
+where <code>H5_api_t</code> is
+</p>
+
+<blockquote>
+  <pre>
+    typedef struct H5_api_struct {
+      H5_mutex_t init_lock;           /* API entrance mutex */
+      hbool_t H5_libinit_g;
+    } H5_api_t;
+  </pre>
+</blockquote>
+
+<p>
+All former references to <code>H5_libinit_g</code> in the library are now
+made using the macro <code>H5_INIT_GLOBAL</code>. If the threadsafe
+library is to be used, the macro is set to <code>H5_g.H5_libinit_g</code>
+instead.
+</p>
+
+<h2>2.2 Global serialization variable</h2>
+
+<p>
+A new global boolean variable <code>H5_allow_concurrent_g</code> is used
+to determine if multiple threads are allowed to an API call
+simultaneously. This is set to <code>FALSE</code>.
+</p>
+
+<p>
+All APIs that are allowed to do so have their own local variable that
+shadows the global variable and is set to <code>TRUE</code>. In phase 1,
+no such APIs exist.
+</p>
+
+<p>
+It is defined in <code>H5.c</code> as follows:
+</p>
+
+<blockquote>
+  <pre>
+    hbool_t H5_allow_concurrent_g = FALSE;
+  </pre>
+</blockquote>
+
+<h2>2.3 Global thread initialization variable</h2>
+
+<p>
+The global variable <code>H5_first_init_g</code> of type
+<code>pthread_once_t</code> is used to allow only the first thread in the
+application process to call an initialization function using
+<code>pthread_once</code>. All subsequent calls to
+<code>pthread_once</code> by any thread are disregarded.
+</p>
+
+<p>
+The call sets up the mutex in the global structure <code>H5_g</code> (see
+section 3.1) via an initialization function
+<code>H5_first_thread_init</code>. The first thread initialization
+function is described in section 4.2.
+</p>
+
+<p>
+<code>H5_first_init_g</code> is defined in <code>H5.c</code> as follows:
+</p>
+
+<blockquote>
+  <pre>
+    pthread_once_t H5_first_init_g = PTHREAD_ONCE_INIT;
+  </pre>
+</blockquote>
+
+<h2>2.4 Global key for per-thread error stacks</h2>
+
+<p>
+A global pthread-managed key <code>H5_errstk_key_g</code> is used to
+allow pthreads to maintain a separate error stack (of type
+<code>H5E_t</code>) for each thread. This is defined in <code>H5.c</code>
+as:
+</p>
+
+<blockquote>
+  <pre>
+    pthread_key_t H5_errstk_key_g;
+  </pre>
+</blockquote>
+
+<p>
+Error stack management is described in section 4.3.
+</p>
+
+<h2>2.5 Global structure and key for thread cancellation prevention</h2>
+
+<p>
+We need to preserve the thread cancellation status of each thread
+individually by using a key <code>H5_cancel_key_g</code>. The status is
+preserved using a structure (of type <code>H5_cancel_t</code>) which
+maintains the cancellability state of the thread before it entered the
+library and a count (which works very much like the recursive lock
+counter) which keeps track of the number of API calls the thread makes
+within the library.
+</p>
+
+<p>
+The structure is defined in <code>H5private.h</code> as:
+</p>
+
+<blockquote>
+  <pre>
+    /* cancelability structure */
+    typedef struct H5_cancel_struct {
+      int previous_state;
+      unsigned int cancel_count;
+    } H5_cancel_t;
+  </pre>
+</blockquote>
+
+<p>
+Thread cancellation is described in section 4.4.
+</p>
+
+
+<h1>3. Changes to Macro expansions</h1>
+
+<h2>3.1 Changes to FUNC_ENTER</h2>
+
+<p>
+The <code>FUNC_ENTER</code> macro is now extended to include macro calls
+to initialize first threads, disable cancellability and wraps a lock
+operation around the checking of the global initialization flag. It
+should be noted that the cancellability should be disabled before
+acquiring the lock on the library. Doing so otherwise would allow the
+possibility that the thread be cancelled just after it has acquired the
+lock on the library and in that scenario, if the cleanup routines are not
+properly set, the library would be permanently locked out.
+</p>
+
+<p>
+The additional macro code and new macro definitions can be found in
+Appendix E.1 to E.5. The changes are made in <code>H5private.h</code>.
+</p>
+
+<h2>3.2 Changes to HRETURN and HRETURN_ERROR</h2>
+
+<p>
+The <code>HRETURN</code> and <code>HRETURN_ERROR</code> macros are the
+counterparts to the <code>FUNC_ENTER</code> macro described in section
+3.1. <code>FUNC_LEAVE</code> makes a macro call to <code>HRETURN</code>,
+so it is also covered here.
+</p>
+
+<p>
+The basic changes to these two macros involve adding macro calls to call
+an unlock operation and re-enable cancellability if necessary.  It should
+be noted that the cancellability should be re-enabled only after the
+thread has released the lock to the library. The consequence of doing
+otherwise would be similar to that described in section 3.1.
+</p>
+
+<p>
+The additional macro code and new macro definitions can be found in
+Appendix E.9 to E.9. The changes are made in <code>H5Eprivate.h</code>.
+</p>
+
+<h1>4. Implementation of threadsafe functionality</h1>
+
+<h2>4.1 Recursive Locks</h2>
+
+<p>
+A recursive mutex lock m allows a thread t1 to successfully lock m more
+than once without blocking t1. Another thread t2 will block if t2 tries
+to lock m while t1 holds the lock to m. If t1 makes k lock calls on m,
+then it also needs to make k unlock calls on m before it releases the
+lock.
+</p>
+
+<p>
+Our implementation of recursive locks is built on top of a pthread mutex
+lock (which is not recursive). It makes use of a pthread condition
+variable to have unsuccessful threads wait on the mutex.  Waiting threads
+are awaken by a signal from the final unlock call made by the thread
+holding the lock.
+</p>
+
+<p>
+Recursive locks are defined to be the following type
+(<code>H5private.h</code>):
+</p>
+
+<blockquote>
+  <pre>
+    typedef struct H5_mutex_struct {
+      pthread_t owner_thread;         /* current lock owner */
+      pthread_mutex_t atomic_lock;    /* lock for atomicity of new mechanism */
+      pthread_cond_t cond_var;        /* condition variable */
+      unsigned int lock_count;
+    } H5_mutex_t;
+  </pre>
+</blockquote>
+
+<p>
+Detailed implementation code can be found in Appendix A. The
+implementation changes are made in <code>H5TS.c</code>.
+</p>
+
+<h2>4.2 First thread initialization</h2>
+
+<p>
+Because the mutex lock associated with a recursive lock cannot be
+statically initialized, a mechanism is required to initialize the
+recursive lock associated with <code>H5_g</code> so that it can be used
+for the first time.
+</p>
+
+<p>
+The pthreads library allows this through the pthread_once call which as
+described in section 3.3 allows only the first thread accessing the
+library in an application to initialize <code>H5_g</code>.
+</p>
+
+<p>
+In addition to initializing <code>H5_g</code>, it also initializes the
+key (see section 3.4) for use with per-thread error stacks (see section
+4.3).
+</p>
+
+<p>
+The first thread initialization mechanism is implemented as the function
+call <code>H5_first_thread_init()</code> in <code>H5TS.c</code>. This is
+described in appendix B.
+</p>
+
+<h2>4.3 Per-thread error stack management</h2>
+
+<p>
+Pthreads allows individual threads to access dynamic and persistent
+per-thread data through the use of keys. Each key is associated with
+a table that maps threads to data items. Keys can be initialized by
+<code>pthread_key_create()</code> in pthreads (see sections 3.4 and 4.2).
+Per-thread data items are accessed using a key through the
+<code>pthread_getspecific()</code> and <code>pthread_setspecific()</code>
+calls to read and write to the association table respectively.
+</p>
+
+<p>
+Per-thread error stacks are accessed through the key
+<code>H5_errstk_key_g</code> which is initialized by the first thread
+initialization call (see section 4.2).
+</p>
+
+<p>
+In the non-threadsafe version of the library, there is a global stack
+variable <code>H5E_stack_g[1]</code> which is no longer defined in the
+threadsafe version. At the same time, the macro call to gain access to
+the error stack <code>H5E_get_my_stack</code> is changed from:
+</p>
+
+<blockquote>
+  <pre>
+    #define H5E_get_my_stack() (H5E_stack_g+0)
+  </pre>
+</blockquote>
+
+<p>
+to:
+</p>
+
+<blockquote>
+  <pre>
+    #define H5E_get_my_stack() H5E_get_stack()
+  </pre>
+</blockquote>
+
+<p>
+where <code>H5E_get_stack()</code> is a surrogate function that does the
+following operations:
+</p>
+
+<ol>
+  <li>if a thread is attempting to get an error stack for the first
+			time, the error stack is dynamically allocated for the thread and
+			associated with <code>H5_errstk_key_g</code> using
+			<code>pthread_setspecific()</code>. The way we detect if it is the
+			first time is through <code>pthread_getspecific()</code> which
+			returns <code>NULL</code> if no previous value is associated with
+			the thread using the key.</li>
+
+  <li>if <code>pthread_getspecific()</code> returns a non-null value,
+			then that is the pointer to the error stack associated with the
+			thread and the stack can be used as usual.</li>
+</ol>
+
+<p>
+A final change to the error reporting routines is as follows; the current
+implementation reports errors to always be detected at thread 0. In the
+threadsafe implementation, this is changed to report the number returned
+by a call to <code>pthread_self()</code>.
+</p>
+
+<p>
+The change in code (reflected in <code>H5Eprint</code> of file
+<code>H5E.c</code>) is as follows:
+</p>
+
+<blockquote>
+	<pre>
+    #ifdef H5_HAVE_THREADSAFE
+      fprintf (stream, "HDF5-DIAG: Error detected in thread %d."
+               ,pthread_self());
+    #else
+      fprintf (stream, "HDF5-DIAG: Error detected in thread 0.");
+    #endif
+  </pre>
+</blockquote>
+
+<p>
+Code for <code>H5E_get_stack()</code> can be found in Appendix C. All the
+above changes were made in <code>H5E.c</code>.
+</p>
+
+<h2>4.4 Thread Cancellation safety</h2>
+
+<p>
+To prevent thread cancellations from killing a thread while it is in the
+library, we maintain per-thread information about the cancellability
+status of the thread before it entered the library so that we can restore
+that same status when the thread leaves the library.
+</p>
+
+<p>
+By <i>enter</i> and <i>leave</i> the library, we mean the points when a
+thread makes an API call from a user application and the time that API
+call returns. Other API or callback function calls made from within that
+API call are considered <i>within</i> the library.
+</p>
+
+<p>
+Because other API calls may be made from within the first API call, we
+need to maintain a counter to determine which was the first and
+correspondingly the last return.
+</p>
+
+<p>
+When a thread makes an API call, the macro <code>H5_API_SET_CANCEL</code>
+calls the worker function <code>H5_cancel_count_inc()</code> which does
+the following:
+</p>
+
+<ol>
+  <li>if this is the first time the thread has entered the library,
+      a new cancellability structure needs to be assigned to it.</li>
+  <li>if the thread is already within the library when the API call is
+			made, then cancel_count is simply incremented. Otherwise, we set
+			the cancellability state to <code>PTHREAD_CANCEL_DISABLE</code>
+			while storing the previous state into the cancellability structure.
+			<code>cancel_count</code> is also incremented in this case.</li>
+</ol>
+
+<p>
+When a thread leaves an API call, the macro
+<code>H5_API_UNSET_CANCEL</code> calls the worker function
+<code>H5_cancel_count_dec()</code> which does the following:
+</p>
+
+<ol>
+  <li>if <code>cancel_count</code> is greater than 1, indicating that the
+			thread is not yet about to leave the library, then
+			<code>cancel_count</code> is simply decremented.</li>
+  <li>otherwise, we reset the cancellability state back to its original
+			state before it entered the library and decrement the count (back
+			to zero).</li>
+</ol>
+
+<p>
+<code>H5_cancel_count_inc</code> and <code>H5_cancel_count_dec</code> are
+described in Appendix D and may be found in <code>H5TS.c</code>.
+</p>
+
+<h1>5. Test programs</h1>
+
+<p>
+Except where stated, all tests involve 16 simultaneous threads that make
+use of HDF-5 API calls without any explicit synchronization typically
+required in a non-threadsafe environment.
+</p>
+
+<h2>5.1 Data set create and write</h2>
+
+<p>
+The test program sets up 16 threads to simultaneously create 16
+different datasets named from <i>zero</i> to <i>fifteen</i> for a single
+file and then writing an integer value into that dataset equal to the
+dataset's named value.
+</p>
+
+<p>
+The main thread would join with all 16 threads and attempt to match the
+resulting HDF-5 file with expected results - that each dataset contains
+the correct value (0 for <i>zero</i>, 1 for <i>one</i> etc ...) and all
+datasets were correctly created.
+</p>
+
+<p>
+The test is implemented in the file <code>ttsafe_dcreate.c</code>.
+</p>
+
+<h2>5.2 Test on error stack</h2>
+
+<p>
+The error stack test is one in which 16 threads simultaneously try to
+create datasets with the same name. The result, when properly serialized,
+should be equivalent to 16 attempts to create the dataset with the same
+name.
+</p>
+  
+<p>
+The error stack implementation runs correctly if it reports 15 instances
+of the dataset name conflict error and finally generates a correct HDF-5
+containing that single dataset. Each thread should report its own stack
+of errors with a thread number associated with it.
+</p>
+
+<p>
+The test is implemented in the file <code>ttsafe_error.c</code>.
+</p>
+
+<h2>5.3 Test on cancellation safety</h2>
+
+<p>
+The main idea in thread cancellation safety is as follows; a child thread
+is spawned to create and write to a dataset. Following that, it makes a
+<code>H5Diterate</code> call on that dataset which activates a callback
+function.
+</p>
+
+<p>
+A deliberate barrier is invoked at the callback function which waits for
+both the main and child thread to arrive at that point. After that
+happens, the main thread proceeds to make a thread cancel call on the
+child thread while the latter sleeps for 3 seconds before proceeding to
+write a new value to the dataset.
+</p>
+
+<p>
+After the iterate call, the child thread logically proceeds to wait
+another 3 seconds before writing another newer value to the dataset.
+</p>
+
+<p>
+The test is correct if the main thread manages to read the second value
+at the end of the test. This means that cancellation did not take place
+until the end of the iteration call despite of the 3 second wait within
+the iteration callback and the extra dataset write operation.
+Furthermore, the cancellation should occur before the child can proceed
+to write the last value into the dataset.
+</p>
+
+<h2>5.4 Test on attribute creation</h2>
+
+<p>
+A main thread makes 16 threaded calls to <code>H5Acreate</code> with a
+generated name for each attribute. Sixteen attributes should be created
+for the single dataset in random (chronological) order and receive values
+depending on its generated attribute name (e.g. <i>attrib010</i> would
+receive the value 10).
+</p>
+
+<p>
+After joining with all child threads, the main thread proceeds to read
+each attribute by generated name to see if the value tallies. Failure is
+detected if the attribute name does not exist (meaning they were never
+created) or if the wrong values were read back.
+</p>
+
+<h1>A. Recursive Lock implementation code</h1>
+
+<blockquote>
+  <pre>
+  void H5_mutex_init(H5_mutex_t *H5_mutex)
+  {
+    H5_mutex-&gt;owner_thread = NULL;
+    pthread_mutex_init(&amp;H5_mutex-&gt;atomic_lock, NULL);
+    pthread_cond_init(&amp;H5_mutex-&gt;cond_var, NULL);
+    H5_mutex-&gt;lock_count = 0;
+  }
+
+  void H5_mutex_lock(H5_mutex_t *H5_mutex)
+  {
+    pthread_mutex_lock(&amp;H5_mutex-&gt;atomic_lock);
+
+    if (pthread_equal(pthread_self(), H5_mutex-&gt;owner_thread)) {
+    	/* already owned by self - increment count */
+    	H5_mutex-&gt;lock_count++;
+    } else {
+    	if (H5_mutex-&gt;owner_thread == NULL) {
+    		/* no one else has locked it - set owner and grab lock */
+    		H5_mutex-&gt;owner_thread = pthread_self();
+    		H5_mutex-&gt;lock_count = 1;
+    	} else {
+    		/* if already locked by someone else */
+    		while (1) {
+    			pthread_cond_wait(&amp;H5_mutex-&gt;cond_var, &amp;H5_mutex-&gt;atomic_lock);
+
+    			if (H5_mutex-&gt;owner_thread == NULL) {
+    				H5_mutex-&gt;owner_thread = pthread_self();
+    				H5_mutex-&gt;lock_count = 1;
+    				break;
+    			} /* else do nothing and loop back to wait on condition*/
+    		}
+    	}
+    }
+
+    pthread_mutex_unlock(&amp;H5_mutex-&gt;atomic_lock);
+  }
+
+  void H5_mutex_unlock(H5_mutex_t *H5_mutex)
+  {
+    pthread_mutex_lock(&amp;H5_mutex-&gt;atomic_lock);
+    H5_mutex-&gt;lock_count--;
+
+    if (H5_mutex-&gt;lock_count == 0) {
+    	H5_mutex-&gt;owner_thread = NULL;
+    	pthread_cond_signal(&amp;H5_mutex-&gt;cond_var);
+    }
+    pthread_mutex_unlock(&amp;H5_mutex-&gt;atomic_lock);
+  }
+  </pre>
+</blockquote>
+
+<h1>B. First thread initialization</h1>
+
+<blockquote>
+  <pre>
+  void H5_first_thread_init(void)
+  {
+    /* initialize global API mutex lock                      */
+    H5_g.H5_libinit_g = FALSE;
+    H5_g.init_lock.owner_thread = NULL;
+    pthread_mutex_init(&amp;H5_g.init_lock.atomic_lock, NULL);
+    pthread_cond_init(&amp;H5_g.init_lock.cond_var, NULL);
+    H5_g.init_lock.lock_count = 0;
+
+    /* initialize key for thread-specific error stacks       */
+    pthread_key_create(&amp;H5_errstk_key_g, NULL);
+
+    /* initialize key for thread cancellability mechanism    */
+    pthread_key_create(&amp;H5_cancel_key_g, NULL);
+  }
+  </pre>
+</blockquote>
+
+
+<h1>C. Per-thread error stack acquisition</h1>
+
+<blockquote>
+  <pre>
+  H5E_t *H5E_get_stack(void)
+  {
+    H5E_t *estack;
+
+    if (estack = pthread_getspecific(H5_errstk_key_g)) {
+    	return estack;
+    } else {
+    	/* no associated value with current thread - create one */
+    	estack = (H5E_t *)malloc(sizeof(H5E_t));
+    	pthread_setspecific(H5_errstk_key_g, (void *)estack);
+    	return estack;
+    }
+  }
+  </pre>
+</blockquote>
+
+<h1>D. Thread cancellation mechanisms</h1>
+
+<blockquote>
+  <pre>
+  void H5_cancel_count_inc(void)
+  {
+    H5_cancel_t *cancel_counter;
+
+    if (cancel_counter = pthread_getspecific(H5_cancel_key_g)) {
+      /* do nothing here */
+    } else {
+      /*
+       * first time thread calls library - create new counter and
+       * associate with key
+       */
+      cancel_counter = (H5_cancel_t *)malloc(sizeof(H5_cancel_t));
+      cancel_counter-&gt;cancel_count = 0;
+      pthread_setspecific(H5_cancel_key_g, (void *)cancel_counter);
+    }
+
+    if (cancel_counter-&gt;cancel_count == 0) {
+      /* thread entering library */
+      pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,
+                             &amp;(cancel_counter-&gt;previous_state));
+    }
+
+    cancel_counter-&gt;cancel_count++;
+  }
+
+  void H5_cancel_count_dec(void)
+  {
+    H5_cancel_t *cancel_counter = pthread_getspecific(H5_cancel_key_g);
+
+    if (cancel_counter-&gt;cancel_count == 1)
+      pthread_setcancelstate(cancel_counter-&gt;previous_state, NULL);
+
+    cancel_counter-&gt;cancel_count--;
+  }
+  </pre>
+</blockquote>
+
+<h1>E. Macro expansion codes</h1>
+
+<h2>E.1 <code>FUNC_ENTER</code></h2>
+
+<blockquote>
+  <pre>
+  /* Initialize the library */                                \
+  H5_FIRST_THREAD_INIT                                        \
+  H5_API_UNSET_CANCEL                                         \
+  H5_API_LOCK_BEGIN                                           \
+    if (!(H5_INIT_GLOBAL)) {                                  \
+      H5_INIT_GLOBAL = TRUE;                                  \
+        if (H5_init_library() &lt; 0) {                          \
+          HRETURN_ERROR (H5E_FUNC, H5E_CANTINIT, err,         \
+                        "library initialization failed");     \
+        }                                                     \
+    }                                                         \
+    H5_API_LOCK_END                                           \
+             :
+             :
+             :
+  </pre>
+</blockquote>
+
+<h2>E.2 <code>H5_FIRST_THREAD_INIT</code></h2>
+
+<blockquote>
+  <pre>
+  /* Macro for first thread initialization */
+  #define H5_FIRST_THREAD_INIT                                \
+    pthread_once(&amp;H5_first_init_g, H5_first_thread_init);
+  </pre>
+</blockquote>
+
+  
+<h2>E.3 <code>H5_API_UNSET_CANCEL</code></h2>
+
+<blockquote>
+  <pre>
+  #define H5_API_UNSET_CANCEL                                 \
+    if (H5_IS_API(FUNC)) {                                    \
+      H5_cancel_count_inc();                                  \
+    }
+  </pre>
+</blockquote>
+
+
+<h2>E.4 <code>H5_API_LOCK_BEGIN</code></h2>
+
+<blockquote>
+  <pre>
+  #define H5_API_LOCK_BEGIN                                   \
+     if (H5_IS_API(FUNC)) {                                   \
+       H5_mutex_lock(&amp;H5_g.init_lock);
+  </pre>
+</blockquote>
+
+
+<h2>E.5 <code>H5_API_LOCK_END</code></h2>
+
+<blockquote>
+  <pre>
+  #define H5_API_LOCK_END }
+  </pre>
+</blockquote>
+
+
+<h2>E.6 <code>HRETURN</code> and <code>HRETURN_ERROR</code></h2>
+
+<blockquote>
+  <pre>
+            :
+            :
+    H5_API_UNLOCK_BEGIN                                       \
+    H5_API_UNLOCK_END                                         \
+    H5_API_SET_CANCEL                                         \
+    return ret_val;                                           \
+  }
+  </pre>
+</blockquote>
+
+<h2>E.7 <code>H5_API_UNLOCK_BEGIN</code></h2>
+
+<blockquote>
+  <pre>
+  #define H5_API_UNLOCK_BEGIN                                 \
+    if (H5_IS_API(FUNC)) {                                    \
+      H5_mutex_unlock(&amp;H5_g.init_lock);
+  </pre>
+</blockquote>
+
+<h2>E.8 <code>H5_API_UNLOCK_END</code></h2>
+
+<blockquote>
+  <pre>
+  #define H5_API_UNLOCK_END }
+  </pre>
+</blockquote>
+
+
+<h2>E.9 <code>H5_API_SET_CANCEL</code></h2>
+
+<blockquote>
+  <pre>
+  #define H5_API_SET_CANCEL                                   \
+    if (H5_IS_API(FUNC)) {                                    \
+      H5_cancel_count_dec();                                  \
+    }
+  </pre>
+</blockquote>
+
+<h2>By Chee Wai Lee</h2>
+<h4>By Bill Wendling</h4>
+<h4>27. October 2000</h4>
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/VFL.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/VFL.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/VFL.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1564 @@
+<HTML>
+<HEAD>
+<!-- This HTML file has been created by texi2html 1.51
+     from VFL.texi on 18 November 1999 -->
+
+<TITLE>HDF5 Virtual File Layer</TITLE>
+</HEAD>
+<BODY>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<H1>HDF5</H1>
+<H2>Virtual File Layer</H2>
+<H2>Proposal 1999-08-11</H2>
+<ADDRESS>Robb Matzke</ADDRESS>
+<P>
+<P><HR><P>
+<H1>Table of Contents</H1>
+<UL>
+<LI><A NAME="TOC1" HREF="VFL.html#SEC1">Introduction</A>
+<LI><A NAME="TOC2" HREF="VFL.html#SEC2">Using a File Driver</A>
+<UL>
+<LI><A NAME="TOC3" HREF="VFL.html#SEC3">Driver Header Files</A>
+<LI><A NAME="TOC4" HREF="VFL.html#SEC4">Creating and Opening Files</A>
+<LI><A NAME="TOC5" HREF="VFL.html#SEC5">Performing I/O</A>
+<LI><A NAME="TOC6" HREF="VFL.html#SEC6">File Driver Interchangeability</A>
+</UL>
+<LI><A NAME="TOC7" HREF="VFL.html#SEC7">Implementation of a Driver</A>
+<UL>
+<LI><A NAME="TOC8" HREF="VFL.html#SEC8">Mode Functions</A>
+<LI><A NAME="TOC9" HREF="VFL.html#SEC9">File Functions</A>
+<UL>
+<LI><A NAME="TOC10" HREF="VFL.html#SEC10">Opening Files</A>
+<LI><A NAME="TOC11" HREF="VFL.html#SEC11">Closing Files</A>
+<LI><A NAME="TOC12" HREF="VFL.html#SEC12">File Keys</A>
+<LI><A NAME="TOC13" HREF="VFL.html#SEC13">Saving Modes Across Opens</A>
+</UL>
+<LI><A NAME="TOC14" HREF="VFL.html#SEC14">Address Space Functions</A>
+<UL>
+<LI><A NAME="TOC15" HREF="VFL.html#SEC15">Userblock and Superblock</A>
+<LI><A NAME="TOC16" HREF="VFL.html#SEC16">Allocation of Format Regions</A>
+<LI><A NAME="TOC17" HREF="VFL.html#SEC17">Freeing Format Regions</A>
+<LI><A NAME="TOC18" HREF="VFL.html#SEC18">Querying Address Range</A>
+</UL>
+<LI><A NAME="TOC19" HREF="VFL.html#SEC19">Data Functions</A>
+<UL>
+<LI><A NAME="TOC20" HREF="VFL.html#SEC20">Contiguous I/O Functions</A>
+<LI><A NAME="TOC21" HREF="VFL.html#SEC21">Flushing Cached Data</A>
+</UL>
+<LI><A NAME="TOC22" HREF="VFL.html#SEC22">Optimization Functions</A>
+<LI><A NAME="TOC23" HREF="VFL.html#SEC23">Registration of a Driver</A>
+<LI><A NAME="TOC24" HREF="VFL.html#SEC24">Querying Driver Information</A>
+</UL>
+<LI><A NAME="TOC25" HREF="VFL.html#SEC25">Miscellaneous</A>
+</UL>
+<P><HR><P>
+
+
+<H1><A NAME="SEC1" HREF="VFL.html#TOC1">Introduction</A></H1>
+
+<P>
+The HDF5 file format describes how HDF5 data structures and dataset raw
+data are mapped to a linear <STRONG>format address space</STRONG> and the HDF5
+library implements that bidirectional mapping in terms of an
+API. However, the HDF5 format specifications do <EM>not</EM> indicate how
+the format address space is mapped onto storage and HDF (version 5 and
+earlier) simply mapped the format address space directly onto a single
+file by convention.
+
+</P>
+<P>
+Since early versions of HDF5 it became apparent that users want the ability to
+map the format address space onto different types of storage (a single file,
+multiple files, local memory, global memory, network distributed global
+memory, a network protocol, <I>etc</I>.) with various types of maps. For
+instance, some users want to be able to handle very large format address
+spaces on operating systems that support only 2GB files by partitioning the
+format address space into equal-sized parts each served by a separate
+file. Other users want the same multi-file storage capability but want to
+partition the address space according to purpose (raw data in one file, object
+headers in another, global heap in a third, <I>etc.</I>) in order to improve I/O
+speeds.
+
+</P>
+<P>
+In fact, the number of storage variations is probably larger than the
+number of methods that the HDF5 team is capable of implementing and
+supporting. Therefore, a <STRONG>Virtual File Layer</STRONG> API is being
+implemented which will allow application teams or departments to design
+and implement their own mapping between the HDF5 format address space
+and storage, with each mapping being a separate <STRONG>file driver</STRONG>
+(possibly written in terms of other file drivers). The HDF5 team will
+provide a small set of useful file drivers which will also serve as
+examples for those who which to write their own:
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>H5FD_SEC2</CODE>
+<DD>
+This is the default driver which uses Posix file-system functions like
+<CODE>read</CODE> and <CODE>write</CODE> to perform I/O to a single file. All I/O
+requests are unbuffered although the driver does optimize file seeking
+operations to some extent.
+
+<DT><CODE>H5FD_STDIO</CODE>
+<DD>
+This driver uses functions from <TT>`stdio.h'</TT> to perform buffered I/O
+to a single file.
+
+<DT><CODE>H5FD_CORE</CODE>
+<DD>
+This driver performs I/O directly to memory and can be used to create small
+temporary files that never exist on permanent storage. This type of storage is
+generally very fast since the I/O consists only of memory-to-memory copy
+operations.
+
+<DT><CODE>H5FD_MPIIO</CODE>
+<DD>
+This is the driver of choice for accessing files in parallel using MPI and
+MPI-IO.  It is only predefined if the library is compiled with parallel I/O
+support.
+
+<DT><CODE>H5FD_FAMILY</CODE>
+<DD>
+Large format address spaces are partitioned into more manageable pieces and
+sent to separate storage locations using an underlying driver of the user's
+choice.  The <CODE>h5repart</CODE> tool can be used to change the sizes of the
+family members when stored as files or to convert a family of files to a
+single file or vice versa.
+
+<DT><CODE>H5FD_SPLIT</CODE>
+<DD>
+The format address space is split into meta data and raw data and each is
+mapped onto separate storage using underlying drivers of the user's
+choice. The meta data storage can be read by itself (for limited
+functionality) or both files can be accessed together.
+</DL>
+
+
+
+<H1><A NAME="SEC2" HREF="VFL.html#TOC2">Using a File Driver</A></H1>
+
+<P>
+Most application writers will use a driver defined by the HDF5 library or
+contributed by another programming team. This chapter describes how existing
+drivers are used.
+
+</P>
+
+
+
+<H2><A NAME="SEC3" HREF="VFL.html#TOC3">Driver Header Files</A></H2>
+
+<P>
+Each file driver is defined in its own public header file which should
+be included by any application which plans to use that driver. The
+predefined drivers are in header files whose names begin with
+<SAMP>`H5FD'</SAMP> followed by the driver name and <SAMP>`.h'</SAMP>. The <TT>`hdf5.h'</TT> 
+header file includes all the predefined driver header files.
+
+</P>
+<P>
+Once the appropriate header file is included a symbol of the form
+<SAMP>`H5FD_'</SAMP> followed by the upper-case driver name will be the driver
+identification number.<A NAME="DOCF1" HREF="VFL.html#FOOT1">(1)</A>  However, the
+value may change if the library is closed (<I>e.g.</I>, by calling
+<CODE>H5close</CODE>) and the symbol is referenced again.
+
+</P>
+
+
+<H2><A NAME="SEC4" HREF="VFL.html#TOC4">Creating and Opening Files</A></H2>
+
+<P>
+In order to create or open a file one must define the method by which the
+storage is accessed<A NAME="DOCF2" HREF="VFL.html#FOOT2">(2)</A> and does so by creating a file access property list<A NAME="DOCF3" HREF="VFL.html#FOOT3">(3)</A> which is passed to the <CODE>H5Fcreate</CODE> or
+<CODE>H5Fopen</CODE> function.  A default file access property list is created by
+calling <CODE>H5Pcreate</CODE> and then the file driver information is inserted by
+calling a driver initialization function such as <CODE>H5Pset_fapl_family</CODE>:
+
+</P>
+
+<PRE>
+hid_t fapl = H5Pcreate(H5P_FILE_ACCESS);
+size_t member_size = 100*1024*1024; /*100MB*/
+H5Pset_fapl_family(fapl, member_size, H5P_DEFAULT);
+hid_t file = H5Fcreate("foo%05d.h5", H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+H5Pclose(fapl);
+</PRE>
+
+<P>
+Each file driver will have its own initialization function
+whose name is <CODE>H5Pset_fapl_</CODE> followed by the driver name and which
+takes a file access property list as the first argument followed by
+additional driver-dependent arguments.
+
+</P>
+<P>
+An alternative to using the driver initialization function is to set the
+driver directly using the <CODE>H5Pset_driver</CODE> function.<A NAME="DOCF4" HREF="VFL.html#FOOT4">(4)</A> Its second argument is the file driver identifier, which may
+have a different numeric value from run to run depending on the order in which
+the file drivers are registered with the library. The third argument
+encapsulates the additional arguments of the driver initialization
+function. This method only works if the file driver writer has made the
+driver-specific property list structure a public datatype, which is
+often not the case.
+
+</P>
+
+<PRE>
+hid_t fapl = H5Pcreate(H5P_FILE_ACCESS);
+static H5FD_family_fapl_t fa = {100*1024*1024, H5P_DEFAULT};
+H5Pset_driver(fapl, H5FD_FAMILY, &#38;fa);
+hid_t file = H5Fcreate("foo.h5", H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+H5Pclose(fapl);
+</PRE>
+
+<P>
+It is also possible to query the file driver information from a file access
+property list by calling <CODE>H5Pget_driver</CODE> to determine the driver and then 
+calling a driver-defined query function to obtain the driver information:
+
+</P>
+
+<PRE>
+hid_t driver = H5Pget_driver(fapl);
+if (H5FD_SEC2==driver) {
+    /*nothing further to get*/
+} else if (H5FD_FAMILY==driver) {
+    hid_t member_fapl;
+    haddr_t member_size;
+    H5Pget_fapl_family(fapl, &#38;member_size, &#38;member_fapl);
+} else if (....) {
+    ....
+}
+</PRE>
+
+
+
+<H2><A NAME="SEC5" HREF="VFL.html#TOC5">Performing I/O</A></H2>
+
+<P>
+The <CODE>H5Dread</CODE> and <CODE>H5Dwrite</CODE> functions transfer data between
+application memory and the file. They both take an optional data transfer
+property list which has some general driver-independent properties and
+optional driver-defined properties. An application will typically perform I/O
+in one of three styles via the <CODE>H5Dread</CODE> or <CODE>H5Dwrite</CODE> function:
+
+</P>
+<P>
+Like file access properties in the previous section, data transfer properties
+can be set using a driver initialization function or a general purpose
+function. For example, to set the MPI-IO driver to use independent access for
+I/O operations one would say:
+
+</P>
+
+<PRE>
+hid_t dxpl = H5Pcreate(H5P_DATA_XFER);
+H5Pset_dxpl_mpio(dxpl, H5FD_MPIO_INDEPENDENT);
+H5Dread(dataset, type, mspace, fspace, buffer, dxpl);
+H5Pclose(dxpl);
+</PRE>
+
+<P>
+The alternative is to initialize a driver defined C <CODE>struct</CODE> and pass it
+to the <CODE>H5Pset_driver</CODE> function:
+
+</P>
+
+<PRE>
+hid_t dxpl = H5Pcreate(H5P_DATA_XFER);
+static H5FD_mpio_dxpl_t dx = {H5FD_MPIO_INDEPENDENT};
+H5Pset_driver(dxpl, H5FD_MPIO, &#38;dx);
+H5Dread(dataset, type, mspace, fspace, buffer, dxpl);
+</PRE>
+
+<P>
+The transfer propery list can be queried in a manner similar to the file
+access property list: the driver provides a function (or functions) to return
+various information about the transfer property list:
+
+</P>
+
+<PRE>
+hid_t driver = H5Pget_driver(dxpl);
+if (H5FD_MPIO==driver) {
+    H5FD_mpio_xfer_t xfer_mode;
+    H5Pget_dxpl_mpio(dxpl, &#38;xfer_mode);
+} else {
+    ....
+}
+</PRE>
+
+
+
+<H2><A NAME="SEC6" HREF="VFL.html#TOC6">File Driver Interchangeability</A></H2>
+
+<P>
+The HDF5 specifications describe two things: the mapping of data onto a linear 
+<STRONG>format address space</STRONG> and the C API which performs the mapping.
+However, the mapping of the format address space onto storage intentionally
+falls outside the scope of the HDF5 specs. This is a direct result of the fact 
+that it is not generally possible to store information about how to access
+storage inside the storage itself. For instance, given only the file name
+<TT>`/arborea/1225/work/f%03d'</TT> the HDF5 library is unable to tell whether the 
+name refers to a file on the local file system, a family of files on the local 
+file system, a file on host <SAMP>`arborea'</SAMP> port 1225, a family of files on a
+remote system, <I>etc</I>.
+
+</P>
+<P>
+Two ways which library could figure out where the storage is located are:
+storage access information can be provided by the user, or the library can try
+all known file access methods. This implementation uses the former method.
+
+</P>
+<P>
+In general, if a file was created with one driver then it isn't possible to
+open it with another driver. There are of course exceptions: a file created
+with MPIO could probably be opened with the sec2 driver, any file created
+by the sec2 driver could be opened as a family of files with one member,
+<I>etc</I>.  In fact, sometimes a file must not only be opened with the same
+driver but also with the same driver properties. The predefined drivers are
+written in such a way that specifying the correct driver is sufficient for
+opening a file.
+
+</P>
+
+
+<H1><A NAME="SEC7" HREF="VFL.html#TOC7">Implementation of a Driver</A></H1>
+
+<P>
+A driver is simply a collection of functions and data structures which are
+registered with the HDF5 library at runtime. The functions fall into these
+categories:
+
+</P>
+
+<UL>
+<LI>Functions which operate on modes
+
+<LI>Functions which operate on files
+
+<LI>Functions which operate on the address space
+
+<LI>Functions which operate on data
+
+<LI>Functions for driver initialization
+
+<LI>Optimization functions
+
+</UL>
+
+
+
+<H2><A NAME="SEC8" HREF="VFL.html#TOC8">Mode Functions</A></H2>
+
+<P>
+Some drivers need information about file access and data transfers which are
+very specific to the driver. The information is usually implemented as a pair
+of pointers to C structs which are allocated and initialized as part of an
+HDF5 property list and passed down to various driver functions. There are two
+classes of settings: file access modes that describe how to access the file
+through the driver, and data transfer modes which are settings that control
+I/O operations.  Each file opened by a particular driver may have a different
+access mode; each dataset I/O request for a particular file may have a
+different data transfer mode.
+
+</P>
+<P>
+Since each driver has its own particular requirements for various settings,
+each driver is responsible for defining the mode structures that it
+needs. Higher layers of the library treat the structures as opaque but must be
+able to copy and free them. Thus, the driver provides either the size of the
+structure or a pair of function pointers for each of the mode types.
+
+</P>
+<P>
+<STRONG>Example:</STRONG> The family driver needs to know how the format address
+space is partitioned and the file access property list to use for the
+family members. 
+
+</P>
+
+<PRE>
+/* Driver-specific file access properties */
+typedef struct H5FD_family_fapl_t {
+    hsize_t     memb_size;      /*size of each member                   */
+    hid_t       memb_fapl_id;   /*file access property list of each memb*/
+} H5FD_family_fapl_t;
+
+/* Driver specific data transfer properties */
+typedef struct H5FD_family_dxpl_t {
+    hid_t       memb_dxpl_id;   /*data xfer property list of each memb  */
+} H5FD_family_dxpl_t;
+</PRE>
+
+<P>
+In order to copy or free one of these structures the member file access
+or data transfer properties must also be copied or freed. This is done
+by providing a copy and close function for each structure:
+
+</P>
+<P>
+<STRONG>Example:</STRONG> The file access property list copy and close functions 
+for the family driver:
+
+</P>
+
+<PRE>
+static void *
+H5FD_family_fapl_copy(const void *_old_fa)
+{
+    const H5FD_family_fapl_t *old_fa = (const H5FD_family_fapl_t*)_old_fa;
+    H5FD_family_fapl_t *new_fa = malloc(sizeof(H5FD_family_fapl_t));
+    assert(new_fa);
+
+    memcpy(new_fa, old_fa, sizeof(H5FD_family_fapl_t));
+    new_fa-&#62;memb_fapl_id = H5Pcopy(old_fa-&#62;memb_fapl_id);
+    return new_fa;
+}
+
+static herr_t
+H5FD_family_fapl_free(void *_fa)
+{
+    H5FD_family_fapl_t  *fa = (H5FD_family_fapl_t*)_fa;
+    H5Pclose(fa-&#62;memb_fapl_id);
+    free(fa);
+    return 0;
+}
+</PRE>
+
+<P>
+Generally when a file is created or opened the file access properties
+for the driver are copied into the file pointer which is returned and
+they may be modified from their original value (for instance, the file
+family driver modifies the member size property when opening an existing 
+family). In order to support the <CODE>H5Fget_access_plist</CODE> function the 
+driver must provide a <CODE>fapl_get</CODE> callback which creates a copy of
+the driver-specific properties based on a particular file.
+
+</P>
+<P>
+<STRONG>Example:</STRONG> The file family driver copies the member size file
+access property list into the return value:
+
+</P>
+
+<PRE>
+static void *
+H5FD_family_fapl_get(H5FD_t *_file)
+{
+    H5FD_family_t	*file = (H5FD_family_t*)_file;
+    H5FD_family_fapl_t	*fa = calloc(1, sizeof(H5FD_family_fapl_t*));
+
+    fa-&#62;memb_size = file-&#62;memb_size;
+    fa-&#62;memb_fapl_id = H5Pcopy(file-&#62;memb_fapl_id);
+    return fa;
+}
+</PRE>
+
+
+
+<H2><A NAME="SEC9" HREF="VFL.html#TOC9">File Functions</A></H2>
+
+<P>
+The higher layers of the library expect files to have a name and allow the
+file to be accessed in various modes. The driver must be able to create a new
+file, replace an existing file, or open an existing file. Opening or creating
+a file should return a handle, a pointer to a specialization of the
+<CODE>H5FD_t</CODE> struct, which allows read-only or read-write access and which
+will be passed to the other driver functions as they are
+called.<A NAME="DOCF5" HREF="VFL.html#FOOT5">(5)</A>
+
+</P>
+
+<PRE>
+typedef struct {
+    /* Public fields */
+    H5FD_class_t *cls; /*class data defined below*/
+
+    /* Private fields -- driver-defined */
+
+} H5FD_t;
+</PRE>
+
+<P>
+<STRONG>Example:</STRONG> The family driver requires handles to the underlying
+storage, the size of the members for this particular file (which might be
+different than the member size specified in the file access property list if
+an existing file family is being opened), the name used to open the file in
+case additional members must be created, and the flags to use for creating
+those additional members. The <CODE>eoa</CODE> member caches the size of the format
+address space so the family members don't have to be queried in order to find
+it.
+
+</P>
+
+<PRE>
+/* The description of a file belonging to this driver. */
+typedef struct H5FD_family_t {
+    H5FD_t      pub;            /*public stuff, must be first           */
+    hid_t       memb_fapl_id;   /*file access property list for members */
+    hsize_t     memb_size;      /*maximum size of each member file      */
+    int         nmembs;         /*number of family members              */
+    int         amembs;         /*number of member slots allocated      */
+    H5FD_t      **memb;         /*dynamic array of member pointers      */
+    haddr_t     eoa;            /*end of allocated addresses            */
+    char        *name;          /*name generator printf format          */
+    unsigned    flags;          /*flags for opening additional members  */
+} H5FD_family_t;
+</PRE>
+
+<P>
+<STRONG>Example:</STRONG> The sec2 driver needs to keep track of the underlying Unix
+file descriptor and also the end of format address space and current Unix file
+size. It also keeps track of the current file position and last operation
+(read, write, or unknown) in order to optimize calls to <CODE>lseek</CODE>.  The
+<CODE>device</CODE> and <CODE>inode</CODE> fields are defined on Unix in order to uniquely 
+identify the file and will be discussed below.
+
+</P>
+
+<PRE>
+typedef struct H5FD_sec2_t {
+    H5FD_t      pub;                    /*public stuff, must be first   */
+    int         fd;                     /*the unix file                 */
+    haddr_t     eoa;                    /*end of allocated region       */
+    haddr_t     eof;                    /*end of file; current file size*/
+    haddr_t     pos;                    /*current file I/O position     */
+    int         op;                     /*last operation                */
+    dev_t       device;                 /*file device number            */
+    ino_t       inode;                  /*file i-node number            */
+} H5FD_sec2_t;
+</PRE>
+
+
+
+<H3><A NAME="SEC10" HREF="VFL.html#TOC10">Opening Files</A></H3>
+
+<P>
+All drivers must define a function for opening/creating a file. This
+function should have a prototype which is:
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> static H5FD_t * <B>open</B> <I>(const char *<VAR>name</VAR>, unsigned <VAR>flags</VAR>, hid_t <VAR>fapl</VAR>, haddr_t <VAR>maxaddr</VAR>)</I>
+<DD><A NAME="IDX1"></A>
+
+</P>
+<P>
+The file name <VAR>name</VAR> and file access property list <VAR>fapl</VAR> are
+the same as were specified in the <CODE>H5Fcreate</CODE> or <CODE>H5Fopen</CODE>
+call. The <VAR>flags</VAR> are the same as in those calls also except the
+flag <CODE>H5F_ACC_CREATE</CODE> is also present if the call was to
+<CODE>H5Fcreate</CODE> and they are documented in the <TT>`H5Fpublic.h'</TT>
+file. The <VAR>maxaddr</VAR> argument is the maximum format address that the
+driver should be prepared to handle (the minimum address is always
+zero).
+</DL>
+
+</P>
+<P>
+<STRONG>Example:</STRONG> The sec2 driver opens a Unix file with the requested name
+and saves information which uniquely identifies the file (the Unix device
+number and inode).
+
+</P>
+
+<PRE>
+static H5FD_t *
+H5FD_sec2_open(const char *name, unsigned flags, hid_t fapl_id/*unused*/,
+               haddr_t maxaddr)
+{
+    unsigned    o_flags;
+    int         fd;
+    struct stat sb;
+    H5FD_sec2_t *file=NULL;
+    
+    /* Check arguments */
+    if (!name || !*name) return NULL;
+    if (0==maxaddr || HADDR_UNDEF==maxaddr) return NULL;
+    if (ADDR_OVERFLOW(maxaddr)) return NULL;
+
+    /* Build the open flags */
+    o_flags = (H5F_ACC_RDWR &#38; flags) ? O_RDWR : O_RDONLY;
+    if (H5F_ACC_TRUNC &#38; flags) o_flags |= O_TRUNC;
+    if (H5F_ACC_CREAT &#38; flags) o_flags |= O_CREAT;
+    if (H5F_ACC_EXCL &#38; flags) o_flags |= O_EXCL;
+
+    /* Open the file */
+    if ((fd=open(name, o_flags, 0666))&#60;0) return NULL;
+    if (fstat(fd, &#38;sb)&#60;0) {
+        close(fd);
+        return NULL;
+    }
+
+    /* Create the new file struct */
+    file = calloc(1, sizeof(H5FD_sec2_t));
+    file-&#62;fd = fd;
+    file-&#62;eof = sb.st_size;
+    file-&#62;pos = HADDR_UNDEF;
+    file-&#62;op = OP_UNKNOWN;
+    file-&#62;device = sb.st_dev;
+    file-&#62;inode = sb.st_ino;
+
+    return (H5FD_t*)file;
+}
+</PRE>
+
+
+
+<H3><A NAME="SEC11" HREF="VFL.html#TOC11">Closing Files</A></H3>
+
+<P>
+Closing a file simply means that all cached data should be flushed to the next
+lower layer, the file should be closed at the next lower layer, and all
+file-related data structures should be freed. All information needed by the
+close function is already present in the file handle.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> static herr_t <B>close</B> <I>(H5FD_t *<VAR>file</VAR>)</I>
+<DD><A NAME="IDX2"></A>
+
+</P>
+<P>
+The <VAR>file</VAR> argument is the handle which was returned by the <CODE>open</CODE>
+function, and the <CODE>close</CODE> should free only memory associated with the
+driver-specific part of the handle (the public parts will have already been released by HDF5's virtual file layer).
+</DL>
+
+</P>
+<P>
+<STRONG>Example:</STRONG> The sec2 driver just closes the underlying Unix file,
+making sure that the actual file size is the same as that known to the
+library by writing a zero to the last file position it hasn't been
+written by some previous operation (which happens in the same code which
+flushes the file contents and is shown below).
+
+</P>
+
+<PRE>
+static herr_t
+H5FD_sec2_close(H5FD_t *_file)
+{
+    H5FD_sec2_t *file = (H5FD_sec2_t*)_file;
+
+    if (H5FD_sec2_flush(_file)&#60;0) return -1;
+    if (close(file-&#62;fd)&#60;0) return -1;
+    free(file);
+    return 0;
+}
+</PRE>
+
+
+
+<H3><A NAME="SEC12" HREF="VFL.html#TOC12">File Keys</A></H3>
+
+<P>
+Occasionally an application will attempt to open a single file more than one
+time in order to obtain multiple handles to the file. HDF5 allows the files to
+share information<A NAME="DOCF6" HREF="VFL.html#FOOT6">(6)</A> but in order to
+accomplish this HDF5 must be able to tell when two names refer to the same
+file. It does this by associating a driver-defined key with each file opened
+by a driver and comparing the key for an open request with the keys for all
+other files currently open by the same driver.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> const int <B>cmp</B> <I>(const H5FD_t *<VAR>f1</VAR>, const H5FD_t *<VAR>f2</VAR>)</I>
+<DD><A NAME="IDX3"></A>
+
+</P>
+<P>
+The driver may provide a function which compares two files <VAR>f1</VAR> and
+<VAR>f2</VAR> belonging to the same driver and returns a negative, positive, or
+zero value <I>a la</I> the <CODE>strcmp</CODE> function.<A NAME="DOCF7" HREF="VFL.html#FOOT7">(7)</A> If this 
+function is not provided then HDF5 assumes that all calls to the <CODE>open</CODE>
+callback return unique files regardless of the arguments and it is up to the
+application to avoid doing this if that assumption is incorrect.
+</DL>
+
+</P>
+<P>
+Each time a file is opened the library calls the <CODE>cmp</CODE> function to
+compare that file with all other files currently open by the same driver and
+if one of them matches (at most one can match) then the file which was just
+opened is closed and the previously opened file is used instead.
+
+</P>
+<P>
+Opening a file twice with incompatible flags will result in failure. For
+instance, opening a file with the truncate flag is a two step process which
+first opens the file without truncation so keys can be compared, and if no
+matching file is found already open then the file is closed and immediately
+reopened with the truncation flag set (if a matching file is already open then
+the truncating open will fail).
+
+</P>
+<P>
+<STRONG>Example:</STRONG> The sec2 driver uses the Unix device and i-node as the
+key. They were initialized when the file was opened.
+
+</P>
+
+<PRE>
+static int
+H5FD_sec2_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
+{
+    const H5FD_sec2_t   *f1 = (const H5FD_sec2_t*)_f1;
+    const H5FD_sec2_t   *f2 = (const H5FD_sec2_t*)_f2;
+
+    if (f1-&#62;device &#60; f2-&#62;device) return -1;
+    if (f1-&#62;device &#62; f2-&#62;device) return 1;
+
+    if (f1-&#62;inode &#60; f2-&#62;inode) return -1;
+    if (f1-&#62;inode &#62; f2-&#62;inode) return 1;
+
+    return 0;
+}
+</PRE>
+
+
+
+<H3><A NAME="SEC13" HREF="VFL.html#TOC13">Saving Modes Across Opens</A></H3>
+
+<P>
+Some drivers may also need to store certain information in the file superblock
+in order to be able to reliably open the file at a later date. This is done by
+three functions: one to determine how much space will be necessary to store
+the information in the superblock, one to encode the information, and one to
+decode the information. These functions are optional, but if any one is
+defined then the other two must also be defined.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> static hsize_t <B>sb_size</B> <I>(H5FD_t *<VAR>file</VAR>)</I>
+<DD><A NAME="IDX4"></A>
+<DT><U>Function:</U> static herr_t <B>sb_encode</B> <I>(H5FD_t *<VAR>file</VAR>, char *<VAR>name</VAR>, unsigned char *<VAR>buf</VAR>)</I>
+<DD><A NAME="IDX5"></A>
+<DT><U>Function:</U> static herr_t <B>sb_decode</B> <I>(H5FD_t *<VAR>file</VAR>, const char *<VAR>name</VAR>, const unsigned char *<VAR>buf</VAR>)</I>
+<DD><A NAME="IDX6"></A>
+
+</P>
+<P>
+The <CODE>sb_size</CODE> function returns the number of bytes necessary to encode
+information needed later if the file is reopened. The <CODE>sb_encode</CODE>
+function encodes information from  the file into buffer <VAR>buf</VAR>
+allocated by the caller. It also writes an 8-character (plus null
+termination) into the <CODE>name</CODE> argument, which should be a unique
+identification for the driver. The <CODE>sb_decode</CODE> function looks at
+the <VAR>name</VAR>
+
+</P>
+<P>
+ decodes
+data from the buffer <VAR>buf</VAR> and updates the <VAR>file</VAR> argument with the new information,
+advancing <VAR>*p</VAR> in the process.
+</DL>
+
+</P>
+<P>
+The part of this which is somewhat tricky is that the file must be readable
+before the superblock information is decoded. File access modes fall outside
+the scope of the HDF5 file format, but they are placed inside the boot block
+for convenience.<A NAME="DOCF8" HREF="VFL.html#FOOT8">(8)</A>
+
+</P>
+<P>
+<STRONG>Example:</STRONG> <EM>To be written later.</EM>
+
+</P>
+
+
+<H2><A NAME="SEC14" HREF="VFL.html#TOC14">Address Space Functions</A></H2>
+
+<P>
+HDF5 does not assume that a file is a linear address space of bytes. Instead,
+the library will call functions to allocate and free portions of the HDF5
+format address space, which in turn map onto functions in the file driver to
+allocate and free portions of file address space. The library tells the file
+driver how much format address space it wants to allocate and the driver
+decides what format address to use and how that format address is mapped onto
+the file address space.  Usually the format address is chosen so that the file
+address can be calculated in constant time for data I/O operations (which are
+always specified by format addresses).
+
+</P>
+
+
+
+<H3><A NAME="SEC15" HREF="VFL.html#TOC15">Userblock and Superblock</A></H3>
+
+<P>
+The HDF5 format allows an optional userblock to appear before the actual HDF5 
+data in such a way that if the userblock is <STRONG>sucked out</STRONG> of the file and
+everything remaining is shifted downward in the file address space, then the
+file is still a valid HDF5 file.  The userblock size can be zero or any
+multiple of two greater than or equal to 512 and the file superblock begins
+immediately after the userblock.
+
+</P>
+<P>
+HDF5 allocates space for the userblock and superblock by calling an
+allocation function defined below, which must return a chunk of memory at
+format address zero on the first call.
+
+</P>
+
+
+<H3><A NAME="SEC16" HREF="VFL.html#TOC16">Allocation of Format Regions</A></H3>
+
+<P>
+The library makes many types of allocation requests: 
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>H5FD_MEM_SUPER</CODE>
+<DD>
+An allocation request for the userblock and/or superblock.
+<DT><CODE>H5FD_MEM_BTREE</CODE>
+<DD>
+An allocation request for a node of a B-tree.
+<DT><CODE>H5FD_MEM_DRAW</CODE>
+<DD>
+An allocation request for the raw data of a dataset.
+<DT><CODE>H5FD_MEM_META</CODE>
+<DD>
+An allocation request for the raw data of a dataset which
+the user has indicated will be relatively small.
+<DT><CODE>H5FD_MEM_GROUP</CODE>
+<DD>
+An allocation request for a group leaf node (internal nodes of the group tree
+are allocated as H5MF_BTREE).
+<DT><CODE>H5FD_MEM_GHEAP</CODE>
+<DD>
+An allocation request for a global heap collection. Global heaps are used to
+store certain types of references such as dataset region references.  The set
+of all global heap collections can become quite large.
+<DT><CODE>H5FD_MEM_LHEAP</CODE>
+<DD>
+An allocation request for a local heap. Local heaps are used to store the
+names which are members of a group. The combined size of all local heaps is a
+function of the number of object names in the file.
+<DT><CODE>H5FD_MEM_OHDR</CODE>
+<DD>
+An allocation request for (part of) an object header. Object headers are
+relatively small and include meta information about objects (like the data
+space and type of a dataset) and attributes.
+</DL>
+
+<P>
+When a chunk of memory is freed the library adds it to a free list and
+allocation requests are satisfied from the free list before requesting memory
+from the file driver. Each type of allocation request enumerated above has its
+own free list, but the file driver can specify that certain object types can
+share a free list. It does so by providing an array which maps a request type
+to a free list. If any value of the map is <CODE>H5MF_DEFAULT</CODE> (zero) then the
+object's own free list is used. The special value <CODE>H5MF_NOLIST</CODE> indicates
+that the library should not attempt to maintain a free list for that
+particular object type, instead calling the file driver each time an object of
+that type is freed.
+
+</P>
+<P>
+Mappings predefined in the <TT>`H5FDpublic.h'</TT> file are:
+<DL COMPACT>
+
+<DT><CODE>H5FD_FLMAP_SINGLE</CODE>
+<DD>
+All memory usage types are mapped to a single free list.
+<DT><CODE>H5FD_FLMAP_DICHOTOMY</CODE>
+<DD>
+Memory usage is segregated into meta data and raw data for the purposes of
+memory management.
+<DT><CODE>H5FD_FLMAP_DEFAULT</CODE>
+<DD>
+Each memory usage type has its own free list.
+</DL>
+
+<P>
+<STRONG>Example:</STRONG> To make a map that manages object headers on one free list
+and everything else on another free list one might initialize the map with the 
+following code: (the use of <CODE>H5FD_MEM_SUPER</CODE> is arbitrary)
+
+</P>
+
+<PRE>
+H5FD_mem_t mt, map[H5FD_MEM_NTYPES];
+
+for (mt=0; mt&#60;H5FD_MEM_NTYPES; mt++) {
+    map[mt] = (H5FD_MEM_OHDR==mt) ? mt : H5FD_MEM_SUPER;
+}
+</PRE>
+
+<P>
+If an allocation request cannot be satisfied from the free list then one of
+two things happen. If the driver defines an allocation callback then it is
+used to allocate space; otherwise new memory is allocated from the end of the
+format address space by incrementing the end-of-address marker.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> static haddr_t <B>alloc</B> <I>(H5FD_t *<VAR>file</VAR>, H5MF_type_t <VAR>type</VAR>, hsize_t <VAR>size</VAR>)</I>
+<DD><A NAME="IDX7"></A>
+
+</P>
+<P>
+The <VAR>file</VAR> argument is the file from which space is to be allocated,
+<VAR>type</VAR> is the type of memory being requested (from the list above) without
+being mapped according to the freelist map and <VAR>size</VAR> is the number of
+bytes being requested.  The library is allowed to allocate large chunks of
+storage and manage them in a layer above the file driver (although the current
+library doesn't do that).  The allocation function should return a format
+address for the first byte allocated.  The allocated region extends from that
+address for <VAR>size</VAR> bytes.  If the request cannot be honored then the
+undefined address value is returned (<CODE>HADDR_UNDEF</CODE>). The first call to
+this function for a file which has never had memory allocated <EM>must</EM>
+return a format address of zero or <CODE>HADDR_UNDEF</CODE> since this is how the
+library allocates space for the userblock and/or superblock.
+</DL>
+
+</P>
+
+<P>
+<STRONG>Example:</STRONG> <EM>To be written later.</EM>
+
+</P>
+
+
+<H3><A NAME="SEC17" HREF="VFL.html#TOC17">Freeing Format Regions</A></H3>
+
+<P>
+When the library is finished using a certain region of the format address
+space it will return the space to the free list according to the type of
+memory being freed and the free list map described above. If the free list has
+been disabled for a particular memory usage type (according to the free list
+map) and the driver defines a <CODE>free</CODE> callback then it will be
+invoked. The <CODE>free</CODE> callback is also invoked for all entries on the free
+list when the file is closed.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> static herr_t <B>free</B> <I>(H5FD_t *<VAR>file</VAR>, H5MF_type_t <VAR>type</VAR>, haddr_t <VAR>addr</VAR>, hsize_t <VAR>size</VAR>)</I>
+<DD><A NAME="IDX8"></A>
+
+</P>
+<P>
+The <VAR>file</VAR> argument is the file for which space is being freed; <VAR>type</VAR>
+is the type of object being freed (from the list above) without being mapped
+according to the freelist map; <VAR>addr</VAR> is the first format address to free;
+and <VAR>size</VAR> is the size in bytes of the region being freed.  The region
+being freed may refer to just part of the region originally allocated and/or
+may cross allocation boundaries provided all regions being freed have the same
+usage type. However, the library will never attempt to free regions which have
+already been freed or which have never been allocated.
+</DL>
+
+</P>
+<P>
+A driver may choose to not define the <CODE>free</CODE> function, in which case
+format addresses will be leaked. This isn't normally a huge problem since the
+library contains a simple free list of its own and freeing parts of the format
+address space is not a common occurrence.
+
+</P>
+<P>
+<STRONG>Example:</STRONG> <EM>To be written later.</EM>
+
+</P>
+
+
+<H3><A NAME="SEC18" HREF="VFL.html#TOC18">Querying Address Range</A></H3>
+
+<P>
+Each file driver must have some mechanism for setting and querying the end of
+address, or <STRONG>EOA</STRONG>, marker. The EOA marker is the first format address
+after the last format address ever allocated. If the last part of the
+allocated address range is freed then the driver may optionally decrease the
+eoa marker.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> static haddr_t <B>get_eoa</B> <I>(H5FD_t *<VAR>file</VAR>)</I>
+<DD><A NAME="IDX9"></A>
+
+</P>
+<P>
+This function returns the current value of the EOA marker for the specified
+file.
+</DL>
+
+</P>
+<P>
+<STRONG>Example:</STRONG> The sec2 driver just returns the current eoa marker value
+which is cached in the file structure:
+
+</P>
+
+<PRE>
+static haddr_t
+H5FD_sec2_get_eoa(H5FD_t *_file)
+{
+    H5FD_sec2_t *file = (H5FD_sec2_t*)_file;
+    return file-&#62;eoa;
+}
+</PRE>
+
+<P>
+The eoa marker is initially zero when a file is opened and the library may set 
+it to some other value shortly after the file is opened (after the superblock
+is read and the saved eoa marker is determined) or when allocating additional
+memory in the absence of an <CODE>alloc</CODE> callback (described above).
+
+</P>
+<P>
+<STRONG>Example:</STRONG> The sec2 driver simply caches the eoa marker in the file
+structure and does not extend the underlying Unix file. When the file is
+flushed or closed then the Unix file size is extended to match the eoa marker.
+
+</P>
+
+<PRE>
+static herr_t
+H5FD_sec2_set_eoa(H5FD_t *_file, haddr_t addr)
+{
+    H5FD_sec2_t *file = (H5FD_sec2_t*)_file;
+    file-&#62;eoa = addr;
+    return 0;
+}
+</PRE>
+
+
+
+<H2><A NAME="SEC19" HREF="VFL.html#TOC19">Data Functions</A></H2>
+
+<P>
+These functions operate on data, transferring a region of the format address
+space between memory and files.
+
+</P>
+
+
+
+<H3><A NAME="SEC20" HREF="VFL.html#TOC20">Contiguous I/O Functions</A></H3>
+
+<P>
+A driver must specify two functions to transfer data from the library to the
+file and vice versa.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> static herr_t <B>read</B> <I>(H5FD_t *<VAR>file</VAR>, H5FD_mem_t <VAR>type</VAR>, hid_t <VAR>dxpl</VAR>, haddr_t <VAR>addr</VAR>, hsize_t <VAR>size</VAR>, void *<VAR>buf</VAR>)</I>
+<DD><A NAME="IDX10"></A>
+<DT><U>Function:</U> static herr_t <B>write</B> <I>(H5FD_t *<VAR>file</VAR>, H5FD_mem_t <VAR>type</VAR>, hid_t <VAR>dxpl</VAR>, haddr_t <VAR>addr</VAR>, hsize_t <VAR>size</VAR>, const void *<VAR>buf</VAR>)</I>
+<DD><A NAME="IDX11"></A>
+
+</P>
+<P>
+The <CODE>read</CODE> function reads data from file <VAR>file</VAR> beginning at address
+<VAR>addr</VAR> and continuing for <VAR>size</VAR> bytes into the buffer <VAR>buf</VAR>
+supplied by the caller. The <CODE>write</CODE> function transfers data in the
+opposite direction. Both functions take a data transfer property list
+<VAR>dxpl</VAR> which indicates the fine points of how the data is to be
+transferred and which comes directly from the <CODE>H5Dread</CODE> or
+<CODE>H5Dwrite</CODE> function.  Both functions receive <VAR>type</VAR> of
+data being written, which may allow a driver to tune it's behavior for
+different kinds of data.
+</DL>
+
+</P>
+<P>
+Both functions should return a negative value if they fail to transfer the
+requested data, or non-negative if they succeed.  The library will never
+attempt to read from unallocated regions of the format address space.
+
+</P>
+<P>
+<STRONG>Example:</STRONG> The sec2 driver just makes system calls. It tries not to
+call <CODE>lseek</CODE> if the current operation is the same as the previous
+operation and the file position is correct.  It also fills the output buffer
+with zeros when reading between the current EOF and EOA markers and restarts
+system calls which were interrupted.
+
+</P>
+
+<PRE>
+static herr_t
+H5FD_sec2_read(H5FD_t *_file, H5FD_mem_t type/*unused*/, hid_t dxpl_id/*unused*/,
+        haddr_t addr, hsize_t size, void *buf/*out*/)
+{
+    H5FD_sec2_t         *file = (H5FD_sec2_t*)_file;
+    ssize_t             nbytes;
+    
+    assert(file &#38;&#38; file-&#62;pub.cls);
+    assert(buf);
+
+    /* Check for overflow conditions */
+    if (REGION_OVERFLOW(addr, size)) return -1;
+    if (addr+size&#62;file-&#62;eoa) return -1;
+
+    /* Seek to the correct location */
+    if ((addr!=file-&#62;pos || OP_READ!=file-&#62;op) &#38;&#38;
+        file_seek(file-&#62;fd, (file_offset_t)addr, SEEK_SET)&#60;0) {
+        file-&#62;pos = HADDR_UNDEF;
+        file-&#62;op = OP_UNKNOWN;
+        return -1;
+    }
+
+    /*
+     * Read data, being careful of interrupted system calls, partial results,
+     * and the end of the file.
+     */
+    while (size&#62;0) {
+        do nbytes = read(file-&#62;fd, buf, size);
+        while (-1==nbytes &#38;&#38; EINTR==errno);
+        if (-1==nbytes) {
+            /* error */
+            file-&#62;pos = HADDR_UNDEF;
+            file-&#62;op = OP_UNKNOWN;
+            return -1;
+        }
+        if (0==nbytes) {
+            /* end of file but not end of format address space */
+            memset(buf, 0, size);
+            size = 0;
+        }
+        assert(nbytes&#62;=0);
+        assert((hsize_t)nbytes&#60;=size);
+        size -= (hsize_t)nbytes;
+        addr += (haddr_t)nbytes;
+        buf = (char*)buf + nbytes;
+    }
+    
+    /* Update current position */
+    file-&#62;pos = addr;
+    file-&#62;op = OP_READ;
+    return 0;
+}
+</PRE>
+
+<P>
+<STRONG>Example:</STRONG> The sec2 <CODE>write</CODE> callback is similar except it updates
+the file EOF marker when extending the file.
+
+</P>
+
+
+<H3><A NAME="SEC21" HREF="VFL.html#TOC21">Flushing Cached Data</A></H3>
+
+<P>
+Some drivers may desire to cache data in memory in order to make larger I/O
+requests to the underlying file and thus improving bandwidth. Such drivers
+should register a cache flushing function so that the library can insure that
+data has been flushed out of the drivers in response to the application
+calling <CODE>H5Fflush</CODE>.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> static herr_t <B>flush</B> <I>(H5FD_t *<VAR>file</VAR>)</I>
+<DD><A NAME="IDX12"></A>
+
+</P>
+<P>
+Flush all data for file <VAR>file</VAR> to storage.
+</DL>
+
+</P>
+<P>
+<STRONG>Example:</STRONG> The sec2 driver doesn't cache any data but it also doesn't
+extend the Unix file as agressively as it should. Therefore, when finalizing a 
+file it should write a zero to the last byte of the allocated region so that
+when reopening the file later the EOF marker will be at least as large as the
+EOA marker saved in the superblock (otherwise HDF5 will refuse to open the
+file, claiming that the data appears to be truncated).
+
+</P>
+
+<PRE>
+static herr_t
+H5FD_sec2_flush(H5FD_t *_file)
+{
+    H5FD_sec2_t *file = (H5FD_sec2_t*)_file;
+
+    if (file-&#62;eoa&#62;file-&#62;eof) {
+        if (-1==file_seek(file-&#62;fd, file-&#62;eoa-1, SEEK_SET)) return -1;
+        if (write(file-&#62;fd, "", 1)!=1) return -1;
+        file-&#62;eof = file-&#62;eoa;
+        file-&#62;pos = file-&#62;eoa;
+        file-&#62;op = OP_WRITE;
+    }
+
+    return 0;
+}
+</PRE>
+
+
+
+<H2><A NAME="SEC22" HREF="VFL.html#TOC22">Optimization Functions</A></H2>
+
+<P>
+The library is capable of performing several generic optimizations on I/O, but
+these types of optimizations may not be appropriate for a given VFL driver.
+</P>
+
+<P>
+Each driver may provide a query function to allow the library to query whether
+to enable these optimizations.  If a driver lacks a query function, the library
+will disable all types of optimizations which can be queried.
+</P>
+
+<P>
+<DL>
+<DT><U>Function:</U> static herr_t <B>query</B> <I>(const H5FD_t *<VAR>file</VAR>, unsigned long *<VAR>flags</VAR>)</I>
+<DD><A NAME="IDX17"></A>
+</P>
+<P>
+This function is called by the library to query which optimizations to enable
+for I/O to this driver.  These are the flags which are currently defined:
+
+<UL>
+<DL>
+<DT>H5FD_FEAT_AGGREGATE_METADATA    (0x00000001)
+<DD>Defining the H5FD_FEAT_AGGREGATE_METADATA for a VFL driver means that
+the library will attempt to allocate a larger block for metadata and
+then sub-allocate each metadata request from that larger block.
+<DT>H5FD_FEAT_ACCUMULATE_METADATA   (0x00000002)
+<DD>Defining the H5FD_FEAT_ACCUMULATE_METADATA for a VFL driver means that
+the library will attempt to cache metadata as it is written to the file
+and build up a larger block of metadata to eventually pass to the VFL
+'write' routine.
+<DT>H5FD_FEAT_DATA_SIEVE            (0x00000004)
+<DD>Defining the H5FD_FEAT_DATA_SIEVE for a VFL driver means that
+the library will attempt to cache raw data as it is read from/written to
+a file in a "data sieve" buffer.  See Rajeev Thakur's papers:
+    <UL>
+    <DL>
+    <DT>http://www.mcs.anl.gov/~thakur/papers/romio-coll.ps.gz
+    <DT>http://www.mcs.anl.gov/~thakur/papers/mpio-high-perf.ps.gz
+    </DL>
+    </UL>
+</DL>
+</UL>
+</P>
+
+</DL>
+</P>
+
+<H2><A NAME="SEC23" HREF="VFL.html#TOC23">Registration of a Driver</A></H2>
+
+<P>
+Before a driver can be used the HDF5 library needs to be told of its
+existence.  This is done by registering the driver, which results in a driver
+identification number. Instead of passing many arguments to the registration
+function, the driver information is entered into a structure and the address
+of the structure is passed to the registration function where it is
+copied. This allows the HDF5 API to be extended while providing backward
+compatibility at the source level.
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> hid_t <B>H5FDregister</B> <I>(H5FD_class_t *<VAR>cls</VAR>)</I>
+<DD><A NAME="IDX13"></A>
+
+</P>
+<P>
+The driver described by struct <VAR>cls</VAR> is registered with the library and an 
+ID number for the driver is returned.
+</DL>
+
+</P>
+<P>
+The <CODE>H5FD_class_t</CODE> type is a struct with the following fields:
+
+</P>
+<DL COMPACT>
+
+<DT><CODE>const char *name</CODE>
+<DD>
+A pointer to a constant, null-terminated driver name to be used for debugging
+purposes.
+<DT><CODE>size_t fapl_size</CODE>
+<DD>
+The size in bytes of the file access mode structure or zero if the driver
+supplies a copy function or doesn't define the structure.
+<DT><CODE>void *(*fapl_copy)(const void *fapl)</CODE>
+<DD>
+An optional function which copies a driver-defined file access mode structure.
+This field takes precedence over <CODE>fm_size</CODE> when both are defined.
+<DT><CODE>void (*fapl_free)(void *fapl)</CODE>
+<DD>
+An optional function to free the driver-defined file access mode structure. If
+null, then the library calls the C <CODE>free</CODE> function to free the
+structure.
+<DT><CODE>size_t dxpl_size</CODE>
+<DD>
+The size in bytes of the data transfer mode structure or zero if the driver
+supplies a copy function or doesn't define the structure.
+<DT><CODE>void *(*dxpl_copy)(const void *dxpl)</CODE>
+<DD>
+An optional function which copies a driver-defined data transfer mode
+structure.  This field takes precedence over <CODE>xm_size</CODE> when both are
+defined.
+<DT><CODE>void (*dxpl_free)(void *dxpl)</CODE>
+<DD>
+An optional function to free the driver-defined data transfer mode
+structure. If null, then the library calls the C <CODE>free</CODE> function to
+free the structure.
+<DT><CODE>H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl, haddr_t maxaddr)</CODE>
+<DD>
+The function which opens or creates a new file.
+<DT><CODE>herr_t (*close)(H5FD_t *file)</CODE>
+<DD>
+The function which ends access to a file.
+<DT><CODE>int (*cmp)(const H5FD_t *f1, const H5FD_t *f2)</CODE>
+<DD>
+An optional function to determine whether two open files have the same key. If
+this function is not present then the library assumes that two files will
+never be the same.
+<DT><CODE>int (*query)(const H5FD_t *f, unsigned long *flags)</CODE>
+<DD>
+An optional function to determine which library optimizations a driver can
+support.
+<DT><CODE>haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hsize_t size)</CODE>
+<DD>
+An optional function to allocate space in the file.
+<DT><CODE>herr_t (*free)(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size)</CODE>
+<DD>
+An optional function to free space in the file.
+<DT><CODE>haddr_t (*get_eoa)(H5FD_t *file)</CODE>
+<DD>
+A function to query how much of the format address space has been allocated.
+<DT><CODE>herr_t (*set_eoa)(H5FD_t *file, haddr_t)</CODE>
+<DD>
+A function to set the end of address space.
+<DT><CODE>haddr_t (*get_eof)(H5FD_t *file)</CODE>
+<DD>
+A function to return the current end-of-file marker value.
+<DT><CODE>herr_t (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, hsize_t size, void *buffer)</CODE>
+<DD>
+A function to read data from a file.
+<DT><CODE>herr_t (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl, haddr_t addr, hsize_t size, const void *buffer)</CODE>
+<DD>
+A function to write data to a file.
+<DT><CODE>herr_t (*flush)(H5FD_t *file)</CODE>
+<DD>
+A function which flushes cached data to the file.
+<DT><CODE>H5FD_mem_t fl_map[H5FD_MEM_NTYPES]</CODE>
+<DD>
+An array which maps a file allocation request type to a free list.
+</DL>
+
+<P>
+<STRONG>Example:</STRONG> The sec2 driver would be registered as:
+
+</P>
+
+<PRE>
+static const H5FD_class_t H5FD_sec2_g = {
+    "sec2",                                     /*name                  */
+    MAXADDR,                                    /*maxaddr               */
+    NULL,                                       /*sb_size               */
+    NULL,                                       /*sb_encode             */
+    NULL,                                       /*sb_decode             */
+    0,                                          /*fapl_size             */
+    NULL,                                       /*fapl_get              */
+    NULL,                                       /*fapl_copy             */
+    NULL,                                       /*fapl_free             */
+    0,                                          /*dxpl_size             */
+    NULL,                                       /*dxpl_copy             */
+    NULL,                                       /*dxpl_free             */
+    H5FD_sec2_open,                             /*open                  */
+    H5FD_sec2_close,                            /*close                 */
+    H5FD_sec2_cmp,                              /*cmp                   */
+    H5FD_sec2_query,                            /*query                 */
+    NULL,                                       /*alloc                 */
+    NULL,                                       /*free                  */
+    H5FD_sec2_get_eoa,                          /*get_eoa               */
+    H5FD_sec2_set_eoa,                          /*set_eoa               */
+    H5FD_sec2_get_eof,                          /*get_eof               */
+    H5FD_sec2_read,                             /*read                  */
+    H5FD_sec2_write,                            /*write                 */
+    H5FD_sec2_flush,                            /*flush                 */
+    H5FD_FLMAP_SINGLE,                          /*fl_map                */
+};
+
+hid_t
+H5FD_sec2_init(void)
+{
+    if (!H5FD_SEC2_g) {
+        H5FD_SEC2_g = H5FDregister(&#38;H5FD_sec2_g);
+    }
+    return H5FD_SEC2_g;
+}
+</PRE>
+
+<P>
+A driver can be removed from the library by unregistering it
+
+</P>
+<P>
+<DL>
+<DT><U>Function:</U> herr_t <B>H5Dunregister</B> <I>(hid_t <VAR>driver</VAR>)</I>
+<DD><A NAME="IDX14"></A>
+Where <VAR>driver</VAR> is the ID number returned when the driver was registered.
+</DL>
+
+</P>
+<P>
+Unregistering a driver makes it unusable for creating new file access or data
+transfer property lists but doesn't affect any property lists or files that
+already use that driver.
+
+</P>
+
+
+
+<H2><A NAME="SEC24" HREF="VFL.html#TOC24">Querying Driver Information</A></H2>
+
+<P>
+<DL>
+<DT><U>Function:</U> void * <B>H5Pget_driver_data</B> <I>(hid_t <VAR>fapl</VAR>)</I>
+<DD><A NAME="IDX15"></A>
+<DT><U>Function:</U> void * <B>H5Pget_driver_data</B> <I>(hid_t <VAR>fxpl</VAR>)</I>
+<DD><A NAME="IDX16"></A>
+
+</P>
+<P>
+This function is intended to be used by driver functions, not applications.
+It returns a pointer directly into the file access property list
+<CODE><VAR>fapl</VAR></CODE> which is a copy of the driver's file access mode originally
+provided to the <CODE>H5Pset_driver</CODE> function. If its argument is a data
+transfer property list <CODE>fxpl</CODE> then it returns a pointer to the
+driver-specific data transfer information instead.
+</DL>
+
+</P>
+
+
+<H1><A NAME="SEC25" HREF="VFL.html#TOC25">Miscellaneous</A></H1>
+
+<P>
+The various private <CODE>H5F_low_*</CODE> functions will be replaced by public
+<CODE>H5FD*</CODE> functions so they can be called from drivers.
+
+</P>
+<P>
+All private functions <CODE>H5F_addr_*</CODE> which operate on addresses will be
+renamed as public functions by removing the first underscore so they can be
+called by drivers.
+
+</P>
+<P>
+The <CODE>haddr_t</CODE> address data type will be passed by value throughout the
+library. The original intent was that this type would eventually be a union of
+file address types for the various drivers and may become quite large, but
+that was back when drivers were part of HDF5. It will become an alias for an
+unsigned integer type (32 or 64 bits depending on how the library was
+configured).
+
+</P>
+<P>
+The various <CODE>H5F*.c</CODE> driver files will be renamed <CODE>H5FD*.c</CODE> and each
+will have a corresponding header file. All driver functions except the
+initializer and API will be declared static.
+
+</P>
+<P>
+This documentation didn't cover optimization functions which would be useful
+to drivers like MPI-IO. Some drivers may be able to perform data pipeline
+operations more efficiently than HDF5 and need to be given a chance to
+override those parts of the pipeline. The pipeline would be designed to call
+various H5FD optimization functions at various points which return one of
+three values: the operation is not implemented by the driver, the operation is
+implemented but failed in a non-recoverable manner, the operation is
+implemented and succeeded.
+
+</P>
+<P>
+Various parts of HDF5 check the only the top-level file driver and do
+something special if it is the MPI-IO driver. However, we might want to be
+able to put the MPI-IO driver under other drivers such as the raw part of a
+split driver or under a debug driver whose sole purpose is to accumulate
+statistics as it passes all requests through to the MPI-IO driver. Therefore
+we will probably need a function which takes a format address and or object
+type and returns the driver which would have been used at the lowest level to
+process the request.
+
+</P>
+
+<P><HR><P>
+<H1>Footnotes</H1>
+<H3><A NAME="FOOT1" HREF="VFL.html#DOCF1">(1)</A></H3>
+<P>The driver name is by convention and might
+not apply to drivers which are not distributed with HDF5.
+<H3><A NAME="FOOT2" HREF="VFL.html#DOCF2">(2)</A></H3>
+<P>The access method also indicates how to translate
+the storage name to a storage server such as a file, network protocol, or
+memory.
+<H3><A NAME="FOOT3" HREF="VFL.html#DOCF3">(3)</A></H3>
+<P>The term 
+"<EM>file</EM> access property list" is a misnomer since storage isn't
+required to be a file.
+<H3><A NAME="FOOT4" HREF="VFL.html#DOCF4">(4)</A></H3>
+<P>This
+function is overloaded to operate on data transfer property lists also, as
+described below.
+<H3><A NAME="FOOT5" HREF="VFL.html#DOCF5">(5)</A></H3>
+<P>Read-only access is only appropriate when opening an existing
+file.
+<H3><A NAME="FOOT6" HREF="VFL.html#DOCF6">(6)</A></H3>
+<P>For instance, writing data to one handle will cause
+the data to be immediately visible on the other handle.
+<H3><A NAME="FOOT7" HREF="VFL.html#DOCF7">(7)</A></H3>
+<P>The ordering is
+arbitrary as long as it's consistent within a particular file driver.
+<H3><A NAME="FOOT8" HREF="VFL.html#DOCF8">(8)</A></H3>
+<P>File access modes do not describe data, but rather
+describe how the HDF5 format address space is mapped to the underlying
+file(s). Thus, in general the mapping must be known before the file superblock
+can be read. However, the user usually knows enough about the mapping for the
+superblock to be readable and once the superblock is read the library can fill
+in the missing parts of the mapping.
+<P><HR><P>
+This document was generated on 18 November 1999 using the
+<A HREF="http://wwwcn.cern.ch/dci/texi2html/">texi2html</A>
+translator version 1.51.</P>
+<P>
+Updated on 10/24/00 by hand, Quincey Koziol
+</P>
+</BODY>
+</HTML>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/VFLfunc.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/VFLfunc.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/VFLfunc.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,84 @@
+<html>
+<head>
+<title>VFL Functions</title>
+</head>
+
+<body>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<h1>List of HDF5 VFL Functions</h1>
+
+<pre>
+The following functions support the HDF5 virtual file layer (VFL), enabling 
+the creation of customized I/O drivers.  
+
+At this time, these functions are documented only in the <a href="VFL.html">HDF5 Virtual File 
+Layer</a> design document and in the source code.
+
+
+
+herr_t <font color=red>H5Pset_driver</font>(hid_t plist_id, hid_t driver_id,
+                const void *driver_info)
+
+void *<font color=red>H5Pget_driver_info</font>(hid_t plist_id)
+
+hid_t <font color=red>H5FDregister</font>(const H5FD_class_t *cls);
+
+herr_t <font color=red>H5FDunregister</font>(hid_t driver_id);
+
+H5FD_t *<font color=red>H5FDopen</font>(const char *name, unsigned flags, hid_t fapl_id,
+		haddr_t maxaddr);
+
+herr_t <font color=red>H5FDclose</font>(H5FD_t *file);
+
+int <font color=red>H5FDcmp</font>(const H5FD_t *f1, const H5FD_t *f2);
+
+int <font color=red>H5FDquery</font>(const H5FD_t *f, unsigned long *flags);
+
+haddr_t <font color=red>H5FDalloc</font>(H5FD_t *file, H5FD_mem_t type, hsize_t size);
+
+herr_t <font color=red>H5FDfree</font>(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size);
+
+haddr_t <font color=red>H5FDrealloc</font>(H5FD_t *file, H5FD_mem_t type, haddr_t addr,
+		hsize_t old_size, hsize_t new_size);
+
+haddr_t <font color=red>H5FDget_eoa</font>(H5FD_t *file);
+
+herr_t <font color=red>H5FDset_eoa</font>(H5FD_t *file, haddr_t eof);
+
+haddr_t <font color=red>H5FDget_eof</font>(H5FD_t *file);
+
+herr_t <font color=red>H5FDread</font>(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, 
+		size_t size, void *buf/*out*/);
+
+herr_t <font color=red>H5FDwrite</font>(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, 
+		haddr_t addr, size_t size, const void *buf);
+
+herr_t <font color=red>H5FDflush</font></font>(H5FD_t *file, unsigned closing);
+
+===========================================
+Last modified:  25 June 2002
+HDF Help Desk:  hdfhelp at ncsa.uiuc.edu
+
+</pre>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/Version.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/Version.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/Version.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,158 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Version Numbers</title>
+  </head>
+
+  <body>
+
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+ 
+  <h1>HDF5 Release Version Numbers</h1>
+
+    <h2>1. Introduction</h2>
+
+    <p>The HDF5 version number is a set of three integer values
+      written as either <code>hdf5-1.2.3</code> or <code>hdf5 version
+      1.2 release 3</code>.
+
+    <p>The <code>5</code> is part of the library name and will only
+      change if the entire file format and library are redesigned
+      similar in scope to the changes between HDF4 and HDF5.
+
+    <p>The <code>1</code> is the <em>major version number</em> and
+      changes when there is an extensive change to the file format or
+      library API.  Such a change will likely require files to be
+      translated and applications to be modified.  This number is not
+      expected to change frequently.
+
+    <p>The <code>2</code> is the <em>minor version number</em> and is
+      incremented by each public release that presents new features.
+      Even numbers are reserved for stable public versions of the
+      library while odd numbers are reserved for developement
+      versions.  See the diagram below for examples.
+
+    <p>The <code>3</code> is the <em>release number</em>.  For public
+      versions of the library, the release number is incremented each
+      time a bug is fixed and the fix is made available to the public.
+      For development versions, the release number is incremented more 
+      often (perhaps almost daily).
+
+    <h2>2. Abbreviated Versions</h2>
+
+    <p>It's often convenient to drop the release number when referring
+      to a version of the library, like saying version 1.2 of HDF5.
+      The release number can be any value in this case.
+
+    <h2>3. Special Versions</h2>
+
+    <p>Version 1.0.0 was released for alpha testing the first week of
+      March, 1998.  The developement version number was incremented to 
+      1.0.1 and remained constant until the the last week of April,
+      when the release number started to increase and development
+      versions were made available to people outside the core HDF5
+      development team.
+
+    <p>Version 1.0.23 was released mid-July as a second alpha
+      version.
+
+    <p>Version 1.1.0 will be the first official beta release but the
+      1.1 branch will also serve as a development branch since we're
+      not concerned about providing bug fixes separate from normal
+      development for the beta version.
+
+    <p>After the beta release we rolled back the version number so the
+      first release is version 1.0 and development will continue on
+      version 1.1. We felt that an initial version of 1.0 was more
+      important than continuing to increment the pre-release version
+      numbers.
+
+    <h2>4. Public versus Development</h2>
+
+    <p>The motivation for separate public and development versions is
+      that the public version will receive only bug fixes while the
+      development version will receive new features.  This also allows 
+      us to release bug fixes expediently without waiting for the
+      development version to reach a stable state.
+
+    <p>Eventually, the development version will near completion and a
+      new development branch will fork while the original one enters a 
+      feature freeze state.  When the original development branch is
+      ready for release the minor version number will be incremented
+      to an even value.
+
+    <p>
+      <center>
+	<img alt="Version Example" src="version.gif">
+	<br><b>Fig 1: Version Example</b>
+      </center>
+
+    <h2>5. Version Support from the Library</h2>
+
+    <p>The library provides a set of macros and functions to query and 
+      check version numbers.
+
+    <dl>
+      <dt><code>H5_VERS_MAJOR</code>
+      <dt><code>H5_VERS_MINOR</code>
+      <dt><code>H5_VERS_RELEASE</code>
+      <dd>These preprocessor constants are defined in the public
+	include file and determine the version of the include files.
+
+	<br><br>
+      <dt><code>herr_t H5get_libversion (unsigned *<em>majnum</em>, unsigned
+	  *<em>minnum</em>, unsigned *<em>relnum</em>)</code>
+      <dd>This function returns through its arguments the version
+	numbers for the library to which the application is linked.
+
+	<br><br>
+      <dt><code>void H5check(void)</code>
+      <dd>This is a macro that verifies that the version number of the 
+	HDF5 include file used to compile the application matches the
+	version number of the library to which the application is
+	linked.  This check occurs automatically when the first HDF5
+	file is created or opened and is important because a mismatch
+	between the include files and the library is likely to result
+	in corrupted data and/or segmentation faults.  If a mismatch
+	is detected the library issues an error message on the
+	standard error stream and aborts with a core dump.
+
+	<br><br>
+      <dt><code>herr_t H5check_version (unsigned <em>majnum</em>,
+	  unsigned <em>minnum</em>, unsigned <em>relnum</em>)</code>
+      <dd>This function is called by the <code>H5check()</code> macro
+	with the include file version constants.  The function
+	compares its arguments to the result returned by
+	<code>H5get_libversion()</code> and if a mismatch is detected prints
+	an error message on the standard error stream and aborts.
+    </dl>
+
+<hr>
+<address><a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a></address>
+<br>
+
+<!-- Created: Wed Apr 22 11:24:40 EDT 1998 -->
+<!-- hhmts start -->
+Last modified: Fri Oct 30 10:32:50 EST 1998
+<!-- hhmts end -->
+
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/openmp-hdf5.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/openmp-hdf5.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/openmp-hdf5.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,403 @@
+Appendix A: OpenMP-HDF5 Programs
+-------------------------------------------------------------------------
+                Program 1
+-------------------------------------------------------------------------
+/*  
+ *  This example writes 64 datasets to a HDF5 file, using multiple threads
+ *  (OpenMP).  Each thread grab the lock while it tries to call HDF5 functions
+ *  to write out dataset.  In this way, the HDF5 calls are serialized, while
+ *  the calculation part is in parallel.   This is one of the ways to do 
+ *  OpenMP computation with HDF.  As long as not to do HDF I/O in parallel, 
+ *  it is safe to use HDF.
+ */
+ 
+#include <hdf5.h>
+#include <omp.h>
+#include <math.h>
+
+#define NUM_THREADS 4
+#define NUM_MDSET   16
+#define FILE        "SDS.h5"
+#define NX          5                  /* dataset dimensions */
+#define NY          18
+#define RANK        2
+
+void CalcWriteData(hid_t, hid_t, hid_t);
+
+/*Global variable, OpenMP lock*/
+omp_lock_t  lock;
+
+
+int
+main (void)
+{
+    hid_t       fid;                  /* file and dataset handles */
+    hid_t       datatype, dataspace;   /* handles */
+    hsize_t     dimsf[2];              /* dataset dimensions */
+    herr_t      status;                             
+    int         i;
+
+    /*
+     * Create a new file using H5F_ACC_TRUNC access,
+     * default file creation properties, and default file
+     * access properties.
+     */
+    fid = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Describe the size of the array and create the data space for fixed
+     * size dataset. 
+     */
+    dimsf[0] = NX;
+    dimsf[1] = NY;
+    dataspace = H5Screate_simple(RANK, dimsf, NULL); 
+
+    /* 
+     * Define datatype for the data in the file.
+     * We will store little endian INT numbers.
+     */
+    datatype = H5Tcopy(H5T_NATIVE_DOUBLE);
+    status = H5Tset_order(datatype, H5T_ORDER_LE);
+
+    /*Disable dynamic allocation of threads*/
+    omp_set_dynamic(0);
+
+    /*Allocate threads*/
+    omp_set_num_threads(NUM_THREADS);
+
+    /*Initialize lock*/
+    omp_init_lock(&lock);
+
+    /*Each thread grab one iteration in the for loop and call function 
+     * CaclWriteData*/
+    #pragma omp parallel default(shared)
+    {
+        #pragma omp for
+             for(i=0; i<NUM_THREADS; i++) {
+                  CalcWriteData(fid, dataspace, datatype);
+             }
+    }
+
+    /*Finished lock mechanism, destroy it*/
+    omp_destroy_lock(&lock);
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Fclose(fid);
+ 
+    return 0;
+}
+
+/*Each thread will call this function independantly.  They calculate dataset
+ *and then write it out to hdf, for NUM_MDSET times */
+void CalcWriteData(hid_t fid, hid_t dataspace, hid_t datatype)
+{
+    double   data[NX][NY];
+    hid_t    dataset;
+    char     dname[16];
+    int      tid;
+    int      i, j, k;
+
+    tid = omp_get_thread_num();
+
+    for(i=0; i<NUM_MDSET; i++) {
+         /*Weird calculation to extend computing time*/
+         for(j=0; j<NX; j++) {
+              for(k=0; k<NY; k++) 
+                   data[j][k] = ( pow(sin(tid), 2.0) + pow(cos(tid), 2.0) ) * 
+                            ( tid + i ) +
+                            ( pow(123456789.0, 8.0) - pow(123456789.0, 8.0) );
+   
+	 }
+         sprintf(dname, "tid%d-dataset%d", tid, i);
+
+         /*Serialize HDF dataset writing using OpenMP lock*/
+         omp_set_lock(&lock);
+
+         dataset = H5Dcreate(fid, dname, datatype, dataspace, H5P_DEFAULT);
+         H5Dwrite(dataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
+                  data);
+         H5Dclose(dataset);
+
+         /*Release lock*/
+         omp_unset_lock(&lock);
+    }
+
+}
+
+
+
+
+-------------------------------------------------------------------------
+		Program 2
+-------------------------------------------------------------------------
+/*  
+ *  This example compute the element values of an array in parallel 
+ *  by two threads.  Then write this dataset into HDF file.  This is
+ *  one of the ways to do OpenMP computation with HDF.  As long as 
+ *  not to do HDF I/O in parallel, it is safe to use HDF.
+ *  
+ */
+ 
+#include <hdf5.h>
+#include <omp.h>
+
+#define FILE        "SDS.h5"
+#define DATASETNAME "IntArray" 
+#define NX     5                      /* dataset dimensions */
+#define NY     6
+#define RANK   2
+
+int
+main (void)
+{
+    hid_t       file, dataset;         /* file and dataset handles */
+    hid_t       datatype, dataspace;   /* handles */
+    hsize_t     dimsf[2];              /* dataset dimensions */
+    herr_t      status;                             
+    int         data[NX][NY];          /* data to write */
+    int         i, j;
+
+    /*
+     * Create a new file using H5F_ACC_TRUNC access,
+     * default file creation properties, and default file
+     * access properties.
+     */
+    file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Describe the size of the array and create the data space for fixed
+     * size dataset. 
+     */
+    dimsf[0] = NX;
+    dimsf[1] = NY;
+    dataspace = H5Screate_simple(RANK, dimsf, NULL); 
+
+    /* 
+     * Define datatype for the data in the file.
+     * We will store little endian INT numbers.
+     */
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    status = H5Tset_order(datatype, H5T_ORDER_LE);
+
+    /* Disable dynamic allocation of threads. */
+    omp_set_dynamic(0);
+    
+    /* Allocate 2 threads */
+    omp_set_num_threads(2);
+
+
+    /* Parallel computation.  Let 2 threads handle this nested for loops
+     * in parallel.  Only one data array is computed.  */  
+    #pragma omp parallel default(shared) 
+    {
+        #pragma omp for 
+            for (j = 0; j < NX; j++) {
+                #pragma omp parallel shared(j, NY) 
+                {
+                    #pragma omp for 
+                        for (i = 0; i < NY; i++)
+                            data[j][i] = i + j; 
+                }
+            }
+    }
+
+    /* Write this dataset into HDF file */
+    dataset = H5Dcreate(file, DATASETNAME, datatype, dataspace,
+                        H5P_DEFAULT); 
+    H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+                        H5P_DEFAULT, data);
+    H5Dclose(dataset);
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Fclose(file);
+ 
+    return 0;
+}     
+
+
+
+-------------------------------------------------------------------------
+		Program 3
+-------------------------------------------------------------------------
+/*  
+ *  This example create two threads.  Each thread writes  a dataset to 
+ *  the HDF5 file in parallel.  This program only works occasionally.
+ */
+ 
+#include <hdf5.h>
+#include <omp.h>
+
+#define FILE   "SDS.h5"
+#define NX     5                      /* dataset dimensions */
+#define NY     6
+#define RANK   2
+
+void writeData(int, hid_t, hid_t, hid_t, char*);
+
+int main (void)
+{
+    hid_t       file;                  /* file and dataset handles */
+    hid_t       datatype, dataspace;   /* handles */
+    hsize_t     dimsf[2];              /* dataset dimensions */
+    herr_t      status;                             
+    int         id;
+    char        dname[2][10] = {"Array1", "Array2"};
+
+    /*
+     * Create a new file using H5F_ACC_TRUNC access,
+     * default file creation properties, and default file
+     * access properties.
+     */
+    file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Describe the size of the array and create the data space for fixed
+     * size dataset. 
+     */
+    dimsf[0] = NX;
+    dimsf[1] = NY;
+    dataspace = H5Screate_simple(RANK, dimsf, NULL); 
+
+    /* 
+     * Define datatype for the data in the file.
+     * We will store little endian INT numbers.
+     */
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    status = H5Tset_order(datatype, H5T_ORDER_LE);
+
+    /*Disable dynamic allocation of threads*/
+    omp_set_dynamic(0);
+ 
+    /*Allocate 2 threads*/
+    omp_set_num_threads(2);
+
+    /*Parallel Part:  each thread call function writeData; id is private to 
+     *                thread while others are shared                     */
+    #pragma omp parallel shared(file, dataspace, datatype, dname) private(id)
+    {
+         id = omp_get_thread_num();
+         writeData(id, file, dataspace, datatype, dname[id]);           
+    }
+
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Fclose(file);
+ 
+    return 0;
+}   
+
+
+/*Each thread call this function to write a dataset into HDF5 file*/
+ 
+void writeData(int id, hid_t file, hid_t dataspace, hid_t datatype, char *dname)
+{
+    int    data[NX][NY];
+    hid_t  dataset;
+    int    i, j;
+
+    for (j = 0; j < NX; j++) {
+        for (i = 0; i < NY; i++)
+            data[j][i] = i + j + id;
+    }
+
+    dataset = H5Dcreate(file, dname, datatype, dataspace,
+                       H5P_DEFAULT);
+    H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+                       H5P_DEFAULT, data);
+    H5Dclose(dataset);
+}
+
+
+-------------------------------------------------------------------------
+		Program 4
+-------------------------------------------------------------------------
+/*  
+ * This example compute and write two datasets into HDF file in
+ * parallel.  It also only works occasionally.      
+ */
+ 
+#include <hdf5.h>
+#include <omp.h>
+
+#define FILE        "SDS.h5"
+#define DATASETNAME "IntArray" 
+#define NX     5                      /* dataset dimensions */
+#define NY     6
+#define RANK   2
+
+int
+main (void)
+{
+    hid_t       file, dataset;         /* file and dataset handles */
+    hid_t       datatype, dataspace;   /* handles */
+    hsize_t     dimsf[2];              /* dataset dimensions */
+    herr_t      status;                             
+    int         data[NX][NY];          /* data to write */
+    int         i, j, id;
+    char        dname[2][10] = {"intArray1", "intArray2"};
+
+    /*
+     * Create a new file using H5F_ACC_TRUNC access,
+     * default file creation properties, and default file
+     * access properties.
+     */
+    file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Describe the size of the array and create the data space for fixed
+     * size dataset. 
+     */
+    dimsf[0] = NX;
+    dimsf[1] = NY;
+    dataspace = H5Screate_simple(RANK, dimsf, NULL); 
+
+    /* 
+     * Define datatype for the data in the file.
+     * We will store little endian INT numbers.
+     */
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    status = H5Tset_order(datatype, H5T_ORDER_LE);
+
+    omp_set_dynamic(0);
+    omp_set_num_threads(2);
+    
+    
+    /* This part of program compute and write two datasets in parallel. */
+    #pragma omp parallel shared(file, datatype, dataspace, dname) private(id, j, i, data, dataset)
+    {
+        id = omp_get_thread_num();
+        for (j = 0; j < NX; j++) {
+            for (i = 0; i < NY; i++)
+                data[j][i] = i + j + id;
+        }
+
+        dataset = H5Dcreate(file, dname[id], datatype, dataspace,
+                            H5P_DEFAULT); 
+        H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+                              H5P_DEFAULT, data);
+        H5Dclose(dataset);
+    }
+
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Fclose(file);
+ 
+    return 0;
+}     
+

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/openmp-hdf5.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes/openmp-hdf5.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes/openmp-hdf5.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,87 @@
+<!-- #BeginLibraryItem "/ed_libs/copyright-html.lbi" -->
+<!-- separator -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+<!-- separator -->
+<!-- #EndLibraryItem -->
+
+<pre>
+		    Using HDF5 with OpenMP
+		    ----------------------
+
+
+1. Introduction to OpenMP
+-------------------------
+
+    - For shared-memory parallelism
+    - A combination of library and directives
+    - Available for C/C++ and Fortran
+    - SGI leading effort
+    - Information at http://www.openmp.org and 
+      http://www.sgi.com/software/openmp
+
+2. Programming(SGI MPISpro compiler and C language)
+---------------------------------------------------
+
+    - Turn on compiler '-mp' option
+    - Include 'omp.h' library in program
+    - Use library functions, directives and environment variables
+
+
+3. Sample Programs
+------------------
+
+Appendix A contains four OpenMP-HDF5 test programs.  (They are derived from
+the hdf5/examples/h5_write.c).  The purpose of these program is to 
+test OpenMP parallelism with the HDF5 library.
+
+All tests were run on modi4 with SGI MPISpro compiler(cc) and make.
+Program 1 and Program 2 are the working programs.  Program 3 and Program 4
+work occasionally due to racing conditions.
+Follow the following steps to try the programs.
+
+  a.  have your hdf5 library compiled, 
+  b.  go to hdf5/examples directory,
+  c.  add -mp option to the end of the CFLAGS list in the Makefile.  If you 
+      have the compiled program in another directory, you should go to the 
+      examples in that directory.
+  d.  modify the hdf5/examples/h5_write.c according to the program attached 
+      here.  
+  e.  use hdf5/tools/h5dump to examine the output file.
+
+
+4. Conclusion
+-------------
+
+It is not safe to invoke HDF5 library calls via multiple threads in an
+OpenMP program.  But if one serializes HDF5 calls as illustrated in Program 1,
+the HDF5 library works correctly with the OpenMP programs.
+
+The serialization of HDF5 calls will slow down the OpenMP program unnecessarily.
+Future study is needed to check possible ways to "un-seralize" the HDF5 calls.
+One possibility is that the HDF5 library has a beta-version of Thread-safe
+implmentation though it is for Pthreads environment.  One can check on the
+feasibility of running OpenMP programs with this version of HDF5 Thread-safe
+library.
+
+
+
+<A HREF="openmp-hdf5.c">Appendix A: OpenMP-HDF5 Programs</A>
+
+-------
+Updated: 2000/11/28
+Contact: hdfhelp at ncsa.uiuc.edu
+</pre>

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe1.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe2.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe2.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe3.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe3.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe4.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe4.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe5.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/TechNotes/pipe5.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/shuffling-algorithm-report.pdf
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/TechNotes/shuffling-algorithm-report.pdf
___________________________________________________________________
Name: svn:executable
   + 
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes/version.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/TechNotes/version.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/TechNotes.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/TechNotes.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/TechNotes.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,308 @@
+<html>
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<head><title>
+HDF5 Technical Notes
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_Gen.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/GenElect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_TechN.lbi" --><hr>
+<center>
+<table cellspacing=0 cellpadding=0 border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+
+<td valign=top align=right>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+<a href="ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+
+<!--
+And in this document, 
+HDF5 Technical Notes&nbsp;&nbsp;
+<br>
+<a href="TechNotes/FreeLists.html">Memory Management and Free Lists</a>&nbsp;&nbsp;
+-->
+
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><br>
+<br>
+
+<center>
+<h1>HDF5 Technical Notes</h1>
+<h3>Technical Notes for HDF5 Library and Driver Developers</h3>
+</center>
+
+
+<center>
+<table border=0 width=85%>
+
+<tr><td valign=top colspan=3>
+    This informal volume of technical notes is of interest to 
+    those who develop and maintain the HDF5 library and 
+    related, closely-coupled drivers.
+    These notes are not generally of interest to applications developers 
+    and certainly not of interest to users.
+    (Some of these documents may be somewhat out of date as they were 
+    working papers for the design process.)
+    <br>
+    <br>
+</td></tr>
+
+<tr><td valign=top width=40%><a href="TechNotes/MemoryMgmt.html">
+    Memory Management</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A discussion of memory management issues in HDF5
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/FreeLists.html">
+    Memory Management and</a>
+    <br>&nbsp;&nbsp;&nbsp;&nbsp;
+    <a href="TechNotes/FreeLists.html">Free Lists</a>
+    </td><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td valign=top>
+    Notes regarding the implementation of free lists and memory management
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/HeapMgmt.html">Heap Management</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A discussion of the H5H heap management fuctions
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/RawDStorage.html">Raw Data Storage</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A discussion of the storage of raw HDF5 data
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/VFL.html">Virtual File Layer</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A description of the HDF5 virtual file layer (VFL), 
+    a public API for the implementation of custom I/O drivers 
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/VFLfunc.html">List of VFL Functions</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A list of the VFL functions, <code>H5FD*</code>
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/IOPipe.html">I/O Pipeline</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A description of the raw data I/O pipeline
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/BigDataSmMach.html">
+    Large Datasets on Small</a>
+    <br>&nbsp;&nbsp;&nbsp;&nbsp;
+    <a href="TechNotes/BigDataSmMach.html">Machines</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A guide to accessing large datasets on small computers
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/MoveDStruct.html">
+    Relocating a File Data</a>
+    <br>&nbsp;&nbsp;&nbsp;&nbsp;
+    <a href="TechNotes/MoveDStruct.html">Structure</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A discussion of the issues involved in moving file data structures once 
+    they have been cached in memory
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/ExternalFiles.html">
+    Working with External Files</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A guide to the use of multiple files with HDF5
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/ObjectHeader.html">Object Headers</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A discussion of the H5O object header functions
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/SymbolTables.html">
+    Symbol Table Caching Issues</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A discussion of issues involving caching of object header messages in
+    symbol table entries
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/H4-H5Compat.html">
+    HDF4/HDF5 Compatibility</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A discussion of compatibility issues between HDF4 and HDF5
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/ChunkingStudy.html">
+    Testing the Chunked Layout</a>
+    <br>&nbsp;&nbsp;&nbsp;&nbsp;
+    <a href="TechNotes/ChunkingStudy.html">of HDF5</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A white paper discussing the motivation to implement raw data chunking 
+    in the HDF5 library
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/LibMaint.html">Library Maintenance</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A discussion of HDF5 library maintenance issues
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/CodeReview.html">Code Review</a>
+    </td><td>&nbsp;</td><td valign=top>
+    Code Review 1 and 2
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/Version.html">
+    Release Version Numbers</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A description of HDF5 release version numbers
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/NamingScheme.html">Naming Schemes</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A discussion of naming schemes for HDF5 library modules, functions, 
+    datatypes, etc.
+</td></tr>
+
+<tr><td valign=top>
+<a href="TechNotes/ThreadSafeLibrary.html">Thread Safe HDF5 Library</a>
+    <br>&nbsp;&nbsp;&nbsp;&nbsp;
+    <a href="TechNotes/ThreadSafeLibrary.html">Implementation</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A report on the implementation of a thread safe HDF5 library.
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/ReservedFileSpace.html">Reserved File Address Space</a>
+    </td><td>&nbsp;</td><td valign=top>
+    Description of HDF5's internal system for ensuring that files stay within their address space.
+</td></tr>
+
+<tr><td valign=top>
+<a href="TechNotes/openmp-hdf5.html">Using HDF5 with OpenMP</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A short report on using HDF5 with OpenMP.
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/SWControls.html">HDF5 Software Controls</a>
+    </td><td>&nbsp;</td><td valign=top>
+    Descriptions of the HDF5 knobs and controls, such as the 
+    environment variables and settings that control the functionality 
+    of the HDF5 libraries and tools.
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/Daily_Test_Explained.htm">Daily Test Explained</a>
+    </td><td>&nbsp;</td><td valign=top>
+    An explanation of the Daily Testing for HDF software conducted.
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/TestReview.html">Test Review</a>
+    </td><td>&nbsp;</td><td valign=top>
+    Results of reviewing tests for API functions.
+</td></tr>
+
+<tr><td valign=top><a href="TechNotes/Basic_perform.html">Basic Performance Tools</a>
+    </td><td>&nbsp;</td><td valign=top>
+    A description of the three basic performance tools (chunk, iopipe, overhead).
+</td></tr>
+
+</table>
+</center>
+
+<br>
+<br>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_TechN.lbi" --><hr>
+<center>
+<table cellspacing=0 cellpadding=0 border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+
+<td valign=top align=right>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+<a href="ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+
+<!--
+And in this document, 
+HDF5 Technical Notes&nbsp;&nbsp;
+<br>
+<a href="TechNotes/FreeLists.html">Memory Management and Free Lists</a>&nbsp;&nbsp;
+-->
+
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><address>
+<table width=100% border=0>
+<tr><td align=left valign=top> 
+
+<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem -->
+
+Last modified:  25 September 2003
+
+</td>
+<td align=right valign=top>
+<a href="Copyright.html">Copyright</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Tools.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tools.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tools.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2711 @@
+<html>
+<head><title>
+HDF5/Tools API Specification
+</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem --></head>
+
+<body bgcolor="#FFFFFF">
+<!-- HEADER RIGHT " " -->
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><center>
+<h1>HDF5 Tools</h1>
+</center>
+
+
+
+
+<h2>HDF5 Tool Interfaces</h2>
+<p>
+
+HDF5-related tools are available to assist the user in a variety of 
+activities, including 
+   examining or managing HDF5 files, 
+   converting raw data between HDF5 and other special-purpose formats,
+   moving data and files between the HDF4 and  HDF5 formats, 
+   measuring HDF5 library performance, and
+   managing HDF5 library and application compilation, 
+      installation and configuration.
+Unless otherwise specified below, these tools are distributed and 
+installed with HDF5.
+
+<!--
+<table border=0>
+<tr><td valign=top>
+-->
+<ul>
+    <li>User utilities: 
+    <ul>
+        <li><a href="#Tools-Dump">h5dump</a> -- 
+            Enables a user to examine the contents of an HDF5 file 
+	    and dump those contents to an ASCII file 
+        <li><a href="#Tools-Ls">h5ls</a> -- 
+            Lists specified features of HDF5 file contents
+        <li><a href="#Tools-Diff">h5diff</a> -- 
+            Compares two HDF5 files and reports the differences.
+        <li><a href="#Tools-Repack">h5repack</a> -- Copies an HDF5 file to a new
+          file with or without compression/chunking.
+        <li><a href="#Tools-Perf">h5perf</a> -- 
+            Measures HDF5 performance
+        <li><a href="#Tools-Repart">h5repart</a> -- 
+            Repartitions a file, creating a family of files
+        <li><a href="#Tools-Jam">h5jam</a> -- 
+            Adds a user block to the front of an HDF5 file 
+        <li><a href="#Tools-Jam">h5unjam</a> -- 
+            Splits an existing user block from an HDF5 file,
+            placing it in a separate file
+    <br><br>
+    </ul>
+
+    <li>Configuration and  library management utilities: 
+    <ul>
+        <li><a href="#Tools-Redeploy">h5redeploy</a> -- 
+            Updates HDF5 compiler tools after an HDF5 software installation 
+            in a new location  
+         <li><a href="#Tools-H5CC">h5cc</a> and
+            <a href="#Tools-H5CC">h5pcc</a> --
+            Simplify the compilation of HDF5 programs written in C
+         <li><a href="#Tools-H5FC">h5fc</a> and
+            <a href="#Tools-H5FC">h5pfc</a> --
+            Simplify the compilation of HDF5 programs written in Fortran90
+        <li><a href="#Tools-H5C++">h5c++</a> --
+            Simplifies the compilation of HDF5 programs written in C++
+    <br><br>
+    </ul>
+ 
+    <li><a href="http://hdf.ncsa.uiuc.edu/hdf-java-html/" 
+        target="ToolsExt">Java-based tools for HDF5</a>
+        for viewing, manipulating, and generating HDF4 and HDF5 files:
+        <br>
+        <em>(Distributed separately; external link is 
+        <code>http://hdf.ncsa.uiuc.edu/hdf-java-html/</code>)</em>
+    <ul>
+	<li><code>HDFview</code> -- a browser that 
+	    works with both HDF4 and HDF5 files and 
+            can be used to transfer data between the two formats
+        <li>Java interfaces for both the HDF4 and HDF5 libraries
+        <li>Other HDF4- and HDF5-related products
+    <br><br>
+    </ul>
+
+    <li>Data conversion utilities: 
+    <ul>
+        <li><a href="#Tools-Import">h5import</a> -- 
+            Imports data into an existing or new HDF5 file
+        <li><a href="#Tools-GIF2H5">gif2h5</a> -- 
+            Converts a GIF file to an HDF5 file
+        <li><a href="#Tools-H52GIF">h52gif</a> -- 
+            Converts images in an HDF5 file to a GIF file
+    <br><br>
+    </ul>
+
+    <li><a href="http://hdf.ncsa.uiuc.edu/h4toh5/" target="ToolsExt">
+        HDF5/HDF4 conversion tools</a>:
+        <br>
+        <em>(Distributed separately; external link is 
+	<code>http://hdf.ncsa.uiuc.edu/h4toh5/</code>)</em>
+    <ul>
+        <li><a href="http://hdf.ncsa.uiuc.edu/h4toh5/" 
+	    target="ToolsExt">H4toH5 Conversion Library</a> -- 
+            Provides APIs for use in tools that perform customized 
+	    conversions of HDF4 files to HDF5 files
+        <li><a href="#Tools-H5toh4">h5toh4</a> -- 
+            Converts an HDF5 file to an HDF4 file
+        <li><a href="#Tools-H4toh5">h4toh5</a> -- 
+            Converts an HDF4 file to an HDF5 file
+    <br><br>
+    </ul>
+
+    <li><a href="http://hdf.ncsa.uiuc.edu/tools5.html" 
+        target="ToolsExt">Other tools</a>, 
+	including third-party and commercial utilities and applications
+        <br>
+        <em>(Distributed separately; external link is 
+	<code>http://hdf.ncsa.uiuc.edu/tools5.html</code>)</em>
+
+</ul>
+<!--
+</td></tr>
+</table>
+-->
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5dump" -->
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong> <a name="Tools-Dump">h5dump</a>
+<dt><strong>Syntax:</strong>
+    <dd><code>h5dump
+        [</code><em>OPTIONS</em><code>]</code> <em>file</em>
+<dt><strong>Purpose:</strong>
+    <dd>Displays HDF5 file contents.
+<dt><strong>Description:</strong>
+    <dd><code>h5dump</code> enables the user to examine 
+        the contents of an HDF5 file and dump those contents, in human
+        readable form, to an ASCII file.
+        <p>
+        <code>h5dump</code> dumps HDF5 file content to standard output.
+        It can display the contents of the entire HDF5 file or
+        selected objects, which can be groups, datasets, a subset of a 
+        dataset, links, attributes, or datatypes. 
+        </p>
+        <p>
+        The <code>--header</code> option displays object header
+        information only.
+        </p>
+        <p>
+        Names are the absolute names of the objects. <code>h5dump</code>
+        displays objects in the order same as the command order. If a
+        name does not start with a slash, <code>h5dump</code> begins
+        searching for the specified object starting at the root group.
+        </p>
+        <p>
+        If an object is hard linked with multiple names,
+        <code>h5dump</code> displays the content of the object in the
+        first occurrence. Only the link information is displayed in later
+        occurrences.
+        </p>
+        <p>
+        <code>h5dump</code> assigns a name for any unnamed datatype in
+        the form of
+        <code>#</code><em>oid1</em><code>:</code><em>oid2</em>, where
+        <em>oid1</em> and <em>oid2</em> are the object identifiers
+        assigned by the library. The unnamed types are displayed within
+        the root group.
+        </p>
+        <p>
+        Datatypes are displayed with standard type names. For example,
+        if a dataset is created with <code>H5T_NATIVE_INT</code> type
+        and the standard type name for integer on that machine is
+        <code>H5T_STD_I32BE</code>, <code>h5dump</code> displays
+        <code>H5T_STD_I32BE</code> as the type of the dataset.
+        </p>
+        <p>
+        <code>h5dump</code> can also dump a subset of a dataset.
+        This feature operates in much the same way as hyperslabs in HDF5;
+        the parameters specified on the command line are passed to the 
+        function <a href="RM_H5S.html#Dataspace-SelectHyperslab">
+        <code>H5Sselect_hyperslab</code></a> and the resulting selection 
+        is displayed.
+        </p>
+        <p>
+        The <code>h5dump</code> output is described in detail in the 
+        <a href="ddl.html"><cite>DDL for HDF5</cite></a>, the 
+        <cite>Data Description Language</cite> document. 
+        </p>
+        <p>
+        <em>Note</em>: It is not permissible to specify multiple
+        attributes, datasets, datatypes, groups, or soft links with one
+        flag. For example, one may not issue the command
+          <br>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+            <font size=-1>WRONG:</font> &nbsp;
+            <code>h5dump -a /attr1 /attr2 foo.h5</code>
+          </br>
+        to display both <code>/attr1</code> and <code>/attr2</code>.
+        One must issue the following command:
+          <br>
+            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+            <font size=-1>CORRECT:</font> &nbsp;
+            <code>h5dump -a /attr1 -a /attr2 foo.h5</code>
+          </br>
+        </p>
+        <p>
+        It's possible to select the file driver with which to open the
+        HDF5 file by using the --filedriver (-f) command-line option.
+        Acceptable values for the --filedriver option are: "sec2",
+        "family", "split", "multi", and "stream". If the file driver flag
+        isn't specified, then the file will be opened with each driver in
+        turn and in the order specified above until one driver succeeds
+        in opening the file.
+        </p>
+	<p>
+	One byte integer type data is displayed in decimal by default. When
+	displayed in ASCII, a non-printable code is displayed in 3 octal
+	digits preceeded by a back-slash unless there is a C language escape
+	sequence for it.  For example, CR and LF are printed as \r and \n.
+	Though the NUL code is represented as \0 in C, it is printed as
+	\000 to avoid ambiguity as illustrated in the following 1 byte
+	char data (since this is not a string, embedded NUL is possible).
+	<pre>
+	141 142 143 000 060 061 062 012
+	  a   b   c  \0   0   1   2  \n </pre>
+	h5dump prints them as "abc\000012\n".  But if h5dump prints NUL as \0,
+	the output is "abc\0012\n" which is ambiguous.
+        </p>
+
+<dt><strong>XML Output:</strong>
+    <dd>With the <code>--xml</code> option, <code>h5dump</code> generates
+        XML output.  This output contains a complete description of the file, 
+        marked up in XML.  The XML conforms to the HDF5 Document Type 
+        Definition (DTD) available at
+        <a href="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.dtd">
+        <code>http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.dtd</code></a>.
+        <p>
+        The XML output is suitable for use with other tools, including the 
+        <a href="http://hdf.ncsa.uiuc.edu/java-hdf5-html">HDF5 Java Tools</a>.
+
+<dt><strong>Options and Parameters:</strong>
+    <dl>
+        <dt><code>-h</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--help</code></dt>
+            <dd>Print a usage message and exit.</dd>
+        <dt><code>-n</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--contents</code></dt>
+            <dd>Print a list of the file contents and exit.</dd>
+        <dt><code>-B</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--bootblock</code></dt>
+            <dd>Print the contents of the boot block.</dd>
+        <dt><code>-H</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--header</code></dt>
+            <dd>Print the header only; no data is displayed.</dd>
+        <dt><code>-A</code> 
+            <dd>Print the header and value of attributes; 
+	        data of datasets is not displayed.</dd>
+        <dt><code>-i</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--object-ids</code></dt>
+            <dd>Print the object ids.</dd>
+        <dt><code>-r</code> &nbsp;&nbsp;or&nbsp;&nbsp;
+              <code>--string</code></dt>
+            <dd>Print 1-bytes integer datasets as ASCII.</dd>
+        <dt><code>-e</code></dt>
+            <dd>Escape non-printing characters.</dd>
+        <dt><code>-V</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--version</code></dt>
+            <dd>Print version number and exit.</dd>
+        <dt><code>-a <em>P</em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--attribute=<em>P</em></code></dt>
+            <dd>Print the specified attribute.</dd>
+        <dt><code>-d <em>P</em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--dataset=<em>P</em></code></dt>
+            <dd>Print the specified dataset.</dd>
+        <dt><code>-y</code></dt>
+            <dd>Do not print array indices with data.</dd>
+        <dt><code>-p</code> &nbsp;&nbsp;or&nbsp;&nbsp;
+              <code>--properties</code></dt>
+            <dd>Print dataset filters, storage layout, and fill value.</dd>
+        <dt><code>-f <em>D</em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--filedriver=<em>D</em></code></dt>
+            <dd>Specify which driver to open the file with.</dd>
+        <dt><code>-g <em>P</em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--group=<em>P</em></code></dt>
+            <dd>Print the specified group and all members.</dd>
+        <dt><code>-l <em>P</em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--soft-link=<em>P</em></code></dt>
+            <dd>Print the value(s) of the specified soft link.</dd>
+        <dt><code>-o <em>F</em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--output=<em>F</em></code></dt>
+            <dd>Output raw data into file F.</dd>
+        <dt><code>-t <em>T</em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--datatype=<em>T</em></code></dt>
+            <dd>Print the specified named datatype.</dd>
+        <dt><code>-w <em>N</em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--width=<em>N</em></code></dt>
+            <dd>Set the number of columns of output.</dd>
+        <dt><code>-x <em></em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--xml</code></dt>
+            <dd>Output XML using XML schema (default) instead of DDL.</dd>
+        <dt><code>-u <em></em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--use-dtd</code></dt>
+            <dd>Output XML using XML DTD instead of DDL.</dd>
+        <dt><code>-D <em>U</em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--xml-dtd=<em>U</em></code></dt>
+            <dd>In XML output, refer to the DTD or schema at <em>U</em> 
+                instead of the default schema/DTD.</dd>
+        <dt><code>-X <em>S</em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--xml-dns=<em>S</em></code></dt>
+            <dd>In XML output, (XML Schema) use qualified names in the XML:<br>
+	        &nbsp;&nbsp; &nbsp;&nbsp;
+		":": no namespace, default: "hdf5:"</dd>
+
+        <dt>The next four options enable subsetting, which is 
+            accomplished by selecting a hyperslab from a dataset.
+            These options mirror the techniques used by an HDF5 
+            application when performing hyperslab selection.
+            The <code>start</code> and <code>count</code> parameters
+            are mandatory if subsetting is to be performed; 
+            the <code>stride</code> and <code>block</code> parameters
+            are optional and will default to <code>1</code> (one).
+        <dt><code>-s <em>L</em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--start=<em>L</em></code></dt>
+            <dd>Offset of start of subsetting selection.  
+                <br>
+                Default: the beginning of the dataset.</dd>
+        <dt><code>-S <em>L</em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--stride=<em>L</em></code></dt>
+            <dd>Hyperslab stride.
+                <br>
+                Default: 1 in all dimensions.</dd>
+        <dt><code>-c <em>L</em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--count=<em>L</em></code></dt>
+            <dd>Number of blocks to include in the selection.</dd>
+        <dt><code>-k <em>L</em></code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--block=<em>L</em></code></dt>
+            <dd>Size of block in hyperslab.
+                <br>
+                Default: 1 in all dimensions.</dd>
+        <dt><code>--</code></dt>
+            <dd>Indicates that all following arguments are non-options.
+                E.g., to dump a file called `-f', use h5dump -- -f.</dd>
+        <dt><em>file</em></dt>
+            <dd>The file to be examined.</dd>
+    <br><br>
+        <dt>The option parameters listed above are defined as follows:
+            <dd><em>D</em> -- which file driver to use in opening the
+                file. Acceptable values are "sec2", "family", "split",
+                "multi", and "stream". Without the file driver flag the
+                file will be opened with each driver in turn and in the
+                order specified above until one driver succeeds in
+                opening the file.</dd>
+            <dd><em>P</em> -- The full path from the root group to 
+                the object</dd>
+            <dd><em>T</em> -- The name of the datatype</dd>
+            <dd><em>F</em> -- A filename</dd>
+            <dd><em>N</em> -- An integer greater than 1</dd>
+            <dd><em>L</em> -- A list of integers, the number of which is 
+                equal to the number of dimensions in the dataspace being 
+                queried</dd>
+            <dd><em>U</em> -- A URI (as defined in 
+                [<a href="http://www.ietf.org/rfc/rfc2396.txt">IETF RFC 2396</a>], 
+                updated by 
+                [<a href="http://www.ietf.org/rfc/rfc2732.txt">IETF RFC 2732</a>]) 
+                that refers to the DTD to be used to validate the XML</dd>
+    <br><br>
+        <dt>Subsetting parameters can also be expressed in a convenient
+            compact form, as follows:
+              <br>
+              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+              <code>--dataset="/foo/mydataset[START;STRIDE;COUNT;BLOCK]"</code>
+              <br>
+            All of the semicolons (<code>;</code>) are required, even when 
+            a parameter value is not specified.  
+            When not specified, default parameter values are used.
+    </dl>
+    <p>
+
+<dt><strong>Examples:</strong>
+    <ol>
+       <li>Dumping the group <code>/GroupFoo/GroupBar</code> in the file
+          <code>quux.h5</code>:
+          <blockquote>
+             <code>h5dump -g /GroupFoo/GroupBar quux.h5</code>
+          </blockquote>
+       <li>Dumping the dataset <code>Fnord</code> in the group
+          <code>/GroupFoo/GroupBar</code> in the file <code>quux.h5</code>:
+          <blockquote>
+             <code>h5dump -d /GroupFoo/GroupBar/Fnord quux.h5</code>
+          </blockquote>
+       <li>Dumping the attribute <code>metadata</code> of the dataset
+          <code>Fnord</code> which is in group
+          <code>/GroupFoo/GroupBar</code> in the file <code>quux.h5</code>:
+          <blockquote>
+             <code>h5dump -a /GroupFoo/GroupBar/Fnord/metadata quux.h5</code>
+          </blockquote>
+       <li>Dumping the attribute <code>metadata</code> which is an
+          attribute of the root group in the file <code>quux.h5</code>:
+          <blockquote>
+              <code>h5dump -a /metadata quux.h5</code>
+          </blockquote>
+       <li>Producing an XML listing of the file <code>bobo.h5</code>:
+          <blockquote>
+              <code>h5dump --xml bobo.h5 > bobo.h5.xml</code>
+          </blockquote>
+       <li>Dumping a subset of the dataset <code>/GroupFoo/databar/</code> 
+           in the file <code>quux.h5</code>
+          <blockquote>
+              <code>h5dump -d /GroupFoo/databar --start="1,1" --stride="2,3" 
+                           <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+                           --count="3,19" --block="1,1" quux.h5</code>
+          </blockquote>
+       <li>The same example using the short form to specify the 
+           subsetting parameters:
+          <blockquote>
+              <code>h5dump -d "/GroupFoo/databar[1,1;2,3;3,19;1,1]" quux.h5</code>
+          </blockquote>
+    </ol>
+<dt><strong>Current Status:</strong>
+    <dd>The current version of <code>h5dump</code> displays the
+        following information:
+        <ul>
+          <li>Group
+            <ul>
+               <li>group attribute (see Attribute)
+               <li>group member
+            </ul>
+          <li>Dataset
+            <ul>
+               <li>dataset attribute (see Attribute)
+               <li>dataset type (see Datatype)
+               <li>dataset space (see Dataspace)
+               <li>dataset data
+            </ul>
+          <li>Attribute
+            <ul>
+               <li>attribute type (see Datatype)
+               <li>attribute space (see Dataspace)
+               <li>attribute data
+            </ul>
+          <li>Datatype
+            <ul>
+               <li>integer type
+                   <br>
+                   - H5T_STD_I8BE, H5T_STD_I8LE, H5T_STD_I16BE, ...
+               <li>floating point type
+                   <br>
+                   - H5T_IEEE_F32BE, H5T_IEEE_F32LE, H5T_IEEE_F64BE, ...
+               <li>string type
+               <li>compound type 
+                   <br>
+                   - named, unnamed and transient compound type
+                   <br>
+                   - integer, floating or string type member
+               <li>opaque types
+               <li>reference type
+                   <br>
+                   - object references 
+                   <br>
+                   - data regions
+               <li>enum type
+               <li>variable-length datatypes
+                   <br>
+                   - atomic types only
+                   <br>
+                   - scalar or single dimensional array of variable-length
+                         types supported
+            </ul>
+          <li>Dataspace 
+            <ul>
+               <li>scalar and simple space
+            </ul>
+          <li>Soft link
+          <li>Hard link
+          <li>Loop detection
+        </ul>
+     
+<dt><strong>See Also:</strong>
+    <ul>
+    <li>HDF5 Data Description Language syntax at
+        <a href="ddl.html"><cite>DDL for HDF5</cite></a>
+
+    <li>HDF5 XML Schema at
+        <a href="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd</a>
+
+    <li>HDF5 XML information at
+        <a href="http://hdf.ncsa.uiuc.edu/HDF5/XML">http://hdf.ncsa.uiuc.edu/HDF5/XML/</a>
+    </ul>
+
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5ls" -->
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong> <a name="Tools-Ls">h5ls</a>
+<dt><strong>Syntax:</strong>
+    <dd><code>h5ls
+        [</code><em>OPTIONS</em><code>]</code><em>
+        file</em><code> 
+        [</code><em>OBJECTS...</em><code>]</code>
+<dt><strong>Purpose:</strong>
+    <dd>Prints information about a file or dataset.
+<dt><strong>Description:</strong>
+    <dd><code>h5ls</code> prints selected information about file objects 
+        in the specified format.
+<dt><strong>Options and Parameters:</strong>
+    <dl>
+        <dt><code>-h</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>-?</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--help</code>
+            <dd>Print a usage message and exit.
+        <dt><code>-a</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--address</code>
+            <dd>Print addresses for raw data.
+        <dt><code>-d</code> &nbsp;&nbsp;or&nbsp;&nbsp; <code>--data</code>
+            <dd>Print the values of datasets.
+        <dt><code>-e</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--errors</code>
+            <dd>Show all HDF5 error reporting.
+        <dt><code>-f</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--full</code>
+            <dd>Print full path names instead of base names.
+        <dt><code>-g</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--group</code>
+            <dd>Show information about a group, not its contents.
+        <dt><code>-l</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--label</code>
+            <dd>Label members of compound datasets.
+        <dt><code>-r</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--recursive</code>
+            <dd>List all groups recursively, avoiding cycles.
+        <dt><code>-s</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--string</code>
+            <dd>Print 1-bytes integer datasets as ASCII.
+        <dt><code>-S</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--simple</code>
+            <dd>Use a machine-readable output format.
+        <dt><code>-w</code><em>N</em> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--width=</code><em>N</em>
+            <dd>Set the number of columns of output.
+        <dt><code>-v</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--verbose</code>
+            <dd>Generate more verbose output.
+        <dt><code>-V</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--version</code>
+            <dd>Print version number and exit.
+        <dt><code>-x</code> &nbsp;&nbsp;or&nbsp;&nbsp; 
+              <code>--hexdump</code>
+            <dd>Show raw data in hexadecimal format.
+        <dt><em>file</em>
+            <dd>The file name may include a printf(3C) integer format 
+                such as <code>%%05d</code> to open a file family.
+        <dt><em>objects</em>
+            <dd>Each object consists of an HDF5 file name optionally
+                followed by a slash and an object name within the file
+                (if no object is specified within the file then the
+                contents of the root group are displayed). The file name
+                may include a <code>printf(3C)</code> integer format such
+                as "%05d" to open a file family.
+    </dl>
+<!--
+<dt><strong>Current Status:</strong>
+    <dd>
+<dt><strong>See Also:</strong>
+    <dd>
+-->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5diff" -->
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong> <a name="Tools-Diff">h5diff</a>  &nbsp;&nbsp;&nbsp;
+<dt><strong>Syntax:</strong>
+    <dd><code>h5diff </code> <em>file1</em> <em>file2</em> 
+                    [<em>OPTIONS</em>]
+		    [<em>object1</em> [<em>object2</em> ] ]       
+<dt><strong>Purpose:</strong>
+    <dd>Compares two HDF5 files and reports the differences.
+<dt><strong>Description:</strong>
+    <dd><code>h5diff</code> is a command line tool that compares 
+        two HDF5 files, <em>file1</em> and <em>file2</em>, and 
+	reports the differences between them. 
+	<p>
+	Optionally, <code>h5diff</code> will compare two objects 
+	within these files.
+	If only one object, <em>object1</em>, is specified, 
+	<code>h5diff</code> will compare 
+	<em>object1</em> in <em>file1</em>
+	with <em>object1</em> in <em>file2</em>.
+	In two objects, <em>object1</em> and <em>object2</em>, 
+	are specified, <code>h5diff</code> will compare 
+	<em>object1</em> in <em>file1</em>
+	with <em>object2</em> in <em>file2</em>.
+	These objects must be HDF5 datasets.
+    <dd>
+	<p>
+	<em>object1</em> and <em>object2</em> must be expressed
+	as absolute paths from the respective file's root group.
+    <dd>
+	<p>
+ <code>h5diff</code>  has the following four modes of output:<br>
+    Normal mode: print the number of differences found and where they occurred<br>
+    Report mode (-r): print the above plus the differences<br>
+    Verbose mode (-v): print the above plus a list of objects and warnings<br>
+    Quiet mode (-q): do not print output (h5diff always returns an exit code of
+    1 when differences are found).
+    <dd>
+	<p>
+	Additional information, with several sample cases, 
+	can be found in the document 
+	<a href="http://hdf.ncsa.uiuc.edu/HDF5/h5diff/h5diff_design.html">
+	<cite>H5diff Examples</cite></a>.
+<dt><strong>Options and Parameters:</strong>
+    <dl>
+        <dt><em>file1</em>
+        <dt><em>file2</em>
+            <dd>The HDF5 files to be compared.
+        <dt><code>-h</code>
+            <dd>help message.
+        <dt><code>-r</code>
+            <dd>Report mode. Print the differences.<dt><code>-v</code>
+            <dd>Verbose mode. Print the differences, list of objects, warnings.<dt><code>-q</code>
+            <dd>Quiet mode. Do not print output.
+        <dt><code>-n</code> <em>count</em>
+            <dd>Print difference up to <em>count</em> differences, 
+	        then stop.
+                <em>count</em> must be a positive integer.
+        <dt><code>-d</code> <em>delta</em>
+            <dd>Print only differences that are greater than the 
+	        limit <em>delta</em>.
+                <em>delta</em> must be a positive number.
+                The comparison criterion is whether the 
+		absolute value of the difference of 
+		two corresponding values is greater than 
+		<em>delta</em> 
+		<br>(e.g., <code> |a&ndash;b|&nbsp;&gt;&nbsp;<em>delta</em></code>,
+		where <code>a</code> is a value in <em>file1</em> and
+		<code>b</code> is a value in <em>file2</em>).
+        <dt><code>-p</code> <em>relative</em>
+            <dd>Print only differences that are greater than a 
+	        relative error.
+                <em>relative</em> must be a positive number.
+                The comparison criterion is whether the 
+                absolute value of the difference <code>1</code>
+		and the ratio of two corresponding values
+		is greater than <em>relative</em>
+		(e.g., <code>|1&ndash;(b/a)|&nbsp;&gt;&nbsp;<em>relative</em></code>
+		where <code>a</code> is a value in <em>file1</em> and
+		<code>b</code> is a value in <em>file2</em>).
+        <dt><em>object1</em>
+        <dt><em>object2</em>
+            <dd>Specific object(s) within the files to be compared.
+    </dl>
+<!-- NEW PAGE -->
+<dt><strong>Examples:</strong>
+    <dd>The following <code>h5diff</code> call compares
+        the object <code>/a/b</code> in <code>file1</code> 
+        with the object <code>/a/c</code> in <code>file2</code>:<br>
+        <code>&nbsp;&nbsp;&nbsp;&nbsp;h5diff file1 file2 /a/b /a/c</code>
+    <dd>This <code>h5diff</code> call compares
+        the object <code>/a/b</code> in <code>file1</code> 
+        with the same object in <code>file2</code>:<br>
+        <code>&nbsp;&nbsp;&nbsp;&nbsp;h5diff file1 file2 /a/b</code>
+    <dd>And this <code>h5diff</code> call compares
+        all objects in both files:<br>
+        <code>&nbsp;&nbsp;&nbsp;&nbsp;h5diff file1 file2</code>
+      &nbsp;<br>
+      file1 and file2 can be the same file. Use:<br>
+        <code>&nbsp;&nbsp;&nbsp;&nbsp;h5diff </code><code> file1 file1 /g1/dset1 /g1/dset2</code>&nbsp;<br>
+      to compare <code>/g1/dset1</code>&nbsp; and <code>/g1/dset2</code> in the same file<!--
+<dt><strong>Current Status:</strong>
+    <dd>
+<dt><strong>See Also:</strong>
+    <dd>
+-->
+<dt><strong>History:</strong>
+    	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Command Line Tool</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Tool introduced in this release.</td></tr>
+    </table></ul>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5repack" -->
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong>  <a name="Tools-Repack">h5repack</a>  &nbsp;&nbsp;&nbsp;
+<dt><strong>Syntax:</strong>
+    <dd><code>h5repack </code> -i <em>file1</em>-o <em>file2</em> [-h] [-v] [-f
+      '<i>filter</i>'] [-l '<i>layout</i>'][-m number][-e file]       
+<dt><strong>Purpose:</strong>
+    <dd>Copies an HDF5 file to a new file with or without compression/chunking.
+<dt><strong>Description:</strong>
+    <dd><code>h5repack</code> is a command line tool that applies HDF5 filters
+      to a input file <em>file1</em>, saving the output in a new file, <em>file2</em>.<p>'<i>filter</i>'
+      is a string with the format&nbsp;<br>
+      &lt;list of objects&gt; : &lt;name of filter&gt; = &lt;filter
+      parameters&gt;.<br>
+      <br>
+      &nbsp;&lt;list of objects&gt; is a comma separated list of object names
+      meaning apply compression only to those objects. If no object names are
+      specified, the filter is applied to all objects<br>
+      &nbsp;&lt;name of filter&gt; can be:&nbsp;<br>
+      GZIP, to apply the HDF5 GZIP filter (GZIP compression)<br>
+      SZIP, to apply the HDF5 SZIP filter (SZIP compression)<br>
+      SHUF, to apply the HDF5 shuffle filter<br>
+      FLET, to apply the HDF5 checksum filter<br>
+      NONE, to remove the filter&nbsp;<br>
+      &lt;filter parameters&gt; is optional compression info&nbsp;<br>
+      SHUF (no parameter)&nbsp;<br>
+      FLET (no parameter)&nbsp;<br>
+      GZIP=&lt;deflation level&gt; from 1-9&nbsp;<br>
+      SZIP=&lt;pixels per block,coding&gt; (pixels per block is a even number in
+      2-32 and coding method is 'EC' or 'NN')
+<dt>&nbsp;</dt>
+<dd>'<i>layout'</i> is a string with the format<br>
+  &nbsp;&lt;list of objects&gt; : &lt;layout type&gt;&nbsp;<br>
+  <br>
+  &lt;list of objects&gt; is a comma separated list of object names, meaning
+  that layout information is supplied for those objects. If no object names are
+  specified, the layout is applied to all objects&nbsp;<br>
+  &lt;layout type&gt; can be:&nbsp;<br>
+  CHUNK, to apply chunking layout&nbsp;<br>
+  COMPA, to apply compact layout&nbsp;<br>
+  CONTI, to apply continuous layout&nbsp;<br>
+  &lt;layout parameters&gt; is present for the chunk case only it is the chunk
+  size of each dimension: &lt;dim_1 x dim_2 x ... dim_n&gt;</dd>
+<dt>&nbsp;</dt>
+<dt><strong>Options and Parameters:</strong>
+    <dl>
+        <dt><em>file1</em>
+        <dt><em>file2</em>
+            <dd>The input and output HDF5 files
+        <dt><code>-h</code>
+            <dd>help message.<dt><code>-f</code> <em>filter</em>
+            <dd>Filter type<dt><code>-l</code> <em>layout</em>
+            <dd>Layout type<dt><code>-v</code>
+            <dd>Verbose mode. Print output (list of objects in the file, filters
+              and layout applied).<dt><code>-e</code> <em>file</em>
+            <dd>File with the -f and -l options (only filter and layout flags)
+        <dt><code>-d</code> <em>delta</em>
+            <dd>Print only differences that are greater than the 
+	        limit <em>delta</em>.
+                <em>delta</em> must be a positive number.
+                The comparison criterion is whether the 
+		absolute value of the difference of 
+		two corresponding values is greater than 
+		<em>delta</em> 
+		<br>(e.g., <code> |a&ndash;b|&nbsp;&gt;&nbsp;<em>delta</em></code>,
+		where <code>a</code> is a value in <em>file1</em> and
+		<code>b</code> is a value in <em>file2</em>).<dt><code>-m</code> <em>number</em>
+            <dd>Do not apply the filter to objects which size in bytes is
+              smaller than number. If no size is specified a minimum of 1024
+              bytes is assumed.
+    </dl>
+<dt><strong>Examples:</strong>
+    <dd>1) h5repack -i file1 -o file2 -f GZIP=1 -v<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Applies GZIP compression to all
+      objects in file1 and saves the output in file2
+      <p>2) h5repack -i file1 -o file2 -f dset1:SZIP=8,NN -v<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Applies SZIP compression only
+      to object 'dset1'</p>
+      <p>3) h5repack -i file1 -o file2 -l dset1,dset2:CHUNK=20x10 -v<br>
+      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Applies chunked layout to
+      objects 'dset1' and 'dset2'<br>
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5repart" -->
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong> <a name="Tools-Repart">h5repart</a>
+<dt><strong>Syntax:</strong>
+    <dd><code>h5repart
+        [-v] 
+        [-V] 
+        [-[b|m]</code><em>N</em><code>[g|m|k]]</code>
+        <em>source_file
+        dest_file</em>
+<dt><strong>Purpose:</strong>
+    <dd>Repartitions a file or family of files.
+<dt><strong>Description:</strong>
+    <dd><code>h5repart</code> splits a single file into a family of 
+        files, joins a family of files into a single file, or copies 
+        one family of files to another while changing the size of the 
+        family members.  <code>h5repart</code> can also be used to 
+        copy a single file to a single file with holes.
+        <p>
+        Sizes associated with the <code>-b</code> and <code>-m</code> 
+        options may be suffixed with <code>g</code> for gigabytes, 
+        <code>m</code> for megabytes, or <code>k</code> for kilobytes.
+        <p>
+        File family names include an integer <code>printf</code> 
+        format such as <code>%d</code>.
+
+<dt><strong>Options and Parameters:</strong>
+    <dl>
+        <dt><code>-v</code>
+            <dd>Produce verbose output.
+        <dt><code>-V</code>
+            <dd>Print a version number and exit.
+        <dt><code>-b</code><em>N</em>
+            <dd>The I/O block size, defaults to 1kB
+        <dt><code>-m</code><em>N</em>
+            <dd>The destination member size or 1GB
+        <dt><em>source_file</em>
+            <dd>The name of the source file
+        <dt><em>dest_file</em>
+            <dd>The name of the destination files
+    </dl>
+<!--
+<dt><strong>Current Status:</strong>
+    <dd>
+<dt><strong>See Also:</strong>
+    <dd>
+-->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5import" -->
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong> <a name="Tools-Import">h5import</a>
+<dt><strong>Syntax:</strong>
+    <dd><code>h5import
+        <em>infile</em> <em>in_options</em>
+        [<em>infile</em> <em>in_options</em> <b>...</b>]
+        -o <em>outfile</em>
+        </code>
+    <dd><code>h5import
+        <em>infile</em> <em>in_options</em>
+        [<em>infile</em> <em>in_options</em> <b>...</b>]
+        -outfile <em>outfile</em>
+        </code>
+    <dd><code>h5import -h</code>
+    <dd><code>h5import -help</code>
+<dt><strong>Purpose:</strong>
+    <dd>Imports data into an existing or new HDF5 file.
+<dt><strong>Description:</strong>
+    <dd><code>h5import</code> converts data 
+        from one or more ASCII or binary files, <code><i>infile</i></code>,
+        into the same number of HDF5 datasets 
+        in the existing or new HDF5 file, <code><i>outfile</i></code>.
+        Data conversion is performed in accordance with the
+        user-specified type and storage properties 
+        specified in <code><em>in_options</em></code>.
+        <p>
+        The primary objective of <code>h5import</code> is to 
+        import floating point or integer data. 
+        The utility's design allows for future versions that 
+        accept ASCII text files and store the contents as a 
+        compact array of one-dimensional strings, 
+        but that capability is not implemented in HDF5 Release 1.6.
+
+        <p>
+        <b>Input data and options:</b><br>
+        Input data can be provided in one of the following forms:
+        <ul><li>As an ASCII, or plain-text, file containing either 
+                floating point or integer data
+            <li>As a binary file containing either 32-bit or 
+                64-bit native floating point data
+            <li>As a binary file containing native integer data,
+                signed or unsigned and 
+                8-bit, 16-bit, 32-bit, or 64-bit. 
+            <li>As an ASCII, or plain-text, file containing text data.
+                (This feature is not implemented in HDF5 Release 1.6.)
+        </ul>
+        Each input file, <code><i>infile</i></code>, 
+        contains a single <em>n</em>-dimensional
+        array of values of one of the above types expressed 
+        in the order of fastest-changing dimensions first.
+        <p>
+        Floating point data in an ASCII input file must be
+        expressed in the fixed floating form (e.g., 323.56)
+        <code>h5import</code> is designed to accept scientific notation 
+        (e.g., 3.23E+02) in an ASCII, but that is not implemented in HDF5 release 1.6.  
+        <p>
+        Each input file can be associated with options specifying
+        the datatype and storage properties. 
+        These options can be specified either as 
+        <em>command line arguments</em> 
+        or in a <em>configuration file</em>.
+        Note that exactly one of these approaches must be used with a  
+        single input file.
+        <p>
+        Command line arguments, best used with simple input files, 
+        can be used to specify 
+        the class, size, dimensions of the input data and 
+        a path identifying the output dataset. 
+        <p>
+        The recommended means of specifying input data options
+        is in a configuration file; this is also the only means of 
+        specifying advanced storage features.
+        See further discussion in "The configuration file" below.
+        <p>
+        The only required option for input data is dimension sizes;
+        defaults are available for all others.
+        <p>
+        <code>h5import</code> will accept up to 30 input files in a single call.
+        Other considerations, such as the maximum length of a command line, 
+        may impose a more stringent limitation.
+
+        <p>
+        <b>Output data and options:</b><br>
+        The name of the output file is specified following 
+        the <code>-o</code> or <code>-output</code> option
+        in <code><i>outfile</i></code>.
+        The data from each input file is stored as a separate dataset
+        in this output file.
+        <code><i>outfile</i></code> may be an existing file.
+        If it does not yet exist, <code>h5import</code> will create it.
+        <p>
+        Output dataset information and storage properties can be 
+        specified only by means of a configuration file.
+        <table width=100% border=0>
+           <tr valign=top align=left><td width=30>&nbsp;</td><td>
+              Dataset path
+              </td><td>If the groups in the path leading to the dataset 
+                   do not exist, <code>h5import</code> will create them.<br> 
+                   If no group is specified, the dataset will be created
+                   as a member of the root group.<br> 
+                   If no dataset name is specified, the default name is 
+                   <code>dataset1</code> for the first input dataset,
+                   <code>dataset2</code> for the second input dataset,
+                   <code>dataset3</code> for the third input dataset,
+                   etc.<br>
+                   <code>h5import</code> does not overwrite a pre-existing 
+                   dataset of the specified or default name. 
+                   When an existing dataset of a conflicting name is 
+                   encountered, <code>h5import</code> quits with an error;
+                   the current input file and any subsequent input files
+                   are not processed.
+          </td></tr>
+          <tr valign=top align=left><td width=30>&nbsp;</td><td>
+              Output type
+              </td><td>Datatype parameters for output data
+          </td></tr>
+          <tr valign=top align=left><td width=30>&nbsp;</td><td>
+              &nbsp;&nbsp;&nbsp;&nbsp;Output data class
+              </td><td>Signed or unsigned integer or floating point
+          </td></tr>
+          <tr valign=top align=left><td width=30>&nbsp;</td><td>
+              &nbsp;&nbsp;&nbsp;&nbsp;Output data size
+              </td><td>8-, 16-, 32-, or 64-bit integer<br>
+                       32- or 64-bit floating point
+          </td></tr>
+          <tr valign=top align=left><td width=30>&nbsp;</td><td>
+              &nbsp;&nbsp;&nbsp;&nbsp;Output architecture
+              </td><td><code>IEEE</code><br>
+                       <code>STD</code><br>
+                       <code>NATIVE</code> (Default)<br>
+                   Other architectures are included in the <code>h5import</code> design 
+                   but are not implemented in this release.
+          </td></tr>
+          <tr valign=top align=left><td width=30>&nbsp;</td><td>
+              &nbsp;&nbsp;&nbsp;&nbsp;Output byte order
+              </td><td>Little- or big-endian.<br>
+                   Relevant only if output architecture 
+                   is <code>IEEE</code>, <code>UNIX</code>, or <code>STD</code>; 
+                   fixed for other architectures.
+          </td></tr>
+          <tr valign=top align=left><td width=30>&nbsp;</td><td>
+              Dataset&nbsp;layout&nbsp;and&nbsp;storage&nbsp;&nbsp;<br>
+              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;properties
+              </td><td>Denote how raw data is to be organized on the disk. 
+                   If none of the following are specified, 
+                   the default configuration is contiguous layout and with no compression.
+          </td></tr>
+          <tr valign=top align=left><td width=30>&nbsp;</td><td>
+              &nbsp;&nbsp;&nbsp;&nbsp;Layout
+              </td><td>Contiguous (Default)<br>
+                   Chunked
+          </td></tr>
+          <tr valign=top align=left><td width=30>&nbsp;</td><td>
+              &nbsp;&nbsp;&nbsp;&nbsp;External storage
+              </td><td>Allows raw data to be stored in a non-HDF5 file or in an 
+                   external HDF5 file.<br>
+                   Requires contiguous layout.
+          </td></tr>
+          <tr valign=top align=left><td width=30>&nbsp;</td><td>
+              &nbsp;&nbsp;&nbsp;&nbsp;Compressed
+              </td><td>Sets the type of compression and the 
+                   level to which the dataset must be compressed.<br>
+                   Requires chunked layout.
+          </td></tr>
+          <tr valign=top align=left><td width=30>&nbsp;</td><td>
+              &nbsp;&nbsp;&nbsp;&nbsp;Extendable
+              </td><td>Allows the dimensions of the dataset increase over time 
+                   and/or to be unlimited.<br>
+                   Requires chunked layout.
+          </td></tr>
+          <tr valign=top align=left><td width=30>&nbsp;</td><td>
+              &nbsp;&nbsp;&nbsp;&nbsp;Compressed and<br>
+              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extendable
+              </td><td>Requires chunked layout.
+          </td></tr>
+          <tr valign=top align=left><td width=30>&nbsp;</td><td>
+              
+              </td><td>&nbsp;
+          </td></tr>
+        </table>
+        <p>
+
+        <p>
+        <b>Command-line arguments:</b><br>
+        The <code>h5import</code> syntax for the command-line arguments, 
+        <code><em>in_options</em></code>, is as follows:
+        <table width=100% border=0>
+          <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+          <code>h5import <em>infile</em> -d <em>dim_list</em> 
+                         [-p <em>pathname</em>] 
+                         [-t <em>input_class</em>] 
+                         [-s <em>input_size</em>] 
+                         [<em>infile</em> ...] 
+                         -o <em>outfile</em></code><br>
+          or<br>
+          <code>h5import <em>infile</em> -dims <em>dim_list</em> 
+                         [-path <em>pathname</em>] 
+                         [-type <em>input_class</em>] 
+                         [-size <em>input_size</em>] 
+                         [<em>infile</em> ...] 
+                         -outfile <em>outfile</em></code><br>
+          or<br>
+          <code>h5import <em>infile</em> -c <em>config_file</em> 
+                         [<em>infile</em> ...] 
+                         -outfile <em>outfile</em></code>
+          </td></tr>
+        </table>
+        Note the following:
+        If the <code>-c <em>config_file</em></code> option is used with 
+        an input file, no other argument can be used with that input file.
+        If the <code>-c <em>config_file</em></code> option is not used with 
+        an input data file, the <code>-d <em>dim_list</em></code> argument
+        (or <code>-dims <em>dim_list</em></code>) 
+        must be used and any combination of the remaining options may be used.
+        Any arguments used must appear in <em>exactly</em> the order used 
+        in the syntax declarations immediately above.
+
+        <p>
+        <b>The configuration file:</b><br>
+        A configuration file is specified with the 
+        <code>-c <em>config_file</em></code> option:
+        <table border=0>
+          <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+          <code>h5import <em>infile</em> -c <em>config_file</em> 
+                         [<em>infile</em> -c <em>config_file2</em> ...] 
+                         -outfile <em>outfile</em></code>
+          </td></tr>
+        </table>
+        <p>
+        The configuration file is an ASCII file and must be 
+        organized as "Configuration_Keyword Value" pairs, 
+        with one pair on each line.
+        For example, the line indicating that 
+        the input data class (configuration keyword <code>INPUT-CLASS</code>) 
+        is floating point in a text file (value <code>TEXTFP</code>)
+        would appear as follows:<br>
+        <code>&nbsp;&nbsp;&nbsp;&nbsp;INPUT-CLASS&nbsp;TEXTFP</code>
+        <p>
+        A configuration file may have the following keywords each 
+        followed by one of the following defined values.
+        One entry for each of the first two keywords, 
+        <code>RANK</code> and <code>DIMENSION-SIZES</code>,
+        is required; all other keywords are optional.
+        
+        <p>
+        <table width=100% border=0>
+          <tr align=left><th valign=top align=left>
+          <hr>Keyword&nbsp;&nbsp;<br><code>&nbsp;&nbsp;&nbsp;&nbsp;</code>Value
+            </th><th valign=top align=left><hr>Description
+            </th></tr>
+
+          <tr valign=top align=left><td>
+          <hr><code>RANK&nbsp;&nbsp;</code>
+            </td><td><hr>The number of dimensions in the dataset.  (Required)
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;<em>rank</em></code>
+            </td><td>An integer specifying the number of dimensions in the dataset.<br>
+                 Example: <code> &nbsp; 4 &nbsp; </code> for a 4-dimensional dataset.
+            </td></tr>
+
+          <tr valign=top align=left><td>
+          <hr><code>DIMENSION-SIZES</code>
+            </td><td><hr>Sizes of the dataset dimensions.  (Required)
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;<em>dim_sizes</em></code>
+            </td><td>A string of space-separated integers
+                 specifying the sizes of the dimensions in the dataset.  
+                 The number of sizes in this entry must match the value in 
+                 the <code>RANK</code> entry.
+		 The fastest-changing dimension must be listed first.<br>
+                 Example: <code> &nbsp; 4 3 4 38 &nbsp; </code> for a 38x4x3x4 dataset.
+            </td></tr> 
+
+<!-- NEW PAGE -->
+          <tr valign=top align=left><td>
+          <hr><code>PATH</code>
+            </td><td><hr>Path of the output dataset.
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;<em>path</em></code>
+            </td><td>The full HDF5 pathname identifying the output dataset 
+                 relative to the root group within the output file.<br>
+                 I.e., <code><em>path</em></code> is a string consisting of 
+                 optional group names, each followed by a slash,
+                 and ending with a dataset name. 
+                 If the groups in the path do no exist, they will be 
+                 created.<br>
+                 If <code>PATH</code> is not specified, the output dataset 
+                 is stored as a member of the root group and the 
+                 default dataset name is 
+                 <code>dataset1</code> for the first input dataset,
+                 <code>dataset2</code> for the second input dataset,
+                 <code>dataset3</code> for the third input dataset, etc.<br>
+                 Note that <code>h5import</code> does not overwrite a 
+                 pre-existing dataset of the specified or default name. 
+                 When an existing dataset of a conflicting name is 
+                 encountered, <code>h5import</code> quits with an error;
+                 the current input file and any subsequent input files
+                 are not processed.<br>
+                 Example: The configuration file entry
+                 <table border=0>
+                   <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+                   <code>PATH grp1/grp2/dataset1</code>
+                   </td></tr>
+                 </table>
+                 indicates that the output dataset <code>dataset1</code> will 
+                 be written in the group <code>grp2/</code> which is in 
+                 the group <code>grp1/</code>, 
+                 a member of the root group in the output file.
+            </td></tr> 
+
+          <tr valign=top align=left><td>
+          <hr><code>INPUT-CLASS&nbsp;&nbsp;</code>
+            </td><td><hr>A string denoting the type of input data.  
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;TEXTIN</code>
+            </td><td>Input is signed integer data in an ASCII file.
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;TEXTUIN</code>
+            </td><td>Input is unsigned integer data in an ASCII file.
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;TEXTFP</code>
+            </td><td>Input is floating point data in fixed notation (e.g., 325.34) 
+                 in an ASCII file.
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;TEXTFPE</code>
+            </td><td>Input is floating point data in scientific notation (e.g., 3.2534E+02)  
+                 in an ASCII file.<br>
+                 (Not implemented in this release.)
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;IN</code>
+            </td><td>Input is signed integer data in a binary file.
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;UIN</code>
+            </td><td>Input is unsigned integer data in a binary file.
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;FP</code>
+            </td><td>Input is floating point data in a binary file. (Default)
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;STR</code>
+            </td><td>Input is character data in an ASCII file.
+                 With this value, the configuration keywords
+                 <code>RANK</code>, <code>DIMENSION-SIZES</code>, 
+                 <code>OUTPUT-CLASS</code>, <code>OUTPUT-SIZE</code>, 
+                 <code>OUTPUT-ARCHITECTURE</code>, and <code>OUTPUT-BYTE-ORDER</code> 
+                 will be ignored.<br>
+                 (Not implemented in this release.)
+          </td></tr>
+          
+          <tr  valign=top align=left><td>
+          <hr><code>INPUT-SIZE</code>
+            </td><td><hr>An integer denoting the size of the input data, in bits.
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;8</code><br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;16</code><br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;32</code><br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;64</code>
+            </td><td>For signed and unsigned integer data:
+                  <code>TEXTIN</code>, <code>TEXTUIN</code>, 
+                  <code>IN</code>, or <code>UIN</code>.
+                  (Default: <code> 32</code>)
+          </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;32</code><br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;64</code>
+            </td><td>For floating point data:
+                  <code>TEXTFP</code>, <code>TEXTFPE</code>, 
+                  or <code>FP</code>.
+                  (Default: <code> 32</code>)
+          </td></tr>
+
+<!-- NEW PAGE -->
+          <tr valign=top align=left><td>
+          <hr><code>OUTPUT-CLASS&nbsp;&nbsp;</code>
+            </td><td><hr>A string denoting the type of output data.  
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;IN</code>
+            </td><td>Output is signed integer data.<br>
+                 (Default if <code>INPUT-CLASS</code> is 
+                 <code>IN</code> or <code>TEXTIN</code>)
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;UIN</code>
+            </td><td>Output is unsigned integer data.<br>
+                 (Default if <code>INPUT-CLASS</code> is 
+                 <code>UIN</code> or <code>TEXTUIN</code>)
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;FP</code>
+            </td><td>Output is floating point data.<br>
+                 (Default if <code>INPUT-CLASS</code> is not specified or is 
+                 <code>FP</code>, <code>TEXTFP</code>, or <code>TEXTFPE</code>)
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;STR</code>
+            </td><td>Output is character data, 
+                 to be written as a 1-dimensional array of strings.<br>
+                 (Default if <code>INPUT-CLASS</code> is <code>STR</code>)<br>
+                 (Not implemented in this release.)
+          </td></tr>
+          
+          <tr  valign=top align=left><td>
+          <hr><code>OUTPUT-SIZE</code>
+            </td><td><hr>An integer denoting the size of the output data, in bits.
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;8</code><br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;16</code><br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;32</code><br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;64</code>
+            </td><td>For signed and unsigned integer data: 
+                  <code>IN</code> or <code>UIN</code>.
+                  (Default: Same as <code>INPUT-SIZE</code>, else <code> 32</code>)
+          </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;32</code><br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;64</code>
+            </td><td>For floating point data:
+                  <code>FP</code>.
+                  (Default: Same as <code>INPUT-SIZE</code>, else <code> 32</code>)
+          </td></tr>
+
+          <tr valign=top align=left><td>
+          <hr><code>OUTPUT-ARCHITECTURE</code>
+            </td><td><hr>A string denoting the type of output architecture. 
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;NATIVE</code><br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;STD</code><br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;IEEE</code><br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;INTEL</code> *<br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;CRAY</code> *<br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;MIPS</code> *<br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;ALPHA</code> *<br>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;UNIX</code> *
+            </td><td>See the "Predefined Atomic Types" section 
+                 in the "HDF5 Datatypes" chapter 
+                 of the <cite>HDF5 User's Guide</cite> 
+                 for a discussion of these architectures.<br>
+                 Values marked with an asterisk (*) are not implemented in this release.<br>
+                 (Default: <code>NATIVE</code>)
+            </td></tr> 
+          
+          <tr valign=top align=left><td>
+          <hr><code>OUTPUT-BYTE-ORDER</code>
+            </td><td><hr>A string denoting the output byte order.  
+                 This entry is ignored if the <code>OUTPUT-ARCHITECTURE</code> 
+                 is not specified or if it is not specified as <code>IEEE</code>, 
+                 <code>UNIX</code>, or <code>STD</code>.
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;BE</code>
+            </td><td>Big-endian.  (Default)
+            </td></tr> 
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;LE</code>
+            </td><td>Little-endian.
+            </td></tr> 
+
+<!-- NEW PAGE -->
+          <tr valign=top align=left><td colspan="2">
+                <hr>The following options are disabled by default, making
+                the default storage properties no chunking, no compression,
+                no external storage, and no extensible dimensions.
+            </td></tr> 
+
+          <tr valign=top align=left><td>
+          <hr><code>CHUNKED-DIMENSION-SIZES</code><br>
+            </td><td><hr>Dimension sizes of the chunk for chunked output data.  
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;<em>chunk_dims</em></code>
+            </td><td>A string of space-separated integers specifying the 
+                     dimension sizes of the chunk for chunked output data.
+                     The number of dimensions must correspond to the value
+                     of <code>RANK</code>.<br>
+                     The presence of this field indicates that the 
+                     output dataset is to be stored in chunked layout; 
+                     if this configuration field is absent, 
+                     the dataset will be stored in contiguous layout.
+            </td></tr> 
+
+          <tr valign=top align=left><td>
+          <hr><code>COMPRESSION-TYPE</code>
+            </td><td><hr>Type of compression to be used with chunked storage.  
+                 Requires that <code>CHUNKED-DIMENSION-SIZES</code> 
+                 be specified.
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;GZIP</code>
+            </td><td>Gzip compression.<br>
+                 Other compression algorithms are not implemented 
+                 in this release of <code>h5import</code>.
+            </td></tr> 
+
+          <tr valign=top align=left><td>
+          <hr><code>COMPRESSION-PARAM</code>
+            </td><td><hr>Compression level.  
+                 Required if <code>COMPRESSION-TYPE</code> is specified.
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;1</code> through <code>9</code>
+            </td><td>Gzip compression levels: 
+                     <code>1</code> will result in the fastest compression
+                     while <code>9</code> will result in the 
+                     best compression ratio.<br>
+                     (Default: 6.  The default gzip compression level is 6; 
+                     not all compression methods will have a default level.)
+            </td></tr> 
+
+          <tr valign=top align=left><td>
+          <hr><code>EXTERNAL-STORAGE</code>
+            </td><td><hr>Name of an external file in which to create the output dataset.  
+                 Cannot be used with <code>CHUNKED-DIMENSIONS-SIZES</code>, 
+                 <code>COMPRESSION-TYPE</code>, OR <code>MAXIMUM-DIMENSIONS</code>.
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;<i>external_file</i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</code>
+            <!-- THE EXTRA NON-BREAKING SPACES AT THE END OF THE PRECEDING LINE    -->
+            <!-- ARE PADDING SPACES TO ENSURE THE PROPER FORMATTING OF THIS TABLE. -->
+            <!--                  DO NOT REMOVE THEM!!!!!!!!!!!!!                  -->
+            </td><td>A string specifying the name of an external file.
+            </td></tr> 
+
+          <tr valign=top align=left><td>
+          <hr><code>MAXIMUM-DIMENSIONS</code>
+            </td><td><hr>Maximum sizes of all dimensions.  
+                 Requires that <code>CHUNKED-DIMENSION-SIZES</code> be specified.
+            </td></tr>
+          <tr valign=top align=left><td>
+          <code>&nbsp;&nbsp;&nbsp;&nbsp;<em>max_dims</em></code>
+            </td><td>A string of space-separated integers specifying the 
+                     maximum size of each dimension of the output dataset.
+                     A value of <code>-1</code> for any dimension implies  
+                     unlimited size for that particular dimension.<br>
+                     The number of dimensions must correspond to the value
+                     of <code>RANK</code>.<br>
+            </td></tr> 
+
+          <tr valign=top align=left><td><hr></td><td><hr></td></tr>
+        </table>
+
+        <p>
+<!-- NEW PAGE -->
+        <b>The <code>help</code> option:</b><br>
+        The help option, expressed as one of 
+        <table width=100% border=0>
+          <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+          <code>h5import -h</code><br>
+          or<br>
+          <code>h5import -help</code><br>
+          </td></tr>
+        <tr><td colspan="2">prints the <code>h5import</code> usage summary</td></tr>
+          <tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+          <code>
+          h5import -h[elp], OR<br>
+          h5import &lt;infile&gt; &lt;options&gt; 
+                   [&lt;infile&gt; &lt;options&gt;...] 
+                    -o[utfile] &lt;outfile&gt;</code>
+          </td></tr>
+        <tr><td colspan="2">then exits.</td></tr>
+        </table>
+        <p>
+        
+<dt><strong>Options and Parameters:</strong>
+    <dl>
+        <dt><code>infile(s)</code>
+            <dd>Name of the Input file(s).
+        <dt><code>in_options</code>
+            <dd>Input options.  Note that while only the <code>-dims</code> argument 
+                is required, arguments must used in the order in which they are listed below.
+              <dl>
+              <dt><code>-d <em>dim_list</em></code>
+              <dt><code>-dims <em>dim_list</em></code>
+                <dd>Input data dimensions.
+                    <code><em>dim_list</em></code> is a string of 
+                    comma-separated numbers with no spaces 
+                    describing the dimensions of the input data.
+                    For example, a 50 x 100 2-dimensional array would be 
+                    specified as <code>-dims 50,100</code>.<br>
+                    Required argument: if no configuration  file is used, 
+                    this command-line argument is mandatory.
+              <dt><code>-p <em>pathname</em></code>
+              <dt><code>-pathname <em>pathname</em></code>
+                <dd><code><em>pathname</em></code> is a string consisting of 
+                    one or more strings separated by slashes (<code>/</code>) 
+                    specifying the path of the dataset in the output file. 
+                    If the groups in the path do no exist, they will be 
+                    created.<br>
+                    Optional argument: if not specified, 
+                    the default path is 
+                    <code>dataset1</code> for the first input dataset,
+                    <code>dataset2</code> for the second input dataset,
+                    <code>dataset3</code> for the third input dataset,
+                    etc.<br>
+                    <code>h5import</code> does not overwrite a pre-existing 
+                    dataset of the specified or default name. 
+                    When an existing dataset of a conflicting name is 
+                    encountered, <code>h5import</code> quits with an error;
+                    the current input file and any subsequent input files
+                    are not processed.
+              <dt><code>-t <em>input_class</em></code>
+              <dt><code>-type <em>input_class</em></code>
+                <dd><code><em>input_class</em></code> specifies the class of the 
+                    input data and determines the class of the output data.<br>
+                    Valid values are as defined in the Keyword/Values table
+                    in the section "The configuration file" above.<br>
+                    Optional argument: if not specified, 
+                    the default value is <code>FP</code>.
+              <dt><code>-s <em>input_size</em></code>
+              <dt><code>-size <em>input_size</em></code>
+                <dd><code><em>input_size</em></code> specifies the size in bits 
+                    of the input data and determines the size of the output data.<br>
+                    Valid values for signed or unsigned integers are 
+                    <code>8</code>, <code>16</code>, <code>32</code>, and <code>64</code>.<br>
+                    Valid values for floating point data are 
+                    <code>32</code> and <code>64</code>.<br>
+                    Optional argument: if not specified, 
+                    the default value is <code>32</code>.
+              <dt><code>-c <em>config_file</em></code>
+                <dd><code><em>config_file</em></code> specifies a 
+                    configuration file.<br>
+                    This argument replaces all other arguments except  
+                    <code><em>infile</em></code> and 
+                    <code>-o <em>outfile</em></code>
+              </dl>
+        <dt><code>outfile</code>
+            <dd>Name of the HDF5 output file.
+    </dl>
+
+<dt><strong>Examples:</strong>
+    <dd><b>Using command-line arguments:</b>
+        <table width=100% border=0>
+          <tr><td colspan=2>
+               <code>h5import infile -dims 2,3,4 -type TEXTIN -size 32 -o out1</code>
+          </td></tr><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+               This command creates a file <code>out1</code> containing 
+               a single 2x3x4 32-bit integer dataset. 
+               Since no pathname is specified, the dataset is stored 
+               in <code>out1</code> as <code>/dataset1</code>.
+          </td></tr><tr><td colspan=2>
+               <code>h5import infile -dims 20,50 -path bin1/dset1 -type FP -size 64 -o out2</code>
+          </td></tr><tr><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+               This command creates a file <code>out2</code> containing 
+               a single a 20x50 64-bit floating point dataset. 
+               The dataset is stored in <code>out2</code> as <code>/bin1/dset1</code>.
+          </td></tr>
+        </table>
+
+    <dd><b>Sample configuration files:</b><br>
+        The following configuration file specifies the following:<br>
+        &ndash; The input data is a 5x2x4 floating point array in 
+                an ASCII file.<br>
+        &ndash; The output dataset will be saved in chunked layout, 
+                with chunk dimension sizes of 2x2x2.<br>
+        &ndash; The output datatype will be 64-bit floating point, 
+                little-endian, IEEE.<br>
+        &ndash; The output dataset will be stored in 
+                <code><em>outfile</em></code> 
+                at <code>/work/h5/pkamat/First-set</code>.<br>
+        &ndash; The maximum dimension sizes of the output dataset 
+                will be 8x8x(unlimited).
+        <pre>
+            PATH work/h5/pkamat/First-set
+            INPUT-CLASS TEXTFP
+            RANK 3
+            DIMENSION-SIZES 5 2 4
+            OUTPUT-CLASS FP
+            OUTPUT-SIZE 64
+            OUTPUT-ARCHITECTURE IEEE
+            OUTPUT-BYTE-ORDER LE
+            CHUNKED-DIMENSION-SIZES 2 2 2 
+            MAXIMUM-DIMENSIONS 8 8 -1
+        </pre>
+
+        The next configuration file specifies the following:<br>
+        &ndash; The input data is a 6x3x5x2x4 integer array in 
+                a binary file.<br>
+        &ndash; The output dataset will be saved in chunked layout, 
+                with chunk dimension sizes of 2x2x2x2x2.<br>
+        &ndash; The output datatype will be 32-bit integer in 
+                <code>NATIVE</code> format 
+                (as the output architecture is not specified).<br>
+        &ndash; The output dataset will be compressed using Gzip compression 
+                with a compression level of 7.<br>
+        &ndash; The output dataset will be stored in 
+                <code><em>outfile</em></code> at <code>/Second-set</code>.
+        <pre>
+            PATH Second-set
+            INPUT-CLASS IN
+            RANK 5
+            DIMENSION-SIZES 6 3 5 2 4
+            OUTPUT-CLASS IN
+            OUTPUT-SIZE 32
+            CHUNKED-DIMENSION-SIZES 2 2 2 2 2
+            COMPRESSION-TYPE GZIP
+            COMPRESSION-PARAM 7
+        </pre>
+<dt><strong>History:</strong>
+    	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Command Line Tool</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Tool introduced in this release.</td></tr>
+    </table></ul>
+
+<!--
+<dt><strong>Current Status:</strong>
+    <dd>
+<dt><strong>See Also:</strong>
+    <dd>
+-->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "gif2h5" -->
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong> <a name="Tools-GIF2H5">gif2h5</a>
+<dt><strong>Syntax:</strong>
+    <dd><code>gif2h5</code>
+        <em>gif_file</em> <em>h5_file</em>
+<dt><strong>Purpose:</strong>
+    <dd>Converts a GIF file to an HDF5 file.
+<dt><strong>Description:</strong>
+    <dd><code>gif2h5</code> accepts as input the GIF file <em>gif_file</em>
+        and produces the HDF5 file <em>h5_file</em> as output.
+        
+<dt><strong>Options and Parameters:</strong>
+    <dl>
+        <dt><em>gif_file</em>
+            <dd>The name of the input GIF file
+        <dt><em>h5_file</em>
+            <dd>The name of the output HDF5 file
+    </dl>
+<!--
+<dt><strong>Current Status:</strong>
+    <dd>
+<dt><strong>See Also:</strong>
+    <dd>
+-->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h52gif" -->
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong> <a name="Tools-H52GIF">h52gif</a>
+<dt><strong>Syntax:</strong>
+    <dd><code>h52gif</code>
+        <em>h5_file</em> <em>gif_file</em>
+        <code>-i</code> <em>h5_image</em>
+        <code>[-p</code> <em>h5_palette</em><code>]</code>
+<dt><strong>Purpose:</strong>
+    <dd>Converts an HDF5 file to a GIF file.
+<dt><strong>Description:</strong>
+    <dd><code>h52gif</code> accepts as input the HDF5 file <em>h5_file</em>
+        and the names of images and associated palettes within that file 
+        as input and produces the GIF file <em>gif_file</em>, 
+        containing those images, as output.
+        <p>
+        <code>h52gif</code> expects <em>at least</em> 
+        one <em>h5_image</em>. 
+        You may repeat 
+        <br>
+                &nbsp;&nbsp;&nbsp;&nbsp;
+                <code>-i</code> <em>h5_image</em>
+                <code>[-p</code> <em>h5_palette</em><code>]</code>
+        <br>
+        up to 50 times, for a maximum of 50 images.
+        
+<dt><strong>Options and Parameters:</strong>
+    <dl>
+        <dt><em>h5_file</em>
+            <dd>The name of the input HDF5 file
+        <dt><em>gif_file</em>
+            <dd>The name of the output GIF file
+        <dt><code>-i</code> <em>h5_image</em>
+            <dd>Image option, specifying the name of an HDF5 image or 
+                dataset containing an image to be converted
+        <dt><code>-p</code> <em>h5_palette</em>
+            <dd>Palette option, specifying the name of an HDF5 dataset 
+                containing a palette to be used in an image conversion
+    </dl>
+<!--
+<dt><strong>Current Status:</strong>
+    <dd>
+<dt><strong>See Also:</strong>
+    <dd>
+-->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5toh4" -->
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong> <a name="Tools-H5toh4">h5toh4</a>
+<dt><strong>Syntax:</strong>
+    <dd><code>h5toh4 -h</code><br>
+        <code>h5toh4 </code><em>
+            h5file
+            h4file</em><br>
+        <code>h5toh4 </code><em>
+            h5file</em><br>
+        <code>h5toh4 -m </code><em>
+            h5file1
+            h5file2
+            h5file3</em> ...
+<dt><strong>Purpose:</strong>
+    <dd>Converts an HDF5 file into an HDF4 file.
+<dt><strong>Description:</strong>
+    <dd><code>h5toh4</code> is an HDF5 utility which reads 
+        an HDF5 file, <em>h5file</em>, and converts all 
+        supported objects and pathways to produce an HDF4 file, 
+        <em>h4file</em>.  If <em>h4file</em> already exists, 
+        it will be replaced.
+        <p>
+        If only one file name is given, the name must end in 
+        <code>.h5</code> and is assumed to represent the 
+        HDF5 input file.  <code>h5toh4</code> replaces the 
+        <code>.h5</code> suffix with <code>.hdf</code> to form 
+        the name of the resulting HDF4 file and proceeds as above.  
+        If a file with the name of the intended HDF4 file already 
+        exists, <code>h5toh4</code> exits with an error without 
+        changing the contents of any file.
+        <p>
+        The <code>-m</code> option allows multiple HDF5 file 
+        arguments.  Each file name is treated the same as the 
+        single file name case above.
+        <p>
+        The <code>-h</code> option causes the following
+        syntax summary to be displayed:
+        <pre>              h5toh4 file.h5 file.hdf
+              h5toh4 file.h5
+              h5toh4 -m file1.h5 file2.h5 ...</pre>
+        
+        <p>
+
+        The following HDF5 objects occurring in an HDF5 file are 
+        converted to HDF4 objects in the HDF4 file:
+
+        <ul>
+          <li>HDF5 group objects are converted into HDF4 Vgroup 
+              objects.  HDF5 hard links and soft links pointing to 
+              objects are converted to HDF4 Vgroup references.
+          <li>HDF5 dataset objects of integer datatype are 
+              converted into HDF4 SDS objects.  These datasets 
+              may have up to 32 fixed dimensions.  
+              The slowest varying dimension may be extendable.  
+              8-bit, 16-bit, and 32-bit integer datatypes are 
+              supported.
+          <li>HDF5 dataset objects of floating point datatype 
+              are converted into HDF4 SDS objects.  
+              These datasets may have up to 32 fixed dimensions.  
+              The slowest varying dimension may be extendable.  
+              32-bit and 64-bit floating point datatypes are 
+              supported.
+          <li>HDF5 dataset objects of single dimension and 
+              compound datatype are converted into HDF4 Vdata 
+              objects. The length of that single dimension may 
+              be fixed or extendable.  The members of the 
+              compound datatype are constrained to be no more 
+              than rank 4.
+          <li>HDF5 dataset objects of single dimension and fixed length string
+              datatype are converted into HDF4 Vdata objects.  The HDF4 Vdata 
+              is a single field whose order is the length of the HDF5 string 
+              type.  The number of records of the Vdata is the length of the 
+              single dimension which may be fixed or extendable.
+        </ul>
+
+        Other objects are not converted and are not recorded
+        in the resulting <em>h4file</em>.
+        <p>
+        Attributes associated with any of the supported HDF5 
+        objects are carried over to the HDF4 objects.  
+        Attributes may be of integer, floating point, or fixed length 
+        string datatype and they may have up to 32 fixed dimensions.
+        <p>
+        All datatypes are converted to big-endian.  
+        Floating point datatypes are converted to IEEE format.
+        
+<dt><strong>Note:</strong>
+    <dl>The <code>h5toh4</code> and <code>h4toh5</code> utilities 
+        are no longer part of the HDF5 product;  
+	they are distributed separately through the page
+	<a href="http://hdf.ncsa.uiuc.edu/h4toh5/">
+	Converting between HDF (4.x) and HDF5</a>.
+	</p>
+
+<dt><strong>Options and Parameters:</strong>
+    <dl>
+        <dt><code>-h</code>
+            <dd>Displays a syntax summary.
+        <dt><code>-m</code>
+            <dd>Converts multiple HDF5 files to multiple HDF4 files.
+        <dt><em>h5file</em>
+            <dd>The HDF5 file to be converted.
+        <dt><em>h4file</em>
+            <dd>The HDF4 file to be created.
+    </dl>
+<!--
+<dt><strong>Current Status:</strong>
+    <dd>
+<dt><strong>See Also:</strong>
+    <dd>
+-->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h4toh5" -->
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong> <a name="Tools-H4toh5">h4toh5</a>
+<dt><strong>Syntax:</strong>
+    <dd><code>h4toh5 -h</code><br>
+        <code>h4toh5 </code><em>
+            h4file
+            h5file</em><br>
+        <code>h4toh5 </code><em>
+            h4file</em><br>
+        <!--  currently no -m option
+        <code>h4toh5 -m </code><em>
+            h4file1
+            h4file2
+            h4file3</em> ...
+        -->
+<dt><strong>Purpose:</strong>
+    <dd>Converts an HDF4 file to an HDF5 file.
+<dt><strong>Description:</strong>
+    <dd><code>h4toh5</code> is a file conversion utility that reads 
+        an HDF4 file, <em>h4file</em> (<code>input.hdf</code> for example),
+        and writes an HDF5 file, <em>h5file</em> (<code>output.h5</code>
+        for example), containing the same data.
+        <p>
+        If no output file <em>h5file</em> is specified, 
+        <code>h4toh5</code> uses the input filename to designate
+        the output file, replacing the extension <code>.hdf</code>
+        with <code>.h5</code>.
+        For example, if the input file <code>scheme3.hdf</code> is 
+        specified with no output filename, <code>h4toh5</code> will 
+        name the output file <code>scheme3.h5</code>.
+        <p>
+        <!--  currently no -m option
+        The <code>-m</code> option allows multiple HDF5 file 
+        arguments.  Each file name is treated the same as the 
+        single file name case above.
+        <p>
+        -->
+        The <code>-h</code> option causes a syntax summary 
+        similar to the following to be displayed:
+        <pre>              h4toh5 inputfile.hdf outputfile.h5
+              h4toh5 inputfile.hdf                    <!--  currently no -m option
+              h4toh5 -m inputfile1.hdf inputfile2.hdf ...  --> </pre>
+        <p>
+        Each object in the HDF4 file is converted to an equivalent 
+        HDF5 object, according to the mapping described in
+        <a href="ADGuide/H4toH5Mapping.pdf" target=ExternalWinA>
+        <cite>Mapping HDF4 Objects to HDF5 Objects</cite></a>.
+        (If this mapping changes between HDF5 Library releases, a more up-to-date
+        version may be available at
+        <a href="http://hdf.ncsa.uiuc.edu/HDF5/papers/h4toh5/H4-to-H5MappingGuidelines.pdf" target=ExternalWinB>
+        <cite>Mapping HDF4 Objects to HDF5 Objects</cite> on the HDF FTP server</a>.)
+        <p>
+        In this initial version, <code>h4toh5</code> converts the following 
+        HDF4 objects:
+        <center>
+        <table width=75% border=0>
+          <tr><th width=40% valign=top align=left>
+            HDF4 Object
+            </td><th width=60% valign=top align=left>
+            Resulting HDF5 Object
+          </td></tr>
+          <tr><td width=40% valign=top align=left>
+            SDS
+            </td><td width=60% valign=top align=left>
+            Dataset
+          </td></tr>
+          <tr><td width=40% valign=top align=left>
+            GR, RI8, and RI24 image
+            </td><td width=60% valign=top align=left>
+            Dataset 
+          </td></tr>
+          <tr><td width=40% valign=top align=left>
+            Vdata
+            </td><td width=60% valign=top align=left>
+            Dataset
+          </td></tr>
+          <tr><td width=40% valign=top align=left>
+            Vgroup
+            </td><td width=60% valign=top align=left>
+            Group
+          </td></tr>
+          <tr><td width=40% valign=top align=left>
+            Annotation
+            </td><td width=60% valign=top align=left>
+            Attribute
+          </td></tr>
+          <tr><td width=40% valign=top align=left>
+            Palette
+            </td><td width=60% valign=top align=left>
+            Dataset
+          </td></tr>
+        </table>
+        </center>
+<dt><strong>Note:</strong>
+    <dl>The <code>h4toh5</code> and <code>h5toh4</code> utilities 
+        are no longer part of the HDF5 product;  
+	they are distributed separately through the page
+	<a href="http://hdf.ncsa.uiuc.edu/h4toh5/">
+	Converting between HDF (4.x) and HDF5</a>.
+	</p>
+<dt><strong>Options and Parameters:</strong>
+    <dl>
+        <dt><code>-h</code>
+            <dd>Displays a syntax summary.
+        <!--  currently no -m option
+        <dt><code>-m</code>
+            <dd>Converts multiple HDF4 files to multiple HDF5 files.
+        -->
+        <dt><em>h4file</em>
+            <dd>The HDF4 file to be converted.
+        <dt><em>h5file</em>
+            <dd>The HDF5 file to be created.
+    </dl>
+<!--
+<dt><strong>Current Status:</strong>
+    <dd>
+<dt><strong>See Also:</strong>
+    <dd>
+-->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5perf" -->
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong> <a name="Tools-Perf">h5perf</a>
+<dt><strong>Syntax:</strong>
+    <dd><code>h5perf </code>[<code>-h </code>|<code> --help</code>]
+    <dd><code>h5perf </code>[<em>options</em>]
+<!--
+        [<code>-a</code> <em>size</em> | <code>--align=</code><em>size</em>]
+        [<code>-A</code> <em>api_list</em> | <code>--api=</code><em>api_list</em>]
+        [<code>-B</code> <em>size</em> | <code>--block-size=</code><em>size</em>]
+        [<code>-c</code> | <code>--chunk</code>]
+        [<code>-C</code> | <code>--collective</code>]
+        [<code>-d</code> <em>N</em> | <code>--num-dsets</code><em>N</em>]
+        [<code>-D</code> <em>debug_flags</em> | <code>--debug=</code><em>debug_flags</em>]
+        [<code>-e</code> <em>size</em> | <code>--num-bytes=</code><em>size</em>]
+        [<code>-F</code> <em>N</em> | <code>--num-files=</code><em>N</em>]
+        [<code>-i</code> <em>N</em> | <code>--num-iterations=</code><em>N</em>]
+        [<code>-I</code> | <code>--interleaved</code>]
+        [<code>-m</code> | <code>--mpi-posix</code>]
+        [<code>-n</code> | <code>--no-fill</code>]
+        [<code>-o</code> <em>file</em> | <code> --output=</code><em>file</em>]
+        [<code>-p</code> <em>N</em> | <code>--min-num-processes=</code><em>N</em>]
+        [<code>-P</code> <em>N</em> | <code>--max-num-processes=</code><em>N</em>]
+        [<code>-T</code> <em>size</em> | <code>--threshold=</code><em>size</em>]
+        [<code>-w</code> | <code>--write-only</code>]
+        [<code>-x</code> <em>size</em> | <code>--min-xfer-size=</code><em>size</em>]
+        [<code>-X</code> <em>size</em> | <code>--max-xfer-size=</code>size<em></em>]
+-->
+
+<dt><strong>Purpose:</strong>
+    <dd>Tests Parallel HDF5 performance.
+<dt><strong>Description:</strong>
+    <dd><code>h5perf</code> provides tools for testing the performance
+        of the Parallel HDF5 library.
+        <p>
+	The following environment variables have the following 
+	effects on <code>H5perf</code> behavior:
+	<table border=0>
+	  <tr align="left" valign="top"><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+	    <code>HDF5_NOCLEANUP</code></td><td>
+	    If set, <code>h5perf</code> does not remove data files. 
+	    (Default: Remove)</td></tr>
+	  <tr align="left" valign="top"><td>&nbsp;</td><td>
+	    <code>HDF5_MPI_INFO</code></td><td>
+	    Must be set to a string containing a list of semi-colon separated 
+	    key=value pairs for the MPI <code>INFO</code> object.<br>
+	    Example:</td></tr>
+	  <tr align="left" valign="top"><td>&nbsp;</td><td>
+	    <code>HDF5_PARAPREFIX&nbsp;&nbsp;</code></td><td>
+	    Sets the prefix for parallel output data files.</td></tr>
+	</table>
+<dt><strong>Options and Parameters:</strong>
+    <dl>
+        <dt>These terms are used as follows in  this section: 
+           <table border="0">
+             <tr align="left" valign="top"><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+               <em>file&nbsp;&nbsp;</em></td><td>
+               A filename</td></tr>
+             <tr align="left" valign="top"><td>&nbsp;</td><td>
+               <em>size</em></td><td>
+               A size specifier, expressed as an integer greater than or equal 
+               to 0 (zero) followed by a size indicator:<br>
+               &nbsp;&nbsp;&nbsp;&nbsp;<code>K </code> for kilobytes (1024 bytes)<br>
+               &nbsp;&nbsp;&nbsp;&nbsp;<code>M </code> for megabytes (1048576 bytes)<br>
+               &nbsp;&nbsp;&nbsp;&nbsp;<code>G </code> for gigabytes (1073741824 bytes)<br>
+               Example: <code>37M</code> specifies 37 megabytes or 38797312 bytes.</td></tr>
+             <tr align="left" valign="top"><td>&nbsp;</td><td>
+               <em>N</em></td><td>
+               An integer greater than or equal to 0 (zero)</td></tr>
+           </table>
+        <p>
+        <dt><code>-h</code>, <code>--help</code>
+            <dd>Prints a usage message and exits.
+        <dt><code>-a</code> <em>size</em>, <code>--align=</code><em>size</em>
+            <dd>Specifies the alignment of objects in the HDF5 file. 
+	        (Default: 1)
+        <dt><code>-A</code> <em>api_list</em>, <code>--api=</code><em>api_list</em>
+            <dd>Specifies which APIs to test.  
+	        <em>api_list</em> is a comma-separated list with the 
+		following valid values:
+		<table border="0">
+		  <tr align="left" valign="top"><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+		    <code>phdf5&nbsp;&nbsp;</code></td><td>Parallel HDF5</td></tr>
+		  <tr align="left" valign="top"><td>&nbsp;</td><td>
+		    <code>mpiio</code></td><td>MPI-I/O</td></tr>
+		  <tr align="left" valign="top"><td>&nbsp;</td><td>
+		    <code>posix</code></td><td>POSIX</td></tr>
+		</table>
+		(Default: All APIs)<br><br>
+		Example, <code>--api=mpiio,phdf5</code> specifies that the
+		MPI I/O and parallel HDf5 APIs are to be monitored.<br><br>
+        <dt><code>-B</code> <em>size</em>, <code>--block-size=</code><em>size</em>
+            <dd>Specifies the block size within the transfer buffer.
+		(Default: 128K)<br><br>
+		Block size versus transfer buffer size:
+                The <em>transfer buffer size</em> is the size of a 
+		buffer in memory.  The data in that buffer is broken 
+	        into <em>block size</em> pieces and written to the 
+		file.<br><br>
+<!-- NEW PAGE -->
+		Transfer block size is set by the 
+		<code>-x</code> (or <code>--min-xfer-size</code>) and 
+		<code>-X</code> (or <code>--max-xfer-size</code>)
+		options.<br>
+		The pattern in which the blocks 
+                are written to the file is described in the discussion 
+		of the <code>-I</code> (or <code>--interleaved</code>) 
+		option.<br><br>
+        <dt><code>-c</code>, <code>--chunk</code>
+            <dd>Creates HDF5 datasets in chunked layout.
+		(Default: Off)
+        <dt><code>-C</code>, <code>--collective</code>
+            <dd>Use collective I/O for the MPI I/O and Parallel HDF5 APIs.<br>
+		(Default: Off, i.e., independent I/O)<br><br>
+		If this option is set and the MPI-I/O and PHDF5 APIs
+                are in  use, all the blocks in each transfer buffer 
+		will be written at once with an MPI derived type.
+		<br><br>
+        <dt><code>-d</code> <em>N</em>, <code>--num-dsets</code><em>N</em>
+            <dd>Sets the number of datasets per file.
+		(Default: <code>1</code>)
+        <dt><code>-D</code> <em>debug_flags</em>, <code>--debug=</code><em>debug_flags</em>
+            <dd>Sets the debugging level.
+	        <em>debug_flags</em> is a comma-separated list of 
+		debugging flags with the following valid values:
+		<table border="0">
+		  <tr align="left" valign="top"><td>&nbsp;&nbsp;&nbsp;&nbsp;</td><td>
+		    <code>1&nbsp;&nbsp;</code></td><td>Minimal debugging</td></tr>
+		  <tr align="left" valign="top"><td>&nbsp;</td><td>
+		    <code>2</code></td><td>Moderate debugging (&ldquo;not quite everything&rdquo;)</td></tr>
+		  <tr align="left" valign="top"><td>&nbsp;</td><td>
+		    <code>3</code></td><td>Extensive debugging (&ldquo;everything&rdquo;)</td></tr>
+		  <tr align="left" valign="top"><td>&nbsp;</td><td>
+		    <code>4</code></td><td>All possible debugging (&ldquo;the kitchen sink&rdquo;)</td></tr>
+		  <tr align="left" valign="top"><td>&nbsp;</td><td>
+		    <code>r</code></td><td>Raw data I/O throughput information</td></tr>
+		  <tr align="left" valign="top"><td>&nbsp;</td><td>
+		    <code>t</code></td><td>Times, in additions to throughputs</td></tr>
+		  <tr align="left" valign="top"><td>&nbsp;</td><td>
+		    <code>v</code></td><td>Verify data correctness</td></tr>
+		</table>
+ 		(Default: No debugging)<br><br>
+		Example: <code>--debug=2,r,t</code> specifies to 
+		run a moderate level of debugging 
+		while collecting raw data I/O throughput information 
+		and verifying the correctness of the data.<br><br>
+       <dt><code>-e</code> <em>size</em>, <code>--num-bytes=</code><em>size</em>
+            <dd>Specifies the number of bytes per process per dataset.
+		(Default: <code>256K</code>)
+        <dt><code>-F</code> <em>N</em>, <code>--num-files=</code><em>N</em>
+            <dd>Specifies the number of files.
+		(Default: <code>1</code>)
+        <dt><code>-i</code> <em>N</em>, <code>--num-iterations=</code><em>N</em>
+            <dd>Sets the number of iterations to perform.
+		(Default: <code>1</code>)
+        <dt><code>-I</code>, <code>--interleaved</code>
+            <dd>Sets interleaved block I/O.<br>
+	        (Default: Contiguous block I/O)<br><br>
+		Interleaved vs. Contiguous blocks
+		in a parallel environment:<br>
+		When contiguous blocks are written to a dataset, 
+		the dataset is divided into <em>m</em> regions, 
+		where <em>m</em> is the number of processes writing 
+		separate portions of the dataset.  Each process 
+		then writes data to its own region.
+		When interleaved blocks are written to a dataset, 
+		space for the first block of the first process is 
+		allocated in the dataset, then space is allocated 
+		for the first block of the second process, etc., 
+		until space has been allocated for the first block 
+		of each process.  Space is then allocated for 
+		the second block of the first process, 
+		the second block of the second process, etc.<br><br>
+                For example, in the case of a 4 process run 
+		with 1M bytes-per-process, 256K transfer buffer size, 
+                and 64KB block size, 16 <em>contiguous</em> blocks 
+                per process would be written to the file in the 
+	        manner<br>
+                <code>&nbsp;&nbsp;&nbsp;&nbsp;1111111111111111222222222222222233333333333333334444444444444444</code><br>
+                while 16 interleaved blocks per process would be 
+		written to the file as
+                <code>&nbsp;&nbsp;&nbsp;&nbsp;1234123412341234123412341234123412341234123412341234123412341234</code><br>
+                If collective I/O is turned on, all of the four 
+		blocks per transfer buffer will be written in 
+		one collective I/O call.<br><br>
+        <dt><code>-m</code>, <code>--mpi-posix</code>
+            <dd>Sets use of MPI-posix driver for HDF5 I/O.
+	        (Default: MPI-I/O driver)
+        <dt><code>-n</code>, <code>--no-fill</code>
+            <dd>Specifies to not write fill values to HDF5 datasets.
+	        This option is supported only in HDF5 Release v1.6 or later.<br>
+	        (Default: Off, i.e., write fill values)
+        <dt><code>-o</code> <em>file</em>, <code> --output=</code><em>file</em>
+            <dd>Sets the output file for raw data to <em>file</em>.
+	        (Default: None)
+        <dt><code>-p</code> <em>N</em>, <code>--min-num-processes=</code><em>N</em>
+            <dd>Sets the minimum number of processes to be used.
+	        (Default: <code>1</code>)
+        <dt><code>-P</code> <em>N</em>, <code>--max-num-processes=</code><em>N</em>
+            <dd>Sets the maximum number of processes to be used.<br>
+	        (Default: All <code>MPI_COMM_WORLD</code>processes)
+        <dt><code>-T</code> <em>size</em>, <code>--threshold=</code><em>size</em>
+            <dd>Sets the threshold for alignment of objects in the HDF5 file.
+	        (Default:  <code>1</code>)
+        <dt><code>-w</code>, <code>--write-only</code>
+            <dd>Performs only write tests, not read tests.
+	        (Default: Read and write tests)
+        <dt><code>-x</code> <em>size</em>, <code>--min-xfer-size=</code><em>size</em>
+            <dd>Sets the minimum transfer buffer size.
+	        (Default: <code>128K</code>)
+        <dt><code>-X</code> <em>size</em>, <code>--max-xfer-size=</code>size<em></em>
+            <dd>Sets the maximum transfer buffer size.
+	        (Default: <code>1M</code>)
+    </dl>
+<dt><strong>History:</strong>
+    	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Command Line Tool</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Tool introduced in this release.</td></tr>
+    </table></ul>
+<!--
+<dt><strong>Current Status:</strong>
+    <dd>
+<dt><strong>See Also:</strong>
+    <dd>
+-->
+</dl>
+
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5jam/h5unjam" -->
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong> <a name="Tools-Jam">h5jam/h5unjam</a>
+
+
+
+
+
+
+
+<dt><strong>Syntax:</strong>
+<dd><code>h5jam -u user_block -i in_file.h5 [-o out_file.h5] [--clobber]</code></dd>
+<dd><code>h5jam -h</code></dd>
+<dd>&nbsp;</dd>
+<dd><code>h5unjam -i in_file.h5 </code><code>[-u user_block | --delete] [</code><code>-o out_file.h5]</code></dd>
+<dd><code>h5unjam -h</code></dd>
+
+<dt><strong>Purpose:</strong>
+    <dd>Add user block to front of an HDF5 file, to create a new concatenated 
+        file.</dd>
+    <dd>Split user block and HDF5 file into two files, user block data and 
+        HDF5 data.</dd>
+ <dt><strong>Description:</strong>
+    <dd><code>h5jam</code>&nbsp; concatenates a <code>user_block</code> 
+       file and an HDF5 file to create an HDF5 file with a user block. 
+       The user block can be either binary or text. 
+       The output file is padded so that the HDF5 header begins on 
+       byte 512, 1024, etc.. (See the HDF5 File Format.)
+
+    <p>If <code>out_file.h5</code> is given, a new file is created with the <code>user_block</code> followed by the contents of<code> in_file.h5. </code>In this case,<code><big> </big>infile.h5 </code>is unchanged.
+      <p>
+If <code>out_file.h5</code> is not specified, the&nbsp;<code>user_block</code> is added to<code> in_file.h5</code>. &nbsp;</dd>
+    <p>
+    If in_file.h5 already has a user block, the contents of <code>user_block</code> will be added to the end of the existing user block, and hte file shifted to the next boundary. If <code>-clobber</code> is set, any existing user block will be overwritten.  
+
+
+<p><code>h5unjam</code><code></code> splits an HDF5 file, writing the
+user block to a file or stdout and the HDF5 file to an HDF5 file with a header at byte
+0 (i.e., with no user block). 
+  <p>If <code>out_file.h5</code> is given, a new file is created with the<code></code><code> in_file.h5 </code>without <code></code>the user block.<code> </code>In this case,<code><big> </big>infile.h5 </code>is unchanged.
+<p> If <code>out_file.h5</code> is not specified, the&nbsp;<code>user_block</code> is removed and <code>in_file.h5</code> is rewritten, starting at byte 0.
+      <p>
+If <code>user_block</code> is set,the user block will be written to <code>user_block</code>.&nbsp; If <code>user_block</code> is not set, the user block (if any)<code></code> will be written to stdout. If <code>-delete</code> is selected, the user block will not be not written.</dd>
+
+<dt><strong>Example Usage</strong></dt>
+<dd>Create new file, <code>newfile.h5</code>,&nbsp; with the text in file <code>mytext.txt</code> as the user block for the HDF5 file <code>file.h5</code>.
+  <pre>&nbsp;&nbsp;&nbsp;&nbsp;h5jam -u mytext.txt -i file.h5 -o newfile.h5</pre>
+  
+Add text in file <code>mytext.txt</code> to front of HDF5 dataset, <code>file.h5</code><code></code>.
+  <pre>&nbsp;&nbsp;&nbsp;&nbsp;h5jam -u mytext.txt -i file.h5 </pre>
+  
+Overwrite the user block (if any) in <code>file.h5</code> with the contents of <code>mytext.txt</code>.
+  <pre>&nbsp;&nbsp;&nbsp;&nbsp;h5jam -u mytext.txt -i file.h5 --clobber</pre>
+  
+<!-- NEW PAGE -->
+For an HDF5 file, <code>with_ub.h5</code>,&nbsp; with a user block, extract the user block to <code>user_block.txt</code> and the HDF5 file to <code>wo_ub.h5</code>.
+  <pre>&nbsp;&nbsp;&nbsp;&nbsp;h5unjam -i with_ub.h5 -u user_block.txt -i wo_ub.h5</pre>
+
+
+<dt><strong></strong></dt><dt><strong>Return Value</strong></dt>
+<dd><code>h5jam</code> returns the size of the output file, or -1 if an error occurs.
+  <p>
+  <code>h5unjam</code> returns the size of the output file, or -1 if an error occurs.
+
+<dt><strong>Caveats</strong></dt><dt><strong></strong> </dt>
+<dd>This tool copies all the data (sequentially) in the file(s) to new offsets. 
+For a large file, this copy will take a long time.
+  <p>The most efficient way to create a user block is to create the file
+with a user block (see <code>H5Pset_user_block</code>), and write
+the user block data into that space from a program.
+  <p>The user block is completely opaque to the HDF5 library and to the h5jam
+and h5unjam tools. &nbsp;The user block is simply read or written as a string
+of bytes, which could be text or any kind of binary data. &nbsp;It is up
+to the user to know what the contents of the user block means and how to
+process it.
+<p>
+When the user block is extracted, all the data is written to the output, including any padding or unwritten data.
+<p>
+This tool moves the HDF5 file through byte copies, i.e., it does not read or interpret the HDF5 objects.<br>
+
+
+
+
+
+
+
+
+
+
+
+
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5redeploy" -->
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong> <a name="Tools-Redeploy">h5redeploy</a>
+<dt><strong>Syntax:</strong>
+    <dd><code>h5redeploy </code>
+        [<code>help </code> | <code>-help</code>] 
+    <dd><code>h5redeploy </code>
+        [<code>-echo</code>] 
+        [<code>-force</code>] 
+        [<code>-prefix=</code><em>dir</em>]
+        [<code>-tool=</code><em>tool</em>]
+        [<code>-show</code>]
+<dt><strong>Purpose:</strong>
+    <dd>Updates HDF5 compiler tools after an HDF5 software installation
+        in a new location.
+<dt><strong>Description:</strong>
+    <dd><code>h5redeploy</code> updates the HDF5 compiler tools after 
+        the HDF5 software has been installed in a new location.
+
+<dt><strong>Options and Parameters:</strong>
+    <dl>
+        <dt><code>help</code>, <code>-help</code>
+            <dd>Prints a help message.
+        <dt><code>-echo</code>
+            <dd>Shows all the shell commands executed.
+        <dt><code>-force</code>
+            <dd>Performs the requested action without offering any prompt 
+	        requesting confirmation.
+        <dt><code>-prefix=</code><em>dir</em>
+            <dd>Specifies a new directory in which to find the 
+	        HDF5 subdirectories <code>lib/</code> and 
+		<code>include/</code>.<br> 
+		(Default: current working directory)
+        <dt><code>-tool=</code><em>tool</em>
+            <dd>Specifies  the tool to update. 
+	        <em>tool</em> must be in the current directory
+                 and must be writable.<br>
+		(Default: <code>h5cc</code>)
+        <dt><code>-show</code>
+            <dd>Shows all of the shell commands to be executed 
+	        without actually executing them.
+    </dl>
+<dt><strong>History:</strong>
+    	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Command Line Tool</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Tool introduced in this release.</td></tr>
+    </table></ul>
+<!--
+<dt><strong>Current Status:</strong>
+    <dd>
+<dt><strong>See Also:</strong>
+    <dd>
+-->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5cc and h5pcc" -->
+<hr>
+<dl>
+<dt><strong>Tool Names:</strong> <a name="Tools-H5CC">h5cc and h5pcc</a>
+<dt><strong>Syntax:</strong>
+    <dd><code>h5cc
+        [</code><em>OPTIONS</em><code> ]</code> <em>compile_line</em>
+    <dd><code>h5pcc
+        [</code><em>OPTIONS</em><code> ]</code> <em>compile_line</em>
+<dt><strong>Purpose:</strong>
+    <dd>Helper scripts to compile HDF5 C applications.
+<dt><strong>Description:</strong>
+    <dd><code>h5cc</code> and <code>h5pcc</code> can be used in much 
+        the same way as <code>mpicc</code> by MPICH is used to compile 
+        an HDF5 program. 
+        These tools take care of specifying on the command line
+        the locations of the HDF5 header files and libraries.
+        <code>h5cc</code> is for use in serial computing environments;
+        <code>h5pcc</code> is for parallel environments.
+        <p>
+        <code>h5cc</code> and <code>h5pcc</code> subsume all other 
+        compiler scripts in that if you have used a set of scripts to compile 
+        the HDF5 library, then <code>h5cc</code> and <code>h5pcc</code> 
+        also use those scripts.  
+        For example, when compiling an MPICH program, you use the 
+        <code>mpicc</code> script. 
+        If you have built HDF5 using MPICH, then <code>h5cc</code>
+        uses the MPICH program for compilation.
+        <p>
+        Some programs use HDF5 in only a few modules. 
+        It is not necessary to use <code>h5cc</code> or <code>h5pcc</code> 
+        to compile those modules which do not use HDF5. 
+        In fact, since <code>h5cc</code> and <code>h5pcc</code> are only 
+        convenience scripts, you can still compile HDF5 modules in the 
+        normal manner, though you will have to specify the HDF5 libraries 
+        and include paths yourself.
+        Use the <code>-show</code> option to see the details.
+        <p>
+        An example of how to use <code>h5cc</code> to compile the program
+        <code>hdf_prog</code>, which consists of the modules
+        <code>prog1.c</code> and <code>prog2.c</code> and uses the HDF5
+        shared library, would be as follows.
+        <code>h5pcc</code> is used in an identical manner.
+        <pre>
+        # h5cc -c prog1.c
+        # h5cc -c prog2.c
+        # h5cc -shlib -o hdf_prog prog1.o prog2.o </pre>
+<dt><strong>Options and Parameters:</strong>
+    <dd>
+    <dl>
+        <dt><code>-help</code>
+            <dd>Print a help message.
+        <dt><code>-echo</code>
+            <dd>Show all the shell commands executed.
+        <dt><code>-prefix=DIR</code>
+            <dd>Use the directory <code><em>DIR</em></code> to find the HDF5 
+                <code>lib/</code> and <code>include/</code> subdirectories. 
+                <br>
+                Default: prefix specified when configuring HDF5.
+        <dt><code>-show</code>
+            <dd>Show the commands without executing them.
+        <dt><code>-shlib</code>
+            <dd>Compile using shared HDF5 libraries.
+        <dt><code>-noshlib</code>
+            <dd>Compile using static HDF5 libraries [default].
+        <dt><em>compile_line</em>
+            <dd>The normal compile line options for your compiler. 
+                <code>h5cc</code> and <code>h5pcc</code> use the 
+                same compiler you used to compile HDF5; 
+                check your compiler's manual for more information 
+                on which options are needed.
+    </dl>
+<dt><strong>Environment Variables:</strong>
+    <dd>When set, these environment variables override some of the built-in
+        <code>h5cc</code> and <code>h5pcc</code> defaults.
+    <dl>
+        <dt><code>HDF5_CC</code>
+            <dd>Use a different C compiler.
+        <dt><code>HDF5_CLINKER</code>
+            <dd>Use a different linker.
+        <dt><code>HDF5_USE_SHLIB=[yes|no]</code>
+            <dd>Use shared version of the HDF5 library [default: no].
+    </dl>
+<!--
+<dt><strong>Current Status:</strong>
+    <dd>
+<dt><strong>See Also:</strong>
+    <dd>
+ -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5fc and h5pfc" -->
+<hr>
+<dl>
+<dt><strong>Tool Names:</strong> <a name="Tools-H5FC">h5fc and h5pfc</a>
+<dt><strong>Syntax:</strong>
+    <dd><code>h5fc
+        [</code><em>OPTIONS</em><code> ]</code> <em>compile_line</em>
+    <dd><code>h5pfc
+        [</code><em>OPTIONS</em><code> ]</code> <em>compile_line</em>
+<dt><strong>Purpose:</strong>
+    <dd>Helper scripts to compile HDF5 Fortran90 applications.
+<dt><strong>Description:</strong>
+    <dd><code>h5fc</code> and <code>h5pfc</code> can be used in much the 
+        same way <code>mpif90</code> by MPICH is used to compile 
+        an HDF5 program. 
+        These tools take care of specifying on the command line
+        the locations of the HDF5 header files and libraries.
+        <code>h5fc</code> is for use in serial computing environments;
+        <code>h5pfc</code> is for parallel environments.
+        <p>
+        <code>h5fc</code> and <code>h5pfc</code> subsume all other 
+        compiler scripts in that if you have used a set of scripts to compile 
+        the HDF5 Fortran library, then <code>h5fc</code> and <code>h5pfc</code> 
+        also use those scripts. For example, when
+        compiling an MPICH program, you use the <code>mpif90</code>
+        script. If you have built HDF5 using MPICH, then <code>h5fc</code>
+        uses the MPICH program for compilation.
+        <p>
+        Some programs use HDF5 in only a few modules. It is not necessary
+        to use <code>h5fc</code> and <code>h5pfc</code> to compile those 
+        modules which do not use HDF5. 
+        In fact, since <code>h5fc</code> and <code>h5pfc</code> are only 
+        convenience scripts, you can still compile HDF5 Fortran modules in 
+        the normal manner, though you will have to specify the 
+        HDF5 libraries and include paths yourself.
+        Use the <code>-show</code> option to see the details.
+        <p>
+        An example of how to use <code>h5fc</code> to compile the program
+        <code>hdf_prog</code>, which consists of the modules
+        <code>prog1.f90</code> and <code>prog2.f90</code> 
+        and uses the HDF5 Fortran library, would be as follows.
+        <code>h5pfc</code> is used in an identical manner.
+        <pre>
+        # h5fc -c prog1.f90
+        # h5fc -c prog2.f90
+        # h5fc -o hdf_prog prog1.o prog2.o </pre>
+<dt><strong>Options and Parameters:</strong>
+    <dd>
+    <dl>
+        <dt><code>-help</code>
+            <dd>Print a help message.
+        <dt><code>-echo</code>
+            <dd>Show all the shell commands executed.
+        <dt><code>-prefix=DIR</code>
+            <dd>Use the directory <code>DIR</code> to find HDF5 
+                <code>lib/</code> and <code>include/</code> subdirectories. 
+                <br>
+                Default: prefix specified when configuring HDF5.
+        <dt><code>-show</code>
+            <dd>Show the commands without executing them.
+        <dt><em>compile_line</em>
+            <dd>The normal compile line options for your compiler. 
+                <code>h5fc</code> and <code>h5pfc</code> use the 
+                same compiler you used to compile HDF5; 
+                check your compiler's manual for more information 
+                on which options are needed.
+    </dl>
+<dt><strong>Environment Variables:</strong>
+    <dd>When set, these environment variables override some of the built-in
+        <code>h5fc</code> and <code>h5pfc</code> defaults.
+        <dl>
+          <dt><code>HDF5_FC</code>
+            <dd>Use a different Fortran90 compiler.
+          <dt><code>HDF5_FLINKER</code>
+            <dd>Use a different linker.
+        </dl>
+<!-- NEW PAGE -->
+<dt><strong>History:</strong>
+    	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Command Line Tool</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Tool introduced in this release.</td></tr>
+    </table></ul>
+<!--
+<dt><strong>Current Status:</strong>
+    <dd>
+<dt><strong>See Also:</strong>
+    <dd>
+ -->
+</dl>
+
+<!-- NEW PAGE -->
+<!-- HEADER RIGHT "h5c++" -->
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong> <a name="Tools-H5C++">h5c++</a>
+<dt><strong>Syntax:</strong>
+    <dd><code>h5c++
+        [</code><em>OPTIONS</em><code>]</code> <em>&lt;compile line&gt;</em>
+<dt><strong>Purpose:</strong>
+    <dd>Helper script to compile HDF5 C++ applications.
+<dt><strong>Description:</strong>
+    <dd><p>
+        <code>h5c++</code> can be used in much the same way 
+        <code>mpiCC</code> by MPICH is used to compile an HDF5 program. 
+        It takes care of specifying where the
+        HDF5 header files and libraries are on the command line.
+        <p>
+        <code>h5c++</code> subsumes all other compiler scripts in that
+        if you've used one set of compiler scripts to compile the 
+	HDF5 C++ library, then <code>h5c++</code> uses those same scripts. 
+	For example, when compiling an MPICH program, 
+        you use the <code>mpiCC</code> script. 
+        <p>
+        Some programs use HDF5 in only a few modules. It isn't necessary
+        to use <code>h5c++</code> to compile those modules which don't use
+        HDF5. In fact, since <code>h5c++</code> is only a convenience
+        script, you are still able to compile HDF5 C++ modules in the 
+        normal way. In that case, you will have to specify the HDF5 libraries
+        and include paths yourself.
+        Use the <code>-show</code> option to see the details.
+        <p>
+        An example of how to use <code>h5c++</code> to compile the program
+        <code>hdf_prog</code>, which consists of modules
+        <code>prog1.cpp</code> and <code>prog2.cpp</code> 
+        and uses the HDF5 C++ library, would be as follows:
+        <pre>
+        # h5c++ -c prog1.cpp
+        # h5c++ -c prog2.cpp
+        # h5c++ -o hdf_prog prog1.o prog2.o</pre>
+<dt><strong>Options and Parameters:</strong>
+    <dd>
+    <dl>
+        <dt><code>-help</code>
+            <dd>Prints a help message.
+        <dt><code>-echo</code>
+            <dd>Show all the shell commands executed.
+        <dt><code>-prefix=DIR</code>
+            <dd>Use the directory <code>DIR</code> to find HDF5 
+                <code>lib/</code> and <code>include/</code> subdirectories 
+                <br>
+                Default: prefix specified when configuring HDF5.
+        <dt><code>-show</code>
+            <dd>Show the commands without executing them.
+        <dt><em>&lt;compile line&gt;</em>
+            <dd>The normal compile line options for your compiler. 
+                <code>h5c++</code> uses the same compiler you used 
+                to compile HDF5. Check your compiler's manual for 
+                more information on which options are needed.
+    </dl>
+<dt><strong>Environment Variables:</strong>
+    <dd>When set, these environment variables override some of the built-in
+        defaults of <code>h5c++</code>.
+        <dl>
+          <dt><code>HDF5_CXX</code>
+            <dd>Use a different C++ compiler.
+          <dt><code>HDF5_CXXLINKER</code>
+            <dd>Use a different linker.
+        </dl>
+<dt><strong>History:</strong>
+    	<ul><table width="90%">
+        <tr>
+		  <td valign="top" align="left" width="10%">
+		    <strong>Release</strong>&nbsp;&nbsp;&nbsp;&nbsp;</td>
+          <td valign="top" align="left">
+		    <strong>Command Line Tool</strong></td></tr>
+        <tr>
+		  <td valign="top">1.6.0</td>
+          <td valign="top">
+		    Tool introduced in this release.</td></tr>
+    </table></ul>
+<!--
+<dt><strong>Current Status:</strong>
+    <dd>
+<dt><strong>See Also:</strong>
+    <dd>
+ -->
+</dl>
+
+
+<!--                     Template, next 40 lines            -->
+<!--                     Template, next 40 lines            -->
+<!--                     Template, next 40 lines
+<hr>
+<dl>
+<dt><strong>Tool Name:</strong> <a name="Tools-H5toh4">h5toh4</a>
+<dt><strong>Syntax:</strong>
+    <dd><code>h5toh4 -h</code><br>
+        <code>h5toh4 </code><em>
+            h5file
+            h4file</em><br>
+        <code>h5toh4 </code><em>
+            h5file</em><br>
+        <code>h5toh4 -m </code><em>
+            h5file1
+            h5file2
+            h5file3</em> ...
+<dt><strong>Purpose:</strong>
+    <dd>Purpose...
+<dt><strong>Description:</strong>
+    <dd><code>TOOL</code> is an HDF5 utility which ...
+        Paragraph
+        <pre>              sample code
+              sample code
+              sample code </pre>
+        <p>
+        Paragraph
+        <p>
+        Paragraph
+<dt><strong>Options and Parameters:</strong>
+    <dl>
+        <dt><code>-option</code>
+            <dd>Description
+        <dt><em>parameter</em>
+            <dd>Description
+    </dl>
+<dt><strong>Current Status:</strong>
+    <dd>
+<dt><strong>See Also:</strong>
+    <dd>
+</dl>
+
+
+-->
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_RM.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" --><address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --><dt><dt>&nbsp;<dt><dt>&nbsp;<dt><dt>&nbsp;<dt><dt><SCRIPT LANGUAGE="JAVASCRIPT">
+<!--
+document.writeln("Last modified: 15 March 2005");
+-->
+</SCRIPT>
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Contents.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/Contents.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/Contents.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,104 @@
+<html>
+
+<body bgcolor="#BBFFFF">
+
+
+<!--
+The following tag is for use only in the distributed doc set.  
+Remove (or comment out) when served from HDF web server. 
+-->
+<center>
+<font size=-1><a href="../index.html" target=_top>Return to HDF5 Doc Set</a></font>
+</center>
+<br>
+
+<hr>
+
+<!--
+<A HREF="READ1ST.HTML" Target="RdFirstWin" onClick="window.open(&quot;READ1ST.HTML&quot;,&quot;RdFirstWin&quot;,&quot;toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=yes,resizable=1,width=500,height=250,titlebar=yes&quot;)"><IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
+-->
+
+<a href="title.html" TARGET="CONTENT"><IMG SRC="Graphics/TitlePg.gif" BORDER=0 ALT="Tutorial Title Page"></a>
+<br>
+
+<hr>
+<a href="ContentsIntro.html" TARGET="BUTTONS"><IMG SRC="Graphics/IntroTopics.gif" BORDER=0 ALT="Introductory Topics"></a>
+<br>
+<!--
+<a href="intro.html" TARGET="CONTENT"><IMG SRC="Graphics/Intro.gif" BORDER=0 ALT="Introduction"></a>
+<br>
+<a href="fileorg.html" TARGET="CONTENT"><img src="Graphics/FileOrg.gif" BORDER=0 ALT="HDF5 File Organization"></a>
+<br>
+<a href="api.html" TARGET="CONTENT"><IMG SRC="Graphics/H5API.gif" BORDER=0 ALT="The HDF5 API"></a>
+<br>
+<a href="crtfile.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateFile.gif" BORDER=0 ALT="Creating an HDF5 File"></a>
+<br>
+<a href="crtdat.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateDset1.gif" BORDER=0 ALT="Creating a Dataset"></a>
+<br>
+<a href="rdwt.html" TARGET="CONTENT"><IMG SRC="Graphics/RdWrDataset.gif" BORDER=0 ALT="Reading from and Writing to a Dataset"></a>
+<br>
+<a href="crtatt.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateAttr.gif" BORDER=0 ALT="Creating an Attribute"></a>
+<br>
+<a href="crtgrp.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateGrp1.gif" BORDER=0 ALT="Creating a Group"></a>
+<br>
+<a href="crtgrpar.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateGrp2.gif" BORDER=0 ALT="Creating Groups Using Absolute and Relative Names"></a>
+<br>
+<a href="crtgrpd.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateDset2.gif" BORDER=0 ALT="Creating Datasets in a Group"></a>
+
+
+<br>
+<br>
+<a href="questions.html" TARGET="CONTENT"><IMG SRC="Graphics/Quiz.gif" BORDER=0 ALT="Quiz Questions"></a>
+<br>
+<a href="answers.html" TARGET="CONTENT"><IMG SRC="Graphics/QuizAns.gif" BORDER=0 ALT="Quiz Answers"></a>
+-->
+
+<hr>
+<a href="ContentsAdv.html" TARGET="BUTTONS"><IMG SRC="Graphics/AdvTopics.gif" BORDER=0 ALT="Advanced Topics"></a>
+<!--
+<br>
+<a href="compound.html" TARGET="CONTENT"><IMG SRC="Graphics/CompDTypes.gif" BORDER=0 ALT="Compound Datatypes"></a>
+<br>
+<a href="select.html" TARGET="CONTENT"><IMG SRC="Graphics/SelectHyp.gif" BORDER=0 ALT="Dataspace Selection - Hyperslab"></a>
+<br>
+<a href="selectc.html" TARGET="CONTENT"><IMG SRC="Graphics/SelectElemCp.gif" BORDER=0 ALT="Dataspace Selection - Individual Points"></a>
+<br>
+<a href="reftoobj.html" TARGET="CONTENT"><IMG SRC="Graphics/RefObject.gif" BORDER=0 ALT="References to Objects"></a>
+<br>
+<a href="reftoreg.html" TARGET="CONTENT"><IMG SRC="Graphics/RefRegion.gif" BORDER=0 ALT="References to Dataset Regions"></a>
+<br>
+<a href="extend.html" TARGET="CONTENT"><IMG SRC="Graphics/ChunkExt.gif" BORDER=0 ALT="Chunking and Extendible Datasets"></a>
+<br>
+<a href="mount.html" TARGET="CONTENT"><IMG SRC="Graphics/MountFile.gif" BORDER=0 ALT="Mounting Files"></a>
+<br>
+<a href="iterate.html" TARGET="CONTENT"><IMG SRC="Graphics/Iterate.gif" BORDER=0 ALT="Group Iteration"></a>
+-->
+
+
+<hr>
+<a href="ContentsAdd.html" TARGET="BUTTONS"><IMG SRC="Graphics/AddInfo.gif" BORDER=0 ALT="Additional Information"></a>
+<!--
+<br>
+<a href="util.html" TARGET="CONTENT"><IMG SRC="Graphics/Utilities.gif" BORDER=0 ALT="HDF5 Utilities -- h5ls and h5dump"></a>
+<br>
+<a href="glossary.html" TARGET="CONTENT"><IMG SRC="Graphics/Glossary.gif" BORDER=0 ALT="Glossary"></a>
+<br>
+<a href="references.html" TARGET="CONTENT"><IMG SRC="Graphics/References.gif" BORDER=0 ALT="References"></a>
+<br>
+<a href="examples/" TARGET="CONTENT"><IMG SRC="Graphics/Examples.gif" BORDER=0 ALT="Example Programs"></a>
+-->
+
+
+<hr>
+<a href="ContentsFull.html" TARGET="BUTTONS"><IMG SRC="Graphics/TOCFull.gif" BORDER=0 ALT="Full TOC"></a>
+<br>
+
+
+<hr>
+<br>
+<a href="Copyright.html" TARGET="CONTENT"><IMG SRC="Graphics/Copy.gif" BORDER=0 ALT="Copyright, Etc."></a><br>
+
+
+</body>
+</html>
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsAdd.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsAdd.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsAdd.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,54 @@
+<html>
+
+<body bgcolor="#BBFFFF">
+
+
+<!--
+The following tag is for use only in the distributed doc set.  
+Remove (or comment out) when served from HDF web server. 
+-->
+<center>
+<font size=-1><a href="../index.html" target=_top>Return to HDF5 Doc Set</a></font>
+</center>
+<br>
+
+<hr>
+
+<!--
+<A HREF="READ1ST.HTML" Target="RdFirstWin" onClick="window.open(&quot;READ1ST.HTML&quot;,&quot;RdFirstWin&quot;,&quot;toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=yes,resizable=1,width=500,height=250,titlebar=yes&quot;)"><IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
+-->
+
+
+<a href="Contents.html" TARGET="BUTTONS"><IMG SRC="Graphics/TOCShort.gif" BORDER=0 ALT="(Short TOC)"></a>
+<hr>
+
+<a href="title.html" TARGET="CONTENT"><IMG SRC="Graphics/TitlePg.gif" BORDER=0 ALT="Tutorial Title Page"></a>
+<hr>
+
+
+<a href="ContentsIntro.html" TARGET="BUTTONS"><IMG SRC="Graphics/IntroTopics.gif" BORDER=0 ALT="Introductory Topics"></a>
+<hr>
+
+
+<a href="ContentsAdv.html" TARGET="BUTTONS"><IMG SRC="Graphics/AdvTopics.gif" BORDER=0 ALT="Advanced Topics"></a>
+<hr>
+
+
+<IMG SRC="Graphics/AddInfo.gif" BORDER=0 ALT="Additional Information">
+<a href="util.html" TARGET="CONTENT"><IMG SRC="Graphics/Utilities.gif" BORDER=0 ALT="HDF5 Utilities -- h5ls and h5dump"></a>
+<a href="glossary.html" TARGET="CONTENT"><IMG SRC="Graphics/Glossary.gif" BORDER=0 ALT="Glossary"></a>
+<a href="references.html" TARGET="CONTENT"><IMG SRC="Graphics/References.gif" BORDER=0 ALT="References"></a>
+<a href="examples/" TARGET="CONTENT"><IMG SRC="Graphics/Examples.gif" BORDER=0 ALT="Example Programs"></a>
+<hr>
+
+
+<a href="ContentsFull.html" TARGET="BUTTONS"><IMG SRC="Graphics/TOCFull.gif" BORDER=0 ALT="Full TOC"></a>
+
+
+<hr>
+<a href="Copyright.html" TARGET="CONTENT"><IMG SRC="Graphics/Copy.gif" BORDER=0 ALT="Copyright, Etc."></a><br>
+
+
+</body>
+</html>
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsAdv.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsAdv.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsAdv.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,57 @@
+<html>
+
+<body bgcolor="#BBFFFF">
+
+
+<!--
+The following tag is for use only in the distributed doc set.  
+Remove (or comment out) when served from HDF web server. 
+-->
+<center>
+<font size=-1><a href="../index.html" target=_top>Return to HDF5 Doc Set</a></font>
+</center>
+<br>
+
+<hr>
+
+<!--
+<A HREF="READ1ST.HTML" Target="RdFirstWin" onClick="window.open(&quot;READ1ST.HTML&quot;,&quot;RdFirstWin&quot;,&quot;toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=yes,resizable=1,width=500,height=250,titlebar=yes&quot;)"><IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
+-->
+
+<a href="Contents.html" TARGET="BUTTONS"><IMG SRC="Graphics/TOCShort.gif" BORDER=0 ALT="(Short TOC)"></a>
+<hr>
+
+<a href="title.html" TARGET="CONTENT"><IMG SRC="Graphics/TitlePg.gif" BORDER=0 ALT="Tutorial Title Page"></a>
+<hr>
+
+
+<a href="ContentsIntro.html" TARGET="BUTTONS"><IMG SRC="Graphics/IntroTopics.gif" BORDER=0 ALT="Introductory Topics"></a>
+<hr>
+
+
+<IMG SRC="Graphics/AdvTopics.gif" BORDER=0 ALT="Advanced Topics">
+<a href="compound.html" TARGET="CONTENT"><IMG SRC="Graphics/CompDTypes.gif" BORDER=0 ALT="Compound Datatypes"></a>
+<a href="select.html" TARGET="CONTENT"><IMG SRC="Graphics/SelectHyp.gif" BORDER=0 ALT="Dataspace Selection - hyperslab"></a>
+<a href="selectc.html" TARGET="CONTENT"><IMG SRC="Graphics/SelectElemCp.gif" BORDER=0 ALT="Dataspace Selection - Individual Points"></a>
+<a href="reftoobj.html" TARGET="CONTENT"><IMG SRC="Graphics/RefObject.gif" BORDER=0 ALT="References to Objects"></a>
+<a href="reftoreg.html" TARGET="CONTENT"><IMG SRC="Graphics/RefRegion.gif" BORDER=0 ALT="References to Dataset Regions"></a>
+<a href="extend.html" TARGET="CONTENT"><IMG SRC="Graphics/ChunkExt.gif" BORDER=0 ALT="Chunking and Extendible Datasets"></a>
+<a href="mount.html" TARGET="CONTENT"><IMG SRC="Graphics/MountFile.gif" BORDER=0 ALT="Mounting Files"></a>
+<a href="iterate.html" TARGET="CONTENT"><IMG SRC="Graphics/Iterate.gif" BORDER=0 ALT="Group Iteration"></a>
+<hr>
+
+
+<a href="ContentsAdd.html" TARGET="BUTTONS"><IMG SRC="Graphics/AddInfo.gif" BORDER=0 ALT="Additional Information"></a>
+<hr>
+
+
+<a href="ContentsFull.html" TARGET="BUTTONS"><IMG SRC="Graphics/TOCFull.gif" BORDER=0 ALT="Full TOC"></a>
+<hr>
+
+
+<a href="Copyright.html" TARGET="CONTENT"><IMG SRC="Graphics/Copy.gif" BORDER=0 ALT="Copyright, Etc."></a><br>
+
+
+</body>
+</html>
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsFull.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsFull.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsFull.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,71 @@
+<html>
+
+<body bgcolor="#BBFFFF">
+
+
+<!--
+The following tag is for use only in the distributed doc set.  
+Remove (or comment out) when served from HDF web server. 
+-->
+<center>
+<font size=-1><a href="../index.html" target=_top>Return to HDF5 Doc Set</a></font>
+</center>
+<br>
+
+<hr>
+
+<!--
+<A HREF="READ1ST.HTML" Target="RdFirstWin" onClick="window.open(&quot;READ1ST.HTML&quot;,&quot;RdFirstWin&quot;,&quot;toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=yes,resizable=1,width=500,height=250,titlebar=yes&quot;)"><IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
+-->
+
+
+<a href="Contents.html" TARGET="BUTTONS"><IMG SRC="Graphics/TOCShort.gif" BORDER=0 ALT="(Short TOC)"></a>
+<hr>
+
+<a href="title.html" TARGET="CONTENT"><IMG SRC="Graphics/TitlePg.gif" BORDER=0 ALT="Tutorial Title Page"></a>
+
+<hr>
+<IMG SRC="Graphics/IntroTopics.gif" BORDER=0 ALT="Introductory Topics">
+<a href="intro.html" TARGET="CONTENT"><IMG SRC="Graphics/Intro.gif" BORDER=0 ALT="Introduction"></a>
+<a href="fileorg.html" TARGET="CONTENT"><img src="Graphics/FileOrg.gif" BORDER=0 ALT="HDF5 File Organization"></a>
+<a href="api.html" TARGET="CONTENT"><IMG SRC="Graphics/H5API.gif" BORDER=0 ALT="The HDF5 API"></a>
+<a href="crtfile.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateFile.gif" BORDER=0 ALT="Creating an HDF5 File"></a>
+<a href="crtdat.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateDset1.gif" BORDER=0 ALT="Creating a Dataset"></a>
+<a href="rdwt.html" TARGET="CONTENT"><IMG SRC="Graphics/RdWrDataset.gif" BORDER=0 ALT="Reading from and Writing to a Dataset"></a>
+<a href="crtatt.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateAttr.gif" BORDER=0 ALT="Creating an Attribute"></a>
+<a href="crtgrp.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateGrp1.gif" BORDER=0 ALT="Creating a Group"></a>
+<a href="crtgrpar.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateGrp2.gif" BORDER=0 ALT="Creating Groups Using Absolute and Relative Names"></a>
+<a href="crtgrpd.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateDset2.gif" BORDER=0 ALT="Creating Datasets in a Group"></a>
+
+<br>
+<a href="questions.html" TARGET="CONTENT"><IMG SRC="Graphics/Quiz.gif" BORDER=0 ALT="Quiz Questions"></a>
+<a href="answers.html" TARGET="CONTENT"><IMG SRC="Graphics/QuizAns.gif" BORDER=0 ALT="Quiz Answers"></a>
+
+
+<hr>
+<IMG SRC="Graphics/AdvTopics.gif" BORDER=0 ALT="Advanced Topics">
+<a href="compound.html" TARGET="CONTENT"><IMG SRC="Graphics/CompDTypes.gif" BORDER=0 ALT="Compound Datatypes"></a>
+<a href="select.html" TARGET="CONTENT"><IMG SRC="Graphics/SelectHyp.gif" BORDER=0 ALT="Dataspace Selection - Hyperslab"></a>
+<a href="selectc.html" TARGET="CONTENT"><IMG SRC="Graphics/SelectElemCp.gif" BORDER=0 ALT="Dataspace Selection - Individual Points"></a>
+<a href="reftoobj.html" TARGET="CONTENT"><IMG SRC="Graphics/RefObject.gif" BORDER=0 ALT="References to Objects"></a>
+<a href="reftoreg.html" TARGET="CONTENT"><IMG SRC="Graphics/RefRegion.gif" BORDER=0 ALT="References to Dataset Regions"></a>
+<a href="extend.html" TARGET="CONTENT"><IMG SRC="Graphics/ChunkExt.gif" BORDER=0 ALT="Chunking and Extendible Datasets"></a>
+<a href="mount.html" TARGET="CONTENT"><IMG SRC="Graphics/MountFile.gif" BORDER=0 ALT="Mounting Files"></a>
+<a href="iterate.html" TARGET="CONTENT"><IMG SRC="Graphics/Iterate.gif" BORDER=0 ALT="Group Iteration"></a>
+
+
+<hr>
+<IMG SRC="Graphics/AddInfo.gif" BORDER=0 ALT="Additional Information">
+<a href="util.html" TARGET="CONTENT"><IMG SRC="Graphics/Utilities.gif" BORDER=0 ALT="HDF5 Utilities -- h5ls and h5dump"></a>
+<a href="glossary.html" TARGET="CONTENT"><IMG SRC="Graphics/Glossary.gif" BORDER=0 ALT="Glossary"></a>
+<a href="references.html" TARGET="CONTENT"><IMG SRC="Graphics/References.gif" BORDER=0 ALT="References"></a>
+<a href="examples/" TARGET="CONTENT"><IMG SRC="Graphics/Examples.gif" BORDER=0 ALT="Example Programs"></a>
+
+
+<hr>
+<a href="Copyright.html" TARGET="CONTENT"><IMG SRC="Graphics/Copy.gif" BORDER=0 ALT="Copyright, Etc."></a><br>
+
+
+</body>
+</html>
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsIntro.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsIntro.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/ContentsIntro.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,63 @@
+<html>
+
+<body bgcolor="#BBFFFF">
+
+
+<!--
+The following tag is for use only in the distributed doc set.  
+Remove (or comment out) when served from HDF web server. 
+-->
+<center>
+<font size=-1><a href="../index.html" target=_top>Return to HDF5 Doc Set</a></font>
+</center>
+<br>
+
+<hr>
+
+<!--
+<A HREF="READ1ST.HTML" Target="RdFirstWin" onClick="window.open(&quot;READ1ST.HTML&quot;,&quot;RdFirstWin&quot;,&quot;toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=yes,resizable=1,width=500,height=250,titlebar=yes&quot;)"><IMG SRC="GRAPHICS/READ1ST.GIF" BORDER=0 ALT="Read this first!"></A>
+-->
+
+
+<a href="Contents.html" TARGET="BUTTONS"><IMG SRC="Graphics/TOCShort.gif" BORDER=0 ALT="(Short TOC)"></a>
+<hr>
+
+<a href="title.html" TARGET="CONTENT"><IMG SRC="Graphics/TitlePg.gif" BORDER=0 ALT="Tutorial Title Page"></a>
+<hr>
+
+<IMG SRC="Graphics/IntroTopics.gif" BORDER=0 ALT="Introductory Topics">
+<a href="intro.html" TARGET="CONTENT"><IMG SRC="Graphics/Intro.gif" BORDER=0 ALT="Introduction"></a>
+<a href="fileorg.html" TARGET="CONTENT"><img src="Graphics/FileOrg.gif" BORDER=0 ALT="HDF5 File Organization"></a>
+<a href="api.html" TARGET="CONTENT"><IMG SRC="Graphics/H5API.gif" BORDER=0 ALT="The HDF5 API"></a>
+<a href="crtfile.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateFile.gif" BORDER=0 ALT="Creating an HDF5 File"></a>
+<a href="crtdat.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateDset1.gif" BORDER=0 ALT="Creating a Dataset"></a>
+<a href="rdwt.html" TARGET="CONTENT"><IMG SRC="Graphics/RdWrDataset.gif" BORDER=0 ALT="Reading from and Writing to a Dataset"></a>
+<a href="crtatt.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateAttr.gif" BORDER=0 ALT="Creating an Attribute"></a>
+<a href="crtgrp.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateGrp1.gif" BORDER=0 ALT="Creating a Group"></a>
+<a href="crtgrpar.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateGrp2.gif" BORDER=0 ALT="Creating Groups Using Absolute and Relative Names"></a>
+<a href="crtgrpd.html" TARGET="CONTENT"><IMG SRC="Graphics/CreateDset2.gif" BORDER=0 ALT="Creating Datasets in a Group"></a>
+
+<br>
+<a href="questions.html" TARGET="CONTENT"><IMG SRC="Graphics/Quiz.gif" BORDER=0 ALT="Quiz Questions"></a>
+<a href="answers.html" TARGET="CONTENT"><IMG SRC="Graphics/QuizAns.gif" BORDER=0 ALT="Quiz Answers"></a>
+<hr>
+
+
+<a href="ContentsAdv.html" TARGET="BUTTONS"><IMG SRC="Graphics/AdvTopics.gif" BORDER=0 ALT="Advanced Topics"></a>
+<hr>
+
+
+<a href="ContentsAdd.html" TARGET="BUTTONS"><IMG SRC="Graphics/AddInfo.gif" BORDER=0 ALT="Additional Information"></a>
+<hr>
+
+
+<a href="ContentsFull.html" TARGET="BUTTONS"><IMG SRC="Graphics/TOCFull.gif" BORDER=0 ALT="Full TOC"></a>
+<hr>
+
+
+<a href="Copyright.html" TARGET="CONTENT"><IMG SRC="Graphics/Copy.gif" BORDER=0 ALT="Copyright, Etc."></a><br>
+
+
+</body>
+</html>
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Copyright.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/Copyright.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/Copyright.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,117 @@
+<html>
+<html>
+  <head>
+    <title>
+      HDF5 Copyright Notice
+    </title>
+  </head>
+
+  <body bgcolor="#FFFFFF">
+
+
+
+<hr>               
+
+<h3>Copyright Notice and Statement for
+<br>
+NCSA HDF5 (Hierarchical Data Format 5) Software Library and Utilities</h3>
+<hr>               
+<p>
+
+
+NCSA HDF5 (Hierarchical Data Format 5) Software Library and Utilities
+<br>
+Copyright 1998, 1999, 2000, 2001 by the Board of Trustees of the University of Illinois
+<br>
+<strong>All rights reserved.</strong>
+<p>
+
+Contributors:   National Center for Supercomputing Applications (NCSA) at
+the University of Illinois at Urbana-Champaign (UIUC), Lawrence Livermore 
+National Laboratory (LLNL), Sandia National Laboratories (SNL), Los Alamos 
+National Laboratory (LANL), Jean-loup Gailly and Mark Adler (gzip library).
+<p>
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted for any purpose (including commercial purposes)
+provided that the following conditions are met:
+<p>
+
+<ol>
+<li>Redistributions of source code must retain the above copyright notice,
+this list of conditions, and the following disclaimer.
+
+<li>Redistributions in binary form must reproduce the above copyright
+notice, this list of conditions, and the following disclaimer in the
+documentation and/or materials provided with the distribution.
+
+<li>In addition, redistributions of modified forms of the source or binary
+code must carry prominent notices stating that the original code was
+changed and the date of the change.
+
+<li>All publications or advertising materials mentioning features or use of
+this software are asked, but not required, to acknowledge that it was 
+developed by the National Center for Supercomputing Applications at the 
+University of Illinois at Urbana-Champaign and to credit the contributors.
+
+<li>Neither the name of the University nor the names of the Contributors may
+be used to endorse or promote products derived from this software without
+specific prior written permission from the University or the Contributors.
+
+<li>THIS SOFTWARE IS PROVIDED BY THE UNIVERSITY AND THE CONTRIBUTORS "AS IS"
+WITH NO WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED.  In no event
+shall the University or the Contributors be liable for any damages suffered
+by the users arising out of the use of this software, even if advised of
+the possibility of such damage.
+
+</ol>
+
+
+
+
+<hr>
+Portions of HDF5 were developed with support from the University of 
+California, Lawrence Livermore National Laboratory (UC LLNL).
+The following statment applies to those portions of the product
+and must be retained in any redistribution of source code, binaries,
+documentation, and/or accompanying materials:
+
+<dir>
+This work was partially produced at the University of California,
+Lawrence Livermore National Laboratory (UC LLNL) under contract no.
+W-7405-ENG-48 (Contract 48) between the U.S. Department of Energy (DOE)
+and The Regents of the University of California (University) for the
+operation of UC LLNL.
+<p>
+<b>DISCLAIMER:</b>
+This work was prepared as an account of work sponsored by an agency of the
+United States Government.  Neither the United States Government nor the
+University of California nor any of their employees, makes any warranty,
+express or implied, or assumes any liability or responsibility for the
+accuracy, completeness, or usefulness of any information, apparatus,
+product, or process disclosed, or represents that its use would not
+infringe privately-owned rights.  Reference herein to any specific
+commercial products, process, or service by trade name, trademark,
+manufacturer, or otherwise, does not necessarily constitute or imply its
+endorsement, recommendation, or favoring by the United States Government
+or the University of California.  The views and opinions of authors
+expressed herein do not necessarily state or reflect those of the United
+States Government or the University of California, and shall not be used
+for advertising or product endorsement purposes.
+</dir>
+
+
+
+
+<hr>
+
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a>
+</address>
+
+Last modified:  7 June 2000
+<br>
+
+</body>
+</html>
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1 @@
+## There are no dependencies in this directory

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/AddInfo.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/AddInfo.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/AdvTopics.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/AdvTopics.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/BLANK.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/BLANK.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/ChunkExt.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/ChunkExt.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CompDTypes.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CompDTypes.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Copy.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Copy.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateAttr.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateAttr.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateDset1.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateDset1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateDset2.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateDset2.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateFile.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateFile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateGrp1.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateGrp1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateGrp2.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/CreateGrp2.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Dependencies
===================================================================

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Examples.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Examples.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/FileOrg.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/FileOrg.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/FullTOC1.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/FullTOC1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/FullTOC2.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/FullTOC2.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Glossary.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Glossary.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/H5API.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/H5API.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Intro.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Intro.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/IntroTopics.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/IntroTopics.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Iterate.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Iterate.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,29 @@
+# HDF5 Library Makefile(.in)
+#
+# Copyright (C) 2001 National Center for Supercomputing Applications.
+#                    All rights reserved.
+#
+# 
+top_srcdir=@top_srcdir@
+top_builddir=../../../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+SUBDIRS=
+DOCDIR=$(docdir)/hdf5/Tutor/Graphics
+
+# Public doc files (to be installed)...
+PUB_DOCS=AddInfo.gif AdvTopics.gif BLANK.gif ChunkExt.gif CompDTypes.gif  \
+         Copy.gif CreateAttr.gif CreateDset1.gif CreateDset2.gif          \
+         CreateFile.gif CreateGrp1.gif CreateGrp2.gif Examples.gif        \
+         FileOrg.gif FullTOC1.gif FullTOC2.gif Glossary.gif H5API.gif     \
+         Intro.gif IntroTopics.gif Iterate.gif MountFile.gif Quiz.gif     \
+         QuizAns.gif RdWrDataset.gif RefObject.gif RefRegion.gif          \
+         References.gif SelectElemCp.gif SelectHyp.gif TOC.gif            \
+         TOCFull.gif TOCShort.gif TitlePg.gif Utilities.gif
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/MountFile.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/MountFile.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Quiz.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Quiz.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/QuizAns.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/QuizAns.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/RdWrDataset.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/RdWrDataset.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/RefObject.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/RefObject.gif
___________________________________________________________________
Name: svn:executable
   + 
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/RefRegion.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/RefRegion.gif
___________________________________________________________________
Name: svn:executable
   + 
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/References.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/References.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/SelectElemCp.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/SelectElemCp.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/SelectHyp.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/SelectHyp.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/TOC.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/TOC.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/TOCFull.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/TOCFull.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/TOCShort.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/TOCShort.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/TitlePg.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/TitlePg.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Utilities.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/Graphics/Utilities.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,38 @@
+# HDF5 Library Makefile(.in)
+#
+# 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.
+#
+# 
+top_srcdir=@top_srcdir@
+top_builddir=../../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order
+SUBDIRS=Graphics examples
+DOCDIR=$(docdir)/hdf5/Tutor
+
+# Public doc files (to be installed)...
+PUB_DOCS=Contents.html ContentsAdd.html ContentsAdv.html                   \
+         ContentsFull.html ContentsIntro.html Copyright.html answers.html  \
+         api.html bighdf2sp.JPG compound.html crtatt.html crtdat.html      \
+         crtfile.html crtgrp.html crtgrpar.html crtgrpd.html extend.html   \
+         fileorg.html glossary.html img001.gif img002.gif img003.gif       \
+         img004.gif img005.gif index.html intro.html iterate.html          \
+         mount.html questions.html rdwt.html references.html reftoobj.html \
+         reftoreg.html select.html selectc.html title.html util.html
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/answers.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/answers.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/answers.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,322 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Introductory Topics Quiz with Answers  
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<FONT COLOR="#c101cd">Introductory Topics Quiz 
+    with Answers</FONT>
+</H1>
+
+<hr noshade size=1>
+
+
+<h3>Section 2: HDF File Organization</h3>
+<ol>
+
+<li>Name and describe the two primary objects that can be stored in an HDF5
+   file.
+
+   <dl>
+   <dt><b>Answers:</b> 
+   <dd><em>Group:</em> A grouping structure containing zero or more 
+       HDF5 objects, together with supporting metadata.
+   <dd><em>Dataset:</em> A multidimensional array of data elements, 
+       together with supporting metadata.
+   </dl>
+
+<p>
+<li>What is an attribute?
+
+   <dl>
+   <dt><b>Answer:</b> 
+   <dd>An HDF5 attribute is a user-defined HDF5 structure that provides extra
+       information about an HDF5 object.
+   </dl>
+
+<p>
+<li>Give the path name for an object called <code>harry</code> that is 
+   a member of a group called <code>dick</code>, which, in turn, is a 
+   member of the root group.
+
+   <dl>
+   <dt><b>Answer:</b>
+   <dd><code>/dick/harry</code>
+   </dl>
+
+
+</ol>
+<h3>Section 3: The HDF5 API</h3>
+<ol>
+
+<li>Describe the purpose of each of the following HDF5 APIs:
+
+    <dir>
+    H5A, H5D, H5E, H5F, H5G, H5T, H5Z
+    </dir>
+
+   <dl>
+   <dt><b>Answers:</b>
+   <dir>   
+    H5A: Attribute access and manipulation routines     <br>
+    H5D: Dataset access and manipulation routines       <br>
+    H5E: Error handling routines                        <br>
+    H5F: File access routines                           <br>
+    H5G: Routines for creating and operating on groups  <br>
+    H5T: Routines for creating and manipulating the 
+         datatypes of dataset elements                  <br>
+    H5Z: Data compression routines
+   </dir>
+   </dl>
+
+
+</ol>
+<h3>Section 4: Creating an HDF5 File</h3>
+<ol>
+
+<li>What two HDF5 routines must be called to create an HDF5 file?
+
+   <dl>
+   <dt><b>Answer:</b>
+   <dd><code>H5Fcreate</code> and <code>H5Fclose</code>.
+   </dl>
+
+<p>
+<li>What include file must be included in any file that uses the HDF5 library?
+
+   <dl>
+   <dt><b>Answer:</b>
+   <dd><code>hdf5.h</code> must be included because it contains definitions 
+       and declarations used by the library.
+   </dl>
+
+<p>
+<li>An HDF5 file is never completely empty because as soon as it is created, 
+   it automatically contains a certain primary object.  What is that object?
+
+   <dl>
+   <dt><b>Answer:</b>
+   <dd>The root group.
+   </dl>
+
+
+</ol>
+<h3>Section 5: Creating a Dataset</h3>
+<ol>
+
+<li>Name and describe two major datatype categories.
+
+   <dl>
+   <dt><b>Answers:</b>
+   <dd><em>Atomic datatype:</em> 
+       An atomic datatype cannot be decomposed into smaller units at the 
+       API level.
+       <br>
+       <em>Compound datatype:</em> 
+       A compound datatype is a collection of atomic and compound datatypes, 
+       or small arrays of such types.
+   </dl>
+
+<p>
+<li>List the HDF5 atomic datatypes. Give an example of a predefined datatype.
+
+   <dl>
+   <dt><b>Answers:</b>
+   <dd>There are six HDF5 atomic datatypes: integer, floating point,
+        date and time, character string, bit field, and opaque.
+        Examples of predefined datatypes include the following:
+        <dir>
+            <code>H5T_IEEE_F32LE</code> 
+                - 4-byte little-endian, IEEE floating point   <br>
+            <code>H5T_NATIVE_INT</code> 
+                - native integer  
+        </dir>
+   </dl>
+
+<p>
+<li>What does the dataspace describe? What are the major characteristics of 
+   the simple dataspace? 
+
+   <dl>
+   <dt><b>Answers:</b>
+   <dd>The dataspace describes the dimensionality of the dataset. 
+        A simple dataspace is characterized by its rank and dimension sizes.  
+   </dl>
+       
+<p>
+<li>What information needs to be passed to the H5Dcreate function, i.e.,
+   what information is needed to describe a dataset at creation time?
+
+   <dl>
+   <dt><b>Answer:</b>
+   <dd>The dataset location, name, dataspace, datatype, and dataset 
+       creation property list.
+   </dl>
+
+
+</ol>
+<h3>Section 6: Reading from and Writing to a Dataset</h3>
+<ol>
+
+<li>What are six pieces of information which need to be specified for
+   reading and writing a dataset?
+
+   <dl>
+   <dt><b>Answer:</b>
+   <dd>The dataset identifier, the dataset's datatype and dataspace in 
+       memory, the dataspace in the file, the dataset transfer property
+       list, and a data buffer.
+   </dl>
+
+<p>
+<li>Why are both the memory dataspace and file dataspace needed for 
+   read/write operations, while only the memory datatype is required?
+
+   <dl>
+   <dt><b>Answer:</b>
+   <dd>A dataset's file datatype is not required for a read/write operation
+       because the file datatype is specified when the dataset is created 
+       and cannot be changed. Both file and memory dataspaces are required 
+       for dataset subsetting and for performing partial I/O operations.  
+   </dl>
+
+<p>
+<li>What does the line 
+    <br>&nbsp;&nbsp;&nbsp;
+    <code>DATASPACE { SIMPLE (4 , 6 ) / ( 4 , 6 ) } </code> 
+    <br>in Figure 6.1 mean?
+
+   <dl>
+   <dt><b>Answer:</b>
+   <dd>It means that the dataset <code>dset</code> has a simple dataspace 
+      with the current dimensions (4,6) and the maximum size of the 
+      dimensions (4,6).
+   </dl>
+
+
+</ol>
+<h3>Section 7: Creating an Attribute</h3>
+<ol>
+
+<li>What is an attribute?
+
+   <dl>
+   <dt><b>Answer:</b>
+   <dd>An attribute is a dataset attached to an object. It describes the 
+       nature and/or the intended usage of the object.
+   </dl>
+
+<p>
+<li>Can partial I/O operations be performed on attributes?
+
+   <dl>
+   <dt><b>Answer:</b>
+   <dd>No.
+   </dl>
+
+
+</ol>
+<h3>Section 8: Creating a Group</h3>
+<ol>
+
+<li>What are the two primary objects that can be included in a group?
+
+   <dl>
+   <dt><b>Answer:</b>
+   <dd>A group and a dataset.
+   </dl>
+
+
+</ol>
+<h3>Section 9: Creating Groups Using Absolute and Relative Names</h3>
+<ol>
+
+<li>Group names can be specified in two ways.  What are these two types 
+   of group names?
+
+   <dl>
+   <dt><b>Answer:</b>
+   <dd>Relative and absolute.
+   </dl>
+
+<p>
+<li>You have a dataset named <code>moo</code> in the group 
+   <code>boo</code>, which is in the group <code>foo</code>, 
+   which, in turn, is in the root group.  
+   How would you specify an absolute name to access this dataset?
+
+   <dl>
+   <dt><b>Answer:</b>
+   <dd><code>/foo/boo/moo</code>
+   </dl>
+
+
+</ol>
+<h3>Section 10: Creating Datasets in Groups</h3>
+<ol>
+
+<li>Describe a way to access the dataset <code>moo</code> described in 
+   the previous section (Section&nbsp;9, question&nbsp;2) using a 
+   relative name.
+   Describe a way to access the same dataset using an absolute name.
+
+   <dl>
+   <dt><b>Answers:</b>
+       <ol>
+        <li>Access the group <code>/foo</code> and get the group ID.
+            Access the group <code>boo</code> using the group ID obtained 
+            in Step&nbsp;1.
+            Access the dataset <code>moo</code> using the group ID obtained 
+            in Step&nbsp;2.
+            <pre>
+gid = H5Gopen (file_id, "/foo", 0);       /* absolute path */
+gid1 = H5Gopen (gid, "boo", 0);           /* relative path */
+did = H5Dopen (gid1, "moo");              /* relative path */  </pre>
+  
+        <li>Access the group <code>/foo</code> and get the group ID.
+            Access the dataset <code>boo/moo</code> with the group ID 
+            just obtained.
+            <pre>
+gid = H5Gopen (file_id, "/foo", 0);       /* absolute path */
+did = H5Dopen (gid, "boo/moo");           /* relative path */  </pre>
+             
+        <li>Access the dataset with an absolute path.
+            <pre>
+did = H5Dopen (file_id, "/foo/boo/moo");  /* absolute path */  </pre>
+       </ol>
+   </dl>
+
+</ol>
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+     src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/api.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/api.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/api.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,151 @@
+<HTML><HEAD>
+<TITLE>The HDF5 API 
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">The HDF5 API</FONT>
+</BIG></BIG></BIG></H1>
+
+
+<hr noshade size=1>
+
+<BODY>
+<P>
+The HDF5 library provides several interfaces, or APIs.
+These APIs provide routines for creating, accessing, and manipulating
+HDF5 files and objects. 
+<P>
+The library itself is implemented in C.  To facilitate the work of 
+FORTRAN90 and Java programmers, HDF5 function wrappers have been developed 
+in each of these languages.
+At the time of this writing, a set of C++ wrappers is in development.
+This tutorial discusses the use of the C functions and the FORTRAN wrappers.
+<P>
+All C routines in the HDF5 library begin with a prefix of the form <I>H5</I>*, 
+where * is one or two uppercase letters indicating the type of object on which the 
+function operates.  
+The FORTRAN wrappers come in the form of subroutines that begin with 
+<I>h5</I> and end with <I>_f</I>. The APIs are listed below:
+<P>
+<table width="65%" border="2" cellpadding="4">
+  <tr bgcolor="#FFCC99" bordercolor="#FFFFFF"> 
+    <td width="11%"> 
+      <div align="center"><b>API </b></div>
+    </td>
+    <td width="89%"> 
+      <div align="left"><b>DESCRIPTION</b> </div>
+    </td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td width="11%" bgcolor="#99CCCC"> 
+      <div align="center"><b>H5</b></div>
+    </td>
+    <td width="89%">Library Functions: general-purpose H5 functions</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td width="11%" bgcolor="#99CCCC"> 
+      <div align="center"><b>H5A</b></div>
+    </td>
+    <td width="89%">Annotation Interface: attribute access and manipulation 
+     routines</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td width="11%" bgcolor="#99CCCC"> 
+      <div align="center"><b>H5D</b></div>
+    </td>
+    <td width="89%">Dataset Interface: dataset access and manipulation 
+     routines</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td width="11%" bgcolor="#99CCCC"> 
+      <div align="center"><b>H5E</b></div>
+    </td>
+    <td width="89%">Error Interface: error handling routines</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td width="11%" bgcolor="#99CCCC"> 
+      <div align="center"><b>H5F</b></div>
+    </td>
+    <td width="89%">File Interface: file access routines</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td width="11%" bgcolor="#99CCCC"> 
+      <div align="center"><b>H5G</b></div>
+    </td>
+    <td width="89%">Group Interface: group creation and operation routines</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td width="11%" bgcolor="#99CCCC"> 
+      <div align="center"><b>H5I</b></div>
+    </td>
+    <td width="89%">Identifier Interface: identifier routines</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td width="11%" bgcolor="#99CCCC"> 
+      <div align="center"><b>H5P</b></div>
+    </td>
+    <td width="89%">Property List Interface: object property list manipulation 
+      routines</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td width="11%" bgcolor="#99CCCC"> 
+      <div align="center"><b>H5R</b></div>
+    </td>
+    <td width="89%">Reference Interface: reference routines</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td width="11%" bgcolor="#99CCCC"> 
+      <div align="center"><b>H5S</b></div>
+    </td>
+    <td width="89%">Dataspace Interface: dataspace definition and access
+     routines</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td width="11%" bgcolor="#99CCCC"> 
+      <div align="center"><b>H5T</b></div>
+    </td>
+    <td width="89%">Datatype Interface: datatype creation and manipulation 
+     routines</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td width="11%" bgcolor="#99CCCC"> 
+      <div align="center"><b>H5Z</b></div>
+    </td>
+    <td width="89%">Compression Interface: compression routine(s)</td>
+  </tr>
+</table>
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+     src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/bighdf2sp.JPG
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/bighdf2sp.JPG
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/compound.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/compound.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/compound.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,234 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Compound Datatypes 
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Compound Datatypes</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+    <LI><A HREF="#def">Creating Compound Datatypes</A>
+    <LI>Programming Example 
+<UL>
+      <LI> <A HREF="#desc">Description</A> 
+      <LI> <A HREF="#rem">Remarks</A> 
+      <LI> <A HREF="#fc">File Contents</A>
+</UL>
+</UL>
+<HR>
+<A NAME="def">
+<H2>Creating Compound Datatypes</H2>
+A compound datatype is similar to a struct in C or a common block in 
+FORTRAN. It is a collection of one or more atomic types or small arrays of 
+such types. To create and use a compound datatype you need to be familiar 
+with various properties of the compound datatype: 
+<UL>
+  <LI>It is of class <strong>compound</strong>. 
+  <LI>It has a fixed total size, in bytes. 
+  <LI>It consists of zero or more members (defined in any order) with 
+      unique names and occupying non-overlapping regions within the datum. 
+  <LI>Each member has its own datatype. 
+  <LI>Each member is referenced by an index number between zero and <em>N</em>-1, 
+      where <em>N</em> is the number of members in the compound datatype. 
+  <LI>Each member has a name which is unique among its siblings in a 
+      compound datatype. 
+  <LI>Each member has a fixed byte offset, which locates the first byte 
+      (smallest byte address) of that member in the compound datatype. 
+  <LI>Each member can be a small array of up to four dimensions.
+</UL>
+Properties of members of a compound datatype are defined when the 
+member is added to the compound datatype and cannot be subsequently modified. 
+<P>
+Compound datatypes must be built out of other datatypes. First, one 
+creates an empty compound datatype and specifies its total size. Then 
+members are added to the compound datatype in any order. 
+
+<H2> Programming Example</H2>
+<A NAME="desc">
+<H3><U>Description</U></H3>      
+
+This example shows how to create a compound datatype, write an array 
+to the file which uses the compound datatype, and read back subsets of 
+the members.
+<p> 
+<UL>
+[ <A HREF="examples/h5_compound.c">C Example</A> ] - <code>h5_compound.c</code>
+<BR>
+[ <A HREF="examples/compound.f90">Fortran 90 Example</A> ] 
+- <code>compound.f90</code>
+<BR>
+[ <A HREF="examples/java/Compound.java">Java Example</A> ] - <code>Compound.java</code>
+</UL>
+The program outputs the following:
+<PRE>
+
+Field c : 
+1.0000 0.5000 0.3333 0.2500 0.2000 0.1667 0.1429 0.1250 0.1111 0.1000 
+
+Field a : 
+0 1 2 3 4 5 6 7 8 9 
+
+Field b : 
+0.0000 1.0000 4.0000 9.0000 16.0000 25.0000 36.0000 49.0000 64.0000 81.0000 
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+</PRE>
+
+<A NAME="rem">
+<H3><U>Remarks</U></H3>
+<UL>
+<LI><CODE>H5Tcreate</CODE> creates a new datatype of the specified class with
+the specified number of bytes.
+<PRE>
+    hid_t H5Tcreate ( H5T_class_t class, size_t size ) 
+</PRE>
+<UL>
+<LI>The <I>class</I> parameter specifies the datatype to create.
+Currently only the <CODE>H5T_COMPOUND</CODE> datatype class is supported with this
+function.
+<LI>The <I>size</I> parameter specifies the number of bytes in the
+datatype to create.
+</UL>
+<P>
+<LI><CODE>H5Tinsert</CODE> adds a member to the compound datatype specified by
+<I>type_id</I>. 
+<PRE>
+   herr_t H5Tinsert ( hid_t type_id, const char * name, off_t offset, 
+                      hid_t field_id ) 
+</PRE>
+<UL>
+<LI>The <I>type_id</I> parameter is the identifier of the compound datatype
+to modify.
+<LI>The <I>name</I> parameter is the name of the field to insert.  The new
+member name must be unique within a compound datatype.
+<LI>The <I>offset</I> parameter is the offset in the memory structure of
+the field to insert.
+
+The library defines the <CODE>HOFFSET</CODE> macro to compute the offset of a member within 
+a struct: 
+<PRE>
+  HOFFSET ( s, m ) 
+</PRE>
+This macro computes the offset of member <I>m</I> within a struct 
+variable <I>s</I>. 
+
+<LI>The <I>field_id</I> parameter is the datatype identifier of the
+field to insert.
+</UL>
+<P>
+<LI><CODE>H5Tclose</CODE> releases a datatype.
+<PRE>
+   herr_t H5Tclose ( hid_t type_id ) 
+</PRE>
+The <I>type_id</I> parameter is the identifier of the datatype to release.
+</UL>
+<A NAME="fc">
+<H3><U>File Contents</U></H3>
+
+<PRE>
+HDF5 "SDScompound.h5" {
+GROUP "/" {
+   DATASET "ArrayOfStructures" {
+      DATATYPE {
+         H5T_STD_I32BE "a_name";
+         H5T_IEEE_F32BE "b_name";
+         H5T_IEEE_F64BE "c_name";
+      }
+      DATASPACE { SIMPLE ( 10 ) / ( 10 ) }
+      DATA {
+         {
+            [ 0 ],
+            [ 0 ],
+            [ 1 ]
+         },
+         {
+            [ 1 ],
+            [ 1 ],
+            [ 0.5 ]
+         },
+         {
+            [ 2 ],
+            [ 4 ],
+            [ 0.333333 ]
+         },
+         {
+            [ 3 ],
+            [ 9 ],
+            [ 0.25 ]
+         },
+         {
+            [ 4 ],
+            [ 16 ],
+            [ 0.2 ]
+         },
+         {
+            [ 5 ],
+            [ 25 ],
+            [ 0.166667 ]
+         },
+         {
+            [ 6 ],
+            [ 36 ],
+            [ 0.142857 ]
+         },
+         {
+            [ 7 ],
+            [ 49 ],
+            [ 0.125 ]
+         },
+         {
+            [ 8 ],
+            [ 64 ],
+            [ 0.111111 ]
+         },
+         {
+            [ 9 ],
+            [ 81 ],
+            [ 0.1 ]
+         }
+      }
+   }
+}
+}
+</PRE>
+
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/crtatt.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/crtatt.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/crtatt.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,343 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Creating an Attribute
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Creating an Attribute</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+    <LI> <A HREF="#def">What is an Attribute</A>?
+    <LI> Programming Example 
+    <UL>
+      <LI> <A HREF="#desc">Description</A> 
+      <LI> <A HREF="#rem">Remarks</A> 
+      <LI> <A HREF="#fc">File Contents</A>
+      <LI> <A HREF="#ddl">Attribute Definition in DDL</A>
+    </UL>
+</UL>
+<HR>
+<A NAME="def">
+<H2>What is an Attribute?</h2>
+<P>
+Attributes are small datasets that can be used to describe the nature and/or
+the intended usage of the object they are attached to. In this section, we
+show how to create, read, and write an attribute.
+<P>
+<P>
+<H3>Creating an attribute</H3>
+<P>
+  Creating an attribute is similar to creating a dataset. To create an
+  attribute, the application must specify the object which the attribute is
+  attached to, the datatype and dataspace of the attribute data,
+  and the attribute creation property list.
+<P>
+  The steps to create an attribute are as follows:
+<OL>
+    <LI> Obtain the object identifier that the attribute is to be attached to.
+    <LI> Define the characteristics of the attribute and specify the 
+         attribute creation property list.
+    <UL>
+       <LI> Define the datatype.
+       <LI> Define the dataspace.
+       <LI> Specify the attribute creation property list.
+    </UL>
+    <LI> Create the attribute.
+    <LI> Close the attribute and datatype, dataspace, and 
+         attribute creation property list, if necessary.
+</OL>
+<P>
+ To create and close an attribute, the calling program must use
+<code>H5Acreate</code>/<code>h5acreate_f</code> and 
+<code>H5Aclose</code>/<code>h5aclose_f</code>.  For example: 
+<P>
+<I>C</I>:
+<PRE>
+     attr_id = H5Acreate (dset_id, attr_name, type_id, space_id, creation_prp);
+     status = H5Aclose (attr_id);
+</PRE>
+<I>FORTRAN</I>:
+<PRE>
+     CALL h5acreate_f (dset_id, attr_nam, type_id, space_id, attr_id, &
+                       hdferr, creation_prp=creat_plist_id)
+          <i>or</i>
+     CALL h5acreate_f (dset_id, attr_nam, type_id, space_id, attr_id, hdferr)
+
+     CALL h5aclose_f (attr_id, hdferr)
+</PRE>    
+
+<H3>Reading/Writing an attribute</H3>
+<P>
+  Attributes may only be read or written as an entire object; no partial I/O is
+  supported. Therefore, to perform I/O operations on an attribute, the
+  application needs only to specify the attribute and the attribute's memory
+  datatype.
+<P>
+  The steps to read or write an attribute are as follows.
+<OL>
+    <LI> Obtain the attribute identifier.
+    <LI> Specify the attribute's memory datatype.
+    <LI> Perform the desired operation.
+    <LI> Close the memory datatype if necessary.
+</OL>
+<P>
+To read and/or write an attribute, the calling program must contain the
+<code>H5Aread</code>/<code>h5aread_f</code> and/or 
+<code>H5Awrite</code>/<code>h5awrite_f</code> routines.  For example:
+<P>
+<I>C</I>:
+<PRE>
+    status = H5Aread (attr_id, mem_type_id, buf);
+    status = H5Awrite (attr_id, mem_type_id, buf);
+</PRE>
+<I>FORTRAN</I>:
+<PRE>
+    CALL h5awrite_f (attr_id, mem_type_id, buf, hdferr)  
+    CALL h5aread_f (attr_id, mem_type_id, buf, hdferr)
+</PRE>
+<P>
+<H2> Programming Example</H2>
+<A NAME="desc">
+<H3><U>Description</U></H3>      
+This example shows how to create and write a dataset attribute.
+It opens an existing file <code>dset.h5</code> in C 
+(<code>dsetf.h5</code> in FORTRAN), 
+obtains the identifier of the dataset <code>/dset</code>, 
+defines the attribute's dataspace, creates the dataset attribute, writes
+the attribute, and then closes the attribute's dataspace, attribute, dataset,
+and file. <BR>
+<UL>
+[ <A HREF="examples/h5_crtatt.c">C Example </A> ] - <code>h5_crtatt.c</code><BR>
+[ <A HREF="examples/attrexample.f90">FORTRAN Example</A> ] - <code>attrexample.f90</code><BR>
+[ <A HREF="examples/java/CreateAttribute.java">Java Example </A> ] 
+- <code>CreateAttribute.java</code><BR>
+</UL>
+
+<B>NOTE:</B> To download a tar file of the examples, including a Makefile,
+please go to the <A HREF="references.html">References</A> page.
+
+
+<A NAME="rem">
+<H3><U>Remarks</U></H3>
+<UL>
+<LI><code>H5Acreate</code>/<code>h5acreate_f</code> creates an attribute 
+    which is attached to the object specified by the first parameter, 
+    and returns an identifier.
+<P>
+<I>C</I>:
+<PRE>
+  hid_t H5Acreate (hid_t obj_id, const char *name, hid_t type_id, 
+                   hid_t space_id, hid_t creation_prp) 
+</PRE>
+<I>FORTRAN</I>:
+<PRE>
+  h5acreate_f (obj_id, name, type_id, space_id, attr_id, &
+               hdferr, creation_prp) 
+
+            obj_id        INTEGER(HID_T)
+            name          CHARACTER(LEN=*)
+            type_id       INTEGER(HID_T)
+            space_id      INTEGER(HID_T)
+            attr_id       INTEGER(HID_T)
+            hdferr        INTEGER
+                          (Possible values: 0 on success and -1 on failure)
+            creation_prp  INTEGER(HID_T), OPTIONAL
+
+</PRE>
+<UL>
+   <LI> The <I>obj_id</I> parameter is the identifier of the object that 
+        the attribute is attached to.
+ <P>
+   <LI> The <I>name</I> parameter is the name of the attribute to create.
+<P>
+   <LI> The <I>type_id</I> parameter is the identifier of the 
+        attribute's datatype.
+<P>
+   <LI> The <I>space_id</I> parameter is the identifier of the attribute's 
+        dataspace.
+<P>
+   <LI> The <I>creation_prp</I> parameter is the creation property list
+        identifier.
+        <code>H5P_DEFAULT</code> in C (<code>H5P_DEFAULT_F</code> in FORTRAN)
+        specifies the default creation property list.
+        This parameter is optional in FORTRAN; when it is omitted, 
+        the default creation property list is used.
+<P>
+   <LI> In FORTRAN, the return code for this call is returned in <I>hdferr</I>:
+        0 if successful, -1 if not.  The attribute identifier is returned
+        in <I>attr_id</I>.  In C, the function returns the 
+        attribute identifier if successful and a negative value if not.
+        
+        
+</UL>
+<P>
+<LI><code>H5Awrite</code>/<code>h5awrite_f</code> writes the entire attribute,
+    and returns the status of the write.
+<P>
+<I>C</I>:
+<PRE>
+  herr_t H5Awrite (hid_t attr_id, hid_t mem_type_id, void *buf) 
+</PRE>
+<I>FORTRAN</I>:
+<PRE>
+  h5awrite_f (attr_id, mem_type_id, buf, hdferr)   
+
+            attr_id     INTEGER(HID_T)
+            memtype_id  INTEGER(HID_T)
+            buf         TYPE(VOID)
+            hdferr      INTEGER
+                        (Possible values: 0 on success and -1 on failure)
+
+</PRE>   
+<UL>
+   <LI> The <I>attr_id</I> parameter is the identifier of the attribute 
+        to write.
+<P>
+   <LI> The <I>mem_type_id</I> parameter is the identifier of the 
+        attribute's memory datatype.
+<P>
+   <LI> The <I>buf</I> parameter is the data buffer to write out.
+<P>
+   <LI>In C, this function returns a non-negative value if successful and
+   a negative value, otherwise.  In FORTRAN, the return value is in the
+   <I>hdferr</I> parameter: 0 if successful, -1 otherwise.
+</UL>
+<P>
+<LI> When an attribute is no longer accessed by a program, 
+     <code>H5Aclose</code>/<code>h5aclose_f</code> must be called
+     to release the attribute from use. 
+     The C routine returns a non-negative value if successful;
+     otherwise it returns a negative value.  
+     In FORTRAN, the return value is in the <I>hdferr</I> parameter: 
+     0 if successful, -1 otherwise.
+<P>
+<I>C</I>: 
+<pre>
+  herr_t H5Aclose (hid_t attr_id) 
+</pre>
+
+<I>FORTRAN</I>: 
+<pre>
+  h5aclose_f (attr_id, hdferr)
+
+            attr_id  INTEGER(HID_T)
+            hdferr   INTEGER
+                     (Possible values: 0 on success and -1 on failure)
+
+</pre>
+  <ul>
+  <li> An <code>H5Aclose</code>/<code>h5aclose_f</code> call is mandatory.
+  </ul>
+</UL>
+
+
+
+<A NAME="fc">
+<H3><U>File Contents</U></H3>
+<P>
+The contents of <code>dset.h5</code> (<code>dsetf.h5</code> for FORTRAN) and the 
+attribute definition are shown below:
+<P>
+<B>Fig. 7.1a</B> &nbsp;  <I><code>dset.h5</code> in DDL</I>
+
+<PRE>
+HDF5 "dset.h5" {
+GROUP "/" {
+   DATASET "dset" {
+      DATATYPE { H5T_STD_I32BE }
+      DATASPACE { SIMPLE ( 4, 6 ) / ( 4, 6 ) }
+      DATA {
+         1, 2, 3, 4, 5, 6,
+         7, 8, 9, 10, 11, 12,
+         13, 14, 15, 16, 17, 18,
+         19, 20, 21, 22, 23, 24
+      }
+      ATTRIBUTE "attr" {
+         DATATYPE { H5T_STD_I32BE }
+         DATASPACE { SIMPLE ( 2 ) / ( 2 ) }
+         DATA {
+            100, 200
+         }
+      }
+   }
+}
+}
+</PRE>
+<B>Fig. 7.1b</B> &nbsp;  <I><code>dsetf.h5</code> in DDL</I>
+<PRE>
+HDF5 "dsetf.h5" {
+GROUP "/" {
+   DATASET "dset" {
+      DATATYPE { H5T_STD_I32BE }
+      DATASPACE { SIMPLE ( 6, 4 ) / ( 6, 4 ) }
+      DATA {
+         1, 7, 13, 19,
+         2, 8, 14, 20,
+         3, 9, 15, 21,
+         4, 10, 16, 22,
+         5, 11, 17, 23,
+         6, 12, 18, 24
+      }
+      ATTRIBUTE "attr" {
+         DATATYPE { H5T_STD_I32BE }
+         DATASPACE { SIMPLE ( 2 ) / ( 2 ) }
+         DATA {
+            100, 200
+         }
+      }
+   }
+}
+}
+</PRE>
+
+
+
+<A NAME="ddl">
+<h3><U>Attribute Definition in DDL</U></H3>
+<B>Fig. 7.2</B> &nbsp;  <I>HDF5 Attribute Definition</I>
+<PRE>
+
+     &lt;attribute&gt ::= ATTRIBUTE "&lt;attr_name&gt;" { &lt;datatype&gt
+                                               &lt;dataspace&gt
+                                               &lt;data&gt  }
+
+</PRE>
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/crtdat.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/crtdat.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/crtdat.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,497 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Creating a Dataset
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Creating a Dataset</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+    <LI> <A HREF="#def">What is a Dataset</A>?
+    <LI> Programming Example 
+    <UL>
+      <LI> <A HREF="#desc">Description</A> 
+      <LI> <A HREF="#rem">Remarks</A> 
+      <LI> <A HREF="#fc">File Contents</A>
+      <LI> <A HREF="#ddl">Dataset Definition in DDL</A>
+    </UL>
+</UL>
+<HR>
+<A NAME="def">
+<H2>What is a Dataset?</h2>
+<P>
+A dataset is a multidimensional array of data elements, together with
+supporting metadata. To create a dataset, the application program must specify
+the location at which to create the dataset, the dataset name, the datatype 
+and dataspace of the data array, and the dataset creation property list.
+<P>
+  <H3> Datatypes</H3>
+    A datatype is a collection of datatype properties, all of which can
+    be stored on disk, and which when taken as a whole, provide complete
+    information for data conversion to or from that datatype.
+<P>
+    There are two categories of datatypes in HDF5: atomic and compound 
+    datatypes. An <i>atomic datatype</i> is a datatype which cannot be 
+    decomposed into smaller datatype units at the API level. 
+    These include the integer, float, date and time, string, bitfield, and
+    opaque datatypes. 
+    A <i>compound datatype</i> is a collection of one or more
+    atomic datatypes and/or small arrays of such datatypes.
+<P>
+    Figure 5.1 shows the HDF5 datatypes. Some of the HDF5 predefined
+    atomic datatypes are listed in Figures 5.2a and 5.2b. 
+    In this tutorial, we consider only HDF5 predefined integers. 
+    For further information on datatypes, see 
+    <a href="../Datatypes.html">The Datatype Interface (H5T)</a> in the 
+    <cite>HDF5 User's Guide</cite>.
+<P>
+    <B>Fig 5.1</B> &nbsp;  <I>HDF5 datatypes</I>
+<PRE>
+
+                                          +--  integer
+                                          +--  floating point
+                        +---- atomic  ----+--  date and time
+                        |                 +--  character string
+       HDF5 datatypes --|                 +--  bitfield
+                        |                 +--  opaque
+                        |
+                        +---- compound
+
+</PRE>
+
+<table width="100%" border="0" cellpadding="4">
+<tr><td valign=top>
+
+    <B>Fig. 5.2a</B> &nbsp;  <I>Examples of HDF5 predefined datatypes</I>
+
+<table width="95%" border="1" cellpadding="0">
+  <tr bgcolor="#ffcc99" bordercolor="#FFFFFF"> 
+    <td width="20%"><b>Datatype</b></td>
+    <td width="80%"><b>Description</b></td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><code>H5T_STD_I32LE</code></td>
+    <td width="80%">Four-byte, little-endian, signed, two's complement integer</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><code>H5T_STD_U16BE</code></td>
+    <td width="80%">Two-byte, big-endian, unsigned integer</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><code>H5T_IEEE_F32BE</code></td>
+    <td width="80%">Four-byte, big-endian, IEEE floating point</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><code>H5T_IEEE_F64LE</code></td>
+    <td width="80%">Eight-byte, little-endian, IEEE floating point</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><code>H5T_C_S1</code></td>
+    <td width="80%">One-byte, null-terminated string of eight-bit characters</td>
+  </tr>
+</table>
+
+</td><td valign=top>
+
+    <B>Fig. 5.2b</B> &nbsp;  <I>Examples of HDF5 predefined native datatypes</I>
+<table width="95%" border="1" cellpadding="4">
+  <tr bgcolor="#ffcc99" bordercolor="#FFFFFF"> 
+    <td width="20%"><b>Native Datatype</b></td>
+    <td width="80%"><b>Corresponding C or FORTRAN Type</b></td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><B>C:</B></td>
+    <td width="80%">&nbsp; </td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><code>H5T_NATIVE_INT</code></td>
+    <td width="80%">int</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><code>H5T_NATIVE_FLOAT</code></td>
+    <td width="80%">float</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><code>H5T_NATIVE_CHAR</code></td>
+    <td width="80%">char</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><code>H5T_NATIVE_DOUBLE</code></td>
+    <td width="80%">double</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><code>H5T_NATIVE_LDOUBLE</code></td>
+    <td width="80%">long double</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><B>FORTRAN:</B></td>
+    <td width="80%">&nbsp; </td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><code>H5T_NATIVE_INT</code></td>
+    <td width="80%">integer</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><code>H5T_NATIVE_REAL</code></td>
+    <td width="80%">real</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><code>H5T_NATIVE_DOUBLE</code></td>
+    <td width="80%">double precision</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" width="20%"><code>H5T_NATIVE_CHAR</code></td>
+    <td width="80%">character</td>
+  </tr>
+</table>
+
+</table>
+
+  <H3> Datasets and Dataspaces</H3>
+
+    A dataspace describes the dimensionality of the data array. A dataspace
+    is either a regular N-dimensional array of data points, called a simple
+    dataspace, or a more general collection of data points organized in
+    another manner, called a complex dataspace. Figure 5.3 shows HDF5 dataspaces.
+    In this tutorial, we only consider simple dataspaces.
+<P>
+    <B>Fig 5.3</B> &nbsp;  <I>HDF5 dataspaces</I>
+<PRE>
+
+                         +-- simple
+       HDF5 dataspaces --|
+                         +-- complex
+
+</PRE>
+    The dimensions of a dataset can be fixed (unchanging), or they may be
+    unlimited, which means that they are extensible. A dataspace can also
+    describe a portion of a dataset, making it possible to do partial I/O
+    operations on selections.
+
+ <h3>Dataset Creation Property Lists</H3>
+
+    When creating a dataset, HDF5 allows the user to specify how raw data is
+    organized and/or compressed on disk. This information is 
+    stored in a dataset creation property list and passed to the dataset
+    interface. The raw data on disk can be stored contiguously (in the same 
+    linear way that it is organized in memory), partitioned into chunks, 
+    stored externally, etc. In this tutorial, we use the 
+    default dataset creation property list; that is, contiguous storage layout
+    and no compression are used. For more information about 
+    dataset creation property lists, 
+    see <a href="../Datasets.html">The Dataset Interface (H5D)</a>
+    in the <cite>HDF5 User's Guide</cite>.
+
+<P>
+In HDF5, datatypes and dataspaces are independent objects which are created
+separately from any dataset that they might be attached to. Because of this,
+the creation of a dataset requires definition of the datatype and dataspace.
+In this tutorial, we use HDF5 predefined datatypes (integer) and consider
+only simple dataspaces. Hence, only the creation of dataspace objects is
+needed.
+<P>
+
+To create an empty dataset (no data written) the following steps need to be
+taken:
+<OL>
+<LI> Obtain the location identifier where the dataset is to be created.
+<LI> Define the dataset characteristics and the dataset creation property list.
+ <UL>
+   <LI> Define a datatype.
+   <LI> Define a dataspace.
+   <LI> Specify the dataset creation property list.
+</UL>
+<LI> Create the dataset.
+<LI> Close the datatype, the dataspace, and the property list if necessary.
+<LI> Close the dataset.
+</OL>
+To create a simple dataspace, the calling program must contain a
+call to create and close the dataspace.  For example:
+<P>
+<I>C</I>:
+<PRE>
+   space_id = H5Screate_simple (rank, dims, maxdims);
+   status = H5Sclose (space_id );
+</PRE>
+<I>FORTRAN</I>:
+<PRE>
+   CALL h5screate_simple_f (rank, dims, space_id, hdferr, maxdims=max_dims)
+        <i>or</i>
+   CALL h5screate_simple_f (rank, dims, space_id, hdferr)
+
+   CALL h5sclose_f (space_id, hdferr)
+</PRE>
+
+To create a dataset, the calling program must contain calls to create
+and close the dataset. For example:
+<P>
+<I>C</I>:
+<PRE>
+   dset_id = H5Dcreate (hid_t loc_id, const char *name, hid_t type_id,
+                          hid_t space_id, hid_t creation_prp);
+   status = H5Dclose (dset_id);
+</PRE>
+<I>FORTRAN</I>:
+<PRE>
+   CALL h5dcreate_f (loc_id, name, type_id, space_id, dset_id, &
+                     hdferr, creation_prp=creat_plist_id)
+        <i>or</i>
+   CALL h5dcreate_f (loc_id, name, type_id, space_id, dset_id, hdferr)
+
+   CALL h5dclose_f (dset_id, hdferr)
+</PRE>
+If using the pre-defined datatypes in FORTRAN, then a call must
+be made to initialize and terminate access to the pre-defined datatypes: 
+<PRE>
+  CALL h5init_types_f (hdferr) 
+  CALL h5close_types_f (hdferr)
+</PRE>
+<code>h5init_types_f</code> must be called before any HDF5 library 
+subroutine calls are made; 
+<code>h5close_types_f</code> must be called after the final HDF5 library
+subroutine call.
+See the programming example below for an illustration of the use of 
+these calls.
+
+<P>
+<H2> Programming Example</H2>
+<A NAME="desc">
+<H3><U>Description</U></H3>      
+The following example shows how to create an empty dataset.
+It creates a file called <code>dset.h5</code> in the C version 
+(<code>dsetf.h5</code> in Fortran), defines the dataset dataspace, creates a
+dataset which is a 4x6 integer array, and then closes the dataspace,
+the dataset, and the file. <BR>
+<UL>
+[ <A HREF="examples/h5_crtdat.c">C Example</A> ] 
+    -- <code>h5_crtdat.c</code><BR>
+[ <A HREF="examples/dsetexample.f90">Fortran Example</A> ] 
+    -- <code>dsetexample.f90</code><BR>
+[ <A HREF="examples/java/CreateDataset.java">Java Example</A> ] 
+    -- <code>CreateDataset.java</code>
+</UL> 
+
+<B>NOTE:</B> To download a tar file of the examples, including a Makefile, 
+please go to the <A HREF="references.html">References</A> page of this tutorial.
+
+<A NAME="rem">
+<H3><U>Remarks</U></H3>
+<UL>
+<LI><code>H5Screate_simple</code>/<code>h5screate_simple_f</code> 
+creates a new simple dataspace and returns a dataspace identifier.
+<PRE>
+<I>C</I>:
+  hid_t H5Screate_simple (int rank, const hsize_t * dims, 
+                          const hsize_t * maxdims)
+<I>FORTRAN</I>:
+  h5screate_simple_f (rank, dims, space_id, hdferr, maxdims) 
+
+            rank        INTEGER
+            dims(*)     INTEGER(HSIZE_T)
+            space_id    INTEGER(HID_T)
+            hdferr      INTEGER 
+                        (Valid values: 0 on success and -1 on failure)
+            maxdims(*)  INTEGER(HSIZE_T), OPTIONAL
+</PRE>
+<UL>
+   <LI> The <I>rank</I> parameter specifies the rank, i.e., the number of 
+       dimensions, of the dataset.
+
+   <LI> The <I>dims</I> parameter specifies the size of the dataset.
+
+   <LI>The <I>maxdims</I> parameter specifies the upper limit on the 
+       size of the dataset.
+       If this parameter is NULL in C (or not specified in FORTRAN), 
+      then the upper limit is the same as the dimension
+      sizes specified by the <I>dims</I> parameter.
+   <LI>The function returns the dataspace identifier in C if successful;
+       otherwise it returns a negative value.  
+       In FORTRAN, the dataspace identifier
+   is returned in the <I>space_id</I> parameter.  If the call is successul
+   then a 0 is returned in <I>hdferr</I>; otherwise a -1 is returned.
+</UL>
+<P>
+<LI><code>H5Dcreate</code>/<code>h5dcreate_f</code> creates a dataset 
+at the specified location and returns a dataset identifier.
+<PRE>
+<I>C</I>:
+  hid_t H5Dcreate (hid_t loc_id, const char *name, hid_t type_id, 
+                   hid_t space_id, hid_t creation_prp) 
+<I>FORTRAN</I>:
+  h5dcreate_f (loc_id, name, type_id, space_id, dset_id, & 
+               hdferr, creation_prp) 
+
+            loc_id        INTEGER(HID_T)
+            name          CHARACTER(LEN=*)
+            type_id       INTEGER(HID_T)
+            space_id      INTEGER(HID_T)
+            dset_id       INTEGER(HID_T)
+            hdferr        INTEGER 
+                          (Valid values: 0 on success and -1 on failure)
+            creation_prp  INTEGER(HID_T), OPTIONAL
+</PRE>
+<UL>
+   <LI> The <I>loc_id</I> parameter is the location identifier.
+<P>
+   <LI> The <I>name</I> parameter is the name of the dataset to create.
+
+<P>
+   <LI> The <I>type_id</I> parameter specifies the datatype identifier. 
+
+<P>
+   <LI> The <I>space_id</I> parameter is the dataspace identifier.
+
+<P>
+   <LI> The <I>creation_prp</I> parameter specifies the 
+      dataset creation property list.
+      <code>H5P_DEFAULT</code> in C and <code>H5P_DEFAULT_F</code> in FORTRAN
+      specify the default dataset creation property list. 
+      This parameter is optional in FORTRAN; if it is omitted,
+      the default dataset creation property list will be used.
+<P>
+   <LI> The C function returns the dataset identifier if successful and
+     a negative value otherwise.  The FORTRAN call returns the
+     dataset identifier in <I>dset_id</I>.  If it is successful, then 0 is
+     returned in <I>hdferr</I>; otherwise a -1 is returned.
+
+</UL>
+<P>
+<LI><code>H5Dcreate</code>/<code>h5dcreate_f</code> creates an empty array 
+and initializes the data to 0.
+<P>
+<LI> When a dataset is no longer accessed by a program, 
+<code>H5Dclose</code>/<code>h5dclose_f</code> must be called to release 
+the resource used by the dataset. This call is mandatory.
+<PRE>
+<I>C</I>:
+    hid_t H5Dclose (hid_t dset_id)
+<I>FORTRAN</I>:
+    h5dclose_f (dset_id, hdferr)
+
+            dset_id  INTEGER(HID_T)
+            hdferr   INTEGER 
+                     (Valid values: 0 on success and -1 on failure)
+</PRE>
+</UL>
+
+<A NAME="fc">
+<H3><U>File Contents</U></H3>
+The contents of the file <code>dset.h5</code> (<code>dsetf.h5</code> 
+for FORTRAN) are shown in <B>Figure 5.4</B> and <B>Figures 5.5a </B> 
+and <B>5.5b</B>.
+<P>
+<table border="0">
+<tr align=left><td>
+<B>Figure 5.4</B> &nbsp; <I>Contents of <code>dset.h5</code> ( <code>dsetf.h5</code>)</i>
+</td></tr><tr align=center><td>
+<IMG src="img002.gif"> </PRE>
+</td></tr></table>
+
+<table width="100%" border="1" cellspacing="4" bordercolor="#FFFFFF">
+  <tr bordercolor="#FFFFFF"> 
+    <td width="50%"><b>Figure 5.5a</b> &nbsp; <i><code>dset.h5</code> in DDL</i> </td>
+    <td width="50%"><b>Figure 5.5b</b> &nbsp; <i><code>dsetf.h5</code> in DDL</i> </td>
+  </tr>
+  <tr bordercolor="#000000"> 
+    <td width="35%">
+    <PRE>
+HDF5 "dset.h5" {
+GROUP "/" {
+   DATASET "dset" {
+      DATATYPE { H5T_STD_I32BE }
+      DATASPACE { SIMPLE ( 4, 6 ) / ( 4, 6 ) }
+      DATA {
+         0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0,
+         0, 0, 0, 0, 0, 0
+      }
+   }
+}
+}
+</PRE>
+    </td>
+    <td width="35%"> 
+      <pre>      
+HDF5 "dsetf.h5" {
+GROUP "/" {
+   DATASET "dset" {
+      DATATYPE { H5T_STD_I32BE }
+      DATASPACE { SIMPLE ( 6, 4 ) / ( 6, 4 ) }
+      DATA {
+         0, 0, 0, 0,
+         0, 0, 0, 0,
+         0, 0, 0, 0,
+         0, 0, 0, 0,
+         0, 0, 0, 0,
+         0, 0, 0, 0
+      }
+   }
+}
+}
+</pre>
+    </td>
+  </tr>
+</table>
+
+<p>
+Note in Figures 5.5a and 5.5b that
+<code>H5T_STD_I32BE</code>, a 32-bit Big Endian integer, 
+is an HDF atomic datatype.
+
+
+<A NAME="ddl">
+<h3><U>Dataset Definition in DDL</U></H3>
+The following is the simplified DDL dataset definition:
+<P>
+     <B>Fig. 5.6</B> &nbsp;  <I>HDF5 Dataset Definition</I>
+<PRE>
+      &lt;dataset&gt ::= DATASET "&lt;dataset_name&gt;" { &lt;datatype&gt
+                                               &lt;dataspace&gt
+                                               &lt;data&gt
+                                               &lt;dataset_attribute&gt;* }
+
+      &lt;datatype&gt ::= DATATYPE { &lt;atomic_type&gt }
+
+      &lt;dataspace&gt ::= DATASPACE { SIMPLE &lt;current_dims&gt / &lt;max_dims&gt }
+
+      &lt;dataset_attribute&gt ::= &lt;attribute&gt
+</PRE>
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp@@ncsa.uiuc.edu">
+hdfhelp@@ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones@@ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker@@ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp@@ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/crtfile.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/crtfile.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/crtfile.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,317 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Creating an HDF5 File
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Creating an HDF5 File</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+    <LI> <A HREF="#def">What is an HDF5 file</A>?
+    <LI>Programming Example 
+    <UL>
+      <LI> <A HREF="#desc">Description</A> 
+      <LI> <A HREF="#rem">Remarks</A> 
+      <LI> <A HREF="#fc">File Contents</A>
+      <LI> <A HREF="#ddl">File Definition in DDL</A>
+    </UL>
+</UL>
+<HR>
+<A NAME="def">
+<H2>What is an HDF5 file?</h2>
+<P>
+An HDF5 file is a binary file containing scientific data and supporting
+metadata. The primary types of objects stored in an HDF5 file, groups and 
+datasets, will be discussed in other sections of this tutorial.
+<P>
+To create a file, an application must specify a filename, file
+access mode, file creation property list, and file access property list.
+<P>
+<UL>
+  <LI><B> File access mode:</B><BR>
+    When creating a file, the file access mode specifies the action to 
+    take if the file already exists:
+    <UL>
+    <LI><code>H5F_ACC_TRUNC</code> specifies that if the file already exists,
+      the current contents will be deleted so that the application can rewrite 
+      the file with new data.
+    <LI><code>H5F_ACC_EXCL</code> specifies that the open is to fail if 
+      the file already exists.
+    <LI>If the file does not already exist, the file access parameter is 
+      ignored.
+    <LI>In all cases, the application has both read and write access to
+      a successfully created file.  
+    </UL>
+<P>
+    Note that there are two different access modes for opening exisitng files:
+    <UL>
+    <LI><code>H5F_ACC_RDONLY</code> specifies that the application has 
+      read access but will not be allowed to write any data.
+    <LI><code>H5F_ACC_RDWR</code> specifies that the application has 
+      read and write access.
+    </UL> 
+<P>
+    For further information, see 
+    <a href="../Files.html">The File Interface (H5F)</a> section of the 
+    <cite>HDF5 User's Guide</cite> and
+    the <a href="../RM_H5F.html#File-Create">H5F: File Interface</a> 
+    section of the <cite>HDF5 Reference Manual</cite>.
+<P>
+  <LI><B> File creation property list:</B><BR>
+    The file creation property list is used to control the file metadata.
+    File metadata contains information about the size of the user-block, the
+    size of various file data structures used by the HDF5 library, etc.
+    In this tutorial, the default file creation property list,
+    <code>H5P_DEFAULT</code>, is used.
+<P>
+    The user-block is a fixed-length block of data located at the beginning
+    of the file which is ignored by the HDF5 library.  
+    The user-block may be used to store
+    any data or information found to be useful to applications.
+<P>
+    For further information, see 
+    <a href="../Files.html">The File Interface (H5F)</a> section of the 
+    <cite>HDF5 User's Guide</cite>.
+<P>
+  <LI><B> File access property list:</B><BR>
+    The file access property list is used to control different methods of
+    performing I/O on files. 
+    The default file access property list, <code>H5P_DEFAULT</code>, 
+    is used in this tutorial.
+<P>
+    For further information, see 
+    <a href="../Files.html">The File Interface (H5F)</a> section of the 
+    <cite>HDF5 User's Guide</cite>.
+</UL>
+<P>
+The steps to create and close an HDF5 file are as follows:
+<OL>
+  <LI> Specify the file creation and access property lists, if necessary.
+  <LI> Create the file.
+  <LI> Close the file and close the property lists, if necessary.
+</OL>
+To create an HDF5 file, the calling program must contain calls to 
+create and close the file.  For example:
+<P>
+<I>C</I>:<PRE>
+   file_id = H5Fcreate (filename, access_mode, create_id, access_id);
+   status = H5Fclose (file_id); 
+</PRE>
+<I>FORTRAN</I>:<PRE>
+   CALL h5fcreate_f (filename, access_mode, file_id, hdferr, &
+            creation_prp=create_id, access_prp=access_id)
+        <i>or</i>
+   CALL h5fcreate_f (filename, access_mode, file_id, hdferr)
+
+   CALL h5fclose_f (file_id, hdferr)
+</PRE>
+In FORTRAN, the file creation property list, <code>creation_prp</code>, 
+and file access property list, <code>access_prp</code>, 
+are optional parameters; 
+they can be omitted if the default values are to be used.
+<P>
+<H2>Programming Example</H2>
+<A NAME="desc">
+<H3><U>Description</U></H3>      
+The following example demonstrates how to create and close an HDF5 file. 
+It creates a file called <code>file.h5</code> in the C version,
+<code>filef.h5</code> in FORTRAN, and then closes the file.<P>
+
+<UL>
+[ <A HREF="examples/h5_crtfile.c" target="ExternalWin">C Example</A> ] 
+    -- <code>h5_crtfile.c</code> <BR> 
+[ <A HREF="examples/fileexample.f90" target="ExternalWin">FORTRAN Example</A> ] 
+    -- <code>fileexample.f90</code><BR>  
+[ <A HREF="examples/java/CreateFile.java" target="ExternalWin">Java Example</A> ]  -- <code>CreateFile.java</code>
+</UL>
+<P>
+<B>NOTE:</B> To download a tar file of all of the examples, including
+a Makefile, please go to the <A HREF="references.html">References</A> page.
+
+<A NAME="rem">
+<H3><U>Remarks</U></H3>
+<UL>
+<LI><B>In C:</B>
+   The include file <code>hdf5.h</code> contains definitions and declarations 
+   and must be included in any program that uses the HDF5 library.
+   <BR><B>In FORTRAN:</B>
+   The module <code>HDF5</code> contains definitions and declarations 
+   and must be used in any program that uses the HDF5 library.
+<P>
+<LI><code>H5Fcreate</code>/<code>h5fcreate_f</code> creates 
+  an HDF5 file and returns the file identifier.
+<PRE>
+<I>C</I>:       
+  hid_t H5Fcreate (const char *name, unsigned access_mode, hid_t creation_prp, 
+                   hid_t access_prp) 
+<I>FORTRAN</I>: 
+  h5fcreate_f (name, access_mode, file_id, hdferr, creation_prp, access_prp)
+
+           name          CHARACTER(LEN=*)
+           access_flag   INTEGER 
+                         (Valid values: H5F_ACC_RDWR_F, H5F_ACC_RDONLY_F, 
+                         H5F_ACC_TRUNC_F, H5F_ACC_EXCL_F, H5F_ACC_DEBUG_F)
+           file_id       INTEGER(HID_T)
+           hdferr        INTEGER 
+                         (Valid values: 0 on success and -1 on failure)
+           creation_prp  INTEGER(HID_T), OPTIONAL
+                         (Default value: H5P_DEFAULT_F)
+           access_prp    INTEGER(HID_T), OPTIONAL
+                         (Default value: H5P_DEFAULT_F) 
+         
+</PRE>
+<UL>
+   <LI> The <I>name</I> parameter specifies the name of the file to be created.
+<P>
+   <LI> The <I>access_mode</I> parameter specifies the file access mode. 
+        <code>H5F_ACC_TRUNC</code> (<code>H5F_ACC_TRUNC_F</code> in FORTRAN) 
+        will truncate a file if it already exists.
+<P>
+   <LI> The <I>creation_prp</I> parameter
+        specifies the file creation property list.
+        For C, using <code>H5P_DEFAULT</code> indicates that the 
+        default file creation property list is to be used.  
+        This option is optional in FORTRAN; if it is omitted, the default file 
+        creation property list, <code>H5P_DEFAULT_F</code>, is used.
+<P>
+   <LI> The <I>access_prp</I> parameter
+        specifies the file access property list.
+        For C, using <code>H5P_DEFAULT</code> indicates that the 
+        default file creation property list is to be used.  
+        This option is optional in FORTRAN; if it is omitted, the default file 
+        creation property list, <code>H5P_DEFAULT_F</code>, is used.
+<P>
+   <LI> In C, this function returns the file identifier if successful and 
+        a negative value otherwise.  
+        In FORTRAN, the file identifier is returned in the 
+        <I>file_id</I> parameter.  If the call is successful, 0 (zero) is
+        passed back in the <I>hdferr</I> parameter. Otherwise, <I>hdferr</I>
+        will have a value of -1.  
+
+</UL>
+<P>
+<LI> When a file is no longer accessed by a program, 
+     <code>H5Fclose</code>/<code>h5fclose_f</code>
+     must be called to release the resources used by the file. This call 
+     is mandatory.
+<PRE>
+<I>C</I>:
+    herr_t H5Fclose (hid_t file_id) 
+
+<I>FORTRAN</I>:
+    h5fclose_f(file_id, hdferr)
+</PRE>
+<P>
+<LI>The root group is automatically created when a file is created.
+   Every file has a root group and the path name of the root group is 
+   always <code>/</code>.
+</UL>
+<A NAME="fc">
+<H3><U>File Contents</U></H3>
+The HDF team has developed tools for examining the contents of HDF5 files. 
+The tool used in this tutorial is the HDF5 dumper, <code>h5dump</code>, 
+which displays the file contents in human-readable form.  
+The output of <code>h5dump</code> is an ASCII display formatted according 
+to the HDF5 DDL grammar.
+This grammar is defined, using Backus-Naur Form, in the 
+<a href="../ddl.html">DDL in BNF for HDF5</a>.
+<p>
+To view the file contents, type: 
+<PRE>
+   <B>h5dump &lt;filename&gt</B> 
+</PRE>
+
+Figure 4.1 describes the file contents of <code>file.h5</code> (<code>filef.h5</code>)
+using a directed graph.
+The directed graphs in this tutorial use an oval to represent an HDF5 group
+and a rectangle to represent an HDF5 dataset (none in this example). 
+Arrows indicate the inclusion direction of the contents (none in this example).
+
+<P>
+<B>Fig. 4.1</B> &nbsp;  <I>Contents of <code>file.h5</code> (<code>filef.h5</code>)</I>
+<PRE>
+<!--
+<IMG src="fileh5.jpg" width="205" height="208"></PRE> -->
+<IMG src="img001.gif"></PRE>
+
+Figure 4.2 is the text description of <code>file.h5</code>, as generated by 
+<code>h5dump</code>. The HDF5 file called <code>file.h5</code> contains 
+a group called <code>/</code>, or the <I>root group</I>.
+(The file called <code>filef.h5</code>, 
+created by the FORTRAN version of the example, has the same output except
+that the filename shown is <code>filef.h5</code>.)
+<P>
+<B> Fig. 4.2</B> &nbsp; <I><code>file.h5</code> in DDL</I>
+<PRE>
+
+         HDF5 "file.h5" {
+         GROUP "/" {
+         }
+         }
+
+</PRE>
+<A NAME="ddl">
+
+<h3><U>File Definition in DDL</U></H3>
+
+Figure 4.3 is the simplified DDL file definition for creating an HDF5 file. 
+For simplicity, a simplified DDL is used in this tutorial. A complete and 
+more rigorous DDL can be found in the
+<a href="../ddl.html">DDL in BNF for HDF5</a>, a section of the 
+<cite>HDF5 User's Guide</cite>.  
+<P>
+<B> Fig. 4.3</B> &nbsp; <I>HDF5 File Definition</I>
+<P>
+     The following symbol definitions are used in the DDL:
+<PRE>
+
+        ::=               defined as
+        &lt;tname&gt           a token with the name <I>tname</I>
+        &lt;a&gt | &lt;b&gt         one of &lt;a&gt or &lt;b&gt
+        &lt;a&gt;*              zero or more occurrences of &lt;a&gt
+</PRE>
+     The simplified DDL for file definition is as follows:
+<PRE>
+        &lt;file&gt ::= HDF5 "&lt;file_name&gt;" { &lt;root_group&gt }
+
+        &lt;root_group&gt ::= GROUP "/" { &lt;group_attribute&gt* &lt;group_member&gt;* }
+
+        &lt;group_attribute&gt ::= &lt;attribute&gt
+
+        &lt;group_member&gt ::= &lt;group&gt | &lt;dataset&gt
+</PRE>
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker at ncsa.uiuc.edu -->
+</FONT>
+
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/crtgrp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/crtgrp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/crtgrp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,202 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Creating a Group
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Creating a Group</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+    <LI> <A HREF="#def">What is a Group</A>?
+    <LI> Programming Example 
+    <UL>
+      <LI> <A HREF="#desc">Description</A> 
+      <LI> <A HREF="#rem">Remarks</A> 
+      <LI> <A HREF="#fc">File Contents</A>
+    </UL>
+</UL>
+<HR>
+<A NAME="def">
+<H2>What is a Group?</h2>
+<P>
+An HDF5 group is a structure containing zero or more HDF5 objects. The two
+primary HDF5 objects are groups and datasets. To create a group, the calling
+program must:
+<OL>
+  <LI> Obtain the location identifier where the group is to be created.
+  <LI> Create the group.
+  <LI> Close the group.
+</OL>
+To create a group, the calling program must call 
+<code>H5Gcreate</code>/<code>h5gcreate_f</code>.
+To close the group, <code>H5Gclose</code>/<code>h5gclose_f</code>
+must be called. For example: 
+<P>
+<I>C:</I>
+<PRE>
+  group_id = H5Gcreate (loc_id, name, size_hint);
+  status = H5Gclose (group_id);
+</PRE>
+<I>FORTRAN:</I>
+<PRE>
+  CALL h5gcreate_f (loc_id, name, group_id, error, size_hint=size)
+       <i>or</i>
+  CALL h5gcreate_f (loc_id, name, group_id, error)
+
+
+  CALL h5gclose_f (group_id, error)
+</PRE>
+
+
+<P>
+<H2> Programming Example</H2>
+<A NAME="desc">
+<H3><U>Description</U></H3>
+The following example shows how to create and close a group. It creates a file
+called <code>group.h5</code> (<code>groupf.h5</code> for FORTRAN), 
+creates a group called <code>MyGroup</code> in the root group, 
+and then closes the group and file. <BR>
+<UL>
+[ <A HREF="examples/h5_crtgrp.c">C Example</A> ] 
+    - <code>h5_crtgrp.c</code><BR>
+[ <A HREF="examples/groupexample.f90">FORTRAN Example</A> ] 
+    - <code>groupexample.f90</code><BR>
+[ <A HREF="examples/java/CreateGroup.java">Java Example</A> ] 
+    - <code>CreateGroup.java</code>
+</UL>
+<B>NOTE:</B> To download a tar file of the examples, including a Makefile,
+please go to the <A HREF="references.html">References</A> page.
+
+</PRE>
+<A NAME="rem">
+<H3><U>Remarks</U></H3>
+<UL>
+<LI><code>H5Gcreate</code>/<code>h5gcreate_f</code> creates 
+    a new empty group, named <code>MyGroup</code> and located in the 
+    root group, and returns a group identifier.
+<P>
+<I>C:</I>
+<PRE>
+  hid_t H5Gcreate (hid_t loc_id, const char *name, size_t size_hint) 
+</PRE>
+<I>FORTRAN:</I>
+<PRE>
+  h5gcreate_f (loc_id, name, group_id, hdferr, size_hint)
+
+           loc_id     INTEGER(HID_T)
+           name       CHARACTER(LEN=*)
+           group_id   INTEGER(HID_T)
+           hdferr     INTEGER
+                      (Possible values: 0 on success and -1 on failure)
+           size_hint  INTEGER(SIZE_T), OPTIONAL
+                      (Default value: OBJECT_NAMELEN_DEFAULT_F)
+         
+</PRE>
+<UL>
+   <LI>The <I>loc_id</I> parameter specifies the location at which 
+       to create the group.
+<P>
+   <LI> The <I>name</I> parameter specifies the name of the group to be created.
+<P>
+   <LI> The <I>size_hint</I> parameter specifies how much file space to 
+      reserve to store the
+      names that will appear in the group. If a non-positive value is supplied,
+      then a default size is used. Passing a value of zero is usually adequate
+      since the library is able to dynamically resize the name heap.
+<P>
+   <LI>In FORTRAN, the return value for the routine is passed in
+       <I>hdferr</I>: 0 if successful, -1 otherwise.   The group identifier 
+       is passed back in <I>group_id</I>.  In C, the function returns a valid
+       group identifier if successful and a negative value otherwise.
+    
+</UL>
+<P>
+<LI><code>H5Gclose</code>/<code>h5gclose_f</code> closes the group. 
+    This call is mandatory.
+<P>
+<I>C:</I>
+<PRE>
+  herr_t H5Gclose (hid_t group_id) 
+</PRE>
+<I>FORTRAN:</I>
+<PRE>
+  h5gclose_f (group_id, hdferr)
+
+           group_id  INTEGER(HID_T)
+           hdferr    INTEGER
+                     (Possible values: 0 on success and -1 on failure)
+         
+</PRE>
+</UL>
+
+<A NAME="fc">
+<H3><U>File Contents</U></H3>
+The contents of <code>group.h5</code>  and the 
+definition of the group are shown below.   (The FORTRAN program
+creates the HDF5 file <code>groupf.h5</code> and the resulting DDL shows
+<code>groupf.h5</code> in the first line.)
+<P>
+<table width="80%" border="1" bordercolor="#FFFFFF" cellpadding="6" cellspacing="6">
+  <tr valign=top>
+    <td width="43%"><b>Fig. 8.1</b> &nbsp; <i>The Contents of <code>group.h5</code>.</i> 
+    </td>
+    <td width="10%">&nbsp;
+    </td>
+    <td width="47%"><b>Fig. 8.2</b> &nbsp; <i><code>group.h5</code> in DDL</i> </td>
+  </tr>
+  <tr bordercolor="#000000"> 
+<!--    <td width="47%"><IMG src="grouph5.jpg" width="205" height="333"></td> -->
+    <td align=center><IMG src="img003.gif"></td>
+    <td bordercolor="#FFFFFF">&nbsp; </td>
+    <td valign="top"> 
+      <pre>       
+HDF5 "group.h5" {
+GROUP "/" {
+   GROUP "MyGroup" {
+   }
+}
+}
+</pre>
+    </td>
+  </tr>
+</table>
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/crtgrpar.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/crtgrpar.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/crtgrpar.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,229 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Creating Groups using Absolute and Relative Names
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Creating Groups Using 
+Absolute and Relative Names</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+    <LI> <A HREF="#def">Absolute vs. Relative Names</A>
+    <LI> Programming Example 
+    <UL>
+      <LI> <A HREF="#desc">Description</A> 
+      <LI> <A HREF="#rem">Remarks</A> 
+      <LI> <A HREF="#fc">File Contents</A>
+    </UL>
+</UL>
+<HR>
+<A NAME="def">
+<H2>Absolute vs. Relative Names</h2>
+<P>
+Recall that to create an HDF5 object, we have to specify the location where the
+object is to be created. This location is determined by the identifier of an HDF5
+object and the name of the object to be created. The name of the created
+object can be either an absolute name or a name relative to the specified 
+identifier.
+In the previous example, we used the file identifier and the absolute name 
+<code>/MyGroup</code> to create a group. 
+<P>
+In this section, we discuss HDF5 names and show how to use absolute and 
+relative names.
+
+<H3>Names</H3>
+
+HDF5 object names are a slash-separated list of components. There are few
+restrictions on names: component names may be any length except zero and may
+contain any character except slash (<code>/</code>) and the null terminator. 
+A full name
+may be composed of any number of component names separated by slashes, with any
+of the component names being the special name <code>.</code> (a dot or period).
+A name which begins with a slash is an absolute name which is accessed 
+beginning with the root group of the file; 
+all other names are relative names and and the named object is
+accessed beginning with the specified group. 
+Multiple consecutive slashes in a full name are treated as single slashes
+and trailing slashes are not significant. A special case is the name <code>/</code> (or
+equivalent) which refers to the root group.
+<P>
+Functions which operate on names generally take a location identifier, which
+can be either a file identifier or a group identifier, and perform the lookup 
+with respect to that location. 
+Several possibilities are described in the following table:
+
+<center>
+<table border="1" width=80% bordercolor="#000000" cellpadding="4">
+  <tr bgcolor="#ffcc99" bordercolor="#FFFFFF"> 
+    <td><b> Location Type </b></td>
+    <td><b>Object Name</b></td>
+    <td><b>Description</b></td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc" height="22">File identifier</td>
+    <td height="22" bgcolor="#CCCCCC"> 
+      <div align="center"><code>/foo/bar</code></div>
+    </td>
+    <td height="22">The object <code>bar</code> in group <code>foo</code> 
+      in the root group. </td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc">Group identifier </td>
+    <td bgcolor="#CCCCCC"> 
+      <div align="center"><code>/foo/bar</code></div>
+    </td>
+    <td>The object <code>bar</code> in group <code>foo</code> in the 
+      root group of the file containing the specified group. 
+      In other words, the group identifier's only purpose is to 
+      specify a file. </td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc">File identifier</td>
+    <td bgcolor="#CCCCCC"> 
+      <div align="center">/</div>
+    </td>
+    <td>The root group of the specified file.</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc">Group identifier</td>
+    <td bgcolor="#CCCCCC"> 
+      <div align="center">/</div>
+    </td>
+    <td>The root group of the file containing the specified group.</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc">Group identifier</td>
+    <td bgcolor="#CCCCCC"> 
+      <div align="center"><code>foo/bar</code></div>
+    </td>
+    <td>The object <code>bar</code> in group <code>foo</code> in 
+      the specified group.</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc">File identifier</td>
+    <td bgcolor="#CCCCCC"> 
+      <div align="center"><b>.</b></div>
+    </td>
+    <td>The root group of the file.</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc">Group identifier</td>
+    <td bgcolor="#CCCCCC"> 
+      <div align="center"><b>.</b></div>
+    </td>
+    <td>The specified group.</td>
+  </tr>
+  <tr bordercolor="#FFFFFF"> 
+    <td bgcolor="#99cccc">Other identifier</td>
+    <td bgcolor="#CCCCCC"> 
+      <div align="center"><b>.</b></div>
+    </td>
+    <td>The specified object.</td>
+  </tr>
+</table>
+</center>
+
+
+<P>
+<H2> Programming Example</H2>
+<A NAME="desc">
+<H3><U>Description</U></H3>      
+The following example code shows how to create groups using absolute
+and relative names. It creates three groups: the first two groups are
+created using the file identifier and the group absolute names while the 
+third group is created using a group identifier and a name relative 
+to the specified group. <BR>
+<UL>
+[ <A HREF="examples/h5_crtgrpar.c">C Example</A> ] - <code>h5_crtgrpar.c</code><BR>
+[ <A HREF="examples/grpsexample.f90">Fortran Example</A> ] - <code>grpsexample.f90</code><BR>
+[ <A HREF="examples/java/CreateGroupAR.java">Java Example</A> ] - <code>CreateGroupAR.java</code>
+</UL>
+
+<B>NOTE:</B> To download a tar file of the examples, including a Makefile,
+please go to the <A HREF="references.html">References</A> page.
+
+
+<A NAME="rem">
+<H3><U>Remarks</U></H3>
+<UL>
+<LI><code>H5Gcreate</code>/<code>h5gcreate_f</code> creates a group at the 
+    location specified by a location identifier and a name. 
+    The location identifier can be a file identifier or a group identifier 
+    and the name can be relative or absolute.
+<P>
+<LI>The first <code>H5Gcreate</code>/<code>h5gcreate_f</code> creates the group 
+    <code>MyGroup</code> in the root group of the specified file.
+<P>
+<LI>The second <code>H5Gcreate</code>/<code>h5gcreate_f</code> creates the group 
+    <code>Group_A</code> in the group <code>MyGroup</code> in the root group 
+    of the specified file. Note that the parent group (<code>MyGroup</code>)
+    already exists.
+<P>
+<LI>The third <code>H5Gcreate</code>/<code>h5gcreate_f</code> creates the group 
+    <code>Group_B</code> in the specified group.
+</UL>
+<A NAME="fc">
+<H3><U>File Contents</U></H3>
+The file contents are shown below:
+<P>
+<B>Fig. 9.1</B>  &nbsp; <I>The Contents of <code>groups.h5</code> 
+   (<code>groupsf.h5</code> for FORTRAN)</I>
+<P>
+<!--<IMG src="groupsh5.jpg" width="285" height="383"></P> -->
+<IMG src="img004.gif"></P>
+
+
+     <B> Fig. 9.2</B> &nbsp; <I><code>groups.h5</code> in DDL 
+         (for FORTRAN, the name in the first line is <code>groupsf.h5</code>)</I>
+<PRE>
+
+      HDF5 "groups.h5" {
+      GROUP "/" {
+         GROUP "MyGroup" {
+            GROUP "Group_A" {
+            }
+            GROUP "Group_B" {
+            }
+         }
+      }
+      }
+
+</PRE>
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/crtgrpd.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/crtgrpd.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/crtgrpd.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,163 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Creating Datasets in Groups
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Creating Datasets in Groups</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+    <LI> <A HREF="#ds"> Creating datasets in groups</A>
+    <LI> Programming Example 
+    <UL>
+      <LI> <A HREF="#desc">Description</A> 
+<!--      <LI> <A HREF="#rem">Remarks</A> -->
+      <LI> <A HREF="#fc">File Contents</A>
+    </UL>
+</UL>
+<HR>
+<A NAME="ds">
+<H2><U>Creating datasets in groups</U></H2>      
+We have shown how to create groups, datasets, and attributes. 
+In this section, we show how to create datasets in groups. 
+Recall that <code>H5Dcreate</code>/<code>h5dcreate_f</code> 
+creates a dataset at the location specified by a location identifier and 
+a name. Similar to <code>H5Gcreate</code>/<code>h5gcreate_f</code>, 
+the location identifier can be a 
+file identifier or a group identifier and the name can be
+relative or absolute. The location identifier and the name together determine 
+the location where the dataset is to be created. If the location identifier 
+and name refer to a group, then the dataset is created in that group.
+
+
+<H2> Programming Example</H2>
+<A NAME="desc">
+<H3><U>Description</U></H3>      
+This example shows how to create a dataset in a particular group.
+It opens the file created in the previous example and creates two datasets.<BR>
+<UL>
+[ <A HREF="examples/h5_crtgrpd.c">C Example</A> ] -  <code>h5_crtgrpd.c</code>
+<BR>
+[ <A HREF="examples/grpdsetexample.f90">FORTRAN Example</A> ] 
+- <code>grpdsetexample.f90</code><BR> 
+[ <A HREF="examples/java/CreateGroupDataset.java">Java Example</A> ] 
+- <code>CreateGroupDataset.java</code>
+</UL>
+<B>NOTE:</B> To download a tar file of the examples, including a Makefile,
+please go to the <A HREF="references.html">References</A> page.
+
+
+<A NAME="fc">
+<H3><U>File Contents</U></H3>
+<P>
+<B>Fig. 10.1</B> &nbsp; <I>The Contents of <code>groups.h5</code> 
+   (<code>groupsf.h5</code> for FORTRAN)</I>
+<PRE>
+<IMG src="img005.gif"></PRE>
+<!-- <IMG src="groups2.jpg" width="324" height="433"></PRE> -->
+
+</PRE>
+ <B>Fig. 10.2a</B> &nbsp; <I><code>groups.h5</code> in DDL</I>
+<PRE>
+
+HDF5 "groups.h5" {
+GROUP "/" {
+   GROUP "MyGroup" {
+      GROUP "Group_A" {
+         DATASET "dset2" {
+            DATATYPE { H5T_STD_I32BE }
+            DATASPACE { SIMPLE ( 2, 10 ) / ( 2, 10 ) }
+            DATA {
+               1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+               1, 2, 3, 4, 5, 6, 7, 8, 9, 10
+            }
+         }
+      }
+      GROUP "Group_B" {
+      }
+      DATASET "dset1" {
+         DATATYPE { H5T_STD_I32BE }
+         DATASPACE { SIMPLE ( 3, 3 ) / ( 3, 3 ) }
+         DATA {
+            1, 2, 3,
+            1, 2, 3,
+            1, 2, 3
+         }
+      }
+   }
+}
+}
+</PRE>
+ <B>Fig. 10.2b</B> &nbsp; <I><code>groupsf.h5</code> in DDL</I>
+<PRE>
+
+HDF5 "groupsf.h5" {
+GROUP "/" {
+   GROUP "MyGroup" {
+      GROUP "Group_A" {
+         DATASET "dset2" {
+            DATATYPE { H5T_STD_I32BE }
+            DATASPACE { SIMPLE ( 10, 2 ) / ( 10, 2 ) }
+            DATA {
+               1, 1,
+               2, 2,
+               3, 3,
+               4, 4,
+               5, 5,
+               6, 6,
+               7, 7,
+               8, 8,
+               9, 9,
+               10, 10
+            }
+         }
+      }
+      GROUP "Group_B" {
+      }
+      DATASET "dset1" {
+         DATATYPE { H5T_STD_I32BE }
+         DATASPACE { SIMPLE ( 3, 3 ) / ( 3, 3 ) }
+         DATA {
+            1, 1, 1,
+            2, 2, 2,
+            3, 3, 3
+         }
+      }
+   }
+}
+}
+</PRE>
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>The National Center for Supercomputing Applications</A><br>
+ <a href="http://www.uiuc.edu/">University of Illinois at Urbana-Champaign</a><br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<BR><A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/Dependencies
===================================================================

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,44 @@
+# HDF5 Library Makefile(.in)
+#
+# Copyright (C) 2001 National Center for Supercomputing Applications.
+#                    All rights reserved.
+#
+# 
+top_srcdir=@top_srcdir@
+top_builddir=../../../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+SUBDIRS=
+DOCDIR=$(docdir)/hdf5/Tutor/examples
+SUBDOCDIR=$(docdir)/hdf5/Tutor/examples/java
+
+# Public doc files (to be installed)...
+PUB_DOCS=h5_compound.c h5_copy.c h5_crtatt.c h5_crtdat.c h5_crtfile.c      \
+         h5_crtgrp.c h5_crtgrpar.c h5_crtgrpd.c h5_extend.c h5_hyperslab.c \
+         h5_iterate.c h5_mount.c h5_rdwt.c h5_read.c h5_ref2objr.c         \
+         h5_ref2objw.c h5_ref2regr.c h5_ref2regw.c h5_reference.c
+
+PUB_SUBDOCS=java/Compound.java java/Copy.java java/CreateAttribute.java \
+            java/CreateDataset.java java/CreateFile.java                \
+            java/CreateFileInput.java java/CreateGroup.java             \
+            java/CreateGroupAR.java java/CreateGroupDataset.java        \
+            java/DatasetRdWt.java java/HyperSlab.java java/Makefile     \
+            java/Makefile.in java/README java/readme.html               \
+            java/runCompound.sh java/runCompound.sh.in java/runCopy.sh  \
+            java/runCopy.sh.in java/runCreateAttribute.sh               \
+            java/runCreateAttribute.sh.in java/runCreateDataset.sh      \
+            java/runCreateDataset.sh.in java/runCreateFile.sh           \
+            java/runCreateFile.sh.in java/runCreateFileInput.sh         \
+            java/runCreateFileInput.sh.in java/runCreateGroup.sh        \
+            java/runCreateGroup.sh.in java/runCreateGroupAR.sh          \
+            java/runCreateGroupAR.sh.in java/runCreateGroupDataset.sh   \
+            java/runCreateGroupDataset.sh.in java/runDatasetRdWt.sh     \
+            java/runDatasetRdWt.sh.in java/runHyperSlab.sh              \
+            java/runHyperSlab.sh.in
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/attrexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/attrexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/attrexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,87 @@
+! This example shows how to create and write a dataset attribute. 
+! It opens the existing file 'dset.h5', obtains the identifier of
+! the dataset "/dset", defines attribute's dataspace, 
+! creates dataset attribute, writes the attribute, and then closes
+! the attribute's dataspace, attribute, dataset, and file. 
+
+     PROGRAM ATTREXAMPLE
+
+        
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=8), PARAMETER :: filename = "dsetf.h5" ! File name
+     CHARACTER(LEN=4), PARAMETER :: dsetname = "dset"     ! Dataset name
+     CHARACTER(LEN=4), PARAMETER :: aname = "attr"        ! Attribute name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+     INTEGER(HID_T) :: attr_id       ! Attribute identifier 
+     INTEGER(HID_T) :: aspace_id     ! Attribute Dataspace identifier 
+
+     INTEGER(HSIZE_T), DIMENSION(1) :: adims = (/2/) ! Attribute dimension
+     INTEGER, DIMENSION(2) :: attr_data = (/100,200/)! Attribute data
+     INTEGER     ::   arank = 1                      ! Attribure rank 
+
+     INTEGER     ::   error ! Error flag
+     
+
+     !
+     ! Initialize FORTRAN predefined datatypes.
+     !
+     CALL h5open_f(error) 
+    
+     !
+     ! Open an existing file.
+     !
+     CALL h5fopen_f (filename, H5F_ACC_RDWR_F, file_id, error)
+
+     !
+     ! Open an existing dataset. 
+     !
+     CALL h5dopen_f(file_id, dsetname, dset_id, error)
+
+     !
+     ! Create the data space for the attribute. 
+     !
+     CALL h5screate_simple_f(arank, adims, aspace_id, error)
+     
+     !
+     ! Create dataset attribute.
+     !
+     CALL h5acreate_f(dset_id, aname, H5T_NATIVE_INTEGER,aspace_id, &
+                      attr_id, error)
+     
+     !
+     ! Write the attribute data.
+     !
+     CALL h5awrite_f(attr_id, H5T_NATIVE_INTEGER, attr_data, error)
+     
+     !
+     ! Close the attribute. 
+     !
+     CALL h5aclose_f(attr_id, error)
+     
+     !
+     ! Terminate access to the data space.
+     !
+     CALL h5sclose_f(aspace_id, error)
+
+     !   
+     ! End access to the dataset and release resources used by it.
+     ! 
+     CALL h5dclose_f(dset_id, error)
+
+     ! 
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+
+     !
+     ! Close FORTRAN predefined datatypes.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM ATTREXAMPLE 
+ 

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/chunk.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/chunk.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/chunk.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,310 @@
+!
+!This example shows how to work with extendible datasets.
+!It creates a 3 x 3 extendible dataset, write to that dataset, 
+!extend the dataset to 10x3, and write to the dataset again
+!
+
+
+
+
+     PROGRAM CHUNKEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     !
+     !the dataset is stored in file "extf.h5"
+     !
+     CHARACTER(LEN=7), PARAMETER :: filename = "extf.h5"
+
+     !
+     !dataset name is "ExtendibleArray"
+     !
+     CHARACTER(LEN=15), PARAMETER :: dsetname = "ExtendibleArray"
+
+     !
+     !dataset rank is 2
+     !
+     INTEGER :: RANK = 2
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+     INTEGER(HID_T) :: dataspace     ! Dataspace identifier 
+     INTEGER(HID_T) :: filespace     ! Dataspace identifier 
+     INTEGER(HID_T) :: memspace      ! memspace identifier 
+     INTEGER(HID_T) :: cparms        !dataset creatation property identifier 
+
+     !
+     !dataset dimensions at creation time
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/3,3/)
+
+     !
+     !data1 dimensions 
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims1 = (/3,3/)
+
+     !
+     !data2 dimensions
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims2 = (/7,1/)
+
+     !
+     !Maximum dimensions
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: maxdims 
+
+     !
+     !data1 dimensions
+     !
+     INTEGER, DIMENSION(3,3) :: data1
+
+     !
+     !data2 dimensions
+     !
+     INTEGER, DIMENSION(7,1) :: data2
+
+     !
+     !Size of the hyperslab in the file 
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: size
+
+     !
+     !hyperslab offset in the file 
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: offset
+
+     !
+     !general purpose integer 
+     !
+     INTEGER :: i, j, k 
+
+     !
+     !flag to check operation success 
+     !
+     INTEGER :: error, error_n 
+
+     !
+     !Variables used in reading data back
+     !  
+     INTEGER(HSIZE_T), DIMENSION(2) :: chunk_dims = (/5,2/)
+     INTEGER(HSIZE_T), DIMENSION(2) :: chunk_dimsr
+     INTEGER(HSIZE_T), DIMENSION(2) :: dimsr, maxdimsr
+     INTEGER, DIMENSION(10,3) :: data_out
+     INTEGER :: rankr, rank_chunk
+
+     !
+     !data initialization 
+     !
+     do i = 1, 3
+          do j = 1, 3
+               data1(i,j) = 1
+          end do
+     end do
+
+     do j = 1, 7
+         data2(j,1) = 2
+     end do
+   
+
+     !
+     !Initialize FORTRAN predifined datatypes
+     !
+     CALL h5open_f(error) 
+
+     !
+     !Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+
+     !
+     !Create the data space with unlimited dimensions.
+     !
+     maxdims = (/H5S_UNLIMITED_f, H5S_UNLIMITED_f/)
+
+     CALL h5screate_simple_f(RANK, dims, dataspace, error, maxdims)
+   
+     !
+     !Modify dataset creation properties, i.e. enable chunking
+     !
+     CALL h5pcreate_f(H5P_DATASET_CREATE_F, cparms, error)
+
+     CALL h5pset_chunk_f(cparms, RANK, chunk_dims, error)
+
+     !
+     !Create a new dataset within the file using cparms creation properties.
+     !
+     !CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INT_F, dataspace, &
+     CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INTEGER, dataspace, &
+                      dset_id, error, cparms)
+   
+     !
+     !Extend the dataset. This call assures that dataset is 3 x 3.
+     !
+     size(1) = 3
+     size(2) = 3
+     CALL h5dextend_f(dset_id, size, error)
+
+   
+     !
+     !Select a hyperslab.
+     !
+     CALL h5dget_space_f(dset_id, filespace, error)
+     offset(1) = 0;
+     offset(2) = 0;
+     CALL h5sselect_hyperslab_f(filespace, H5S_SELECT_SET_F, &
+                                offset, dims1, error) 
+
+     !
+     !Write the data to the hyperslab.
+     !
+     !CALL H5Dwrite_f(dset_id, H5T_NATIVE_INT_F, data1, error, &
+     CALL H5Dwrite_f(dset_id, H5T_NATIVE_INTEGER, data1, error, &
+                    filespace, dataspace)
+
+     !
+     !Extend the dataset. Dataset becomes 10 x 3.
+     !
+     dims(1)   = dims1(1) + dims2(1);
+     size(1)   = dims(1);  
+     size(2)   = dims(2); 
+     CALL h5dextend_f(dset_id, size, error)
+
+     !
+     !Select a hyperslab.
+     !
+     CALL h5dget_space_f(dset_id, filespace, error)
+     offset(1) = 3;
+     offset(2) = 0;
+     CALL h5sselect_hyperslab_f(filespace, H5S_SELECT_SET_F, &
+                                offset, dims2, error) 
+
+     !
+     !create memory dataspace.
+     !
+     CALL h5screate_simple_f(RANK, dims2, memspace, error)
+
+     !
+     !Write the data to the hyperslab.
+     !
+     !CALL H5Dwrite_f(dset_id, H5T_NATIVE_INT_F, data2, error, &
+     CALL H5Dwrite_f(dset_id, H5T_NATIVE_INTEGER, data2, error, &
+                   mem_space_id=memspace, file_space_id=filespace)
+
+     !
+     !Close the dataspace for the dataset.
+     !
+     CALL h5sclose_f(dataspace, error)
+     CALL h5sclose_f(filespace, error)
+
+     !
+     !Close the memoryspace.
+     !
+     CALL h5sclose_f(memspace, error)
+
+     !
+     !Close the dataset.
+     !
+     CALL h5dclose_f(dset_id, error)
+
+     !
+     !Close the property list.
+     !
+     CALL h5pclose_f(cparms, error)
+
+     !
+     !Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+
+     !
+     !read the data back
+     !
+     !Open the file.
+     !
+     CALL h5fopen_f (filename, H5F_ACC_RDONLY_F, file_id, error)
+       
+     !
+     !Open the  dataset.
+     !
+     CALL h5dopen_f(file_id, dsetname, dset_id, error)
+
+     !
+     !Get dataset's dataspace handle.
+     !
+     CALL h5dget_space_f(dset_id, dataspace, error)
+
+     !
+     !Get dataspace's rank.
+     !
+     CALL h5sget_simple_extent_ndims_f(dataspace, rankr, error)
+
+
+     !
+     !Get dataspace's dimensinons.
+     !
+     CALL h5sget_simple_extent_dims_f(dataspace, dimsr, maxdimsr, error)
+
+
+     !
+     !Get creation property list.
+     !
+     CALL h5dget_create_plist_f(dset_id, cparms, error)
+
+     !
+     !Get chunk dimensions.
+     !
+     CALL h5pget_chunk_f(cparms, 2, chunk_dimsr, error)
+
+     !
+     !create memory dataspace.
+     !
+     CALL h5screate_simple_f(rankr, dimsr, memspace, error)
+ 
+     !
+     !Read data 
+     !
+     !CALL H5Dread_f(dset_id, H5T_NATIVE_INT_F, data_out, error, &
+     CALL H5Dread_f(dset_id, H5T_NATIVE_INTEGER, data_out, error, &
+                    memspace, dataspace)
+ 
+     !
+     !Print data 
+     !
+     do i = 1, dimsr(1)
+         print *, (data_out(i,j), j = 1,dimsr(2))
+     end do
+ 
+     !
+     !Close the dataspace for the dataset.
+     !
+     CALL h5sclose_f(dataspace, error)
+
+     !
+     !Close the memoryspace.
+     !
+     CALL h5sclose_f(memspace, error)
+
+     !
+     !Close the dataset.
+     !
+     CALL h5dclose_f(dset_id, error)
+
+     !
+     !Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+
+     !
+     !Close the property list.
+     !
+     CALL h5pclose_f(cparms, error)
+
+     !
+     ! Close FORTRAN predefined datatypes.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM CHUNKEXAMPLE 

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/compound.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/compound.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/compound.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,215 @@
+!
+! This program creates a dataset that is one dimensional array of
+! structures  {
+!                 character*2
+!                 integer
+!                 double precision
+!                 real
+!                                   }
+! Data is written and read back by fields.
+!
+
+     PROGRAM COMPOUNDEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=11), PARAMETER :: filename = "compound.h5" ! File name
+     CHARACTER(LEN=8), PARAMETER :: dsetname = "Compound"     ! Dataset name
+     INTEGER, PARAMETER :: dimsize = 6 ! Size of the dataset
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+     INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+     INTEGER(HID_T) :: dtype_id      ! Compound datatype identifier
+     INTEGER(HID_T) :: dt1_id      ! Memory datatype identifier (for character field)
+     INTEGER(HID_T) :: dt2_id      ! Memory datatype identifier (for integer field)
+     INTEGER(HID_T) :: dt3_id      ! Memory datatype identifier (for double precision field)
+     INTEGER(HID_T) :: dt4_id      ! Memory datatype identifier (for real field)
+     INTEGER(HID_T) :: dt5_id      ! Memory datatype identifier 
+     INTEGER(HID_T) :: plist_id    ! Dataset trasfer property
+     INTEGER(SIZE_T) :: typesize
+
+
+     INTEGER(HSIZE_T), DIMENSION(1) :: dims = (/dimsize/) ! Dataset dimensions
+     INTEGER     ::   rank = 1                            ! Dataset rank
+
+     INTEGER     ::   error ! Error flag
+     INTEGER(SIZE_T)     ::   type_size  ! Size of the datatype
+     INTEGER(SIZE_T)     ::   type_sizec  ! Size of the character datatype 
+     INTEGER(SIZE_T)     ::   type_sizei  ! Size of the integer datatype
+     INTEGER(SIZE_T)     ::   type_sized  ! Size of the double precision datatype
+     INTEGER(SIZE_T)     ::   type_sizer  ! Size of the real datatype
+     INTEGER(SIZE_T)     ::   offset     ! Member's offset
+     CHARACTER*2, DIMENSION(dimsize)      :: char_member
+     CHARACTER*2, DIMENSION(dimsize)      :: char_member_out ! Buffer to read data out
+     INTEGER, DIMENSION(dimsize)          :: int_member
+     DOUBLE PRECISION, DIMENSION(dimsize) :: double_member
+     REAL, DIMENSION(dimsize)             :: real_member
+     INTEGER :: i
+     !
+     ! Initialize data buffer.
+     !
+     do i = 1, dimsize
+        char_member(i)(1:1) = char(65+i)
+        char_member(i)(2:2) = char(65+i)
+        char_member_out(i)(1:1)   = char(65) 
+        char_member_out(i)(2:2)   = char(65) 
+        int_member(i)   = i
+        double_member(i)   = 2.* i
+        real_member(i)   = 3. * i
+     enddo
+
+     !
+     ! Initialize FORTRAN interface.
+     !
+     CALL h5open_f(error)
+     !
+     ! Set dataset transfer property to preserve partially initialized fields
+     ! during write/read to/from dataset with compound datatype.
+     !
+     CALL h5pcreate_f(H5P_DATASET_XFER_F, plist_id, error)
+     CALL h5pset_preserve_f(plist_id, 1, error)
+
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+     ! 
+     ! Create the dataspace.
+     !
+     CALL h5screate_simple_f(rank, dims, dspace_id, error)
+     !
+     ! Create compound datatype.
+     !
+     ! First calculate total size by calculating sizes of each member
+     !
+     CALL h5tcopy_f(H5T_NATIVE_CHARACTER, dt5_id, error)
+     typesize = 2
+     CALL h5tset_size_f(dt5_id, typesize, error)
+     CALL h5tget_size_f(dt5_id, type_sizec, error)
+     CALL h5tget_size_f(H5T_NATIVE_INTEGER, type_sizei, error)
+     CALL h5tget_size_f(H5T_NATIVE_DOUBLE, type_sized, error)
+     CALL h5tget_size_f(H5T_NATIVE_REAL, type_sizer, error)
+     type_size = type_sizec + type_sizei + type_sized + type_sizer
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_size, dtype_id, error)
+     !
+     ! Insert memebers
+     !
+     ! CHARACTER*2 memeber
+     !
+     offset = 0
+     CALL h5tinsert_f(dtype_id, "char_field", offset, dt5_id, error)
+     !
+     ! INTEGER member
+     !
+     offset = offset + type_sizec ! Offset of the second memeber is 2
+     CALL h5tinsert_f(dtype_id, "integer_field", offset, H5T_NATIVE_INTEGER, error)
+     !
+     ! DOUBLE PRECISION member
+     !
+     offset = offset + type_sizei  ! Offset of the third memeber is 6
+     CALL h5tinsert_f(dtype_id, "double_field", offset, H5T_NATIVE_DOUBLE, error)
+     !
+     ! REAL member
+     !
+     offset = offset + type_sized  ! Offset of the last member is 14
+     CALL h5tinsert_f(dtype_id, "real_field", offset, H5T_NATIVE_REAL, error)
+
+     !
+     ! Create the dataset with compound datatype.
+     !
+     CALL h5dcreate_f(file_id, dsetname, dtype_id, dspace_id, &
+                      dset_id, error)
+     !
+     ! Create memory types. We have to create a compound datatype 
+     ! for each member we want to write. 
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sizec, dt1_id, error)
+     offset = 0
+     CALL h5tinsert_f(dt1_id, "char_field", offset, dt5_id, error)
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sizei, dt2_id, error)
+     offset = 0
+     CALL h5tinsert_f(dt2_id, "integer_field", offset, H5T_NATIVE_INTEGER, error)
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sized, dt3_id, error)
+     offset = 0
+     CALL h5tinsert_f(dt3_id, "double_field", offset, H5T_NATIVE_DOUBLE, error)
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sizer, dt4_id, error)
+     offset = 0
+     CALL h5tinsert_f(dt4_id, "real_field", offset, H5T_NATIVE_REAL, error)
+     !
+     ! Write data by fields in the datatype. Fields order is not important.
+     !
+     CALL h5dwrite_f(dset_id, dt4_id, real_member, error, xfer_prp = plist_id)
+     CALL h5dwrite_f(dset_id, dt1_id, char_member, error, xfer_prp = plist_id)
+     CALL h5dwrite_f(dset_id, dt3_id, double_member, error, xfer_prp = plist_id)
+     CALL h5dwrite_f(dset_id, dt2_id, int_member, error, xfer_prp = plist_id)
+
+     !   
+     ! End access to the dataset and release resources used by it.
+     ! 
+     CALL h5dclose_f(dset_id, error)
+
+     !
+     ! Terminate access to the data space.
+     !
+     CALL h5sclose_f(dspace_id, error)
+     !
+     ! Terminate access to the datatype
+     !
+     CALL h5tclose_f(dtype_id, error)
+     CALL h5tclose_f(dt1_id, error)
+     CALL h5tclose_f(dt2_id, error)
+     CALL h5tclose_f(dt3_id, error)
+     CALL h5tclose_f(dt4_id, error)
+     CALL h5tclose_f(dt5_id, error)
+
+     ! 
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+     
+     !
+     ! Open the file.
+     !
+     CALL h5fopen_f (filename, H5F_ACC_RDWR_F, file_id, error)
+     !
+     ! Open the dataset.
+     !
+     CALL h5dopen_f(file_id, dsetname, dset_id, error)
+     !
+     ! Create memeory datatyoe to read character member of the compound datatype.
+     !
+     CALL h5tcopy_f(H5T_NATIVE_CHARACTER, dt2_id, error)
+     typesize = 2
+     CALL h5tset_size_f(dt2_id, typesize, error)
+     CALL h5tget_size_f(dt2_id, type_size, error)
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_size, dt1_id, error)
+     offset = 0
+     CALL h5tinsert_f(dt1_id, "char_field", offset, dt2_id, error)
+     !
+     ! Read part of the datatset and display it.
+     !
+     CALL h5dread_f(dset_id, dt1_id, char_member_out, error)
+     write(*,*) (char_member_out(i), i=1, dimsize)
+
+     !
+     ! Close all open objects.
+     !
+     CALL h5dclose_f(dset_id, error)
+     CALL h5tclose_f(dt1_id, error)
+     CALL h5tclose_f(dt2_id, error)
+     CALL h5fclose_f(file_id, error)
+     !
+     ! Close FORTRAN interface.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM COMPOUNDEXAMPLE 
+     
+ 

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/dsetexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/dsetexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/dsetexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,70 @@
+!
+! The following example shows how to create an empty dataset. 
+! It creates a file called 'dsetf.h5', defines the
+! dataset dataspace, creates a dataset which is a 4x6 integer array,
+! and then closes the dataspace, the dataset, and the file.
+!
+
+     PROGRAM DSETEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=8), PARAMETER :: filename = "dsetf.h5" ! File name
+     CHARACTER(LEN=4), PARAMETER :: dsetname = "dset"     ! Dataset name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+     INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+
+
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/4,6/) ! Dataset dimensions
+     INTEGER     ::   rank = 2                        ! Dataset rank
+
+     INTEGER     ::   error ! Error flag
+
+     !
+     ! Initialize FORTRAN predefined datatypes.
+     !
+     CALL h5open_f(error)
+
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+     ! 
+     ! Create the dataspace.
+     !
+     CALL h5screate_simple_f(rank, dims, dspace_id, error)
+
+     !
+     ! Create the dataset with default properties.
+     !
+     CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INTEGER, dspace_id, &
+                      dset_id, error)
+
+     !   
+     ! End access to the dataset and release resources used by it.
+     ! 
+     CALL h5dclose_f(dset_id, error)
+
+     !
+     ! Terminate access to the data space.
+     !
+     CALL h5sclose_f(dspace_id, error)
+
+     ! 
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+
+     !
+     ! Close FORTRAN predefined datatypes.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM DSETEXAMPLE 
+     
+ 

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/fileexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/fileexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/fileexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,34 @@
+!
+! The following example demonstrates how to create and close an HDF5 file.
+! It creates a file called 'file.h5',  and then closes the file.
+!
+
+     PROGRAM FILEEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=8), PARAMETER :: filename = "filef.h5" ! File name
+     INTEGER(HID_T) :: file_id                            ! File identifier
+ 
+     INTEGER     ::   error  ! Error flag
+     
+!
+!    Initialize FORTRAN interface.
+!
+     CALL h5open_f (error)
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+     !
+     ! Terminate access to the file.
+     !
+     CALL h5fclose_f(file_id, error)
+!
+!    Close FORTRAN interface.
+!
+     CALL h5close_f(error)
+     END PROGRAM FILEEXAMPLE 

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/groupexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/groupexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/groupexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,49 @@
+!
+! The following example shows how to create and close a group. 
+! It creates a file called 'group.h5', creates a group
+! called MyGroup in the root group, and then closes the group and file.
+! 
+
+
+     PROGRAM GROUPEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=9), PARAMETER :: filename = "groupf.h5" ! File name
+     CHARACTER(LEN=7), PARAMETER :: groupname = "MyGroup"  ! Group name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: group_id      ! Group identifier 
+
+     INTEGER     ::   error ! Error flag
+!
+!    Initialize FORTRAN interface.
+!
+     CALL h5open_f(error)     
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+     !
+     ! Create a group named "/MyGroup" in the file.
+     !
+     CALL h5gcreate_f(file_id, groupname, group_id, error)
+
+     !
+     ! Close the group.
+     !
+     CALL h5gclose_f(group_id, error)
+
+     !
+     ! Terminate access to the file.
+     !
+     CALL h5fclose_f(file_id, error)
+!
+!    Close FORTRAN interface.
+!
+     CALL h5close_f(error)
+
+     END PROGRAM GROUPEXAMPLE 

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/grpdsetexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/grpdsetexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/grpdsetexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,136 @@
+!
+! This example shows how to create a dataset in a particular group.
+! It opens the file created in the previous example and creates two datasets.
+! Absolute and relative dataset names are used.
+!
+
+
+     PROGRAM GRPDSETEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=10), PARAMETER :: filename = "groupsf.h5" ! File name
+     CHARACTER(LEN=15), PARAMETER :: groupname = "MyGroup/Group_A" ! Group name
+     CHARACTER(LEN=13), PARAMETER :: dsetname1 = "MyGroup/dset1"  ! Dataset name
+     CHARACTER(LEN=5),  PARAMETER :: dsetname2 = "dset2" ! dataset name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: group_id      ! Group identifier 
+     INTEGER(HID_T) :: dataset_id    ! Dataset identifier 
+     INTEGER(HID_T) :: dataspace_id  ! Data space identifier 
+
+     INTEGER     ::  i, j 
+     INTEGER     ::   error ! Error flag
+
+     INTEGER, DIMENSION(3,3) :: dset1_data  ! Data arrays 
+     INTEGER, DIMENSION(2,10) :: dset2_data !
+     
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims1 = (/3,3/) ! Datasets dimensions
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims2 = (/2,10/)!
+
+     INTEGER     ::   rank = 2 ! Datasets rank
+
+     !
+     !Initialize dset1_data array
+     !
+     do i = 1, 3
+          do j = 1, 3
+               dset1_data(i,j) = j;
+          end do
+     end do
+
+
+     !
+     !Initialize dset2_data array
+     !
+     do i = 1, 2
+          do j = 1, 10
+               dset2_data(i,j) = j;
+          end do
+     end do
+
+     !
+     ! Initialize FORTRAN predefined datatypes.
+     !
+     CALL h5open_f(error) 
+
+     !
+     ! Open an existing file.
+     !
+     CALL h5fopen_f (filename, H5F_ACC_RDWR_F, file_id, error)
+
+     !
+     ! Create the data space for the first dataset. 
+     !
+     CALL h5screate_simple_f(rank, dims1, dataspace_id, error)
+
+     !
+     ! Create a dataset in group "MyGroup" with default properties.
+     !
+     CALL h5dcreate_f(file_id, dsetname1, H5T_NATIVE_INTEGER, dataspace_id, &
+                      dataset_id, error)
+
+     !
+     ! Write the first dataset.
+     !
+     CALL h5dwrite_f(dataset_id, H5T_NATIVE_INTEGER, dset1_data, error)
+
+     !
+     ! Close the dataspace for the first dataset.
+     !
+     CALL h5sclose_f(dataspace_id, error)
+
+     !
+     ! Close the first dataset.
+     !
+     CALL h5dclose_f(dataset_id, error)
+
+     !
+     ! Open an existing group in the specified file.
+     !
+     CALL h5gopen_f(file_id, groupname, group_id, error)
+
+     !
+     !Create the data space for the second dataset. 
+     !
+     CALL h5screate_simple_f(rank, dims2, dataspace_id, error)
+
+     !
+     ! Create the second dataset in group "Group_A" with default properties.
+     !
+     CALL h5dcreate_f(group_id, dsetname2, H5T_NATIVE_INTEGER, dataspace_id, &
+                      dataset_id, error)
+
+     !
+     ! Write the second dataset.
+     !
+     CALL h5dwrite_f(dataset_id, H5T_NATIVE_INTEGER, dset2_data, error)
+
+     !
+     ! Close the dataspace for the second dataset.
+     !
+     CALL h5sclose_f(dataspace_id, error)
+
+     !
+     ! Close the second dataset.
+     !
+     CALL h5dclose_f(dataset_id, error)
+
+     !
+     ! Close the group.
+     !
+     CALL h5gclose_f(group_id, error)
+
+     !
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+
+     !
+     ! Close FORTRAN predefined datatypes.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM GRPDSETEXAMPLE 

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/grpit.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/grpit.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/grpit.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,194 @@
+!
+! In this example we iterate through the members of the groups.
+!
+
+
+     PROGRAM GRPITEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=11), PARAMETER :: filename = "iteratef.h5" ! File name
+     CHARACTER(LEN=7), PARAMETER :: groupname1 = "MyGroup"    ! Group name
+     CHARACTER(LEN=15), PARAMETER :: groupname2 = "Group_A"   ! Group name
+     CHARACTER(LEN=13), PARAMETER :: dsetname1 = "dset1"      ! Dataset name
+     CHARACTER(LEN=5), PARAMETER :: dsetname2 = "dset2"       !
+
+     CHARACTER(LEN=20) :: name_buffer ! Buffer to hold object's name
+     INTEGER :: type ! Type of the object
+     INTEGER :: nmembers ! Number of group members
+
+     INTEGER(HID_T) :: file_id        ! File identifier 
+     INTEGER(HID_T) :: dataset1_id    ! Dataset1 identifier 
+     INTEGER(HID_T) :: dataset2_id    ! Dataset2 identifier 
+     INTEGER(HID_T) :: dataspace1_id  ! Data space identifier 
+     INTEGER(HID_T) :: dataspace2_id  ! Data space identifier 
+     INTEGER(HID_T) :: group1_id, group2_id ! Group identifiers     
+
+     INTEGER     ::  i, j
+
+     INTEGER     ::   error ! Error flag
+
+     INTEGER, DIMENSION(3,3) :: dset1_data  ! Arrays to hold data
+     INTEGER, DIMENSION(2,10) :: dset2_data !
+     
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims1 = (/3,3/) ! Dataset dimensions
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims2 = (/2,10/)!
+     INTEGER     ::   rank = 2 ! Datasets rank 
+
+     !
+     ! Initialize dset1_data array.
+     !
+     do i = 1, 3
+          do j = 1, 3
+               dset1_data(i,j) = j;
+          end do
+     end do
+
+
+     !
+     ! Initialize dset2_data array.
+     !
+     do i = 1, 2
+          do j = 1, 10
+               dset2_data(i,j) = j;
+          end do
+     end do
+
+     !
+     ! Initialize FORTRAN interface.
+     !
+     CALL h5open_f(error) 
+
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+     !
+     ! Create group "MyGroup" in the root group using absolute name.
+     !
+     CALL h5gcreate_f(file_id, groupname1, group1_id, error)
+
+     !
+     ! Create group "Group_A" in group "MyGroup" using relative name.
+     !
+     CALL h5gcreate_f(group1_id, groupname2, group2_id, error)
+
+     !
+     ! Create the data space for the first dataset. 
+     !
+     CALL h5screate_simple_f(rank, dims1, dataspace1_id, error)
+
+     !
+     ! Create a dataset in group "MyGroup" with default properties.
+     !
+     CALL h5dcreate_f(group1_id, dsetname1, H5T_NATIVE_INTEGER, dataspace1_id, &
+                      dataset1_id, error)
+
+     !
+     ! Write the first dataset.
+     !
+     CALL h5dwrite_f(dataset1_id, H5T_NATIVE_INTEGER, dset1_data, error)
+
+     !
+     ! Create the data space for the second dataset. 
+     !
+     CALL h5screate_simple_f(rank, dims2, dataspace2_id, error)
+
+     !
+     ! Create the second dataset in group "Group_A" with default properties
+     !
+     CALL h5dcreate_f(group2_id, dsetname2, H5T_NATIVE_INTEGER, dataspace2_id, &
+                     dataset2_id, error)
+
+     !
+     ! Write the second dataset
+     !
+     CALL h5dwrite_f(dataset2_id, H5T_NATIVE_INTEGER, dset2_data, error)
+
+     !
+     ! Get number of members in the root group.
+     !
+     CALL h5gn_members_f(file_id, "/", nmembers, error)
+     write(*,*) "Number of root group member is " , nmembers
+
+     !
+     ! Print each group member's name and type.
+     !
+     do i = 0, nmembers - 1
+        CALL h5gget_obj_info_idx_f(file_id, "/", i, name_buffer, type, &
+                                    error)
+     write(*,*) name_buffer, type
+     end do
+
+     !
+     ! Get number of members in MyGroup.
+     !
+     CALL h5gn_members_f(file_id, "MyGroup", nmembers, error)
+     write(*,*) "Number of group MyGroup member  is ", nmembers
+
+     !
+     ! Print each group member's name and type in "MyGroup" group.
+     !
+     do i = 0, nmembers - 1
+        CALL h5gget_obj_info_idx_f(file_id, groupname1, i, name_buffer, type, &
+                                    error)
+     write(*,*) name_buffer, type
+     end do
+
+
+     !
+     ! Get number of members in MyGroup/Group_A.
+     !
+     CALL h5gn_members_f(file_id, "MyGroup/Group_A", nmembers, error)
+     write(*,*) "Number of group MyGroup/Group_A member  is ", nmembers
+
+     !
+     ! Print each group member's name and type in "MyGroup/Group_A" group.
+     !
+     do i = 0, nmembers - 1
+        CALL h5gget_obj_info_idx_f(file_id,"MyGroup/Group_A" , i, name_buffer, type, &
+                                    error)
+     write(*,*) name_buffer, type
+     end do
+
+     !
+     ! Close the dataspace for the first dataset.
+     !
+     CALL h5sclose_f(dataspace1_id, error)
+
+     !
+     ! Close the first dataset.
+     !
+     CALL h5dclose_f(dataset1_id, error)
+
+     !
+     ! Close the dataspace for the second dataset.
+     !
+     CALL h5sclose_f(dataspace2_id, error)
+
+     !
+     ! Close the second dataset.
+     !
+     CALL h5dclose_f(dataset2_id, error)
+
+     !
+     ! Close the groups.
+     !
+     CALL h5gclose_f(group1_id, error)
+
+     CALL h5gclose_f(group2_id, error)
+
+     !
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+     
+     !
+     ! Close FORTRAN interface.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM GRPITEXAMPLE 

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/grpsexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/grpsexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/grpsexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,68 @@
+!
+! The following example code shows how to create groups 
+! using absolute and relative names. It creates three groups:
+! the first two groups are created using the file identifier and 
+! the group absolute names, and the third group is created using 
+! a group identifier and the name relative to the specified group.
+!
+
+
+     PROGRAM GRPSEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=10), PARAMETER :: filename = "groupsf.h5" ! File name
+     CHARACTER(LEN=8),  PARAMETER :: groupname1 = "/MyGroup" ! Group name
+     CHARACTER(LEN=16), PARAMETER :: groupname2 = "/MyGroup/Group_A" 
+                                                             ! Group name
+     CHARACTER(LEN=7),  PARAMETER :: groupname3 = "Group_B"  ! Group name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: group1_id, group2_id, group3_id ! Group identifiers     
+
+     INTEGER     ::   error ! Error flag
+     !
+     ! Initialize FORTRAN interface.
+     !
+     CALL h5open_f(error) 
+     
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+     !
+     ! Create group "MyGroup" in the root group using absolute name.
+     !
+     CALL h5gcreate_f(file_id, groupname1, group1_id, error)
+
+     !
+     ! Create group "Group_A" in group "MyGroup" using absolute name.
+     !
+     CALL h5gcreate_f(file_id, groupname2, group2_id, error)
+
+     !
+     ! Create group "Group_B" in group "MyGroup" using relative name.
+     !
+     CALL h5gcreate_f(group1_id, groupname3, group3_id, error)
+     
+     !
+     ! Close the groups.
+     !
+     CALL h5gclose_f(group1_id, error)
+     CALL h5gclose_f(group2_id, error)
+     CALL h5gclose_f(group3_id, error)
+
+     !
+     ! Terminate access to the file.
+     !
+     CALL h5fclose_f(file_id, error)
+
+     !
+     ! Close FORTRAN interface.
+     !
+     CALL h5close_f(error) 
+
+     END PROGRAM GRPSEXAMPLE 

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_compound.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_compound.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_compound.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,153 @@
+/*
+ * 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.
+ */
+
+#include "hdf5.h"
+
+#define FILE          "SDScompound.h5"
+#define DATASETNAME   "ArrayOfStructures"
+#define LENGTH        10
+#define RANK          1
+
+int
+main(void)
+{
+
+    /* First structure  and dataset*/
+    typedef struct s1_t {
+	int    a;
+	float  b;
+	double c; 
+    } s1_t;
+    s1_t       s1[LENGTH];
+    hid_t      s1_tid;     /* File datatype identifier */
+
+    /* Second structure (subset of s1_t)  and dataset*/
+    typedef struct s2_t {
+	double c;
+	int    a;
+    } s2_t;
+    s2_t       s2[LENGTH];
+    hid_t      s2_tid;    /* Memory datatype handle */
+
+    /* Third "structure" ( will be used to read float field of s1) */
+    hid_t      s3_tid;   /* Memory datatype handle */
+    float      s3[LENGTH];
+
+    int        i;
+    hid_t      file, dataset, space; /* Handles */
+    herr_t     status;
+    hsize_t    dim[] = {LENGTH};   /* Dataspace dimensions */
+
+
+    /*
+     * Initialize the data
+     */
+    for (i = 0; i< LENGTH; i++) {
+        s1[i].a = i;
+        s1[i].b = i*i;
+        s1[i].c = 1./(i+1);
+    }
+
+    /*
+     * Create the data space.
+     */
+    space = H5Screate_simple(RANK, dim, NULL);
+
+    /*
+     * Create the file.
+     */
+    file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Create the memory data type. 
+     */
+    s1_tid = H5Tcreate (H5T_COMPOUND, sizeof(s1_t));
+    H5Tinsert(s1_tid, "a_name", HOFFSET(s1_t, a), H5T_NATIVE_INT);
+    H5Tinsert(s1_tid, "c_name", HOFFSET(s1_t, c), H5T_NATIVE_DOUBLE);
+    H5Tinsert(s1_tid, "b_name", HOFFSET(s1_t, b), H5T_NATIVE_FLOAT);
+
+    /* 
+     * Create the dataset.
+     */
+    dataset = H5Dcreate(file, DATASETNAME, s1_tid, space, H5P_DEFAULT);
+
+    /*
+     * Wtite data to the dataset; 
+     */
+    status = H5Dwrite(dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1);
+
+    /*
+     * Release resources
+     */
+    H5Tclose(s1_tid);
+    H5Sclose(space);
+    H5Dclose(dataset);
+    H5Fclose(file);
+ 
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+ 
+    dataset = H5Dopen(file, DATASETNAME);
+
+    /* 
+     * Create a data type for s2
+     */
+    s2_tid = H5Tcreate(H5T_COMPOUND, sizeof(s2_t));
+
+    H5Tinsert(s2_tid, "c_name", HOFFSET(s2_t, c), H5T_NATIVE_DOUBLE);
+    H5Tinsert(s2_tid, "a_name", HOFFSET(s2_t, a), H5T_NATIVE_INT);
+
+    /*
+     * Read two fields c and a from s1 dataset. Fields in the file
+     * are found by their names "c_name" and "a_name".
+     */
+    status = H5Dread(dataset, s2_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s2);
+
+    /*
+     * Display the fields
+     */
+    printf("\n");
+    printf("Field c : \n");
+    for( i = 0; i < LENGTH; i++) printf("%.4f ", s2[i].c);
+    printf("\n");
+
+    printf("\n");
+    printf("Field a : \n");
+    for( i = 0; i < LENGTH; i++) printf("%d ", s2[i].a);
+    printf("\n");
+
+    /* 
+     * Create a data type for s3.
+     */
+    s3_tid = H5Tcreate(H5T_COMPOUND, sizeof(float));
+
+    status = H5Tinsert(s3_tid, "b_name", 0, H5T_NATIVE_FLOAT);
+
+    /*
+     * Read field b from s1 dataset. Field in the file is found by its name.
+     */
+    status = H5Dread(dataset, s3_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s3);
+
+    /*
+     * Display the field
+     */
+    printf("\n");
+    printf("Field b : \n");
+    for( i = 0; i < LENGTH; i++) printf("%.4f ", s3[i]);
+    printf("\n");
+
+    /*
+     * Release resources
+     */
+    H5Tclose(s2_tid);
+    H5Tclose(s3_tid);
+    H5Dclose(dataset);
+    H5Fclose(file);
+
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_copy.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_copy.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_copy.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,148 @@
+/***********************************************************************/
+/*                                                                     */
+/*  PROGRAM:   h5_copy.c                                               */
+/*  PURPOSE:   Shows how to use the H5SCOPY function.                  */
+/*  DESCRIPTION:                                                       */
+/*             This program creates two files, copy1.h5, and copy2.h5. */
+/*             In copy1.h5, it creates a 3x4 dataset called 'Copy1',   */
+/*             and write 0's to this dataset.                          */
+/*             In copy2.h5, it create a 3x4 dataset called 'Copy2',    */
+/*             and write 1's to this dataset.                          */
+/*             It closes both files, reopens both files, selects two   */
+/*             points in copy1.h5 and writes values to them.  Then it  */
+/*             does an H5Scopy from the first file to the second, and  */
+/*             writes the values to copy2.h5.  It then closes the      */
+/*             files, reopens them, and prints the contents of the     */
+/*             two datasets.                                           */
+/*                                                                     */
+/***********************************************************************/
+ 
+#include "hdf5.h"
+#define FILE1 "copy1.h5"
+#define FILE2 "copy2.h5"
+
+#define RANK  2
+#define DIM1  3
+#define DIM2  4
+#define NUMP  2 
+
+int main (void)
+{
+     hid_t   file1, file2, dataset1, dataset2;
+     hid_t   mid1, mid2, fid1, fid2;
+     hsize_t fdim[] = {DIM1, DIM2};
+     hsize_t mdim[] = {DIM1, DIM2};
+     hsize_t start[2], stride[2], count[2], block[2];
+     int buf1[DIM1][DIM2];
+     int buf2[DIM1][DIM2];
+     int bufnew[DIM1][DIM2];
+     int val[] = {53, 59};
+     hsize_t marray[] = {2};
+     hsize_t coord[NUMP][RANK];
+     herr_t ret;
+     uint  i, j;
+
+/***********************************************************************/
+/*                                                                     */
+/* Create two files containing identical datasets. Write 0's to one    */
+/* and 1's to the other.                                               */
+/*                                                                     */
+/***********************************************************************/
+
+     for ( i = 0; i < DIM1; i++ ) 
+         for ( j = 0; j < DIM2; j++ )
+             buf1[i][j] = 0;
+
+     for ( i = 0; i < DIM1; i++ ) 
+         for ( j = 0; j < DIM2; j++ )
+             buf2[i][j] = 1;
+
+     file1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+     file2 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+     fid1 = H5Screate_simple (RANK, fdim, NULL);
+     fid2 = H5Screate_simple (RANK, fdim, NULL);
+
+     dataset1 = H5Dcreate (file1, "Copy1", H5T_NATIVE_INT, fid1, H5P_DEFAULT);
+     dataset2 = H5Dcreate (file2, "Copy2", H5T_NATIVE_INT, fid2, H5P_DEFAULT);
+
+     ret = H5Dwrite(dataset1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1);
+     ret = H5Dwrite(dataset2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2);
+
+     ret = H5Dclose (dataset1);
+     ret = H5Dclose (dataset2);
+
+     ret = H5Sclose (fid1);
+     ret = H5Sclose (fid2);
+
+     ret = H5Fclose (file1);
+     ret = H5Fclose (file2);
+
+/***********************************************************************/
+/*                                                                     */
+/* Open the two files.  Select two points in one file, write values to */
+/* those point locations, then do H5Scopy and write the values to the  */
+/* other file.  Close files.                                           */
+/*                                                                     */
+/***********************************************************************/
+ 
+     file1 = H5Fopen (FILE1, H5F_ACC_RDWR, H5P_DEFAULT);
+     file2 = H5Fopen (FILE2, H5F_ACC_RDWR, H5P_DEFAULT);
+     dataset1 = H5Dopen (file1, "Copy1");
+     dataset2 = H5Dopen (file2, "Copy2");
+     fid1 = H5Dget_space (dataset1);
+     mid1 = H5Screate_simple(1, marray, NULL); 
+     coord[0][0] = 0; coord[0][1] = 3;
+     coord[1][0] = 0; coord[1][1] = 1;
+
+     ret = H5Sselect_elements (fid1, H5S_SELECT_SET, NUMP, (const hsize_t **)coord);
+
+     ret = H5Dwrite (dataset1, H5T_NATIVE_INT, mid1, fid1, H5P_DEFAULT, val); 
+
+     fid2 = H5Scopy (fid1);
+
+     ret = H5Dwrite (dataset2, H5T_NATIVE_INT, mid1, fid2, H5P_DEFAULT, val); 
+
+     ret = H5Dclose (dataset1);
+     ret = H5Dclose (dataset2);
+     ret = H5Sclose (fid1);
+     ret = H5Sclose (fid2);
+     ret = H5Fclose (file1);
+     ret = H5Fclose (file2);
+     ret = H5Sclose (mid1);
+
+/***********************************************************************/
+/*                                                                     */
+/* Open both files and print the contents of the datasets.             */
+/*                                                                     */
+/***********************************************************************/
+
+     file1 = H5Fopen (FILE1, H5F_ACC_RDWR, H5P_DEFAULT);
+     file2 = H5Fopen (FILE2, H5F_ACC_RDWR, H5P_DEFAULT);
+     dataset1 = H5Dopen (file1, "Copy1");
+     dataset2 = H5Dopen (file2, "Copy2");
+
+     ret = H5Dread (dataset1, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+                    H5P_DEFAULT, bufnew);
+     
+     printf ("\nDataset 'Copy1' in file 'copy1.h5' contains: \n");
+     for (i=0;i<DIM1; i++) {
+        for (j=0;j<DIM2;j++) printf ("%3d  ", bufnew[i][j]);
+        printf("\n");
+     }
+
+     printf ("\nDataset 'Copy2' in file 'copy2.h5' contains: \n");
+
+     ret = H5Dread (dataset2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+                    H5P_DEFAULT, bufnew);
+
+     for (i=0;i<DIM1; i++) {
+        for (j=0;j<DIM2;j++) printf ("%3d  ", bufnew[i][j]);
+        printf("\n");
+     }
+     ret = H5Dclose (dataset1);
+     ret = H5Dclose (dataset2);
+     ret = H5Fclose (file1);
+     ret = H5Fclose (file2);
+
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtatt.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtatt.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtatt.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,46 @@
+/*
+ *   Creating a dataset attribute.
+ */
+
+#include <hdf5.h>
+#define FILE "dset.h5"
+
+main() {
+
+   hid_t       file_id, dataset_id, attribute_id, dataspace_id;  /* identifiers */
+   hsize_t     dims;
+   int         attr_data[2];
+   herr_t      status;
+
+   /* Initialize the attribute data. */
+   attr_data[0] = 100;
+   attr_data[1] = 200;
+
+   /* Open an existing file. */
+   file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+   /* Open an existing dataset. */
+   dataset_id = H5Dopen(file_id, "/dset");
+
+   /* Create the data space for the attribute. */
+   dims = 2;
+   dataspace_id = H5Screate_simple(1, &dims, NULL);
+
+   /* Create a dataset attribute. */
+   attribute_id = H5Acreate(dataset_id, "attr", H5T_STD_I32BE, dataspace_id, H5P_DEFAULT);
+
+   /* Write the attribute data. */
+   status = H5Awrite(attribute_id, H5T_NATIVE_INT, attr_data);
+
+   /* Close the attribute. */
+   status = H5Aclose(attribute_id);
+
+   /* Close the dataspace. */
+   status = H5Sclose(dataspace_id);
+
+   /* Close to the dataset. */
+   status = H5Dclose(dataset_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtdat.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtdat.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtdat.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,34 @@
+/*
+ *   Creating and closing a dataset.
+ */
+
+#include <hdf5.h>
+#define FILE "dset.h5"
+
+main() {
+
+   hid_t       file_id, dataset_id, dataspace_id;  /* identifiers */
+   hsize_t     dims[2];
+   herr_t      status;
+
+   /* Create a new file using default properties. */
+   file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Create the data space for the dataset. */
+   dims[0] = 4; 
+   dims[1] = 6; 
+   dataspace_id = H5Screate_simple(2, dims, NULL);
+
+   /* Create the dataset. */
+   dataset_id = H5Dcreate(file_id, "/dset", H5T_STD_I32BE, dataspace_id, H5P_DEFAULT);
+
+   /* End access to the dataset and release resources used by it. */
+   status = H5Dclose(dataset_id);
+
+   /* Terminate access to the data space. */ 
+   status = H5Sclose(dataspace_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtfile.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtfile.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtfile.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,19 @@
+/*
+ *    Creating and closing a file.
+ */
+
+#include <hdf5.h>
+#define FILE "file.h5"
+
+main() {
+
+   hid_t       file_id;   /* file identifier */
+   herr_t      status;
+
+   /* Create a new file using default properties. */
+   file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Terminate access to the file. */
+   status = H5Fclose(file_id); 
+}
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtgrp.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtgrp.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtgrp.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,24 @@
+/*
+ *    Creating and closing a group.
+ */
+
+#include <hdf5.h>
+#define FILE "group.h5"
+
+main() {
+
+   hid_t       file_id, group_id;  /* identifiers */
+   herr_t      status;
+
+   /* Create a new file using default properties. */
+   file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Create a group named "/MyGroup" in the file. */
+   group_id = H5Gcreate(file_id, "/MyGroup", 0);
+
+   /* Close the group. */
+   status = H5Gclose(group_id);
+
+   /* Terminate access to the file. */
+   status = H5Fclose(file_id);
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtgrpar.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtgrpar.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtgrpar.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,32 @@
+/*
+ *   Creating groups using absolute and relative names.
+ */
+
+#include <hdf5.h>
+#define FILE "groups.h5"
+
+main() {
+
+   hid_t       file_id, group1_id, group2_id, group3_id;  /* identifiers */
+   herr_t      status;
+
+   /* Create a new file using default properties. */
+   file_id = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* Create group "MyGroup" in the root group using absolute name. */
+   group1_id = H5Gcreate(file_id, "/MyGroup", 0);
+
+   /* Create group "Group_A" in group "MyGroup" using absolute name. */
+   group2_id = H5Gcreate(file_id, "/MyGroup/Group_A", 0);
+
+   /* Create group "Group_B" in group "MyGroup" using relative name. */
+   group3_id = H5Gcreate(group1_id, "Group_B", 0);
+
+   /* Close groups. */
+   status = H5Gclose(group1_id);
+   status = H5Gclose(group2_id);
+   status = H5Gclose(group3_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtgrpd.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtgrpd.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_crtgrpd.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,74 @@
+/*
+ *  Create two datasets within groups.
+ */
+
+#include <hdf5.h>
+#define FILE "groups.h5"
+
+main() {
+
+   hid_t       file_id, group_id, dataset_id, dataspace_id;  /* identifiers */
+   hsize_t     dims[2];
+   herr_t      status;
+   int         i, j, dset1_data[3][3], dset2_data[2][10];
+
+   /* Initialize the first dataset. */
+   for (i = 0; i < 3; i++)
+      for (j = 0; j < 3; j++)
+         dset1_data[i][j] = j + 1;
+
+   /* Initialize the second dataset. */
+   for (i = 0; i < 2; i++)
+      for (j = 0; j < 10; j++)
+         dset2_data[i][j] = j + 1;
+
+   /* Open an existing file. */
+   file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+   /* Create the data space for the first dataset. */
+   dims[0] = 3;
+   dims[1] = 3;
+   dataspace_id = H5Screate_simple(2, dims, NULL);
+
+   /* Create a dataset in group "MyGroup". */
+   dataset_id = H5Dcreate(file_id, "/MyGroup/dset1", H5T_STD_I32BE, dataspace_id,
+                          H5P_DEFAULT);
+
+   /* Write the first dataset. */
+   status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+                     dset1_data);
+
+   /* Close the data space for the first dataset. */
+   status = H5Sclose(dataspace_id);
+
+   /* Close the first dataset. */
+   status = H5Dclose(dataset_id);
+
+   /* Open an existing group of the specified file. */
+   group_id = H5Gopen(file_id, "/MyGroup/Group_A");
+
+   /* Create the data space for the second dataset. */
+   dims[0] = 2;
+   dims[1] = 10;
+   dataspace_id = H5Screate_simple(2, dims, NULL);
+
+   /* Create the second dataset in group "Group_A". */
+   dataset_id = H5Dcreate(group_id, "dset2", H5T_STD_I32BE, dataspace_id, H5P_DEFAULT);
+
+   /* Write the second dataset. */
+   status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+                     dset2_data);
+
+   /* Close the data space for the second dataset. */
+   status = H5Sclose(dataspace_id);
+
+   /* Close the second dataset */
+   status = H5Dclose(dataset_id);
+
+   /* Close the group. */
+   status = H5Gclose(group_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_extend.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_extend.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_extend.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,141 @@
+/**************************************************************  
+ *
+ *   This example shows how to work with extendible datasets.
+ *   In the current version of the library a dataset MUST be
+ *   chunked in order to be extendible.  
+ *
+ *   This example is derived from the h5_extend_write.c and 
+ *   h5_read_chunk.c examples that are in the "Introduction 
+ *   to HDF5".
+ *   
+ *************************************************************/
+ 
+#include "hdf5.h"
+
+#define FILE        "ext.h5"
+#define DATASETNAME "ExtendibleArray" 
+#define RANK         2
+
+int
+main (void)
+{
+    hid_t       file;                          /* handles */
+    hid_t       dataspace, dataset;  
+    hid_t       filespace;                   
+    hid_t       cparms;                     
+    hid_t       memspace;
+
+    hsize_t      dims[2]  = { 3, 3};           /* dataset dimensions			
+                                                  at creation time */
+    hsize_t      dims1[2] = { 3, 3};           /* data1 dimensions */ 
+    hsize_t      dims2[2] = { 7, 1};           /* data2 dimensions */  
+
+    hsize_t      maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};
+    hsize_t      size[2];
+    hsize_t      offset[2];
+    hsize_t      i,j;
+    herr_t       status, status_n;                             
+    int          data1[3][3] = { {1, 1, 1},      /* data to write */
+                                 {1, 1, 1},
+                                 {1, 1, 1} };      
+
+    int          data2[7]    = { 2, 2, 2, 2, 2, 2, 2};
+
+    /* Variables used in reading data back */
+    hsize_t      chunk_dims[2] ={2, 5};
+    hsize_t      chunk_dimsr[2];
+    hsize_t      dimsr[2];
+    int          data_out[10][3];
+    int          rank, rank_chunk;
+
+    /* Create the data space with unlimited dimensions. */
+    dataspace = H5Screate_simple (RANK, dims, maxdims); 
+
+    /* Create a new file. If file exists its contents will be overwritten. */
+    file = H5Fcreate (FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Modify dataset creation properties, i.e. enable chunking  */
+    cparms = H5Pcreate (H5P_DATASET_CREATE);
+    status = H5Pset_chunk ( cparms, RANK, chunk_dims);
+
+    /* Create a new dataset within the file using cparms
+       creation properties.  */
+    dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, dataspace,
+                         cparms);
+
+    /* Extend the dataset. This call assures that dataset is 3 x 3.*/
+    size[0]   = 3; 
+    size[1]   = 3; 
+    status = H5Dextend (dataset, size);
+
+    /* Select a hyperslab  */
+    filespace = H5Dget_space (dataset);
+    offset[0] = 0;
+    offset[1] = 0;
+    status = H5Sselect_hyperslab (filespace, H5S_SELECT_SET, offset, NULL,
+                                  dims1, NULL);  
+
+    /* Write the data to the hyperslab  */
+    status = H5Dwrite (dataset, H5T_NATIVE_INT, dataspace, filespace,
+                       H5P_DEFAULT, data1);
+
+    /* Extend the dataset. Dataset becomes 10 x 3  */
+    dims[0]   = dims1[0] + dims2[0];
+    size[0]   = dims[0];  
+    size[1]   = dims[1]; 
+    status = H5Dextend (dataset, size);
+
+    /* Select a hyperslab  */
+    filespace = H5Dget_space (dataset);
+    offset[0] = 3;
+    offset[1] = 0;
+    status = H5Sselect_hyperslab (filespace, H5S_SELECT_SET, offset, NULL,
+                                  dims2, NULL);  
+
+    /* Define memory space */
+    dataspace = H5Screate_simple (RANK, dims2, NULL); 
+
+    /* Write the data to the hyperslab  */
+    status = H5Dwrite (dataset, H5T_NATIVE_INT, dataspace, filespace,
+                       H5P_DEFAULT, data2);
+
+    /* Close resources */
+    status = H5Dclose (dataset);
+    status = H5Sclose (dataspace);
+    status = H5Sclose (filespace);
+    status = H5Fclose (file);
+
+/****************************************************************
+    Read the data back 
+ ***************************************************************/
+
+    file = H5Fopen (FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    dataset = H5Dopen (file, DATASETNAME);
+    filespace = H5Dget_space (dataset);
+    rank = H5Sget_simple_extent_ndims (filespace);
+    status_n = H5Sget_simple_extent_dims (filespace, dimsr, NULL);
+
+    cparms = H5Dget_create_plist (dataset);
+    if (H5D_CHUNKED == H5Pget_layout (cparms))
+    {
+       rank_chunk = H5Pget_chunk (cparms, 2, chunk_dimsr);
+    }
+
+    memspace = H5Screate_simple (rank,dimsr,NULL);
+    status = H5Dread (dataset, H5T_NATIVE_INT, memspace, filespace,
+                      H5P_DEFAULT, data_out);
+    printf("\n");
+    printf("Dataset: \n");
+    for (j = 0; j < dimsr[0]; j++)
+    {
+       for (i = 0; i < dimsr[1]; i++)
+           printf("%d ", data_out[j][i]);
+       printf("\n");
+    }
+
+    status = H5Pclose (cparms);
+    status = H5Dclose (dataset);
+    status = H5Sclose (filespace);
+    status = H5Sclose (memspace);
+    status = H5Fclose (file);
+}     

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_hyperslab.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_hyperslab.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_hyperslab.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,192 @@
+/************************************************************
+  
+  This example shows how to write and read a hyperslab.  It 
+  is derived from the h5_read.c and h5_write.c examples in 
+  the "Introduction to HDF5".
+
+ ************************************************************/
+ 
+#include "hdf5.h"
+
+#define FILE        "sds.h5"
+#define DATASETNAME "IntArray" 
+#define NX_SUB  3                      /* hyperslab dimensions */ 
+#define NY_SUB  4 
+#define NX 7                           /* output buffer dimensions */ 
+#define NY 7 
+#define NZ  3 
+#define RANK         2
+#define RANK_OUT     3
+
+#define X     5                        /* dataset dimensions */
+#define Y     6
+
+int
+main (void)
+{
+    hsize_t     dimsf[2];              /* dataset dimensions */
+    int         data[X][Y];            /* data to write */
+
+    /* 
+     * Data  and output buffer initialization. 
+     */
+    hid_t       file, dataset;         /* handles */
+    hid_t       dataspace;   
+    hid_t       memspace; 
+    hsize_t     dimsm[3];              /* memory space dimensions */
+    hsize_t     dims_out[2];           /* dataset dimensions */      
+    herr_t      status;                             
+
+    int         data_out[NX][NY][NZ ]; /* output buffer */
+   
+    hsize_t     count[2];              /* size of the hyperslab in the file */
+    hsize_t     offset[2];             /* hyperslab offset in the file */
+    hsize_t     count_out[3];          /* size of the hyperslab in memory */
+    hsize_t     offset_out[3];         /* hyperslab offset in memory */
+    int         i, j, k, status_n, rank;
+
+
+
+/*********************************************************  
+   This writes data to the HDF5 file.  
+ *********************************************************/  
+ 
+    /* 
+     * Data  and output buffer initialization. 
+     */
+    for (j = 0; j < X; j++) {
+	for (i = 0; i < Y; i++)
+	    data[j][i] = i + j;
+    }     
+    /*
+     * 0 1 2 3 4 5 
+     * 1 2 3 4 5 6
+     * 2 3 4 5 6 7
+     * 3 4 5 6 7 8
+     * 4 5 6 7 8 9
+     */
+
+    /*
+     * Create a new file using H5F_ACC_TRUNC access,
+     * the default file creation properties, and the default file
+     * access properties.
+     */
+    file = H5Fcreate (FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Describe the size of the array and create the data space for fixed
+     * size dataset. 
+     */
+    dimsf[0] = X;
+    dimsf[1] = Y;
+    dataspace = H5Screate_simple (RANK, dimsf, NULL); 
+
+    /*
+     * Create a new dataset within the file using defined dataspace and
+     * default dataset creation properties.
+     */
+    dataset = H5Dcreate (file, DATASETNAME, H5T_STD_I32BE, dataspace,
+                         H5P_DEFAULT);
+
+    /*
+     * Write the data to the dataset using default transfer properties.
+     */
+    status = H5Dwrite (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+                      H5P_DEFAULT, data);
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose (dataspace);
+    H5Dclose (dataset);
+    H5Fclose (file);
+ 
+
+/*************************************************************  
+
+  This reads the hyperslab from the sds.h5 file just 
+  created, into a 2-dimensional plane of the 3-dimensional 
+  array.
+
+ ************************************************************/  
+
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++) {
+	    for (k = 0; k < NZ ; k++)
+		data_out[j][i][k] = 0;
+	}
+    } 
+ 
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen (FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    dataset = H5Dopen (file, DATASETNAME);
+
+    dataspace = H5Dget_space (dataset);    /* dataspace handle */
+    rank      = H5Sget_simple_extent_ndims (dataspace);
+    status_n  = H5Sget_simple_extent_dims (dataspace, dims_out, NULL);
+    printf("\nRank: %d\nDimensions: %lu x %lu \n", rank,
+	   (unsigned long)(dims_out[0]), (unsigned long)(dims_out[1]));
+
+    /* 
+     * Define hyperslab in the dataset. 
+     */
+    offset[0] = 1;
+    offset[1] = 2;
+    count[0]  = NX_SUB;
+    count[1]  = NY_SUB;
+    status = H5Sselect_hyperslab (dataspace, H5S_SELECT_SET, offset, NULL, 
+                                  count, NULL);
+
+    /*
+     * Define the memory dataspace.
+     */
+    dimsm[0] = NX;
+    dimsm[1] = NY;
+    dimsm[2] = NZ;
+    memspace = H5Screate_simple (RANK_OUT, dimsm, NULL);   
+
+    /* 
+     * Define memory hyperslab. 
+     */
+    offset_out[0] = 3;
+    offset_out[1] = 0;
+    offset_out[2] = 0;
+    count_out[0]  = NX_SUB;
+    count_out[1]  = NY_SUB;
+    count_out[2]  = 1;
+    status = H5Sselect_hyperslab (memspace, H5S_SELECT_SET, offset_out, NULL, 
+                                  count_out, NULL);
+
+    /*
+     * Read data from hyperslab in the file into the hyperslab in 
+     * memory and display.
+     */
+    status = H5Dread (dataset, H5T_NATIVE_INT, memspace, dataspace,
+                      H5P_DEFAULT, data_out);
+    printf ("Data:\n ");
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++) printf("%d ", data_out[j][i][0]);
+	printf("\n ");
+    }
+	printf("\n");
+    /*
+     * 0 0 0 0 0 0 0
+     * 0 0 0 0 0 0 0
+     * 0 0 0 0 0 0 0
+     * 3 4 5 6 0 0 0  
+     * 4 5 6 7 0 0 0
+     * 5 6 7 8 0 0 0
+     * 0 0 0 0 0 0 0
+     */
+
+    /*
+     * Close and release resources.
+     */
+    H5Dclose (dataset);
+    H5Sclose (dataspace);
+    H5Sclose (memspace);
+    H5Fclose (file);
+
+}     

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_iterate.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_iterate.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_iterate.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,111 @@
+#include <hdf5.h>
+
+#define FILE   "iterate.h5"
+#define  FALSE 0
+
+/* 1-D dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	1
+#define SPACE1_DIM1	4
+
+herr_t file_info(hid_t loc_id, const char *name, void *opdata);
+                                     /* Operator function */
+int 
+main(void) {
+    hid_t		file;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		group;      /* Group ID             */
+    hid_t		sid;       /* Dataspace ID			*/
+    hid_t		tid;       /* Datatype ID			*/
+    hsize_t		dims[] = {SPACE1_DIM1};
+    herr_t		ret;		/* Generic return value		*/
+
+/* Compound datatype */
+typedef struct s1_t {
+    unsigned int a;
+    unsigned int b;
+    float c;
+} s1_t;
+
+    /* Create file */
+    file = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid = H5Screate_simple(SPACE1_RANK, dims, NULL);
+
+    /* Create a group */
+    group=H5Gcreate(file,"Group1",-1);
+
+    /* Close a group */
+    ret = H5Gclose(group);
+
+    /* Create a dataset  */
+    dataset=H5Dcreate(file,"Dataset1",H5T_STD_U32LE,sid,H5P_DEFAULT);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+
+    /* Create a datatype */
+    tid = H5Tcreate (H5T_COMPOUND, sizeof(s1_t));
+
+    /* Insert fields */
+    ret=H5Tinsert (tid, "a", HOFFSET(s1_t,a), H5T_NATIVE_INT);
+
+    ret=H5Tinsert (tid, "b", HOFFSET(s1_t,b), H5T_NATIVE_INT);
+
+    ret=H5Tinsert (tid, "c", HOFFSET(s1_t,c), H5T_NATIVE_FLOAT);
+
+    /* Save datatype for later */
+    ret=H5Tcommit (file, "Datatype1", tid);
+
+    /* Close datatype */
+    ret = H5Tclose(tid);
+
+    /* Iterate through the file to see members of the root group */
+
+    printf(" Objects in the root group are:\n");
+    printf("\n");
+
+    H5Giterate(file, "/", NULL, file_info, NULL);
+
+    /* Close file */
+    ret = H5Fclose(file);
+
+    return 0;
+}
+
+/*
+ * Operator function.
+ */
+herr_t file_info(hid_t loc_id, const char *name, void *opdata)
+{
+    H5G_stat_t statbuf;
+
+    /*
+     * Get type of the object and display its name and type.
+     * The name of the object is passed to this function by 
+     * the Library. Some magic :-)
+     */
+    H5Gget_objinfo(loc_id, name, FALSE, &statbuf);
+    switch (statbuf.type) {
+    case H5G_GROUP: 
+         printf(" Object with name %s is a group \n", name);
+         break;
+    case H5G_DATASET: 
+         printf(" Object with name %s is a dataset \n", name);
+         break;
+    case H5G_TYPE: 
+         printf(" Object with name %s is a named datatype \n", name);
+         break;
+    default:
+         printf(" Unable to identify an object ");
+    }
+    return 0;
+ }
+
+
+
+
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_mount.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_mount.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_mount.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,119 @@
+/* 
+ * This program shows the concept of "mounting files". 
+ * Program creates one file with group G in it, and another
+ * file with dataset D. Then second file is mounted in the first one
+ * under the "mounting point" G. Dataset D is accessed in the first file 
+ * under name /G/D and data is printed out. 
+ */
+
+#include<hdf5.h>
+
+#define FILE1 "mount1.h5"
+#define FILE2 "mount2.h5"
+
+#define RANK 2
+#define NX 4
+#define NY 5
+
+int main(void) 
+{
+
+   hid_t fid1, fid2, gid;  /* Files and group identifiers */
+   hid_t did, tid, sid;    /* Dataset and datatype identifiers */ 
+
+   herr_t status;
+   hsize_t dims[] = {NX,NY}; /* Dataset dimensions */
+
+   int i, j;
+   int bm[NX][NY], bm_out[NX][NY]; /* Data buffers */
+
+   /*
+    * Initialization of buffer matrix "bm" 
+    */
+   for(i =0; i<NX; i++) {
+    for(j = 0; j<NY; j++)
+      bm[i][j] = i + j;
+   }
+
+   /* 
+    * Create first file and a group in it.
+    */
+   fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+   gid = H5Gcreate(fid1, "/G", 0);
+
+   /* 
+    * Close group and file 
+    */
+   H5Gclose(gid);
+   H5Fclose(fid1);
+
+   /* 
+    * Create second file and dataset "D" in it.
+    */
+   fid2 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+   dims[0] = NX;
+   dims[1] = NY;
+   sid = H5Screate_simple(RANK, dims, NULL);
+   did = H5Dcreate(fid2, "D", H5T_NATIVE_INT, sid, H5P_DEFAULT);
+  
+   /*
+    * Write data to the dataset.
+    */
+   status = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, bm);
+
+   /* 
+    * Close all identifiers.
+    */
+   H5Sclose(sid);
+   H5Dclose(did);
+   H5Fclose(fid2);
+
+   /* 
+    * Reopen both files
+    */
+   fid1 = H5Fopen(FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
+   fid2 = H5Fopen(FILE2, H5F_ACC_RDONLY, H5P_DEFAULT);
+  
+   /* 
+    * Mount second file under G in the first file.
+    */
+   H5Fmount(fid1, "/G", fid2, H5P_DEFAULT);
+
+   /* 
+    * Access dataset D in the first file under /G/D name.
+    */
+   did = H5Dopen(fid1,"/G/D");
+   tid = H5Dget_type(did);
+   status = H5Dread(did, tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, bm_out);
+
+   /*
+    * Print out the data.
+    */
+   for(i=0; i<NX; i++){
+    for(j=0; j<NY; j++)
+        printf("  %d", bm_out[i][j]);
+	printf("\n");
+   }
+
+   /* 
+    * Close all identifers
+    */
+   H5Tclose(tid);
+   H5Dclose(did);
+	
+   /* 
+    * Unmounting second file
+    */
+   H5Funmount(fid1, "/G");
+
+   /*
+    * Close both files
+    */
+   H5Fclose(fid1);
+   H5Fclose(fid2);
+
+   return 0;
+}
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_rdwt.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_rdwt.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_rdwt.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,37 @@
+/* 
+ *   Writing and reading an existing dataset.
+ */
+
+#include <hdf5.h>
+#define FILE "dset.h5"
+
+main() {
+
+   hid_t       file_id, dataset_id;  /* identifiers */
+   herr_t      status;
+   int         i, j, dset_data[4][6];
+
+   /* Initialize the dataset. */
+   for (i = 0; i < 4; i++)
+      for (j = 0; j < 6; j++)
+         dset_data[i][j] = i * 6 + j + 1;
+
+   /* Open an existing file. */
+   file_id = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+   /* Open an existing dataset. */
+   dataset_id = H5Dopen(file_id, "/dset");
+
+   /* Write the dataset. */
+   status = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
+                     dset_data);
+
+   status = H5Dread(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, 
+                    dset_data);
+
+   /* Close the dataset. */
+   status = H5Dclose(dataset_id);
+
+   /* Close the file. */
+   status = H5Fclose(file_id);
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_read.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_read.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_read.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,136 @@
+/*  
+ *   This example reads hyperslab from the SDS.h5 file 
+ *   created by h5_write.c program into two-dimensional
+ *   plane of the three-dimensional array. 
+ *   Information about dataset in the SDS.h5 file is obtained. 
+ */
+ 
+#include "hdf5.h"
+
+#define FILE        "SDS.h5"
+#define DATASETNAME "IntArray" 
+#define NX_SUB  3           /* hyperslab dimensions */ 
+#define NY_SUB  4 
+#define NX 7           /* output buffer dimensions */ 
+#define NY 7 
+#define NZ  3 
+#define RANK         2
+#define RANK_OUT     3
+
+int
+main (void)
+{
+    hid_t       file, dataset;         /* handles */
+    hid_t       datatype, dataspace;   
+    hid_t       memspace; 
+    H5T_class_t class;                 /* data type class */
+    H5T_order_t order;                 /* data order */
+    size_t      size;                  /*
+				        * size of the data element	       
+				        * stored in file
+				        */
+    hsize_t     dimsm[3];              /* memory space dimensions */
+    hsize_t     dims_out[2];           /* dataset dimensions */      
+    herr_t      status;                             
+
+    int         data_out[NX][NY][NZ ]; /* output buffer */
+   
+    hsize_t      count[2];              /* size of the hyperslab in the file */
+    hsize_t      offset[2];             /* hyperslab offset in the file */
+    hsize_t      count_out[3];          /* size of the hyperslab in memory */
+    hsize_t      offset_out[3];         /* hyperslab offset in memory */
+    int          i, j, k, status_n, rank;
+
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++) {
+	    for (k = 0; k < NZ ; k++)
+		data_out[j][i][k] = 0;
+	}
+    } 
+ 
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen(FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    dataset = H5Dopen(file, DATASETNAME);
+
+    /*
+     * Get datatype and dataspace handles and then query
+     * dataset class, order, size, rank and dimensions.
+     */
+    datatype  = H5Dget_type(dataset);     /* datatype handle */ 
+    class     = H5Tget_class(datatype);
+    if (class == H5T_INTEGER) printf("Data set has INTEGER type \n");
+    order     = H5Tget_order(datatype);
+    if (order == H5T_ORDER_LE) printf("Little endian order \n");
+
+    size  = H5Tget_size(datatype);
+    printf(" Data size is %d \n", size);
+
+    dataspace = H5Dget_space(dataset);    /* dataspace handle */
+    rank      = H5Sget_simple_extent_ndims(dataspace);
+    status_n  = H5Sget_simple_extent_dims(dataspace, dims_out, NULL);
+    printf("rank %d, dimensions %lu x %lu \n", rank,
+	   (unsigned long)(dims_out[0]), (unsigned long)(dims_out[1]));
+
+    /* 
+     * Define hyperslab in the dataset. 
+     */
+    offset[0] = 1;
+    offset[1] = 2;
+    count[0]  = NX_SUB;
+    count[1]  = NY_SUB;
+    status = H5Sselect_hyperslab(dataspace, H5S_SELECT_SET, offset, NULL, 
+				 count, NULL);
+
+    /*
+     * Define the memory dataspace.
+     */
+    dimsm[0] = NX;
+    dimsm[1] = NY;
+    dimsm[2] = NZ ;
+    memspace = H5Screate_simple(RANK_OUT,dimsm,NULL);   
+
+    /* 
+     * Define memory hyperslab. 
+     */
+    offset_out[0] = 3;
+    offset_out[1] = 0;
+    offset_out[2] = 0;
+    count_out[0]  = NX_SUB;
+    count_out[1]  = NY_SUB;
+    count_out[2]  = 1;
+    status = H5Sselect_hyperslab(memspace, H5S_SELECT_SET, offset_out, NULL, 
+				 count_out, NULL);
+
+    /*
+     * Read data from hyperslab in the file into the hyperslab in 
+     * memory and display.
+     */
+    status = H5Dread(dataset, H5T_NATIVE_INT, memspace, dataspace,
+		     H5P_DEFAULT, data_out);
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++) printf("%d ", data_out[j][i][0]);
+	printf("\n");
+    }
+    /*
+     * 0 0 0 0 0 0 0
+     * 0 0 0 0 0 0 0
+     * 0 0 0 0 0 0 0
+     * 3 4 5 6 0 0 0  
+     * 4 5 6 7 0 0 0
+     * 5 6 7 8 0 0 0
+     * 0 0 0 0 0 0 0
+     */
+
+    /*
+     * Close/release resources.
+     */
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Sclose(dataspace);
+    H5Sclose(memspace);
+    H5Fclose(file);
+
+    return 0;
+}     

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2objr.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2objr.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2objr.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,93 @@
+#include <stdlib.h>
+#include <hdf5.h>
+
+#define FILE1   "trefer1.h5"
+
+/* dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	1
+#define SPACE1_DIM1	4
+
+int 
+main(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset,	/* Dataset ID			*/
+                dset2;      /* Dereferenced dataset ID */
+    hid_t		group;      /* Group ID             */
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1;       /* Datatype ID			*/
+    hobj_ref_t      *rbuf;      /* buffer to read from disk */
+    int                *tu32;      /* temp. buffer read from disk */
+    int        i;          /* counting variables */
+    char read_comment[10];
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Allocate read buffers */
+    rbuf = malloc(sizeof(hobj_ref_t)*SPACE1_DIM1);
+    tu32 = malloc(sizeof(int)*SPACE1_DIM1);
+
+    /* Open the file */
+    fid1 = H5Fopen(FILE1, H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,"/Dataset3");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_STD_REF_OBJ,H5S_ALL,H5S_ALL,H5P_DEFAULT,rbuf);
+
+    /* Open dataset object */
+    dset2 = H5Rdereference(dataset,H5R_OBJECT,&rbuf[0]);
+
+    /* Check information in referenced dataset */
+    sid1 = H5Dget_space(dset2);
+
+    ret=H5Sget_simple_extent_npoints(sid1);
+
+    /* Read from disk */
+    ret=H5Dread(dset2,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,tu32);
+    printf("Dataset data : \n");
+     for (i=0; i < SPACE1_DIM1 ; i++) printf (" %d ", tu32[i]);
+    printf("\n");
+    printf("\n");
+
+    /* Close dereferenced Dataset */
+    ret = H5Dclose(dset2);
+
+    /* Open group object */
+    group = H5Rdereference(dataset,H5R_OBJECT,&rbuf[2]);
+
+    /* Get group's comment */
+    ret=H5Gget_comment(group,".",10,read_comment);
+    printf("Group comment is %s \n", read_comment);
+    printf(" \n");
+    /* Close group */
+    ret = H5Gclose(group);
+
+    /* Open datatype object */
+    tid1 = H5Rdereference(dataset,H5R_OBJECT,&rbuf[3]);
+
+    /* Verify correct datatype */
+    {
+        H5T_class_t tclass;
+
+        tclass= H5Tget_class(tid1);
+        if ((tclass == H5T_COMPOUND))
+           printf ("Number of compound datatype members is %d \n", H5Tget_nmembers(tid1)); 
+    printf(" \n");
+    }
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+
+    /* Free memory buffers */
+    free(rbuf);
+    free(tu32);
+    return 0;
+}   

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2objw.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2objw.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2objw.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,120 @@
+
+#include <hdf5.h>
+
+#define FILE1   "trefer1.h5"
+
+/* 1-D dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	1
+#define SPACE1_DIM1	4
+
+/* 2-D dataset with fixed dimensions */
+#define SPACE2_NAME  "Space2"
+#define SPACE2_RANK	2
+#define SPACE2_DIM1	10
+#define SPACE2_DIM2	10
+
+int 
+main(void) {
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		group;      /* Group ID             */
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1;       /* Datatype ID			*/
+    hsize_t		dims1[] = {SPACE1_DIM1};
+    hobj_ref_t      *wbuf;      /* buffer to write to disk */
+    int       *tu32;      /* Temporary pointer to int data */
+    int        i;          /* counting variables */
+    const char *write_comment="Foo!"; /* Comments for group */
+    herr_t		ret;		/* Generic return value		*/
+
+/* Compound datatype */
+typedef struct s1_t {
+    unsigned int a;
+    unsigned int b;
+    float c;
+} s1_t;
+
+    /* Allocate write buffers */
+    wbuf=(hobj_ref_t *)malloc(sizeof(hobj_ref_t)*SPACE1_DIM1);
+    tu32=malloc(sizeof(int)*SPACE1_DIM1);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+
+    /* Create a group */
+    group=H5Gcreate(fid1,"Group1",-1);
+
+    /* Set group's comment */
+    ret=H5Gset_comment(group,".",write_comment);
+
+    /* Create a dataset (inside Group1) */
+    dataset=H5Dcreate(group,"Dataset1",H5T_STD_U32LE,sid1,H5P_DEFAULT);
+
+    for(i=0; i<SPACE1_DIM1; i++)
+        tu32[i] = i*3;
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,tu32);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+
+    /* Create another dataset (inside Group1) */
+    dataset=H5Dcreate(group,"Dataset2",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tcreate (H5T_COMPOUND, sizeof(s1_t));
+
+    /* Insert fields */
+    ret=H5Tinsert (tid1, "a", HOFFSET(s1_t,a), H5T_NATIVE_INT);
+
+    ret=H5Tinsert (tid1, "b", HOFFSET(s1_t,b), H5T_NATIVE_INT);
+
+    ret=H5Tinsert (tid1, "c", HOFFSET(s1_t,c), H5T_NATIVE_FLOAT);
+
+    /* Save datatype for later */
+    ret=H5Tcommit (group, "Datatype1", tid1);
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+
+    /* Close group */
+    ret = H5Gclose(group);
+
+    /* Create a dataset to store references */
+    dataset=H5Dcreate(fid1,"Dataset3",H5T_STD_REF_OBJ,sid1,H5P_DEFAULT);
+
+    /* Create reference to dataset */
+    ret = H5Rcreate(&wbuf[0],fid1,"/Group1/Dataset1",H5R_OBJECT,-1);
+
+    /* Create reference to dataset */
+    ret = H5Rcreate(&wbuf[1],fid1,"/Group1/Dataset2",H5R_OBJECT,-1);
+
+    /* Create reference to group */
+    ret = H5Rcreate(&wbuf[2],fid1,"/Group1",H5R_OBJECT,-1);
+
+    /* Create reference to named datatype */
+    ret = H5Rcreate(&wbuf[3],fid1,"/Group1/Datatype1",H5R_OBJECT,-1);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_STD_REF_OBJ,H5S_ALL,H5S_ALL,H5P_DEFAULT,wbuf);
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    free(wbuf);
+    free(tu32);
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2regr.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2regr.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2regr.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,119 @@
+#include <stdlib.h>
+#include <hdf5.h>
+
+#define FILE2	"trefer2.h5"
+#define NPOINTS 10
+ 
+/* 1-D dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	1
+#define SPACE1_DIM1	4
+
+/* 2-D dataset with fixed dimensions */
+#define SPACE2_NAME  "Space2"
+#define SPACE2_RANK	2
+#define SPACE2_DIM1	10
+#define SPACE2_DIM2	10
+
+int 
+main(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dset1,	/* Dataset ID			*/
+                dset2;      /* Dereferenced dataset ID */
+    hid_t		sid1,       /* Dataspace ID	#1		*/
+                sid2;       /* Dataspace ID	#2		*/
+    hsize_t *   coords;             /* Coordinate buffer */
+    hsize_t		low[SPACE2_RANK];   /* Selection bounds */
+    hsize_t		high[SPACE2_RANK];     /* Selection bounds */
+    hdset_reg_ref_t      *rbuf;      /* buffer to to read disk */
+    int    *drbuf;      /* Buffer for reading numeric data from disk */
+    int        i, j;          /* counting variables */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+
+    /* Allocate write & read buffers */
+    rbuf=malloc(sizeof(hdset_reg_ref_t)*SPACE1_DIM1);
+    drbuf=calloc(sizeof(int),SPACE2_DIM1*SPACE2_DIM2);
+
+    /* Open the file */
+    fid1 = H5Fopen(FILE2, H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* Open the dataset */
+    dset1=H5Dopen(fid1,"/Dataset1");
+
+    /* Read selection from disk */
+    ret=H5Dread(dset1,H5T_STD_REF_DSETREG,H5S_ALL,H5S_ALL,H5P_DEFAULT,rbuf);
+
+    /* Try to open objects */
+    dset2 = H5Rdereference(dset1,H5R_DATASET_REGION,&rbuf[0]);
+
+    /* Check information in referenced dataset */
+    sid1 = H5Dget_space(dset2);
+
+    ret=H5Sget_simple_extent_npoints(sid1);
+    printf(" Number of elements in the dataset is : %d\n",ret);
+
+    /* Read from disk */
+    ret=H5Dread(dset2,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,drbuf);
+
+    for(i=0; i<SPACE2_DIM1; i++) {
+        for (j=0; j<SPACE2_DIM2; j++) printf (" %d ", drbuf[i*SPACE2_DIM2+j]);
+        printf("\n"); }
+
+    /* Get the hyperslab selection */
+    sid2=H5Rget_region(dset1,H5R_DATASET_REGION,&rbuf[0]);
+
+    /* Verify correct hyperslab selected */
+    ret = H5Sget_select_npoints(sid2);
+    printf(" Number of elements in the hyperslab is : %d \n", ret);
+    ret = H5Sget_select_hyper_nblocks(sid2);
+    coords=malloc(ret*SPACE2_RANK*sizeof(hsize_t)*2); /* allocate space for the hyperslab blocks */
+    ret = H5Sget_select_hyper_blocklist(sid2,0,ret,coords);
+    printf(" Hyperslab coordinates are : \n");
+    printf (" ( %lu , %lu ) ( %lu , %lu ) \n", \
+(unsigned long)coords[0],(unsigned long)coords[1],(unsigned long)coords[2],(unsigned long)coords[3]); 
+    free(coords);
+    ret = H5Sget_select_bounds(sid2,low,high);
+
+    /* Close region space */
+    ret = H5Sclose(sid2);
+
+    /* Get the element selection */
+    sid2=H5Rget_region(dset1,H5R_DATASET_REGION,&rbuf[1]);
+
+    /* Verify correct elements selected */
+    ret = H5Sget_select_elem_npoints(sid2);
+    printf(" Number of selected elements is : %d\n", ret);
+
+    /* Allocate space for the element points */
+    coords= malloc(ret*SPACE2_RANK*sizeof(hsize_t)); 
+    ret = H5Sget_select_elem_pointlist(sid2,0,ret,coords);
+    printf(" Coordinates of selected elements are : \n");
+    for (i=0; i<2*NPOINTS; i=i+2) 
+         printf(" ( %lu , %lu ) \n", (unsigned long)coords[i],(unsigned long)coords[i+1]); 
+          
+    free(coords);
+    ret = H5Sget_select_bounds(sid2,low,high);
+
+    /* Close region space */
+    ret = H5Sclose(sid2);
+
+    /* Close first space */
+    ret = H5Sclose(sid1);
+
+    /* Close dereferenced Dataset */
+    ret = H5Dclose(dset2);
+
+    /* Close Dataset */
+    ret = H5Dclose(dset1);
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+
+    /* Free memory buffers */
+    free(rbuf);
+    free(drbuf);
+    return 0;
+}   

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2regw.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2regw.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_ref2regw.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,112 @@
+#include <stdlib.h>
+#include <hdf5.h>
+
+#define FILE2	"trefer2.h5"
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK     1
+#define SPACE1_DIM1     4
+
+/* Dataset with fixed dimensions */
+#define SPACE2_NAME  "Space2"
+#define SPACE2_RANK	2
+#define SPACE2_DIM1	10
+#define SPACE2_DIM2	10
+
+/* Element selection information */
+#define POINT1_NPOINTS 10
+
+int
+main(void)
+{
+    hid_t	fid1;		/* HDF5 File IDs		*/
+    hid_t	dset1,		/* Dataset ID			*/
+                dset2;      /* Dereferenced dataset ID */
+    hid_t	sid1,       /* Dataspace ID	#1		*/
+                sid2;       /* Dataspace ID	#2		*/
+    hsize_t	dims1[] = {SPACE1_DIM1},
+            	dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t	start[SPACE2_RANK];     /* Starting location of hyperslab */
+    hsize_t	stride[SPACE2_RANK];    /* Stride of hyperslab */
+    hsize_t	count[SPACE2_RANK];     /* Element count of hyperslab */
+    hsize_t	block[SPACE2_RANK];     /* Block size of hyperslab */
+    hsize_t	coord1[POINT1_NPOINTS][SPACE2_RANK]; 
+                                    /* Coordinates for point selection */
+    hdset_reg_ref_t      *wbuf;      /* buffer to write to disk */
+    int     *dwbuf;      /* Buffer for writing numeric data to disk */
+    int        i;          /* counting variables */
+    herr_t		ret;		/* Generic return value		*/
+
+
+    /* Allocate write & read buffers */
+    wbuf=calloc(sizeof(hdset_reg_ref_t), SPACE1_DIM1);
+    dwbuf=malloc(sizeof(int)*SPACE2_DIM1*SPACE2_DIM2);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+
+    /* Create a dataset */
+    dset2=H5Dcreate(fid1,"Dataset2",H5T_STD_U8LE,sid2,H5P_DEFAULT);
+
+    for(i=0; i<SPACE2_DIM1*SPACE2_DIM2; i++)
+        dwbuf[i]=i*3;
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dset2,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,dwbuf);
+
+    /* Close Dataset */
+    ret = H5Dclose(dset2);
+
+    /* Create dataspace for the reference dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+
+    /* Create a dataset */
+    dset1=H5Dcreate(fid1,"Dataset1",H5T_STD_REF_DSETREG,sid1,H5P_DEFAULT);
+
+    /* Create references */
+
+    /* Select 6x6 hyperslab for first reference */
+    start[0]=2; start[1]=2;
+    stride[0]=1; stride[1]=1;
+    count[0]=6; count[1]=6;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+
+    /* Store first dataset region */
+    ret = H5Rcreate(&wbuf[0],fid1,"/Dataset2",H5R_DATASET_REGION,sid2);
+
+    /* Select sequence of ten points for second reference */
+    coord1[0][0]=6; coord1[0][1]=9;
+    coord1[1][0]=2; coord1[1][1]=2;
+    coord1[2][0]=8; coord1[2][1]=4;
+    coord1[3][0]=1; coord1[3][1]=6;
+    coord1[4][0]=2; coord1[4][1]=8;
+    coord1[5][0]=3; coord1[5][1]=2;
+    coord1[6][0]=0; coord1[6][1]=4;
+    coord1[7][0]=9; coord1[7][1]=0;
+    coord1[8][0]=7; coord1[8][1]=1;
+    coord1[9][0]=3; coord1[9][1]=3;
+    ret = H5Sselect_elements(sid2,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord1);
+
+    /* Store second dataset region */
+    ret = H5Rcreate(&wbuf[1],fid1,"/Dataset2",H5R_DATASET_REGION,sid2);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dset1,H5T_STD_REF_DSETREG,H5S_ALL,H5S_ALL,H5P_DEFAULT,wbuf);
+
+    /* Close all objects */
+    ret = H5Sclose(sid1);
+    ret = H5Dclose(dset1);
+    ret = H5Sclose(sid2);
+    
+    /* Close file */
+    ret = H5Fclose(fid1);
+
+    free(wbuf);
+    free(dwbuf);
+    return 0;
+}   
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_reference.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_reference.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/h5_reference.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,146 @@
+ /* 
+  *       This program illustrates how references to the objects can be used.
+  *       Program creates two datasets in the file. It also creates the third
+  *       dataset, and references to the first two datasets are stored in it.
+  *       Program reopens the file and reads dataset with the references.
+  *       References are used to open first two datasets and read datatspace
+  *       and datatype information about them. 
+  *         
+ */
+
+#include<hdf5.h>
+
+#define FILE "refere.h5"
+
+int
+main(void) {
+   hid_t fid;                         /* File, datasets, datatypes and    */
+   hid_t did_a, sid_a;                /* dataspaces identifiers for three */ 
+   hid_t did_b, tid_b, sid_b;         /* datasets.                        */ 
+   hid_t did_r, tid_r, sid_r;
+   herr_t status;
+
+   hobj_ref_t *wbuf; /* buffer to write to disk */
+   hobj_ref_t *rbuf; /* buffer to read from disk */
+ 
+
+   hsize_t dim_r[1]; 
+   hsize_t dim_a[1];
+   hsize_t dim_b[2];
+
+   herr_t ret; /* return values */
+   
+   /* 
+    *  Create a file using default properties.
+    */
+   fid = H5Fcreate(FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /* 
+    *  Create  dataset "A" in the file.
+    */
+   dim_a[0] = 5;
+   sid_a = H5Screate_simple(1, dim_a, NULL);
+   did_a = H5Dcreate(fid, "A", H5T_NATIVE_INT, sid_a, H5P_DEFAULT);
+   
+  /* 
+   *  Create dataset "B" in the file.
+   */
+   dim_b[0] = 2;
+   dim_b[1] = 6;
+   sid_b = H5Screate_simple(2, dim_b, NULL);  
+   did_b = H5Dcreate(fid, "B", H5T_NATIVE_FLOAT, sid_b, H5P_DEFAULT);
+   
+   /* 
+    *  Create dataset "R" to store references to the datasets "A" and "B".
+    */
+   dim_r[0] = 2;
+   sid_r = H5Screate_simple(1, dim_r, NULL);
+   tid_r = H5Tcopy(H5T_STD_REF_OBJ);
+   did_r = H5Dcreate(fid, "R", tid_r, sid_r, H5P_DEFAULT );
+
+   /* 
+    *  Allocate write and read buffers.
+    */
+   wbuf = malloc(sizeof(hobj_ref_t)*2);
+   rbuf = malloc(sizeof(hobj_ref_t)*2);
+  
+   /*
+    *  Create references to the datasets "A" and "B"
+    *  and store them in the wbuf.
+    */
+   H5Rcreate(&wbuf[0], fid, "A", H5R_OBJECT, -1); 
+   H5Rcreate(&wbuf[1], fid, "B", H5R_OBJECT, -1);
+ 
+   /* 
+    *  Write dataset R using default transfer properties.
+    */
+   status = H5Dwrite(did_r, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL,
+		     H5P_DEFAULT, wbuf);
+
+   /* 
+    *  Close all objects. 
+    */
+   H5Sclose(sid_a);
+   H5Dclose(did_a);
+   
+   H5Sclose(sid_b);
+   H5Dclose(did_b);
+
+   H5Tclose(tid_r);
+   H5Sclose(sid_r);
+   H5Dclose(did_r);
+   
+   H5Fclose(fid);
+   
+   /* 
+    * Reopen the file.
+    */
+   fid = H5Fopen(FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+
+   /* 
+    *  Open and read dataset "R".
+    */
+   did_r = H5Dopen(fid, "R");
+   status = H5Dread(did_r, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL,
+		    H5P_DEFAULT, rbuf);
+
+   /* 
+    *  Open dataset A using reference to it.
+    */
+   did_a = H5Rdereference(did_r, H5R_OBJECT, &rbuf[0]);
+
+   /* 
+    *  Get rank of the dataset "A"
+    */
+
+   printf("\n");
+   sid_a = H5Dget_space(did_a);
+   ret = H5Sget_simple_extent_ndims(sid_a);
+   
+   if(ret == 1) printf("Rank of A is %d.\n", ret);
+   printf("\n");
+
+   /* 
+    *  Get datatype of the dataset "B"
+    */
+   did_b = H5Rdereference(did_r, H5R_OBJECT, &rbuf[1]);
+   tid_b = H5Dget_type(did_b);
+   if(H5Tequal(tid_b, H5T_NATIVE_FLOAT))
+     printf("Datatype of B is H5T_NATIVE_FLOAT.\n");
+   printf("\n");
+
+   /* 
+    * Close all objects.
+    */
+   H5Dclose(did_a);
+   H5Sclose(sid_a);
+   H5Dclose(did_b);
+   H5Tclose(tid_b);
+   H5Fclose(fid);
+
+   return 0;
+
+ }
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/hyperslab.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/hyperslab.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/hyperslab.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,199 @@
+!
+! This example shows how to write and read a hyperslab.  
+!
+
+     PROGRAM SELECTEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=7), PARAMETER :: filename = "sdsf.h5"  ! File name
+     CHARACTER(LEN=8), PARAMETER :: dsetname = "IntArray" ! Dataset name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+     INTEGER(HID_T) :: dataspace     ! Dataspace identifier 
+     INTEGER(HID_T) :: memspace      ! memspace identifier 
+
+     INTEGER(HSIZE_T), DIMENSION(3) :: dimsm = (/7,7,3/) ! Dataset dimensions
+                                                         ! in memory
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims_out ! Buffer to read in dataset 
+                                                ! dimesions
+     INTEGER(HSIZE_T), DIMENSION(2) :: dimsf = (/5,6/) ! Dataset dimensions.
+
+     INTEGER(HSIZE_T), DIMENSION(2) :: count = (/3,4/) 
+                                            ! Size of the hyperslab in the file
+     INTEGER(HSIZE_T), DIMENSION(2) :: offset = (/1,2/)
+                                            !hyperslab offset in the file 
+     INTEGER(HSIZE_T), DIMENSION(3) :: count_out = (/3,4,1/)
+                                            !Size of the hyperslab in memory 
+     INTEGER(HSIZE_T), DIMENSION(3) :: offset_out = (/3,0,0/)
+                                            !hyperslab offset in memory 
+     INTEGER, DIMENSION(5,6) :: data ! Data to write
+     INTEGER, DIMENSION(7,7,3) :: data_out ! Output buffer
+     INTEGER :: dsetrank = 2 ! Dataset rank ( in file )
+     INTEGER :: memrank = 3  ! Dataset rank ( in memory )
+     INTEGER :: rank 
+     INTEGER :: i, j, k 
+
+     INTEGER :: error, error_n  ! Error flags
+
+
+   !
+   ! Write data to the HDF5 file.  
+   !
+
+     !
+     ! Data initialization. 
+     !
+     do i = 1, 5
+          do j = 1, 6
+               data(i,j) = (i-1) + (j-1);
+          end do
+     end do
+     !
+     ! 0,  1,  2,  3,  4,  5
+     ! 1,  2,  3,  4,  5,  6
+     ! 2,  3,  4,  5,  6,  7
+     ! 3,  4,  5,  6,  7,  8
+     ! 4,  5,  6,  7,  8,  9
+     !
+     
+     !
+     ! Initialize FORTRAN predefined datatypes
+     !
+     CALL h5open_f(error) 
+
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+     !
+     ! Create the data space for the  dataset. 
+     !
+     CALL h5screate_simple_f(dsetrank, dimsf, dataspace, error)
+
+     !
+     ! Create the dataset with default properties.
+     !
+     CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INTEGER, dataspace, &
+                      dset_id, error)
+
+     !
+     ! Write the dataset.
+     !
+     CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data, error)
+
+     !
+     ! Close the dataspace for the dataset.
+     !
+     CALL h5sclose_f(dataspace, error)
+
+     !
+     ! Close the dataset.
+     !
+     CALL h5dclose_f(dset_id, error)
+
+     !
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+
+  !
+  ! This  part of the code reads the hyperslab from the sds.h5 file just 
+  ! created, into a 2-dimensional plane of the 3-dimensional dataset.
+  !
+
+     !
+     ! Initialize data_out array.
+     !
+     do i = 1, 7
+          do j = 1, 7
+              do k = 1,3
+                  data_out(i,j,k) = 0;
+              end do
+          end do
+     end do
+
+     !
+     ! Open the file.
+     !
+     CALL h5fopen_f (filename, H5F_ACC_RDONLY_F, file_id, error)
+       
+     !
+     ! Open the  dataset.
+     !
+     CALL h5dopen_f(file_id, dsetname, dset_id, error)
+
+     !
+     ! Get dataset's dataspace identifier.
+     !
+     CALL h5dget_space_f(dset_id, dataspace, error)
+
+     !
+     ! Select hyperslab in the dataset.
+     !
+     CALL h5sselect_hyperslab_f(dataspace, H5S_SELECT_SET_F, &
+                                offset, count, error) 
+     !
+     ! Create memory dataspace.
+     !
+     CALL h5screate_simple_f(memrank, dimsm, memspace, error)
+
+     !
+     ! Select hyperslab in memory.
+     !
+     CALL h5sselect_hyperslab_f(memspace, H5S_SELECT_SET_F, &
+                                offset_out, count_out, error) 
+
+     !
+     ! Read data from hyperslab in the file into the hyperslab in 
+     ! memory and display.
+     !
+     CALL H5Dread_f(dset_id, H5T_NATIVE_INTEGER, data_out, error, &
+                    memspace, dataspace)
+     
+     !
+     ! Display data_out array
+     !
+     do i = 1, 7
+         print *, (data_out(i,j,1), j = 1,7)
+     end do
+
+     ! 0 0 0 0 0 0 0
+     ! 0 0 0 0 0 0 0
+     ! 0 0 0 0 0 0 0
+     ! 3 4 5 6 0 0 0  
+     ! 4 5 6 7 0 0 0
+     ! 5 6 7 8 0 0 0
+     ! 0 0 0 0 0 0 0
+     !
+
+     !
+     ! Close the dataspace for the dataset.
+     !
+     CALL h5sclose_f(dataspace, error)
+
+     !
+     ! Close the memoryspace.
+     !
+     CALL h5sclose_f(memspace, error)
+
+     !
+     ! Close the dataset.
+     !
+     CALL h5dclose_f(dset_id, error)
+
+     !
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+
+     !
+     ! Close FORTRAN predefined datatypes.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM SELECTEXAMPLE 

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Compound.java
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Compound.java	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Compound.java	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,540 @@
+/******************************************************************
+ * Compound.java (for HDF5 tutorial lesson 11)
+ *
+ *   -- Creating a compound data type
+ *      (a java conversion from compound.c)
+ *
+ ******************************************************************/
+
+import ncsa.hdf.hdf5lib.*;
+import ncsa.hdf.hdf5lib.exceptions.*;
+
+public class Compound
+{
+   public static void main (String []argv) 
+   {    
+      final String FILE = "SDScompound.h5";
+      final String DATASETNAME = "ArrayOfStructures";
+      final int LENGTH = 10;
+      final int RANK = 1;
+
+      /* First structure and dataset */
+      /* an array of LENGTH 'complex' numbers */
+      byte[] data1 = new byte[LENGTH * 16]; 
+
+      int[] AR = new int[1];
+      float[] BR = new float[1];
+      double[] CR = new double[1];
+
+      byte [] ARec = new byte[4];
+      byte [] BRec = new byte[4];
+      byte [] CRec = new byte[8];
+      
+      int s1_tid;     /* File datatype identifier */
+
+      /* Second structure (subset of s1_t) and dataset*/
+      byte[] data2 = new byte[LENGTH * 12]; 
+      int s2_tid;    /* Memory datatype handle */
+      
+      /* Third "structure" ( will be used to read float field of s1) */
+      int s3_tid;   /* Memory datatype handle */
+      float[] s3 = new float[LENGTH];
+      
+      int i;
+      int file, dataset, space; /* Handles */
+      int status;
+      long[] dim = new long[1];   /* Dataspace dimensions */
+      dim[0] = LENGTH;
+    
+      /*
+       * Initialize the data
+       */
+      for (i = 0; i < LENGTH; i++) 
+      {
+	 AR[0] = (int) i;
+	 BR[0] = (float) i * i;
+	 CR[0] = (double) 1. / (i + 1);
+
+	 ARec = HDFNativeData.intToByte (0, 1, AR);
+	 BRec = HDFNativeData.floatToByte (0, 1, BR);
+	 CRec = HDFNativeData.doubleToByte (0, 1, CR);
+
+	 System.arraycopy (ARec, 0, data1, (i * 16), 4);
+	 System.arraycopy (BRec, 0, data1, (i * 16) + 4, 4); 
+	 System.arraycopy (CRec, 0, data1, (i * 16) + 8, 8);
+      }
+      
+      /*
+       * Create the data space.
+       */
+      space = H5Screate_simple_wrap (RANK, dim, null);
+      
+      /*
+       * Create the file.
+       */
+      file = H5Fcreate_wrap (FILE, HDF5Constants.H5F_ACC_TRUNC, 
+			     HDF5Constants.H5P_DEFAULT, 
+			     HDF5Constants.H5P_DEFAULT);
+      
+      /*
+       * Create the memory data type. 
+       */
+      s1_tid = H5Tcreate_wrap (HDF5Constants.H5T_COMPOUND, 16);
+      H5Tinsert_wrap (s1_tid, "a_name", 0,  
+		      H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT));
+      H5Tinsert_wrap (s1_tid, "b_name", 4,
+		      H5.J2C (HDF5CDataTypes.JH5T_NATIVE_FLOAT));
+      H5Tinsert_wrap (s1_tid, "c_name", 8, 
+		      H5.J2C (HDF5CDataTypes.JH5T_NATIVE_DOUBLE));
+
+      /* 
+       * Create the dataset.
+       */
+      dataset = H5Dcreate_wrap (file, DATASETNAME, s1_tid, 
+				space, HDF5Constants.H5P_DEFAULT);
+
+      /*
+       * Wtite data to the dataset; 
+       */
+      status = H5Dwrite_wrap (dataset, s1_tid, 
+			      HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL, 
+			      HDF5Constants.H5P_DEFAULT, data1);
+
+      /*
+       * Release resources
+       */
+      H5Tclose_wrap (s1_tid);
+      H5Sclose_wrap (space);
+      H5Dclose_wrap (dataset);
+      H5Fclose_wrap (file);
+ 
+      /*
+       * Open the file and the dataset.
+       */
+      file = H5Fopen_wrap (FILE, HDF5Constants.H5F_ACC_RDONLY, 
+			   HDF5Constants.H5P_DEFAULT);
+
+      dataset = H5Dopen_wrap (file, DATASETNAME);
+      
+      /* 
+       * Create a data type for s2
+       */
+      s2_tid = H5Tcreate_wrap (HDF5Constants.H5T_COMPOUND, 12);
+      H5Tinsert_wrap (s2_tid, "c_name", 0,  
+		      H5.J2C (HDF5CDataTypes.JH5T_NATIVE_DOUBLE));
+      H5Tinsert_wrap (s2_tid, "a_name", 8,  
+		      H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT));
+
+      /*
+       * Read two fields c and a from s1 dataset. Fields in the file
+       * are found by their names "c_name" and "a_name".
+       */
+      status = H5Dread_wrap (dataset, s2_tid, HDF5Constants.H5S_ALL, 
+			     HDF5Constants.H5S_ALL, 
+			     HDF5Constants.H5P_DEFAULT, data2);
+      
+      /*
+       * Display the fields.  Convert from bytes into numbers.
+       */
+      System.out.println ("\nField c : ");     
+      for( i = 0; i < LENGTH; i++)  {
+	 System.arraycopy (data2, (i*12), CRec, 0, 8);
+	 CR = HDFNativeData.byteToDouble(0, 1, CRec);
+	 System.out.print (CR[0]+" ");
+      }
+      System.out.println ();
+
+      System.out.println("\nField a :");
+      for( i = 0; i < LENGTH; i++) {
+	 System.arraycopy (data2, (i*12)+8, ARec, 0, 4);
+	 AR = HDFNativeData.byteToInt(0, 1, ARec);
+	 System.out.print (AR[0]+" ");
+	}
+      System.out.println ();
+
+      /* 
+       * Create a data type for s3.
+       */
+      s3_tid = H5Tcreate_wrap (HDF5Constants.H5T_COMPOUND, 4);
+      
+      status = 
+	  H5Tinsert_wrap (s3_tid, "b_name", 0,  
+			  H5.J2C (HDF5CDataTypes.JH5T_NATIVE_FLOAT));
+      
+      /*
+       * Read field b from s1 dataset. Field in the file is found by its name.
+       */
+      status = H5Dread_wrap (dataset, s3_tid, HDF5Constants.H5S_ALL, 
+			     HDF5Constants.H5S_ALL, 
+			     HDF5Constants.H5P_DEFAULT, s3);
+      
+      /*
+       * Display the field.  Data is read directly into array of 'float'.
+       */
+      System.out.println ();
+      System.out.println ("Field b :");
+      for( i = 0; i < LENGTH; i++) {
+	 System.out.print (s3[i]+" ");
+	}
+      System.out.println ();
+      
+      /*
+       * Release resources
+       */
+      H5Tclose_wrap (s2_tid);
+      H5Tclose_wrap (s3_tid);
+      H5Dclose_wrap (dataset);
+      H5Fclose_wrap (file);
+   }
+
+
+   // Help function for creating a new file 
+   public static int H5Fcreate_wrap (String name, int flags,
+				     int create_id, int access_id)
+   {
+      int file_id = -1;    // file identifier 
+      try 
+      {
+	 // Create a new file using default file properties.
+	 file_id = H5.H5Fcreate (name, flags, create_id, access_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Compound.H5Fcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Compound.H5Fcreate_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return file_id;
+   }  
+
+
+   // Help function for adding another member to the compound 
+   // datatype datatype_id.
+   public static int H5Tinsert_wrap (int type_id, String name,
+				     long offset, int field_id)
+   {
+      int status = -1;  
+      try 
+      {
+         // Adding another member to the compound datatype datatype_id.
+	  status = H5.H5Tinsert (type_id, name, offset, field_id);
+	  
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	     ("Compound.H5Tinsert_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println 
+	     ("Compound.H5Tinsert_wrap() with HDF5Exception: "
+	      + e.getMessage());
+      }
+      return status;
+   }
+
+
+   // Help function for creating the memory data type.
+   public static int H5Tcreate_wrap (int dclass, int size)
+   {
+      int datatype_id = -1;    // memory data type identifier 
+      try 
+      {
+         // Create the memory data type. 
+         datatype_id = H5.H5Tcreate (dclass, size);
+
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	     ("Compound.H5Tcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println 
+	     ("Compound.H5Tcreate_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return datatype_id;
+   }
+
+
+   // Help function for opening an existing file
+   public static int H5Fopen_wrap (String name, int flags, int access_id)
+   {
+      int file_id = -1;    // file identifier 
+      try 
+      {
+	 // Create a new file using default file properties.
+	 file_id = H5.H5Fopen (name, flags, access_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Compound.H5Fopen_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Compound.H5Fopen_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return file_id;
+   }
+   
+
+   // Help function for opening an existing dataset
+   public static int H5Dopen_wrap (int loc_id, String name)
+   {
+      int dataset_id = -1;  // dataset identifier   
+   
+      try 
+      {
+	 // Opening an existing dataset
+	 dataset_id = H5.H5Dopen (loc_id, name);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Compound.H5Dopen_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Compound.H5Dopen_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataset_id;
+   }
+
+    
+   // Help function for creating a new simple dataspace and opening it
+   // for access
+   public static int H5Screate_simple_wrap (int rank, long dims[],
+					    long maxdims[])
+   {
+      int dataspace_id = -1;  // dataspace identifier   
+        
+      try 
+      {
+	 // Create the data space for the dataset.
+	 dataspace_id = H5.H5Screate_simple (rank, dims, maxdims);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Compound.H5Screate_simple_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Compound.H5Screate_simple_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataspace_id;
+   }
+
+
+   // Help function for creating a dataset
+   public static int H5Dcreate_wrap (int loc_id, String name, int type_id, 
+				     int space_id, int create_plist_id)
+   {
+      int dataset_id = -1;  // dataset identifier   
+   
+      try 
+      {
+	 // Create the dataset
+	  dataset_id = H5.H5Dcreate (loc_id, name, type_id, space_id, 
+				     create_plist_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Compound.H5Dcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Compound.H5Dcreate_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataset_id;
+   }
+
+
+   // Help function for writing the dataset
+   public static int H5Dwrite_wrap (int dataset_id, int mem_type_id,
+				    int mem_space_id, int file_space_id,
+				    int xfer_plist_id, Object buf)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Write the dataset. 
+	 status = H5.H5Dwrite (dataset_id, mem_type_id, mem_space_id, 
+			       file_space_id, xfer_plist_id, buf);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Compound.H5Dwrite_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Compound.H5Dwrite_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+
+   // Help function for reading the dataset
+   public static int H5Dread_wrap (int dataset_id, int mem_type_id,
+				   int mem_space_id, int file_space_id,
+				   int xfer_plist_id, Object obj)
+   {
+      int status = -1; 
+      
+      try 
+      {
+	 // Read the dataset. 
+	 status = H5.H5Dread (dataset_id, mem_type_id, mem_space_id, 
+			      file_space_id, xfer_plist_id, obj);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Compound.H5Dread_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Compound.H5Dread_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+    
+
+   // Help function for terminating access to the data space. 
+   public static int H5Sclose_wrap (int dataspace_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+         // Terminate access to the data space. 
+         status = H5.H5Sclose (dataspace_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	  System.out.println 
+	      ("Compound.H5Sclose_wrap() with HDF5Exception: " 
+	       + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Compound.H5Sclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+
+   // Help function for releasing a datatype.
+   public static int H5Tclose_wrap (int type_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+         // Releasing a datatype.
+         status = H5.H5Tclose (type_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	     ("Compound.H5Tclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println 
+	     ("Compound.H5Tclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+
+
+   // Help function for ending access to the dataset and releasing 
+   // resources used by it.
+   public static int H5Dclose_wrap (int dataset_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // End access to the dataset and release resources used by it. 
+	 status = H5.H5Dclose (dataset_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Compound.H5Dclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Compound.H5Dclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+
+    
+   // Help function for terminating access to the file. 
+   public static int H5Fclose_wrap (int file_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Terminate access to the file. 
+	 status = H5.H5Fclose (file_id);
+      }
+      catch (HDF5Exception hdf5e)
+      { 
+	 System.out.println 
+	     ("Compound.H5Fclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Compound.H5Fclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }  
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Copy.java
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Copy.java	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Copy.java	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,541 @@
+/******************************************************************
+ * Copy.java (for HDF5 tutorial lesson 13)
+ *
+ *   -- Showing how to use the H5SCOPY function.
+ *      (a java conversion from h5_copy.c)
+ *
+ ******************************************************************/
+
+import ncsa.hdf.hdf5lib.*;
+import ncsa.hdf.hdf5lib.exceptions.*;
+
+public class Copy
+{
+ public static void main (String []argv) 
+   {
+      final String FILE1 = "copy1.h5";
+      final String FILE2 = "copy2.h5";
+    
+      final int RANK = 2;
+      final int DIM1 = 3;
+      final int DIM2 = 4;
+      final int NUMP = 2; 
+
+      int file1, file2, dataset1, dataset2;
+      int mid1, mid2, fid1, fid2;
+      long[] fdim = new long[2];   
+      fdim[0] = DIM1;
+      fdim[1] = DIM2;
+      long[] mdim = new long[2];   
+      fdim[0] = DIM1;
+      fdim[1] = DIM2;
+
+      long[] start = new long[2]; 
+      long[] stride = new long[2]; 
+      long[] count = new long[2]; 
+      long[] block = new long[2]; 
+      
+      int[][] buf1 = new int[DIM1][DIM2];
+      int[][] buf2 = new int[DIM1][DIM2];
+      int[][] bufnew = new int[DIM1][DIM2];
+
+      int[] val = new int[2];
+      val[0] = 53;
+      val[1] =  59;
+
+      long[] marray = {2};
+      long[][] coord = new long[NUMP][RANK];
+      int ret;
+      int i, j;
+  
+
+/***********************************************************************/
+/*                                                                     */
+/* Create two files containing identical datasets. Write 0's to one    */
+/* and 1's to the other.                                               */
+/*                                                                     */
+/***********************************************************************/
+
+     for ( i = 0; i < DIM1; i++ ) 
+         for ( j = 0; j < DIM2; j++ )
+             buf1[i][j] = 0;
+
+     for ( i = 0; i < DIM1; i++ ) 
+         for ( j = 0; j < DIM2; j++ )
+             buf2[i][j] = 1;
+
+     file1 = H5Fcreate_wrap (FILE1, HDF5Constants.H5F_ACC_TRUNC, 
+			     HDF5Constants.H5P_DEFAULT, 
+			     HDF5Constants.H5P_DEFAULT);
+     file2 = H5Fcreate_wrap (FILE2, HDF5Constants.H5F_ACC_TRUNC, 
+			     HDF5Constants.H5P_DEFAULT, 
+			     HDF5Constants.H5P_DEFAULT);
+
+     fid1 = H5Screate_simple_wrap (RANK, fdim, null);
+     fid2 = H5Screate_simple_wrap (RANK, fdim, null);
+
+     dataset1 = H5Dcreate_wrap 
+	 (file1, "Copy1", H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT), fid1, 
+	  HDF5Constants.H5P_DEFAULT);
+    
+     dataset2 = H5Dcreate_wrap 
+	 (file2, "Copy2", H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT), fid2, 
+	  HDF5Constants.H5P_DEFAULT);
+
+
+     ret = H5Dwrite_wrap (dataset1, H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT), 
+			  HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL, 
+			  HDF5Constants.H5P_DEFAULT, buf1);
+
+     ret = H5Dwrite_wrap (dataset2, H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT), 
+			  HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL, 
+			  HDF5Constants.H5P_DEFAULT, buf2);
+
+     ret = H5Dclose_wrap (dataset1);
+     ret = H5Dclose_wrap (dataset2);
+
+     ret = H5Sclose_wrap (fid1);
+     ret = H5Sclose_wrap (fid2);
+
+     ret = H5Fclose_wrap (file1);
+     ret = H5Fclose_wrap (file2);
+
+
+/***********************************************************************/
+/*                                                                     */
+/* Open the two files.  Select two points in one file, write values to */
+/* those point locations, then do H5Scopy and write the values to the  */
+/* other file.  Close files.                                           */
+/*                                                                     */
+/***********************************************************************/
+ 
+     file1 = H5Fopen_wrap (FILE1, HDF5Constants.H5F_ACC_RDWR, 
+			   HDF5Constants.H5P_DEFAULT);
+     
+     file2 = H5Fopen_wrap (FILE2, HDF5Constants.H5F_ACC_RDWR, 
+			   HDF5Constants.H5P_DEFAULT);
+
+     dataset1 = H5Dopen_wrap (file1, "Copy1");
+     dataset2 = H5Dopen_wrap (file2, "Copy2");
+
+     fid1 = H5Dget_space_wrap (dataset1);
+     mid1 = H5Screate_simple_wrap (1, marray, null); 
+
+     coord[0][0] = 0; coord[0][1] = 3;
+     coord[1][0] = 0; coord[1][1] = 1;
+
+     ret = H5Sselect_elements_wrap (fid1, HDF5Constants.H5S_SELECT_SET, 
+				    NUMP, coord);
+
+     ret = H5Dwrite_wrap (dataset1, H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT),  
+			  mid1, fid1, HDF5Constants.H5P_DEFAULT, val); 
+
+     fid2 = H5Scopy_wrap (fid1);
+
+     ret = H5Dwrite_wrap (dataset2, H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT),
+			  mid1, fid2, HDF5Constants.H5P_DEFAULT, val); 
+
+     ret = H5Dclose_wrap (dataset1);
+     ret = H5Dclose_wrap (dataset2);
+     ret = H5Sclose_wrap (fid1);
+     ret = H5Sclose_wrap (fid2);
+     ret = H5Fclose_wrap (file1);
+     ret = H5Fclose_wrap (file2);
+     ret = H5Sclose_wrap (mid1);
+
+
+/***********************************************************************/
+/*                                                                     */
+/* Open both files and print the contents of the datasets.             */
+/*                                                                     */
+/***********************************************************************/
+
+     file1 = H5Fopen_wrap (FILE1, HDF5Constants.H5F_ACC_RDWR, 
+			   HDF5Constants.H5P_DEFAULT);
+     file2 = H5Fopen_wrap (FILE2, HDF5Constants.H5F_ACC_RDWR, 
+			   HDF5Constants.H5P_DEFAULT);
+     dataset1 = H5Dopen_wrap (file1, "Copy1");
+     dataset2 = H5Dopen_wrap (file2, "Copy2");
+
+     ret = H5Dread_wrap (dataset1, H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT), 
+			 HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+			 HDF5Constants.H5P_DEFAULT, bufnew);
+     
+     System.out.println ("\nDataset 'Copy1' in file 'copy1.h5' contains: ");
+  
+     for (i = 0;i < DIM1; i++) 
+     {
+        for (j = 0;j < DIM2; j++) 
+	   System.out.print (bufnew[i][j]);
+	System.out.println ();
+     }
+
+     System.out.println ("\nDataset 'Copy2' in file 'copy2.h5' contains: ");
+     
+     ret = H5Dread_wrap (dataset2, H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT), 
+			 HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+			 HDF5Constants.H5P_DEFAULT, bufnew);
+
+     for (i = 0;i < DIM1; i++) 
+     {
+        for (j = 0;j < DIM2; j++) 
+	   System.out.print (bufnew[i][j]);
+        System.out.println ();
+     }
+
+     ret = H5Dclose_wrap (dataset1);
+     ret = H5Dclose_wrap (dataset2);
+     ret = H5Fclose_wrap (file1);
+     ret = H5Fclose_wrap (file2);
+   }
+
+
+   // Help function for creating a new file 
+   public static int H5Fcreate_wrap (String name, int flags,
+				     int create_id, int access_id)
+   {
+      int file_id = -1;    // file identifier 
+      try 
+      {
+	 // Create a new file using default file properties.
+	 file_id = H5.H5Fcreate (name, flags, create_id, access_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Copy.H5Fcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Copy.H5Fcreate_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return file_id;
+   }  
+
+
+   // Help function for opening an existing file
+   public static int H5Fopen_wrap (String name, int flags, int access_id)
+   {
+      int file_id = -1;    // file identifier 
+      try 
+      {
+	 // Create a new file using default file properties.
+	 file_id = H5.H5Fopen (name, flags, access_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Copy.H5Fopen_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Copy.H5Fopen_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return file_id;
+   }
+
+
+   // Help function for opening an existing dataset
+   public static int H5Dopen_wrap (int loc_id, String name)
+   {
+      int dataset_id = -1;  // dataset identifier   
+   
+      try 
+      {
+	 // Opening an existing dataset
+	 dataset_id = H5.H5Dopen (loc_id, name);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Copy.H5Dopen_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Copy.H5Dopen_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataset_id;
+   }
+
+    
+   // Help function for creating a new simple dataspace and opening it
+   // for access
+   public static int H5Screate_simple_wrap (int rank, long dims[],
+					    long maxdims[])
+   {
+      int dataspace_id = -1;  // dataspace identifier   
+        
+      try 
+      {
+	 // Create the data space for the dataset.
+	 dataspace_id = H5.H5Screate_simple (rank, dims, maxdims);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Copy.H5Screate_simple_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Copy.H5Screate_simple_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataspace_id;
+   }
+
+
+   // Help function for getting an identifier for a copy of 
+   // the dataspace for a dataset 
+   public static int H5Dget_space_wrap (int dataset_id)
+   {
+      int dataspace_id = -1;
+
+      try 
+      {
+         // Returning an identifier for a copy of the dataspace for a dataset
+         dataspace_id = H5.H5Dget_space (dataset_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	     ("Copy.H5Dget_space_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Copy.H5Dget_space_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataspace_id;
+   }
+
+  
+   // Help function for selecting array elements to be included in 
+   // the selection for the space_id dataspace.
+   public static int H5Sselect_elements_wrap (int space_id, int op,
+					      int num_elements,
+					      long coord2D[][])
+   {
+      int status = -1;  
+   
+      try 
+      {
+	  status = H5.H5Sselect_elements (space_id, op, num_elements,
+					  coord2D);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	     ("Copy.H5Sselect_elements_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println
+	     ("Copy.H5Sselect_elements_wrap() with other Exception: "  
+	      + e.getMessage());
+      }
+      return status;
+   }
+
+
+   // Help function for creating a new dataspace which is an exact 
+   // copy of the dataspace identified by space_id.
+   public static int H5Scopy_wrap (int space_id)
+   {
+      int dataspace_id = -1;  
+   
+      try 
+      {
+	 dataspace_id = H5.H5Scopy(space_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println ("Copy.H5Scopy_wrap() with HDF5Exception: "
+                             + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println ("Copy.H5Scopy_wrap() with other Exception: "
+                             + e.getMessage());
+      }
+      return dataspace_id;
+   }
+
+
+   // Help function for creating a dataset
+   public static int H5Dcreate_wrap (int loc_id, String name, int type_id, 
+				     int space_id, int create_plist_id)
+   {
+      int dataset_id = -1;  // dataset identifier   
+   
+      try 
+      {
+	 // Create the dataset
+	  dataset_id = H5.H5Dcreate (loc_id, name, type_id, space_id, 
+				     create_plist_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Copy.H5Dcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Copy.H5Dcreate_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataset_id;
+   }
+
+
+  // Help function for writing the dataset
+   public static int H5Dwrite_wrap (int dataset_id, int mem_type_id,
+				    int mem_space_id, int file_space_id,
+				    int xfer_plist_id, Object buf)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Write the dataset. 
+	 status = H5.H5Dwrite (dataset_id, mem_type_id, mem_space_id, 
+			       file_space_id, xfer_plist_id, buf);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Copy.H5Dwrite_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Copy.H5Dwrite_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+
+
+   // Help function for reading the dataset
+   public static int H5Dread_wrap (int dataset_id, int mem_type_id,
+				   int mem_space_id, int file_space_id,
+				   int xfer_plist_id, Object obj)
+   {
+      int status = -1; 
+      
+      try 
+      {
+	 // Read the dataset. 
+	 status = H5.H5Dread (dataset_id, mem_type_id, mem_space_id, 
+			      file_space_id, xfer_plist_id, obj);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Copy.H5Dread_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Copy.H5Dread_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+
+   // Help function for terminating access to the data space. 
+   public static int H5Sclose_wrap (int dataspace_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+         // Terminate access to the data space. 
+         status = H5.H5Sclose (dataspace_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	     ("Copy.H5Sclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println 
+	     ("Copy.H5Sclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+ 
+   // Help function for ending access to the dataset and releasing 
+   // resources used by it.
+   public static int H5Dclose_wrap (int dataset_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // End access to the dataset and release resources used by it. 
+	 status = H5.H5Dclose (dataset_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("Copy.H5Dclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Copy.H5Dclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+
+
+   // Help function for terminating access to the file. 
+   public static int H5Fclose_wrap (int file_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Terminate access to the file. 
+	 status = H5.H5Fclose (file_id);
+      }
+      catch (HDF5Exception hdf5e)
+      { 
+	 System.out.println 
+	     ("Copy.H5Fclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("Copy.H5Fclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }  
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateAttribute.java
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateAttribute.java	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateAttribute.java	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,302 @@
+/******************************************************************
+ * CreateAttribute.java (for HDF5 tutorial lesson 7)
+ *
+ *   -- Creating and Writing a dataset attribute
+ *      (a java conversion from h5_crtatt.c)
+ *
+ ******************************************************************/
+
+import ncsa.hdf.hdf5lib.*;
+import ncsa.hdf.hdf5lib.exceptions.*;
+
+public class CreateAttribute
+{
+   public static void main(String []argv) 
+   {
+      final String FILE = "dset.h5";
+      int file_id = -1;       // file identifier 
+      int dataset_id = -1;    // dataset identifier
+      int attribute_id = -1;
+      int dataspace_id = -1;  // dataspace identifier   
+      long[] dims = new long[1];
+      int[] attr_data = new int[2];
+      int status = -1;
+       
+      // Initialize the attribute data.
+      attr_data[0] = 100;
+      attr_data[1] = 200;
+
+      // Open an existing file.
+      file_id = H5Fopen_wrap (FILE, HDF5Constants.H5F_ACC_RDWR, 
+			      HDF5Constants.H5P_DEFAULT);
+       
+      // Open an existing dataset.
+      dataset_id = H5Dopen_wrap (file_id, "/dset");
+
+      // Create the data space for the attribute.
+      dims[0] = 2;
+      dataspace_id = H5Screate_simple_wrap (1, dims, null);
+
+      // Create a dataset attribute. 
+      attribute_id = H5Acreate_wrap 
+	  (dataset_id, "attr", 
+	   H5.J2C (HDF5CDataTypes.JH5T_STD_I32BE), 
+	   dataspace_id, HDF5Constants.H5P_DEFAULT);
+        
+      // Write the attribute data. 
+      status = H5Awrite_wrap 
+	  (attribute_id,    
+	   H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT), 
+	   attr_data);
+      
+      // Close the attribute. 
+      status = H5Aclose_wrap (attribute_id);
+      
+      // Close the dataspace. 
+      status = H5Sclose_wrap (dataspace_id);
+      
+      // Close to the dataset.
+      status = H5Dclose_wrap (dataset_id);
+   
+      // Close the file. 
+      status = H5Fclose_wrap (file_id); 
+   }
+
+
+   // Help function for opening an existing file
+   public static int H5Fopen_wrap (String name, int flags, int access_id)
+   {
+      int file_id = -1;    // file identifier 
+      try 
+      {
+	 // Create a new file using default file properties.
+	 file_id = H5.H5Fopen (name, flags, access_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Fopen_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Fopen_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return file_id;
+   }
+
+
+   // Help function for opening an existing dataset
+   public static int H5Dopen_wrap (int loc_id, String name)
+   {
+      int dataset_id = -1;  // dataset identifier   
+   
+      try 
+      {
+	 // Opening an existing dataset
+	 dataset_id = H5.H5Dopen (loc_id, name);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Dopen_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Dopen_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataset_id;
+   }
+    
+
+   // Create the data space for the attribute.
+   public static int H5Screate_simple_wrap (int rank, long dims[],
+					    long maxdims[])
+   {
+      int dataspace_id = -1;  // dataspace identifier   
+        
+      try 
+      {
+	 // Create the data space for the dataset.
+	 dataspace_id = H5.H5Screate_simple (rank, dims, maxdims);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Screate_simple_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+	 
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Screate_simple_wrap() with other Exception: "
+			     + e.getMessage());
+      }
+      return dataspace_id;   
+   }
+
+
+   // Help function for creating a dataset attribute. 
+   public static int H5Acreate_wrap (int loc_id, String name, int type_id, 
+				     int space_id, int create_plist)
+   {
+      int attribute_id = -1;  // attribute identifier   
+   
+      try 
+      {
+	 // Create the dataset 
+	 attribute_id = H5.H5Acreate (loc_id, name, type_id, space_id, 
+				      create_plist);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Acreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+       }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Acreate_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return attribute_id;
+   }
+
+
+   // Help function for writing the attribute data.
+   public static int H5Awrite_wrap (int attr_id, int mem_type_id,
+				    Object buf)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Write the attribute data.
+	 status = H5.H5Awrite (attr_id, mem_type_id, buf);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Awrite_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Awrite_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+
+   // Help function for closing the attribute
+   public static int H5Aclose_wrap (int attribute_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Close the dataset
+	 status = H5.H5Aclose (attribute_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Aclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Aclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+
+   // Help function for closing the dataset
+   public static int H5Dclose_wrap (int dataset_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Close the dataset
+	 status = H5.H5Dclose (dataset_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Dclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Dclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+
+   // Help function for closing the dataspace
+   public static int H5Sclose_wrap (int dataspace_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Terminate access to the data space. 
+	 status = H5.H5Sclose (dataspace_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Sclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Sclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+
+   // Help function for terminating access to the file. 
+   public static int H5Fclose_wrap (int file_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Terminate access to the file. 
+	 status = H5.H5Fclose (file_id);
+      }
+      catch (HDF5Exception hdf5e)
+      { 
+	 System.out.println 
+	     ("CreateAttribute.H5Fclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateAttribute.H5Fclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }  
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateDataset.java
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateDataset.java	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateDataset.java	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,210 @@
+/******************************************************************
+ * CreateDataset.java (for HDF5 tutorial lesson 5)
+ *
+ *   -- Creating a HDF5 Dataset
+ *      (a java conversion from h5_crtdat.c)
+ *
+ ******************************************************************/
+
+import ncsa.hdf.hdf5lib.*;
+import ncsa.hdf.hdf5lib.exceptions.*;
+
+public class CreateDataset
+{
+   public static void main(String []argv) 
+   {
+      final String FILE = "dset.h5";
+      int file_id = -1;       // file identifier 
+      int dataset_id = -1;    // dataset identifier
+      int dataspace_id = -1;  // dataspace identifier   
+      long[] dims = new long[2];
+      int status = -1;
+            
+      // Create a new file using default properties.
+      file_id = H5Fcreate_wrap (FILE, HDF5Constants.H5F_ACC_TRUNC, 
+				HDF5Constants.H5P_DEFAULT, 
+				HDF5Constants.H5P_DEFAULT);
+      
+      // Create the data space for the dataset.
+      dims[0] = 4;
+      dims[1] = 6;
+      dataspace_id = H5Screate_simple_wrap (2, dims, null);
+      
+      // Create the dataset. 
+      dataset_id = 
+	  H5Dcreate_wrap (file_id, "/dset",
+			  H5.J2C (HDF5CDataTypes.JH5T_STD_I32BE),
+			  dataspace_id, HDF5Constants.H5P_DEFAULT);
+      
+      // End access to the dataset and release resources used by it.
+      status = H5Dclose_wrap (dataset_id);
+      
+      // Terminate access to the data space. 
+      status = H5Sclose_wrap (dataspace_id);
+      
+      // Close the file.
+      status = H5Fclose_wrap (file_id);
+   }
+
+
+   // Help function for creating a new file 
+   public static int H5Fcreate_wrap (String name, int flags,
+				     int create_id, int access_id)
+   {
+      int file_id = -1;    // file identifier 
+      try 
+      {
+	 // Create a new file using default file properties.
+	 file_id = H5.H5Fcreate (name, flags, create_id, access_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateDataset.H5Fcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateDataset.H5Fcreate_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return file_id;
+   }  
+
+
+   // Help function for creating a new simple dataspace and opening it
+   // for access
+   public static int H5Screate_simple_wrap (int rank, long dims[],
+					    long maxdims[])
+   {
+      int dataspace_id = -1;  // dataspace identifier   
+        
+      try 
+      {
+	 // Create the data space for the dataset.
+	 dataspace_id = H5.H5Screate_simple (rank, dims, maxdims);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateDataset.H5Screate_simple_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateDataset.H5Screate_simple_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataspace_id;
+   }
+
+
+   // Help function for creating a dataset
+   public static int H5Dcreate_wrap (int loc_id, String name, int type_id, 
+				     int space_id, int create_plist_id)
+   {
+      int dataset_id = -1;  // dataset identifier   
+   
+      try 
+      {
+	 // Create the dataset
+	  dataset_id = H5.H5Dcreate (loc_id, name, type_id, space_id, 
+				     create_plist_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateDataset.H5Dcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateDataset.H5Dcreate_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataset_id;
+   }
+
+
+   // Help function for ending access to the dataset and releasing 
+   // resources used by it.
+   public static int H5Dclose_wrap (int dataset_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // End access to the dataset and release resources used by it. 
+	 status = H5.H5Dclose (dataset_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateDataset.H5Dclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateDataset.H5Dclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+
+   // Help function for terminating access to the data space. 
+   public static int H5Sclose_wrap (int dataspace_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Terminate access to the data space. 
+	 status = H5.H5Sclose (dataspace_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateDataset.H5Sclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateDataset.H5Sclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+
+   // Help function for terminating access to the file. 
+   public static int H5Fclose_wrap (int file_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Terminate access to the file. 
+	 status = H5.H5Fclose (file_id);
+      }
+      catch (HDF5Exception hdf5e)
+      { 
+	 System.out.println 
+	     ("CreateDataset.H5Fclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateDataset.H5Fclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+}
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateFile.java
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateFile.java	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateFile.java	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,83 @@
+/******************************************************************
+ * CreateFile.java (for HDF5 tutorial lesson 4)
+ *
+ *   -- Creating a HDF5 file
+ *      (a java conversion from h5_crtfile.c)
+ *
+ ******************************************************************/
+
+import ncsa.hdf.hdf5lib.*;
+import ncsa.hdf.hdf5lib.exceptions.*;
+
+public class CreateFile
+{    
+   public static void main(String []argv) 
+   {  
+      final String FILE = "file.h5";
+      int file_id = -1;    // file identifier 
+      int status = -1;
+
+      file_id = H5Fcreate_wrap (FILE, HDF5Constants.H5F_ACC_TRUNC,
+				HDF5Constants.H5P_DEFAULT, 
+				HDF5Constants.H5P_DEFAULT);
+      status = H5Fclose_wrap (file_id);
+   }
+
+
+   // Help function for creating a new file 
+   public static int H5Fcreate_wrap (String name, int flags,
+				     int create_id, int access_id)
+   {
+      int file_id = -1;    // file identifier 
+      try 
+      {
+	 // Create a new file using default file properties.
+	 file_id = H5.H5Fcreate (name, flags, create_id, access_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateFile.H5Fcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateFile.H5Fcreate_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+
+      System.out.println ("\nThe file name is: " + name);
+      System.out.println ("The file ID is: " + file_id);
+
+      return file_id;
+   }  
+
+
+   // Help function for terminating access to the file. 
+   public static int H5Fclose_wrap (int file_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Terminate access to the file. 
+	 status = H5.H5Fclose (file_id);
+      }
+      catch (HDF5Exception hdf5e)
+      { 
+	 System.out.println 
+	     ("CreateFile.H5Fclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateFile.H5Fclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+}
+          
+ 

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateFileInput.java
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateFileInput.java	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateFileInput.java	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,118 @@
+/******************************************************************
+ * CreateFileInput.java (for HDF5 tutorial Lesson 4)
+ *
+ *   -- Creating a HDF5 file
+ *      (another java conversion from h5_crtfile.c, give user two options:
+ *       one for library path and one for file name, if user chooses 
+ *       nothing, then the default file name is used.)
+ *
+ ******************************************************************/
+
+import java.lang.System;
+import java.util.*;
+import ncsa.hdf.hdf5lib.*;
+import ncsa.hdf.hdf5lib.exceptions.*;
+
+public class CreateFileInput
+{    
+   // The run command should be like:
+   // "./runCreateFileInput -l /usr/lib/hdf5.dll -f ./open.h5"
+   public static void main(String []argv) 
+   {  
+      int file_id = -1;    // file identifier 
+      int status = -1;
+      String libpath = null;
+      String filename = null;
+
+      for (int i = 0; i < argv.length; i++)
+      {
+	 if ("-l".equalsIgnoreCase (argv[i]))
+	    libpath = argv[++i];
+	 
+	 if ("-f".equalsIgnoreCase (argv[i]))
+	    filename = argv[++i];
+      }
+     
+      if (libpath != null)
+      { 
+	  Properties pros = System.getProperties ();
+	  pros.put (H5.H5PATH_PROPERTY_KEY, libpath);
+	  
+	  /*
+	  this function call could be used in Java 1.2
+	  System.setProperty (H5.H5PATH_PROPERTY_KEY, libpath);
+	  */
+      }
+      
+      if (filename == null)
+      {	 
+	 filename = "file.h5"; // if no input file name, use the default name
+      }
+
+      file_id = H5Fcreate_wrap (filename, 
+				HDF5Constants.H5F_ACC_TRUNC,
+				HDF5Constants.H5P_DEFAULT, 
+				HDF5Constants.H5P_DEFAULT);
+      status = H5Fclose_wrap (filename, file_id);
+   }
+
+
+   // Help function for creating a new file 
+   public static int H5Fcreate_wrap (String name, int flags,
+				     int create_id, int access_id)
+   {
+      int file_id = -1;    // file identifier 
+      try 
+      {
+	 // Create a new file using default file properties.
+	 file_id = H5.H5Fcreate (name, flags, create_id, access_id);
+					
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateFileInput.H5Fcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateFileInput.H5Fcreate_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+
+      System.out.println ("\nThe file name is: " + name);
+      System.out.println ("The file ID is: " + file_id);
+
+      return file_id;
+   }  
+
+
+   // Help function for terminating access to the file. 
+   public static int H5Fclose_wrap (String name, int file_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Terminate access to the file. 
+	 status = H5.H5Fclose (file_id);
+      }
+      catch (HDF5Exception hdf5e)
+      { 
+	 System.out.println 
+	     ("CreateFileInput.H5Fclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateFileInput.H5Fclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      
+      return status;
+   }
+}
+          
+ 

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateGroup.java
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateGroup.java	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateGroup.java	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,139 @@
+/******************************************************************
+ * CreateGroup.java (for HDF5 tutorial lesson 8)
+ *
+ *   -- Creating and closing a group
+ *      (a java conversion from h5_crtgrp.c)
+ *
+ ******************************************************************/
+
+import ncsa.hdf.hdf5lib.*;
+import ncsa.hdf.hdf5lib.exceptions.*;
+
+public class CreateGroup
+{  
+   public static void main(String []argv) 
+   {
+      final String FILE = "group.h5";
+      int file_id = -1;       // file identifier 
+      int group_id = -1;      // group identifier
+      int status = -1;
+   
+      // Create a new file using default properties.
+      file_id = H5Fcreate_wrap (FILE, HDF5Constants.H5F_ACC_TRUNC, 
+				HDF5Constants.H5P_DEFAULT, 
+				HDF5Constants.H5P_DEFAULT);
+
+      // Create a group named "/MyGroup" in the file.
+      group_id = H5Gcreate_wrap (file_id, "/MyGroup", 0);
+
+      // Close the group.
+      status = H5Gclose_wrap (group_id);
+
+      // Close the file. 
+      status = H5Fclose_wrap (file_id); 
+   }
+   
+
+   // Help function for creating a new file 
+   public static int H5Fcreate_wrap (String name, int flags,
+				     int create_id, int access_id)
+   {
+      int file_id = -1;    // file identifier 
+      try 
+      {
+	 // Create a new file using default file properties.
+	 file_id = H5.H5Fcreate (name, flags, create_id, access_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateGroup.H5Fcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateGroup.H5Fcreate_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return file_id;
+   }  
+
+
+   // Help function for creating a group named "/MyGroup" in the file.
+   public static int H5Gcreate_wrap (int loc_id, String name, int size_hint)
+   {
+      int group_id = -1;    // group identifier 
+      try 
+      {
+         // Create a group
+         group_id = H5.H5Gcreate (loc_id, name, size_hint);
+
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	     ("CreateGroup.H5Gcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println 
+	     ("CreateGroup.H5Gcreate_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return group_id;
+   }
+
+
+   // Help function for closing the group
+   public static int H5Gclose_wrap (int group_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Close the group
+	 status = H5.H5Gclose (group_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateGroup.H5Gclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateGroup.H5Gclose_wrap() with other exception: " 
+	      + e.getMessage());
+      } 
+      return status;
+   }
+ 
+
+   // Help function for terminating access to the file. 
+   public static int H5Fclose_wrap (int file_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Terminate access to the file. 
+	 status = H5.H5Fclose (file_id);
+      }
+      catch (HDF5Exception hdf5e)
+      { 
+	 System.out.println 
+	     ("CreateGroup.H5Fclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateGroup.H5Fclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateGroupAR.java
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateGroupAR.java	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateGroupAR.java	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,152 @@
+/******************************************************************
+ * CreateGroupAR.java (for HDF5 tutorial lesson 9)
+ *
+ *   -- Creating groups using absolute and relative names.
+ *      (a java conversion from h5_crtgrpar.c)
+ *
+ ******************************************************************/
+
+import ncsa.hdf.hdf5lib.*;
+import ncsa.hdf.hdf5lib.exceptions.*;
+
+public class CreateGroupAR
+{
+   public static void main(String []argv) 
+   {
+      final String FILE = "groups.h5";
+      int file_id = -1;        // file identifier 
+      int group1_id = -1;      // group identifier
+      int group2_id = -1;  
+      int group3_id = -1;
+  
+      int status = -1;
+   
+      // Create a new file using default properties.
+      file_id = H5Fcreate_wrap (FILE, HDF5Constants.H5F_ACC_TRUNC, 
+				HDF5Constants.H5P_DEFAULT, 
+				HDF5Constants.H5P_DEFAULT);
+
+      // Create group "MyGroup" in the root group using absolute name.
+      group1_id = H5Gcreate_wrap (file_id, "/MyGroup", 0);
+
+
+      // Create group "Group_A" in group "MyGroup" using absolute name. 
+      group2_id = H5Gcreate_wrap (file_id, "/MyGroup/Group_A", 0);
+      
+      // Create group "Group_B" in group "MyGroup" using relative name. 
+      group3_id = H5Gcreate_wrap (group1_id, "Group_B", 0);
+   
+      // Close groups. 
+      status = H5Gclose_wrap (group1_id);
+      status = H5Gclose_wrap (group2_id);
+      status = H5Gclose_wrap (group3_id);
+      
+      // Close the file. 
+      status = H5Fclose_wrap (file_id); 
+   }
+
+
+   // Help function for creating a new file 
+   public static int H5Fcreate_wrap (String name, int flags,
+                                     int create_id, int access_id)
+   {
+      int file_id = -1;    // file identifier 
+      try 
+      {
+         // Create a new file using default file properties.
+         file_id = H5.H5Fcreate (name, flags, create_id, access_id);
+
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	  System.out.println 
+	      ("CreateGroupAR.H5Fcreate_wrap() with HDF5Exception: "
+	       + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println 
+	     ("CreateGroupAR.H5Fcreate_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return file_id;
+   }
+
+
+   // Help function for creating a group named "/MyGroup" in the file.
+   public static int H5Gcreate_wrap (int loc_id, String name, int size_hint)
+   {
+      int group_id = -1;    // group identifier 
+      try 
+      {
+         // Create a group
+         group_id = H5.H5Gcreate (loc_id, name, size_hint);
+
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	     ("CreateGroupAR.H5Gcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println 
+	     ("CreateGroupAR.H5Gcreate_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return group_id;
+   }
+
+
+   // Help function for closing the group
+   public static int H5Gclose_wrap (int group_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Close the group
+	 status = H5.H5Gclose (group_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateGroupAR.H5Gclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateGroupAR.H5Gclose_wrap() with other exception: " 
+	      + e.getMessage());
+      } 
+      return status;
+   }
+ 
+
+   // Help function for terminating access to the file. 
+   public static int H5Fclose_wrap (int file_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Terminate access to the file. 
+	 status = H5.H5Fclose (file_id);
+      }
+      catch (HDF5Exception hdf5e)
+      { 
+	 System.out.println 
+	     ("CreateGroupAR.H5Fclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateGroupAR.H5Fclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }  
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateGroupDataset.java
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateGroupDataset.java	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/CreateGroupDataset.java	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,340 @@
+/******************************************************************
+ * CreateGroupDataset.java (for HDF5 tutorial lesson 10)
+ *
+ *   -- Creating a dataset in a particular group
+ *      (a java conversion from h5_crtgrpd.c)
+ *
+ ******************************************************************/
+
+import ncsa.hdf.hdf5lib.*;
+import ncsa.hdf.hdf5lib.exceptions.*;
+
+public class CreateGroupDataset
+{ 
+   public static void main(String []argv) 
+   {
+      final String FILE = "groups.h5"; 
+      int file_id = -1;       // file identifier 
+      int group_id = -1;      // group identifier
+      int dataset_id;
+      int dataspace_id;
+      int status = -1;
+   
+      long[] dims = new long[2];
+      int[][] dset1_data = new int[3][3];
+      int[][] dset2_data = new int[2][10];
+      int i = -1, j = -1;
+      
+      // Initialize the first dataset.
+      for (i = 0; i < 3; i++)
+	 for (j = 0; j < 3; j++)
+	    dset1_data[i][j] = j + 1;
+
+      // Initialize the second dataset. 
+      for (i = 0; i < 2; i++)
+	 for (j = 0; j < 10; j++)
+	    dset2_data[i][j] = j + 1;
+
+      // Open an existing file.
+      file_id = H5Fopen_wrap (FILE, HDF5Constants.H5F_ACC_RDWR, 
+                              HDF5Constants.H5P_DEFAULT);
+
+      // Create the data space for the first dataset. 
+      dims[0] = 3;
+      dims[1] = 3;
+      dataspace_id = H5Screate_simple_wrap (2, dims, null);
+
+      // Create a dataset in group "MyGroup". 
+      dataset_id = 
+	  H5Dcreate_wrap (file_id, "/MyGroup/dset1",
+			  H5.J2C (HDF5CDataTypes.JH5T_STD_I32BE),
+			  dataspace_id, HDF5Constants.H5P_DEFAULT);
+
+      // Write the first dataset. 
+      status = H5Dwrite_wrap 
+          (dataset_id, 
+           H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT), 
+           HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL, 
+           HDF5Constants.H5P_DEFAULT, dset1_data);
+
+      // Close the data space for the first dataset. 
+      status = H5Sclose_wrap (dataspace_id);
+
+      // Close the first dataset. 
+      status = H5Dclose_wrap (dataset_id);
+   
+      // Open an existing group of the specified file. 
+      group_id = H5Gopen_wrap (file_id, "/MyGroup/Group_A");
+
+      // Create the data space for the second dataset. 
+      dims[0] = 2;
+      dims[1] = 10;
+      dataspace_id = H5Screate_simple_wrap (2, dims, null);
+      
+      // Create the second dataset in group "Group_A". 
+      dataset_id = 
+	  H5Dcreate_wrap (group_id, "dset2",
+			  H5.J2C (HDF5CDataTypes.JH5T_STD_I32BE),
+			  dataspace_id, HDF5Constants.H5P_DEFAULT);
+
+      // Write the second dataset. 
+      status = H5Dwrite_wrap 
+          (dataset_id, 
+           H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT), 
+           HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL, 
+           HDF5Constants.H5P_DEFAULT, dset2_data);
+
+      // Close the data space for the second dataset.
+      status = H5Sclose_wrap (dataspace_id);
+
+      // Close the second dataset 
+      status = H5Dclose_wrap (dataset_id);
+
+      // Close the group.
+      status = H5Gclose_wrap (group_id);
+
+      // Close the file. 
+      status = H5Fclose_wrap (file_id); 
+   }
+
+
+   // Help function for opening an existing file
+   public static int H5Fopen_wrap (String name, int flags, int access_id)
+   {
+      int file_id = -1;    // file identifier 
+      try 
+      {
+	 // Create a new file using default file properties.
+	 file_id = H5.H5Fopen (name, flags, access_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateGroupDataset.H5Fopen_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateGroupDataset.H5Fopen_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return file_id;
+   }
+  
+
+   // Help function for creating a new simple dataspace and opening it
+   // for access
+   public static int H5Screate_simple_wrap (int rank, long dims[],
+					    long maxdims[])
+   {
+      int dataspace_id = -1;  // dataspace identifier   
+        
+      try 
+      {
+	 // Create the data space for the dataset.
+	 dataspace_id = H5.H5Screate_simple (rank, dims, maxdims);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	  ("CreateGroupDataset.H5Screate_simple_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	  ("CreateGroupDataset.H5Screate_simple_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataspace_id;
+   }
+
+
+   // Help function for creating a dataset
+   public static int H5Dcreate_wrap (int loc_id, String name, int type_id, 
+				     int space_id, int create_plist_id)
+   {
+      int dataset_id = -1;  // dataset identifier   
+   
+      try 
+      {
+	 // Create the dataset
+	  dataset_id = H5.H5Dcreate (loc_id, name, type_id, space_id, 
+				     create_plist_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateGroupDataset.H5Dcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateGroupDataset.H5Dcreate_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataset_id;
+   }
+
+
+   // Help function for writing the dataset
+   public static int H5Dwrite_wrap (int dataset_id, int mem_type_id,
+				    int mem_space_id, int file_space_id,
+				    int xfer_plist_id, Object buf)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Write the dataset. 
+	 status = H5.H5Dwrite (dataset_id, mem_type_id, mem_space_id, 
+			       file_space_id, xfer_plist_id, buf);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateGroupDataset.H5Dwrite_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateGroupDataset.H5Dwrite_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+  
+
+   // Help function for terminating access to the data space. 
+   public static int H5Sclose_wrap (int dataspace_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+         // Terminate access to the data space. 
+         status = H5.H5Sclose (dataspace_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	     ("CreateGroupDataset.H5Sclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println 
+	     ("CreateGroupDataset.H5Sclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+
+   // Help function for ending access to the dataset and releasing 
+   // resources used by it.
+   public static int H5Dclose_wrap (int dataset_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // End access to the dataset and release resources used by it. 
+	 status = H5.H5Dclose (dataset_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateGroupDataset.H5Dclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateGroupDataset.H5Dclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+
+   // Help function for opening a group 
+   public static int H5Gopen_wrap (int loc_id, String name)
+   {
+      int group_id = -1;    // group identifier 
+      try 
+      {
+         // Create a group
+         group_id = H5.H5Gopen (loc_id, name);
+
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	     ("CreateGroupDataset.H5Gopen_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println 
+	     ("CreateGroupDataset.H5Gopen_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return group_id;
+   }
+
+
+   // Help function for closing the group
+   public static int H5Gclose_wrap (int group_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Close the group
+	 status = H5.H5Gclose (group_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("CreateGroupDataset.H5Gclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateGroupDataset.H5Gclose_wrap() with other exception: " 
+	      + e.getMessage());
+      } 
+      return status;
+   }
+
+  
+   // Help function for terminating access to the file. 
+   public static int H5Fclose_wrap (int file_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Terminate access to the file. 
+	 status = H5.H5Fclose (file_id);
+      }
+      catch (HDF5Exception hdf5e)
+      { 
+	 System.out.println 
+	     ("CreateGroupDataset.H5Fclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("CreateGroupDataset.H5Fclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/DatasetRdWt.java
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/DatasetRdWt.java	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/DatasetRdWt.java	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,213 @@
+/******************************************************************
+ * DatasetRdWt.java (for HDF5 tutorial lesson 6)
+ *
+ *   -- Reading and Writing an existing Dataset
+ *      (a java conversion from h5_rdwt.c)
+ *
+ ******************************************************************/
+
+import ncsa.hdf.hdf5lib.*;
+import ncsa.hdf.hdf5lib.exceptions.*;
+
+public class DatasetRdWt
+{
+   public static void main(String []argv) 
+   {
+      final String FILE = "dset.h5";
+      int file_id = -1;       // file identifier 
+      int dataset_id = -1;    // dataset identifier
+      int status = -1;
+      int[][] dset_data = new int[4][6];
+      
+      // Initialize the dataset.
+      for (int i = 0; i < 4; i++)
+	 for (int j = 0; j < 6; j++)
+	    dset_data[i][j] = i * 6 + j + 1;
+     
+      // Open an existing file
+      file_id = H5Fopen_wrap (FILE, HDF5Constants.H5F_ACC_RDWR, 
+			      HDF5Constants.H5P_DEFAULT);
+	
+      // Open an existing dataset.
+      dataset_id = H5Dopen_wrap (file_id, "/dset");	 
+      
+      // Write the dataset. 
+      status = H5Dwrite_wrap 
+	  (dataset_id, H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT), 
+	   HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL, 
+	   HDF5Constants.H5P_DEFAULT, dset_data);
+
+      status = H5Dread_wrap 
+	  (dataset_id, H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT), 
+	   HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL, 
+	   HDF5Constants.H5P_DEFAULT, dset_data);
+
+      // Close the dataset.
+      status = H5Dclose_wrap (dataset_id);
+	 
+      // Close the file.
+      status = H5Fclose_wrap (file_id);
+   }
+
+
+   // Help function for opening an existing file
+   public static int H5Fopen_wrap (String name, int flags, int access_id)
+   {
+      int file_id = -1;    // file identifier 
+      try 
+      {
+	 // Create a new file using default file properties.
+	 file_id = H5.H5Fopen (name, flags, access_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("DatasetRdWt.H5Fopen_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("DatasetRdWt.H5Fopen_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return file_id;
+   }
+
+
+   // Help function for opening an existing dataset
+   public static int H5Dopen_wrap (int loc_id, String name)
+   {
+      int dataset_id = -1;  // dataset identifier   
+   
+      try 
+      {
+	 // Opening an existing dataset
+	 dataset_id = H5.H5Dopen (loc_id, name);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("DatasetRdWt.H5Dopen_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("DatasetRdWt.H5Dopen_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataset_id;
+   }
+
+ 
+   // Help function for writing the dataset
+   public static int H5Dwrite_wrap (int dataset_id, int mem_type_id,
+				    int mem_space_id, int file_space_id,
+				    int xfer_plist_id, Object buf)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Write the dataset. 
+	 status = H5.H5Dwrite (dataset_id, mem_type_id, mem_space_id, 
+			       file_space_id, xfer_plist_id, buf);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("DatasetRdWt.H5Dwrite_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("DatasetRdWt.H5Dwrite_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+
+   // Help function for reading the dataset
+   public static int H5Dread_wrap (int dataset_id, int mem_type_id,
+				   int mem_space_id, int file_space_id,
+				   int xfer_plist_id, Object obj)
+   {
+      int status = -1; 
+      
+      try 
+      {
+	 // Read the dataset. 
+	 status = H5.H5Dread (dataset_id, mem_type_id, mem_space_id, 
+			      file_space_id, xfer_plist_id, obj);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("DatasetRdWt.H5Dread_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("DatasetRdWt.H5Dread_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+      
+   // Help function for ending access to the dataset and releasing 
+   // resources used by it.
+   public static int H5Dclose_wrap (int dataset_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // End access to the dataset and release resources used by it. 
+	 status = H5.H5Dclose (dataset_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("DatasetRdWt.H5Dclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("DatasetRdWt.H5Dclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+
+    
+   // Help function for terminating access to the file. 
+   public static int H5Fclose_wrap (int file_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Terminate access to the file. 
+	 status = H5.H5Fclose (file_id);
+      }
+      catch (HDF5Exception hdf5e)
+      { 
+	 System.out.println 
+	     ("DatasetRdWt.H5Fclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("DatasetRdWt.H5Fclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }  
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Dependencies
===================================================================

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/HyperSlab.java
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/HyperSlab.java	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/HyperSlab.java	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,590 @@
+/******************************************************************
+ * HyperSlab.java (for HDF5 tutorial lesson 12)
+ *
+ *   -- Writing and reading a hyperslab
+ *      (a java conversion from h5_hyperslab.c)
+ *
+ ******************************************************************/
+
+import ncsa.hdf.hdf5lib.*;
+import ncsa.hdf.hdf5lib.exceptions.*;
+
+public class HyperSlab
+{
+   public static void main (String []argv) 
+   {
+      final String FILE = "sds.h5";
+      final String DATASETNAME = "IntArray";
+      final int NX_SUB = 3;                /* hyperslab dimensions */ 
+      final int NY_SUB = 4;
+      final int NX = 7;                    /* output buffer dimensions */ 
+      final int NY = 7; 
+      final int NZ = 3; 
+      final int RANK = 2;
+      final int RANK_OUT = 3;
+      final int X = 5;                     /* dataset dimensions */
+      final int Y = 6;
+  
+      long[] dimsf = new long[2];          /* dataset dimensions */
+      int[][] data = new int[X][Y];        /* data to write */
+
+    /* 
+     * Data  and output buffer initialization. 
+     */
+      int file, dataset;                    /* handles */
+      int dataspace;   
+      int memspace; 
+      long[] dimsm = new long[3];           /* memory space dimensions */
+      long[] dims_out = new long[2];        /* dataset dimensions */      
+      int status;                             
+      
+      int[][][] data_out = new int[NX][NY][NZ]; /* output buffer */
+      
+      long[] count = new long[2];      /* size of the hyperslab in the file */
+      long[] offset = new long[2];     /* hyperslab offset in the file */
+      long[] count_out = new long[3];  /* size of the hyperslab in memory */
+      long[] offset_out = new long[3]; /* hyperslab offset in memory */
+      int i, j, k, status_n, rank;
+       
+      /*********************************************************  
+		 This writes data to the HDF5 file.  
+      *********************************************************/  
+      
+      /* 
+       * Data  and output buffer initialization. 
+       */
+      for (j = 0; j < X; j++) 
+      {
+	 for (i = 0; i < Y; i++)
+	    data[j][i] = i + j;
+      }     
+      /*
+       * 0 1 2 3 4 5 
+       * 1 2 3 4 5 6
+       * 2 3 4 5 6 7
+       * 3 4 5 6 7 8
+       * 4 5 6 7 8 9
+       */
+
+      /*
+       * Create a new file using H5F_ACC_TRUNC access,
+       * the default file creation properties, and the default file
+       * access properties.
+       */
+      file = H5Fcreate_wrap (FILE, HDF5Constants.H5F_ACC_TRUNC, 
+			     HDF5Constants.H5P_DEFAULT, 
+			     HDF5Constants.H5P_DEFAULT);
+      
+      /*
+       * Describe the size of the array and create the data space for fixed
+       * size dataset. 
+       */
+      dimsf[0] = X;
+      dimsf[1] = Y;
+      dataspace = H5Screate_simple_wrap (RANK, dimsf, null); 
+
+      /*
+       * Create a new dataset within the file using defined dataspace and
+       * default dataset creation properties.
+       */
+      dataset = H5Dcreate_wrap 
+	  (file, DATASETNAME, H5.J2C (HDF5CDataTypes.JH5T_STD_I32BE), 
+	   dataspace, HDF5Constants.H5P_DEFAULT);
+      
+      /*
+       * Write the data to the dataset using default transfer properties.
+       */
+      status = H5Dwrite_wrap 
+	  (dataset, H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT), 
+	   HDF5Constants.H5S_ALL, HDF5Constants.H5S_ALL,
+	   HDF5Constants.H5P_DEFAULT, data);
+      
+      /*
+       * Close/release resources.
+       */
+      H5Sclose_wrap (dataspace);
+      H5Dclose_wrap (dataset);
+      H5Fclose_wrap (file);
+      
+      /*************************************************************  
+
+  This reads the hyperslab from the sds.h5 file just 
+  created, into a 2-dimensional plane of the 3-dimensional 
+  array.
+
+      ************************************************************/  
+
+      for (j = 0; j < NX; j++) 
+      {
+	 for (i = 0; i < NY; i++) 
+	 {
+	    for (k = 0; k < NZ ; k++)
+               data_out[j][i][k] = 0;
+	 }
+      } 
+ 
+      /*
+       * Open the file and the dataset.
+       */
+      file = H5Fopen_wrap (FILE, HDF5Constants.H5F_ACC_RDONLY, 
+			   HDF5Constants.H5P_DEFAULT);
+      dataset = H5Dopen_wrap (file, DATASETNAME);
+
+      dataspace = H5Dget_space_wrap (dataset);    /* dataspace handle */
+      rank = H5Sget_simple_extent_ndims_wrap (dataspace);
+      status_n = H5Sget_simple_extent_dims_wrap (dataspace, dims_out, null);
+
+      System.out.println ("Rank: " + rank);
+      System.out.println ("Dimensions: "+ dims_out[0] + " x " + dims_out[1]);
+      
+      /* 
+       * Define hyperslab in the dataset. 
+       */
+      offset[0] = 1;
+      offset[1] = 2;
+      count[0]  = NX_SUB;
+      count[1]  = NY_SUB;
+      status = H5Sselect_hyperslab_wrap (dataspace, 
+					 HDF5Constants.H5S_SELECT_SET, 
+					 offset, null, count, null);
+      
+      /*
+       * Define the memory dataspace.
+       */
+      dimsm[0] = NX;
+      dimsm[1] = NY;
+      dimsm[2] = NZ;
+      memspace = H5Screate_simple_wrap (RANK_OUT, dimsm, null);   
+      
+      /* 
+       * Define memory hyperslab. 
+       */
+      offset_out[0] = 3;
+      offset_out[1] = 0;
+      offset_out[2] = 0;
+      count_out[0]  = NX_SUB;
+      count_out[1]  = NY_SUB;
+      count_out[2]  = 1;
+      status = H5Sselect_hyperslab_wrap (memspace, 
+					 HDF5Constants.H5S_SELECT_SET, 
+					 offset_out, null, count_out, null);
+      
+      /*
+       * Read data from hyperslab in the file into the hyperslab in 
+       * memory and display.
+       */
+      status = 
+	  H5Dread_wrap (dataset, H5.J2C (HDF5CDataTypes.JH5T_NATIVE_INT), 
+			memspace, dataspace, HDF5Constants.H5P_DEFAULT, 
+			data_out);
+
+      System.out.println ("Data:");
+      for (j = 0; j < NX; j++) 
+      {
+	 for (i = 0; i < NY; i++) 
+	    System.out.print (data_out[j][i][0]);
+	 System.out.println ();
+      }
+      System.out.println ();
+
+      /*
+       * 0 0 0 0 0 0 0
+       * 0 0 0 0 0 0 0
+       * 0 0 0 0 0 0 0
+       * 3 4 5 6 0 0 0  
+       * 4 5 6 7 0 0 0
+       * 5 6 7 8 0 0 0
+       * 0 0 0 0 0 0 0
+       */
+      
+      /*
+       * Close and release resources.
+       */
+      H5Dclose_wrap (dataset);
+      H5Sclose_wrap (dataspace);
+      H5Sclose_wrap (memspace);
+      H5Fclose_wrap (file);
+   }     
+
+
+   // Help function for creating a new file 
+   public static int H5Fcreate_wrap (String name, int flags,
+				     int create_id, int access_id)
+   {
+      int file_id = -1;    // file identifier 
+      try 
+      {
+	 // Create a new file using default file properties.
+	 file_id = H5.H5Fcreate (name, flags, create_id, access_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Fcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Fcreate_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return file_id;
+   }  
+
+
+   // Help function for opening an existing file
+   public static int H5Fopen_wrap (String name, int flags, int access_id)
+   {
+      int file_id = -1;    // file identifier 
+      try 
+      {
+	 // Create a new file using default file properties.
+	 file_id = H5.H5Fopen (name, flags, access_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Fopen_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Fopen_wrap() with other Exception: " 
+	      + e.getMessage());
+      }
+      return file_id;
+   }
+
+
+   // Help function for opening an existing dataset
+   public static int H5Dopen_wrap (int loc_id, String name)
+   {
+      int dataset_id = -1;  // dataset identifier   
+   
+      try 
+      {
+	 // Opening an existing dataset
+	 dataset_id = H5.H5Dopen (loc_id, name);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Dopen_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Dopen_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataset_id;
+   }
+
+    
+   // Help function for creating a new simple dataspace and opening it
+   // for access
+   public static int H5Screate_simple_wrap (int rank, long dims[],
+					    long maxdims[])
+   {
+      int dataspace_id = -1;  // dataspace identifier   
+        
+      try 
+      {
+	 // Create the data space for the dataset.
+	 dataspace_id = H5.H5Screate_simple (rank, dims, maxdims);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Screate_simple_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Screate_simple_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataspace_id;
+   }
+
+
+   // Help function for getting an identifier for a copy of 
+   // the dataspace for a dataset 
+   public static int H5Dget_space_wrap (int dataset_id)
+   {
+      int dataspace_id = -1;
+
+      try 
+      {
+         // Returning an identifier for a copy of the dataspace for a dataset
+         dataspace_id = H5.H5Dget_space (dataset_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	     ("HyperSlab.H5Dget_space_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Dget_space_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataspace_id;
+   }
+
+
+   // Help function for determining the dimensionality (or rank) of 
+   // a dataspace
+   public static int H5Sget_simple_extent_ndims_wrap (int space_id)
+   {
+      int rank = -1;  
+   
+      try 
+      {
+         // Determine the dimensionality (or rank) of a dataspace.
+         rank = H5.H5Sget_simple_extent_ndims (space_id); 
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	   ("HyperSlab.H5Sget_simple_extent_ndims_wrap() with HDF5Exception: "
+	    + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println
+	 ("HyperSlab.H5Sget_simple_extent_ndims_wrap() with other Exception: "
+	  + e.getMessage());
+      }
+      return rank;
+   }
+
+
+   // Help function for returning the size and maximum sizes of each 
+   // dimension of a dataspace through the dims and maxdims parameters.
+   public static int H5Sget_simple_extent_dims_wrap (int space_id, 
+						     long dims[],
+						     long maxdims[]) 
+   {
+      int dimension_number = -1;  
+   
+      try 
+      {
+	 dimension_number = H5.H5Sget_simple_extent_dims (space_id, dims, 
+							  maxdims);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	   ("HyperSlab.H5Sget_simple_extent_dims_wrap() with HDF5Exception: "
+	    + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println
+	  ("HyperSlab.H5Sget_simple_extent_dims_wrap() with other Exception: "
+	   + e.getMessage());
+      }
+      return dimension_number;
+   }
+
+
+   // Help function for selecting a hyperslab region to add to the 
+   // current selected region for the dataspace specified by space_id. 
+   public static int H5Sselect_hyperslab_wrap (int space_id, int op,
+					       long start[], long stride[],
+					       long count[], long block[])
+    {
+      int status = -1;  
+   
+      try 
+      {
+	  status = H5.H5Sselect_hyperslab (space_id, op, start, stride, 
+					   count, block);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	     ("HyperSlab.H5Sselect_hyperslab_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println
+	     ("HyperSlab.H5Sselect_hyperslab_wrap() with other Exception: "  
+	      + e.getMessage());
+      }
+      return status;
+   }
+
+
+   // Help function for creating a dataset
+   public static int H5Dcreate_wrap (int loc_id, String name, int type_id, 
+				     int space_id, int create_plist_id)
+   {
+      int dataset_id = -1;  // dataset identifier   
+   
+      try 
+      {
+	 // Create the dataset
+	  dataset_id = H5.H5Dcreate (loc_id, name, type_id, space_id, 
+				     create_plist_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Dcreate_wrap() with HDF5Exception: "
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Dcreate_wrap() with other Exception: "
+	      + e.getMessage());
+      }
+      return dataset_id;
+   }
+
+
+   // Help function for writing the dataset
+   public static int H5Dwrite_wrap (int dataset_id, int mem_type_id,
+				    int mem_space_id, int file_space_id,
+				    int xfer_plist_id, Object buf)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Write the dataset. 
+	 status = H5.H5Dwrite (dataset_id, mem_type_id, mem_space_id, 
+			       file_space_id, xfer_plist_id, buf);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Dwrite_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Dwrite_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+
+
+   // Help function for reading the dataset
+   public static int H5Dread_wrap (int dataset_id, int mem_type_id,
+				   int mem_space_id, int file_space_id,
+				   int xfer_plist_id, Object obj)
+   {
+      int status = -1; 
+      
+      try 
+      {
+	 // Read the dataset. 
+	 status = H5.H5Dread (dataset_id, mem_type_id, mem_space_id, 
+			      file_space_id, xfer_plist_id, obj);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Dread_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Dread_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+
+   // Help function for terminating access to the data space. 
+   public static int H5Sclose_wrap (int dataspace_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+         // Terminate access to the data space. 
+         status = H5.H5Sclose (dataspace_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+         System.out.println 
+	     ("HyperSlab.H5Sclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+         System.out.println 
+	     ("HyperSlab.H5Sclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+ 
+ 
+   // Help function for ending access to the dataset and releasing 
+   // resources used by it.
+   public static int H5Dclose_wrap (int dataset_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // End access to the dataset and release resources used by it. 
+	 status = H5.H5Dclose (dataset_id);
+      }
+      catch (HDF5Exception hdf5e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Dclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Dclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+
+
+   // Help function for terminating access to the file. 
+   public static int H5Fclose_wrap (int file_id)
+   {
+      int status = -1;
+      
+      try 
+      {
+	 // Terminate access to the file. 
+	 status = H5.H5Fclose (file_id);
+      }
+      catch (HDF5Exception hdf5e)
+      { 
+	 System.out.println 
+	     ("HyperSlab.H5Fclose_wrap() with HDF5Exception: " 
+	      + hdf5e.getMessage());
+      }
+      catch (Exception e)
+      {
+	 System.out.println 
+	     ("HyperSlab.H5Fclose_wrap() with other exception: " 
+	      + e.getMessage());
+      }
+      return status;
+   }
+}

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Makefile
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Makefile	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Makefile	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,92 @@
+# Generated automatically from Makefile.in by configure.
+# /*=======================================================================
+# UNIVERSITY OF ILLINOIS (UI), NATIONAL CENTER FOR SUPERCOMPUTING
+# APPLICATIONS (NCSA), Software Distribution Policy for Public Domain
+# Software
+# 
+# NCSA HDF Version 5 source code and documentation are in the public
+# domain, available without fee for education, research, non-commercial and
+# commercial purposes.  Users may distribute the binary or source code to
+# third parties provided that this statement appears on all copies and that
+# no charge is made for such copies.  
+# 
+# UI MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE SOFTWARE FOR ANY
+# PURPOSE.  IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.  THE
+# UI SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY THE USER OF THIS
+# SOFTWARE.  The software may have been developed under agreements between
+# the UI and the Federal Government which entitle the Government to certain
+# rights.
+# 
+# We ask, but do not require that the following message be include in all
+# derived works:
+# 
+#   Portions developed at the National Center for Supercomputing Applications
+#   at the University of Illinois at Urbana-Champaign.
+# 
+# By copying this program, you, the user, agree to abide by the conditions
+# and understandings with respect to any software which is marked with a
+# public domain notice.
+# 
+# =======================================================================*/
+# 
+
+
+JAVAC           = /usr/java1.2/bin/javac
+FIND            = /bin/find
+
+CLASSPATH=/usr/java1.2/jre/lib/rt.jar:/afs/ncsa.uiuc.edu/projects/hdf/java/java2/mcgrath/arabica/java-hdf5                                                         
+
+
+.SUFFIXES: .java .class
+
+.java.class:
+	$(JAVAC) -classpath $(CLASSPATH) $<
+
+tutorial: ./Compound.class  \
+	./Copy.class \
+	./CreateAttribute.class \
+	./CreateDataset.class \
+	./CreateFile.class \
+	./CreateFileInput.class \
+	./CreateGroup.class \
+	./CreateGroupAR.class \
+	./CreateGroupDataset.class \
+	./DatasetRdWt.class \
+	./HyperSlab.class
+	chmod u+x *.sh
+
+clean: clean-classes 
+
+distclean: clean-classes clean-data
+	rm config.cache config.status config.log 
+	rm -rf ./Makefile
+
+clean-classes:
+	$(FIND) . \( -name '#*' -o -name '*~' -o -name '*.class' \) -exec rm -f {} \; ;\
+
+clean-data:
+	rm -rf *.h5 
+
+Compound:	./Compound.class 
+Copy:	./Copy.class
+CreateAttribute:	./CreateAttribute.class
+CreateDataset:	./CreateDataset.class
+CreateFile:	./CreateFile.class
+CreateFileInput:	./CreateFileInput.class
+CreateGroup:	./CreateGroup.class
+CreateGroupAR:	./CreateGroupAR.class
+CreateGroupDataset:	./CreateGroupDataset.class
+DatasetRdWt:	./DatasetRdWt.class
+HyperSlab:	./HyperSlab.class
+
+CLASSES= ./Compound.class  \
+	./Copy.class \
+	./CreateAttribute.class \
+	./CreateDataset.class \
+	./CreateFileInput.class \
+	./CreateFile.class \
+	./CreateGroup.class \
+	./CreateGroupAR.class \
+	./CreateGroupDataset.class \
+	./DatasetRdWt.class \
+	./HyperSlab.class

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,91 @@
+# /*=======================================================================
+# UNIVERSITY OF ILLINOIS (UI), NATIONAL CENTER FOR SUPERCOMPUTING
+# APPLICATIONS (NCSA), Software Distribution Policy for Public Domain
+# Software
+# 
+# NCSA HDF Version 5 source code and documentation are in the public
+# domain, available without fee for education, research, non-commercial and
+# commercial purposes.  Users may distribute the binary or source code to
+# third parties provided that this statement appears on all copies and that
+# no charge is made for such copies.  
+# 
+# UI MAKES NO REPRESENTATIONS ABOUT THE SUITABILITY OF THE SOFTWARE FOR ANY
+# PURPOSE.  IT IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.  THE
+# UI SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY THE USER OF THIS
+# SOFTWARE.  The software may have been developed under agreements between
+# the UI and the Federal Government which entitle the Government to certain
+# rights.
+# 
+# We ask, but do not require that the following message be include in all
+# derived works:
+# 
+#   Portions developed at the National Center for Supercomputing Applications
+#   at the University of Illinois at Urbana-Champaign.
+# 
+# By copying this program, you, the user, agree to abide by the conditions
+# and understandings with respect to any software which is marked with a
+# public domain notice.
+# 
+# =======================================================================*/
+# 
+
+
+JAVAC           = @JAVAC@
+FIND            = @FIND@
+
+CLASSPATH=@CLASSPATH@                                                         
+
+
+.SUFFIXES: .java .class
+
+.java.class:
+	$(JAVAC) -classpath $(CLASSPATH) $<
+
+tutorial: ./Compound.class  \
+	./Copy.class \
+	./CreateAttribute.class \
+	./CreateDataset.class \
+	./CreateFile.class \
+	./CreateFileInput.class \
+	./CreateGroup.class \
+	./CreateGroupAR.class \
+	./CreateGroupDataset.class \
+	./DatasetRdWt.class \
+	./HyperSlab.class
+	chmod u+x *.sh
+
+clean: clean-classes 
+
+distclean: clean-classes clean-data
+	rm config.cache config.status config.log 
+	rm -rf ./Makefile
+
+clean-classes:
+	$(FIND) . \( -name '#*' -o -name '*~' -o -name '*.class' \) -exec rm -f {} \; ;\
+
+clean-data:
+	rm -rf *.h5 
+
+Compound:	./Compound.class 
+Copy:	./Copy.class
+CreateAttribute:	./CreateAttribute.class
+CreateDataset:	./CreateDataset.class
+CreateFile:	./CreateFile.class
+CreateFileInput:	./CreateFileInput.class
+CreateGroup:	./CreateGroup.class
+CreateGroupAR:	./CreateGroupAR.class
+CreateGroupDataset:	./CreateGroupDataset.class
+DatasetRdWt:	./DatasetRdWt.class
+HyperSlab:	./HyperSlab.class
+
+CLASSES= ./Compound.class  \
+	./Copy.class \
+	./CreateAttribute.class \
+	./CreateDataset.class \
+	./CreateFileInput.class \
+	./CreateFile.class \
+	./CreateGroup.class \
+	./CreateGroupAR.class \
+	./CreateGroupDataset.class \
+	./DatasetRdWt.class \
+	./HyperSlab.class

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/README
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/README	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/README	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,21 @@
+These files are Java versions of the example programs used in
+the HDF-5 tutoral:
+   http://hdf.ncsa.uiuc.edu/training/hdf5/
+
+The examples here correspond to the examples explained in the first 13
+sections of the tutorial.
+
+Lesson    C program         Java program               Topic                  
+
+4         h5_crtfile.c      CreateFile.java          Create an HDF-5 file. 
+5         h5_crtdat.c       CreateDataset.java       Create a dataset.    
+6         h5_rdwt.c         DatasetRdWt.java         Write/Read a dataset.
+7         h5_crtatt.c       CreateAttribute.java     Create an attribute.
+8         h5_crtgrp.c       CreateGroup.java         Create a group.    
+9         h5_crtgrpar.c     CreateGroupAR.java       Abs. and Rel. paths.
+10        h5_crtgrpd.c      CreateGroupDataset.java  Create dataset in grp.
+
+11        h5_compound.c     Compound.java            Compound datatype     
+12        h5_hyperslab.c    Hyperslab.java           Selection of hyperslab
+13        h5_copy.c         Copy.java	             Selection of elements 
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/readme.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/readme.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/readme.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,192 @@
+<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
+<html>
+<head>
+   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+   <meta name="GENERATOR" content="Mozilla/4.61 [en] (WinNT; I) [Netscape]">
+   <title>readme</title>
+</head>
+<body text="#000000" bgcolor="#FFFFFF" link="#0000EE" vlink="#551A8B" alink="#FF0000">
+
+<h3>
+<b>HDF 5 Tutorial Examples in Java</b></h3>
+
+<p><br>These files are Java versions of the example programs used in the
+HDF-5 tutoral:
+<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://hdf.ncsa.uiuc.edu/training/hdf5/">http://hdf.ncsa.uiuc.edu/training/hdf5/</a>
+<p>The examples here correspond to the examples explained in the first
+13 sections of the tutorial.
+<br>&nbsp;
+<br>&nbsp;
+<table BORDER CELLPADDING=2 WIDTH="100%" >
+<tr>
+<td>
+<center><b>Lesson</b></center>
+</td>
+
+<td>
+<center><b>Topic</b></center>
+</td>
+
+<td>
+<center><b>C file</b></center>
+</td>
+
+<td>
+<center><b>Java file</b></center>
+</td>
+</tr>
+
+<tr>
+<td><a href="http://hdf.ncsa.uiuc.edu/training/hdf5/crtfile.html">Lesson
+4</a></td>
+
+<td>Create an HDF-5 file.</td>
+
+<td>h5_crtfile.c</td>
+
+<td>CreateFile.java</td>
+</tr>
+
+<tr>
+<td><a href="http://hdf.ncsa.uiuc.edu/training/hdf5/crtdat.html">Lesson
+5</a></td>
+
+<td>Create a Dataset in an HDF-5 file</td>
+
+<td>h5_crtdat.c</td>
+
+<td>CreateDataset.java</td>
+</tr>
+
+<tr>
+<td><a href="http://hdf.ncsa.uiuc.edu/training/hdf5/rdwt.html">Lesson 6</a></td>
+
+<td>Write and Read data in a dataset</td>
+
+<td>h5_rdwt.c</td>
+
+<td>DatasetRdWt.java</td>
+</tr>
+
+<tr>
+<td><a href="http://hdf.ncsa.uiuc.edu/training/hdf5/crtatt.html">Lesson
+7</a></td>
+
+<td>Create an attribute.</td>
+
+<td>h5_crtatt.c</td>
+
+<td>CreateAttribute.java</td>
+</tr>
+
+<tr>
+<td><a href="http://hdf.ncsa.uiuc.edu/training/hdf5/crtgrp.html">Lesson
+8</a></td>
+
+<td>Create a group.</td>
+
+<td>h5_crtgrp.c</td>
+
+<td>CreateGroup.java</td>
+</tr>
+
+<tr>
+<td><a href="http://hdf.ncsa.uiuc.edu/training/hdf5/crtgrpar.html">Lesson
+9</a></td>
+
+<td>Using Absolute and relative paths</td>
+
+<td>h5_crtgrpar.c</td>
+
+<td>CreateGroupAR.java</td>
+</tr>
+
+<tr>
+<td><a href="http://hdf.ncsa.uiuc.edu/training/hdf5/crtgrpd.html">Lesson
+10</a></td>
+
+<td>Create a dataset in a group.</td>
+
+<td>h5_crtgrpd.c</td>
+
+<td>CreateGroupDataset.java</td>
+</tr>
+
+<tr>
+<td><a href="http://hdf.ncsa.uiuc.edu/training/hdf5/compound.html">Lesson
+11</a></td>
+
+<td>Using Compound Datatypes</td>
+
+<td>h5_compound.c</td>
+
+<td>Compound.java</td>
+</tr>
+
+<tr>
+<td><a href="http://hdf.ncsa.uiuc.edu/training/hdf5/select.html">Lesson
+12</a></td>
+
+<td>Selection of a hyperslab.</td>
+
+<td>h5_hyperslab.c</td>
+
+<td>Hyperslab.java</td>
+</tr>
+
+<tr>
+<td><a href="http://hdf.ncsa.uiuc.edu/training/hdf5/selectc.html">Lesson
+13</a></td>
+
+<td>Selection of elements.</td>
+
+<td>h5_copy.c</td>
+
+<td>Copy.java</td>
+</tr>
+</table>
+
+<p>
+<hr><b>Some Explanation About Tutorial Examples</b>
+<p>The Java tutorial programs try to stay close to the corresponding C
+program. The main function's structure almost same as C program, with one
+call for each HDF5 library function. For example, where the C program has
+a call to <b>H5Fopen()</b>, the Java program has a call to <b>H5Fopen_wrap()</b>.
+<p>The wrapper functions call the HDF-5 library using the Java HDF-5 Interface
+(JHI5). The HDF-5 C interface returns error codes; these are represented
+by Java Exceptions in the JHI5. The wrapper function catches the exception
+and prints a message.
+<p>For example, the <b>H5Fopen_wrap() </b>method calls the JHI5, and catches
+any exceptions which may occur:
+<pre>&nbsp;&nbsp; <b>public static int H5Fopen_wrap (String name, int flags, int access_id)
+&nbsp;&nbsp; {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int file_id = -1;&nbsp;&nbsp;&nbsp; // file identifier&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Create a new file using default file properties.
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file_id = H5.H5Fopen (name, flags, access_id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (HDF5Exception hdf5e)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ("DatasetRdWt.H5Fopen_wrap() with HDF5Exception: "
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + hdf5e.getMessage());
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; catch (Exception e)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ("DatasetRdWt.H5Fopen_wrap() with other Exception: "&nbsp;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + e.getMessage());
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return file_id;
+&nbsp;&nbsp; }</b></pre>
+
+<p><br>
+<hr noshade size=1><a href="http://www.ncsa.uiuc.edu/"><img SRC="http://www.ncsa.uiuc.edu/Images/NCSAhome/footerlogo.gif" ALT="NCSA" BORDER=0 ></a>
+<br><font face="arial,helvetica"><font size=-1><a href="http://www.ncsa.uiuc.edu/">The
+National Center for Supercomputing Applications</a></font></font>
+<br><font face="arial,helvetica"><font size=-1><a href="http://www.uiuc.edu/">University
+of Illinois at Urbana-Champaign</a></font></font>
+<p><font face="arial,helvetica"><font size=-1><a href="mailto:hdfhelp at ncsa.uiuc.edu">hdfhelp at ncsa.uiuc.edu</a></font></font>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCompound.sh
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCompound.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCompound.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=/afs/ncsa/projects/hdf/java/java2/mcgrath/arabica/New5
+HDF5LIB=/afs/ncsa/projects/hdf/release/prehdf5-1.2.1/SunOS_5.7/lib
+
+#make this relative to the source root...
+PWD=/afs/ncsa.uiuc.edu/projects/hdf/java/java2/mcgrath/arabica/java-hdf5
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/solaris"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+/usr/java1.2/bin/java  Compound $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCompound.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCompound.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCompound.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=@JH5INST@
+HDF5LIB=@HDF5LIB@
+
+#make this relative to the source root...
+PWD=@PWD@
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/@JAVATARG@"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+ at JAVA@  Compound $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCopy.sh
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCopy.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCopy.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=/afs/ncsa/projects/hdf/java/java2/mcgrath/arabica/New5
+HDF5LIB=/afs/ncsa/projects/hdf/release/prehdf5-1.2.1/SunOS_5.7/lib
+
+#make this relative to the source root...
+PWD=/afs/ncsa.uiuc.edu/projects/hdf/java/java2/mcgrath/arabica/java-hdf5
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/solaris"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+/usr/java1.2/bin/java  Copy $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCopy.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCopy.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCopy.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=@JH5INST@
+HDF5LIB=@HDF5LIB@
+
+#make this relative to the source root...
+PWD=@PWD@
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/@JAVATARG@"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+ at JAVA@  Copy $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateAttribute.sh
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateAttribute.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateAttribute.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=/afs/ncsa/projects/hdf/java/java2/mcgrath/arabica/New5
+HDF5LIB=/afs/ncsa/projects/hdf/release/prehdf5-1.2.1/SunOS_5.7/lib
+
+#make this relative to the source root...
+PWD=/afs/ncsa.uiuc.edu/projects/hdf/java/java2/mcgrath/arabica/java-hdf5
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/solaris"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+/usr/java1.2/bin/java  CreateAttribute $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateAttribute.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateAttribute.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateAttribute.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=@JH5INST@
+HDF5LIB=@HDF5LIB@
+
+#make this relative to the source root...
+PWD=@PWD@
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/@JAVATARG@"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+ at JAVA@  CreateAttribute $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateDataset.sh
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateDataset.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateDataset.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=/afs/ncsa/projects/hdf/java/java2/mcgrath/arabica/New5
+HDF5LIB=/afs/ncsa/projects/hdf/release/prehdf5-1.2.1/SunOS_5.7/lib
+
+#make this relative to the source root...
+PWD=/afs/ncsa.uiuc.edu/projects/hdf/java/java2/mcgrath/arabica/java-hdf5
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/solaris"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+/usr/java1.2/bin/java  CreateDataset $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateDataset.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateDataset.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateDataset.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=@JH5INST@
+HDF5LIB=@HDF5LIB@
+
+#make this relative to the source root...
+PWD=@PWD@
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/@JAVATARG@"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+ at JAVA@  CreateDataset $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFile.sh
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFile.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFile.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=/afs/ncsa/projects/hdf/java/java2/mcgrath/arabica/New5
+HDF5LIB=/afs/ncsa/projects/hdf/release/prehdf5-1.2.1/SunOS_5.7/lib
+
+#make this relative to the source root...
+PWD=/afs/ncsa.uiuc.edu/projects/hdf/java/java2/mcgrath/arabica/java-hdf5
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/solaris"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+/usr/java1.2/bin/java  CreateFile $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFile.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFile.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFile.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=@JH5INST@
+HDF5LIB=@HDF5LIB@
+
+#make this relative to the source root...
+PWD=@PWD@
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/@JAVATARG@"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+ at JAVA@  CreateFile $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFileInput.sh
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFileInput.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFileInput.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=/afs/ncsa/projects/hdf/java/java2/mcgrath/arabica/New5
+HDF5LIB=/afs/ncsa/projects/hdf/release/prehdf5-1.2.1/SunOS_5.7/lib
+
+#make this relative to the source root...
+PWD=/afs/ncsa.uiuc.edu/projects/hdf/java/java2/mcgrath/arabica/java-hdf5
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/solaris"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+/usr/java1.2/bin/java  CreateFileInput $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFileInput.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFileInput.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateFileInput.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=@JH5INST@
+HDF5LIB=@HDF5LIB@
+
+#make this relative to the source root...
+PWD=@PWD@
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/@JAVATARG@"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+ at JAVA@  CreateFileInput $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroup.sh
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroup.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroup.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=/afs/ncsa/projects/hdf/java/java2/mcgrath/arabica/New5
+HDF5LIB=/afs/ncsa/projects/hdf/release/prehdf5-1.2.1/SunOS_5.7/lib
+
+#make this relative to the source root...
+PWD=/afs/ncsa.uiuc.edu/projects/hdf/java/java2/mcgrath/arabica/java-hdf5
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/solaris"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+/usr/java1.2/bin/java  CreateGroup $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroup.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroup.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroup.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=@JH5INST@
+HDF5LIB=@HDF5LIB@
+
+#make this relative to the source root...
+PWD=@PWD@
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/@JAVATARG@"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+ at JAVA@  CreateGroup $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupAR.sh
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupAR.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupAR.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=/afs/ncsa/projects/hdf/java/java2/mcgrath/arabica/New5
+HDF5LIB=/afs/ncsa/projects/hdf/release/prehdf5-1.2.1/SunOS_5.7/lib
+
+#make this relative to the source root...
+PWD=/afs/ncsa.uiuc.edu/projects/hdf/java/java2/mcgrath/arabica/java-hdf5
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/solaris"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+/usr/java1.2/bin/java  CreateGroupAR $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupAR.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupAR.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupAR.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=@JH5INST@
+HDF5LIB=@HDF5LIB@
+
+#make this relative to the source root...
+PWD=@PWD@
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/@JAVATARG@"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+ at JAVA@  CreateGroupAR $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupDataset.sh
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupDataset.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupDataset.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=/afs/ncsa/projects/hdf/java/java2/mcgrath/arabica/New5
+HDF5LIB=/afs/ncsa/projects/hdf/release/prehdf5-1.2.1/SunOS_5.7/lib
+
+#make this relative to the source root...
+PWD=/afs/ncsa.uiuc.edu/projects/hdf/java/java2/mcgrath/arabica/java-hdf5
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/solaris"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+/usr/java1.2/bin/java  CreateGroupDataset $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupDataset.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupDataset.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runCreateGroupDataset.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=@JH5INST@
+HDF5LIB=@HDF5LIB@
+
+#make this relative to the source root...
+PWD=@PWD@
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/@JAVATARG@"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+ at JAVA@  CreateGroupDataset $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runDatasetRdWt.sh
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runDatasetRdWt.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runDatasetRdWt.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=/afs/ncsa/projects/hdf/java/java2/mcgrath/arabica/New5
+HDF5LIB=/afs/ncsa/projects/hdf/release/prehdf5-1.2.1/SunOS_5.7/lib
+
+#make this relative to the source root...
+PWD=/afs/ncsa.uiuc.edu/projects/hdf/java/java2/mcgrath/arabica/java-hdf5
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/solaris"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+/usr/java1.2/bin/java  DatasetRdWt $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runDatasetRdWt.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runDatasetRdWt.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runDatasetRdWt.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=@JH5INST@
+HDF5LIB=@HDF5LIB@
+
+#make this relative to the source root...
+PWD=@PWD@
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/@JAVATARG@"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+ at JAVA@  DatasetRdWt $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runHyperSlab.sh
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runHyperSlab.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runHyperSlab.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=/afs/ncsa/projects/hdf/java/java2/mcgrath/arabica/New5
+HDF5LIB=/afs/ncsa/projects/hdf/release/prehdf5-1.2.1/SunOS_5.7/lib
+
+#make this relative to the source root...
+PWD=/afs/ncsa.uiuc.edu/projects/hdf/java/java2/mcgrath/arabica/java-hdf5
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/solaris"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+/usr/java1.2/bin/java  HyperSlab $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runHyperSlab.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runHyperSlab.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/java/runHyperSlab.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+JH5INSTALLDIR=@JH5INST@
+HDF5LIB=@HDF5LIB@
+
+#make this relative to the source root...
+PWD=@PWD@
+LIBDIR=$JH5INSTALLDIR"/lib"
+
+CLASSPATH=".:"$LIBDIR"/jhdf5.jar"
+
+LD_LIBRARY_PATH=$HDF5LIB":"$LIBDIR"/@JAVATARG@"
+
+export CLASSPATH
+export LD_LIBRARY_PATH
+
+ at JAVA@  HyperSlab $*

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/mountexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/mountexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/mountexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,187 @@
+!
+!In the following example we create one file with a group in it, 
+!and another file with a dataset. Mounting is used to
+!access the dataset from the second file as a member of a group 
+!in the first file. 
+!
+
+     PROGRAM MOUNTEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     !
+     ! Filenames are "mount1.h5" and "mount2.h5"
+     !
+     CHARACTER(LEN=9), PARAMETER :: filename1 = "mount1.h5"
+     CHARACTER(LEN=9), PARAMETER :: filename2 = "mount2.h5"
+
+     !
+     !data space rank and dimensions
+     !
+     INTEGER, PARAMETER :: RANK = 2
+     INTEGER, PARAMETER :: NX = 4
+     INTEGER, PARAMETER :: NY = 5
+
+     !
+     ! File identifiers
+     !
+     INTEGER(HID_T) :: file1_id, file2_id  
+     
+     !
+     ! Group identifier
+     !
+     INTEGER(HID_T) :: gid 
+
+     !
+     ! Dataset identifier
+     !
+     INTEGER(HID_T) :: dset_id
+ 
+     !
+     ! Data space identifier
+     !
+     INTEGER(HID_T) :: dataspace
+ 
+     !
+     ! Data type identifier
+     !
+     INTEGER(HID_T) :: dtype_id
+
+     ! 
+     ! The dimensions for the dataset.
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/NX,NY/)
+
+     !
+     ! Flag to check operation success 
+     !         
+     INTEGER     ::   error
+
+     !
+     ! General purpose integer 
+     !         
+     INTEGER     ::   i, j
+
+     !
+     ! Data buffers 
+     !         
+     INTEGER, DIMENSION(NX,NY) :: data_in, data_out
+
+     !
+     ! Initialize FORTRAN interface. 
+     !
+     CALL h5open_f(error) 
+
+     !
+     ! Initialize data_in buffer
+     !
+     do i = 1, NX
+          do j = 1, NY
+               data_in(i,j) =  (i-1) + (j-1)
+          end do
+     end do
+
+     !
+     ! Create first file "mount1.h5" using default properties.
+     ! 
+     CALL h5fcreate_f(filename1, H5F_ACC_TRUNC_F, file1_id, error)
+
+     !
+     ! Create group "/G" inside file "mount1.h5".
+     ! 
+     CALL h5gcreate_f(file1_id, "/G", gid, error)
+
+     !
+     ! Close file and group identifiers.
+     ! 
+     CALL h5gclose_f(gid, error)
+     CALL h5fclose_f(file1_id, error)
+
+     !
+     ! Create second file "mount2.h5" using default properties.
+     ! 
+     CALL h5fcreate_f(filename2, H5F_ACC_TRUNC_F, file2_id, error)
+
+     !
+     ! Create data space for the dataset. 
+     !
+     CALL h5screate_simple_f(RANK, dims, dataspace, error)
+
+     !
+     ! Create dataset "/D" inside file "mount2.h5".
+     ! 
+     CALL h5dcreate_f(file2_id, "/D", H5T_NATIVE_INTEGER, dataspace, &
+                      dset_id, error)
+ 
+     !
+     ! Write data_in to the dataset
+     !
+     CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data_in, error)
+
+     !
+     ! Close file, dataset and dataspace identifiers.
+     ! 
+     CALL h5sclose_f(dataspace, error)
+     CALL h5dclose_f(dset_id, error)
+     CALL h5fclose_f(file2_id, error)
+
+     !
+     ! Reopen both files.
+     ! 
+     CALL h5fopen_f (filename1, H5F_ACC_RDWR_F, file1_id, error)
+     CALL h5fopen_f (filename2, H5F_ACC_RDWR_F, file2_id, error)
+
+     !
+     ! Mount the second file under the first file's "/G" group.
+     ! 
+     CALL h5fmount_f (file1_id, "/G", file2_id, error)
+
+
+     !
+     ! Access dataset D in the first file under /G/D name.
+     ! 
+     CALL h5dopen_f(file1_id, "/G/D", dset_id, error)
+
+     !
+     ! Get dataset's data type.
+     ! 
+     CALL h5dget_type_f(dset_id, dtype_id, error)
+
+     !
+     ! Read the dataset.
+     ! 
+     CALL h5dread_f(dset_id, dtype_id, data_out, error)
+
+     !
+     ! Print out the data.
+     ! 
+     do i = 1, NX
+          print *, (data_out(i,j), j = 1, NY)
+     end do
+
+
+     !
+     !Close dset_id and dtype_id.
+     ! 
+     CALL h5dclose_f(dset_id, error)
+     CALL h5tclose_f(dtype_id, error)
+
+     !
+     ! Unmount the second file.
+     ! 
+     CALL h5funmount_f(file1_id, "/G", error);
+
+     !
+     ! Close both files.
+     ! 
+     CALL h5fclose_f(file1_id, error)
+     CALL h5fclose_f(file2_id, error)
+     !
+     ! Close FORTRAN interface. 
+     !
+     CALL h5close_f(error) 
+
+     END PROGRAM MOUNTEXAMPLE
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/refobjexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/refobjexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/refobjexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,142 @@
+!
+!    This program shows how to create and store references to the objects.
+!    Program creates a file, two groups, a dataset to store integer data and 
+!    a dataset to store references to the objects. 
+!    Stored references are used to open the objects they are point to.
+!    Data is written to the dereferenced dataset, and class type is displayed for
+!    the shared datatype.
+!
+     PROGRAM OBJ_REFERENCES 
+
+        USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+     CHARACTER(LEN=10), PARAMETER :: filename = "FORTRAN.h5"  ! File 
+     CHARACTER(LEN=8), PARAMETER :: dsetnamei = "INTEGERS"    ! Dataset with the integer data
+     CHARACTER(LEN=17), PARAMETER :: dsetnamer = "OBJECT_REFERENCES" ! Dataset wtih object
+                                                                     ! references
+     CHARACTER(LEN=6), PARAMETER :: groupname1 = "GROUP1"            ! Groups in the file
+     CHARACTER(LEN=6), PARAMETER :: groupname2 = "GROUP2"            !
+      
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: grp1_id       ! Group identifiers 
+     INTEGER(HID_T) :: grp2_id       !  
+     INTEGER(HID_T) :: dset_id       ! Dataset identifiers 
+     INTEGER(HID_T) :: dsetr_id      !  
+     INTEGER(HID_T) :: type_id       ! Type identifier  
+     INTEGER(HID_T) :: space_id      ! Dataspace identifiers 
+     INTEGER(HID_T) :: spacer_id     !  
+     INTEGER     ::   error
+     INTEGER(HSIZE_T), DIMENSION(1) :: dims = (/5/)
+     INTEGER(HSIZE_T), DIMENSION(1) :: dimsr= (/4/)
+     INTEGER(HSIZE_T), DIMENSION(1) :: my_maxdims = (/5/)
+     INTEGER :: rank = 1 
+     INTEGER :: rankr = 1 
+     TYPE(hobj_ref_t_f), DIMENSION(4) ::  ref
+     TYPE(hobj_ref_t_f), DIMENSION(4) ::  ref_out
+     INTEGER, DIMENSION(5) :: data = (/1, 2, 3, 4, 5/)
+     INTEGER :: class, ref_size
+     !
+     !  Initialize FORTRAN interface. 
+     !
+     CALL h5open_f(error)
+     !
+     !  Create a file
+     !
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+                                         ! Default file access and file creation
+                                         ! properties are used. 
+     !
+     !  Create a group in the file
+     !
+     CALL h5gcreate_f(file_id, groupname1, grp1_id, error)
+     !
+     ! Create a group inside the created gorup 
+     !
+     CALL h5gcreate_f(grp1_id, groupname2, grp2_id, error)
+     ! 
+     ! Create dataspaces for datasets   
+     !
+     CALL h5screate_simple_f(rank, dims, space_id, error, maxdims=my_maxdims)
+     CALL h5screate_simple_f(rankr, dimsr, spacer_id, error)
+     !
+     ! Create integer dataset
+     !
+     CALL h5dcreate_f(file_id, dsetnamei, H5T_NATIVE_INTEGER, space_id, &
+                      dset_id, error)
+     !
+     ! Create dataset to store references to the objects
+     !
+     CALL h5dcreate_f(file_id, dsetnamer, H5T_STD_REF_OBJ, spacer_id, &
+                      dsetr_id, error)
+     !
+     ! Create a datatype and store in the file
+     !
+     CALL h5tcopy_f(H5T_NATIVE_REAL, type_id, error)
+     CALL h5tcommit_f(file_id, "MyType", type_id, error)
+     !
+     !  Close dataspaces, groups and integer dataset
+     ! 
+     CALL h5sclose_f(space_id, error)
+     CALL h5sclose_f(spacer_id, error)
+     CALL h5tclose_f(type_id, error)
+     CALL h5dclose_f(dset_id, error)
+     CALL h5gclose_f(grp1_id, error)
+     CALL h5gclose_f(grp2_id, error)
+     !
+     ! Create references to two groups, integer dataset and shared datatype
+     ! and write it to the dataset in the file
+     !
+     CALL h5rcreate_f(file_id, groupname1, ref(1), error)
+     CALL h5rcreate_f(file_id, "/GROUP1/GROUP2", ref(2), error)
+     CALL h5rcreate_f(file_id, dsetnamei, ref(3), error)
+     CALL h5rcreate_f(file_id, "MyType", ref(4), error)
+     ref_size = size(ref)
+     CALL h5dwrite_f(dsetr_id, H5T_STD_REF_OBJ, ref, ref_size, error)
+     !
+     ! Close the dataset
+     !
+     CALL h5dclose_f(dsetr_id, error)
+     ! 
+     ! Reopen the dataset with object references and read references to the buffer
+     !
+     CALL h5dopen_f(file_id, dsetnamer,dsetr_id,error)
+     ref_size = size(ref_out)
+     CALL h5dread_f(dsetr_id, H5T_STD_REF_OBJ, ref_out, ref_size, error)
+     !
+     ! Dereference the third reference. We know that it is a dataset. On practice
+     ! one should use h5rget_object_type_f function to find out
+     ! the type of an object the reference points to.
+     !
+     CALL h5rdereference_f(dsetr_id, ref(3), dset_id, error)
+     !
+     ! Write data to the dataset.
+     !
+     CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data, error)
+     if (error .eq. 0) write(*,*) "Data has been successfully written to the dataset "
+     !
+     ! Dereference the fourth reference. We know that it is a datatype. On practice
+     ! one should use h5rget_object_type_f function to find out
+     ! the type of an object the reference points to.
+     !
+     CALL h5rdereference_f(dsetr_id, ref(4), type_id, error)
+     !
+     ! Get datatype class and display it if it is of a FLOAT class.
+     !
+     CALL h5tget_class_f(type_id, class, error)
+     if(class .eq. H5T_FLOAT_F) write(*,*) "Stored datatype is of a FLOAT class" 
+     !
+     ! Close all objects.
+     !
+     CALL h5dclose_f(dset_id, error)
+     CALL h5tclose_f(type_id, error)
+     CALL h5dclose_f(dsetr_id, error)
+     CALL h5fclose_f(file_id, error)
+     !
+     !  Close FORTRAN interface. 
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM OBJ_REFERENCES 
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/refregexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/refregexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/refregexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,162 @@
+!
+!    This program shows how to create, store and dereference references 
+!    to the dataset regions.
+!    Program creates a file and writes two dimensional integer dataset
+!    to it. Then program creates and stores references to the hyperslab
+!    and 3 points selected in the integer dataset, in the second dataset. 
+!    Program reopens the second dataset, reads and dereferences region
+!    references, and then reads and displays selected data from the 
+!    integer dataset.
+!    
+     PROGRAM REG_REFERENCE
+
+        USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+     CHARACTER(LEN=10), PARAMETER :: filename = "FORTRAN.h5"
+     CHARACTER(LEN=6), PARAMETER :: dsetnamev = "MATRIX"
+     CHARACTER(LEN=17), PARAMETER :: dsetnamer = "REGION_REFERENCES"
+      
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: space_id      ! Dataspace identifier 
+     INTEGER(HID_T) :: spacer_id     ! Dataspace identifier 
+     INTEGER(HID_T) :: dsetv_id      ! Dataset identifier 
+     INTEGER(HID_T) :: dsetr_id      ! Dataset identifier 
+     INTEGER     ::   error
+     TYPE(hdset_reg_ref_t_f) , DIMENSION(2) :: ref     ! Buffers to store references
+     TYPE(hdset_reg_ref_t_f) , DIMENSION(2) :: ref_out !
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/2,9/)  ! Datasets dimensions
+     INTEGER(HSIZE_T), DIMENSION(1) :: dimsr = (/2/)   ! 
+     INTEGER(HSIZE_T), DIMENSION(2) :: start
+     INTEGER(HSIZE_T), DIMENSION(2) :: count
+     INTEGER :: rankr = 1 
+     INTEGER :: rank = 2
+     INTEGER , DIMENSION(2,9) ::  data 
+     INTEGER , DIMENSION(2,9) ::  data_out = 0 
+     INTEGER(HSIZE_T) , DIMENSION(2,3) :: coord
+     INTEGER(SIZE_T) ::num_points = 3  ! Number of selected points
+     INTEGER :: i, j
+     INTEGER :: ref_size
+     coord = reshape((/1,1,2,7,1,9/), (/2,3/))   ! Coordinates of selected points
+     data = reshape ((/1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6/), (/2,9/))
+     !
+     !  Initialize FORTRAN interface.
+     !
+     CALL h5open_f(error)
+     !
+     !  Create a new file.
+     !
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+                                         ! Default file access and file creation
+                                         ! properties are used. 
+     ! 
+     ! Create  dataspaces:
+     ! 
+     ! for dataset with references to dataset regions 
+     !
+     CALL h5screate_simple_f(rankr, dimsr, spacer_id, error)
+     !
+     ! for integer dataset 
+     !
+     CALL h5screate_simple_f(rank, dims, space_id, error)
+     !
+     ! Create  and write datasets:
+     !
+     ! Integer dataset 
+     !
+     CALL h5dcreate_f(file_id, dsetnamev, H5T_NATIVE_INTEGER, space_id, &
+                      dsetv_id, error)
+     CALL h5dwrite_f(dsetv_id, H5T_NATIVE_INTEGER, data, error)
+     CALL h5dclose_f(dsetv_id, error)
+     !
+     ! Dataset with references
+     !
+     CALL h5dcreate_f(file_id, dsetnamer, H5T_STD_REF_DSETREG, spacer_id, &
+                      dsetr_id, error)
+     !
+     ! Create a reference to the hyperslab selection.
+     !
+     start(1) = 0 
+     start(2) = 3 
+     count(1) = 2
+     count(2) = 3
+     CALL h5sselect_hyperslab_f(space_id, H5S_SELECT_SET_F, &
+                                start, count, error) 
+     CALL h5rcreate_f(file_id, dsetnamev, space_id, ref(1), error) 
+     !
+     ! Create a reference to elements selection.
+     !
+     CALL h5sselect_none_f(space_id, error)
+     CALL h5sselect_elements_f(space_id, H5S_SELECT_SET_F, rank, num_points,&
+                               coord, error) 
+     CALL h5rcreate_f(file_id, dsetnamev, space_id, ref(2), error) 
+     !
+     ! Write dataset with the references. 
+     !
+     ref_size = size(ref)
+     CALL h5dwrite_f(dsetr_id, H5T_STD_REF_DSETREG, ref, ref_size, error) 
+     !
+     ! Close all objects.
+     !
+     CALL h5sclose_f(space_id, error)
+     CALL h5sclose_f(spacer_id, error)
+     CALL h5dclose_f(dsetr_id, error)
+     CALL h5fclose_f(file_id, error)
+     !
+     ! Reopen the file to test selections.
+     !
+     CALL h5fopen_f (filename, H5F_ACC_RDWR_F, file_id, error)
+     CALL h5dopen_f(file_id, dsetnamer, dsetr_id, error)
+     !
+     ! Read references to the dataset regions.
+     !
+     ref_size = size(ref_out)
+     CALL h5dread_f(dsetr_id, H5T_STD_REF_DSETREG, ref_out, ref_size, error) 
+     ! 
+     ! Dereference the first reference.
+     ! 
+     CALL H5rdereference_f(dsetr_id, ref_out(1), dsetv_id, error)
+     CALL H5rget_region_f(dsetr_id, ref_out(1), space_id, error) 
+     !
+     ! Read selected data from the dataset.
+     !
+     CALL h5dread_f(dsetv_id, H5T_NATIVE_INTEGER, data_out, error, &
+                     mem_space_id = space_id, file_space_id = space_id)
+          write(*,*) "Hypeslab selection"
+          write(*,*)
+          do i = 1,2 
+          write(*,*) (data_out (i,j), j = 1,9)
+          enddo
+          write(*,*)
+     CALL h5sclose_f(space_id, error)
+     CALL h5dclose_f(dsetv_id, error)
+     data_out = 0
+     !  
+     ! Dereference the second reference.
+     ! 
+     CALL H5rdereference_f(dsetr_id, ref_out(2), dsetv_id, error)
+     CALL H5rget_region_f(dsetr_id, ref_out(2), space_id, error) 
+     !
+     ! Read selected data from the dataset.
+     !
+     CALL h5dread_f(dsetv_id, H5T_NATIVE_INTEGER, data_out, error, &
+                     mem_space_id = space_id, file_space_id = space_id)
+          write(*,*) "Point selection"
+          write(*,*)
+          do i = 1,2 
+          write(*,*) (data_out (i,j), j = 1,9)
+          enddo
+     !
+     ! Close all objects
+     !
+     CALL h5sclose_f(space_id, error)
+     CALL h5dclose_f(dsetv_id, error)
+     CALL h5dclose_f(dsetr_id, error)
+     !
+     ! Close FORTRAN interface.
+     !
+     CALL h5close_f(error) 
+
+     END PROGRAM REG_REFERENCE 
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/rwdsetexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/rwdsetexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/rwdsetexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,78 @@
+!
+! 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. 
+!
+
+
+     PROGRAM RWDSETEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=8), PARAMETER :: filename = "dsetf.h5" ! File name
+     CHARACTER(LEN=4), PARAMETER :: dsetname = "dset"     ! Dataset name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+
+     INTEGER     ::   error ! Error flag
+     INTEGER     ::  i, j
+
+     INTEGER, DIMENSION(4,6) :: dset_data, data_out ! Data buffers
+     
+     !
+     ! Initialize the dset_data array.
+     !
+     do i = 1, 4
+          do j = 1, 6
+               dset_data(i,j) = (i-1)*6 + j;
+          end do
+     end do
+
+     !
+     ! Initialize FORTRAN predefined datatypes
+     !
+     CALL h5open_f(error) 
+
+     !
+     ! Open an existing file.
+     !
+     CALL h5fopen_f (filename, H5F_ACC_RDWR_F, file_id, error)
+
+     !
+     ! Open an existing dataset. 
+     !
+     CALL h5dopen_f(file_id, dsetname, dset_id, error)
+
+     !
+     ! Write the dataset.
+     !
+     CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, dset_data, error)
+
+     !
+     ! Read the dataset.
+     !
+     CALL h5dread_f(dset_id, H5T_NATIVE_INTEGER, data_out, error)
+
+     !
+     ! Close the dataset.
+     !
+     CALL h5dclose_f(dset_id, error)
+
+     !
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+     
+     !
+     ! Close FORTRAN predefined datatypes.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM RWDSETEXAMPLE 
+
+               
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/selectele.f90
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/selectele.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/examples/selectele.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,282 @@
+!
+!            This program creates two files, copy1.h5, and copy2.h5. 
+!            In copy1.h5, it creates a 3x4 dataset called 'Copy1',   
+!            and write 0's to this dataset.                         
+!            In copy2.h5, it create a 3x4 dataset called 'Copy2',    
+!            and write 1's to this dataset.                          
+!            It closes both files, reopens both files, selects two   
+!            points in copy1.h5 and writes values to them.  Then it  
+!            uses an H5Scopy to write the same selection to copy2.h5. 
+!            Program reopens the files, and reads and prints the contents of 
+!            the two datasets.   
+!                            
+
+     PROGRAM SELECTEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=8), PARAMETER :: filename1 = "copy1.h5" ! File name
+     CHARACTER(LEN=8), PARAMETER :: filename2 = "copy2.h5" !
+     CHARACTER(LEN=5), PARAMETER :: dsetname1 = "Copy1"    ! Dataset name
+     CHARACTER(LEN=5), PARAMETER :: dsetname2 = "Copy2"    !
+
+     INTEGER, PARAMETER :: RANK = 2 ! Dataset rank
+
+     INTEGER(SIZE_T), PARAMETER :: NUMP = 2 ! Number of points selected
+
+     INTEGER(HID_T) :: file1_id       ! File1 identifier 
+     INTEGER(HID_T) :: file2_id       ! File2 identifier 
+     INTEGER(HID_T) :: dset1_id       ! Dataset1 identifier 
+     INTEGER(HID_T) :: dset2_id       ! Dataset2 identifier 
+     INTEGER(HID_T) :: dataspace1     ! Dataspace identifier 
+     INTEGER(HID_T) :: dataspace2     ! Dataspace identifier 
+     INTEGER(HID_T) :: memspace       ! memspace identifier 
+
+     INTEGER(HSIZE_T), DIMENSION(1) :: dimsm = (/2/)  
+                                                   ! Memory dataspace dimensions 
+     INTEGER(HSIZE_T), DIMENSION(2) :: dimsf = (/3,4/)
+                                                   ! File dataspace dimensions
+     INTEGER(HSIZE_T), DIMENSION(RANK,NUMP) :: coord ! Elements coordinates
+                                                      ! in the file 
+
+     INTEGER, DIMENSION(3,4) :: buf1, buf2, bufnew ! Data buffers
+     INTEGER, DIMENSION(2) :: val = (/53, 59/) ! Values to write
+ 
+     INTEGER :: memrank = 1  ! Rank of the dataset in memory
+
+     INTEGER :: i, j 
+
+     INTEGER :: error  ! Error flag
+     LOGICAL :: status
+
+
+   !
+   ! Create two files containing identical datasets. Write 0's to one
+   ! and 1's to the other. 
+   !
+
+     !
+     ! Data initialization. 
+     !
+     do i = 1, 3
+          do j = 1, 4
+               buf1(i,j) = 0;
+          end do
+     end do
+
+     do i = 1, 3
+          do j = 1, 4
+               buf2(i,j) = 1;
+          end do
+     end do
+ 
+     !
+     ! Initialize FORTRAN predefined datatypes
+     !
+     CALL h5open_f(error) 
+
+     !
+     ! Create file1, file2  using default properties.
+     ! 
+     CALL h5fcreate_f(filename1, H5F_ACC_TRUNC_F, file1_id, error)
+
+     CALL h5fcreate_f(filename2, H5F_ACC_TRUNC_F, file2_id, error)
+
+     !
+     ! Create the data space for the  datasets. 
+     !
+     CALL h5screate_simple_f(RANK, dimsf, dataspace1, error)
+
+     CALL h5screate_simple_f(RANK, dimsf, dataspace2, error)
+
+     !
+     ! Create the datasets with default properties.
+     !
+     CALL h5dcreate_f(file1_id, dsetname1, H5T_NATIVE_INTEGER, dataspace1, &
+                      dset1_id, error)
+
+     CALL h5dcreate_f(file2_id, dsetname2, H5T_NATIVE_INTEGER, dataspace2, &
+                      dset2_id, error)
+
+     !
+     ! Write the datasets.
+     !
+     CALL h5dwrite_f(dset1_id, H5T_NATIVE_INTEGER, buf1, error)
+
+     CALL h5dwrite_f(dset2_id, H5T_NATIVE_INTEGER, buf2, error)
+
+     !
+     ! Close the dataspace for the datasets.
+     !
+     CALL h5sclose_f(dataspace1, error)
+
+     CALL h5sclose_f(dataspace2, error)
+
+     !
+     ! Close the datasets.
+     !
+     CALL h5dclose_f(dset1_id, error)
+
+     CALL h5dclose_f(dset2_id, error)
+
+     !
+     ! Close the files.
+     !
+     CALL h5fclose_f(file1_id, error)
+
+     CALL h5fclose_f(file2_id, error)
+
+  !
+  ! Open the two files.  Select two points in one file, write values to 
+  ! those point locations, then do H5Scopy and write the values to the  
+  ! other file.  Close files.
+  !
+
+     !
+     ! Open the files.
+     !
+     CALL h5fopen_f (filename1, H5F_ACC_RDWR_F, file1_id, error)
+       
+     CALL h5fopen_f (filename2, H5F_ACC_RDWR_F, file2_id, error)
+
+     !
+     ! Open the  datasets.
+     !
+     CALL h5dopen_f(file1_id, dsetname1, dset1_id, error)
+
+     CALL h5dopen_f(file2_id, dsetname2, dset2_id, error)
+
+     !
+     ! Get dataset1's dataspace identifier.
+     !
+     CALL h5dget_space_f(dset1_id, dataspace1, error)
+                                           
+     !
+     ! Create memory dataspace.
+     !
+     CALL h5screate_simple_f(memrank, dimsm, memspace, error)
+                                                               
+     !
+     ! Set the selected point positions. Because Fortran array index starts 
+     ! from 1, so add one to the actual select points in C.
+     !
+     coord(1,1) = 1     
+     coord(2,1) = 2     
+     coord(1,2) = 1     
+     coord(2,2) = 4
+
+     !
+     ! Select the elements in file space.
+     !
+     CALL h5sselect_elements_f(dataspace1, H5S_SELECT_SET_F, RANK, NUMP,&
+                               coord, error)
+
+     !
+     ! Write value into the selected points in dataset1.
+     !
+     CALL H5dwrite_f(dset1_id, H5T_NATIVE_INTEGER, val, error, &
+                    mem_space_id=memspace, file_space_id=dataspace1)
+
+     !
+     ! Copy the daspace1 into dataspace2.
+     !
+     CALL h5scopy_f(dataspace1, dataspace2, error)  
+
+     !
+     ! Write value into the selected points in dataset2.
+     !
+     CALL H5dwrite_f(dset2_id, H5T_NATIVE_INTEGER, val, error, &
+                    mem_space_id=memspace, file_space_id=dataspace2)
+
+     !
+     ! Close the dataspace for the datasets.
+     !
+     CALL h5sclose_f(dataspace1, error)
+
+     CALL h5sclose_f(dataspace2, error)
+
+     !
+     ! Close the memoryspace.
+     !
+     CALL h5sclose_f(memspace, error)
+
+     !
+     ! Close the datasets.
+     !
+     CALL h5dclose_f(dset1_id, error)
+
+     CALL h5dclose_f(dset2_id, error)
+
+     !
+     ! Close the files.
+     !
+     CALL h5fclose_f(file1_id, error)
+
+     CALL h5fclose_f(file2_id, error)
+
+  !
+  ! Open both files and print the contents of the datasets.
+  !
+
+     !
+     ! Open the files.
+     !
+     CALL h5fopen_f (filename1, H5F_ACC_RDWR_F, file1_id, error)
+       
+     CALL h5fopen_f (filename2, H5F_ACC_RDWR_F, file2_id, error)
+
+     !
+     ! Open the  datasets.
+     !
+     CALL h5dopen_f(file1_id, dsetname1, dset1_id, error)
+
+     CALL h5dopen_f(file2_id, dsetname2, dset2_id, error)
+
+     !
+     ! Read dataset from the first file.
+     !
+     CALL h5dread_f(dset1_id, H5T_NATIVE_INTEGER, bufnew, error)
+
+     !
+     ! Display the data read from dataset "Copy1"
+     !
+     write(*,*) "The data in dataset Copy1 is: "
+     do i = 1, 3
+         print *, (bufnew(i,j), j = 1,4)
+     end do
+
+     !
+     ! Read dataset from the second file.
+     !
+     CALL h5dread_f(dset2_id, H5T_NATIVE_INTEGER, bufnew, error)
+
+     !
+     ! Display the data read from dataset "Copy2"
+     !
+     write(*,*) "The data in dataset Copy2 is: "
+     do i = 1, 3
+         print *, (bufnew(i,j), j = 1,4)
+     end do
+
+     !
+     ! Close datasets.
+     !
+     CALL h5dclose_f(dset1_id, error)
+
+     CALL h5dclose_f(dset2_id, error)
+
+     !
+     ! Close files.
+     !
+     CALL h5fclose_f(file1_id, error)
+
+     CALL h5fclose_f(file2_id, error)
+
+     !
+     ! Close FORTRAN predefined datatypes.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM SELECTEXAMPLE

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/extend.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/extend.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/extend.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,284 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Chunking and Extendible Datasets
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Chunking and Extendible Datasets</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+    <LI><A HREF="#def">Creating an Extendible Dataset</A>
+    <LI>Programming Example 
+<UL>
+      <LI> <A HREF="#desc">Description</A> 
+      <LI> <A HREF="#rem">Remarks</A> 
+<!--
+      <LI> <A HREF="#fc">File Contents</A>
+      <LI> <A HREF="#ddl">Dataset Definition in DDL</A>
+-->
+</UL>
+</UL>
+<HR>
+<A NAME="def">
+<H2>Creating an Extendible Dataset</H2>
+An extendible dataset is one whose dimensions can grow.  
+HDF5 allows you to define a dataset to have certain initial dimensions, 
+then to later increase the size of any of the initial dimensions. 
+<P>
+HDF5 requires you to use chunking to define extendible datasets. 
+This makes it possible to extend datasets efficiently without
+having to excessively reorganize storage. 
+<P>
+The following operations are required in order to write an extendible dataset: 
+<OL>
+   <LI>Declare the dataspace of the dataset to have unlimited dimensions for all dimensions that might eventually be extended. 
+   <LI>Set dataset creation properties to enable chunking.
+   <LI>Create the dataset. 
+   <LI>Extend the size of the dataset.
+</OL>
+<H2> Programming Example</H2>
+<A NAME="desc">
+<H3><U>Description</U></H3>      
+This example shows how to create a 3 x 3 extendible dataset, write to that
+dataset, extend the dataset to 10x3, and write to the dataset again.
+<UL>
+[<A HREF="examples/h5_extend.c">C example</A> ] 
+    - <code>h5_extend.c</code><BR>
+[<A HREF="examples/chunk.f90">FORTRAN example</A> ] 
+    - <code>chunk.f90</code>
+</UL>
+<B>NOTE:</B> To download a tar file of the examples, including a Makefile,
+please go to the <A HREF="references.html">References</A> page.
+
+
+<A NAME="rem">
+<H3><U>Remarks</U></H3>
+<P>
+<UL>
+<LI>The routine <CODE>H5Pcreate</CODE> / <CODE>h5pcreate_f</CODE> 
+creates a new property as an instance of 
+    a property list.  The signature is as follows:
+<P>
+<I><B>C:</B></I> 
+<pre>
+    hid_t H5Pcreate (H5P_class_t classtype)
+</pre>
+<P>
+<I><B>FORTRAN:</B></I>
+<pre>
+    h5pcreate_f (classtype, prp_id, hdferr) 
+
+            classtype  IN: INTEGER 
+            prp_id    OUT: INTEGER(HID_T)
+            hdferr    OUT: INTEGER 
+</pre>
+<P>
+<UL>
+<LI>The parameter <I>classtype</I> is the type of property list to create.
+    Valid class types are as follows:  
+<center>
+<table border=1>
+  <tr align=center>
+    <td><b>C</b></td>
+    <td><b>FORTRAN</b></td>
+  </tr><tr align=left>
+    <td><code>          <BR>
+      H5P_FILE_CREATE   <BR>
+      H5P_FILE_ACCESS   <BR>
+      H5P_DATASET_CREATE<BR>
+      H5P_DATASET_XFER  <BR>
+      H5P_MOUNT         <BR><BR>
+    </code></td>
+    <td><code>            <BR>
+      H5P_FILE_CREATE_F   <BR>
+      H5P_FILE_ACCESS_F   <BR>
+      H5P_DATASET_CREATE_F<BR>
+      H5P_DATASET_XFER_F  <BR>
+      H5P_MOUNT_F         <BR><BR>
+    </code></td>
+  </tr>
+</table>
+</center>
+<LI>In C, the property list identifier is returned if successful;
+otherwise a negative value is returned, if not.  
+In FORTRAN, the property list identifier is returned in <I>prp_id</I> 
+and the return value for the call is returned in <I>hdferr</I>.
+</UL>
+<P>
+<LI>The routine <CODE>H5Pset_chunk</CODE> / <CODE>h5pset_chunk_f</CODE> 
+sets the size of the chunks used
+    to store a chunked layout dataset.
+    The signature of this routine is as follows:
+<P>
+<I><B>C:</B></I> 
+<pre>
+    herr_t H5Pset_chunk (hid_t prp_id, int ndims, 
+                         const hsize_t * dims) 
+</pre>
+<P>
+<I><B>FORTRAN:</B></I>
+<pre>
+    h5pset_chunk_f (prp_id, ndims, dims, hdferr) 
+
+            prp_id    IN: INTEGER(HID_T)
+            ndims     IN: INTEGER
+            dims      IN: INTEGER(HSIZE_T), DIMENSION(ndims) 
+            hdferr   OUT: INTEGER
+
+</pre>
+<P>
+<UL>
+<LI>The <em>prp_id</em> parameter is the identifier for the property
+    list to query.
+<LI>The <em>ndims</em> parameter is the number of dimensions of 
+    each chunk.
+<LI>The <em>dims</em> parameter is an array containing the size of
+    each chunk.
+<LI>In C, a non-negative value is returned if successful; otherwise a 
+    negative value is returned.
+    In FORTRAN, the return value is returned in <em>hdferr</em>: 0 if
+    successful and -1 otherwise.
+</UL>
+<P>
+<LI>The  <CODE>H5Dextend</CODE> / <CODE>h5dextend_f</CODE> routine
+extends a dataset that has an unlimited
+    dimension.  The signature is as follows:
+<P>
+<I><B>C:</B></I>
+<pre>
+    herr_t H5Dextend (hid_t dset_id, const hsize_t * size) 
+</pre>
+<P>
+<I><B>FORTRAN:</B></I>
+<pre>
+    h5dextend_f (dset_id, size, hdferr) 
+
+            dset_id   IN: INTEGER(HID_T) 
+            size         IN: INTEGER(HSIZE_T), DIMENSION(*)  
+            hdferr      OUT: INTEGER<BR> 
+</pre>
+<P>
+<UL>
+<LI>The <em>dset_id</em> parameter is the dataset identifier.
+<LI>The <em>size</em> parameter, is an array containing the
+    new magnitude of each dimension.
+<LI>In C, this function returns a non-negative value if successful and
+    a negative value otherwise. 
+    In FORTRAN, the return value is returned in <em>hdferr</em>: 
+    0 if successful and -1 otherwise.
+</UL>
+<P>
+<LI>The <CODE>H5Dget_create_plist</CODE> / <CODE>h5dget_create_plist_f</CODE> 
+routine returns an identifier  for a 
+copy of the dataset creation property list for a dataset.
+<P>
+<LI>The C function, <CODE>H5Pget_layout</CODE>, returns the layout of the raw data for a 
+dataset.  Valid types are <CODE>H5D_CONTIGUOUS</CODE> and 
+<CODE>H5D_CHUNKED</CODE>.
+A FORTRAN routine for <CODE>H5Pget_layout</CODE> does not yet exist.
+<P>
+<LI>The <CODE>H5Pget_chunk</CODE> / <CODE>h5pget_chunk_f</CODE> 
+routine retrieves the size of chunks 
+for the raw data of a chunked layout dataset.
+The signature is as follows:
+<P>
+<I><B>C:</B></I>
+<pre>
+    int H5Pget_chunk (hid_t prp_id, int ndims, hsize_t * dims) 
+</pre>
+<P>
+<I><B>FORTRAN:</B></I>
+<pre>
+    h5pget_chunk_f (prp_id, ndims, dims, hdferr)
+
+            prp_id    IN: INTEGER(HID_T) 
+            ndims     IN: INTEGER
+            dims     OUT: INTEGER(HSIZE_T), DIMENSION(ndims) 
+            hdferr   OUT: INTEGER 
+</pre>
+<P>
+<UL>
+
+<LI>The <em>prp_id</em> parameter is the identifier of the 
+    property list to query.
+<LI>The <em>ndims</em> parameter is the size of the <em>dims</em>
+    array.
+<LI>The <em>dims</em> parameter is the array in which to store the chunk
+    dimensions.
+<LI>In C, this function returns the chunk dimensionality if successful
+    and a negative value otherwise.  
+    In FORTRAN, the return value is returned in <em>hdferr</em>: 
+    the chunked rank if successful and -1 otherwise.
+</UL>
+<P>
+<LI>The <CODE>H5Pclose</CODE> / <CODE>h5pclose_f</CODE> routine
+ terminates access to a property list.
+    The signature is as follows:
+<P>
+<I><B>C:</B></I>
+<pre>
+    herr_t H5Pclose (hid_t prp_id) 
+</pre>
+<P>
+<I><B>FORTRAN:</B></I>
+<pre>
+    h5pclose_f (prp_id, hdferr) 
+
+            prp_id    IN: INTEGER(HID_T) 
+            hdferr   OUT: INTEGER 
+</pre>
+<P>
+<ul>
+<li>The <em>prp_id</em> parameter is the identifier of the property list 
+    to terminate access to.
+</ul>
+</UL>
+
+
+<!--
+<A NAME="fc">
+<H3><U>File Contents</U></H3>
+-->
+
+
+
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/fileorg.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/fileorg.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/fileorg.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,102 @@
+<HTML><HEAD>
+<TITLE>HDF5 File Organization
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">HDF5 File Organization</FONT>
+</BIG></BIG></BIG></H1>
+
+
+<hr noshade size=1>
+
+<BODY>
+<P>
+An HDF5 file is a container for storing a variety of scientific data 
+is composed of two primary types of objects: groups and datasets.
+<UL>
+  <LI><B>HDF5 group:</B> a grouping structure containing zero or more HDF5 
+      objects, together with supporting metadata
+
+  <LI><B>HDF5 dataset:</B> a multidimensional array of data elements, together 
+      with supporting metadata
+</UL>
+Any HDF5 group or dataset may have an associated attribute list. An <B>HDF5 
+attribute</B> is a user-defined HDF5 structure that provides extra information
+about an HDF5 object.
+<P>
+Working with groups and datasets is similar in many
+ways to working with directories and files in UNIX. As with UNIX directories
+and files, an HDF5 object in an HDF5 file is often referred to by its
+<B>full path name</B> (also called an <B>absolute path name</B>).
+<UL>
+    <CODE>/</CODE> signifies the root group.<BR> 
+    <CODE>/foo</CODE> signifies a member of the root group called <code>foo</code>.
+<BR>
+    <CODE>/foo/zoo</CODE> signifies a member of the group <code>foo</code>, which in 
+    turn is a member of the root group. 
+</UL>
+<P>
+<!--
+In this tutorial, we consider:
+<UL>
+<LI>how to create a file 
+<LI>how to create a group
+<LI>how to create/read/write datasets
+<LI>how to create an attribute 
+<LI>how to create a grouping structure
+<LI>how to create datasets in groups 
+</UL>
+The rest of the tutorial is organized as follows:
+<UL>
+ <LI> Section 3 describes the HDF5 APIs.
+ <LI> Section 4 shows how to create an HDF5 file.
+ <LI> Section 5 shows how to create a dataset.
+ <LI> Section 6 shows how to read from and write to a dataset.
+ <LI> Section 7 shows how to create an attribute.
+ <LI> Section 8 shows how to create a group.
+ <LI> Section 9 discusses HDF5 names and shows how to create groups using absolute and relative names.
+ <LI> Section 10 shows how to create datasets in groups.
+</UL>
+
+Each section contains step by step instructions and an example. After the
+example, an HDF5 tool is used to examine the file contents. A formal definition
+of HDF5 objects in Backus-Naur Form is given last.
+
+The tutorial ends with a glossary and references.
+-->
+<P>
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/footer-ncsalogo.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/footer-ncsalogo.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/glossary.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/glossary.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/glossary.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,261 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Glossary
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Glossary</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<DL>
+<DT><B>ATTRIBUTE</B>   
+<DD>An HDF5 attribute is a small dataset that can be used to describe
+            the nature and/or the intended usage of the object it is attached 
+            to.
+
+<P>
+<DT><B>BOOT BLOCK</B>
+<DD>HDF5 files are composed of a "boot block" describing information required to portably access files on multiple platforms, followed by information
+about the groups in a file and the datasets in the file. The boot block contains information about the size of offsets and lengths of objects, the
+number of entries in symbol tables (used to store groups) and additional version information for the file. 
+<P>
+<DT><B>DATASET</B>     
+<DD>An HDF5 dataset is a multi-dimensional array of data elements, 
+            together with supporting metadata. 
+
+<P>
+<DT><B>DATASPACE</B>   
+<DD>An HDF5 dataspace is an object that describes the dimensionality
+            of the data array. A dataspace is either a regular N-dimensional
+            array of data points, called a simple dataspace, or a more 
+            general collection of data points organized in another 
+            manner, called a complex dataspace.
+
+<P>
+<DT><B>DATATYPE</B>    
+<DD>An HDF5 Datatype is an object that describes the type of the 
+            element in an HDF5 multi-dimensional array. There are two 
+            categories of datatypes: atomic and compound data types. An 
+            atomic type is a type which cannot be decomposed into smaller 
+            units at the API level. A compound is a collection of one or 
+            more atomic types or small arrays of such types.
+
+<P>
+<DT><B>DATASET CREATION PROPERTY LIST</B>
+<DD>        The Dataset Creation Property List contains information on how 
+            raw data is organized on disk and how the raw data is compressed.
+            The dataset API partitions these terms by layout, compression,
+            and external storage:
+<UL>
+<B> Layout:</B>
+<UL>
+<LI> H5D_COMPACT: Data is small and can be stored in object header (not
+                  implemented yet).  This eliminates disk seek/read requests.
+<LI> H5D_CONTIGUOUS: (<B>default</B>) The data is large, non-extendible, 
+                     non-compressible, non-sparse, and can be stored 
+                     externally.
+<LI> H5D_CHUNKED:  The data is large and can be extended in any dimension.
+                   It is partitioned into chunks so each chunk is the same
+                   logical size. 
+</UL>
+<B>Compression:</B>  (gzip compression)<BR>
+<B>External Storage Properties:</B>  The data must be contiguous to be stored 
+                              externally. It allows you to store the data
+                              in one or more non-HDF5 files.
+
+</UL>
+
+<P>
+<DT><B>DATA TRANSFER PROPERTY LIST</B>
+<DD>        The data transfer property list is used to control various aspects 
+            of the I/O, such as caching hints or collective I/O information.
+<P>
+<DT><B>DDL</B>         
+<DD>DDL is a Data Description Language that describes HDF5 objects 
+            in Backus-Naur Form.
+ 
+<P>
+
+<DT><B>FILE ACCESS MODES</B>
+<DD>The file access modes determine whether an existing file will be 
+overwritten.  All newly created files are opened for both reading and
+writing.  Possible values are:
+<PRE>
+  H5F_ACC_RDWR:   Allow read and write access to file. 
+  H5F_ACC_RDONLY: Allow read-only access to file. 
+  H5F_ACC_TRUNC:  Truncate file, if it already exists, erasing all data 
+                  previously stored in the file. 
+  H5F_ACC_EXCL:   Fail if file already exists. 
+  H5F_ACC_DEBUG:  Print debug information. 
+  H5P_DEFAULT:    Apply default file access and creation properties. 
+</PRE>
+<P>
+<DT><B>FILE ACCESS PROPERTY LIST</B>
+   <DD>   File access property lists are used to control different methods 
+            of performing I/O on files:
+<UL>
+<B>Unbuffered I/O:</B> Local permanent files can be accessed with the functions 
+   described in Section 2 of the Posix manual, namely open(), lseek(), read(), 
+   write(), and close(). <BR>
+<B>Buffered I/O:</B> Local permanent files can be accessed with the functions 
+   declared in the stdio.h header file, namely fopen(), fseek(), fread(), 
+   fwrite(), and fclose().<BR>
+<B>Memory I/O:</B> Local temporary files can be created and accessed directly from 
+   memory without ever creating permanent storage. The library uses malloc() 
+   and free() to create storage space for the file<BR>
+<B>Parallel Files using MPI I/O:</B> This driver allows parallel access to a file 
+   through the MPI I/O library. The parameters which can be modified are the 
+   MPI communicator, the info object, and the access mode. The communicator 
+   and info object are saved and then passed to MPI_File_open() during file
+   creation or open. The access_mode controls the kind of parallel access the 
+   application intends.<BR> 
+<B>Data Alignment:</B> Sometimes file access is faster if certain things are aligned 
+   on file blocks. This can be controlled by setting alignment properties of 
+   a file access property list with the H5Pset_alignment() function. 
+</UL>
+<P>
+<DT><B>FILE CREATION PROPERTY LIST</B>
+<DD>     The file creation property list is used to control the file 
+            metadata. The parameters that can be modified are:
+<UL>
+ <B>User-Block Size:</B> The "user-block" is a fixed length block of data located 
+    at the beginning of the file which is ignored by the HDF5 library and may 
+    be used to store any data information found to be useful to applications. 
+<BR>
+<B> Offset and Length Sizes:</B> The number of bytes used to store the offset and 
+    length of objects in the HDF5 file can be controlled with this parameter. 
+ Symbol Table Parameters: The size of symbol table B-trees can be controlled 
+    by setting the 1/2 rank and 1/2 node size parameters of the B-tree. 
+<BR>
+<B> Indexed Storage Parameters:</B> The size of indexed storage B-trees can be 
+    controlled by setting the 1/2 rank and 1/2 node size parameters of the 
+    B-tree.
+</UL>
+<P>
+
+<DT><B>GROUP</B> 
+<DD>A Group is a structure containing zero or more HDF5 objects, 
+            together with supporting metadata. The two primary HDF5 objects 
+            are datasets and groups.
+<P>
+
+<DT><B>HDF5</B> 
+<DD>HDF5 is an abbreviation for Hierarchical Data Format Version 5. 
+            This file format is intended to make it easy to write and read 
+            scientific data
+<P>
+<UL>
+            <LI> by including the information needed to understand the data 
+              within the file
+<P>
+            <LI> by providing a library of C, FORTRAN, and other language 
+              programs that reduce the work required to provide efficient 
+              writing and reading - even with parallel IO
+</UL>
+<P>
+
+<DT><B>HDF5 FILE</B>
+<DD>An HDF5 file is a container for storing grouped collections 
+            of multi-dimensional arrays containing scientific data. 
+<P>
+
+<DT><B>H5DUMP</B> 
+<DD>h5dump is an HDF5 tool that describes the HDF5 file contents in DDL.
+<P>
+
+<DT><B>HYPERSLAB</B>
+<DD>
+A hyperslab is a portion of a dataset. A hyperslab selection can be a 
+logically contiguous collection of points in a dataspace, or it
+can be a regular pattern of points or blocks in a dataspace. 
+<P>
+<DT><B>MOUNTING FILES</B>
+<DD>
+HDF5 allows you to combine two or more HDF5 files in a manner similar
+to mounting files in UNIX.  The group structure and metadata
+from one file appear as though they exist in another file. 
+<P>
+
+<DT><B>NAMES</B> 
+<DD>HDF5 object names are a slash-separated list of components.  A name 
+            which begins with a slash is an absolute name which is accessed 
+            beginning with the root group of the file while all other relative 
+            names are accessed beginning with the specified group.
+<P>
+<DT><B>PARALLEL I/O (HDF5)</B>
+<DD>The parallel I/O version of HDF5 supports parallel file access using 
+MPI (Message Passing Interface).  
+<P> 
+
+<DT><B>REFERENCE</B>
+<DD>
+<B>OBJECT REFERENCE:</B><BR>
+    A reference to an entire object in the current HDF5 file.  
+    <P>
+    An object
+    reference points to an entire object in the current HDF5 file by storing 
+    the relative file address (OID) of the object header for the object
+    pointed to.  The relative file address of an object header is constant
+    for the life of the object.  An object reference is of a fixed size in
+    the file.
+<P>
+<B>DATASET REGION REFERENCE:</B><BR>
+    Reference to a specific dataset region.
+    <P>  
+    A dataset region reference points to a region of a dataset in the 
+    current HDF5 file by storing the OID of the dataset and the global
+    heap offset of the region referenced.  The region referenced is
+    located by retrieving the coordinates of the areas in the region
+    from the global heap.  A dataset region reference is of a variable 
+    size in the file.
+<P>
+<DT><B>THREADSAFE (HDF5)</B>
+<DD>A "thread-safe" version of HDF-5 (TSHDF5) is one that can be called from any thread of a multi-threaded program. Any calls to HDF
+can be made in any order, and each individual HDF call will perform correctly. A calling program does not have to explicitly lock the HDF
+library in order to do I/O. Applications programmers may assume that the TSHDF5 guarantees the following: 
+<UL>
+   <LI>   the HDF-5 library does not create or destroy threads. 
+   <LI>   the HDF-5 library uses modest amounts of per-thread private memory. 
+   <LI>   the HDF-5 library only locks/unlocks it's own locks (no locks are passed in or returned from HDF), and the internal locking is guaranteed to be deadlock free. 
+</UL>
+<P>
+These properties mean that the TSHDF5 library will not interfere with an application's use of threads. A TSHDF5 library is the same
+library as regular HDF-5 library, with additional code to synchronize access to the HDF-5 library's internal data structures. 
+
+</DL>
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/img001.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/img001.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/img002.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/img002.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/img003.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/img003.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/img004.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/img004.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/img005.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/Tutor/img005.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/index.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/index.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/index.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,29 @@
+<html>
+<head>
+<title>HDF5 Tutorial</title>
+</head>
+
+
+<frameset cols="110,*" border=0>
+  <frame src="Contents.html" scrolling="auto" name="BUTTONS">
+  <frame src="title.html" scrolling="auto" name="CONTENT">
+</frameset>
+
+<noframes>
+  <b>HDF5 Tutorial</b>
+  <p>
+  If you are reading this message, your browser is not capable of
+  interpreting HTML frames.  A no-frames version of the tutorial
+  is available by viewing the file <a href="title.html">title.html</a>.
+  <p>
+  If you owuld like to upgrade to a frames-capable browser, 
+  we suggest upgrading to the most recent version of 
+  Nestscape Communicator, Microsoft Internet Explorer, or 
+  an equivalent browser.
+  <p>
+  In the meantime, you can view this tutorial by starting with the 
+  file <a href="title.html">title.html</a>.
+</noframes>
+
+
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/intro.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/intro.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/intro.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,92 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Introduction 
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<h1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Introduction</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+Welcome to the HDF5 Tutorial provided by the HDF User Support Group.
+<P>
+HDF5 is a file format and library for storing scientific data. 
+It was designed and implemented 
+    to meet growing and ever-changing scientific data-storage 
+      and data-handling needs,
+    to take advantage of the power and features of today's
+      computing systems, and
+    to address the deficiencies of HDF4.x. 
+HDF5 has a powerful and flexible data model, 
+    supports files larger than 2 GB (the limit of HDF4.x files), and
+    supports parallel I/O.
+Thread-safety is designed and is to be implemented in the near future.
+For a short overview of the HDF5 data model, library, and tools, see
+the slide presentation at the following URL:
+<PRE>
+   <A HREF="http://hdf.ncsa.uiuc.edu/HDF5/papers/HDF5_overview/index.htm">http://hdf.ncsa.uiuc.edu/HDF5/papers/HDF5_overview/index.htm</A>
+</PRE>
+This tutorial covers the basic HDF5 data objects and file structure, 
+the HDF5 programming model, and the API functions necessary for creating and 
+modifying data objects. It also introduces the available HDF5 tools for accessing 
+HDF5 files.
+<P>
+The examples used in this tutorial, along with a Makefile to compile them,
+can be found in <A HREF="./examples/">./examples/</A>. You can also download
+a <A HREF="http://hdf.ncsa.uiuc.edu/training/other-ex5/examples.tar">tar 
+file</A> with the examples and Makefile.  
+To use the Makefile, you may have to edit it and update the 
+compiler and compiler options, as well as the path for the HDF5
+binary distribution. 
+The Java examples can be found in
+a subdirectory of the ./examples/ directory called java/.  The java/
+directory contains a Makefile and shell scripts for running the java
+programs.
+<P>
+Please check the <A HREF="references.html">References</A> for pointers to
+other examples of HDF5 Programs.
+<P> 
+We hope that the step-by-step examples and instructions will give you a quick
+start with HDF5.
+<P>
+Please send your comments and suggestions to  hdfhelp at ncsa.uiuc.edu.
+
+
+</BODY>
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/iterate.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/iterate.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/iterate.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,290 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Iterating over Group Members 
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Iterating over Group Members</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+    <LI><A HREF="#def">How to Iterate over Group Members Using C </A>
+    <LI><A HREF="#deff">How to Iterate over Group Members Using FORTRAN</A>
+    <LI>Programming Example 
+<UL>
+      <LI> <A HREF="#desc">Description</A> 
+      <LI> <A HREF="#remc">Remarks for C Example</A> 
+      <LI> <A HREF="#remf">Remarks for FORTRAN Example</A> 
+<!--
+      <LI> <A HREF="#fc">File Contents</A>
+      <LI> <A HREF="#ddl">Dataset Definition in DDL</A>
+-->
+</UL>
+</UL>
+<HR>
+<A NAME="def">
+<H2>How to Iterate over Group Members Using C</H2>
+This section discusses how to find names and object types of HDF5 group 
+members using C.
+<P>
+The HDF5 Group interface includes the <CODE>H5Giterate</CODE> function,
+which iterates over the group members.  
+<P>
+Operations on each group member can be performed during the iteration process
+by passing the operator function and its data to the iterator as parameters. 
+There are no restrictions on what kind of operations can be performed on 
+group members during the iteration procedure.
+<P>
+The following steps are involved:
+<OL>
+
+<LI> Write an operator function which will be used during the iteration process.
+     The HDF5 library defines the operator function signature and return values.
+<LI> Open the group to iterate through.
+<LI> Iterate through the group or just a few members of the group.
+</OL>
+<A NAME="deff">
+<H2>How to Iterate Over Group Members using FORTRAN</H2>
+There is no FORTRAN call to iterate over group members. 
+Instead, this functionality is provided by two FORTRAN calls: 
+<ul>
+  <li><CODE>hgn_members_f</CODE> returns the number of group members.
+  <li><CODE>h5gget_obj_info_idx_f</CODE> returns the name and type of the 
+      group member, which is identified by its index.
+</ul>
+<P>
+<H2> Programming Example</H2>
+<A NAME="desc">
+<H3><U>Description</U></H3>      
+In this example we iterate through the members of the root group. 
+<UL>
+[ <A HREF="examples/h5_iterate.c">C example</A> ]  
+    - <code>h5_iterate.c</code><BR>
+[ <A HREF="examples/grpit.f90">FORTRAN example</A> ]  
+    - <code>grpit.f90</code>
+</UL>
+<B>NOTE:</B> To download a tar file of the examples, including a Makefile,
+please go to the <A HREF="references.html">References</A> page.
+<P>
+Following is the output from these examples:
+<P>
+<I><U>Output from C Example</U></I>
+<PRE>
+  Objects in the root group are:
+
+  Object with name Dataset1 is a dataset 
+  Object with name Datatype1 is a named datatype 
+  Object with name Group1 is a group 
+</PRE>
+<I><U>Output from FORTRAN Example</U></I>
+<PRE>
+ Number of root group member is 1
+ MyGroup             1
+ Number of group MyGroup member  is 2
+ Group_A             1
+ dset1               2
+ Number of group MyGroup/Group_A member  is 1
+ dset2               2
+</PRE>
+<A NAME="remc">
+<H3><U>Remarks for C Example</U></H3>
+<P>
+<UL>
+<LI> The operator function in this example is called <I>file_info</I>.
+   The signature of the operator function is as follows:
+<PRE>
+    herr_t *(H5G_operator_t) (hid group_id, const char* name, 
+             void *operator_data)
+</PRE>
+<UL>
+      <LI>The <em>group_id</em> parameter is a group identifier for the 
+          group being iterated over. 
+          It is passed to the operator by the iterator function, 
+          <CODE>H5Giterate</CODE>.
+<P>
+      <LI>The <em>name</em> parameter is the name of the current object. 
+        The name is passed to the operator function by the HDF5 library.
+<P>
+      <LI> The <em>operator_data</em> parameter is the operator data. 
+        It is passed to and from
+        the operator by the iterator, <CODE>H5Giterate</CODE>.
+</UL>
+<P>
+       The operator function in this example simply prints the name and type 
+       of the current object and then exits.
+       This information can also be used to open the object and perform 
+       different operations or queries. For example a named datatype object's
+       name can be used to open the datatype and query its properties. 
+<P>
+  The operator return value defines the behavior of the iterator.
+  <UL>
+<P>
+      <LI>A zero return value causes the iterator to continue, returning
+        zero when all group members have been processed.
+<P>
+      <LI>A positive value causes the iterator to immediately return that
+        value, indicating a short-circuit success. The iterator can be restarted
+        at the next group member.
+<P>
+      <LI>A negative value causes the iterator to immediately return that value,
+       indicating failure. The iterator can be restarted at the next group 
+       member. 
+  </UL>
+<P>
+   In this example the operator function returns 0, which causes the iterator
+   to continue and go through all group members.
+<P>
+<LI>The function <CODE>H5Gget_objinfo</CODE> is used to determine the type of the object. 
+   It also returns the modification time, number of hard links, and some
+   other information.
+<P>
+   The signature of this function is as follows:
+<PRE>
+     herr_t H5Gget_objinfo (hid_t loc_id, const char * name, 
+                            hbool_t follow_link, 
+                            H5G_stat_t *statbuf)
+</PRE>
+<UL>
+       <LI>The <em>loc_id</em> and <em>name</em> arguments 
+           specify the object by its location and name.
+         This example uses the group identifier and name relative to the group
+         to specify the object. 
+<P>
+       <LI>The <em>follow_link</em> argument is a flag which indicates 
+           whether a symbolic link should be followed. A zero value indicates 
+            that information should be returned for the link itself, but not 
+            about the object it points to.
+<P>
+            The root group in this example does not have objects that are
+            links, so this flag is not important for our example.
+<P>
+       <LI>The <em>statbuf</em> argument is the buffer in which to return 
+           information.
+         Type information is returned into the field <em>type</em> of the 
+         <CODE>H5G_stat_t</CODE> data structure (<code>statbuf.type</code>). 
+         Valid values are 
+         <CODE>H5G_GROUP</CODE>, <CODE>H5G_DATASET</CODE>, 
+         <CODE>H5G_TYPE</CODE>, and <CODE>H5G_LINK</CODE>.
+</UL>
+<P>
+<LI> The <CODE>H5Giterate</CODE> function has the following signature:
+<PRE>
+    int H5Giterate (hid_t loc_id, const char *name , int *idx,
+                    H5G_operator_t operator, void * operator_data) 
+</PRE>
+<UL>
+   <LI> The <em>loc_id</em> parameter is the group identifier for the 
+        group being iterated over.
+   <LI> The <em>name</em> parameter is the group name.
+   <LI> The <em>idx</em> parameter is an index specifying that iteration 
+        begins with the <em>idx</em>-th object in the group.
+        Upon the function's return, the index of the next element 
+        to be processed is returned in <I>idx</I>. In our example, NULL is 
+        used to start at the first group member. Since no stopping point 
+        is returned in this case, the iterator cannot be restarted if one 
+        of the calls to its operator returns a non-zero value.
+   <LI> The <em>operator</em> parameter is the operator function.
+   <LI> The <em>operator_data</em> argument is the operator data. 
+        We used NULL since no data was passed to or from the operator. 
+</UL>
+</UL>
+
+<A NAME="remf">
+<H3><U>Remarks for FORTRAN Example</U></H3>
+<P>
+<UL>
+<LI>This program creates an HDF5 file with groups in it and
+    then uses <CODE>h5gn_members_f</CODE> to get the number of members in
+    each group and <CODE>h5gget_obj_idx_f</CODE> to obtain the group member's
+    name and type.
+<P>
+<LI>The number of members in a group are obtained with the
+<CODE>h5gn_members_f</CODE> call:
+<PRE>
+    h5gn_members_f (loc_id, name, nmembers, hdferr)
+     
+            loc_id    IN: INTEGER (HID_T) 
+            name      IN: CHARACTER (LEN=*) 
+            nmembers OUT: INTEGER
+            hdferr   OUT: INTEGER 
+</PRE>
+<UL>
+   <LI>The <I>loc_id</I> parameter is the file or group identifier. 
+   <LI>The <I>name</I> parameter is the name of the group to obtain the number
+       of members in.
+   <LI>The number of members in the group is returned in <I>nmembers</I>.
+   <LI>The <I>hdferr</I> parameter contains the return code from the
+       call: 0 if successful and -1 otherwise.
+</UL>
+<P>
+<LI>The name of each group and its type are obtained with the
+<CODE>h5gget_obj_info_idx_f</CODE> call:
+<PRE>
+    h5gget_obj_info_idx_f (loc_id, name, idx, &
+                           obj_name, obj_type, hdferr)
+
+            loc_id     IN: INTEGER (HID_T)
+            name       IN: CHARACTER (LEN=*)
+            idx        IN: INTEGER
+            obj_name  OUT: CHARACTER (LEN=*)
+            obj_type  OUT: INTEGER
+            hdferr    OUT: INTEGER
+ </PRE>
+<UL>
+<LI>The <I>loc_id</I> parameter is the file or group identifier.
+<LI>The <I>name</I> parameter is the name of the group.
+<LI>The <I>idx</I> parameter is the index of the member object.
+<LI>The <I>obj_name</I> parameter is the name of the object that gets returned.
+<LI>The <I>obj_type</I> parameter is the object type that gets returned.
+    Valid values are as follows:
+<PRE>
+        H5G_LINK_F 
+        H5G_GROUP_F 
+        H5G_DATASET_F 
+        H5G_TYPE_F 
+</PRE>
+<LI>The <I>hdferr</I> parameter contains the return code from the
+       call: 0 if successful and -1 otherwise.
+</UL>
+</UL>
+
+
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/mount.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/mount.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/mount.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,255 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Mounting Files 
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Mounting Files</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+    <LI> <A HREF="#def">Mounting Files</A>
+    <LI> Programming Example 
+    <UL>
+      <LI> <A HREF="#desc">Description</A> 
+      <LI> <A HREF="#rem">Remarks</A> 
+<!--
+      <LI> <A HREF="#fc">File Contents</A>
+-->
+    </UL>
+</UL>
+<HR>
+<A NAME="def">
+<H2>Mounting Files</H2>
+
+HDF5 allows you to combine two or more HDF5 files in memory 
+in a manner similar to mounting files in UNIX. 
+The group structure and metadata from one file appear as though
+they exist in another file. The following steps are involved:
+<OL>
+<LI>Open the files.
+
+<LI>Choose the <strong>mount point</strong> in the first file 
+    (the parent file). The mount point in 
+    HDF5 is a group, which CANNOT be the root group.
+
+<LI>Use the HDF5 routine <CODE>H5Fmount</CODE> / <CODE>h5fmount_f</CODE> 
+    to mount the second file (the child file) in the first file.
+
+<LI>Work with the objects in the second file as if they were members of 
+    the mount point group in the first file.  The previous contents of
+    the mount point group are temporarily hidden.
+
+<LI>Unmount the second file using <CODE>H5Funmount</CODE> / 
+    <CODE>h5funmount_f</CODE> when the work is done.
+</OL>
+
+<H2> Programming Example</H2>
+<A NAME="desc">
+<H3><U>Description</U></H3>      
+
+In the following example, we create one file containing a group and 
+another file containing a dataset. 
+Mounting is used to access the dataset from the second 
+file as a member of a group in the first file. 
+The following figures illustrate this concept.
+<PRE>
+
+             FILE1                                   FILE2
+  
+      --------------------                   --------------------
+      !                  !                   !                  !
+      !      /           !                   !       /          !
+      !       |          !                   !        |         !
+      !       |          !                   !        |         !
+      !       V          !                   !        V         !
+      !     --------     !                   !     ----------   !
+      !     ! Group !    !                   !     ! Dataset!   !
+      !     ---------    !                   !     ----------   !
+      !------------------!                   !------------------! 
+</PRE>
+After mounting <code>FILE2</code> under the group in <code>FILE1</code>, 
+the parent file has the following structure:
+<PRE>
+ 
+                                FILE1                                 
+  
+                         --------------------                   
+                         !                  !                  
+                         !      /           !               
+                         !       |          !            
+                         !       |          !         
+                         !       V          !    
+                         !     --------     !              
+                         !     ! Group !    !            
+                         !     ---------    !           
+                         !         |        !
+                         !         |        !
+                         !         V        !
+                         !    -----------   !
+                         !    ! Dataset !   !
+                         !    !----------   !
+                         !                  !
+                         !------------------!                    
+
+</PRE>
+[ <A HREF="examples/h5_mount.c">C program</A> ] 
+    - <code>h5_mount.c</code><BR>
+[ <A HREF="examples/mountexample.f90">FORTRAN program</A> ] 
+    - <code>mountexample.f90</code>
+<P>
+
+<B>NOTE:</B> To download a tar file of the examples, including a Makefile,
+please go to the <A HREF="references.html">References</A> page.
+
+<A NAME="rem">
+<H3><U>Remarks</U></H3>
+<UL>
+<LI> The first part of the program creates a group in one file and creates 
+     and writes a dataset to another file. 
+<P>
+<LI> Both files are reopened and the second file is mounted in the first 
+     using <CODE>H5Fmount</CODE> / <CODE>h5fmount_f</CODE>.  
+     If no objects will be modified, the
+     files can be opened with <CODE>H5F_ACC_RDONLY</CODE> 
+     (<CODE>H5F_ACC_RDONLY_F</CODE> in FORTRAN).
+     If the data is to be modified, the files should be opened with
+     <CODE>H5F_ACC_RDWR</CODE> (<CODE>H5F_ACC_RDWR_F</CODE> in FORTRAN).
+<P>
+<I><B>C:</B></I>
+<pre>
+    herr_t H5Fmount (hid_t loc_id, const char *dsetname, 
+                     hid_t file_id, hid_t access_prp)  
+</pre>
+<P>
+<I><B>FORTRAN:</B></I>
+<pre>
+    h5fmount_f (loc_id, dsetname, file_id, hdferr, access_prp)
+
+            loc_id       IN: INTEGER (HID_T) 
+            dsetname     IN: CHARACTER (LEN=*)
+            file_id      IN:  INTEGER (HID_T)
+            hdferr      OUT: INTEGER
+            access_prp   IN: INTEGER (HID_T), OPTIONAL
+                         (Default value: H5P_DEFAULT_F)  
+</pre>
+<P>
+<UL>
+   <LI> The <em>loc_id</em> and <em>dsetname</em> arguments 
+        specify the location of the mount point.
+        In this example, the mount point is a group <code>/G</code> in the 
+        specified file. Since the group <code>/G</code> is in the root 
+        group of the first file, one can also use just <code>G</code> to 
+        identify it. 
+<P>
+        Below is a description of another scenario:
+        <p>
+        Suppose the group <code>G</code> were a member of 
+        the group <code>H</code> in the first file.
+        Then the mount point <code>G</code> can be specified in 
+        two different ways:
+<P>
+<UL>
+          <LI> <em>loc_id</em> is the file identifier for the first file.<BR>
+               <em>dsetname</em> is <code>H/G</code>.      
+<P>
+          <LI> <em>loc_id</em> is the identifier for the group <code>H</code>.<BR> 
+               <em>dsetname</em> is <code>G</code>.  
+</UL>
+   <P>  
+    <LI> The <em>file_id</em> argument is the identifier for the file 
+         which will be mounted.
+         Only one file can be mounted per mount point.
+<P>
+    <LI> The <I>access_prp</I> argument is the identifier for the property list
+         to be used.  Currently, only the default property list, 
+         <CODE>H5P_DEFAULT</CODE>, can be used in C.  
+         In FORTRAN, this argument can be omitted or
+         <CODE>H5P_DEFAULT_F</CODE> can be used.
+<P>
+    <LI> The C function <CODE>H5Fmount</CODE> returns a non-negative
+         value if successful and a negative value otherwise.  
+         With the FORTRAN routine, <CODE>h5fmount_f</CODE>, 
+         the return value of the call is returned in <em>hdferr</em>: 
+         0 if successful and -1 otherwise. 
+</UL>
+<P>
+<LI>In this example, we only read data from the dataset <code>D</code>. 
+    One can also modify data. 
+    If the dataset is modified while the file is mounted, it is
+    modified in the original file after the file is unmounted.
+<P>
+<LI> The file is unmounted with <CODE>H5Funmount</CODE> / 
+<CODE>h5funmount_f</CODE>:
+<P>
+<I><B>C:</B></I>
+<pre>
+    herr_t H5Funmount (hid_t loc_id, const char *dsetname)
+</pre>
+<P>
+<I><B>FORTRAN:</B></I>
+<pre>
+    h5funmount_f (loc_id, dsetname, hdferr)
+
+            loc_id     IN: INTEGER (HID_T)
+            dsetname   IN: CHARACTER (LEN=*)
+            hdferr    OUT: INTEGER
+</pre>
+<P>
+<ul>
+    <li>The <I>loc_id</I> and <I>dsetname</I> arguments specify the location 
+        of the mount point.
+        In our example <I>loc_id</I> is the first file's file identifier 
+        and <I>dsetname</I> is the name of group <code>/G</code>. 
+</ul>
+<P> 
+<li>Note that <CODE>H5Funmount</CODE> / <CODE>h5funmount_f</CODE> 
+    does not close files.  Files are closed with the respective calls to 
+    the <CODE>H5Fclose</CODE> / <CODE>h5fclose_f</CODE> function. 
+<P> 
+<li>Closing the parent file automatically unmounts the child file.
+<P> 
+<LI>The <code>h5dump</code> utility cannot display files in memory.
+    Therefore, no output of <code>FILE1</code> after <code>FILE2</code>
+    was mounted is provided. 
+</UL>       
+</UL>
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/property.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/property.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/property.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,167 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Property Lists
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Property Lists</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<!--
+<H2>Contents:</H2>
+<UL>
+    <LI> <A HREF="#def">Definition of Property Lists</A>
+</UL>
+<HR>
+<A NAME="def">
+-->
+<P>
+The property list interface provides a mechanism for adding functionality
+to HDF5 calls, without increasing the number of arguments used
+for a given call.
+<P>
+A property list is a collection of values which can
+be passed to various HDF5 functions to control features that
+are typically unimportant or whose default values are usually used
+(by specifying <code>H5P_DEFAULT</code> / <CODE>H5P_DEFAULT_F</CODE>).
+<P>
+It supports unusual cases when:
+
+<UL>
+<LI><A HREF="#cf">Creating Files</A>
+<LI><A HREF="#fa">Accessing Files</A> 
+<LI><A HREF="#cd">Creating Datasets</A>
+<LI><A HREF="#rdwt">Reading or Writing Data</A>
+</UL>
+
+
+<A NAME="cf">
+<H3>Creating Files</H3>
+The File Creation property list, H5P_FILE_CREATE,  applies to H5Fcreate() 
+only and is used to control the file metadata which is maintained in the
+super block of the file.  The parameters that can be modified are:
+user-block size, offset and length sizes, symbol table parameters,
+and index storage parameters.
+<P>
+The following example shows how to create a file with 64-bit object
+offsets and lengths:
+<PRE>
+        hid_t create_plist;
+        hid_t file_id;
+
+        create_plist = H5Pcreate(H5P_FILE_CREATE);
+        H5Pset_sizes(create_plist, 8, 8);
+
+        file_id = H5Fcreate("test.h5", H5F_ACC_TRUNC,
+                             create_plist, H5P_DEFAULT);
+        .
+        .
+        .
+        H5Fclose(file_id);
+</PRE>    
+
+<A NAME="fa">
+<H3>Accessing Files</H3>
+The File Access property list, H5P_FILE_ACCESS, applies to H5Fcreate() and 
+H5Fopen() and is used to control different methods of
+performing I/O on files.  The different types of I/O are:  unbuffered I/O,
+buffered I/O, memory I/O, parallel files using MPI I/O, and data alignment.
+<P>
+Following is an example of using the H5P_FILE_ACCESS property list for creating
+HDF5 files with the metadata and data split into different files:
+<BR> &nbsp; &nbsp; &nbsp;
+[ <A HREF="examples/h5split.c">C program</A> ] 
+    - <code>h5split.c</code><BR>
+<P>
+
+<A NAME="cd">
+<h3>Creating Datasets</H3> 
+The Dataset Creation property list, H5P_DATASET_CREATE, applies to 
+H5Dcreate() and controls information on how raw data 
+is organized on disk and how the raw data is compressed. The dataset API 
+partitions these terms by layout, compression, and external storage: 
+<P>
+<UL>
+   <LI>Layout: 
+<UL>
+<LI>H5D_COMPACT: Data is small and can be stored in object header (<I>not 
+    implemented yet</I>). This eliminates disk seek/read requests. 
+<P>
+<LI>H5D_CONTIGUOUS: (default) The data is large, non-extendible, 
+non-compressible, non-sparse, and can be stored externally. 
+<P>
+<LI>H5D_CHUNKED: The data is large and can be extended in any dimension. 
+It is partitioned into chunks so each chunk is the same logical size. 
+Following is an example that uses the H5P_DATASET_CREATE property list to create
+a chunked and extendible dataset:
+<BR> &nbsp; &nbsp; &nbsp;
+[ <A HREF="examples/h5_extend.c">C program</A> ] 
+    - <code>h5_extend.c</code><BR>
+<P>
+</UL>
+<LI>Compression: (gzip compression)
+<LI>External Storage Properties: The data must be contiguous to be stored 
+    externally. It allows you to store the data in one or more non-HDF5 files. 
+Following is an example of using the H5P_DATASET_CREATE property list to
+create a dataset in an external file:
+<BR> &nbsp; &nbsp; &nbsp;
+[ <A HREF="examples/h5_crtextd.c">C program</A> ] 
+    - <code>h5_crtextd.c</code><BR>
+<P>
+</UL>
+</UL>
+<A NAME="rdwt">
+<H3>Reading or Writing Data</H3>
+
+The Data Transfer property list, H5P_DATASET_XFER, is used to control
+various aspects of I/O, such as caching hints or collective I/O information.
+<P>
+The following code sets the maximum size for the type conversion buffer
+and background buffer:
+<PRE>
+   plist_xfer = H5Pcreate (H5P_DATASET_XFER);
+   H5Pset_buffer(plist_xfer, (hsize_t)NX*NY*NZ, NULL, NULL);
+   status = H5Dread (dataset, H5T_NATIVE_UCHAR, memspace, dataspace,
+                      plist_xfer);
+</PRE>
+<!--
+See:<BR>
+ [ <A HREF="examples/h5_xfer.c">C program</A> ]
+    - <code> h5_xfer.c</code><BR>
+-->
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/questions.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/questions.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/questions.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,159 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Introductory Topics Quiz
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Introductory Topics Quiz</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+
+<h3>Section 2: HDF File Organization</h3>
+
+<ol>
+<li>Name and describe the two primary objects that can be stored in an HDF5
+   file.
+
+<p>
+<li>What is an attribute?
+
+<p>
+<li>Give the path name for an object called <code>harry</code> that is a member of a
+   group called <code>dick</code>, which, in turn, is a member of the root group.
+</ol>
+
+
+<h3>Section 3: The HDF5 API</h3>
+
+<ol>
+<li>Describe the purpose of each of the following HDF5 APIs:
+    <dir>
+    H5A, H5D, H5E, H5F, H5G, H5T, H5Z
+    </dir>
+</ol>
+
+
+<h3>Section 4: Creating an HDF5 File</h3>
+
+<ol>
+<li>What two HDF5 routines must be called to create an HDF5 file?
+
+<p>
+<li>What include file must be included in any file that uses the HDF5 library?
+
+<p>
+<li>An HDF5 file is never completely empty because as soon as it is created,
+   it automatically contains a certain primary object.  What is that object?
+</ol>
+
+
+<h3>Section 5: Creating a Dataset</h3>
+
+<ol>
+<li>Name and describe two major datatype categories.
+
+<p>
+<li>List the HDF5 atomic datatypes. Give an example of a predefined datatype.
+
+<p>
+<li>What does the dataspace describe? What are the major characteristics of 
+   the simple dataspace? 
+
+<p>
+<li>What information needs to be passed to the <code>H5Dcreate</code> 
+   function, i.e., what information is needed to describe a dataset at 
+   creation time?
+</ol>
+
+
+<h3>Section 6: Reading from and Writing to a Dataset</h3>
+
+<ol>
+<li>What are six pieces of information which need to be specified for
+   reading and writing a dataset?
+
+<p>
+<li>Why are both the memory dataspace and file dataspace needed for 
+   read/write operations, while only the memory datatype is required?
+
+<p>
+<li>What does the line 
+    <br>&nbsp;&nbsp;&nbsp;
+    <code>DATASPACE { SIMPLE (4 , 6 ) / ( 4 , 6 ) } </code> 
+    <br>in Figure 6.1 mean?
+</ol>
+
+
+<h3>Section 7: Creating an Attribute</h3>
+
+<ol>
+<li>What is an attribute?
+
+<p>
+<li>Can partial I/O operations be performed on attributes?
+</ol>
+
+
+<h3>Section 8: Creating a Group</h3>
+
+<ol>
+<li>What are the two primary objects that can be included in a group?
+</ol>
+
+
+<h3>Section 9: Creating Groups Using Absolute and Relative Names</h3>
+
+<ol>
+<li>Group names can be specified in two ways.  What are these two types 
+   of group names?
+
+<p>
+<li>You have a dataset named <code>moo</code> in the group <code>boo</code>, which is 
+   in the group <code>foo</code>, which, in turn, is in the root group.  
+   How would you specify an absolute name to access this dataset?
+</ol>
+
+
+<h3>Section 10: Creating Datasets in Groups</h3>
+
+<ol>
+<li>Describe a way to access the dataset <code>moo</code> described in the 
+previous section (Section&nbsp;9, question&nbsp;2) using a relative name.
+Describe a way to access the same dataset using an absolute name.
+</ol>
+
+</PRE>
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/rdwt.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/rdwt.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/rdwt.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,409 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Reading from and Writing to a Dataset
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Reading from and Writing to a Dataset</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+ <LI><A HREF="#rdwr">Reading from and Writing to a Dataset</A>
+ <LI> Programming Example 
+      <UL>
+       <LI> <A HREF="#desc">Description </A> 
+       <LI> <A HREF="#rem">Remarks</A> 
+       <LI> <A HREF="#fc">File Contents</A>
+      </UL>
+    </UL>
+<HR>
+<A NAME="rdwr">
+<H2>Reading from and Writing to a Dataset</h2>
+<P>
+During a dataset I/O operation, the library transfers raw data between memory
+and the file. The data in memory can have a datatype different from that of 
+the file and can also be of a different size 
+(i.e., the data in memory is a subset of the dataset elements, or vice versa).
+Therefore, to perform read or write operations, the application
+program must specify:
+<UL>
+  <LI> The dataset
+
+  <LI> The dataset's datatype in memory
+
+  <LI> The dataset's dataspace in memory
+
+  <LI> The dataset's dataspace in the file
+
+  <LI>The dataset transfer property list 
+      (The dataset transfer property list controls various aspects of the 
+      I/O operations, such as the number of processes participating in a
+      collective I/O request or hints to the library to control caching of
+      raw data. In this tutorial, we use the default dataset transfer 
+      property list.)
+
+  <LI> The data buffer
+</UL>
+
+
+<P>
+The steps to read from or write to a dataset are
+as follows:
+<OL>
+  <LI> Obtain the dataset identifier.
+  <LI> Specify the memory datatype.
+  <LI> Specify the memory dataspace.
+  <LI> Specify the file dataspace.
+  <LI> Specify the transfer properties.
+  <LI> Perform the desired operation on the dataset.
+  <LI> Close the dataset.
+  <LI> Close the dataspace, datatype, and property list if necessary.
+</OL>
+
+To read from or write to a dataset, 
+the <code>H5Dread</code>/<code>h5dread_f</code> and 
+<code>H5Dwrite</code>/<code>h5dwrite_f</code>
+routines are used. <P> 
+<I>C</I>:
+<PRE>
+   status = H5Dread (set_id, mem_type_id, mem_space_id, file_space_id,
+                     xfer_prp, buf );
+   status = H5Dwrite (set_id, mem_type_id, mem_space_id, file_space_id,
+                     xfer_prp, buf);
+
+</PRE> 
+<I>FORTRAN</I>:
+<PRE>
+   CALL h5dread_f(dset_id, mem_type_id, buf, error, &
+                     mem_space_id=mspace_id, file_space_id=fspace_id, &
+                     xfer_prp=xfer_plist_id)
+        <font face=times><i>or</i></font>
+   CALL h5dread_f(dset_id, mem_type_id, buf, error)
+
+
+   CALL h5dwrite_f(dset_id, mem_type_id, buf, error, &
+                     mem_space_id=mspace_id, file_space_id=fspace_id, &
+                     xfer_prp=xfer_plist_id)
+        <font face=times><i>or</i></font>
+   CALL h5dwrite_f(dset_id, mem_type_id, buf, error)
+</PRE>
+
+
+<P>
+<H2> Programming Example</H2>
+<A NAME="desc">
+<H3><U>Description</U></H3>      
+The following example shows how to read and write an existing dataset.
+It opens the file created in the previous example, obtains the dataset 
+identifier for the dataset <code>/dset</code>, 
+writes the dataset to the file, then reads the dataset back from 
+memory. It then closes the dataset and file. <BR>
+<UL>
+[ <A HREF="examples/h5_rdwt.c">C Example</A> ] - <code>h5_rdwt.c</code> <BR>
+[ <A HREF="examples/rwdsetexample.f90">FORTRAN Example</A> ] - <code>rwdsetexample.f90</code><BR>
+[ <A HREF="examples/java/DatasetRdWt.java">Java Example</A> ] - <code>DatasetRdWt.java</code> <BR>
+</UL>
+
+<B>NOTE:</B> To download a tar file of the examples, including a Makefile,
+please go to the <A HREF="references.html">References</A> page.
+
+</PRE>
+<A NAME="rem">
+<H3><U>Remarks</U></H3>
+<UL>
+<LI><code>H5Fopen</code>/<code>h5fopen_f</code> opens an existing file and 
+    returns a file identifier.
+<PRE>
+<I>C</I>:
+  hid_t H5Fopen (const char *name, unsigned access_mode, hid_t access_prp) 
+
+<I>FORTRAN</I>:
+  h5fopen_f (name, access_mode, file_id, hdferr, access_prp)
+
+        name         CHARACTER(LEN=*)
+        access_mode  INTEGER
+                     (Possible values: H5F_ACC_RDWR_F, H5F_ACC_RDONLY_F)
+        file_id      INTEGER(HID_T)
+        hdferr       INTEGER
+                     (Possible values: 0 on success and -1 on failure)
+        access_prp   INTEGER(HID_T), OPTIONAL
+
+</PRE>
+<UL>
+   <LI> The argument <I>name</I> is the filename.
+   <P>
+   <LI> The <I>access_mode</I> parameter is the file access mode. 
+        <code>H5F_ACC_RDWR</code> in C 
+        (<code>H5F_ACC_RDWR_F</code> in FORTRAN) 
+        allows read/write access 
+        while <code>H5F_ACC_RDONLY</code> in C 
+        (<code>H5F_ACC_RDONLY_F</code> in FORTRAN) 
+        allows read-only access.
+
+   <P>
+   <LI> The <I>access_prp</I> parameter identifies the file access property list.
+        <code>H5P_DEFAULT</code> in C and <code>H5P_DEFAULT_F</code> in FORTRAN
+        specify the default file access property list.
+        This parameter is optional in FORTRAN; if it is omitted, the default file
+        access property list is used.
+
+   <P>
+   <LI>In FORTRAN, the return code is passed back in the <I>hdferr</I>
+       parameter: 0 if successful, -1 if not.  In C, the function returns
+       the file identifier if successful, and a negative value otherwise.
+</UL>
+<P>
+<LI> <code>H5Dopen</code>/<code>h5dopen_f</code> opens an existing dataset 
+     with the name specified by <i>name</i> at the location specified by 
+     <i>loc_id</i>.
+     For FORTRAN, the return value is passed in the <I>hdferr</I> parameter:
+     0 if successful, -1 if not.  For C, the function returns the dataset
+     identifier if successful, and a negative value if not.
+ <P>
+<I>C</I>:
+<PRE>
+  hid_t H5Dopen (hid_t loc_id, const char *name) 
+</PRE>
+<I>FORTRAN</I>:
+<PRE>
+  h5dopen_f(loc_id, name, hdferr) 
+
+        loc_id   INTEGER(HID_T) 
+        name     CHARACTER(LEN=*) 
+        hdferr   INTEGER 
+                 (Possible values: 0 on success and -1 on failure)
+</PRE>
+
+<P>
+<LI><code>H5Dwrite</code>/<code>h5dwrite_f</code> writes raw data 
+   from an application buffer to the specified
+   dataset, converting from the datatype and dataspace of the dataset in
+   memory to the datatype and dataspace of the dataset in the file.
+<P>
+<I>C</I>:
+<PRE>
+  herr_t H5Dwrite (hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id, 
+                   hid_t file_space_id, hid_t xfer_prp, const void * buf) 
+</PRE>
+<I>FORTRAN</I>:
+<PRE>
+  h5dwrite_f (dset_id, mem_type_id, buf, hdferr, mem_space_id, &
+                                       file_space_id, xfer_prp)
+
+        dset_id        INTEGER(HID_T)
+        mem_type_id    INTEGER(HID_T)
+        buf(*,...*)    TYPE
+        hdferr         INTEGER 
+                       (Possible values: 0 on success and -1 on failure)
+        mem_space_id   INTEGER(HID_T), OPTIONAL
+                       (Default value: H5S_ALL_F)
+        file_space_id  INTEGER(HID_T), OPTIONAL
+                       (Default value: H5S_ALL_F)
+        xfer_prp       INTEGER(HID_T), OPTIONAL
+                       (Default value: H5P_DEFAULT_F)
+</PRE>
+<UL>
+   <LI> The <I>dset_id</I> is the dataset identifier.
+   <P>
+
+   <LI> The <I>mem_type_id</I> parameter is the identifier of the dataset's 
+        memory datatype.  <code>H5T_NATIVE_INT</code> in C 
+        (<code>H5T_NATIVE_INTEGER</code> in FORTRAN) is an integer datatype 
+        for the machine on which the library was compiled.
+   <P>
+
+  <LI> The <I>mem_space_id</I> parameter is the identifier of the dataset's 
+       memory dataspace. <code>H5S_ALL</code> in C (<code>H5S_ALL_F</code> 
+       in FORTRAN) is the default value and indicates that the whole dataspace 
+       in memory is selected for the I/O operation.
+       This parameter is optional in FORTRAN; if it is omitted, the default 
+       will be used.
+   <P>
+
+   <LI> The <I>file_space_id</I> parameter is the identifier of the 
+        dataset's file dataspace.  
+        <code>H5S_ALL</code> in C (<code>H5S_ALL_F</code> in FORTRAN)
+        is the default value and indicates that the entire dataspace of 
+        the dataset in the file is selected for the I/O operation.
+        This parameter is optional in FORTRAN; if it is omitted, the default 
+        will be used.
+   <P>
+
+   <LI> The <I>xfer_prp</I> parameter is the data transfer propery list 
+        identifier.
+        <code>H5P_DEFAULT</code> in C 
+        (<code>H5P_DEFAULT_F</code> in FORTRAN) is the default value and
+        indicates that the default data transfer property list is used. 
+        This parameter is optional in FORTRAN; if it is omitted, the default 
+        will be used.
+   <P>
+
+   <LI> The <I>buf</I> parameter is the data buffer to write.
+   <P>
+
+   <LI> In FORTRAN, the <I>hdferr</I> parameter is for the error code
+        passed back:  0 if successful, -1 if not.  In C, this function
+        returns a non-negative value if successful; otherwise it returns 
+        a negative value. 
+</UL>
+<P>
+<LI><code>H5Dread</code>/<code>h5dread_f</code> reads raw data from the 
+    specified dataset to an application buffer,
+   converting from the file datatype and dataspace to the memory datatype and
+   dataspace.
+<P>
+<I>C</I>:
+<PRE>
+  herr_t H5Dread (hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id, 
+                  hid_t file_space_id, hid_t xfer_prp, void * buf) 
+</PRE>
+<I>FORTRAN</I>:
+<PRE>
+  h5dread_f (dset_id, mem_type_id, buf, hdferr, mem_space_id, &
+                  file_space_id, xfer_prp)
+
+        dset_id        INTEGER(HID_T)
+        mem_type_id    INTEGER(HID_T)
+        buf(*,...*)    TYPE
+        hdferr         INTEGER 
+                       (Possible values: 0 on success and -1 on failure)
+        mem_space_id   INTEGER(HID_T), OPTIONAL
+                       (Default value: H5S_ALL_F)
+        file_space_id  INTEGER(HID_T), OPTIONAL
+                       (Default value: H5S_ALL_F)
+        xfer_prp       INTEGER(HID_T), OPTIONAL
+                       (Default value: H5P_DEFAULT_F)
+
+</PRE>
+
+<p>
+<UL>
+   <LI>The <I>dset_id</I> parameter is the dataset identifier. 
+   <P>
+
+   <LI>The <I>mem_type_id</I> parameter is the identifier of the dataset's 
+       memory datatype.  <code>H5T_NATIVE_INT</code> in C 
+       (<code>H5T_NATIVE_INTEGER</code> in FORTRAN) is an integer datatype 
+       for the machine on which the library was compiled.
+   <P>
+
+   <LI>The <I>mem_space_id</I> parameter is the identifier of the dataset's 
+       memory dataspace.  <code>H5S_ALL</code> in C (<code>H5S_ALL_F</code> 
+       in FORTRAN) is the default value and indicates that the whole dataspace 
+       in memory is selected for the I/O operation.
+       This parameter is optional in FORTRAN; if it is omitted, the default 
+       will be used.
+   <P>
+
+   <LI>The <I>file_space_id</I> parameter is the identifier of the 
+       dataset's file dataspace.
+       <code>H5S_ALL</code> in C (<code>H5S_ALL_F</code> in FORTRAN)
+       is the default value and indicates that the entire dataspace of 
+       the dataset in the file is selected for the I/O operation.
+       This parameter is optional in FORTRAN; if it is omitted, the default 
+       will be used.
+
+   <P>
+   <LI>The <I>xfer_prp</I> parameter is the data transfer propery list 
+       identifier.
+       <code>H5P_DEFAULT</code> in C
+       (<code>H5P_DEFAULT_F</code> in FORTRAN) is the default value and
+       indicates that the default data transfer property list is used. 
+       This parameter is optional in FORTRAN; if it is omitted, the default 
+       will be used.
+   <P>
+
+   <LI> The <I>buf</I> parameter is the data buffer to read into.
+   <P>
+
+   <LI> In FORTRAN, the <I>hdferr</I> parameter is for the error code
+        passed back:  0 if successful, -1 if not.  In C, this function
+        returns a non-negative value if successful; otherwise it returns 
+        a negative value.
+</UL>
+</UL>
+<A NAME="fc">
+<H3><U>File Contents</U></H3>
+Figure 6.1a  shows the contents of <code>dset.h5</code> (created by the C program).
+<BR>
+Figure 6.1b  shows the contents of <code>dsetf.h5</code> (created by the FORTRAN 
+program).  
+<P>
+      <B>Fig. 6.1a</B> &nbsp;  <I><code>dset.h5</code> in DDL</I>
+<PRE>
+      HDF5 "dset.h5" {
+      GROUP "/" {
+         DATASET "dset" {
+            DATATYPE { H5T_STD_I32BE }
+            DATASPACE { SIMPLE ( 4, 6 ) / ( 4, 6 ) }
+            DATA {
+               1, 2, 3, 4, 5, 6,
+               7, 8, 9, 10, 11, 12,
+               13, 14, 15, 16, 17, 18,
+               19, 20, 21, 22, 23, 24
+            }
+         }
+      }
+      }
+</PRE>
+<P>
+      <B>Fig. 6.1b</B> &nbsp;  <I><code>dsetf.h5</code> in DDL</I>
+<PRE>
+HDF5 "dsetf.h5" {
+GROUP "/" {
+   DATASET "dset" {
+      DATATYPE { H5T_STD_I32BE }
+      DATASPACE { SIMPLE ( 6, 4 ) / ( 6, 4 ) }
+      DATA {
+         1, 7, 13, 19,
+         2, 8, 14, 20,
+         3, 9, 15, 21,
+         4, 10, 16, 22,
+         5, 11, 17, 23,
+         6, 12, 18, 24
+      }
+   }
+}
+}
+</PRE>
+
+
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/references.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/references.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/references.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,66 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - References
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">References</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<UL>
+   <LI><B>HDF Home Page:</B>  &nbsp;&nbsp;&nbsp;
+      <A HREF="http://hdf.ncsa.uiuc.edu/">http://hdf.ncsa.uiuc.edu/</A>
+<P>
+   <LI><B>HDF5 Home Page and Documentation:</B> &nbsp;
+      <A HREF="http://hdf.ncsa.uiuc.edu/HDF5/">http://hdf.ncsa.uiuc.edu/HDF5/</A>
+<P>
+   <LI><B>HDF5 DDL:</B> &nbsp;
+      <A HREF="http://hdf.ncsa.uiuc.edu/HDF5/doc/ddl.html">http://hdf.ncsa.uiuc.edu/HDF5/doc/ddl.html</A> 
+<P>
+   <LI><B>Introduction to HDF5:</B> &nbsp;
+    <A HREF="http://hdf.ncsa.uiuc.edu/HDF5/doc/H5.intro.html">http://hdf.ncsa.uiuc.edu/HDF5/doc/H5.intro.html</A> <BR>
+Overview of HDF5 with example programs.
+<P>
+   <LI><B>Tar file of HDF5 Tutorial Examples</B>: &nbsp; 
+      <A HREF="http://hdf.ncsa.uiuc.edu/training/other-ex5/examples.tar">http://hdf.ncsa.uiuc.edu/training/other-ex5/examples.tar</A>
+<P>
+   <LI><B>Other Miscellaneous HDF5 Example Programs:</B> &nbsp;
+      <A HREF="http://hdf.ncsa.uiuc.edu/training/other-ex5/">http://hdf.ncsa.uiuc.edu/training/other-ex5/</A>
+</UL>
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/reftoobj.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/reftoobj.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/reftoobj.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,318 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - References to Objects 
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ] 
+<h1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd"> References to Objects</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+    <LI><A HREF="#def">References to Objects</A>
+    <LI> <A HREF="#def1">Creating and Storing References to Objects</A>
+    <LI> <A HREF="#def2">Reading References and Accessing Objects Using 
+                         References</A>
+    <LI> Programming Example 
+    <UL>
+      <LI> <A HREF="#desc">Description</A> 
+      <LI> <A HREF="#rem">Remarks</A> 
+      <LI> <A HREF="#fc">File Contents</A>
+    </UL>
+</UL>
+<HR>
+<A NAME="def">
+<H2>References to Objects</H2>
+In HDF5, objects (i.e. groups, datasets, and named datatypes) are usually 
+accessed by name. This access method was discussed in previous sections. 
+There is another way to access stored objects - by reference.
+<P>
+An object reference is based on the relative file address of the object header
+in the file and is constant for the life of the object. Once a reference to
+an object is created and stored in a dataset in the file, it can be used
+to dereference the object it points to. References are handy for creating
+a file index or for grouping related objects by storing references to them in
+one dataset.
+<P>
+<A NAME="def1">
+<H2>Creating and Storing References to Objects</H2>
+The following steps are involved in creating and storing file references
+to objects:
+<OL>
+<LI> Create the objects or open them if they already exist in the file.
+<P>
+<LI> Create a dataset to store references to the objects.
+<P>
+<LI> Create and store references to the objects in a buffer.
+<P>
+<LI> Write the buffer containing the references to the dataset.
+</OL>
+
+<A NAME="def2">
+<H2>Reading References and Accessing Objects Using References</H2>
+
+The following steps are involved in reading references to objects and 
+accessing objects using references:
+<OL>
+<LI> Open the dataset with the references and read them. The 
+<CODE>H5T_STD_REF_OBJ</CODE>
+   datatype must be used to describe the memory datatype.
+<P>
+<LI> Use the read reference to obtain the identifier of the object the 
+     reference points to.
+<P>
+<LI> Open the dereferenced object and perform the desired operations.
+<P>
+<LI> Close all objects when the task is complete. 
+</OL>
+
+<H2> Programming Example</H2>
+<A NAME="desc">
+<H3><U>Description</U></H3>      
+The example below first creates a group in the file.
+It then creates two datasets and a named datatype in that group.
+References to these four objects are stored in a dataset in the root group.  
+<P>
+After that, it opens and reads the reference dataset from the file created 
+previously, then dereferences the references.
+
+<UL>
+[<A HREF="examples/h5_ref2obj.c">C example</A> ] 
+    - <code>h5_ref2obj.c</code><BR>
+[<A HREF="examples/refobjexample.f90">FORTRAN example</A> ] 
+    - <code>refobjexample.f90</code>
+</UL>
+<B>NOTE:</B> To download a tar file of the examples, including a Makefile,
+please go to the <A HREF="references.html">References</A> page.
+<P>
+Following is the output from the examples:
+<PRE>
+  Data has been successfully written to the dataset 
+  Stored datatype is of a FLOAT class
+</PRE>
+
+
+<A NAME="rem">
+<H3><U>Remarks</U></H3>
+
+<UL>
+<LI> The following code creates a dataset in which to store the references. 
+<P>
+<I><B>C:</B></I> <pre>
+    dset2_id = H5Dcreate (file_id, dsetname, H5T_STD_REF_OBJ, 
+                         space_id, H5P_DEFAULT);
+</pre>
+<P>
+<I><B>FORTRAN:</B></I><pre>
+    CALL h5dcreate_f (file_id, dsetname, H5T_STD_REF_OBJ, & 
+                      space_id, dset2_id, hdferr)
+</pre>
+<P>
+  Notice that the <CODE>H5T_SDT_REF_OBJ</CODE> 
+  datatype is used to specify that references to objects will be 
+  stored. The datatype <CODE>H5T_STD_REF_DSETREG</CODE> is 
+  used to store the dataset 
+  region references and will be discussed later in this tutorial.
+<P>
+<LI>The next few calls to <CODE>H5Rcreate</CODE> / <CODE>h5rcreate_f</CODE>
+   create references to the objects. The signature of  
+   <CODE>H5Rcreate</CODE> / <CODE>h5rcreate_f</CODE> is as follows:
+<P>
+<I><B>C:</B></I> &nbsp; <pre>
+    herr_t H5Rcreate (void* ref, hid_t loc_id, const char *name, 
+                      H5R_type_t ref_type, hid_t space_id)    
+</pre>
+<P>
+<I><B>FORTRAN:</B></I> &nbsp; <pre>
+    h5rcreate_f (loc_id, name, ref, hdferr)
+
+           loc_id     IN: INTEGER (HID_T) 
+           name       IN: CHARACTER(LEN=*)
+           ref       OUT: TYPE (hobj_ref_t_f)
+           hdferr    OUT: INTEGER
+</pre>
+<P>
+
+
+<UL>
+    <LI> The <em>ref</em> argument specifies the buffer 
+         in which to store the reference.
+<P>
+    <LI> The <I>loc_id</I> and <I>name</I> arguments specify the name of 
+         the referenced object.  
+<P>
+    <LI> In C, the <I>ref_type</I> argument specifies the type of the 
+         reference. 
+         Our example uses references to objects, <CODE>H5R_OBJECT</CODE>.
+         References to dataset regions, <CODE>H5R_DATASET_REGION</CODE>,
+         will be discussed later in this tutorial. 
+<P>
+    <LI> In C, the <I>space_id</I> argument specifies the dataspace 
+         identifier. When references 
+         to the objects are created, this argument should be set to -1. 
+<P>
+    <LI> In FORTRAN, the return value from the <CODE>h5rcreate_f</CODE>
+         call is in <I>hdferr</I>: 0 if successful, -1 otherwise.
+         In C, <CODE>H5Rcreate</CODE> returns a non-negative value if 
+         successful and a negative value otherwise. 
+</UL>
+<P>
+<LI><CODE>H5Dwrite</CODE> / <CODE>h5dwrite_f</CODE> writes a 
+    dataset containing the references. 
+    Notice that the <CODE>H5T_SDT_REF_OBJ</CODE> datatype is used to 
+    describe the dataset's memory datatype.
+<P>
+</UL>
+<UL>
+<LI> <CODE>H5Dread</CODE> / <CODE>h5dread_f</CODE>   
+     reads the dataset containing the 
+     references to the objects. The <CODE>H5T_STD_REF_OBJ</CODE> memory 
+     datatype was 
+     used to read references to memory.
+<P>
+<LI> <CODE>H5Rdereference</CODE> / <CODE>h5rdereference_f</CODE> obtains 
+      the object's identifier. The signature is as follows:
+<P>
+<I><B>C</B></I>:  <pre>
+    hid_t H5Rdereference (hid_t dset_id, H5R_type_t ref_type, 
+                          void *ref)
+</pre> 
+<P>
+<I><B>FORTRAN</B></I>:  <pre>
+    h5rdereference_f (dset_id, ref, obj_id, hdferr)
+
+            dset_id    IN:   INTEGER (HID_T)
+            ref        IN:   TYPE (hobj_ref_t_f)
+            obj_id    OUT:   INTEGER (HID_T)
+            hdferr    OUT:   INTEGER
+</pre>
+<P>
+   <UL>
+    <LI> The <I>dset_id</I> argument is the identifier of the dataset 
+         containing the references.
+<P>
+    <LI> In C, the <I>ref_type</I> argument specifies the reference type. 
+<P>
+    <LI> The <I>ref</I> argument is a buffer containing the reference 
+         to be dereferenced.
+<P>
+    <LI> The C function returns the identifier of the object that the 
+         reference points to or a negative value if it is unsuccessful.  
+         In FORTRAN, the object identifier is returned in <I>obj_id</I> 
+         and the return code is returned in <I>hdferr</I>.
+<P>
+        In our simplified situation, we know what type of object was
+         stored in the dataset. When the type of the object is unknown, 
+         <CODE>H5Rget_object_type</CODE> should be used to identify the type 
+         of object the reference points to. 
+    </UL>
+</UL>
+
+
+<A NAME="fc">
+<H3><U>File Contents</U></H3>
+<P>
+<I><U>HDF5 File Created by C Example</U></I>
+<p>
+<B>Fig. A</B> &nbsp; <I><code>REF_OBJ.h5</code> in DDL</I>
+
+<PRE>
+HDF5 "REF_OBJ.h5" {
+GROUP "/" {
+   GROUP "GROUP1" {
+      GROUP "GROUP2" {
+      }
+   }
+   DATASET "INTEGERS" {
+      DATATYPE { H5T_STD_I32BE }
+      DATASPACE { SIMPLE ( 5 ) / ( 5 ) }
+      DATA {
+         1, 2, 3, 4, 5
+      }
+   }
+   DATATYPE "MYTYPE" {
+   }
+   DATASET "OBJECT_REFERENCES" {
+      DATATYPE { H5T_REFERENCE }
+      DATASPACE { SIMPLE ( 4 ) / ( 4 ) }
+      DATA {
+         GROUP 0:1320, GROUP 0:2272, DATASET 0:2648, DATATYPE 0:3244
+      }
+   }
+}
+}
+
+
+</PRE>
+<I><U>HDF5 File Created by FORTRAN Example</U></I>:
+<p>
+<B>Fig. B</B> &nbsp; <I><code>FORTRAN.h5</code> in DDL</I>
+
+<PRE>
+HDF5 "FORTRAN.h5" {
+GROUP "/" {
+   GROUP "GROUP1" {
+      GROUP "GROUP2" {
+      }
+   }
+   DATASET "INTEGERS" {
+      DATATYPE { H5T_STD_I32BE }
+      DATASPACE { SIMPLE ( 5 ) / ( 5 ) }
+      DATA {
+         1, 2, 3, 4, 5
+      }
+   }
+   DATATYPE "MyType" {
+   }
+   DATASET "OBJECT_REFERENCES" {
+      DATATYPE { H5T_REFERENCE }
+      DATASPACE { SIMPLE ( 4 ) / ( 4 ) }
+      DATA {
+         GROUP 0:1344, GROUP 0:2320, DATASET 0:2696, DATATYPE 0:3292
+      }
+   }
+}
+}
+</PRE>
+<P>
+
+Notice how the data in the reference dataset is described. The two numbers 
+separated by a colon represent a unique identifier of the object. These 
+numbers are constant for the life of the object.
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+     src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/reftoreg.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/reftoreg.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/reftoreg.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,366 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - References to Dataset Regions
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+[ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ] 
+<H1><BIG><BIG><BIG><FONT COLOR="#c101cd"> References to Dataset Regions</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+    <LI> <A HREF="#def">References to Dataset Regions</A>
+    <LI> <A HREF="#def1">Creating and Storing References to Dataset Regions</A>
+    <LI> <A HREF="#def2">Reading References to Dataset Regions</A> 
+    <LI> Programming Example 
+    <UL>
+      <LI> <A HREF="#desc">Description</A> 
+      <LI> <A HREF="#rem">Remarks</A> 
+      <LI> <A HREF="#fc">File Contents</A>
+    </UL>
+</UL>
+<HR>
+<A NAME="def">
+<H2>References to Dataset Regions</H2>
+Previously you learned about creating, reading, and writing
+dataset selections. Here you will learn how to store dataset
+selections in a file, and how to read them back using references
+to dataset regions.
+<P>
+A dataset region reference points to the dataset selection by storing the
+relative file address  of the dataset header and the global heap offset of
+the referenced selection.  The selection referenced is located by retrieving
+the coordinates of the areas in the selection from the global heap. This
+internal mechanism of storing and retrieving dataset selections is transparent
+to the user. A reference to a dataset selection (a region) is constant for 
+the life of the dataset.
+<A NAME="def1">
+<H2>Creating and Storing References to Dataset Regions</H2>
+The following steps are involved in creating and storing references to
+dataset regions:
+<OL>
+
+<LI> Create a dataset in which to store the dataset regions (the selections).
+<P>
+<LI> Create selections in the dataset(s). 
+The dataset(s) should already exist in the file.
+<P>
+<LI> Create references to the selections and store them in a buffer.
+<P>
+<LI> Write the dataset region references to the file.
+<P>
+<LI> Close all objects.
+</OL>
+
+<A NAME="def2">
+<H2>Reading References to Dataset Regions</H2>
+
+The following steps are involved in reading references to dataset 
+regions and referenced dataset regions (selections).
+<OL>
+<LI> Open and read the dataset containing references to the dataset regions.
+   The datatype <CODE>H5T_STD_REF_DSETREG</CODE> must be used during 
+the read operation.
+<P>
+<LI>Use <CODE>H5Rdereference</CODE> / <CODE>h5rdeference_f</CODE> to 
+obtain the dataset identifier from the read 
+    dataset region reference.
+   <dir><dir><dir>
+   <B><font size=-1>OR</font></B>
+   </dir></dir></dir>
+   Use <CODE>H5Rget_region</CODE> / <CODE>h5rget_region_f</CODE> to obtain 
+   the dataspace identifier for the dataset 
+   containing the selection from the read dataset region reference. 
+<P>
+<LI> Obtain information about the selection or read selected data from
+     the dataset.    
+<P>
+<LI> Close all objects when they are no longer needed.
+</OL>
+
+<H2> Programming Example</H2>
+<A NAME="desc">
+<H3><U>Description</U></H3>      
+The example below first creates a dataset in the file. Then it creates a 
+dataset to store references to the dataset regions (selections).
+The first selection is a 6 x 6 hyperslab. The second selection is a point 
+selection in the same dataset.
+References to both selections are created and stored in the buffer and then
+written to the dataset in the file.
+<P>
+After creating the dataset and references, the program reads the dataset 
+containing the dataset region references.
+It reads data from the dereferenced dataset and displays the number of 
+elements and raw data. Then it reads two selections, a hyperslab selection
+and a point selection. The program queries a number of points in the 
+hyperslab and their coordinates and displays them. Then it queries a number of 
+selected points and their coordinates and displays the  information.<BR>
+<P>
+To obtain the example, download:
+<UL>
+[<A HREF="examples/h5_ref2reg.c">C example</A> ] 
+    - <code>h5_ref2reg.c</code><BR>
+[<A HREF="examples/refregexample.f90">FORTRAN example</A> ] 
+    - <code>refregexample.f90</code>
+</UL>
+<B>NOTE:</B> To download a tar file of the examples, including a Makefile,
+please go to the <A HREF="references.html">References</A> page.
+<P>
+
+Following is the output from the examples:
+<P>
+<I><U>Output of C Example</U></I>
+<PRE>
+Selected hyperslab: 
+0 0 0 3 3 4 0 0 0 
+0 0 0 3 4 4 0 0 0 
+Selected points: 
+1 0 0 0 0 0 0 0 6 
+0 0 0 0 0 0 5 0 0 
+</PRE> 
+<I><U>Output of FORTRAN Example</U></I>
+<PRE>
+ Hyperslab selection
+
+ 3*0,  2*3,  4,  3*0
+ 3*0,  3,  2*4,  3*0
+
+ Point selection
+
+ 1,  7*0,  6
+ 6*0,  5,  2*0
+</PRE>
+
+<A NAME="rem">
+<H3><U>Remarks</U></H3>
+<UL>
+<LI> The following code creates a dataset to store references to the 
+     dataset(s) regions (selections).  Notice that the 
+     <CODE>H5T_STD_REF_DSETREG</CODE> datatype is used.
+<P>
+<I><B>C:</I></B>
+<pre>
+    dset1 = H5Dcreate (file_id, dsetnamer, H5T_STD_REF_DSETREG,
+                       spacer_id, creation_prp);
+</pre>
+<P>
+<I><B>FORTRAN:</B></I>
+<pre>
+    CALL h5dcreate_f (file_id, dsetnamer, H5T_STD_REF_DSETREG, &
+                     spacer_id, dset1, hdferr, creation_prp)
+</pre>
+<P>
+
+<LI> This program uses hyperslab and point selections. We used the dataspace 
+   identifier for the calls to <CODE>H5Sselect_hyperslab</CODE> / 
+   <CODE>h5sselect_hyperslab_f</CODE> and 
+   <CODE>H5Sselect_elements</CODE> / <CODE>h5sselect_elements_f</CODE>.  
+   The identifier was obtained when the dataset was 
+   created and it describes the dataset's dataspace. We did not close it when 
+   the dataset was closed to decrease the number of function calls used 
+   in the example. 
+   In a real application program, one should open the dataset and determine 
+   its dataspace using the <CODE>H5Dget_space</CODE> / 
+   <CODE>h5dget_space_f</CODE> function. 
+<P>
+<LI> <CODE>H5Rcreate</CODE> / <CODE>h5rcreate_f</CODE> is used to create a 
+dataset region reference. The signature of the function is as follows:
+<P>
+<I><B>C</B></I>:
+<pre>
+    herr_t H5Rcreate (void *ref, hid_t loc_id, const char *name,
+                      H5R_type_t ref_type, hid_t space_id)
+</pre>
+<P>
+<I><B>FORTRAN</B></I>: &nbsp;
+<pre>
+    h5rcreate_f (loc_id, name, space_id, ref, hdferr)
+
+        loc_id      IN: INTEGER (HID_T)
+        name        IN: CHARACTER (LEN=*) 
+        space_id    IN:  INTEGER (HID_T)
+        ref_type   OUT: TYPE(hdset_reg_ref_t_f)
+        hdferr     OUT: INTEGER 
+</pre>
+<P>
+<UL>
+    <LI> The <em>ref</em> argument specifies the buffer in which
+         to store the reference.
+<P>
+    <LI> The <I>loc_id</I> and <I>name</I> arguments specify the 
+         referenced dataset. 
+<P>    
+    <LI> In C, the <I>ref_type</I> argument specifies the reference type. 
+         Since we are creating references to the dataset regions, 
+         the <CODE>H5R_DATASET_REGION</CODE> datatype is used. 
+<P>
+    <LI> The <I>space_id</I> argument is a dataspace identifier.
+         This dataspace includes a selection in the referenced dataset. 
+<P>
+    <LI> In C, the function <CODE>H5Rcreate</CODE> returns a non-negative 
+         value if successful and a negative value otherwise.  In FORTRAN, the
+         return code from the <CODE>h5rcreate_f</CODE> subroutine is
+         returned in <I>hdferr</I>: 0 if succesful and -1 otherwise.  
+</UL>
+<P>
+<LI> The dataset with the region references was read by 
+    <CODE>H5Dread</CODE> / <CODE>h5dread_f</CODE> with 
+   the <CODE>H5T_STD_REF_DSETREG</CODE> datatype specified.
+<P>
+<LI> The read reference can be used to obtain the dataset identifier, as we 
+    did with the following call:
+<P>
+<I><B>C:</B></I>
+<pre>
+    dset2 = H5Rdereference (dset1, H5R_DATASET_REGION, &ref_out[0]);
+</pre>
+<P>
+<I><B>FORTRAN:</B></I>
+<pre>
+    CALL h5rdereference_f (dset1, ref_out(1), dset2, hdferr)
+</pre>
+<P>
+   or to obtain spacial information ( dataspace and selection ) with the call
+   to <CODE>H5Rget_region</CODE> / <CODE>h5rget_region_f</CODE>:
+<P>
+<I><B>C:</B></I>
+<pre>
+    dspace2 = H5Rget_region (dset1, H5R_DATASET_REGION, &ref_out[0]);
+</pre> 
+<P>
+<I><B>FORTRAN:</B></I>
+<pre>
+    CALL H5rget_region_f (dset1, ref_out(1), dspace2, hdferr)
+</pre>
+<P>
+   The reference to the dataset region has information for both the dataset 
+   itself and its selection. In both calls,
+<UL>
+       <LI> the <em>dset1</em> parameter is the identifier for the dataset 
+         with the region references and
+<P>
+       <LI> the <em>ref_out</em> parameter specifies the type of reference 
+         stored. In this example a reference to the dataset region is stored.
+</UL>
+<P>
+       The C function returns the dataspace identifier or a 
+           negative value if it is not successful.  
+       In FORTRAN, the dataset identifier or dataspace identifier 
+           is returned in <I>dset2</I> or <I>dspace2</I>
+           and the return code for the call is returned in <I>hdferr</I>:
+           0 if successful and -1 otherwise.
+<P>
+</UL>
+
+
+</UL>
+<A NAME="fc">
+<H3><U>File Contents</U></H3>
+<P>
+<I><U>HDF5 File Created by C Example</U></I>
+<P>
+<B>Fig. A</B> &nbsp; <I><code>REF_REG.h5</code> in DDL</I>
+<PRE>
+
+HDF5 "REF_REG.h5" {
+GROUP "/" {
+   DATASET "MATRIX" {
+      DATATYPE { H5T_STD_I32BE }
+      DATASPACE { SIMPLE ( 2, 9 ) / ( 2, 9 ) }
+      DATA {
+         1, 1, 2, 3, 3, 4, 5, 5, 6,
+         1, 2, 2, 3, 4, 4, 5, 6, 6
+      }
+   }
+   DATASET "REGION_REFERENCES" {
+      DATATYPE { H5T_REFERENCE }
+      DATASPACE { SIMPLE ( 2 ) / ( 2 ) }
+      DATA {
+         DATASET 0:744 {(0,3)-(1,5)}, DATASET 0:744 {(0,0), (1,6), (0,8)}
+      }
+   }
+}
+}
+
+</PRE>
+<I><U>HDF5 File Created by FORTRAN Example</U></I>:
+<P>
+<B>Fig. B</B> &nbsp; <I><code>FORTRAN.h5</code> in DDL</I>
+<PRE>
+
+HDF5 "FORTRAN.h5" {
+GROUP "/" {
+   DATASET "MATRIX" {
+      DATATYPE { H5T_STD_I32BE }
+      DATASPACE { SIMPLE ( 9, 2 ) / ( 9, 2 ) }
+      DATA {
+         1, 1,
+         1, 2,
+         2, 2,
+         3, 3,
+         3, 4,
+         4, 4,
+         5, 5,
+         5, 6,
+         6, 6
+      }
+   }
+   DATASET "REGION_REFERENCES" {
+      DATATYPE { H5T_REFERENCE }
+      DATASPACE { SIMPLE ( 2 ) / ( 2 ) }
+      DATA {
+         DATASET 0:744 {(3,0)-(5,1)}, DATASET 0:744 {(0,0), (6,1), (8,0)}
+      }
+   }
+}
+}
+</PRE>
+
+Notice how the raw data in the dataset with the dataset regions is displayed.
+Each element of the raw data consists of a reference to the dataset 
+(DATASET  number1:number2) and its selected region. 
+If the selection is a hyperslab, the corner coordinates of the hyperslab 
+are displayed. 
+For the point selection, the coordinates of each point are displayed.
+<!--
+Since only two selections were stored, the third and fourth elements of the 
+dataset are set to NULL. This was done by the buffer 
+inizialization in the program.
+-->
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+     src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/select.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/select.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/select.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,309 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Hyperslab Selections  
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Hyperslab Selections</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+    <LI><A HREF="#def">Selecting a Portion of a Dataspace</A>
+    <LI>Programming Example 
+<UL>
+      <LI> <A HREF="#desc">Description</A> 
+      <LI> <A HREF="#rem">Remarks</A> 
+<!--
+      <LI> <A HREF="#fc">File Contents</A>
+-->
+</UL>
+</UL>
+<HR>
+<A NAME="def">
+<H2>Selecting a Portion of a Dataspace</H2>
+Hyperslabs are portions of datasets. A hyperslab selection can be a 
+logically contiguous collection of points in a dataspace, or it
+can be a regular pattern of points or blocks in a dataspace.
+You can select a hyperslab to write to or read from with the function 
+<CODE>H5Sselect_hyperslab</CODE> / <CODE>h5sselect_hyperslab_f</CODE>.
+<P>
+<H2> Programming Example</H2>
+<A NAME="desc">
+<H3><U>Description</U></H3>      
+This example creates a 5 x 6 integer array in a file called <code>sds.h5</code>
+(<code>sdsf.h5</code> in FORTRAN).  It 
+selects a 3 x 4 hyperslab from the dataset as follows (Dimension 0 is 
+offset by 1 and Dimension 1 is offset by 2): 
+<P>
+<B>5 x 6 array:</B> 
+<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=172>
+<TR><TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+</TR>
+<TR><TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="17%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="17%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="17%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+</TR>
+<TR><TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="17%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="17%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="17%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+</TR>
+<TR><TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="17%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="17%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="17%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+</TR>
+<TR><TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="17%" VALIGN="TOP">&nbsp;</TD>
+</TR>
+</TABLE>
+<P>
+Then it reads the hyperslab from this file into a 2-dimensional plane 
+(size 7 x 7) of a 3-dimensional array (size 7 x 7 x 3), as
+follows (with Dimension 0 offset by 3):
+<P>
+<TABLE BORDER CELLSPACING=1 CELLPADDING=7 WIDTH=201>
+<TR><TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+</TR>
+<TR><TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+</TR>
+<TR><TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+</TR>
+<TR><TD WIDTH="14%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="14%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="14%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="14%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+</TR>
+<TR><TD WIDTH="14%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="14%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="14%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="14%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+</TR>
+<TR><TD WIDTH="14%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="14%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="14%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="14%" VALIGN="TOP">
+<FONT SIZE=2><P> X</FONT></TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+</TR>
+<TR><TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+<TD WIDTH="14%" VALIGN="TOP">&nbsp;</TD>
+</TR>
+</TABLE>
+<P>
+
+To obtain the example, download:
+<UL>
+[ <A HREF="examples/h5_hyperslab.c">C example</A> ] 
+    - <code>h5_hyperslab.c</code><BR>
+[ <A HREF="examples/hyperslab.f90">FORTRAN example</A> ] 
+    - <code>hyperslab.f90</code><BR>
+[ <A HREF="examples/java/HyperSlab.java">Java example</A> ] 
+    - <code>HyperSlab.java</code>
+</UL>
+<B>NOTE:</B> To download a tar file of the examples, including a Makefile,
+please go to the <A HREF="references.html">References</A> page.
+<P>
+
+<A NAME="rem">
+<H3><U>Remarks</U></H3>
+<UL>
+<LI><CODE>H5Sselect_hyperslab</CODE> / <CODE>h5sselect_hyperslab_f</CODE> 
+selects a hyperslab region to 
+add to the current selected region for a specified dataspace.
+<P>
+<I><B>C</B></I>:
+<pre>
+    herr_t H5Sselect_hyperslab (hid_t space_id, H5S_seloper_t operator,
+        const hsize_t *start, const hsize_t *stride,
+        const hsize_t *count, const hsize_t *block ) 
+</pre>
+<P>
+<I><B>FORTRAN</B></I>:
+<pre>
+    h5sselect_hyperslab_f (space_id, operator, start, count, &
+                           hdferr, stride, block)
+
+            space_id    IN: INTEGER(HID_T) 
+            operator    IN: INTEGER 
+            start       IN: INTEGER(HSIZE_T), DIMENSION(*)
+            count       IN: INTEGER(HSIZE_T), DIMENSION(*)
+            hdferr     OUT: INTEGER
+            stride      IN: INTEGER(HSIZE_T), DIMENSION(*), OPTIONAL
+            block       IN: INTEGER(HSIZE_T), DIMENSION(*), OPTIONAL 
+</pre>
+<P>
+<UL>
+<LI>The parameter <I>space_id</I> is the dataspace identifier for the
+    specified dataspace.
+<P>
+<LI>The parameter <I>operator</I> can be set to one of the following: 
+   <dir><DL>
+    <dt><CODE>H5S_SELECT_SET</CODE> (<CODE>H5S_SELECT_SET_F</CODE> in FORTRAN)
+    <dd>Replace the existing selection with the parameters from this call.
+        Overlapping blocks are not supported with this operator.
+
+    <dt><CODE>H5S_SELECT_OR</CODE> (<CODE>H5S_SELECT_OR_F</CODE> in FORTRAN)
+    <dd>Add the new selection to the existing selection.
+    </DL></dir>
+
+<P>
+<LI>The <I>start</I> array determines the starting coordinates of the 
+hyperslab to select. 
+<P>
+<LI>The <I>stride</I> array indicates which elements along a dimension are to 
+be selected.    
+<P>
+<LI>The <I>count</I> array determines how many positions to select from the 
+    dataspace in each dimension. 
+<P>
+<LI>The <I>block</I> array determines the size of the element block selected
+    by the dataspace.
+<P>
+<LI>In C, a non-negative value is returned if successful, and a negative
+value otherwise. In FORTRAN, the return value is returned in <I>hdferr</I>:
+0 if successful and -1 otherwise.
+</UL>
+<P>
+The <I>start</I>, <I>stride</I>, <I>count</I>, and <I>block</I> arrays must 
+be the same size as the rank of the dataspace.
+<P>
+<LI>The examples introduce the following call: 
+<dir><dl>
+      <dt><code>H5Dget_space / h5dget_space_f:</code>
+      <dd>Returns an identifier for a copy of the dataspace of a dataset.<P>
+</dl></dir>
+<LI>The C example also introduces the following calls: 
+<dir><dl>
+      <dt><code>H5Sget_simple_extent_dims:</code> 
+      <dd>Returns the size and maximum size of each dimension of a dataspace.
+      <dt><code>H5Sget_simple_extent_ndims:</code>
+      <dd>Determines the dimensionality (or rank) of a dataspace. 
+</dl></dir>
+<P>
+The FORTRAN example does not use these calls, though they
+are available as <CODE>h5sget_simple_extent_dims_f</CODE> and
+<CODE>h5sget_simple_extent_ndims_f</CODE>.
+
+</UL>
+</UL>
+</UL>
+</PRE>
+<P>
+
+<!--
+<A NAME="fc">
+<H3><U>File Contents</U></H3>
+-->
+
+
+
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+     src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/selectc.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/selectc.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/selectc.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,265 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Selecting Individual Points and Copying a Dataspace 
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Selecting Individual Points and Copying 
+a Dataspace</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+<H2>Contents:</H2>
+<UL>
+    <LI> <A HREF="#def">Description</A>
+    <LI> Programming Example 
+    <UL>
+      <LI> <A HREF="#desc">Description</A> 
+      <LI> <A HREF="#rem">Remarks</A> 
+      <LI> <A HREF="#fc">File Contents</A>
+    </UL>
+</UL>
+<HR>
+<A NAME="def">
+<H2>Description</h2>
+You can select independent points to read from or write to in a 
+dataspace by use of the <CODE>H5Sselect_elements</CODE> / 
+<CODE>h5sselect_elements_f</CODE> function. 
+<P>
+The <CODE>H5Scopy</CODE> / <CODE>h5scopy_f</CODE> function allows 
+you to make an exact copy of a dataspace.
+This can reduce the number of function calls needed when
+selecting a dataspace.
+<P>
+<H2> Programming Example</H2>
+
+<A NAME="desc">
+<H3><U>Description</U></H3>      
+This example shows how to use <CODE>H5Sselect_elements</CODE> / 
+<CODE>h5sselect_elements_f</CODE> 
+to select individual points in a dataset and how to use 
+<CODE>H5Scopy</CODE> / <CODE>h5scopy_f</CODE> 
+to make a copy of a dataspace.
+<UL>
+[ <A HREF="examples/h5_copy.c">C example</A> ] 
+    - <code>h5_copy.c</code><BR>
+[ <A HREF="examples/selectele.f90">FORTRAN example</A> ] 
+    - <code>selectele.f90</code><BR>
+[ <A HREF="examples/java/Copy.java">Java example</A> ] 
+    - <code>Copy.java</code>
+</UL>
+<B>NOTE:</B> To download a tar file of the examples, including a Makefile,
+please go to the <A HREF="references.html">References</A> page.
+
+
+<A NAME="rem">
+<H3><U>Remarks</U></H3>
+<UL>
+<LI><CODE>H5Sselect_elements</CODE> / <CODE>h5sselect_elements_f</CODE> 
+selects array elements to be 
+included in the selection for a dataspace:
+<P>
+<I><B>C</B></I>:
+<pre>
+   herr_t H5Sselect_elements (hid_t space_id, H5S_seloper_t operator,
+                              size_t num_elements, 
+                              const hsize_t **coord ) 
+</pre>
+<P>
+<I><B>FORTRAN</B></I>:
+<pre>
+   h5sselect_elements_f (space_id, operator, num_elements, coord, hdferr)
+
+      space_id       IN: INTEGER(HID_T) 
+      operator       IN: INTEGER
+      num_elements   IN: INTEGER
+      coord          IN: INTEGER(HSIZE_T), DIMENSION(*,*)
+      hdferr        OUT: INTEGER
+</pre>
+<P>
+<UL>
+<LI>The <I>space_id</I> parameter is the dataspace identifier.
+<P>
+<LI>The <I>operator</I> parameter can be set to one of the following values: 
+<dir><DL>
+    <dt><CODE>H5S_SELECT_SET</CODE> (<CODE>H5S_SELECT_SET_F</CODE> in FORTRAN)
+    <dd>Replace the existing selection with the parameters from this call. 
+        Overlapping blocks are not supported with this operator. 
+    <dt><CODE>H5S_SELECT_OR</CODE> (<CODE>H5S_SELECT_OR_F</CODE> in FORTRAN)
+    <dd>Add the new selection to the existing selection. 
+</DL></dir>
+<P>
+<LI>The <I>coord</I> array is a two-dimensional array of size 
+<code><em>NUMP</em> x <em>RANK</em></code> in C 
+(<code><em>RANK</em> x <em>NUMP</em></code> in FORTRAN)
+where <code><em>NUMP</em></code> is the number of selected points 
+and <code><em>RANK</em></code> is the rank of the dataset.
+Note that these coordinates are 0-based in C and 1-based in FORTRAN.
+<p>
+    Consider the non-zero elements of the following array:
+    <pre>
+            0  59   0  53
+            0   0   0   0
+            0   0   1   0    </pre>
+    In C, the <em>coord</em> array selecting these points would be as follows:
+    <pre>
+            0   1
+            0   3
+            2   2            </pre>
+    While in FORTRAN, the <em>coord</em> array would be as follows:
+    <pre>
+            1   1   3
+            2   4   3        </pre>
+<P>
+<LI>In C, this function returns a non-negative value if successful and 
+a negative value otherwise.  In FORTRAN, the value returned in <I>hdferr</I>
+indicates whether it was successful (0) or not (-1).
+</UL>
+<P>
+<LI><CODE>H5Scopy</CODE> / <CODE>h5scopy_f</CODE> creates an exact copy of a dataspace:
+<P>
+<I><B>C</B></I>:
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+<PRE>
+   hid_t H5Scopy (hid_t space_id) 
+</PRE>
+<I><B>FORTRAN</B></I>: &nbsp;
+<PRE>
+   h5scopy_f (space_id, new_space_id, hdferr)  
+
+      space_id       IN: INTEGER(HID_T) 
+      new_space_id  OUT: INTEGER(HID_T)
+      hdferr        OUT: INTEGER 
+</PRE>
+<P>
+<UL>
+<LI>The <I>space_id</I> parameter is the dataspace identifier to copy. 
+<P>
+<LI>In C, the identifier to the dataspace's copy is returned if the
+function is successful and a negative value is returned if not.  In 
+FORTRAN, the new dataspace identifier is returned in <I>new_space_id</I> 
+and the return value is returned in <I>hdferr</I> ( 0 if successful and
+-1 if not). 
+</UL>
+</UL>
+</UL>
+<P>
+
+<A NAME="fc">
+<H3><U>File Contents</U></H3>
+
+Following is the DDL for <I>copy1.h5</I> and <I>copy2.h5</I>, as viewed with 
+the following commands:<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<code>h5dump copy1.h5</code> <br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+<code>h5dump copy2.h5</code>
+
+<P>
+<HR>
+<B><I><U>C</U></B></I>:<P>
+<B>Fig. S.1a</B> &nbsp; <I><code>copy1.h5</code> in DDL</I>
+<PRE>
+   HDF5 "copy1.h5" {
+   GROUP "/" {
+      DATASET "Copy1" {
+         DATATYPE { H5T_STD_I32BE }
+         DATASPACE { SIMPLE ( 3, 4 ) / ( 3, 4 ) }
+         DATA {
+            0, 59, 0, 53,
+            0, 0, 0, 0,
+            0, 0, 0, 0
+         }
+      }
+   }
+   }
+</PRE>
+<B>Fig. S.1b</B> &nbsp; <I><code>copy2.h5</code> in DDL</I>
+<PRE>
+   HDF5 "copy2.h5" {
+   GROUP "/" {
+      DATASET "Copy2" {
+         DATATYPE { H5T_STD_I32BE }
+         DATASPACE { SIMPLE ( 3, 4 ) / ( 3, 4 ) }
+         DATA {
+            1, 59, 1, 53,
+            1, 1, 1, 1,
+            1, 1, 1, 1
+         }
+      }
+   }
+   }
+</PRE>
+<HR>
+<I><B><U>FORTRAN</U></B></I>:<P>
+<B>Fig. S.2a</B> &nbsp; <I><code>copy1.h5</code> in DDL</I>
+<PRE>
+   HDF5 "copy1.h5" {
+   GROUP "/" {
+      DATASET "Copy1" {
+         DATATYPE { H5T_STD_I32BE }
+         DATASPACE { SIMPLE ( 4, 3 ) / ( 4, 3 ) }
+         DATA {
+            0, 0, 0,
+            53, 0, 0,
+            0, 0, 0,
+            59, 0, 0
+         }
+      }
+   }
+   }
+</PRE>
+<B>Fig. S.2b</B> &nbsp; <I><code>copy2.h5</code> in DDL</I>
+<PRE>
+   HDF5 "copy2.h5" {
+   GROUP "/" {
+      DATASET "Copy2" {
+         DATATYPE { H5T_STD_I32BE }
+         DATASPACE { SIMPLE ( 4, 3 ) / ( 4, 3 ) }
+         DATA {
+            1, 1, 1,
+            53, 1, 1,
+            1, 1, 1,
+            59, 1, 1
+         }
+      }
+   }
+   }
+</PRE>
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+     src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/software.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/software.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/software.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,85 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Obtaining HDF5 Software</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Obtaining HDF5 Software</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+<BODY>
+If you will be compiling in:
+<DL>
+<DT><B>C:</B>
+<DD>You will need the HDF5 library.  We provide pre-compiled binaries 
+for the platforms on which we tested at:
+<BR>&nbsp; &nbsp; &nbsp; &nbsp;
+<A HREF="ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/bin/">ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/bin/</A>
+<P>
+If using the pre-compiled binaries you must
+also obtain the GZIP library, as they were compiled with GZIP included, but do
+not include this library.  We provide the GZIP library for the platforms on
+which we tested at:
+<BR>&nbsp; &nbsp; &nbsp; &nbsp;
+<A HREF="ftp://ftp.ncsa.uiuc.edu/HDF/gzip/">ftp://ftp.ncsa.uiuc.edu/HDF/gzip/</A>
+<P>
+You can build the HDF5 library yourself, if need be.  The source code
+can be obtained from:
+<BR>&nbsp; &nbsp; &nbsp; &nbsp;
+<A HREF="ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/src/">ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/src/</A>
+<P>
+For further information regarding HDF5, check the HDF5 home page:
+<BR>&nbsp; &nbsp; &nbsp; &nbsp;
+<A HREF="http://hdf.ncsa.uiuc.edu/HDF5/">http://hdf.ncsa.uiuc.edu/HDF5/</A>
+<P>
+<DT><B>FORTRAN 90:</B> 
+<DD> With HDF5-1.4.0, support for Fortran 90 is included as part of
+the installation of the HDF5 library.  The pre-compiled binaries include
+the Fortran library.  If you need to build from source, download the 
+HDF5-1.4.0 source code and compile it with the <I>--enable-fortran</I> flag.   
+Read the instructions in the 
+<A HREF="ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/src/unpacked/RELEASE.txt">RELEASE.txt</A>
+file for further details. 
+
+<P>
+<DT><B>Java:</B>
+<DD>You will need the JHI5 code.  Go to the 
+<A HREF="http://hdf.ncsa.uiuc.edu/java-hdf5-html">Java HDF5 web page</A>
+for information on the Java-HDF5 software. The Java Tutorial examples
+are included with this tutorial: 
+<BR>&nbsp; &nbsp; &nbsp; &nbsp;
+   <A HREF="./examples/java/">./examples/java/</A>
+</DL>
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+     src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp@@ncsa.uiuc.edu">
+hdfhelp@@ncsa.uiuc.edu</A>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones@@ncsa.uiuc.edu -->
+<!-- modified by Frank Baker - fbaker@@ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp@@ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/title.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/title.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/title.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,105 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+<h1> <A HREF="http://hdf.ncsa.uiuc.edu/whatishdf5.html">
+<img  align=left border=0 src="bighdf2sp.JPG" alt="What is HDF5?"></A>
+<BIG><BIG><BIG>&nbsp;<FONT COLOR="#c101cd">HDF5 Tutorial</FONT>
+</BIG></BIG></BIG></H1>
+
+
+
+<hr noshade size=1>
+<CENTER>
+<FONT SIZE="3" FACE="arial,helvetica" COLOR="#c80028">
+    <B>[</B> <A HREF="http://hdf.ncsa.uiuc.edu/index.html">Home</A> <B>]</B>
+    <B>[</B> <A HREF="http://hdf.ncsa.uiuc.edu/hdfindex.html">Index</A> <B>]</B>
+    <B>[</B> <A HREF="http://hdf.ncsa.uiuc.edu/products.html">Products</A> <B>]</B>
+    <B>[</B> <A HREF="http://hdf.ncsa.uiuc.edu/newsletters.html">Newsletters</A> <B>]</B>
+    <B>[</B> <A HREF="http://hdf.ncsa.uiuc.edu/docs.html">Documentation</A> <B>]</B>
+<BR>
+
+</FONT>
+<BR>
+</CENTER>
+
+<BR CLEAR=ALL><BR>
+<BODY>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+<BIG><B>NOTE:</B></BIG> &nbsp;  
+This tutorial does NOT include the software needed to 
+<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
+compile the examples.  You will need to 
+<A HREF="./software.html">obtain</A> it first.
+ 
+<H2>Contents:</H2>
+<H3>Introductory Topics</H3>
+<OL>
+<LI><A HREF="intro.html">Introduction</A>  
+<LI><A HREF="fileorg.html">HDF5 File Organization</A> 
+<LI><A HREF="api.html">The HDF5 API</A> 
+<LI><A HREF="crtfile.html">Creating an HDF5 File</A>
+<LI><A HREF="crtdat.html">Creating a Dataset</A>
+<LI><A HREF="rdwt.html">Reading from or Writing to a Dataset</A>
+<LI><A HREF="crtatt.html">Creating an Attribute</A>
+<LI><A HREF="crtgrp.html">Creating a Group</A>
+<LI><A HREF="crtgrpar.html">Creating Groups Using Absolute and 
+    Relative Names</A> 
+<LI><A HREF="crtgrpd.html">Creating Datasets in Groups</A>
+</OL>
+<UL>
+<A HREF="questions.html">Questions</A><BR>
+<A HREF="answers.html">Answers</A><BR>
+</UL>
+<H3>Advanced Topics</H3>
+<UL>
+<LI><A HREF="property.html">Property Lists</A>
+<LI><A HREF="compound.html">Compound Datatypes</A> 
+<LI><A HREF="select.html">Dataspace Selection - Hyperslab</A>
+<LI><A HREF="selectc.html">Dataspace Selection - Individual Points</A>
+<LI><A HREF="reftoobj.html">References to Objects</A>
+<LI><A HREF="reftoreg.html">References to Dataset Regions</A>
+<LI><A HREF="extend.html">Chunking and Extendible Datasets</A>
+<LI><A HREF="mount.html">Mounting Files</A>
+<LI><A HREF="iterate.html">Group Iteration</A>
+</UL>
+<P>
+<A HREF="util.html">HDF5 Utilities - h5ls/h5dump</A><BR>
+<A HREF="glossary.html">Glossary</A><BR> 
+<A HREF="references.html">References</A><BR>
+<A HREF="examples/">Example Programs from this Tutorial</A> <BR>
+</OL>
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+     src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<BR> <H6>Last Modified: June 23, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+
+
+

Added: packages/hdf5/branches/upstream/current/doc/html/Tutor/util.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Tutor/util.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Tutor/util.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,85 @@
+<HTML><HEAD>
+<TITLE>HDF5 Tutorial - Utilities (h5dump, h5ls)
+</TITLE> 
+</HEAD>
+
+<body bgcolor="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+
+ [ <A HREF="title.html"><I>HDF5 Tutorial Top</I></A> ]
+<H1>
+<BIG><BIG><BIG><FONT COLOR="#c101cd">Utilities (h5dump, h5ls)</FONT>
+</BIG></BIG></BIG></H1>
+
+<hr noshade size=1>
+
+The h5dump and h5ls utilities can be used to examine the contents of an
+hdf5 file. 
+<P>
+<A NAME="dmp">
+<H2>h5dump</H2>
+<PRE>
+h5dump [-h] [-bb] [-header] [-a <names>] [-d &lt;names&gt;] [-g &lt;names&gt;]
+       [-l &lt;names&gt;] [-t &lt;names&gt;] &lt;file&gt;
+
+  -h            Print information on this command.
+  -bb           Display the content of the boot block. The default is not to display.
+  -header       Display header only; no data is displayed.
+  -a &lt;names&gt    Display the specified attribute(s).
+  -d &lt;names&gt    Display the specified dataset(s).
+  -g &lt;names&gt    Display the specified group(s) and all the members.
+  -l &lt;names&gt    Displays the value(s) of the specified soft link(s).
+  -t &lt;names&gt    Display the specified named data type(s).
+  
+  &lt;names&gt; is one or more appropriate object names.
+</PRE>
+<A NAME="ls">
+<H2>h5ls</H2>
+<PRE>
+h5ls [OPTIONS] FILE [OBJECTS...]
+
+   OPTIONS
+      -h, -?, --help   Print a usage message and exit
+      -d, --dump       Print the values of datasets
+      -f, --full       Print full path names instead of base names
+      -l, --label      Label members of compound datasets
+      -r, --recursive  List all groups recursively, avoiding cycles
+      -s, --string     Print 1-byte integer datasets as ASCII
+      -wN, --width=N   Set the number of columns of output
+      -v, --verbose    Generate more verbose output
+      -V, --version    Print version number and exit
+   FILE
+      The file name may include a printf(3C) integer format such as
+      "%05d" to open a file family.
+   OBJECTS
+      The names of zero or more objects about which information should be
+      displayed.  If a group is mentioned then information about each of its
+      members is displayed.  If no object names are specified then
+      information about all of the objects in the root group is displayed.
+</PRE>
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr noshade size=1>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/"><img border=0
+     src="footer-ncsalogo.gif"
+     width=78 height=27 alt="NCSA"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a><br>
+  <br>
+<!-- <A HREF="helpdesk.mail.html"> -->
+<A HREF="mailto:hdfhelp at ncsa.uiuc.edu">
+hdfhelp at ncsa.uiuc.edu</A>
+<br>
+<BR> <H6>Last Modified: June 22, 2001</H6><BR>
+<!-- modified by Barbara Jones - bljones at ncsa.uiuc.edu -->
+</FONT>
+<BR>
+<!-- <A HREF="mailto:hdfhelp at ncsa.uiuc.edu"> -->
+
+</BODY>
+</HTML>
+

Added: packages/hdf5/branches/upstream/current/doc/html/Version.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/Version.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/Version.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Version Numbers</title>
+  </head>
+
+  <body>
+    <h1>Version Numbers</h1>
+
+    <h2>1. Introduction</h2>
+
+    <p>The HDF5 version number is a set of three integer values
+      written as either <code>hdf5-1.2.3</code> or <code>hdf5 version
+      1.2 release 3</code>.
+
+    <p>The <code>5</code> is part of the library name and will only
+      change if the entire file format and library are redesigned
+      similar in scope to the changes between HDF4 and HDF5.
+
+    <p>The <code>1</code> is the <em>major version number</em> and
+      changes when there is an extensive change to the file format or
+      library API.  Such a change will likely require files to be
+      translated and applications to be modified.  This number is not
+      expected to change frequently.
+
+    <p>The <code>2</code> is the <em>minor version number</em> and is
+      incremented by each public release that presents new features.
+      Even numbers are reserved for stable public versions of the
+      library while odd numbers are reserved for developement
+      versions.  See the diagram below for examples.
+
+    <p>The <code>3</code> is the <em>release number</em>.  For public
+      versions of the library, the release number is incremented each
+      time a bug is fixed and the fix is made available to the public.
+      For development versions, the release number is incremented more 
+      often (perhaps almost daily).
+
+    <h2>2. Abbreviated Versions</h2>
+
+    <p>It's often convenient to drop the release number when referring
+      to a version of the library, like saying version 1.2 of HDF5.
+      The release number can be any value in this case.
+
+    <h2>3. Special Versions</h2>
+
+    <p>Version 1.0.0 was released for alpha testing the first week of
+      March, 1998.  The developement version number was incremented to 
+      1.0.1 and remained constant until the the last week of April,
+      when the release number started to increase and development
+      versions were made available to people outside the core HDF5
+      development team.
+
+    <p>Version 1.0.23 was released mid-July as a second alpha
+      version.
+
+    <p>Version 1.1.0 will be the first official beta release but the
+      1.1 branch will also serve as a development branch since we're
+      not concerned about providing bug fixes separate from normal
+      development for the beta version.
+
+    <p>After the beta release we rolled back the version number so the
+      first release is version 1.0 and development will continue on
+      version 1.1. We felt that an initial version of 1.0 was more
+      important than continuing to increment the pre-release version
+      numbers.
+
+    <h2>4. Public versus Development</h2>
+
+    <p>The motivation for separate public and development versions is
+      that the public version will receive only bug fixes while the
+      development version will receive new features.  This also allows 
+      us to release bug fixes expediently without waiting for the
+      development version to reach a stable state.
+
+    <p>Eventually, the development version will near completion and a
+      new development branch will fork while the original one enters a 
+      feature freeze state.  When the original development branch is
+      ready for release the minor version number will be incremented
+      to an even value.
+
+    <p>
+      <center>
+	<img alt="Version Example" src="version.gif">
+	<br><b>Fig 1: Version Example</b>
+      </center>
+
+    <h2>5. Version Support from the Library</h2>
+
+    <p>The library provides a set of macros and functions to query and 
+      check version numbers.
+
+    <dl>
+      <dt><code>H5_VERS_MAJOR</code>
+      <dt><code>H5_VERS_MINOR</code>
+      <dt><code>H5_VERS_RELEASE</code>
+      <dd>These preprocessor constants are defined in the public
+	include file and determine the version of the include files.
+
+	<br><br>
+      <dt><code>herr_t H5get_libversion (unsigned *<em>majnum</em>, unsigned
+	  *<em>minnum</em>, unsigned *<em>relnum</em>)</code>
+      <dd>This function returns through its arguments the version
+	numbers for the library to which the application is linked.
+
+	<br><br>
+      <dt><code>void H5check(void)</code>
+      <dd>This is a macro that verifies that the version number of the 
+	HDF5 include file used to compile the application matches the
+	version number of the library to which the application is
+	linked.  This check occurs automatically when the first HDF5
+	file is created or opened and is important because a mismatch
+	between the include files and the library is likely to result
+	in corrupted data and/or segmentation faults.  If a mismatch
+	is detected the library issues an error message on the
+	standard error stream and aborts with a core dump.
+
+	<br><br>
+      <dt><code>herr_t H5check_version (unsigned <em>majnum</em>,
+	  unsigned <em>minnum</em>, unsigned <em>relnum</em>)</code>
+      <dd>This function is called by the <code>H5check()</code> macro
+	with the include file version constants.  The function
+	compares its arguments to the result returned by
+	<code>H5get_libversion()</code> and if a mismatch is detected prints
+	an error message on the standard error stream and aborts.
+    </dl>
+
+<hr>
+<address><a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a></address>
+<br>
+
+<!-- Created: Wed Apr 22 11:24:40 EDT 1998 -->
+<!-- hhmts start -->
+Last modified: Fri Oct 30 10:32:50 EST 1998
+<!-- hhmts end -->
+
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/chunk1.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/chunk1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/compat.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/compat.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/compat.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,271 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+  <head>
+    <title>Backward/Forward Compatability</title>
+  </head>
+
+  <body>
+    <h1>Backward/Forward Compatability</h1>
+
+    <p>The HDF5 development must proceed in such a manner as to
+      satisfy the following conditions:
+
+    <ol type=A>
+      <li>HDF5 applications can produce data that HDF5
+	applications can read and write and HDF4 applications can produce
+	data that HDF4 applications can read and write. The situation
+	that demands this condition is obvious.</li>
+
+      <li>HDF5 applications are able to produce data that HDF4 applications
+	can read and HDF4 applications can subsequently modify the
+	file subject to certain constraints depending on the
+	implementation. This condition is for the temporary
+	situation where a consumer has neither been relinked with a new
+	HDF4 API built on top of the HDF5 API nor recompiled with the
+	HDF5 API.</li>
+
+      <li>HDF5 applications can read existing HDF4 files and subsequently
+	modify the file subject to certain constraints depending on
+	the implementation. This is condition is for the temporary
+	situation in which the producer has neither been relinked with a
+	new HDF4 API built on top of the HDF5 API nor recompiled with
+	the HDF5 API, or the permanent situation of HDF5 consumers
+	reading archived HDF4 files.</li>
+    </ul>
+
+    <p>There's at least one invarient: new object features introduced
+      in the HDF5 file format (like 2-d arrays of structs) might be
+      impossible to "translate" to a format that an old HDF4
+      application can understand either because the HDF4 file format
+      or the HDF4 API has no mechanism to describe the object.
+
+    <p>What follows is one possible implementation based on how
+      Condition B was solved in the AIO/PDB world.  It also attempts
+      to satisfy these goals:
+
+    <ol type=1>
+      <li>The main HDF5 library contains as little extra baggage as
+	possible by either relying on external programs to take care
+	of compatability issues or by incorporating the logic of such
+	programs as optional modules in the HDF5 library.  Conditions B
+	and C are separate programs/modules.</li>
+
+      <li>No extra baggage not only means the library proper is small,
+	but also means it can be implemented (rather than migrated
+	from HDF4 source) from the ground up with minimal regard for
+	HDF4 thus keeping the logic straight forward.</li>
+
+      <li>Compatability issues are handled behind the scenes when
+	necessary (and possible) but can be carried out explicitly
+	during things like data migration.</li>
+    </ol>
+
+    <hr>
+    <h2>Wrappers</h2>
+
+    <p>The proposed implementation uses <i>wrappers</i> to handle
+      compatability issues.  A Format-X file is <i>wrapped</i> in a
+      Format-Y file by creating a Format-Y skeleton that replicates
+      the Format-X meta data.  The Format-Y skeleton points to the raw
+      data stored in Format-X without moving the raw data.  The
+      restriction is that raw data storage methods in Format-Y is a
+      superset of raw data storage methods in Format-X (otherwise the
+      raw data must be copied to Format-Y).  We're assuming that meta
+      data is small wrt the entire file.
+
+    <p>The wrapper can be a separate file that has pointers into the
+      first file or it can be contained within the first file.  If
+      contained in a single file, the file can appear as a Format-Y
+      file or simultaneously a Format-Y and Format-X file.
+
+    <p>The Format-X meta-data can be thought of as the original
+      wrapper around raw data and Format-Y is a second wrapper around
+      the same data.  The wrappers are independend of one another;
+      modifying the meta-data in one wrapper causes the other to
+      become out of date.  Modification of raw data doesn't invalidate
+      either view as long as the meta data that describes its storage
+      isn't modifed. For instance, an array element can change values
+      if storage is already allocated for the element, but if storage
+      isn't allocated then the meta data describing the storage must
+      change, invalidating all wrappers but one.
+
+    <p>It's perfectly legal to modify the meta data of one wrapper
+      without modifying the meta data in the other wrapper(s).  The
+      illegal part is accessing the raw data through a wrapper which
+      is out of date.
+
+    <p>If raw data is wrapped by more than one internal wrapper
+      (<i>internal</i> means that the wrapper is in the same file as
+      the raw data) then access to that file must assume that
+      unreferenced parts of that file contain meta data for another
+      wrapper and cannot be reclaimed as free memory.
+
+    <hr>
+    <h2>Implementation of Condition B</h2>
+
+    <p>Since this is a temporary situation which can't be
+      automatically detected by the HDF5 library, we must rely
+      on the application to notify the HDF5 library whether or not it
+      must satisfy Condition B. (Even if we don't rely on the
+      application, at some point someone is going to remove the
+      Condition B constraint from the library.)  So the module that
+      handles Condition B is conditionally compiled and then enabled
+      on a per-file basis.
+
+    <p>If the application desires to produce an HDF4 file (determined
+      by arguments to <code>H5Fopen</code>), and the Condition B
+      module is compiled into the library, then <code>H5Fclose</code>
+      calls the module to traverse the HDF5 wrapper and generate an
+      additional internal or external HDF4 wrapper (wrapper specifics
+      are described below).  If Condition B is implemented as a module
+      then it can benefit from the metadata already cached by the main
+      library.
+
+    <p>An internal HDF4 wrapper would be used if the HDF5 file is
+      writable and the user doesn't mind that the HDF5 file is
+      modified.  An external wrapper would be used if the file isn't
+      writable or if the user wants the data file to be primarily HDF5
+      but a few applications need an HDF4 view of the data.
+
+    <p>Modifying through the HDF5 library an HDF5 file that has
+      internal HDF4 wrapper should invalidate the HDF4 wrapper (and
+      optionally regenerate it when <code>H5Fclose</code> is
+      called). The HDF5 library must understand how wrappers work, but
+      not necessarily anything about the HDF4 file format.
+
+    <p>Modifying through the HDF5 library an HDF5 file that has an
+      external HDF4 wrapper will cause the HDF4 wrapper to become out
+      of date (but possibly regenerated during <code>H5Fclose</code>).
+      <b>Note:  Perhaps the next release of the HDF4 library should
+      insure that the HDF4 wrapper file has a more recent modification
+      time than the raw data file (the HDF5 file) to which it
+      points(?)</b>
+
+    <p>Modifying through the HDF4 library an HDF5 file that has an
+      internal or external HDF4 wrapper will cause the HDF5 wrapper to
+      become out of date. However, there is now way for the old HDF4
+      library to notify the HDF5 wrapper that it's out of date.
+      Therefore the HDF5 library must be able to detect when the HDF5
+      wrapper is out of date and be able to fix it. If the HDF4
+      wrapper is complete then the easy way is to ignore the original
+      HDF5 wrapper and generate a new one from the HDF4 wrapper. The
+      other approach is to compare the HDF4 and HDF5 wrappers and
+      assume that if they differ HDF4 is the right one, if HDF4 omits
+      data then it was because HDF4 is a partial wrapper (rather than
+      assume HDF4 deleted the data), and if HDF4 has new data then
+      copy the new meta data to the HDF5 wrapper. On the other hand,
+      perhaps we don't need to allow these situations (modifying an
+      HDF5 file with the old HDF4 library and then accessing it with
+      the HDF5 library is either disallowed or causes HDF5 objects
+      that can't be described by HDF4 to be lost).
+
+    <p>To convert an HDF5 file to an HDF4 file on demand, one simply
+      opens the file with the HDF4 flag and closes it. This is also
+      how AIO implemented backward compatability with PDB in its file
+      format.
+
+    <hr>
+    <h2>Implementation of Condition C</h2>
+
+    <p>This condition must be satisfied for all time because there
+      will always be archived HDF4 files. If a pure HDF4 file (that
+      is, one without HDF5 meta data) is opened with an HDF5 library,
+      the <code>H5Fopen</code> builds an internal or external HDF5
+      wrapper and then accesses the raw data through that wrapper. If
+      the HDF5 library modifies the file then the HDF4 wrapper becomes
+      out of date.  However, since the HDF5 library hasn't been
+      released, we can at least implement it to disable and/or reclaim
+      the HDF4 wrapper.
+
+    <p>If an external and temporary HDF5 wrapper is desired, the
+      wrapper is created through the cache like all other HDF5 files.
+      The data appears on disk only if a particular cached datum is
+      preempted. Instead of calling <code>H5Fclose</code> on the HDF5
+      wrapper file we call <code>H5Fabort</code> which immediately
+      releases all file resources without updating the file, and then
+      we unlink the file from Unix.
+
+    <hr>
+    <h2>What do wrappers look like?</h2>
+
+    <p>External wrappers are quite obvious: they contain only things
+      from the format specs for the wrapper and nothing from the
+      format specs of the format which they wrap.
+
+    <p>An internal HDF4 wrapper is added to an HDF5 file in such a way
+      that the file appears to be both an HDF4 file and an HDF5
+      file. HDF4 requires an HDF4 file header at file offset zero. If
+      a user block is present then we just move the user block down a
+      bit (and truncate it) and insert the minimum HDF4 signature.
+      The HDF4 <code>dd</code> list and any other data it needs are
+      appended to the end of the file and the HDF5 signature uses the
+      logical file length field to determine the beginning of the
+      trailing part of the wrapper.
+
+    <p>
+      <center>
+	<table border width="60%">
+	  <tr>
+	    <td>HDF4 minimal file header. Its main job is to point to
+	      the <code>dd</code> list at the end of the file.</td>
+	  </tr>
+	  <tr>
+	    <td>User-defined block which is truncated by the size of the
+	      HDF4 file header so that the HDF5 super block file address
+	      doesn't change.</td>
+	  </tr>
+	  <tr>
+	    <td>The HDF5 super block and data, unmodified by adding the
+	      HDF4 wrapper.</td>
+	  </tr>
+	  <tr>
+	    <td>The main part of the HDF4 wrapper.  The <code>dd</code>
+	      list will have entries for all parts of the file so
+	      hdpack(?) doesn't (re)move anything.</td>
+	  </tr>
+	</table>
+      </center>
+    
+    <p>When such a file is opened by the HDF5 library for
+      modification it shifts the user block back down to address zero
+      and fills with zeros, then truncates the file at the end of the
+      HDF5 data or adds the trailing HDF4 wrapper to the free
+      list. This prevents HDF4 applications from reading the file with
+      an out of date wrapper.
+
+    <p>If there is no user block then we have a problem.  The HDF5
+      super block must be moved to make room for the HDF4 file header.
+      But moving just the super block causes problems because all file
+      addresses stored in the file are relative to the super block
+      address.  The only option is to shift the entire file contents
+      by 512 bytes to open up a user block (too bad we don't have
+      hooks into the Unix i-node stuff so we could shift the entire
+      file contents by the size of a file system page without ever
+      performing I/O on the file :-)
+
+    <p>Is it possible to place an HDF5 wrapper in an HDF4 file?  I
+      don't know enough about the HDF4 format, but I would suspect it
+      might be possible to open a hole at file address 512 (and
+      possibly before) by moving some things to the end of the file
+      to make room for the HDF5 signature.  The remainder of the HDF5
+      wrapper goes at the end of the file and entries are added to the
+      HDF4 <code>dd</code> list to mark the location(s) of the HDF5
+      wrapper.
+
+    <hr>
+    <h2>Other Thoughts</h2>
+
+    <p>Conversion programs that copy an entire HDF4 file to a separate,
+      self-contained HDF5 file and vice versa might be useful.
+
+
+
+
+    <hr>
+    <address><a href="mailto:matzke at llnl.gov">Robb Matzke</a></address>
+<!-- Created: Fri Oct  3 11:52:31 EST 1997 -->
+<!-- hhmts start -->
+Last modified: Wed Oct  8 12:34:42 EST 1997
+<!-- hhmts end -->
+  </body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus/Dependencies
===================================================================

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,32 @@
+# HDF5 Library Makefile(.in)
+#
+# 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.
+#
+# 
+top_srcdir=@top_srcdir@
+top_builddir=../../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+SUBDIRS=
+DOCDIR=$(docdir)/hdf5/cpplus
+
+# Public doc files (to be installed)...
+PUB_DOCS=
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/Dependencies
===================================================================

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AbstractDs_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AbstractDs_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AbstractDs_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,345 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5AbstractDs.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AbstractDs_8h-source.html">H5AbstractDs.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Alltypes_8h-source.html">H5Alltypes.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AbstractDs_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AbstractDs_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AbstractDs_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,411 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5AbstractDs.h</h1><a href="H5AbstractDs_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="comment">// Class AbstractDs is an abstract base class, from which Attribute and</span>
+00017 <span class="comment">// DataSet inherit.  It provides the services that are common to both</span>
+00018 <span class="comment">// Attribute and DataSet.  It also inherits from H5Object and passes down</span>
+00019 <span class="comment">// the services that H5Object provides.</span>
+00020 
+00021 <span class="preprocessor">#ifndef _AbstractDs_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define _AbstractDs_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00025 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00026 <span class="preprocessor">#endif</span>
+00027 <span class="preprocessor"></span><span class="keyword">class </span>ArrayType;
+00028 <span class="keyword">class </span>CompType;
+00029 <span class="keyword">class </span>EnumType;
+00030 <span class="keyword">class </span>FloatType;
+00031 <span class="keyword">class </span>IntType;
+00032 <span class="keyword">class </span>StrType;
+00033 <span class="keyword">class </span>VarLenType;
+<a name="l00034"></a><a class="code" href="classH5_1_1AbstractDs.html">00034</a> <span class="keyword">class </span>H5_DLLCPP AbstractDs : <span class="keyword">public</span> <a class="code" href="classH5_1_1H5Object.html">H5Object</a> {
+00035    <span class="keyword">public</span>:
+00036         <span class="comment">// Gets a copy the datatype of that this abstract dataset uses.</span>
+00037         <span class="comment">// Note that this datatype is a generic one and can only be accessed</span>
+00038         <span class="comment">// via generic member functions, i.e., member functions belong</span>
+00039         <span class="comment">// to DataType.  To get specific datatype, i.e. EnumType, FloatType,</span>
+00040         <span class="comment">// etc..., use the specific functions, that follow, instead .</span>
+00041         <a class="code" href="classH5_1_1DataType.html">DataType</a> getDataType() <span class="keyword">const</span>;
+00042 
+00043         <span class="comment">// Gets a copy of the specific datatype of this abstract dataset</span>
+00044         <a class="code" href="classH5_1_1ArrayType.html">ArrayType</a> getArrayType() <span class="keyword">const</span>;
+00045         <a class="code" href="classH5_1_1CompType.html">CompType</a> getCompType() <span class="keyword">const</span>;
+00046         <a class="code" href="classH5_1_1EnumType.html">EnumType</a> getEnumType() <span class="keyword">const</span>;
+00047         <a class="code" href="classH5_1_1FloatType.html">FloatType</a> getFloatType() <span class="keyword">const</span>;
+00048         <a class="code" href="classH5_1_1IntType.html">IntType</a> getIntType() <span class="keyword">const</span>;
+00049         <a class="code" href="classH5_1_1StrType.html">StrType</a> getStrType() <span class="keyword">const</span>;
+00050         <a class="code" href="classH5_1_1VarLenType.html">VarLenType</a> getVarLenType() <span class="keyword">const</span>;
+00051 
+00052         <span class="comment">// Gets the dataspace of this abstract dataset - pure virtual</span>
+00053         <span class="keyword">virtual</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a> getSpace() <span class="keyword">const </span>= 0;
+00054 
+00055         <span class="comment">// Gets the class of the datatype that is used by this abstract</span>
+00056         <span class="comment">// dataset</span>
+00057         H5T_class_t getTypeClass() <span class="keyword">const</span>;
+00058 
+00059         <span class="comment">// Returns the amount of storage size required for this abstract</span>
+00060         <span class="comment">// dataset - pure virtual.</span>
+00061         <span class="keyword">virtual</span> hsize_t getStorageSize() <span class="keyword">const </span>= 0;
+00062 
+00063         <span class="comment">// Copy constructor</span>
+00064         AbstractDs( <span class="keyword">const</span> AbstractDs&amp; original );
+00065 
+00066         <span class="keyword">virtual</span> ~AbstractDs();
+00067 
+00068    <span class="keyword">protected</span>:
+00069         <span class="comment">// Default constructor</span>
+00070         AbstractDs();
+00071 
+00072         <span class="comment">// Constructor that takes an attribute id or a dataset id.</span>
+00073         AbstractDs( <span class="keyword">const</span> hid_t ds_id );
+00074 
+00075    <span class="keyword">private</span>:
+00076         <span class="comment">// This member function is implemented by DataSet and Attribute.</span>
+00077         <span class="keyword">virtual</span> hid_t p_get_type() <span class="keyword">const </span>= 0;
+00078 };
+00079 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00080 <span class="preprocessor"></span>}
+00081 <span class="preprocessor">#endif</span>
+00082 <span class="preprocessor"></span><span class="preprocessor">#endif // _AbstractDs_H</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AbstractDs_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AbstractDs_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AbstractDs_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5AbstractDs.h File Reference</h1>
+<p>
+<a href="H5AbstractDs_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Alltypes_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Alltypes_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Alltypes_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,357 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Alltypes.h</h1><a href="H5Alltypes_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="comment">// This header file simply serves as a container to hold the</span>
+00017 <span class="comment">// header files of all datatypes.  It simplifies the header</span>
+00018 <span class="comment">// file including in the code.</span>
+00019 
+00020 <span class="preprocessor">#include "<a class="code" href="H5DataType_8h.html">H5DataType.h</a>"</span>
+00021 <span class="preprocessor">#include "<a class="code" href="H5AtomType_8h.html">H5AtomType.h</a>"</span>
+00022 <span class="preprocessor">#include "<a class="code" href="H5EnumType_8h.html">H5EnumType.h</a>"</span>
+00023 <span class="preprocessor">#include "<a class="code" href="H5IntType_8h.html">H5IntType.h</a>"</span>
+00024 <span class="preprocessor">#include "<a class="code" href="H5FloatType_8h.html">H5FloatType.h</a>"</span>
+00025 <span class="preprocessor">#include "<a class="code" href="H5StrType_8h.html">H5StrType.h</a>"</span>
+00026 <span class="preprocessor">#include "<a class="code" href="H5CompType_8h.html">H5CompType.h</a>"</span>
+00027 <span class="preprocessor">#include "<a class="code" href="H5ArrayType_8h.html">H5ArrayType.h</a>"</span>
+00028 <span class="preprocessor">#include "<a class="code" href="H5VarLenType_8h.html">H5VarLenType.h</a>"</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Alltypes_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Alltypes_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Alltypes_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,343 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Alltypes.h File Reference</h1><code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AtomType_8h-source.html">H5AtomType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5EnumType_8h-source.html">H5EnumType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IntType_8h-source.html">H5IntType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5FloatType_8h-source.html">H5FloatType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5StrType_8h-source.html">H5StrType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CompType_8h-source.html">H5CompType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5ArrayType_8h-source.html">H5ArrayType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5VarLenType_8h-source.html">H5VarLenType.h</a>"</code><br>
+
+<p>
+<a href="H5Alltypes_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5ArrayType_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5ArrayType_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5ArrayType_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,345 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5ArrayType.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5ArrayType_8h-source.html">H5ArrayType.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5ArrayType_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5ArrayType_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5ArrayType_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,389 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5ArrayType.h</h1><a href="H5ArrayType_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="comment">// Class ArrayType inherits from DataType and provides wrappers for the</span>
+00017 <span class="comment">// HDF5 C's Array Datatypes.</span>
+00018 
+00019 <span class="preprocessor">#ifndef _H5ArrayType_H</span>
+00020 <span class="preprocessor"></span><span class="preprocessor">#define _H5ArrayType_H</span>
+00021 <span class="preprocessor"></span>
+00022 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00023 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00024 <span class="preprocessor">#endif</span>
+<a name="l00025"></a><a class="code" href="classH5_1_1ArrayType.html">00025</a> <span class="preprocessor"></span><span class="keyword">class </span>H5_DLLCPP ArrayType : <span class="keyword">public</span> <a class="code" href="classH5_1_1DataType.html">DataType</a> {
+00026    <span class="keyword">public</span>:
+00027         <span class="comment">// Constructor that creates a new array data type based on the</span>
+00028         <span class="comment">// specified base type.</span>
+00029         ArrayType(<span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; base_type, <span class="keywordtype">int</span> ndims, <span class="keyword">const</span> hsize_t* dims);
+00030 
+00031         <span class="comment">// Returns the number of dimensions of this array datatype.</span>
+00032         <span class="keywordtype">int</span> getArrayNDims();
+00033 
+00034         <span class="comment">// Returns the sizes of dimensions of this array datatype.</span>
+00035         <span class="keywordtype">int</span> getArrayDims(hsize_t* dims);
+00036 
+00037         <span class="comment">// Returns this class name</span>
+<a name="l00038"></a><a class="code" href="classH5_1_1ArrayType.html#a3">00038</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="stringliteral">"ArrayType"</span>); }
+00039 
+00040         <span class="comment">// Copy constructor: makes copy of the original object.</span>
+00041         ArrayType( <span class="keyword">const</span> ArrayType&amp; original );
+00042 
+00043         <span class="comment">// Constructor that takes an existing id</span>
+00044         ArrayType( <span class="keyword">const</span> hid_t existing_id );
+00045 
+00046         <span class="comment">// Noop destructor</span>
+00047         <span class="keyword">virtual</span> ~ArrayType();
+00048 
+00049    <span class="keyword">protected</span>:
+00050         <span class="comment">// Default constructor</span>
+00051         ArrayType();
+00052 
+00053    <span class="keyword">private</span>:
+00054         <span class="keywordtype">int</span> rank;               <span class="comment">// Rank of the array</span>
+00055         hsize_t* dimensions;    <span class="comment">// Sizes of the array dimensions</span>
+00056 };
+00057 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00058 <span class="preprocessor"></span>}
+00059 <span class="preprocessor">#endif</span>
+00060 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5ArrayType_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5ArrayType_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5ArrayType_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5ArrayType.h File Reference</h1>
+<p>
+<a href="H5ArrayType_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AtomType_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AtomType_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AtomType_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,345 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5AtomType.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AtomType_8h-source.html">H5AtomType.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AtomType_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AtomType_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AtomType_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,408 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5AtomType.h</h1><a href="H5AtomType_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="comment">// Class AtomType is a base class, from which IntType, FloatType, StrType,</span>
+00017 <span class="comment">// and PredType inherit.  It provides the services that are common to these</span>
+00018 <span class="comment">// subclasses.  It also inherits from DataType and passes down the</span>
+00019 <span class="comment">// services that are common to all the datatypes.</span>
+00020 
+00021 <span class="preprocessor">#ifndef _H5AtomType_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define _H5AtomType_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00025 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00026 <span class="preprocessor">#endif</span>
+<a name="l00027"></a><a class="code" href="classH5_1_1AtomType.html">00027</a> <span class="preprocessor"></span><span class="keyword">class </span>H5_DLLCPP AtomType : <span class="keyword">public</span> <a class="code" href="classH5_1_1DataType.html">DataType</a> {
+00028    <span class="keyword">public</span>:
+00029         <span class="comment">// Returns the byte order of an atomic datatype.</span>
+00030         H5T_order_t getOrder() <span class="keyword">const</span>;
+00031         H5T_order_t getOrder( string&amp; order_string ) <span class="keyword">const</span>;
+00032 
+00033         <span class="comment">// Sets the byte ordering of an atomic datatype.</span>
+00034         <span class="keywordtype">void</span> setOrder( H5T_order_t order ) <span class="keyword">const</span>;
+00035 
+00036         <span class="comment">// Retrieves the bit offset of the first significant bit.</span>
+00037         <span class="comment">// 12/05/00 - changed return type to int from size_t - C API</span>
+00038         <span class="keywordtype">int</span> getOffset() <span class="keyword">const</span>;
+00039 
+00040         <span class="comment">// Sets the bit offset of the first significant bit.</span>
+00041         <span class="keywordtype">void</span> setOffset( size_t offset ) <span class="keyword">const</span>;
+00042 
+00043         <span class="comment">// Retrieves the padding type of the least and most-significant bit padding.</span>
+00044         <span class="keywordtype">void</span> getPad( H5T_pad_t&amp; lsb, H5T_pad_t&amp; msb ) <span class="keyword">const</span>;
+00045 
+00046         <span class="comment">// Sets the least and most-significant bits padding types</span>
+00047         <span class="keywordtype">void</span> setPad( H5T_pad_t lsb, H5T_pad_t msb ) <span class="keyword">const</span>;
+00048 
+00049         <span class="comment">// Returns the precision of an atomic datatype.</span>
+00050         size_t getPrecision() <span class="keyword">const</span>;
+00051 
+00052         <span class="comment">// Sets the precision of an atomic datatype.</span>
+00053         <span class="keywordtype">void</span> setPrecision( size_t precision ) <span class="keyword">const</span>;
+00054 
+00055         <span class="comment">// Sets the total size for an atomic datatype.</span>
+00056         <span class="keywordtype">void</span> setSize( size_t size ) <span class="keyword">const</span>;
+00057 
+00058         <span class="comment">// Returns this class name</span>
+<a name="l00059"></a><a class="code" href="classH5_1_1AtomType.html#a10">00059</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span>(<span class="stringliteral">"AtomType"</span>); }
+00060 
+00061         <span class="comment">// Copy constructor - makes copy of the original object</span>
+00062         AtomType( <span class="keyword">const</span> AtomType&amp; original );
+00063 
+00064         <span class="comment">// Noop destructor</span>
+00065         <span class="keyword">virtual</span> ~AtomType();
+00066 
+00067    <span class="keyword">protected</span>:
+00068 <span class="preprocessor">#ifndef DOXYGEN_SHOULD_SKIP_THIS</span>
+00069 <span class="preprocessor"></span>        <span class="comment">// Default constructor</span>
+00070         AtomType();
+00071 
+00072         <span class="comment">// Constructor that takes an existing id</span>
+00073         AtomType( <span class="keyword">const</span> hid_t existing_id );
+00074 <span class="preprocessor">#endif // DOXYGEN_SHOULD_SKIP_THIS</span>
+00075 <span class="preprocessor"></span>};
+00076 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00077 <span class="preprocessor"></span>}
+00078 <span class="preprocessor">#endif</span>
+00079 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AtomType_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AtomType_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5AtomType_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5AtomType.h File Reference</h1>
+<p>
+<a href="H5AtomType_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Attribute_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Attribute_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Attribute_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,348 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Attribute.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include &lt;iostream&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AbstractDs_8h-source.html">H5AbstractDs.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Attribute_8h-source.html">H5Attribute.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Attribute_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Attribute_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Attribute_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,407 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Attribute.h</h1><a href="H5Attribute_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5Attribute_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5Attribute_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>
+<a name="l00023"></a><a class="code" href="classH5_1_1Attribute.html">00023</a> <span class="keyword">class </span>H5_DLLCPP Attribute : <span class="keyword">public</span> <a class="code" href="classH5_1_1AbstractDs.html">AbstractDs</a> {
+00024    <span class="keyword">public</span>:
+00025         <span class="comment">// Gets the name of this attribute.</span>
+00026         ssize_t getName( size_t buf_size, string&amp; attr_name ) <span class="keyword">const</span>;
+00027         string getName( size_t buf_size ) <span class="keyword">const</span>; <span class="comment">// returns name, not its length</span>
+00028         string getName() <span class="keyword">const</span>; <span class="comment">// returns name, no argument</span>
+00029 
+00030         <span class="comment">// Gets a copy of the dataspace for this attribute.</span>
+00031         <span class="keyword">virtual</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a> getSpace() <span class="keyword">const</span>;
+00032 
+00033         <span class="comment">// Returns the amount of storage size required for this attribute.</span>
+00034         <span class="keyword">virtual</span> hsize_t getStorageSize() <span class="keyword">const</span>;
+00035 
+00036         <span class="comment">// Reads data from this attribute.</span>
+00037         <span class="keywordtype">void</span> read( <span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; mem_type, <span class="keywordtype">void</span> *buf ) <span class="keyword">const</span>;
+00038         <span class="keywordtype">void</span> read( <span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; mem_type, string&amp; strg ) <span class="keyword">const</span>;
+00039 
+00040         <span class="comment">// Writes data to this attribute.</span>
+00041         <span class="keywordtype">void</span> write(<span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; mem_type, <span class="keyword">const</span> <span class="keywordtype">void</span> *buf ) <span class="keyword">const</span>;
+00042         <span class="keywordtype">void</span> write(<span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; mem_type, <span class="keyword">const</span> string&amp; strg ) <span class="keyword">const</span>;
+00043 
+00044         <span class="comment">// Returns this class name</span>
+<a name="l00045"></a><a class="code" href="classH5_1_1Attribute.html#a9">00045</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span>(<span class="stringliteral">"Attribute"</span>); }
+00046 
+00047         <span class="comment">// Creates a copy of an existing attribute using the attribute id</span>
+00048         Attribute( <span class="keyword">const</span> hid_t attr_id );
+00049 
+00050         <span class="comment">// Copy constructor: makes a copy of an existing Attribute object.</span>
+00051         Attribute( <span class="keyword">const</span> Attribute&amp; original );
+00052 
+00053         <span class="comment">// Default constructor</span>
+00054         Attribute();
+00055 
+00056         <span class="comment">// Close this attribute.</span>
+00057         <span class="keyword">virtual</span> <span class="keywordtype">void</span> close();
+00058 
+00059         <span class="comment">// Destructor: properly terminates access to this attribute.</span>
+00060         <span class="keyword">virtual</span> ~Attribute();
+00061 
+00062    <span class="keyword">private</span>:
+00063         <span class="comment">// This function contains the common code that is used by</span>
+00064         <span class="comment">// getTypeClass and various API functions getXxxType</span>
+00065         <span class="comment">// defined in AbstractDs for generic datatype and specific</span>
+00066         <span class="comment">// sub-types</span>
+00067         <span class="keyword">virtual</span> hid_t p_get_type() <span class="keyword">const</span>;
+00068 
+00069         <span class="comment">// do not inherit 'iterateAttrs' from H5Object</span>
+00070         <span class="keywordtype">int</span> iterateAttrs() { <span class="keywordflow">return</span> 0; }
+00071 
+00072         <span class="comment">// do not inherit 'rename' from H5Object</span>
+00073         <span class="keywordtype">void</span> rename() {}
+00074 };
+00075 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00076 <span class="preprocessor"></span>}
+00077 <span class="preprocessor">#endif</span>
+00078 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Attribute_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Attribute_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Attribute_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Attribute.h File Reference</h1>
+<p>
+<a href="H5Attribute_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Classes_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Classes_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Classes_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,380 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Classes.h</h1><a href="H5Classes_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5Classes_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5Classes_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>        <span class="keyword">class </span>Exception;
+00023         <span class="keyword">class </span>ReferenceCounter;
+00024         <span class="keyword">class </span>IdComponent;
+00025         <span class="keyword">class </span>H5Object;
+00026         <span class="keyword">class </span>PropList;
+00027         <span class="keyword">class </span>FileCreatPropList;
+00028         <span class="keyword">class </span>FileAccPropList;
+00029         <span class="keyword">class </span>DSetCreatPropList;
+00030         <span class="keyword">class </span>DSetMemXferPropList;
+00031         <span class="keyword">class </span>DTypePropList;
+00032         <span class="keyword">class </span>DataType;
+00033         <span class="keyword">class </span>DataSpace;
+00034         <span class="keyword">class </span>AtomType;
+00035         <span class="keyword">class </span>PredType;
+00036         <span class="keyword">class </span>EnumType;
+00037         <span class="keyword">class </span>IntType;
+00038         <span class="keyword">class </span>FloatType;
+00039         <span class="keyword">class </span>StrType;
+00040         <span class="keyword">class </span>CompType;
+00041         <span class="comment">//class RefType;</span>
+00042         <span class="keyword">class </span>AbstractDs;
+00043         <span class="keyword">class </span>DataSet;
+00044         <span class="keyword">class </span>Group;
+00045         <span class="keyword">class </span>H5File;
+00046         <span class="keyword">class </span>Attribute;
+00047         <span class="keyword">class </span>H5Library;
+00048 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00049 <span class="preprocessor"></span>}
+00050 <span class="preprocessor">#endif</span>
+00051 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Classes_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Classes_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Classes_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Classes.h File Reference</h1>
+<p>
+<a href="H5Classes_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CommonFG_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CommonFG_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CommonFG_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,352 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5CommonFG.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5FaccProp_8h-source.html">H5FaccProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5FcreatProp_8h-source.html">H5FcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DxferProp_8h-source.html">H5DxferProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Group_8h-source.html">H5Group.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AbstractDs_8h-source.html">H5AbstractDs.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSet_8h-source.html">H5DataSet.h</a>"</code><br>
+<code>#include "<a class="el" href="H5File_8h-source.html">H5File.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Alltypes_8h-source.html">H5Alltypes.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CommonFG_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CommonFG_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CommonFG_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,493 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5CommonFG.h</h1><a href="H5CommonFG_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="comment">// CommonFG is a protocol class.  Its existence is simply to provide the</span>
+00017 <span class="comment">// common services that are provided by H5File and Group.  The file or</span>
+00018 <span class="comment">// group in the context of this class is referred to as 'location'.</span>
+00019 
+00020 <span class="preprocessor">#ifndef _CommonFG_H</span>
+00021 <span class="preprocessor"></span><span class="preprocessor">#define _CommonFG_H</span>
+00022 <span class="preprocessor"></span>
+00023 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00024 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00025 <span class="preprocessor">#endif</span>
+00026 <span class="preprocessor"></span>
+00027 <span class="keyword">class </span>Group;
+00028 <span class="keyword">class </span>H5File;
+00029 <span class="keyword">class </span>ArrayType;
+00030 <span class="keyword">class </span>VarLenType;
+<a name="l00031"></a><a class="code" href="classH5_1_1CommonFG.html">00031</a> <span class="keyword">class </span>H5_DLLCPP CommonFG {
+00032    <span class="keyword">public</span>:
+00033         <span class="comment">// Creates a new group at this location which can be a file</span>
+00034         <span class="comment">// or another group.</span>
+00035         <a class="code" href="classH5_1_1Group.html">Group</a> createGroup(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, size_t size_hint = 0) <span class="keyword">const</span>;
+00036         <a class="code" href="classH5_1_1Group.html">Group</a> createGroup(<span class="keyword">const</span> string&amp; name, size_t size_hint = 0) <span class="keyword">const</span>;
+00037 
+00038         <span class="comment">// Opens an existing group in a location which can be a file</span>
+00039         <span class="comment">// or another group.</span>
+00040         <a class="code" href="classH5_1_1Group.html">Group</a> openGroup(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00041         <a class="code" href="classH5_1_1Group.html">Group</a> openGroup(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00042 
+00043         <span class="comment">// Creates a new dataset at this location.</span>
+00044         <a class="code" href="classH5_1_1DataSet.html">DataSet</a> createDataSet(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; data_type, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; data_space, <span class="keyword">const</span> <a class="code" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a>&amp; create_plist = <a class="code" href="classH5_1_1DSetCreatPropList.html#s0">DSetCreatPropList::DEFAULT</a>) <span class="keyword">const</span>;
+00045         <a class="code" href="classH5_1_1DataSet.html">DataSet</a> createDataSet(<span class="keyword">const</span> string&amp; name, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; data_type, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; data_space, <span class="keyword">const</span> <a class="code" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a>&amp; create_plist = <a class="code" href="classH5_1_1DSetCreatPropList.html#s0">DSetCreatPropList::DEFAULT</a>) <span class="keyword">const</span>;
+00046 
+00047         <span class="comment">// Opens an existing dataset at this location.</span>
+00048         <a class="code" href="classH5_1_1DataSet.html">DataSet</a> openDataSet(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00049         <a class="code" href="classH5_1_1DataSet.html">DataSet</a> openDataSet(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00050 
+00051         <span class="comment">// Retrieves comment for the HDF5 object specified by its name.</span>
+00052         string getComment(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00053         string getComment(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, size_t bufsize) <span class="keyword">const</span>;
+00054         string getComment(<span class="keyword">const</span> string&amp; name, size_t bufsize) <span class="keyword">const</span>;
+00055 
+00056         <span class="comment">// Removes the comment for the HDF5 object specified by its name.</span>
+00057         <span class="keywordtype">void</span> removeComment(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00058         <span class="keywordtype">void</span> removeComment(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00059 
+00060         <span class="comment">// Sets the comment for an HDF5 object specified by its name.</span>
+00061         <span class="keywordtype">void</span> setComment(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <span class="keywordtype">char</span>* comment) <span class="keyword">const</span>;
+00062         <span class="keywordtype">void</span> setComment(<span class="keyword">const</span> string&amp; name, <span class="keyword">const</span> string&amp; comment) <span class="keyword">const</span>;
+00063 
+00064         <span class="comment">// Returns the name of the HDF5 object that the symbolic link points to.</span>
+00065         string getLinkval(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, size_t size) <span class="keyword">const</span>;
+00066         string getLinkval(<span class="keyword">const</span> string&amp; name, size_t size) <span class="keyword">const</span>;
+00067 
+00068         <span class="comment">// Returns the number of objects in this group.</span>
+00069         hsize_t getNumObjs() <span class="keyword">const</span>;
+00070 
+00071         <span class="comment">// Returns information about an HDF5 object, given by its name,</span>
+00072         <span class="comment">// at this location.</span>
+00073         <span class="keywordtype">void</span> getObjinfo(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, hbool_t follow_link, H5G_stat_t&amp; statbuf) <span class="keyword">const</span>;
+00074         <span class="keywordtype">void</span> getObjinfo(<span class="keyword">const</span> string&amp; name, hbool_t follow_link, H5G_stat_t&amp; statbuf) <span class="keyword">const</span>;
+00075 
+00076         <span class="comment">// Retrieves the name of an object in this group, given the</span>
+00077         <span class="comment">// object's index.</span>
+00078         ssize_t getObjnameByIdx(hsize_t idx, string&amp; name, size_t size) <span class="keyword">const</span>;
+00079         string getObjnameByIdx(hsize_t idx) <span class="keyword">const</span>;
+00080 
+00081         <span class="comment">// Returns the type of an object in this group, given the</span>
+00082         <span class="comment">// object's index.</span>
+00083         H5G_obj_t getObjTypeByIdx(hsize_t idx) <span class="keyword">const</span>;
+00084         H5G_obj_t getObjTypeByIdx(hsize_t idx, string&amp; type_name) <span class="keyword">const</span>;
+00085 
+00086         <span class="comment">// Iterates over the elements of this group - not implemented in</span>
+00087         <span class="comment">// C++ style yet.</span>
+00088         <span class="keywordtype">int</span> iterateElems(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">int</span> *idx, H5G_iterate_t op, <span class="keywordtype">void</span> *op_data);
+00089         <span class="keywordtype">int</span> iterateElems(<span class="keyword">const</span> string&amp; name, <span class="keywordtype">int</span> *idx, H5G_iterate_t op, <span class="keywordtype">void</span> *op_data);
+00090 
+00091         <span class="comment">// Creates a link of the specified type from new_name to current_name;</span>
+00092         <span class="comment">// both names are interpreted relative to the specified location id.</span>
+00093         <span class="keywordtype">void</span> link(H5G_link_t link_type, <span class="keyword">const</span> <span class="keywordtype">char</span>* curr_name, <span class="keyword">const</span> <span class="keywordtype">char</span>* new_name) <span class="keyword">const</span>;
+00094         <span class="keywordtype">void</span> link(H5G_link_t link_type, <span class="keyword">const</span> string&amp; curr_name, <span class="keyword">const</span> string&amp; new_name) <span class="keyword">const</span>;
+00095 
+00096         <span class="comment">// Removes the specified name at this location.</span>
+00097         <span class="keywordtype">void</span> unlink(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00098         <span class="keywordtype">void</span> unlink(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00099 
+00100         <span class="comment">// Mounts the file 'child' onto this location.</span>
+00101         <span class="keywordtype">void</span> mount(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <a class="code" href="classH5_1_1H5File.html">H5File</a>&amp; child, <a class="code" href="classH5_1_1PropList.html">PropList</a>&amp; plist) <span class="keyword">const</span>;
+00102         <span class="keywordtype">void</span> mount(<span class="keyword">const</span> string&amp; name, <a class="code" href="classH5_1_1H5File.html">H5File</a>&amp; child, <a class="code" href="classH5_1_1PropList.html">PropList</a>&amp; plist) <span class="keyword">const</span>;
+00103 
+00104         <span class="comment">// Unmounts the file named 'name' from this parent location.</span>
+00105         <span class="keywordtype">void</span> unmount(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00106         <span class="keywordtype">void</span> unmount(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00107 
+00108         <span class="comment">// Renames an object at this location.</span>
+00109         <span class="keywordtype">void</span> move(<span class="keyword">const</span> <span class="keywordtype">char</span>* src, <span class="keyword">const</span> <span class="keywordtype">char</span>* dst) <span class="keyword">const</span>;
+00110         <span class="keywordtype">void</span> move(<span class="keyword">const</span> string&amp; src, <span class="keyword">const</span> string&amp; dst) <span class="keyword">const</span>;
+00111 
+00112         <span class="comment">// Opens a generic named datatype in this location.</span>
+00113         <a class="code" href="classH5_1_1DataType.html">DataType</a> openDataType(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00114         <a class="code" href="classH5_1_1DataType.html">DataType</a> openDataType(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00115 
+00116         <span class="comment">// Opens a named array datatype in this location.</span>
+00117         <a class="code" href="classH5_1_1ArrayType.html">ArrayType</a> openArrayType(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00118         <a class="code" href="classH5_1_1ArrayType.html">ArrayType</a> openArrayType(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00119 
+00120         <span class="comment">// Opens a named compound datatype in this location.</span>
+00121         <a class="code" href="classH5_1_1CompType.html">CompType</a> openCompType(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00122         <a class="code" href="classH5_1_1CompType.html">CompType</a> openCompType(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00123 
+00124         <span class="comment">// Opens a named enumeration datatype in this location.</span>
+00125         <a class="code" href="classH5_1_1EnumType.html">EnumType</a> openEnumType(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00126         <a class="code" href="classH5_1_1EnumType.html">EnumType</a> openEnumType(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00127 
+00128         <span class="comment">// Opens a named integer datatype in this location.</span>
+00129         <a class="code" href="classH5_1_1IntType.html">IntType</a> openIntType(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00130         <a class="code" href="classH5_1_1IntType.html">IntType</a> openIntType(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00131 
+00132         <span class="comment">// Opens a named floating-point datatype in this location.</span>
+00133         <a class="code" href="classH5_1_1FloatType.html">FloatType</a> openFloatType(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00134         <a class="code" href="classH5_1_1FloatType.html">FloatType</a> openFloatType(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00135 
+00136         <span class="comment">// Opens a named string datatype in this location.</span>
+00137         <a class="code" href="classH5_1_1StrType.html">StrType</a> openStrType(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00138         <a class="code" href="classH5_1_1StrType.html">StrType</a> openStrType(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00139 
+00140         <span class="comment">// Opens a named variable length datatype in this location.</span>
+00141         <a class="code" href="classH5_1_1VarLenType.html">VarLenType</a> openVarLenType(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00142         <a class="code" href="classH5_1_1VarLenType.html">VarLenType</a> openVarLenType(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00143 
+00146         <span class="keyword">virtual</span> hid_t getLocId() <span class="keyword">const </span>= 0;
+00147 
+00149         <span class="keyword">virtual</span> <span class="keywordtype">void</span> throwException(<span class="keyword">const</span> string func_name, <span class="keyword">const</span> string msg) <span class="keyword">const </span>= 0;
+00150 
+00151         <span class="comment">// Default constructor.</span>
+00152         CommonFG();
+00153 
+00154         <span class="comment">// Noop destructor.</span>
+00155         <span class="keyword">virtual</span> ~CommonFG();
+00156 
+00157    <span class="keyword">private</span>:
+00158         <span class="comment">// Common code for member functions openXxxType</span>
+00159         hid_t p_open_data_type(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00160 
+00161 }; <span class="comment">// end of CommonFG declaration</span>
+00162 
+00163 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00164 <span class="preprocessor"></span>}
+00165 <span class="preprocessor">#endif</span>
+00166 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00167 <span class="preprocessor"></span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CommonFG_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CommonFG_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CommonFG_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5CommonFG.h File Reference</h1>
+<p>
+<a href="H5CommonFG_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CompType_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CompType_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CompType_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,349 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5CompType.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Alltypes_8h-source.html">H5Alltypes.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AbstractDs_8h-source.html">H5AbstractDs.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DxferProp_8h-source.html">H5DxferProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSet_8h-source.html">H5DataSet.h</a>"</code><br>
+<code>#include "H5private.h"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CompType_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CompType_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CompType_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,445 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5CompType.h</h1><a href="H5CompType_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="comment">// Class CompType inherits from DataType and provides accesses to a compound</span>
+00017 <span class="comment">// datatype.</span>
+00018 
+00019 <span class="preprocessor">#ifndef _H5CompType_H</span>
+00020 <span class="preprocessor"></span><span class="preprocessor">#define _H5CompType_H</span>
+00021 <span class="preprocessor"></span>
+00022 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00023 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00024 <span class="preprocessor">#endif</span>
+00025 <span class="preprocessor"></span>
+<a name="l00026"></a><a class="code" href="classH5_1_1CompType.html">00026</a> <span class="keyword">class </span>H5_DLLCPP CompType : <span class="keyword">public</span> <a class="code" href="classH5_1_1DataType.html">DataType</a> {
+00027    <span class="keyword">public</span>:
+00028         <span class="comment">// Creates a new compound datatype, given the type's size</span>
+00029         CompType( size_t size ); <span class="comment">// H5Tcreate</span>
+00030 
+00031         <span class="comment">// Gets the compound datatype of the specified dataset</span>
+00032         CompType( <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSet.html">DataSet</a>&amp; dataset );  <span class="comment">// H5Dget_type</span>
+00033 
+00034         <span class="comment">// Returns the type class of the specified member of this compound</span>
+00035         <span class="comment">// datatype.  It provides to the user a way of knowing what type</span>
+00036         <span class="comment">// to create another datatype of the same class</span>
+00037         H5T_class_t getMemberClass( <span class="keywordtype">unsigned</span> member_num ) <span class="keyword">const</span>;
+00038 
+00039         <span class="comment">// Returns the dimensionality of the specified member.</span>
+00040         <span class="keywordtype">int</span> getMemberDims( <span class="keywordtype">unsigned</span> member_num, size_t* dims, <span class="keywordtype">int</span>* perm ) <span class="keyword">const</span>; <span class="comment">// obsolete</span>
+00041 
+00042         <span class="comment">// Returns the index of a member in this compound data type.</span>
+00043         <span class="keywordtype">int</span> getMemberIndex(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00044         <span class="keywordtype">int</span> getMemberIndex(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00045 
+00046         <span class="comment">// Returns the offset of a member of this compound datatype.</span>
+00047         size_t getMemberOffset( <span class="keywordtype">unsigned</span> memb_no ) <span class="keyword">const</span>;
+00048 
+00049         <span class="comment">// Returns the name of a member of this compound datatype.</span>
+00050         string getMemberName( <span class="keywordtype">unsigned</span> member_num ) <span class="keyword">const</span>;
+00051 
+00052         <span class="comment">// Returns the generic datatype of the specified member in</span>
+00053         <span class="comment">// this compound datatype.</span>
+00054         <a class="code" href="classH5_1_1DataType.html">DataType</a> getMemberDataType( <span class="keywordtype">unsigned</span> member_num ) <span class="keyword">const</span>;
+00055 
+00056         <span class="comment">// Returns the compound datatype of the specified member in</span>
+00057         <span class="comment">// this compound datatype.</span>
+00058         <a class="code" href="classH5_1_1ArrayType.html">ArrayType</a> getMemberArrayType( <span class="keywordtype">unsigned</span> member_num ) <span class="keyword">const</span>;
+00059 
+00060         <span class="comment">// Returns the compound datatype of the specified member in</span>
+00061         <span class="comment">// this compound datatype.</span>
+00062         CompType getMemberCompType( <span class="keywordtype">unsigned</span> member_num ) <span class="keyword">const</span>;
+00063 
+00064         <span class="comment">// Returns the enumeration datatype of the specified member in</span>
+00065         <span class="comment">// this compound datatype.</span>
+00066         <a class="code" href="classH5_1_1EnumType.html">EnumType</a> getMemberEnumType( <span class="keywordtype">unsigned</span> member_num ) <span class="keyword">const</span>;
+00067 
+00068         <span class="comment">// Returns the integer datatype of the specified member in</span>
+00069         <span class="comment">// this compound datatype.</span>
+00070         <a class="code" href="classH5_1_1IntType.html">IntType</a> getMemberIntType( <span class="keywordtype">unsigned</span> member_num ) <span class="keyword">const</span>;
+00071 
+00072         <span class="comment">// Returns the floating-point datatype of the specified member in</span>
+00073         <span class="comment">// this compound datatype.</span>
+00074         <a class="code" href="classH5_1_1FloatType.html">FloatType</a> getMemberFloatType( <span class="keywordtype">unsigned</span> member_num ) <span class="keyword">const</span>;
+00075 
+00076         <span class="comment">// Returns the string datatype of the specified member in</span>
+00077         <span class="comment">// this compound datatype.</span>
+00078         <a class="code" href="classH5_1_1StrType.html">StrType</a> getMemberStrType( <span class="keywordtype">unsigned</span> member_num ) <span class="keyword">const</span>;
+00079 
+00080         <span class="comment">// Returns the compound datatype of the specified member in</span>
+00081         <span class="comment">// this compound datatype.</span>
+00082         <a class="code" href="classH5_1_1VarLenType.html">VarLenType</a> getMemberVarLenType( <span class="keywordtype">unsigned</span> member_num ) <span class="keyword">const</span>;
+00083 
+00084         <span class="comment">// Returns the number of members in this compound datatype.</span>
+00085         <span class="keywordtype">int</span> getNmembers() <span class="keyword">const</span>;
+00086 
+00087         <span class="comment">// Adds a new member to this compound datatype.</span>
+00088         <span class="keywordtype">void</span> insertMember( <span class="keyword">const</span> string&amp; name, size_t offset, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; new_member ) <span class="keyword">const</span>;
+00089 
+00090         <span class="comment">// Recursively removes padding from within this compound datatype.</span>
+00091         <span class="keywordtype">void</span> pack() <span class="keyword">const</span>;
+00092 
+00093         <span class="comment">// Returns this class name</span>
+<a name="l00094"></a><a class="code" href="classH5_1_1CompType.html#a19">00094</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span>(<span class="stringliteral">"CompType"</span>); }
+00095 
+00096         <span class="comment">// Default constructor</span>
+00097         CompType();
+00098 
+00099         <span class="comment">// Creates a compound datatype using an existing id</span>
+00100         CompType( <span class="keyword">const</span> hid_t existing_id );
+00101 
+00102         <span class="comment">// Copy constructor - makes a copy of original object</span>
+00103         CompType( <span class="keyword">const</span> CompType&amp; original );
+00104 
+00105         <span class="comment">// Noop destructor.</span>
+00106         <span class="keyword">virtual</span> ~CompType();
+00107 
+00108    <span class="keyword">private</span>:
+00109         <span class="comment">// Contains common code that is used by the member functions</span>
+00110         <span class="comment">// getMemberXxxType</span>
+00111         hid_t p_get_member_type(<span class="keywordtype">unsigned</span> member_num) <span class="keyword">const</span>;
+00112 };
+00113 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00114 <span class="preprocessor"></span>}
+00115 <span class="preprocessor">#endif</span>
+00116 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CompType_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CompType_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CompType_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5CompType.h File Reference</h1>
+<p>
+<a href="H5CompType_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CppDoc_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CppDoc_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CppDoc_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,363 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5CppDoc.h</h1><a href="H5CppDoc_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5CPPDOC_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5CPPDOC_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="comment">//-------------------------------------------------------------------------</span>
+00020 <span class="comment">// The following section will be used to generate the 'Mainpage'</span>
+00021 <span class="comment">// and the 'Examples' for the RM.</span>
+00022 <span class="comment">// ------------------------------------------------------------------------</span>
+00023 
+00060 
+00061 
+00062 
+00063 
+00067 
+00071 
+00077 
+00081 
+00085 
+00089 
+00090 <span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CppDoc_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CppDoc_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5CppDoc_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,334 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5CppDoc.h File Reference</h1>
+<p>
+<a href="H5CppDoc_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Cpp_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Cpp_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Cpp_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,375 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Cpp.h</h1><a href="H5Cpp_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5CPP_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5CPP_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#include "<a class="code" href="H5Include_8h.html">H5Include.h</a>"</span>
+00020 <span class="preprocessor">#include "<a class="code" href="H5Exception_8h.html">H5Exception.h</a>"</span>
+00021 <span class="preprocessor">#include "<a class="code" href="H5IdComponent_8h.html">H5IdComponent.h</a>"</span>
+00022 <span class="preprocessor">#include "<a class="code" href="H5DataSpace_8h.html">H5DataSpace.h</a>"</span>
+00023 <span class="preprocessor">#include "<a class="code" href="H5PropList_8h.html">H5PropList.h</a>"</span>
+00024 <span class="preprocessor">#include "<a class="code" href="H5Object_8h.html">H5Object.h</a>"</span>
+00025 <span class="preprocessor">#include "<a class="code" href="H5AbstractDs_8h.html">H5AbstractDs.h</a>"</span>
+00026 <span class="preprocessor">#include "<a class="code" href="H5Attribute_8h.html">H5Attribute.h</a>"</span>
+00027 <span class="preprocessor">#include "<a class="code" href="H5DcreatProp_8h.html">H5DcreatProp.h</a>"</span>
+00028 <span class="preprocessor">#include "<a class="code" href="H5CommonFG_8h.html">H5CommonFG.h</a>"</span>
+00029 <span class="preprocessor">#include "<a class="code" href="H5DataType_8h.html">H5DataType.h</a>"</span>
+00030 <span class="preprocessor">#include "<a class="code" href="H5DxferProp_8h.html">H5DxferProp.h</a>"</span>
+00031 <span class="preprocessor">#include "<a class="code" href="H5FaccProp_8h.html">H5FaccProp.h</a>"</span>
+00032 <span class="preprocessor">#include "<a class="code" href="H5FcreatProp_8h.html">H5FcreatProp.h</a>"</span>
+00033 <span class="preprocessor">#include "<a class="code" href="H5AtomType_8h.html">H5AtomType.h</a>"</span>
+00034 <span class="preprocessor">#include "<a class="code" href="H5PredType_8h.html">H5PredType.h</a>"</span>
+00035 <span class="preprocessor">#include "<a class="code" href="H5EnumType_8h.html">H5EnumType.h</a>"</span>
+00036 <span class="preprocessor">#include "<a class="code" href="H5IntType_8h.html">H5IntType.h</a>"</span>
+00037 <span class="preprocessor">#include "<a class="code" href="H5FloatType_8h.html">H5FloatType.h</a>"</span>
+00038 <span class="preprocessor">#include "<a class="code" href="H5StrType_8h.html">H5StrType.h</a>"</span>
+00039 <span class="preprocessor">#include "<a class="code" href="H5CompType_8h.html">H5CompType.h</a>"</span>
+00040 <span class="preprocessor">#include "<a class="code" href="H5ArrayType_8h.html">H5ArrayType.h</a>"</span>
+00041 <span class="preprocessor">#include "<a class="code" href="H5VarLenType_8h.html">H5VarLenType.h</a>"</span>
+00042 <span class="preprocessor">#include "<a class="code" href="H5DataSet_8h.html">H5DataSet.h</a>"</span>
+00043 <span class="preprocessor">#include "<a class="code" href="H5Group_8h.html">H5Group.h</a>"</span>
+00044 <span class="preprocessor">#include "<a class="code" href="H5File_8h.html">H5File.h</a>"</span>
+00045 <span class="preprocessor">#include "<a class="code" href="H5Library_8h.html">H5Library.h</a>"</span>
+00046 <span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Cpp_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Cpp_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Cpp_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,361 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Cpp.h File Reference</h1><code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AbstractDs_8h-source.html">H5AbstractDs.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Attribute_8h-source.html">H5Attribute.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DxferProp_8h-source.html">H5DxferProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5FaccProp_8h-source.html">H5FaccProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5FcreatProp_8h-source.html">H5FcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AtomType_8h-source.html">H5AtomType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PredType_8h-source.html">H5PredType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5EnumType_8h-source.html">H5EnumType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IntType_8h-source.html">H5IntType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5FloatType_8h-source.html">H5FloatType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5StrType_8h-source.html">H5StrType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CompType_8h-source.html">H5CompType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5ArrayType_8h-source.html">H5ArrayType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5VarLenType_8h-source.html">H5VarLenType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSet_8h-source.html">H5DataSet.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Group_8h-source.html">H5Group.h</a>"</code><br>
+<code>#include "<a class="el" href="H5File_8h-source.html">H5File.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Library_8h-source.html">H5Library.h</a>"</code><br>
+
+<p>
+<a href="H5Cpp_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSet_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSet_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSet_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,349 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DataSet.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include &lt;iostream&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DxferProp_8h-source.html">H5DxferProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AbstractDs_8h-source.html">H5AbstractDs.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSet_8h-source.html">H5DataSet.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSet_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSet_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSet_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,440 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DataSet.h</h1><a href="H5DataSet_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="comment">// Class DataSet inherits from AbstractDs and provides accesses to a dataset.</span>
+00017 
+00018 <span class="preprocessor">#ifndef _H5DataSet_H</span>
+00019 <span class="preprocessor"></span><span class="preprocessor">#define _H5DataSet_H</span>
+00020 <span class="preprocessor"></span>
+00021 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00022 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00023 <span class="preprocessor">#endif</span>
+00024 <span class="preprocessor"></span>
+<a name="l00025"></a><a class="code" href="classH5_1_1DataSet.html">00025</a> <span class="keyword">class </span>H5_DLLCPP DataSet : <span class="keyword">public</span> <a class="code" href="classH5_1_1AbstractDs.html">AbstractDs</a> {
+00026    <span class="keyword">public</span>:
+00027         <span class="comment">// Extends the dataset with unlimited dimension.</span>
+00028         <span class="keywordtype">void</span> extend( <span class="keyword">const</span> hsize_t* size ) <span class="keyword">const</span>;
+00029 
+00030         <span class="comment">// Fills a selection in memory with a value</span>
+00031         <span class="keywordtype">void</span> fillMemBuf(<span class="keyword">const</span> <span class="keywordtype">void</span> *fill, <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; fill_type, <span class="keywordtype">void</span> *buf, <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; buf_type, <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; space);
+00032         <span class="comment">// Fills a selection in memory with zero</span>
+00033         <span class="keywordtype">void</span> fillMemBuf(<span class="keywordtype">void</span> *buf, <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; buf_type, <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; space);
+00034 
+00035         <span class="comment">// Gets the creation property list of this dataset.</span>
+00036         <a class="code" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a> getCreatePlist() <span class="keyword">const</span>;
+00037 
+00038         <span class="comment">// Returns the address of this dataset in the file.</span>
+00039         haddr_t getOffset() <span class="keyword">const</span>;
+00040 
+00041         <span class="comment">// Gets the dataspace of this dataset.</span>
+00042         <span class="keyword">virtual</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a> getSpace() <span class="keyword">const</span>;
+00043 
+00044         <span class="comment">// Determines whether space has been allocated for a dataset.</span>
+00045         <span class="keywordtype">void</span> getSpaceStatus(H5D_space_status_t&amp; status) <span class="keyword">const</span>;
+00046 
+00047         <span class="comment">// Returns the amount of storage size required for this dataset.</span>
+00048         <span class="keyword">virtual</span> hsize_t getStorageSize() <span class="keyword">const</span>;
+00049 
+00050         <span class="comment">// not yet implemented??</span>
+00051         hsize_t getVlenBufSize( <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; type, <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; space ) <span class="keyword">const</span>;
+00052         <span class="keywordtype">void</span> vlenReclaim( <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; type, <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; space, <a class="code" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a>&amp; xfer_plist, <span class="keywordtype">void</span>* buf ) <span class="keyword">const</span>;
+00053 
+00054         <span class="comment">// Reads the data of this dataset and stores it in the provided buffer.</span>
+00055         <span class="comment">// The memory and file dataspaces and the transferring property list</span>
+00056         <span class="comment">// can be defaults.</span>
+00057         <span class="keywordtype">void</span> read( <span class="keywordtype">void</span>* buf, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; mem_type, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; mem_space = <a class="code" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; file_space = <a class="code" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, <span class="keyword">const</span> <a class="code" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a>&amp; xfer_plist = <a class="code" href="classH5_1_1DSetMemXferPropList.html#s0">DSetMemXferPropList::DEFAULT</a> ) <span class="keyword">const</span>;
+00058         <span class="keywordtype">void</span> read( string&amp; buf, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; mem_type, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; mem_space = <a class="code" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; file_space = <a class="code" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, <span class="keyword">const</span> <a class="code" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a>&amp; xfer_plist = <a class="code" href="classH5_1_1DSetMemXferPropList.html#s0">DSetMemXferPropList::DEFAULT</a> ) <span class="keyword">const</span>;
+00059 
+00060         <span class="comment">// Writes the buffered data to this dataset.</span>
+00061         <span class="comment">// The memory and file dataspaces and the transferring property list</span>
+00062         <span class="comment">// can be defaults.</span>
+00063         <span class="keywordtype">void</span> write( <span class="keyword">const</span> <span class="keywordtype">void</span>* buf, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; mem_type, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; mem_space = <a class="code" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; file_space = <a class="code" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, <span class="keyword">const</span> <a class="code" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a>&amp; xfer_plist = <a class="code" href="classH5_1_1DSetMemXferPropList.html#s0">DSetMemXferPropList::DEFAULT</a> ) <span class="keyword">const</span>;
+00064         <span class="keywordtype">void</span> write( <span class="keyword">const</span> string&amp; buf, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; mem_type, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; mem_space = <a class="code" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; file_space = <a class="code" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, <span class="keyword">const</span> <a class="code" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a>&amp; xfer_plist = <a class="code" href="classH5_1_1DSetMemXferPropList.html#s0">DSetMemXferPropList::DEFAULT</a> ) <span class="keyword">const</span>;
+00065 
+00066         <span class="comment">// Iterates the selected elements in the specified dataspace - not implemented in C++ style yet</span>
+00067         <span class="keywordtype">int</span> iterateElems( <span class="keywordtype">void</span>* buf, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; type, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; space, H5D_operator_t op, <span class="keywordtype">void</span>* op_data = NULL );
+00068 
+00069         <span class="comment">// Retrieves the type of object that an object reference points to.</span>
+00070         H5G_obj_t getObjType(<span class="keywordtype">void</span> *ref, H5R_type_t ref_type) <span class="keyword">const</span>;
+00071 
+00072         <span class="comment">// Retrieves a dataspace with the region pointed to selected.</span>
+00073         <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a> getRegion(<span class="keywordtype">void</span> *ref, H5R_type_t ref_type = H5R_DATASET_REGION) <span class="keyword">const</span>;
+00074 
+00075         <span class="comment">// Creates a reference to a named Hdf5 object or to a dataset region</span>
+00076         <span class="comment">// in this object.</span>
+00077         <span class="keywordtype">void</span>* Reference(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; dataspace, H5R_type_t ref_type = H5R_DATASET_REGION) <span class="keyword">const</span>;
+00078 
+00079         <span class="comment">// Creates a reference to a named Hdf5 object in this object.</span>
+00080         <span class="keywordtype">void</span>* Reference(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00081         <span class="keywordtype">void</span>* Reference(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00082 
+00083         <span class="comment">// Returns this class name</span>
+<a name="l00084"></a><a class="code" href="classH5_1_1DataSet.html#a20">00084</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span>(<span class="stringliteral">"DataSet"</span>); }
+00085 
+00086         <span class="comment">// Creates a copy of an existing DataSet using its id.</span>
+00087         DataSet(<span class="keyword">const</span> hid_t existing_id);
+00088 
+00089         <span class="comment">// Close this dataset.</span>
+00090         <span class="keyword">virtual</span> <span class="keywordtype">void</span> close();
+00091 
+00092         <span class="comment">// Default constructor.</span>
+00093         DataSet();
+00094 
+00095         <span class="comment">// Copy constructor.</span>
+00096         DataSet( <span class="keyword">const</span> DataSet&amp; original );
+00097 
+00098         <span class="comment">// Destructor: properly terminates access to this dataset.</span>
+00099         <span class="keyword">virtual</span> ~DataSet();
+00100 
+00101    <span class="keyword">private</span>:
+00102         <span class="comment">// This function contains the common code that is used by</span>
+00103         <span class="comment">// getTypeClass and various API functions getXxxType</span>
+00104         <span class="comment">// defined in AbstractDs for generic datatype and specific</span>
+00105         <span class="comment">// sub-types</span>
+00106         <span class="keyword">virtual</span> hid_t p_get_type() <span class="keyword">const</span>;
+00107 };
+00108 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00109 <span class="preprocessor"></span>}
+00110 <span class="preprocessor">#endif</span>
+00111 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSet_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSet_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSet_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DataSet.h File Reference</h1>
+<p>
+<a href="H5DataSet_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSpace_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSpace_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSpace_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,341 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DataSpace.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include &lt;iostream&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSpace_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSpace_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSpace_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,449 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DataSpace.h</h1><a href="H5DataSpace_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5DataSpace_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5DataSpace_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>
+<a name="l00023"></a><a class="code" href="classH5_1_1DataSpace.html">00023</a> <span class="keyword">class </span>H5_DLLCPP DataSpace : <span class="keyword">public</span> <a class="code" href="classH5_1_1IdComponent.html">IdComponent</a> {
+00024    <span class="keyword">public</span>:
+00025         <span class="comment">// Default DataSpace objects</span>
+00026         <span class="keyword">static</span> <span class="keyword">const</span> DataSpace ALL;
+00027 
+00028         <span class="comment">// Creates a dataspace object given the space type</span>
+00029         DataSpace(H5S_class_t type = H5S_SCALAR);
+00030 
+00031         <span class="comment">// Creates a simple dataspace</span>
+00032         DataSpace(<span class="keywordtype">int</span> rank, <span class="keyword">const</span> hsize_t * dims, <span class="keyword">const</span> hsize_t * maxdims = NULL);
+00033 
+00034         <span class="comment">// Assignment operator</span>
+00035         DataSpace&amp; operator=( <span class="keyword">const</span> DataSpace&amp; rhs );
+00036 
+00037         <span class="comment">// Makes copy of an existing dataspace.</span>
+00038         <span class="keywordtype">void</span> copy(<span class="keyword">const</span> DataSpace&amp; like_space);
+00039 
+00040         <span class="comment">// Copies the extent of this dataspace.</span>
+00041         <span class="keywordtype">void</span> extentCopy( DataSpace&amp; dest_space ) <span class="keyword">const</span>;
+00042 
+00043         <span class="comment">// Gets the bounding box containing the current selection.</span>
+00044         <span class="keywordtype">void</span> getSelectBounds( hsize_t* start, hsize_t* end ) <span class="keyword">const</span>;
+00045 
+00046         <span class="comment">// Gets the number of element points in the current selection.</span>
+00047         hssize_t getSelectElemNpoints() <span class="keyword">const</span>;
+00048 
+00049         <span class="comment">// Retrieves the list of element points currently selected.</span>
+00050         <span class="keywordtype">void</span> getSelectElemPointlist( hsize_t startpoint, hsize_t numpoints, hsize_t *buf ) <span class="keyword">const</span>;
+00051 
+00052         <span class="comment">// Gets the list of hyperslab blocks currently selected.</span>
+00053         <span class="keywordtype">void</span> getSelectHyperBlocklist( hsize_t startblock, hsize_t numblocks, hsize_t *buf ) <span class="keyword">const</span>;
+00054 
+00055         <span class="comment">// Get number of hyperslab blocks.</span>
+00056         hssize_t getSelectHyperNblocks() <span class="keyword">const</span>;
+00057 
+00058         <span class="comment">// Gets the number of elements in this dataspace selection.</span>
+00059         hssize_t getSelectNpoints() <span class="keyword">const</span>;
+00060 
+00061         <span class="comment">// Retrieves dataspace dimension size and maximum size.</span>
+00062         <span class="keywordtype">int</span> getSimpleExtentDims( hsize_t *dims, hsize_t *maxdims = NULL ) <span class="keyword">const</span>;
+00063 
+00064         <span class="comment">// Gets the dimensionality of this dataspace.</span>
+00065         <span class="keywordtype">int</span> getSimpleExtentNdims() <span class="keyword">const</span>;
+00066 
+00067         <span class="comment">// Gets the number of elements in this dataspace.</span>
+00068         <span class="comment">// 12/05/00 - changed return type to hssize_t from hsize_t - C API</span>
+00069         hssize_t getSimpleExtentNpoints() <span class="keyword">const</span>;
+00070 
+00071         <span class="comment">// Gets the current class of this dataspace.</span>
+00072         H5S_class_t getSimpleExtentType() <span class="keyword">const</span>;
+00073 
+00074         <span class="comment">// Determines if this dataspace is a simple one.</span>
+00075         <span class="keywordtype">bool</span> isSimple() <span class="keyword">const</span>;
+00076 
+00077         <span class="comment">// Sets the offset of this simple dataspace.</span>
+00078         <span class="keywordtype">void</span> offsetSimple( <span class="keyword">const</span> hssize_t* offset ) <span class="keyword">const</span>;
+00079 
+00080         <span class="comment">// Selects the entire dataspace.</span>
+00081         <span class="keywordtype">void</span> selectAll() <span class="keyword">const</span>;
+00082 
+00083         <span class="comment">// Selects array elements to be included in the selection for</span>
+00084         <span class="comment">// this dataspace.</span>
+00085         <span class="keywordtype">void</span> selectElements( H5S_seloper_t op, <span class="keyword">const</span> size_t num_elements, <span class="keyword">const</span> hsize_t *coord[ ] ) <span class="keyword">const</span>;
+00086 
+00087         <span class="comment">// Selects a hyperslab region to add to the current selected region.</span>
+00088         <span class="keywordtype">void</span> selectHyperslab( H5S_seloper_t op, <span class="keyword">const</span> hsize_t *count, <span class="keyword">const</span> hsize_t *start, <span class="keyword">const</span> hsize_t *stride = NULL, <span class="keyword">const</span> hsize_t *block = NULL ) <span class="keyword">const</span>;
+00089 
+00090         <span class="comment">// Resets the selection region to include no elements.</span>
+00091         <span class="keywordtype">void</span> selectNone() <span class="keyword">const</span>;
+00092 
+00093         <span class="comment">// Verifies that the selection is within the extent of the dataspace.</span>
+00094         <span class="keywordtype">bool</span> selectValid() <span class="keyword">const</span>;
+00095 
+00096         <span class="comment">// Removes the extent from this dataspace.</span>
+00097         <span class="keywordtype">void</span> setExtentNone() <span class="keyword">const</span>;
+00098 
+00099         <span class="comment">// Sets or resets the size of this dataspace.</span>
+00100         <span class="keywordtype">void</span> setExtentSimple( <span class="keywordtype">int</span> rank, <span class="keyword">const</span> hsize_t *current_size, <span class="keyword">const</span> hsize_t *maximum_size = NULL ) <span class="keyword">const</span>;
+00101 
+00102         <span class="comment">// Returns this class name</span>
+<a name="l00103"></a><a class="code" href="classH5_1_1DataSpace.html#a24">00103</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span>(<span class="stringliteral">"DataSpace"</span>); }
+00104 
+00105         <span class="comment">// Creates a DataSpace object using an existing dataspace id.</span>
+00106         DataSpace(<span class="keyword">const</span> hid_t space_id);
+00107 
+00108         <span class="comment">// Copy constructor: makes a copy of the original DataSpace object.</span>
+00109         DataSpace(<span class="keyword">const</span> DataSpace&amp; original);
+00110 
+00111         <span class="comment">// Close this dataspace.</span>
+00112         <span class="keyword">virtual</span> <span class="keywordtype">void</span> close();
+00113 
+00114         <span class="comment">// Destructor: properly terminates access to this dataspace.</span>
+00115         <span class="keyword">virtual</span> ~DataSpace();
+00116 };
+00117 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00118 <span class="preprocessor"></span>}
+00119 <span class="preprocessor">#endif</span>
+00120 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSpace_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSpace_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataSpace_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DataSpace.h File Reference</h1>
+<p>
+<a href="H5DataSpace_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataType_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataType_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataType_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,349 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DataType.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include &lt;iostream&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AtomType_8h-source.html">H5AtomType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PredType_8h-source.html">H5PredType.h</a>"</code><br>
+<code>#include "H5private.h"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataType_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataType_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataType_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,461 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DataType.h</h1><a href="H5DataType_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5DataType_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5DataType_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>
+<a name="l00023"></a><a class="code" href="classH5_1_1DataType.html">00023</a> <span class="keyword">class </span>H5_DLLCPP DataType : <span class="keyword">public</span> <a class="code" href="classH5_1_1H5Object.html">H5Object</a> {
+00024    <span class="keyword">public</span>:
+00025         <span class="comment">// Creates a datatype given its class and size</span>
+00026         DataType( <span class="keyword">const</span> H5T_class_t type_class, size_t size );
+00027 
+00028         <span class="comment">// Copy constructor: makes a copy of the original object</span>
+00029         DataType( <span class="keyword">const</span> DataType&amp; original );
+00030 
+00031         <span class="comment">// Closes this datatype.</span>
+00032         <span class="keyword">virtual</span> <span class="keywordtype">void</span> close();
+00033 
+00034         <span class="comment">// Copies an existing datatype to this datatype object</span>
+00035         <span class="keywordtype">void</span> copy( <span class="keyword">const</span> DataType&amp; like_type );
+00036 
+00037         <span class="comment">// Returns the datatype class identifier.</span>
+00038         H5T_class_t getClass() <span class="keyword">const</span>;
+00039 
+00040         <span class="comment">// Commits a transient datatype to a file; this datatype becomes</span>
+00041         <span class="comment">// a named datatype which can be accessed from the location.</span>
+00042         <span class="keywordtype">void</span> commit( <a class="code" href="classH5_1_1CommonFG.html">CommonFG</a>&amp; loc, <span class="keyword">const</span> <span class="keywordtype">char</span>* name ) <span class="keyword">const</span>;
+00043         <span class="keywordtype">void</span> commit( <a class="code" href="classH5_1_1CommonFG.html">CommonFG</a>&amp; loc, <span class="keyword">const</span> string&amp; name ) <span class="keyword">const</span>;
+00044 
+00045         <span class="comment">// Determines whether this datatype is a named datatype or</span>
+00046         <span class="comment">// a transient datatype.</span>
+00047         <span class="keywordtype">bool</span> committed() <span class="keyword">const</span>;
+00048 
+00049         <span class="comment">// Finds a conversion function that can handle the conversion</span>
+00050         <span class="comment">// this datatype to the given datatype, dest.</span>
+00051         H5T_conv_t find( <span class="keyword">const</span> DataType&amp; dest, H5T_cdata_t **pcdata ) <span class="keyword">const</span>;
+00052 
+00053         <span class="comment">// Converts data from between specified datatypes.</span>
+00054         <span class="keywordtype">void</span> convert( <span class="keyword">const</span> DataType&amp; dest, size_t nelmts, <span class="keywordtype">void</span> *buf, <span class="keywordtype">void</span> *background, <a class="code" href="classH5_1_1PropList.html">PropList</a>&amp; plist ) <span class="keyword">const</span>;
+00055 
+00056         <span class="comment">// Assignment operator</span>
+00057         DataType&amp; operator=( <span class="keyword">const</span> DataType&amp; rhs );
+00058 
+00059         <span class="comment">// Determines whether two datatypes are the same.</span>
+00060         <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> DataType&amp; compared_type ) <span class="keyword">const</span>;
+00061 
+00062         <span class="comment">// Locks a datatype.</span>
+00063         <span class="keywordtype">void</span> lock() <span class="keyword">const</span>;
+00064 
+00065         <span class="comment">// Returns a pointer to the current global overflow function.</span>
+00066         H5T_overflow_t getOverflow(<span class="keywordtype">void</span>) <span class="keyword">const</span>;
+00067 
+00068         <span class="comment">// Sets the overflow handler to a specified function.</span>
+00069         <span class="keywordtype">void</span> setOverflow(H5T_overflow_t func) <span class="keyword">const</span>;
+00070 
+00071         <span class="comment">// Returns the size of a datatype.</span>
+00072         size_t getSize() <span class="keyword">const</span>;
+00073 
+00074         <span class="comment">// Returns the base datatype from which a datatype is derived.</span>
+00075         <span class="comment">// Note: not quite right for specific types yet???</span>
+00076         DataType getSuper() <span class="keyword">const</span>;
+00077 
+00078         <span class="comment">// Registers a conversion function.</span>
+00079         <span class="keywordtype">void</span> registerFunc(H5T_pers_t pers, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> DataType&amp; dest, H5T_conv_t func ) <span class="keyword">const</span>;
+00080         <span class="keywordtype">void</span> registerFunc(H5T_pers_t pers, <span class="keyword">const</span> string&amp; name, <span class="keyword">const</span> DataType&amp; dest, H5T_conv_t func ) <span class="keyword">const</span>;
+00081 
+00082         <span class="comment">// Removes a conversion function from all conversion paths.</span>
+00083         <span class="keywordtype">void</span> unregister( H5T_pers_t pers, <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> DataType&amp; dest, H5T_conv_t func ) <span class="keyword">const</span>;
+00084         <span class="keywordtype">void</span> unregister( H5T_pers_t pers, <span class="keyword">const</span> string&amp; name, <span class="keyword">const</span> DataType&amp; dest, H5T_conv_t func ) <span class="keyword">const</span>;
+00085 
+00086         <span class="comment">// Tags an opaque datatype.</span>
+00087         <span class="keywordtype">void</span> setTag( <span class="keyword">const</span> <span class="keywordtype">char</span>* tag ) <span class="keyword">const</span>;
+00088         <span class="keywordtype">void</span> setTag( <span class="keyword">const</span> string&amp; tag ) <span class="keyword">const</span>;
+00089 
+00090         <span class="comment">// Gets the tag associated with an opaque datatype.</span>
+00091         string getTag() <span class="keyword">const</span>;
+00092 
+00093         <span class="comment">// Checks whether this datatype contains (or is) a certain type class.</span>
+00094         <span class="keywordtype">bool</span> detectClass(H5T_class_t cls) <span class="keyword">const</span>;
+00095 
+00096         <span class="comment">// Checks whether this datatype is a variable-length string.</span>
+00097         <span class="keywordtype">bool</span> isVariableStr() <span class="keyword">const</span>;
+00098 
+00099         <span class="comment">// Creates a reference to a named Hdf5 object in this object.</span>
+00100         <span class="keywordtype">void</span>* Reference(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00101         <span class="keywordtype">void</span>* Reference(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00102 
+00103         <span class="comment">// Creates a reference to a named Hdf5 object or to a dataset region</span>
+00104         <span class="comment">// in this object.</span>
+00105         <span class="keywordtype">void</span>* Reference(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; dataspace, H5R_type_t ref_type = H5R_DATASET_REGION) <span class="keyword">const</span>;
+00106 
+00107         <span class="comment">// Retrieves the type of object that an object reference points to.</span>
+00108         H5G_obj_t getObjType(<span class="keywordtype">void</span> *ref, H5R_type_t ref_type) <span class="keyword">const</span>;
+00109 
+00110         <span class="comment">// Retrieves a dataspace with the region pointed to selected.</span>
+00111         <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a> getRegion(<span class="keywordtype">void</span> *ref, H5R_type_t ref_type = H5R_DATASET_REGION) <span class="keyword">const</span>;
+00112 
+00113         <span class="comment">// Returns this class name</span>
+<a name="l00114"></a><a class="code" href="classH5_1_1DataType.html#a31">00114</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span>(<span class="stringliteral">"DataType"</span>); }
+00115 
+00116         <span class="comment">// Creates a copy of an existing DataType using its id</span>
+00117         DataType( <span class="keyword">const</span> hid_t type_id, <span class="keywordtype">bool</span> predtype = <span class="keyword">false</span> );
+00118 
+00119         <span class="comment">// Default constructor</span>
+00120         DataType();
+00121 
+00122         <span class="comment">// Destructor: properly terminates access to this datatype.</span>
+00123         <span class="keyword">virtual</span> ~DataType();
+00124 
+00125    <span class="keyword">protected</span>:
+<a name="l00126"></a><a class="code" href="classH5_1_1DataType.html#p0">00126</a>         <span class="keywordtype">bool</span> is_predtype;       <span class="comment">// indicates a type is predefined so</span>
+00127                                 <span class="comment">// H5Tclose will not be called for it</span>
+00128 };
+00129 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00130 <span class="preprocessor"></span>}
+00131 <span class="preprocessor">#endif</span>
+00132 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataType_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataType_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DataType_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DataType.h File Reference</h1>
+<p>
+<a href="H5DataType_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DcreatProp_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DcreatProp_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DcreatProp_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,344 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DcreatProp.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DcreatProp_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DcreatProp_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DcreatProp_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,451 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DcreatProp.h</h1><a href="H5DcreatProp_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5DSCreatPropList_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5DSCreatPropList_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>
+<a name="l00023"></a><a class="code" href="classH5_1_1DSetCreatPropList.html">00023</a> <span class="keyword">class </span>H5_DLLCPP DSetCreatPropList : <span class="keyword">public</span> <a class="code" href="classH5_1_1PropList.html">PropList</a> {
+00024    <span class="keyword">public</span>:
+00025         <span class="comment">// Default dataset creation property list.</span>
+00026         <span class="keyword">static</span> <span class="keyword">const</span> DSetCreatPropList DEFAULT;
+00027 
+00028         <span class="comment">// Queries whether all the filters set in this property list are</span>
+00029         <span class="comment">// available currently.</span>
+00030         <span class="keywordtype">bool</span> allFiltersAvail();
+00031 
+00032         <span class="comment">// Get space allocation time for this property.</span>
+00033         H5D_alloc_time_t getAllocTime();
+00034 
+00035         <span class="comment">// Set space allocation time for dataset during creation.</span>
+00036         <span class="keywordtype">void</span> setAllocTime(H5D_alloc_time_t alloc_time);
+00037 
+00038         <span class="comment">// Retrieves the size of the chunks used to store a chunked layout dataset.</span>
+00039         <span class="keywordtype">int</span> getChunk( <span class="keywordtype">int</span> max_ndims, hsize_t* dim ) <span class="keyword">const</span>;
+00040 
+00041         <span class="comment">// Sets the size of the chunks used to store a chunked layout dataset.</span>
+00042         <span class="keywordtype">void</span> setChunk( <span class="keywordtype">int</span> ndims, <span class="keyword">const</span> hsize_t* dim ) <span class="keyword">const</span>;
+00043 
+00044         <span class="comment">// Returns information about an external file.</span>
+00045         <span class="keywordtype">void</span> getExternal( <span class="keywordtype">unsigned</span> idx, size_t name_size, <span class="keywordtype">char</span>* name, off_t&amp; offset, hsize_t&amp; size ) <span class="keyword">const</span>;
+00046 
+00047         <span class="comment">// Returns the number of external files for a dataset.</span>
+00048         <span class="keywordtype">int</span> getExternalCount() <span class="keyword">const</span>;
+00049 
+00050         <span class="comment">// Gets fill value writing time.</span>
+00051         H5D_fill_time_t getFillTime();
+00052 
+00053         <span class="comment">// Sets fill value writing time for dataset.</span>
+00054         <span class="keywordtype">void</span> setFillTime(H5D_fill_time_t fill_time);
+00055 
+00056         <span class="comment">// Retrieves a dataset fill value.</span>
+00057         <span class="keywordtype">void</span> getFillValue( <span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; fvalue_type, <span class="keywordtype">void</span>* value ) <span class="keyword">const</span>;
+00058 
+00059         <span class="comment">// Sets a dataset fill value.</span>
+00060         <span class="keywordtype">void</span> setFillValue( <span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; fvalue_type, <span class="keyword">const</span> <span class="keywordtype">void</span>* value ) <span class="keyword">const</span>;
+00061 
+00062         <span class="comment">// Returns information about a filter in a pipeline.</span>
+00063         H5Z_filter_t getFilter(<span class="keywordtype">int</span> filter_number, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&amp; flags, size_t&amp; cd_nelmts, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>* cd_values, size_t namelen, <span class="keywordtype">char</span> name[]) <span class="keyword">const</span>;
+00064 
+00065         <span class="comment">// Returns information about a filter in a pipeline given the filter id.</span>
+00066         <span class="keywordtype">void</span> getFilterById(H5Z_filter_t filter_id, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> &amp;flags, size_t &amp;cd_nelmts, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>* cd_values, size_t namelen, <span class="keywordtype">char</span> name[]) <span class="keyword">const</span>;
+00067 
+00068         <span class="comment">// Gets the layout of the raw data storage of the data that uses this</span>
+00069         <span class="comment">// property list.</span>
+00070         H5D_layout_t getLayout() <span class="keyword">const</span>;
+00071 
+00072         <span class="comment">// Sets the type of storage used to store the raw data for the</span>
+00073         <span class="comment">// dataset that uses this property list.</span>
+00074         <span class="keywordtype">void</span> setLayout(H5D_layout_t layout) <span class="keyword">const</span>;
+00075 
+00076         <span class="comment">// Returns the number of filters in the pipeline.</span>
+00077         <span class="keywordtype">int</span> getNfilters() <span class="keyword">const</span>;
+00078 
+00079         <span class="comment">// Checks if fill value has been defined for this property.</span>
+00080         H5D_fill_value_t isFillValueDefined();
+00081 
+00082         <span class="comment">// Modifies the specified filter.</span>
+00083         <span class="keywordtype">void</span> modifyFilter( H5Z_filter_t filter_id, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags, size_t cd_nelmts, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cd_values[] ) <span class="keyword">const</span>;
+00084 
+00085         <span class="comment">// Remove one or all filters from the filter pipeline.</span>
+00086         <span class="keywordtype">void</span> removeFilter( H5Z_filter_t filter_id) <span class="keyword">const</span>;
+00087 
+00088         <span class="comment">// Sets compression method and compression level.</span>
+00089         <span class="keywordtype">void</span> setDeflate( <span class="keywordtype">int</span> level ) <span class="keyword">const</span>;
+00090 
+00091         <span class="comment">// Adds an external file to the list of external files.</span>
+00092         <span class="keywordtype">void</span> setExternal( <span class="keyword">const</span> <span class="keywordtype">char</span>* name, off_t offset, hsize_t size ) <span class="keyword">const</span>;
+00093 
+00094         <span class="comment">// Adds a filter to the filter pipeline.</span>
+00095         <span class="keywordtype">void</span> setFilter( H5Z_filter_t filter, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags, size_t cd_nelmts, <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cd_values[] ) <span class="keyword">const</span>;
+00096 
+00097         <span class="comment">// Sets Fletcher32 checksum of EDC for this property list.</span>
+00098         <span class="keywordtype">void</span> setFletcher32();
+00099 
+00100         <span class="comment">// Sets method of the shuffle filter.</span>
+00101         <span class="keywordtype">void</span> setShuffle();
+00102 
+00103         <span class="comment">// Returns this class name</span>
+<a name="l00104"></a><a class="code" href="classH5_1_1DSetCreatPropList.html#a24">00104</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span>(<span class="stringliteral">"DSetCreatPropList"</span>); }
+00105 
+00106         <span class="comment">// Default constructor: creates a stub dataset creation property list.</span>
+00107         DSetCreatPropList();
+00108 
+00109         <span class="comment">// Copy constructor: creates a copy of a DSetCreatPropList object.</span>
+00110         DSetCreatPropList(<span class="keyword">const</span> DSetCreatPropList&amp; orig);
+00111 
+00112         <span class="comment">// Creates a copy of an existing dataset creation property list</span>
+00113         <span class="comment">// using the property list id.</span>
+00114         DSetCreatPropList(<span class="keyword">const</span> hid_t plist_id);
+00115 
+00116         <span class="comment">// Noop destructor.</span>
+00117         <span class="keyword">virtual</span> ~DSetCreatPropList();
+00118 };
+00119 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00120 <span class="preprocessor"></span>}
+00121 <span class="preprocessor">#endif</span>
+00122 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DcreatProp_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DcreatProp_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DcreatProp_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DcreatProp.h File Reference</h1>
+<p>
+<a href="H5DcreatProp_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DxferProp_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DxferProp_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DxferProp_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,341 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DxferProp.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DxferProp_8h-source.html">H5DxferProp.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DxferProp_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DxferProp_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DxferProp_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,449 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DxferProp.h</h1><a href="H5DxferProp_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5DSetMemXferPropList_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5DSetMemXferPropList_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>
+<a name="l00023"></a><a class="code" href="classH5_1_1DSetMemXferPropList.html">00023</a> <span class="keyword">class </span>H5_DLLCPP DSetMemXferPropList : <span class="keyword">public</span> <a class="code" href="classH5_1_1PropList.html">PropList</a> {
+00024    <span class="keyword">public</span>:
+00025         <span class="keyword">static</span> <span class="keyword">const</span> DSetMemXferPropList DEFAULT;
+00026 
+00027 <span class="preprocessor">#ifdef H5_WANT_H5_V1_4_COMPAT</span>
+00028 <span class="preprocessor"></span>        <span class="comment">// Sets type conversion and background buffers.</span>
+00029         <span class="keywordtype">void</span> setBuffer( hsize_t size, <span class="keywordtype">void</span>* tconv, <span class="keywordtype">void</span>* bkg ) <span class="keyword">const</span>;
+00030 
+00031         <span class="comment">// Reads buffer settings.</span>
+00032         hsize_t getBuffer( <span class="keywordtype">void</span>** tconv, <span class="keywordtype">void</span>** bkg ) <span class="keyword">const</span>;
+00033 
+00034         <span class="comment">// Indicates whether to cache hyperslab blocks during I/O.</span>
+00035         <span class="keywordtype">void</span> setHyperCache( <span class="keywordtype">bool</span> cache, <span class="keywordtype">unsigned</span> limit = 0 ) <span class="keyword">const</span>;
+00036 
+00037         <span class="comment">// Returns information regarding the caching of hyperslab blocks during I/O.</span>
+00038         <span class="keywordtype">void</span> getHyperCache( <span class="keywordtype">bool</span>&amp; cache, <span class="keywordtype">unsigned</span>&amp; limit ) <span class="keyword">const</span>;
+00039 
+00040 <span class="preprocessor">#else </span><span class="comment">/* H5_WANT_H5_V1_4_COMPAT */</span>
+00041         <span class="comment">// Sets type conversion and background buffers.</span>
+00042         <span class="keywordtype">void</span> setBuffer( size_t size, <span class="keywordtype">void</span>* tconv, <span class="keywordtype">void</span>* bkg ) <span class="keyword">const</span>;
+00043 
+00044         <span class="comment">// Reads buffer settings.</span>
+00045         size_t getBuffer( <span class="keywordtype">void</span>** tconv, <span class="keywordtype">void</span>** bkg ) <span class="keyword">const</span>;
+00046 <span class="preprocessor">#endif </span><span class="comment">/* H5_WANT_H5_V1_4_COMPAT */</span>
+00047 
+00048         <span class="comment">// Sets B-tree split ratios for a dataset transfer property list</span>
+00049         <span class="keywordtype">void</span> setBtreeRatios( <span class="keywordtype">double</span> left, <span class="keywordtype">double</span> middle, <span class="keywordtype">double</span> right ) <span class="keyword">const</span>;
+00050 
+00051         <span class="comment">// Gets B-tree split ratios for a dataset transfer property list</span>
+00052         <span class="keywordtype">void</span> getBtreeRatios( <span class="keywordtype">double</span>&amp; left, <span class="keywordtype">double</span>&amp; middle, <span class="keywordtype">double</span>&amp; right ) <span class="keyword">const</span>;
+00053 
+00054         <span class="comment">// Sets the dataset transfer property list status to TRUE or FALSE.</span>
+00055         <span class="keywordtype">void</span> setPreserve( <span class="keywordtype">bool</span> status ) <span class="keyword">const</span>;
+00056 
+00057         <span class="comment">// Checks status of the dataset transfer property list.</span>
+00058         <span class="keywordtype">bool</span> getPreserve() <span class="keyword">const</span>;
+00059 
+00060         <span class="comment">// Sets the memory manager for variable-length datatype</span>
+00061         <span class="comment">// allocation in H5Dread and H5Dvlen_reclaim</span>
+00062         <span class="keywordtype">void</span> setVlenMemManager( H5MM_allocate_t alloc, <span class="keywordtype">void</span>* alloc_info,
+00063                                 H5MM_free_t free, <span class="keywordtype">void</span>* free_info ) <span class="keyword">const</span>;
+00064 
+00065         <span class="comment">// alloc and free are set to NULL, indicating that system</span>
+00066         <span class="comment">// malloc and free are to be used</span>
+00067         <span class="keywordtype">void</span> setVlenMemManager() <span class="keyword">const</span>;
+00068 
+00069         <span class="comment">// Gets the memory manager for variable-length datatype</span>
+00070         <span class="comment">// allocation in H5Dread and H5Tvlen_reclaim</span>
+00071         <span class="keywordtype">void</span> getVlenMemManager( H5MM_allocate_t&amp; alloc, <span class="keywordtype">void</span>** alloc_info,
+00072                                 H5MM_free_t&amp; free, <span class="keywordtype">void</span>** free_info ) <span class="keyword">const</span>;
+00073 
+00074         <span class="comment">// Sets the data transfer property list for the multi-file driver.</span>
+00075         <span class="keywordtype">void</span> setMulti(<span class="keyword">const</span> hid_t *memb_dxpl);
+00076 
+00077         <span class="comment">// Returns multi-file data transfer property list information.</span>
+00078         <span class="keywordtype">void</span> getMulti(hid_t *memb_dxpl);
+00079 
+00080         <span class="comment">// Sets the size of a contiguous block reserved for small data.</span>
+00081         <span class="keywordtype">void</span> setSmallDataBlockSize(hsize_t size);
+00082 
+00083         <span class="comment">// Returns the current small data block size setting.</span>
+00084         hsize_t getSmallDataBlockSize();
+00085 
+00086         <span class="comment">// Sets number of I/O vectors to be read/written in hyperslab I/O.</span>
+00087         <span class="keywordtype">void</span> setHyperVectorSize(size_t vector_size);
+00088 
+00089         <span class="comment">// Returns the number of I/O vectors to be read/written in</span>
+00090         <span class="comment">// hyperslab I/O.</span>
+00091         size_t getHyperVectorSize();
+00092 
+00093         <span class="comment">// Enables or disables error-detecting for a dataset reading</span>
+00094         <span class="comment">// process.</span>
+00095         <span class="keywordtype">void</span> setEDCCheck(H5Z_EDC_t check);
+00096 
+00097         <span class="comment">// Determines whether error-detection is enabled for dataset reads.</span>
+00098         H5Z_EDC_t getEDCCheck();
+00099 
+00100         <span class="comment">// Returns this class name</span>
+<a name="l00101"></a><a class="code" href="classH5_1_1DSetMemXferPropList.html#a17">00101</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span>(<span class="stringliteral">"DSetMemXferPropList"</span>); }
+00102 
+00103         <span class="comment">// Default constructor: creates a dataset memory and transfer prop list.</span>
+00104         DSetMemXferPropList();
+00105 
+00106         <span class="comment">// Copy constructor: makes a copy of a DSetMemXferPropList object.</span>
+00107         DSetMemXferPropList(<span class="keyword">const</span> DSetMemXferPropList&amp; orig);
+00108 
+00109         <span class="comment">// Creates a copy of an existing dataset memory and transfer</span>
+00110         <span class="comment">// property list using the property list id.</span>
+00111         DSetMemXferPropList (<span class="keyword">const</span> hid_t plist_id);
+00112 
+00113         <span class="comment">// Noop destructor</span>
+00114         <span class="keyword">virtual</span> ~DSetMemXferPropList();
+00115 
+00116 };
+00117 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00118 <span class="preprocessor"></span>}
+00119 <span class="preprocessor">#endif</span>
+00120 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DxferProp_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DxferProp_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5DxferProp_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5DxferProp.h File Reference</h1>
+<p>
+<a href="H5DxferProp_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5EnumType_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5EnumType_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5EnumType_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,351 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5EnumType.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AbstractDs_8h-source.html">H5AbstractDs.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DxferProp_8h-source.html">H5DxferProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSet_8h-source.html">H5DataSet.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AtomType_8h-source.html">H5AtomType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IntType_8h-source.html">H5IntType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5EnumType_8h-source.html">H5EnumType.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5EnumType_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5EnumType_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5EnumType_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,405 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5EnumType.h</h1><a href="H5EnumType_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5EnumType_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5EnumType_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>
+<a name="l00023"></a><a class="code" href="classH5_1_1EnumType.html">00023</a> <span class="keyword">class </span>H5_DLLCPP EnumType : <span class="keyword">public</span> <a class="code" href="classH5_1_1DataType.html">DataType</a> {
+00024 
+00025    <span class="keyword">public</span>:
+00026         <span class="comment">// Creates an empty enumeration datatype based on a native signed</span>
+00027         <span class="comment">// integer type, whose size is given by size.</span>
+00028         EnumType( size_t size );
+00029 
+00030         <span class="comment">// Gets the enum datatype of the specified dataset</span>
+00031         EnumType( <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSet.html">DataSet</a>&amp; dataset );  <span class="comment">// H5Dget_type</span>
+00032 
+00033         <span class="comment">// Creates a new enum datatype based on an integer datatype</span>
+00034         EnumType( <span class="keyword">const</span> <a class="code" href="classH5_1_1IntType.html">IntType</a>&amp; data_type );  <span class="comment">// H5Tenum_create</span>
+00035 
+00036         <span class="comment">// Returns the number of members in this enumeration datatype.</span>
+00037         <span class="keywordtype">int</span> getNmembers () <span class="keyword">const</span>;
+00038 
+00039         <span class="comment">// Returns the index of a member in this enumeration data type.</span>
+00040         <span class="keywordtype">int</span> getMemberIndex(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00041         <span class="keywordtype">int</span> getMemberIndex(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00042 
+00043         <span class="comment">// Returns the value of an enumeration datatype member</span>
+00044         <span class="keywordtype">void</span> getMemberValue( <span class="keywordtype">unsigned</span> memb_no, <span class="keywordtype">void</span> *value ) <span class="keyword">const</span>;
+00045 
+00046         <span class="comment">// Inserts a new member to this enumeration type.</span>
+00047         <span class="keywordtype">void</span> insert( <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">void</span> *value ) <span class="keyword">const</span>;
+00048         <span class="keywordtype">void</span> insert( <span class="keyword">const</span> string&amp; name, <span class="keywordtype">void</span> *value ) <span class="keyword">const</span>;
+00049 
+00050         <span class="comment">// Returns the symbol name corresponding to a specified member</span>
+00051         <span class="comment">// of this enumeration datatype.</span>
+00052         string nameOf( <span class="keywordtype">void</span> *value, size_t size ) <span class="keyword">const</span>;
+00053 
+00054         <span class="comment">// Returns the value corresponding to a specified member of this</span>
+00055         <span class="comment">// enumeration datatype.</span>
+00056         <span class="keywordtype">void</span> valueOf( <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">void</span> *value ) <span class="keyword">const</span>;
+00057         <span class="keywordtype">void</span> valueOf( <span class="keyword">const</span> string&amp; name, <span class="keywordtype">void</span> *value ) <span class="keyword">const</span>;
+00058 
+00059         <span class="comment">// Returns this class name</span>
+<a name="l00060"></a><a class="code" href="classH5_1_1EnumType.html#a12">00060</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span>(<span class="stringliteral">"EnumType"</span>); }
+00061 
+00062         <span class="comment">// Default constructor</span>
+00063         EnumType();
+00064 
+00065         <span class="comment">// Creates an enumeration datatype using an existing id</span>
+00066         EnumType( <span class="keyword">const</span> hid_t existing_id );
+00067 
+00068         <span class="comment">// Copy constructor: makes a copy of the original EnumType object.</span>
+00069         EnumType( <span class="keyword">const</span> EnumType&amp; original );
+00070 
+00071         <span class="keyword">virtual</span> ~EnumType();
+00072 };
+00073 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00074 <span class="preprocessor"></span>}
+00075 <span class="preprocessor">#endif</span>
+00076 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5EnumType_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5EnumType_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5EnumType_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5EnumType.h File Reference</h1>
+<p>
+<a href="H5EnumType_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Exception_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Exception_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Exception_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,339 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Exception.cpp File Reference</h1><code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespacestd.html">std</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Exception_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Exception_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Exception_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,496 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Exception.h</h1><a href="H5Exception_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5Exception_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5Exception_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#include &lt;string&gt;</span>
+00020 
+00021 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00022 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00023 <span class="preprocessor">#ifndef H5_NO_STD</span>
+00024 <span class="preprocessor"></span>    <span class="keyword">using</span> <span class="keyword">namespace </span>std;
+00025 <span class="preprocessor">#endif  // H5_NO_STD</span>
+00026 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00027 <span class="preprocessor"></span>
+<a name="l00028"></a><a class="code" href="classH5_1_1Exception.html">00028</a> <span class="keyword">class </span>H5_DLLCPP Exception {
+00029    <span class="keyword">public</span>:
+00030         <span class="comment">// Creates an exception with a function name where the failure occurs</span>
+00031         <span class="comment">// and an optional detailed message</span>
+00032         Exception(<span class="keyword">const</span> string func_name, <span class="keyword">const</span> string message = DEFAULT_MSG);
+00033 
+00034         <span class="comment">// Returns a character string that describes the error specified by</span>
+00035         <span class="comment">// a major error number.</span>
+00036         string getMajorString( H5E_major_t major_num ) <span class="keyword">const</span>;
+00037 
+00038         <span class="comment">// Returns a character string that describes the error specified by</span>
+00039         <span class="comment">// a minor error number.</span>
+00040         string getMinorString( H5E_minor_t minor_num ) <span class="keyword">const</span>;
+00041 
+00042         <span class="comment">// Returns the detailed message set at the time the exception is thrown</span>
+00043         string getDetailMsg() <span class="keyword">const</span>;
+00044         <span class="keyword">const</span> <span class="keywordtype">char</span>* getCDetailMsg() <span class="keyword">const</span>;      <span class="comment">// C string of detailed message</span>
+00045         string getFuncName() <span class="keyword">const</span>;     <span class="comment">// function name as a string object</span>
+00046         <span class="keyword">const</span> <span class="keywordtype">char</span>* getCFuncName() <span class="keyword">const</span>;       <span class="comment">// function name as a char string</span>
+00047 
+00048         <span class="comment">// Turns on the automatic error printing.</span>
+00049         <span class="keyword">static</span> <span class="keywordtype">void</span> setAutoPrint( H5E_auto_t&amp; func, <span class="keywordtype">void</span>* client_data);
+00050 
+00051         <span class="comment">// Turns off the automatic error printing.</span>
+00052         <span class="keyword">static</span> <span class="keywordtype">void</span> dontPrint();
+00053 
+00054         <span class="comment">// Retrieves the current settings for the automatic error stack</span>
+00055         <span class="comment">// traversal function and its data.</span>
+00056         <span class="keyword">static</span> <span class="keywordtype">void</span> getAutoPrint( H5E_auto_t&amp; func, <span class="keywordtype">void</span>** client_data);
+00057 
+00058         <span class="comment">// Clears the error stack for the current thread.</span>
+00059         <span class="keyword">static</span> <span class="keywordtype">void</span> clearErrorStack();
+00060 
+00061         <span class="comment">// Walks the error stack for the current thread, calling the</span>
+00062         <span class="comment">// specified function.</span>
+00063         <span class="keyword">static</span> <span class="keywordtype">void</span> walkErrorStack( H5E_direction_t direction,
+00064                                 H5E_walk_t func, <span class="keywordtype">void</span>* client_data);
+00065 
+00066         <span class="comment">// Prints the error stack in a default manner.</span>
+00067         <span class="keyword">virtual</span> <span class="keywordtype">void</span> printError( FILE* stream = NULL ) <span class="keyword">const</span>;
+00068 
+00069         <span class="comment">// Default constructor</span>
+00070         Exception();
+00071 
+00072         <span class="comment">// copy constructor</span>
+00073         Exception( <span class="keyword">const</span> Exception&amp; orig);
+00074 
+00075         <span class="comment">// virtual Destructor</span>
+00076         <span class="keyword">virtual</span> ~Exception();
+00077 
+00078    <span class="keyword">private</span>:
+00079 <span class="comment">// Because 'string' is not instantiated at compilation time, this</span>
+00080 <span class="comment">// warning is displayed when building DLL; but the class is exported</span>
+00081 <span class="comment">// so the warning is harmless</span>
+00082 <span class="preprocessor">#if defined(WIN32)</span>
+00083 <span class="preprocessor"></span><span class="preprocessor">#pragma warning(disable: 4251)</span>
+00084 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00085 <span class="preprocessor"></span>        string detail_message;
+00086         string func_name;
+00087 
+00088    <span class="keyword">protected</span>:
+00089         <span class="comment">// Default value for detail_message</span>
+00090         <span class="keyword">static</span> <span class="keyword">const</span> string DEFAULT_MSG;
+00091 };
+00092 
+<a name="l00093"></a><a class="code" href="classH5_1_1FileIException.html">00093</a> <span class="keyword">class </span>H5_DLLCPP FileIException : <span class="keyword">public</span> Exception {
+00094    <span class="keyword">public</span>:
+00095         FileIException( <span class="keyword">const</span> string func_name, <span class="keyword">const</span> string message = DEFAULT_MSG);
+00096         FileIException();
+00097         <span class="keyword">virtual</span> ~FileIException();
+00098 };
+00099 
+<a name="l00100"></a><a class="code" href="classH5_1_1GroupIException.html">00100</a> <span class="keyword">class </span>H5_DLLCPP GroupIException : <span class="keyword">public</span> Exception {
+00101    <span class="keyword">public</span>:
+00102         GroupIException( <span class="keyword">const</span> string func_name, <span class="keyword">const</span> string message = DEFAULT_MSG);
+00103         GroupIException();
+00104         <span class="keyword">virtual</span> ~GroupIException();
+00105 };
+00106 
+<a name="l00107"></a><a class="code" href="classH5_1_1DataSpaceIException.html">00107</a> <span class="keyword">class </span>H5_DLLCPP DataSpaceIException : <span class="keyword">public</span> Exception {
+00108    <span class="keyword">public</span>:
+00109         DataSpaceIException(<span class="keyword">const</span> string func_name, <span class="keyword">const</span> string message = DEFAULT_MSG);
+00110         DataSpaceIException();
+00111         <span class="keyword">virtual</span> ~DataSpaceIException();
+00112 };
+00113 
+<a name="l00114"></a><a class="code" href="classH5_1_1DataTypeIException.html">00114</a> <span class="keyword">class </span>H5_DLLCPP DataTypeIException : <span class="keyword">public</span> Exception {
+00115    <span class="keyword">public</span>:
+00116         DataTypeIException(<span class="keyword">const</span> string func_name, <span class="keyword">const</span> string message = DEFAULT_MSG);
+00117         DataTypeIException();
+00118         <span class="keyword">virtual</span> ~DataTypeIException();
+00119 };
+00120 
+<a name="l00121"></a><a class="code" href="classH5_1_1PropListIException.html">00121</a> <span class="keyword">class </span>H5_DLLCPP PropListIException : <span class="keyword">public</span> Exception {
+00122    <span class="keyword">public</span>:
+00123         PropListIException(<span class="keyword">const</span> string func_name, <span class="keyword">const</span> string message = DEFAULT_MSG);
+00124         PropListIException();
+00125         <span class="keyword">virtual</span> ~PropListIException();
+00126 };
+00127 
+<a name="l00128"></a><a class="code" href="classH5_1_1DataSetIException.html">00128</a> <span class="keyword">class </span>H5_DLLCPP DataSetIException : <span class="keyword">public</span> Exception {
+00129    <span class="keyword">public</span>:
+00130         DataSetIException(<span class="keyword">const</span> string func_name, <span class="keyword">const</span> string message = DEFAULT_MSG);
+00131         DataSetIException();
+00132         <span class="keyword">virtual</span> ~DataSetIException();
+00133 };
+00134 
+<a name="l00135"></a><a class="code" href="classH5_1_1AttributeIException.html">00135</a> <span class="keyword">class </span>H5_DLLCPP AttributeIException : <span class="keyword">public</span> Exception {
+00136    <span class="keyword">public</span>:
+00137         AttributeIException(<span class="keyword">const</span> string func_name, <span class="keyword">const</span> string message = DEFAULT_MSG);
+00138         AttributeIException();
+00139         <span class="keyword">virtual</span> ~AttributeIException();
+00140 };
+00141 
+<a name="l00142"></a><a class="code" href="classH5_1_1ReferenceException.html">00142</a> <span class="keyword">class </span>H5_DLLCPP ReferenceException : <span class="keyword">public</span> Exception {
+00143    <span class="keyword">public</span>:
+00144         ReferenceException(<span class="keyword">const</span> string func_name, <span class="keyword">const</span> string message = DEFAULT_MSG);
+00145         ReferenceException();
+00146         <span class="keyword">virtual</span> ~ReferenceException();
+00147 };
+00148 
+<a name="l00149"></a><a class="code" href="classH5_1_1LibraryIException.html">00149</a> <span class="keyword">class </span>H5_DLLCPP LibraryIException : <span class="keyword">public</span> Exception {
+00150    <span class="keyword">public</span>:
+00151         LibraryIException(<span class="keyword">const</span> string func_name, <span class="keyword">const</span> string message = DEFAULT_MSG);
+00152         LibraryIException();
+00153         <span class="keyword">virtual</span> ~LibraryIException();
+00154 };
+00155 
+<a name="l00156"></a><a class="code" href="classH5_1_1IdComponentException.html">00156</a> <span class="keyword">class </span>H5_DLLCPP IdComponentException : <span class="keyword">public</span> Exception {
+00157    <span class="keyword">public</span>:
+00158         IdComponentException(<span class="keyword">const</span> string func_name, <span class="keyword">const</span> string message = DEFAULT_MSG);
+00159         IdComponentException();
+00160         <span class="keyword">virtual</span> ~IdComponentException();
+00161 };
+00162 
+00163 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00164 <span class="preprocessor"></span>}
+00165 <span class="preprocessor">#endif</span>
+00166 <span class="preprocessor"></span>
+00167 <span class="preprocessor">#endif // _H5Exception_H</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Exception_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Exception_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Exception_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,338 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Exception.h File Reference</h1><code>#include &lt;string&gt;</code><br>
+
+<p>
+<a href="H5Exception_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FaccProp_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FaccProp_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FaccProp_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,341 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5FaccProp.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5FaccProp_8h-source.html">H5FaccProp.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FaccProp_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FaccProp_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FaccProp_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,470 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5FaccProp.h</h1><a href="H5FaccProp_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5FileAccPropList_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5FileAccPropList_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>
+00023 <span class="comment">// class for file access properties</span>
+<a name="l00024"></a><a class="code" href="classH5_1_1FileAccPropList.html">00024</a> <span class="keyword">class </span>H5_DLLCPP FileAccPropList : <span class="keyword">public</span> <a class="code" href="classH5_1_1PropList.html">PropList</a> {
+00025    <span class="keyword">public</span>:
+00026         <span class="keyword">static</span> <span class="keyword">const</span> FileAccPropList DEFAULT;
+00027 
+00028         <span class="comment">// Modifies this property list to use the H5FD_STDIO driver</span>
+00029         <span class="keywordtype">void</span> setStdio() <span class="keyword">const</span>;
+00030 
+00031         <span class="comment">// Set file driver for this property list</span>
+00032         <span class="keywordtype">void</span> setDriver(hid_t new_driver_id, <span class="keyword">const</span> <span class="keywordtype">void</span> *new_driver_info) <span class="keyword">const</span>;
+00033 
+00034         <span class="comment">// Returns a low-level file driver identifier.</span>
+00035         hid_t getDriver() <span class="keyword">const</span>;
+00036 
+00037         <span class="comment">// Sets offset for family driver.</span>
+00038         <span class="keywordtype">void</span> setFamilyOffset(hsize_t offset) <span class="keyword">const</span>;
+00039 
+00040         <span class="comment">// Gets offset for family driver.</span>
+00041         hsize_t getFamilyOffset() <span class="keyword">const</span>;
+00042 
+00043         <span class="comment">// Modifies this file access property list to use the sec2 driver.</span>
+00044         <span class="keywordtype">void</span> setSec2() <span class="keyword">const</span>;
+00045 
+00046         <span class="comment">// Modifies this file access property list to use the H5FD_CORE</span>
+00047         <span class="comment">// driver.</span>
+00048         <span class="keywordtype">void</span> setCore (size_t increment, hbool_t backing_store) <span class="keyword">const</span>;
+00049 
+00050         <span class="comment">// Queries H5FD_CORE driver properties.</span>
+00051         <span class="keywordtype">void</span> getCore (size_t&amp; increment, hbool_t&amp; backing_store) <span class="keyword">const</span>;
+00052 
+00053         <span class="comment">// Sets this file access properties list to the family driver.</span>
+00054         <span class="keywordtype">void</span> setFamily( hsize_t memb_size, <span class="keyword">const</span> FileAccPropList&amp; memb_plist ) <span class="keyword">const</span>;
+00055 
+00056         <span class="comment">// Returns information about the family file access property list.</span>
+00057         <span class="keywordtype">void</span> getFamily(hsize_t&amp; memb_size, FileAccPropList&amp; memb_plist) <span class="keyword">const</span>;
+00058         FileAccPropList getFamily(hsize_t&amp; memb_size) <span class="keyword">const</span>;
+00059 
+00060         <span class="comment">// Emulates the old split file driver,</span>
+00061         <span class="keywordtype">void</span> setSplit( FileAccPropList&amp; meta_plist, FileAccPropList&amp; raw_plist,
+00062              <span class="keyword">const</span> <span class="keywordtype">char</span>* meta_ext = <span class="stringliteral">".meta"</span>, <span class="keyword">const</span> <span class="keywordtype">char</span>* raw_ext = <span class="stringliteral">".raw"</span> ) <span class="keyword">const</span>;
+00063         <span class="keywordtype">void</span> setSplit( FileAccPropList&amp; meta_plist, FileAccPropList&amp; raw_plist,
+00064              <span class="keyword">const</span> string&amp; meta_ext, <span class="keyword">const</span> string&amp; raw_ext ) <span class="keyword">const</span>;
+00065 
+00066 <span class="preprocessor">#ifdef H5_HAVE_STREAM // for Stream Virtual File Driver</span>
+00067 <span class="preprocessor"></span>        <span class="comment">// Modifies this file access property list to use the Stream driver.</span>
+00068         <span class="keywordtype">void</span> setStream(H5FD_stream_fapl_t &amp;fapl) <span class="keyword">const</span>;
+00069 
+00070         <span class="comment">// Retrieves the streaming I/O driver settings</span>
+00071         H5FD_stream_fapl_t getStream() <span class="keyword">const</span>;
+00072 <span class="preprocessor">#endif</span>
+00073 <span class="preprocessor"></span>
+00074         <span class="comment">// Sets the maximum size of the data sieve buffer.</span>
+00075         <span class="keywordtype">void</span> setSieveBufSize(size_t bufsize) <span class="keyword">const</span>;
+00076 
+00077         <span class="comment">// Returns the current settings for the data sieve buffer size</span>
+00078         <span class="comment">// property</span>
+00079         size_t getSieveBufSize() <span class="keyword">const</span>;
+00080 
+00081         <span class="comment">// Sets the minimum size of metadata block allocations.</span>
+00082         <span class="keywordtype">void</span> setMetaBlockSize(hsize_t &amp;block_size) <span class="keyword">const</span>;
+00083 
+00084         <span class="comment">// Returns the current metadata block size setting.</span>
+00085         hsize_t getMetaBlockSize() <span class="keyword">const</span>;
+00086 
+00087         <span class="comment">// Modifies this file access property list to use the logging driver.</span>
+00088         <span class="keywordtype">void</span> setLog(<span class="keyword">const</span> <span class="keywordtype">char</span> *logfile, <span class="keywordtype">unsigned</span> flags, size_t buf_size) <span class="keyword">const</span>;
+00089         <span class="keywordtype">void</span> setLog(<span class="keyword">const</span> string&amp; logfile, <span class="keywordtype">unsigned</span> flags, size_t buf_size) <span class="keyword">const</span>;
+00090 
+00091         <span class="comment">// Sets alignment properties of this file access property list</span>
+00092         <span class="keywordtype">void</span> setAlignment( hsize_t threshold = 1, hsize_t alignment = 1 ) <span class="keyword">const</span>;
+00093 
+00094         <span class="comment">// Retrieves the current settings for alignment properties from</span>
+00095         <span class="comment">// this property list.</span>
+00096         <span class="keywordtype">void</span> getAlignment( hsize_t&amp; threshold, hsize_t&amp; alignment ) <span class="keyword">const</span>;
+00097 
+00098         <span class="comment">// Sets data type for multi driver.</span>
+00099         <span class="keywordtype">void</span> setMultiType(H5FD_mem_t dtype) <span class="keyword">const</span>;
+00100 
+00101         <span class="comment">// Returns the data type property for MULTI driver.</span>
+00102         H5FD_mem_t getMultiType() <span class="keyword">const</span>;
+00103 
+00104         <span class="comment">// Sets the meta data cache and raw data chunk cache parameters.</span>
+00105         <span class="keywordtype">void</span> setCache( <span class="keywordtype">int</span> mdc_nelmts, size_t rdcc_nelmts, size_t rdcc_nbytes, <span class="keywordtype">double</span> rdcc_w0 ) <span class="keyword">const</span>;
+00106 
+00107         <span class="comment">// Queries the meta data cache and raw data chunk cache parameters.</span>
+00108         <span class="keywordtype">void</span> getCache( <span class="keywordtype">int</span>&amp; mdc_nelmts, size_t&amp; rdcc_nelmts, size_t&amp; rdcc_nbytes, <span class="keywordtype">double</span>&amp; rdcc_w0 ) <span class="keyword">const</span>;
+00109 
+00110         <span class="comment">// Sets the degree for the file close behavior.</span>
+00111         <span class="keywordtype">void</span> setFcloseDegree(H5F_close_degree_t degree);
+00112 
+00113         <span class="comment">// Returns the degree for the file close behavior.</span>
+00114         H5F_close_degree_t getFcloseDegree();
+00115 
+00116         <span class="comment">// Sets garbage collecting references flag.</span>
+00117         <span class="keywordtype">void</span> setGcReferences( <span class="keywordtype">unsigned</span> gc_ref = 0 ) <span class="keyword">const</span>;
+00118 
+00119         <span class="comment">// Returns garbage collecting references setting.</span>
+00120         <span class="keywordtype">unsigned</span> getGcReferences() <span class="keyword">const</span>;
+00121 
+00122         <span class="comment">// Returns this class name</span>
+<a name="l00123"></a><a class="code" href="classH5_1_1FileAccPropList.html#a29">00123</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span>(<span class="stringliteral">"FileAccPropList"</span>); }
+00124 
+00125         <span class="comment">// Creates a file access property list.</span>
+00126         FileAccPropList();
+00127 
+00128         <span class="comment">// Copy constructor: creates a copy of a FileAccPropList object.</span>
+00129         FileAccPropList( <span class="keyword">const</span> FileAccPropList&amp; original );
+00130 
+00131         <span class="comment">// Creates a copy of an existing file access property list</span>
+00132         <span class="comment">// using the property list id.</span>
+00133         FileAccPropList (<span class="keyword">const</span> hid_t plist_id);
+00134 
+00135         <span class="comment">// Noop destructor</span>
+00136         <span class="keyword">virtual</span> ~FileAccPropList();
+00137 };
+00138 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00139 <span class="preprocessor"></span>}
+00140 <span class="preprocessor">#endif</span>
+00141 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FaccProp_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FaccProp_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FaccProp_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5FaccProp.h File Reference</h1>
+<p>
+<a href="H5FaccProp_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FcreatProp_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FcreatProp_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FcreatProp_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,341 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5FcreatProp.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5FcreatProp_8h-source.html">H5FcreatProp.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FcreatProp_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FcreatProp_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FcreatProp_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,416 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5FcreatProp.h</h1><a href="H5FcreatProp_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5FileCreatPropList_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5FileCreatPropList_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>
+00023 <span class="comment">// class for file access properties</span>
+<a name="l00024"></a><a class="code" href="classH5_1_1FileCreatPropList.html">00024</a> <span class="keyword">class </span>H5_DLLCPP FileCreatPropList : <span class="keyword">public</span> <a class="code" href="classH5_1_1PropList.html">PropList</a> {
+00025    <span class="keyword">public</span>:
+00026         <span class="comment">// Default file creation property list.</span>
+00027         <span class="keyword">static</span> <span class="keyword">const</span> FileCreatPropList DEFAULT;
+00028 
+00029         <span class="comment">// Retrieves version information for various parts of a file.</span>
+00030         <span class="keywordtype">void</span> getVersion( <span class="keywordtype">unsigned</span>&amp; super, <span class="keywordtype">unsigned</span>&amp; freelist, <span class="keywordtype">unsigned</span>&amp; stab, <span class="keywordtype">unsigned</span>&amp; shhdr ) <span class="keyword">const</span>;
+00031 
+00032         <span class="comment">// Sets the userblock size field of a file creation property list.</span>
+00033         <span class="keywordtype">void</span> setUserblock( hsize_t size ) <span class="keyword">const</span>;
+00034 
+00035         <span class="comment">// Gets the size of a user block in this file creation property list.</span>
+00036         hsize_t getUserblock() <span class="keyword">const</span>;
+00037 
+00038         <span class="comment">// Retrieves the size-of address and size quantities stored in a</span>
+00039         <span class="comment">// file according to this file creation property list.</span>
+00040         <span class="keywordtype">void</span> getSizes( size_t&amp; sizeof_addr, size_t&amp; sizeof_size ) <span class="keyword">const</span>;
+00041 
+00042         <span class="comment">// Sets file size-of addresses and sizes.</span>
+00043         <span class="keywordtype">void</span> setSizes( size_t sizeof_addr = 4, size_t sizeof_size = 4 ) <span class="keyword">const</span>;
+00044 
+00045 <span class="preprocessor">#ifdef H5_WANT_H5_V1_4_COMPAT</span>
+00046 <span class="preprocessor"></span>        <span class="comment">// Retrieves the size of the symbol table B-tree 1/2 rank and the</span>
+00047         <span class="comment">// symbol table leaf node 1/2 size.</span>
+00048         <span class="keywordtype">void</span> getSymk( <span class="keywordtype">int</span>&amp; int_nodes_k, <span class="keywordtype">int</span>&amp; leaf_nodes_k ) <span class="keyword">const</span>;
+00049 
+00050         <span class="comment">// Sets the size of parameters used to control the symbol table nodes.</span>
+00051         <span class="keywordtype">void</span> setSymk( <span class="keywordtype">int</span> int_nodes_k, <span class="keywordtype">int</span> leaf_nodes_k ) <span class="keyword">const</span>;
+00052 <span class="preprocessor">#else </span><span class="comment">/* H5_WANT_H5_V1_4_COMPAT */</span>
+00053         <span class="comment">// Retrieves the size of the symbol table B-tree 1/2 rank and the</span>
+00054         <span class="comment">// symbol table leaf node 1/2 size.</span>
+00055         <span class="keywordtype">void</span> getSymk( <span class="keywordtype">unsigned</span>&amp; int_nodes_k, <span class="keywordtype">unsigned</span>&amp; leaf_nodes_k ) <span class="keyword">const</span>;
+00056 
+00057         <span class="comment">// Sets the size of parameters used to control the symbol table nodes.</span>
+00058         <span class="keywordtype">void</span> setSymk( <span class="keywordtype">unsigned</span> int_nodes_k, <span class="keywordtype">unsigned</span> leaf_nodes_k ) <span class="keyword">const</span>;
+00059 <span class="preprocessor">#endif </span><span class="comment">/* H5_WANT_H5_V1_4_COMPAT */</span>
+00060 
+00061         <span class="comment">// Returns the 1/2 rank of an indexed storage B-tree.</span>
+00062         <span class="keywordtype">unsigned</span> getIstorek() <span class="keyword">const</span>;
+00063 
+00064         <span class="comment">// Sets the size of parameter used to control the B-trees for</span>
+00065         <span class="comment">// indexing chunked datasets.</span>
+00066         <span class="keywordtype">void</span> setIstorek( <span class="keywordtype">unsigned</span> ik ) <span class="keyword">const</span>;
+00067 
+00068         <span class="comment">// Returns this class name</span>
+<a name="l00069"></a><a class="code" href="classH5_1_1FileCreatPropList.html#a9">00069</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span>(<span class="stringliteral">"FileCreatPropList"</span>); }
+00070 
+00071         <span class="comment">// Creates a file create property list.</span>
+00072         FileCreatPropList();
+00073 
+00074         <span class="comment">// Copy constructor: creates a copy of a FileCreatPropList object.</span>
+00075         FileCreatPropList(<span class="keyword">const</span> FileCreatPropList&amp; orig);
+00076 
+00077         <span class="comment">// Creates a copy of an existing file create property list</span>
+00078         <span class="comment">// using the property list id.</span>
+00079         FileCreatPropList (<span class="keyword">const</span> hid_t plist_id);
+00080 
+00081         <span class="comment">// Noop destructor</span>
+00082         <span class="keyword">virtual</span> ~FileCreatPropList();
+00083 };
+00084 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00085 <span class="preprocessor"></span>}
+00086 <span class="preprocessor">#endif</span>
+00087 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FcreatProp_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FcreatProp_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FcreatProp_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5FcreatProp.h File Reference</h1>
+<p>
+<a href="H5FcreatProp_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5File_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5File_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5File_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,353 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5File.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include &lt;iostream&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5FaccProp_8h-source.html">H5FaccProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5FcreatProp_8h-source.html">H5FcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DxferProp_8h-source.html">H5DxferProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Group_8h-source.html">H5Group.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AbstractDs_8h-source.html">H5AbstractDs.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSet_8h-source.html">H5DataSet.h</a>"</code><br>
+<code>#include "<a class="el" href="H5File_8h-source.html">H5File.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Alltypes_8h-source.html">H5Alltypes.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5File_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5File_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5File_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,441 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5File.h</h1><a href="H5File_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5File_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5File_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>
+<a name="l00023"></a><a class="code" href="classH5_1_1H5File.html">00023</a> <span class="keyword">class </span>H5_DLLCPP H5File : <span class="keyword">public</span> <a class="code" href="classH5_1_1IdComponent.html">IdComponent</a>, <span class="keyword">public</span> <a class="code" href="classH5_1_1CommonFG.html">CommonFG</a> {
+00024    <span class="keyword">public</span>:
+00025         <span class="comment">// Creates or opens an HDF5 file.</span>
+00026         H5File( <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags,
+00027            <span class="keyword">const</span> <a class="code" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a>&amp; create_plist = <a class="code" href="classH5_1_1FileCreatPropList.html#s0">FileCreatPropList::DEFAULT</a>,
+00028            <span class="keyword">const</span> <a class="code" href="classH5_1_1FileAccPropList.html">FileAccPropList</a>&amp; access_plist = <a class="code" href="classH5_1_1FileAccPropList.html#s0">FileAccPropList::DEFAULT</a> );
+00029         H5File( <span class="keyword">const</span> string&amp; name, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags,
+00030            <span class="keyword">const</span> <a class="code" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a>&amp; create_plist = <a class="code" href="classH5_1_1FileCreatPropList.html#s0">FileCreatPropList::DEFAULT</a>,
+00031            <span class="keyword">const</span> <a class="code" href="classH5_1_1FileAccPropList.html">FileAccPropList</a>&amp; access_plist = <a class="code" href="classH5_1_1FileAccPropList.html#s0">FileAccPropList::DEFAULT</a> );
+00032 
+00033         <span class="comment">// Close this file.</span>
+00034         <span class="keyword">virtual</span> <span class="keywordtype">void</span> close();
+00035 
+00036         <span class="comment">// Gets the access property list of this file.</span>
+00037         <a class="code" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> getAccessPlist() <span class="keyword">const</span>;
+00038 
+00039         <span class="comment">// Gets the creation property list of this file.</span>
+00040         <a class="code" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a> getCreatePlist() <span class="keyword">const</span>;
+00041 
+00042         <span class="comment">// Gets the name of this file.</span>
+00043         string getFileName() <span class="keyword">const</span>;
+00044 
+00045         <span class="comment">// Retrieves the file size of an opened file.</span>
+00046         hsize_t getFileSize() <span class="keyword">const</span>;
+00047 
+00048         <span class="comment">// Returns the amount of free space in the file.</span>
+00049         hssize_t getFreeSpace() <span class="keyword">const</span>;
+00050 
+00051         <span class="comment">// Returns the number of opened object IDs (files, datasets, groups</span>
+00052         <span class="comment">// and datatypes) in the same file.</span>
+00053         <span class="keywordtype">int</span> getObjCount(<span class="keywordtype">unsigned</span> types) <span class="keyword">const</span>;
+00054         <span class="keywordtype">int</span> getObjCount() <span class="keyword">const</span>;
+00055 
+00056         <span class="comment">// Retrieves a list of opened object IDs (files, datasets, groups</span>
+00057         <span class="comment">// and datatypes) in the same file.</span>
+00058         <span class="keywordtype">void</span> getObjIDs(<span class="keywordtype">unsigned</span> types, <span class="keywordtype">int</span> max_objs, hid_t *oid_list) <span class="keyword">const</span>;
+00059 
+00060         <span class="comment">// Retrieves the type of object that an object reference points to.</span>
+00061         H5G_obj_t getObjType(<span class="keywordtype">void</span> *ref, H5R_type_t ref_type) <span class="keyword">const</span>;
+00062 
+00063         <span class="comment">// Retrieves a dataspace with the region pointed to selected.</span>
+00064         <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a> getRegion(<span class="keywordtype">void</span> *ref, H5R_type_t ref_type = H5R_DATASET_REGION) <span class="keyword">const</span>;
+00065 
+00066         <span class="comment">// Returns the pointer to the file handle of the low-level file driver.</span>
+00067         <span class="keywordtype">void</span> getVFDHandle(<a class="code" href="classH5_1_1FileAccPropList.html">FileAccPropList</a>&amp; fapl, <span class="keywordtype">void</span> **file_handle) <span class="keyword">const</span>;
+00068         <span class="keywordtype">void</span> getVFDHandle(<span class="keywordtype">void</span> **file_handle) <span class="keyword">const</span>;
+00069 
+00070         <span class="comment">// Determines if a file, specified by its name, is in HDF5 format</span>
+00071         <span class="keyword">static</span> <span class="keywordtype">bool</span> isHdf5(<span class="keyword">const</span> <span class="keywordtype">char</span>* name );
+00072         <span class="keyword">static</span> <span class="keywordtype">bool</span> isHdf5(<span class="keyword">const</span> string&amp; name );
+00073 
+00074         <span class="comment">// Reopens this file.</span>
+00075         <span class="keywordtype">void</span> reOpen();  <span class="comment">// added for better name</span>
+00076         <span class="keywordtype">void</span> reopen();
+00077 
+00078         <span class="comment">// Creates a reference to a named Hdf5 object or to a dataset region</span>
+00079         <span class="comment">// in this object.</span>
+00080         <span class="keywordtype">void</span>* Reference(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; dataspace, H5R_type_t ref_type = H5R_DATASET_REGION) <span class="keyword">const</span>;
+00081 
+00082         <span class="comment">// Creates a reference to a named Hdf5 object in this object.</span>
+00083         <span class="keywordtype">void</span>* Reference(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00084         <span class="keywordtype">void</span>* Reference(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00085 
+<a name="l00087"></a><a class="code" href="classH5_1_1H5File.html#a20">00087</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="stringliteral">"H5File"</span>); }
+00088 
+00089         <span class="comment">// Throw file exception.</span>
+00090         <span class="keyword">virtual</span> <span class="keywordtype">void</span> throwException(<span class="keyword">const</span> string func_name, <span class="keyword">const</span> string msg) <span class="keyword">const</span>;
+00091 
+00092         <span class="comment">// Gets the file id</span>
+00093         <span class="keyword">virtual</span> hid_t getLocId() <span class="keyword">const</span>;
+00094 
+00095         <span class="comment">// Default constructor</span>
+00096         H5File();
+00097 
+00098         <span class="comment">// Copy constructor: makes a copy of the original H5File object.</span>
+00099         H5File(<span class="keyword">const</span> H5File&amp; original);
+00100 
+00101         <span class="comment">// H5File destructor.</span>
+00102         <span class="keyword">virtual</span> ~H5File();
+00103 
+00104    <span class="keyword">private</span>:
+00105         <span class="comment">// This function is private and contains common code between the</span>
+00106         <span class="comment">// constructors taking a string or a char*</span>
+00107         <span class="keywordtype">void</span> p_get_file( <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> flags, <span class="keyword">const</span> <a class="code" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a>&amp; create_plist, <span class="keyword">const</span> <a class="code" href="classH5_1_1FileAccPropList.html">FileAccPropList</a>&amp; access_plist );
+00108 
+00109 };
+00110 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00111 <span class="preprocessor"></span>}
+00112 <span class="preprocessor">#endif</span>
+00113 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5File_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5File_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5File_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5File.h File Reference</h1>
+<p>
+<a href="H5File_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FloatType_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FloatType_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FloatType_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,351 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5FloatType.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AbstractDs_8h-source.html">H5AbstractDs.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DxferProp_8h-source.html">H5DxferProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AtomType_8h-source.html">H5AtomType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5FloatType_8h-source.html">H5FloatType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSet_8h-source.html">H5DataSet.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PredType_8h-source.html">H5PredType.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FloatType_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FloatType_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FloatType_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,402 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5FloatType.h</h1><a href="H5FloatType_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5FloatType_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5FloatType_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>
+<a name="l00023"></a><a class="code" href="classH5_1_1FloatType.html">00023</a> <span class="keyword">class </span>H5_DLLCPP FloatType : <span class="keyword">public</span> <a class="code" href="classH5_1_1AtomType.html">AtomType</a> {
+00024    <span class="keyword">public</span>:
+00025         <span class="comment">// Creates a floating-point type using a predefined type</span>
+00026         FloatType( <span class="keyword">const</span> <a class="code" href="classH5_1_1PredType.html">PredType</a>&amp; pred_type );
+00027 
+00028         <span class="comment">// Gets the floating-point datatype of the specified dataset</span>
+00029         FloatType( <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSet.html">DataSet</a>&amp; dataset );
+00030 
+00031         <span class="comment">// Retrieves the exponent bias of a floating-point type.</span>
+00032         size_t getEbias() <span class="keyword">const</span>;
+00033 
+00034         <span class="comment">// Sets the exponent bias of a floating-point type.</span>
+00035         <span class="keywordtype">void</span> setEbias( size_t ebias ) <span class="keyword">const</span>;
+00036 
+00037         <span class="comment">// Retrieves floating point datatype bit field information.</span>
+00038         <span class="keywordtype">void</span> getFields( size_t&amp; spos, size_t&amp; epos, size_t&amp; esize, size_t&amp; mpos, size_t&amp; msize ) <span class="keyword">const</span>;
+00039 
+00040         <span class="comment">// Sets locations and sizes of floating point bit fields.</span>
+00041         <span class="keywordtype">void</span> setFields( size_t spos, size_t epos, size_t esize, size_t mpos, size_t msize ) <span class="keyword">const</span>;
+00042 
+00043         <span class="comment">// Retrieves the internal padding type for unused bits in floating-point datatypes.</span>
+00044         H5T_pad_t getInpad( string&amp; pad_string ) <span class="keyword">const</span>;
+00045 
+00046         <span class="comment">// Fills unused internal floating point bits.</span>
+00047         <span class="keywordtype">void</span> setInpad( H5T_pad_t inpad ) <span class="keyword">const</span>;
+00048 
+00049         <span class="comment">// Retrieves mantissa normalization of a floating-point datatype.</span>
+00050         H5T_norm_t getNorm( string&amp; norm_string ) <span class="keyword">const</span>;
+00051 
+00052         <span class="comment">// Sets the mantissa normalization of a floating-point datatype.</span>
+00053         <span class="keywordtype">void</span> setNorm( H5T_norm_t norm ) <span class="keyword">const</span>;
+00054 
+00055         <span class="comment">// Returns this class name</span>
+<a name="l00056"></a><a class="code" href="classH5_1_1FloatType.html#a10">00056</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="stringliteral">"FloatType"</span>); }
+00057 
+00058         <span class="comment">// Default constructor</span>
+00059         FloatType();
+00060 
+00061         <span class="comment">// Creates a floating-point datatype using an existing id</span>
+00062         FloatType( <span class="keyword">const</span> hid_t existing_id );
+00063 
+00064         <span class="comment">// Copy constructor: makes a copy of the original FloatType object.</span>
+00065         FloatType( <span class="keyword">const</span> FloatType&amp; original );
+00066 
+00067         <span class="comment">// Noop destructor.</span>
+00068         <span class="keyword">virtual</span> ~FloatType();
+00069 };
+00070 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00071 <span class="preprocessor"></span>}
+00072 <span class="preprocessor">#endif</span>
+00073 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FloatType_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FloatType_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5FloatType_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5FloatType.h File Reference</h1>
+<p>
+<a href="H5FloatType_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Group_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Group_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Group_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,353 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Group.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include &lt;iostream&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AbstractDs_8h-source.html">H5AbstractDs.h</a>"</code><br>
+<code>#include "<a class="el" href="H5FaccProp_8h-source.html">H5FaccProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5FcreatProp_8h-source.html">H5FcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DxferProp_8h-source.html">H5DxferProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSet_8h-source.html">H5DataSet.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Group_8h-source.html">H5Group.h</a>"</code><br>
+<code>#include "<a class="el" href="H5File_8h-source.html">H5File.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Alltypes_8h-source.html">H5Alltypes.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Group_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Group_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Group_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,396 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Group.h</h1><a href="H5Group_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5Group_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5Group_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>
+<a name="l00023"></a><a class="code" href="classH5_1_1Group.html">00023</a> <span class="keyword">class </span>H5_DLLCPP Group : <span class="keyword">public</span> <a class="code" href="classH5_1_1H5Object.html">H5Object</a>, <span class="keyword">public</span> <a class="code" href="classH5_1_1CommonFG.html">CommonFG</a> {
+00024    <span class="keyword">public</span>:
+00025         <span class="comment">// Close this group.</span>
+00026         <span class="keyword">virtual</span> <span class="keywordtype">void</span> close();
+00027 
+00028         <span class="comment">// Retrieves the type of object that an object reference points to.</span>
+00029         H5G_obj_t getObjType(<span class="keywordtype">void</span> *ref, H5R_type_t ref_type) <span class="keyword">const</span>;
+00030 
+00031         <span class="comment">// Retrieves a dataspace with the region pointed to selected.</span>
+00032         <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a> getRegion(<span class="keywordtype">void</span> *ref, H5R_type_t ref_type = H5R_DATASET_REGION) <span class="keyword">const</span>;
+00033 
+00034         <span class="comment">// Creates a reference to a named Hdf5 object or to a dataset region</span>
+00035         <span class="comment">// in this object.</span>
+00036         <span class="keywordtype">void</span>* Reference(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; dataspace, H5R_type_t ref_type = H5R_DATASET_REGION) <span class="keyword">const</span>;
+00037 
+00038         <span class="comment">// Creates a reference to a named Hdf5 object in this object.</span>
+00039         <span class="keywordtype">void</span>* Reference(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00040         <span class="keywordtype">void</span>* Reference(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00041 
+00042         <span class="comment">// Returns this class name</span>
+<a name="l00043"></a><a class="code" href="classH5_1_1Group.html#a6">00043</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="stringliteral">"Group"</span>); }
+00044 
+00045         <span class="comment">// Throw group exception.</span>
+00046         <span class="keyword">virtual</span> <span class="keywordtype">void</span> throwException(<span class="keyword">const</span> string func_name, <span class="keyword">const</span> string msg) <span class="keyword">const</span>;
+00047 
+00048         <span class="comment">// for CommonFG to get the file id.</span>
+00049         <span class="keyword">virtual</span> hid_t getLocId() <span class="keyword">const</span>;
+00050 
+00051         <span class="comment">// default constructor</span>
+00052         Group();
+00053 
+00054         <span class="comment">// Copy constructor: makes a copy of the original object</span>
+00055         Group(<span class="keyword">const</span> Group&amp; original);
+00056 
+00057         <span class="comment">// Destructor</span>
+00058         <span class="keyword">virtual</span> ~Group();
+00059 
+00060         <span class="comment">// Creates a copy of an existing group using its id.</span>
+00061         Group( <span class="keyword">const</span> hid_t group_id );
+00062 
+00063 };
+00064 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00065 <span class="preprocessor"></span>}
+00066 <span class="preprocessor">#endif</span>
+00067 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Group_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Group_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Group_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Group.h File Reference</h1>
+<p>
+<a href="H5Group_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IdComponent_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IdComponent_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IdComponent_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,340 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5IdComponent.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Library_8h-source.html">H5Library.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IdComponent_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IdComponent_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IdComponent_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,440 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5IdComponent.h</h1><a href="H5IdComponent_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.     *</span>
+00004 <span class="comment"> * All rights reserved.                                               *</span>
+00005 <span class="comment"> *                                                                         *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _IdComponent_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _IdComponent_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="comment">// IdComponent provides a mechanism to handle</span>
+00020 <span class="comment">// reference counting for an identifier of any HDF5 object.</span>
+00021 
+00022 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00023 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00024 <span class="preprocessor">#ifndef H5_NO_STD</span>
+00025 <span class="preprocessor"></span>    <span class="keyword">using</span> std::string;
+00026 <span class="preprocessor">#endif  // H5_NO_STD</span>
+00027 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00028 <span class="preprocessor"></span>
+<a name="l00029"></a><a class="code" href="classH5_1_1IdComponent.html">00029</a> <span class="keyword">class </span>H5_DLLCPP IdComponent {
+00030    <span class="keyword">public</span>:
+00031         <span class="comment">// Increment reference counter.</span>
+00032         <span class="keywordtype">void</span> incRefCount(hid_t obj_id) <span class="keyword">const</span>;
+00033         <span class="keywordtype">void</span> incRefCount() <span class="keyword">const</span>;
+00034 
+00035         <span class="comment">// Decrement reference counter.</span>
+00036         <span class="keywordtype">void</span> decRefCount(hid_t obj_id) <span class="keyword">const</span>;
+00037         <span class="keywordtype">void</span> decRefCount() <span class="keyword">const</span>;
+00038 
+00039         <span class="comment">// Get the reference counter to this identifier.</span>
+00040         <span class="keywordtype">int</span> getCounter(hid_t obj_id) <span class="keyword">const</span>;
+00041         <span class="keywordtype">int</span> getCounter() <span class="keyword">const</span>;
+00042 
+00043         <span class="comment">// Assignment operator</span>
+00044         IdComponent&amp; operator=( <span class="keyword">const</span> IdComponent&amp; rhs );
+00045 
+00046         <span class="comment">// Sets the identifier of this object to a new value.</span>
+00047         <span class="keywordtype">void</span> setId( hid_t new_id );
+00048 
+00049         <span class="comment">// Creates an object to hold an HDF5 identifier.</span>
+00050         IdComponent( <span class="keyword">const</span> hid_t h5_id );
+00051 
+00052         <span class="comment">// Copy constructor: makes copy of the original IdComponent object.</span>
+00053         IdComponent( <span class="keyword">const</span> IdComponent&amp; original );
+00054 
+00055         <span class="comment">// Gets the value of IdComponent's data member.</span>
+00056         <span class="keyword">virtual</span> hid_t getId () <span class="keyword">const</span>;
+00057 
+00058 <span class="preprocessor">#ifndef DOXYGEN_SHOULD_SKIP_THIS</span>
+00059 <span class="preprocessor"></span>        <span class="comment">// Pure virtual function for there are various H5*close for the</span>
+00060         <span class="comment">// subclasses.</span>
+00061         <span class="keyword">virtual</span> <span class="keywordtype">void</span> close() = 0;
+00062 
+00063 <span class="preprocessor">#endif // DOXYGEN_SHOULD_SKIP_THIS</span>
+00064 <span class="preprocessor"></span>
+00065         <span class="comment">// Makes and returns the string "&lt;class-name&gt;::&lt;func_name&gt;";</span>
+00066         <span class="comment">// &lt;class-name&gt; is returned by fromClass().</span>
+00067         string inMemFunc(<span class="keyword">const</span> <span class="keywordtype">char</span>* func_name) <span class="keyword">const</span>;
+00068 
+00069         <span class="comment">// Returns this class name.</span>
+<a name="l00070"></a><a class="code" href="classH5_1_1IdComponent.html#a12">00070</a>         <span class="keyword">virtual</span> string fromClass()<span class="keyword"> const </span>{<span class="keywordflow">return</span> (<span class="stringliteral">"IdComponent"</span>);}
+00071 
+00072         <span class="comment">// Destructor</span>
+00073         <span class="keyword">virtual</span> ~IdComponent();
+00074 
+00075    <span class="keyword">protected</span>:
+00076 <span class="preprocessor">#ifndef DOXYGEN_SHOULD_SKIP_THIS</span>
+00077 <span class="preprocessor"></span>        hid_t id;       <span class="comment">// HDF5 object id</span>
+00078 
+00079         <span class="comment">// Default constructor.</span>
+00080         IdComponent();
+00081 
+00082         <span class="comment">// Gets the name of the file, in which an HDF5 object belongs.</span>
+00083 <span class="preprocessor">#ifndef H5_NO_STD</span>
+00084 <span class="preprocessor"></span>        std::string p_get_file_name() <span class="keyword">const</span>;
+00085 <span class="preprocessor">#else</span>
+00086 <span class="preprocessor"></span>        string p_get_file_name() <span class="keyword">const</span>;
+00087 <span class="preprocessor">#endif  // H5_NO_STD</span>
+00088 <span class="preprocessor"></span>
+00089         <span class="comment">// Gets the id of the H5 file in which the given object is located.</span>
+00090         hid_t p_get_file_id();
+00091 
+00092         <span class="comment">// Creates a reference to an HDF5 object or a dataset region.</span>
+00093         <span class="keywordtype">void</span>* p_reference(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, hid_t space_id, H5R_type_t ref_type) <span class="keyword">const</span>;
+00094 
+00095         <span class="comment">// Retrieves the type of object that an object reference points to.</span>
+00096         H5G_obj_t p_get_obj_type(<span class="keywordtype">void</span> *ref, H5R_type_t ref_type) <span class="keyword">const</span>;
+00097 
+00098         <span class="comment">// Retrieves a dataspace with the region pointed to selected.</span>
+00099         hid_t p_get_region(<span class="keywordtype">void</span> *ref, H5R_type_t ref_type) <span class="keyword">const</span>;
+00100 
+00101         <span class="comment">// Verifies that the given id is valid.</span>
+00102         <span class="keywordtype">bool</span> p_valid_id(hid_t obj_id) <span class="keyword">const</span>;
+00103 
+00104 <span class="preprocessor">#endif // DOXYGEN_SHOULD_SKIP_THIS</span>
+00105 <span class="preprocessor"></span>
+00106 }; <span class="comment">// end class IdComponent</span>
+00107 
+00108 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00109 <span class="preprocessor"></span>}
+00110 <span class="preprocessor">#endif</span>
+00111 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IdComponent_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IdComponent_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IdComponent_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5IdComponent.h File Reference</h1>
+<p>
+<a href="H5IdComponent_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Include_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Include_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Include_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,366 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Include.h</h1><a href="H5Include_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="comment">// Added this line for CC to compile at this time.  Will remove it when</span>
+00017 <span class="comment">// the problem of "Multiple declaration for RcsId" is fixed. BMR - 10/30/00</span>
+00018 
+00019 <span class="comment">// This problem is removed.  I could replace all #include "H5Include.h"</span>
+00020 <span class="comment">// by #include &lt;hdf5.h&gt;, but decide not to. BMR - 3/22/01</span>
+00021 
+00022 <span class="preprocessor">#include &lt;hdf5.h&gt;</span>
+00023 
+00024 <span class="comment">// Define bool type for platforms that don't support bool yet</span>
+00025 <span class="preprocessor">#ifdef BOOL_NOTDEFINED</span>
+00026 <span class="preprocessor"></span><span class="preprocessor">#ifdef false</span>
+00027 <span class="preprocessor"></span><span class="preprocessor">#undef false</span>
+00028 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00029 <span class="preprocessor"></span><span class="preprocessor">#ifdef true</span>
+00030 <span class="preprocessor"></span><span class="preprocessor">#undef true</span>
+00031 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+00032 <span class="preprocessor"></span><span class="keyword">typedef</span> <span class="keywordtype">int</span> bool;
+00033 <span class="keyword">const</span> <span class="keywordtype">bool</span>  <span class="keyword">false</span> = 0;
+00034 <span class="keyword">const</span> <span class="keywordtype">bool</span>  <span class="keyword">true</span>  = 1;
+00035 <span class="preprocessor">#endif</span>
+00036 <span class="preprocessor"></span>
+00037 
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Include_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Include_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Include_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,335 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Include.h File Reference</h1><code>#include &lt;hdf5.h&gt;</code><br>
+
+<p>
+<a href="H5Include_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IntType_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IntType_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IntType_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,351 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5IntType.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AbstractDs_8h-source.html">H5AbstractDs.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DxferProp_8h-source.html">H5DxferProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AtomType_8h-source.html">H5AtomType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IntType_8h-source.html">H5IntType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSet_8h-source.html">H5DataSet.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PredType_8h-source.html">H5PredType.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IntType_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IntType_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IntType_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,383 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5IntType.h</h1><a href="H5IntType_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5IntType_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5IntType_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+<a name="l00022"></a><a class="code" href="classH5_1_1IntType.html">00022</a> <span class="preprocessor"></span><span class="keyword">class </span>H5_DLLCPP IntType : <span class="keyword">public</span> <a class="code" href="classH5_1_1AtomType.html">AtomType</a> {
+00023    <span class="keyword">public</span>:
+00024         <span class="comment">// Creates a integer type using a predefined type</span>
+00025         IntType(<span class="keyword">const</span> <a class="code" href="classH5_1_1PredType.html">PredType</a>&amp; pred_type);
+00026 
+00027         <span class="comment">// Gets the integer datatype of the specified dataset</span>
+00028         IntType(<span class="keyword">const</span> <a class="code" href="classH5_1_1DataSet.html">DataSet</a>&amp; dataset);
+00029 
+00030         <span class="comment">// Retrieves the sign type for an integer type</span>
+00031         H5T_sign_t getSign() <span class="keyword">const</span>;
+00032 
+00033         <span class="comment">// Sets the sign proprety for an integer type.</span>
+00034         <span class="keywordtype">void</span> setSign( H5T_sign_t sign ) <span class="keyword">const</span>;
+00035 
+00036         <span class="comment">// Returns this class name</span>
+<a name="l00037"></a><a class="code" href="classH5_1_1IntType.html#a4">00037</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="stringliteral">"IntType"</span>); }
+00038 
+00039         <span class="comment">// Default constructor</span>
+00040         IntType();
+00041 
+00042         <span class="comment">// Creates a integer datatype using an existing id</span>
+00043         IntType(<span class="keyword">const</span> hid_t existing_id);
+00044 
+00045         <span class="comment">// Copy constructor: makes copy of IntType object</span>
+00046         IntType(<span class="keyword">const</span> IntType&amp; original);
+00047 
+00048         <span class="comment">// Noop destructor.</span>
+00049         <span class="keyword">virtual</span> ~IntType();
+00050 };
+00051 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00052 <span class="preprocessor"></span>}
+00053 <span class="preprocessor">#endif</span>
+00054 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IntType_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IntType_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5IntType_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5IntType.h File Reference</h1>
+<p>
+<a href="H5IntType_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Library_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Library_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Library_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,340 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Library.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5CppDoc_8h-source.html">H5CppDoc.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Library_8h-source.html">H5Library.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Library_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Library_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Library_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,398 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Library.h</h1><a href="H5Library_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5Library_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5Library_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>
+00023 <span class="preprocessor">#ifndef DOXYGEN_SHOULD_SKIP_THIS</span>
+00024 <span class="preprocessor"></span><span class="preprocessor">#define NOTATEXIT       (-10)   // just in case the HDF5 library use more</span>
+00025 <span class="preprocessor"></span>        <span class="comment">// negative constants. Note: the solution used for the atexit/global</span>
+00026         <span class="comment">// destructors is not reliable, and desperately needs improvement</span>
+00027         <span class="comment">// It is not even working, inifiteloop message still printed when</span>
+00028         <span class="comment">// calling H5close</span>
+00029 <span class="preprocessor">#endif // DOXYGEN_SHOULD_SKIP_THIS</span>
+00030 <span class="preprocessor"></span>
+<a name="l00031"></a><a class="code" href="classH5_1_1H5Library.html">00031</a> <span class="keyword">class </span>H5_DLLCPP H5Library {
+00032    <span class="keyword">public</span>:
+00033 <span class="preprocessor">#ifndef DOXYGEN_SHOULD_SKIP_THIS</span>
+00034 <span class="preprocessor"></span>        <span class="keyword">static</span> <span class="keywordtype">bool</span> need_cleanup; <span class="comment">// indicates if H5close should be called</span>
+00035 <span class="preprocessor">#endif // DOXYGEN_SHOULD_SKIP_THIS</span>
+00036 <span class="preprocessor"></span>
+00037         <span class="comment">// Initializes the HDF5 library.</span>
+00038         <span class="keyword">static</span> <span class="keywordtype">void</span> open();
+00039 
+00040         <span class="comment">// Flushes all data to disk, closes files, and cleans up memory.</span>
+00041         <span class="keyword">static</span> <span class="keywordtype">void</span> close();
+00042 
+00043         <span class="comment">// Instructs library not to install atexit cleanup routine</span>
+00044         <span class="keyword">static</span> <span class="keywordtype">void</span> dontAtExit();
+00045 
+00046         <span class="comment">// Returns the HDF library release number.</span>
+00047         <span class="keyword">static</span> <span class="keywordtype">void</span> getLibVersion( <span class="keywordtype">unsigned</span>&amp; majnum, <span class="keywordtype">unsigned</span>&amp; minnum, <span class="keywordtype">unsigned</span>&amp; relnum );
+00048 
+00049         <span class="comment">// Verifies that the arguments match the version numbers compiled</span>
+00050         <span class="comment">// into the library</span>
+00051         <span class="keyword">static</span> <span class="keywordtype">void</span> checkVersion( <span class="keywordtype">unsigned</span> majnum, <span class="keywordtype">unsigned</span> minnum, <span class="keywordtype">unsigned</span> relnum );
+00052 
+00053         <span class="comment">// Walks through all the garbage collection routines for the library,</span>
+00054         <span class="comment">// which are supposed to free any unused memory they have allocated.</span>
+00055         <span class="keyword">static</span> <span class="keywordtype">void</span> garbageCollect();
+00056 
+00057         <span class="comment">// Sets limits on the different kinds of free lists.</span>
+00058         <span class="keyword">static</span> <span class="keywordtype">void</span> setFreeListLimits(<span class="keywordtype">int</span> reg_global_lim, <span class="keywordtype">int</span> reg_list_lim, <span class="keywordtype">int</span>
+00059         arr_global_lim, <span class="keywordtype">int</span> arr_list_lim, <span class="keywordtype">int</span> blk_global_lim, <span class="keywordtype">int</span> blk_list_lim);
+00060 
+00061    <span class="keyword">private</span>:
+00062         <span class="comment">// Default constructor - no instance ever created</span>
+00063         H5Library() {};
+00064 
+00065 };
+00066 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00067 <span class="preprocessor"></span>}
+00068 <span class="preprocessor">#endif</span>
+00069 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Library_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Library_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Library_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Library.h File Reference</h1>
+<p>
+<a href="H5Library_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Object_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Object_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Object_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,347 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Object.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AbstractDs_8h-source.html">H5AbstractDs.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Attribute_8h-source.html">H5Attribute.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Object_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Object_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Object_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,432 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Object.h</h1><a href="H5Object_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5Object_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5Object_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#include "<a class="code" href="H5Classes_8h.html">H5Classes.h</a>"</span>          <span class="comment">// constains forward class declarations</span>
+00020 
+00021 <span class="comment">// H5Object is a baseclass.  It has these subclasses:</span>
+00022 <span class="comment">// Group, AbstractDs, and DataType.</span>
+00023 <span class="comment">// AbstractDs, in turn, has subclasses DataSet and Attribute.</span>
+00024 <span class="comment">// DataType, in turn, has several specific datatypes as subclasses.</span>
+00025 
+00026 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00027 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00028 <span class="preprocessor">#endif</span>
+00029 <span class="preprocessor"></span>
+00030 <span class="preprocessor">#ifndef DOXYGEN_SHOULD_SKIP_THIS</span>
+00031 <span class="preprocessor"></span><span class="keyword">class </span>H5_DLLCPP H5Object;  <span class="comment">// forward declaration for UserData4Aiterate</span>
+00032 
+00033 <span class="comment">// Define the operator function pointer for H5Aiterate().</span>
+00034 <span class="keyword">typedef</span> void (*attr_operator_t)( H5Object&amp; loc<span class="comment">/*in*/</span>,
+00035                                  <span class="keyword">const</span> string attr_name<span class="comment">/*in*/</span>,
+00036                                  <span class="keywordtype">void</span> *operator_data<span class="comment">/*in,out*/</span>);
+00037 
+00038 <span class="keyword">class </span>UserData4Aiterate { <span class="comment">// user data for attribute iteration</span>
+00039    <span class="keyword">public</span>:
+00040         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>* idx;
+00041         attr_operator_t op;
+00042         <span class="keywordtype">void</span>* opData;
+00043         H5Object* object;
+00044 };
+00045 <span class="preprocessor">#endif // DOXYGEN_SHOULD_SKIP_THIS</span>
+00046 <span class="preprocessor"></span>
+00047 <span class="comment">// The above part is being moved into Iterator, but not completed</span>
+00048 
+<a name="l00049"></a><a class="code" href="classH5_1_1H5Object.html">00049</a> <span class="keyword">class </span>H5_DLLCPP H5Object : <span class="keyword">public</span> <a class="code" href="classH5_1_1IdComponent.html">IdComponent</a> {
+00050    <span class="keyword">public</span>:
+00051         <span class="comment">// Creates an attribute for a group, dataset, or named datatype.</span>
+00052         <span class="comment">// PropList is currently not used, so always be default.</span>
+00053         <a class="code" href="classH5_1_1Attribute.html">Attribute</a> createAttribute( <span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; type, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; space, <span class="keyword">const</span> <a class="code" href="classH5_1_1PropList.html">PropList</a>&amp; create_plist = <a class="code" href="classH5_1_1PropList.html#s0">PropList::DEFAULT</a> ) <span class="keyword">const</span>;
+00054         <a class="code" href="classH5_1_1Attribute.html">Attribute</a> createAttribute( <span class="keyword">const</span> string&amp; name, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>&amp; type, <span class="keyword">const</span> <a class="code" href="classH5_1_1DataSpace.html">DataSpace</a>&amp; space, <span class="keyword">const</span> <a class="code" href="classH5_1_1PropList.html">PropList</a>&amp; create_plist = <a class="code" href="classH5_1_1PropList.html#s0">PropList::DEFAULT</a> ) <span class="keyword">const</span>;
+00055 
+00056         <span class="comment">// Opens an attribute given its name.</span>
+00057         <a class="code" href="classH5_1_1Attribute.html">Attribute</a> openAttribute( <span class="keyword">const</span> <span class="keywordtype">char</span>* name ) <span class="keyword">const</span>;
+00058         <a class="code" href="classH5_1_1Attribute.html">Attribute</a> openAttribute( <span class="keyword">const</span> string&amp; name ) <span class="keyword">const</span>;
+00059 
+00060         <span class="comment">// Opens an attribute given its index.</span>
+00061         <a class="code" href="classH5_1_1Attribute.html">Attribute</a> openAttribute( <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> idx ) <span class="keyword">const</span>;
+00062 
+00063         <span class="comment">// Flushes all buffers associated with this object to disk</span>
+00064         <span class="keywordtype">void</span> flush( H5F_scope_t scope ) <span class="keyword">const</span>;
+00065 
+00066         <span class="comment">// Gets the name of the file, in which this HDF5 object belongs.</span>
+00067         string getFileName() <span class="keyword">const</span>;
+00068 
+00069         <span class="comment">// Determines the number of attributes attached to this object.</span>
+00070         <span class="keywordtype">int</span> getNumAttrs() <span class="keyword">const</span>;
+00071 
+00072         <span class="comment">// Iterate user's function over the attributes of this object</span>
+00073         <span class="keywordtype">int</span> iterateAttrs( attr_operator_t user_op, <span class="keywordtype">unsigned</span>* idx = NULL, <span class="keywordtype">void</span>* op_data = NULL );
+00074 
+00075         <span class="comment">// Removes the named attribute from this object.</span>
+00076         <span class="keywordtype">void</span> removeAttr( <span class="keyword">const</span> <span class="keywordtype">char</span>* name ) <span class="keyword">const</span>;
+00077         <span class="keywordtype">void</span> removeAttr( <span class="keyword">const</span> string&amp; name ) <span class="keyword">const</span>;
+00078 
+00079         <span class="comment">// Renames the attribute to a new name.</span>
+00080         <span class="keywordtype">void</span> renameAttr(<span class="keyword">const</span> <span class="keywordtype">char</span>* oldname, <span class="keyword">const</span> <span class="keywordtype">char</span>* newname) <span class="keyword">const</span>;
+00081         <span class="keywordtype">void</span> renameAttr(<span class="keyword">const</span> string&amp; oldname, <span class="keyword">const</span> string&amp; newname) <span class="keyword">const</span>;
+00082 
+00083         <span class="comment">// Copy constructor: makes copy of an H5Object object.</span>
+00084         H5Object(<span class="keyword">const</span> H5Object&amp; original);
+00085 
+00086         <span class="comment">// Noop destructor.</span>
+00087         <span class="keyword">virtual</span> ~H5Object();
+00088 
+00089    <span class="keyword">protected</span>:
+00090 <span class="preprocessor">#ifndef DOXYGEN_SHOULD_SKIP_THIS</span>
+00091 <span class="preprocessor"></span>        <span class="comment">// Default constructor</span>
+00092         H5Object();
+00093 
+00094         <span class="comment">// Creates a copy of an existing object giving the object id</span>
+00095         H5Object( <span class="keyword">const</span> hid_t object_id );
+00096 <span class="preprocessor">#endif // DOXYGEN_SHOULD_SKIP_THIS</span>
+00097 <span class="preprocessor"></span>
+00098 }; <span class="comment">/* end class H5Object */</span>
+00099 
+00100 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00101 <span class="preprocessor"></span>}
+00102 <span class="preprocessor">#endif</span>
+00103 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Object_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Object_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5Object_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,338 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5Object.h File Reference</h1><code>#include "<a class="el" href="H5Classes_8h-source.html">H5Classes.h</a>"</code><br>
+
+<p>
+<a href="H5Object_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PredType_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PredType_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PredType_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,347 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5PredType.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AtomType_8h-source.html">H5AtomType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Library_8h-source.html">H5Library.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PredType_8h-source.html">H5PredType.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PredType_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PredType_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PredType_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,587 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5PredType.h</h1><a href="H5PredType_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="comment">// PredType holds the definition of all the HDF5 predefined datatypes.</span>
+00017 <span class="comment">// These types can only be made copy of, not created by H5Tcreate or</span>
+00018 <span class="comment">// closed by H5Tclose.  They are treated as constants.</span>
+00020 <span class="comment"></span>
+00021 <span class="preprocessor">#ifndef _H5PredType_H</span>
+00022 <span class="preprocessor"></span><span class="preprocessor">#define _H5PredType_H</span>
+00023 <span class="preprocessor"></span>
+00024 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00025 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00026 <span class="preprocessor">#endif</span>
+00027 <span class="preprocessor"></span>
+<a name="l00028"></a><a class="code" href="classH5_1_1PredType.html">00028</a> <span class="keyword">class </span>H5_DLLCPP PredType : <span class="keyword">public</span> <a class="code" href="classH5_1_1AtomType.html">AtomType</a> {
+00029    <span class="keyword">public</span>:
+00030         <span class="comment">// Returns this class name</span>
+<a name="l00031"></a><a class="code" href="classH5_1_1PredType.html#a0">00031</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="stringliteral">"PredType"</span>); }
+00032 
+00033         <span class="comment">// Makes a copy of the predefined type and stores the new</span>
+00034         <span class="comment">// id in the left hand side object.</span>
+00035         PredType&amp; operator=( <span class="keyword">const</span> PredType&amp; rhs );
+00036 
+00037         <span class="comment">// Copy constructor - makes copy of the original object</span>
+00038         PredType( <span class="keyword">const</span> PredType&amp; original );
+00039 
+00040         <span class="comment">// Returns the HDF5 predefined type id.</span>
+00041         <span class="keyword">virtual</span> hid_t getId() <span class="keyword">const</span>;
+00042 
+00043         <span class="comment">// Noop destructor</span>
+00044         <span class="keyword">virtual</span> ~PredType();
+00045 
+00046         <span class="comment">// Declaration of predefined types; their definition is in H5PredType.cpp</span>
+<a name="l00047"></a><a class="code" href="classH5_1_1PredType.html#s0">00047</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_I8BE;
+<a name="l00048"></a><a class="code" href="classH5_1_1PredType.html#s1">00048</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_I8LE;
+<a name="l00049"></a><a class="code" href="classH5_1_1PredType.html#s2">00049</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_I16BE;
+<a name="l00050"></a><a class="code" href="classH5_1_1PredType.html#s3">00050</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_I16LE;
+<a name="l00051"></a><a class="code" href="classH5_1_1PredType.html#s4">00051</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_I32BE;
+<a name="l00052"></a><a class="code" href="classH5_1_1PredType.html#s5">00052</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_I32LE;
+<a name="l00053"></a><a class="code" href="classH5_1_1PredType.html#s6">00053</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_I64BE;
+<a name="l00054"></a><a class="code" href="classH5_1_1PredType.html#s7">00054</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_I64LE;
+<a name="l00055"></a><a class="code" href="classH5_1_1PredType.html#s8">00055</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_U8BE;
+<a name="l00056"></a><a class="code" href="classH5_1_1PredType.html#s9">00056</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_U8LE;
+<a name="l00057"></a><a class="code" href="classH5_1_1PredType.html#s10">00057</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_U16BE;
+<a name="l00058"></a><a class="code" href="classH5_1_1PredType.html#s11">00058</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_U16LE;
+<a name="l00059"></a><a class="code" href="classH5_1_1PredType.html#s12">00059</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_U32BE;
+<a name="l00060"></a><a class="code" href="classH5_1_1PredType.html#s13">00060</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_U32LE;
+<a name="l00061"></a><a class="code" href="classH5_1_1PredType.html#s14">00061</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_U64BE;
+<a name="l00062"></a><a class="code" href="classH5_1_1PredType.html#s15">00062</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_U64LE;
+<a name="l00063"></a><a class="code" href="classH5_1_1PredType.html#s16">00063</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_B8BE;
+<a name="l00064"></a><a class="code" href="classH5_1_1PredType.html#s17">00064</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_B8LE;
+<a name="l00065"></a><a class="code" href="classH5_1_1PredType.html#s18">00065</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_B16BE;
+<a name="l00066"></a><a class="code" href="classH5_1_1PredType.html#s19">00066</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_B16LE;
+<a name="l00067"></a><a class="code" href="classH5_1_1PredType.html#s20">00067</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_B32BE;
+<a name="l00068"></a><a class="code" href="classH5_1_1PredType.html#s21">00068</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_B32LE;
+<a name="l00069"></a><a class="code" href="classH5_1_1PredType.html#s22">00069</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_B64BE;
+<a name="l00070"></a><a class="code" href="classH5_1_1PredType.html#s23">00070</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_B64LE;
+<a name="l00071"></a><a class="code" href="classH5_1_1PredType.html#s24">00071</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_REF_OBJ;
+<a name="l00072"></a><a class="code" href="classH5_1_1PredType.html#s25">00072</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType STD_REF_DSETREG;
+00073 
+<a name="l00074"></a><a class="code" href="classH5_1_1PredType.html#s26">00074</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType C_S1;
+<a name="l00075"></a><a class="code" href="classH5_1_1PredType.html#s27">00075</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType FORTRAN_S1;
+00076 
+<a name="l00077"></a><a class="code" href="classH5_1_1PredType.html#s28">00077</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType IEEE_F32BE;
+<a name="l00078"></a><a class="code" href="classH5_1_1PredType.html#s29">00078</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType IEEE_F32LE;
+<a name="l00079"></a><a class="code" href="classH5_1_1PredType.html#s30">00079</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType IEEE_F64BE;
+<a name="l00080"></a><a class="code" href="classH5_1_1PredType.html#s31">00080</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType IEEE_F64LE;
+00081 
+<a name="l00082"></a><a class="code" href="classH5_1_1PredType.html#s32">00082</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType UNIX_D32BE;
+<a name="l00083"></a><a class="code" href="classH5_1_1PredType.html#s33">00083</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType UNIX_D32LE;
+<a name="l00084"></a><a class="code" href="classH5_1_1PredType.html#s34">00084</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType UNIX_D64BE;
+<a name="l00085"></a><a class="code" href="classH5_1_1PredType.html#s35">00085</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType UNIX_D64LE;
+00086 
+<a name="l00087"></a><a class="code" href="classH5_1_1PredType.html#s36">00087</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType INTEL_I8;
+<a name="l00088"></a><a class="code" href="classH5_1_1PredType.html#s37">00088</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType INTEL_I16;
+<a name="l00089"></a><a class="code" href="classH5_1_1PredType.html#s38">00089</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType INTEL_I32;
+<a name="l00090"></a><a class="code" href="classH5_1_1PredType.html#s39">00090</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType INTEL_I64;
+<a name="l00091"></a><a class="code" href="classH5_1_1PredType.html#s40">00091</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType INTEL_U8;
+<a name="l00092"></a><a class="code" href="classH5_1_1PredType.html#s41">00092</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType INTEL_U16;
+<a name="l00093"></a><a class="code" href="classH5_1_1PredType.html#s42">00093</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType INTEL_U32;
+<a name="l00094"></a><a class="code" href="classH5_1_1PredType.html#s43">00094</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType INTEL_U64;
+<a name="l00095"></a><a class="code" href="classH5_1_1PredType.html#s44">00095</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType INTEL_B8;
+<a name="l00096"></a><a class="code" href="classH5_1_1PredType.html#s45">00096</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType INTEL_B16;
+<a name="l00097"></a><a class="code" href="classH5_1_1PredType.html#s46">00097</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType INTEL_B32;
+<a name="l00098"></a><a class="code" href="classH5_1_1PredType.html#s47">00098</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType INTEL_B64;
+<a name="l00099"></a><a class="code" href="classH5_1_1PredType.html#s48">00099</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType INTEL_F32;
+<a name="l00100"></a><a class="code" href="classH5_1_1PredType.html#s49">00100</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType INTEL_F64;
+00101 
+<a name="l00102"></a><a class="code" href="classH5_1_1PredType.html#s50">00102</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType ALPHA_I8;
+<a name="l00103"></a><a class="code" href="classH5_1_1PredType.html#s51">00103</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType ALPHA_I16;
+<a name="l00104"></a><a class="code" href="classH5_1_1PredType.html#s52">00104</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType ALPHA_I32;
+<a name="l00105"></a><a class="code" href="classH5_1_1PredType.html#s53">00105</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType ALPHA_I64;
+<a name="l00106"></a><a class="code" href="classH5_1_1PredType.html#s54">00106</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType ALPHA_U8;
+<a name="l00107"></a><a class="code" href="classH5_1_1PredType.html#s55">00107</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType ALPHA_U16;
+<a name="l00108"></a><a class="code" href="classH5_1_1PredType.html#s56">00108</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType ALPHA_U32;
+<a name="l00109"></a><a class="code" href="classH5_1_1PredType.html#s57">00109</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType ALPHA_U64;
+<a name="l00110"></a><a class="code" href="classH5_1_1PredType.html#s58">00110</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType ALPHA_B8;
+<a name="l00111"></a><a class="code" href="classH5_1_1PredType.html#s59">00111</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType ALPHA_B16;
+<a name="l00112"></a><a class="code" href="classH5_1_1PredType.html#s60">00112</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType ALPHA_B32;
+<a name="l00113"></a><a class="code" href="classH5_1_1PredType.html#s61">00113</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType ALPHA_B64;
+<a name="l00114"></a><a class="code" href="classH5_1_1PredType.html#s62">00114</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType ALPHA_F32;
+<a name="l00115"></a><a class="code" href="classH5_1_1PredType.html#s63">00115</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType ALPHA_F64;
+00116 
+<a name="l00117"></a><a class="code" href="classH5_1_1PredType.html#s64">00117</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType MIPS_I8;
+<a name="l00118"></a><a class="code" href="classH5_1_1PredType.html#s65">00118</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType MIPS_I16;
+<a name="l00119"></a><a class="code" href="classH5_1_1PredType.html#s66">00119</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType MIPS_I32;
+<a name="l00120"></a><a class="code" href="classH5_1_1PredType.html#s67">00120</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType MIPS_I64;
+<a name="l00121"></a><a class="code" href="classH5_1_1PredType.html#s68">00121</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType MIPS_U8;
+<a name="l00122"></a><a class="code" href="classH5_1_1PredType.html#s69">00122</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType MIPS_U16;
+<a name="l00123"></a><a class="code" href="classH5_1_1PredType.html#s70">00123</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType MIPS_U32;
+<a name="l00124"></a><a class="code" href="classH5_1_1PredType.html#s71">00124</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType MIPS_U64;
+<a name="l00125"></a><a class="code" href="classH5_1_1PredType.html#s72">00125</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType MIPS_B8;
+<a name="l00126"></a><a class="code" href="classH5_1_1PredType.html#s73">00126</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType MIPS_B16;
+<a name="l00127"></a><a class="code" href="classH5_1_1PredType.html#s74">00127</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType MIPS_B32;
+<a name="l00128"></a><a class="code" href="classH5_1_1PredType.html#s75">00128</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType MIPS_B64;
+<a name="l00129"></a><a class="code" href="classH5_1_1PredType.html#s76">00129</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType MIPS_F32;
+<a name="l00130"></a><a class="code" href="classH5_1_1PredType.html#s77">00130</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType MIPS_F64;
+00131 
+<a name="l00132"></a><a class="code" href="classH5_1_1PredType.html#s78">00132</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_CHAR;
+<a name="l00133"></a><a class="code" href="classH5_1_1PredType.html#s79">00133</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_SCHAR;
+<a name="l00134"></a><a class="code" href="classH5_1_1PredType.html#s80">00134</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_UCHAR;
+<a name="l00135"></a><a class="code" href="classH5_1_1PredType.html#s81">00135</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_SHORT;
+<a name="l00136"></a><a class="code" href="classH5_1_1PredType.html#s82">00136</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_USHORT;
+<a name="l00137"></a><a class="code" href="classH5_1_1PredType.html#s83">00137</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_INT;
+<a name="l00138"></a><a class="code" href="classH5_1_1PredType.html#s84">00138</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_UINT;
+<a name="l00139"></a><a class="code" href="classH5_1_1PredType.html#s85">00139</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_LONG;
+<a name="l00140"></a><a class="code" href="classH5_1_1PredType.html#s86">00140</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_ULONG;
+<a name="l00141"></a><a class="code" href="classH5_1_1PredType.html#s87">00141</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_LLONG;
+<a name="l00142"></a><a class="code" href="classH5_1_1PredType.html#s88">00142</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_ULLONG;
+<a name="l00143"></a><a class="code" href="classH5_1_1PredType.html#s89">00143</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_FLOAT;
+<a name="l00144"></a><a class="code" href="classH5_1_1PredType.html#s90">00144</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_DOUBLE;
+<a name="l00145"></a><a class="code" href="classH5_1_1PredType.html#s91">00145</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_LDOUBLE;
+<a name="l00146"></a><a class="code" href="classH5_1_1PredType.html#s92">00146</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_B8;
+<a name="l00147"></a><a class="code" href="classH5_1_1PredType.html#s93">00147</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_B16;
+<a name="l00148"></a><a class="code" href="classH5_1_1PredType.html#s94">00148</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_B32;
+<a name="l00149"></a><a class="code" href="classH5_1_1PredType.html#s95">00149</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_B64;
+<a name="l00150"></a><a class="code" href="classH5_1_1PredType.html#s96">00150</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_OPAQUE;
+<a name="l00151"></a><a class="code" href="classH5_1_1PredType.html#s97">00151</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_HSIZE;
+<a name="l00152"></a><a class="code" href="classH5_1_1PredType.html#s98">00152</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_HSSIZE;
+<a name="l00153"></a><a class="code" href="classH5_1_1PredType.html#s99">00153</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_HERR;
+<a name="l00154"></a><a class="code" href="classH5_1_1PredType.html#s100">00154</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_HBOOL;
+00155 
+<a name="l00156"></a><a class="code" href="classH5_1_1PredType.html#s101">00156</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_INT8;
+<a name="l00157"></a><a class="code" href="classH5_1_1PredType.html#s102">00157</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_UINT8;
+<a name="l00158"></a><a class="code" href="classH5_1_1PredType.html#s103">00158</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_INT_LEAST8;
+<a name="l00159"></a><a class="code" href="classH5_1_1PredType.html#s104">00159</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_UINT_LEAST8;
+<a name="l00160"></a><a class="code" href="classH5_1_1PredType.html#s105">00160</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_INT_FAST8;
+<a name="l00161"></a><a class="code" href="classH5_1_1PredType.html#s106">00161</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_UINT_FAST8;
+00162 
+<a name="l00163"></a><a class="code" href="classH5_1_1PredType.html#s107">00163</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_INT16;
+<a name="l00164"></a><a class="code" href="classH5_1_1PredType.html#s108">00164</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_UINT16;
+<a name="l00165"></a><a class="code" href="classH5_1_1PredType.html#s109">00165</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_INT_LEAST16;
+<a name="l00166"></a><a class="code" href="classH5_1_1PredType.html#s110">00166</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_UINT_LEAST16;
+<a name="l00167"></a><a class="code" href="classH5_1_1PredType.html#s111">00167</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_INT_FAST16;
+<a name="l00168"></a><a class="code" href="classH5_1_1PredType.html#s112">00168</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_UINT_FAST16;
+00169 
+<a name="l00170"></a><a class="code" href="classH5_1_1PredType.html#s113">00170</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_INT32;
+<a name="l00171"></a><a class="code" href="classH5_1_1PredType.html#s114">00171</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_UINT32;
+<a name="l00172"></a><a class="code" href="classH5_1_1PredType.html#s115">00172</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_INT_LEAST32;
+<a name="l00173"></a><a class="code" href="classH5_1_1PredType.html#s116">00173</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_UINT_LEAST32;
+<a name="l00174"></a><a class="code" href="classH5_1_1PredType.html#s117">00174</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_INT_FAST32;
+<a name="l00175"></a><a class="code" href="classH5_1_1PredType.html#s118">00175</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_UINT_FAST32;
+00176 
+<a name="l00177"></a><a class="code" href="classH5_1_1PredType.html#s119">00177</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_INT64;
+<a name="l00178"></a><a class="code" href="classH5_1_1PredType.html#s120">00178</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_UINT64;
+<a name="l00179"></a><a class="code" href="classH5_1_1PredType.html#s121">00179</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_INT_LEAST64;
+<a name="l00180"></a><a class="code" href="classH5_1_1PredType.html#s122">00180</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_UINT_LEAST64;
+<a name="l00181"></a><a class="code" href="classH5_1_1PredType.html#s123">00181</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_INT_FAST64;
+<a name="l00182"></a><a class="code" href="classH5_1_1PredType.html#s124">00182</a>         <span class="keyword">static</span> <span class="keyword">const</span> PredType NATIVE_UINT_FAST64;
+00183 
+00184 <span class="preprocessor">#ifndef DOXYGEN_SHOULD_SKIP_THIS</span>
+00185 <span class="preprocessor"></span>        <span class="comment">// These dummy functions do not inherit from DataType - they'll</span>
+00186         <span class="comment">// throw a DataTypeIException if invoked.</span>
+00187         <span class="keywordtype">void</span> commit( <a class="code" href="classH5_1_1H5Object.html">H5Object</a>&amp; loc, <span class="keyword">const</span> string&amp; name );
+00188         <span class="keywordtype">void</span> commit( <a class="code" href="classH5_1_1H5Object.html">H5Object</a>&amp; loc, <span class="keyword">const</span> <span class="keywordtype">char</span>* name );
+00189         <span class="keywordtype">bool</span> committed();
+00190 <span class="preprocessor">#endif // DOXYGEN_SHOULD_SKIP_THIS</span>
+00191 <span class="preprocessor"></span>
+00192    <span class="keyword">private</span>:
+00193         <span class="comment">// added this to work around the atexit/global destructor problem</span>
+00194         <span class="comment">// temporarily - it'll prevent the use of atexit to clean up</span>
+00195         <span class="keyword">static</span> <span class="keyword">const</span> PredType NotAtexit;        <span class="comment">// not working yet</span>
+00196 
+00197         <span class="comment">// This enum type is used by this class only to handle the</span>
+00198         <span class="comment">// global PredType objects.  These values will ensure that the</span>
+00199         <span class="comment">// application receives an appropriate and uptodated id for an</span>
+00200         <span class="comment">// HDF5 predefined type; particularly usefull when the application</span>
+00201         <span class="comment">// closes and opens the library again.</span>
+00202         <span class="keyword">enum</span> predefined_types {
+00203 
+00204             INVALID = 0, E_C_S1 = 1, E_FORTRAN_S1,
+00205 
+00206             E_STD_I8BE, E_STD_I8LE, E_STD_I16BE, E_STD_I16LE, E_STD_I32BE,
+00207             E_STD_I32LE, E_STD_I64BE, E_STD_I64LE, E_STD_U8BE, E_STD_U8LE,
+00208             E_STD_U16BE, E_STD_U16LE, E_STD_U32BE, E_STD_U32LE, E_STD_U64BE,
+00209             E_STD_U64LE, E_STD_B8BE, E_STD_B8LE, E_STD_B16BE, E_STD_B16LE,
+00210             E_STD_B32BE, E_STD_B32LE, E_STD_B64BE, E_STD_B64LE, E_STD_REF_OBJ,
+00211             E_STD_REF_DSETREG,
+00212 
+00213             E_IEEE_F32BE, E_IEEE_F32LE, E_IEEE_F64BE, E_IEEE_F64LE,
+00214 
+00215             E_UNIX_D32BE, E_UNIX_D32LE, E_UNIX_D64BE, E_UNIX_D64LE,
+00216 
+00217             E_INTEL_I8, E_INTEL_I16, E_INTEL_I32, E_INTEL_I64, E_INTEL_U8,
+00218             E_INTEL_U16, E_INTEL_U32, E_INTEL_U64, E_INTEL_B8, E_INTEL_B16,
+00219             E_INTEL_B32, E_INTEL_B64, E_INTEL_F32, E_INTEL_F64,
+00220 
+00221             E_ALPHA_I8, E_ALPHA_I16, E_ALPHA_I32, E_ALPHA_I64, E_ALPHA_U8,
+00222             E_ALPHA_U16, E_ALPHA_U32, E_ALPHA_U64, E_ALPHA_B8, E_ALPHA_B16,
+00223             E_ALPHA_B32, E_ALPHA_B64, E_ALPHA_F32, E_ALPHA_F64,
+00224 
+00225             E_MIPS_I8, E_MIPS_I16, E_MIPS_I32, E_MIPS_I64, E_MIPS_U8,
+00226             E_MIPS_U16, E_MIPS_U32, E_MIPS_U64, E_MIPS_B8, E_MIPS_B16,
+00227             E_MIPS_B32, E_MIPS_B64, E_MIPS_F32, E_MIPS_F64,
+00228 
+00229             E_NATIVE_CHAR, E_NATIVE_INT, E_NATIVE_FLOAT, E_NATIVE_SCHAR,
+00230             E_NATIVE_UCHAR, E_NATIVE_SHORT, E_NATIVE_USHORT, E_NATIVE_UINT,
+00231             E_NATIVE_LONG, E_NATIVE_ULONG, E_NATIVE_LLONG, E_NATIVE_ULLONG,
+00232             E_NATIVE_DOUBLE, E_NATIVE_LDOUBLE, E_NATIVE_B8, E_NATIVE_B16,
+00233             E_NATIVE_B32, E_NATIVE_B64, E_NATIVE_OPAQUE, E_NATIVE_HSIZE,
+00234             E_NATIVE_HSSIZE, E_NATIVE_HERR, E_NATIVE_HBOOL, E_NATIVE_INT8,
+00235             E_NATIVE_UINT8, E_NATIVE_INT_LEAST8, E_NATIVE_UINT_LEAST8,
+00236             E_NATIVE_INT_FAST8, E_NATIVE_UINT_FAST8, E_NATIVE_INT16,
+00237             E_NATIVE_UINT16, E_NATIVE_INT_LEAST16, E_NATIVE_UINT_LEAST16,
+00238             E_NATIVE_INT_FAST16, E_NATIVE_UINT_FAST16, E_NATIVE_INT32,
+00239             E_NATIVE_UINT32, E_NATIVE_INT_LEAST32, E_NATIVE_UINT_LEAST32,
+00240             E_NATIVE_INT_FAST32, E_NATIVE_UINT_FAST32, E_NATIVE_INT64,
+00241             E_NATIVE_UINT64, E_NATIVE_INT_LEAST64, E_NATIVE_UINT_LEAST64,
+00242             E_NATIVE_INT_FAST64, E_NATIVE_UINT_FAST64
+00243         };
+00244 
+00245    <span class="keyword">protected</span>:
+00246 <span class="preprocessor">#ifndef DOXYGEN_SHOULD_SKIP_THIS</span>
+00247 <span class="preprocessor"></span>        <span class="comment">// Default constructor</span>
+00248         PredType();
+00249 
+00250         <span class="comment">// Creates a pre-defined type using an HDF5 pre-defined constant</span>
+00251         PredType( <span class="keyword">const</span> hid_t predtype_id );  <span class="comment">// used by the library only</span>
+00252 
+00253 <span class="preprocessor">#endif // DOXYGEN_SHOULD_SKIP_THIS</span>
+00254 <span class="preprocessor"></span>
+00255 };
+00256 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00257 <span class="preprocessor"></span>}
+00258 <span class="preprocessor">#endif</span>
+00259 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PredType_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PredType_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PredType_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5PredType.h File Reference</h1>
+<p>
+<a href="H5PredType_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PropList_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PropList_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PropList_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,341 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5PropList.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include &lt;iostream&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PropList_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PropList_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PropList_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,440 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5PropList.h</h1><a href="H5PropList_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5PropList_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5PropList_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>
+<a name="l00023"></a><a class="code" href="classH5_1_1PropList.html">00023</a> <span class="keyword">class </span>H5_DLLCPP PropList : <span class="keyword">public</span> <a class="code" href="classH5_1_1IdComponent.html">IdComponent</a> {
+00024    <span class="keyword">public</span>:
+00025         <span class="comment">// Default property list</span>
+00026         <span class="keyword">static</span> <span class="keyword">const</span> PropList DEFAULT;
+00027 
+00028         <span class="comment">// Creates a property list of a given type or creates a copy of an</span>
+00029         <span class="comment">// existing property list giving the property list id.</span>
+00030         PropList(<span class="keyword">const</span> hid_t plist_id);
+00031 
+00032         <span class="comment">// Make a copy of the given property list using assignment statement</span>
+00033         PropList&amp; operator=( <span class="keyword">const</span> PropList&amp; rhs );
+00034 
+00035         <span class="comment">// Compares this property list or class against the given list or class.</span>
+00036         <span class="keywordtype">bool</span> operator==(<span class="keyword">const</span> PropList&amp; rhs) <span class="keyword">const</span>;
+00037 
+00038         <span class="comment">// Close this property list.</span>
+00039         <span class="keyword">virtual</span> <span class="keywordtype">void</span> close();
+00040 
+00041         <span class="comment">// Close a property list class.</span>
+00042         <span class="keywordtype">void</span> closeClass() <span class="keyword">const</span>;
+00043 
+00044         <span class="comment">// Makes a copy of the given property list.</span>
+00045         <span class="keywordtype">void</span> copy( <span class="keyword">const</span> PropList&amp; like_plist );
+00046 
+00047         <span class="comment">// Copies a property from this property list or class to another</span>
+00048         <span class="keywordtype">void</span> copyProp( PropList&amp; dest, <span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00049         <span class="keywordtype">void</span> copyProp( PropList&amp; dest, <span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00050 
+00051         <span class="comment">// Copies a property from one property list or property class to another</span>
+00052         <span class="keywordtype">void</span> copyProp( PropList&amp; dest, PropList&amp; src, <span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00053         <span class="keywordtype">void</span> copyProp( PropList&amp; dest, PropList&amp; src, <span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00054 
+00055         <span class="comment">// Gets the class of this property list, i.e. H5P_FILE_CREATE,</span>
+00056         <span class="comment">// H5P_FILE_ACCESS, ...</span>
+00057         hid_t getClass() <span class="keyword">const</span>;
+00058 
+00059         <span class="comment">// Return the name of a generic property list class.</span>
+00060         string getClassName() <span class="keyword">const</span>;
+00061 
+00062         <span class="comment">// Returns the parent class of a generic property class.</span>
+00063         PropList getClassParent() <span class="keyword">const</span>;
+00064 
+00065         <span class="comment">// Returns the number of properties in this property list or class.</span>
+00066         size_t getNumProps() <span class="keyword">const</span>;
+00067 
+00068         <span class="comment">// Query the value of a property in a property list.</span>
+00069         <span class="keywordtype">void</span> getProperty(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">void</span>* value) <span class="keyword">const</span>;
+00070         <span class="keywordtype">void</span> getProperty(<span class="keyword">const</span> string&amp; name, <span class="keywordtype">void</span>* value) <span class="keyword">const</span>;
+00071         string getProperty(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00072         string getProperty(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00073 
+00074         <span class="comment">// Set a property's value in a property list.</span>
+00075         <span class="keywordtype">void</span> setProperty(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keywordtype">void</span>* value) <span class="keyword">const</span>;
+00076         <span class="keywordtype">void</span> setProperty(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, <span class="keyword">const</span> <span class="keywordtype">char</span>* charptr) <span class="keyword">const</span>;
+00077         <span class="keywordtype">void</span> setProperty(<span class="keyword">const</span> <span class="keywordtype">char</span>* name, string&amp; strg) <span class="keyword">const</span>;
+00078         <span class="keywordtype">void</span> setProperty(<span class="keyword">const</span> string&amp; name, <span class="keywordtype">void</span>* value) <span class="keyword">const</span>;
+00079         <span class="keywordtype">void</span> setProperty(<span class="keyword">const</span> string&amp; name, string&amp; strg) <span class="keyword">const</span>;
+00080 
+00081         <span class="comment">// Query the size of a property in a property list or class.</span>
+00082         size_t getPropSize(<span class="keyword">const</span> <span class="keywordtype">char</span> *name) <span class="keyword">const</span>;
+00083         size_t getPropSize(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00084 
+00085         <span class="comment">// Determines whether a property list is a certain class.</span>
+00086         <span class="keywordtype">bool</span> isAClass(<span class="keyword">const</span> PropList&amp; prop_class) <span class="keyword">const</span>;
+00087 
+00089         <span class="keywordtype">bool</span> propExist(<span class="keyword">const</span> <span class="keywordtype">char</span>* name) <span class="keyword">const</span>;
+00090         <span class="keywordtype">bool</span> propExist(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00091 
+00092         <span class="comment">// Removes a property from a property list.</span>
+00093         <span class="keywordtype">void</span> removeProp(<span class="keyword">const</span> <span class="keywordtype">char</span> *name) <span class="keyword">const</span>;
+00094         <span class="keywordtype">void</span> removeProp(<span class="keyword">const</span> string&amp; name) <span class="keyword">const</span>;
+00095 
+00096         <span class="comment">// Returns this class name</span>
+<a name="l00097"></a><a class="code" href="classH5_1_1PropList.html#a30">00097</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="stringliteral">"PropList"</span>); }
+00098 
+00099         <span class="comment">// Default constructor: creates a stub PropList object.</span>
+00100         PropList();
+00101 
+00102         <span class="comment">// Copy constructor: creates a copy of a PropList object.</span>
+00103         PropList(<span class="keyword">const</span> PropList&amp; original);
+00104 
+00105         <span class="comment">// Destructor: properly terminates access to this property list.</span>
+00106         <span class="keyword">virtual</span> ~PropList();
+00107 };
+00108 
+00109 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00110 <span class="preprocessor"></span>}
+00111 <span class="preprocessor">#endif</span>
+00112 <span class="preprocessor"></span><span class="preprocessor">#endif  // _H5PropList_H</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PropList_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PropList_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5PropList_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5PropList.h File Reference</h1>
+<p>
+<a href="H5PropList_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5StrType_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5StrType_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5StrType_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,351 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5StrType.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AtomType_8h-source.html">H5AtomType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5AbstractDs_8h-source.html">H5AbstractDs.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DxferProp_8h-source.html">H5DxferProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>"</code><br>
+<code>#include "<a class="el" href="H5StrType_8h-source.html">H5StrType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataSet_8h-source.html">H5DataSet.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PredType_8h-source.html">H5PredType.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5StrType_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5StrType_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5StrType_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,396 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5StrType.h</h1><a href="H5StrType_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="preprocessor">#ifndef _H5StrType_H</span>
+00017 <span class="preprocessor"></span><span class="preprocessor">#define _H5StrType_H</span>
+00018 <span class="preprocessor"></span>
+00019 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00020 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00021 <span class="preprocessor">#endif</span>
+00022 <span class="preprocessor"></span>
+<a name="l00023"></a><a class="code" href="classH5_1_1StrType.html">00023</a> <span class="keyword">class </span>H5_DLLCPP StrType : <span class="keyword">public</span> <a class="code" href="classH5_1_1AtomType.html">AtomType</a> {
+00024    <span class="keyword">public</span>:
+00025         <span class="comment">// Creates a string type using a predefined type</span>
+00026         StrType(<span class="keyword">const</span> <a class="code" href="classH5_1_1PredType.html">PredType</a>&amp; pred_type);
+00027 
+00028         <span class="comment">// Creates a string type with specified length</span>
+00029         StrType(<span class="keyword">const</span> size_t&amp; size);
+00030 
+00031         <span class="comment">// Creates a string type with specified length - will be obsolete</span>
+00032         StrType(<span class="keyword">const</span> <a class="code" href="classH5_1_1PredType.html">PredType</a>&amp; pred_type, <span class="keyword">const</span> size_t size);
+00033 
+00034         <span class="comment">// Gets the string datatype of the specified dataset</span>
+00035         StrType(<span class="keyword">const</span> <a class="code" href="classH5_1_1DataSet.html">DataSet</a>&amp; dataset);
+00036 
+00037         <span class="comment">// Retrieves the character set type of this string datatype.</span>
+00038         H5T_cset_t getCset() <span class="keyword">const</span>;
+00039 
+00040         <span class="comment">// Sets character set to be used.</span>
+00041         <span class="keywordtype">void</span> setCset(H5T_cset_t cset) <span class="keyword">const</span>;
+00042 
+00043         <span class="comment">// Retrieves the string padding method for this string datatype.</span>
+00044         H5T_str_t getStrpad() <span class="keyword">const</span>;
+00045 
+00046         <span class="comment">// Defines the storage mechanism for character strings.</span>
+00047         <span class="keywordtype">void</span> setStrpad(H5T_str_t strpad) <span class="keyword">const</span>;
+00048 
+00049         <span class="comment">// Returns this class name</span>
+<a name="l00050"></a><a class="code" href="classH5_1_1StrType.html#a8">00050</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="stringliteral">"StrType"</span>); }
+00051 
+00052         <span class="comment">// default constructor</span>
+00053         StrType();
+00054 
+00055         <span class="comment">// Creates a string datatype using an existing id</span>
+00056         StrType(<span class="keyword">const</span> hid_t existing_id);
+00057 
+00058         <span class="comment">// Copy constructor - makes a copy of the original object</span>
+00059         StrType(<span class="keyword">const</span> StrType&amp; original);
+00060 
+00061         <span class="comment">// Noop destructor.</span>
+00062         <span class="keyword">virtual</span> ~StrType();
+00063 };
+00064 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00065 <span class="preprocessor"></span>}
+00066 <span class="preprocessor">#endif</span>
+00067 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5StrType_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5StrType_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5StrType_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5StrType.h File Reference</h1>
+<p>
+<a href="H5StrType_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5VarLenType_8cpp.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5VarLenType_8cpp.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5VarLenType_8cpp.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,345 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5VarLenType.cpp File Reference</h1><code>#include &lt;string&gt;</code><br>
+<code>#include "<a class="el" href="H5Include_8h-source.html">H5Include.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>"</code><br>
+<code>#include "<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>"</code><br>
+<code>#include "<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>"</code><br>
+<code>#include "<a class="el" href="H5Object_8h-source.html">H5Object.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>"</code><br>
+<code>#include "<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>"</code><br>
+<code>#include "<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>"</code><br>
+<code>#include "<a class="el" href="H5VarLenType_8h-source.html">H5VarLenType.h</a>"</code><br>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5VarLenType_8h-source.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5VarLenType_8h-source.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5VarLenType_8h-source.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,380 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5VarLenType.h</h1><a href="H5VarLenType_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment">00001 <span class="comment">// C++ informative line for the emacs editor: -*- C++ -*-</span>
+00002 <span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+00003 <span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+00004 <span class="comment"> * All rights reserved.                                                      *</span>
+00005 <span class="comment"> *                                                                           *</span>
+00006 <span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+00007 <span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+00008 <span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+00009 <span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+00010 <span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+00011 <span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+00012 <span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+00013 <span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+00014 <span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+00015 
+00016 <span class="comment">// Class VarLenType inherits from DataType and provides wrappers for</span>
+00017 <span class="comment">// the HDF5 C's Variable-length Datatypes.</span>
+00018 
+00019 <span class="preprocessor">#ifndef _H5VarLenType_H</span>
+00020 <span class="preprocessor"></span><span class="preprocessor">#define _H5VarLenType_H</span>
+00021 <span class="preprocessor"></span>
+00022 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00023 <span class="preprocessor"></span><span class="keyword">namespace </span>H5 {
+00024 <span class="preprocessor">#endif</span>
+<a name="l00025"></a><a class="code" href="classH5_1_1VarLenType.html">00025</a> <span class="preprocessor"></span><span class="keyword">class </span>H5_DLLCPP VarLenType : <span class="keyword">public</span> <a class="code" href="classH5_1_1DataType.html">DataType</a> {
+00026    <span class="keyword">public</span>:
+00027         <span class="comment">// Returns this class name</span>
+<a name="l00028"></a><a class="code" href="classH5_1_1VarLenType.html#a0">00028</a>         <span class="keyword">virtual</span> string fromClass ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (<span class="stringliteral">"VarLenType"</span>); }
+00029 
+00030         <span class="comment">// Constructor that creates a variable-length datatype based</span>
+00031         <span class="comment">// on the specified base type.</span>
+00032         VarLenType(<span class="keyword">const</span> <a class="code" href="classH5_1_1DataType.html">DataType</a>* base_type);
+00033 
+00034         <span class="comment">// Copy constructor: makes copy of the original object.</span>
+00035         VarLenType( <span class="keyword">const</span> VarLenType&amp; original );
+00036 
+00037         <span class="comment">// Constructor that takes an existing id</span>
+00038         VarLenType( <span class="keyword">const</span> hid_t existing_id );
+00039 
+00040         <span class="comment">// Noop destructor</span>
+00041         <span class="keyword">virtual</span> ~VarLenType();
+00042 
+00043    <span class="keyword">protected</span>:
+00044         <span class="comment">// Default constructor</span>
+00045         VarLenType();
+00046 
+00047 };
+00048 <span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+00049 <span class="preprocessor"></span>}
+00050 <span class="preprocessor">#endif</span>
+00051 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
+</pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5VarLenType_8h.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5VarLenType_8h.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/H5VarLenType_8h.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5VarLenType.h File Reference</h1>
+<p>
+<a href="H5VarLenType_8h-source.html">Go to the source code of this file.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">namespace &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceH5.html">H5</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,162 @@
+# HDF5 Library Makefile(.in)
+#
+# 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.
+#
+# 
+top_srcdir=@top_srcdir@
+top_builddir=../../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+SUBDIRS=header_files
+DOCDIR=$(docdir)/hdf5/cpplus_RM
+
+# Public doc files (to be installed)...
+PUB_DOCS= H5AbstractDs_8cpp.html H5AbstractDs_8h-source.html                  \
+          H5AbstractDs_8h.html H5Alltypes_8h-source.html H5Alltypes_8h.html   \
+          H5ArrayType_8cpp.html H5ArrayType_8h.html H5ArrayType_8h-source.html \
+          H5AtomType_8cpp.html H5AtomType_8h-source.html H5AtomType_8h.html   \
+          H5Attribute_8cpp.html H5Attribute_8h-source.html                    \
+          H5Attribute_8h.html H5Classes_8h-source.html H5Classes_8h.html      \
+          H5CommonFG_8cpp.html H5CommonFG_8h-source.html H5CommonFG_8h.html   \
+          H5CompType_8cpp.html H5CompType_8h-source.html H5CompType_8h.html   \
+          H5CppDoc_8h-source.html H5CppDoc_8h.html H5Cpp_8h-source.html       \
+          H5Cpp_8h.html H5DataSet_8cpp.html H5DataSet_8h-source.html          \
+          H5DataSet_8h.html H5DataSpace_8cpp.html H5DataSpace_8h-source.html  \
+          H5DataSpace_8h.html H5DataType_8cpp.html H5DataType_8h-source.html  \
+          H5DataType_8h.html H5DcreatProp_8cpp.html                           \
+          H5DcreatProp_8h-source.html H5DcreatProp_8h.html                    \
+          H5DxferProp_8cpp.html H5DxferProp_8h-source.html                    \
+          H5DxferProp_8h.html H5EnumType_8cpp.html H5EnumType_8h-source.html  \
+          H5EnumType_8h.html H5Exception_8cpp.html                            \
+          H5Exception_8h-source.html H5Exception_8h.html                      \
+          H5FaccProp_8cpp.html H5FaccProp_8h-source.html H5FaccProp_8h.html   \
+          H5FcreatProp_8cpp.html H5FcreatProp_8h-source.html                  \
+          H5FcreatProp_8h.html H5File_8cpp.html H5File_8h-source.html         \
+          H5File_8h.html H5FloatType_8cpp.html H5FloatType_8h-source.html     \
+          H5FloatType_8h.html H5Group_8cpp.html H5Group_8h-source.html        \
+          H5Group_8h.html H5IdComponent_8cpp.html                             \
+          H5IdComponent_8h-source.html H5IdComponent_8h.html                  \
+          H5Include_8h-source.html H5Include_8h.html H5IntType_8cpp.html      \
+          H5IntType_8h-source.html H5IntType_8h.html H5Library_8cpp.html      \
+          H5Library_8h-source.html H5Library_8h.html H5Object_8cpp.html       \
+          H5Object_8h-source.html H5Object_8h.html H5PredType_8cpp.html       \
+          H5PredType_8h-source.html H5PredType_8h.html H5PropList_8cpp.html   \
+          H5PropList_8h-source.html H5PropList_8h.html                        \
+          H5StrType_8cpp.html H5StrType_8h-source.html                        \
+          H5StrType_8h.html NCSAlogo.jpg annotated.html                       \
+          H5VarLenType_8cpp.html H5VarLenType_8h.html                         \
+          H5VarLenType_8h-source.html                                         \
+          chunks_8cpp-example.html                                            \
+          classH5_1_1AbstractDs-members.html classH5_1_1AbstractDs.html       \
+          classH5_1_1AbstractDs.png classH5_1_1AtomType-members.html          \
+          classH5_1_1ArrayType.html classH5_1_1ArrayType-members.html         \
+          classH5_1_1ArrayType.png                                            \
+          classH5_1_1AtomType.html classH5_1_1AtomType.png                    \
+          classH5_1_1Attribute-members.html classH5_1_1Attribute.html         \
+          classH5_1_1Attribute.png                                            \
+          classH5_1_1AttributeIException-members.html                         \
+          classH5_1_1AttributeIException.html                                 \
+          classH5_1_1AttributeIException.png                                  \
+          classH5_1_1CommonFG-members.html classH5_1_1CommonFG.html           \
+          classH5_1_1CommonFG.png classH5_1_1CompType-members.html            \
+          classH5_1_1CompType.html classH5_1_1CompType.png                    \
+          classH5_1_1DSetCreatPropList-members.html                           \
+          classH5_1_1DSetCreatPropList.html classH5_1_1DSetCreatPropList.png  \
+          classH5_1_1DSetMemXferPropList-members.html                         \
+          classH5_1_1DSetMemXferPropList.html                                 \
+          classH5_1_1DSetMemXferPropList.png classH5_1_1DataSet-members.html  \
+          classH5_1_1DataSet.html classH5_1_1DataSet.png                      \
+          classH5_1_1DataSetIException-members.html                           \
+          classH5_1_1DataSetIException.html classH5_1_1DataSetIException.png  \
+          classH5_1_1DataSpace-members.html classH5_1_1DataSpace.html         \
+          classH5_1_1DataSpace.png                                            \
+          classH5_1_1DataSpaceIException-members.html                         \
+          classH5_1_1DataSpaceIException.html                                 \
+          classH5_1_1DataSpaceIException.png                                  \
+          classH5_1_1DataType-members.html classH5_1_1DataType.html           \
+          classH5_1_1DataType.png classH5_1_1DataTypeIException-members.html  \
+          classH5_1_1DataTypeIException.html                                  \
+          classH5_1_1DataTypeIException.png                                   \
+          classH5_1_1EnumType-members.html classH5_1_1EnumType.html           \
+          classH5_1_1EnumType.png classH5_1_1Exception-members.html           \
+          classH5_1_1Exception.html classH5_1_1Exception.png                  \
+          classH5_1_1FileAccPropList-members.html                             \
+          classH5_1_1FileAccPropList.html classH5_1_1FileAccPropList.png      \
+          classH5_1_1FileCreatPropList-members.html                           \
+          classH5_1_1FileCreatPropList.html classH5_1_1FileCreatPropList.png  \
+          classH5_1_1FileIException-members.html                              \
+          classH5_1_1FileIException.html classH5_1_1FileIException.png        \
+          classH5_1_1FloatType-members.html                                   \
+          classH5_1_1FloatType.html classH5_1_1FloatType.png                  \
+          classH5_1_1Group-members.html                                       \
+          classH5_1_1Group.html classH5_1_1Group.png                          \
+          classH5_1_1GroupIException-members.html                             \
+          classH5_1_1GroupIException.html classH5_1_1GroupIException.png      \
+          classH5_1_1H5File-members.html classH5_1_1H5File.html               \
+          classH5_1_1H5File.png classH5_1_1H5Library-members.html             \
+          classH5_1_1H5Library.html classH5_1_1H5Object-members.html          \
+          classH5_1_1H5Object.html classH5_1_1H5Object.png                    \
+          classH5_1_1IdComponent-members.html                                 \
+          classH5_1_1IdComponent.html classH5_1_1IdComponent.png              \
+          classH5_1_1IdComponentException-members.html                        \
+          classH5_1_1IdComponentException.html                                \
+          classH5_1_1IdComponentException.png classH5_1_1IntType-members.html \
+          classH5_1_1IntType.html classH5_1_1IntType.png                      \
+          classH5_1_1LibraryIException-members.html                           \
+          classH5_1_1LibraryIException.html classH5_1_1LibraryIException.png  \
+          classH5_1_1PredType-members.html classH5_1_1PredType.html           \
+          classH5_1_1PredType.png classH5_1_1PropList-members.html            \
+          classH5_1_1PropList.html classH5_1_1PropList.png                    \
+          classH5_1_1PropListIException-members.html                          \
+          classH5_1_1PropListIException.html                                  \
+          classH5_1_1PropListIException.png                                   \
+          classH5_1_1ReferenceException-members.html                          \
+          classH5_1_1ReferenceException.html                                  \
+          classH5_1_1ReferenceException.png classH5_1_1StrType-members.html   \
+          classH5_1_1StrType.html classH5_1_1StrType.png                      \
+          classH5_1_1VarLenType.html classH5_1_1VarLenType-members.html       \
+          classH5_1_1VarLenType.png                                           \
+          compound_8cpp-example.html create_8cpp-example.html                 \
+          doxygen.css RM_stylesheet.css                                       \
+          doxygen.png extend__ds_8cpp-example.html                            \
+          examples.html files.html                                            \
+          functions.html functions_func.html functions_vars.html              \
+          functions_0x63.html functions_0x64.html functions_0x65.html         \
+          functions_0x66.html functions_0x67.html functions_0x68.html         \
+          functions_0x69.html functions_0x6c.html functions_0x6d.html         \
+          functions_0x6e.html functions_0x6f.html functions_0x70.html         \
+          functions_0x72.html functions_0x73.html functions_0x74.html         \
+          functions_0x75.html functions_0x76.html functions_0x77.html         \
+          functions_0x7e.html                                                 \
+          functions_func_0x63.html functions_func_0x64.html                   \
+          functions_func_0x65.html functions_func_0x66.html                   \
+          functions_func_0x67.html functions_func_0x68.html                   \
+          functions_func_0x69.html functions_func_0x6c.html                   \
+          functions_func_0x6d.html functions_func_0x6e.html                   \
+          functions_func_0x6f.html functions_func_0x70.html                   \
+          functions_func_0x72.html functions_func_0x73.html                   \
+          functions_func_0x74.html functions_func_0x75.html                   \
+          functions_func_0x76.html functions_func_0x77.html                   \
+          functions_func_0x7e.html                                            \
+          h5group_8cpp-example.html header.html                               \
+          hierarchy.html index.html namespaceH5.html namespaces.html          \
+          namespacestd.html readdata_8cpp-example.html                        \
+          writedata_8cpp-example.html
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/NCSAlogo.jpg
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/NCSAlogo.jpg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/RM_stylesheet.css
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/RM_stylesheet.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/RM_stylesheet.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,450 @@
+BODY
+{
+}
+H1
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+H2
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+H3
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+H4
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+H5
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+H6
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+P
+{
+}
+CENTER
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+TD
+{
+}
+TH
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+UL
+{
+}
+DL
+{
+}
+DIV
+{
+    FONT-FAMILY: Geneva, Arial, Helvetica, sans-serif
+}
+H1
+{
+    TEXT-ALIGN: center
+}
+CAPTION
+{
+    FONT-WEIGHT: bold
+}
+DIV.qindex
+{
+    BORDER-RIGHT: #b0b0b0 1px solid;
+    PADDING-RIGHT: 2px;
+    BORDER-TOP: #b0b0b0 1px solid;
+    PADDING-LEFT: 2px;
+    PADDING-BOTTOM: 2px;
+    MARGIN: 2px;
+    BORDER-LEFT: #b0b0b0 1px solid;
+    WIDTH: 100%;
+    LINE-HEIGHT: 140%;
+    PADDING-TOP: 2px;
+    BORDER-BOTTOM: #b0b0b0 1px solid;
+    BACKGROUND-COLOR: #eeeeff;
+    TEXT-ALIGN: center
+}
+DIV.nav
+{
+    BORDER-RIGHT: #b0b0b0 1px solid;
+    PADDING-RIGHT: 2px;
+    BORDER-TOP: #b0b0b0 1px solid;
+    PADDING-LEFT: 2px;
+    PADDING-BOTTOM: 2px;
+    MARGIN: 2px;
+    BORDER-LEFT: #b0b0b0 1px solid;
+    WIDTH: 100%;
+    LINE-HEIGHT: 140%;
+    PADDING-TOP: 2px;
+    BORDER-BOTTOM: #b0b0b0 1px solid;
+    BACKGROUND-COLOR: #eeeeff;
+    TEXT-ALIGN: center
+}
+A.qindex
+{
+    FONT-WEIGHT: bold;
+    COLOR: #1a419d;
+    TEXT-DECORATION: none
+}
+A.qindex:visited
+{
+    FONT-WEIGHT: bold;
+    COLOR: #1a419d;
+    TEXT-DECORATION: none
+}
+A.qindex:hover
+{
+    BACKGROUND-COLOR: #ddddff;
+    TEXT-DECORATION: none
+}
+A.qindexHL
+{
+    BORDER-RIGHT: #9295c2 1px double;
+    BORDER-TOP: #9295c2 1px double;
+    FONT-WEIGHT: bold;
+    BORDER-LEFT: #9295c2 1px double;
+    COLOR: #ffffff;
+    BORDER-BOTTOM: #9295c2 1px double;
+    BACKGROUND-COLOR: #6666cc;
+    TEXT-DECORATION: none
+}
+A.qindexHL:hover
+{
+    COLOR: #ffffff;
+    BACKGROUND-COLOR: #6666cc;
+    TEXT-DECORATION: none
+}
+A.qindexHL:visited
+{
+    COLOR: #ffffff;
+    BACKGROUND-COLOR: #6666cc;
+    TEXT-DECORATION: none
+}
+A.el
+{
+    FONT-WEIGHT: bold;
+    TEXT-DECORATION: none
+}
+A.elRef
+{
+    FONT-WEIGHT: bold
+}
+A.code:link
+{
+    FONT-WEIGHT: normal;
+    COLOR: #0000ff;
+    TEXT-DECORATION: none
+}
+A.code:visited
+{
+    FONT-WEIGHT: normal;
+    COLOR: #0000ff;
+    TEXT-DECORATION: none
+}
+A.codeRef:link
+{
+    FONT-WEIGHT: normal;
+    COLOR: #0000ff
+}
+A.codeRef:visited
+{
+    FONT-WEIGHT: normal;
+    COLOR: #0000ff
+}
+A:hover
+{
+    BACKGROUND-COLOR: #f2f2ff;
+    TEXT-DECORATION: none
+}
+DL.el
+{
+    MARGIN-LEFT: -1cm
+}
+.fragment
+{
+    FONT-FAMILY: monospace
+}
+PRE.fragment
+{
+    BORDER-RIGHT: #cccccc 1px solid;
+    PADDING-RIGHT: 6px;
+    BORDER-TOP: #cccccc 1px solid;
+    PADDING-LEFT: 6px;
+    PADDING-BOTTOM: 4px;
+    MARGIN: 4px 8px 4px 2px;
+    BORDER-LEFT: #cccccc 1px solid;
+    PADDING-TOP: 4px;
+    BORDER-BOTTOM: #cccccc 1px solid;
+    BACKGROUND-COLOR: #f5f5f5
+}
+DIV.ah
+{
+    MARGIN-TOP: 3px;
+    FONT-WEIGHT: bold;
+    MARGIN-BOTTOM: 3px;
+    COLOR: #ffffff;
+    BACKGROUND-COLOR: black
+}
+TD.md
+{
+    FONT-WEIGHT: bold;
+    BACKGROUND-COLOR: #f4f4fb
+}
+TD.mdname1
+{
+    FONT-WEIGHT: bold;
+    COLOR: #602020;
+    BACKGROUND-COLOR: #f4f4fb
+}
+TD.mdname
+{
+    FONT-WEIGHT: bold;
+    WIDTH: 600px;
+    COLOR: #602020;
+    BACKGROUND-COLOR: #f4f4fb
+}
+DIV.groupHeader
+{
+    MARGIN-TOP: 12px;
+    FONT-WEIGHT: bold;
+    MARGIN-BOTTOM: 6px;
+    MARGIN-LEFT: 16px
+}
+DIV.groupText
+{
+    FONT-SIZE: 14px;
+    MARGIN-LEFT: 16px;
+    FONT-STYLE: italic
+}
+BODY
+{
+    BACKGROUND: white;
+    MARGIN-LEFT: 20px;
+    COLOR: black;
+    MARGIN-RIGHT: 20px
+}
+TD.indexkey
+{
+    BORDER-RIGHT: #cccccc 1px solid;
+    PADDING-RIGHT: 10px;
+    BORDER-TOP: #cccccc 1px solid;
+    PADDING-LEFT: 10px;
+    FONT-WEIGHT: bold;
+    PADDING-BOTTOM: 2px;
+    MARGIN: 2px 0px;
+    BORDER-LEFT: #cccccc 1px solid;
+    PADDING-TOP: 2px;
+    BORDER-BOTTOM: #cccccc 1px solid;
+    BACKGROUND-COLOR: #eeeeff
+}
+TD.indexvalue
+{
+    BORDER-RIGHT: #cccccc 1px solid;
+    PADDING-RIGHT: 10px;
+    BORDER-TOP: #cccccc 1px solid;
+    PADDING-LEFT: 10px;
+    PADDING-BOTTOM: 2px;
+    MARGIN: 2px 0px;
+    BORDER-LEFT: #cccccc 1px solid;
+    PADDING-TOP: 2px;
+    BORDER-BOTTOM: #cccccc 1px solid;
+    FONT-STYLE: italic;
+    BACKGROUND-COLOR: #eeeeff
+}
+TR.memlist
+{
+    BACKGROUND-COLOR: #f0f0f0
+}
+P.formulaDsp
+{
+    TEXT-ALIGN: center
+}
+IMG.formulaDsp
+{
+}
+IMG.formulaInl
+{
+    VERTICAL-ALIGN: middle
+}
+SPAN.keyword
+{
+    COLOR: #008000
+}
+SPAN.keywordtype
+{
+    COLOR: #604020
+}
+SPAN.keywordflow
+{
+    COLOR: #e08000
+}
+SPAN.comment
+{
+    COLOR: #800000
+}
+SPAN.preprocessor
+{
+    COLOR: #806020
+}
+SPAN.stringliteral
+{
+    COLOR: #002080
+}
+SPAN.charliteral
+{
+    COLOR: #008080
+}
+.mdTable
+{
+    BORDER-RIGHT: #868686 1px solid;
+    BORDER-TOP: #868686 1px solid;
+    BORDER-LEFT: #868686 1px solid;
+    BORDER-BOTTOM: #868686 1px solid;
+    BACKGROUND-COLOR: #f4f4fb
+}
+.mdRow
+{
+    PADDING-RIGHT: 10px;
+    PADDING-LEFT: 10px;
+    PADDING-BOTTOM: 8px;
+    PADDING-TOP: 8px
+}
+.mdescLeft
+{
+    BORDER-RIGHT: #e0e0e0 1px;
+    PADDING-RIGHT: 8px;
+    BORDER-TOP: #e0e0e0 1px;
+    PADDING-LEFT: 8px;
+    FONT-SIZE: 12px;
+    PADDING-BOTTOM: 4px;
+    MARGIN: 0px;
+    BORDER-LEFT: #e0e0e0 1px;
+    PADDING-TOP: 0px;
+    BORDER-BOTTOM: #e0e0e0 1px;
+    FONT-STYLE: italic;
+    BACKGROUND-COLOR: #fafafa
+}
+.mdescRight
+{
+    BORDER-RIGHT: #e0e0e0 1px;
+    PADDING-RIGHT: 8px;
+    BORDER-TOP: #e0e0e0 1px;
+    PADDING-LEFT: 8px;
+    FONT-SIZE: 12px;
+    PADDING-BOTTOM: 4px;
+    MARGIN: 0px;
+    BORDER-LEFT: #e0e0e0 1px;
+    PADDING-TOP: 0px;
+    BORDER-BOTTOM: #e0e0e0 1px;
+    FONT-STYLE: italic;
+    BACKGROUND-COLOR: #fafafa
+}
+.memItemLeft
+{
+    BORDER-RIGHT: #e0e0e0 1px;
+    PADDING-RIGHT: 0px;
+    BORDER-TOP: #e0e0e0 1px solid;
+    PADDING-LEFT: 8px;
+    FONT-SIZE: 12px;
+    PADDING-BOTTOM: 0px;
+    MARGIN: 4px;
+    BORDER-LEFT: #e0e0e0 1px;
+    PADDING-TOP: 1px;
+    BORDER-BOTTOM: #e0e0e0 1px;
+    BACKGROUND-COLOR: #fafafa
+}
+.memItemRight
+{
+    BORDER-RIGHT: #e0e0e0 1px;
+    PADDING-RIGHT: 8px;
+    BORDER-TOP: #e0e0e0 1px solid;
+    PADDING-LEFT: 8px;
+    FONT-SIZE: 13px;
+    PADDING-BOTTOM: 0px;
+    MARGIN: 4px;
+    BORDER-LEFT: #e0e0e0 1px;
+    PADDING-TOP: 1px;
+    BORDER-BOTTOM: #e0e0e0 1px;
+    BACKGROUND-COLOR: #fafafa
+}
+.memTemplItemLeft
+{
+    BORDER-RIGHT: #e0e0e0 1px;
+    PADDING-RIGHT: 0px;
+    BORDER-TOP: #e0e0e0 1px;
+    PADDING-LEFT: 8px;
+    FONT-SIZE: 12px;
+    PADDING-BOTTOM: 0px;
+    MARGIN: 4px;
+    BORDER-LEFT: #e0e0e0 1px;
+    PADDING-TOP: 1px;
+    BORDER-BOTTOM: #e0e0e0 1px;
+    BACKGROUND-COLOR: #fafafa
+}
+.memTemplItemRight
+{
+    BORDER-RIGHT: #e0e0e0 1px;
+    PADDING-RIGHT: 8px;
+    BORDER-TOP: #e0e0e0 1px;
+    PADDING-LEFT: 8px;
+    FONT-SIZE: 13px;
+    PADDING-BOTTOM: 0px;
+    MARGIN: 4px;
+    BORDER-LEFT: #e0e0e0 1px;
+    PADDING-TOP: 1px;
+    BORDER-BOTTOM: #e0e0e0 1px;
+    BACKGROUND-COLOR: #fafafa
+}
+.memTemplParams
+{
+    BORDER-RIGHT: #e0e0e0 1px;
+    PADDING-RIGHT: 0px;
+    BORDER-TOP: #e0e0e0 1px solid;
+    PADDING-LEFT: 8px;
+    FONT-SIZE: 12px;
+    PADDING-BOTTOM: 0px;
+    MARGIN: 4px;
+    BORDER-LEFT: #e0e0e0 1px;
+    COLOR: #606060;
+    PADDING-TOP: 1px;
+    BORDER-BOTTOM: #e0e0e0 1px;
+    BACKGROUND-COLOR: #fafafa
+}
+.search
+{
+    FONT-WEIGHT: bold;
+    COLOR: #003399
+}
+FORM.search
+{
+    MARGIN-TOP: 0px;
+    MARGIN-BOTTOM: 0px
+}
+INPUT.search
+{
+    FONT-WEIGHT: normal;
+    FONT-SIZE: 75%;
+    COLOR: #000080;
+    BACKGROUND-COLOR: #eeeeff
+}
+TD.tiny
+{
+    FONT-SIZE: 75%
+}
+A
+{
+    COLOR: #252e78
+}
+A:visited
+{
+    COLOR: #3d2185
+}

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/annotated.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/annotated.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/annotated.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,367 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindexHL" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>Class List</h1>Here are the classes, structs, unions and interfaces with brief descriptions:<table>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1ArrayType.html">H5::ArrayType</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1Group.html">H5::Group</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1H5Library.html">H5::H5Library</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1IntType.html">H5::IntType</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1LibraryIException.html">H5::LibraryIException</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1ReferenceException.html">H5::ReferenceException</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1StrType.html">H5::StrType</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="classH5_1_1VarLenType.html">H5::VarLenType</a></td><td class="indexvalue"></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/chunks_8cpp-example.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/chunks_8cpp-example.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/chunks_8cpp-example.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,559 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>chunks.cpp</h1><dl compact><dt><b></b></dt><dd>This example shows how to read data from a chunked dataset.</dd></dl>
+<div class="fragment"><pre class="fragment"><span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+<span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+<span class="comment"> * All rights reserved.                                                      *</span>
+<span class="comment"> *                                                                           *</span>
+<span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+<span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+<span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+<span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+<span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+<span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+<span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+<span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+<span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+
+<span class="comment">/*</span>
+<span class="comment"> *   This example shows how to read data from a chunked dataset.</span>
+<span class="comment"> *   We will read from the file created by extend.C</span>
+<span class="comment"> */</span>
+
+<span class="preprocessor">#include &lt;string&gt;</span>
+
+<span class="preprocessor">#ifdef OLD_HEADER_FILENAME</span>
+<span class="preprocessor"></span><span class="preprocessor">#include &lt;iostream.h&gt;</span>
+<span class="preprocessor">#else</span>
+<span class="preprocessor"></span><span class="preprocessor">#include &lt;iostream&gt;</span>
+<span class="preprocessor">#endif</span>
+<span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="H5Cpp_8h.html">H5Cpp.h</a>"</span>
+
+<span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+<span class="preprocessor"></span><span class="keyword">using</span> <span class="keyword">namespace </span>H5;
+<span class="preprocessor">#endif</span>
+<span class="preprocessor"></span>
+<span class="keyword">const</span> string FILE_NAME( <span class="stringliteral">"SDSextendible.h5"</span> );
+<span class="keyword">const</span> string DATASET_NAME( <span class="stringliteral">"ExtendibleArray"</span> );
+<span class="keyword">const</span> <span class="keywordtype">int</span>      NX = 10;
+<span class="keyword">const</span> <span class="keywordtype">int</span>      NY = 5;
+<span class="keyword">const</span> <span class="keywordtype">int</span>      RANK = 2;
+<span class="keyword">const</span> <span class="keywordtype">int</span>      RANKC = 1;
+
+<span class="keywordtype">int</span> main (<span class="keywordtype">void</span>)
+{
+   hsize_t      i, j;
+
+   <span class="comment">// Try block to detect exceptions raised by any of the calls inside it</span>
+   <span class="keywordflow">try</span>
+   {
+      <span class="comment">/*</span>
+<span class="comment">       * Turn off the auto-printing when failure occurs so that we can</span>
+<span class="comment">       * handle the errors appropriately</span>
+<span class="comment">       */</span>
+      <a name="a0"></a><a class="code" href="classH5_1_1Exception.html#e1">Exception::dontPrint</a>();
+
+      <span class="comment">/*</span>
+<span class="comment">       * Open the file and the dataset.</span>
+<span class="comment">       */</span>
+      H5File file( FILE_NAME, H5F_ACC_RDONLY );
+      DataSet dataset = file.openDataSet( DATASET_NAME );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Get filespace for rank and dimension</span>
+<span class="comment">       */</span>
+      DataSpace filespace = dataset.getSpace();
+
+      <span class="comment">/*</span>
+<span class="comment">       * Get number of dimensions in the file dataspace</span>
+<span class="comment">       */</span>
+      <span class="keywordtype">int</span> rank = filespace.getSimpleExtentNdims();
+
+      <span class="comment">/*</span>
+<span class="comment">       * Get and print the dimension sizes of the file dataspace</span>
+<span class="comment">       */</span>
+      hsize_t     dims[2];       <span class="comment">// dataset dimensions</span>
+      rank = filespace.getSimpleExtentDims( dims );
+      cout &lt;&lt; <span class="stringliteral">"dataset rank = "</span> &lt;&lt; rank &lt;&lt; <span class="stringliteral">", dimensions "</span>
+        &lt;&lt; (<span class="keywordtype">unsigned</span> long)(dims[0]) &lt;&lt; <span class="stringliteral">" x "</span> &lt;&lt; (<span class="keywordtype">unsigned</span> long)(dims[1])
+        &lt;&lt; endl;
+
+      <span class="comment">/*</span>
+<span class="comment">       * Get creation properties list.</span>
+<span class="comment">       */</span>
+      DSetCreatPropList cparms = dataset.getCreatePlist();
+
+      <span class="comment">/*</span>
+<span class="comment">       * Check if dataset is chunked.</span>
+<span class="comment">       */</span>
+      hsize_t     chunk_dims[2];
+      <span class="keywordtype">int</span>         rank_chunk;
+      <span class="keywordflow">if</span>( H5D_CHUNKED == cparms.getLayout() )
+      {
+         <span class="comment">/*</span>
+<span class="comment">          * Get chunking information: rank and dimensions</span>
+<span class="comment">          */</span>
+         rank_chunk = cparms.getChunk( 2, chunk_dims);
+         cout &lt;&lt; <span class="stringliteral">"chunk rank "</span> &lt;&lt; rank_chunk &lt;&lt; <span class="stringliteral">"dimensions "</span>
+           &lt;&lt; (<span class="keywordtype">unsigned</span> long)(chunk_dims[0]) &lt;&lt; <span class="stringliteral">" x "</span>
+           &lt;&lt; (<span class="keywordtype">unsigned</span> long)(chunk_dims[1]) &lt;&lt; endl;
+      }
+
+      <span class="comment">/*</span>
+<span class="comment">       * Define the memory space to read dataset.</span>
+<span class="comment">       */</span>
+      DataSpace mspace1( RANK, dims );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Read dataset back and display.</span>
+<span class="comment">       */</span>
+      <span class="keywordtype">int</span> data_out[NX][NY];  <span class="comment">// buffer for dataset to be read</span>
+      dataset.read( data_out, <a name="a1"></a><a class="code" href="classH5_1_1PredType.html#s83">PredType::NATIVE_INT</a>, mspace1, filespace );
+      cout &lt;&lt; <span class="stringliteral">"\n"</span>;
+      cout &lt;&lt; <span class="stringliteral">"Dataset: \n"</span>;
+      <span class="keywordflow">for</span> (j = 0; j &lt; dims[0]; j++)
+      {
+         <span class="keywordflow">for</span> (i = 0; i &lt; dims[1]; i++)
+            cout &lt;&lt; data_out[j][i] &lt;&lt; <span class="stringliteral">" "</span>;
+         cout &lt;&lt; endl;
+      }
+
+      <span class="comment">/*</span>
+<span class="comment">       *            dataset rank 2, dimensions 10 x 5</span>
+<span class="comment">       *            chunk rank 2, dimensions 2 x 5</span>
+<span class="comment"></span>
+<span class="comment">       *            Dataset:</span>
+<span class="comment">       *            1 1 1 3 3</span>
+<span class="comment">       *            1 1 1 3 3</span>
+<span class="comment">       *            1 1 1 0 0</span>
+<span class="comment">       *            2 0 0 0 0</span>
+<span class="comment">       *            2 0 0 0 0</span>
+<span class="comment">       *            2 0 0 0 0</span>
+<span class="comment">       *            2 0 0 0 0</span>
+<span class="comment">       *            2 0 0 0 0</span>
+<span class="comment">       *            2 0 0 0 0</span>
+<span class="comment">       *            2 0 0 0 0</span>
+<span class="comment">       */</span>
+
+      <span class="comment">/*</span>
+<span class="comment">       * Read the third column from the dataset.</span>
+<span class="comment">       * First define memory dataspace, then define hyperslab</span>
+<span class="comment">       * and read it into column array.</span>
+<span class="comment">       */</span>
+      hsize_t     col_dims[1];
+      col_dims[0] = 10;
+      DataSpace mspace2( RANKC, col_dims );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Define the column (hyperslab) to read.</span>
+<span class="comment">       */</span>
+      hsize_t offset[2] = { 0, 2 };
+      hsize_t  count[2] = { 10, 1 };
+      <span class="keywordtype">int</span>      column[10];        <span class="comment">// buffer for column to be read</span>
+
+      filespace.selectHyperslab( H5S_SELECT_SET, count, offset );
+      dataset.read( column, <a class="code" href="classH5_1_1PredType.html#s83">PredType::NATIVE_INT</a>, mspace2, filespace );
+
+      cout &lt;&lt; endl;
+      cout &lt;&lt; <span class="stringliteral">"Third column: "</span> &lt;&lt; endl;
+      <span class="keywordflow">for</span> (i = 0; i &lt; 10; i++)
+         cout &lt;&lt; column[i] &lt;&lt; endl;
+
+      <span class="comment">/*</span>
+<span class="comment">       *            Third column:</span>
+<span class="comment">       *            1</span>
+<span class="comment">       *            1</span>
+<span class="comment">       *            1</span>
+<span class="comment">       *            0</span>
+<span class="comment">       *            0</span>
+<span class="comment">       *            0</span>
+<span class="comment">       *            0</span>
+<span class="comment">       *            0</span>
+<span class="comment">       *            0</span>
+<span class="comment">       *            0</span>
+<span class="comment">       */</span>
+
+      <span class="comment">/*</span>
+<span class="comment">       * Define the memory space to read a chunk.</span>
+<span class="comment">       */</span>
+      DataSpace mspace3( rank_chunk, chunk_dims );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Define chunk in the file (hyperslab) to read.</span>
+<span class="comment">       */</span>
+      offset[0] = 2;
+      offset[1] = 0;
+      count[0]  = chunk_dims[0];
+      count[1]  = chunk_dims[1];
+      filespace.selectHyperslab( H5S_SELECT_SET, count, offset );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Read chunk back and display.</span>
+<span class="comment">       */</span>
+      <span class="keywordtype">int</span> chunk_out[2][5];   <span class="comment">// buffer for chunk to be read</span>
+      dataset.read( chunk_out, <a class="code" href="classH5_1_1PredType.html#s83">PredType::NATIVE_INT</a>, mspace3, filespace );
+      cout &lt;&lt; endl;
+      cout &lt;&lt; <span class="stringliteral">"Chunk:"</span> &lt;&lt; endl;
+      <span class="keywordflow">for</span> (j = 0; j &lt; chunk_dims[0]; j++)
+      {
+         <span class="keywordflow">for</span> (i = 0; i &lt; chunk_dims[1]; i++)
+            cout &lt;&lt; chunk_out[j][i] &lt;&lt; <span class="stringliteral">" "</span>;
+         cout &lt;&lt; endl;
+      }
+      <span class="comment">/*</span>
+<span class="comment">       *         Chunk:</span>
+<span class="comment">       *         1 1 1 0 0</span>
+<span class="comment">       *         2 0 0 0 0</span>
+<span class="comment">       */</span>
+   }  <span class="comment">// end of try block</span>
+
+   <span class="comment">// catch failure caused by the H5File operations</span>
+   <span class="keywordflow">catch</span>( FileIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSet operations</span>
+   <span class="keywordflow">catch</span>( DataSetIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSpace operations</span>
+   <span class="keywordflow">catch</span>( DataSpaceIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="keywordflow">return</span> 0;
+}
+</pre></div> <hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:46 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AbstractDs-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AbstractDs-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AbstractDs-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,374 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::AbstractDs Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a11">AbstractDs</a>(const AbstractDs &amp;original)</td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#b0">AbstractDs</a>()</td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#b1">AbstractDs</a>(const hid_t ds_id)</td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a12">fromClass</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a1">getArrayType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a2">getCompType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a0">getDataType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a3">getEnumType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a4">getFloatType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a5">getIntType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a8">getSpace</a>() const =0</td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a10">getStorageSize</a>() const =0</td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a6">getStrType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a9">getTypeClass</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a7">getVarLenType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a12">~AbstractDs</a>()</td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AbstractDs.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AbstractDs.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AbstractDs.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,882 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1AbstractDs.html">AbstractDs</a></div>
+<h1>H5::AbstractDs Class Reference</h1><code>#include &lt;<a class="el" href="H5AbstractDs_8h-source.html">H5AbstractDs.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::AbstractDs:
+<p><center><img src="classH5_1_1AbstractDs.png" usemap="#H5::AbstractDs_map" border="0" alt=""></center>
+<map name="H5::AbstractDs_map">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="58,56,165,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="58,0,165,24">
+<area href="classH5_1_1Attribute.html" alt="H5::Attribute" shape="rect" coords="0,168,107,192">
+<area href="classH5_1_1DataSet.html" alt="H5::DataSet" shape="rect" coords="117,168,224,192">
+</map>
+<a href="classH5_1_1AbstractDs-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataType.html">DataType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#a0">getDataType</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the generic datatype of this abstract dataset, which can be a dataset or an attribute.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1ArrayType.html">ArrayType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#a1">getArrayType</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the compound datatype of this abstract dataset which can be a dataset or an attribute.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1CompType.html">CompType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#a2">getCompType</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the compound datatype of this abstract dataset which can be a dataset or an attribute.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1EnumType.html">EnumType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#a3">getEnumType</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the enumeration datatype of this abstract dataset which can be a dataset or an attribute.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1FloatType.html">FloatType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#a4">getFloatType</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the floating-point datatype of this abstract dataset, which can be a dataset or an attribute.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1IntType.html">IntType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#a5">getIntType</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the integer datatype of this abstract dataset which can be a dataset or an attribute.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1StrType.html">StrType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#a6">getStrType</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the string datatype of this abstract dataset which can be a dataset or an attribute.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1VarLenType.html">VarLenType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#a7">getVarLenType</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the floating-point datatype of this abstract dataset, which can be a dataset or an attribute.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#a8">getSpace</a> () const =0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5T_class_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#a9">getTypeClass</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the class of the datatype that is used by this object, which can be a dataset or an attribute.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual hsize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#a10">getStorageSize</a> () const =0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#a11">AbstractDs</a> (const <a class="el" href="classH5_1_1AbstractDs.html">AbstractDs</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1AbstractDs.html">AbstractDs</a> object.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#a12">~AbstractDs</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a12"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#b0">AbstractDs</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor.  <a href="#b0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html#b1">AbstractDs</a> (const hid_t ds_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an <a class="el" href="classH5_1_1AbstractDs.html">AbstractDs</a> instance using an existing id.  <a href="#b1"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a11" doxytag="H5::AbstractDs::AbstractDs"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::AbstractDs::AbstractDs           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1AbstractDs.html">AbstractDs</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1AbstractDs.html">AbstractDs</a> object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::AbstractDs::~AbstractDs"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::AbstractDs::~AbstractDs           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="b0" doxytag="H5::AbstractDs::AbstractDs"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::AbstractDs::AbstractDs           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [protected]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="b1" doxytag="H5::AbstractDs::AbstractDs"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::AbstractDs::AbstractDs           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>ds_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [protected]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an <a class="el" href="classH5_1_1AbstractDs.html">AbstractDs</a> instance using an existing id. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::AbstractDs::getDataType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataType.html">DataType</a> H5::AbstractDs::getDataType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the generic datatype of this abstract dataset, which can be a dataset or an attribute. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1DataType.html">DataType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::AbstractDs::getArrayType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1ArrayType.html">ArrayType</a> H5::AbstractDs::getArrayType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the compound datatype of this abstract dataset which can be a dataset or an attribute. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1ArrayType.html">ArrayType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::AbstractDs::getCompType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1CompType.html">CompType</a> H5::AbstractDs::getCompType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the compound datatype of this abstract dataset which can be a dataset or an attribute. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1CompType.html">CompType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::AbstractDs::getEnumType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1EnumType.html">EnumType</a> H5::AbstractDs::getEnumType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the enumeration datatype of this abstract dataset which can be a dataset or an attribute. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1EnumType.html">EnumType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::AbstractDs::getFloatType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1FloatType.html">FloatType</a> H5::AbstractDs::getFloatType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the floating-point datatype of this abstract dataset, which can be a dataset or an attribute. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1FloatType.html">FloatType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::AbstractDs::getIntType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1IntType.html">IntType</a> H5::AbstractDs::getIntType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the integer datatype of this abstract dataset which can be a dataset or an attribute. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1IntType.html">IntType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::AbstractDs::getStrType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1StrType.html">StrType</a> H5::AbstractDs::getStrType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the string datatype of this abstract dataset which can be a dataset or an attribute. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1StrType.html">StrType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::AbstractDs::getVarLenType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1VarLenType.html">VarLenType</a> H5::AbstractDs::getVarLenType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the floating-point datatype of this abstract dataset, which can be a dataset or an attribute. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1VarLenType.html">VarLenType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::AbstractDs::getSpace"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> H5::AbstractDs::getSpace           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [pure virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Implemented in <a class="el" href="classH5_1_1Attribute.html#a3">H5::Attribute</a>, and <a class="el" href="classH5_1_1DataSet.html#a5">H5::DataSet</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::AbstractDs::getTypeClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5T_class_t H5::AbstractDs::getTypeClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the class of the datatype that is used by this object, which can be a dataset or an attribute. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Datatype class identifier </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::AbstractDs::getStorageSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual hsize_t H5::AbstractDs::getStorageSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [pure virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Implemented in <a class="el" href="classH5_1_1Attribute.html#a4">H5::Attribute</a>, and <a class="el" href="classH5_1_1DataSet.html#a7">H5::DataSet</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AbstractDs.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AbstractDs.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ArrayType-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ArrayType-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ArrayType-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,401 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::ArrayType Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1ArrayType.html">H5::ArrayType</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1ArrayType.html#a0">ArrayType</a>(const DataType &amp;base_type, int ndims, const hsize_t *dims)</td><td><a class="el" href="classH5_1_1ArrayType.html">H5::ArrayType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1ArrayType.html#a4">ArrayType</a>(const ArrayType &amp;original)</td><td><a class="el" href="classH5_1_1ArrayType.html">H5::ArrayType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1ArrayType.html#a5">ArrayType</a>(const hid_t existing_id)</td><td><a class="el" href="classH5_1_1ArrayType.html">H5::ArrayType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1ArrayType.html#b0">ArrayType</a>()</td><td><a class="el" href="classH5_1_1ArrayType.html">H5::ArrayType</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a2">close</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a5">commit</a>(CommonFG &amp;loc, const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a6">commit</a>(CommonFG &amp;loc, const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a7">committed</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a9">convert</a>(const DataType &amp;dest, size_t nelmts, void *buf, void *background, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a3">copy</a>(const DataType &amp;like_type)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a0">DataType</a>(const H5T_class_t type_class, size_t size)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a1">DataType</a>(const DataType &amp;original)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a32">DataType</a>(const hid_t type_id, bool predtype=false)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a33">DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a24">detectClass</a>(H5T_class_t cls) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a8">find</a>(const DataType &amp;dest, H5T_cdata_t **pcdata) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1ArrayType.html#a3">fromClass</a>() const </td><td><a class="el" href="classH5_1_1ArrayType.html">H5::ArrayType</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1ArrayType.html#a2">getArrayDims</a>(hsize_t *dims)</td><td><a class="el" href="classH5_1_1ArrayType.html">H5::ArrayType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1ArrayType.html#a1">getArrayNDims</a>()</td><td><a class="el" href="classH5_1_1ArrayType.html">H5::ArrayType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a4">getClass</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a29">getObjType</a>(void *ref, H5R_type_t ref_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a13">getOverflow</a>(void) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a30">getRegion</a>(void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a15">getSize</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a16">getSuper</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a23">getTag</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#p0">is_predtype</a></td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a25">isVariableStr</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a12">lock</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a10">operator=</a>(const DataType &amp;rhs)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::H5Object::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a11">operator==</a>(const DataType &amp;compared_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a26">Reference</a>(const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a27">Reference</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a28">Reference</a>(const char *name, DataSpace &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a17">registerFunc</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a18">registerFunc</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a14">setOverflow</a>(H5T_overflow_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a21">setTag</a>(const char *tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a22">setTag</a>(const string &amp;tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a19">unregister</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a20">unregister</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1ArrayType.html#a6">~ArrayType</a>()</td><td><a class="el" href="classH5_1_1ArrayType.html">H5::ArrayType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a34">~DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ArrayType.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ArrayType.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ArrayType.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,660 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1ArrayType.html">ArrayType</a></div>
+<h1>H5::ArrayType Class Reference</h1><code>#include &lt;<a class="el" href="H5ArrayType_8h-source.html">H5ArrayType.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::ArrayType:
+<p><center><img src="classH5_1_1ArrayType.png" usemap="#H5::ArrayType_map" border="0" alt=""></center>
+<map name="H5::ArrayType_map">
+<area href="classH5_1_1DataType.html" alt="H5::DataType" shape="rect" coords="0,112,107,136">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="0,56,107,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,107,24">
+</map>
+<a href="classH5_1_1ArrayType-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1ArrayType.html#a0">ArrayType</a> (const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;base_type, int ndims, const hsize_t *dims)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a new array data type based on the specified <em>base_type</em>.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1ArrayType.html#a1">getArrayNDims</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of dimensions for an array datatype.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1ArrayType.html#a2">getArrayDims</a> (hsize_t *dims)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the size of all dimensions of an array datatype.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1ArrayType.html#a3">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1ArrayType.html#a4">ArrayType</a> (const <a class="el" href="classH5_1_1ArrayType.html">ArrayType</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1ArrayType.html">ArrayType</a> object.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1ArrayType.html#a5">ArrayType</a> (const hid_t existing_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an <a class="el" href="classH5_1_1ArrayType.html">ArrayType</a> object using an existing id.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1ArrayType.html#a6">~ArrayType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Properly terminates access to this array datatype.  <a href="#a6"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1ArrayType.html#b0">ArrayType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: Creates a stub <a class="el" href="classH5_1_1ArrayType.html">ArrayType</a>.  <a href="#b0"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::ArrayType::ArrayType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::ArrayType::ArrayType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>base_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>ndims</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>dims</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a new array data type based on the specified <em>base_type</em>. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>base_type</em>&nbsp;</td><td>- IN: Existing datatype </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>ndims</em>&nbsp;</td><td>- IN: Rank of the array, [0..H5S_MAX_RANK] </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dims</em>&nbsp;</td><td>- IN: Size of each array dimension </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::ArrayType::ArrayType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::ArrayType::ArrayType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1ArrayType.html">ArrayType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1ArrayType.html">ArrayType</a> object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::ArrayType::ArrayType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::ArrayType::ArrayType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>existing_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an <a class="el" href="classH5_1_1ArrayType.html">ArrayType</a> object using an existing id. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>existing_id</em>&nbsp;</td><td>- IN: Id of an existing datatype </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::ArrayType::~ArrayType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::ArrayType::~ArrayType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Properly terminates access to this array datatype. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="b0" doxytag="H5::ArrayType::ArrayType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::ArrayType::ArrayType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [protected]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: Creates a stub <a class="el" href="classH5_1_1ArrayType.html">ArrayType</a>. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a1" doxytag="H5::ArrayType::getArrayNDims"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::ArrayType::getArrayNDims           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the number of dimensions for an array datatype. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of dimensions </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::ArrayType::getArrayDims"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::ArrayType::getArrayDims           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>dims</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the size of all dimensions of an array datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dims</em>&nbsp;</td><td>- OUT: Sizes of dimensions </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of dimensions </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::ArrayType::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::ArrayType::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1DataType.html#a31">H5::DataType</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ArrayType.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ArrayType.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AtomType-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AtomType-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AtomType-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,406 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::AtomType Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a11">AtomType</a>(const AtomType &amp;original)</td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a2">close</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a5">commit</a>(CommonFG &amp;loc, const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a6">commit</a>(CommonFG &amp;loc, const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a7">committed</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a9">convert</a>(const DataType &amp;dest, size_t nelmts, void *buf, void *background, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a3">copy</a>(const DataType &amp;like_type)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a0">DataType</a>(const H5T_class_t type_class, size_t size)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a1">DataType</a>(const DataType &amp;original)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a32">DataType</a>(const hid_t type_id, bool predtype=false)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a33">DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a24">detectClass</a>(H5T_class_t cls) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a8">find</a>(const DataType &amp;dest, H5T_cdata_t **pcdata) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a10">fromClass</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a4">getClass</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a29">getObjType</a>(void *ref, H5R_type_t ref_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a3">getOffset</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a0">getOrder</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a1">getOrder</a>(string &amp;order_string) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a13">getOverflow</a>(void) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a5">getPad</a>(H5T_pad_t &amp;lsb, H5T_pad_t &amp;msb) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a7">getPrecision</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a30">getRegion</a>(void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a15">getSize</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a16">getSuper</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a23">getTag</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#p0">is_predtype</a></td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a25">isVariableStr</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a12">lock</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a10">operator=</a>(const DataType &amp;rhs)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::H5Object::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a11">operator==</a>(const DataType &amp;compared_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a26">Reference</a>(const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a27">Reference</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a28">Reference</a>(const char *name, DataSpace &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a17">registerFunc</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a18">registerFunc</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a4">setOffset</a>(size_t offset) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a2">setOrder</a>(H5T_order_t order) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a14">setOverflow</a>(H5T_overflow_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a6">setPad</a>(H5T_pad_t lsb, H5T_pad_t msb) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a8">setPrecision</a>(size_t precision) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a9">setSize</a>(size_t size) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a21">setTag</a>(const char *tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a22">setTag</a>(const string &amp;tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a19">unregister</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a20">unregister</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a12">~AtomType</a>()</td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a34">~DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AtomType.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AtomType.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AtomType.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,915 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1AtomType.html">AtomType</a></div>
+<h1>H5::AtomType Class Reference</h1><code>#include &lt;<a class="el" href="H5AtomType_8h-source.html">H5AtomType.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::AtomType:
+<p><center><img src="classH5_1_1AtomType.png" usemap="#H5::AtomType_map" border="0" alt=""></center>
+<map name="H5::AtomType_map">
+<area href="classH5_1_1DataType.html" alt="H5::DataType" shape="rect" coords="175,112,282,136">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="175,56,282,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="175,0,282,24">
+<area href="classH5_1_1FloatType.html" alt="H5::FloatType" shape="rect" coords="0,224,107,248">
+<area href="classH5_1_1IntType.html" alt="H5::IntType" shape="rect" coords="117,224,224,248">
+<area href="classH5_1_1PredType.html" alt="H5::PredType" shape="rect" coords="234,224,341,248">
+<area href="classH5_1_1StrType.html" alt="H5::StrType" shape="rect" coords="351,224,458,248">
+</map>
+<a href="classH5_1_1AtomType-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5T_order_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AtomType.html#a0">getOrder</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the byte order of an atomic datatype.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5T_order_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AtomType.html#a1">getOrder</a> (string &amp;order_string) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It takes a reference to a <code>std::string</code> for the buffer that provide the text description of the returned byte order. The text description can be either of the following: "Little endian byte ordering (0)"; "Big endian byte ordering (1)"; "VAX mixed byte ordering (2)";.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AtomType.html#a2">setOrder</a> (H5T_order_t order) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the byte ordering of an atomic datatype.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AtomType.html#a3">getOffset</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the bit offset of the first significant bit.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AtomType.html#a4">setOffset</a> (size_t offset) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the bit offset of the first significant bit.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AtomType.html#a5">getPad</a> (H5T_pad_t &amp;lsb, H5T_pad_t &amp;msb) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the padding type of the least and most-significant bit padding.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AtomType.html#a6">setPad</a> (H5T_pad_t lsb, H5T_pad_t msb) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the least and most-significant bits padding types.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AtomType.html#a7">getPrecision</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the precision of an atomic datatype.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AtomType.html#a8">setPrecision</a> (size_t precision) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the precision of an atomic datatype.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AtomType.html#a9">setSize</a> (size_t size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the total size for an atomic datatype.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AtomType.html#a10">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AtomType.html#a11">AtomType</a> (const <a class="el" href="classH5_1_1AtomType.html">AtomType</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1AtomType.html">AtomType</a> object.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AtomType.html#a12">~AtomType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a12"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a11" doxytag="H5::AtomType::AtomType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::AtomType::AtomType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1AtomType.html">AtomType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1AtomType.html">AtomType</a> object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::AtomType::~AtomType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::AtomType::~AtomType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::AtomType::getOrder"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5T_order_t H5::AtomType::getOrder           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the byte order of an atomic datatype. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Byte order, which can be: <ul>
+<li><code>H5T_ORDER_LE</code> </li>
+<li><code>H5T_ORDER_BE</code> </li>
+<li><code>H5T_ORDER_VAX</code> </li>
+</ul>
+</dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::AtomType::getOrder"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5T_order_t H5::AtomType::getOrder           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>order_string</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It takes a reference to a <code>std::string</code> for the buffer that provide the text description of the returned byte order. The text description can be either of the following: "Little endian byte ordering (0)"; "Big endian byte ordering (1)"; "VAX mixed byte ordering (2)";. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>order_string</em>&nbsp;</td><td>- OUT: Text description of the returned byte order </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Byte order, which can be: <ul>
+<li><code>H5T_ORDER_LE</code> </li>
+<li><code>H5T_ORDER_BE</code> </li>
+<li><code>H5T_ORDER_VAX</code> </li>
+</ul>
+</dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::AtomType::setOrder"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::AtomType::setOrder           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5T_order_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>order</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the byte ordering of an atomic datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>order</em>&nbsp;</td><td>- IN: Byte ordering constant, which can be: <ul>
+<li><code>H5T_ORDER_LE</code> </li>
+<li><code>H5T_ORDER_BE</code> </li>
+<li><code>H5T_ORDER_VAX</code> </li>
+</ul>
+</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::AtomType::getOffset"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::AtomType::getOffset           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the bit offset of the first significant bit. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Offset value </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For information, please see C layer Reference Manuat at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-GetOffset">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-GetOffset</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::AtomType::setOffset"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::AtomType::setOffset           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>offset</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the bit offset of the first significant bit. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>offset</em>&nbsp;</td><td>- IN: Offset of first significant bit </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For information, please see C layer Reference Manuat at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-SetOffset">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-SetOffset</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::AtomType::getPad"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::AtomType::getPad           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5T_pad_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>lsb</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5T_pad_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>msb</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the padding type of the least and most-significant bit padding. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>lsb</em>&nbsp;</td><td>- OUT: Least-significant bit padding type </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>msb</em>&nbsp;</td><td>- OUT: Most-significant bit padding type </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Possible values for <em>lsb</em> and <em>msb</em> include: <ul>
+<li><code>H5T_PAD_ZERO</code> (0) - Set background to zeros. </li>
+<li><code>H5T_PAD_ONE</code> (1) - Set background to ones. </li>
+<li><code>H5T_PAD_BACKGROUND</code> (2) - Leave background alone. </li>
+</ul>
+</dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::AtomType::setPad"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::AtomType::setPad           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5T_pad_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>lsb</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5T_pad_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>msb</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the least and most-significant bits padding types. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>lsb</em>&nbsp;</td><td>- IN: Least-significant bit padding type </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>msb</em>&nbsp;</td><td>- IN: Most-significant bit padding type </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Valid values for <em>lsb</em> and <em>msb</em> include: <ul>
+<li><code>H5T_PAD_ZERO</code> (0) - Set background to zeros. </li>
+<li><code>H5T_PAD_ONE</code> (1) - Set background to ones. </li>
+<li><code>H5T_PAD_BACKGROUND</code> (2) - Leave background alone. </li>
+</ul>
+</dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::AtomType::getPrecision"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">size_t H5::AtomType::getPrecision           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the precision of an atomic datatype. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of significant bits </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The precision is the number of significant bits which, unless padding is present, is 8 times larger than the value returned by <code><a class="el" href="classH5_1_1DataType.html#a15">DataType::getSize()</a></code>. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::AtomType::setPrecision"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::AtomType::setPrecision           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>precision</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the precision of an atomic datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>precision</em>&nbsp;</td><td>- IN: Number of bits of precision </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For information, please see C layer Reference Manuat at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-SetPrecision">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-SetPrecision</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::AtomType::setSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::AtomType::setSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>size</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the total size for an atomic datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>- IN: Size to set </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::AtomType::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::AtomType::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1DataType.html#a31">H5::DataType</a>.
+<p>
+Reimplemented in <a class="el" href="classH5_1_1FloatType.html#a10">H5::FloatType</a>, <a class="el" href="classH5_1_1IntType.html#a4">H5::IntType</a>, <a class="el" href="classH5_1_1PredType.html#a0">H5::PredType</a>, and <a class="el" href="classH5_1_1StrType.html#a8">H5::StrType</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AtomType.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AtomType.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Attribute-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Attribute-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Attribute-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,386 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::Attribute Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a11">AbstractDs</a>(const AbstractDs &amp;original)</td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#b0">AbstractDs</a>()</td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#b1">AbstractDs</a>(const hid_t ds_id)</td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a10">Attribute</a>(const hid_t attr_id)</td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a11">Attribute</a>(const Attribute &amp;original)</td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a12">Attribute</a>()</td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a13">close</a>()</td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a9">fromClass</a>() const </td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a1">getArrayType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a2">getCompType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a0">getDataType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a3">getEnumType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a4">getFloatType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a5">getIntType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a0">getName</a>(size_t buf_size, string &amp;attr_name) const </td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a1">getName</a>(size_t buf_size) const </td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a2">getName</a>() const </td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a3">getSpace</a>() const </td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a4">getStorageSize</a>() const </td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a6">getStrType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a9">getTypeClass</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a7">getVarLenType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">H5::AbstractDs::iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a5">read</a>(const DataType &amp;mem_type, void *buf) const </td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a6">read</a>(const DataType &amp;mem_type, string &amp;strg) const </td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a7">write</a>(const DataType &amp;mem_type, const void *buf) const </td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a8">write</a>(const DataType &amp;mem_type, const string &amp;strg) const </td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a12">~AbstractDs</a>()</td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Attribute.html#a14">~Attribute</a>()</td><td><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Attribute.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Attribute.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Attribute.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,987 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1Attribute.html">Attribute</a></div>
+<h1>H5::Attribute Class Reference</h1><code>#include &lt;<a class="el" href="H5Attribute_8h-source.html">H5Attribute.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::Attribute:
+<p><center><img src="classH5_1_1Attribute.png" usemap="#H5::Attribute_map" border="0" alt=""></center>
+<map name="H5::Attribute_map">
+<area href="classH5_1_1AbstractDs.html" alt="H5::AbstractDs" shape="rect" coords="0,112,107,136">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="0,56,107,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,107,24">
+</map>
+<a href="classH5_1_1Attribute-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">ssize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a0">getName</a> (size_t buf_size, string &amp;attr_name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the name of this attribute, returning its length.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a1">getName</a> (size_t buf_size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it returns the attribute's name, not the length.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a2">getName</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above functions in that it doesn't take any arguments and returns the attribute's name.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a3">getSpace</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets a copy of the dataspace for this attribute.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual hsize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a4">getStorageSize</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the amount of storage size required for this attribute.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a5">read</a> (const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;mem_type, void *buf) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reads data from this attribute.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a6">read</a> (const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;mem_type, string &amp;strg) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It reads a <em>std::string</em> from this attribute.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a7">write</a> (const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;mem_type, const void *buf) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Writes data to this attribute.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a8">write</a> (const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;mem_type, const string &amp;strg) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It writes a <em>std::string</em> to this attribute.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a9">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a10">Attribute</a> (const hid_t attr_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an <a class="el" href="classH5_1_1Attribute.html">Attribute</a> object using the id of an existing attribute.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a11">Attribute</a> (const <a class="el" href="classH5_1_1Attribute.html">Attribute</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1Attribute.html">Attribute</a> object.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a12">Attribute</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: Creates a stub attribute.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a13">close</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Closes this attribute.  <a href="#a13"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html#a14">~Attribute</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Properly terminates access to this attribute.  <a href="#a14"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a10" doxytag="H5::Attribute::Attribute"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::Attribute::Attribute           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>existing_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an <a class="el" href="classH5_1_1Attribute.html">Attribute</a> object using the id of an existing attribute. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>existing_id</em>&nbsp;</td><td>- IN: Id of an existing attribute </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::Attribute::Attribute"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::Attribute::Attribute           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1Attribute.html">Attribute</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1Attribute.html">Attribute</a> object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>original</em>&nbsp;</td><td>- IN: Original <a class="el" href="classH5_1_1Attribute.html">Attribute</a> object to copy </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::Attribute::Attribute"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::Attribute::Attribute           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: Creates a stub attribute. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a14" doxytag="H5::Attribute::~Attribute"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::Attribute::~Attribute           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Properly terminates access to this attribute. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::Attribute::getName"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">ssize_t H5::Attribute::getName           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>attr_name</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the name of this attribute, returning its length. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>buf_size</em>&nbsp;</td><td>- IN: Desired length of the name </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>attr_name</em>&nbsp;</td><td>- OUT: Buffer for the name string </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Length of the attribute name </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::Attribute::getName"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::Attribute::getName           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>buf_size</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it returns the attribute's name, not the length. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Name of the attribute </dd></dl>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>buf_size</em>&nbsp;</td><td>- IN: Desired length of the name </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::Attribute::getName"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::Attribute::getName           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above functions in that it doesn't take any arguments and returns the attribute's name. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Name of the attribute </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::Attribute::getSpace"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> H5::Attribute::getSpace           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets a copy of the dataspace for this attribute. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Dataspace instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+
+<p>
+Implements <a class="el" href="classH5_1_1AbstractDs.html#a8">H5::AbstractDs</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::Attribute::getStorageSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hsize_t H5::Attribute::getStorageSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the amount of storage size required for this attribute. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Size of the storage or 0, for no data </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+
+<p>
+Implements <a class="el" href="classH5_1_1AbstractDs.html#a10">H5::AbstractDs</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::Attribute::read"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::Attribute::read           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Reads data from this attribute. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>mem_type</em>&nbsp;</td><td>- IN: <a class="el" href="classH5_1_1Attribute.html">Attribute</a> datatype (in memory) </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>buf</em>&nbsp;</td><td>- OUT: Buffer for read data </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::Attribute::read"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::Attribute::read           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>strg</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It reads a <em>std::string</em> from this attribute. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>mem_type</em>&nbsp;</td><td>- IN: <a class="el" href="classH5_1_1Attribute.html">Attribute</a> datatype (in memory) </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>strg</em>&nbsp;</td><td>- IN: Buffer for read string </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::Attribute::write"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::Attribute::write           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Writes data to this attribute. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>mem_type</em>&nbsp;</td><td>- IN: <a class="el" href="classH5_1_1Attribute.html">Attribute</a> datatype (in memory) </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>buf</em>&nbsp;</td><td>- IN: Data to be written </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::Attribute::write"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::Attribute::write           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>strg</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It writes a <em>std::string</em> to this attribute. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>mem_type</em>&nbsp;</td><td>- IN: <a class="el" href="classH5_1_1Attribute.html">Attribute</a> datatype (in memory) </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>strg</em>&nbsp;</td><td>- IN: Data to be written </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::Attribute::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::Attribute::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1IdComponent.html#a12">H5::IdComponent</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::Attribute::close"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::Attribute::close           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Closes this attribute. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Attribute.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Attribute.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AttributeIException-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AttributeIException-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AttributeIException-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::AttributeIException Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AttributeIException.html#a0">AttributeIException</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AttributeIException.html#a1">AttributeIException</a>()</td><td><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e3">clearErrorStack</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e1">dontPrint</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a0">Exception</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a8">Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a9">Exception</a>(const Exception &amp;orig)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e2">getAutoPrint</a>(H5E_auto_t &amp;func, void **client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a4">getCDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a6">getCFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a3">getDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a5">getFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a1">getMajorString</a>(H5E_major_t major_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a2">getMinorString</a>(H5E_minor_t minor_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a7">printError</a>(FILE *stream=NULL) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e0">setAutoPrint</a>(H5E_auto_t &amp;func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e4">walkErrorStack</a>(H5E_direction_t direction, H5E_walk_t func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AttributeIException.html#a2">~AttributeIException</a>()</td><td><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a10">~Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AttributeIException.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AttributeIException.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AttributeIException.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,455 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1AttributeIException.html">AttributeIException</a></div>
+<h1>H5::AttributeIException Class Reference</h1><code>#include &lt;<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::AttributeIException:
+<p><center><img src="classH5_1_1AttributeIException.png" usemap="#H5::AttributeIException_map" border="0" alt=""></center>
+<map name="H5::AttributeIException_map">
+<area href="classH5_1_1Exception.html" alt="H5::Exception" shape="rect" coords="0,0,139,24">
+</map>
+<a href="classH5_1_1AttributeIException-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AttributeIException.html#a0">AttributeIException</a> (const string func_name, const string message=<a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an <a class="el" href="classH5_1_1AttributeIException.html">AttributeIException</a> with the name of the function, in which the failure occurs, and an optional detailed message.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AttributeIException.html#a1">AttributeIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AttributeIException.html#a2">~AttributeIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a2"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::AttributeIException::AttributeIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::AttributeIException::AttributeIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>func_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>message</em> = <code><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an <a class="el" href="classH5_1_1AttributeIException.html">AttributeIException</a> with the name of the function, in which the failure occurs, and an optional detailed message. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func_name</em>&nbsp;</td><td>- IN: Name of the function where failure occurs </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>message</em>&nbsp;</td><td>- IN: Message on the failure </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::AttributeIException::AttributeIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::AttributeIException::AttributeIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::AttributeIException::~AttributeIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::AttributeIException::~AttributeIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AttributeIException.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1AttributeIException.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CommonFG-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CommonFG-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CommonFG-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,386 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::CommonFG Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a54">CommonFG</a>()</td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a4">createDataSet</a>(const char *name, const DataType &amp;data_type, const DataSpace &amp;data_space, const DSetCreatPropList &amp;create_plist=DSetCreatPropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a5">createDataSet</a>(const string &amp;name, const DataType &amp;data_type, const DataSpace &amp;data_space, const DSetCreatPropList &amp;create_plist=DSetCreatPropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a0">createGroup</a>(const char *name, size_t size_hint=0) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a1">createGroup</a>(const string &amp;name, size_t size_hint=0) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a8">getComment</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a9">getComment</a>(const char *name, size_t bufsize) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a10">getComment</a>(const string &amp;name, size_t bufsize) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a15">getLinkval</a>(const char *name, size_t size) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a16">getLinkval</a>(const string &amp;name, size_t size) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a52">getLocId</a>() const =0</td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a17">getNumObjs</a>() const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a18">getObjinfo</a>(const char *name, hbool_t follow_link, H5G_stat_t &amp;statbuf) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a19">getObjinfo</a>(const string &amp;name, hbool_t follow_link, H5G_stat_t &amp;statbuf) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a20">getObjnameByIdx</a>(hsize_t idx, string &amp;name, size_t size) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a21">getObjnameByIdx</a>(hsize_t idx) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a22">getObjTypeByIdx</a>(hsize_t idx) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a23">getObjTypeByIdx</a>(hsize_t idx, string &amp;type_name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a24">iterateElems</a>(const char *name, int *idx, H5G_iterate_t op, void *op_data)</td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a25">iterateElems</a>(const string &amp;name, int *idx, H5G_iterate_t op, void *op_data)</td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a26">link</a>(H5G_link_t link_type, const char *curr_name, const char *new_name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a27">link</a>(H5G_link_t link_type, const string &amp;curr_name, const string &amp;new_name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a30">mount</a>(const char *name, H5File &amp;child, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a31">mount</a>(const string &amp;name, H5File &amp;child, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a34">move</a>(const char *src, const char *dst) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a35">move</a>(const string &amp;src, const string &amp;dst) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a38">openArrayType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a39">openArrayType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a40">openCompType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a41">openCompType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a6">openDataSet</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a7">openDataSet</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a36">openDataType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a37">openDataType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a42">openEnumType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a43">openEnumType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a46">openFloatType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a47">openFloatType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a2">openGroup</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a3">openGroup</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a44">openIntType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a45">openIntType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a48">openStrType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a49">openStrType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a50">openVarLenType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a51">openVarLenType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a11">removeComment</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a12">removeComment</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a13">setComment</a>(const char *name, const char *comment) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a14">setComment</a>(const string &amp;name, const string &amp;comment) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a53">throwException</a>(const string func_name, const string msg) const =0</td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td><code> [pure virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a28">unlink</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a29">unlink</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a32">unmount</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a33">unmount</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a55">~CommonFG</a>()</td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CommonFG.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CommonFG.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CommonFG.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2822 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1CommonFG.html">CommonFG</a></div>
+<h1>H5::CommonFG Class Reference</h1><code>#include &lt;<a class="el" href="H5CommonFG_8h-source.html">H5CommonFG.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::CommonFG:
+<p><center><img src="classH5_1_1CommonFG.png" usemap="#H5::CommonFG_map" border="0" alt=""></center>
+<map name="H5::CommonFG_map">
+<area href="classH5_1_1Group.html" alt="H5::Group" shape="rect" coords="0,56,99,80">
+<area href="classH5_1_1H5File.html" alt="H5::H5File" shape="rect" coords="109,56,208,80">
+</map>
+<a href="classH5_1_1CommonFG-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1Group.html">Group</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a0">createGroup</a> (const char *name, size_t size_hint=0) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a new group at this location which can be a file or another group.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1Group.html">Group</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a1">createGroup</a> (const string &amp;name, size_t size_hint=0) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1Group.html">Group</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a2">openGroup</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Opens an existing group in a location which can be a file or another group.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1Group.html">Group</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a3">openGroup</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataSet.html">DataSet</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a4">createDataSet</a> (const char *name, const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;data_type, const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;data_space, const <a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a> &amp;create_plist=<a class="el" href="classH5_1_1DSetCreatPropList.html#s0">DSetCreatPropList::DEFAULT</a>) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a new dataset at this location.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataSet.html">DataSet</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a5">createDataSet</a> (const string &amp;name, const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;data_type, const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;data_space, const <a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a> &amp;create_plist=<a class="el" href="classH5_1_1DSetCreatPropList.html#s0">DSetCreatPropList::DEFAULT</a>) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataSet.html">DataSet</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a6">openDataSet</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Opens an existing dataset at this location.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataSet.html">DataSet</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a7">openDataSet</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a8">getComment</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves comment for the specified object.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a9">getComment</a> (const char *name, size_t bufsize) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves comment for the specified object and its comment's length.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a10">getComment</a> (const string &amp;name, size_t bufsize) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a11">removeComment</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Removes the comment from an object specified by its name.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a12">removeComment</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a13">setComment</a> (const char *name, const char *comment) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets or resets the comment for an object specified by its name.  <a href="#a13"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a14">setComment</a> (const string &amp;name, const string &amp;comment) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em> and <em>comment</em>.  <a href="#a14"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a15">getLinkval</a> (const char *name, size_t size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the name of the object that the symbolic link points to.  <a href="#a15"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a16">getLinkval</a> (const string &amp;name, size_t size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a16"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">hsize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a17">getNumObjs</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of objects in this group.  <a href="#a17"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a18">getObjinfo</a> (const char *name, hbool_t follow_link, H5G_stat_t &amp;statbuf) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns information about an object.  <a href="#a18"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a19">getObjinfo</a> (const string &amp;name, hbool_t follow_link, H5G_stat_t &amp;statbuf) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a19"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">ssize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a20">getObjnameByIdx</a> (hsize_t idx, string &amp;name, size_t size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the name of an object in this group, given the object's index.  <a href="#a20"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a21">getObjnameByIdx</a> (hsize_t idx) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the name of an object in this group, given the object's index.  <a href="#a21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5G_obj_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a22">getObjTypeByIdx</a> (hsize_t idx) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the type of an object in this group, given the object's index.  <a href="#a22"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5G_obj_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a23">getObjTypeByIdx</a> (hsize_t idx, string &amp;type_name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function because it also provides the returned object type in text.  <a href="#a23"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a24">iterateElems</a> (const char *name, int *idx, H5G_iterate_t op, void *op_data)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Iterates a user's function over the entries of a group.  <a href="#a24"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a25">iterateElems</a> (const string &amp;name, int *idx, H5G_iterate_t op, void *op_data)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a25"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a26">link</a> (H5G_link_t link_type, const char *curr_name, const char *new_name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a link of the specified type from <em>new_name</em> to <em>curr_name</em>.  <a href="#a26"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a27">link</a> (H5G_link_t link_type, const string &amp;curr_name, const string &amp;new_name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>curr_name</em> and <em>new_name</em>.  <a href="#a27"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a28">unlink</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Removes the specified name at this location.  <a href="#a28"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a29">unlink</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a29"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a30">mount</a> (const char *name, <a class="el" href="classH5_1_1H5File.html">H5File</a> &amp;child, <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;plist) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Mounts the file <em>child</em> onto this group.  <a href="#a30"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a31">mount</a> (const string &amp;name, <a class="el" href="classH5_1_1H5File.html">H5File</a> &amp;child, <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;plist) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a31"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a32">unmount</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Unmounts the specified file.  <a href="#a32"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a33">unmount</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a33"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a34">move</a> (const char *src, const char *dst) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Renames an object at this location.  <a href="#a34"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a35">move</a> (const string &amp;src, const string &amp;dst) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>src</em> and <em>dst</em>.  <a href="#a35"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataType.html">DataType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a36">openDataType</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Opens the named generic datatype at this location.  <a href="#a36"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataType.html">DataType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a37">openDataType</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a37"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1ArrayType.html">ArrayType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a38">openArrayType</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Opens the named array datatype at this location.  <a href="#a38"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1ArrayType.html">ArrayType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a39">openArrayType</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a39"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1CompType.html">CompType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a40">openCompType</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Opens the named compound datatype at this location.  <a href="#a40"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1CompType.html">CompType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a41">openCompType</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a41"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1EnumType.html">EnumType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a42">openEnumType</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Opens the named enumeration datatype at this location.  <a href="#a42"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1EnumType.html">EnumType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a43">openEnumType</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a43"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1IntType.html">IntType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a44">openIntType</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Opens the named integer datatype at this location.  <a href="#a44"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1IntType.html">IntType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a45">openIntType</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a45"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1FloatType.html">FloatType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a46">openFloatType</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Opens the named floating-point datatype at this location.  <a href="#a46"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1FloatType.html">FloatType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a47">openFloatType</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a47"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1StrType.html">StrType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a48">openStrType</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Opens the named string datatype at this location.  <a href="#a48"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1StrType.html">StrType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a49">openStrType</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a49"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1VarLenType.html">VarLenType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a50">openVarLenType</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Opens the named variable length datatype at this location.  <a href="#a50"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1VarLenType.html">VarLenType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a51">openVarLenType</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>.  <a href="#a51"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual hid_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a52">getLocId</a> () const =0</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a53">throwException</a> (const string func_name, const string msg) const =0</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">For subclasses, <a class="el" href="classH5_1_1H5File.html">H5File</a> and <a class="el" href="classH5_1_1Group.html">Group</a>, to throw appropriate exception.  <a href="#a53"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a54">CommonFG</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor.  <a href="#a54"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html#a55">~CommonFG</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a55"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a54" doxytag="H5::CommonFG::CommonFG"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::CommonFG::CommonFG           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a55" doxytag="H5::CommonFG::~CommonFG"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::CommonFG::~CommonFG           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::CommonFG::createGroup"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1Group.html">Group</a> H5::CommonFG::createGroup           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>size_hint</em> = <code>0</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a new group at this location which can be a file or another group. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the group to create </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>size_hint</em>&nbsp;</td><td>- IN: Indicates the number of bytes to reserve for the names that will appear in the group </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1Group.html">Group</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The optional <em>size_hint</em> specifies how much file space to reserve for storing the names that will appear in this new group. If a non-positive value is provided for the <em>size_hint</em> then a default size is chosen. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::CommonFG::createGroup"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1Group.html">Group</a> H5::CommonFG::createGroup           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>size_hint</em> = <code>0</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::CommonFG::openGroup"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1Group.html">Group</a> H5::CommonFG::openGroup           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Opens an existing group in a location which can be a file or another group. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the group to open </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1Group.html">Group</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::CommonFG::openGroup"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1Group.html">Group</a> H5::CommonFG::openGroup           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::CommonFG::createDataSet"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataSet.html">DataSet</a> H5::CommonFG::createDataSet           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>data_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>data_space</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>create_plist</em> = <code><a class="el" href="classH5_1_1DSetCreatPropList.html#s0">DSetCreatPropList::DEFAULT</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a new dataset at this location. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the dataset to create </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>data_type</em>&nbsp;</td><td>- IN: Datatype of the dataset </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>data_space</em>&nbsp;</td><td>- IN: Dataspace for the dataset </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>create_plist</em>&nbsp;</td><td>- IN: Creation properly list for the dataset </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1DataSet.html">DataSet</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::CommonFG::createDataSet"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataSet.html">DataSet</a> H5::CommonFG::createDataSet           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>data_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>data_space</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>create_plist</em> = <code><a class="el" href="classH5_1_1DSetCreatPropList.html#s0">DSetCreatPropList::DEFAULT</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::CommonFG::openDataSet"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataSet.html">DataSet</a> H5::CommonFG::openDataSet           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Opens an existing dataset at this location. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the dataset to open </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1DataSet.html">DataSet</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::CommonFG::openDataSet"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataSet.html">DataSet</a> H5::CommonFG::openDataSet           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::CommonFG::getComment"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::CommonFG::getComment           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves comment for the specified object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Comment string </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::CommonFG::getComment"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::CommonFG::getComment           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>bufsize</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves comment for the specified object and its comment's length. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>bufsize</em>&nbsp;</td><td>- IN: Length of the comment to retrieve </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Comment string </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::CommonFG::getComment"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::CommonFG::getComment           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>bufsize</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::CommonFG::removeComment"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::removeComment           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Removes the comment from an object specified by its name. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::CommonFG::removeComment"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::removeComment           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::CommonFG::setComment"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::setComment           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>comment</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets or resets the comment for an object specified by its name. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>comment</em>&nbsp;</td><td>- IN: New comment </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>If <em>comment</em> is an empty string or a null pointer, the comment message is removed from the object. Comments should be relatively short, null-terminated, ASCII strings. They can be attached to any object that has an object header, e.g., data sets, groups, named data types, and data spaces, but not symbolic links. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a14" doxytag="H5::CommonFG::setComment"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::setComment           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>comment</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em> and <em>comment</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a15" doxytag="H5::CommonFG::getLinkval"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::CommonFG::getLinkval           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>size</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the name of the object that the symbolic link points to. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Symbolic link to the object </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>- IN: Maximum number of characters of value to be returned </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Name of the object </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a16" doxytag="H5::CommonFG::getLinkval"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::CommonFG::getLinkval           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>size</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a17" doxytag="H5::CommonFG::getNumObjs"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hsize_t H5::CommonFG::getNumObjs           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the number of objects in this group. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of objects </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a18" doxytag="H5::CommonFG::getObjinfo"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::getObjinfo           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hbool_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>follow_link</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5G_stat_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>statbuf</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns information about an object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>follow_link</em>&nbsp;</td><td>- IN: Link flag </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>statbuf</em>&nbsp;</td><td>- OUT: Buffer to return information about the object </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a19" doxytag="H5::CommonFG::getObjinfo"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::getObjinfo           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hbool_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>follow_link</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5G_stat_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>statbuf</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a20" doxytag="H5::CommonFG::getObjnameByIdx"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">ssize_t H5::CommonFG::getObjnameByIdx           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>idx</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>size</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the name of an object in this group, given the object's index. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>idx</em>&nbsp;</td><td>- IN: Transient index of the object </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN/OUT: Retrieved name of the object </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>- IN: Length to retrieve </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Actual size of the object name or 0, if object has no name </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The value of idx can be any nonnegative number less than the total number of objects in the group, which is returned by the function <code><a class="el" href="classH5_1_1CommonFG.html#a17">CommonFG::getNumObjs</a></code>. Note that this is a transient index; thus, an object may have a different index each time the group is opened. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a21" doxytag="H5::CommonFG::getObjnameByIdx"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::CommonFG::getObjnameByIdx           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>idx</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the name of an object in this group, given the object's index. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>idx</em>&nbsp;</td><td>- IN: Transient index of the object </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Object name </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The value of idx can be any nonnegative number less than the total number of objects in the group, which is returned by the function <code><a class="el" href="classH5_1_1CommonFG.html#a17">CommonFG::getNumObjs</a></code>. Note that this is a transient index; thus, an object may have a different index each time the group is opened. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a22" doxytag="H5::CommonFG::getObjTypeByIdx"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5G_obj_t H5::CommonFG::getObjTypeByIdx           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>idx</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the type of an object in this group, given the object's index. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>idx</em>&nbsp;</td><td>- IN: Transient index of the object </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Object type </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a23" doxytag="H5::CommonFG::getObjTypeByIdx"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5G_obj_t H5::CommonFG::getObjTypeByIdx           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>idx</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>type_name</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function because it also provides the returned object type in text. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>idx</em>&nbsp;</td><td>- IN: Transient index of the object </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>type_name</em>&nbsp;</td><td>- IN: Object type in text </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Object type </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a24" doxytag="H5::CommonFG::iterateElems"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::CommonFG::iterateElems           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int *&nbsp;</td>
+          <td class="mdname" nowrap> <em>idx</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5G_iterate_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>op</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>op_data</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Iterates a user's function over the entries of a group. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN : Name of group to iterate over </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>idx</em>&nbsp;</td><td>- IN/OUT: Starting (IN) and ending (OUT) entry indices </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>op</em>&nbsp;</td><td>- IN : User's function to operate on each entry </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>op_data</em>&nbsp;</td><td>- IN/OUT: Data associated with the operation </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>The return value of the first operator that returns non-zero, or zero if all members were processed with no operator returning non-zero. </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a25" doxytag="H5::CommonFG::iterateElems"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::CommonFG::iterateElems           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int *&nbsp;</td>
+          <td class="mdname" nowrap> <em>idx</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5G_iterate_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>op</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>op_data</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a26" doxytag="H5::CommonFG::link"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::link           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5G_link_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>link_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>curr_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>new_name</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a link of the specified type from <em>new_name</em> to <em>curr_name</em>. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>link_type</em>&nbsp;</td><td>- IN: Link type; possible values are <ul>
+<li><code>H5G_LINK_HARD</code> </li>
+<li><code>H5G_LINK_SOFT</code> </li>
+</ul>
+</td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>curr_name</em>&nbsp;</td><td>- IN: Name of the existing object if link is a hard link; can be anything for the soft link </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>new_name</em>&nbsp;</td><td>- IN: New name for the object </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Note that both names are interpreted relative to the specified location. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a27" doxytag="H5::CommonFG::link"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::link           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5G_link_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>link_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>curr_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>new_name</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>curr_name</em> and <em>new_name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a28" doxytag="H5::CommonFG::unlink"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::unlink           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Removes the specified name at this location. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object to be removed </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a29" doxytag="H5::CommonFG::unlink"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::unlink           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a30" doxytag="H5::CommonFG::mount"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::mount           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1H5File.html">H5File</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>child</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>plist</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Mounts the file <em>child</em> onto this group. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the group </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>child</em>&nbsp;</td><td>- IN: File to mount </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>plist</em>&nbsp;</td><td>- IN: Property list to use </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a31" doxytag="H5::CommonFG::mount"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::mount           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1H5File.html">H5File</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>child</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>plist</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a32" doxytag="H5::CommonFG::unmount"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::unmount           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Unmounts the specified file. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the file to unmount </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a33" doxytag="H5::CommonFG::unmount"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::unmount           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a34" doxytag="H5::CommonFG::move"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::move           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>src</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>dst</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Renames an object at this location. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>src</em>&nbsp;</td><td>- IN: Object's original name </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dst</em>&nbsp;</td><td>- IN: Object's new name </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a35" doxytag="H5::CommonFG::move"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CommonFG::move           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>src</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dst</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>src</em> and <em>dst</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a36" doxytag="H5::CommonFG::openDataType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataType.html">DataType</a> H5::CommonFG::openDataType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Opens the named generic datatype at this location. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the datatype to open </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1DataType.html">DataType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a37" doxytag="H5::CommonFG::openDataType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataType.html">DataType</a> H5::CommonFG::openDataType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a38" doxytag="H5::CommonFG::openArrayType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1ArrayType.html">ArrayType</a> H5::CommonFG::openArrayType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Opens the named array datatype at this location. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the array datatype to open </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1ArrayType.html">ArrayType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a39" doxytag="H5::CommonFG::openArrayType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1ArrayType.html">ArrayType</a> H5::CommonFG::openArrayType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a40" doxytag="H5::CommonFG::openCompType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1CompType.html">CompType</a> H5::CommonFG::openCompType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Opens the named compound datatype at this location. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the compound datatype to open </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1CompType.html">CompType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a41" doxytag="H5::CommonFG::openCompType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1CompType.html">CompType</a> H5::CommonFG::openCompType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a42" doxytag="H5::CommonFG::openEnumType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1EnumType.html">EnumType</a> H5::CommonFG::openEnumType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Opens the named enumeration datatype at this location. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the enumeration datatype to open </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1EnumType.html">EnumType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a43" doxytag="H5::CommonFG::openEnumType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1EnumType.html">EnumType</a> H5::CommonFG::openEnumType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a44" doxytag="H5::CommonFG::openIntType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1IntType.html">IntType</a> H5::CommonFG::openIntType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Opens the named integer datatype at this location. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the integer datatype to open </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1IntType.html">IntType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a45" doxytag="H5::CommonFG::openIntType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1IntType.html">IntType</a> H5::CommonFG::openIntType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a46" doxytag="H5::CommonFG::openFloatType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1FloatType.html">FloatType</a> H5::CommonFG::openFloatType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Opens the named floating-point datatype at this location. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the floating-point datatype to open </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1FloatType.html">FloatType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a47" doxytag="H5::CommonFG::openFloatType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1FloatType.html">FloatType</a> H5::CommonFG::openFloatType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a48" doxytag="H5::CommonFG::openStrType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1StrType.html">StrType</a> H5::CommonFG::openStrType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Opens the named string datatype at this location. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the string datatype to open </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1StrType.html">StrType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a49" doxytag="H5::CommonFG::openStrType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1StrType.html">StrType</a> H5::CommonFG::openStrType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a50" doxytag="H5::CommonFG::openVarLenType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1VarLenType.html">VarLenType</a> H5::CommonFG::openVarLenType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Opens the named variable length datatype at this location. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the variable length datatype to open </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1VarLenType.html">VarLenType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td>or <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a51" doxytag="H5::CommonFG::openVarLenType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1VarLenType.html">VarLenType</a> H5::CommonFG::openVarLenType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a52" doxytag="H5::CommonFG::getLocId"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual hid_t H5::CommonFG::getLocId           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [pure virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+For subclasses, <a class="el" href="classH5_1_1H5File.html">H5File</a> and <a class="el" href="classH5_1_1Group.html">Group</a>, to return the correct object id, i.e. file or group id. 
+<p>
+Implemented in <a class="el" href="classH5_1_1H5File.html#a22">H5::H5File</a>, and <a class="el" href="classH5_1_1Group.html#a8">H5::Group</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a53" doxytag="H5::CommonFG::throwException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual void H5::CommonFG::throwException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>func_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>msg</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const<code> [pure virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+For subclasses, <a class="el" href="classH5_1_1H5File.html">H5File</a> and <a class="el" href="classH5_1_1Group.html">Group</a>, to throw appropriate exception. 
+<p>
+
+<p>
+Implemented in <a class="el" href="classH5_1_1H5File.html#a21">H5::H5File</a>, and <a class="el" href="classH5_1_1Group.html#a7">H5::Group</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CommonFG.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CommonFG.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CompType-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CompType-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CompType-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,417 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::CompType Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1CompType.html">H5::CompType</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a2">close</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a5">commit</a>(CommonFG &amp;loc, const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a6">commit</a>(CommonFG &amp;loc, const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a7">committed</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a0">CompType</a>(size_t size)</td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a1">CompType</a>(const DataSet &amp;dataset)</td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a20">CompType</a>()</td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a21">CompType</a>(const hid_t existing_id)</td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a22">CompType</a>(const CompType &amp;original)</td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a9">convert</a>(const DataType &amp;dest, size_t nelmts, void *buf, void *background, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a3">copy</a>(const DataType &amp;like_type)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a0">DataType</a>(const H5T_class_t type_class, size_t size)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a1">DataType</a>(const DataType &amp;original)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a32">DataType</a>(const hid_t type_id, bool predtype=false)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a33">DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a24">detectClass</a>(H5T_class_t cls) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a8">find</a>(const DataType &amp;dest, H5T_cdata_t **pcdata) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a19">fromClass</a>() const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a4">getClass</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a9">getMemberArrayType</a>(unsigned member_num) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a2">getMemberClass</a>(unsigned member_num) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a10">getMemberCompType</a>(unsigned member_num) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a8">getMemberDataType</a>(unsigned member_num) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a3">getMemberDims</a>(unsigned member_num, size_t *dims, int *perm) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a11">getMemberEnumType</a>(unsigned member_num) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a13">getMemberFloatType</a>(unsigned member_num) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a4">getMemberIndex</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a5">getMemberIndex</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a12">getMemberIntType</a>(unsigned member_num) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a7">getMemberName</a>(unsigned member_num) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a6">getMemberOffset</a>(unsigned memb_no) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a14">getMemberStrType</a>(unsigned member_num) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a15">getMemberVarLenType</a>(unsigned member_num) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a16">getNmembers</a>() const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a29">getObjType</a>(void *ref, H5R_type_t ref_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a13">getOverflow</a>(void) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a30">getRegion</a>(void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a15">getSize</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a16">getSuper</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a23">getTag</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a17">insertMember</a>(const string &amp;name, size_t offset, const DataType &amp;new_member) const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#p0">is_predtype</a></td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a25">isVariableStr</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a12">lock</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a10">operator=</a>(const DataType &amp;rhs)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::H5Object::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a11">operator==</a>(const DataType &amp;compared_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a18">pack</a>() const </td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a26">Reference</a>(const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a27">Reference</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a28">Reference</a>(const char *name, DataSpace &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a17">registerFunc</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a18">registerFunc</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a14">setOverflow</a>(H5T_overflow_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a21">setTag</a>(const char *tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a22">setTag</a>(const string &amp;tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a19">unregister</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a20">unregister</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CompType.html#a23">~CompType</a>()</td><td><a class="el" href="classH5_1_1CompType.html">H5::CompType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a34">~DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CompType.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CompType.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CompType.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1332 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1CompType.html">CompType</a></div>
+<h1>H5::CompType Class Reference</h1><code>#include &lt;<a class="el" href="H5CompType_8h-source.html">H5CompType.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::CompType:
+<p><center><img src="classH5_1_1CompType.png" usemap="#H5::CompType_map" border="0" alt=""></center>
+<map name="H5::CompType_map">
+<area href="classH5_1_1DataType.html" alt="H5::DataType" shape="rect" coords="0,112,107,136">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="0,56,107,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,107,24">
+</map>
+<a href="classH5_1_1CompType-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a0">CompType</a> (size_t size)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an empty compound datatype given a size, in bytes.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a1">CompType</a> (const <a class="el" href="classH5_1_1DataSet.html">DataSet</a> &amp;dataset)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the compound datatype of the specified dataset.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5T_class_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a2">getMemberClass</a> (unsigned member_num) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the type class of the specified member.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a3">getMemberDims</a> (unsigned member_num, size_t *dims, int *perm) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a4">getMemberIndex</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the index of a member in this compound datatype.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a5">getMemberIndex</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a6">getMemberOffset</a> (unsigned memb_no) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the byte offset of the beginning of a member with respect to the beginning of the compound data type datum.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a7">getMemberName</a> (unsigned member_num) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the name of a member in this compound datatype.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataType.html">DataType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a8">getMemberDataType</a> (unsigned member_num) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the generic datatype of the specified member in this compound datatype.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1ArrayType.html">ArrayType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a9">getMemberArrayType</a> (unsigned member_num) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the array datatype of the specified member in this compound datatype.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1CompType.html">CompType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a10">getMemberCompType</a> (unsigned member_num) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the compound datatype of the specified member in this compound datatype.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1EnumType.html">EnumType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a11">getMemberEnumType</a> (unsigned member_num) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the enumeration datatype of the specified member in this compound datatype.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1IntType.html">IntType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a12">getMemberIntType</a> (unsigned member_num) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the integer datatype of the specified member in this compound datatype.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1FloatType.html">FloatType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a13">getMemberFloatType</a> (unsigned member_num) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the floating-point datatype of the specified member in this compound datatype.  <a href="#a13"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1StrType.html">StrType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a14">getMemberStrType</a> (unsigned member_num) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the string datatype of the specified member in this compound datatype.  <a href="#a14"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1VarLenType.html">VarLenType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a15">getMemberVarLenType</a> (unsigned member_num) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the variable length datatype of the specified member in this compound datatype.  <a href="#a15"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a16">getNmembers</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of members in this compound datatype.  <a href="#a16"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a17">insertMember</a> (const string &amp;name, size_t offset, const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;new_member) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Inserts a new member to this compound datatype.  <a href="#a17"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a18">pack</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Recursively removes padding from within a compound datatype.  <a href="#a18"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a19">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a20">CompType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: Creates a stub compound datatype.  <a href="#a20"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a21">CompType</a> (const hid_t existing_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a <a class="el" href="classH5_1_1CompType.html">CompType</a> object using the id of an existing datatype.  <a href="#a21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a22">CompType</a> (const <a class="el" href="classH5_1_1CompType.html">CompType</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes copy of the original <a class="el" href="classH5_1_1CompType.html">CompType</a> object.  <a href="#a22"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html#a23">~CompType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Properly terminates access to this compound datatype.  <a href="#a23"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::CompType::CompType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::CompType::CompType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>size</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an empty compound datatype given a size, in bytes. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>- IN: Number of bytes in the datatype to create </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::CompType::CompType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::CompType::CompType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataSet.html">DataSet</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>dataset</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the compound datatype of the specified dataset. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dataset</em>&nbsp;</td><td>- IN: Dataset that this enum datatype associates with </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1CompType.html">CompType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a20" doxytag="H5::CompType::CompType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::CompType::CompType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: Creates a stub compound datatype. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a21" doxytag="H5::CompType::CompType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::CompType::CompType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>existing_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a <a class="el" href="classH5_1_1CompType.html">CompType</a> object using the id of an existing datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>existing_id</em>&nbsp;</td><td>- IN: Id of an existing compound datatype </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a22" doxytag="H5::CompType::CompType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::CompType::CompType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1CompType.html">CompType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes copy of the original <a class="el" href="classH5_1_1CompType.html">CompType</a> object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>original</em>&nbsp;</td><td>- IN: Original <a class="el" href="classH5_1_1CompType.html">CompType</a> instance </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a23" doxytag="H5::CompType::~CompType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::CompType::~CompType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Properly terminates access to this compound datatype. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a2" doxytag="H5::CompType::getMemberClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5T_class_t H5::CompType::getMemberClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>member_num</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the type class of the specified member. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>member_num</em>&nbsp;</td><td>- IN: Zero-based index of the member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Type class of the member </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::CompType::getMemberDims"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::CompType::getMemberDims           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname" nowrap> <em>member_num</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>dims</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int *&nbsp;</td>
+          <td class="mdname" nowrap> <em>perm</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::CompType::getMemberIndex"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::CompType::getMemberIndex           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the index of a member in this compound datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Index of member </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Members are stored in no particular order with numbers 0 through N-1, where N is the value returned by the member function <code><a class="el" href="classH5_1_1CompType.html#a16">CompType::getNmembers</a></code>. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::CompType::getMemberIndex"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::CompType::getMemberIndex           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::CompType::getMemberOffset"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">size_t H5::CompType::getMemberOffset           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>member_num</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the byte offset of the beginning of a member with respect to the beginning of the compound data type datum. 
+<p>
+Members are stored in no particular order with numbers 0 through N-1, where N is the value returned by the member function <code><a class="el" href="classH5_1_1CompType.html#a16">CompType::getNmembers</a></code>.     </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::CompType::getMemberName"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::CompType::getMemberName           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>member_num</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the name of a member in this compound datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>member_num</em>&nbsp;</td><td>- IN: Zero-based index of the member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Name of member </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::CompType::getMemberDataType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataType.html">DataType</a> H5::CompType::getMemberDataType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>member_num</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the generic datatype of the specified member in this compound datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>member_num</em>&nbsp;</td><td>- IN: Zero-based index of the member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1DataType.html">DataType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::CompType::getMemberArrayType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1ArrayType.html">ArrayType</a> H5::CompType::getMemberArrayType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>member_num</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the array datatype of the specified member in this compound datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>member_num</em>&nbsp;</td><td>- IN: Zero-based index of the member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1ArrayType.html">ArrayType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::CompType::getMemberCompType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1CompType.html">CompType</a> H5::CompType::getMemberCompType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>member_num</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the compound datatype of the specified member in this compound datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>member_num</em>&nbsp;</td><td>- IN: Zero-based index of the member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1CompType.html">CompType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::CompType::getMemberEnumType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1EnumType.html">EnumType</a> H5::CompType::getMemberEnumType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>member_num</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the enumeration datatype of the specified member in this compound datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>member_num</em>&nbsp;</td><td>- IN: Zero-based index of the member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1EnumType.html">EnumType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::CompType::getMemberIntType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1IntType.html">IntType</a> H5::CompType::getMemberIntType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>member_num</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the integer datatype of the specified member in this compound datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>member_num</em>&nbsp;</td><td>- IN: Zero-based index of the member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1IntType.html">IntType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::CompType::getMemberFloatType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1FloatType.html">FloatType</a> H5::CompType::getMemberFloatType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>member_num</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the floating-point datatype of the specified member in this compound datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>member_num</em>&nbsp;</td><td>- IN: Zero-based index of the member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1FloatType.html">FloatType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a14" doxytag="H5::CompType::getMemberStrType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1StrType.html">StrType</a> H5::CompType::getMemberStrType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>member_num</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the string datatype of the specified member in this compound datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>member_num</em>&nbsp;</td><td>- IN: Zero-based index of the member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1StrType.html">StrType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a15" doxytag="H5::CompType::getMemberVarLenType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1VarLenType.html">VarLenType</a> H5::CompType::getMemberVarLenType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>member_num</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the variable length datatype of the specified member in this compound datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>member_num</em>&nbsp;</td><td>- IN: Zero-based index of the member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1VarLenType.html">VarLenType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a16" doxytag="H5::CompType::getNmembers"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::CompType::getNmembers           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the number of members in this compound datatype. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of members </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a17" doxytag="H5::CompType::insertMember"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CompType::insertMember           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>offset</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>new_member</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Inserts a new member to this compound datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the new member </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>offset</em>&nbsp;</td><td>- IN: Offset in memory structure of the field to insert </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>new_member</em>&nbsp;</td><td>- IN: New member to be inserted </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a18" doxytag="H5::CompType::pack"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::CompType::pack           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Recursively removes padding from within a compound datatype. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a19" doxytag="H5::CompType::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::CompType::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1DataType.html#a31">H5::DataType</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CompType.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1CompType.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetCreatPropList-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetCreatPropList-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetCreatPropList-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,406 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::DSetCreatPropList Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a0">allFiltersAvail</a>()</td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a3">close</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a4">closeClass</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a5">copy</a>(const PropList &amp;like_plist)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a6">copyProp</a>(PropList &amp;dest, const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a7">copyProp</a>(PropList &amp;dest, const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a8">copyProp</a>(PropList &amp;dest, PropList &amp;src, const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a9">copyProp</a>(PropList &amp;dest, PropList &amp;src, const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#s0">DEFAULT</a></td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a25">DSetCreatPropList</a>()</td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a26">DSetCreatPropList</a>(const DSetCreatPropList &amp;orig)</td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a27">DSetCreatPropList</a>(const hid_t plist_id)</td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a24">fromClass</a>() const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a1">getAllocTime</a>()</td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a3">getChunk</a>(int max_ndims, hsize_t *dim) const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a10">getClass</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a11">getClassName</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a12">getClassParent</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a5">getExternal</a>(unsigned idx, size_t name_size, char *name, off_t &amp;offset, hsize_t &amp;size) const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a6">getExternalCount</a>() const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a7">getFillTime</a>()</td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a9">getFillValue</a>(const DataType &amp;fvalue_type, void *value) const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a11">getFilter</a>(int filter_number, unsigned int &amp;flags, size_t &amp;cd_nelmts, unsigned int *cd_values, size_t namelen, char name[]) const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a12">getFilterById</a>(H5Z_filter_t filter_id, unsigned int &amp;flags, size_t &amp;cd_nelmts, unsigned int *cd_values, size_t namelen, char name[]) const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a13">getLayout</a>() const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a15">getNfilters</a>() const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a13">getNumProps</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a14">getProperty</a>(const char *name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a15">getProperty</a>(const string &amp;name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a16">getProperty</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a17">getProperty</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a23">getPropSize</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a24">getPropSize</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a25">isAClass</a>(const PropList &amp;prop_class) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a16">isFillValueDefined</a>()</td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a17">modifyFilter</a>(H5Z_filter_t filter_id, unsigned int flags, size_t cd_nelmts, const unsigned int cd_values[]) const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a1">operator=</a>(const PropList &amp;rhs)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::IdComponent::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a2">operator==</a>(const PropList &amp;rhs) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a26">propExist</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a27">propExist</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a0">PropList</a>(const hid_t plist_id)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a31">PropList</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a32">PropList</a>(const PropList &amp;original)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a18">removeFilter</a>(H5Z_filter_t filter_id) const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a28">removeProp</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a29">removeProp</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a2">setAllocTime</a>(H5D_alloc_time_t alloc_time)</td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a4">setChunk</a>(int ndims, const hsize_t *dim) const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a19">setDeflate</a>(int level) const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a20">setExternal</a>(const char *name, off_t offset, hsize_t size) const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a8">setFillTime</a>(H5D_fill_time_t fill_time)</td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a10">setFillValue</a>(const DataType &amp;fvalue_type, const void *value) const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a21">setFilter</a>(H5Z_filter_t filter, unsigned int flags, size_t cd_nelmts, const unsigned int cd_values[]) const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a22">setFletcher32</a>()</td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a14">setLayout</a>(H5D_layout_t layout) const </td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a18">setProperty</a>(const char *name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a19">setProperty</a>(const char *name, const char *charptr) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a20">setProperty</a>(const char *name, string &amp;strg) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a21">setProperty</a>(const string &amp;name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a22">setProperty</a>(const string &amp;name, string &amp;strg) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a23">setShuffle</a>()</td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetCreatPropList.html#a28">~DSetCreatPropList</a>()</td><td><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a33">~PropList</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetCreatPropList.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetCreatPropList.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetCreatPropList.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1783 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a></div>
+<h1>H5::DSetCreatPropList Class Reference</h1><code>#include &lt;<a class="el" href="H5DcreatProp_8h-source.html">H5DcreatProp.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::DSetCreatPropList:
+<p><center><img src="classH5_1_1DSetCreatPropList.png" usemap="#H5::DSetCreatPropList_map" border="0" alt=""></center>
+<map name="H5::DSetCreatPropList_map">
+<area href="classH5_1_1PropList.html" alt="H5::PropList" shape="rect" coords="0,56,138,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,138,24">
+</map>
+<a href="classH5_1_1DSetCreatPropList-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a0">allFiltersAvail</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Queries whether all the filters set in this property list are available currently.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5D_alloc_time_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a1">getAllocTime</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get space allocation time for this property.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a2">setAllocTime</a> (H5D_alloc_time_t alloc_time)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets space allocation time for dataset during creation.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a3">getChunk</a> (int max_ndims, hsize_t *dim) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the size of the chunks used to store a chunked layout dataset.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a4">setChunk</a> (int ndims, const hsize_t *dim) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the size of the chunks used to store a chunked layout dataset.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a5">getExternal</a> (unsigned idx, size_t name_size, char *name, off_t &amp;offset, hsize_t &amp;size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns information about an external file.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a6">getExternalCount</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of external files for a dataset.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5D_fill_time_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a7">getFillTime</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets fill value writing time.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a8">setFillTime</a> (H5D_fill_time_t fill_time)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets fill value writing time for dataset.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a9">getFillValue</a> (const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;fvalue_type, void *value) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves a dataset fill value.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a10">setFillValue</a> (const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;fvalue_type, const void *value) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets a dataset fill value.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5Z_filter_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a11">getFilter</a> (int filter_number, unsigned int &amp;flags, size_t &amp;cd_nelmts, unsigned int *cd_values, size_t namelen, char name[]) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns information about a filter in a pipeline.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a12">getFilterById</a> (H5Z_filter_t filter_id, unsigned int &amp;flags, size_t &amp;cd_nelmts, unsigned int *cd_values, size_t namelen, char name[]) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns information about a filter in a pipeline given the filter id.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5D_layout_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a13">getLayout</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the layout type of this property list.  <a href="#a13"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a14">setLayout</a> (H5D_layout_t layout) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the type of storage used store the raw data for a dataset.  <a href="#a14"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a15">getNfilters</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of filters in the pipeline.  <a href="#a15"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5D_fill_value_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a16">isFillValueDefined</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check if fill value has been defined for this property.  <a href="#a16"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a17">modifyFilter</a> (H5Z_filter_t filter_id, unsigned int flags, size_t cd_nelmts, const unsigned int cd_values[]) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Modifies the specified filter.  <a href="#a17"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a18">removeFilter</a> (H5Z_filter_t filter_id) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Removes one or more filters.  <a href="#a18"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a19">setDeflate</a> (int level) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets compression method and compression level.  <a href="#a19"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a20">setExternal</a> (const char *name, off_t offset, hsize_t size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Adds an external file to the list of external files.  <a href="#a20"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a21">setFilter</a> (H5Z_filter_t filter, unsigned int flags, size_t cd_nelmts, const unsigned int cd_values[]) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Adds a filter to the filter pipeline.  <a href="#a21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a22">setFletcher32</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets Fletcher32 checksum of EDC for this property list.  <a href="#a22"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a23">setShuffle</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets method of the shuffle filter.  <a href="#a23"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a24">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a25">DSetCreatPropList</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: creates a stub dataset creation property list.  <a href="#a25"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a26">DSetCreatPropList</a> (const <a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a> &amp;orig)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a> object.  <a href="#a26"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a27">DSetCreatPropList</a> (const hid_t plist_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a <a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a> object using the id of an existing dataset creation property list.  <a href="#a27"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#a28">~DSetCreatPropList</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a28"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html#s0">DEFAULT</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constant for dataset creation default property.  <a href="#s0"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a25" doxytag="H5::DSetCreatPropList::DSetCreatPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DSetCreatPropList::DSetCreatPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: creates a stub dataset creation property list. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a26" doxytag="H5::DSetCreatPropList::DSetCreatPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DSetCreatPropList::DSetCreatPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>orig</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a> object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a27" doxytag="H5::DSetCreatPropList::DSetCreatPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DSetCreatPropList::DSetCreatPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>plist_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a <a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a> object using the id of an existing dataset creation property list. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a28" doxytag="H5::DSetCreatPropList::~DSetCreatPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DSetCreatPropList::~DSetCreatPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::DSetCreatPropList::allFiltersAvail"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool H5::DSetCreatPropList::allFiltersAvail           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Queries whether all the filters set in this property list are available currently. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>true if all filters available, and false if one or more filters not currently available </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::DSetCreatPropList::getAllocTime"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5D_alloc_time_t H5::DSetCreatPropList::getAllocTime           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get space allocation time for this property. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Space allocation time. </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The values of space allocation time can be one of the followings: <ul>
+<li><code>H5D_ALLOC_TIME_DEFAULT</code> </li>
+<li><code>H5D_ALLOC_TIME_EARLY</code> </li>
+<li><code>H5D_ALLOC_TIME_LATE</code> </li>
+<li><code>H5D_ALLOC_TIME_INCR</code> </li>
+</ul>
+</dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::DSetCreatPropList::setAllocTime"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::setAllocTime           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5D_alloc_time_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>alloc_time</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets space allocation time for dataset during creation. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>alloc_time</em>&nbsp;</td><td>- IN: Allocation time </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Valid values for space allocation time include: <ul>
+<li><code>H5D_ALLOC_TIME_DEFAULT</code> </li>
+<li><code>H5D_ALLOC_TIME_EARLY</code> </li>
+<li><code>H5D_ALLOC_TIME_LATE</code> </li>
+<li><code>H5D_ALLOC_TIME_INCR</code> </li>
+</ul>
+</dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::DSetCreatPropList::getChunk"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::DSetCreatPropList::getChunk           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>max_ndims</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>dim</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the size of the chunks used to store a chunked layout dataset. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>max_ndims</em>&nbsp;</td><td>- IN: Size of <em>dim</em> array </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dim</em>&nbsp;</td><td>- OUT: Array to store the chunk dimensions </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::DSetCreatPropList::setChunk"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::setChunk           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>ndims</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>dim</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the size of the chunks used to store a chunked layout dataset. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>ndims</em>&nbsp;</td><td>- IN: Number of dimensions of each chunk </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dim</em>&nbsp;</td><td>- IN: Array containing the size of each chunk </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The <em>ndims</em> parameter currently must have the same value as the rank of the dataset. The values of the <em>dim</em> array define the size of the chunks to store the dataset's raw data. As a side-effect, the layout of the dataset will be changed to <code>H5D_CHUNKED</code>, if it is not so already. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::DSetCreatPropList::getExternal"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::getExternal           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname" nowrap> <em>idx</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>name_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>off_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>offset</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hsize_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>size</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns information about an external file. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>idx</em>&nbsp;</td><td>- IN: Index of the external file, ranges [0-(N-1)] and returned by <a class="el" href="classH5_1_1DSetCreatPropList.html#a6">getExternalCount()</a> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>name_size</em>&nbsp;</td><td>- IN: Maximum length of <em>name</em> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the external file </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>offset</em>&nbsp;</td><td>- IN: Location to return an offset value </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>- OUT: Location to return the size of the external file data </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The parameter <em>idx</em> ranges [0..N-1] where N is returned by <a class="el" href="classH5_1_1DSetCreatPropList.html#a6">getExternalCount()</a>. At most <em>name_size</em> characters are copied into the name array. If the external file name is longer than name_size with the null terminator, the return value is not null terminated (similar to strncpy()). If <em>name_size</em> is zero or <em>name</em> is a null pointer, the external file name will not be returned. If <em>offset</em> or <em>size</em> are null pointers then the corresponding information will not be returned. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::DSetCreatPropList::getExternalCount"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::DSetCreatPropList::getExternalCount           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the number of external files for a dataset. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of external files </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::DSetCreatPropList::getFillTime"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5D_fill_time_t H5::DSetCreatPropList::getFillTime           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets fill value writing time. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Fill value writing time </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Valid values for fill value writing time include <ul>
+<li><code>H5D_FILL_TIME_NEVER</code> </li>
+<li><code>H5D_FILL_TIME_ALLOC</code>. </li>
+</ul>
+</dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::DSetCreatPropList::setFillTime"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::setFillTime           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5D_fill_time_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>fill_time</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets fill value writing time for dataset. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Fill value writing time </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Valid values for fill value writing time include <ul>
+<li><code>H5D_FILL_TIME_NEVER</code> </li>
+<li><code>H5D_FILL_TIME_ALLOC</code>. </li>
+</ul>
+</dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::DSetCreatPropList::getFillValue"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::getFillValue           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>fvalue_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>value</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves a dataset fill value. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>fvalue_type</em>&nbsp;</td><td>- IN: Data type for the value passed via <em>value</em> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>- OUT: Pointer to buffer to hold the retrieved fill value </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The fill value is returned through <em>value</em> pointer and the memory is allocated by the caller. The fill value will be converted from its current data type to the specified by <em>fvalue_type</em>. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::DSetCreatPropList::setFillValue"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::setFillValue           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>fvalue_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>value</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets a dataset fill value. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>fvalue_type</em>&nbsp;</td><td>- IN: Data type for the value passed via <em>value</em> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>- IN: Pointer to buffer containing the fill value </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The datatype may differ from that of the dataset, but it must be one that the HDF5 library is able to convert <em>value</em> to the dataset datatype when the dataset is created. The default fill value is 0 (zero,) which is interpreted according to the actual dataset datatype. </dd></dl>
+<dl compact><dt><b></b></dt><dd>For information on setting fill value, please refer to the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFillValue">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFillValue</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::DSetCreatPropList::getFilter"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5Z_filter_t H5::DSetCreatPropList::getFilter           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>filter_number</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned int &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>cd_nelmts</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned int *&nbsp;</td>
+          <td class="mdname" nowrap> <em>cd_values</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>namelen</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>[]</td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns information about a filter in a pipeline. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>filter_number</em>&nbsp;</td><td>- IN: Filter to get, range [0..N-1], where N is returned by H5Pget_nfilters() </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>flags</em>&nbsp;</td><td>- OUT: General properties of the filter </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>cd_nelmts</em>&nbsp;</td><td>- IN/OUT: Number of elements in <em>cd_values</em> /Number of values defined by the filter </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>cd_values</em>&nbsp;</td><td>- OUT: Array to hold the data; allocated by the user </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>namelen</em>&nbsp;</td><td>- OUT: Length of <em>name</em> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- OUT: Name of the filter </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Filter id </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Failure occurs when <em>filter_number</em> is out of range. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::DSetCreatPropList::getFilterById"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::getFilterById           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5Z_filter_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>filter_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned int &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>cd_nelmts</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned int *&nbsp;</td>
+          <td class="mdname" nowrap> <em>cd_values</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>namelen</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>char&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>[]</td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns information about a filter in a pipeline given the filter id. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>filter_id</em>&nbsp;</td><td>- IN: Filter to get </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>flags</em>&nbsp;</td><td>- OUT: General properties of the filter </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>cd_nelmts</em>&nbsp;</td><td>- IN/OUT: Number of elements in <em>cd_values</em> /Number of values defined by the filter </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>cd_values</em>&nbsp;</td><td>- OUT: Array to hold the data; allocated by the user </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>namelen</em>&nbsp;</td><td>- IN: Length of <em>name</em> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- OUT: Name of the filter </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::DSetCreatPropList::getLayout"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5D_layout_t H5::DSetCreatPropList::getLayout           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the layout type of this property list. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Layout type, which can be: <ul>
+<li><code>H5D_COMPACT</code> - raw data is stored in the object header in the file. </li>
+<li><code>H5D_CONTIGUOUS</code> - raw data is stored separately from the object header in one contiguous chunk in the file. </li>
+<li><code>H5D_CHUNKED</code> - raw data is stored separately from the object header in chunks in separate locations in the file. </li>
+</ul>
+</dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd></dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a14" doxytag="H5::DSetCreatPropList::setLayout"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::setLayout           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5D_layout_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>layout</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the type of storage used store the raw data for a dataset. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>layout</em>&nbsp;</td><td>- IN: Type of storage layout for raw data </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For information on setting layout type, please refer to <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetLayout">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetLayout</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a15" doxytag="H5::DSetCreatPropList::getNfilters"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::DSetCreatPropList::getNfilters           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the number of filters in the pipeline. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of filters </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a16" doxytag="H5::DSetCreatPropList::isFillValueDefined"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5D_fill_value_t H5::DSetCreatPropList::isFillValueDefined           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Check if fill value has been defined for this property. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><ul>
+<li><code>H5D_FILL_VALUE_UNDEFINED</code> =0, </li>
+<li><code>H5D_FILL_VALUE_DEFAULT</code> =1, </li>
+<li><code>H5D_FILL_VALUE_USER_DEFINED</code> =2 </li>
+</ul>
+</dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a17" doxytag="H5::DSetCreatPropList::modifyFilter"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::modifyFilter           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5Z_filter_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>filter_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned int&nbsp;</td>
+          <td class="mdname" nowrap> <em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>cd_nelmts</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const unsigned int&nbsp;</td>
+          <td class="mdname" nowrap> <em>cd_values</em>[]</td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Modifies the specified filter. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>filter_id</em>&nbsp;</td><td>- IN: Filter to get </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>flags</em>&nbsp;</td><td>- OUT: General properties of the filter </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>cd_nelmts</em>&nbsp;</td><td>- IN: Number of elements in <em>cd_values</em> <br>
+ OUT: Number of values defined by the filter </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>cd_values</em>&nbsp;</td><td>- OUT: Array to hold the data; allocated by the user </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The <em>flags</em> argument is a bit vector of the field: <code>H5Z_FLAG_OPTIONAL(0x0001)</code> </dd></dl>
+<dl compact><dt><b></b></dt><dd>If this bit is set then the filter is optional. If the filter fails during a <a class="el" href="classH5_1_1DataSet.html#a12">DataSet::write()</a> operation then the filter is just excluded from the pipeline for the chunk for which it failed; the filter will not participate in the pipeline during a <a class="el" href="classH5_1_1DataSet.html#a10">DataSet::read()</a> of the chunk. If this bit is clear and the filter fails then the entire I/O operation fails. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a18" doxytag="H5::DSetCreatPropList::removeFilter"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::removeFilter           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5Z_filter_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>filter_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Removes one or more filters. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>filter_id</em>&nbsp;</td><td>- IN: Filter to remove </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Deletes a filter from the dataset creation property list; deletes all filters if <em>filter_id</em> is <code>H5Z_FILTER_NONE</code>. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a19" doxytag="H5::DSetCreatPropList::setDeflate"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::setDeflate           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>level</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets compression method and compression level. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>level</em>&nbsp;</td><td>- IN: Compression level, should [0..9], inclusive </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The function sets the compression method for this property list to <code>H5D_COMPRESS_DEFLATE</code> and the compression level to <em>level</em>. Lower compression levels are faster but result in less compression. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a20" doxytag="H5::DSetCreatPropList::setExternal"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::setExternal           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>off_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>offset</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hsize_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>size</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Adds an external file to the list of external files. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the external file </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>offset</em>&nbsp;</td><td>- IN: Location where the data starts in the file </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>- IN: Number of bytes reserved in the file for the data </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>If a dataset is splitted across multiple files then the files should be defined in order. The total size of the dataset is the sum of the <em>size</em> arguments for all the external files. If the total size is larger than the size of a dataset then the dataset can be extended (provided the data space also allows the extending). </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a21" doxytag="H5::DSetCreatPropList::setFilter"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::setFilter           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5Z_filter_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>filter_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned int&nbsp;</td>
+          <td class="mdname" nowrap> <em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>cd_nelmts</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const unsigned int&nbsp;</td>
+          <td class="mdname" nowrap> <em>cd_values</em>[]</td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Adds a filter to the filter pipeline. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>filter_id</em>&nbsp;</td><td>- IN: Filter to add </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>flags</em>&nbsp;</td><td>- IN: Specifies general properties of the filter </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>cd_nelmts</em>&nbsp;</td><td>- IN: Number of elements in cd_values </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>cd_values</em>&nbsp;</td><td>- IN: Auxiliary data for the filter </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The <em>flags</em> argument is a bit vector of the field: <code>H5Z_FLAG_OPTIONAL(0x0001)</code> </dd></dl>
+<dl compact><dt><b></b></dt><dd>If this bit is set then the filter is optional. If the filter fails during a <code><a class="el" href="classH5_1_1DataSet.html#a12">DataSet::write()</a></code> operation then the filter is just excluded from the pipeline for the chunk for which it failed; the filter will not participate in the pipeline during a <code><a class="el" href="classH5_1_1DataSet.html#a10">DataSet::read()</a></code> of the chunk. If this bit is clear and the filter fails then the entire I/O operation fails. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a22" doxytag="H5::DSetCreatPropList::setFletcher32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::setFletcher32           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets Fletcher32 checksum of EDC for this property list. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a23" doxytag="H5::DSetCreatPropList::setShuffle"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetCreatPropList::setShuffle           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets method of the shuffle filter. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Please refer to the Reference Manual of <code>H5Pset_shuffle</code> for details. <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetShuffle">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetShuffle</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a24" doxytag="H5::DSetCreatPropList::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::DSetCreatPropList::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1PropList.html#a30">H5::PropList</a>.    </td>
+  </tr>
+</table>
+<hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="s0" doxytag="H5::DSetCreatPropList::DEFAULT"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a> <a class="el" href="classH5_1_1DSetCreatPropList.html#s0">H5::DSetCreatPropList::DEFAULT</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Constant for dataset creation default property. 
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1PropList.html#s0">H5::PropList</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetCreatPropList.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetCreatPropList.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetMemXferPropList-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetMemXferPropList-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetMemXferPropList-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,399 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::DSetMemXferPropList Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a3">close</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a4">closeClass</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a5">copy</a>(const PropList &amp;like_plist)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a6">copyProp</a>(PropList &amp;dest, const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a7">copyProp</a>(PropList &amp;dest, const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a8">copyProp</a>(PropList &amp;dest, PropList &amp;src, const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a9">copyProp</a>(PropList &amp;dest, PropList &amp;src, const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#s0">DEFAULT</a></td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a18">DSetMemXferPropList</a>()</td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a19">DSetMemXferPropList</a>(const DSetMemXferPropList &amp;orig)</td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a20">DSetMemXferPropList</a>(const hid_t plist_id)</td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a17">fromClass</a>() const </td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a3">getBtreeRatios</a>(double &amp;left, double &amp;middle, double &amp;right) const </td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a1">getBuffer</a>(void **tconv, void **bkg) const </td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a10">getClass</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a11">getClassName</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a12">getClassParent</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a16">getEDCCheck</a>()</td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a14">getHyperVectorSize</a>()</td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a10">getMulti</a>(hid_t *memb_dxpl)</td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a13">getNumProps</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a5">getPreserve</a>() const </td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a14">getProperty</a>(const char *name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a15">getProperty</a>(const string &amp;name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a16">getProperty</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a17">getProperty</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a23">getPropSize</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a24">getPropSize</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a12">getSmallDataBlockSize</a>()</td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a8">getVlenMemManager</a>(H5MM_allocate_t &amp;alloc, void **alloc_info, H5MM_free_t &amp;free, void **free_info) const </td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a25">isAClass</a>(const PropList &amp;prop_class) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a1">operator=</a>(const PropList &amp;rhs)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::IdComponent::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a2">operator==</a>(const PropList &amp;rhs) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a26">propExist</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a27">propExist</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a0">PropList</a>(const hid_t plist_id)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a31">PropList</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a32">PropList</a>(const PropList &amp;original)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a28">removeProp</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a29">removeProp</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a2">setBtreeRatios</a>(double left, double middle, double right) const </td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a0">setBuffer</a>(size_t size, void *tconv, void *bkg) const </td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a15">setEDCCheck</a>(H5Z_EDC_t check)</td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a13">setHyperVectorSize</a>(size_t vector_size)</td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a9">setMulti</a>(const hid_t *memb_dxpl)</td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a4">setPreserve</a>(bool status) const </td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a18">setProperty</a>(const char *name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a19">setProperty</a>(const char *name, const char *charptr) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a20">setProperty</a>(const char *name, string &amp;strg) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a21">setProperty</a>(const string &amp;name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a22">setProperty</a>(const string &amp;name, string &amp;strg) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a11">setSmallDataBlockSize</a>(hsize_t size)</td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a6">setVlenMemManager</a>(H5MM_allocate_t alloc, void *alloc_info, H5MM_free_t free, void *free_info) const </td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a7">setVlenMemManager</a>() const </td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DSetMemXferPropList.html#a21">~DSetMemXferPropList</a>()</td><td><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a33">~PropList</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetMemXferPropList.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetMemXferPropList.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetMemXferPropList.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1367 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a></div>
+<h1>H5::DSetMemXferPropList Class Reference</h1><code>#include &lt;<a class="el" href="H5DxferProp_8h-source.html">H5DxferProp.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::DSetMemXferPropList:
+<p><center><img src="classH5_1_1DSetMemXferPropList.png" usemap="#H5::DSetMemXferPropList_map" border="0" alt=""></center>
+<map name="H5::DSetMemXferPropList_map">
+<area href="classH5_1_1PropList.html" alt="H5::PropList" shape="rect" coords="0,56,159,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,159,24">
+</map>
+<a href="classH5_1_1DSetMemXferPropList-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a0">setBuffer</a> (size_t size, void *tconv, void *bkg) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets type conversion and background buffers.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a1">getBuffer</a> (void **tconv, void **bkg) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reads buffer settings.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a2">setBtreeRatios</a> (double left, double middle, double right) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets B-tree split ratios for a dataset transfer property list.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a3">getBtreeRatios</a> (double &amp;left, double &amp;middle, double &amp;right) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets B-tree split ratios for a dataset transfer property list.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a4">setPreserve</a> (bool status) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the dataset transfer property list status to true or false.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a5">getPreserve</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Checks status of the dataset transfer property list.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a6">setVlenMemManager</a> (H5MM_allocate_t alloc, void *alloc_info, H5MM_free_t free, void *free_info) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the memory manager for variable-length datatype allocation.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a7">setVlenMemManager</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the memory manager for variable-length datatype allocation - system <code>malloc</code> and <code>free</code> will be used.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a8">getVlenMemManager</a> (H5MM_allocate_t &amp;alloc, void **alloc_info, H5MM_free_t &amp;free, void **free_info) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the memory manager for variable-length datatype allocation.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a9">setMulti</a> (const hid_t *memb_dxpl)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the data transfer property list for the multi-file driver.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a10">getMulti</a> (hid_t *memb_dxpl)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns multi-file data transfer property list information.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a11">setSmallDataBlockSize</a> (hsize_t size)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the size of a contiguous block reserved for small data.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">hsize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a12">getSmallDataBlockSize</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the current small data block size setting.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a13">setHyperVectorSize</a> (size_t vector_size)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets number of I/O vectors to be read/written in hyperslab I/O.  <a href="#a13"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a14">getHyperVectorSize</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of I/O vectors to be read/written in hyperslab I/O.  <a href="#a14"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a15">setEDCCheck</a> (H5Z_EDC_t check)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Enables or disables error-detecting for a dataset reading process.  <a href="#a15"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5Z_EDC_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a16">getEDCCheck</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determines whether error-detection is enabled for dataset reads.  <a href="#a16"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a17">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a18">DSetMemXferPropList</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: creates a stub dataset memory and transfer property list object.  <a href="#a18"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a19">DSetMemXferPropList</a> (const <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> &amp;orig)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> object.  <a href="#a19"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a20">DSetMemXferPropList</a> (const hid_t plist_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> object using the id of an existing <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a>.  <a href="#a20"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#a21">~DSetMemXferPropList</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a21"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html#s0">DEFAULT</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constant for default dataset memory and transfer property list.  <a href="#s0"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a18" doxytag="H5::DSetMemXferPropList::DSetMemXferPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DSetMemXferPropList::DSetMemXferPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: creates a stub dataset memory and transfer property list object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a19" doxytag="H5::DSetMemXferPropList::DSetMemXferPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DSetMemXferPropList::DSetMemXferPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>original</em>&nbsp;</td><td>- IN: Original dataset memory and transfer property list object to copy </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a20" doxytag="H5::DSetMemXferPropList::DSetMemXferPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DSetMemXferPropList::DSetMemXferPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>plist_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> object using the id of an existing <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a>. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>plist_id</em>&nbsp;</td><td>- IN: Id of an existing dataset memory and transfer property list </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a21" doxytag="H5::DSetMemXferPropList::~DSetMemXferPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DSetMemXferPropList::~DSetMemXferPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::DSetMemXferPropList::setBuffer"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetMemXferPropList::setBuffer           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>size</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>tconv</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>bkg</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets type conversion and background buffers. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>- IN: Size, in bytes, of the type conversion and background buffers </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>tconv</em>&nbsp;</td><td>- IN: Pointer to application-allocated type conversion buffer </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>bkg</em>&nbsp;</td><td>- IN: Pointer to application-allocated background buffer </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::DSetMemXferPropList::getBuffer"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">size_t H5::DSetMemXferPropList::getBuffer           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void **&nbsp;</td>
+          <td class="mdname" nowrap> <em>tconv</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void **&nbsp;</td>
+          <td class="mdname" nowrap> <em>bkg</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Reads buffer settings. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>tconv</em>&nbsp;</td><td>- IN: Pointer to application-allocated type conversion buffer </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>bkg</em>&nbsp;</td><td>- IN: Pointer to application-allocated background buffer </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Buffer size, in bytes </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::DSetMemXferPropList::setBtreeRatios"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetMemXferPropList::setBtreeRatios           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">double&nbsp;</td>
+          <td class="mdname" nowrap> <em>left</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>double&nbsp;</td>
+          <td class="mdname" nowrap> <em>middle</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>double&nbsp;</td>
+          <td class="mdname" nowrap> <em>right</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets B-tree split ratios for a dataset transfer property list. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>left</em>&nbsp;</td><td>- IN: B-tree split ratio for left-most nodes </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>middle</em>&nbsp;</td><td>- IN: B-tree split ratio for right-most nodes and lone nodes </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>right</em>&nbsp;</td><td>- IN: B-tree split ratio for all other nodes </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::DSetMemXferPropList::getBtreeRatios"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetMemXferPropList::getBtreeRatios           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">double &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>left</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>double &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>middle</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>double &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>right</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets B-tree split ratios for a dataset transfer property list. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>left</em>&nbsp;</td><td>- OUT: B-tree split ratio for left-most nodes </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>middle</em>&nbsp;</td><td>- OUT: B-tree split ratio for right-most nodes and lone nodes </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>right</em>&nbsp;</td><td>- OUT: B-tree split ratio for all other nodes </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::DSetMemXferPropList::setPreserve"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetMemXferPropList::setPreserve           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">bool&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>status</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the dataset transfer property list status to true or false. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>status</em>&nbsp;</td><td>- IN: Status to set, true or false </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::DSetMemXferPropList::getPreserve"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool H5::DSetMemXferPropList::getPreserve           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Checks status of the dataset transfer property list. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Status of the dataset transfer property list </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::DSetMemXferPropList::setVlenMemManager"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetMemXferPropList::setVlenMemManager           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5MM_allocate_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>alloc_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>alloc_info</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5MM_free_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>free_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>free_info</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the memory manager for variable-length datatype allocation. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>alloc_func</em>&nbsp;</td><td>- IN: User's allocate routine </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>alloc_info</em>&nbsp;</td><td>- IN: User's allocation parameters </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>free_func</em>&nbsp;</td><td>- IN: User's free routine </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>free_info</em>&nbsp;</td><td>- IN: User's free parameters </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::DSetMemXferPropList::setVlenMemManager"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetMemXferPropList::setVlenMemManager           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the memory manager for variable-length datatype allocation - system <code>malloc</code> and <code>free</code> will be used. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::DSetMemXferPropList::getVlenMemManager"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetMemXferPropList::getVlenMemManager           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5MM_allocate_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>alloc_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void **&nbsp;</td>
+          <td class="mdname" nowrap> <em>alloc_info</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5MM_free_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>free_func</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void **&nbsp;</td>
+          <td class="mdname" nowrap> <em>free_info</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the memory manager for variable-length datatype allocation. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>alloc_func</em>&nbsp;</td><td>- OUT: User's allocate routine </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>alloc_info</em>&nbsp;</td><td>- OUT: User's allocation parameters </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>free_func</em>&nbsp;</td><td>- OUT: User's free routine </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>free_info</em>&nbsp;</td><td>- OUT: User's free parameters </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::DSetMemXferPropList::setMulti"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetMemXferPropList::setMulti           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>memb_dxpl</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the data transfer property list for the multi-file driver. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>memb_dxpl</em>&nbsp;</td><td>- OUT: Array of data access property lists </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>This function can only be used after the member map has been set with FileAccPropList::setMulti (not done - BMR.) </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::DSetMemXferPropList::getMulti"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetMemXferPropList::getMulti           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hid_t *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>memb_dxpl</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns multi-file data transfer property list information. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>memb_dxpl</em>&nbsp;</td><td>- OUT: Array of data access property lists </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::DSetMemXferPropList::setSmallDataBlockSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetMemXferPropList::setSmallDataBlockSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>size</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the size of a contiguous block reserved for small data. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>- IN: Maximum size, in bytes, of the small data block. </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For detail, please refer to the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSmallData">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSmallData</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::DSetMemXferPropList::getSmallDataBlockSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hsize_t H5::DSetMemXferPropList::getSmallDataBlockSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the current small data block size setting. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Size of the small data block, in bytes </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::DSetMemXferPropList::setHyperVectorSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetMemXferPropList::setHyperVectorSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>vector_size</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets number of I/O vectors to be read/written in hyperslab I/O. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For information, please refer to the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetHyperVectorSize">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetHyperVectorSize</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a14" doxytag="H5::DSetMemXferPropList::getHyperVectorSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">size_t H5::DSetMemXferPropList::getHyperVectorSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the number of I/O vectors to be read/written in hyperslab I/O. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of I/O vectors </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a15" doxytag="H5::DSetMemXferPropList::setEDCCheck"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DSetMemXferPropList::setEDCCheck           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5Z_EDC_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>check</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Enables or disables error-detecting for a dataset reading process. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>check</em>&nbsp;</td><td>- IN: Specifies whether error detection is enabled or disabled </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The error detection algorithm used is the algorithm previously specified in the corresponding dataset creation property list. This function does not affect the use of error detection in the writing process. </dd></dl>
+<dl compact><dt><b></b></dt><dd>Valid values are as follows: <ul>
+<li><code>H5Z_ENABLE_EDC</code> (default) </li>
+<li><code>H5Z_DISABLE_EDC</code> </li>
+</ul>
+</dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a16" doxytag="H5::DSetMemXferPropList::getEDCCheck"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5Z_EDC_t H5::DSetMemXferPropList::getEDCCheck           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Determines whether error-detection is enabled for dataset reads. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><code>H5Z_ENABLE_EDC</code> or <code>H5Z_DISABLE_EDC</code> </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a17" doxytag="H5::DSetMemXferPropList::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::DSetMemXferPropList::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1PropList.html#a30">H5::PropList</a>.    </td>
+  </tr>
+</table>
+<hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="s0" doxytag="H5::DSetMemXferPropList::DEFAULT"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> <a class="el" href="classH5_1_1DSetMemXferPropList.html#s0">H5::DSetMemXferPropList::DEFAULT</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Constant for default dataset memory and transfer property list. 
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1PropList.html#s0">H5::PropList</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetMemXferPropList.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DSetMemXferPropList.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSet-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSet-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSet-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,397 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::DataSet Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a11">AbstractDs</a>(const AbstractDs &amp;original)</td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#b0">AbstractDs</a>()</td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#b1">AbstractDs</a>(const hid_t ds_id)</td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a22">close</a>()</td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a21">DataSet</a>(const hid_t existing_id)</td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a23">DataSet</a>()</td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a24">DataSet</a>(const DataSet &amp;original)</td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a0">extend</a>(const hsize_t *size) const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a1">fillMemBuf</a>(const void *fill, DataType &amp;fill_type, void *buf, DataType &amp;buf_type, DataSpace &amp;space)</td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a2">fillMemBuf</a>(void *buf, DataType &amp;buf_type, DataSpace &amp;space)</td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a20">fromClass</a>() const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a1">getArrayType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a2">getCompType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a3">getCreatePlist</a>() const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a0">getDataType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a3">getEnumType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a4">getFloatType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a5">getIntType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a15">getObjType</a>(void *ref, H5R_type_t ref_type) const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a4">getOffset</a>() const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a16">getRegion</a>(void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a5">getSpace</a>() const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a6">getSpaceStatus</a>(H5D_space_status_t &amp;status) const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a7">getStorageSize</a>() const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a6">getStrType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a9">getTypeClass</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a7">getVarLenType</a>() const </td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a8">getVlenBufSize</a>(DataType &amp;type, DataSpace &amp;space) const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a14">iterateElems</a>(void *buf, const DataType &amp;type, const DataSpace &amp;space, H5D_operator_t op, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a10">read</a>(void *buf, const DataType &amp;mem_type, const DataSpace &amp;mem_space=DataSpace::ALL, const DataSpace &amp;file_space=DataSpace::ALL, const DSetMemXferPropList &amp;xfer_plist=DSetMemXferPropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a11">read</a>(string &amp;buf, const DataType &amp;mem_type, const DataSpace &amp;mem_space=DataSpace::ALL, const DataSpace &amp;file_space=DataSpace::ALL, const DSetMemXferPropList &amp;xfer_plist=DSetMemXferPropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a17">Reference</a>(const char *name, DataSpace &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a18">Reference</a>(const char *name) const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a19">Reference</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a9">vlenReclaim</a>(DataType &amp;type, DataSpace &amp;space, DSetMemXferPropList &amp;xfer_plist, void *buf) const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a12">write</a>(const void *buf, const DataType &amp;mem_type, const DataSpace &amp;mem_space=DataSpace::ALL, const DataSpace &amp;file_space=DataSpace::ALL, const DSetMemXferPropList &amp;xfer_plist=DSetMemXferPropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a13">write</a>(const string &amp;buf, const DataType &amp;mem_type, const DataSpace &amp;mem_space=DataSpace::ALL, const DataSpace &amp;file_space=DataSpace::ALL, const DSetMemXferPropList &amp;xfer_plist=DSetMemXferPropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AbstractDs.html#a12">~AbstractDs</a>()</td><td><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSet.html#a25">~DataSet</a>()</td><td><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSet.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSet.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSet.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1637 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1DataSet.html">DataSet</a></div>
+<h1>H5::DataSet Class Reference</h1><code>#include &lt;<a class="el" href="H5DataSet_8h-source.html">H5DataSet.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::DataSet:
+<p><center><img src="classH5_1_1DataSet.png" usemap="#H5::DataSet_map" border="0" alt=""></center>
+<map name="H5::DataSet_map">
+<area href="classH5_1_1AbstractDs.html" alt="H5::AbstractDs" shape="rect" coords="0,112,107,136">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="0,56,107,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,107,24">
+</map>
+<a href="classH5_1_1DataSet-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a0">extend</a> (const hsize_t *size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Extends a dataset with unlimited dimension.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a1">fillMemBuf</a> (const void *fill, <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;fill_type, void *buf, <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;buf_type, <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;space)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Fills a selection in memory with a value.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a2">fillMemBuf</a> (void *buf, <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;buf_type, <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;space)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it only takes the the last three arguments.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a3">getCreatePlist</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the dataset creation property list.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">haddr_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a4">getOffset</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the address of this dataset in the file.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a5">getSpace</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets a copy of the dataspace of this dataset.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a6">getSpaceStatus</a> (H5D_space_status_t &amp;status) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determines whether space has been allocated for a dataset.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual hsize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a7">getStorageSize</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the amount of storage required for a dataset.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">hsize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a8">getVlenBufSize</a> (<a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;type, <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;space) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of bytes required to store VL data.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a9">vlenReclaim</a> (<a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;type, <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;space, <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> &amp;xfer_plist, void *buf) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reclaims VL datatype memory buffers.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a10">read</a> (void *buf, const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;mem_type, const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;mem_space=<a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;file_space=<a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, const <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> &amp;xfer_plist=<a class="el" href="classH5_1_1DSetMemXferPropList.html#s0">DSetMemXferPropList::DEFAULT</a>) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reads raw data from the specified dataset.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a11">read</a> (string &amp;buf, const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;mem_type, const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;mem_space=<a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;file_space=<a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, const <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> &amp;xfer_plist=<a class="el" href="classH5_1_1DSetMemXferPropList.html#s0">DSetMemXferPropList::DEFAULT</a>) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It takes a reference to a <code>std::string</code> for the buffer.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a12">write</a> (const void *buf, const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;mem_type, const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;mem_space=<a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;file_space=<a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, const <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> &amp;xfer_plist=<a class="el" href="classH5_1_1DSetMemXferPropList.html#s0">DSetMemXferPropList::DEFAULT</a>) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Writes raw data from an application buffer to a dataset.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a13">write</a> (const string &amp;buf, const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;mem_type, const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;mem_space=<a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;file_space=<a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a>, const <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> &amp;xfer_plist=<a class="el" href="classH5_1_1DSetMemXferPropList.html#s0">DSetMemXferPropList::DEFAULT</a>) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It takes a reference to a <code>std::string</code> for the buffer.  <a href="#a13"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a14">iterateElems</a> (void *buf, const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;type, const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;space, H5D_operator_t op, void *op_data=NULL)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Iterates over all selected elements in a dataspace.  <a href="#a14"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5G_obj_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a15">getObjType</a> (void *ref, H5R_type_t ref_type) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the type of object that an object reference points to.  <a href="#a15"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a16">getRegion</a> (void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves a dataspace with the region pointed to selected.  <a href="#a16"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a17">Reference</a> (const char *name, <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a reference to an HDF5 object or a dataset region.  <a href="#a17"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a18">Reference</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded function, provided for your convenience. It differs from the above function in that it only creates a reference to an HDF5 object, not to a dataset region.  <a href="#a18"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a19">Reference</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded function, provided for your convenience. It differs from the above function in that it takes an <code>std::string</code> for the object's name.  <a href="#a19"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a20">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a21">DataSet</a> (const hid_t existing_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an <a class="el" href="classH5_1_1DataSet.html">DataSet</a> object using the id of an existing dataset.  <a href="#a21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a22">close</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Closes this dataset.  <a href="#a22"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a23">DataSet</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: creates a stub <a class="el" href="classH5_1_1DataSet.html">DataSet</a>.  <a href="#a23"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a24">DataSet</a> (const <a class="el" href="classH5_1_1DataSet.html">DataSet</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1DataSet.html">DataSet</a> object.  <a href="#a24"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html#a25">~DataSet</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Properly terminates access to this dataset.  <a href="#a25"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a21" doxytag="H5::DataSet::DataSet"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSet::DataSet           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>existing_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an <a class="el" href="classH5_1_1DataSet.html">DataSet</a> object using the id of an existing dataset. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>existing_id</em>&nbsp;</td><td>- IN: Id of an existing dataset </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a23" doxytag="H5::DataSet::DataSet"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSet::DataSet           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: creates a stub <a class="el" href="classH5_1_1DataSet.html">DataSet</a>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a24" doxytag="H5::DataSet::DataSet"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSet::DataSet           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataSet.html">DataSet</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1DataSet.html">DataSet</a> object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>original</em>&nbsp;</td><td>- IN: <a class="el" href="classH5_1_1DataSet.html">DataSet</a> instance to copy </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a25" doxytag="H5::DataSet::~DataSet"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSet::~DataSet           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Properly terminates access to this dataset. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::DataSet::extend"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSet::extend           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hsize_t *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>size</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Extends a dataset with unlimited dimension. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>- IN: Array containing the new magnitude of each dimension </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For more information, please see the Description section in C layer Reference Manual at: http: </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::DataSet::fillMemBuf"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSet::fillMemBuf           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>fill</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>fill_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>space</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Fills a selection in memory with a value. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>fill</em>&nbsp;</td><td>- IN: Pointer to fill value to use - default NULL </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>fill_type</em>&nbsp;</td><td>- IN: Datatype of the fill value </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>buf</em>&nbsp;</td><td>- IN/OUT: Memory buffer to fill selection within </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>buf_type</em>&nbsp;</td><td>- IN: Datatype of the elements in buffer </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>space</em>&nbsp;</td><td>- IN: Dataspace describing memory buffer &amp; containing selection to use </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::DataSet::fillMemBuf"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSet::fillMemBuf           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>space</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it only takes the the last three arguments. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>buf</em>&nbsp;</td><td>- IN/OUT: Memory buffer to fill selection within </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>buf_type</em>&nbsp;</td><td>- IN: Datatype of the elements in buffer </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>space</em>&nbsp;</td><td>- IN: Dataspace describing memory buffer &amp; containing selection to use </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::DataSet::getCreatePlist"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a> H5::DataSet::getCreatePlist           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the dataset creation property list. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::DataSet::getOffset"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">haddr_t H5::DataSet::getOffset           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the address of this dataset in the file. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Address of dataset </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::DataSet::getSpace"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> H5::DataSet::getSpace           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets a copy of the dataspace of this dataset. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+
+<p>
+Implements <a class="el" href="classH5_1_1AbstractDs.html#a8">H5::AbstractDs</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::DataSet::getSpaceStatus"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSet::getSpaceStatus           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5D_space_status_t &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>status</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Determines whether space has been allocated for a dataset. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>status</em>&nbsp;</td><td>- OUT: Space allocation status </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::DataSet::getStorageSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hsize_t H5::DataSet::getStorageSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the amount of storage required for a dataset. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Size of the storage or 0, for no data </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+
+<p>
+Implements <a class="el" href="classH5_1_1AbstractDs.html#a10">H5::AbstractDs</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::DataSet::getVlenBufSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hsize_t H5::DataSet::getVlenBufSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>space</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the number of bytes required to store VL data. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Amount of storage </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::DataSet::vlenReclaim"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSet::vlenReclaim           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>space</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>xfer_plist</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Reclaims VL datatype memory buffers. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>type</em>&nbsp;</td><td>- IN: Datatype, which is the datatype stored in the buffer </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>space</em>&nbsp;</td><td>- IN: Selection for the memory buffer to free the VL datatypes within </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>xfer_plist</em>&nbsp;</td><td>- IN: Property list used to create the buffer </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>buf</em>&nbsp;</td><td>- IN: Pointer to the buffer to be reclaimed </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::DataSet::read"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSet::read           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>mem_space</em> = <code><a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a></code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>file_space</em> = <code><a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a></code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>xfer_plist</em> = <code><a class="el" href="classH5_1_1DSetMemXferPropList.html#s0">DSetMemXferPropList::DEFAULT</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Reads raw data from the specified dataset. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>buf</em>&nbsp;</td><td>- IN: Buffer for read data </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>mem_type</em>&nbsp;</td><td>- IN: Memory datatype </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>mem_space</em>&nbsp;</td><td>- IN: Memory dataspace </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>file_space</em>&nbsp;</td><td>- IN: Dataset's dataspace in the file </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>xfer_plist</em>&nbsp;</td><td>- IN: Transfer property list for this I/O operation </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>This function reads raw data from this dataset into the buffer <em>buf</em>, converting from file datatype and dataspace to memory datatype <em>mem_type</em> and dataspace <em>mem_space</em>. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::DataSet::read"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSet::read           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>mem_space</em> = <code><a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a></code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>file_space</em> = <code><a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a></code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>xfer_plist</em> = <code><a class="el" href="classH5_1_1DSetMemXferPropList.html#s0">DSetMemXferPropList::DEFAULT</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It takes a reference to a <code>std::string</code> for the buffer. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::DataSet::write"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSet::write           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>mem_space</em> = <code><a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a></code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>file_space</em> = <code><a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a></code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>xfer_plist</em> = <code><a class="el" href="classH5_1_1DSetMemXferPropList.html#s0">DSetMemXferPropList::DEFAULT</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Writes raw data from an application buffer to a dataset. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>buf</em>&nbsp;</td><td>- IN: Buffer containing data to be written </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>mem_type</em>&nbsp;</td><td>- IN: Memory datatype </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>mem_space</em>&nbsp;</td><td>- IN: Memory dataspace </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>file_space</em>&nbsp;</td><td>- IN: Dataset's dataspace in the file </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>xfer_plist</em>&nbsp;</td><td>- IN: Transfer property list for this I/O operation </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>This function writes raw data from an application buffer <em>buf</em> to a dataset, converting from memory datatype <em>mem_type</em> and dataspace <em>mem_space</em> to file datatype and dataspace. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::DataSet::write"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSet::write           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>mem_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>mem_space</em> = <code><a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a></code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>file_space</em> = <code><a class="el" href="classH5_1_1DataSpace.html#s0">DataSpace::ALL</a></code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>xfer_plist</em> = <code><a class="el" href="classH5_1_1DSetMemXferPropList.html#s0">DSetMemXferPropList::DEFAULT</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It takes a reference to a <code>std::string</code> for the buffer. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a14" doxytag="H5::DataSet::iterateElems"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::DataSet::iterateElems           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>space</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5D_operator_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>op</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>op_data</em> = <code>NULL</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Iterates over all selected elements in a dataspace. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>buf</em>&nbsp;</td><td>- IN/OUT: Pointer to the buffer in memory containing the elements to iterate over </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>type</em>&nbsp;</td><td>- IN: Datatype for the elements stored in <em>buf</em> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>space</em>&nbsp;</td><td>- IN: Dataspace for <em>buf</em>. Also contains the selection to iterate over. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>op</em>&nbsp;</td><td>- IN: Function pointer to the routine to be called for each element in <em>buf</em> iterated over </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>op_data</em>&nbsp;</td><td>- IN/OUT: Pointer to any user-defined data associated with the operation </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Note:</b></dt><dd>This function may not work correctly yet - it's still under development. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a15" doxytag="H5::DataSet::getObjType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5G_obj_t H5::DataSet::getObjType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5R_type_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref_type</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the type of object that an object reference points to. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>ref_type</em>&nbsp;</td><td>- IN: Type of reference to query </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>ref</em>&nbsp;</td><td>- IN: Reference to query </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a16" doxytag="H5::DataSet::getRegion"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> H5::DataSet::getRegion           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5R_type_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref_type</em> = <code>H5R_DATASET_REGION</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves a dataspace with the region pointed to selected. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>ref_type</em>&nbsp;</td><td>- IN: Type of reference to get region of - default to H5R_DATASET_REGION </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>ref</em>&nbsp;</td><td>- IN: Reference to get region of </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a17" doxytag="H5::DataSet::Reference"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void * H5::DataSet::Reference           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dataspace</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5R_type_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref_type</em> = <code>H5R_DATASET_REGION</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a reference to an HDF5 object or a dataset region. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object to be referenced </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dataspace</em>&nbsp;</td><td>- IN: Dataspace with selection </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>ref_type</em>&nbsp;</td><td>- IN: Type of reference; default to <code>H5R_DATASET_REGION</code> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>A reference </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a18" doxytag="H5::DataSet::Reference"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void * H5::DataSet::Reference           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded function, provided for your convenience. It differs from the above function in that it only creates a reference to an HDF5 object, not to a dataset region. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object to be referenced - <code>char</code> pointer </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>A reference </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd></dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a19" doxytag="H5::DataSet::Reference"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void * H5::DataSet::Reference           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded function, provided for your convenience. It differs from the above function in that it takes an <code>std::string</code> for the object's name. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object to be referenced - <code>std::string</code> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a20" doxytag="H5::DataSet::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::DataSet::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1IdComponent.html#a12">H5::IdComponent</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a22" doxytag="H5::DataSet::close"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSet::close           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Closes this dataset. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSet.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSet.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSetIException-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSetIException-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSetIException-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::DataSetIException Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e3">clearErrorStack</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSetIException.html#a0">DataSetIException</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSetIException.html#a1">DataSetIException</a>()</td><td><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e1">dontPrint</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a0">Exception</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a8">Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a9">Exception</a>(const Exception &amp;orig)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e2">getAutoPrint</a>(H5E_auto_t &amp;func, void **client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a4">getCDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a6">getCFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a3">getDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a5">getFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a1">getMajorString</a>(H5E_major_t major_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a2">getMinorString</a>(H5E_minor_t minor_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a7">printError</a>(FILE *stream=NULL) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e0">setAutoPrint</a>(H5E_auto_t &amp;func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e4">walkErrorStack</a>(H5E_direction_t direction, H5E_walk_t func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSetIException.html#a2">~DataSetIException</a>()</td><td><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a10">~Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSetIException.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSetIException.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSetIException.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,455 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1DataSetIException.html">DataSetIException</a></div>
+<h1>H5::DataSetIException Class Reference</h1><code>#include &lt;<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::DataSetIException:
+<p><center><img src="classH5_1_1DataSetIException.png" usemap="#H5::DataSetIException_map" border="0" alt=""></center>
+<map name="H5::DataSetIException_map">
+<area href="classH5_1_1Exception.html" alt="H5::Exception" shape="rect" coords="0,0,136,24">
+</map>
+<a href="classH5_1_1DataSetIException-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSetIException.html#a0">DataSetIException</a> (const string func_name, const string message=<a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a <a class="el" href="classH5_1_1DataSetIException.html">DataSetIException</a> with the name of the function, in which the failure occurs, and an optional detailed message.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSetIException.html#a1">DataSetIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSetIException.html#a2">~DataSetIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a2"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::DataSetIException::DataSetIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSetIException::DataSetIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>func_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>message</em> = <code><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a <a class="el" href="classH5_1_1DataSetIException.html">DataSetIException</a> with the name of the function, in which the failure occurs, and an optional detailed message. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func_name</em>&nbsp;</td><td>- IN: Name of the function where failure occurs </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>message</em>&nbsp;</td><td>- IN: Message on the failure </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::DataSetIException::DataSetIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSetIException::DataSetIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::DataSetIException::~DataSetIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSetIException::~DataSetIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSetIException.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSetIException.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpace-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpace-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpace-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,373 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::DataSpace Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#s0">ALL</a></td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a27">close</a>()</td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a3">copy</a>(const DataSpace &amp;like_space)</td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a0">DataSpace</a>(H5S_class_t type=H5S_SCALAR)</td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a1">DataSpace</a>(int rank, const hsize_t *dims, const hsize_t *maxdims=NULL)</td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a25">DataSpace</a>(const hid_t space_id)</td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a26">DataSpace</a>(const DataSpace &amp;original)</td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a4">extentCopy</a>(DataSpace &amp;dest_space) const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a24">fromClass</a>() const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a5">getSelectBounds</a>(hsize_t *start, hsize_t *end) const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a6">getSelectElemNpoints</a>() const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a7">getSelectElemPointlist</a>(hsize_t startpoint, hsize_t numpoints, hsize_t *buf) const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a8">getSelectHyperBlocklist</a>(hsize_t startblock, hsize_t numblocks, hsize_t *buf) const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a9">getSelectHyperNblocks</a>() const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a10">getSelectNpoints</a>() const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a11">getSimpleExtentDims</a>(hsize_t *dims, hsize_t *maxdims=NULL) const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a12">getSimpleExtentNdims</a>() const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a13">getSimpleExtentNpoints</a>() const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a14">getSimpleExtentType</a>() const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a15">isSimple</a>() const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a16">offsetSimple</a>(const hssize_t *offset) const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a2">operator=</a>(const DataSpace &amp;rhs)</td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::IdComponent::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a17">selectAll</a>() const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a18">selectElements</a>(H5S_seloper_t op, const size_t num_elements, const hsize_t *coord[]) const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a19">selectHyperslab</a>(H5S_seloper_t op, const hsize_t *count, const hsize_t *start, const hsize_t *stride=NULL, const hsize_t *block=NULL) const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a20">selectNone</a>() const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a21">selectValid</a>() const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a22">setExtentNone</a>() const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a23">setExtentSimple</a>(int rank, const hsize_t *current_size, const hsize_t *maximum_size=NULL) const </td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpace.html#a28">~DataSpace</a>()</td><td><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpace.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpace.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpace.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1672 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1DataSpace.html">DataSpace</a></div>
+<h1>H5::DataSpace Class Reference</h1><code>#include &lt;<a class="el" href="H5DataSpace_8h-source.html">H5DataSpace.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::DataSpace:
+<p><center><img src="classH5_1_1DataSpace.png" usemap="#H5::DataSpace_map" border="0" alt=""></center>
+<map name="H5::DataSpace_map">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,107,24">
+</map>
+<a href="classH5_1_1DataSpace-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a0">DataSpace</a> (H5S_class_t type=H5S_SCALAR)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a new dataspace given a dataspace type.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a1">DataSpace</a> (int rank, const hsize_t *dims, const hsize_t *maxdims=NULL)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a new simple dataspace.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a2">operator=</a> (const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;rhs)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Assignment operator.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a3">copy</a> (const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;like_space)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Makes a copy of an existing dataspace.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a4">extentCopy</a> (<a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;dest_space) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copies the extent of a dataspace.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a5">getSelectBounds</a> (hsize_t *start, hsize_t *end) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the bounding box containing the current selection.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">hssize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a6">getSelectElemNpoints</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of element points in the current selection.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a7">getSelectElemPointlist</a> (hsize_t startpoint, hsize_t numpoints, hsize_t *buf) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the list of element points currently selected.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a8">getSelectHyperBlocklist</a> (hsize_t startblock, hsize_t numblocks, hsize_t *buf) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the list of hyperslab blocks currently selected.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">hssize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a9">getSelectHyperNblocks</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns number of hyperslab blocks.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">hssize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a10">getSelectNpoints</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of elements in a dataspace selection.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a11">getSimpleExtentDims</a> (hsize_t *dims, hsize_t *maxdims=NULL) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves dataspace dimension size and maximum size.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a12">getSimpleExtentNdims</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the dimensionality of a dataspace.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">hssize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a13">getSimpleExtentNpoints</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of elements in a dataspace.  <a href="#a13"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5S_class_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a14">getSimpleExtentType</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the current class of a dataspace.  <a href="#a14"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a15">isSimple</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determines whether this dataspace is a simple dataspace.  <a href="#a15"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a16">offsetSimple</a> (const hssize_t *offset) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the offset of this simple dataspace.  <a href="#a16"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a17">selectAll</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Selects the entire dataspace.  <a href="#a17"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a18">selectElements</a> (H5S_seloper_t op, const size_t num_elements, const hsize_t *coord[]) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Selects array elements to be included in the selection for this dataspace.  <a href="#a18"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a19">selectHyperslab</a> (H5S_seloper_t op, const hsize_t *count, const hsize_t *start, const hsize_t *stride=NULL, const hsize_t *block=NULL) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Selects a hyperslab region to add to the current selected region.  <a href="#a19"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a20">selectNone</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Resets the selection region to include no elements.  <a href="#a20"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a21">selectValid</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Verifies that the selection is within the extent of the dataspace.  <a href="#a21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a22">setExtentNone</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Removes the extent from a dataspace.  <a href="#a22"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a23">setExtentSimple</a> (int rank, const hsize_t *current_size, const hsize_t *maximum_size=NULL) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets or resets the size of an existing dataspace.  <a href="#a23"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a24">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a25">DataSpace</a> (const hid_t space_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> object using the id of an existing dataspace.  <a href="#a25"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a26">DataSpace</a> (const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> object.  <a href="#a26"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a27">close</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Closes this dataspace.  <a href="#a27"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#a28">~DataSpace</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Properly terminates access to this dataspace.  <a href="#a28"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html#s0">ALL</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constant for default dataspace.  <a href="#s0"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::DataSpace::DataSpace"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSpace::DataSpace           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5S_class_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>type</em> = <code>H5S_SCALAR</code>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a new dataspace given a dataspace type. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>type</em>&nbsp;</td><td>- IN: Type of the dataspace to be created, which currently can be either <code>H5S_SCALAR</code> or <code>H5S_SIMPLE</code>; default to <code>H5S_SCALAR</code>. </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::DataSpace::DataSpace"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSpace::DataSpace           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>rank</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>dims</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>maxdims</em> = <code>NULL</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a new simple dataspace. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>rank</em>&nbsp;</td><td>- IN: Number of dimensions of dataspace. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dims</em>&nbsp;</td><td>- IN: An array of the size of each dimension. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>maxdims</em>&nbsp;</td><td>- IN: An array of the maximum size of each dimension. </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a25" doxytag="H5::DataSpace::DataSpace"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSpace::DataSpace           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>existing_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> object using the id of an existing dataspace. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>existing_id</em>&nbsp;</td><td>- IN: Id of an existing dataspace </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a26" doxytag="H5::DataSpace::DataSpace"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSpace::DataSpace           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>original</em>&nbsp;</td><td>- IN: <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> object to copy </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a28" doxytag="H5::DataSpace::~DataSpace"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSpace::~DataSpace           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Properly terminates access to this dataspace. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a2" doxytag="H5::DataSpace::operator="></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp; H5::DataSpace::operator=           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>rhs</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Assignment operator. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>rhs</em>&nbsp;</td><td>- IN: Reference to the existing dataspace </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Reference to <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::DataSpace::copy"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSpace::copy           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>like_space</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Makes a copy of an existing dataspace. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>like_space</em>&nbsp;</td><td>- IN: Dataspace to be copied </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::DataSpace::extentCopy"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSpace::extentCopy           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>dest_space</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copies the extent of a dataspace. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dest_space</em>&nbsp;</td><td>- IN: Dataspace to copy from </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::DataSpace::getSelectBounds"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSpace::getSelectBounds           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>start</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>end</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the bounding box containing the current selection. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>start</em>&nbsp;</td><td>- IN: Starting coordinates of the bounding box </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>end</em>&nbsp;</td><td>- IN: Ending coordinates of the bounding box, i.e., the coordinates of the diagonally opposite corner </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For more information, please refer to the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5S.html#Dataspace-SelectBounds">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5S.html#Dataspace-SelectBounds</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::DataSpace::getSelectElemNpoints"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hssize_t H5::DataSpace::getSelectElemNpoints           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the number of element points in the current selection. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of element points </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::DataSpace::getSelectElemPointlist"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSpace::getSelectElemPointlist           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>startpoint</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hsize_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>numpoints</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the list of element points currently selected. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>startpoint</em>&nbsp;</td><td>- IN: Element point to start with </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>numpoints</em>&nbsp;</td><td>- IN: Number of element points to get </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>buf</em>&nbsp;</td><td>- IN: List of element points selected </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For more information, please refer to the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5S.html#Dataspace-SelectElemPointList">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5S.html#Dataspace-SelectElemPointList</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::DataSpace::getSelectHyperBlocklist"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSpace::getSelectHyperBlocklist           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>startblock</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hsize_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>numblocks</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the list of hyperslab blocks currently selected. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>startblock</em>&nbsp;</td><td>- IN: Hyperslab block to start with </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>numblocks</em>&nbsp;</td><td>- IN: Number of hyperslab blocks to get </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>buf</em>&nbsp;</td><td>- IN: List of hyperslab blocks selected </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::DataSpace::getSelectHyperNblocks"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hssize_t H5::DataSpace::getSelectHyperNblocks           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns number of hyperslab blocks. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of hyperslab blocks </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::DataSpace::getSelectNpoints"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hssize_t H5::DataSpace::getSelectNpoints           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the number of elements in a dataspace selection. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of elements </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::DataSpace::getSimpleExtentDims"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::DataSpace::getSimpleExtentDims           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>dims</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>maxdims</em> = <code>NULL</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves dataspace dimension size and maximum size. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dims</em>&nbsp;</td><td>- IN: Name of the new member </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>maxdims</em>&nbsp;</td><td>- IN: Pointer to the value of the new member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of dimensions, the same value as returned by <code><a class="el" href="classH5_1_1DataSpace.html#a12">DataSpace::getSimpleExtentNdims()</a></code> </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::DataSpace::getSimpleExtentNdims"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::DataSpace::getSimpleExtentNdims           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the dimensionality of a dataspace. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of dimensions </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::DataSpace::getSimpleExtentNpoints"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hssize_t H5::DataSpace::getSimpleExtentNpoints           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the number of elements in a dataspace. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of elements </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a14" doxytag="H5::DataSpace::getSimpleExtentType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5S_class_t H5::DataSpace::getSimpleExtentType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the current class of a dataspace. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Class of the dataspace </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a15" doxytag="H5::DataSpace::isSimple"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool H5::DataSpace::isSimple           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Determines whether this dataspace is a simple dataspace. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><code>true</code> if the dataspace is a simple dataspace, and <code>false</code>, otherwise </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a16" doxytag="H5::DataSpace::offsetSimple"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSpace::offsetSimple           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hssize_t *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>offset</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the offset of this simple dataspace. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>offset</em>&nbsp;</td><td>- IN: Offset to position the selection at </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>This function creates an offset for the selection within an extent, allowing the same shaped selection to be moved to different locations within a dataspace without requiring it to be re-defined. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a17" doxytag="H5::DataSpace::selectAll"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSpace::selectAll           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Selects the entire dataspace. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a18" doxytag="H5::DataSpace::selectElements"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSpace::selectElements           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5S_seloper_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>op</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>num_elements</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>coord</em>[]</td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Selects array elements to be included in the selection for this dataspace. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>op</em>&nbsp;</td><td>- IN: Operator specifying how the new selection is to be combined with the existing selection for the dataspace </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>num_elements</em>&nbsp;</td><td>- IN: Number of elements to be selected </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>coord</em>&nbsp;</td><td>- IN: A 2-dimensional array of 0-based values specifying the coordinates of the elements being selected </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For more information, please refer to the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5S.html#Dataspace-SelectElements">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5S.html#Dataspace-SelectElements</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a19" doxytag="H5::DataSpace::selectHyperslab"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSpace::selectHyperslab           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5S_seloper_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>op</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>count</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>start</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>stride</em> = <code>NULL</code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>block</em> = <code>NULL</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Selects a hyperslab region to add to the current selected region. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>op</em>&nbsp;</td><td>- IN: Operation to perform on current selection </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>count</em>&nbsp;</td><td>- IN: Number of blocks included in the hyperslab </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>start</em>&nbsp;</td><td>- IN: Offset of the start of hyperslab </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>stride</em>&nbsp;</td><td>- IN: Hyperslab stride - default to <code>NULL</code> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>block</em>&nbsp;</td><td>- IN: Size of block in the hyperslab - default to <code>NULL</code> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For more information, please refer to the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5S.html#Dataspace-SelectHyperslab">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5S.html#Dataspace-SelectHyperslab</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a20" doxytag="H5::DataSpace::selectNone"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSpace::selectNone           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Resets the selection region to include no elements. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a21" doxytag="H5::DataSpace::selectValid"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool H5::DataSpace::selectValid           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Verifies that the selection is within the extent of the dataspace. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><code>true</code> if the selection is within the extent of the dataspace, and <code>false</code>, otherwise </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a22" doxytag="H5::DataSpace::setExtentNone"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSpace::setExtentNone           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Removes the extent from a dataspace. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a23" doxytag="H5::DataSpace::setExtentSimple"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSpace::setExtentSimple           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>rank</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>current_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const hsize_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>maximum_size</em> = <code>NULL</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets or resets the size of an existing dataspace. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>rank</em>&nbsp;</td><td>- IN: Rank of the dataspace </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>current_size</em>&nbsp;</td><td>- IN: Array containing current size of dataspace </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>maximum_size</em>&nbsp;</td><td>- IN: Array containing maximum size of dataspace </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a24" doxytag="H5::DataSpace::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::DataSpace::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1IdComponent.html#a12">H5::IdComponent</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a27" doxytag="H5::DataSpace::close"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataSpace::close           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Closes this dataspace. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="s0" doxytag="H5::DataSpace::ALL"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> <a class="el" href="classH5_1_1DataSpace.html#s0">H5::DataSpace::ALL</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Constant for default dataspace. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpace.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpace.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpaceIException-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpaceIException-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpaceIException-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::DataSpaceIException Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e3">clearErrorStack</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpaceIException.html#a0">DataSpaceIException</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpaceIException.html#a1">DataSpaceIException</a>()</td><td><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e1">dontPrint</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a0">Exception</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a8">Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a9">Exception</a>(const Exception &amp;orig)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e2">getAutoPrint</a>(H5E_auto_t &amp;func, void **client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a4">getCDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a6">getCFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a3">getDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a5">getFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a1">getMajorString</a>(H5E_major_t major_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a2">getMinorString</a>(H5E_minor_t minor_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a7">printError</a>(FILE *stream=NULL) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e0">setAutoPrint</a>(H5E_auto_t &amp;func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e4">walkErrorStack</a>(H5E_direction_t direction, H5E_walk_t func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataSpaceIException.html#a2">~DataSpaceIException</a>()</td><td><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a10">~Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpaceIException.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpaceIException.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpaceIException.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,455 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1DataSpaceIException.html">DataSpaceIException</a></div>
+<h1>H5::DataSpaceIException Class Reference</h1><code>#include &lt;<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::DataSpaceIException:
+<p><center><img src="classH5_1_1DataSpaceIException.png" usemap="#H5::DataSpaceIException_map" border="0" alt=""></center>
+<map name="H5::DataSpaceIException_map">
+<area href="classH5_1_1Exception.html" alt="H5::Exception" shape="rect" coords="0,0,154,24">
+</map>
+<a href="classH5_1_1DataSpaceIException-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpaceIException.html#a0">DataSpaceIException</a> (const string func_name, const string message=<a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a <a class="el" href="classH5_1_1DataSpaceIException.html">DataSpaceIException</a> with the name of the function, in which the failure occurs, and an optional detailed message.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpaceIException.html#a1">DataSpaceIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpaceIException.html#a2">~DataSpaceIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a2"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::DataSpaceIException::DataSpaceIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSpaceIException::DataSpaceIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>func_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>message</em> = <code><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a <a class="el" href="classH5_1_1DataSpaceIException.html">DataSpaceIException</a> with the name of the function, in which the failure occurs, and an optional detailed message. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func_name</em>&nbsp;</td><td>- IN: Name of the function where failure occurs </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>message</em>&nbsp;</td><td>- IN: Message on the failure </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::DataSpaceIException::DataSpaceIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSpaceIException::DataSpaceIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::DataSpaceIException::~DataSpaceIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataSpaceIException::~DataSpaceIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpaceIException.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataSpaceIException.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataType-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataType-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataType-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,394 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::DataType Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1DataType.html">H5::DataType</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a2">close</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a5">commit</a>(CommonFG &amp;loc, const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a6">commit</a>(CommonFG &amp;loc, const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a7">committed</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a9">convert</a>(const DataType &amp;dest, size_t nelmts, void *buf, void *background, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a3">copy</a>(const DataType &amp;like_type)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a0">DataType</a>(const H5T_class_t type_class, size_t size)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a1">DataType</a>(const DataType &amp;original)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a32">DataType</a>(const hid_t type_id, bool predtype=false)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a33">DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a24">detectClass</a>(H5T_class_t cls) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a8">find</a>(const DataType &amp;dest, H5T_cdata_t **pcdata) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a31">fromClass</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a4">getClass</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a29">getObjType</a>(void *ref, H5R_type_t ref_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a13">getOverflow</a>(void) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a30">getRegion</a>(void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a15">getSize</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a16">getSuper</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a23">getTag</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#p0">is_predtype</a></td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a25">isVariableStr</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a12">lock</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a10">operator=</a>(const DataType &amp;rhs)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::H5Object::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a11">operator==</a>(const DataType &amp;compared_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a26">Reference</a>(const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a27">Reference</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a28">Reference</a>(const char *name, DataSpace &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a17">registerFunc</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a18">registerFunc</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a14">setOverflow</a>(H5T_overflow_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a21">setTag</a>(const char *tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a22">setTag</a>(const string &amp;tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a19">unregister</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a20">unregister</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a34">~DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataType.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataType.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataType.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1978 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1DataType.html">DataType</a></div>
+<h1>H5::DataType Class Reference</h1><code>#include &lt;<a class="el" href="H5DataType_8h-source.html">H5DataType.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::DataType:
+<p><center><img src="classH5_1_1DataType.png" usemap="#H5::DataType_map" border="0" alt=""></center>
+<map name="H5::DataType_map">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="292,56,399,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="292,0,399,24">
+<area href="classH5_1_1ArrayType.html" alt="H5::ArrayType" shape="rect" coords="0,168,107,192">
+<area href="classH5_1_1AtomType.html" alt="H5::AtomType" shape="rect" coords="175,168,282,192">
+<area href="classH5_1_1CompType.html" alt="H5::CompType" shape="rect" coords="292,168,399,192">
+<area href="classH5_1_1EnumType.html" alt="H5::EnumType" shape="rect" coords="409,168,516,192">
+<area href="classH5_1_1VarLenType.html" alt="H5::VarLenType" shape="rect" coords="526,168,633,192">
+<area href="classH5_1_1FloatType.html" alt="H5::FloatType" shape="rect" coords="0,224,107,248">
+<area href="classH5_1_1IntType.html" alt="H5::IntType" shape="rect" coords="117,224,224,248">
+<area href="classH5_1_1PredType.html" alt="H5::PredType" shape="rect" coords="234,224,341,248">
+<area href="classH5_1_1StrType.html" alt="H5::StrType" shape="rect" coords="351,224,458,248">
+</map>
+<a href="classH5_1_1DataType-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a0">DataType</a> (const H5T_class_t type_class, size_t size)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a object given its class and size.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a1">DataType</a> (const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1DataType.html">DataType</a> object.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a2">close</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Closes the datatype if it is not a predefined type.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a3">copy</a> (const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;like_type)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copies an existing datatype to this datatype object.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5T_class_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a4">getClass</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the datatype class identifier.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a5">commit</a> (<a class="el" href="classH5_1_1CommonFG.html">CommonFG</a> &amp;loc, const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Commits a transient datatype to a file, creating a new named datatype.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a6">commit</a> (<a class="el" href="classH5_1_1CommonFG.html">CommonFG</a> &amp;loc, const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in the type of the argument <em>name</em>.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a7">committed</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determines whether a datatype is a named type or a transient type.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5T_conv_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a8">find</a> (const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;dest, H5T_cdata_t **pcdata) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Finds a conversion function that can handle a conversion from this datatype to the specified datatype, <em>dest</em>.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a9">convert</a> (const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;dest, size_t nelmts, void *buf, void *background, <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;plist) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Converts data from this datatype to the specified datatypes.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a10">operator=</a> (const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;rhs)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Assignment operator.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a11">operator==</a> (const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;compared_type) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compares this <a class="el" href="classH5_1_1DataType.html">DataType</a> against the given one to determines whether the two objects refer to the same actual datatype.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a12">lock</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Locks a datatype, making it read-only and non-destructible.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5T_overflow_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a13">getOverflow</a> (void) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns a pointer to the current global overflow function.  <a href="#a13"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a14">setOverflow</a> (H5T_overflow_t func) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the overflow handler to a specified function.  <a href="#a14"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a15">getSize</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the size of a datatype.  <a href="#a15"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataType.html">DataType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a16">getSuper</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the base datatype from which a datatype is derived.  <a href="#a16"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a17">registerFunc</a> (H5T_pers_t pers, const char *name, const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;dest, H5T_conv_t func) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Registers the specified conversion function.  <a href="#a17"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a18">registerFunc</a> (H5T_pers_t pers, const string &amp;name, const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;dest, H5T_conv_t func) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in the type of the argument <em>name</em>.  <a href="#a18"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a19">unregister</a> (H5T_pers_t pers, const char *name, const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;dest, H5T_conv_t func) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Removes a conversion function from all conversion paths.  <a href="#a19"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a20">unregister</a> (H5T_pers_t pers, const string &amp;name, const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;dest, H5T_conv_t func) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in the type of the argument <em>name</em>.  <a href="#a20"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a21">setTag</a> (const char *tag) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Tags an opaque datatype.  <a href="#a21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a22">setTag</a> (const string &amp;tag) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in the type of the argument <em>name</em>.  <a href="#a22"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a23">getTag</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the tag associated with an opaque datatype.  <a href="#a23"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a24">detectClass</a> (H5T_class_t cls) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Checks whether a datatype contains (or is) a certain type of datatype.  <a href="#a24"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a25">isVariableStr</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Check whether this datatype is a variable-length string.  <a href="#a25"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a26">Reference</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded function, provided for your convenience. It differs from the above function in that it only creates a reference to an HDF5 object, not to a dataset region.  <a href="#a26"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a27">Reference</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded function, provided for your convenience. It differs from the above function in that it takes an <code>std::string</code> for the object's name.  <a href="#a27"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a28">Reference</a> (const char *name, <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a reference to an HDF5 object or a dataset region.  <a href="#a28"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5G_obj_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a29">getObjType</a> (void *ref, H5R_type_t ref_type) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the type of object that an object reference points to.  <a href="#a29"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a30">getRegion</a> (void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves a dataspace with the region pointed to selected.  <a href="#a30"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a31">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a32">DataType</a> (const hid_t type_id, bool predtype=false)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a datatype using an existing datatype's id.  <a href="#a32"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a33">DataType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: Creates a stub datatype.  <a href="#a33"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#a34">~DataType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Properly terminates access to this datatype.  <a href="#a34"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html#p0">is_predtype</a></td></tr>
+
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::DataType::DataType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataType::DataType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const H5T_class_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>type_class</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>size</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a object given its class and size. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>type_class</em>&nbsp;</td><td>- IN: Class of datatype to create </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>- IN: Number of bytes in the datatype to create </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::DataType::DataType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataType::DataType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1DataType.html">DataType</a> object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a32" doxytag="H5::DataType::DataType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataType::DataType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>existing_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>bool&nbsp;</td>
+          <td class="mdname" nowrap> <em>predefined</em> = <code>false</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a datatype using an existing datatype's id. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>existing_id</em>&nbsp;</td><td>- IN: Id of the existing datatype </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>predefined</em>&nbsp;</td><td>- IN: Indicates whether or not this datatype is a predefined datatype; default to <code>false</code> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a33" doxytag="H5::DataType::DataType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataType::DataType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: Creates a stub datatype. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a34" doxytag="H5::DataType::~DataType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataType::~DataType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Properly terminates access to this datatype. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a2" doxytag="H5::DataType::close"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataType::close           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Closes the datatype if it is not a predefined type. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::DataType::copy"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataType::copy           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>like_type</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copies an existing datatype to this datatype object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>like_type</em>&nbsp;</td><td>- IN: Datatype to be copied </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::DataType::getClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5T_class_t H5::DataType::getClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the datatype class identifier. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Datatype class identifier </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::DataType::commit"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataType::commit           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1CommonFG.html">CommonFG</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>loc</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Commits a transient datatype to a file, creating a new named datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>loc</em>&nbsp;</td><td>- IN: Either a file or a group </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the datatype </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::DataType::commit"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataType::commit           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1CommonFG.html">CommonFG</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>loc</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in the type of the argument <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::DataType::committed"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool H5::DataType::committed           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Determines whether a datatype is a named type or a transient type. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><code>true</code> if the datatype is a named type, and <code>false</code>, otherwise. </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::DataType::find"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5T_conv_t H5::DataType::find           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5T_cdata_t **&nbsp;</td>
+          <td class="mdname" nowrap> <em>pcdata</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Finds a conversion function that can handle a conversion from this datatype to the specified datatype, <em>dest</em>. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>- IN: Destination datatype </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>pcdata</em>&nbsp;</td><td>- IN: Pointer to type conversion data </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Pointer to a suitable conversion function </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::DataType::convert"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataType::convert           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>nelmts</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>background</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>plist</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Converts data from this datatype to the specified datatypes. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>- IN: Destination datatype </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>nelmts</em>&nbsp;</td><td>- IN: Size of array <em>buf</em> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>buf</em>&nbsp;</td><td>- IN/OUT: Array containing pre- and post-conversion values </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>background</em>&nbsp;</td><td>- IN: Optional backgroud buffer </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>plist</em>&nbsp;</td><td>- IN: Dataset transfer property list </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Pointer to a suitable conversion function </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::DataType::operator="></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataType.html">DataType</a> &amp; H5::DataType::operator=           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>rhs</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Assignment operator. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>rhs</em>&nbsp;</td><td>- IN: Reference to the existing datatype </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Reference to <a class="el" href="classH5_1_1DataType.html">DataType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::DataType::operator=="></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool H5::DataType::operator==           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>compared_type</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Compares this <a class="el" href="classH5_1_1DataType.html">DataType</a> against the given one to determines whether the two objects refer to the same actual datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>compared_type</em>&nbsp;</td><td>- IN: Reference to the datatype to compare </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>true if the datatypes are equal, and false, otherwise. </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::DataType::lock"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataType::lock           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Locks a datatype, making it read-only and non-destructible. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Descrition</b></dt><dd>This is normally done by the library for predefined data types so the application doesn't inadvertently change or delete a predefined type.</dd></dl>
+Once a data type is locked it can never be unlocked unless the entire library is closed.     </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::DataType::getOverflow"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5T_overflow_t H5::DataType::getOverflow           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns a pointer to the current global overflow function. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Pointer to an application-defined function if successful; otherwise returns NULL; this can happen if no overflow handling function is registered. </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a14" doxytag="H5::DataType::setOverflow"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataType::setOverflow           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5T_overflow_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>func</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the overflow handler to a specified function. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func</em>&nbsp;</td><td>- IN: Function to be called when overflow occurs </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Pointer to a suitable conversion function </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The function specified by <em>func</em> will be called for all data type conversions that result in an overflow. For more information, please see: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-SetOverflow">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-SetOverflow</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a15" doxytag="H5::DataType::getSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">size_t H5::DataType::getSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the size of a datatype. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Datatype size in bytes </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a16" doxytag="H5::DataType::getSuper"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataType.html">DataType</a> H5::DataType::getSuper           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the base datatype from which a datatype is derived. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1DataType.html">DataType</a> object </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a17" doxytag="H5::DataType::registerFunc"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataType::registerFunc           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5T_pers_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>pers</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5T_conv_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>func</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Registers the specified conversion function. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>pers</em>&nbsp;</td><td>- IN: Conversion option <ul>
+<li><code>H5T_PERS_HARD</code> for hard conversion functions </li>
+<li><code>H5T_PERS_SOFT</code> for soft conversion functions. </li>
+</ul>
+</td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name displayed in diagnostic output. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>- IN: Destination datatype. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>func</em>&nbsp;</td><td>- IN: Function to convert between source and destination datatypes. </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For more information, please see: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-Register">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-Register</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a18" doxytag="H5::DataType::registerFunc"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataType::registerFunc           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5T_pers_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>pers</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5T_conv_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>func</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in the type of the argument <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a19" doxytag="H5::DataType::unregister"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataType::unregister           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5T_pers_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>pers</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5T_conv_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>func</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Removes a conversion function from all conversion paths. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>pers</em>&nbsp;</td><td>- IN: Conversion option <ul>
+<li><code>H5T_PERS_HARD</code> for hard conversion functions </li>
+<li><code>H5T_PERS_SOFT</code> for soft conversion functions. </li>
+</ul>
+</td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name displayed in diagnostic output. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>- IN: Destination datatype. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>func</em>&nbsp;</td><td>- IN: Function to convert between source and destination datatypes. </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a20" doxytag="H5::DataType::unregister"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataType::unregister           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5T_pers_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>pers</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5T_conv_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>func</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in the type of the argument <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a21" doxytag="H5::DataType::setTag"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataType::setTag           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>tag</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Tags an opaque datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>tag</em>&nbsp;</td><td>- IN: Descriptive ASCII string with which the opaque datatype is to be tagged. </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a22" doxytag="H5::DataType::setTag"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::DataType::setTag           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>tag</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in the type of the argument <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a23" doxytag="H5::DataType::getTag"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::DataType::getTag           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the tag associated with an opaque datatype. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Tag associated with the opaque datatype </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a24" doxytag="H5::DataType::detectClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool H5::DataType::detectClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5T_class_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>cls</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Checks whether a datatype contains (or is) a certain type of datatype. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>true if this datatype contains or is the specified type, and false, otherwise. </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a25" doxytag="H5::DataType::isVariableStr"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool H5::DataType::isVariableStr           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Check whether this datatype is a variable-length string. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>true if this datatype is a variable-length string, and false, otherwise. </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a26" doxytag="H5::DataType::Reference"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void * H5::DataType::Reference           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded function, provided for your convenience. It differs from the above function in that it only creates a reference to an HDF5 object, not to a dataset region. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object to be referenced </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>A reference </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd></dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a27" doxytag="H5::DataType::Reference"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void * H5::DataType::Reference           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded function, provided for your convenience. It differs from the above function in that it takes an <code>std::string</code> for the object's name. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object to be referenced - <code>std::string</code> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a28" doxytag="H5::DataType::Reference"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void * H5::DataType::Reference           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dataspace</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5R_type_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref_type</em> = <code>H5R_DATASET_REGION</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a reference to an HDF5 object or a dataset region. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object to be referenced </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dataspace</em>&nbsp;</td><td>- IN: Dataspace with selection </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>ref_type</em>&nbsp;</td><td>- IN: Type of reference; default to <code>H5R_DATASET_REGION</code> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>A reference </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a29" doxytag="H5::DataType::getObjType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5G_obj_t H5::DataType::getObjType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5R_type_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref_type</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the type of object that an object reference points to. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>ref</em>&nbsp;</td><td>- IN: Reference to query </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>ref_type</em>&nbsp;</td><td>- IN: Type of reference to query </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Object type, which can be one of the following: <ul>
+<li><code>H5G_LINK</code> Object is a symbolic link. </li>
+<li><code>H5G_GROUP</code> Object is a group. </li>
+<li><code>H5G_DATASET</code> Object is a dataset. </li>
+<li><code>H5G_TYPE</code> Object is a named datatype </li>
+</ul>
+</dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a30" doxytag="H5::DataType::getRegion"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> H5::DataType::getRegion           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5R_type_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref_type</em> = <code>H5R_DATASET_REGION</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves a dataspace with the region pointed to selected. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>ref</em>&nbsp;</td><td>- IN: Reference to get region of </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>ref_type</em>&nbsp;</td><td>- IN: Type of reference to get region of - default </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a31" doxytag="H5::DataType::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::DataType::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1IdComponent.html#a12">H5::IdComponent</a>.
+<p>
+Reimplemented in <a class="el" href="classH5_1_1ArrayType.html#a3">H5::ArrayType</a>, <a class="el" href="classH5_1_1AtomType.html#a10">H5::AtomType</a>, <a class="el" href="classH5_1_1CompType.html#a19">H5::CompType</a>, <a class="el" href="classH5_1_1EnumType.html#a12">H5::EnumType</a>, <a class="el" href="classH5_1_1FloatType.html#a10">H5::FloatType</a>, <a class="el" href="classH5_1_1IntType.html#a4">H5::IntType</a>, <a class="el" href="classH5_1_1PredType.html#a0">H5::PredType</a>, <a class="el" href="classH5_1_1StrType.html#a8">H5::StrType</a>, and <a class="el" href="classH5_1_1VarLenType.html#a0">H5::VarLenType</a>.    </td>
+  </tr>
+</table>
+<hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="p0" doxytag="H5::DataType::is_predtype"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool <a class="el" href="classH5_1_1DataType.html#p0">H5::DataType::is_predtype</a><code> [protected]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataType.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataType.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataTypeIException-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataTypeIException-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataTypeIException-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::DataTypeIException Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e3">clearErrorStack</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataTypeIException.html#a0">DataTypeIException</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataTypeIException.html#a1">DataTypeIException</a>()</td><td><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e1">dontPrint</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a0">Exception</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a8">Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a9">Exception</a>(const Exception &amp;orig)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e2">getAutoPrint</a>(H5E_auto_t &amp;func, void **client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a4">getCDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a6">getCFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a3">getDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a5">getFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a1">getMajorString</a>(H5E_major_t major_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a2">getMinorString</a>(H5E_minor_t minor_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a7">printError</a>(FILE *stream=NULL) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e0">setAutoPrint</a>(H5E_auto_t &amp;func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e4">walkErrorStack</a>(H5E_direction_t direction, H5E_walk_t func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataTypeIException.html#a2">~DataTypeIException</a>()</td><td><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a10">~Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataTypeIException.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataTypeIException.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataTypeIException.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,455 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1DataTypeIException.html">DataTypeIException</a></div>
+<h1>H5::DataTypeIException Class Reference</h1><code>#include &lt;<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::DataTypeIException:
+<p><center><img src="classH5_1_1DataTypeIException.png" usemap="#H5::DataTypeIException_map" border="0" alt=""></center>
+<map name="H5::DataTypeIException_map">
+<area href="classH5_1_1Exception.html" alt="H5::Exception" shape="rect" coords="0,0,146,24">
+</map>
+<a href="classH5_1_1DataTypeIException-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataTypeIException.html#a0">DataTypeIException</a> (const string func_name, const string message=<a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a <a class="el" href="classH5_1_1DataTypeIException.html">DataTypeIException</a> with the name of the function, in which the failure occurs, and an optional detailed message.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataTypeIException.html#a1">DataTypeIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataTypeIException.html#a2">~DataTypeIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a2"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::DataTypeIException::DataTypeIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataTypeIException::DataTypeIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>func_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>message</em> = <code><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a <a class="el" href="classH5_1_1DataTypeIException.html">DataTypeIException</a> with the name of the function, in which the failure occurs, and an optional detailed message. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func_name</em>&nbsp;</td><td>- IN: Name of the function where failure occurs </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>message</em>&nbsp;</td><td>- IN: Message on the failure </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::DataTypeIException::DataTypeIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataTypeIException::DataTypeIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::DataTypeIException::~DataTypeIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::DataTypeIException::~DataTypeIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataTypeIException.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1DataTypeIException.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1EnumType-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1EnumType-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1EnumType-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,410 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::EnumType Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a2">close</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a5">commit</a>(CommonFG &amp;loc, const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a6">commit</a>(CommonFG &amp;loc, const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a7">committed</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a9">convert</a>(const DataType &amp;dest, size_t nelmts, void *buf, void *background, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a3">copy</a>(const DataType &amp;like_type)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a0">DataType</a>(const H5T_class_t type_class, size_t size)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a1">DataType</a>(const DataType &amp;original)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a32">DataType</a>(const hid_t type_id, bool predtype=false)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a33">DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a24">detectClass</a>(H5T_class_t cls) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a0">EnumType</a>(size_t size)</td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a1">EnumType</a>(const DataSet &amp;dataset)</td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a2">EnumType</a>(const IntType &amp;data_type)</td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a13">EnumType</a>()</td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a14">EnumType</a>(const hid_t existing_id)</td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a15">EnumType</a>(const EnumType &amp;original)</td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a8">find</a>(const DataType &amp;dest, H5T_cdata_t **pcdata) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a12">fromClass</a>() const </td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a4">getClass</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a4">getMemberIndex</a>(const char *name) const </td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a5">getMemberIndex</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a6">getMemberValue</a>(unsigned memb_no, void *value) const </td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a3">getNmembers</a>() const </td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a29">getObjType</a>(void *ref, H5R_type_t ref_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a13">getOverflow</a>(void) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a30">getRegion</a>(void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a15">getSize</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a16">getSuper</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a23">getTag</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a7">insert</a>(const char *name, void *value) const </td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a8">insert</a>(const string &amp;name, void *value) const </td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#p0">is_predtype</a></td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a25">isVariableStr</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a12">lock</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a9">nameOf</a>(void *value, size_t size) const </td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a10">operator=</a>(const DataType &amp;rhs)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::H5Object::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a11">operator==</a>(const DataType &amp;compared_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a26">Reference</a>(const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a27">Reference</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a28">Reference</a>(const char *name, DataSpace &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a17">registerFunc</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a18">registerFunc</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a14">setOverflow</a>(H5T_overflow_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a21">setTag</a>(const char *tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a22">setTag</a>(const string &amp;tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a19">unregister</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a20">unregister</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a10">valueOf</a>(const char *name, void *value) const </td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a11">valueOf</a>(const string &amp;name, void *value) const </td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a34">~DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1EnumType.html#a16">~EnumType</a>()</td><td><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1EnumType.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1EnumType.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1EnumType.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1057 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1EnumType.html">EnumType</a></div>
+<h1>H5::EnumType Class Reference</h1><code>#include &lt;<a class="el" href="H5EnumType_8h-source.html">H5EnumType.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::EnumType:
+<p><center><img src="classH5_1_1EnumType.png" usemap="#H5::EnumType_map" border="0" alt=""></center>
+<map name="H5::EnumType_map">
+<area href="classH5_1_1DataType.html" alt="H5::DataType" shape="rect" coords="0,112,107,136">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="0,56,107,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,107,24">
+</map>
+<a href="classH5_1_1EnumType-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a0">EnumType</a> (size_t size)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an empty enumeration datatype given a size, in bytes.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a1">EnumType</a> (const <a class="el" href="classH5_1_1DataSet.html">DataSet</a> &amp;dataset)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the enum datatype of the specified dataset.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a2">EnumType</a> (const <a class="el" href="classH5_1_1IntType.html">IntType</a> &amp;data_type)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a new enum datatype based on an integer datatype.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a3">getNmembers</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of members in this enumeration datatype.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a4">getMemberIndex</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the index of a member in this enumeration datatype.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a5">getMemberIndex</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in the type of argument <em>name</em>.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a6">getMemberValue</a> (unsigned memb_no, void *value) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the value of a member in this enumeration datatype, given the member's index.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a7">insert</a> (const char *name, void *value) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Inserts a new member to this enumeration datatype.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a8">insert</a> (const string &amp;name, void *value) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in the type of argument <em>name</em>.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a9">nameOf</a> (void *value, size_t size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the symbol name corresponding to a specified member of this enumeration datatype.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a10">valueOf</a> (const char *name, void *value) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the value corresponding to a member of this enumeration datatype, given the member's name.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a11">valueOf</a> (const string &amp;name, void *value) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in the type of argument <em>name</em>.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a12">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a13">EnumType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: Creates a stub datatype.  <a href="#a13"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a14">EnumType</a> (const hid_t existing_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an <a class="el" href="classH5_1_1EnumType.html">EnumType</a> object using the id of an existing datatype.  <a href="#a14"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a15">EnumType</a> (const <a class="el" href="classH5_1_1EnumType.html">EnumType</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1EnumType.html">EnumType</a> object.  <a href="#a15"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html#a16">~EnumType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Properly terminates access to this enum datatype.  <a href="#a16"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::EnumType::EnumType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::EnumType::EnumType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>size</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an empty enumeration datatype given a size, in bytes. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>- IN: Number of bytes in the datatype to create </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::EnumType::EnumType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::EnumType::EnumType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataSet.html">DataSet</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>dataset</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the enum datatype of the specified dataset. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dataset</em>&nbsp;</td><td>- IN: Dataset that this enum datatype associates with </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::EnumType::EnumType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::EnumType::EnumType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1IntType.html">IntType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>data_type</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a new enum datatype based on an integer datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>data_type</em>&nbsp;</td><td>- IN: Base datatype </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::EnumType::EnumType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::EnumType::EnumType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: Creates a stub datatype. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a14" doxytag="H5::EnumType::EnumType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::EnumType::EnumType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>existing_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an <a class="el" href="classH5_1_1EnumType.html">EnumType</a> object using the id of an existing datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>existing_id</em>&nbsp;</td><td>- IN: Id of an existing datatype </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a15" doxytag="H5::EnumType::EnumType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::EnumType::EnumType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1EnumType.html">EnumType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1EnumType.html">EnumType</a> object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a16" doxytag="H5::EnumType::~EnumType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::EnumType::~EnumType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Properly terminates access to this enum datatype. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a3" doxytag="H5::EnumType::getNmembers"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::EnumType::getNmembers           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the number of members in this enumeration datatype. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of members </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::EnumType::getMemberIndex"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::EnumType::getMemberIndex           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the index of a member in this enumeration datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the queried member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Index of the member if it exists. Index will have the value between 0 and <code>N-1</code>, where <code>N</code> is the value returned by the member function <code><a class="el" href="classH5_1_1EnumType.html#a3">EnumType::getNmembers</a></code>. </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::EnumType::getMemberIndex"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::EnumType::getMemberIndex           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in the type of argument <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::EnumType::getMemberValue"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::EnumType::getMemberValue           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname" nowrap> <em>memb_no</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>value</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the value of a member in this enumeration datatype, given the member's index. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>memb_no</em>&nbsp;</td><td>- IN: Index of the queried member </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>- OUT: Pointer to the retrieved value </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::EnumType::insert"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::EnumType::insert           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>value</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Inserts a new member to this enumeration datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the new member </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>- IN: Pointer to the value of the new member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::EnumType::insert"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::EnumType::insert           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>value</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in the type of argument <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::EnumType::nameOf"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::EnumType::nameOf           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>value</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>size</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the symbol name corresponding to a specified member of this enumeration datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>- IN: Pointer to the value of the enum datatype </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>- IN: Size for the name </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::EnumType::valueOf"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::EnumType::valueOf           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>value</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the value corresponding to a member of this enumeration datatype, given the member's name. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the queried member </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>- OUT: Pointer to the retrieved value </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::EnumType::valueOf"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::EnumType::valueOf           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>value</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in the type of argument <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::EnumType::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::EnumType::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1DataType.html#a31">H5::DataType</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1EnumType.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1EnumType.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Exception-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Exception-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Exception-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,347 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::Exception Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1Exception.html">H5::Exception</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e3">clearErrorStack</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e1">dontPrint</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a0">Exception</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a8">Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a9">Exception</a>(const Exception &amp;orig)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e2">getAutoPrint</a>(H5E_auto_t &amp;func, void **client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a4">getCDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a6">getCFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a3">getDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a5">getFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a1">getMajorString</a>(H5E_major_t major_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a2">getMinorString</a>(H5E_minor_t minor_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a7">printError</a>(FILE *stream=NULL) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e0">setAutoPrint</a>(H5E_auto_t &amp;func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e4">walkErrorStack</a>(H5E_direction_t direction, H5E_walk_t func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a10">~Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Exception.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Exception.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Exception.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1023 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1Exception.html">Exception</a></div>
+<h1>H5::Exception Class Reference</h1><code>#include &lt;<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::Exception:
+<p><center><img src="classH5_1_1Exception.png" usemap="#H5::Exception_map" border="0" alt=""></center>
+<map name="H5::Exception_map">
+<area href="classH5_1_1AttributeIException.html" alt="H5::AttributeIException" shape="rect" coords="172,56,334,80">
+<area href="classH5_1_1DataSetIException.html" alt="H5::DataSetIException" shape="rect" coords="172,112,334,136">
+<area href="classH5_1_1DataSpaceIException.html" alt="H5::DataSpaceIException" shape="rect" coords="172,168,334,192">
+<area href="classH5_1_1DataTypeIException.html" alt="H5::DataTypeIException" shape="rect" coords="172,224,334,248">
+<area href="classH5_1_1FileIException.html" alt="H5::FileIException" shape="rect" coords="172,280,334,304">
+<area href="classH5_1_1GroupIException.html" alt="H5::GroupIException" shape="rect" coords="172,336,334,360">
+<area href="classH5_1_1IdComponentException.html" alt="H5::IdComponentException" shape="rect" coords="172,392,334,416">
+<area href="classH5_1_1LibraryIException.html" alt="H5::LibraryIException" shape="rect" coords="172,448,334,472">
+<area href="classH5_1_1PropListIException.html" alt="H5::PropListIException" shape="rect" coords="172,504,334,528">
+<area href="classH5_1_1ReferenceException.html" alt="H5::ReferenceException" shape="rect" coords="172,560,334,584">
+</map>
+<a href="classH5_1_1Exception-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#a0">Exception</a> (const string func_name, const string message=<a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an exception with the name of the function, in which the failure occurs, and an optional detailed message.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#a1">getMajorString</a> (H5E_major_t major_num) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns a text string that describes the error specified by a major error number.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#a2">getMinorString</a> (H5E_minor_t minor_num) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns a text string that describes the error specified by a minor error number.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#a3">getDetailMsg</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the detailed message set at the time the exception is thrown.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#a4">getCDetailMsg</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the detailed message set at the time the exception is thrown.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#a5">getFuncName</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the name of the function, where the exception is thrown.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">const char *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#a6">getCFuncName</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the name of the function, where the exception is thrown.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#a7">printError</a> (FILE *stream=NULL) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Prints the error stack in a default manner.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#a8">Exception</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#a9">Exception</a> (const <a class="el" href="classH5_1_1Exception.html">Exception</a> &amp;orig)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1Exception.html">Exception</a> object.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#a10">~Exception</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a10"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#e0">setAutoPrint</a> (H5E_auto_t &amp;func, void *client_data)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Turns on the automatic error printing.  <a href="#e0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#e1">dontPrint</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Turns off the automatic error printing from the C library.  <a href="#e1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#e2">getAutoPrint</a> (H5E_auto_t &amp;func, void **client_data)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the current settings for the automatic error stack traversal function and its data.  <a href="#e2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#e3">clearErrorStack</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Clears the error stack for the current thread.  <a href="#e3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#e4">walkErrorStack</a> (H5E_direction_t direction, H5E_walk_t func, void *client_data)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Walks the error stack for the current thread, calling the specified function.  <a href="#e4"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Static Protected Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></td></tr>
+
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::Exception::Exception"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::Exception::Exception           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>func_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>message</em> = <code><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an exception with the name of the function, in which the failure occurs, and an optional detailed message. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func_name</em>&nbsp;</td><td>- IN: Name of the function where failure occurs </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>message</em>&nbsp;</td><td>- IN: Message on the failure </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::Exception::Exception"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::Exception::Exception           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::Exception::Exception"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::Exception::Exception           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1Exception.html">Exception</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>orig</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1Exception.html">Exception</a> object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>orig</em>&nbsp;</td><td>- IN: <a class="el" href="classH5_1_1Exception.html">Exception</a> instance to copy </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::Exception::~Exception"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::Exception::~Exception           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a1" doxytag="H5::Exception::getMajorString"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::Exception::getMajorString           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5E_major_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>err_major</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns a text string that describes the error specified by a major error number. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>err_major</em>&nbsp;</td><td>- IN: Major error number </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Major error string </dd></dl>
+<dl compact><dt><b>Description</b></dt><dd>In the failure case, the string "Invalid major error number" will be returned. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::Exception::getMinorString"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::Exception::getMinorString           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5E_minor_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>err_minor</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns a text string that describes the error specified by a minor error number. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>err_minor</em>&nbsp;</td><td>- IN: Minor error number </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Minor error string </dd></dl>
+<dl compact><dt><b>Description</b></dt><dd>In the failure case, the string "Invalid minor error number" will be returned. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::Exception::getDetailMsg"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::Exception::getDetailMsg           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the detailed message set at the time the exception is thrown. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Text message - <code>std::string</code> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::Exception::getCDetailMsg"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const char * H5::Exception::getCDetailMsg           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the detailed message set at the time the exception is thrown. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Text message - <code>char</code> pointer </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::Exception::getFuncName"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::Exception::getFuncName           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the name of the function, where the exception is thrown. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Text message - <code>std::string</code> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::Exception::getCFuncName"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const char * H5::Exception::getCFuncName           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the name of the function, where the exception is thrown. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Text message - <code>char</code> pointer </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="e0" doxytag="H5::Exception::setAutoPrint"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::Exception::setAutoPrint           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5E_auto_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>func</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>client_data</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"><code> [static]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Turns on the automatic error printing. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func</em>&nbsp;</td><td>- IN: Function to be called upon an error condition </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>client_data</em>&nbsp;</td><td>- IN: Data passed to the error function </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>When the library is first initialized the auto printing function, <em>func</em>, is set to the C API <code>H5Eprint</code> and <em>client_data</em> is the standard error stream pointer, <code>stderr</code>. Automatic stack traversal is always in the <code>H5E_WALK_DOWNWARD</code> direction. </dd></dl>
+<dl compact><dt><b></b></dt><dd>Users are encouraged to write their own more specific error handlers </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="e1" doxytag="H5::Exception::dontPrint"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::Exception::dontPrint           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [static]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Turns off the automatic error printing from the C library. 
+<p>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="chunks_8cpp-example.html#a0">chunks.cpp</a>, <a class="el" href="create_8cpp-example.html#a2">create.cpp</a>, <a class="el" href="extend__ds_8cpp-example.html#a4">extend_ds.cpp</a>, <a class="el" href="h5group_8cpp-example.html#a6">h5group.cpp</a>, <a class="el" href="readdata_8cpp-example.html#a7">readdata.cpp</a>, and <a class="el" href="writedata_8cpp-example.html#a8">writedata.cpp</a>.</dl>    </td>
+  </tr>
+</table>
+<a class="anchor" name="e2" doxytag="H5::Exception::getAutoPrint"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::Exception::getAutoPrint           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5E_auto_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>func</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void **&nbsp;</td>
+          <td class="mdname" nowrap> <em>client_data</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"><code> [static]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the current settings for the automatic error stack traversal function and its data. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func</em>&nbsp;</td><td>- OUT: Current setting for the function to be called upon an error condition </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>client_data</em>&nbsp;</td><td>- OUT: Current setting for the data passed to the error function </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="e3" doxytag="H5::Exception::clearErrorStack"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::Exception::clearErrorStack           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [static]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Clears the error stack for the current thread. 
+<p>
+<dl compact><dt><b>Description</b></dt><dd>The stack is also cleared whenever a C API function is called, with certain exceptions (for instance, <code>H5Eprint</code>). </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="e4" doxytag="H5::Exception::walkErrorStack"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::Exception::walkErrorStack           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5E_direction_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>direction</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5E_walk_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>func</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>client_data</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"><code> [static]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Walks the error stack for the current thread, calling the specified function. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>direction</em>&nbsp;</td><td>- IN: Direction in which the error stack is to be walked </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>func</em>&nbsp;</td><td>- IN: Function to be called for each error encountered </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>client_data</em>&nbsp;</td><td>- IN: Data passed to the error function </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Valid values for <em>direction</em> include: <ul>
+<li><code>H5E_WALK_UPWARD</code> - begin with the most specific error and end at the API </li>
+<li><code>H5E_WALK_DOWNWARD</code> - begin at the API and end at the inner-most function where the error was first detected </li>
+</ul>
+</dd></dl>
+<dl compact><dt><b></b></dt><dd>The function specified by <em>func</em> will be called for each error in the error stack. The <code>H5E_walk_t</code> prototype is as follows: <div class="fragment"><pre class="fragment">    <span class="keyword">typedef</span> herr_t (*H5E_walk_t)(<span class="keywordtype">int</span> n, H5E_error_t *err_desc, <span class="keywordtype">void</span> *client_data)
+        <span class="keywordtype">int</span> n - Indexed position of the error in the stack; it begins at zero
+                regardless of stack traversal direction
+        H5E_error_t *err_desc - Pointer to a data structure describing the
+                error.  This structure is listed below.
+        <span class="keywordtype">void</span> *client_data - Pointer to client data in the format expected by
+                the user-defined function.
+</pre></div> </dd></dl>
+<dl compact><dt><b></b></dt><dd>Data structure to describe the error: <div class="fragment"><pre class="fragment">    <span class="keyword">typedef</span> <span class="keyword">struct </span>H5E_error_t {
+        hid_t       cls_id;         <span class="comment">//class ID</span>
+        hid_t       maj_num;        <span class="comment">//major error ID</span>
+        hid_t       min_num;        <span class="comment">//minor error number</span>
+        <span class="keyword">const</span> <span class="keywordtype">char</span>  *func_name;     <span class="comment">//function in which error occurred</span>
+        <span class="keyword">const</span> <span class="keywordtype">char</span>  *file_name;     <span class="comment">//file in which error occurred</span>
+        <span class="keywordtype">unsigned</span>    line;           <span class="comment">//line in file where error occurs</span>
+        <span class="keyword">const</span> <span class="keywordtype">char</span>  *desc;          <span class="comment">//optional supplied description</span>
+    } H5E_error_t;
+</pre></div> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::Exception::printError"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::Exception::printError           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">FILE *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>stream</em> = <code>NULL</code>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Prints the error stack in a default manner. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>stream</em>&nbsp;</td><td>- IN: File pointer </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="t0" doxytag="H5::Exception::DEFAULT_MSG"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const string <a class="el" href="classH5_1_1Exception.html#t0">H5::Exception::DEFAULT_MSG</a><code> [static, protected]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Exception.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Exception.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileAccPropList-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileAccPropList-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileAccPropList-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,411 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::FileAccPropList Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a3">close</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a4">closeClass</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a5">copy</a>(const PropList &amp;like_plist)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a6">copyProp</a>(PropList &amp;dest, const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a7">copyProp</a>(PropList &amp;dest, const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a8">copyProp</a>(PropList &amp;dest, PropList &amp;src, const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a9">copyProp</a>(PropList &amp;dest, PropList &amp;src, const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#s0">DEFAULT</a></td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a30">FileAccPropList</a>()</td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a31">FileAccPropList</a>(const FileAccPropList &amp;original)</td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a32">FileAccPropList</a>(const hid_t plist_id)</td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a29">fromClass</a>() const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a20">getAlignment</a>(hsize_t &amp;threshold, hsize_t &amp;alignment) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a24">getCache</a>(int &amp;mdc_nelmts, size_t &amp;rdcc_nelmts, size_t &amp;rdcc_nbytes, double &amp;rdcc_w0) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a10">getClass</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a11">getClassName</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a12">getClassParent</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a7">getCore</a>(size_t &amp;increment, hbool_t &amp;backing_store) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a2">getDriver</a>() const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a9">getFamily</a>(hsize_t &amp;memb_size, FileAccPropList &amp;memb_plist) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a10">getFamily</a>(hsize_t &amp;memb_size) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a4">getFamilyOffset</a>() const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a26">getFcloseDegree</a>()</td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a28">getGcReferences</a>() const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a16">getMetaBlockSize</a>() const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a22">getMultiType</a>() const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a13">getNumProps</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a14">getProperty</a>(const char *name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a15">getProperty</a>(const string &amp;name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a16">getProperty</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a17">getProperty</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a23">getPropSize</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a24">getPropSize</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a14">getSieveBufSize</a>() const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a25">isAClass</a>(const PropList &amp;prop_class) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a1">operator=</a>(const PropList &amp;rhs)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::IdComponent::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a2">operator==</a>(const PropList &amp;rhs) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a26">propExist</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a27">propExist</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a0">PropList</a>(const hid_t plist_id)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a31">PropList</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a32">PropList</a>(const PropList &amp;original)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a28">removeProp</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a29">removeProp</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a19">setAlignment</a>(hsize_t threshold=1, hsize_t alignment=1) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a23">setCache</a>(int mdc_nelmts, size_t rdcc_nelmts, size_t rdcc_nbytes, double rdcc_w0) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a6">setCore</a>(size_t increment, hbool_t backing_store) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a1">setDriver</a>(hid_t new_driver_id, const void *new_driver_info) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a8">setFamily</a>(hsize_t memb_size, const FileAccPropList &amp;memb_plist) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a3">setFamilyOffset</a>(hsize_t offset) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a25">setFcloseDegree</a>(H5F_close_degree_t degree)</td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a27">setGcReferences</a>(unsigned gc_ref=0) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a17">setLog</a>(const char *logfile, unsigned flags, size_t buf_size) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a18">setLog</a>(const string &amp;logfile, unsigned flags, size_t buf_size) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a15">setMetaBlockSize</a>(hsize_t &amp;block_size) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a21">setMultiType</a>(H5FD_mem_t dtype) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a18">setProperty</a>(const char *name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a19">setProperty</a>(const char *name, const char *charptr) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a20">setProperty</a>(const char *name, string &amp;strg) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a21">setProperty</a>(const string &amp;name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a22">setProperty</a>(const string &amp;name, string &amp;strg) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a5">setSec2</a>() const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a13">setSieveBufSize</a>(size_t bufsize) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a11">setSplit</a>(FileAccPropList &amp;meta_plist, FileAccPropList &amp;raw_plist, const char *meta_ext=".meta", const char *raw_ext=".raw") const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a12">setSplit</a>(FileAccPropList &amp;meta_plist, FileAccPropList &amp;raw_plist, const string &amp;meta_ext, const string &amp;raw_ext) const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a0">setStdio</a>() const </td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileAccPropList.html#a33">~FileAccPropList</a>()</td><td><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a33">~PropList</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileAccPropList.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileAccPropList.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileAccPropList.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1946 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a></div>
+<h1>H5::FileAccPropList Class Reference</h1><code>#include &lt;<a class="el" href="H5FaccProp_8h-source.html">H5FaccProp.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::FileAccPropList:
+<p><center><img src="classH5_1_1FileAccPropList.png" usemap="#H5::FileAccPropList_map" border="0" alt=""></center>
+<map name="H5::FileAccPropList_map">
+<area href="classH5_1_1PropList.html" alt="H5::PropList" shape="rect" coords="0,56,124,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,124,24">
+</map>
+<a href="classH5_1_1FileAccPropList-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a0">setStdio</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Modifies this property list to use the <code>H5FD_STDIO</code> driver.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a1">setDriver</a> (hid_t new_driver_id, const void *new_driver_info) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set file driver for this property list.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">hid_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a2">getDriver</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the ID of the low-level file driver.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a3">setFamilyOffset</a> (hsize_t offset) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets offset for family driver.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">hsize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a4">getFamilyOffset</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get offset for family driver.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a5">setSec2</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Modifies this file access property list to use the sec2 driver.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a6">setCore</a> (size_t increment, hbool_t backing_store) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Modifies this file access property list to use the <code>H5FD_CORE</code> driver.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a7">getCore</a> (size_t &amp;increment, hbool_t &amp;backing_store) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Queries core file driver properties.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a8">setFamily</a> (hsize_t memb_size, const <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;memb_plist) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets this file access property list to use the family driver.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a9">getFamily</a> (hsize_t &amp;memb_size, <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;memb_plist) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns information about the family file access property list.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a10">getFamily</a> (hsize_t &amp;memb_size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts and its return value.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a11">setSplit</a> (<a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;meta_plist, <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;raw_plist, const char *meta_ext=".meta", const char *raw_ext=".raw") const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Emulates the old split file driver, which stored meta data in one file and raw data in another file.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a12">setSplit</a> (<a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;meta_plist, <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;raw_plist, const string &amp;meta_ext, const string &amp;raw_ext) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a13">setSieveBufSize</a> (size_t bufsize) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the maximum size of the data sieve buffer.  <a href="#a13"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a14">getSieveBufSize</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the current settings for the data sieve buffer size property from this property list.  <a href="#a14"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a15">setMetaBlockSize</a> (hsize_t &amp;block_size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the minimum size of metadata block allocations.  <a href="#a15"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">hsize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a16">getMetaBlockSize</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the current metadata block size setting.  <a href="#a16"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a17">setLog</a> (const char *logfile, unsigned flags, size_t buf_size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Modifies this file access property list to use the logging driver.  <a href="#a17"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a18">setLog</a> (const string &amp;logfile, unsigned flags, size_t buf_size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts.  <a href="#a18"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a19">setAlignment</a> (hsize_t threshold=1, hsize_t alignment=1) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the alignment properties of this property list.  <a href="#a19"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a20">getAlignment</a> (hsize_t &amp;threshold, hsize_t &amp;alignment) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the current settings for alignment properties from this property list.  <a href="#a20"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a21">setMultiType</a> (H5FD_mem_t dtype) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets data type for <code>MULTI</code> driver.  <a href="#a21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5FD_mem_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a22">getMultiType</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the data type property for <code>MULTI</code> driver.  <a href="#a22"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a23">setCache</a> (int mdc_nelmts, size_t rdcc_nelmts, size_t rdcc_nbytes, double rdcc_w0) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the meta data cache and raw data chunk cache parameters. Sets the meta data cache and raw data chunk cache parameters.  <a href="#a23"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a24">getCache</a> (int &amp;mdc_nelmts, size_t &amp;rdcc_nelmts, size_t &amp;rdcc_nbytes, double &amp;rdcc_w0) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Queries the meta data cache and raw data chunk cache parameters.  <a href="#a24"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a25">setFcloseDegree</a> (H5F_close_degree_t degree)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the degree for the file close behavior.  <a href="#a25"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5F_close_degree_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a26">getFcloseDegree</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the degree for the file close behavior.  <a href="#a26"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a27">setGcReferences</a> (unsigned gc_ref=0) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets garbage collecting references flag.  <a href="#a27"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a28">getGcReferences</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the garbage collecting references setting.  <a href="#a28"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a29">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a30">FileAccPropList</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: creates a file access property list.  <a href="#a30"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a31">FileAccPropList</a> (const <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy Constructor: makes a copy of the original <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> object.  <a href="#a31"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a32">FileAccPropList</a> (const hid_t plist_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a file access property list using the id of an existing one.  <a href="#a32"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#a33">~FileAccPropList</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a33"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html#s0">DEFAULT</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constant for default property.  <a href="#s0"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a30" doxytag="H5::FileAccPropList::FileAccPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FileAccPropList::FileAccPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: creates a file access property list. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a31" doxytag="H5::FileAccPropList::FileAccPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FileAccPropList::FileAccPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy Constructor: makes a copy of the original <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a32" doxytag="H5::FileAccPropList::FileAccPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FileAccPropList::FileAccPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>plist_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a file access property list using the id of an existing one. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a33" doxytag="H5::FileAccPropList::~FileAccPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FileAccPropList::~FileAccPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::FileAccPropList::setStdio"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setStdio           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Modifies this property list to use the <code>H5FD_STDIO</code> driver. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::FileAccPropList::setDriver"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setDriver           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hid_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>new_driver_id</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>new_driver_info</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set file driver for this property list. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>new_driver_id</em>&nbsp;</td><td>- IN: File driver </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>new_driver_info</em>&nbsp;</td><td>- IN: Struct containing the driver-specific properites </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For a list of valid driver identifiers, please see the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-GetDriver">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-GetDriver</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::FileAccPropList::getDriver"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hid_t H5::FileAccPropList::getDriver           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Return the ID of the low-level file driver. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>A low-level driver ID which is the same ID used when the driver was set for the property list. The driver ID is only valid as long as the file driver remains registered. Valid driver identifiers can be found at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-GetDriver">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-GetDriver</a> </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::FileAccPropList::setFamilyOffset"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setFamilyOffset           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>offset</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets offset for family driver. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>offset</em>&nbsp;</td><td>- IN: offset value </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::FileAccPropList::getFamilyOffset"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hsize_t H5::FileAccPropList::getFamilyOffset           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Get offset for family driver. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Offset for family driver </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::FileAccPropList::setSec2"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setSec2           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Modifies this file access property list to use the sec2 driver. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::FileAccPropList::setCore"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setCore           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>increment</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hbool_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>backing_store</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Modifies this file access property list to use the <code>H5FD_CORE</code> driver. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>increment</em>&nbsp;</td><td>- IN: Specifies how much memory to increase each time more memory is needed, in bytes </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>backing_store</em>&nbsp;</td><td>- IN: Indicating whether to write the file contents to disk when the file is closed </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For more details on the use of <code>H5FD_CORE</code> driver, please refer to <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFaplCore">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFaplCore</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::FileAccPropList::getCore"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::getCore           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>increment</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hbool_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>backing_store</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Queries core file driver properties. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>increment</em>&nbsp;</td><td>- OUT: Size of memory increment, in bytes </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>backing_store</em>&nbsp;</td><td>- OUT: Indicating whether to write the file contents to disk when the file is closed </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::FileAccPropList::setFamily"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setFamily           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>memb_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>memb_plist</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets this file access property list to use the family driver. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>memb_size</em>&nbsp;</td><td>- IN: Size in bytes of each file member </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>memb_plist</em>&nbsp;</td><td>- IN: File access property list to be used for each family member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Note that <em>memb_size</em> is used only when creating a new file. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::FileAccPropList::getFamily"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::getFamily           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>memb_size</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>memb_plist</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns information about the family file access property list. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>memb_size</em>&nbsp;</td><td>- OUT: Size in bytes of each file member </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>memb_plist</em>&nbsp;</td><td>- OUT: Retrieved file access property list for each file member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::FileAccPropList::getFamily"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> H5::FileAccPropList::getFamily           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>memb_size</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts and its return value. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>memb_size</em>&nbsp;</td><td>- OUT: Size in bytes of each file member </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>The file access property list for each file member </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::FileAccPropList::setSplit"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setSplit           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>meta_plist</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>raw_plist</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>meta_ext</em> = <code>".meta"</code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>raw_ext</em> = <code>".raw"</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Emulates the old split file driver, which stored meta data in one file and raw data in another file. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>meta_plist</em>&nbsp;</td><td>- IN: File access plist for the metadata file </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>raw_plist</em>&nbsp;</td><td>- IN: File access plist for the raw data file </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>meta_ext</em>&nbsp;</td><td>- IN: Metadata filename extension as <code>char*</code> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>raw_ext</em>&nbsp;</td><td>- IN: Raw data filename extension as <code>char*</code> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Temporary - For information, please refer to: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFaplSplit">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFaplSplit</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::FileAccPropList::setSplit"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setSplit           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>meta_plist</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>raw_plist</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>meta_ext</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>raw_ext</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>meta_plist</em>&nbsp;</td><td>- IN: File access plist for the metadata file </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>raw_plist</em>&nbsp;</td><td>- IN: File access plist for the raw data file </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>meta_ext</em>&nbsp;</td><td>- IN: Metadata filename extension as <code>string</code> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>raw_ext</em>&nbsp;</td><td>- IN: Raw data filename extension as <code>string</code> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::FileAccPropList::setSieveBufSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setSieveBufSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>bufsize</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the maximum size of the data sieve buffer. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>bufsize</em>&nbsp;</td><td>- IN: Maximum size, in bytes, of data sieve buffer </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For detail on data sieving, please refer to <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSieveBufSize">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSieveBufSize</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a14" doxytag="H5::FileAccPropList::getSieveBufSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">size_t H5::FileAccPropList::getSieveBufSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the current settings for the data sieve buffer size property from this property list. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Data sieve buffer size, in bytes </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a15" doxytag="H5::FileAccPropList::setMetaBlockSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setMetaBlockSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>block_size</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the minimum size of metadata block allocations. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>block_size</em>&nbsp;</td><td>- IN: Minimum size, in bytes, of metadata block allocations </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For more detail, please see the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetMetaBlockSize">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetMetaBlockSize</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a16" doxytag="H5::FileAccPropList::getMetaBlockSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hsize_t H5::FileAccPropList::getMetaBlockSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the current metadata block size setting. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Metadata block size </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a17" doxytag="H5::FileAccPropList::setLog"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setLog           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>logfile</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned&nbsp;</td>
+          <td class="mdname" nowrap> <em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf_size</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Modifies this file access property list to use the logging driver. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>logfile</em>&nbsp;</td><td>- IN: Name of the log file </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>flags</em>&nbsp;</td><td>- IN: Flags specifying the types of logging activity </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>buf_size</em>&nbsp;</td><td>- IN: Size of the logging buffer </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For detail on <em>flags</em>, please refer to <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFaplStream">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFaplStream</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a18" doxytag="H5::FileAccPropList::setLog"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setLog           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>logfile</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned&nbsp;</td>
+          <td class="mdname" nowrap> <em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>buf_size</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>logfile</em>&nbsp;</td><td>- IN: Name of the log file - string </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>flags</em>&nbsp;</td><td>- IN: Flags specifying the types of logging activity </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>buf_size</em>&nbsp;</td><td>- IN: Size of the logging buffer </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a19" doxytag="H5::FileAccPropList::setAlignment"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setAlignment           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>threshold</em> = <code>1</code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hsize_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>alignment</em> = <code>1</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the alignment properties of this property list. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>threshold</em>&nbsp;</td><td>- IN: Threshold value for file object size </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>alignment</em>&nbsp;</td><td>- IN: Alignment value </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The parameter <em>threshold</em> must have a non-negative value. Note that setting the threshold value to 0 (zero) has the effect of a special case, forcing everything to be aligned. The parameter <em>alignment</em> must have a positive value.</dd></dl>
+For detail on <em>setting</em> alignment, please refer to <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetAlignment">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetAlignment</a>     </td>
+  </tr>
+</table>
+<a class="anchor" name="a20" doxytag="H5::FileAccPropList::getAlignment"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::getAlignment           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>threshold</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hsize_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>alignment</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the current settings for alignment properties from this property list. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>threshold</em>&nbsp;</td><td>- OUT: Retrieved threshold value for file object size </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>alignment</em>&nbsp;</td><td>- OUT: Retrieved alignment value </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a21" doxytag="H5::FileAccPropList::setMultiType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setMultiType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5FD_mem_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>dtype</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets data type for <code>MULTI</code> driver. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dtype</em>&nbsp;</td><td>- IN: Type of data </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>More details and valid values for <em>dtype</em> can be found at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetMultiType">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetMultiType</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a22" doxytag="H5::FileAccPropList::getMultiType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5FD_mem_t H5::FileAccPropList::getMultiType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the data type property for <code>MULTI</code> driver. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>The data type property </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>More details and possible returned values can be found at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-GetMultiType">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-GetMultiType</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a23" doxytag="H5::FileAccPropList::setCache"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setCache           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>mdc_nelmts</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>rdcc_nelmts</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>rdcc_nbytes</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>double&nbsp;</td>
+          <td class="mdname" nowrap> <em>rdcc_w0</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the meta data cache and raw data chunk cache parameters. Sets the meta data cache and raw data chunk cache parameters. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>mdc_nelmts</em>&nbsp;</td><td>- IN: Number of elements in the meta data cache </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>rdcc_nelmts</em>&nbsp;</td><td>- IN: Number of elements in the raw data chunk cache </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>rdcc_nbytes</em>&nbsp;</td><td>- IN: Total size of the raw data chunk cache, in bytes </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>rdcc_w0</em>&nbsp;</td><td>- IN: Preemption policy </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The argument <em>rdcc_w0</em> should hold a value between 0 and 1 inclusive. This value indicates how much chunks that have been fully read are favored for preemption. A value of zero means fully read chunks are treated no differently than other chunks (the preemption is strictly LRU) while a value of one means fully read chunks are always preempted before other chunks. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a24" doxytag="H5::FileAccPropList::getCache"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::getCache           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>mdc_nelmts</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>rdcc_nelmts</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>rdcc_nbytes</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>double &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>rdcc_w0</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Queries the meta data cache and raw data chunk cache parameters. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>mdc_nelmts</em>&nbsp;</td><td>- OUT: Number of elements in the meta data cache </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>rdcc_nelmts</em>&nbsp;</td><td>- OUT: Number of elements in the raw data chunk cache </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>rdcc_nbytes</em>&nbsp;</td><td>- OUT: Total size of the raw data chunk cache, in bytes </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>rdcc_w0</em>&nbsp;</td><td>- OUT: Preemption policy </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a25" doxytag="H5::FileAccPropList::setFcloseDegree"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setFcloseDegree           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5F_close_degree_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>degree</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the degree for the file close behavior. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>degree</em>&nbsp;</td><td>- IN: </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a26" doxytag="H5::FileAccPropList::getFcloseDegree"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5F_close_degree_t H5::FileAccPropList::getFcloseDegree           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the degree for the file close behavior. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>The degree for the file close behavior </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a27" doxytag="H5::FileAccPropList::setGcReferences"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileAccPropList::setGcReferences           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>gc_ref</em> = <code>0</code>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets garbage collecting references flag. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>gc_ref</em>&nbsp;</td><td>- IN: Flag setting reference garbage collection to on (1) or off (0). </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For detail on <em>fapl</em>, please refer to <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFaplStream">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetFaplStream</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a28" doxytag="H5::FileAccPropList::getGcReferences"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">unsigned H5::FileAccPropList::getGcReferences           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the garbage collecting references setting. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Garbage collecting references setting, 0 (off) or 1 (on) </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a29" doxytag="H5::FileAccPropList::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::FileAccPropList::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1PropList.html#a30">H5::PropList</a>.    </td>
+  </tr>
+</table>
+<hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="s0" doxytag="H5::FileAccPropList::DEFAULT"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> <a class="el" href="classH5_1_1FileAccPropList.html#s0">H5::FileAccPropList::DEFAULT</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Constant for default property. 
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1PropList.html#s0">H5::PropList</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileAccPropList.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileAccPropList.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileCreatPropList-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileCreatPropList-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileCreatPropList-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,391 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::FileCreatPropList Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a3">close</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a4">closeClass</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a5">copy</a>(const PropList &amp;like_plist)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a6">copyProp</a>(PropList &amp;dest, const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a7">copyProp</a>(PropList &amp;dest, const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a8">copyProp</a>(PropList &amp;dest, PropList &amp;src, const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a9">copyProp</a>(PropList &amp;dest, PropList &amp;src, const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#s0">DEFAULT</a></td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#a10">FileCreatPropList</a>()</td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#a11">FileCreatPropList</a>(const FileCreatPropList &amp;orig)</td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#a12">FileCreatPropList</a>(const hid_t plist_id)</td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#a9">fromClass</a>() const </td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a10">getClass</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a11">getClassName</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a12">getClassParent</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#a7">getIstorek</a>() const </td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a13">getNumProps</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a14">getProperty</a>(const char *name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a15">getProperty</a>(const string &amp;name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a16">getProperty</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a17">getProperty</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a23">getPropSize</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a24">getPropSize</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#a3">getSizes</a>(size_t &amp;sizeof_addr, size_t &amp;sizeof_size) const </td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#a5">getSymk</a>(unsigned &amp;int_nodes_k, unsigned &amp;leaf_nodes_k) const </td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#a2">getUserblock</a>() const </td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#a0">getVersion</a>(unsigned &amp;super, unsigned &amp;freelist, unsigned &amp;stab, unsigned &amp;shhdr) const </td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a25">isAClass</a>(const PropList &amp;prop_class) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a1">operator=</a>(const PropList &amp;rhs)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::IdComponent::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a2">operator==</a>(const PropList &amp;rhs) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a26">propExist</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a27">propExist</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a0">PropList</a>(const hid_t plist_id)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a31">PropList</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a32">PropList</a>(const PropList &amp;original)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a28">removeProp</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a29">removeProp</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#a8">setIstorek</a>(unsigned ik) const </td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a18">setProperty</a>(const char *name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a19">setProperty</a>(const char *name, const char *charptr) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a20">setProperty</a>(const char *name, string &amp;strg) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a21">setProperty</a>(const string &amp;name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a22">setProperty</a>(const string &amp;name, string &amp;strg) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#a4">setSizes</a>(size_t sizeof_addr=4, size_t sizeof_size=4) const </td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#a6">setSymk</a>(unsigned int_nodes_k, unsigned leaf_nodes_k) const </td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#a1">setUserblock</a>(hsize_t size) const </td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileCreatPropList.html#a13">~FileCreatPropList</a>()</td><td><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a33">~PropList</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileCreatPropList.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileCreatPropList.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileCreatPropList.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,989 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a></div>
+<h1>H5::FileCreatPropList Class Reference</h1><code>#include &lt;<a class="el" href="H5FcreatProp_8h-source.html">H5FcreatProp.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::FileCreatPropList:
+<p><center><img src="classH5_1_1FileCreatPropList.png" usemap="#H5::FileCreatPropList_map" border="0" alt=""></center>
+<map name="H5::FileCreatPropList_map">
+<area href="classH5_1_1PropList.html" alt="H5::PropList" shape="rect" coords="0,56,132,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,132,24">
+</map>
+<a href="classH5_1_1FileCreatPropList-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#a0">getVersion</a> (unsigned &amp;super, unsigned &amp;freelist, unsigned &amp;stab, unsigned &amp;shhdr) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves version information for various parts of a file.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#a1">setUserblock</a> (hsize_t size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the user block size field of this file creation property list.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">hsize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#a2">getUserblock</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the user block size of this file creation property list.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#a3">getSizes</a> (size_t &amp;sizeof_addr, size_t &amp;sizeof_size) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the size of the offsets and lengths used in an HDF5 file.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#a4">setSizes</a> (size_t sizeof_addr=4, size_t sizeof_size=4) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the byte size of the offsets and lengths used to address objects in an HDF5 file.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#a5">getSymk</a> (unsigned &amp;int_nodes_k, unsigned &amp;leaf_nodes_k) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the size of the symbol table B-tree 1/2 rank and the symbol table leaf node 1/2 size. <dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>H5::PropListIException.</em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+ <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#a6">setSymk</a> (unsigned int_nodes_k, unsigned leaf_nodes_k) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the size of parameters used to control the symbol table nodes.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">unsigned&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#a7">getIstorek</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the 1/2 rank of an indexed storage B-tree.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#a8">setIstorek</a> (unsigned ik) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the size of the parameter used to control the B-trees for indexing chunked datasets.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#a9">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#a10">FileCreatPropList</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: Creates a file create property list.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#a11">FileCreatPropList</a> (const <a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a> &amp;orig)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a> object.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#a12">FileCreatPropList</a> (const hid_t plist_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a file creation property list using the id of an existing one.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#a13">~FileCreatPropList</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a13"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html#s0">DEFAULT</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constant for default property.  <a href="#s0"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a10" doxytag="H5::FileCreatPropList::FileCreatPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FileCreatPropList::FileCreatPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: Creates a file create property list. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::FileCreatPropList::FileCreatPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FileCreatPropList::FileCreatPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a> object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>original</em>&nbsp;</td><td>- IN: <a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a> instance to copy </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::FileCreatPropList::FileCreatPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FileCreatPropList::FileCreatPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>plist_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a file creation property list using the id of an existing one. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>plist_id</em>&nbsp;</td><td>- IN: <a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a> id to use </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::FileCreatPropList::~FileCreatPropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FileCreatPropList::~FileCreatPropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::FileCreatPropList::getVersion"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileCreatPropList::getVersion           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>super</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>freelist</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>stab</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>shhdr</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves version information for various parts of a file. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>super</em>&nbsp;</td><td>- OUT: The file super block. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>freelist</em>&nbsp;</td><td>- OUT: The global free list. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>stab</em>&nbsp;</td><td>- OUT: The root symbol table entry. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>shhdr</em>&nbsp;</td><td>- OUT: Shared object headers. </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Any (or even all) of the output arguments can be null pointers. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::FileCreatPropList::setUserblock"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileCreatPropList::setUserblock           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hsize_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>size</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the user block size field of this file creation property list. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>size</em>&nbsp;</td><td>- IN: User block size to be set, in bytes </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The default user block size is 0; it may be set to any power of 2 equal to 512 or greater (512, 1024, 2048, etc.) </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::FileCreatPropList::getUserblock"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hsize_t H5::FileCreatPropList::getUserblock           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the user block size of this file creation property list. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>User block size </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::FileCreatPropList::getSizes"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileCreatPropList::getSizes           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>sizeof_addr</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>sizeof_size</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the size of the offsets and lengths used in an HDF5 file. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::FileCreatPropList::setSizes"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileCreatPropList::setSizes           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>sizeof_addr</em> = <code>4</code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>sizeof_size</em> = <code>4</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the byte size of the offsets and lengths used to address objects in an HDF5 file. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>sizeof_addr</em>&nbsp;</td><td>- IN: Size of an object offset in bytes </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>sizeof_size</em>&nbsp;</td><td>- IN: Size of an object length in bytes. </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For information on setting sizes, please refer to the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSizes">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSizes</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::FileCreatPropList::getSymk"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileCreatPropList::getSymk           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>ik</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>lk</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the size of the symbol table B-tree 1/2 rank and the symbol table leaf node 1/2 size. <dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>H5::PropListIException.</em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+
+<p>
+<dl compact><dt><b>Description</b></dt><dd>For information, please see <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSymK">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSymK</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::FileCreatPropList::setSymk"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileCreatPropList::setSymk           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname" nowrap> <em>ik</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned&nbsp;</td>
+          <td class="mdname" nowrap> <em>lk</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the size of parameters used to control the symbol table nodes. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>ik</em>&nbsp;</td><td>- IN: Symbol table tree rank </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>lk</em>&nbsp;</td><td>- IN: Symbol table node size </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For information, please see the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSymK">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetSymK</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::FileCreatPropList::getIstorek"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">unsigned H5::FileCreatPropList::getIstorek           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the 1/2 rank of an indexed storage B-tree. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>1/2 rank of chunked storage B-tree </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For information, please see <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetIstoreK">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetIstoreK</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::FileCreatPropList::setIstorek"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FileCreatPropList::setIstorek           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>ik</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the size of the parameter used to control the B-trees for indexing chunked datasets. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>ik</em>&nbsp;</td><td>- IN: 1/2 rank of chunked storage B-tree </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For information, please see the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetIstoreK">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5P.html#Property-SetIstoreK</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::FileCreatPropList::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::FileCreatPropList::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1PropList.html#a30">H5::PropList</a>.    </td>
+  </tr>
+</table>
+<hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="s0" doxytag="H5::FileCreatPropList::DEFAULT"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a> <a class="el" href="classH5_1_1FileCreatPropList.html#s0">H5::FileCreatPropList::DEFAULT</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Constant for default property. 
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1PropList.html#s0">H5::PropList</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileCreatPropList.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileCreatPropList.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileIException-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileIException-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileIException-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::FileIException Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e3">clearErrorStack</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e1">dontPrint</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a0">Exception</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a8">Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a9">Exception</a>(const Exception &amp;orig)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileIException.html#a0">FileIException</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileIException.html#a1">FileIException</a>()</td><td><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e2">getAutoPrint</a>(H5E_auto_t &amp;func, void **client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a4">getCDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a6">getCFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a3">getDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a5">getFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a1">getMajorString</a>(H5E_major_t major_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a2">getMinorString</a>(H5E_minor_t minor_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a7">printError</a>(FILE *stream=NULL) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e0">setAutoPrint</a>(H5E_auto_t &amp;func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e4">walkErrorStack</a>(H5E_direction_t direction, H5E_walk_t func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a10">~Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FileIException.html#a2">~FileIException</a>()</td><td><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileIException.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileIException.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileIException.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,455 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1FileIException.html">FileIException</a></div>
+<h1>H5::FileIException Class Reference</h1><code>#include &lt;<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::FileIException:
+<p><center><img src="classH5_1_1FileIException.png" usemap="#H5::FileIException_map" border="0" alt=""></center>
+<map name="H5::FileIException_map">
+<area href="classH5_1_1Exception.html" alt="H5::Exception" shape="rect" coords="0,0,113,24">
+</map>
+<a href="classH5_1_1FileIException-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileIException.html#a0">FileIException</a> (const string func_name, const string message=<a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a <a class="el" href="classH5_1_1FileIException.html">FileIException</a> with the name of the function, in which the failure occurs, and an optional detailed message.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileIException.html#a1">FileIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileIException.html#a2">~FileIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a2"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::FileIException::FileIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FileIException::FileIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>func_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>message</em> = <code><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a <a class="el" href="classH5_1_1FileIException.html">FileIException</a> with the name of the function, in which the failure occurs, and an optional detailed message. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func_name</em>&nbsp;</td><td>- IN: Name of the function where failure occurs </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>message</em>&nbsp;</td><td>- IN: Message on the failure </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::FileIException::FileIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FileIException::FileIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::FileIException::~FileIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FileIException::~FileIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileIException.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FileIException.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FloatType-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FloatType-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FloatType-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,420 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::FloatType Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a11">AtomType</a>(const AtomType &amp;original)</td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a2">close</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a5">commit</a>(CommonFG &amp;loc, const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a6">commit</a>(CommonFG &amp;loc, const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a7">committed</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a9">convert</a>(const DataType &amp;dest, size_t nelmts, void *buf, void *background, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a3">copy</a>(const DataType &amp;like_type)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a0">DataType</a>(const H5T_class_t type_class, size_t size)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a1">DataType</a>(const DataType &amp;original)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a32">DataType</a>(const hid_t type_id, bool predtype=false)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a33">DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a24">detectClass</a>(H5T_class_t cls) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a8">find</a>(const DataType &amp;dest, H5T_cdata_t **pcdata) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a0">FloatType</a>(const PredType &amp;pred_type)</td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a1">FloatType</a>(const DataSet &amp;dataset)</td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a11">FloatType</a>()</td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a12">FloatType</a>(const hid_t existing_id)</td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a13">FloatType</a>(const FloatType &amp;original)</td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a10">fromClass</a>() const </td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a4">getClass</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a2">getEbias</a>() const </td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a4">getFields</a>(size_t &amp;spos, size_t &amp;epos, size_t &amp;esize, size_t &amp;mpos, size_t &amp;msize) const </td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a6">getInpad</a>(string &amp;pad_string) const </td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a8">getNorm</a>(string &amp;norm_string) const </td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a29">getObjType</a>(void *ref, H5R_type_t ref_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a3">getOffset</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a0">getOrder</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a1">getOrder</a>(string &amp;order_string) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a13">getOverflow</a>(void) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a5">getPad</a>(H5T_pad_t &amp;lsb, H5T_pad_t &amp;msb) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a7">getPrecision</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a30">getRegion</a>(void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a15">getSize</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a16">getSuper</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a23">getTag</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#p0">is_predtype</a></td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a25">isVariableStr</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a12">lock</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a10">operator=</a>(const DataType &amp;rhs)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::H5Object::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a11">operator==</a>(const DataType &amp;compared_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a26">Reference</a>(const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a27">Reference</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a28">Reference</a>(const char *name, DataSpace &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a17">registerFunc</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a18">registerFunc</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a3">setEbias</a>(size_t ebias) const </td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a5">setFields</a>(size_t spos, size_t epos, size_t esize, size_t mpos, size_t msize) const </td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a7">setInpad</a>(H5T_pad_t inpad) const </td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a9">setNorm</a>(H5T_norm_t norm) const </td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a4">setOffset</a>(size_t offset) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a2">setOrder</a>(H5T_order_t order) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a14">setOverflow</a>(H5T_overflow_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a6">setPad</a>(H5T_pad_t lsb, H5T_pad_t msb) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a8">setPrecision</a>(size_t precision) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a9">setSize</a>(size_t size) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a21">setTag</a>(const char *tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a22">setTag</a>(const string &amp;tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a19">unregister</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a20">unregister</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a12">~AtomType</a>()</td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a34">~DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1FloatType.html#a14">~FloatType</a>()</td><td><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FloatType.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FloatType.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FloatType.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1027 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1FloatType.html">FloatType</a></div>
+<h1>H5::FloatType Class Reference</h1><code>#include &lt;<a class="el" href="H5FloatType_8h-source.html">H5FloatType.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::FloatType:
+<p><center><img src="classH5_1_1FloatType.png" usemap="#H5::FloatType_map" border="0" alt=""></center>
+<map name="H5::FloatType_map">
+<area href="classH5_1_1AtomType.html" alt="H5::AtomType" shape="rect" coords="0,168,107,192">
+<area href="classH5_1_1DataType.html" alt="H5::DataType" shape="rect" coords="0,112,107,136">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="0,56,107,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,107,24">
+</map>
+<a href="classH5_1_1FloatType-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a0">FloatType</a> (const <a class="el" href="classH5_1_1PredType.html">PredType</a> &amp;pred_type)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a floating-point datatype using a predefined type.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a1">FloatType</a> (const <a class="el" href="classH5_1_1DataSet.html">DataSet</a> &amp;dataset)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the floating-point datatype of the specified dataset.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a2">getEbias</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the exponent bias of a floating-point type.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a3">setEbias</a> (size_t ebias) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the exponent bias of a floating-point type.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a4">getFields</a> (size_t &amp;spos, size_t &amp;epos, size_t &amp;esize, size_t &amp;mpos, size_t &amp;msize) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves floating point datatype bit field information.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a5">setFields</a> (size_t spos, size_t epos, size_t esize, size_t mpos, size_t msize) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets locations and sizes of floating point bit fields.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5T_pad_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a6">getInpad</a> (string &amp;pad_string) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the internal padding type for unused bits in this floating-point datatypes.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a7">setInpad</a> (H5T_pad_t inpad) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Fills unused internal floating point bits.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5T_norm_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a8">getNorm</a> (string &amp;norm_string) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves mantissa normalization of a floating-point datatype.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a9">setNorm</a> (H5T_norm_t norm) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the mantissa normalization of a floating-point datatype.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a10">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a11">FloatType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: Creates a stub floating-point datatype.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a12">FloatType</a> (const hid_t existing_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an <a class="el" href="classH5_1_1FloatType.html">FloatType</a> object using the id of an existing datatype.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a13">FloatType</a> (const <a class="el" href="classH5_1_1FloatType.html">FloatType</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1FloatType.html">FloatType</a> object.  <a href="#a13"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html#a14">~FloatType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a14"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::FloatType::FloatType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FloatType::FloatType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>pred_type</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a floating-point datatype using a predefined type. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>pred_type</em>&nbsp;</td><td>- IN: Predefined datatype </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::FloatType::FloatType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FloatType::FloatType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataSet.html">DataSet</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>dataset</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the floating-point datatype of the specified dataset. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dataset</em>&nbsp;</td><td>- IN: Dataset that this floating-point datatype associates with </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::FloatType::FloatType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FloatType::FloatType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: Creates a stub floating-point datatype. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::FloatType::FloatType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FloatType::FloatType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>existing_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an <a class="el" href="classH5_1_1FloatType.html">FloatType</a> object using the id of an existing datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>existing_id</em>&nbsp;</td><td>- IN: Id of an existing datatype </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::FloatType::FloatType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FloatType::FloatType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1FloatType.html">FloatType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1FloatType.html">FloatType</a> object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a14" doxytag="H5::FloatType::~FloatType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::FloatType::~FloatType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a2" doxytag="H5::FloatType::getEbias"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">size_t H5::FloatType::getEbias           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the exponent bias of a floating-point type. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Exponent bias </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::FloatType::setEbias"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FloatType::setEbias           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>ebias</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the exponent bias of a floating-point type. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>ebias</em>&nbsp;</td><td>- Exponent bias value </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::FloatType::getFields"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FloatType::getFields           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>spos</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>epos</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>esize</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>mpos</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>msize</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves floating point datatype bit field information. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>spos</em>&nbsp;</td><td>- OUT: Retrieved floating-point sign bit </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>epos</em>&nbsp;</td><td>- OUT: Retrieved exponent bit-position </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>esize</em>&nbsp;</td><td>- OUT: Retrieved size of exponent, in bits </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>mpos</em>&nbsp;</td><td>- OUT: Retrieved mantissa bit-position </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>msize</em>&nbsp;</td><td>- OUT: Retrieved size of mantissa, in bits </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::FloatType::setFields"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FloatType::setFields           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>spos</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>epos</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>esize</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>mpos</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>msize</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets locations and sizes of floating point bit fields. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>spos</em>&nbsp;</td><td>- OUT: Sign position, i.e., the bit offset of the floating-point sign bit. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>epos</em>&nbsp;</td><td>- OUT: Exponent bit position </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>esize</em>&nbsp;</td><td>- OUT: Size of exponent, in bits </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>mpos</em>&nbsp;</td><td>- OUT: Mantissa bit-position </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>msize</em>&nbsp;</td><td>- OUT: Size of mantissa, in bits </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::FloatType::getInpad"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5T_pad_t H5::FloatType::getInpad           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>pad_string</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the internal padding type for unused bits in this floating-point datatypes. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Internal padding type, which can be: <ul>
+<li><code>H5T_PAD_ZERO</code> (0) - Set background to zeros </li>
+<li><code>H5T_PAD_ONE</code> (1) - Set background to ones </li>
+<li><code>H5T_PAD_BACKGROUND</code> (2) - Leave background alone </li>
+</ul>
+</dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For your convenience, this function also provides the text string of the returned internal padding type, via parameter <em>pad_string</em>. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::FloatType::setInpad"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FloatType::setInpad           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5T_pad_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>inpad</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Fills unused internal floating point bits. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>inpad</em>&nbsp;</td><td>- IN: Internal padding type </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>If any internal bits of a floating point type are unused (that is, those significant bits which are not part of the sign, exponent, or mantissa), then they will be filled according to the padding value provided by <em>inpad</em>. </dd></dl>
+<dl compact><dt><b></b></dt><dd>Valid values for normalization type include: <ul>
+<li><code>H5T_PAD_ZERO</code> (0) - Set background to zeros </li>
+<li><code>H5T_PAD_ONE</code> (1) - Set background to ones </li>
+<li><code>H5T_PAD_BACKGROUND</code> (2) - Leave background alone </li>
+</ul>
+</dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::FloatType::getNorm"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5T_norm_t H5::FloatType::getNorm           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>norm_string</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves mantissa normalization of a floating-point datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>norm_string</em>&nbsp;</td><td>- OUT: Text string of the normalization type </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Valid normalization type, which can be: <ul>
+<li><code>H5T_NORM_IMPLIED</code> (0) - MSB of mantissa is not stored </li>
+<li><code>H5T_NORM_MSBSET</code> (1) - MSB of mantissa is always 1 </li>
+<li><code>H5T_NORM_NONE</code> (2) - Mantissa is not normalized </li>
+</ul>
+</dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For your convenience, this function also provides the text string of the returned normalization type, via parameter <em>norm_string</em>. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::FloatType::setNorm"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::FloatType::setNorm           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5T_norm_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>norm</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the mantissa normalization of a floating-point datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>norm</em>&nbsp;</td><td>- IN: Mantissa normalization type </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Valid values for normalization type include: <ul>
+<li><code>H5T_NORM_IMPLIED</code> (0) - MSB of mantissa is not stored </li>
+<li><code>H5T_NORM_MSBSET</code> (1) - MSB of mantissa is always 1 </li>
+<li><code>H5T_NORM_NONE</code> (2) - Mantissa is not normalized </li>
+</ul>
+</dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::FloatType::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::FloatType::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1AtomType.html#a10">H5::AtomType</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FloatType.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1FloatType.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Group-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Group-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Group-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,425 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::Group Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1Group.html">H5::Group</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Group.html#a0">close</a>()</td><td><a class="el" href="classH5_1_1Group.html">H5::Group</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a54">CommonFG</a>()</td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a4">createDataSet</a>(const char *name, const DataType &amp;data_type, const DataSpace &amp;data_space, const DSetCreatPropList &amp;create_plist=DSetCreatPropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a5">createDataSet</a>(const string &amp;name, const DataType &amp;data_type, const DataSpace &amp;data_space, const DSetCreatPropList &amp;create_plist=DSetCreatPropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a0">createGroup</a>(const char *name, size_t size_hint=0) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a1">createGroup</a>(const string &amp;name, size_t size_hint=0) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Group.html#a6">fromClass</a>() const </td><td><a class="el" href="classH5_1_1Group.html">H5::Group</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a8">getComment</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a9">getComment</a>(const char *name, size_t bufsize) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a10">getComment</a>(const string &amp;name, size_t bufsize) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a15">getLinkval</a>(const char *name, size_t size) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a16">getLinkval</a>(const string &amp;name, size_t size) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Group.html#a8">getLocId</a>() const </td><td><a class="el" href="classH5_1_1Group.html">H5::Group</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a17">getNumObjs</a>() const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a18">getObjinfo</a>(const char *name, hbool_t follow_link, H5G_stat_t &amp;statbuf) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a19">getObjinfo</a>(const string &amp;name, hbool_t follow_link, H5G_stat_t &amp;statbuf) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a20">getObjnameByIdx</a>(hsize_t idx, string &amp;name, size_t size) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a21">getObjnameByIdx</a>(hsize_t idx) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Group.html#a1">getObjType</a>(void *ref, H5R_type_t ref_type) const </td><td><a class="el" href="classH5_1_1Group.html">H5::Group</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a22">getObjTypeByIdx</a>(hsize_t idx) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a23">getObjTypeByIdx</a>(hsize_t idx, string &amp;type_name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Group.html#a2">getRegion</a>(void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1Group.html">H5::Group</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Group.html#a9">Group</a>()</td><td><a class="el" href="classH5_1_1Group.html">H5::Group</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Group.html#a10">Group</a>(const Group &amp;original)</td><td><a class="el" href="classH5_1_1Group.html">H5::Group</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Group.html#a12">Group</a>(const hid_t group_id)</td><td><a class="el" href="classH5_1_1Group.html">H5::Group</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a24">iterateElems</a>(const char *name, int *idx, H5G_iterate_t op, void *op_data)</td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a25">iterateElems</a>(const string &amp;name, int *idx, H5G_iterate_t op, void *op_data)</td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a26">link</a>(H5G_link_t link_type, const char *curr_name, const char *new_name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a27">link</a>(H5G_link_t link_type, const string &amp;curr_name, const string &amp;new_name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a30">mount</a>(const char *name, H5File &amp;child, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a31">mount</a>(const string &amp;name, H5File &amp;child, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a34">move</a>(const char *src, const char *dst) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a35">move</a>(const string &amp;src, const string &amp;dst) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a38">openArrayType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a39">openArrayType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a40">openCompType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a41">openCompType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a6">openDataSet</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a7">openDataSet</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a36">openDataType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a37">openDataType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a42">openEnumType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a43">openEnumType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a46">openFloatType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a47">openFloatType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a2">openGroup</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a3">openGroup</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a44">openIntType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a45">openIntType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a48">openStrType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a49">openStrType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a50">openVarLenType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a51">openVarLenType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Group.html#a3">Reference</a>(const char *name, DataSpace &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1Group.html">H5::Group</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Group.html#a4">Reference</a>(const char *name) const </td><td><a class="el" href="classH5_1_1Group.html">H5::Group</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Group.html#a5">Reference</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1Group.html">H5::Group</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a11">removeComment</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a12">removeComment</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a13">setComment</a>(const char *name, const char *comment) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a14">setComment</a>(const string &amp;name, const string &amp;comment) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Group.html#a7">throwException</a>(const string func_name, const string msg) const </td><td><a class="el" href="classH5_1_1Group.html">H5::Group</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a28">unlink</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a29">unlink</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a32">unmount</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a33">unmount</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a55">~CommonFG</a>()</td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Group.html#a11">~Group</a>()</td><td><a class="el" href="classH5_1_1Group.html">H5::Group</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Group.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Group.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Group.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,890 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1Group.html">Group</a></div>
+<h1>H5::Group Class Reference</h1><code>#include &lt;<a class="el" href="H5Group_8h-source.html">H5Group.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::Group:
+<p><center><img src="classH5_1_1Group.png" usemap="#H5::Group_map" border="0" alt=""></center>
+<map name="H5::Group_map">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="0,56,107,80">
+<area href="classH5_1_1CommonFG.html" alt="H5::CommonFG" shape="rect" coords="117,56,224,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,107,24">
+</map>
+<a href="classH5_1_1Group-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Group.html#a0">close</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Closes this group.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5G_obj_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Group.html#a1">getObjType</a> (void *ref, H5R_type_t ref_type) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the type of object that an object reference points to.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Group.html#a2">getRegion</a> (void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves a dataspace with the region pointed to selected.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Group.html#a3">Reference</a> (const char *name, <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a reference to an HDF5 object or a dataset region.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Group.html#a4">Reference</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded function, provided for your convenience. It differs from the above function in that it only creates a reference to an HDF5 object, not to a dataset region.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Group.html#a5">Reference</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded function, provided for your convenience. It differs from the above function in that it takes an <code>std::string</code> for the object's name.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Group.html#a6">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Group.html#a7">throwException</a> (const string func_name, const string msg) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Throws <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a>.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual hid_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Group.html#a8">getLocId</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the id of this group.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Group.html#a9">Group</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: creates a stub <a class="el" href="classH5_1_1Group.html">Group</a>.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Group.html#a10">Group</a> (const <a class="el" href="classH5_1_1Group.html">Group</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1Group.html">Group</a> object.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Group.html#a11">~Group</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Properly terminates access to this group.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Group.html#a12">Group</a> (const hid_t group_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a <a class="el" href="classH5_1_1Group.html">Group</a> object using the id of an existing group.  <a href="#a12"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a9" doxytag="H5::Group::Group"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::Group::Group           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: creates a stub <a class="el" href="classH5_1_1Group.html">Group</a>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::Group::Group"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::Group::Group           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1Group.html">Group</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1Group.html">Group</a> object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>original</em>&nbsp;</td><td>- IN: Original group to copy </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::Group::~Group"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::Group::~Group           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Properly terminates access to this group. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::Group::Group"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::Group::Group           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>group_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a <a class="el" href="classH5_1_1Group.html">Group</a> object using the id of an existing group. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>group_id</em>&nbsp;</td><td>- IN: Id of an existing group </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::Group::close"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::Group::close           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Closes this group. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::Group::getObjType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5G_obj_t H5::Group::getObjType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5R_type_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref_type</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the type of object that an object reference points to. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>ref</em>&nbsp;</td><td>- IN: Reference to query </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>ref_type</em>&nbsp;</td><td>- IN: Type of reference to query </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::Group::getRegion"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> H5::Group::getRegion           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5R_type_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref_type</em> = <code>H5R_DATASET_REGION</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves a dataspace with the region pointed to selected. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>ref</em>&nbsp;</td><td>- IN: Reference to get region of </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>ref_type</em>&nbsp;</td><td>- IN: Type of reference to get region of - default </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::Group::Reference"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void * H5::Group::Reference           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dataspace</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5R_type_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref_type</em> = <code>H5R_DATASET_REGION</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a reference to an HDF5 object or a dataset region. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object to be referenced </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dataspace</em>&nbsp;</td><td>- IN: Dataspace with selection </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>ref_type</em>&nbsp;</td><td>- IN: Type of reference; default to <code>H5R_DATASET_REGION</code> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>A reference </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::Group::Reference"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void * H5::Group::Reference           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded function, provided for your convenience. It differs from the above function in that it only creates a reference to an HDF5 object, not to a dataset region. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object to be referenced </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>A reference </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd></dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::Group::Reference"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void * H5::Group::Reference           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded function, provided for your convenience. It differs from the above function in that it takes an <code>std::string</code> for the object's name. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object to be referenced </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::Group::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::Group::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1IdComponent.html#a12">H5::IdComponent</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::Group::throwException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::Group::throwException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>func_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>msg</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const<code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Throws <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a>. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func_name</em>&nbsp;</td><td>- Name of the function where failure occurs </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>msg</em>&nbsp;</td><td>- Message describing the failure </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+
+<p>
+Implements <a class="el" href="classH5_1_1CommonFG.html#a53">H5::CommonFG</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::Group::getLocId"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hid_t H5::Group::getLocId           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the id of this group. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Id of this group </dd></dl>
+
+<p>
+Implements <a class="el" href="classH5_1_1CommonFG.html#a52">H5::CommonFG</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Group.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1Group.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1GroupIException-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1GroupIException-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1GroupIException-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::GroupIException Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e3">clearErrorStack</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e1">dontPrint</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a0">Exception</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a8">Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a9">Exception</a>(const Exception &amp;orig)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e2">getAutoPrint</a>(H5E_auto_t &amp;func, void **client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a4">getCDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a6">getCFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a3">getDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a5">getFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a1">getMajorString</a>(H5E_major_t major_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a2">getMinorString</a>(H5E_minor_t minor_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1GroupIException.html#a0">GroupIException</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1GroupIException.html#a1">GroupIException</a>()</td><td><a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a7">printError</a>(FILE *stream=NULL) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e0">setAutoPrint</a>(H5E_auto_t &amp;func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e4">walkErrorStack</a>(H5E_direction_t direction, H5E_walk_t func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a10">~Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1GroupIException.html#a2">~GroupIException</a>()</td><td><a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1GroupIException.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1GroupIException.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1GroupIException.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,455 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1GroupIException.html">GroupIException</a></div>
+<h1>H5::GroupIException Class Reference</h1><code>#include &lt;<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::GroupIException:
+<p><center><img src="classH5_1_1GroupIException.png" usemap="#H5::GroupIException_map" border="0" alt=""></center>
+<map name="H5::GroupIException_map">
+<area href="classH5_1_1Exception.html" alt="H5::Exception" shape="rect" coords="0,0,127,24">
+</map>
+<a href="classH5_1_1GroupIException-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1GroupIException.html#a0">GroupIException</a> (const string func_name, const string message=<a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a <a class="el" href="classH5_1_1GroupIException.html">GroupIException</a> with the name of the function, in which the failure occurs, and an optional detailed message.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1GroupIException.html#a1">GroupIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1GroupIException.html#a2">~GroupIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a2"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::GroupIException::GroupIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::GroupIException::GroupIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>func_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>message</em> = <code><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a <a class="el" href="classH5_1_1GroupIException.html">GroupIException</a> with the name of the function, in which the failure occurs, and an optional detailed message. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func_name</em>&nbsp;</td><td>- IN: Name of the function where failure occurs </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>message</em>&nbsp;</td><td>- IN: Message on the failure </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::GroupIException::GroupIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::GroupIException::GroupIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::GroupIException::~GroupIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::GroupIException::~GroupIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1GroupIException.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1GroupIException.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5File-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5File-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5File-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,425 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::H5File Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1H5File.html">H5::H5File</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a2">close</a>()</td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a54">CommonFG</a>()</td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a4">createDataSet</a>(const char *name, const DataType &amp;data_type, const DataSpace &amp;data_space, const DSetCreatPropList &amp;create_plist=DSetCreatPropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a5">createDataSet</a>(const string &amp;name, const DataType &amp;data_type, const DataSpace &amp;data_space, const DSetCreatPropList &amp;create_plist=DSetCreatPropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a0">createGroup</a>(const char *name, size_t size_hint=0) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a1">createGroup</a>(const string &amp;name, size_t size_hint=0) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a20">fromClass</a>() const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a3">getAccessPlist</a>() const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a8">getComment</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a9">getComment</a>(const char *name, size_t bufsize) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a10">getComment</a>(const string &amp;name, size_t bufsize) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a4">getCreatePlist</a>() const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a5">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a6">getFileSize</a>() const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a7">getFreeSpace</a>() const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a15">getLinkval</a>(const char *name, size_t size) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a16">getLinkval</a>(const string &amp;name, size_t size) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a22">getLocId</a>() const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a17">getNumObjs</a>() const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a8">getObjCount</a>(unsigned types) const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a9">getObjCount</a>() const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a10">getObjIDs</a>(unsigned types, int max_objs, hid_t *oid_list) const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a18">getObjinfo</a>(const char *name, hbool_t follow_link, H5G_stat_t &amp;statbuf) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a19">getObjinfo</a>(const string &amp;name, hbool_t follow_link, H5G_stat_t &amp;statbuf) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a20">getObjnameByIdx</a>(hsize_t idx, string &amp;name, size_t size) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a21">getObjnameByIdx</a>(hsize_t idx) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a11">getObjType</a>(void *ref, H5R_type_t ref_type) const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a22">getObjTypeByIdx</a>(hsize_t idx) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a23">getObjTypeByIdx</a>(hsize_t idx, string &amp;type_name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a12">getRegion</a>(void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a13">getVFDHandle</a>(FileAccPropList &amp;fapl, void **file_handle) const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a14">getVFDHandle</a>(void **file_handle) const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a0">H5File</a>(const char *name, unsigned int flags, const FileCreatPropList &amp;create_plist=FileCreatPropList::DEFAULT, const FileAccPropList &amp;access_plist=FileAccPropList::DEFAULT)</td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a1">H5File</a>(const string &amp;name, unsigned int flags, const FileCreatPropList &amp;create_plist=FileCreatPropList::DEFAULT, const FileAccPropList &amp;access_plist=FileAccPropList::DEFAULT)</td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a23">H5File</a>()</td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a24">H5File</a>(const H5File &amp;original)</td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#e0">isHdf5</a>(const char *name)</td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#e1">isHdf5</a>(const string &amp;name)</td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a24">iterateElems</a>(const char *name, int *idx, H5G_iterate_t op, void *op_data)</td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a25">iterateElems</a>(const string &amp;name, int *idx, H5G_iterate_t op, void *op_data)</td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a26">link</a>(H5G_link_t link_type, const char *curr_name, const char *new_name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a27">link</a>(H5G_link_t link_type, const string &amp;curr_name, const string &amp;new_name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a30">mount</a>(const char *name, H5File &amp;child, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a31">mount</a>(const string &amp;name, H5File &amp;child, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a34">move</a>(const char *src, const char *dst) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a35">move</a>(const string &amp;src, const string &amp;dst) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a38">openArrayType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a39">openArrayType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a40">openCompType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a41">openCompType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a6">openDataSet</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a7">openDataSet</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a36">openDataType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a37">openDataType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a42">openEnumType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a43">openEnumType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a46">openFloatType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a47">openFloatType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a2">openGroup</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a3">openGroup</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a44">openIntType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a45">openIntType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a48">openStrType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a49">openStrType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a50">openVarLenType</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a51">openVarLenType</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a17">Reference</a>(const char *name, DataSpace &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a18">Reference</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a19">Reference</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a11">removeComment</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a12">removeComment</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a16">reopen</a>()</td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a15">reOpen</a>()</td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a13">setComment</a>(const char *name, const char *comment) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a14">setComment</a>(const string &amp;name, const string &amp;comment) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a21">throwException</a>(const string func_name, const string msg) const </td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a28">unlink</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a29">unlink</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a32">unmount</a>(const char *name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a33">unmount</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1CommonFG.html#a55">~CommonFG</a>()</td><td><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5File.html#a25">~H5File</a>()</td><td><a class="el" href="classH5_1_1H5File.html">H5::H5File</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5File.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5File.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5File.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1591 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1H5File.html">H5File</a></div>
+<h1>H5::H5File Class Reference</h1><code>#include &lt;<a class="el" href="H5File_8h-source.html">H5File.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::H5File:
+<p><center><img src="classH5_1_1H5File.png" usemap="#H5::H5File_map" border="0" alt=""></center>
+<map name="H5::H5File_map">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,107,24">
+<area href="classH5_1_1CommonFG.html" alt="H5::CommonFG" shape="rect" coords="117,0,224,24">
+</map>
+<a href="classH5_1_1H5File-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a0">H5File</a> (const char *name, unsigned int flags, const <a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a> &amp;create_plist=<a class="el" href="classH5_1_1FileCreatPropList.html#s0">FileCreatPropList::DEFAULT</a>, const <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;access_plist=<a class="el" href="classH5_1_1FileAccPropList.html#s0">FileAccPropList::DEFAULT</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates or opens an HDF5 file depending on the parameter flags.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a1">H5File</a> (const string &amp;name, unsigned int flags, const <a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a> &amp;create_plist=<a class="el" href="classH5_1_1FileCreatPropList.html#s0">FileCreatPropList::DEFAULT</a>, const <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;access_plist=<a class="el" href="classH5_1_1FileAccPropList.html#s0">FileAccPropList::DEFAULT</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is another overloaded constructor. It differs from the above constructor only in the type of the <em>name</em> argument.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a2">close</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Closes this HDF5 file.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a3">getAccessPlist</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the access property list of this file.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a4">getCreatePlist</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the creation property list of this file.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a5">getFileName</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the name of this file.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">hsize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a6">getFileSize</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the file size of the HDF5 file.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">hssize_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a7">getFreeSpace</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the amount of free space in the file.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a8">getObjCount</a> (unsigned types) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of opened object IDs (files, datasets, groups and datatypes) in the same file.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a9">getObjCount</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It takes no parameter and returns the object count of all object types.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a10">getObjIDs</a> (unsigned types, int max_objs, hid_t *oid_list) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves a list of opened object IDs (files, datasets, groups and datatypes) in the same file.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5G_obj_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a11">getObjType</a> (void *ref, H5R_type_t ref_type) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the type of object that an object reference points to.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a12">getRegion</a> (void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves a dataspace with the region pointed to selected.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a13">getVFDHandle</a> (<a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;fapl, void **file_handle) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the pointer to the file handle of the low-level file driver.  <a href="#a13"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a14">getVFDHandle</a> (void **file_handle) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts.  <a href="#a14"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a15">reOpen</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reopens this file.  <a href="#a15"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a16">reopen</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Reopens this file.  <a href="#a16"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a17">Reference</a> (const char *name, <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a reference to an Hdf5 object or a dataset region.  <a href="#a17"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a18">Reference</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded function, provided for your convenience. It differs from the above function in that it only creates a reference to an HDF5 object, not to a dataset region.  <a href="#a18"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a19">Reference</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded function, provided for your convenience. It differs from the above function in that it takes an <code>std::string</code> for the object's name.  <a href="#a19"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a20">fromClass</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns this class name.  <a href="#a20"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a21">throwException</a> (const string func_name, const string msg) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Throws file exception - initially implemented for <a class="el" href="classH5_1_1CommonFG.html">CommonFG</a>.  <a href="#a21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual hid_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a22">getLocId</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a23">H5File</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: creates a stub <a class="el" href="classH5_1_1H5File.html">H5File</a> object.  <a href="#a23"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a24">H5File</a> (const <a class="el" href="classH5_1_1H5File.html">H5File</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1H5File.html">H5File</a> object.  <a href="#a24"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#a25">~H5File</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Properly terminates access to this file.  <a href="#a25"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#e0">isHdf5</a> (const char *name)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determines whether a file in HDF5 format.  <a href="#e0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html#e1">isHdf5</a> (const string &amp;name)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It takes an <code>std::string</code> for <em>name</em>.  <a href="#e1"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::H5File::H5File"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::H5File::H5File           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned int&nbsp;</td>
+          <td class="mdname" nowrap> <em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>create_plist</em> = <code><a class="el" href="classH5_1_1FileCreatPropList.html#s0">FileCreatPropList::DEFAULT</a></code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>access_plist</em> = <code><a class="el" href="classH5_1_1FileAccPropList.html#s0">FileAccPropList::DEFAULT</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates or opens an HDF5 file depending on the parameter flags. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the file </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>flags</em>&nbsp;</td><td>- IN: File access flags </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>create_plist</em>&nbsp;</td><td>- IN: File creation property list, used when modifying default file meta-data. Default to <a class="el" href="classH5_1_1FileCreatPropList.html#s0">FileCreatPropList::DEFAULT</a> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>access_plist</em>&nbsp;</td><td>- IN: File access property list. Default to <a class="el" href="classH5_1_1FileCreatPropList.html#s0">FileCreatPropList::DEFAULT</a> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Valid values of <em>flags</em> include: <ul>
+<li><code>H5F_ACC_TRUNC</code> - Truncate file, if it already exists, erasing all data previously stored in the file. </li>
+<li><code>H5F_ACC_EXCL</code> - Fail if file already exists. <code>H5F_ACC_TRUNC</code> and <code>H5F_ACC_EXCL</code> are mutually exclusive </li>
+<li><code>H5F_ACC_DEBUG</code> - print debug information. This flag is used only by HDF5 library developers; it is neither tested nor supported for use in applications. </li>
+</ul>
+</dd></dl>
+<dl compact><dt><b></b></dt><dd>For info on file creation in the case of an already-open file, please refer to the <b>Special</b> <b>case</b> section in the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5F.html#File-Create">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5F.html#File-Create</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::H5File::H5File"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::H5File::H5File           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned int&nbsp;</td>
+          <td class="mdname" nowrap> <em>flags</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>create_plist</em> = <code><a class="el" href="classH5_1_1FileCreatPropList.html#s0">FileCreatPropList::DEFAULT</a></code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>access_plist</em> = <code><a class="el" href="classH5_1_1FileAccPropList.html#s0">FileAccPropList::DEFAULT</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is another overloaded constructor. It differs from the above constructor only in the type of the <em>name</em> argument. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the file - <code>std::string</code> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>flags</em>&nbsp;</td><td>- IN: File access flags </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>create_plist</em>&nbsp;</td><td>- IN: File creation property list, used when modifying default file meta-data. Default to <a class="el" href="classH5_1_1FileCreatPropList.html#s0">FileCreatPropList::DEFAULT</a> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>access_plist</em>&nbsp;</td><td>- IN: File access property list. Default to <a class="el" href="classH5_1_1FileCreatPropList.html#s0">FileCreatPropList::DEFAULT</a> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a23" doxytag="H5::H5File::H5File"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::H5File::H5File           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: creates a stub <a class="el" href="classH5_1_1H5File.html">H5File</a> object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a24" doxytag="H5::H5File::H5File"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::H5File::H5File           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1H5File.html">H5File</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1H5File.html">H5File</a> object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>original</em>&nbsp;</td><td>- IN: <a class="el" href="classH5_1_1H5File.html">H5File</a> instance to copy </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a25" doxytag="H5::H5File::~H5File"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::H5File::~H5File           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Properly terminates access to this file. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a2" doxytag="H5::H5File::close"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5File::close           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Closes this HDF5 file. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::H5File::getAccessPlist"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> H5::H5File::getAccessPlist           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the access property list of this file. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> object </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::H5File::getCreatePlist"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a> H5::H5File::getCreatePlist           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the creation property list of this file. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a> object </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::H5File::getFileName"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::H5File::getFileName           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the name of this file. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>File name </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::H5File::getFileSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hsize_t H5::H5File::getFileSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the file size of the HDF5 file. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>File size </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>This function is called after an existing file is opened in order to learn the true size of the underlying file. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::H5File::getFreeSpace"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hssize_t H5::H5File::getFreeSpace           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the amount of free space in the file. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Amount of free space </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::H5File::getObjCount"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::H5File::getObjCount           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>types</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the number of opened object IDs (files, datasets, groups and datatypes) in the same file. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>types</em>&nbsp;</td><td>- Type of object to retrieve the count </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of opened object IDs </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The valid values for <em>types</em> include: <ul>
+<li><code>H5F_OBJ_FILE</code> - Files only </li>
+<li><code>H5F_OBJ_DATASET</code> - Datasets only </li>
+<li><code>H5F_OBJ_GROUP</code> - Groups only </li>
+<li><code>H5F_OBJ_DATATYPE</code> - Named datatypes only </li>
+<li><code>H5F_OBJ_ATTR</code> - Attributes only </li>
+<li><code>H5F_OBJ_ALL</code> - All of the above, i.e., <code>H5F_OBJ_FILE</code> | <code>H5F_OBJ_DATASET</code> | <code>H5F_OBJ_GROUP</code> | <code>H5F_OBJ_DATATYPE</code> | <code>H5F_OBJ_ATTR</code> </li>
+</ul>
+</dd></dl>
+<dl compact><dt><b></b></dt><dd>Multiple object types can be combined with the logical OR operator (|). </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::H5File::getObjCount"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::H5File::getObjCount           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It takes no parameter and returns the object count of all object types. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of opened object IDs </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::H5File::getObjIDs"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5File::getObjIDs           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname" nowrap> <em>types</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>max_objs</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>hid_t *&nbsp;</td>
+          <td class="mdname" nowrap> <em>oid_list</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves a list of opened object IDs (files, datasets, groups and datatypes) in the same file. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>types</em>&nbsp;</td><td>- Type of object to retrieve the count </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>max_objs</em>&nbsp;</td><td>- Maximum number of object identifiers to place into obj_id_list. </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>oid_list</em>&nbsp;</td><td>- List of open object identifiers </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The valid values for <em>types</em> include: <ul>
+<li><code>H5F_OBJ_FILE</code> - Files only </li>
+<li><code>H5F_OBJ_DATASET</code> - Datasets only </li>
+<li><code>H5F_OBJ_GROUP</code> - Groups only </li>
+<li><code>H5F_OBJ_DATATYPE</code> - Named datatypes only </li>
+<li><code>H5F_OBJ_ATTR</code> - Attributes only </li>
+<li><code>H5F_OBJ_ALL</code> - All of the above, i.e., <code>H5F_OBJ_FILE</code> | <code>H5F_OBJ_DATASET</code> | <code>H5F_OBJ_GROUP</code> | <code>H5F_OBJ_DATATYPE</code> | <code>H5F_OBJ_ATTR</code> </li>
+</ul>
+</dd></dl>
+<dl compact><dt><b></b></dt><dd>Multiple object types can be combined with the logical OR operator (|). </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::H5File::getObjType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5G_obj_t H5::H5File::getObjType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5R_type_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref_type</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the type of object that an object reference points to. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>ref</em>&nbsp;</td><td>- IN: Reference to query </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>ref_type</em>&nbsp;</td><td>- IN: Type of reference to query </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Object type, which can be one of the following: <ul>
+<li><code>H5G_LINK</code> - Object is a symbolic link. </li>
+<li><code>H5G_GROUP</code> - Object is a group. </li>
+<li><code>H5G_DATASET</code> - Object is a dataset. </li>
+<li><code>H5G_TYPE</code> - Object is a named datatype </li>
+</ul>
+</dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::H5File::getRegion"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> H5::H5File::getRegion           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5R_type_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref_type</em> = <code>H5R_DATASET_REGION</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves a dataspace with the region pointed to selected. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>ref</em>&nbsp;</td><td>- IN: Reference to get region of </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>ref_type</em>&nbsp;</td><td>- IN: Type of reference to get region of - default </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::H5File::getVFDHandle"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5File::getVFDHandle           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>fapl</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void **&nbsp;</td>
+          <td class="mdname" nowrap> <em>file_handle</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the pointer to the file handle of the low-level file driver. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>fapl</em>&nbsp;</td><td>- File access property list </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>file_handle</em>&nbsp;</td><td>- Pointer to the file handle being used by the low-level virtual file driver </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For the <code>FAMILY</code> or <code>MULTI</code> drivers, <em>fapl</em> should be defined through the property list functions: <code><a class="el" href="classH5_1_1FileAccPropList.html#a3">FileAccPropList::setFamilyOffset</a></code> for the <code>FAMILY</code> driver and <code><a class="el" href="classH5_1_1FileAccPropList.html#a21">FileAccPropList::setMultiType</a></code> for the <code>MULTI</code> driver.</dd></dl>
+The obtained file handle is dynamic and is valid only while the file remains open; it will be invalid if the file is closed and reopened or opened during a subsequent session.     </td>
+  </tr>
+</table>
+<a class="anchor" name="a14" doxytag="H5::H5File::getVFDHandle"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5File::getVFDHandle           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">void **&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>file_handle</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>file_handle</em>&nbsp;</td><td>- Pointer to the file handle being used by the low-level virtual file driver </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="e0" doxytag="H5::H5File::isHdf5"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool H5::H5File::isHdf5           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [static]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Determines whether a file in HDF5 format. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the file </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>true if the file is in HDF5 format, and false, otherwise </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="e1" doxytag="H5::H5File::isHdf5"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool H5::H5File::isHdf5           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [static]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It takes an <code>std::string</code> for <em>name</em>. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the file - <code>std::string</code> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a15" doxytag="H5::H5File::reOpen"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5File::reOpen           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Reopens this file. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a16" doxytag="H5::H5File::reopen"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5File::reopen           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Reopens this file. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>This function will be replaced by the above function <code>reOpen</code> in future releases. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a17" doxytag="H5::H5File::Reference"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void * H5::H5File::Reference           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dataspace</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>H5R_type_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>ref_type</em> = <code>H5R_DATASET_REGION</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a reference to an Hdf5 object or a dataset region. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object to be referenced </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>dataspace</em>&nbsp;</td><td>- IN: Dataspace with selection </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>ref_type</em>&nbsp;</td><td>- IN: Type of reference; default to <code>H5R_DATASET_REGION</code> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>A reference </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Note that name must be an absolute path to the object in the file. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a18" doxytag="H5::H5File::Reference"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void * H5::H5File::Reference           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded function, provided for your convenience. It differs from the above function in that it only creates a reference to an HDF5 object, not to a dataset region. 
+<p>
+<dl compact><dt><b></b></dt><dd>Note that, for <a class="el" href="classH5_1_1H5File.html">H5File</a>, name must be an absolute path to the object in the file. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a19" doxytag="H5::H5File::Reference"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void * H5::H5File::Reference           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded function, provided for your convenience. It differs from the above function in that it takes an <code>std::string</code> for the object's name. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the object to be referenced - <code>std::string</code> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a20" doxytag="H5::H5File::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::H5File::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns this class name. 
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1IdComponent.html#a12">H5::IdComponent</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a21" doxytag="H5::H5File::throwException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5File::throwException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>func_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>msg</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const<code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Throws file exception - initially implemented for <a class="el" href="classH5_1_1CommonFG.html">CommonFG</a>. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func_name</em>&nbsp;</td><td>- Name of the function where failure occurs </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>msg</em>&nbsp;</td><td>- Message describing the failure </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+
+<p>
+Implements <a class="el" href="classH5_1_1CommonFG.html#a53">H5::CommonFG</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a22" doxytag="H5::H5File::getLocId"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hid_t H5::H5File::getLocId           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+For subclasses, <a class="el" href="classH5_1_1H5File.html">H5File</a> and <a class="el" href="classH5_1_1Group.html">Group</a>, to return the correct object id, i.e. file or group id. 
+<p>
+Implements <a class="el" href="classH5_1_1CommonFG.html#a52">H5::CommonFG</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5File.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5File.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Library-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Library-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Library-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,337 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::H5Library Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1H5Library.html">H5::H5Library</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Library.html#e4">checkVersion</a>(unsigned majnum, unsigned minnum, unsigned relnum)</td><td><a class="el" href="classH5_1_1H5Library.html">H5::H5Library</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Library.html#e1">close</a>()</td><td><a class="el" href="classH5_1_1H5Library.html">H5::H5Library</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Library.html#e2">dontAtExit</a>()</td><td><a class="el" href="classH5_1_1H5Library.html">H5::H5Library</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Library.html#e5">garbageCollect</a>()</td><td><a class="el" href="classH5_1_1H5Library.html">H5::H5Library</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Library.html#e3">getLibVersion</a>(unsigned &amp;majnum, unsigned &amp;minnum, unsigned &amp;relnum)</td><td><a class="el" href="classH5_1_1H5Library.html">H5::H5Library</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Library.html#e0">open</a>()</td><td><a class="el" href="classH5_1_1H5Library.html">H5::H5Library</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Library.html#e6">setFreeListLimits</a>(int reg_global_lim, int reg_list_lim, int arr_global_lim, int arr_list_lim, int blk_global_lim, int blk_list_lim)</td><td><a class="el" href="classH5_1_1H5Library.html">H5::H5Library</a></td><td><code> [static]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Library.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Library.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Library.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,691 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1H5Library.html">H5Library</a></div>
+<h1>H5::H5Library Class Reference</h1><code>#include &lt;<a class="el" href="H5Library_8h-source.html">H5Library.h</a>&gt;</code>
+<p>
+<a href="classH5_1_1H5Library-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Library.html#e0">open</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Initializes the HDF5 library.  <a href="#e0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Library.html#e1">close</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Flushes all data to disk, closes files, and cleans up memory.  <a href="#e1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Library.html#e2">dontAtExit</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Instructs library not to install <code>atexit</code> cleanup routine.  <a href="#e2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Library.html#e3">getLibVersion</a> (unsigned &amp;majnum, unsigned &amp;minnum, unsigned &amp;relnum)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the HDF library release number.  <a href="#e3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Library.html#e4">checkVersion</a> (unsigned majnum, unsigned minnum, unsigned relnum)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Verifies that the arguments match the version numbers compiled into the library.  <a href="#e4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Library.html#e5">garbageCollect</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Walks through all the garbage collection routines for the library, which are supposed to free any unused memory they have allocated.  <a href="#e5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Library.html#e6">setFreeListLimits</a> (int reg_global_lim, int reg_list_lim, int arr_global_lim, int arr_list_lim, int blk_global_lim, int blk_list_lim)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets limits on the different kinds of free lists.  <a href="#e6"></a><br></td></tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="e0" doxytag="H5::H5Library::open"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5Library::open           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [static]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Initializes the HDF5 library. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1LibraryIException.html">H5::LibraryIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="e1" doxytag="H5::H5Library::close"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5Library::close           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [static]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Flushes all data to disk, closes files, and cleans up memory. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1LibraryIException.html">H5::LibraryIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="e2" doxytag="H5::H5Library::dontAtExit"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5Library::dontAtExit           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [static]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Instructs library not to install <code>atexit</code> cleanup routine. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1LibraryIException.html">H5::LibraryIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="e3" doxytag="H5::H5Library::getLibVersion"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5Library::getLibVersion           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>majnum</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>minnum</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>relnum</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"><code> [static]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the HDF library release number. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>majnum</em>&nbsp;</td><td>- OUT: Major version of the library </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>minnum</em>&nbsp;</td><td>- OUT: Minor version of the library </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>relnum</em>&nbsp;</td><td>- OUT: Release number of the library </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1LibraryIException.html">H5::LibraryIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="e4" doxytag="H5::H5Library::checkVersion"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5Library::checkVersion           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">unsigned&nbsp;</td>
+          <td class="mdname" nowrap> <em>majnum</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned&nbsp;</td>
+          <td class="mdname" nowrap> <em>minnum</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned&nbsp;</td>
+          <td class="mdname" nowrap> <em>relnum</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"><code> [static]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Verifies that the arguments match the version numbers compiled into the library. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>majnum</em>&nbsp;</td><td>- IN: Major version of the library </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>minnum</em>&nbsp;</td><td>- IN: Minor version of the library </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>relnum</em>&nbsp;</td><td>- IN: Release number of the library </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1LibraryIException.html">H5::LibraryIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For information about library version, please refer to the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5.html#Library-VersCheck">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5.html#Library-VersCheck</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="e5" doxytag="H5::H5Library::garbageCollect"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5Library::garbageCollect           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [static]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Walks through all the garbage collection routines for the library, which are supposed to free any unused memory they have allocated. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1LibraryIException.html">H5::LibraryIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>It is not required that <a class="el" href="classH5_1_1H5Library.html#e5">H5Library::garbageCollect</a> be called at any particular time; it is only necessary in certain situations, such as when the application has performed actions that cause the library to allocate many objects. The application should call <a class="el" href="classH5_1_1H5Library.html#e5">H5Library::garbageCollect</a> if it eventually releases those objects and wants to reduce the memory used by the library from the peak usage required. </dd></dl>
+<dl compact><dt><b></b></dt><dd>The library automatically garbage collects all the free lists when the application ends. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="e6" doxytag="H5::H5Library::setFreeListLimits"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5Library::setFreeListLimits           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">int&nbsp;</td>
+          <td class="mdname" nowrap> <em>reg_global_lim</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>reg_list_lim</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>arr_global_lim</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>arr_list_lim</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>blk_global_lim</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>int&nbsp;</td>
+          <td class="mdname" nowrap> <em>blk_list_lim</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"><code> [static]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets limits on the different kinds of free lists. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>reg_global_lim</em>&nbsp;</td><td>- IN: Limit on all "regular" free list memory used </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>reg_list_lim</em>&nbsp;</td><td>- IN: Limit on memory used in each "regular" free list </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>arr_global_lim</em>&nbsp;</td><td>- IN: Limit on all "array" free list memory used </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>arr_list_lim</em>&nbsp;</td><td>- IN: Limit on memory used in each "array" free list </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>blk_global_lim</em>&nbsp;</td><td>- IN: Limit on all "block" free list memory used </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>blk_list_lim</em>&nbsp;</td><td>- IN: Limit on memory used in each "block" free list </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1LibraryIException.html">H5::LibraryIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Setting a value of -1 for a limit means no limit of that type. For more information on free list limits, please refer to C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5.html#Library-SetFreeListLimits">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5.html#Library-SetFreeListLimits</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Object-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Object-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Object-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,359 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::H5Object Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a12">fromClass</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Object.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Object.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Object.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1029 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1H5Object.html">H5Object</a></div>
+<h1>H5::H5Object Class Reference</h1><code>#include &lt;<a class="el" href="H5Object_8h-source.html">H5Object.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::H5Object:
+<p><center><img src="classH5_1_1H5Object.png" usemap="#H5::H5Object_map" border="0" alt=""></center>
+<map name="H5::H5Object_map">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="468,0,575,24">
+<area href="classH5_1_1AbstractDs.html" alt="H5::AbstractDs" shape="rect" coords="58,112,165,136">
+<area href="classH5_1_1DataType.html" alt="H5::DataType" shape="rect" coords="468,112,575,136">
+<area href="classH5_1_1Group.html" alt="H5::Group" shape="rect" coords="585,112,692,136">
+<area href="classH5_1_1Attribute.html" alt="H5::Attribute" shape="rect" coords="0,168,107,192">
+<area href="classH5_1_1DataSet.html" alt="H5::DataSet" shape="rect" coords="117,168,224,192">
+<area href="classH5_1_1ArrayType.html" alt="H5::ArrayType" shape="rect" coords="234,168,341,192">
+<area href="classH5_1_1AtomType.html" alt="H5::AtomType" shape="rect" coords="351,168,458,192">
+<area href="classH5_1_1CompType.html" alt="H5::CompType" shape="rect" coords="468,168,575,192">
+<area href="classH5_1_1EnumType.html" alt="H5::EnumType" shape="rect" coords="585,168,692,192">
+<area href="classH5_1_1VarLenType.html" alt="H5::VarLenType" shape="rect" coords="702,168,809,192">
+<area href="classH5_1_1FloatType.html" alt="H5::FloatType" shape="rect" coords="175,224,282,248">
+<area href="classH5_1_1IntType.html" alt="H5::IntType" shape="rect" coords="292,224,399,248">
+<area href="classH5_1_1PredType.html" alt="H5::PredType" shape="rect" coords="409,224,516,248">
+<area href="classH5_1_1StrType.html" alt="H5::StrType" shape="rect" coords="526,224,633,248">
+</map>
+<a href="classH5_1_1H5Object-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1Attribute.html">Attribute</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a> (const char *name, const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;type, const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;space, const <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;create_plist=<a class="el" href="classH5_1_1PropList.html#s0">PropList::DEFAULT</a>) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an attribute for a group, dataset, or named datatype.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1Attribute.html">Attribute</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a> (const string &amp;name, const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;type, const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;space, const <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;create_plist=<a class="el" href="classH5_1_1PropList.html#s0">PropList::DEFAULT</a>) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes a reference to an <code>std::string</code> for <em>name</em>.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1Attribute.html">Attribute</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Opens an attribute given its name.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1Attribute.html">Attribute</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes a reference to an <code>std::string</code> for <em>name</em>.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1Attribute.html">Attribute</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a> (const unsigned int idx) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Opens an attribute given its index.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a5">flush</a> (H5F_scope_t scope) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Flushes all buffers associated with a file to disk.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the name of the file, in which this HDF5 object belongs.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of attributes attached to this HDF5 object.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a> (attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Iterates a user's function over all the attributes of an <a class="el" href="namespaceH5.html">H5</a> object, which may be a group, dataset or named datatype.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Removes the named attribute from this object.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes a reference to an <code>std::string</code> for <em>name</em>.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a> (const char *oldname, const char *newname) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Renames the named attribute from this object.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a> (const string &amp;oldname, const string &amp;newname) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function in that it takes a reference to an <code>std::string</code> for the names.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a> (const <a class="el" href="classH5_1_1H5Object.html">H5Object</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1H5Object.html">H5Object</a> instance.  <a href="#a13"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a14"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a13" doxytag="H5::H5Object::H5Object"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::H5Object::H5Object           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1H5Object.html">H5Object</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1H5Object.html">H5Object</a> instance. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>original</em>&nbsp;</td><td>- IN: <a class="el" href="classH5_1_1H5Object.html">H5Object</a> instance to copy </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a14" doxytag="H5::H5Object::~H5Object"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::H5Object::~H5Object           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::H5Object::createAttribute"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1Attribute.html">Attribute</a> H5::H5Object::createAttribute           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>data_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>data_space</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>create_plist</em> = <code><a class="el" href="classH5_1_1PropList.html#s0">PropList::DEFAULT</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an attribute for a group, dataset, or named datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the attribute </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>data_type</em>&nbsp;</td><td>- IN: Datatype for the attribute </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>data_space</em>&nbsp;</td><td>- IN: Dataspace for the attribute - only simple dataspaces are allowed at this time </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>create_plist</em>&nbsp;</td><td>- IN: Creation property list - default to <a class="el" href="classH5_1_1PropList.html#s0">PropList::DEFAULT</a> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1Attribute.html">Attribute</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>The attribute name specified in <em>name</em> must be unique. Attempting to create an attribute with the same name as an existing attribute will raise an exception, leaving the pre-existing attribute intact. To overwrite an existing attribute with a new attribute of the same name, first delete the existing one with <code><a class="el" href="classH5_1_1H5Object.html#a9">H5Object::removeAttr</a></code>, then recreate it with this function. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::H5Object::createAttribute"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1Attribute.html">Attribute</a> H5::H5Object::createAttribute           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataType.html">DataType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1DataSpace.html">DataSpace</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>space</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>create_plist</em> = <code><a class="el" href="classH5_1_1PropList.html#s0">PropList::DEFAULT</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes a reference to an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::H5Object::openAttribute"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1Attribute.html">Attribute</a> H5::H5Object::openAttribute           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Opens an attribute given its name. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the attribute </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1Attribute.html">Attribute</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::H5Object::openAttribute"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1Attribute.html">Attribute</a> H5::H5Object::openAttribute           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes a reference to an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::H5Object::openAttribute"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1Attribute.html">Attribute</a> H5::H5Object::openAttribute           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const unsigned int&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>idx</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Opens an attribute given its index. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>idx</em>&nbsp;</td><td>- IN: Index of the attribute, a 0-based, non-negative integer </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd><a class="el" href="classH5_1_1Attribute.html">Attribute</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::H5Object::flush"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5Object::flush           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5F_scope_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>scope</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Flushes all buffers associated with a file to disk. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>scope</em>&nbsp;</td><td>- IN: Specifies the scope of the flushing action, which can be either of these values: <ul>
+<li><code>H5F_SCOPE_GLOBAL</code> - Flushes the entire virtual file </li>
+<li><code>H5F_SCOPE_LOCAL</code> - Flushes only the specified file </li>
+</ul>
+</td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>This object is used to identify the file to be flushed. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::H5Object::getFileName"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::H5Object::getFileName           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the name of the file, in which this HDF5 object belongs. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>File name </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::H5Object::getNumAttrs"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::H5Object::getNumAttrs           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the number of attributes attached to this HDF5 object. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Number of attributes </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::H5Object::iterateAttrs"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::H5Object::iterateAttrs           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">attr_operator_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>user_op</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>unsigned *&nbsp;</td>
+          <td class="mdname" nowrap> <em>idx</em> = <code>NULL</code>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>op_data</em> = <code>NULL</code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Iterates a user's function over all the attributes of an <a class="el" href="namespaceH5.html">H5</a> object, which may be a group, dataset or named datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>user_op</em>&nbsp;</td><td>- IN: User's function to operate on each attribute </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>idx</em>&nbsp;</td><td>- IN/OUT: Starting (IN) and ending (OUT) attribute indices </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>op_data</em>&nbsp;</td><td>- IN: User's data to pass to user's operator function </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Returned value of the last operator if it was non-zero, or zero if all attributes were processed </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For information, please refer to the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5A.html#Annot-Iterate">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5A.html#Annot-Iterate</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::H5Object::removeAttr"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5Object::removeAttr           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Removes the named attribute from this object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the attribute to be removed </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::H5Object::removeAttr"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5Object::removeAttr           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes a reference to an <code>std::string</code> for <em>name</em>. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::H5Object::renameAttr"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5Object::renameAttr           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>oldname</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>newname</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Renames the named attribute from this object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>oldname</em>&nbsp;</td><td>- IN: Name of the attribute to be renamed </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>newname</em>&nbsp;</td><td>- IN: New name ame of the attribute </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::H5Object::renameAttr"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::H5Object::renameAttr           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>oldname</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>newname</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function in that it takes a reference to an <code>std::string</code> for the names. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Object.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1H5Object.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponent-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponent-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponent-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,344 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::IdComponent Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a12">fromClass</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponent.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponent.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponent.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,853 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1IdComponent.html">IdComponent</a></div>
+<h1>H5::IdComponent Class Reference</h1><code>#include &lt;<a class="el" href="H5IdComponent_8h-source.html">H5IdComponent.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::IdComponent:
+<p><center><img src="classH5_1_1IdComponent.png" usemap="#H5::IdComponent_map" border="0" alt=""></center>
+<map name="H5::IdComponent_map">
+<area href="classH5_1_1DataSpace.html" alt="H5::DataSpace" shape="rect" coords="0,56,159,80">
+<area href="classH5_1_1H5File.html" alt="H5::H5File" shape="rect" coords="169,56,328,80">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="760,56,919,80">
+<area href="classH5_1_1PropList.html" alt="H5::PropList" shape="rect" coords="1352,56,1511,80">
+<area href="classH5_1_1AbstractDs.html" alt="H5::AbstractDs" shape="rect" coords="169,112,328,136">
+<area href="classH5_1_1DataType.html" alt="H5::DataType" shape="rect" coords="760,112,919,136">
+<area href="classH5_1_1Group.html" alt="H5::Group" shape="rect" coords="929,112,1088,136">
+<area href="classH5_1_1DSetCreatPropList.html" alt="H5::DSetCreatPropList" shape="rect" coords="1098,112,1257,136">
+<area href="classH5_1_1DSetMemXferPropList.html" alt="H5::DSetMemXferPropList" shape="rect" coords="1267,112,1426,136">
+<area href="classH5_1_1FileAccPropList.html" alt="H5::FileAccPropList" shape="rect" coords="1436,112,1595,136">
+<area href="classH5_1_1FileCreatPropList.html" alt="H5::FileCreatPropList" shape="rect" coords="1605,112,1764,136">
+<area href="classH5_1_1Attribute.html" alt="H5::Attribute" shape="rect" coords="84,168,243,192">
+<area href="classH5_1_1DataSet.html" alt="H5::DataSet" shape="rect" coords="253,168,412,192">
+<area href="classH5_1_1ArrayType.html" alt="H5::ArrayType" shape="rect" coords="422,168,581,192">
+<area href="classH5_1_1AtomType.html" alt="H5::AtomType" shape="rect" coords="591,168,750,192">
+<area href="classH5_1_1CompType.html" alt="H5::CompType" shape="rect" coords="760,168,919,192">
+<area href="classH5_1_1EnumType.html" alt="H5::EnumType" shape="rect" coords="929,168,1088,192">
+<area href="classH5_1_1VarLenType.html" alt="H5::VarLenType" shape="rect" coords="1098,168,1257,192">
+<area href="classH5_1_1FloatType.html" alt="H5::FloatType" shape="rect" coords="338,224,497,248">
+<area href="classH5_1_1IntType.html" alt="H5::IntType" shape="rect" coords="507,224,666,248">
+<area href="classH5_1_1PredType.html" alt="H5::PredType" shape="rect" coords="676,224,835,248">
+<area href="classH5_1_1StrType.html" alt="H5::StrType" shape="rect" coords="845,224,1004,248">
+</map>
+<a href="classH5_1_1IdComponent-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a> (hid_t obj_id) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Increment reference counter for a given id.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Increment reference counter for the id of this object.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a> (hid_t obj_id) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decrement reference counter for a given id.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Decrement reference counter for the id of this object.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a> (hid_t obj_id) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the reference counter for a given id.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the reference counter for the id of this object.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1IdComponent.html">IdComponent</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html#a6">operator=</a> (const <a class="el" href="classH5_1_1IdComponent.html">IdComponent</a> &amp;rhs)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Assignment operator.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a> (hid_t new_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the identifier of this object to a new value.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a> (const hid_t h5_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an <a class="el" href="classH5_1_1IdComponent.html">IdComponent</a> object using the id of an existing object.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a> (const <a class="el" href="classH5_1_1IdComponent.html">IdComponent</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1IdComponent.html">IdComponent</a> object.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual hid_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the id of this object.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a> (const char *func_name) const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html#a12">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a13"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a8" doxytag="H5::IdComponent::IdComponent"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::IdComponent::IdComponent           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>h5_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an <a class="el" href="classH5_1_1IdComponent.html">IdComponent</a> object using the id of an existing object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>h5_id</em>&nbsp;</td><td>- IN: Id of an existing object </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::IdComponent::IdComponent"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::IdComponent::IdComponent           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1IdComponent.html">IdComponent</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1IdComponent.html">IdComponent</a> object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>original</em>&nbsp;</td><td>- IN: <a class="el" href="classH5_1_1IdComponent.html">IdComponent</a> instance to copy </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::IdComponent::~IdComponent"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::IdComponent::~IdComponent           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::IdComponent::incRefCount"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::IdComponent::incRefCount           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>obj_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Increment reference counter for a given id. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::IdComponent::incRefCount"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::IdComponent::incRefCount           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Increment reference counter for the id of this object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::IdComponent::decRefCount"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::IdComponent::decRefCount           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>obj_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Decrement reference counter for a given id. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::IdComponent::decRefCount"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::IdComponent::decRefCount           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Decrement reference counter for the id of this object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::IdComponent::getCounter"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::IdComponent::getCounter           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>obj_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the reference counter for a given id. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Reference count </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::IdComponent::getCounter"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">int H5::IdComponent::getCounter           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the reference counter for the id of this object. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Reference count </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::IdComponent::operator="></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1IdComponent.html">IdComponent</a> &amp; H5::IdComponent::operator=           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1IdComponent.html">IdComponent</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>rhs</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Assignment operator. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>rhs</em>&nbsp;</td><td>- IN: Reference to the existing object </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Reference to <a class="el" href="classH5_1_1IdComponent.html">IdComponent</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td>when attempt to close the HDF5 object fails </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::IdComponent::setId"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::IdComponent::setId           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>new_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the identifier of this object to a new value. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></em>&nbsp;</td><td>when the attempt to close the HDF5 object fails </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::IdComponent::getId"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hid_t H5::IdComponent::getId           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the id of this object. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>HDF5 id </dd></dl>
+
+<p>
+Reimplemented in <a class="el" href="classH5_1_1PredType.html#a3">H5::PredType</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::IdComponent::inMemFunc"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::IdComponent::inMemFunc           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>func_name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::IdComponent::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::IdComponent::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented in <a class="el" href="classH5_1_1ArrayType.html#a3">H5::ArrayType</a>, <a class="el" href="classH5_1_1AtomType.html#a10">H5::AtomType</a>, <a class="el" href="classH5_1_1Attribute.html#a9">H5::Attribute</a>, <a class="el" href="classH5_1_1CompType.html#a19">H5::CompType</a>, <a class="el" href="classH5_1_1DataSet.html#a20">H5::DataSet</a>, <a class="el" href="classH5_1_1DataSpace.html#a24">H5::DataSpace</a>, <a class="el" href="classH5_1_1DataType.html#a31">H5::DataType</a>, <a class="el" href="classH5_1_1DSetCreatPropList.html#a24">H5::DSetCreatPropList</a>, <a class="el" href="classH5_1_1DSetMemXferPropList.html#a17">H5::DSetMemXferPropList</a>, <a class="el" href="classH5_1_1EnumType.html#a12">H5::EnumType</a>, <a class="el" href="classH5_1_1FileAccPropList.html#a29">H5::FileAccPropList</a>, <a class="el" href="classH5_1_1FileCreatPropList.html#a9">H5::FileCreatPropList</a>, <a class="el" href="classH5_1_1H5File.html#a20">H5::H5File</a>, <a class="el" href="classH5_1_1FloatType.html#a10">H5::FloatType</a>, <a class="el" href="classH5_1_1Group.html#a6">H5::Group</a>, <a class="el" href="classH5_1_1IntType.html#a4">H5::IntType</a>, <a class="el" href="classH5_1_1PredType.html#a0">H5::PredType</a>, <a class="el" href="classH5_1_1PropList.html#a30">H5::PropList</a>, <a class="el" href="classH5_1_1StrType.html#a8">H5::StrType</a>, and <a class="el" href="classH5_1_1VarLenType.html#a0">H5::VarLenType</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponent.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponent.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponentException-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponentException-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponentException-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::IdComponentException Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e3">clearErrorStack</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e1">dontPrint</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a0">Exception</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a8">Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a9">Exception</a>(const Exception &amp;orig)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e2">getAutoPrint</a>(H5E_auto_t &amp;func, void **client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a4">getCDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a6">getCFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a3">getDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a5">getFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a1">getMajorString</a>(H5E_major_t major_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a2">getMinorString</a>(H5E_minor_t minor_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponentException.html#a0">IdComponentException</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponentException.html#a1">IdComponentException</a>()</td><td><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a7">printError</a>(FILE *stream=NULL) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e0">setAutoPrint</a>(H5E_auto_t &amp;func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e4">walkErrorStack</a>(H5E_direction_t direction, H5E_walk_t func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a10">~Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponentException.html#a2">~IdComponentException</a>()</td><td><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponentException.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponentException.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponentException.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,455 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1IdComponentException.html">IdComponentException</a></div>
+<h1>H5::IdComponentException Class Reference</h1><code>#include &lt;<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::IdComponentException:
+<p><center><img src="classH5_1_1IdComponentException.png" usemap="#H5::IdComponentException_map" border="0" alt=""></center>
+<map name="H5::IdComponentException_map">
+<area href="classH5_1_1Exception.html" alt="H5::Exception" shape="rect" coords="0,0,162,24">
+</map>
+<a href="classH5_1_1IdComponentException-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponentException.html#a0">IdComponentException</a> (const string func_name, const string message=<a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a <a class="el" href="classH5_1_1IdComponentException.html">IdComponentException</a> with the name of the function, in which the failure occurs, and an optional detailed message.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponentException.html#a1">IdComponentException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponentException.html#a2">~IdComponentException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a2"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::IdComponentException::IdComponentException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::IdComponentException::IdComponentException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>func_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>message</em> = <code><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a <a class="el" href="classH5_1_1IdComponentException.html">IdComponentException</a> with the name of the function, in which the failure occurs, and an optional detailed message. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func_name</em>&nbsp;</td><td>- IN: Name of the function where failure occurs </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>message</em>&nbsp;</td><td>- IN: Message on the failure </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::IdComponentException::IdComponentException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::IdComponentException::IdComponentException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::IdComponentException::~IdComponentException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::IdComponentException::~IdComponentException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponentException.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IdComponentException.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IntType-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IntType-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IntType-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,414 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::IntType Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1IntType.html">H5::IntType</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a11">AtomType</a>(const AtomType &amp;original)</td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a2">close</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a5">commit</a>(CommonFG &amp;loc, const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a6">commit</a>(CommonFG &amp;loc, const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a7">committed</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a9">convert</a>(const DataType &amp;dest, size_t nelmts, void *buf, void *background, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a3">copy</a>(const DataType &amp;like_type)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a0">DataType</a>(const H5T_class_t type_class, size_t size)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a1">DataType</a>(const DataType &amp;original)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a32">DataType</a>(const hid_t type_id, bool predtype=false)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a33">DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a24">detectClass</a>(H5T_class_t cls) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a8">find</a>(const DataType &amp;dest, H5T_cdata_t **pcdata) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IntType.html#a4">fromClass</a>() const </td><td><a class="el" href="classH5_1_1IntType.html">H5::IntType</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a4">getClass</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a29">getObjType</a>(void *ref, H5R_type_t ref_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a3">getOffset</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a0">getOrder</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a1">getOrder</a>(string &amp;order_string) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a13">getOverflow</a>(void) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a5">getPad</a>(H5T_pad_t &amp;lsb, H5T_pad_t &amp;msb) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a7">getPrecision</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a30">getRegion</a>(void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IntType.html#a2">getSign</a>() const </td><td><a class="el" href="classH5_1_1IntType.html">H5::IntType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a15">getSize</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a16">getSuper</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a23">getTag</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IntType.html#a0">IntType</a>(const PredType &amp;pred_type)</td><td><a class="el" href="classH5_1_1IntType.html">H5::IntType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IntType.html#a1">IntType</a>(const DataSet &amp;dataset)</td><td><a class="el" href="classH5_1_1IntType.html">H5::IntType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IntType.html#a5">IntType</a>()</td><td><a class="el" href="classH5_1_1IntType.html">H5::IntType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IntType.html#a6">IntType</a>(const hid_t existing_id)</td><td><a class="el" href="classH5_1_1IntType.html">H5::IntType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IntType.html#a7">IntType</a>(const IntType &amp;original)</td><td><a class="el" href="classH5_1_1IntType.html">H5::IntType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#p0">is_predtype</a></td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a25">isVariableStr</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a12">lock</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a10">operator=</a>(const DataType &amp;rhs)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::H5Object::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a11">operator==</a>(const DataType &amp;compared_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a26">Reference</a>(const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a27">Reference</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a28">Reference</a>(const char *name, DataSpace &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a17">registerFunc</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a18">registerFunc</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a4">setOffset</a>(size_t offset) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a2">setOrder</a>(H5T_order_t order) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a14">setOverflow</a>(H5T_overflow_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a6">setPad</a>(H5T_pad_t lsb, H5T_pad_t msb) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a8">setPrecision</a>(size_t precision) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IntType.html#a3">setSign</a>(H5T_sign_t sign) const </td><td><a class="el" href="classH5_1_1IntType.html">H5::IntType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a9">setSize</a>(size_t size) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a21">setTag</a>(const char *tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a22">setTag</a>(const string &amp;tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a19">unregister</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a20">unregister</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a12">~AtomType</a>()</td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a34">~DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IntType.html#a8">~IntType</a>()</td><td><a class="el" href="classH5_1_1IntType.html">H5::IntType</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IntType.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IntType.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IntType.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,685 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1IntType.html">IntType</a></div>
+<h1>H5::IntType Class Reference</h1><code>#include &lt;<a class="el" href="H5IntType_8h-source.html">H5IntType.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::IntType:
+<p><center><img src="classH5_1_1IntType.png" usemap="#H5::IntType_map" border="0" alt=""></center>
+<map name="H5::IntType_map">
+<area href="classH5_1_1AtomType.html" alt="H5::AtomType" shape="rect" coords="0,168,107,192">
+<area href="classH5_1_1DataType.html" alt="H5::DataType" shape="rect" coords="0,112,107,136">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="0,56,107,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,107,24">
+</map>
+<a href="classH5_1_1IntType-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IntType.html#a0">IntType</a> (const <a class="el" href="classH5_1_1PredType.html">PredType</a> &amp;pred_type)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a integer type using a predefined type.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IntType.html#a1">IntType</a> (const <a class="el" href="classH5_1_1DataSet.html">DataSet</a> &amp;dataset)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the integer datatype of the specified dataset.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5T_sign_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IntType.html#a2">getSign</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the sign type for an integer type.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IntType.html#a3">setSign</a> (H5T_sign_t sign) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets the sign property for an integer type.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IntType.html#a4">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IntType.html#a5">IntType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: Creates a stub integer datatype.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IntType.html#a6">IntType</a> (const hid_t existing_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an integer datatype using the id of an existing datatype.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IntType.html#a7">IntType</a> (const <a class="el" href="classH5_1_1IntType.html">IntType</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1IntType.html">IntType</a> object.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IntType.html#a8">~IntType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a8"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::IntType::IntType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::IntType::IntType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>pred_type</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a integer type using a predefined type. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>pred_type</em>&nbsp;</td><td>- IN: Predefined datatype </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::IntType::IntType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::IntType::IntType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataSet.html">DataSet</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>dataset</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the integer datatype of the specified dataset. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dataset</em>&nbsp;</td><td>- IN: Dataset that this integer datatype associates with </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::IntType::IntType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::IntType::IntType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: Creates a stub integer datatype. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::IntType::IntType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::IntType::IntType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>existing_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an integer datatype using the id of an existing datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>existing_id</em>&nbsp;</td><td>- IN: Id of an existing datatype </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::IntType::IntType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::IntType::IntType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1IntType.html">IntType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1IntType.html">IntType</a> object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::IntType::~IntType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::IntType::~IntType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a2" doxytag="H5::IntType::getSign"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5T_sign_t H5::IntType::getSign           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the sign type for an integer type. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Valid sign type </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::IntType::setSign"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::IntType::setSign           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5T_sign_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>sign</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets the sign property for an integer type. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>sign</em>&nbsp;</td><td>- IN: Sign type </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::IntType::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::IntType::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1AtomType.html#a10">H5::AtomType</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IntType.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1IntType.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1LibraryIException-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1LibraryIException-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1LibraryIException-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::LibraryIException Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1LibraryIException.html">H5::LibraryIException</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e3">clearErrorStack</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e1">dontPrint</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a0">Exception</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a8">Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a9">Exception</a>(const Exception &amp;orig)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e2">getAutoPrint</a>(H5E_auto_t &amp;func, void **client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a4">getCDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a6">getCFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a3">getDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a5">getFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a1">getMajorString</a>(H5E_major_t major_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a2">getMinorString</a>(H5E_minor_t minor_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1LibraryIException.html#a0">LibraryIException</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1LibraryIException.html">H5::LibraryIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1LibraryIException.html#a1">LibraryIException</a>()</td><td><a class="el" href="classH5_1_1LibraryIException.html">H5::LibraryIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a7">printError</a>(FILE *stream=NULL) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e0">setAutoPrint</a>(H5E_auto_t &amp;func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e4">walkErrorStack</a>(H5E_direction_t direction, H5E_walk_t func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a10">~Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1LibraryIException.html#a2">~LibraryIException</a>()</td><td><a class="el" href="classH5_1_1LibraryIException.html">H5::LibraryIException</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1LibraryIException.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1LibraryIException.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1LibraryIException.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,455 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1LibraryIException.html">LibraryIException</a></div>
+<h1>H5::LibraryIException Class Reference</h1><code>#include &lt;<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::LibraryIException:
+<p><center><img src="classH5_1_1LibraryIException.png" usemap="#H5::LibraryIException_map" border="0" alt=""></center>
+<map name="H5::LibraryIException_map">
+<area href="classH5_1_1Exception.html" alt="H5::Exception" shape="rect" coords="0,0,133,24">
+</map>
+<a href="classH5_1_1LibraryIException-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1LibraryIException.html#a0">LibraryIException</a> (const string func_name, const string message=<a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a <a class="el" href="classH5_1_1LibraryIException.html">LibraryIException</a> with the name of the function, in which the failure occurs, and an optional detailed message.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1LibraryIException.html#a1">LibraryIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1LibraryIException.html#a2">~LibraryIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a2"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::LibraryIException::LibraryIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::LibraryIException::LibraryIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>func_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>message</em> = <code><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a <a class="el" href="classH5_1_1LibraryIException.html">LibraryIException</a> with the name of the function, in which the failure occurs, and an optional detailed message. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func_name</em>&nbsp;</td><td>- IN: Name of the function where failure occurs </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>message</em>&nbsp;</td><td>- IN: Message on the failure </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::LibraryIException::LibraryIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::LibraryIException::LibraryIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::LibraryIException::~LibraryIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::LibraryIException::~LibraryIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1LibraryIException.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1LibraryIException.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PredType-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PredType-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PredType-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,534 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::PredType Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1PredType.html">H5::PredType</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s59">ALPHA_B16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s60">ALPHA_B32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s61">ALPHA_B64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s58">ALPHA_B8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s62">ALPHA_F32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s63">ALPHA_F64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s51">ALPHA_I16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s52">ALPHA_I32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s53">ALPHA_I64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s50">ALPHA_I8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s55">ALPHA_U16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s56">ALPHA_U32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s57">ALPHA_U64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s54">ALPHA_U8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a11">AtomType</a>(const AtomType &amp;original)</td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s26">C_S1</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a2">close</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a5">commit</a>(CommonFG &amp;loc, const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a6">commit</a>(CommonFG &amp;loc, const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a7">committed</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a9">convert</a>(const DataType &amp;dest, size_t nelmts, void *buf, void *background, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a3">copy</a>(const DataType &amp;like_type)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a0">DataType</a>(const H5T_class_t type_class, size_t size)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a1">DataType</a>(const DataType &amp;original)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a32">DataType</a>(const hid_t type_id, bool predtype=false)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a33">DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a24">detectClass</a>(H5T_class_t cls) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a8">find</a>(const DataType &amp;dest, H5T_cdata_t **pcdata) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s27">FORTRAN_S1</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#a0">fromClass</a>() const </td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a4">getClass</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#a3">getId</a>() const </td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a29">getObjType</a>(void *ref, H5R_type_t ref_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a3">getOffset</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a0">getOrder</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a1">getOrder</a>(string &amp;order_string) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a13">getOverflow</a>(void) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a5">getPad</a>(H5T_pad_t &amp;lsb, H5T_pad_t &amp;msb) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a7">getPrecision</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a30">getRegion</a>(void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a15">getSize</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a16">getSuper</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a23">getTag</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s28">IEEE_F32BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s29">IEEE_F32LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s30">IEEE_F64BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s31">IEEE_F64LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s45">INTEL_B16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s46">INTEL_B32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s47">INTEL_B64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s44">INTEL_B8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s48">INTEL_F32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s49">INTEL_F64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s37">INTEL_I16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s38">INTEL_I32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s39">INTEL_I64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s36">INTEL_I8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s41">INTEL_U16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s42">INTEL_U32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s43">INTEL_U64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s40">INTEL_U8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#p0">is_predtype</a></td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a25">isVariableStr</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a12">lock</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s73">MIPS_B16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s74">MIPS_B32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s75">MIPS_B64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s72">MIPS_B8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s76">MIPS_F32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s77">MIPS_F64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s65">MIPS_I16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s66">MIPS_I32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s67">MIPS_I64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s64">MIPS_I8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s69">MIPS_U16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s70">MIPS_U32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s71">MIPS_U64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s68">MIPS_U8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s93">NATIVE_B16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s94">NATIVE_B32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s95">NATIVE_B64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s92">NATIVE_B8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s78">NATIVE_CHAR</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s90">NATIVE_DOUBLE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s89">NATIVE_FLOAT</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s100">NATIVE_HBOOL</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s99">NATIVE_HERR</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s97">NATIVE_HSIZE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s98">NATIVE_HSSIZE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s83">NATIVE_INT</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s107">NATIVE_INT16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s113">NATIVE_INT32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s119">NATIVE_INT64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s101">NATIVE_INT8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s111">NATIVE_INT_FAST16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s117">NATIVE_INT_FAST32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s123">NATIVE_INT_FAST64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s105">NATIVE_INT_FAST8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s109">NATIVE_INT_LEAST16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s115">NATIVE_INT_LEAST32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s121">NATIVE_INT_LEAST64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s103">NATIVE_INT_LEAST8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s91">NATIVE_LDOUBLE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s87">NATIVE_LLONG</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s85">NATIVE_LONG</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s96">NATIVE_OPAQUE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s79">NATIVE_SCHAR</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s81">NATIVE_SHORT</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s80">NATIVE_UCHAR</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s84">NATIVE_UINT</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s108">NATIVE_UINT16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s114">NATIVE_UINT32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s120">NATIVE_UINT64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s102">NATIVE_UINT8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s112">NATIVE_UINT_FAST16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s118">NATIVE_UINT_FAST32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s124">NATIVE_UINT_FAST64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s106">NATIVE_UINT_FAST8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s110">NATIVE_UINT_LEAST16</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s116">NATIVE_UINT_LEAST32</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s122">NATIVE_UINT_LEAST64</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s104">NATIVE_UINT_LEAST8</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s88">NATIVE_ULLONG</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s86">NATIVE_ULONG</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s82">NATIVE_USHORT</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#a1">operator=</a>(const PredType &amp;rhs)</td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a10">H5::AtomType::operator=</a>(const DataType &amp;rhs)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::H5Object::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a11">operator==</a>(const DataType &amp;compared_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#a2">PredType</a>(const PredType &amp;original)</td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a26">Reference</a>(const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a27">Reference</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a28">Reference</a>(const char *name, DataSpace &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a17">registerFunc</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a18">registerFunc</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a4">setOffset</a>(size_t offset) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a2">setOrder</a>(H5T_order_t order) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a14">setOverflow</a>(H5T_overflow_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a6">setPad</a>(H5T_pad_t lsb, H5T_pad_t msb) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a8">setPrecision</a>(size_t precision) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a9">setSize</a>(size_t size) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a21">setTag</a>(const char *tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a22">setTag</a>(const string &amp;tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s18">STD_B16BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s19">STD_B16LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s20">STD_B32BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s21">STD_B32LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s22">STD_B64BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s23">STD_B64LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s16">STD_B8BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s17">STD_B8LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s2">STD_I16BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s3">STD_I16LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s4">STD_I32BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s5">STD_I32LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s6">STD_I64BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s7">STD_I64LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s0">STD_I8BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s1">STD_I8LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s25">STD_REF_DSETREG</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s24">STD_REF_OBJ</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s10">STD_U16BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s11">STD_U16LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s12">STD_U32BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s13">STD_U32LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s14">STD_U64BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s15">STD_U64LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s8">STD_U8BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s9">STD_U8LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s32">UNIX_D32BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s33">UNIX_D32LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s34">UNIX_D64BE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#s35">UNIX_D64LE</a></td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a19">unregister</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a20">unregister</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a12">~AtomType</a>()</td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a34">~DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PredType.html#a4">~PredType</a>()</td><td><a class="el" href="classH5_1_1PredType.html">H5::PredType</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PredType.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PredType.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PredType.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3647 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1PredType.html">PredType</a></div>
+<h1>H5::PredType Class Reference</h1><code>#include &lt;<a class="el" href="H5PredType_8h-source.html">H5PredType.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::PredType:
+<p><center><img src="classH5_1_1PredType.png" usemap="#H5::PredType_map" border="0" alt=""></center>
+<map name="H5::PredType_map">
+<area href="classH5_1_1AtomType.html" alt="H5::AtomType" shape="rect" coords="0,168,107,192">
+<area href="classH5_1_1DataType.html" alt="H5::DataType" shape="rect" coords="0,112,107,136">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="0,56,107,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,107,24">
+</map>
+<a href="classH5_1_1PredType-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#a0">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1PredType.html">PredType</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#a1">operator=</a> (const <a class="el" href="classH5_1_1PredType.html">PredType</a> &amp;rhs)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Assignment operator.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#a2">PredType</a> (const <a class="el" href="classH5_1_1PredType.html">PredType</a> &amp;original)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual hid_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#a3">getId</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the HDF5 predefined type id.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#a4">~PredType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a4"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s0">STD_I8BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s1">STD_I8LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s2">STD_I16BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s3">STD_I16LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s4">STD_I32BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s5">STD_I32LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s6">STD_I64BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s7">STD_I64LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s8">STD_U8BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s9">STD_U8LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s10">STD_U16BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s11">STD_U16LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s12">STD_U32BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s13">STD_U32LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s14">STD_U64BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s15">STD_U64LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s16">STD_B8BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s17">STD_B8LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s18">STD_B16BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s19">STD_B16LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s20">STD_B32BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s21">STD_B32LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s22">STD_B64BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s23">STD_B64LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s24">STD_REF_OBJ</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s25">STD_REF_DSETREG</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s26">C_S1</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s27">FORTRAN_S1</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s28">IEEE_F32BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s29">IEEE_F32LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s30">IEEE_F64BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s31">IEEE_F64LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s32">UNIX_D32BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s33">UNIX_D32LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s34">UNIX_D64BE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s35">UNIX_D64LE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s36">INTEL_I8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s37">INTEL_I16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s38">INTEL_I32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s39">INTEL_I64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s40">INTEL_U8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s41">INTEL_U16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s42">INTEL_U32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s43">INTEL_U64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s44">INTEL_B8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s45">INTEL_B16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s46">INTEL_B32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s47">INTEL_B64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s48">INTEL_F32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s49">INTEL_F64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s50">ALPHA_I8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s51">ALPHA_I16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s52">ALPHA_I32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s53">ALPHA_I64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s54">ALPHA_U8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s55">ALPHA_U16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s56">ALPHA_U32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s57">ALPHA_U64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s58">ALPHA_B8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s59">ALPHA_B16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s60">ALPHA_B32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s61">ALPHA_B64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s62">ALPHA_F32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s63">ALPHA_F64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s64">MIPS_I8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s65">MIPS_I16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s66">MIPS_I32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s67">MIPS_I64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s68">MIPS_U8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s69">MIPS_U16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s70">MIPS_U32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s71">MIPS_U64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s72">MIPS_B8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s73">MIPS_B16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s74">MIPS_B32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s75">MIPS_B64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s76">MIPS_F32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s77">MIPS_F64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s78">NATIVE_CHAR</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s79">NATIVE_SCHAR</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s80">NATIVE_UCHAR</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s81">NATIVE_SHORT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s82">NATIVE_USHORT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s83">NATIVE_INT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s84">NATIVE_UINT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s85">NATIVE_LONG</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s86">NATIVE_ULONG</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s87">NATIVE_LLONG</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s88">NATIVE_ULLONG</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s89">NATIVE_FLOAT</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s90">NATIVE_DOUBLE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s91">NATIVE_LDOUBLE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s92">NATIVE_B8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s93">NATIVE_B16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s94">NATIVE_B32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s95">NATIVE_B64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s96">NATIVE_OPAQUE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s97">NATIVE_HSIZE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s98">NATIVE_HSSIZE</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s99">NATIVE_HERR</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s100">NATIVE_HBOOL</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s101">NATIVE_INT8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s102">NATIVE_UINT8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s103">NATIVE_INT_LEAST8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s104">NATIVE_UINT_LEAST8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s105">NATIVE_INT_FAST8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s106">NATIVE_UINT_FAST8</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s107">NATIVE_INT16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s108">NATIVE_UINT16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s109">NATIVE_INT_LEAST16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s110">NATIVE_UINT_LEAST16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s111">NATIVE_INT_FAST16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s112">NATIVE_UINT_FAST16</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s113">NATIVE_INT32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s114">NATIVE_UINT32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s115">NATIVE_INT_LEAST32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s116">NATIVE_UINT_LEAST32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s117">NATIVE_INT_FAST32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s118">NATIVE_UINT_FAST32</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s119">NATIVE_INT64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s120">NATIVE_UINT64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s121">NATIVE_INT_LEAST64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s122">NATIVE_UINT_LEAST64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s123">NATIVE_INT_FAST64</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PredType.html">PredType</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html#s124">NATIVE_UINT_FAST64</a></td></tr>
+
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a2" doxytag="H5::PredType::PredType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::PredType::PredType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::PredType::~PredType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::PredType::~PredType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::PredType::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::PredType::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1AtomType.html#a10">H5::AtomType</a>.    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::PredType::operator="></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1PredType.html">PredType</a> &amp; H5::PredType::operator=           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>rhs</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Assignment operator. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>rhs</em>&nbsp;</td><td>- IN: Reference to the predefined datatype </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Reference to <a class="el" href="classH5_1_1PredType.html">PredType</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::PredType::getId"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hid_t H5::PredType::getId           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the HDF5 predefined type id. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>HDF5 predefined type id or INVALID </dd></dl>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1IdComponent.html#a10">H5::IdComponent</a>.    </td>
+  </tr>
+</table>
+<hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="s0" doxytag="H5::PredType::STD_I8BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s0">H5::PredType::STD_I8BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s1" doxytag="H5::PredType::STD_I8LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s1">H5::PredType::STD_I8LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s2" doxytag="H5::PredType::STD_I16BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s2">H5::PredType::STD_I16BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s3" doxytag="H5::PredType::STD_I16LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s3">H5::PredType::STD_I16LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s4" doxytag="H5::PredType::STD_I32BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s4">H5::PredType::STD_I32BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s5" doxytag="H5::PredType::STD_I32LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s5">H5::PredType::STD_I32LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s6" doxytag="H5::PredType::STD_I64BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s6">H5::PredType::STD_I64BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s7" doxytag="H5::PredType::STD_I64LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s7">H5::PredType::STD_I64LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s8" doxytag="H5::PredType::STD_U8BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s8">H5::PredType::STD_U8BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s9" doxytag="H5::PredType::STD_U8LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s9">H5::PredType::STD_U8LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s10" doxytag="H5::PredType::STD_U16BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s10">H5::PredType::STD_U16BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s11" doxytag="H5::PredType::STD_U16LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s11">H5::PredType::STD_U16LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s12" doxytag="H5::PredType::STD_U32BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s12">H5::PredType::STD_U32BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s13" doxytag="H5::PredType::STD_U32LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s13">H5::PredType::STD_U32LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s14" doxytag="H5::PredType::STD_U64BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s14">H5::PredType::STD_U64BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s15" doxytag="H5::PredType::STD_U64LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s15">H5::PredType::STD_U64LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s16" doxytag="H5::PredType::STD_B8BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s16">H5::PredType::STD_B8BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s17" doxytag="H5::PredType::STD_B8LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s17">H5::PredType::STD_B8LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s18" doxytag="H5::PredType::STD_B16BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s18">H5::PredType::STD_B16BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s19" doxytag="H5::PredType::STD_B16LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s19">H5::PredType::STD_B16LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s20" doxytag="H5::PredType::STD_B32BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s20">H5::PredType::STD_B32BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s21" doxytag="H5::PredType::STD_B32LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s21">H5::PredType::STD_B32LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s22" doxytag="H5::PredType::STD_B64BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s22">H5::PredType::STD_B64BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s23" doxytag="H5::PredType::STD_B64LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s23">H5::PredType::STD_B64LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s24" doxytag="H5::PredType::STD_REF_OBJ"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s24">H5::PredType::STD_REF_OBJ</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s25" doxytag="H5::PredType::STD_REF_DSETREG"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s25">H5::PredType::STD_REF_DSETREG</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s26" doxytag="H5::PredType::C_S1"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s26">H5::PredType::C_S1</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s27" doxytag="H5::PredType::FORTRAN_S1"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s27">H5::PredType::FORTRAN_S1</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s28" doxytag="H5::PredType::IEEE_F32BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s28">H5::PredType::IEEE_F32BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s29" doxytag="H5::PredType::IEEE_F32LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s29">H5::PredType::IEEE_F32LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s30" doxytag="H5::PredType::IEEE_F64BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s30">H5::PredType::IEEE_F64BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s31" doxytag="H5::PredType::IEEE_F64LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s31">H5::PredType::IEEE_F64LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s32" doxytag="H5::PredType::UNIX_D32BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s32">H5::PredType::UNIX_D32BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s33" doxytag="H5::PredType::UNIX_D32LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s33">H5::PredType::UNIX_D32LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s34" doxytag="H5::PredType::UNIX_D64BE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s34">H5::PredType::UNIX_D64BE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s35" doxytag="H5::PredType::UNIX_D64LE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s35">H5::PredType::UNIX_D64LE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s36" doxytag="H5::PredType::INTEL_I8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s36">H5::PredType::INTEL_I8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s37" doxytag="H5::PredType::INTEL_I16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s37">H5::PredType::INTEL_I16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s38" doxytag="H5::PredType::INTEL_I32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s38">H5::PredType::INTEL_I32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s39" doxytag="H5::PredType::INTEL_I64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s39">H5::PredType::INTEL_I64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s40" doxytag="H5::PredType::INTEL_U8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s40">H5::PredType::INTEL_U8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s41" doxytag="H5::PredType::INTEL_U16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s41">H5::PredType::INTEL_U16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s42" doxytag="H5::PredType::INTEL_U32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s42">H5::PredType::INTEL_U32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s43" doxytag="H5::PredType::INTEL_U64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s43">H5::PredType::INTEL_U64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s44" doxytag="H5::PredType::INTEL_B8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s44">H5::PredType::INTEL_B8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s45" doxytag="H5::PredType::INTEL_B16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s45">H5::PredType::INTEL_B16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s46" doxytag="H5::PredType::INTEL_B32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s46">H5::PredType::INTEL_B32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s47" doxytag="H5::PredType::INTEL_B64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s47">H5::PredType::INTEL_B64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s48" doxytag="H5::PredType::INTEL_F32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s48">H5::PredType::INTEL_F32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s49" doxytag="H5::PredType::INTEL_F64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s49">H5::PredType::INTEL_F64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s50" doxytag="H5::PredType::ALPHA_I8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s50">H5::PredType::ALPHA_I8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s51" doxytag="H5::PredType::ALPHA_I16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s51">H5::PredType::ALPHA_I16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s52" doxytag="H5::PredType::ALPHA_I32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s52">H5::PredType::ALPHA_I32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s53" doxytag="H5::PredType::ALPHA_I64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s53">H5::PredType::ALPHA_I64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s54" doxytag="H5::PredType::ALPHA_U8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s54">H5::PredType::ALPHA_U8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s55" doxytag="H5::PredType::ALPHA_U16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s55">H5::PredType::ALPHA_U16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s56" doxytag="H5::PredType::ALPHA_U32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s56">H5::PredType::ALPHA_U32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s57" doxytag="H5::PredType::ALPHA_U64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s57">H5::PredType::ALPHA_U64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s58" doxytag="H5::PredType::ALPHA_B8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s58">H5::PredType::ALPHA_B8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s59" doxytag="H5::PredType::ALPHA_B16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s59">H5::PredType::ALPHA_B16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s60" doxytag="H5::PredType::ALPHA_B32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s60">H5::PredType::ALPHA_B32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s61" doxytag="H5::PredType::ALPHA_B64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s61">H5::PredType::ALPHA_B64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s62" doxytag="H5::PredType::ALPHA_F32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s62">H5::PredType::ALPHA_F32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s63" doxytag="H5::PredType::ALPHA_F64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s63">H5::PredType::ALPHA_F64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s64" doxytag="H5::PredType::MIPS_I8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s64">H5::PredType::MIPS_I8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s65" doxytag="H5::PredType::MIPS_I16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s65">H5::PredType::MIPS_I16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s66" doxytag="H5::PredType::MIPS_I32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s66">H5::PredType::MIPS_I32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s67" doxytag="H5::PredType::MIPS_I64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s67">H5::PredType::MIPS_I64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s68" doxytag="H5::PredType::MIPS_U8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s68">H5::PredType::MIPS_U8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s69" doxytag="H5::PredType::MIPS_U16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s69">H5::PredType::MIPS_U16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s70" doxytag="H5::PredType::MIPS_U32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s70">H5::PredType::MIPS_U32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s71" doxytag="H5::PredType::MIPS_U64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s71">H5::PredType::MIPS_U64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s72" doxytag="H5::PredType::MIPS_B8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s72">H5::PredType::MIPS_B8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s73" doxytag="H5::PredType::MIPS_B16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s73">H5::PredType::MIPS_B16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s74" doxytag="H5::PredType::MIPS_B32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s74">H5::PredType::MIPS_B32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s75" doxytag="H5::PredType::MIPS_B64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s75">H5::PredType::MIPS_B64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s76" doxytag="H5::PredType::MIPS_F32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s76">H5::PredType::MIPS_F32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s77" doxytag="H5::PredType::MIPS_F64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s77">H5::PredType::MIPS_F64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s78" doxytag="H5::PredType::NATIVE_CHAR"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s78">H5::PredType::NATIVE_CHAR</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s79" doxytag="H5::PredType::NATIVE_SCHAR"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s79">H5::PredType::NATIVE_SCHAR</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s80" doxytag="H5::PredType::NATIVE_UCHAR"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s80">H5::PredType::NATIVE_UCHAR</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s81" doxytag="H5::PredType::NATIVE_SHORT"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s81">H5::PredType::NATIVE_SHORT</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s82" doxytag="H5::PredType::NATIVE_USHORT"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s82">H5::PredType::NATIVE_USHORT</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s83" doxytag="H5::PredType::NATIVE_INT"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s83">H5::PredType::NATIVE_INT</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+<dl compact><dt><b>Examples: </b></dt><dd>
+<a class="el" href="chunks_8cpp-example.html#a1">chunks.cpp</a>, <a class="el" href="create_8cpp-example.html#a3">create.cpp</a>, and <a class="el" href="extend__ds_8cpp-example.html#a5">extend_ds.cpp</a>.</dl>    </td>
+  </tr>
+</table>
+<a class="anchor" name="s84" doxytag="H5::PredType::NATIVE_UINT"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s84">H5::PredType::NATIVE_UINT</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s85" doxytag="H5::PredType::NATIVE_LONG"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s85">H5::PredType::NATIVE_LONG</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s86" doxytag="H5::PredType::NATIVE_ULONG"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s86">H5::PredType::NATIVE_ULONG</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s87" doxytag="H5::PredType::NATIVE_LLONG"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s87">H5::PredType::NATIVE_LLONG</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s88" doxytag="H5::PredType::NATIVE_ULLONG"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s88">H5::PredType::NATIVE_ULLONG</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s89" doxytag="H5::PredType::NATIVE_FLOAT"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s89">H5::PredType::NATIVE_FLOAT</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s90" doxytag="H5::PredType::NATIVE_DOUBLE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s90">H5::PredType::NATIVE_DOUBLE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s91" doxytag="H5::PredType::NATIVE_LDOUBLE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s91">H5::PredType::NATIVE_LDOUBLE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s92" doxytag="H5::PredType::NATIVE_B8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s92">H5::PredType::NATIVE_B8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s93" doxytag="H5::PredType::NATIVE_B16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s93">H5::PredType::NATIVE_B16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s94" doxytag="H5::PredType::NATIVE_B32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s94">H5::PredType::NATIVE_B32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s95" doxytag="H5::PredType::NATIVE_B64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s95">H5::PredType::NATIVE_B64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s96" doxytag="H5::PredType::NATIVE_OPAQUE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s96">H5::PredType::NATIVE_OPAQUE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s97" doxytag="H5::PredType::NATIVE_HSIZE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s97">H5::PredType::NATIVE_HSIZE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s98" doxytag="H5::PredType::NATIVE_HSSIZE"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s98">H5::PredType::NATIVE_HSSIZE</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s99" doxytag="H5::PredType::NATIVE_HERR"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s99">H5::PredType::NATIVE_HERR</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s100" doxytag="H5::PredType::NATIVE_HBOOL"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s100">H5::PredType::NATIVE_HBOOL</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s101" doxytag="H5::PredType::NATIVE_INT8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s101">H5::PredType::NATIVE_INT8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s102" doxytag="H5::PredType::NATIVE_UINT8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s102">H5::PredType::NATIVE_UINT8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s103" doxytag="H5::PredType::NATIVE_INT_LEAST8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s103">H5::PredType::NATIVE_INT_LEAST8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s104" doxytag="H5::PredType::NATIVE_UINT_LEAST8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s104">H5::PredType::NATIVE_UINT_LEAST8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s105" doxytag="H5::PredType::NATIVE_INT_FAST8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s105">H5::PredType::NATIVE_INT_FAST8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s106" doxytag="H5::PredType::NATIVE_UINT_FAST8"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s106">H5::PredType::NATIVE_UINT_FAST8</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s107" doxytag="H5::PredType::NATIVE_INT16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s107">H5::PredType::NATIVE_INT16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s108" doxytag="H5::PredType::NATIVE_UINT16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s108">H5::PredType::NATIVE_UINT16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s109" doxytag="H5::PredType::NATIVE_INT_LEAST16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s109">H5::PredType::NATIVE_INT_LEAST16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s110" doxytag="H5::PredType::NATIVE_UINT_LEAST16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s110">H5::PredType::NATIVE_UINT_LEAST16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s111" doxytag="H5::PredType::NATIVE_INT_FAST16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s111">H5::PredType::NATIVE_INT_FAST16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s112" doxytag="H5::PredType::NATIVE_UINT_FAST16"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s112">H5::PredType::NATIVE_UINT_FAST16</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s113" doxytag="H5::PredType::NATIVE_INT32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s113">H5::PredType::NATIVE_INT32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s114" doxytag="H5::PredType::NATIVE_UINT32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s114">H5::PredType::NATIVE_UINT32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s115" doxytag="H5::PredType::NATIVE_INT_LEAST32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s115">H5::PredType::NATIVE_INT_LEAST32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s116" doxytag="H5::PredType::NATIVE_UINT_LEAST32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s116">H5::PredType::NATIVE_UINT_LEAST32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s117" doxytag="H5::PredType::NATIVE_INT_FAST32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s117">H5::PredType::NATIVE_INT_FAST32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s118" doxytag="H5::PredType::NATIVE_UINT_FAST32"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s118">H5::PredType::NATIVE_UINT_FAST32</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s119" doxytag="H5::PredType::NATIVE_INT64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s119">H5::PredType::NATIVE_INT64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s120" doxytag="H5::PredType::NATIVE_UINT64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s120">H5::PredType::NATIVE_UINT64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s121" doxytag="H5::PredType::NATIVE_INT_LEAST64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s121">H5::PredType::NATIVE_INT_LEAST64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s122" doxytag="H5::PredType::NATIVE_UINT_LEAST64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s122">H5::PredType::NATIVE_UINT_LEAST64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s123" doxytag="H5::PredType::NATIVE_INT_FAST64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s123">H5::PredType::NATIVE_INT_FAST64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="s124" doxytag="H5::PredType::NATIVE_UINT_FAST64"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> <a class="el" href="classH5_1_1PredType.html#s124">H5::PredType::NATIVE_UINT_FAST64</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PredType.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PredType.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropList-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropList-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropList-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,378 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::PropList Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1PropList.html">H5::PropList</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a3">close</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a4">closeClass</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a5">copy</a>(const PropList &amp;like_plist)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a6">copyProp</a>(PropList &amp;dest, const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a7">copyProp</a>(PropList &amp;dest, const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a8">copyProp</a>(PropList &amp;dest, PropList &amp;src, const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a9">copyProp</a>(PropList &amp;dest, PropList &amp;src, const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#s0">DEFAULT</a></td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a30">fromClass</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a10">getClass</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a11">getClassName</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a12">getClassParent</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a13">getNumProps</a>() const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a14">getProperty</a>(const char *name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a15">getProperty</a>(const string &amp;name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a16">getProperty</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a17">getProperty</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a23">getPropSize</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a24">getPropSize</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a25">isAClass</a>(const PropList &amp;prop_class) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a1">operator=</a>(const PropList &amp;rhs)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::IdComponent::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a2">operator==</a>(const PropList &amp;rhs) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a26">propExist</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a27">propExist</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a0">PropList</a>(const hid_t plist_id)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a31">PropList</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a32">PropList</a>(const PropList &amp;original)</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a28">removeProp</a>(const char *name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a29">removeProp</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a18">setProperty</a>(const char *name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a19">setProperty</a>(const char *name, const char *charptr) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a20">setProperty</a>(const char *name, string &amp;strg) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a21">setProperty</a>(const string &amp;name, void *value) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a22">setProperty</a>(const string &amp;name, string &amp;strg) const </td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropList.html#a33">~PropList</a>()</td><td><a class="el" href="classH5_1_1PropList.html">H5::PropList</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:51 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropList.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropList.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropList.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1849 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1PropList.html">PropList</a></div>
+<h1>H5::PropList Class Reference</h1><code>#include &lt;<a class="el" href="H5PropList_8h-source.html">H5PropList.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::PropList:
+<p><center><img src="classH5_1_1PropList.png" usemap="#H5::PropList_map" border="0" alt=""></center>
+<map name="H5::PropList_map">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="253,0,412,24">
+<area href="classH5_1_1DSetCreatPropList.html" alt="H5::DSetCreatPropList" shape="rect" coords="0,112,159,136">
+<area href="classH5_1_1DSetMemXferPropList.html" alt="H5::DSetMemXferPropList" shape="rect" coords="169,112,328,136">
+<area href="classH5_1_1FileAccPropList.html" alt="H5::FileAccPropList" shape="rect" coords="338,112,497,136">
+<area href="classH5_1_1FileCreatPropList.html" alt="H5::FileCreatPropList" shape="rect" coords="507,112,666,136">
+</map>
+<a href="classH5_1_1PropList-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a0">PropList</a> (const hid_t plist_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a property list using the id of an existing property.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a1">operator=</a> (const <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;rhs)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Assignment operator.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a2">operator==</a> (const <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;rhs) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Compares this property list or class against the given list or class.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a3">close</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Closes the property list if it is not a default one.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a4">closeClass</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Close a property list class.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a5">copy</a> (const <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;like_plist)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Makes a copy of an existing property list.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a6">copyProp</a> (<a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;dest, const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copies a property from this property list or class to another.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a7">copyProp</a> (<a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;dest, const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a8">copyProp</a> (<a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;dest, <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;src, const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copies a property from one list or class to another - Obsolete.  <a href="#a8"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a9">copyProp</a> (<a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;dest, <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;src, const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. - Obsolete.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">hid_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a10">getClass</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the class of this property list, i.e. <code>H5P_FILE_CREATE</code>...  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a11">getClassName</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Return the name of a generic property list class.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="el" href="classH5_1_1PropList.html">PropList</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a12">getClassParent</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the parent class of a generic property class.  <a href="#a12"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a13">getNumProps</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Returns the number of properties in this property list or class.  <a href="#a13"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a14">getProperty</a> (const char *name, void *value) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Query the value of a property in a property list.  <a href="#a14"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a15">getProperty</a> (const string &amp;name, void *value) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts.  <a href="#a15"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a16">getProperty</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts.  <a href="#a16"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a17">getProperty</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts.  <a href="#a17"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a18">setProperty</a> (const char *name, void *value) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Set a property's value in a property list.  <a href="#a18"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a19">setProperty</a> (const char *name, const char *charptr) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts.  <a href="#a19"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a20">setProperty</a> (const char *name, string &amp;strg) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts.  <a href="#a20"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a21">setProperty</a> (const string &amp;name, void *value) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts.  <a href="#a21"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a22">setProperty</a> (const string &amp;name, string &amp;strg) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts.  <a href="#a22"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a23">getPropSize</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Query the size of a property in a property list or class.  <a href="#a23"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">size_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a24">getPropSize</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts.  <a href="#a24"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a25">isAClass</a> (const <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;prop_class) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determines whether a property list is a certain class.  <a href="#a25"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a26">propExist</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Query the existance of a property in a property object.  <a href="#a26"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">bool&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a27">propExist</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts.  <a href="#a27"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a28">removeProp</a> (const char *name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Removes a property from a property list.  <a href="#a28"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a29">removeProp</a> (const string &amp;name) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts.  <a href="#a29"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a30">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a31">PropList</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: creates a stub property list object.  <a href="#a31"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a32">PropList</a> (const <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor.  <a href="#a32"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#a33">~PropList</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Properly terminates access to this property list.  <a href="#a33"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Static Public Attributes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">static const <a class="el" href="classH5_1_1PropList.html">PropList</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html#s0">DEFAULT</a></td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Constant for default property.  <a href="#s0"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::PropList::PropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::PropList::PropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>plist_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a property list using the id of an existing property. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>plist_id</em>&nbsp;</td><td>- IN: Id of the existing property list </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a31" doxytag="H5::PropList::PropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::PropList::PropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: creates a stub property list object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a32" doxytag="H5::PropList::PropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::PropList::PropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>original</em>&nbsp;</td><td>- IN: The original property list to copy </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a33" doxytag="H5::PropList::~PropList"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::PropList::~PropList           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Properly terminates access to this property list. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a1" doxytag="H5::PropList::operator="></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1PropList.html">PropList</a> &amp; H5::PropList::operator=           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>rhs</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Assignment operator. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>rhs</em>&nbsp;</td><td>- IN: Reference to the existing property list </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Reference to <a class="el" href="classH5_1_1PropList.html">PropList</a> instance </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::PropList::operator=="></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool H5::PropList::operator==           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>rhs</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Compares this property list or class against the given list or class. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>rhs</em>&nbsp;</td><td>- IN: Reference to the property list to compare </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>true if the property lists or classes are equal, and false, otherwise. </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::PropList::close"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::close           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Closes the property list if it is not a default one. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::PropList::closeClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::closeClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Close a property list class. 
+<p>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Releases memory and detaches a class from the property list class hierarchy. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::PropList::copy"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::copy           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>like_plist</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Makes a copy of an existing property list. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>like_plist</em>&nbsp;</td><td>- IN: Reference to the existing property list </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::PropList::copyProp"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::copyProp           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copies a property from this property list or class to another. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>- IN: Destination property list or class </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the property to copy - <code>char</code> pointer </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::PropList::copyProp"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::copyProp           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>- IN: Destination property list or class </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the property to copy - <code>std::string</code> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::PropList::copyProp"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::copyProp           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>src</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copies a property from one list or class to another - Obsolete. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>- IN: Destination property list or class </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>src</em>&nbsp;</td><td>- IN: Source property list or class </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the property to copy - <code>char</code> pointer </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Note:</b></dt><dd>This member function will be removed in the next release </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::PropList::copyProp"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::copyProp           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap><a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>src</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. - Obsolete. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dest</em>&nbsp;</td><td>- IN: Destination property list or class </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>src</em>&nbsp;</td><td>- IN: Source property list or class </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of the property to copy - <code>std::string</code> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::PropList::getClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">hid_t H5::PropList::getClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the class of this property list, i.e. <code>H5P_FILE_CREATE</code>... 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>The property list class if it is not equal to <code>H5P_NO_CLASS</code> </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::PropList::getClassName"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::PropList::getClassName           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Return the name of a generic property list class. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>A string containing the class name, if success, otherwise, a NULL string. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::PropList::getClassParent"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top"><a class="el" href="classH5_1_1PropList.html">PropList</a> H5::PropList::getClassParent           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the parent class of a generic property class. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>The parent class of a property class </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a13" doxytag="H5::PropList::getNumProps"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">size_t H5::PropList::getNumProps           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Returns the number of properties in this property list or class. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Size of the property. </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a14" doxytag="H5::PropList::getProperty"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::getProperty           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>value</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Query the value of a property in a property list. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to query - <code>char</code> pointer </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>- OUT: Pointer to the buffer for the property value </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>Retrieves a copy of the value for a property in a property list. The property name must exist or this routine will throw an exception. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a15" doxytag="H5::PropList::getProperty"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::getProperty           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>value</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to query - <code>str::string</code> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>- OUT: Pointer to the buffer for the property value </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a16" doxytag="H5::PropList::getProperty"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::PropList::getProperty           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to query - <code>char</code> pointer </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>The property that is a <code>std::string</code>. </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a17" doxytag="H5::PropList::getProperty"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">string H5::PropList::getProperty           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to query - <code>std::string</code> </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>The property that is a <code>std::string</code>. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a18" doxytag="H5::PropList::setProperty"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::setProperty           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>value</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Set a property's value in a property list. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to set - <code>char</code> pointer </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>- IN: Void pointer to the value for the property </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a19" doxytag="H5::PropList::setProperty"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::setProperty           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>charptr</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to set - <code>char</code> pointer </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>charptr</em>&nbsp;</td><td>- IN: Char pointer to the value for the property </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a20" doxytag="H5::PropList::setProperty"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::setProperty           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>strg</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to set - <code>char</code> pointer </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>strg</em>&nbsp;</td><td>- IN: Value for the property is a <code>std::string</code> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a21" doxytag="H5::PropList::setProperty"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::setProperty           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>void *&nbsp;</td>
+          <td class="mdname" nowrap> <em>value</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to set - <code>std::string</code> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>value</em>&nbsp;</td><td>- IN: Void pointer to the value for the property </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a22" doxytag="H5::PropList::setProperty"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::setProperty           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>string &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>strg</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to set - <code>std::string</code> </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>strg</em>&nbsp;</td><td>- IN: Value for the property is a <code>std::string</code> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a23" doxytag="H5::PropList::getPropSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">size_t H5::PropList::getPropSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Query the size of a property in a property list or class. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to query </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>Size of the property </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>This routine retrieves the size of a property's value in bytes. Zero-sized properties are allowed and the return value will be of 0. This function works for both property lists and classes. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a24" doxytag="H5::PropList::getPropSize"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">size_t H5::PropList::getPropSize           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to query - <code>std::string</code> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a25" doxytag="H5::PropList::isAClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool H5::PropList::isAClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PropList.html">PropList</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>prop_class</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Determines whether a property list is a certain class. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>prop_class</em>&nbsp;</td><td>- IN: Property class to query </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>true if the property list is a member of the property list class, and false, otherwise. </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a26" doxytag="H5::PropList::propExist"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool H5::PropList::propExist           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Query the existance of a property in a property object. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to check for - <code>char</code> pointer </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Returns:</b></dt><dd>true if the property exists in the property object, and false, otherwise. </dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>This routine checks if a property exists within a property list or class. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a27" doxytag="H5::PropList::propExist"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">bool H5::PropList::propExist           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to check for - <code>std::string</code> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a28" doxytag="H5::PropList::removeProp"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::removeProp           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const char *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Removes a property from a property list. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to remove - <code>char</code> pointer </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a29" doxytag="H5::PropList::removeProp"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::PropList::removeProp           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>name</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+This is an overloaded member function, provided for convenience. It differs from the above function only in what arguments it accepts. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>name</em>&nbsp;</td><td>- IN: Name of property to remove - <code>std::string</code> </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a30" doxytag="H5::PropList::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::PropList::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1IdComponent.html#a12">H5::IdComponent</a>.
+<p>
+Reimplemented in <a class="el" href="classH5_1_1DSetCreatPropList.html#a24">H5::DSetCreatPropList</a>, <a class="el" href="classH5_1_1DSetMemXferPropList.html#a17">H5::DSetMemXferPropList</a>, <a class="el" href="classH5_1_1FileAccPropList.html#a29">H5::FileAccPropList</a>, and <a class="el" href="classH5_1_1FileCreatPropList.html#a9">H5::FileCreatPropList</a>.    </td>
+  </tr>
+</table>
+<hr><h2>Member Data Documentation</h2>
+<a class="anchor" name="s0" doxytag="H5::PropList::DEFAULT"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PropList.html">PropList</a> <a class="el" href="classH5_1_1PropList.html#s0">H5::PropList::DEFAULT</a><code> [static]</code>          </td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Constant for default property. 
+<p>
+
+<p>
+Reimplemented in <a class="el" href="classH5_1_1DSetCreatPropList.html#s0">H5::DSetCreatPropList</a>, <a class="el" href="classH5_1_1DSetMemXferPropList.html#s0">H5::DSetMemXferPropList</a>, <a class="el" href="classH5_1_1FileAccPropList.html#s0">H5::FileAccPropList</a>, and <a class="el" href="classH5_1_1FileCreatPropList.html#s0">H5::FileCreatPropList</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:50 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropList.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropList.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropListIException-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropListIException-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropListIException-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::PropListIException Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e3">clearErrorStack</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e1">dontPrint</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a0">Exception</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a8">Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a9">Exception</a>(const Exception &amp;orig)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e2">getAutoPrint</a>(H5E_auto_t &amp;func, void **client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a4">getCDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a6">getCFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a3">getDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a5">getFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a1">getMajorString</a>(H5E_major_t major_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a2">getMinorString</a>(H5E_minor_t minor_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a7">printError</a>(FILE *stream=NULL) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropListIException.html#a0">PropListIException</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropListIException.html#a1">PropListIException</a>()</td><td><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e0">setAutoPrint</a>(H5E_auto_t &amp;func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e4">walkErrorStack</a>(H5E_direction_t direction, H5E_walk_t func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a10">~Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1PropListIException.html#a2">~PropListIException</a>()</td><td><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropListIException.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropListIException.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropListIException.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,455 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1PropListIException.html">PropListIException</a></div>
+<h1>H5::PropListIException Class Reference</h1><code>#include &lt;<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::PropListIException:
+<p><center><img src="classH5_1_1PropListIException.png" usemap="#H5::PropListIException_map" border="0" alt=""></center>
+<map name="H5::PropListIException_map">
+<area href="classH5_1_1Exception.html" alt="H5::Exception" shape="rect" coords="0,0,138,24">
+</map>
+<a href="classH5_1_1PropListIException-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropListIException.html#a0">PropListIException</a> (const string func_name, const string message=<a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a <a class="el" href="classH5_1_1PropListIException.html">PropListIException</a> with the name of the function, in which the failure occurs, and an optional detailed message.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropListIException.html#a1">PropListIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropListIException.html#a2">~PropListIException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a2"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::PropListIException::PropListIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::PropListIException::PropListIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>func_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>message</em> = <code><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a <a class="el" href="classH5_1_1PropListIException.html">PropListIException</a> with the name of the function, in which the failure occurs, and an optional detailed message. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func_name</em>&nbsp;</td><td>- IN: Name of the function where failure occurs </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>message</em>&nbsp;</td><td>- IN: Message on the failure </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::PropListIException::PropListIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::PropListIException::PropListIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::PropListIException::~PropListIException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::PropListIException::~PropListIException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropListIException.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1PropListIException.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ReferenceException-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ReferenceException-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ReferenceException-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::ReferenceException Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1ReferenceException.html">H5::ReferenceException</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e3">clearErrorStack</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [protected, static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e1">dontPrint</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a0">Exception</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a8">Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a9">Exception</a>(const Exception &amp;orig)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e2">getAutoPrint</a>(H5E_auto_t &amp;func, void **client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a4">getCDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a6">getCFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a3">getDetailMsg</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a5">getFuncName</a>() const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a1">getMajorString</a>(H5E_major_t major_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a2">getMinorString</a>(H5E_minor_t minor_num) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a7">printError</a>(FILE *stream=NULL) const </td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1ReferenceException.html#a0">ReferenceException</a>(const string func_name, const string message=DEFAULT_MSG)</td><td><a class="el" href="classH5_1_1ReferenceException.html">H5::ReferenceException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1ReferenceException.html#a1">ReferenceException</a>()</td><td><a class="el" href="classH5_1_1ReferenceException.html">H5::ReferenceException</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e0">setAutoPrint</a>(H5E_auto_t &amp;func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#e4">walkErrorStack</a>(H5E_direction_t direction, H5E_walk_t func, void *client_data)</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [static]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1Exception.html#a10">~Exception</a>()</td><td><a class="el" href="classH5_1_1Exception.html">H5::Exception</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1ReferenceException.html#a2">~ReferenceException</a>()</td><td><a class="el" href="classH5_1_1ReferenceException.html">H5::ReferenceException</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ReferenceException.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ReferenceException.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ReferenceException.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,455 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1ReferenceException.html">ReferenceException</a></div>
+<h1>H5::ReferenceException Class Reference</h1><code>#include &lt;<a class="el" href="H5Exception_8h-source.html">H5Exception.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::ReferenceException:
+<p><center><img src="classH5_1_1ReferenceException.png" usemap="#H5::ReferenceException_map" border="0" alt=""></center>
+<map name="H5::ReferenceException_map">
+<area href="classH5_1_1Exception.html" alt="H5::Exception" shape="rect" coords="0,0,148,24">
+</map>
+<a href="classH5_1_1ReferenceException-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1ReferenceException.html#a0">ReferenceException</a> (const string func_name, const string message=<a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a>)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a <a class="el" href="classH5_1_1ReferenceException.html">ReferenceException</a> with the name of the function, in which the failure occurs, and an optional detailed message.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1ReferenceException.html#a1">ReferenceException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1ReferenceException.html#a2">~ReferenceException</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Noop destructor.  <a href="#a2"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::ReferenceException::ReferenceException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::ReferenceException::ReferenceException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>func_name</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const string&nbsp;</td>
+          <td class="mdname" nowrap> <em>message</em> = <code><a class="el" href="classH5_1_1Exception.html#t0">DEFAULT_MSG</a></code></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a <a class="el" href="classH5_1_1ReferenceException.html">ReferenceException</a> with the name of the function, in which the failure occurs, and an optional detailed message. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>func_name</em>&nbsp;</td><td>- IN: Name of the function where failure occurs </td></tr>
+    <tr><td valign="top"></td><td valign="top"><em>message</em>&nbsp;</td><td>- IN: Message on the failure </td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::ReferenceException::ReferenceException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::ReferenceException::ReferenceException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::ReferenceException::~ReferenceException"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::ReferenceException::~ReferenceException           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Noop destructor. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:49 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ReferenceException.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1ReferenceException.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1StrType-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1StrType-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1StrType-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,418 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::StrType Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1StrType.html">H5::StrType</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a11">AtomType</a>(const AtomType &amp;original)</td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a2">close</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a5">commit</a>(CommonFG &amp;loc, const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a6">commit</a>(CommonFG &amp;loc, const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a7">committed</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a9">convert</a>(const DataType &amp;dest, size_t nelmts, void *buf, void *background, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a3">copy</a>(const DataType &amp;like_type)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a0">DataType</a>(const H5T_class_t type_class, size_t size)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a1">DataType</a>(const DataType &amp;original)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a32">DataType</a>(const hid_t type_id, bool predtype=false)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a33">DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a24">detectClass</a>(H5T_class_t cls) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a8">find</a>(const DataType &amp;dest, H5T_cdata_t **pcdata) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1StrType.html#a8">fromClass</a>() const </td><td><a class="el" href="classH5_1_1StrType.html">H5::StrType</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a4">getClass</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1StrType.html#a4">getCset</a>() const </td><td><a class="el" href="classH5_1_1StrType.html">H5::StrType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a29">getObjType</a>(void *ref, H5R_type_t ref_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a3">getOffset</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a0">getOrder</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a1">getOrder</a>(string &amp;order_string) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a13">getOverflow</a>(void) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a5">getPad</a>(H5T_pad_t &amp;lsb, H5T_pad_t &amp;msb) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a7">getPrecision</a>() const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a30">getRegion</a>(void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a15">getSize</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1StrType.html#a6">getStrpad</a>() const </td><td><a class="el" href="classH5_1_1StrType.html">H5::StrType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a16">getSuper</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a23">getTag</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#p0">is_predtype</a></td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a25">isVariableStr</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a12">lock</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a10">operator=</a>(const DataType &amp;rhs)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::H5Object::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a11">operator==</a>(const DataType &amp;compared_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a26">Reference</a>(const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a27">Reference</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a28">Reference</a>(const char *name, DataSpace &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a17">registerFunc</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a18">registerFunc</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1StrType.html#a5">setCset</a>(H5T_cset_t cset) const </td><td><a class="el" href="classH5_1_1StrType.html">H5::StrType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a4">setOffset</a>(size_t offset) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a2">setOrder</a>(H5T_order_t order) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a14">setOverflow</a>(H5T_overflow_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a6">setPad</a>(H5T_pad_t lsb, H5T_pad_t msb) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a8">setPrecision</a>(size_t precision) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a9">setSize</a>(size_t size) const </td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1StrType.html#a7">setStrpad</a>(H5T_str_t strpad) const </td><td><a class="el" href="classH5_1_1StrType.html">H5::StrType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a21">setTag</a>(const char *tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a22">setTag</a>(const string &amp;tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1StrType.html#a0">StrType</a>(const PredType &amp;pred_type)</td><td><a class="el" href="classH5_1_1StrType.html">H5::StrType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1StrType.html#a1">StrType</a>(const size_t &amp;size)</td><td><a class="el" href="classH5_1_1StrType.html">H5::StrType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1StrType.html#a2">StrType</a>(const PredType &amp;pred_type, const size_t size)</td><td><a class="el" href="classH5_1_1StrType.html">H5::StrType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1StrType.html#a3">StrType</a>(const DataSet &amp;dataset)</td><td><a class="el" href="classH5_1_1StrType.html">H5::StrType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1StrType.html#a9">StrType</a>()</td><td><a class="el" href="classH5_1_1StrType.html">H5::StrType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1StrType.html#a10">StrType</a>(const hid_t existing_id)</td><td><a class="el" href="classH5_1_1StrType.html">H5::StrType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1StrType.html#a11">StrType</a>(const StrType &amp;original)</td><td><a class="el" href="classH5_1_1StrType.html">H5::StrType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a19">unregister</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a20">unregister</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1AtomType.html#a12">~AtomType</a>()</td><td><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a34">~DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1StrType.html#a12">~StrType</a>()</td><td><a class="el" href="classH5_1_1StrType.html">H5::StrType</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:51 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1StrType.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1StrType.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1StrType.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,851 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1StrType.html">StrType</a></div>
+<h1>H5::StrType Class Reference</h1><code>#include &lt;<a class="el" href="H5StrType_8h-source.html">H5StrType.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::StrType:
+<p><center><img src="classH5_1_1StrType.png" usemap="#H5::StrType_map" border="0" alt=""></center>
+<map name="H5::StrType_map">
+<area href="classH5_1_1AtomType.html" alt="H5::AtomType" shape="rect" coords="0,168,107,192">
+<area href="classH5_1_1DataType.html" alt="H5::DataType" shape="rect" coords="0,112,107,136">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="0,56,107,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,107,24">
+</map>
+<a href="classH5_1_1StrType-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1StrType.html#a0">StrType</a> (const <a class="el" href="classH5_1_1PredType.html">PredType</a> &amp;pred_type)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a string datatype using a predefined type.  <a href="#a0"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1StrType.html#a1">StrType</a> (const size_t &amp;size)</td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1StrType.html#a2">StrType</a> (const <a class="el" href="classH5_1_1PredType.html">PredType</a> &amp;pred_type, const size_t size)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a string datatype with a specified length.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1StrType.html#a3">StrType</a> (const <a class="el" href="classH5_1_1DataSet.html">DataSet</a> &amp;dataset)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the string datatype of the specified dataset.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5T_cset_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1StrType.html#a4">getCset</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the character set type of this string datatype.  <a href="#a4"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1StrType.html#a5">setCset</a> (H5T_cset_t cset) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Sets character set to be used.  <a href="#a5"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">H5T_str_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1StrType.html#a6">getStrpad</a> () const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Retrieves the storage mechanism for of this string datatype.  <a href="#a6"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1StrType.html#a7">setStrpad</a> (H5T_str_t strpad) const </td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Defines the storage mechanism for this string datatype.  <a href="#a7"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1StrType.html#a8">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1StrType.html#a9">StrType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: Creates a stub string datatype.  <a href="#a9"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1StrType.html#a10">StrType</a> (const hid_t existing_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an <a class="el" href="classH5_1_1StrType.html">StrType</a> object using the id of an existing datatype.  <a href="#a10"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1StrType.html#a11">StrType</a> (const <a class="el" href="classH5_1_1StrType.html">StrType</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1StrType.html">StrType</a> object.  <a href="#a11"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1StrType.html#a12">~StrType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Properly terminates access to this string datatype.  <a href="#a12"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::StrType::StrType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::StrType::StrType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>pred_type</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a string datatype using a predefined type. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>pred_type</em>&nbsp;</td><td>- IN: Predefined datatype </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a1" doxytag="H5::StrType::StrType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::StrType::StrType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const size_t &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>size</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::StrType::StrType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::StrType::StrType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1PredType.html">PredType</a> &amp;&nbsp;</td>
+          <td class="mdname" nowrap> <em>pred_type</em>, </td>
+        </tr>
+        <tr>
+          <td class="md" nowrap align="right"></td>
+          <td class="md"></td>
+          <td class="md" nowrap>const size_t&nbsp;</td>
+          <td class="mdname" nowrap> <em>size</em></td>
+        </tr>
+        <tr>
+          <td class="md"></td>
+          <td class="md">)&nbsp;</td>
+          <td class="md" colspan="2"></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a string datatype with a specified length. 
+<p>
+<dl compact><dt><b>Note:</b></dt><dd>This constructor will be obsolete in later releases, please use <a class="el" href="classH5_1_1StrType.html#a1">StrType( const size_t&amp; size )</a> instead. </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::StrType::StrType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::StrType::StrType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataSet.html">DataSet</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>dataset</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Gets the string datatype of the specified dataset. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>dataset</em>&nbsp;</td><td>- IN: Dataset that this string datatype associates with </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a9" doxytag="H5::StrType::StrType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::StrType::StrType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: Creates a stub string datatype. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a10" doxytag="H5::StrType::StrType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::StrType::StrType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>existing_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an <a class="el" href="classH5_1_1StrType.html">StrType</a> object using the id of an existing datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>existing_id</em>&nbsp;</td><td>- IN: Id of an existing datatype </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a11" doxytag="H5::StrType::StrType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::StrType::StrType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1StrType.html">StrType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1StrType.html">StrType</a> object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a12" doxytag="H5::StrType::~StrType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::StrType::~StrType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Properly terminates access to this string datatype. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a4" doxytag="H5::StrType::getCset"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5T_cset_t H5::StrType::getCset           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the character set type of this string datatype. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>Character set type, which can be: <ul>
+<li><code>H5T_CSET_ASCII</code> (0) - Character set is US ASCII. </li>
+</ul>
+</dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a5" doxytag="H5::StrType::setCset"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::StrType::setCset           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5T_cset_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>cset</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Sets character set to be used. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>cset</em>&nbsp;</td><td>- IN: character set type </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td><ul>
+<li><code>H5T_CSET_ASCII</code> (0) - Character set is US ASCII. </li>
+</ul>
+</td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a6" doxytag="H5::StrType::getStrpad"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5T_str_t H5::StrType::getStrpad           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Retrieves the storage mechanism for of this string datatype. 
+<p>
+<dl compact><dt><b>Returns:</b></dt><dd>String storage mechanism, which can be: <ul>
+<li><code>H5T_STR_NULLTERM</code> (0) - Null terminate (as C does) </li>
+<li><code>H5T_STR_NULLPAD</code> (0) - Pad with zeros </li>
+<li><code>H5T_STR_SPACEPAD</code> (0) - pad with spaces (as FORTRAN does) </li>
+</ul>
+</dd></dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a7" doxytag="H5::StrType::setStrpad"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">void H5::StrType::setStrpad           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">H5T_str_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>strpad</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const</td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Defines the storage mechanism for this string datatype. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>strpad</em>&nbsp;</td><td>- IN: String padding type </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Description</b></dt><dd>For detail, please refer to the C layer Reference Manual at: <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-SetStrpad">http://hdf.ncsa.uiuc.edu/HDF5/doc/RM_H5T.html#Datatype-SetStrpad</a> </dd></dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a8" doxytag="H5::StrType::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::StrType::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1AtomType.html#a10">H5::AtomType</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:51 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1StrType.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1StrType.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1VarLenType-members.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1VarLenType-members.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1VarLenType-members.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,399 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5::VarLenType Member List</h1>This is the complete list of members for <a class="el" href="classH5_1_1VarLenType.html">H5::VarLenType</a>, including all inherited members.<p><table>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a2">close</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a5">commit</a>(CommonFG &amp;loc, const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a6">commit</a>(CommonFG &amp;loc, const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a7">committed</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a9">convert</a>(const DataType &amp;dest, size_t nelmts, void *buf, void *background, PropList &amp;plist) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a3">copy</a>(const DataType &amp;like_type)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a0">createAttribute</a>(const char *name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a1">createAttribute</a>(const string &amp;name, const DataType &amp;type, const DataSpace &amp;space, const PropList &amp;create_plist=PropList::DEFAULT) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a0">DataType</a>(const H5T_class_t type_class, size_t size)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a1">DataType</a>(const DataType &amp;original)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a32">DataType</a>(const hid_t type_id, bool predtype=false)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a33">DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a2">decRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a3">decRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a24">detectClass</a>(H5T_class_t cls) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a8">find</a>(const DataType &amp;dest, H5T_cdata_t **pcdata) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a5">flush</a>(H5F_scope_t scope) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1VarLenType.html#a0">fromClass</a>() const </td><td><a class="el" href="classH5_1_1VarLenType.html">H5::VarLenType</a></td><td><code> [inline, virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a4">getClass</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a4">getCounter</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a5">getCounter</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a6">getFileName</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a10">getId</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a7">getNumAttrs</a>() const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a29">getObjType</a>(void *ref, H5R_type_t ref_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a13">getOverflow</a>(void) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a30">getRegion</a>(void *ref, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a15">getSize</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a16">getSuper</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a23">getTag</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a13">H5Object</a>(const H5Object &amp;original)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a8">IdComponent</a>(const hid_t h5_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a9">IdComponent</a>(const IdComponent &amp;original)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a0">incRefCount</a>(hid_t obj_id) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a1">incRefCount</a>() const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a11">inMemFunc</a>(const char *func_name) const </td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#p0">is_predtype</a></td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a25">isVariableStr</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a8">iterateAttrs</a>(attr_operator_t user_op, unsigned *idx=NULL, void *op_data=NULL)</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a12">lock</a>() const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a2">openAttribute</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a3">openAttribute</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a4">openAttribute</a>(const unsigned int idx) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a10">operator=</a>(const DataType &amp;rhs)</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a6">H5::H5Object::operator=</a>(const IdComponent &amp;rhs)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a11">operator==</a>(const DataType &amp;compared_type) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a26">Reference</a>(const char *name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a27">Reference</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a28">Reference</a>(const char *name, DataSpace &amp;dataspace, H5R_type_t ref_type=H5R_DATASET_REGION) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a17">registerFunc</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a18">registerFunc</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a9">removeAttr</a>(const char *name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a10">removeAttr</a>(const string &amp;name) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a11">renameAttr</a>(const char *oldname, const char *newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a12">renameAttr</a>(const string &amp;oldname, const string &amp;newname) const </td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a7">setId</a>(hid_t new_id)</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a14">setOverflow</a>(H5T_overflow_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a21">setTag</a>(const char *tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a22">setTag</a>(const string &amp;tag) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a19">unregister</a>(H5T_pers_t pers, const char *name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a20">unregister</a>(H5T_pers_t pers, const string &amp;name, const DataType &amp;dest, H5T_conv_t func) const </td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1VarLenType.html#a1">VarLenType</a>(const DataType *base_type)</td><td><a class="el" href="classH5_1_1VarLenType.html">H5::VarLenType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1VarLenType.html#a2">VarLenType</a>(const VarLenType &amp;original)</td><td><a class="el" href="classH5_1_1VarLenType.html">H5::VarLenType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1VarLenType.html#a3">VarLenType</a>(const hid_t existing_id)</td><td><a class="el" href="classH5_1_1VarLenType.html">H5::VarLenType</a></td><td></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1VarLenType.html#b0">VarLenType</a>()</td><td><a class="el" href="classH5_1_1VarLenType.html">H5::VarLenType</a></td><td><code> [protected]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1DataType.html#a34">~DataType</a>()</td><td><a class="el" href="classH5_1_1DataType.html">H5::DataType</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1H5Object.html#a14">~H5Object</a>()</td><td><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1IdComponent.html#a13">~IdComponent</a>()</td><td><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a></td><td><code> [virtual]</code></td></tr>
+  <tr class="memlist"><td><a class="el" href="classH5_1_1VarLenType.html#a4">~VarLenType</a>()</td><td><a class="el" href="classH5_1_1VarLenType.html">H5::VarLenType</a></td><td><code> [virtual]</code></td></tr>
+</table><hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:51 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1VarLenType.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1VarLenType.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1VarLenType.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,561 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="nav">
+<a class="el" href="namespaceH5.html">H5</a>::<a class="el" href="classH5_1_1VarLenType.html">VarLenType</a></div>
+<h1>H5::VarLenType Class Reference</h1><code>#include &lt;<a class="el" href="H5VarLenType_8h-source.html">H5VarLenType.h</a>&gt;</code>
+<p>
+<p>Inheritance diagram for H5::VarLenType:
+<p><center><img src="classH5_1_1VarLenType.png" usemap="#H5::VarLenType_map" border="0" alt=""></center>
+<map name="H5::VarLenType_map">
+<area href="classH5_1_1DataType.html" alt="H5::DataType" shape="rect" coords="0,112,107,136">
+<area href="classH5_1_1H5Object.html" alt="H5::H5Object" shape="rect" coords="0,56,107,80">
+<area href="classH5_1_1IdComponent.html" alt="H5::IdComponent" shape="rect" coords="0,0,107,24">
+</map>
+<a href="classH5_1_1VarLenType-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual string&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1VarLenType.html#a0">fromClass</a> () const </td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1VarLenType.html#a1">VarLenType</a> (const <a class="el" href="classH5_1_1DataType.html">DataType</a> *base_type)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates a new variable-length datatype based on the specified <em>base_type</em>.  <a href="#a1"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1VarLenType.html#a2">VarLenType</a> (const <a class="el" href="classH5_1_1VarLenType.html">VarLenType</a> &amp;original)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1VarLenType.html">VarLenType</a> object.  <a href="#a2"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1VarLenType.html#a3">VarLenType</a> (const hid_t existing_id)</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Creates an <a class="el" href="classH5_1_1VarLenType.html">VarLenType</a> object using an existing id.  <a href="#a3"></a><br></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">virtual&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1VarLenType.html#a4">~VarLenType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Properly terminates access to this datatype.  <a href="#a4"></a><br></td></tr>
+<tr><td colspan="2"><br><h2>Protected Member Functions</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1VarLenType.html#b0">VarLenType</a> ()</td></tr>
+
+<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Default constructor: Creates a stub variable-length datatype.  <a href="#b0"></a><br></td></tr>
+</table>
+<hr><h2>Constructor &amp; Destructor Documentation</h2>
+<a class="anchor" name="a1" doxytag="H5::VarLenType::VarLenType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::VarLenType::VarLenType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1DataType.html">DataType</a> *&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>base_type</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates a new variable-length datatype based on the specified <em>base_type</em>. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>base_type</em>&nbsp;</td><td>- IN: Pointer to existing datatype </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a2" doxytag="H5::VarLenType::VarLenType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::VarLenType::VarLenType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const <a class="el" href="classH5_1_1VarLenType.html">VarLenType</a> &amp;&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>original</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Copy constructor: makes a copy of the original <a class="el" href="classH5_1_1VarLenType.html">VarLenType</a> object. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a3" doxytag="H5::VarLenType::VarLenType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::VarLenType::VarLenType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="md" nowrap valign="top">const hid_t&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap> <em>existing_id</em>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Creates an <a class="el" href="classH5_1_1VarLenType.html">VarLenType</a> object using an existing id. 
+<p>
+<dl compact><dt><b>Parameters:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em>existing_id</em>&nbsp;</td><td>- IN: Id of an existing datatype </td></tr>
+  </table>
+</dl>
+<dl compact><dt><b>Exceptions:</b></dt><dd>
+  <table border="0" cellspacing="2" cellpadding="0">
+    <tr><td valign="top"></td><td valign="top"><em><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a></em>&nbsp;</td><td></td></tr>
+  </table>
+</dl>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="a4" doxytag="H5::VarLenType::~VarLenType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::VarLenType::~VarLenType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Properly terminates access to this datatype. 
+<p>
+    </td>
+  </tr>
+</table>
+<a class="anchor" name="b0" doxytag="H5::VarLenType::VarLenType"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">H5::VarLenType::VarLenType           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap><code> [protected]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+Default constructor: Creates a stub variable-length datatype. 
+<p>
+    </td>
+  </tr>
+</table>
+<hr><h2>Member Function Documentation</h2>
+<a class="anchor" name="a0" doxytag="H5::VarLenType::fromClass"></a><p>
+<table class="mdTable" cellpadding="2" cellspacing="0">
+  <tr>
+    <td class="mdRow">
+      <table cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td class="md" nowrap valign="top">virtual string H5::VarLenType::fromClass           </td>
+          <td class="md" valign="top">(&nbsp;</td>
+          <td class="mdname1" valign="top" nowrap>          </td>
+          <td class="md" valign="top">&nbsp;)&nbsp;</td>
+          <td class="md" nowrap> const<code> [inline, virtual]</code></td>
+        </tr>
+      </table>
+    </td>
+  </tr>
+</table>
+<table cellspacing="5" cellpadding="0" border="0">
+  <tr>
+    <td>
+      &nbsp;
+    </td>
+    <td>
+
+<p>
+
+<p>
+Reimplemented from <a class="el" href="classH5_1_1DataType.html#a31">H5::DataType</a>.    </td>
+  </tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:51 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1VarLenType.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/classH5_1_1VarLenType.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/compound_8cpp-example.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/compound_8cpp-example.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/compound_8cpp-example.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,545 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>compound.cpp</h1><dl compact><dt><b></b></dt><dd>This example shows how to create a compound datatype, write an array which has the compound datatype to the file, and read back fields' subsets.</dd></dl>
+<div class="fragment"><pre class="fragment"><span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+<span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+<span class="comment"> * All rights reserved.                                                      *</span>
+<span class="comment"> *                                                                           *</span>
+<span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+<span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+<span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+<span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+<span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+<span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+<span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+<span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+<span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+
+<span class="comment">/*</span>
+<span class="comment"> * This example shows how to create a compound datatype,</span>
+<span class="comment"> * write an array which has the compound datatype to the file,</span>
+<span class="comment"> * and read back fields' subsets.</span>
+<span class="comment"> */</span>
+
+<span class="preprocessor">#include &lt;string&gt;</span>
+
+<span class="preprocessor">#ifdef OLD_HEADER_FILENAME</span>
+<span class="preprocessor"></span><span class="preprocessor">#include &lt;iostream.h&gt;</span>
+<span class="preprocessor">#else</span>
+<span class="preprocessor"></span><span class="preprocessor">#include &lt;iostream&gt;</span>
+<span class="preprocessor">#endif</span>
+<span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="H5Cpp_8h.html">H5Cpp.h</a>"</span>
+
+<span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+<span class="preprocessor"></span><span class="keyword">using</span> <span class="keyword">namespace </span>H5;
+<span class="preprocessor">#endif</span>
+<span class="preprocessor"></span>
+<span class="keyword">const</span> string FILE_NAME( <span class="stringliteral">"SDScompound.h5"</span> );
+<span class="keyword">const</span> string DATASET_NAME( <span class="stringliteral">"ArrayOfStructures"</span> );
+<span class="keyword">const</span> string MEMBER1( <span class="stringliteral">"a_name"</span> );
+<span class="keyword">const</span> string MEMBER2( <span class="stringliteral">"b_name"</span> );
+<span class="keyword">const</span> string MEMBER3( <span class="stringliteral">"c_name"</span> );
+<span class="keyword">const</span> <span class="keywordtype">int</span>   LENGTH = 10;
+<span class="keyword">const</span> <span class="keywordtype">int</span>   RANK = 1;
+
+<span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)
+{
+   <span class="comment">/* First structure  and dataset*/</span>
+   <span class="keyword">typedef</span> <span class="keyword">struct </span>s1_t {
+        <span class="keywordtype">int</span>      a;
+        <span class="keywordtype">float</span>  b;
+        <span class="keywordtype">double</span> c;
+   } s1_t;
+
+   <span class="comment">/* Second structure (subset of s1_t)  and dataset*/</span>
+   <span class="keyword">typedef</span> <span class="keyword">struct </span>s2_t {
+        <span class="keywordtype">double</span> c;
+        <span class="keywordtype">int</span>      a;
+   } s2_t;
+
+   <span class="comment">// Try block to detect exceptions raised by any of the calls inside it</span>
+   <span class="keywordflow">try</span>
+   {
+      <span class="comment">/*</span>
+<span class="comment">       * Initialize the data</span>
+<span class="comment">       */</span>
+      <span class="keywordtype">int</span>        i;
+      s1_t       s1[LENGTH];
+      <span class="keywordflow">for</span> (i = 0; i&lt; LENGTH; i++)
+      {
+         s1[i].a = i;
+         s1[i].b = i*i;
+         s1[i].c = 1./(i+1);
+      }
+
+      <span class="comment">/*</span>
+<span class="comment">       * Turn off the auto-printing when failure occurs so that we can</span>
+<span class="comment">       * handle the errors appropriately</span>
+<span class="comment">       */</span>
+      Exception::dontPrint();
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create the data space.</span>
+<span class="comment">       */</span>
+      hsize_t    dim[] = {LENGTH};   <span class="comment">/* Dataspace dimensions */</span>
+      DataSpace space( RANK, dim );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create the file.</span>
+<span class="comment">       */</span>
+      H5File* file = <span class="keyword">new</span> H5File( FILE_NAME, H5F_ACC_TRUNC );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create the memory datatype.</span>
+<span class="comment">       */</span>
+      CompType mtype1( <span class="keyword">sizeof</span>(s1_t) );
+      mtype1.insertMember( MEMBER1, HOFFSET(s1_t, a), PredType::NATIVE_INT);
+      mtype1.insertMember( MEMBER3, HOFFSET(s1_t, c), PredType::NATIVE_DOUBLE);
+      mtype1.insertMember( MEMBER2, HOFFSET(s1_t, b), PredType::NATIVE_FLOAT);
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create the dataset.</span>
+<span class="comment">       */</span>
+      DataSet* dataset;
+      dataset = <span class="keyword">new</span> DataSet( file-&gt;createDataSet( DATASET_NAME, mtype1, space ));
+
+      <span class="comment">/*</span>
+<span class="comment">       * Wtite data to the dataset;</span>
+<span class="comment">       */</span>
+      dataset-&gt;write( s1, mtype1 );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Release resources</span>
+<span class="comment">       */</span>
+      <span class="keyword">delete</span> dataset;
+      <span class="keyword">delete</span> file;
+
+      <span class="comment">// Get the class of the first member in mtype1, then get its type</span>
+      H5T_class_t member1_class = mtype1.getMemberClass( 2 );
+      <span class="keywordflow">if</span>( member1_class == H5T_FLOAT )
+      {
+         FloatType member2 = mtype1.getMemberFloatType( 2 );
+         string norm_string;
+         H5T_norm_t norm = member2.getNorm( norm_string );
+         cout &lt;&lt; <span class="stringliteral">"Normalization type is "</span> &lt;&lt; norm_string &lt;&lt; endl;
+      }
+
+      <span class="comment">/*</span>
+<span class="comment">       * Open the file and the dataset.</span>
+<span class="comment">       */</span>
+      file = <span class="keyword">new</span> H5File( FILE_NAME, H5F_ACC_RDONLY );
+      dataset = <span class="keyword">new</span> DataSet (file-&gt;openDataSet( DATASET_NAME ));
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create a datatype for s2</span>
+<span class="comment">       */</span>
+      CompType mtype2( <span class="keyword">sizeof</span>(s2_t) );
+
+      mtype2.insertMember( MEMBER3, HOFFSET(s2_t, c), PredType::NATIVE_DOUBLE);
+      mtype2.insertMember( MEMBER1, HOFFSET(s2_t, a), PredType::NATIVE_INT);
+
+      <span class="comment">/*</span>
+<span class="comment">       * Read two fields c and a from s1 dataset. Fields in the file</span>
+<span class="comment">       * are found by their names "c_name" and "a_name".</span>
+<span class="comment">       */</span>
+      s2_t       s2[LENGTH];
+      dataset-&gt;read( s2, mtype2 );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Display the fields</span>
+<span class="comment">       */</span>
+      cout &lt;&lt; endl &lt;&lt; <span class="stringliteral">"Field c : "</span> &lt;&lt; endl;
+      <span class="keywordflow">for</span>( i = 0; i &lt; LENGTH; i++)
+         cout &lt;&lt; s2[i].c &lt;&lt; <span class="stringliteral">" "</span>;
+      cout &lt;&lt; endl;
+
+      cout &lt;&lt; endl &lt;&lt; <span class="stringliteral">"Field a : "</span> &lt;&lt; endl;
+      <span class="keywordflow">for</span>( i = 0; i &lt; LENGTH; i++)
+         cout &lt;&lt; s2[i].a &lt;&lt; <span class="stringliteral">" "</span>;
+      cout &lt;&lt; endl;
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create a datatype for s3.</span>
+<span class="comment">       */</span>
+      CompType mtype3( <span class="keyword">sizeof</span>(<span class="keywordtype">float</span>) );
+
+      mtype3.insertMember( MEMBER2, 0, PredType::NATIVE_FLOAT);
+
+      <span class="comment">/*</span>
+<span class="comment">       * Read field b from s1 dataset. Field in the file is found by its name.</span>
+<span class="comment">       */</span>
+      <span class="keywordtype">float</span> s3[LENGTH];  <span class="comment">// Third "structure" - used to read float field of s1)</span>
+      dataset-&gt;read( s3, mtype3 );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Display the field</span>
+<span class="comment">       */</span>
+      cout &lt;&lt; endl &lt;&lt; <span class="stringliteral">"Field b : "</span> &lt;&lt; endl;
+      <span class="keywordflow">for</span>( i = 0; i &lt; LENGTH; i++)
+         cout &lt;&lt; s3[i] &lt;&lt; <span class="stringliteral">" "</span>;
+      cout &lt;&lt; endl;
+
+      <span class="comment">/*</span>
+<span class="comment">       * Release resources</span>
+<span class="comment">       */</span>
+      <span class="keyword">delete</span> dataset;
+      <span class="keyword">delete</span> file;
+   }  <span class="comment">// end of try block</span>
+
+   <span class="comment">// catch failure caused by the H5File operations</span>
+   <span class="keywordflow">catch</span>( FileIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSet operations</span>
+   <span class="keywordflow">catch</span>( DataSetIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSpace operations</span>
+   <span class="keywordflow">catch</span>( DataSpaceIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSpace operations</span>
+   <span class="keywordflow">catch</span>( DataTypeIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="keywordflow">return</span> 0;
+}
+</pre></div> <hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:46 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/create_8cpp-example.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/create_8cpp-example.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/create_8cpp-example.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,463 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>create.cpp</h1>This example shows how to create datasets. <dl compact><dt><b></b></dt><dd></dd></dl>
+<div class="fragment"><pre class="fragment"><span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+<span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+<span class="comment"> * All rights reserved.                                                      *</span>
+<span class="comment"> *                                                                           *</span>
+<span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+<span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+<span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+<span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+<span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+<span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+<span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+<span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+<span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+
+<span class="comment">/*</span>
+<span class="comment"> *  This example writes a dataset to a new HDF5 file.</span>
+<span class="comment"> */</span>
+
+<span class="preprocessor">#include &lt;string&gt;</span>
+
+<span class="preprocessor">#ifdef OLD_HEADER_FILENAME</span>
+<span class="preprocessor"></span><span class="preprocessor">#include &lt;iostream.h&gt;</span>
+<span class="preprocessor">#else</span>
+<span class="preprocessor"></span><span class="preprocessor">#include &lt;iostream&gt;</span>
+<span class="preprocessor">#endif</span>
+<span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="H5Cpp_8h.html">H5Cpp.h</a>"</span>
+
+<span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+<span class="preprocessor"></span><span class="keyword">using</span> <span class="keyword">namespace </span>H5;
+<span class="preprocessor">#endif</span>
+<span class="preprocessor"></span>
+<span class="keyword">const</span> string    FILE_NAME( <span class="stringliteral">"SDS.h5"</span> );
+<span class="keyword">const</span> string    DATASET_NAME( <span class="stringliteral">"IntArray"</span> );
+<span class="keyword">const</span> <span class="keywordtype">int</span>       NX = 5;                    <span class="comment">// dataset dimensions</span>
+<span class="keyword">const</span> <span class="keywordtype">int</span>       NY = 6;
+<span class="keyword">const</span> <span class="keywordtype">int</span>       RANK = 2;
+
+<span class="keywordtype">int</span> main (<span class="keywordtype">void</span>)
+{
+   <span class="comment">/*</span>
+<span class="comment">    * Data initialization.</span>
+<span class="comment">    */</span>
+   <span class="keywordtype">int</span> i, j;
+   <span class="keywordtype">int</span> data[NX][NY];          <span class="comment">// buffer for data to write</span>
+   <span class="keywordflow">for</span> (j = 0; j &lt; NX; j++)
+   {
+      <span class="keywordflow">for</span> (i = 0; i &lt; NY; i++)
+         data[j][i] = i + j;
+   }
+   <span class="comment">/*</span>
+<span class="comment">    * 0 1 2 3 4 5</span>
+<span class="comment">    * 1 2 3 4 5 6</span>
+<span class="comment">    * 2 3 4 5 6 7</span>
+<span class="comment">    * 3 4 5 6 7 8</span>
+<span class="comment">    * 4 5 6 7 8 9</span>
+<span class="comment">    */</span>
+
+   <span class="comment">// Try block to detect exceptions raised by any of the calls inside it</span>
+   <span class="keywordflow">try</span>
+   {
+      <span class="comment">/*</span>
+<span class="comment">       * Turn off the auto-printing when failure occurs so that we can</span>
+<span class="comment">       * handle the errors appropriately</span>
+<span class="comment">       */</span>
+      <a name="a2"></a><a class="code" href="classH5_1_1Exception.html#e1">Exception::dontPrint</a>();
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create a new file using H5F_ACC_TRUNC access,</span>
+<span class="comment">       * default file creation properties, and default file</span>
+<span class="comment">       * access properties.</span>
+<span class="comment">       */</span>
+      H5File file( FILE_NAME, H5F_ACC_TRUNC );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Define the size of the array and create the data space for fixed</span>
+<span class="comment">       * size dataset.</span>
+<span class="comment">       */</span>
+      hsize_t     dimsf[2];              <span class="comment">// dataset dimensions</span>
+      dimsf[0] = NX;
+      dimsf[1] = NY;
+      DataSpace dataspace( RANK, dimsf );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Define datatype for the data in the file.</span>
+<span class="comment">       * We will store little endian INT numbers.</span>
+<span class="comment">       */</span>
+      IntType datatype( <a name="a3"></a><a class="code" href="classH5_1_1PredType.html#s83">PredType::NATIVE_INT</a> );
+      datatype.setOrder( H5T_ORDER_LE );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create a new dataset within the file using defined dataspace and</span>
+<span class="comment">       * datatype and default dataset creation properties.</span>
+<span class="comment">       */</span>
+      DataSet dataset = file.createDataSet( DATASET_NAME, datatype, dataspace );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Write the data to the dataset using default memory space, file</span>
+<span class="comment">       * space, and transfer properties.</span>
+<span class="comment">       */</span>
+      dataset.write( data, <a class="code" href="classH5_1_1PredType.html#s83">PredType::NATIVE_INT</a> );
+   }  <span class="comment">// end of try block</span>
+
+   <span class="comment">// catch failure caused by the H5File operations</span>
+   <span class="keywordflow">catch</span>( FileIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSet operations</span>
+   <span class="keywordflow">catch</span>( DataSetIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSpace operations</span>
+   <span class="keywordflow">catch</span>( DataSpaceIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSpace operations</span>
+   <span class="keywordflow">catch</span>( DataTypeIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="keywordflow">return</span> 0;  <span class="comment">// successfully terminated</span>
+}
+
+</pre></div> <hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:46 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/doxygen.css
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/doxygen.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/doxygen.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,216 @@
+H1 {
+	text-align: center;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+H2 {
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+CAPTION { font-weight: bold }
+DIV.qindex {
+	width: 100%;
+	background-color: #eeeeff;
+	border: 1px solid #B0B0B0;
+	text-align: center;
+	margin: 2px;
+	padding: 2px;
+	line-height: 120%;
+}
+A.qindex {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D;
+       padding: 2px;
+}
+A.qindex:visited {
+       text-decoration: none;
+       font-weight: bold;
+       color: #1A419D
+       padding: 2px;
+}
+A.qindex:hover {
+	text-decoration: none;
+	background-color: #ddddff;
+	padding: 2px;
+}
+A.qindexHL {
+	text-decoration: none;
+	font-weight: bold;
+	background-color: #6666cc;
+	color: #ffffff;
+	padding: 2px 6px;
+	border: 1px double #9295C2;
+}
+A.qindexHL:hover {
+	text-decoration: none;
+	background-color: #6666cc;
+	color: #ffffff;
+	padding: 2px 6px;
+}
+A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff }
+A.el { text-decoration: none; font-weight: bold }
+A.elRef { font-weight: bold }
+A.code { text-decoration: none; font-weight: normal; color: #1A419D}
+A.codeRef { font-weight: normal; color: #1A419D}
+A:hover { text-decoration: none; background-color: #f2f2ff }
+DL.el { margin-left: -1cm }
+PRE.fragment {
+	border: 1px solid #CCCCCC;
+	background-color: #f5f5f5;
+	margin-top: 4px;
+	margin-bottom: 4px;
+	margin-left: 2px;
+	margin-right: 8px;
+	padding-left: 6px;
+	padding-right: 6px;
+	padding-top: 4px;
+	padding-bottom: 4px;
+}
+DIV.fragment {
+	border: 1px solid #CCCCCC;
+	background-color: #f5f5f5;
+	padding: 6px;
+}
+DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px }
+TD.md { background-color: #F4F4FB; font-weight: bold; }
+TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; }
+TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; }
+DIV.groupHeader {
+       margin-left: 16px;
+       margin-top: 12px;
+       margin-bottom: 6px;
+       font-weight: bold;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+}
+DIV.groupText { margin-left: 16px; font-style: italic; font-size: 14px }
+BODY {
+	background: white;
+	color: black;
+	margin-right: 20px;
+	margin-left: 20px;
+}
+TD.indexkey {
+	background-color: #eeeeff;
+	font-weight: bold;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #CCCCCC;
+}
+TD.indexvalue {
+	background-color: #eeeeff;
+	font-style: italic;
+	padding-right  : 10px;
+	padding-top    : 2px;
+	padding-left   : 10px;
+	padding-bottom : 2px;
+	margin-left    : 0px;
+	margin-right   : 0px;
+	margin-top     : 2px;
+	margin-bottom  : 2px;
+	border: 1px solid #CCCCCC;
+}
+TR.memlist {
+   background-color: #f0f0f0; 
+}
+P.formulaDsp { text-align: center; }
+IMG.formulaDsp { }
+IMG.formulaInl { vertical-align: middle; }
+SPAN.keyword       { color: #008000 }
+SPAN.keywordtype   { color: #604020 }
+SPAN.keywordflow   { color: #e08000 }
+SPAN.comment       { color: #800000 }
+SPAN.preprocessor  { color: #806020 }
+SPAN.stringliteral { color: #002080 }
+SPAN.charliteral   { color: #008080 }
+.mdTable {
+	border: 1px solid #868686;
+	background-color: #F4F4FB;
+}
+.mdRow {
+	padding: 8px 10px;
+}
+.mdescLeft {
+       padding: 0px 8px 4px 8px;
+	font-size: 14px;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.mdescRight {
+       padding: 0px 8px 4px 8px;
+	font-size: 14px;
+	font-style: italic;
+	background-color: #FAFAFA;
+	border-top: 1px none #E0E0E0;
+	border-right: 1px none #E0E0E0;
+	border-bottom: 1px none #E0E0E0;
+	border-left: 1px none #E0E0E0;
+	margin: 0px;
+}
+.memItemLeft {
+	padding: 1px 0px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-style: solid;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+	font-size: 12px;
+}
+.memItemRight {
+	padding: 1px 8px 0px 8px;
+	margin: 4px;
+	border-top-width: 1px;
+	border-right-width: 1px;
+	border-bottom-width: 1px;
+	border-left-width: 1px;
+	border-top-style: solid;
+	border-top-color: #E0E0E0;
+	border-right-color: #E0E0E0;
+	border-bottom-color: #E0E0E0;
+	border-left-color: #E0E0E0;
+	border-right-style: none;
+	border-bottom-style: none;
+	border-left-style: none;
+	background-color: #FAFAFA;
+	font-family: Geneva, Arial, Helvetica, sans-serif;
+	font-size: 13px;
+}
+.search     { color: #003399;
+              font-weight: bold;
+}
+FORM.search {
+              margin-bottom: 0px;
+              margin-top: 0px;
+}
+INPUT.search { font-size: 75%;
+               color: #000080;
+               font-weight: normal;
+               background-color: #eeeeff;
+}
+TD.tiny      { font-size: 75%;
+}
+a {
+	color: #252E78;
+}
+a:visited {
+	color: #3D2185;
+}

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/doxygen.png
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/doxygen.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/examples.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/examples.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/examples.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,338 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindexHL" href="examples.html">Examples</a></div>
+<h1>Examples</h1>Here is a list of all examples:<ul>
+<li><a class="el" href="chunks_8cpp-example.html">chunks.cpp</a>
+<li><a class="el" href="compound_8cpp-example.html">compound.cpp</a>
+<li><a class="el" href="create_8cpp-example.html">create.cpp</a>
+<li><a class="el" href="extend__ds_8cpp-example.html">extend_ds.cpp</a>
+<li><a class="el" href="h5group_8cpp-example.html">h5group.cpp</a>
+<li><a class="el" href="readdata_8cpp-example.html">readdata.cpp</a>
+<li><a class="el" href="writedata_8cpp-example.html">writedata.cpp</a>
+</ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:51 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/extend__ds_8cpp-example.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/extend__ds_8cpp-example.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/extend__ds_8cpp-example.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,562 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>extend_ds.cpp</h1><dl compact><dt><b></b></dt><dd>This example shows how to work with extendible datasets.</dd></dl>
+<div class="fragment"><pre class="fragment"><span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+<span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+<span class="comment"> * All rights reserved.                                                      *</span>
+<span class="comment"> *                                                                           *</span>
+<span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+<span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+<span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+<span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+<span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+<span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+<span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+<span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+<span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+
+<span class="comment">/*</span>
+<span class="comment"> *   This example shows how to work with extendible dataset.</span>
+<span class="comment"> *   In the current version of the library dataset MUST be</span>
+<span class="comment"> *   chunked.</span>
+<span class="comment"> *</span>
+<span class="comment"> */</span>
+
+<span class="preprocessor">#include &lt;string&gt;</span>
+
+<span class="preprocessor">#ifdef OLD_HEADER_FILENAME</span>
+<span class="preprocessor"></span><span class="preprocessor">#include &lt;iostream.h&gt;</span>
+<span class="preprocessor">#else</span>
+<span class="preprocessor"></span><span class="preprocessor">#include &lt;iostream&gt;</span>
+<span class="preprocessor">#endif</span>
+<span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="H5Cpp_8h.html">H5Cpp.h</a>"</span>
+
+<span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+<span class="preprocessor"></span><span class="keyword">using</span> <span class="keyword">namespace </span>H5;
+<span class="preprocessor">#endif</span>
+<span class="preprocessor"></span>
+<span class="keyword">const</span> string FILE_NAME( <span class="stringliteral">"SDSextendible.h5"</span> );
+<span class="keyword">const</span> string DATASET_NAME( <span class="stringliteral">"ExtendibleArray"</span> );
+<span class="keyword">const</span> <span class="keywordtype">int</span>      NX = 10;
+<span class="keyword">const</span> <span class="keywordtype">int</span>      NY = 5;
+<span class="keyword">const</span> <span class="keywordtype">int</span>      RANK = 2;
+
+<span class="keywordtype">int</span> main (<span class="keywordtype">void</span>)
+{
+   <span class="comment">/*</span>
+<span class="comment">    * Try block to detect exceptions raised by any of the calls inside it</span>
+<span class="comment">    */</span>
+   <span class="keywordflow">try</span>
+   {
+      <span class="comment">/*</span>
+<span class="comment">       * Turn off the auto-printing when failure occurs so that we can</span>
+<span class="comment">       * handle the errors appropriately</span>
+<span class="comment">       */</span>
+      <a name="a4"></a><a class="code" href="classH5_1_1Exception.html#e1">Exception::dontPrint</a>();
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create the data space with unlimited dimensions.</span>
+<span class="comment">       */</span>
+      hsize_t      dims[2]  = { 3, 3};  <span class="comment">// dataset dimensions at creation</span>
+      hsize_t      maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};
+      DataSpace mspace1( RANK, dims, maxdims);
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create a new file. If file exists its contents will be overwritten.</span>
+<span class="comment">       */</span>
+      H5File file( FILE_NAME, H5F_ACC_TRUNC );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Modify dataset creation properties, i.e. enable chunking.</span>
+<span class="comment">       */</span>
+      DSetCreatPropList cparms;
+
+      hsize_t      chunk_dims[2] ={2, 5};
+      cparms.setChunk( RANK, chunk_dims );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Set fill value for the dataset</span>
+<span class="comment">       */</span>
+      <span class="keywordtype">int</span> fill_val = 0;
+      cparms.setFillValue( <a name="a5"></a><a class="code" href="classH5_1_1PredType.html#s83">PredType::NATIVE_INT</a>, &amp;fill_val);
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create a new dataset within the file using cparms</span>
+<span class="comment">       * creation properties.</span>
+<span class="comment">       */</span>
+      DataSet dataset = file.createDataSet( DATASET_NAME, PredType::NATIVE_INT, mspace1, cparms);
+
+      <span class="comment">/*</span>
+<span class="comment">       * Extend the dataset. This call assures that dataset is at least 3 x 3.</span>
+<span class="comment">       */</span>
+      hsize_t      size[2];
+      size[0]   = 3;
+      size[1]   = 3;
+      dataset.extend( size );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Select a hyperslab.</span>
+<span class="comment">       */</span>
+      DataSpace fspace1 = dataset.getSpace ();
+      hsize_t     offset[2];
+      offset[0] = 0;
+      offset[1] = 0;
+      hsize_t      dims1[2] = { 3, 3};            <span class="comment">/* data1 dimensions */</span>
+      fspace1.selectHyperslab( H5S_SELECT_SET, dims1, offset );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Write the data to the hyperslab.</span>
+<span class="comment">       */</span>
+      <span class="keywordtype">int</span>       data1[3][3] = { {1, 1, 1},       <span class="comment">/* data to write */</span>
+                                {1, 1, 1},
+                                {1, 1, 1} };
+      dataset.write( data1, PredType::NATIVE_INT, mspace1, fspace1 );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Extend the dataset. Dataset becomes 10 x 3.</span>
+<span class="comment">       */</span>
+      hsize_t   dims2[2] = { 7, 1};            <span class="comment">/* data2 dimensions */</span>
+      dims[0]   = dims1[0] + dims2[0];
+      size[0]   = dims[0];
+      size[1]   = dims[1];
+      dataset.extend( size );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Select a hyperslab.</span>
+<span class="comment">       */</span>
+      DataSpace fspace2 = dataset.getSpace ();
+      offset[0] = 3;
+      offset[1] = 0;
+      fspace2.selectHyperslab( H5S_SELECT_SET, dims2, offset );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Define memory space</span>
+<span class="comment">       */</span>
+      DataSpace mspace2( RANK, dims2 );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Write the data to the hyperslab.</span>
+<span class="comment">       */</span>
+      <span class="keywordtype">int</span>  data2[7]    = { 2, 2, 2, 2, 2, 2, 2};
+      dataset.write( data2, PredType::NATIVE_INT, mspace2, fspace2 );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Extend the dataset. Dataset becomes 10 x 5.</span>
+<span class="comment">       */</span>
+      hsize_t   dims3[2] = { 2, 2};            <span class="comment">/* data3 dimensions */</span>
+      dims[1]   = dims1[1] + dims3[1];
+      size[0]   = dims[0];
+      size[1]   = dims[1];
+      dataset.extend( size );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Select a hyperslab</span>
+<span class="comment">       */</span>
+      DataSpace fspace3 = dataset.getSpace ();
+      offset[0] = 0;
+      offset[1] = 3;
+      fspace3.selectHyperslab( H5S_SELECT_SET, dims3, offset );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Define memory space.</span>
+<span class="comment">       */</span>
+      DataSpace mspace3( RANK, dims3 );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Write the data to the hyperslab.</span>
+<span class="comment">       */</span>
+      <span class="keywordtype">int</span>         data3[2][2] = { {3, 3}, {3, 3} };
+      dataset.write( data3, PredType::NATIVE_INT, mspace3, fspace3 );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Read the data from this dataset and display it.</span>
+<span class="comment">       */</span>
+      <span class="keywordtype">int</span> i, j;
+      <span class="keywordtype">int</span> data_out[NX][NY];
+      <span class="keywordflow">for</span> (i = 0; i &lt; NX; i++)
+      {
+         <span class="keywordflow">for</span> (j = 0; j &lt; NY; j++)
+            data_out[i][j] = 0;
+      }
+      dataset.read( data_out, PredType::NATIVE_INT );
+      <span class="comment">/*</span>
+<span class="comment">       * Resulting dataset</span>
+<span class="comment">       *</span>
+<span class="comment">       *         1 1 1 3 3</span>
+<span class="comment">       *         1 1 1 3 3</span>
+<span class="comment">       *         1 1 1 0 0</span>
+<span class="comment">       *         2 0 0 0 0</span>
+<span class="comment">       *         2 0 0 0 0</span>
+<span class="comment">       *         2 0 0 0 0</span>
+<span class="comment">       *         2 0 0 0 0</span>
+<span class="comment">       *         2 0 0 0 0</span>
+<span class="comment">       *         2 0 0 0 0</span>
+<span class="comment">       *         2 0 0 0 0</span>
+<span class="comment">       */</span>
+      <span class="comment">/*</span>
+<span class="comment">       * Display the result.</span>
+<span class="comment">       */</span>
+      <span class="keywordflow">for</span> (i=0; i &lt; NX; i++)
+      {
+          <span class="keywordflow">for</span>(j=0; j &lt; NY; j++)
+             cout &lt;&lt; data_out[i][j] &lt;&lt; <span class="stringliteral">"  "</span>;
+          cout &lt;&lt; endl;
+      }
+   }  <span class="comment">// end of try block</span>
+
+   <span class="comment">// catch failure caused by the H5File operations</span>
+   <span class="keywordflow">catch</span>( FileIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSet operations</span>
+   <span class="keywordflow">catch</span>( DataSetIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSpace operations</span>
+   <span class="keywordflow">catch</span>( DataSpaceIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSpace operations</span>
+   <span class="keywordflow">catch</span>( DataTypeIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+   <span class="keywordflow">return</span> 0;
+}
+</pre></div> <hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:46 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/files.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/files.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/files.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,388 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindexHL" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>File List</h1>Here is a list of all files with brief descriptions:<table>
+  <tr><td class="indexkey"><a class="el" href="H5AbstractDs_8cpp.html">H5AbstractDs.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5AbstractDs_8h.html">H5AbstractDs.h</a> <a href="H5AbstractDs_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5Alltypes_8h.html">H5Alltypes.h</a> <a href="H5Alltypes_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5ArrayType_8cpp.html">H5ArrayType.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5ArrayType_8h.html">H5ArrayType.h</a> <a href="H5ArrayType_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5AtomType_8cpp.html">H5AtomType.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5AtomType_8h.html">H5AtomType.h</a> <a href="H5AtomType_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5Attribute_8cpp.html">H5Attribute.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5Attribute_8h.html">H5Attribute.h</a> <a href="H5Attribute_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5Classes_8h.html">H5Classes.h</a> <a href="H5Classes_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5CommonFG_8cpp.html">H5CommonFG.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5CommonFG_8h.html">H5CommonFG.h</a> <a href="H5CommonFG_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5CompType_8cpp.html">H5CompType.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5CompType_8h.html">H5CompType.h</a> <a href="H5CompType_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5Cpp_8h.html">H5Cpp.h</a> <a href="H5Cpp_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5CppDoc_8h.html">H5CppDoc.h</a> <a href="H5CppDoc_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5DataSet_8cpp.html">H5DataSet.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5DataSet_8h.html">H5DataSet.h</a> <a href="H5DataSet_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5DataSpace_8cpp.html">H5DataSpace.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5DataSpace_8h.html">H5DataSpace.h</a> <a href="H5DataSpace_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5DataType_8cpp.html">H5DataType.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5DataType_8h.html">H5DataType.h</a> <a href="H5DataType_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5DcreatProp_8cpp.html">H5DcreatProp.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5DcreatProp_8h.html">H5DcreatProp.h</a> <a href="H5DcreatProp_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5DxferProp_8cpp.html">H5DxferProp.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5DxferProp_8h.html">H5DxferProp.h</a> <a href="H5DxferProp_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5EnumType_8cpp.html">H5EnumType.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5EnumType_8h.html">H5EnumType.h</a> <a href="H5EnumType_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5Exception_8cpp.html">H5Exception.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5Exception_8h.html">H5Exception.h</a> <a href="H5Exception_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5FaccProp_8cpp.html">H5FaccProp.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5FaccProp_8h.html">H5FaccProp.h</a> <a href="H5FaccProp_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5FcreatProp_8cpp.html">H5FcreatProp.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5FcreatProp_8h.html">H5FcreatProp.h</a> <a href="H5FcreatProp_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5File_8cpp.html">H5File.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5File_8h.html">H5File.h</a> <a href="H5File_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5FloatType_8cpp.html">H5FloatType.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5FloatType_8h.html">H5FloatType.h</a> <a href="H5FloatType_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5Group_8cpp.html">H5Group.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5Group_8h.html">H5Group.h</a> <a href="H5Group_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5IdComponent_8cpp.html">H5IdComponent.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5IdComponent_8h.html">H5IdComponent.h</a> <a href="H5IdComponent_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5Include_8h.html">H5Include.h</a> <a href="H5Include_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5IntType_8cpp.html">H5IntType.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5IntType_8h.html">H5IntType.h</a> <a href="H5IntType_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5Library_8cpp.html">H5Library.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5Library_8h.html">H5Library.h</a> <a href="H5Library_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5Object_8cpp.html">H5Object.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5Object_8h.html">H5Object.h</a> <a href="H5Object_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5PredType_8cpp.html">H5PredType.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5PredType_8h.html">H5PredType.h</a> <a href="H5PredType_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5PropList_8cpp.html">H5PropList.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5PropList_8h.html">H5PropList.h</a> <a href="H5PropList_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5StrType_8cpp.html">H5StrType.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5StrType_8h.html">H5StrType.h</a> <a href="H5StrType_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5VarLenType_8cpp.html">H5VarLenType.cpp</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="H5VarLenType_8h.html">H5VarLenType.h</a> <a href="H5VarLenType_8h-source.html">[code]</a></td><td class="indexvalue"></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:46 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,358 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"><a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindexHL" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>AbstractDs()
+: <a class="el" href="classH5_1_1AbstractDs.html#b1">H5::AbstractDs</a><li>ALL
+: <a class="el" href="classH5_1_1DataSpace.html#s0">H5::DataSpace</a><li>allFiltersAvail()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a0">H5::DSetCreatPropList</a><li>ALPHA_B16
+: <a class="el" href="classH5_1_1PredType.html#s59">H5::PredType</a><li>ALPHA_B32
+: <a class="el" href="classH5_1_1PredType.html#s60">H5::PredType</a><li>ALPHA_B64
+: <a class="el" href="classH5_1_1PredType.html#s61">H5::PredType</a><li>ALPHA_B8
+: <a class="el" href="classH5_1_1PredType.html#s58">H5::PredType</a><li>ALPHA_F32
+: <a class="el" href="classH5_1_1PredType.html#s62">H5::PredType</a><li>ALPHA_F64
+: <a class="el" href="classH5_1_1PredType.html#s63">H5::PredType</a><li>ALPHA_I16
+: <a class="el" href="classH5_1_1PredType.html#s51">H5::PredType</a><li>ALPHA_I32
+: <a class="el" href="classH5_1_1PredType.html#s52">H5::PredType</a><li>ALPHA_I64
+: <a class="el" href="classH5_1_1PredType.html#s53">H5::PredType</a><li>ALPHA_I8
+: <a class="el" href="classH5_1_1PredType.html#s50">H5::PredType</a><li>ALPHA_U16
+: <a class="el" href="classH5_1_1PredType.html#s55">H5::PredType</a><li>ALPHA_U32
+: <a class="el" href="classH5_1_1PredType.html#s56">H5::PredType</a><li>ALPHA_U64
+: <a class="el" href="classH5_1_1PredType.html#s57">H5::PredType</a><li>ALPHA_U8
+: <a class="el" href="classH5_1_1PredType.html#s54">H5::PredType</a><li>ArrayType()
+: <a class="el" href="classH5_1_1ArrayType.html#b0">H5::ArrayType</a><li>AtomType()
+: <a class="el" href="classH5_1_1AtomType.html#a11">H5::AtomType</a><li>Attribute()
+: <a class="el" href="classH5_1_1Attribute.html#a12">H5::Attribute</a><li>AttributeIException()
+: <a class="el" href="classH5_1_1AttributeIException.html#a1">H5::AttributeIException</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x63.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x63.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x63.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,352 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindexHL" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>C_S1
+: <a class="el" href="classH5_1_1PredType.html#s26">H5::PredType</a><li>checkVersion()
+: <a class="el" href="classH5_1_1H5Library.html#e4">H5::H5Library</a><li>clearErrorStack()
+: <a class="el" href="classH5_1_1Exception.html#e3">H5::Exception</a><li>close()
+: <a class="el" href="classH5_1_1PropList.html#a3">H5::PropList</a>, <a class="el" href="classH5_1_1H5Library.html#e1">H5::H5Library</a>, <a class="el" href="classH5_1_1Group.html#a0">H5::Group</a>, <a class="el" href="classH5_1_1H5File.html#a2">H5::H5File</a>, <a class="el" href="classH5_1_1DataType.html#a2">H5::DataType</a>, <a class="el" href="classH5_1_1DataSpace.html#a27">H5::DataSpace</a>, <a class="el" href="classH5_1_1DataSet.html#a22">H5::DataSet</a>, <a class="el" href="classH5_1_1Attribute.html#a13">H5::Attribute</a><li>closeClass()
+: <a class="el" href="classH5_1_1PropList.html#a4">H5::PropList</a><li>commit()
+: <a class="el" href="classH5_1_1DataType.html#a6">H5::DataType</a><li>committed()
+: <a class="el" href="classH5_1_1DataType.html#a7">H5::DataType</a><li>CommonFG()
+: <a class="el" href="classH5_1_1CommonFG.html#a54">H5::CommonFG</a><li>CompType()
+: <a class="el" href="classH5_1_1CompType.html#a22">H5::CompType</a><li>convert()
+: <a class="el" href="classH5_1_1DataType.html#a9">H5::DataType</a><li>copy()
+: <a class="el" href="classH5_1_1PropList.html#a5">H5::PropList</a>, <a class="el" href="classH5_1_1DataType.html#a3">H5::DataType</a>, <a class="el" href="classH5_1_1DataSpace.html#a3">H5::DataSpace</a><li>copyProp()
+: <a class="el" href="classH5_1_1PropList.html#a9">H5::PropList</a><li>createAttribute()
+: <a class="el" href="classH5_1_1H5Object.html#a1">H5::H5Object</a><li>createDataSet()
+: <a class="el" href="classH5_1_1CommonFG.html#a5">H5::CommonFG</a><li>createGroup()
+: <a class="el" href="classH5_1_1CommonFG.html#a1">H5::CommonFG</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x64.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x64.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x64.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,351 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindexHL" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>DataSet()
+: <a class="el" href="classH5_1_1DataSet.html#a24">H5::DataSet</a><li>DataSetIException()
+: <a class="el" href="classH5_1_1DataSetIException.html#a1">H5::DataSetIException</a><li>DataSpace()
+: <a class="el" href="classH5_1_1DataSpace.html#a26">H5::DataSpace</a><li>DataSpaceIException()
+: <a class="el" href="classH5_1_1DataSpaceIException.html#a1">H5::DataSpaceIException</a><li>DataType()
+: <a class="el" href="classH5_1_1DataType.html#a33">H5::DataType</a><li>DataTypeIException()
+: <a class="el" href="classH5_1_1DataTypeIException.html#a1">H5::DataTypeIException</a><li>decRefCount()
+: <a class="el" href="classH5_1_1IdComponent.html#a3">H5::IdComponent</a><li>DEFAULT
+: <a class="el" href="classH5_1_1PropList.html#s0">H5::PropList</a>, <a class="el" href="classH5_1_1FileCreatPropList.html#s0">H5::FileCreatPropList</a>, <a class="el" href="classH5_1_1FileAccPropList.html#s0">H5::FileAccPropList</a>, <a class="el" href="classH5_1_1DSetMemXferPropList.html#s0">H5::DSetMemXferPropList</a>, <a class="el" href="classH5_1_1DSetCreatPropList.html#s0">H5::DSetCreatPropList</a><li>DEFAULT_MSG
+: <a class="el" href="classH5_1_1Exception.html#t0">H5::Exception</a><li>detectClass()
+: <a class="el" href="classH5_1_1DataType.html#a24">H5::DataType</a><li>dontAtExit()
+: <a class="el" href="classH5_1_1H5Library.html#e2">H5::H5Library</a><li>dontPrint()
+: <a class="el" href="classH5_1_1Exception.html#e1">H5::Exception</a><li>DSetCreatPropList()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a27">H5::DSetCreatPropList</a><li>DSetMemXferPropList()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a20">H5::DSetMemXferPropList</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x65.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x65.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x65.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,341 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindexHL" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>EnumType()
+: <a class="el" href="classH5_1_1EnumType.html#a15">H5::EnumType</a><li>Exception()
+: <a class="el" href="classH5_1_1Exception.html#a9">H5::Exception</a><li>extend()
+: <a class="el" href="classH5_1_1DataSet.html#a0">H5::DataSet</a><li>extentCopy()
+: <a class="el" href="classH5_1_1DataSpace.html#a4">H5::DataSpace</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x66.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x66.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x66.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,346 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindexHL" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>FileAccPropList()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a32">H5::FileAccPropList</a><li>FileCreatPropList()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a12">H5::FileCreatPropList</a><li>FileIException()
+: <a class="el" href="classH5_1_1FileIException.html#a1">H5::FileIException</a><li>fillMemBuf()
+: <a class="el" href="classH5_1_1DataSet.html#a2">H5::DataSet</a><li>find()
+: <a class="el" href="classH5_1_1DataType.html#a8">H5::DataType</a><li>FloatType()
+: <a class="el" href="classH5_1_1FloatType.html#a13">H5::FloatType</a><li>flush()
+: <a class="el" href="classH5_1_1H5Object.html#a5">H5::H5Object</a><li>FORTRAN_S1
+: <a class="el" href="classH5_1_1PredType.html#s27">H5::PredType</a><li>fromClass()
+: <a class="el" href="classH5_1_1VarLenType.html#a0">H5::VarLenType</a>, <a class="el" href="classH5_1_1StrType.html#a8">H5::StrType</a>, <a class="el" href="classH5_1_1PropList.html#a30">H5::PropList</a>, <a class="el" href="classH5_1_1PredType.html#a0">H5::PredType</a>, <a class="el" href="classH5_1_1IntType.html#a4">H5::IntType</a>, <a class="el" href="classH5_1_1IdComponent.html#a12">H5::IdComponent</a>, <a class="el" href="classH5_1_1Group.html#a6">H5::Group</a>, <a class="el" href="classH5_1_1FloatType.html#a10">H5::FloatType</a>, <a class="el" href="classH5_1_1H5File.html#a20">H5::H5File</a>, <a class="el" href="classH5_1_1FileCreatPropList.html#a9">H5::FileCreatPropList</a>, <a class="el" href="classH5_1_1FileAccPropList.html#a29">H5::FileAccPropList</a>, <a class="el" href="classH5_1_1EnumType.html#a12">H5::EnumType</a>, <a class="el" href="classH5_1_1DSetMemXferPropList.html#a17">H5::DSetMemXferPropList</a>, <a class="el" href="classH5_1_1DSetCreatPropList.html#a24">H5::DSetCreatPropList</a>, <a class="el" href="classH5_1_1DataType.html#a31">H5::DataType</a>, <a class="el" href="classH5_1_1DataSpace.html#a24">H5::DataSpace</a>, <a class="el" href="classH5_1_1DataSet.html#a20">H5::DataSet</a>, <a class="el" href="classH5_1_1CompType.html#a19">H5::CompType</a>, <a class="el" href="classH5_1_1Attribute.html#a9">H5::Attribute</a>, <a class="el" href="classH5_1_1AtomType.html#a10">H5::AtomType</a>, <a class="el" href="classH5_1_1ArrayType.html#a3">H5::ArrayType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x67.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x67.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x67.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,464 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindexHL" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>garbageCollect()
+: <a class="el" href="classH5_1_1H5Library.html#e5">H5::H5Library</a><li>getAccessPlist()
+: <a class="el" href="classH5_1_1H5File.html#a3">H5::H5File</a><li>getAlignment()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a20">H5::FileAccPropList</a><li>getAllocTime()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a1">H5::DSetCreatPropList</a><li>getArrayDims()
+: <a class="el" href="classH5_1_1ArrayType.html#a2">H5::ArrayType</a><li>getArrayNDims()
+: <a class="el" href="classH5_1_1ArrayType.html#a1">H5::ArrayType</a><li>getArrayType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a1">H5::AbstractDs</a><li>getAutoPrint()
+: <a class="el" href="classH5_1_1Exception.html#e2">H5::Exception</a><li>getBtreeRatios()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a3">H5::DSetMemXferPropList</a><li>getBuffer()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a1">H5::DSetMemXferPropList</a><li>getCache()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a24">H5::FileAccPropList</a><li>getCDetailMsg()
+: <a class="el" href="classH5_1_1Exception.html#a4">H5::Exception</a><li>getCFuncName()
+: <a class="el" href="classH5_1_1Exception.html#a6">H5::Exception</a><li>getChunk()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a3">H5::DSetCreatPropList</a><li>getClass()
+: <a class="el" href="classH5_1_1PropList.html#a10">H5::PropList</a>, <a class="el" href="classH5_1_1DataType.html#a4">H5::DataType</a><li>getClassName()
+: <a class="el" href="classH5_1_1PropList.html#a11">H5::PropList</a><li>getClassParent()
+: <a class="el" href="classH5_1_1PropList.html#a12">H5::PropList</a><li>getComment()
+: <a class="el" href="classH5_1_1CommonFG.html#a10">H5::CommonFG</a><li>getCompType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a2">H5::AbstractDs</a><li>getCore()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a7">H5::FileAccPropList</a><li>getCounter()
+: <a class="el" href="classH5_1_1IdComponent.html#a5">H5::IdComponent</a><li>getCreatePlist()
+: <a class="el" href="classH5_1_1H5File.html#a4">H5::H5File</a>, <a class="el" href="classH5_1_1DataSet.html#a3">H5::DataSet</a><li>getCset()
+: <a class="el" href="classH5_1_1StrType.html#a4">H5::StrType</a><li>getDataType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a0">H5::AbstractDs</a><li>getDetailMsg()
+: <a class="el" href="classH5_1_1Exception.html#a3">H5::Exception</a><li>getDriver()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a2">H5::FileAccPropList</a><li>getEbias()
+: <a class="el" href="classH5_1_1FloatType.html#a2">H5::FloatType</a><li>getEDCCheck()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a16">H5::DSetMemXferPropList</a><li>getEnumType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a3">H5::AbstractDs</a><li>getExternal()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a5">H5::DSetCreatPropList</a><li>getExternalCount()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a6">H5::DSetCreatPropList</a><li>getFamily()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a10">H5::FileAccPropList</a><li>getFamilyOffset()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a4">H5::FileAccPropList</a><li>getFcloseDegree()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a26">H5::FileAccPropList</a><li>getFields()
+: <a class="el" href="classH5_1_1FloatType.html#a4">H5::FloatType</a><li>getFileName()
+: <a class="el" href="classH5_1_1H5Object.html#a6">H5::H5Object</a>, <a class="el" href="classH5_1_1H5File.html#a5">H5::H5File</a><li>getFileSize()
+: <a class="el" href="classH5_1_1H5File.html#a6">H5::H5File</a><li>getFillTime()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a7">H5::DSetCreatPropList</a><li>getFillValue()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a9">H5::DSetCreatPropList</a><li>getFilter()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a11">H5::DSetCreatPropList</a><li>getFilterById()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a12">H5::DSetCreatPropList</a><li>getFloatType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a4">H5::AbstractDs</a><li>getFreeSpace()
+: <a class="el" href="classH5_1_1H5File.html#a7">H5::H5File</a><li>getFuncName()
+: <a class="el" href="classH5_1_1Exception.html#a5">H5::Exception</a><li>getGcReferences()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a28">H5::FileAccPropList</a><li>getHyperVectorSize()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a14">H5::DSetMemXferPropList</a><li>getId()
+: <a class="el" href="classH5_1_1PredType.html#a3">H5::PredType</a>, <a class="el" href="classH5_1_1IdComponent.html#a10">H5::IdComponent</a><li>getInpad()
+: <a class="el" href="classH5_1_1FloatType.html#a6">H5::FloatType</a><li>getIntType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a5">H5::AbstractDs</a><li>getIstorek()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a7">H5::FileCreatPropList</a><li>getLayout()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a13">H5::DSetCreatPropList</a><li>getLibVersion()
+: <a class="el" href="classH5_1_1H5Library.html#e3">H5::H5Library</a><li>getLinkval()
+: <a class="el" href="classH5_1_1CommonFG.html#a16">H5::CommonFG</a><li>getLocId()
+: <a class="el" href="classH5_1_1Group.html#a8">H5::Group</a>, <a class="el" href="classH5_1_1H5File.html#a22">H5::H5File</a>, <a class="el" href="classH5_1_1CommonFG.html#a52">H5::CommonFG</a><li>getMajorString()
+: <a class="el" href="classH5_1_1Exception.html#a1">H5::Exception</a><li>getMemberArrayType()
+: <a class="el" href="classH5_1_1CompType.html#a9">H5::CompType</a><li>getMemberClass()
+: <a class="el" href="classH5_1_1CompType.html#a2">H5::CompType</a><li>getMemberCompType()
+: <a class="el" href="classH5_1_1CompType.html#a10">H5::CompType</a><li>getMemberDataType()
+: <a class="el" href="classH5_1_1CompType.html#a8">H5::CompType</a><li>getMemberDims()
+: <a class="el" href="classH5_1_1CompType.html#a3">H5::CompType</a><li>getMemberEnumType()
+: <a class="el" href="classH5_1_1CompType.html#a11">H5::CompType</a><li>getMemberFloatType()
+: <a class="el" href="classH5_1_1CompType.html#a13">H5::CompType</a><li>getMemberIndex()
+: <a class="el" href="classH5_1_1EnumType.html#a5">H5::EnumType</a>, <a class="el" href="classH5_1_1CompType.html#a5">H5::CompType</a><li>getMemberIntType()
+: <a class="el" href="classH5_1_1CompType.html#a12">H5::CompType</a><li>getMemberName()
+: <a class="el" href="classH5_1_1CompType.html#a7">H5::CompType</a><li>getMemberOffset()
+: <a class="el" href="classH5_1_1CompType.html#a6">H5::CompType</a><li>getMemberStrType()
+: <a class="el" href="classH5_1_1CompType.html#a14">H5::CompType</a><li>getMemberValue()
+: <a class="el" href="classH5_1_1EnumType.html#a6">H5::EnumType</a><li>getMemberVarLenType()
+: <a class="el" href="classH5_1_1CompType.html#a15">H5::CompType</a><li>getMetaBlockSize()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a16">H5::FileAccPropList</a><li>getMinorString()
+: <a class="el" href="classH5_1_1Exception.html#a2">H5::Exception</a><li>getMulti()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a10">H5::DSetMemXferPropList</a><li>getMultiType()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a22">H5::FileAccPropList</a><li>getName()
+: <a class="el" href="classH5_1_1Attribute.html#a2">H5::Attribute</a><li>getNfilters()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a15">H5::DSetCreatPropList</a><li>getNmembers()
+: <a class="el" href="classH5_1_1EnumType.html#a3">H5::EnumType</a>, <a class="el" href="classH5_1_1CompType.html#a16">H5::CompType</a><li>getNorm()
+: <a class="el" href="classH5_1_1FloatType.html#a8">H5::FloatType</a><li>getNumAttrs()
+: <a class="el" href="classH5_1_1H5Object.html#a7">H5::H5Object</a><li>getNumObjs()
+: <a class="el" href="classH5_1_1CommonFG.html#a17">H5::CommonFG</a><li>getNumProps()
+: <a class="el" href="classH5_1_1PropList.html#a13">H5::PropList</a><li>getObjCount()
+: <a class="el" href="classH5_1_1H5File.html#a9">H5::H5File</a><li>getObjIDs()
+: <a class="el" href="classH5_1_1H5File.html#a10">H5::H5File</a><li>getObjinfo()
+: <a class="el" href="classH5_1_1CommonFG.html#a19">H5::CommonFG</a><li>getObjnameByIdx()
+: <a class="el" href="classH5_1_1CommonFG.html#a21">H5::CommonFG</a><li>getObjType()
+: <a class="el" href="classH5_1_1Group.html#a1">H5::Group</a>, <a class="el" href="classH5_1_1H5File.html#a11">H5::H5File</a>, <a class="el" href="classH5_1_1DataType.html#a29">H5::DataType</a>, <a class="el" href="classH5_1_1DataSet.html#a15">H5::DataSet</a><li>getObjTypeByIdx()
+: <a class="el" href="classH5_1_1CommonFG.html#a23">H5::CommonFG</a><li>getOffset()
+: <a class="el" href="classH5_1_1DataSet.html#a4">H5::DataSet</a>, <a class="el" href="classH5_1_1AtomType.html#a3">H5::AtomType</a><li>getOrder()
+: <a class="el" href="classH5_1_1AtomType.html#a1">H5::AtomType</a><li>getOverflow()
+: <a class="el" href="classH5_1_1DataType.html#a13">H5::DataType</a><li>getPad()
+: <a class="el" href="classH5_1_1AtomType.html#a5">H5::AtomType</a><li>getPrecision()
+: <a class="el" href="classH5_1_1AtomType.html#a7">H5::AtomType</a><li>getPreserve()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a5">H5::DSetMemXferPropList</a><li>getProperty()
+: <a class="el" href="classH5_1_1PropList.html#a17">H5::PropList</a><li>getPropSize()
+: <a class="el" href="classH5_1_1PropList.html#a24">H5::PropList</a><li>getRegion()
+: <a class="el" href="classH5_1_1Group.html#a2">H5::Group</a>, <a class="el" href="classH5_1_1H5File.html#a12">H5::H5File</a>, <a class="el" href="classH5_1_1DataType.html#a30">H5::DataType</a>, <a class="el" href="classH5_1_1DataSet.html#a16">H5::DataSet</a><li>getSelectBounds()
+: <a class="el" href="classH5_1_1DataSpace.html#a5">H5::DataSpace</a><li>getSelectElemNpoints()
+: <a class="el" href="classH5_1_1DataSpace.html#a6">H5::DataSpace</a><li>getSelectElemPointlist()
+: <a class="el" href="classH5_1_1DataSpace.html#a7">H5::DataSpace</a><li>getSelectHyperBlocklist()
+: <a class="el" href="classH5_1_1DataSpace.html#a8">H5::DataSpace</a><li>getSelectHyperNblocks()
+: <a class="el" href="classH5_1_1DataSpace.html#a9">H5::DataSpace</a><li>getSelectNpoints()
+: <a class="el" href="classH5_1_1DataSpace.html#a10">H5::DataSpace</a><li>getSieveBufSize()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a14">H5::FileAccPropList</a><li>getSign()
+: <a class="el" href="classH5_1_1IntType.html#a2">H5::IntType</a><li>getSimpleExtentDims()
+: <a class="el" href="classH5_1_1DataSpace.html#a11">H5::DataSpace</a><li>getSimpleExtentNdims()
+: <a class="el" href="classH5_1_1DataSpace.html#a12">H5::DataSpace</a><li>getSimpleExtentNpoints()
+: <a class="el" href="classH5_1_1DataSpace.html#a13">H5::DataSpace</a><li>getSimpleExtentType()
+: <a class="el" href="classH5_1_1DataSpace.html#a14">H5::DataSpace</a><li>getSize()
+: <a class="el" href="classH5_1_1DataType.html#a15">H5::DataType</a><li>getSizes()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a3">H5::FileCreatPropList</a><li>getSmallDataBlockSize()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a12">H5::DSetMemXferPropList</a><li>getSpace()
+: <a class="el" href="classH5_1_1DataSet.html#a5">H5::DataSet</a>, <a class="el" href="classH5_1_1Attribute.html#a3">H5::Attribute</a>, <a class="el" href="classH5_1_1AbstractDs.html#a8">H5::AbstractDs</a><li>getSpaceStatus()
+: <a class="el" href="classH5_1_1DataSet.html#a6">H5::DataSet</a><li>getStorageSize()
+: <a class="el" href="classH5_1_1DataSet.html#a7">H5::DataSet</a>, <a class="el" href="classH5_1_1Attribute.html#a4">H5::Attribute</a>, <a class="el" href="classH5_1_1AbstractDs.html#a10">H5::AbstractDs</a><li>getStrpad()
+: <a class="el" href="classH5_1_1StrType.html#a6">H5::StrType</a><li>getStrType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a6">H5::AbstractDs</a><li>getSuper()
+: <a class="el" href="classH5_1_1DataType.html#a16">H5::DataType</a><li>getSymk()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a5">H5::FileCreatPropList</a><li>getTag()
+: <a class="el" href="classH5_1_1DataType.html#a23">H5::DataType</a><li>getTypeClass()
+: <a class="el" href="classH5_1_1AbstractDs.html#a9">H5::AbstractDs</a><li>getUserblock()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a2">H5::FileCreatPropList</a><li>getVarLenType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a7">H5::AbstractDs</a><li>getVersion()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a0">H5::FileCreatPropList</a><li>getVFDHandle()
+: <a class="el" href="classH5_1_1H5File.html#a14">H5::H5File</a><li>getVlenBufSize()
+: <a class="el" href="classH5_1_1DataSet.html#a8">H5::DataSet</a><li>getVlenMemManager()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a8">H5::DSetMemXferPropList</a><li>Group()
+: <a class="el" href="classH5_1_1Group.html#a12">H5::Group</a><li>GroupIException()
+: <a class="el" href="classH5_1_1GroupIException.html#a1">H5::GroupIException</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x68.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x68.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x68.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,339 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindexHL" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>H5File()
+: <a class="el" href="classH5_1_1H5File.html#a24">H5::H5File</a><li>H5Object()
+: <a class="el" href="classH5_1_1H5Object.html#a13">H5::H5Object</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x69.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x69.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x69.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,370 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindexHL" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>IdComponent()
+: <a class="el" href="classH5_1_1IdComponent.html#a9">H5::IdComponent</a><li>IdComponentException()
+: <a class="el" href="classH5_1_1IdComponentException.html#a1">H5::IdComponentException</a><li>IEEE_F32BE
+: <a class="el" href="classH5_1_1PredType.html#s28">H5::PredType</a><li>IEEE_F32LE
+: <a class="el" href="classH5_1_1PredType.html#s29">H5::PredType</a><li>IEEE_F64BE
+: <a class="el" href="classH5_1_1PredType.html#s30">H5::PredType</a><li>IEEE_F64LE
+: <a class="el" href="classH5_1_1PredType.html#s31">H5::PredType</a><li>incRefCount()
+: <a class="el" href="classH5_1_1IdComponent.html#a1">H5::IdComponent</a><li>inMemFunc()
+: <a class="el" href="classH5_1_1IdComponent.html#a11">H5::IdComponent</a><li>insert()
+: <a class="el" href="classH5_1_1EnumType.html#a8">H5::EnumType</a><li>insertMember()
+: <a class="el" href="classH5_1_1CompType.html#a17">H5::CompType</a><li>INTEL_B16
+: <a class="el" href="classH5_1_1PredType.html#s45">H5::PredType</a><li>INTEL_B32
+: <a class="el" href="classH5_1_1PredType.html#s46">H5::PredType</a><li>INTEL_B64
+: <a class="el" href="classH5_1_1PredType.html#s47">H5::PredType</a><li>INTEL_B8
+: <a class="el" href="classH5_1_1PredType.html#s44">H5::PredType</a><li>INTEL_F32
+: <a class="el" href="classH5_1_1PredType.html#s48">H5::PredType</a><li>INTEL_F64
+: <a class="el" href="classH5_1_1PredType.html#s49">H5::PredType</a><li>INTEL_I16
+: <a class="el" href="classH5_1_1PredType.html#s37">H5::PredType</a><li>INTEL_I32
+: <a class="el" href="classH5_1_1PredType.html#s38">H5::PredType</a><li>INTEL_I64
+: <a class="el" href="classH5_1_1PredType.html#s39">H5::PredType</a><li>INTEL_I8
+: <a class="el" href="classH5_1_1PredType.html#s36">H5::PredType</a><li>INTEL_U16
+: <a class="el" href="classH5_1_1PredType.html#s41">H5::PredType</a><li>INTEL_U32
+: <a class="el" href="classH5_1_1PredType.html#s42">H5::PredType</a><li>INTEL_U64
+: <a class="el" href="classH5_1_1PredType.html#s43">H5::PredType</a><li>INTEL_U8
+: <a class="el" href="classH5_1_1PredType.html#s40">H5::PredType</a><li>IntType()
+: <a class="el" href="classH5_1_1IntType.html#a7">H5::IntType</a><li>is_predtype
+: <a class="el" href="classH5_1_1DataType.html#p0">H5::DataType</a><li>isAClass()
+: <a class="el" href="classH5_1_1PropList.html#a25">H5::PropList</a><li>isFillValueDefined()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a16">H5::DSetCreatPropList</a><li>isHdf5()
+: <a class="el" href="classH5_1_1H5File.html#e1">H5::H5File</a><li>isSimple()
+: <a class="el" href="classH5_1_1DataSpace.html#a15">H5::DataSpace</a><li>isVariableStr()
+: <a class="el" href="classH5_1_1DataType.html#a25">H5::DataType</a><li>iterateAttrs()
+: <a class="el" href="classH5_1_1H5Object.html#a8">H5::H5Object</a><li>iterateElems()
+: <a class="el" href="classH5_1_1DataSet.html#a14">H5::DataSet</a>, <a class="el" href="classH5_1_1CommonFG.html#a25">H5::CommonFG</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6c.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6c.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6c.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,340 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindexHL" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>LibraryIException()
+: <a class="el" href="classH5_1_1LibraryIException.html#a1">H5::LibraryIException</a><li>link()
+: <a class="el" href="classH5_1_1CommonFG.html#a27">H5::CommonFG</a><li>lock()
+: <a class="el" href="classH5_1_1DataType.html#a12">H5::DataType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6d.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6d.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6d.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,354 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindexHL" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>MIPS_B16
+: <a class="el" href="classH5_1_1PredType.html#s73">H5::PredType</a><li>MIPS_B32
+: <a class="el" href="classH5_1_1PredType.html#s74">H5::PredType</a><li>MIPS_B64
+: <a class="el" href="classH5_1_1PredType.html#s75">H5::PredType</a><li>MIPS_B8
+: <a class="el" href="classH5_1_1PredType.html#s72">H5::PredType</a><li>MIPS_F32
+: <a class="el" href="classH5_1_1PredType.html#s76">H5::PredType</a><li>MIPS_F64
+: <a class="el" href="classH5_1_1PredType.html#s77">H5::PredType</a><li>MIPS_I16
+: <a class="el" href="classH5_1_1PredType.html#s65">H5::PredType</a><li>MIPS_I32
+: <a class="el" href="classH5_1_1PredType.html#s66">H5::PredType</a><li>MIPS_I64
+: <a class="el" href="classH5_1_1PredType.html#s67">H5::PredType</a><li>MIPS_I8
+: <a class="el" href="classH5_1_1PredType.html#s64">H5::PredType</a><li>MIPS_U16
+: <a class="el" href="classH5_1_1PredType.html#s69">H5::PredType</a><li>MIPS_U32
+: <a class="el" href="classH5_1_1PredType.html#s70">H5::PredType</a><li>MIPS_U64
+: <a class="el" href="classH5_1_1PredType.html#s71">H5::PredType</a><li>MIPS_U8
+: <a class="el" href="classH5_1_1PredType.html#s68">H5::PredType</a><li>modifyFilter()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a17">H5::DSetCreatPropList</a><li>mount()
+: <a class="el" href="classH5_1_1CommonFG.html#a31">H5::CommonFG</a><li>move()
+: <a class="el" href="classH5_1_1CommonFG.html#a35">H5::CommonFG</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6e.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6e.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6e.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,385 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindexHL" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>nameOf()
+: <a class="el" href="classH5_1_1EnumType.html#a9">H5::EnumType</a><li>NATIVE_B16
+: <a class="el" href="classH5_1_1PredType.html#s93">H5::PredType</a><li>NATIVE_B32
+: <a class="el" href="classH5_1_1PredType.html#s94">H5::PredType</a><li>NATIVE_B64
+: <a class="el" href="classH5_1_1PredType.html#s95">H5::PredType</a><li>NATIVE_B8
+: <a class="el" href="classH5_1_1PredType.html#s92">H5::PredType</a><li>NATIVE_CHAR
+: <a class="el" href="classH5_1_1PredType.html#s78">H5::PredType</a><li>NATIVE_DOUBLE
+: <a class="el" href="classH5_1_1PredType.html#s90">H5::PredType</a><li>NATIVE_FLOAT
+: <a class="el" href="classH5_1_1PredType.html#s89">H5::PredType</a><li>NATIVE_HBOOL
+: <a class="el" href="classH5_1_1PredType.html#s100">H5::PredType</a><li>NATIVE_HERR
+: <a class="el" href="classH5_1_1PredType.html#s99">H5::PredType</a><li>NATIVE_HSIZE
+: <a class="el" href="classH5_1_1PredType.html#s97">H5::PredType</a><li>NATIVE_HSSIZE
+: <a class="el" href="classH5_1_1PredType.html#s98">H5::PredType</a><li>NATIVE_INT
+: <a class="el" href="classH5_1_1PredType.html#s83">H5::PredType</a><li>NATIVE_INT16
+: <a class="el" href="classH5_1_1PredType.html#s107">H5::PredType</a><li>NATIVE_INT32
+: <a class="el" href="classH5_1_1PredType.html#s113">H5::PredType</a><li>NATIVE_INT64
+: <a class="el" href="classH5_1_1PredType.html#s119">H5::PredType</a><li>NATIVE_INT8
+: <a class="el" href="classH5_1_1PredType.html#s101">H5::PredType</a><li>NATIVE_INT_FAST16
+: <a class="el" href="classH5_1_1PredType.html#s111">H5::PredType</a><li>NATIVE_INT_FAST32
+: <a class="el" href="classH5_1_1PredType.html#s117">H5::PredType</a><li>NATIVE_INT_FAST64
+: <a class="el" href="classH5_1_1PredType.html#s123">H5::PredType</a><li>NATIVE_INT_FAST8
+: <a class="el" href="classH5_1_1PredType.html#s105">H5::PredType</a><li>NATIVE_INT_LEAST16
+: <a class="el" href="classH5_1_1PredType.html#s109">H5::PredType</a><li>NATIVE_INT_LEAST32
+: <a class="el" href="classH5_1_1PredType.html#s115">H5::PredType</a><li>NATIVE_INT_LEAST64
+: <a class="el" href="classH5_1_1PredType.html#s121">H5::PredType</a><li>NATIVE_INT_LEAST8
+: <a class="el" href="classH5_1_1PredType.html#s103">H5::PredType</a><li>NATIVE_LDOUBLE
+: <a class="el" href="classH5_1_1PredType.html#s91">H5::PredType</a><li>NATIVE_LLONG
+: <a class="el" href="classH5_1_1PredType.html#s87">H5::PredType</a><li>NATIVE_LONG
+: <a class="el" href="classH5_1_1PredType.html#s85">H5::PredType</a><li>NATIVE_OPAQUE
+: <a class="el" href="classH5_1_1PredType.html#s96">H5::PredType</a><li>NATIVE_SCHAR
+: <a class="el" href="classH5_1_1PredType.html#s79">H5::PredType</a><li>NATIVE_SHORT
+: <a class="el" href="classH5_1_1PredType.html#s81">H5::PredType</a><li>NATIVE_UCHAR
+: <a class="el" href="classH5_1_1PredType.html#s80">H5::PredType</a><li>NATIVE_UINT
+: <a class="el" href="classH5_1_1PredType.html#s84">H5::PredType</a><li>NATIVE_UINT16
+: <a class="el" href="classH5_1_1PredType.html#s108">H5::PredType</a><li>NATIVE_UINT32
+: <a class="el" href="classH5_1_1PredType.html#s114">H5::PredType</a><li>NATIVE_UINT64
+: <a class="el" href="classH5_1_1PredType.html#s120">H5::PredType</a><li>NATIVE_UINT8
+: <a class="el" href="classH5_1_1PredType.html#s102">H5::PredType</a><li>NATIVE_UINT_FAST16
+: <a class="el" href="classH5_1_1PredType.html#s112">H5::PredType</a><li>NATIVE_UINT_FAST32
+: <a class="el" href="classH5_1_1PredType.html#s118">H5::PredType</a><li>NATIVE_UINT_FAST64
+: <a class="el" href="classH5_1_1PredType.html#s124">H5::PredType</a><li>NATIVE_UINT_FAST8
+: <a class="el" href="classH5_1_1PredType.html#s106">H5::PredType</a><li>NATIVE_UINT_LEAST16
+: <a class="el" href="classH5_1_1PredType.html#s110">H5::PredType</a><li>NATIVE_UINT_LEAST32
+: <a class="el" href="classH5_1_1PredType.html#s116">H5::PredType</a><li>NATIVE_UINT_LEAST64
+: <a class="el" href="classH5_1_1PredType.html#s122">H5::PredType</a><li>NATIVE_UINT_LEAST8
+: <a class="el" href="classH5_1_1PredType.html#s104">H5::PredType</a><li>NATIVE_ULLONG
+: <a class="el" href="classH5_1_1PredType.html#s88">H5::PredType</a><li>NATIVE_ULONG
+: <a class="el" href="classH5_1_1PredType.html#s86">H5::PredType</a><li>NATIVE_USHORT
+: <a class="el" href="classH5_1_1PredType.html#s82">H5::PredType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6f.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6f.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x6f.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,352 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindexHL" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>offsetSimple()
+: <a class="el" href="classH5_1_1DataSpace.html#a16">H5::DataSpace</a><li>open()
+: <a class="el" href="classH5_1_1H5Library.html#e0">H5::H5Library</a><li>openArrayType()
+: <a class="el" href="classH5_1_1CommonFG.html#a39">H5::CommonFG</a><li>openAttribute()
+: <a class="el" href="classH5_1_1H5Object.html#a4">H5::H5Object</a><li>openCompType()
+: <a class="el" href="classH5_1_1CommonFG.html#a41">H5::CommonFG</a><li>openDataSet()
+: <a class="el" href="classH5_1_1CommonFG.html#a7">H5::CommonFG</a><li>openDataType()
+: <a class="el" href="classH5_1_1CommonFG.html#a37">H5::CommonFG</a><li>openEnumType()
+: <a class="el" href="classH5_1_1CommonFG.html#a43">H5::CommonFG</a><li>openFloatType()
+: <a class="el" href="classH5_1_1CommonFG.html#a47">H5::CommonFG</a><li>openGroup()
+: <a class="el" href="classH5_1_1CommonFG.html#a3">H5::CommonFG</a><li>openIntType()
+: <a class="el" href="classH5_1_1CommonFG.html#a45">H5::CommonFG</a><li>openStrType()
+: <a class="el" href="classH5_1_1CommonFG.html#a49">H5::CommonFG</a><li>openVarLenType()
+: <a class="el" href="classH5_1_1CommonFG.html#a51">H5::CommonFG</a><li>operator=()
+: <a class="el" href="classH5_1_1PropList.html#a1">H5::PropList</a>, <a class="el" href="classH5_1_1PredType.html#a1">H5::PredType</a>, <a class="el" href="classH5_1_1IdComponent.html#a6">H5::IdComponent</a>, <a class="el" href="classH5_1_1DataType.html#a10">H5::DataType</a>, <a class="el" href="classH5_1_1DataSpace.html#a2">H5::DataSpace</a><li>operator==()
+: <a class="el" href="classH5_1_1PropList.html#a2">H5::PropList</a>, <a class="el" href="classH5_1_1DataType.html#a11">H5::DataType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x70.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x70.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x70.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,343 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindexHL" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>pack()
+: <a class="el" href="classH5_1_1CompType.html#a18">H5::CompType</a><li>PredType()
+: <a class="el" href="classH5_1_1PredType.html#a2">H5::PredType</a><li>printError()
+: <a class="el" href="classH5_1_1Exception.html#a7">H5::Exception</a><li>propExist()
+: <a class="el" href="classH5_1_1PropList.html#a27">H5::PropList</a><li>PropList()
+: <a class="el" href="classH5_1_1PropList.html#a32">H5::PropList</a><li>PropListIException()
+: <a class="el" href="classH5_1_1PropListIException.html#a1">H5::PropListIException</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x72.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x72.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x72.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,348 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindexHL" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>read()
+: <a class="el" href="classH5_1_1DataSet.html#a11">H5::DataSet</a>, <a class="el" href="classH5_1_1Attribute.html#a6">H5::Attribute</a><li>Reference()
+: <a class="el" href="classH5_1_1Group.html#a5">H5::Group</a>, <a class="el" href="classH5_1_1H5File.html#a19">H5::H5File</a>, <a class="el" href="classH5_1_1DataType.html#a28">H5::DataType</a>, <a class="el" href="classH5_1_1DataSet.html#a19">H5::DataSet</a><li>ReferenceException()
+: <a class="el" href="classH5_1_1ReferenceException.html#a1">H5::ReferenceException</a><li>registerFunc()
+: <a class="el" href="classH5_1_1DataType.html#a18">H5::DataType</a><li>removeAttr()
+: <a class="el" href="classH5_1_1H5Object.html#a10">H5::H5Object</a><li>removeComment()
+: <a class="el" href="classH5_1_1CommonFG.html#a12">H5::CommonFG</a><li>removeFilter()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a18">H5::DSetCreatPropList</a><li>removeProp()
+: <a class="el" href="classH5_1_1PropList.html#a29">H5::PropList</a><li>renameAttr()
+: <a class="el" href="classH5_1_1H5Object.html#a12">H5::H5Object</a><li>reopen()
+: <a class="el" href="classH5_1_1H5File.html#a16">H5::H5File</a><li>reOpen()
+: <a class="el" href="classH5_1_1H5File.html#a15">H5::H5File</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x73.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x73.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x73.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,427 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindexHL" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>selectAll()
+: <a class="el" href="classH5_1_1DataSpace.html#a17">H5::DataSpace</a><li>selectElements()
+: <a class="el" href="classH5_1_1DataSpace.html#a18">H5::DataSpace</a><li>selectHyperslab()
+: <a class="el" href="classH5_1_1DataSpace.html#a19">H5::DataSpace</a><li>selectNone()
+: <a class="el" href="classH5_1_1DataSpace.html#a20">H5::DataSpace</a><li>selectValid()
+: <a class="el" href="classH5_1_1DataSpace.html#a21">H5::DataSpace</a><li>setAlignment()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a19">H5::FileAccPropList</a><li>setAllocTime()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a2">H5::DSetCreatPropList</a><li>setAutoPrint()
+: <a class="el" href="classH5_1_1Exception.html#e0">H5::Exception</a><li>setBtreeRatios()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a2">H5::DSetMemXferPropList</a><li>setBuffer()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a0">H5::DSetMemXferPropList</a><li>setCache()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a23">H5::FileAccPropList</a><li>setChunk()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a4">H5::DSetCreatPropList</a><li>setComment()
+: <a class="el" href="classH5_1_1CommonFG.html#a14">H5::CommonFG</a><li>setCore()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a6">H5::FileAccPropList</a><li>setCset()
+: <a class="el" href="classH5_1_1StrType.html#a5">H5::StrType</a><li>setDeflate()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a19">H5::DSetCreatPropList</a><li>setDriver()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a1">H5::FileAccPropList</a><li>setEbias()
+: <a class="el" href="classH5_1_1FloatType.html#a3">H5::FloatType</a><li>setEDCCheck()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a15">H5::DSetMemXferPropList</a><li>setExtentNone()
+: <a class="el" href="classH5_1_1DataSpace.html#a22">H5::DataSpace</a><li>setExtentSimple()
+: <a class="el" href="classH5_1_1DataSpace.html#a23">H5::DataSpace</a><li>setExternal()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a20">H5::DSetCreatPropList</a><li>setFamily()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a8">H5::FileAccPropList</a><li>setFamilyOffset()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a3">H5::FileAccPropList</a><li>setFcloseDegree()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a25">H5::FileAccPropList</a><li>setFields()
+: <a class="el" href="classH5_1_1FloatType.html#a5">H5::FloatType</a><li>setFillTime()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a8">H5::DSetCreatPropList</a><li>setFillValue()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a10">H5::DSetCreatPropList</a><li>setFilter()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a21">H5::DSetCreatPropList</a><li>setFletcher32()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a22">H5::DSetCreatPropList</a><li>setFreeListLimits()
+: <a class="el" href="classH5_1_1H5Library.html#e6">H5::H5Library</a><li>setGcReferences()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a27">H5::FileAccPropList</a><li>setHyperVectorSize()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a13">H5::DSetMemXferPropList</a><li>setId()
+: <a class="el" href="classH5_1_1IdComponent.html#a7">H5::IdComponent</a><li>setInpad()
+: <a class="el" href="classH5_1_1FloatType.html#a7">H5::FloatType</a><li>setIstorek()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a8">H5::FileCreatPropList</a><li>setLayout()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a14">H5::DSetCreatPropList</a><li>setLog()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a18">H5::FileAccPropList</a><li>setMetaBlockSize()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a15">H5::FileAccPropList</a><li>setMulti()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a9">H5::DSetMemXferPropList</a><li>setMultiType()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a21">H5::FileAccPropList</a><li>setNorm()
+: <a class="el" href="classH5_1_1FloatType.html#a9">H5::FloatType</a><li>setOffset()
+: <a class="el" href="classH5_1_1AtomType.html#a4">H5::AtomType</a><li>setOrder()
+: <a class="el" href="classH5_1_1AtomType.html#a2">H5::AtomType</a><li>setOverflow()
+: <a class="el" href="classH5_1_1DataType.html#a14">H5::DataType</a><li>setPad()
+: <a class="el" href="classH5_1_1AtomType.html#a6">H5::AtomType</a><li>setPrecision()
+: <a class="el" href="classH5_1_1AtomType.html#a8">H5::AtomType</a><li>setPreserve()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a4">H5::DSetMemXferPropList</a><li>setProperty()
+: <a class="el" href="classH5_1_1PropList.html#a22">H5::PropList</a><li>setSec2()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a5">H5::FileAccPropList</a><li>setShuffle()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a23">H5::DSetCreatPropList</a><li>setSieveBufSize()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a13">H5::FileAccPropList</a><li>setSign()
+: <a class="el" href="classH5_1_1IntType.html#a3">H5::IntType</a><li>setSize()
+: <a class="el" href="classH5_1_1AtomType.html#a9">H5::AtomType</a><li>setSizes()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a4">H5::FileCreatPropList</a><li>setSmallDataBlockSize()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a11">H5::DSetMemXferPropList</a><li>setSplit()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a12">H5::FileAccPropList</a><li>setStdio()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a0">H5::FileAccPropList</a><li>setStrpad()
+: <a class="el" href="classH5_1_1StrType.html#a7">H5::StrType</a><li>setSymk()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a6">H5::FileCreatPropList</a><li>setTag()
+: <a class="el" href="classH5_1_1DataType.html#a22">H5::DataType</a><li>setUserblock()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a1">H5::FileCreatPropList</a><li>setVlenMemManager()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a7">H5::DSetMemXferPropList</a><li>STD_B16BE
+: <a class="el" href="classH5_1_1PredType.html#s18">H5::PredType</a><li>STD_B16LE
+: <a class="el" href="classH5_1_1PredType.html#s19">H5::PredType</a><li>STD_B32BE
+: <a class="el" href="classH5_1_1PredType.html#s20">H5::PredType</a><li>STD_B32LE
+: <a class="el" href="classH5_1_1PredType.html#s21">H5::PredType</a><li>STD_B64BE
+: <a class="el" href="classH5_1_1PredType.html#s22">H5::PredType</a><li>STD_B64LE
+: <a class="el" href="classH5_1_1PredType.html#s23">H5::PredType</a><li>STD_B8BE
+: <a class="el" href="classH5_1_1PredType.html#s16">H5::PredType</a><li>STD_B8LE
+: <a class="el" href="classH5_1_1PredType.html#s17">H5::PredType</a><li>STD_I16BE
+: <a class="el" href="classH5_1_1PredType.html#s2">H5::PredType</a><li>STD_I16LE
+: <a class="el" href="classH5_1_1PredType.html#s3">H5::PredType</a><li>STD_I32BE
+: <a class="el" href="classH5_1_1PredType.html#s4">H5::PredType</a><li>STD_I32LE
+: <a class="el" href="classH5_1_1PredType.html#s5">H5::PredType</a><li>STD_I64BE
+: <a class="el" href="classH5_1_1PredType.html#s6">H5::PredType</a><li>STD_I64LE
+: <a class="el" href="classH5_1_1PredType.html#s7">H5::PredType</a><li>STD_I8BE
+: <a class="el" href="classH5_1_1PredType.html#s0">H5::PredType</a><li>STD_I8LE
+: <a class="el" href="classH5_1_1PredType.html#s1">H5::PredType</a><li>STD_REF_DSETREG
+: <a class="el" href="classH5_1_1PredType.html#s25">H5::PredType</a><li>STD_REF_OBJ
+: <a class="el" href="classH5_1_1PredType.html#s24">H5::PredType</a><li>STD_U16BE
+: <a class="el" href="classH5_1_1PredType.html#s10">H5::PredType</a><li>STD_U16LE
+: <a class="el" href="classH5_1_1PredType.html#s11">H5::PredType</a><li>STD_U32BE
+: <a class="el" href="classH5_1_1PredType.html#s12">H5::PredType</a><li>STD_U32LE
+: <a class="el" href="classH5_1_1PredType.html#s13">H5::PredType</a><li>STD_U64BE
+: <a class="el" href="classH5_1_1PredType.html#s14">H5::PredType</a><li>STD_U64LE
+: <a class="el" href="classH5_1_1PredType.html#s15">H5::PredType</a><li>STD_U8BE
+: <a class="el" href="classH5_1_1PredType.html#s8">H5::PredType</a><li>STD_U8LE
+: <a class="el" href="classH5_1_1PredType.html#s9">H5::PredType</a><li>StrType()
+: <a class="el" href="classH5_1_1StrType.html#a11">H5::StrType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x74.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x74.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x74.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,338 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindexHL" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>throwException()
+: <a class="el" href="classH5_1_1Group.html#a7">H5::Group</a>, <a class="el" href="classH5_1_1H5File.html#a21">H5::H5File</a>, <a class="el" href="classH5_1_1CommonFG.html#a53">H5::CommonFG</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x75.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x75.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x75.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,344 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindexHL" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>UNIX_D32BE
+: <a class="el" href="classH5_1_1PredType.html#s32">H5::PredType</a><li>UNIX_D32LE
+: <a class="el" href="classH5_1_1PredType.html#s33">H5::PredType</a><li>UNIX_D64BE
+: <a class="el" href="classH5_1_1PredType.html#s34">H5::PredType</a><li>UNIX_D64LE
+: <a class="el" href="classH5_1_1PredType.html#s35">H5::PredType</a><li>unlink()
+: <a class="el" href="classH5_1_1CommonFG.html#a29">H5::CommonFG</a><li>unmount()
+: <a class="el" href="classH5_1_1CommonFG.html#a33">H5::CommonFG</a><li>unregister()
+: <a class="el" href="classH5_1_1DataType.html#a20">H5::DataType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x76.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x76.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x76.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,340 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindexHL" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
+<li>valueOf()
+: <a class="el" href="classH5_1_1EnumType.html#a11">H5::EnumType</a><li>VarLenType()
+: <a class="el" href="classH5_1_1VarLenType.html#b0">H5::VarLenType</a><li>vlenReclaim()
+: <a class="el" href="classH5_1_1DataSet.html#a9">H5::DataSet</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x77.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x77.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x77.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,339 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindexHL" href="functions_0x77.html#index_w">w</a> | <a class="qindex" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>walkErrorStack()
+: <a class="el" href="classH5_1_1Exception.html#e4">H5::Exception</a><li>write()
+: <a class="el" href="classH5_1_1DataSet.html#a13">H5::DataSet</a>, <a class="el" href="classH5_1_1Attribute.html#a8">H5::Attribute</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x7e.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x7e.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_0x7e.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,372 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindexHL" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions.html#index_a">a</a> | <a class="qindex" href="functions_0x63.html#index_c">c</a> | <a class="qindex" href="functions_0x64.html#index_d">d</a> | <a class="qindex" href="functions_0x65.html#index_e">e</a> | <a class="qindex" href="functions_0x66.html#index_f">f</a> | <a class="qindex" href="functions_0x67.html#index_g">g</a> | <a class="qindex" href="functions_0x68.html#index_h">h</a> | <a class="qindex" href="functions_0x69.html#index_i">i</a> | <a class="qindex" href="functions_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_0x70.html#index_p">p</a> | <a class="qindex" href="functions_0x72.html#index_r">r</a> | <a class="qindex" href="functions_0x73.html#index_s">s</a> | <a class="qindex" href="functions_0x74.html#index_t">t</a> | <a class="qindex" href="functions_0x75.html#index_u">u</a> | <a class="qindex" href="functions_0x76.html#index_v">v</a> | <a class="qindex" href="functions_0x77.html#index_w">w</a> | <a class="qindexHL" href="functions_0x7e.html#index_~">~</a></div>
+
+<p>
+Here is a list of all class members with links to the classes they belong to:
+<p>
+<h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
+<li>~AbstractDs()
+: <a class="el" href="classH5_1_1AbstractDs.html#a12">H5::AbstractDs</a><li>~ArrayType()
+: <a class="el" href="classH5_1_1ArrayType.html#a6">H5::ArrayType</a><li>~AtomType()
+: <a class="el" href="classH5_1_1AtomType.html#a12">H5::AtomType</a><li>~Attribute()
+: <a class="el" href="classH5_1_1Attribute.html#a14">H5::Attribute</a><li>~AttributeIException()
+: <a class="el" href="classH5_1_1AttributeIException.html#a2">H5::AttributeIException</a><li>~CommonFG()
+: <a class="el" href="classH5_1_1CommonFG.html#a55">H5::CommonFG</a><li>~CompType()
+: <a class="el" href="classH5_1_1CompType.html#a23">H5::CompType</a><li>~DataSet()
+: <a class="el" href="classH5_1_1DataSet.html#a25">H5::DataSet</a><li>~DataSetIException()
+: <a class="el" href="classH5_1_1DataSetIException.html#a2">H5::DataSetIException</a><li>~DataSpace()
+: <a class="el" href="classH5_1_1DataSpace.html#a28">H5::DataSpace</a><li>~DataSpaceIException()
+: <a class="el" href="classH5_1_1DataSpaceIException.html#a2">H5::DataSpaceIException</a><li>~DataType()
+: <a class="el" href="classH5_1_1DataType.html#a34">H5::DataType</a><li>~DataTypeIException()
+: <a class="el" href="classH5_1_1DataTypeIException.html#a2">H5::DataTypeIException</a><li>~DSetCreatPropList()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a28">H5::DSetCreatPropList</a><li>~DSetMemXferPropList()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a21">H5::DSetMemXferPropList</a><li>~EnumType()
+: <a class="el" href="classH5_1_1EnumType.html#a16">H5::EnumType</a><li>~Exception()
+: <a class="el" href="classH5_1_1Exception.html#a10">H5::Exception</a><li>~FileAccPropList()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a33">H5::FileAccPropList</a><li>~FileCreatPropList()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a13">H5::FileCreatPropList</a><li>~FileIException()
+: <a class="el" href="classH5_1_1FileIException.html#a2">H5::FileIException</a><li>~FloatType()
+: <a class="el" href="classH5_1_1FloatType.html#a14">H5::FloatType</a><li>~Group()
+: <a class="el" href="classH5_1_1Group.html#a11">H5::Group</a><li>~GroupIException()
+: <a class="el" href="classH5_1_1GroupIException.html#a2">H5::GroupIException</a><li>~H5File()
+: <a class="el" href="classH5_1_1H5File.html#a25">H5::H5File</a><li>~H5Object()
+: <a class="el" href="classH5_1_1H5Object.html#a14">H5::H5Object</a><li>~IdComponent()
+: <a class="el" href="classH5_1_1IdComponent.html#a13">H5::IdComponent</a><li>~IdComponentException()
+: <a class="el" href="classH5_1_1IdComponentException.html#a2">H5::IdComponentException</a><li>~IntType()
+: <a class="el" href="classH5_1_1IntType.html#a8">H5::IntType</a><li>~LibraryIException()
+: <a class="el" href="classH5_1_1LibraryIException.html#a2">H5::LibraryIException</a><li>~PredType()
+: <a class="el" href="classH5_1_1PredType.html#a4">H5::PredType</a><li>~PropList()
+: <a class="el" href="classH5_1_1PropList.html#a33">H5::PropList</a><li>~PropListIException()
+: <a class="el" href="classH5_1_1PropListIException.html#a2">H5::PropListIException</a><li>~ReferenceException()
+: <a class="el" href="classH5_1_1ReferenceException.html#a2">H5::ReferenceException</a><li>~StrType()
+: <a class="el" href="classH5_1_1StrType.html#a12">H5::StrType</a><li>~VarLenType()
+: <a class="el" href="classH5_1_1VarLenType.html#a4">H5::VarLenType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,343 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindexHL" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>AbstractDs()
+: <a class="el" href="classH5_1_1AbstractDs.html#b1">H5::AbstractDs</a><li>allFiltersAvail()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a0">H5::DSetCreatPropList</a><li>ArrayType()
+: <a class="el" href="classH5_1_1ArrayType.html#b0">H5::ArrayType</a><li>AtomType()
+: <a class="el" href="classH5_1_1AtomType.html#a11">H5::AtomType</a><li>Attribute()
+: <a class="el" href="classH5_1_1Attribute.html#a12">H5::Attribute</a><li>AttributeIException()
+: <a class="el" href="classH5_1_1AttributeIException.html#a1">H5::AttributeIException</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x63.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x63.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x63.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,351 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindexHL" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>checkVersion()
+: <a class="el" href="classH5_1_1H5Library.html#e4">H5::H5Library</a><li>clearErrorStack()
+: <a class="el" href="classH5_1_1Exception.html#e3">H5::Exception</a><li>close()
+: <a class="el" href="classH5_1_1PropList.html#a3">H5::PropList</a>, <a class="el" href="classH5_1_1H5Library.html#e1">H5::H5Library</a>, <a class="el" href="classH5_1_1Group.html#a0">H5::Group</a>, <a class="el" href="classH5_1_1H5File.html#a2">H5::H5File</a>, <a class="el" href="classH5_1_1DataType.html#a2">H5::DataType</a>, <a class="el" href="classH5_1_1DataSpace.html#a27">H5::DataSpace</a>, <a class="el" href="classH5_1_1DataSet.html#a22">H5::DataSet</a>, <a class="el" href="classH5_1_1Attribute.html#a13">H5::Attribute</a><li>closeClass()
+: <a class="el" href="classH5_1_1PropList.html#a4">H5::PropList</a><li>commit()
+: <a class="el" href="classH5_1_1DataType.html#a6">H5::DataType</a><li>committed()
+: <a class="el" href="classH5_1_1DataType.html#a7">H5::DataType</a><li>CommonFG()
+: <a class="el" href="classH5_1_1CommonFG.html#a54">H5::CommonFG</a><li>CompType()
+: <a class="el" href="classH5_1_1CompType.html#a22">H5::CompType</a><li>convert()
+: <a class="el" href="classH5_1_1DataType.html#a9">H5::DataType</a><li>copy()
+: <a class="el" href="classH5_1_1PropList.html#a5">H5::PropList</a>, <a class="el" href="classH5_1_1DataType.html#a3">H5::DataType</a>, <a class="el" href="classH5_1_1DataSpace.html#a3">H5::DataSpace</a><li>copyProp()
+: <a class="el" href="classH5_1_1PropList.html#a9">H5::PropList</a><li>createAttribute()
+: <a class="el" href="classH5_1_1H5Object.html#a1">H5::H5Object</a><li>createDataSet()
+: <a class="el" href="classH5_1_1CommonFG.html#a5">H5::CommonFG</a><li>createGroup()
+: <a class="el" href="classH5_1_1CommonFG.html#a1">H5::CommonFG</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x64.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x64.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x64.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,349 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindexHL" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>DataSet()
+: <a class="el" href="classH5_1_1DataSet.html#a24">H5::DataSet</a><li>DataSetIException()
+: <a class="el" href="classH5_1_1DataSetIException.html#a1">H5::DataSetIException</a><li>DataSpace()
+: <a class="el" href="classH5_1_1DataSpace.html#a26">H5::DataSpace</a><li>DataSpaceIException()
+: <a class="el" href="classH5_1_1DataSpaceIException.html#a1">H5::DataSpaceIException</a><li>DataType()
+: <a class="el" href="classH5_1_1DataType.html#a33">H5::DataType</a><li>DataTypeIException()
+: <a class="el" href="classH5_1_1DataTypeIException.html#a1">H5::DataTypeIException</a><li>decRefCount()
+: <a class="el" href="classH5_1_1IdComponent.html#a3">H5::IdComponent</a><li>detectClass()
+: <a class="el" href="classH5_1_1DataType.html#a24">H5::DataType</a><li>dontAtExit()
+: <a class="el" href="classH5_1_1H5Library.html#e2">H5::H5Library</a><li>dontPrint()
+: <a class="el" href="classH5_1_1Exception.html#e1">H5::Exception</a><li>DSetCreatPropList()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a27">H5::DSetCreatPropList</a><li>DSetMemXferPropList()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a20">H5::DSetMemXferPropList</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x65.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x65.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x65.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,341 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindexHL" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_e">- e -</a></h3><ul>
+<li>EnumType()
+: <a class="el" href="classH5_1_1EnumType.html#a15">H5::EnumType</a><li>Exception()
+: <a class="el" href="classH5_1_1Exception.html#a9">H5::Exception</a><li>extend()
+: <a class="el" href="classH5_1_1DataSet.html#a0">H5::DataSet</a><li>extentCopy()
+: <a class="el" href="classH5_1_1DataSpace.html#a4">H5::DataSpace</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x66.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x66.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x66.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,345 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindexHL" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>FileAccPropList()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a32">H5::FileAccPropList</a><li>FileCreatPropList()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a12">H5::FileCreatPropList</a><li>FileIException()
+: <a class="el" href="classH5_1_1FileIException.html#a1">H5::FileIException</a><li>fillMemBuf()
+: <a class="el" href="classH5_1_1DataSet.html#a2">H5::DataSet</a><li>find()
+: <a class="el" href="classH5_1_1DataType.html#a8">H5::DataType</a><li>FloatType()
+: <a class="el" href="classH5_1_1FloatType.html#a13">H5::FloatType</a><li>flush()
+: <a class="el" href="classH5_1_1H5Object.html#a5">H5::H5Object</a><li>fromClass()
+: <a class="el" href="classH5_1_1VarLenType.html#a0">H5::VarLenType</a>, <a class="el" href="classH5_1_1StrType.html#a8">H5::StrType</a>, <a class="el" href="classH5_1_1PropList.html#a30">H5::PropList</a>, <a class="el" href="classH5_1_1PredType.html#a0">H5::PredType</a>, <a class="el" href="classH5_1_1IntType.html#a4">H5::IntType</a>, <a class="el" href="classH5_1_1IdComponent.html#a12">H5::IdComponent</a>, <a class="el" href="classH5_1_1Group.html#a6">H5::Group</a>, <a class="el" href="classH5_1_1FloatType.html#a10">H5::FloatType</a>, <a class="el" href="classH5_1_1H5File.html#a20">H5::H5File</a>, <a class="el" href="classH5_1_1FileCreatPropList.html#a9">H5::FileCreatPropList</a>, <a class="el" href="classH5_1_1FileAccPropList.html#a29">H5::FileAccPropList</a>, <a class="el" href="classH5_1_1EnumType.html#a12">H5::EnumType</a>, <a class="el" href="classH5_1_1DSetMemXferPropList.html#a17">H5::DSetMemXferPropList</a>, <a class="el" href="classH5_1_1DSetCreatPropList.html#a24">H5::DSetCreatPropList</a>, <a class="el" href="classH5_1_1DataType.html#a31">H5::DataType</a>, <a class="el" href="classH5_1_1DataSpace.html#a24">H5::DataSpace</a>, <a class="el" href="classH5_1_1DataSet.html#a20">H5::DataSet</a>, <a class="el" href="classH5_1_1CompType.html#a19">H5::CompType</a>, <a class="el" href="classH5_1_1Attribute.html#a9">H5::Attribute</a>, <a class="el" href="classH5_1_1AtomType.html#a10">H5::AtomType</a>, <a class="el" href="classH5_1_1ArrayType.html#a3">H5::ArrayType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x67.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x67.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x67.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,464 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindexHL" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_g">- g -</a></h3><ul>
+<li>garbageCollect()
+: <a class="el" href="classH5_1_1H5Library.html#e5">H5::H5Library</a><li>getAccessPlist()
+: <a class="el" href="classH5_1_1H5File.html#a3">H5::H5File</a><li>getAlignment()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a20">H5::FileAccPropList</a><li>getAllocTime()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a1">H5::DSetCreatPropList</a><li>getArrayDims()
+: <a class="el" href="classH5_1_1ArrayType.html#a2">H5::ArrayType</a><li>getArrayNDims()
+: <a class="el" href="classH5_1_1ArrayType.html#a1">H5::ArrayType</a><li>getArrayType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a1">H5::AbstractDs</a><li>getAutoPrint()
+: <a class="el" href="classH5_1_1Exception.html#e2">H5::Exception</a><li>getBtreeRatios()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a3">H5::DSetMemXferPropList</a><li>getBuffer()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a1">H5::DSetMemXferPropList</a><li>getCache()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a24">H5::FileAccPropList</a><li>getCDetailMsg()
+: <a class="el" href="classH5_1_1Exception.html#a4">H5::Exception</a><li>getCFuncName()
+: <a class="el" href="classH5_1_1Exception.html#a6">H5::Exception</a><li>getChunk()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a3">H5::DSetCreatPropList</a><li>getClass()
+: <a class="el" href="classH5_1_1PropList.html#a10">H5::PropList</a>, <a class="el" href="classH5_1_1DataType.html#a4">H5::DataType</a><li>getClassName()
+: <a class="el" href="classH5_1_1PropList.html#a11">H5::PropList</a><li>getClassParent()
+: <a class="el" href="classH5_1_1PropList.html#a12">H5::PropList</a><li>getComment()
+: <a class="el" href="classH5_1_1CommonFG.html#a10">H5::CommonFG</a><li>getCompType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a2">H5::AbstractDs</a><li>getCore()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a7">H5::FileAccPropList</a><li>getCounter()
+: <a class="el" href="classH5_1_1IdComponent.html#a5">H5::IdComponent</a><li>getCreatePlist()
+: <a class="el" href="classH5_1_1H5File.html#a4">H5::H5File</a>, <a class="el" href="classH5_1_1DataSet.html#a3">H5::DataSet</a><li>getCset()
+: <a class="el" href="classH5_1_1StrType.html#a4">H5::StrType</a><li>getDataType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a0">H5::AbstractDs</a><li>getDetailMsg()
+: <a class="el" href="classH5_1_1Exception.html#a3">H5::Exception</a><li>getDriver()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a2">H5::FileAccPropList</a><li>getEbias()
+: <a class="el" href="classH5_1_1FloatType.html#a2">H5::FloatType</a><li>getEDCCheck()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a16">H5::DSetMemXferPropList</a><li>getEnumType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a3">H5::AbstractDs</a><li>getExternal()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a5">H5::DSetCreatPropList</a><li>getExternalCount()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a6">H5::DSetCreatPropList</a><li>getFamily()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a10">H5::FileAccPropList</a><li>getFamilyOffset()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a4">H5::FileAccPropList</a><li>getFcloseDegree()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a26">H5::FileAccPropList</a><li>getFields()
+: <a class="el" href="classH5_1_1FloatType.html#a4">H5::FloatType</a><li>getFileName()
+: <a class="el" href="classH5_1_1H5Object.html#a6">H5::H5Object</a>, <a class="el" href="classH5_1_1H5File.html#a5">H5::H5File</a><li>getFileSize()
+: <a class="el" href="classH5_1_1H5File.html#a6">H5::H5File</a><li>getFillTime()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a7">H5::DSetCreatPropList</a><li>getFillValue()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a9">H5::DSetCreatPropList</a><li>getFilter()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a11">H5::DSetCreatPropList</a><li>getFilterById()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a12">H5::DSetCreatPropList</a><li>getFloatType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a4">H5::AbstractDs</a><li>getFreeSpace()
+: <a class="el" href="classH5_1_1H5File.html#a7">H5::H5File</a><li>getFuncName()
+: <a class="el" href="classH5_1_1Exception.html#a5">H5::Exception</a><li>getGcReferences()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a28">H5::FileAccPropList</a><li>getHyperVectorSize()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a14">H5::DSetMemXferPropList</a><li>getId()
+: <a class="el" href="classH5_1_1PredType.html#a3">H5::PredType</a>, <a class="el" href="classH5_1_1IdComponent.html#a10">H5::IdComponent</a><li>getInpad()
+: <a class="el" href="classH5_1_1FloatType.html#a6">H5::FloatType</a><li>getIntType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a5">H5::AbstractDs</a><li>getIstorek()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a7">H5::FileCreatPropList</a><li>getLayout()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a13">H5::DSetCreatPropList</a><li>getLibVersion()
+: <a class="el" href="classH5_1_1H5Library.html#e3">H5::H5Library</a><li>getLinkval()
+: <a class="el" href="classH5_1_1CommonFG.html#a16">H5::CommonFG</a><li>getLocId()
+: <a class="el" href="classH5_1_1Group.html#a8">H5::Group</a>, <a class="el" href="classH5_1_1H5File.html#a22">H5::H5File</a>, <a class="el" href="classH5_1_1CommonFG.html#a52">H5::CommonFG</a><li>getMajorString()
+: <a class="el" href="classH5_1_1Exception.html#a1">H5::Exception</a><li>getMemberArrayType()
+: <a class="el" href="classH5_1_1CompType.html#a9">H5::CompType</a><li>getMemberClass()
+: <a class="el" href="classH5_1_1CompType.html#a2">H5::CompType</a><li>getMemberCompType()
+: <a class="el" href="classH5_1_1CompType.html#a10">H5::CompType</a><li>getMemberDataType()
+: <a class="el" href="classH5_1_1CompType.html#a8">H5::CompType</a><li>getMemberDims()
+: <a class="el" href="classH5_1_1CompType.html#a3">H5::CompType</a><li>getMemberEnumType()
+: <a class="el" href="classH5_1_1CompType.html#a11">H5::CompType</a><li>getMemberFloatType()
+: <a class="el" href="classH5_1_1CompType.html#a13">H5::CompType</a><li>getMemberIndex()
+: <a class="el" href="classH5_1_1EnumType.html#a5">H5::EnumType</a>, <a class="el" href="classH5_1_1CompType.html#a5">H5::CompType</a><li>getMemberIntType()
+: <a class="el" href="classH5_1_1CompType.html#a12">H5::CompType</a><li>getMemberName()
+: <a class="el" href="classH5_1_1CompType.html#a7">H5::CompType</a><li>getMemberOffset()
+: <a class="el" href="classH5_1_1CompType.html#a6">H5::CompType</a><li>getMemberStrType()
+: <a class="el" href="classH5_1_1CompType.html#a14">H5::CompType</a><li>getMemberValue()
+: <a class="el" href="classH5_1_1EnumType.html#a6">H5::EnumType</a><li>getMemberVarLenType()
+: <a class="el" href="classH5_1_1CompType.html#a15">H5::CompType</a><li>getMetaBlockSize()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a16">H5::FileAccPropList</a><li>getMinorString()
+: <a class="el" href="classH5_1_1Exception.html#a2">H5::Exception</a><li>getMulti()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a10">H5::DSetMemXferPropList</a><li>getMultiType()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a22">H5::FileAccPropList</a><li>getName()
+: <a class="el" href="classH5_1_1Attribute.html#a2">H5::Attribute</a><li>getNfilters()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a15">H5::DSetCreatPropList</a><li>getNmembers()
+: <a class="el" href="classH5_1_1EnumType.html#a3">H5::EnumType</a>, <a class="el" href="classH5_1_1CompType.html#a16">H5::CompType</a><li>getNorm()
+: <a class="el" href="classH5_1_1FloatType.html#a8">H5::FloatType</a><li>getNumAttrs()
+: <a class="el" href="classH5_1_1H5Object.html#a7">H5::H5Object</a><li>getNumObjs()
+: <a class="el" href="classH5_1_1CommonFG.html#a17">H5::CommonFG</a><li>getNumProps()
+: <a class="el" href="classH5_1_1PropList.html#a13">H5::PropList</a><li>getObjCount()
+: <a class="el" href="classH5_1_1H5File.html#a9">H5::H5File</a><li>getObjIDs()
+: <a class="el" href="classH5_1_1H5File.html#a10">H5::H5File</a><li>getObjinfo()
+: <a class="el" href="classH5_1_1CommonFG.html#a19">H5::CommonFG</a><li>getObjnameByIdx()
+: <a class="el" href="classH5_1_1CommonFG.html#a21">H5::CommonFG</a><li>getObjType()
+: <a class="el" href="classH5_1_1Group.html#a1">H5::Group</a>, <a class="el" href="classH5_1_1H5File.html#a11">H5::H5File</a>, <a class="el" href="classH5_1_1DataType.html#a29">H5::DataType</a>, <a class="el" href="classH5_1_1DataSet.html#a15">H5::DataSet</a><li>getObjTypeByIdx()
+: <a class="el" href="classH5_1_1CommonFG.html#a23">H5::CommonFG</a><li>getOffset()
+: <a class="el" href="classH5_1_1DataSet.html#a4">H5::DataSet</a>, <a class="el" href="classH5_1_1AtomType.html#a3">H5::AtomType</a><li>getOrder()
+: <a class="el" href="classH5_1_1AtomType.html#a1">H5::AtomType</a><li>getOverflow()
+: <a class="el" href="classH5_1_1DataType.html#a13">H5::DataType</a><li>getPad()
+: <a class="el" href="classH5_1_1AtomType.html#a5">H5::AtomType</a><li>getPrecision()
+: <a class="el" href="classH5_1_1AtomType.html#a7">H5::AtomType</a><li>getPreserve()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a5">H5::DSetMemXferPropList</a><li>getProperty()
+: <a class="el" href="classH5_1_1PropList.html#a17">H5::PropList</a><li>getPropSize()
+: <a class="el" href="classH5_1_1PropList.html#a24">H5::PropList</a><li>getRegion()
+: <a class="el" href="classH5_1_1Group.html#a2">H5::Group</a>, <a class="el" href="classH5_1_1H5File.html#a12">H5::H5File</a>, <a class="el" href="classH5_1_1DataType.html#a30">H5::DataType</a>, <a class="el" href="classH5_1_1DataSet.html#a16">H5::DataSet</a><li>getSelectBounds()
+: <a class="el" href="classH5_1_1DataSpace.html#a5">H5::DataSpace</a><li>getSelectElemNpoints()
+: <a class="el" href="classH5_1_1DataSpace.html#a6">H5::DataSpace</a><li>getSelectElemPointlist()
+: <a class="el" href="classH5_1_1DataSpace.html#a7">H5::DataSpace</a><li>getSelectHyperBlocklist()
+: <a class="el" href="classH5_1_1DataSpace.html#a8">H5::DataSpace</a><li>getSelectHyperNblocks()
+: <a class="el" href="classH5_1_1DataSpace.html#a9">H5::DataSpace</a><li>getSelectNpoints()
+: <a class="el" href="classH5_1_1DataSpace.html#a10">H5::DataSpace</a><li>getSieveBufSize()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a14">H5::FileAccPropList</a><li>getSign()
+: <a class="el" href="classH5_1_1IntType.html#a2">H5::IntType</a><li>getSimpleExtentDims()
+: <a class="el" href="classH5_1_1DataSpace.html#a11">H5::DataSpace</a><li>getSimpleExtentNdims()
+: <a class="el" href="classH5_1_1DataSpace.html#a12">H5::DataSpace</a><li>getSimpleExtentNpoints()
+: <a class="el" href="classH5_1_1DataSpace.html#a13">H5::DataSpace</a><li>getSimpleExtentType()
+: <a class="el" href="classH5_1_1DataSpace.html#a14">H5::DataSpace</a><li>getSize()
+: <a class="el" href="classH5_1_1DataType.html#a15">H5::DataType</a><li>getSizes()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a3">H5::FileCreatPropList</a><li>getSmallDataBlockSize()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a12">H5::DSetMemXferPropList</a><li>getSpace()
+: <a class="el" href="classH5_1_1DataSet.html#a5">H5::DataSet</a>, <a class="el" href="classH5_1_1Attribute.html#a3">H5::Attribute</a>, <a class="el" href="classH5_1_1AbstractDs.html#a8">H5::AbstractDs</a><li>getSpaceStatus()
+: <a class="el" href="classH5_1_1DataSet.html#a6">H5::DataSet</a><li>getStorageSize()
+: <a class="el" href="classH5_1_1DataSet.html#a7">H5::DataSet</a>, <a class="el" href="classH5_1_1Attribute.html#a4">H5::Attribute</a>, <a class="el" href="classH5_1_1AbstractDs.html#a10">H5::AbstractDs</a><li>getStrpad()
+: <a class="el" href="classH5_1_1StrType.html#a6">H5::StrType</a><li>getStrType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a6">H5::AbstractDs</a><li>getSuper()
+: <a class="el" href="classH5_1_1DataType.html#a16">H5::DataType</a><li>getSymk()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a5">H5::FileCreatPropList</a><li>getTag()
+: <a class="el" href="classH5_1_1DataType.html#a23">H5::DataType</a><li>getTypeClass()
+: <a class="el" href="classH5_1_1AbstractDs.html#a9">H5::AbstractDs</a><li>getUserblock()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a2">H5::FileCreatPropList</a><li>getVarLenType()
+: <a class="el" href="classH5_1_1AbstractDs.html#a7">H5::AbstractDs</a><li>getVersion()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a0">H5::FileCreatPropList</a><li>getVFDHandle()
+: <a class="el" href="classH5_1_1H5File.html#a14">H5::H5File</a><li>getVlenBufSize()
+: <a class="el" href="classH5_1_1DataSet.html#a8">H5::DataSet</a><li>getVlenMemManager()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a8">H5::DSetMemXferPropList</a><li>Group()
+: <a class="el" href="classH5_1_1Group.html#a12">H5::Group</a><li>GroupIException()
+: <a class="el" href="classH5_1_1GroupIException.html#a1">H5::GroupIException</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x68.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x68.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x68.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,339 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindexHL" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_h">- h -</a></h3><ul>
+<li>H5File()
+: <a class="el" href="classH5_1_1H5File.html#a24">H5::H5File</a><li>H5Object()
+: <a class="el" href="classH5_1_1H5Object.html#a13">H5::H5Object</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x69.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x69.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x69.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,351 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindexHL" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>IdComponent()
+: <a class="el" href="classH5_1_1IdComponent.html#a9">H5::IdComponent</a><li>IdComponentException()
+: <a class="el" href="classH5_1_1IdComponentException.html#a1">H5::IdComponentException</a><li>incRefCount()
+: <a class="el" href="classH5_1_1IdComponent.html#a1">H5::IdComponent</a><li>inMemFunc()
+: <a class="el" href="classH5_1_1IdComponent.html#a11">H5::IdComponent</a><li>insert()
+: <a class="el" href="classH5_1_1EnumType.html#a8">H5::EnumType</a><li>insertMember()
+: <a class="el" href="classH5_1_1CompType.html#a17">H5::CompType</a><li>IntType()
+: <a class="el" href="classH5_1_1IntType.html#a7">H5::IntType</a><li>isAClass()
+: <a class="el" href="classH5_1_1PropList.html#a25">H5::PropList</a><li>isFillValueDefined()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a16">H5::DSetCreatPropList</a><li>isHdf5()
+: <a class="el" href="classH5_1_1H5File.html#e1">H5::H5File</a><li>isSimple()
+: <a class="el" href="classH5_1_1DataSpace.html#a15">H5::DataSpace</a><li>isVariableStr()
+: <a class="el" href="classH5_1_1DataType.html#a25">H5::DataType</a><li>iterateAttrs()
+: <a class="el" href="classH5_1_1H5Object.html#a8">H5::H5Object</a><li>iterateElems()
+: <a class="el" href="classH5_1_1DataSet.html#a14">H5::DataSet</a>, <a class="el" href="classH5_1_1CommonFG.html#a25">H5::CommonFG</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6c.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6c.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6c.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,340 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindexHL" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_l">- l -</a></h3><ul>
+<li>LibraryIException()
+: <a class="el" href="classH5_1_1LibraryIException.html#a1">H5::LibraryIException</a><li>link()
+: <a class="el" href="classH5_1_1CommonFG.html#a27">H5::CommonFG</a><li>lock()
+: <a class="el" href="classH5_1_1DataType.html#a12">H5::DataType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6d.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6d.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6d.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,340 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindexHL" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>modifyFilter()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a17">H5::DSetCreatPropList</a><li>mount()
+: <a class="el" href="classH5_1_1CommonFG.html#a31">H5::CommonFG</a><li>move()
+: <a class="el" href="classH5_1_1CommonFG.html#a35">H5::CommonFG</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6e.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6e.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6e.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,338 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindexHL" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>nameOf()
+: <a class="el" href="classH5_1_1EnumType.html#a9">H5::EnumType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6f.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6f.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x6f.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,352 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindexHL" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_o">- o -</a></h3><ul>
+<li>offsetSimple()
+: <a class="el" href="classH5_1_1DataSpace.html#a16">H5::DataSpace</a><li>open()
+: <a class="el" href="classH5_1_1H5Library.html#e0">H5::H5Library</a><li>openArrayType()
+: <a class="el" href="classH5_1_1CommonFG.html#a39">H5::CommonFG</a><li>openAttribute()
+: <a class="el" href="classH5_1_1H5Object.html#a4">H5::H5Object</a><li>openCompType()
+: <a class="el" href="classH5_1_1CommonFG.html#a41">H5::CommonFG</a><li>openDataSet()
+: <a class="el" href="classH5_1_1CommonFG.html#a7">H5::CommonFG</a><li>openDataType()
+: <a class="el" href="classH5_1_1CommonFG.html#a37">H5::CommonFG</a><li>openEnumType()
+: <a class="el" href="classH5_1_1CommonFG.html#a43">H5::CommonFG</a><li>openFloatType()
+: <a class="el" href="classH5_1_1CommonFG.html#a47">H5::CommonFG</a><li>openGroup()
+: <a class="el" href="classH5_1_1CommonFG.html#a3">H5::CommonFG</a><li>openIntType()
+: <a class="el" href="classH5_1_1CommonFG.html#a45">H5::CommonFG</a><li>openStrType()
+: <a class="el" href="classH5_1_1CommonFG.html#a49">H5::CommonFG</a><li>openVarLenType()
+: <a class="el" href="classH5_1_1CommonFG.html#a51">H5::CommonFG</a><li>operator=()
+: <a class="el" href="classH5_1_1PropList.html#a1">H5::PropList</a>, <a class="el" href="classH5_1_1PredType.html#a1">H5::PredType</a>, <a class="el" href="classH5_1_1IdComponent.html#a6">H5::IdComponent</a>, <a class="el" href="classH5_1_1DataType.html#a10">H5::DataType</a>, <a class="el" href="classH5_1_1DataSpace.html#a2">H5::DataSpace</a><li>operator==()
+: <a class="el" href="classH5_1_1PropList.html#a2">H5::PropList</a>, <a class="el" href="classH5_1_1DataType.html#a11">H5::DataType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x70.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x70.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x70.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,343 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindexHL" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_p">- p -</a></h3><ul>
+<li>pack()
+: <a class="el" href="classH5_1_1CompType.html#a18">H5::CompType</a><li>PredType()
+: <a class="el" href="classH5_1_1PredType.html#a2">H5::PredType</a><li>printError()
+: <a class="el" href="classH5_1_1Exception.html#a7">H5::Exception</a><li>propExist()
+: <a class="el" href="classH5_1_1PropList.html#a27">H5::PropList</a><li>PropList()
+: <a class="el" href="classH5_1_1PropList.html#a32">H5::PropList</a><li>PropListIException()
+: <a class="el" href="classH5_1_1PropListIException.html#a1">H5::PropListIException</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x72.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x72.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x72.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,348 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindexHL" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_r">- r -</a></h3><ul>
+<li>read()
+: <a class="el" href="classH5_1_1DataSet.html#a11">H5::DataSet</a>, <a class="el" href="classH5_1_1Attribute.html#a6">H5::Attribute</a><li>Reference()
+: <a class="el" href="classH5_1_1Group.html#a5">H5::Group</a>, <a class="el" href="classH5_1_1H5File.html#a19">H5::H5File</a>, <a class="el" href="classH5_1_1DataType.html#a28">H5::DataType</a>, <a class="el" href="classH5_1_1DataSet.html#a19">H5::DataSet</a><li>ReferenceException()
+: <a class="el" href="classH5_1_1ReferenceException.html#a1">H5::ReferenceException</a><li>registerFunc()
+: <a class="el" href="classH5_1_1DataType.html#a18">H5::DataType</a><li>removeAttr()
+: <a class="el" href="classH5_1_1H5Object.html#a10">H5::H5Object</a><li>removeComment()
+: <a class="el" href="classH5_1_1CommonFG.html#a12">H5::CommonFG</a><li>removeFilter()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a18">H5::DSetCreatPropList</a><li>removeProp()
+: <a class="el" href="classH5_1_1PropList.html#a29">H5::PropList</a><li>renameAttr()
+: <a class="el" href="classH5_1_1H5Object.html#a12">H5::H5Object</a><li>reopen()
+: <a class="el" href="classH5_1_1H5File.html#a16">H5::H5File</a><li>reOpen()
+: <a class="el" href="classH5_1_1H5File.html#a15">H5::H5File</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x73.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x73.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x73.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,401 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindexHL" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>selectAll()
+: <a class="el" href="classH5_1_1DataSpace.html#a17">H5::DataSpace</a><li>selectElements()
+: <a class="el" href="classH5_1_1DataSpace.html#a18">H5::DataSpace</a><li>selectHyperslab()
+: <a class="el" href="classH5_1_1DataSpace.html#a19">H5::DataSpace</a><li>selectNone()
+: <a class="el" href="classH5_1_1DataSpace.html#a20">H5::DataSpace</a><li>selectValid()
+: <a class="el" href="classH5_1_1DataSpace.html#a21">H5::DataSpace</a><li>setAlignment()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a19">H5::FileAccPropList</a><li>setAllocTime()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a2">H5::DSetCreatPropList</a><li>setAutoPrint()
+: <a class="el" href="classH5_1_1Exception.html#e0">H5::Exception</a><li>setBtreeRatios()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a2">H5::DSetMemXferPropList</a><li>setBuffer()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a0">H5::DSetMemXferPropList</a><li>setCache()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a23">H5::FileAccPropList</a><li>setChunk()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a4">H5::DSetCreatPropList</a><li>setComment()
+: <a class="el" href="classH5_1_1CommonFG.html#a14">H5::CommonFG</a><li>setCore()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a6">H5::FileAccPropList</a><li>setCset()
+: <a class="el" href="classH5_1_1StrType.html#a5">H5::StrType</a><li>setDeflate()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a19">H5::DSetCreatPropList</a><li>setDriver()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a1">H5::FileAccPropList</a><li>setEbias()
+: <a class="el" href="classH5_1_1FloatType.html#a3">H5::FloatType</a><li>setEDCCheck()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a15">H5::DSetMemXferPropList</a><li>setExtentNone()
+: <a class="el" href="classH5_1_1DataSpace.html#a22">H5::DataSpace</a><li>setExtentSimple()
+: <a class="el" href="classH5_1_1DataSpace.html#a23">H5::DataSpace</a><li>setExternal()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a20">H5::DSetCreatPropList</a><li>setFamily()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a8">H5::FileAccPropList</a><li>setFamilyOffset()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a3">H5::FileAccPropList</a><li>setFcloseDegree()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a25">H5::FileAccPropList</a><li>setFields()
+: <a class="el" href="classH5_1_1FloatType.html#a5">H5::FloatType</a><li>setFillTime()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a8">H5::DSetCreatPropList</a><li>setFillValue()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a10">H5::DSetCreatPropList</a><li>setFilter()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a21">H5::DSetCreatPropList</a><li>setFletcher32()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a22">H5::DSetCreatPropList</a><li>setFreeListLimits()
+: <a class="el" href="classH5_1_1H5Library.html#e6">H5::H5Library</a><li>setGcReferences()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a27">H5::FileAccPropList</a><li>setHyperVectorSize()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a13">H5::DSetMemXferPropList</a><li>setId()
+: <a class="el" href="classH5_1_1IdComponent.html#a7">H5::IdComponent</a><li>setInpad()
+: <a class="el" href="classH5_1_1FloatType.html#a7">H5::FloatType</a><li>setIstorek()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a8">H5::FileCreatPropList</a><li>setLayout()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a14">H5::DSetCreatPropList</a><li>setLog()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a18">H5::FileAccPropList</a><li>setMetaBlockSize()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a15">H5::FileAccPropList</a><li>setMulti()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a9">H5::DSetMemXferPropList</a><li>setMultiType()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a21">H5::FileAccPropList</a><li>setNorm()
+: <a class="el" href="classH5_1_1FloatType.html#a9">H5::FloatType</a><li>setOffset()
+: <a class="el" href="classH5_1_1AtomType.html#a4">H5::AtomType</a><li>setOrder()
+: <a class="el" href="classH5_1_1AtomType.html#a2">H5::AtomType</a><li>setOverflow()
+: <a class="el" href="classH5_1_1DataType.html#a14">H5::DataType</a><li>setPad()
+: <a class="el" href="classH5_1_1AtomType.html#a6">H5::AtomType</a><li>setPrecision()
+: <a class="el" href="classH5_1_1AtomType.html#a8">H5::AtomType</a><li>setPreserve()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a4">H5::DSetMemXferPropList</a><li>setProperty()
+: <a class="el" href="classH5_1_1PropList.html#a22">H5::PropList</a><li>setSec2()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a5">H5::FileAccPropList</a><li>setShuffle()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a23">H5::DSetCreatPropList</a><li>setSieveBufSize()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a13">H5::FileAccPropList</a><li>setSign()
+: <a class="el" href="classH5_1_1IntType.html#a3">H5::IntType</a><li>setSize()
+: <a class="el" href="classH5_1_1AtomType.html#a9">H5::AtomType</a><li>setSizes()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a4">H5::FileCreatPropList</a><li>setSmallDataBlockSize()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a11">H5::DSetMemXferPropList</a><li>setSplit()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a12">H5::FileAccPropList</a><li>setStdio()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a0">H5::FileAccPropList</a><li>setStrpad()
+: <a class="el" href="classH5_1_1StrType.html#a7">H5::StrType</a><li>setSymk()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a6">H5::FileCreatPropList</a><li>setTag()
+: <a class="el" href="classH5_1_1DataType.html#a22">H5::DataType</a><li>setUserblock()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a1">H5::FileCreatPropList</a><li>setVlenMemManager()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a7">H5::DSetMemXferPropList</a><li>StrType()
+: <a class="el" href="classH5_1_1StrType.html#a11">H5::StrType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x74.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x74.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x74.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,338 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindexHL" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_t">- t -</a></h3><ul>
+<li>throwException()
+: <a class="el" href="classH5_1_1Group.html#a7">H5::Group</a>, <a class="el" href="classH5_1_1H5File.html#a21">H5::H5File</a>, <a class="el" href="classH5_1_1CommonFG.html#a53">H5::CommonFG</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x75.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x75.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x75.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,340 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindexHL" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>unlink()
+: <a class="el" href="classH5_1_1CommonFG.html#a29">H5::CommonFG</a><li>unmount()
+: <a class="el" href="classH5_1_1CommonFG.html#a33">H5::CommonFG</a><li>unregister()
+: <a class="el" href="classH5_1_1DataType.html#a20">H5::DataType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x76.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x76.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x76.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,340 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindexHL" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_v">- v -</a></h3><ul>
+<li>valueOf()
+: <a class="el" href="classH5_1_1EnumType.html#a11">H5::EnumType</a><li>VarLenType()
+: <a class="el" href="classH5_1_1VarLenType.html#b0">H5::VarLenType</a><li>vlenReclaim()
+: <a class="el" href="classH5_1_1DataSet.html#a9">H5::DataSet</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x77.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x77.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x77.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,339 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindexHL" href="functions_func_0x77.html#index_w">w</a> | <a class="qindex" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_w">- w -</a></h3><ul>
+<li>walkErrorStack()
+: <a class="el" href="classH5_1_1Exception.html#e4">H5::Exception</a><li>write()
+: <a class="el" href="classH5_1_1DataSet.html#a13">H5::DataSet</a>, <a class="el" href="classH5_1_1Attribute.html#a8">H5::Attribute</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x7e.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x7e.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_func_0x7e.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,372 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"> | <a class="qindex" href="functions.html">All</a> | <a class="qindexHL" href="functions_func.html">Functions</a> | <a class="qindex" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="functions_func.html#index_a">a</a> | <a class="qindex" href="functions_func_0x63.html#index_c">c</a> | <a class="qindex" href="functions_func_0x64.html#index_d">d</a> | <a class="qindex" href="functions_func_0x65.html#index_e">e</a> | <a class="qindex" href="functions_func_0x66.html#index_f">f</a> | <a class="qindex" href="functions_func_0x67.html#index_g">g</a> | <a class="qindex" href="functions_func_0x68.html#index_h">h</a> | <a class="qindex" href="functions_func_0x69.html#index_i">i</a> | <a class="qindex" href="functions_func_0x6c.html#index_l">l</a> | <a class="qindex" href="functions_func_0x6d.html#index_m">m</a> | <a class="qindex" href="functions_func_0x6e.html#index_n">n</a> | <a class="qindex" href="functions_func_0x6f.html#index_o">o</a> | <a class="qindex" href="functions_func_0x70.html#index_p">p</a> | <a class="qindex" href="functions_func_0x72.html#index_r">r</a> | <a class="qindex" href="functions_func_0x73.html#index_s">s</a> | <a class="qindex" href="functions_func_0x74.html#index_t">t</a> | <a class="qindex" href="functions_func_0x75.html#index_u">u</a> | <a class="qindex" href="functions_func_0x76.html#index_v">v</a> | <a class="qindex" href="functions_func_0x77.html#index_w">w</a> | <a class="qindexHL" href="functions_func_0x7e.html#index_~">~</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_~">- ~ -</a></h3><ul>
+<li>~AbstractDs()
+: <a class="el" href="classH5_1_1AbstractDs.html#a12">H5::AbstractDs</a><li>~ArrayType()
+: <a class="el" href="classH5_1_1ArrayType.html#a6">H5::ArrayType</a><li>~AtomType()
+: <a class="el" href="classH5_1_1AtomType.html#a12">H5::AtomType</a><li>~Attribute()
+: <a class="el" href="classH5_1_1Attribute.html#a14">H5::Attribute</a><li>~AttributeIException()
+: <a class="el" href="classH5_1_1AttributeIException.html#a2">H5::AttributeIException</a><li>~CommonFG()
+: <a class="el" href="classH5_1_1CommonFG.html#a55">H5::CommonFG</a><li>~CompType()
+: <a class="el" href="classH5_1_1CompType.html#a23">H5::CompType</a><li>~DataSet()
+: <a class="el" href="classH5_1_1DataSet.html#a25">H5::DataSet</a><li>~DataSetIException()
+: <a class="el" href="classH5_1_1DataSetIException.html#a2">H5::DataSetIException</a><li>~DataSpace()
+: <a class="el" href="classH5_1_1DataSpace.html#a28">H5::DataSpace</a><li>~DataSpaceIException()
+: <a class="el" href="classH5_1_1DataSpaceIException.html#a2">H5::DataSpaceIException</a><li>~DataType()
+: <a class="el" href="classH5_1_1DataType.html#a34">H5::DataType</a><li>~DataTypeIException()
+: <a class="el" href="classH5_1_1DataTypeIException.html#a2">H5::DataTypeIException</a><li>~DSetCreatPropList()
+: <a class="el" href="classH5_1_1DSetCreatPropList.html#a28">H5::DSetCreatPropList</a><li>~DSetMemXferPropList()
+: <a class="el" href="classH5_1_1DSetMemXferPropList.html#a21">H5::DSetMemXferPropList</a><li>~EnumType()
+: <a class="el" href="classH5_1_1EnumType.html#a16">H5::EnumType</a><li>~Exception()
+: <a class="el" href="classH5_1_1Exception.html#a10">H5::Exception</a><li>~FileAccPropList()
+: <a class="el" href="classH5_1_1FileAccPropList.html#a33">H5::FileAccPropList</a><li>~FileCreatPropList()
+: <a class="el" href="classH5_1_1FileCreatPropList.html#a13">H5::FileCreatPropList</a><li>~FileIException()
+: <a class="el" href="classH5_1_1FileIException.html#a2">H5::FileIException</a><li>~FloatType()
+: <a class="el" href="classH5_1_1FloatType.html#a14">H5::FloatType</a><li>~Group()
+: <a class="el" href="classH5_1_1Group.html#a11">H5::Group</a><li>~GroupIException()
+: <a class="el" href="classH5_1_1GroupIException.html#a2">H5::GroupIException</a><li>~H5File()
+: <a class="el" href="classH5_1_1H5File.html#a25">H5::H5File</a><li>~H5Object()
+: <a class="el" href="classH5_1_1H5Object.html#a14">H5::H5Object</a><li>~IdComponent()
+: <a class="el" href="classH5_1_1IdComponent.html#a13">H5::IdComponent</a><li>~IdComponentException()
+: <a class="el" href="classH5_1_1IdComponentException.html#a2">H5::IdComponentException</a><li>~IntType()
+: <a class="el" href="classH5_1_1IntType.html#a8">H5::IntType</a><li>~LibraryIException()
+: <a class="el" href="classH5_1_1LibraryIException.html#a2">H5::LibraryIException</a><li>~PredType()
+: <a class="el" href="classH5_1_1PredType.html#a4">H5::PredType</a><li>~PropList()
+: <a class="el" href="classH5_1_1PropList.html#a33">H5::PropList</a><li>~PropListIException()
+: <a class="el" href="classH5_1_1PropListIException.html#a2">H5::PropListIException</a><li>~ReferenceException()
+: <a class="el" href="classH5_1_1ReferenceException.html#a2">H5::ReferenceException</a><li>~StrType()
+: <a class="el" href="classH5_1_1StrType.html#a12">H5::StrType</a><li>~VarLenType()
+: <a class="el" href="classH5_1_1VarLenType.html#a4">H5::VarLenType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_vars.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_vars.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/functions_vars.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,482 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindexHL" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<div class="qindex"><a class="qindex" href="functions.html">All</a> | <a class="qindex" href="functions_func.html">Functions</a> | <a class="qindexHL" href="functions_vars.html">Variables</a></div>
+<div class="qindex"><a class="qindex" href="#index_a">a</a> | <a class="qindex" href="#index_c">c</a> | <a class="qindex" href="#index_d">d</a> | <a class="qindex" href="#index_f">f</a> | <a class="qindex" href="#index_i">i</a> | <a class="qindex" href="#index_m">m</a> | <a class="qindex" href="#index_n">n</a> | <a class="qindex" href="#index_s">s</a> | <a class="qindex" href="#index_u">u</a></div>
+
+<p>
+
+<p>
+<h3><a class="anchor" name="index_a">- a -</a></h3><ul>
+<li>ALL
+: <a class="el" href="classH5_1_1DataSpace.html#s0">H5::DataSpace</a><li>ALPHA_B16
+: <a class="el" href="classH5_1_1PredType.html#s59">H5::PredType</a><li>ALPHA_B32
+: <a class="el" href="classH5_1_1PredType.html#s60">H5::PredType</a><li>ALPHA_B64
+: <a class="el" href="classH5_1_1PredType.html#s61">H5::PredType</a><li>ALPHA_B8
+: <a class="el" href="classH5_1_1PredType.html#s58">H5::PredType</a><li>ALPHA_F32
+: <a class="el" href="classH5_1_1PredType.html#s62">H5::PredType</a><li>ALPHA_F64
+: <a class="el" href="classH5_1_1PredType.html#s63">H5::PredType</a><li>ALPHA_I16
+: <a class="el" href="classH5_1_1PredType.html#s51">H5::PredType</a><li>ALPHA_I32
+: <a class="el" href="classH5_1_1PredType.html#s52">H5::PredType</a><li>ALPHA_I64
+: <a class="el" href="classH5_1_1PredType.html#s53">H5::PredType</a><li>ALPHA_I8
+: <a class="el" href="classH5_1_1PredType.html#s50">H5::PredType</a><li>ALPHA_U16
+: <a class="el" href="classH5_1_1PredType.html#s55">H5::PredType</a><li>ALPHA_U32
+: <a class="el" href="classH5_1_1PredType.html#s56">H5::PredType</a><li>ALPHA_U64
+: <a class="el" href="classH5_1_1PredType.html#s57">H5::PredType</a><li>ALPHA_U8
+: <a class="el" href="classH5_1_1PredType.html#s54">H5::PredType</a></ul>
+<h3><a class="anchor" name="index_c">- c -</a></h3><ul>
+<li>C_S1
+: <a class="el" href="classH5_1_1PredType.html#s26">H5::PredType</a></ul>
+<h3><a class="anchor" name="index_d">- d -</a></h3><ul>
+<li>DEFAULT
+: <a class="el" href="classH5_1_1PropList.html#s0">H5::PropList</a>, <a class="el" href="classH5_1_1FileCreatPropList.html#s0">H5::FileCreatPropList</a>, <a class="el" href="classH5_1_1FileAccPropList.html#s0">H5::FileAccPropList</a>, <a class="el" href="classH5_1_1DSetMemXferPropList.html#s0">H5::DSetMemXferPropList</a>, <a class="el" href="classH5_1_1DSetCreatPropList.html#s0">H5::DSetCreatPropList</a><li>DEFAULT_MSG
+: <a class="el" href="classH5_1_1Exception.html#t0">H5::Exception</a></ul>
+<h3><a class="anchor" name="index_f">- f -</a></h3><ul>
+<li>FORTRAN_S1
+: <a class="el" href="classH5_1_1PredType.html#s27">H5::PredType</a></ul>
+<h3><a class="anchor" name="index_i">- i -</a></h3><ul>
+<li>IEEE_F32BE
+: <a class="el" href="classH5_1_1PredType.html#s28">H5::PredType</a><li>IEEE_F32LE
+: <a class="el" href="classH5_1_1PredType.html#s29">H5::PredType</a><li>IEEE_F64BE
+: <a class="el" href="classH5_1_1PredType.html#s30">H5::PredType</a><li>IEEE_F64LE
+: <a class="el" href="classH5_1_1PredType.html#s31">H5::PredType</a><li>INTEL_B16
+: <a class="el" href="classH5_1_1PredType.html#s45">H5::PredType</a><li>INTEL_B32
+: <a class="el" href="classH5_1_1PredType.html#s46">H5::PredType</a><li>INTEL_B64
+: <a class="el" href="classH5_1_1PredType.html#s47">H5::PredType</a><li>INTEL_B8
+: <a class="el" href="classH5_1_1PredType.html#s44">H5::PredType</a><li>INTEL_F32
+: <a class="el" href="classH5_1_1PredType.html#s48">H5::PredType</a><li>INTEL_F64
+: <a class="el" href="classH5_1_1PredType.html#s49">H5::PredType</a><li>INTEL_I16
+: <a class="el" href="classH5_1_1PredType.html#s37">H5::PredType</a><li>INTEL_I32
+: <a class="el" href="classH5_1_1PredType.html#s38">H5::PredType</a><li>INTEL_I64
+: <a class="el" href="classH5_1_1PredType.html#s39">H5::PredType</a><li>INTEL_I8
+: <a class="el" href="classH5_1_1PredType.html#s36">H5::PredType</a><li>INTEL_U16
+: <a class="el" href="classH5_1_1PredType.html#s41">H5::PredType</a><li>INTEL_U32
+: <a class="el" href="classH5_1_1PredType.html#s42">H5::PredType</a><li>INTEL_U64
+: <a class="el" href="classH5_1_1PredType.html#s43">H5::PredType</a><li>INTEL_U8
+: <a class="el" href="classH5_1_1PredType.html#s40">H5::PredType</a><li>is_predtype
+: <a class="el" href="classH5_1_1DataType.html#p0">H5::DataType</a></ul>
+<h3><a class="anchor" name="index_m">- m -</a></h3><ul>
+<li>MIPS_B16
+: <a class="el" href="classH5_1_1PredType.html#s73">H5::PredType</a><li>MIPS_B32
+: <a class="el" href="classH5_1_1PredType.html#s74">H5::PredType</a><li>MIPS_B64
+: <a class="el" href="classH5_1_1PredType.html#s75">H5::PredType</a><li>MIPS_B8
+: <a class="el" href="classH5_1_1PredType.html#s72">H5::PredType</a><li>MIPS_F32
+: <a class="el" href="classH5_1_1PredType.html#s76">H5::PredType</a><li>MIPS_F64
+: <a class="el" href="classH5_1_1PredType.html#s77">H5::PredType</a><li>MIPS_I16
+: <a class="el" href="classH5_1_1PredType.html#s65">H5::PredType</a><li>MIPS_I32
+: <a class="el" href="classH5_1_1PredType.html#s66">H5::PredType</a><li>MIPS_I64
+: <a class="el" href="classH5_1_1PredType.html#s67">H5::PredType</a><li>MIPS_I8
+: <a class="el" href="classH5_1_1PredType.html#s64">H5::PredType</a><li>MIPS_U16
+: <a class="el" href="classH5_1_1PredType.html#s69">H5::PredType</a><li>MIPS_U32
+: <a class="el" href="classH5_1_1PredType.html#s70">H5::PredType</a><li>MIPS_U64
+: <a class="el" href="classH5_1_1PredType.html#s71">H5::PredType</a><li>MIPS_U8
+: <a class="el" href="classH5_1_1PredType.html#s68">H5::PredType</a></ul>
+<h3><a class="anchor" name="index_n">- n -</a></h3><ul>
+<li>NATIVE_B16
+: <a class="el" href="classH5_1_1PredType.html#s93">H5::PredType</a><li>NATIVE_B32
+: <a class="el" href="classH5_1_1PredType.html#s94">H5::PredType</a><li>NATIVE_B64
+: <a class="el" href="classH5_1_1PredType.html#s95">H5::PredType</a><li>NATIVE_B8
+: <a class="el" href="classH5_1_1PredType.html#s92">H5::PredType</a><li>NATIVE_CHAR
+: <a class="el" href="classH5_1_1PredType.html#s78">H5::PredType</a><li>NATIVE_DOUBLE
+: <a class="el" href="classH5_1_1PredType.html#s90">H5::PredType</a><li>NATIVE_FLOAT
+: <a class="el" href="classH5_1_1PredType.html#s89">H5::PredType</a><li>NATIVE_HBOOL
+: <a class="el" href="classH5_1_1PredType.html#s100">H5::PredType</a><li>NATIVE_HERR
+: <a class="el" href="classH5_1_1PredType.html#s99">H5::PredType</a><li>NATIVE_HSIZE
+: <a class="el" href="classH5_1_1PredType.html#s97">H5::PredType</a><li>NATIVE_HSSIZE
+: <a class="el" href="classH5_1_1PredType.html#s98">H5::PredType</a><li>NATIVE_INT
+: <a class="el" href="classH5_1_1PredType.html#s83">H5::PredType</a><li>NATIVE_INT16
+: <a class="el" href="classH5_1_1PredType.html#s107">H5::PredType</a><li>NATIVE_INT32
+: <a class="el" href="classH5_1_1PredType.html#s113">H5::PredType</a><li>NATIVE_INT64
+: <a class="el" href="classH5_1_1PredType.html#s119">H5::PredType</a><li>NATIVE_INT8
+: <a class="el" href="classH5_1_1PredType.html#s101">H5::PredType</a><li>NATIVE_INT_FAST16
+: <a class="el" href="classH5_1_1PredType.html#s111">H5::PredType</a><li>NATIVE_INT_FAST32
+: <a class="el" href="classH5_1_1PredType.html#s117">H5::PredType</a><li>NATIVE_INT_FAST64
+: <a class="el" href="classH5_1_1PredType.html#s123">H5::PredType</a><li>NATIVE_INT_FAST8
+: <a class="el" href="classH5_1_1PredType.html#s105">H5::PredType</a><li>NATIVE_INT_LEAST16
+: <a class="el" href="classH5_1_1PredType.html#s109">H5::PredType</a><li>NATIVE_INT_LEAST32
+: <a class="el" href="classH5_1_1PredType.html#s115">H5::PredType</a><li>NATIVE_INT_LEAST64
+: <a class="el" href="classH5_1_1PredType.html#s121">H5::PredType</a><li>NATIVE_INT_LEAST8
+: <a class="el" href="classH5_1_1PredType.html#s103">H5::PredType</a><li>NATIVE_LDOUBLE
+: <a class="el" href="classH5_1_1PredType.html#s91">H5::PredType</a><li>NATIVE_LLONG
+: <a class="el" href="classH5_1_1PredType.html#s87">H5::PredType</a><li>NATIVE_LONG
+: <a class="el" href="classH5_1_1PredType.html#s85">H5::PredType</a><li>NATIVE_OPAQUE
+: <a class="el" href="classH5_1_1PredType.html#s96">H5::PredType</a><li>NATIVE_SCHAR
+: <a class="el" href="classH5_1_1PredType.html#s79">H5::PredType</a><li>NATIVE_SHORT
+: <a class="el" href="classH5_1_1PredType.html#s81">H5::PredType</a><li>NATIVE_UCHAR
+: <a class="el" href="classH5_1_1PredType.html#s80">H5::PredType</a><li>NATIVE_UINT
+: <a class="el" href="classH5_1_1PredType.html#s84">H5::PredType</a><li>NATIVE_UINT16
+: <a class="el" href="classH5_1_1PredType.html#s108">H5::PredType</a><li>NATIVE_UINT32
+: <a class="el" href="classH5_1_1PredType.html#s114">H5::PredType</a><li>NATIVE_UINT64
+: <a class="el" href="classH5_1_1PredType.html#s120">H5::PredType</a><li>NATIVE_UINT8
+: <a class="el" href="classH5_1_1PredType.html#s102">H5::PredType</a><li>NATIVE_UINT_FAST16
+: <a class="el" href="classH5_1_1PredType.html#s112">H5::PredType</a><li>NATIVE_UINT_FAST32
+: <a class="el" href="classH5_1_1PredType.html#s118">H5::PredType</a><li>NATIVE_UINT_FAST64
+: <a class="el" href="classH5_1_1PredType.html#s124">H5::PredType</a><li>NATIVE_UINT_FAST8
+: <a class="el" href="classH5_1_1PredType.html#s106">H5::PredType</a><li>NATIVE_UINT_LEAST16
+: <a class="el" href="classH5_1_1PredType.html#s110">H5::PredType</a><li>NATIVE_UINT_LEAST32
+: <a class="el" href="classH5_1_1PredType.html#s116">H5::PredType</a><li>NATIVE_UINT_LEAST64
+: <a class="el" href="classH5_1_1PredType.html#s122">H5::PredType</a><li>NATIVE_UINT_LEAST8
+: <a class="el" href="classH5_1_1PredType.html#s104">H5::PredType</a><li>NATIVE_ULLONG
+: <a class="el" href="classH5_1_1PredType.html#s88">H5::PredType</a><li>NATIVE_ULONG
+: <a class="el" href="classH5_1_1PredType.html#s86">H5::PredType</a><li>NATIVE_USHORT
+: <a class="el" href="classH5_1_1PredType.html#s82">H5::PredType</a></ul>
+<h3><a class="anchor" name="index_s">- s -</a></h3><ul>
+<li>STD_B16BE
+: <a class="el" href="classH5_1_1PredType.html#s18">H5::PredType</a><li>STD_B16LE
+: <a class="el" href="classH5_1_1PredType.html#s19">H5::PredType</a><li>STD_B32BE
+: <a class="el" href="classH5_1_1PredType.html#s20">H5::PredType</a><li>STD_B32LE
+: <a class="el" href="classH5_1_1PredType.html#s21">H5::PredType</a><li>STD_B64BE
+: <a class="el" href="classH5_1_1PredType.html#s22">H5::PredType</a><li>STD_B64LE
+: <a class="el" href="classH5_1_1PredType.html#s23">H5::PredType</a><li>STD_B8BE
+: <a class="el" href="classH5_1_1PredType.html#s16">H5::PredType</a><li>STD_B8LE
+: <a class="el" href="classH5_1_1PredType.html#s17">H5::PredType</a><li>STD_I16BE
+: <a class="el" href="classH5_1_1PredType.html#s2">H5::PredType</a><li>STD_I16LE
+: <a class="el" href="classH5_1_1PredType.html#s3">H5::PredType</a><li>STD_I32BE
+: <a class="el" href="classH5_1_1PredType.html#s4">H5::PredType</a><li>STD_I32LE
+: <a class="el" href="classH5_1_1PredType.html#s5">H5::PredType</a><li>STD_I64BE
+: <a class="el" href="classH5_1_1PredType.html#s6">H5::PredType</a><li>STD_I64LE
+: <a class="el" href="classH5_1_1PredType.html#s7">H5::PredType</a><li>STD_I8BE
+: <a class="el" href="classH5_1_1PredType.html#s0">H5::PredType</a><li>STD_I8LE
+: <a class="el" href="classH5_1_1PredType.html#s1">H5::PredType</a><li>STD_REF_DSETREG
+: <a class="el" href="classH5_1_1PredType.html#s25">H5::PredType</a><li>STD_REF_OBJ
+: <a class="el" href="classH5_1_1PredType.html#s24">H5::PredType</a><li>STD_U16BE
+: <a class="el" href="classH5_1_1PredType.html#s10">H5::PredType</a><li>STD_U16LE
+: <a class="el" href="classH5_1_1PredType.html#s11">H5::PredType</a><li>STD_U32BE
+: <a class="el" href="classH5_1_1PredType.html#s12">H5::PredType</a><li>STD_U32LE
+: <a class="el" href="classH5_1_1PredType.html#s13">H5::PredType</a><li>STD_U64BE
+: <a class="el" href="classH5_1_1PredType.html#s14">H5::PredType</a><li>STD_U64LE
+: <a class="el" href="classH5_1_1PredType.html#s15">H5::PredType</a><li>STD_U8BE
+: <a class="el" href="classH5_1_1PredType.html#s8">H5::PredType</a><li>STD_U8LE
+: <a class="el" href="classH5_1_1PredType.html#s9">H5::PredType</a></ul>
+<h3><a class="anchor" name="index_u">- u -</a></h3><ul>
+<li>UNIX_D32BE
+: <a class="el" href="classH5_1_1PredType.html#s32">H5::PredType</a><li>UNIX_D32LE
+: <a class="el" href="classH5_1_1PredType.html#s33">H5::PredType</a><li>UNIX_D64BE
+: <a class="el" href="classH5_1_1PredType.html#s34">H5::PredType</a><li>UNIX_D64LE
+: <a class="el" href="classH5_1_1PredType.html#s35">H5::PredType</a></ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/h5group_8cpp-example.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/h5group_8cpp-example.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/h5group_8cpp-example.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,553 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>h5group.cpp</h1><dl compact><dt><b></b></dt><dd>This example shows how to work with groups.</dd></dl>
+<div class="fragment"><pre class="fragment"><span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+<span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+<span class="comment"> * All rights reserved.                                                      *</span>
+<span class="comment"> *                                                                           *</span>
+<span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+<span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+<span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+<span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+<span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+<span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+<span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+<span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+<span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+
+<span class="comment">/*</span>
+<span class="comment"> * This example creates a group in the file and dataset in the group.</span>
+<span class="comment"> * Hard link to the group object is created and the dataset is accessed</span>
+<span class="comment"> * under different names.</span>
+<span class="comment"> * Iterator function is used to find the object names in the root group.</span>
+<span class="comment"> * Note that the C++ API iterator function is not completed yet, thus</span>
+<span class="comment"> * the C version is used in this example.</span>
+<span class="comment"> */</span>
+<span class="preprocessor">#include &lt;string&gt;</span>
+
+<span class="preprocessor">#ifdef OLD_HEADER_FILENAME</span>
+<span class="preprocessor"></span><span class="preprocessor">#include &lt;iostream.h&gt;</span>
+<span class="preprocessor">#else</span>
+<span class="preprocessor"></span><span class="preprocessor">#include &lt;iostream&gt;</span>
+<span class="preprocessor">#endif</span>
+<span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="H5Cpp_8h.html">H5Cpp.h</a>"</span>
+
+<span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+<span class="preprocessor"></span><span class="keyword">using</span> <span class="keyword">namespace </span>H5;
+<span class="preprocessor">#endif</span>
+<span class="preprocessor"></span>
+<span class="keyword">const</span> string    FILE_NAME( <span class="stringliteral">"Group.h5"</span> );
+<span class="keyword">const</span> <span class="keywordtype">int</span>       RANK = 2;
+
+<span class="comment">// Operator function</span>
+<span class="keyword">extern</span> <span class="stringliteral">"C"</span> herr_t file_info(hid_t loc_id, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">void</span> *opdata);
+
+<span class="keywordtype">int</span> main(<span class="keywordtype">void</span>)
+{
+
+    hsize_t  dims[2];
+    hsize_t  cdims[2];
+
+   <span class="comment">// Try block to detect exceptions raised by any of the calls inside it</span>
+   <span class="keywordflow">try</span>
+   {
+      <span class="comment">/*</span>
+<span class="comment">       * Turn off the auto-printing when failure occurs so that we can</span>
+<span class="comment">       * handle the errors appropriately</span>
+<span class="comment">       */</span>
+      <a name="a6"></a><a class="code" href="classH5_1_1Exception.html#e1">Exception::dontPrint</a>();
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create the named file, truncating the existing one if any,</span>
+<span class="comment">       * using default create and access property lists.</span>
+<span class="comment">       */</span>
+      H5File *file = <span class="keyword">new</span> H5File( FILE_NAME, H5F_ACC_TRUNC );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create a group in the file</span>
+<span class="comment">       */</span>
+      Group* group = <span class="keyword">new</span> Group( file-&gt;createGroup( <span class="stringliteral">"/Data"</span> ));
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create dataset "Compressed Data" in the group using absolute</span>
+<span class="comment">       * name. Dataset creation property list is modified to use</span>
+<span class="comment">       * GZIP compression with the compression effort set to 6.</span>
+<span class="comment">       * Note that compression can be used only when dataset is chunked.</span>
+<span class="comment">       */</span>
+      dims[0] = 1000;
+      dims[1] = 20;
+      cdims[0] = 20;
+      cdims[1] = 20;
+      DataSpace dataspace( RANK, dims ); <span class="comment">// create the new dataspace</span>
+                                         <span class="comment">// for the dataset</span>
+
+      DSetCreatPropList ds_creatplist;  <span class="comment">// create dataset creation prop list</span>
+      ds_creatplist.setChunk( 2, cdims );  <span class="comment">// then modify it for compression</span>
+      ds_creatplist.setDeflate( 6 );
+
+      DataSet* dataset = <span class="keyword">new</span> DataSet( file-&gt;createDataSet( <span class="stringliteral">"/Data/Compressed_Data"</span>, PredType::NATIVE_INT, dataspace, ds_creatplist ));
+
+      <span class="comment">/*</span>
+<span class="comment">       * Close the dataset and the file.</span>
+<span class="comment">       */</span>
+      <span class="keyword">delete</span> dataset;
+      <span class="keyword">delete</span> group;
+      <span class="keyword">delete</span> file;
+
+      <span class="comment">/*</span>
+<span class="comment">       * Now reopen the file and group in the file.</span>
+<span class="comment">       */</span>
+      file = <span class="keyword">new</span> H5File( FILE_NAME, H5F_ACC_RDWR );
+      group = <span class="keyword">new</span> Group( file-&gt;openGroup( <span class="stringliteral">"Data"</span> ));
+
+      <span class="comment">/*</span>
+<span class="comment">       * Access "Compressed_Data" dataset in the group.</span>
+<span class="comment">       */</span>
+      <span class="keywordflow">try</span> {  <span class="comment">// to determine if the dataset exists in the group</span>
+         dataset = <span class="keyword">new</span> DataSet( group-&gt;openDataSet( <span class="stringliteral">"Compressed_Data"</span> ));
+      }
+      <span class="keywordflow">catch</span>( GroupIException not_found_error )
+      {
+         cout &lt;&lt; <span class="stringliteral">" Dataset is not found."</span> &lt;&lt; endl;
+      }
+      cout &lt;&lt; <span class="stringliteral">"dataset \"/Data/Compressed_Data\" is open"</span> &lt;&lt; endl;
+
+      <span class="comment">/*</span>
+<span class="comment">       * Close the dataset.</span>
+<span class="comment">       */</span>
+      <span class="keyword">delete</span> dataset;
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create hard link to the Data group.</span>
+<span class="comment">       */</span>
+      file-&gt;link( H5G_LINK_HARD, <span class="stringliteral">"Data"</span>, <span class="stringliteral">"Data_new"</span> );
+
+      <span class="comment">/*</span>
+<span class="comment">       * We can access "Compressed_Data" dataset using created</span>
+<span class="comment">       * hard link "Data_new".</span>
+<span class="comment">       */</span>
+      <span class="keywordflow">try</span> {  <span class="comment">// to determine if the dataset exists in the file</span>
+         dataset = <span class="keyword">new</span> DataSet( file-&gt;openDataSet( <span class="stringliteral">"/Data_new/Compressed_Data"</span> ));
+      }
+      <span class="keywordflow">catch</span>( FileIException not_found_error )
+      {
+         cout &lt;&lt; <span class="stringliteral">" Dataset is not found."</span> &lt;&lt; endl;
+      }
+      cout &lt;&lt; <span class="stringliteral">"dataset \"/Data_new/Compressed_Data\" is open"</span> &lt;&lt; endl;
+
+      <span class="comment">/*</span>
+<span class="comment">       * Close the dataset.</span>
+<span class="comment">       */</span>
+      <span class="keyword">delete</span> dataset;
+
+      <span class="comment">/*</span>
+<span class="comment">       * Use iterator to see the names of the objects in the file</span>
+<span class="comment">       * root directory.</span>
+<span class="comment">       */</span>
+      cout &lt;&lt; endl &lt;&lt; <span class="stringliteral">"Iterating over elements in the file"</span> &lt;&lt; endl;
+      herr_t idx = H5Giterate(file-&gt;getId(), <span class="stringliteral">"/"</span>, NULL, file_info, NULL);
+      cout &lt;&lt; endl;
+
+      <span class="comment">/*</span>
+<span class="comment">       * Unlink  name "Data" and use iterator to see the names</span>
+<span class="comment">       * of the objects in the file root direvtory.</span>
+<span class="comment">       */</span>
+      cout &lt;&lt; <span class="stringliteral">"Unlinking..."</span> &lt;&lt; endl;
+      <span class="keywordflow">try</span> {  <span class="comment">// attempt to unlink the dataset</span>
+         file-&gt;unlink( <span class="stringliteral">"Data"</span> );
+      }
+      <span class="keywordflow">catch</span>( FileIException unlink_error )
+      {
+         cout &lt;&lt; <span class="stringliteral">" unlink failed."</span> &lt;&lt; endl;
+      }
+      cout &lt;&lt; <span class="stringliteral">"\"Data\" is unlinked"</span> &lt;&lt; endl;
+
+      cout &lt;&lt; endl &lt;&lt; <span class="stringliteral">"Iterating over elements in the file again"</span> &lt;&lt; endl;
+      idx = H5Giterate(file-&gt;getId(), <span class="stringliteral">"/"</span>, NULL, file_info, NULL);
+      cout &lt;&lt; endl;
+
+      <span class="comment">/*</span>
+<span class="comment">       * Close the file.</span>
+<span class="comment">       */</span>
+      <span class="keyword">delete</span> file;
+
+   }  <span class="comment">// end of try block</span>
+
+   <span class="comment">// catch failure caused by the H5File operations</span>
+   <span class="keywordflow">catch</span>( FileIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSet operations</span>
+   <span class="keywordflow">catch</span>( DataSetIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSpace operations</span>
+   <span class="keywordflow">catch</span>( DataSpaceIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the Attribute operations</span>
+   <span class="keywordflow">catch</span>( AttributeIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+   <span class="keywordflow">return</span> 0;
+}
+
+<span class="comment">/*</span>
+<span class="comment"> * Operator function.</span>
+<span class="comment"> */</span>
+herr_t
+file_info(hid_t loc_id, <span class="keyword">const</span> <span class="keywordtype">char</span> *name, <span class="keywordtype">void</span> *opdata)
+{
+    hid_t group;
+    <span class="comment">/*</span>
+<span class="comment">     * Open the group using its name.</span>
+<span class="comment">     */</span>
+    group = H5Gopen(loc_id, name);
+
+    <span class="comment">/*</span>
+<span class="comment">     * Display group name.</span>
+<span class="comment">     */</span>
+    cout &lt;&lt; <span class="stringliteral">"Name : "</span> &lt;&lt; name &lt;&lt; endl;
+
+    H5Gclose(group);
+    <span class="keywordflow">return</span> 0;
+ }
+
+</pre></div> <hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:46 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,316 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>3</o:Revision>
+  <o:TotalTime>9</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T05:51:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>30</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>34</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=doxygen.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="3074"/>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=0 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;mso-yfti-tbllook:480;
+ mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;padding:0in 5.4pt 0in 5.4pt;
+  height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b><o:p></o:p></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/Dependencies
===================================================================

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,23 @@
+# HDF5 Library Makefile(.in)
+#
+# Copyright (C) 2001 National Center for Supercomputing Applications.
+#                    All rights reserved.
+#
+# 
+top_srcdir=@top_srcdir@
+top_builddir=../../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+SUBDIRS=
+DOCDIR=$(docdir)/hdf5/cpplus_RM/header_files
+
+# Public doc files (to be installed)...
+PUB_DOCS=filelist.xml image001.jpg image002.jpg
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/filelist.xml
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/filelist.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/filelist.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,6 @@
+<xml xmlns:o="urn:schemas-microsoft-com:office:office">
+ <o:MainFile HRef="../header.html"/>
+ <o:File HRef="image001.jpg"/>
+ <o:File HRef="image002.jpg"/>
+ <o:File HRef="filelist.xml"/>
+</xml>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/image001.jpg
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/image001.jpg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/image002.jpg
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/header_files/image002.jpg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/hierarchy.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/hierarchy.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/hierarchy.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,385 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindexHL" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>Class Hierarchy</h1>This inheritance list is sorted roughly, but not completely, alphabetically:<ul>
+<li><a class="el" href="classH5_1_1CommonFG.html">H5::CommonFG</a>
+<ul>
+<li><a class="el" href="classH5_1_1Group.html">H5::Group</a>
+<li><a class="el" href="classH5_1_1H5File.html">H5::H5File</a>
+</ul>
+<li><a class="el" href="classH5_1_1Exception.html">H5::Exception</a>
+<ul>
+<li><a class="el" href="classH5_1_1AttributeIException.html">H5::AttributeIException</a>
+<li><a class="el" href="classH5_1_1DataSetIException.html">H5::DataSetIException</a>
+<li><a class="el" href="classH5_1_1DataSpaceIException.html">H5::DataSpaceIException</a>
+<li><a class="el" href="classH5_1_1DataTypeIException.html">H5::DataTypeIException</a>
+<li><a class="el" href="classH5_1_1FileIException.html">H5::FileIException</a>
+<li><a class="el" href="classH5_1_1GroupIException.html">H5::GroupIException</a>
+<li><a class="el" href="classH5_1_1IdComponentException.html">H5::IdComponentException</a>
+<li><a class="el" href="classH5_1_1LibraryIException.html">H5::LibraryIException</a>
+<li><a class="el" href="classH5_1_1PropListIException.html">H5::PropListIException</a>
+<li><a class="el" href="classH5_1_1ReferenceException.html">H5::ReferenceException</a>
+</ul>
+<li><a class="el" href="classH5_1_1H5Library.html">H5::H5Library</a>
+<li><a class="el" href="classH5_1_1IdComponent.html">H5::IdComponent</a>
+<ul>
+<li><a class="el" href="classH5_1_1DataSpace.html">H5::DataSpace</a>
+<li><a class="el" href="classH5_1_1H5File.html">H5::H5File</a>
+<li><a class="el" href="classH5_1_1H5Object.html">H5::H5Object</a>
+<ul>
+<li><a class="el" href="classH5_1_1AbstractDs.html">H5::AbstractDs</a>
+<ul>
+<li><a class="el" href="classH5_1_1Attribute.html">H5::Attribute</a>
+<li><a class="el" href="classH5_1_1DataSet.html">H5::DataSet</a>
+</ul>
+<li><a class="el" href="classH5_1_1DataType.html">H5::DataType</a>
+<ul>
+<li><a class="el" href="classH5_1_1ArrayType.html">H5::ArrayType</a>
+<li><a class="el" href="classH5_1_1AtomType.html">H5::AtomType</a>
+<ul>
+<li><a class="el" href="classH5_1_1FloatType.html">H5::FloatType</a>
+<li><a class="el" href="classH5_1_1IntType.html">H5::IntType</a>
+<li><a class="el" href="classH5_1_1PredType.html">H5::PredType</a>
+<li><a class="el" href="classH5_1_1StrType.html">H5::StrType</a>
+</ul>
+<li><a class="el" href="classH5_1_1CompType.html">H5::CompType</a>
+<li><a class="el" href="classH5_1_1EnumType.html">H5::EnumType</a>
+<li><a class="el" href="classH5_1_1VarLenType.html">H5::VarLenType</a>
+</ul>
+<li><a class="el" href="classH5_1_1Group.html">H5::Group</a>
+</ul>
+<li><a class="el" href="classH5_1_1PropList.html">H5::PropList</a>
+<ul>
+<li><a class="el" href="classH5_1_1DSetCreatPropList.html">H5::DSetCreatPropList</a>
+<li><a class="el" href="classH5_1_1DSetMemXferPropList.html">H5::DSetMemXferPropList</a>
+<li><a class="el" href="classH5_1_1FileAccPropList.html">H5::FileAccPropList</a>
+<li><a class="el" href="classH5_1_1FileCreatPropList.html">H5::FileCreatPropList</a>
+</ul>
+</ul>
+</ul>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/index.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/index.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/index.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,348 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindexHL" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1></h1>
+<p>
+<h2><a class="anchor" name="intro_sec">
+Introduction</a></h2>
+The C++ API provides C++ wrappers for the HDF5 C library. It is assumed that the user has knowledge of the HDF5 file format and its components. If you are not familiar with HDF5 file format, and would like to find out more, please refer to the HDF5 documentation at <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/H5.intro.html">http://hdf.ncsa.uiuc.edu/HDF5/doc/H5.intro.html</a><p>
+Because the HDF5 library maps very well to the object oriented design approach, classes in the C++ API can closely represent the interfaces of the HDF5 APIs, as followed:<p>
+<div class="fragment"><pre class="fragment"> 	HDF5 C APIs				C++ Classes
+ 	-----------				-----------
+ 	Attribute Interface (H5A)		Attribute
+ 	Datasets Interface (H5D)		DataSet
+ 	Error Interface (H5E)			Exception
+ 	File Interface (H5F)			H5File
+ 	Group Interface (H5G)			Group
+ 	Identifier Interface (H5I)		IdComponent
+ 	Property List Interface (H5P)		PropList and subclasses
+ 	Dataspace Interface (H5S)		DataSpace
+ 	Datatype Interface (H5T)		DataType and subclasses
+  </pre></div> <h2><a class="anchor" name="install_sec">
+Installation</a></h2>
+Please refer to the file release_docs/INSTALL_Windows_withcpp.txt under the top directory for information about installing, building, and testing the C++ API. <hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:46 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/namespaceH5.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/namespaceH5.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/namespaceH5.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,407 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>H5 Namespace Reference</h1>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+<tr><td colspan="2"><br><h2>Classes</h2></td></tr>
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AbstractDs.html">AbstractDs</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1ArrayType.html">ArrayType</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AtomType.html">AtomType</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Attribute.html">Attribute</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CommonFG.html">CommonFG</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1CompType.html">CompType</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSet.html">DataSet</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpace.html">DataSpace</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataType.html">DataType</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetCreatPropList.html">DSetCreatPropList</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DSetMemXferPropList.html">DSetMemXferPropList</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1EnumType.html">EnumType</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Exception.html">Exception</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileIException.html">FileIException</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1GroupIException.html">GroupIException</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSpaceIException.html">DataSpaceIException</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataTypeIException.html">DataTypeIException</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropListIException.html">PropListIException</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1DataSetIException.html">DataSetIException</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1AttributeIException.html">AttributeIException</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1ReferenceException.html">ReferenceException</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1LibraryIException.html">LibraryIException</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponentException.html">IdComponentException</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileAccPropList.html">FileAccPropList</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FileCreatPropList.html">FileCreatPropList</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5File.html">H5File</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1FloatType.html">FloatType</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1Group.html">Group</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IdComponent.html">IdComponent</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1IntType.html">IntType</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Library.html">H5Library</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1H5Object.html">H5Object</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PredType.html">PredType</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1PropList.html">PropList</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1StrType.html">StrType</a></td></tr>
+
+<tr><td class="memItemLeft" nowrap align="right" valign="top">class &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classH5_1_1VarLenType.html">VarLenType</a></td></tr>
+
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/namespaces.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/namespaces.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/namespaces.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,333 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindexHL" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>Namespace List</h1>Here is a list of all namespaces with brief descriptions:<table>
+  <tr><td class="indexkey"><a class="el" href="namespaceH5.html">H5</a></td><td class="indexvalue"></td></tr>
+  <tr><td class="indexkey"><a class="el" href="namespacestd.html">std</a></td><td class="indexvalue"></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:48 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/namespacestd.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/namespacestd.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/namespacestd.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,334 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>std Namespace Reference</h1>
+<p>
+<table border="0" cellpadding="0" cellspacing="0">
+<tr><td></td></tr>
+</table>
+<hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:51 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/readdata_8cpp-example.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/readdata_8cpp-example.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/readdata_8cpp-example.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,544 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>readdata.cpp</h1><dl compact><dt><b></b></dt><dd>This example shows how to read datasets.</dd></dl>
+<div class="fragment"><pre class="fragment"><span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+<span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+<span class="comment"> * All rights reserved.                                                      *</span>
+<span class="comment"> *                                                                           *</span>
+<span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+<span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+<span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+<span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+<span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+<span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+<span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+<span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+<span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+
+<span class="comment">//</span>
+<span class="comment">//      This example reads hyperslab from the SDS.h5 file into</span>
+<span class="comment">//      two-dimensional plane of a three-dimensional array.  Various</span>
+<span class="comment">//      information about the dataset in the SDS.h5 file is obtained.</span>
+<span class="comment">//</span>
+
+<span class="preprocessor">#include &lt;string&gt;</span>
+
+<span class="preprocessor">#ifdef OLD_HEADER_FILENAME</span>
+<span class="preprocessor"></span><span class="preprocessor">#include &lt;iostream.h&gt;</span>
+<span class="preprocessor">#else</span>
+<span class="preprocessor"></span><span class="preprocessor">#include &lt;iostream&gt;</span>
+<span class="preprocessor">#endif</span>
+<span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="H5Cpp_8h.html">H5Cpp.h</a>"</span>
+
+<span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+<span class="preprocessor"></span><span class="keyword">using</span> <span class="keyword">namespace </span>H5;
+<span class="preprocessor">#endif</span>
+<span class="preprocessor"></span>
+<span class="keyword">const</span> string FILE_NAME( <span class="stringliteral">"SDS.h5"</span> );
+<span class="keyword">const</span> string DATASET_NAME( <span class="stringliteral">"IntArray"</span> );
+<span class="keyword">const</span> <span class="keywordtype">int</span>    NX_SUB = 3;        <span class="comment">// hyperslab dimensions</span>
+<span class="keyword">const</span> <span class="keywordtype">int</span>    NY_SUB = 4;
+<span class="keyword">const</span> <span class="keywordtype">int</span>    NX = 7;            <span class="comment">// output buffer dimensions</span>
+<span class="keyword">const</span> <span class="keywordtype">int</span>    NY = 7;
+<span class="keyword">const</span> <span class="keywordtype">int</span>    NZ = 3;
+<span class="keyword">const</span> <span class="keywordtype">int</span>    RANK_OUT = 3;
+
+<span class="keywordtype">int</span> main (<span class="keywordtype">void</span>)
+{
+   <span class="comment">/*</span>
+<span class="comment">    * Output buffer initialization.</span>
+<span class="comment">    */</span>
+   <span class="keywordtype">int</span> i, j, k;
+   <span class="keywordtype">int</span>         data_out[NX][NY][NZ ]; <span class="comment">/* output buffer */</span>
+   <span class="keywordflow">for</span> (j = 0; j &lt; NX; j++)
+   {
+      <span class="keywordflow">for</span> (i = 0; i &lt; NY; i++)
+      {
+         <span class="keywordflow">for</span> (k = 0; k &lt; NZ ; k++)
+            data_out[j][i][k] = 0;
+      }
+   }
+
+   <span class="comment">/*</span>
+<span class="comment">    * Try block to detect exceptions raised by any of the calls inside it</span>
+<span class="comment">    */</span>
+   <span class="keywordflow">try</span>
+   {
+      <span class="comment">/*</span>
+<span class="comment">       * Turn off the auto-printing when failure occurs so that we can</span>
+<span class="comment">       * handle the errors appropriately</span>
+<span class="comment">       */</span>
+      <a name="a7"></a><a class="code" href="classH5_1_1Exception.html#e1">Exception::dontPrint</a>();
+
+      <span class="comment">/*</span>
+<span class="comment">       * Open the specified file and the specified dataset in the file.</span>
+<span class="comment">       */</span>
+      H5File file( FILE_NAME, H5F_ACC_RDONLY );
+      DataSet dataset = file.openDataSet( DATASET_NAME );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Get the class of the datatype that is used by the dataset.</span>
+<span class="comment">       */</span>
+      H5T_class_t type_class = dataset.getTypeClass();
+
+      <span class="comment">/*</span>
+<span class="comment">       * Get class of datatype and print message if it's an integer.</span>
+<span class="comment">       */</span>
+      <span class="keywordflow">if</span>( type_class == H5T_INTEGER )
+      {
+         cout &lt;&lt; <span class="stringliteral">"Data set has INTEGER type"</span> &lt;&lt; endl;
+
+         <span class="comment">/*</span>
+<span class="comment">          * Get the integer datatype</span>
+<span class="comment">          */</span>
+         IntType intype = dataset.getIntType();
+
+         <span class="comment">/*</span>
+<span class="comment">          * Get order of datatype and print message if it's a little endian.</span>
+<span class="comment">          */</span>
+         string order_string;
+         H5T_order_t order = intype.getOrder( order_string );
+         cout &lt;&lt; order_string &lt;&lt; endl;
+
+         <span class="comment">/*</span>
+<span class="comment">          * Get size of the data element stored in file and print it.</span>
+<span class="comment">          */</span>
+         size_t size = intype.getSize();
+         cout &lt;&lt; <span class="stringliteral">"Data size is "</span> &lt;&lt; size &lt;&lt; endl;
+      }
+
+      <span class="comment">/*</span>
+<span class="comment">       * Get dataspace of the dataset.</span>
+<span class="comment">       */</span>
+      DataSpace dataspace = dataset.getSpace();
+
+      <span class="comment">/*</span>
+<span class="comment">       * Get the number of dimensions in the dataspace.</span>
+<span class="comment">       */</span>
+      <span class="keywordtype">int</span> rank = dataspace.getSimpleExtentNdims();
+
+      <span class="comment">/*</span>
+<span class="comment">       * Get the dimension size of each dimension in the dataspace and</span>
+<span class="comment">       * display them.</span>
+<span class="comment">       */</span>
+      hsize_t dims_out[2];
+      <span class="keywordtype">int</span> ndims = dataspace.getSimpleExtentDims( dims_out, NULL);
+      cout &lt;&lt; <span class="stringliteral">"rank "</span> &lt;&lt; rank &lt;&lt; <span class="stringliteral">", dimensions "</span> &lt;&lt;
+              (<span class="keywordtype">unsigned</span> long)(dims_out[0]) &lt;&lt; <span class="stringliteral">" x "</span> &lt;&lt;
+              (<span class="keywordtype">unsigned</span> long)(dims_out[1]) &lt;&lt; endl;
+
+      <span class="comment">/*</span>
+<span class="comment">       * Define hyperslab in the dataset; implicitly giving strike and</span>
+<span class="comment">       * block NULL.</span>
+<span class="comment">       */</span>
+      hsize_t      offset[2];   <span class="comment">// hyperslab offset in the file</span>
+      hsize_t      count[2];    <span class="comment">// size of the hyperslab in the file</span>
+      offset[0] = 1;
+      offset[1] = 2;
+      count[0]  = NX_SUB;
+      count[1]  = NY_SUB;
+      dataspace.selectHyperslab( H5S_SELECT_SET, count, offset );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Define the memory dataspace.</span>
+<span class="comment">       */</span>
+      hsize_t     dimsm[3];              <span class="comment">/* memory space dimensions */</span>
+      dimsm[0] = NX;
+      dimsm[1] = NY;
+      dimsm[2] = NZ ;
+      DataSpace memspace( RANK_OUT, dimsm );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Define memory hyperslab.</span>
+<span class="comment">       */</span>
+      hsize_t      offset_out[3];       <span class="comment">// hyperslab offset in memory</span>
+      hsize_t      count_out[3];        <span class="comment">// size of the hyperslab in memory</span>
+      offset_out[0] = 3;
+      offset_out[1] = 0;
+      offset_out[2] = 0;
+      count_out[0]  = NX_SUB;
+      count_out[1]  = NY_SUB;
+      count_out[2]  = 1;
+      memspace.selectHyperslab( H5S_SELECT_SET, count_out, offset_out );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Read data from hyperslab in the file into the hyperslab in</span>
+<span class="comment">       * memory and display the data.</span>
+<span class="comment">       */</span>
+      dataset.read( data_out, PredType::NATIVE_INT, memspace, dataspace );
+
+      <span class="keywordflow">for</span> (j = 0; j &lt; NX; j++)
+      {
+        <span class="keywordflow">for</span> (i = 0; i &lt; NY; i++)
+           cout &lt;&lt; data_out[j][i][0] &lt;&lt; <span class="stringliteral">" "</span>;
+        cout &lt;&lt; endl;
+      }
+      <span class="comment">/*</span>
+<span class="comment">       * 0 0 0 0 0 0 0</span>
+<span class="comment">       * 0 0 0 0 0 0 0</span>
+<span class="comment">       * 0 0 0 0 0 0 0</span>
+<span class="comment">       * 3 4 5 6 0 0 0</span>
+<span class="comment">       * 4 5 6 7 0 0 0</span>
+<span class="comment">       * 5 6 7 8 0 0 0</span>
+<span class="comment">       * 0 0 0 0 0 0 0</span>
+<span class="comment">       */</span>
+   }  <span class="comment">// end of try block</span>
+
+   <span class="comment">// catch failure caused by the H5File operations</span>
+   <span class="keywordflow">catch</span>( FileIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSet operations</span>
+   <span class="keywordflow">catch</span>( DataSetIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSpace operations</span>
+   <span class="keywordflow">catch</span>( DataSpaceIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSpace operations</span>
+   <span class="keywordflow">catch</span>( DataTypeIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="keywordflow">return</span> 0;  <span class="comment">// successfully terminated</span>
+}
+
+</pre></div> <hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:46 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/writedata_8cpp-example.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/writedata_8cpp-example.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/cpplus_RM/writedata_8cpp-example.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,578 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html xmlns:v="urn:schemas-microsoft-com:vml"
+xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 10">
+<meta name=Originator content="Microsoft Word 10">
+<link rel=File-List href="header_files/filelist.xml">
+<link rel=Edit-Time-Data href="header_files/editdata.mso">
+<!--[if !mso]>
+<style>
+v\:* {behavior:url(#default#VML);}
+o\:* {behavior:url(#default#VML);}
+w\:* {behavior:url(#default#VML);}
+.shape {behavior:url(#default#VML);}
+</style>
+<![endif]-->
+<title>Main Page</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+  <o:Author>Randy Ribler</o:Author>
+  <o:Template>Normal</o:Template>
+  <o:LastAuthor>Randy Ribler</o:LastAuthor>
+  <o:Revision>6</o:Revision>
+  <o:TotalTime>16</o:TotalTime>
+  <o:Created>2004-07-23T05:34:00Z</o:Created>
+  <o:LastSaved>2004-07-23T06:03:00Z</o:LastSaved>
+  <o:Pages>1</o:Pages>
+  <o:Words>5</o:Words>
+  <o:Characters>32</o:Characters>
+  <o:Company>LC</o:Company>
+  <o:Lines>1</o:Lines>
+  <o:Paragraphs>1</o:Paragraphs>
+  <o:CharactersWithSpaces>36</o:CharactersWithSpaces>
+  <o:Version>10.2625</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+  <w:SpellingState>Clean</w:SpellingState>
+  <w:GrammarState>Clean</w:GrammarState>
+  <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
+ </w:WordDocument>
+</xml><![endif]-->
+<link rel=Stylesheet type="text/css" media=all href=RM_stylesheet.css>
+<style>
+<!--
+ /* Style Definitions */
+ p.MsoNormal, li.MsoNormal, div.MsoNormal
+	{mso-style-parent:"";
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	mso-believe-normal-left:yes;}
+h1
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	mso-outline-level:1;
+	font-size:24.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+h2
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	mso-outline-level:2;
+	font-size:18.0pt;
+	font-family:"Times New Roman";
+	font-weight:bold;}
+a:link, span.MsoHyperlink
+	{color:#252E78;
+	text-decoration:underline;
+	text-underline:single;}
+a:visited, span.MsoHyperlinkFollowed
+	{color:#3D2185;
+	text-decoration:underline;
+	text-underline:single;}
+p
+	{mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+address
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	font-style:italic;}
+pre
+	{margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	tab-stops:45.8pt 91.6pt 137.4pt 183.2pt 229.0pt 274.8pt 320.6pt 366.4pt 412.2pt 458.0pt 503.8pt 549.6pt 595.4pt 641.2pt 687.0pt 732.8pt;
+	font-size:10.0pt;
+	font-family:"Courier New";
+	mso-fareast-font-family:"Times New Roman";}
+p.formuladsp, li.formuladsp, div.formuladsp
+	{mso-style-name:formuladsp;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	text-align:center;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdtable, li.mdtable, div.mdtable
+	{mso-style-name:mdtable;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	background:#F4F4FB;
+	border:none;
+	mso-border-alt:solid #868686 .75pt;
+	padding:0in;
+	mso-padding-alt:0in 0in 0in 0in;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdrow, li.mdrow, div.mdrow
+	{mso-style-name:mdrow;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.mdescleft, li.mdescleft, div.mdescleft
+	{mso-style-name:mdescleft;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.mdescright, li.mdescright, div.mdescright
+	{mso-style-name:mdescright;
+	margin:0in;
+	margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-style:italic;}
+p.memitemleft, li.memitemleft, div.memitemleft
+	{mso-style-name:memitemleft;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:9.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.memitemright, li.memitemright, div.memitemright
+	{mso-style-name:memitemright;
+	margin:3.0pt;
+	mso-pagination:widow-orphan;
+	background:#FAFAFA;
+	border:none;
+	mso-border-top-alt:solid #E0E0E0 .75pt;
+	padding:0in;
+	mso-padding-alt:1.0pt 0in 0in 0in;
+	font-size:10.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";}
+p.search, li.search, div.search
+	{mso-style-name:search;
+	mso-margin-top-alt:auto;
+	margin-right:0in;
+	mso-margin-bottom-alt:auto;
+	margin-left:0in;
+	mso-pagination:widow-orphan;
+	font-size:12.0pt;
+	font-family:"Times New Roman";
+	mso-fareast-font-family:"Times New Roman";
+	font-weight:bold;}
+ at page Section1
+	{size:8.5in 11.0in;
+	margin:1.0in 1.25in 1.0in 1.25in;
+	mso-header-margin:.5in;
+	mso-footer-margin:.5in;
+	mso-paper-source:0;}
+div.Section1
+	{page:Section1;}
+-->
+</style>
+<!--[if gte mso 10]>
+<style>
+ /* Style Definitions */
+ table.MsoNormalTable
+	{mso-style-name:"Table Normal";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	mso-style-noshow:yes;
+	mso-style-parent:"";
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+table.MsoTableGrid
+	{mso-style-name:"Table Grid";
+	mso-tstyle-rowband-size:0;
+	mso-tstyle-colband-size:0;
+	border:solid windowtext 1.0pt;
+	mso-border-alt:solid windowtext .5pt;
+	mso-padding-alt:0in 5.4pt 0in 5.4pt;
+	mso-border-insideh:.5pt solid windowtext;
+	mso-border-insidev:.5pt solid windowtext;
+	mso-para-margin:0in;
+	mso-para-margin-bottom:.0001pt;
+	mso-pagination:widow-orphan;
+	font-size:10.0pt;
+	font-family:"Times New Roman";}
+</style>
+<![endif]--><![if mso 9]>
+<style>
+p.MsoNormal
+	{margin-left:15.0pt;}
+</style>
+<![endif]><!--[if gte mso 9]><xml>
+ <o:shapedefaults v:ext="edit" spidmax="4098">
+  <o:colormru v:ext="edit" colors="#060"/>
+  <o:colormenu v:ext="edit" strokecolor="#060"/>
+ </o:shapedefaults></xml><![endif]--><!--[if gte mso 9]><xml>
+ <o:shapelayout v:ext="edit">
+  <o:idmap v:ext="edit" data="1"/>
+ </o:shapelayout></xml><![endif]-->
+</head>
+
+<body bgcolor=white lang=EN-US link="#252E78" vlink="#3D2185" style='tab-interval:
+.5in;margin-left:15.0pt;margin-right:15.0pt'>
+
+<div class=Section1>
+
+<p class=MsoNormal style='margin-top:0in;margin-right:15.0pt;margin-bottom:
+0in;margin-left:15.0pt;margin-bottom:.0001pt'><!--[if gte vml 1]><v:shapetype
+ id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t"
+ path="m at 4@5l at 4@11 at 9@11 at 9@5xe" filled="f" stroked="f">
+ <v:stroke joinstyle="miter"/>
+ <v:formulas>
+  <v:f eqn="if lineDrawn pixelLineWidth 0"/>
+  <v:f eqn="sum @0 1 0"/>
+  <v:f eqn="sum 0 0 @1"/>
+  <v:f eqn="prod @2 1 2"/>
+  <v:f eqn="prod @3 21600 pixelWidth"/>
+  <v:f eqn="prod @3 21600 pixelHeight"/>
+  <v:f eqn="sum @0 0 1"/>
+  <v:f eqn="prod @6 1 2"/>
+  <v:f eqn="prod @7 21600 pixelWidth"/>
+  <v:f eqn="sum @8 21600 0"/>
+  <v:f eqn="prod @7 21600 pixelHeight"/>
+  <v:f eqn="sum @10 21600 0"/>
+ </v:formulas>
+ <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
+ <o:lock v:ext="edit" aspectratio="t"/>
+</v:shapetype><v:shape id="_x0000_s1026" type="#_x0000_t75" style='position:absolute;
+ left:0;text-align:left;margin-left:30pt;margin-top:9pt;width:72.75pt;height:57.75pt;
+ z-index:1'>
+ <v:imagedata src="header_files/image001.jpg" o:title="NCSAlogo"/>
+</v:shape><![endif]--><![if !vml]><span style='mso-ignore:vglayout;position:
+absolute;z-index:1;left:0px;margin-left:40px;margin-top:12px;width:97px;
+height:77px'><img width=97 height=77 src="header_files/image002.jpg" v:shapes="_x0000_s1026"></span><![endif]><span
+style='mso-spacerun:yes'> </span><b style='mso-bidi-font-weight:normal'><span
+style='font-size:22.0pt'><o:p></o:p></span></b></p>
+
+<div align=center>
+
+<table class=MsoTableGrid border=1 cellspacing=0 cellpadding=0
+ style='margin-left:103.45pt;border-collapse:collapse;border:none;mso-border-bottom-alt:
+ solid #006600 2.25pt;mso-yfti-tbllook:480;mso-padding-alt:0in 5.4pt 0in 5.4pt'>
+ <tr style='mso-yfti-irow:0;mso-yfti-lastrow:yes;height:29.25pt'>
+  <td width=443 valign=top style='width:332.6pt;border:none;border-bottom:solid #006600 2.25pt;
+  padding:0in 5.4pt 0in 5.4pt;height:29.25pt'>
+  <p class=MsoNormal><b style='mso-bidi-font-weight:normal'><span
+  style='font-size:22.0pt'>HDF5 C++ API Reference Manual</span></b></p>
+  </td>
+ </tr>
+</table>
+
+</div>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+<p class=MsoNormal><o:p>&nbsp;</o:p></p>
+
+</div>
+
+</body>
+
+</html>
+<!-- Generated by Doxygen 1.4.2 -->
+<div class="qindex"><a class="qindex" href="index.html">Main&nbsp;Page</a> | <a class="qindex" href="namespaces.html">Namespace List</a> | <a class="qindex" href="hierarchy.html">Class&nbsp;Hierarchy</a> | <a class="qindex" href="annotated.html">Class&nbsp;List</a> | <a class="qindex" href="files.html">File&nbsp;List</a> | <a class="qindex" href="functions.html">Class&nbsp;Members</a> | <a class="qindex" href="examples.html">Examples</a></div>
+<h1>writedata.cpp</h1><dl compact><dt><b></b></dt><dd>This example shows how to write datasets.</dd></dl>
+<div class="fragment"><pre class="fragment"><span class="comment">/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *</span>
+<span class="comment"> * Copyright by the Board of Trustees of the University of Illinois.         *</span>
+<span class="comment"> * All rights reserved.                                                      *</span>
+<span class="comment"> *                                                                           *</span>
+<span class="comment"> * This file is part of HDF5.  The full HDF5 copyright notice, including     *</span>
+<span class="comment"> * terms governing use, modification, and redistribution, is contained in    *</span>
+<span class="comment"> * the files COPYING and Copyright.html.  COPYING can be found at the root   *</span>
+<span class="comment"> * of the source code distribution tree; Copyright.html can be found at the  *</span>
+<span class="comment"> * root level of an installed copy of the electronic HDF5 document set and   *</span>
+<span class="comment"> * is linked from the top-level documents page.  It can also be found at     *</span>
+<span class="comment"> * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *</span>
+<span class="comment"> * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *</span>
+<span class="comment"> * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */</span>
+
+<span class="comment">/*</span>
+<span class="comment"> *  This program shows how the select_hyperslab and select_elements</span>
+<span class="comment"> *  functions are used to write selected data from memory to the file.</span>
+<span class="comment"> *  Program takes 48 elements from the linear buffer and writes them into</span>
+<span class="comment"> *  the matrix using 3x2 blocks, (4,3) stride and (2,4) count.</span>
+<span class="comment"> *  Then four elements  of the matrix are overwritten with the new values and</span>
+<span class="comment"> *  file is closed. Program reopens the file and reads and displays the result.</span>
+<span class="comment"> */</span>
+
+<span class="preprocessor">#include &lt;string&gt;</span>
+
+<span class="preprocessor">#ifdef OLD_HEADER_FILENAME</span>
+<span class="preprocessor"></span><span class="preprocessor">#include &lt;iostream.h&gt;</span>
+<span class="preprocessor">#else</span>
+<span class="preprocessor"></span><span class="preprocessor">#include &lt;iostream&gt;</span>
+<span class="preprocessor">#endif</span>
+<span class="preprocessor"></span><span class="preprocessor">#include "<a class="code" href="H5Cpp_8h.html">H5Cpp.h</a>"</span>
+
+<span class="preprocessor">#ifndef H5_NO_NAMESPACE</span>
+<span class="preprocessor"></span><span class="keyword">using</span> <span class="keyword">namespace </span>H5;
+<span class="preprocessor">#endif</span>
+<span class="preprocessor"></span>
+<span class="keyword">const</span> string FILE_NAME( <span class="stringliteral">"Select.h5"</span> );
+<span class="keyword">const</span> string DATASET_NAME( <span class="stringliteral">"Matrix in file"</span> );
+<span class="keyword">const</span> <span class="keywordtype">int</span>   MSPACE1_RANK = 1;   <span class="comment">// Rank of the first dataset in memory</span>
+<span class="keyword">const</span> <span class="keywordtype">int</span>   MSPACE1_DIM = 50;   <span class="comment">// Dataset size in memory</span>
+<span class="keyword">const</span> <span class="keywordtype">int</span>   MSPACE2_RANK = 1;   <span class="comment">// Rank of the second dataset in memory</span>
+<span class="keyword">const</span> <span class="keywordtype">int</span>   MSPACE2_DIM = 4;    <span class="comment">// Dataset size in memory</span>
+<span class="keyword">const</span> <span class="keywordtype">int</span>   FSPACE_RANK = 2;    <span class="comment">// Dataset rank as it is stored in the file</span>
+<span class="keyword">const</span> <span class="keywordtype">int</span>   FSPACE_DIM1 = 8;    <span class="comment">// Dimension sizes of the dataset as it is...</span>
+<span class="keyword">const</span> <span class="keywordtype">int</span>   FSPACE_DIM2 = 12;   <span class="comment">// ...stored in the file</span>
+<span class="keyword">const</span> <span class="keywordtype">int</span>   MSPACE_DIM1 = 8;    <span class="comment">// We will read dataset back from the file...</span>
+<span class="keyword">const</span> <span class="keywordtype">int</span>   MSPACE_DIM2 = 12;   <span class="comment">// ...to the dataset in memory with these ...</span>
+                                <span class="comment">// ...dataspace parameters</span>
+<span class="keyword">const</span> <span class="keywordtype">int</span>   NPOINTS = 4;        <span class="comment">// Number of points that will be selected...</span>
+                                <span class="comment">//    ...and overwritten</span>
+
+<span class="keywordtype">int</span> main (<span class="keywordtype">void</span>)
+{
+   <span class="comment">/*</span>
+<span class="comment">   * Buffers' initialization.</span>
+<span class="comment">   */</span>
+   <span class="keywordtype">int</span>   i,j;
+   <span class="keywordtype">int</span>    vector[MSPACE1_DIM];
+   vector[0] = vector[MSPACE1_DIM - 1] = -1;
+   <span class="keywordflow">for</span> (i = 1; i &lt; MSPACE1_DIM - 1; i++)
+      vector[i] = i;
+
+   <span class="keywordtype">int</span>    matrix[MSPACE_DIM1][MSPACE_DIM2];
+   <span class="keywordflow">for</span> (i = 0; i &lt; MSPACE_DIM1; i++)
+   {
+      <span class="keywordflow">for</span> (j = 0; j &lt; MSPACE_DIM2; j++)
+         matrix[i][j] = 0;
+   }
+
+   <span class="comment">// Try block to detect exceptions raised by any of the calls inside it</span>
+   <span class="keywordflow">try</span>
+   {
+      <span class="comment">/*</span>
+<span class="comment">       * Turn off the auto-printing when failure occurs so that we can</span>
+<span class="comment">       * handle the errors appropriately</span>
+<span class="comment">       */</span>
+      <a name="a8"></a><a class="code" href="classH5_1_1Exception.html#e1">Exception::dontPrint</a>();
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create a file.</span>
+<span class="comment">       */</span>
+      H5File* file = <span class="keyword">new</span> H5File( FILE_NAME, H5F_ACC_TRUNC );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create dataspace for the dataset in the file.</span>
+<span class="comment">       */</span>
+      hsize_t fdim[] = {FSPACE_DIM1, FSPACE_DIM2}; <span class="comment">// dim sizes of ds (on disk)</span>
+      DataSpace fspace( FSPACE_RANK, fdim );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create dataset and write it into the file.</span>
+<span class="comment">       */</span>
+      DataSet* dataset = <span class="keyword">new</span> DataSet(
+            file-&gt;createDataSet( DATASET_NAME, PredType::NATIVE_INT, fspace ));
+      dataset-&gt;write( matrix, PredType::NATIVE_INT );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Select hyperslab for the dataset in the file, using 3x2 blocks,</span>
+<span class="comment">       * (4,3) stride and (2,4) count starting at the position (0,1).</span>
+<span class="comment">       */</span>
+      hsize_t start[2]; <span class="comment">// Start of hyperslab</span>
+      hsize_t stride[2]; <span class="comment">// Stride of hyperslab</span>
+      hsize_t count[2];  <span class="comment">// Block count</span>
+      hsize_t block[2];  <span class="comment">// Block sizes</span>
+      start[0]  = 0; start[1]  = 1;
+      stride[0] = 4; stride[1] = 3;
+      count[0]  = 2; count[1]  = 4;
+      block[0]  = 3; block[1]  = 2;
+      fspace.selectHyperslab( H5S_SELECT_SET, count, start, stride, block);
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create dataspace for the first dataset.</span>
+<span class="comment">       */</span>
+      hsize_t dim1[] = {MSPACE1_DIM};  <span class="comment">/* Dimension size of the first dataset</span>
+<span class="comment">                                         (in memory) */</span>
+      DataSpace mspace1( MSPACE1_RANK, dim1 );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Select hyperslab.</span>
+<span class="comment">       * We will use 48 elements of the vector buffer starting at the</span>
+<span class="comment">       * second element.  Selected elements are 1 2 3 . . . 48</span>
+<span class="comment">       */</span>
+      start[0]  = 1;
+      stride[0] = 1;
+      count[0]  = 48;
+      block[0]  = 1;
+      mspace1.selectHyperslab( H5S_SELECT_SET, count, start, stride, block);
+
+      <span class="comment">/*</span>
+<span class="comment">       * Write selection from the vector buffer to the dataset in the file.</span>
+<span class="comment">       *</span>
+<span class="comment">       * File dataset should look like this:</span>
+<span class="comment">       *                    0  1  2  0  3  4  0  5  6  0  7  8</span>
+<span class="comment">       *                    0  9 10  0 11 12  0 13 14  0 15 16</span>
+<span class="comment">       *                    0 17 18  0 19 20  0 21 22  0 23 24</span>
+<span class="comment">       *                    0  0  0  0  0  0  0  0  0  0  0  0</span>
+<span class="comment">       *                    0 25 26  0 27 28  0 29 30  0 31 32</span>
+<span class="comment">       *                    0 33 34  0 35 36  0 37 38  0 39 40</span>
+<span class="comment">       *                    0 41 42  0 43 44  0 45 46  0 47 48</span>
+<span class="comment">       *                    0  0  0  0  0  0  0  0  0  0  0  0</span>
+<span class="comment">       */</span>
+       dataset-&gt;write( vector, PredType::NATIVE_INT, mspace1, fspace );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Reset the selection for the file dataspace fid.</span>
+<span class="comment">       */</span>
+      fspace.selectNone();
+
+      <span class="comment">/*</span>
+<span class="comment">       * Create dataspace for the second dataset.</span>
+<span class="comment">       */</span>
+      hsize_t dim2[] = {MSPACE2_DIM};  <span class="comment">/* Dimension size of the second dataset</span>
+<span class="comment">                                         (in memory */</span>
+      DataSpace mspace2( MSPACE2_RANK, dim2 );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Select sequence of NPOINTS points in the file dataspace.</span>
+<span class="comment">       */</span>
+      hsize_t coord[NPOINTS][FSPACE_RANK]; <span class="comment">/* Array to store selected points</span>
+<span class="comment">                                              from the file dataspace */</span>
+      coord[0][0] = 0; coord[0][1] = 0;
+      coord[1][0] = 3; coord[1][1] = 3;
+      coord[2][0] = 3; coord[2][1] = 5;
+      coord[3][0] = 5; coord[3][1] = 6;
+
+      fspace.selectElements( H5S_SELECT_SET, NPOINTS, (<span class="keyword">const</span> hsize_t **)coord);
+
+      <span class="comment">/*</span>
+<span class="comment">       * Write new selection of points to the dataset.</span>
+<span class="comment">       */</span>
+      <span class="keywordtype">int</span>    values[] = {53, 59, 61, 67};  <span class="comment">/* New values to be written */</span>
+      dataset-&gt;write( values, PredType::NATIVE_INT, mspace2, fspace );
+
+      <span class="comment">/*</span>
+<span class="comment">       * File dataset should look like this:</span>
+<span class="comment">       *                   53  1  2  0  3  4  0  5  6  0  7  8</span>
+<span class="comment">       *                    0  9 10  0 11 12  0 13 14  0 15 16</span>
+<span class="comment">       *                    0 17 18  0 19 20  0 21 22  0 23 24</span>
+<span class="comment">       *                    0  0  0 59  0 61  0  0  0  0  0  0</span>
+<span class="comment">       *                    0 25 26  0 27 28  0 29 30  0 31 32</span>
+<span class="comment">       *                    0 33 34  0 35 36 67 37 38  0 39 40</span>
+<span class="comment">       *                    0 41 42  0 43 44  0 45 46  0 47 48</span>
+<span class="comment">       *                    0  0  0  0  0  0  0  0  0  0  0  0</span>
+<span class="comment">       *</span>
+<span class="comment">       */</span>
+
+      <span class="comment">/*</span>
+<span class="comment">       * Close the dataset and the file.</span>
+<span class="comment">       */</span>
+      <span class="keyword">delete</span> dataset;
+      <span class="keyword">delete</span> file;
+
+      <span class="comment">/*</span>
+<span class="comment">       * Open the file.</span>
+<span class="comment">       */</span>
+      file = <span class="keyword">new</span> H5File( FILE_NAME, H5F_ACC_RDONLY );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Open the dataset.</span>
+<span class="comment">       */</span>
+      dataset = <span class="keyword">new</span> DataSet( file-&gt;openDataSet( DATASET_NAME ));
+
+      <span class="comment">/*</span>
+<span class="comment">       * Read data back to the buffer matrix.</span>
+<span class="comment">       */</span>
+      dataset-&gt;read( matrix, PredType::NATIVE_INT );
+
+      <span class="comment">/*</span>
+<span class="comment">       * Display the result.</span>
+<span class="comment">       */</span>
+      <span class="keywordflow">for</span> (i=0; i &lt; MSPACE_DIM1; i++)
+      {
+          <span class="keywordflow">for</span>(j=0; j &lt; MSPACE_DIM2; j++)
+             cout &lt;&lt; matrix[i][j] &lt;&lt; <span class="stringliteral">"  "</span>;
+          cout &lt;&lt; endl;
+      }
+
+      <span class="comment">/*</span>
+<span class="comment">       * Close the dataset and the file.</span>
+<span class="comment">       */</span>
+      <span class="keyword">delete</span> dataset;
+      <span class="keyword">delete</span> file;
+   }  <span class="comment">// end of try block</span>
+
+   <span class="comment">// catch failure caused by the H5File operations</span>
+   <span class="keywordflow">catch</span>( FileIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSet operations</span>
+   <span class="keywordflow">catch</span>( DataSetIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="comment">// catch failure caused by the DataSpace operations</span>
+   <span class="keywordflow">catch</span>( DataSpaceIException error )
+   {
+      error.printError();
+      <span class="keywordflow">return</span> -1;
+   }
+
+   <span class="keywordflow">return</span> 0;
+
+}
+</pre></div> <hr size="1"><address style="align: right;"><small>Generated on Mon Oct 31 04:59:47 2005 by&nbsp;
+<a href="http://www.doxygen.org/index.html">
+<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.2 </small></address>
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/dataset_p1.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/dataset_p1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/ddl.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ddl.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ddl.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,584 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+    <title>DDL for HDF5</title>
+
+<!-- #BeginLibraryItem "/ed_libs/styles_UG.lbi" -->
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/UGelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem -->
+
+</head>
+
+<body bgcolor="#FFFFFF">
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><h1>DDL in BNF for HDF5</h1>
+
+
+<h2>1. Introduction</h2>
+
+This document contains the data description language (DDL) for an HDF5 file. 
+The description is in Backus-Naur Form.  
+
+<h2>2. Explanation of Symbols</h2>
+
+This section contains a brief explanation of the symbols used in the DDL.
+
+<PRE>
+    ::=                      defined as
+    &lt;tname&gt;                  a token with the name tname
+    &lt;a&gt; | &lt;b&gt;                one of &lt;a&gt; or &lt;b&gt;
+    &lt;a&gt;<FONT SIZE=1.7>opt</FONT>                    zero or one occurrence of &lt;a&gt;
+    &lt;a&gt;*                     zero or more occurrence of &lt;a&gt;
+    &lt;a&gt;+                     one or more occurrence of &lt;a&gt;
+    [0-9]                    an element in the range between 0 and 9
+    `['                      the token within the quotes (used for special characters)
+    TBD                      To Be Decided
+</pre>
+
+<h2>3. The DDL</h2>
+
+<dir>
+<pre>
+&lt;file&gt; ::= HDF5 &lt;file_name&gt; { &lt;file_super_block&gt;<FONT SIZE=1.7>opt</FONT> &lt;root_group&gt; }
+
+&lt;file_name&gt; ::= &lt;identifier&gt;
+
+&lt;file_super_block&gt; ::= BOOT_BLOCK { &lt;super_block_content&gt; }
+
+&lt;super_block_content&gt; ::= TBD
+
+&lt;root_group&gt; ::= GROUP "/" {
+                           &lt;unamed_datatype&gt;*
+                           &lt;object_id&gt;<FONT SIZE=1.7>opt</FONT>
+                           &lt;group_comment&gt;<FONT SIZE=1.7>opt</FONT>
+                           &lt;group_attribute&gt;*
+                           &lt;group_member&gt;*
+                       }
+
+&lt;datatype&gt; ::= &lt;atomic_type&gt; | &lt;compound_type&gt; | &lt;variable_length_type&gt; | &lt;array_type&gt;
+
+&lt;unamed_datatype&gt; ::= DATATYPE &lt;unamed_type_name&gt; { &lt;datatype&gt; }
+
+&lt;unamed_type_name&gt; ::= the assigned name for unamed type is in the form of 
+                       #oid1:oid2, where oid1 and oid2 are the object ids
+                       of the type
+
+&lt;atomic_type&gt; ::= &lt;integer&gt;  | &lt;float&gt;  | &lt;time&gt;      | &lt;string&gt; |
+                  &lt;bitfield&gt; | &lt;opaque&gt; | &lt;reference&gt; | &lt;enum&gt;
+
+&lt;integer&gt; ::=  H5T_STD_I8BE     | H5T_STD_I8LE      |
+               H5T_STD_I16BE    | H5T_STD_I16LE     |
+               H5T_STD_I32BE    | H5T_STD_I32LE     |
+               H5T_STD_I64BE    | H5T_STD_I64LE     |
+               H5T_STD_U8BE     | H5T_STD_U8LE      |
+               H5T_STD_U16BE    | H5T_STD_U16LE     |
+               H5T_STD_U32BE    | H5T_STD_U32LE     |
+               H5T_STD_U64BE    | H5T_STD_U64LE     |
+               H5T_NATIVE_CHAR  | H5T_NATIVE_UCHAR  |
+               H5T_NATIVE_SHORT | H5T_NATIVE_USHORT |
+               H5T_NATIVE_INT   | H5T_NATIVE_UINT   |
+               H5T_NATIVE_LONG  | H5T_NATIVE_ULONG  |
+               H5T_NATIVE_LLONG | H5T_NATIVE_ULLONG
+
+&lt;float&gt; ::= H5T_IEEE_F32BE   | H5T_IEEE_F32LE     |
+            H5T_IEEE_F64BE   | H5T_IEEE_F64LE     |
+            H5T_NATIVE_FLOAT |  H5T_NATIVE_DOUBLE |
+            H5T_NATIVE_LDOUBLE
+
+&lt;time&gt; ::= TBD
+
+&lt;string&gt; ::= H5T_STRING { STRSIZE &lt;strsize&gt; ;
+               STRPAD &lt;strpad&gt; ;
+               CSET &lt;cset&gt; ;
+               CTYPE &lt;ctype&gt; ; }  
+
+&lt;strsize&gt; ::= &lt;int_value&gt;
+
+&lt;strpad&gt; ::= H5T_STR_NULLTERM | H5T_STR_NULLPAD | H5T_STR_SPACEPAD
+
+&lt;cset&gt; ::= H5T_CSET_ASCII
+
+&lt;ctype&gt; ::= H5T_C_S1 | H5T_FORTRAN_S1
+
+&lt;bitfield&gt; ::= TBD
+
+&lt;opaque&gt; ::= H5T_OPAQUE { &lt;identifier&gt; }
+
+&lt;reference&gt; ::= H5T_REFERENCE { &lt;ref_type&gt; }
+
+&lt;ref_type&gt; ::= H5T_STD_REF_OBJECT | H5T_STD_REF_DSETREG
+
+&lt;compound_type&gt; ::= H5T_COMPOUND { &lt;member_type_def&gt;+ }
+
+&lt;member_type_def&gt; ::= &lt;datatype&gt; &lt;field_name&gt; ;
+
+&lt;field_name&gt; ::= &lt;identifier&gt;
+
+&lt;variable_length_type&gt; ::= H5T_VLEN { &lt;datatype&gt; }
+
+&lt;array_type&gt; ::= H5T_ARRAY { &lt;dim_sizes&gt; &lt;datatype&gt; }
+
+&lt;dim_sizes&gt; ::= `['&lt;dimsize&gt;`]' | `['&lt;dimsize&gt;`]'&lt;dim_sizes&gt;
+
+&lt;dimsize&gt; ::= &lt;int_value&gt;
+
+&lt;attribute&gt; ::= ATTRIBUTE &lt;attr_name&gt; { &lt;dataset_type&gt;    
+                                        &lt;dataset_space&gt;
+                                        &lt;data&gt;<FONT SIZE=1.7>opt</FONT>  } 
+
+&lt;attr_name&gt; ::= &lt;identifier&gt;
+
+&lt;dataset_type&gt; ::= DATATYPE &lt;path_name&gt; | &lt;datatype&gt;
+
+&lt;enum&gt; ::= H5T_ENUM { &lt;enum_base_type&gt; &lt;enum_def&gt;+  }
+
+&lt;enum_base_type&gt; ::= &lt;integer&gt;
+// Currently enums can only hold integer type data, but they may be expanded
+// in the future to hold any datatype
+
+&lt;enum_def&gt; ::= &lt;enum_symbol&gt; &lt;enum_val&gt;;
+
+&lt;enum_symbol&gt; ::= &lt;identifier&gt;
+
+&lt;enum_val&gt; ::= &lt;int_value&gt;
+
+&lt;path_name&gt; ::= &lt;path_part&gt;+
+
+&lt;path_part&gt; ::= /&lt;identifier&gt;
+
+&lt;dataspace&gt; ::= &lt;scalar_space&gt; | &lt;simple_space&gt; | &lt;complex_space&gt;
+
+&lt;scalar_space&gt; ::= SCALAR
+
+&lt;simple_space&gt; ::= SIMPLE { &lt;current_dims&gt; / &lt;max_dims&gt; }
+
+&lt;complex_space&gt; ::= COMPLEX { &lt;complex_space_definition&gt; }
+
+&lt;dataset_space&gt; ::= DATASPACE &lt;path_name&gt; | &lt;dataspace&gt;
+
+&lt;current_dims&gt; ::= &lt;dims&gt;
+
+&lt;max_dims&gt; ::= `(' &lt;max_dim_list&gt; `)'
+
+&lt;max_dim_list&gt; ::= &lt;max_dim&gt; | &lt;max_dim&gt;, &lt;max_dim_list&gt;
+
+&lt;max_dim&gt; ::= &lt;int_value&gt; | H5S_UNLIMITED
+
+&lt;complex_space_definition&gt; ::= TBD
+
+&lt;data&gt; ::= DATA { &lt;scalar_space_data&gt; | &lt;simple_space_data&gt; | &lt;complex_space_data&gt; } | &lt;subset&gt;
+
+&lt;scalar_space_data&gt; ::= &lt;any_element&gt;
+
+&lt;any_element&gt; ::= &lt;atomic_element&gt; | &lt;compound_element&gt; | 
+                  &lt;variable_length_element&gt; | &lt;array_element&gt;
+
+&lt;any_data_seq&gt; ::= &lt;any_element&gt; | &lt;any_element&gt;, &lt;any_data_seq&gt;
+
+&lt;atomic_element&gt; :: = &lt;integer_data&gt; | &lt;float_data&gt;    | &lt;time_data&gt;   |
+                      &lt;string_data&gt;  | &lt;bitfield_data&gt; | &lt;opaque_data&gt; |
+                      &lt;enum_data&gt;    | &lt;reference_data&gt;
+
+&lt;subset&gt; ::= SUBSET { &lt;start&gt;;
+                      &lt;stride&gt;;
+                      &lt;count&gt;;
+                      &lt;block&gt;;
+                 DATA { &lt;simple_space_data&gt; }
+             }
+
+&lt;start&gt; ::= START (&lt;coor_list&gt;)
+
+&lt;stride&gt; ::= STRIDE (&lt;pos_list&gt;)
+
+&lt;count&gt; ::= COUNT (&lt;coor_list&gt;)
+
+&lt;block&gt; ::= BLOCK (&lt;coor_list&gt;)
+
+&lt;coor_list&gt; ::= &lt;int_value&gt;, &lt;coor_list&gt; | &lt;int_value&gt;
+
+&lt;integer_data&gt; ::= &lt;int_value&gt;
+
+&lt;float_data&gt; ::= a floating point number
+
+&lt;time_data&gt; ::= TBD
+
+&lt;string_data&gt; ::= a string
+// A string is enclosed in double quotes. 
+// If a string is displayed on more than one line, string concatenate
+// operator '//'is used.
+
+&lt;bitfield_data&gt; ::= TBD
+
+&lt;opaque_data&gt; ::= TBD
+
+&lt;enum_data&gt; ::= &lt;enum_symbol&gt;
+
+&lt;reference_data&gt; ::= &lt;object_ref_data&gt; | &lt;data_region_data&gt; | NULL
+
+&lt;object_ref_data&gt; ::= &lt;object_type&gt; &lt;object_num&gt;
+
+&lt;object_type&gt; ::= DATASET | GROUP | DATATYPE
+
+&lt;object_id&gt; ::= OBJECTID { &lt;object_num&gt; }
+
+&lt;object_num&gt; ::= &lt;int_value&gt;:&lt;int_value&gt; | &lt;int_value&gt;
+
+&lt;data_region_data&gt; ::= H5T_STD_REF_DSETREG &lt;object_num&gt; { &lt;data_region_data_list&gt; }
+
+&lt;data_region_data_list&gt; ::= &lt;data_region_data_info&gt;, &lt;data_region_data_list&gt; | &lt;data_region_data_info&gt;
+
+&lt;data_region_data_info&gt; ::= &lt;region_info&gt; | &lt;point_info&gt;
+
+&lt;region_info&gt; ::= (&lt;region_vals&gt;)
+
+&lt;region_vals&gt; ::= &lt;lower_bound&gt;:&lt;upper_bound&gt;, &lt;region_vals&gt; | &lt;lower_bound&gt;:&lt;upper_bound&gt;
+
+&lt;lower_bound&gt; ::= &lt;int_value&gt;
+
+&lt;upper_bound&gt; ::= &lt;int_value&gt;
+
+&lt;point_info&gt; ::= (&lt;point_vals&gt;)
+
+&lt;point_vals&gt; ::= &lt;int_value&gt; | &lt;int_value&gt;, &lt;point_vals&gt;
+
+&lt;compound_element&gt; ::= { &lt;any_data_seq&gt; }
+
+&lt;atomic_simple_data&gt; :: = &lt;atomic_element&gt;, &lt;atomic_simple_data&gt; | &lt;atomic_element&gt;
+
+&lt;simple_space_data&gt; :: = &lt;any_data_seq&gt;
+
+&lt;variable_length_element&gt; ::= ( &lt;any_data_seq&gt; )
+
+&lt;array_element&gt; ::= `[' &lt;any_data_seq&gt; `]'
+
+&lt;complex_space_data&gt; ::= TBD
+
+&lt;named_datatype&gt; ::= DATATYPE &lt;type_name&gt; { &lt;datatype&gt; }
+
+&lt;type_name&gt; ::= &lt;identifier&gt;
+
+&lt;named_dataspace&gt; ::= TBD
+
+&lt;hardlink&gt; ::= HARDLINK &lt;path_name&gt; 
+
+&lt;group&gt; ::= GROUP &lt;group_name&gt; { &lt;hardlink&gt; | &lt;group_info&gt; }
+
+&lt;group_comment&gt; ::= COMMENT &lt;string_data&gt;
+            
+&lt;group_name&gt; ::= &lt;identifier&gt;
+
+&lt;group_info&gt; ::= &lt;object_id&gt;<FONT SIZE=1.7>opt</FONT> &lt;group_comment&gt;<FONT SIZE=1.7>opt</FONT> &lt;group_attribute&gt;* &lt;group_member&gt;* 
+            
+&lt;group_attribute&gt; ::= &lt;attribute&gt; 
+
+&lt;group_member&gt; ::= &lt;named_datatype&gt; | &lt;named_dataspace&gt; | &lt;group&gt; |
+                   &lt;dataset&gt; | &lt;softlink&gt;
+
+&lt;dataset&gt; ::= DATASET &lt;dataset_name&gt; { &lt;hardlink&gt; | &lt;dataset_info&gt; }
+
+&lt;dataset_info&gt; ::= &lt;dataset_type&gt;  &lt;dataset_space&gt; &lt;storagelayout&gt;<FONT SIZE=1.7>opt</FONT>
+                   &lt;compression&gt;<FONT SIZE=1.7>opt</FONT> &lt;dataset_attribute&gt;* &lt;object_id&gt;<FONT SIZE=1.7>opt</FONT>
+                   &lt;data&gt;<FONT SIZE=1.7>opt</FONT>
+// Tokens above can be in any order as long as &lt;data&gt; is 
+// after &lt;dataset_type&gt; and &lt;dataset_space&gt;.
+
+&lt;dataset_name&gt; ::= &lt;identifier&gt;
+
+&lt;storagelayout&gt; :: = STORAGELAYOUT &lt;contiguous_layout&gt;  |  
+                     STORAGELAYOUT &lt;chunked_layout&gt;     |
+                     STORAGELAYOUT &lt;compact_layout&gt;     |
+                     STORAGELAYOUT &lt;external_layout&gt; 
+
+&lt;contiguous_layout&gt; ::= {CONTIGUOUS}    // default
+
+&lt;chunked_layout&gt; ::=  {CHUNKED &lt;dims&gt; }
+
+&lt;dims&gt; ::= (&lt;dims_values&gt;)
+
+&lt;dims_values&gt; ::= &lt;int_value&gt; | &lt;int_value&gt;, &lt;dims_values&gt;
+
+&lt;compact_layout&gt; ::= TBD           
+
+&lt;external_layout&gt; ::= {EXTERNAL &lt;external_file&gt;+ }
+
+&lt;external_file&gt; ::= (&lt;file_name&gt; &lt;offset&gt; &lt;size&gt;) 
+
+&lt;offset&gt; ::= &lt;int_value&gt;
+
+&lt;size&gt; ::= &lt;int_value&gt;
+
+&lt;compression&gt; :: = COMPRESSION { TBD }  
+
+&lt;dataset_attribute&gt; ::= &lt;attribute&gt; 
+
+&lt;softlink&gt; ::= SOFTLINK &lt;softlink_name&gt; { LINKTARGET &lt;target&gt; }
+
+&lt;softlink_name&gt; ::= &lt;identifier&gt;
+
+&lt;target&gt; ::= &lt;identifier&gt;
+
+&lt;identifier&gt; ::= a string
+// character '/' should be used with care. 
+
+&lt;pos_list&gt;  ::= &lt;pos_int&gt;, &lt;pos_list&gt; | &lt;pos_int&gt;
+
+&lt;int_value&gt; ::= 0 | &lt;pos_int&gt;
+
+&lt;pos_int&gt;   ::= [1-9][0-9]*
+
+</PRE>
+</DIR>
+
+
+<H2>4. An Example of an HDF5 File in DDL</H2>
+
+<DIR>
+<PRE>
+HDF5 "example.h5" {
+GROUP "/" {
+   ATTRIBUTE "attr1" {
+      DATATYPE H5T_STRING { 
+           STRSIZE 17;
+           STRPAD H5T_STR_NULLTERM;
+           CSET H5T_CSET_ASCII;
+           CTYPE H5T_C_S1;
+         }
+      DATASPACE SCALAR 
+      DATA {
+         "string attribute"
+      }
+   }
+   DATASET "dset1" {
+      DATATYPE H5T_STD_I32BE
+      DATASPACE SIMPLE { ( 10, 10 ) / ( 10, 10 ) }
+      DATA {
+         0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+         0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+         0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+         0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+         0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+         0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+         0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+         0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+         0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+         0, 1, 2, 3, 4, 5, 6, 7, 8, 9
+      }
+   }
+   DATASET "dset2" {
+      DATATYPE H5T_COMPOUND {
+         H5T_STD_I32BE "a";
+         H5T_IEEE_F32BE "b";
+         H5T_IEEE_F64BE "c";
+      }
+      DATASPACE SIMPLE { ( 5 ) / ( 5 ) }
+      DATA {
+         {
+            1,
+            0.1,
+            0.01
+         },
+         {
+            2,
+            0.2,
+            0.02
+         },
+         {
+            3,
+            0.3,
+            0.03
+         },
+         {
+            4,
+            0.4,
+            0.04
+         },
+         {
+            5,
+            0.5,
+            0.05
+         }
+      }
+   }
+   GROUP "group1" {
+      COMMENT "This is a comment for group1";
+      DATASET "dset3" {
+         DATATYPE "/type1"
+         DATASPACE SIMPLE { ( 5 ) / ( 5 ) }
+         DATA {
+            {
+               [ 0, 1, 2, 3 ],
+               [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+                 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
+                 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
+                 0.4, 0.4, 0.4, 0.4, 0.4, 0.4,
+                 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]
+            },
+            {
+               [ 0, 1, 2, 3 ],
+               [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+                 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
+                 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
+                 0.4, 0.4, 0.4, 0.4, 0.4, 0.4,
+                 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]
+            },
+            {
+               [ 0, 1, 2, 3 ],
+               [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+                 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
+                 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
+                 0.4, 0.4, 0.4, 0.4, 0.4, 0.4,
+                 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]
+            },
+            {
+               [ 0, 1, 2, 3 ],
+               [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+                 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
+                 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
+                 0.4, 0.4, 0.4, 0.4, 0.4, 0.4,
+                 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]
+            },
+            {
+               [ 0, 1, 2, 3 ],
+               [ 0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+                 0.2, 0.2, 0.2, 0.2, 0.2, 0.2,
+                 0.3, 0.3, 0.3, 0.3, 0.3, 0.3,
+                 0.4, 0.4, 0.4, 0.4, 0.4, 0.4,
+                 0.5, 0.5, 0.5, 0.5, 0.5, 0.5 ]
+            }
+         }
+      }
+   }
+   DATASET "dset3" {
+      DATATYPE H5T_VLEN { H5T_STD_I32LE } 
+      DATASPACE SIMPLE { ( 4 ) / ( 4 ) } 
+      DATA {
+         (0), (10, 11), (20, 21, 22), (30, 31, 32, 33)
+      } 
+   }
+   GROUP "group2" {
+      HARDLINK "/group1"
+   }
+   SOFTLINK "slink1" {
+      LINKTARGET "somevalue"
+   }
+   DATATYPE "type1" H5T_COMPOUND {
+      H5T_ARRAY { [4] H5T_STD_I32BE } "a";
+      H5T_ARRAY { [5][6] H5T_IEEE_F32BE } "b";
+   }
+}
+}
+</pre>
+</dir>
+
+
+<!-- #BeginLibraryItem "/ed_libs/NavBar_UG.lbi" --><hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="Files.html">Files</a>&nbsp;&nbsp;
+        <a href="Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="References.html">References</a>&nbsp;&nbsp;
+        <a href="Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>
+<!-- #EndLibraryItem --><!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --> 
+
+
+Last modified: 17 November 2000
+
+ 
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3 @@
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/Footer.lbi
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/Footer.lbi	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/Footer.lbi	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,6 @@
+
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,34 @@
+# HDF5 Library Makefile(.in)
+#
+# 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.
+#
+top_srcdir=@top_srcdir@
+top_builddir=../../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+SUBDIRS=
+DOCDIR=$(docdir)/hdf5/ed_libs
+
+# Public doc files (to be installed)...
+PUB_DOCS=Footer.lbi NavBar_ADevG.lbi NavBar_Common.lbi NavBar_Intro.lbi \
+         NavBar_RM.lbi NavBar_TechN.lbi NavBar_UG.lbi styles_Format.lbi \
+         styles_Gen.lbi styles_Index.lbi styles_Intro.lbi styles_RM.lbi \
+         styles_UG.lbi
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_ADevG.lbi
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_ADevG.lbi	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_ADevG.lbi	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,19 @@
+
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="../index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="../H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+    <a href="../RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+    <a href="../ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
+</td></tr>
+</table>
+</center>
+<hr>

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_Common.lbi
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_Common.lbi	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_Common.lbi	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="../index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="../H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+    <a href="../RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+</td></tr>
+</table>
+</center>
+<hr>

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_Intro.lbi
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_Intro.lbi	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_Intro.lbi	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="../H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+<a href="../RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+<a href="../index.html">Other HDF5 documents and links</a>&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_RM.lbi
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_RM.lbi	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_RM.lbi	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,37 @@
+
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="../index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="../H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User Guide</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+<td valign=top align=right>
+And in this document, the 
+<a href="../RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;&nbsp;<br>
+<a href="../RM_H5.html">H5</a>&nbsp;&nbsp;
+<a href="../RM_H5A.html">H5A</a>&nbsp;&nbsp;
+<a href="../RM_H5D.html">H5D</a>&nbsp;&nbsp;
+<a href="../RM_H5E.html">H5E</a>&nbsp;&nbsp;
+<a href="../RM_H5F.html">H5F</a>&nbsp;&nbsp;
+<a href="../RM_H5G.html">H5G</a>&nbsp;&nbsp;
+<a href="../RM_H5I.html">H5I</a>&nbsp;&nbsp;
+<a href="../RM_H5P.html">H5P</a>&nbsp;&nbsp;<br>
+<a href="../RM_H5R.html">H5R</a>&nbsp;&nbsp;
+<a href="../RM_H5S.html">H5S</a>&nbsp;&nbsp;
+<a href="../RM_H5T.html">H5T</a>&nbsp;&nbsp;
+<a href="../RM_H5Z.html">H5Z</a>&nbsp;&nbsp;
+<a href="../Tools.html">Tools</a>&nbsp;&nbsp;
+<a href="../PredefDTypes.html">Datatypes</a>&nbsp;&nbsp;
+</td></tr>
+<tr><td colspan="2" align="right">
+<i><small>(<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">PDF</a>
+of complete manual formatted as print volume)&nbsp;&nbsp;&nbsp;</small></i>
+</td></tr>
+</table>
+</center>
+<hr>

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_TechN.lbi
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_TechN.lbi	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_TechN.lbi	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,27 @@
+<hr>
+<center>
+<table cellspacing=0 cellpadding=0 border=0 width=98%>
+<tr><td valign=top align=left>
+<a href="../index.html">HDF5 documents and links</a>&nbsp;<br>
+<a href="../H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+<!--
+<a href="Glossary.html">Glossary</a><br>
+-->
+</td>
+
+<td valign=top align=right>
+<a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide</a>&nbsp;<br>
+<a href="../ADGuide.html">HDF5 Application Developer's Guide</a>&nbsp;<br>
+<a href="../RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>
+
+<!--
+And in this document, 
+HDF5 Technical Notes&nbsp;&nbsp;
+<br>
+<a href="TechNotes/FreeLists.html">Memory Management and Free Lists</a>&nbsp;&nbsp;
+-->
+
+</td></tr>
+</table>
+</center>
+<hr>

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_UG.lbi
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_UG.lbi	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/NavBar_UG.lbi	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,40 @@
+<hr>
+<center>
+<table border=0 width=98%>
+<tr><td valign=top align=left>
+    <a href="../index.html">HDF5 documents and links</a>&nbsp;<br>
+    <a href="../H5.intro.html">Introduction to HDF5</a>&nbsp;<br>
+    <a href="../RM_H5Front.html">HDF5 Reference Manual</a>&nbsp;<br>   
+    <a href="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/index.html">HDF5 User's Guide for Release 1.6</a>&nbsp;<br>
+    <!--
+    <a href="Glossary.html">Glossary</a><br>
+    -->
+</td>
+<td valign=top align=right>
+    And in this document, the 
+    <a href="../H5.user.html"><strong>HDF5 User's Guide from Release 1.4.5:</strong></a>&nbsp;&nbsp;&nbsp;&nbsp;
+        <br>
+        <a href="../Files.html">Files</a>&nbsp;&nbsp;
+        <a href="../Datasets.html">Datasets</a>&nbsp;&nbsp;
+        <a href="../Datatypes.html">Datatypes</a>&nbsp;&nbsp;
+        <a href="../Dataspaces.html">Dataspaces</a>&nbsp;&nbsp;
+        <a href="../Groups.html">Groups</a>&nbsp;&nbsp;
+        <br>
+        <a href="../References.html">References</a>&nbsp;&nbsp;
+        <a href="../Attributes.html">Attributes</a>&nbsp;&nbsp;
+        <a href="../Properties.html">Property Lists</a>&nbsp;&nbsp;
+        <a href="../Errors.html">Error Handling</a>&nbsp;&nbsp;
+        <br>
+        <a href="../Filters.html">Filters</a>&nbsp;&nbsp;
+        <a href="../Caching.html">Caching</a>&nbsp;&nbsp;
+        <a href="../Chunking.html">Chunking</a>&nbsp;&nbsp;
+        <a href="../MountingFiles.html">Mounting Files</a>&nbsp;&nbsp;
+        <br>
+        <a href="../Performance.html">Performance</a>&nbsp;&nbsp;
+        <a href="../Debugging.html">Debugging</a>&nbsp;&nbsp;
+        <a href="../Environment.html">Environment</a>&nbsp;&nbsp;
+        <a href="../ddl.html">DDL</a>&nbsp;&nbsp;
+</td></tr>
+</table>
+</center>
+<hr>

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Format.lbi
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Format.lbi	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Format.lbi	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="../ed_styles/FormatElect.css" rel="stylesheet" type="text/css">

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Gen.lbi
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Gen.lbi	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Gen.lbi	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="../ed_styles/GenElect.css" rel="stylesheet" type="text/css">

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Index.lbi
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Index.lbi	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Index.lbi	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="../ed_styles/IndexElect.css" rel="stylesheet" type="text/css">

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Intro.lbi
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Intro.lbi	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_Intro.lbi	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="../ed_styles/IntroElect.css" rel="stylesheet" type="text/css">

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_RM.lbi
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_RM.lbi	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_RM.lbi	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,19 @@
+
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="../ed_styles/RMelect.css" rel="stylesheet" type="text/css">

Added: packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_UG.lbi
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_UG.lbi	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_libs/styles_UG.lbi	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="../ed_styles/UGelect.css" rel="stylesheet" type="text/css">

Added: packages/hdf5/branches/upstream/current/doc/html/ed_styles/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_styles/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_styles/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3 @@
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+

Added: packages/hdf5/branches/upstream/current/doc/html/ed_styles/FormatElect.css
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_styles/FormatElect.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_styles/FormatElect.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,35 @@
+<STYLE TYPE="text/css">
+
+P, p, UL, ul, OL, ol, LI, li, DL, dl, DT, dt, DD, dd    {
+        }
+	
+A, a    {
+        }
+
+H1, h1  {
+        text-align: center	
+        }
+
+H2, h2  {	
+        }
+
+H3, h3  {
+        }
+
+H4, h4  {	
+        }
+
+H5, h5  {	
+        }
+
+code, CODE  {
+        }
+
+pre, PRE    {
+        }
+	
+.smallType  {
+        font-size: smaller;
+        }
+
+</STYLE>
\ No newline at end of file

Added: packages/hdf5/branches/upstream/current/doc/html/ed_styles/FormatPrint.css
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_styles/FormatPrint.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_styles/FormatPrint.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,58 @@
+<STYLE TYPE="text/css">
+
+P, p, UL, ul, OL, ol, LI, li, DL, dl, DT, dt, DD, dd    {
+        font-family: garamond, "times new roman", times, serif; 
+        font-size: 11pt;
+        }
+	
+A, a    {
+        color: black; 
+        text-decoration: none;
+        }
+
+H1, h1  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 18pt;
+        font-weight: bold;
+        text-align: center	
+        }
+
+H2, h2  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 16pt;
+        font-weight: bold;	
+        }
+
+H3, h3  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 14pt;
+        font-weight: bold;	
+        }
+
+H4, h4  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 12pt;
+        font-weight: bold;	
+        }
+
+H5, h5  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 10pt;
+        font-weight: bold;	
+        }
+
+code, CODE        {
+        font-family: "Courier New", Courier, Monospace;
+        font-size: 9pt;
+        }
+
+pre, PRE          {
+        font-family: "Courier New", Courier, Monospace;
+        font-size: 8pt;
+        }
+
+.smallType        {
+        font-size: 9pt;
+        }
+
+</STYLE>
\ No newline at end of file

Added: packages/hdf5/branches/upstream/current/doc/html/ed_styles/GenElect.css
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_styles/GenElect.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_styles/GenElect.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,35 @@
+<STYLE TYPE="text/css">
+
+P, p, UL, ul, OL, ol, LI, li, DL, dl, DT, dt, DD, dd    {
+        }
+	
+A, a    {
+        }
+
+H1, h1  {
+        text-align: center	
+        }
+
+H2, h2  {	
+        }
+
+H3, h3  {
+        }
+
+H4, h4  {	
+        }
+
+H5, h5  {	
+        }
+
+code, CODE  {
+        }
+
+pre, PRE    {
+        }
+	
+.smallType  {
+        font-size: smaller;
+        }
+
+</STYLE>
\ No newline at end of file

Added: packages/hdf5/branches/upstream/current/doc/html/ed_styles/GenPrint.css
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_styles/GenPrint.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_styles/GenPrint.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,58 @@
+<STYLE TYPE="text/css">
+
+P, p, UL, ul, OL, ol, LI, li, DL, dl, DT, dt, DD, dd    {
+        font-family: garamond, "times new roman", times, serif; 
+        font-size: 11pt;
+        }
+	
+A, a    {
+        color: black; 
+        text-decoration: none;
+        }
+
+H1, h1  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 18pt;
+        font-weight: bold;
+        text-align: center	
+        }
+
+H2, h2  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 16pt;
+        font-weight: bold;	
+        }
+
+H3, h3  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 14pt;
+        font-weight: bold;	
+        }
+
+H4, h4  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 12pt;
+        font-weight: bold;	
+        }
+
+H5, h5  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 10pt;
+        font-weight: bold;	
+        }
+
+code, CODE        {
+        font-family: "Courier New", Courier, Monospace;
+        font-size: 9pt;
+        }
+
+pre, PRE          {
+        font-family: "Courier New", Courier, Monospace;
+        font-size: 8pt;
+        }
+
+.smallType        {
+        font-size: 9pt;
+        }
+
+</STYLE>
\ No newline at end of file

Added: packages/hdf5/branches/upstream/current/doc/html/ed_styles/IndexElect.css
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_styles/IndexElect.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_styles/IndexElect.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,35 @@
+<STYLE TYPE="text/css">
+
+P, p, UL, ul, OL, ol, LI, li, DL, dl, DT, dt, DD, dd    {
+        }
+	
+A, a    {
+        }
+
+H1, h1  {
+        text-align: center	
+        }
+
+H2, h2  {	
+        }
+
+H3, h3  {
+        }
+
+H4, h4  {	
+        }
+
+H5, h5  {	
+        }
+
+code, CODE  {
+        }
+
+pre, PRE    {
+        }
+	
+.smallType  {
+        font-size: smaller;
+        }
+
+</STYLE>
\ No newline at end of file

Added: packages/hdf5/branches/upstream/current/doc/html/ed_styles/IndexPrint.css
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_styles/IndexPrint.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_styles/IndexPrint.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,58 @@
+<STYLE TYPE="text/css">
+
+P, p, UL, ul, OL, ol, LI, li, DL, dl, DT, dt, DD, dd    {
+        font-family: garamond, "times new roman", times, serif; 
+        font-size: 11pt;
+        }
+	
+A, a    {
+        color: black; 
+        text-decoration: none;
+        }
+
+H1, h1  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 18pt;
+        font-weight: bold;
+        text-align: center	
+        }
+
+H2, h2  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 16pt;
+        font-weight: bold;	
+        }
+
+H3, h3  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 14pt;
+        font-weight: bold;	
+        }
+
+H4, h4  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 12pt;
+        font-weight: bold;	
+        }
+
+H5, h5  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 10pt;
+        font-weight: bold;	
+        }
+
+code, CODE        {
+        font-family: "Courier New", Courier, Monospace;
+        font-size: 9pt;
+        }
+
+pre, PRE          {
+        font-family: "Courier New", Courier, Monospace;
+        font-size: 8pt;
+        }
+
+.smallType        {
+        font-size: 9pt;
+        }
+
+</STYLE>
\ No newline at end of file

Added: packages/hdf5/branches/upstream/current/doc/html/ed_styles/IntroElect.css
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_styles/IntroElect.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_styles/IntroElect.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,35 @@
+<STYLE TYPE="text/css">
+
+P, p, UL, ul, OL, ol, LI, li, DL, dl, DT, dt, DD, dd    {
+        }
+	
+A, a    {
+        }
+
+H1, h1  {
+        text-align: center	
+        }
+
+H2, h2  {	
+        }
+
+H3, h3  {
+        }
+
+H4, h4  {	
+        }
+
+H5, h5  {	
+        }
+
+code, CODE  {
+        }
+
+pre, PRE    {
+        }
+	
+.smallType  {
+        font-size: smaller;
+        }
+
+</STYLE>
\ No newline at end of file

Added: packages/hdf5/branches/upstream/current/doc/html/ed_styles/IntroPrint.css
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_styles/IntroPrint.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_styles/IntroPrint.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,58 @@
+<STYLE TYPE="text/css">
+
+P, p, UL, ul, OL, ol, LI, li, DL, dl, DT, dt, DD, dd    {
+        font-family: garamond, "times new roman", times, serif; 
+        font-size: 11pt;
+        }
+	
+A, a    {
+        color: black; 
+        text-decoration: none;
+        }
+
+H1, h1  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 18pt;
+        font-weight: bold;
+        text-align: center	
+        }
+
+H2, h2  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 16pt;
+        font-weight: bold;	
+        }
+
+H3, h3  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 14pt;
+        font-weight: bold;	
+        }
+
+H4, h4  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 12pt;
+        font-weight: bold;	
+        }
+
+H5, h5  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 10pt;
+        font-weight: bold;	
+        }
+
+code, CODE        {
+        font-family: "Courier New", Courier, Monospace;
+        font-size: 9pt;
+        }
+
+pre, PRE          {
+        font-family: "Courier New", Courier, Monospace;
+        font-size: 8pt;
+        }
+
+.smallType        {
+        font-size: 9pt;
+        }
+
+</STYLE>
\ No newline at end of file

Added: packages/hdf5/branches/upstream/current/doc/html/ed_styles/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_styles/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_styles/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,33 @@
+# HDF5 Library Makefile(.in)
+#
+# 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.
+#
+top_srcdir=@top_srcdir@
+top_builddir=../../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+SUBDIRS=
+DOCDIR=$(docdir)/hdf5/ed_styles
+
+# Public doc files (to be installed)...
+PUB_DOCS=FormatElect.css FormatPrint.css GenElect.css GenPrint.css    \
+         IndexElect.css IndexPrint.css IntroElect.css IntroPrint.css  \
+         RMelect.css RMprint.css UGelect.css UGprint.css
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/ed_styles/RMelect.css
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_styles/RMelect.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_styles/RMelect.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,39 @@
+<STYLE TYPE="text/css">
+
+P, p, UL, ul, OL, ol, LI, li, DL, dl, DT, dt, DD, dd    {
+        }
+	
+A, a    {
+        }
+
+H1, h1  {
+        text-align: center	
+        }
+
+H2, h2  {	
+        }
+
+H3, h3  {
+        }
+
+H4, h4  {	
+        }
+
+H5, h5  {	
+        }
+
+code, CODE  {
+        }
+
+pre, PRE    {
+        }
+	
+.smallType  {
+        font-size: smaller;
+        }
+
+.1_4_compat  {
+        font-style: italic;
+        }
+
+</STYLE>
\ No newline at end of file

Added: packages/hdf5/branches/upstream/current/doc/html/ed_styles/RMprint.css
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_styles/RMprint.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_styles/RMprint.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,58 @@
+<STYLE TYPE="text/css">
+
+P, p, UL, ul, OL, ol, LI, li, DL, dl, DT, dt, DD, dd    {
+        font-family: garamond, "times new roman", times, serif; 
+        font-size: 11pt;
+        }
+	
+A, a    {
+        color: black; 
+        text-decoration: none;
+        }
+
+H1, h1  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 18pt;
+        font-weight: bold;
+        text-align: center	
+        }
+
+H2, h2  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 16pt;
+        font-weight: bold;	
+        }
+
+H3, h3  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 14pt;
+        font-weight: bold;	
+        }
+
+H4, h4  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 12pt;
+        font-weight: bold;	
+        }
+
+H5, h5  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 10pt;
+        font-weight: bold;	
+        }
+
+code, CODE        {
+        font-family: "Courier New", Courier, Monospace;
+        font-size: 9pt;
+        }
+
+pre, PRE          {
+        font-family: "Courier New", Courier, Monospace;
+        font-size: 8pt;
+        }
+
+.smallType        {
+        font-size: 9pt;
+        }
+
+</STYLE>
\ No newline at end of file

Added: packages/hdf5/branches/upstream/current/doc/html/ed_styles/UGelect.css
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_styles/UGelect.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_styles/UGelect.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,35 @@
+<STYLE TYPE="text/css">
+
+P, p, UL, ul, OL, ol, LI, li, DL, dl, DT, dt, DD, dd    {
+        }
+	
+A, a    {
+        }
+
+H1, h1  {
+        text-align: center	
+        }
+
+H2, h2  {	
+        }
+
+H3, h3  {
+        }
+
+H4, h4  {	
+        }
+
+H5, h5  {	
+        }
+
+code, CODE  {
+        }
+
+pre, PRE    {
+        }
+	
+.smallType  {
+        font-size: smaller;
+        }
+
+</STYLE>
\ No newline at end of file

Added: packages/hdf5/branches/upstream/current/doc/html/ed_styles/UGprint.css
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ed_styles/UGprint.css	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ed_styles/UGprint.css	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,58 @@
+<STYLE TYPE="text/css">
+
+P, p, UL, ul, OL, ol, LI, li, DL, dl, DT, dt, DD, dd    {
+        font-family: garamond, "times new roman", times, serif; 
+        font-size: 11pt;
+        }
+	
+A, a    {
+        color: black; 
+        text-decoration: none;
+        }
+
+H1, h1  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 18pt;
+        font-weight: bold;
+        text-align: center	
+        }
+
+H2, h2  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 16pt;
+        font-weight: bold;	
+        }
+
+H3, h3  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 14pt;
+        font-weight: bold;	
+        }
+
+H4, h4  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 12pt;
+        font-weight: bold;	
+        }
+
+H5, h5  {
+        font-family: garamond, "times new roman", times, serif;
+        font-size: 10pt;
+        font-weight: bold;	
+        }
+
+code, CODE        {
+        font-family: "Courier New", Courier, Monospace;
+        font-size: 9pt;
+        }
+
+pre, PRE          {
+        font-family: "Courier New", Courier, Monospace;
+        font-size: 8pt;
+        }
+
+.smallType        {
+        font-size: 9pt;
+        }
+
+</STYLE>
\ No newline at end of file

Added: packages/hdf5/branches/upstream/current/doc/html/extern1.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/extern1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/extern2.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/extern2.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/fortran/Dependencies
===================================================================

Added: packages/hdf5/branches/upstream/current/doc/html/fortran/F90Flags.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/fortran/F90Flags.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/fortran/F90Flags.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,334 @@
+<html>
+<head><title>
+HDF5 Fortran90 Flags and Datatypes
+</title>
+
+</html><!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="../ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem --><html></head>
+
+<body bgcolor="#FFFFFF">
+
+
+<hr>
+
+<center>
+<h1>HDF5 Fortran90 Flags and Datatypes</h1>
+</center>
+
+<br>
+<br>
+<br>
+
+<h2>Fortran90 Datatypes</h2>
+
+The <a href="../PredefDTypes.html#F90">Fortran90 HDF5 datatypes</a> 
+are listed in <a href="../PredefDTypes.html">HDF5 Predefined Datatypes</a>
+
+<br>
+<br>
+<br>
+
+<h2>Fortran90 Flags</h2>
+
+The Fortran90 HDF5 flags have the same meanings as the C flags defined in the
+<a href="../RM_H5Front.html"><cite>HDF5 Reference Manual</cite></a> and the
+<a href="../H5.user.html"><cite>HDF5 User's Guide</cite></a>.
+
+
+<h4>File access flags</h4>
+    <table border=0 width=76%>
+    <tr><td valign=top width=33% align=left>
+<pre>
+      H5F_ACC_RDWR_F 
+      H5F_ACC_RDONLY_F
+      H5F_ACC_TRUNC_F
+</pre>
+    </td>
+    <td valign=top width=34% align=left>
+<pre>
+      H5F_ACC_EXCL_F
+      H5F_ACC_DEBUG_F
+</pre>
+    </td>
+    <td valign=top width=33% align=left>
+<pre>
+      H5F_SCOPE_LOCAL_F
+      H5F_SCOPE_GLOBAL_F
+</pre>
+    </tr></td>
+    </table>
+
+
+<h4>Group management flags</h4>
+    <table border=0 width=76%>
+    <tr><td valign=top width=33% align=left>
+<pre>
+      H5G_UNKNOWN_F
+      H5G_LINK_F
+      H5G_GROUP_F
+</pre>
+    </td>
+    <td valign=top width=34% align=left>
+<pre>
+      H5G_DATASET_F
+      H5G_TYPE_F
+      H5G_LINK_ERROR_F
+</pre>
+    </td>
+    <td valign=top width=33% align=left>
+<pre>
+      H5G_LINK_HARD_F
+      H5G_LINK_SOFT_F
+</pre>
+    </tr></td>
+    </table>
+
+
+<h4>Dataset format flags</h4>
+    <table border=0 width=76%>
+    <tr><td valign=top width=33% align=left>
+<pre>
+      H5D_COMPACT_F  
+</pre>
+    </td>
+    <td valign=top width=34% align=left>
+<pre>
+      H5D_CONTIGUOUS_F
+</pre>
+    </td>
+    <td valign=top width=33% align=left>
+<pre>
+      H5D_CHUNKED_F
+</pre>
+    </tr></td>
+    </table>
+
+
+<h4>MPI IO data transfer flags</h4>
+    <table border=0 width=76%>
+    <tr><td valign=top width=33% align=left>
+<pre>
+      H5FD_MPIO_INDEPENDENT_F 
+</pre>
+    </td>
+    <td valign=top width=34% align=left>
+<pre>
+      H5FD_MPIO_COLLECTIVE_F
+</pre>
+    </td>
+    <td valign=top width=33% align=left>
+<pre>&nbsp;
+      
+</pre>
+    </tr></td>
+    </table>
+
+
+<h4>Error flags</h4>
+    <table border=0 width=76%>
+    <tr><td valign=top width=33% align=left>
+<pre>
+      H5E_NONE_MAJOR_F 
+      H5E_ARGS_F 
+      H5E_RESOURCE_F 
+      H5E_INTERNAL_F 
+      H5E_FILE_F 
+      H5E_IO_F 
+      H5E_FUNC_F 
+      H5E_ATOM_F 
+</pre>
+    </td>
+    <td valign=top width=34% align=left>
+<pre>
+      H5E_CACHE_F 
+      H5E_BTREE_F 
+      H5E_SYM_F 
+      H5E_HEAP_F 
+      H5E_OHDR_F 
+      H5E_DATATYPE_F 
+      H5E_DATASPACE_F 
+      H5E_DATASET_F 
+</pre>
+    </td>
+    <td valign=top width=33% align=left>
+<pre>
+      H5E_STORAGE_F 
+      H5E_PLIST_F 
+      H5E_ATTR_F 
+      H5E_PLINE_F 
+      H5E_EFL_F 
+      H5E_REFERENCE_F
+      H5E_VFL_F 
+      H5E_TBBT_F 
+</pre>
+    </tr></td>
+    </table>
+
+
+<h4>Object identifier flags</h4>
+    <table border=0 width=76%>
+    <tr><td valign=top width=33% align=left>
+<pre>
+      H5I_FILE_F
+      H5I_GROUP_F
+      H5I_DATATYPE_F
+</pre>
+    </td>
+    <td valign=top width=34% align=left>
+<pre>
+      H5I_DATASPACE_F
+      H5I_DATASET_F
+      H5I_ATTR_F
+</pre>
+    </td>
+    <td valign=top width=33% align=left>
+<pre>
+      H5I_BADID_F
+</pre>
+    </tr></td>
+    </table>
+
+
+<h4>Property list flags</h4>
+    <table border=0 width=76%>
+    <tr><td valign=top width=33% align=left>
+<pre>
+      H5P_FILE_CREATE_F 
+      H5P_FILE_ACCESS_F 
+</pre>
+    </td>
+    <td valign=top width=34% align=left>
+<pre>
+      H5P_DATASET_CREATE_F
+      H5P_DATASET_XFER_F 
+</pre>
+    </td>
+    <td valign=top width=33% align=left>
+<pre>
+      H5P_MOUNT_F 
+      H5P_DEFAULT_F 
+</pre>
+    </tr></td>
+    </table>
+
+
+<h4>Reference pointer flags</h4>
+    <table border=0 width=76%>
+    <tr><td valign=top width=33% align=left>
+<pre>
+      H5R_OBJECT_F
+</pre>
+    </td>
+    <td valign=top width=34% align=left>
+<pre>
+      H5R_DATASET_REGION_F
+</pre>
+    </td>
+    <td valign=top width=33% align=left>
+<pre>&nbsp;
+      
+</pre>
+    </tr></td>
+    </table>
+
+<h4>Dataspace flags</h4>
+    <table border=0 width=76%>
+    <tr><td valign=top width=33% align=left>
+<pre>
+      H5S_SCALAR_F 
+      H5S_SIMPLE_F 
+</pre>
+    </td>
+    <td valign=top width=34% align=left>
+<pre>
+      H5S_SELECT_SET_F
+      H5S_SELECT_OR_F
+</pre>
+    </td>
+    <td valign=top width=33% align=left>
+<pre>
+      H5S_UNLIMITED_F
+      H5S_ALL_F
+</pre>
+    </tr></td>
+    </table>
+
+
+<h4>Datatype flags</h4>
+    <table border=0 width=76%>
+    <tr><td valign=top width=33% align=left>
+<pre>
+      H5T_NO_CLASS_F 
+      H5T_INTEGER_F 
+      H5T_FLOAT_F  
+      H5T_TIME_F 
+      H5T_STRING_F 
+      H5T_BITFIELD_F
+      H5T_OPAQUE_F 
+      H5T_COMPOUND_F 
+      H5T_REFERENCE_F
+      H5T_ENUM_F 
+</pre>
+    </td>
+    <td valign=top width=34% align=left>
+<pre>
+      H5T_ORDER_LE_F 
+      H5T_ORDER_BE_F
+      H5T_ORDER_VAX_F
+      H5T_PAD_ZERO_F
+      H5T_PAD_ONE_F
+      H5T_PAD_BACKGROUND_F
+      H5T_PAD_ERROR_F    
+      H5T_SGN_NONE_F   
+      H5T_SGN_2_F     
+      H5T_SGN_ERROR_F
+</pre>
+    </td>
+    <td valign=top width=33% align=left>
+<pre>
+      H5T_NORM_IMPLIED_F
+      H5T_NORM_MSBSET_F
+      H5T_NORM_NONE_F 
+      H5T_CSET_ASCII_F
+      H5T_STR_NULLTERM_F 
+      H5T_STR_NULLPAD_F 
+      H5T_STR_SPACEPAD_F
+      H5T_STR_ERROR_F
+</pre>
+    </tr></td>
+    </table>
+
+
+<hr>
+
+
+<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem --> 
+
+Last modified:  3 April 2001
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/fortran/F90UserNotes.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/fortran/F90UserNotes.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/fortran/F90UserNotes.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,143 @@
+<html>
+<head>
+<title>HDF5 Fortran90 User's Notes</title>
+
+</html><!-- #BeginLibraryItem "/ed_libs/styles_RM.lbi" -->
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="../ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+<!-- #EndLibraryItem --><html></head>
+
+<body bgcolor=#FFFFFF>
+<pre>
+
+                          HDF5 Fortran90 User's Notes
+                          ===========================
+
+About the source code organization
+==================================
+
+The Fortran APIs are organized in modules parallel to the HDF5 Interfaces.
+Each module is in a separate file with the name H5*ff.f.  Corresponding C
+stubs are in the H5*f.c files.  For example, the Fortran File APIs are in 
+the file H5Fff.f and the corresponding C stubs are in the file H5Ff.c. 
+
+Each module contains Fortran definitions of the constants, interfaces to 
+the subroutines if needed, and the subroutines themselves.  
+
+Users must use constant names in their programs instead of the numerical 
+values, as the numerical values are subject to change without notice. 
+
+About the Fortran APIs 
+=======================
+
+*  The Fortran APIs come in the form of Fortran subroutines.
+
+*  Each Fortran subroutine name is derived from the corresponding C function
+   name by adding "_f" to the name.  For example, the name of the C function 
+   to create an HDF5 file is H5Fcreate;  the corresponding Fortran subroutine 
+   is h5fcreate_f. 
+
+*  A description of each implemented Fortran subroutine and its parameters 
+   can be found following the description of the corresponding C function in 
+   the HDF5 Reference Manual provided with this release.  
+
+*  The parameter list for each Fortran subroutine has two more parameters
+   than the corresponding C function.  These additional parameters hold 
+   the return value and an error code.  The order of the Fortran subroutine 
+   parameters may differ from the order of the C function parameters. 
+   The Fortran subroutine parameters are listed in the following order: 
+      -- required input parameters,
+      -- output parameters, including return value and error code, and 
+      -- optional input parameters.
+   For example, the C function to create a dataset has the following 
+   prototype:
+
+       hid_t H5Dcreate(hid_it loc_id, char *name, hid_t type_id, 
+             hid_t space_id, hid_t creation_prp);
+   
+   The corresponding Fortran subroutine has the following form:
+   
+       SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, 
+             hdferr, creation_prp)
+  
+   The first four parameters of the Fortran subroutine correspond to the 
+   C function parameters.  The fifth parameter, dset_id, is an output 
+   parameter and contains a valid dataset identifier if the value of the 
+   sixth output parameter hdferr indicates successful completion. 
+   (Error code descriptions are provided with the subroutine descriptions 
+   in the Reference Manual.)  The seventh input parameter, creation_prp, 
+
+   is optional, and may be omitted when the default creation property 
+   list is used.
+
+*  Parameters to the Fortran subroutines have one of the following 
+   predefined datatypes (see the file H5fortran_types.f90 for KIND 
+   definitions):
+   
+        INTEGER(HID_T)      compares with hid_t type in HDF5 C APIs
+        INTEGER(HSIZE_T)    compares with hsize_t in HDF5 C APIs
+        INTEGER(HSSIZE_T)   compares with hssize_t in HDF5 C APIs
+        INTEGER(SIZE_T)     compares with the C size_t type
+
+   These integer types usually correspond to 4 or 8 byte integers, 
+   depending on the FORTRAN90 compiler and the corresponding HDF5 
+   C library definitions.
+   
+   The H5R module defines two types of references: 
+        TYPE(HOBJ_REF_T_F)      compares to hobj_ref_t in HDF5 C API
+        TYPE(HDSET_REG_REF_T_F) compares to hdset_reg_ref_t in HDF5 C API
+
+*  Each Fortran application must call the h5open_f subroutine to 
+   initialize the Fortran interface and the HDF5 C Library before calling 
+   any HDF5 Fortran subroutine. The application must call the h5close_f 
+   subroutine after all calls to the HDF5 Fortran Library to close the 
+   Fortran interface and HDF5 C Library. 
+
+*  List of the predefined datatypes can be found in the HDF5 Reference 
+   Manual provided with this release.  See <a href="../PredefDTypes.html">HDF5 Predefined Datatypes</a>.
+
+*  When a C application reads data stored from a Fortran program, the data 
+   will appear to be transposed due to the difference in the C and Fortran 
+   storage orders.  For example, if Fortran writes a 4x6 two-dimensional 
+   dataset to the file, a C program will read it as a 6x4 two-dimensional 
+   dataset into memory.  The HDF5 C utilities h5dump and h5ls will also 
+   display transposed data, if data is written from a Fortran program.
+
+*  Fortran indices are 1-based.
+
+*  Compound datatype datasets can be written or read by atomic fields only.
+
+</pre>
+
+<hr>
+
+
+<!-- #BeginLibraryItem "/ed_libs/Footer.lbi" -->
+<address>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a> 
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+</address>
+<!-- #EndLibraryItem -->
+ 
+Last modified: 15 December 2000
+
+</body>
+</html>
+

Added: packages/hdf5/branches/upstream/current/doc/html/fortran/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/fortran/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/fortran/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,32 @@
+# HDF5 Library Makefile(.in)
+#
+# 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.
+#
+# 
+top_srcdir=@top_srcdir@
+top_builddir=../../..
+srcdir=@srcdir@
+VPATH=.:@srcdir@
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+SUBDIRS=
+DOCDIR=$(docdir)/hdf5/fortran
+
+# Public doc files (to be installed)...
+PUB_DOCS=F90Flags.html F90UserNotes.html 
+
+# Other doc files (not to be installed)...
+PRIVATE_DOCS=
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/doc/html/group_p1.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/group_p1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/group_p2.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/group_p2.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/group_p3.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/group_p3.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/h5s.examples
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/h5s.examples	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/h5s.examples	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,347 @@
+Example 1: Create a simple fixed size 3-D dataspace in memory and on disk and
+    copy the entire dataset to disk.
+
+{
+    hid_t file;                     /* File ID */
+    hid_t dataset;                  /* Dataset ID */
+    hid_t mem_space, file_space;    /* Dataspaces for memory and the file */
+    uint8 *buf;                     /* Buffer for data */
+    hsize_t curr_dims[3]={3,4,5};   /* Dimensions of the dataset */
+
+    /* Create file */
+    file = H5Fcreate("example1.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for dataset in the file */
+    /* Selection for dataspace defaults to entire space */
+    file_space=H5Screate(H5S_SIMPLE);
+
+    /* Set the extent & type of the dataset's dataspace */
+    H5Sset_extent_simple(file_space,3,curr_dims,curr_dims);
+
+    /* Create the dataspace for the dataset in memory */
+    /* Selection for dataspace defaults to entire space */
+    mem_space=H5Screate(H5S_SIMPLE);
+
+    /* Set the extent & type of the memory dataspace */
+    H5Sset_extent_simple(mem_space,3,curr_dims,curr_dims);
+
+    /* Create the dataset on disk */
+    dataset=H5Dcreate(file,"Dataset",H5T_NATIVE_UINT8,file_space,H5P_DEFAULT);
+
+    /* Write the dataset to the file */
+    H5Dwrite(dataset,H5T_NATIVE_UINT8,mem_space,file_space,H5P_DEFAULT,buf);
+
+    /* Close dataspaces */
+    H5Sclose(mem_space);
+    H5Sclose(file_space);
+
+    /* Close dataset & file */
+    H5Dclose(dataset);
+    H5Fclose(file);
+}
+
+
+Example 2: Create a simple fixed size 3-D dataspace in memory and on disk and
+    copy a hyperslab to disk.  The hyperslab blocks are packed and
+    contiguous in memory, but are scattered when written to the dataset
+    on disk.
+
+{
+    hid_t file;                     /* File ID */
+    hid_t dataset;                  /* Dataset ID */
+    hid_t mem_space, file_space;    /* Dataspaces for memory and the file */
+    uint8 *buf;                     /* Buffer for data */
+    hsize_t start[3]={3,4,5};       /* Start of hyperslab */
+    hsize_t stride[3]={1,2,2};      /* Stride for hyperslab */
+    hsize_t count[3]={3,3,3};       /* Hyperslab block count in each dimension */
+    hsize_t block[3]={2,2,2};       /* Hyperslab block size in each dimension */
+    hsize_t curr_dims[3]={13,14,15};   /* Dimensions of the dataset */
+
+    /* Create file */
+    file = H5Fcreate("example2.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for dataset in the file */
+    /* Selection for dataspace defaults to entire space */
+    file_space=H5Screate(H5S_SIMPLE);
+
+    /* Set the extent & type of the dataset's dataspace */
+    H5Sset_extent_simple(file_space,3,curr_dims,curr_dims);
+
+    /* Set the hyperslab selection for a file dataspace */
+    H5Sselect_hyperslab(file_space,H5S_SELECT_SET,start,stride,count,block);
+
+    /* Create the dataspace for the dataset in memory */
+    /* Selection for dataspace defaults to entire space */
+    mem_space=H5Screate(H5S_SIMPLE);
+
+    /* Set the extent & type of the memory dataspace */
+    /* Compute the memory dimensions based on the hyperslab blocks to write */
+    for(i=0; i<3; i++)
+        curr_dims[i]=count[i]*block[i];
+    H5Sset_extent_simple(mem_space,3,curr_dims,curr_dims);
+
+    /* Create the dataset on disk */
+    dataset=H5Dcreate(file,"Dataset",H5T_NATIVE_UINT8,file_space,H5P_DEFAULT);
+
+    /* Write the hyperslab to the file */
+    H5Dwrite(dataset,H5T_NATIVE_UINT8,mem_space,file_space,H5P_DEFAULT,buf);
+
+    /* Close dataspaces */
+    H5Sclose(mem_space);
+    H5Sclose(file_space);
+
+    /* Close dataset & file */
+    H5Dclose(dataset);
+    H5Fclose(file);
+}
+
+
+Example 3: Create a simple fixed size 3-D dataspace in memory and on disk and
+    copy a specific selection of points (with a particular order) to
+    disk.  The memory and file dataspaces are different sizes, but the number
+    of points selected are the same.
+
+{
+    hid_t file;                     /* File ID */
+    hid_t dataset;                  /* Dataset ID */
+    hid_t mem_space, file_space;    /* Dataspaces for memory and the file */
+    uint8 *buf;                     /* Buffer for data */
+    hsize_t elements[5][3];         /* Dataspace elements selected */
+    hsize_t curr_dims[3]={13,14,15};   /* Dimensions of the dataset */
+
+    /* Create file */
+    file = H5Fcreate("example3.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for dataset in the file */
+    /* Selection for dataspace defaults to entire space */
+    file_space=H5Screate(H5S_SIMPLE);
+
+    /* Set the extent & type of the dataset's dataspace */
+    H5Sset_extent_simple(file_space,3,curr_dims,curr_dims);
+
+    /* Set the elements for the selection in the file dataspace */
+    elements[0]={0,2,4};            /* Yes, I know this won't compile.. :-) */
+    elements[1]={3,4,1};
+    elements[2]={9,8,3};
+    elements[3]={7,2,0};
+    elements[4]={6,5,8};
+    H5Sselect_elements(file_space,H5S_SELECT_SET,5,elements);
+
+    /* Create the dataspace for the dataset in memory */
+    /* Selection for dataspace defaults to entire space */
+    mem_space=H5Screate(H5S_SIMPLE);
+
+    /* Set the extent & type of the memory dataspace */
+    curr_dims={23,15,18};           /* This won't compile either :-) */
+    H5Sset_extent_simple(mem_space,3,curr_dims,curr_dims);
+
+    /* Set the elements for the selection in the file dataspace */
+    elements[0]={9,2,1};
+    elements[1]={13,1,12};
+    elements[2]={4,1,7};
+    elements[3]={0,12,0};
+    elements[4]={20,10,17};
+    H5Sselect_elements(mem_space,H5S_SELECT_SET,5,elements);
+
+    /* Create the dataset on disk */
+    dataset=H5Dcreate(file,"Dataset",H5T_NATIVE_UINT8,file_space,H5P_DEFAULT);
+
+    /* Write the hyperslab to the file */
+    H5Dwrite(dataset,H5T_NATIVE_UINT8,mem_space,file_space,H5P_DEFAULT,buf);
+
+    /* Close dataspaces */
+    H5Sclose(mem_space);
+    H5Sclose(file_space);
+
+    /* Close dataset & file */
+    H5Dclose(dataset);
+    H5Fclose(file);
+}
+
+
+Example 4: Create a simple fixed size 3-D dataspace in memory and on disk and
+    build up selection hyperslab selections to copy from memory to disk.  The
+    selection is the same for both dataspaces, but a different offset is used,
+    to illustrate the selection offsets.  
+
+{
+    hid_t file;                     /* File ID */
+    hid_t dataset;                  /* Dataset ID */
+    hid_t mem_space, file_space;    /* Dataspaces for memory and the file */
+    uint8 *buf;                     /* Buffer for data */
+    hsize_t start[3];               /* Start of hyperslab */
+    hsize_t stride[3];              /* Stride for hyperslab */
+    hsize_t count[3];               /* Hyperslab block count in each dimension */
+    hsize_t block[3];               /* Hyperslab block size in each dimension */
+    hssize_t offset[3];             /* Selection offset */
+    hsize_t curr_dims[3]={13,14,15};   /* Dimensions of the dataset */
+
+    /* Create file */
+    file = H5Fcreate("example4.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for dataset in the file */
+    /* Selection for dataspace defaults to entire space */
+    file_space=H5Screate(H5S_SIMPLE);
+
+    /* Set the extent & type of the dataset's dataspace */
+    H5Sset_extent_simple(file_space,3,curr_dims,curr_dims);
+
+    /* Build up the selection with a series of hyperslab selections */
+    start={0,2,4};            /* Again, this won't compile.. :-) */
+    stride={1,1,1};
+    count={6,5,8};
+    block={1,1,1};
+    
+    /* Set the first selection, union the rest in */
+    H5Sselect_hyperslab(file_space,H5S_SELECT_SET,start,stride,count,block);
+
+    /* initialize the second hyperslab */
+    start={10,9,1};            /* Again, this won't compile.. :-) */
+    stride={1,1,1};
+    count={2,3,10};
+    block={1,1,1};
+
+    /* Union the second hyperslab into the file dataspace's selection */
+    H5Sselect_hyperslab(file_space,H5S_SELECT_UNION,start,stride,count,block);
+
+    /* initialize the third hyperslab */
+    start={3,10,5};            /* Again, this won't compile.. :-) */
+    stride={1,1,1};
+    count={8,2,6};
+    block={1,1,1};
+
+    /* Union the final hyperslab into the file dataspace's selection */
+    H5Sselect_hyperslab(file_space,H5S_SELECT_UNION,start,stride,count,block);
+
+    /* Create the dataspace for the dataset in memory */
+    /* Selection for dataspace defaults to entire space */
+    mem_space=H5Screate(H5S_SIMPLE);
+
+    /* Set the extent & type of the memory dataspace */
+    curr_dims={23,15,18};           /* This won't compile either :-) */
+    H5Sset_extent_simple(mem_space,3,curr_dims,curr_dims);
+
+    /* Copy the selection from the file dataspace */
+    H5Sselect_op(mem_space,H5S_SELECT_COPY,file_space);
+
+    /* Adjust the offset of the selection in the memory dataspace */
+    offset={1,1,1};
+    H5Soffset_simple(mem_space,offset);
+
+    /* Create the dataset on disk */
+    dataset=H5Dcreate(file,"Dataset",H5T_NATIVE_UINT8,file_space,H5P_DEFAULT);
+
+    /* Write the hyperslab to the file */
+    H5Dwrite(dataset,H5T_NATIVE_UINT8,mem_space,file_space,H5P_DEFAULT,buf);
+
+    /* Close dataspaces */
+    H5Sclose(mem_space);
+    H5Sclose(file_space);
+
+    /* Close dataset & file */
+    H5Dclose(dataset);
+    H5Fclose(file);
+}
+
+
+Example 5: Same as example 1 (create a simple fixed size 3-D dataspace in memory and on disk and
+    copy the entire dataset to disk), except that the selection order is changed
+    for the memory dataspace, to change between FORTRAN and C array ordering.
+
+{
+    hid_t file;                     /* File ID */
+    hid_t dataset;                  /* Dataset ID */
+    hid_t mem_space, file_space;    /* Dataspaces for memory and the file */
+    uint8 *buf;                     /* Buffer for data */
+    hsize_t order[3];               /* Dimension ordering for selection */
+    hsize_t curr_dims[3]={3,4,5};   /* Dimensions of the dataset */
+
+    /* Create file */
+    file = H5Fcreate("example5.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for dataset in the file */
+    /* Selection for dataspace defaults to entire space and C array order */
+    file_space=H5Screate(H5S_SIMPLE);
+
+    /* Set the extent & type of the dataset's dataspace */
+    H5Sset_extent_simple(file_space,3,curr_dims,curr_dims);
+
+    /* Create the dataspace for the dataset in memory */
+    /* Selection for dataspace defaults to entire space and C array order */
+    mem_space=H5Screate(H5S_SIMPLE);
+
+    /* Set the extent & type of the memory dataspace */
+    H5Sset_extent_simple(mem_space,3,curr_dims,curr_dims);
+
+    /* Change selection ordering to FORTRAN order for memory dataspace */
+    order={0,1,2};
+    H5Sselect_order(mem_space,order);
+
+    /* Create the dataset on disk */
+    dataset=H5Dcreate(file,"Dataset",H5T_NATIVE_UINT8,file_space,H5P_DEFAULT);
+
+    /* Write the dataset to the file */
+    H5Dwrite(dataset,H5T_NATIVE_UINT8,mem_space,file_space,H5P_DEFAULT,buf);
+
+    /* Close dataspaces */
+    H5Sclose(mem_space);
+    H5Sclose(file_space);
+
+    /* Close dataset & file */
+    H5Dclose(dataset);
+    H5Fclose(file);
+}
+
+
+Example 6:  Create a stored dataspace on disk and use the H5Ssubspace function
+    create a dataspace located within that space.
+
+{
+    hid_t file;                     /* File ID */
+    hid_t space1, space2;           /* Dataspace IDs */
+    hsize_t start[3];               /* Start of hyperslab */
+    hsize_t count[3];               /* Hyperslab block count in each dimension */
+    hsize_t curr_dims[3]={13,14,15};/* Dimensions of the dataset */
+
+    /* Create file */
+    file = H5Fcreate("example6.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace #1 */
+    space1=H5Screate(H5S_SIMPLE);
+
+    /* Set the extent & type of dataspace #1 */
+    H5Sset_extent_simple(space1,3,curr_dims,curr_dims);
+
+    /* Store dataspace #1 on disk */
+    H5Scommit(file,"/Dataspaces/Dataspace #1",space1);
+
+    /* Select a contiguous hyperslab in dataspace #1 to create dataspace #2 with */
+    start={0,2,4};
+    count={6,5,8};
+    
+    /* 
+     *  Use stride and block set to NULL to get contiguous, single element sized
+     * hyperslab.  The stride and block parameters could also be set to all
+     * 1's, but this is simpler and easier.
+     */
+    H5Sselect_hyperslab(space1,H5S_SELECT_SET,start,NULL,count,NULL);
+
+    /* Create dataspace #2 as a dataspace located within dataspace #1 */
+    space2=H5Ssubspace(space1);
+
+    /* Store dataspace #2 on disk also */
+    H5Scommit(file,"/Dataspaces/Dataspace #2",space2);
+
+    /* 
+     * space1 & space2 can be used to create datasets, etc.  Any datasets
+     * created with space2 can have their dataspace queried to find the parent
+     * dataspace and the location within the parent dataspace
+     */
+
+    /* Close dataspaces */
+    H5Sclose(space1);
+    H5Sclose(space2);
+
+    /* Close file */
+    H5Fclose(file);
+}

Added: packages/hdf5/branches/upstream/current/doc/html/hdf2.jpg
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/hdf2.jpg
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/index.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/index.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/index.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,287 @@
+<html>
+  <head>
+
+<!--
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+  * 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. *
+  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ -->
+
+<link href="ed_styles/RMelect.css" rel="stylesheet" type="text/css">
+    <title>
+      HDF5 - The Next Generation of the HDF library & tools
+    </title>
+  </head>
+
+<BODY BGCOLOR="#ffffff">
+
+<!-- BEGIN MAIN BODY -->
+
+<!--
+<img border=0 src="NCSAfooterlogo.gif" width=78 height=27 alt="NCSA">
+-->
+
+<center>
+<br>
+<table border=0 width="90%">
+<tr><td width=92>
+<A HREF="http://hdf.ncsa.uiuc.edu"><img src="hdf2.jpg" border=0 alt="HDF Logo" align=left></A> 
+</td><td>
+<h1>HDF5 - A New Generation of HDF <br><font size=-1>The Hierarchical Data Format</font></h1>
+<hr>
+</td></tr>
+<table>
+</center>
+
+<CENTER>
+
+<table border=0 width=90%>
+<tr><td rowspan=4 bgcolor="#BBFFFF" valign=top align=left width=35%>
+    <center><h3>HDF Links at NCSA</h3></center>
+    <dl>
+    <dt><a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a>
+    <ul>
+    <li>Email to HDF Technical Support 
+    </ul>
+    <p>
+    <dt><A HREF="http://hdf.ncsa.uiuc.edu">HDF Home Page</A>
+    <p>
+   <!--
+    <dt><A HREF="http://hdf.ncsa.uiuc.edu/HDF5">The HDF5 Home Page</A>
+    <dt><A HREF="http://hdf.ncsa.uiuc.edu/products.html">HDF Products</A>
+   -->
+    <dt><A HREF="http://hdf.ncsa.uiuc.edu/newsletters.html">HDF Newsletters</A>
+    <ul>
+    <li>News about HDF and HDF5
+    </ul>
+    <p>
+    <dt><A HREF="http://hdf.ncsa.uiuc.edu/register5.html">HDF5 FTP Archives</A>
+    <ul>
+    <li>HDF5 source code archives
+    </ul>
+    <p>
+    <dt><A HREF="http://hdf.ncsa.uiuc.edu/HDF5/papers/index.html">HDF5 Overview, Papers, etc.</A>
+    <ul>
+    <li>Overview of HDF5 library and development effort (slide show)
+    <li>Other HDF5-related papers, presentations, and RFCs
+    </ul>
+    <p>
+    <dt><a href="http://hdf.ncsa.uiuc.edu/HDF5/hdf5_hl/" 
+        target="ExtWin">High Level HDF5 APIs</a>
+    <ul>
+    <li>High level APIs for easier HDF5 application development
+    <li>Image, Table, and HDF5 Lite
+    </ul>
+    <p>
+    <dt><a href="http://hdf.ncsa.uiuc.edu/HDF5/PHDF5/" 
+        target="ExtWin">Parallel HDF5</a>
+    <ul>
+    <li>HDF5 in parallel computing environments
+    <li>Installation, tutorial, Q&amp;A, design notes
+    </ul>
+    <p>
+    <dt><a href="http://hdf.ncsa.uiuc.edu/HDF5/XML/" target="ExtWin">XML and HDF5</a>
+    <ul>
+    <li>XML tools and standard XML DTD for HDF5 
+    </ul>
+    <p>
+    <dt><A HREF="http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/">Printer-friendly Docs</A>
+    <ul>
+    <li>PDF versions of selected HDF5 documents
+        will be available from the HDF5 website 
+        approximately one week after each release.
+    </ul>
+    <p>
+    <dt><A HREF="http://hdf.ncsa.uiuc.edu/HDF5/doc_dev_snapshot/index.html">HDF5 Doc Development</A>
+    <ul>
+    <li>Snapshots of future releases
+    <li>Related document sets not part of standard release 
+    <li>Errata, bugfixes, and updates for this release (if available)
+    </ul>
+    <p>
+    </dl>
+</td><td bgcolor="#FFFFFF" width=4%>
+</td><td bgcolor="#BBFFFF" valign=top align=left width=61%>
+    <center>
+    <h3>HDF5 User Documentation<br>Release 1.6.5, November 2005</h3>
+    </center>
+<dl>
+<dt><A HREF="H5.intro.html">An Introduction to HDF5</A> 
+    <ul>
+    <li>An overview of design goals behind the HDF5 library and file format
+    <li>An introduction to HDF5 programming 
+    </ul>
+
+<dt><A HREF="http://hdf.ncsa.uiuc.edu/HDF5/doc/Tutor/index.html" 
+             target="ExternalT">HDF5 Tutorial</a> 
+    <ul>
+    <li>A tutorial introduction to HDF5 
+        <br>
+        <i><small>(Served from the HDF5 website at NCSA)</small></i>
+    </ul>
+
+<dt><A HREF="http://hdf.ncsa.uiuc.edu/HDF5/doc/UG/">HDF5 User's Guide</A> 
+    <ul>
+    <li>A new user's guide, first published in the HDF5 Release 1.6.x series
+        <br>
+        <i><small>(Served from the HDF5 website at NCSA)</small></i>
+    <li>The <A HREF="H5.user.html">HDF5 Release 1.4.5 User's Guide</A> 
+        remains available, though it has not been updated 
+	for the current release
+    </ul>
+<dt><A HREF="RM_H5Front.html">HDF5 Reference Manuals</A> 
+    <ul>
+    <li>Complete reference manuals for the HDF5 APIs
+    <li><A HREF="RM_H5Front.html">C APIs</A>, 
+        HDF5&rsquo;s &ldquo;native language&rdquo;
+    <li><a href="http://hdf.ncsa.uiuc.edu/HDF5/hdf5_hl/doc/index.html" 
+        target="ExtWin">High level C APIs</a>: Image, Table, and HDF5 Lite
+        <br>
+        <i><small>(Served from the HDF5 website at NCSA)</small></i>
+    <li><A HREF="RM_H5Front.html#F90andCPPlus">Fortran90 APIs</A>
+    <li><A HREF="cpplus_RM/index.html" target="CppExternal">C++ APIs</a>
+    <li><A href="http://hdf.ncsa.uiuc.edu/hdf-java-html/JNI/jhi5/index.html" 
+        target="ExtWin">JHI5</A>, the Java HDF5 Interface
+    </ul>
+    </ul>
+<dt>HDF5 and &ldquo;Foreign Languages&rdquo;
+    <ul>
+    <li>Fortran90 <A HREF="fortran/F90UserNotes.html">User's Notes</A>, 
+        <A HREF="fortran/F90Flags.html">Flags and Datatypes</A>, and
+        <A HREF="RM_H5Front.html#F90andCPPlus">Reference Manual</A> 
+    <li><A HREF="cpplus_RM/index.html" target="CppExternal">
+                    C++ Reference Manual</A>
+    <li><A href="http://hdf.ncsa.uiuc.edu/hdf-java-html/" 
+        target="ExtWin">Java products</A> and the 
+        <A href="http://hdf.ncsa.uiuc.edu/hdf-java-html/JNI/jhi5/index.html" 
+        target="ExtWin">Java HDF5 Interface</A>
+        <br>
+        <i><small>(Served from the HDF5 website at NCSA)</small></i>
+    </ul>
+
+<dt><A HREF="Glossary.html">HDF5 Glossary</A> 
+    <ul>
+    <li>A glossary of terms as they are used in HDF5 
+    </ul>
+<dt><A HREF="ADGuide.html">HDF5 Application Developer's Guide</A> 
+    <ul>
+    <li>Standards definitions and development guidelines 
+    <li><A HREF="ADGuide/Changes.html">Changes in the HDF5 Library</A> 
+        since the last release
+    </ul>
+</dl>
+</td></tr>
+
+<!-- Reinstate this entry when either
+  -- XML is restored or
+  -- PS and PDF files are incorporated with the release
+
+<tr><td bgcolor="#FFFFFF">
+</td>
+<td bgcolor="#BBFFFF" valign=top align=left>
+<dl>
+    <li><i>XML DTD documentation is not yet available with this release.</i>
+    <li><i>New PDF/PS versions of the doc set will be available with Release 1.4.</i>
+</dl>
+</td>
+</tr>
+
+-->
+<!-- Reinstate this entry when XML is brought into DevBranch
+
+<tr><td bgcolor="#FFFFFF">
+</td><td bgcolor="#BBFFFF" valign=top align=left>
+<dl>
+    <dt><a href="XML_DTD/DesignNotes.html">The XML DTD for HDF5: Design Notes</a>
+    <ul>
+    <li>Design notes and use cases
+    </ul>
+</dl>
+</td></tr>
+
+-->
+<tr>
+<tr><td bgcolor="#FFFFFF">
+</td><td bgcolor="#BBFFFF" valign=top align=left>
+<center><h3>HDF5 Tools</h3></center>
+<dl>
+<dt><A HREF="Tools.html">HDF5 Tools</a> 
+    <ul>
+    <li>HDF5 tools, including Java-based tools
+    <li><code>HDFView</code>, <code>h5dump</code>, 
+        <code>h5ls</code>, <code>h5toh4</code>, etc.
+    </ul>
+</dl>
+</td></tr>
+
+
+<tr><td bgcolor="#FFFFFF">
+</td><td bgcolor="#BBFFFF" valign=top align=left>
+    <center><h3>HDF5 Library Development Documentation</h3></center>
+<dl>
+<dt><A HREF="H5.format.html">HDF5 File Format Specification</A>
+    <ul>
+    <li>The complete specification of the HDF5 file format
+    </ul>
+<dt><A HREF="http:/hdf.ncsa.uiuc.edu/HDF5/doc_resource/cpplus/cpp_Design_040912.pdf">HDF5 C++ API Design Specification</A>
+    <ul>
+    <li>First draft of the design specification for the HDF5 C++ APIs
+        <br>
+        <i><small>(Served from the HDF5 website at NCSA)</small></i>
+    </ul>
+<dt><A HREF="TechNotes.html">HDF5 Technical Notes</A>
+    <ul>
+    <li>Technical notes for HDF5 library and driver developers
+    </ul>
+ 
+</dl>
+</td></tr>
+<tr><td bgcolor="#BBFFFF" valign=top align=left>
+<center><i><small>(Internet links)</small></i></center>
+</td><td bgcolor="#FFFFFF">
+</td><td bgcolor="#BBFFFF" valign=top align=left>
+<center><i><small>(Local links, unless otherwise noted)</small></i></center>
+</table>
+</CENTER>   
+
+
+<!-- BEGIN FOOTER INFO -->
+
+<P><hr>
+<font face="arial,helvetica" size="-1">
+  <a href="http://www.ncsa.uiuc.edu/">
+     <img border=0 src="NCSAfooterlogo.gif" width=78 height=27 alt="NCSA Logo"><br>
+  The National Center for Supercomputing Applications</A><br>
+  <a href="http://www.uiuc.edu/">University of Illinois
+    at Urbana-Champaign</a>
+
+<p>
+<a href="mailto:hdfhelp at ncsa.uiuc.edu">HDF Help Desk</a>
+<br>
+<!-- hhmts start -->
+Last modified: 31 October 2005
+<!-- hhmts end -->
+
+<br>
+Describes HDF5 Release 1.6.5, November 2005
+
+<p>
+Copyright by the Board of Trustees of the University of Illinois.  
+<br>
+All rights reserved.
+See <a href="Copyright.html">full copyright notice</a>.
+
+</font>
+
+</body>
+</html>

Added: packages/hdf5/branches/upstream/current/doc/html/ph5design.html
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ph5design.html	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ph5design.html	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,77 @@
+<HTML>
+<HEAD>
+<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=windows-1252">
+<META NAME="Generator" CONTENT="Microsoft Word 97">
+<TITLE>new</TITLE>
+<META NAME="Template" CONTENT="C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\html.dot">
+</HEAD>
+<BODY LINK="#0000ff" VLINK="#800080">
+
+<B><FONT SIZE=6><P ALIGN="CENTER">Parallel HDF5 Design</P>
+</B></FONT><P ALIGN="CENTER">&nbsp;</P>
+<H1>1. Design Overview</H1>
+<P>In this section, I first describe the function requirements of the Parallel HDF5 (PHDF5) software and the assumed system requirements. Section 2 describes the programming model of the PHDF5 interface. Section 3 shows an example PHDF5 program. </P>
+<H2>1.1. Function requirements</H2>
+
+<UL>
+<LI>An API to support parallel file access for HDF5 files in a message passing environment. </LI>
+<LI>Fast parallel I/O to large datasets through standard parallel I/O interface.</LI>
+<LI>Processes are required to do collective API calls only when structural changes are needed for the HDF5 file. </LI>
+<LI>Each process may do independent I/O requests to different datasets in the same or different HDF5 files. </LI>
+<LI>Supports collective I/O requests for datasets (to be included in next version). </LI>
+<LI>Minimize diviation from HDF5 interface.</LI>
+</UL>
+
+<H2>1.2. System requirements</H2>
+
+<UL>
+<LI>C language interface is the initial requirement. Fortran77 interface will be added later. </LI>
+<LI>Use Message Passing Interface (MPI) for interprocess communication. </LI>
+<LI>Use MPI-IO calls for parallel file accesses. </LI>
+<LI>Initial platforms—IBM SP2, Intel TFLOPS and SGI Origin 2000. </LI></UL>
+
+<H1>2. Programming Model</H1>
+<P>HDF5 uses optional access template object to control the file access
+mechanism.  The general model in accessing an HDF5 file in parallel
+contains the following steps: </P>
+
+<UL>
+<LI>Setup access template</LI>
+<LI>File open </LI>
+<LI>Dataset open </LI>
+<LI>Dataset data access (zero or more) </LI>
+<LI>Dataset close </LI>
+<LI>File close </LI></UL>
+
+<H2>2.1. Setup access template</H2>
+<P>Each processes of the MPI communicator creates an access template and sets
+it up with MPI parallel access information (communicator, info object,
+access-mode).  </P>
+<H2>2.1. File open</H2>
+<P>All processes of the MPI communicator open an HDF5 file by a collective call
+(H5FCreate or H5Fopen) with the access template. </P>
+<H2>2.2. Dataset open</H2>
+<P>All processes of the MPI communicator open a dataset by a collective call (H5Dcreate or H5Dopen).&nbsp; This version supports only collective dataset open.&nbsp; Future version may support datasets open by a subset of the processes that have opened the file. </P>
+<H2>2.3. Dataset access</H2>
+<H3>2.3.1. Independent dataset access</H3>
+<P>Each process may do independent and arbitrary number of data I/O access by independent calls (H5Dread or H5Dwrite) to the dataset with the transfer template set for independent access.&nbsp; (The default transfer mode is independent transfer).&nbsp; If the dataset is an unlimited dimension one and if the H5Dwrite is writing data beyond the current dimension size of the dataset, all processes that have opened the dataset must make a collective call (H5Dallocate) to allocate more space for the dataset BEFORE the independent H5Dwrite call. </P>
+<H3>2.3.2. Collective dataset access</H3>
+<P>All processes that have opened the dataset may do collective data I/O access by collective calls (H5Dread or H5Dwrite) to the dataset with the transfer template set for collective access.&nbsp; Pre-allocation (H5Dallocate) is not needed for unlimited dimension datasets since the H5Dallocate call, if needed, is done internally by the collective data access call. </P>
+<H3>2.3.3. Dataset attributes access</H3>
+<P>Changes to attributes can only occur at the <I>"main process" </I>(process 0).&nbsp; Read only access to attributes can occur independent in each process that has opened the dataset.&nbsp; (API to be defined later.) <BR>
+&nbsp; </P>
+<H2>2.4. Dataset close</H2>
+<P>All processes that have opened the dataset must close the dataset by a collective call (H5Dclose). </P>
+<H2>2.5. File close</H2>
+<P>All processes that have opened the file must close the file by a collective call (H5Fclose). <BR>
+&nbsp; </P>
+<H1>3. Parallel HDF5 Example</H1>
+<PRE>
+<CODE>
+</CODE><A HREF="ph5example.c">Example code</A>
+</PRE>
+<P><HR></P>
+<P>Send comments to <BR>
+<A HREF="mailto:hdfparallel at ncsa.uiuc.edu">hdfparallel at ncsa.uiuc.edu</A> </P>
+<H6>Last Modified: Feb 16, 1998</H6></BODY>
+</HTML>

Added: packages/hdf5/branches/upstream/current/doc/html/ph5example.c
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ph5example.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ph5example.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1018 @@
+/*
+ * Example of using the parallel HDF5 library to access datasets.
+ * Last revised: April 24, 2001.
+ *
+ * This program contains two parts.  In the first part, the mpi processes
+ * collectively create a new parallel HDF5 file and create two fixed
+ * dimension datasets in it.  Then each process writes a hyperslab into
+ * each dataset in an independent mode.  All processes collectively
+ * close the datasets and the file.
+ * In the second part, the processes collectively open the created file
+ * and the two datasets in it.  Then each process reads a hyperslab from
+ * each dataset in an independent mode and prints them out.
+ * All processes collectively close the datasets and the file.
+ */
+
+#include <assert.h>
+#include <hdf5.h>
+
+#ifdef H5_HAVE_PARALLEL
+/* Temporary source code */
+#define FAIL -1
+/* temporary code end */
+
+/* Define some handy debugging shorthands, routines, ... */
+/* debugging tools */
+#define MESG(x)\
+	if (verbose) printf("%s\n", x);\
+
+#define MPI_BANNER(mesg)\
+    {printf("--------------------------------\n");\
+    printf("Proc %d: ", mpi_rank); \
+    printf("*** %s\n", mesg);\
+    printf("--------------------------------\n");}
+
+#define SYNC(comm)\
+    {MPI_BANNER("doing a SYNC"); MPI_Barrier(comm); MPI_BANNER("SYNC DONE");}
+/* End of Define some handy debugging shorthands, routines, ... */
+
+/* Constants definitions */
+/* 24 is a multiple of 2, 3, 4, 6, 8, 12.  Neat for parallel tests. */
+#define SPACE1_DIM1	24
+#define SPACE1_DIM2	24
+#define SPACE1_RANK	2
+#define DATASETNAME1	"Data1"
+#define DATASETNAME2	"Data2"
+#define DATASETNAME3	"Data3"
+/* hyperslab layout styles */
+#define BYROW		1	/* divide into slabs of rows */
+#define BYCOL		2	/* divide into blocks of columns */
+
+
+/* dataset data type.  Int's can be easily octo dumped. */
+typedef int DATATYPE;
+
+/* global variables */
+int nerrors = 0;				/* errors count */
+
+int mpi_size, mpi_rank;				/* mpi variables */
+
+/* option flags */
+int verbose = 0;			/* verbose, default as no. */
+int doread=1;				/* read test */
+int dowrite=1;				/* write test */
+
+
+
+/*
+ * Setup the dimensions of the hyperslab.
+ * Two modes--by rows or by columns.
+ * Assume dimension rank is 2.
+ */
+void
+slab_set(hsize_t start[], hsize_t count[], hsize_t stride[], int mode)
+{
+    switch (mode){
+    case BYROW:
+	/* Each process takes a slabs of rows. */
+	stride[0] = 1;
+	stride[1] = 1;
+	count[0] = SPACE1_DIM1/mpi_size;
+	count[1] = SPACE1_DIM2;
+	start[0] = mpi_rank*count[0];
+	start[1] = 0;
+	break;
+    case BYCOL:
+	/* Each process takes a block of columns. */
+	stride[0] = 1;
+	stride[1] = 1;
+	count[0] = SPACE1_DIM1;
+	count[1] = SPACE1_DIM2/mpi_size;
+	start[0] = 0;
+	start[1] = mpi_rank*count[1];
+	break;
+    default:
+	/* Unknown mode.  Set it to cover the whole dataset. */
+	printf("unknown slab_set mode (%d)\n", mode);
+	stride[0] = 1;
+	stride[1] = 1;
+	count[0] = SPACE1_DIM1;
+	count[1] = SPACE1_DIM2;
+	start[0] = 0;
+	start[1] = 0;
+	break;
+    }
+}
+
+
+/*
+ * Fill the dataset with trivial data for testing.
+ * Assume dimension rank is 2 and data is stored contiguous.
+ */
+void
+dataset_fill(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE * dataset)
+{
+    DATATYPE *dataptr = dataset;
+    int i, j;
+
+    /* put some trivial data in the data_array */
+    for (i=0; i < count[0]; i++){
+	for (j=0; j < count[1]; j++){
+	    *dataptr++ = (i*stride[0]+start[0])*100 + (j*stride[1]+start[1]+1);
+	}
+    }
+}
+
+
+/*
+ * Print the content of the dataset.
+ */
+void dataset_print(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE * dataset)
+{
+    DATATYPE *dataptr = dataset;
+    int i, j;
+
+    /* print the slab read */
+    for (i=0; i < count[0]; i++){
+	printf("Row %d: ", (int)(i*stride[0]+start[0]));
+	for (j=0; j < count[1]; j++){
+	    printf("%03d ", *dataptr++);
+	}
+	printf("\n");
+    }
+}
+
+
+/*
+ * Print the content of the dataset.
+ */
+int dataset_vrfy(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE *dataset, DATATYPE *original)
+{
+#define MAX_ERR_REPORT	10		/* Maximum number of errors reported */
+    DATATYPE *dataptr = dataset;
+    DATATYPE *originptr = original;
+
+    int i, j, nerrors;
+
+    /* print it if verbose */
+    if (verbose)
+	dataset_print(start, count, stride, dataset);
+
+    nerrors = 0;
+    for (i=0; i < count[0]; i++){
+	for (j=0; j < count[1]; j++){
+	    if (*dataset++ != *original++){
+		nerrors++;
+		if (nerrors <= MAX_ERR_REPORT){
+		    printf("Dataset Verify failed at [%d][%d](row %d, col %d): expect %d, got %d\n",
+			i, j,
+			(int)(i*stride[0]+start[0]), (int)(j*stride[1]+start[1]),
+			*(dataset-1), *(original-1));
+		}
+	    }
+	}
+    }
+    if (nerrors > MAX_ERR_REPORT)
+	printf("[more errors ...]\n");
+    if (nerrors)
+	printf("%d errors found in dataset_vrfy\n", nerrors);
+    return(nerrors);
+}
+
+
+/*
+ * Example of using the parallel HDF5 library to create two datasets
+ * in one HDF5 files with parallel MPIO access support.
+ * The Datasets are of sizes (number-of-mpi-processes x DIM1) x DIM2.
+ * Each process controls only a slab of size DIM1 x DIM2 within each
+ * dataset.
+ */
+
+void
+phdf5writeInd(char *filename)
+{
+    hid_t fid1, fid2;		/* HDF5 file IDs */
+    hid_t acc_tpl1;		/* File access templates */
+    hid_t sid1,sid2;   		/* Dataspace ID */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    int rank = SPACE1_RANK; 	/* Logical rank of dataspace */
+    hsize_t dims1[SPACE1_RANK] =
+	{SPACE1_DIM1,SPACE1_DIM2};	/* dataspace dim sizes */
+    hsize_t dimslocal1[SPACE1_RANK] =
+	{SPACE1_DIM1,SPACE1_DIM2}; 	/* local dataspace dim sizes */
+    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */
+
+    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
+    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+    int   i, j;
+    int mpi_size, mpi_rank;
+    char *fname;
+    int mrc;			/* mpi return code */
+    
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    if (verbose)
+	printf("Independent write test on file %s\n", filename);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+    /* -------------------
+     * START AN HDF5 FILE 
+     * -------------------*/
+    /* setup file access template with parallel IO access. */
+    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
+    assert(acc_tpl1 != FAIL);
+    MESG("H5Pcreate access succeed");
+    /* set Parallel access with communicator */
+    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);     
+    assert(ret != FAIL);
+    MESG("H5Pset_fapl_mpio succeed");
+
+    /* create the file collectively */
+    fid1=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl1);
+    assert(fid1 != FAIL);
+    MESG("H5Fcreate succeed");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl1);
+    assert(ret != FAIL);
+
+
+    /* --------------------------
+     * Define the dimensions of the overall datasets
+     * and the slabs local to the MPI process.
+     * ------------------------- */
+    /* setup dimensionality object */
+    sid1 = H5Screate_simple (SPACE1_RANK, dims1, NULL);
+    assert (sid1 != FAIL);
+    MESG("H5Screate_simple succeed");
+
+    
+    /* create a dataset collectively */
+    dataset1 = H5Dcreate(fid1, DATASETNAME1, H5T_NATIVE_INT, sid1,
+			H5P_DEFAULT);
+    assert(dataset1 != FAIL);
+    MESG("H5Dcreate succeed");
+
+    /* create another dataset collectively */
+    dataset2 = H5Dcreate(fid1, DATASETNAME2, H5T_NATIVE_INT, sid1,
+			H5P_DEFAULT);
+    assert(dataset2 != FAIL);
+    MESG("H5Dcreate succeed");
+
+
+
+    /* set up dimensions of the slab this process accesses */
+    start[0] = mpi_rank*SPACE1_DIM1/mpi_size;
+    start[1] = 0;
+    count[0] = SPACE1_DIM1/mpi_size;
+    count[1] = SPACE1_DIM2;
+    stride[0] = 1;
+    stride[1] =1;
+if (verbose)
+    printf("start[]=(%d,%d), count[]=(%d,%d), total datapoints=%d\n",
+	start[0], start[1], count[0], count[1], count[0]*count[1]);
+
+    /* put some trivial data in the data_array */
+    dataset_fill(start, count, stride, &data_array1[0][0]);
+    MESG("data_array initialized");
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);				    
+    assert(file_dataspace != FAIL);					    
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* write data independently */
+    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,	    
+	    H5P_DEFAULT, data_array1);					    
+    assert(ret != FAIL);
+    MESG("H5Dwrite succeed");
+
+    /* write data independently */
+    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,	    
+	    H5P_DEFAULT, data_array1);					    
+    assert(ret != FAIL);
+    MESG("H5Dwrite succeed");
+
+    /* release dataspace ID */
+    H5Sclose(file_dataspace);
+
+    /* close dataset collectively */					    
+    ret=H5Dclose(dataset1);
+    assert(ret != FAIL);
+    MESG("H5Dclose1 succeed");
+    ret=H5Dclose(dataset2);
+    assert(ret != FAIL);
+    MESG("H5Dclose2 succeed");
+
+    /* release all IDs created */
+    H5Sclose(sid1);
+
+    /* close the file collectively */					    
+    H5Fclose(fid1);							    
+}
+
+/* Example of using the parallel HDF5 library to read a dataset */
+void
+phdf5readInd(char *filename)
+{
+    hid_t fid1, fid2;		/* HDF5 file IDs */
+    hid_t acc_tpl1;		/* File access templates */
+    hid_t sid1,sid2;   		/* Dataspace ID */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    int rank = SPACE1_RANK; 	/* Logical rank of dataspace */
+    hsize_t dims1[] = {SPACE1_DIM1,SPACE1_DIM2};   	/* dataspace dim sizes */
+    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */
+    DATATYPE data_origin1[SPACE1_DIM1][SPACE1_DIM2];	/* expected data buffer */
+
+    hsize_t   start[SPACE1_RANK];			/* for hyperslab setting */
+    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+    int   i, j;
+    int mpi_size, mpi_rank;
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    if (verbose)
+	printf("Independent read test on file %s\n", filename);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+
+    /* setup file access template */
+    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
+    assert(acc_tpl1 != FAIL);
+    /* set Parallel access with communicator */
+    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);     
+    assert(ret != FAIL);
+
+
+    /* open the file collectively */
+    fid1=H5Fopen(filename,H5F_ACC_RDWR,acc_tpl1);
+    assert(fid1 != FAIL);
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl1);
+    assert(ret != FAIL);
+
+    /* open the dataset1 collectively */
+    dataset1 = H5Dopen(fid1, DATASETNAME1);
+    assert(dataset1 != FAIL);
+
+    /* open another dataset collectively */
+    dataset2 = H5Dopen(fid1, DATASETNAME1);
+    assert(dataset2 != FAIL);
+
+
+    /* set up dimensions of the slab this process accesses */
+    start[0] = mpi_rank*SPACE1_DIM1/mpi_size;
+    start[1] = 0;
+    count[0] = SPACE1_DIM1/mpi_size;
+    count[1] = SPACE1_DIM2;
+    stride[0] = 1;
+    stride[1] =1;
+if (verbose)
+    printf("start[]=(%d,%d), count[]=(%d,%d), total datapoints=%d\n",
+    start[0], start[1], count[0], count[1], count[0]*count[1]);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    assert(file_dataspace != FAIL);
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill dataset with test data */
+    dataset_fill(start, count, stride, &data_origin1[0][0]);
+
+    /* read data independently */
+    ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    assert(ret != FAIL);
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
+    assert(ret != FAIL);
+
+    /* read data independently */
+    ret = H5Dread(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    assert(ret != FAIL);
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
+    assert(ret == 0);
+
+    /* close dataset collectively */
+    ret=H5Dclose(dataset1);
+    assert(ret != FAIL);
+    ret=H5Dclose(dataset2);
+    assert(ret != FAIL);
+
+    /* release all IDs created */
+    H5Sclose(file_dataspace);
+
+    /* close the file collectively */
+    H5Fclose(fid1);
+}
+
+
+/*
+ * Example of using the parallel HDF5 library to create two datasets
+ * in one HDF5 file with collective parallel access support.
+ * The Datasets are of sizes (number-of-mpi-processes x DIM1) x DIM2.
+ * Each process controls only a slab of size DIM1 x DIM2 within each
+ * dataset. [Note: not so yet.  Datasets are of sizes DIM1xDIM2 and
+ * each process controls a hyperslab within.]
+ */
+
+void
+phdf5writeAll(char *filename)
+{
+    hid_t fid1, fid2;		/* HDF5 file IDs */
+    hid_t acc_tpl1;		/* File access templates */
+    hid_t xfer_plist;		/* Dataset transfer properties list */
+    hid_t sid1,sid2;   		/* Dataspace ID */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    int rank = SPACE1_RANK; 	/* Logical rank of dataspace */
+    hsize_t dims1[SPACE1_RANK] =
+	{SPACE1_DIM1,SPACE1_DIM2};	/* dataspace dim sizes */
+    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */
+
+    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
+    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+    int mpi_size, mpi_rank;
+    
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    if (verbose)
+	printf("Collective write test on file %s\n", filename);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+    /* -------------------
+     * START AN HDF5 FILE 
+     * -------------------*/
+    /* setup file access template with parallel IO access. */
+    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
+    assert(acc_tpl1 != FAIL);
+    MESG("H5Pcreate access succeed");
+    /* set Parallel access with communicator */
+    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);     
+    assert(ret != FAIL);
+    MESG("H5Pset_fapl_mpio succeed");
+
+    /* create the file collectively */
+    fid1=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl1);
+    assert(fid1 != FAIL);
+    MESG("H5Fcreate succeed");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl1);
+    assert(ret != FAIL);
+
+
+    /* --------------------------
+     * Define the dimensions of the overall datasets
+     * and create the dataset
+     * ------------------------- */
+    /* setup dimensionality object */
+    sid1 = H5Screate_simple (SPACE1_RANK, dims1, NULL);
+    assert (sid1 != FAIL);
+    MESG("H5Screate_simple succeed");
+
+    
+    /* create a dataset collectively */
+    dataset1 = H5Dcreate(fid1, DATASETNAME1, H5T_NATIVE_INT, sid1, H5P_DEFAULT);
+    assert(dataset1 != FAIL);
+    MESG("H5Dcreate succeed");
+
+    /* create another dataset collectively */
+    dataset2 = H5Dcreate(fid1, DATASETNAME2, H5T_NATIVE_INT, sid1, H5P_DEFAULT);
+    assert(dataset2 != FAIL);
+    MESG("H5Dcreate 2 succeed");
+
+    /*
+     * Set up dimensions of the slab this process accesses.
+     */
+
+    /* Dataset1: each process takes a block of rows. */
+    slab_set(start, count, stride, BYROW);
+if (verbose)
+    printf("start[]=(%d,%d), count[]=(%d,%d), total datapoints=%d\n",
+	start[0], start[1], count[0], count[1], count[0]*count[1]);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);				    
+    assert(file_dataspace != FAIL);					    
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill the local slab with some trivial data */
+    dataset_fill(start, count, stride, &data_array1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    assert(xfer_plist != FAIL);
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    assert(ret != FAIL);
+    MESG("H5Pcreate xfer succeed");
+
+    /* write data collectively */
+    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);					    
+    assert(ret != FAIL);
+    MESG("H5Dwrite succeed");
+
+    /* release all temporary handles. */
+    /* Could have used them for dataset2 but it is cleaner */
+    /* to create them again.*/
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+    /* Dataset2: each process takes a block of columns. */
+    slab_set(start, count, stride, BYCOL);
+if (verbose)
+    printf("start[]=(%d,%d), count[]=(%d,%d), total datapoints=%d\n",
+	start[0], start[1], count[0], count[1], count[0]*count[1]);
+
+    /* put some trivial data in the data_array */
+    dataset_fill(start, count, stride, &data_array1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);				    
+    assert(file_dataspace != FAIL);					    
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill the local slab with some trivial data */
+    dataset_fill(start, count, stride, &data_array1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    assert(xfer_plist != FAIL);
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    assert(ret != FAIL);
+    MESG("H5Pcreate xfer succeed");
+
+    /* write data independently */
+    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);					    
+    assert(ret != FAIL);
+    MESG("H5Dwrite succeed");
+
+    /* release all temporary handles. */
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+
+    /*
+     * All writes completed.  Close datasets collectively
+     */					    
+    ret=H5Dclose(dataset1);
+    assert(ret != FAIL);
+    MESG("H5Dclose1 succeed");
+    ret=H5Dclose(dataset2);
+    assert(ret != FAIL);
+    MESG("H5Dclose2 succeed");
+
+    /* release all IDs created */
+    H5Sclose(sid1);
+
+    /* close the file collectively */					    
+    H5Fclose(fid1);							    
+}
+
+/*
+ * Example of using the parallel HDF5 library to read two datasets
+ * in one HDF5 file with collective parallel access support.
+ * The Datasets are of sizes (number-of-mpi-processes x DIM1) x DIM2.
+ * Each process controls only a slab of size DIM1 x DIM2 within each
+ * dataset. [Note: not so yet.  Datasets are of sizes DIM1xDIM2 and
+ * each process controls a hyperslab within.]
+ */
+
+void
+phdf5readAll(char *filename)
+{
+    hid_t fid1, fid2;		/* HDF5 file IDs */
+    hid_t acc_tpl1;		/* File access templates */
+    hid_t xfer_plist;		/* Dataset transfer properties list */
+    hid_t sid1,sid2;   		/* Dataspace ID */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    int rank = SPACE1_RANK; 	/* Logical rank of dataspace */
+    hsize_t dims1[] = {SPACE1_DIM1,SPACE1_DIM2};   	/* dataspace dim sizes */
+    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */
+    DATATYPE data_origin1[SPACE1_DIM1][SPACE1_DIM2];	/* expected data buffer */
+
+    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
+    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+    int mpi_size, mpi_rank;
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    if (verbose)
+	printf("Collective read test on file %s\n", filename);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+    /* -------------------
+     * OPEN AN HDF5 FILE 
+     * -------------------*/
+    /* setup file access template with parallel IO access. */
+    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
+    assert(acc_tpl1 != FAIL);
+    MESG("H5Pcreate access succeed");
+    /* set Parallel access with communicator */
+    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);     
+    assert(ret != FAIL);
+    MESG("H5Pset_fapl_mpio succeed");
+
+    /* open the file collectively */
+    fid1=H5Fopen(filename,H5F_ACC_RDWR,acc_tpl1);
+    assert(fid1 != FAIL);
+    MESG("H5Fopen succeed");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl1);
+    assert(ret != FAIL);
+
+
+    /* --------------------------
+     * Open the datasets in it
+     * ------------------------- */
+    /* open the dataset1 collectively */
+    dataset1 = H5Dopen(fid1, DATASETNAME1);
+    assert(dataset1 != FAIL);
+    MESG("H5Dopen succeed");
+
+    /* open another dataset collectively */
+    dataset2 = H5Dopen(fid1, DATASETNAME1);
+    assert(dataset2 != FAIL);
+    MESG("H5Dopen 2 succeed");
+
+    /*
+     * Set up dimensions of the slab this process accesses.
+     */
+
+    /* Dataset1: each process takes a block of columns. */
+    slab_set(start, count, stride, BYCOL);
+if (verbose)
+    printf("start[]=(%d,%d), count[]=(%d,%d), total datapoints=%d\n",
+	start[0], start[1], count[0], count[1], count[0]*count[1]);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);				    
+    assert(file_dataspace != FAIL);					    
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill dataset with test data */
+    dataset_fill(start, count, stride, &data_origin1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    assert(xfer_plist != FAIL);
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    assert(ret != FAIL);
+    MESG("H5Pcreate xfer succeed");
+
+    /* read data collectively */
+    ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);					    
+    assert(ret != FAIL);
+    MESG("H5Dread succeed");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
+    assert(ret != FAIL);
+
+    /* release all temporary handles. */
+    /* Could have used them for dataset2 but it is cleaner */
+    /* to create them again.*/
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+    /* Dataset2: each process takes a block of rows. */
+    slab_set(start, count, stride, BYROW);
+if (verbose)
+    printf("start[]=(%d,%d), count[]=(%d,%d), total datapoints=%d\n",
+	start[0], start[1], count[0], count[1], count[0]*count[1]);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);				    
+    assert(file_dataspace != FAIL);					    
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill dataset with test data */
+    dataset_fill(start, count, stride, &data_origin1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    assert(xfer_plist != FAIL);
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    assert(ret != FAIL);
+    MESG("H5Pcreate xfer succeed");
+
+    /* read data independently */
+    ret = H5Dread(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);					    
+    assert(ret != FAIL);
+    MESG("H5Dread succeed");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
+    assert(ret != FAIL);
+
+    /* release all temporary handles. */
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+
+    /*
+     * All reads completed.  Close datasets collectively
+     */					    
+    ret=H5Dclose(dataset1);
+    assert(ret != FAIL);
+    MESG("H5Dclose1 succeed");
+    ret=H5Dclose(dataset2);
+    assert(ret != FAIL);
+    MESG("H5Dclose2 succeed");
+
+    /* close the file collectively */					    
+    H5Fclose(fid1);							    
+}
+
+/*
+ * test file access by communicator besides COMM_WORLD.
+ * Split COMM_WORLD into two, one (even_comm) contains the original
+ * processes of even ranks.  The other (odd_comm) contains the original
+ * processes of odd ranks.  Processes in even_comm creates a file, then
+ * cloose it, using even_comm.  Processes in old_comm just do a barrier
+ * using odd_comm.  Then they all do a barrier using COMM_WORLD.
+ * If the file creation and cloose does not do correct collective action
+ * according to the communicator argument, the processes will freeze up
+ * sooner or later due to barrier mixed up.
+ */
+void
+test_split_comm_access(char *filenames[])
+{
+    int mpi_size, myrank;
+    MPI_Comm comm;
+    MPI_Info info = MPI_INFO_NULL;
+    int color, mrc;
+    int newrank, newprocs;
+    hid_t fid;			/* file IDs */
+    hid_t acc_tpl;		/* File access properties */
+    herr_t ret;			/* generic return value */
+
+    if (verbose)
+	printf("Independent write test on file %s %s\n",
+	    filenames[0], filenames[1]);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&myrank);
+    color = myrank%2;
+    mrc = MPI_Comm_split (MPI_COMM_WORLD, color, myrank, &comm);
+    assert(mrc==MPI_SUCCESS);
+    MPI_Comm_size(comm,&newprocs);
+    MPI_Comm_rank(comm,&newrank);
+
+    if (color){
+	/* odd-rank processes */
+	mrc = MPI_Barrier(comm);
+	assert(mrc==MPI_SUCCESS);
+    }else{
+	/* even-rank processes */
+	/* setup file access template */
+	acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
+	assert(acc_tpl != FAIL);
+	
+	/* set Parallel access with communicator */
+	ret = H5Pset_fapl_mpio(acc_tpl, comm, info);     
+	assert(ret != FAIL);
+
+	/* create the file collectively */
+	fid=H5Fcreate(filenames[color],H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
+	assert(fid != FAIL);
+	MESG("H5Fcreate succeed");
+
+	/* Release file-access template */
+	ret=H5Pclose(acc_tpl);
+	assert(ret != FAIL);
+
+	ret=H5Fclose(fid);
+	assert(ret != FAIL);
+    }
+    if (myrank == 0){
+	mrc = MPI_File_delete(filenames[color], info);
+	assert(mrc==MPI_SUCCESS);
+    }
+}
+
+/*
+ * Show command usage
+ */
+void
+usage()
+{
+    printf("Usage: testphdf5 [-r] [-w] [-v]\n");
+    printf("\t-r\tno read\n");
+    printf("\t-w\tno write\n");
+    printf("\t-v\tverbose on\n");
+    printf("\tdefault do write then read\n");
+    printf("\n");
+}
+
+
+/*
+ * parse the command line options
+ */
+int
+parse_options(int argc, char **argv){
+    while (--argc){
+	if (**(++argv) != '-'){
+	    break;
+	}else{
+	    switch(*(*argv+1)){
+		case 'r':   doread = 0;
+			    break;
+		case 'w':   dowrite = 0;
+			    break;
+		case 'v':   verbose = 1;
+			    break;
+		default:    usage();
+			    nerrors++;
+			    return(1);
+	    }
+	}
+    }
+    return(0);
+}
+
+
+int
+main(int argc, char **argv)
+{
+    char    *filenames[]={ "ParaEg1.h5f", "ParaEg2.h5f" };
+
+    int mpi_namelen;		
+    char mpi_name[MPI_MAX_PROCESSOR_NAME];
+
+    MPI_Init(&argc,&argv);
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+    MPI_Get_processor_name(mpi_name,&mpi_namelen);
+    /* Make sure datasets can be divided into equal chunks by the processes */
+    if ((SPACE1_DIM1 % mpi_size) || (SPACE1_DIM2 % mpi_size)){
+	printf("DIM1(%d) and DIM2(%d) must be multiples of processes (%d)\n",
+	    SPACE1_DIM1, SPACE1_DIM2, mpi_size);
+	nerrors++;
+	goto finish;
+    }
+
+    if (parse_options(argc, argv) != 0)
+	goto finish;
+
+    if (dowrite){
+	MPI_BANNER("testing PHDF5 dataset using split communicators...");
+	test_split_comm_access(filenames);
+	MPI_BANNER("testing PHDF5 dataset independent write...");
+	phdf5writeInd(filenames[0]);
+	MPI_BANNER("testing PHDF5 dataset collective write...");
+	phdf5writeAll(filenames[1]);
+    }
+    if (doread){
+	MPI_BANNER("testing PHDF5 dataset independent read...");
+	phdf5readInd(filenames[0]);
+	MPI_BANNER("testing PHDF5 dataset collective read...");
+	phdf5readAll(filenames[1]);
+    }
+
+    if (!(dowrite || doread)){
+	usage();
+	nerrors++;
+    }
+
+finish:
+    if (mpi_rank == 0){		/* only process 0 reports */
+	if (nerrors)
+	    printf("***PHDF5 tests detected %d errors***\n", nerrors);
+	else{
+	    printf("===================================\n");
+	    printf("PHDF5 tests finished with no errors\n");
+	    printf("===================================\n");
+	}
+    }
+    MPI_Finalize();
+
+    return(nerrors);
+}
+
+#else /* H5_HAVE_PARALLEL */
+/* dummy program since H5_HAVE_PARALLE is not configured in */
+int
+main()
+{
+printf("No PHDF5 example because parallel is not configured in\n");
+return(0);
+}
+#endif /* H5_HAVE_PARALLEL */

Added: packages/hdf5/branches/upstream/current/doc/html/ph5implement.txt
===================================================================
--- packages/hdf5/branches/upstream/current/doc/html/ph5implement.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/doc/html/ph5implement.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,27 @@
+Release information for parallel HDF5
+-------------------------------------
+
++) Current release supports independent access to fixed dimension datasets
+   only.
+
++) The comm and info arguments of H5Pset_mpi are not used.  All parallel
+   I/O are done via MPI_COMM_WORLD.  Access_mode for H5Pset_mpi can be
+   H5ACC_INDEPENDENT only.
+
++) This release of parallel HDF5 has been tested on IBM SP2 and SGI
+   Origin 2000 systems.  It uses the ROMIO version of MPIO interface
+   for parallel I/O supports.
+
++) Useful URL's.
+   Parallel HDF webpage: "http://hdf.ncsa.uiuc.edu/Parallel_HDF/"
+   ROMIO webpage: "http://www.mcs.anl.gov/home/thakur/romio/"
+
++) Some to-do items for future releases
+      support for Intel Teraflop platform.
+      support for unlimited dimension datasets.
+      support for file access via a communicator besides MPI_COMM_WORLD.
+      support for collective access to datasets.
+      support for independent create/open of datasets.
+
+----
+Last updated: Feb 16, 1998.

Added: packages/hdf5/branches/upstream/current/doc/html/pipe1.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/pipe1.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/pipe2.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/pipe2.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/pipe3.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/pipe3.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/pipe4.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/pipe4.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/pipe5.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/pipe5.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/doc/html/version.gif
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/doc/html/version.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/examples/Attributes.txt
===================================================================
--- packages/hdf5/branches/upstream/current/examples/Attributes.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/Attributes.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,140 @@
+Attribute Examples: 
+
+H5Acreate example: Show how to create an attribute for a dataset and a group
+----------------
+{
+    hid_t file;
+    hid_t group;
+    hid_t dataset;
+    hid_t attr;
+    hid_t dataspace;
+    int32 attr_data;
+    int rank;
+    size_t dimsf[2];
+
+    /* Open the file */
+    file=H5Fopen("example.h5", H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* Describe the size of the array and create the data space */
+    rank=2;
+    dimsf[0] = H5S_UNLIMITED;
+    dimsf[1] = H5S_UNLIMITED;
+    dataspace = H5Screate_simple(rank, dimsf, NULL); 
+
+    /* Create a dataset */
+    dataset=H5Dcreate(file,"Dataset1",H5T_UINT8,dataspace,H5P_DEFAULT);
+
+    <Write data to first dataset>
+
+    /* Create an attribute for the dataset */
+    attr=H5Acreate(dataset,"Attr1",H5T_INT32,H5S_SCALAR,H5P_DEFAULT);
+
+    /* Write attribute information */
+    H5Awrite(attr,H5T_INT32,&attr_data);
+
+    /* Close attribute */
+    H5Aclose(attr);
+
+    /* Close dataset */
+    H5Dclose(dataset);
+
+    /* Create a group */
+    group=H5Gcreate(file,"/Group One",0);
+
+    /* Create an attribute for the dataset */
+    attr=H5Acreate(group,"Attr1",H5T_INT32,H5S_SCALAR,H5P_DEFAULT);
+
+    /* Write attribute information */
+    H5Awrite(attr,H5T_INT32,&attr_data);
+
+    /* Close attribute */
+    H5Aclose(attr);
+
+    /* Close the group */
+    H5Gclose(group);
+
+    /* Close file */
+    H5Fclose(file);
+}
+
+
+H5Aiterate example: Print all the names of attributes of a dataset, without
+                        any buffers.
+---------------------
+
+herr_t print_names (hid_t loc_id, const char *name, void *opdata)
+{
+    puts (name);
+    return 0;
+}
+
+{
+    H5Aiterate (dataset_or_group_id, NULL, print_names, NULL);
+}
+
+
+H5Aread Example: Attach to an attribute of a dataset and read in attr. data
+----------------
+{
+    hid_t file;
+    hid_t dataset;
+    hid_t attr;
+    int32 attr_data;
+
+    /* Open the file */
+    file=H5Fopen("example.h5", H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* Open the dataset */
+    dataset=H5Dopen(file,"Dataset1");
+
+    /* Get the OID of the attribute */
+    attr=H5Aopen_name(dataset,"Attr1");
+
+    /* Read attribute */
+    H5Aread(attr,H5T_INT32,attr_data);
+
+    /* Close attribute dataset */
+    H5Aclose(attr);
+
+    /* Close first dataset */
+    H5Dclose(dataset);
+
+    /* Close file */
+    H5Fclose(file);
+}
+
+H5Alink Example: Shows how to share an attribute between two datasets.
+----------------
+{
+    hid_t file;
+    hid_t dataset1, dataset2;
+    hid_t attr;
+
+    /* Open the file */
+    file=H5Fopen("example.h5", H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* Open the first dataset */
+    dataset1=H5Dopen(file,"Dataset1");
+
+    /* Open the first dataset */
+    dataset2=H5Dopen(file,"Dataset2");
+
+    /* Get the OID of the attribute */
+    attr=H5Aopen_name(dataset1,"Foo");
+
+    /* 
+     * Create an attribute in the second dataset to the attribute in dataset1,
+     * changing the name of the attribute information in dataset2.
+     */
+    H5Alink(dataset2, attr, "Bar");
+
+    /* Close attribute dataset */
+    H5Aclose(attr);
+
+    /* Close datasets */
+    H5Dclose(dataset1);
+    H5Dclose(dataset2);
+
+    /* Close file */
+    H5Fclose(file);
+}

Added: packages/hdf5/branches/upstream/current/examples/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/examples/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,52 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+h5_chunk_read.lo: \
+   $(srcdir)/h5_chunk_read.c \
+   hdf5.h
+h5_compound.lo: \
+   $(srcdir)/h5_compound.c \
+   hdf5.h
+h5_extend_write.lo: \
+   $(srcdir)/h5_extend_write.c \
+   hdf5.h
+h5_group.lo: \
+   $(srcdir)/h5_group.c \
+   hdf5.h
+h5_read.lo: \
+   $(srcdir)/h5_read.c \
+   hdf5.h
+h5_write.lo: \
+   $(srcdir)/h5_write.c \
+   hdf5.h
+h5_select.lo: \
+   $(srcdir)/h5_select.c \
+   hdf5.h
+h5_attribute.lo: \
+   $(srcdir)/h5_attribute.c \
+   hdf5.h
+h5_mount.lo: \
+   $(srcdir)/h5_mount.c \
+   hdf5.h
+h5_reference.lo: \
+   $(srcdir)/h5_reference.c \
+   hdf5.h
+h5_drivers.lo: \
+   $(srcdir)/h5_drivers.c \
+   hdf5.h
+ph5example.lo: \
+   $(srcdir)/ph5example.c \
+   hdf5.h

Added: packages/hdf5/branches/upstream/current/examples/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/examples/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,159 @@
+##
+## 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.
+##
+## HDF5 Library Examples Makefile(.in)
+##
+top_srcdir=@top_srcdir@
+top_builddir=..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Replace building CC with the just installed h5cc
+H5CC=$(bindir)/h5cc
+H5CC_PP=$(bindir)/h5pcc
+CPPFLAGS=-I. -I$(srcdir)
+CFLAGS=
+
+## These are the programs that `make all' or `make tests' will build and which
+## `make check' will run. List them in the order they should be run.
+TEST_PROGS_PARA=ph5example
+TEST_PROGS=h5_write h5_read h5_extend_write h5_chunk_read h5_compound   \
+           h5_group h5_select h5_attribute h5_mount h5_reference h5_drivers
+
+## These are the files that `make clean' (and derivatives) will remove from
+## this directory.
+## *.clog are from MPE option
+CLEAN=*.h5 *.raw *.meta *.clog
+
+## List all source files here.  The list of object files will be
+## created by replacing the `.c' with a `.o'.  This list is necessary
+## for building automatic dependencies.
+TEST_SRC_PARA=ph5example.c
+TEST_SRC=h5_chunk_read.c h5_compound.c h5_extend_write.c h5_group.c     \
+         h5_read.c h5_write.c h5_select.c h5_attribute.c h5_mount.c     \
+         h5_reference.c h5_drivers.c $(TEST_SRC_PARA)
+TEST_OBJ=$(TEST_SRC:.c=.lo)
+
+EXAMPLE_PROGS=$(TEST_SRC)
+
+## How to build the programs... they all depend on the hdf5 library
+$(TEST_PROGS) $(TEST_PROGS_PARA): $(LIBHDF5)
+h5_chunk_read: $(srcdir)/h5_chunk_read.c
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	else								\
+	  echo $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	fi
+
+h5_compound: $(srcdir)/h5_compound.c
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	else								\
+	  echo $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	fi
+
+h5_extend_write: $(srcdir)/h5_extend_write.c
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	else								\
+	  echo $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	fi
+
+h5_group: $(srcdir)/h5_group.c
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	else								\
+	  echo $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	fi
+
+h5_write: $(srcdir)/h5_write.c
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	else								\
+	  echo $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	fi
+
+h5_read: $(srcdir)/h5_read.c
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	else								\
+	  echo $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	fi
+
+h5_select: $(srcdir)/h5_select.c
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	else								\
+	  echo $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	fi
+
+h5_attribute: $(srcdir)/h5_attribute.c
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	else								\
+	  echo $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	fi
+
+h5_mount: $(srcdir)/h5_mount.c
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	else								\
+	  echo $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	fi
+
+h5_reference: $(srcdir)/h5_reference.c
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	else								\
+	  echo $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	fi
+
+h5_drivers: $(srcdir)/h5_drivers.c
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	else								\
+	  echo $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	fi
+
+ph5example: $(srcdir)/ph5example.c
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	else								\
+	  echo $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;		\
+	  $(H5CC_PP) $(CPPFLAGS) -o $@ $(srcdir)/$@.c;			\
+	fi
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/examples/h5_attribute.c
===================================================================
--- packages/hdf5/branches/upstream/current/examples/h5_attribute.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/h5_attribute.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,284 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 program illustrates the usage of the H5A Interface functions.
+ *  It creates and writes a dataset, and then creates and writes array,
+ *  scalar, and string attributes of the dataset.
+ *  Program reopens the file, attaches to the scalar attribute using
+ *  attribute name and reads and displays its value. Then index of the
+ *  third attribute is used to read and display attribute values.
+ *  The H5Aiterate function is used to iterate through the dataset attributes,
+ *  and display their names. The function is also reads and displays the values
+ *  of the array attribute.
+ */
+
+#include <stdlib.h>
+
+#include "hdf5.h"
+
+#define H5FILE_NAME "Attributes.h5"
+
+#define RANK  1   /* Rank and size of the dataset  */
+#define SIZE  7
+
+#define ARANK  2   /* Rank and dimension sizes of the first dataset attribute */
+#define ADIM1  2
+#define ADIM2  3
+#define ANAME  "Float attribute"      /* Name of the array attribute */
+#define ANAMES "Character attribute" /* Name of the string attribute */
+
+herr_t attr_info(hid_t loc_id, const char *name, void *opdata);
+                                     /* Operator function */
+
+int
+main (void)
+{
+
+   hid_t   file, dataset;       /* File and dataset identifiers */
+
+   hid_t   fid;                 /* Dataspace identifier */
+   hid_t   attr1, attr2, attr3; /* Attribute identifiers */
+   hid_t   attr;
+   hid_t   aid1, aid2, aid3;    /* Attribute dataspace identifiers */
+   hid_t   atype;               /* Attribute type */
+
+   hsize_t fdim[] = {SIZE};
+   hsize_t adim[] = {ADIM1, ADIM2};  /* Dimensions of the first attribute  */
+
+   float matrix[ADIM1][ADIM2]; /* Attribute data */
+
+   herr_t  ret;                /* Return value */
+   unsigned i,j;                /* Counters */
+   int     idx;                /* Attribute index */
+   char    string_out[80];     /* Buffer to read string attribute back */
+   int     point_out;          /* Buffer to read scalar attribute back */
+
+   /*
+    * Data initialization.
+    */
+   int vector[] = {1, 2, 3, 4, 5, 6, 7};  /* Dataset data */
+   int point = 1;                         /* Value of the scalar attribute */
+   char string[] = "ABCD";                /* Value of the string attribute */
+
+
+   for (i=0; i < ADIM1; i++) {            /* Values of the array attribute */
+       for (j=0; j < ADIM2; j++)
+       matrix[i][j] = -1.;
+   }
+
+   /*
+    * Create a file.
+    */
+   file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /*
+    * Create the dataspace for the dataset in the file.
+    */
+   fid = H5Screate(H5S_SIMPLE);
+   ret = H5Sset_extent_simple(fid, RANK, fdim, NULL);
+
+   /*
+    * Create the dataset in the file.
+    */
+   dataset = H5Dcreate(file, "Dataset", H5T_NATIVE_INT, fid, H5P_DEFAULT);
+
+   /*
+    * Write data to the dataset.
+    */
+   ret = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL , H5S_ALL, H5P_DEFAULT, vector);
+
+   /*
+    * Create dataspace for the first attribute.
+    */
+   aid1 = H5Screate(H5S_SIMPLE);
+   ret  = H5Sset_extent_simple(aid1, ARANK, adim, NULL);
+
+   /*
+    * Create array attribute.
+    */
+   attr1 = H5Acreate(dataset, ANAME, H5T_NATIVE_FLOAT, aid1, H5P_DEFAULT);
+
+   /*
+    * Write array attribute.
+    */
+   ret = H5Awrite(attr1, H5T_NATIVE_FLOAT, matrix);
+
+   /*
+    * Create scalar attribute.
+    */
+   aid2  = H5Screate(H5S_SCALAR);
+   attr2 = H5Acreate(dataset, "Integer attribute", H5T_NATIVE_INT, aid2,
+                     H5P_DEFAULT);
+
+   /*
+    * Write scalar attribute.
+    */
+   ret = H5Awrite(attr2, H5T_NATIVE_INT, &point);
+
+   /*
+    * Create string attribute.
+    */
+   aid3  = H5Screate(H5S_SCALAR);
+   atype = H5Tcopy(H5T_C_S1);
+           H5Tset_size(atype, 4);
+           H5Tset_strpad(atype,H5T_STR_NULLTERM);
+   attr3 = H5Acreate(dataset, ANAMES, atype, aid3, H5P_DEFAULT);
+
+   /*
+    * Write string attribute.
+    */
+   ret = H5Awrite(attr3, atype, string);
+
+   /*
+    * Close attribute and file dataspaces.
+    */
+   ret = H5Sclose(aid1);
+   ret = H5Sclose(aid2);
+   ret = H5Sclose(aid3);
+   ret = H5Sclose(fid);
+
+   /*
+    * Close the attributes.
+    */
+   ret = H5Aclose(attr1);
+   ret = H5Aclose(attr2);
+   ret = H5Aclose(attr3);
+
+   /*
+    * Close the dataset.
+    */
+   ret = H5Dclose(dataset);
+
+   /*
+    * Close the file.
+    */
+   ret = H5Fclose(file);
+
+   /*
+    * Reopen the file.
+    */
+   file = H5Fopen(H5FILE_NAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+
+   /*
+    * Open the dataset.
+    */
+   dataset = H5Dopen(file,"Dataset");
+
+   /*
+    * Attach to the scalar attribute using attribute name, then read and
+    * display its value.
+    */
+   attr = H5Aopen_name(dataset,"Integer attribute");
+   ret  = H5Aread(attr, H5T_NATIVE_INT, &point_out);
+   printf("The value of the attribute \"Integer attribute\" is %d \n", point_out);
+   ret =  H5Aclose(attr);
+
+   /*
+    * Attach to the string attribute using its index, then read and display the value.
+    */
+   attr  = H5Aopen_idx(dataset, 2);
+   atype = H5Tcopy(H5T_C_S1);
+           H5Tset_size(atype, 5);
+   ret   = H5Aread(attr, atype, string_out);
+   printf("The value of the attribute with index 2 is %s \n", string_out);
+   ret   = H5Aclose(attr);
+   ret   = H5Tclose(atype);
+
+   /*
+    * Get attribute info using iteration function.
+    */
+   idx = H5Aiterate(dataset, NULL, attr_info, NULL);
+
+   /*
+    * Close the dataset and the file.
+    */
+   H5Dclose(dataset);
+   H5Fclose(file);
+
+   return 0;
+}
+
+/*
+ * Operator function.
+ */
+herr_t
+attr_info(hid_t loc_id, const char *name, void *opdata)
+{
+    hid_t attr, atype, aspace;  /* Attribute, datatype and dataspace identifiers */
+    int   rank;
+    hsize_t sdim[64];
+    herr_t ret;
+    int i;
+    size_t npoints;             /* Number of elements in the array attribute. */
+    float *float_array;         /* Pointer to the array attribute. */
+
+    /* avoid warnings */
+    opdata = opdata;
+
+    /*
+     * Open the attribute using its name.
+     */
+    attr = H5Aopen_name(loc_id, name);
+
+    /*
+     * Display attribute name.
+     */
+    printf("\n");
+    printf("Name : ");
+    puts(name);
+
+    /*
+     * Get attribute datatype, dataspace, rank, and dimensions.
+     */
+    atype  = H5Aget_type(attr);
+    aspace = H5Aget_space(attr);
+    rank = H5Sget_simple_extent_ndims(aspace);
+    ret = H5Sget_simple_extent_dims(aspace, sdim, NULL);
+
+    /*
+     *  Display rank and dimension sizes for the array attribute.
+     */
+
+    if(rank > 0) {
+    printf("Rank : %d \n", rank);
+    printf("Dimension sizes : ");
+    for (i=0; i< rank; i++) printf("%d ", (int)sdim[i]);
+    printf("\n");
+    }
+
+    /*
+     * Read array attribute and display its type and values.
+     */
+
+    if (H5T_FLOAT == H5Tget_class(atype)) {
+    printf("Type : FLOAT \n");
+    npoints = H5Sget_simple_extent_npoints(aspace);
+    float_array = (float *)malloc(sizeof(float)*(int)npoints);
+    ret = H5Aread(attr, atype, float_array);
+    printf("Values : ");
+    for( i = 0; i < (int)npoints; i++) printf("%f ", float_array[i]);
+    printf("\n");
+    free(float_array);
+    }
+
+    /*
+     * Release all identifiers.
+     */
+    H5Tclose(atype);
+    H5Sclose(aspace);
+    H5Aclose(attr);
+
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/examples/h5_chunk_read.c
===================================================================
--- packages/hdf5/branches/upstream/current/examples/h5_chunk_read.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/h5_chunk_read.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,213 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 read data from a chunked dataset.
+ *   We will read from the file created by h5_extend_write.c
+ */
+
+#include "hdf5.h"
+
+#define H5FILE_NAME        "SDSextendible.h5"
+#define DATASETNAME "ExtendibleArray"
+#define RANK         2
+#define RANKC        1
+#define NX           10
+#define NY           5
+
+int
+main (void)
+{
+    hid_t       file;                        /* handles */
+    hid_t       dataset;
+    hid_t       filespace;
+    hid_t       memspace;
+    hid_t       cparms;
+    hsize_t     dims[2];                     /* dataset and chunk dimensions*/
+    hsize_t     chunk_dims[2];
+    hsize_t     col_dims[1];
+    hsize_t     count[2];
+    hsize_t     offset[2];
+
+    herr_t      status, status_n;
+
+    int         data_out[NX][NY];  /* buffer for dataset to be read */
+    int         chunk_out[2][5];   /* buffer for chunk to be read */
+    int         column[10];        /* buffer for column to be read */
+    int         rank, rank_chunk;
+    int		i, j;
+
+
+
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen(H5FILE_NAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    dataset = H5Dopen(file, DATASETNAME);
+
+    /*
+     * Get dataset rank and dimension.
+     */
+
+    filespace = H5Dget_space(dataset);    /* Get filespace handle first. */
+    rank      = H5Sget_simple_extent_ndims(filespace);
+    status_n  = H5Sget_simple_extent_dims(filespace, dims, NULL);
+    printf("dataset rank %d, dimensions %lu x %lu\n",
+	   rank, (unsigned long)(dims[0]), (unsigned long)(dims[1]));
+
+    /*
+     * Define the memory space to read dataset.
+     */
+    memspace = H5Screate_simple(RANK,dims,NULL);
+
+    /*
+     * Read dataset back and display.
+     */
+    status = H5Dread(dataset, H5T_NATIVE_INT, memspace, filespace,
+		     H5P_DEFAULT, data_out);
+    printf("\n");
+    printf("Dataset: \n");
+    for (j = 0; j < dims[0]; j++) {
+	for (i = 0; i < dims[1]; i++) printf("%d ", data_out[j][i]);
+	printf("\n");
+    }
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(memspace);
+
+    /*
+     *	    dataset rank 2, dimensions 10 x 5
+     *	    chunk rank 2, dimensions 2 x 5
+
+     *	    Dataset:
+     *	    1 1 1 3 3
+     *	    1 1 1 3 3
+     *	    1 1 1 0 0
+     *	    2 0 0 0 0
+     *	    2 0 0 0 0
+     *	    2 0 0 0 0
+     *	    2 0 0 0 0
+     *	    2 0 0 0 0
+     *	    2 0 0 0 0
+     *	    2 0 0 0 0
+     */
+
+    /*
+     * Read the third column from the dataset.
+     * First define memory dataspace, then define hyperslab
+     * and read it into column array.
+     */
+    col_dims[0] = 10;
+    memspace =  H5Screate_simple(RANKC, col_dims, NULL);
+
+    /*
+     * Define the column (hyperslab) to read.
+     */
+    offset[0] = 0;
+    offset[1] = 2;
+    count[0]  = 10;
+    count[1]  = 1;
+    status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL,
+				 count, NULL);
+    status = H5Dread(dataset, H5T_NATIVE_INT, memspace, filespace,
+		     H5P_DEFAULT, column);
+    printf("\n");
+    printf("Third column: \n");
+    for (i = 0; i < 10; i++) {
+	printf("%d \n", column[i]);
+    }
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(memspace);
+
+    /*
+     *	    Third column:
+     *	    1
+     *	    1
+     *	    1
+     *	    0
+     *	    0
+     *	    0
+     *	    0
+     *	    0
+     *	    0
+     *	    0
+     */
+
+    /*
+     * Get creation properties list.
+     */
+    cparms = H5Dget_create_plist(dataset); /* Get properties handle first. */
+
+    if (H5D_CHUNKED == H5Pget_layout(cparms))  {
+
+	/*
+	 * Get chunking information: rank and dimensions
+	 */
+	rank_chunk = H5Pget_chunk(cparms, 2, chunk_dims);
+	printf("chunk rank %d, dimensions %lu x %lu\n", rank_chunk,
+	       (unsigned long)(chunk_dims[0]), (unsigned long)(chunk_dims[1]));
+
+        /*
+         * Define the memory space to read a chunk.
+         */
+        memspace = H5Screate_simple(rank_chunk,chunk_dims,NULL);
+
+        /*
+         * Define chunk in the file (hyperslab) to read.
+         */
+        offset[0] = 2;
+        offset[1] = 0;
+        count[0]  = chunk_dims[0];
+        count[1]  = chunk_dims[1];
+        status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL,
+                                     count, NULL);
+
+        /*
+         * Read chunk back and display.
+         */
+        status = H5Dread(dataset, H5T_NATIVE_INT, memspace, filespace,
+                         H5P_DEFAULT, chunk_out);
+        printf("\n");
+        printf("Chunk: \n");
+        for (j = 0; j < chunk_dims[0]; j++) {
+            for (i = 0; i < chunk_dims[1]; i++) printf("%d ", chunk_out[j][i]);
+            printf("\n");
+        }
+        /*
+         *	 Chunk:
+         *	 1 1 1 0 0
+         *	 2 0 0 0 0
+         */
+
+        /*
+         * Close/release resources.
+         */
+        H5Sclose(memspace);
+    }
+
+    /*
+     * Close/release resources.
+     */
+    H5Pclose(cparms);
+    H5Dclose(dataset);
+    H5Sclose(filespace);
+    H5Fclose(file);
+
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/examples/h5_compound.c
===================================================================
--- packages/hdf5/branches/upstream/current/examples/h5_compound.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/h5_compound.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,167 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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.
+ */
+
+#include "hdf5.h"
+
+#define H5FILE_NAME          "SDScompound.h5"
+#define DATASETNAME   "ArrayOfStructures"
+#define LENGTH        10
+#define RANK          1
+
+int
+main(void)
+{
+
+    /* First structure  and dataset*/
+    typedef struct s1_t {
+	int    a;
+	float  b;
+	double c;
+    } s1_t;
+    s1_t       s1[LENGTH];
+    hid_t      s1_tid;     /* File datatype identifier */
+
+    /* Second structure (subset of s1_t)  and dataset*/
+    typedef struct s2_t {
+	double c;
+	int    a;
+    } s2_t;
+    s2_t       s2[LENGTH];
+    hid_t      s2_tid;    /* Memory datatype handle */
+
+    /* Third "structure" ( will be used to read float field of s1) */
+    hid_t      s3_tid;   /* Memory datatype handle */
+    float      s3[LENGTH];
+
+    int        i;
+    hid_t      file, dataset, space; /* Handles */
+    herr_t     status;
+    hsize_t    dim[] = {LENGTH};   /* Dataspace dimensions */
+
+
+    /*
+     * Initialize the data
+     */
+    for (i = 0; i< LENGTH; i++) {
+        s1[i].a = i;
+        s1[i].b = i*i;
+        s1[i].c = 1./(i+1);
+    }
+
+    /*
+     * Create the data space.
+     */
+    space = H5Screate_simple(RANK, dim, NULL);
+
+    /*
+     * Create the file.
+     */
+    file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Create the memory data type.
+     */
+    s1_tid = H5Tcreate (H5T_COMPOUND, sizeof(s1_t));
+    H5Tinsert(s1_tid, "a_name", HOFFSET(s1_t, a), H5T_NATIVE_INT);
+    H5Tinsert(s1_tid, "c_name", HOFFSET(s1_t, c), H5T_NATIVE_DOUBLE);
+    H5Tinsert(s1_tid, "b_name", HOFFSET(s1_t, b), H5T_NATIVE_FLOAT);
+
+    /*
+     * Create the dataset.
+     */
+    dataset = H5Dcreate(file, DATASETNAME, s1_tid, space, H5P_DEFAULT);
+
+    /*
+     * Wtite data to the dataset;
+     */
+    status = H5Dwrite(dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1);
+
+    /*
+     * Release resources
+     */
+    H5Tclose(s1_tid);
+    H5Sclose(space);
+    H5Dclose(dataset);
+    H5Fclose(file);
+
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen(H5FILE_NAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+
+    dataset = H5Dopen(file, DATASETNAME);
+
+    /*
+     * Create a data type for s2
+     */
+    s2_tid = H5Tcreate(H5T_COMPOUND, sizeof(s2_t));
+
+    H5Tinsert(s2_tid, "c_name", HOFFSET(s2_t, c), H5T_NATIVE_DOUBLE);
+    H5Tinsert(s2_tid, "a_name", HOFFSET(s2_t, a), H5T_NATIVE_INT);
+
+    /*
+     * Read two fields c and a from s1 dataset. Fields in the file
+     * are found by their names "c_name" and "a_name".
+     */
+    status = H5Dread(dataset, s2_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s2);
+
+    /*
+     * Display the fields
+     */
+    printf("\n");
+    printf("Field c : \n");
+    for( i = 0; i < LENGTH; i++) printf("%.4f ", s2[i].c);
+    printf("\n");
+
+    printf("\n");
+    printf("Field a : \n");
+    for( i = 0; i < LENGTH; i++) printf("%d ", s2[i].a);
+    printf("\n");
+
+    /*
+     * Create a data type for s3.
+     */
+    s3_tid = H5Tcreate(H5T_COMPOUND, sizeof(float));
+
+    status = H5Tinsert(s3_tid, "b_name", 0, H5T_NATIVE_FLOAT);
+
+    /*
+     * Read field b from s1 dataset. Field in the file is found by its name.
+     */
+    status = H5Dread(dataset, s3_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s3);
+
+    /*
+     * Display the field
+     */
+    printf("\n");
+    printf("Field b : \n");
+    for( i = 0; i < LENGTH; i++) printf("%.4f ", s3[i]);
+    printf("\n");
+
+    /*
+     * Release resources
+     */
+    H5Tclose(s2_tid);
+    H5Tclose(s3_tid);
+    H5Dclose(dataset);
+    H5Fclose(file);
+
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/examples/h5_drivers.c
===================================================================
--- packages/hdf5/branches/upstream/current/examples/h5_drivers.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/h5_drivers.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,103 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 shows how to use the hdf5 virtual file drivers.
+ * The example codes here do not check return values for the
+ * sake of simplicity.  As in all proper programs, return codes
+ * should be checked.
+ */
+
+#include "hdf5.h"
+#include "stdlib.h"
+
+/* global variables */
+int cleanup_g	=	-1;	/* whether to clean.  Init to not set. */
+
+/* prototypes */
+void cleanup(const char *);
+void split_file(void);
+
+
+/*
+ * Cleanup a file unless $HDF5_NOCLEANUP is set.
+ */
+void
+cleanup(const char *filename)
+{
+    if (cleanup_g == -1)
+	cleanup_g = getenv("HDF5_NOCLEANUP") ? 0 : 1;
+    if (cleanup_g)
+	remove(filename);
+}
+
+
+/*
+ * This shows how to use the split file driver.
+ */
+void
+split_file(void)
+{
+    hid_t fapl, fid;
+
+    /* Example 1: Both metadata and rawdata files are in the same  */
+    /*    directory.   Use Station1-m.h5 and Station1-r.h5 as      */
+    /*    the metadata and rawdata files.                          */
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+    H5Pset_fapl_split(fapl, "-m.h5", H5P_DEFAULT, "-r.h5", H5P_DEFAULT);
+    fid=H5Fcreate("Station1",H5F_ACC_TRUNC,H5P_DEFAULT,fapl);
+    /* using the file ... */
+    H5Fclose(fid);
+    H5Pclose(fapl);
+    /* Remove files created */
+    cleanup("Station1-m.h5");
+    cleanup("Station1-r.h5");
+
+    /* Example 2: metadata and rawdata files are in different      */
+    /*    directories.  Use PointA-m.h5 and /tmp/PointA-r.h5 as    */
+    /*    the metadata and rawdata files.                          */
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+    H5Pset_fapl_split(fapl, "-m.h5", H5P_DEFAULT, "/tmp/%s-r.h5", H5P_DEFAULT);
+    fid=H5Fcreate("PointA",H5F_ACC_TRUNC,H5P_DEFAULT,fapl);
+    /* using the file ... */
+    H5Fclose(fid);
+    H5Pclose(fapl);
+    /* Remove files created */
+    cleanup("PointA-m.h5");
+    cleanup("/tmp/PointA-r.h5");
+
+    /* Example 3: Using default extension names for the metadata   */
+    /*    and rawdata files.  Use Measure.meta and Measure.raw as  */
+    /*    the metadata and rawdata files.                          */
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+    H5Pset_fapl_split(fapl, NULL, H5P_DEFAULT, NULL, H5P_DEFAULT);
+    fid=H5Fcreate("Measure",H5F_ACC_TRUNC,H5P_DEFAULT,fapl);
+    /* using the file ... */
+    H5Fclose(fid);
+    H5Pclose(fapl);
+    /* Remove files created */
+    cleanup("Measure.meta");
+    cleanup("Measure.raw");
+}
+
+
+/* Main Body */
+int
+main (void)
+{
+
+    split_file();
+
+    return(0);
+}

Added: packages/hdf5/branches/upstream/current/examples/h5_extend_write.c
===================================================================
--- packages/hdf5/branches/upstream/current/examples/h5_extend_write.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/h5_extend_write.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,188 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 work with extendible dataset.
+ *   In the current version of the library dataset MUST be
+ *   chunked.
+ *
+ */
+
+#include "hdf5.h"
+
+#define H5FILE_NAME        "SDSextendible.h5"
+#define DATASETNAME "ExtendibleArray"
+#define RANK         2
+#define NX     10
+#define NY     5
+
+int
+main (void)
+{
+    hid_t       file;                          /* handles */
+    hid_t       dataspace, dataset;
+    hid_t       filespace;
+    hid_t       cparms;
+    hsize_t      dims[2]  = { 3, 3};            /*
+						 * dataset dimensions
+						 * at the creation time
+						 */
+    hsize_t      dims1[2] = { 3, 3};            /* data1 dimensions */
+    hsize_t      dims2[2] = { 7, 1};            /* data2 dimensions */
+    hsize_t      dims3[2] = { 2, 2};            /* data3 dimensions */
+
+    hsize_t      maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};
+    hsize_t      chunk_dims[2] ={2, 5};
+    hsize_t      size[2];
+    hsize_t      offset[2];
+
+    herr_t      status;
+
+    int         data1[3][3] = { {1, 1, 1},       /* data to write */
+				{1, 1, 1},
+				{1, 1, 1} };
+
+    int         data2[7]    = { 2, 2, 2, 2, 2, 2, 2};
+
+    int         data3[2][2] = { {3, 3},
+				{3, 3} };
+    int fillvalue = 0;
+
+    /*
+     * Create the data space with unlimited dimensions.
+     */
+    dataspace = H5Screate_simple(RANK, dims, maxdims);
+
+    /*
+     * Create a new file. If file exists its contents will be overwritten.
+     */
+    file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Modify dataset creation properties, i.e. enable chunking.
+     */
+    cparms = H5Pcreate(H5P_DATASET_CREATE);
+    status = H5Pset_chunk( cparms, RANK, chunk_dims);
+    status = H5Pset_fill_value (cparms, H5T_NATIVE_INT, &fillvalue );
+
+    /*
+     * Create a new dataset within the file using cparms
+     * creation properties.
+     */
+    dataset = H5Dcreate(file, DATASETNAME, H5T_NATIVE_INT, dataspace,
+			cparms);
+
+    /*
+     * Extend the dataset. This call assures that dataset is at least 3 x 3.
+     */
+    size[0]   = 3;
+    size[1]   = 3;
+    status = H5Dextend (dataset, size);
+
+    /*
+     * Select a hyperslab.
+     */
+    filespace = H5Dget_space (dataset);
+    offset[0] = 0;
+    offset[1] = 0;
+    status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL,
+				 dims1, NULL);
+
+    /*
+     * Write the data to the hyperslab.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, dataspace, filespace,
+		      H5P_DEFAULT, data1);
+
+    /*
+     * Extend the dataset. Dataset becomes 10 x 3.
+     */
+    dims[0]   = dims1[0] + dims2[0];
+    size[0]   = dims[0];
+    size[1]   = dims[1];
+    status = H5Dextend (dataset, size);
+
+    /*
+     * Select a hyperslab.
+     */
+    filespace = H5Dget_space (dataset);
+    offset[0] = 3;
+    offset[1] = 0;
+    status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL,
+				 dims2, NULL);
+
+    /*
+     * Define memory space
+     */
+    dataspace = H5Screate_simple(RANK, dims2, NULL);
+
+    /*
+     * Write the data to the hyperslab.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, dataspace, filespace,
+		      H5P_DEFAULT, data2);
+
+    /*
+     * Extend the dataset. Dataset becomes 10 x 5.
+     */
+    dims[1]   = dims1[1] + dims3[1];
+    size[0]   = dims[0];
+    size[1]   = dims[1];
+    status = H5Dextend (dataset, size);
+
+    /*
+     * Select a hyperslab
+     */
+    filespace = H5Dget_space (dataset);
+    offset[0] = 0;
+    offset[1] = 3;
+    status = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, offset, NULL,
+				 dims3, NULL);
+
+    /*
+     * Define memory space.
+     */
+    dataspace = H5Screate_simple(RANK, dims3, NULL);
+
+    /*
+     * Write the data to the hyperslab.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, dataspace, filespace,
+		      H5P_DEFAULT, data3);
+
+    /*
+     * Resulting dataset
+     *
+     *	 3 3 3 2 2
+     *	 3 3 3 2 2
+     *	 3 3 3 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     *	 2 0 0 0 0
+     */
+    /*
+     * Close/release resources.
+     */
+    H5Dclose(dataset);
+    H5Sclose(dataspace);
+    H5Sclose(filespace);
+    H5Pclose(cparms);
+    H5Fclose(file);
+
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/examples/h5_group.c
===================================================================
--- packages/hdf5/branches/upstream/current/examples/h5_group.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/h5_group.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,265 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 program creates a group in the file and two datasets in the group.
+ * Hard link to the group object is created and one of the datasets is accessed
+ * under new name.
+ * Iterator functions are used to find information about the objects
+ * in the root group and in the created group.
+ */
+
+
+#include "hdf5.h"
+
+
+#define H5FILE_NAME    "group.h5"
+#define RANK    2
+
+herr_t file_info(hid_t loc_id, const char *name, void *opdata);
+                                     /* Operator function */
+herr_t group_info(hid_t loc_id, const char *name, void *opdata);
+                                     /* Operator function */
+int
+main(void)
+{
+
+    hid_t    file;
+    hid_t    grp;
+    hid_t    dataset, dataspace;
+    hid_t    plist;
+
+    herr_t   status;
+    hsize_t  dims[2];
+    hsize_t  cdims[2];
+
+    int      idx_f, idx_g;
+
+    /*
+     * Create a file.
+     */
+    file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Create a group in the file.
+     */
+    grp = H5Gcreate(file, "/Data", 0);
+
+    /*
+     * Create dataset "Compressed Data" in the group using absolute
+     * name. Dataset creation property list is modified to use
+     * GZIP compression with the compression effort set to 6.
+     * Note that compression can be used only when dataset is chunked.
+     */
+    dims[0] = 1000;
+    dims[1] = 20;
+    cdims[0] = 20;
+    cdims[1] = 20;
+    dataspace = H5Screate_simple(RANK, dims, NULL);
+    plist     = H5Pcreate(H5P_DATASET_CREATE);
+                H5Pset_chunk(plist, 2, cdims);
+                H5Pset_deflate( plist, 6);
+    dataset = H5Dcreate(file, "/Data/Compressed_Data", H5T_NATIVE_INT,
+                        dataspace, plist);
+    /*
+     * Close the first dataset .
+     */
+    H5Sclose(dataspace);
+    H5Dclose(dataset);
+
+    /*
+     * Create the second dataset.
+     */
+    dims[0] = 500;
+    dims[1] = 20;
+    dataspace = H5Screate_simple(RANK, dims, NULL);
+    dataset = H5Dcreate(file, "/Data/Float_Data", H5T_NATIVE_FLOAT,
+			dataspace, H5P_DEFAULT);
+
+    /*
+     *Close the second dataset and file.
+     */
+    H5Sclose(dataspace);
+    H5Dclose(dataset);
+    H5Pclose(plist);
+    H5Fclose(file);
+
+    /*
+     * Now reopen the file and group in the file.
+     */
+    file = H5Fopen(H5FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    grp  = H5Gopen(file, "Data");
+
+    /*
+     * Access "Compressed_Data" dataset in the group.
+     */
+    dataset = H5Dopen(grp, "Compressed_Data");
+    if( dataset < 0) printf(" Dataset 'Compressed-Data' is not found. \n");
+    printf("\"/Data/Compressed_Data\" dataset is open \n");
+
+    /*
+     * Close the dataset.
+     */
+    status = H5Dclose(dataset);
+
+    /*
+     * Create hard link to the Data group.
+     */
+    status = H5Glink(file, H5G_LINK_HARD, "Data", "Data_new");
+
+    /*
+     * We can access "Compressed_Data" dataset using created
+     * hard link "Data_new".
+     */
+    dataset = H5Dopen(file, "/Data_new/Compressed_Data");
+    if( dataset < 0) printf(" Dataset is not found. \n");
+    printf("\"/Data_new/Compressed_Data\" dataset is open \n");
+
+    /*
+     * Close the dataset.
+     */
+    status = H5Dclose(dataset);
+
+
+    /*
+     * Use iterator to see the names of the objects in the root group.
+     */
+    idx_f = H5Giterate(file, "/", NULL, file_info, NULL);
+
+    /*
+     * Unlink  name "Data" and use iterator to see the names
+     * of the objects in the file root direvtory.
+     */
+    if (H5Gunlink(file, "Data") < 0)
+      printf(" H5Gunlink failed \n");
+    else
+      printf("\"Data\" is unlinked \n");
+
+    idx_f = H5Giterate(file, "/", NULL, file_info, NULL);
+
+    /*
+     * Use iterator to see the names of the objects in the group
+     * /Data_new.
+     */
+    idx_g = H5Giterate(grp, "/Data_new", NULL, group_info, NULL);
+
+    /*
+     * Close the file.
+     */
+
+    status = H5Fclose(file);
+
+    return 0;
+}
+
+/*
+ * Operator function.
+ */
+herr_t file_info(hid_t loc_id, const char *name, void *opdata)
+{
+    /* avoid warnings */
+    loc_id = loc_id;
+    opdata = opdata;
+
+    /*
+     * Display group name. The name is passed to the function by
+     * the Library. Some magic :-)
+     */
+    printf("\n");
+    printf("Name : ");
+    puts(name);
+
+    return 0;
+ }
+
+
+/*
+ * Operator function.
+ */
+herr_t group_info(hid_t loc_id, const char *name, void *opdata)
+{
+  hid_t did;  /* dataset identifier  */
+  hid_t tid;  /* datatype identifier */
+  H5T_class_t t_class;
+  hid_t pid;  /* data_property identifier */
+  hsize_t chunk_dims_out[2];
+
+  int  rank_chunk;
+
+  /* avoid warnings */
+  opdata = opdata;
+
+  /*
+   * Open the datasets using their names.
+   */
+  did = H5Dopen(loc_id, name);
+
+  /*
+   * Display dataset name.
+   */
+  printf("\n");
+  printf("Name : ");
+  puts(name);
+
+  /*
+   * Display dataset information.
+   */
+  tid = H5Dget_type(did);  /* get datatype*/
+  pid = H5Dget_create_plist(did); /* get creation property list */
+
+  /*
+   * Check if dataset is chunked.
+   */
+  if(H5D_CHUNKED == H5Pget_layout(pid)){
+    /*
+     * get chunking information: rank and dimensions.
+     */
+    rank_chunk = H5Pget_chunk(pid, 2, chunk_dims_out);
+    printf("chunk rank %d, dimensions %lu x %lu\n", rank_chunk,
+	   (unsigned long)(chunk_dims_out[0]),
+	   (unsigned long)(chunk_dims_out[1]));
+  }
+  else{
+    t_class = H5Tget_class(tid);
+    if(t_class < 0){
+      puts(" Invalid datatype.\n");
+    }
+    else {
+      if(t_class == H5T_INTEGER)
+      puts(" Datatype is 'H5T_NATIVE_INTEGER'.\n");
+      if(t_class == H5T_FLOAT)
+      puts(" Datatype is 'H5T_NATIVE_FLOAT'.\n");
+      if(t_class == H5T_STRING)
+      puts(" Datatype is 'H5T_NATIVE_STRING'.\n");
+      if(t_class == H5T_BITFIELD)
+      puts(" Datatype is 'H5T_NATIVE_BITFIELD'.\n");
+      if(t_class == H5T_OPAQUE)
+      puts(" Datatype is 'H5T_NATIVE_OPAQUE'.\n");
+      if(t_class == H5T_COMPOUND)
+      puts(" Datatype is 'H5T_NATIVE_COMPOUND'.\n");
+    }
+  }
+
+
+  H5Dclose(did);
+  H5Pclose(pid);
+  H5Tclose(tid);
+  return 0;
+ }
+
+
+
+
+
+

Added: packages/hdf5/branches/upstream/current/examples/h5_mount.c
===================================================================
--- packages/hdf5/branches/upstream/current/examples/h5_mount.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/h5_mount.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,133 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 program shows the concept of "mounting files".
+ * Program creates one file with group G in it, and another
+ * file with dataset D. Then second file is mounted in the first one
+ * under the "mounting point" G. Dataset D is accessed in the first file
+ * under name /G/D and data is printed out.
+ */
+
+#include "hdf5.h"
+
+#define FILE1 "mount1.h5"
+#define FILE2 "mount2.h5"
+
+#define RANK 2
+#define NX 4
+#define NY 5
+
+int main(void)
+{
+
+   hid_t fid1, fid2, gid;  /* Files and group identifiers */
+   hid_t did, tid, sid;    /* Dataset and datatype identifiers */
+
+   herr_t status;
+   hsize_t dims[] = {NX,NY}; /* Dataset dimensions */
+
+   int i, j;
+   int bm[NX][NY], bm_out[NX][NY]; /* Data buffers */
+
+   /*
+    * Initialization of buffer matrix "bm"
+    */
+   for(i =0; i<NX; i++) {
+    for(j = 0; j<NY; j++)
+      bm[i][j] = i + j;
+   }
+
+   /*
+    * Create first file and a group in it.
+    */
+   fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+   gid = H5Gcreate(fid1, "/G", 0);
+
+   /*
+    * Close group and file
+    */
+   H5Gclose(gid);
+   H5Fclose(fid1);
+
+   /*
+    * Create second file and dataset "D" in it.
+    */
+   fid2 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+   dims[0] = NX;
+   dims[1] = NY;
+   sid = H5Screate_simple(RANK, dims, NULL);
+   did = H5Dcreate(fid2, "D", H5T_NATIVE_INT, sid, H5P_DEFAULT);
+
+   /*
+    * Write data to the dataset.
+    */
+   status = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, bm);
+
+   /*
+    * Close all identifiers.
+    */
+   H5Sclose(sid);
+   H5Dclose(did);
+   H5Fclose(fid2);
+
+   /*
+    * Reopen both files
+    */
+   fid1 = H5Fopen(FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
+   fid2 = H5Fopen(FILE2, H5F_ACC_RDONLY, H5P_DEFAULT);
+
+   /*
+    * Mount second file under G in the first file.
+    */
+   H5Fmount(fid1, "/G", fid2, H5P_DEFAULT);
+
+   /*
+    * Access dataset D in the first file under /G/D name.
+    */
+   did = H5Dopen(fid1,"/G/D");
+   tid = H5Dget_type(did);
+   status = H5Dread(did, tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, bm_out);
+
+   /*
+    * Print out the data.
+    */
+   for(i=0; i<NX; i++){
+    for(j=0; j<NY; j++)
+        printf("  %d", bm_out[i][j]);
+	printf("\n");
+   }
+
+   /*
+    * Close all identifers
+    */
+   H5Tclose(tid);
+   H5Dclose(did);
+
+   /*
+    * Unmounting second file
+    */
+   H5Funmount(fid1, "/G");
+
+   /*
+    * Close both files
+    */
+   H5Fclose(fid1);
+   H5Fclose(fid2);
+
+   return 0;
+}
+
+
+

Added: packages/hdf5/branches/upstream/current/examples/h5_read.c
===================================================================
--- packages/hdf5/branches/upstream/current/examples/h5_read.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/h5_read.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,150 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 reads hyperslab from the SDS.h5 file
+ *   created by h5_write.c program into two-dimensional
+ *   plane of the three-dimensional array.
+ *   Information about dataset in the SDS.h5 file is obtained.
+ */
+
+#include "hdf5.h"
+
+#define H5FILE_NAME        "SDS.h5"
+#define DATASETNAME "IntArray"
+#define NX_SUB  3           /* hyperslab dimensions */
+#define NY_SUB  4
+#define NX 7           /* output buffer dimensions */
+#define NY 7
+#define NZ  3
+#define RANK         2
+#define RANK_OUT     3
+
+int
+main (void)
+{
+    hid_t       file, dataset;         /* handles */
+    hid_t       datatype, dataspace;
+    hid_t       memspace;
+    H5T_class_t t_class;                 /* data type class */
+    H5T_order_t order;                 /* data order */
+    size_t      size;                  /*
+				        * size of the data element
+				        * stored in file
+				        */
+    hsize_t     dimsm[3];              /* memory space dimensions */
+    hsize_t     dims_out[2];           /* dataset dimensions */
+    herr_t      status;
+
+    int         data_out[NX][NY][NZ ]; /* output buffer */
+
+    hsize_t      count[2];              /* size of the hyperslab in the file */
+    hsize_t      offset[2];             /* hyperslab offset in the file */
+    hsize_t      count_out[3];          /* size of the hyperslab in memory */
+    hsize_t      offset_out[3];         /* hyperslab offset in memory */
+    int          i, j, k, status_n, rank;
+
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++) {
+	    for (k = 0; k < NZ ; k++)
+		data_out[j][i][k] = 0;
+	}
+    }
+
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen(H5FILE_NAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    dataset = H5Dopen(file, DATASETNAME);
+
+    /*
+     * Get datatype and dataspace handles and then query
+     * dataset class, order, size, rank and dimensions.
+     */
+    datatype  = H5Dget_type(dataset);     /* datatype handle */
+    t_class     = H5Tget_class(datatype);
+    if (t_class == H5T_INTEGER) printf("Data set has INTEGER type \n");
+    order     = H5Tget_order(datatype);
+    if (order == H5T_ORDER_LE) printf("Little endian order \n");
+
+    size  = H5Tget_size(datatype);
+    printf(" Data size is %d \n", (int)size);
+
+    dataspace = H5Dget_space(dataset);    /* dataspace handle */
+    rank      = H5Sget_simple_extent_ndims(dataspace);
+    status_n  = H5Sget_simple_extent_dims(dataspace, dims_out, NULL);
+    printf("rank %d, dimensions %lu x %lu \n", rank,
+	   (unsigned long)(dims_out[0]), (unsigned long)(dims_out[1]));
+
+    /*
+     * Define hyperslab in the dataset.
+     */
+    offset[0] = 1;
+    offset[1] = 2;
+    count[0]  = NX_SUB;
+    count[1]  = NY_SUB;
+    status = H5Sselect_hyperslab(dataspace, H5S_SELECT_SET, offset, NULL,
+				 count, NULL);
+
+    /*
+     * Define the memory dataspace.
+     */
+    dimsm[0] = NX;
+    dimsm[1] = NY;
+    dimsm[2] = NZ ;
+    memspace = H5Screate_simple(RANK_OUT,dimsm,NULL);
+
+    /*
+     * Define memory hyperslab.
+     */
+    offset_out[0] = 3;
+    offset_out[1] = 0;
+    offset_out[2] = 0;
+    count_out[0]  = NX_SUB;
+    count_out[1]  = NY_SUB;
+    count_out[2]  = 1;
+    status = H5Sselect_hyperslab(memspace, H5S_SELECT_SET, offset_out, NULL,
+				 count_out, NULL);
+
+    /*
+     * Read data from hyperslab in the file into the hyperslab in
+     * memory and display.
+     */
+    status = H5Dread(dataset, H5T_NATIVE_INT, memspace, dataspace,
+		     H5P_DEFAULT, data_out);
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++) printf("%d ", data_out[j][i][0]);
+	printf("\n");
+    }
+    /*
+     * 0 0 0 0 0 0 0
+     * 0 0 0 0 0 0 0
+     * 0 0 0 0 0 0 0
+     * 3 4 5 6 0 0 0
+     * 4 5 6 7 0 0 0
+     * 5 6 7 8 0 0 0
+     * 0 0 0 0 0 0 0
+     */
+
+    /*
+     * Close/release resources.
+     */
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Sclose(dataspace);
+    H5Sclose(memspace);
+    H5Fclose(file);
+
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/examples/h5_reference.c
===================================================================
--- packages/hdf5/branches/upstream/current/examples/h5_reference.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/h5_reference.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,150 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 program illustrates how references to objects can be used.
+  *       Program creates a dataset and a group in a file. It also creates
+  *       second dataset, and references to the first dataset and the group
+  *       are stored in it.
+  *       Program reopens the file and reads dataset with the references.
+  *       References are used to open the objects. Information about the
+  *       objects is displayed.
+  */
+
+#include <stdlib.h>
+
+#include "hdf5.h"
+
+#define H5FILE_NAME "refere.h5"
+
+int
+main(void) {
+   hid_t fid;                         /* File, group, datasets, datatypes */
+   hid_t gid_a;                       /* and  dataspaces identifiers   */
+   hid_t did_b, sid_b, tid_b;
+   hid_t did_r, tid_r, sid_r;
+   herr_t status;
+
+   hobj_ref_t *wbuf; /* buffer to write to disk */
+   hobj_ref_t *rbuf; /* buffer to read from disk */
+
+
+   hsize_t dim_r[1];
+   hsize_t dim_b[2];
+
+   /*
+    *  Create a file using default properties.
+    */
+   fid = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /*
+    *  Create  group "A" in the file.
+    */
+   gid_a = H5Gcreate(fid, "A", 0);
+
+  /*
+   *  Create dataset "B" in the file.
+   */
+   dim_b[0] = 2;
+   dim_b[1] = 6;
+   sid_b = H5Screate_simple(2, dim_b, NULL);
+   did_b = H5Dcreate(fid, "B", H5T_NATIVE_FLOAT, sid_b, H5P_DEFAULT);
+
+   /*
+    *  Create dataset "R" to store references to the objects "A" and "B".
+    */
+   dim_r[0] = 2;
+   sid_r = H5Screate_simple(1, dim_r, NULL);
+   tid_r = H5Tcopy(H5T_STD_REF_OBJ);
+   did_r = H5Dcreate(fid, "R", tid_r, sid_r, H5P_DEFAULT );
+
+   /*
+    *  Allocate write and read buffers.
+    */
+   wbuf = (hobj_ref_t *)malloc(sizeof(hobj_ref_t)*2);
+   rbuf = (hobj_ref_t *)malloc(sizeof(hobj_ref_t)*2);
+
+   /*
+    *  Create references to the group "A" and dataset "B"
+    *  and store them in the wbuf.
+    */
+   H5Rcreate(&wbuf[0], fid, "A", H5R_OBJECT, -1);
+   H5Rcreate(&wbuf[1], fid, "B", H5R_OBJECT, -1);
+
+   /*
+    *  Write dataset R using default transfer properties.
+    */
+   status = H5Dwrite(did_r, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL,
+		     H5P_DEFAULT, wbuf);
+
+   /*
+    *  Close all objects.
+    */
+   H5Gclose(gid_a);
+
+   H5Sclose(sid_b);
+   H5Dclose(did_b);
+
+   H5Tclose(tid_r);
+   H5Sclose(sid_r);
+   H5Dclose(did_r);
+
+   H5Fclose(fid);
+
+   /*
+    * Reopen the file.
+    */
+   fid = H5Fopen(H5FILE_NAME, H5F_ACC_RDWR, H5P_DEFAULT);
+
+   /*
+    *  Open and read dataset "R".
+    */
+   did_r  = H5Dopen(fid, "R");
+   status = H5Dread(did_r, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL,
+		    H5P_DEFAULT, rbuf);
+
+   /*
+    * Find the type of referenced objects.
+    */
+    status = H5Rget_obj_type(did_r, H5R_OBJECT, &rbuf[0]);
+    if ( status == H5G_GROUP )
+    printf("First dereferenced object is a group. \n");
+
+    status = H5Rget_obj_type(did_r, H5R_OBJECT, &rbuf[1]);
+    if ( status == H5G_DATASET )
+    printf("Second dereferenced object is a dataset. \n");
+   /*
+    *  Get datatype of the dataset "B"
+    */
+   did_b = H5Rdereference(did_r, H5R_OBJECT, &rbuf[1]);
+   tid_b = H5Dget_type(did_b);
+   if(H5Tequal(tid_b, H5T_NATIVE_FLOAT))
+     printf("Datatype of the dataset is H5T_NATIVE_FLOAT.\n");
+   printf("\n");
+
+   /*
+    * Close all objects and free memory buffers.
+    */
+   H5Dclose(did_r);
+   H5Dclose(did_b);
+   H5Tclose(tid_b);
+   H5Fclose(fid);
+   free(rbuf);
+   free(wbuf);
+   return 0;
+
+ }
+
+
+

Added: packages/hdf5/branches/upstream/current/examples/h5_select.c
===================================================================
--- packages/hdf5/branches/upstream/current/examples/h5_select.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/h5_select.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,331 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 program shows how the H5Sselect_hyperslab and H5Sselect_elements
+ *  functions are used to write selected data from memory to the file.
+ *  Program takes 48 elements from the linear buffer and writes them into
+ *  the matrix using 3x2 blocks, (4,3) stride and (2,4) count.
+ *  Then four elements  of the matrix are overwritten with the new values and
+ *  file is closed. Program reopens the file and selects the union of two
+ *  hyperslabs in the dataset in the file. Then it reads the selection into the
+ *  memory dataset preserving the shape of the selection.
+ */
+
+#include "hdf5.h"
+
+#define H5FILE_NAME "Select.h5"
+
+#define MSPACE1_RANK     1          /* Rank of the first dataset in memory */
+#define MSPACE1_DIM      50         /* Dataset size in memory */
+
+#define MSPACE2_RANK     1          /* Rank of the second dataset in memory */
+#define MSPACE2_DIM      4          /* Dataset size in memory */
+
+#define FSPACE_RANK      2          /* Dataset rank as it is stored in the file */
+#define FSPACE_DIM1      8          /* Dimension sizes of the dataset as it is
+                                       stored in the file */
+#define FSPACE_DIM2      12
+
+                                    /* We will read dataset back from the file
+                                       to the dataset in memory with these
+                                       dataspace parameters. */
+#define MSPACE_RANK      2
+#define MSPACE_DIM1      8
+#define MSPACE_DIM2      9
+
+#define NPOINTS          4          /* Number of points that will be selected
+                                       and overwritten */
+int
+main (void)
+{
+
+   hid_t   file, dataset;           /* File and dataset identifiers */
+   hid_t   mid1, mid2, mid, fid;    /* Dataspace identifiers */
+   hid_t   plist;                   /* Dataset property list identifier */
+
+   hsize_t dim1[] = {MSPACE1_DIM};  /* Dimension size of the first dataset
+                                       (in memory) */
+   hsize_t dim2[] = {MSPACE2_DIM};  /* Dimension size of the second dataset
+                                       (in memory */
+   hsize_t fdim[] = {FSPACE_DIM1, FSPACE_DIM2};
+                                    /* Dimension sizes of the dataset (on disk) */
+   hsize_t mdim[] = {MSPACE_DIM1, MSPACE_DIM2}; /* Dimension sizes of the
+                                                   dataset in memory when we
+                                                   read selection from the
+                                                   dataset on the disk */
+
+   hsize_t start[2];  /* Start of hyperslab */
+   hsize_t stride[2]; /* Stride of hyperslab */
+   hsize_t count[2];  /* Block count */
+   hsize_t block[2];  /* Block sizes */
+
+   hsize_t coord[NPOINTS][FSPACE_RANK]; /* Array to store selected points
+                                            from the file dataspace */
+   herr_t ret;
+   unsigned i,j;
+   int fillvalue = 0;   /* Fill value for the dataset */
+
+   int    matrix_out[MSPACE_DIM1][MSPACE_DIM2]; /* Buffer to read from the
+                                                   dataset */
+   int    vector[MSPACE1_DIM];
+   int    values[] = {53, 59, 61, 67};  /* New values to be written */
+
+   /*
+    * Buffers' initialization.
+    */
+   vector[0] = vector[MSPACE1_DIM - 1] = -1;
+   for (i = 1; i < MSPACE1_DIM - 1; i++) vector[i] = i;
+
+   /*
+    * Create a file.
+    */
+   file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+   /*
+    * Create property list for a dataset and set up fill values.
+    */
+   plist = H5Pcreate(H5P_DATASET_CREATE);
+   ret   = H5Pset_fill_value(plist, H5T_NATIVE_INT, &fillvalue);
+
+    /*
+     * Create dataspace for the dataset in the file.
+     */
+    fid = H5Screate_simple(FSPACE_RANK, fdim, NULL);
+
+    /*
+     * Create dataset in the file. Notice that creation
+     * property list plist is used.
+     */
+    dataset = H5Dcreate(file, "Matrix in file", H5T_NATIVE_INT, fid, plist);
+
+    /*
+     * Select hyperslab for the dataset in the file, using 3x2 blocks,
+     * (4,3) stride and (2,4) count starting at the position (0,1).
+     */
+    start[0]  = 0; start[1]  = 1;
+    stride[0] = 4; stride[1] = 3;
+    count[0]  = 2; count[1]  = 4;
+    block[0]  = 3; block[1]  = 2;
+    ret = H5Sselect_hyperslab(fid, H5S_SELECT_SET, start, stride, count, block);
+
+    /*
+     * Create dataspace for the first dataset.
+     */
+    mid1 = H5Screate_simple(MSPACE1_RANK, dim1, NULL);
+
+    /*
+     * Select hyperslab.
+     * We will use 48 elements of the vector buffer starting at the second element.
+     * Selected elements are 1 2 3 . . . 48
+     */
+    start[0]  = 1;
+    stride[0] = 1;
+    count[0]  = 48;
+    block[0]  = 1;
+    ret = H5Sselect_hyperslab(mid1, H5S_SELECT_SET, start, stride, count, block);
+
+    /*
+     * Write selection from the vector buffer to the dataset in the file.
+     *
+     * File dataset should look like this:
+     *                    0  1  2  0  3  4  0  5  6  0  7  8
+     *                    0  9 10  0 11 12  0 13 14  0 15 16
+     *                    0 17 18  0 19 20  0 21 22  0 23 24
+     *                    0  0  0  0  0  0  0  0  0  0  0  0
+     *                    0 25 26  0 27 28  0 29 30  0 31 32
+     *                    0 33 34  0 35 36  0 37 38  0 39 40
+     *                    0 41 42  0 43 44  0 45 46  0 47 48
+     *                    0  0  0  0  0  0  0  0  0  0  0  0
+     */
+     ret = H5Dwrite(dataset, H5T_NATIVE_INT, mid1, fid, H5P_DEFAULT, vector);
+
+    /*
+     * Reset the selection for the file dataspace fid.
+     */
+    ret = H5Sselect_none(fid);
+
+    /*
+     * Create dataspace for the second dataset.
+     */
+    mid2 = H5Screate_simple(MSPACE2_RANK, dim2, NULL);
+
+    /*
+     * Select sequence of NPOINTS points in the file dataspace.
+     */
+    coord[0][0] = 0; coord[0][1] = 0;
+    coord[1][0] = 3; coord[1][1] = 3;
+    coord[2][0] = 3; coord[2][1] = 5;
+    coord[3][0] = 5; coord[3][1] = 6;
+
+    ret = H5Sselect_elements(fid, H5S_SELECT_SET, NPOINTS,
+                             (const hsize_t **)coord);
+
+    /*
+     * Write new selection of points to the dataset.
+     */
+    ret = H5Dwrite(dataset, H5T_NATIVE_INT, mid2, fid, H5P_DEFAULT, values);
+
+    /*
+     * File dataset should look like this:
+     *                   53  1  2  0  3  4  0  5  6  0  7  8
+     *                    0  9 10  0 11 12  0 13 14  0 15 16
+     *                    0 17 18  0 19 20  0 21 22  0 23 24
+     *                    0  0  0 59  0 61  0  0  0  0  0  0
+     *                    0 25 26  0 27 28  0 29 30  0 31 32
+     *                    0 33 34  0 35 36 67 37 38  0 39 40
+     *                    0 41 42  0 43 44  0 45 46  0 47 48
+     *                    0  0  0  0  0  0  0  0  0  0  0  0
+     *
+     */
+
+    /*
+     * Close memory file and memory dataspaces.
+     */
+    ret = H5Sclose(mid1);
+    ret = H5Sclose(mid2);
+    ret = H5Sclose(fid);
+
+    /*
+     * Close dataset.
+     */
+    ret = H5Dclose(dataset);
+
+    /*
+     * Close the file.
+     */
+    ret = H5Fclose(file);
+
+    /*
+     * Open the file.
+     */
+    file = H5Fopen(H5FILE_NAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+
+    /*
+     * Open the dataset.
+     */
+    dataset = H5Dopen(file,"Matrix in file");
+
+    /*
+     * Get dataspace of the open dataset.
+     */
+    fid = H5Dget_space(dataset);
+
+    /*
+     * Select first hyperslab for the dataset in the file. The following
+     * elements are selected:
+     *                     10  0 11 12
+     *                     18  0 19 20
+     *                      0 59  0 61
+     *
+     */
+    start[0] = 1; start[1] = 2;
+    block[0] = 1; block[1] = 1;
+    stride[0] = 1; stride[1] = 1;
+    count[0]  = 3; count[1]  = 4;
+    ret = H5Sselect_hyperslab(fid, H5S_SELECT_SET, start, stride, count, block);
+
+    /*
+     * Add second selected hyperslab to the selection.
+     * The following elements are selected:
+     *                    19 20  0 21 22
+     *                     0 61  0  0  0
+     *                    27 28  0 29 30
+     *                    35 36 67 37 38
+     *                    43 44  0 45 46
+     *                     0  0  0  0  0
+     * Note that two hyperslabs overlap. Common elements are:
+     *                                              19 20
+     *                                               0 61
+     */
+    start[0] = 2; start[1] = 4;
+    block[0] = 1; block[1] = 1;
+    stride[0] = 1; stride[1] = 1;
+    count[0]  = 6; count[1]  = 5;
+    ret = H5Sselect_hyperslab(fid, H5S_SELECT_OR, start, stride, count, block);
+
+    /*
+     * Create memory dataspace.
+     */
+    mid = H5Screate_simple(MSPACE_RANK, mdim, NULL);
+
+    /*
+     * Select two hyperslabs in memory. Hyperslabs has the same
+     * size and shape as the selected hyperslabs for the file dataspace.
+     */
+    start[0] = 0; start[1] = 0;
+    block[0] = 1; block[1] = 1;
+    stride[0] = 1; stride[1] = 1;
+    count[0]  = 3; count[1]  = 4;
+    ret = H5Sselect_hyperslab(mid, H5S_SELECT_SET, start, stride, count, block);
+
+    start[0] = 1; start[1] = 2;
+    block[0] = 1; block[1] = 1;
+    stride[0] = 1; stride[1] = 1;
+    count[0]  = 6; count[1]  = 5;
+    ret = H5Sselect_hyperslab(mid, H5S_SELECT_OR, start, stride, count, block);
+
+    /*
+     * Initialize data buffer.
+     */
+    for (i = 0; i < MSPACE_DIM1; i++) {
+       for (j = 0; j < MSPACE_DIM2; j++)
+            matrix_out[i][j] = 0;
+    }
+    /*
+     * Read data back to the buffer matrix_out.
+     */
+    ret = H5Dread(dataset, H5T_NATIVE_INT, mid, fid,
+                  H5P_DEFAULT, matrix_out);
+
+    /*
+     * Display the result. Memory dataset is:
+     *
+     *                    10  0 11 12  0  0  0  0  0
+     *                    18  0 19 20  0 21 22  0  0
+     *                     0 59  0 61  0  0  0  0  0
+     *                     0  0 27 28  0 29 30  0  0
+     *                     0  0 35 36 67 37 38  0  0
+     *                     0  0 43 44  0 45 46  0  0
+     *                     0  0  0  0  0  0  0  0  0
+     *                     0  0  0  0  0  0  0  0  0
+     */
+    for (i=0; i < MSPACE_DIM1; i++) {
+        for(j=0; j < MSPACE_DIM2; j++) printf("%3d  ", matrix_out[i][j]);
+        printf("\n");
+    }
+
+    /*
+     * Close memory file and memory dataspaces.
+     */
+    ret = H5Sclose(mid);
+    ret = H5Sclose(fid);
+
+    /*
+     * Close dataset.
+     */
+    ret = H5Dclose(dataset);
+
+    /*
+     * Close property list
+     */
+    ret = H5Pclose(plist);
+
+    /*
+     * Close the file.
+     */
+    ret = H5Fclose(file);
+
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/examples/h5_write.c
===================================================================
--- packages/hdf5/branches/upstream/current/examples/h5_write.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/h5_write.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,97 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 writes data to the HDF5 file.
+ *  Data conversion is performed during write operation.
+ */
+
+#include "hdf5.h"
+
+#define H5FILE_NAME        "SDS.h5"
+#define DATASETNAME "IntArray"
+#define NX     5                      /* dataset dimensions */
+#define NY     6
+#define RANK   2
+
+int
+main (void)
+{
+    hid_t       file, dataset;         /* file and dataset handles */
+    hid_t       datatype, dataspace;   /* handles */
+    hsize_t     dimsf[2];              /* dataset dimensions */
+    herr_t      status;
+    int         data[NX][NY];          /* data to write */
+    int         i, j;
+
+    /*
+     * Data  and output buffer initialization.
+     */
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++)
+	    data[j][i] = i + j;
+    }
+    /*
+     * 0 1 2 3 4 5
+     * 1 2 3 4 5 6
+     * 2 3 4 5 6 7
+     * 3 4 5 6 7 8
+     * 4 5 6 7 8 9
+     */
+
+    /*
+     * Create a new file using H5F_ACC_TRUNC access,
+     * default file creation properties, and default file
+     * access properties.
+     */
+    file = H5Fcreate(H5FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Describe the size of the array and create the data space for fixed
+     * size dataset.
+     */
+    dimsf[0] = NX;
+    dimsf[1] = NY;
+    dataspace = H5Screate_simple(RANK, dimsf, NULL);
+
+    /*
+     * Define datatype for the data in the file.
+     * We will store little endian INT numbers.
+     */
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    status = H5Tset_order(datatype, H5T_ORDER_LE);
+
+    /*
+     * Create a new dataset within the file using defined dataspace and
+     * datatype and default dataset creation properties.
+     */
+    dataset = H5Dcreate(file, DATASETNAME, datatype, dataspace,
+			H5P_DEFAULT);
+
+    /*
+     * Write the data to the dataset using default transfer properties.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+		      H5P_DEFAULT, data);
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Fclose(file);
+
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/examples/ph5example.c
===================================================================
--- packages/hdf5/branches/upstream/current/examples/ph5example.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/examples/ph5example.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1131 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Example of using the parallel HDF5 library to access datasets.
+ * Last revised: April 24, 2001.
+ *
+ * This program contains two parts.  In the first part, the mpi processes
+ * collectively create a new parallel HDF5 file and create two fixed
+ * dimension datasets in it.  Then each process writes a hyperslab into
+ * each dataset in an independent mode.  All processes collectively
+ * close the datasets and the file.
+ * In the second part, the processes collectively open the created file
+ * and the two datasets in it.  Then each process reads a hyperslab from
+ * each dataset in an independent mode and prints them out.
+ * All processes collectively close the datasets and the file.
+ *
+ * The need of requirement of parallel file prefix is that in general
+ * the current working directory in which compiling is done, is not suitable
+ * for parallel I/O and there is no standard pathname for parallel file
+ * systems.  In some cases, the parallel file name may even needs some
+ * parallel file type prefix such as: "pfs:/GF/...".  Therefore, this
+ * example requires an explicite parallel file prefix.  See the usage
+ * for more detail.
+ */
+
+#include <assert.h>
+#include "hdf5.h"
+#include <string.h>
+#include <stdlib.h>
+
+#ifdef H5_HAVE_PARALLEL
+/* Temporary source code */
+#define FAIL -1
+/* temporary code end */
+
+/* Define some handy debugging shorthands, routines, ... */
+/* debugging tools */
+#define MESG(x)\
+	if (verbose) printf("%s\n", x);\
+
+#define MPI_BANNER(mesg)\
+    {printf("--------------------------------\n");\
+    printf("Proc %d: ", mpi_rank); \
+    printf("*** %s\n", mesg);\
+    printf("--------------------------------\n");}
+
+#define SYNC(comm)\
+    {MPI_BANNER("doing a SYNC"); MPI_Barrier(comm); MPI_BANNER("SYNC DONE");}
+/* End of Define some handy debugging shorthands, routines, ... */
+
+/* Constants definitions */
+/* 24 is a multiple of 2, 3, 4, 6, 8, 12.  Neat for parallel tests. */
+#define SPACE1_DIM1	24
+#define SPACE1_DIM2	24
+#define SPACE1_RANK	2
+#define DATASETNAME1	"Data1"
+#define DATASETNAME2	"Data2"
+#define DATASETNAME3	"Data3"
+/* hyperslab layout styles */
+#define BYROW		1	/* divide into slabs of rows */
+#define BYCOL		2	/* divide into blocks of columns */
+
+#define PARAPREFIX	"HDF5_PARAPREFIX"	/* file prefix environment variable name */
+
+
+/* dataset data type.  Int's can be easily octo dumped. */
+typedef int DATATYPE;
+
+/* global variables */
+int nerrors = 0;				/* errors count */
+#ifndef PATH_MAX
+#define PATH_MAX    512
+#endif  /* !PATH_MAX */
+char    testfiles[2][PATH_MAX];
+
+
+int mpi_size, mpi_rank;				/* mpi variables */
+
+/* option flags */
+int verbose = 0;			/* verbose, default as no. */
+int doread=1;				/* read test */
+int dowrite=1;				/* write test */
+int docleanup=1;			/* cleanup */
+
+/* Prototypes */
+void slab_set(hsize_t start[], hsize_t count[], hsize_t stride[], int mode);
+void dataset_fill(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE * dataset);
+void dataset_print(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE * dataset);
+int dataset_vrfy(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE *dataset, DATATYPE *original);
+void phdf5writeInd(char *filename);
+void phdf5readInd(char *filename);
+void phdf5writeAll(char *filename);
+void phdf5readAll(char *filename);
+void test_split_comm_access(char filenames[][PATH_MAX]);
+int parse_options(int argc, char **argv);
+void usage(void);
+int mkfilenames(char *prefix);
+void cleanup(void);
+
+
+/*
+ * Setup the dimensions of the hyperslab.
+ * Two modes--by rows or by columns.
+ * Assume dimension rank is 2.
+ */
+void
+slab_set(hsize_t start[], hsize_t count[], hsize_t stride[], int mode)
+{
+    switch (mode){
+    case BYROW:
+	/* Each process takes a slabs of rows. */
+	stride[0] = 1;
+	stride[1] = 1;
+	count[0] = SPACE1_DIM1/mpi_size;
+	count[1] = SPACE1_DIM2;
+	start[0] = mpi_rank*count[0];
+	start[1] = 0;
+	break;
+    case BYCOL:
+	/* Each process takes a block of columns. */
+	stride[0] = 1;
+	stride[1] = 1;
+	count[0] = SPACE1_DIM1;
+	count[1] = SPACE1_DIM2/mpi_size;
+	start[0] = 0;
+	start[1] = mpi_rank*count[1];
+	break;
+    default:
+	/* Unknown mode.  Set it to cover the whole dataset. */
+	printf("unknown slab_set mode (%d)\n", mode);
+	stride[0] = 1;
+	stride[1] = 1;
+	count[0] = SPACE1_DIM1;
+	count[1] = SPACE1_DIM2;
+	start[0] = 0;
+	start[1] = 0;
+	break;
+    }
+}
+
+
+/*
+ * Fill the dataset with trivial data for testing.
+ * Assume dimension rank is 2 and data is stored contiguous.
+ */
+void
+dataset_fill(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE * dataset)
+{
+    DATATYPE *dataptr = dataset;
+    hsize_t i, j;
+
+    /* put some trivial data in the data_array */
+    for (i=0; i < count[0]; i++){
+	for (j=0; j < count[1]; j++){
+	    *dataptr++ = (i*stride[0]+start[0])*100 + (j*stride[1]+start[1]+1);
+	}
+    }
+}
+
+
+/*
+ * Print the content of the dataset.
+ */
+void dataset_print(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE * dataset)
+{
+    DATATYPE *dataptr = dataset;
+    hsize_t i, j;
+
+    /* print the slab read */
+    for (i=0; i < count[0]; i++){
+	printf("Row %lu: ", (unsigned long)(i*stride[0]+start[0]));
+	for (j=0; j < count[1]; j++){
+	    printf("%03d ", *dataptr++);
+	}
+	printf("\n");
+    }
+}
+
+
+/*
+ * Print the content of the dataset.
+ */
+int dataset_vrfy(hsize_t start[], hsize_t count[], hsize_t stride[], DATATYPE *dataset, DATATYPE *original)
+{
+#define MAX_ERR_REPORT	10		/* Maximum number of errors reported */
+
+    hsize_t i, j;
+    int nerr;
+
+    /* print it if verbose */
+    if (verbose)
+	dataset_print(start, count, stride, dataset);
+
+    nerr = 0;
+    for (i=0; i < count[0]; i++){
+	for (j=0; j < count[1]; j++){
+	    if (*dataset++ != *original++){
+		nerr++;
+		if (nerr <= MAX_ERR_REPORT){
+		    printf("Dataset Verify failed at [%lu][%lu](row %lu, col %lu): expect %d, got %d\n",
+			(unsigned long)i, (unsigned long)j,
+			(unsigned long)(i*stride[0]+start[0]), (unsigned long)(j*stride[1]+start[1]),
+			*(dataset-1), *(original-1));
+		}
+	    }
+	}
+    }
+    if (nerr > MAX_ERR_REPORT)
+	printf("[more errors ...]\n");
+    if (nerr)
+	printf("%d errors found in dataset_vrfy\n", nerr);
+    return(nerr);
+}
+
+
+/*
+ * Example of using the parallel HDF5 library to create two datasets
+ * in one HDF5 files with parallel MPIO access support.
+ * The Datasets are of sizes (number-of-mpi-processes x DIM1) x DIM2.
+ * Each process controls only a slab of size DIM1 x DIM2 within each
+ * dataset.
+ */
+
+void
+phdf5writeInd(char *filename)
+{
+    hid_t fid1;			/* HDF5 file IDs */
+    hid_t acc_tpl1;		/* File access templates */
+    hid_t sid1;   		/* Dataspace ID */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    hsize_t dims1[SPACE1_RANK] =
+	{SPACE1_DIM1,SPACE1_DIM2};	/* dataspace dim sizes */
+    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */
+
+    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
+    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    if (verbose)
+	printf("Independent write test on file %s\n", filename);
+
+    /* -------------------
+     * START AN HDF5 FILE
+     * -------------------*/
+    /* setup file access template with parallel IO access. */
+    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
+    assert(acc_tpl1 != FAIL);
+    MESG("H5Pcreate access succeed");
+    /* set Parallel access with communicator */
+    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);
+    assert(ret != FAIL);
+    MESG("H5Pset_fapl_mpio succeed");
+
+    /* create the file collectively */
+    fid1=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl1);
+    assert(fid1 != FAIL);
+    MESG("H5Fcreate succeed");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl1);
+    assert(ret != FAIL);
+
+
+    /* --------------------------
+     * Define the dimensions of the overall datasets
+     * and the slabs local to the MPI process.
+     * ------------------------- */
+    /* setup dimensionality object */
+    sid1 = H5Screate_simple (SPACE1_RANK, dims1, NULL);
+    assert (sid1 != FAIL);
+    MESG("H5Screate_simple succeed");
+
+
+    /* create a dataset collectively */
+    dataset1 = H5Dcreate(fid1, DATASETNAME1, H5T_NATIVE_INT, sid1,
+			H5P_DEFAULT);
+    assert(dataset1 != FAIL);
+    MESG("H5Dcreate succeed");
+
+    /* create another dataset collectively */
+    dataset2 = H5Dcreate(fid1, DATASETNAME2, H5T_NATIVE_INT, sid1,
+			H5P_DEFAULT);
+    assert(dataset2 != FAIL);
+    MESG("H5Dcreate succeed");
+
+
+
+    /* set up dimensions of the slab this process accesses */
+    start[0] = mpi_rank*SPACE1_DIM1/mpi_size;
+    start[1] = 0;
+    count[0] = SPACE1_DIM1/mpi_size;
+    count[1] = SPACE1_DIM2;
+    stride[0] = 1;
+    stride[1] =1;
+if (verbose)
+    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
+	(unsigned long)start[0], (unsigned long)start[1],
+        (unsigned long)count[0], (unsigned long)count[1],
+        (unsigned long)(count[0]*count[1]));
+
+    /* put some trivial data in the data_array */
+    dataset_fill(start, count, stride, &data_array1[0][0]);
+    MESG("data_array initialized");
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    assert(file_dataspace != FAIL);
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* write data independently */
+    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    assert(ret != FAIL);
+    MESG("H5Dwrite succeed");
+
+    /* write data independently */
+    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    assert(ret != FAIL);
+    MESG("H5Dwrite succeed");
+
+    /* release dataspace ID */
+    H5Sclose(file_dataspace);
+
+    /* close dataset collectively */
+    ret=H5Dclose(dataset1);
+    assert(ret != FAIL);
+    MESG("H5Dclose1 succeed");
+    ret=H5Dclose(dataset2);
+    assert(ret != FAIL);
+    MESG("H5Dclose2 succeed");
+
+    /* release all IDs created */
+    H5Sclose(sid1);
+
+    /* close the file collectively */
+    H5Fclose(fid1);
+}
+
+/* Example of using the parallel HDF5 library to read a dataset */
+void
+phdf5readInd(char *filename)
+{
+    hid_t fid1;			/* HDF5 file IDs */
+    hid_t acc_tpl1;		/* File access templates */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */
+    DATATYPE data_origin1[SPACE1_DIM1][SPACE1_DIM2];	/* expected data buffer */
+
+    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
+    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    if (verbose)
+	printf("Independent read test on file %s\n", filename);
+
+    /* setup file access template */
+    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
+    assert(acc_tpl1 != FAIL);
+    /* set Parallel access with communicator */
+    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);
+    assert(ret != FAIL);
+
+
+    /* open the file collectively */
+    fid1=H5Fopen(filename,H5F_ACC_RDWR,acc_tpl1);
+    assert(fid1 != FAIL);
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl1);
+    assert(ret != FAIL);
+
+    /* open the dataset1 collectively */
+    dataset1 = H5Dopen(fid1, DATASETNAME1);
+    assert(dataset1 != FAIL);
+
+    /* open another dataset collectively */
+    dataset2 = H5Dopen(fid1, DATASETNAME1);
+    assert(dataset2 != FAIL);
+
+
+    /* set up dimensions of the slab this process accesses */
+    start[0] = mpi_rank*SPACE1_DIM1/mpi_size;
+    start[1] = 0;
+    count[0] = SPACE1_DIM1/mpi_size;
+    count[1] = SPACE1_DIM2;
+    stride[0] = 1;
+    stride[1] =1;
+if (verbose)
+    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
+        (unsigned long)start[0], (unsigned long)start[1],
+        (unsigned long)count[0], (unsigned long)count[1],
+        (unsigned long)(count[0]*count[1]));
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    assert(file_dataspace != FAIL);
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill dataset with test data */
+    dataset_fill(start, count, stride, &data_origin1[0][0]);
+
+    /* read data independently */
+    ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    assert(ret != FAIL);
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
+    assert(ret != FAIL);
+
+    /* read data independently */
+    ret = H5Dread(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    assert(ret != FAIL);
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
+    assert(ret == 0);
+
+    /* close dataset collectively */
+    ret=H5Dclose(dataset1);
+    assert(ret != FAIL);
+    ret=H5Dclose(dataset2);
+    assert(ret != FAIL);
+
+    /* release all IDs created */
+    H5Sclose(file_dataspace);
+
+    /* close the file collectively */
+    H5Fclose(fid1);
+}
+
+
+/*
+ * Example of using the parallel HDF5 library to create two datasets
+ * in one HDF5 file with collective parallel access support.
+ * The Datasets are of sizes (number-of-mpi-processes x DIM1) x DIM2.
+ * Each process controls only a slab of size DIM1 x DIM2 within each
+ * dataset. [Note: not so yet.  Datasets are of sizes DIM1xDIM2 and
+ * each process controls a hyperslab within.]
+ */
+
+void
+phdf5writeAll(char *filename)
+{
+    hid_t fid1;			/* HDF5 file IDs */
+    hid_t acc_tpl1;		/* File access templates */
+    hid_t xfer_plist;		/* Dataset transfer properties list */
+    hid_t sid1;   		/* Dataspace ID */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    hsize_t dims1[SPACE1_RANK] =
+	{SPACE1_DIM1,SPACE1_DIM2};	/* dataspace dim sizes */
+    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */
+
+    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
+    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    if (verbose)
+	printf("Collective write test on file %s\n", filename);
+
+    /* -------------------
+     * START AN HDF5 FILE
+     * -------------------*/
+    /* setup file access template with parallel IO access. */
+    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
+    assert(acc_tpl1 != FAIL);
+    MESG("H5Pcreate access succeed");
+    /* set Parallel access with communicator */
+    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);
+    assert(ret != FAIL);
+    MESG("H5Pset_fapl_mpio succeed");
+
+    /* create the file collectively */
+    fid1=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl1);
+    assert(fid1 != FAIL);
+    MESG("H5Fcreate succeed");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl1);
+    assert(ret != FAIL);
+
+
+    /* --------------------------
+     * Define the dimensions of the overall datasets
+     * and create the dataset
+     * ------------------------- */
+    /* setup dimensionality object */
+    sid1 = H5Screate_simple (SPACE1_RANK, dims1, NULL);
+    assert (sid1 != FAIL);
+    MESG("H5Screate_simple succeed");
+
+
+    /* create a dataset collectively */
+    dataset1 = H5Dcreate(fid1, DATASETNAME1, H5T_NATIVE_INT, sid1, H5P_DEFAULT);
+    assert(dataset1 != FAIL);
+    MESG("H5Dcreate succeed");
+
+    /* create another dataset collectively */
+    dataset2 = H5Dcreate(fid1, DATASETNAME2, H5T_NATIVE_INT, sid1, H5P_DEFAULT);
+    assert(dataset2 != FAIL);
+    MESG("H5Dcreate 2 succeed");
+
+    /*
+     * Set up dimensions of the slab this process accesses.
+     */
+
+    /* Dataset1: each process takes a block of rows. */
+    slab_set(start, count, stride, BYROW);
+if (verbose)
+    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
+	(unsigned long)start[0], (unsigned long)start[1],
+        (unsigned long)count[0], (unsigned long)count[1],
+        (unsigned long)(count[0]*count[1]));
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    assert(file_dataspace != FAIL);
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill the local slab with some trivial data */
+    dataset_fill(start, count, stride, &data_array1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    assert(xfer_plist != FAIL);
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    assert(ret != FAIL);
+    MESG("H5Pcreate xfer succeed");
+
+    /* write data collectively */
+    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    assert(ret != FAIL);
+    MESG("H5Dwrite succeed");
+
+    /* release all temporary handles. */
+    /* Could have used them for dataset2 but it is cleaner */
+    /* to create them again.*/
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+    /* Dataset2: each process takes a block of columns. */
+    slab_set(start, count, stride, BYCOL);
+if (verbose)
+    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
+	(unsigned long)start[0], (unsigned long)start[1],
+        (unsigned long)count[0], (unsigned long)count[1],
+        (unsigned long)(count[0]*count[1]));
+
+    /* put some trivial data in the data_array */
+    dataset_fill(start, count, stride, &data_array1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    assert(file_dataspace != FAIL);
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill the local slab with some trivial data */
+    dataset_fill(start, count, stride, &data_array1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    assert(xfer_plist != FAIL);
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    assert(ret != FAIL);
+    MESG("H5Pcreate xfer succeed");
+
+    /* write data independently */
+    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    assert(ret != FAIL);
+    MESG("H5Dwrite succeed");
+
+    /* release all temporary handles. */
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+
+    /*
+     * All writes completed.  Close datasets collectively
+     */
+    ret=H5Dclose(dataset1);
+    assert(ret != FAIL);
+    MESG("H5Dclose1 succeed");
+    ret=H5Dclose(dataset2);
+    assert(ret != FAIL);
+    MESG("H5Dclose2 succeed");
+
+    /* release all IDs created */
+    H5Sclose(sid1);
+
+    /* close the file collectively */
+    H5Fclose(fid1);
+}
+
+/*
+ * Example of using the parallel HDF5 library to read two datasets
+ * in one HDF5 file with collective parallel access support.
+ * The Datasets are of sizes (number-of-mpi-processes x DIM1) x DIM2.
+ * Each process controls only a slab of size DIM1 x DIM2 within each
+ * dataset. [Note: not so yet.  Datasets are of sizes DIM1xDIM2 and
+ * each process controls a hyperslab within.]
+ */
+
+void
+phdf5readAll(char *filename)
+{
+    hid_t fid1;			/* HDF5 file IDs */
+    hid_t acc_tpl1;		/* File access templates */
+    hid_t xfer_plist;		/* Dataset transfer properties list */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    DATATYPE data_array1[SPACE1_DIM1][SPACE1_DIM2];	/* data buffer */
+    DATATYPE data_origin1[SPACE1_DIM1][SPACE1_DIM2];	/* expected data buffer */
+
+    hsize_t start[SPACE1_RANK];			/* for hyperslab setting */
+    hsize_t count[SPACE1_RANK], stride[SPACE1_RANK];	/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    if (verbose)
+	printf("Collective read test on file %s\n", filename);
+
+    /* -------------------
+     * OPEN AN HDF5 FILE
+     * -------------------*/
+    /* setup file access template with parallel IO access. */
+    acc_tpl1 = H5Pcreate (H5P_FILE_ACCESS);
+    assert(acc_tpl1 != FAIL);
+    MESG("H5Pcreate access succeed");
+    /* set Parallel access with communicator */
+    ret = H5Pset_fapl_mpio(acc_tpl1, comm, info);
+    assert(ret != FAIL);
+    MESG("H5Pset_fapl_mpio succeed");
+
+    /* open the file collectively */
+    fid1=H5Fopen(filename,H5F_ACC_RDWR,acc_tpl1);
+    assert(fid1 != FAIL);
+    MESG("H5Fopen succeed");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl1);
+    assert(ret != FAIL);
+
+
+    /* --------------------------
+     * Open the datasets in it
+     * ------------------------- */
+    /* open the dataset1 collectively */
+    dataset1 = H5Dopen(fid1, DATASETNAME1);
+    assert(dataset1 != FAIL);
+    MESG("H5Dopen succeed");
+
+    /* open another dataset collectively */
+    dataset2 = H5Dopen(fid1, DATASETNAME1);
+    assert(dataset2 != FAIL);
+    MESG("H5Dopen 2 succeed");
+
+    /*
+     * Set up dimensions of the slab this process accesses.
+     */
+
+    /* Dataset1: each process takes a block of columns. */
+    slab_set(start, count, stride, BYCOL);
+if (verbose)
+    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
+	(unsigned long)start[0], (unsigned long)start[1],
+        (unsigned long)count[0], (unsigned long)count[1],
+        (unsigned long)(count[0]*count[1]));
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    assert(file_dataspace != FAIL);
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill dataset with test data */
+    dataset_fill(start, count, stride, &data_origin1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    assert(xfer_plist != FAIL);
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    assert(ret != FAIL);
+    MESG("H5Pcreate xfer succeed");
+
+    /* read data collectively */
+    ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    assert(ret != FAIL);
+    MESG("H5Dread succeed");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
+    assert(ret != FAIL);
+
+    /* release all temporary handles. */
+    /* Could have used them for dataset2 but it is cleaner */
+    /* to create them again.*/
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+    /* Dataset2: each process takes a block of rows. */
+    slab_set(start, count, stride, BYROW);
+if (verbose)
+    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), total datapoints=%lu\n",
+	(unsigned long)start[0], (unsigned long)start[1],
+        (unsigned long)count[0], (unsigned long)count[1],
+        (unsigned long)(count[0]*count[1]));
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    assert(file_dataspace != FAIL);
+    MESG("H5Dget_space succeed");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, NULL);
+    assert(ret != FAIL);
+    MESG("H5Sset_hyperslab succeed");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (SPACE1_RANK, count, NULL);
+    assert (mem_dataspace != FAIL);
+
+    /* fill dataset with test data */
+    dataset_fill(start, count, stride, &data_origin1[0][0]);
+    MESG("data_array initialized");
+    if (verbose){
+	MESG("data_array created");
+	dataset_print(start, count, stride, &data_array1[0][0]);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    assert(xfer_plist != FAIL);
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    assert(ret != FAIL);
+    MESG("H5Pcreate xfer succeed");
+
+    /* read data independently */
+    ret = H5Dread(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    assert(ret != FAIL);
+    MESG("H5Dread succeed");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, &data_array1[0][0], &data_origin1[0][0]);
+    assert(ret != FAIL);
+
+    /* release all temporary handles. */
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+
+    /*
+     * All reads completed.  Close datasets collectively
+     */
+    ret=H5Dclose(dataset1);
+    assert(ret != FAIL);
+    MESG("H5Dclose1 succeed");
+    ret=H5Dclose(dataset2);
+    assert(ret != FAIL);
+    MESG("H5Dclose2 succeed");
+
+    /* close the file collectively */
+    H5Fclose(fid1);
+}
+
+/*
+ * test file access by communicator besides COMM_WORLD.
+ * Split COMM_WORLD into two, one (even_comm) contains the original
+ * processes of even ranks.  The other (odd_comm) contains the original
+ * processes of odd ranks.  Processes in even_comm creates a file, then
+ * cloose it, using even_comm.  Processes in old_comm just do a barrier
+ * using odd_comm.  Then they all do a barrier using COMM_WORLD.
+ * If the file creation and cloose does not do correct collective action
+ * according to the communicator argument, the processes will freeze up
+ * sooner or later due to barrier mixed up.
+ */
+void
+test_split_comm_access(char filenames[][PATH_MAX])
+{
+    MPI_Comm comm;
+    MPI_Info info = MPI_INFO_NULL;
+    int color, mrc;
+    int newrank, newprocs;
+    hid_t fid;			/* file IDs */
+    hid_t acc_tpl;		/* File access properties */
+    herr_t ret;			/* generic return value */
+
+    if (verbose)
+	printf("Independent write test on file %s %s\n",
+	    filenames[0], filenames[1]);
+
+    color = mpi_rank%2;
+    mrc = MPI_Comm_split (MPI_COMM_WORLD, color, mpi_rank, &comm);
+    assert(mrc==MPI_SUCCESS);
+    MPI_Comm_size(comm,&newprocs);
+    MPI_Comm_rank(comm,&newrank);
+
+    if (color){
+	/* odd-rank processes */
+	mrc = MPI_Barrier(comm);
+	assert(mrc==MPI_SUCCESS);
+    }else{
+	/* even-rank processes */
+	/* setup file access template */
+	acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
+	assert(acc_tpl != FAIL);
+
+	/* set Parallel access with communicator */
+	ret = H5Pset_fapl_mpio(acc_tpl, comm, info);
+	assert(ret != FAIL);
+
+	/* create the file collectively */
+	fid=H5Fcreate(filenames[color],H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
+	assert(fid != FAIL);
+	MESG("H5Fcreate succeed");
+
+	/* Release file-access template */
+	ret=H5Pclose(acc_tpl);
+	assert(ret != FAIL);
+
+	ret=H5Fclose(fid);
+	assert(ret != FAIL);
+    }
+    if (mpi_rank == 0){
+	mrc = MPI_File_delete(filenames[color], info);
+	assert(mrc==MPI_SUCCESS);
+    }
+}
+
+/*
+ * Show command usage
+ */
+void
+usage(void)
+{
+    printf("Usage: testphdf5 [-f <prefix>] [-r] [-w] [-v]\n");
+    printf("\t-f\tfile prefix for parallel test files.\n");
+    printf("\t  \te.g. pfs:/PFS/myname\n");
+    printf("\t  \tcan be set via $" PARAPREFIX ".\n");
+    printf("\t  \tDefault is current directory.\n");
+    printf("\t-c\tno cleanup\n");
+    printf("\t-r\tno read\n");
+    printf("\t-w\tno write\n");
+    printf("\t-v\tverbose on\n");
+    printf("\tdefault do write then read\n");
+    printf("\n");
+}
+
+
+/*
+ * compose the test filename with the prefix supplied.
+ * return code: 0 if no error
+ *              1 otherwise.
+ */
+int
+mkfilenames(char *prefix)
+{
+    int i, n;
+    size_t strsize;
+
+    /* filename will be prefix/ParaEgN.h5 where N is 0 to 9. */
+    /* So, string must be big enough to hold the prefix, / and 10 more chars */
+    /* and the terminating null. */
+    strsize = strlen(prefix) + 12;
+    if (strsize > PATH_MAX){
+	printf("File prefix too long;  Use a short path name.\n");
+	return(1);
+    }
+    n = sizeof(testfiles)/sizeof(testfiles[0]);
+    if (n > 9){
+	printf("Warning: Too many entries in testfiles. "
+	    "Need to adjust the code to accommodate the large size.\n");
+    }
+    for (i=0; i<n; i++){
+	sprintf(testfiles[i], "%s/ParaEg%d.h5", prefix, i);
+    }
+    return(0);
+
+}
+
+
+/*
+ * parse the command line options
+ */
+int
+parse_options(int argc, char **argv){
+    int i, n;
+
+    /* initialize testfiles to nulls */
+    n = sizeof(testfiles)/sizeof(testfiles[0]);
+    for (i=0; i<n; i++){
+	testfiles[i][0] = '\0';
+    }
+
+    while (--argc){
+	if (**(++argv) != '-'){
+	    break;
+	}else{
+	    switch(*(*argv+1)){
+		case 'f':   ++argv;
+			    if (--argc < 1){
+				usage();
+				nerrors++;
+				return(1);
+			    }
+			    if (mkfilenames(*argv)){
+				nerrors++;
+				return(1);
+			    }
+			    break;
+		case 'c':   docleanup = 0;	/* no cleanup */
+			    break;
+		case 'r':   doread = 0;
+			    break;
+		case 'w':   dowrite = 0;
+			    break;
+		case 'v':   verbose = 1;
+			    break;
+		default:    usage();
+			    nerrors++;
+			    return(1);
+	    }
+	}
+    }
+
+    /* check the file prefix */
+    if (testfiles[0][0] == '\0'){
+	/* try get it from environment variable HDF5_PARAPREFIX */
+	char *env;
+	char *env_default = ".";	/* default to current directory */
+	if ((env=getenv(PARAPREFIX))==NULL){
+	    env = env_default;
+	}
+	mkfilenames(env);
+    }
+    return(0);
+}
+
+
+/*
+ * cleanup test files created
+ */
+void
+cleanup(void)
+{
+    int i, n;
+
+    n = sizeof(testfiles)/sizeof(testfiles[0]);
+    for (i=0; i<n; i++){
+	MPI_File_delete(testfiles[i], MPI_INFO_NULL);
+    }
+}
+
+
+/* Main Program */
+int
+main(int argc, char **argv)
+{
+    int mpi_namelen;
+    char mpi_name[MPI_MAX_PROCESSOR_NAME];
+    int i, n;
+
+    MPI_Init(&argc,&argv);
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+    MPI_Get_processor_name(mpi_name,&mpi_namelen);
+    /* Make sure datasets can be divided into equal chunks by the processes */
+    if ((SPACE1_DIM1 % mpi_size) || (SPACE1_DIM2 % mpi_size)){
+	printf("DIM1(%d) and DIM2(%d) must be multiples of processes (%d)\n",
+	    SPACE1_DIM1, SPACE1_DIM2, mpi_size);
+	nerrors++;
+	goto finish;
+    }
+
+    if (parse_options(argc, argv) != 0)
+	goto finish;
+
+    /* show test file names */
+    if (mpi_rank == 0){
+	n = sizeof(testfiles)/sizeof(testfiles[0]);
+	printf("Parallel test files are:\n");
+	for (i=0; i<n; i++){
+	    printf("   %s\n", testfiles[i]);
+	}
+    }
+
+    if (dowrite){
+	MPI_BANNER("testing PHDF5 dataset using split communicators...");
+	test_split_comm_access(testfiles);
+	MPI_BANNER("testing PHDF5 dataset independent write...");
+	phdf5writeInd(testfiles[0]);
+	MPI_BANNER("testing PHDF5 dataset collective write...");
+	phdf5writeAll(testfiles[1]);
+    }
+    if (doread){
+	MPI_BANNER("testing PHDF5 dataset independent read...");
+	phdf5readInd(testfiles[0]);
+	MPI_BANNER("testing PHDF5 dataset collective read...");
+	phdf5readAll(testfiles[1]);
+    }
+
+    if (!(dowrite || doread)){
+	usage();
+	nerrors++;
+    }
+
+finish:
+    if (mpi_rank == 0){		/* only process 0 reports */
+	if (nerrors)
+	    printf("***PHDF5 tests detected %d errors***\n", nerrors);
+	else{
+	    printf("===================================\n");
+	    printf("PHDF5 tests finished with no errors\n");
+	    printf("===================================\n");
+	}
+    }
+    if (docleanup)
+	cleanup();
+    MPI_Finalize();
+
+    return(nerrors);
+}
+
+#else /* H5_HAVE_PARALLEL */
+/* dummy program since H5_HAVE_PARALLE is not configured in */
+int
+main(void)
+{
+printf("No PHDF5 example because parallel is not configured in\n");
+return(0);
+}
+#endif /* H5_HAVE_PARALLEL */

Added: packages/hdf5/branches/upstream/current/fortran/Makefile.dist
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/Makefile.dist	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/Makefile.dist	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,36 @@
+# Top-level distributed Makefile 			       -*- makefile -*-
+
+# 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 Makefile is a stub (copied from Makefile.dist) which will run
+# configure and then invoke the same target in the new Makefile created
+# by configure.
+
+# Uncomment this variable if your make(1) doesn't set it automatically.
+#
+#MAKE=make
+
+
+SHELL=/bin/sh
+
+all lib progs check test _test install uninstall dep depend: _config
+	$(MAKE) $@
+
+clean mostlyclean distclean maintainer-clean TAGS: _config
+	$(MAKE) $@
+
+_config:
+	sh configure
+
+.PHONY: all lib progs test install uninstall dep depend clean mostlyclean     \
+	distclean maintainer-clean _config

Added: packages/hdf5/branches/upstream/current/fortran/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,134 @@
+## Top-level HDF5-Fortran Makefile(.in)
+##
+## 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 makefile mostly just reinvokes make in the various subdirectories
+## but does so in the correct order.  You can alternatively invoke make from
+## each subdirectory manually.
+##
+top_srcdir=@top_srcdir@
+top_builddir=..
+srcdir=@srcdir@
+
+ at COMMENCE@
+
+# Subdirectories in build-order (not including `examples')
+SUBDIRS=src test @TESTPARALLEL@
+
+##############################################################################
+##		    T A R G E T S
+##
+## all:		Build libraries, header files, tests, and programs in the
+##	 	various subdirectories but does not run tests or install the
+##		library, header files, or programs.  The components can be
+##		built individually with the targets lib, progs, and tests.
+##
+## check:	Test the uninstalled library to make sure it works. You may
+##		also say `test' or `_test' (`test' doesn't work from the top
+##		level directory for some versions of make because `test' is
+##		also a directory).
+##
+## install:	Installs libraries, header files, programs, and documentation
+##		in the various directories under the prefix directory (lib,
+##		include, bin, man, info).  Use the `--prefix=PATH' option
+##		to `configure' (or `config.status') or say `--help' for
+##		other alternatives.  The default prefix is `/usr/local'.
+##
+## uninstall:	Delete all the installed files that the `install' target
+##		created (but not the noninstalled files such as `make all'
+##		created).
+##
+## clean:	Removes temporary files except those that record the
+##		configuration and those that are part of the distribution.
+##
+## mostlyclean:	Like `clean' except it doesn't delete a few files like
+##		libraries, programs, and/or generated header files because
+##		regenerating them is rarely necessary and takes a lot of time.
+##
+## distclean:	Deletes all files that are created by configuring or building
+##		HDF5.  If you have unpacked the source and built HDF5 without
+##		creating any other files, then `make distclean' will leave
+##		only the files that were in the distrubution.
+##
+## maintainer-clean:
+##		Like `distclean' except it deletes more files.  It deletes
+##		all generated files.  This target is not intended for normal
+##		users; it deletes files that may require special tools to
+##		rebuild.
+##
+## TAGS:	Updates the tags table for this program.
+##
+## dep depend:	Builds dependencies in all subdirectories.  These targets
+##		might not be available on certain combinations of make
+##		programs and C compilers.  At the other extreme, the GNU
+##		make used in combination with gcc will maintain dependency
+##		information automatically.
+lib progs check check-s check-p test _test uninstall:
+	@@SETX@; for d in $(SUBDIRS); do				      \
+	   (cd $$d && $(MAKE) $@) || exit 1;				      \
+	done
+
+tests TAGS dep depend:
+	@@SETX@; for d in $(SUBDIRS); do			       	      \
+	   (cd $$d && $(MAKE) $@) || exit 1;				      \
+	done
+
+install-all:
+	@$(MAKE) install
+
+install:
+	@@SETX@; for d in $(SUBDIRS); do				      \
+	   (cd $$d && $(MAKE) $@) || exit 1;				      \
+	done
+	@$(MAKE) install-examples
+	@$(LT) --mode=finish $(libdir)
+
+install-examples:
+	(cd examples && $(MAKE) $@) || exit 1;
+
+uninstall-examples:
+	(cd examples && $(MAKE) $@) || exit 1;
+
+## Check if installation is correct by checking if examples can be built.
+## This requires a proper "make install" has been done.
+check-install:
+	(cd examples && $(MAKE) check) || exit 1
+
+.PHONY: all lib progs test _test install uninstall dep depend clean           \
+	mostlyclean distclean maintainer-clean
+
+clean mostlyclean:
+	@@SETX@; for d in $(SUBDIRS) examples; do			      \
+	   (cd $$d && $(MAKE) $@);					      \
+	done
+	-$(RM) conftest conftest.c
+
+distclean:
+	@@SETX@; for d in $(SUBDIRS) examples; do			      \
+	   (cd $$d && $(MAKE) $@);					      \
+	done
+	-$(RM) config/commence config/conclude
+	-$(RM) config/stamp1 config/stamp2 config/depend?
+	-$(RM) config.cache config.log config.status
+	-$(RM) src/H5config_fortran.h src/H5pubconf_fortran.h
+	-$(RM) libtool Makefile
+
+maintainer-clean:
+	@echo "This target is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+	@@SETX@; for d in $(SUBDIRS) examples; do			      \
+	   (cd $$d && $(MAKE) $@);					      \
+	done
+	-$(RM) config.cache config.log config.status src/H5config_fortran.h
+	-$(RM) configure src/H5config_fortran.h.in
+

Added: packages/hdf5/branches/upstream/current/fortran/aclocal.m4
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/aclocal.m4	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/aclocal.m4	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3528 @@
+# aclocal.m4 generated automatically by aclocal 1.6 -*- Autoconf -*-
+
+# Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+# libtool.m4 - Configure libtool for the host system. -*-Shell-script-*-
+
+# serial 46 AC_PROG_LIBTOOL
+
+AC_DEFUN([AC_PROG_LIBTOOL],
+[AC_REQUIRE([AC_LIBTOOL_SETUP])dnl
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+AC_SUBST(LIBTOOL)dnl
+
+# Prevent multiple expansion
+define([AC_PROG_LIBTOOL], [])
+])
+
+AC_DEFUN([AC_LIBTOOL_SETUP],
+[AC_PREREQ(2.13)dnl
+AC_REQUIRE([AC_ENABLE_SHARED])dnl
+AC_REQUIRE([AC_ENABLE_STATIC])dnl
+AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_PROG_LD])dnl
+AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl
+AC_REQUIRE([AC_PROG_NM])dnl
+AC_REQUIRE([AC_PROG_LN_S])dnl
+AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl
+AC_REQUIRE([AC_OBJEXT])dnl
+AC_REQUIRE([AC_EXEEXT])dnl
+dnl
+
+_LT_AC_PROG_ECHO_BACKSLASH
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    AC_PATH_MAGIC
+  fi
+  ;;
+esac
+
+AC_CHECK_TOOL(RANLIB, ranlib, :)
+AC_CHECK_TOOL(STRIP, strip, :)
+
+ifdef([AC_PROVIDE_AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no)
+ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
+enable_win32_dll=yes, enable_win32_dll=no)
+
+AC_ARG_ENABLE(libtool-lock,
+  [  --disable-libtool-lock  avoid locking (might break parallel builds)])
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '[#]line __oline__ "configure"' > conftest.$ac_ext
+  if AC_TRY_EVAL(ac_compile); then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
+    [AC_LANG_SAVE
+     AC_LANG_C
+     AC_TRY_LINK([],[],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
+     AC_LANG_RESTORE])
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+
+ifdef([AC_PROVIDE_AC_LIBTOOL_WIN32_DLL],
+[*-*-cygwin* | *-*-mingw* | *-*-pw32*)
+  AC_CHECK_TOOL(DLLTOOL, dlltool, false)
+  AC_CHECK_TOOL(AS, as, false)
+  AC_CHECK_TOOL(OBJDUMP, objdump, false)
+
+  # recent cygwin and mingw systems supply a stub DllMain which the user
+  # can override, but on older systems we have to supply one
+  AC_CACHE_CHECK([if libtool should supply DllMain function], lt_cv_need_dllmain,
+    [AC_TRY_LINK([],
+      [extern int __attribute__((__stdcall__)) DllMain(void*, int, void*);
+      DllMain (0, 0, 0);],
+      [lt_cv_need_dllmain=no],[lt_cv_need_dllmain=yes])])
+
+  case $host/$CC in
+  *-*-cygwin*/gcc*-mno-cygwin*|*-*-mingw*)
+    # old mingw systems require "-dll" to link a DLL, while more recent ones
+    # require "-mdll"
+    SAVE_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS -mdll"
+    AC_CACHE_CHECK([how to link DLLs], lt_cv_cc_dll_switch,
+      [AC_TRY_LINK([], [], [lt_cv_cc_dll_switch=-mdll],[lt_cv_cc_dll_switch=-dll])])
+    CFLAGS="$SAVE_CFLAGS" ;;
+  *-*-cygwin* | *-*-pw32*)
+    # cygwin systems need to pass --dll to the linker, and not link
+    # crt.o which will require a WinMain at 16 definition.
+    lt_cv_cc_dll_switch="-Wl,--dll -nostartfiles" ;;
+  esac
+  ;;
+  ])
+esac
+
+_LT_AC_LTCONFIG_HACK
+
+])
+
+# AC_LIBTOOL_HEADER_ASSERT
+# ------------------------
+AC_DEFUN([AC_LIBTOOL_HEADER_ASSERT],
+[AC_CACHE_CHECK([whether $CC supports assert without backlinking],
+    [lt_cv_func_assert_works],
+    [case $host in
+    *-*-solaris*)
+      if test "$GCC" = yes && test "$with_gnu_ld" != yes; then
+        case `$CC --version 2>/dev/null` in
+        [[12]].*) lt_cv_func_assert_works=no ;;
+        *)        lt_cv_func_assert_works=yes ;;
+        esac
+      fi
+      ;;
+    esac])
+
+if test "x$lt_cv_func_assert_works" = xyes; then
+  AC_CHECK_HEADERS(assert.h)
+fi
+])# AC_LIBTOOL_HEADER_ASSERT
+
+# _LT_AC_CHECK_DLFCN
+# --------------------
+AC_DEFUN([_LT_AC_CHECK_DLFCN],
+[AC_CHECK_HEADERS(dlfcn.h)
+])# _LT_AC_CHECK_DLFCN
+
+# AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+# ---------------------------------
+AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_NM])
+AC_REQUIRE([AC_OBJEXT])
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+AC_MSG_CHECKING([command to parse $NM output])
+AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [dnl
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[[BCDEGRST]]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[[BCDT]]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[[ABCDGISTW]]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+irix*)
+  symcode='[[BCDEGRST]]'
+  ;;
+solaris* | sysv5*)
+  symcode='[[BDT]]'
+  ;;
+sysv4)
+  symcode='[[DFNSTU]]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $host_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
+  symcode='[[ABCDGISTW]]'
+fi
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Write the raw and C identifiers.
+lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ 	]]\($symcode$symcode*\)[[ 	]][[ 	]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if AC_TRY_EVAL(ac_compile); then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if egrep ' nm_test_var$' "$nlist" >/dev/null; then
+	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr address;
+}
+lt_preloaded_symbols[[]] =
+{
+EOF
+	  sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  save_LIBS="$LIBS"
+	  save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$no_builtin_flag"
+	  if AC_TRY_EVAL(ac_link) && test -s conftest; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$save_LIBS"
+	  CFLAGS="$save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&AC_FD_CC
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&AC_FD_CC
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AC_FD_CC
+    fi
+  else
+    echo "$progname: failed program was:" >&AC_FD_CC
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+])
+global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  global_symbol_to_cdecl=
+  global_symbol_to_c_name_address=
+else
+  global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
+  global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address"
+fi
+if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address";
+then
+  AC_MSG_RESULT(failed)
+else
+  AC_MSG_RESULT(ok)
+fi
+]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE
+
+# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
+# ---------------------------------
+AC_DEFUN([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR],
+[# Find the correct PATH separator.  Usually this is `:', but
+# DJGPP uses `;' like DOS.
+if test "X${PATH_SEPARATOR+set}" != Xset; then
+  UNAME=${UNAME-`uname 2>/dev/null`}
+  case X$UNAME in
+    *-DOS) lt_cv_sys_path_separator=';' ;;
+    *)     lt_cv_sys_path_separator=':' ;;
+  esac
+  PATH_SEPARATOR=$lt_cv_sys_path_separator
+fi
+])# _LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
+
+# _LT_AC_PROG_ECHO_BACKSLASH
+# --------------------------
+# Add some code to the start of the generated configure script which
+# will find an echo command which doesn't interpret backslashes.
+AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH],
+[ifdef([AC_DIVERSION_NOTICE], [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
+			      [AC_DIVERT_PUSH(NOTICE)])
+_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X[$]1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X[$]1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
+fi
+
+if test "X[$]1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+$*
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL [$]0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "[$]0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
+fi
+
+AC_SUBST(ECHO)
+AC_DIVERT_POP
+])# _LT_AC_PROG_ECHO_BACKSLASH
+
+# _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
+#                           ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
+# ------------------------------------------------------------------
+AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF],
+[if test "$cross_compiling" = yes; then :
+  [$4]
+else
+  AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+  lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+[#line __oline__ "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}]
+EOF
+  if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) $1 ;;
+      x$lt_dlneed_uscore) $2 ;;
+      x$lt_unknown|x*) $3 ;;
+    esac
+  else :
+    # compilation failed
+    $3
+  fi
+fi
+rm -fr conftest*
+])# _LT_AC_TRY_DLOPEN_SELF
+
+# AC_LIBTOOL_DLOPEN_SELF
+# -------------------
+AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF],
+[if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  *)
+    AC_CHECK_FUNC([shl_load],
+          [lt_cv_dlopen="shl_load"],
+      [AC_CHECK_LIB([dld], [shl_load],
+            [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"],
+	[AC_CHECK_FUNC([dlopen],
+	      [lt_cv_dlopen="dlopen"],
+	  [AC_CHECK_LIB([dl], [dlopen],
+	        [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
+	    [AC_CHECK_LIB([svld], [dlopen],
+	          [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
+	      [AC_CHECK_LIB([dld], [dld_link],
+	            [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"])
+	      ])
+	    ])
+	  ])
+	])
+      ])
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+    AC_REQUIRE([_LT_AC_CHECK_DLFCN])dnl
+    test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    AC_CACHE_CHECK([whether a program can dlopen itself],
+	  lt_cv_dlopen_self, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
+	    lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
+    ])
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
+    	  lt_cv_dlopen_self_static, [dnl
+	  _LT_AC_TRY_DLOPEN_SELF(
+	    lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
+	    lt_cv_dlopen_self_static=no,  lt_cv_dlopen_self_static=cross)
+      ])
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+])# AC_LIBTOOL_DLOPEN_SELF
+
+AC_DEFUN([_LT_AC_LTCONFIG_HACK],
+[AC_REQUIRE([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])dnl
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([[\\"\\`$\\\\]]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([[\\"\\`\\\\]]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+need_locks="$enable_libtool_lock"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+if test x"$host" != x"$build"; then
+  ac_tool_prefix=${host_alias}-
+else
+  ac_tool_prefix=
+fi
+
+# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+case $host_os in
+linux-gnu*) ;;
+linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+esac
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+    ;;
+  *)
+    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Allow CC to be a program name with arguments.
+set dummy $CC
+compiler="[$]2"
+
+AC_MSG_CHECKING([for objdir])
+rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+AC_MSG_RESULT($objdir)
+
+
+AC_ARG_WITH(pic,
+[  --with-pic              try to use only PIC/non-PIC objects [default=use both]],
+pic_mode="$withval", pic_mode=default)
+test -z "$pic_mode" && pic_mode=default
+
+# We assume here that the value for lt_cv_prog_cc_pic will not be cached
+# in isolation, and that seeing it set (from the cache) indicates that
+# the associated values are set (in the cache) correctly too.
+AC_MSG_CHECKING([for $compiler option to produce PIC])
+AC_CACHE_VAL(lt_cv_prog_cc_pic,
+[ lt_cv_prog_cc_pic=
+  lt_cv_prog_cc_shlib=
+  lt_cv_prog_cc_wl=
+  lt_cv_prog_cc_static=
+  lt_cv_prog_cc_no_builtin=
+  lt_cv_prog_cc_can_build_shared=$can_build_shared
+
+  if test "$GCC" = yes; then
+    lt_cv_prog_cc_wl='-Wl,'
+    lt_cv_prog_cc_static='-static'
+
+    case $host_os in
+    aix*)
+      # Below there is a dirty hack to force normal static linking with -ldl
+      # The problem is because libdl dynamically linked with both libc and
+      # libC (AIX C++ library), which obviously doesn't included in libraries
+      # list by gcc. This cause undefined symbols with -static flags.
+      # This hack allows C programs to be linked with "-static -ldl", but
+      # not sure about C++ programs.
+      lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_cv_prog_cc_pic='-fno-common'
+      ;;
+    cygwin* | mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_cv_prog_cc_pic='-DDLL_EXPORT'
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	 lt_cv_prog_cc_pic=-Kconform_pic
+      fi
+      ;;
+    *)
+      lt_cv_prog_cc_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for PIC flags for the system compiler.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      lt_cv_prog_cc_wl='-Wl,'
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_cv_prog_cc_static='-Bstatic'
+      else
+        ####################################################################
+        ## HACK Alert! This is causing problems with C++ on SP3...We'll just
+        ## remove this...THERE! All better now.
+        ####################################################################
+        ##lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
+		:
+      fi
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
+      lt_cv_prog_cc_pic='+Z'
+      ;;
+
+    irix5* | irix6*)
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static='-non_shared'
+      # PIC (with -KPIC) is the default.
+      ;;
+
+    cygwin* | mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_cv_prog_cc_pic='-DDLL_EXPORT'
+      ;;
+
+    newsos6)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      # All OSF/1 code is PIC.
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_cv_prog_cc_pic='-Kpic'
+      lt_cv_prog_cc_static='-dn'
+      lt_cv_prog_cc_shlib='-belf'
+      ;;
+
+    solaris*)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      lt_cv_prog_cc_wl='-Wl,'
+      ;;
+
+    sunos4*)
+      lt_cv_prog_cc_pic='-PIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      lt_cv_prog_cc_wl='-Qoption ld '
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      if test "x$host_vendor" = xsni; then
+	lt_cv_prog_cc_wl='-LD'
+      else
+	lt_cv_prog_cc_wl='-Wl,'
+      fi
+      ;;
+
+    uts4*)
+      lt_cv_prog_cc_pic='-pic'
+      lt_cv_prog_cc_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_cv_prog_cc_pic='-Kconform_pic'
+	lt_cv_prog_cc_static='-Bstatic'
+      fi
+      ;;
+
+    *)
+      lt_cv_prog_cc_can_build_shared=no
+      ;;
+    esac
+  fi
+])
+if test -z "$lt_cv_prog_cc_pic"; then
+  AC_MSG_RESULT([none])
+else
+  AC_MSG_RESULT([$lt_cv_prog_cc_pic])
+
+  # Check to make sure the pic_flag actually works.
+  AC_MSG_CHECKING([if $compiler PIC flag $lt_cv_prog_cc_pic works])
+  AC_CACHE_VAL(lt_cv_prog_cc_pic_works, [dnl
+    save_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
+    AC_TRY_COMPILE([], [], [dnl
+      case $host_os in
+      hpux9* | hpux10* | hpux11*)
+	# On HP-UX, both CC and GCC only warn that PIC is supported... then
+	# they create non-PIC objects.  So, if there were any warnings, we
+	# assume that PIC is not supported.
+	if test -s conftest.err; then
+	  lt_cv_prog_cc_pic_works=no
+	else
+	  lt_cv_prog_cc_pic_works=yes
+	fi
+	;;
+      *)
+	lt_cv_prog_cc_pic_works=yes
+	;;
+      esac
+    ], [dnl
+      lt_cv_prog_cc_pic_works=no
+    ])
+    CFLAGS="$save_CFLAGS"
+  ])
+
+  if test "X$lt_cv_prog_cc_pic_works" = Xno; then
+    lt_cv_prog_cc_pic=
+    lt_cv_prog_cc_can_build_shared=no
+  else
+    lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
+  fi
+
+  AC_MSG_RESULT([$lt_cv_prog_cc_pic_works])
+fi
+
+# Check for any special shared library compilation flags.
+if test -n "$lt_cv_prog_cc_shlib"; then
+  AC_MSG_WARN([\`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries])
+  if echo "$old_CC $old_CFLAGS " | egrep -e "[[ 	]]$lt_cv_prog_cc_shlib[[ 	]]" >/dev/null; then :
+  else
+   AC_MSG_WARN([add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure])
+    lt_cv_prog_cc_can_build_shared=no
+  fi
+fi
+
+AC_MSG_CHECKING([if $compiler static flag $lt_cv_prog_cc_static works])
+AC_CACHE_VAL([lt_cv_prog_cc_static_works], [dnl
+  lt_cv_prog_cc_static_works=no
+  save_LDFLAGS="$LDFLAGS"
+  LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
+  AC_TRY_LINK([], [], [lt_cv_prog_cc_static_works=yes])
+  LDFLAGS="$save_LDFLAGS"
+])
+
+# Belt *and* braces to stop my trousers falling down:
+test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
+AC_MSG_RESULT([$lt_cv_prog_cc_static_works])
+
+pic_flag="$lt_cv_prog_cc_pic"
+special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
+wl="$lt_cv_prog_cc_wl"
+link_static_flag="$lt_cv_prog_cc_static"
+no_builtin_flag="$lt_cv_prog_cc_no_builtin"
+can_build_shared="$lt_cv_prog_cc_can_build_shared"
+
+
+# Check to see if options -o and -c are simultaneously supported by compiler
+AC_MSG_CHECKING([if $compiler supports -c -o file.$ac_objext])
+AC_CACHE_VAL([lt_cv_compiler_c_o], [
+$rm -r conftest 2>/dev/null
+mkdir conftest
+cd conftest
+echo "int some_variable = 0;" > conftest.$ac_ext
+mkdir out
+# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+# that will create temporary files in the current directory regardless of
+# the output directory.  Thus, making CWD read-only will cause this test
+# to fail, enabling locking or at least warning the user not to do parallel
+# builds.
+chmod -w .
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
+compiler_c_o=no
+if { (eval echo configure:__oline__: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
+  # The compiler can only warn and ignore the option if not recognized
+  # So say no if there are warnings
+  if test -s out/conftest.err; then
+    lt_cv_compiler_c_o=no
+  else
+    lt_cv_compiler_c_o=yes
+  fi
+else
+  # Append any errors to the config.log.
+  cat out/conftest.err 1>&AC_FD_CC
+  lt_cv_compiler_c_o=no
+fi
+CFLAGS="$save_CFLAGS"
+chmod u+w .
+$rm conftest* out/*
+rmdir out
+cd ..
+rmdir conftest
+$rm -r conftest 2>/dev/null
+])
+compiler_c_o=$lt_cv_compiler_c_o
+AC_MSG_RESULT([$compiler_c_o])
+
+if test x"$compiler_c_o" = x"yes"; then
+  # Check to see if we can write to a .lo
+  AC_MSG_CHECKING([if $compiler supports -c -o file.lo])
+  AC_CACHE_VAL([lt_cv_compiler_o_lo], [
+  lt_cv_compiler_o_lo=no
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -c -o conftest.lo"
+  save_objext="$ac_objext"
+  ac_objext=lo
+  AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
+    # The compiler can only warn and ignore the option if not recognized
+    # So say no if there are warnings
+    if test -s conftest.err; then
+      lt_cv_compiler_o_lo=no
+    else
+      lt_cv_compiler_o_lo=yes
+    fi
+  ])
+  ac_objext="$save_objext"
+  CFLAGS="$save_CFLAGS"
+  ])
+  compiler_o_lo=$lt_cv_compiler_o_lo
+  AC_MSG_RESULT([$compiler_o_lo])
+else
+  compiler_o_lo=no
+fi
+
+# Check to see if we can do hard links to lock some files if needed
+hard_links="nottested"
+if test "$compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  AC_MSG_CHECKING([if we can lock with hard links])
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  AC_MSG_RESULT([$hard_links])
+  if test "$hard_links" = no; then
+    AC_MSG_WARN([\`$CC' does not support \`-c -o', so \`make -j' may be unsafe])
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+if test "$GCC" = yes; then
+  # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
+  AC_MSG_CHECKING([if $compiler supports -fno-rtti -fno-exceptions])
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
+  compiler_rtti_exceptions=no
+  AC_TRY_COMPILE([], [int some_variable = 0;], [dnl
+    # The compiler can only warn and ignore the option if not recognized
+    # So say no if there are warnings
+    if test -s conftest.err; then
+      compiler_rtti_exceptions=no
+    else
+      compiler_rtti_exceptions=yes
+    fi
+  ])
+  CFLAGS="$save_CFLAGS"
+  AC_MSG_RESULT([$compiler_rtti_exceptions])
+
+  if test "$compiler_rtti_exceptions" = "yes"; then
+    no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
+  else
+    no_builtin_flag=' -fno-builtin'
+  fi
+fi
+
+# See if the linker supports building shared libraries.
+AC_MSG_CHECKING([whether the linker ($LD) supports shared libraries])
+
+allow_undefined_flag=
+no_undefined_flag=
+need_lib_prefix=unknown
+need_version=unknown
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+archive_cmds=
+archive_expsym_cmds=
+old_archive_from_new_cmds=
+old_archive_from_expsyms_cmds=
+export_dynamic_flag_spec=
+whole_archive_flag_spec=
+thread_safe_flag_spec=
+hardcode_into_libs=no
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+hardcode_shlibpath_var=unsupported
+runpath_var=
+link_all_deplibs=unknown
+always_export_symbols=no
+export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
+# include_expsyms should be a list of space-separated symbols to be *always*
+# included in the symbol list
+include_expsyms=
+# exclude_expsyms can be an egrep regular expression of symbols to exclude
+# it will be wrapped by ` (' and `)$', so one must not match beginning or
+# end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+# as well as any symbol that contains `d'.
+exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+# platforms (ab)use it in PIC code, but their linkers get confused if
+# the symbol is explicitly referenced.  Since portable code cannot
+# rely on this symbol name, it's probably fine to never include it in
+# preloaded symbol tables.
+extract_expsyms_cmds=
+
+case $host_os in
+cygwin* | mingw* | pw32*)
+  # FIXME: the MSVC++ port hasn't been tested in a loooong time
+  # When not using gcc, we currently assume that we are using
+  # Microsoft Visual C++.
+  if test "$GCC" != yes; then
+    with_gnu_ld=no
+  fi
+  ;;
+openbsd*)
+  with_gnu_ld=no
+  ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # If archive_cmds runs LD, not CC, wlarc should be empty
+  wlarc='${wl}'
+
+  # See if GNU ld supports shared libraries.
+  case $host_os in
+  aix3* | aix4* | aix5*)
+    # On AIX, the GNU linker is very broken
+    # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
+    ld_shlibs=no
+    cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+    ;;
+
+  amigaos*)
+    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+
+    # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+    # that the semantics of dynamic libraries on AmigaOS, at least up
+    # to version 4, is to share data among multiple programs linked
+    # with the same dynamic library.  Since this doesn't match the
+    # behavior of shared libraries on other platforms, we can use
+    # them.
+    ld_shlibs=no
+    ;;
+
+  beos*)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      allow_undefined_flag=unsupported
+      # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+      # support --undefined.  This deserves some investigation.  FIXME
+      archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # hardcode_libdir_flag_spec is actually meaningless, as there is
+    # no search path for DLLs.
+    hardcode_libdir_flag_spec='-L$libdir'
+    allow_undefined_flag=unsupported
+    always_export_symbols=yes
+
+    extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
+      sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
+      test -f $output_objdir/impgen.exe || (cd $output_objdir && \
+      if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
+      else $CC -o impgen impgen.c ; fi)~
+      $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
+
+    old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
+
+    # cygwin and mingw dlls have different entry points and sets of symbols
+    # to exclude.
+    # FIXME: what about values for MSVC?
+    dll_entry=__cygwin_dll_entry at 12
+    dll_exclude_symbols=DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12~
+    case $host_os in
+    mingw*)
+      # mingw values
+      dll_entry=_DllMainCRTStartup at 12
+      dll_exclude_symbols=DllMain at 12,DllMainCRTStartup at 12,DllEntryPoint at 12~
+      ;;
+    esac
+
+    # mingw and cygwin differ, and it's simplest to just exclude the union
+    # of the two symbol sets.
+    dll_exclude_symbols=DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12,DllMainCRTStartup at 12,DllEntryPoint at 12
+
+    # recent cygwin and mingw systems supply a stub DllMain which the user
+    # can override, but on older systems we have to supply one (in ltdll.c)
+    if test "x$lt_cv_need_dllmain" = "xyes"; then
+      ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
+      ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~
+	test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
+    else
+      ltdll_obj=
+      ltdll_cmds=
+    fi
+
+    # Extract the symbol export list from an `--export-all' def file,
+    # then regenerate the def file from the symbol export list, so that
+    # the compiled dll only exports the symbol export list.
+    # Be careful not to strip the DATA tag left be newer dlltools.
+    export_symbols_cmds="$ltdll_cmds"'
+      $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
+      sed -e "1,/EXPORTS/d" -e "s/ @ [[0-9]]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
+
+    # If the export-symbols file already is a .def file (1st line
+    # is EXPORTS), use it as is.
+    # If DATA tags from a recent dlltool are present, honour them!
+    archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname-def;
+      else
+	echo EXPORTS > $output_objdir/$soname-def;
+	_lt_hint=1;
+	cat $export_symbols | while read symbol; do
+	 set dummy \$symbol;
+	 case \[$]# in
+	   2) echo "   \[$]2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
+	   *) echo "     \[$]2 @ \$_lt_hint \[$]3 ; " >> $output_objdir/$soname-def;;
+	 esac;
+	 _lt_hint=`expr 1 + \$_lt_hint`;
+	done;
+      fi~
+      '"$ltdll_cmds"'
+      $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
+      $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
+      $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
+    ;;
+
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+      wlarc=
+    else
+      archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    fi
+    ;;
+
+  solaris* | sysv5*)
+    if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+      ld_shlibs=no
+      cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+    elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+  sunos4*)
+    archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+    wlarc=
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  *)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+  esac
+
+  if test "$ld_shlibs" = yes; then
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    case $host_os in
+    cygwin* | mingw* | pw32*)
+      # dlltool doesn't understand --whole-archive et. al.
+      whole_archive_flag_spec=
+      ;;
+    *)
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
+	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+	whole_archive_flag_spec=
+      fi
+      ;;
+    esac
+  fi
+else
+  # PORTME fill in a description of your system's linker (not GNU ld)
+  case $host_os in
+  aix3*)
+    allow_undefined_flag=unsupported
+    always_export_symbols=yes
+    archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+    # Note: this linker hardcodes the directories in LIBPATH if there
+    # are no directories specified by -L.
+    hardcode_minus_L=yes
+    if test "$GCC" = yes && test -z "$link_static_flag"; then
+      # Neither direct hardcoding nor static linking is supported with a
+      # broken collect2.
+      hardcode_direct=unsupported
+    fi
+    ;;
+
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[[23]]|aix4.[[23]].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	done
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    hardcode_direct=yes
+    archive_cmds=''
+    hardcode_libdir_separator=':'
+    if test "$GCC" = yes; then
+      case $host_os in aix4.[[012]]|aix4.[[012]].*)
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	  strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  hardcode_direct=yes
+	else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	fi
+      esac
+
+      shared_flag='-shared'
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	shared_flag='${wl}-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall can do strange things, so it is better to
+    # generate a list of symbols to export.
+    always_export_symbols=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      allow_undefined_flag='-berok'
+      hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
+      archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+    else
+      if test "$host_cpu" = ia64; then
+	hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	allow_undefined_flag="-z nodefs"
+	archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+      else
+        #######################################################################
+        # This is a MAJOR HACK(tm) to get HDF5 to compile on Pacific Blue.
+        # The ``-b nolibpath -b ...'' flags were messing with the mpicc
+        # compiler's already defined library paths and it wasn't able to find
+        # the libraries it needed to run....DOH!
+        hname="`hostname`"
+
+        case "$hname" in
+          *pacific.llnl.gov* | *s0*)
+            hardcode_libdir_flag_spec=' '
+            ;;
+          *)
+            hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
+            ;;
+        esac
+        #
+        # End MAJOR HACK
+        #
+        #######################################################################
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='${wl}-berok'
+	# This is a bit strange, but is similar to how AIX traditionally builds
+	# it's shared libraries.
+	archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
+      fi
+    fi
+    ;;
+
+  amigaos*)
+    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+    # see comment about different semantics on the GNU ld section
+    ld_shlibs=no
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    # hardcode_libdir_flag_spec is actually meaningless, as there is
+    # no search path for DLLs.
+    hardcode_libdir_flag_spec=' '
+    allow_undefined_flag=unsupported
+    # Tell ltmain to make .lib files, not .a files.
+    libext=lib
+    # FIXME: Setting linknames here is a bad hack.
+    archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+    # The linker will automatically build a .lib file if we build a DLL.
+    old_archive_from_new_cmds='true'
+    # FIXME: Should let the user specify the lib program.
+    old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+    fix_srcfile_path='`cygpath -w "$srcfile"`'
+    ;;
+
+  darwin* | rhapsody*)
+    case "$host_os" in
+    rhapsody* | darwin1.[[012]])
+      allow_undefined_flag='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      allow_undefined_flag='-flat_namespace -undefined suppress'
+      ;;
+    esac
+    # FIXME: Relying on posixy $() will cause problems for
+    #        cross-compilation, but unfortunately the echo tests do not
+    #        yet detect zsh echo's removal of \ escapes.
+    archive_cmds='$nonopt $(test "x$module" = xyes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring'
+    # We need to add '_' to the symbols in $export_symbols first
+    #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    whole_archive_flag_spec='-all_load $convenience'
+    ;;
+
+  freebsd1*)
+    ld_shlibs=no
+    ;;
+
+  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+  # support.  Future versions do this automatically, but an explicit c++rt0.o
+  # does not break anything, and helps significantly (at the cost of a little
+  # extra space).
+  freebsd2.2*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+  freebsd2*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_minus_L=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+  freebsd*)
+    archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  hpux9* | hpux10* | hpux11*)
+    case $host_os in
+    hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
+    *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
+    esac
+    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+    hardcode_libdir_separator=:
+    hardcode_direct=yes
+    hardcode_minus_L=yes # Not in the search PATH, but as the default
+			 # location of the library.
+    export_dynamic_flag_spec='${wl}-E'
+    ;;
+
+  irix5* | irix6*)
+    if test "$GCC" = yes; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+    else
+      archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    link_all_deplibs=yes
+    ;;
+
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+    else
+      archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+    fi
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  newsos6)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    hardcode_shlibpath_var=no
+    ;;
+
+  openbsd*)
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+    else
+      case "$host_os" in
+      openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_libdir_flag_spec='-R$libdir'
+        ;;
+      *)
+        archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+        ;;
+      esac
+    fi
+    ;;
+
+  os2*)
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+    allow_undefined_flag=unsupported
+    archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+    old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+    ;;
+
+  osf3*)
+    if test "$GCC" = yes; then
+      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+    else
+      allow_undefined_flag=' -expect_unresolved \*'
+      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    ;;
+
+  osf4* | osf5*)	# as osf3* with the addition of -msym flag
+    if test "$GCC" = yes; then
+      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    else
+      allow_undefined_flag=' -expect_unresolved \*'
+      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+      $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+      #Both c and cxx compiler support -rpath directly
+      hardcode_libdir_flag_spec='-rpath $libdir'
+    fi
+    hardcode_libdir_separator=:
+    ;;
+
+  sco3.2v5*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_shlibpath_var=no
+    runpath_var=LD_RUN_PATH
+    hardcode_runpath_var=yes
+    export_dynamic_flag_spec='${wl}-Bexport'
+    ;;
+
+  solaris*)
+    # gcc --version < 3.0 without binutils cannot create self contained
+    # shared libraries reliably, requiring libgcc.a to resolve some of
+    # the object symbols generated in some cases.  Libraries that use
+    # assert need libgcc.a to resolve __eprintf, for example.  Linking
+    # a copy of libgcc.a into every shared library to guarantee resolving
+    # such symbols causes other problems:  According to Tim Van Holder
+    # <tim.van.holder at pandora.be>, C++ libraries end up with a separate
+    # (to the application) exception stack for one thing.
+    no_undefined_flag=' -z defs'
+    if test "$GCC" = yes; then
+      case `$CC --version 2>/dev/null` in
+      [[12]].*)
+	cat <<EOF 1>&2
+
+*** Warning: Releases of GCC earlier than version 3.0 cannot reliably
+*** create self contained shared libraries on Solaris systems, without
+*** introducing a dependency on libgcc.a.  Therefore, libtool is disabling
+*** -no-undefined support, which will at least allow you to build shared
+*** libraries.  However, you may find that when you link such libraries
+*** into an application without using GCC, you have to manually add
+*** \`gcc --print-libgcc-file-name\` to the link command.  We urge you to
+*** upgrade to a newer version of GCC.  Another option is to rebuild your
+*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer.
+
+EOF
+        no_undefined_flag=
+	;;
+      esac
+    fi
+    # $CC -shared without GNU ld will not create a library from C++
+    # object files and a static libstdc++, better avoid it by now
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_shlibpath_var=no
+    case $host_os in
+    solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
+    *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+      whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+    esac
+    link_all_deplibs=yes
+    ;;
+
+  sunos4*)
+    if test "x$host_vendor" = xsequent; then
+      # Use $CC to link under sequent, because it throws in some extra .o
+      # files that make .init and .fini sections work.
+      archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+    else
+      archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+    fi
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_direct=yes
+    hardcode_minus_L=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4)
+    if test "x$host_vendor" = xsno; then
+      archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes # is this really true???
+    else
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+    fi
+    runpath_var='LD_RUN_PATH'
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4.3*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_shlibpath_var=no
+    export_dynamic_flag_spec='-Bexport'
+    ;;
+
+  sysv5*)
+    no_undefined_flag=' -z text'
+    # $CC -shared without GNU ld will not create a library from C++
+    # object files and a static libstdc++, better avoid it by now
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+    hardcode_libdir_flag_spec=
+    hardcode_shlibpath_var=no
+    runpath_var='LD_RUN_PATH'
+    ;;
+
+  uts4*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_shlibpath_var=no
+    ;;
+
+  dgux*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4*MP*)
+    if test -d /usr/nec; then
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ld_shlibs=yes
+    fi
+    ;;
+
+  sysv4.2uw2*)
+    archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_minus_L=no
+    hardcode_shlibpath_var=no
+    hardcode_runpath_var=yes
+    runpath_var=LD_RUN_PATH
+    ;;
+
+  sysv5uw7* | unixware7*)
+    no_undefined_flag='${wl}-z ${wl}text'
+    if test "$GCC" = yes; then
+      archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+    else
+      archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+    fi
+    runpath_var='LD_RUN_PATH'
+    hardcode_shlibpath_var=no
+    ;;
+
+  *)
+    ld_shlibs=no
+    ;;
+  esac
+fi
+AC_MSG_RESULT([$ld_shlibs])
+test "$ld_shlibs" = no && can_build_shared=no
+
+# Check hardcoding attributes.
+AC_MSG_CHECKING([how to hardcode library paths into programs])
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+   test -n "$runpath_var"; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$hardcode_shlibpath_var" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+AC_MSG_RESULT([$hardcode_action])
+
+striplib=
+old_striplib=
+AC_MSG_CHECKING([whether stripping libraries is possible])
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  AC_MSG_RESULT([yes])
+else
+  AC_MSG_RESULT([no])
+fi
+
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+# PORTME Fill in your ld.so characteristics
+AC_MSG_CHECKING([dynamic linker characteristics])
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}.so$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[[01]] | aix4.[[01]].*)
+	if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	     echo ' yes '
+	     echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	  :
+	else
+	  can_build_shared=no
+	fi
+	;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can
+    # not hardcode correct soname into executable. Probably we can
+    # add versioning support to collect2, so additional links can
+    # be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}.so$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}.so'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  export_dynamic_flag_spec=-rdynamic
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  need_version=no
+  need_lib_prefix=no
+  case $GCC,$host_os in
+  yes,cygwin*)
+    library_names_spec='$libname.dll.a'
+    soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll'
+    postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog .libs/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    ;;
+  yes,mingw*)
+    library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll'
+    sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
+    ;;
+  yes,pw32*)
+    library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
+    ;;
+  *)
+    library_names_spec='${libname}`echo ${release} | sed -e 's/[[.]]/-/g'`${versuffix}.dll $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  # FIXME: Relying on posixy $() will cause problems for
+  #        cross-compilation, but unfortunately the echo tests do not
+  #        yet detect zsh echo's removal of \ escapes.
+  library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
+  soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  *)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  dynamic_linker="$host_os dld.sl"
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  shlibpath_var=SHLIB_PATH
+  shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+  library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
+  soname_spec='${libname}${release}.sl$major'
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6*)
+  version_type=irix
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}.so$major'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
+  case $host_os in
+  irix5*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
+    soname_spec='${libname}${release}.so$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case "$host_os" in
+    openbsd2.[[89]] | openbsd2.[[89]].*)
+      shlibpath_overrides_runpath=no
+      ;;
+    *)
+      shlibpath_overrides_runpath=yes
+      ;;
+    esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+os2*)
+  libname_spec='$name'
+  need_lib_prefix=no
+  library_names_spec='$libname.dll $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_version=no
+  soname_spec='${libname}${release}.so'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}.so$major'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
+    soname_spec='$libname.so.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+AC_MSG_RESULT([$dynamic_linker])
+test "$dynamic_linker" = no && can_build_shared=no
+
+# Report the final consequences.
+AC_MSG_CHECKING([if libtool supports shared libraries])
+AC_MSG_RESULT([$can_build_shared])
+
+AC_MSG_CHECKING([whether to build shared libraries])
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+esac
+AC_MSG_RESULT([$enable_shared])
+
+AC_MSG_CHECKING([whether to build static libraries])
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+AC_MSG_RESULT([$enable_static])
+
+if test "$hardcode_action" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+AC_LIBTOOL_DLOPEN_SELF
+
+if test "$enable_shared" = yes && test "$GCC" = yes; then
+  case $archive_cmds in
+  *'~'*)
+    # FIXME: we may have to deal with multi-command sequences.
+    ;;
+  '$CC '*)
+    # Test whether the compiler implicitly links with -lc since on some
+    # systems, -lgcc has to come before -lc. If gcc already passes -lc
+    # to ld, don't add -lc before -lgcc.
+    AC_MSG_CHECKING([whether -lc should be explicitly linked in])
+    AC_CACHE_VAL([lt_cv_archive_cmds_need_lc],
+    [$rm conftest*
+    echo 'static int dummy;' > conftest.$ac_ext
+
+    if AC_TRY_EVAL(ac_compile); then
+      soname=conftest
+      lib=conftest
+      libobjs=conftest.$ac_objext
+      deplibs=
+      wl=$lt_cv_prog_cc_wl
+      compiler_flags=-v
+      linker_flags=-v
+      verstring=
+      output_objdir=.
+      libname=conftest
+      save_allow_undefined_flag=$allow_undefined_flag
+      allow_undefined_flag=
+      if AC_TRY_EVAL(archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1)
+      then
+	lt_cv_archive_cmds_need_lc=no
+      else
+	lt_cv_archive_cmds_need_lc=yes
+      fi
+      allow_undefined_flag=$save_allow_undefined_flag
+    else
+      cat conftest.err 1>&5
+    fi])
+    AC_MSG_RESULT([$lt_cv_archive_cmds_need_lc])
+    ;;
+  esac
+fi
+need_lc=${lt_cv_archive_cmds_need_lc-yes}
+
+# The second clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  :
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  test -f Makefile && make "$ltmain"
+fi
+
+if test -f "$ltmain"; then
+  trap "$rm \"${ofile}T\"; exit 1" 1 2 15
+  $rm -f "${ofile}T"
+
+  echo creating $ofile
+
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS \
+    AR AR_FLAGS CC LD LN_S NM SHELL \
+    reload_flag reload_cmds wl \
+    pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
+    thread_safe_flag_spec whole_archive_flag_spec libname_spec \
+    library_names_spec soname_spec \
+    RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
+    old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
+    postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
+    old_striplib striplib file_magic_cmd export_symbols_cmds \
+    deplibs_check_method allow_undefined_flag no_undefined_flag \
+    finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
+    global_symbol_to_c_name_address \
+    hardcode_libdir_flag_spec hardcode_libdir_separator  \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
+
+    case $var in
+    reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
+    extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  cat <<__EOF__ > "${ofile}T"
+#! $SHELL
+
+# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996-2000 Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="sed -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$need_lc
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# The default C compiler.
+CC=$lt_CC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_pic_flag
+pic_mode=$pic_mode
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_compiler_c_o
+
+# Can we write directly to a .lo ?
+compiler_o_lo=$lt_compiler_o_lo
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_link_static_flag
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "${ofile}T"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | os2*)
+    cat <<'EOF' >> "${ofile}T"
+      # This is a source program that is used to create dlls on Windows
+      # Don't remove nor modify the starting and closing comments
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# #  ifdef __CYGWIN32__
+# #    define __CYGWIN__ __CYGWIN32__
+# #  endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+#   __hDllInstance_base = hInst;
+#   return TRUE;
+# }
+# /* ltdll.c ends here */
+	# This is a source program that is used to create import libraries
+	# on Windows for dlls which lack them. Don't remove nor modify the
+	# starting and closing comments
+# /* impgen.c starts here */
+# /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
+#
+#  This file is part of GNU libtool.
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#  */
+#
+# #include <stdio.h>		/* for printf() */
+# #include <unistd.h>		/* for open(), lseek(), read() */
+# #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
+# #include <string.h>		/* for strdup() */
+#
+# /* O_BINARY isn't required (or even defined sometimes) under Unix */
+# #ifndef O_BINARY
+# #define O_BINARY 0
+# #endif
+#
+# static unsigned int
+# pe_get16 (fd, offset)
+#      int fd;
+#      int offset;
+# {
+#   unsigned char b[2];
+#   lseek (fd, offset, SEEK_SET);
+#   read (fd, b, 2);
+#   return b[0] + (b[1]<<8);
+# }
+#
+# static unsigned int
+# pe_get32 (fd, offset)
+#     int fd;
+#     int offset;
+# {
+#   unsigned char b[4];
+#   lseek (fd, offset, SEEK_SET);
+#   read (fd, b, 4);
+#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# static unsigned int
+# pe_as32 (ptr)
+#      void *ptr;
+# {
+#   unsigned char *b = ptr;
+#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# int
+# main (argc, argv)
+#     int argc;
+#     char *argv[];
+# {
+#     int dll;
+#     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
+#     unsigned long export_rva, export_size, nsections, secptr, expptr;
+#     unsigned long name_rvas, nexp;
+#     unsigned char *expdata, *erva;
+#     char *filename, *dll_name;
+#
+#     filename = argv[1];
+#
+#     dll = open(filename, O_RDONLY|O_BINARY);
+#     if (dll < 1)
+# 	return 1;
+#
+#     dll_name = filename;
+#
+#     for (i=0; filename[i]; i++)
+# 	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
+# 	    dll_name = filename + i +1;
+#
+#     pe_header_offset = pe_get32 (dll, 0x3c);
+#     opthdr_ofs = pe_header_offset + 4 + 20;
+#     num_entries = pe_get32 (dll, opthdr_ofs + 92);
+#
+#     if (num_entries < 1) /* no exports */
+# 	return 1;
+#
+#     export_rva = pe_get32 (dll, opthdr_ofs + 96);
+#     export_size = pe_get32 (dll, opthdr_ofs + 100);
+#     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
+#     secptr = (pe_header_offset + 4 + 20 +
+# 	      pe_get16 (dll, pe_header_offset + 4 + 16));
+#
+#     expptr = 0;
+#     for (i = 0; i < nsections; i++)
+#     {
+# 	char sname[8];
+# 	unsigned long secptr1 = secptr + 40 * i;
+# 	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
+# 	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
+# 	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
+# 	lseek(dll, secptr1, SEEK_SET);
+# 	read(dll, sname, 8);
+# 	if (vaddr <= export_rva && vaddr+vsize > export_rva)
+# 	{
+# 	    expptr = fptr + (export_rva - vaddr);
+# 	    if (export_rva + export_size > vaddr + vsize)
+# 		export_size = vsize - (export_rva - vaddr);
+# 	    break;
+# 	}
+#     }
+#
+#     expdata = (unsigned char*)malloc(export_size);
+#     lseek (dll, expptr, SEEK_SET);
+#     read (dll, expdata, export_size);
+#     erva = expdata - export_rva;
+#
+#     nexp = pe_as32 (expdata+24);
+#     name_rvas = pe_as32 (expdata+32);
+#
+#     printf ("EXPORTS\n");
+#     for (i = 0; i<nexp; i++)
+#     {
+# 	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
+# 	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
+#     }
+#
+#     return 0;
+# }
+# /* impgen.c ends here */
+
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
+
+  mv -f "${ofile}T" "$ofile" || \
+    (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
+  chmod +x "$ofile"
+fi
+
+])# _LT_AC_LTCONFIG_HACK
+
+# AC_LIBTOOL_DLOPEN - enable checks for dlopen support
+AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])])
+
+# AC_LIBTOOL_WIN32_DLL - declare package support for building win32 dll's
+AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_BEFORE([$0], [AC_LIBTOOL_SETUP])])
+
+# AC_ENABLE_SHARED - implement the --enable-shared flag
+# Usage: AC_ENABLE_SHARED[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+AC_DEFUN([AC_ENABLE_SHARED],
+[define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE(shared,
+changequote(<<, >>)dnl
+<<  --enable-shared[=PKGS]  build shared libraries [default=>>AC_ENABLE_SHARED_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case $enableval in
+yes) enable_shared=yes ;;
+no) enable_shared=no ;;
+*)
+  enable_shared=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_shared=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac],
+enable_shared=AC_ENABLE_SHARED_DEFAULT)dnl
+])
+
+# AC_DISABLE_SHARED - set the default shared flag to --disable-shared
+AC_DEFUN([AC_DISABLE_SHARED],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_SHARED(no)])
+
+# AC_ENABLE_STATIC - implement the --enable-static flag
+# Usage: AC_ENABLE_STATIC[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+AC_DEFUN([AC_ENABLE_STATIC],
+[define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE(static,
+changequote(<<, >>)dnl
+<<  --enable-static[=PKGS]  build static libraries [default=>>AC_ENABLE_STATIC_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case $enableval in
+yes) enable_static=yes ;;
+no) enable_static=no ;;
+*)
+  enable_static=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_static=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac],
+enable_static=AC_ENABLE_STATIC_DEFAULT)dnl
+])
+
+# AC_DISABLE_STATIC - set the default static flag to --disable-static
+AC_DEFUN([AC_DISABLE_STATIC],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_STATIC(no)])
+
+
+# AC_ENABLE_FAST_INSTALL - implement the --enable-fast-install flag
+# Usage: AC_ENABLE_FAST_INSTALL[(DEFAULT)]
+#   Where DEFAULT is either `yes' or `no'.  If omitted, it defaults to
+#   `yes'.
+AC_DEFUN([AC_ENABLE_FAST_INSTALL],
+[define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl
+AC_ARG_ENABLE(fast-install,
+changequote(<<, >>)dnl
+<<  --enable-fast-install[=PKGS]  optimize for fast installation [default=>>AC_ENABLE_FAST_INSTALL_DEFAULT],
+changequote([, ])dnl
+[p=${PACKAGE-default}
+case $enableval in
+yes) enable_fast_install=yes ;;
+no) enable_fast_install=no ;;
+*)
+  enable_fast_install=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_fast_install=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac],
+enable_fast_install=AC_ENABLE_FAST_INSTALL_DEFAULT)dnl
+])
+
+# AC_DISABLE_FAST_INSTALL - set the default to --disable-fast-install
+AC_DEFUN([AC_DISABLE_FAST_INSTALL],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+AC_ENABLE_FAST_INSTALL(no)])
+
+# AC_LIBTOOL_PICMODE - implement the --with-pic flag
+# Usage: AC_LIBTOOL_PICMODE[(MODE)]
+#   Where MODE is either `yes' or `no'.  If omitted, it defaults to
+#   `both'.
+AC_DEFUN([AC_LIBTOOL_PICMODE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+pic_mode=ifelse($#,1,$1,default)])
+
+
+# AC_PATH_TOOL_PREFIX - find a file program which can recognise shared library
+AC_DEFUN([AC_PATH_TOOL_PREFIX],
+[AC_MSG_CHECKING([for $1])
+AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
+[case $MAGIC_CMD in
+  /*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+  ?:/*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+  ;;
+  *)
+  ac_save_MAGIC_CMD="$MAGIC_CMD"
+  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
+dnl $ac_dummy forces splitting on constant user-supplied paths.
+dnl POSIX.2 word splitting is done only on the output of word expansions,
+dnl not every word.  This closes a longstanding sh security hole.
+  ac_dummy="ifelse([$2], , $PATH, [$2])"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$1; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/$1"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    egrep "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  MAGIC_CMD="$ac_save_MAGIC_CMD"
+  ;;
+esac])
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  AC_MSG_RESULT($MAGIC_CMD)
+else
+  AC_MSG_RESULT(no)
+fi
+])
+
+
+# AC_PATH_MAGIC - find a file program which can recognise a shared library
+AC_DEFUN([AC_PATH_MAGIC],
+[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl
+AC_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin:$PATH)
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    AC_PATH_TOOL_PREFIX(file, /usr/bin:$PATH)
+  else
+    MAGIC_CMD=:
+  fi
+fi
+])
+
+
+# AC_PROG_LD - find the path to the GNU or non-GNU linker
+AC_DEFUN([AC_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+AC_REQUIRE([AC_CANONICAL_BUILD])dnl
+AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]]* | [[A-Za-z]]:[[\\/]]*)
+      re_direlt='/[[^/]][[^/]]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(lt_cv_path_LD,
+[if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+	test "$with_gnu_ld" != no && break
+      else
+	test "$with_gnu_ld" != yes && break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_PROG_LD_GNU
+])
+
+# AC_PROG_LD_GNU -
+AC_DEFUN([AC_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+  lt_cv_prog_gnu_ld=yes
+else
+  lt_cv_prog_gnu_ld=no
+fi])
+with_gnu_ld=$lt_cv_prog_gnu_ld
+])
+
+# AC_PROG_LD_RELOAD_FLAG - find reload flag for linker
+#   -- PORTME Some linkers may need a different reload flag.
+AC_DEFUN([AC_PROG_LD_RELOAD_FLAG],
+[AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag,
+[lt_cv_ld_reload_flag='-r'])
+reload_flag=$lt_cv_ld_reload_flag
+test -n "$reload_flag" && reload_flag=" $reload_flag"
+])
+
+# AC_DEPLIBS_CHECK_METHOD - how to check for library dependencies
+#  -- PORTME fill in with the dynamic library characteristics
+AC_DEFUN([AC_DEPLIBS_CHECK_METHOD],
+[AC_CACHE_CHECK([how to recognise dependant libraries],
+lt_cv_deplibs_check_method,
+[lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given egrep regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi4*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin* | mingw* | pw32*)
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  case "$host_os" in
+  rhapsody* | darwin1.[[012]])
+    lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
+    ;;
+  *) # Darwin 1.3 on
+    lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+    ;;
+  esac
+  ;;
+
+freebsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[[3-9]]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20*|hpux11*)
+  lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libc.sl
+  ;;
+
+irix5* | irix6*)
+  case $host_os in
+  irix5*)
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+    ;;
+  *)
+    case $LD in
+    *-32|*"-32 ") libmagic=32-bit;;
+    *-n32|*"-n32 ") libmagic=N32;;
+    *-64|*"-64 ") libmagic=64-bit;;
+    *) libmagic=never-match;;
+    esac
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1"
+    ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+  case $host_cpu in
+  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | s390* )
+    lt_cv_deplibs_check_method=pass_all ;;
+  *)
+    # glibc up to 2.1.1 does not perform some relocations on ARM
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so\.[[0-9]]+\.[[0-9]]+$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[[^/\.]]+\.so$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+openbsd*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object'
+  else
+    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  # this will be overridden with pass_all, but let us keep it just in case
+  lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sco3.2v5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  lt_cv_file_magic_test_file=/lib/libc.so
+  ;;
+
+sysv5uw[[78]]* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  esac
+  ;;
+esac
+])
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+])
+
+
+# AC_PROG_NM - find the path to a BSD-compatible name lister
+AC_DEFUN([AC_PROG_NM],
+[AC_REQUIRE([_LT_AC_LIBTOOL_SYS_PATH_SEPARATOR])dnl
+AC_MSG_CHECKING([for BSD-compatible nm])
+AC_CACHE_VAL(lt_cv_path_NM,
+[if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    test -z "$ac_dir" && ac_dir=.
+    tmp_nm=$ac_dir/${ac_tool_prefix}nm
+    if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      # Tru64's nm complains that /dev/null is an invalid object file
+      if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
+	lt_cv_path_NM="$tmp_nm -B"
+	break
+      elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+	lt_cv_path_NM="$tmp_nm -p"
+	break
+      else
+	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	continue # so that we can try to find one that supports BSD flags
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi])
+NM="$lt_cv_path_NM"
+AC_MSG_RESULT([$NM])
+])
+
+# AC_CHECK_LIBM - check for math library
+AC_DEFUN([AC_CHECK_LIBM],
+[AC_REQUIRE([AC_CANONICAL_HOST])dnl
+LIBM=
+case $host in
+*-*-beos* | *-*-cygwin* | *-*-pw32*)
+  # These system don't have libm
+  ;;
+*-ncr-sysv4.3*)
+  AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
+  AC_CHECK_LIB(m, main, LIBM="$LIBM -lm")
+  ;;
+*)
+  AC_CHECK_LIB(m, main, LIBM="-lm")
+  ;;
+esac
+])
+
+# AC_LIBLTDL_CONVENIENCE[(dir)] - sets LIBLTDL to the link flags for
+# the libltdl convenience library and INCLTDL to the include flags for
+# the libltdl header and adds --enable-ltdl-convenience to the
+# configure arguments.  Note that LIBLTDL and INCLTDL are not
+# AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called.  If DIR is not
+# provided, it is assumed to be `libltdl'.  LIBLTDL will be prefixed
+# with '${top_builddir}/' and INCLTDL will be prefixed with
+# '${top_srcdir}/' (note the single quotes!).  If your package is not
+# flat and you're not using automake, define top_builddir and
+# top_srcdir appropriately in the Makefiles.
+AC_DEFUN([AC_LIBLTDL_CONVENIENCE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  case $enable_ltdl_convenience in
+  no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;;
+  "") enable_ltdl_convenience=yes
+      ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;;
+  esac
+  LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la
+  INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+])
+
+# AC_LIBLTDL_INSTALLABLE[(dir)] - sets LIBLTDL to the link flags for
+# the libltdl installable library and INCLTDL to the include flags for
+# the libltdl header and adds --enable-ltdl-install to the configure
+# arguments.  Note that LIBLTDL and INCLTDL are not AC_SUBSTed, nor is
+# AC_CONFIG_SUBDIRS called.  If DIR is not provided and an installed
+# libltdl is not found, it is assumed to be `libltdl'.  LIBLTDL will
+# be prefixed with '${top_builddir}/' and INCLTDL will be prefixed
+# with '${top_srcdir}/' (note the single quotes!).  If your package is
+# not flat and you're not using automake, define top_builddir and
+# top_srcdir appropriately in the Makefiles.
+# In the future, this macro may have to be called after AC_PROG_LIBTOOL.
+AC_DEFUN([AC_LIBLTDL_INSTALLABLE],
+[AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl
+  AC_CHECK_LIB(ltdl, main,
+  [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no],
+  [if test x"$enable_ltdl_install" = xno; then
+     AC_MSG_WARN([libltdl not installed, but installation disabled])
+   else
+     enable_ltdl_install=yes
+   fi
+  ])
+  if test x"$enable_ltdl_install" = x"yes"; then
+    ac_configure_args="$ac_configure_args --enable-ltdl-install"
+    LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la
+    INCLTDL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl'])
+  else
+    ac_configure_args="$ac_configure_args --enable-ltdl-install=no"
+    LIBLTDL="-lltdl"
+    INCLTDL=
+  fi
+])
+
+# old names
+AC_DEFUN([AM_PROG_LIBTOOL],   [AC_PROG_LIBTOOL])
+AC_DEFUN([AM_ENABLE_SHARED],  [AC_ENABLE_SHARED($@)])
+AC_DEFUN([AM_ENABLE_STATIC],  [AC_ENABLE_STATIC($@)])
+AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
+AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
+AC_DEFUN([AM_PROG_LD],        [AC_PROG_LD])
+AC_DEFUN([AM_PROG_NM],        [AC_PROG_NM])
+
+# This is just to silence aclocal about the macro not being used
+ifelse([AC_DISABLE_FAST_INSTALL])
+

Added: packages/hdf5/branches/upstream/current/fortran/acsite.m4
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/acsite.m4	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/acsite.m4	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,505 @@
+dnl -------------------------------------------------------------------------
+dnl -------------------------------------------------------------------------
+dnl
+dnl Copyright by the Board of Trustees of the University of Illinois.
+dnl All rights reserved.
+dnl
+dnl This file is part of HDF5.  The full HDF5 copyright notice, including
+dnl terms governing use, modification, and redistribution, is contained in
+dnl the files COPYING and Copyright.html.  COPYING can be found at the root
+dnl of the source code distribution tree; Copyright.html can be found at the
+dnl root level of an installed copy of the electronic HDF5 document set and
+dnl is linked from the top-level documents page.  It can also be found at
+dnl http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have
+dnl access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu.
+dnl
+dnl Macros for HDF5 Fortran
+dnl
+dnl -------------------------------------------------------------------------
+dnl -------------------------------------------------------------------------
+
+dnl -------------------------------------------------------------------------
+dnl AC_PROG_F9X
+dnl
+dnl	Check for a Fortran 9X compiler.
+dnl
+AC_DEFUN(AC_PROG_F9X,
+[AC_CHECK_PROGS(F9X, f90 pgf90 xlf90 f95 g95 xlf95 ftn)
+test -z "$F9X" && AC_MSG_ERROR([no acceptable f9X compiler found in \$PATH])
+
+AC_PROG_F9X_WORKS
+AC_PROG_F9X_GNU
+
+if test $ac_cv_prog_g9x = yes; then
+  G9X=yes
+  dnl Check whether -g works, even if FFLAGS is set, in case the package
+  dnl plays around with FFLAGS (such as to build both debugging and
+  dnl normal versions of a library), tasteless as that idea is.
+  ac_test_FFLAGS="${FFLAGS+set}"
+  ac_save_FFLAGS="$FFLAGS"
+  FFLAGS=
+  AC_PROG_F9X_G
+  if test "$ac_test_FFLAGS" = set; then
+    FFLAGS="$ac_save_FFLAGS"
+  elif test $ac_cv_prog_f9x_g = yes; then
+    FFLAGS="-g -O2"
+  else
+    FFLAGS="-O2"
+  fi
+else
+  G9X=
+  test "${FFLAGS+set}" = set || FFLAGS="-g"
+fi
+])
+
+dnl -------------------------------------------------------------------------
+dnl AC_TRY_F9X_COMPILER()
+dnl
+dnl	It would be nice if the compiler actually works.
+dnl
+AC_DEFUN(AC_TRY_F9X_COMPILER, [
+cat > conftest.$ac_ext << EOF
+[$1]
+EOF
+if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
+  [$2]=yes
+  # If we can't run a trivial program, we are probably using a cross compiler.
+  if (./conftest; exit) 2>/dev/null; then
+    [$3]=no
+  else
+    [$3]=yes
+  fi
+else
+  echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD
+  cat conftest.$ac_ext >&AS_MESSAGE_LOG_FD
+  [$2]=no
+fi
+rm -fr conftest*
+])
+
+dnl -------------------------------------------------------------------------
+dnl AC_LANG_FORTRAN9X()
+dnl
+dnl	Generic macro to setup the Fortran 9X specific env variables.
+dnl
+m4_define([AC_LANG(FORTRAN9X)],
+[ac_ext=f90
+ac_compile='${F9X-f90} -c $FFLAGS conftest.$ac_ext 1>&AS_MESSAGE_LOG_FD'
+ac_link='${F9X-f90} -o conftest${ac_exeext} $FFLAGS conftest.$ac_ext $LDFLAGS $LIBS 1>&AS_MESSAGE_LOG_FD'
+cross_compiling=$ac_cv_prog_f9x_cross
+])
+
+AU_DEFUN([AC_LANG_FORTRAN9X], [AC_LANG(FORTRAN9X)])
+
+dnl -------------------------------------------------------------------------
+dnl AC_LANG_F9X_WORKS()
+dnl
+dnl	It would be nice if the compiler actually works.
+dnl
+AC_DEFUN(AC_PROG_F9X_WORKS, [
+AC_MSG_CHECKING([whether the Fortran 9X compiler ($F9X $FFLAGS $LDFLAGS) works])
+AC_LANG_SAVE
+AC_LANG_FORTRAN9X
+AC_TRY_F9X_COMPILER([
+      program conftest
+      end
+], ac_cv_prog_f9x_works, ac_cv_prog_f9x_cross)
+AC_LANG_RESTORE
+AC_MSG_RESULT($ac_cv_prog_f9x_works)
+if test $ac_cv_prog_f9x_works = no; then
+  AC_MSG_ERROR([installation or configuration problem: Fortran 9X compiler cannot create executables.])
+fi
+AC_MSG_CHECKING([whether the Fortran 9X compiler ($F9X $FFLAGS $LDFLAGS) is a cross-compiler])
+AC_MSG_RESULT($ac_cv_prog_f9x_cross)
+cross_compiling=$ac_cv_prog_f9x_cross
+])
+
+dnl -------------------------------------------------------------------------
+dnl AC_PROG_F9X_GNU
+dnl
+dnl	Test whether for Fortran 9X compiler is `g95' (the GNU Fortran 95
+dnl	Compiler). This test depends on whether the Fortran 9X compiler
+dnl	can do CPP pre-processing.
+dnl
+AC_DEFUN(AC_PROG_F9X_GNU,
+[AC_CACHE_CHECK(whether we are using GNU Fortran 95, ac_cv_prog_g9x,
+[cat > conftest.fpp <<EOF
+#ifdef __GNUC__
+  yes
+#endif
+EOF
+if AC_TRY_COMMAND($F9X -E conftest.fpp) | egrep yes >/dev/null 2>&1; then
+  ac_cv_prog_g9x=yes
+else
+  ac_cv_prog_g9x=no
+fi])])
+
+dnl -------------------------------------------------------------------------
+dnl AC_PROG_F9X_G
+dnl
+dnl	Test whether the Fortran 9X compiler can accept the `-g' option
+dnl	to enable debugging.
+dnl
+AC_DEFUN(AC_PROG_F9X_G,
+[AC_CACHE_CHECK(whether $F9X accepts -g, ac_cv_prog_f9x_g,
+[cat > conftest.f << EOF
+       program conftest
+       end
+EOF
+if test -z "`$F9X -g -c conftest.f 2>&1`"; then
+  ac_cv_prog_f9x_g=yes
+else
+  ac_cv_prog_f9x_g=no
+fi
+rm -f conftest*
+])])
+
+dnl -------------------------------------------------------------------------
+dnl AC_F9X_OPT_FLAGS()
+dnl
+dnl	Check for optimizer flags the Fortran compiler can use.
+dnl
+AC_DEFUN(AC_F9X_OPT_FLAGS,
+[AC_MSG_CHECKING([for $F9X optimizer flags])
+AC_LANG_SAVE
+AC_LANG_FORTRAN9X
+
+for flags in "-fast" "-O3" "-O" "";do
+  cat > conftest.$ac_ext <<EOF
+      program main
+      end
+EOF
+  ac_compile='${F9X-f90} -c $flag $FFLAGS conftest.$ac_ext 1>&AS_MESSAGE_LOG_FD'
+  if AC_TRY_EVAL(ac_compile); then
+    if grep 'passed to ld' conftest.out > /dev/null 2>&1; then :; else
+      FFLAGS="$FFLAGS $flags"
+      break
+    fi
+  fi
+done
+
+if test -n "$flags"; then
+  echo "$flags" 1>&6
+else
+  echo "none" 1>&6
+fi
+rm -f conftest*
+])
+
+dnl -------------------------------------------------------------------------
+dnl AC_F9X_MODS()
+dnl
+dnl	Check how F9X handles modules. This macro also checks which
+dnl	command-line option to use to include the module once it's built.
+dnl
+AC_DEFUN(AC_F9X_MODS,
+[AC_MSG_CHECKING(what $F9X does with modules)
+AC_LANG_SAVE
+AC_LANG_FORTRAN9X
+
+test -d conftestdir || mkdir conftestdir
+cd conftestdir
+rm -rf *
+
+cat >conftest.$ac_ext <<EOF
+      module module
+         integer foo
+      end module module
+EOF
+
+eval $ac_compile
+modfiles=""
+F9XMODEXT=""
+
+for f in conftest.o module.mod MODULE.mod module.M MODULE.M; do
+  if test -f "$f" ; then
+    modfiles="$f"
+
+    case "$f" in
+      *.o)   F9XMODEXT="o" ;;
+      *.mod) F9XMODEXT="mod" ;;
+      *.M)   F9XMODEXT="M" ;;
+    esac
+  fi
+done
+
+echo $modfiles 6>&1
+if test "$modfiles" = file.o; then
+  echo $ac_n "checking whether $F9X -em is saner""... $ac_c" 1>&6
+  OLD_FFLAGS=$FFLAGS
+  FFLAGS="$FFLAGS -em"
+  eval $ac_compile
+  modfiles=""
+  for f in file.o module.mod MODULE.mod module.M MODULE.M; do
+    test -f $f && modfiles="$f"
+  done
+  if test "$modfiles" = "file.o"; then
+    FFLAGS=$OLD_FFLAGS
+    echo no 6>&1
+  else
+    echo yes 6>&1
+  fi
+fi
+cd ..
+
+AC_MSG_CHECKING(how $F9X finds modules)
+
+for flag in "-I" "-M" "-p"; do
+  cat >conftest.$ac_ext <<EOF
+      program conftest
+          use module
+      end program conftest
+EOF
+
+  ac_compile='${F9X-f90} $FFLAGS ${flag}conftestdir -c conftest.$ac_ext 1>&AS_MESSAGE_LOG_FD'
+
+  if AC_TRY_EVAL(ac_compile); then
+    F9XMODFLAG=$flag
+    break
+  fi
+done
+
+if test -n "$F9XMODFLAG"; then
+  echo $F9XMODFLAG 1>&6
+#  FFLAGS="$F9XMODFLAG. $F9XMODFLAG../src $FFLAGS"
+  FFLAGS="$F9XMODFLAG. $FFLAGS"
+else
+  echo unknown 1>&6
+fi
+AC_SUBST(F9XMODFLAG)
+AC_SUBST(F9XMODEXT)
+rm -rf conftest*
+])
+
+dnl -------------------------------------------------------------------------
+dnl AC_TRY_FCOMPILE()
+dnl
+dnl	Check if we can compile a simple Fortran 90 program.
+dnl
+dnl AC_TRY_FCOMPILE(FUNCTION-BODY,
+dnl                 [ACTION-IF-SUCCESS], [ACTION-IF-NOT-SUCCESS])
+dnl
+AC_DEFUN([AC_TRY_FCOMPILE],
+[AC_LANG_SAVE
+AC_LANG_FORTRAN9X
+
+test -d conftestdir || mkdir conftestdir
+cd conftestdir
+rm -rf *
+
+cat >conftest.$ac_ext <<EOF
+          $1
+EOF
+
+if AC_TRY_EVAL(ac_compile); then
+  :
+  [$2]
+else
+  :
+  [$3]
+fi
+cd ..
+rm -rf conftest*
+])
+
+dnl -------------------------------------------------------------------------
+dnl AC_TRY_FLINK()
+dnl
+dnl	Check if we can link a simple Fortran 90 program.
+dnl
+dnl AC_TRY_FLINK(INCLUDES, FUNCTION-BODY,
+dnl              [ACTION-IF-SUCCESS], [ACTION-IF-NOT-SUCCESS])
+dnl
+AC_DEFUN([AC_TRY_FLINK],
+[AC_LANG_SAVE
+AC_LANG_FORTRAN9X
+
+test -d conftestdir || mkdir conftestdir
+cd conftestdir
+rm -rf *
+
+cat >conftest.$ac_ext <<EOF
+        program conftest
+          include '$1'
+          $2
+        end
+EOF
+
+if AC_TRY_EVAL(ac_compile) && AC_TRY_EVAL(ac_link); then
+  :
+  [$3]
+else
+  :
+  [$4]
+fi
+cd ..
+rm -rf conftest*
+])
+
+dnl -------------------------------------------------------------------------
+dnl AC_CHECK_FLIB()
+dnl
+dnl	Check if we can link a simple Fortran 90 program with the specified library.
+dnl
+dnl AC_CHECK_FLIB(LIBRARY, FUNCTION-BODY,
+dnl               [ACTION-IF-SUCCESS], [ACTION-IF-NOT-SUCCESS])
+dnl
+AC_DEFUN([AC_CHECK_FLIB],
+[AC_LANG_SAVE
+AC_LANG_FORTRAN9X
+
+test -d conftestdir || mkdir conftestdir
+cd conftestdir
+rm -rf *
+
+cat >conftest.$ac_ext <<EOF
+        program conftest
+          $2
+        end
+EOF
+
+if test -n "$1"; then
+  saved_LIBS="$LIBS"
+  LIBS="$LIBS -l$1"
+fi
+
+if AC_TRY_EVAL(ac_compile) && AC_TRY_EVAL(ac_link); then
+  :
+  [$3]
+else
+  LIBS="$saved_LIBS"
+  [$4]
+fi
+cd ..
+rm -rf conftest*
+])
+
+dnl -------------------------------------------------------------------------
+dnl -------------------------------------------------------------------------
+dnl
+dnl Possible future tests for the Fortran stuff...
+dnl
+dnl -------------------------------------------------------------------------
+dnl -------------------------------------------------------------------------
+dnl
+dnl echo $ac_n "checking whether f90 real type has 12 digits of precision""... $ac_c" 1>&6
+dnl cat >conftest.f90 <<'EOF'
+dnl program conftest
+dnl 	if (selected_real_kind(12) .eq. kind(0.0)) then
+dnl 		print '(a)','YES'
+dnl 	else
+dnl 		print '(a)','NO'
+dnl 	end if
+dnl end program conftest
+dnl EOF
+dnl $ac_cv_prog_F90 $FFLAGS -o conftest conftest.f90 > /dev/null 2>&1
+dnl if test "`./conftest | head -1`" = YES; then
+dnl 	echo "yes" 1>&6
+dnl 	AC_DEFINE(HIPREC)
+dnl else
+dnl 	echo "no" 1>&6
+dnl fi
+
+dnl echo $ac_n "checking whether f90 precision of default real type""... $ac_c" 1>&6
+dnl cat >conftest.f90 <<'EOF'
+dnl program conftest
+dnl 	if (kind(0.0) .eq. selected_real_kind(12) .or.&
+dnl 		&kind(0.0) .eq. selected_real_kind(6) ) then
+dnl 		print '(a)','YES'
+dnl 	else
+dnl 		print '(a)','NO'
+dnl 	end if
+dnl end program conftest
+dnl EOF
+dnl $ac_cv_prog_F90 $FFLAGS -o conftest conftest.f90 > /dev/null 2>&1
+dnl if test "`./conftest | head -1`" = YES; then
+dnl 	echo "OK" 1>&6
+dnl 	AC_DEFINE(REALOK)
+dnl else
+dnl 	echo "no" 1>&6
+dnl fi
+
+dnl echo $ac_n "checking accuracy of arithmetic""... $ac_c" 1>&6
+dnl cat >conftest.f90 <<'EOF'
+dnl program conftest
+dnl 	integer, parameter :: double=selected_real_kind(12)
+dnl 	real(double), parameter :: ulp=2.0_double**(-47)
+dnl 	real(double), parameter :: ans=0.92699498904359955986_double
+dnl 	real(double) :: x,y,z
+dnl 	integer i
+dnl 	x=0.0_double
+dnl 	y=ulp
+dnl 	do i=2,100
+dnl 		z=x+y
+dnl 		x=y
+dnl 		y=z-int(z)
+dnl 	end do
+dnl 	if (y-ans .lt. ulp/2.0_double) then
+dnl 		print '(a)','YES'
+dnl 	else
+dnl 		print '(a)','NO'
+dnl 	end if
+dnl end program conftest
+dnl EOF
+dnl $ac_cv_prog_F90 $FFLAGS -o conftest conftest.f90 > /dev/null 2>&1
+dnl if test "`./conftest | head -1`" = YES; then
+dnl 	echo "OK" 1>&6
+dnl 	AC_DEFINE(ARITHOK)
+dnl else
+dnl 	echo "no" 1>&6
+dnl fi
+
+dnl echo $ac_n "checking whether int is the fastest way to truncate""... $ac_c" 1>&6
+dnl cat >conftest.f90 <<'EOF'
+dnl program conftest
+dnl 	integer, parameter :: double=selected_real_kind(12)
+dnl 	real(double), parameter :: ulp=2.0_double**(-47)
+dnl 	real(double) :: x,y,z,ya,yb
+dnl 	integer :: t0,t1,i,timea,timeb
+dnl 
+dnl 	x=0.0_double
+dnl 	y=ulp
+dnl 	call system_clock(t0)
+dnl 	do i=2,1000000
+dnl 		z=x+y
+dnl 		x=y
+dnl 		y=z-int(z)
+dnl 	end do
+dnl 	ya=y
+dnl 	call system_clock(t1)
+dnl 	timea=t1-t0
+dnl 
+dnl 	x=0.0_double
+dnl 	y=ulp
+dnl 	call system_clock(t0)
+dnl 	do i=2,1000000
+dnl 		z=x+y
+dnl 		x=y
+dnl 		if (z.ge.1.0_double) then
+dnl 			y=z-1.0_double
+dnl 		else
+dnl 			y=z
+dnl 		end if
+dnl 	end do
+dnl 	yb=y
+dnl 	call system_clock(t1)
+dnl 	timeb=t1-t0
+dnl 
+dnl 	if (timea.lt.timeb) then
+dnl 		print '(a)','YES'
+dnl 	else
+dnl 		print '(a)','NO'
+dnl 	end if
+dnl 	print *,ya,yb
+dnl end program conftest
+dnl EOF
+dnl $ac_cv_prog_F90 $FFLAGS -o conftest conftest.f90 > /dev/null 2>&1
+dnl if test "`./conftest | head -1`" = YES; then
+dnl 	echo "yes" 1>&6
+dnl 	AC_DEFINE(USEINT)
+dnl else
+dnl 	echo "no" 1>&6
+dnl fi
+dnl
+dnl -------------------------------------------------------------------------
+dnl -------------------------------------------------------------------------

Added: packages/hdf5/branches/upstream/current/fortran/config/BlankForm
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/BlankForm	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/BlankForm	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,139 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+    CC="/some/default/compiler/named/foo -ansi"
+    CC_BASENAME=foo
+fi
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+    gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -ansi"
+	DEBUG_CFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}

Added: packages/hdf5/branches/upstream/current/fortran/config/commence.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/commence.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/commence.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,189 @@
+##------------------------------------------------------------ -*- makefile -*-
+## 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.
+
+
+## The following section of this makefile comes from the
+## `./config/commence' file which was generated with config.status
+## from `./config/commence.in'.
+##-----------------------------------------------------------------------------
+
+## Things that Make needs
+.SUFFIXES:
+.SUFFIXES: .c .f90 .o .lo
+ at SET_MAKE@
+
+## Directories to search
+ at SEARCH@
+
+## Programs
+SHELL=/bin/sh
+CC=@CC@
+F9X=@F9X@
+F9XMODEXT=@F9XMODEXT@
+F9XMODFLAG=@F9XMODFLAG@
+FSEARCH_DIRS=@FSEARCH_DIRS@
+## H5_CPPFLAGS, H5_CFLAGS, and H5_FFLAGS are used for extra flags used
+## to build HDF5 (flags that don't need to be included in h5cc,
+## for instance).
+CFLAGS=@CFLAGS@ @H5_CFLAGS@
+CPPFLAGS=@CPPFLAGS@ @H5_CPPFLAGS@
+FFLAGS=@FFLAGS@ @H5_FFLAGS@
+LDFLAGS=@LDFLAGS@
+ROOT=@ROOT@
+LIBS=@LIBS@
+AR=@AR@
+RANLIB=@RANLIB@
+PERL=@PERL@
+RM=rm -f
+CP=cp
+INSTALL=@INSTALL@
+INSTALL_PROGRAM=@INSTALL_PROGRAM@
+INSTALL_DATA=@INSTALL_DATA@
+PARALLEL=@PARALLEL@
+RUNSERIAL=@RUNSERIAL@
+RUNPARALLEL=@RUNPARALLEL@
+RUNTEST=$(RUNSERIAL)
+TIME=time
+TRACE=:
+
+## Installation points
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+bindir=@bindir@
+libdir=@libdir@
+includedir=@includedir@
+docdir=@exec_prefix@/doc
+PUB_LIB=$(LIB)
+
+## Shared libraries
+LT_STATIC_EXEC=@LT_STATIC_EXEC@
+DYNAMIC_DIRS=@DYNAMIC_DIRS@
+LT=$(top_builddir)/libtool
+LT_CCOMPILE=$(LT) --mode=compile $(CC)
+LT_LINK_CLIB=$(LT) --mode=link $(CC) $(DYNAMIC_DIRS) $(LT_STATIC_EXEC) -rpath $(libdir)
+LT_LINK_CEXE=$(LT) --mode=link $(CC) $(DYNAMIC_DIRS) -rpath $(bindir)
+LT_RUN=$(LT) --mode=execute
+LT_INSTALL_PROG=$(LT) --mode=install $(INSTALL_PROGRAM)
+LT_INSTALL_LIB=$(LT) --mode=install $(INSTALL_DATA)
+LT_UNINSTALL=$(LT) --mode=uninstall $(RM)
+
+# Fortran compilation/linking stuff
+LT_FCOMPILE=$(LT) --mode=compile $(F9X)
+LT_LINK_FLIB=$(LT) --mode=link $(F9X) -static $(DYNAMIC_DIRS)
+LT_LINK_FEXE=$(LT) --mode=link $(F9X) $(LT_STATIC_EXEC) $(DYNAMIC_DIRS)
+
+## Optional variables. We must declare them here because Irix pmake
+## complains if it sees a reference to a variable which has never been
+## defined. The main makefile is free to redefine these to something else.
+DOCDIR=$(docdir)
+EXAMPLEDIR=$(docdir)/hdf5/examples/fortran
+LIB=
+LIB_SRC=
+LIB_OBJ=
+PUB_HDR=
+PUB_PROGS=
+PROGS=
+TEST_PROGS=
+TEST_PROGS_PARA=
+TEST_FLAGS=
+TEST_SCRIPTS=
+TEST_SCRIPTS_PARA=
+AUX_LIB=
+EXAMPLE_PROGS=
+SUBDIRS=
+LIBHDF5=
+
+## The default is to build the library and/or programs.  We must build
+## them sequentially.
+all:
+	$(MAKE) lib
+	$(MAKE) progs
+	$(MAKE) tests
+
+## The following rules insure that the Makefile is up-to-date by rerunning
+## various autoconf components (although not all versions of make assume
+## that the makefile is implicitly a target).  We use time stamp files to
+## keep track of the most recent update of H5config.h.in and H5config.h
+## because autoheader and config.status don't update the modification time
+## if the contents don't change.
+## Invoke it by "gmake reconfigure".
+##
+## Graphically, the dependencies are:
+##
+##		         configure.in
+##                           |  |
+##         +-----------------+  +------------+
+##         |                                 |
+##      stamp1                           configure
+##   (H5config.h.in)                         |
+##       |  |                                |
+##       |  +---------------+    +-----------+
+##       |                  |    |
+##       |               config.status
+##       |                     |
+##       |  +------------------+
+##       |  |
+##      stamp2
+##    (H5config.h)                   Makefile.in et al
+##         |                                 |
+##         +------------------+  +-----------+
+##                            |  |
+##                          Makefile
+##
+## A side effect of updating stamp1 is to generate H5config.h.in and a
+## side effect of updating stamp2 is to generate H5config.h.  When using
+## a version of make that doesn't treat the makefile as the initial target
+## the user may want to occassionally type `make Makefile' in any source
+## directory.
+## The `Makefile' target has been renamed to `reconfigure' so that the
+## autoconf and make depend processes do not start up automatically.
+## One must do `make reconfigure' explicitedly to start the process.
+## (When srcdir is used and if more than one machines are running,
+## this automatic Makefile/autoconf can get things unstable.)
+##
+STAMP1=$(top_builddir)/config/stamp1
+STAMP2=$(top_builddir)/config/stamp2
+
+MAKEFILE_PARTS=$(srcdir)/Makefile.in		\
+	       $(top_srcdir)/config/commence.in	\
+	       $(top_srcdir)/config/conclude.in	\
+	       $(top_srcdir)/config/depend1.in	\
+	       $(top_srcdir)/config/depend2.in	\
+	       $(top_srcdir)/config/depend3.in	\
+	       $(top_srcdir)/config/depend4.in	\
+	       $(top_srcdir)/config/dependN.in
+
+$(STAMP1): $(top_srcdir)/configure.in
+	touch $(STAMP1)
+	-cd $(top_srcdir); autoheader
+
+$(STAMP2): $(STAMP1) $(top_builddir)/config.status
+	touch $(STAMP2)
+	-cd $(top_builddir); \
+	   CONFIG_FILES= CONFIG_HEADERS=src/H5config.h ./config.status
+
+$(top_srcdir)/configure: $(top_srcdir)/configure.in
+	-cd $(top_srcdir); autoconf
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(STAMP1)
+	-cd $(top_builddir); ./config.status --recheck
+
+# rerun the autoconf process if any configure components have changed. 
+reconfigure: $(MAKEFILE_PARTS) $(STAMP2)
+	-cd $(top_builddir); CONFIG_HEADERS= ./config.status
+
+##-----------------------------------------------------------------------------
+## The following section of this makefile comes from the middle of
+## `Makefile.in' from this directory.  It was generated by running
+## `config.status'.
+##-----------------------------------------------------------------------------

Added: packages/hdf5/branches/upstream/current/fortran/config/conclude.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/conclude.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/conclude.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,270 @@
+##------------------------------------------------------------ -*- makefile -*-
+## 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.
+
+
+## The following section of this makefile comes from the
+## `./config/conclude' file which was generated with config.status
+## from `./config/conclude.in'.
+##-----------------------------------------------------------------------------
+
+## This is the target for the library described in the main body of the
+## makefile.
+##
+lib: $(LIB)
+$(LIB) __no_library__: $(LIB_OBJ)
+	@$(LT_LINK_FLIB) -o $@ $(FFLAGS) $(LIB_OBJ) $(LDFLAGS) $(LIBS)
+
+progs: $(LIB) $(PROGS)
+
+## Build a tags file in this directory.
+TAGS: $(LIB_SRC)
+	$(RM) $@
+	-etags $(LIB_SRC)
+
+## Runs each test in order, passing $(TEST_FLAGS) to the program.
+tests: $(TEST_PROGS) $(TEST_PROGS_PARA) $(LIB)
+check test _test: tests
+	@echo "===Fortran tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="
+	$(MAKE) _check-s
+	$(MAKE) _check-p
+	@echo "===Fortran tests in `echo ${PWD} | sed -e s:.*/::` ended `date`==="
+
+## serial tests
+check-s: tests
+	@echo "===Serial Fortran tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="
+	$(MAKE) _check-s
+	@echo "===Serial Fortran tests in `echo ${PWD} | sed -e s:.*/::` ended `date`==="
+
+## parallel tests
+check-p: tests
+	@echo "===Parallel Fortran tests in `echo ${PWD} | sed -e s:.*/::` begin `date`==="
+	$(MAKE) _check-p
+	@echo "===Parallel Fortran tests in `echo ${PWD} | sed -e s:.*/::` ended `date`==="
+
+## Actual execution of sequtial tests.
+_check-s: tests
+	@for test in $(TEST_PROGS) dummy; do                                  \
+	   if test $$test != dummy; then				      \
+	      echo "============================";			      \
+	      echo "Testing $$test $(TEST_FLAGS)";			      \
+	      echo "============================";			      \
+	      srcdir="$(srcdir)"					      \
+		 $(TIME) $(RUNTEST) ./$$test $(TEST_FLAGS) ||		      \
+		 (test $$HDF5_Make_Ignore && echo "*** Error ignored") ||     \
+		 break;							      \
+	      echo "";							      \
+	   fi;								      \
+	done;								      \
+	test $$test = dummy || false
+	@for test in $(TEST_SCRIPTS) dummy; do                                \
+	   if test $$test != dummy; then				      \
+	      echo "============================";			      \
+	      echo "Testing $$test $(TEST_FLAGS)";			      \
+	      echo "============================";			      \
+	      RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)"           \
+	         srcdir="$(srcdir)"					      \
+		 $(TIME) /bin/sh $$test $(TEST_FLAGS) ||	              \
+		 (test $$HDF5_Make_Ignore && echo "*** Error ignored") ||     \
+		 break;							      \
+	      echo "";							      \
+	   fi;								      \
+	done;								      \
+	test $$test = dummy || false
+
+## Actual execution of parallel tests.
+_check-p: tests
+	@if test -n "$(TEST_PROGS_PARA)"; then				      \
+	    echo "**** Hint ****";					      \
+	    echo "Parallel test files reside in the current directory"	      \
+	         "by default.";						      \
+	    echo "Set HDF5_PARAPREFIX to use another directory. E.g.,";	      \
+	    echo "    HDF5_PARAPREFIX=/PFS/user/me";			      \
+	    echo "    export HDF5_PARAPREFIX";				      \
+	    echo "    make check";					      \
+	    echo "**** end of Hint ****";				      \
+	fi
+	@for test in $(TEST_PROGS_PARA) dummy; do                             \
+	   if test $$test != dummy; then				      \
+	      echo "============================";			      \
+	      echo "Testing $$test $(TEST_FLAGS)";			      \
+	      echo "============================";			      \
+	      srcdir="$(srcdir)"					      \
+		 $(TIME) $(RUNPARALLEL) ./$$test $(TEST_FLAGS) ||	      \
+		 (test $$HDF5_Make_Ignore && echo "*** Error ignored") ||     \
+		 break;							      \
+	      echo "";							      \
+	   fi;								      \
+	done;								      \
+	test $$test = dummy || false
+	@for test in $(TEST_SCRIPTS_PARA) dummy; do                           \
+	   if test $$test != dummy; then				      \
+	      echo "============================";			      \
+	      echo "Testing $$test $(TEST_FLAGS)";			      \
+	      echo "============================";			      \
+	      RUNSERIAL="$(RUNSERIAL)" RUNPARALLEL="$(RUNPARALLEL)"           \
+	         srcdir="$(srcdir)"					      \
+		 $(TIME) /bin/sh $$test $(TEST_FLAGS) ||	              \
+		 (test $$HDF5_Make_Ignore && echo "*** Error ignored") ||     \
+		 break;							      \
+	      echo "";							      \
+	   fi;								      \
+	done;								      \
+	test $$test = dummy || false
+
+## Make installation directories directories if they don't exist.
+$(libdir):
+	$(top_srcdir)/bin/mkdirs $@
+
+$(includedir):
+	$(top_srcdir)/bin/mkdirs $@
+
+$(bindir):
+	$(top_srcdir)/bin/mkdirs $@
+
+$(DOCDIR):
+	$(top_srcdir)/bin/mkdirs $@
+
+$(EXAMPLEDIR):
+	$(top_srcdir)/bin/mkdirs $@
+
+## Install the library, the public header files, and public programs.
+## Install h5fc as h5pfc for parallel mode.
+install: $(PUB_LIB) $(PUB_HDR) $(PUB_PROGS) $(libdir) $(includedir) $(bindir)
+	@for f in X $(PUB_LIB); do					      \
+	   if test $$f != X; then					      \
+	      (cd .libs && rm -f $(PUB_LIB)i && ln -s ../$(PUB_LIB) $(PUB_LIB)i); \
+	      ($(LT_INSTALL_LIB) $$f $(libdir)/. || exit 1);		      \
+	   fi;								      \
+	done
+	@if test -n "$(F9XMODEXT)" && test "X$(F9XMODEXT)" != "Xo"; then      \
+	   if test -f "hdf5.$(F9XMODEXT)" || test -f "HDF5.$(F9XMODEXT)"; then \
+	      ((cp *.$(F9XMODEXT) $(libdir)/. && chmod 644 $(libdir)/*.$(F9XMODEXT)) || exit 1); \
+	   fi;                                                                \
+	fi
+	@if test -f libhdf5_fortran.settings; then			      \
+	   (set -x; $(INSTALL_DATA) libhdf5_fortran.settings $(libdir)/. || exit 1);  \
+	fi
+	@for f in X $(PUB_HDR); do					      \
+	   if test $$f != X; then					      \
+	      if test -f $$f; then					      \
+		 (set -x; $(INSTALL_DATA) $$f $(includedir)/. || exit 1);     \
+	      else							      \
+	         (set -x; $(INSTALL_DATA) $(srcdir)/$$f $(includedir)/. ||    \
+		    exit 1);						      \
+	      fi;							      \
+	   fi;								      \
+	done
+	@for f in X $(PUB_PROGS); do					      \
+	   if test $$f != X; then					      \
+	     if test "X$(PARALLEL)" != "Xno" -a $$f = "h5fc"; then            \
+	      ($(LT_INSTALL_PROG) $$f $(bindir)/h5pfc || exit 1);	      \
+	     else							      \
+	      ($(LT_INSTALL_PROG) $$f $(bindir)/. || exit 1);		      \
+	     fi;                                                              \
+	   fi;							              \
+	done
+
+install-examples: $(EXAMPLE_PROGS) $(EXAMPLEDIR)
+	@for f in X $(EXAMPLE_PROGS); do				      \
+	  if test $$f != X; then					      \
+	    (set -x; $(INSTALL_DATA) $(srcdir)/$$f $(EXAMPLEDIR)/. || exit 1);\
+	  fi;								      \
+	done
+
+uninstall-examples:
+	@if test -n "$(EXAMPLE_PROGS)"; then 				      \
+	  set -x; cd $(EXAMPLEDIR) && $(RM) $(EXAMPLE_PROGS);		      \
+	fi
+
+## Removes those things that `make install' (would have) installed.
+uninstall:
+	@for f in libhdf5_fortran.settings $(LIB); do			      \
+          $(LT_UNINSTALL) $(libdir)/$$f;				      \
+	done
+	@if test -n "$(PUB_HDR)"; then  				      \
+	  set -x; cd $(includedir) && $(RM) $(PUB_HDR);			      \
+	fi
+	@if test -n "$(F9XMODEXT)" -a "X$(F9XMODEXT)" != "Xo"; then	      \
+	  if test -f "$(libdir)/hdf5.$(F9XMODEXT)" -o -f "$(libdir)/HDF5.$(F9XMODEXT)"; then \
+	    set -x; $(RM) $(libdir)/*.$(F9XMODEXT);			      \
+	  fi;								      \
+	fi
+	@for f in X $(PUB_PROGS); do					      \
+	  if test $$f != X; then					      \
+	    $(LT_UNINSTALL) $(bindir)/$$f;				      \
+	  fi;								      \
+	done
+
+## Removes temporary files without removing the final target files.  That is,
+## remove things like object files but not libraries or executables.
+##
+mostlyclean:
+	@if test -n "$(LIB_OBJ)"; then                                        \
+	    $(RM) $(LIB_OBJ) $(LIB_OBJ:.lo=.o);                               \
+	fi
+	@if test -n "$(TEST_OBJ)"; then                                       \
+	    $(RM) $(TEST_OBJ) $(TEST_OBJ:.lo=.o);                             \
+	fi
+	@if test -n "$(PROG_OBJ)" || test -n "$(MOSTLYCLEAN)"; then           \
+	    $(RM) $(PROG_OBJ) $(PROG_OBJ:.lo=.o) $(MOSTLYCLEAN);              \
+	fi
+
+## Like `mostlyclean' except it also removes the final targets: things like
+## libraries and executables.  This target doesn't remove any file that
+## is part of the HDF5 distribution.
+##
+clean: mostlyclean
+	@if test -n "$(LIB)" -o -n "$(TEST_PROGS)" -o -n "$(TEST_PROGS_PARA)" -o -n "$(PROGS)" -o -n "$(CLEAN)"; then \
+	    $(RM) $(LIB) $(TEST_PROGS) $(TEST_PROGS_PARA) $(PROGS) $(CLEAN);                     \
+	fi
+	-$(RM) *.M *.a *.mod
+	-$(RM) -r .libs
+
+## Like `clean' except it also removes files that were created by running
+## configure.  If you've unpacked the source and built HDF5 without creating
+## any other files, then `make distclean' will leave only the files that were
+## in the distribution.
+##
+distclean: clean
+	-$(RM) .depend TAGS *~ core *.core *.bak *.old *.new $(DISTCLEAN)
+	@if test -f $(srcdir)/Makefile.in; then				      \
+	   (set -x; $(RM) Makefile);					      \
+	fi
+
+## Like `distclean' except it deletes all files that can be regenerated from
+## the makefile, including those generated from autoheader and autoconf.
+##
+maintainer-clean: distclean
+	-$(RM) *~ core core.* *.core *.bak *.contrib gmon.out
+
+## Implicit rules
+.c.o:
+	$(CC) $(CFLAGS) $(CPPFLAGS) -c $<
+
+.c.lo:
+	@$(LT_CCOMPILE) $(CFLAGS) $(CPPFLAGS) -c $<
+
+.f90.o:
+	$(F9X) $(FFLAGS) $(FSEARCH_DIRS) -c $<
+
+.f90.lo:
+	@$(LT_FCOMPILE) $(FFLAGS) $(FSEARCH_DIRS) -c $<
+
+##-----------------------------------------------------------------------------
+## The following section of this makefile contains dependencies between the
+## source files and the header files.
+##-----------------------------------------------------------------------------
+.PHONY: dep depend
+dep depend: $(srcdir)/Dependencies
+
+ at DEPEND@

Added: packages/hdf5/branches/upstream/current/fortran/config/dec-flags
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/dec-flags	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/dec-flags	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,108 @@
+#							-*- shell-script -*-
+#
+# 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 file should be sourced into configure if the compiler is a DEC
+# compiler.  It is careful not to do anything if the compiler is not
+# DEC; otherwise `cc_flags_set' is set to `yes'
+#
+
+# Get the compiler version unless it's already known.
+#
+#   cc_vendor:    The compiler vendor: DEC
+#   cc_version:   Version number, like: V5.2-038
+#
+if test X = "X$cc_flags_set"; then
+    cc_vendor=DEC
+    cc_version="`$CC $CFLAGS -V 2>&1 |head -1 |\
+	        sed 's/.*DEC C \(V[0-9][-\.0-9]*\).*/\1/'`"
+    if test X != "$gcc_version"; then
+	echo "compiler '$CC' is $cc_vendor-$cc_version"
+    else
+        cc_vendor=
+    fi
+fi
+
+# Warn about old compilers that don't work right.
+case "$cc_vendor-$cc_version" in
+    DEC-V5.2-038)
+        cat <<EOF
+    **
+    ** This compiler may generate incorrect code when optimizations are
+    ** enabled. Please upgrade to a newer version (we're not sure which
+    ** version actually works) before reporting bugs to the HDF5 team.
+    **
+EOF
+	sleep 5
+	;;
+esac
+
+# Compiler flags
+case "$cc_vendor-$cc_version" in
+    DEC-V5.*)
+	# Production
+	PROD_CFLAGS="-g0 -verbose -warnprotos -std -O4 $ARCH -ansi_args -fp_reorder -readonly_strings -inline speed"
+	PROD_CPPFLAGS="-D_INTRINSICS -D_INLINE_INTRINSICS"
+
+	# Debug
+	DEBUG_CFLAGS="-g -std -verbose -warnprotos"
+	DEBUG_CPPFLAGS=
+
+	# Profile
+	PROFILE_CFLAGS="-pg -std -verbose -warnprotos"
+	PROFILE_CPPFLAGS=
+
+	# Flags are set
+	cc_flags_set=yes
+	;;
+esac
+
+# If no flags were set then clear the compiler vendor and version info.
+if test X = "X$cc_flags_set"; then
+    cc_vendor=
+    cc_version=
+fi
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the Digital UNIX architechture)
+#
+R_LARGE=18
+R_INTEGER=9
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_LARGE)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=f90
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS -Olimit 2048 -std1"
+    DEBUG_FFLAGS="-Olimit 2048 -std1"
+    PROD_FFLAGS="-Olimit 2048 -std1"
+    PROFILE_FFLAGS="-Olimit 2048 -std1"
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/dec-osf4.x
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/dec-osf4.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/dec-osf4.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,33 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for detailed information.
+
+# The default compiler is `cc'
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+
+# Try GNU compiler flags.
+. $srcdir/config/gnu-flags
+
+# Try native DEC compiler
+ARCH=${ARCH:='-arch host -tune host'}
+. $srcdir/config/dec-flags

Added: packages/hdf5/branches/upstream/current/fortran/config/dec-osf5.x
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/dec-osf5.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/dec-osf5.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,33 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for detailed information.
+
+# The default compiler is `cc'
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+
+# Try GNU compiler flags.
+. $srcdir/config/gnu-flags
+
+# Try native DEC compiler
+ARCH=${ARCH:='-arch host -tune host'}
+. $srcdir/config/dec-flags

Added: packages/hdf5/branches/upstream/current/fortran/config/depend
===================================================================

Added: packages/hdf5/branches/upstream/current/fortran/config/depend1.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/depend1.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/depend1.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,79 @@
+##                                                             -*- makefile -*-
+## 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.
+
+
+
+## We keep a list of dependencies in `.depend' for each of the source
+## files on which it depends.  When one of the source files is modified
+## we remove its record from .depend and regenerate its dependencies,
+## tacking them onto the end of .depend.  By including the .depend file
+## into the makefile, we're telling make that the makefile depends on
+## the dependency list in the .depend file.
+##
+## This is as fast as the `.d' method described in the GNU make manual
+## for automatic dependencies, but has the added advantage that all
+## dependencies are stored in one place.  The advantage over the
+## `makedepend' program is that only those files that are out of date
+## have dependency information rebuilt, and the Makefile is not
+## modified.
+##
+## This is also where tracing information is updated.  The $(TRACE)
+## program is run on each source file to make sure that the H5TRACE()
+## macros are up to date.  If they are then the file is not modified,
+## otherwise the file is changed and a backup is saved by appending a
+## tilde to the file name.
+##
+$(srcdir)/Dependencies: .depend
+	@if test "$(srcdir)" != "."; then					\
+	  (									\
+	    echo '##'; 								\
+	    echo '## This file is machine generated on GNU systems.';		\
+	    echo '## Only temporary changes may be made here.';			\
+	    echo '##'; 								\
+	    echo '## Copyright by the Board of Trustees of the University of Illinois.'; \
+	    echo '## All rights reserved.'; 					\
+	    echo '##'; 								\
+	    echo '## This file is part of HDF5.  The full HDF5 copyright notice, including'; \
+	    echo '## terms governing use, modification, and redistribution, is contained in'; \
+	    echo '## the files COPYING and Copyright.html.  COPYING can be found at the root'; \
+	    echo '## of the source code distribution tree; Copyright.html can be found at the'; \
+	    echo '## root level of an installed copy of the electronic HDF5 document set and'; \
+	    echo '## is linked from the top-level documents page.  It can also be found at'; \
+	    echo '## http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have'; \
+	    echo '## access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu.'; \
+	    echo;								\
+	  ) >$@;								\
+	  $(PERL) -p $(top_srcdir)/bin/distdep .depend >>$@;			\
+	else									\
+	  echo 'Dependencies cannot be built when $$srcdir == $$builddir';	\
+	fi
+
+.depend: $(LIB_SRC) $(TEST_SRC) $(PROG_SRC)
+	@touch .depend
+	@for dep in $? dummy; do                                              \
+      if test $$dep != "dummy" -a -n "$(PERL)"; then                      \
+        case "$$dep" in                                                   \
+          *.c)                                                            \
+            echo Building dependencies for $$dep;                         \
+            obj=`basename $$dep .c`.lo;                                   \
+            sed '\%^'"$$obj"':%,\%[^\\]$$%d' <$@ >$@- && mv $@- $@;       \
+            $(TRACE) $$dep;                                               \
+            $(CC) -MM -MG $(CPPFLAGS) $$dep 2>/dev/null >>$@;             \
+            $(PERL) -w $(top_srcdir)/bin/dependencies --srcdir=$(srcdir) --top_srcdir=$(top_srcdir) --top_builddir=$(top_builddir) $@; \
+            ;;                                                            \
+        esac;                                                             \
+      fi;                                                                 \
+    done
+
+-include .depend
+

Added: packages/hdf5/branches/upstream/current/fortran/config/depend2.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/depend2.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/depend2.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,24 @@
+##							       -*- makefile -*-
+## 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 platform doesn't support automatic dependencies because we're
+## not using GNU gcc.  GNU gcc is needed in order to generate the list
+## of header files included by a source file.
+
+## Since automatic dependencies are not being used, we attempt to include the
+## `.distdep' file from the source tree. This file was automatically generated 
+## on some system that satisfies the above requirements.
+
+-include $(srcdir)/Dependencies

Added: packages/hdf5/branches/upstream/current/fortran/config/depend3.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/depend3.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/depend3.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,20 @@
+##							       -*- makefile -*-
+## 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.
+
+
+
+## Since automatic dependencies are not being used, we attempt to include the
+## `.distdep' file from the source tree. This file was automatically generated 
+## on some system that satisfies the above requirements.
+
+.include <$(srcdir)/Dependencies>

Added: packages/hdf5/branches/upstream/current/fortran/config/depend4.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/depend4.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/depend4.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,20 @@
+##							       -*- makefile -*-
+## 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.
+
+
+
+## Since automatic dependencies are not being used, we attempt to include the
+## `.distdep' file from the source tree. This file was automatically generated 
+## on some system that satisfies the above requirements.
+
+include $(srcdir)/Dependencies

Added: packages/hdf5/branches/upstream/current/fortran/config/dependN.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/dependN.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/dependN.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+##							       -*- makefile -*-
+## 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.
+
+
+
+## Automatic dependencies are not being used and we cannot include other
+## files.

Added: packages/hdf5/branches/upstream/current/fortran/config/freebsd
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/freebsd	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/freebsd	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,29 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# The default compiler is `gcc'
+if test "X-" = "X-$CC"; then
+    CC=gcc
+    CC_BASENAME=gcc
+fi
+
+# Figure out compiler flags
+. $srcdir/config/gnu-flags

Added: packages/hdf5/branches/upstream/current/fortran/config/gnu-flags
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/gnu-flags	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/gnu-flags	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,316 @@
+#							-*- shell-script -*-
+#
+# 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 file should be sourced into configure if the compiler is the
+# GNU gcc compiler or a derivative.  It is careful not to do anything
+# if the compiler is not GNU; otherwise `cc_flags_set' is set to `yes'
+#
+
+# Get the compiler version in a way that works for gcc, egcs, and
+# pgcc unless a compiler version is already known
+#
+#   cc_vendor:    The compiler name: gcc, egcs, or pgcc
+#   cc_version:   Version number: 2.91.60, 2.7.2.1
+#
+if test X = "X$cc_flags_set"; then
+    cc_version="`$CC $CFLAGS -v 2>&1 |grep 'gcc version' |\
+	        sed 's/.*gcc version \([-a-z0-9\.]*\).*/\1/'`"
+    cc_vendor=`echo $cc_version |sed 's/\([a-z]*\).*/\1/'`
+    cc_version=`echo $cc_version |sed 's/[-a-z]//g'`
+    if test X = "X$cc_vendor" -a X != "X$cc_version"; then
+	cc_vendor=gcc
+    fi
+    if test "-" != "$cc_vendor-$cc_version"; then
+	echo "compiler '$CC' is GNU $cc_vendor-$cc_version"
+    fi
+
+    # Some version numbers
+    cc_vers_major=`echo $cc_version | cut -f1 -d.`
+    cc_vers_minor=`echo $cc_version | cut -f2 -d.`
+    cc_vers_patch=`echo $cc_version | cut -f3 -d.`
+    test -n "$cc_vers_major" || cc_vers_major=0
+    test -n "$cc_vers_minor" || cc_vers_minor=0
+    test -n "$cc_vers_patch" || cc_vers_patch=0
+    cc_vers_all=`expr $cc_vers_major '*' 1000000 + $cc_vers_minor '*' 1000 + $cc_vers_patch`
+fi
+
+# GCC compilers before gcc-2.8.1 have problems with `long long'.
+if test gcc = "$cc_vendor" -a "$cc_vers_all" -lt 2008001; then
+    cat <<EOF
+    **
+    ** This compiler may be unable to properly compile the long long
+    ** data type used extensively by hdf5, although specifying
+    ** --disable-hsizet for configure may work around those bugs.
+    ** There may be other code generation problems also, especially
+    ** when optimizations are enabled.  Please upgrade to at least GNU
+    ** gcc version 2.8.1 before reporting bugs to the HDF5 team.
+    **
+EOF
+    sleep 5
+
+# GCC v2.96 (shipped with RH7.x) has problems with `float'-> `double' conversions.
+elif test gcc = "$cc_vendor" -a "$cc_vers_all" -eq 2096000; then
+   cat <<EOF
+    **
+    ** This compiler may have problems converting 'float' values to
+    ** 'double' values.  There may be other code generation problems
+    ** as well.
+    **
+    ** Please use a different version of gcc before reporting bugs.
+    **
+EOF
+       sleep 5
+
+# Current EGCS compilers have problems with `long long' and register
+# allocation when optimizations are turned on for x86 systems.
+elif test egcs = "$cc_vendor" -a "$cc_vers_all" -le 2091066; then
+    if test "$HSIZET" != "large"; then
+       cat <<EOF
+    **
+    ** This compiler may have problems allocating registers when
+    ** optimizations are enabled on some platforms. Specifying
+    ** --disable-hsizet usually avoids the bug.
+    **
+EOF
+       sleep 5
+    fi
+
+# All current versions of PGCC have problems also.
+elif test pgcc = "$cc_vendor" -a "$cc_vers_all" -le 2091066; then	    
+    cat <<EOF
+    **
+    ** This compiler may have problems allocating registers for long
+    ** long data types when optimizations are enabled. There may be
+    ** other code generation problems as well. We know of no version
+    ** of pgcc which is capable of compiling HDF5 in production mode.
+    ** Please use gcc-2.8 or egcs-1.1.1 before reporting bugs.
+    **
+EOF
+    sleep 5
+
+fi
+
+# Common GCC flags for various situations
+case "$cc_vendor-$cc_version" in
+  gcc*|egcs*|pgcc*)
+    # Architecture-specific flags
+    arch=
+    case "$host_os-$host_cpu" in
+        # FreeBSD sets the information from "uname -m" to the general machine
+        # architecture, not the specific CPU for the machine, so even our
+        # Pentium II Xeon server is set to "i386".  Once we know we are on a FreeBSD
+        # machine, use the "sysctl" command to get the CPU hardware model.
+        freebsd*-i386)
+            host_cpu_model=`sysctl -n hw.model`
+            case "$host_cpu_model" in
+                # Hmm.. this might not catch Celerons, but it won't hurt them either...
+                *Pro*|*II*|*III*|*IV*|*Athlon*)
+                    arch="-march=i686"
+                ;;
+            esac
+            ;;
+
+        *-i686)
+            arch="-march=i686"
+            ;;
+    esac
+
+    # Host-specific flags
+    case "`hostname`" in
+        sleipnir.ncsa.uiuc.edu)
+            arch="$arch -pipe"
+            ;;
+    esac
+
+    # General
+    CFLAGS="$CFLAGS $arch -ansi"
+
+    # Production
+    case "$cc_vendor-$cc_version" in
+      gcc-2.95.[34])
+        PROD_CFLAGS="-O3"
+        ;;
+      gcc-3.[0-4]*|gcc-4.[01]*)
+        # The optimization level is reduced for gcc 3.* and 4.* due to problems
+        # with code generation for src/H5Tconv.c with the -O2 & -O3 
+        # optimization levels (which shows up as failures for various integer
+        # types -> long long conversions in the test/dtypes test).  Perhaps
+        # later versions of gcc will fix this bug... - QAK - 2003/10/20
+        PROD_CFLAGS="-O"
+        ;;
+      gcc-4*)
+        # Be optimistic about future versions of gcc.. :-) - QAK - 2003/10/20
+        PROD_CFLAGS="-O3"
+        ;;
+      *)
+        PROD_CFLAGS="-O"
+        ;;
+    esac
+
+    PROD_CFLAGS="$PROD_CFLAGS -fomit-frame-pointer -finline-functions"
+    PROD_CPPFLAGS=
+
+    # Debug
+    DEBUG_CFLAGS="-g -fverbose-asm -pedantic -Wall -W -Wundef -Wshadow -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Wconversion -Wsign-compare -Waggregate-return -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs -Winline"
+    DEBUG_CPPFLAGS=
+
+    # Profile
+    PROFILE_CFLAGS="-g -pg"
+    PROFILE_CPPFLAGS=
+
+    # Flags are set
+    cc_flags_set=yes
+    ;;
+esac
+
+# Version specific GCC flags
+#
+# Please follow the pattern below by adding new versions at the top, copying
+# the information from the previous version and adding modifications to that.
+case "$cc_vendor-$cc_version" in
+
+# Closer to the gcc 4.1 release, we should check for additional flags to
+# include and break it out into it's own section, like the other versions
+# below. -QAK
+  gcc-4.[01]*)
+    # Replace -ansi flag with -std=c99 flag
+    CFLAGS="`echo $CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
+
+    # Disable warnings about using 'long long' type
+    CFLAGS="$CFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+
+    # Append warning flags from gcc-3.2* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization -Wmultichar"
+
+    # The "format=2" warning generates too many warnings about valid
+    # usage in the library.
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wformat=2"
+
+    # The "unreachable code" warning does not appear to be reliable yet...
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wendif-labels"
+
+    # Append warning flags from gcc-3.4* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wdeclaration-after-statement -Wold-style-definition -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    DEBUG_CFLAGS="`echo $DEBUG_CFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+
+    # Append more extra warning flags that only gcc4.0+ know about
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wvariadic-macros"
+    ;;
+
+  gcc-3.4*)
+    # Replace -ansi flag with -std=c99 flag
+    CFLAGS="`echo $CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
+
+    # Disable warnings about using 'long long' type
+    CFLAGS="$CFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+
+    # Append warning flags from gcc-3.2* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization -Wmultichar"
+
+    # The "format=2" warning generates too many warnings about valid
+    # usage in the library.
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wformat=2"
+
+    # The "unreachable code" warning does not appear to be reliable yet...
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wunreachable-code"
+
+    # Append warning flags from gcc-3.3* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wendif-labels"
+
+    # Append more extra warning flags that only gcc3.4+ know about
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wdeclaration-after-statement -Wold-style-definition -Winvalid-pch"
+
+    # Replace old -W flag with new -Wextra flag
+    DEBUG_CFLAGS="`echo $DEBUG_CFLAGS | sed -e 's/-W\ /-Wextra\ /g'`"
+    ;;
+
+  gcc-3.3*)
+    # Replace -ansi flag with -std=c99 flag
+    CFLAGS="`echo $CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
+
+    # Disable warnings about using 'long long' type
+    CFLAGS="$CFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+
+    # Append warning flags from gcc-3.2* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization -Wmultichar"
+
+    # The "format=2" warning generates too many warnings about valid
+    # usage in the library.
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wformat=2"
+
+    # The "unreachable code" warning does not appear to be reliable yet...
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wunreachable-code"
+
+    # Append more extra warning flags that only gcc3.3+ know about
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wendif-labels"
+    ;;
+
+  gcc-3.2*)
+    # Replace -ansi flag with -std=c99 flag
+    CFLAGS="`echo $CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
+
+    # Disable warnings about using 'long long' type
+    CFLAGS="$CFLAGS -Wno-long-long"
+
+    # Append warning flags from gcc-3* case
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+
+    # Append more extra warning flags that only gcc3.2+ know about
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wmissing-noreturn -Wpacked -Wdisabled-optimization -Wmultichar"
+
+    # The "format=2" warning generates too many warnings about valid
+    # usage in the library.
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wformat=2"
+
+    # The "unreachable code" warning does not appear to be reliable yet...
+    #DEBUG_CFLAGS="$DEBUG_CFLAGS -Wunreachable-code"
+    ;;
+
+  gcc-3*)
+    # Replace -ansi flag with -std=c99 flag
+    CFLAGS="`echo $CFLAGS | sed -e 's/-ansi/-std=c99/g'`"
+
+    # Disable warnings about using 'long long' type
+    CFLAGS="$CFLAGS -Wno-long-long"
+
+    # Append some extra warning flags that only gcc3+ know about
+    DEBUG_CFLAGS="$DEBUG_CFLAGS -Wfloat-equal -Wmissing-format-attribute -Wpadded"
+    ;;
+
+  gcc-2.9[56]*)
+    # Disable warnings about using 'long long' type
+    CFLAGS="$CFLAGS -Wno-long-long"
+    ;;
+esac
+
+# Clear cc info if no flags set
+if test "X$cc_flags_set" = "X"; then
+  cc_vendor=
+  cc_version=
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/hpux10.20
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/hpux10.20	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/hpux10.20	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,82 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Default compiler is `cc'
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+
+# Flags
+case "X-$CC" in
+    X-gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O3"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -Ae"
+	DEBUG_CFLAGS=-g
+	DEBUG_CPPFLAGS="-Ae"
+	PROD_CFLAGS=-O
+	PROD_CPPFLAGS="-Ae"
+	PROFILE_CFLAGS=
+	PROFILE_CPPFLAGS="-Ae"
+	;;
+esac
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the HPUX architechture)
+#
+R_LARGE=18
+R_INTEGER=9
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_INTEGER)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=f90
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS -O"
+    DEBUG_FFLAGS="-O"
+    PROD_FFLAGS="-O"
+    PROFILE_FFLAGS="-O"
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/hpux11.00
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/hpux11.00	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/hpux11.00	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,82 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Default compiler is `cc'
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+
+# Flags
+case "X-$CC" in
+    X-gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O3"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -Ae"
+	DEBUG_CFLAGS=-g
+	DEBUG_CPPFLAGS="-Ae"
+	PROD_CFLAGS=-O
+	PROD_CPPFLAGS="-Ae"
+	PROFILE_CFLAGS=
+	PROFILE_CPPFLAGS="-Ae"
+	;;
+esac
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the HPUX architechture)
+#
+R_LARGE=18
+R_INTEGER=9
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_INTEGER)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=f90
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS -O"
+    DEBUG_FFLAGS="-O"
+    PROD_FFLAGS="-O"
+    PROFILE_FFLAGS="-O"
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/hpux11.23
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/hpux11.23	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/hpux11.23	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,82 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Default compiler is `cc'
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+
+# Flags
+case "X-$CC" in
+    X-gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O3"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -Ae"
+	DEBUG_CFLAGS=-g
+	DEBUG_CPPFLAGS="-Ae"
+	PROD_CFLAGS=-O
+	PROD_CPPFLAGS="-Ae"
+	PROFILE_CFLAGS=
+	PROFILE_CPPFLAGS="-Ae"
+	;;
+esac
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the HPUX architechture)
+#
+R_LARGE=18
+R_INTEGER=9
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_INTEGER)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=f90
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS -O"
+    DEBUG_FFLAGS="-O"
+    PROD_FFLAGS="-O"
+    PROFILE_FFLAGS="-O"
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/hpux9.03
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/hpux9.03	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/hpux9.03	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,49 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details
+
+# Default compiler is `cc'
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+
+# Flags
+case "X-$CC" in
+    X-gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O3"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -Ae"
+	DEBUG_CFLAGS=-g
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS=
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS=
+	PROFILE_CPPFLAGS=
+	;;
+esac

Added: packages/hdf5/branches/upstream/current/fortran/config/i386-pc-cygwin32
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/i386-pc-cygwin32	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/i386-pc-cygwin32	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,30 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# The default compiler is `gcc'.
+if test "X-" =  "X-$CC"; then
+    CC=gcc
+    CC_BASENAME=gcc
+    LD=ld
+fi
+
+# Figure out compiler flags
+. $srcdir/config/gnu-flags

Added: packages/hdf5/branches/upstream/current/fortran/config/ia64-linux-gnu
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/ia64-linux-gnu	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/ia64-linux-gnu	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,102 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+# Use Intel C & Fortran compiler by default.
+if test "X-" =  "X-$CC"; then
+    CC=icc
+    CC_BASENAME=icc
+fi
+if test "X-" =  "X-$F9X"; then
+    F9X=ifort
+fi
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+
+case $CC_BASENAME in
+    ecc|icc)
+	. $srcdir/config/intel-flags
+	;;
+
+    gcc)
+	. $srcdir/config/gnu-flags
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -ansi"
+	DEBUG_CFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+#       R_LARGE is the number of digits for the bigest integer supported.
+#       R_INTEGER is the number of digits in INTEGER
+#
+# (for the Linux architechture)
+#
+
+R_LARGE=18
+R_INTEGER=9
+
+case $F9X in
+    *efc|*ifort)
+	# this is for efc v7.  Older efc do not work with these.
+	# -Vaxlib is for non-standard fortran calls like exit().
+	MORE_FFLAGS='-fpp -DDEC$=DEC_ -DMS$=MS_ -Vaxlib'
+	FFLAGS="$FFLAGS $MORE_FFLAGS"
+	HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+	HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+	HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+	HID_T='SELECTED_INT_KIND(R_INTEGER)'
+	SIZE_T='SELECTED_INT_KIND(R_LARGE)'
+	OBJECT_NAMELEN_DEFAULT_F=-1
+	f9x_flags_set=yes
+	;;
+    *)
+	HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+	HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+	HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+	HID_T='SELECTED_INT_KIND(R_INTEGER)'
+	SIZE_T='SELECTED_INT_KIND(R_LARGE)'
+	OBJECT_NAMELEN_DEFAULT_F=-1
+	f9x_flags_set=yes
+	;;
+esac
+
+# The following is not right and need work.
+if test -z "$f9x_flags_set"; then
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS"
+    DEBUG_FFLAGS=""
+    PROD_FFLAGS=""
+    PROFILE_FFLAGS=""
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/intel-fflags
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/intel-fflags	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/intel-fflags	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,94 @@
+#							-*- shell-script -*-
+#
+# 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 file should be sourced into configure if the compiler is the
+# Intel ifort compiler or a derivative.  It is careful not to do anything
+# if the compiler is not Intel; otherwise `f9x_flags_set' is set to `yes'
+#
+
+# Get the compiler version in a way that works for ifort
+# ifort unless a compiler version is already known
+#
+#   f9x_vendor:    The compiler name: ifort
+#   f9x_version:   Version number: 8.0
+#
+if test X = "X$f9x_flags_set"; then
+    f9x_version="`$F9X $FFLAGS -V 2>&1 |grep '^Intel'`"
+    if test X != "X$f9x_version"; then
+        f9x_vendor=ifort
+        f9x_version="`echo $f9x_version |sed 's/.*Version \([-a-z0-9\.\-]*\).*/\1/'`"
+        echo "compiler '$F9X' is Intel $f9x_vendor-$f9x_version"
+
+        # Some version numbers
+        # Intel version numbers are of the form: "major.minor"
+        f9x_vers_major=`echo $f9x_version | cut -f1 -d.`
+        f9x_vers_minor=`echo $f9x_version | cut -f2 -d.`
+        #f9x_vers_patch=`echo $f9x_version | cut -f2 -d.`
+        test -n "$f9x_vers_major" || f9x_vers_major=0
+        test -n "$f9x_vers_minor" || f9x_vers_minor=0
+        test -n "$f9x_vers_patch" || f9x_vers_patch=0
+        f9x_vers_all=`expr $f9x_vers_major '*' 1000000 + $f9x_vers_minor '*' 1000 + $f9x_vers_patch`
+    fi
+fi
+
+# Common Intel flags for various situations
+if test "X-ifort" = "X-$f9x_vendor"; then
+    # Insert section about version specific problems from gnu-flags here, if
+    # necessary.
+
+    arch=
+    # Architecture-specific flags
+    # Nothing currently. (Uncomment code below and modify to add any)
+    #case "$host_os-$host_cpu" in
+    #    *-i686)
+    #        arch="-march=i686"
+    #        ;;
+    #esac
+
+    # Host-specific flags
+    # Nothing currently. (Uncomment code below and modify to add any)
+    #case "`hostname`" in
+    #    sleipnir.ncsa.uiuc.edu)
+    #        arch="$arch -pipe"
+    #        ;;
+    #esac
+
+    # General
+    F9X_BASENAME=ifort
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS"
+
+    # Production
+    PROD_FFLAGS="-O3"
+
+    # Debug
+    DEBUG_FFLAGS="-g -check all"
+
+    # Profile
+    # Use this for profiling with gprof
+    PROFILE_FFLAGS="-g -p"
+
+    # Flags are set
+    f9x_flags_set=yes
+fi
+
+# Clear f9x info if no flags set
+if test "X-$f9x_flags_set" = "X-"; then
+  f9x_vendor=
+  f9x_version=
+fi
+
+

Added: packages/hdf5/branches/upstream/current/fortran/config/intel-flags
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/intel-flags	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/intel-flags	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,106 @@
+#							-*- shell-script -*-
+#
+# 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 file should be sourced into configure if the compiler is the
+# Intel icc compiler or a derivative.  It is careful not to do anything
+# if the compiler is not Intel; otherwise `cc_flags_set' is set to `yes'
+#
+
+# Get the compiler version in a way that works for icc
+# icc unless a compiler version is already known
+#
+#   cc_vendor:    The compiler name: icc
+#   cc_version:   Version number: 8.0
+#
+if test X = "X$cc_flags_set"; then
+    cc_version="`$CC $CFLAGS -V 2>&1 |grep 'Version'`"
+    if test X != "X$cc_version"; then
+        cc_vendor=icc
+        cc_version=`echo $cc_version |sed 's/.*Version \([-a-z0-9\.\-]*\).*/\1/'`
+        echo "compiler '$CC' is Intel $cc_vendor-$cc_version"
+
+        # Some version numbers
+        # Intel version numbers are of the form: "major.minor"
+        cc_vers_major=`echo $cc_version | cut -f1 -d.`
+        cc_vers_minor=`echo $cc_version | cut -f2 -d.`
+        #cc_vers_patch=`echo $cc_version | cut -f2 -d.`
+        test -n "$cc_vers_major" || cc_vers_major=0
+        test -n "$cc_vers_minor" || cc_vers_minor=0
+        test -n "$cc_vers_patch" || cc_vers_patch=0
+        cc_vers_all=`expr $cc_vers_major '*' 1000000 + $cc_vers_minor '*' 1000 + $cc_vers_patch`
+    fi
+fi
+
+# Common Intel flags for various situations
+if test "X-icc" = "X-$cc_vendor"; then
+    # Insert section about version specific problems from gnu-flags here, if
+    # necessary.
+
+    arch=
+    # Architecture-specific flags
+    # Nothing currently. (Uncomment code below and modify to add any)
+    #case "$host_os-$host_cpu" in
+    #    *-i686)
+    #        arch="-march=i686"
+    #        ;;
+    #esac
+
+    # Host-specific flags
+    # Nothing currently. (Uncomment code below and modify to add any)
+    #case "`hostname`" in
+    #    sleipnir.ncsa.uiuc.edu)
+    #        arch="$arch -pipe"
+    #        ;;
+    #esac
+
+    # General
+    CFLAGS="${CFLAGS:--std=c99} $arch"
+
+    # Production
+    PROD_CFLAGS="-O3"
+    PROD_CPPFLAGS=
+
+    # Debug
+    DEBUG_CFLAGS="-Wcheck -Wall -g -O0"
+    DEBUG_CPPFLAGS=
+
+    # Profile
+    # Use this for profiling with gprof
+    PROFILE_CFLAGS="-g -p"
+    PROFILE_CPPFLAGS=
+
+    # Flags are set
+    cc_flags_set=yes
+
+fi
+
+# Version specific ICC flags
+#
+# Please follow the pattern below by adding new versions at the top, copying
+# the information from the previous version and adding modifications to that.
+case "$cc_vendor-$cc_version" in
+    icc-8.0*)
+	# v8.0 -O3 infinite loops when compiling test/tselect.c. Use -O2.
+	PROD_CFLAGS="-O2"
+	;;
+esac
+
+# Clear cc info if no flags set
+if test "X-$cc_flags_set" = "X-"; then
+  cc_vendor=
+  cc_version=
+fi
+
+

Added: packages/hdf5/branches/upstream/current/fortran/config/intel-osf1
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/intel-osf1	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/intel-osf1	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,96 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# This is for the ASCI RED TFLOPS machine
+
+# The default compiler is `cicc'
+if test "X-" =  "X-$CC"; then
+    CC=cicc
+    CC_BASENAME=cicc
+fi
+
+# The default archiver is `xar'
+AR=${AR:-xar}
+
+# There is no ranlib
+RANLIB=:
+
+# Additional libraries
+LDFLAGS="$LDFLAGS -lnoop_stubs"
+
+# How to run serial and parallel test programs
+RUNSERIAL="yod -sz 1"
+RUNPARALLEL="yod -sz 8"
+
+# What must *always* be present for things to compile correctly?
+#CPPFLAGS="$CPPFLAGS -I."
+
+# What compiler flags should be used for code development?
+DEBUG_CFLAGS=-g
+DEBUG_CPPFLAGS=
+
+# What compiler flags should be used for building a production
+# library?
+PROD_CFLAGS=-O
+PROD_CPPFLAGS=
+
+# What compiler flags enable code profiling?
+PROFILE_CFLAGS=-pg
+PROFILE_CPPFLAGS=
+
+# Turn off shared lib option.  It does not work for TFLOPS yet.
+enable_shared="${enable_shared:-no}"
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+# Hard set sizeof_intN_t to 0 because they are not supported.
+ac_cv_sizeof_int8_t=${ac_cv_sizeof_int8_t='0'}
+ac_cv_sizeof_int16_t=${ac_cv_sizeof_int16_t='0'}
+ac_cv_sizeof_int32_t=${ac_cv_sizeof_int32_t='0'}
+ac_cv_sizeof_int64_t=${ac_cv_sizeof_int64_t='0'}
+ac_cv_sizeof_uint8_t=${ac_cv_sizeof_uint8_t='0'}
+ac_cv_sizeof_uint16_t=${ac_cv_sizeof_uint16_t='0'}
+ac_cv_sizeof_uint32_t=${ac_cv_sizeof_uint32_t='0'}
+ac_cv_sizeof_uint64_t=${ac_cv_sizeof_uint64_t='0'}
+
+# Hard set sizeof_int_leastN_t to 0 because they are not supported.
+ac_cv_sizeof_int_least8_t=${ac_cv_sizeof_int_least8_t='0'}
+ac_cv_sizeof_int_least16_t=${ac_cv_sizeof_int_least16_t='0'}
+ac_cv_sizeof_int_least32_t=${ac_cv_sizeof_int_least32_t='0'}
+ac_cv_sizeof_int_least64_t=${ac_cv_sizeof_int_least64_t='0'}
+ac_cv_sizeof_uint_least8_t=${ac_cv_sizeof_uint_least8_t='0'}
+ac_cv_sizeof_uint_least16_t=${ac_cv_sizeof_uint_least16_t='0'}
+ac_cv_sizeof_uint_least32_t=${ac_cv_sizeof_uint_least32_t='0'}
+ac_cv_sizeof_uint_least64_t=${ac_cv_sizeof_uint_least64_t='0'}
+
+# Hard set sizeof_int_fastN_t to 0 because they are not supported.
+ac_cv_sizeof_int_fast8_t=${ac_cv_sizeof_int_fast8_t='0'}
+ac_cv_sizeof_int_fast16_t=${ac_cv_sizeof_int_fast16_t='0'}
+ac_cv_sizeof_int_fast32_t=${ac_cv_sizeof_int_fast32_t='0'}
+ac_cv_sizeof_int_fast64_t=${ac_cv_sizeof_int_fast64_t='0'}
+ac_cv_sizeof_uint_fast8_t=${ac_cv_sizeof_uint_fast8_t='0'}
+ac_cv_sizeof_uint_fast16_t=${ac_cv_sizeof_uint_fast16_t='0'}
+ac_cv_sizeof_uint_fast32_t=${ac_cv_sizeof_uint_fast32_t='0'}
+ac_cv_sizeof_uint_fast64_t=${ac_cv_sizeof_uint_fast64_t='0'}
+

Added: packages/hdf5/branches/upstream/current/fortran/config/irix5.x
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/irix5.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/irix5.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,63 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details
+
+# The default compiler is `cc' and there is no ranlib.
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+RANLIB=:
+
+case "X-$CC_BASENAME" in
+    X-gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O3"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+        # Do *not* use -ansi because it prevents hdf5 from being able
+        # to read modification dates from the file. On some systems it
+        # can also result in compile errors in system header files
+        # since hdf5 includes a couple non-ANSI header files.
+        #CFLAGS="$CFLAGS -ansi"
+
+	# Always turn off these compiler warnings:
+        CFLAGS="$CFLAGS -woff 799"
+
+	# Extra debugging flags
+	DEBUG_CFLAGS=-g
+	DEBUG_CPPFLAGS=
+
+	# Extra production flags
+	# Note: higher optimizations relax alignment requirements needed.
+	PROD_CFLAGS="-O -s"
+	PROD_CPPFLAGS=
+
+	# Extra profiling flags
+	PROFILE_CFLAGS=-pg
+	PROFILE_CPPFLAGS=
+	;;
+esac

Added: packages/hdf5/branches/upstream/current/fortran/config/irix6.x
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/irix6.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/irix6.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,141 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Use SGI supplied C compiler by default.  There is no ranlib
+if test "X-" =  "X-$CC"; then
+    CC='cc'
+    CC_BASENAME=cc
+fi
+RANLIB=:
+
+# Compiler flags
+case "X-$CC_BASENAME" in
+    X-gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O3"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+        # Check for old versions of the compiler that don't work right.
+        case "`$CC -version 2>&1 |head -1`" in
+	    "Mongoose Compilers: Version 7.00")
+		echo "  +---------------------------------------------------+"
+		echo "  | You have an old version of cc (Mongoose Compilers |"
+		echo "  | version 7.00).  Please upgrade to MIPSpro version |"
+		echo "  | 7.2.1.2m (patches are available from the SGI web  |"
+		echo "  | site).  The 7.00 version may generate incorrect   |"
+		echo "  | code, especially when optimizations are enabled.  |"
+		echo "  +---------------------------------------------------+"
+		sleep 5
+		;;
+	esac
+
+	# Do *not* use -ansi because it prevents hdf5 from being able
+	# to read modification dates from the file. On some systems it
+	# can also result in compile errors in system header files
+	# since hdf5 includes a couple non-ANSI header files.
+	#CFLAGS="$CFLAGS -ansi"
+
+	# Always turn off these compiler warnings for the -64 compiler:
+	#    1174:  function declared but not used
+	#    1196:  __vfork() (this is an SGI config problem)
+	#    1209:  constant expressions
+	#    1429:  the `long long' type is not standard
+	#    1685:  turn off warnings about turning off invalid warnings
+	#    3201:  remark - parameter not referenced
+	CFLAGS="$CFLAGS -woff 1174,1429,1209,1196,1685,3201"
+
+	# Always turn off these compiler warnings for the old compiler:
+	#    799:   the `long long' type is not standard
+	#    803:   turn off warnings about turning off invalid warnings
+	#    835:   __vfork() (this is an SGI config problem)
+	CFLAGS="$CFLAGS -woff 799,803,835"
+
+	# Always turn off these loader warnings:
+	# (notice the peculiar syntax)
+	#      47:  branch instructions that degrade performance on R4000
+	#      84:  a library is not used
+	#      85:  duplicate definition preemption (from -lnsl)
+	#     134:  duplicate weak definition preemption (from -lnsl)
+	CFLAGS="$CFLAGS -Wl,-woff,47,-woff,84,-woff,85,-woff,134"
+
+	# Extra debugging flags
+	DEBUG_CFLAGS="-g -fullwarn"
+	DEBUG_CPPFLAGS=
+
+	# Extra production flags
+	PROD_CFLAGS="-64 -mips4 -O -s"
+	PROD_CPPFLAGS=
+
+	# Extra profiling flags
+	PROFILE_CFLAGS=-pg
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+# Use SGI supplied C compiler by default.  There is no ranlib
+if test "X-" =  "X-$F9X"; then
+    F9X="f90"
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS -64 -mips4 -O -s"
+    DEBUG_FFLAGS="-64 -mips4 -O -s"
+    PROD_FFLAGS="-64 -mips4 -O -s"
+    PROFILE_FFLAGS="-64 -mips4 -O -s"
+fi
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the IRIX architechture)
+#
+R_LARGE=18
+R_INTEGER=9
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_LARGE)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=f90
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS -64 -mips4 -O -s"
+    DEBUG_FFLAGS="-64 -mips4 -O -s"
+    PROD_FFLAGS="-64 -mips4 -O -s"
+    PROFILE_FFLAGS="-64 -mips4 -O -s"
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/linux-gnu
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/linux-gnu	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/linux-gnu	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+#							-*- shell-script -*-
+#
+# 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 is the same as linux-gnulibc1
+
+. $srcdir/config/linux-gnulibc1

Added: packages/hdf5/branches/upstream/current/fortran/config/linux-gnuaout
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/linux-gnuaout	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/linux-gnuaout	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+#							-*- shell-script -*-
+#
+# 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 is the same as linux-gnulibc1
+
+. $srcdir/config/linux-gnulibc1

Added: packages/hdf5/branches/upstream/current/fortran/config/linux-gnulibc1
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/linux-gnulibc1	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/linux-gnulibc1	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,146 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# The default compiler is `gcc'.
+if test -z "$CC"; then
+    CC=gcc
+    CC_BASENAME=gcc
+fi
+
+# Figure out GNU C compiler flags
+. $srcdir/config/gnu-flags
+
+# Figure out PGI C compiler flags
+. $srcdir/config/pgi-flags
+
+# Figure out Intel C compiler flags
+. $srcdir/config/intel-flags
+
+
+# The default Fortran 90 compiler
+if test "X-" = "X-$F9X"; then
+    case $CC_BASENAME in
+        gcc*|pgcc*)
+            F9X=pgf90
+            F9X_BASENAME=pgf90
+            ;;
+        icc*)
+            F9X=ifort
+            F9X_BASENAME=ifort
+            ;;
+        mpicc*)
+            F9X=mpif90
+            F9X_BASENAME=mpif90
+            ;;
+    esac
+else
+    case $F9X in
+        # The PGI and Intel compilers are automatically detected below
+        ifc*|ifort*|pgf90*)
+            ;;
+	g95)
+	    F9X_BASENAME=g95
+	    ;;
+	*mpif90)
+            # Probably an MPICH compiler script.  Find out what fortran
+            # compiler it uses. version flags used by known complers,
+	    # G95: g95 -v
+	    # Absoft: f95 -v
+	    # Intel: ifort -V
+	    # PGI: pgf90 -V
+	    # Try both options.
+            tmpfile=/tmp/cmpver.$$
+            ( $F9X -v; $F9X -V) >$tmpfile 2>&1
+	    if grep '(g95!)' $tmpfile > /dev/null; then
+		F9X_BASENAME=g95
+	    elif grep 'Absoft' $tmpfile > /dev/null; then
+		F9X_BASENAME=f95
+	    elif grep 'Portland Group' $tmpfile > /dev/null; then
+		    F9X_BASENAME=pgf90
+	    elif grep 'Intel(R)' $tmpfile > /dev/null; then
+		F9X_BASENAME=ifort
+	    fi
+            rm -f $tmpfile
+            ;;
+        *)
+            # Figure out which compiler we are using: pgf90 or Absoft f95
+            RM='rm -f'
+            tmpfile=/tmp/cmpver.$$
+            $F9X -V >$tmpfile
+            if test -s "$tmpfile"; then 
+                if( grep -s 'Absoft' $tmpfile > /dev/null) then
+                    F9X_BASENAME=f95
+                fi 
+                if( grep -s 'pgf90' $tmpfile > /dev/null) then
+                    F9X_BASENAME=pgf90
+                fi 
+            fi
+            $RM $tmpfile
+            ;;
+    esac
+fi
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the Linux architechture)
+#
+R_LARGE=18
+R_INTEGER=9
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_INTEGER)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+# Figure out PGI F90 compiler flags
+. $srcdir/config/pgi-fflags
+
+# Figure out Intel F90 compiler flags
+. $srcdir/config/intel-fflags
+
+case $F9X_BASENAME in
+    #
+    # Absoft compiler
+    #
+    f95)
+        # Set required flag for compiling C stubs
+        CFLAGS="$CFLAGS -DH5_ABSOFT" 
+
+        F9XSUFFIXFLAG=""
+# We force compiler to use upper case for external names 
+# (just in case since this should be a default EIP)
+        FFLAGS="$FFLAGS -YEXT_NAMES=UCS"
+        FSEARCH_DIRS=""
+        DEBUG_FFLAGS="-g"
+        PROD_FFLAGS="-O"
+        PROFILE_FFLAGS="-g"
+        f9x_flags_set=yes
+        ;;
+    g95)
+        # Set required flag for compiling C stubs
+        CFLAGS="$CFLAGS -DH5_G95" 
+	;;
+esac  

Added: packages/hdf5/branches/upstream/current/fortran/config/linux-gnulibc2
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/linux-gnulibc2	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/linux-gnulibc2	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,23 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Same as with gnulibc1 for now
+. $srcdir/config/linux-gnulibc1

Added: packages/hdf5/branches/upstream/current/fortran/config/nv1-cray
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/nv1-cray	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/nv1-cray	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,187 @@
+#                                                      -*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS         Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS       library suitable for use with debugging
+#                      tools. Usually this list will exclude
+#                      optimization switches (like `-O') and include
+#                      switches that turn on symbolic debugging
+#                      support (like `-g').
+#
+# PROD_CFLAGS          Flags to pass to the compiler to create a
+# PROD_CPPFLAGS                production version of the library.  These
+#                      usualy exclude symbolic debugging switches
+#                      (like `-g') and include optimization switches
+#                      (like `-O').
+#
+# PROFILE_CFLAGS       Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS     library suitable for performance testing (like 
+#                      `-pg').  This may or may not include debugging 
+#                      or production flags.
+#                      
+# CFLAGS               Flags can be added to this variable which
+#                      might already be partially initialized.  These 
+#                      flags will always be passed to the compiler
+#                      and should include switches to turn on full
+#                      warnings.  HDF5 attempts to be ANSI and Posix
+#                      compliant and employ good programming
+#                      practices resulting in few if any
+#                      warnings.
+#
+#                      Warning flags do not have to be added to CFLAGS
+#                      variable if the compiler is the GNU gcc
+#                      compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#                      The CFLAGS should contains *something* or else 
+#                      configure will probably add `-g'.  For most
+#                      systems this isn't a problem but some systems
+#                      will disable optimizations in favor of the
+#                      `-g'.
+#                      
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+    gcc)
+       CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+       DEBUG_CFLAGS="-g -fverbose-asm"
+       DEBUG_CPPFLAGS=
+       PROD_CFLAGS="-O3 -fomit-frame-pointer"
+       PROD_CPPFLAGS=
+       PROFILE_CFLAGS="-pg"
+       PROFILE_CPPFLAGS=
+       ;;
+
+    cc)
+       CFLAGS="$CFLAGS"
+       DEBUG_CFLAGS="-g"
+       DEBUG_CPPFLAGS=
+       PROD_CFLAGS=""
+       PROD_CPPFLAGS=
+       PROFILE_CFLAGS=
+       PROFILE_CPPFLAGS=
+       ;;
+
+    *)
+       CFLAGS="$CFLAGS -ansi"
+       DEBUG_CFLAGS="-g"
+       DEBUG_CPPFLAGS=
+       PROD_CFLAGS="-O"
+       PROD_CPPFLAGS=
+       PROFILE_CFLAGS="-pg"
+       PROFILE_CPPFLAGS=
+       ;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+#      R_LARGE is the number of digits for the bigest integer supported.
+#      R_INTEGER is the number of digits in INTEGER
+#
+# (for the UNICOS architechture)
+#
+R_LARGE=18
+R_INTEGER=9
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_LARGE)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=ftn
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    # -Wl passes flags to the linker and -M# will ignore warnings with
+    # number #. Warning 405 and 412 were stopping the executable from being built.
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS"
+    DEBUG_FFLAGS="-g"
+    PROD_FFLAGS=""
+    PROFILE_FFLAGS=""
+    f9x_flags_set=yes
+fi
+

Added: packages/hdf5/branches/upstream/current/fortran/config/pgi-fflags
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/pgi-fflags	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/pgi-fflags	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,105 @@
+#							-*- shell-script -*-
+#
+# 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 file should be sourced into configure if the compiler is the
+# PGI pgf90 compiler or a derivative.  It is careful not to do anything
+# if the compiler is not PGI; otherwise `f9x_flags_set' is set to `yes'
+#
+
+# Get the compiler version in a way that works for pgf90
+# pgf90 unless a compiler version is already known
+#
+#   f9x_vendor:    The compiler name: pgf90
+#   f9x_version:   Version number: 5.0-2, 5.2-2
+#
+if test X = "X$f9x_flags_set"; then
+    f9x_version="`$F9X $FFLAGS -V 2>&1 |grep '^pgf90 '`"
+    if test X != "X$f9x_version"; then
+        is_mpi="`$F9X $FFLAGS -help 2>&1 |grep 'link MPI'`"
+        f9x_vendor=`echo $f9x_version |sed 's/\([a-z0-9]*\).*/\1/'`
+        f9x_version=`echo $f9x_version |sed 's/pgf90 \([-a-z0-9\.\-]*\).*/\1/'`
+        echo "compiler '$F9X' is PGI $f9x_vendor-$f9x_version"
+
+        # Some version numbers
+        # PGI version numbers are of the form: "major.minor-patch"
+        f9x_vers_major=`echo $f9x_version | cut -f1 -d.`
+        f9x_vers_minor=`echo $f9x_version | cut -f2 -d. | cut -f1 -d-`
+        f9x_vers_patch=`echo $f9x_version | cut -f2 -d. | cut -f2 -d-`
+        test -n "$f9x_vers_major" || f9x_vers_major=0
+        test -n "$f9x_vers_minor" || f9x_vers_minor=0
+        test -n "$f9x_vers_patch" || f9x_vers_patch=0
+        f9x_vers_all=`expr $f9x_vers_major '*' 1000000 + $f9x_vers_minor '*' 1000 + $f9x_vers_patch`
+    fi
+fi
+
+# Common PGI flags for various situations
+if test "X-pgf90" = "X-$f9x_vendor"; then
+    # Insert section about version specific problems from gnu-flags here, if
+    # necessary.
+
+    arch=
+    # Architecture-specific flags
+    # Nothing currently. (Uncomment code below and modify to add any)
+    #case "$host_os-$host_cpu" in
+    #    *-i686)
+    #        arch="-march=i686"
+    #        ;;
+    #esac
+
+    # Host-specific flags
+    # Nothing currently. (Uncomment code below and modify to add any)
+    #case "`hostname`" in
+    #    sleipnir.ncsa.uiuc.edu)
+    #        arch="$arch -pipe"
+    #        ;;
+    #esac
+
+    # General
+    F9X_BASENAME=pgf90
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    # Uncomment the following to add something specific for FFLAGS.
+    #FFLAGS="$FFLAGS"
+
+    # Production
+    # Check for MPI wrapper being used and tweak down compiler options
+    # Comment out the Tweaking since it caused problems to mpich1.2.6.
+    # Need to investigate the reasons to tweak.
+    #if test "X-" == "X-$is_mpi"; then
+    #    PROD_FFLAGS="-fast -s -Mnoframe"
+    #else
+    #    PROD_FFLAGS="-O2 -s"
+    #fi
+    PROD_FFLAGS="-fast -s -Mnoframe"
+
+    # Debug
+    DEBUG_FFLAGS="-g -Mbounds -Mchkfpstk -Mchkptr -Mdclchk"
+
+    # Profile
+    PROFILE_FFLAGS="-g -Mprof=func,line"
+    # Use this for profiling with gprof
+    #PROFILE_FFLAGS="-g -pg"
+
+    # Flags are set
+    f9x_flags_set=yes
+fi
+
+# Clear f9x info if no flags set
+if test "X-$f9x_flags_set" = "X-"; then
+  f9x_vendor=
+  f9x_version=
+fi
+
+

Added: packages/hdf5/branches/upstream/current/fortran/config/pgi-flags
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/pgi-flags	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/pgi-flags	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,101 @@
+#							-*- shell-script -*-
+#
+# 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 file should be sourced into configure if the compiler is the
+# PGI pgcc compiler or a derivative.  It is careful not to do anything
+# if the compiler is not PGI; otherwise `cc_flags_set' is set to `yes'
+#
+
+# Get the compiler version in a way that works for pgcc
+# pgcc unless a compiler version is already known
+#
+#   cc_vendor:    The compiler name: pgcc
+#   cc_version:   Version number: 5.0-2, 5.2-2
+#
+if test X = "X$cc_flags_set"; then
+    cc_version="`$CC $CFLAGS -V 2>&1 |grep '^pgcc '`"
+    if test X != "X$cc_version"; then
+        is_mpi="`$CC $CFLAGS -help 2>&1 |grep 'MPI'`"
+        cc_vendor=`echo $cc_version |sed 's/\([a-z]*\).*/\1/'`
+        cc_version=`echo $cc_version |sed 's/pgcc \([-a-z0-9\.\-]*\).*/\1/'`
+        echo "compiler '$CC' is PGI $cc_vendor-$cc_version"
+
+        # Some version numbers
+        # PGI version numbers are of the form: "major.minor-patch"
+        cc_vers_major=`echo $cc_version | cut -f1 -d.`
+        cc_vers_minor=`echo $cc_version | cut -f2 -d. | cut -f1 -d-`
+        cc_vers_patch=`echo $cc_version | cut -f2 -d. | cut -f2 -d-`
+        test -n "$cc_vers_major" || cc_vers_major=0
+        test -n "$cc_vers_minor" || cc_vers_minor=0
+        test -n "$cc_vers_patch" || cc_vers_patch=0
+        cc_vers_all=`expr $cc_vers_major '*' 1000000 + $cc_vers_minor '*' 1000 + $cc_vers_patch`
+    fi
+fi
+
+# Common PGI flags for various situations
+if test "X-pgcc" = "X-$cc_vendor"; then
+    # Insert section about version specific problems from gnu-flags here, if
+    # necessary.
+
+    arch=
+    # Architecture-specific flags
+    # Nothing currently. (Uncomment code below and modify to add any)
+    #case "$host_os-$host_cpu" in
+    #    *-i686)
+    #        arch="-march=i686"
+    #        ;;
+    #esac
+
+    # Host-specific flags
+    # Nothing currently. (Uncomment code below and modify to add any)
+    #case "`hostname`" in
+    #    sleipnir.ncsa.uiuc.edu)
+    #        arch="$arch -pipe"
+    #        ;;
+    #esac
+
+    # General
+    CFLAGS="$CFLAGS $arch"
+
+    # Production
+    # Check for MPI wrapper being used and tweak down compiler options
+    if test "X-" == "X-$is_mpi"; then
+        PROD_CFLAGS="-fast -s -Mnoframe"
+    else
+        PROD_CFLAGS="-O2 -s"
+    fi
+    PROD_CPPFLAGS=
+
+    # Debug
+    DEBUG_CFLAGS="-g -Mbounds -Mchkfpstk"
+    DEBUG_CPPFLAGS=
+
+    # Profile
+    PROFILE_CFLAGS="-g -Mprof=func,line"
+    # Use this for profiling with gprof
+    #PROFILE_CFLAGS="-g -pg"
+    PROFILE_CPPFLAGS=
+
+    # Flags are set
+    cc_flags_set=yes
+
+fi
+
+# Clear cc info if no flags set
+if test "X-$cc_flags_set" = "X-"; then
+  cc_vendor=
+  cc_version=
+fi
+

Added: packages/hdf5/branches/upstream/current/fortran/config/powerpc-apple
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/powerpc-apple	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/powerpc-apple	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,95 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# The default compiler is `gcc'
+if test "X-" = "X-$CC"; then
+    CC=gcc
+    CC_BASENAME=gcc
+fi
+
+. $srcdir/config/gnu-flags
+
+
+# The default Fortran 90 compiler
+if test "X-" = "X-$F9X"; then
+    F9X=xlf
+    F9X_BASENAME=xlf
+  else
+    F9X_BASENAME=f95
+fi
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the AIX architechture)
+#
+R_LARGE=18
+R_INTEGER=9
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_INTEGER)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+case $F9X_BASENAME in
+    xlf) 
+        F9XSUFFIXFLAG="-qsuffix=f=f90 -qfree=f90"
+        FFLAGS="$FFLAGS -static -O ${F9XSUFFIXFLAG} -qmoddir=./ "
+        FSEARCH_DIRS="-I./ -I../src"
+        DEBUG_FFLAGS="-g"
+        PROD_FFLAGS="-O"
+        PROFILE_FFLAGS="-g -pg"
+        f9x_flags_set=yes
+        ;;
+
+    #
+    # Assume Absoft compiler
+    #
+    f95)
+        # Set required flag for compiling C stubs
+        CFLAGS="$CFLAGS -DH5_ABSOFT"
+
+        F9XSUFFIXFLAG=""
+#We enforce that external name will appear in upper case (this is a default for Absoft)
+        FFLAGS="$FFLAGS -YEXT_NAMES=UCS"
+        FSEARCH_DIRS=""
+        DEBUG_FFLAGS="-g"
+        PROD_FFLAGS="-O"
+        PROFILE_FFLAGS="-g"
+        f9x_flags_set=yes
+        ;;
+
+esac
+
+# ----------------------------------------------------------------------
+# Absoft compiler must be used with --disable-shared.
+# 
+if test "X$F9X_BASENAME" = "Xf95"; then
+  if test "X$enable_shared" != "Xno"; then
+    echo "error: --disable-shared must be used when building with Absoft Fortran compiler"
+    exit 1
+  fi
+fi
+    

Added: packages/hdf5/branches/upstream/current/fortran/config/powerpc-ibm-aix4.x
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/powerpc-ibm-aix4.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/powerpc-ibm-aix4.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,58 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Cross compiling defaults
+ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the AIX architechture)
+#
+R_LARGE=18
+R_INTEGER=9
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_INTEGER)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=xlf
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    F9XSUFFIXFLAG="-qsuffix=f=f90"
+    FFLAGS="$FFLAGS -static -O ${F9XSUFFIXFLAG} -qmoddir=./ -k"
+    FSEARCH_DIRS="-I./ -I../src"
+    DEBUG_FFLAGS="-O"
+    PROD_FFLAGS="-O"
+    PROFILE_FFLAGS="-O"
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/powerpc-ibm-aix5.x
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/powerpc-ibm-aix5.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/powerpc-ibm-aix5.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,110 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+# Use AIX supplied C compiler by default, xlc for serial, mpcc_r for parallel.
+# Use -D_LARGE_FILES by default to support large file size.
+if test "X-" =  "X-$CC"; then
+  if test "X-$enable_parallel" = "X-yes"; then
+    CC=mpcc_r
+    CC_BASENAME=mpcc_r
+  else
+    CC=xlc
+    CC_BASENAME=xlc
+  fi
+fi
+
+# Define RUNPARALLEL if parallel mode is enabled or a parallel compiler used.
+if test "X-$enable_parallel" = "X-yes" -o X-$CC_BASENAME = X-mpcc_r; then
+    RUNPARALLEL=${RUNPARALLEL="env MP_PROCS=\$\${NPROCS:=3} MP_TASKS_PER_NODE=\$\${NPROCS:=3} poe"}
+fi
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+
+case $CC_BASENAME in
+    xlc|mpcc_r)
+	# Turn off shared lib option.  It causes some test suite to fail.
+	enable_shared="${enable_shared:-no}"
+        # Use -D_LARGE_FILES by default to support large file size.
+        CFLAGS="-qlanglvl=ansi -D_LARGE_FILES $CFLAGS"
+	DEBUG_CFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	# -O causes test/dtypes to fail badly. Turn it off for now.
+	PROD_CFLAGS=""
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    gcc)
+	. $srcdir/config/gnu-flags
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -ansi"
+	DEBUG_CFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the AIX architechture)
+#
+R_LARGE=18
+R_INTEGER=9
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_INTEGER)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+  if test "X-$enable_parallel" = "X-yes"; then
+    F9X=mpxlf_r
+  else
+    F9X=xlf
+  fi
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    F9XSUFFIXFLAG="-qsuffix=f=f90"
+    FFLAGS="$FFLAGS -static -O ${F9XSUFFIXFLAG} -qmoddir=./ -k"
+    FSEARCH_DIRS="-I./ -I../src"
+    DEBUG_FFLAGS="-O"
+    PROD_FFLAGS="-O"
+    PROFILE_FFLAGS="-O"
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/rs6000-ibm-aix4.x
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/rs6000-ibm-aix4.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/rs6000-ibm-aix4.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,57 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details.
+
+# Cross compiling defaults
+ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the AIX architechture)
+#
+R_LARGE=18
+R_INTEGER=9
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_INTEGER)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=xlf
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    F9XSUFFIXFLAG="-qsuffix=f=f90"
+    FFLAGS="$FFLAGS -static -O ${F9XSUFFIXFLAG} -qmoddir=./ -k"
+    FSEARCH_DIRS="-I./ -I../src"
+    DEBUG_FFLAGS="-O"
+    PROD_FFLAGS="-O"
+    PROFILE_FFLAGS="-O"
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/solaris2.x
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/solaris2.x	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/solaris2.x	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,78 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+#
+# See BlankForm in this directory for details
+
+# The default compiler is `sunpro cc'
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+
+# Try gcc compiler flags
+. $srcdir/config/gnu-flags
+
+# Try solaris native compiler flags
+if test "X-" = "X-$cc_flags_set"; then
+    CFLAGS="-erroff=%none"
+    DEBUG_CFLAGS=-g
+    DEBUG_CPPFLAGS=
+    PROD_CFLAGS="-O -s"
+    PROD_CPPFLAGS=
+    PROFILE_CFLAGS=-xpg
+    PROFILE_CPPFLAGS=
+    cc_flags_set=yes
+    # Turn off optimization flag for SUNpro compiler versions 4.x which
+    # have an optimization bug.  Version 5.0 works.
+    ($CC -V 2>&1) | grep -s 'cc: .* C 4\.' >/dev/null 2>&1 \
+	&& PROD_CFLAGS="`echo $PROD_CFLAGS | sed -e 's/-O//'`"
+fi
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the Sparc Solaris architechture)
+#
+R_LARGE=18
+R_INTEGER=9
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_INTEGER)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=f90
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS"
+    DEBUG_FFLAGS=""
+    PROD_FFLAGS=""
+    PROFILE_FFLAGS=""
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/sv1-cray
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/sv1-cray	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/sv1-cray	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,184 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+    gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    cc)
+	CFLAGS="$CFLAGS"
+	DEBUG_CFLAGS="-g -h zero"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O2 -h scalar0"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -ansi"
+	DEBUG_CFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the UNICOS architechture)
+#
+R_LARGE=18
+R_INTEGER=18
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_LARGE)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=f90
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS -dp"
+    DEBUG_FFLAGS="-dp"
+    PROD_FFLAGS="-dp"
+    PROFILE_FFLAGS="-dp"
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/unicos
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/unicos	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/unicos	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,182 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+    gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
+	PROD_CFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    cc)
+	CFLAGS="$CFLAGS"
+	DEBUG_CFLAGS="-g -h zero -h scalar0"
+	DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
+	PROD_CFLAGS="-O2 -h scalar0"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -ansi"
+	DEBUG_CFLAGS="-g"
+	DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
+	PROD_CFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the UNICOS architechture)
+#
+R_LARGE=18
+R_INTEGER=18
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_LARGE)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=f90
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS -dp"
+    DEBUG_FFLAGS="-dp"
+    PROD_FFLAGS="-dp"
+    PROFILE_FFLAGS="-dp"
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/unicos10.0.X
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/unicos10.0.X	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/unicos10.0.X	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,182 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+    gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
+	PROD_CFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    cc)
+	CFLAGS="$CFLAGS"
+	DEBUG_CFLAGS="-g -h zero -h scalar0"
+	DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
+	PROD_CFLAGS="-O2 -h scalar0"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -ansi"
+	DEBUG_CFLAGS="-g"
+	DEBUG_CPPFLAGS="-DH5F_OPT_SEEK=0 -DH5F_LOW_DFLT=H5F_LOW_SEC2"
+	PROD_CFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the UNICOS architechture)
+#
+R_LARGE=18
+R_INTEGER=18
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_LARGE)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=f90
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS -dp"
+    DEBUG_FFLAGS="-dp"
+    PROD_FFLAGS="-dp"
+    PROFILE_FFLAGS="-dp"
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/unicosmk
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/unicosmk	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/unicosmk	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,184 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+    gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    cc)
+	CFLAGS="$CFLAGS"
+	DEBUG_CFLAGS="-g -h zero"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O2 -h scalar0"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -ansi"
+	DEBUG_CFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the UNICOS architechture)
+#
+R_LARGE=18
+R_INTEGER=18
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_LARGE)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=f90
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS -dp"
+    DEBUG_FFLAGS="-dp"
+    PROD_FFLAGS="-dp"
+    PROFILE_FFLAGS="-dp"
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/unicosmk2.0.5.X
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/unicosmk2.0.5.X	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/unicosmk2.0.5.X	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,186 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+    gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    cc)
+	CFLAGS="$CFLAGS"
+	DEBUG_CFLAGS="-g -h zero"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O2 -h scalar0"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -ansi"
+	DEBUG_CFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the UNICOS architechture)
+#
+R_LARGE=18
+R_INTEGER=18
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_LARGE)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=f90
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    # -Wl passes flags to the linker and -M# will ignore warnings with
+    # number #. Warning 405 was stopping the executable from being built.
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS -dp -Wl-M405"
+    DEBUG_FFLAGS=""
+    PROD_FFLAGS=""
+    PROFILE_FFLAGS=""
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/unicosmk2.0.6.X
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/unicosmk2.0.6.X	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/unicosmk2.0.6.X	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,186 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+    gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    cc)
+	CFLAGS="$CFLAGS"
+	DEBUG_CFLAGS="-g -h zero"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O2 -h scalar0"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -ansi"
+	DEBUG_CFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the UNICOS architechture)
+#
+R_LARGE=18
+R_INTEGER=18
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_LARGE)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=f90
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    # -Wl passes flags to the linker and -M# will ignore warnings with
+    # number #. Warning 405 and 412 were stopping the executable from being built.
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS -dp -Wl-M405,412"
+    DEBUG_FFLAGS=""
+    PROD_FFLAGS=""
+    PROFILE_FFLAGS=""
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/config/unicosmk2.0.X
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/config/unicosmk2.0.X	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/config/unicosmk2.0.X	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,186 @@
+#							-*- shell-script -*-
+#
+# 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 file is part of the HDF5 build script.  It is processed shortly
+# after configure starts and defines, among other things, flags for
+# the various compile modes.
+
+
+#----------------------------------------------------------------------------
+# Compiler flags. The CPPFLAGS values should not include package debug
+# flags like `-DH5G_DEBUG' since these are added with the
+# `--enable-debug' switch of configure.
+#----------------------------------------------------------------------------
+
+
+# Choosing a C Compiler
+# ---------------------
+#
+# The user should be able to specify the compiler by setting the CC
+# environment variable to the name of the compiler and any switches it 
+# requires for proper operation.  If CC is unset then this script may
+# set it.  If CC is unset by time this script completes then configure 
+# will try `gcc' and `cc' in that order (perhaps some others too).
+#
+# Note: Code later in this file may depend on the value of $CC_BASENAME
+#       in order to distinguish between different compilers when
+#       deciding which compiler command-line switches to use.  This
+#       variable is set based on the incoming value of $CC and is only
+#       used within this file.
+
+if test "X-" =  "X-$CC"; then
+    CC=cc
+    CC_BASENAME=cc
+fi
+# no need to use RANLIB
+RANLIB=:
+
+
+# C Compiler and Preprocessor Flags
+# ---------------------------------
+#
+# Flags that end with `_CFLAGS' are always passed to the compiler.
+# Flags that end with `_CPPFLAGS' are passed to the compiler when
+# compiling but not when linking.
+#
+# DEBUG_CFLAGS		Flags to pass to the compiler to create a
+# DEBUG_CPPFLAGS	library suitable for use with debugging
+#			tools. Usually this list will exclude
+#			optimization switches (like `-O') and include
+#			switches that turn on symbolic debugging
+#			support (like `-g').
+#
+# PROD_CFLAGS		Flags to pass to the compiler to create a
+# PROD_CPPFLAGS		production version of the library.  These
+#			usualy exclude symbolic debugging switches
+#			(like `-g') and include optimization switches
+#			(like `-O').
+#
+# PROFILE_CFLAGS	Flags to pass to the compiler to create a
+# PROFILE_CPPFLAGS	library suitable for performance testing (like 
+# 			`-pg').  This may or may not include debugging 
+# 			or production flags.
+#			
+# CFLAGS		Flags can be added to this variable which
+#			might already be partially initialized.  These 
+#			flags will always be passed to the compiler
+#			and should include switches to turn on full
+#			warnings.  HDF5 attempts to be ANSI and Posix
+#			compliant and employ good programming
+#			practices resulting in few if any
+#			warnings.
+#
+#			Warning flags do not have to be added to CFLAGS
+#			variable if the compiler is the GNU gcc
+#			compiler or a descendent of gcc such as EGCS or PGCC.
+#
+#			The CFLAGS should contains *something* or else 
+#			configure will probably add `-g'.  For most
+#			systems this isn't a problem but some systems
+#			will disable optimizations in favor of the
+#			`-g'.
+#			
+#
+# These flags should be set according to the compiler being used.
+# There are two ways to check the compiler.  You can try using `-v' or 
+# `--version' to see if the compiler will print a version string.  You 
+# can use the value of $CC_BASENAME which is the base name of the
+# first word in $CC (note that the value of CC may have changed
+# above).
+
+case $CC_BASENAME in
+    gcc)
+	CFLAGS="$CFLAGS -Wsign-compare" #Only works for some versions
+	DEBUG_CFLAGS="-g -fverbose-asm"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O3 -fomit-frame-pointer"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    cc)
+	CFLAGS="$CFLAGS"
+	DEBUG_CFLAGS="-g -h zero"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O2 -h scalar0"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+
+    *)
+	CFLAGS="$CFLAGS -ansi"
+	DEBUG_CFLAGS="-g"
+	DEBUG_CPPFLAGS=
+	PROD_CFLAGS="-O"
+	PROD_CPPFLAGS=
+	PROFILE_CFLAGS="-pg"
+	PROFILE_CPPFLAGS=
+	;;
+esac
+
+
+
+# Overriding Configure Tests
+# --------------------------
+#
+# Values for overriding configuration tests when cross compiling.
+# This includes compiling on some machines where the serial front end
+# compiles for a parallel back end.
+
+# Set this to `yes' or `no' depending on whether the target is big
+# endian or little endian.
+#ac_cv_c_bigendian=${ac_cv_c_bigendian='yes'}
+
+# Set this to the width required by printf() to print type `long
+# long'.  For instance, if the format would be `%lld' then set it to
+# `ll' or if the format would be `%qd' set it to `q'.
+#hdf5_cv_printf_ll=${hdf5_cv_printf_ll='ll'}
+
+# The default Fortran 90 compiler
+
+#
+# HDF5 integers
+#
+# 	R_LARGE is the number of digits for the bigest integer supported.
+#	R_INTEGER is the number of digits in INTEGER
+#
+# (for the UNICOS architechture)
+#
+R_LARGE=18
+R_INTEGER=18
+HADDR_T='SELECTED_INT_KIND(R_LARGE)'
+HSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HSSIZE_T='SELECTED_INT_KIND(R_LARGE)'
+HID_T='SELECTED_INT_KIND(R_INTEGER)'
+SIZE_T='SELECTED_INT_KIND(R_LARGE)'
+OBJECT_NAMELEN_DEFAULT_F=-1
+
+if test "X-" = "X-$F9X"; then
+    F9X=f90
+fi
+
+if test "X-" = "X-$f9x_flags_set"; then
+    # -Wl passes flags to the linker and -M# will ignore warnings with
+    # number #. Warning 405 was stopping the executable from being built.
+    F9XSUFFIXFLAG=""
+    FSEARCH_DIRS=""
+    FFLAGS="$FFLAGS -dp -Wl-M405"
+    DEBUG_FFLAGS=""
+    PROD_FFLAGS=""
+    PROFILE_FFLAGS=""
+    f9x_flags_set=yes
+fi

Added: packages/hdf5/branches/upstream/current/fortran/configure
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/configure	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/configure	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,13247 @@
+#! /bin/sh
+# From fortran/configure.in Id: configure.in.
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59 for HDF5 Fortran 1.6.5.
+#
+# Report bugs to <hdfhelp at ncsa.uiuc.edu>.
+#
+# Copyright (C) 2003 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# Find the correct PATH separator.  Usually this is `:', but
+# DJGPP uses `;' like DOS.
+if test "X${PATH_SEPARATOR+set}" != Xset; then
+  UNAME=${UNAME-`uname 2>/dev/null`}
+  case X$UNAME in
+    *-DOS) lt_cv_sys_path_separator=';' ;;
+    *)     lt_cv_sys_path_separator=':' ;;
+  esac
+  PATH_SEPARATOR=$lt_cv_sys_path_separator
+fi
+
+
+# Check that we are running under the correct shell.
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+case X$ECHO in
+X*--fallback-echo)
+  # Remove one level of quotation (which was required for Make).
+  ECHO=`echo "$ECHO" | sed 's,\\\\\$\\$0,'$0','`
+  ;;
+esac
+
+echo=${ECHO-echo}
+if test "X$1" = X--no-reexec; then
+  # Discard the --no-reexec flag, and continue.
+  shift
+elif test "X$1" = X--fallback-echo; then
+  # Avoid inline document here, it may be left over
+  :
+elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then
+  # Yippee, $echo works!
+  :
+else
+  # Restart under the correct shell.
+  exec $SHELL "$0" --no-reexec ${1+"$@"}
+fi
+
+if test "X$1" = X--fallback-echo; then
+  # used as fallback echo
+  shift
+  cat <<EOF
+
+EOF
+  exit 0
+fi
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+if test -z "$ECHO"; then
+if test "X${echo_test_string+set}" != Xset; then
+# find a string as large as possible, as long as the shell can cope with it
+  for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
+    # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
+    if (echo_test_string="`eval $cmd`") 2>/dev/null &&
+       echo_test_string="`eval $cmd`" &&
+       (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null
+    then
+      break
+    fi
+  done
+fi
+
+if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+   echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+   test "X$echo_testing_string" = "X$echo_test_string"; then
+  :
+else
+  # The Solaris, AIX, and Digital Unix default echo programs unquote
+  # backslashes.  This makes it impossible to quote backslashes using
+  #   echo "$something" | sed 's/\\/\\\\/g'
+  #
+  # So, first we look for a working echo in the user's PATH.
+
+  IFS="${IFS= 	}"; save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for dir in $PATH /usr/ucb; do
+    if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
+       test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      echo="$dir/echo"
+      break
+    fi
+  done
+  IFS="$save_ifs"
+
+  if test "X$echo" = Xecho; then
+    # We didn't find a better echo, so look for alternatives.
+    if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' &&
+       echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` &&
+       test "X$echo_testing_string" = "X$echo_test_string"; then
+      # This shell has a builtin print -r that does the trick.
+      echo='print -r'
+    elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) &&
+	 test "X$CONFIG_SHELL" != X/bin/ksh; then
+      # If we have ksh, try running configure again with it.
+      ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
+      export ORIGINAL_CONFIG_SHELL
+      CONFIG_SHELL=/bin/ksh
+      export CONFIG_SHELL
+      exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
+    else
+      # Try using printf.
+      echo='printf %s\n'
+      if test "X`($echo '\t') 2>/dev/null`" = 'X\t' &&
+	 echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` &&
+	 test "X$echo_testing_string" = "X$echo_test_string"; then
+	# Cool, printf works
+	:
+      elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
+	export CONFIG_SHELL
+	SHELL="$CONFIG_SHELL"
+	export SHELL
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
+	   test "X$echo_testing_string" = 'X\t' &&
+	   echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
+	   test "X$echo_testing_string" = "X$echo_test_string"; then
+	echo="$CONFIG_SHELL $0 --fallback-echo"
+      else
+	# maybe with a smaller string...
+	prev=:
+
+	for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
+	  if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null
+	  then
+	    break
+	  fi
+	  prev="$cmd"
+	done
+
+	if test "$prev" != 'sed 50q "$0"'; then
+	  echo_test_string=`eval $prev`
+	  export echo_test_string
+	  exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
+	else
+	  # Oops.  We lost completely, so just stick with echo.
+	  echo=echo
+	fi
+      fi
+    fi
+  fi
+fi
+fi
+
+# Copy echo and quote the copy suitably for passing to libtool from
+# the Makefile, instead of quoting the original, which is used later.
+ECHO=$echo
+if test "X$ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
+   ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
+fi
+
+
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='HDF5 Fortran'
+PACKAGE_TARNAME='hdf5-fortran'
+PACKAGE_VERSION='1.6.5'
+PACKAGE_STRING='HDF5 Fortran 1.6.5'
+PACKAGE_BUGREPORT='hdfhelp at ncsa.uiuc.edu'
+
+ac_unique_file="src/HDF5.f90"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+#if HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CPPFLAGS FFLAGS FSEARCH_DIRS H5_CPPFLAGS H5_FFLAGS H5_CFLAGS R_LARGE R_INTEGER HADDR_T HSIZE_T HSSIZE_T HID_T SIZE_T OBJECT_NAMELEN_DEFAULT_F ROOT F9XSUFFIXFLAG CC CFLAGS LDFLAGS ac_ct_CC EXEEXT OBJEXT CPP SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S ECHO RANLIB ac_ct_RANLIB STRIP ac_ct_STRIP EGREP LIBTOOL PERL AR LT_STATIC_EXEC F9X F9XMODFLAG F9XMODEXT PARALLEL RUNSERIAL RUNPARALLEL TESTPARALLEL FILTERS MPE ADD_PARALLEL_FILES H5_VERSION CONFIG_DATE CONFIG_USER CONFIG_MODE BYTESEX CC_VERSION FC_VERSION DYNAMIC_DIRS SEARCH SETX LIBOBJS LTLIBOBJS'
+ac_subst_files='DEPEND COMMENCE CONCLUDE'
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_option in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    eval "enable_$ac_feature=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_$ac_feature='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_$ac_package='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/-/_/g'`
+    eval "with_$ac_package=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    eval "$ac_envvar='$ac_optarg'"
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute paths.
+for ac_var in exec_prefix prefix
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+	      localstatedir libdir includedir oldincludedir infodir mandir
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_confdir=`(dirname "$0") 2>/dev/null ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
+  else
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+  fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+   { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+
+#
+# Report the --help message.
+#
+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 Fortran 1.6.5 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+_ACEOF
+
+  cat <<_ACEOF
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+			  [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+			  [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+_ACEOF
+
+  cat <<\_ACEOF
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of HDF5 Fortran 1.6.5:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-shared=PKGS  build shared libraries default=yes
+  --enable-static=PKGS  build static libraries default=yes
+  --enable-fast-install=PKGS  optimize for fast installation default=yes
+  --disable-libtool-lock  avoid locking (might break parallel builds)
+  --enable-production     Determines how to run the compiler.
+  --enable-static-exec    Build only statically linked executables
+                          [default=no]
+  --enable-linux-lfs      Enable support for large (64-bit) files on Linux.
+                          [default=check]
+  --enable-stream-vfd     Build the Stream Virtual File Driver [default=no]
+  --enable-filters=all    Turn on all internal I/O filters. One may also
+                          specify a comma-separated list of filters or the
+                          word no. The default is all internal I/O filters.
+  --enable-parallel       Search for MPI-IO and MPI support files
+  --enable-gpfs           Enable GPFS hints for the MPI/POSIX file driver.
+                          [default=no]
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-pic              try to use only PIC/non-PIC objects default=use both
+  --with-zlib=DIR         Use zlib library for external deflate I/O filter
+                          [default=yes]
+  --with-szlib=DIR        Use szlib library for external szlib I/O filter
+                          [default=yes]
+  --with-mpe=DIR          Use MPE instrumentation [default=no]
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <hdfhelp at ncsa.uiuc.edu>.
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d $ac_dir || continue
+    ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+    cd $ac_dir
+    # Check for guested configure; otherwise get Cygnus style configure.
+    if test -f $ac_srcdir/configure.gnu; then
+      echo
+      $SHELL $ac_srcdir/configure.gnu  --help=recursive
+    elif test -f $ac_srcdir/configure; then
+      echo
+      $SHELL $ac_srcdir/configure  --help=recursive
+    elif test -f $ac_srcdir/configure.ac ||
+	   test -f $ac_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi
+    cd $ac_popdir
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\_ACEOF
+HDF5 Fortran configure 1.6.5
+generated by GNU Autoconf 2.59
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit 0
+fi
+exec 5>config.log
+cat >&5 <<_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 Fortran $as_me 1.6.5, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+hostinfo               = `(hostinfo) 2>/dev/null               || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_sep=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'"
+      # Get rid of the leading space.
+      ac_sep=" "
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+}
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=$`echo $ac_var`
+      echo "$ac_var='"'"'$ac_val'"'"'"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=$`echo $ac_var`
+	echo "$ac_var='"'"'$ac_val'"'"'"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      sed "/^$/d" confdefs.h | sort
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core &&
+  rm -rf conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+     ' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . $cache_file;;
+      *)                      . ./$cache_file;;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val="\$ac_cv_env_${ac_var}_value"
+  eval ac_new_val="\$ac_env_${ac_var}_value"
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+	ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*)
+      ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+          ac_config_headers="$ac_config_headers src/H5config_fortran.h"
+
+
+ac_aux_dir=
+for ac_dir in ../bin $srcdir/../bin; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f $ac_dir/shtool; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in ../bin $srcdir/../bin" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in ../bin $srcdir/../bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+
+          ac_config_commands="$ac_config_commands default-1"
+
+
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_config_sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+  ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$ac_config_sub $ac_cv_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+  ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+echo "$as_me:$LINENO: checking shell variables initial values" >&5
+echo $ECHO_N "checking shell variables initial values... $ECHO_C" >&6
+set >&5
+echo "$as_me:$LINENO: result: done" >&5
+echo "${ECHO_T}done" >&6
+
+if test -x "/bin/pwd"; then
+   pwd=/bin/pwd
+else
+   pwd=pwd
+fi
+ ROOT=`$pwd`
+
+echo "$as_me:$LINENO: checking for cached host" >&5
+echo $ECHO_N "checking for cached host... $ECHO_C" >&6
+if test "${hdf5_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  hdf5_cv_host="none"
+fi
+echo "$as_me:$LINENO: result: $hdf5_cv_host" >&5
+echo "${ECHO_T}$hdf5_cv_host" >&6;
+if test "X$hdf5_cv_host" = "Xnone"; then
+   hdf5_cv_host=$host
+elif test "$hdf5_cv_host" != "$host"; then
+   echo "The config.cache file was generated on $hdf5_cv_host but"
+   echo "this is $host. Please remove that file and try again."
+   { { echo "$as_me:$LINENO: error: config.cache file is invalid" >&5
+echo "$as_me: error: config.cache file is invalid" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+case "$host_os" in
+   aix4.*)
+      host_os_novers=aix4.x
+      ;;
+   aix5.*)
+      host_os_novers=aix5.x
+      ;;
+   freebsd*)
+      host_os_novers=freebsd
+      ;;
+   irix5.*)
+      host_os_novers=irix5.x
+      ;;
+   irix6.*)
+      host_os_novers=irix6.x
+      ;;
+   osf4.*)
+      host_os_novers=osf4.x
+      ;;
+   osf5.*)
+      host_os_novers=osf5.x
+      ;;
+   solaris2.*)
+      host_os_novers=solaris2.x
+      ;;
+   *)
+      host_os_novers=$host_os
+      ;;
+esac
+
+host_config="none"
+for f in $host_cpu-$host_vendor-$host_os \
+   $host_cpu-$host_vendor-$host_os_novers \
+   $host_vendor-$host_os \
+   $host_vendor-$host_os_novers \
+   $host_cpu-$host_os \
+   $host_cpu-$host_os_novers \
+   $host_cpu-$host_vendor \
+   $host_os \
+   $host_os_novers \
+   $host_vendor \
+   $host_cpu ; do
+   echo "$as_me:$LINENO: checking for config $f" >&5
+echo $ECHO_N "checking for config $f... $ECHO_C" >&6
+   if test -f $srcdir/config/$f; then
+      host_config=$srcdir/config/$f
+      echo "$as_me:$LINENO: result: found" >&5
+echo "${ECHO_T}found" >&6
+      break
+   fi
+   echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+done
+if test "X$host_config" != "Xnone"; then
+   CC_BASENAME="`echo $CC |cut -f1 -d' ' |xargs basename 2>/dev/null`"
+   . $host_config
+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
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$ac_ct_CC" && break
+done
+
+  CC=$ac_ct_CC
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO:" \
+     "checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+	;;
+    conftest.$ac_ext )
+	# This is the source file.
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	# FIXME: I believe we export ac_cv_exeext for Libtool,
+	# but it would be cool to find out if it's true.  Does anybody
+	# maintain Libtool? --akim.
+	export ac_cv_exeext
+	break;;
+    * )
+	break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6
+
+echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  export ac_cv_exeext
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_compiler_gnu=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+CFLAGS="-g"
+echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std1 is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+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
+
+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
+echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether non-existent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+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
+	CC_BASENAME="`echo $CC |cut -f1 -d' ' |xargs basename 2>/dev/null`"
+echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6
+set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+all:
+	@echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+  SET_MAKE=
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL=$ac_install_sh
+  fi
+fi
+echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+# Check whether --enable-shared or --disable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval="$enable_shared"
+  p=${PACKAGE-default}
+case $enableval in
+yes) enable_shared=yes ;;
+no) enable_shared=no ;;
+*)
+  enable_shared=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_shared=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+else
+  enable_shared=yes
+fi;
+# Check whether --enable-static or --disable-static was given.
+if test "${enable_static+set}" = set; then
+  enableval="$enable_static"
+  p=${PACKAGE-default}
+case $enableval in
+yes) enable_static=yes ;;
+no) enable_static=no ;;
+*)
+  enable_static=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_static=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+else
+  enable_static=yes
+fi;
+# Check whether --enable-fast-install or --disable-fast-install was given.
+if test "${enable_fast_install+set}" = set; then
+  enableval="$enable_fast_install"
+  p=${PACKAGE-default}
+case $enableval in
+yes) enable_fast_install=yes ;;
+no) enable_fast_install=no ;;
+*)
+  enable_fast_install=no
+  # Look at the argument we got.  We use all the common list separators.
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:,"
+  for pkg in $enableval; do
+    if test "X$pkg" = "X$p"; then
+      enable_fast_install=yes
+    fi
+  done
+  IFS="$ac_save_ifs"
+  ;;
+esac
+else
+  enable_fast_install=yes
+fi;
+# Find the correct PATH separator.  Usually this is `:', but
+# DJGPP uses `;' like DOS.
+if test "X${PATH_SEPARATOR+set}" != Xset; then
+  UNAME=${UNAME-`uname 2>/dev/null`}
+  case X$UNAME in
+    *-DOS) lt_cv_sys_path_separator=';' ;;
+    *)     lt_cv_sys_path_separator=':' ;;
+  esac
+  PATH_SEPARATOR=$lt_cv_sys_path_separator
+fi
+
+
+# Check whether --with-gnu-ld or --without-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval="$with_gnu_ld"
+  test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi;
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6
+else
+  echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6
+fi
+if test "${lt_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      lt_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+	test "$with_gnu_ld" != no && break
+      else
+	test "$with_gnu_ld" != yes && break
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  lt_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$lt_cv_path_LD"
+if test -n "$LD"; then
+  echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6
+if test "${lt_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+  lt_cv_prog_gnu_ld=yes
+else
+  lt_cv_prog_gnu_ld=no
+fi
+fi
+echo "$as_me:$LINENO: result: $lt_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$lt_cv_prog_gnu_ld" >&6
+with_gnu_ld=$lt_cv_prog_gnu_ld
+
+
+echo "$as_me:$LINENO: checking for $LD option to reload object files" >&5
+echo $ECHO_N "checking for $LD option to reload object files... $ECHO_C" >&6
+if test "${lt_cv_ld_reload_flag+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_ld_reload_flag='-r'
+fi
+echo "$as_me:$LINENO: result: $lt_cv_ld_reload_flag" >&5
+echo "${ECHO_T}$lt_cv_ld_reload_flag" >&6
+reload_flag=$lt_cv_ld_reload_flag
+test -n "$reload_flag" && reload_flag=" $reload_flag"
+
+echo "$as_me:$LINENO: checking for BSD-compatible nm" >&5
+echo $ECHO_N "checking for BSD-compatible nm... $ECHO_C" >&6
+if test "${lt_cv_path_NM+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$NM"; then
+  # Let the user override the test.
+  lt_cv_path_NM="$NM"
+else
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
+  for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do
+    test -z "$ac_dir" && ac_dir=.
+    tmp_nm=$ac_dir/${ac_tool_prefix}nm
+    if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then
+      # Check to see if the nm accepts a BSD-compat flag.
+      # Adding the `sed 1q' prevents false positives on HP-UX, which says:
+      #   nm: unknown option "B" ignored
+      # Tru64's nm complains that /dev/null is an invalid object file
+      if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then
+	lt_cv_path_NM="$tmp_nm -B"
+	break
+      elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then
+	lt_cv_path_NM="$tmp_nm -p"
+	break
+      else
+	lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
+	continue # so that we can try to find one that supports BSD flags
+      fi
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm
+fi
+fi
+
+NM="$lt_cv_path_NM"
+echo "$as_me:$LINENO: result: $NM" >&5
+echo "${ECHO_T}$NM" >&6
+
+echo "$as_me:$LINENO: checking whether ln -s works" >&5
+echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:$LINENO: result: no, using $LN_S" >&5
+echo "${ECHO_T}no, using $LN_S" >&6
+fi
+
+echo "$as_me:$LINENO: checking how to recognise dependant libraries" >&5
+echo $ECHO_N "checking how to recognise dependant libraries... $ECHO_C" >&6
+if test "${lt_cv_deplibs_check_method+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  lt_cv_file_magic_cmd='$MAGIC_CMD'
+lt_cv_file_magic_test_file=
+lt_cv_deplibs_check_method='unknown'
+# Need to set the preceding variable on all platforms that support
+# interlibrary dependencies.
+# 'none' -- dependencies not supported.
+# `unknown' -- same as none, but documents that we really don't know.
+# 'pass_all' -- all dependencies passed with no checks.
+# 'test_compile' -- check by making test program.
+# 'file_magic [[regex]]' -- check by looking for files in library path
+# which responds to the $file_magic_cmd with a given egrep regex.
+# If you have `file' or equivalent on your system and you're not sure
+# whether `pass_all' will *always* work, you probably want this one.
+
+case $host_os in
+aix4* | aix5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+beos*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+bsdi4*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  ;;
+
+cygwin* | mingw* | pw32*)
+  lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
+  lt_cv_file_magic_cmd='$OBJDUMP -f'
+  ;;
+
+darwin* | rhapsody*)
+  lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library'
+  lt_cv_file_magic_cmd='/usr/bin/file -L'
+  case "$host_os" in
+  rhapsody* | darwin1.[012])
+    lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1`
+    ;;
+  *) # Darwin 1.3 on
+    lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib'
+    ;;
+  esac
+  ;;
+
+freebsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    case $host_cpu in
+    i*86 )
+      # Not sure whether the presence of OpenBSD here was a mistake.
+      # Let's accept both of them until this is cleared up.
+      lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library'
+      lt_cv_file_magic_cmd=/usr/bin/file
+      lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+      ;;
+    esac
+  else
+    lt_cv_deplibs_check_method=pass_all
+  fi
+  ;;
+
+gnu*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+hpux10.20*|hpux11*)
+  lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libc.sl
+  ;;
+
+irix5* | irix6*)
+  case $host_os in
+  irix5*)
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1"
+    ;;
+  *)
+    case $LD in
+    *-32|*"-32 ") libmagic=32-bit;;
+    *-n32|*"-n32 ") libmagic=N32;;
+    *-64|*"-64 ") libmagic=64-bit;;
+    *) libmagic=never-match;;
+    esac
+    # this will be overridden with pass_all, but let us keep it just in case
+    lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1"
+    ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*`
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+  case $host_cpu in
+  alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* | s390* )
+    lt_cv_deplibs_check_method=pass_all ;;
+  *)
+    # glibc up to 2.1.1 does not perform some relocations on ARM
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;;
+  esac
+  lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so`
+  ;;
+
+netbsd*)
+  if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then
+    lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$'
+  else
+    lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$'
+  fi
+  ;;
+
+newos6*)
+  lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=/usr/lib/libnls.so
+  ;;
+
+openbsd*)
+  lt_cv_file_magic_cmd=/usr/bin/file
+  lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB shared object'
+  else
+    lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library'
+  fi
+  ;;
+
+osf3* | osf4* | osf5*)
+  # this will be overridden with pass_all, but let us keep it just in case
+  lt_cv_deplibs_check_method='file_magic COFF format alpha shared library'
+  lt_cv_file_magic_test_file=/shlib/libc.so
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sco3.2v5*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+solaris*)
+  lt_cv_deplibs_check_method=pass_all
+  lt_cv_file_magic_test_file=/lib/libc.so
+  ;;
+
+sysv5uw[78]* | sysv4*uw2*)
+  lt_cv_deplibs_check_method=pass_all
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  case $host_vendor in
+  motorola)
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
+    lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
+    ;;
+  ncr)
+    lt_cv_deplibs_check_method=pass_all
+    ;;
+  sequent)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
+    ;;
+  sni)
+    lt_cv_file_magic_cmd='/bin/file'
+    lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
+    lt_cv_file_magic_test_file=/lib/libc.so
+    ;;
+  esac
+  ;;
+esac
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_deplibs_check_method" >&5
+echo "${ECHO_T}$lt_cv_deplibs_check_method" >&6
+file_magic_cmd=$lt_cv_file_magic_cmd
+deplibs_check_method=$lt_cv_deplibs_check_method
+
+
+
+
+
+
+
+
+# Check for command to grab the raw symbol name followed by C symbol from nm.
+echo "$as_me:$LINENO: checking command to parse $NM output" >&5
+echo $ECHO_N "checking command to parse $NM output... $ECHO_C" >&6
+if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+# These are sane defaults that work on at least a few old systems.
+# [They come from Ultrix.  What could be older than Ultrix?!! ;)]
+
+# Character class describing NM global symbol codes.
+symcode='[BCDEGRST]'
+
+# Regexp to match symbols that can be accessed directly from C.
+sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
+
+# Transform the above into a raw symbol and a C symbol.
+symxfrm='\1 \2\3 \3'
+
+# Transform an extracted symbol line into a proper C declaration
+lt_cv_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern char \1;/p'"
+
+# Transform an extracted symbol line into symbol name and symbol address
+lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+
+# Define system-specific variables.
+case $host_os in
+aix*)
+  symcode='[BCDT]'
+  ;;
+cygwin* | mingw* | pw32*)
+  symcode='[ABCDGISTW]'
+  ;;
+hpux*) # Its linker distinguishes data from code symbols
+  lt_cv_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern char \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
+  lt_cv_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/  {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/  {\"\2\", (lt_ptr) \&\2},/p'"
+  ;;
+irix*)
+  symcode='[BCDEGRST]'
+  ;;
+solaris* | sysv5*)
+  symcode='[BDT]'
+  ;;
+sysv4)
+  symcode='[DFNSTU]'
+  ;;
+esac
+
+# Handle CRLF in mingw tool chain
+opt_cr=
+case $host_os in
+mingw*)
+  opt_cr=`echo 'x\{0,1\}' | tr x '\015'` # option cr in regexp
+  ;;
+esac
+
+# If we're using GNU nm, then use its standard symbol codes.
+if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then
+  symcode='[ABCDGISTW]'
+fi
+
+# Try without a prefix undercore, then with it.
+for ac_symprfx in "" "_"; do
+
+  # Write the raw and C identifiers.
+lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ 	]\($symcode$symcode*\)[ 	][ 	]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'"
+
+  # Check to see that the pipe works correctly.
+  pipe_works=no
+  rm -f conftest*
+  cat > conftest.$ac_ext <<EOF
+#ifdef __cplusplus
+extern "C" {
+#endif
+char nm_test_var;
+void nm_test_func(){}
+#ifdef __cplusplus
+}
+#endif
+int main(){nm_test_var='a';nm_test_func();return(0);}
+EOF
+
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    # Now try to grab the symbols.
+    nlist=conftest.nm
+    if { (eval echo "$as_me:$LINENO: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\"") >&5
+  (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s "$nlist"; then
+      # Try sorting and uniquifying the output.
+      if sort "$nlist" | uniq > "$nlist"T; then
+	mv -f "$nlist"T "$nlist"
+      else
+	rm -f "$nlist"T
+      fi
+
+      # Make sure that we snagged all the symbols we need.
+      if egrep ' nm_test_var$' "$nlist" >/dev/null; then
+	if egrep ' nm_test_func$' "$nlist" >/dev/null; then
+	  cat <<EOF > conftest.$ac_ext
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+EOF
+	  # Now generate the symbol file.
+	  eval "$lt_cv_global_symbol_to_cdecl"' < "$nlist" >> conftest.$ac_ext'
+
+	  cat <<EOF >> conftest.$ac_ext
+#if defined (__STDC__) && __STDC__
+# define lt_ptr void *
+#else
+# define lt_ptr char *
+# define const
+#endif
+
+/* The mapping between symbol names and symbols. */
+const struct {
+  const char *name;
+  lt_ptr address;
+}
+lt_preloaded_symbols[] =
+{
+EOF
+	  sed "s/^$symcode$symcode* \(.*\) \(.*\)$/  {\"\2\", (lt_ptr) \&\2},/" < "$nlist" >> conftest.$ac_ext
+	  cat <<\EOF >> conftest.$ac_ext
+  {0, (lt_ptr) 0}
+};
+
+#ifdef __cplusplus
+}
+#endif
+EOF
+	  # Now try linking the two files.
+	  mv conftest.$ac_objext conftstm.$ac_objext
+	  save_LIBS="$LIBS"
+	  save_CFLAGS="$CFLAGS"
+	  LIBS="conftstm.$ac_objext"
+	  CFLAGS="$CFLAGS$no_builtin_flag"
+	  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest; then
+	    pipe_works=yes
+	  fi
+	  LIBS="$save_LIBS"
+	  CFLAGS="$save_CFLAGS"
+	else
+	  echo "cannot find nm_test_func in $nlist" >&5
+	fi
+      else
+	echo "cannot find nm_test_var in $nlist" >&5
+      fi
+    else
+      echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
+    fi
+  else
+    echo "$progname: failed program was:" >&5
+    cat conftest.$ac_ext >&5
+  fi
+  rm -f conftest* conftst*
+
+  # Do not use the global_symbol_pipe unless it works.
+  if test "$pipe_works" = yes; then
+    break
+  else
+    lt_cv_sys_global_symbol_pipe=
+  fi
+done
+
+fi
+
+global_symbol_pipe="$lt_cv_sys_global_symbol_pipe"
+if test -z "$lt_cv_sys_global_symbol_pipe"; then
+  global_symbol_to_cdecl=
+  global_symbol_to_c_name_address=
+else
+  global_symbol_to_cdecl="$lt_cv_global_symbol_to_cdecl"
+  global_symbol_to_c_name_address="$lt_cv_global_symbol_to_c_name_address"
+fi
+if test -z "$global_symbol_pipe$global_symbol_to_cdec$global_symbol_to_c_name_address";
+then
+  echo "$as_me:$LINENO: result: failed" >&5
+echo "${ECHO_T}failed" >&6
+else
+  echo "$as_me:$LINENO: result: ok" >&5
+echo "${ECHO_T}ok" >&6
+fi
+
+
+echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_egrep+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | (grep -E '(a|b)') >/dev/null 2>&1
+    then ac_cv_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_egrep
+
+
+echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_header_stdc=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+eval "$as_ac_Header=no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_header in dlfcn.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+# Only perform the check for file, if the check method requires it
+case $deplibs_check_method in
+file_magic*)
+  if test "$file_magic_cmd" = '$MAGIC_CMD'; then
+    echo "$as_me:$LINENO: checking for ${ac_tool_prefix}file" >&5
+echo $ECHO_N "checking for ${ac_tool_prefix}file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+  /*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+  ?:/*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+  ;;
+  *)
+  ac_save_MAGIC_CMD="$MAGIC_CMD"
+  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="/usr/bin:$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/${ac_tool_prefix}file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    egrep "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  MAGIC_CMD="$ac_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+if test -z "$lt_cv_path_MAGIC_CMD"; then
+  if test -n "$ac_tool_prefix"; then
+    echo "$as_me:$LINENO: checking for file" >&5
+echo $ECHO_N "checking for file... $ECHO_C" >&6
+if test "${lt_cv_path_MAGIC_CMD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $MAGIC_CMD in
+  /*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
+  ;;
+  ?:/*)
+  lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path.
+  ;;
+  *)
+  ac_save_MAGIC_CMD="$MAGIC_CMD"
+  IFS="${IFS=   }"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="/usr/bin:$PATH"
+  for ac_dir in $ac_dummy; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/file; then
+      lt_cv_path_MAGIC_CMD="$ac_dir/file"
+      if test -n "$file_magic_test_file"; then
+	case $deplibs_check_method in
+	"file_magic "*)
+	  file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`"
+	  MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+	  if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
+	    egrep "$file_magic_regex" > /dev/null; then
+	    :
+	  else
+	    cat <<EOF 1>&2
+
+*** Warning: the command libtool uses to detect shared libraries,
+*** $file_magic_cmd, produces output that libtool cannot recognize.
+*** The result is that libtool may fail to recognize shared libraries
+*** as such.  This will affect the creation of libtool libraries that
+*** depend on shared libraries, but programs linked with such libtool
+*** libraries will work regardless of this problem.  Nevertheless, you
+*** may want to report the problem to your system manager and/or to
+*** bug-libtool at gnu.org
+
+EOF
+	  fi ;;
+	esac
+      fi
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  MAGIC_CMD="$ac_save_MAGIC_CMD"
+  ;;
+esac
+fi
+
+MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
+if test -n "$MAGIC_CMD"; then
+  echo "$as_me:$LINENO: result: $MAGIC_CMD" >&5
+echo "${ECHO_T}$MAGIC_CMD" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  else
+    MAGIC_CMD=:
+  fi
+fi
+
+  fi
+  ;;
+esac
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  RANLIB=$ac_ct_RANLIB
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  STRIP=$ac_ct_STRIP
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+
+enable_dlopen=no
+enable_win32_dll=no
+
+# Check whether --enable-libtool-lock or --disable-libtool-lock was given.
+if test "${enable_libtool_lock+set}" = set; then
+  enableval="$enable_libtool_lock"
+
+fi;
+test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
+
+# Some flags need to be propagated to the compiler or linker for good
+# libtool support.
+case $host in
+*-*-irix6*)
+  # Find out which ABI we are using.
+  echo '#line 4312 "configure"' > conftest.$ac_ext
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    case `/usr/bin/file conftest.$ac_objext` in
+    *32-bit*)
+      LD="${LD-ld} -32"
+      ;;
+    *N32*)
+      LD="${LD-ld} -n32"
+      ;;
+    *64-bit*)
+      LD="${LD-ld} -64"
+      ;;
+    esac
+  fi
+  rm -rf conftest*
+  ;;
+
+*-*-sco3.2v5*)
+  # On SCO OpenServer 5, we need -belf to get full-featured binaries.
+  SAVE_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -belf"
+  echo "$as_me:$LINENO: checking whether the C compiler needs -belf" >&5
+echo $ECHO_N "checking whether the C compiler needs -belf... $ECHO_C" >&6
+if test "${lt_cv_cc_needs_belf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+
+     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
+
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  lt_cv_cc_needs_belf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+lt_cv_cc_needs_belf=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+     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
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_cc_needs_belf" >&5
+echo "${ECHO_T}$lt_cv_cc_needs_belf" >&6
+  if test x"$lt_cv_cc_needs_belf" != x"yes"; then
+    # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
+    CFLAGS="$SAVE_CFLAGS"
+  fi
+  ;;
+
+
+esac
+
+# Sed substitution that helps us do robust quoting.  It backslashifies
+# metacharacters that are still active within double-quoted strings.
+Xsed='sed -e s/^X//'
+sed_quote_subst='s/\([\\"\\`$\\\\]\)/\\\1/g'
+
+# Same as above, but do not quote variable references.
+double_quote_subst='s/\([\\"\\`\\\\]\)/\\\1/g'
+
+# Sed substitution to delay expansion of an escaped shell variable in a
+# double_quote_subst'ed string.
+delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
+
+# Constants:
+rm="rm -f"
+
+# Global variables:
+default_ofile=libtool
+can_build_shared=yes
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+ltmain="$ac_aux_dir/ltmain.sh"
+ofile="$default_ofile"
+with_gnu_ld="$lt_cv_prog_gnu_ld"
+need_locks="$enable_libtool_lock"
+
+old_CC="$CC"
+old_CFLAGS="$CFLAGS"
+
+# Set sane defaults for various variables
+test -z "$AR" && AR=ar
+test -z "$AR_FLAGS" && AR_FLAGS=cru
+test -z "$AS" && AS=as
+test -z "$CC" && CC=cc
+test -z "$DLLTOOL" && DLLTOOL=dlltool
+test -z "$LD" && LD=ld
+test -z "$LN_S" && LN_S="ln -s"
+test -z "$MAGIC_CMD" && MAGIC_CMD=file
+test -z "$NM" && NM=nm
+test -z "$OBJDUMP" && OBJDUMP=objdump
+test -z "$RANLIB" && RANLIB=:
+test -z "$STRIP" && STRIP=:
+test -z "$ac_objext" && ac_objext=o
+
+if test x"$host" != x"$build"; then
+  ac_tool_prefix=${host_alias}-
+else
+  ac_tool_prefix=
+fi
+
+# Transform linux* to *-*-linux-gnu*, to support old configure scripts.
+case $host_os in
+linux-gnu*) ;;
+linux*) host=`echo $host | sed 's/^\(.*-.*-linux\)\(.*\)$/\1-gnu\2/'`
+esac
+
+case $host_os in
+aix3*)
+  # AIX sometimes has problems with the GCC collect2 program.  For some
+  # reason, if we set the COLLECT_NAMES environment variable, the problems
+  # vanish in a puff of smoke.
+  if test "X${COLLECT_NAMES+set}" != Xset; then
+    COLLECT_NAMES=
+    export COLLECT_NAMES
+  fi
+  ;;
+esac
+
+# Determine commands to create old-style static archives.
+old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs'
+old_postinstall_cmds='chmod 644 $oldlib'
+old_postuninstall_cmds=
+
+if test -n "$RANLIB"; then
+  case $host_os in
+  openbsd*)
+    old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds"
+    ;;
+  *)
+    old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds"
+    ;;
+  esac
+  old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
+fi
+
+# Allow CC to be a program name with arguments.
+set dummy $CC
+compiler="$2"
+
+echo "$as_me:$LINENO: checking for objdir" >&5
+echo $ECHO_N "checking for objdir... $ECHO_C" >&6
+rm -f .libs 2>/dev/null
+mkdir .libs 2>/dev/null
+if test -d .libs; then
+  objdir=.libs
+else
+  # MS-DOS does not allow filenames that begin with a dot.
+  objdir=_libs
+fi
+rmdir .libs 2>/dev/null
+echo "$as_me:$LINENO: result: $objdir" >&5
+echo "${ECHO_T}$objdir" >&6
+
+
+
+# Check whether --with-pic or --without-pic was given.
+if test "${with_pic+set}" = set; then
+  withval="$with_pic"
+  pic_mode="$withval"
+else
+  pic_mode=default
+fi;
+test -z "$pic_mode" && pic_mode=default
+
+# We assume here that the value for lt_cv_prog_cc_pic will not be cached
+# in isolation, and that seeing it set (from the cache) indicates that
+# the associated values are set (in the cache) correctly too.
+echo "$as_me:$LINENO: checking for $compiler option to produce PIC" >&5
+echo $ECHO_N "checking for $compiler option to produce PIC... $ECHO_C" >&6
+if test "${lt_cv_prog_cc_pic+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+   lt_cv_prog_cc_pic=
+  lt_cv_prog_cc_shlib=
+  lt_cv_prog_cc_wl=
+  lt_cv_prog_cc_static=
+  lt_cv_prog_cc_no_builtin=
+  lt_cv_prog_cc_can_build_shared=$can_build_shared
+
+  if test "$GCC" = yes; then
+    lt_cv_prog_cc_wl='-Wl,'
+    lt_cv_prog_cc_static='-static'
+
+    case $host_os in
+    aix*)
+      # Below there is a dirty hack to force normal static linking with -ldl
+      # The problem is because libdl dynamically linked with both libc and
+      # libC (AIX C++ library), which obviously doesn't included in libraries
+      # list by gcc. This cause undefined symbols with -static flags.
+      # This hack allows C programs to be linked with "-static -ldl", but
+      # not sure about C++ programs.
+      lt_cv_prog_cc_static="$lt_cv_prog_cc_static ${lt_cv_prog_cc_wl}-lC"
+      ;;
+    amigaos*)
+      # FIXME: we need at least 68020 code to build shared libraries, but
+      # adding the `-m68020' flag to GCC prevents building anything better,
+      # like `-m68040'.
+      lt_cv_prog_cc_pic='-m68020 -resident32 -malways-restore-a4'
+      ;;
+    beos* | irix5* | irix6* | osf3* | osf4* | osf5*)
+      # PIC is the default for these OSes.
+      ;;
+    darwin* | rhapsody*)
+      # PIC is the default on this platform
+      # Common symbols not allowed in MH_DYLIB files
+      lt_cv_prog_cc_pic='-fno-common'
+      ;;
+    cygwin* | mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_cv_prog_cc_pic='-DDLL_EXPORT'
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+	 lt_cv_prog_cc_pic=-Kconform_pic
+      fi
+      ;;
+    *)
+      lt_cv_prog_cc_pic='-fPIC'
+      ;;
+    esac
+  else
+    # PORTME Check for PIC flags for the system compiler.
+    case $host_os in
+    aix3* | aix4* | aix5*)
+      lt_cv_prog_cc_wl='-Wl,'
+      # All AIX code is PIC.
+      if test "$host_cpu" = ia64; then
+	# AIX 5 now supports IA64 processor
+	lt_cv_prog_cc_static='-Bstatic'
+      else
+        ####################################################################
+        ## HACK Alert! This is causing problems with C++ on SP3...We'll just
+        ## remove this...THERE! All better now.
+        ####################################################################
+        ##lt_cv_prog_cc_static='-bnso -bI:/lib/syscalls.exp'
+		:
+      fi
+      ;;
+
+    hpux9* | hpux10* | hpux11*)
+      # Is there a better lt_cv_prog_cc_static that works with the bundled CC?
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static="${lt_cv_prog_cc_wl}-a ${lt_cv_prog_cc_wl}archive"
+      lt_cv_prog_cc_pic='+Z'
+      ;;
+
+    irix5* | irix6*)
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static='-non_shared'
+      # PIC (with -KPIC) is the default.
+      ;;
+
+    cygwin* | mingw* | pw32* | os2*)
+      # This hack is so that the source file can tell whether it is being
+      # built for inclusion in a dll (and should export symbols for example).
+      lt_cv_prog_cc_pic='-DDLL_EXPORT'
+      ;;
+
+    newsos6)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      ;;
+
+    osf3* | osf4* | osf5*)
+      # All OSF/1 code is PIC.
+      lt_cv_prog_cc_wl='-Wl,'
+      lt_cv_prog_cc_static='-non_shared'
+      ;;
+
+    sco3.2v5*)
+      lt_cv_prog_cc_pic='-Kpic'
+      lt_cv_prog_cc_static='-dn'
+      lt_cv_prog_cc_shlib='-belf'
+      ;;
+
+    solaris*)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      lt_cv_prog_cc_wl='-Wl,'
+      ;;
+
+    sunos4*)
+      lt_cv_prog_cc_pic='-PIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      lt_cv_prog_cc_wl='-Qoption ld '
+      ;;
+
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      lt_cv_prog_cc_pic='-KPIC'
+      lt_cv_prog_cc_static='-Bstatic'
+      if test "x$host_vendor" = xsni; then
+	lt_cv_prog_cc_wl='-LD'
+      else
+	lt_cv_prog_cc_wl='-Wl,'
+      fi
+      ;;
+
+    uts4*)
+      lt_cv_prog_cc_pic='-pic'
+      lt_cv_prog_cc_static='-Bstatic'
+      ;;
+
+    sysv4*MP*)
+      if test -d /usr/nec ;then
+	lt_cv_prog_cc_pic='-Kconform_pic'
+	lt_cv_prog_cc_static='-Bstatic'
+      fi
+      ;;
+
+    *)
+      lt_cv_prog_cc_can_build_shared=no
+      ;;
+    esac
+  fi
+
+fi
+
+if test -z "$lt_cv_prog_cc_pic"; then
+  echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+else
+  echo "$as_me:$LINENO: result: $lt_cv_prog_cc_pic" >&5
+echo "${ECHO_T}$lt_cv_prog_cc_pic" >&6
+
+  # Check to make sure the pic_flag actually works.
+  echo "$as_me:$LINENO: checking if $compiler PIC flag $lt_cv_prog_cc_pic works" >&5
+echo $ECHO_N "checking if $compiler PIC flag $lt_cv_prog_cc_pic works... $ECHO_C" >&6
+  if test "${lt_cv_prog_cc_pic_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      save_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS $lt_cv_prog_cc_pic -DPIC"
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+        case $host_os in
+      hpux9* | hpux10* | hpux11*)
+	# On HP-UX, both CC and GCC only warn that PIC is supported... then
+	# they create non-PIC objects.  So, if there were any warnings, we
+	# assume that PIC is not supported.
+	if test -s conftest.err; then
+	  lt_cv_prog_cc_pic_works=no
+	else
+	  lt_cv_prog_cc_pic_works=yes
+	fi
+	;;
+      *)
+	lt_cv_prog_cc_pic_works=yes
+	;;
+      esac
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+      lt_cv_prog_cc_pic_works=no
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+    CFLAGS="$save_CFLAGS"
+
+fi
+
+
+  if test "X$lt_cv_prog_cc_pic_works" = Xno; then
+    lt_cv_prog_cc_pic=
+    lt_cv_prog_cc_can_build_shared=no
+  else
+    lt_cv_prog_cc_pic=" $lt_cv_prog_cc_pic"
+  fi
+
+  echo "$as_me:$LINENO: result: $lt_cv_prog_cc_pic_works" >&5
+echo "${ECHO_T}$lt_cv_prog_cc_pic_works" >&6
+fi
+
+# Check for any special shared library compilation flags.
+if test -n "$lt_cv_prog_cc_shlib"; then
+  { echo "$as_me:$LINENO: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&5
+echo "$as_me: WARNING: \`$CC' requires \`$lt_cv_prog_cc_shlib' to build shared libraries" >&2;}
+  if echo "$old_CC $old_CFLAGS " | egrep -e "[ 	]$lt_cv_prog_cc_shlib[ 	]" >/dev/null; then :
+  else
+   { echo "$as_me:$LINENO: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&5
+echo "$as_me: WARNING: add \`$lt_cv_prog_cc_shlib' to the CC or CFLAGS env variable and reconfigure" >&2;}
+    lt_cv_prog_cc_can_build_shared=no
+  fi
+fi
+
+echo "$as_me:$LINENO: checking if $compiler static flag $lt_cv_prog_cc_static works" >&5
+echo $ECHO_N "checking if $compiler static flag $lt_cv_prog_cc_static works... $ECHO_C" >&6
+if test "${lt_cv_prog_cc_static_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+    lt_cv_prog_cc_static_works=no
+  save_LDFLAGS="$LDFLAGS"
+  LDFLAGS="$LDFLAGS $lt_cv_prog_cc_static"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  lt_cv_prog_cc_static_works=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+  LDFLAGS="$save_LDFLAGS"
+
+fi
+
+
+# Belt *and* braces to stop my trousers falling down:
+test "X$lt_cv_prog_cc_static_works" = Xno && lt_cv_prog_cc_static=
+echo "$as_me:$LINENO: result: $lt_cv_prog_cc_static_works" >&5
+echo "${ECHO_T}$lt_cv_prog_cc_static_works" >&6
+
+pic_flag="$lt_cv_prog_cc_pic"
+special_shlib_compile_flags="$lt_cv_prog_cc_shlib"
+wl="$lt_cv_prog_cc_wl"
+link_static_flag="$lt_cv_prog_cc_static"
+no_builtin_flag="$lt_cv_prog_cc_no_builtin"
+can_build_shared="$lt_cv_prog_cc_can_build_shared"
+
+
+# Check to see if options -o and -c are simultaneously supported by compiler
+echo "$as_me:$LINENO: checking if $compiler supports -c -o file.$ac_objext" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.$ac_objext... $ECHO_C" >&6
+if test "${lt_cv_compiler_c_o+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+$rm -r conftest 2>/dev/null
+mkdir conftest
+cd conftest
+echo "int some_variable = 0;" > conftest.$ac_ext
+mkdir out
+# According to Tom Tromey, Ian Lance Taylor reported there are C compilers
+# that will create temporary files in the current directory regardless of
+# the output directory.  Thus, making CWD read-only will cause this test
+# to fail, enabling locking or at least warning the user not to do parallel
+# builds.
+chmod -w .
+save_CFLAGS="$CFLAGS"
+CFLAGS="$CFLAGS -o out/conftest2.$ac_objext"
+compiler_c_o=no
+if { (eval echo configure:4879: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>out/conftest.err; } && test -s out/conftest2.$ac_objext; then
+  # The compiler can only warn and ignore the option if not recognized
+  # So say no if there are warnings
+  if test -s out/conftest.err; then
+    lt_cv_compiler_c_o=no
+  else
+    lt_cv_compiler_c_o=yes
+  fi
+else
+  # Append any errors to the config.log.
+  cat out/conftest.err 1>&5
+  lt_cv_compiler_c_o=no
+fi
+CFLAGS="$save_CFLAGS"
+chmod u+w .
+$rm conftest* out/*
+rmdir out
+cd ..
+rmdir conftest
+$rm -r conftest 2>/dev/null
+
+fi
+
+compiler_c_o=$lt_cv_compiler_c_o
+echo "$as_me:$LINENO: result: $compiler_c_o" >&5
+echo "${ECHO_T}$compiler_c_o" >&6
+
+if test x"$compiler_c_o" = x"yes"; then
+  # Check to see if we can write to a .lo
+  echo "$as_me:$LINENO: checking if $compiler supports -c -o file.lo" >&5
+echo $ECHO_N "checking if $compiler supports -c -o file.lo... $ECHO_C" >&6
+  if test "${lt_cv_compiler_o_lo+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+  lt_cv_compiler_o_lo=no
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -c -o conftest.lo"
+  save_objext="$ac_objext"
+  ac_objext=lo
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+int some_variable = 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+      # The compiler can only warn and ignore the option if not recognized
+    # So say no if there are warnings
+    if test -s conftest.err; then
+      lt_cv_compiler_o_lo=no
+    else
+      lt_cv_compiler_o_lo=yes
+    fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  ac_objext="$save_objext"
+  CFLAGS="$save_CFLAGS"
+
+fi
+
+  compiler_o_lo=$lt_cv_compiler_o_lo
+  echo "$as_me:$LINENO: result: $compiler_o_lo" >&5
+echo "${ECHO_T}$compiler_o_lo" >&6
+else
+  compiler_o_lo=no
+fi
+
+# Check to see if we can do hard links to lock some files if needed
+hard_links="nottested"
+if test "$compiler_c_o" = no && test "$need_locks" != no; then
+  # do not overwrite the value of need_locks provided by the user
+  echo "$as_me:$LINENO: checking if we can lock with hard links" >&5
+echo $ECHO_N "checking if we can lock with hard links... $ECHO_C" >&6
+  hard_links=yes
+  $rm conftest*
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  touch conftest.a
+  ln conftest.a conftest.b 2>&5 || hard_links=no
+  ln conftest.a conftest.b 2>/dev/null && hard_links=no
+  echo "$as_me:$LINENO: result: $hard_links" >&5
+echo "${ECHO_T}$hard_links" >&6
+  if test "$hard_links" = no; then
+    { echo "$as_me:$LINENO: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
+echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
+    need_locks=warn
+  fi
+else
+  need_locks=no
+fi
+
+if test "$GCC" = yes; then
+  # Check to see if options -fno-rtti -fno-exceptions are supported by compiler
+  echo "$as_me:$LINENO: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
+echo $ECHO_N "checking if $compiler supports -fno-rtti -fno-exceptions... $ECHO_C" >&6
+  echo "int some_variable = 0;" > conftest.$ac_ext
+  save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS -fno-rtti -fno-exceptions -c conftest.$ac_ext"
+  compiler_rtti_exceptions=no
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+int some_variable = 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+      # The compiler can only warn and ignore the option if not recognized
+    # So say no if there are warnings
+    if test -s conftest.err; then
+      compiler_rtti_exceptions=no
+    else
+      compiler_rtti_exceptions=yes
+    fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  CFLAGS="$save_CFLAGS"
+  echo "$as_me:$LINENO: result: $compiler_rtti_exceptions" >&5
+echo "${ECHO_T}$compiler_rtti_exceptions" >&6
+
+  if test "$compiler_rtti_exceptions" = "yes"; then
+    no_builtin_flag=' -fno-builtin -fno-rtti -fno-exceptions'
+  else
+    no_builtin_flag=' -fno-builtin'
+  fi
+fi
+
+# See if the linker supports building shared libraries.
+echo "$as_me:$LINENO: checking whether the linker ($LD) supports shared libraries" >&5
+echo $ECHO_N "checking whether the linker ($LD) supports shared libraries... $ECHO_C" >&6
+
+allow_undefined_flag=
+no_undefined_flag=
+need_lib_prefix=unknown
+need_version=unknown
+# when you set need_version to no, make sure it does not cause -set_version
+# flags to be left without arguments
+archive_cmds=
+archive_expsym_cmds=
+old_archive_from_new_cmds=
+old_archive_from_expsyms_cmds=
+export_dynamic_flag_spec=
+whole_archive_flag_spec=
+thread_safe_flag_spec=
+hardcode_into_libs=no
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+hardcode_shlibpath_var=unsupported
+runpath_var=
+link_all_deplibs=unknown
+always_export_symbols=no
+export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | sed '\''s/.* //'\'' | sort | uniq > $export_symbols'
+# include_expsyms should be a list of space-separated symbols to be *always*
+# included in the symbol list
+include_expsyms=
+# exclude_expsyms can be an egrep regular expression of symbols to exclude
+# it will be wrapped by ` (' and `)$', so one must not match beginning or
+# end of line.  Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
+# as well as any symbol that contains `d'.
+exclude_expsyms="_GLOBAL_OFFSET_TABLE_"
+# Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
+# platforms (ab)use it in PIC code, but their linkers get confused if
+# the symbol is explicitly referenced.  Since portable code cannot
+# rely on this symbol name, it's probably fine to never include it in
+# preloaded symbol tables.
+extract_expsyms_cmds=
+
+case $host_os in
+cygwin* | mingw* | pw32*)
+  # FIXME: the MSVC++ port hasn't been tested in a loooong time
+  # When not using gcc, we currently assume that we are using
+  # Microsoft Visual C++.
+  if test "$GCC" != yes; then
+    with_gnu_ld=no
+  fi
+  ;;
+openbsd*)
+  with_gnu_ld=no
+  ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # If archive_cmds runs LD, not CC, wlarc should be empty
+  wlarc='${wl}'
+
+  # See if GNU ld supports shared libraries.
+  case $host_os in
+  aix3* | aix4* | aix5*)
+    # On AIX, the GNU linker is very broken
+    # Note:Check GNU linker on AIX 5-IA64 when/if it becomes available.
+    ld_shlibs=no
+    cat <<EOF 1>&2
+
+*** Warning: the GNU linker, at least up to release 2.9.1, is reported
+*** to be unable to reliably create shared libraries on AIX.
+*** Therefore, libtool is disabling shared libraries support.  If you
+*** really care for shared libraries, you may want to modify your PATH
+*** so that a non-GNU linker is found, and then restart.
+
+EOF
+    ;;
+
+  amigaos*)
+    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+
+    # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+    # that the semantics of dynamic libraries on AmigaOS, at least up
+    # to version 4, is to share data among multiple programs linked
+    # with the same dynamic library.  Since this doesn't match the
+    # behavior of shared libraries on other platforms, we can use
+    # them.
+    ld_shlibs=no
+    ;;
+
+  beos*)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      allow_undefined_flag=unsupported
+      # Joseph Beckenbach <jrb3 at best.com> says some releases of gcc
+      # support --undefined.  This deserves some investigation.  FIXME
+      archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # hardcode_libdir_flag_spec is actually meaningless, as there is
+    # no search path for DLLs.
+    hardcode_libdir_flag_spec='-L$libdir'
+    allow_undefined_flag=unsupported
+    always_export_symbols=yes
+
+    extract_expsyms_cmds='test -f $output_objdir/impgen.c || \
+      sed -e "/^# \/\* impgen\.c starts here \*\//,/^# \/\* impgen.c ends here \*\// { s/^# //;s/^# *$//; p; }" -e d < $''0 > $output_objdir/impgen.c~
+      test -f $output_objdir/impgen.exe || (cd $output_objdir && \
+      if test "x$HOST_CC" != "x" ; then $HOST_CC -o impgen impgen.c ; \
+      else $CC -o impgen impgen.c ; fi)~
+      $output_objdir/impgen $dir/$soroot > $output_objdir/$soname-def'
+
+    old_archive_from_expsyms_cmds='$DLLTOOL --as=$AS --dllname $soname --def $output_objdir/$soname-def --output-lib $output_objdir/$newlib'
+
+    # cygwin and mingw dlls have different entry points and sets of symbols
+    # to exclude.
+    # FIXME: what about values for MSVC?
+    dll_entry=__cygwin_dll_entry at 12
+    dll_exclude_symbols=DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12~
+    case $host_os in
+    mingw*)
+      # mingw values
+      dll_entry=_DllMainCRTStartup at 12
+      dll_exclude_symbols=DllMain at 12,DllMainCRTStartup at 12,DllEntryPoint at 12~
+      ;;
+    esac
+
+    # mingw and cygwin differ, and it's simplest to just exclude the union
+    # of the two symbol sets.
+    dll_exclude_symbols=DllMain at 12,_cygwin_dll_entry at 12,_cygwin_noncygwin_dll_entry at 12,DllMainCRTStartup at 12,DllEntryPoint at 12
+
+    # recent cygwin and mingw systems supply a stub DllMain which the user
+    # can override, but on older systems we have to supply one (in ltdll.c)
+    if test "x$lt_cv_need_dllmain" = "xyes"; then
+      ltdll_obj='$output_objdir/$soname-ltdll.'"$ac_objext "
+      ltdll_cmds='test -f $output_objdir/$soname-ltdll.c || sed -e "/^# \/\* ltdll\.c starts here \*\//,/^# \/\* ltdll.c ends here \*\// { s/^# //; p; }" -e d < $''0 > $output_objdir/$soname-ltdll.c~
+	test -f $output_objdir/$soname-ltdll.$ac_objext || (cd $output_objdir && $CC -c $soname-ltdll.c)~'
+    else
+      ltdll_obj=
+      ltdll_cmds=
+    fi
+
+    # Extract the symbol export list from an `--export-all' def file,
+    # then regenerate the def file from the symbol export list, so that
+    # the compiled dll only exports the symbol export list.
+    # Be careful not to strip the DATA tag left be newer dlltools.
+    export_symbols_cmds="$ltdll_cmds"'
+      $DLLTOOL --export-all --exclude-symbols '$dll_exclude_symbols' --output-def $output_objdir/$soname-def '$ltdll_obj'$libobjs $convenience~
+      sed -e "1,/EXPORTS/d" -e "s/ @ [0-9]*//" -e "s/ *;.*$//" < $output_objdir/$soname-def > $export_symbols'
+
+    # If the export-symbols file already is a .def file (1st line
+    # is EXPORTS), use it as is.
+    # If DATA tags from a recent dlltool are present, honour them!
+    archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then
+	cp $export_symbols $output_objdir/$soname-def;
+      else
+	echo EXPORTS > $output_objdir/$soname-def;
+	_lt_hint=1;
+	cat $export_symbols | while read symbol; do
+	 set dummy \$symbol;
+	 case \$# in
+	   2) echo "   \$2 @ \$_lt_hint ; " >> $output_objdir/$soname-def;;
+	   *) echo "     \$2 @ \$_lt_hint \$3 ; " >> $output_objdir/$soname-def;;
+	 esac;
+	 _lt_hint=`expr 1 + \$_lt_hint`;
+	done;
+      fi~
+      '"$ltdll_cmds"'
+      $CC -Wl,--base-file,$output_objdir/$soname-base '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp~
+      $CC -Wl,--base-file,$output_objdir/$soname-base $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags~
+      $DLLTOOL --as=$AS --dllname $soname --exclude-symbols '$dll_exclude_symbols' --def $output_objdir/$soname-def --base-file $output_objdir/$soname-base --output-exp $output_objdir/$soname-exp --output-lib $output_objdir/$libname.dll.a~
+      $CC $output_objdir/$soname-exp '$lt_cv_cc_dll_switch' -Wl,-e,'$dll_entry' -o $output_objdir/$soname '$ltdll_obj'$libobjs $deplibs $compiler_flags'
+    ;;
+
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
+      wlarc=
+    else
+      archive_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared -nodefaultlibs $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    fi
+    ;;
+
+  solaris* | sysv5*)
+    if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+      ld_shlibs=no
+      cat <<EOF 1>&2
+
+*** Warning: The releases 2.8.* of the GNU linker cannot reliably
+*** create shared libraries on Solaris systems.  Therefore, libtool
+*** is disabling shared libraries support.  We urge you to upgrade GNU
+*** binutils to release 2.9.1 or newer.  Another option is to modify
+*** your PATH or compiler configuration so that the native linker is
+*** used, and then restart.
+
+EOF
+    elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+
+  sunos4*)
+    archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+    wlarc=
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  *)
+    if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
+      archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
+    else
+      ld_shlibs=no
+    fi
+    ;;
+  esac
+
+  if test "$ld_shlibs" = yes; then
+    runpath_var=LD_RUN_PATH
+    hardcode_libdir_flag_spec='${wl}--rpath ${wl}$libdir'
+    export_dynamic_flag_spec='${wl}--export-dynamic'
+    case $host_os in
+    cygwin* | mingw* | pw32*)
+      # dlltool doesn't understand --whole-archive et. al.
+      whole_archive_flag_spec=
+      ;;
+    *)
+      # ancient GNU ld didn't support --whole-archive et. al.
+      if $LD --help 2>&1 | egrep 'no-whole-archive' > /dev/null; then
+	whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
+      else
+	whole_archive_flag_spec=
+      fi
+      ;;
+    esac
+  fi
+else
+  # PORTME fill in a description of your system's linker (not GNU ld)
+  case $host_os in
+  aix3*)
+    allow_undefined_flag=unsupported
+    always_export_symbols=yes
+    archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
+    # Note: this linker hardcodes the directories in LIBPATH if there
+    # are no directories specified by -L.
+    hardcode_minus_L=yes
+    if test "$GCC" = yes && test -z "$link_static_flag"; then
+      # Neither direct hardcoding nor static linking is supported with a
+      # broken collect2.
+      hardcode_direct=unsupported
+    fi
+    ;;
+
+  aix4* | aix5*)
+    if test "$host_cpu" = ia64; then
+      # On IA64, the linker does run time linking by default, so we don't
+      # have to do anything special.
+      aix_use_runtimelinking=no
+      exp_sym_flag='-Bexport'
+      no_entry_flag=""
+    else
+      aix_use_runtimelinking=no
+
+      # Test if we are trying to use run time linking or normal
+      # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+      # need to do runtime linking.
+      case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+	for ld_flag in $LDFLAGS; do
+	  if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+	    aix_use_runtimelinking=yes
+	    break
+	  fi
+	done
+      esac
+
+      exp_sym_flag='-bexport'
+      no_entry_flag='-bnoentry'
+    fi
+
+    # When large executables or shared objects are built, AIX ld can
+    # have problems creating the table of contents.  If linking a library
+    # or program results in "error TOC overflow" add -mminimal-toc to
+    # CXXFLAGS/CFLAGS for g++/gcc.  In the cases where that is not
+    # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
+
+    hardcode_direct=yes
+    archive_cmds=''
+    hardcode_libdir_separator=':'
+    if test "$GCC" = yes; then
+      case $host_os in aix4.[012]|aix4.[012].*)
+	collect2name=`${CC} -print-prog-name=collect2`
+	if test -f "$collect2name" && \
+	  strings "$collect2name" | grep resolve_lib_name >/dev/null
+	then
+	  # We have reworked collect2
+	  hardcode_direct=yes
+	else
+	  # We have old collect2
+	  hardcode_direct=unsupported
+	  # It fails to find uninstalled libraries when the uninstalled
+	  # path is not listed in the libpath.  Setting hardcode_minus_L
+	  # to unsupported forces relinking
+	  hardcode_minus_L=yes
+	  hardcode_libdir_flag_spec='-L$libdir'
+	  hardcode_libdir_separator=
+	fi
+      esac
+
+      shared_flag='-shared'
+    else
+      # not using gcc
+      if test "$host_cpu" = ia64; then
+	shared_flag='${wl}-G'
+      else
+	if test "$aix_use_runtimelinking" = yes; then
+	  shared_flag='${wl}-G'
+	else
+	  shared_flag='${wl}-bM:SRE'
+	fi
+      fi
+    fi
+
+    # It seems that -bexpall can do strange things, so it is better to
+    # generate a list of symbols to export.
+    always_export_symbols=yes
+    if test "$aix_use_runtimelinking" = yes; then
+      # Warning - without using the other runtime loading flags (-brtl),
+      # -berok will link without error, but may produce a broken library.
+      allow_undefined_flag='-berok'
+      hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
+      archive_expsym_cmds="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag"
+    else
+      if test "$host_cpu" = ia64; then
+	hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+	allow_undefined_flag="-z nodefs"
+	archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname ${wl}-h$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"
+      else
+        #######################################################################
+        # This is a MAJOR HACK(tm) to get HDF5 to compile on AIX systems.
+        # The ``-b nolibpath -b ...'' flags were messing with the mpicc
+        # compiler's already defined library paths and it wasn't able to find
+        # the libraries it needed to run....DOH!
+        # Apply the fix unless HDF5_AIX_LIBTOOL_NOPATCH is defined.
+        if test "$HDF5_AIX_LIBTOOL_NOPATCH" = ""; then
+            hardcode_libdir_flag_spec=' '
+        else
+            hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
+        fi
+        #
+        # End MAJOR HACK
+        #
+        #######################################################################
+	# Warning - without using the other run time loading flags,
+	# -berok will link without error, but may produce a broken library.
+	allow_undefined_flag='${wl}-berok'
+	# This is a bit strange, but is similar to how AIX traditionally builds
+	# it's shared libraries.
+	archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols"' ~$AR -crlo $objdir/$libname$release.a $objdir/$soname'
+      fi
+    fi
+    ;;
+
+  amigaos*)
+    archive_cmds='$rm $output_objdir/a2ixlibrary.data~$echo "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$echo "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$echo "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$echo "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+    # see comment about different semantics on the GNU ld section
+    ld_shlibs=no
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    # hardcode_libdir_flag_spec is actually meaningless, as there is
+    # no search path for DLLs.
+    hardcode_libdir_flag_spec=' '
+    allow_undefined_flag=unsupported
+    # Tell ltmain to make .lib files, not .a files.
+    libext=lib
+    # FIXME: Setting linknames here is a bad hack.
+    archive_cmds='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | sed -e '\''s/ -lc$//'\''` -link -dll~linknames='
+    # The linker will automatically build a .lib file if we build a DLL.
+    old_archive_from_new_cmds='true'
+    # FIXME: Should let the user specify the lib program.
+    old_archive_cmds='lib /OUT:$oldlib$oldobjs$old_deplibs'
+    fix_srcfile_path='`cygpath -w "$srcfile"`'
+    ;;
+
+  darwin* | rhapsody*)
+    case "$host_os" in
+    rhapsody* | darwin1.[012])
+      allow_undefined_flag='-undefined suppress'
+      ;;
+    *) # Darwin 1.3 on
+      allow_undefined_flag='-flat_namespace -undefined suppress'
+      ;;
+    esac
+    # FIXME: Relying on posixy $() will cause problems for
+    #        cross-compilation, but unfortunately the echo tests do not
+    #        yet detect zsh echo's removal of \ escapes.
+    archive_cmds='$nonopt $(test "x$module" = xyes && echo -bundle || echo -dynamiclib) $allow_undefined_flag -o $lib $libobjs $deplibs$linker_flags -install_name $rpath/$soname $verstring'
+    # We need to add '_' to the symbols in $export_symbols first
+    #archive_expsym_cmds="$archive_cmds"' && strip -s $export_symbols'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    whole_archive_flag_spec='-all_load $convenience'
+    ;;
+
+  freebsd1*)
+    ld_shlibs=no
+    ;;
+
+  # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
+  # support.  Future versions do this automatically, but an explicit c++rt0.o
+  # does not break anything, and helps significantly (at the cost of a little
+  # extra space).
+  freebsd2.2*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  # Unfortunately, older versions of FreeBSD 2 do not have this feature.
+  freebsd2*)
+    archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_minus_L=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
+  freebsd*)
+    archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  hpux9* | hpux10* | hpux11*)
+    case $host_os in
+    hpux9*) archive_cmds='$rm $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' ;;
+    *) archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' ;;
+    esac
+    hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+    hardcode_libdir_separator=:
+    hardcode_direct=yes
+    hardcode_minus_L=yes # Not in the search PATH, but as the default
+			 # location of the library.
+    export_dynamic_flag_spec='${wl}-E'
+    ;;
+
+  irix5* | irix6*)
+    if test "$GCC" = yes; then
+      archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+    else
+      archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    link_all_deplibs=yes
+    ;;
+
+  netbsd*)
+    if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+      archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'  # a.out
+    else
+      archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags'      # ELF
+    fi
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  newsos6)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    hardcode_shlibpath_var=no
+    ;;
+
+  openbsd*)
+    hardcode_direct=yes
+    hardcode_shlibpath_var=no
+    if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+      archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      export_dynamic_flag_spec='${wl}-E'
+    else
+      case "$host_os" in
+      openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+	archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
+	hardcode_libdir_flag_spec='-R$libdir'
+        ;;
+      *)
+        archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $linker_flags'
+        hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+        ;;
+      esac
+    fi
+    ;;
+
+  os2*)
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_minus_L=yes
+    allow_undefined_flag=unsupported
+    archive_cmds='$echo "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$echo "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$echo DATA >> $output_objdir/$libname.def~$echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~$echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
+    old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
+    ;;
+
+  osf3*)
+    if test "$GCC" = yes; then
+      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+    else
+      allow_undefined_flag=' -expect_unresolved \*'
+      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+    fi
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    hardcode_libdir_separator=:
+    ;;
+
+  osf4* | osf5*)	# as osf3* with the addition of -msym flag
+    if test "$GCC" = yes; then
+      allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
+      archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+    else
+      allow_undefined_flag=' -expect_unresolved \*'
+      archive_cmds='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib'
+      archive_expsym_cmds='for i in `cat $export_symbols`; do printf "-exported_symbol " >> $lib.exp; echo "\$i" >> $lib.exp; done; echo "-hidden">> $lib.exp~
+      $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp'
+
+      #Both c and cxx compiler support -rpath directly
+      hardcode_libdir_flag_spec='-rpath $libdir'
+    fi
+    hardcode_libdir_separator=:
+    ;;
+
+  sco3.2v5*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_shlibpath_var=no
+    runpath_var=LD_RUN_PATH
+    hardcode_runpath_var=yes
+    export_dynamic_flag_spec='${wl}-Bexport'
+    ;;
+
+  solaris*)
+    # gcc --version < 3.0 without binutils cannot create self contained
+    # shared libraries reliably, requiring libgcc.a to resolve some of
+    # the object symbols generated in some cases.  Libraries that use
+    # assert need libgcc.a to resolve __eprintf, for example.  Linking
+    # a copy of libgcc.a into every shared library to guarantee resolving
+    # such symbols causes other problems:  According to Tim Van Holder
+    # <tim.van.holder at pandora.be>, C++ libraries end up with a separate
+    # (to the application) exception stack for one thing.
+    no_undefined_flag=' -z defs'
+    if test "$GCC" = yes; then
+      case `$CC --version 2>/dev/null` in
+      [12].*)
+	cat <<EOF 1>&2
+
+*** Warning: Releases of GCC earlier than version 3.0 cannot reliably
+*** create self contained shared libraries on Solaris systems, without
+*** introducing a dependency on libgcc.a.  Therefore, libtool is disabling
+*** -no-undefined support, which will at least allow you to build shared
+*** libraries.  However, you may find that when you link such libraries
+*** into an application without using GCC, you have to manually add
+*** \`gcc --print-libgcc-file-name\` to the link command.  We urge you to
+*** upgrade to a newer version of GCC.  Another option is to rebuild your
+*** current GCC to use the GNU linker from GNU binutils 2.9.1 or newer.
+
+EOF
+        no_undefined_flag=
+	;;
+      esac
+    fi
+    # $CC -shared without GNU ld will not create a library from C++
+    # object files and a static libstdc++, better avoid it by now
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+    hardcode_libdir_flag_spec='-R$libdir'
+    hardcode_shlibpath_var=no
+    case $host_os in
+    solaris2.[0-5] | solaris2.[0-5].*) ;;
+    *) # Supported since Solaris 2.6 (maybe 2.5.1?)
+      whole_archive_flag_spec='-z allextract$convenience -z defaultextract' ;;
+    esac
+    link_all_deplibs=yes
+    ;;
+
+  sunos4*)
+    if test "x$host_vendor" = xsequent; then
+      # Use $CC to link under sequent, because it throws in some extra .o
+      # files that make .init and .fini sections work.
+      archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
+    else
+      archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
+    fi
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_direct=yes
+    hardcode_minus_L=yes
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4)
+    if test "x$host_vendor" = xsno; then
+      archive_cmds='$LD -G -Bsymbolic -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=yes # is this really true???
+    else
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+    fi
+    runpath_var='LD_RUN_PATH'
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4.3*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_shlibpath_var=no
+    export_dynamic_flag_spec='-Bexport'
+    ;;
+
+  sysv5*)
+    no_undefined_flag=' -z text'
+    # $CC -shared without GNU ld will not create a library from C++
+    # object files and a static libstdc++, better avoid it by now
+    archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    archive_expsym_cmds='$echo "{ global:" > $lib.exp~cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~
+		$LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$rm $lib.exp'
+    hardcode_libdir_flag_spec=
+    hardcode_shlibpath_var=no
+    runpath_var='LD_RUN_PATH'
+    ;;
+
+  uts4*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_shlibpath_var=no
+    ;;
+
+  dgux*)
+    archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_libdir_flag_spec='-L$libdir'
+    hardcode_shlibpath_var=no
+    ;;
+
+  sysv4*MP*)
+    if test -d /usr/nec; then
+      archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
+      hardcode_shlibpath_var=no
+      runpath_var=LD_RUN_PATH
+      hardcode_runpath_var=yes
+      ld_shlibs=yes
+    fi
+    ;;
+
+  sysv4.2uw2*)
+    archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
+    hardcode_direct=yes
+    hardcode_minus_L=no
+    hardcode_shlibpath_var=no
+    hardcode_runpath_var=yes
+    runpath_var=LD_RUN_PATH
+    ;;
+
+  sysv5uw7* | unixware7*)
+    no_undefined_flag='${wl}-z ${wl}text'
+    if test "$GCC" = yes; then
+      archive_cmds='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+    else
+      archive_cmds='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
+    fi
+    runpath_var='LD_RUN_PATH'
+    hardcode_shlibpath_var=no
+    ;;
+
+  *)
+    ld_shlibs=no
+    ;;
+  esac
+fi
+echo "$as_me:$LINENO: result: $ld_shlibs" >&5
+echo "${ECHO_T}$ld_shlibs" >&6
+test "$ld_shlibs" = no && can_build_shared=no
+
+# Check hardcoding attributes.
+echo "$as_me:$LINENO: checking how to hardcode library paths into programs" >&5
+echo $ECHO_N "checking how to hardcode library paths into programs... $ECHO_C" >&6
+hardcode_action=
+if test -n "$hardcode_libdir_flag_spec" || \
+   test -n "$runpath_var"; then
+
+  # We can hardcode non-existant directories.
+  if test "$hardcode_direct" != no &&
+     # If the only mechanism to avoid hardcoding is shlibpath_var, we
+     # have to relink, otherwise we might link with an installed library
+     # when we should be linking with a yet-to-be-installed one
+     ## test "$hardcode_shlibpath_var" != no &&
+     test "$hardcode_minus_L" != no; then
+    # Linking always hardcodes the temporary library directory.
+    hardcode_action=relink
+  else
+    # We can link without hardcoding, and we can hardcode nonexisting dirs.
+    hardcode_action=immediate
+  fi
+else
+  # We cannot hardcode anything, or else we can only hardcode existing
+  # directories.
+  hardcode_action=unsupported
+fi
+echo "$as_me:$LINENO: result: $hardcode_action" >&5
+echo "${ECHO_T}$hardcode_action" >&6
+
+striplib=
+old_striplib=
+echo "$as_me:$LINENO: checking whether stripping libraries is possible" >&5
+echo $ECHO_N "checking whether stripping libraries is possible... $ECHO_C" >&6
+if test -n "$STRIP" && $STRIP -V 2>&1 | grep "GNU strip" >/dev/null; then
+  test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
+  test -z "$striplib" && striplib="$STRIP --strip-unneeded"
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+reload_cmds='$LD$reload_flag -o $output$reload_objs'
+test -z "$deplibs_check_method" && deplibs_check_method=unknown
+
+# PORTME Fill in your ld.so characteristics
+echo "$as_me:$LINENO: checking dynamic linker characteristics" >&5
+echo $ECHO_N "checking dynamic linker characteristics... $ECHO_C" >&6
+library_names_spec=
+libname_spec='lib$name'
+soname_spec=
+postinstall_cmds=
+postuninstall_cmds=
+finish_cmds=
+finish_eval=
+shlibpath_var=
+shlibpath_overrides_runpath=unknown
+version_type=none
+dynamic_linker="$host_os ld.so"
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+
+case $host_os in
+aix3*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix $libname.a'
+  shlibpath_var=LIBPATH
+
+  # AIX has no versioning support, so we append a major version to the name.
+  soname_spec='${libname}${release}.so$major'
+  ;;
+
+aix4* | aix5*)
+  version_type=linux
+  if test "$host_cpu" = ia64; then
+    # AIX 5 supports IA64
+    library_names_spec='${libname}${release}.so$major ${libname}${release}.so$versuffix $libname.so'
+    shlibpath_var=LD_LIBRARY_PATH
+  else
+    # With GCC up to 2.95.x, collect2 would create an import file
+    # for dependence libraries.  The import file would start with
+    # the line `#! .'.  This would cause the generated library to
+    # depend on `.', always an invalid library.  This was fixed in
+    # development snapshots of GCC prior to 3.0.
+    case $host_os in
+      aix4 | aix4.[01] | aix4.[01].*)
+	if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
+	     echo ' yes '
+	     echo '#endif'; } | ${CC} -E - | grep yes > /dev/null; then
+	  :
+	else
+	  can_build_shared=no
+	fi
+	;;
+    esac
+    # AIX (on Power*) has no versioning support, so currently we can
+    # not hardcode correct soname into executable. Probably we can
+    # add versioning support to collect2, so additional links can
+    # be useful in future.
+    if test "$aix_use_runtimelinking" = yes; then
+      # If using run time linking (on AIX 4.2 or later) use lib<name>.so
+      # instead of lib<name>.a to let people know that these are not
+      # typical AIX shared libraries.
+      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+    else
+      # We preserve .a as extension for shared libraries through AIX4.2
+      # and later when we are not doing run time linking.
+      library_names_spec='${libname}${release}.a $libname.a'
+      soname_spec='${libname}${release}.so$major'
+    fi
+    shlibpath_var=LIBPATH
+  fi
+  ;;
+
+amigaos*)
+  library_names_spec='$libname.ixlibrary $libname.a'
+  # Create ${libname}_ixlibrary.a entries in /sys/libs.
+  finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$echo "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $rm /sys/libs/${libname}_ixlibrary.a; $show "(cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a)"; (cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a) || exit 1; done'
+  ;;
+
+beos*)
+  library_names_spec='${libname}.so'
+  dynamic_linker="$host_os ld.so"
+  shlibpath_var=LIBRARY_PATH
+  ;;
+
+bsdi4*)
+  version_type=linux
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+  sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+  export_dynamic_flag_spec=-rdynamic
+  # the default ld.so.conf also contains /usr/contrib/lib and
+  # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
+  # libtool to hard-code these into programs
+  ;;
+
+cygwin* | mingw* | pw32*)
+  version_type=windows
+  need_version=no
+  need_lib_prefix=no
+  case $GCC,$host_os in
+  yes,cygwin*)
+    library_names_spec='$libname.dll.a'
+    soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
+    postinstall_cmds='dlpath=`bash 2>&1 -c '\''. $dir/${file}i;echo \$dlname'\''`~
+      dldir=$destdir/`dirname \$dlpath`~
+      test -d \$dldir || mkdir -p \$dldir~
+      $install_prog .libs/$dlname \$dldir/$dlname'
+    postuninstall_cmds='dldll=`bash 2>&1 -c '\''. $file; echo \$dlname'\''`~
+      dlpath=$dir/\$dldll~
+       $rm \$dlpath'
+    ;;
+  yes,mingw*)
+    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll'
+    sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
+    ;;
+  yes,pw32*)
+    library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | sed -e 's/./-/g'`${versuffix}.dll'
+    ;;
+  *)
+    library_names_spec='${libname}`echo ${release} | sed -e 's/[.]/-/g'`${versuffix}.dll $libname.lib'
+    ;;
+  esac
+  dynamic_linker='Win32 ld.exe'
+  # FIXME: first we should search . and the directory the executable is in
+  shlibpath_var=PATH
+  ;;
+
+darwin* | rhapsody*)
+  dynamic_linker="$host_os dyld"
+  version_type=darwin
+  need_lib_prefix=no
+  need_version=no
+  # FIXME: Relying on posixy $() will cause problems for
+  #        cross-compilation, but unfortunately the echo tests do not
+  #        yet detect zsh echo's removal of \ escapes.
+  library_names_spec='${libname}${release}${versuffix}.$(test .$module = .yes && echo so || echo dylib) ${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib) ${libname}.$(test .$module = .yes && echo so || echo dylib)'
+  soname_spec='${libname}${release}${major}.$(test .$module = .yes && echo so || echo dylib)'
+  shlibpath_overrides_runpath=yes
+  shlibpath_var=DYLD_LIBRARY_PATH
+  ;;
+
+freebsd1*)
+  dynamic_linker=no
+  ;;
+
+freebsd*)
+  objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+  version_type=freebsd-$objformat
+  case $version_type in
+    freebsd-elf*)
+      library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+      need_version=no
+      need_lib_prefix=no
+      ;;
+    freebsd-*)
+      library_names_spec='${libname}${release}.so$versuffix $libname.so$versuffix'
+      need_version=yes
+      ;;
+  esac
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_os in
+  freebsd2*)
+    shlibpath_overrides_runpath=yes
+    ;;
+  *)
+    shlibpath_overrides_runpath=no
+    hardcode_into_libs=yes
+    ;;
+  esac
+  ;;
+
+gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so${major} ${libname}.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  hardcode_into_libs=yes
+  ;;
+
+hpux9* | hpux10* | hpux11*)
+  # Give a soname corresponding to the major version so that dld.sl refuses to
+  # link against other versions.
+  dynamic_linker="$host_os dld.sl"
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  shlibpath_var=SHLIB_PATH
+  shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
+  library_names_spec='${libname}${release}.sl$versuffix ${libname}${release}.sl$major $libname.sl'
+  soname_spec='${libname}${release}.sl$major'
+  # HP-UX runs *really* slowly unless shared libraries are mode 555.
+  postinstall_cmds='chmod 555 $lib'
+  ;;
+
+irix5* | irix6*)
+  version_type=irix
+  need_lib_prefix=no
+  need_version=no
+  soname_spec='${libname}${release}.so$major'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so $libname.so'
+  case $host_os in
+  irix5*)
+    libsuff= shlibsuff=
+    ;;
+  *)
+    case $LD in # libtool.m4 will add one of these switches to LD
+    *-32|*"-32 ") libsuff= shlibsuff= libmagic=32-bit;;
+    *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 libmagic=N32;;
+    *-64|*"-64 ") libsuff=64 shlibsuff=64 libmagic=64-bit;;
+    *) libsuff= shlibsuff= libmagic=never-match;;
+    esac
+    ;;
+  esac
+  shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
+  shlibpath_overrides_runpath=no
+  sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+  sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+  ;;
+
+# No shared lib support for Linux oldld, aout, or coff.
+linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
+  dynamic_linker=no
+  ;;
+
+# This must be Linux ELF.
+linux-gnu*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=no
+  # This implies no fast_install, which is unacceptable.
+  # Some rework will be needed to allow for fast_install
+  # before this can be enabled.
+  hardcode_into_libs=yes
+
+  # We used to test for /lib/ld.so.1 and disable shared libraries on
+  # powerpc, because MkLinux only supported shared libraries with the
+  # GNU dynamic linker.  Since this was broken with cross compilers,
+  # most powerpc-linux boxes support dynamic linking these days and
+  # people can always --disable-shared, the test was removed, and we
+  # assume the GNU/Linux dynamic linker is in use.
+  dynamic_linker='GNU/Linux ld.so'
+  ;;
+
+netbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then
+    library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+    finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+    dynamic_linker='NetBSD (a.out) ld.so'
+  else
+    library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major ${libname}${release}.so ${libname}.so'
+    soname_spec='${libname}${release}.so$major'
+    dynamic_linker='NetBSD ld.elf_so'
+  fi
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  ;;
+
+newsos6)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  ;;
+
+openbsd*)
+  version_type=sunos
+  need_lib_prefix=no
+  need_version=no
+  if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+    case "$host_os" in
+    openbsd2.[89] | openbsd2.[89].*)
+      shlibpath_overrides_runpath=no
+      ;;
+    *)
+      shlibpath_overrides_runpath=yes
+      ;;
+    esac
+  else
+    shlibpath_overrides_runpath=yes
+  fi
+  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+  finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+os2*)
+  libname_spec='$name'
+  need_lib_prefix=no
+  library_names_spec='$libname.dll $libname.a'
+  dynamic_linker='OS/2 ld.exe'
+  shlibpath_var=LIBPATH
+  ;;
+
+osf3* | osf4* | osf5*)
+  version_type=osf
+  need_version=no
+  soname_spec='${libname}${release}.so'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+  sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+  ;;
+
+sco3.2v5*)
+  version_type=osf
+  soname_spec='${libname}${release}.so$major'
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+solaris*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  hardcode_into_libs=yes
+  # ldd complains unless libraries are executable
+  postinstall_cmds='chmod +x $lib'
+  ;;
+
+sunos4*)
+  version_type=sunos
+  library_names_spec='${libname}${release}.so$versuffix ${libname}.so$versuffix'
+  finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
+  shlibpath_var=LD_LIBRARY_PATH
+  shlibpath_overrides_runpath=yes
+  if test "$with_gnu_ld" = yes; then
+    need_lib_prefix=no
+  fi
+  need_version=yes
+  ;;
+
+sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  case $host_vendor in
+    sni)
+      shlibpath_overrides_runpath=no
+      ;;
+    motorola)
+      need_lib_prefix=no
+      need_version=no
+      shlibpath_overrides_runpath=no
+      sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+      ;;
+  esac
+  ;;
+
+uts4*)
+  version_type=linux
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+dgux*)
+  version_type=linux
+  need_lib_prefix=no
+  need_version=no
+  library_names_spec='${libname}${release}.so$versuffix ${libname}${release}.so$major $libname.so'
+  soname_spec='${libname}${release}.so$major'
+  shlibpath_var=LD_LIBRARY_PATH
+  ;;
+
+sysv4*MP*)
+  if test -d /usr/nec ;then
+    version_type=linux
+    library_names_spec='$libname.so.$versuffix $libname.so.$major $libname.so'
+    soname_spec='$libname.so.$major'
+    shlibpath_var=LD_LIBRARY_PATH
+  fi
+  ;;
+
+*)
+  dynamic_linker=no
+  ;;
+esac
+echo "$as_me:$LINENO: result: $dynamic_linker" >&5
+echo "${ECHO_T}$dynamic_linker" >&6
+test "$dynamic_linker" = no && can_build_shared=no
+
+# Report the final consequences.
+echo "$as_me:$LINENO: checking if libtool supports shared libraries" >&5
+echo $ECHO_N "checking if libtool supports shared libraries... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $can_build_shared" >&5
+echo "${ECHO_T}$can_build_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build shared libraries" >&5
+echo $ECHO_N "checking whether to build shared libraries... $ECHO_C" >&6
+test "$can_build_shared" = "no" && enable_shared=no
+
+# On AIX, shared libraries and static libraries use the same namespace, and
+# are all built from PIC.
+case "$host_os" in
+aix3*)
+  test "$enable_shared" = yes && enable_static=no
+  if test -n "$RANLIB"; then
+    archive_cmds="$archive_cmds~\$RANLIB \$lib"
+    postinstall_cmds='$RANLIB $lib'
+  fi
+  ;;
+
+aix4*)
+  if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
+    test "$enable_shared" = yes && enable_static=no
+  fi
+  ;;
+esac
+echo "$as_me:$LINENO: result: $enable_shared" >&5
+echo "${ECHO_T}$enable_shared" >&6
+
+echo "$as_me:$LINENO: checking whether to build static libraries" >&5
+echo $ECHO_N "checking whether to build static libraries... $ECHO_C" >&6
+# Make sure either enable_shared or enable_static is yes.
+test "$enable_shared" = yes || enable_static=yes
+echo "$as_me:$LINENO: result: $enable_static" >&5
+echo "${ECHO_T}$enable_static" >&6
+
+if test "$hardcode_action" = relink; then
+  # Fast installation is not supported
+  enable_fast_install=no
+elif test "$shlibpath_overrides_runpath" = yes ||
+     test "$enable_shared" = no; then
+  # Fast installation is not necessary
+  enable_fast_install=needless
+fi
+
+variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
+if test "$GCC" = yes; then
+  variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
+fi
+
+if test "x$enable_dlopen" != xyes; then
+  enable_dlopen=unknown
+  enable_dlopen_self=unknown
+  enable_dlopen_self_static=unknown
+else
+  lt_cv_dlopen=no
+  lt_cv_dlopen_libs=
+
+  case $host_os in
+  beos*)
+    lt_cv_dlopen="load_add_on"
+    lt_cv_dlopen_libs=
+    lt_cv_dlopen_self=yes
+    ;;
+
+  cygwin* | mingw* | pw32*)
+    lt_cv_dlopen="LoadLibrary"
+    lt_cv_dlopen_libs=
+   ;;
+
+  *)
+    echo "$as_me:$LINENO: checking for shl_load" >&5
+echo $ECHO_N "checking for shl_load... $ECHO_C" >&6
+if test "${ac_cv_func_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shl_load to an innocuous variant, in case <limits.h> declares shl_load.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shl_load innocuous_shl_load
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shl_load (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shl_load
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_shl_load) || defined (__stub___shl_load)
+choke me
+#else
+char (*f) () = shl_load;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shl_load;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_shl_load" >&5
+echo "${ECHO_T}$ac_cv_func_shl_load" >&6
+if test $ac_cv_func_shl_load = yes; then
+  lt_cv_dlopen="shl_load"
+else
+  echo "$as_me:$LINENO: checking for shl_load in -ldld" >&5
+echo $ECHO_N "checking for shl_load in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_shl_load+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shl_load ();
+int
+main ()
+{
+shl_load ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_shl_load=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_shl_load=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_shl_load" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_shl_load" >&6
+if test $ac_cv_lib_dld_shl_load = yes; then
+  lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-dld"
+else
+  echo "$as_me:$LINENO: checking for dlopen" >&5
+echo $ECHO_N "checking for dlopen... $ECHO_C" >&6
+if test "${ac_cv_func_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define dlopen to an innocuous variant, in case <limits.h> declares dlopen.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define dlopen innocuous_dlopen
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char dlopen (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef dlopen
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_dlopen) || defined (__stub___dlopen)
+choke me
+#else
+char (*f) () = dlopen;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != dlopen;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_dlopen" >&5
+echo "${ECHO_T}$ac_cv_func_dlopen" >&6
+if test $ac_cv_func_dlopen = yes; then
+  lt_cv_dlopen="dlopen"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -ldl" >&5
+echo $ECHO_N "checking for dlopen in -ldl... $ECHO_C" >&6
+if test "${ac_cv_lib_dl_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dl_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dl_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dl_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_dl_dlopen" >&6
+if test $ac_cv_lib_dl_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
+else
+  echo "$as_me:$LINENO: checking for dlopen in -lsvld" >&5
+echo $ECHO_N "checking for dlopen in -lsvld... $ECHO_C" >&6
+if test "${ac_cv_lib_svld_dlopen+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsvld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dlopen ();
+int
+main ()
+{
+dlopen ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_svld_dlopen=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_svld_dlopen=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_svld_dlopen" >&5
+echo "${ECHO_T}$ac_cv_lib_svld_dlopen" >&6
+if test $ac_cv_lib_svld_dlopen = yes; then
+  lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
+else
+  echo "$as_me:$LINENO: checking for dld_link in -ldld" >&5
+echo $ECHO_N "checking for dld_link in -ldld... $ECHO_C" >&6
+if test "${ac_cv_lib_dld_dld_link+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldld  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dld_link ();
+int
+main ()
+{
+dld_link ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_dld_dld_link=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_dld_dld_link=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_dld_dld_link" >&5
+echo "${ECHO_T}$ac_cv_lib_dld_dld_link" >&6
+if test $ac_cv_lib_dld_dld_link = yes; then
+  lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-dld"
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+
+fi
+
+    ;;
+  esac
+
+  if test "x$lt_cv_dlopen" != xno; then
+    enable_dlopen=yes
+  else
+    enable_dlopen=no
+  fi
+
+  case $lt_cv_dlopen in
+  dlopen)
+    save_CPPFLAGS="$CPPFLAGS"
+        test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
+
+    save_LDFLAGS="$LDFLAGS"
+    eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
+
+    save_LIBS="$LIBS"
+    LIBS="$lt_cv_dlopen_libs $LIBS"
+
+    echo "$as_me:$LINENO: checking whether a program can dlopen itself" >&5
+echo $ECHO_N "checking whether a program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self=cross
+else
+    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 6790 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self" >&6
+
+    if test "x$lt_cv_dlopen_self" = xyes; then
+      LDFLAGS="$LDFLAGS $link_static_flag"
+      echo "$as_me:$LINENO: checking whether a statically linked program can dlopen itself" >&5
+echo $ECHO_N "checking whether a statically linked program can dlopen itself... $ECHO_C" >&6
+if test "${lt_cv_dlopen_self_static+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  	  if test "$cross_compiling" = yes; then :
+  lt_cv_dlopen_self_static=cross
+else
+    lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
+  lt_status=$lt_dlunknown
+  cat > conftest.$ac_ext <<EOF
+#line 6888 "configure"
+#include "confdefs.h"
+
+#if HAVE_DLFCN_H
+#include <dlfcn.h>
+#endif
+
+#include <stdio.h>
+
+#ifdef RTLD_GLOBAL
+#  define LT_DLGLOBAL		RTLD_GLOBAL
+#else
+#  ifdef DL_GLOBAL
+#    define LT_DLGLOBAL		DL_GLOBAL
+#  else
+#    define LT_DLGLOBAL		0
+#  endif
+#endif
+
+/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
+   find out it does not work in some platform. */
+#ifndef LT_DLLAZY_OR_NOW
+#  ifdef RTLD_LAZY
+#    define LT_DLLAZY_OR_NOW		RTLD_LAZY
+#  else
+#    ifdef DL_LAZY
+#      define LT_DLLAZY_OR_NOW		DL_LAZY
+#    else
+#      ifdef RTLD_NOW
+#        define LT_DLLAZY_OR_NOW	RTLD_NOW
+#      else
+#        ifdef DL_NOW
+#          define LT_DLLAZY_OR_NOW	DL_NOW
+#        else
+#          define LT_DLLAZY_OR_NOW	0
+#        endif
+#      endif
+#    endif
+#  endif
+#endif
+
+#ifdef __cplusplus
+extern "C" void exit (int);
+#endif
+
+void fnord() { int i=42;}
+int main ()
+{
+  void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
+  int status = $lt_dlunknown;
+
+  if (self)
+    {
+      if (dlsym (self,"fnord"))       status = $lt_dlno_uscore;
+      else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
+      /* dlclose (self); */
+    }
+
+    exit (status);
+}
+EOF
+  if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext} 2>/dev/null; then
+    (./conftest; exit; ) 2>/dev/null
+    lt_status=$?
+    case x$lt_status in
+      x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
+      x$lt_unknown|x*) lt_cv_dlopen_self_static=no ;;
+    esac
+  else :
+    # compilation failed
+    lt_cv_dlopen_self_static=no
+  fi
+fi
+rm -fr conftest*
+
+
+fi
+echo "$as_me:$LINENO: result: $lt_cv_dlopen_self_static" >&5
+echo "${ECHO_T}$lt_cv_dlopen_self_static" >&6
+    fi
+
+    CPPFLAGS="$save_CPPFLAGS"
+    LDFLAGS="$save_LDFLAGS"
+    LIBS="$save_LIBS"
+    ;;
+  esac
+
+  case $lt_cv_dlopen_self in
+  yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
+  *) enable_dlopen_self=unknown ;;
+  esac
+
+  case $lt_cv_dlopen_self_static in
+  yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
+  *) enable_dlopen_self_static=unknown ;;
+  esac
+fi
+
+
+if test "$enable_shared" = yes && test "$GCC" = yes; then
+  case $archive_cmds in
+  *'~'*)
+    # FIXME: we may have to deal with multi-command sequences.
+    ;;
+  '$CC '*)
+    # Test whether the compiler implicitly links with -lc since on some
+    # systems, -lgcc has to come before -lc. If gcc already passes -lc
+    # to ld, don't add -lc before -lgcc.
+    echo "$as_me:$LINENO: checking whether -lc should be explicitly linked in" >&5
+echo $ECHO_N "checking whether -lc should be explicitly linked in... $ECHO_C" >&6
+    if test "${lt_cv_archive_cmds_need_lc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  $rm conftest*
+    echo 'static int dummy;' > conftest.$ac_ext
+
+    if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+      soname=conftest
+      lib=conftest
+      libobjs=conftest.$ac_objext
+      deplibs=
+      wl=$lt_cv_prog_cc_wl
+      compiler_flags=-v
+      linker_flags=-v
+      verstring=
+      output_objdir=.
+      libname=conftest
+      save_allow_undefined_flag=$allow_undefined_flag
+      allow_undefined_flag=
+      if { (eval echo "$as_me:$LINENO: \"$archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1\"") >&5
+  (eval $archive_cmds 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+      then
+	lt_cv_archive_cmds_need_lc=no
+      else
+	lt_cv_archive_cmds_need_lc=yes
+      fi
+      allow_undefined_flag=$save_allow_undefined_flag
+    else
+      cat conftest.err 1>&5
+    fi
+fi
+
+    echo "$as_me:$LINENO: result: $lt_cv_archive_cmds_need_lc" >&5
+echo "${ECHO_T}$lt_cv_archive_cmds_need_lc" >&6
+    ;;
+  esac
+fi
+need_lc=${lt_cv_archive_cmds_need_lc-yes}
+
+# The second clause should only fire when bootstrapping the
+# libtool distribution, otherwise you forgot to ship ltmain.sh
+# with your package, and you will get complaints that there are
+# no rules to generate ltmain.sh.
+if test -f "$ltmain"; then
+  :
+else
+  # If there is no Makefile yet, we rely on a make rule to execute
+  # `config.status --recheck' to rerun these tests and create the
+  # libtool script then.
+  test -f Makefile && make "$ltmain"
+fi
+
+if test -f "$ltmain"; then
+  trap "$rm \"${ofile}T\"; exit 1" 1 2 15
+  $rm -f "${ofile}T"
+
+  echo creating $ofile
+
+  # Now quote all the things that may contain metacharacters while being
+  # careful not to overquote the AC_SUBSTed values.  We take copies of the
+  # variables and quote the copies for generation of the libtool script.
+  for var in echo old_CC old_CFLAGS \
+    AR AR_FLAGS CC LD LN_S NM SHELL \
+    reload_flag reload_cmds wl \
+    pic_flag link_static_flag no_builtin_flag export_dynamic_flag_spec \
+    thread_safe_flag_spec whole_archive_flag_spec libname_spec \
+    library_names_spec soname_spec \
+    RANLIB old_archive_cmds old_archive_from_new_cmds old_postinstall_cmds \
+    old_postuninstall_cmds archive_cmds archive_expsym_cmds postinstall_cmds \
+    postuninstall_cmds extract_expsyms_cmds old_archive_from_expsyms_cmds \
+    old_striplib striplib file_magic_cmd export_symbols_cmds \
+    deplibs_check_method allow_undefined_flag no_undefined_flag \
+    finish_cmds finish_eval global_symbol_pipe global_symbol_to_cdecl \
+    global_symbol_to_c_name_address \
+    hardcode_libdir_flag_spec hardcode_libdir_separator  \
+    sys_lib_search_path_spec sys_lib_dlsearch_path_spec \
+    compiler_c_o compiler_o_lo need_locks exclude_expsyms include_expsyms; do
+
+    case $var in
+    reload_cmds | old_archive_cmds | old_archive_from_new_cmds | \
+    old_postinstall_cmds | old_postuninstall_cmds | \
+    export_symbols_cmds | archive_cmds | archive_expsym_cmds | \
+    extract_expsyms_cmds | old_archive_from_expsyms_cmds | \
+    postinstall_cmds | postuninstall_cmds | \
+    finish_cmds | sys_lib_search_path_spec | sys_lib_dlsearch_path_spec)
+      # Double-quote double-evaled strings.
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$double_quote_subst\" -e \"\$sed_quote_subst\" -e \"\$delay_variable_subst\"\`\\\""
+      ;;
+    *)
+      eval "lt_$var=\\\"\`\$echo \"X\$$var\" | \$Xsed -e \"\$sed_quote_subst\"\`\\\""
+      ;;
+    esac
+  done
+
+  cat <<__EOF__ > "${ofile}T"
+#! $SHELL
+
+# `$echo "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
+# Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP)
+# NOTE: Changes made to this file will be lost: look at ltmain.sh.
+#
+# Copyright (C) 1996-2000 Free Software Foundation, Inc.
+# Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Sed that helps us avoid accidentally triggering echo(1) options like -n.
+Xsed="sed -e s/^X//"
+
+# The HP-UX ksh and POSIX shell print the target directory to stdout
+# if CDPATH is set.
+if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi
+
+# ### BEGIN LIBTOOL CONFIG
+
+# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+
+# Shell to use when invoking shell scripts.
+SHELL=$lt_SHELL
+
+# Whether or not to build shared libraries.
+build_libtool_libs=$enable_shared
+
+# Whether or not to build static libraries.
+build_old_libs=$enable_static
+
+# Whether or not to add -lc for building shared libraries.
+build_libtool_need_lc=$need_lc
+
+# Whether or not to optimize for fast installation.
+fast_install=$enable_fast_install
+
+# The host system.
+host_alias=$host_alias
+host=$host
+
+# An echo program that does not interpret backslashes.
+echo=$lt_echo
+
+# The archiver.
+AR=$lt_AR
+AR_FLAGS=$lt_AR_FLAGS
+
+# The default C compiler.
+CC=$lt_CC
+
+# Is the compiler the GNU C compiler?
+with_gcc=$GCC
+
+# The linker used to build libraries.
+LD=$lt_LD
+
+# Whether we need hard or soft links.
+LN_S=$lt_LN_S
+
+# A BSD-compatible nm program.
+NM=$lt_NM
+
+# A symbol stripping program
+STRIP=$STRIP
+
+# Used to examine libraries when file_magic_cmd begins "file"
+MAGIC_CMD=$MAGIC_CMD
+
+# Used on cygwin: DLL creation program.
+DLLTOOL="$DLLTOOL"
+
+# Used on cygwin: object dumper.
+OBJDUMP="$OBJDUMP"
+
+# Used on cygwin: assembler.
+AS="$AS"
+
+# The name of the directory that contains temporary libtool files.
+objdir=$objdir
+
+# How to create reloadable object files.
+reload_flag=$lt_reload_flag
+reload_cmds=$lt_reload_cmds
+
+# How to pass a linker flag through the compiler.
+wl=$lt_wl
+
+# Object file suffix (normally "o").
+objext="$ac_objext"
+
+# Old archive suffix (normally "a").
+libext="$libext"
+
+# Executable file suffix (normally "").
+exeext="$exeext"
+
+# Additional compiler flags for building library objects.
+pic_flag=$lt_pic_flag
+pic_mode=$pic_mode
+
+# Does compiler simultaneously support -c and -o options?
+compiler_c_o=$lt_compiler_c_o
+
+# Can we write directly to a .lo ?
+compiler_o_lo=$lt_compiler_o_lo
+
+# Must we lock files when doing compilation ?
+need_locks=$lt_need_locks
+
+# Do we need the lib prefix for modules?
+need_lib_prefix=$need_lib_prefix
+
+# Do we need a version for libraries?
+need_version=$need_version
+
+# Whether dlopen is supported.
+dlopen_support=$enable_dlopen
+
+# Whether dlopen of programs is supported.
+dlopen_self=$enable_dlopen_self
+
+# Whether dlopen of statically linked programs is supported.
+dlopen_self_static=$enable_dlopen_self_static
+
+# Compiler flag to prevent dynamic linking.
+link_static_flag=$lt_link_static_flag
+
+# Compiler flag to turn off builtin functions.
+no_builtin_flag=$lt_no_builtin_flag
+
+# Compiler flag to allow reflexive dlopens.
+export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
+
+# Compiler flag to generate shared objects directly from archives.
+whole_archive_flag_spec=$lt_whole_archive_flag_spec
+
+# Compiler flag to generate thread-safe objects.
+thread_safe_flag_spec=$lt_thread_safe_flag_spec
+
+# Library versioning type.
+version_type=$version_type
+
+# Format of library name prefix.
+libname_spec=$lt_libname_spec
+
+# List of archive names.  First name is the real one, the rest are links.
+# The last name is the one that the linker finds with -lNAME.
+library_names_spec=$lt_library_names_spec
+
+# The coded name of the library, if different from the real name.
+soname_spec=$lt_soname_spec
+
+# Commands used to build and install an old-style archive.
+RANLIB=$lt_RANLIB
+old_archive_cmds=$lt_old_archive_cmds
+old_postinstall_cmds=$lt_old_postinstall_cmds
+old_postuninstall_cmds=$lt_old_postuninstall_cmds
+
+# Create an old-style archive from a shared archive.
+old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
+
+# Create a temporary old-style archive to link instead of a shared archive.
+old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
+
+# Commands used to build and install a shared archive.
+archive_cmds=$lt_archive_cmds
+archive_expsym_cmds=$lt_archive_expsym_cmds
+postinstall_cmds=$lt_postinstall_cmds
+postuninstall_cmds=$lt_postuninstall_cmds
+
+# Commands to strip libraries.
+old_striplib=$lt_old_striplib
+striplib=$lt_striplib
+
+# Method to check whether dependent libraries are shared objects.
+deplibs_check_method=$lt_deplibs_check_method
+
+# Command to use when deplibs_check_method == file_magic.
+file_magic_cmd=$lt_file_magic_cmd
+
+# Flag that allows shared libraries with undefined symbols to be built.
+allow_undefined_flag=$lt_allow_undefined_flag
+
+# Flag that forces no undefined symbols.
+no_undefined_flag=$lt_no_undefined_flag
+
+# Commands used to finish a libtool library installation in a directory.
+finish_cmds=$lt_finish_cmds
+
+# Same as above, but a single script fragment to be evaled but not shown.
+finish_eval=$lt_finish_eval
+
+# Take the output of nm and produce a listing of raw symbols and C names.
+global_symbol_pipe=$lt_global_symbol_pipe
+
+# Transform the output of nm in a proper C declaration
+global_symbol_to_cdecl=$lt_global_symbol_to_cdecl
+
+# Transform the output of nm in a C name address pair
+global_symbol_to_c_name_address=$lt_global_symbol_to_c_name_address
+
+# This is the shared library runtime path variable.
+runpath_var=$runpath_var
+
+# This is the shared library path variable.
+shlibpath_var=$shlibpath_var
+
+# Is shlibpath searched before the hard-coded library search path?
+shlibpath_overrides_runpath=$shlibpath_overrides_runpath
+
+# How to hardcode a shared library path into an executable.
+hardcode_action=$hardcode_action
+
+# Whether we should hardcode library paths into libraries.
+hardcode_into_libs=$hardcode_into_libs
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator=$lt_hardcode_libdir_separator
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct=$hardcode_direct
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L=$hardcode_minus_L
+
+# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
+# the resulting binary.
+hardcode_shlibpath_var=$hardcode_shlibpath_var
+
+# Variables whose values should be saved in libtool wrapper scripts and
+# restored at relink time.
+variables_saved_for_relink="$variables_saved_for_relink"
+
+# Whether libtool must link a program against all its dependency libraries.
+link_all_deplibs=$link_all_deplibs
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
+
+# Fix the shell variable \$srcfile for the compiler.
+fix_srcfile_path="$fix_srcfile_path"
+
+# Set to yes if exported symbols are required.
+always_export_symbols=$always_export_symbols
+
+# The commands to list exported symbols.
+export_symbols_cmds=$lt_export_symbols_cmds
+
+# The commands to extract the exported symbol list from a shared archive.
+extract_expsyms_cmds=$lt_extract_expsyms_cmds
+
+# Symbols that should not be listed in the preloaded symbols.
+exclude_expsyms=$lt_exclude_expsyms
+
+# Symbols that must always be exported.
+include_expsyms=$lt_include_expsyms
+
+# ### END LIBTOOL CONFIG
+
+__EOF__
+
+  case $host_os in
+  aix3*)
+    cat <<\EOF >> "${ofile}T"
+
+# AIX sometimes has problems with the GCC collect2 program.  For some
+# reason, if we set the COLLECT_NAMES environment variable, the problems
+# vanish in a puff of smoke.
+if test "X${COLLECT_NAMES+set}" != Xset; then
+  COLLECT_NAMES=
+  export COLLECT_NAMES
+fi
+EOF
+    ;;
+  esac
+
+  case $host_os in
+  cygwin* | mingw* | pw32* | os2*)
+    cat <<'EOF' >> "${ofile}T"
+      # This is a source program that is used to create dlls on Windows
+      # Don't remove nor modify the starting and closing comments
+# /* ltdll.c starts here */
+# #define WIN32_LEAN_AND_MEAN
+# #include <windows.h>
+# #undef WIN32_LEAN_AND_MEAN
+# #include <stdio.h>
+#
+# #ifndef __CYGWIN__
+# #  ifdef __CYGWIN32__
+# #    define __CYGWIN__ __CYGWIN32__
+# #  endif
+# #endif
+#
+# #ifdef __cplusplus
+# extern "C" {
+# #endif
+# BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved);
+# #ifdef __cplusplus
+# }
+# #endif
+#
+# #ifdef __CYGWIN__
+# #include <cygwin/cygwin_dll.h>
+# DECLARE_CYGWIN_DLL( DllMain );
+# #endif
+# HINSTANCE __hDllInstance_base;
+#
+# BOOL APIENTRY
+# DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved)
+# {
+#   __hDllInstance_base = hInst;
+#   return TRUE;
+# }
+# /* ltdll.c ends here */
+	# This is a source program that is used to create import libraries
+	# on Windows for dlls which lack them. Don't remove nor modify the
+	# starting and closing comments
+# /* impgen.c starts here */
+# /*   Copyright (C) 1999-2000 Free Software Foundation, Inc.
+#
+#  This file is part of GNU libtool.
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#  */
+#
+# #include <stdio.h>		/* for printf() */
+# #include <unistd.h>		/* for open(), lseek(), read() */
+# #include <fcntl.h>		/* for O_RDONLY, O_BINARY */
+# #include <string.h>		/* for strdup() */
+#
+# /* O_BINARY isn't required (or even defined sometimes) under Unix */
+# #ifndef O_BINARY
+# #define O_BINARY 0
+# #endif
+#
+# static unsigned int
+# pe_get16 (fd, offset)
+#      int fd;
+#      int offset;
+# {
+#   unsigned char b[2];
+#   lseek (fd, offset, SEEK_SET);
+#   read (fd, b, 2);
+#   return b[0] + (b[1]<<8);
+# }
+#
+# static unsigned int
+# pe_get32 (fd, offset)
+#     int fd;
+#     int offset;
+# {
+#   unsigned char b[4];
+#   lseek (fd, offset, SEEK_SET);
+#   read (fd, b, 4);
+#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# static unsigned int
+# pe_as32 (ptr)
+#      void *ptr;
+# {
+#   unsigned char *b = ptr;
+#   return b[0] + (b[1]<<8) + (b[2]<<16) + (b[3]<<24);
+# }
+#
+# int
+# main (argc, argv)
+#     int argc;
+#     char *argv[];
+# {
+#     int dll;
+#     unsigned long pe_header_offset, opthdr_ofs, num_entries, i;
+#     unsigned long export_rva, export_size, nsections, secptr, expptr;
+#     unsigned long name_rvas, nexp;
+#     unsigned char *expdata, *erva;
+#     char *filename, *dll_name;
+#
+#     filename = argv[1];
+#
+#     dll = open(filename, O_RDONLY|O_BINARY);
+#     if (dll < 1)
+# 	return 1;
+#
+#     dll_name = filename;
+#
+#     for (i=0; filename[i]; i++)
+# 	if (filename[i] == '/' || filename[i] == '\\'  || filename[i] == ':')
+# 	    dll_name = filename + i +1;
+#
+#     pe_header_offset = pe_get32 (dll, 0x3c);
+#     opthdr_ofs = pe_header_offset + 4 + 20;
+#     num_entries = pe_get32 (dll, opthdr_ofs + 92);
+#
+#     if (num_entries < 1) /* no exports */
+# 	return 1;
+#
+#     export_rva = pe_get32 (dll, opthdr_ofs + 96);
+#     export_size = pe_get32 (dll, opthdr_ofs + 100);
+#     nsections = pe_get16 (dll, pe_header_offset + 4 +2);
+#     secptr = (pe_header_offset + 4 + 20 +
+# 	      pe_get16 (dll, pe_header_offset + 4 + 16));
+#
+#     expptr = 0;
+#     for (i = 0; i < nsections; i++)
+#     {
+# 	char sname[8];
+# 	unsigned long secptr1 = secptr + 40 * i;
+# 	unsigned long vaddr = pe_get32 (dll, secptr1 + 12);
+# 	unsigned long vsize = pe_get32 (dll, secptr1 + 16);
+# 	unsigned long fptr = pe_get32 (dll, secptr1 + 20);
+# 	lseek(dll, secptr1, SEEK_SET);
+# 	read(dll, sname, 8);
+# 	if (vaddr <= export_rva && vaddr+vsize > export_rva)
+# 	{
+# 	    expptr = fptr + (export_rva - vaddr);
+# 	    if (export_rva + export_size > vaddr + vsize)
+# 		export_size = vsize - (export_rva - vaddr);
+# 	    break;
+# 	}
+#     }
+#
+#     expdata = (unsigned char*)malloc(export_size);
+#     lseek (dll, expptr, SEEK_SET);
+#     read (dll, expdata, export_size);
+#     erva = expdata - export_rva;
+#
+#     nexp = pe_as32 (expdata+24);
+#     name_rvas = pe_as32 (expdata+32);
+#
+#     printf ("EXPORTS\n");
+#     for (i = 0; i<nexp; i++)
+#     {
+# 	unsigned long name_rva = pe_as32 (erva+name_rvas+i*4);
+# 	printf ("\t%s @ %ld ;\n", erva+name_rva, 1+ i);
+#     }
+#
+#     return 0;
+# }
+# /* impgen.c ends here */
+
+EOF
+    ;;
+  esac
+
+  # We use sed instead of cat because bash on DJGPP gets confused if
+  # if finds mixed CR/LF and LF-only lines.  Since sed operates in
+  # text mode, it properly converts lines to CR/LF.  This bash problem
+  # is reportedly fixed, but why not run on old versions too?
+  sed '$q' "$ltmain" >> "${ofile}T" || (rm -f "${ofile}T"; exit 1)
+
+  mv -f "${ofile}T" "$ofile" || \
+    (rm -f "$ofile" && cp "${ofile}T" "$ofile" && rm -f "${ofile}T")
+  chmod +x "$ofile"
+fi
+
+
+
+
+
+# This can be used to rebuild libtool when needed
+LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh"
+
+# Always use our own libtool.
+LIBTOOL='$(SHELL) $(top_builddir)/libtool'
+
+# Prevent multiple expansion
+
+
+
+ PERL=""
+if test "X$GCC" = "Xyes"; then
+  for ac_prog in perl
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_PERL+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$PERL"; then
+  ac_cv_prog_PERL="$PERL" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_PERL="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+PERL=$ac_cv_prog_PERL
+if test -n "$PERL"; then
+  echo "$as_me:$LINENO: result: $PERL" >&5
+echo "${ECHO_T}$PERL" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$PERL" && break
+done
+
+fi
+
+if test -z "$AR"; then
+  for ac_prog in ar xar
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_AR+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  echo "$as_me:$LINENO: result: $AR" >&5
+echo "${ECHO_T}$AR" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$AR" && break
+done
+test -n "$AR" || AR=":"
+
+fi
+
+
+if test -z "$SEARCH"; then
+  echo "$as_me:$LINENO: checking how make searches directories" >&5
+echo $ECHO_N "checking how make searches directories... $ECHO_C" >&6
+  while true; do #for break
+        cat >maketest <<EOF
+VPATH=$srcdir/config $srcdir/src $srcdir/bin
+.c.o:
+	cp $< H5_f.o
+
+foo: H5_f.o
+	/bin/rm -f H5_f.o
+	@echo works
+EOF
+
+    if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      SEARCH_RULE='VPATH='
+      SEARCH_SEP=' '
+      echo "$as_me:$LINENO: result: VPATH=DIR1 DIR2 ..." >&5
+echo "${ECHO_T}VPATH=DIR1 DIR2 ..." >&6
+      break
+    fi
+
+            cat >maketest <<EOF
+VPATH=$srcdir/config:$srcdir/src:$srcdir/bin
+.c.o:
+	cp $< H5_f.o
+
+foo: H5_f.o
+	/bin/rm -f H5_f.o
+	@echo works
+EOF
+
+    if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      SEARCH_RULE='VPATH='
+      SEARCH_SEP=':'
+      echo "$as_me:$LINENO: result: VPATH=DIR1:DIR2:..." >&5
+echo "${ECHO_T}VPATH=DIR1:DIR2:..." >&6
+      break
+    fi
+
+        cat >maketest <<EOF
+.PATH: $srcdir/config $srcdir/src $srcdir/bin
+.c.o:
+	cp $< H5_f.o
+
+foo: H5_f.o
+	/bin/rm -f H5_f.o
+	@echo works
+EOF
+
+    if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      SEARCH_RULE='.PATH: '
+      SEARCH_SEP=' '
+      echo "$as_me:$LINENO: result: .PATH: DIR1 DIR2 ..." >&5
+echo "${ECHO_T}.PATH: DIR1 DIR2 ..." >&6
+      break
+    fi
+
+        SEARCH_RULE='## SEARCH DISABLED: '
+    SEARCH_SEP=' '
+    echo "$as_me:$LINENO: result: it doesn't" >&5
+echo "${ECHO_T}it doesn't" >&6
+    if test ! -f configure; then
+      { { echo "$as_me:$LINENO: error: ${MAKE-make} requires the build and source directories to be the same" >&5
+echo "$as_me: error: ${MAKE-make} requires the build and source directories to be the same" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    break
+  done
+  rm maketest
+fi
+
+echo "$as_me:$LINENO: checking for production mode" >&5
+echo $ECHO_N "checking for production mode... $ECHO_C" >&6
+# Check whether --enable-production or --disable-production was given.
+if test "${enable_production+set}" = set; then
+  enableval="$enable_production"
+
+fi;
+
+case "X-$enable_production" in
+  X-|X-yes)
+    echo "$as_me:$LINENO: result: \"production\"" >&5
+echo "${ECHO_T}\"production\"" >&6
+
+            CFLAGS_temp=""
+    if test -n "$CFLAGS"; then
+      for d in $CFLAGS ; do
+        if test "X$d" != "X-g"; then
+          CFLAGS_temp="$CFLAGS_temp $d"
+        fi
+      done
+      CFLAGS=$CFLAGS_temp
+    fi
+
+            FFLAGS_temp=""
+    if test -n "$FFLAGS"; then
+      for d in $FFLAGS ; do
+        if test "X$d" != "X-g"; then
+          FFLAGS_temp="$FFLAGS_temp $d"
+        fi
+      done
+      FFLAGS=$FFLAGS_temp
+    fi
+
+    CONFIG_MODE=production
+    CFLAGS="$CFLAGS $PROD_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $PROD_CPPFLAGS"
+    FFLAGS="$FFLAGS $PROD_FFLAGS"
+    ;;
+  X-no)
+    echo "$as_me:$LINENO: result: \"development\"" >&5
+echo "${ECHO_T}\"development\"" >&6
+    CONFIG_MODE=development
+    CFLAGS="$CFLAGS $DEBUG_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $DEBUG_CPPFLAGS"
+    FFLAGS="$FFLAGS $DEBUG_FFLAGS"
+    ;;
+  X-pg|X-profile)
+    echo "$as_me:$LINENO: result: \"profile\"" >&5
+echo "${ECHO_T}\"profile\"" >&6
+    CONFIG_MODE=profile
+    CFLAGS="$CFLAGS $PROFILE_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $PROFILE_CPPFLAGS"
+    FFLAGS="$FFLAGS $PROFILE_FFLAGS"
+    ;;
+  *)
+    echo "$as_me:$LINENO: result: \"user-defined\"" >&5
+echo "${ECHO_T}\"user-defined\"" >&6
+    CONFIG_MODE="$X-enableval"
+    ;;
+esac
+
+
+echo "$as_me:$LINENO: checking for ceil in -lm" >&5
+echo $ECHO_N "checking for ceil in -lm... $ECHO_C" >&6
+if test "${ac_cv_lib_m_ceil+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lm  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char ceil ();
+int
+main ()
+{
+ceil ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_m_ceil=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_m_ceil=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_m_ceil" >&5
+echo "${ECHO_T}$ac_cv_lib_m_ceil" >&6
+if test $ac_cv_lib_m_ceil = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBM 1
+_ACEOF
+
+  LIBS="-lm $LIBS"
+
+fi
+
+
+if test "`uname`" = "SunOS" -o "`uname -sr`" = "HP-UX B.11.00"; then
+
+echo "$as_me:$LINENO: checking for socket in -lsocket" >&5
+echo $ECHO_N "checking for socket in -lsocket... $ECHO_C" >&6
+if test "${ac_cv_lib_socket_socket+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char socket ();
+int
+main ()
+{
+socket ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_socket_socket=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_socket_socket=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_socket_socket" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_socket" >&6
+if test $ac_cv_lib_socket_socket = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSOCKET 1
+_ACEOF
+
+  LIBS="-lsocket $LIBS"
+
+fi
+
+
+echo "$as_me:$LINENO: checking for xdr_int in -lnsl" >&5
+echo $ECHO_N "checking for xdr_int in -lnsl... $ECHO_C" >&6
+if test "${ac_cv_lib_nsl_xdr_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char xdr_int ();
+int
+main ()
+{
+xdr_int ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_nsl_xdr_int=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_nsl_xdr_int=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_xdr_int" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_xdr_int" >&6
+if test $ac_cv_lib_nsl_xdr_int = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBNSL 1
+_ACEOF
+
+  LIBS="-lnsl $LIBS"
+
+fi
+
+fi
+
+echo "$as_me:$LINENO: checking if should build only statically linked executables" >&5
+echo $ECHO_N "checking if should build only statically linked executables... $ECHO_C" >&6
+# Check whether --enable-static_exec or --disable-static_exec was given.
+if test "${enable_static_exec+set}" = set; then
+  enableval="$enable_static_exec"
+  STATIC_EXEC=$enableval
+fi;
+
+if test "X$STATIC_EXEC" = "Xyes"; then
+  echo "yes"
+  LT_STATIC_EXEC="-all-static"
+else
+  echo "no"
+  LT_STATIC_EXEC=""
+fi
+
+
+case "$host_cpu-$host_vendor-$host_os" in
+  *linux*)
+                # Check whether --enable-linux-lfs or --disable-linux-lfs was given.
+if test "${enable_linux_lfs+set}" = set; then
+  enableval="$enable_linux_lfs"
+
+fi;
+
+    LINUX_LFS="no"
+    case "X-$enable_linux_lfs" in
+      X-yes)
+        LINUX_LFS=yes
+        ;;
+      X-no)
+        ;;
+      X-|*)
+        MAJOR_VER="`uname -r | cut -d '.' -f1`"
+        MINOR_VER="`uname -r | cut -d '.' -f2`"
+
+        if test ${MAJOR_VER} -gt 2 -o ${MAJOR_VER} -eq 2 -a ${MINOR_VER} -ge 4; then
+          LINUX_LFS="yes"
+        fi
+        ;;
+    esac
+
+    echo "$as_me:$LINENO: checking for large file support mode on Linux" >&5
+echo $ECHO_N "checking for large file support mode on Linux... $ECHO_C" >&6
+    if test "X$LINUX_LFS" = "Xyes"; then
+      echo "$as_me:$LINENO: result: enabled" >&5
+echo "${ECHO_T}enabled" >&6
+      CPPFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE $CPPFLAGS"
+    else
+      echo "$as_me:$LINENO: result: disabled" >&5
+echo "${ECHO_T}disabled" >&6
+    fi
+
+                CPPFLAGS="-D_POSIX_SOURCE $CPPFLAGS"
+
+                    CPPFLAGS="-D_BSD_SOURCE $CPPFLAGS"
+    ;;
+esac
+
+for ac_prog in f90 pgf90 xlf90 f95 g95 xlf95 ftn
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6
+if test "${ac_cv_prog_F9X+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$F9X"; then
+  ac_cv_prog_F9X="$F9X" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_F9X="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+fi
+fi
+F9X=$ac_cv_prog_F9X
+if test -n "$F9X"; then
+  echo "$as_me:$LINENO: result: $F9X" >&5
+echo "${ECHO_T}$F9X" >&6
+else
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+fi
+
+  test -n "$F9X" && break
+done
+
+test -z "$F9X" && { { echo "$as_me:$LINENO: error: no acceptable f9X compiler found in \$PATH" >&5
+echo "$as_me: error: no acceptable f9X compiler found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+
+
+echo "$as_me:$LINENO: checking whether the Fortran 9X compiler ($F9X $FFLAGS $LDFLAGS) works" >&5
+echo $ECHO_N "checking whether the Fortran 9X compiler ($F9X $FFLAGS $LDFLAGS) works... $ECHO_C" >&6
+
+
+ac_ext=f90
+ac_compile='${F9X-f90} -c $FFLAGS conftest.$ac_ext 1>&5'
+ac_link='${F9X-f90} -o conftest${ac_exeext} $FFLAGS conftest.$ac_ext $LDFLAGS $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_f9x_cross
+
+
+cat > conftest.$ac_ext << EOF
+
+      program conftest
+      end
+
+EOF
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && test -s conftest${ac_exeext}; then
+  ac_cv_prog_f9x_works=yes
+  # If we can't run a trivial program, we are probably using a cross compiler.
+  if (./conftest; exit) 2>/dev/null; then
+    ac_cv_prog_f9x_cross=no
+  else
+    ac_cv_prog_f9x_cross=yes
+  fi
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_prog_f9x_works=no
+fi
+rm -fr conftest*
+
+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
+
+echo "$as_me:$LINENO: result: $ac_cv_prog_f9x_works" >&5
+echo "${ECHO_T}$ac_cv_prog_f9x_works" >&6
+if test $ac_cv_prog_f9x_works = no; then
+  { { echo "$as_me:$LINENO: error: installation or configuration problem: Fortran 9X compiler cannot create executables." >&5
+echo "$as_me: error: installation or configuration problem: Fortran 9X compiler cannot create executables." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+echo "$as_me:$LINENO: checking whether the Fortran 9X compiler ($F9X $FFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo $ECHO_N "checking whether the Fortran 9X compiler ($F9X $FFLAGS $LDFLAGS) is a cross-compiler... $ECHO_C" >&6
+echo "$as_me:$LINENO: result: $ac_cv_prog_f9x_cross" >&5
+echo "${ECHO_T}$ac_cv_prog_f9x_cross" >&6
+cross_compiling=$ac_cv_prog_f9x_cross
+
+echo "$as_me:$LINENO: checking whether we are using GNU Fortran 95" >&5
+echo $ECHO_N "checking whether we are using GNU Fortran 95... $ECHO_C" >&6
+if test "${ac_cv_prog_g9x+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat > conftest.fpp <<EOF
+#ifdef __GNUC__
+  yes
+#endif
+EOF
+if { ac_try='$F9X -E conftest.fpp'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } | egrep yes >/dev/null 2>&1; then
+  ac_cv_prog_g9x=yes
+else
+  ac_cv_prog_g9x=no
+fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_g9x" >&5
+echo "${ECHO_T}$ac_cv_prog_g9x" >&6
+
+if test $ac_cv_prog_g9x = yes; then
+  G9X=yes
+        ac_test_FFLAGS="${FFLAGS+set}"
+  ac_save_FFLAGS="$FFLAGS"
+  FFLAGS=
+  echo "$as_me:$LINENO: checking whether $F9X accepts -g" >&5
+echo $ECHO_N "checking whether $F9X accepts -g... $ECHO_C" >&6
+if test "${ac_cv_prog_f9x_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat > conftest.f << EOF
+       program conftest
+       end
+EOF
+if test -z "`$F9X -g -c conftest.f 2>&1`"; then
+  ac_cv_prog_f9x_g=yes
+else
+  ac_cv_prog_f9x_g=no
+fi
+rm -f conftest*
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_f9x_g" >&5
+echo "${ECHO_T}$ac_cv_prog_f9x_g" >&6
+  if test "$ac_test_FFLAGS" = set; then
+    FFLAGS="$ac_save_FFLAGS"
+  elif test $ac_cv_prog_f9x_g = yes; then
+    FFLAGS="-g -O2"
+  else
+    FFLAGS="-O2"
+  fi
+else
+  G9X=
+  test "${FFLAGS+set}" = set || FFLAGS="-g"
+fi
+
+echo "$as_me:$LINENO: checking what $F9X does with modules" >&5
+echo $ECHO_N "checking what $F9X does with modules... $ECHO_C" >&6
+
+
+ac_ext=f90
+ac_compile='${F9X-f90} -c $FFLAGS conftest.$ac_ext 1>&5'
+ac_link='${F9X-f90} -o conftest${ac_exeext} $FFLAGS conftest.$ac_ext $LDFLAGS $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_f9x_cross
+
+
+test -d conftestdir || mkdir conftestdir
+cd conftestdir
+rm -rf *
+
+cat >conftest.$ac_ext <<EOF
+      module module
+         integer foo
+      end module module
+EOF
+
+eval $ac_compile
+modfiles=""
+F9XMODEXT=""
+
+for f in conftest.o module.mod MODULE.mod module.M MODULE.M; do
+  if test -f "$f" ; then
+    modfiles="$f"
+
+    case "$f" in
+      *.o)   F9XMODEXT="o" ;;
+      *.mod) F9XMODEXT="mod" ;;
+      *.M)   F9XMODEXT="M" ;;
+    esac
+  fi
+done
+
+echo $modfiles 6>&1
+if test "$modfiles" = file.o; then
+  echo $ac_n "checking whether $F9X -em is saner""... $ac_c" 1>&6
+  OLD_FFLAGS=$FFLAGS
+  FFLAGS="$FFLAGS -em"
+  eval $ac_compile
+  modfiles=""
+  for f in file.o module.mod MODULE.mod module.M MODULE.M; do
+    test -f $f && modfiles="$f"
+  done
+  if test "$modfiles" = "file.o"; then
+    FFLAGS=$OLD_FFLAGS
+    echo no 6>&1
+  else
+    echo yes 6>&1
+  fi
+fi
+cd ..
+
+echo "$as_me:$LINENO: checking how $F9X finds modules" >&5
+echo $ECHO_N "checking how $F9X finds modules... $ECHO_C" >&6
+
+for flag in "-I" "-M" "-p"; do
+  cat >conftest.$ac_ext <<EOF
+      program conftest
+          use module
+      end program conftest
+EOF
+
+  ac_compile='${F9X-f90} $FFLAGS ${flag}conftestdir -c conftest.$ac_ext 1>&5'
+
+  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+    F9XMODFLAG=$flag
+    break
+  fi
+done
+
+if test -n "$F9XMODFLAG"; then
+  echo $F9XMODFLAG 1>&6
+#  FFLAGS="$F9XMODFLAG. $F9XMODFLAG../src $FFLAGS"
+  FFLAGS="$F9XMODFLAG. $FFLAGS"
+else
+  echo unknown 1>&6
+fi
+
+
+rm -rf conftest*
+
+
+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
+
+
+
+
+# Check whether --with-zlib or --without-zlib was given.
+if test "${with_zlib+set}" = set; then
+  withval="$with_zlib"
+
+else
+  withval=yes
+fi;
+
+case $withval in
+  yes)
+    HAVE_ZLIB="yes"
+
+for ac_header in zlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ HAVE_ZLIB_H="yes"
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for compress2 in -lz" >&5
+echo $ECHO_N "checking for compress2 in -lz... $ECHO_C" >&6
+if test "${ac_cv_lib_z_compress2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char compress2 ();
+int
+main ()
+{
+compress2 ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_z_compress2=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_z_compress2=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_z_compress2" >&5
+echo "${ECHO_T}$ac_cv_lib_z_compress2" >&6
+if test $ac_cv_lib_z_compress2 = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBZ 1
+_ACEOF
+
+  LIBS="-lz $LIBS"
+
+else
+  unset HAVE_ZLIB
+fi
+
+    echo "$as_me:$LINENO: checking for compress2" >&5
+echo $ECHO_N "checking for compress2... $ECHO_C" >&6
+if test "${ac_cv_func_compress2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define compress2 to an innocuous variant, in case <limits.h> declares compress2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define compress2 innocuous_compress2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char compress2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef compress2
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char compress2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_compress2) || defined (__stub___compress2)
+choke me
+#else
+char (*f) () = compress2;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != compress2;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_compress2=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_compress2=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_compress2" >&5
+echo "${ECHO_T}$ac_cv_func_compress2" >&6
+if test $ac_cv_func_compress2 = yes; then
+  HAVE_COMPRESS2="yes"
+fi
+
+
+    if test -z "$HAVE_ZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      { { echo "$as_me:$LINENO: error: couldn't find zlib library" >&5
+echo "$as_me: error: couldn't find zlib library" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    ;;
+  no)
+    HAVE_ZLIB="no"
+    echo "$as_me:$LINENO: checking for GNU zlib" >&5
+echo $ECHO_N "checking for GNU zlib... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+    ;;
+  *)
+    HAVE_ZLIB="yes"
+    case "$withval" in
+      *,*)
+        zlib_inc="`echo $withval |cut -f1 -d,`"
+        zlib_lib="`echo $withval |cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          zlib_inc="$withval/include"
+          zlib_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+            if test "X$zlib_inc" = "X/usr/include"; then
+      zlib_inc=""
+    fi
+    if test "X$zlib_lib" = "X/usr/lib"; then
+      zlib_lib=""
+    fi
+
+    saved_CPPFLAGS="$CPPFLAGS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    if test -n "$zlib_inc"; then
+      CPPFLAGS="$CPPFLAGS -I$zlib_inc"
+    fi
+
+
+for ac_header in zlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ HAVE_ZLIB_H="yes"
+else
+  CPPFLAGS="$saved_CPPFLAGS"
+fi
+
+done
+
+
+    if test -n "$zlib_lib"; then
+      LDFLAGS="$LDFLAGS -L$zlib_lib"
+    fi
+
+
+echo "$as_me:$LINENO: checking for compress2 in -lz" >&5
+echo $ECHO_N "checking for compress2 in -lz... $ECHO_C" >&6
+if test "${ac_cv_lib_z_compress2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char compress2 ();
+int
+main ()
+{
+compress2 ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_z_compress2=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_z_compress2=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_z_compress2" >&5
+echo "${ECHO_T}$ac_cv_lib_z_compress2" >&6
+if test $ac_cv_lib_z_compress2 = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBZ 1
+_ACEOF
+
+  LIBS="-lz $LIBS"
+
+else
+  LDFLAGS="$saved_LDFLAGS"; unset HAVE_ZLIB
+fi
+
+    echo "$as_me:$LINENO: checking for compress2" >&5
+echo $ECHO_N "checking for compress2... $ECHO_C" >&6
+if test "${ac_cv_func_compress2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define compress2 to an innocuous variant, in case <limits.h> declares compress2.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define compress2 innocuous_compress2
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char compress2 (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef compress2
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char compress2 ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_compress2) || defined (__stub___compress2)
+choke me
+#else
+char (*f) () = compress2;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != compress2;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_compress2=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_func_compress2=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_func_compress2" >&5
+echo "${ECHO_T}$ac_cv_func_compress2" >&6
+if test $ac_cv_func_compress2 = yes; then
+  HAVE_COMPRESS2="yes"
+fi
+
+
+    if test -z "$HAVE_ZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      { { echo "$as_me:$LINENO: error: couldn't find zlib library" >&5
+echo "$as_me: error: couldn't find zlib library" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    ;;
+esac
+
+if test "x$HAVE_ZLIB" = "xyes" -a "x$HAVE_ZLIB_H" = "xyes" -a "x$HAVE_COMPRESS2" = "xyes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FILTER_DEFLATE 1
+_ACEOF
+
+fi
+
+
+# Check whether --with-szlib or --without-szlib was given.
+if test "${with_szlib+set}" = set; then
+  withval="$with_szlib"
+
+else
+  withval=yes
+fi;
+
+case $withval in
+  yes)
+    HAVE_SZLIB="yes"
+
+for ac_header in szlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ HAVE_SZLIB_H="yes"
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for SZ_BufftoBuffCompress in -lsz" >&5
+echo $ECHO_N "checking for SZ_BufftoBuffCompress in -lsz... $ECHO_C" >&6
+if test "${ac_cv_lib_sz_SZ_BufftoBuffCompress+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char SZ_BufftoBuffCompress ();
+int
+main ()
+{
+SZ_BufftoBuffCompress ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_sz_SZ_BufftoBuffCompress=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_sz_SZ_BufftoBuffCompress=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_sz_SZ_BufftoBuffCompress" >&5
+echo "${ECHO_T}$ac_cv_lib_sz_SZ_BufftoBuffCompress" >&6
+if test $ac_cv_lib_sz_SZ_BufftoBuffCompress = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSZ 1
+_ACEOF
+
+  LIBS="-lsz $LIBS"
+
+else
+  unset HAVE_SZLIB
+fi
+
+
+    if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      { { echo "$as_me:$LINENO: error: couldn't find szlib library" >&5
+echo "$as_me: error: couldn't find szlib library" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    ;;
+  no)
+    HAVE_SZLIB="no"
+    echo "$as_me:$LINENO: checking for szlib" >&5
+echo $ECHO_N "checking for szlib... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+    ;;
+  *)
+    HAVE_SZLIB="yes"
+    case "$withval" in
+      *,*)
+        szlib_inc="`echo $withval |cut -f1 -d,`"
+        szlib_lib="`echo $withval |cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          szlib_inc="$withval/include"
+          szlib_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+            if test "X$szlib_inc" = "X/usr/include"; then
+      szlib_inc=""
+    fi
+    if test "X$szlib_lib" = "X/usr/lib"; then
+      szlib_lib=""
+    fi
+
+    saved_CPPFLAGS="$CPPFLAGS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    if test -n "$szlib_inc"; then
+      CPPFLAGS="$CPPFLAGS -I$szlib_inc"
+    fi
+
+
+for ac_header in szlib.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ HAVE_SZLIB_H="yes"
+else
+  CPPFLAGS="$saved_CPPFLAGS"
+fi
+
+done
+
+
+    if test -n "$szlib_lib"; then
+      LDFLAGS="$LDFLAGS -L$szlib_lib"
+    fi
+
+
+echo "$as_me:$LINENO: checking for SZ_BufftoBuffCompress in -lsz" >&5
+echo $ECHO_N "checking for SZ_BufftoBuffCompress in -lsz... $ECHO_C" >&6
+if test "${ac_cv_lib_sz_SZ_BufftoBuffCompress+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsz  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char SZ_BufftoBuffCompress ();
+int
+main ()
+{
+SZ_BufftoBuffCompress ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_sz_SZ_BufftoBuffCompress=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_sz_SZ_BufftoBuffCompress=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_sz_SZ_BufftoBuffCompress" >&5
+echo "${ECHO_T}$ac_cv_lib_sz_SZ_BufftoBuffCompress" >&6
+if test $ac_cv_lib_sz_SZ_BufftoBuffCompress = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBSZ 1
+_ACEOF
+
+  LIBS="-lsz $LIBS"
+
+else
+  LDFLAGS="$saved_LDFLAGS"; unset HAVE_SZLIB
+fi
+
+
+    if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      { { echo "$as_me:$LINENO: error: couldn't find szlib library" >&5
+echo "$as_me: error: couldn't find szlib library" >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+    ;;
+esac
+
+if test "x$HAVE_SZLIB" = "xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FILTER_SZIP 1
+_ACEOF
+
+fi
+
+echo "$as_me:$LINENO: checking for Stream Virtual File Driver support" >&5
+echo $ECHO_N "checking for Stream Virtual File Driver support... $ECHO_C" >&6
+# Check whether --enable-stream-vfd or --disable-stream-vfd was given.
+if test "${enable_stream_vfd+set}" = set; then
+  enableval="$enable_stream_vfd"
+  STREAM_VFD=$enableval
+fi;
+
+if test "$STREAM_VFD" = "yes"; then
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+
+
+for ac_header in netinet/tcp.h sys/filio.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STREAM 1
+_ACEOF
+
+
+    echo "$as_me:$LINENO: checking if socklen_t is defined" >&5
+echo $ECHO_N "checking if socklen_t is defined... $ECHO_C" >&6
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
+int
+main ()
+{
+socklen_t foo; return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_SOCKLEN_T 1
+_ACEOF
+
+    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  echo "$as_me:$LINENO: result: not configured" >&5
+echo "${ECHO_T}not configured" >&6
+fi
+
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+ac_ext=f90
+ac_compile='${F9X-f90} -c $FFLAGS conftest.$ac_ext 1>&5'
+ac_link='${F9X-f90} -o conftest${ac_exeext} $FFLAGS conftest.$ac_ext $LDFLAGS $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_f9x_cross
+
+
+FFLAGS_saved=$FFLAGS
+FFLAGS="$FFLAGS -I."
+
+echo "$as_me:$LINENO: checking if compiler supports -I. option" >&5
+echo $ECHO_N "checking if compiler supports -I. option... $ECHO_C" >&6
+
+
+ac_ext=f90
+ac_compile='${F9X-f90} -c $FFLAGS conftest.$ac_ext 1>&5'
+ac_link='${F9X-f90} -o conftest${ac_exeext} $FFLAGS conftest.$ac_ext $LDFLAGS $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_f9x_cross
+
+
+test -d conftestdir || mkdir conftestdir
+cd conftestdir
+rm -rf *
+
+cat >conftest.$ac_ext <<EOF
+
+      program conftest
+      end
+
+EOF
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  :
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  :
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+   FFLAGS="$FFLAGS_saved"
+fi
+cd ..
+rm -rf conftest*
+
+
+
+
+
+
+
+case "$F9X" in
+  *mpif90*)
+            PARALLEL=mpif90
+    echo "$as_me:$LINENO: checking for mpirun" >&5
+echo $ECHO_N "checking for mpirun... $ECHO_C" >&6
+
+        cmd=`echo $F9X |cut -f1 -d' '`
+    if (echo $cmd |grep / >/dev/null); then
+      path="`echo $cmd |sed 's/\(.*\)\/.*$/\1/'`"
+    else
+      for path in `echo $PATH |tr : ' '`; do
+        if test -x $path/$cmd; then
+          break;
+        fi
+      done
+    fi
+
+        if test -x $path/mpirun; then
+      echo "$as_me:$LINENO: result: $path/mpirun" >&5
+echo "${ECHO_T}$path/mpirun" >&6
+      RUNSERIAL="${RUNSERIAL:-none}"
+
+      if test -z "$RUNPARALLEL"; then
+        RUNPARALLEL="$path/mpirun -np \$\${NPROCS:=2}"
+      fi
+    else
+      echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+    fi
+    ;;
+
+  *mpxlf* | *mpxlf_r* | *mpxlf90* | *mpxlf90_r* | *mpxlf95* | *mpxlf95_r*)
+        PARALLEL="$F9X"
+    ;;
+
+  *)
+            ;;
+esac
+
+echo "$as_me:$LINENO: checking for I/O filters" >&5
+echo $ECHO_N "checking for I/O filters... $ECHO_C" >&6
+# Check whether --enable-filters or --disable-filters was given.
+if test "${enable_filters+set}" = set; then
+  enableval="$enable_filters"
+  FILTERS=$enableval
+fi;
+
+
+all_filters="shuffle,fletcher32"
+case "X-$FILTERS" in
+  X-|X-all)
+    FILTERS=$all_filters
+    echo "$as_me:$LINENO: result: all ($FILTERS)" >&5
+echo "${ECHO_T}all ($FILTERS)" >&6
+    ;;
+  X-no|X-none)
+    echo "$as_me:$LINENO: result: none" >&5
+echo "${ECHO_T}none" >&6
+    FILTERS="none"
+    ;;
+  *)
+    echo "$as_me:$LINENO: result: $FILTERS" >&5
+echo "${ECHO_T}$FILTERS" >&6
+    ;;
+esac
+
+if test -n "$FILTERS"; then
+  for filter in `echo $FILTERS | tr 'a-z,' 'A-Z '`; do
+    if test $filter = "SHUFFLE"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FILTER_SHUFFLE 1
+_ACEOF
+
+    fi
+    if test $filter = "FLETCHER32"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_FILTER_FLETCHER32 1
+_ACEOF
+
+    fi
+  done
+fi
+
+# Check whether --enable-parallel or --disable-parallel was given.
+if test "${enable_parallel+set}" = set; then
+  enableval="$enable_parallel"
+
+fi;
+
+echo "$as_me:$LINENO: checking for parallel support files" >&5
+echo $ECHO_N "checking for parallel support files... $ECHO_C" >&6
+case "X-$enable_parallel" in
+  X-|X-no|X-none)
+                echo "$as_me:$LINENO: result: skipped" >&5
+echo "${ECHO_T}skipped" >&6
+    ;;
+
+  X-yes)
+            echo "$as_me:$LINENO: result: provided by compiler" >&5
+echo "${ECHO_T}provided by compiler" >&6
+    PARALLEL=yes
+
+
+
+ac_ext=f90
+ac_compile='${F9X-f90} -c $FFLAGS conftest.$ac_ext 1>&5'
+ac_link='${F9X-f90} -o conftest${ac_exeext} $FFLAGS conftest.$ac_ext $LDFLAGS $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_f9x_cross
+
+
+test -d conftestdir || mkdir conftestdir
+cd conftestdir
+rm -rf *
+
+cat >conftest.$ac_ext <<EOF
+        program conftest
+          include 'mpif.h'
+
+        integer:: ierr
+        call mpi_file_open( ierr )
+        end
+EOF
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  :
+
+else
+  :
+
+
+ac_ext=f90
+ac_compile='${F9X-f90} -c $FFLAGS conftest.$ac_ext 1>&5'
+ac_link='${F9X-f90} -o conftest${ac_exeext} $FFLAGS conftest.$ac_ext $LDFLAGS $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_f9x_cross
+
+
+test -d conftestdir || mkdir conftestdir
+cd conftestdir
+rm -rf *
+
+cat >conftest.$ac_ext <<EOF
+        program conftest
+
+          include 'mpif.h'
+          integer:: ierr
+          call mpi_file_open( ierr )
+        end
+EOF
+
+if test -n "mpi"; then
+  saved_LIBS="$LIBS"
+  LIBS="$LIBS -lmpi"
+fi
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  :
+
+else
+  LIBS="$saved_LIBS"
+  PARALLEL=no
+fi
+cd ..
+rm -rf conftest*
+
+fi
+cd ..
+rm -rf conftest*
+
+
+            if test "X$PARALLEL" = "Xyes"; then
+
+
+ac_ext=f90
+ac_compile='${F9X-f90} -c $FFLAGS conftest.$ac_ext 1>&5'
+ac_link='${F9X-f90} -o conftest${ac_exeext} $FFLAGS conftest.$ac_ext $LDFLAGS $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_f9x_cross
+
+
+test -d conftestdir || mkdir conftestdir
+cd conftestdir
+rm -rf *
+
+cat >conftest.$ac_ext <<EOF
+        program conftest
+          include 'mpif.h'
+
+          integer:: ierr
+          call mpi_file_open( ierr )
+        end
+EOF
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  :
+
+else
+  :
+
+
+ac_ext=f90
+ac_compile='${F9X-f90} -c $FFLAGS conftest.$ac_ext 1>&5'
+ac_link='${F9X-f90} -o conftest${ac_exeext} $FFLAGS conftest.$ac_ext $LDFLAGS $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_f9x_cross
+
+
+test -d conftestdir || mkdir conftestdir
+cd conftestdir
+rm -rf *
+
+cat >conftest.$ac_ext <<EOF
+        program conftest
+
+            include 'mpif.h'
+            integer:: ierr
+            call mpi_file_open( ierr )
+        end
+EOF
+
+if test -n "mpio"; then
+  saved_LIBS="$LIBS"
+  LIBS="$LIBS -lmpio"
+fi
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  :
+
+else
+  LIBS="$saved_LIBS"
+  PARALLEL=no
+fi
+cd ..
+rm -rf conftest*
+
+fi
+cd ..
+rm -rf conftest*
+
+    fi
+
+        if test "X$PARALLEL" = "Xyes" && test -z "$RUNPARALLEL"; then
+      RUNPARALLEL="mpirun -np \$\${NPROCS:=2}"
+    fi
+    ;;
+
+  *)
+    echo "$as_me:$LINENO: result: error" >&5
+echo "${ECHO_T}error" >&6
+    { { echo "$as_me:$LINENO: error: \'$enable_parallel\' is not a valid parallel search type" >&5
+echo "$as_me: error: \'$enable_parallel\' is not a valid parallel search type" >&2;}
+   { (exit 1); exit 1; }; }
+    ;;
+esac
+
+if test -n "$PARALLEL"; then
+  TESTPARALLEL=testpar
+fi
+
+ADD_PARALLEL_FILES="no"
+if test -n "$PARALLEL"; then
+    echo "$as_me:$LINENO: checking prefix for running on one processor" >&5
+echo $ECHO_N "checking prefix for running on one processor... $ECHO_C" >&6
+  echo "$as_me:$LINENO: result: $RUNSERIAL" >&5
+echo "${ECHO_T}$RUNSERIAL" >&6
+  echo "$as_me:$LINENO: checking prefix for running in parallel" >&5
+echo $ECHO_N "checking prefix for running in parallel... $ECHO_C" >&6
+  echo "$as_me:$LINENO: result: $RUNPARALLEL" >&5
+echo "${ECHO_T}$RUNPARALLEL" >&6
+
+    echo "$as_me:$LINENO: checking whether a simple MPI-IO program can be linked" >&5
+echo $ECHO_N "checking whether a simple MPI-IO program can be linked... $ECHO_C" >&6
+
+
+ac_ext=f90
+ac_compile='${F9X-f90} -c $FFLAGS conftest.$ac_ext 1>&5'
+ac_link='${F9X-f90} -o conftest${ac_exeext} $FFLAGS conftest.$ac_ext $LDFLAGS $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_f9x_cross
+
+
+test -d conftestdir || mkdir conftestdir
+cd conftestdir
+rm -rf *
+
+cat >conftest.$ac_ext <<EOF
+        program conftest
+          include 'mpif.h'
+
+      integer:: ierr
+      call mpi_file_open( ierr )
+        end
+EOF
+
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  :
+  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  :
+  echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+            { { echo "$as_me:$LINENO: error: 'unable to link a simple MPI-IO application'" >&5
+echo "$as_me: error: 'unable to link a simple MPI-IO application'" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+cd ..
+rm -rf conftest*
+
+
+      if test -z "$RUNPARALLEL"; then
+    { { echo "$as_me:$LINENO: error: no way to run a parallel program" >&5
+echo "$as_me: error: no way to run a parallel program" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+
+      if test "X$RUNSERIAL" = "Xnone"; then
+    RUNSERIAL=
+  fi
+  if test "X$RUNPARALLEL" = "Xnone"; then
+    RUNPARALLEL=
+  fi
+
+  ADD_PARALLEL_FILES="yes"
+
+  echo "$as_me:$LINENO: checking for MPI_Comm_c2f and MPI_Comm_f2c functions" >&5
+echo $ECHO_N "checking for MPI_Comm_c2f and MPI_Comm_f2c functions... $ECHO_C" >&6
+
+    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
+
+
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <mpi.h>
+
+int
+main ()
+{
+MPI_Comm c_comm; MPI_Comm_c2f(c_comm)
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MPI_MULTI_LANG_Comm 1
+_ACEOF
+
+    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+
+  echo "$as_me:$LINENO: checking for MPI_Info_c2f and MPI_Info_f2c functions" >&5
+echo $ECHO_N "checking for MPI_Info_c2f and MPI_Info_f2c functions... $ECHO_C" >&6
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <mpi.h>
+
+int
+main ()
+{
+MPI_Info c_info; MPI_Info_c2f(c_info)
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MPI_MULTI_LANG_Info 1
+_ACEOF
+
+    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+
+                 MPE=yes
+
+# Check whether --with-mpe or --without-mpe was given.
+if test "${with_mpe+set}" = set; then
+  withval="$with_mpe"
+
+else
+  withval=no
+fi;
+
+  case "X-$withval" in
+    X-|X-no|X-none)
+      echo "$as_me:$LINENO: checking for MPE" >&5
+echo $ECHO_N "checking for MPE... $ECHO_C" >&6
+      echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+      unset MPE
+      ;;
+    X-yes)
+
+for ac_header in mpe.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  unset MPE
+fi
+
+done
+
+
+echo "$as_me:$LINENO: checking for MPE_Init_log in -lmpe" >&5
+echo $ECHO_N "checking for MPE_Init_log in -lmpe... $ECHO_C" >&6
+if test "${ac_cv_lib_mpe_MPE_Init_log+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmpe  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char MPE_Init_log ();
+int
+main ()
+{
+MPE_Init_log ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_mpe_MPE_Init_log=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_mpe_MPE_Init_log=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_mpe_MPE_Init_log" >&5
+echo "${ECHO_T}$ac_cv_lib_mpe_MPE_Init_log" >&6
+if test $ac_cv_lib_mpe_MPE_Init_log = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMPE 1
+_ACEOF
+
+  LIBS="-lmpe $LIBS"
+
+else
+  unset MPE
+fi
+
+
+echo "$as_me:$LINENO: checking for CLOG_Init in -llmpe" >&5
+echo $ECHO_N "checking for CLOG_Init in -llmpe... $ECHO_C" >&6
+if test "${ac_cv_lib_lmpe_CLOG_Init+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-llmpe  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char CLOG_Init ();
+int
+main ()
+{
+CLOG_Init ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_lmpe_CLOG_Init=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_lmpe_CLOG_Init=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_lmpe_CLOG_Init" >&5
+echo "${ECHO_T}$ac_cv_lib_lmpe_CLOG_Init" >&6
+if test $ac_cv_lib_lmpe_CLOG_Init = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBLMPE 1
+_ACEOF
+
+  LIBS="-llmpe $LIBS"
+
+else
+  unset MPE
+fi
+
+      ;;
+    *)
+      case "$withval" in
+        *,*)
+          mpe_inc="`echo $withval | cut -f1 -d,`"
+          mpe_lib="`echo $withval | cut -f2 -d, -s`"
+          ;;
+        *)
+          if test -n "$withval"; then
+            mpe_inc="$withval/include"
+            mpe_lib="$withval/lib"
+          fi
+          ;;
+      esac
+
+                  if test "X$mpe_inc" = "X/usr/include"; then
+        mpe_inc=""
+      fi
+      if test "X$mpe_lib" = "X/usr/lib"; then
+        mpe_lib=""
+      fi
+
+      if test -n "$mpe_inc"; then
+        saved_CPPFLAGS="$CPPFLAGS"
+        CPPFLAGS="$CPPFLAGS -I$mpe_inc"
+
+for ac_header in mpe.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  CPPFLAGS="$saved_CPPFLAGS"; unset MPE
+fi
+
+done
+
+      else
+
+for ac_header in mpe.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+else
+  unset MPE
+fi
+
+done
+
+      fi
+
+      if test -n "$mpe_lib"; then
+        saved_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -L$mpe_lib"
+
+echo "$as_me:$LINENO: checking for MPE_Init_log in -lmpe" >&5
+echo $ECHO_N "checking for MPE_Init_log in -lmpe... $ECHO_C" >&6
+if test "${ac_cv_lib_mpe_MPE_Init_log+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmpe  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char MPE_Init_log ();
+int
+main ()
+{
+MPE_Init_log ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_mpe_MPE_Init_log=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_mpe_MPE_Init_log=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_mpe_MPE_Init_log" >&5
+echo "${ECHO_T}$ac_cv_lib_mpe_MPE_Init_log" >&6
+if test $ac_cv_lib_mpe_MPE_Init_log = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMPE 1
+_ACEOF
+
+  LIBS="-lmpe $LIBS"
+
+else
+  LDFLAGS="$saved_LDFLAGS"; unset MPE
+fi
+
+
+echo "$as_me:$LINENO: checking for CLOG_Init in -llmpe" >&5
+echo $ECHO_N "checking for CLOG_Init in -llmpe... $ECHO_C" >&6
+if test "${ac_cv_lib_lmpe_CLOG_Init+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-llmpe  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char CLOG_Init ();
+int
+main ()
+{
+CLOG_Init ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_lmpe_CLOG_Init=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_lmpe_CLOG_Init=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_lmpe_CLOG_Init" >&5
+echo "${ECHO_T}$ac_cv_lib_lmpe_CLOG_Init" >&6
+if test $ac_cv_lib_lmpe_CLOG_Init = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBLMPE 1
+_ACEOF
+
+  LIBS="-llmpe $LIBS"
+
+else
+  LDFLAGS="$saved_LDFLAGS"; unset MPE
+fi
+
+      else
+
+echo "$as_me:$LINENO: checking for MPE_Init_log in -lmpe" >&5
+echo $ECHO_N "checking for MPE_Init_log in -lmpe... $ECHO_C" >&6
+if test "${ac_cv_lib_mpe_MPE_Init_log+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lmpe  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char MPE_Init_log ();
+int
+main ()
+{
+MPE_Init_log ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_mpe_MPE_Init_log=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_mpe_MPE_Init_log=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_mpe_MPE_Init_log" >&5
+echo "${ECHO_T}$ac_cv_lib_mpe_MPE_Init_log" >&6
+if test $ac_cv_lib_mpe_MPE_Init_log = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBMPE 1
+_ACEOF
+
+  LIBS="-lmpe $LIBS"
+
+else
+  unset MPE
+fi
+
+
+echo "$as_me:$LINENO: checking for CLOG_Init in -llmpe" >&5
+echo $ECHO_N "checking for CLOG_Init in -llmpe... $ECHO_C" >&6
+if test "${ac_cv_lib_lmpe_CLOG_Init+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-llmpe  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char CLOG_Init ();
+int
+main ()
+{
+CLOG_Init ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_lib_lmpe_CLOG_Init=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_lib_lmpe_CLOG_Init=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+echo "$as_me:$LINENO: result: $ac_cv_lib_lmpe_CLOG_Init" >&5
+echo "${ECHO_T}$ac_cv_lib_lmpe_CLOG_Init" >&6
+if test $ac_cv_lib_lmpe_CLOG_Init = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBLMPE 1
+_ACEOF
+
+  LIBS="-llmpe $LIBS"
+
+else
+  unset MPE
+fi
+
+      fi
+      ;;
+  esac
+
+    ac_ext=f90
+ac_compile='${F9X-f90} -c $FFLAGS conftest.$ac_ext 1>&5'
+ac_link='${F9X-f90} -o conftest${ac_exeext} $FFLAGS conftest.$ac_ext $LDFLAGS $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_f9x_cross
+
+fi
+
+
+echo "$as_me:$LINENO: checking make" >&5
+echo $ECHO_N "checking make... $ECHO_C" >&6
+
+if test "`${MAKE-make} --version -f /dev/null 2>/dev/null |\
+      sed -n 1p|cut -c1-8`" = "GNU Make"; then
+  echo "$as_me:$LINENO: result: GNU make" >&5
+echo "${ECHO_T}GNU make" >&6
+  GMAKE=yes
+  if test "X$GCC" = "Xyes"; then
+    DEPEND=config/depend1
+  else
+    DEPEND=config/depend2
+  fi
+else
+  echo "$as_me:$LINENO: result: generic" >&5
+echo "${ECHO_T}generic" >&6
+fi
+
+if test -z "$DEPEND"; then
+  echo "$as_me:$LINENO: checking how to include a makefile" >&5
+echo $ECHO_N "checking how to include a makefile... $ECHO_C" >&6
+
+    cat >makeinc <<EOF
+foo:
+	@:
+EOF
+
+  while true; do             echo '.include <makeinc>' >maketest
+    if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      echo "$as_me:$LINENO: result: .include <FILE>" >&5
+echo "${ECHO_T}.include <FILE>" >&6
+      DEPEND=config/depend3
+      break
+    fi
+
+        echo 'include makeinc' >maketest
+    if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      echo "$as_me:$LINENO: result: include FILE" >&5
+echo "${ECHO_T}include FILE" >&6
+      DEPEND=config/depend4
+      break;
+    fi
+
+        echo "$as_me:$LINENO: result: you have a deficient make command" >&5
+echo "${ECHO_T}you have a deficient make command" >&6
+    DEPEND=config/dependN
+    break
+  done
+  rm makeinc maketest
+fi
+
+# Check whether --enable-gpfs or --disable-gpfs was given.
+if test "${enable_gpfs+set}" = set; then
+  enableval="$enable_gpfs"
+
+else
+  enableval=no
+fi;
+
+case "X-$enableval" in
+  X-yes)
+        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
+
+
+
+for ac_header in gpfs.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+else
+  # Is the header compilable?
+echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_header_compiler=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6
+
+# Is the header present?
+echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5
+  (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_err"; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+rm -f conftest.err conftest.$ac_ext
+echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    (
+      cat <<\_ASBOX
+## ------------------------------------ ##
+## Report this to hdfhelp at ncsa.uiuc.edu ##
+## ------------------------------------ ##
+_ASBOX
+    ) |
+      sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+ echo "$as_me:$LINENO: checking for GPFS support" >&5
+echo $ECHO_N "checking for GPFS support... $ECHO_C" >&6
+                     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <gpfs.h>
+int
+main ()
+{
+int fd = 0; gpfs_fcntl(fd, (void *)0);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"
+			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GPFS 1
+_ACEOF
+
+                                    echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+                                    LIBS="$LIBS -lgpfs"
+                                    GPFS="yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+                                    GPFS="no"
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+done
+
+
+        ac_ext=f90
+ac_compile='${F9X-f90} -c $FFLAGS conftest.$ac_ext 1>&5'
+ac_link='${F9X-f90} -o conftest${ac_exeext} $FFLAGS conftest.$ac_ext $LDFLAGS $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_f9x_cross
+
+    ;;
+  X-no|*)
+    echo "$as_me:$LINENO: checking for gpfs" >&5
+echo $ECHO_N "checking for gpfs... $ECHO_C" >&6
+    echo "$as_me:$LINENO: result: suppressed" >&5
+echo "${ECHO_T}suppressed" >&6
+    ;;
+esac
+
+rm -f conftest core core.* *.core conftest.o conftest.c dummy.o $ac_clean_files
+
+
+H5_VERSION="`cut -d' ' -f3 $srcdir/../README.txt | head -1`"
+
+
+ CONFIG_DATE="`date`"
+
+ CONFIG_USER="`whoami`@`hostname`"
+if test -n "$ORGANIZATION"; then
+  CONFIG_USER="$CONFIG_USER at $ORGANIZATION"
+fi
+
+
+
+
+if test "X$ac_cv_c_bigendian" = "Xyes"; then
+  BYTESEX="big-endian"
+else
+  BYTESEX="little-endian"
+fi
+
+PARALLEL=${PARALLEL:-no}
+
+
+if `echo $CC | grep / 2>&1 /dev/null`; then
+  CC_VERSION="$CC"
+else
+  CC_VERSION="$CC";
+  for x in `echo $PATH | sed -e 's/:/ /g'`; do
+    if test -x $x/$CC; then
+      CC_VERSION="$x/$CC"
+      break
+    fi
+  done
+fi
+if test -n "$cc_vendor" && test -n "$cc_version"; then
+  CC_VERSION="$CC_VERSION ($cc_vendor-$cc_version)"
+fi
+
+
+if `echo $F9X | grep / 2>&1 /dev/null`; then
+  FC_VERSION="$F9X"
+else
+  FC_VERSION="$F9X";
+  for x in `echo $PATH | sed -e 's/:/ /g'`; do
+    if test -x $x/$F9X; then
+      FC_VERSION="$x/$F9X"
+      break
+    fi
+  done
+fi
+
+ DYNAMIC_DIRS=""
+if test -n "$LDFLAGS"; then
+  for d in $LDFLAGS ; do
+    case "$d" in
+      -L*)
+        d=`echo $d | sed -e 's/-L//g'`
+        case "$d" in
+          .*)
+                                    d=${ROOT}/$d
+            ;;
+        esac
+        DYNAMIC_DIRS="-R${d} $DYNAMIC_DIRS"
+        ;;
+    esac
+  done
+fi
+
+ COMMENCE=config/commence
+ CONCLUDE=config/conclude
+
+if test -z "$SEARCH"; then
+   SEARCH='$(srcdir) $(top_builddir)/src $(top_srcdir)/src'
+  cmd='echo $SEARCH |sed "s/ /'$SEARCH_SEP'/g"'
+  SEARCH="$SEARCH_RULE`eval $cmd`"
+fi
+
+if test "X$GMAKE" = "Xyes"; then
+   SETX=":"
+else
+   SETX="set -x"
+fi
+
+rm -f conftest conftest.o conftest.c core core.* *.core dummy.o
+
+
+mkdir ./config >/dev/null 2>&1
+touch ./config/stamp1
+
+PARALLEL_MAKE=
+
+if test -n "$TESTPARALLEL"; then
+  PARALLEL_MAKE=$TESTPARALLEL/Makefile
+fi
+
+saved_no_create=$no_create
+no_create=yes
+                                                                                                                                                      ac_config_files="$ac_config_files config/depend1 config/depend2 config/depend3 config/depend4 config/dependN config/commence config/conclude Makefile src/h5fc src/H5fortran_types.f90 src/libhdf5_fortran.settings src/Makefile test/Makefile $PARALLEL_MAKE examples/Makefile"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;;
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     : end' >>confcache
+if diff $cache_file confcache >/dev/null 2>&1; then :; else
+  if test -w $cache_file; then
+    test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[	 ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[	 ]*$//;
+}'
+fi
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_i=`echo "$ac_i" |
+	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+  # 2. Add them.
+  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by HDF5 Fortran $as_me 1.6.5, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+		   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf at gnu.org>."
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+HDF5 Fortran config.status 1.6.5
+configured by $0, generated by GNU Autoconf 2.59,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+
+
+_ACEOF
+
+
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "config/depend1" ) CONFIG_FILES="$CONFIG_FILES config/depend1" ;;
+  "config/depend2" ) CONFIG_FILES="$CONFIG_FILES config/depend2" ;;
+  "config/depend3" ) CONFIG_FILES="$CONFIG_FILES config/depend3" ;;
+  "config/depend4" ) CONFIG_FILES="$CONFIG_FILES config/depend4" ;;
+  "config/dependN" ) CONFIG_FILES="$CONFIG_FILES config/dependN" ;;
+  "config/commence" ) CONFIG_FILES="$CONFIG_FILES config/commence" ;;
+  "config/conclude" ) CONFIG_FILES="$CONFIG_FILES config/conclude" ;;
+  "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+  "src/h5fc" ) CONFIG_FILES="$CONFIG_FILES src/h5fc" ;;
+  "src/H5fortran_types.f90" ) CONFIG_FILES="$CONFIG_FILES src/H5fortran_types.f90" ;;
+  "src/libhdf5_fortran.settings" ) CONFIG_FILES="$CONFIG_FILES src/libhdf5_fortran.settings" ;;
+  "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+  "test/Makefile" ) CONFIG_FILES="$CONFIG_FILES test/Makefile" ;;
+  "$PARALLEL_MAKE" ) CONFIG_FILES="$CONFIG_FILES $PARALLEL_MAKE" ;;
+  "examples/Makefile" ) CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;;
+  "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+  "src/H5config_fortran.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/H5config_fortran.h" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "\$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s, at SHELL@,$SHELL,;t t
+s, at PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s, at PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s, at PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s, at PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s, at PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s, at PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s, at exec_prefix@,$exec_prefix,;t t
+s, at prefix@,$prefix,;t t
+s, at program_transform_name@,$program_transform_name,;t t
+s, at bindir@,$bindir,;t t
+s, at sbindir@,$sbindir,;t t
+s, at libexecdir@,$libexecdir,;t t
+s, at datadir@,$datadir,;t t
+s, at sysconfdir@,$sysconfdir,;t t
+s, at sharedstatedir@,$sharedstatedir,;t t
+s, at localstatedir@,$localstatedir,;t t
+s, at libdir@,$libdir,;t t
+s, at includedir@,$includedir,;t t
+s, at oldincludedir@,$oldincludedir,;t t
+s, at infodir@,$infodir,;t t
+s, at mandir@,$mandir,;t t
+s, at build_alias@,$build_alias,;t t
+s, at host_alias@,$host_alias,;t t
+s, at target_alias@,$target_alias,;t t
+s, at DEFS@,$DEFS,;t t
+s, at ECHO_C@,$ECHO_C,;t t
+s, at ECHO_N@,$ECHO_N,;t t
+s, at ECHO_T@,$ECHO_T,;t t
+s, at LIBS@,$LIBS,;t t
+s, at build@,$build,;t t
+s, at build_cpu@,$build_cpu,;t t
+s, at build_vendor@,$build_vendor,;t t
+s, at build_os@,$build_os,;t t
+s, at host@,$host,;t t
+s, at host_cpu@,$host_cpu,;t t
+s, at host_vendor@,$host_vendor,;t t
+s, at host_os@,$host_os,;t t
+s, at CPPFLAGS@,$CPPFLAGS,;t t
+s, at FFLAGS@,$FFLAGS,;t t
+s, at FSEARCH_DIRS@,$FSEARCH_DIRS,;t t
+s, at H5_CPPFLAGS@,$H5_CPPFLAGS,;t t
+s, at H5_FFLAGS@,$H5_FFLAGS,;t t
+s, at H5_CFLAGS@,$H5_CFLAGS,;t t
+s, at R_LARGE@,$R_LARGE,;t t
+s, at R_INTEGER@,$R_INTEGER,;t t
+s, at HADDR_T@,$HADDR_T,;t t
+s, at HSIZE_T@,$HSIZE_T,;t t
+s, at HSSIZE_T@,$HSSIZE_T,;t t
+s, at HID_T@,$HID_T,;t t
+s, at SIZE_T@,$SIZE_T,;t t
+s, at OBJECT_NAMELEN_DEFAULT_F@,$OBJECT_NAMELEN_DEFAULT_F,;t t
+s, at ROOT@,$ROOT,;t t
+s, at F9XSUFFIXFLAG@,$F9XSUFFIXFLAG,;t t
+s, at CC@,$CC,;t t
+s, at CFLAGS@,$CFLAGS,;t t
+s, at LDFLAGS@,$LDFLAGS,;t t
+s, at ac_ct_CC@,$ac_ct_CC,;t t
+s, at EXEEXT@,$EXEEXT,;t t
+s, at OBJEXT@,$OBJEXT,;t t
+s, at CPP@,$CPP,;t t
+s, at SET_MAKE@,$SET_MAKE,;t t
+s, at INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s, at INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s, at INSTALL_DATA@,$INSTALL_DATA,;t t
+s, at LN_S@,$LN_S,;t t
+s, at ECHO@,$ECHO,;t t
+s, at RANLIB@,$RANLIB,;t t
+s, at ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s, at STRIP@,$STRIP,;t t
+s, at ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s, at EGREP@,$EGREP,;t t
+s, at LIBTOOL@,$LIBTOOL,;t t
+s, at PERL@,$PERL,;t t
+s, at AR@,$AR,;t t
+s, at LT_STATIC_EXEC@,$LT_STATIC_EXEC,;t t
+s, at F9X@,$F9X,;t t
+s, at F9XMODFLAG@,$F9XMODFLAG,;t t
+s, at F9XMODEXT@,$F9XMODEXT,;t t
+s, at PARALLEL@,$PARALLEL,;t t
+s, at RUNSERIAL@,$RUNSERIAL,;t t
+s, at RUNPARALLEL@,$RUNPARALLEL,;t t
+s, at TESTPARALLEL@,$TESTPARALLEL,;t t
+s, at FILTERS@,$FILTERS,;t t
+s, at MPE@,$MPE,;t t
+s, at ADD_PARALLEL_FILES@,$ADD_PARALLEL_FILES,;t t
+s, at H5_VERSION@,$H5_VERSION,;t t
+s, at CONFIG_DATE@,$CONFIG_DATE,;t t
+s, at CONFIG_USER@,$CONFIG_USER,;t t
+s, at CONFIG_MODE@,$CONFIG_MODE,;t t
+s, at BYTESEX@,$BYTESEX,;t t
+s, at CC_VERSION@,$CC_VERSION,;t t
+s, at FC_VERSION@,$FC_VERSION,;t t
+s, at DYNAMIC_DIRS@,$DYNAMIC_DIRS,;t t
+s, at SEARCH@,$SEARCH,;t t
+s, at SETX@,$SETX,;t t
+s, at LIBOBJS@,$LIBOBJS,;t t
+s, at LTLIBOBJS@,$LTLIBOBJS,;t t
+/@DEPEND@/r $DEPEND
+s, at DEPEND@,,;t t
+/@COMMENCE@/r $COMMENCE
+s, at COMMENCE@,,;t t
+/@CONCLUDE@/r $CONCLUDE
+s, at CONCLUDE@,,;t t
+CEOF
+
+_ACEOF
+
+  cat >>$CONFIG_STATUS <<\_ACEOF
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  esac
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+				     sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s, at configure_input@,$configure_input,;t t
+s, at srcdir@,$ac_srcdir,;t t
+s, at abs_srcdir@,$ac_abs_srcdir,;t t
+s, at top_srcdir@,$ac_top_srcdir,;t t
+s, at abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s, at builddir@,$ac_builddir,;t t
+s, at abs_builddir@,$ac_abs_builddir,;t t
+s, at top_builddir@,$ac_top_builddir,;t t
+s, at abs_top_builddir@,$ac_abs_top_builddir,;t t
+s, at INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
+ac_dB='[	 ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 # Do quote $f, to prevent DOS paths from being IFS'd.
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h.  The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status.  Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless.  Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo '  :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+  # Write a limited-size here document to $tmp/defines.sed.
+  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#define' lines.
+  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo '  fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+  # Write a limited-size here document to $tmp/undefs.sed.
+  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#undef'
+  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+  rm -f conftest.undefs
+  mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+      { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_dest" : 'X\(//\)[^/]' \| \
+	 X"$ac_dest" : 'X\(//\)$' \| \
+	 X"$ac_dest" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+  case $ac_dest in
+    default-1 )
+  echo "creating src/H5pubconf_fortran.h"
+  sed 's/PACKAGE/FORTRAN_PACKAGE/' < src/H5config_fortran.h |\
+    sed 's/#define /#define H5_/' |\
+    sed 's/#undef /#undef H5_/' > pubconf_fortran
+
+  if test ! -f src/H5pubconf_fortran.h; then
+    /bin/mv -f pubconf_fortran src/H5pubconf_fortran.h
+  elif (diff pubconf_fortran src/H5pubconf_fortran.h >/dev/null); then
+    /bin/rm -f pubconf_fortran
+    echo "src/H5pubconf_fortran.h is unchanged"
+  else
+    /bin/mv -f pubconf_fortran src/H5pubconf_fortran.h
+  fi
+ ;;
+  esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+no_create=$saved_no_create
+
+touch ./config/stamp2
+
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+chmod 755 src/h5fc
+
+if test -z "$ECHO_N" -o -z "$ECHO_C"; then
+  if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+    if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+      ECHO_N=''
+      ECHO_C='
+'
+    else
+      ECHO_N=-n
+      ECHO_C=''
+    fi
+  else
+    ECHO_N=''
+    ECHO_C='\c'
+  fi
+fi
+
+PRINT_PLAIN() {
+  echo $ECHO_N "$1$ECHO_C"
+  echo $ECHO_N "$1$ECHO_C" 1>>src/libhdf5_fortran.settings
+}
+
+PRINT_N() {
+  echo $ECHO_N "$1:  $ECHO_C"
+  echo $ECHO_N "$1:  $ECHO_C" 1>>src/libhdf5_fortran.settings
+}
+
+PRINT() {
+  echo "$1"
+  echo "$1" 1>>src/libhdf5_fortran.settings
+}
+
+IF_YES_NO() {
+  if test $# -lt 1; then
+    PRINT "No"
+    return
+  else
+    while test $# -gt 0; do
+      if test "$1" != "yes"; then
+        PRINT "No"
+        return
+      fi
+      shift
+    done
+  fi
+  PRINT "Yes"
+}
+
+IF_ENABLED_DISABLED() {
+  if test "$1" = "yes"; then
+    PRINT "Enabled"
+  else
+    PRINT "Disabled"
+  fi
+}
+
+PRINT "Fortran Configure Summary"
+PRINT "Compiling Options:"
+
+PRINT_N "               Fortran Compiler"
+PRINT "$F9X"
+
+PRINT_N "                         FFLAGS"
+PRINT "$FFLAGS"
+
+PRINT_N "                     C Compiler"
+PRINT "$CC"
+
+PRINT_N "                         CFLAGS"
+PRINT "$CFLAGS"
+
+PRINT_N "                       CPPFLAGS"
+PRINT "$CPPFLAGS"
+
+PRINT_N "                        LDFLAGS"
+PRINT "$LDFLAGS"
+
+PRINT "Features:"


Property changes on: packages/hdf5/branches/upstream/current/fortran/configure
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/fortran/configure.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/configure.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/configure.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1336 @@
+dnl Process this file with autoconf to produce configure.
+dnl
+dnl Copyright by the Board of Trustees of the University of Illinois.
+dnl All rights reserved.
+dnl
+dnl This file is part of HDF5.  The full HDF5 copyright notice, including
+dnl terms governing use, modification, and redistribution, is contained in
+dnl the files COPYING and Copyright.html.  COPYING can be found at the root
+dnl of the source code distribution tree; Copyright.html can be found at the
+dnl root level of an installed copy of the electronic HDF5 document set and
+dnl is linked from the top-level documents page.  It can also be found at
+dnl http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have
+dnl access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu.
+
+dnl ----------------------------------------------------------------------
+dnl Initialize configure.
+dnl
+AC_REVISION($Id: configure.in,v 1.82.2.107 2005/11/06 23:46:40 hdfadmin Exp $)
+
+dnl AC_INIT takes the name of the package, the version number, and an
+dnl email address to report bugs. AC_CONFIG_SRCDIR takes a unique file
+dnl as its argument.
+dnl
+dnl NOTE: Don't forget to change the version number here when we do a
+dnl release!!!
+dnl
+AC_INIT([HDF5 Fortran], [1.6.5], [hdfhelp at ncsa.uiuc.edu])
+AC_CONFIG_SRCDIR([src/HDF5.f90])
+AC_CONFIG_HEADER([src/H5config_fortran.h])
+
+AC_CONFIG_AUX_DIR([../bin])
+
+AC_OUTPUT_COMMANDS([
+  echo "creating src/H5pubconf_fortran.h"
+  sed 's/PACKAGE/FORTRAN_PACKAGE/' < src/H5config_fortran.h |\
+    sed 's/#define /#define H5_/' |\
+    sed 's/#undef /#undef H5_/' > pubconf_fortran
+
+  if test ! -f src/H5pubconf_fortran.h; then
+    /bin/mv -f pubconf_fortran src/H5pubconf_fortran.h
+  elif (diff pubconf_fortran src/H5pubconf_fortran.h >/dev/null); then
+    /bin/rm -f pubconf_fortran
+    echo "src/H5pubconf_fortran.h is unchanged"
+  else
+    /bin/mv -f pubconf_fortran src/H5pubconf_fortran.h
+  fi
+])
+
+AC_CANONICAL_HOST
+AC_SUBST(CPPFLAGS)
+AC_SUBST(FFLAGS)
+AC_SUBST(FSEARCH_DIRS)
+
+dnl These hold flags that we want to use while building HDF5, but which
+dnl the user might not want in h5fc. 
+AC_SUBST(H5_CPPFLAGS)
+AC_SUBST(H5_FFLAGS)
+AC_SUBST(H5_CFLAGS)
+
+dnl ----------------------------------------------------------------------
+dnl HDF5 integer variables for the H5fortran_types.f90 file.
+dnl
+AC_SUBST(R_LARGE)
+AC_SUBST(R_INTEGER)
+AC_SUBST(HADDR_T)
+AC_SUBST(HSIZE_T)
+AC_SUBST(HSSIZE_T)
+AC_SUBST(HID_T)
+AC_SUBST(SIZE_T)
+AC_SUBST(OBJECT_NAMELEN_DEFAULT_F)
+
+dnl ----------------------------------------------------------------------
+dnl Dump all shell variables values.
+dnl
+AC_MSG_CHECKING(shell variables initial values)
+set >&5
+AC_MSG_RESULT(done)
+
+dnl ----------------------------------------------------------------------
+dnl Where is the root of the source tree.  Give an absolute address so
+dnl we can find it no matter which directory of the distribution is our
+dnl current directory.  The built-in pwd fails on some systems, but the
+dnl /bin/pwd version works OK.
+dnl
+if test -x "/bin/pwd"; then
+   pwd=/bin/pwd
+else
+   pwd=pwd
+fi
+AC_SUBST(ROOT) ROOT=`$pwd`
+
+dnl ----------------------------------------------------------------------
+dnl Check that the cache file was build on the same host as what we're
+dnl running on now.
+dnl
+AC_CACHE_CHECK(for cached host,hdf5_cv_host,hdf5_cv_host="none");
+if test "X$hdf5_cv_host" = "Xnone"; then
+   hdf5_cv_host=$host
+elif test "$hdf5_cv_host" != "$host"; then
+   echo "The config.cache file was generated on $hdf5_cv_host but"
+   echo "this is $host. Please remove that file and try again."
+   AC_MSG_ERROR(config.cache file is invalid)
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Source any special files that we need.  These files normally aren't
+dnl present but can be used by the maintainers to fine tune things like
+dnl turning on debug or profiling flags for the compiler.  The search order
+dnl is:
+dnl
+dnl	CPU-VENDOR-OS
+dnl	VENDOR-OS
+dnl	CPU-OS
+dnl	CPU-VENDOR
+dnl	OS
+dnl	VENDOR
+dnl	CPU
+dnl
+dnl If the `OS' ends with a version number then remove it. For instance,
+dnl `freebsd3.1' would become `freebsd'
+case "$host_os" in
+   aix4.*)
+      host_os_novers=aix4.x
+      ;;
+   aix5.*)
+      host_os_novers=aix5.x
+      ;;
+   freebsd*)
+      host_os_novers=freebsd
+      ;;
+   irix5.*)
+      host_os_novers=irix5.x
+      ;;
+   irix6.*)
+      host_os_novers=irix6.x
+      ;;
+   osf4.*)
+      host_os_novers=osf4.x
+      ;;
+   osf5.*)
+      host_os_novers=osf5.x
+      ;;
+   solaris2.*)
+      host_os_novers=solaris2.x
+      ;;
+   *)
+      host_os_novers=$host_os
+      ;;
+esac
+
+host_config="none"
+for f in $host_cpu-$host_vendor-$host_os \
+   $host_cpu-$host_vendor-$host_os_novers \
+   $host_vendor-$host_os \
+   $host_vendor-$host_os_novers \
+   $host_cpu-$host_os \
+   $host_cpu-$host_os_novers \
+   $host_cpu-$host_vendor \
+   $host_os \
+   $host_os_novers \
+   $host_vendor \
+   $host_cpu ; do
+   AC_MSG_CHECKING(for config $f)
+   if test -f $srcdir/config/$f; then
+      host_config=$srcdir/config/$f
+      AC_MSG_RESULT(found)
+      break
+   fi
+   AC_MSG_RESULT(no)
+done
+if test "X$host_config" != "Xnone"; then
+   CC_BASENAME="`echo $CC |cut -f1 -d' ' |xargs basename 2>/dev/null`"
+   . $host_config
+fi
+
+AC_SUBST(F9XSUFFIXFLAG)
+
+dnl ----------------------------------------------------------------------
+dnl Check for programs.
+dnl
+AC_PROG_CC
+AC_PROG_CPP	dnl this is checked for when AC_HEADER_STDC is done
+CC_BASENAME="`echo $CC |cut -f1 -d' ' |xargs basename 2>/dev/null`"
+AC_PROG_MAKE_SET
+AC_PROG_INSTALL
+AM_PROG_LIBTOOL
+
+dnl ----------------------------------------------------------------------
+dnl Check if they have Perl installed on their system. We only need Perl
+dnl if they're using a GNU compiler.
+dnl
+AC_SUBST(PERL) PERL=""
+if test "X$GCC" = "Xyes"; then
+  AC_CHECK_PROGS(PERL, perl,, $PATH)
+fi
+
+if test -z "$AR"; then
+  AC_CHECK_PROGS(AR,ar xar,:,$PATH)
+fi
+AC_SUBST(AR)
+
+dnl ----------------------------------------------------------------------
+dnl Sometimes makes think the `.PATH:' appearing before the first rule
+dnl with an action should override the `all' default target. So we have
+dnl to decide what the proper syntax is.
+dnl
+if test -z "$SEARCH"; then
+  AC_MSG_CHECKING(how make searches directories)
+  while true; do #for break
+    dnl The most common method is `VPATH=DIR1 DIR2 ...'
+    cat >maketest <<EOF
+VPATH=$srcdir/config $srcdir/src $srcdir/bin
+.c.o:
+	cp $< H5_f.o
+   
+foo: H5_f.o
+	/bin/rm -f H5_f.o
+	@echo works
+EOF
+   
+    if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      SEARCH_RULE='VPATH='
+      SEARCH_SEP=' '
+      AC_MSG_RESULT([VPATH=DIR1 DIR2 ...])
+      break
+    fi
+   
+    dnl The second most common method is like above except with the
+    dnl directories separated by colons.
+    cat >maketest <<EOF
+VPATH=$srcdir/config:$srcdir/src:$srcdir/bin
+.c.o:
+	cp $< H5_f.o
+   
+foo: H5_f.o
+	/bin/rm -f H5_f.o
+	@echo works
+EOF
+   
+    if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      SEARCH_RULE='VPATH='
+      SEARCH_SEP=':'
+      AC_MSG_RESULT([VPATH=DIR1:DIR2:...])
+      break
+    fi
+   
+    dnl pmake uses the construct `.PATH: DIR1 DIR2
+    cat >maketest <<EOF
+.PATH: $srcdir/config $srcdir/src $srcdir/bin
+.c.o:
+	cp $< H5_f.o
+   
+foo: H5_f.o
+	/bin/rm -f H5_f.o
+	@echo works
+EOF
+
+    if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      SEARCH_RULE='.PATH: '
+      SEARCH_SEP=' '
+      AC_MSG_RESULT([.PATH: DIR1 DIR2 ...])
+      break
+    fi
+   
+    dnl No way for make to search directories
+    SEARCH_RULE='## SEARCH DISABLED: '
+    SEARCH_SEP=' '
+    AC_MSG_RESULT([it doesn't])
+    if test ! -f configure; then
+      AC_MSG_ERROR(${MAKE-make} requires the build and source directories to be the same)
+    fi
+    break
+  done
+  rm maketest
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Production flags?  Save the value in $CONFIG_MODE so we have it for
+dnl the record.
+dnl
+AC_MSG_CHECKING([for production mode])
+AC_ARG_ENABLE([production],
+              [AC_HELP_STRING([--enable-production],
+                              [Determines how to run the compiler.])])
+
+case "X-$enable_production" in
+  X-|X-yes)
+    AC_MSG_RESULT("production")
+
+    dnl Remove the "-g" flag from CFLAGS if it's in there.
+    dnl
+    CFLAGS_temp=""
+    if test -n "$CFLAGS"; then
+      for d in $CFLAGS ; do
+        if test "X$d" != "X-g"; then
+          CFLAGS_temp="$CFLAGS_temp $d"
+        fi
+      done
+      CFLAGS=$CFLAGS_temp
+    fi
+
+    dnl Remove the "-g" flag from FFLAGS if it's in there.
+    dnl
+    FFLAGS_temp=""
+    if test -n "$FFLAGS"; then
+      for d in $FFLAGS ; do
+        if test "X$d" != "X-g"; then
+          FFLAGS_temp="$FFLAGS_temp $d"
+        fi
+      done
+      FFLAGS=$FFLAGS_temp
+    fi
+
+    CONFIG_MODE=production
+    CFLAGS="$CFLAGS $PROD_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $PROD_CPPFLAGS"
+    FFLAGS="$FFLAGS $PROD_FFLAGS"
+    ;;
+  X-no)
+    AC_MSG_RESULT("development")
+    CONFIG_MODE=development
+    CFLAGS="$CFLAGS $DEBUG_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $DEBUG_CPPFLAGS"
+    FFLAGS="$FFLAGS $DEBUG_FFLAGS"
+    ;;
+  X-pg|X-profile)
+    AC_MSG_RESULT("profile")
+    CONFIG_MODE=profile
+    CFLAGS="$CFLAGS $PROFILE_CFLAGS"
+    CPPFLAGS="$CPPFLAGS $PROFILE_CPPFLAGS"
+    FFLAGS="$FFLAGS $PROFILE_FFLAGS"
+    ;;
+  *)
+    AC_MSG_RESULT("user-defined")
+    CONFIG_MODE="$X-enableval"
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl Check for system libraries.
+dnl
+AC_CHECK_LIB([m], [ceil])
+
+if test "`uname`" = "SunOS" -o "`uname -sr`" = "HP-UX B.11.00"; then
+  dnl ...for Solaris
+  AC_CHECK_LIB([socket], [socket])
+  AC_CHECK_LIB([nsl], [xdr_int])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl If we should build only static executables
+dnl
+AC_MSG_CHECKING([if should build only statically linked executables])
+AC_ARG_ENABLE([static_exec],
+              [AC_HELP_STRING([--enable-static-exec],
+                              [Build only statically linked executables
+                               [default=no]])],
+              STATIC_EXEC=$enableval)
+
+if test "X$STATIC_EXEC" = "Xyes"; then
+  echo "yes"
+  LT_STATIC_EXEC="-all-static"
+else
+  echo "no"
+  LT_STATIC_EXEC=""
+fi
+AC_SUBST(LT_STATIC_EXEC)
+
+dnl ----------------------------------------------------------------------
+dnl Test for 64bit stuff before the data types and their sizes. The
+dnl result could effect the outcome of the sizeof macros below.
+dnl
+case "$host_cpu-$host_vendor-$host_os" in
+  *linux*)
+    dnl ----------------------------------------------------------------------
+    dnl Enable large file support on linux? Store the result in the LINUX_LFS
+    dnl variable for posterity
+    AC_ARG_ENABLE([linux-lfs],
+                  [AC_HELP_STRING([--enable-linux-lfs],
+                                  [Enable support for large (64-bit)
+                                   files on Linux. [default=check]])])
+
+    LINUX_LFS="no"
+    case "X-$enable_linux_lfs" in
+      X-yes)
+        LINUX_LFS=yes
+        ;;
+      X-no)
+        ;;
+      X-|*)
+        MAJOR_VER="`uname -r | cut -d '.' -f1`"
+        MINOR_VER="`uname -r | cut -d '.' -f2`"
+
+        if test ${MAJOR_VER} -gt 2 -o ${MAJOR_VER} -eq 2 -a ${MINOR_VER} -ge 4; then
+          LINUX_LFS="yes"
+        fi
+        ;;
+    esac
+
+    AC_MSG_CHECKING([for large file support mode on Linux])
+    if test "X$LINUX_LFS" = "Xyes"; then
+      AC_MSG_RESULT([enabled])
+      CPPFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE $CPPFLAGS"
+    else
+      AC_MSG_RESULT([disabled])
+    fi
+
+    dnl Add POSIX support on Linux systems, so <features.h> defines
+    dnl __USE_POSIX, which is required to get the prototype for fdopen
+    dnl defined correctly in <stdio.h>
+    CPPFLAGS="-D_POSIX_SOURCE $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>
+    CPPFLAGS="-D_BSD_SOURCE $CPPFLAGS"
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl Check for a Fortran 9X compiler, how to optimize it, and how to
+dnl include modules.
+dnl 
+AC_PROG_F9X
+dnl AC_F9X_OPT_FLAGS
+AC_F9X_MODS
+
+dnl Change back to the C language
+AC_LANG_C
+
+dnl ----------------------------------------------------------------------
+dnl Checks for libraries.
+dnl
+
+dnl ----------------------------------------------------------------------
+dnl Is the GNU zlib present? It has a header file `zlib.h' and a library
+dnl `-lz' and their locations might be specified with the `--with-zlib'
+dnl command-line switch. The value is an include path and/or a library path.
+dnl If the library path is specified then it must be preceded by a comma.
+dnl
+AC_ARG_WITH([zlib],
+            [AC_HELP_STRING([--with-zlib=DIR],
+                            [Use zlib library for external deflate I/O
+                             filter [default=yes]])],,
+            withval=yes)
+
+case $withval in
+  yes)
+    HAVE_ZLIB="yes"
+    AC_CHECK_HEADERS([zlib.h], [HAVE_ZLIB_H="yes"])
+    AC_CHECK_LIB([z], [compress2],, [unset HAVE_ZLIB])
+    AC_CHECK_FUNC([compress2], [HAVE_COMPRESS2="yes"])
+
+    if test -z "$HAVE_ZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      AC_MSG_ERROR([couldn't find zlib library])
+    fi
+    ;;
+  no)
+    HAVE_ZLIB="no"
+    AC_MSG_CHECKING([for GNU zlib])
+    AC_MSG_RESULT([suppressed])
+    ;;
+  *)
+    HAVE_ZLIB="yes"
+    case "$withval" in
+      *,*)
+        zlib_inc="`echo $withval |cut -f1 -d,`"
+        zlib_lib="`echo $withval |cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          zlib_inc="$withval/include"
+          zlib_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+    dnl Trying to include -I/usr/include and -L/usr/lib is redundant and
+    dnl can mess some compilers up.
+    if test "X$zlib_inc" = "X/usr/include"; then
+      zlib_inc=""
+    fi
+    if test "X$zlib_lib" = "X/usr/lib"; then
+      zlib_lib=""
+    fi
+
+    saved_CPPFLAGS="$CPPFLAGS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    if test -n "$zlib_inc"; then
+      CPPFLAGS="$CPPFLAGS -I$zlib_inc"
+    fi
+
+    AC_CHECK_HEADERS([zlib.h],
+                     [HAVE_ZLIB_H="yes"],
+                     [CPPFLAGS="$saved_CPPFLAGS"])
+
+    if test -n "$zlib_lib"; then
+      LDFLAGS="$LDFLAGS -L$zlib_lib"
+    fi
+
+    AC_CHECK_LIB([z], [compress2],,
+                 [LDFLAGS="$saved_LDFLAGS"; unset HAVE_ZLIB])
+    AC_CHECK_FUNC([compress2], [HAVE_COMPRESS2="yes"])
+
+    if test -z "$HAVE_ZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      AC_MSG_ERROR([couldn't find zlib library])
+    fi
+    ;;
+esac
+
+if test "x$HAVE_ZLIB" = "xyes" -a "x$HAVE_ZLIB_H" = "xyes" -a "x$HAVE_COMPRESS2" = "xyes"; then
+  AC_DEFINE(HAVE_FILTER_DEFLATE, 1,
+            [Define if support for deflate filter is enabled])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Is the szlib present? It has a header file `szlib.h' and a library
+dnl `-lsz' and their locations might be specified with the `--with-szlib'
+dnl command-line switch. The value is an include path and/or a library path.
+dnl If the library path is specified then it must be preceded by a comma.
+dnl
+AC_ARG_WITH([szlib],
+            [AC_HELP_STRING([--with-szlib=DIR],
+                            [Use szlib library for external szlib I/O
+                             filter [default=yes]])],,
+            withval=yes)
+
+case $withval in
+  yes)
+    HAVE_SZLIB="yes"
+    AC_CHECK_HEADERS([szlib.h], [HAVE_SZLIB_H="yes"])
+    AC_CHECK_LIB([sz], [SZ_BufftoBuffCompress],, [unset HAVE_SZLIB])
+
+    if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      AC_MSG_ERROR([couldn't find szlib library])
+    fi
+    ;;
+  no)
+    HAVE_SZLIB="no"
+    AC_MSG_CHECKING([for szlib])
+    AC_MSG_RESULT([suppressed])
+    ;;
+  *)
+    HAVE_SZLIB="yes"
+    case "$withval" in
+      *,*)
+        szlib_inc="`echo $withval |cut -f1 -d,`"
+        szlib_lib="`echo $withval |cut -f2 -d, -s`"
+        ;;
+      *)
+        if test -n "$withval"; then
+          szlib_inc="$withval/include"
+          szlib_lib="$withval/lib"
+        fi
+        ;;
+    esac
+
+    dnl Trying to include -I/usr/include and -L/usr/lib is redundant and
+    dnl can mess some compilers up.
+    if test "X$szlib_inc" = "X/usr/include"; then
+      szlib_inc=""
+    fi
+    if test "X$szlib_lib" = "X/usr/lib"; then
+      szlib_lib=""
+    fi
+
+    saved_CPPFLAGS="$CPPFLAGS"
+    saved_LDFLAGS="$LDFLAGS"
+
+    if test -n "$szlib_inc"; then
+      CPPFLAGS="$CPPFLAGS -I$szlib_inc"
+    fi
+
+    AC_CHECK_HEADERS([szlib.h],
+                     [HAVE_SZLIB_H="yes"],
+                     [CPPFLAGS="$saved_CPPFLAGS"])
+
+    if test -n "$szlib_lib"; then
+      LDFLAGS="$LDFLAGS -L$szlib_lib"
+    fi
+
+    AC_CHECK_LIB([sz], [SZ_BufftoBuffCompress],,
+                 [LDFLAGS="$saved_LDFLAGS"; unset HAVE_SZLIB])
+
+    if test -z "$HAVE_SZLIB" -a -n "$HDF5_CONFIG_ABORT"; then
+      AC_MSG_ERROR([couldn't find szlib library])
+    fi
+    ;;
+esac
+
+if test "x$HAVE_SZLIB" = "xyes" -a "x$HAVE_SZLIB_H" = "xyes"; then
+  AC_DEFINE(HAVE_FILTER_SZIP, 1,
+            [Define if support for szip filter is enabled])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Should the Stream Virtual File Driver be compiled in ?
+dnl
+AC_MSG_CHECKING([for Stream Virtual File Driver support])
+AC_ARG_ENABLE([stream-vfd],
+              [AC_HELP_STRING([--enable-stream-vfd],
+                              [Build the Stream Virtual File Driver
+                               [default=no]])],
+              [STREAM_VFD=$enableval])
+
+if test "$STREAM_VFD" = "yes"; then
+  AC_MSG_RESULT([yes])
+  AC_CHECK_HEADERS([netinet/tcp.h sys/filio.h])
+  AC_DEFINE([HAVE_STREAM], [1],
+            [Define if the stream virtual file driver should be compiled])
+
+  dnl Check if 'socklen_t' available
+  AC_MSG_CHECKING([if socklen_t is defined])
+  AC_TRY_COMPILE([
+#include <stdio.h>
+#include <stdlib.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+  ],
+    [socklen_t foo; return 0;],
+    AC_DEFINE([HAVE_SOCKLEN_T], 1,
+              [Define if \`socklen_t' is defined])
+    AC_MSG_RESULT([yes]),
+    AC_MSG_RESULT([no])
+  )
+else
+  AC_MSG_RESULT([not configured])
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Checks for header files.
+dnl
+
+dnl Checkpoint the cache
+AC_CACHE_SAVE
+
+dnl Change back to the Fortran 90 language
+AC_LANG_FORTRAN9X
+
+dnl See if the compiler will support the "-I." option
+FFLAGS_saved=$FFLAGS
+FFLAGS="$FFLAGS -I."
+
+AC_MSG_CHECKING(if compiler supports -I. option)
+AC_TRY_FCOMPILE([
+      program conftest
+      end
+], AC_MSG_RESULT(yes),
+   AC_MSG_RESULT(no)
+   FFLAGS="$FFLAGS_saved")
+
+dnl ----------------------------------------------------------------------
+dnl The following variables are used to distinguish between building a
+dnl serial and parallel library.
+dnl
+dnl    HAVE_PARALLEL	-- defined in H5config.h if we are building
+dnl			   a parallel library even if configure wasn't
+dnl			   able to find some header file or library that
+dnl			   might be required. This is defined if the
+dnl			   compiler looks like a parallel compiler (e.g.,
+dnl			   mpif90 or mpf90) or if the user explicitly states
+dnl			   that a parallel library is being built by supplying
+dnl			   the `--enable-parallel' configure switch.
+dnl
+dnl    PARALLEL		-- This variable is set to a non-null value if
+dnl			   configure thinks we're compiling a parallel
+dnl			   version of the library.
+dnl
+dnl    RUNSERIAL	-- This is a command which will be prepended to
+dnl			   the executable name to run the executable using
+dnl			   a single process. For serial versions of the
+dnl			   library this will normally be empty. For parallel
+dnl			   versions it might be something like `mpirun -np 1'.
+dnl			   The value of this variable is substituted in *.in
+dnl			   files.
+dnl
+dnl    RUNPARALLEL	-- This is a command which will be prepended to
+dnl			   the executable name to run the executable on
+dnl			   multiple processors. For the serial library the
+dnl			   value will normally be the empty string. For
+dnl			   parallel library it should be something like
+dnl			   `mpi -np $$NPROCS' where NPROCS will eventually
+dnl			   contain the number of processors on which to run
+dnl			   the executable (the double dollarsigns are to
+dnl			   protect the expansion until make executes the
+dnl			   command).  The value of this variable is
+dnl			   substituted in *.in files.
+dnl
+AC_SUBST(PARALLEL)
+AC_SUBST(RUNSERIAL)
+AC_SUBST(RUNPARALLEL)
+AC_SUBST(TESTPARALLEL)
+
+dnl ----------------------------------------------------------------------
+dnl If the compiler is obviously a parallel compiler then we're building
+dnl a parallel version of hdf5 and should define HAVE_PARALLEL. Furthermore,
+dnl the name of the compiler might tell us how to run the resulting
+dnl executable. For `mpif90' the executable should be run with `mpirun'
+dnl from the same directory as mpif90 if it exists.
+dnl
+case "$F9X" in
+  *mpif90*)
+    dnl The mpich compiler. Use mpirun from the same directory if it
+    dnl exists.
+    PARALLEL=mpif90
+    AC_MSG_CHECKING(for mpirun)
+
+    dnl Find the path where mpif90 is located.
+    cmd=`echo $F9X |cut -f1 -d' '`
+    if (echo $cmd |grep / >/dev/null); then
+      path="`echo $cmd |sed 's/\(.*\)\/.*$/\1/'`"
+    else
+      for path in `echo $PATH |tr : ' '`; do
+        if test -x $path/$cmd; then
+          break;
+        fi
+      done
+    fi
+
+    dnl Is there an mpirun at that path?
+    if test -x $path/mpirun; then
+      AC_MSG_RESULT($path/mpirun)
+      RUNSERIAL="${RUNSERIAL:-none}"
+
+      if test -z "$RUNPARALLEL"; then
+        RUNPARALLEL="$path/mpirun -np \$\${NPROCS:=2}"
+      fi
+    else
+      AC_MSG_RESULT(none)
+    fi
+    ;;
+
+  *mpxlf* | *mpxlf_r* | *mpxlf90* | *mpxlf90_r* | *mpxlf95* | *mpxlf95_r*)
+    dnl The IBM compiler
+    PARALLEL="$F9X"
+    ;;
+
+  *)
+    dnl Probably not a parallel compiler, but if `--enable-parallel'
+    dnl is defined below then we're still building a parallel hdf5.
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl Turn on internal I/O filters by setting macros in header files
+dnl Internal I/O filters are contained entirely within the library and do
+dnl not depend on external headers or libraries.  The shuffle filter is
+dnl an example of an internal filter, while the gzip filter is an example of
+dnl an external filter.  Each external filter is controlled with an
+dnl "--with-foo=" configure flag.
+dnl
+AC_MSG_CHECKING(for I/O filters)
+AC_ARG_ENABLE([filters],
+              [AC_HELP_STRING([--enable-filters=all],
+                              [Turn on all internal I/O filters. One may
+                               also specify a comma-separated list of filters
+                               or the word no.  The default is all internal
+                               I/O filters.])],
+              [FILTERS=$enableval])
+
+AC_SUBST([FILTERS])
+dnl Eventually: all_filters="shuffle,foo,bar,baz"
+all_filters="shuffle,fletcher32"
+case "X-$FILTERS" in
+  X-|X-all)
+    FILTERS=$all_filters
+    AC_MSG_RESULT(all ($FILTERS))
+    ;;
+  X-no|X-none)
+    AC_MSG_RESULT(none)
+    FILTERS="none"
+    ;;
+  *)
+    AC_MSG_RESULT($FILTERS)
+    ;;
+esac
+
+if test -n "$FILTERS"; then
+  for filter in `echo $FILTERS | tr 'a-z,' 'A-Z '`; do
+dnl ----------------------------------------------------------------------
+dnl Have to use separate 'if' construct for each filter, so that autoheader
+dnl can detect the AC_DEFINE for each one...
+dnl
+    if test $filter = "SHUFFLE"; then
+        AC_DEFINE(HAVE_FILTER_SHUFFLE, 1,
+                [Define if support for shuffle filter is enabled])
+    fi
+    if test $filter = "FLETCHER32"; then
+        AC_DEFINE(HAVE_FILTER_FLETCHER32, 1,
+                [Define if support for Fletcher32 checksum is enabled])
+    fi
+  done
+fi
+
+dnl ----------------------------------------------------------------------
+dnl What header files and libraries do we have to look for for parallel
+dnl support?  For the most part, search paths are already specified with
+dnl CPPFLAGS and LDFLAGS or are known to the compiler.  If the user says
+dnl `--disable-parallel' but specifies a known parallel compiler (like mpicc
+dnl or mpcc) then parallel support is enabled but configure doesn't search
+dnl for any parallel header files or libraries.
+dnl
+AC_ARG_ENABLE([parallel],
+              [AC_HELP_STRING([--enable-parallel],
+                              [Search for MPI-IO and MPI support files])])
+
+AC_MSG_CHECKING(for parallel support files)
+case "X-$enable_parallel" in
+  X-|X-no|X-none)
+    dnl Either we are not compiling for parallel or the header and library
+    dnl files and locations are known to the compiler (this is the case
+    dnl for a correct installation of mpicc for instance).
+    AC_MSG_RESULT(skipped)
+    ;;
+
+  X-yes)
+    dnl We want to compile a parallel library with a compiler that
+    dnl may already know how to link with MPI and MPI-IO.
+    AC_MSG_RESULT(provided by compiler)
+    PARALLEL=yes
+
+    dnl Try link a simple MPI program.  If fail, try again with -lmpi.
+    AC_TRY_FLINK(mpif.h, [
+        integer:: ierr
+        call mpi_file_open( ierr )],,
+        AC_CHECK_FLIB(mpi, [
+          include 'mpif.h'
+          integer:: ierr
+          call mpi_file_open( ierr )],, PARALLEL=no))
+
+    dnl Then try link a simple MPI-IO program.  If fail, try again with
+    dnl -lmpio.
+    if test "X$PARALLEL" = "Xyes"; then
+      AC_TRY_FLINK(mpif.h, [
+          integer:: ierr
+          call mpi_file_open( ierr )],,
+          AC_CHECK_FLIB(mpio, [
+            include 'mpif.h'
+            integer:: ierr
+            call mpi_file_open( ierr )],, PARALLEL=no))
+    fi
+
+    dnl Set RUNPARALLEL to mpirun if not set yet.
+    if test "X$PARALLEL" = "Xyes" && test -z "$RUNPARALLEL"; then
+      RUNPARALLEL="mpirun -np \$\${NPROCS:=2}"
+    fi
+    ;;
+
+  *)
+    AC_MSG_RESULT(error)
+    AC_MSG_ERROR(\'$enable_parallel\' is not a valid parallel search type)
+    ;;
+esac
+
+dnl ----------------------------------------------------------------------
+dnl Should the `testpar' directory participate in the build?
+dnl
+if test -n "$PARALLEL"; then
+  TESTPARALLEL=testpar
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Print some other parallel information and do some sanity checks.
+dnl
+ADD_PARALLEL_FILES="no"
+if test -n "$PARALLEL"; then
+  dnl Display what we found about running programs
+  AC_MSG_CHECKING(prefix for running on one processor)
+  AC_MSG_RESULT($RUNSERIAL)
+  AC_MSG_CHECKING(prefix for running in parallel)
+  AC_MSG_RESULT($RUNPARALLEL)
+
+  dnl Check that we can link a simple MPI and MPI-IO application
+  AC_MSG_CHECKING(whether a simple MPI-IO program can be linked)
+  AC_TRY_FLINK(mpif.h,[
+      integer:: ierr
+      call mpi_file_open( ierr )],
+            AC_MSG_RESULT(yes),
+            AC_MSG_RESULT(no)
+            AC_MSG_ERROR('unable to link a simple MPI-IO application'))
+
+  dnl There *must* be some way to run in parallel even if it's just the
+  dnl word `none'.
+  if test -z "$RUNPARALLEL"; then
+    AC_MSG_ERROR(no way to run a parallel program)
+  fi
+
+  dnl If RUNSERIAL or RUNPARALLEL is the word `none' then replace it with
+  dnl the empty string.
+  if test "X$RUNSERIAL" = "Xnone"; then
+    RUNSERIAL=
+  fi
+  if test "X$RUNPARALLEL" = "Xnone"; then
+    RUNPARALLEL=
+  fi
+
+  ADD_PARALLEL_FILES="yes"
+
+  AC_MSG_CHECKING([for MPI_Comm_c2f and MPI_Comm_f2c functions])
+
+  dnl Change to the C language
+  AC_LANG_C
+
+  AC_TRY_LINK([
+#include <mpi.h>
+  ],
+    [MPI_Comm c_comm; MPI_Comm_c2f(c_comm)],
+    AC_DEFINE(HAVE_MPI_MULTI_LANG_Comm, 1,
+              [Define if \`MPI_Comm_c2f' and \`MPI_Comm_f2c' exists])
+    AC_MSG_RESULT(yes),
+    AC_MSG_RESULT(no)
+  )
+
+  AC_MSG_CHECKING([for MPI_Info_c2f and MPI_Info_f2c functions])
+  AC_TRY_LINK([
+#include <mpi.h>
+  ],
+    [MPI_Info c_info; MPI_Info_c2f(c_info)],
+    AC_DEFINE(HAVE_MPI_MULTI_LANG_Info, 1,
+              [Define if \`MPI_Info_c2f' and \`MPI_Info_f2c' exists])
+    AC_MSG_RESULT(yes),
+    AC_MSG_RESULT(no)
+  )
+
+  dnl --------------------------------------------------------------------
+  dnl Do we want MPE instrumentation feature on?
+  dnl
+  dnl This must be done after enable-parallel is checked since it depends
+  dnl on a mpich compiler. We put this here so that the "h5fc" utility
+  dnl will have the appropriate libraries listed in it.
+  dnl
+  AC_SUBST(MPE) MPE=yes
+  AC_ARG_WITH([mpe],
+              [AC_HELP_STRING([--with-mpe=DIR],
+                              [Use MPE instrumentation [default=no]])],,
+              [withval=no])
+
+  case "X-$withval" in
+    X-|X-no|X-none)
+      AC_MSG_CHECKING([for MPE])
+      AC_MSG_RESULT([suppressed])
+      unset MPE
+      ;;
+    X-yes)
+      AC_CHECK_HEADERS([mpe.h],, [unset MPE])
+      AC_CHECK_LIB([mpe], [MPE_Init_log],, [unset MPE])
+      AC_CHECK_LIB([lmpe], [CLOG_Init],, [unset MPE])
+      ;;
+    *)
+      case "$withval" in
+        *,*)
+          mpe_inc="`echo $withval | cut -f1 -d,`"
+          mpe_lib="`echo $withval | cut -f2 -d, -s`"
+          ;;
+        *)
+          if test -n "$withval"; then
+            mpe_inc="$withval/include"
+            mpe_lib="$withval/lib"
+          fi
+          ;;
+      esac
+  
+      dnl Trying to include -I/usr/include and -L/usr/lib is redundant and
+      dnl can mess some compilers up.
+      if test "X$mpe_inc" = "X/usr/include"; then
+        mpe_inc=""
+      fi
+      if test "X$mpe_lib" = "X/usr/lib"; then
+        mpe_lib=""
+      fi
+  
+      if test -n "$mpe_inc"; then
+        saved_CPPFLAGS="$CPPFLAGS"
+        CPPFLAGS="$CPPFLAGS -I$mpe_inc"
+        AC_CHECK_HEADERS([mpe.h],, [CPPFLAGS="$saved_CPPFLAGS"; unset MPE])
+      else
+        AC_CHECK_HEADERS([mpe.h],, [unset MPE])
+      fi
+  
+      if test -n "$mpe_lib"; then
+        saved_LDFLAGS="$LDFLAGS"
+        LDFLAGS="$LDFLAGS -L$mpe_lib"
+        AC_CHECK_LIB([mpe], [MPE_Init_log],,
+                     [LDFLAGS="$saved_LDFLAGS"; unset MPE])
+        AC_CHECK_LIB([lmpe], [CLOG_Init],,
+                     [LDFLAGS="$saved_LDFLAGS"; unset MPE])
+      else
+        AC_CHECK_LIB([mpe], [MPE_Init_log],, [unset MPE])
+        AC_CHECK_LIB([lmpe], [CLOG_Init],, [unset MPE])
+      fi
+      ;;
+  esac
+
+  dnl Change to the Fortran 90 language
+  AC_LANG_FORTRAN9X
+fi
+AC_SUBST(ADD_PARALLEL_FILES)
+
+AC_MSG_CHECKING(make)
+AC_SUBST_FILE(DEPEND)
+if test "`${MAKE-make} --version -f /dev/null 2>/dev/null |\
+      sed -n 1p|cut -c1-8`" = "GNU Make"; then
+  AC_MSG_RESULT(GNU make)
+  GMAKE=yes
+  if test "X$GCC" = "Xyes"; then
+    DEPEND=config/depend1
+  else
+    DEPEND=config/depend2
+  fi
+else
+  AC_MSG_RESULT(generic)
+fi
+
+dnl How do we include another file into a Makefile?
+if test -z "$DEPEND"; then
+  AC_MSG_CHECKING(how to include a makefile)
+
+  dnl The include file contains the target for `foo'
+  cat >makeinc <<EOF
+foo:
+	@:
+EOF
+
+  while true; do dnl for break
+    dnl pmake. We have to be careful because some pmake think that the
+    dnl contents of the MAKE environment variable is a target.
+    echo '.include <makeinc>' >maketest
+    if (MAKE= ${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      AC_MSG_RESULT([.include <FILE>])
+      DEPEND=config/depend3
+      break
+    fi
+ 
+    dnl Most make's use `include FILE'
+    echo 'include makeinc' >maketest
+    if (${MAKE-make} -f maketest foo) >/dev/null 2>&1; then
+      AC_MSG_RESULT(include FILE)
+      DEPEND=config/depend4
+      break;
+    fi
+
+    dnl default
+    AC_MSG_RESULT(you have a deficient make command)
+    DEPEND=config/dependN
+    break
+  done
+  rm makeinc maketest
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Checking to see if GPFS is available on this filesystem
+dnl
+AC_ARG_ENABLE([gpfs],
+              [AC_HELP_STRING([--enable-gpfs],
+                              [Enable GPFS hints for the MPI/POSIX file
+                               driver. [default=no]])],,
+              [enableval=no])
+
+case "X-$enableval" in
+  X-yes)
+    dnl Change to the C language
+    AC_LANG_C
+
+    AC_CHECK_HEADERS([gpfs.h],
+                     AC_MSG_CHECKING([for GPFS support])
+                     AC_TRY_COMPILE([#include <gpfs.h>],
+                                    [int fd = 0; gpfs_fcntl(fd, (void *)0);],
+                                    AC_DEFINE(HAVE_GPFS, 1,
+                                              [Define if we have GPFS support])
+                                    AC_MSG_RESULT(yes)
+                                    LIBS="$LIBS -lgpfs"
+                                    GPFS="yes",
+                                    AC_MSG_RESULT(no)
+                                    GPFS="no"))
+
+    dnl Change back to the Fortran 90 language
+    AC_LANG_FORTRAN9X
+    ;;
+  X-no|*)
+    AC_MSG_CHECKING([for gpfs])
+    AC_MSG_RESULT([suppressed])
+    ;;
+esac
+   
+dnl Some cleanup stuff
+rm -f conftest core core.* *.core conftest.o conftest.c dummy.o $ac_clean_files
+
+dnl ----------------------------------------------------------------------
+dnl Set some variables for general configuration information to be saved
+dnl and installed with the libraries.
+dnl
+
+dnl HDF5 version from the first line of the README.txt file.
+H5_VERSION="`cut -d' ' -f3 $srcdir/../README.txt | head -1`"
+AC_SUBST(H5_VERSION)
+
+dnl Configuration date
+AC_SUBST(CONFIG_DATE) CONFIG_DATE="`date`"
+
+dnl User doing the configuration
+AC_SUBST(CONFIG_USER) CONFIG_USER="`whoami`@`hostname`"
+if test -n "$ORGANIZATION"; then
+  CONFIG_USER="$CONFIG_USER at $ORGANIZATION"
+fi
+
+dnl Configuration mode (production, development, profile, etc) saved above.
+AC_SUBST(CONFIG_MODE)
+
+dnl Byte sex from the AC_C_BIGENDIAN macro.
+AC_SUBST(BYTESEX)
+if test "X$ac_cv_c_bigendian" = "Xyes"; then
+  BYTESEX="big-endian"
+else
+  BYTESEX="little-endian"
+fi
+
+dnl Parallel support? (set above except empty if none)
+PARALLEL=${PARALLEL:-no}
+
+dnl Compiler with version information. This consists of the full path
+dnl name of the compiler and the reported version number.
+AC_SUBST(CC_VERSION)
+if `echo $CC | grep / 2>&1 /dev/null`; then
+  CC_VERSION="$CC"	
+else
+  CC_VERSION="$CC";
+  for x in `echo $PATH | sed -e 's/:/ /g'`; do
+    if test -x $x/$CC; then
+      CC_VERSION="$x/$CC"
+      break
+    fi
+  done
+fi
+if test -n "$cc_vendor" && test -n "$cc_version"; then
+  CC_VERSION="$CC_VERSION ($cc_vendor-$cc_version)"
+fi
+
+AC_SUBST(FC_VERSION)
+if `echo $F9X | grep / 2>&1 /dev/null`; then
+  FC_VERSION="$F9X"	
+else
+  FC_VERSION="$F9X";
+  for x in `echo $PATH | sed -e 's/:/ /g'`; do
+    if test -x $x/$F9X; then
+      FC_VERSION="$x/$F9X"
+      break
+    fi
+  done
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Determine the runtime libraries we may need to include in the
+dnl libtools command so that executables will find the correct dynamic
+dnl libraries.
+dnl 
+AC_SUBST(DYNAMIC_DIRS) DYNAMIC_DIRS=""
+if test -n "$LDFLAGS"; then
+  for d in $LDFLAGS ; do
+    case "$d" in
+      -L*)
+        d=`echo $d | sed -e 's/-L//g'`
+        case "$d" in
+          .*)
+            dnl If the path isn't absolute, make it so by prepending the
+            dnl ROOT directory to it.
+            d=${ROOT}/$d
+            ;;
+        esac
+        DYNAMIC_DIRS="-R${d} $DYNAMIC_DIRS"
+        ;;
+    esac
+  done
+fi
+
+dnl ----------------------------------------------------------------------
+dnl Build the Makefiles.  Almost every Makefile.in will begin with the line
+dnl `@COMMENCE@' and end with the line `@CONCLUDE@'.  These lines insert
+dnl various files from the config directory into the Makefile.
+dnl
+AC_SUBST_FILE(COMMENCE) COMMENCE=config/commence
+AC_SUBST_FILE(CONCLUDE) CONCLUDE=config/conclude
+
+dnl The directory search list
+if test -z "$SEARCH"; then
+  AC_SUBST(SEARCH) SEARCH='$(srcdir) $(top_builddir)/src $(top_srcdir)/src'
+  cmd='echo $SEARCH |sed "s/ /'$SEARCH_SEP'/g"'
+  SEARCH="$SEARCH_RULE`eval $cmd`"
+fi
+
+dnl We don't need to say when we're entering directories if we're using
+dnl GNU make becuase make does it for us.
+if test "X$GMAKE" = "Xyes"; then
+  AC_SUBST(SETX) SETX=":"
+else
+  AC_SUBST(SETX) SETX="set -x"
+fi
+
+dnl Some cleanup stuff
+rm -f conftest conftest.o conftest.c core core.* *.core dummy.o
+
+dnl Build config.status, touch the stamp files, and build all the Makefiles.
+dnl The order is such that the first `make' does not need to update any
+dnl configuration information. See config/commence.in for the order in which
+dnl things need to be done.
+
+dnl First the stamp1 file for H5config.h.in
+mkdir ./config >/dev/null 2>&1
+touch ./config/stamp1
+
+PARALLEL_MAKE=
+
+if test -n "$TESTPARALLEL"; then
+  PARALLEL_MAKE=$TESTPARALLEL/Makefile
+fi
+
+dnl Then the config.status file (but not makefiles)
+saved_no_create=$no_create
+no_create=yes
+AC_CONFIG_FILES([config/depend1    
+                 config/depend2
+                 config/depend3
+                 config/depend4
+                 config/dependN
+                 config/commence
+                 config/conclude
+                 Makefile
+                 src/h5fc
+                 src/H5fortran_types.f90
+                 src/libhdf5_fortran.settings
+                 src/Makefile
+                 test/Makefile
+                 $PARALLEL_MAKE
+                 examples/Makefile])
+AC_OUTPUT
+no_create=$saved_no_create
+
+dnl Then the stamp2 file for H5config_fortran.h
+touch ./config/stamp2
+
+dnl Finally the makefiles
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
+chmod 755 src/h5fc
+
+dnl ----------------------------------------------------------------------
+dnl Print out a summary of what we are going to build.
+dnl
+if test -z "$ECHO_N" -o -z "$ECHO_C"; then
+  if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+    if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+      ECHO_N=''
+      ECHO_C='
+'
+    else
+      ECHO_N=-n
+      ECHO_C=''
+    fi
+  else
+    ECHO_N=''
+    ECHO_C='\c'
+  fi
+fi
+
+PRINT_PLAIN() {
+  echo $ECHO_N "$1$ECHO_C"
+  echo $ECHO_N "$1$ECHO_C" 1>>src/libhdf5_fortran.settings
+}
+
+PRINT_N() {
+  echo $ECHO_N "$1:  $ECHO_C"
+  echo $ECHO_N "$1:  $ECHO_C" 1>>src/libhdf5_fortran.settings
+}
+
+PRINT() {
+  echo "$1"
+  echo "$1" 1>>src/libhdf5_fortran.settings
+}
+
+dnl ----------------------------------------------------------------------
+dnl Print "Yes" if all arguments are "yes", otherwise "No"
+dnl
+IF_YES_NO() {
+  if test $# -lt 1; then
+    PRINT "No"
+    return
+  else
+    while test $# -gt 0; do
+      if test "$1" != "yes"; then
+        PRINT "No"
+        return
+      fi
+      shift
+    done
+  fi
+  PRINT "Yes"
+}
+
+IF_ENABLED_DISABLED() {
+  if test "$1" = "yes"; then
+    PRINT "Enabled"
+  else
+    PRINT "Disabled"
+  fi
+}
+
+PRINT "Fortran Configure Summary"
+PRINT "Compiling Options:"
+
+PRINT_N "               Fortran Compiler"
+PRINT "$F9X"
+
+PRINT_N "                         FFLAGS"
+PRINT "$FFLAGS"
+
+PRINT_N "                     C Compiler"
+PRINT "$CC"
+
+PRINT_N "                         CFLAGS"
+PRINT "$CFLAGS"
+
+PRINT_N "                       CPPFLAGS"
+PRINT "$CPPFLAGS"
+
+PRINT_N "                        LDFLAGS"
+PRINT "$LDFLAGS"
+
+PRINT "Features:"

Added: packages/hdf5/branches/upstream/current/fortran/examples/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,16 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+

Added: packages/hdf5/branches/upstream/current/fortran/examples/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,175 @@
+## HDF5-Fortran test/Makefile(.in)
+##
+## 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.
+##
+top_srcdir=@top_srcdir@/..
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+hdf5_builddir=$(top_builddir)/src
+
+## Replace building FC with the just installed h5fc
+FC=$(bindir)/h5fc
+FC_PP=$(bindir)/h5pfc
+
+## These are the programs that `make all' or `make tests' will build and which
+## `make check' will run. List them in the order they should be run.
+TEST_PROGS=dsetexample fileexample rwdsetexample attrexample groupexample	\
+	   grpsexample grpdsetexample hyperslab selectele grpit refobjexample	\
+	   refregexample mountexample compound
+
+## These are the files that `make clean' (and derivatives) will remove from
+## this directory.
+CLEAN=*.h5
+
+## List all source files here. The list of object files will be
+## created by replacing the `.f90' with a `.o'. This list is necessary
+## for building automatic dependencies.
+TEST_SRC=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
+TEST_OBJ=$(TEST_SRC:.f90=.lo)
+
+EXAMPLE_PROGS=$(TEST_SRC)
+
+## How to build the programs... they all depend on the Fortran & C hdf5 libraries
+$(TEST_PROGS): $(LIBHDF5)
+dsetexample: $(srcdir)/dsetexample.f90
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(FC) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC) -o $@ $(srcdir)/$@.f90;					\
+	else								\
+	  echo $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	fi
+
+fileexample: $(srcdir)/fileexample.f90
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(FC) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC) -o $@ $(srcdir)/$@.f90;					\
+	else								\
+	  echo $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	fi
+
+rwdsetexample: $(srcdir)/rwdsetexample.f90
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(FC) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC) -o $@ $(srcdir)/$@.f90;					\
+	else								\
+	  echo $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	fi
+
+attrexample: $(srcdir)/attrexample.f90
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(FC) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC) -o $@ $(srcdir)/$@.f90;					\
+	else								\
+	  echo $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	fi
+
+groupexample: $(srcdir)/groupexample.f90
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(FC) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC) -o $@ $(srcdir)/$@.f90;					\
+	else								\
+	  echo $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	fi
+
+grpsexample: $(srcdir)/grpsexample.f90
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(FC) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC) -o $@ $(srcdir)/$@.f90;					\
+	else								\
+	  echo $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	fi
+
+grpdsetexample: $(srcdir)/grpdsetexample.f90
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(FC) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC) -o $@ $(srcdir)/$@.f90;					\
+	else								\
+	  echo $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	fi
+
+hyperslab: $(srcdir)/hyperslab.f90
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(FC) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC) -o $@ $(srcdir)/$@.f90;					\
+	else								\
+	  echo $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	fi
+
+selectele: $(srcdir)/selectele.f90
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(FC) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC) -o $@ $(srcdir)/$@.f90;					\
+	else								\
+	  echo $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	fi
+
+grpit: $(srcdir)/grpit.f90
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(FC) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC) -o $@ $(srcdir)/$@.f90;					\
+	else								\
+	  echo $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	fi
+
+refobjexample: $(srcdir)/refobjexample.f90
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(FC) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC) -o $@ $(srcdir)/$@.f90;					\
+	else								\
+	  echo $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	fi
+
+refregexample: $(srcdir)/refregexample.f90
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(FC) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC) -o $@ $(srcdir)/$@.f90;					\
+	else								\
+	  echo $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	fi
+
+mountexample: $(srcdir)/mountexample.f90
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(FC) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC) -o $@ $(srcdir)/$@.f90;					\
+	else								\
+	  echo $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	fi
+
+compound: $(srcdir)/compound.f90
+	@if test "X$(PARALLEL)" = "Xno"; then				\
+	  echo $(FC) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC) -o $@ $(srcdir)/$@.f90;					\
+	else								\
+	  echo $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	  $(FC_PP) -o $@ $(srcdir)/$@.f90;				\
+	fi
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/fortran/examples/attrexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/attrexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/attrexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,116 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 and write a dataset attribute. 
+! It opens the existing file 'dset.h5', obtains the identifier of
+! the dataset "/dset", defines attribute's dataspace, 
+! creates dataset attribute, writes the attribute, and then closes
+! the attribute's dataspace, attribute, dataset, and file. 
+
+     PROGRAM ATTREXAMPLE
+
+        
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=8), PARAMETER :: filename = "dsetf.h5" ! File name
+     CHARACTER(LEN=4), PARAMETER :: dsetname = "dset"     ! Dataset name
+     CHARACTER(LEN=9), PARAMETER :: aname = "attr_long"   ! Attribute name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+     INTEGER(HID_T) :: attr_id       ! Attribute identifier 
+     INTEGER(HID_T) :: aspace_id     ! Attribute Dataspace identifier 
+     INTEGER(HID_T) :: atype_id      ! Attribute Dataspace identifier 
+     INTEGER(HSIZE_T), DIMENSION(1) :: adims = (/2/) ! Attribute dimension
+     INTEGER     ::   arank = 1                      ! Attribure rank
+     INTEGER(SIZE_T) :: attrlen    ! Length of the attribute string
+
+     CHARACTER(LEN=80), DIMENSION(2) ::  attr_data  ! Attribute data
+
+     INTEGER     ::   error ! Error flag
+     INTEGER(HSIZE_T), DIMENSION(1) :: data_dims
+     
+
+     !
+     ! Initialize attribute's data
+     !
+     attr_data(1) = "Dataset character attribute"
+     attr_data(2) = "Some other string here     "
+     attrlen = 80 
+     !
+     ! Initialize FORTRAN interface.
+     !
+     CALL h5open_f(error) 
+    
+     !
+     ! Open an existing file.
+     !
+     CALL h5fopen_f (filename, H5F_ACC_RDWR_F, file_id, error)
+
+     !
+     ! Open an existing dataset. 
+     !
+     CALL h5dopen_f(file_id, dsetname, dset_id, error)
+
+     !
+     ! Create scalar data space for the attribute. 
+     !
+     CALL h5screate_simple_f(arank, adims, aspace_id, error)
+     !
+     ! Create datatype for the attribute.
+     !
+     CALL h5tcopy_f(H5T_NATIVE_CHARACTER, atype_id, error)
+     CALL h5tset_size_f(atype_id, attrlen, error)
+     
+     !
+     ! Create dataset attribute.
+     !
+     CALL h5acreate_f(dset_id, aname, atype_id, aspace_id, &
+                      attr_id, error)
+     
+     !
+     ! Write the attribute data.
+     !
+     data_dims(1) = 2
+     CALL h5awrite_f(attr_id, atype_id, attr_data, data_dims, error)
+     
+     !
+     ! Close the attribute. 
+     !
+     CALL h5aclose_f(attr_id, error)
+     
+     !
+     ! Terminate access to the data space.
+     !
+     CALL h5sclose_f(aspace_id, error)
+
+     !   
+     ! End access to the dataset and release resources used by it.
+     ! 
+     CALL h5dclose_f(dset_id, error)
+
+     ! 
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+
+     !
+     ! Close FORTRAN interface.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM ATTREXAMPLE 
+ 

Added: packages/hdf5/branches/upstream/current/fortran/examples/compound.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/compound.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/compound.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,231 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 program creates a dataset that is one dimensional array of
+! structures  {
+!                 character*2
+!                 integer
+!                 double precision
+!                 real
+!                                   }
+! Data is written and read back by fields.
+!
+
+     PROGRAM COMPOUNDEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=11), PARAMETER :: filename = "compound.h5" ! File name
+     CHARACTER(LEN=8), PARAMETER :: dsetname = "Compound"     ! Dataset name
+     INTEGER, PARAMETER :: dimsize = 6 ! Size of the dataset
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+     INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+     INTEGER(HID_T) :: dtype_id      ! Compound datatype identifier
+     INTEGER(HID_T) :: dt1_id      ! Memory datatype identifier (for character field)
+     INTEGER(HID_T) :: dt2_id      ! Memory datatype identifier (for integer field)
+     INTEGER(HID_T) :: dt3_id      ! Memory datatype identifier (for double precision field)
+     INTEGER(HID_T) :: dt4_id      ! Memory datatype identifier (for real field)
+     INTEGER(HID_T) :: dt5_id      ! Memory datatype identifier 
+     INTEGER(HID_T) :: plist_id    ! Dataset trasfer property
+     INTEGER(SIZE_T) :: typesize
+
+
+     INTEGER(HSIZE_T), DIMENSION(1) :: dims = (/dimsize/) ! Dataset dimensions
+     INTEGER     ::   rank = 1                            ! Dataset rank
+
+     INTEGER     ::   error ! Error flag
+     INTEGER(SIZE_T)     ::   type_size  ! Size of the datatype
+     INTEGER(SIZE_T)     ::   type_sizec  ! Size of the character datatype 
+     INTEGER(SIZE_T)     ::   type_sizei  ! Size of the integer datatype
+     INTEGER(SIZE_T)     ::   type_sized  ! Size of the double precision datatype
+     INTEGER(SIZE_T)     ::   type_sizer  ! Size of the real datatype
+     INTEGER(SIZE_T)     ::   offset     ! Member's offset
+     CHARACTER(LEN=2), DIMENSION(dimsize)      :: char_member
+     CHARACTER(LEN=2), DIMENSION(dimsize)      :: char_member_out ! Buffer to read data out
+     INTEGER, DIMENSION(dimsize)          :: int_member
+     DOUBLE PRECISION, DIMENSION(dimsize) :: double_member
+     REAL, DIMENSION(dimsize)             :: real_member
+     INTEGER :: i
+     INTEGER(HSIZE_T), DIMENSION(1) :: data_dims 
+     data_dims(1) = dimsize
+     !
+     ! Initialize data buffer.
+     !
+     do i = 1, dimsize
+        char_member(i)(1:1) = char(65+i)
+        char_member(i)(2:2) = char(65+i)
+        char_member_out(i)(1:1)   = char(65) 
+        char_member_out(i)(2:2)   = char(65) 
+        int_member(i)   = i
+        double_member(i)   = 2.* i
+        real_member(i)   = 3. * i
+     enddo
+
+     !
+     ! Initialize FORTRAN interface.
+     !
+     CALL h5open_f(error)
+     !
+     ! Set dataset transfer property to preserve partially initialized fields
+     ! during write/read to/from dataset with compound datatype.
+     !
+     CALL h5pcreate_f(H5P_DATASET_XFER_F, plist_id, error)
+     CALL h5pset_preserve_f(plist_id, .TRUE., error)
+
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+     ! 
+     ! Create the dataspace.
+     !
+     CALL h5screate_simple_f(rank, dims, dspace_id, error)
+     !
+     ! Create compound datatype.
+     !
+     ! First calculate total size by calculating sizes of each member
+     !
+     CALL h5tcopy_f(H5T_NATIVE_CHARACTER, dt5_id, error)
+     typesize = 2
+     CALL h5tset_size_f(dt5_id, typesize, error)
+     CALL h5tget_size_f(dt5_id, type_sizec, error)
+     CALL h5tget_size_f(H5T_NATIVE_INTEGER, type_sizei, error)
+     CALL h5tget_size_f(H5T_NATIVE_DOUBLE, type_sized, error)
+     CALL h5tget_size_f(H5T_NATIVE_REAL, type_sizer, error)
+     type_size = type_sizec + type_sizei + type_sized + type_sizer
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_size, dtype_id, error)
+     !
+     ! Insert memebers
+     !
+     ! CHARACTER*2 memeber
+     !
+     offset = 0
+     CALL h5tinsert_f(dtype_id, "char_field", offset, dt5_id, error)
+     !
+     ! INTEGER member
+     !
+     offset = offset + type_sizec ! Offset of the second memeber is 2
+     CALL h5tinsert_f(dtype_id, "integer_field", offset, H5T_NATIVE_INTEGER, error)
+     !
+     ! DOUBLE PRECISION member
+     !
+     offset = offset + type_sizei  ! Offset of the third memeber is 6
+     CALL h5tinsert_f(dtype_id, "double_field", offset, H5T_NATIVE_DOUBLE, error)
+     !
+     ! REAL member
+     !
+     offset = offset + type_sized  ! Offset of the last member is 14
+     CALL h5tinsert_f(dtype_id, "real_field", offset, H5T_NATIVE_REAL, error)
+
+     !
+     ! Create the dataset with compound datatype.
+     !
+     CALL h5dcreate_f(file_id, dsetname, dtype_id, dspace_id, &
+                      dset_id, error)
+     !
+     ! Create memory types. We have to create a compound datatype 
+     ! for each member we want to write. 
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sizec, dt1_id, error)
+     offset = 0
+     CALL h5tinsert_f(dt1_id, "char_field", offset, dt5_id, error)
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sizei, dt2_id, error)
+     offset = 0
+     CALL h5tinsert_f(dt2_id, "integer_field", offset, H5T_NATIVE_INTEGER, error)
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sized, dt3_id, error)
+     offset = 0
+     CALL h5tinsert_f(dt3_id, "double_field", offset, H5T_NATIVE_DOUBLE, error)
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sizer, dt4_id, error)
+     offset = 0
+     CALL h5tinsert_f(dt4_id, "real_field", offset, H5T_NATIVE_REAL, error)
+     !
+     ! Write data by fields in the datatype. Fields order is not important.
+     !
+     CALL h5dwrite_f(dset_id, dt4_id, real_member, data_dims, error, xfer_prp = plist_id)
+     CALL h5dwrite_f(dset_id, dt1_id, char_member, data_dims, error, xfer_prp = plist_id)
+     CALL h5dwrite_f(dset_id, dt3_id, double_member, data_dims, error, xfer_prp = plist_id)
+     CALL h5dwrite_f(dset_id, dt2_id, int_member, data_dims, error, xfer_prp = plist_id)
+
+     !   
+     ! End access to the dataset and release resources used by it.
+     ! 
+     CALL h5dclose_f(dset_id, error)
+
+     !
+     ! Terminate access to the data space.
+     !
+     CALL h5sclose_f(dspace_id, error)
+     !
+     ! Terminate access to the datatype
+     !
+     CALL h5tclose_f(dtype_id, error)
+     CALL h5tclose_f(dt1_id, error)
+     CALL h5tclose_f(dt2_id, error)
+     CALL h5tclose_f(dt3_id, error)
+     CALL h5tclose_f(dt4_id, error)
+     CALL h5tclose_f(dt5_id, error)
+
+     ! 
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+     
+     !
+     ! Open the file.
+     !
+     CALL h5fopen_f (filename, H5F_ACC_RDWR_F, file_id, error)
+     !
+     ! Open the dataset.
+     !
+     CALL h5dopen_f(file_id, dsetname, dset_id, error)
+     !
+     ! Create memeory datatyoe to read character member of the compound datatype.
+     !
+     CALL h5tcopy_f(H5T_NATIVE_CHARACTER, dt2_id, error)
+     typesize = 2
+     CALL h5tset_size_f(dt2_id, typesize, error)
+     CALL h5tget_size_f(dt2_id, type_size, error)
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_size, dt1_id, error)
+     offset = 0
+     CALL h5tinsert_f(dt1_id, "char_field", offset, dt2_id, error)
+     !
+     ! Read part of the datatset and display it.
+     !
+     CALL h5dread_f(dset_id, dt1_id, char_member_out, data_dims, error)
+     write(*,*) (char_member_out(i), i=1, dimsize)
+
+     !
+     ! Close all open objects.
+     !
+     CALL h5dclose_f(dset_id, error)
+     CALL h5tclose_f(dt1_id, error)
+     CALL h5tclose_f(dt2_id, error)
+     CALL h5fclose_f(file_id, error)
+     !
+     ! Close FORTRAN interface.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM COMPOUNDEXAMPLE 
+     
+ 

Added: packages/hdf5/branches/upstream/current/fortran/examples/dsetexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/dsetexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/dsetexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,84 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! The following example shows how to create an empty dataset. 
+! It creates a file called 'dsetf.h5', defines the
+! dataset dataspace, creates a dataset which is a 4x6 integer array,
+! and then closes the dataspace, the dataset, and the file.
+!
+
+     PROGRAM DSETEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=8), PARAMETER :: filename = "dsetf.h5" ! File name
+     CHARACTER(LEN=4), PARAMETER :: dsetname = "dset"     ! Dataset name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+     INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+
+
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/4,6/) ! Dataset dimensions
+     INTEGER     ::   rank = 2                        ! Dataset rank
+
+     INTEGER     ::   error ! Error flag
+
+     !
+     ! Initialize FORTRAN interface.
+     !
+     CALL h5open_f(error)
+
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+     ! 
+     ! Create the dataspace.
+     !
+     CALL h5screate_simple_f(rank, dims, dspace_id, error)
+
+     !
+     ! Create the dataset with default properties.
+     !
+     CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INTEGER, dspace_id, &
+                      dset_id, error)
+
+     !   
+     ! End access to the dataset and release resources used by it.
+     ! 
+     CALL h5dclose_f(dset_id, error)
+
+     !
+     ! Terminate access to the data space.
+     !
+     CALL h5sclose_f(dspace_id, error)
+
+     ! 
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+
+     !
+     ! Close FORTRAN interface.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM DSETEXAMPLE 
+     
+ 

Added: packages/hdf5/branches/upstream/current/fortran/examples/fileexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/fileexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/fileexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,48 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! The following example demonstrates how to create and close an HDF5 file.
+! It creates a file called 'file.h5',  and then closes the file.
+!
+
+     PROGRAM FILEEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=8), PARAMETER :: filename = "filef.h5" ! File name
+     INTEGER(HID_T) :: file_id                            ! File identifier
+ 
+     INTEGER     ::   error  ! Error flag
+     
+!
+!    Initialize FORTRAN interface.
+!
+     CALL h5open_f (error)
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+     !
+     ! Terminate access to the file.
+     !
+     CALL h5fclose_f(file_id, error)
+!
+!    Close FORTRAN interface.
+!
+     CALL h5close_f(error)
+     END PROGRAM FILEEXAMPLE 

Added: packages/hdf5/branches/upstream/current/fortran/examples/groupexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/groupexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/groupexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,63 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! The following example shows how to create and close a group. 
+! It creates a file called 'group.h5', creates a group
+! called MyGroup in the root group, and then closes the group and file.
+! 
+
+
+     PROGRAM GROUPEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=9), PARAMETER :: filename = "groupf.h5" ! File name
+     CHARACTER(LEN=7), PARAMETER :: groupname = "MyGroup"  ! Group name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: group_id      ! Group identifier 
+
+     INTEGER     ::   error ! Error flag
+!
+!    Initialize FORTRAN interface.
+!
+     CALL h5open_f(error)     
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+     !
+     ! Create a group named "/MyGroup" in the file.
+     !
+     CALL h5gcreate_f(file_id, groupname, group_id, error)
+
+     !
+     ! Close the group.
+     !
+     CALL h5gclose_f(group_id, error)
+
+     !
+     ! Terminate access to the file.
+     !
+     CALL h5fclose_f(file_id, error)
+!
+!    Close FORTRAN interface.
+!
+     CALL h5close_f(error)
+
+     END PROGRAM GROUPEXAMPLE 

Added: packages/hdf5/branches/upstream/current/fortran/examples/grpdsetexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/grpdsetexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/grpdsetexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,155 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 dataset in a particular group.
+! It opens the file created in the previous example and creates two datasets.
+! Absolute and relative dataset names are used.
+!
+
+
+     PROGRAM GRPDSETEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=10), PARAMETER :: filename = "groupsf.h5" ! File name
+     CHARACTER(LEN=15), PARAMETER :: groupname = "MyGroup/Group_A" ! Group name
+     CHARACTER(LEN=13), PARAMETER :: dsetname1 = "MyGroup/dset1"  ! Dataset name
+     CHARACTER(LEN=5),  PARAMETER :: dsetname2 = "dset2" ! dataset name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: group_id      ! Group identifier 
+     INTEGER(HID_T) :: dataset_id    ! Dataset identifier 
+     INTEGER(HID_T) :: dataspace_id  ! Data space identifier 
+
+     INTEGER     ::  i, j 
+     INTEGER     ::   error ! Error flag
+
+     INTEGER, DIMENSION(3,3) :: dset1_data  ! Data arrays 
+     INTEGER, DIMENSION(2,10) :: dset2_data !
+     
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims1 = (/3,3/) ! Datasets dimensions
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims2 = (/2,10/)!
+     INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+
+     INTEGER     ::   rank = 2 ! Datasets rank
+
+     !
+     !Initialize dset1_data array
+     !
+     do i = 1, 3
+          do j = 1, 3
+               dset1_data(i,j) = j;
+          end do
+     end do
+
+
+     !
+     !Initialize dset2_data array
+     !
+     do i = 1, 2
+          do j = 1, 10
+               dset2_data(i,j) = j;
+          end do
+     end do
+
+     !
+     ! Initialize FORTRAN interface.
+     !
+     CALL h5open_f(error) 
+
+     !
+     ! Open an existing file.
+     !
+     CALL h5fopen_f (filename, H5F_ACC_RDWR_F, file_id, error)
+
+     !
+     ! Create the data space for the first dataset. 
+     !
+     CALL h5screate_simple_f(rank, dims1, dataspace_id, error)
+
+     !
+     ! Create a dataset in group "MyGroup" with default properties.
+     !
+     CALL h5dcreate_f(file_id, dsetname1, H5T_NATIVE_INTEGER, dataspace_id, &
+                      dataset_id, error)
+
+     !
+     ! Write the first dataset.
+     !
+     data_dims(1) = 3
+     data_dims(2) = 3
+     CALL h5dwrite_f(dataset_id, H5T_NATIVE_INTEGER, dset1_data, data_dims, error)
+
+     !
+     ! Close the dataspace for the first dataset.
+     !
+     CALL h5sclose_f(dataspace_id, error)
+
+     !
+     ! Close the first dataset.
+     !
+     CALL h5dclose_f(dataset_id, error)
+
+     !
+     ! Open an existing group in the specified file.
+     !
+     CALL h5gopen_f(file_id, groupname, group_id, error)
+
+     !
+     !Create the data space for the second dataset. 
+     !
+     CALL h5screate_simple_f(rank, dims2, dataspace_id, error)
+
+     !
+     ! Create the second dataset in group "Group_A" with default properties.
+     !
+     CALL h5dcreate_f(group_id, dsetname2, H5T_NATIVE_INTEGER, dataspace_id, &
+                      dataset_id, error)
+
+     !
+     ! Write the second dataset.
+     !
+     data_dims(1) = 2
+     data_dims(1) = 10 
+     CALL h5dwrite_f(dataset_id, H5T_NATIVE_INTEGER, dset2_data, data_dims, error)
+
+     !
+     ! Close the dataspace for the second dataset.
+     !
+     CALL h5sclose_f(dataspace_id, error)
+
+     !
+     ! Close the second dataset.
+     !
+     CALL h5dclose_f(dataset_id, error)
+
+     !
+     ! Close the group.
+     !
+     CALL h5gclose_f(group_id, error)
+
+     !
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+
+     !
+     ! Close FORTRAN interface.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM GRPDSETEXAMPLE 

Added: packages/hdf5/branches/upstream/current/fortran/examples/grpit.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/grpit.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/grpit.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,214 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! In this example we iterate through the members of the groups.
+!
+
+
+     PROGRAM GRPITEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=11), PARAMETER :: filename = "iteratef.h5" ! File name
+     CHARACTER(LEN=7), PARAMETER :: groupname1 = "MyGroup"    ! Group name
+     CHARACTER(LEN=15), PARAMETER :: groupname2 = "Group_A"   ! Group name
+     CHARACTER(LEN=13), PARAMETER :: dsetname1 = "dset1"      ! Dataset name
+     CHARACTER(LEN=5), PARAMETER :: dsetname2 = "dset2"       !
+
+     CHARACTER(LEN=20) :: name_buffer ! Buffer to hold object's name
+     INTEGER :: type ! Type of the object
+     INTEGER :: nmembers ! Number of group members
+
+     INTEGER(HID_T) :: file_id        ! File identifier 
+     INTEGER(HID_T) :: dataset1_id    ! Dataset1 identifier 
+     INTEGER(HID_T) :: dataset2_id    ! Dataset2 identifier 
+     INTEGER(HID_T) :: dataspace1_id  ! Data space identifier 
+     INTEGER(HID_T) :: dataspace2_id  ! Data space identifier 
+     INTEGER(HID_T) :: group1_id, group2_id ! Group identifiers     
+
+     INTEGER     ::  i, j
+
+     INTEGER     ::   error ! Error flag
+
+     INTEGER, DIMENSION(3,3) :: dset1_data  ! Arrays to hold data
+     INTEGER, DIMENSION(2,10) :: dset2_data !
+     
+     
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims1 = (/3,3/) ! Dataset dimensions
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims2 = (/2,10/)!
+     INTEGER     ::   rank = 2 ! Datasets rank 
+     INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+
+     !
+     ! Initialize dset1_data array.
+     !
+     do i = 1, 3
+          do j = 1, 3
+               dset1_data(i,j) = j;
+          end do
+     end do
+
+
+     !
+     ! Initialize dset2_data array.
+     !
+     do i = 1, 2
+          do j = 1, 10
+               dset2_data(i,j) = j;
+          end do
+     end do
+
+     !
+     ! Initialize FORTRAN interface.
+     !
+     CALL h5open_f(error) 
+
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+     !
+     ! Create group "MyGroup" in the root group using absolute name.
+     !
+     CALL h5gcreate_f(file_id, groupname1, group1_id, error)
+
+     !
+     ! Create group "Group_A" in group "MyGroup" using relative name.
+     !
+     CALL h5gcreate_f(group1_id, groupname2, group2_id, error)
+
+     !
+     ! Create the data space for the first dataset. 
+     !
+     CALL h5screate_simple_f(rank, dims1, dataspace1_id, error)
+
+     !
+     ! Create a dataset in group "MyGroup" with default properties.
+     !
+     CALL h5dcreate_f(group1_id, dsetname1, H5T_NATIVE_INTEGER, dataspace1_id, &
+                      dataset1_id, error)
+
+     !
+     ! Write the first dataset.
+     !
+     data_dims(1) = 3
+     data_dims(2) = 3
+     CALL h5dwrite_f(dataset1_id, H5T_NATIVE_INTEGER, dset1_data, data_dims, error)
+
+     !
+     ! Create the data space for the second dataset. 
+     !
+     CALL h5screate_simple_f(rank, dims2, dataspace2_id, error)
+
+     !
+     ! Create the second dataset in group "Group_A" with default properties
+     !
+     CALL h5dcreate_f(group2_id, dsetname2, H5T_NATIVE_INTEGER, dataspace2_id, &
+                     dataset2_id, error)
+
+     !
+     ! Write the second dataset
+     !
+     data_dims(1) = 2
+     data_dims(2) = 10
+     CALL h5dwrite_f(dataset2_id, H5T_NATIVE_INTEGER, dset2_data, data_dims, error)
+
+     !
+     ! Get number of members in the root group.
+     !
+     CALL h5gn_members_f(file_id, "/", nmembers, error)
+     write(*,*) "Number of root group member is " , nmembers
+
+     !
+     ! Print each group member's name and type.
+     !
+     do i = 0, nmembers - 1
+        CALL h5gget_obj_info_idx_f(file_id, "/", i, name_buffer, type, &
+                                    error)
+     write(*,*) name_buffer, type
+     end do
+
+     !
+     ! Get number of members in MyGroup.
+     !
+     CALL h5gn_members_f(file_id, "MyGroup", nmembers, error)
+     write(*,*) "Number of group MyGroup member  is ", nmembers
+
+     !
+     ! Print each group member's name and type in "MyGroup" group.
+     !
+     do i = 0, nmembers - 1
+        CALL h5gget_obj_info_idx_f(file_id, groupname1, i, name_buffer, type, &
+                                    error)
+     write(*,*) name_buffer, type
+     end do
+
+
+     !
+     ! Get number of members in MyGroup/Group_A.
+     !
+     CALL h5gn_members_f(file_id, "MyGroup/Group_A", nmembers, error)
+     write(*,*) "Number of group MyGroup/Group_A member  is ", nmembers
+
+     !
+     ! Print each group member's name and type in "MyGroup/Group_A" group.
+     !
+     do i = 0, nmembers - 1
+        CALL h5gget_obj_info_idx_f(file_id,"MyGroup/Group_A" , i, name_buffer, type, &
+                                    error)
+     write(*,*) name_buffer, type
+     end do
+
+     !
+     ! Close the dataspace for the first dataset.
+     !
+     CALL h5sclose_f(dataspace1_id, error)
+
+     !
+     ! Close the first dataset.
+     !
+     CALL h5dclose_f(dataset1_id, error)
+
+     !
+     ! Close the dataspace for the second dataset.
+     !
+     CALL h5sclose_f(dataspace2_id, error)
+
+     !
+     ! Close the second dataset.
+     !
+     CALL h5dclose_f(dataset2_id, error)
+
+     !
+     ! Close the groups.
+     !
+     CALL h5gclose_f(group1_id, error)
+
+     CALL h5gclose_f(group2_id, error)
+
+     !
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+     
+     !
+     ! Close FORTRAN interface.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM GRPITEXAMPLE 

Added: packages/hdf5/branches/upstream/current/fortran/examples/grpsexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/grpsexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/grpsexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,82 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! The following example code shows how to create groups 
+! using absolute and relative names. It creates three groups:
+! the first two groups are created using the file identifier and 
+! the group absolute names, and the third group is created using 
+! a group identifier and the name relative to the specified group.
+!
+
+
+     PROGRAM GRPSEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=10), PARAMETER :: filename = "groupsf.h5" ! File name
+     CHARACTER(LEN=8),  PARAMETER :: groupname1 = "/MyGroup" ! Group name
+     CHARACTER(LEN=16), PARAMETER :: groupname2 = "/MyGroup/Group_A" 
+                                                             ! Group name
+     CHARACTER(LEN=7),  PARAMETER :: groupname3 = "Group_B"  ! Group name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: group1_id, group2_id, group3_id ! Group identifiers     
+
+     INTEGER     ::   error ! Error flag
+     !
+     ! Initialize FORTRAN interface.
+     !
+     CALL h5open_f(error) 
+     
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+     !
+     ! Create group "MyGroup" in the root group using absolute name.
+     !
+     CALL h5gcreate_f(file_id, groupname1, group1_id, error)
+
+     !
+     ! Create group "Group_A" in group "MyGroup" using absolute name.
+     !
+     CALL h5gcreate_f(file_id, groupname2, group2_id, error)
+
+     !
+     ! Create group "Group_B" in group "MyGroup" using relative name.
+     !
+     CALL h5gcreate_f(group1_id, groupname3, group3_id, error)
+     
+     !
+     ! Close the groups.
+     !
+     CALL h5gclose_f(group1_id, error)
+     CALL h5gclose_f(group2_id, error)
+     CALL h5gclose_f(group3_id, error)
+
+     !
+     ! Terminate access to the file.
+     !
+     CALL h5fclose_f(file_id, error)
+
+     !
+     ! Close FORTRAN interface.
+     !
+     CALL h5close_f(error) 
+
+     END PROGRAM GRPSEXAMPLE 

Added: packages/hdf5/branches/upstream/current/fortran/examples/hyperslab.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/hyperslab.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/hyperslab.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,221 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 write and read a hyperslab.  
+!
+
+     PROGRAM SELECTEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=7), PARAMETER :: filename = "sdsf.h5"  ! File name
+     CHARACTER(LEN=8), PARAMETER :: dsetname = "IntArray" ! Dataset name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+     INTEGER(HID_T) :: dataspace     ! Dataspace identifier 
+     INTEGER(HID_T) :: memspace      ! memspace identifier 
+
+     INTEGER(HSIZE_T), DIMENSION(3) :: dimsm = (/7,7,3/) ! Dataset dimensions
+                                                         ! in memory
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims_out ! Buffer to read in dataset 
+                                                ! dimesions
+     INTEGER(HSIZE_T), DIMENSION(2) :: dimsf = (/5,6/) ! Dataset dimensions.
+
+     INTEGER(HSIZE_T), DIMENSION(2) :: count = (/3,4/) 
+                                            ! Size of the hyperslab in the file
+     INTEGER(HSIZE_T), DIMENSION(2) :: offset = (/1,2/)
+                                            !hyperslab offset in the file 
+     INTEGER(HSIZE_T), DIMENSION(3) :: count_out = (/3,4,1/)
+                                            !Size of the hyperslab in memory 
+     INTEGER(HSIZE_T), DIMENSION(3) :: offset_out = (/3,0,0/)
+                                            !hyperslab offset in memory 
+     INTEGER, DIMENSION(5,6) :: data ! Data to write
+     INTEGER, DIMENSION(7,7,3) :: data_out ! Output buffer
+     INTEGER :: dsetrank = 2 ! Dataset rank ( in file )
+     INTEGER :: memrank = 3  ! Dataset rank ( in memory )
+     INTEGER :: rank 
+     INTEGER :: i, j, k 
+
+     INTEGER :: error, error_n  ! Error flags
+     INTEGER(HSIZE_T), DIMENSION(3) :: data_dims
+
+
+   !
+   ! Write data to the HDF5 file.  
+   !
+
+     !
+     ! Data initialization. 
+     !
+     do i = 1, 5
+          do j = 1, 6
+               data(i,j) = (i-1) + (j-1);
+          end do
+     end do
+     !
+     ! 0,  1,  2,  3,  4,  5
+     ! 1,  2,  3,  4,  5,  6
+     ! 2,  3,  4,  5,  6,  7
+     ! 3,  4,  5,  6,  7,  8
+     ! 4,  5,  6,  7,  8,  9
+     !
+     
+     !
+     ! Initialize FORTRAN interface. 
+     !
+     CALL h5open_f(error) 
+
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+
+     !
+     ! Create the data space for the  dataset. 
+     !
+     CALL h5screate_simple_f(dsetrank, dimsf, dataspace, error)
+
+     !
+     ! Create the dataset with default properties.
+     !
+     CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INTEGER, dataspace, &
+                      dset_id, error)
+
+     !
+     ! Write the dataset.
+     !
+     data_dims(1) = 5
+     data_dims(2) = 6 
+     CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data, data_dims, error)
+
+     !
+     ! Close the dataspace for the dataset.
+     !
+     CALL h5sclose_f(dataspace, error)
+
+     !
+     ! Close the dataset.
+     !
+     CALL h5dclose_f(dset_id, error)
+
+     !
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+
+  !
+  ! This  part of the code reads the hyperslab from the sds.h5 file just 
+  ! created, into a 2-dimensional plane of the 3-dimensional dataset.
+  !
+
+     !
+     ! Initialize data_out array.
+     !
+     do k = 1, 3 
+          do j = 1, 7
+              do i = 1, 7
+                  data_out(i,j,k) = 0;
+              end do
+          end do
+     end do
+
+     !
+     ! Open the file.
+     !
+!     CALL h5fopen_f (filename, H5F_ACC_RDONLY_F, file_id, error)
+     CALL h5fopen_f (filename, H5F_ACC_RDWR_F, file_id, error)
+     write(*,*) error
+       
+     !
+     ! Open the  dataset.
+     !
+     CALL h5dopen_f(file_id, dsetname, dset_id, error)
+
+     !
+     ! Get dataset's dataspace identifier.
+     !
+     CALL h5dget_space_f(dset_id, dataspace, error)
+
+     !
+     ! Select hyperslab in the dataset.
+     !
+     CALL h5sselect_hyperslab_f(dataspace, H5S_SELECT_SET_F, &
+                                offset, count, error) 
+     !
+     ! Create memory dataspace.
+     !
+     CALL h5screate_simple_f(memrank, dimsm, memspace, error)
+
+     !
+     ! Select hyperslab in memory.
+     !
+     CALL h5sselect_hyperslab_f(memspace, H5S_SELECT_SET_F, &
+                                offset_out, count_out, error) 
+
+     !
+     ! Read data from hyperslab in the file into the hyperslab in 
+     ! memory and display.
+     !
+     data_dims(1) = 7
+     data_dims(2) = 7
+     data_dims(3) = 3 
+     CALL H5dread_f(dset_id, H5T_NATIVE_INTEGER, data_out, data_dims, error, &
+                    memspace, dataspace)
+     
+     !
+     ! Display data_out array
+     !
+     do i = 1, 7
+         print *, (data_out(i,j,1), j = 1,7)
+     end do
+
+     ! 0 0 0 0 0 0 0
+     ! 0 0 0 0 0 0 0
+     ! 0 0 0 0 0 0 0
+     ! 3 4 5 6 0 0 0  
+     ! 4 5 6 7 0 0 0
+     ! 5 6 7 8 0 0 0
+     ! 0 0 0 0 0 0 0
+     !
+
+     !
+     ! Close the dataspace for the dataset.
+     !
+     CALL h5sclose_f(dataspace, error)
+
+     !
+     ! Close the memoryspace.
+     !
+     CALL h5sclose_f(memspace, error)
+
+     !
+     ! Close the dataset.
+     !
+     CALL h5dclose_f(dset_id, error)
+
+     !
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+
+     !
+     ! Close FORTRAN interface.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM SELECTEXAMPLE 

Added: packages/hdf5/branches/upstream/current/fortran/examples/mountexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/mountexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/mountexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,204 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+!In the following example we create one file with a group in it, 
+!and another file with a dataset. Mounting is used to
+!access the dataset from the second file as a member of a group 
+!in the first file. 
+!
+
+     PROGRAM MOUNTEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     !
+     ! Filenames are "mount1.h5" and "mount2.h5"
+     !
+     CHARACTER(LEN=9), PARAMETER :: filename1 = "mount1.h5"
+     CHARACTER(LEN=9), PARAMETER :: filename2 = "mount2.h5"
+
+     !
+     !data space rank and dimensions
+     !
+     INTEGER, PARAMETER :: RANK = 2
+     INTEGER, PARAMETER :: NX = 4
+     INTEGER, PARAMETER :: NY = 5
+
+     !
+     ! File identifiers
+     !
+     INTEGER(HID_T) :: file1_id, file2_id  
+     
+     !
+     ! Group identifier
+     !
+     INTEGER(HID_T) :: gid 
+
+     !
+     ! Dataset identifier
+     !
+     INTEGER(HID_T) :: dset_id
+ 
+     !
+     ! Data space identifier
+     !
+     INTEGER(HID_T) :: dataspace
+ 
+     !
+     ! Data type identifier
+     !
+     INTEGER(HID_T) :: dtype_id
+
+     ! 
+     ! The dimensions for the dataset.
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/NX,NY/)
+
+     !
+     ! Flag to check operation success 
+     !         
+     INTEGER     ::   error
+
+     !
+     ! General purpose integer 
+     !         
+     INTEGER     ::   i, j
+
+     !
+     ! Data buffers 
+     !         
+     INTEGER, DIMENSION(NX,NY) :: data_in, data_out
+     INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+
+     !
+     ! Initialize FORTRAN interface. 
+     !
+     CALL h5open_f(error) 
+
+     !
+     ! Initialize data_in buffer
+     !
+     do i = 1, NX
+          do j = 1, NY
+               data_in(i,j) =  (i-1) + (j-1)
+          end do
+     end do
+
+     !
+     ! Create first file "mount1.h5" using default properties.
+     ! 
+     CALL h5fcreate_f(filename1, H5F_ACC_TRUNC_F, file1_id, error)
+
+     !
+     ! Create group "/G" inside file "mount1.h5".
+     ! 
+     CALL h5gcreate_f(file1_id, "/G", gid, error)
+
+     !
+     ! Close file and group identifiers.
+     ! 
+     CALL h5gclose_f(gid, error)
+     CALL h5fclose_f(file1_id, error)
+
+     !
+     ! Create second file "mount2.h5" using default properties.
+     ! 
+     CALL h5fcreate_f(filename2, H5F_ACC_TRUNC_F, file2_id, error)
+
+     !
+     ! Create data space for the dataset. 
+     !
+     CALL h5screate_simple_f(RANK, dims, dataspace, error)
+
+     !
+     ! Create dataset "/D" inside file "mount2.h5".
+     ! 
+     CALL h5dcreate_f(file2_id, "/D", H5T_NATIVE_INTEGER, dataspace, &
+                      dset_id, error)
+ 
+     !
+     ! Write data_in to the dataset
+     !
+     data_dims(1) = NX
+     data_dims(2) = NY
+     CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data_in, data_dims, error)
+
+     !
+     ! Close file, dataset and dataspace identifiers.
+     ! 
+     CALL h5sclose_f(dataspace, error)
+     CALL h5dclose_f(dset_id, error)
+     CALL h5fclose_f(file2_id, error)
+
+     !
+     ! Reopen both files.
+     ! 
+     CALL h5fopen_f (filename1, H5F_ACC_RDWR_F, file1_id, error)
+     CALL h5fopen_f (filename2, H5F_ACC_RDWR_F, file2_id, error)
+
+     !
+     ! Mount the second file under the first file's "/G" group.
+     ! 
+     CALL h5fmount_f (file1_id, "/G", file2_id, error)
+
+
+     !
+     ! Access dataset D in the first file under /G/D name.
+     ! 
+     CALL h5dopen_f(file1_id, "/G/D", dset_id, error)
+
+     !
+     ! Get dataset's data type.
+     ! 
+     CALL h5dget_type_f(dset_id, dtype_id, error)
+
+     !
+     ! Read the dataset.
+     ! 
+     CALL h5dread_f(dset_id, dtype_id, data_out, data_dims, error)
+
+     !
+     ! Print out the data.
+     ! 
+     do i = 1, NX
+          print *, (data_out(i,j), j = 1, NY)
+     end do
+
+
+     !
+     !Close dset_id and dtype_id.
+     ! 
+     CALL h5dclose_f(dset_id, error)
+     CALL h5tclose_f(dtype_id, error)
+
+     !
+     ! Unmount the second file.
+     ! 
+     CALL h5funmount_f(file1_id, "/G", error);
+
+     !
+     ! Close both files.
+     ! 
+     CALL h5fclose_f(file1_id, error)
+     CALL h5fclose_f(file2_id, error)
+     !
+     ! Close FORTRAN interface. 
+     !
+     CALL h5close_f(error) 
+
+     END PROGRAM MOUNTEXAMPLE
+

Added: packages/hdf5/branches/upstream/current/fortran/examples/refobjexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/refobjexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/refobjexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,158 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 program shows how to create and store references to the objects.
+!    Program creates a file, two groups, a dataset to store integer data and 
+!    a dataset to store references to the objects. 
+!    Stored references are used to open the objects they are point to.
+!    Data is written to the dereferenced dataset, and class type is displayed for
+!    the shared datatype.
+!
+     PROGRAM OBJ_REFERENCES 
+
+        USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+     CHARACTER(LEN=10), PARAMETER :: filename = "FORTRAN.h5"  ! File 
+     CHARACTER(LEN=8), PARAMETER :: dsetnamei = "INTEGERS"    ! Dataset with the integer data
+     CHARACTER(LEN=17), PARAMETER :: dsetnamer = "OBJECT_REFERENCES" ! Dataset wtih object
+                                                                     ! references
+     CHARACTER(LEN=6), PARAMETER :: groupname1 = "GROUP1"            ! Groups in the file
+     CHARACTER(LEN=6), PARAMETER :: groupname2 = "GROUP2"            !
+      
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: grp1_id       ! Group identifiers 
+     INTEGER(HID_T) :: grp2_id       !  
+     INTEGER(HID_T) :: dset_id       ! Dataset identifiers 
+     INTEGER(HID_T) :: dsetr_id      !  
+     INTEGER(HID_T) :: type_id       ! Type identifier  
+     INTEGER(HID_T) :: space_id      ! Dataspace identifiers 
+     INTEGER(HID_T) :: spacer_id     !  
+     INTEGER     ::   error
+     INTEGER(HSIZE_T), DIMENSION(1) :: dims = (/5/)
+     INTEGER(HSIZE_T), DIMENSION(1) :: dimsr= (/4/)
+     INTEGER(HSIZE_T), DIMENSION(1) :: my_maxdims = (/5/)
+     INTEGER :: rank = 1 
+     INTEGER :: rankr = 1 
+     TYPE(hobj_ref_t_f), DIMENSION(4) ::  ref
+     TYPE(hobj_ref_t_f), DIMENSION(4) ::  ref_out
+     INTEGER, DIMENSION(5) :: data = (/1, 2, 3, 4, 5/)
+     INTEGER :: class
+     INTEGER(HSIZE_T), DIMENSION(2) :: data_dims, ref_size
+     !
+     !  Initialize FORTRAN interface. 
+     !
+     CALL h5open_f(error)
+     !
+     !  Create a file
+     !
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+                                         ! Default file access and file creation
+                                         ! properties are used. 
+     !
+     !  Create a group in the file
+     !
+     CALL h5gcreate_f(file_id, groupname1, grp1_id, error)
+     !
+     ! Create a group inside the created gorup 
+     !
+     CALL h5gcreate_f(grp1_id, groupname2, grp2_id, error)
+     ! 
+     ! Create dataspaces for datasets   
+     !
+     CALL h5screate_simple_f(rank, dims, space_id, error, maxdims=my_maxdims)
+     CALL h5screate_simple_f(rankr, dimsr, spacer_id, error)
+     !
+     ! Create integer dataset
+     !
+     CALL h5dcreate_f(file_id, dsetnamei, H5T_NATIVE_INTEGER, space_id, &
+                      dset_id, error)
+     !
+     ! Create dataset to store references to the objects
+     !
+     CALL h5dcreate_f(file_id, dsetnamer, H5T_STD_REF_OBJ, spacer_id, &
+                      dsetr_id, error)
+     !
+     ! Create a datatype and store in the file
+     !
+     CALL h5tcopy_f(H5T_NATIVE_REAL, type_id, error)
+     CALL h5tcommit_f(file_id, "MyType", type_id, error)
+     !
+     !  Close dataspaces, groups and integer dataset
+     ! 
+     CALL h5sclose_f(space_id, error)
+     CALL h5sclose_f(spacer_id, error)
+     CALL h5tclose_f(type_id, error)
+     CALL h5dclose_f(dset_id, error)
+     CALL h5gclose_f(grp1_id, error)
+     CALL h5gclose_f(grp2_id, error)
+     !
+     ! Create references to two groups, integer dataset and shared datatype
+     ! and write it to the dataset in the file
+     !
+     CALL h5rcreate_f(file_id, groupname1, ref(1), error)
+     CALL h5rcreate_f(file_id, "/GROUP1/GROUP2", ref(2), error)
+     CALL h5rcreate_f(file_id, dsetnamei, ref(3), error)
+     CALL h5rcreate_f(file_id, "MyType", ref(4), error)
+     ref_size(1) = size(ref)
+     CALL h5dwrite_f(dsetr_id, H5T_STD_REF_OBJ, ref, ref_size, error)
+     !
+     ! Close the dataset
+     !
+     CALL h5dclose_f(dsetr_id, error)
+     ! 
+     ! Reopen the dataset with object references and read references to the buffer
+     !
+     CALL h5dopen_f(file_id, dsetnamer,dsetr_id,error)
+     ref_size(1) = size(ref_out)
+     CALL h5dread_f(dsetr_id, H5T_STD_REF_OBJ, ref_out, ref_size, error)
+     !
+     ! Dereference the third reference. We know that it is a dataset. On practice
+     ! one should use h5rget_object_type_f function to find out
+     ! the type of an object the reference points to.
+     !
+     CALL h5rdereference_f(dsetr_id, ref(3), dset_id, error)
+     !
+     ! Write data to the dataset.
+     !
+     data_dims(1) = size(data)
+     CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data, data_dims, error)
+     if (error .eq. 0) write(*,*) "Data has been successfully written to the dataset "
+     !
+     ! Dereference the fourth reference. We know that it is a datatype. On practice
+     ! one should use h5rget_object_type_f function to find out
+     ! the type of an object the reference points to.
+     !
+     CALL h5rdereference_f(dsetr_id, ref(4), type_id, error)
+     !
+     ! Get datatype class and display it if it is of a FLOAT class.
+     !
+     CALL h5tget_class_f(type_id, class, error)
+     if(class .eq. H5T_FLOAT_F) write(*,*) "Stored datatype is of a FLOAT class" 
+     !
+     ! Close all objects.
+     !
+     CALL h5dclose_f(dset_id, error)
+     CALL h5tclose_f(type_id, error)
+     CALL h5dclose_f(dsetr_id, error)
+     CALL h5fclose_f(file_id, error)
+     !
+     !  Close FORTRAN interface. 
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM OBJ_REFERENCES 
+
+

Added: packages/hdf5/branches/upstream/current/fortran/examples/refregexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/refregexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/refregexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,179 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 program shows how to create, store and dereference references 
+!    to the dataset regions.
+!    Program creates a file and writes two dimensional integer dataset
+!    to it. Then program creates and stores references to the hyperslab
+!    and 3 points selected in the integer dataset, in the second dataset. 
+!    Program reopens the second dataset, reads and dereferences region
+!    references, and then reads and displays selected data from the 
+!    integer dataset.
+!    
+     PROGRAM REG_REFERENCE
+
+        USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+     CHARACTER(LEN=10), PARAMETER :: filename = "FORTRAN.h5"
+     CHARACTER(LEN=6), PARAMETER :: dsetnamev = "MATRIX"
+     CHARACTER(LEN=17), PARAMETER :: dsetnamer = "REGION_REFERENCES"
+      
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: space_id      ! Dataspace identifier 
+     INTEGER(HID_T) :: spacer_id     ! Dataspace identifier 
+     INTEGER(HID_T) :: dsetv_id      ! Dataset identifier 
+     INTEGER(HID_T) :: dsetr_id      ! Dataset identifier 
+     INTEGER     ::   error
+     TYPE(hdset_reg_ref_t_f) , DIMENSION(2) :: ref     ! Buffers to store references
+     TYPE(hdset_reg_ref_t_f) , DIMENSION(2) :: ref_out !
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/2,9/)  ! Datasets dimensions
+     INTEGER(HSIZE_T), DIMENSION(1) :: dimsr = (/2/)   ! 
+     INTEGER(HSIZE_T), DIMENSION(2) :: start
+     INTEGER(HSIZE_T), DIMENSION(2) :: count
+     INTEGER :: rankr = 1 
+     INTEGER :: rank = 2
+     INTEGER , DIMENSION(2,9) ::  data 
+     INTEGER , DIMENSION(2,9) ::  data_out = 0 
+     INTEGER(HSIZE_T) , DIMENSION(2,3) :: coord
+     INTEGER(SIZE_T) ::num_points = 3  ! Number of selected points
+     INTEGER :: i, j
+     INTEGER(HSIZE_T), DIMENSION(1) :: ref_size
+     INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+     coord = reshape((/1,1,2,7,1,9/), (/2,3/))   ! Coordinates of selected points
+     data = reshape ((/1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6/), (/2,9/))
+     !
+     !  Initialize FORTRAN interface.
+     !
+     CALL h5open_f(error)
+     !
+     !  Create a new file.
+     !
+     CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+                                         ! Default file access and file creation
+                                         ! properties are used. 
+     ! 
+     ! Create  dataspaces:
+     ! 
+     ! for dataset with references to dataset regions 
+     !
+     CALL h5screate_simple_f(rankr, dimsr, spacer_id, error)
+     !
+     ! for integer dataset 
+     !
+     CALL h5screate_simple_f(rank, dims, space_id, error)
+     !
+     ! Create  and write datasets:
+     !
+     ! Integer dataset 
+     !
+     CALL h5dcreate_f(file_id, dsetnamev, H5T_NATIVE_INTEGER, space_id, &
+                      dsetv_id, error)
+     data_dims(1) = 2
+     data_dims(2) = 9 
+     CALL h5dwrite_f(dsetv_id, H5T_NATIVE_INTEGER, data, data_dims, error)
+     CALL h5dclose_f(dsetv_id, error)
+     !
+     ! Dataset with references
+     !
+     CALL h5dcreate_f(file_id, dsetnamer, H5T_STD_REF_DSETREG, spacer_id, &
+                      dsetr_id, error)
+     !
+     ! Create a reference to the hyperslab selection.
+     !
+     start(1) = 0 
+     start(2) = 3 
+     count(1) = 2
+     count(2) = 3
+     CALL h5sselect_hyperslab_f(space_id, H5S_SELECT_SET_F, &
+                                start, count, error) 
+     CALL h5rcreate_f(file_id, dsetnamev, space_id, ref(1), error) 
+     !
+     ! Create a reference to elements selection.
+     !
+     CALL h5sselect_none_f(space_id, error)
+     CALL h5sselect_elements_f(space_id, H5S_SELECT_SET_F, rank, num_points,&
+                               coord, error) 
+     CALL h5rcreate_f(file_id, dsetnamev, space_id, ref(2), error) 
+     !
+     ! Write dataset with the references. 
+     !
+     ref_size(1) = size(ref)
+     CALL h5dwrite_f(dsetr_id, H5T_STD_REF_DSETREG, ref, ref_size, error) 
+     !
+     ! Close all objects.
+     !
+     CALL h5sclose_f(space_id, error)
+     CALL h5sclose_f(spacer_id, error)
+     CALL h5dclose_f(dsetr_id, error)
+     CALL h5fclose_f(file_id, error)
+     !
+     ! Reopen the file to test selections.
+     !
+     CALL h5fopen_f (filename, H5F_ACC_RDWR_F, file_id, error)
+     CALL h5dopen_f(file_id, dsetnamer, dsetr_id, error)
+     !
+     ! Read references to the dataset regions.
+     !
+     ref_size(1) = size(ref_out)
+     CALL h5dread_f(dsetr_id, H5T_STD_REF_DSETREG, ref_out, ref_size, error) 
+     ! 
+     ! Dereference the first reference.
+     ! 
+     CALL H5rdereference_f(dsetr_id, ref_out(1), dsetv_id, error)
+     CALL H5rget_region_f(dsetr_id, ref_out(1), space_id, error) 
+     !
+     ! Read selected data from the dataset.
+     !
+     CALL h5dread_f(dsetv_id, H5T_NATIVE_INTEGER, data_out, data_dims, error, &
+                     mem_space_id = space_id, file_space_id = space_id)
+          write(*,*) "Hypeslab selection"
+          write(*,*)
+          do i = 1,2 
+          write(*,*) (data_out (i,j), j = 1,9)
+          enddo
+          write(*,*)
+     CALL h5sclose_f(space_id, error)
+     CALL h5dclose_f(dsetv_id, error)
+     data_out = 0
+     !  
+     ! Dereference the second reference.
+     ! 
+     CALL H5rdereference_f(dsetr_id, ref_out(2), dsetv_id, error)
+     CALL H5rget_region_f(dsetr_id, ref_out(2), space_id, error) 
+     !
+     ! Read selected data from the dataset.
+     !
+     CALL h5dread_f(dsetv_id, H5T_NATIVE_INTEGER, data_out, data_dims, error, &
+                     mem_space_id = space_id, file_space_id = space_id)
+          write(*,*) "Point selection"
+          write(*,*)
+          do i = 1,2 
+          write(*,*) (data_out (i,j), j = 1,9)
+          enddo
+     !
+     ! Close all objects
+     !
+     CALL h5sclose_f(space_id, error)
+     CALL h5dclose_f(dsetv_id, error)
+     CALL h5dclose_f(dsetr_id, error)
+     !
+     ! Close FORTRAN interface.
+     !
+     CALL h5close_f(error) 
+
+     END PROGRAM REG_REFERENCE 
+
+

Added: packages/hdf5/branches/upstream/current/fortran/examples/rwdsetexample.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/rwdsetexample.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/rwdsetexample.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,95 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! 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. 
+!
+
+
+     PROGRAM RWDSETEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=8), PARAMETER :: filename = "dsetf.h5" ! File name
+     CHARACTER(LEN=4), PARAMETER :: dsetname = "dset"     ! Dataset name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+
+     INTEGER     ::   error ! Error flag
+     INTEGER     ::  i, j
+
+     INTEGER, DIMENSION(4,6) :: dset_data, data_out ! Data buffers
+     INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+     
+     !
+     ! Initialize the dset_data array.
+     !
+     do i = 1, 4
+          do j = 1, 6
+               dset_data(i,j) = (i-1)*6 + j;
+          end do
+     end do
+
+     !
+     ! Initialize FORTRAN interface.
+     !
+     CALL h5open_f(error) 
+
+     !
+     ! Open an existing file.
+     !
+     CALL h5fopen_f (filename, H5F_ACC_RDWR_F, file_id, error)
+
+     !
+     ! Open an existing dataset. 
+     !
+     CALL h5dopen_f(file_id, dsetname, dset_id, error)
+
+     !
+     ! Write the dataset.
+     !
+     data_dims(1) = 4
+     data_dims(2) = 6 
+     CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, dset_data, data_dims, error)
+
+     !
+     ! Read the dataset.
+     !
+     CALL h5dread_f(dset_id, H5T_NATIVE_INTEGER, data_out, data_dims, error)
+
+     !
+     ! Close the dataset.
+     !
+     CALL h5dclose_f(dset_id, error)
+
+     !
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+     
+     !
+     ! Close FORTRAN interface.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM RWDSETEXAMPLE 
+
+               
+

Added: packages/hdf5/branches/upstream/current/fortran/examples/selectele.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/examples/selectele.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/examples/selectele.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,303 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 program creates two files, copy1.h5, and copy2.h5. 
+!            In copy1.h5, it creates a 3x4 dataset called 'Copy1',   
+!            and write 0's to this dataset.                         
+!            In copy2.h5, it create a 3x4 dataset called 'Copy2',    
+!            and write 1's to this dataset.                          
+!            It closes both files, reopens both files, selects two   
+!            points in copy1.h5 and writes values to them.  Then it  
+!            uses an H5Scopy to write the same selection to copy2.h5. 
+!            Program reopens the files, and reads and prints the contents of 
+!            the two datasets.   
+!                            
+
+     PROGRAM SELECTEXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=8), PARAMETER :: filename1 = "copy1.h5" ! File name
+     CHARACTER(LEN=8), PARAMETER :: filename2 = "copy2.h5" !
+     CHARACTER(LEN=5), PARAMETER :: dsetname1 = "Copy1"    ! Dataset name
+     CHARACTER(LEN=5), PARAMETER :: dsetname2 = "Copy2"    !
+
+     INTEGER, PARAMETER :: RANK = 2 ! Dataset rank
+
+     INTEGER(SIZE_T), PARAMETER :: NUMP = 2 ! Number of points selected
+
+     INTEGER(HID_T) :: file1_id       ! File1 identifier 
+     INTEGER(HID_T) :: file2_id       ! File2 identifier 
+     INTEGER(HID_T) :: dset1_id       ! Dataset1 identifier 
+     INTEGER(HID_T) :: dset2_id       ! Dataset2 identifier 
+     INTEGER(HID_T) :: dataspace1     ! Dataspace identifier 
+     INTEGER(HID_T) :: dataspace2     ! Dataspace identifier 
+     INTEGER(HID_T) :: memspace       ! memspace identifier 
+
+     INTEGER(HSIZE_T), DIMENSION(1) :: dimsm = (/2/)  
+                                                   ! Memory dataspace dimensions 
+     INTEGER(HSIZE_T), DIMENSION(2) :: dimsf = (/3,4/)
+                                                   ! File dataspace dimensions
+     INTEGER(HSIZE_T), DIMENSION(RANK,NUMP) :: coord ! Elements coordinates
+                                                      ! in the file 
+
+     INTEGER, DIMENSION(3,4) :: buf1, buf2, bufnew ! Data buffers
+     INTEGER, DIMENSION(2) :: val = (/53, 59/) ! Values to write
+ 
+     INTEGER :: memrank = 1  ! Rank of the dataset in memory
+
+     INTEGER :: i, j 
+
+     INTEGER :: error  ! Error flag
+     LOGICAL :: status
+     INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+
+
+   !
+   ! Create two files containing identical datasets. Write 0's to one
+   ! and 1's to the other. 
+   !
+
+     !
+     ! Data initialization. 
+     !
+     do i = 1, 3
+          do j = 1, 4
+               buf1(i,j) = 0;
+          end do
+     end do
+
+     do i = 1, 3
+          do j = 1, 4
+               buf2(i,j) = 1;
+          end do
+     end do
+ 
+     !
+     ! Initialize FORTRAN interface. 
+     !
+     CALL h5open_f(error) 
+
+     !
+     ! Create file1, file2  using default properties.
+     ! 
+     CALL h5fcreate_f(filename1, H5F_ACC_TRUNC_F, file1_id, error)
+
+     CALL h5fcreate_f(filename2, H5F_ACC_TRUNC_F, file2_id, error)
+
+     !
+     ! Create the data space for the  datasets. 
+     !
+     CALL h5screate_simple_f(RANK, dimsf, dataspace1, error)
+
+     CALL h5screate_simple_f(RANK, dimsf, dataspace2, error)
+
+     !
+     ! Create the datasets with default properties.
+     !
+     CALL h5dcreate_f(file1_id, dsetname1, H5T_NATIVE_INTEGER, dataspace1, &
+                      dset1_id, error)
+
+     CALL h5dcreate_f(file2_id, dsetname2, H5T_NATIVE_INTEGER, dataspace2, &
+                      dset2_id, error)
+
+     !
+     ! Write the datasets.
+     !
+     data_dims(1) = 3
+     data_dims(2) = 4 
+     CALL h5dwrite_f(dset1_id, H5T_NATIVE_INTEGER, buf1, data_dims, error)
+
+     CALL h5dwrite_f(dset2_id, H5T_NATIVE_INTEGER, buf2, data_dims, error)
+
+     !
+     ! Close the dataspace for the datasets.
+     !
+     CALL h5sclose_f(dataspace1, error)
+
+     CALL h5sclose_f(dataspace2, error)
+
+     !
+     ! Close the datasets.
+     !
+     CALL h5dclose_f(dset1_id, error)
+
+     CALL h5dclose_f(dset2_id, error)
+
+     !
+     ! Close the files.
+     !
+     CALL h5fclose_f(file1_id, error)
+
+     CALL h5fclose_f(file2_id, error)
+
+  !
+  ! Open the two files.  Select two points in one file, write values to 
+  ! those point locations, then do H5Scopy and write the values to the  
+  ! other file.  Close files.
+  !
+
+     !
+     ! Open the files.
+     !
+     CALL h5fopen_f (filename1, H5F_ACC_RDWR_F, file1_id, error)
+       
+     CALL h5fopen_f (filename2, H5F_ACC_RDWR_F, file2_id, error)
+
+     !
+     ! Open the  datasets.
+     !
+     CALL h5dopen_f(file1_id, dsetname1, dset1_id, error)
+
+     CALL h5dopen_f(file2_id, dsetname2, dset2_id, error)
+
+     !
+     ! Get dataset1's dataspace identifier.
+     !
+     CALL h5dget_space_f(dset1_id, dataspace1, error)
+                                           
+     !
+     ! Create memory dataspace.
+     !
+     CALL h5screate_simple_f(memrank, dimsm, memspace, error)
+                                                               
+     !
+     ! Set the selected point positions. Because Fortran array index starts 
+     ! from 1, so add one to the actual select points in C.
+     !
+     coord(1,1) = 1     
+     coord(2,1) = 2     
+     coord(1,2) = 1     
+     coord(2,2) = 4
+
+     !
+     ! Select the elements in file space.
+     !
+     CALL h5sselect_elements_f(dataspace1, H5S_SELECT_SET_F, RANK, NUMP,&
+                               coord, error)
+
+     !
+     ! Write value into the selected points in dataset1.
+     !
+     data_dims(1) = 2
+     CALL H5dwrite_f(dset1_id, H5T_NATIVE_INTEGER, val, data_dims, error, &
+                    mem_space_id=memspace, file_space_id=dataspace1)
+
+     !
+     ! Copy the daspace1 into dataspace2.
+     !
+     CALL h5scopy_f(dataspace1, dataspace2, error)  
+
+     !
+     ! Write value into the selected points in dataset2.
+     !
+     data_dims(1) = 2
+     CALL H5dwrite_f(dset2_id, H5T_NATIVE_INTEGER, val, data_dims, error, &
+                    mem_space_id=memspace, file_space_id=dataspace2)
+
+     !
+     ! Close the dataspace for the datasets.
+     !
+     CALL h5sclose_f(dataspace1, error)
+
+     CALL h5sclose_f(dataspace2, error)
+
+     !
+     ! Close the memoryspace.
+     !
+     CALL h5sclose_f(memspace, error)
+
+     !
+     ! Close the datasets.
+     !
+     CALL h5dclose_f(dset1_id, error)
+
+     CALL h5dclose_f(dset2_id, error)
+
+     !
+     ! Close the files.
+     !
+     CALL h5fclose_f(file1_id, error)
+
+     CALL h5fclose_f(file2_id, error)
+
+  !
+  ! Open both files and print the contents of the datasets.
+  !
+
+     !
+     ! Open the files.
+     !
+     CALL h5fopen_f (filename1, H5F_ACC_RDWR_F, file1_id, error)
+       
+     CALL h5fopen_f (filename2, H5F_ACC_RDWR_F, file2_id, error)
+
+     !
+     ! Open the  datasets.
+     !
+     CALL h5dopen_f(file1_id, dsetname1, dset1_id, error)
+
+     CALL h5dopen_f(file2_id, dsetname2, dset2_id, error)
+
+     !
+     ! Read dataset from the first file.
+     !
+     data_dims(1) = 3 
+     data_dims(2) = 4 
+     CALL h5dread_f(dset1_id, H5T_NATIVE_INTEGER, bufnew, data_dims, error)
+
+     !
+     ! Display the data read from dataset "Copy1"
+     !
+     write(*,*) "The data in dataset Copy1 is: "
+     do i = 1, 3
+         print *, (bufnew(i,j), j = 1,4)
+     end do
+
+     !
+     ! Read dataset from the second file.
+     !
+     CALL h5dread_f(dset2_id, H5T_NATIVE_INTEGER, bufnew, data_dims, error)
+
+     !
+     ! Display the data read from dataset "Copy2"
+     !
+     write(*,*) "The data in dataset Copy2 is: "
+     do i = 1, 3
+         print *, (bufnew(i,j), j = 1,4)
+     end do
+
+     !
+     ! Close datasets.
+     !
+     CALL h5dclose_f(dset1_id, error)
+
+     CALL h5dclose_f(dset2_id, error)
+
+     !
+     ! Close files.
+     !
+     CALL h5fclose_f(file1_id, error)
+
+     CALL h5fclose_f(file2_id, error)
+
+     !
+     ! Close FORTRAN interface.
+     !
+     CALL h5close_f(error)
+
+     END PROGRAM SELECTEXAMPLE

Added: packages/hdf5/branches/upstream/current/fortran/src/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,594 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+H5f90kit.lo: \
+   $(srcdir)/H5f90kit.c \
+   $(srcdir)/H5f90.h \
+   $(top_srcdir)/fortran/../src/hdf5.h \
+   $(top_srcdir)/fortran/../src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/fortran/../src/H5api_adpt.h \
+   $(top_srcdir)/fortran/../src/H5Apublic.h \
+   $(top_srcdir)/fortran/../src/H5Ipublic.h \
+   $(top_srcdir)/fortran/../src/H5ACpublic.h \
+   $(top_srcdir)/fortran/../src/H5Bpublic.h \
+   $(top_srcdir)/fortran/../src/H5Dpublic.h \
+   $(top_srcdir)/fortran/../src/H5Epublic.h \
+   $(top_srcdir)/fortran/../src/H5Fpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDpublic.h \
+   $(top_srcdir)/fortran/../src/H5Gpublic.h \
+   $(top_srcdir)/fortran/../src/H5Opublic.h \
+   $(top_srcdir)/fortran/../src/H5HGpublic.h \
+   $(top_srcdir)/fortran/../src/H5HLpublic.h \
+   $(top_srcdir)/fortran/../src/H5MMpublic.h \
+   $(top_srcdir)/fortran/../src/H5Ppublic.h \
+   $(top_srcdir)/fortran/../src/H5Zpublic.h \
+   $(top_srcdir)/fortran/../src/H5Rpublic.h \
+   $(top_srcdir)/fortran/../src/H5Spublic.h \
+   $(top_srcdir)/fortran/../src/H5Tpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDcore.h \
+   $(top_srcdir)/fortran/../src/H5FDfamily.h \
+   $(top_srcdir)/fortran/../src/H5FDgass.h \
+   $(top_srcdir)/fortran/../src/H5FDlog.h \
+   $(top_srcdir)/fortran/../src/H5FDmpi.h \
+   $(top_srcdir)/fortran/../src/H5FDmpio.h \
+   $(top_srcdir)/fortran/../src/H5FDmpiposix.h \
+   $(top_srcdir)/fortran/../src/H5FDmulti.h \
+   $(top_srcdir)/fortran/../src/H5FDsec2.h \
+   $(top_srcdir)/fortran/../src/H5FDsrb.h \
+   $(top_srcdir)/fortran/../src/H5FDstdio.h \
+   $(top_srcdir)/fortran/../src/H5FDstream.h \
+   $(srcdir)/H5f90i.h \
+   $(top_srcdir)/fortran/../src/H5private.h \
+   $(top_srcdir)/fortran/../src/H5MPprivate.h \
+   $(srcdir)/H5f90proto.h
+H5_f.lo: \
+   $(srcdir)/H5_f.c \
+   $(srcdir)/H5f90.h \
+   $(top_srcdir)/fortran/../src/hdf5.h \
+   $(top_srcdir)/fortran/../src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/fortran/../src/H5api_adpt.h \
+   $(top_srcdir)/fortran/../src/H5Apublic.h \
+   $(top_srcdir)/fortran/../src/H5Ipublic.h \
+   $(top_srcdir)/fortran/../src/H5ACpublic.h \
+   $(top_srcdir)/fortran/../src/H5Bpublic.h \
+   $(top_srcdir)/fortran/../src/H5Dpublic.h \
+   $(top_srcdir)/fortran/../src/H5Epublic.h \
+   $(top_srcdir)/fortran/../src/H5Fpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDpublic.h \
+   $(top_srcdir)/fortran/../src/H5Gpublic.h \
+   $(top_srcdir)/fortran/../src/H5Opublic.h \
+   $(top_srcdir)/fortran/../src/H5HGpublic.h \
+   $(top_srcdir)/fortran/../src/H5HLpublic.h \
+   $(top_srcdir)/fortran/../src/H5MMpublic.h \
+   $(top_srcdir)/fortran/../src/H5Ppublic.h \
+   $(top_srcdir)/fortran/../src/H5Zpublic.h \
+   $(top_srcdir)/fortran/../src/H5Rpublic.h \
+   $(top_srcdir)/fortran/../src/H5Spublic.h \
+   $(top_srcdir)/fortran/../src/H5Tpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDcore.h \
+   $(top_srcdir)/fortran/../src/H5FDfamily.h \
+   $(top_srcdir)/fortran/../src/H5FDgass.h \
+   $(top_srcdir)/fortran/../src/H5FDlog.h \
+   $(top_srcdir)/fortran/../src/H5FDmpi.h \
+   $(top_srcdir)/fortran/../src/H5FDmpio.h \
+   $(top_srcdir)/fortran/../src/H5FDmpiposix.h \
+   $(top_srcdir)/fortran/../src/H5FDmulti.h \
+   $(top_srcdir)/fortran/../src/H5FDsec2.h \
+   $(top_srcdir)/fortran/../src/H5FDsrb.h \
+   $(top_srcdir)/fortran/../src/H5FDstdio.h \
+   $(top_srcdir)/fortran/../src/H5FDstream.h \
+   $(srcdir)/H5f90i.h \
+   $(top_srcdir)/fortran/../src/H5private.h \
+   $(top_srcdir)/fortran/../src/H5MPprivate.h \
+   $(srcdir)/H5f90proto.h
+H5Rf.lo: \
+   $(srcdir)/H5Rf.c \
+   $(srcdir)/H5f90.h \
+   $(top_srcdir)/fortran/../src/hdf5.h \
+   $(top_srcdir)/fortran/../src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/fortran/../src/H5api_adpt.h \
+   $(top_srcdir)/fortran/../src/H5Apublic.h \
+   $(top_srcdir)/fortran/../src/H5Ipublic.h \
+   $(top_srcdir)/fortran/../src/H5ACpublic.h \
+   $(top_srcdir)/fortran/../src/H5Bpublic.h \
+   $(top_srcdir)/fortran/../src/H5Dpublic.h \
+   $(top_srcdir)/fortran/../src/H5Epublic.h \
+   $(top_srcdir)/fortran/../src/H5Fpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDpublic.h \
+   $(top_srcdir)/fortran/../src/H5Gpublic.h \
+   $(top_srcdir)/fortran/../src/H5Opublic.h \
+   $(top_srcdir)/fortran/../src/H5HGpublic.h \
+   $(top_srcdir)/fortran/../src/H5HLpublic.h \
+   $(top_srcdir)/fortran/../src/H5MMpublic.h \
+   $(top_srcdir)/fortran/../src/H5Ppublic.h \
+   $(top_srcdir)/fortran/../src/H5Zpublic.h \
+   $(top_srcdir)/fortran/../src/H5Rpublic.h \
+   $(top_srcdir)/fortran/../src/H5Spublic.h \
+   $(top_srcdir)/fortran/../src/H5Tpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDcore.h \
+   $(top_srcdir)/fortran/../src/H5FDfamily.h \
+   $(top_srcdir)/fortran/../src/H5FDgass.h \
+   $(top_srcdir)/fortran/../src/H5FDlog.h \
+   $(top_srcdir)/fortran/../src/H5FDmpi.h \
+   $(top_srcdir)/fortran/../src/H5FDmpio.h \
+   $(top_srcdir)/fortran/../src/H5FDmpiposix.h \
+   $(top_srcdir)/fortran/../src/H5FDmulti.h \
+   $(top_srcdir)/fortran/../src/H5FDsec2.h \
+   $(top_srcdir)/fortran/../src/H5FDsrb.h \
+   $(top_srcdir)/fortran/../src/H5FDstdio.h \
+   $(top_srcdir)/fortran/../src/H5FDstream.h \
+   $(srcdir)/H5f90i.h \
+   $(top_srcdir)/fortran/../src/H5private.h \
+   $(top_srcdir)/fortran/../src/H5MPprivate.h \
+   $(srcdir)/H5f90proto.h
+H5Ff.lo: \
+   $(srcdir)/H5Ff.c \
+   $(srcdir)/H5f90.h \
+   $(top_srcdir)/fortran/../src/hdf5.h \
+   $(top_srcdir)/fortran/../src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/fortran/../src/H5api_adpt.h \
+   $(top_srcdir)/fortran/../src/H5Apublic.h \
+   $(top_srcdir)/fortran/../src/H5Ipublic.h \
+   $(top_srcdir)/fortran/../src/H5ACpublic.h \
+   $(top_srcdir)/fortran/../src/H5Bpublic.h \
+   $(top_srcdir)/fortran/../src/H5Dpublic.h \
+   $(top_srcdir)/fortran/../src/H5Epublic.h \
+   $(top_srcdir)/fortran/../src/H5Fpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDpublic.h \
+   $(top_srcdir)/fortran/../src/H5Gpublic.h \
+   $(top_srcdir)/fortran/../src/H5Opublic.h \
+   $(top_srcdir)/fortran/../src/H5HGpublic.h \
+   $(top_srcdir)/fortran/../src/H5HLpublic.h \
+   $(top_srcdir)/fortran/../src/H5MMpublic.h \
+   $(top_srcdir)/fortran/../src/H5Ppublic.h \
+   $(top_srcdir)/fortran/../src/H5Zpublic.h \
+   $(top_srcdir)/fortran/../src/H5Rpublic.h \
+   $(top_srcdir)/fortran/../src/H5Spublic.h \
+   $(top_srcdir)/fortran/../src/H5Tpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDcore.h \
+   $(top_srcdir)/fortran/../src/H5FDfamily.h \
+   $(top_srcdir)/fortran/../src/H5FDgass.h \
+   $(top_srcdir)/fortran/../src/H5FDlog.h \
+   $(top_srcdir)/fortran/../src/H5FDmpi.h \
+   $(top_srcdir)/fortran/../src/H5FDmpio.h \
+   $(top_srcdir)/fortran/../src/H5FDmpiposix.h \
+   $(top_srcdir)/fortran/../src/H5FDmulti.h \
+   $(top_srcdir)/fortran/../src/H5FDsec2.h \
+   $(top_srcdir)/fortran/../src/H5FDsrb.h \
+   $(top_srcdir)/fortran/../src/H5FDstdio.h \
+   $(top_srcdir)/fortran/../src/H5FDstream.h \
+   $(srcdir)/H5f90i.h \
+   $(top_srcdir)/fortran/../src/H5private.h \
+   $(top_srcdir)/fortran/../src/H5MPprivate.h \
+   $(srcdir)/H5f90proto.h \
+   $(top_srcdir)/fortran/../src/H5Eprivate.h
+H5Sf.lo: \
+   $(srcdir)/H5Sf.c \
+   $(srcdir)/H5f90.h \
+   $(top_srcdir)/fortran/../src/hdf5.h \
+   $(top_srcdir)/fortran/../src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/fortran/../src/H5api_adpt.h \
+   $(top_srcdir)/fortran/../src/H5Apublic.h \
+   $(top_srcdir)/fortran/../src/H5Ipublic.h \
+   $(top_srcdir)/fortran/../src/H5ACpublic.h \
+   $(top_srcdir)/fortran/../src/H5Bpublic.h \
+   $(top_srcdir)/fortran/../src/H5Dpublic.h \
+   $(top_srcdir)/fortran/../src/H5Epublic.h \
+   $(top_srcdir)/fortran/../src/H5Fpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDpublic.h \
+   $(top_srcdir)/fortran/../src/H5Gpublic.h \
+   $(top_srcdir)/fortran/../src/H5Opublic.h \
+   $(top_srcdir)/fortran/../src/H5HGpublic.h \
+   $(top_srcdir)/fortran/../src/H5HLpublic.h \
+   $(top_srcdir)/fortran/../src/H5MMpublic.h \
+   $(top_srcdir)/fortran/../src/H5Ppublic.h \
+   $(top_srcdir)/fortran/../src/H5Zpublic.h \
+   $(top_srcdir)/fortran/../src/H5Rpublic.h \
+   $(top_srcdir)/fortran/../src/H5Spublic.h \
+   $(top_srcdir)/fortran/../src/H5Tpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDcore.h \
+   $(top_srcdir)/fortran/../src/H5FDfamily.h \
+   $(top_srcdir)/fortran/../src/H5FDgass.h \
+   $(top_srcdir)/fortran/../src/H5FDlog.h \
+   $(top_srcdir)/fortran/../src/H5FDmpi.h \
+   $(top_srcdir)/fortran/../src/H5FDmpio.h \
+   $(top_srcdir)/fortran/../src/H5FDmpiposix.h \
+   $(top_srcdir)/fortran/../src/H5FDmulti.h \
+   $(top_srcdir)/fortran/../src/H5FDsec2.h \
+   $(top_srcdir)/fortran/../src/H5FDsrb.h \
+   $(top_srcdir)/fortran/../src/H5FDstdio.h \
+   $(top_srcdir)/fortran/../src/H5FDstream.h \
+   $(srcdir)/H5f90i.h \
+   $(top_srcdir)/fortran/../src/H5private.h \
+   $(top_srcdir)/fortran/../src/H5MPprivate.h \
+   $(srcdir)/H5f90proto.h
+H5Df.lo: \
+   $(srcdir)/H5Df.c \
+   $(srcdir)/H5f90.h \
+   $(top_srcdir)/fortran/../src/hdf5.h \
+   $(top_srcdir)/fortran/../src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/fortran/../src/H5api_adpt.h \
+   $(top_srcdir)/fortran/../src/H5Apublic.h \
+   $(top_srcdir)/fortran/../src/H5Ipublic.h \
+   $(top_srcdir)/fortran/../src/H5ACpublic.h \
+   $(top_srcdir)/fortran/../src/H5Bpublic.h \
+   $(top_srcdir)/fortran/../src/H5Dpublic.h \
+   $(top_srcdir)/fortran/../src/H5Epublic.h \
+   $(top_srcdir)/fortran/../src/H5Fpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDpublic.h \
+   $(top_srcdir)/fortran/../src/H5Gpublic.h \
+   $(top_srcdir)/fortran/../src/H5Opublic.h \
+   $(top_srcdir)/fortran/../src/H5HGpublic.h \
+   $(top_srcdir)/fortran/../src/H5HLpublic.h \
+   $(top_srcdir)/fortran/../src/H5MMpublic.h \
+   $(top_srcdir)/fortran/../src/H5Ppublic.h \
+   $(top_srcdir)/fortran/../src/H5Zpublic.h \
+   $(top_srcdir)/fortran/../src/H5Rpublic.h \
+   $(top_srcdir)/fortran/../src/H5Spublic.h \
+   $(top_srcdir)/fortran/../src/H5Tpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDcore.h \
+   $(top_srcdir)/fortran/../src/H5FDfamily.h \
+   $(top_srcdir)/fortran/../src/H5FDgass.h \
+   $(top_srcdir)/fortran/../src/H5FDlog.h \
+   $(top_srcdir)/fortran/../src/H5FDmpi.h \
+   $(top_srcdir)/fortran/../src/H5FDmpio.h \
+   $(top_srcdir)/fortran/../src/H5FDmpiposix.h \
+   $(top_srcdir)/fortran/../src/H5FDmulti.h \
+   $(top_srcdir)/fortran/../src/H5FDsec2.h \
+   $(top_srcdir)/fortran/../src/H5FDsrb.h \
+   $(top_srcdir)/fortran/../src/H5FDstdio.h \
+   $(top_srcdir)/fortran/../src/H5FDstream.h \
+   $(srcdir)/H5f90i.h \
+   $(top_srcdir)/fortran/../src/H5private.h \
+   $(top_srcdir)/fortran/../src/H5MPprivate.h \
+   $(srcdir)/H5f90proto.h
+H5Gf.lo: \
+   $(srcdir)/H5Gf.c \
+   $(srcdir)/H5f90.h \
+   $(top_srcdir)/fortran/../src/hdf5.h \
+   $(top_srcdir)/fortran/../src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/fortran/../src/H5api_adpt.h \
+   $(top_srcdir)/fortran/../src/H5Apublic.h \
+   $(top_srcdir)/fortran/../src/H5Ipublic.h \
+   $(top_srcdir)/fortran/../src/H5ACpublic.h \
+   $(top_srcdir)/fortran/../src/H5Bpublic.h \
+   $(top_srcdir)/fortran/../src/H5Dpublic.h \
+   $(top_srcdir)/fortran/../src/H5Epublic.h \
+   $(top_srcdir)/fortran/../src/H5Fpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDpublic.h \
+   $(top_srcdir)/fortran/../src/H5Gpublic.h \
+   $(top_srcdir)/fortran/../src/H5Opublic.h \
+   $(top_srcdir)/fortran/../src/H5HGpublic.h \
+   $(top_srcdir)/fortran/../src/H5HLpublic.h \
+   $(top_srcdir)/fortran/../src/H5MMpublic.h \
+   $(top_srcdir)/fortran/../src/H5Ppublic.h \
+   $(top_srcdir)/fortran/../src/H5Zpublic.h \
+   $(top_srcdir)/fortran/../src/H5Rpublic.h \
+   $(top_srcdir)/fortran/../src/H5Spublic.h \
+   $(top_srcdir)/fortran/../src/H5Tpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDcore.h \
+   $(top_srcdir)/fortran/../src/H5FDfamily.h \
+   $(top_srcdir)/fortran/../src/H5FDgass.h \
+   $(top_srcdir)/fortran/../src/H5FDlog.h \
+   $(top_srcdir)/fortran/../src/H5FDmpi.h \
+   $(top_srcdir)/fortran/../src/H5FDmpio.h \
+   $(top_srcdir)/fortran/../src/H5FDmpiposix.h \
+   $(top_srcdir)/fortran/../src/H5FDmulti.h \
+   $(top_srcdir)/fortran/../src/H5FDsec2.h \
+   $(top_srcdir)/fortran/../src/H5FDsrb.h \
+   $(top_srcdir)/fortran/../src/H5FDstdio.h \
+   $(top_srcdir)/fortran/../src/H5FDstream.h \
+   $(srcdir)/H5f90i.h \
+   $(top_srcdir)/fortran/../src/H5private.h \
+   $(top_srcdir)/fortran/../src/H5MPprivate.h \
+   $(srcdir)/H5f90proto.h
+H5Af.lo: \
+   $(srcdir)/H5Af.c \
+   $(srcdir)/H5f90.h \
+   $(top_srcdir)/fortran/../src/hdf5.h \
+   $(top_srcdir)/fortran/../src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/fortran/../src/H5api_adpt.h \
+   $(top_srcdir)/fortran/../src/H5Apublic.h \
+   $(top_srcdir)/fortran/../src/H5Ipublic.h \
+   $(top_srcdir)/fortran/../src/H5ACpublic.h \
+   $(top_srcdir)/fortran/../src/H5Bpublic.h \
+   $(top_srcdir)/fortran/../src/H5Dpublic.h \
+   $(top_srcdir)/fortran/../src/H5Epublic.h \
+   $(top_srcdir)/fortran/../src/H5Fpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDpublic.h \
+   $(top_srcdir)/fortran/../src/H5Gpublic.h \
+   $(top_srcdir)/fortran/../src/H5Opublic.h \
+   $(top_srcdir)/fortran/../src/H5HGpublic.h \
+   $(top_srcdir)/fortran/../src/H5HLpublic.h \
+   $(top_srcdir)/fortran/../src/H5MMpublic.h \
+   $(top_srcdir)/fortran/../src/H5Ppublic.h \
+   $(top_srcdir)/fortran/../src/H5Zpublic.h \
+   $(top_srcdir)/fortran/../src/H5Rpublic.h \
+   $(top_srcdir)/fortran/../src/H5Spublic.h \
+   $(top_srcdir)/fortran/../src/H5Tpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDcore.h \
+   $(top_srcdir)/fortran/../src/H5FDfamily.h \
+   $(top_srcdir)/fortran/../src/H5FDgass.h \
+   $(top_srcdir)/fortran/../src/H5FDlog.h \
+   $(top_srcdir)/fortran/../src/H5FDmpi.h \
+   $(top_srcdir)/fortran/../src/H5FDmpio.h \
+   $(top_srcdir)/fortran/../src/H5FDmpiposix.h \
+   $(top_srcdir)/fortran/../src/H5FDmulti.h \
+   $(top_srcdir)/fortran/../src/H5FDsec2.h \
+   $(top_srcdir)/fortran/../src/H5FDsrb.h \
+   $(top_srcdir)/fortran/../src/H5FDstdio.h \
+   $(top_srcdir)/fortran/../src/H5FDstream.h \
+   $(srcdir)/H5f90i.h \
+   $(top_srcdir)/fortran/../src/H5private.h \
+   $(top_srcdir)/fortran/../src/H5MPprivate.h \
+   $(srcdir)/H5f90proto.h \
+   $(top_srcdir)/fortran/../src/H5Eprivate.h
+H5Tf.lo: \
+   $(srcdir)/H5Tf.c \
+   $(srcdir)/H5f90.h \
+   $(top_srcdir)/fortran/../src/hdf5.h \
+   $(top_srcdir)/fortran/../src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/fortran/../src/H5api_adpt.h \
+   $(top_srcdir)/fortran/../src/H5Apublic.h \
+   $(top_srcdir)/fortran/../src/H5Ipublic.h \
+   $(top_srcdir)/fortran/../src/H5ACpublic.h \
+   $(top_srcdir)/fortran/../src/H5Bpublic.h \
+   $(top_srcdir)/fortran/../src/H5Dpublic.h \
+   $(top_srcdir)/fortran/../src/H5Epublic.h \
+   $(top_srcdir)/fortran/../src/H5Fpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDpublic.h \
+   $(top_srcdir)/fortran/../src/H5Gpublic.h \
+   $(top_srcdir)/fortran/../src/H5Opublic.h \
+   $(top_srcdir)/fortran/../src/H5HGpublic.h \
+   $(top_srcdir)/fortran/../src/H5HLpublic.h \
+   $(top_srcdir)/fortran/../src/H5MMpublic.h \
+   $(top_srcdir)/fortran/../src/H5Ppublic.h \
+   $(top_srcdir)/fortran/../src/H5Zpublic.h \
+   $(top_srcdir)/fortran/../src/H5Rpublic.h \
+   $(top_srcdir)/fortran/../src/H5Spublic.h \
+   $(top_srcdir)/fortran/../src/H5Tpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDcore.h \
+   $(top_srcdir)/fortran/../src/H5FDfamily.h \
+   $(top_srcdir)/fortran/../src/H5FDgass.h \
+   $(top_srcdir)/fortran/../src/H5FDlog.h \
+   $(top_srcdir)/fortran/../src/H5FDmpi.h \
+   $(top_srcdir)/fortran/../src/H5FDmpio.h \
+   $(top_srcdir)/fortran/../src/H5FDmpiposix.h \
+   $(top_srcdir)/fortran/../src/H5FDmulti.h \
+   $(top_srcdir)/fortran/../src/H5FDsec2.h \
+   $(top_srcdir)/fortran/../src/H5FDsrb.h \
+   $(top_srcdir)/fortran/../src/H5FDstdio.h \
+   $(top_srcdir)/fortran/../src/H5FDstream.h \
+   $(srcdir)/H5f90i.h \
+   $(top_srcdir)/fortran/../src/H5private.h \
+   $(top_srcdir)/fortran/../src/H5MPprivate.h \
+   $(srcdir)/H5f90proto.h
+H5Pf.lo: \
+   $(srcdir)/H5Pf.c \
+   $(srcdir)/H5f90.h \
+   $(top_srcdir)/fortran/../src/hdf5.h \
+   $(top_srcdir)/fortran/../src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/fortran/../src/H5api_adpt.h \
+   $(top_srcdir)/fortran/../src/H5Apublic.h \
+   $(top_srcdir)/fortran/../src/H5Ipublic.h \
+   $(top_srcdir)/fortran/../src/H5ACpublic.h \
+   $(top_srcdir)/fortran/../src/H5Bpublic.h \
+   $(top_srcdir)/fortran/../src/H5Dpublic.h \
+   $(top_srcdir)/fortran/../src/H5Epublic.h \
+   $(top_srcdir)/fortran/../src/H5Fpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDpublic.h \
+   $(top_srcdir)/fortran/../src/H5Gpublic.h \
+   $(top_srcdir)/fortran/../src/H5Opublic.h \
+   $(top_srcdir)/fortran/../src/H5HGpublic.h \
+   $(top_srcdir)/fortran/../src/H5HLpublic.h \
+   $(top_srcdir)/fortran/../src/H5MMpublic.h \
+   $(top_srcdir)/fortran/../src/H5Ppublic.h \
+   $(top_srcdir)/fortran/../src/H5Zpublic.h \
+   $(top_srcdir)/fortran/../src/H5Rpublic.h \
+   $(top_srcdir)/fortran/../src/H5Spublic.h \
+   $(top_srcdir)/fortran/../src/H5Tpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDcore.h \
+   $(top_srcdir)/fortran/../src/H5FDfamily.h \
+   $(top_srcdir)/fortran/../src/H5FDgass.h \
+   $(top_srcdir)/fortran/../src/H5FDlog.h \
+   $(top_srcdir)/fortran/../src/H5FDmpi.h \
+   $(top_srcdir)/fortran/../src/H5FDmpio.h \
+   $(top_srcdir)/fortran/../src/H5FDmpiposix.h \
+   $(top_srcdir)/fortran/../src/H5FDmulti.h \
+   $(top_srcdir)/fortran/../src/H5FDsec2.h \
+   $(top_srcdir)/fortran/../src/H5FDsrb.h \
+   $(top_srcdir)/fortran/../src/H5FDstdio.h \
+   $(top_srcdir)/fortran/../src/H5FDstream.h \
+   $(srcdir)/H5f90i.h \
+   $(top_srcdir)/fortran/../src/H5private.h \
+   $(top_srcdir)/fortran/../src/H5MPprivate.h \
+   $(srcdir)/H5f90proto.h
+H5If.lo: \
+   $(srcdir)/H5If.c \
+   $(srcdir)/H5f90.h \
+   $(top_srcdir)/fortran/../src/hdf5.h \
+   $(top_srcdir)/fortran/../src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/fortran/../src/H5api_adpt.h \
+   $(top_srcdir)/fortran/../src/H5Apublic.h \
+   $(top_srcdir)/fortran/../src/H5Ipublic.h \
+   $(top_srcdir)/fortran/../src/H5ACpublic.h \
+   $(top_srcdir)/fortran/../src/H5Bpublic.h \
+   $(top_srcdir)/fortran/../src/H5Dpublic.h \
+   $(top_srcdir)/fortran/../src/H5Epublic.h \
+   $(top_srcdir)/fortran/../src/H5Fpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDpublic.h \
+   $(top_srcdir)/fortran/../src/H5Gpublic.h \
+   $(top_srcdir)/fortran/../src/H5Opublic.h \
+   $(top_srcdir)/fortran/../src/H5HGpublic.h \
+   $(top_srcdir)/fortran/../src/H5HLpublic.h \
+   $(top_srcdir)/fortran/../src/H5MMpublic.h \
+   $(top_srcdir)/fortran/../src/H5Ppublic.h \
+   $(top_srcdir)/fortran/../src/H5Zpublic.h \
+   $(top_srcdir)/fortran/../src/H5Rpublic.h \
+   $(top_srcdir)/fortran/../src/H5Spublic.h \
+   $(top_srcdir)/fortran/../src/H5Tpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDcore.h \
+   $(top_srcdir)/fortran/../src/H5FDfamily.h \
+   $(top_srcdir)/fortran/../src/H5FDgass.h \
+   $(top_srcdir)/fortran/../src/H5FDlog.h \
+   $(top_srcdir)/fortran/../src/H5FDmpi.h \
+   $(top_srcdir)/fortran/../src/H5FDmpio.h \
+   $(top_srcdir)/fortran/../src/H5FDmpiposix.h \
+   $(top_srcdir)/fortran/../src/H5FDmulti.h \
+   $(top_srcdir)/fortran/../src/H5FDsec2.h \
+   $(top_srcdir)/fortran/../src/H5FDsrb.h \
+   $(top_srcdir)/fortran/../src/H5FDstdio.h \
+   $(top_srcdir)/fortran/../src/H5FDstream.h \
+   $(srcdir)/H5f90i.h \
+   $(top_srcdir)/fortran/../src/H5private.h \
+   $(top_srcdir)/fortran/../src/H5MPprivate.h \
+   $(srcdir)/H5f90proto.h \
+   $(top_srcdir)/fortran/../src/H5Eprivate.h
+H5Ef.lo: \
+   $(srcdir)/H5Ef.c \
+   $(srcdir)/H5f90.h \
+   $(top_srcdir)/fortran/../src/hdf5.h \
+   $(top_srcdir)/fortran/../src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/fortran/../src/H5api_adpt.h \
+   $(top_srcdir)/fortran/../src/H5Apublic.h \
+   $(top_srcdir)/fortran/../src/H5Ipublic.h \
+   $(top_srcdir)/fortran/../src/H5ACpublic.h \
+   $(top_srcdir)/fortran/../src/H5Bpublic.h \
+   $(top_srcdir)/fortran/../src/H5Dpublic.h \
+   $(top_srcdir)/fortran/../src/H5Epublic.h \
+   $(top_srcdir)/fortran/../src/H5Fpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDpublic.h \
+   $(top_srcdir)/fortran/../src/H5Gpublic.h \
+   $(top_srcdir)/fortran/../src/H5Opublic.h \
+   $(top_srcdir)/fortran/../src/H5HGpublic.h \
+   $(top_srcdir)/fortran/../src/H5HLpublic.h \
+   $(top_srcdir)/fortran/../src/H5MMpublic.h \
+   $(top_srcdir)/fortran/../src/H5Ppublic.h \
+   $(top_srcdir)/fortran/../src/H5Zpublic.h \
+   $(top_srcdir)/fortran/../src/H5Rpublic.h \
+   $(top_srcdir)/fortran/../src/H5Spublic.h \
+   $(top_srcdir)/fortran/../src/H5Tpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDcore.h \
+   $(top_srcdir)/fortran/../src/H5FDfamily.h \
+   $(top_srcdir)/fortran/../src/H5FDgass.h \
+   $(top_srcdir)/fortran/../src/H5FDlog.h \
+   $(top_srcdir)/fortran/../src/H5FDmpi.h \
+   $(top_srcdir)/fortran/../src/H5FDmpio.h \
+   $(top_srcdir)/fortran/../src/H5FDmpiposix.h \
+   $(top_srcdir)/fortran/../src/H5FDmulti.h \
+   $(top_srcdir)/fortran/../src/H5FDsec2.h \
+   $(top_srcdir)/fortran/../src/H5FDsrb.h \
+   $(top_srcdir)/fortran/../src/H5FDstdio.h \
+   $(top_srcdir)/fortran/../src/H5FDstream.h \
+   $(srcdir)/H5f90i.h \
+   $(top_srcdir)/fortran/../src/H5private.h \
+   $(top_srcdir)/fortran/../src/H5MPprivate.h \
+   $(srcdir)/H5f90proto.h
+H5Zf.lo: \
+   $(srcdir)/H5Zf.c \
+   $(srcdir)/H5f90.h \
+   $(top_srcdir)/fortran/../src/hdf5.h \
+   $(top_srcdir)/fortran/../src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/fortran/../src/H5api_adpt.h \
+   $(top_srcdir)/fortran/../src/H5Apublic.h \
+   $(top_srcdir)/fortran/../src/H5Ipublic.h \
+   $(top_srcdir)/fortran/../src/H5ACpublic.h \
+   $(top_srcdir)/fortran/../src/H5Bpublic.h \
+   $(top_srcdir)/fortran/../src/H5Dpublic.h \
+   $(top_srcdir)/fortran/../src/H5Epublic.h \
+   $(top_srcdir)/fortran/../src/H5Fpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDpublic.h \
+   $(top_srcdir)/fortran/../src/H5Gpublic.h \
+   $(top_srcdir)/fortran/../src/H5Opublic.h \
+   $(top_srcdir)/fortran/../src/H5HGpublic.h \
+   $(top_srcdir)/fortran/../src/H5HLpublic.h \
+   $(top_srcdir)/fortran/../src/H5MMpublic.h \
+   $(top_srcdir)/fortran/../src/H5Ppublic.h \
+   $(top_srcdir)/fortran/../src/H5Zpublic.h \
+   $(top_srcdir)/fortran/../src/H5Rpublic.h \
+   $(top_srcdir)/fortran/../src/H5Spublic.h \
+   $(top_srcdir)/fortran/../src/H5Tpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDcore.h \
+   $(top_srcdir)/fortran/../src/H5FDfamily.h \
+   $(top_srcdir)/fortran/../src/H5FDgass.h \
+   $(top_srcdir)/fortran/../src/H5FDlog.h \
+   $(top_srcdir)/fortran/../src/H5FDmpi.h \
+   $(top_srcdir)/fortran/../src/H5FDmpio.h \
+   $(top_srcdir)/fortran/../src/H5FDmpiposix.h \
+   $(top_srcdir)/fortran/../src/H5FDmulti.h \
+   $(top_srcdir)/fortran/../src/H5FDsec2.h \
+   $(top_srcdir)/fortran/../src/H5FDsrb.h \
+   $(top_srcdir)/fortran/../src/H5FDstdio.h \
+   $(top_srcdir)/fortran/../src/H5FDstream.h \
+   $(srcdir)/H5f90i.h \
+   $(top_srcdir)/fortran/../src/H5private.h \
+   $(top_srcdir)/fortran/../src/H5MPprivate.h \
+   $(srcdir)/H5f90proto.h
+H5FDmpiof.lo: \
+   $(srcdir)/H5FDmpiof.c \
+   $(srcdir)/H5f90.h \
+   $(top_srcdir)/fortran/../src/hdf5.h \
+   $(top_srcdir)/fortran/../src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/fortran/../src/H5api_adpt.h \
+   $(top_srcdir)/fortran/../src/H5Apublic.h \
+   $(top_srcdir)/fortran/../src/H5Ipublic.h \
+   $(top_srcdir)/fortran/../src/H5ACpublic.h \
+   $(top_srcdir)/fortran/../src/H5Bpublic.h \
+   $(top_srcdir)/fortran/../src/H5Dpublic.h \
+   $(top_srcdir)/fortran/../src/H5Epublic.h \
+   $(top_srcdir)/fortran/../src/H5Fpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDpublic.h \
+   $(top_srcdir)/fortran/../src/H5Gpublic.h \
+   $(top_srcdir)/fortran/../src/H5Opublic.h \
+   $(top_srcdir)/fortran/../src/H5HGpublic.h \
+   $(top_srcdir)/fortran/../src/H5HLpublic.h \
+   $(top_srcdir)/fortran/../src/H5MMpublic.h \
+   $(top_srcdir)/fortran/../src/H5Ppublic.h \
+   $(top_srcdir)/fortran/../src/H5Zpublic.h \
+   $(top_srcdir)/fortran/../src/H5Rpublic.h \
+   $(top_srcdir)/fortran/../src/H5Spublic.h \
+   $(top_srcdir)/fortran/../src/H5Tpublic.h \
+   $(top_srcdir)/fortran/../src/H5FDcore.h \
+   $(top_srcdir)/fortran/../src/H5FDfamily.h \
+   $(top_srcdir)/fortran/../src/H5FDgass.h \
+   $(top_srcdir)/fortran/../src/H5FDlog.h \
+   $(top_srcdir)/fortran/../src/H5FDmpi.h \
+   $(top_srcdir)/fortran/../src/H5FDmpio.h \
+   $(top_srcdir)/fortran/../src/H5FDmpiposix.h \
+   $(top_srcdir)/fortran/../src/H5FDmulti.h \
+   $(top_srcdir)/fortran/../src/H5FDsec2.h \
+   $(top_srcdir)/fortran/../src/H5FDsrb.h \
+   $(top_srcdir)/fortran/../src/H5FDstdio.h \
+   $(top_srcdir)/fortran/../src/H5FDstream.h \
+   $(srcdir)/H5f90i.h \
+   $(top_srcdir)/fortran/../src/H5private.h \
+   $(top_srcdir)/fortran/../src/H5MPprivate.h \
+   $(srcdir)/H5f90proto.h \
+   ./H5pubconf_fortran.h

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Af.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Af.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Af.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,386 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 files contains C stubs for H5A Fortran APIs */
+
+#include "H5f90.h"
+#include "H5Eprivate.h"
+
+/*----------------------------------------------------------------------------
+ * Name:        h5acreate_c
+ * Purpose:     Call H5Acreate 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
+ *              Thursday, August 12, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+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 *attr_id)
+{
+    char *c_name=NULL;          /* Buffer to hold C string */
+    int_f ret_value=0;          /* Return value */
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+    if ((c_name = HD5f2cstring(name, (size_t)*namelen)) == NULL)
+        HGOTO_DONE(FAIL);
+
+     /*
+      * Call H5Acreate function.
+      */
+    if((*attr_id = (hid_t_f)H5Acreate((hid_t)*obj_id, c_name, (hid_t)*type_id, (hid_t)*space_id, (hid_t)*crt_prp))<0)
+        HGOTO_DONE(FAIL);
+
+done:
+    if(c_name) HDfree(c_name);
+    return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5aopen_name _c
+ * Purpose:     Call H5Aopen_name 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
+ *              Thursday, August 12, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+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 */
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     if ((c_name = HD5f2cstring(name, (size_t)*namelen)) == NULL)
+        HGOTO_DONE(FAIL);
+
+     /*
+      * Call H5Aopen function.
+      */
+     if ((*attr_id = (hid_t_f)H5Aopen_name((hid_t)*obj_id, c_name)) < 0)
+         HGOTO_DONE(FAIL);
+
+done:
+    if(c_name) HDfree(c_name);
+    return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Tuesday, May 14, 2002
+ *---------------------------------------------------------------------------*/
+int_f
+nh5awritec_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+{
+     /*
+      * Call h5awrite_c  function.
+      */
+     return nh5awrite_c(attr_id, mem_type_id, _fcdtocp(buf), dims);
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Tuesday, May 14, 2002
+ *---------------------------------------------------------------------------*/
+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 */
+
+     /*
+      * Call H5Awrite function.
+      */
+     if (H5Awrite((hid_t)*attr_id, (hid_t)*mem_type_id, buf) < 0)
+        HGOTO_DONE(FAIL);
+
+done:
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Tuesday, May 14, 2002
+ *---------------------------------------------------------------------------*/
+int_f
+nh5areadc_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+{
+     /*
+      * Call h5aread_c  function.
+      */
+     return nh5aread_c(attr_id, mem_type_id, _fcdtocp(buf), dims);
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Tuesday, May 14, 2002
+ *---------------------------------------------------------------------------*/
+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 */
+
+     /*
+      * Call H5Aread function.
+      */
+     if (H5Aread((hid_t)*attr_id, (hid_t)*mem_type_id, buf) < 0)
+         HGOTO_DONE(FAIL);
+
+done:
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Thursday, August 12, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5aclose_c ( hid_t_f *attr_id )
+{
+    int_f ret_value=0;          /* Return value */
+
+    if (H5Aclose((hid_t)*attr_id) < 0)
+        HGOTO_DONE(FAIL);
+
+done:
+    return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Thursday, August 12, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+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 */
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     if ((c_name = HD5f2cstring(name, (size_t)*namelen)) == NULL)
+        HGOTO_DONE(FAIL);
+
+     /*
+      * Call H5Adelete function.
+      */
+     if (H5Adelete((hid_t)*obj_id, c_name) < 0)
+         HGOTO_DONE(FAIL);
+
+done:
+    if(c_name) HDfree(c_name);
+    return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5aopen_idx_c
+ * Purpose:     Call H5Aopen_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
+ *              Thursday, August 12, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+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 */
+
+     /*
+      * Call H5Aopen_idx function.
+      */
+     if ((*attr_id = (hid_t_f)H5Aopen_idx((hid_t)*obj_id, (unsigned)*idx)) < 0)
+        HGOTO_DONE(FAIL);
+
+done:
+     return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Thursday, August 12, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5aget_space_c (hid_t_f *attr_id, hid_t_f *space_id)
+{
+    int_f ret_value=0;          /* Return value */
+
+     /*
+      * Call H5Aget_space function.
+      */
+     if ((*space_id = (hid_t_f)H5Aget_space((hid_t)*attr_id)) < 0)
+         HGOTO_DONE(FAIL);
+
+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
+ *              Thursday, August 12, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5aget_type_c (hid_t_f *attr_id, hid_t_f *type_id)
+{
+    int_f ret_value=0;          /* Return value */
+
+     /*
+      * Call H5Aget_type function.
+      */
+     if ((*type_id = (hid_t_f)H5Aget_type((hid_t)*attr_id)) < 0)
+         HGOTO_DONE(FAIL);
+
+done:
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5aget_num_attrs_c
+ * Purpose:     Call H5Aget_num_attrs to determine number of
+ *              attributes of an object
+ * Inputs:      obj_id - object identifier
+ *              attr_num - number of attributes
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, August 12, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5aget_num_attrs_c (hid_t_f *obj_id, int_f *attr_num)
+{
+    int_f ret_value=0;          /* Return value */
+
+     /*
+      * Call H5Aget_num_attrs function.
+      */
+     if ((*attr_num = (int_f)H5Aget_num_attrs((hid_t)*obj_id)) < 0)
+         HGOTO_DONE(FAIL);
+
+done:
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Thursday, August 12, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5aget_name_c(hid_t_f *attr_id, size_t_f *bufsize, _fcd buf)
+{
+    char *c_buf=NULL;           /* Buffer to hold C string */
+    int_f ret_value=0;          /* Return value */
+
+     /*
+      * Allocate buffer to hold name of an attribute
+      */
+     if ((c_buf = HDmalloc((size_t)*bufsize +1)) == NULL)
+         HGOTO_DONE(FAIL);
+
+     /*
+      * Call H5Aget_name function
+      */
+     if ((ret_value = (int_f)H5Aget_name((hid_t)*attr_id, (size_t)*bufsize, c_buf)) < 0)
+         HGOTO_DONE(FAIL);
+
+     /*
+      * Convert C name to FORTRAN and place it in the given buffer
+      */
+      HD5packFstring(c_buf, _fcdtocp(buf), (size_t)*bufsize);
+
+done:
+      if(c_buf) HDfree(c_buf);
+      return ret_value;
+}

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Aff.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Aff.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Aff.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2934 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 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
+! Comment if on Crays
+            MODULE PROCEDURE h5awrite_double_scalar
+            MODULE PROCEDURE h5awrite_double_1
+            MODULE PROCEDURE h5awrite_double_2
+            MODULE PROCEDURE h5awrite_double_3
+            MODULE PROCEDURE h5awrite_double_4
+            MODULE PROCEDURE h5awrite_double_5
+            MODULE PROCEDURE h5awrite_double_6
+            MODULE PROCEDURE h5awrite_double_7
+! End commnet if on Crays
+
+
+          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
+! Comment if on Crays
+            MODULE PROCEDURE h5aread_double_scalar
+            MODULE PROCEDURE h5aread_double_1
+            MODULE PROCEDURE h5aread_double_2
+            MODULE PROCEDURE h5aread_double_3
+            MODULE PROCEDURE h5aread_double_4
+            MODULE PROCEDURE h5aread_double_5
+            MODULE PROCEDURE h5aread_double_6
+            MODULE PROCEDURE h5aread_double_7
+! End commnet if on Crays
+!
+          END INTERFACE
+
+      CONTAINS
+
+!----------------------------------------------------------------------
+! Name:		h5acreate_f 
+!
+! Purpose: 	Creates a dataset as an attribute of a group, dataset, 
+!		or named datatype 
+!
+! Inputs:  
+!		obj_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:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!		creation_prp	- creation property list identifier 			
+!
+! 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 h5acreate_f(obj_id, name, type_id, space_id, attr_id, &
+                                 hdferr, creation_prp) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5acreate_f
+!DEC$endif
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: obj_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
+            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: creation_prp
+                                                ! Attribute creation property 
+                                                ! list identifier 
+            INTEGER :: creation_prp_default 
+            INTEGER(SIZE_T) :: namelen
+!            INTEGER, EXTERNAL :: h5acreate_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5acreate_c(obj_id, name, namelen, type_id, &
+                               space_id, creation_prp_default, attr_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5ACREATE_C'::h5acreate_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: obj_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER(SIZE_T) :: namelen
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER :: creation_prp_default
+              INTEGER(HID_T), INTENT(OUT) :: attr_id
+              END FUNCTION h5acreate_c
+            END INTERFACE
+
+            creation_prp_default = H5P_DEFAULT_F
+            namelen = LEN(NAME)
+            if (present(creation_prp)) creation_prp_default = creation_prp
+            hdferr = h5acreate_c(obj_id, name, namelen, type_id, space_id, &
+                                 creation_prp_default, attr_id)
+          END SUBROUTINE h5acreate_f
+
+
+!----------------------------------------------------------------------
+! Name:		h5aopen_name_f 
+!
+! Purpose:  	Opens an attribute specified by name. 
+!
+! 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			
+!
+! 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 h5aopen_name_f(obj_id, name, attr_id, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aopen_name_f
+!DEC$endif
+            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
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AOPEN_NAME_C'::h5aopen_name_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: obj_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER(SIZE_T) :: namelen
+              INTEGER(HID_T), INTENT(OUT) :: attr_id
+              END FUNCTION h5aopen_name_c
+            END INTERFACE
+
+            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.
+!
+! 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			
+!
+! 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 h5aopen_idx_f(obj_id, index, attr_id, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aopen_idx_f
+!DEC$endif
+            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
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AOPEN_IDX_C'::h5aopen_idx_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: obj_id
+              INTEGER, INTENT(IN) :: index
+              INTEGER(HID_T), INTENT(OUT) :: attr_id
+              END FUNCTION h5aopen_idx_c
+            END INTERFACE
+
+            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) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_integer_scalar
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_integer_scalar
+
+          SUBROUTINE h5awrite_integer_1(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_integer_1
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_integer_1
+
+
+          SUBROUTINE h5awrite_integer_2(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_integer_2
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_integer_2
+
+
+          SUBROUTINE h5awrite_integer_3(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_integer_3
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_integer_3
+
+
+          SUBROUTINE h5awrite_integer_4(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_integer_4
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_integer_4
+
+
+          SUBROUTINE h5awrite_integer_5(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_integer_5
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_integer_5
+
+
+          SUBROUTINE h5awrite_integer_6(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_integer_6
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_integer_6
+
+
+          SUBROUTINE h5awrite_integer_7(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_integer_7
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_integer_7
+
+
+          SUBROUTINE h5awrite_real_scalar(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_real_scalar
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_real_scalar
+
+          SUBROUTINE h5awrite_real_1(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_real_1
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_real_1
+
+
+          SUBROUTINE h5awrite_real_2(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_real_2
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_real_2
+
+
+          SUBROUTINE h5awrite_real_3(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_real_3
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_real_3
+
+
+          SUBROUTINE h5awrite_real_4(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_real_4
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_real_4
+
+
+          SUBROUTINE h5awrite_real_5(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_real_5
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_real_5
+
+
+          SUBROUTINE h5awrite_real_6(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_real_6
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_real_6
+
+
+          SUBROUTINE h5awrite_real_7(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_real_7
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_real_7
+
+
+          SUBROUTINE h5awrite_double_scalar(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_double_scalar
+!DEC$endif
+            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 
+            DOUBLE PRECISION, INTENT(IN) :: buf     ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5awrite_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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
+              DOUBLE PRECISION, INTENT(IN)::buf
+              END FUNCTION h5awrite_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_double_scalar
+
+          SUBROUTINE h5awrite_double_1(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_double_1
+!DEC$endif
+            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 
+            DOUBLE PRECISION, INTENT(IN), &
+            DIMENSION(dims(1)) :: buf ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5awrite_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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
+              DOUBLE PRECISION, INTENT(IN), &
+              DIMENSION(dims(1)) :: buf
+              END FUNCTION h5awrite_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_double_1
+
+
+          SUBROUTINE h5awrite_double_2(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_double_2
+!DEC$endif
+            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 
+            DOUBLE PRECISION, INTENT(IN), & 
+            DIMENSION(dims(1),dims(2)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5awrite_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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
+              DOUBLE PRECISION, INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+              END FUNCTION h5awrite_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_double_2
+
+
+          SUBROUTINE h5awrite_double_3(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_double_3
+!DEC$endif
+            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 
+            DOUBLE PRECISION, INTENT(IN), &
+            DIMENSION(dims(1),dims(2),dims(3)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5awrite_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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
+              DOUBLE PRECISION, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+              END FUNCTION h5awrite_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_double_3
+
+
+          SUBROUTINE h5awrite_double_4(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_double_4
+!DEC$endif
+            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 
+            DOUBLE PRECISION, INTENT(IN), &
+            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5awrite_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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
+              DOUBLE PRECISION, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+              END FUNCTION h5awrite_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_double_4
+
+
+          SUBROUTINE h5awrite_double_5(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_double_5
+!DEC$endif
+            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 
+            DOUBLE PRECISION, 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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
+              DOUBLE PRECISION, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+              END FUNCTION h5awrite_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_double_5
+
+
+          SUBROUTINE h5awrite_double_6(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_double_6
+!DEC$endif
+            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 
+            DOUBLE PRECISION, 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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
+              DOUBLE PRECISION, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+              END FUNCTION h5awrite_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_double_6
+
+
+          SUBROUTINE h5awrite_double_7(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_double_7
+!DEC$endif
+            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 
+            DOUBLE PRECISION, 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awrite_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITE_C'::h5awrite_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
+              DOUBLE PRECISION, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+              END FUNCTION h5awrite_c
+            END INTERFACE
+
+            hdferr = h5awrite_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_double_7
+
+          SUBROUTINE h5awrite_char_scalar(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_char_scalar
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awritec_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITEC_C'::h5awritec_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_c
+            END INTERFACE
+
+            hdferr = h5awritec_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_char_scalar
+
+          SUBROUTINE h5awrite_char_1(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_char_1
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awritec_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITEC_C'::h5awritec_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_c
+            END INTERFACE
+
+            hdferr = h5awritec_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_char_1
+
+
+          SUBROUTINE h5awrite_char_2(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_char_2
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awritec_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITEC_C'::h5awritec_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_c
+            END INTERFACE
+
+            hdferr = h5awritec_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_char_2
+
+
+          SUBROUTINE h5awrite_char_3(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_char_3
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awritec_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITEC_C'::h5awritec_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_c
+            END INTERFACE
+
+            hdferr = h5awritec_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_char_3
+
+
+          SUBROUTINE h5awrite_char_4(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_char_4
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awritec_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITEC_C'::h5awritec_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_c
+            END INTERFACE
+
+            hdferr = h5awritec_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_char_4
+
+
+          SUBROUTINE h5awrite_char_5(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_char_5
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awritec_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITEC_C'::h5awritec_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_c
+            END INTERFACE
+
+            hdferr = h5awritec_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_char_5
+
+
+          SUBROUTINE h5awrite_char_6(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_char_6
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awritec_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITEC_C'::h5awritec_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_c
+            END INTERFACE
+
+            hdferr = h5awritec_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5awrite_char_6
+
+
+          SUBROUTINE h5awrite_char_7(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5awrite_char_7
+!DEC$endif
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5awritec_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AWRITEC_C'::h5awritec_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_c
+            END INTERFACE
+
+            hdferr = h5awritec_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
+!
+! 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) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_integer_scalar
+!DEC$endif
+            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(OUT) :: buf             ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT)::buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_integer_scalar
+
+          SUBROUTINE h5aread_integer_1(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_integer_1
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1)) :: buf
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT), &
+              DIMENSION(dims(1)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_integer_1
+
+
+          SUBROUTINE h5aread_integer_2(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_integer_2
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1),dims(2)) :: buf
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT), &
+              DIMENSION(dims(1),dims(2)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_integer_2
+
+
+          SUBROUTINE h5aread_integer_3(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_integer_3
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1),dims(2),dims(3)) :: buf
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_integer_3
+
+
+          SUBROUTINE h5aread_integer_4(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_integer_4
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_integer_4
+
+
+          SUBROUTINE h5aread_integer_5(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_integer_5
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_integer_5
+
+
+          SUBROUTINE h5aread_integer_6(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_integer_6
+!DEC$endif
+            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(OUT), &
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_integer_6
+
+
+          SUBROUTINE h5aread_integer_7(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_integer_7
+!DEC$endif
+            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(OUT), &
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_integer_7
+
+
+          SUBROUTINE h5aread_real_scalar(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_real_scalar
+!DEC$endif
+            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(OUT) :: buf                ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT)::buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_real_scalar
+
+          SUBROUTINE h5aread_real_1(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_real_1
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT), &
+              DIMENSION(dims(1)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_real_1
+
+
+          SUBROUTINE h5aread_real_2(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_real_2
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1),dims(2)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT), &
+              DIMENSION(dims(1),dims(2)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_real_2
+
+
+          SUBROUTINE h5aread_real_3(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_real_3
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1),dims(2),dims(3)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_real_3
+
+
+          SUBROUTINE h5aread_real_4(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_real_4
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_real_4
+
+
+          SUBROUTINE h5aread_real_5(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_real_5
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_real_5
+
+
+          SUBROUTINE h5aread_real_6(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_real_6
+!DEC$endif
+            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(OUT), &
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_real_6
+
+
+          SUBROUTINE h5aread_real_7(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_real_7
+!DEC$endif
+            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(OUT), &
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_real_7
+
+
+          SUBROUTINE h5aread_double_scalar(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_double_scalar
+!DEC$endif
+            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 
+            DOUBLE PRECISION, INTENT(OUT) :: buf    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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
+              DOUBLE PRECISION, INTENT(OUT)::buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_double_scalar
+
+          SUBROUTINE h5aread_double_1(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_double_1
+!DEC$endif
+            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 
+            DOUBLE PRECISION, INTENT(OUT), &
+            DIMENSION(dims(1)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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
+              DOUBLE PRECISION, INTENT(OUT), &
+              DIMENSION(dims(1)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_double_1
+
+
+          SUBROUTINE h5aread_double_2(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_double_2
+!DEC$endif
+            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 
+            DOUBLE PRECISION, INTENT(OUT), &
+            DIMENSION(dims(1),dims(2)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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
+              DOUBLE PRECISION, INTENT(OUT), &
+              DIMENSION(dims(1),dims(2)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_double_2
+
+
+          SUBROUTINE h5aread_double_3(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_double_3
+!DEC$endif
+            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 
+            DOUBLE PRECISION, INTENT(OUT), &
+            DIMENSION(dims(1),dims(2),dims(3)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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
+              DOUBLE PRECISION, INTENT(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_double_3
+
+
+          SUBROUTINE h5aread_double_4(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_double_4
+!DEC$endif
+            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 
+            DOUBLE PRECISION, INTENT(OUT), &
+            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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
+              DOUBLE PRECISION, INTENT(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_double_4
+
+
+          SUBROUTINE h5aread_double_5(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_double_5
+!DEC$endif
+            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 
+            DOUBLE PRECISION, INTENT(OUT), &
+            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5aread_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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
+              DOUBLE PRECISION, INTENT(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_double_5
+
+
+          SUBROUTINE h5aread_double_6(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_double_6
+!DEC$endif
+            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 
+            DOUBLE PRECISION, INTENT(OUT), &
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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
+              DOUBLE PRECISION, INTENT(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_double_6
+
+
+          SUBROUTINE h5aread_double_7(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_double_7
+!DEC$endif
+            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 
+            DOUBLE PRECISION, INTENT(OUT), &
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aread_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREAD_C'::h5aread_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
+              DOUBLE PRECISION, INTENT(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+              END FUNCTION h5aread_c
+            END INTERFACE
+
+            hdferr = h5aread_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_double_7
+
+
+          SUBROUTINE h5aread_char_scalar(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_char_scalar
+!DEC$endif
+            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(OUT) :: buf 
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5areadc_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5areadc_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREADC_C'::h5areadc_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=*) :: buf
+              END FUNCTION h5areadc_c
+            END INTERFACE
+
+            hdferr = h5areadc_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_char_scalar
+
+          SUBROUTINE h5aread_char_1(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_char_1
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5areadc_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5areadc_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREADC_C'::h5areadc_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(OUT), &
+              DIMENSION(dims(1)) :: buf
+              END FUNCTION h5areadc_c
+            END INTERFACE
+
+            hdferr = h5areadc_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_char_1
+
+
+          SUBROUTINE h5aread_char_2(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_char_2
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1),dims(2)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5areadc_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5areadc_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREADC_C'::h5areadc_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(OUT), &
+              DIMENSION(dims(1),dims(2)) :: buf
+              END FUNCTION h5areadc_c
+            END INTERFACE
+
+            hdferr = h5areadc_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_char_2
+
+
+          SUBROUTINE h5aread_char_3(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_char_3
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1),dims(2),dims(3)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5areadc_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5areadc_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREADC_C'::h5areadc_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+              END FUNCTION h5areadc_c
+            END INTERFACE
+
+            hdferr = h5areadc_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_char_3
+
+
+          SUBROUTINE h5aread_char_4(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_char_4
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5areadc_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5areadc_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREADC_C'::h5areadc_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+              END FUNCTION h5areadc_c
+            END INTERFACE
+
+            hdferr = h5areadc_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_char_4
+
+
+          SUBROUTINE h5aread_char_5(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_char_5
+!DEC$endif
+            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(OUT), &
+            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+                                                    ! Attribute data 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5areadc_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5areadc_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREADC_C'::h5areadc_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+              END FUNCTION h5areadc_c
+            END INTERFACE
+
+            hdferr = h5areadc_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_char_5
+
+
+          SUBROUTINE h5aread_char_6(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_char_6
+!DEC$endif
+            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(OUT), &
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5areadc_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREADC_C'::h5areadc_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+              END FUNCTION h5areadc_c
+            END INTERFACE
+
+            hdferr = h5areadc_c(attr_id, memtype_id,  buf, dims)
+          END SUBROUTINE h5aread_char_6
+
+
+          SUBROUTINE h5aread_char_7(attr_id, memtype_id,  buf, dims, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aread_char_7
+!DEC$endif
+            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(OUT), &
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5areadc_c(attr_id, memtype_id,  buf, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AREADC_C'::h5areadc_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(OUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+              END FUNCTION h5areadc_c
+            END INTERFACE
+
+            hdferr = h5areadc_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) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aget_space_f
+!DEC$endif
+            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)
+              !MS$ATTRIBUTES C,reference,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) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aget_type_f
+!DEC$endif
+            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)
+              !MS$ATTRIBUTES C,reference,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 
+!
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5aget_name_f(attr_id, size, buf, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aget_name_f
+!DEC$endif
+            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
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code:
+                                                   ! name length is successful,
+                                                   ! -1 if fail
+!            INTEGER, EXTERNAL :: h5aget_name_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5aget_name_c(attr_id, size, buf)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AGET_NAME_C'::h5aget_name_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: buf
+              INTEGER(HID_T), INTENT(IN) :: attr_id
+              INTEGER(SIZE_T), INTENT(IN) :: size
+              CHARACTER(LEN=*), INTENT(OUT) :: buf
+              END FUNCTION h5aget_name_c
+            END INTERFACE
+
+            hdferr = h5aget_name_c(attr_id, size, buf)
+          END SUBROUTINE h5aget_name_f
+
+
+!----------------------------------------------------------------------
+! Name:		h5aget_num_attrs_f 
+!
+! Purpose:  	Determines the number of attributes attached to an object.
+!
+! 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			
+!
+! 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_num_attrs_f(obj_id, attr_num, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aget_num_attrs_f
+!DEC$endif
+            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, 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
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5AGET_NUM_ATTRS_C'::h5aget_num_attrs_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: obj_id
+              INTEGER, INTENT(OUT) :: attr_num
+              END FUNCTION h5aget_num_attrs_c
+            END INTERFACE
+
+            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)
+!
+! Inputs:  
+!		obj_id		- object identifier
+!		name		- attribute name
+! Outputs:  
+!
+!		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 h5adelete_f(obj_id, name, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5adelete_f
+!DEC$endif
+            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(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
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5ADELETE_C'::h5adelete_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: obj_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER(SIZE_T) :: namelen
+              END FUNCTION h5adelete_c
+            END INTERFACE
+
+            namelen = LEN(name)
+            hdferr = h5adelete_c(obj_id, name, namelen)
+          END SUBROUTINE h5adelete_f
+
+!----------------------------------------------------------------------
+! Name:		h5aclose_f 
+!
+! Purpose:  	Closes the specified attribute.
+!		
+! Inputs:  
+!		attr_id		- attribute identifier
+! Outputs:  
+!
+!		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 h5aclose_f(attr_id, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5aclose_f
+!DEC$endif
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier 
+            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
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5ACLOSE_C'::h5aclose_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: attr_id
+              END FUNCTION h5aclose_c
+            END INTERFACE
+
+            hdferr = h5aclose_c(attr_id)
+          END SUBROUTINE h5aclose_f
+
+   END MODULE H5A

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Df.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Df.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Df.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1237 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 files contains C stubs for H5D Fortran APIs */
+
+#include "H5f90.h"
+
+/*----------------------------------------------------------------------------
+ * Name:        h5dcreate_c
+ * Purpose:     Call H5Dcreate 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
+ *              Wednesday, August 4, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+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 *crt_prp,  hid_t_f *dset_id)
+{
+     int ret_value = -1;
+     char *c_name;
+     int c_namelen;
+     hid_t c_loc_id;
+     hid_t c_type_id;
+     hid_t c_space_id;
+     hid_t c_dset_id;
+     hid_t c_crt_prp;
+
+     /*
+      * Define creation property
+      */
+     c_crt_prp = (hid_t)*crt_prp;
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Dcreate function.
+      */
+     c_loc_id = (hid_t)*loc_id;
+     c_type_id = (hid_t)*type_id;
+     c_space_id = (hid_t)*space_id;
+     c_dset_id = H5Dcreate(c_loc_id, c_name, c_type_id, c_space_id, c_crt_prp);
+     if (c_dset_id < 0) goto DONE;
+     *dset_id = (hid_t_f)c_dset_id;
+     ret_value = 0;
+
+DONE:
+     HDfree(c_name);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5dopen_c
+ * Purpose:     Call H5Dopen to open a dataset
+ * Inputs:      loc_id - file or group identifier
+ *              name - name of the dataset
+ *              namelen - name length
+ * Outputs:     dset_id - dataset identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 4, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5dopen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *dset_id)
+{
+     int ret_value = -1;
+     char *c_name;
+     int c_namelen;
+     hid_t c_loc_id;
+     hid_t c_dset_id;
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Dopen function.
+      */
+     c_loc_id = (hid_t)*loc_id;
+     c_dset_id = H5Dopen(c_loc_id, c_name);
+
+     if (c_dset_id < 0) goto DONE;
+     *dset_id = (hid_t_f)c_dset_id;
+     ret_value = 0;
+
+DONE:
+     HDfree(c_name);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Tuesday, May 14, 2002
+ * Modifications: This function is added to accomodate oveloaded h5dwrite_f
+ *                with the dims argument being of INTEGER(HSIZE_T) type
+ *---------------------------------------------------------------------------*/
+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;
+
+     /*
+      * Call h5dwrite_c  function.
+      */
+     ret_value = nh5dwrite_c(dset_id, mem_type_id, mem_space_id, file_space_id, xfer_prp, _fcdtocp(buf), dims);
+
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Tuesday, May 14, 2002
+ * Modifications: This function is added to accomodate oveloaded h5dwrite_f
+ *                with the dims argument being of INTEGER(HSIZE_T) type
+ *---------------------------------------------------------------------------*/
+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 *dims)
+{
+     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;
+
+     /*
+      * 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;
+}
+
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Tuesday, May 14, 2002
+ * Modifications: This function was added to accomodate h5dwrite_f with the
+ *                dims argumnet being of INTEGER(HSIZE_T) type.
+ *---------------------------------------------------------------------------*/
+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;
+    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;
+    hobj_ref_t *buf_c;
+    int i, n;
+
+    /*
+     * Define transfer property
+     */
+    c_xfer_prp = (hid_t)*xfer_prp;
+
+    /*
+     * Allocate temporary buffer and copy references from Fortran.
+     */
+    n = (int)*dims;
+    buf_c = (hobj_ref_t*)HDmalloc(sizeof(hobj_ref_t)*(n));
+    if ( buf_c != NULL ) {
+        for (i = 0; i < n; i++)
+             HDmemcpy(&buf_c[i], &buf[i], sizeof(haddr_t));
+    }
+    else return ret_value;
+
+    /*
+     * 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_c);
+    HDfree(buf_c);
+    if (ret < 0) return ret_value;
+    ret_value = 0;
+    return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Tuesday, May 14, 2002
+ * Modifications: This function was added to accomodate h5dwrite_f with the
+ *                dims argument being of INTEGER(HSIZE_T) type
+ *---------------------------------------------------------------------------*/
+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;
+     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;
+     hdset_reg_ref_t *buf_c = NULL;
+     int i, n;
+
+      n = (int)*dims;
+     /*
+      * Define transfer property
+      */
+     c_xfer_prp = (hid_t)*xfer_prp;
+
+     /*
+      * Allocate temporary buffer and copy references from Fortran.
+      */
+      buf_c = (hdset_reg_ref_t *)HDmalloc(sizeof(hdset_reg_ref_t)*(n));
+      if ( buf_c != NULL ) {
+      for (i = 0; i < n; i++) {
+           HDmemcpy(&buf_c[i], buf, H5R_DSET_REG_REF_BUF_SIZE);
+           buf = buf + REF_REG_BUF_LEN_F;
+      }
+      }
+      else return ret_value;
+
+
+     /*
+      * 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_c);
+     HDfree(buf_c);
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Wednesday, May 15, 2002
+ * Modifications: This function was added to accomodate h5dread_f subroutine
+ *                with the dims parameter being of INTEGER(HSIZE_T_F) size.
+ *---------------------------------------------------------------------------*/
+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;
+
+     /*
+      * Call h5dread_c  function.
+      */
+     ret_value = nh5dread_c(dset_id, mem_type_id, mem_space_id, file_space_id, xfer_prp, _fcdtocp(buf), dims);
+
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Wednesday, May 15, 2002
+ * Modifications: This function was added to accomodate h5dread_f subroutine
+ *                with the dims parameter being of INTEGER(HSIZE_T_F) size.
+ *---------------------------------------------------------------------------*/
+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 *dims)
+{
+     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;
+
+     /*
+      * Define transfer property
+      */
+     c_xfer_prp = (hid_t)*xfer_prp;
+
+     /*
+      * Call H5Dread 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 = H5Dread(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;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Wednesday, May 15, 2002
+ * Modifications: This function was added to accomodate h5dread_f subroutine
+ *                with the dims parameter being of INTEGER(HSIZE_T_F) size.
+ *---------------------------------------------------------------------------*/
+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;
+    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;
+    hobj_ref_t *buf_c = NULL;
+    hsize_t i,n;
+
+    /*
+     * Define transfer property
+     */
+    c_xfer_prp = (hid_t)*xfer_prp;
+
+    /*
+     * Allocate temporary buffer.
+     */
+    n = (hsize_t)*dims;
+    buf_c = (hobj_ref_t*)HDmalloc(sizeof(hobj_ref_t)*(size_t)n);
+    if ( buf_c != NULL ) {
+        /*
+         * Call H5Dread 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 = H5Dread(c_dset_id, c_mem_type_id, c_mem_space_id, c_file_space_id, c_xfer_prp, buf_c);
+        if (ret >=0) {
+           for (i = 0; i < n; i++)
+              HDmemcpy(&buf[i], &buf_c[i], sizeof(haddr_t));
+        }
+        if ( buf_c != NULL ) HDfree(buf_c);
+    }
+    if (ret < 0) return ret_value;
+    ret_value = 0;
+    return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Wednesday, May 15, 2002
+ * Modifications: This function was added to accomodate h5dread_f subroutine
+ *                with the dims parameter being of INTEGER(HSIZE_T_F) size.
+ *---------------------------------------------------------------------------*/
+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;
+     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;
+     hdset_reg_ref_t *buf_c = NULL;
+     hsize_t i, n;
+     n = (hsize_t)*dims;
+     /*
+      * Define transfer property
+      */
+     c_xfer_prp = (hid_t)*xfer_prp;
+
+     /*
+      * Allocate temporary buffer.
+      */
+     buf_c = (hdset_reg_ref_t *)HDmalloc(sizeof(hdset_reg_ref_t)*(size_t)n);
+     if ( buf_c != NULL ) {
+         /*
+          * Call H5Dread 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 = H5Dread(c_dset_id, c_mem_type_id, c_mem_space_id, c_file_space_id, c_xfer_prp, buf_c);
+         if (ret >=0) {
+            for (i = 0; i < n; i++) {
+               HDmemcpy(buf, &buf_c[i], H5R_DSET_REG_REF_BUF_SIZE);
+               buf = buf + REF_REG_BUF_LEN_F;
+            }
+         }
+         if ( buf_c != NULL ) HDfree(buf_c);
+     }
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Wednesday, August 4, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5dclose_c ( hid_t_f *dset_id )
+{
+  int ret_value = 0;
+  hid_t c_dset_id;
+  c_dset_id = (hid_t)*dset_id;
+  if ( H5Dclose(c_dset_id) < 0  ) ret_value = -1;
+  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
+ *              Thursday, August 19, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5dget_space_c ( hid_t_f *dset_id , hid_t_f *space_id)
+{
+  int ret_value = -1;
+  hid_t c_dset_id;
+  hid_t c_space_id;
+
+  c_dset_id = (hid_t)*dset_id;
+  c_space_id = H5Dget_space(c_dset_id);
+  if(c_space_id < 0 ) return ret_value;
+  ret_value = 0;
+  *space_id = (hid_t_f)c_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
+ *              Thursday, August 19, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5dget_type_c ( hid_t_f *dset_id , hid_t_f *type_id)
+{
+  int ret_value = -1;
+  hid_t c_dset_id;
+  hid_t c_type_id;
+
+  c_dset_id = (hid_t)*dset_id;
+  c_type_id = H5Dget_type(c_dset_id);
+
+  if(c_type_id < 0 ) return ret_value;
+
+  *type_id = (hid_t_f)c_type_id;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Thursday, August 19, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+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;
+  hid_t c_plist_id;
+
+  c_dset_id = (hid_t)*dset_id;
+  c_plist_id = H5Dget_create_plist(c_dset_id);
+
+  if(c_plist_id < 0 ) return ret_value;
+
+  ret_value = 0;
+  *plist_id = (hid_t_f)c_plist_id;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5dextend_c
+ * Purpose:     Call H5Dextend 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
+ *              Thursday, August 19, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5dextend_c ( hid_t_f *dset_id , hsize_t_f *dims)
+{
+  int ret_value = -1;
+  hsize_t *c_dims;
+  int status;
+  int rank;
+  int i;
+  hid_t c_dset_id;
+  hid_t c_space_id;
+
+  c_dset_id = (hid_t)*dset_id;
+  c_space_id = H5Dget_space(c_dset_id);
+  if (c_space_id < 0) return ret_value;
+
+  rank = H5Sget_simple_extent_ndims(c_space_id);
+  if (rank < 0) return ret_value;
+
+  c_dims = malloc(sizeof(hsize_t)*rank);
+  if (!c_dims) return ret_value;
+
+  /*
+   * Reverse dimensions due to C-FORTRAN storage order.
+   */
+  for (i=0; i < rank; i++)
+      c_dims[i] = dims[rank - i - 1];
+
+  status = H5Dextend(c_dset_id, c_dims);
+
+  if ( status >= 0  ) ret_value = 0;
+  HDfree(c_dims);
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Tuesday, October 22, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5dget_storage_size_c ( hid_t_f *dset_id , hsize_t_f *size)
+{
+  int ret_value = -1;
+  hsize_t c_size;
+  hid_t c_dset_id;
+
+  c_dset_id = (hid_t)*dset_id;
+  c_size = H5Dget_storage_size(c_dset_id);
+  if (c_size == 0) return ret_value;
+  *size = (hsize_t_f)c_size;
+  ret_value = 0;
+  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
+ *              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
+ *              Tuesday, October 22, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+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;
+  hid_t c_dset_id;
+  hid_t c_type_id;
+  hid_t c_space_id;
+  hvl_t *c_buf;
+  int i;
+  hssize_t num_elem;
+  herr_t status;
+
+  c_dset_id = (hid_t)*dset_id;
+  c_type_id = (hid_t)*type_id;
+  c_space_id = (hid_t)*space_id;
+
+  num_elem = H5Sget_select_npoints(c_space_id);
+  if( num_elem < 0) return ret_value;
+
+  c_buf = (hvl_t *)malloc(sizeof(hvl_t)*(size_t)num_elem);
+  if (c_buf == NULL) return ret_value;
+  status = H5Dread(c_dset_id, c_type_id, H5S_ALL, c_space_id, H5P_DEFAULT, c_buf);
+  if(status < 0) goto DONE;
+
+  c_len = 0;
+  for (i=0; i < num_elem; i++) c_len = H5_MAX(c_len, c_buf[i].len);
+  *len = (size_t_f)c_len;
+  H5Dvlen_reclaim(c_type_id, c_space_id, H5P_DEFAULT, c_buf);
+  ret_value = 0;
+
+DONE:
+
+  free(c_buf);
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * 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
+ *              xfer          - file transfer property
+ *              buf           - data buffer
+ *              dims          - one-demnsional array of size 2
+ *                              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
+ *              Wednesday, October 23, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+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;
+  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 *tmp;
+  size_t max_len;
+
+  hvl_t *c_buf;
+  hsize_t i;
+  hsize_t num_elem;
+
+  max_len = (size_t)dims[0];
+  num_elem = dims[1];
+
+  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;
+
+  c_buf = (hvl_t *)malloc((size_t)num_elem * sizeof(hvl_t));
+  if (c_buf == NULL) return ret_value;
+  tmp = (int *)buf;
+  for (i=0; i < num_elem; i++) {
+       c_buf[i].len = (size_t)len[i];
+       c_buf[i].p   = tmp;
+       tmp = tmp + max_len;
+ }
+  /*
+   * Call H5Dwrite function.
+   */
+   status = H5Dwrite(c_dset_id, c_mem_type_id, c_mem_space_id, c_file_space_id, c_xfer_prp, c_buf);
+
+  if( status < 0) goto DONE;
+  ret_value = 0;
+DONE:
+  free(c_buf);
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              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
+ * Programmer:  Elena Pourmal
+ *              Wednesday, October 24, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+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;
+  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;
+  size_t max_len;
+
+  hvl_t *c_buf;
+  size_t i;
+  hssize_t num_elem;
+
+  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;
+
+  max_len = (size_t)dims[0];
+  num_elem = H5Sget_select_npoints(c_mem_space_id);
+  if(num_elem != dims[1]) return ret_value;
+
+  c_buf = (hvl_t *)malloc((size_t)num_elem * sizeof(hvl_t));
+  if (c_buf == NULL) return ret_value;
+  /*
+   * Call H5Dread function.
+   */
+   status = H5Dread(c_dset_id, c_mem_type_id, c_mem_space_id, c_file_space_id, c_xfer_prp, c_buf);
+ if ( status < 0 ) goto DONE;
+  for (i=0; i < num_elem; i++) {
+       len[i] = (size_t_f)c_buf[i].len;
+       memcpy(&buf[i*max_len], c_buf[i].p, c_buf[i].len*sizeof(int));
+  }
+  H5Dvlen_reclaim(c_mem_type_id, c_mem_space_id, H5P_DEFAULT, c_buf);
+  ret_value = 0;
+DONE:
+  free(c_buf);
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              xfer          - file transfer property
+ *              buf           - data buffer
+ *              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
+ *              Monday, October 28, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+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;
+  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;
+  char *tmp, *tmp_p;
+  size_t max_len;
+
+  char **c_buf;
+  hsize_t i;
+  hsize_t num_elem;
+
+  max_len = (size_t)dims[0];
+  num_elem = dims[1];
+
+  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;
+
+  /*
+   * Allocate arra of character pointers
+   */
+  c_buf = (char **)malloc((size_t)num_elem * sizeof(char *));
+  if (c_buf == NULL) return ret_value;
+
+  /* Copy data to long C string */
+  tmp = (char *)HD5f2cstring(buf, (int)(max_len*num_elem));
+  if (tmp == NULL) { free(c_buf);
+                     return ret_value;
+                   }
+  /*
+   * Move data from temorary buffer
+   */
+   tmp_p = tmp;
+   for (i=0; i < num_elem; i++) {
+        c_buf[i] = (char *) malloc((size_t)len[i]+1);
+        memcpy(c_buf[i], tmp_p, (size_t)len[i]);
+        c_buf[i][len[i]] = '\0';
+        tmp_p = tmp_p + max_len;
+   }
+
+  /*
+   * Call H5Dwrite function.
+   */
+   status = H5Dwrite(c_dset_id, c_mem_type_id, c_mem_space_id, c_file_space_id, c_xfer_prp, c_buf);
+
+  if( status < 0) goto DONE;
+  ret_value = 0;
+DONE:
+  H5Dvlen_reclaim(c_mem_type_id, c_mem_space_id, H5P_DEFAULT, c_buf);
+  free(c_buf);
+  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
+ *              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] = 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
+ *              Friday, November 1, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+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;
+  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;
+  char *tmp, *tmp_p;
+  size_t max_len;
+
+  char **c_buf;
+  hsize_t i;
+  hsize_t num_elem;
+
+  max_len = (size_t)dims[0];
+  num_elem = dims[1];
+
+  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;
+
+  /*
+   * Allocate array of character pointers
+   */
+  c_buf = (char **)malloc((size_t)num_elem * sizeof(char *));
+  if (c_buf == NULL) return ret_value;
+
+  /*
+   * Call H5Dread function.
+   */
+   status = H5Dread(c_dset_id, c_mem_type_id, c_mem_space_id, c_file_space_id, c_xfer_prp, c_buf);
+   if (status < 0) { free(c_buf);
+                     return ret_value;
+                   }
+  /* Copy data to long C string */
+  tmp = (char *)malloc((size_t)(max_len*num_elem) +1);
+  tmp_p = tmp;
+  for (i=0; i<max_len*num_elem; i++) tmp[i] = ' ';
+  tmp[max_len*num_elem] = '\0';
+  for (i=0; i < num_elem; i++) {
+        memcpy(tmp_p, c_buf[i], strlen(c_buf[i]));
+        len[i] = (size_t_f)strlen(c_buf[i]);
+        tmp_p = tmp_p + max_len;
+  }
+  HD5packFstring(tmp, _fcdtocp(buf), (int)(max_len*num_elem));
+  ret_value = 0;
+  H5Dvlen_reclaim(c_mem_type_id, c_mem_space_id, H5P_DEFAULT, c_buf);
+  free(c_buf);
+  free(tmp);
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              xfer          - file transfer property
+ *              buf           - data buffer
+ *              dims          - one-demnsional array of size 2
+ *                              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
+ *              Monday, November 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+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;
+  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;
+  real_f *tmp;
+  size_t max_len;
+
+  hvl_t *c_buf;
+  hsize_t i;
+  hsize_t num_elem;
+
+  max_len = (size_t)dims[0];
+  num_elem = dims[1];
+
+  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;
+
+  c_buf = (hvl_t *)malloc((size_t)num_elem * sizeof(hvl_t));
+  if (c_buf == NULL) return ret_value;
+  tmp = (real_f *)buf;
+  for (i=0; i < num_elem; i++) {
+       c_buf[i].len = (size_t)len[i];
+       c_buf[i].p   = tmp;
+       tmp = tmp + max_len;
+ }
+  /*
+   * Call H5Dwrite function.
+   */
+   status = H5Dwrite(c_dset_id, c_mem_type_id, c_mem_space_id, c_file_space_id, c_xfer_prp, c_buf);
+
+  if( status < 0) goto DONE;
+  ret_value = 0;
+DONE:
+  free(c_buf);
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              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
+ * Programmer:  Elena Pourmal
+ *              Monday, November 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+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;
+  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;
+  size_t max_len;
+
+  hvl_t *c_buf;
+  size_t i;
+  hssize_t num_elem;
+
+  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;
+
+  max_len = (size_t)dims[0];
+  num_elem = H5Sget_select_npoints(c_mem_space_id);
+  if(num_elem != dims[1]) return ret_value;
+
+  c_buf = (hvl_t *)malloc((size_t)num_elem * sizeof(hvl_t));
+  if (c_buf == NULL) return ret_value;
+  /*
+   * Call H5Dread function.
+   */
+   status = H5Dread(c_dset_id, c_mem_type_id, c_mem_space_id, c_file_space_id, c_xfer_prp, c_buf);
+ if ( status <0  )  goto DONE;
+  for (i=0; i < num_elem; i++) {
+       len[i] = (size_t_f)c_buf[i].len;
+       memcpy(&buf[i*max_len], c_buf[i].p, c_buf[i].len*sizeof(real_f));
+  }
+
+  H5Dvlen_reclaim(c_mem_type_id, c_mem_space_id, H5P_DEFAULT, c_buf);
+  ret_value = 0;
+DONE:
+  free(c_buf);
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * 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
+ *              Wednesday, March 12, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+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;
+
+     /*
+      * Call h5dfill_c  function.
+      */
+     ret_value = nh5dfill_c(_fcdtocp(fill_value), fill_type_id, space_id, _fcdtocp(buf), mem_type_id);
+
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * 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
+ *              Wednesday, March 12, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+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;
+     hid_t c_fill_type_id;
+     hid_t c_mem_type_id;
+     hid_t c_space_id;
+
+     c_fill_type_id = (hid_t)*fill_type_id;
+     c_mem_type_id = (hid_t)*mem_type_id;
+     c_space_id = (hid_t)*space_id;
+
+     /*
+      * Call H5Dfill function.
+      */
+     ret = H5Dfill(fill_value, c_fill_type_id, buf, c_mem_type_id, c_space_id);
+
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     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
+ *              Wednesday, March 12, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5dget_space_status_c ( hid_t_f *dset_id, int_f *flag)
+
+{
+     int ret_value = -1;
+     herr_t ret;
+     hid_t c_dset_id;
+     H5D_space_status_t c_flag;
+
+     c_dset_id = (hid_t)*dset_id;
+
+     /*
+      * Call H5Dget_space_status
+      */
+     ret = H5Dget_space_status(c_dset_id, &c_flag);
+
+     if (ret < 0) return ret_value;
+     *flag = (int_f)c_flag;
+     ret_value = 0;
+     return ret_value;
+}
+

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Dff.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Dff.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Dff.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5649 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 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
+! Comment if on Crays
+            MODULE PROCEDURE h5dwrite_double_scalar
+            MODULE PROCEDURE h5dwrite_double_1
+            MODULE PROCEDURE h5dwrite_double_2
+            MODULE PROCEDURE h5dwrite_double_3
+            MODULE PROCEDURE h5dwrite_double_4
+            MODULE PROCEDURE h5dwrite_double_5
+            MODULE PROCEDURE h5dwrite_double_6
+            MODULE PROCEDURE h5dwrite_double_7
+! End comment if on Crays
+          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
+! Comment if on Crays
+            MODULE PROCEDURE h5dread_double_scalar
+            MODULE PROCEDURE h5dread_double_1
+            MODULE PROCEDURE h5dread_double_2
+            MODULE PROCEDURE h5dread_double_3
+            MODULE PROCEDURE h5dread_double_4
+            MODULE PROCEDURE h5dread_double_5
+            MODULE PROCEDURE h5dread_double_6
+            MODULE PROCEDURE h5dread_double_7
+! End comment if on Crays
+
+          END INTERFACE 
+
+          INTERFACE h5dwrite_vl_f
+            MODULE PROCEDURE h5dwrite_vl_integer
+            MODULE PROCEDURE h5dwrite_vl_real
+            MODULE PROCEDURE h5dwrite_vl_string
+          END INTERFACE
+
+          INTERFACE h5dread_vl_f
+            MODULE PROCEDURE h5dread_vl_integer
+            MODULE PROCEDURE h5dread_vl_real
+            MODULE PROCEDURE h5dread_vl_string
+          END INTERFACE
+
+          INTERFACE h5dfill_f
+            MODULE PROCEDURE h5dfill_integer
+            MODULE PROCEDURE h5dfill_real
+            MODULE PROCEDURE h5dfill_double
+            MODULE PROCEDURE h5dfill_char
+          END INTERFACE
+
+
+        CONTAINS
+          
+!----------------------------------------------------------------------
+! Name:		h5dcreate_f 
+!
+! Purpose: 	Creates a dataset at the specified location 	
+!
+! 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:
+!		createion_prp	- dataset creation property list identifier
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  February 28, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+  
+          SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, & 
+                                 hdferr, creation_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dcreate_f
+!DEC$endif
+            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(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) :: creation_prp 
+                                                   ! Dataset creation propertly
+                                                   ! list identifier
+            INTEGER :: creation_prp_default
+            INTEGER :: namelen                     ! Name length
+
+!            INTEGER, EXTERNAL :: h5dcreate_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dcreate_c(loc_id, name, namelen, type_id, &
+                                           space_id, creation_prp_default, dset_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DCREATE_C'::h5dcreate_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) :: type_id
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER :: creation_prp_default
+              INTEGER(HID_T), INTENT(OUT) :: dset_id
+              END FUNCTION h5dcreate_c
+            END INTERFACE
+
+            creation_prp_default = H5P_DEFAULT_F
+            if (present(creation_prp)) creation_prp_default = creation_prp 
+            namelen = LEN(name)
+            hdferr = h5dcreate_c(loc_id, name, namelen, type_id, space_id, & 
+                                 creation_prp_default, dset_id) 
+          END SUBROUTINE h5dcreate_f
+          
+!----------------------------------------------------------------------
+! Name:		h5dopen_f 
+!
+! Purpose: 	Opens an existing dataset.  	
+!
+! Inputs:  
+!		loc_id		- file or group identifier
+!		name		- dataset name
+! Outputs:  
+!		dset_id		- dataset 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 h5dopen_f(loc_id, name, dset_id, hdferr)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dopen_f
+!DEC$endif
+            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 :: namelen                     ! Name length
+
+!            INTEGER, EXTERNAL :: h5dopen_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dopen_c(loc_id, name, namelen, dset_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,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(OUT) :: dset_id
+              END FUNCTION h5dopen_c
+            END INTERFACE
+
+            namelen = LEN(name)
+            hdferr = h5dopen_c(loc_id, name, namelen, dset_id) 
+
+          END SUBROUTINE h5dopen_f
+          
+!----------------------------------------------------------------------
+! Name:		h5dclose_f 
+!
+! Purpose: 	Closes a dataset.  	
+!
+! Inputs:  
+!		dset_id		- dataset identifier
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE			
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  February 28, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5dclose_f(dset_id, hdferr)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dclose_f
+!DEC$endif
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DCLOSE_C'::h5dclose_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: dset_id
+              END FUNCTION h5dclose_c
+            END INTERFACE
+
+            hdferr = h5dclose_c(dset_id)
+
+          END SUBROUTINE h5dclose_f
+
+          SUBROUTINE h5dwrite_reference_obj(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_reference_obj
+!DEC$endif
+
+            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 :: i,j
+
+!            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)
+              !MS$ATTRIBUTES C,reference,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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_reference_dsetreg
+!DEC$endif
+
+            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
+
+!            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)
+              !MS$ATTRIBUTES C,reference,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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_integer_scalar
+!DEC$endif
+
+            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
+
+!            INTEGER, EXTERNAL :: h5dwrite_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_integer_1
+!DEC$endif
+
+            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 
+
+!            INTEGER, EXTERNAL :: h5dwrite_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_integer_2
+!DEC$endif
+
+            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 
+
+!            INTEGER, EXTERNAL :: h5dwrite_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_integer_3
+!DEC$endif
+
+            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
+
+!            INTEGER, EXTERNAL :: h5dwrite_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_integer_4
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_integer_5
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_integer_6
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_integer_7
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_char_scalar
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwritec_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITEC_C'::h5dwritec_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_char_1
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwritec_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITEC_C'::h5dwritec_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_char_2
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwritec_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITEC_C'::h5dwritec_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_char_3
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwritec_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITEC_C'::h5dwritec_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_char_4
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwritec_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITEC_C'::h5dwritec_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_char_5
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwritec_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITEC_C'::h5dwritec_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_char_6
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwritec_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITEC_C'::h5dwritec_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_char_7
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwritec_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITEC_C'::h5dwritec_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_real_scalar
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_real_1
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_real_2
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_real_3
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_real_4
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_real_5
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_real_6
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_real_7
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dwrite_real_7
+
+
+          SUBROUTINE h5dwrite_double_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_double_scalar
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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
+              DOUBLE PRECISION, INTENT(IN) :: buf
+              END FUNCTION h5dwrite_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dwrite_double_scalar
+
+          SUBROUTINE h5dwrite_double_1(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_double_1
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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
+              DOUBLE PRECISION, INTENT(IN), &
+              DIMENSION(dims(1)) :: buf
+              END FUNCTION h5dwrite_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dwrite_double_1
+
+          SUBROUTINE h5dwrite_double_2(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_double_2
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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
+              DOUBLE PRECISION, INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+              END FUNCTION h5dwrite_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dwrite_double_2
+
+          SUBROUTINE h5dwrite_double_3(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_double_3
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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
+              DOUBLE PRECISION, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+              END FUNCTION h5dwrite_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dwrite_double_3
+
+          SUBROUTINE h5dwrite_double_4(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_double_4
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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
+              DOUBLE PRECISION, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+              END FUNCTION h5dwrite_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dwrite_double_4
+
+          SUBROUTINE h5dwrite_double_5(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_double_5
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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
+              DOUBLE PRECISION, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+              END FUNCTION h5dwrite_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dwrite_double_5
+
+          SUBROUTINE h5dwrite_double_6(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_double_6
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, INTENT(IN), &
+            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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
+              DOUBLE PRECISION, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+              END FUNCTION h5dwrite_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dwrite_double_6
+
+          SUBROUTINE h5dwrite_double_7(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_double_7
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, INTENT(IN), &
+            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dwrite_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DWRITE_C'::h5dwrite_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
+              DOUBLE PRECISION, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+              END FUNCTION h5dwrite_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dwrite_double_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_reference_obj
+!DEC$endif
+
+            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 :: i,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)
+              !MS$ATTRIBUTES C,reference,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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_reference_dsetreg
+!DEC$endif
+
+            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)
+              !MS$ATTRIBUTES C,reference,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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_integer_scalar
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_integer_1
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_integer_2
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_integer_3
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_integer_4
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_integer_5
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_integer_6
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_integer_7
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_char_scalar
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dreadc_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREADC_C'::h5dreadc_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_char_1
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dreadc_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREADC_C'::h5dreadc_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_char_2
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dreadc_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREADC_C'::h5dreadc_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_char_3
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dreadc_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREADC_C'::h5dreadc_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_char_4
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dreadc_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREADC_C'::h5dreadc_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_char_5
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dreadc_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREADC_C'::h5dreadc_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_char_6
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dreadc_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREADC_C'::h5dreadc_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_char_7
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dreadc_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREADC_C'::h5dreadc_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_real_scalar
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_real_1
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_real_2
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_real_3
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_real_4
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_real_5
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_real_6
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_real_7
+!DEC$endif
+
+            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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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_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_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 h5dread_double_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_double_scalar
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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
+              DOUBLE PRECISION, INTENT(OUT) :: buf
+              END FUNCTION h5dread_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dread_double_scalar
+
+          SUBROUTINE h5dread_double_1(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_double_1
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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
+              DOUBLE PRECISION, INTENT(INOUT), &
+              DIMENSION(dims(1)) :: buf
+              END FUNCTION h5dread_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dread_double_1
+
+          SUBROUTINE h5dread_double_2(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_double_2
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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
+              DOUBLE PRECISION, INTENT(INOUT), & 
+              DIMENSION(dims(1),dims(2)) :: buf
+              END FUNCTION h5dread_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dread_double_2
+
+          SUBROUTINE h5dread_double_3(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_double_3
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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
+              DOUBLE PRECISION, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+              END FUNCTION h5dread_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dread_double_3
+
+          SUBROUTINE h5dread_double_4(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_double_4
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, INTENT(INOUT), &
+            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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
+              DOUBLE PRECISION, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+              END FUNCTION h5dread_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dread_double_4
+
+          SUBROUTINE h5dread_double_5(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_double_5
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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
+              DOUBLE PRECISION, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+              END FUNCTION h5dread_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dread_double_5
+
+          SUBROUTINE h5dread_double_6(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_double_6
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, INTENT(INOUT), &
+            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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
+              DOUBLE PRECISION, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+              END FUNCTION h5dread_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dread_double_6
+
+          SUBROUTINE h5dread_double_7(dset_id, mem_type_id, buf, dims, hdferr, &
+                                        mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_double_7
+!DEC$endif
+
+            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
+            DOUBLE PRECISION, INTENT(INOUT), &
+            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: 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_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dread_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)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DREAD_C'::h5dread_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
+              DOUBLE PRECISION, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+              END FUNCTION h5dread_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_c(dset_id, mem_type_id, mem_space_id_default, &
+                                file_space_id_default, xfer_prp_default, buf, dims)
+           
+          END SUBROUTINE h5dread_double_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) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dget_space_f
+!DEC$endif
+            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)
+              !MS$ATTRIBUTES C,reference,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) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dget_type_f
+!DEC$endif
+            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)
+              !MS$ATTRIBUTES C,reference,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:		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 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5dextend_f(dataset_id, size, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dextend_f
+!DEC$endif
+            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 
+
+!            INTEGER, EXTERNAL ::  h5dextend_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dextend_c(dataset_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DEXTEND_C'::h5dextend_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: dataset_id
+              INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN)  :: size
+              END FUNCTION h5dextend_c
+            END INTERFACE
+
+            hdferr = h5dextend_c(dataset_id, size)
+          END SUBROUTINE h5dextend_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) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dget_create_plist_f
+!DEC$endif
+            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)
+              !MS$ATTRIBUTES C,reference,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) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dget_storage_size_f
+!DEC$endif
+            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)
+              !MS$ATTRIBUTES C,reference,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) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dvlen_get_max_len_f
+!DEC$endif
+            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)
+              !MS$ATTRIBUTES C,reference,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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_vl_integer
+!DEC$endif
+
+            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)
+              !MS$ATTRIBUTES C,reference,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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_vl_integer
+!DEC$endif
+
+            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)
+              !MS$ATTRIBUTES C,reference,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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_vl_real
+!DEC$endif
+
+            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)
+              !MS$ATTRIBUTES C,reference,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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_vl_real
+!DEC$endif
+
+            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)
+              !MS$ATTRIBUTES C,reference,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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dwrite_vl_string
+!DEC$endif
+
+            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
+            integer i, j
+
+            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)
+              !MS$ATTRIBUTES C,reference,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, &
+                                         hdferr, &
+                                         mem_space_id, file_space_id, xfer_prp)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dread_vl_string
+!DEC$endif
+
+            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)
+              !MS$ATTRIBUTES C,reference,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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dfill_integer
+!DEC$endif
+
+            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_c
+! MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dfill_c(fill_value, fill_type_id, space_id, &
+                                         buf, mem_type_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DFILL_C'::h5dfill_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_c
+            END INTERFACE 
+            fill_type_id = H5T_NATIVE_INTEGER
+            mem_type_id  = H5T_NATIVE_INTEGER
+
+            hdferr = h5dfill_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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dfill_real
+!DEC$endif
+
+            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_c
+! MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dfill_c(fill_valuer, fill_type_id, space_id, &
+                                         buf, mem_type_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DFILL_C'::h5dfill_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_c
+            END INTERFACE 
+            fill_type_id = H5T_NATIVE_REAL
+            mem_type_id  = H5T_NATIVE_REAL
+
+            hdferr = h5dfill_c(fill_valuer, fill_type_id, space_id, & 
+                               buf, mem_type_id)
+          END SUBROUTINE h5dfill_real
+
+!----------------------------------------------------------------------
+! Name:		h5dfill_double
+!
+! 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_double(fill_value, space_id, buf,  hdferr)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dfill_double
+!DEC$endif
+
+            IMPLICIT NONE
+            DOUBLE PRECISION, INTENT(IN) :: fill_value  ! Fill value
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+            DOUBLE PRECISION, 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_c
+! MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5dfill_c(fill_value, fill_type_id, space_id, &
+                                         buf, mem_type_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5DFILL_C'::h5dfill_c  
+              !DEC$ ENDIF
+              DOUBLE PRECISION, 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
+              DOUBLE PRECISION, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
+              INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier 
+              END FUNCTION h5dfill_c
+            END INTERFACE 
+            fill_type_id = H5T_NATIVE_DOUBLE
+            mem_type_id  = H5T_NATIVE_DOUBLE
+
+            hdferr = h5dfill_c(fill_value, fill_type_id, space_id, & 
+                               buf, mem_type_id)
+
+
+          END SUBROUTINE h5dfill_double
+
+!----------------------------------------------------------------------
+! 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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dfill_integer
+!DEC$endif
+
+            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)
+              !MS$ATTRIBUTES C,reference,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)
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dget_space_status_f
+!DEC$endif
+
+            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)
+              !MS$ATTRIBUTES C,reference,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
+
+      END MODULE H5D

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Ef.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Ef.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Ef.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,191 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 files contains C stubs for H5E Fortran APIs */
+
+#include "H5f90.h"
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5eclear_c
+ * Purpose:     Call H5Eclear to clear the error stack for the current thread
+ * Inputs:
+ * Outputs:
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, March 29, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5eclear_c( )
+{
+  int ret_val = -1;
+  herr_t status;
+
+  /*
+   * Call H5Eclear function.
+   */
+  status = H5Eclear();
+  if(status < 0) return ret_val;
+  ret_val = 0;
+  return ret_val;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5eprint_c1
+ * Purpose:     Call H5Eprint to print the error stack in a default manner.
+ * Inputs:      name - file name
+ *              namelen - length of name
+ * Outputs:
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, March 29, 2000
+ * Modifications: Bug fix: Added call to close the file with the error messages
+ *                EP 11/26/01
+ *---------------------------------------------------------------------------*/
+int_f
+nh5eprint_c1(_fcd name, int_f* namelen)
+{
+  int ret_val = -1;
+  herr_t status;
+  FILE * file;
+  char* c_name;
+  int c_namelen;
+  c_namelen = *namelen;
+  c_name = (char*)HD5f2cstring(name, c_namelen);
+  if(c_name == NULL) return ret_val;
+  file = fopen(c_name, "a");
+       if(!file) goto DONE;
+  /*
+   * Call H5Eprint function.
+   */
+  status = H5Eprint(file);
+  if (status >=0 ) ret_val = 0;
+  fclose(file);
+
+DONE:
+  HDfree(c_name);
+  return ret_val;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5eprint_c2
+ * Purpose:     Call H5Eprint to print the error stack to stderr
+ *              in a default manner.
+ * Inputs:
+ * Outputs:
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, March 29, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5eprint_c2()
+{
+  int ret_val = -1;
+  herr_t status;
+
+  /*
+   * Call H5Eprint function.
+   */
+  status = H5Eprint(NULL);
+  if(status >= 0) ret_val = 0;
+  return ret_val;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5eget_major_c
+ * Purpose:     Call H5Eget_major to get a character string
+ *              describing an error specified by a major error number.
+ * Inputs:      error_no - Major error number
+ * Outputs:     name - character string describing the error
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, March 29, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5eget_major_c(int_f* error_no, _fcd name)
+{
+  int ret_val = -1;
+  const char* c_name;
+  H5E_major_t c_error_no;
+  c_error_no = (H5E_major_t)*error_no;
+
+  /*
+   * Call H5Eget_major function.
+   */
+  c_name = H5Eget_major(c_error_no);
+  HD5packFstring((char*)c_name, _fcdtocp(name), strlen(c_name));
+
+  if(!strcmp(c_name, "Invalid major error number")) return ret_val;
+  ret_val = 0;
+  return ret_val;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5eget_minor_c
+ * Purpose:     Call H5Eget_minor to get a character string
+ *              describing an error specified by a minor error number.
+ * Inputs:      error_no - Major error number
+ * Outputs:     name - character string describing the error
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, March 29, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5eget_minor_c(int_f* error_no, _fcd name)
+{
+  int ret_val = -1;
+  const char* c_name;
+  H5E_minor_t c_error_no;
+  c_error_no = (H5E_minor_t)*error_no;
+
+  /*
+   * Call H5Eget_minor function.
+   */
+  c_name = H5Eget_minor(c_error_no);
+  HD5packFstring((char*)c_name, _fcdtocp(name), strlen(c_name));
+
+  if(!strcmp(c_name, "Invalid minor error number")) return ret_val;
+  ret_val = 0;
+  return ret_val;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5eset_auto_c
+ * Purpose:     Call H5Eset_auto to turn automatic error printing on or off.
+ * Inputs:      printflag - flag to turn automatic error printing on or off.
+ * Outputs:
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Friday, November 17, 2000
+ * Modifications:  major bug fix. Function never disabled printing.
+ *---------------------------------------------------------------------------*/
+int_f
+nh5eset_auto_c(int_f* printflag)
+{
+  int ret_val = -1;
+  herr_t status;
+
+  if (*printflag == 1)
+    status = H5Eset_auto((H5E_auto_t)H5Eprint, stderr);
+  if (*printflag == 0)
+    status = H5Eset_auto(NULL,NULL);
+  if (status >= 0) ret_val = 0;
+  return ret_val;
+}

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Eff.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Eff.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Eff.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,312 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 file contains FORTRAN90 interfaces for H5E functions
+!
+      MODULE H5E
+
+        USE H5GLOBAL
+      
+      CONTAINS
+
+!----------------------------------------------------------------------
+! Name:		h5eclear_f
+!
+! Purpose:	Clears the error stack for the current thread. 
+!
+! Inputs:  
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!		
+!	
+!
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  April 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5eclear_f(hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5eclear_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5eclear_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5eclear_c()
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5ECLEAR_C'::h5eclear_c
+              !DEC$ ENDIF
+              END FUNCTION h5eclear_c
+            END INTERFACE
+            hdferr = h5eclear_c()
+          END SUBROUTINE h5eclear_f
+
+!----------------------------------------------------------------------
+! Name:		h5h5eprint_f
+!
+! Purpose:	Prints the error stack in a default manner. 
+!
+! Inputs:  
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!		name		- name of the file that
+!				  contains print output		
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  April 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5eprint_f(hdferr, name)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5eprint_f
+!DEC$endif
+!
+            CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: name ! File name
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!            INTEGER, EXTERNAL :: h5eprint_c1, h5eprint_c2 
+            INTEGER :: namelen
+
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5eprint_c1(name, namelen)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5EPRINT_C1'::h5eprint_c1
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER :: namelen
+              CHARACTER(LEN=*),INTENT(IN) :: name
+              END FUNCTION h5eprint_c1
+            END INTERFACE
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5eprint_c2()
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5EPRINT_C2'::h5eprint_c2
+              !DEC$ ENDIF
+              END FUNCTION h5eprint_c2
+            END INTERFACE
+            namelen = LEN(NAME)
+            if (present(name)) then
+               hdferr = h5eprint_c1(name, namelen) 
+            else
+            hdferr = h5eprint_c2() 
+            endif
+          END SUBROUTINE h5eprint_f
+
+!----------------------------------------------------------------------
+! Name:		h5eget_major_f
+!
+! Purpose:	Returns a character string describing an error specified 
+!		by a major error number. 
+!
+! Inputs:  
+!		error_no	- mojor error number 
+! Outputs:  
+!		name		- character string describing the error
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!		
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  April 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5eget_major_f(error_no, name, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5eget_major_f
+!DEC$endif
+!
+            INTEGER, INTENT(IN) :: error_no !Major error number
+            CHARACTER(LEN=*), INTENT(OUT) :: name ! Character string describing
+                                                  ! the error.
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5eget_major_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5eget_major_c(error_no, name)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5EGET_MAJOR_C'::h5eget_major_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER :: error_no
+               CHARACTER(LEN=*) :: name 
+              END FUNCTION h5eget_major_c
+            END INTERFACE
+
+            hdferr = h5eget_major_c(error_no, name) 
+          END SUBROUTINE h5eget_major_f
+
+!----------------------------------------------------------------------
+! Name:		h5eget_minor_f
+!
+! Purpose:	Returns a character string describing an error specified 
+!		by a minor error number. 
+!
+! Inputs:  
+!		error_no	- minor error number 
+! Outputs:  
+!		name		- character string describing the error
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!		
+!	
+!
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  April 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5eget_minor_f(error_no, name, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5eget_minor_f
+!DEC$endif
+!
+            INTEGER, INTENT(IN) :: error_no !Major error number
+            CHARACTER(LEN=*), INTENT(OUT) :: name ! Character string describing
+                                                  ! the error
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5eget_minor_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5eget_minor_c(error_no, name)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5EGET_MINOR_C'::h5eget_minor_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER :: error_no
+               CHARACTER(LEN=*) :: name 
+              END FUNCTION h5eget_minor_c
+            END INTERFACE
+
+            hdferr = h5eget_minor_c(error_no, name) 
+          END SUBROUTINE h5eget_minor_f
+!----------------------------------------------------------------------
+! Name:		h5eset_auto_f
+!
+! Purpose:	Turns automatic error printing on or off
+!
+! Inputs:  
+!		printflag	- flag to turn automatic error
+!				- Possible values are:
+!				- 1 (on), 0 (off)
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!		
+!	
+!
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  April 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5eset_auto_f(printflag, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5eset_auto_f
+!DEC$endif
+!
+            INTEGER, INTENT(IN) :: printflag  !flag to turn automatic error
+                                              !printing on or off
+                                              !possible values are:
+                                              !printon (1)
+                                              !printoff(0)
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5eset_auto_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5eset_auto_c(printflag)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5ESET_AUTO_C'::h5eset_auto_c
+              !DEC$ ENDIF
+              INTEGER :: printflag
+              END FUNCTION h5eset_auto_c
+            END INTERFACE
+
+            hdferr = h5eset_auto_c(printflag) 
+          END SUBROUTINE h5eset_auto_f
+
+      END MODULE H5E
+          

Added: packages/hdf5/branches/upstream/current/fortran/src/H5FDmpiof.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5FDmpiof.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5FDmpiof.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,246 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 files contains C stubs for Parallel Fortran APIs */
+
+#include "H5f90.h"
+#include <mpi.h>
+#include "H5pubconf_fortran.h"
+
+
+/* Support for C to Fortran translation in MPI */
+#ifndef H5_HAVE_MPI_MULTI_LANG_Comm
+#define MPI_Comm_c2f(comm) (int_f)(comm)
+#define MPI_Comm_f2c(comm) (MPI_Comm)(comm)
+#endif /*MPI Comm*/
+#ifndef H5_HAVE_MPI_MULTI_LANG_Info
+#define MPI_Info_c2f(info) (int_f)(info)
+#define MPI_Info_f2c(info) (MPI_Info)(info)
+#endif /*MPI Info*/
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_fapl_mpio_c
+ * Purpose:     Call H5Pset_fapl_mpio to set mode for parallel I/O and the user
+ *              supplied communicator and info object
+ * Inputs:      prp_id - property list identifier
+ *              comm   - MPI communicator
+ *              info   - MPI info object
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, October 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_fapl_mpio_c(hid_t_f *prp_id, int_f* comm, int_f* info)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     MPI_Comm c_comm;
+     MPI_Info c_info;
+     c_comm = MPI_Comm_f2c(*comm);
+     c_info = MPI_Info_f2c(*info);
+
+     /*
+      * Call H5Pset_mpi function.
+      */
+     c_prp_id = *prp_id;
+     ret = H5Pset_fapl_mpio(c_prp_id, c_comm, c_info);
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_fapl_mpio_c
+ * Purpose:     Call H5Pget_fapl_mpio to retrieve communicator and info object
+ * Inputs:      prp_id - property list identifier
+ *              comm   - buffer to return MPI communicator
+ *              info   - buffer to return MPI info object
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, October 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_fapl_mpio_c(hid_t_f *prp_id, int_f* comm, int_f* info)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     MPI_Comm c_comm;
+     MPI_Info c_info;
+
+     /*
+      * Call H5Pget_mpi function.
+      */
+     c_prp_id = *prp_id;
+     ret = H5Pget_fapl_mpio(c_prp_id, &c_comm, &c_info);
+     if (ret < 0) return ret_value;
+     *comm = (int_f) MPI_Comm_c2f(c_comm);
+     *info = (int_f) MPI_Info_c2f(c_info);
+     ret_value = 0;
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_dxpl_mpio_c
+ * Purpose:     Call H5Pset_dxpl_mpio to set transfer mode of the dataset
+ *              trasfer property list
+ * Inputs:      prp_id - property list identifier
+ *              data_xfer_mode - transfer mode
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, October 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_dxpl_mpio_c(hid_t_f *prp_id, int_f* data_xfer_mode)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     H5FD_mpio_xfer_t c_data_xfer_mode;
+/*
+     switch (*data_xfer_mode) {
+
+        case H5FD_MPIO_INDEPENDENT_F:
+             c_data_xfer_mode = H5FD_MPIO_INDEPENDENT;
+             break;
+
+        case H5FD_MPIO_COLLECTIVE_F:
+             c_data_xfer_mode = H5FD_MPIO_COLLECTIVE;
+             break;
+        default:
+          return ret_value;
+      }
+*/
+     c_data_xfer_mode = (H5FD_mpio_xfer_t)*data_xfer_mode;
+     /*
+      * Call H5Pset_dxpl_mpio function.
+      */
+     c_prp_id = *prp_id;
+     ret = H5Pset_dxpl_mpio(c_prp_id, c_data_xfer_mode);
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_dxpl_mpio_c
+ * Purpose:     Call H5Pget_dxpl_mpio to get transfer mode of the dataset
+ *              trasfer property list
+ * Inputs:      prp_id - property list identifier
+ *              data_xfer_mode  - buffer to retrieve transfer mode
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, June 15, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_dxpl_mpio_c(hid_t_f *prp_id, int_f* data_xfer_mode)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     H5FD_mpio_xfer_t c_data_xfer_mode;
+
+     /*
+      * Call H5Pget_xfer function.
+      */
+     c_prp_id = *prp_id;
+     ret = H5Pget_dxpl_mpio(c_prp_id, &c_data_xfer_mode);
+     if (ret < 0) return ret_value;
+     *data_xfer_mode = (int_f)c_data_xfer_mode;
+/*
+     switch (c_data_xfer_mode) {
+
+        case H5FD_MPIO_INDEPENDENT:
+             *data_xfer_mode = H5FD_MPIO_INDEPENDENT_F;
+             break;
+
+        case H5FD_MPIO_COLLECTIVE:
+             *data_xfer_mode = H5FD_MPIO_COLLECTIVE_F;
+             break;
+
+        default:
+          return ret_value;
+      }
+*/
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_fapl_mpiposix_c
+ * Purpose:     Call H5Pset_fapl_mpiposix to set mode for parallel I/O and the user
+ *              supplied communicator
+ * Inputs:      prp_id - property list identifier
+ *              comm   - MPI communicator
+ *              flag   - flag to use GPFS hints
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Tuesday, May 6, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_fapl_mpiposix_c(hid_t_f *prp_id, int_f* comm, int_f* flag)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     hbool_t c_flag;
+     MPI_Comm c_comm;
+     c_comm = MPI_Comm_f2c(*comm);
+     c_flag  = (hbool_t)*flag;
+     /*
+      * Call H5Pset_fapl_mpiposix function.
+      */
+     c_prp_id = (hid_t) *prp_id;
+     ret = H5Pset_fapl_mpiposix(c_prp_id, c_comm, c_flag);
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_fapl_mpiposix_c
+ * Purpose:     Call H5Pget_fapl_mpiposix to retrieve communicator and info object
+ * Inputs:      prp_id - property list identifier
+ * Outputs:     comm   - buffer to return MPI communicator
+ *              flag - flag to use GPFS hints
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Tuesday, May 6, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_fapl_mpiposix_c(hid_t_f *prp_id, int_f* comm, int_f* flag)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     hbool_t c_flag;
+     MPI_Comm c_comm;
+
+     /*
+      * Call H5Pget_fapl_mpiposix function.
+      */
+     c_prp_id = (hid_t) *prp_id;
+     ret = H5Pget_fapl_mpiposix(c_prp_id, &c_comm, &c_flag);
+     if (ret < 0) return ret_value;
+     *comm = (int_f) MPI_Comm_c2f(c_comm);
+     *flag = (int_f) c_flag;
+     ret_value = 0;
+     return ret_value;
+}

Added: packages/hdf5/branches/upstream/current/fortran/src/H5FDmpioff.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5FDmpioff.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5FDmpioff.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,249 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 file contains Fortran90 interfaces for H5P functions needed by || MPI programs.
+!
+     MODULE H5FDMPIO
+         USE H5GLOBAL
+         CONTAINS
+
+!----------------------------------------------------------------------
+! Name:		h5pset_fapl_mpio_f 
+!
+! Purpose: 	Stores MPI IO communicator information to the file 
+!		access property list. 
+!
+! Inputs:  	
+!		prp_id		- file access property list identifier
+!		comm		- MPI-2 communicator
+!		info		- MPI-2 info object
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		November, 2000
+!
+! Modifications:
+!
+! Comment:		
+!----------------------------------------------------------------------
+         SUBROUTINE h5pset_fapl_mpio_f(prp_id, comm, info, hdferr) 
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+            INTEGER, INTENT(IN) :: comm ! MPI communicator to be used for file open
+                                        ! as defined in MPI_FILE_OPEN of MPI-2
+            INTEGER, INTENT(IN) :: info ! MPI info object to be used for file open
+                                        ! as defined in MPI_FILE_OPEN of MPI-2
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+            INTEGER, EXTERNAL :: h5pset_fapl_mpio_c
+            hdferr = h5pset_fapl_mpio_c(prp_id, comm, info)
+          END SUBROUTINE h5pset_fapl_mpio_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_fapl_mpio_f 
+!
+! Purpose: 	Returns MPI communicator information. 	
+!
+! Inputs:  
+!		prp_id		- file access property list identifier
+! Outputs:  
+!		comm		- MPI-2 communicator
+!		info		- MPI-2 info object
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		November, 2000
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_fapl_mpio_f(prp_id, comm, info, hdferr) 
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+            INTEGER, INTENT(OUT) :: comm ! buffer to return communicator 
+            INTEGER, INTENT(OUT) :: info ! buffer to return info object 
+                                        ! as defined in MPI_FILE_OPEN of MPI-2
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+            INTEGER, EXTERNAL :: h5pget_fapl_mpio_c
+            hdferr = h5pget_fapl_mpio_c(prp_id, comm, info)
+          END SUBROUTINE h5pget_fapl_mpio_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_dxpl_mpio_f 
+!
+! Purpose: 	Sets data transfer mode. 
+!
+! Inputs:  
+!		prp_id		- data transfer property list identifier
+!		data_xfer_mode	- transfer mode
+!				  Possible values are:
+!				  H5FD_MPIO_INDEPENDENT_F
+!				  H5FD_MPIO_COLLECTIVE_F
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		November, 2000
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+         SUBROUTINE h5pset_dxpl_mpio_f(prp_id, data_xfer_mode, hdferr) 
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+            INTEGER, INTENT(IN) :: data_xfer_mode ! Data transfer mode. Possible values are:
+                                                  ! H5FD_MPIO_INDEPENDENT_F
+                                                  ! H5FD_MPIO_COLLECTIVE_F
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+            INTEGER, EXTERNAL :: h5pset_dxpl_mpio_c 
+            hdferr = h5pset_dxpl_mpio_c(prp_id, data_xfer_mode)
+          END SUBROUTINE h5pset_dxpl_mpio_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_dxpl_mpio_f 
+!
+! Purpose: 	Returns the data transfer mode. 
+!
+! Inputs:  
+!		prp_id		- data transfer property list identifier
+! Outputs:  
+!		data_xfer_mode	- transfer mode
+!				  Possible values are:
+!				  H5FD_MPIO_INDEPENDENT_F
+!				  H5FD_MPIO_COLLECTIVE_F
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		November, 2000
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+         SUBROUTINE h5pget_dxpl_mpio_f(prp_id, data_xfer_mode, hdferr) 
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+            INTEGER, INTENT(OUT) :: data_xfer_mode ! Data transfer mode. Possible values are:
+                                                  ! H5FD_MPIO_INDEPENDENT_F
+                                                  ! H5FD_MPIO_COLLECTIVE_F
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+            INTEGER, EXTERNAL :: h5pget_dxpl_mpio_c
+            hdferr = h5pget_dxpl_mpio_c(prp_id, data_xfer_mode)
+          END SUBROUTINE h5pget_dxpl_mpio_f
+
+
+!----------------------------------------------------------------------
+! Name:		h5pset_fapl_mpiposix_f 
+!
+! Purpose: 	Stores MPI IO communicator information to the file 
+!		access property list. 
+!
+! Inputs:  	
+!		prp_id		- file access property list identifier
+!		comm		- MPI-2 communicator
+!		use_gpfs	- logical flag to use the GPFS hints
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		May 6, 2003
+!
+! Modifications:
+!
+! Comment:		
+!----------------------------------------------------------------------
+         SUBROUTINE h5pset_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr) 
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+            INTEGER, INTENT(IN) :: comm ! MPI communicator to be used for file open
+                                        ! as defined in MPI_FILE_OPEN of MPI-2
+            LOGICAL, INTENT(IN) :: use_gpfs
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: flag
+
+            INTEGER, EXTERNAL :: h5pset_fapl_mpiposix_c
+            flag = 0
+            if(use_gpfs) flag = 1 
+            hdferr = h5pset_fapl_mpiposix_c(prp_id, comm, flag)
+          END SUBROUTINE h5pset_fapl_mpiposix_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_fapl_mpiposix_f 
+!
+! Purpose: 	Returns MPI communicator information. 	
+!
+! Inputs:  
+!		prp_id		- file access property list identifier
+! Outputs:  
+!		comm		- MPI-2 communicator
+!		use_gpfs        - flag to use GPFS hints
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		May 6, 2003
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr) 
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+            INTEGER, INTENT(OUT) :: comm ! buffer to return communicator 
+            LOGICAL, INTENT(OUT) :: use_gpfs
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: flag
+
+            INTEGER, EXTERNAL :: h5pget_fapl_mpiposix_c
+            hdferr = h5pget_fapl_mpiposix_c(prp_id, comm, flag)
+            use_gpfs = .FALSE.
+            if (flag .eq. 1) use_gpfs = .TRUE.
+          END SUBROUTINE h5pget_fapl_mpiposix_f
+
+    END MODULE H5FDMPIO

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Ff.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Ff.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Ff.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,547 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 files contains C stubs for H5F Fortran APIs */
+
+#include "H5f90.h"
+#include "H5Eprivate.h"
+
+/*----------------------------------------------------------------------------
+ * Name:        h5fcreate_c
+ * Purpose:     Call H5Fcreate to create the file
+ * Inputs:      name - name of the file
+ *              namelen - name length
+ *              access_flags - file access  flags
+ *              crt_pr  - identifier of creation property list
+ *              acc_prp - identifier of access property list
+ * Outputs:     file_id - file identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, July 26, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5fcreate_c(_fcd name, int_f *namelen, int_f *access_flags, hid_t_f* crt_prp, hid_t_f *acc_prp, hid_t_f *file_id)
+{
+     int ret_value = -1;
+     char *c_name;
+     int c_namelen;
+     hid_t c_file_id;
+     unsigned c_access_flags;
+     hid_t c_crt_prp;
+     hid_t c_acc_prp;
+
+     /*
+      * Define access flags
+      */
+     c_access_flags = (unsigned) *access_flags;
+     /*
+      * Define creation property
+      */
+     c_crt_prp = *crt_prp;
+/*
+     if ( H5P_DEFAULT_F == c_crt_prp ) c_crt_prp = H5P_DEFAULT;
+*/
+     /*
+      * Define access property
+      */
+     c_acc_prp = *acc_prp;
+/*
+     if ( H5P_DEFAULT_F == c_acc_prp ) c_acc_prp = H5P_DEFAULT;
+
+*/
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Fcreate function.
+      */
+     c_file_id = H5Fcreate(c_name, c_access_flags, c_crt_prp, c_acc_prp);
+
+     if (c_file_id < 0) return ret_value;
+     *file_id = c_file_id;
+     HDfree(c_name);
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5fflush_c
+ * Purpose:     Call H5Fflush to flush the object
+ * Inputs:      object_id - identifier of either a file, a dataset,
+ *                          a group, an attribute or a named data type
+ *              scope - integer to specify the flushing action, either
+ *                      H5F_SCOPE_GLOBAL or H5F_SCOPE_LOCAL
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, November 5, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5fflush_c (hid_t_f *object_id, int_f *scope)
+{
+     int ret_value = -1;
+     hid_t c_file_id;
+     H5F_scope_t  c_scope;
+     htri_t status;
+     c_scope = (H5F_scope_t)*scope;
+
+     /*
+      * Call H5Fflush function.
+      */
+
+     c_file_id = *object_id;
+
+     status = H5Fflush(c_file_id, c_scope);
+
+     if (status >= 0)  ret_value = 0;
+
+     return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5fmount_c
+ * Purpose:     Call H5Fmount to mount the file
+ * Inputs:      loc_id - Identifier for file or group
+ *              dsetname - name of dataset
+ *              namelen - dsetname length
+ *              file_id - file identifier for the file to be mounted
+ *              acc_prp - identifier of access property list
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Monday, October 25, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5fmount_c (hid_t_f *loc_id, _fcd dsetname, int_f *namelen, hid_t_f *file_id, hid_t_f *acc_prp)
+{
+     int ret_value = -1;
+     char *c_name;
+     int c_namelen;
+     hid_t c_loc_id;
+     hid_t c_file_id;
+     hid_t c_acc_prp;
+     htri_t status;
+
+     /*
+      * Define access property
+      */
+     c_acc_prp = *acc_prp;
+/*
+     if ( H5P_DEFAULT_F == c_acc_prp ) c_acc_prp = H5P_DEFAULT;
+*/
+
+     c_loc_id = *loc_id;
+     c_file_id = *file_id;
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(dsetname, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Fmount function.
+      */
+     status = H5Fmount(c_loc_id, c_name, c_file_id, c_acc_prp);
+
+     if (status >= 0)  ret_value = 0;
+
+     HDfree(c_name);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5funmount_c
+ * Purpose:     Call H5Funmount to unmount the file
+ * Inputs:      loc_id - Identifier for file or group
+ *              dsetname - name of dataset
+ *              namelen - dsetname length
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Monday, October 25, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5funmount_c (hid_t_f *loc_id, _fcd dsetname, int_f *namelen)
+{
+     int ret_value = -1;
+     char *c_name;
+     int c_namelen;
+     hid_t c_loc_id;
+     htri_t status;
+
+     c_loc_id = *loc_id;
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(dsetname, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Fmount function.
+      */
+     status = H5Funmount(c_loc_id, c_name);
+
+     if (status >= 0)  ret_value = 0;
+
+     HDfree(c_name);
+     return ret_value;
+}
+
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5fopen_c
+ * Purpose:     Call H5Fopen to open the file
+ * Inputs:      name - name of the file
+ *              namelen - name length
+ *              access_flags - file access  flags
+ *              acc_prp - identifier of access property list
+ * Outputs:     file_id - file identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Tuesday, August 3, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5fopen_c (_fcd name, int_f *namelen, int_f *access_flags, hid_t_f *acc_prp, hid_t_f *file_id)
+{
+     int ret_value = -1;
+     char *c_name;
+     int c_namelen;
+     hid_t c_file_id;
+     unsigned c_access_flags;
+     hid_t c_acc_prp;
+     c_acc_prp = (hid_t)*acc_prp;
+
+     /*
+      * Define access flags
+      */
+     c_access_flags = (unsigned) *access_flags;
+     /*
+      * Define access property
+      */
+     c_acc_prp = *acc_prp;
+/*
+     if ( H5P_DEFAULT_F == c_acc_prp ) c_acc_prp = H5P_DEFAULT;
+*/
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Fopen function.
+      */
+     c_file_id = H5Fopen(c_name, c_access_flags, c_acc_prp);
+
+     if (c_file_id < 0) return ret_value;
+     *file_id = (hid_t_f)c_file_id;
+
+     HDfree(c_name);
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5freopen_c
+ * Purpose:     Call H5Freopen to open the file
+ * Inputs:      file_id1 - file identifier
+ * Outputs:     file_id2 - file identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, November 3, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5freopen_c (hid_t_f *file_id1, hid_t_f *file_id2)
+{
+     int ret_value = -1;
+     hid_t c_file_id1, c_file_id2;
+
+     c_file_id1 = *file_id1;
+     c_file_id2 = H5Freopen(c_file_id1);
+
+     if (c_file_id2 < 0) return ret_value;
+     *file_id2 = (hid_t_f)c_file_id2;
+
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5fget_create_plist_c
+ * Purpose:     Call H5Fget_create_plist to get the file creation property list
+ * Inputs:      file_id - file identifier
+ * Outputs:     prop_id - creation property list identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal, Xiangyang Su
+ *              Wednesday, November 3, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5fget_create_plist_c (hid_t_f *file_id, hid_t_f *prop_id)
+{
+     int ret_value = -1;
+     hid_t c_file_id, c_prop_id;
+
+     c_file_id = (hid_t)*file_id;
+     c_prop_id = H5Fget_create_plist(c_file_id);
+
+     if (c_prop_id < 0) return ret_value;
+     *prop_id = (hid_t_f)c_prop_id;
+
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5fget_access_plist_c
+ * Purpose:     Call H5Fget_access_plist to get the file access property list
+ * Inputs:      file_id - file identifier
+ * Outputs:     access_id - access property list identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, September 30, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5fget_access_plist_c (hid_t_f *file_id, hid_t_f *access_id)
+{
+     int ret_value = -1;
+     hid_t c_file_id, c_access_id;
+
+     c_file_id = (hid_t)*file_id;
+     c_access_id = H5Fget_access_plist(c_file_id);
+
+     if (c_access_id < 0) return ret_value;
+     *access_id = (hid_t_f)c_access_id;
+
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5fis_hdf5_c
+ * Purpose:     Call H5Fis_hdf5 to determone if the file is an HDF5 file
+ * Inputs:      name - name of the file
+ *              namelen - name length
+ * Outputs:     flag - 0 if file is not HDF5 file , positive if a file
+ *                     is an HDF5 file, and negative on failure.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Tuesday, August 3, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5fis_hdf5_c (_fcd name, int_f *namelen, int_f *flag)
+{
+     int ret_value = -1;
+     char *c_name;
+     int c_namelen;
+     htri_t status;
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Fopen function.
+      */
+     status = H5Fis_hdf5(c_name);
+     *flag = (int_f)status;
+     if (status >= 0) ret_value = 0;
+
+     HDfree(c_name);
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5fclose_c
+ * Purpose:     Call H5Fclose to close the file
+ * Inputs:      file_id - identifier of the file to be closed
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, July 26, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5fclose_c ( hid_t_f *file_id )
+{
+  int ret_value = 0;
+  hid_t c_file_id;
+
+  c_file_id = *file_id;
+  if ( H5Fclose(c_file_id) < 0  ) ret_value = -1;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5fget_obj_count_c
+ * Purpose:     Call H5Fget_obj_count to get number of open objects within a file
+ * Inputs:      file_id - identifier of the file to be closed
+ *              obj_type - type of the object
+ * Returns:     obj_count - number of objects
+ *              0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, September 30, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5fget_obj_count_c ( hid_t_f *file_id , int_f *obj_type, int_f * obj_count)
+{
+  int ret_value = 0;
+  hid_t c_file_id;
+  unsigned c_obj_type;
+  int c_obj_count;
+
+
+  c_file_id = (hid_t)*file_id;
+  c_obj_type = (unsigned) *obj_type;
+  if ( (c_obj_count=H5Fget_obj_count(c_file_id, c_obj_type)) < 0  ) ret_value = -1;
+  *obj_count = (int_f)c_obj_count;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5fget_obj_ids_c
+ * Purpose:     Call H5Fget_obj_count to get number of open objects within a file
+ * Inputs:      file_id - identifier of the file to be closed
+ *              obj_type - type of the object
+ * Returns:     obj_ids  - iarray of open objects identifiers
+ *              0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, September 30, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5fget_obj_ids_c ( hid_t_f *file_id , int_f *obj_type, int_f *max_objs, hid_t_f *obj_ids)
+{
+  int ret_value = 0;
+  hid_t c_file_id;
+  unsigned c_obj_type;
+  int c_max_objs;
+
+  c_file_id = (hid_t)*file_id;
+  c_obj_type = (unsigned) *obj_type;
+  c_max_objs = (int)*max_objs;
+  if ( H5Fget_obj_ids(c_file_id, c_obj_type, c_max_objs, (hid_t *)obj_ids) < 0  ) ret_value = -1;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5fget_freespace_c
+ * Purpose:     Call H5Fget_freespace to get amount of free space within a file
+ * Inputs:      file_id - identifier of the file to query
+ * Returns:     free_space  - amount of free space in file
+ *              0 on success, -1 on failure
+ * Programmer:  Quincey Koziol
+ *              Tuesday, October 7, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5fget_freespace_c ( hid_t_f *file_id , hssize_t_f *free_space)
+{
+  int ret_value = 0;
+  hid_t c_file_id;
+  hssize_t c_free_space;
+
+  c_file_id = (hid_t)*file_id;
+  if ( (c_free_space=H5Fget_freespace(c_file_id)) < 0  ) ret_value = -1;
+  *free_space=(hssize_t_f)c_free_space;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5fget_name_c
+ * Purpose:     Call H5Fget_name to get file's name
+ * Inputs:      obj_id - object identifier
+ *              buflen -size of the buffer
+ * Outputs:     buf - buffer to hold the name
+ *              size - size of the file's name
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Tuesday, July 6, 2004
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5fget_name_c(hid_t_f *obj_id, size_t_f *size, _fcd buf, size_t_f *buflen)
+{
+    char *c_buf=NULL;           /* Buffer to hold C string */
+    ssize_t size_c;
+    int_f ret_value=0;          /* Return value */
+
+     /*
+      * Allocate buffer to hold name of an attribute
+      */
+     if ((c_buf = HDmalloc((size_t)*buflen +1)) == NULL)
+         HGOTO_DONE(FAIL);
+
+     /*
+      * Call H5Aget_name function
+      */
+     if ((size_c = (size_t_f)H5Fget_name((hid_t)*obj_id, c_buf, (size_t)*buflen)) < 0)
+         HGOTO_DONE(FAIL);
+
+     /*
+      * Convert C name to FORTRAN and place it in the given buffer
+      */
+      HD5packFstring(c_buf, _fcdtocp(buf), (size_t)*buflen);
+
+done:
+      *size = (size_t_f)size_c;
+      if(c_buf) HDfree(c_buf);
+      return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5fget_filesize_c
+ * Purpose:     Call H5Fget_filesize to get file size
+ * Inputs:      file_id - file identifier
+ * Outputs:     size - size of the file
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, July 7, 2004
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5fget_filesize_c(hid_t_f *file_id, hsize_t_f *size)
+{
+    hsize_t size_c;
+    herr_t ret_value=0;          /* Return value */
+
+     /*
+      * Call H5Fget_filesize function
+      */
+     if ((ret_value = H5Fget_filesize((hid_t)*file_id, &size_c)) < 0)
+         HGOTO_DONE(FAIL);
+      *size = (hsize_t_f)size_c;
+
+done:
+      return ret_value;
+}

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Fff.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Fff.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Fff.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,960 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 file contains Fortran90 interfaces for H5F functions.
+! 
+      MODULE H5F
+      USE H5GLOBAL
+ 
+        CONTAINS
+          
+!----------------------------------------------------------------------
+! Name:		h5fcreate_f 
+!
+! Purpose:	Creates HDF5 files. 
+!
+! Inputs:  
+!		name		- name of the file to create
+!		access_flags	- File access flags. Allowable values are: 
+!				  H5F_ACC_TRUNC_F 
+!				  H5F_ACC_EXCL_F 
+! Outputs:  
+!		file_id		- file identifier
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!		creation_prp	- file creation property list identifier
+!		access_prp	- file access property list identifier
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  February 28, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5fcreate_f(name, access_flags, file_id, hdferr, &
+                                 creation_prp, access_prp)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5fcreate_f
+!DEC$endif
+!
+           
+            IMPLICIT NONE
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the file
+            INTEGER, INTENT(IN) :: access_flags    ! File access flags
+            INTEGER(HID_T), INTENT(OUT) :: file_id ! File identifier 
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: creation_prp 
+                                                   ! File creation propertly
+                                                   ! list identifier
+            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
+                                                   ! File access property list
+                                                   ! identifier
+            INTEGER :: creation_prp_default 
+            INTEGER :: access_prp_default
+            INTEGER :: namelen ! Length of the name character string
+
+!            INTEGER, EXTERNAL :: h5fcreate_c
+!  Interface is needed for MS FORTRAN
+!
+            INTERFACE
+              INTEGER FUNCTION h5fcreate_c(name, namelen, access_flags, &
+                               creation_prp_default, access_prp_default, file_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5FCREATE_C':: h5fcreate_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name 
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN) :: access_flags
+              INTEGER(HID_T), INTENT(OUT) :: file_id
+              INTEGER, INTENT(IN) :: creation_prp_default
+              INTEGER, INTENT(IN) :: access_prp_default
+              INTEGER :: namelen
+              END FUNCTION h5fcreate_c
+            END INTERFACE
+  
+            creation_prp_default = H5P_DEFAULT_F
+            access_prp_default = H5P_DEFAULT_F
+
+            if (present(creation_prp)) creation_prp_default = creation_prp 
+            if (present(access_prp))   access_prp_default   = access_prp 
+            namelen = LEN(name)
+            hdferr = h5fcreate_c(name, namelen, access_flags, &
+                     creation_prp_default, access_prp_default, file_id) 
+
+          END SUBROUTINE h5fcreate_f
+          
+!----------------------------------------------------------------------
+! Name:		h5fflush_f 
+!
+! Purpose:	Flushes all buffers associated with a file to disk	
+!
+! Inputs:  
+!		object_id	- identifier of object used to identify 
+!				  the file. 
+!		scope		- specifies the scope of the flushing action. 
+!				  Possible values are:
+!				  H5F_SCOPE_GLOBAL_F
+!				  H5F_SCOPE_LOCAL_F
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!		creation_prp	- file creation property list identifier
+!		access_prp	- file access property list identifier
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  February 28, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5fflush_f(object_id, scope, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5fflush_f
+!DEC$endif
+!
+           
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: object_id !identifier for any object
+                                                    !associate with a file, 
+                                                    !including the file itself,
+                                                    !a dataset, a group, an
+                                                    !attribute, or a named
+                                                    !data type
+
+            INTEGER, INTENT(IN) :: scope            !scope of the flushing
+                                                    !action, possible values 
+                                                    !are: H5F_SCOPE_GLOBAL_F
+                                                    ! which flushes the entire
+                                                    !virtual file, 
+                                                    !and H5F_SCOPE_LOCAL_F
+                                                    !which flushes only the 
+                                                    !specified file.
+
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code 
+
+!            INTEGER, EXTERNAL :: h5fflush_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5fflush_c(object_id, scope)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5FFLUSH_C':: h5fflush_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: object_id
+              INTEGER, INTENT(IN) :: scope
+              END FUNCTION h5fflush_c
+            END INTERFACE
+
+           hdferr = h5fflush_c(object_id, scope) 
+
+          END SUBROUTINE h5fflush_f
+
+!----------------------------------------------------------------------
+! Name:		h5fmount_f 
+!
+! Purpose:	Mounts a file. 	
+!
+! Inputs:  
+!		loc_id		- the identifier for of file or group in 
+!				  which name is defined
+!		name		- the name of the group onto which the file 
+!				  specified by child_id is to be mounted. 
+!		child_id	- the identifier of the file to be mounted. 
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!		access_prp	- the identifier of the property list to be used
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  February 28, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+ 
+          SUBROUTINE h5fmount_f(loc_id, name, child_id, hdferr, access_prp)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5fmount_f
+!DEC$endif
+!
+           
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for file or group 
+                                                   ! in which dsetname is defined 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of the group
+            INTEGER(HID_T), INTENT(IN) :: child_id ! File identifier for the
+                                                   ! file to be mounted 
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
+                                                   ! File access property list
+                                                   ! identifier
+            INTEGER :: access_prp_default 
+            INTEGER :: namelen ! Length of the name character string
+  
+!            INTEGER, EXTERNAL :: h5fmount_c
+!  Interface is needed for MS FORTRAN
+!
+            INTERFACE
+              INTEGER FUNCTION h5fmount_c(loc_id, name, namelen, &
+                                          child_id, access_prp_default)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5FMOUNT_C':: h5fmount_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name 
+              INTEGER(HID_T), INTENT(IN) :: loc_id 
+              CHARACTER(LEN=*), INTENT(IN) :: name 
+              INTEGER(HID_T), INTENT(IN) :: child_id 
+              INTEGER(HID_T), INTENT(IN) :: access_prp_default
+              INTEGER :: namelen 
+              END FUNCTION h5fmount_c
+            END INTERFACE
+
+            access_prp_default = H5P_DEFAULT_F
+            if (present(access_prp))   access_prp_default   = access_prp 
+            namelen = LEN(name)
+            hdferr = h5fmount_c(loc_id, name, namelen, child_id, access_prp_default) 
+                      
+          END SUBROUTINE h5fmount_f
+
+
+!----------------------------------------------------------------------
+! Name:		h5funmount_f 
+!
+! Purpose:	Unmounts a file. 	
+!
+! Inputs:  
+!		loc_id		- the identifier for of file or group in 
+!				  which name is defined
+!		name		- the name of the mount point
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  February 28, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5funmount_f(loc_id, name, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5funmount_f
+!DEC$endif
+!
+           
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for file or group 
+                                                   ! at which the specified file 
+                                                   ! is to be unmounted
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the mount point
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+            INTEGER :: namelen ! Length of the name character string
+  
+!            INTEGER, EXTERNAL :: h5fumount_c
+!  Interface is needed for MS FORTRAN
+!
+            INTERFACE
+              INTEGER FUNCTION h5funmount_c(loc_id, name, namelen)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5FUNMOUNT_C':: h5funmount_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name 
+              INTEGER(HID_T), INTENT(IN) :: loc_id 
+              CHARACTER(LEN=*), INTENT(IN) :: name 
+              INTEGER :: namelen 
+              END FUNCTION h5funmount_c
+            END INTERFACE
+  
+            namelen = LEN(name)
+            hdferr = h5funmount_c(loc_id, name, namelen) 
+    
+          END SUBROUTINE h5funmount_f
+          
+!----------------------------------------------------------------------
+! Name:		h5fopen_f 
+!
+! Purpose:	Opens HDF5 file. 
+!
+! Inputs:  
+!		name		- name of the file to acecss
+!		access_flags	- File access flags. Allowable values are: 
+!				  H5F_ACC_RDWR_F 
+!				  H5F_ACC_RDONLY_F 
+! Outputs:  
+!		file_id		- file identifier
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!		access_prp	- file access property list identifier
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  February 28, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5fopen_f(name, access_flags, file_id, hdferr, &
+                               access_prp)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5fopen_f
+!DEC$endif
+!
+           
+            IMPLICIT NONE
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the file
+            INTEGER, INTENT(IN) :: access_flags    ! File access flags
+            INTEGER(HID_T), INTENT(OUT) :: file_id ! File identifier 
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
+                                                   ! File access property list
+                                                   ! identifier
+            INTEGER :: access_prp_default 
+            INTEGER :: namelen ! Length of the name character string
+
+!            INTEGER, EXTERNAL :: h5fopen_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5fopen_c(name, namelen, access_flags, &
+                               access_prp_default, file_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5FOPEN_C':: h5fopen_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER :: namelen
+              INTEGER, INTENT(IN) :: access_flags
+              INTEGER, INTENT(IN) :: access_prp_default
+              INTEGER(HID_T), INTENT(OUT) :: file_id
+              END FUNCTION h5fopen_c
+            END INTERFACE
+  
+            access_prp_default = H5P_DEFAULT_F
+            if (present(access_prp))   access_prp_default   = access_prp 
+            namelen = LEN(name)
+            hdferr = h5fopen_c(name, namelen, access_flags, &
+                               access_prp_default, file_id) 
+
+          END SUBROUTINE h5fopen_f
+          
+!----------------------------------------------------------------------
+! Name:		h5freopen_f 
+!
+! Purpose:	Reopens HDF5 file. 
+!
+! Inputs:  
+!		file_id		- identifier of a file for which an 
+!				  additional identifier is required
+! Outputs:  
+!		ret_file_id	- new file identifier
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  February 28, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5freopen_f(file_id, ret_file_id, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5freopen_f
+!DEC$endif
+!
+           
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: file_id      ! File identifier 
+            INTEGER(HID_T), INTENT(OUT) :: ret_file_id ! New File identifier 
+            INTEGER, INTENT(OUT) :: hdferr             ! Error code 
+
+!            INTEGER, EXTERNAL :: h5freopen_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5freopen_c(file_id, ret_file_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5FREOPEN_C':: h5freopen_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: file_id
+              INTEGER(HID_T), INTENT(OUT) :: ret_file_id
+              END FUNCTION h5freopen_c
+            END INTERFACE
+
+            hdferr = h5freopen_c(file_id, ret_file_id) 
+          
+          END SUBROUTINE h5freopen_f
+          
+!----------------------------------------------------------------------
+! Name:		h5fget_create_plist_f
+!
+! Purpose:	Returns a file creation property list identifier.	
+!
+! Inputs:  
+!		file_id		- identifier of a file to get 
+!				  get creation property list of 
+! Outputs:  
+!		prop_id 	- creation property list identifier
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  February 28, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          
+          SUBROUTINE h5fget_create_plist_f(file_id, prop_id, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5fget_create_plist_f
+!DEC$endif
+!
+           
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: file_id    ! File identifier 
+            INTEGER(HID_T), INTENT(OUT) :: prop_id   ! File creation property
+                                                     ! list identifier 
+            INTEGER, INTENT(OUT) :: hdferr           ! Error code 
+
+!            INTEGER, EXTERNAL :: h5fget_create_plist_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5fget_create_plist_c(file_id, prop_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+!MS$ATTRIBUTES C,reference,alias:'_H5FGET_CREATE_PLIST_C':: h5fget_create_plist_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: file_id
+              INTEGER(HID_T), INTENT(OUT) :: prop_id
+              END FUNCTION h5fget_create_plist_c
+            END INTERFACE
+  
+            hdferr = h5fget_create_plist_c(file_id, prop_id) 
+
+          END SUBROUTINE h5fget_create_plist_f
+          
+!----------------------------------------------------------------------
+! Name:		h5fget_access_plist_f
+!
+! Purpose:	Returns a file access property list identifier.	
+!
+! Inputs:  
+!		file_id		- identifier of a file to get 
+!				  get creation property list of 
+! Outputs:  
+!		access_id 	- access property list identifier
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  February 28, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5fget_access_plist_f(file_id, access_id, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5fget_access_plist_f
+!DEC$endif
+!
+           
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: file_id      ! File identifier 
+            INTEGER(HID_T), INTENT(OUT) :: access_id   ! File access property
+                                                       ! list identifier 
+            INTEGER, INTENT(OUT) :: hdferr             ! Error code 
+
+!            INTEGER, EXTERNAL :: h5fget_access_plist_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5fget_access_plist_c(file_id, access_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+!MS$ATTRIBUTES C,reference,alias:'_H5FGET_CREATE_PLIST_C':: h5fget_access_plist_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: file_id
+              INTEGER(HID_T), INTENT(OUT) :: access_id
+              END FUNCTION h5fget_access_plist_c
+            END INTERFACE
+  
+  
+            hdferr = h5fget_access_plist_c(file_id, access_id) 
+
+          END SUBROUTINE h5fget_access_plist_f
+          
+!----------------------------------------------------------------------
+! Name:		h5fis_hdf5_f
+!
+! Purpose:	Determines whether a file is in the HDF5 format. 
+!
+! Inputs:  
+!		name		- name of the file to check
+! Outputs:  
+!		status		- indicates if file is and HDF5 file
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  February 28, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+ 
+          SUBROUTINE h5fis_hdf5_f(name, status, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5fis_hdf5_f
+!DEC$endif
+!
+           
+            IMPLICIT NONE
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the file
+            LOGICAL, INTENT(OUT) :: status         ! Indicates if file
+                                                   ! is an HDF5 file
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+            INTEGER :: namelen ! Length of the name character string
+            INTEGER :: flag    ! "TRUE/FALSE" flag from C routine
+                               ! to define status value. 
+
+!            INTEGER, EXTERNAL :: h5fis_hdf5_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5fis_hdf5_c(name, namelen, flag)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5FIS_HDF5_C':: h5fis_hdf5_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER :: namelen
+              INTEGER :: flag
+              END FUNCTION h5fis_hdf5_c
+            END INTERFACE
+  
+            namelen = LEN(name)
+            hdferr = h5fis_hdf5_c(name, namelen, flag) 
+            status = .TRUE.
+            if (flag .EQ. 0) status = .FALSE.
+
+          END SUBROUTINE h5fis_hdf5_f
+          
+!----------------------------------------------------------------------
+! Name:		h5fclose_f
+!
+! Purpose:	Closes HDF5 file.
+!
+! Inputs:  
+!		file_id		- file identifier
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  February 28, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          
+          SUBROUTINE h5fclose_f(file_id, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5fclose_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5fclose_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5fclose_c(file_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5FCLOSE_C':: h5fclose_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: file_id
+              END FUNCTION h5fclose_c
+            END INTERFACE
+
+            hdferr = h5fclose_c(file_id)
+
+          END SUBROUTINE h5fclose_f
+
+!----------------------------------------------------------------------
+! Name:		h5fget_obj_count_f
+!
+! Purpose:	Gets number of the objects open within a file
+!
+! Inputs:  
+!		file_id		- file identifier
+!               obj_type        - type of the object; possible values are:
+!                                 H5F_OBJ_FILE_F 
+!                                 H5F_OBJ_DATASET_F 
+!                                 H5F_OBJ_GROUP_F 
+!                                 H5F_OBJ_DATATYPE_F 
+!                                 H5F_OBJ_ALL_F 
+! Outputs:  
+!               obj_count       - number of open objects
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		September 30, 2002
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+          
+          SUBROUTINE h5fget_obj_count_f(file_id, obj_type, obj_count, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5fget_obj_count_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
+            INTEGER, INTENT(IN)  :: obj_type      ! Object type
+            INTEGER, INTENT(OUT) :: obj_count     ! Number of open objects
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5fget_obj_count_c(file_id, obj_type, obj_count)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+       !MS$ATTRIBUTES C,reference,alias:'_H5FGET_OBJ_COUNT_C':: h5fget_obj_count_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: file_id
+              INTEGER, INTENT(IN)  :: obj_type      ! Object type
+              INTEGER, INTENT(OUT) :: obj_count    ! Number of open objects
+              END FUNCTION h5fget_obj_count_c
+            END INTERFACE
+
+            hdferr = h5fget_obj_count_c(file_id, obj_type, obj_count)
+
+          END SUBROUTINE h5fget_obj_count_f
+
+!----------------------------------------------------------------------
+! Name:		h5fget_obj_ids_f
+!
+! Purpose:	Get list of open objects identifiers within a file
+!
+! Inputs:  
+!		file_id		- file identifier
+!               obj_type        - type of the object; possible values are:
+!                                 H5F_OBJ_FILE_F 
+!                                 H5F_OBJ_DATASET_F 
+!                                 H5F_OBJ_GROUP_F 
+!                                 H5F_OBJ_DATATYPE_F 
+!                                 H5F_OBJ_ALL_F 
+! Outputs:  
+!               obj_ids         - array of open object identifiers
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		September 30, 2002
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+          
+          SUBROUTINE h5fget_obj_ids_f(file_id, obj_type, max_objs, obj_ids, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5fget_obj_ids_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
+            INTEGER, INTENT(IN)  :: obj_type   ! Object type
+            INTEGER, INTENT(IN)  :: max_objs   ! Maximum # of objects to retrieve
+            INTEGER(HID_T), DIMENSION(*), INTENT(INOUT) :: obj_ids
+                                               ! Array of open objects iidentifiers
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5fget_obj_ids_c(file_id, obj_type, max_objs, obj_ids)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+       !MS$ATTRIBUTES C,reference,alias:'_H5FGET_OBJ_IDS_C':: h5fget_obj_ids_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: file_id
+              INTEGER, INTENT(IN)  :: obj_type      
+              INTEGER, INTENT(IN)  :: max_objs
+              INTEGER(HID_T), DIMENSION(*), INTENT(INOUT) :: obj_ids  
+              END FUNCTION h5fget_obj_ids_c
+            END INTERFACE
+
+            hdferr = h5fget_obj_ids_c(file_id, obj_type, max_objs, obj_ids)
+
+          END SUBROUTINE h5fget_obj_ids_f
+
+!----------------------------------------------------------------------
+! Name:		h5fget_freespace_f
+!
+! Purpose:	Get amount of free space within a file
+!
+! Inputs:  
+!		file_id		- file identifier
+! Outputs:  
+!               free_space      - amount of free space in file
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Quincey Koziol
+!		October 7, 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+          
+          SUBROUTINE h5fget_freespace_f(file_id, free_space, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5fget_freespace_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
+            INTEGER(HSSIZE_T), INTENT(OUT) :: free_space 
+                                             !amount of free space in file
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5fget_freespace_c(file_id, free_space)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+       !MS$ATTRIBUTES C,reference,alias:'_H5FGET_FREESPACE_C':: h5fget_freespace_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: file_id
+              INTEGER(HSSIZE_T), INTENT(OUT) :: free_space 
+              END FUNCTION h5fget_freespace_c
+            END INTERFACE
+
+            hdferr = h5fget_freespace_c(file_id, free_space)
+
+          END SUBROUTINE h5fget_freespace_f
+
+!----------------------------------------------------------------------
+! Name:		h5fget_name_f 
+!
+! Purpose: 	Gets the name of the file from the object identifier
+!
+! Inputs:  
+!		obj_id		- object identifier
+! Inputs/Outputs:
+!		buf		- buffer to read name in
+! Outputs:  
+!		size		- actual size of the name
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!
+! Programmer:	Elena Pourmal
+!		July 6, 2004
+!
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5fget_name_f(obj_id, buf, size, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5fget_name_f
+!DEC$endif
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: obj_id   ! Object identifier 
+            CHARACTER(LEN=*), INTENT(INOUT) :: buf   
+                                                   ! Buffer to hold file name
+            INTEGER(SIZE_T), INTENT(OUT) :: size   ! Size of the file name
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code: 0 on success,
+                                                   ! -1 if fail
+            INTEGER(SIZE_T) :: buflen
+!            INTEGER, EXTERNAL :: h5fget_name_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5fget_name_c(obj_id, size, buf, buflen)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5FGET_NAME_C'::h5fget_name_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: buf
+              INTEGER(HID_T), INTENT(IN) :: obj_id
+              INTEGER(SIZE_T), INTENT(OUT) :: size
+              INTEGER(SIZE_T) :: buflen
+              CHARACTER(LEN=*), INTENT(OUT) :: buf
+              END FUNCTION h5fget_name_c
+            END INTERFACE
+            buflen = LEN(buf)
+            hdferr = h5fget_name_c(obj_id, size, buf, buflen)
+          END SUBROUTINE h5fget_name_f
+
+!----------------------------------------------------------------------
+! Name:		h5fget_filesize_f 
+!
+! Purpose: 	Retrieves the file size of the HDF5 file.
+!
+! Inputs:  
+!		file_id		- file identifier
+! Outputs:  
+!		size		- file size 
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!
+! Programmer:	Elena Pourmal
+!		July 7, 2004
+!
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5fget_filesize_f(file_id, size, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5fget_filesize_f
+!DEC$endif
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: file_id  ! file identifier
+            INTEGER(HSIZE_T), INTENT(OUT) :: size  ! Size of the file 
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code: 0 on success,
+                                                   ! -1 if fail
+!            INTEGER, EXTERNAL :: h5fget_filesize_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5fget_filesize_c(file_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5FGET_FILESIZE_C'::h5fget_filesize_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: file_id
+              INTEGER(HSIZE_T), INTENT(OUT) :: size
+              END FUNCTION h5fget_filesize_c
+            END INTERFACE
+            hdferr = h5fget_filesize_c(file_id, size)
+          END SUBROUTINE h5fget_filesize_f
+
+
+      END MODULE H5F

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Gf.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Gf.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Gf.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,667 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 files contains C stubs for H5G Fortran APIs */
+
+#include "H5f90.h"
+
+/*----------------------------------------------------------------------------
+ * Name:        h5gcreate_c
+ * Purpose:     Call H5Gcreate to create a group
+ * Inputs:      loc_id - file or group identifier
+ *              name - name of the group
+ *              namelen - name length
+ *              size_hint - length of names in the group
+ * Outputs:     grp_id - group identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 5, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5gcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size_hint,  hid_t_f *grp_id)
+{
+     int ret_value = -1;
+     char *c_name;
+     int c_namelen;
+     size_t c_size_hint;
+     hid_t c_grp_id;
+     hid_t c_loc_id;
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+     /*
+      * Call H5Gcreate function.
+      */
+     c_loc_id = *loc_id;
+     if ( *size_hint == OBJECT_NAMELEN_DEFAULT_F )
+     c_grp_id = H5Gcreate(c_loc_id, c_name, 0);
+     else {
+          c_size_hint = (size_t)*size_hint;
+          c_grp_id = H5Gcreate(c_loc_id, c_name, c_size_hint);
+     }
+     if (c_grp_id < 0) goto DONE;
+     *grp_id = (hid_t_f)c_grp_id;
+     ret_value = 0;
+
+DONE:
+     HDfree(c_name);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5gopen_c
+ * Purpose:     Call H5Gopen to open a dataset
+ * Inputs:      loc_id - file or group identifier
+ *              name - name of the group
+ *              namelen - name length
+ * Outputs:     grp_id - group identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 5, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5gopen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *grp_id)
+{
+     int ret_value = -1;
+     char *c_name;
+     int c_namelen;
+     hid_t c_grp_id;
+     hid_t c_loc_id;
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Gopen function.
+      */
+     c_loc_id = *loc_id;
+     c_grp_id = H5Gopen(c_loc_id, c_name);
+
+     if (c_grp_id < 0) goto DONE;
+     ret_value = 0;
+     *grp_id = (hid_t_f)c_grp_id;
+
+DONE:
+     HDfree(c_name);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5gget_obj_info_idx_c
+ * Purpose:     Call H5Gget_obj_info to return name and the type of group
+ *              member
+ * Inputs:      loc_id - file or group identifier
+ *              name - name of the group
+ *              namelen - name length
+ *              idx - index of the group member
+ * Outputs:     obj_name - buffer to store member's name
+ *              obj_namelen - length of the buffer
+ *              obj_type - type of the object
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 5, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5gget_obj_info_idx_c
+(hid_t_f *loc_id, _fcd name, int_f *namelen, int_f *idx, _fcd obj_name, int_f *obj_namelen, int_f *obj_type)
+{
+     int ret_value = -1;
+     hid_t c_loc_id = (hid_t)*loc_id;
+     char *c_name;
+     int c_namelen;
+     size_t c_obj_namelen;
+     char *c_obj_name = NULL;
+     int type;
+     hsize_t c_idx = *idx;
+     hid_t gid = (-1);                 /* Temporary group ID */
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_obj_namelen = *obj_namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Allocate buffer to hold name of the object
+      */
+     if (c_obj_namelen) c_obj_name = (char *)HDmalloc(c_obj_namelen + 1);
+     if (c_obj_name == NULL) { HDfree(c_name);
+                               return ret_value;
+                             }
+
+     /* Get a temporary group ID for the group to query */
+     if((gid=H5Gopen(c_loc_id,c_name))<0) goto DONE;
+
+     /* Query the object's information */
+     if(H5Gget_objname_by_idx(gid, c_idx, c_obj_name, c_obj_namelen)<0) goto DONE;
+     if((type=H5Gget_objtype_by_idx(gid, c_idx))==H5G_UNKNOWN) goto DONE;
+
+     *obj_type = type;
+
+     /*
+      * Convert C name to FORTRAN and place it in the given buffer
+      */
+     HD5packFstring(c_obj_name, _fcdtocp(obj_name), (int)c_obj_namelen);
+     ret_value = 0;
+
+DONE:
+     /* Close the temporary group, if it was opened */
+     if(gid>0) H5Gclose(gid);
+
+     HDfree(c_obj_name);
+     HDfree(c_name);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5gn_members_c
+ * Purpose:     Call H5Gn_members to find number of objects in the group
+ * Inputs:      loc_id - file or group identifier
+ *              name - name of the group
+ *              namelen - name length
+ * Outputs:     nmemebers - number of members
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 5, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5gn_members_c (hid_t_f *loc_id, _fcd name, int_f *namelen, int_f *nmembers)
+{
+     int ret_value = -1;
+     hid_t c_loc_id=(hid_t)*loc_id;
+     char *c_name;
+     int c_namelen;
+     hsize_t c_nmembers;
+     hid_t gid = (-1);
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /* Get a temporary group ID for the group to query */
+     if((gid=H5Gopen(c_loc_id,c_name))<0) goto DONE;
+
+     /* Call H5Gget_num_objs() for the number of objects in the group */
+     if(H5Gget_num_objs(gid,&c_nmembers)<0) goto DONE;
+
+     *nmembers = (int_f)c_nmembers;
+     ret_value = 0;
+
+DONE:
+    /* Close the temporary group, if it was opened */
+    if(gid>0) H5Gclose(gid);
+
+     HDfree(c_name);
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5gclose_c
+ * Purpose:     Call H5Gclose to close the group
+ * Inputs:      grp_id - identifier of the group to be closed
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 5, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5gclose_c ( hid_t_f *grp_id )
+{
+  int ret_value = 0;
+  hid_t c_grp_id;
+
+  c_grp_id = (hid_t)*grp_id;
+  if ( H5Gclose(c_grp_id) < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5glink_c
+ * Purpose:     Call H5Glink to link the specified type
+ * Inputs:      loc_id - identifier of file or group
+ *              link_type - link type
+ *              current_name - name of the existing object for hard link,
+ *                             anything for the soft link
+ *              current_namelen - current name lenghth
+ *              new_name - new name for the object
+ *              new_namelen - new_name lenghth
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Mingshi Chen
+ *              Friday, August 6, 1999
+ * Modifications: Elena Pourmal
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5glink_c(hid_t_f *loc_id, int_f *link_type, _fcd current_name, int_f *current_namelen, _fcd new_name, int_f *new_namelen)
+{
+  int ret_value = -1;
+  hid_t c_loc_id;
+  H5G_link_t c_link_type;
+  char *c_current_name, *c_new_name;
+  int c_current_namelen, c_new_namelen;
+  herr_t c_ret_value;
+  /*
+   *  Convert Fortran name to C name
+   */
+  c_current_namelen =*current_namelen;
+  c_new_namelen =*new_namelen;
+  c_current_name = (char *)HD5f2cstring(current_name, c_current_namelen);
+  if (c_current_name == NULL) return ret_value;
+
+  c_new_name = (char *)HD5f2cstring(new_name, c_new_namelen);
+  if(c_new_name == NULL) { HDfree(c_current_name);
+                           return ret_value;
+                         }
+  /*
+   *  Call H5Glink function
+   */
+  c_loc_id = *loc_id;
+  c_link_type = (H5G_link_t)*link_type;
+  c_ret_value = H5Glink(c_loc_id, c_link_type, c_current_name, c_new_name);
+
+  if(c_ret_value < 0) goto DONE;
+  ret_value = 0;
+
+DONE:
+  HDfree(c_current_name);
+  HDfree(c_new_name);
+  return ret_value ;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5glink2_c
+ * Purpose:     Call H5Glink2 to link the specified type
+ * Inputs:      cur_loc_id - identifier of file or group
+ *              cur_name - name of the existing object for hard link releative
+ *                         to cur_loc_id location,
+ *                         anything for the soft link
+ *              current_namelen - current name lenghth
+ *              link_type - link type
+ *              new_loc_id - location identifier
+ *              new_name - new name for the object releative to the new_loc_id
+ *                         location
+ *              new_namelen - new_name lenghth
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, September 25, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5glink2_c(hid_t_f *cur_loc_id, _fcd cur_name, int_f *cur_namelen,  int_f *link_type, hid_t_f *new_loc_id, _fcd new_name, int_f *new_namelen)
+{
+  int ret_value = -1;
+  hid_t c_cur_loc_id;
+  hid_t c_new_loc_id;
+  H5G_link_t c_link_type;
+  char *c_cur_name, *c_new_name;
+  int c_cur_namelen, c_new_namelen;
+  herr_t c_ret_value;
+  /*
+   *  Convert Fortran name to C name
+   */
+  c_cur_namelen =*cur_namelen;
+  c_new_namelen =*new_namelen;
+  c_cur_name = (char *)HD5f2cstring(cur_name, c_cur_namelen);
+  c_new_name = (char *)HD5f2cstring(new_name, c_new_namelen);
+  if (c_cur_name == NULL) return ret_value;
+  if (c_new_name == NULL) { HDfree(c_cur_name);
+                            return ret_value;
+                          }
+
+  /*
+   *  Call H5Glink2 function
+   */
+  c_cur_loc_id = *cur_loc_id;
+  c_new_loc_id = *new_loc_id;
+  c_link_type = (H5G_link_t)*link_type;
+  c_ret_value = H5Glink2(c_cur_loc_id, c_cur_name, c_link_type, c_new_loc_id, c_new_name);
+
+  if(c_ret_value < 0) goto DONE;
+  ret_value = 0;
+
+DONE:
+  HDfree(c_cur_name);
+  HDfree(c_new_name);
+  return ret_value ;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5gunlink_c
+ * Purpose:     Call H5Gunlink to remove  the specified name
+ * Inputs:      loc_id - identifier of file or group
+ *              name - name of the object to unlink
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Mingshi Chen
+ *              Friday, August 6, 1999
+ * Modifications: Elena Pourmal
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5gunlink_c(hid_t_f *loc_id, _fcd name, int_f *namelen)
+{
+  int ret_value = -1;
+  hid_t c_loc_id;
+  char *c_name;
+  int c_namelen;
+  herr_t c_ret_value;
+  /*
+   *  Convert Fortran name to C name
+   */
+  c_namelen = *namelen;
+  c_name = (char *)HD5f2cstring(name, c_namelen);
+  if(c_name == NULL) return ret_value;
+  /*
+   *  Call H5Gunlink function
+   */
+  c_loc_id = (hid_t)*loc_id;
+  c_ret_value = H5Gunlink(c_loc_id, c_name);
+  if(c_ret_value < 0) goto DONE;
+  ret_value = 0;
+
+DONE:
+  HDfree(c_name);
+  return ret_value ;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5gmove_c
+ * Purpose:     Call H5Gmove to rename an object within an HDF5 file
+ * Inputs:      loc_id - identifier of file or group
+ *              src_name - name of the original object
+ *              src_namelen - original name lenghth
+ *              dst_name - new name for the object
+ *              dst_namelen - new name lenghth
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Mingshi Chen
+ *              Friday, August 6, 1999
+ * Modifications: Elena Pourmal
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5gmove_c(hid_t_f *loc_id, _fcd src_name, int_f *src_namelen, _fcd dst_name, int_f*dst_namelen)
+{
+  int ret_value = -1;
+  hid_t c_loc_id;
+  char *c_src_name, *c_dst_name;
+  int c_src_namelen, c_dst_namelen;
+  herr_t c_ret_value;
+  /*
+   *  Convert Fortran name to C name
+   */
+  c_src_namelen = *src_namelen;
+  c_dst_namelen = *dst_namelen;
+  c_src_name = (char *)HD5f2cstring(src_name, c_src_namelen);
+  if(c_src_name == NULL) return ret_value;
+
+  c_dst_name = (char *)HD5f2cstring(dst_name, c_dst_namelen);
+  if(c_dst_name == NULL) { HDfree(c_src_name);
+                           return ret_value;
+                         }
+  /*
+   *  Call H5Gmove function
+   */
+  c_loc_id = (hid_t)*loc_id;
+  c_ret_value = H5Gmove(c_loc_id, c_src_name, c_dst_name);
+  if(c_ret_value < 0) goto DONE;
+
+  ret_value = 0;
+
+DONE:
+  HDfree(c_src_name);
+  HDfree(c_dst_name);
+  return ret_value ;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5gmove2_c
+ * Purpose:     Call H5Gmove2 to rename an object within an HDF5 file
+ * Inputs:      src_loc_id - identifier of file or group
+ *              src_name - name of the original object relative to src_loc_id
+ *              src_namelen - original name lenghth
+ *              dst_loc_id - new location identifier
+ *              dst_name - new name for the object relative to dst_loc_id
+ *              dst_namelen - new name lenghth
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, September 25, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5gmove2_c(hid_t_f *src_loc_id, _fcd src_name, int_f *src_namelen, hid_t_f *dst_loc_id, _fcd dst_name, int_f*dst_namelen)
+{
+  int ret_value = -1;
+  hid_t c_src_loc_id;
+  hid_t c_dst_loc_id;
+  char *c_src_name, *c_dst_name;
+  int c_src_namelen, c_dst_namelen;
+  herr_t c_ret_value;
+  /*
+   *  Convert Fortran name to C name
+   */
+  c_src_namelen = *src_namelen;
+  c_dst_namelen = *dst_namelen;
+  c_src_name = (char *)HD5f2cstring(src_name, c_src_namelen);
+  if(c_src_name == NULL) return ret_value;
+
+  c_dst_name = (char *)HD5f2cstring(dst_name, c_dst_namelen);
+  if(c_dst_name == NULL) { HDfree(c_src_name);
+                           return ret_value;
+                         }
+  /*
+   *  Call H5Gmove2 function
+   */
+  c_src_loc_id = (hid_t)*src_loc_id;
+  c_dst_loc_id = (hid_t)*dst_loc_id;
+  c_ret_value = H5Gmove2(c_src_loc_id, c_src_name, c_dst_loc_id, c_dst_name);
+  if(c_ret_value < 0) goto DONE;
+
+  ret_value = 0;
+
+DONE:
+  HDfree(c_src_name);
+  HDfree(c_dst_name);
+  return ret_value ;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5gget_linkval_c
+ * Purpose:     Call H5Gget_linkval to return the name of object
+ * Inputs:      loc_id - identifier of file or group
+ *              name - name of the object that symbolic link points to
+ *              namelen - the name lenghth
+ *              size - lenghth of retrurned value
+ * Outputs:     value - name to be returned
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Mingshi Chen
+ *              Friday, August 6, 1999
+ * Modifications: Elena Pourmal
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5gget_linkval_c(hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size, _fcd value )
+{
+  int ret_value = -1;
+  hid_t c_loc_id;
+  char *c_name;
+  int c_namelen;
+  char *c_value = NULL;
+  size_t c_size;
+  herr_t c_ret_value;
+  /*
+   *  Convert Fortran name to C name
+   */
+  c_namelen = *namelen;
+  c_name = (char *)HD5f2cstring(name, c_namelen);
+  if(c_name == NULL) return ret_value;
+
+  /*
+   *  Allocate buffer to hold name of the value
+   */
+  if(*size) c_value = (char *)HDmalloc((size_t)*size);
+  if(c_value == NULL) {
+                     HDfree(c_name);
+                     return ret_value;
+                     }
+
+  /*
+   *  Call H5Gget_linkval function
+   */
+
+  c_size = (size_t)*size;
+  c_loc_id = (hid_t)*loc_id;
+  c_ret_value = H5Gget_linkval(c_loc_id, c_name, c_size, c_value);
+  if(c_ret_value < 0) goto DONE;
+
+
+  /*
+   *  Convert C name to FORTRAN and place it in the given buffer
+   */
+  HD5packFstring(c_value, _fcdtocp(value), (int)*size);
+  ret_value = 0;
+
+DONE:
+  HDfree(c_value);
+  HDfree(c_name);
+  return ret_value ;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5gset_comment_c
+ * Purpose:     Call H5Gset_comment to set comments for the specified object
+ * Inputs:      loc_id - identifier of file or group
+ *              name - name of object whose comment is to be set or reset
+ *              namelen - the name lenghth
+ *              comment - the new comment
+ *              commentlen - new comment lenghth
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Mingshi Chen
+ *              Friday, August 6, 1999
+ * Modifications: Elena Pourmal
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5gset_comment_c(hid_t_f *loc_id, _fcd name, int_f *namelen, _fcd comment, int_f*commentlen)
+{
+  int ret_value = -1;
+  hid_t c_loc_id;
+  char *c_name, *c_comment;
+  int c_namelen, c_commentlen;
+  herr_t c_ret_value;
+  /*
+   *  Convert Fortran name to C name
+   */
+  c_namelen = *namelen;
+  c_commentlen =*commentlen;
+  c_name = (char *)HD5f2cstring(name, c_namelen);
+  if(c_name == NULL) return ret_value;
+
+  c_comment = (char *)HD5f2cstring(comment, c_commentlen);
+  if(c_comment == NULL) { HDfree (c_name);
+                          return ret_value;
+                        }
+  /*
+   *  Call H5Gset_comment function
+   */
+  c_loc_id = (hid_t)*loc_id;
+  c_ret_value = H5Gset_comment(c_loc_id, c_name, c_comment);
+  if(c_ret_value < 0) goto DONE;
+  ret_value = 0;
+
+DONE:
+  HDfree(c_name);
+  HDfree(c_comment);
+  return ret_value ;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5gget_comment_c
+ * Purpose:     Call H5Gget_comment to retrieve comments for the specified object
+ * Inputs:      loc_id - identifier of file or group
+ *              name - name of object whose comment is to be set or reset
+ *              namelen - the name lenghth
+ *              bufsize - at most bufsize characters
+ *              comment - the new comment
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Mingshi Chen
+ *              Friday, August 6, 1999
+ * Modifications: Elena Pourmal
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5gget_comment_c(hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *bufsize, _fcd comment)
+{
+  int ret_value = -1;
+  hid_t c_loc_id;
+  char *c_name;
+  int c_namelen;
+  char *c_comment = NULL;
+  size_t c_bufsize;
+  herr_t c_ret_value;
+
+  /*
+   *  Convert Fortran name to C name
+   */
+  c_namelen = *namelen;
+  c_name = (char *)HD5f2cstring(name, c_namelen);
+  if(c_name == NULL)  return ret_value;
+
+  /*
+   *  Allocate buffer to hold the comment
+   */
+  c_bufsize = (size_t)*bufsize;
+  if(c_bufsize) c_comment = (char *)malloc(c_bufsize);
+  if(c_comment == NULL) {
+                        HDfree(c_name);
+                        return ret_value;
+                        }
+
+  /*
+   *  Call H5Gget_comment function
+   */
+  c_loc_id = *loc_id;
+  c_ret_value = H5Gget_comment(c_loc_id, c_name, c_bufsize, c_comment);
+  if(c_ret_value < 0) goto DONE;
+
+  /*
+   *  Convert C name to FORTRAN and place it in the given buffer
+   */
+  HD5packFstring(c_comment, _fcdtocp(comment), (int)*bufsize);
+  ret_value = 0;
+
+DONE:
+  HDfree(c_name);
+  HDfree(c_comment);
+  return ret_value ;
+}

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Gff.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Gff.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Gff.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,934 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 file contains Fortran90 interfaces for H5F functions.
+! 
+      MODULE H5G
+      USE H5GLOBAL
+ 
+        CONTAINS
+          
+!----------------------------------------------------------------------
+! Name:		h5gcreate_f 
+!
+! Purpose:	Creates a new group. 
+!
+! Inputs:  
+!		loc_id		- location identifier
+!		name		- group name at the specified location
+! Outputs:  
+!		grp_id		- group identifier
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!		size_hint	- a parameter indicating the number of bytes 
+!				  to reserve for the names that will appear 
+!				  in the group
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  March 5, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5gcreate_f(loc_id, name, grp_id, hdferr, size_hint)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5gcreate_f
+!DEC$endif
+!
+           
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the group 
+            INTEGER(HID_T), INTENT(OUT) :: grp_id  ! Group identifier 
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+            INTEGER(SIZE_T), OPTIONAL, INTENT(IN) :: size_hint 
+                                                   ! Parameter indicating
+                                                   ! the number of bytes
+                                                   ! to reserve for the
+                                                   ! names that will appear
+                                                   ! in the group  
+            INTEGER :: namelen ! Length of the name character string
+            INTEGER(SIZE_T) :: size_hint_default 
+
+!            INTEGER, EXTERNAL :: h5gcreate_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5gcreate_c(loc_id, name, namelen, &
+                               size_hint_default, grp_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5GCREATE_C'::h5gcreate_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: loc_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER :: namelen
+              INTEGER(SIZE_T) :: size_hint_default
+              INTEGER(HID_T), INTENT(OUT) :: grp_id
+              END FUNCTION h5gcreate_c
+            END INTERFACE
+
+            size_hint_default = OBJECT_NAMELEN_DEFAULT_F 
+            if (present(size_hint)) size_hint_default = size_hint 
+            namelen = LEN(name)
+            hdferr = h5gcreate_c(loc_id, name, namelen, size_hint_default, &
+                                 grp_id)
+
+          END SUBROUTINE h5gcreate_f
+
+!----------------------------------------------------------------------
+! Name:		h5gopen_f 
+!
+! Purpose: 	Opens an existing group. 	
+!
+! Inputs:  
+!		loc_id		- location identifier
+!		name 		- name of the group to open
+! Outputs:  
+!		grp_id		- group 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).  March 5, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5gopen_f(loc_id, name, grp_id, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5gopen_f
+!DEC$endif
+!
+           
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the group 
+            INTEGER(HID_T), INTENT(OUT) :: grp_id  ! File identifier 
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+
+            INTEGER :: namelen ! Length of the name character string
+
+!            INTEGER, EXTERNAL :: h5gopen_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5gopen_c(loc_id, name, namelen, grp_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5GOPEN_C'::h5gopen_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(OUT) :: grp_id
+              END FUNCTION h5gopen_c
+            END INTERFACE
+  
+            namelen = LEN(name)
+            hdferr = h5gopen_c(loc_id, name, namelen, grp_id) 
+
+          END SUBROUTINE h5gopen_f
+
+!----------------------------------------------------------------------
+! Name:		h5gclose_f 
+!
+! Purpose:	Closes the specified group. 	
+!
+! Inputs:  
+!		grp_id		- group identifier
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  March 5, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5gclose_f(grp_id, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5gclose_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: grp_id  ! Group identifier
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5gclose_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5gclose_c(grp_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5GCLOSE_C'::h5gclose_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: grp_id
+              END FUNCTION h5gclose_c
+            END INTERFACE
+
+            hdferr = h5gclose_c(grp_id)
+
+          END SUBROUTINE h5gclose_f
+
+
+!----------------------------------------------------------------------
+! Name:		h5gget_obj_info_idx_f 
+!
+! Purpose:	Returns name and type of the group member identified by 
+!		its index. 
+!
+! Inputs:  
+!		loc_id		- location identifier
+!		name		- name of the group at the specified location
+!		idx		- object index (zero-based)
+! Outputs:  
+!		obj_name	- object name
+!		obj_type	- object type
+!		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).  March 5, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5gget_obj_info_idx_f(loc_id, name, idx, &
+                                           obj_name, obj_type, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5gget_obj_info_idx_f
+!DEC$endif
+!
+           
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the group 
+            INTEGER, INTENT(IN) :: idx             ! Index of member object 
+            CHARACTER(LEN=*), INTENT(OUT) :: obj_name   ! Name of the object 
+            INTEGER, INTENT(OUT) :: obj_type       ! Object type 
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+
+            INTEGER :: namelen ! Length of the name character string
+            INTEGER :: obj_namelen ! Length of the obj_name character string
+
+!            INTEGER, EXTERNAL :: h5gget_obj_info_idx_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5gget_obj_info_idx_c(loc_id, name, &
+                               namelen, idx, &
+                               obj_name, obj_namelen, obj_type)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5GGET_OBJ_INFO_IDX_C'::h5gget_obj_info_idx_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              !DEC$ATTRIBUTES reference :: obj_name
+              INTEGER(HID_T), INTENT(IN) :: loc_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER :: namelen
+              INTEGER, INTENT(IN) :: idx
+              CHARACTER(LEN=*), INTENT(OUT) :: obj_name
+              INTEGER :: obj_namelen
+              INTEGER, INTENT(OUT) :: obj_type
+              END FUNCTION h5gget_obj_info_idx_c
+            END INTERFACE
+
+            namelen = LEN(name)
+            obj_namelen = LEN(obj_name)
+            hdferr = h5gget_obj_info_idx_c(loc_id, name, namelen, idx, &
+                                           obj_name, obj_namelen, obj_type)     
+
+          END SUBROUTINE h5gget_obj_info_idx_f
+
+!----------------------------------------------------------------------
+! Name:		h5gn_members_f 
+!
+! Purpose: 	Returns the number of group members. 	
+!
+! Inputs:  
+!		loc_id		- location identifier
+!		name		- name of the group at the specified location
+! Outputs:  
+!		nmembers	- number of group members
+!		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).  March 5, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5gn_members_f(loc_id, name, nmembers, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5gn_members_f
+!DEC$endif
+!
+           
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the group 
+            INTEGER, INTENT(OUT) :: nmembers       ! Number of members in the
+                                                   ! group 
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+
+            INTEGER :: namelen ! Length of the name character string
+  
+!            INTEGER, EXTERNAL :: h5gn_members_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5gn_members_c(loc_id, name, namelen, nmembers)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5GN_MEMBERS_C'::h5gn_members_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: loc_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER :: namelen
+              INTEGER, INTENT(OUT) :: nmembers
+              END FUNCTION h5gn_members_c
+            END INTERFACE
+
+            namelen = LEN(name)
+            hdferr = h5gn_members_c(loc_id, name, namelen, nmembers) 
+
+          END SUBROUTINE h5gn_members_f
+
+!----------------------------------------------------------------------
+! Name:		h5glink_f 
+!
+! Purpose: 	Creates a link of the specified type from new_name 
+!		to current_name. 	
+!
+! Inputs:  
+!		loc_id		- location identifier
+!		link_type	- link type
+!				  Possible values are:
+!				  H5G_LINK_HARD_F (0) or
+!				  H5G_LINK_SOFT_F (1) 
+!		current_name	- name of the existing object if link is a 
+!				  hard link. Can be anything for the soft link. 
+!		new_name	- new name for the object
+! 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).  March 5, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5glink_f(loc_id, link_type, current_name, &
+                                                   new_name, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5glink_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier 
+            INTEGER, INTENT(IN) :: link_type       ! link type
+                                                   ! Possible values are:
+                                                   ! H5G_LINK_HARD_F (0) or
+                                                   ! H5G_LINK_SOFT_F (1) 
+            
+            CHARACTER(LEN=*), INTENT(IN) :: current_name   
+                                                   ! Current name of an object 
+            CHARACTER(LEN=*), INTENT(IN) :: new_name ! New name of an object
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+            
+            INTEGER :: current_namelen ! Lenghth of the current_name string
+            INTEGER :: new_namelen     ! Lenghth of the new_name string
+
+!            INTEGER, EXTERNAL :: h5glink_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5glink_c(loc_id, link_type, current_name, &
+                               current_namelen, new_name, new_namelen)
+                              
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5GLINK_C'::h5glink_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: current_name
+              !DEC$ATTRIBUTES reference :: new_name
+              INTEGER(HID_T), INTENT(IN) :: loc_id 
+              INTEGER, INTENT(IN) :: link_type
+              CHARACTER(LEN=*), INTENT(IN) :: current_name
+              INTEGER :: current_namelen
+              CHARACTER(LEN=*), INTENT(IN) :: new_name
+              INTEGER :: new_namelen
+              END FUNCTION h5glink_c
+            END INTERFACE
+            
+            current_namelen = LEN(current_name)
+            new_namelen = LEN(new_name)
+            hdferr = h5glink_c(loc_id, link_type, current_name, &
+                               current_namelen, new_name, new_namelen)
+          END SUBROUTINE h5glink_f
+
+!----------------------------------------------------------------------
+! Name:		h5glink2_f 
+!
+! Purpose: 	Creates a link of the specified type from new_name 
+!		to current_name. current_name and new_name are interpreted
+!               releative to current and new location identifiers.	
+!
+! Inputs:  
+!		cur_loc_id	- location identifier
+!		cur_name	- name of the existing object if link is a 
+!				  hard link. Can be anything for the soft link. 
+!		link_type	- link type
+!				  Possible values are:
+!				  H5G_LINK_HARD_F (0) or
+!				  H5G_LINK_SOFT_F (1) 
+!		new_loc_id	- new location identifier
+!		new_name	- new name for the object
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		September 25, 2002
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5glink2_f(cur_loc_id, cur_name, link_type, new_loc_id, &
+                                                   new_name, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5glink2_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: cur_loc_id   ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: cur_name   
+                                                   ! Current name of an object 
+            INTEGER, INTENT(IN) :: link_type       ! link type
+                                                   ! Possible values are:
+                                                   ! H5G_LINK_HARD_F (0) or
+                                                   ! H5G_LINK_SOFT_F (1) 
+            
+            INTEGER(HID_T), INTENT(IN) :: new_loc_id ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: new_name ! New name of an object
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+            
+            INTEGER :: cur_namelen ! Lenghth of the current_name string
+            INTEGER :: new_namelen ! Lenghth of the new_name string
+
+            INTERFACE
+              INTEGER FUNCTION h5glink2_c(cur_loc_id, cur_name, cur_namelen, &
+                               link_type, new_loc_id, &
+                               new_name, new_namelen)
+                              
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5GLINK2_C'::h5glink2_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: cur_name
+              !DEC$ATTRIBUTES reference :: new_name
+              INTEGER(HID_T), INTENT(IN) :: cur_loc_id 
+              INTEGER(HID_T), INTENT(IN) :: new_loc_id 
+              INTEGER, INTENT(IN) :: link_type
+              CHARACTER(LEN=*), INTENT(IN) :: cur_name
+              CHARACTER(LEN=*), INTENT(IN) :: new_name
+              INTEGER :: cur_namelen
+              INTEGER :: new_namelen
+              END FUNCTION h5glink2_c
+            END INTERFACE
+            
+            cur_namelen = LEN(cur_name)
+            new_namelen = LEN(new_name)
+            hdferr = h5glink2_c(cur_loc_id, cur_name, cur_namelen, link_type, &
+                               new_loc_id, new_name, new_namelen)
+          END SUBROUTINE h5glink2_f
+
+!----------------------------------------------------------------------
+! Name:		h5gunlink_f 
+!
+! Purpose: 	Removes the specified name from the group graph and 
+!		decrements the link count for the object to which name 
+!		points	
+!
+! Inputs:  
+!		loc_id		- location identifier
+!		name		- name of the object to unlink
+! 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).  March 5, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5gunlink_f(loc_id, name, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5gunlink_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of an object 
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+            
+            INTEGER :: namelen ! Lenghth of the name character string
+            
+!            INTEGER, EXTERNAL :: h5gunlink_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5gunlink_c(loc_id, name, namelen)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5GUNLINK_C'::h5gunlink_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: loc_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER :: namelen
+              END FUNCTION h5gunlink_c
+            END INTERFACE
+            
+            namelen = LEN(name)
+            hdferr = h5gunlink_c(loc_id, name, namelen)
+          END SUBROUTINE h5gunlink_f
+
+!----------------------------------------------------------------------
+! Name:		h5gmove_f 
+!
+! Purpose:	Renames an object within an HDF5 file.  	
+!
+! Inputs:  
+!		loc_id		- location identifier
+!		name		- object's name at specified location
+!		new_name	- object's new name
+! 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).  March 5, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          
+          SUBROUTINE h5gmove_f(loc_id, name, new_name, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5gmove_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Current name of an object 
+            CHARACTER(LEN=*), INTENT(IN) :: new_name ! New name of an object
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+            
+            INTEGER :: namelen         ! Lenghth of the current_name string
+            INTEGER :: new_namelen     ! Lenghth of the new_name string
+
+!            INTEGER, EXTERNAL :: h5gmove_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5gmove_c(loc_id, name, namelen, new_name, new_namelen)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5GMOVE_C'::h5gmove_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              !DEC$ATTRIBUTES reference :: new_name
+              INTEGER(HID_T), INTENT(IN) :: loc_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER :: namelen
+              CHARACTER(LEN=*), INTENT(IN) :: new_name
+              INTEGER :: new_namelen
+              END FUNCTION h5gmove_c
+            END INTERFACE
+            
+            namelen = LEN(name)
+            new_namelen = LEN(new_name)
+            hdferr = h5gmove_c(loc_id, name, namelen, new_name, new_namelen)
+          END SUBROUTINE h5gmove_f
+
+!----------------------------------------------------------------------
+! Name:		h5gmove2_f 
+!
+! Purpose:	Renames an object within an HDF5 file.  	
+!
+! Inputs:  
+!		src_loc_id	- original location identifier
+!		src_name	- object's name at specified original location
+!		dst_loc_id	- original location identifier
+!		dst_name	- object's new name
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		September 25, 2002
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          
+          SUBROUTINE h5gmove2_f(src_loc_id, src_name, dst_loc_id, dst_name, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5gmove2_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN)   :: src_loc_id  ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: src_name    ! Original name of an object 
+            INTEGER(HID_T), INTENT(IN)   :: dst_loc_id  ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: dst_name    ! New name of an object
+            INTEGER, INTENT(OUT)         :: hdferr      ! Error code
+            
+            INTEGER :: src_namelen         ! Length of the current_name string
+            INTEGER :: dst_namelen         ! Lenghth of the new_name string
+
+!            INTEGER, EXTERNAL :: h5gmove2_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5gmove2_c(src_loc_id, src_name, src_namelen, &
+                               dst_loc_id, dst_name, dst_namelen)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5GMOVE2_C'::h5gmove2_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: src_name
+              !DEC$ATTRIBUTES reference :: dst_name
+              INTEGER(HID_T), INTENT(IN) :: src_loc_id
+              INTEGER(HID_T), INTENT(IN) :: dst_loc_id
+              CHARACTER(LEN=*), INTENT(IN) :: src_name
+              CHARACTER(LEN=*), INTENT(IN) :: dst_name
+              INTEGER :: src_namelen
+              INTEGER :: dst_namelen
+              END FUNCTION h5gmove2_c
+            END INTERFACE
+            
+            src_namelen = LEN(src_name)
+            dst_namelen = LEN(dst_name)
+            hdferr = h5gmove2_c(src_loc_id, src_name, src_namelen,&
+                    dst_loc_id,  dst_name, dst_namelen)
+          END SUBROUTINE h5gmove2_f
+
+!----------------------------------------------------------------------
+! Name:		h5gget_linkval_f 
+!
+! Purpose: 	Returns the name of the object that the symbolic link 
+! 		points to. 	
+!
+! Inputs:  
+!		loc_id		- location identifier
+!		name		- symbolic link to the object whose name 
+!				  is to be returned.  
+!		size		- maximum number of characters to be returned
+! Outputs:  
+!		buffer		- a buffer to hold the name of the object 
+!				  being sought 
+!		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).  March 5, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5gget_linkval_f(loc_id, name, size, buffer, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5gget_linkval_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Current name of an object 
+            INTEGER(SIZE_T), INTENT(IN) :: size    ! Maximum number of buffer
+            CHARACTER(LEN=size), INTENT(OUT) :: buffer 
+                                                   ! Buffer to hold a name of
+                                                   ! the object symbolic link
+                                                   ! points to
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+            
+            INTEGER :: namelen ! Lenghth of the current_name string
+
+!            INTEGER, EXTERNAL :: h5gget_linkval_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5gget_linkval_c(loc_id, name, namelen, size, buffer)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5GGET_LINKVAL_C'::h5gget_linkval_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              !DEC$ATTRIBUTES reference :: buffer 
+              INTEGER(HID_T), INTENT(IN) :: loc_id
+              CHARACTER(LEN=*), INTENT(IN) :: name 
+              INTEGER :: namelen
+              INTEGER(SIZE_T), INTENT(IN) :: size
+              CHARACTER(LEN=*), INTENT(OUT) :: buffer
+              END FUNCTION h5gget_linkval_c
+            END INTERFACE
+            
+            namelen = LEN(name)
+            hdferr = h5gget_linkval_c(loc_id, name, namelen, size, buffer)
+          END SUBROUTINE h5gget_linkval_f
+
+!----------------------------------------------------------------------
+! Name:		h5gset_comment_f 
+!
+! Purpose: 	Sets comment for specified object. 	
+!
+! Inputs:  
+!		loc_id		- location identifier
+!		name		- name of the object
+!		comment		- comment to set for the object
+! 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).  March 5, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+           SUBROUTINE h5gset_comment_f(loc_id, name, comment, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5gset_comment_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Current name of an object 
+            CHARACTER(LEN=*), INTENT(IN) :: comment ! New name of an object
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+            
+            INTEGER :: namelen ! Lenghth of the current_name string
+            INTEGER :: commentlen     ! Lenghth of the comment string
+
+!            INTEGER, EXTERNAL :: h5gset_comment_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5gset_comment_c(loc_id, name, namelen, &
+                                                comment, commentlen)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5GSET_COMMENT_C'::h5gset_comment_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name 
+              !DEC$ATTRIBUTES reference :: comment 
+              INTEGER(HID_T), INTENT(IN) :: loc_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER :: namelen
+              CHARACTER(LEN=*), INTENT(IN) :: comment
+              INTEGER :: commentlen
+              END FUNCTION h5gset_comment_c
+            END INTERFACE
+            
+            namelen = LEN(name)
+            commentlen = LEN(comment)
+            hdferr = h5gset_comment_c(loc_id, name, namelen, comment, commentlen)
+          END SUBROUTINE h5gset_comment_f
+
+!----------------------------------------------------------------------
+! Name:		h5gget_comment_f 
+!
+! Purpose:	Retrieves comment for specified object.  	
+!
+! Inputs:  
+!		loc_id		- location identifier
+!		name		- name of the object at specified location
+!		size		- size of the buffer required to hold comment
+! Outputs:  
+!		buffer		- buffer to hold object's comment
+!		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).  March 5, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5gget_comment_f(loc_id, name, size, buffer, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5gget_comment_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Current name of an object 
+            INTEGER(SIZE_T), INTENT(IN) :: size    ! Maximum number of buffer
+            CHARACTER(LEN=size), INTENT(OUT) :: buffer 
+                                                   ! Buffer to hold a comment
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+            
+            INTEGER :: namelen ! Lenghth of the current_name string
+
+!            INTEGER, EXTERNAL :: h5gget_comment_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5gget_comment_c(loc_id, name, namelen, &
+                                                size, buffer)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5GGET_COMMENT_C'::h5gget_comment_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name 
+              !DEC$ATTRIBUTES reference :: buffer 
+              INTEGER(HID_T), INTENT(IN) :: loc_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER :: namelen
+              INTEGER(SIZE_T), INTENT(IN) :: size
+              CHARACTER(LEN=*), INTENT(OUT) :: buffer
+              END FUNCTION h5gget_comment_c
+            END INTERFACE
+            
+            namelen = LEN(name)
+            hdferr = h5gget_comment_c(loc_id, name, namelen, size, buffer)
+          END SUBROUTINE h5gget_comment_f
+
+
+      END MODULE H5G

Added: packages/hdf5/branches/upstream/current/fortran/src/H5If.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5If.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5If.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,208 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 files contains C stubs for H5I Fortran APIs */
+
+#include "H5f90.h"
+#include "H5Eprivate.h"
+
+/*----------------------------------------------------------------------------
+ * Name:        h5iget_type_c
+ * Purpose:     Call H5Iget_type to get the type of an object
+ * Inputs:      obj_id - object identifier
+ * Outputs:     type - object type
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Thursday, March 24, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5iget_type_c (hid_t_f *obj_id, int_f *type)
+{
+     int ret_value = -1;
+     hid_t c_obj_id;
+     H5I_type_t c_type;
+
+     /*
+      * Call H5Iget_type function.
+      */
+     c_obj_id = *obj_id;
+     c_type = H5Iget_type(c_obj_id);
+     if (c_type == H5I_BADID) return ret_value;
+     *type = (int_f)c_type;
+     ret_value = 0;
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5iget_name_c
+ * Purpose:     Call H5Iget_name to get object's name
+ * Inputs:      obj_id - object identifier
+ *              buf_size - size of the buffer
+ * Outputs:     buf - buffer to hold the name
+ * Returns:     length of the name on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, March 12, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5iget_name_c(hid_t_f *obj_id, _fcd buf, size_t_f *buf_size, size_t_f *name_size)
+{
+     int ret_value = -1;
+     hid_t c_obj_id;
+     ssize_t c_size;
+     size_t c_buf_size;
+     char *c_buf =NULL;
+
+     /*
+      * Allocate buffer to hold name of an attribute
+      */
+     c_buf_size = (size_t)*buf_size;
+     c_buf = (char *)HDmalloc(c_buf_size +1);
+     if (c_buf == NULL) return ret_value;
+
+     /*
+      * Call H5IAget_name function
+      */
+     c_obj_id = (hid_t)*obj_id;
+     c_size = H5Iget_name(c_obj_id, c_buf, c_buf_size);
+     if (c_size < 0) goto DONE;
+
+     /*
+      * Convert C name to FORTRAN and place it in the given buffer
+      */
+      HD5packFstring(c_buf, _fcdtocp(buf), (int)c_buf_size);
+      *name_size = (size_t_f)c_size;
+      ret_value = 0;
+
+DONE:
+      HDfree(c_buf);
+      return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5iinc_ref_c
+ * Purpose:     Call H5Iinc_ref to increment object's reference count
+ * Inputs:      obj_id - object identifier
+ * Outputs:     ref_count - Reference count of ID
+ * Returns:     current reference count on success, -1 on failure
+ * Programmer:  Quincey Koziol
+ *              Tuesday, December  9, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5iinc_ref_c(hid_t_f *obj_id, int_f *ref_count)
+{
+     int ret_value;
+
+     /*
+      * Call H5Iinc_ref function
+      */
+     if ((ret_value = H5Iinc_ref(*obj_id)) < 0)
+         HGOTO_DONE(FAIL);
+
+    /* Set output & return values */
+    *ref_count=ret_value;
+    ret_value=0;
+
+done:
+      return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5idec_ref_c
+ * Purpose:     Call H5Idec_ref to decrement object's reference count
+ * Inputs:      obj_id - object identifier
+ * Outputs:     ref_count - Reference count of ID
+ * Returns:     current reference count on success, -1 on failure
+ * Programmer:  Quincey Koziol
+ *              Tuesday, December  9, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5idec_ref_c(hid_t_f *obj_id, int_f *ref_count)
+{
+     int ret_value;
+
+     /*
+      * Call H5Idec_ref function
+      */
+     if ((ret_value = H5Idec_ref(*obj_id)) < 0)
+         HGOTO_DONE(FAIL);
+
+    /* Set output & return values */
+    *ref_count=ret_value;
+    ret_value=0;
+
+done:
+      return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5iget_ref_c
+ * Purpose:     Call H5Iget_ref to retrieve object's reference count
+ * Inputs:      obj_id - object identifier
+ * Outputs:     ref_count - Reference count of ID
+ * Returns:     current reference count on success, -1 on failure
+ * Programmer:  Quincey Koziol
+ *              Tuesday, December  9, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5iget_ref_c(hid_t_f *obj_id, int_f *ref_count)
+{
+     int ret_value;
+
+     /*
+      * Call H5Iget_ref function
+      */
+     if ((ret_value = H5Iget_ref(*obj_id)) < 0)
+         HGOTO_DONE(FAIL);
+
+    /* Set output & return values */
+    *ref_count=ret_value;
+    ret_value=0;
+
+done:
+      return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5iget_file_id_c
+ * Purpose:     Call H5Iget_file_id to obtain file identifier from object identifier
+ * Inputs:      obj_id - object identifier
+ * Outputs:     file_id - file identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Tuesday, August 24, 2004
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5iget_file_id_c(hid_t_f *obj_id, hid_t_f *file_id)
+{
+     int ret_value;
+     hid_t c_file_id;
+
+     /*
+      * Call H5Iget_file_id
+      */
+     if ((c_file_id = H5Iget_file_id(*obj_id)) < 0)
+         HGOTO_DONE(FAIL);
+
+    /* Set output & return values */
+    *file_id=(hid_t_f)c_file_id;
+    ret_value=0;
+
+done:
+      return ret_value;
+}

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Iff.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Iff.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Iff.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,343 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 file contains FORTRAN90 interfaces for H5I functions
+!
+      MODULE H5I
+
+        USE H5GLOBAL
+      
+      CONTAINS
+
+!----------------------------------------------------------------------
+! Name:		h5iget_type_f 
+!
+! Purpose:	Retrieves the type of an object.  	
+!
+! Inputs: 	obj_id		- object identifier 
+! Outputs:  
+!		type		- type of the object, possible values:   
+!				  H5I_FILE_F
+!				  H5I_GROUP_F
+!				  H5I_DATATYPE_F
+!				  H5I_DATASPACE_F
+!				  H5I_DATASET_F
+!				  H5I_ATTR_F
+!				  H5I_BADID_F
+!		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).  March 5, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5iget_type_f(obj_id, type, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5iget_type_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: obj_id  !Object identifier 
+            INTEGER, INTENT(OUT) :: type !type of an object. 
+                                         !possible values are:
+                                         !H5I_FILE_F
+                                         !H5I_GROUP_F
+                                         !H5I_DATATYPE_F
+                                         !H5I_DATASPACE_F
+                                         !H5I_DATASET_F
+                                         !H5I_ATTR_F
+                                         !H5I_BADID_F
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5iget_type_c
+!  Interface is needed for MS FORTRAN
+!
+            INTERFACE
+              INTEGER FUNCTION h5iget_type_c(obj_id, type)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5IGET_TYPE_C':: h5iget_type_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: obj_id 
+              INTEGER, INTENT(OUT) :: type
+              END FUNCTION h5iget_type_c
+            END INTERFACE
+            hdferr = h5iget_type_c(obj_id, type)
+          END SUBROUTINE h5iget_type_f
+
+!----------------------------------------------------------------------
+! Name:		h5iget_name_f 
+!
+! Purpose: 	Gets a name of an object specified by its idetifier.  
+!
+! Inputs:  
+!		obj_id		- attribute identifier
+!		buf_size	- size of a buffer to read name in
+! Outputs:  
+!		buf		- buffer to read name in, name will be truncated if
+!                                 buffer is not big enough
+!               name_size       - name size
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE			
+!
+! Programmer:	Elena Pourmal
+!		March 12, 2003
+!
+! Modifications: 	
+!
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5iget_name_f(obj_id, buf, buf_size, name_size, hdferr) 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5iget_name_f
+!DEC$endif
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: obj_id     ! Object identifier 
+            INTEGER(SIZE_T), INTENT(IN) :: buf_size  ! Buffer size 
+            CHARACTER(LEN=*), INTENT(OUT) :: buf   ! Buffer to hold object name
+            INTEGER(SIZE_T), INTENT(OUT) :: name_size ! Actual name size
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code:
+                                                   ! 0 if successful,
+                                                   ! -1 if fail
+!            INTEGER, EXTERNAL :: h5iget_name_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5iget_name_c(obj_id, buf, buf_size, name_size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5IGET_NAME_C'::h5iget_name_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: buf
+              INTEGER(HID_T), INTENT(IN) :: obj_id
+              CHARACTER(LEN=*), INTENT(OUT) :: buf
+              INTEGER(SIZE_T), INTENT(IN) :: buf_size
+              INTEGER(SIZE_T), INTENT(OUT) :: name_size
+              END FUNCTION h5iget_name_c
+            END INTERFACE
+
+            hdferr = h5iget_name_c(obj_id, buf, buf_size, name_size)
+          END SUBROUTINE h5iget_name_f
+
+!----------------------------------------------------------------------
+! Name:		h5iinc_ref_f
+!
+! Purpose:	Increments the reference count of an ID
+!
+! Inputs: 	obj_id		- object identifier 
+! Outputs:  
+!		ref_count       - Current reference count of the ID
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Quincey Koziol
+!		December  9, 2003	
+!
+! Modifications:
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5iinc_ref_f(obj_id, ref_count, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5iinc_ref_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: obj_id  !Object identifier 
+            INTEGER, INTENT(OUT) :: ref_count !Current reference count of ID
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5iinc_ref_c
+!  Interface is needed for MS FORTRAN
+!
+            INTERFACE
+              INTEGER FUNCTION h5iinc_ref_c(obj_id, ref_count)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5IINC_REF_C':: h5iinc_ref_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: obj_id 
+              INTEGER, INTENT(OUT) :: ref_count
+              END FUNCTION h5iinc_ref_c
+            END INTERFACE
+            hdferr = h5iinc_ref_c(obj_id, ref_count)
+          END SUBROUTINE h5iinc_ref_f
+
+!----------------------------------------------------------------------
+! Name:		h5idec_ref_f
+!
+! Purpose:	Decrements the reference count of an ID
+!
+! Inputs: 	obj_id		- object identifier 
+! Outputs:  
+!		ref_count       - Current reference count of the ID
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Quincey Koziol
+!		December  9, 2003	
+!
+! Modifications:
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5idec_ref_f(obj_id, ref_count, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5idec_ref_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: obj_id  !Object identifier 
+            INTEGER, INTENT(OUT) :: ref_count !Current reference count of ID
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5idec_ref_c
+!  Interface is needed for MS FORTRAN
+!
+            INTERFACE
+              INTEGER FUNCTION h5idec_ref_c(obj_id, ref_count)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5IDEC_REF_C':: h5idec_ref_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: obj_id 
+              INTEGER, INTENT(OUT) :: ref_count
+              END FUNCTION h5idec_ref_c
+            END INTERFACE
+            hdferr = h5idec_ref_c(obj_id, ref_count)
+          END SUBROUTINE h5idec_ref_f
+
+!----------------------------------------------------------------------
+! Name:		h5iget_ref_f
+!
+! Purpose:	Retrieves the reference count of an ID
+!
+! Inputs: 	obj_id		- object identifier 
+! Outputs:  
+!		ref_count       - Current reference count of the ID
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Quincey Koziol
+!		December  9, 2003	
+!
+! Modifications:
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5iget_ref_f(obj_id, ref_count, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5iget_ref_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: obj_id  !Object identifier 
+            INTEGER, INTENT(OUT) :: ref_count !Current reference count of ID
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5iget_ref_c
+!  Interface is needed for MS FORTRAN
+!
+            INTERFACE
+              INTEGER FUNCTION h5iget_ref_c(obj_id, ref_count)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5IGET_REF_C':: h5iget_ref_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: obj_id 
+              INTEGER, INTENT(OUT) :: ref_count
+              END FUNCTION h5iget_ref_c
+            END INTERFACE
+            hdferr = h5iget_ref_c(obj_id, ref_count)
+          END SUBROUTINE h5iget_ref_f
+
+!----------------------------------------------------------------------
+! Name:		h5iget_file_id_f
+!
+! Purpose:	Obtains file identifier from the object identifier
+!
+! Inputs: 	obj_id		- object identifier 
+! Outputs:       
+!		file_id         - file identifier
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		August 23, 2004
+!
+! Modifications:
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5iget_file_id_f(obj_id, file_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5iget_file_id_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN)  :: obj_id   ! Object identifier 
+            INTEGER(HID_T), INTENT(OUT) :: file_id  ! File identifier
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5iget_file_id_c(obj_id, file_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5IGET_FILE_ID_C':: h5iget_file_id_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN)  :: obj_id 
+              INTEGER(HID_T), INTENT(OUT) :: file_id 
+              END FUNCTION h5iget_file_id_c
+            END INTERFACE
+            hdferr = h5iget_file_id_c(obj_id, file_id)
+          END SUBROUTINE h5iget_file_id_f
+
+      END MODULE H5I
+

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Pf.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Pf.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Pf.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3342 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 files contains C stubs for H5P Fortran APIs */
+
+#include "H5f90.h"
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pcreate_c
+ * Purpose:     Call H5Pcreate to create a property list
+ * Inputs:      class - property list class identifier
+ * Outputs:     prp_id - identifier of the created property list
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, October 9, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pcreate_c ( hid_t_f *class, hid_t_f *prp_id )
+{
+  hid_t c_class;
+  int ret_value = 0;
+  hid_t c_prp_id;
+
+  c_class = (hid_t)*class;
+  c_prp_id = H5Pcreate(c_class);
+
+  if ( c_prp_id  < 0  ) ret_value = -1;
+  *prp_id = (hid_t_f)c_prp_id;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pclose_c
+ * Purpose:     Call H5Pclose to close property lis
+ * Inputs:      prp_id - identifier of the property list to be closed
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pclose_c ( hid_t_f *prp_id )
+{
+  int ret_value = 0;
+  hid_t c_prp_id=(*prp_id);
+
+  if ( H5Pclose(c_prp_id) < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pcopy_c
+ * Purpose:     Call H5Pcopy to copy property list
+ * Inputs:      prp_id - identifier of the property list to be copied
+ * Outputs:     new_prp_id - identifier of the new property list
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pcopy_c ( hid_t_f *prp_id , hid_t_f *new_prp_id)
+{
+  int ret_value = 0;
+  hid_t c_prp_id;
+  hid_t c_new_prp_id;
+
+  c_prp_id = *prp_id;
+  c_new_prp_id = H5Pcopy(c_prp_id);
+  if ( c_new_prp_id < 0  ) ret_value = -1;
+  *new_prp_id = (hid_t_f)c_new_prp_id;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pequal_c
+ * Purpose:     Call H5Pequal to check if two property lists are equal
+ * Inputs:      plist1_id - property list identifier
+ *              plist2_id - property list identifier
+ * Outputs:     c_flag    - flag to indicate that lists are eqaul
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, September 30, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pequal_c ( hid_t_f *plist1_id , hid_t_f *plist2_id, int_f * c_flag)
+{
+  int ret_value = 0;
+  hid_t c_plist1_id;
+  hid_t c_plist2_id;
+  htri_t c_c_flag;
+
+  c_plist1_id = (hid_t)*plist1_id;
+  c_plist2_id = (hid_t)*plist2_id;
+  c_c_flag = H5Pequal(c_plist1_id, c_plist2_id);
+  if ( c_c_flag < 0  ) ret_value = -1;
+  *c_flag = (int_f)c_c_flag;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_class_c
+ * Purpose:     Call H5Pget_class to determine property list class
+ * Inputs:      prp_id - identifier of the dataspace
+ * Outputs:     classtype - class type; possible values are:
+ *              H5P_NO_CLASS_F       -1
+ *              H5P_FILE_CREATE_F     0
+ *              H5P_FILE_ACCESS_F     1
+ *              H5P_DATASET_CREATE_F  2
+ *              H5P_DATASET_XFER_F    3
+ *              H5P_MOUNT_F           4
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pget_class_c ( hid_t_f *prp_id , int_f *classtype)
+{
+  int ret_value = 0;
+  hid_t c_prp_id;
+  hid_t c_classtype;
+
+  c_prp_id = *prp_id;
+  c_classtype = H5Pget_class(c_prp_id);
+  if (c_classtype == H5P_NO_CLASS ) {
+      *classtype = H5P_NO_CLASS;
+       ret_value = -1;
+       return ret_value;
+  }
+  *classtype = (int_f)c_classtype;
+
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_preserve_c
+ * Purpose:     Call H5Pset_preserve to set  transfer property for compound
+ *              datatype
+ * Inputs:      prp_id - property list identifier
+ *              flag - TRUE/FALSE flag
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, February 17, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_preserve_c ( hid_t_f *prp_id , int_f *flag)
+{
+  int ret_value = 0;
+  hid_t c_prp_id;
+  herr_t status;
+  hbool_t c_flag = 0;
+
+  if (*flag > 0) c_flag = 1;
+  c_prp_id = (hid_t)*prp_id;
+  status = H5Pset_preserve(c_prp_id, c_flag);
+  if ( status < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_preserve_c
+ * Purpose:     Call H5Pget_preserve to set  transfer property for compound
+ *              datatype
+ * Inputs:      prp_id - property list identifier
+ * Outputs:     flag - TRUE/FALSE flag
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, February 17, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pget_preserve_c ( hid_t_f *prp_id , int_f *flag)
+{
+  int ret_value = 0;
+  hid_t c_prp_id;
+  int c_flag;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_flag = H5Pget_preserve(c_prp_id);
+  if ( c_flag < 0  ) ret_value = -1;
+  *flag = (int_f)c_flag;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_deflate_c
+ * Purpose:     Call H5Pset_deflate to set deflate level
+ * Inputs:      prp_id - property list identifier
+ *              level - level of deflation
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_deflate_c ( hid_t_f *prp_id , int_f *level)
+{
+  int ret_value = 0;
+  hid_t c_prp_id;
+  unsigned c_level;
+  herr_t status;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_level = (unsigned)*level;
+  status = H5Pset_deflate(c_prp_id, c_level);
+  if ( status < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_chunk_c
+ * Purpose:     Call H5Pset_chunk to set the sizes of chunks for a chunked
+ *              layout dataset
+ * Inputs:      prp_id - property list identifier
+ *              rank - number of dimensions of each chunk
+ *              dims - array of the size of each chunk
+ * Returns:     0 on success, -1 on failure
+ *              Saturday, August 14, 1999
+ * Programmer:  Elena Pourmal
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_chunk_c ( hid_t_f *prp_id, int_f *rank, hsize_t_f *dims )
+{
+  int ret_value = -1;
+  hid_t c_prp_id;
+  int c_rank;
+  hsize_t *c_dims;
+  herr_t status;
+  int i;
+
+  c_dims =  malloc(sizeof(hsize_t) * (*rank ));
+  if (!c_dims) return ret_value;
+
+  /*
+   * Transpose dimension arrays because of C-FORTRAN storage order
+   */
+  for (i = 0; i < *rank ; i++) {
+       c_dims[i] =  dims[*rank - i - 1];
+  }
+
+  c_prp_id = (hid_t)*prp_id;
+  c_rank = (int)*rank;
+  status = H5Pset_chunk(c_prp_id, c_rank, c_dims);
+  if (status < 0) goto DONE;
+  ret_value = 0;
+
+DONE:
+  HDfree (c_dims);
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_chunk_c
+ * Purpose:     Call H5Pget_chunk to get the sizes of chunks for a chunked
+ *              layout dataset  for at list max_rank number of dimensions
+ * Inputs:      prp_id - property list identifier
+ *              max rank - maximum number of dimensions to return
+ *              dims - array of the size of each chunk
+ * Returns:     number of chunk's dimnesion on success, -1 on failure
+ *              Saturday, August 14, 1999
+ * Programmer:  Elena Pourmal
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pget_chunk_c ( hid_t_f *prp_id, int_f *max_rank, hsize_t_f *dims )
+{
+  int ret_value = -1;
+  hid_t c_prp_id;
+  hsize_t *c_dims;
+  int rank;
+  int c_max_rank;
+  int i;
+
+  c_dims =  malloc(sizeof(hsize_t) * (*max_rank ));
+  if (!c_dims) return ret_value;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_max_rank = (int)*max_rank;
+  rank = H5Pget_chunk(c_prp_id, c_max_rank, c_dims);
+
+  /*
+   * Transpose dimension arrays because of C-FORTRAN storage order
+   */
+  for (i = 0; i < *max_rank ; i++) {
+       dims[*max_rank - i - 1] = (hsize_t_f)c_dims[i];
+  }
+  HDfree (c_dims);
+  if (rank < 0) return ret_value;
+  ret_value = (int_f)rank;
+  return ret_value;
+}
+
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_fill_valuec_c
+ * Purpose:     Call h5pset_fill_value_c to a character fill value
+ * Inputs:      prp_id - property list identifier
+ *              type_id - datatype identifier (fill value is of type type_id)
+ *              fillvalue  - character value
+ * Returns:     0 on success, -1 on failure
+ *              Saturday, August 14, 1999
+ * Programmer:  Elena Pourmal
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_fill_valuec_c (hid_t_f *prp_id, hid_t_f *type_id, _fcd fillvalue)
+{
+     int ret_value = -1;
+
+     /*
+      * Call h5pset_fill_value_c  function.
+      */
+     ret_value = nh5pset_fill_value_c(prp_id, type_id, _fcdtocp(fillvalue));
+
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_fill_value_c
+ * Purpose:     Call H5Pset_fill_value to set a fillvalue for a dataset
+ * Inputs:      prp_id - property list identifier
+ *              type_id - datatype identifier (fill value is of type type_id)
+ *              fillvalue - fillvalue
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_fill_value_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     hid_t c_type_id;
+     herr_t ret;
+
+     /*
+      * Call H5Pset_fill_value function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     c_type_id = (int)*type_id;
+     ret = H5Pset_fill_value(c_prp_id, c_type_id, fillvalue);
+
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_fill_valuec_c
+ * Purpose:     Call h5pget_fill_value_c to a character fill value
+ * Inputs:      prp_id - property list identifier
+ *              type_id - datatype identifier (fill value is of type type_id)
+ *              fillvalue  - character value
+ * Returns:     0 on success, -1 on failure
+ *              Saturday, August 14, 1999
+ * Programmer:  Elena Pourmal
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_fill_valuec_c (hid_t_f *prp_id, hid_t_f *type_id, _fcd fillvalue)
+{
+     int ret_value = -1;
+
+     /*
+      * Call h5pget_fill_value_c  function.
+      */
+     ret_value = nh5pset_fill_value_c(prp_id, type_id, _fcdtocp(fillvalue));
+
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_fill_value_c
+ * Purpose:     Call H5Pget_fill_value to set a fillvalue for a dataset
+ * Inputs:      prp_id - property list identifier
+ *              type_id - datatype identifier (fill value is of type type_id)
+ *              fillvalue - fillvalue
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_fill_value_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     hid_t c_type_id;
+     herr_t ret;
+
+     /*
+      * Call H5Pget_fill_value function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     c_type_id = (int)*type_id;
+     ret = H5Pget_fill_value(c_prp_id, c_type_id, fillvalue);
+
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_version_c
+ * Purpose:     Call H5Pget_version to get the version information
+ *              of various objects for a file creation property list
+ * Inputs:      prp_id - property list identifier
+ * Outputs:     boot - array to put boot block version number
+ *              freelist - array to put global freelist version number
+ *              stab - array to put symbol table version number
+ *              shhdr - array to put shared object header version number
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, February 23, 2000
+ * Modifications: Removed extra length parameters EP 7/6/00
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_version_c (hid_t_f *prp_id, int_f * boot,int_f * freelist, int_f * stab, int_f *shhdr)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     unsigned c_boot;
+     unsigned c_freelist;
+     unsigned c_stab;
+     unsigned c_shhdr;
+
+     /*
+      * Call H5Pget_version function.
+      */
+     c_prp_id = *prp_id;
+     ret = H5Pget_version(c_prp_id, &c_boot, &c_freelist, &c_stab, &c_shhdr);
+     if (ret < 0) return ret_value;
+
+     *boot = (int_f)c_boot;
+     *freelist = (int_f)c_freelist;
+     *stab = (int_f)c_stab;
+     *shhdr = (int_f)c_shhdr;
+     ret_value = 0;
+
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_userblock_c
+ * Purpose:     Call H5Pget_userblock to get the size of a user block in
+ *              a file creation property list
+ * Inputs:      prp_id - property list identifier
+ * Outputs      size - Size of the user-block in bytes
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, February 23, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_userblock_c (hid_t_f *prp_id, hsize_t_f * size)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     hsize_t c_size;
+
+     /*
+      * Call H5Pget_userblock function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pget_userblock(c_prp_id, &c_size);
+     if (ret < 0) return ret_value;
+
+     *size = (hsize_t_f)c_size;
+     ret_value = 0;
+
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_userblock_c
+ * Purpose:     Call H5Pset_userblock to set the size of a user block in
+ *              a file creation property list
+ * Inputs:      prp_id - property list identifier
+ *              size - Size of the user-block in bytes
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, February 23, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_userblock_c (hid_t_f *prp_id, hsize_t_f * size)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     hsize_t c_size;
+     c_size = (hsize_t)*size;
+
+     /*
+      * Call H5Pset_userblock function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pset_userblock(c_prp_id, c_size);
+
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_sizes_c
+ * Purpose:     Call H5Pget_sizes to get the size of the offsets
+ *              and lengths used in an HDF5 file
+ * Inputs:      prp_id - property list identifier
+ * Outputs      sizeof_addr - Size of an object offset in bytes
+ *              sizeof_size - Size of an object length in bytes
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, February 23, 2000
+ * Modifications: Deleted extra length parameters. EP 6/7/00
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_sizes_c (hid_t_f *prp_id, size_t_f * sizeof_addr, size_t_f * sizeof_size)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     size_t c_sizeof_addr;
+     size_t c_sizeof_size;
+
+     /*
+      * Call H5Pget_sizes function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pget_sizes(c_prp_id, &c_sizeof_addr, &c_sizeof_size);
+     if (ret < 0) return ret_value;
+
+     *sizeof_addr = (size_t_f)c_sizeof_addr;
+     *sizeof_size = (size_t_f)c_sizeof_size;
+     ret_value = 0;
+
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_sizes_c
+ * Purpose:     Call H5Pset_sizes to set the size of the offsets
+ * Inputs:      prp_id - property list identifier
+ *              sizeof_addr - Size of an object offset in bytes
+ *              sizeof_size - Size of an object length in bytes
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, February 23, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_sizes_c (hid_t_f *prp_id, size_t_f * sizeof_addr, size_t_f * sizeof_size)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     size_t c_addr, c_size;
+     c_addr = (size_t)*sizeof_addr;
+     c_size = (size_t)*sizeof_size;
+
+     /*
+      * Call H5Pset_sizes function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pset_sizes(c_prp_id, c_addr, c_size);
+
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_sym_k_c
+ * Purpose:     Call H5Pset_sym_k to set the size of parameters used
+ *              to control the symbol table node
+ * Inputs:      prp_id - property list identifier
+ *              ik - Symbol table tree rank
+ *              lk - Symbol table node size
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_sym_k_c (hid_t_f *prp_id, int_f* ik, int_f* lk)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     unsigned c_ik;
+     unsigned c_lk;
+     herr_t ret;
+
+     /*
+      * Call H5Pset_sym_k function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     c_ik = (unsigned)*ik;
+     c_lk = (unsigned)*lk;
+     ret = H5Pset_sym_k(c_prp_id, c_ik, c_lk);
+
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_sym_k_c
+ * Purpose:     Call H5Pget_sym_k to get the size of parameters used
+ *              to control the symbol table node
+ * Inputs:      prp_id - property list identifier
+ * Outputs:     ik - Symbol table tree rank
+ *              lk - Symbol table node size
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_sym_k_c (hid_t_f *prp_id, int_f* ik, int_f* lk)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     unsigned c_ik;
+     unsigned c_lk;
+
+     /*
+      * Call H5Pget_sym_k function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pget_sym_k(c_prp_id, &c_ik, &c_lk);
+     *ik = (int_f)c_ik;
+     *lk = (int_f)c_lk;
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_istore_k_c
+ * Purpose:     Call H5Pset_istore_k to set the size of the parameter
+ *              used to control the B-trees for indexing chunked datasets
+ * Inputs:      prp_id - property list identifier
+ *              ik - Symbol table tree rank
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_istore_k_c (hid_t_f *prp_id, int_f* ik)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     unsigned c_ik;
+     herr_t ret;
+
+     /*
+      * Call H5Pset_istore_k function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     c_ik = (unsigned)*ik;
+     ret = H5Pset_istore_k(c_prp_id, c_ik);
+
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_istore_k_c
+ * Purpose:     Call H5Pget_istore_k to get the size of parameters used
+ *              to control the B-trees for indexing chunked datasets
+ * Inputs:      prp_id - property list identifier
+ * Outputs:     ik - Symbol table tree rank
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_istore_k_c (hid_t_f *prp_id, int_f* ik)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     unsigned c_ik;
+
+     /*
+      * Call H5Pget_istore_k function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pget_istore_k(c_prp_id, &c_ik);
+     *ik = (int_f)c_ik;
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_driver_c
+ * Purpose:     Call H5Pget_driver to get low-level file driver identifier
+ * Inputs:      prp_id - property list identifier
+ * Outputs:     driver - low-level file driver identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_driver_c (hid_t_f *prp_id, hid_t_f* driver)
+{
+     int ret_value = -1;
+     hid_t c_driver;
+
+     /*
+      * Call H5Pget_driver function.
+      */
+     c_driver = H5Pget_driver((hid_t)*prp_id);
+     if (c_driver < 0) goto DONE;
+
+     *driver = (hid_t_f) c_driver;
+     ret_value = 0;
+
+DONE:
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_fapl_stdio_c
+ * Purpose:     Call H5Pset_stdio to set the low level file driver to
+ *              use the functions declared in the stdio.h
+ * Inputs:      prp_id - property list identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              March 7, 2001
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_fapl_stdio_c (hid_t_f *prp_id)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret = -1;
+     /*
+      * Call H5Pset_fapl_stdio function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pset_fapl_stdio(c_prp_id);
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+#ifdef NO_SUCH_F90_FUNCTION
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_fapl_stdio_c
+ * Purpose:     Call H5Pget_fapl_stdio to determine whther the low level file driver
+ *              uses the functions declared in the stdio.h
+ * Inputs:      prp_id - property list identifier
+ * Outputs:     io - value indicates whether the file driver uses
+ *                   the functions declared in the stdio.h
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              March 9, 2001
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_fapl_stdio_c (hid_t_f *prp_id, int_f* io)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret = -1;
+     /*
+      * Call H5Pget_fapl_stdio function.
+      */
+     c_prp_id = *prp_id;
+     ret = H5Pget_fapl_stdio(c_prp_id);
+     if (ret < 0) return ret_value;
+     *io = (int_f)ret;
+     ret_value = 0;
+     return ret_value;
+}
+
+#endif /*NO_SUCH_F90_FUNCTION*/
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_fapl_sec2_c
+ * Purpose:     Call H5Pset_fapl_sec2 to set the low level file driver to
+ *              use the functions declared in the  unistd.h
+ * Inputs:      prp_id - property list identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              March 9, 2001
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_fapl_sec2_c (hid_t_f *prp_id)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret = -1;
+     /*
+      * Call H5Pset_fapl_sec2 function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pset_fapl_sec2(c_prp_id);
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+#ifdef NO_SUCH_F90_FUNCTION
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_fapl_sec2_c
+ * Purpose:     Call H5Pget_fapl_stdio to determine whther the low level file driver
+ *              uses the functions declared in the  unistd.h
+ * Inputs:      prp_id - property list identifier
+ * Outputs:     sec2 - value indicates whether the file driver uses
+ *                   the functions declared in the  unistd.h
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              March 9, 2001
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_fapl_sec2_c (hid_t_f *prp_id, int_f* sec2)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret = -1;
+     /*
+      * Call H5Pget_fapl_sec2 function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pget_fapl_sec2(c_prp_id);
+     if (ret < 0) return ret_value;
+     *sec2 = (int_f)ret;
+     ret_value = 0;
+     return ret_value;
+}
+#endif /*NO_SUCH_F90_FUNCTION*/
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_alignment_c
+ * Purpose:     Call H5Pset_alignment to set alignment properties of
+ *              a file access property list
+ * Inputs:      prp_id - property list identifier
+ *              threshold - Threshold value
+ *              alignment - Alignment value
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_alignment_c (hid_t_f *prp_id, hsize_t_f* threshold, hsize_t_f* alignment)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     hsize_t c_threshold, c_alignment;
+     c_threshold = (hsize_t)*threshold;
+     c_alignment = (hsize_t)* alignment;
+     /*
+      * Call H5Pset_alignment function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pset_alignment(c_prp_id, c_threshold, c_alignment);
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_alignment_c
+ * Purpose:     Call H5Pget_alignment to get alignment properties of
+ *              a file access property list
+ * Inputs:      prp_id - property list identifier
+ *              threshold - Threshold value
+ *              alignment - Alignment value
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_alignment_c (hid_t_f *prp_id, hsize_t_f* threshold, hsize_t_f* alignment)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     hsize_t c_threshold, c_alignment;
+     /*
+      * Call H5Pget_alignment function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pget_alignment(c_prp_id, &c_threshold, &c_alignment);
+     if (ret < 0) return ret_value;
+     *threshold = (hsize_t_f)c_threshold;
+     *alignment = (hsize_t_f)c_alignment;
+
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_fapl_core_c
+ * Purpose:     Call H5Pset_fapl_core to set the low-level file driver
+ *              to use malloc() and free()
+ * Inputs:      prp_id - property list identifier
+ *              increment - File block size in bytes
+ *              flag - Boolean flag indicating whether to write the
+ *              file contents to disk when the file is closed.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              March 9, 2001
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_fapl_core_c (hid_t_f *prp_id, size_t_f* increment, int_f *flag)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret = -1;
+     size_t c_increment;
+     hbool_t c_backing_store;
+     c_increment = (size_t)*increment;
+     c_backing_store = (hbool_t)*flag;
+
+     /*
+      * Call H5Pset_fapl_core function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pset_fapl_core(c_prp_id, c_increment, c_backing_store);
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_fapl_core_c
+ * Purpose:     Call H5Pget_fapl_core to determine whether the file access
+ *              property list is set to the core drive
+ * Inputs:      prp_id - property list identifier
+ * Outputs      increment - File block size in bytes
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              March 9, 2001
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_fapl_core_c (hid_t_f *prp_id, size_t_f* increment, int_f *flag)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret = -1;
+     size_t c_increment = 0;
+     hbool_t c_backing_store;
+     *flag = 0;
+     /*
+      * Call H5Pset_fapl_core function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pget_fapl_core(c_prp_id, &c_increment, &c_backing_store);
+     if (ret < 0) return ret_value;
+     *increment = (size_t_f)c_increment;
+     if(c_backing_store  > 0) *flag = 1;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_fapl_family_c
+ * Purpose:     Call H5Pset_fapl_family to set the file access properties list
+ *              to the family driver
+ * Inputs:      prp_id - property list identifier
+ *              memb_size -  Logical size, in bytes, of each family member.
+ *              memb_plist - Identifier of the file access property list
+ *                           for each member of the family
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              March 9, 2001
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_fapl_family_c(hid_t_f *prp_id, hsize_t_f* memb_size, hid_t_f* memb_plist )
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret = -1;
+     hsize_t c_memb_size;
+     hid_t c_memb_plist;
+     c_memb_size =(hsize_t) *memb_size;
+     c_memb_plist =(hid_t) *memb_plist;
+     /*
+      * Call H5Pset_fapl_family function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pset_fapl_family(c_prp_id, c_memb_size, c_memb_plist);
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_fapl_family_c
+ * Purpose:     Call H5Pget_fapl_family to determine whether the file access
+ *              property list is set to the family driver
+ * Inputs:      prp_id - property list identifier
+ *              memb_size -  Logical size, in bytes, of each family member.
+ *              memb_plist - Identifier of the file access property list
+ *                           for each member of the family
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              March 9, 2001
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_fapl_family_c(hid_t_f *prp_id, hsize_t_f* memb_size, hid_t_f* memb_plist)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret = -1;
+     hsize_t c_memb_size = 0;
+     hid_t c_memb_plist = -1;
+     /*
+      * Call H5Pget_fapl_family function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pget_fapl_family(c_prp_id, &c_memb_size, &c_memb_plist);
+     if (ret < 0) return ret_value;
+     *memb_size = (hsize_t_f)c_memb_size;
+     *memb_plist = (hid_t_f)c_memb_plist;
+
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_cache_c
+ * Purpose:     Call H5Pset_cache to set he number of elements in
+ *              the meta data cache and the total number of bytes in
+ *              the raw data chunk cache
+ * Inputs:      prp_id - property list identifier
+ *              mdc_nelmts - Number of elements (objects) in the
+ *                           meta data cache
+ *              rdcc_nbytes - Total size of the raw data chunk cache, in bytes
+ *              rdcc_w0 - Preemption policy
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications: Changed the type of the rdcc_w0 parameter to be real_f EP 7/7/00
+ *                instead of double
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_cache_c(hid_t_f *prp_id, int_f* mdc_nelmts, size_t_f* rdcc_nelmts,  size_t_f* rdcc_nbytes , real_f* rdcc_w0 )
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     int c_mdc_nelmts;
+     size_t c_rdcc_nelmts;
+     size_t c_rdcc_nbytes;
+     double c_rdcc_w0;
+     c_rdcc_nbytes =(size_t) *rdcc_nbytes;
+     c_rdcc_w0 = (double)*rdcc_w0;
+
+     /*
+      * Call H5Pset_cache function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     c_mdc_nelmts = (int)*mdc_nelmts;
+     c_rdcc_nelmts = (size_t)*rdcc_nelmts;
+     ret = H5Pset_cache(c_prp_id, c_mdc_nelmts, c_rdcc_nelmts, c_rdcc_nbytes, c_rdcc_w0  );
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_cache_c
+ * Purpose:     Call H5Pget_cache to get he number of elements in
+ *              the meta data cache and the total number of bytes in
+ *              the raw data chunk cache
+ * Inputs:      prp_id - property list identifier
+ * Outputs:     mdc_nelmts - Number of elements (objects) in the
+ *                           meta data cache
+ *              rdcc_nelmts - Number of elements in the raw data chunk
+ *              rdcc_nbytes - Total size of the raw data chunk cache, in bytes
+ *              rdcc_w0 - Preemption policy
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications: Changed type of the rdcc_w0 parameter to be real_f instead of double
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_cache_c(hid_t_f *prp_id, int_f* mdc_nelmts, size_t_f* rdcc_nelmts, size_t_f* rdcc_nbytes , real_f* rdcc_w0)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     int c_mdc_nelmts;
+     size_t c_rdcc_nelmts;
+     size_t c_rdcc_nbytes;
+     double c_rdcc_w0;
+     /*
+      * Call H5Pget_cache function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pget_cache(c_prp_id, &c_mdc_nelmts, &c_rdcc_nelmts, &c_rdcc_nbytes, &c_rdcc_w0);
+     if (ret < 0) return ret_value;
+     *mdc_nelmts = (int_f)c_mdc_nelmts;
+     *rdcc_nelmts = (size_t_f)c_rdcc_nelmts;
+     *rdcc_nbytes = (size_t_f)c_rdcc_nbytes;
+     *rdcc_w0 = (real_f)c_rdcc_w0;
+
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_fapl_split_c
+ * Purpose:     Call H5Pset_fapl_split to set he low-level driver to split meta data
+ *              from raw data
+ * Inputs:      prp_id - property list identifier
+ *              meta_len - Length of meta_ext
+ *              meta_ext - Name of the extension for the metafile filename.
+ *              meta_plist - Identifier of the meta file access property list
+ *              raw_len - Length of raw _ext
+ *              raw_ext - Name of the extension for the raw file filename.
+ *              raw_plist - Identifier of the raw  file access property list
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              March 9, 2001
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_fapl_split_c(hid_t_f *prp_id, int_f* meta_len, _fcd meta_ext, hid_t_f* meta_plist, int_f* raw_len, _fcd raw_ext, hid_t_f * raw_plist)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     hid_t c_meta_plist;
+     hid_t c_raw_plist;
+     herr_t ret = -1;
+     char* c_meta_ext;
+     char* c_raw_ext;
+
+     c_meta_ext = (char *)HD5f2cstring(meta_ext, (int)*meta_len);
+     if (c_meta_ext == NULL) return ret_value;
+     c_raw_ext = (char *)HD5f2cstring(raw_ext, (int)*raw_len);
+     if (c_raw_ext == NULL) { HDfree(c_meta_ext);
+                              return ret_value;
+                            }
+
+     /*
+      * Call H5Pset_fapl_split function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     c_meta_plist = (hid_t)*meta_plist;
+     c_raw_plist = (hid_t)*raw_plist;
+     ret = H5Pset_fapl_split(c_prp_id, c_meta_ext, c_meta_plist, c_raw_ext, c_raw_plist );
+
+     if (ret < 0) goto DONE;
+     ret_value = 0;
+
+DONE:
+     HDfree(c_meta_ext);
+     HDfree(c_raw_ext);
+     return ret_value;
+}
+
+
+#ifdef NO_SUCH_F90_FUNCTION
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_fapl_split_c
+ * Purpose:     Call H5Pget_fapl_split to determine whether the file access
+ *              property list is set to the split driver
+ * Inputs:      prp_id - property list identifier
+ *              meta_ext_size - Number of characters of the meta file extension
+ *                              to be copied to the meta_ext buffer
+ *              raw_ext_size - Number of characters of the raw file extension
+ *                              to be copied to the raw_ext buffer
+ *Outputs:      meta_ext - Name of the extension for the metafile filename.
+ *              meta_plist - Identifier of the meta file access property list
+ *              raw_ext - Name of the extension for the raw file filename.
+ *              raw_plist - Identifier of the raw  file access property list
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              March 9 , 2001
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_fapl_split_c(hid_t_f *prp_id, size_t_f* meta_ext_size , _fcd meta_ext, hid_t_f* meta_plist, size_t_f* raw_ext_size, _fcd raw_ext, hid_t_f * raw_plist)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret = -1;
+     size_t c_meta_ext_size, c_raw_ext_size;
+     hid_t c_meta_plist = -1;
+     hid_t c_raw_plist = -1;
+
+     char* c_meta_ext = NULL;
+     char* c_raw_ext  = NULL;
+
+     c_meta_ext_size = (size_t) *meta_ext_size;
+     c_raw_ext_size = (size_t) *raw_ext_size;
+     c_meta_ext = (char*)malloc(sizeof(char)*c_meta_ext_size);
+     c_raw_ext = (char*)malloc(sizeof(char)*c_raw_ext_size);
+     if(c_meta_ext == NULL || c_raw_ext == NULL) return ret_value;
+
+     /*
+      * Call H5Pget_fapl_split function.
+      */
+     c_prp_id = *prp_id;
+     ret = H5Pget_fapl_split(c_prp_id, c_meta_ext_size, c_meta_ext,&c_meta_plist, c_raw_ext_size, c_raw_ext, &c_raw_plist );
+
+     if (ret < 0) return ret_value;
+     *meta_plist = c_meta_plist;
+     *raw_plist = c_raw_plist;
+     HD5packFstring(c_meta_ext, _fcdtocp(meta_ext), strlen(c_meta_ext));
+     HD5packFstring(c_raw_ext, _fcdtocp(raw_ext), strlen(c_raw_ext));
+
+     ret_value = 0;
+     return ret_value;
+}
+#endif /*NO_SUCH_F90_FUNCTION*/
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_gc_references_c
+ * Purpose:     Call H5Pset_gc_references to set garbage
+ *              collecting references flag
+ * Inputs:      prp_id - property list identifier
+ *              gc_reference - flag for garbage collecting references
+ *                             for the file
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_gc_references_c (hid_t_f *prp_id, int_f* gc_references)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     unsigned c_gc_references;
+     c_gc_references = (unsigned)*gc_references;
+
+     /*
+      * Call H5Pset_gc_references function.
+      */
+     c_prp_id = *prp_id;
+     ret = H5Pset_gc_references(c_prp_id, c_gc_references);
+
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_gc_references_c
+ * Purpose:     Call H5Pget_gc_references to set garbage
+ *              collecting references flag
+ * Inputs:      prp_id - property list identifier
+ * Outputs      gc_reference - flag for garbage collecting references
+ *                             for the file
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_gc_references_c (hid_t_f *prp_id, int_f* gc_references)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     unsigned c_gc_references;
+     herr_t ret;
+     /*
+      * Call H5Pget_gc_references function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pget_gc_references(c_prp_id, &c_gc_references);
+     if (ret < 0) return ret_value;
+     *gc_references = (int_f)c_gc_references;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_layout_c
+ * Purpose:     Call H5Pset_layout to the type of storage used
+ *              store the raw data for a dataset
+ * Inputs:      prp_id - property list identifier
+ *              layout - Type of storage layout for raw data.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_layout_c (hid_t_f *prp_id, int_f* layout)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     H5D_layout_t c_layout;
+     c_layout = (H5D_layout_t)*layout;
+     /*
+      * Call H5Pset_layout function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pset_layout(c_prp_id, c_layout);
+
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_layout_c
+ * Purpose:     Call H5Pget_layout to the type of storage used
+ *              store the raw data for a dataset
+ * Inputs:      prp_id - property list identifier
+ * Outputs:     layout - Type of storage layout for raw data.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_layout_c (hid_t_f *prp_id, int_f* layout)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     H5D_layout_t c_layout;
+     /*
+      * Call H5Pget_layout function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     c_layout = H5Pget_layout(c_prp_id);
+     if (c_layout < 0) return ret_value;
+     *layout = (int_f)c_layout;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_filter_c
+ * Purpose:     Call H5Pset_filter to add a filter to the filter pipeline.
+ * Inputs:      prp_id - property list identifier
+ *              filter - Filter to be added to the pipeline.
+ *              flags - Bit vector specifying certain general
+ *                      properties of the filter.
+ *              cd_nelmts - Number of elements in cd_values.
+ *              cd_values - Auxiliary data for the filter.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, February 23, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_filter_c (hid_t_f *prp_id, int_f* filter, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values )
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     size_t c_cd_nelmts;
+     unsigned int c_flags;
+     H5Z_filter_t c_filter;
+     unsigned int * c_cd_values;
+     unsigned i;
+
+     c_filter = (H5Z_filter_t)*filter;
+     c_flags = (unsigned)*flags;
+     c_cd_nelmts = (size_t)*cd_nelmts;
+     c_cd_values = (unsigned int*)malloc(sizeof(unsigned int)*((int)c_cd_nelmts));
+     if (!c_cd_values) return ret_value;
+     for (i = 0; i < c_cd_nelmts; i++)
+          c_cd_values[i] = (unsigned int)cd_values[i];
+
+     /*
+      * Call H5Pset_filter function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pset_filter(c_prp_id, c_filter, c_flags, c_cd_nelmts,c_cd_values );
+
+     if (ret < 0) goto DONE;
+     ret_value = 0;
+
+DONE:
+     HDfree(c_cd_values);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_nfilters_c
+ * Purpose:     Call H5Pget_nfilters to get the number of filters
+ *              in the pipeline
+ * Inputs:      prp_id - property list identifier
+ * Outputs:     nfilters - number of filters defined in the filter pipline
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_nfilters_c (hid_t_f *prp_id, int_f* nfilters)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     int c_nfilters;
+     /*
+      * Call H5Pget_nfilters function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     c_nfilters = H5Pget_nfilters(c_prp_id);
+     if (c_nfilters < 0) return ret_value;
+
+     *nfilters = (int_f)c_nfilters;
+     ret_value = 0;
+
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_filter_c
+ * Purpose:     Call H5Pget_filter to get information about a filter
+ *              in a pipeline
+ * Inputs:      prp_id - property list identifier
+ *              filter_number - Sequence number within the filter
+ *                              pipeline of the filter for which
+ *                              information is sought.
+ *              namelen - Anticipated number of characters in name.
+ *Outputs:      flags - Bit vector specifying certain general
+ *                      properties of the filter.
+ *              cd_nelmts - Number of elements in cd_value
+ *              cd_values - Auxiliary data for the filter.
+ *              name - Name of the filter
+ *              filter_id - filter identification number
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_filter_c(hid_t_f *prp_id, int_f* filter_number, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values, size_t_f *namelen, _fcd name, int_f* filter_id)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     int c_filter_number;
+     unsigned int  c_flags;
+     size_t c_cd_nelmts, c_namelen;
+     size_t c_cd_nelmts_in;
+     H5Z_filter_t c_filter;
+     unsigned int * c_cd_values;
+     char* c_name;
+     unsigned i;
+
+     c_cd_nelmts_in = (size_t)*cd_nelmts;
+     c_namelen = (size_t)*namelen;
+     c_name = (char*)malloc(sizeof(char)*c_namelen);
+     if (!c_name) return ret_value;
+
+     c_cd_values = (unsigned int*)malloc(sizeof(unsigned int)*((int)c_cd_nelmts_in));
+     if (!c_cd_values) {HDfree(c_name);
+                        return ret_value;
+                       }
+
+
+     /*
+      * Call H5Pget_filter function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     c_filter_number = (int)*filter_number;
+     c_filter = H5Pget_filter(c_prp_id, c_filter_number, &c_flags, &c_cd_nelmts, c_cd_values, c_namelen, c_name);
+
+     if (c_filter < 0) goto DONE;
+
+     *filter_id = (int_f)c_filter;
+     *cd_nelmts = (size_t_f)c_cd_nelmts;
+     *flags = (int_f)c_flags;
+     HD5packFstring(c_name, _fcdtocp(name), (int)strlen(c_name));
+
+     for (i = 0; i < c_cd_nelmts_in; i++)
+          cd_values[i] = (int_f)c_cd_values[i];
+
+     ret_value = 0;
+
+DONE:
+     HDfree(c_name);
+     HDfree(c_cd_values);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_external_c
+ * Purpose:     Call H5Pset_external to add an external file to the
+ *              list of external files.
+ * Inputs:      prp_id - property list identifier
+ *              name - Name of an external file
+ *              namelen - length of name
+ *              offset - Offset, in bytes, from the beginning of the file
+ *                       to the location in the file where the data starts.
+ *              bytes - Number of bytes reserved in the file for the data.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, February 23, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_external_c (hid_t_f *prp_id, _fcd name, int_f* namelen, int_f* offset, hsize_t_f*bytes)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     hsize_t c_bytes;
+     char* c_name;
+     int c_namelen;
+     off_t c_offset;
+     c_bytes = (hsize_t) *bytes;
+     c_offset = (off_t) *offset;
+
+
+     c_namelen = (int)*namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Pset_external function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pset_external(c_prp_id, c_name, c_offset, c_bytes);
+
+     if (ret < 0) goto DONE;
+     ret_value = 0;
+
+DONE:
+     HDfree(c_name);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_external_count_c
+ * Purpose:     Call H5Pget_external_count to get the number of external
+ *              files for the specified dataset.
+ * Inputs:      prp_id - property list identifier
+ * Outputs:     count - number of external files
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_external_count_c (hid_t_f *prp_id, int_f* count)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     int c_count;
+     /*
+      * Call H5Pget_external_count function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     c_count = H5Pget_external_count(c_prp_id);
+     if (c_count < 0) return ret_value;
+     *count = (int_f)c_count;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_external_c
+ * Purpose:     Call H5Pget_external to get nformation about an external file.
+ * Inputs:      prp_id - property list identifier
+ *              name_size - length of name
+ *              idx - External file index.
+ *Outputs:      name - Name of an external file
+ *              offset - Offset, in bytes, from the beginning of the file
+ *                       to the location in the file where the data starts.
+ *              bytes - Number of bytes reserved in the file for the data.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, February 23, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_external_c(hid_t_f *prp_id, int_f *idx, size_t_f* name_size, _fcd name, int_f* offset, hsize_t_f*bytes)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     unsigned c_idx;
+     herr_t status;
+     size_t c_namelen;
+     char* c_name = NULL;
+     off_t c_offset;
+     hsize_t size;
+
+     c_namelen = (size_t)*name_size;
+     /*
+      * Allocate memory to store the name of the external file.
+      */
+     if(c_namelen) c_name = (char*) HDmalloc(c_namelen + 1);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Pget_external function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     c_idx = (unsigned)*idx;
+     status = H5Pget_external(c_prp_id, c_idx, c_namelen, c_name, &c_offset, &size );
+
+     if (status < 0) goto DONE;
+
+     *offset = (int_f)c_offset;
+     *bytes = (hsize_t_f)size;
+     HD5packFstring(c_name, _fcdtocp(name), (int)strlen(c_name));
+     ret_value = 0;
+
+DONE:
+     HDfree(c_name);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_hyper_cache_c
+ * Purpose:     Call H5Pset__hyper_cache to indicate whether to
+ *              cache hyperslab blocks during I/O.
+ * Inputs:      prp_id - property list identifier
+ *              cache -
+ *              limit - Maximum size of the hyperslab block to cache.
+ *                      0 (zero) indicates no limit.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_hyper_cache_c(hid_t_f *prp_id, int_f * cache, int_f * limit)
+{
+     int ret_value = -1;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+     hid_t c_prp_id;
+     herr_t ret;
+     unsigned c_cache, c_limit;
+
+     c_cache = (unsigned) *cache;
+     c_limit = (unsigned) *limit;
+
+     /*
+      * Call H5Pset_hyper_cache function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pset_hyper_cache(c_prp_id, c_cache, c_limit);
+     if (ret < 0) return ret_value;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_hyper_cache_c
+ * Purpose:     Call H5Pget_hyper_cache to get information regarding
+ *              the caching of hyperslab blocks
+ * Inputs:      prp_id - property list identifier
+ *              cache -
+ *              limit - Maximum size of the hyperslab block to cache.
+ *                      0 (zero) indicates no limit.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_hyper_cache_c(hid_t_f *prp_id, int_f * cache, int_f * limit)
+{
+     int ret_value = -1;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+     hid_t c_prp_id;
+     herr_t ret;
+     unsigned c_cache, c_limit;
+     /*
+      * Call H5Pget__hyper_cache function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pget_hyper_cache(c_prp_id, &c_cache, &c_limit);
+     if (ret < 0) return ret_value;
+     *cache = (int_f)c_cache;
+     *limit = (int_f)c_limit;
+     ret_value = 0;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_btree_ratios_c
+ * Purpose:     Call H5Pset_btree_ratios to set B-tree split ratios for B-tree split ratios for a dataset transfer property list. a
+ *              dataset transfer property list.
+ * Inputs:      prp_id - property list identifier
+ *              left - The B-tree split ratio for left-most nodes.
+ *              middle - The B-tree split ratio for all other nodes
+ *              right - The B-tree split ratio for right-most nodes
+ *                      and lone nodes.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications: Changed the type of the last three parameters from double to real_f
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_btree_ratios_c(hid_t_f *prp_id, real_f* left, real_f* middle, real_f* right)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     double c_left;
+     double c_middle;
+     double c_right;
+     c_left = (double)*left;
+     c_middle = (double)*middle;
+     c_right = (double)*right;
+
+     /*
+      * Call H5Pset_btree_ratios function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pset_btree_ratios(c_prp_id, c_left, c_middle, c_right);
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_btree_ratios_c
+ * Purpose:     Call H5Pget_btree_ratios to Gets B-tree split ratios
+ *              for a dataset transfer property list.
+ * Inputs:      prp_id - property list identifier
+ *              left - The B-tree split ratio for left-most nodes.
+ *              middle - The B-tree split ratio for all other nodes
+ *              right - The B-tree split ratio for right-most nodes
+ *                      and lone nodes.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, February 25, 2000
+ * Modifications: Changed the type of the last three parameters from double to real_f
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_btree_ratios_c(hid_t_f *prp_id, real_f* left, real_f* middle, real_f* right)
+{
+     int ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     double c_left, c_right, c_middle;
+
+     /*
+      * Call H5Pget_btree_ratios function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pget_btree_ratios(c_prp_id, &c_left, &c_middle, &c_right);
+     *left = (real_f)c_left;
+     *middle = (real_f)c_middle;
+     *right = (real_f)c_right;
+     if (ret < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_fclose_degree_c
+ * Purpose:     Call H5Pget_fclose_degree to determine file close behavior
+ * Inputs:      fapl_id - file access identifier
+ * Outputs:
+ *              degree  - possible values are:
+ *              		H5F_CLOSE_DEFAULT
+ *              		H5F_CLOSE_WEAK
+ *              		H5F_CLOSE_SEMI
+ *              		H5F_CLOSE_STRONG
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, September 26, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pget_fclose_degree_c ( hid_t_f *fapl_id , int_f *degree)
+{
+  int ret_value = -1;
+  hid_t c_fapl_id;
+  H5F_close_degree_t c_degree;
+
+  c_fapl_id = (hid_t)*fapl_id;
+  if( H5Pget_fclose_degree(c_fapl_id, &c_degree) < 0) return ret_value;
+
+  *degree = (int_f)c_degree;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_fclose_degree_c
+ * Purpose:     Call H5Pset_fclose_degree to set file close behavior
+ * Inputs:      fapl_id - file access identifier
+ *              degree  - possible values are:
+ *              		H5F_CLOSE_DEFAULT
+ *              		H5F_CLOSE_WEAK
+ *              		H5F_CLOSE_SEMI
+ *              		H5F_CLOSE_STRONG
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, September 26, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_fclose_degree_c ( hid_t_f *fapl_id , int_f *degree)
+{
+  int ret_value = -1;
+  hid_t c_fapl_id;
+  H5F_close_degree_t c_degree;
+
+  c_fapl_id = (hid_t)*fapl_id;
+  c_degree = (H5F_close_degree_t)*degree;
+  if( H5Pset_fclose_degree(c_fapl_id, c_degree) < 0) return ret_value;
+
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_buffer_c
+ * Purpose:     Call H5Pset_buffer to set size of conversion buffer
+ * Inputs:      prp_id - t`dataset trasfer property list identifier
+ *              size   - size of the buffer
+ * Outputs:     NONE
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, October 2, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_buffer_c ( hid_t_f *prp_id , hsize_t_f *size)
+{
+  int ret_value = 0;
+  hid_t c_prp_id;
+  size_t c_size;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_size = (size_t)*size;
+  if ( H5Pset_buffer(c_prp_id, c_size, NULL, NULL) < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_buffer_c
+ * Purpose:     Call H5Pget_buffer to get size of conversion buffer
+ * Inputs:      prp_id - t`dataset trasfer property list identifier
+ * Outputs:     size - size of conversion buffer
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, October 2, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pget_buffer_c ( hid_t_f *prp_id , hsize_t_f *size)
+{
+  int ret_value = -1;
+  hid_t c_prp_id;
+  hsize_t c_size;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_size = H5Pget_buffer(c_prp_id, NULL, NULL);
+  if ( c_size == 0  ) return ret_value;
+  *size = (hsize_t_f)c_size;
+  ret_value = 0;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pfill_value_defined_c
+ * Purpose:     Call H5Pfill_value_defined to check if fill value is defined
+ * Inputs:      prp_id - dataset creation property list identifier
+ * Outputs:     flag - fill value status flag
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Friday, October 4, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pfill_value_defined_c ( hid_t_f *prp_id , int_f *flag)
+{
+  int ret_value = -1;
+  hid_t c_prp_id;
+  H5D_fill_value_t c_flag;
+
+  c_prp_id = (hid_t)*prp_id;
+  if ( H5Pfill_value_defined(c_prp_id, &c_flag) < 0  ) return ret_value;
+  *flag = (int_f)c_flag;
+  ret_value = 0;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_alloc_time_c
+ * Purpose:     Call H5Pget_alloc_time to get space allocation
+ *              time for dataset during creation
+ * Inputs:      prp_id - dataset creation property list identifier
+ * Outputs:     flag - allocation time flag
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Friday, October 4, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pget_alloc_time_c ( hid_t_f *prp_id , int_f *flag)
+{
+  int ret_value = -1;
+  hid_t c_prp_id;
+  H5D_alloc_time_t c_flag;
+
+  c_prp_id = (hid_t)*prp_id;
+  if ( H5Pget_alloc_time(c_prp_id, &c_flag) < 0  ) return ret_value;
+  *flag = (int_f)c_flag;
+  ret_value = 0;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_alloc_time_c
+ * Purpose:     Call H5Pset_alloc_time to get space allocation
+ *              time for dataset during creation
+ * Inputs:      prp_id - dataset creation property list identifier
+ *              flag - allocation time flag
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Friday, October 4, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_alloc_time_c ( hid_t_f *prp_id , int_f *flag)
+{
+  int ret_value = -1;
+  hid_t c_prp_id;
+  H5D_alloc_time_t c_flag;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_flag = (H5D_alloc_time_t)*flag;
+  if ( H5Pset_alloc_time(c_prp_id, c_flag) < 0  ) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_fill_time_c
+ * Purpose:     Call H5Pget_fill_time to get fill value writing
+ *              time for dataset during creation
+ * Inputs:      prp_id - dataset creation property list identifier
+ * Outputs:     flag - fill value writing  time flag
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Friday, October 4, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pget_fill_time_c ( hid_t_f *prp_id , int_f *flag)
+{
+  int ret_value = -1;
+  hid_t c_prp_id;
+  H5D_fill_time_t c_flag;
+
+  c_prp_id = (hid_t)*prp_id;
+  if ( H5Pget_fill_time(c_prp_id, &c_flag) < 0  ) return ret_value;
+  *flag = (int_f)c_flag;
+  ret_value = 0;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_fill_time_c
+ * Purpose:     Call H5Pset_fill_time to set fill value writing
+ *              time for dataset during creation
+ * Inputs:      prp_id - dataset creation property list identifier
+ *              flag - fill value writing  time flag
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Friday, October 4, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_fill_time_c ( hid_t_f *prp_id , int_f *flag)
+{
+  int ret_value = -1;
+  hid_t c_prp_id;
+  H5D_fill_time_t c_flag;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_flag = (H5D_fill_time_t)*flag;
+  if ( H5Pset_fill_time(c_prp_id, c_flag) < 0  ) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_meta_block_size_c
+ * Purpose:     Call H5Pset_meta_block_size to set size of  metadata block
+ * Inputs:      prp_id - file access  property list identifier
+ *              size   - size of the metadata block
+ * Outputs:     NONE
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, October 7, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_meta_block_size_c ( hid_t_f *prp_id , hsize_t_f *size)
+{
+  int ret_value = 0;
+  hid_t c_prp_id;
+  hsize_t c_size;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_size = (hsize_t)*size;
+  if ( H5Pset_meta_block_size(c_prp_id, c_size) < 0  ) ret_value = -1;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_meta_block_size_c
+ * Purpose:     Call H5Pget_meta_block_size to get size of  metadata block
+ * Inputs:      prp_id - file access  property list identifier
+ * Outputs:
+ *              size   - size of the metadata block
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, October 7, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pget_meta_block_size_c ( hid_t_f *prp_id , hsize_t_f *size)
+{
+  int ret_value = 0;
+  hid_t c_prp_id;
+  hsize_t c_size;
+
+  c_prp_id = (hid_t)*prp_id;
+  if ( H5Pget_meta_block_size(c_prp_id, &c_size) < 0  ) ret_value = -1;
+  *size = (hsize_t_f)c_size;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_sieve_buf_size_c
+ * Purpose:     Call H5Pset_sieve_buf_size to set size of datasieve buffer
+ * Inputs:      prp_id - file access  property list identifier
+ *              size   - size of the buffer
+ * Outputs:     NONE
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, October 7, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_sieve_buf_size_c ( hid_t_f *prp_id , size_t_f *size)
+{
+  int ret_value = 0;
+  hid_t c_prp_id;
+  size_t c_size;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_size = (size_t)*size;
+  if ( H5Pset_sieve_buf_size(c_prp_id, c_size) < 0  ) ret_value = -1;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_sieve_buf_size_c
+ * Purpose:     Call H5Pget_sieve_buf_size to get size of datasieve buffer
+ * Inputs:      prp_id - file access  property list identifier
+ * Outputs:
+ *              size   - size of the buffer
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, October 7, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pget_sieve_buf_size_c ( hid_t_f *prp_id , size_t_f *size)
+{
+  int ret_value = 0;
+  hid_t c_prp_id;
+  size_t c_size;
+
+  c_prp_id = (hid_t)*prp_id;
+  if ( H5Pget_sieve_buf_size(c_prp_id, &c_size) < 0  ) ret_value = -1;
+  *size = (size_t_f)c_size;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_small_data_block_size_c
+ * Purpose:     Call H5Pset_small_data_block_size to set size of raw small data block
+ * Inputs:      prp_id - file access  property list identifier
+ *              size   - size of the block
+ * Outputs:     NONE
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, October 7, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_small_data_block_size_c ( hid_t_f *prp_id , hsize_t_f *size)
+{
+  int ret_value = 0;
+  hid_t c_prp_id;
+  hsize_t c_size;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_size = (hsize_t)*size;
+  if ( H5Pset_small_data_block_size(c_prp_id, c_size) < 0  ) ret_value = -1;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_small_data_block_size_c
+ * Purpose:     Call H5Pget_small_data_block_size to get size of raw small data block
+ * Inputs:      prp_id - file access  property list identifier
+ * Outputs:
+ *              size   - size of the block
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, October 7, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pget_small_data_block_size_c ( hid_t_f *prp_id , hsize_t_f *size)
+{
+  int ret_value = 0;
+  hid_t c_prp_id;
+  hsize_t c_size;
+
+  c_prp_id = (hid_t)*prp_id;
+  if ( H5Pget_small_data_block_size(c_prp_id, &c_size) < 0  ) ret_value = -1;
+  *size = (hsize_t_f)c_size;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_hyper_vector_size_c
+ * Purpose:     Call H5Pset_hyper_vector_size to set size of the hyper vector
+ * Inputs:      prp_id - dataset transfer property list identifier
+ *              size   - size of the vector
+ * Outputs:     NONE
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, October 7, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_hyper_vector_size_c ( hid_t_f *prp_id , size_t_f *size)
+{
+  int ret_value = 0;
+  hid_t c_prp_id;
+  size_t c_size;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_size = (size_t)*size;
+  if ( H5Pset_hyper_vector_size(c_prp_id, c_size) < 0  ) ret_value = -1;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_hyper_vector_size_c
+ * Purpose:     Call H5Pget_hyper_vector_size to get size of the hyper vector
+ * Inputs:      prp_id - dataset transfer property list identifier
+ * Outputs:
+ *              size   - size of the vector
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, October 7, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pget_hyper_vector_size_c ( hid_t_f *prp_id , size_t_f *size)
+{
+  int ret_value = 0;
+  hid_t c_prp_id;
+  size_t c_size;
+
+  c_prp_id = (hid_t)*prp_id;
+  if ( H5Pget_hyper_vector_size(c_prp_id, &c_size) < 0  ) ret_value = -1;
+  *size = (size_t_f)c_size;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pcreate_class_c
+ * Purpose:     Call H5Pcreate_class ito create a new property class
+ * Inputs:      parent - property list class identifier
+ *              name   - name of the new class
+ *              name_len - lenght of the "name" buffer
+ * Outputs:     class - new class identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pcreate_class_c(hid_t_f *parent, _fcd name, int_f *name_len, hid_t_f *class)
+{
+     int ret_value = -1;
+     hid_t c_parent;
+     hid_t c_class;
+     char* c_name;
+
+     c_name = (char *)HD5f2cstring(name, (int)*name_len);
+     if (c_name == NULL) goto DONE;
+     c_parent = (hid_t)*parent;
+
+     /*
+      * Call H5Pcreate_class function.
+      */
+     c_class = H5Pcreate_class(c_parent, c_name, NULL, NULL,NULL,NULL,NULL,NULL);
+     if (c_class < 0) goto DONE;
+     *class = (hid_t_f)c_class;
+     ret_value = 0;
+
+DONE:
+     if(c_name != NULL) HDfree(c_name);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pregisterc_c
+ * Purpose:     Call h5pregister_c to registers a permanent property
+ * Inputs:      class - property list class identifier
+ *              name   - name of the new property
+ *              name_len - length of the "name" buffer
+ *              size - property size
+ *              value - property value of character type
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pregisterc_c(hid_t_f *class, _fcd name, int_f *name_len, size_t_f *size, _fcd value, int_f *value_len)
+{
+     int ret_value = -1;
+
+     /*
+      * Call h5pregister_c function
+      */
+      ret_value = nh5pregister_c(class, name, name_len, size, _fcdtocp(value));
+      return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pregister_c
+ * Purpose:     Call H5Pregister to registers a permanent property
+ * Inputs:      class - property list class identifier
+ *              name   - name of the new property
+ *              name_len - length of the "name" buffer
+ *              size - property size
+ *              value - property value
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pregister_c(hid_t_f *class, _fcd name, int_f *name_len, size_t_f *size, void *value)
+{
+     int_f ret_value = -1;
+     hid_t c_class;
+     char* c_name;
+     size_t c_size;
+
+     c_name = (char *)HD5f2cstring(name, (int)*name_len);
+     if (c_name == NULL) goto DONE;
+     c_size = (size_t)*size;
+     c_class = (hid_t)*class;
+
+     /*
+      * Call H5Pregister function.
+      */
+     if( H5Pregister(c_class, c_name, c_size, value, NULL,NULL,NULL,NULL,NULL,NULL) <0) goto DONE;
+     ret_value = 0;
+
+DONE:
+     if(c_name != NULL) HDfree(c_name);
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pinsertc_c
+ * Purpose:     Call h5pinsert_c to register a temporary property
+ * Inputs:      plist - property list identifier
+ *              name   - name of the new property
+ *              name_len - length of the "name" buffer
+ *              size - property size
+ *              value - property value of character type
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pinsertc_c(hid_t_f *plist, _fcd name, int_f *name_len, size_t_f *size, _fcd value, int_f *value_len)
+{
+     int_f ret_value = -1;
+
+     /*
+      * Call h5pinsert_c function
+      */
+      ret_value = nh5pinsert_c(plist, name, name_len, size, _fcdtocp(value));
+      return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pinsert_c
+ * Purpose:     Call H5Pinsert to iinsert a temporary property
+ * Inputs:      plist - property list class identifier
+ *              name   - name of the new property
+ *              name_len - length of the "name" buffer
+ *              size - property size
+ *              value - property value
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pinsert_c(hid_t_f *plist, _fcd name, int_f *name_len, size_t_f *size, void *value)
+{
+     int_f ret_value = -1;
+     hid_t c_plist;
+     char* c_name;
+     size_t c_size;
+
+     c_name = (char *)HD5f2cstring(name, (int)*name_len);
+     if (c_name == NULL) goto DONE;
+     c_size = (size_t)*size;
+     c_plist = (hid_t)*plist;
+
+     /*
+      * Call H5Pinsert function.
+      */
+     if( H5Pinsert(c_plist, c_name, c_size, value, NULL,NULL,NULL,NULL,NULL) <0) goto DONE;
+     ret_value = 0;
+
+DONE:
+     if(c_name != NULL) HDfree(c_name);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pexist_c
+ * Purpose:     Call H5Pexist to querie whether a property name exists
+ *              in a property list or class
+ * Inputs:      plist - property list or property class identifier
+ *              name   - name of the new property
+ *              name_len - length of the "name" buffer
+ * Returns:     nonnegative on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pexist_c(hid_t_f *class, _fcd name, int_f *name_len)
+{
+     int_f ret_value = -1;
+     hid_t c_class;
+     char* c_name;
+     htri_t status;
+
+     c_name = (char *)HD5f2cstring(name, (int)*name_len);
+     if (c_name == NULL) goto DONE;
+
+     c_class = (hid_t)*class;
+     /*
+      * Call H5Pexist function.
+      */
+     status = H5Pexist(c_class, c_name);
+     ret_value = status;
+
+DONE:
+     if(c_name != NULL) HDfree(c_name);
+     return  ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pisa_class_c
+ * Purpose:     Call H5Pisa_class to querie whether a property is a
+ *              member of a class
+ * Inputs:      plist - property list identifier
+ *              class - property class identifier
+ * Returns:     nonnegative on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pisa_class_c(hid_t_f *plist, hid_t_f *class)
+{
+     int_f ret_value = -1;
+     hid_t c_class;
+     hid_t c_plist;
+     htri_t status;
+
+     c_class = (hid_t)*class;
+     c_plist = (hid_t)*plist;
+
+     /*
+      * Call H5Pisa_class function.
+      */
+     status = H5Pisa_class(c_plist, c_class);
+     ret_value = status;
+     return  ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_size_c
+ * Purpose:     Call H5Pget_size to querie the size of the property
+ * Inputs:      plist - property list to query
+ *              name   - name of the property
+ *              name_len - length of the "name" buffer
+ * Outputs:     size - size of the property in bytes
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_size_c(hid_t_f *plist, _fcd name, int_f *name_len, size_t_f *size)
+{
+     int_f ret_value = -1;
+     hid_t c_plist;
+     char* c_name;
+     size_t c_size;
+
+     c_name = (char *)HD5f2cstring(name, (int)*name_len);
+     if (c_name == NULL) goto DONE;
+
+     c_plist = (hid_t)*plist;
+     /*
+      * Call H5Pget_size function.
+      */
+     if( H5Pget_size(c_plist, c_name, &c_size) < 0) goto DONE;
+     *size = (size_t_f)c_size;
+      ret_value = 0;
+
+DONE:
+     if(c_name != NULL) HDfree(c_name);
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_nprops_c
+ * Purpose:     Call H5Pget_nporps to get number of the properties in the list
+ * Inputs:      plist - property list to query
+ * Outputs:     nprops - number of properties in the list
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_nprops_c(hid_t_f *plist, size_t_f *nprops)
+{
+     int_f ret_value = -1;
+     hid_t c_plist;
+     size_t c_nprops;
+
+     c_plist = (hid_t)*plist;
+
+     /*
+      * Call H5Pget_nprops function.
+      */
+     if( H5Pget_nprops(c_plist, &c_nprops) < 0) return ret_value;
+
+     *nprops = (size_t_f)c_nprops;
+     ret_value = 0;
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_class_parent_c
+ * Purpose:     Call H5Pget_class_parent to get the parent class of
+ *              a genereic property class
+ * Inputs:      prp_id - property list to query
+ * Outputs:     parent_id - parent classs identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_class_parent_c(hid_t_f *prp_id, hid_t_f *parent_id)
+{
+     int_f ret_value = -1;
+     hid_t c_prp_id;
+     hid_t c_parent_id;
+
+     c_prp_id = (hid_t)*prp_id;
+
+     /*
+      * Call H5Pget_class_parent function.
+      */
+     c_parent_id = H5Pget_class_parent(c_prp_id);
+     if( c_parent_id < 0) return ret_value;
+
+     *parent_id =(hid_t_f)c_parent_id;
+     ret_value = 0;
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pcopy_prop_c
+ * Purpose:     Call H5Pcopy_prop to copy a property from one list or
+ *              class to another
+ * Inputs:      dst_id - identifier of destination property list
+ *              src_id - identifier of source property list
+ *              name   - name of the property
+ *              name_len - length of the "name" buffer
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pcopy_prop_c(hid_t_f *dst_id, hid_t_f *src_id, _fcd name, int_f *name_len)
+{
+     int_f ret_value = -1;
+     hid_t c_dst_id, c_src_id;
+     char* c_name;
+
+     c_name = (char *)HD5f2cstring(name, (int)*name_len);
+     if (c_name == NULL) goto DONE;
+
+     c_dst_id = (hid_t)*dst_id;
+     c_src_id = (hid_t)*src_id;
+     /*
+      * Call H5Pcopy_prop function.
+      */
+     if( H5Pcopy_prop(c_dst_id, c_src_id, c_name) < 0) goto DONE;
+     ret_value = 0;
+
+DONE:
+     if(c_name != NULL) HDfree(c_name);
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5premove_c
+ * Purpose:     Call H5Premove to remove a property from a list
+ * Inputs:      plid - identifier of property list
+ *              name   - name of the property to remove
+ *              name_len - length of the "name" buffer
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5premove_c(hid_t_f *plid, _fcd name, int_f *name_len)
+{
+     int_f ret_value = -1;
+     hid_t c_plid;
+     char* c_name;
+
+     c_name = (char *)HD5f2cstring(name, (int)*name_len);
+     if (c_name == NULL) goto DONE;
+
+     c_plid = (hid_t)*plid;
+     /*
+      * Call H5Premove function.
+      */
+     if( H5Premove(c_plid, c_name) < 0) goto DONE;
+     ret_value = 0;
+
+DONE:
+     if(c_name != NULL) HDfree(c_name);
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5punregister_c
+ * Purpose:     Call H5Punregister to remove a property from a property class
+ * Inputs:      class - identifier of property class
+ *              name   - name of the property to unregister
+ *              name_len - length of the "name" buffer
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5punregister_c(hid_t_f *class, _fcd name, int_f *name_len)
+{
+     int_f ret_value = -1;
+     hid_t c_class;
+     char* c_name;
+
+     c_name = (char *)HD5f2cstring(name, (int)*name_len);
+     if (c_name == NULL) goto DONE;
+
+     c_class = (hid_t)*class;
+     /*
+      * Call H5Punregister function.
+      */
+     if( H5Punregister(c_class, c_name) < 0) goto DONE;
+     ret_value = 0;
+
+DONE:
+     if(c_name != NULL) HDfree(c_name);
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pclose_class_c
+ * Purpose:     Call H5Pclose_class to close property class
+ * Inputs:      class - identifier of property class to close
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pclose_class_c(hid_t_f *class)
+{
+     int_f ret_value = -1;
+     hid_t c_class;
+
+     c_class = (hid_t)*class;
+     /*
+      * Call H5Pclose_class function.
+      */
+     if( H5Pclose_class(c_class) < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_class_name_c
+ * Purpose:     Call H5Pget_class_name to get property class name
+ * Inputs:      class - identifier of property class
+ *              name   - ibuffer to retrieve name in
+ *              name_len - length of the "name" buffer
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_class_name_c(hid_t_f *class, _fcd name, int_f *name_len)
+{
+     int_f ret_value = -1;
+     hid_t c_class;
+     char* c_name;
+
+
+     c_class = (hid_t)*class;
+     /*
+      * Call H5Pget_class_name function.
+      */
+     c_name = H5Pget_class_name(c_class);
+     if( c_name == NULL) goto DONE;
+
+     HD5packFstring(c_name, _fcdtocp(name), (int)*name_len);
+     ret_value = (int_f)HDstrlen(c_name);
+
+DONE:
+     HDfree(c_name);
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_c
+ * Purpose:     Call h5setc_c to set property with the character string value
+ * Inputs:      plist - property list identifier
+ *              name   - name of property
+ *              name_len - length of the "name" buffer
+ *              value - property value of character type
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5psetc_c(hid_t_f *plist, _fcd name, int_f *name_len, _fcd value, int_f *value_len)
+{
+     int_f ret_value = -1;
+
+     /*
+      * Call h5pset_c function
+      */
+      ret_value = nh5pset_c(plist, name, name_len, _fcdtocp(value));
+      return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_c
+ * Purpose:     Call H5Pset to set property value
+ * Inputs:      plist - property list class identifier
+ *              name   - name of the new property
+ *              name_len - length of the "name" buffer
+ *              value - property value
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pset_c(hid_t_f *plist, _fcd name, int_f *name_len, void *value)
+{
+     int_f ret_value = -1;
+     hid_t c_plist;
+     char* c_name;
+
+     c_name = (char *)HD5f2cstring(name, (int)*name_len);
+     if (c_name == NULL) goto DONE;
+     c_plist = (hid_t)*plist;
+
+     /*
+      * Call H5Pset function.
+      */
+     if( H5Pset(c_plist, c_name, value) <0) goto DONE;
+     ret_value = 0;
+
+DONE:
+     if(c_name != NULL) HDfree(c_name);
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pgetc_c
+ * Purpose:     Call h5set_c to set property with the character string value
+ * Inputs:      plist - property list identifier
+ *              name   - name of property
+ *              name_len - length of the "name" buffer
+ * Output:      value - property value of character type
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pgetc_c(hid_t_f *plist, _fcd name, int_f *name_len, _fcd value, int_f *value_len)
+{
+     int_f ret_value = -1;
+
+     /*
+      * Call h5pget_c function
+      */
+      ret_value = nh5pget_c(plist, name, name_len, _fcdtocp(value));
+      return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_c
+ * Purpose:     Call H5Pget to set property value
+ * Inputs:      plist - property list class identifier
+ *              name   - name of the new property
+ *              name_len - length of the "name" buffer
+ * Output:      value - property value
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              October 11, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_c(hid_t_f *plist, _fcd name, int_f *name_len, void *value)
+{
+     int_f ret_value = -1;
+     hid_t c_plist;
+     char* c_name;
+
+     c_name = (char *)HD5f2cstring(name, (int)*name_len);
+     if (c_name == NULL) goto DONE;
+     c_plist = (hid_t)*plist;
+
+     /*
+      * Call H5Pset function.
+      */
+     if( H5Pget(c_plist, c_name, value) <0) goto DONE;
+     ret_value = 0;
+
+DONE:
+     if(c_name != NULL) HDfree(c_name);
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_shuffle_c
+ * Purpose:     Call H5Pset_shuffle
+ * Inputs:      prp_id - property list identifier
+ *              type_size - size of the datatype in bytes
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, March 12, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_shuffle_c ( hid_t_f *prp_id )
+{
+  int_f ret_value = 0;
+  hid_t c_prp_id;
+  herr_t status;
+
+  c_prp_id = (hid_t)*prp_id;
+  status = H5Pset_shuffle(c_prp_id);
+  if ( status < 0  ) ret_value = -1;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_fletcher32_c
+ * Purpose:     Call H5Pset_fletcher32 to enable EDC
+ * Inputs:      prp_id - dataset creation property list identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, March 13, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_fletcher32_c ( hid_t_f *prp_id )
+{
+  int_f ret_value = 0;
+  hid_t c_prp_id;
+  herr_t status;
+
+  c_prp_id = (hid_t)*prp_id;
+  status = H5Pset_fletcher32(c_prp_id);
+  if ( status < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_edc_check_c
+ * Purpose:     Call H5Pset_edc_check to enable EDC
+ * Inputs:      prp_id - dataset transfer property list identifier
+ *              flag   - EDC flag
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, March 13, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_edc_check_c ( hid_t_f *prp_id, int_f *flag )
+{
+  int_f ret_value = 0;
+  hid_t c_prp_id;
+  H5Z_EDC_t c_flag;
+  herr_t status;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_flag = (H5Z_EDC_t)*flag;
+  status = H5Pset_edc_check(c_prp_id, c_flag);
+  if ( status < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_edc_check_c
+ * Purpose:     Call H5Pget_edc_check to query EDC
+ * Inputs:      prp_id - dataset transfer property list identifier
+ * Outouts:     flag   - EDC flag
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, March 13, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pget_edc_check_c ( hid_t_f *prp_id, int_f *flag )
+{
+  int_f ret_value = 0;
+  hid_t c_prp_id;
+  H5Z_EDC_t c_flag;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_flag = H5Pget_edc_check(c_prp_id);
+  if ( c_flag  < 0  ) ret_value = -1;
+  *flag = (int_f)c_flag;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_family_offset_c
+ * Purpose:     Call H5Pset_family_offset to set and offset for family driver
+ * Inputs:      prp_id - property list identifier
+ *              offset - offset in bytes
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, 19 March 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_family_offset_c ( hid_t_f *prp_id , hsize_t_f *offset)
+{
+  int_f ret_value = 0;
+  hid_t c_prp_id;
+  hsize_t c_offset;
+  herr_t status;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_offset = (hsize_t)*offset;
+  status = H5Pset_family_offset(c_prp_id, c_offset);
+  if ( status < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_fapl_multi_c
+ * Purpose:     Call H5Pset_fapl_multi to set multi file dirver
+ * Inputs:      prp_id - file_creation property list identifier
+ *              mem_map - memory mapping array
+ *              memb_fapl - property list for each memory usage type
+ *              memb_name - array with members names
+ *              len - array with the lenght of each name
+ *              lenmax - lenght of the name a sdeclared in Fortran
+ *              flag - flag allowing partila access when one of the files is missing
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday 24, March 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+/*nh5pset_fapl_multi_c ( hid_t_f *prp_id , int_f *memb_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, haddr_t_f *memb_addr, int_f *flag) */
+nh5pset_fapl_multi_c ( hid_t_f *prp_id , int_f *memb_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, real_f *memb_addr, int_f *flag)
+{
+  int_f ret_value = -1;
+  hid_t c_prp_id;
+  H5FD_mem_t c_memb_map[H5FD_MEM_NTYPES];
+  hid_t c_memb_fapl[H5FD_MEM_NTYPES];
+  char *c_memb_name[H5FD_MEM_NTYPES];
+  haddr_t c_memb_addr[H5FD_MEM_NTYPES];
+  hbool_t relax;
+  herr_t status;
+  char *tmp, *tmp_p, *tmp_pp;
+  int i;
+  int c_lenmax;
+  c_lenmax = (int)*lenmax;
+  relax = (hbool_t)*flag;
+/*
+ * Check that we got correct values from Fortran for memb_addr array
+ */
+  for (i=0; i < H5FD_MEM_NTYPES; i++) {
+       if(memb_addr[i] >= 1.) return ret_value;
+  }
+/*
+ * Take care of names array
+ */
+
+  tmp = (char *)HD5f2cstring(memb_name, c_lenmax*(H5FD_MEM_NTYPES));
+  if (tmp ==NULL) return ret_value;
+  tmp_p = tmp;
+  for (i=0; i < H5FD_MEM_NTYPES; i++) {
+       c_memb_name[i] = malloc((size_t)len[i] + 1);
+       memcpy(c_memb_name[i], tmp_p, (size_t)len[i]);
+       tmp_pp = c_memb_name[i];
+       tmp_pp[len[i]] = '\0';
+       tmp_p = tmp_p + c_lenmax;
+/*       printf(" %d \n", len[i]);
+       printf("name %s \n", c_memb_name[i]);
+*/
+ }
+/*
+ * Take care of othe arguments
+ */
+
+  c_prp_id = (hid_t)*prp_id;
+
+/*
+ * The Cray X1 compiler can become confused when trying to optimize
+ * this loop.  This ugly #pragma tells it not to try to optimize it.
+ */
+#ifdef __crayx1
+#pragma _CRI novector
+#endif
+  for (i=0; i < H5FD_MEM_NTYPES; i++) {
+       c_memb_map[i] = (H5FD_mem_t)memb_map[i];
+       /*printf("map %d \n", c_memb_map[i]); */
+       c_memb_fapl[i] = (hid_t)memb_fapl[i];
+       /*printf("fapl %d \n", c_memb_fapl[i]); */
+       if(memb_addr[i] < 0) c_memb_addr[i] = HADDR_UNDEF;
+       else c_memb_addr[i] = (haddr_t)(((float)memb_addr[i])*(HADDR_MAX));
+       /*printf("address %Ld \n", c_memb_addr[i]); */
+  }
+/*
+ * Call  H5Pset_fapl_multi function
+ */
+
+  status = H5Pset_fapl_multi(c_prp_id, c_memb_map, c_memb_fapl, c_memb_name, c_memb_addr, relax);
+  if ( status < 0  ) goto DONE;
+  ret_value = 0;
+
+DONE:
+  free(tmp);
+  for (i=0; i < H5FD_MEM_NTYPES; i++) free(c_memb_name[i]);
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_fapl_multi_sc
+ * Purpose:     Call H5Pset_fapl_multi to set multi file dirver
+ * Inputs:      prp_id - file_creation property list identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              March 31 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_fapl_multi_sc ( hid_t_f *prp_id , int_f *flag)
+{
+  int_f ret_value = -1;
+  hid_t c_prp_id;
+  hbool_t relax;
+  herr_t status;
+
+  relax = (hbool_t)*flag;
+  c_prp_id = (hid_t)*prp_id;
+/*
+ * Call  H5Pset_fapl_multi function
+ */
+
+  status = H5Pset_fapl_multi(c_prp_id, NULL, NULL, NULL, NULL, relax);
+  if ( status < 0  ) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_fapl_multi_c
+ * Purpose:     Call H5Pget_fapl_multi to set multi file dirver
+ * Inputs:      prp_id - file_creation property list identifier
+ *              lenmax - lenght of the name a sdeclared in Fortran
+ * Outputs:     memb_map - memory mapping array
+ *              memb_fapl - property list for each memory usage type
+ *              memb_name - array with members names
+ *              len - array with the lenght of each name
+ *              flag - flag allowing partila access when one of the files is missing
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday 24, March 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pget_fapl_multi_c ( hid_t_f *prp_id , int_f *memb_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, real_f *memb_addr, int_f *flag, int_f *maxlen_out)
+{
+  int_f ret_value = -1;
+  hid_t c_prp_id;
+  H5FD_mem_t c_memb_map[H5FD_MEM_NTYPES];
+  hid_t c_memb_fapl[H5FD_MEM_NTYPES];
+  char *c_memb_name[H5FD_MEM_NTYPES];
+  haddr_t c_memb_addr[H5FD_MEM_NTYPES];
+  hbool_t relax;
+  herr_t status;
+  char *tmp, *tmp_p;
+  int i;
+  size_t c_lenmax;
+  size_t length = 0;
+  c_lenmax = (size_t)*lenmax;
+
+  c_prp_id = (hid_t)*prp_id;
+/*
+ * Call  H5Pget_fapl_multi function
+ */
+
+  status = H5Pget_fapl_multi(c_prp_id, c_memb_map, c_memb_fapl, c_memb_name, c_memb_addr, &relax);
+  if ( status < 0  ) return ret_value;
+
+/*
+ * Take care of names array
+ */
+  tmp = (char *)malloc(c_lenmax*H5FD_MEM_NTYPES + 1);
+  tmp_p = tmp;
+  memset(tmp,' ', c_lenmax*H5FD_MEM_NTYPES);
+  tmp[c_lenmax*H5FD_MEM_NTYPES] = '\0';
+  for (i=0; i < H5FD_MEM_NTYPES; i++) {
+       memcpy(tmp_p, c_memb_name[i], strlen(c_memb_name[i]));
+       len[i] = (int_f)strlen(c_memb_name[i]);
+       length = H5_MAX(length, strlen(c_memb_name[i]));
+       tmp_p = tmp_p + c_lenmax;
+ }
+HD5packFstring(tmp, _fcdtocp(memb_name), (int)(c_lenmax*H5FD_MEM_NTYPES));
+
+/*
+ * Take care of other arguments
+ */
+
+  for (i=0; i < H5FD_MEM_NTYPES; i++) {
+       memb_map[i] = (int_f)c_memb_map[i];
+       memb_fapl[i] = (hid_t_f)c_memb_fapl[i];
+#if defined(WIN32)
+       memb_addr[i] = -1;
+#else
+       if(c_memb_addr[i] == HADDR_UNDEF) memb_addr[i] = -1;
+       else memb_addr[i] = (real_f) ((long)c_memb_addr[i]/HADDR_MAX);
+#endif /*WIN32*/
+  }
+  *flag = (int_f)relax;
+  *maxlen_out = (int_f)length;
+  ret_value = 0;
+  free(tmp);
+  for (i=0; i < H5FD_MEM_NTYPES; i++) free(c_memb_name[i]);
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pset_szip_c
+ * Purpose:     Call H5Pset_szip to set szip compression
+ * Inputs:      prp_id - dataset creation property list identifier
+ *              options_mask
+ *              pixels_per_block -szip compression parameters
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              April 8 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pset_szip_c ( hid_t_f *prp_id , int_f *options_mask, int_f *pixels_per_block)
+{
+  int_f ret_value = -1;
+  hid_t c_prp_id;
+  unsigned   c_options_mask;
+  unsigned  c_pixels_per_block;
+  herr_t status;
+
+  c_prp_id = (hid_t)*prp_id;
+  c_options_mask = (unsigned)*options_mask;
+  c_pixels_per_block = (unsigned)*pixels_per_block;
+/*
+ * Call  H5Pset_szip function
+ */
+
+  status = H5Pset_szip(c_prp_id, c_options_mask, c_pixels_per_block);
+  if ( status < 0  ) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pall_filters_avail_c
+ * Purpose:     Call H5Pall_filters_avail
+ * Inputs:      prp_id - dataset creation property list identifier
+ * Outputs:     status - logical flag
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              April 10 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5pall_filters_avail_c ( hid_t_f *prp_id , int_f *status)
+{
+  int_f ret_value = -1;
+  hid_t c_prp_id;
+  htri_t c_status;
+
+
+  c_prp_id = (hid_t)*prp_id;
+/*
+ * Call  H5Pall_filters_avail function
+ */
+
+  c_status = H5Pall_filters_avail(c_prp_id);
+  if ( c_status < 0  ) return ret_value;
+  *status = 0;
+  if (c_status == 1) *status = 1;
+  ret_value = 0;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5pget_filter_by_id_c
+ * Purpose:     Call H5Pget_filter_by_id to get information about a filter
+ *              in a pipeline
+ * Inputs:      prp_id - property list identifier
+ *              filter_id - filter id
+ *              namelen - Anticipated number of characters in name.
+ *Outputs:      flags - Bit vector specifying certain general
+ *                      properties of the filter.
+ *              cd_nelmts - Number of elements in cd_value
+ *              cd_values - Auxiliary data for the filter.
+ *              name - Name of the filter
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena POurmal
+ *              April 10, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pget_filter_by_id_c(hid_t_f *prp_id, int_f* filter_id, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values, size_t_f *namelen, _fcd name)
+{
+     int_f ret_value = -1;
+     hid_t c_prp_id;
+     H5Z_filter_t c_filter_id;
+     unsigned int  c_flags;
+     size_t c_cd_nelmts, c_namelen;
+     size_t c_cd_nelmts_in;
+     unsigned int * c_cd_values;
+     char* c_name;
+     unsigned i;
+     herr_t status;
+     c_cd_nelmts_in = (size_t)*cd_nelmts;
+     c_cd_nelmts = (size_t)*cd_nelmts;
+     c_namelen = (size_t)*namelen + 1;
+     c_name = (char*)malloc(sizeof(char)*c_namelen);
+     if (!c_name) return ret_value;
+
+     c_cd_values = (unsigned int*)malloc(sizeof(unsigned int)*((int)c_cd_nelmts_in));
+     if (!c_cd_values) {HDfree(c_name);
+                        return ret_value;
+                       }
+
+
+     /*
+      * Call H5Pget_filter function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     c_filter_id = (H5Z_filter_t)*filter_id;
+     status = H5Pget_filter_by_id(c_prp_id, c_filter_id, &c_flags, &c_cd_nelmts, c_cd_values, c_namelen, c_name);
+     if (status < 0) goto DONE;
+
+     *cd_nelmts = (size_t_f)c_cd_nelmts;
+     *flags = (int_f)c_flags;
+     HD5packFstring(c_name, _fcdtocp(name), (int)strlen(c_name));
+
+     for (i = 0; i < c_cd_nelmts_in; i++)
+          cd_values[i] = (int_f)c_cd_values[i];
+
+     ret_value = 0;
+
+DONE:
+     HDfree(c_name);
+     HDfree(c_cd_values);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5pmodify_filter_c
+ * Purpose:     Call H5Pmodify_filter to modify a filter
+ * Inputs:      prp_id - property list identifier
+ *              filter - Filter to be modified
+ *              flags - Bit vector specifying certain general
+ *                      properties of the filter.
+ *              cd_nelmts - Number of elements in cd_values.
+ *              cd_values - Auxiliary data for the filter.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              April 10 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5pmodify_filter_c (hid_t_f *prp_id, int_f* filter, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values )
+{
+     int_f ret_value = -1;
+     hid_t c_prp_id;
+     herr_t ret;
+     size_t c_cd_nelmts;
+     unsigned int c_flags;
+     H5Z_filter_t c_filter;
+     unsigned int * c_cd_values;
+     unsigned i;
+
+     c_filter = (H5Z_filter_t)*filter;
+     c_flags = (unsigned)*flags;
+     c_cd_nelmts = (size_t)*cd_nelmts;
+     c_cd_values = (unsigned int*)malloc(sizeof(unsigned int)*((int)c_cd_nelmts));
+     if (!c_cd_values) return ret_value;
+     for (i = 0; i < c_cd_nelmts; i++)
+          c_cd_values[i] = (unsigned int)cd_values[i];
+
+     /*
+      * Call H5Pmodify_filter function.
+      */
+     c_prp_id = (hid_t)*prp_id;
+     ret = H5Pmodify_filter(c_prp_id, c_filter, c_flags, c_cd_nelmts,c_cd_values );
+
+     if (ret < 0) goto DONE;
+     ret_value = 0;
+
+DONE:
+     HDfree(c_cd_values);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5premove_filter_c
+ * Purpose:     Call H5Premove_filter to remove a filter
+ * Inputs:      prp_id - dataset creation property list identifier
+ *              filter - filter to be removed
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Tuesday, August 24, 2004
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5premove_filter_c (hid_t_f *prp_id, int_f* filter)
+{
+     int_f ret_value = -1;
+     hid_t c_prp_id;
+     H5Z_filter_t c_filter;
+
+     c_filter = (H5Z_filter_t)*filter;
+     c_prp_id = (hid_t)*prp_id;
+
+     /*
+      * Call H5Premove_filter function.
+      */
+     if(H5Premove_filter(c_prp_id, c_filter) < 0) goto DONE;
+     ret_value = 0;
+
+DONE:
+     return ret_value;
+}
+

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Pff.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Pff.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Pff.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,6508 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 file contains Fortran90 interfaces for H5P functions.
+!
+     MODULE H5P
+
+       USE H5GLOBAL
+
+       INTERFACE h5pset_fill_value_f
+         MODULE PROCEDURE h5pset_fill_value_integer
+         MODULE PROCEDURE h5pset_fill_value_real
+! Comment if on Crays
+         MODULE PROCEDURE h5pset_fill_value_double
+! End comment if on Crays
+         MODULE PROCEDURE h5pset_fill_value_char
+       END INTERFACE
+     
+       INTERFACE h5pget_fill_value_f
+         MODULE PROCEDURE h5pget_fill_value_integer
+         MODULE PROCEDURE h5pget_fill_value_real
+! Comment if on Crays
+         MODULE PROCEDURE h5pget_fill_value_double
+! End comment if on Crays
+         MODULE PROCEDURE h5pget_fill_value_char
+       END INTERFACE
+
+       INTERFACE h5pset_f
+         MODULE PROCEDURE h5pset_integer
+         MODULE PROCEDURE h5pset_real
+! Comment if on Crays
+         MODULE PROCEDURE h5pset_double
+! End comment if on Crays
+         MODULE PROCEDURE h5pset_char
+       END INTERFACE
+     
+       INTERFACE h5pget_f
+         MODULE PROCEDURE h5pget_integer
+         MODULE PROCEDURE h5pget_real
+! Comment if on Crays
+         MODULE PROCEDURE h5pget_double
+! End comment if on Crays
+         MODULE PROCEDURE h5pget_char
+       END INTERFACE
+
+       INTERFACE h5pregister_f
+         MODULE PROCEDURE h5pregister_integer
+         MODULE PROCEDURE h5pregister_real
+! Comment if on Crays
+         MODULE PROCEDURE h5pregister_double
+! End comment if on Crays
+         MODULE PROCEDURE h5pregister_char
+       END INTERFACE
+     
+       INTERFACE h5pinsert_f
+         MODULE PROCEDURE h5pinsert_integer
+         MODULE PROCEDURE h5pinsert_real
+! Comment if on Crays
+         MODULE PROCEDURE h5pinsert_double
+! End comment if on Crays
+         MODULE PROCEDURE h5pinsert_char
+       END INTERFACE
+       
+       INTERFACE h5pset_fapl_multi_f
+         MODULE PROCEDURE h5pset_fapl_multi_l
+         MODULE PROCEDURE h5pset_fapl_multi_s
+       END INTERFACE        
+
+     
+     CONTAINS
+
+!----------------------------------------------------------------------
+! Name:		h5pcreate_f 
+!
+! Purpose: 	Creates a new property as an instance of a property 
+!		list class.
+!
+! Inputs:  
+!		class		- type of the property class to be created.
+!				  Possible values are:
+!				  H5P_FILE_CREATE_F
+!				  H5P_FILE_ACCESS_F
+!				  H5P_DATASET_CREATE_F
+!				  H5P_DATASET_XFER_F
+!				  H5P_MOUNT_F
+! Outputs:  
+!		prp_id		- 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5pcreate_f(class, prp_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pcreate_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: class      ! The type of the property list 
+                                              ! to be created. Possible values
+                                              ! are: 
+                                              !  H5P_FILE_CREATE_F
+                                              !  H5P_FILE_ACCESS_F
+                                              !  H5P_DATASET_CREATE_F
+                                              !  H5P_DATASET_XFER_F
+                                              !  H5P_MOUNT_F
+            INTEGER(HID_T), INTENT(OUT) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5pcreate_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pcreate_c(class, prp_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PCREATE_C'::h5pcreate_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: class
+              INTEGER(HID_T), INTENT(OUT) :: prp_id
+              END FUNCTION h5pcreate_c
+            END INTERFACE
+
+            hdferr = h5pcreate_c(class, prp_id) 
+          END SUBROUTINE h5pcreate_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_preserve_f 
+!
+! Purpose: 	Sets the dataset transfer property list status to 
+!		TRUE or FALSE for initializing compound datatype
+!		members during write/read operations.
+!
+! Inputs:  
+!		prp_id		- property list identifier
+!		flag		- status flag
+! 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).  March 14, 2001 
+!                       Datatype of the flag parameter is changed from 
+!                       INTEGER to LOGICAL 
+!                               June 4, 2003 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pset_preserve_f(prp_id, flag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_preserve_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            LOGICAL, INTENT(IN) ::  flag ! TRUE/FALSE flag to set the dataset
+                                         ! transfer property for partila writing/reading
+                                         ! compound datatype 
+            INTEGER, INTENT(OUT) :: hdferr    ! Error code
+            INTEGER :: flag_c
+
+!            INTEGER, EXTERNAL :: h5pset_preserve_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_preserve_c(prp_id, flag_c)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_PRESERVE_C'::h5pset_preserve_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER ::  flag_c
+              END FUNCTION h5pset_preserve_c
+            END INTERFACE
+            flag_c = 0
+            if(flag) flag_c = 1
+            hdferr = h5pset_preserve_c(prp_id, flag_c) 
+          END SUBROUTINE h5pset_preserve_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_preserve_f 
+!
+! Purpose: 	Checks status of the dataset transfer property list.
+!
+! Inputs:  
+!		prp_id		- property list identifier
+! Outputs:  
+!		flag		- status flag
+!		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).  March 14, 2001 
+!                       Datatype of the flag parameter is changed from 
+!                       INTEGER to LOGICAL 
+!                               June 4, 2003 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_preserve_f(prp_id, flag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_preserve_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            LOGICAL, INTENT(OUT) ::  flag ! TRUE/FALSE flag. Shows status of the dataset's
+                                         ! transfer property for partial writing/reading
+                                         ! compound datatype 
+            INTEGER, INTENT(OUT) :: hdferr    ! Error code
+            INTEGER :: flag_c
+
+!            INTEGER, EXTERNAL :: h5pget_preserve_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_preserve_c(prp_id, flag_c)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_PRESERVE_C'::h5pget_preserve_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER ::  flag_c
+              END FUNCTION h5pget_preserve_c
+            END INTERFACE
+
+            hdferr = h5pget_preserve_c(prp_id, flag_c) 
+            flag = .FALSE.
+            if(flag_c .eq. 1) flag = .TRUE.
+          END SUBROUTINE h5pget_preserve_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_class_f 
+!
+! Purpose: 	Returns the property list class for a property list.
+!
+! Inputs:  
+!		prp_id		- property list identifier
+! Outputs:  
+!		classtype	- property list class
+!				  Possible values are:
+!				  H5P_NO_CLASS
+!				  H5P_FILE_CREATE_F
+!				  H5P_FILE_ACCESS_F
+!				  H5PE_DATASET_CREATE_F
+!				  H5P_DATASET_XFER_F
+!				  H5P_MOUNT_F
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_class_f(prp_id, classtype, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_class_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(OUT) :: classtype  ! The type of the property list 
+                                              ! to be created. Possible values
+                                              ! are: 
+                                              !  H5P_NO_CLASS
+                                              !  H5P_FILE_CREATE_F
+                                              !  H5P_FILE_ACCESS_F
+                                              !  H5PE_DATASET_CREATE_F 
+                                              !  H5P_DATASET_XFER_F
+                                              !  H5P_MOUNT_F
+            INTEGER, INTENT(OUT) :: hdferr    ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_class_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_class_c(prp_id, classtype)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_CLASS_C'::h5pget_class_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(OUT) :: classtype 
+              END FUNCTION h5pget_class_c
+            END INTERFACE
+
+            hdferr = h5pget_class_c(prp_id, classtype) 
+          END SUBROUTINE h5pget_class_f
+
+!----------------------------------------------------------------------
+! Name:		h5pcopy_f 
+!
+! Purpose: 	Copies an existing property list to create a new 
+!		property list
+!
+! Inputs:  
+!		prp_id		- property list identifier
+! Outputs:  
+!		new_prp_id	- new 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pcopy_f(prp_id, new_prp_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pcopy_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HID_T), INTENT(OUT) :: new_prp_id 
+                                                ! Identifier  of property list
+                                                ! copy  
+            INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+!            INTEGER, EXTERNAL :: h5pcopy_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pcopy_c(prp_id, new_prp_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PCOPY_C'::h5pcopy_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HID_T), INTENT(OUT) :: new_prp_id
+              END FUNCTION h5pcopy_c
+            END INTERFACE
+
+            hdferr = h5pcopy_c(prp_id, new_prp_id)
+          END SUBROUTINE h5pcopy_f
+
+!----------------------------------------------------------------------
+! Name:		h5pclose_f 
+!
+! Purpose: 	Terminates access to a property list. 
+!
+! Inputs:  
+!		prp_id		- identifier of the property list to 
+!				  terminate access to. 
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pclose_f(prp_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pclose_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5pclose_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pclose_c(prp_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PCLOSE_C'::h5pclose_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id 
+              END FUNCTION h5pclose_c
+            END INTERFACE
+
+            hdferr = h5pclose_c(prp_id)
+          END SUBROUTINE h5pclose_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_chunk_f 
+!
+! Purpose: 	Sets the size of the chunks used to store 
+!		a chunked layout dataset. 
+!
+! Inputs:  
+!		prp_id		- datatset creation property list identifier
+!		ndims		- number of dimensions for each chunk
+!		dims		- array with dimension sizes for each chunk
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pset_chunk_f(prp_id, ndims, dims, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_chunk_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(IN) :: ndims    ! Number of chunk dimensions
+            INTEGER(HSIZE_T), DIMENSION(ndims), INTENT(IN) :: dims    
+                                            ! Array containing sizes of
+                                            ! chunk dimensions
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_chunk_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_chunk_c(prp_id, ndims, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_CHUNK_C'::h5pset_chunk_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(IN) :: ndims
+              INTEGER(HSIZE_T), DIMENSION(ndims), INTENT(IN) :: dims
+              END FUNCTION h5pset_chunk_c
+            END INTERFACE
+
+            hdferr =  h5pset_chunk_c(prp_id, ndims, dims)
+          END SUBROUTINE h5pset_chunk_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_chunk_f 
+!
+! Purpose: 	Retrieves the size of chunks for the raw data of a 
+!		chunked layout dataset
+!
+! Inputs:  
+!		prp_id		- property list identifier
+!		ndims		- size of dims array
+! Outputs:  
+!		dims		- array with dimension sizes for each chunk
+!		hdferr:		- error code		
+!				 	Success:  number of chunk dimensions
+!				 	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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pget_chunk_f(prp_id, ndims, dims, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_chunk_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(IN) :: ndims    ! Number of chunk dimensions to
+                                            ! to return
+            INTEGER(HSIZE_T), DIMENSION(ndims), INTENT(OUT) :: dims    
+                                            ! Array containing sizes of
+                                            ! chunk dimensions
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code; number of
+                                            ! chunk dimensions on success,
+                                            ! -1 on failure
+
+!            INTEGER, EXTERNAL :: h5pget_chunk_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_chunk_c(prp_id, ndims, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_CHUNK_C'::h5pget_chunk_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER :: ndims
+              INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: dims
+              END FUNCTION h5pget_chunk_c
+            END INTERFACE
+
+            hdferr =  h5pget_chunk_c(prp_id, ndims, dims)
+          END SUBROUTINE h5pget_chunk_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_deflate_f 
+!
+! Purpose: 	Sets compression method and compression level. 
+!
+! Inputs:  
+!		prp_id		- property list identifier
+!		level		- compression level
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pset_deflate_f(prp_id, level, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_deflate_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(IN) :: level        ! Compression level 
+            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_deflate_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_deflate_c(prp_id, level)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_DEFLATE_C'::h5pset_deflate_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(IN) :: level
+              END FUNCTION h5pset_deflate_c
+            END INTERFACE
+            hdferr = h5pset_deflate_c(prp_id, level)
+
+          END SUBROUTINE h5pset_deflate_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset(get)fill_value_f 
+!
+! Purpose: 	Sets(gets) fill value for a dataset creation property list
+!
+! Inputs:  
+!		prp_id		- dataset creation property list identifier
+!		type_id		- datatype identifier for fill value
+!		fillvalue	- fill value
+! Outputs:  
+!	(	type_id		- datatype identifier for fill value )
+!	(		fillvalue	- fill value )
+!		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).  March 14, 2001 
+!
+! Comment:	h5pset(get)fill_value_f function is overloaded to support
+!		INTEGER, REAL, DOUBLE PRECISION and CHARACTER dtatypes.		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pset_fill_value_integer(prp_id, type_id, fillvalue, &
+                                               hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fill_value_integer
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of 
+                                                  ! of fillvalue datatype 
+                                                  ! (in memory)
+            INTEGER, INTENT(IN) :: fillvalue   ! Fillvalue
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_fill_value_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_fill_value_c(prp_id, type_id, fillvalue)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FILL_VALUE_C'::h5pset_fill_value_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(IN) :: fillvalue
+              END FUNCTION h5pset_fill_value_c
+            END INTERFACE
+
+            hdferr = h5pset_fill_value_c(prp_id, type_id, fillvalue)
+          END SUBROUTINE h5pset_fill_value_integer
+
+
+          SUBROUTINE h5pget_fill_value_integer(prp_id, type_id, fillvalue, &
+                                               hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_fill_value_integer
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of 
+                                                  ! of fillvalue datatype
+                                                  ! (in memory) 
+            INTEGER, INTENT(IN) :: fillvalue   ! Fillvalue
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_fill_value_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_fill_value_c(prp_id, type_id, fillvalue)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_FILL_VALUE_C'::h5pget_fill_value_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER :: fillvalue
+              END FUNCTION h5pget_fill_value_c
+            END INTERFACE
+
+            hdferr = h5pget_fill_value_c(prp_id, type_id, fillvalue)
+          END SUBROUTINE h5pget_fill_value_integer
+
+
+          SUBROUTINE h5pset_fill_value_real(prp_id, type_id, fillvalue, &
+                                               hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fill_value_real
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of 
+                                                  ! of fillvalue datatype 
+                                                  ! (in memory)
+            REAL, INTENT(IN) :: fillvalue   ! Fillvalue
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_fill_value_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_fill_value_c(prp_id, type_id, fillvalue)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FILL_VALUE_C'::h5pset_fill_value_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              REAL, INTENT(IN) :: fillvalue
+              END FUNCTION h5pset_fill_value_c
+            END INTERFACE
+
+            hdferr = h5pset_fill_value_c(prp_id, type_id, fillvalue)
+          END SUBROUTINE h5pset_fill_value_real
+
+
+          SUBROUTINE h5pget_fill_value_real(prp_id, type_id, fillvalue, &
+                                               hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_fill_value_real
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of 
+                                                  ! of fillvalue datatype
+                                                  ! (in memory) 
+            REAL, INTENT(IN) :: fillvalue   ! Fillvalue
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_fill_value_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_fill_value_c(prp_id, type_id, fillvalue)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_FILL_VALUE_C'::h5pget_fill_value_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              REAL :: fillvalue
+              END FUNCTION h5pget_fill_value_c
+            END INTERFACE
+
+            hdferr = h5pget_fill_value_c(prp_id, type_id, fillvalue)
+          END SUBROUTINE h5pget_fill_value_real
+
+
+          SUBROUTINE h5pset_fill_value_double(prp_id, type_id, fillvalue, &
+                                               hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fill_value_double
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of 
+                                                  ! of fillvalue datatype 
+                                                  ! (in memory)
+            DOUBLE PRECISION, INTENT(IN) :: fillvalue   ! Fillvalue
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_fill_value_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_fill_value_c(prp_id, type_id, fillvalue)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FILL_VALUE_C'::h5pset_fill_value_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              DOUBLE PRECISION, INTENT(IN) :: fillvalue
+              END FUNCTION h5pset_fill_value_c
+            END INTERFACE
+
+            hdferr = h5pset_fill_value_c(prp_id, type_id, fillvalue)
+          END SUBROUTINE h5pset_fill_value_double
+
+
+          SUBROUTINE h5pget_fill_value_double(prp_id, type_id, fillvalue, &
+                                               hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_fill_value_double
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of 
+                                                  ! of fillvalue datatype
+                                                  ! (in memory) 
+            DOUBLE PRECISION, INTENT(IN) :: fillvalue   ! Fillvalue
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_fill_value_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_fill_value_c(prp_id, type_id, fillvalue)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_FILL_VALUE_C'::h5pget_fill_value_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              DOUBLE PRECISION :: fillvalue
+              END FUNCTION h5pget_fill_value_c
+            END INTERFACE
+
+            hdferr = h5pget_fill_value_c(prp_id, type_id, fillvalue)
+          END SUBROUTINE h5pget_fill_value_double
+
+          SUBROUTINE h5pset_fill_value_char(prp_id, type_id, fillvalue, &
+                                               hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fill_value_char
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of 
+                                                  ! of fillvalue datatype 
+                                                  ! (in memory)
+            CHARACTER, INTENT(IN) :: fillvalue   ! Fillvalue
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_fill_valuec_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_fill_valuec_c(prp_id, type_id, fillvalue)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FILL_VALUEC_C'::h5pset_fill_valuec_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: fillvalue 
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              CHARACTER, INTENT(IN) :: fillvalue
+              END FUNCTION h5pset_fill_valuec_c
+            END INTERFACE
+
+            hdferr = h5pset_fill_valuec_c(prp_id, type_id, fillvalue)
+          END SUBROUTINE h5pset_fill_value_char
+
+          SUBROUTINE h5pget_fill_value_char(prp_id, type_id, fillvalue, &
+                                               hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_fill_value_char
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of 
+                                                  ! of fillvalue datatype
+                                                  ! (in memory) 
+            CHARACTER, INTENT(IN) :: fillvalue   ! Fillvalue
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_fill_valuec_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_fill_valuec_c(prp_id, type_id, fillvalue)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_FILL_VALUEC_C'::h5pget_fill_valuec_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: fillvalue 
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              CHARACTER :: fillvalue
+              END FUNCTION h5pget_fill_valuec_c
+            END INTERFACE
+
+            hdferr = h5pget_fill_valuec_c(prp_id, type_id, fillvalue)
+          END SUBROUTINE h5pget_fill_value_char
+
+!----------------------------------------------------------------------
+! Name:		h5pget_version_f 
+!
+! Purpose: 	Retrieves the version information of various objects 
+!		for a file creation property list
+!
+! Inputs:  
+!		prp_id		- file createion property list identifier
+! Outputs:  
+!		boot		- super block version number
+!		freelist	- global freelist version number
+!		stab		- symbol table version number
+!		shhdr		- shared object header version number
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_version_f(prp_id, boot, freelist, &
+                                    stab, shhdr, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_version_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, DIMENSION(:), INTENT(OUT) :: boot  !array to put boot
+                                                        !block version number
+            INTEGER, DIMENSION(:), INTENT(OUT) :: freelist  !array to put global
+                                                        !freelist version number
+     
+            INTEGER, DIMENSION(:), INTENT(OUT) :: stab  !array to put symbol
+                                                        !table version number
+            INTEGER, DIMENSION(:), INTENT(OUT) :: shhdr !array to put shared
+                                                        !object header version number
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_version_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_version_c(prp_id, boot, freelist, stab, shhdr)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_VERSION_C'::h5pget_version_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, DIMENSION(:), INTENT(OUT) :: boot 
+              INTEGER, DIMENSION(:), INTENT(OUT) :: freelist 
+              INTEGER, DIMENSION(:), INTENT(OUT) :: stab
+              INTEGER, DIMENSION(:), INTENT(OUT) :: shhdr
+              END FUNCTION h5pget_version_c
+            END INTERFACE
+
+            hdferr = h5pget_version_c(prp_id, boot, freelist, stab, shhdr)
+          END SUBROUTINE h5pget_version_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_userblock_f 
+!
+! Purpose: 	Sets user block size
+!
+! Inputs:  
+!		prp_id		- file creation property list to modify
+!		size		- size of the user-block in bytes
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+ 
+          SUBROUTINE h5pset_userblock_f (prp_id, size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_userblock_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HSIZE_T), INTENT(IN) :: size !Size of the user-block in bytes 
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_userblock_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_userblock_c(prp_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_USERBLOCK_C'::h5pset_userblock_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HSIZE_T), INTENT(IN) :: size
+              END FUNCTION h5pset_userblock_c
+            END INTERFACE
+
+            hdferr = h5pset_userblock_c(prp_id, size)
+          END SUBROUTINE h5pset_userblock_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_userblock_f 
+!
+! Purpose: 	Gets user block size.
+!
+! Inputs:  
+!		prp_id		- file creation property list identifier
+! Outputs:  
+!		block_size	- size of the user block in bytes
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pget_userblock_f(prp_id, block_size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_userblock_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HSIZE_T), INTENT(OUT) ::  block_size !Size of the 
+                                                               !user-block in bytes 
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_userblock_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_userblock_c(prp_id, block_size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_USERBLOCK_C'::h5pget_userblock_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HSIZE_T), INTENT(OUT) :: block_size
+              END FUNCTION h5pget_userblock_c
+            END INTERFACE
+            hdferr = h5pget_userblock_c(prp_id,  block_size)
+          END SUBROUTINE h5pget_userblock_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_sizes_f 
+!
+! Purpose: 	Sets the byte size of the offsets and lengths used 
+!		to address objects in an HDF5 file.
+!
+! Inputs:  
+!		prp_id		- file creation property list identifier
+!		sizeof_addr	- size of an object offset in bytes 
+!		sizeof_size	- size of an object length in bytes
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_sizes_f (prp_id, sizeof_addr, sizeof_size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_sizes_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(SIZE_T), INTENT(IN) :: sizeof_addr !Size of an object 
+                                                       !offset in bytes 
+            INTEGER(SIZE_T), INTENT(IN) :: sizeof_size !Size of an object 
+                                                       !length in bytes 
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_sizes_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_sizes_c(prp_id, sizeof_addr, sizeof_size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_SIZES_C'::h5pset_sizes_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id 
+              INTEGER(SIZE_T), INTENT(IN) :: sizeof_addr
+              INTEGER(SIZE_T), INTENT(IN) :: sizeof_size
+              END FUNCTION h5pset_sizes_c
+            END INTERFACE
+
+            hdferr = h5pset_sizes_c(prp_id, sizeof_addr, sizeof_size)
+          END SUBROUTINE h5pset_sizes_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_sizes_f 
+!
+! Purpose: 	Retrieves the size of the offsets and lengths used 
+!		in an HDF5 file
+!
+! Inputs:  
+!		prp_id		- file creation property list identifier
+! Outputs:  
+!		sizeof_addr	- size of an object offset in bytes 
+!		sizeof_size	- size of an object length in bytes
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pget_sizes_f(prp_id, sizeof_addr, sizeof_size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_sizes_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(SIZE_T), INTENT(OUT) :: sizeof_addr !Size of an object
+                                                                      !offset in bytes 
+            INTEGER(SIZE_T), INTENT(OUT) :: sizeof_size !Size of an object
+                                                                      !length in bytes 
+  
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_sizes_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_sizes_c(prp_id, sizeof_addr, sizeof_size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_SIZES_C'::h5pget_sizes_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id 
+              INTEGER(SIZE_T), INTENT(OUT) :: sizeof_addr
+              INTEGER(SIZE_T), INTENT(OUT) :: sizeof_size
+              END FUNCTION h5pget_sizes_c
+            END INTERFACE
+
+            hdferr = h5pget_sizes_c(prp_id, sizeof_addr, sizeof_size)
+          END SUBROUTINE h5pget_sizes_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_sym_k_f 
+!
+! Purpose: 	Sets the size of parameters used to control the 
+!		symbol table nodes
+!
+! Inputs:  
+!		prp_id		- file creation property list identifier
+!		ik		- symbol table tree rank
+!		lk		- symbol table node size
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_sym_k_f (prp_id, ik, lk, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_sym_k_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(IN) :: ik ! Symbol table tree rank 
+            INTEGER, INTENT(IN) :: lk ! Symbol table node size 
+                                                       
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_sym_k_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_sym_k_c(prp_id, ik, lk)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_SYM_K_C'::h5pset_sym_k_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id 
+              INTEGER, INTENT(IN) :: ik
+              INTEGER, INTENT(IN) :: lk
+              END FUNCTION h5pset_sym_k_c
+            END INTERFACE
+
+            hdferr = h5pset_sym_k_c(prp_id, ik, lk)
+          END SUBROUTINE h5pset_sym_k_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_sym_k_f 
+!
+! Purpose: 	Retrieves the size of the symbol table B-tree 1/2 rank
+!		 and the symbol table leaf node 1/2 size. 
+!
+! Inputs:  
+!		prp_id		- file creation property list identifier
+! Outputs:  
+!		ik		- symbol table tree 1/2 rank
+!		lk		- symbol table node 1/2 size
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pget_sym_k_f(prp_id, ik, lk, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_sym_k_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(OUT) :: ik !Symbol table tree rank
+            INTEGER, INTENT(OUT) :: lk !Symbol table node size
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_sym_k_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_sym_k_c(prp_id, ik, lk)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_SYM_K_C'::h5pget_sym_k_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id 
+              INTEGER, INTENT(OUT) :: ik
+              INTEGER, INTENT(OUT) :: lk
+              END FUNCTION h5pget_sym_k_c
+            END INTERFACE
+
+            hdferr = h5pget_sym_k_c(prp_id, ik, lk)
+          END SUBROUTINE h5pget_sym_k_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_istore_k_f 
+!
+! Purpose: 	Sets the size of the parameter used to control the 
+!		B-trees for indexing chunked datasets
+!
+! Inputs:  
+!		prp_id		- file creation property list identifier
+!		ik		- 1/2 rank of chunked storage B-tree
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_istore_k_f (prp_id, ik, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_istore_k_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(IN) :: ik ! 1/2 rank of chunked storage B-tree
+                                                       
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_istore_k_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_istore_k_c(prp_id, ik)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_ISTORE_K_C'::h5pset_istore_k_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(IN) :: ik
+              END FUNCTION h5pset_istore_k_c
+            END INTERFACE
+
+            hdferr = h5pset_istore_k_c(prp_id, ik)
+          END SUBROUTINE h5pset_istore_k_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_istore_k_f 
+!
+! Purpose: 	Queries the 1/2 rank of an indexed storage B-tree. 
+!
+! Inputs:  
+!		prp_id		- file creation property list identifier
+! Outputs:  
+!		ik		- 1/2 rank of chunked storage B-tree
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pget_istore_k_f(prp_id, ik, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_istore_k_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(OUT) :: ik !1/2 rank of chunked storage B-tree
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_istore_k_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_istore_k_c(prp_id, ik)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_ISTORE_K_C'::h5pget_istore_k_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(OUT) :: ik
+              END FUNCTION h5pget_istore_k_c
+            END INTERFACE
+
+            hdferr = h5pget_istore_k_c(prp_id, ik)
+          END SUBROUTINE h5pget_istore_k_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_driver_f 
+!
+! Purpose: 	Returns low-lever driver identifier. 
+!
+! Inputs:  
+!		prp_id		- file access or data transfer property 
+!				  list identifier. 
+! Outputs:  
+!		driver		- low-level driver 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_driver_f(prp_id, driver, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_driver_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HID_T), INTENT(OUT) :: driver !low-level file driver identifier
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_driver_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_driver_c(prp_id, driver)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_DRIVER_C'::h5pget_driver_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HID_T), INTENT(OUT) :: driver
+              END FUNCTION h5pget_driver_c
+            END INTERFACE
+
+            hdferr = h5pget_driver_c(prp_id, driver)
+          END SUBROUTINE h5pget_driver_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_fapl_stdio_f 
+!
+! Purpose: 	Sets the standard I/O driver. 
+!
+! Inputs:  
+!		prp_id		- file access property list identifier
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_fapl_stdio_f (prp_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fapl_stdio_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_fapl_stdio_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_fapl_stdio_c(prp_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FAPL_STDIO_C'::h5pset_fapl_stdio_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              END FUNCTION h5pset_fapl_stdio_c
+            END INTERFACE
+
+            hdferr = h5pset_fapl_stdio_c(prp_id)
+          END SUBROUTINE h5pset_fapl_stdio_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_stdio_f 
+!
+! Purpose:  	NOT AVAILABLE
+!
+! Inputs:  
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+!          SUBROUTINE h5pget_stdio_f (prp_id, io, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_stdio_f
+!DEC$endif
+!
+!            IMPLICIT NONE
+!            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+!            INTEGER, INTENT(OUT) :: io   ! value indicates that the file 
+                                         !access property list is set to 
+                                         !the stdio driver
+!            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+!            INTEGER, EXTERNAL :: h5pget_stdio_c
+!            hdferr = h5pget_stdio_c(prp_id, io)
+!          END SUBROUTINE h5pget_stdio_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_fapl_sec2_f 
+!
+! Purpose: 	Sets the sec2 driver. 
+!
+! Inputs:  
+!		prp_id		- file access property list identifier
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_fapl_sec2_f (prp_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fapl_sec2_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_fapl_sec2_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_fapl_sec2_c(prp_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FAPL_SEC2_C'::h5pset_fapl_sec2_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+              END FUNCTION h5pset_fapl_sec2_c
+            END INTERFACE
+
+            hdferr = h5pset_fapl_sec2_c(prp_id)
+          END SUBROUTINE h5pset_fapl_sec2_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_sec2_f 
+!
+! Purpose: 	NOT AVAILABLE
+!
+! Inputs:  
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+!          SUBROUTINE h5pget_sec2_f (prp_id, sec2, hdferr) 
+!            IMPLICIT NONE
+!            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+!            INTEGER, INTENT(OUT) :: sec2   ! value indicates whether the file 
+                                           !driver uses the functions declared
+                                           !in the unistd.h file
+!            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+!            INTEGER, EXTERNAL :: h5pget_sec2_c
+!            hdferr = h5pget_sec2_c(prp_id, sec2)
+!          END SUBROUTINE h5pget_sec2_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_alignment_f 
+!
+! Purpose: 	Sets alignment properties of a file access property list. 
+!
+! Inputs:  
+!		prp_id		- file access property list identifier
+!		threshold	- threshold value	
+!		alignment	- alignment value
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_alignment_f(prp_id, threshold,  alignment, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_alignment_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HSIZE_T), INTENT(IN) :: threshold ! Threshold value
+            INTEGER(HSIZE_T), INTENT(IN) :: alignment ! alignment value
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_alignment_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_alignment_c(prp_id, threshold, alignment)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_ALIGNMENT_C'::h5pset_alignment_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HSIZE_T), INTENT(IN) :: threshold
+              INTEGER(HSIZE_T), INTENT(IN) :: alignment
+              END FUNCTION h5pset_alignment_c
+            END INTERFACE
+
+            hdferr = h5pset_alignment_c(prp_id, threshold, alignment)
+          END SUBROUTINE h5pset_alignment_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_alignment_f 
+!
+! Purpose: 	Retrieves the current settings for alignment 
+!		properties from a file access property list. 
+!
+! Inputs:  
+!		prp_id		- file access property list identifier
+! Outputs:  
+!		threshold	- threshold value	
+!		alignment	- alignment value
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_alignment_f(prp_id, threshold,  alignment, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_alignment_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HSIZE_T), INTENT(OUT) :: threshold ! Threshold value
+            INTEGER(HSIZE_T), INTENT(OUT) :: alignment ! alignment value
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_alignment_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_alignment_c(prp_id, threshold, alignment)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_ALIGNMENT_C'::h5pget_alignment_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HSIZE_T), INTENT(OUT) :: threshold
+              INTEGER(HSIZE_T), INTENT(OUT) :: alignment
+              END FUNCTION h5pget_alignment_c
+            END INTERFACE
+
+            hdferr = h5pget_alignment_c(prp_id, threshold, alignment)
+          END SUBROUTINE h5pget_alignment_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_fapl_core_f 
+!
+! Purpose: 	Modifies the file access property list to use the 
+!		H5FD_CORE driver. 
+!
+! Inputs:  	prp_id		- file access property list identifier
+!		increment	- size, in bytes, of memory increments 
+!		backing_store	- boolean flag indicating whether to write 
+!				  the file contents to disk when the file is closed. 
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_fapl_core_f(prp_id, increment, backing_store, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fapl_core_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(SIZE_T), INTENT(IN) :: increment ! File block size in bytes.
+            LOGICAL, INTENT(IN) :: backing_store ! flag to indicate that
+                                    ! entire file contents are flushed to a file 
+                                    ! with the same name as this core file.
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: backing_store_flag 
+
+!            INTEGER, EXTERNAL :: h5pset_fapl_core_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_fapl_core_c(prp_id, increment, backing_store_flag)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FAPL_CORE_C'::h5pset_fapl_core_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id 
+              INTEGER(SIZE_T), INTENT(IN) :: increment 
+              INTEGER :: backing_store_flag 
+              END FUNCTION h5pset_fapl_core_c
+            END INTERFACE
+            backing_store_flag = 0
+            if(backing_store) backing_store_flag = 1
+            hdferr = h5pset_fapl_core_c(prp_id, increment, backing_store_flag)
+          END SUBROUTINE h5pset_fapl_core_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_fapl_core_f 
+!
+! Purpose: 	Queries core file driver properties. 
+!
+! Inputs:  
+!		prp_id		- file access property list identifier
+! Outputs:  
+!		increment	- size, in bytes, of memory increments 
+!		backing_store	- boolean flag indicating whether to write 
+!				  the file contents to disk when the file is closed. 
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_fapl_core_f(prp_id, increment, backing_store, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_fapl_core_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(SIZE_T), INTENT(OUT) :: increment ! File block size in bytes.
+            LOGICAL, INTENT(OUT) :: backing_store ! flag to indicate that
+                                    ! entire file contents are flushed to a file 
+                                    ! with the same name as this core file.
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: backing_store_flag 
+
+!            INTEGER, EXTERNAL :: h5pget_fapl_core_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_fapl_core_c(prp_id, increment, backing_store_flag)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_FAPL_CORE_C'::h5pget_fapl_core_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id 
+              INTEGER(SIZE_T), INTENT(OUT) :: increment 
+              INTEGER :: backing_store_flag 
+              END FUNCTION h5pget_fapl_core_c
+            END INTERFACE
+
+            hdferr = h5pget_fapl_core_c(prp_id, increment, backing_store_flag)
+            backing_store =.FALSE.
+            if (backing_store_flag .eq. 1) backing_store =.TRUE.
+          END SUBROUTINE h5pget_fapl_core_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_fapl_family_f 
+!
+! Purpose: 	Sets the file access property list to use the family driver. 
+!
+! Inputs:  
+!		prp_id		- file access property list identifier
+!		memb_size	- size in bytes of each file member 
+!		memb_plist	- identifier of the file access property 
+!				  list to be used for each family member
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_fapl_family_f(prp_id, memb_size, memb_plist , hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fapl_family_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HSIZE_T), INTENT(IN) :: memb_size ! Logical size, in bytes,
+                                                      !of each family member
+            INTEGER(HID_T), INTENT(IN) :: memb_plist !Identifier of the file 
+                                                     !access property list for 
+                                                     !each member of the family
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_fapl_family_f
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_fapl_family_c(prp_id, memb_size, memb_plist)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FAPL_FAMILY_C'::h5pset_fapl_family_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HSIZE_T), INTENT(IN) :: memb_size
+              INTEGER(HID_T), INTENT(IN) :: memb_plist
+              END FUNCTION h5pset_fapl_family_c
+            END INTERFACE
+
+            hdferr = h5pset_fapl_family_c(prp_id, memb_size, memb_plist)
+          END SUBROUTINE h5pset_fapl_family_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_fapl_family_f 
+!
+! Purpose:	Returns file access property list information.  	
+!
+! Inputs:  
+!		prp_id		- file access property list identifier
+! Outputs:  
+!		memb_size	- size in bytes of each file member 
+!		memb_plist	- identifier of the file access property 
+!				  list to be used for each family member
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pget_fapl_family_f(prp_id, memb_size, memb_plist , hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_fapl_family_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HSIZE_T), INTENT(OUT) :: memb_size ! Logical size, in bytes,
+                                                      !of each family member
+            INTEGER(HID_T), INTENT(OUT) :: memb_plist !Identifier of the file 
+                                                     !access property list for 
+                                                     !each member of the family
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_fapl_family_f
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_fapl_family_c(prp_id, memb_size, memb_plist)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_FAPL_FAMILY_C'::h5pget_fapl_family_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HSIZE_T), INTENT(OUT) :: memb_size
+              INTEGER(HID_T), INTENT(OUT) :: memb_plist
+              END FUNCTION h5pget_fapl_family_c
+            END INTERFACE
+
+            hdferr = h5pget_fapl_family_c(prp_id, memb_size, memb_plist)
+          END SUBROUTINE h5pget_fapl_family_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_cache_f 
+!
+! Purpose: 	Sets the meta data cache and raw data chunk 
+!		cache parameters
+!
+! Inputs:  
+!		prp_id		- file access property list identifier
+!		mdc_nelmts	- number of elements (objects) in the meta 
+!				  data cache 
+!		rdcc_nelmts	- number of elements (objects) in the raw 
+!			          data chunk cache 
+!		rdcc_nbytes	- total size of the raw data chunk cache, in bytes 
+!		rdcc_w0		- preemption policy (0 or 1)
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_cache_f(prp_id, mdc_nelmts,rdcc_nelmts, rdcc_nbytes, rdcc_w0, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_cache_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(IN) :: mdc_nelmts  !Number of elements (objects)
+                                                        ! in the meta data cache
+            INTEGER(SIZE_T), INTENT(IN) :: rdcc_nelmts  !Number of elements (objects)
+                                                        ! in the meta data cache
+            INTEGER(SIZE_T), INTENT(IN) :: rdcc_nbytes !Total size of the raw data 
+                                                      !chunk cache, in bytes 
+            REAL, INTENT(IN) :: rdcc_w0 !Preemption policy
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_cache_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_cache_c(prp_id,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_CACHE_C'::h5pset_cache_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(IN) :: mdc_nelmts 
+              INTEGER(SIZE_T), INTENT(IN) :: rdcc_nelmts 
+              INTEGER(SIZE_T), INTENT(IN) :: rdcc_nbytes
+              REAL, INTENT(IN) :: rdcc_w0
+              END FUNCTION h5pset_cache_c
+            END INTERFACE
+
+            hdferr = h5pset_cache_c(prp_id, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, rdcc_w0 )
+          END SUBROUTINE h5pset_cache_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_cache_f 
+!
+! Purpose: 	Queries the meta data cache and raw data chunk cache 
+!		parameters.  
+!
+! Inputs:  
+!		prp_id		- file access property list identifier
+! Outputs:  
+!		mdc_nelmts	- number of elements (objects) in the meta 
+!				  data cache 
+!		rdcc_nelmts	- number of elements (objects) in the raw 
+!			          data chunk cache 
+!		rdcc_nbytes	- total size of the raw data chunk cache, in bytes 
+!		rdcc_w0		- preemption policy (0 or 1)
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_cache_f(prp_id, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, rdcc_w0, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_cache_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(OUT) :: mdc_nelmts  !Number of elements (objects)
+                                                        ! in the meta data cache
+            INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nelmts  !Number of elements (objects)
+                                                        ! in the meta data cache
+            INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nbytes !Total size of the raw data 
+                                                      !chunk cache, in bytes 
+            REAL, INTENT(OUT) :: rdcc_w0 !Preemption policy
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+
+!            INTEGER, EXTERNAL :: h5pget_cache_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_cache_c(prp_id,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_CACHE_C'::h5pget_cache_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(OUT) :: mdc_nelmts 
+              INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nelmts 
+              INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nbytes
+              REAL, INTENT(OUT) :: rdcc_w0
+              END FUNCTION h5pget_cache_c
+            END INTERFACE
+
+            hdferr = h5pget_cache_c(prp_id, mdc_nelmts,rdcc_nelmts, rdcc_nbytes, rdcc_w0 )
+          END SUBROUTINE h5pget_cache_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_fapl_split_f 
+!
+! Purpose: 	Emulates the old split file driver. 
+!
+! Inputs:  
+!		prp_id		- file access property list identifier
+!		meta_ext	- name of the extension for the metafile 
+!				  filename
+!		meta_plist	- identifier of the meta file access property 
+!				  list
+!		raw_ext 	- name extension for the raw file filename
+!		raw_plist	- identifier of the raw file access property list
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_fapl_split_f(prp_id, meta_ext, meta_plist, raw_ext, raw_plist, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fapl_split_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: meta_ext  !Name of the extension for
+                                                      !the metafile filename
+            INTEGER(HID_T), INTENT(IN) :: meta_plist  ! Identifier of the meta file
+                                                      ! access property list
+            CHARACTER(LEN=*), INTENT(IN) :: raw_ext  !Name extension for the raw file filename
+            INTEGER(HID_T), INTENT(IN) :: raw_plist  !Identifier of the raw file 
+                                                     !access property list
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: meta_len, raw_len
+
+!            INTEGER, EXTERNAL :: h5pset_fapl_split_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_fapl_split_c(prp_id,meta_len,meta_ext,meta_plist,raw_len,raw_ext,raw_plist)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FAPL_SPLIT_C'::h5pset_fapl_split_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: meta_ext
+              !DEC$ATTRIBUTES reference :: raw_ext
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              CHARACTER(LEN=*), INTENT(IN) :: meta_ext 
+              INTEGER(HID_T), INTENT(IN) :: meta_plist
+              CHARACTER(LEN=*), INTENT(IN) :: raw_ext
+              INTEGER(HID_T), INTENT(IN) :: raw_plist 
+              INTEGER :: meta_len, raw_len
+              END FUNCTION h5pset_fapl_split_c
+            END INTERFACE
+
+            meta_len = LEN(meta_ext)
+            raw_len = LEN(raw_ext)
+        hdferr = h5pset_fapl_split_c(prp_id,meta_len,meta_ext,meta_plist,raw_len,raw_ext,raw_plist)
+          END SUBROUTINE h5pset_fapl_split_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_split_f 
+!
+! Purpose: 	NOT AVAILABLE
+!
+! Inputs:  
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+!          SUBROUTINE h5pget_split_f(prp_id, meta_ext_size, meta_ext, meta_plist,raw_ext_size,&
+!                                     raw_ext, raw_plist, hdferr) 
+!            IMPLICIT NONE
+!            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+!            INTEGER(SIZE_T), INTENT(IN) :: meta_ext_size ! Number of characters of the meta
+                                                         ! file extension to be copied to the
+                                                         ! meta_ext buffer
+      
+!            CHARACTER(LEN=*), INTENT(OUT) :: meta_ext  !Name of the extension for
+                                                      !the metafile filename
+!            INTEGER(HID_T), INTENT(OUT) :: meta_plist  ! Identifier of the meta file
+                                                      ! access property list
+!            INTEGER(SIZE_T), INTENT(IN) :: raw_ext_size ! Number of characters of the raw
+                                                         ! file extension to be copied to the
+                                                         ! raw_ext buffer
+!            CHARACTER(LEN=*), INTENT(OUT) :: raw_ext  !Name extension for the raw file filename
+!            INTEGER(HID_T), INTENT(OUT) :: raw_plist  !Identifier of the raw file 
+                                                     !access property list
+!            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_split_c
+!            hdferr = h5pget_split_c(prp_id, meta_ext_size, meta_ext, meta_plist, &
+!                                    raw_ext_size, raw_ext, raw_plist )
+!          END SUBROUTINE h5pget_split_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_gc_references_f 
+!
+! Purpose: 	Sets garbage collecting references flag. 
+!
+! Inputs:  
+!		prp_id		- file access property list identifier
+!		gc_reference	- flag for stting garbage collection on 
+!				  and off (1 or 0)
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+ 
+          SUBROUTINE h5pset_gc_references_f (prp_id, gc_reference, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_gc_references_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(IN) :: gc_reference !the flag for garbage collecting
+                                                ! references for the file
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_gc_references_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_gc_references_c(prp_id, gc_reference)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_GC_REFERENCES_C'::h5pset_gc_references_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(IN) :: gc_reference
+              END FUNCTION h5pset_gc_references_c
+            END INTERFACE
+
+            hdferr = h5pset_gc_references_c(prp_id, gc_reference)
+          END SUBROUTINE h5pset_gc_references_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_gc_references_f 
+!
+! Purpose: 	Returns garbage collecting references setting. 	
+!
+! Inputs:  
+!		prp_id		- file access property list identifier
+! Outputs:  
+!		gc_reference	- flag for stting garbage collection on 
+!				  and off (1 or 0)
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_gc_references_f (prp_id, gc_reference, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_gc_references_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(OUT) :: gc_reference !the flag for garbage collecting
+                                                ! references for the file
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_gc_references_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_gc_references_c(prp_id, gc_reference)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_GC_REFERENCES_C'::h5pget_gc_references_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(OUT) :: gc_reference
+              END FUNCTION h5pget_gc_references_c
+            END INTERFACE
+
+            hdferr = h5pget_gc_references_c(prp_id, gc_reference)
+          END SUBROUTINE h5pget_gc_references_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_layout_f 
+!
+! Purpose: 	Sets the type of storage used store the raw data 
+!		for a dataset. 
+!
+! Inputs:  
+!		prp_id		- data creation property list identifier
+!		layout		- type of storage layout for raw data
+!				  possible values are:
+!				  H5D_COMPACT_F
+!				  H5D_CONTIGUOUS_F
+!				  H5D_CHUNKED_F
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_layout_f (prp_id, layout, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_layout_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(IN) :: layout !Type of storage layout for raw data
+                                          !possible values are:
+                                          !H5D_COMPACT_F
+                                          !H5D_CONTIGUOUS_F
+                                          !H5D_CHUNKED_F
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_layout_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_layout_c(prp_id, layout)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_LAYOUT_C'::h5pset_layout_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(IN) :: layout
+              END FUNCTION h5pset_layout_c
+            END INTERFACE
+
+            hdferr = h5pset_layout_c(prp_id, layout)
+          END SUBROUTINE h5pset_layout_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_layout_f 
+!
+! Purpose: 	Returns the layout of the raw data for a dataset. 
+!
+! Inputs:  
+!		prp_id		- data creation property list identifier
+! Outputs:  
+!		layout		- type of storage layout for raw data
+!				  possible values are:
+!				  H5D_COMPACT_F
+!				  H5D_CONTIGUOUS_F
+!				  H5D_CHUNKED_F
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_layout_f (prp_id, layout, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_layout_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(OUT) :: layout !Type of storage layout for raw data
+                                          !possible values are:
+                                          !H5D_COMPACT_F(0)
+                                          !H5D_CONTIGUOUS_F(1)
+                                          !H5D_CHUNKED_F(2)
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_layout_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_layout_c(prp_id, layout)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_LAYOUT_C'::h5pget_layout_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(OUT) :: layout
+              END FUNCTION h5pget_layout_c
+            END INTERFACE
+
+            hdferr = h5pget_layout_c(prp_id, layout)
+          END SUBROUTINE h5pget_layout_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_filter_f 
+!
+! Purpose: 	Adds a filter to the filter pipeline. 
+!
+! Inputs:  
+!		prp_id		- data creation or transfer property list 
+!				  identifier
+!		filter		- filter to be added to the pipeline 
+!		flags		- bit vector specifying certain general
+!				  properties of the filter
+!		cd_nelmts	- number of elements in cd_values
+!		cd_values	- auxiliary data for the filter
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		February, 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_filter_f(prp_id, filter, flags, cd_nelmts, cd_values,  hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_filter_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(IN) :: filter  !Filter to be added to the pipeline.
+            INTEGER, INTENT(IN) :: flags  !Bit vector specifying certain general
+                                          !properties of the filter.
+            INTEGER(SIZE_T), INTENT(IN) :: cd_nelmts  !Number of elements in cd_values.
+            INTEGER, DIMENSION(*), INTENT(IN) :: cd_values  !Auxiliary data for the filter.
+
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_filter_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_filter_c(prp_id, filter, flags, cd_nelmts, cd_values)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FILTER_C'::h5pset_filter_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id 
+              INTEGER, INTENT(IN) :: filter 
+              INTEGER, INTENT(IN) :: flags 
+              INTEGER(SIZE_T), INTENT(IN) :: cd_nelmts 
+              INTEGER, DIMENSION(*), INTENT(IN) :: cd_values 
+              END FUNCTION h5pset_filter_c
+            END INTERFACE
+
+            hdferr = h5pset_filter_c(prp_id, filter, flags, cd_nelmts, cd_values )
+          END SUBROUTINE h5pset_filter_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_nfilters_f 
+!
+! Purpose: 	Returns the number of filters in the pipeline. 
+!
+! Inputs:  
+!		prp_id		- data creation or transfer property list 
+!				  identifier
+! Outputs:  
+!		nfilters	- number of filters in the pipeline
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_nfilters_f (prp_id, nfilters, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_nfilters_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(OUT) :: nfilters !the number of filters in the pipeline
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_nfilters_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_nfilters_c(prp_id, nfilters)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_NFILTERS_C'::h5pget_nfilters_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(OUT) :: nfilters
+              END FUNCTION h5pget_nfilters_c
+            END INTERFACE
+
+            hdferr = h5pget_nfilters_c(prp_id, nfilters)
+          END SUBROUTINE h5pget_nfilters_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_filter_f 
+!
+! Purpose: 	Returns information about a filter in a pipeline
+!
+! Inputs:  
+!		prp_id		- data creation or transfer property list 
+!				  identifier
+! Outputs:  
+!				  identifier
+!		filter		- filter to be added to the pipeline 
+!		flags		- bit vector specifying certain general
+!				  properties of the filter
+!		cd_nelmts	- number of elements in cd_values
+!		cd_values	- auxiliary data for the filter
+!		namelen		- number of characters in the name buffer
+!		name		- buffer to retrieve filter name
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_filter_f(prp_id, filter_number, flags, cd_nelmts, cd_values, namelen, name, filter_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_filter_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(IN) :: filter_number  !Sequence number within the filter
+                                                  !pipeline of the filter for which 
+                                                  !information is sought
+            INTEGER, DIMENSION(*), INTENT(OUT) :: cd_values  !Auxiliary data for the filter.
+            INTEGER, INTENT(OUT) :: flags  !Bit vector specifying certain general
+                                          !properties of the filter.
+            INTEGER(SIZE_T), INTENT(INOUT) :: cd_nelmts  !Number of elements in cd_values.
+            INTEGER(SIZE_T), INTENT(IN) :: namelen !Anticipated number of characters in name.
+            CHARACTER(LEN=*), INTENT(OUT) :: name !Name of the filter
+            INTEGER, INTENT(OUT) :: filter_id ! filter identification number  
+
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+
+!            INTEGER, EXTERNAL :: h5pget_filter_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_filter_c(prp_id, filter_number, flags, cd_nelmts,  &
+                                              cd_values, namelen, name, filter_id )
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_FILTER_C'::h5pget_filter_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(IN) :: filter_number 
+              INTEGER, DIMENSION(*), INTENT(OUT) :: cd_values
+              INTEGER, INTENT(OUT) :: flags 
+              INTEGER(SIZE_T), INTENT(INOUT) :: cd_nelmts
+              INTEGER(SIZE_T), INTENT(IN) :: namelen
+              CHARACTER(LEN=*), INTENT(OUT) :: name
+              INTEGER, INTENT(OUT) :: filter_id
+              END FUNCTION h5pget_filter_c
+            END INTERFACE
+
+            hdferr = h5pget_filter_c(prp_id, filter_number, flags, cd_nelmts,  & 
+                                     cd_values, namelen, name, filter_id )
+          END SUBROUTINE h5pget_filter_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_external_f 
+!
+! Purpose: 	Adds an external file to the list of external files. 
+!
+! Inputs:   
+!		prp_id		- dataset creation property list identifier
+!		name		- name of external file
+!		offset		- offset in bytes from the beginning of the 
+!				  file to the location in the file
+!				  where the data starts
+!		bytes		- size of the external file data. 
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_external_f(prp_id, name, offset,bytes, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_external_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+            CHARACTER(LEN=*), INTENT(IN) :: name !Name of an external file
+            INTEGER, INTENT(IN) :: offset !Offset, in bytes, from the beginning 
+                                          !of the file to the location in the file 
+                                          !where the data starts.
+            INTEGER(HSIZE_T), INTENT(IN) :: bytes ! Number of bytes reserved in the 
+                                                 !file for the data
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+            INTEGER :: namelen
+
+!            INTEGER, EXTERNAL :: h5pset_external_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_external_c(prp_id, name,namelen, offset, bytes)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_EXTERNAL_C'::h5pset_external_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER :: namelen
+              INTEGER, INTENT(IN) :: offset
+              INTEGER(HSIZE_T), INTENT(IN) :: bytes
+              END FUNCTION h5pset_external_c
+            END INTERFACE
+
+            namelen = LEN(name)
+            hdferr = h5pset_external_c(prp_id, name, namelen, offset, bytes)
+          END SUBROUTINE h5pset_external_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_external_count_f 
+!
+! Purpose: 	Returns the number of external files for a dataset. 
+!
+! Inputs:  
+!		prp_id		- dataset creation property list identifier
+! Outputs:  
+!		count		- number of external files for the 
+!				  specified dataset
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_external_count_f (prp_id, count, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_external_count_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(OUT) :: count !number of external files for the 
+                                          !specified dataset
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+!            INTEGER, EXTERNAL :: h5pget_external_count_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_external_count_c(prp_id, count)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_EXTERNAL_COUNT_C'::h5pget_external_count_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id 
+              INTEGER, INTENT(OUT) :: count
+              END FUNCTION h5pget_external_count_c
+            END INTERFACE
+
+            hdferr = h5pget_external_count_c(prp_id, count)
+          END SUBROUTINE h5pget_external_count_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_external_f 
+!
+! Purpose: 	Returns information about an external file. 
+!
+! Inputs:  
+!		prp_id		- dataset creation property list identifier
+! Outputs:  
+!		idx		- external file index 
+!		name_size	- maximum size of name array
+!		name		- name of the external file	
+!		name		- name of external file
+!	 	offset		- offset in bytes from the beginning of the 
+!				  file to the location in the file
+!				  where the data starts
+!		bytes		- size of the external file data
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pget_external_f(prp_id, idx, name_size, name, offset,bytes, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_external_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+            INTEGER, INTENT(IN) :: idx !External file index.
+            INTEGER(SIZE_T), INTENT(IN) :: name_size !Maximum length of name array 
+            CHARACTER(LEN=*), INTENT(OUT) :: name !Name of an external file
+            INTEGER, INTENT(OUT) :: offset !Offset, in bytes, from the beginning 
+                                          !of the file to the location in the file 
+                                          !where the data starts.
+            INTEGER(HSIZE_T), INTENT(OUT) :: bytes ! Number of bytes reserved in the 
+                                                 !file for the data
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_external_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_external_c(prp_id, idx, name_size, name, offset, bytes)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_EXTERNAL_C'::h5pget_external_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(IN) :: idx 
+              INTEGER(SIZE_T), INTENT(IN) :: name_size
+              CHARACTER(LEN=*), INTENT(OUT) :: name
+              INTEGER, INTENT(OUT) :: offset
+              INTEGER(HSIZE_T), INTENT(OUT) :: bytes
+              END FUNCTION h5pget_external_c
+            END INTERFACE
+
+            hdferr = h5pget_external_c(prp_id, idx, name_size, name, offset, bytes)
+          END SUBROUTINE h5pget_external_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_hyper_cache_f 
+!
+! Purpose: 	Indicates whether to cache hyperslab blocks during I/O
+!
+! Inputs:  
+!		prp_id		- dataset transfer property list identifier
+!		cache		- A flag indicating whether caching is to 
+!				  be set to on (1) or off (0). 
+!		limit		- maximum size of the hyperslab block to
+!			          cache; 0 (zero) indicates no limit
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_hyper_cache_f(prp_id, cache, limit, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_hyper_cache_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+            INTEGER, INTENT(IN) :: cache !
+            INTEGER, INTENT(IN) :: limit ! Maximum size of the hyperslab block to 
+                                         !cache. 0 (zero) indicates no limit.
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_hyper_cache_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_hyper_cache_c(prp_id, cache, limit)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_HYPER_CACHE_C'::h5pset_hyper_cache_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(IN) :: cache 
+              INTEGER, INTENT(IN) :: limit 
+              END FUNCTION h5pset_hyper_cache_c
+            END INTERFACE
+
+            hdferr = h5pset_hyper_cache_c(prp_id, cache, limit)
+          END SUBROUTINE h5pset_hyper_cache_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_hyper_cache_f 
+!
+! Purpose: 	Returns information regarding the caching of hyperslab 
+!		blocks during I/O. 
+!
+! Inputs:  
+!		prp_id		- dataset transfer property list identifier
+! Outputs:  
+!		cache		- a flag indicating whether caching is  
+!				  set to on (1) or off (0). 
+!		limit		- maximum size of the hyperslab block to
+!			          cache; 0 (zero) indicates no limit
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_hyper_cache_f(prp_id, cache, limit, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_hyper_cache_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+            INTEGER, INTENT(OUT) :: cache !
+            INTEGER, INTENT(OUT) :: limit ! Maximum size of the hyperslab block to 
+                                         !cache. 0 (zero) indicates no limit.
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+
+!            INTEGER, EXTERNAL :: h5pget_hyper_cache_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_hyper_cache_c(prp_id, cache, limit)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_HYPER_CACHE_C'::h5pget_hyper_cache_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(OUT) :: cache 
+              INTEGER, INTENT(OUT) :: limit 
+              END FUNCTION h5pget_hyper_cache_c
+            END INTERFACE
+
+            hdferr = h5pget_hyper_cache_c(prp_id, cache, limit)
+          END SUBROUTINE h5pget_hyper_cache_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_btree_ratios_f 
+!
+! Purpose: 	Sets B-tree split ratios for a dataset transfer 
+!		property list. 
+!
+! Inputs:  	
+!		prp_id		- the dataset transfer property list 
+!				  identifier 
+!		left		- the B-tree split ratio for left-most nodes 
+!		middle		- the B-tree split ratio for all other nodes
+!		right		- the B-tree split ratio for right-most nodes
+! 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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_btree_ratios_f(prp_id, left, middle, right, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_btree_ratios_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+            REAL, INTENT(IN) :: left !The B-tree split ratio for left-most nodes.
+            REAL, INTENT(IN) :: middle !The B-tree split ratio for all other nodes 
+            REAL, INTENT(IN) :: right !The B-tree split ratio for right-most 
+                                      !nodes and lone nodes. 
+
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_btree_ratios_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION  h5pset_btree_ratios_c(prp_id, left, middle, right)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_BTREE_RATIOS_C'::h5pset_btree_ratios_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              REAL, INTENT(IN) :: left
+              REAL, INTENT(IN) :: middle
+              REAL, INTENT(IN) :: right
+              END FUNCTION h5pset_btree_ratios_c
+            END INTERFACE
+
+            hdferr = h5pset_btree_ratios_c(prp_id, left, middle, right)
+          END SUBROUTINE h5pset_btree_ratios_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_btree_ratios_f 
+!
+! Purpose: 	Gets B-tree split ratios for a dataset transfer property list
+!
+! Inputs:  
+!		prp_id		- the dataset transfer property list 
+!				  identifier 
+! Outputs:  
+!		left		- the B-tree split ratio for left-most nodes 
+!		middle		- the B-tree split ratio for all other nodes
+!		right		- the B-tree split ratio for right-most nodes
+!		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).  March 14, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_btree_ratios_f(prp_id, left, middle, right, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_btree_ratios_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+            REAL, INTENT(OUT) :: left !The B-tree split ratio for left-most nodes.
+            REAL, INTENT(OUT) :: middle !The B-tree split ratio for all other nodes 
+            REAL, INTENT(OUT) :: right !The B-tree split ratio for right-most 
+                                      !nodes and lone nodes. 
+
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+
+!            INTEGER, EXTERNAL :: h5pget_btree_ratios_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION  h5pget_btree_ratios_c(prp_id, left, middle, right)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_BTREE_RATIOS_C'::h5pget_btree_ratios_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              REAL, INTENT(OUT) :: left
+              REAL, INTENT(OUT) :: middle
+              REAL, INTENT(OUT) :: right
+              END FUNCTION h5pget_btree_ratios_c
+            END INTERFACE
+
+            hdferr = h5pget_btree_ratios_c(prp_id, left, middle, right)
+          END SUBROUTINE h5pget_btree_ratios_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_fclose_degree_f 
+!
+! Purpose: 	Returns the degree for the file close behavior.
+!
+! Inputs:  
+!		fapl_id		- file access property list identifier
+! Outputs:  
+!		degree  	- one of the following:
+!				  Possible values are:
+!				  H5F_CLOSE_DEFAULT_F
+!				  H5F_CLOSE_WEAK_F
+!				  H5F_CLOSE_SEMI_F
+!				  H5F_CLOSE_STRONG_F
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        September 26, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_fclose_degree_f(fapl_id, degree, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_fclose_degree_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: fapl_id ! File Access Property list identifier 
+            INTEGER, INTENT(OUT) :: degree     ! Possible values
+                                              ! are: 
+						!  H5F_CLOSE_DEFAULT_F
+						!  H5F_CLOSE_WEAK_F
+						!  H5F_CLOSE_SEMI_F
+						!  H5F_CLOSE_STRONG_F
+
+            INTEGER, INTENT(OUT) :: hdferr    ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_fclose_degree_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_fclose_degree_c(fapl_id, degree)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+         !MS$ATTRIBUTES C,reference,alias:'_H5PGET_FCLOSE_DEGREE_C'::h5pget_fclose_degree_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: fapl_id
+              INTEGER, INTENT(OUT) :: degree
+              END FUNCTION h5pget_fclose_degree_c
+            END INTERFACE
+
+            hdferr = h5pget_fclose_degree_c(fapl_id, degree) 
+          END SUBROUTINE h5pget_fclose_degree_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_fclose_degree_f 
+!
+! Purpose: 	Sets the degree for the file close behavior.
+!
+! Inputs:  
+!		fapl_id		- file access property list identifier
+!		degree  	- one of the following:
+!				  Possible values are:
+!				  H5F_CLOSE_DEFAULT_F
+!				  H5F_CLOSE_WEAK_F
+!				  H5F_CLOSE_SEMI_F
+!				  H5F_CLOSE_STRONG_F
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        September 26, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_fclose_degree_f(fapl_id, degree, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fclose_degree_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: fapl_id ! File Access Property list identifier 
+            INTEGER, INTENT(IN) :: degree     ! Possible values
+                                              ! are: 
+						!  H5F_CLOSE_DEFAULT_F
+						!  H5F_CLOSE_WEAK_F
+						!  H5F_CLOSE_SEMI_F
+						!  H5F_CLOSE_STRONG_F
+
+            INTEGER, INTENT(OUT) :: hdferr    ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pset_fclose_degree_c(fapl_id, degree)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FCLOSE_DEGREE_C'::h5pset_fclose_degree_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: fapl_id
+              INTEGER, INTENT(IN) :: degree
+              END FUNCTION h5pset_fclose_degree_c
+            END INTERFACE
+
+            hdferr = h5pset_fclose_degree_c(fapl_id, degree) 
+          END SUBROUTINE h5pset_fclose_degree_f
+
+!----------------------------------------------------------------------
+! Name:		h5pequal_f 
+!
+! Purpose: 	Checks if two property lists are eqaul
+!
+! Inputs:  
+!		plist1_id	- property list identifier
+!		plist2_id	- property list identifier
+! Outputs:  
+!               flag		- flag, possible values
+!				  .TRUE. or .FALSE.
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1, flag is set to .FALSE.   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        September 30, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pequal_f(plist1_id, plist2_id, flag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pequal_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist1_id ! Property list identifier 
+            INTEGER(HID_T), INTENT(IN) :: plist2_id ! Property list identifier 
+            LOGICAL, INTENT(OUT)       :: flag      ! Flag
+            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+            INTEGER                    :: c_flag
+
+            INTERFACE
+              INTEGER FUNCTION h5pequal_c(plist1_id, plist2_id, c_flag)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PEQUAL_C'::h5pequal_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist1_id
+              INTEGER(HID_T), INTENT(IN) :: plist2_id
+              INTEGER, INTENT(OUT) :: c_flag
+              END FUNCTION h5pequal_c
+            END INTERFACE
+
+            flag = .FALSE.
+            hdferr = h5pequal_c(plist1_id, plist2_id, c_flag) 
+            if (c_flag .GT. 0) flag = .TRUE.
+          END SUBROUTINE h5pequal_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_buffer_f 
+!
+! Purpose: 	Sets sixe for conversion buffer
+!
+! Inputs:  
+!		plist_id	- data transfer property list identifier
+!               size		- buffer size 
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 2, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_buffer_f(plist_id, size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_buffer_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id ! Data transfer property list identifier 
+            INTEGER(HSIZE_T), INTENT(IN) :: size  ! Buffer size in bytes; 
+                                                   ! buffer is allocated and freed by 
+                                                   ! the library.
+            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pset_buffer_c(plist_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PSET_BUFFER_C'::h5pset_buffer_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER(HSIZE_T), INTENT(IN) :: size
+              END FUNCTION h5pset_buffer_c
+            END INTERFACE
+
+            hdferr = h5pset_buffer_c(plist_id, size) 
+          END SUBROUTINE h5pset_buffer_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_buffer_f 
+!
+! Purpose: 	Gets size for conversion buffer
+!
+! Inputs:  
+!		plist_id	- data transfer property list identifier
+! Outputs:  
+!               size		- buffer size 
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 2, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_buffer_f(plist_id, size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_buffer_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id ! Data transfer property list identifier 
+            INTEGER(HSIZE_T), INTENT(OUT) :: size ! Buffer size in bytes; 
+                                                   ! buffer is allocated and freed by 
+                                                   ! the library.
+            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pget_buffer_c(plist_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PGET_BUFFER_C'::h5pget_buffer_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER(HSIZE_T), INTENT(OUT) :: size
+              END FUNCTION h5pget_buffer_c
+            END INTERFACE
+
+            hdferr = h5pget_buffer_c(plist_id, size) 
+          END SUBROUTINE h5pget_buffer_f
+
+!----------------------------------------------------------------------
+! Name:		h5pfill_value_defined_f
+!
+! Purpose: 	Check if fill value is defined.
+!
+! Inputs:  
+!		plist_id	- dataset creation property list identifier
+! Outputs:  
+!               flag            - fill value status flag
+!                                 Possible values are:
+!				    H5D_FILL_VALUE_ERROR_F
+!				    H5D_FILL_VALUE_UNDEFINED_F
+!				    H5D_FILL_VALUE_DEFAULT_F
+!				    H5D_FILL_VALUE_USER_DEFINED_F
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 4, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pfill_value_defined_f(plist_id, flag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pfill_value_defined_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id 
+            INTEGER, INTENT(OUT) :: flag
+            INTEGER, INTENT(OUT)       :: hdferr    
+
+            INTERFACE
+              INTEGER FUNCTION h5pfill_value_defined_c(plist_id, flag)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PFILL_VALUE_DEFINED_C'::h5pfill_value_defined_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER, INTENT(OUT) :: flag
+              END FUNCTION h5pfill_value_defined_c
+            END INTERFACE
+
+            hdferr = h5pfill_value_defined_c(plist_id, flag) 
+          END SUBROUTINE h5pfill_value_defined_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_alloc_time_f
+!
+! Purpose: 	Set space allocation time for dataset during creation.
+!
+! Inputs:  
+!		plist_id	- dataset creation property list identifier
+!               flag            - allocation time flag
+!                                 Possible values are:
+!				    H5D_ALLOC_TIME_ERROR_F
+!				    H5D_ALLOC_TIME_DEFAULT_F
+!				    H5D_ALLOC_TIME_EARLY_F
+!				    H5D_ALLOC_TIME_LATE_F
+!				    H5D_ALLOC_TIME_INCR_F
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 4, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_alloc_time_f(plist_id, flag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_alloc_time_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id 
+            INTEGER, INTENT(IN) :: flag
+            INTEGER, INTENT(OUT)       :: hdferr    
+
+            INTERFACE
+              INTEGER FUNCTION h5pset_alloc_time_c(plist_id, flag)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PSET_ALLOC_TIME_C'::h5pset_alloc_time_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER, INTENT(IN) :: flag
+              END FUNCTION h5pset_alloc_time_c
+            END INTERFACE
+
+            hdferr = h5pset_alloc_time_c(plist_id, flag) 
+          END SUBROUTINE h5pset_alloc_time_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_alloc_time_f
+!
+! Purpose: 	Get space allocation time for dataset during creation.
+!
+! Inputs:  
+!		plist_id	- dataset creation property list identifier
+! Outputs:  
+!               flag            - allocation time flag
+!                                 Possible values are:
+!				    H5D_ALLOC_TIME_ERROR_F
+!				    H5D_ALLOC_TIME_DEFAULT_F
+!				    H5D_ALLOC_TIME_EARLY_F
+!				    H5D_ALLOC_TIME_LATE_F
+!				    H5D_ALLOC_TIME_INCR_F
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 4, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_alloc_time_f(plist_id, flag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_alloc_time_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id 
+            INTEGER, INTENT(OUT) :: flag
+            INTEGER, INTENT(OUT)       :: hdferr    
+
+            INTERFACE
+              INTEGER FUNCTION h5pget_alloc_time_c(plist_id, flag)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PGET_ALLOC_TIME_C'::h5pget_alloc_time_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER, INTENT(OUT) :: flag
+              END FUNCTION h5pget_alloc_time_c
+            END INTERFACE
+
+            hdferr = h5pget_alloc_time_c(plist_id, flag) 
+          END SUBROUTINE h5pget_alloc_time_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_fill_time_f
+!
+! Purpose: 	Set fill value writing time for dataset
+!
+! Inputs:  
+!		plist_id	- dataset creation property list identifier
+!               flag            - fill time flag
+!                                 Possible values are:
+!				    H5D_FILL_TIME_ERROR_F
+!				    H5D_FILL_TIME_ALLOC_F
+!				    H5D_FILL_TIME_NEVER_F
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 4, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_fill_time_f(plist_id, flag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fill_time_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id 
+            INTEGER, INTENT(IN) :: flag
+            INTEGER, INTENT(OUT)       :: hdferr    
+
+            INTERFACE
+              INTEGER FUNCTION h5pset_fill_time_c(plist_id, flag)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FILL_TIME_C'::h5pset_fill_time_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER, INTENT(IN) :: flag
+              END FUNCTION h5pset_fill_time_c
+            END INTERFACE
+
+            hdferr = h5pset_fill_time_c(plist_id, flag) 
+          END SUBROUTINE h5pset_fill_time_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_fill_time_f
+!
+! Purpose: 	Get fill value writing time for dataset
+!
+! Inputs:  
+!		plist_id	- dataset creation property list identifier
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!               flag            - fill time flag
+!                                 Possible values are:
+!				    H5D_FILL_TIME_ERROR_F
+!				    H5D_FILL_TIME_ALLOC_F
+!				    H5D_FILL_TIME_NEVER_F
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 4, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_fill_time_f(plist_id, flag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fill_time_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id 
+            INTEGER, INTENT(OUT) :: flag
+            INTEGER, INTENT(OUT)       :: hdferr    
+
+            INTERFACE
+              INTEGER FUNCTION h5pget_fill_time_c(plist_id, flag)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PGET_FILL_TIME_C'::h5pget_fill_time_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER, INTENT(OUT) :: flag
+              END FUNCTION h5pget_fill_time_c
+            END INTERFACE
+
+            hdferr = h5pget_fill_time_c(plist_id, flag) 
+          END SUBROUTINE h5pget_fill_time_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_meta_block_size_f 
+!
+! Purpose: 	Sets the minimum size of metadata block allocations 
+!
+! Inputs:  
+!		plist_id	- file access property list identifier
+!               size		- metatdata block size
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 7, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_meta_block_size_f(plist_id, size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_meta_block_size_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier 
+            INTEGER(HSIZE_T), INTENT(IN) :: size  ! Block size in bytes; 
+            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pset_meta_block_size_c(plist_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PSET_META_BLOCK_SIZE_C'::h5pset_meta_block_size_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER(HSIZE_T), INTENT(IN) :: size
+              END FUNCTION h5pset_meta_block_size_c
+            END INTERFACE
+
+            hdferr = h5pset_meta_block_size_c(plist_id, size) 
+          END SUBROUTINE h5pset_meta_block_size_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_meta_block_size_f 
+!
+! Purpose: 	Gets the minimum size of metadata block allocations 
+!
+! Inputs:  
+!		plist_id	- file access property list identifier
+! Outputs:  
+!               size		- metatdata block size
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 7, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_meta_block_size_f(plist_id, size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_meta_block_size_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier 
+            INTEGER(HSIZE_T), INTENT(OUT) :: size  ! Block size in bytes; 
+            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pget_meta_block_size_c(plist_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PGET_META_BLOCK_SIZE_C'::h5pget_meta_block_size_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER(HSIZE_T), INTENT(OUT) :: size
+              END FUNCTION h5pget_meta_block_size_c
+            END INTERFACE
+
+            hdferr = h5pget_meta_block_size_c(plist_id, size) 
+          END SUBROUTINE h5pget_meta_block_size_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_sieve_buf_size_f 
+!
+! Purpose: 	Sets the maximum size of the data sieve buffer
+!
+! Inputs:  
+!		plist_id	- file access property list identifier
+!               size		- sieve buffer size
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 7, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_sieve_buf_size_f(plist_id, size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_sieve_buf_size_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier 
+            INTEGER(SIZE_T), INTENT(IN) :: size  ! Buffer size in bytes; 
+            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pset_sieve_buf_size_c(plist_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PSET_SIEVE_BUF_SIZE_C'::h5pset_sieve_buf_size_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER(SIZE_T), INTENT(IN) :: size
+              END FUNCTION h5pset_sieve_buf_size_c
+            END INTERFACE
+
+            hdferr = h5pset_sieve_buf_size_c(plist_id, size) 
+          END SUBROUTINE h5pset_sieve_buf_size_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_sieve_buf_size_f 
+!
+! Purpose: 	Gets the maximum size of the data sieve buffer
+!
+! Inputs:  
+!		plist_id	- file access property list identifier
+! Outputs:  
+!               size		- sieve buffer size
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 7, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_sieve_buf_size_f(plist_id, size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_sieve_buf_size_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier 
+            INTEGER(SIZE_T), INTENT(OUT) :: size   ! Buffer size in bytes 
+            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pget_sieve_buf_size_c(plist_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PGET_SIEVE_BUF_SIZE_C'::h5pget_sieve_buf_size_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER(SIZE_T), INTENT(OUT) :: size
+              END FUNCTION h5pget_sieve_buf_size_c
+            END INTERFACE
+
+            hdferr = h5pget_sieve_buf_size_c(plist_id, size) 
+          END SUBROUTINE h5pget_sieve_buf_size_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_small_data_block_size_f 
+!
+! Purpose: 	Sets the minimum size of "small" raw data block
+!
+! Inputs:  
+!		plist_id	- file access property list identifier
+!               size		- small raw data block size
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 7, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_small_data_block_size_f(plist_id, size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_small_data_block_size_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier 
+            INTEGER(HSIZE_T), INTENT(IN) :: size    ! Small raw data block size
+            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pset_small_data_block_size_c(plist_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PSET_SMALL_DATA_BLOCK_SIZE_C'::h5pset_small_data_block_size_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER(HSIZE_T), INTENT(IN) :: size
+              END FUNCTION h5pset_small_data_block_size_c
+            END INTERFACE
+
+            hdferr = h5pset_small_data_block_size_c(plist_id, size) 
+          END SUBROUTINE h5pset_small_data_block_size_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_small_data_block_size_f 
+!
+! Purpose: 	Gets the minimum size of "small" raw data block
+!
+! Inputs:  
+!		plist_id	- file access property list identifier
+! Outputs:  
+!               size		- small raw data block size
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 7, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_small_data_block_size_f(plist_id, size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_small_data_block_size_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier 
+            INTEGER(HSIZE_T), INTENT(OUT) :: size    ! Small raw data block size
+            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pget_small_data_block_size_c(plist_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PGET_SMALL_DATA_BLOCK_SIZE_C'::h5pget_small_data_block_size_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER(HSIZE_T), INTENT(OUT) :: size
+              END FUNCTION h5pget_small_data_block_size_c
+            END INTERFACE
+
+            hdferr = h5pget_small_data_block_size_c(plist_id, size) 
+          END SUBROUTINE h5pget_small_data_block_size_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_hyper_vector_size_f 
+!
+! Purpose: 	Set the number of "I/O" vectors (vector size)
+!
+! Inputs:  
+!		plist_id	- dataset transfer property list identifier
+!               size		- vector size
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 7, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_hyper_vector_size_f(plist_id, size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_hyper_vector_size_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset transfer property list identifier 
+            INTEGER(SIZE_T), INTENT(IN) :: size     ! Vector size
+            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pset_hyper_vector_size_c(plist_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PSET_HYPER_VECTOR_SIZE_C'::h5pset_hyper_vector_size_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER(SIZE_T), INTENT(IN) :: size
+              END FUNCTION h5pset_hyper_vector_size_c
+            END INTERFACE
+
+            hdferr = h5pset_hyper_vector_size_c(plist_id, size) 
+          END SUBROUTINE h5pset_hyper_vector_size_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_hyper_vector_size_f 
+!
+! Purpose: 	Get the number of "I/O" vectors (vector size)
+!
+! Inputs:  
+!		plist_id	- dataset transfer property list identifier
+! Outputs:  
+!               size		- vector size
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 7, 2002	
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_hyper_vector_size_f(plist_id, size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_hyper_vector_size_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset transfer property list identifier 
+            INTEGER(SIZE_T), INTENT(OUT) :: size     ! Vector size
+            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pget_hyper_vector_size_c(plist_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+        !MS$ATTRIBUTES C,reference,alias:'_H5PGET_HYPER_VECTOR_SIZE_C'::h5pget_hyper_vector_size_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist_id
+              INTEGER(SIZE_T), INTENT(OUT) :: size
+              END FUNCTION h5pget_hyper_vector_size_c
+            END INTERFACE
+
+            hdferr = h5pget_hyper_vector_size_c(plist_id, size) 
+          END SUBROUTINE h5pget_hyper_vector_size_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_integer 
+!
+! Purpose: 	Sets a property list value
+!
+! Inputs:  
+!		prp_id		- iproperty list identifier to modify
+!		name 		- name of property to modify
+!		value		- value to set property to
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_integer(prp_id, name, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_integer
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+            INTEGER,   INTENT(IN) :: value ! Property value
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pset_c(prp_id, name, name_len, value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_C'::h5pset_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              INTEGER, INTENT(IN) :: value
+              END FUNCTION h5pset_c
+            END INTERFACE
+
+            name_len = LEN(name)
+        hdferr = h5pset_c(prp_id, name , name_len, value)
+          END SUBROUTINE h5pset_integer
+
+!----------------------------------------------------------------------
+! Name:		h5pset_real
+!
+! Purpose: 	Sets a property list value
+!
+! Inputs:  
+!		prp_id		- iproperty list identifier to modify
+!		name 		- name of property to modify
+!		value		- value to set property to
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_real(prp_id, name, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_real
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+            REAL,   INTENT(IN) :: value ! Property value
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pset_c(prp_id, name, name_len, value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_C'::h5pset_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              REAL, INTENT(IN) :: value
+              END FUNCTION h5pset_c
+            END INTERFACE
+
+            name_len = LEN(name)
+        hdferr = h5pset_c(prp_id, name , name_len, value)
+          END SUBROUTINE h5pset_real
+
+!----------------------------------------------------------------------
+! Name:		h5pset_double
+!
+! Purpose: 	Sets a property list value
+!
+! Inputs:  
+!		prp_id		- iproperty list identifier to modify
+!		name 		- name of property to modify
+!		value		- value to set property to
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_double(prp_id, name, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_double
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+            DOUBLE PRECISION,   INTENT(IN) :: value ! Property value
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pset_c(prp_id, name, name_len, value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_C'::h5pset_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              DOUBLE PRECISION, INTENT(IN) :: value
+              END FUNCTION h5pset_c
+            END INTERFACE
+
+            name_len = LEN(name)
+        hdferr = h5pset_c(prp_id, name , name_len, value)
+          END SUBROUTINE h5pset_double
+
+!----------------------------------------------------------------------
+! Name:		h5pset_char
+!
+! Purpose: 	Sets a property list value
+!
+! Inputs:  
+!		prp_id		- iproperty list identifier to modify
+!		name 		- name of property to modify
+!		value		- value to set property to
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pset_char(prp_id, name, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_char
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+            CHARACTER(LEN=*),   INTENT(IN) :: value ! Property value
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+            INTEGER :: value_len
+
+            INTERFACE
+              INTEGER FUNCTION h5psetc_c(prp_id, name, name_len, value, value_len)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSETC_C'::h5psetc_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              !DEC$ATTRIBUTES reference :: value
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              CHARACTER(LEN=*), INTENT(IN) :: value
+              INTEGER, INTENT(IN)         :: value_len
+              END FUNCTION h5psetc_c
+            END INTERFACE
+
+            name_len = LEN(name)
+            value_len = LEN(value)
+            hdferr = h5psetc_c(prp_id, name , name_len, value, value_len)
+          END SUBROUTINE h5pset_char
+
+!----------------------------------------------------------------------
+! Name:		h5pget_integer 
+!
+! Purpose: 	Gets a property list value
+!
+! Inputs:  
+!		prp_id		- iproperty list identifier to modify
+!		name 		- name of property to modify
+! Outputs:  
+!		value		- value of property
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_integer(prp_id, name, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_integer
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+            INTEGER,   INTENT(OUT) :: value ! Property value
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pget_c(prp_id, name, name_len, value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_C'::h5pget_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              INTEGER, INTENT(OUT) :: value
+              END FUNCTION h5pget_c
+            END INTERFACE
+
+            name_len = LEN(name)
+        hdferr = h5pget_c(prp_id, name , name_len, value)
+          END SUBROUTINE h5pget_integer
+
+!----------------------------------------------------------------------
+! Name:		h5pget_real
+!
+! Purpose: 	Gets a property list value
+!
+! Inputs:  
+!		prp_id		- iproperty list identifier to modify
+!		name 		- name of property to modify
+! Outputs:  
+!		value		- value of property
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_real(prp_id, name, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_real
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+            REAL,   INTENT(OUT) :: value ! Property value
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pget_c(prp_id, name, name_len, value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_C'::h5pget_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              REAL, INTENT(OUT) :: value
+              END FUNCTION h5pget_c
+            END INTERFACE
+
+            name_len = LEN(name)
+            hdferr = h5pget_c(prp_id, name , name_len, value)
+          END SUBROUTINE h5pget_real
+
+!----------------------------------------------------------------------
+! Name:		h5pget_double
+!
+! Purpose: 	Gets a property list value
+!
+! Inputs:  
+!		prp_id		- iproperty list identifier to modify
+!		name 		- name of property to modify
+! Outputs:  
+!		value		- value of property
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_double(prp_id, name, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_double
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+            DOUBLE PRECISION,   INTENT(OUT) :: value ! Property value
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pget_c(prp_id, name, name_len, value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_C'::h5pget_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              DOUBLE PRECISION, INTENT(OUT) :: value
+              END FUNCTION h5pget_c
+            END INTERFACE
+
+            name_len = LEN(name)
+            hdferr = h5pget_c(prp_id, name , name_len, value)
+          END SUBROUTINE h5pget_double
+
+!----------------------------------------------------------------------
+! Name:		h5pget_char
+!
+! Purpose: 	Gets a property list value
+!
+! Inputs:  
+!		prp_id		- iproperty list identifier to modify
+!		name 		- name of property to modify
+! Outputs:  
+!		value		- value of property
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_char(prp_id, name, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_char
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+            CHARACTER(LEN=*),   INTENT(OUT) :: value ! Property value
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+            INTEGER :: value_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pgetc_c(prp_id, name, name_len, value, value_len)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGETC_C'::h5pgetc_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              !DEC$ATTRIBUTES reference :: value
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              CHARACTER(LEN=*), INTENT(OUT) :: value
+              INTEGER, INTENT(IN)         :: value_len
+              END FUNCTION h5pgetc_c
+            END INTERFACE
+
+            name_len = LEN(name)
+            value_len = LEN(value)
+            hdferr = h5pgetc_c(prp_id, name , name_len, value, value_len)
+          END SUBROUTINE h5pget_char
+
+!----------------------------------------------------------------------
+! Name:		h5pexist_f 
+!
+! Purpose: 	Queries whether a property name exists in a property list or class. 
+!
+! Inputs:  
+!		prp_id		- iproperty list identifier to query
+!		name 		- name of property to check for
+! Outputs:  
+!               flag            - logical flag
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pexist_f(prp_id, name, flag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pexist_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+            LOGICAL, INTENT(OUT) :: flag          ! .TRUE. if exists, .FALSE.
+                                                  ! otherwise
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pexist_c(prp_id, name, name_len)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PEXIST_C'::h5pexist_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              END FUNCTION h5pexist_c
+            END INTERFACE
+            flag = .FALSE.
+            name_len = LEN(name)
+            hdferr = h5pexist_c(prp_id, name , name_len)
+            if (hdferr > 0) then
+                flag = .TRUE.
+                hdferr = 0
+            endif
+          END SUBROUTINE h5pexist_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_size_f 
+!
+! Purpose: 	Queries the size of a property value in bytes.
+!
+! Inputs:  
+!		prp_id		- property list identifier to query
+!		name 		- name of property to query
+! Outputs:  
+!               size            - size of property in bytes
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_size_f(prp_id, name, size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_size_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to query
+            INTEGER(SIZE_T), INTENT(OUT) :: size  ! Size in bytes
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pget_size_c(prp_id, name, name_len, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_SIZE_C'::h5pget_size_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              INTEGER(SIZE_T), INTENT(OUT) :: size
+              END FUNCTION h5pget_size_c
+            END INTERFACE
+            name_len = LEN(name)
+            hdferr = h5pget_size_c(prp_id, name , name_len, size)
+          END SUBROUTINE h5pget_size_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_npros_f 
+!
+! Purpose: 	Queries number of properties in property list or class
+!
+! Inputs:  
+!		prp_id		- iproperty list identifier to query
+! Outputs:  
+!               nprops          - number of properties in property object
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_nprops_f(prp_id, nprops, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_nprops_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id    ! Property list identifier 
+            INTEGER(SIZE_T), INTENT(OUT) :: nprops  ! iNumber of properties
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pget_nprops_c(prp_id, nprops)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_NPROPS_C'::h5pget_nprops_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(SIZE_T), INTENT(OUT) :: nprops
+              END FUNCTION h5pget_nprops_c
+            END INTERFACE
+            hdferr = h5pget_nprops_c(prp_id, nprops)
+          END SUBROUTINE h5pget_nprops_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_class_name_f 
+!
+! Purpose: 	Queries the ithe name of a class.
+!
+! Inputs:  
+!		prp_id		- property list identifier to query
+! Outputs:  
+!		name 		- name of a class
+!		hdferr:		- error code		
+!                                       
+!				 	Success:  Actual lenght of the class name
+!                                                 If provided buffer "name" is 
+!                                                 smaller, than name will be 
+!                                                 truncated to fit into
+!                                                 provided user buffer
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_class_name_f(prp_id, name, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_class_name_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(INOUT) :: name  ! Buffer to retireve class name
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pget_class_name_c(prp_id, name, name_len)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_CLASS_NAME_C'::h5pget_class_name_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              CHARACTER(LEN=*), INTENT(INOUT) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              END FUNCTION h5pget_class_name_c
+            END INTERFACE
+            name_len = LEN(name)
+            hdferr = h5pget_class_name_c(prp_id, name , name_len)
+          END SUBROUTINE h5pget_class_name_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_class_parent_f 
+!
+! Purpose: 	Retrieves the parent class of a genric property class. 
+!
+! Inputs:  
+!		prp_id		- property list identifier to query
+! Outputs:  
+!		parent_id 	- identifier of the parent class
+!		hdferr:		- error code		
+!                                       
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_class_parent_f(prp_id, parent_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_class_parent_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id     ! Property list identifier 
+            INTEGER(HID_T), INTENT(OUT) :: parent_id ! Parent class property list 
+                                                     ! identifier 
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pget_class_parent_c(prp_id, parent_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_CLASS_PARENT_C'::h5pget_class_parent_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HID_T), INTENT(OUT) :: parent_id
+              END FUNCTION h5pget_class_parent_c
+            END INTERFACE
+            hdferr = h5pget_class_parent_c(prp_id, parent_id)
+          END SUBROUTINE h5pget_class_parent_f
+
+!----------------------------------------------------------------------
+! Name:		h5pisa_class_f 
+!
+! Purpose: 	Determines whether a property list is a member of a class. 
+!
+! Inputs:  
+!		plist		- property list identifier 
+!		pclass		- identifier of the property class
+! Outputs:  
+!               flag            - .TRUE. if a member, .FALSE. otherwise
+!		hdferr:		- error code		
+!                                       
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pisa_class_f(plist, pclass, flag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pisa_class_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist     ! Property list identifier 
+            INTEGER(HID_T), INTENT(IN) :: pclass    ! Class identifier
+            LOGICAL, INTENT(OUT) :: flag            ! logical flag
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pisa_class_c(plist, pclass)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PISA_CLASS_C'::h5pisa_class_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: plist
+              INTEGER(HID_T), INTENT(IN) :: pclass
+              END FUNCTION h5pisa_class_c
+            END INTERFACE
+            flag = .FALSE.
+            hdferr = h5pisa_class_c(plist, pclass)
+            if (hdferr .gt. 0) then
+                flag = .TRUE.
+                hdferr = 0
+            endif
+          END SUBROUTINE h5pisa_class_f
+
+!----------------------------------------------------------------------
+! Name:		h5pcopy_prop_f 
+!
+! Purpose: 	Copies a property from one list or class to another.
+!
+! Inputs:  
+!		dst_id		- Identifier of the destination property list
+!		src_id		- Identifier of the source property list 
+!		name 		- name of the property to copy
+! Outputs:  
+!		hdferr:		- error code		
+!                                       
+!				 	Success: 0 
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pcopy_prop_f(dst_id, src_id, name, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pcopy_prop_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: dst_id  ! Destination property list 
+                                                  ! identifier 
+            INTEGER(HID_T), INTENT(IN) :: src_id  ! Source property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name ! Property name
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pcopy_prop_c(dst_id, src_id, name, name_len)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PCOPY_PROP_C'::h5pcopy_prop_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: dst_id
+              INTEGER(HID_T), INTENT(IN) :: src_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              END FUNCTION h5pcopy_prop_c
+            END INTERFACE
+            name_len = LEN(name)
+            hdferr = h5pcopy_prop_c(dst_id, src_id, name , name_len)
+          END SUBROUTINE h5pcopy_prop_f
+
+!----------------------------------------------------------------------
+! Name:		h5premove_f 
+!
+! Purpose: 	Removes a property from a property list. 
+
+!
+! Inputs:  
+!		plid		- Property list identofoer
+!		name 		- name of the property to remove
+! Outputs:  
+!		hdferr:		- error code		
+!                                       
+!				 	Success: 0 
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5premove_f(plid, name, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5premove_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plid   ! property list identifier
+            CHARACTER(LEN=*), INTENT(IN) :: name ! name of property to remove
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5premove_c(plid, name, name_len)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PREMOVE_C'::h5premove_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: plid 
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              END FUNCTION h5premove_c
+            END INTERFACE
+            name_len = LEN(name)
+            hdferr = h5premove_c(plid, name , name_len)
+          END SUBROUTINE h5premove_f
+
+!----------------------------------------------------------------------
+! Name:		h5punregister_f 
+!
+! Purpose: 	Removes a property from a property list class. 
+
+!
+! Inputs:  
+!		class		- Property list class identifier
+!		name 		- name of the property to remove
+! Outputs:  
+!		hdferr:		- error code		
+!                                       
+!				 	Success: 0 
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5punregister_f(class, name, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5punregister_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: class  ! property list class identifier
+            CHARACTER(LEN=*), INTENT(IN) :: name ! name of property to remove
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5punregister_c(class, name, name_len)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PUNREGISTER_C'::h5punregister_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: class
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              END FUNCTION h5punregister_c
+            END INTERFACE
+            name_len = LEN(name)
+            hdferr = h5punregister_c(class, name , name_len)
+          END SUBROUTINE h5punregister_f
+
+!----------------------------------------------------------------------
+! Name:		h5pclose_class_f 
+!
+! Purpose: 	Closes an existing property list class. 
+
+!
+! Inputs:  
+!		class		- Property list class identifier
+! Outputs:  
+!		hdferr:		- error code		
+!                                       
+!				 	Success: 0 
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pclose_class_f(class, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pclose_class_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: class  ! property list class identifier
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5pclose_class_c(class)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PCLOSE_CLASS_C'::h5pclose_class_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: class
+              END FUNCTION h5pclose_class_c
+            END INTERFACE
+            hdferr = h5pclose_class_c(class)
+          END SUBROUTINE h5pclose_class_f
+
+!----------------------------------------------------------------------
+! Name:		h5pcreate_class_f 
+!
+! Purpose: 	Create a new property list class
+
+!
+! Inputs:  
+!		parent		- Property list identifier of the parent class
+!                                 Possible values include:
+!                                 H5P_NO_CLASS_F
+!                                 H5P_FILE_CREATE_F
+!                                 H5P_FILE_ACCESS_F
+!                                 H5P_DATASET_CREATE_F
+!                                 H5P_DATASET_XFER_F
+!                                 H5P_MOUNT_F
+!		name 		- name of the class we are creating
+! Outputs:  
+!               class           - porperty list class identifier
+!		hdferr:		- error code		
+!                                       
+!				 	Success: 0 
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 9, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pcreate_class_f(parent, name, class, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pcreate_class_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: parent  ! parent property list class 
+                                                  ! identifier
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! name of property tocreate 
+            INTEGER(HID_T), INTENT(OUT) :: class  ! property list class identifier
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pcreate_class_c(parent, name, name_len,&
+                                                 class) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PCREATE_CLASS_C'::h5pcreate_class_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: parent
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              INTEGER(HID_T), INTENT(OUT) :: class
+              END FUNCTION h5pcreate_class_c
+            END INTERFACE
+            name_len = LEN(name)
+            hdferr = h5pcreate_class_c(parent, name , name_len, &
+                                       class)
+          END SUBROUTINE h5pcreate_class_f
+
+!----------------------------------------------------------------------
+! Name:		h5pregister_integer
+!
+! Purpose: 	Registers a permanent property with a property list class.
+!
+! Inputs:  
+!		class		- property list class to register 
+!                                 permanent property within
+!		name 		- name of property to register
+!               size            - size of property in bytes
+!		value		- default value for property in newly 
+!                                 created property lists
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 10, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pregister_integer(class, name, size, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pregister_integer
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: class   ! Property list class identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to register
+            INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value	
+            INTEGER,   INTENT(IN) :: value        ! Property value
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pregister_c(class, name, name_len, size, value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PREGISTER_C'::h5pregister_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: class
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              INTEGER(SIZE_T), INTENT(IN) :: size 
+              INTEGER, INTENT(IN) :: value
+              END FUNCTION h5pregister_c
+            END INTERFACE
+
+            name_len = LEN(name)
+            hdferr = h5pregister_c(class, name , name_len, size, value)
+          END SUBROUTINE h5pregister_integer
+
+!----------------------------------------------------------------------
+! Name:		h5pregister_real
+!
+! Purpose: 	Registers a permanent property with a property list class.
+!
+! Inputs:  
+!		class		- property list class to register 
+!                                 permanent property within
+!		name 		- name of property to register
+!               size            - size of property in bytes
+!		value		- default value for property in newly 
+!                                 created property lists
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 10, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pregister_real(class, name, size, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pregister_real
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: class   ! Property list class identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to register
+            INTEGER(SIZE_T), INTENT(IN) :: size   ! size of the property value	
+            REAL,   INTENT(IN) :: value           ! Property value
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pregister_c(class, name, name_len, size, value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PREGISTER_C'::h5pregister_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: class
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              INTEGER(SIZE_T), INTENT(IN) :: size 
+              REAL, INTENT(IN) :: value
+              END FUNCTION h5pregister_c
+            END INTERFACE
+
+            name_len = LEN(name)
+            hdferr = h5pregister_c(class, name , name_len, size, value)
+          END SUBROUTINE h5pregister_real
+
+!----------------------------------------------------------------------
+! Name:		h5pregister_double
+!
+! Purpose: 	Registers a permanent property with a property list class.
+!
+! Inputs:  
+!		class		- property list class to register 
+!                                 permanent property within
+!		name 		- name of property to register
+!               size            - size of property in bytes
+!		value		- default value for property in newly 
+!                                 created property lists
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 10, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pregister_double(class, name, size, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pregister_double
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: class   ! Property list class identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to register
+            INTEGER(SIZE_T), INTENT(IN) :: size  ! size of the property value	
+            DOUBLE PRECISION,   INTENT(IN) :: value        ! Property value
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pregister_c(class, name, name_len, size, value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PREGISTER_C'::h5pregister_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: class
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              INTEGER(SIZE_T), INTENT(IN) :: size 
+              DOUBLE PRECISION, INTENT(IN) :: value
+              END FUNCTION h5pregister_c
+            END INTERFACE
+
+            name_len = LEN(name)
+            hdferr = h5pregister_c(class, name , name_len, size, value)
+          END SUBROUTINE h5pregister_double
+
+!----------------------------------------------------------------------
+! Name:		h5pregister_char
+!
+! Purpose: 	Registers a permanent property with a property list class.
+!
+! Inputs:  
+!		class		- property list class to register 
+!                                 permanent property within
+!		name 		- name of property to register
+!               size            - size of property in bytes
+!		value		- default value for property in newly 
+!                                 created property lists
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 10, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pregister_char(class, name, size, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pregister_char
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: class   ! Property list class identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to register
+            INTEGER(SIZE_T), INTENT(IN) :: size  ! size of the property value	
+            CHARACTER(LEN=*),   INTENT(IN) :: value        ! Property value
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+            INTEGER :: name_len
+            INTEGER :: value_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pregisterc_c(class, name, name_len, size, value, &
+                                              value_len)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PREGISTERC_C'::h5pregisterc_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              !DEC$ATTRIBUTES reference :: value
+              INTEGER(HID_T), INTENT(IN) :: class
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              INTEGER(SIZE_T), INTENT(IN) :: size 
+              CHARACTER(LEN=*), INTENT(IN) :: value
+              INTEGER, INTENT(IN)          :: value_len
+              END FUNCTION h5pregisterc_c
+            END INTERFACE
+
+            name_len = LEN(name)
+            value_len = LEN(value)
+            hdferr = h5pregisterc_c(class, name , name_len, size, value, value_len)
+          END SUBROUTINE h5pregister_char
+
+!----------------------------------------------------------------------
+! Name:		h5pinsert_integer
+!
+! Purpose: 	Registers a temporary property with a property list class.
+!
+! Inputs:  
+!		plist		- property list identifier
+!		name 		- name of property to insert
+!               size            - size of property in bytes
+!		value		- initial value for the property 
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 10, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pinsert_integer(plist, name, size, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pinsert_integer
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist   ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to insert 
+            INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value	
+            INTEGER,   INTENT(IN) :: value        ! Property value
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pinsert_c(plist, name, name_len, size, value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PINSERT_C'::h5pinsert_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: plist
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              INTEGER(SIZE_T), INTENT(IN) :: size 
+              INTEGER, INTENT(IN) :: value
+              END FUNCTION h5pinsert_c
+            END INTERFACE
+
+            name_len = LEN(name)
+            hdferr = h5pinsert_c(plist, name , name_len, size, value)
+          END SUBROUTINE h5pinsert_integer
+
+!----------------------------------------------------------------------
+! Name:		h5pinsert_real
+!
+! Purpose: 	Registers a temporary property with a property list class.
+!
+! Inputs:  
+!		plist		- property list identifier
+!                                 permanent property within
+!		name 		- name of property to insert
+!               size            - size of property in bytes
+!		value		- initial value for the property 
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 10, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pinsert_real(plist, name, size, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pinsert_real
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist   ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to insert 
+            INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value	
+            REAL,   INTENT(IN) :: value           ! Property value
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pinsert_c(plist, name, name_len, size, value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PINSERT_C'::h5pinsert_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: plist
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              INTEGER(SIZE_T), INTENT(IN) :: size 
+              REAL, INTENT(IN) :: value
+              END FUNCTION h5pinsert_c
+            END INTERFACE
+
+            name_len = LEN(name)
+            hdferr = h5pinsert_c(plist, name , name_len, size, value)
+          END SUBROUTINE h5pinsert_real
+
+!----------------------------------------------------------------------
+! Name:		h5pinsert_double
+!
+! Purpose: 	Registers a temporary property with a property list class.
+!
+! Inputs:  
+!		plist		- property list identifier
+!                                 permanent property within
+!		name 		- name of property to insert
+!               size            - size of property in bytes
+!		value		- initial value for the property 
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 10, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pinsert_double(plist, name, size, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pinsert_double
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist   ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to insert 
+            INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value	
+            DOUBLE PRECISION, INTENT(IN) :: value ! Property value
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+            INTEGER :: name_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pinsert_c(plist, name, name_len, size, value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PINSERT_C'::h5pinsert_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: plist
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              INTEGER(SIZE_T), INTENT(IN) :: size 
+              DOUBLE PRECISION, INTENT(IN) :: value
+              END FUNCTION h5pinsert_c
+            END INTERFACE
+
+            name_len = LEN(name)
+            hdferr = h5pinsert_c(plist, name , name_len, size, value)
+          END SUBROUTINE h5pinsert_double
+
+!----------------------------------------------------------------------
+! Name:		h5pinsert_char
+!
+! Purpose: 	Registers a temporary property with a property list class.
+!
+! Inputs:  
+!		plist		- property list identifier
+!                                 permanent property within
+!		name 		- name of property to insert
+!               size            - size of property in bytes
+!		value		- initial value for the property 
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        October 10, 2002	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pinsert_char(plist, name, size, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pinsert_char
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: plist      ! Property list identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name     ! Name of property to insert 
+            INTEGER(SIZE_T), INTENT(IN) :: size      ! Size of property value	
+            CHARACTER(LEN=*),   INTENT(IN) :: value  ! Property value
+            INTEGER, INTENT(OUT) :: hdferr           ! Error code
+            INTEGER :: name_len
+            INTEGER :: value_len
+
+            INTERFACE
+              INTEGER FUNCTION h5pinsertc_c(plist, name, name_len, size, value, value_len)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PINSERTC_C'::h5pinsertc_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              !DEC$ATTRIBUTES reference :: value
+              INTEGER(HID_T), INTENT(IN) :: plist
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)         :: name_len
+              INTEGER(SIZE_T), INTENT(IN) :: size 
+              CHARACTER(LEN=*), INTENT(IN) :: value
+              INTEGER, INTENT(IN)         :: value_len
+              END FUNCTION h5pinsertc_c
+            END INTERFACE
+
+            name_len = LEN(name)
+            value_len = LEN(value)
+            hdferr = h5pinsertc_c(plist, name , name_len, size, value, value_len)
+          END SUBROUTINE h5pinsert_char
+
+!----------------------------------------------------------------------
+! Name:		h5pset_shuffle_f 
+!
+! Purpose: 	Sets shuffling filter
+!
+! Inputs:  
+!		prp_id		- dataset creation property list identifier
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		March 12, 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pset_shuffle_f(prp_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_shuffle_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_shuffle_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_shuffle_c(prp_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_SHUFFLE_C'::h5pset_shuffle_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              END FUNCTION h5pset_shuffle_c
+            END INTERFACE
+            hdferr = h5pset_shuffle_c(prp_id)
+
+          END SUBROUTINE h5pset_shuffle_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_edc_check_f 
+!
+! Purpose: 	Enables/disables error detecting  
+!
+! Inputs:  
+!		prp_id		- dataset creation property list identifier
+!               flag            - EDC flag; possible values:
+!                                   H5Z_DISABLE_EDC_F
+!                                   H5Z_ENABLE_EDC_F
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		March 13, 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pset_edc_check_f(prp_id, flag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_edc_check_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(IN) :: flag          ! Checksum filter flag
+            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_edc_check_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_edc_check_c(prp_id, flag)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_EDC_CHECK_C'::h5pset_edc_check_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(IN) :: flag 
+              END FUNCTION h5pset_edc_check_c
+            END INTERFACE
+            hdferr = h5pset_edc_check_c(prp_id, flag)
+
+          END SUBROUTINE h5pset_edc_check_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_edc_check_f 
+!
+! Purpose: 	Queries error detecting  
+!
+! Inputs:  
+!		prp_id		- dataset creation property list identifier
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		March 13, 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pget_edc_check_f(prp_id, flag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_edc_check_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Dataset transfer property list identifier 
+            INTEGER, INTENT(OUT) :: flag        ! Checksum filter flag
+                                                 ! May have one of the following values:
+                                                 ! H5Z_ERROR_EDC_F
+                                                 ! H5Z_DISABLE_EDC_F
+                                                 ! H5Z_ENABLE_EDC_F
+                                                 ! H5Z_NO_EDC_F
+            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+
+!            INTEGER, EXTERNAL :: h5pget_edc_check_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_edc_check_c(prp_id, flag)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_EDC_CHECK_C'::h5pget_edc_check_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(OUT) :: flag
+              END FUNCTION h5pget_edc_check_c
+            END INTERFACE
+            hdferr = h5pget_edc_check_c(prp_id, flag)
+
+          END SUBROUTINE h5pget_edc_check_f
+!----------------------------------------------------------------------
+! Name:		h5pset_fletcher32_f 
+!
+! Purpose: 	Sets Fletcher32 checksum of EDC for a dataset creation 
+!               property list.
+!
+! Inputs:  
+!		prp_id		- dataset creation property list identifier
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		March 13, 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pset_fletcher32_f(prp_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fletcher32_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_fletcher32_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_fletcher32_c(prp_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FLETCHER32_C'::h5pset_fletcher32_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              END FUNCTION h5pset_fletcher32_c
+            END INTERFACE
+            hdferr = h5pset_fletcher32_c(prp_id)
+
+          END SUBROUTINE h5pset_fletcher32_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_family_offset_f 
+!
+! Purpose: 	Sets offset for family file driver.
+!
+! Inputs:  
+!		prp_id		- file creation property list identifier
+!               offset		- file offset
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		19 March 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pset_family_offset_f(prp_id, offset, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_family_offset_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER(HSIZE_T), INTENT(IN) :: offset ! Offset in bytes
+            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_family_offset_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_family_offset_c(prp_id, offset)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FAMILY_OFFSET_C'::h5pset_family_offset_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER(HSIZE_T), INTENT(IN) :: offset 
+              END FUNCTION h5pset_family_offset_c
+            END INTERFACE
+            hdferr = h5pset_family_offset_c(prp_id, offset)
+
+          END SUBROUTINE h5pset_family_offset_f
+
+!----------------------------------------------------------------------
+! Name:		h5pset_fapl_multi_l 
+!
+! Purpose: 	Sets up use of the multi-file driver. 
+!
+! Inputs:  
+!		prp_id		- file creation property list identifier
+!               mem_map         - mapping array
+!               memb_fapl       - property list for each memory usage type
+!               memb_name       - names of member file
+!               relax           - flag 
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		20 March 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pset_fapl_multi_l(prp_id, memb_map, memb_fapl, memb_name, memb_addr, relax, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fapl_multi_l
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+            INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_map
+            INTEGER(HID_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_fapl
+            CHARACTER(LEN=*), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_name
+            !INTEGER(HADDR_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_addr
+            REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_addr
+            LOGICAL, INTENT(IN) :: relax
+            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+            INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm
+            INTEGER :: maxlen
+            INTEGER :: flag
+            INTEGER :: i
+
+!            INTEGER, EXTERNAL :: h5pset_fapl_multi_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, &
+                                                   maxlen, memb_addr, flag)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FAPL_MULTI_C'::h5pset_fapl_multi_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: memb_name
+              INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+              INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_map
+              INTEGER(HID_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_fapl
+              CHARACTER(LEN=*), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_name
+              REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_addr
+              !INTEGER(HADDR_T), DIMENSION(H5FD_MEM_NTYPES_F), INTENT(IN) :: memb_addr
+              INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm
+              INTEGER :: maxlen
+              INTEGER, INTENT(IN) :: flag
+              END FUNCTION h5pset_fapl_multi_c
+            END INTERFACE
+            maxlen = LEN(memb_name(1))
+            do i=0, H5FD_MEM_NTYPES_F-1
+             lenm(i) = LEN_TRIM(memb_name(i))
+            enddo
+            flag = 0
+            if (relax) flag = 1
+            hdferr = h5pset_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, maxlen, memb_addr, flag) 
+
+          END SUBROUTINE h5pset_fapl_multi_l
+!----------------------------------------------------------------------
+! Name:		h5pset_fapl_multi_s 
+!
+! Purpose: 	Sets up use of the multi-file driver. 
+!
+! Inputs:  
+!		prp_id		- file creation property list identifier
+!               relax           - flag 
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		31 March 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pset_fapl_multi_s(prp_id, relax, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_fapl_multi_s
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+            LOGICAL, INTENT(IN) :: relax
+            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+            INTEGER :: flag
+
+!            INTEGER, EXTERNAL :: h5pset_fapl_multi_sc
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_fapl_multi_sc(prp_id,flag) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_FAPL_MULTI_SC'::h5pset_fapl_multi_sc
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+              INTEGER, INTENT(IN) :: flag
+              END FUNCTION h5pset_fapl_multi_sc
+            END INTERFACE
+            flag = 0
+            if (relax) flag = 1
+            hdferr = h5pset_fapl_multi_sc(prp_id, flag) 
+
+          END SUBROUTINE h5pset_fapl_multi_s
+!----------------------------------------------------------------------
+! Name:		h5pget_fapl_multi_f 
+!
+! Purpose: 	Sets up use of the multi-file driver. 
+!
+! Inputs:  
+!		prp_id		- file creation property list identifier
+! Outputs:  
+!               mem_map         - mapping array
+!               memb_fapl       - property list for each memory usage type
+!               memb_name       - names of member file
+!               relax           - flag 
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				maxlen_out - maximum length for memb_name array element 
+!
+! Programmer:	Elena Pourmal
+!		24 March 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pget_fapl_multi_f(prp_id, memb_map, memb_fapl, memb_name, memb_addr, relax, hdferr, maxlen_out) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_fapl_multi_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+            INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_map
+            INTEGER(HID_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_fapl
+            CHARACTER(LEN=*), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_name
+            !INTEGER(HADDR_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_addr
+            REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_addr
+            INTEGER, OPTIONAL, INTENT(OUT) :: maxlen_out 
+            LOGICAL, INTENT(OUT) :: relax
+            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+            INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm
+            INTEGER :: maxlen
+            INTEGER :: c_maxlen_out 
+            INTEGER :: flag
+            INTEGER :: i
+
+!            INTEGER, EXTERNAL :: h5pget_fapl_multi_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, &
+                                                   maxlen, memb_addr, flag, c_maxlen_out)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_FAPL_MULTI_C'::h5pget_fapl_multi_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: memb_name
+              INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+              INTEGER, DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_map
+              INTEGER(HID_T), DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_fapl
+              CHARACTER(LEN=*), DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_name
+              REAL, DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_addr
+              INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm
+              INTEGER :: maxlen
+              INTEGER :: c_maxlen_out 
+              INTEGER, INTENT(OUT) :: flag
+              END FUNCTION h5pget_fapl_multi_c
+            END INTERFACE
+            maxlen = LEN(memb_name(0))
+            do i=0, H5FD_MEM_NTYPES_F-1
+             lenm(i) = LEN_TRIM(memb_name(i))
+            enddo
+            hdferr = h5pget_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, maxlen, memb_addr, flag, c_maxlen_out) 
+            relax = .TRUE.
+            if(flag .eq. 0) relax = .FALSE. 
+            if(present(maxlen_out)) maxlen_out = c_maxlen_out
+          END SUBROUTINE h5pget_fapl_multi_f
+!----------------------------------------------------------------------
+! Name:		h5pset_szip_f 
+!
+! Purpose: 	Sets up use of szip compression
+!
+! Inputs:  
+!		prp_id		- dataset creation property list identifier
+!               options_mask
+!               pixels_per_block - szip parameters
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		April 10 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pset_szip_f(prp_id, options_mask, pixels_per_block, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pset_szip_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Dataset creation property 
+                                                 ! list identifier 
+            INTEGER, INTENT(IN) :: options_mask
+            INTEGER, INTENT(IN) :: pixels_per_block
+            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+
+!            INTEGER, EXTERNAL :: h5pset_szip_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pset_szip_c(prp_id, options_mask, pixels_per_block) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PSET_SZIP_C'::h5pset_szip_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+              INTEGER, INTENT(IN) :: options_mask
+              INTEGER, INTENT(IN) :: pixels_per_block
+              END FUNCTION h5pset_szip_c
+            END INTERFACE
+            hdferr = h5pset_szip_c(prp_id, options_mask, pixels_per_block) 
+
+          END SUBROUTINE h5pset_szip_f
+
+!----------------------------------------------------------------------
+! Name:		h5pall_filters_avail_f 
+!
+! Purpose: 	Checks if all filters set in the dataset creation
+!               property list are available
+!
+! Inputs:  
+!		prp_id		- data creation property list identifier
+! Outputs:  
+!               flag            - .TRUE. if all filters are available
+!                                 .FALSE. otherwise
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		April 10 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5pall_filters_avail_f(prp_id, flag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pall_filters_avail_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Dataset creation property 
+                                                 ! list identifier 
+            LOGICAL, INTENT(OUT) :: flag
+            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+            INTEGER :: status
+
+!            INTEGER, EXTERNAL :: h5pall_filters_avail_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pall_filters_avail_c(prp_id, status) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PALL_FILTERS_AVAIL_C'::h5pall_filters_avail_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+              INTEGER, INTENT(OUT) :: status
+              END FUNCTION h5pall_filters_avail_c
+            END INTERFACE
+            flag = .TRUE.
+            hdferr = h5pall_filters_avail_c(prp_id, status) 
+            if (status .eq. 0 ) flag = .FALSE.
+
+          END SUBROUTINE h5pall_filters_avail_f
+
+!----------------------------------------------------------------------
+! Name:		h5pget_filter_by_id_f 
+!
+! Purpose: 	Returns information about a filter in a pipeline
+!
+! Inputs:  
+!		prp_id		- data creation or transfer property list 
+!				  identifier
+! Outputs:  
+!		filter_id	- filter identifier
+!		flags		- bit vector specifying certain general
+!				  properties of the filter
+!		cd_nelmts	- number of elements in cd_values
+!		cd_values	- auxiliary data for the filter
+!		namelen		- number of characters in the name buffer
+!		name		- buffer to retrieve filter name
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		April 10 2003
+!
+! Modifications: 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pget_filter_by_id_f(prp_id, filter_id, flags, cd_nelmts, cd_values, namelen, name, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pget_filter_by_id_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+
+            INTEGER, INTENT(IN) :: filter_id  ! Filter identifier
+            INTEGER(SIZE_T), INTENT(INOUT) :: cd_nelmts  !Number of elements in cd_values.
+            INTEGER, DIMENSION(*), INTENT(OUT) :: cd_values  !Auxiliary data for the filter.
+            INTEGER, INTENT(OUT) :: flags  !Bit vector specifying certain general
+                                          !properties of the filter.
+            INTEGER(SIZE_T), INTENT(IN) :: namelen !Anticipated number of characters in name.
+            CHARACTER(LEN=*), INTENT(OUT) :: name !Name of the filter
+
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+
+!            INTEGER, EXTERNAL :: h5pget_filter_by_id_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pget_filter_by_id_c(prp_id, filter_id, flags, cd_nelmts,  &
+                                              cd_values, namelen, name)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PGET_FILTER_BY_ID_C'::h5pget_filter_by_id_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: prp_id
+              INTEGER, INTENT(IN) :: filter_id 
+              INTEGER, DIMENSION(*), INTENT(OUT) :: cd_values
+              INTEGER, INTENT(OUT) :: flags 
+              INTEGER(SIZE_T), INTENT(INOUT) :: cd_nelmts
+              INTEGER(SIZE_T), INTENT(IN) :: namelen
+              CHARACTER(LEN=*), INTENT(OUT) :: name
+              END FUNCTION h5pget_filter_by_id_c
+            END INTERFACE
+
+            hdferr = h5pget_filter_by_id_c(prp_id, filter_id, flags, cd_nelmts,  & 
+                                     cd_values, namelen, name)
+          END SUBROUTINE h5pget_filter_by_id_f
+
+!----------------------------------------------------------------------
+! Name:		h5pmodify_filter_f 
+!
+! Purpose: 	Adds a filter to the filter pipeline. 
+!
+! Inputs:  
+!		prp_id		- data creation or transfer property list 
+!				  identifier
+!		filter		- filter to be modified
+!		flags		- bit vector specifying certain general
+!				  properties of the filter
+!		cd_nelmts	- number of elements in cd_values
+!		cd_values	- auxiliary data for the filter
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		April 10 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5pmodify_filter_f(prp_id, filter, flags, cd_nelmts, cd_values,  hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5pmodify_filter_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+            INTEGER, INTENT(IN) :: filter  !Filter to be modified
+            INTEGER, INTENT(IN) :: flags  !Bit vector specifying certain general
+                                          !properties of the filter.
+            INTEGER(SIZE_T), INTENT(IN) :: cd_nelmts  !Number of elements in cd_values.
+            INTEGER, DIMENSION(*), INTENT(IN) :: cd_values  !Auxiliary data for the filter.
+
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5pmodify_filter_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5pmodify_filter_c(prp_id, filter, flags, cd_nelmts, cd_values)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PMODIFY_FILTER_C'::h5pmodify_filter_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id 
+              INTEGER, INTENT(IN) :: filter 
+              INTEGER, INTENT(IN) :: flags 
+              INTEGER(SIZE_T), INTENT(IN) :: cd_nelmts 
+              INTEGER, DIMENSION(*), INTENT(IN) :: cd_values 
+              END FUNCTION h5pmodify_filter_c
+            END INTERFACE
+
+            hdferr = h5pmodify_filter_c(prp_id, filter, flags, cd_nelmts, cd_values )
+          END SUBROUTINE h5pmodify_filter_f
+
+!----------------------------------------------------------------------
+! Name:		h5premove_filter_f 
+!
+! Purpose: 	Removes filter from the dataset creation property list. 
+!
+! Inputs:  
+!		prp_id		- data creation or transfer property list 
+!				  identifier
+!		filter		- filter to be removed
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!	        August 23, 2004	
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5premove_filter_f(prp_id, filter, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5premove_filter_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: prp_id ! Dataset creation property list
+                                                 ! identifier
+            INTEGER, INTENT(IN) :: filter        ! Filter to be removed
+            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+
+!            INTEGER, EXTERNAL :: h5premove_filter_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5premove_filter_c(prp_id, filter)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5PREMOVE_FILTER_C'::h5premove_filter_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: prp_id 
+              INTEGER, INTENT(IN) :: filter 
+              END FUNCTION h5premove_filter_c
+            END INTERFACE
+
+            hdferr = h5premove_filter_c(prp_id, filter)
+          END SUBROUTINE h5premove_filter_f
+
+     END MODULE H5P

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Rf.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Rf.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Rf.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,238 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 files contains C stubs for H5R Fortran APIs */
+
+#include "H5f90.h"
+
+/*----------------------------------------------------------------------------
+ * Name:        h5rcreate_object_c
+ * Purpose:     Call H5Rcreate to create a reference to an object
+ * Inputs:      loc_id - file or group identifier
+ *              name - name of the dataset
+ *              namelen - name length
+ * Outputs:     ref  - reference to the object
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, December 1, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5rcreate_object_c (haddr_t_f *ref, hid_t_f *loc_id, _fcd name, int_f *namelen)
+{
+     int ret_value = -1;
+     hid_t c_loc_id;
+     int ret_value_c;
+     char *c_name;
+     int c_namelen;
+     hobj_ref_t ref_c;
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Rcreate function.
+      */
+     c_loc_id = *loc_id;
+     ret_value_c = H5Rcreate(&ref_c, c_loc_id, c_name, H5R_OBJECT, -1);
+
+     HDfree(c_name);
+     if (ret_value_c >= 0)  {
+         *ref=(haddr_t_f)ref_c;
+         ret_value = 0;
+     }
+
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5rcreate_region_c
+ * Purpose:     Call H5Rcreate to create a reference to dataset region
+ *              region
+ * Inputs:      loc_id - file or group identifier
+ *              name - name of the dataset
+ *              namelen - name length
+ *              space_id - dataset space identifier
+ * Outputs:     ref  - reference to the dataset region
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, December 1, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5rcreate_region_c (int_f *ref, hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *space_id)
+{
+     int ret_value = -1;
+     hid_t c_loc_id;
+     hid_t c_space_id;
+     int ret_value_c;
+     char *c_name;
+     int c_namelen;
+     hdset_reg_ref_t ref_c;
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Rcreate function.
+      */
+     c_loc_id = *loc_id;
+     c_space_id = *space_id;
+     ret_value_c = H5Rcreate(&ref_c, c_loc_id, c_name, H5R_DATASET_REGION, c_space_id);
+
+     HDfree(c_name);
+     if (ret_value_c >= 0) {
+         HDmemcpy (ref, &ref_c, H5R_DSET_REG_REF_BUF_SIZE);
+         ret_value = 0;
+     }
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5rdereference_region_c
+ * Purpose:     Call H5Rdereference to dereference to dataset region
+ * Inputs:      dset_id - dataset identifier
+ *              ref - reference to the dataset region
+ * Outputs:     obj_id - dereferenced dataset identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, December 1, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5rdereference_region_c (hid_t_f *dset_id, int_f *ref, hid_t_f *obj_id)
+{
+     int ret_value = -1;
+     hid_t c_dset_id;
+     hdset_reg_ref_t ref_c;
+     hid_t c_obj_id;
+
+     HDmemcpy (&ref_c, ref, H5R_DSET_REG_REF_BUF_SIZE);
+
+     /*
+      * Call H5Rdereference function.
+      */
+     c_dset_id = *dset_id;
+     c_obj_id = H5Rdereference(c_dset_id, H5R_DATASET_REGION, &ref_c);
+     if(c_obj_id < 0) return ret_value;
+     *obj_id = (hid_t_f)c_obj_id;
+     ret_value = 0;
+     return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5rdereference_object_c
+ * Purpose:     Call H5Rdereference to dereference an object
+ * Inputs:      dset_id - dataset identifier
+ *              ref - reference to an object
+ * Outputs:     obj_id - dereferenced  object identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, December 1, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5rdereference_object_c (hid_t_f *dset_id, haddr_t_f *ref, hid_t_f *obj_id)
+{
+     int ret_value = -1;
+     hid_t c_dset_id;
+     hid_t c_obj_id;
+     hobj_ref_t ref_c;
+
+     ref_c=*ref;
+
+     /*
+      * Call H5Rdereference function.
+      */
+     c_dset_id = *dset_id;
+     c_obj_id = H5Rdereference(c_dset_id, H5R_OBJECT, &ref_c);
+     if(c_obj_id < 0) return ret_value;
+     *obj_id = (hid_t_f)c_obj_id;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5rget_region_region_object_c
+ * Purpose:     Call H5Rget_region to dereference dataspace region
+ * Inputs:      dset_id - dataset identifier
+ *              ref - reference to the dataset region
+ * Outputs:     space_id - dereferenced  dataset dataspace identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, December 1, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5rget_region_region_c (hid_t_f *dset_id, int_f *ref, hid_t_f *space_id)
+{
+     int ret_value = -1;
+     hid_t c_dset_id;
+     hid_t c_space_id;
+     hdset_reg_ref_t ref_c;
+
+     HDmemcpy (&ref_c, ref, H5R_DSET_REG_REF_BUF_SIZE);
+
+     /*
+      * Call H5Rget_region function.
+      */
+     c_dset_id = *dset_id;
+     c_space_id = H5Rget_region(c_dset_id, H5R_DATASET_REGION, &ref_c);
+     if(c_space_id < 0) return ret_value;
+     *space_id = (hid_t_f)c_space_id;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5rget_object_type_obj_c
+ * Purpose:     Call H5Rget_object_type to retrieve the type of the object reference points
+ *              to
+ * Inputs:      dset_id - dataset identifier
+ *              ref - reference to the dataset region
+ * Outputs:     obj_type - type of dereferenced object
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, December 1, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5rget_object_type_obj_c (hid_t_f *dset_id, haddr_t_f *ref, int_f *obj_type)
+{
+     int ret_value = -1;
+     hid_t c_dset_id;
+     int c_obj_type;
+     hobj_ref_t ref_c;
+
+     ref_c=*ref;
+
+     /*
+      * Call H5Rget_object_type function.
+      */
+     c_dset_id = *dset_id;
+     c_obj_type = H5Rget_obj_type(c_dset_id, H5R_OBJECT, &ref_c);
+     if(c_obj_type < 0) return ret_value;
+     *obj_type = (int_f)c_obj_type;
+     ret_value = 0;
+     return ret_value;
+}

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Rff.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Rff.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Rff.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,477 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 file contains Fortran90 interfaces for H5R functions.
+! 
+      MODULE H5R
+        USE H5GLOBAL
+
+! 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 
+!
+          INTERFACE h5rcreate_f
+
+            MODULE PROCEDURE h5rcreate_object_f
+            MODULE PROCEDURE h5rcreate_region_f 
+
+          END INTERFACE 
+          
+          INTERFACE h5rdereference_f
+
+            MODULE PROCEDURE h5rdereference_object_f
+            MODULE PROCEDURE h5rdereference_region_f 
+
+          END INTERFACE 
+          
+          INTERFACE h5rget_region_f
+
+            MODULE PROCEDURE h5rget_region_region_f 
+
+          END INTERFACE 
+          
+          INTERFACE h5rget_object_type_f
+
+            MODULE PROCEDURE h5rget_object_type_obj_f
+
+          END INTERFACE 
+          
+
+        CONTAINS
+          
+!----------------------------------------------------------------------
+! Name:		h5rcreate_object_f 
+!
+! Purpose: 	Creates reference to the object
+!
+! Inputs:  
+!		loc_id		- location identifier
+!		name		- name of the object at the specified location
+! Outputs:  
+!		ref		- reference to the specified object
+!		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:		This is a module procedure for the h5rcreate_f 
+!			subroutine.		
+!----------------------------------------------------------------------
+  
+          SUBROUTINE h5rcreate_object_f(loc_id, name, ref, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5rcreate_object_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id   ! Location identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the object at location specified
+                                                   ! by loc_id identifier 
+            TYPE(hobj_ref_t_f), INTENT(OUT) :: ref   ! Object reference 
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+
+            INTEGER :: namelen                     ! Name length
+            INTEGER(HADDR_T) :: ref_f              ! Local buffer to pass reference
+
+!            INTEGER, EXTERNAL :: h5fcreate_object_c
+!  Interface is needed for MS FORTRAN
+!
+            INTERFACE
+              INTEGER FUNCTION h5rcreate_object_c(ref_f, loc_id, name, namelen)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5RCREATE_OBJECT_C':: h5rcreate_object_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name 
+              INTEGER(HADDR_T) :: ref_f
+              INTEGER(HID_T), INTENT(IN) :: loc_id  
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER :: namelen
+              END FUNCTION h5rcreate_object_c
+            END INTERFACE
+
+            namelen = LEN(name)
+            ref_f = 0
+            hdferr = h5rcreate_object_c(ref_f, loc_id, name, namelen )
+            ref%ref = ref_f
+        
+          END SUBROUTINE h5rcreate_object_f
+          
+!----------------------------------------------------------------------
+! Name:		h5rcreate_region_f 
+!
+! Purpose: 	Creates r eference to the dataset region
+!
+! Inputs:  
+!		loc_id		- location identifier
+!		name		- name of the dataset at the specified location
+!		space_id	- dataspace identifier that describes selected region
+! Outputs:  
+!		ref		- reference to the dataset region
+!		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:		This is a module procedure for the h5rcreate_f 
+!			subroutine.		
+!----------------------------------------------------------------------
+  
+          SUBROUTINE h5rcreate_region_f(loc_id, name, space_id, ref, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5rcreate_region_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id   ! Location identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the dataset at location specified
+                                                   ! by loc_id identifier 
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataset's dataspace identifier 
+            TYPE(hdset_reg_ref_t_f), INTENT(OUT) :: ref ! Dataset region reference 
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+
+            INTEGER :: namelen                     ! Name length
+            INTEGER :: ref_f(REF_REG_BUF_LEN)          ! Local buffer to pass reference
+
+!            INTEGER, EXTERNAL :: h5fcreate_region_c
+!  Interface is needed for MS FORTRAN
+!
+            INTERFACE
+              INTEGER FUNCTION h5rcreate_region_c(ref_f, loc_id, name, namelen, space_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5RCREATE_REGION_C':: h5rcreate_region_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name 
+!              INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3 
+              INTEGER :: ref_f(REF_REG_BUF_LEN)
+              INTEGER(HID_T), INTENT(IN) :: loc_id  
+              CHARACTER(LEN=*), 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
+          
+!----------------------------------------------------------------------
+! Name:		h5rdereference_object_f
+!
+! Purpose: 	Opens the HDF5 object referenced
+!
+! Inputs:  
+!		dset_id		- identifier of the dataset containing 
+!				  reference		
+!		ref		- reference to open
+! Outputs:  
+!		obj_id		- object_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:		This is a module procedure for the h5rdereference_f 
+!			subroutine.		
+!----------------------------------------------------------------------
+  
+          
+          SUBROUTINE h5rdereference_object_f(dset_id, ref, obj_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5rdereference_object_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier 
+            TYPE(hobj_ref_t_f), INTENT(IN) :: ref   ! Object reference 
+            INTEGER(HID_T), INTENT(OUT) :: obj_id   ! Object identifier 
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+
+            INTEGER :: ref_type     ! Reference type 
+            INTEGER(HADDR_T) :: ref_f          ! Local buffer to pass reference
+
+!            INTEGER, EXTERNAL :: h5h5rdereference_object_c
+!  Interface is needed for MS FORTRAN
+!
+            INTERFACE
+              INTEGER FUNCTION h5rdereference_object_c(dset_id, ref_f, obj_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+           !MS$ATTRIBUTES C,reference,alias:'_H5RDEREFERENCE_OBJECT_C':: h5rdereference_object_c
+              !DEC$ ENDIF
+!              INTEGER, PARAMETER :: REF_OBJ_BUF_LEN = 2
+              INTEGER(HID_T), INTENT(IN) :: dset_id  
+              INTEGER(HADDR_T) :: ref_f
+              INTEGER(HID_T), INTENT(OUT) :: obj_id 
+              END FUNCTION h5rdereference_object_c
+            END INTERFACE
+
+            ref_f = ref%ref
+            hdferr = h5rdereference_object_c(dset_id, ref_f, obj_id )
+
+          END SUBROUTINE h5rdereference_object_f
+          
+!----------------------------------------------------------------------
+! Name:		h5rdereference_region_f
+!
+! Purpose: 	Opens the dataset region
+!
+! Inputs:  
+!		dset_id		- identifier of the dataset containing 
+!				  reference to teh regions		
+!		ref		- reference to open
+! Outputs:  
+!		obj_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:		This is a module procedure for the h5rdereference_f 
+!			subroutine.		
+!----------------------------------------------------------------------
+  
+          
+          SUBROUTINE h5rdereference_region_f(dset_id, ref, obj_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5rdereference_region_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier 
+            TYPE(hdset_reg_ref_t_f), INTENT(IN) :: ref   ! Object reference 
+            INTEGER(HID_T), INTENT(OUT) :: obj_id   ! Dataspace identifier 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code 
+
+            INTEGER :: ref_type      ! Reference type 
+            INTEGER :: ref_f(REF_REG_BUF_LEN)          ! Local buffer to pass reference
+
+!            INTEGER, EXTERNAL :: h5rdereference_region_c
+!  Interface is needed for MS FORTRAN
+!
+            INTERFACE
+              INTEGER FUNCTION h5rdereference_region_c(dset_id, ref_f, obj_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+           !MS$ATTRIBUTES C,reference,alias:'_H5RDEREFERENCE_REGION_C':: h5rdereference_region_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: dset_id  
+!              INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3 
+              INTEGER :: ref_f(REF_REG_BUF_LEN)
+              INTEGER(HID_T), INTENT(OUT) :: obj_id 
+              END FUNCTION h5rdereference_region_c
+            END INTERFACE
+
+            ref_type = H5R_DATASET_REGION_F
+            ref_f = ref%ref
+            hdferr = h5rdereference_region_c(dset_id, ref_f, obj_id )
+
+          END SUBROUTINE h5rdereference_region_f
+          
+!----------------------------------------------------------------------
+! Name:		h5rget_region_region_f
+!
+! Purpose: 	Retrieves a dataspace with the specified region selected
+!
+! Inputs:  
+!		dset_id		- identifier of the dataset containing 
+!				  reference to the regions		
+!		ref		- reference to open
+! Outputs:  
+!		space_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:		This is a module procedure for the h5rget_region_f 
+!			subroutine.		
+!----------------------------------------------------------------------
+  
+          
+          
+          SUBROUTINE h5rget_region_region_f(dset_id, ref, space_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5rget_region_region_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier 
+            TYPE(hdset_reg_ref_t_f), INTENT(IN) :: ref   ! Dataset region reference 
+            INTEGER(HID_T), INTENT(OUT) :: space_id   ! Space identifier 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code 
+            INTEGER :: ref_f(REF_REG_BUF_LEN)          ! Local buffer to pass reference
+
+!            INTEGER, EXTERNAL :: h5rget_region_region_c
+!  Interface is needed for MS FORTRAN
+!
+            INTERFACE
+              INTEGER FUNCTION h5rget_region_region_c(dset_id, ref_f, space_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+           !MS$ATTRIBUTES C,reference,alias:'_H5RGET_REGION_REGION_C':: h5rget_region_region_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: dset_id  
+!              INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3 
+              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
+          
+!----------------------------------------------------------------------
+! Name:		h5rget_object_type_obj_f
+!
+! Purpose: 	Retrieves the type of object that an object reference points to.	
+!
+! Inputs:  
+!		dset_id		- identifier of the dataset containing 
+!				  reference to the objects
+!		ref		- reference to open
+! Outputs:  
+!		obj_type	- object_type, possible values:
+!					  H5G_UNKNOWN_F     (-1)
+!					  H5G_LINK_F         0
+!					  H5G_GROUP_F        1
+!					  H5G_DATASET_F      2
+! 					  H5G_TYPE_F         3
+!
+!		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:		This is a module procedure for the h5rget_object_type_f 
+!			subroutine.		
+!----------------------------------------------------------------------
+  
+
+          SUBROUTINE h5rget_object_type_obj_f(dset_id, ref, obj_type, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5rget_object_type_obj_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier 
+            TYPE(hobj_ref_t_f), INTENT(IN) :: ref   ! Object reference 
+            INTEGER, INTENT(OUT) :: obj_type   ! Object type  
+                                               !  H5G_UNKNOWN_F     (-1)
+                                               !  H5G_LINK_F         0
+                                               !  H5G_GROUP_F        1
+                                               !  H5G_DATASET_F      2
+                                               !  H5G_TYPE_F         3
+
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code 
+            INTEGER(HADDR_T) :: ref_f          ! Local buffer to pass reference
+
+!            INTEGER, EXTERNAL :: h5rget_object_type_obj_c
+!  Interface is needed for MS FORTRAN
+!
+            INTERFACE
+              INTEGER FUNCTION h5rget_object_type_obj_c(dset_id, ref_f, obj_type)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+           !MS$ATTRIBUTES C,reference,alias:'_H5RGET_OBJECT_TYPE_OBJ_C':: h5rget_object_type_obj_c
+              !DEC$ ENDIF
+!              INTEGER, PARAMETER :: REF_OBJ_BUF_LEN = 2
+              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 )
+
+          END SUBROUTINE h5rget_object_type_obj_f
+
+      END MODULE H5R

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Sf.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Sf.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Sf.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,891 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "H5f90.h"
+
+/*----------------------------------------------------------------------------
+ * Name:        h5screate_simple_c
+ * Purpose:     Call H5Screate_simple to create a dataspace
+ * Inputs:      rank - number of dimensions of dataspace
+ *              dims - array of the size of each dimension
+                maxdims - an array of the maximum size of each dimension
+ * Outputs:     space_id - identifier of the created dataspace
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 4, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5screate_simple_c ( int_f *rank, hsize_t_f *dims, hsize_t_f *maxdims, hid_t_f *space_id )
+{
+  int ret_value = -1;
+  hsize_t *c_dims;
+  hsize_t *c_maxdims;
+  hid_t c_space_id;
+  int i;
+
+  c_dims =  malloc(sizeof(hsize_t) * (*rank ));
+  if (!c_dims) return ret_value;
+  c_maxdims =  malloc(sizeof(hsize_t) * (*rank ));
+  if (!c_maxdims) return ret_value;
+
+  /*
+   * Transpose dimension arrays because of C-FORTRAN storage order
+   */
+  for (i = 0; i < *rank ; i++) {
+       c_dims[i] =  dims[*rank - i - 1];
+       c_maxdims[i] = maxdims[*rank - i - 1];
+  }
+
+  c_space_id = H5Screate_simple(*rank, c_dims, c_maxdims);
+  if (c_space_id < 0) return ret_value;
+
+  *space_id = (hid_t_f)c_space_id;
+  ret_value = 0;
+  HDfree (c_dims);
+  HDfree (c_maxdims);
+  return ret_value;
+}
+
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sclose_c
+ * Purpose:     Call H5Sclose to close the dataspace
+ * Inputs:      space_id - identifier of the dataspace to be closed
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 4, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sclose_c ( hid_t_f *space_id )
+{
+  int ret_value = 0;
+  hid_t c_space_id;
+
+  c_space_id = *space_id;
+  if ( H5Sclose(c_space_id) < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5screate_c
+ * Purpose:     Call H5Screate to create a dataspace
+ * Inputs:      classtype - type of the dataspace class
+ * Outputs:     space_id - identifier of the created dataspace
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Tuesday, August 10, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5screate_c ( int_f *classtype, hid_t_f *space_id )
+{
+  H5S_class_t c_classtype;
+  int ret_value = 0;
+  hid_t c_space_id;
+  c_classtype = (H5S_class_t) *classtype;
+  c_space_id = H5Screate(c_classtype);
+
+  if ( c_space_id  < 0  ) ret_value = -1;
+  *space_id = (hid_t_f) c_space_id;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5scopy_c
+ * Purpose:     Call H5Scopy to copy dataspace
+ * Inputs:      space_id - identifier of the dataspace to be copied
+ * Outputs:     new_space_id - identifier of the new datspace
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Tuesday, August 10, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5scopy_c( hid_t_f *space_id , hid_t_f *new_space_id)
+{
+  int ret_value = 0;
+  hid_t c_new_space_id;
+  hid_t c_space_id;
+
+  c_space_id = *space_id;
+  c_new_space_id = H5Scopy(c_space_id);
+  if ( c_new_space_id < 0  ) ret_value = -1;
+
+  *new_space_id = (hid_t_f)c_new_space_id;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sget_select_hyper_nblocks_c
+ * Purpose:     Call H5SH5Sget_select_hyper_nblocks to
+ *              get the the number of hyperslab blocks in
+ *              the current dataspace selection if successful
+ * Inputs:      space_id - identifier of the dataspace
+ * Outputs:     num_blocks -  number of hyperslab blocks in
+ *              the current dataspace selection
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, November 12, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sget_select_hyper_nblocks_c( hid_t_f *space_id , hssize_t_f * num_blocks)
+{
+  int ret_value = 0;
+  hid_t c_space_id;
+  hssize_t c_num_blocks;
+
+  c_space_id = *space_id;
+  c_num_blocks = H5Sget_select_hyper_nblocks(c_space_id);
+  if ( c_num_blocks < 0  ) ret_value = -1;
+
+  *num_blocks = (hssize_t_f)c_num_blocks;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sget_select_elem_npoints_c
+ * Purpose:     Call H5Sget_select_elem_npoints to
+ *              get the the number of element points in
+ *              the current dataspace selection if successful
+ * Inputs:      space_id - identifier of the dataspace
+ * Outputs:     num_points -  number of element points in
+ *              the current dataspace selection
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Monday, November 15, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sget_select_elem_npoints_c( hid_t_f *space_id , hssize_t_f * num_points)
+{
+  int ret_value = 0;
+  hid_t c_space_id;
+  hssize_t c_num_points;
+
+  c_space_id = *space_id;
+  c_num_points = H5Sget_select_elem_npoints(c_space_id);
+  if ( c_num_points < 0  ) ret_value = -1;
+
+  *num_points = (hssize_t_f)c_num_points;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sget_select_hyper_blocklist_c
+ * Purpose:     Call H5Sget_select_hyper_blocklist to
+ *              get a list of the hyperslab blocks currently selected
+ *              Starting with the startblock-th block in the
+ *              list of blocks, num_blocks blocks are put into the user's
+ *              buffer. If the user's buffer fills up before numblocks
+ *              blocks are inserted, the buffer
+ *              will contain only as many blocks as fit.
+ * Inputs:      space_id - identifier of the dataspace
+ *              startblock - Hyperslab block to start with
+ *              num_blocks -  number of hyperslab blocks in
+ *                            the current dataspace selection
+ * Outputs:     buf - List of hyperslab blocks selected
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Monday, November 15, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sget_select_hyper_blocklist_c( hid_t_f *space_id ,hsize_t_f * startblock,
+                                  hsize_t_f * num_blocks, hsize_t_f * buf)
+{
+  int ret_value = -1;
+  hid_t c_space_id;
+  hsize_t c_num_blocks;
+
+  hsize_t i;
+  int rank;
+  hsize_t c_startblock, *c_buf;
+
+  c_space_id = *space_id;
+  c_num_blocks = * num_blocks;
+
+  rank = H5Sget_simple_extent_ndims(c_space_id);
+  if (rank < 0 ) return ret_value;
+  c_startblock = (hsize_t)*startblock;
+
+  c_buf = (hsize_t*)malloc(sizeof(hsize_t)*(size_t)(c_num_blocks*2*rank));
+  if (!c_buf) return ret_value;
+
+  ret_value = H5Sget_select_hyper_blocklist(c_space_id, c_startblock,
+                                            c_num_blocks, c_buf);
+  for(i = 0; i < c_num_blocks*2*rank; i++)
+  {
+      buf[i] = (hsize_t_f)c_buf[i] +1;
+  }
+  HDfree(c_buf);
+  if (ret_value  >= 0  ) ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sget_select_bounds_c
+ * Purpose:     Call H5Sget_select_bounds to retrieve the coordinates
+ *              of the bounding box containing the current selection
+ *              and places them into user-supplied buffers
+ * Inputs:      space_id - identifier of the dataspace
+ * Outputs:     start -  Starting coordinates of the bounding box
+ *              end -  Ending coordinates of the bounding box,
+ *                     i.e., the coordinates of the diagonally opposite corne
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, November 17, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sget_select_bounds_c( hid_t_f *space_id , hsize_t_f * start, hsize_t_f * end)
+{
+  int ret_value = -1;
+  hid_t c_space_id;
+  hsize_t* c_start, *c_end;
+  int i, rank;
+
+  c_space_id = *space_id;
+  rank = H5Sget_simple_extent_ndims(c_space_id);
+  if (rank < 0 ) return ret_value;
+
+  c_start =(hsize_t*) malloc(sizeof(hsize_t)*rank);
+  if (!c_start) return ret_value;
+
+  c_end = (hsize_t*)malloc(sizeof(hsize_t)*rank);
+  if(!c_end) return ret_value;
+
+  ret_value = H5Sget_select_bounds(c_space_id, c_start, c_end);
+  for(i = 0; i < rank; i++)
+  {
+    start[i] = (hsize_t_f)(c_start[i]+1);
+    end[i] = (hsize_t_f)(c_end[i]+1);
+  }
+  if (ret_value  >= 0  ) ret_value = 0;
+
+  HDfree(c_start);
+  HDfree(c_end);
+
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sget_select_elem_pointlist_c
+ * Purpose:     Call  H5Sget_select_elem_pointlist
+ *              get a list of  element points in the
+ *              current dataspace selectin.
+ *              Starting with the startpoint-th point in the
+ *              list of points, numpoints points are put into the user's
+ *              buffer. If the user's buffer fills up before numpoints
+ *              points are inserted, the buffer
+ *              will contain only as many points as fit.
+ * Inputs:      space_id - identifier of the dataspace
+ *              startpoint - Element point to start with
+ *              numpoints -  Number of element points to get
+ * Outputs:     buf - List of element points selected
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Wednesday, November 17, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sget_select_elem_pointlist_c( hid_t_f *space_id ,hsize_t_f * startpoint,
+                                  hsize_t_f * numpoints, hsize_t_f * buf)
+{
+  int ret_value = -1;
+  hid_t c_space_id;
+  hsize_t c_num_points;
+  hsize_t c_startpoint,* c_buf;
+  int i, rank;
+
+  c_space_id = *space_id;
+  c_num_points = (hsize_t)* numpoints;
+
+  rank = H5Sget_simple_extent_ndims(c_space_id);
+  if (rank < 0 ) return ret_value;
+
+  c_startpoint = (hsize_t)*startpoint;
+  c_buf = (hsize_t*)malloc(sizeof(hsize_t)*(size_t)(c_num_points*rank));
+  if (!c_buf) return ret_value;
+  ret_value = H5Sget_select_elem_pointlist(c_space_id, c_startpoint,
+                                            c_num_points, c_buf);
+  for (i = c_num_points*rank-1; i >= 0; i--) {
+      buf[i] = (hsize_t_f)(c_buf[i]+1);
+  }
+
+  if (ret_value  >= 0  ) ret_value = 0;
+
+  HDfree(c_buf);
+
+  return ret_value;
+}
+
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sselect_all_c
+ * Purpose:     Call H5Sselect_all to select entire dataspace
+ * Inputs:      space_id - identifier of the dataspace
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Tuesday, August 10, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sselect_all_c ( hid_t_f *space_id )
+{
+  int ret_value = 0;
+  hid_t c_space_id;
+
+  c_space_id = *space_id;
+  if ( H5Sselect_all(c_space_id) < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sselect_none_c
+ * Purpose:     Call H5Sselect_none to reset the selection region
+ * Inputs:      space_id - identifier of the dataspace
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Tuesday, August 10, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sselect_none_c ( hid_t_f *space_id )
+{
+  int ret_value = 0;
+  hid_t c_space_id;
+
+  c_space_id = *space_id;
+  if ( H5Sselect_none(c_space_id) < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sselect_valid_c
+ * Purpose:     Call H5Sselect_valid to verify that selection
+ *              is within dataspace extent.
+ * Inputs:      space_id - identifier of the dataspace
+ * Outputs:     flag - 0 if not valid selection, 1 if is valid selection,
+ *              and negative on failure.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Tuesday, August 10, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sselect_valid_c ( hid_t_f *space_id , int_f *flag )
+{
+  int ret_value = 0;
+  hid_t c_space_id;
+  htri_t status;
+
+  c_space_id = *space_id;
+  status = H5Sselect_valid(c_space_id);
+  *flag = (int_f)status;
+  if ( status < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sget_simple_extent_npoints_c
+ * Purpose:     Call H5Sget_simple_extent_npoints to determine the number
+ *              of elements in a dataspace
+ * Inputs:      space_id - identifier of the dataspace
+ * Outputs:     npoints - number of points in a dataspace
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 11, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sget_simple_extent_npoints_c ( hid_t_f *space_id , hsize_t_f *npoints )
+{
+  int ret_value = 0;
+  hid_t c_space_id;
+  hsize_t c_npoints;
+
+  c_space_id = *space_id;
+  c_npoints = H5Sget_simple_extent_npoints(c_space_id);
+  if ( c_npoints == 0  ) ret_value = -1;
+  *npoints = (hsize_t_f)c_npoints;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sget_select_npoints_c
+ * Purpose:     Call H5Sget_select_npoints to determine the number
+ *              of elements in a dataspace selection
+ * Inputs:      space_id - identifier of the dataspace
+ * Outputs:     npoints - number of points in a dataspace selection
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 11, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sget_select_npoints_c ( hid_t_f *space_id , hssize_t_f *npoints )
+{
+  int ret_value = 0;
+  hssize_t c_npoints;
+  hid_t c_space_id;
+
+  c_space_id = *space_id;
+  c_npoints = H5Sget_select_npoints(c_space_id);
+  if ( c_npoints == 0  ) ret_value = -1;
+  *npoints = (hssize_t_f)c_npoints;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sget_simple_extent_ndims_c
+ * Purpose:     Call H5Sget_simple_extent_ndims to determine the number
+ *              dimensions
+ * Inputs:      space_id - identifier of the dataspace
+ * Outputs:     rank - number of dataspace dimensions
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 11, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sget_simple_extent_ndims_c ( hid_t_f *space_id , int_f *ndims )
+{
+  int ret_value = 0;
+  hid_t c_space_id;
+  int c_ndims;
+
+  c_space_id = *space_id;
+  c_ndims = H5Sget_simple_extent_ndims(c_space_id);
+  if ( c_ndims < 0  ) ret_value = -1;
+  *ndims = (int_f)c_ndims;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sget_simple_extent_type_c
+ * Purpose:     Call H5Sget_simple_extent_type to determine the class type
+ *              of a dataspace
+ * Inputs:      space_id - identifier of the dataspace
+ * Outputs:     classtype - class type; possible values are:
+ *              H5S_SCALAR_F (0), H5S_SIMPLE_F (1)
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 11, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sget_simple_extent_type_c ( hid_t_f *space_id , int_f *classtype)
+{
+  int ret_value = 0;
+  hid_t c_space_id;
+  H5S_class_t c_classtype;
+
+  c_space_id = *space_id;
+  c_classtype = H5Sget_simple_extent_type(c_space_id);
+  if ( c_classtype < 0  ) ret_value = -1;
+   *classtype = c_classtype;
+/*
+  if (c_classtype == H5S_SCALAR) *classtype = H5S_SCALAR_F;
+  if (c_classtype == H5S_SIMPLE) *classtype = H5S_SIMPLE_F;
+*/
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5soffset_simple_c
+ * Purpose:     Call H5Soffset_simple to set the offset of a simple
+ *              dataspace
+ * Inputs:      space_id - identifier of the dataspace
+ *              offset - offset array
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 11, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5soffset_simple_c ( hid_t_f *space_id , hssize_t_f *offset)
+{
+  int ret_value = -1;
+  hid_t c_space_id;
+  int rank;
+  hssize_t *c_offset;
+  herr_t  status;
+  int i;
+
+  c_space_id = *space_id;
+  rank = H5Sget_simple_extent_ndims(c_space_id);
+  if (rank < 0) return ret_value;
+
+  c_offset = malloc(sizeof(hssize_t)*rank);
+  if (!c_offset) return ret_value;
+
+  /*
+   * Reverse dimensions due to C-FORTRAN storage order.
+   */
+  for (i=0; i < rank; i++) c_offset[i] = offset[rank - i - 1];
+
+  status = H5Soffset_simple(c_space_id, c_offset);
+  if ( status >= 0  ) ret_value = 0;
+  HDfree(c_offset);
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sset_extent_simple_c
+ * Purpose:     Call H5Sset_extent_simple to set or reset size of
+ *              existing  dataspace
+ * Inputs:      space_id - identifier of the dataspace
+ *              rank - dataspace rank
+ *              current_size - array with the new dimension sizes
+ *              maximum_size - aray with maximum sizes of dimensions
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 11, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sset_extent_simple_c ( hid_t_f *space_id , int_f *rank, hsize_t_f *current_size, hsize_t_f *maximum_size)
+{
+  int ret_value = -1;
+  hid_t c_space_id;
+  int c_rank;
+  hsize_t *c_current_size;
+  hsize_t *c_maximum_size;
+  herr_t  status;
+  int i;
+
+  c_current_size = malloc(sizeof(hsize_t)*(*rank));
+  if (!c_current_size) return ret_value;
+
+  c_maximum_size = malloc(sizeof(hsize_t)*(*rank));
+  if (!c_maximum_size) return ret_value;
+
+  /*
+   * Reverse dimensions due to C-FORTRAN storage order.
+   */
+  for (i=0; i < *rank; i++) {
+      c_current_size[i] = (hsize_t)current_size[*rank - i - 1];
+      c_maximum_size[i] = (hsize_t)maximum_size[*rank - i - 1];
+  }
+
+  c_space_id = *space_id;
+  c_rank = *rank;
+  status = H5Sset_extent_simple(c_space_id, c_rank, c_current_size, c_maximum_size);
+  if ( status >= 0  ) ret_value = 0;
+  HDfree(c_current_size);
+  HDfree(c_maximum_size);
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sget_simple_extent_dims_c
+ * Purpose:     Call H5Sget_simple_extent_dims to retrieve sizes of an
+ *              existing  dataspace
+ * Inputs:      space_id - identifier of the dataspace
+ * Outputs:     dims - array with the dimension sizes
+ *              maxdims - aray with maximum sizes of dimensions
+ * Returns:     number of dataspace dimensions (rank) on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 11, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sget_simple_extent_dims_c ( hid_t_f *space_id , hsize_t_f *dims, hsize_t_f *maxdims)
+{
+  int ret_value = -1;
+  hid_t c_space_id;
+  hsize_t *c_dims;
+  hsize_t *c_maxdims;
+  int status;
+  int rank;
+  int i;
+
+  c_space_id = *space_id;
+  rank = H5Sget_simple_extent_ndims(c_space_id);
+  if (rank < 0) return ret_value;
+
+  c_dims = malloc(sizeof(hsize_t)*rank);
+  if (!c_dims) return ret_value;
+
+  c_maxdims = malloc(sizeof(hsize_t)*rank);
+  if (!c_maxdims) return ret_value;
+
+  status = H5Sget_simple_extent_dims(c_space_id, c_dims, c_maxdims);
+  /*
+   * Reverse dimensions due to C-FORTRAN storage order.
+   */
+  for (i=0; i < rank; i++) {
+      dims[rank - i - 1] = (hsize_t_f)c_dims[i];
+      maxdims[rank - i - 1] = (hsize_t_f)c_maxdims[i];
+  }
+
+  if ( status >= 0  ) ret_value = rank;
+  HDfree(c_dims);
+  HDfree(c_maxdims);
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sis_simple_c
+ * Purpose:     Call H5Sis_simple to detrmine if the dataspace
+ *              is simple.
+ * Inputs:      space_id - identifier of the dataspace
+ * Outputs:     flag - 0 if not simple, 1 if is simple,
+ *              and negative on failure.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 11, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sis_simple_c ( hid_t_f *space_id , int_f *flag )
+{
+  int ret_value = 0;
+  hid_t c_space_id;
+  htri_t status;
+
+  c_space_id = *space_id;
+  status = H5Sis_simple(c_space_id);
+  *flag = (int_f)status;
+  if ( status < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sextent_copy_c
+ * Purpose:     Call H5Sextent_copy to copy an extent of dataspace
+ * Inputs:      dest_space_id - identifier of the destination dataspace
+ *              source_space_id - identifier of the source dataspace
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 11, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sextent_copy_c ( hid_t_f *dest_space_id , hid_t_f *source_space_id)
+{
+  int ret_value = 0;
+  hid_t c_dest_space_id, c_source_space_id;
+  herr_t status;
+
+  c_dest_space_id = *dest_space_id;
+  c_source_space_id = *source_space_id;
+  status = H5Sextent_copy(c_dest_space_id, c_source_space_id);
+  if ( status < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sset_extent_none_c
+ * Purpose:     Call H5Sset_extent_none to remove extent from a dataspace
+ * Inputs:      space_id - dataspace identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 11, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sset_extent_none_c ( hid_t_f *space_id )
+{
+  int ret_value = 0;
+  hid_t c_space_id;
+  herr_t status;
+
+  c_space_id = *space_id;
+  status = H5Sset_extent_none(c_space_id);
+  if ( status < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sselect_hyperslab_c
+ * Purpose:     Call H5Sselect_hyperslab to select a hyperslab
+ * Inputs:      space_id - identifier of the dataspace
+ *              operator - defines how the new selection is combined
+ *              with the previous one; current values are
+ *              H5S_SELECT_SET_F (0) and H5S_SELECT_OR_F (1)
+ *              start - offset of start of hyperslab
+ *              count - number of blocks included in the hyperslab
+ *              stride - hyperslab stride (interval between blocks)
+ *              block - size of block in the hyperslab
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 11, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sselect_hyperslab_c ( hid_t_f *space_id , int_f *op, hsize_t_f *start, hsize_t_f *count, hsize_t_f *stride, hsize_t_f *block)
+{
+  int ret_value = -1;
+  hid_t c_space_id;
+  hsize_t *c_start = NULL;
+  hsize_t *c_count = NULL;
+  hsize_t *c_stride = NULL;
+  hsize_t *c_block = NULL;
+
+  H5S_seloper_t c_op;
+  herr_t  status;
+  int rank;
+  int i;
+
+  rank = H5Sget_simple_extent_ndims(*space_id);
+  if (rank < 0 ) return ret_value;
+  c_start = (hsize_t *)HDmalloc(sizeof(hsize_t)*rank);
+  if (c_start == NULL) goto DONE;
+
+  c_count = (hsize_t *)HDmalloc(sizeof(hsize_t)*rank);
+  if (c_count == NULL) goto DONE;
+
+  c_stride = (hsize_t *)HDmalloc(sizeof(hsize_t)*rank);
+  if (c_stride == NULL) goto DONE;
+
+  c_block = (hsize_t *)HDmalloc(sizeof(hsize_t)*rank);
+  if (c_block == NULL) goto DONE;
+
+
+  /*
+   * Reverse dimensions due to C-FORTRAN storage order.
+   */
+
+  for (i=0; i < rank; i++) {
+      int t= (rank - i) - 1;
+      c_start[i] = (hsize_t)start[t];
+      c_count[i] = (hsize_t)count[t];
+      c_stride[i] = (hsize_t)stride[t];
+      c_block[i] = (hsize_t)block[t];
+  }
+
+   c_op = (H5S_seloper_t)*op;
+/*
+  if (*op == H5S_SELECT_SET_F) c_op = H5S_SELECT_SET;
+  if (*op == H5S_SELECT_OR_F)  c_op = H5S_SELECT_OR;
+*/
+
+  c_space_id = *space_id;
+  status = H5Sselect_hyperslab(c_space_id, c_op, c_start, c_stride, c_count, c_block);
+  if ( status >= 0  ) ret_value = 0;
+DONE:
+  if(c_start != NULL) HDfree(c_start);
+  if(c_count != NULL) HDfree(c_count);
+  if(c_stride!= NULL) HDfree(c_stride);
+  if(c_block != NULL) HDfree(c_block);
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5sget_select_type_c
+ * Purpose:     Call H5Sget_select_type
+ * Inputs:      space_id - identifier of the dataspace
+ * Outputs:     type - type of selection
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Monday, October 7, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sget_select_type_c ( hid_t_f *space_id , int_f *type)
+{
+  int ret_value = -1;
+  hid_t c_space_id;
+  H5S_sel_type c_type;
+
+  c_space_id = (hid_t)*space_id;
+  c_type = H5Sget_select_type(c_space_id);
+  if(c_type < 0) return ret_value;
+  *type = (int_f)c_type;
+  ret_value = 0;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5sselect_elements_c
+ * Purpose:     Call H5Sselect_elements to select elements of a dataspace
+ * Inputs:      space_id - identifier of the dataspace
+ *              operator - defines how the new selection is combined
+ *              with the previous one; current values are
+ *              H5S_SELECT_SET_F (0)
+ *              nelements - number of elements in the selection
+ *              coord - arrays with the elements coordinates
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, August 11, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5sselect_elements_c ( hid_t_f *space_id , int_f *op, size_t_f *nelements,  hsize_t_f *coord)
+{
+  int ret_value = -1;
+  hid_t c_space_id;
+  H5S_seloper_t c_op;
+  herr_t  status;
+  int rank;
+  int i, j;
+  hsize_t *c_coord;
+  size_t c_nelements;
+/*
+  if (*op != H5S_SELECT_SET_F) return ret_value;
+*/
+  if (*op != H5S_SELECT_SET) return ret_value;
+  c_op =  H5S_SELECT_SET;
+
+  c_space_id = *space_id;
+  rank = H5Sget_simple_extent_ndims(c_space_id);
+
+  c_coord = malloc(sizeof(hsize_t)*rank*(*nelements));
+  if(!c_coord) return ret_value;
+  for (i=0; i< *nelements; i++) {
+      for (j = 0; j < rank; j++) {
+          c_coord[j+i*rank] = (hsize_t)coord[j + i*rank];
+      }
+  }
+
+  c_nelements = *nelements;
+  status = H5Sselect_elements(c_space_id, c_op, c_nelements, (const hsize_t **)c_coord);
+  if ( status >= 0  ) ret_value = 0;
+  HDfree(c_coord);
+  return ret_value;
+}
+

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Sff.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Sff.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Sff.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1639 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 file contains Fortran90 interfaces for H5S functions.
+! 
+      MODULE H5S
+        USE H5GLOBAL
+ 
+        CONTAINS
+          
+!----------------------------------------------------------------------
+! Name:		h5screate_simple_f 
+!
+! Purpose: 	Creates a new simple data space and opens it for access	.
+!
+! Inputs:  
+!		rank		- number of dimensions
+!		dims		- an array of the size of each dimension
+! Outputs:  
+!		space_id	- dataspace identifier
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!		maxdims		- an array of the maximum size of each 
+!				  dimension
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5screate_simple_f(rank, dims, space_id, hdferr, maxdims) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5screate_simple_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER, INTENT(IN) :: rank     ! Number of dataspace dimensions 
+            INTEGER(HSIZE_T), INTENT(IN) :: dims(rank) 
+                                                    ! Array with the dimension 
+                                                    ! sizes 
+            INTEGER(HID_T), INTENT(OUT) :: space_id ! Dataspace identifier 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+            INTEGER(HSIZE_T), OPTIONAL, INTENT(IN) :: maxdims(rank) 
+                                                    ! Array with the maximum 
+                                                    ! dimension sizes 
+            INTEGER(HSIZE_T), ALLOCATABLE, DIMENSION(:) :: f_maxdims
+
+!            INTEGER, EXTERNAL :: h5screate_simple_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5screate_simple_c(rank, dims, maxdims, space_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SCREATE_SIMPLE_C'::h5screate_simple_c
+              !DEC$ ENDIF
+              INTEGER, INTENT(IN) :: rank
+              INTEGER(HSIZE_T), INTENT(IN) :: dims(rank)
+              INTEGER(HSIZE_T), DIMENSION(:),INTENT(IN) :: maxdims(rank)
+              INTEGER(HID_T), INTENT(OUT) :: space_id
+              END FUNCTION h5screate_simple_c
+            END INTERFACE
+            
+            allocate (f_maxdims(rank), stat=hdferr)
+            if (hdferr .NE. 0) then 
+                hdferr = -1
+                return
+            endif 
+            if (present(maxdims)) then 
+                f_maxdims = maxdims 
+            else
+                f_maxdims = dims
+            endif 
+            hdferr = h5screate_simple_c(rank, dims, f_maxdims, space_id)
+            deallocate(f_maxdims)
+
+          END SUBROUTINE h5screate_simple_f
+          
+!----------------------------------------------------------------------
+! Name:		h5sclose_f 
+!
+! Purpose: 	Releases and terminates access to a dataspace.	
+!
+! Inputs:  
+!		space_id	- identifier of dataspace to release
+! 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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sclose_f(space_id, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sclose_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+
+!            INTEGER, EXTERNAL :: h5sclose_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sclose_c(space_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SCLOSE_C'::h5sclose_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              END FUNCTION h5sclose_c
+            END INTERFACE
+
+            hdferr = h5sclose_c(space_id)
+
+          END SUBROUTINE h5sclose_f
+
+!----------------------------------------------------------------------
+! Name:		h5screate_f 
+!
+! Purpose: 	Creates a new dataspace of a specified type. 	
+!
+! Inputs:  
+!		classtype	- the type of the dataspace to be created
+! Outputs:  
+!		space_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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5screate_f(classtype, space_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5screate_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER, INTENT(IN) :: classtype     ! The type of the dataspace
+                                                 ! to be created. 
+                                                 ! Possible values are:
+                                                 !  H5S_SCALAR_F (0)
+                                                 !  H5S_SIMPLE_F(1)
+            INTEGER(HID_T), INTENT(OUT) :: space_id ! Dataspace identifier 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5screate_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5screate_c(classtype, space_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SCREATE_C'::h5screate_c
+              !DEC$ ENDIF
+              INTEGER, INTENT(IN) :: classtype
+              INTEGER(HID_T), INTENT(OUT) :: space_id
+              END FUNCTION h5screate_c
+            END INTERFACE
+
+            hdferr = h5screate_c(classtype, space_id)
+
+          END SUBROUTINE h5screate_f
+
+!----------------------------------------------------------------------
+! Name:		h5scopy_f 
+!
+! Purpose: 	Creates an exact copy of a dataspace.	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+! Outputs:  
+!		new_space_id	- identifier of dataspace's copy
+!		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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5scopy_f(space_id, new_space_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5scopy_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 
+            INTEGER(HID_T), INTENT(OUT) :: new_space_id 
+                                             ! Identifier of dataspace's copy 
+            INTEGER, INTENT(OUT) :: hdferr   ! Error code
+
+!            INTEGER, EXTERNAL :: h5scopy_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5scopy_c(space_id, new_space_id)  
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SCOPY_C'::h5scopy_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER(HID_T), INTENT(OUT):: new_space_id
+              END FUNCTION h5scopy_c
+            END INTERFACE
+
+            hdferr = h5scopy_c(space_id, new_space_id)
+ 
+          END SUBROUTINE h5scopy_f
+
+!----------------------------------------------------------------------
+! Name:		h5sget_select_hyper_nblocks_f 
+!
+! Purpose: 	Get number of hyperslab blocks.	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+! Outputs:  
+!		num_blocks	- number of hyperslab blocks in the current
+!				  hyperslab selection
+!		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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5sget_select_hyper_nblocks_f(space_id, num_blocks, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sget_select_hyper_nblocks_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 
+            INTEGER(HSSIZE_T), INTENT(OUT) :: num_blocks 
+                                             !number of hyperslab blocks 
+                                             !in the current dataspace 
+                                             !selection 
+            INTEGER, INTENT(OUT) :: hdferr   ! Error code
+
+!            INTEGER, EXTERNAL :: h5sget_select_hyper_nblocks_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sget_select_hyper_nblocks_c (space_id, num_blocks)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+!MS$ATTRIBUTES C,reference,alias:'_H5SGET_SELECT_HYPER_NBLOCKS_C'::h5sget_select_hyper_nblocks_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER(HSSIZE_T), INTENT(OUT) :: num_blocks 
+              END FUNCTION h5sget_select_hyper_nblocks_c
+            END INTERFACE
+
+            hdferr =  h5sget_select_hyper_nblocks_c (space_id, num_blocks)
+ 
+          END SUBROUTINE h5sget_select_hyper_nblocks_f
+
+!----------------------------------------------------------------------
+! Name:		h5sget_select_hyper_blocklist_f 
+!
+! Purpose: 	Gets the list of hyperslab blocks currently selected. 	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+!		startblock	- hyperslab block to start with
+!		num_blocks	- number of blocks to get
+! Outputs:  
+!		buf		- buffer to hold block list
+!		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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sget_select_hyper_blocklist_f(space_id, startblock, &
+                                                    num_blocks, buf, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sget_select_hyper_blocklist_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 
+            INTEGER(HSIZE_T), INTENT(IN) :: startblock 
+                                             !Hyperslab block to start with. 
+            INTEGER(HSIZE_T), INTENT(IN) :: num_blocks 
+                                             !number of hyperslab blocks 
+                                             !to get in the current dataspace 
+                                             !selection 
+            INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: buf 
+                                             !List of hyperslab blocks selected
+            INTEGER, INTENT(OUT) :: hdferr   ! Error code
+
+
+!            INTEGER, EXTERNAL :: h5sget_select_hyper_blocklist_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sget_select_hyper_blocklist_c(space_id, startblock, &
+                                                              num_blocks, buf )
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+            !MS$ATTRIBUTES C,reference,alias:'_H5SGET_SELECT_HYPER_BLOCKLIST_C'::h5sget_select_hyper_blocklist_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id 
+              INTEGER(HSIZE_T), INTENT(IN) :: startblock 
+              INTEGER(HSIZE_T), INTENT(IN) :: num_blocks 
+              INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: buf 
+              END FUNCTION h5sget_select_hyper_blocklist_c
+            END INTERFACE
+
+ 
+            hdferr =  h5sget_select_hyper_blocklist_c(space_id, startblock, &
+                                                       num_blocks, buf )
+ 
+          END SUBROUTINE h5sget_select_hyper_blocklist_f
+
+!----------------------------------------------------------------------
+! Name:		h5sget_select_bounds_f 
+!
+! Purpose: 	Gets the bounding box containing the current selection. 	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+!		
+! Outputs:  
+!		start		- starting coordinates of bounding box
+!		end		- ending coordinates of bounding box
+!		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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE  h5sget_select_bounds_f(space_id, start, end, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sget_select_bounds_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 
+            INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: start
+                                             !Starting coordinates of the bounding box. 
+            INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: end
+                                             !Ending coordinates of the bounding box,
+                                             !i.e., the coordinates of the diagonally 
+                                             !opposite corner 
+            INTEGER, INTENT(OUT) :: hdferr   ! Error code
+
+!            INTEGER, EXTERNAL :: h5sget_select_bounds_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sget_select_bounds_c(space_id, start, end)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+!MS$ATTRIBUTES C,reference,alias:'_H5SGET_SELECT_BOUNDS_C'::h5sget_select_bounds_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: start
+              INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: end
+              END FUNCTION h5sget_select_bounds_c
+            END INTERFACE
+
+            hdferr =   h5sget_select_bounds_c(space_id, start, end)
+ 
+          END SUBROUTINE h5sget_select_bounds_f
+
+!----------------------------------------------------------------------
+! Name:		h5sget_select_elem_npoints_f 
+!
+! Purpose: 	Gets the number of element points in the current selection	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+! Outputs:  
+!		num_points	- number of element points in the current 
+!				  dataspace selection
+!		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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5sget_select_elem_npoints_f(space_id, num_points, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sget_select_elem_npoints_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 
+            INTEGER(HSSIZE_T), INTENT(OUT) :: num_points 
+                                             !number of element points 
+                                             !in the current dataspace 
+                                             !selection 
+            INTEGER, INTENT(OUT) :: hdferr   ! Error code
+
+!            INTEGER, EXTERNAL :: h5sget_select_elem_npoints_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sget_select_elem_npoints_c (space_id, num_points)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+!MS$ATTRIBUTES C,reference,alias:'_H5SGET_SELECT_ELEM_NPOINTS_C'::h5sget_select_elem_npoints_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER(HSSIZE_T), INTENT(OUT) :: num_points 
+              END FUNCTION h5sget_select_elem_npoints_c
+            END INTERFACE
+
+            hdferr =  h5sget_select_elem_npoints_c (space_id, num_points)
+ 
+          END SUBROUTINE h5sget_select_elem_npoints_f
+
+!----------------------------------------------------------------------
+! Name:		h5sget_select_elem_pointlist_f 
+!
+! Purpose:	Gets the list of element points currently selected.  	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+!		startpoint	- element point to start with 
+!		num_points	- number of elemnt points to get
+! Outputs:  
+!		buf		- buffer with element points selected
+!		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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sget_select_elem_pointlist_f(space_id, startpoint, &
+                                                    num_points, buf, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sget_select_elem_pointlist_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 
+            INTEGER(HSIZE_T), INTENT(IN) :: startpoint 
+                                             !Element point to start with. 
+            INTEGER(HSIZE_T), INTENT(IN) :: num_points 
+                                             !Number of element points to get 
+            INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: buf 
+                                             !List of element points selected
+            INTEGER, INTENT(OUT) :: hdferr   ! Error code
+
+!            INTEGER, EXTERNAL :: h5sget_select_elem_pointlist_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sget_select_elem_pointlist_c(space_id, startpoint, &
+                                                              num_points, buf )
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+!MS$ATTRIBUTES C,reference,alias:'_H5SGET_SELECT_ELEM_POINTLIST_C'::h5sget_select_elem_pointlist_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER(HSIZE_T), INTENT(IN) :: startpoint 
+              INTEGER(HSIZE_T), INTENT(IN) :: num_points 
+              INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: buf 
+              END FUNCTION h5sget_select_elem_pointlist_c
+            END INTERFACE
+
+            hdferr =  h5sget_select_elem_pointlist_c(space_id, startpoint, &
+                                                       num_points, buf )
+          END SUBROUTINE h5sget_select_elem_pointlist_f
+
+!----------------------------------------------------------------------
+! Name:		h5sselect_elements_f 
+!
+! Purpose:	Selects elements to be included in the selection for 
+!		a dataspace 	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+!		operator	- flag, valid values are:
+!				  H5S_SELECT_SET_F (0)
+!				  H5S_SELECT_OR_F (1)
+!		rank		- number of dataspace dimensions
+!		num_elements	- number of elements to be selected
+!		coord		- 2D (rank x num_elements) array with the 
+!				  elements coordinates
+! 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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5sselect_elements_f(space_id, operator, rank, & 
+                                          num_elements, coord, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sselect_elements_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 
+            INTEGER, INTENT(IN) :: operator    ! Flag, valid values are:
+                                               ! H5S_SELECT_SET_F (0)
+                                               ! H5S_SELECT_OR_F (1)
+            INTEGER, INTENT(IN) :: rank     ! Number of dataspace dimensions 
+            INTEGER(SIZE_T), INTENT(IN) :: num_elements  ! Number of elements to be
+                                                 ! selected
+            INTEGER(HSIZE_T), & 
+            DIMENSION(rank,num_elements), INTENT(IN) :: coord 
+                                          ! Array with the coordinates
+                                          ! of the selected elements
+                                          ! coord(rank, num_elements)
+            INTEGER, INTENT(OUT) :: hdferr     ! Error code
+            INTEGER(HSIZE_T), ALLOCATABLE, DIMENSION(:,:) :: c_coord
+            INTEGER :: error, i,j
+
+!            INTEGER, EXTERNAL :: h5sselect_elements_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sselect_elements_c(space_id, operator,&
+                               num_elements,c_c_coord)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SSELECT_ELEMENTS_C'::h5sselect_elements_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER, INTENT(IN) :: operator
+              INTEGER(SIZE_T), INTENT(IN) :: num_elements
+              INTEGER(HSIZE_T),DIMENSION(*) :: c_c_coord
+              END FUNCTION h5sselect_elements_c
+            END INTERFACE
+
+            allocate(c_coord(rank, num_elements), stat = error)
+            if (error.NE. 0) then
+                hdferr = -1
+                return
+            endif
+            do i = 1, rank
+               c_coord(i,:) = coord(rank-i+1, :) - 1
+            enddo 
+            hdferr = h5sselect_elements_c(space_id, operator, num_elements, &
+                                          c_coord)
+            deallocate(c_coord)
+ 
+          END SUBROUTINE h5sselect_elements_f
+
+!----------------------------------------------------------------------
+! Name:		h5sselect_all_f 
+!
+! Purpose: 	Selects the entire dataspace. 	
+!
+! Inputs:  
+!		space_id	- identifier for the dataspace in which
+!				  selection being made
+! 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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sselect_all_f(space_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sselect_all_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5sselect_all_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sselect_all_c(space_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SSELECT_ALL_C'::h5sselect_all_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              END FUNCTION h5sselect_all_c
+            END INTERFACE
+
+            hdferr = h5sselect_all_c(space_id)
+
+          END SUBROUTINE h5sselect_all_f
+
+!----------------------------------------------------------------------
+! Name:		h5sselect_none_f 
+!
+! Purpose: 	Resets the selection region to include no elements. 	
+!
+! Inputs:  
+!		space_id	- the identifier for the dataspace in which 
+!                                 the selection is being reset. 
+! 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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sselect_none_f(space_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sselect_none_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5sselect_none_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sselect_none_c(space_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SSELECT_NONE_C'::h5sselect_none_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id 
+              END FUNCTION h5sselect_none_c
+            END INTERFACE
+
+            hdferr = h5sselect_none_c(space_id)
+
+          END SUBROUTINE h5sselect_none_f
+
+!----------------------------------------------------------------------
+! Name:		h5sselect_valid_f 
+!
+! Purpose:	Verifies that the selection is within the extent of 
+!		the dataspace.  	
+!
+! Inputs:  
+!		space_id	- identifier for the dataspace for which 
+!				  selection is verified
+! 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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5sselect_valid_f(space_id, status, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sselect_valid_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier 
+            LOGICAL, INTENT(OUT) :: status          ! TRUE if the selection is
+                                                    ! contained within the extent,
+                                                    ! FALSE otherwise. 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+            INTEGER :: flag ! "TRUE/FALSE/ERROR" flag from C routine
+
+!            INTEGER, EXTERNAL :: h5sselect_valid_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sselect_valid_c(space_id, flag) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SSELECT_VALID_C'::h5sselect_valid_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER :: flag
+              END FUNCTION h5sselect_valid_c 
+            END INTERFACE
+
+            hdferr = h5sselect_valid_c(space_id, flag)
+            status = .TRUE.
+            if (flag .EQ. 0) status = .FALSE.
+
+          END SUBROUTINE h5sselect_valid_f
+
+!----------------------------------------------------------------------
+! Name:		h5sget_simple_extent_npoints_f 
+!
+! Purpose: 	Determines the number of elements in a dataspace. 	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+! Outputs:  
+!		npoints		- number of elements in the dataspace
+!		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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sget_simple_extent_npoints_f(space_id, npoints, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sget_simple_extent_npoints_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id     ! Dataspace identifier 
+            INTEGER(HSIZE_T), INTENT(OUT) :: npoints  ! Number of elements in 
+                                                       ! dataspace
+            INTEGER, INTENT(OUT) :: hdferr             ! Error code
+
+!            INTEGER, EXTERNAL :: h5sget_simple_extent_npoints_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sget_simple_extent_npoints_c( space_id, npoints) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SGET_SIMPLE_EXTENT_NPOINTS_C'::h5sget_simple_extent_npoints_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER(HSIZE_T), INTENT(OUT) :: npoints
+              END FUNCTION h5sget_simple_extent_npoints_c
+            END INTERFACE
+
+            hdferr = h5sget_simple_extent_npoints_c( space_id, npoints)
+ 
+          END SUBROUTINE h5sget_simple_extent_npoints_f
+
+!----------------------------------------------------------------------
+! Name:		h5sget_select_npoints_f 
+!
+! Purpose: 	Determines the number of elements in a dataspace selection. 	
+!
+! Inputs: 
+!		space_id	- dataspace identifier 
+! Outputs:  
+!		npoints		- number of points in the dataspace selection
+!		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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sget_select_npoints_f(space_id, npoints, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sget_select_npoints_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id     ! Dataspace identifier 
+            INTEGER(HSSIZE_T), INTENT(OUT) :: npoints  ! Number of elements in the
+                                                       ! selection 
+            INTEGER, INTENT(OUT) :: hdferr             ! Error code
+
+!            INTEGER, EXTERNAL :: h5sget_select_npoints_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sget_select_npoints_c(space_id, npoints) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SGET_SELECT_NPOINTS_C'::h5sget_select_npoints_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER(HSSIZE_T), INTENT(OUT) :: npoints
+              END FUNCTION h5sget_select_npoints_c
+            END INTERFACE
+
+            hdferr = h5sget_select_npoints_c(space_id, npoints)
+ 
+          END SUBROUTINE h5sget_select_npoints_f
+
+!----------------------------------------------------------------------
+! Name:		h5sget_simple_extent_ndims_f 
+!
+! Purpose: 	Determines the dimensionality of a dataspace	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+! Outputs:  
+!		rank		- number of dataspace dimensions
+!		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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sget_simple_extent_ndims_f(space_id, rank, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sget_simple_extent_ndims_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id     ! Dataspace identifier 
+            INTEGER, INTENT(OUT) :: rank               ! Number of dimensions 
+            INTEGER, INTENT(OUT) :: hdferr             ! Error code
+
+!            INTEGER, EXTERNAL :: h5sget_simple_extent_ndims_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sget_simple_extent_ndims_c(space_id, rank) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SGET_SIMPLE_EXTENT_NDIMS_C'::h5sget_simple_extent_ndims_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER, INTENT(OUT) :: rank
+              END FUNCTION h5sget_simple_extent_ndims_c
+            END INTERFACE
+
+            hdferr = h5sget_simple_extent_ndims_c(space_id, rank)
+ 
+          END SUBROUTINE h5sget_simple_extent_ndims_f
+
+!----------------------------------------------------------------------
+! Name:		h5sget_simple_extent_dims_f 
+!
+! Purpose: 	Retrieves dataspace dimension size and maximum size. 	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+! Outputs:  
+!		dims		- array to store size of each dimension
+!		maxdims		- array to store maximum size of each 
+!				  dimension
+!		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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sget_simple_extent_dims_f(space_id, dims, maxdims, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sget_simple_extent_dims_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 
+            INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: dims 
+                                                   ! Array to store dimension sizes 
+            INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: maxdims 
+                                                   ! Array to store max dimension 
+                                                   ! sizes  
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code: -1 on failure,
+                                                   ! number of dimensions on
+                                                   ! on success
+
+!            INTEGER, EXTERNAL :: h5sget_simple_extent_dims_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sget_simple_extent_dims_c(space_id, dims, maxdims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SGET_SIMPLE_EXTENT_DIMS_C'::h5sget_simple_extent_dims_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: dims
+              INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: maxdims
+              END FUNCTION h5sget_simple_extent_dims_c
+            END INTERFACE
+
+            hdferr = h5sget_simple_extent_dims_c(space_id, dims, maxdims)
+ 
+          END SUBROUTINE h5sget_simple_extent_dims_f
+
+!----------------------------------------------------------------------
+! Name:		h5sget_simple_extent_type_f 
+!
+! Purpose: 	Determine the current class of a dataspace	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+! Outputs:  
+!		classtype	- class type, possible values are:
+!				  H5S_NO_CLASS_F (-1)
+!				  H5S_SCALAR_F (0)
+!				  H5S_SIMPLE_F (1)
+!		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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sget_simple_extent_type_f(space_id, classtype, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sget_simple_extent_type_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 
+            INTEGER, INTENT(OUT) :: classtype      ! Class type , possible values
+                                                   ! are: 
+                                                   !  H5S_NO_CLASS_F (-1)
+                                                   !  H5S_SCALAR_F (0)
+                                                   !  H5S_SIMPLE_F (1)
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+
+!            INTEGER, EXTERNAL :: h5sget_simple_extent_type_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sget_simple_extent_type_c(space_id, classtype)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SGET_SIMPLE_EXTENT_TYPE_C'::h5sget_simple_extent_type_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER, INTENT(OUT) :: classtype
+              END FUNCTION h5sget_simple_extent_type_c
+            END INTERFACE
+
+            hdferr = h5sget_simple_extent_type_c(space_id, classtype)
+ 
+          END SUBROUTINE h5sget_simple_extent_type_f
+
+!----------------------------------------------------------------------
+! Name:		h5sset_extent_simple_f 
+!
+! Purpose: 	Sets or resets the size of an existing dataspace. 	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+!		rank		- dataspace number of dimensions
+!		current_size	- array with the new sizes of dimensions
+!		maximum_size	- array with the new maximum sizes of 
+!				  dimensions
+! 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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sset_extent_simple_f(space_id, rank, current_size, &
+                                            maximum_size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sset_extent_simple_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 
+            INTEGER, INTENT(IN) :: rank            ! Dataspace rank 
+            INTEGER(HSIZE_T), DIMENSION(rank), INTENT(IN) :: current_size 
+                                                   ! Array with the new sizes
+                                                   ! of dimensions 
+            INTEGER(HSIZE_T), DIMENSION(rank), INTENT(IN) :: maximum_size  
+                                                   ! Array with the new maximum
+                                                   ! sizes of dimensions 
+                                                   ! sizes  
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+
+!            INTEGER, EXTERNAL :: h5sset_extent_simple_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sset_extent_simple_c(space_id, rank, &
+                               current_size,  maximum_size) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SSET_EXTENT_SIMPLE_C'::h5sset_extent_simple_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER, INTENT(IN) :: rank
+              INTEGER(HSIZE_T), DIMENSION(rank), INTENT(IN) :: current_size
+              INTEGER(HSIZE_T), DIMENSION(rank), INTENT(IN) :: maximum_size
+              END FUNCTION h5sset_extent_simple_c
+            END INTERFACE
+
+            hdferr = h5sset_extent_simple_c(space_id, rank, current_size, &
+                                            maximum_size)
+ 
+          END SUBROUTINE h5sset_extent_simple_f
+
+!----------------------------------------------------------------------
+! Name:		h5sis_simple_f 
+!
+! Purpose: 	Determines whether a dataspace is a simple dataspace. 	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+! Outputs:  
+!		status		- flag to indicate if dataspace
+!				  is simple or not 
+!		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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sis_simple_f(space_id, status, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sis_simple_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier 
+            LOGICAL, INTENT(OUT) :: status      ! Flag, idicates if dataspace
+                                                ! is simple or not ( TRUE or
+                                                ! FALSE)  
+            INTEGER, INTENT(OUT) :: hdferr      ! Error code
+            INTEGER :: flag                     ! "TRUE/FALSE/ERROR from C" 
+
+!            INTEGER, EXTERNAL :: h5sis_simple_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sis_simple_c(space_id, flag) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SIS_SIMPLE_C'::h5sis_simple_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER :: flag
+              END FUNCTION h5sis_simple_c
+            END INTERFACE
+
+            hdferr = h5sis_simple_c(space_id, flag)
+            status = .TRUE.
+            if (flag .EQ. 0) status = .FALSE.
+ 
+          END SUBROUTINE h5sis_simple_f
+
+!----------------------------------------------------------------------
+! Name:		h5soffset_simple_f 
+!
+! Purpose:	Sets the offset of a simple dataspace.  	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+!		offset		- the offset at which to position the 
+!				  selection 
+! 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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5soffset_simple_f(space_id, offset, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5soffset_simple_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 
+            INTEGER(HSSIZE_T), DIMENSION(*), INTENT(IN) ::  offset
+                                                   ! The offset at which to position
+                                                   ! the selection  
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+
+!            INTEGER, EXTERNAL :: h5soffset_simple_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5soffset_simple_c(space_id, offset) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SOFFSET_SIMPLE_C'::h5soffset_simple_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER(HSSIZE_T), DIMENSION(*), INTENT(IN) ::  offset
+              END FUNCTION h5soffset_simple_c
+            END INTERFACE
+
+            hdferr = h5soffset_simple_c(space_id, offset)
+ 
+          END SUBROUTINE h5soffset_simple_f
+
+!----------------------------------------------------------------------
+! Name:		h5sextent_copy_f 
+!
+! Purpose: 	Copies the extent of a dataspace. 	
+!
+! Inputs:  
+!		dest_space_id	- the identifier for the dataspace to which 
+!				  the extent is copied 
+!		source_space_id	- the identifier for the dataspace from 
+!				  which the extent is copied
+! 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).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sextent_copy_f(dest_space_id, source_space_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sextent_copy_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: dest_space_id  ! Identifier of destination
+                                                         ! dataspace
+            INTEGER(HID_T), INTENT(IN) :: source_space_id ! Identifier of source 
+                                                          ! dataspace
+            INTEGER, INTENT(OUT) :: hdferr                ! Error code
+
+!            INTEGER, EXTERNAL :: h5sextent_copy_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sextent_copy_c(dest_space_id, source_space_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SEXTENT_COPY_C'::h5sextent_copy_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: dest_space_id
+              INTEGER(HID_T), INTENT(IN) :: source_space_id
+              END FUNCTION h5sextent_copy_c
+            END INTERFACE
+
+            hdferr = h5sextent_copy_c(dest_space_id, source_space_id)
+ 
+          END SUBROUTINE h5sextent_copy_f
+
+!----------------------------------------------------------------------
+! Name:		h5sset_extent_none_f 
+!
+! Purpose:	Removes the extent from a dataspace.  	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5sset_extent_none_f(space_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sset_extent_none_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+!            INTEGER, EXTERNAL :: h5sset_extent_none_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sset_extent_none_c(space_id) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SSET_EXTENT_NONE_C'::h5sset_extent_none_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              END FUNCTION h5sset_extent_none_c
+            END INTERFACE
+
+            hdferr = h5sset_extent_none_c(space_id)
+ 
+          END SUBROUTINE h5sset_extent_none_f
+
+!----------------------------------------------------------------------
+! Name:		h5sselect_hyperslab_f 
+!
+! Purpose:	Selects a hyperslab region to add to the current selected 
+!		region 	
+!
+! Inputs:  
+!		space_id	- dataspace identifier
+!		operator	- flag, valid values are:
+!				  H5S_SELECT_SET_F (0)
+!				  H5S_SELECT_OR_F (1)
+!		start		- array with hyperslab offsets
+!		count		- number of blocks included in the 
+!				  hyperslab
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!		stride		- array with hyperslab strides
+!		block		- array with hyperslab block sizes 
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  March 6, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sselect_hyperslab_f(space_id, operator, start, count, &
+                                           hdferr, stride, block) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sselect_hyperslab_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier 
+            INTEGER, INTENT(IN) :: operator     ! Flag, valid values are:
+                                                ! H5S_SELECT_SET_F (0)
+                                                ! H5S_SELECT_OR_F (1)
+                                                !  
+            INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: start
+                                          ! Starting coordinates of the hyperslab 
+            INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: count 
+                                          ! Number of blocks to select 
+                                          ! from dataspace 
+            INTEGER, INTENT(OUT) :: hdferr     ! Error code
+            INTEGER(HSIZE_T), DIMENSION(:), OPTIONAL, INTENT(IN) :: stride
+                                          ! Array of how many elements to move
+                                          ! in each direction
+            INTEGER(HSIZE_T), DIMENSION(:), OPTIONAL, INTENT(IN) :: block 
+                                          ! Sizes of element block
+            INTEGER(HSIZE_T), DIMENSION(:), ALLOCATABLE :: def_block 
+            INTEGER(HSIZE_T), DIMENSION(:), ALLOCATABLE :: def_stride
+            INTEGER :: rank
+            INTEGER :: error1, error2 
+
+!            INTEGER, EXTERNAL :: h5sselect_hyperslab_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5sselect_hyperslab_c(space_id, operator, &
+                               start, count, stride, block)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SSELECT_HYPERSLAB_C'::h5sselect_hyperslab_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER, INTENT(IN) :: operator
+              INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: start
+              INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: count
+              INTEGER(HSIZE_T), DIMENSION(*), OPTIONAL, INTENT(IN) :: stride
+              INTEGER(HSIZE_T), DIMENSION(*), OPTIONAL, INTENT(IN) :: block 
+              END FUNCTION h5sselect_hyperslab_c
+            END INTERFACE
+
+            if (present(stride).and. present(block)) then
+            hdferr = h5sselect_hyperslab_c(space_id, operator, start, count, &
+                                           stride, block)
+            return
+            endif
+            ! Case of optional parameters.
+            !
+            ! Find the rank of the dataspace to allocate memery for
+            ! default stride and block arrays.
+            !
+            CALL h5sget_simple_extent_ndims_f(space_id, rank, hdferr)
+            if( hdferr .EQ. -1) return
+            !
+            if (present(stride).and. .not.present(block)) then
+            allocate(def_block(rank), stat=error1)
+                if (error1.NE.0) then
+                    hdferr = -1
+                    return
+                endif
+            def_block = 1
+            hdferr = h5sselect_hyperslab_c(space_id, operator, start, count, &
+                                           stride, def_block)
+            deallocate(def_block)
+            return
+            endif
+
+            if (.not.present(stride).and. present(block)) then
+            allocate(def_stride(rank), stat=error2)
+                if (error2.NE.0) then
+                    hdferr = -1
+                    return
+                endif
+            def_stride = 1
+            hdferr = h5sselect_hyperslab_c(space_id, operator, start, count, &
+                                           def_stride, block)
+            deallocate(def_stride)
+            return
+            endif
+            allocate(def_block(rank), stat=error1)
+            allocate(def_stride(rank), stat=error2)
+                if ((error1.NE.0) .OR. (error2.NE.0)) then
+                    hdferr = -1
+                    return
+                endif
+            def_block = 1
+            def_stride = 1
+            hdferr = h5sselect_hyperslab_c(space_id, operator, start, count, &
+                                           def_stride, def_block)
+            deallocate(def_block)
+            deallocate(def_stride)
+ 
+          END SUBROUTINE h5sselect_hyperslab_f
+!----------------------------------------------------------------------
+! Name:		h5sget_select_type_f 
+!
+! Purpose:	Retrieve the type of selection
+!
+! Inputs:  
+!		space_id	- dataspace iidentifier with selection
+! Outputs:  
+!		type    	- flag, valid values are:
+!				  H5S_SEL_ERROR_F 
+!				  H5S_SEL_NONE_F 
+!				  H5S_SEL_POINTS_F 
+!				  H5S_SEL_HYPERSLABS_F 
+!				  H5S_SEL_ALL_F 
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:		- NONE
+!
+! Programmer:	Elena Pourmal
+!		October 7, 2002
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5sget_select_type_f(space_id, type, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5sget_select_type_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(INOUT) :: space_id ! Dataspace identifier to
+            INTEGER, INTENT(OUT) :: type        ! Selection type
+						!  H5S_SEL_ERROR_F 
+						!  H5S_SEL_NONE_F 
+						!  H5S_SEL_POINTS_F 
+						!  H5S_SEL_HYPERSLABS_F 
+						!  H5S_SEL_ALL_F 
+            INTEGER, INTENT(OUT) :: hdferr     ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5sget_select_type_c(space_id, type)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5SGET_SELECT_TYPE_C'::h5sget_select_type_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: space_id
+              INTEGER, INTENT(OUT) :: type
+              END FUNCTION h5sget_select_type_c
+            END INTERFACE
+
+            hdferr = h5sget_select_type_c(space_id, type)
+            return
+ 
+          END SUBROUTINE h5sget_select_type_f
+
+      END MODULE H5S

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Tf.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Tf.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Tf.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1666 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 files contains C stubs for H5T Fortran APIs */
+
+#include "H5f90.h"
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5topen_c
+ * Purpose:     Call H5Topen to open a datatype
+ * Inputs:      loc_id - file or group identifier
+ *              name - name of the datatype within file or  group
+ *              namelen - name length
+ * Outputs:     type_id - dataset identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5topen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id)
+{
+     int ret_value = -1;
+     char *c_name;
+     int c_namelen;
+     hid_t c_type_id;
+     hid_t c_loc_id;
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Topen function.
+      */
+     c_loc_id = *loc_id;
+     c_type_id = H5Topen(c_loc_id, c_name);
+
+     if (c_type_id < 0) return ret_value;
+     *type_id = (hid_t_f)c_type_id;
+     HDfree(c_name);
+     ret_value = 0;
+     return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tcommit_c
+ * Purpose:     Call H5Tcommit to commit a datatype
+ * Inputs:      loc_id - file or group identifier
+ *              name - name of the datatype within file or  group
+ *              namelen - name length
+ *              type_id - dataset identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5tcommit_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id)
+{
+     int ret_value = -1;
+     char *c_name;
+     int c_namelen;
+     hid_t c_type_id;
+     hid_t c_loc_id;
+     herr_t status;
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Tcommit function.
+      */
+     c_loc_id = *loc_id;
+     c_type_id = *type_id;
+     status = H5Tcommit(c_loc_id, c_name, c_type_id);
+     HDfree(c_name);
+     if (status < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tclose_c
+ * Purpose:     Call H5Tclose to close the datatype
+ * Inputs:      type_id - identifier of the datatype to be closed
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tclose_c ( hid_t_f *type_id )
+{
+  int ret_value = 0;
+  hid_t c_type_id;
+
+  c_type_id = *type_id;
+  if ( H5Tclose(c_type_id) < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tcopy_c
+ * Purpose:     Call H5Tcopy to copy a datatype
+ * Inputs:      type_id - identifier of the datatype to be copied
+ * Outputs:     new_type_id - identifier of the new datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tcopy_c ( hid_t_f *type_id , hid_t_f *new_type_id)
+{
+  int ret_value = 0;
+  hid_t c_type_id;
+  hid_t c_new_type_id;
+
+  c_type_id = *type_id;
+  c_new_type_id = H5Tcopy(c_type_id);
+  if ( c_new_type_id < 0  ) ret_value = -1;
+  *new_type_id = (hid_t_f)c_new_type_id;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tequal_c
+ * Purpose:     Call H5Tequal to copy a datatype
+ * Inputs:      type1_id - datatype identifier
+ *              type2_id - datatype identifier
+ * Outputs:     c_flag - flag; indicates if two datatypes are equal or not.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Tuesday, February 22, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tequal_c ( hid_t_f *type1_id , hid_t_f *type2_id, int_f *c_flag)
+{
+  int ret_value = -1;
+  hid_t c_type1_id, c_type2_id;
+  htri_t status;
+
+  c_type1_id = *type1_id;
+  c_type2_id = *type2_id;
+  status = H5Tequal(c_type1_id, c_type2_id);
+  if ( status < 0  ) return ret_value;
+  *c_flag = (int_f)status;
+  ret_value = 0;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_class_c
+ * Purpose:     Call H5Tget_class to determine the datatype class
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     classtype - class type; possible values are:
+ *              H5T_NO_CLASS_F (-1)
+ *              H5T_INTEGER_F (0)
+ *              H5T_FLOAT_F (1)
+ *              H5T_TIME_F (2)
+ *              H5T_STRING_F (3)
+ *              H5T_BITFIELD_F (4)
+ *              H5T_OPAQUE_F (5)
+ *              H5T_COMPOUNDF (6)
+ *              H5T_REFERENCE_F (7)
+ *              H5T_ENUMF (8)
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_class_c ( hid_t_f *type_id , int_f *classtype)
+{
+  int ret_value = 0;
+  hid_t c_type_id;
+  H5T_class_t c_classtype;
+
+  c_type_id = *type_id;
+  c_classtype = H5Tget_class(c_type_id);
+  if (c_classtype == H5T_NO_CLASS ) {
+      /* *classtype = H5T_NO_CLASS_F; */
+      *classtype = (int_f)H5T_NO_CLASS;
+       ret_value = -1;
+       return ret_value;
+  }
+  *classtype = c_classtype;
+/*
+  if (c_classtype == H5T_INTEGER)   *classtype = H5T_INTEGER_F;
+  if (c_classtype == H5T_FLOAT)     *classtype = H5T_FLOAT_F;
+  if (c_classtype == H5T_TIME)      *classtype = H5T_TIME_F;
+  if (c_classtype == H5T_STRING)    *classtype = H5T_STRING_F;
+  if (c_classtype == H5T_BITFIELD)  *classtype = H5T_BITFIELD_F;
+  if (c_classtype == H5T_OPAQUE)    *classtype = H5T_OPAQUE_F;
+  if (c_classtype == H5T_COMPOUND)  *classtype = H5T_COMPOUND_F;
+  if (c_classtype == H5T_REFERENCE) *classtype = H5T_REFERENCE_F;
+  if (c_classtype == H5T_ENUM)      *classtype = H5T_ENUM_F;
+*/
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_order_c
+ * Purpose:     Call H5Tget_order to determine byte order
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     order; possible values are:
+ *              H5T_ORDER_LE_F (0)
+ *              H5T_ORDER_BE_F (1)
+ *              H5T_ORDER_VAX_F (2)
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_order_c ( hid_t_f *type_id , int_f *order)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  H5T_order_t c_order;
+
+  c_type_id = *type_id;
+  c_order = H5Tget_order(c_type_id);
+  if ( c_order < 0  ) return ret_value;
+  *order = (int_f)c_order;
+   ret_value = 0;
+/*
+  if ( c_order == H5T_ORDER_LE)  *order = H5T_ORDER_LE_F;
+  if ( c_order == H5T_ORDER_BE)  *order = H5T_ORDER_BE_F;
+  if ( c_order == H5T_ORDER_VAX) *order = H5T_ORDER_VAX_F;
+*/
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tset_order_c
+ * Purpose:     Call H5Tset_order to set byte order
+ * Inputs:      type_id - identifier of the dataspace
+ *              order; possible values are:
+ *              H5T_ORDER_LE_F (0)
+ *              H5T_ORDER_BE_F (1)
+ *              H5T_ORDER_VAX_F (2)
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tset_order_c ( hid_t_f *type_id , int_f *order)
+{
+  int ret_value = 0;
+  hid_t c_type_id;
+  H5T_order_t c_order;
+  herr_t status;
+  c_order = (H5T_order_t)*order;
+/*
+  if ( *order == H5T_ORDER_LE_F) c_order = H5T_ORDER_LE;
+  if ( *order == H5T_ORDER_BE_F) c_order = H5T_ORDER_BE;
+  if ( *order == H5T_ORDER_VAX_F) c_order = H5T_ORDER_VAX;
+*/
+  c_type_id = *type_id;
+  status = H5Tset_order(c_type_id, c_order);
+  if ( status < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_size_c
+ * Purpose:     Call H5Tget_size to get size of the datatype
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     size (in bytes)
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_size_c ( hid_t_f *type_id , size_t_f *size)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  size_t c_size;
+
+  c_type_id = *type_id;
+  c_size = H5Tget_size(c_type_id);
+  if ( c_size == 0  ) return ret_value;
+  *size = (size_t_f)c_size ;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tset_size_c
+ * Purpose:     Call H5Tget_size to get size of the datatype
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     size (in bytes)
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Saturday, August 14, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tset_size_c ( hid_t_f *type_id , size_t_f *size)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  size_t c_size;
+  herr_t status;
+
+  c_size = (size_t)*size;
+  c_type_id = *type_id;
+  status = H5Tset_size(c_type_id, c_size);
+  if ( status < 0  ) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_precision_c
+ * Purpose:     Call H5Tget_precision to get precision of the datatype
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     precision -  number of significant bits
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Tuesday, January 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_precision_c ( hid_t_f *type_id , size_t_f *precision)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  size_t c_precision;
+
+  c_type_id = *type_id;
+  c_precision = H5Tget_precision(c_type_id);
+  if ( c_precision == 0  ) return ret_value;
+  *precision = (size_t_f)c_precision ;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tset_precision_c
+ * Purpose:     Call H5Tset_precision to set precision of the datatype
+ * Inputs:      type_id - identifier of the dataspace
+ *              precision -  number of significant bits
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Tuesday, January 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tset_precision_c ( hid_t_f *type_id , size_t_f *precision)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  size_t c_precision;
+  herr_t status;
+
+  c_type_id = *type_id;
+  c_precision = (size_t)*precision;
+  status = H5Tset_precision(c_type_id, c_precision);
+  if ( status < 0 ) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_offset_c
+ * Purpose:     Call H5Tget_offset to get bit offset of the first
+ *              significant bit of the datatype
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     offset - bit offset of the first significant bit
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Tuesday, January 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_offset_c ( hid_t_f *type_id , size_t_f *offset)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  size_t c_offset;
+
+  c_type_id = *type_id;
+  c_offset = H5Tget_offset(c_type_id);
+  if ( c_offset == 0  ) return ret_value;
+
+  *offset = (size_t_f)c_offset ;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tset_offset_c
+ * Purpose:     Call H5Tset_offset to set bit offset of the first
+ *              significant bit of the datatype
+ * Inputs:      type_id - identifier of the dataspace
+ *              offset - bit offset of the first significant bit
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Tuesday, January 25, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tset_offset_c ( hid_t_f *type_id , size_t_f *offset)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  size_t c_offset;
+  herr_t status;
+
+  c_offset = (size_t)*offset;
+  c_type_id = *type_id;
+  status = H5Tset_offset(c_type_id, c_offset);
+  if ( status < 0 ) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_pad_c
+ * Purpose:     Call H5Tget_pad to get the padding type of the least and
+ *              most-significant bit padding
+ *
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     lsbpad - padding type of the least significant bit
+ *              msbpad - padding type of the least significant bit
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Wednesday, January 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_pad_c ( hid_t_f *type_id , int_f * lsbpad, int_f * msbpad)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  herr_t status;
+  H5T_pad_t c_lsb, c_msb;
+
+  c_type_id = *type_id;
+  status = H5Tget_pad(c_type_id, &c_lsb, &c_msb);
+  if ( status < 0  ) return ret_value;
+
+  *lsbpad = (int_f) c_lsb;
+  *msbpad = (int_f) c_msb;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tset_pad_c
+ * Inputs:      type_id - identifier of the dataspace
+ * Purpose:     Call H5Tset_pad to set the padding type of the least and
+ *              most-significant bit padding
+ *
+ * Inputs:      type_id - identifier of the dataspace
+ *              lsbpad - padding type of the least significant bit
+ *              msbpad - padding type of the least significant bit
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Wednesday, January 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tset_pad_c ( hid_t_f *type_id, int_f * lsbpad, int_f* msbpad )
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  herr_t status;
+  H5T_pad_t c_lsb, c_msb;
+
+  c_type_id = *type_id;
+  c_lsb = (H5T_pad_t)*lsbpad;
+  c_msb = (H5T_pad_t)*msbpad;
+  status = H5Tset_pad(c_type_id, c_lsb, c_msb);
+  if ( status < 0 ) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_sign_c
+ * Purpose:     Call H5Tget_sign to get sign type for an integer type
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     sign - sign type for an integer type
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Wednesday, January 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_sign_c ( hid_t_f *type_id , int_f *sign)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  H5T_sign_t c_sign;
+
+  c_type_id = *type_id;
+  c_sign = H5Tget_sign(c_type_id);
+  if ( c_sign == -1  ) return ret_value;
+  *sign = (int_f)c_sign ;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tset_sign_c
+ * Purpose:     Call H5Tset_sign to set sign type for an integer type
+ * Inputs:      type_id - identifier of the dataspace
+ *              sign - sign type for an integer typ
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Wednesday, January 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tset_sign_c ( hid_t_f *type_id , int_f* sign)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  H5T_sign_t c_sign;
+  herr_t status;
+
+  c_type_id = *type_id;
+  c_sign = (H5T_sign_t)*sign;
+  status = H5Tset_sign(c_type_id, c_sign);
+  if ( status < 0 ) return ret_value;
+
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_fields_c
+ * Purpose:     Call H5Tget_fields to get floating point datatype
+ *              bit field information
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     epos -  exponent bit-position
+ *              esize - size of exponent in bits
+ *              mpos -  mantissa bit-position
+ *              msize -  size of mantissa in bits
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Thursday, January 27, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_fields_c ( hid_t_f *type_id , size_t_f *spos, size_t_f *epos, size_t_f* esize, size_t_f* mpos, size_t_f* msize)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  herr_t status;
+  size_t  c_spos, c_epos, c_esize, c_mpos, c_msize;
+
+  c_type_id = *type_id;
+  status = H5Tget_fields(c_type_id, &c_spos, &c_epos, &c_esize, &c_mpos, &c_msize);
+  if ( status < 0  ) return ret_value;
+  *spos = (size_t_f) c_spos;
+  *epos = (size_t_f) c_epos;
+  *esize = (size_t_f) c_esize;
+  *mpos = (size_t_f) c_mpos;
+  *msize = (size_t_f) c_msize;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tset_fields_c
+ * Purpose:     Call H5Tset_fields to set floating point datatype
+ *              bit field information
+ * Inputs:      type_id - identifier of the dataspace
+ *              epos -  exponent bit-position
+ *              esize - size of exponent in bits
+ *              mpos -  mantissa bit-position
+ *              msize -  size of mantissa in bits
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Wednesday, January 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tset_fields_c ( hid_t_f *type_id, size_t_f *spos, size_t_f *epos, size_t_f* esize, size_t_f* mpos, size_t_f* msize)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  herr_t status;
+  size_t  c_spos, c_epos, c_esize, c_mpos, c_msize;
+
+  c_spos = (size_t)*spos;
+  c_epos = (size_t)*epos;
+  c_esize = (size_t)*esize;
+  c_mpos = (size_t)*mpos;
+  c_msize = (size_t)*msize;
+  c_type_id = *type_id;
+  status = H5Tset_fields(c_type_id, c_spos, c_epos, c_esize, c_mpos, c_msize);
+  if ( status < 0 ) return ret_value;
+
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_ebias_c
+ * Purpose:     Call H5Tget_ebias to get  exponent bias of a
+ *              floating-point type of the datatype
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     ebias - exponent bias of a floating-point type of the datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, January 27, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_ebias_c ( hid_t_f *type_id , size_t_f *ebias)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  size_t c_ebias;
+
+  c_type_id = *type_id;
+  c_ebias = H5Tget_ebias(c_type_id);
+  if ( c_ebias == 0  ) return ret_value;
+
+  *ebias = (size_t_f)c_ebias;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tset_ebias_c
+ * Purpose:     Call H5Tset_ebias to set exponent bias of a
+ *              floating-point type of the datatype
+ * Inputs:      type_id - identifier of the dataspace
+ *              ebias - exponent bias of a floating-point type of the datatyp
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, January 27, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tset_ebias_c ( hid_t_f *type_id , size_t_f *ebias)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  size_t c_ebias;
+  herr_t status;
+
+  c_type_id = *type_id;
+  c_ebias = (size_t)*ebias;
+  status = H5Tset_ebias(c_type_id, c_ebias);
+  if ( status < 0  ) return ret_value;
+
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_norm_c
+ * Purpose:     Call H5Tget_norm to get mantissa normalization
+ *              of a floating-point datatype
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     norm - mantissa normalization of a floating-point type
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, January 27, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_norm_c ( hid_t_f *type_id , int_f *norm)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  H5T_norm_t  c_norm;
+
+  c_type_id = *type_id;
+  c_norm = H5Tget_norm(c_type_id);
+  if ( c_norm == 0  ) return ret_value;
+
+  *norm = (int_f)c_norm;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tset_norm_c
+ * Purpose:     Call H5Tset_norm to set mantissa normalization of
+ *              floating-point type of the datatype
+ * Inputs:      type_id - identifier of the dataspace
+ *              norm -  mantissa normalization of a floating-point type
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Friday, January 27, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tset_norm_c ( hid_t_f *type_id , int_f *norm)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  H5T_norm_t  c_norm;
+  herr_t status;
+
+  c_type_id = *type_id;
+  c_norm = (H5T_norm_t)*norm;
+  status = H5Tset_norm(c_type_id, c_norm);
+  if ( status < 0  ) return ret_value;
+
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_inpad_c
+ * Purpose:     Call H5Tget_inpad to get the padding type for
+ *              unused bits in floating-point datatypes
+ *
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     padtype - padding type for
+ *                        unused bits in floating-point datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Wednesday, January 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_inpad_c ( hid_t_f *type_id , int_f * padtype)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  H5T_pad_t c_padtype;
+
+  c_type_id = *type_id;
+  c_padtype = H5Tget_inpad(c_type_id);
+  if ( c_padtype == H5T_PAD_ERROR  ) return ret_value;
+
+  *padtype = (int_f) c_padtype;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tset_inpad_c
+ * Inputs:      type_id - identifier of the dataspace
+ * Purpose:     Call H5Tset_inpad to set the padding type
+ *              unused bits in floating-point datatype
+ *
+ * Inputs:      type_id - identifier of the dataspace
+ *              padtype - padding type for unused bits
+ *                        in floating-point datatypes
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Wednesday, January 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tset_inpad_c ( hid_t_f *type_id, int_f * padtype)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  herr_t status;
+  H5T_pad_t c_padtype;
+
+  c_type_id = *type_id;
+  c_padtype = (H5T_pad_t)*padtype;
+  status = H5Tset_inpad(c_type_id, c_padtype);
+  if ( status < 0 ) return ret_value;
+
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_cset_c
+ * Purpose:     Call H5Tget_cset to get character set
+ *              type of a string datatype
+ *
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     cset - character set type of a string datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Wednesday, January 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_cset_c ( hid_t_f *type_id , int_f * cset)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  H5T_cset_t  c_cset;
+
+  c_type_id = *type_id;
+  c_cset = H5Tget_cset(c_type_id);
+  if ( c_cset == H5T_CSET_ERROR  ) return ret_value;
+
+  *cset = (int_f) c_cset;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tset_cset_c
+ * Inputs:      type_id - identifier of the dataspace
+ * Purpose:     Call H5Tset_cset to set character set
+ *              type of a string datatype
+ *
+ * Inputs:      type_id - identifier of the dataspace
+ *              cset -  character set type of a string datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Wednesday, January 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tset_cset_c ( hid_t_f *type_id, int_f * cset)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  herr_t status;
+  H5T_cset_t c_cset;
+
+  c_type_id = *type_id;
+  c_cset = (H5T_cset_t)*cset;
+  status = H5Tset_cset(c_type_id, c_cset);
+
+  if ( status < 0 ) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_strpad_c
+ * Purpose:     Call H5Tget_strpad to get string padding method
+ *              for a string datatype
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     strpad - string padding method for a string datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Wednesday, January 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_strpad_c ( hid_t_f *type_id , int_f * strpad)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  H5T_str_t  c_strpad;
+
+  c_type_id = *type_id;
+  c_strpad = H5Tget_strpad(c_type_id);
+  if ( c_strpad == H5T_STR_ERROR  ) return ret_value;
+
+  *strpad = (int_f) c_strpad;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tset_strpad_c
+ * Inputs:      type_id - identifier of the dataspace
+ * Purpose:     Call H5Tset_strpad to set string padding method
+ *              for a string datatype
+ *
+ * Inputs:      type_id - identifier of the dataspace
+ *              strpad - string padding method for a string datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Wednesday, January 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tset_strpad_c ( hid_t_f *type_id, int_f * strpad)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  herr_t status;
+  H5T_str_t c_strpad;
+
+  c_type_id = *type_id;
+  c_strpad = (H5T_str_t)*strpad;
+  status = H5Tset_strpad(c_type_id, c_strpad);
+  if ( status < 0 ) return ret_value;
+
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_nmembers_c
+ * Purpose:     Call H5Tget_nmembers to get number of fields
+ *              in a compound datatype
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     num_members - number of fields in a compound datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Thursday, February 3, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_nmembers_c ( hid_t_f *type_id , int_f * num_members)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+
+  c_type_id = *type_id;
+  *num_members = (int_f)H5Tget_nmembers(c_type_id);
+  if (*num_members < 0  ) return ret_value;
+
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_member_name_c
+ * Purpose:     Call H5Tget_member_name to get name
+ *              of a compound datatype
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     member_name - name of a field of a compound datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Thursday, February 3, 2000
+ * Modifications: Elena Pourmal
+ * Added namelen parameter to return length of the name to Fortran user
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_member_name_c ( hid_t_f *type_id ,int_f* idx, _fcd member_name, int_f *namelen)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  unsigned c_index;
+  char *c_name;
+
+  c_type_id = *type_id;
+  c_index = *idx;
+  c_name = H5Tget_member_name(c_type_id, c_index);
+  if (c_name == NULL ) return ret_value;
+
+  HD5packFstring(c_name, _fcdtocp(member_name), (int)strlen(c_name));
+  *namelen = (int_f)strlen(c_name);
+  HDfree(c_name);
+  ret_value = 0;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_member_index_c
+ * Purpose:     Call H5Tget_member_index to get an index of
+ *              the specified datatype filed or member.
+ * Inputs:      type_id - datatype identifier
+ *              name - name of the datatype within file or  group
+ *              namelen - name length
+ * Outputs:     index - 0-based index
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, September 26, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5tget_member_index_c (hid_t_f *type_id, _fcd name, int_f *namelen, int_f *idx)
+{
+     int ret_value = -1;
+     char *c_name;
+     int c_namelen;
+     hid_t c_type_id;
+     int c_index;
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Tget_member_index function.
+      */
+     c_type_id = (hid_t)*type_id;
+     c_index = H5Tget_member_index(c_type_id, c_name);
+
+     if (c_index < 0) goto DONE;
+     *idx = (int_f)c_index;
+DONE:
+     HDfree(c_name);
+     ret_value = 0;
+     return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_member_offset_c
+ * Purpose:     Call H5Tget_member_offset to get byte offset of the
+ *              beginning of a field within a compound datatype with
+ *              respect to the beginning of the compound data type datum
+ * Inputs:      type_id - identifier of the dataspace
+ *              member_no - Number of the field whose offset is requested
+ * Outputs:     offset - byte offset of the the beginning of the field of
+ *                       a compound datatype
+ * Returns:     always 0
+ * Programmer:  XIANGYANG SU
+ *              Thursday, February 3, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_member_offset_c ( hid_t_f *type_id ,int_f* member_no, size_t_f * offset)
+{
+  int ret_value = -1;
+  size_t c_offset;
+  hid_t c_type_id;
+  unsigned c_member_no;
+
+  c_type_id = *type_id;
+  c_member_no = *member_no;
+  c_offset = H5Tget_member_offset(c_type_id, c_member_no);
+  *offset = (size_t_f)c_offset;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_array_dims_c
+ * Purpose:     Call H5Tget_array_dims to get
+ *              dimensions of array datatype
+ * Inputs:      type_id - identifier of the array datatype
+ * Outputs:     dims -  dimensions(sizes of dimensions) of the array
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, November 16, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_array_dims_c ( hid_t_f *type_id , hsize_t_f * dims)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  hsize_t * c_dims;
+  int rank, i;
+  herr_t status;
+
+  rank = H5Tget_array_ndims((hid_t)*type_id);
+  if (rank < 0) return ret_value;
+  c_dims = (hsize_t*)malloc(sizeof(hsize_t)*rank);
+  if(!c_dims) return ret_value;
+
+  c_type_id = (hid_t)*type_id;
+  status = H5Tget_array_dims(c_type_id, c_dims, NULL);
+  if (status < 0) {
+             HDfree(c_dims);
+             return ret_value;
+  }
+
+  for(i =0; i < rank; i++)
+  {
+      dims[rank-i-1] = (hsize_t_f)c_dims[i];
+  }
+
+  ret_value = 0;
+  HDfree(c_dims);
+
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_array_ndims_c
+ * Purpose:     Call H5Tget_array_ndims to get number
+ *              of dimensions of array datatype
+ * Inputs:      type_id - identifier of the array datatype
+ * Outputs:     ndims -  number of dimensions of the array
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, November 16, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_array_ndims_c ( hid_t_f *type_id , int_f * ndims)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  int c_ndims;
+
+  c_type_id = (hid_t)*type_id;
+  c_ndims = H5Tget_array_ndims(c_type_id);
+  if (c_ndims < 0) return ret_value;
+
+  *ndims = (int_f)c_ndims;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_super_c
+ * Purpose:     Call H5Tget_super to get base datatype from which
+ *              datatype was derived
+ * Inputs:      type_id - identifier of the array datatype
+ * Outputs:     base_type_id - base datatype identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, November 16, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_super_c ( hid_t_f *type_id , hid_t_f *base_type_id)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  hid_t c_base_type_id;
+
+  c_type_id = (hid_t)*type_id;
+  c_base_type_id = H5Tget_super(c_type_id);
+  if (c_base_type_id < 0) return ret_value;
+
+  *base_type_id = (hid_t_f)c_base_type_id;
+  ret_value = 0;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_member_type_c
+ * Purpose:     Call H5Tget_member_type to get the identifier of a copy of
+ *              the datatype of the field
+ * Inputs:      type_id - identifier of the datatype
+ *              field_idx - Field index (0-based) of the field type to retrieve
+ * Outputs:     datatype - identifier of a copy of the datatype of the field
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Thursday, February 3, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_member_type_c ( hid_t_f *type_id ,int_f* field_idx, hid_t_f * datatype)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  unsigned c_field_idx;
+
+  c_type_id = *type_id;
+  c_field_idx = *field_idx;
+  *datatype = (hid_t_f)H5Tget_member_type(c_type_id, c_field_idx);
+  if(*datatype < 0) return ret_value;
+
+  ret_value = 0;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tcreate_c
+ * Purpose:     Call H5Tcreate to create a datatype
+ * Inputs:      class - class type
+ *              size - size of the class memeber
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, February 17, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tcreate_c(int_f *class, size_t_f *size, hid_t_f *type_id)
+{
+  int ret_value = -1;
+  H5T_class_t c_class;
+  size_t c_size;
+
+  c_size =(size_t) *size;
+  c_class = (H5T_class_t) *class;
+
+  *type_id = (hid_t_f)H5Tcreate(c_class, c_size);
+  if(*type_id < 0) return ret_value;
+
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tinsert_c
+ * Purpose:     Call H5Tinsert to adds another member to the compound datatype
+ * Inputs:      type_id - identifier of the datatype
+ *              name  - Name of the field to insert
+ *              namelen - length of the name
+ *              offset - Offset in memory structure of the field to insert
+ *              field_id - datatype identifier of the new member
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Thursday, February 3, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tinsert_c(hid_t_f *type_id, _fcd name, int_f* namelen, size_t_f *offset, hid_t_f * field_id)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  hid_t c_field_id;
+  char* c_name;
+  int c_namelen;
+  size_t c_offset;
+  herr_t error;
+
+  c_offset =(size_t) *offset;
+  c_namelen = *namelen;
+  c_name = (char *)HD5f2cstring(name, c_namelen);
+  if (c_name == NULL) return ret_value;
+
+  c_type_id = *type_id;
+  c_field_id = *field_id;
+  error = H5Tinsert(c_type_id, c_name, c_offset, c_field_id);
+  HDfree(c_name);
+  if(error < 0) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tpack_c
+ * Purpose:     Call H5Tpack tor ecursively remove padding from
+ *              within a compound datatype to make it more efficient
+ *              (space-wise) to store that data
+ * Inputs:      type_id - identifier of the datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Thursday, February 3, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tpack_c(hid_t_f * type_id)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  herr_t status;
+
+  c_type_id = *type_id;
+  status = H5Tpack(c_type_id);
+  if (status < 0) return ret_value;
+
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tarray_create_c
+ * Purpose:     Call H5Tarray_create to create array datatype
+ * Inputs:      base_id - identifier of array base datatype
+ *              rank - array's rank
+ *              dims - Size of new member array
+ *              type_id - identifier of the array datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, November 16, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5tarray_create_c(hid_t_f * base_id, int_f *rank, hsize_t_f* dims, hid_t_f* type_id)
+{
+  int ret_value = -1;
+  hid_t c_base_id;
+  hid_t c_type_id;
+  int c_rank;
+  hsize_t *c_dims;
+  int i;
+
+  c_dims = (hsize_t*)malloc(sizeof(hsize_t)*(*rank));
+  if(!c_dims) return ret_value;
+
+
+  /*
+   * Transpose dimension arrays because of C-FORTRAN storage order
+   */
+  for (i = 0; i < *rank ; i++) {
+     c_dims[i] =  (hsize_t)dims[*rank - i - 1];
+  }
+
+  c_base_id = (hid_t)*base_id;
+  c_rank = (int)*rank;
+  c_type_id = H5Tarray_create(c_base_id, c_rank, c_dims, NULL);
+
+  if(c_type_id < 0) {
+          HDfree(c_dims);
+          return ret_value;
+  }
+
+  *type_id = (hid_t_f)c_type_id;
+  ret_value = 0;
+  HDfree(c_dims);
+  return ret_value;
+
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tenum_create_c
+ * Purpose:     Call H5Tenum_create to create a new enumeration datatype
+ * Inputs:      parent_id - Datatype identifier for the base datatype
+ * Outputs:     new_type_id - datatype identifier for the new
+ *                            enumeration datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Xiangyang Su
+ *              Tuesday, February 15, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tenum_create_c ( hid_t_f *parent_id , hid_t_f *new_type_id)
+{
+  int ret_value = 0;
+  hid_t c_parent_id;
+  hid_t c_new_type_id;
+
+  c_parent_id = *parent_id;
+  c_new_type_id = H5Tenum_create(c_parent_id);
+  if ( c_new_type_id < 0  ) ret_value = -1;
+
+  *new_type_id = (hid_t_f)c_new_type_id;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tenum_insert_c
+ * Purpose:     Call H5Tenum_insert to insert a new enumeration datatype member.
+ * Inputs:      type_id - identifier of the datatype
+ *              name  - Name of  the new member
+ *              namelen - length of the name
+ *              value - value of the new member
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Thursday, February 3, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tenum_insert_c(hid_t_f *type_id, _fcd name, int_f* namelen, int_f* value)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  char* c_name;
+  int c_namelen;
+  int c_value;
+  herr_t error;
+
+  c_namelen = *namelen;
+  c_name = (char *)HD5f2cstring(name, c_namelen);
+  if (c_name == NULL) return ret_value;
+
+  c_type_id = (hid_t)*type_id;
+  c_value = (int)*value;
+  error = H5Tenum_insert(c_type_id, c_name, &c_value);
+  HDfree(c_name);
+  if(error < 0) return ret_value;
+
+  ret_value = 0;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tenum_nameof_c
+ * Purpose:     Call H5Tenum_nameof to find the symbol name that corresponds to
+ *              the specified value of the enumeration datatype type
+ * Inputs:      type_id - identifier of the datatype
+ *              namelen - length of the name
+ *              value - value of the enumeration datatype
+ * Output:      name  - Name of  the enumeration datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Thursday, February 3, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tenum_nameof_c(hid_t_f *type_id, int_f* value, _fcd name, size_t_f* namelen)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  char* c_name;
+  size_t c_namelen;
+  herr_t error;
+  int c_value;
+  c_value = *value;
+  c_namelen = ((size_t)*namelen) +1;
+  c_name = (char *)malloc(sizeof(char)*c_namelen);
+  c_type_id = *type_id;
+  error = H5Tenum_nameof(c_type_id, &c_value, c_name, c_namelen);
+  HD5packFstring(c_name, _fcdtocp(name), (int)strlen(c_name));
+  HDfree(c_name);
+
+  if(error < 0) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tenum_valueof_c
+ * Purpose:     Call H5Tenum_valueof to find the value of that corresponds to
+ *              the specified name of the enumeration datatype type
+ * Inputs:      type_id - identifier of the datatype
+ *              name - Name of  the enumeration datatype
+ *              namelen - length of name
+ * Output:      value  - value of the enumeration datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Thursday, February 3, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tenum_valueof_c(hid_t_f *type_id, _fcd name, int_f* namelen, int_f* value)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  char* c_name;
+  int c_namelen;
+  int c_value;
+  herr_t error;
+  c_namelen = *namelen;
+  c_name = (char *)HD5f2cstring(name, c_namelen);
+  if (c_name == NULL) return ret_value;
+
+  c_type_id = *type_id;
+  error = H5Tenum_valueof(c_type_id, c_name, &c_value);
+  HDfree(c_name);
+  if(error < 0) return ret_value;
+  *value = (int_f)c_value;
+  ret_value = 0;
+  return ret_value;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_member_value_c
+ * Purpose:     Call H5Tget_member_value to get the value of an
+ *              enumeration datatype member
+ * Inputs:      type_id - identifier of the datatype
+ *              member_no - Number of the enumeration datatype member.
+ * Output:      value  - value of the enumeration datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Thursday, February 3, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_member_value_c(hid_t_f *type_id, int_f* member_no, int_f* value)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  unsigned c_member_no;
+  int c_value;
+  herr_t error;
+
+  c_type_id = *type_id;
+  c_member_no = *member_no;
+  error = H5Tget_member_value(c_type_id, c_member_no, &c_value);
+  if(error < 0) return ret_value;
+
+  *value = (int_f)c_value;
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tset_tag_c
+ * Inputs:      type_id - identifier of the dataspace
+ * Purpose:     Call H5Tset_tag to set an opaque datatype tag
+ * Inputs:      type_id - identifier of the dataspace
+ *              tag -  Unique ASCII string with which the opaque
+ *                     datatype is to be tagged
+ *              namelen - length of tag
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Wednesday, January 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5tset_tag_c(hid_t_f* type_id, _fcd tag, int_f* namelen)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  herr_t status;
+  char* c_tag;
+  int c_namelen;
+
+  c_namelen = *namelen;
+  c_tag = (char *)HD5f2cstring(tag, c_namelen);
+
+  c_type_id = *type_id;
+  status = H5Tset_tag(c_type_id, c_tag);
+  HDfree(c_tag);
+  if ( status < 0 ) return ret_value;
+
+  ret_value = 0;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_tag_c
+ * Purpose:     Call H5Tset_tag to set an opaque datatype tag
+ * Inputs:      type_id - identifier of the datatype
+ * Outputs:     tag -  Unique ASCII string with which the opaque
+ *                     datatype is to be tagged
+ *              taglen - length of tag
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  XIANGYANG SU
+ *              Wednesday, January 26, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5tget_tag_c(hid_t_f* type_id, _fcd tag, int_f* taglen)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  char *c_tag;
+
+  c_type_id = *type_id;
+  c_tag = H5Tget_tag(c_type_id);
+  if (c_tag == NULL ) return ret_value;
+
+  HD5packFstring(c_tag, _fcdtocp(tag), (int)strlen(c_tag));
+  *taglen = (int_f)HDstrlen(c_tag);
+  HDfree(c_tag);
+  ret_value = 0;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5tvlen_create_c
+ * Purpose:     Call H5Tvlen_create to create VL dtatype
+ * Inputs:      type_id - identifier of the base datatype
+ * Outputs:     vltype_id - identifier of the VL datatype
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, October 23, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5tvlen_create_c(hid_t_f* type_id, hid_t_f *vltype_id)
+{
+  int ret_value = -1;
+  hid_t c_type_id;
+  hid_t c_vltype_id;
+
+  c_type_id = (hid_t)*type_id;
+  c_vltype_id = H5Tvlen_create(c_type_id);
+  if (c_vltype_id < 0 ) return ret_value;
+  *vltype_id = (hid_t_f)c_vltype_id;
+  ret_value = 0;
+  return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5tis_variable_str_c
+ * Purpose:     Call H5Tis_variable_str to detrmine if the datatype
+ *              is a variable string.
+ * Inputs:      type_id - identifier of the dataspace
+ * Outputs:     flag - 0 if not VL str, 1 if is not
+ *              and negative on failure.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, March 12 , 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tis_variable_str_c ( hid_t_f *type_id , int_f *flag )
+{
+  int ret_value = 0;
+  hid_t c_type_id;
+  htri_t status;
+
+  c_type_id = (hid_t)*type_id;
+  status = H5Tis_variable_str(c_type_id);
+  *flag = (int_f)status;
+  if ( status < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5tget_member_class_c
+ * Purpose:     Call H5Tget_member_class to detrmine ithe class of the compound
+ *		datatype member
+ * Inputs:      type_id - identifier of the dataspace
+ *              member_no - member's index
+ * Outputs:     class - member's class
+ *              and negative on failure.
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, April 6, 2005
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5tget_member_class_c ( hid_t_f *type_id ,  int_f *member_no, int_f *class )
+{
+  int ret_value = 0;
+  hid_t c_type_id;
+  unsigned c_member_no;
+  H5T_class_t c_class;
+
+  c_type_id = (hid_t)*type_id;
+  c_member_no = (unsigned)*member_no;
+  c_class = H5Tget_member_class(c_type_id, c_member_no);
+
+  if ( c_class == H5T_NO_CLASS  ) ret_value = -1;
+  *class = (int_f)c_class;
+  return ret_value;
+}

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Tff.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Tff.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Tff.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3251 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 file contains FORTRAN90 interfaces for H5T functions
+!
+      MODULE H5T
+
+        USE H5GLOBAL
+      
+      CONTAINS
+
+!----------------------------------------------------------------------
+! Name:		h5topen_f 
+!
+! Purpose: 	Opens named datatype. 	
+!
+! Inputs:  
+!		loc_id		- location identifier
+!		name		- a datatype name
+! Outputs:  
+!		type_id		- datatype 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5topen_f(loc_id, name, type_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5topen_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id  ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  
+                                  ! Datatype name within file or group
+            INTEGER(HID_T), INTENT(OUT) :: type_id  ! Datatype identifier 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+            INTEGER :: namelen          ! Name length 
+
+!            INTEGER, EXTERNAL :: h5topen_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5topen_c(loc_id, name, namelen, type_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TOPEN_C'::h5topen_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(OUT) :: type_id
+              END FUNCTION h5topen_c
+            END INTERFACE
+
+            namelen = LEN(name)
+            hdferr = h5topen_c(loc_id, name, namelen, type_id)
+          END SUBROUTINE h5topen_f
+
+!----------------------------------------------------------------------
+! Name:		h5tcommit_f 
+!
+! Purpose: 	Commits a transient datatype to a file, creating a 
+!		new named datatype. 	
+!
+! Inputs:  
+!		loc_id		- location identifier
+!		name		- name of the datatype to be stored
+!				  at the specified location
+!		type_id		- identifier of a datatype to be stored
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tcommit_f(loc_id, name, type_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tcommit_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: loc_id  ! File or group identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  
+                                  ! Datatype name within file or group
+            INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier 
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+            INTEGER :: namelen          ! Name length 
+
+!            INTEGER, EXTERNAL :: h5tcommit_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tcommit_c(loc_id, name, namelen, type_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TCOMMIT_C'::h5tcommit_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) :: type_id
+              END FUNCTION h5tcommit_c
+            END INTERFACE
+
+            namelen = LEN(name)
+            hdferr = h5tcommit_c(loc_id, name, namelen, type_id)
+          END SUBROUTINE h5tcommit_f
+
+!----------------------------------------------------------------------
+! Name:		h5tcopy_f 
+!
+! Purpose: 	iCreates a copy of exisiting datatype.	
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		new_type_id	- identifier of datatype's copy
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5tcopy_f(type_id, new_type_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tcopy_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER(HID_T), INTENT(OUT) :: new_type_id 
+                                 ! Identifier of datatype's copy 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tcopy_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION  h5tcopy_c(type_id, new_type_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TCOPY_C'::h5tcopy_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER(HID_T), INTENT(OUT) :: new_type_id
+              END FUNCTION h5tcopy_c
+            END INTERFACE
+
+            hdferr = h5tcopy_c(type_id, new_type_id)
+          END SUBROUTINE h5tcopy_f
+
+!----------------------------------------------------------------------
+! Name:		h5tequal_f 
+!
+! Purpose: 	Determines whether two datatype identifiers refer 
+!		to the same datatype. 	
+!
+! Inputs:  
+!		type1_id	- datatype identifier
+!		type2_id	- datatype identifier
+! Outputs:  
+!		flag		- TRUE/FALSE flag to indicate
+!				  if two datatypes are equal
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tequal_f(type1_id, type2_id, flag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tequal_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type1_id ! Datatype identifier 
+            INTEGER(HID_T), INTENT(IN) :: type2_id ! Datatype identifier 
+            LOGICAL, INTENT(OUT) :: flag ! TRUE/FALSE flag to indicate if two
+                                         ! datatypes are equal
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+            INTEGER :: c_flag
+
+!            INTEGER, EXTERNAL :: h5tequal_c
+!  MS FORTRAN needs explicit interface for C functions called here
+            INTERFACE
+              INTEGER FUNCTION h5tequal_c(type1_id, type2_id, c_flag)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TEQUAL_C'::h5tequal_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type1_id 
+              INTEGER(HID_T), INTENT(IN) :: type2_id 
+              INTEGER :: c_flag
+              END FUNCTION h5tequal_c
+            END INTERFACE
+
+            flag = .FALSE.
+            hdferr = h5tequal_c(type1_id, type2_id, c_flag)
+            if(c_flag .gt. 0) flag = .TRUE.
+          END SUBROUTINE h5tequal_f
+
+!----------------------------------------------------------------------
+! Name:		h5tclose_f 
+!
+! Purpose:	Releases a datatype.  	
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5tclose_f(type_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tclose_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL ::  h5tclose_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tclose_c(type_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TCLOSE_C'::h5tclose_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              END FUNCTION h5tclose_c
+            END INTERFACE
+
+            hdferr = h5tclose_c(type_id)
+          END SUBROUTINE h5tclose_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_class_f 
+!
+! Purpose:	Returns the datatype class identifier.  	
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		class		- class, possible values are:
+!					 H5T_NO_CLASS_F (-1)
+!					 H5T_INTEGER_F  (0)
+!					 H5T_FLOAT_F (1)
+!					 H5T_TIME_F  (2)
+!					 H5T_STRING_F (3)
+!					 H5T_BITFIELD_F (4)
+!					 H5T_OPAQUE_F (5)
+!					 H5T_COMPOUND_F (6)
+!					 H5T_REFERENCE_F (7)
+!					 H5T_ENUM_F (8)
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5tget_class_f(type_id, class, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_class_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(OUT) :: class 
+                           ! Datatype class, possible values are:
+                                          ! H5T_NO_CLASS_F (-1)
+                                          ! H5T_INTEGER_F  (0)
+                                          ! H5T_FLOAT_F (1)
+                                          ! H5T_TIME_F  (2)
+                                          ! H5T_STRING_F (3)
+                                          ! H5T_BITFIELD_F (4)
+                                          ! H5T_OPAQUE_F (5)
+                                          ! H5T_COMPOUND_F (6)
+                                          ! H5T_REFERENCE_F (7)
+                                          ! H5T_ENUM_F (8)
+          INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!          INTEGER, EXTERNAL :: h5tget_class_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_class_c(type_id, class)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_CLASS_C'::h5tget_class_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id 
+              INTEGER, INTENT(OUT) :: class
+              END FUNCTION h5tget_class_c
+            END INTERFACE
+
+          hdferr = h5tget_class_c(type_id, class)
+          END SUBROUTINE h5tget_class_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_size_f 
+!
+! Purpose: 	Returns the size of a datatype. 	
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		size		- datatype size
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5tget_size_f(type_id, size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_size_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER(SIZE_T), INTENT(OUT) :: size ! Datatype size
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_size_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_size_c(type_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_SIZE_C'::h5tget_size_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER(SIZE_T), INTENT(OUT) :: size
+              END FUNCTION h5tget_size_c
+            END INTERFACE
+
+            hdferr = h5tget_size_c(type_id, size)
+          END SUBROUTINE h5tget_size_f
+
+!----------------------------------------------------------------------
+! Name:		h5tset_size_f 
+!
+! Purpose: 	Sets the total size for an atomic datatype.	
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		size		- size of the datatype
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5tset_size_f(type_id, size, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tset_size_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER(SIZE_T), INTENT(IN) :: size ! Datatype size
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tset_size_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tset_size_c(type_id, size)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TSET_SIZE_C'::h5tset_size_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER(SIZE_T), INTENT(IN) :: size
+              END FUNCTION h5tset_size_c
+            END INTERFACE
+
+            hdferr = h5tset_size_c(type_id, size)
+          END SUBROUTINE h5tset_size_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_order_f 
+!
+! Purpose: 	Returns the byte order of an atomic datatype. 	
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		order		- byte order for the datatype, possible
+!				  values are:
+!					 H5T_ORDER_LE_F
+!					 H5T_ORDER_BE_F
+!					 H5T_ORDER_VAX_F (not implemented yet)
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5tget_order_f(type_id, order, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_order_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(OUT) :: order 
+                              ! Datatype byte order, bossible values are:
+                                          ! H5T_ORDER_LE_F
+                                          ! H5T_ORDER_BE_F
+                                          ! H5T_ORDER_VAX_F
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_order_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_order_c(type_id, order)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_ORDER_C'::h5tget_order_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(OUT) :: order
+              END FUNCTION h5tget_order_c
+            END INTERFACE
+
+            hdferr = h5tget_order_c(type_id, order)
+          END SUBROUTINE h5tget_order_f
+
+!----------------------------------------------------------------------
+! Name:		h5tset_order_f 
+!
+! Purpose: 	Sets the byte ordering of an atomic datatype. 	
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		order		- datatype byte order
+!				  Possible values are:
+!					 H5T_ORDER_LE_F
+!					 H5T_ORDER_BE_F
+!					 H5T_ORDER_VAX_F (not implemented yet)
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5tset_order_f(type_id, order, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tset_order_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(IN) :: order ! Datatype byte order, bossible values
+                                          ! are:
+                                          ! H5T_ORDER_LE_F 
+                                          ! H5T_ORDER_BE_F
+                                          ! H5T_ORDER_VAX_F 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tset_order_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tset_order_c(type_id, order)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TSET_ORDER_C'::h5tset_order_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(IN) :: order
+              END FUNCTION h5tset_order_c
+            END INTERFACE
+
+            hdferr = h5tset_order_c(type_id, order)
+          END SUBROUTINE h5tset_order_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_precision_f 
+!
+! Purpose: 	Returns the precision of an atomic datatype. 	
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		precision	- precision of the datatype
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5tget_precision_f(type_id, precision, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_precision_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER(SIZE_T), INTENT(OUT) :: precision ! Datatype precision
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_precision_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_precision_c (type_id, precision)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_PRECISION_C'::h5tget_precision_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id 
+              INTEGER(SIZE_T), INTENT(OUT) :: precision 
+              END FUNCTION h5tget_precision_c
+            END INTERFACE
+
+            hdferr = h5tget_precision_c(type_id, precision)
+          END SUBROUTINE h5tget_precision_f
+
+!----------------------------------------------------------------------
+! Name:		h5tset_precision_f 
+!
+! Purpose: 	Sets the precision of an atomic datatype. 	
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		precision	- datatype precision
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tset_precision_f(type_id, precision, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tset_precision_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER(SIZE_T), INTENT(IN) :: precision ! Datatype precision
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tset_precision_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tset_precision_c (type_id, precision)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TSET_PRECISION_C'::h5tset_precision_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id 
+              INTEGER(SIZE_T), INTENT(IN) :: precision 
+              END FUNCTION h5tset_precision_c
+            END INTERFACE
+
+            hdferr = h5tset_precision_c(type_id, precision)
+          END SUBROUTINE h5tset_precision_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_offset_f 
+!
+! Purpose: 	Retrieves the bit offset of the first significant bit. 	
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		offset		- offset value
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_offset_f(type_id, offset, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_offset_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER(SIZE_T), INTENT(OUT) :: offset ! Datatype bit offset of the
+                                           ! first significant bit
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_offset_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_offset_c(type_id, offset)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_OFFSET_C'::h5tget_offset_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id 
+              INTEGER(SIZE_T), INTENT(OUT) :: offset 
+              END FUNCTION h5tget_offset_c
+            END INTERFACE
+
+            hdferr = h5tget_offset_c(type_id, offset)
+          END SUBROUTINE h5tget_offset_f
+
+!----------------------------------------------------------------------
+! Name:		h5tset_offset_f 
+!
+! Purpose: 	Sets the bit offset of the first significant bit. 	
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		offset		- offset value
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tset_offset_f(type_id, offset, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tset_offset_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER(SIZE_T), INTENT(IN) :: offset ! Datatype bit offset of the
+                                           ! first significant bit
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tset_offset_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tset_offset_c(type_id, offset)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TSET_OFFSET_C'::h5tset_offset_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id 
+              INTEGER(SIZE_T), INTENT(IN) :: offset 
+              END FUNCTION h5tset_offset_c
+            END INTERFACE
+
+            hdferr = h5tset_offset_c(type_id, offset)
+          END SUBROUTINE h5tset_offset_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_pad_f 
+!
+! Purpose: 	Retrieves the padding type of the least and 
+!		most-significant bit padding. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		lsbpad		- least-significant bit padding type 
+!		msbpad		- most-significant bit padding type 
+!					 Possible values of padding type are:
+!					 H5T_PAD_ERROR_F      = -1
+!					 H5T_PAD_ZERO_F = 0
+!					 H5T_PAD_ONE_F = 1
+!					 H5T_PAD_BACKGROUND_F = 2
+!					 H5T_PAD_NPAD_F      = 3
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_pad_f(type_id, lsbpad, msbpad, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_pad_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(OUT) :: lsbpad ! padding type of the 
+                                           ! least significant bit
+            INTEGER, INTENT(OUT) :: msbpad ! padding type of the 
+                                           ! most significant bit
+                                           ! Possible values of padding type are:
+                                           ! H5T__PAD_ZERO_F = 0
+                                           ! H5T__PAD_ONE_F = 1
+                                           ! H5T__PAD_BACKGROUND_F = 2
+                                           ! H5T_PAD_ERROR_F      = -1
+                                           ! H5T_PAD_NPAD_F      = 3
+
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_pad_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_pad_c(type_id, lsbpad, msbpad)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_PAD_C'::h5tget_pad_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(OUT) :: lsbpad 
+              INTEGER, INTENT(OUT) :: msbpad
+              END FUNCTION h5tget_pad_c
+            END INTERFACE
+
+            hdferr = h5tget_pad_c(type_id, lsbpad, msbpad)
+          END SUBROUTINE h5tget_pad_f
+
+!----------------------------------------------------------------------
+! Name:		h5tset_pad_f 
+!
+! Purpose: 	Sets the least and most-significant bits padding types. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		lsbpad		- least-significant bit padding type 
+!		msbpad		- most-significant bit padding type 
+!					 Possible values of padding type are:
+!					 H5T_PAD_ERROR_F      = -1
+!					 H5T_PAD_ZERO_F = 0
+!					 H5T_PAD_ONE_F = 1
+!					 H5T_PAD_BACKGROUND_F = 2
+!					 H5T_PAD_NPAD_F      = 3
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tset_pad_f(type_id, lsbpad, msbpad, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tset_pad_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(IN) :: lsbpad ! padding type of the 
+                                           ! least significant bit
+            INTEGER, INTENT(IN) :: msbpad ! padding type of the 
+                                           ! most significant bit
+                                           ! Possible values of padding type are:
+                                           ! H5T_PAD_ZERO_F = 0
+                                           ! H5T_PAD_ONE_F = 1
+                                           ! H5T_PAD_BACKGROUND_F = 2
+                                           ! H5T_PAD_ERROR_F      = -1
+                                           ! H5T_PAD_NPAD_F      = 3
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5sget_pad_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tset_pad_c(type_id, lsbpad, msbpad)
+              USE H5GLOBAL
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TSET_PAD_C'::h5tset_pad_c
+              !DEC$ ENDIF
+              INTEGER, INTENT(IN) :: lsbpad 
+              INTEGER, INTENT(IN) :: msbpad
+              END FUNCTION h5tset_pad_c
+            END INTERFACE
+
+            hdferr = h5tset_pad_c(type_id, lsbpad, msbpad)
+          END SUBROUTINE h5tset_pad_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_sign_f 
+!
+! Purpose: 	Retrieves the sign type for an integer type. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		sign		- sign type 
+!					Possible values are:
+!					Unsigned integer type H5T_SGN_NONE_F = 0
+!					Two's complement signed integer type
+!					H5T_SGN_2_F = 1
+!					or error value: H5T_SGN_ERROR_F=-1 
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_sign_f(type_id, sign, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_sign_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(OUT) :: sign ! sign type for an integer type
+                                         !possible values are:
+                                         !Unsigned integer type H5T_SGN_NONE_F = 0
+                                         !Two's complement signed integer type
+                                         !H5T_SGN_2_F = 1
+                                         !or error value: H5T_SGN_ERROR_F=-1 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_sign_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_sign_c(type_id, sign)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_SIGN_C'::h5tget_sign_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(OUT) :: sign
+              END FUNCTION h5tget_sign_c
+            END INTERFACE
+
+            hdferr = h5tget_sign_c(type_id, sign)
+          END SUBROUTINE h5tget_sign_f
+
+!----------------------------------------------------------------------
+! Name:		h5tset_sign_f 
+!
+! Purpose: 	Sets the sign proprety for an integer type. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		sign		- sign type 
+!					Possible values are:
+!					Unsigned integer type H5T_SGN_NONE_F = 0
+!					Two's complement signed integer type
+!					H5T_SGN_2_F = 1
+!					or error value: H5T_SGN_ERROR_F=-1 
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tset_sign_f(type_id, sign, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tset_sign_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(IN) :: sign !sign type for an integer type 
+                                         !possible values are:
+                                         !Unsigned integer type H5T_SGN_NONE_F = 0
+                                         !Two's complement signed integer type
+                                         !H5T_SGN_2_F = 1
+                                         !or error value: H5T_SGN_ERROR_F=-1 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tset_sign_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tset_sign_c(type_id, sign)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TSET_SIGN_C'::h5tset_sign_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(IN) :: sign
+              END FUNCTION h5tset_sign_c
+            END INTERFACE
+
+            hdferr = h5tset_sign_c(type_id, sign)
+          END SUBROUTINE h5tset_sign_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_fields_f 
+!
+! Purpose: 	Retrieves floating point datatype bit field information. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		epos		- exponent bit-position
+!		esize		- size of exponent in bits
+!		mpos		- mantissa position
+!		msize		- size of mantissa in bits
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_fields_f(type_id, epos, esize, mpos, msize, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_fields_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(OUT) :: epos   ! exponent bit-position 
+            INTEGER, INTENT(OUT) :: esize  ! size of exponent in bits
+            INTEGER, INTENT(OUT) :: mpos   ! mantissa bit-position 
+            INTEGER, INTENT(OUT) :: msize  ! size of mantissa in bits
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_fields_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_fields_c(type_id, epos, esize, mpos, msize)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_FIELDS_C'::h5tget_fields_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(OUT) :: epos  
+              INTEGER, INTENT(OUT) :: esize
+              INTEGER, INTENT(OUT) :: mpos 
+              INTEGER, INTENT(OUT) :: msize
+              END FUNCTION h5tget_fields_c
+            END INTERFACE
+
+            hdferr = h5tget_fields_c(type_id, epos, esize, mpos, msize)
+          END SUBROUTINE h5tget_fields_f
+
+!----------------------------------------------------------------------
+! Name:		h5tset_fields_f 
+!
+! Purpose: 	Sets locations and sizes of floating point bit fields. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		epos		- exponent bit-position
+!		esize		- size of exponent in bits
+!		mpos		- mantissa position
+!		msize		- size of mantissa in bits
+!		hdferr:		- error code		
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tset_fields_f(type_id, epos, esize, mpos, msize, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tset_fields_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
+            INTEGER, INTENT(IN) :: epos   ! exponent bit-position 
+            INTEGER, INTENT(IN) :: esize  ! size of exponent in bits
+            INTEGER, INTENT(IN) :: mpos   ! mantissa bit-position 
+            INTEGER, INTENT(IN) :: msize  ! size of mantissa in bits
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tset_fields_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tset_fields_c(type_id, epos, esize, mpos, msize)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TSET_FIELDS_C'::h5tset_fields_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(IN) :: epos  
+              INTEGER, INTENT(IN) :: esize
+              INTEGER, INTENT(IN) :: mpos 
+              INTEGER, INTENT(IN) :: msize
+              END FUNCTION h5tset_fields_c
+            END INTERFACE
+
+            hdferr = h5tset_fields_c(type_id, epos, esize, mpos, msize)
+          END SUBROUTINE h5tset_fields_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_ebias_f 
+!
+! Purpose: 	Retrieves the exponent bias of a floating-point type. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		ebias		- datatype exponent bias
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_ebias_f(type_id, ebias, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_ebias_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER(SIZE_T), INTENT(OUT) :: ebias ! Datatype exponent bias of a floating-point type
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_ebias_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_ebias_c(type_id, ebias)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_EBIAS_C'::h5tget_ebias_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id 
+              INTEGER(SIZE_T), INTENT(OUT) :: ebias
+              END FUNCTION h5tget_ebias_c
+            END INTERFACE
+
+            hdferr = h5tget_ebias_c(type_id, ebias)
+          END SUBROUTINE h5tget_ebias_f
+
+!----------------------------------------------------------------------
+! Name:		h5tset_ebias_f 
+!
+! Purpose: 	Sets the exponent bias of a floating-point type. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		ebias		- datatype exponent bias
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5tset_ebias_f(type_id, ebias, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tset_ebias_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER(SIZE_T), INTENT(IN) :: ebias !Datatype exponent bias of a floating-point type
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tset_ebias_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tset_ebias_c(type_id, ebias)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TSET_EBIAS_C'::h5tset_ebias_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id 
+              INTEGER(SIZE_T), INTENT(IN) :: ebias
+              END FUNCTION h5tset_ebias_c
+            END INTERFACE
+
+            hdferr = h5tset_ebias_c(type_id, ebias)
+          END SUBROUTINE h5tset_ebias_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_norm_f 
+!
+! Purpose: 	Retrieves mantissa normalization of a floating-point 
+!		datatype. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		norm		- normalization types, valid values are:
+!					H5T_NORM_IMPLIED_F(0)
+!					H5T_NORM_MSBSET_F(1)
+!					H5T_NORM_NONE_F(2)
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_norm_f(type_id, norm, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_norm_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(OUT) :: norm !mantissa normalization of a floating-point datatype
+                                         !Valid normalization types are:
+                                         !H5T_NORM_IMPLIED_F(0),MSB of mantissa is not 
+                                         !stored, always 1,  H5T_NORM_MSBSET_F(1), MSB of 
+                                         !mantissa is always 1, H5T_NORM_NONE_F(2)
+                                         !Mantissa is not normalize
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_norm_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_norm_c(type_id, norm)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_NORM_C'::h5tget_norm_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(OUT) :: norm
+              END FUNCTION h5tget_norm_c
+            END INTERFACE
+
+            hdferr = h5tget_norm_c(type_id, norm)
+          END SUBROUTINE h5tget_norm_f
+
+!----------------------------------------------------------------------
+! Name:		h5tset_norm_f 
+!
+! Purpose: 	Sets the mantissa normalization of a floating-point datatype. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		norm		- normalization types, valid values are:
+!					H5T_NORM_IMPLIED_F(0)
+!					H5T_NORM_MSBSET_F(1)
+!					H5T_NORM_NONE_F(2)
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5tset_norm_f(type_id, norm, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tset_norm_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(IN) :: norm !mantissa normalization of a floating-point datatype
+                                         !Valid normalization types are:
+                                         !H5T_NORM_IMPLIED_F(0),MSB of mantissa is not 
+                                         !stored, always 1,  H5T_NORM_MSBSET_F(1), MSB of 
+                                         !mantissa is always 1, H5T_NORM_NONE_F(2)
+                                         !Mantissa is not normalize
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tset_norm_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tset_norm_c(type_id, norm)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TSET_NORM_C'::h5tset_norm_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(IN) :: norm
+              END FUNCTION h5tset_norm_c
+            END INTERFACE
+
+            hdferr = h5tset_norm_c(type_id, norm)
+          END SUBROUTINE h5tset_norm_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_inpad_f 
+!
+! Purpose: 	Retrieves the internal padding type for unused bits 
+!		in floating-point datatypes. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		padtype		- padding type for unused bits
+!				  Possible values of padding type are:
+!					 H5T_PAD_ZERO_F = 0
+!					 H5T_PAD_ONE_F = 1
+!					 H5T_PAD_BACKGROUND_F = 2
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_inpad_f(type_id, padtype, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_inpad_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(OUT) :: padtype ! padding type for unused bits 
+                                            ! in floating-point datatypes.
+                                            ! Possible values of padding type are:
+                                            ! H5T__PAD_ZERO_F = 0
+                                            ! H5T__PAD_ONE_F = 1
+                                            ! H5T__PAD_BACKGROUND_F = 2
+
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_inpad_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_inpad_c(type_id, padtype)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_INPAD_C'::h5tget_inpad_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(OUT) :: padtype
+              END FUNCTION h5tget_inpad_c
+            END INTERFACE
+
+            hdferr = h5tget_inpad_c(type_id, padtype)
+          END SUBROUTINE h5tget_inpad_f
+
+!----------------------------------------------------------------------
+! Name:		h5tset_inpad_f 
+!
+! Purpose: 	Fills unused internal floating point bits. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		padtype		- padding type for unused bits
+!				  Possible values of padding type are:
+!					 H5T_PAD_ZERO_F = 0
+!					 H5T_PAD_ONE_F = 1
+!					 H5T_PAD_BACKGROUND_F = 2
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tset_inpad_f(type_id, padtype, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tset_inpad_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(IN) :: padtype ! padding type for unused bits 
+                                           ! in floating-point datatypes.
+                                           ! Possible values of padding type are:
+                                           ! H5T__PAD_ZERO_F = 0
+                                           ! H5T__PAD_ONE_F = 1
+                                           ! H5T__PAD_BACKGROUND_F = 2
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tset_inpad_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tset_inpad_c(type_id, padtype)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TSET_INPAD_C'::h5tset_inpad_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(IN) :: padtype
+              END FUNCTION h5tset_inpad_c
+            END INTERFACE
+
+            hdferr = h5tset_inpad_c(type_id, padtype)
+          END SUBROUTINE h5tset_inpad_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_cset_f 
+!
+! Purpose: 	Retrieves the character set type of a string datatype. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		cset		- character set type of a string datatype
+!				  Possible values of padding type are:
+!				                  H5T_CSET_ASCII_F = 0
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_cset_f(type_id, cset, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_cset_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(OUT) :: cset ! character set type of a string datatype 
+                                            ! Possible values of padding type are:
+                                            !H5T_CSET_ASCII_F = 0
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_cset_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_cset_c(type_id, cset)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_CSET_C'::h5tget_cset_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(OUT) :: cset
+              END FUNCTION h5tget_cset_c
+            END INTERFACE
+
+            hdferr = h5tget_cset_c(type_id, cset)
+          END SUBROUTINE h5tget_cset_f
+
+!----------------------------------------------------------------------
+! Name:		h5tset_cset_f 
+!
+! Purpose: 	Sets character set to be used. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		cset		- character set type of a string datatype
+!				  Possible values of padding type are:
+!				                  H5T_CSET_ASCII_F = 0
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tset_cset_f(type_id, cset, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tset_cset_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(IN) :: cset !character set type of a string datatype  
+                                           !Possible values of padding type are:
+                                           !H5T_CSET_ASCII_F = 0
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tset_cset_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tset_cset_c(type_id, cset)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TSET_CSET_C'::h5tset_cset_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(IN) :: cset
+              END FUNCTION h5tset_cset_c
+            END INTERFACE
+
+            hdferr = h5tset_cset_c(type_id, cset)
+          END SUBROUTINE h5tset_cset_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_strpad_f 
+!
+! Purpose: 	Retrieves the storage mechanism for a string datatype. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		strpad		- storage method for a string datatype
+!				  Possible values are:
+!				  H5T_STR_NULLTERM_F, 
+!				  H5T_STR_NULLPAD_F, 
+!				  H5T_STR_SPACEPAD_F
+!				  H5T_STR_ERROR_F
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_strpad_f(type_id, strpad, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_strpad_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(OUT) :: strpad 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_strpad_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_strpad_c(type_id, strpad)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_STRPAD_C'::h5tget_strpad_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(OUT) :: strpad
+              END FUNCTION h5tget_strpad_c
+            END INTERFACE
+
+            hdferr = h5tget_strpad_c(type_id, strpad)
+          END SUBROUTINE h5tget_strpad_f
+
+!----------------------------------------------------------------------
+! Name:		h5tset_strpad_f 
+!
+! Purpose: 	Defines the storage mechanism for character strings. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		strpad		- storage method for a string datatype
+!				  Possible values are:
+!				  H5T_STR_NULLTERM_F, 
+!				  H5T_STR_NULLPAD_F, 
+!				  H5T_STR_SPACEPAD_F
+!				  H5T_STR_ERROR_F
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tset_strpad_f(type_id, strpad, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tset_strpad_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(IN) :: strpad ! string padding method for a string datatype 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tset_strpad_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tset_strpad_c(type_id, strpad)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TSET_STRPAD_C'::h5tset_strpad_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(IN) :: strpad
+              END FUNCTION h5tset_strpad_c
+            END INTERFACE
+
+            hdferr = h5tset_strpad_c(type_id, strpad)
+          END SUBROUTINE h5tset_strpad_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_nmembers_f 
+!
+! Purpose: 	Retrieves the number of fields in a compound datatype. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		num_members	- number of members	
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5tget_nmembers_f(type_id, num_members, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_nmembers_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(OUT) :: num_members !number of fields in a compound datatype 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_nmembers_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_nmembers_c(type_id, num_members)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_NMEMBERS_C'::h5tget_nmembers_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(OUT) :: num_members
+              END FUNCTION h5tget_nmembers_c
+            END INTERFACE
+
+            hdferr = h5tget_nmembers_c(type_id, num_members)
+          END SUBROUTINE h5tget_nmembers_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_member_name_f 
+!
+! Purpose: 	Retrieves the name of a field of a compound datatype. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		index		- filed index (0-based)
+! Outputs:  
+!		member_name	- buffer to hold member's name
+!		namelen		- name lenght
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_member_name_f(type_id, index, member_name,  namelen, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_member_name_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(IN) :: index !Field index (0-based) of the field name to retrieve 
+            CHARACTER(LEN=*), INTENT(OUT) :: member_name !name of a field of
+                                                         !a compound datatype 
+            INTEGER, INTENT(OUT) :: namelen ! Length of the name 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_member_name_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_member_name_c(type_id, index, member_name, namelen)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_MEMBER_NAME_C'::h5tget_member_name_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: member_name
+              INTEGER(HID_T), INTENT(IN) :: type_id 
+              INTEGER, INTENT(IN) :: index
+              CHARACTER(LEN=*), INTENT(OUT) :: member_name
+              INTEGER, INTENT(OUT) :: namelen
+              END FUNCTION 
+            END INTERFACE
+
+            hdferr = h5tget_member_name_c(type_id, index, member_name, namelen)
+          END SUBROUTINE h5tget_member_name_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_member_offset_f 
+!
+! Purpose: 	Retrieves the offset of a field of a compound datatype. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		member_no 	- number of the field
+! Outputs:  
+!		offset		- byte offset of the requested field
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_member_offset_f(type_id, member_no, offset, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_member_offset_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(IN) :: member_no !Number of the field  
+                                                       !whose offset is requested
+            INTEGER(SIZE_T), INTENT(OUT) :: offset !byte offset of the beginning of the field
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_member_offset_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_member_offset_c(type_id, member_no, offset )
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_MEMBER_OFFSET_C'::h5tget_member_offset_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(IN) :: member_no
+              INTEGER(SIZE_T), INTENT(OUT) :: offset
+              END FUNCTION h5tget_member_offset_c
+            END INTERFACE
+
+            hdferr = h5tget_member_offset_c(type_id, member_no, offset )
+          END SUBROUTINE h5tget_member_offset_f
+!----------------------------------------------------------------------
+! Name:		h5tget_member_index_f 
+!
+! Purpose: 	Retrieves the index of a compound or enumeration datatype member. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		name		- name of the field or member whose index to
+!                                 to be retrieved from the datatype.
+! Outputs:  
+!               index           - 0-based index of the filed or member (0 to N-1)
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		September 26, 2002
+!
+! Modifications:
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_member_index_f(type_id, name, index, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_member_index_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name   ! Field or member name
+            INTEGER, INTENT(OUT) :: index          ! Field or member index
+            INTEGER, INTENT(OUT) :: hdferr          ! Error code
+            INTEGER :: namelen          ! Name length 
+
+            INTERFACE
+              INTEGER FUNCTION h5tget_member_index_c(type_id, name, namelen, index)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_MEMBER_INDEX_C'::h5tget_member_index_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference ::name 
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN)  :: namelen
+              INTEGER, INTENT(OUT) :: index  
+              END FUNCTION h5tget_member_index_c
+            END INTERFACE
+
+            namelen = LEN(name)
+            hdferr = h5tget_member_index_c(type_id, name, namelen, index)
+          END SUBROUTINE h5tget_member_index_f
+
+
+!----------------------------------------------------------------------
+! Name:		h5tget_member_dim_f 
+!
+! Purpose: 	This function is not supported in hdf5-1.4.* 
+!
+! Inputs:  
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+!          SUBROUTINE h5tget_member_dims_f(type_id, field_idx,dims, field_dims, perm, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_member_dims_f
+!DEC$endif
+!
+!            IMPLICIT NONE
+!            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+!            INTEGER, INTENT(IN) :: field_idx !Field index (0-based) of 
+!                                             !field_dims, perm)
+!            INTEGER, INTENT(OUT) :: dims     !number of dimensions of the field
+!
+!            INTEGER(SIZE_T),DIMENSION(*), INTENT(OUT) ::  field_dims !buffer to store the 
+!                                                                      !dimensions of the field
+!            INTEGER, DIMENSION(*), INTENT(OUT)  ::  perm  !buffer to store the 
+!                                                                   !permutation vector of the field
+!            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!            INTEGER, EXTERNAL :: h5tget_member_dims_c
+!            hdferr = h5tget_member_dims_c(type_id, field_idx, dims, field_dims, perm)
+!
+!          END SUBROUTINE h5tget_member_dims_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_array_dims_f 
+!
+! Purpose: 	Returns sizes of array dimensions.
+!
+! Inputs:  
+!		type_id		- array datatype identifier
+! Outputs:  
+!		dims		- buffer to store array datatype
+!				  dimensions
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_array_dims_f(type_id, dims, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_array_dims_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Array datatype identifier 
+            INTEGER(HSIZE_T),DIMENSION(*), INTENT(OUT) ::  dims !buffer to store array datatype
+                                                                ! dimensions 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_array_dims_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_array_dims_c(type_id, dims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_ARRAY_DIMS_C'::h5tget_array_dims_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER(HSIZE_T),DIMENSION(*), INTENT(OUT) ::  dims
+              END FUNCTION h5tget_array_dims_c
+            END INTERFACE
+
+            hdferr = h5tget_array_dims_c(type_id, dims)
+
+          END SUBROUTINE h5tget_array_dims_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_array_ndims_f 
+!
+! Purpose: 	Returns the rank of an array datatype. 
+!
+! Inputs:  
+!		type_id		- array datatype identifier
+! Outputs:  
+!		ndims		- number of array dimensions
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_array_ndims_f(type_id, ndims, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_array_ndims_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Array datatype identifier 
+            INTEGER, INTENT(OUT) ::  ndims ! number of array dimensions
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_array_ndims_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_array_ndims_c(type_id, ndims)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_ARRAY_NDIMS_C'::h5tget_array_ndims_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(OUT) ::  ndims
+              END FUNCTION h5tget_array_ndims_c
+            END INTERFACE
+
+            hdferr = h5tget_array_ndims_c(type_id, ndims)
+
+          END SUBROUTINE h5tget_array_ndims_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_super_f 
+!
+! Purpose: 	Returns the base datatype from which a datatype is derived. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		base_type_id	- identifier of the base type		
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_super_f(type_id, base_type_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_super_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! datatype identifier 
+            INTEGER(HID_T), INTENT(OUT) :: base_type_id ! identifier of the datatype
+                                           ! from which datatype (type_id) was derived
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_super_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_super_c(type_id, base_type_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_SUPER_C'::h5tget_super_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id 
+              INTEGER(HID_T), INTENT(OUT) :: base_type_id
+              END FUNCTION h5tget_super_c
+            END INTERFACE
+
+            hdferr = h5tget_super_c(type_id, base_type_id)
+
+          END SUBROUTINE h5tget_super_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_member_type_f 
+!
+! Purpose: 	Returns the datatype of the specified member. 
+!
+! Inputs:  
+!		type_id		- compound datatype identifier
+!		field_idx	- field index (0-based)
+!
+! Outputs:  
+!		datatype	- idnetifier of the member's datatype
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_member_type_f(type_id,  field_idx, datatype, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_member_type_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(IN) :: field_idx !Field index (0-based) of the field type to retrieve
+            INTEGER(HID_T), INTENT(OUT) :: datatype !identifier of a copy of 
+                                                    !the datatype of the field 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_member_type_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_member_type_c(type_id, field_idx , datatype)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_MEMBER_TYPE_C'::h5tget_member_type_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(IN) :: field_idx
+              INTEGER(HID_T), INTENT(OUT) :: datatype
+              END FUNCTION h5tget_member_type_c
+            END INTERFACE
+
+            hdferr = h5tget_member_type_c(type_id, field_idx , datatype)
+          END SUBROUTINE h5tget_member_type_f
+
+!----------------------------------------------------------------------
+! Name:		h5tcreate_f 
+!
+! Purpose: 	Creates a new dataype
+!
+! Inputs:  
+!		class		- datatype class, possible values are:
+!					 H5T_COMPOUND_F
+!					 H5T_ENUM_F   
+!					 H5T_OPAQUE_F
+!		size		- datattype size
+! Outputs:  
+!		type_id		- datatype 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+
+          SUBROUTINE h5tcreate_f(class, size, type_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tcreate_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER, INTENT(IN) :: class ! Datatype class can be one of
+                                         ! H5T_COMPOUND_F
+                                         ! H5T_ENUM_F   
+                                         ! H5T_OPAQUE_F
+            INTEGER(SIZE_T), INTENT(IN) :: size ! Size of the datatype
+            INTEGER(HID_T), INTENT(OUT) :: type_id ! Datatype identifier
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tcreate_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tcreate_c(class, size, type_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TCREATE_C'::h5tcreate_c
+              !DEC$ ENDIF
+              INTEGER, INTENT(IN) :: class 
+              INTEGER(SIZE_T), INTENT(IN) :: size 
+              INTEGER(HID_T), INTENT(OUT) :: type_id 
+              END FUNCTION h5tcreate_c
+            END INTERFACE
+
+           hdferr = h5tcreate_c(class, size, type_id)
+          END SUBROUTINE h5tcreate_f
+
+!----------------------------------------------------------------------
+! Name:		h5tinsert_f 
+!
+! Purpose: 	Adds a new member to a compound datatype. 
+!
+! Inputs:  
+!		type_id		- compound dattype identifier
+!		name		- name of the field to insert
+!		offset		- start of the member in an instance of 
+!				  the compound datatype
+!		field_id	- datatype identifier of the field to insert
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tinsert_f(type_id,  name, offset, field_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tinsert_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name !Name of the field to insert
+            INTEGER(SIZE_T), INTENT(IN) :: offset !start of the member in an instance of
+                                                   !the compound datatype
+            INTEGER(HID_T), INTENT(IN) :: field_id !datatype identifier of the new member
+
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+            INTEGER :: namelen
+
+!            INTEGER, EXTERNAL :: h5tinsert_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tinsert_c(type_id, name, namelen, offset, field_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TINSERT_C'::h5tinsert_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER(SIZE_T), INTENT(IN) :: offset
+              INTEGER(HID_T), INTENT(IN) :: field_id 
+              INTEGER :: namelen
+              END FUNCTION h5tinsert_c
+            END INTERFACE
+
+            namelen = LEN(name)
+            hdferr = h5tinsert_c(type_id, name, namelen, offset, field_id )
+          END SUBROUTINE h5tinsert_f
+
+!----------------------------------------------------------------------
+! Name:		h5tpack_f 
+!
+! Purpose: 	Recursively removes padding from within a compound datatype. 
+!
+! Inputs:  
+!		type_id		- compound datatype identifier
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tpack_f(type_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tpack_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tpack_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tpack_c(type_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TPACK_C'::h5tpack_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              END FUNCTION h5tpack_c
+            END INTERFACE
+
+            hdferr = h5tpack_c(type_id) 
+          END SUBROUTINE h5tpack_f
+
+!----------------------------------------------------------------------
+! Name:		h5tinsert_array_f 
+!
+! Purpose: 	This function is not available on hdf5-1.4.*
+!
+! Inputs:  
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+!          SUBROUTINE h5tinsert_array_f(parent_id,name,offset, ndims, dims, member_id, hdferr, perm) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tinsert_array_f
+!DEC$endif
+!
+!            IMPLICIT NONE
+!            INTEGER(HID_T), INTENT(IN) :: parent_id ! identifier of the parent compound datatype
+!            CHARACTER(LEN=*), INTENT(IN) :: name !Name of the new member
+!            INTEGER(SIZE_T), INTENT(IN) :: offset !Offset to start of new member 
+!                                                   !within compound datatype
+!            INTEGER, INTENT(IN) ::  ndims !Dimensionality of new member. 
+!                                          !Valid values are 0 (zero) through 4 (four)
+!            INTEGER(SIZE_T), DIMENSION(*), INTENT(IN) :: dims !Size of new member array
+!            INTEGER(HID_T), INTENT(IN) :: member_id ! identifier of the datatype of the new member
+!            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!
+!            INTEGER, DIMENSION(*), OPTIONAL, INTENT(IN) :: perm 
+!                                                               !Pointer to buffer to store 
+!                                                               !the permutation vector of the field
+!            INTEGER :: namelen, sizeofperm
+!            INTEGER, EXTERNAL :: h5tinsert_array_c,  h5tinsert_array_c2
+!            namelen = LEN(name)
+!            if (present(perm)) then
+!              hdferr = h5tinsert_array_c(parent_id, name, namelen, offset, ndims,dims, member_id, perm)
+!            else
+!              hdferr = h5tinsert_array_c2(parent_id, name, namelen, offset, ndims,dims, member_id)  
+!            end if           
+!           
+!         END SUBROUTINE h5tinsert_array_f
+
+!----------------------------------------------------------------------
+! Name:		h5tarray_create_f 
+!
+! Purpose: 	Creates an array datatype object. 
+!
+! Inputs:  
+!		base_id		- datatype identifier for the array 
+!				  base datatype
+!		rank		- rank of the array
+!		dims		- array dimension sizes
+! Outputs:  
+!		type_id		- array datatype 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+         
+          SUBROUTINE h5tarray_create_f(base_id, rank, dims, type_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tarray_create_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: base_id ! identifier of array base datatype
+            INTEGER, INTENT(IN) ::  rank ! Rank of the array
+            INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims !Sizes of each array dimension
+            INTEGER(HID_T), INTENT(OUT) :: type_id ! identifier of the array datatype 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+
+!            INTEGER, EXTERNAL :: h5tarray_create_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tarray_create_c(base_id, rank, dims, type_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TARRAY_CREATE_C'::h5tarray_create_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: base_id
+              INTEGER, INTENT(IN) ::  rank
+              INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims
+              INTEGER(HID_T), INTENT(OUT) :: type_id
+              END FUNCTION h5tarray_create_c
+            END INTERFACE
+
+            hdferr = h5tarray_create_c(base_id, rank, dims, type_id)
+           
+         END SUBROUTINE h5tarray_create_f
+
+!----------------------------------------------------------------------
+! Name:		h5tenum_create_f 
+!
+! Purpose: 	Creates a new enumeration datatype. 
+!
+! Inputs:  
+!		parent_id	- datatype identifier for base datatype		
+! Outputs:  
+!		new_type_id	- datatype identifier for the enumeration
+!				  datatype
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tenum_create_f(parent_id, new_type_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tenum_create_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: parent_id  ! Datatype identifier for
+                                                     ! the  base datatype
+            INTEGER(HID_T), INTENT(OUT) :: new_type_id 
+                                                     !datatype identifier for the
+                                                     ! new enumeration datatype    
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tenum_create_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tenum_create_c(parent_id, new_type_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TENUM_CREATE_C'::h5tenum_create_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: parent_id 
+              INTEGER(HID_T), INTENT(OUT) :: new_type_id 
+              END FUNCTION h5tenum_create_c
+            END INTERFACE
+
+            hdferr = h5tenum_create_c(parent_id, new_type_id)
+          END SUBROUTINE h5tenum_create_f
+
+!----------------------------------------------------------------------
+! Name:		h5tenaum_insert_f 
+!
+! Purpose: 	Inserts a new enumeration datatype member. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		August 12, 1999	
+!
+! Modifications: 	Explicit Fortran interfaces were added for 
+!			called C functions (it is needed for Windows
+!			port).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+            
+          SUBROUTINE h5tenum_insert_f(type_id,  name, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tenum_insert_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  !Name of  the new member
+            INTEGER, INTENT(IN) :: value !value of the new member
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+            INTEGER :: namelen
+
+!            INTEGER, EXTERNAL :: h5tenum_insert_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tenum_insert_c(type_id, name, namelen, value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TENUM_INSERT_C'::h5tenum_insert_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: type_id 
+              CHARACTER(LEN=*), INTENT(IN) :: name 
+              INTEGER, INTENT(IN) :: value
+              INTEGER :: namelen
+              END FUNCTION h5tenum_insert_c
+            END INTERFACE
+
+            namelen = LEN(name)
+            hdferr = h5tenum_insert_c(type_id, name, namelen, value)
+          END SUBROUTINE h5tenum_insert_f
+
+!----------------------------------------------------------------------
+! Name:		h5tenum_nameof_f 
+!
+! Purpose: 	Returns the symbol name corresponding to a specified 
+!    		member of an enumeration datatype. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		value		- value of the enumeration datatype 
+!		namelen		- name buffer size
+! Outputs:  
+!		name		- buffer to hold symbol name
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tenum_nameof_f(type_id,  value, namelen, name, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tenum_nameof_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            CHARACTER(LEN=*), INTENT(OUT) :: name  !Name of the  enumeration datatype.
+            INTEGER(SIZE_T), INTENT(IN) :: namelen !length of the name
+            INTEGER, INTENT(IN) :: value !value of the  enumeration datatype.
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tenum_nameof_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tenum_nameof_c(type_id, value, name, namelen)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TENUM_NAMEOF_C'::h5tenum_nameof_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: type_id 
+              CHARACTER(LEN=*), INTENT(OUT) :: name
+              INTEGER(SIZE_T), INTENT(IN) :: namelen 
+              INTEGER, INTENT(IN) :: value
+              END FUNCTION h5tenum_nameof_c
+            END INTERFACE
+
+            hdferr = h5tenum_nameof_c(type_id, value, name, namelen)
+          END SUBROUTINE h5tenum_nameof_f
+
+!----------------------------------------------------------------------
+! Name:		h5tenum_valuof_f 
+!
+! Purpose: 	Returns the value corresponding to a specified 
+!		member of an enumeration datatype. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		name		- symbol name
+! Outputs:  
+!		value		- value of the enumeration datatype
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+            
+          SUBROUTINE h5tenum_valueof_f(type_id,  name, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tenum_valueof_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: name  !Name of the  enumeration datatype.
+            INTEGER, INTENT(OUT) :: value !value of the  enumeration datatype.
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+            INTEGER :: namelen
+
+!            INTEGER, EXTERNAL :: h5tenum_valueof_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tenum_valueof_c(type_id, name, namelen,  value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TENUM_VALUEOF_C'::h5tenum_valueof_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: name
+              INTEGER(HID_T), INTENT(IN) :: type_id 
+              CHARACTER(LEN=*), INTENT(IN) :: name
+              INTEGER, INTENT(IN) :: namelen 
+              INTEGER, INTENT(OUT) :: value
+              END FUNCTION h5tenum_valueof_c
+            END INTERFACE
+
+            namelen = LEN(name)
+            hdferr = h5tenum_valueof_c(type_id, name, namelen,  value)
+          END SUBROUTINE h5tenum_valueof_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_member_value_f 
+!
+! Purpose: 	Returns the value of an enumeration datatype member. 
+!
+! Inputs:  
+!		type_id		- datatype identifier
+!		member_no	- number of the enumeration datatype member
+! Outputs:  
+!		value		- value of the enumeration datatype
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_member_value_f(type_id,  member_no, value, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_member_value_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            INTEGER, INTENT(IN) :: member_no !Number of the enumeration datatype member
+            INTEGER, INTENT(OUT) :: value !value of the  enumeration datatype.
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_member_value_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_member_value_c(type_id, member_no, value)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_MEMBER_VALUE_C'::h5tget_member_value_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id 
+              INTEGER, INTENT(IN) :: member_no
+              INTEGER, INTENT(OUT) :: value
+              END FUNCTION 
+            END INTERFACE
+
+            hdferr = h5tget_member_value_c(type_id, member_no, value)
+          END SUBROUTINE h5tget_member_value_f
+
+!----------------------------------------------------------------------
+! Name:		h5tset_tag_f 
+!
+! Purpose: 	Tags an opaque datatype. 
+!
+! Inputs:  
+!		type_id		- identifier for opaque datatype
+!		tag		- unique ASCII string with which the opaque 
+!				  datatype is to be tagged. 
+! 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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tset_tag_f(type_id, tag, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tset_tag_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            CHARACTER(LEN=*), INTENT(IN) :: tag !Unique ASCII string with which 
+                                                !the opaque datatype is to be tagged 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+            INTEGER :: taglen
+
+!            INTEGER, EXTERNAL :: h5tset_tag_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tset_tag_c(type_id, tag, namelen)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TSET_TAG_C'::h5tset_tag_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: tag
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              CHARACTER(LEN=*), INTENT(IN) :: tag
+              INTEGER :: taglen
+              END FUNCTION h5tset_tag_c
+            END INTERFACE
+
+            taglen = LEN(tag)
+            hdferr = h5tset_tag_c(type_id, tag, taglen)
+          END SUBROUTINE h5tset_tag_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_tag_f 
+!
+! Purpose: 	Gets the tag associated with an opaque datatype. 
+!
+! Inputs:  
+!		type_id		- identifier for opaque datatype
+! Outputs:  
+!		tag		- unique ASCII string associated with opaque
+!				  datatype
+!		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).  March 7, 2001 
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_tag_f(type_id, tag,taglen, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_tag_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier 
+            CHARACTER(LEN=*), INTENT(OUT) :: tag !Unique ASCII string with which 
+                                                !the opaque datatype is to be tagged
+            INTEGER, INTENT(OUT) :: taglen !length of tag 
+            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+!            INTEGER, EXTERNAL :: h5tget_tag_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_tag_c(type_id, tag, taglen)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_TAG_C'::h5tget_tag_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: tag
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              CHARACTER(LEN=*), INTENT(OUT) :: tag
+              INTEGER, INTENT(OUT) :: taglen 
+              END FUNCTION h5tget_tag_c
+            END INTERFACE
+
+            hdferr = h5tget_tag_c(type_id, tag, taglen)
+          END SUBROUTINE h5tget_tag_f
+
+!----------------------------------------------------------------------
+! Name:		h5tvlen_create_f 
+!
+! Purpose: 	Creates a new variable-lenght datatype. 
+!
+! Inputs:  
+!		type_id		- identifier iof base datatype
+! Outputs:  
+!		vltype_id	- identifier for VL datatype
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		Wednesday, October 23, 2002
+!
+! Modifications: 	
+!
+! Comment: Only basic Fortran base datatypes are supported		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tvlen_create_f(type_id, vltype_id, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tvlen_create_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN)  :: type_id    ! Datatype identifier 
+            INTEGER(HID_T), INTENT(OUT) :: vltype_id  ! VL datatype identifier 
+            INTEGER, INTENT(OUT) :: hdferr            ! Error code
+
+            INTERFACE
+              INTEGER FUNCTION h5tvlen_create_c(type_id, vltype_id)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TVLEN_CREATE_C'::h5tvlen_create_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN)  :: type_id
+              INTEGER(HID_T), INTENT(OUT) :: vltype_id
+              END FUNCTION h5tvlen_create_c
+            END INTERFACE
+
+            hdferr = h5tvlen_create_c(type_id, vltype_id)
+          END SUBROUTINE h5tvlen_create_f
+
+!----------------------------------------------------------------------
+! Name:		h5tis_variable_str_f 
+!
+! Purpose: 	Determines whether a dattype is a variable string.
+!
+! Inputs:  
+!		type_id	-  	- datartpe identifier
+! Outputs:  
+!		status		- flag to indicate if datatype
+!				  is a variable string
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		March 12, 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tis_variable_str_f(type_id, status, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tis_variable_str_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier 
+            LOGICAL, INTENT(OUT) :: status      ! Flag, idicates if datatype
+                                                ! is a variable string or not ( TRUE or
+                                                ! FALSE)  
+            INTEGER, INTENT(OUT) :: hdferr      ! Error code
+            INTEGER :: flag                     ! "TRUE/FALSE/ERROR from C" 
+
+!            INTEGER, EXTERNAL :: h5tis_variable_str_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tis_variable_str_c(type_id, flag) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TIS_VARIABLE_STR_C'::h5tis_variable_str_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER :: flag
+              END FUNCTION h5tis_variable_str_c
+            END INTERFACE
+
+            hdferr = h5tis_variable_str_c(type_id, flag)
+            status = .TRUE.
+            if (flag .EQ. 0) status = .FALSE.
+ 
+          END SUBROUTINE h5tis_variable_str_f
+
+!----------------------------------------------------------------------
+! Name:		h5tget_member_class_f 
+!
+! Purpose:      Returns datatype class of compound datatype member.
+!
+! Inputs:  
+!		type_id	-  	- datartpe identifier
+!               member_no       - index of compound datatype member
+! Outputs:  
+!               class           - class type for compound dadtype member
+!                                 Can be one of the follwoing classes:
+!                                 H5T_NO_CLASS_F (error)
+!                                 H5T_INTEGER_F
+!                                 H5T_FLOAT_F
+!                                 H5T_TIME_F
+!                                 H5T_STRING_F
+!                                 H5T_BITFIELD_F
+!                                 H5T_OPAQUE_F
+!                                 H5T_COMPOUND_F
+!                                 H5T_REFERENCE_F
+!                                 H5T_ENUM_F
+!                                 H5T_VLEN_F
+!                                 H5T_ARRAY_F
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		April 6, 2005
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+          SUBROUTINE h5tget_member_class_f(type_id, member_no, class, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5tget_member_class_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier 
+            INTEGER, INTENT(IN)       :: member_no  ! Member number
+            INTEGER, INTENT(OUT)     :: class      ! Member class
+            INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5tget_member_class_c(type_id, member_no, class) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5TGET_MEMBER_CLASS_C'::h5tget_member_class_c
+              !DEC$ ENDIF
+              INTEGER(HID_T), INTENT(IN) :: type_id
+              INTEGER, INTENT(IN)       :: member_no 
+              INTEGER, INTENT(OUT)     :: class    
+              END FUNCTION h5tget_member_class_c
+            END INTERFACE
+
+            hdferr = h5tget_member_class_c(type_id, member_no, class)
+ 
+          END SUBROUTINE h5tget_member_class_f
+
+!----------------------------------------------------------------------
+      END MODULE H5T

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Zf.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Zf.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Zf.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,95 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 files contains C stubs for H5Z Fortran APIs */
+
+#include "H5f90.h"
+
+/*----------------------------------------------------------------------------
+ * Name:        h5zunregister_c
+ * Purpose:     Call H5Zunregister to unregister filter
+ * Inputs:      filter identifier
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, March 12, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5zunregister_c (int_f *filter)
+{
+     int ret_value = -1;
+     herr_t status;
+     H5Z_filter_t c_filter;
+
+     /*
+      * Call H5Zunregister function.
+      */
+     c_filter = (H5Z_filter_t)*filter;
+     printf(" filter # %d \n", (int)c_filter);
+     status = H5Zunregister(c_filter);
+     printf("From C zunregister %d \n", status);
+     if (status < 0) return ret_value;
+     ret_value = 0;
+     return ret_value;
+}
+/*----------------------------------------------------------------------------
+ * Name:        h5zfiletr_avail_c
+ * Purpose:     Call H5Zfilter_avail to find if filter is available
+ * Inputs:      filter - filter identifier
+ * Outputs:     flag - status flag
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Wednesday, March 12, 2003
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5zfilter_avail_c ( int_f *filter , int_f *flag )
+{
+  int ret_value = 0;
+  H5Z_filter_t c_filter;
+  htri_t status;
+
+  c_filter = (H5Z_filter_t)*filter;
+  status = H5Zfilter_avail(c_filter);
+  *flag = (int_f)status;
+  if ( status < 0  ) ret_value = -1;
+  return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5zget_filter_info_c
+ * Purpose:     Call H5Zget_filter_info to find if filter has its encoder
+ *              and/or its decoder available
+ * Inputs:      filter - filter identifier
+ * Outputs:     flag - status flag
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Nat Furrer and James Laird
+ *              Wednesday, June 16, 2004
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+
+int_f
+nh5zget_filter_info_c ( int_f *filter , int_f *flag )
+{
+  int ret_value = 0;
+  H5Z_filter_t c_filter;
+  unsigned int c_flag;
+
+  c_filter = (H5Z_filter_t)*filter;
+  ret_value = H5Zget_filter_info(c_filter, &c_flag);
+  *flag = (int_f)c_flag;
+
+  return ret_value;
+}

Added: packages/hdf5/branches/upstream/current/fortran/src/H5Zff.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5Zff.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5Zff.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,200 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 file contains FORTRAN90 interfaces for H5I functions
+!
+      MODULE H5Z
+
+        USE H5GLOBAL
+      
+      CONTAINS
+
+!----------------------------------------------------------------------
+! Name:		h5zunregister_f
+!
+! Purpose:	Unregisters specified filetr
+!
+! Inputs: 	filter	        - filter; may have one of the following values:
+!                                 H5Z_FILTER_DEFLATE_F 
+!                                 H5Z_FILTER_SHUFFLE_F 
+!                                 H5Z_FILTER_FLETCHER32_F 
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE
+!
+! Programmer:	Elena Pourmal
+!		March 12, 2003
+!
+! Modifications: 	
+!
+! Comment:		
+!----------------------------------------------------------------------
+          SUBROUTINE h5zunregister_f(filter, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5zunregister_f
+!DEC$endif
+!
+            IMPLICIT NONE
+            INTEGER, INTENT(IN)  :: filter
+            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+!            INTEGER, EXTERNAL :: h5zunregister_c
+!  Interface is needed for MS FORTRAN
+!
+            INTERFACE
+              INTEGER FUNCTION h5zunregister_c (filter)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5ZUNREGISTER_C':: h5zunregister_c
+              !DEC$ ENDIF
+              INTEGER, INTENT(IN) :: filter
+              END FUNCTION h5zunregister_c
+            END INTERFACE
+            hdferr = h5zunregister_c (filter)
+          END SUBROUTINE h5zunregister_f
+!----------------------------------------------------------------------
+! Name:		h5zfilter_avail_f
+!
+! Purpose:      Queries if filter is available	
+!
+! Inputs:  
+!		filter		- filter
+! Outputs:  
+!		status		- status; .TRUE. if filter is available, 
+!                                 .FALSE. otherwise
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE			
+!
+! Programmer:	Elena Pourmal
+!		March 12, 2003
+!
+! Modifications: 	
+!
+!----------------------------------------------------------------------
+          SUBROUTINE h5zfilter_avail_f(filter, status, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5zfilter_avail_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER, INTENT(IN)  :: filter      ! Filter; may be one of the following:
+                                                ! H5Z_FILTER_DEFLATE_F                  
+                                                ! H5Z_FILTER_SHUFFLE_F                  
+                                                ! H5Z_FILTER_FLETCHER32_F                  
+            LOGICAL, INTENT(OUT) :: status      ! Flag, idicates if filter
+                                                ! is availble  not ( TRUE or
+                                                ! FALSE)  
+            INTEGER, INTENT(OUT) :: hdferr      ! Error code
+            INTEGER :: flag                     ! "TRUE/FALSE/ERROR from C" 
+
+!            INTEGER, EXTERNAL :: h5zfilter_avail_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5zfilter_avail_c(filter, flag) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5ZFILTER_AVAIL_C'::h5zfilter_avail_c
+              !DEC$ ENDIF
+              INTEGER, INTENT(IN) :: filter
+              INTEGER :: flag
+              END FUNCTION h5zfilter_avail_c
+            END INTERFACE
+
+            hdferr = h5zfilter_avail_c(filter, flag)
+            status = .TRUE.
+            if (flag .EQ. 0) status = .FALSE.
+ 
+          END SUBROUTINE h5zfilter_avail_f
+
+!----------------------------------------------------------------------
+! Name:		h5zget_filter_info_f
+!
+! Purpose:      Queries if filter has its encoder and/or decoder 
+!               available	
+!
+! Inputs:  
+!		filter		- filter
+! Outputs:  
+!		config_flags	- Bit vector possibly containing the
+!                         following values:
+!                            H5Z_FILTER_ENCODE_ENABLED_F
+!                            H5Z_FILTER_DECODE_ENABLED_F
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE			
+!
+! Programmer:	Nat Furrer and James Laird
+!		June 16, 2004
+!
+! Modifications: 	
+!
+!----------------------------------------------------------------------
+          SUBROUTINE h5zget_filter_info_f(filter, config_flags, hdferr) 
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5zget_filter_info_f
+!DEC$endif
+!
+
+            IMPLICIT NONE
+            INTEGER, INTENT(IN)  :: filter      ! Filter; may be one of the following:
+                                                ! H5Z_FILTER_DEFLATE_F                  
+                                                ! H5Z_FILTER_SHUFFLE_F                  
+                                                ! H5Z_FILTER_FLETCHER32_F
+                                                ! H5Z_FILTER_SZIP_F                  
+            INTEGER, INTENT(OUT) :: config_flags! Flag, indicates if filter
+                                                ! has its encoder and/or decoder
+                                                ! available  
+            INTEGER, INTENT(OUT) :: hdferr      ! Error code 
+
+!            INTEGER, EXTERNAL :: h5zget_filter_info_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+            INTERFACE
+              INTEGER FUNCTION h5zget_filter_info_c(filter, config_flags) 
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5ZGET_FILTER_INFO_C'::h5zget_filter_info_c
+              !DEC$ ENDIF
+              INTEGER, INTENT(IN) :: filter
+              INTEGER, INTENT(OUT) :: config_flags
+              END FUNCTION h5zget_filter_info_c
+            END INTERFACE
+
+            hdferr = h5zget_filter_info_c(filter, config_flags)
+ 
+          END SUBROUTINE h5zget_filter_info_f
+
+      END MODULE H5Z
+            
+
+                                     
+
+

Added: packages/hdf5/branches/upstream/current/fortran/src/H5_f.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5_f.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5_f.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,571 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 files contains C stubs for H5 Fortran APIs */
+
+#include "H5f90.h"
+
+/*---------------------------------------------------------------------------
+ * Name:              h5init_types_c
+ * Purpose:           Initialize predefined datatypes in Fortran
+ * Inputs:            types - array with the predefined Native Fortran
+ *                            type, its element and length must be the
+ *                            same as the types array defined in the
+ *                            H5f90global.f90
+ *                    floatingtypes - array with the predefined Floating Fortran
+ *                                    type, its element and length must be the
+ *                                    same as the floatingtypes array defined in the
+ *                                    H5f90global.f90
+ *                    integertypes - array with the predefined Integer Fortran
+ *                                   type, its element and length must be the
+ *                                   same as the integertypes array defined in the
+ *                                   H5f90global.f90
+ * Outputs:           None
+ * Returns:           0 on success, -1 on failure
+ * Programmer:        Elena Pourmal
+ *                    Tuesday, August 3, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertypes )
+{
+
+    int ret_value = -1;
+    hid_t c_type_id;
+    if ((types[0] = (hid_t_f)H5Tcopy(H5T_NATIVE_INT)) < 0) return ret_value;
+    /* Accomodate Crays with this check */
+    if(sizeof(real_f)==sizeof(double)) {
+        if ((types[1] = (hid_t_f)H5Tcopy(H5T_NATIVE_DOUBLE)) < 0) return ret_value;
+    } /* end if */
+    else {
+        if ((types[1] = (hid_t_f)H5Tcopy(H5T_NATIVE_FLOAT)) < 0) return ret_value;
+    } /* end else */
+    if ((types[2] = (hid_t_f)H5Tcopy(H5T_NATIVE_DOUBLE)) < 0) return ret_value;
+/*
+    if ((types[3] = H5Tcopy(H5T_NATIVE_UINT8)) < 0) return ret_value;
+*/
+    if ((c_type_id = H5Tcopy(H5T_FORTRAN_S1)) < 0) return ret_value;
+    if(H5Tset_size(c_type_id, 1) < 0) return ret_value;
+    if(H5Tset_strpad(c_type_id, H5T_STR_SPACEPAD) < 0) return ret_value;
+    types[3] = (hid_t_f)c_type_id;
+
+
+
+/*
+    if ((types[3] = H5Tcopy(H5T_C_S1)) < 0) return ret_value;
+    if(H5Tset_strpad(types[3],H5T_STR_NULLTERM) < 0) return ret_value;
+    if(H5Tset_size(types[3],1) < 0) return ret_value;
+*/
+
+
+/*    if ((types[3] = H5Tcopy(H5T_STD_I8BE)) < 0) return ret_value;
+*/
+    if ((types[4] = (hid_t_f)H5Tcopy(H5T_STD_REF_OBJ)) < 0) return ret_value;
+    if ((types[5] = (hid_t_f)H5Tcopy(H5T_STD_REF_DSETREG)) < 0) return ret_value;
+
+    if ((floatingtypes[0] = (hid_t_f)H5Tcopy(H5T_IEEE_F32BE)) < 0) return ret_value;
+    if ((floatingtypes[1] = (hid_t_f)H5Tcopy(H5T_IEEE_F32LE)) < 0) return ret_value;
+    if ((floatingtypes[2] = (hid_t_f)H5Tcopy(H5T_IEEE_F64BE)) < 0) return ret_value;
+    if ((floatingtypes[3] = (hid_t_f)H5Tcopy(H5T_IEEE_F64LE)) < 0) return ret_value;
+
+    if ((integertypes[0] = (hid_t_f)H5Tcopy(H5T_STD_I8BE)) < 0) return ret_value;
+    if ((integertypes[1] = (hid_t_f)H5Tcopy(H5T_STD_I8LE)) < 0) return ret_value;
+    if ((integertypes[2] = (hid_t_f)H5Tcopy(H5T_STD_I16BE)) < 0) return ret_value;
+    if ((integertypes[3] = (hid_t_f)H5Tcopy(H5T_STD_I16LE)) < 0) return ret_value;
+    if ((integertypes[4] = (hid_t_f)H5Tcopy(H5T_STD_I32BE)) < 0) return ret_value;
+    if ((integertypes[5] = (hid_t_f)H5Tcopy(H5T_STD_I32LE)) < 0) return ret_value;
+    if ((integertypes[6] = (hid_t_f)H5Tcopy(H5T_STD_I64BE)) < 0) return ret_value;
+    if ((integertypes[7] = (hid_t_f)H5Tcopy(H5T_STD_I64LE)) < 0) return ret_value;
+    if ((integertypes[8] = (hid_t_f)H5Tcopy(H5T_STD_U8BE)) < 0) return ret_value;
+    if ((integertypes[9] = (hid_t_f)H5Tcopy(H5T_STD_U8LE)) < 0) return ret_value;
+    if ((integertypes[10] = (hid_t_f)H5Tcopy(H5T_STD_U16BE)) < 0) return ret_value;
+    if ((integertypes[11] = (hid_t_f)H5Tcopy(H5T_STD_U16LE)) < 0) return ret_value;
+    if ((integertypes[12] = (hid_t_f)H5Tcopy(H5T_STD_U32BE)) < 0) return ret_value;
+    if ((integertypes[13] = (hid_t_f)H5Tcopy(H5T_STD_U32LE)) < 0) return ret_value;
+    if ((integertypes[14] = (hid_t_f)H5Tcopy(H5T_STD_U64BE)) < 0) return ret_value;
+    if ((integertypes[15] = (hid_t_f)H5Tcopy(H5T_STD_U64LE)) < 0) return ret_value;
+/*
+ *  Define Fortran H5T_STRING type to store non-fixed size strings
+ */
+    if ((c_type_id = H5Tcopy(H5T_C_S1)) < 0) return ret_value;
+    if(H5Tset_size(c_type_id, H5T_VARIABLE) < 0) return ret_value;
+    integertypes[16] = c_type_id;
+
+    ret_value = 0;
+    return ret_value;
+}
+
+/*---------------------------------------------------------------------------
+ * Name:              h5close_types_c
+ * Purpose:           Closes predefined datatype in Fortran
+ * Inputs:            types - array with the predefined Native Fortran
+ *                            type, its element and length must be the
+ *                            same as the types array defined in the
+ *                            H5f90global.f90
+ *                    lentypes - length of the types array, which must be the
+ *                               same as the length of types array defined
+ *                               in the H5f90global.f90
+ *                    floatingtypes - array with the predefined Floating Fortran
+ *                                    type, its element and length must be the
+ *                                    same as the floatingtypes array defined in the
+ *                                    H5f90global.f90
+ *                    floatinglen - length of the floatingtypes array, which must be the
+ *                                  same as the length of floatingtypes array defined
+ *                                  in the H5f90global.f90
+ *                    integertypes - array with the predefined Integer Fortran
+ *                                   type, its element and length must be the
+ *                                   same as the integertypes array defined in the
+ *                                   H5f90global.f90
+ *                    integerlen - length of the floatingtypes array, which must be the
+ *                                 same as the length of floatingtypes array defined
+ *                                 in the H5f90global.f90
+ * Outputs:           None
+ * Returns:           0 on success, -1 on failure
+ * Programmer:        Elena Pourmal
+ *                    Tuesday, August 3, 1999
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5close_types_c( hid_t_f * types, int_f *lentypes,
+                  hid_t_f * floatingtypes, int_f* floatinglen,
+                  hid_t_f * integertypes,  int_f * integerlen )
+{
+
+    int ret_value = -1;
+    hid_t c_type_id;
+    int i;
+
+    for (i = 0; i < *lentypes; i++) {
+        c_type_id = types[i];
+        if ( H5Tclose(c_type_id) < 0) return ret_value;
+    }
+    for (i = 0; i < *floatinglen; i++) {
+        c_type_id = floatingtypes[i];
+        if ( H5Tclose(c_type_id) < 0) return ret_value;
+    }
+    for (i = 0; i < *integerlen; i++) {
+        c_type_id = integertypes[i];
+        if ( H5Tclose(c_type_id) < 0) return ret_value;
+    }
+    ret_value = 0;
+    return ret_value;
+}
+/*---------------------------------------------------------------------------
+ * Name:              h5init_flags_c
+ * Purpose:           Initialize Fortran flags
+ * Inputs:            h5d_flags    - H5D inteface flags
+ *                    h5e_flags    - H5E interface flags
+ *                    h5f_flags    - H5F interface flags
+ *                    h5fd_flags    - H5FD interface flags
+ *                    h5fd_hid_flags    - H5FD interface flags for type hid_t
+ *                    h5g_flags    - H5G interface flags
+ *                    h5i_flags    - H5I interface flags
+ *                    h5p_flags    - H5P interface flags
+ *                    h5r_flags    - H5R interface flags
+ *                    h5s_flags    - H5S interface flags
+ *                    h5t_flags    - H5T interface flags
+ *                    h5z_flags    - H5Z interface flags
+ * Outputs:           None
+ * Returns:           0 on success, -1 on failure
+ * Programmer:        Elena Pourmal
+ *                    Tuesday, August 3, 1999
+ * Modifications:     Added Z flags. EIP,  March 12, 2003
+ *                    Added more FD flags and new H5LIB flags
+ *                    Added FD flags to support HDF5 files drivers
+ *                                              EIP, April 10, 2005
+ *---------------------------------------------------------------------------*/
+int_f
+nh5init_flags_c( int_f *h5d_flags, int_f *h5e_flags, int_f *h5f_flags,
+                 int_f *h5fd_flags, hid_t *h5fd_hid_flags,
+                 int_f *h5g_flags, int_f *h5i_flags,
+                 int_f *h5p_flags, int_f *h5r_flags, int_f *h5s_flags,
+                 int_f *h5t_flags, int_f *h5z_flags)
+{
+    int ret_value = -1;
+/*
+ *  H5D flags
+ */
+    h5d_flags[0] = H5D_COMPACT;
+    h5d_flags[1] = H5D_CONTIGUOUS;
+    h5d_flags[2] = H5D_CHUNKED;
+    h5d_flags[3] = H5D_ALLOC_TIME_ERROR;
+    h5d_flags[4] = H5D_ALLOC_TIME_DEFAULT;
+    h5d_flags[5] = H5D_ALLOC_TIME_EARLY;
+    h5d_flags[6] = H5D_ALLOC_TIME_LATE;
+    h5d_flags[7] = H5D_ALLOC_TIME_INCR;
+    h5d_flags[8] = H5D_SPACE_STATUS_ERROR;
+    h5d_flags[9] = H5D_SPACE_STATUS_NOT_ALLOCATED;
+    h5d_flags[10] = H5D_SPACE_STATUS_PART_ALLOCATED;
+    h5d_flags[11] = H5D_SPACE_STATUS_ALLOCATED;
+    h5d_flags[12] = H5D_FILL_TIME_ERROR;
+    h5d_flags[13] = H5D_FILL_TIME_ALLOC;
+    h5d_flags[14] = H5D_FILL_TIME_NEVER;
+    h5d_flags[15] = H5D_FILL_VALUE_ERROR;
+    h5d_flags[16] = H5D_FILL_VALUE_UNDEFINED;
+    h5d_flags[17] = H5D_FILL_VALUE_DEFAULT;
+    h5d_flags[18] = H5D_FILL_VALUE_USER_DEFINED;
+
+/*
+ *  H5E flags
+ */
+
+      h5e_flags[0] = H5E_NONE_MAJOR;
+      h5e_flags[1] = H5E_ARGS;
+      h5e_flags[2] = H5E_RESOURCE;
+      h5e_flags[3] = H5E_INTERNAL;
+      h5e_flags[4] = H5E_FILE;
+      h5e_flags[5] = H5E_IO;
+      h5e_flags[6] = H5E_FUNC;
+      h5e_flags[7] = H5E_ATOM;
+      h5e_flags[8] = H5E_CACHE;
+      h5e_flags[9] = H5E_BTREE;
+      h5e_flags[10] = H5E_SYM;
+      h5e_flags[11] = H5E_HEAP;
+      h5e_flags[12] = H5E_OHDR;
+      h5e_flags[13] = H5E_DATATYPE;
+      h5e_flags[14] = H5E_DATASPACE;
+      h5e_flags[15] = H5E_DATASET;
+      h5e_flags[16] = H5E_STORAGE;
+      h5e_flags[17] = H5E_PLIST;
+      h5e_flags[18] = H5E_ATTR;
+      h5e_flags[19] = H5E_PLINE;
+      h5e_flags[20] = H5E_EFL;
+      h5e_flags[21] = H5E_REFERENCE;
+      h5e_flags[22] = H5E_VFL;
+      h5e_flags[23] = H5E_TBBT;
+
+/*
+ *  H5F flags
+ */
+      h5f_flags[0] = (int_f)H5F_ACC_RDWR;
+      h5f_flags[1] = (int_f)H5F_ACC_RDONLY;
+      h5f_flags[2] = (int_f)H5F_ACC_TRUNC;
+      h5f_flags[3] = (int_f)H5F_ACC_EXCL;
+      h5f_flags[4] = (int_f)H5F_ACC_DEBUG;
+      h5f_flags[5] = (int_f)H5F_SCOPE_LOCAL;
+      h5f_flags[6] = (int_f)H5F_SCOPE_GLOBAL;
+      h5f_flags[7] = (int_f)H5F_CLOSE_DEFAULT;
+      h5f_flags[8] = (int_f)H5F_CLOSE_WEAK;
+      h5f_flags[9] = (int_f)H5F_CLOSE_SEMI;
+      h5f_flags[10] = (int_f)H5F_CLOSE_STRONG;
+      h5f_flags[11] = (int_f)H5F_OBJ_FILE;
+      h5f_flags[12] = (int_f)H5F_OBJ_DATASET;
+      h5f_flags[13] = (int_f)H5F_OBJ_GROUP;
+      h5f_flags[14] = (int_f)H5F_OBJ_DATATYPE;
+      h5f_flags[15] = (int_f)H5F_OBJ_ALL;
+
+/*
+ *  H5FD flags
+ */
+      h5fd_flags[0] = H5FD_MPIO_INDEPENDENT;
+      h5fd_flags[1] = H5FD_MPIO_COLLECTIVE;
+      h5fd_flags[2] = H5FD_MEM_NOLIST;
+      h5fd_flags[3] = H5FD_MEM_DEFAULT;
+      h5fd_flags[4] = H5FD_MEM_SUPER;
+      h5fd_flags[5] = H5FD_MEM_BTREE;
+      h5fd_flags[6] = H5FD_MEM_DRAW;
+      h5fd_flags[7] = H5FD_MEM_GHEAP;
+      h5fd_flags[8] = H5FD_MEM_LHEAP;
+      h5fd_flags[9] = H5FD_MEM_OHDR;
+      h5fd_flags[10] = H5FD_MEM_NTYPES;
+
+
+/*
+ *  H5FD flags of type hid_t
+ */
+      h5fd_hid_flags[0] = H5FD_CORE;
+      h5fd_hid_flags[1] = H5FD_FAMILY;
+      h5fd_hid_flags[2] = H5FD_LOG;
+      h5fd_hid_flags[3] = H5FD_MPIO;
+      h5fd_hid_flags[4] = H5FD_MULTI;
+      h5fd_hid_flags[5] = H5FD_SEC2;
+      h5fd_hid_flags[6] = H5FD_STDIO;
+      h5fd_hid_flags[7] = H5FD_STREAM;
+
+/*
+ *  H5G flags
+ */
+
+      h5g_flags[0] = H5G_UNKNOWN;
+      h5g_flags[1] = H5G_LINK;
+      h5g_flags[2] = H5G_GROUP;
+      h5g_flags[3] = H5G_DATASET;
+      h5g_flags[4] = H5G_TYPE;
+      h5g_flags[5] = H5G_LINK_ERROR;
+      h5g_flags[6] = H5G_LINK_HARD;
+      h5g_flags[7] = H5G_LINK_SOFT;
+
+/*
+ *  H5I flags
+ */
+
+      h5i_flags[0] = H5I_FILE;
+      h5i_flags[1] = H5I_GROUP;
+      h5i_flags[2] = H5I_DATATYPE;
+      h5i_flags[3] = H5I_DATASPACE;
+      h5i_flags[4] = H5I_DATASET;
+      h5i_flags[5] = H5I_ATTR;
+      h5i_flags[6] = H5I_BADID;
+
+/*
+ *  H5P flags
+ */
+
+      h5p_flags[0] = H5P_FILE_CREATE;
+      h5p_flags[1] = H5P_FILE_ACCESS;
+      h5p_flags[2] = H5P_DATASET_CREATE;
+      h5p_flags[3] = H5P_DATASET_XFER;
+      h5p_flags[4] = H5P_MOUNT;
+      h5p_flags[5] = H5P_DEFAULT;
+      h5p_flags[6] = H5P_NO_CLASS;
+
+/*
+ *  H5R flags
+ */
+
+      h5r_flags[0] = H5R_OBJECT;
+      h5r_flags[1] = H5R_DATASET_REGION;
+
+/*
+ *  H5S flags
+ */
+
+
+      h5s_flags[0] = H5S_SCALAR;
+      h5s_flags[1] = H5S_SIMPLE;
+      h5s_flags[2] = H5S_SELECT_SET;
+      h5s_flags[3] = H5S_SELECT_OR;
+      h5s_flags[4] = (int_f)H5S_UNLIMITED;
+      h5s_flags[5] = H5S_ALL;
+
+      h5s_flags[6] = H5S_SELECT_NOOP;
+      h5s_flags[7] = H5S_SELECT_AND;
+      h5s_flags[8] = H5S_SELECT_XOR;
+      h5s_flags[9] = H5S_SELECT_NOTB;
+      h5s_flags[10] = H5S_SELECT_NOTA;
+      h5s_flags[11] = H5S_SELECT_APPEND;
+      h5s_flags[12] = H5S_SELECT_PREPEND;
+      h5s_flags[13] = H5S_SELECT_INVALID;
+
+
+      h5s_flags[14] = H5S_SEL_ERROR;
+      h5s_flags[15] = H5S_SEL_NONE;
+      h5s_flags[16] = H5S_SEL_POINTS;
+      h5s_flags[17] = H5S_SEL_HYPERSLABS;
+      h5s_flags[18] = H5S_SEL_ALL;
+
+/*
+ *  H5T flags
+ */
+
+
+      h5t_flags[0] = H5T_NO_CLASS;
+      h5t_flags[1] = H5T_INTEGER;
+      h5t_flags[2] = H5T_FLOAT;
+      h5t_flags[3] = H5T_TIME;
+      h5t_flags[4] = H5T_STRING;
+      h5t_flags[5] = H5T_BITFIELD;
+      h5t_flags[6] = H5T_OPAQUE;
+      h5t_flags[7] = H5T_COMPOUND;
+      h5t_flags[8] = H5T_REFERENCE;
+      h5t_flags[9] = H5T_ENUM;
+      h5t_flags[10] = H5T_ORDER_LE;
+      h5t_flags[11] = H5T_ORDER_BE;
+      h5t_flags[12] = H5T_ORDER_VAX;
+      h5t_flags[13] = H5T_PAD_ZERO;
+      h5t_flags[14] = H5T_PAD_ONE;
+      h5t_flags[15] = H5T_PAD_BACKGROUND;
+      h5t_flags[16] = H5T_PAD_ERROR;
+      h5t_flags[17] = H5T_SGN_NONE;
+      h5t_flags[18] = H5T_SGN_2;
+      h5t_flags[19] = H5T_SGN_ERROR;
+      h5t_flags[20] = H5T_NORM_IMPLIED;
+      h5t_flags[21] = H5T_NORM_MSBSET;
+      h5t_flags[22] = H5T_NORM_NONE;
+      h5t_flags[23] = H5T_CSET_ASCII;
+      h5t_flags[24] = H5T_STR_NULLTERM;
+      h5t_flags[25] = H5T_STR_NULLPAD;
+      h5t_flags[26] = H5T_STR_SPACEPAD;
+      h5t_flags[27] = H5T_STR_ERROR;
+      h5t_flags[28] = H5T_VLEN;
+      h5t_flags[29] = H5T_ARRAY;
+/*
+ *  H5Z flags
+ */
+
+      h5z_flags[0] = H5Z_FILTER_ERROR;
+      h5z_flags[1] = H5Z_FILTER_NONE;
+      h5z_flags[2] = H5Z_FILTER_DEFLATE;
+      h5z_flags[3] = H5Z_FILTER_SHUFFLE;
+      h5z_flags[4] = H5Z_FILTER_FLETCHER32;
+      h5z_flags[5] = H5Z_ERROR_EDC;
+      h5z_flags[6] = H5Z_DISABLE_EDC;
+      h5z_flags[7] = H5Z_ENABLE_EDC;
+      h5z_flags[8] = H5Z_NO_EDC;
+      h5z_flags[9] = H5Z_FILTER_SZIP;
+      h5z_flags[10] = H5Z_FLAG_OPTIONAL;
+      h5z_flags[11] = H5Z_FILTER_CONFIG_ENCODE_ENABLED;
+      h5z_flags[12] = H5Z_FILTER_CONFIG_DECODE_ENABLED;
+      h5z_flags[13] = H5Z_FILTER_ALL;
+
+    ret_value = 0;
+    return ret_value;
+}
+
+int_f
+nh5init1_flags_c(int_f *h5lib_flags)
+{
+    int ret_value = -1;
+    unsigned prm_1 = H5_SZIP_EC_OPTION_MASK;
+    unsigned prm_2 = H5_SZIP_NN_OPTION_MASK;
+    h5lib_flags[0] = (int_f)prm_1;
+    h5lib_flags[1] = (int_f)prm_2;
+    ret_value = 0;
+    return ret_value;
+}
+
+/*---------------------------------------------------------------------------
+ * Name:              h5open_c
+ * Purpose:           Calls H5open call to initialize C HDF5 library
+ * Returns:           0 on success, -1 on failure
+ * Programmer:        Elena Pourmal
+ *                    Friday, November 17, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5open_c()
+{
+
+    int ret_value = -1;
+    if (H5open() < 0) return ret_value;
+    ret_value = 0;
+    return ret_value;
+}
+/*---------------------------------------------------------------------------
+ * Name:              h5close_c
+ * Purpose:           Calls H5close call to close C HDF5 library
+ * Returns:           0 on success, -1 on failure
+ * Programmer:        Elena Pourmal
+ *                    Friday, November 17, 2000
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5close_c()
+{
+
+    int ret_value = -1;
+    if (H5close() < 0) return ret_value;
+    ret_value = 0;
+    return ret_value;
+}
+
+
+/*---------------------------------------------------------------------------
+ * Name:              h5get_libversion_c
+ * Purpose:           Calls H5get_libversion function
+ *		      to retrieve library version info.
+ * Inputs:
+ *                    None
+ * Outputs:
+ *                    majnum - the major version of the library
+ *                    minnum - the minor version of the library
+ *                    relnum - the release version of the library
+ * Returns:           0 on success, -1 on failure
+ * Programmer:        Elena Pourmal
+ *                    Tuesday, September 24, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5get_libversion_c( int_f *majnum, int_f *minnum, int_f *relnum)
+{
+
+    int ret_value = -1;
+    unsigned c_majnum, c_minnum, c_relnum;
+
+    if (H5get_libversion(&c_majnum, &c_minnum, &c_relnum) < 0) return ret_value;
+
+    *majnum = (int_f)c_majnum;
+    *minnum = (int_f)c_minnum;
+    *relnum = (int_f)c_relnum;
+    ret_value = 0;
+    return ret_value;
+}
+
+
+/*---------------------------------------------------------------------------
+ * Name:              h5check_version_c
+ * Purpose:           Calls H5check_version function
+ *		      to verify library version info.
+ * Inputs:
+ *                    majnum - the major version of the library
+ *                    minnum - the minor version of the library
+ *                    relnum - the release version of the library
+ * Outputs:
+ *                    None
+ * Returns:           0 on success, aborts on failure
+ * Programmer:        Elena Pourmal
+ *                    Tuesday, September 24, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5check_version_c( int_f *majnum, int_f *minnum, int_f *relnum)
+{
+
+    int ret_value = -1;
+    unsigned c_majnum, c_minnum, c_relnum;
+    c_majnum = (unsigned) *majnum;
+    c_minnum = (unsigned) *minnum;
+    c_relnum = (unsigned) *relnum;
+
+    H5check_version(c_majnum, c_minnum, c_relnum);
+
+    ret_value = 0;
+    return ret_value;
+}
+
+/*---------------------------------------------------------------------------
+ * Name:              h5garbage_collect_c
+ * Purpose:           Calls H5garbage_collect to collect on all free-lists of all types
+ * Returns:           0 on success, -1 on failure
+ * Programmer:        Elena Pourmal
+ *                    Tuesday, September 24, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5garbage_collect_c()
+{
+
+    int ret_value = -1;
+    if (H5garbage_collect() < 0) return ret_value;
+    ret_value = 0;
+    return ret_value;
+}
+
+/*---------------------------------------------------------------------------
+ * Name:              h5dont_atexit_c
+ * Purpose:           Calls H5dont_atexit not to install atexit cleanup routine
+ * Returns:           0 on success, -1 on failure
+ * Programmer:        Elena Pourmal
+ *                    Tuesday, September 24, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5dont_atexit_c()
+{
+
+    int ret_value = -1;
+    if (H5dont_atexit() < 0) return ret_value;
+    ret_value = 0;
+    return ret_value;
+}

Added: packages/hdf5/branches/upstream/current/fortran/src/H5_ff.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5_ff.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5_ff.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,380 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+   MODULE H5LIB
+     CONTAINS
+!----------------------------------------------------------------------
+! Name:		h5open_f 
+!
+! Purpose:	Initializes the HDF5 library and Fortran90 interface.   	
+!
+! Inputs:  
+! Outputs:  
+!		error:		- 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 h5open_f(error)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5open_f
+!DEC$endif
+!
+        USE H5GLOBAL
+
+        IMPLICIT NONE
+        INTEGER, INTENT(OUT) :: error
+        INTEGER :: error_0, error_1, error_2, error_3
+!        INTEGER, EXTERNAL :: h5init_types_c
+!        INTEGER, EXTERNAL :: h5init_flags_c
+!        INTEGER, EXTERNAL :: h5init1_flags_c
+!        INTEGER, EXTERNAL :: h5open_c
+        
+!
+! MS FORTRAN needs explicit interfaces for C functions called here.
+!
+        INTERFACE
+          INTEGER FUNCTION h5open_c()
+          !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+          !MS$ATTRIBUTES C,reference,alias:'_H5OPEN_C'::h5open_c
+          !DEC$ ENDIF
+          END FUNCTION h5open_c
+        END INTERFACE
+        INTERFACE
+          INTEGER FUNCTION h5init_types_c(p_types, f_types, i_types)
+          USE H5GLOBAL
+          INTEGER(HID_T), DIMENSION(PREDEF_TYPES_LEN) :: p_types
+          INTEGER(HID_T), DIMENSION(FLOATING_TYPES_LEN) :: f_types
+          INTEGER(HID_T), DIMENSION(INTEGER_TYPES_LEN) :: i_types   
+          !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+          !MS$ATTRIBUTES C,reference,alias:'_H5INIT_TYPES_C'::h5init_types_c
+          !DEC$ ENDIF
+          END FUNCTION h5init_types_c
+        END INTERFACE
+        INTERFACE
+          INTEGER FUNCTION h5init_flags_c(i_H5D_flags, &
+                                i_H5E_flags, &
+                                i_H5F_flags, &
+                                i_H5FD_flags, &
+                                i_H5FD_hid_flags, &
+                                i_H5G_flags, &
+                                i_H5I_flags, &
+                                i_H5P_flags, &
+                                i_H5R_flags, &
+                                i_H5S_flags, &
+                                i_H5T_flags, &               
+                                i_H5Z_flags)
+          USE H5GLOBAL
+          INTEGER i_H5F_flags(H5F_FLAGS_LEN)
+          INTEGER i_H5G_flags(H5G_FLAGS_LEN)
+          INTEGER i_H5D_flags(H5D_FLAGS_LEN)
+          INTEGER i_H5FD_flags(H5FD_FLAGS_LEN)
+          INTEGER i_H5FD_hid_flags(H5FD_HID_FLAGS_LEN)
+          INTEGER i_H5E_flags(H5E_FLAGS_LEN)
+          INTEGER i_H5I_flags(H5I_FLAGS_LEN)
+          INTEGER i_H5P_flags(H5P_FLAGS_LEN)
+          INTEGER i_H5R_flags(H5R_FLAGS_LEN)
+          INTEGER i_H5S_flags(H5S_FLAGS_LEN)
+          INTEGER i_H5T_flags(H5T_FLAGS_LEN)
+          INTEGER i_H5Z_flags(H5Z_FLAGS_LEN)
+          !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+          !MS$ATTRIBUTES C,reference,alias:'_H5INIT_FLAGS_C'::h5init_flags_c
+          !DEC$ ENDIF
+          END FUNCTION h5init_flags_c
+        END INTERFACE
+        INTERFACE
+          INTEGER FUNCTION h5init1_flags_c( i_H5LIB_flags )
+          USE H5GLOBAL
+          INTEGER i_H5LIB_flags(H5LIB_FLAGS_LEN)
+          !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+          !MS$ATTRIBUTES C,reference,alias:'_H5INIT1_FLAGS_C'::h5init1_flags_c
+          !DEC$ ENDIF
+          END FUNCTION h5init1_flags_c
+        END INTERFACE
+        error_0 = h5open_c()
+        error_1 = h5init_types_c(predef_types, floating_types, integer_types)
+        error_2 = h5init_flags_c(H5D_flags, &
+                                H5E_flags, &
+                                H5F_flags, &
+                                H5FD_flags, &
+                                H5FD_hid_flags, &
+                                H5G_flags, &
+                                H5I_flags, &
+                                H5P_flags, &
+                                H5R_flags, &
+                                H5S_flags, &
+                                H5T_flags, &
+                                H5Z_flags)
+        error_3 = h5init1_flags_c(H5LIB_flags )
+        error = error_0 + error_1 + error_2 + error_3
+      END SUBROUTINE h5open_f
+
+!----------------------------------------------------------------------
+! Name:		h5close_f 
+!
+! Purpose:	Closes the HDF5 library and Fortran90 interface.   	
+!
+! Inputs:  
+! Outputs:  
+!		error:		- 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 h5close_f(error)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5close_f
+!DEC$endif
+!
+        USE H5GLOBAL
+
+        IMPLICIT NONE
+        INTEGER :: error_1, error_2
+        INTEGER, INTENT(OUT) :: error
+!        INTEGER, EXTERNAL :: h5close_types_c, h5close_c
+        INTERFACE
+          INTEGER FUNCTION h5close_c()
+          !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+          !MS$ATTRIBUTES C,reference,alias:'_H5CLOSE_C'::h5close_c
+          !DEC$ ENDIF
+          END FUNCTION h5close_c
+        END INTERFACE
+        INTERFACE
+          INTEGER FUNCTION h5close_types_c(p_types, P_TYPES_LEN, &
+                                         f_types, F_TYPES_LEN, &
+                                         i_types, I_TYPES_LEN )
+          USE H5GLOBAL
+          INTEGER P_TYPES_LEN
+          INTEGER F_TYPES_LEN
+          INTEGER I_TYPES_LEN
+          INTEGER(HID_T), DIMENSION(P_TYPES_LEN) :: p_types
+          INTEGER(HID_T), DIMENSION(F_TYPES_LEN) :: f_types
+          INTEGER(HID_T), DIMENSION(I_TYPES_LEN) :: i_types   
+          !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+          !MS$ATTRIBUTES C,reference,alias:'_H5CLOSE_TYPES_C'::h5close_types_c
+          !DEC$ ENDIF
+          END FUNCTION h5close_types_c
+        END INTERFACE
+        error_1 = h5close_types_c(predef_types, PREDEF_TYPES_LEN, &
+                                floating_types, FLOATING_TYPES_LEN, &
+                                integer_types, INTEGER_TYPES_LEN )
+        error_2 = h5close_c()
+        error = error_1 + error_2
+
+      END SUBROUTINE h5close_f
+        
+!----------------------------------------------------------------------
+! Name:		h5get_libversion_f 
+!
+! Purpose:	Returns the HDF5 LIbrary release number
+!
+! Inputs:  
+! Outputs:  
+!		majnum:		- major version of the library
+!		minum:		- minor version of the library
+!		relnum:		- release version of the library
+!		error:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE			
+!
+! Programmer:	Elena Pourmal
+!		September 24, 2002
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+      SUBROUTINE h5get_libversion_f(majnum, minnum, relnum, error)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5get_libversion_f
+!DEC$endif
+!
+        USE H5GLOBAL
+
+        IMPLICIT NONE
+        INTEGER, INTENT(OUT) :: majnum, minnum, relnum, error
+        INTERFACE
+          INTEGER FUNCTION h5get_libversion_c(majnum, minnum, relnum)
+          !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+          !MS$ATTRIBUTES C,reference,alias:'_H5GET_LIBVERSION_C'::h5get_libversion_c
+          !DEC$ ENDIF
+          INTEGER, INTENT(OUT) :: majnum, minnum, relnum
+          END FUNCTION h5get_libversion_c
+        END INTERFACE
+
+        error = h5get_libversion_c(majnum, minnum, relnum)
+
+      END SUBROUTINE h5get_libversion_f
+
+!----------------------------------------------------------------------
+! Name:		h5check_version_f 
+!
+! Purpose:	Verifies that library versions are consistent.
+!
+! Inputs:  
+!		majnum:		- major version of the library
+!		minum:		- minor version of the library
+!		relnum:		- release version of the library
+! Outputs:  
+!		error:		- error code		
+!				 	Success:  0
+!				 	Failure:  application aborts
+! Optional parameters:
+!				NONE			
+!
+! Programmer:	Elena Pourmal
+!		September 24, 2002
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+      SUBROUTINE h5check_version_f(majnum, minnum, relnum, error)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5check_version_f
+!DEC$endif
+!
+        USE H5GLOBAL
+
+        IMPLICIT NONE
+        INTEGER, INTENT(IN) :: majnum, minnum, relnum
+        INTEGER, INTENT(OUT) :: error
+        INTERFACE
+          INTEGER FUNCTION h5check_version_c(majnum, minnum, relnum)
+          !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+          !MS$ATTRIBUTES C,reference,alias:'_H5CHECK_VERSION_C'::h5check_version_c
+          !DEC$ ENDIF
+          INTEGER, INTENT(IN) :: majnum, minnum, relnum
+          END FUNCTION h5check_version_c
+        END INTERFACE
+
+        error = h5check_version_c(majnum, minnum, relnum)
+
+      END SUBROUTINE h5check_version_f
+
+!----------------------------------------------------------------------
+! Name:		h5garbage_collect_f 
+!
+! Purpose:	Garbage collects on all free-lists of all types.
+!
+! Inputs:  
+! Outputs:  
+!		error:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE			
+!
+! Programmer:	Elena Pourmal
+!		September 24, 2002
+!
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+      SUBROUTINE h5garbage_collect_f(error)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5garbage_collect_f
+!DEC$endif
+!
+        USE H5GLOBAL
+
+        IMPLICIT NONE
+        INTEGER, INTENT(OUT) :: error
+        INTERFACE
+          INTEGER FUNCTION h5garbage_collect_c()
+          !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+          !MS$ATTRIBUTES C,reference,alias:'_H5GARBAGE_COLLECT_C'::h5garbage_collect_c
+          !DEC$ ENDIF
+          END FUNCTION h5garbage_collect_c
+        END INTERFACE
+
+        error = h5garbage_collect_c()
+
+      END SUBROUTINE h5garbage_collect_f
+
+!----------------------------------------------------------------------
+! Name:		h5dont_atexit_f 
+!
+! Purpose:	Instructs library not to install atexit cleanup routine. 
+!
+! Inputs:  
+! Outputs:  
+!		error:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+! Optional parameters:
+!				NONE			
+!
+! Programmer:	Elena Pourmal
+!		September 24, 2002
+!
+!
+! Comment:		
+!----------------------------------------------------------------------
+
+      SUBROUTINE h5dont_atexit_f(error)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dont_atexit_f
+!DEC$endif
+!
+        USE H5GLOBAL
+
+        IMPLICIT NONE
+        INTEGER, INTENT(OUT) :: error
+        INTERFACE
+          INTEGER FUNCTION h5dont_atexit_c()
+          !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+          !MS$ATTRIBUTES C,reference,alias:'_H5DONT_ATEXIT_C'::h5dont_atexit_c
+          !DEC$ ENDIF
+          END FUNCTION h5dont_atexit_c
+        END INTERFACE
+
+        error = h5dont_atexit_c()
+
+      END SUBROUTINE h5dont_atexit_f
+   END MODULE H5LIB

Added: packages/hdf5/branches/upstream/current/fortran/src/H5config_fortran.h.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5config_fortran.h.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5config_fortran.h.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,106 @@
+/* src/H5config_fortran.h.in.  Generated from configure.in by autoheader.  */
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define if support for deflate filter is enabled */
+#undef HAVE_FILTER_DEFLATE
+
+/* Define if support for Fletcher32 checksum is enabled */
+#undef HAVE_FILTER_FLETCHER32
+
+/* Define if support for shuffle filter is enabled */
+#undef HAVE_FILTER_SHUFFLE
+
+/* Define if support for szip filter is enabled */
+#undef HAVE_FILTER_SZIP
+
+/* Define if we have GPFS support */
+#undef HAVE_GPFS
+
+/* Define to 1 if you have the <gpfs.h> header file. */
+#undef HAVE_GPFS_H
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `m' library (-lm). */
+#undef HAVE_LIBM
+
+/* Define to 1 if you have the `nsl' library (-lnsl). */
+#undef HAVE_LIBNSL
+
+/* Define to 1 if you have the `socket' library (-lsocket). */
+#undef HAVE_LIBSOCKET
+
+/* Define to 1 if you have the `sz' library (-lsz). */
+#undef HAVE_LIBSZ
+
+/* Define to 1 if you have the `z' library (-lz). */
+#undef HAVE_LIBZ
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define if `MPI_Comm_c2f' and `MPI_Comm_f2c' exists */
+#undef HAVE_MPI_MULTI_LANG_Comm
+
+/* Define if `MPI_Info_c2f' and `MPI_Info_f2c' exists */
+#undef HAVE_MPI_MULTI_LANG_Info
+
+/* Define to 1 if you have the <netinet/tcp.h> header file. */
+#undef HAVE_NETINET_TCP_H
+
+/* Define if `socklen_t' is defined */
+#undef HAVE_SOCKLEN_T
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define if the stream virtual file driver should be compiled */
+#undef HAVE_STREAM
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the <sys/filio.h> header file. */
+#undef HAVE_SYS_FILIO_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <szlib.h> header file. */
+#undef HAVE_SZLIB_H
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#undef HAVE_ZLIB_H
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS

Added: packages/hdf5/branches/upstream/current/fortran/src/H5f90.h
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5f90.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5f90.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,29 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#ifndef _H5f90_H
+#define _H5f90_H
+
+#include "hdf5.h"
+#include "H5f90i.h"
+#include "H5f90proto.h"
+
+/* Constants used in H5Rff.f90 and H5Rf.c files */
+#define REF_REG_BUF_LEN_F    3
+
+/* Constants used in H5Gf.c files */
+#define OBJECT_NAMELEN_DEFAULT_F -1
+#define H5_MAX(a,b)            (((a)>(b)) ? (a) : (b))
+#endif /* _H5f90_H */

Added: packages/hdf5/branches/upstream/current/fortran/src/H5f90global.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5f90global.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5f90global.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,658 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+    MODULE H5GLOBAL
+      USE H5FORTRAN_TYPES
+!
+! Definitions for reference datatypes.
+! If you change the value of these parameters, do not forget to change corresponding
+! values in the H5f90.h file. 
+        INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3 
+
+        TYPE hobj_ref_t_f
+             INTEGER(HADDR_T) ref
+        END TYPE 
+
+        TYPE hdset_reg_ref_t_f
+             INTEGER ref(REF_REG_BUF_LEN) 
+        END TYPE 
+
+      INTEGER, PARAMETER :: PREDEF_TYPES_LEN = 6 ! Do not forget to change this
+                                                 ! value when new predefined
+                                                 ! datatypes are added
+      ! Do not forget to change the following line when new predefined 
+      ! floating data types are added
+      INTEGER, PARAMETER :: FLOATING_TYPES_LEN = 4
+
+      ! Do not forget to change the following line when new predefined 
+      ! integer data types are added
+      INTEGER, PARAMETER :: INTEGER_TYPES_LEN = 17
+
+      INTEGER(HID_T) H5T_NATIVE_INTEGER, &
+                     H5T_NATIVE_REAL, &
+                     H5T_NATIVE_DOUBLE, &
+                     H5T_NATIVE_CHARACTER , &
+                     H5T_STD_REF_OBJ,      &
+                     H5T_STD_REF_DSETREG, &
+                     H5T_IEEE_F32BE,  &
+                     H5T_IEEE_F32LE,  &
+                     H5T_IEEE_F64BE,  &
+                     H5T_IEEE_F64LE,  &
+                     H5T_STD_I8BE,    &
+                     H5T_STD_I8LE,    &
+                     H5T_STD_I16BE,   &
+                     H5T_STD_I16LE,   &
+                     H5T_STD_I32BE,   &
+                     H5T_STD_I32LE,   &
+                     H5T_STD_I64BE,   &
+                     H5T_STD_I64LE,   &
+                     H5T_STD_U8BE,    &
+                     H5T_STD_U8LE,    &
+                     H5T_STD_U16BE,   &
+                     H5T_STD_U16LE,   &
+                     H5T_STD_U32BE,   &
+                     H5T_STD_U32LE,   &
+                     H5T_STD_U64BE,   &
+                     H5T_STD_U64LE,   &
+                     H5T_STRING
+
+
+      INTEGER(HID_T), DIMENSION(PREDEF_TYPES_LEN) :: predef_types
+      EQUIVALENCE (predef_types(1), H5T_NATIVE_INTEGER)
+      EQUIVALENCE (predef_types(2), H5T_NATIVE_REAL)
+      EQUIVALENCE (predef_types(3), H5T_NATIVE_DOUBLE)
+      EQUIVALENCE (predef_types(4), H5T_NATIVE_CHARACTER)
+      EQUIVALENCE (predef_types(5), H5T_STD_REF_OBJ)
+      EQUIVALENCE (predef_types(6), H5T_STD_REF_DSETREG)
+
+      INTEGER(HID_T), DIMENSION(FLOATING_TYPES_LEN) :: floating_types
+      EQUIVALENCE (floating_types(1), H5T_IEEE_F32BE )
+      EQUIVALENCE (floating_types(2), H5T_IEEE_F32LE)
+      EQUIVALENCE (floating_types(3), H5T_IEEE_F64BE)
+      EQUIVALENCE (floating_types(4), H5T_IEEE_F64LE)
+
+      INTEGER(HID_T), DIMENSION(INTEGER_TYPES_LEN) :: integer_types
+      EQUIVALENCE (integer_types(1), H5T_STD_I8BE )
+      EQUIVALENCE (integer_types(2), H5T_STD_I8LE)
+      EQUIVALENCE (integer_types(3), H5T_STD_I16BE)
+      EQUIVALENCE (integer_types(4), H5T_STD_I16LE)
+      EQUIVALENCE (integer_types(5), H5T_STD_I32BE)
+      EQUIVALENCE (integer_types(6), H5T_STD_I32LE)
+      EQUIVALENCE (integer_types(7), H5T_STD_I64BE)
+      EQUIVALENCE (integer_types(8), H5T_STD_I64LE)
+      EQUIVALENCE (integer_types(9), H5T_STD_U8BE)
+      EQUIVALENCE (integer_types(10), H5T_STD_U8LE)
+      EQUIVALENCE (integer_types(11), H5T_STD_U16BE)
+      EQUIVALENCE (integer_types(12), H5T_STD_U16LE)
+      EQUIVALENCE (integer_types(13), H5T_STD_U32BE)
+      EQUIVALENCE (integer_types(14), H5T_STD_U32LE)
+      EQUIVALENCE (integer_types(15), H5T_STD_U64BE)
+      EQUIVALENCE (integer_types(16), H5T_STD_U64LE)
+      EQUIVALENCE (integer_types(17), H5T_STRING)
+
+
+!      COMMON /PREDEFINED_TYPES/ H5T_NATIVE_INTEGER, &
+!                                H5T_NATIVE_REAL, &
+!                                H5T_NATIVE_DOUBLE, &
+!                                H5T_NATIVE_CHARACTER, &
+!                                H5T_STD_REF_OBJ, &
+!                                H5T_STD_REF_DSETREG
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /PREDEFINED_TYPES/
+!DEC$endif
+      COMMON /PREDEFINED_TYPES/  predef_types
+
+!      COMMON /FLOATING_TYPES/ H5T_IEEE_F32BE,  &
+!                              H5T_IEEE_F32LE,  &
+!                              H5T_IEEE_F64BE,  &
+!                              H5T_IEEE_F64LE
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /FLOATING_TYPES/
+!DEC$endif
+      COMMON /FLOATING_TYPES/ floating_types 
+!
+!      COMMON /INTEGER_TYPES/ H5T_STD_I8BE,  &
+!                             H5T_STD_I8LE,    &
+!                             H5T_STD_I16BE,   &
+!                             H5T_STD_I16LE,   &
+!                             H5T_STD_I32BE,   &
+!                             H5T_STD_I32LE,   &
+!                             H5T_STD_I64BE,   &
+!                             H5T_STD_I64LE,   &
+!                             H5T_STD_U8BE,    &
+!                             H5T_STD_U8LE,    &
+!                             H5T_STD_U16BE,   &
+!                             H5T_STD_U16LE,   &
+!                             H5T_STD_U32BE,   &
+!                             H5T_STD_U32LE,   &
+!                             H5T_STD_U64BE,   &
+!                             H5T_STD_U64LE
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /INTEGER_TYPES/
+!DEC$endif
+      COMMON /INTEGER_TYPES/ integer_types
+!
+! Fortran flags
+!
+!
+! H5F flags (DO NOT FORGET TO UPDATE WHEN NEW FLAGS ARE ADDEDD !)
+!
+! H5F flags declaration
+!
+      INTEGER, PARAMETER :: H5F_FLAGS_LEN = 16
+      INTEGER H5F_flags(H5F_FLAGS_LEN)
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /H5F_FLAGS/
+!DEC$endif
+      COMMON /H5F_FLAGS/ H5F_flags
+
+      INTEGER :: H5F_ACC_RDWR_F 
+      INTEGER :: H5F_ACC_RDONLY_F
+      INTEGER :: H5F_ACC_TRUNC_F
+      INTEGER :: H5F_ACC_EXCL_F
+      INTEGER :: H5F_ACC_DEBUG_F
+      INTEGER :: H5F_SCOPE_LOCAL_F
+      INTEGER :: H5F_SCOPE_GLOBAL_F
+      INTEGER :: H5F_CLOSE_DEFAULT_F
+      INTEGER :: H5F_CLOSE_WEAK_F
+      INTEGER :: H5F_CLOSE_SEMI_F
+      INTEGER :: H5F_CLOSE_STRONG_F
+      INTEGER :: H5F_OBJ_FILE_F
+      INTEGER :: H5F_OBJ_DATASET_F
+      INTEGER :: H5F_OBJ_GROUP_F
+      INTEGER :: H5F_OBJ_DATATYPE_F
+      INTEGER :: H5F_OBJ_ALL_F
+
+      EQUIVALENCE(H5F_flags(1), H5F_ACC_RDWR_F)
+      EQUIVALENCE(H5F_flags(2), H5F_ACC_RDONLY_F)
+      EQUIVALENCE(H5F_flags(3), H5F_ACC_TRUNC_F)
+      EQUIVALENCE(H5F_flags(4), H5F_ACC_EXCL_F)
+      EQUIVALENCE(H5F_flags(5), H5F_ACC_DEBUG_F)
+      EQUIVALENCE(H5F_flags(6), H5F_SCOPE_LOCAL_F)
+      EQUIVALENCE(H5F_flags(7), H5F_SCOPE_GLOBAL_F)
+      EQUIVALENCE(H5F_flags(8), H5F_CLOSE_DEFAULT_F)
+      EQUIVALENCE(H5F_flags(9), H5F_CLOSE_WEAK_F)
+      EQUIVALENCE(H5F_flags(10), H5F_CLOSE_SEMI_F)
+      EQUIVALENCE(H5F_flags(11), H5F_CLOSE_STRONG_F)
+      EQUIVALENCE(H5F_flags(12), H5F_OBJ_FILE_F)
+      EQUIVALENCE(H5F_flags(13), H5F_OBJ_DATASET_F)
+      EQUIVALENCE(H5F_flags(14), H5F_OBJ_GROUP_F)
+      EQUIVALENCE(H5F_flags(15), H5F_OBJ_DATATYPE_F)
+      EQUIVALENCE(H5F_flags(16), H5F_OBJ_ALL_F)
+!
+! H5G flags declaration
+!
+      INTEGER, PARAMETER :: H5G_FLAGS_LEN = 8 
+      INTEGER H5G_flags(H5G_FLAGS_LEN)
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /H5G_FLAGS/
+!DEC$endif
+      COMMON /H5G_FLAGS/ H5G_flags
+
+      INTEGER :: H5G_UNKNOWN_F
+      INTEGER :: H5G_LINK_F
+      INTEGER :: H5G_GROUP_F
+      INTEGER :: H5G_DATASET_F
+      INTEGER :: H5G_TYPE_F
+      INTEGER :: H5G_LINK_ERROR_F
+      INTEGER :: H5G_LINK_HARD_F
+      INTEGER :: H5G_LINK_SOFT_F
+
+      EQUIVALENCE(H5G_flags(1), H5G_UNKNOWN_F)
+      EQUIVALENCE(H5G_flags(2), H5G_LINK_F)
+      EQUIVALENCE(H5G_flags(3), H5G_GROUP_F)
+      EQUIVALENCE(H5G_flags(4), H5G_DATASET_F)
+      EQUIVALENCE(H5G_flags(5), H5G_TYPE_F) 
+      EQUIVALENCE(H5G_flags(6), H5G_LINK_ERROR_F) 
+      EQUIVALENCE(H5G_flags(7), H5G_LINK_HARD_F) 
+      EQUIVALENCE(H5G_flags(8), H5G_LINK_SOFT_F) 
+!
+! H5D flags declaration
+!
+
+      INTEGER, PARAMETER :: H5D_FLAGS_LEN = 19 
+      INTEGER H5D_flags(H5D_FLAGS_LEN)
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /H5D_FLAGS/
+!DEC$endif
+      COMMON /H5D_FLAGS/ H5D_flags
+
+      INTEGER :: H5D_COMPACT_F  
+      INTEGER :: H5D_CONTIGUOUS_F
+      INTEGER :: H5D_CHUNKED_F
+
+      INTEGER :: H5D_ALLOC_TIME_ERROR_F
+      INTEGER :: H5D_ALLOC_TIME_DEFAULT_F
+      INTEGER :: H5D_ALLOC_TIME_EARLY_F
+      INTEGER :: H5D_ALLOC_TIME_LATE_F
+      INTEGER :: H5D_ALLOC_TIME_INCR_F
+
+      INTEGER :: H5D_SPACE_STS_ERROR_F
+      INTEGER :: H5D_SPACE_STS_NOT_ALLOCATED_F
+      INTEGER :: H5D_SPACE_STS_PART_ALLOCATED_F
+      INTEGER :: H5D_SPACE_STS_ALLOCATED_F
+
+      INTEGER :: H5D_FILL_TIME_ERROR_F
+      INTEGER :: H5D_FILL_TIME_ALLOC_F
+      INTEGER :: H5D_FILL_TIME_NEVER_F
+
+      INTEGER :: H5D_FILL_VALUE_ERROR_F
+      INTEGER :: H5D_FILL_VALUE_UNDEFINED_F
+      INTEGER :: H5D_FILL_VALUE_DEFAULT_F
+      INTEGER :: H5D_FILL_VALUE_USER_DEFINED_F
+
+      EQUIVALENCE(H5D_flags(1), H5D_COMPACT_F)
+      EQUIVALENCE(H5D_flags(2), H5D_CONTIGUOUS_F)
+      EQUIVALENCE(H5D_flags(3), H5D_CHUNKED_F)
+
+      EQUIVALENCE(H5D_flags(4), H5D_ALLOC_TIME_ERROR_F)
+      EQUIVALENCE(H5D_flags(5), H5D_ALLOC_TIME_DEFAULT_F)
+      EQUIVALENCE(H5D_flags(6), H5D_ALLOC_TIME_EARLY_F)
+      EQUIVALENCE(H5D_flags(7), H5D_ALLOC_TIME_LATE_F)
+      EQUIVALENCE(H5D_flags(8), H5D_ALLOC_TIME_INCR_F)
+
+      EQUIVALENCE(H5D_flags(9), H5D_SPACE_STS_ERROR_F)
+      EQUIVALENCE(H5D_flags(10), H5D_SPACE_STS_NOT_ALLOCATED_F)
+      EQUIVALENCE(H5D_flags(11), H5D_SPACE_STS_PART_ALLOCATED_F)
+      EQUIVALENCE(H5D_flags(12), H5D_SPACE_STS_ALLOCATED_F)
+
+      EQUIVALENCE(H5D_flags(13), H5D_FILL_TIME_ERROR_F)
+      EQUIVALENCE(H5D_flags(14), H5D_FILL_TIME_ALLOC_F)
+      EQUIVALENCE(H5D_flags(15), H5D_FILL_TIME_NEVER_F)
+
+      EQUIVALENCE(H5D_flags(16), H5D_FILL_VALUE_ERROR_F)
+      EQUIVALENCE(H5D_flags(17), H5D_FILL_VALUE_UNDEFINED_F)
+      EQUIVALENCE(H5D_flags(18), H5D_FILL_VALUE_DEFAULT_F)
+      EQUIVALENCE(H5D_flags(19), H5D_FILL_VALUE_USER_DEFINED_F)
+
+!
+! H5FD flags declaration
+!
+      INTEGER, PARAMETER :: H5FD_FLAGS_LEN = 11
+      INTEGER H5FD_flags(H5FD_FLAGS_LEN)
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /H5FD_FLAGS/
+!DEC$endif
+      COMMON /H5FD_FLAGS/ H5FD_flags
+      
+      INTEGER :: H5FD_MPIO_INDEPENDENT_F 
+      INTEGER :: H5FD_MPIO_COLLECTIVE_F
+      INTEGER :: H5FD_MEM_NOLIST_F
+      INTEGER :: H5FD_MEM_DEFAULT_F
+      INTEGER :: H5FD_MEM_SUPER_F
+      INTEGER :: H5FD_MEM_BTREE_F
+      INTEGER :: H5FD_MEM_DRAW_F
+      INTEGER :: H5FD_MEM_GHEAP_F
+      INTEGER :: H5FD_MEM_LHEAP_F
+      INTEGER :: H5FD_MEM_OHDR_F
+      INTEGER :: H5FD_MEM_NTYPES_F
+ 
+      EQUIVALENCE(H5FD_flags(1), H5FD_MPIO_INDEPENDENT_F)
+      EQUIVALENCE(H5FD_flags(2), H5FD_MPIO_COLLECTIVE_F)
+      EQUIVALENCE(H5FD_flags(3), H5FD_MEM_NOLIST_F)
+      EQUIVALENCE(H5FD_flags(4), H5FD_MEM_DEFAULT_F)
+      EQUIVALENCE(H5FD_flags(5), H5FD_MEM_SUPER_F)
+      EQUIVALENCE(H5FD_flags(6), H5FD_MEM_BTREE_F)
+      EQUIVALENCE(H5FD_flags(7), H5FD_MEM_DRAW_F)
+      EQUIVALENCE(H5FD_flags(8), H5FD_MEM_GHEAP_F)
+      EQUIVALENCE(H5FD_flags(9), H5FD_MEM_LHEAP_F)
+      EQUIVALENCE(H5FD_flags(10), H5FD_MEM_OHDR_F)
+      EQUIVALENCE(H5FD_flags(11), H5FD_MEM_NTYPES_F)
+
+
+!
+! H5FD file drivers flags declaration
+!
+      INTEGER, PARAMETER :: H5FD_HID_FLAGS_LEN = 8
+      INTEGER H5FD_hid_flags(H5FD_HID_FLAGS_LEN)
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /H5FD_HID_FLAGS/
+!DEC$endif
+      COMMON /H5FD_HID_FLAGS/ H5FD_hid_flags
+      
+      INTEGER(HID_T) :: H5FD_CORE_F
+      INTEGER(HID_T) :: H5FD_FAMILY_F
+      INTEGER(HID_T) :: H5FD_LOG_F
+      INTEGER(HID_T) :: H5FD_MPIO_F
+      INTEGER(HID_T) :: H5FD_MULTI_F
+      INTEGER(HID_T) :: H5FD_SEC2_F
+      INTEGER(HID_T) :: H5FD_STDIO_F
+      INTEGER(HID_T) :: H5FD_STREAM_F
+
+      EQUIVALENCE(H5FD_hid_flags(1), H5FD_CORE_F)
+      EQUIVALENCE(H5FD_hid_flags(2), H5FD_FAMILY_F)
+      EQUIVALENCE(H5FD_hid_flags(3), H5FD_LOG_F)
+      EQUIVALENCE(H5FD_hid_flags(4), H5FD_MPIO_F)
+      EQUIVALENCE(H5FD_hid_flags(5), H5FD_MULTI_F)
+      EQUIVALENCE(H5FD_hid_flags(6), H5FD_SEC2_F)
+      EQUIVALENCE(H5FD_hid_flags(7), H5FD_STDIO_F)
+      EQUIVALENCE(H5FD_hid_flags(8), H5FD_STREAM_F)
+
+      
+!
+! H5E flags declaration
+!
+      INTEGER, PARAMETER :: H5E_FLAGS_LEN = 24
+      INTEGER H5E_flags(H5E_FLAGS_LEN)
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /H5E_FLAGS/
+!DEC$endif
+      COMMON /H5E_FLAGS/ H5E_flags
+
+      INTEGER ::  H5E_NONE_MAJOR_F 
+      INTEGER ::  H5E_ARGS_F 
+      INTEGER ::  H5E_RESOURCE_F 
+      INTEGER ::  H5E_INTERNAL_F 
+      INTEGER ::  H5E_FILE_F 
+      INTEGER ::  H5E_IO_F 
+      INTEGER ::  H5E_FUNC_F 
+      INTEGER ::  H5E_ATOM_F 
+      INTEGER ::  H5E_CACHE_F 
+      INTEGER ::  H5E_BTREE_F 
+      INTEGER ::  H5E_SYM_F 
+      INTEGER ::  H5E_HEAP_F 
+      INTEGER ::  H5E_OHDR_F 
+      INTEGER ::  H5E_DATATYPE_F 
+      INTEGER ::  H5E_DATASPACE_F 
+      INTEGER ::  H5E_DATASET_F 
+      INTEGER ::  H5E_STORAGE_F 
+      INTEGER ::  H5E_PLIST_F 
+      INTEGER ::  H5E_ATTR_F 
+      INTEGER ::  H5E_PLINE_F 
+      INTEGER ::  H5E_EFL_F 
+      INTEGER ::  H5E_REFERENCE_F
+      INTEGER ::  H5E_VFL_F 
+      INTEGER ::  H5E_TBBT_F 
+
+      EQUIVALENCE(H5E_flags(1), H5E_NONE_MAJOR_F)
+      EQUIVALENCE(H5E_flags(2), H5E_ARGS_F)
+      EQUIVALENCE(H5E_flags(3), H5E_RESOURCE_F)
+      EQUIVALENCE(H5E_flags(4), H5E_INTERNAL_F)
+      EQUIVALENCE(H5E_flags(5), H5E_FILE_F)
+      EQUIVALENCE(H5E_flags(6), H5E_IO_F)
+      EQUIVALENCE(H5E_flags(7), H5E_FUNC_F)
+      EQUIVALENCE(H5E_flags(8), H5E_ATOM_F)
+      EQUIVALENCE(H5E_flags(9), H5E_CACHE_F)
+      EQUIVALENCE(H5E_flags(10), H5E_BTREE_F)
+      EQUIVALENCE(H5E_flags(11), H5E_SYM_F)
+      EQUIVALENCE(H5E_flags(12), H5E_HEAP_F)
+      EQUIVALENCE(H5E_flags(13), H5E_OHDR_F)
+      EQUIVALENCE(H5E_flags(14), H5E_DATATYPE_F)
+      EQUIVALENCE(H5E_flags(15), H5E_DATASPACE_F)
+      EQUIVALENCE(H5E_flags(16), H5E_DATASET_F)
+      EQUIVALENCE(H5E_flags(17), H5E_STORAGE_F)
+      EQUIVALENCE(H5E_flags(18), H5E_PLIST_F)
+      EQUIVALENCE(H5E_flags(19), H5E_ATTR_F)
+      EQUIVALENCE(H5E_flags(20), H5E_PLINE_F)
+      EQUIVALENCE(H5E_flags(21), H5E_EFL_F)
+      EQUIVALENCE(H5E_flags(22), H5E_REFERENCE_F)
+      EQUIVALENCE(H5E_flags(23), H5E_VFL_F)
+      EQUIVALENCE(H5E_flags(24), H5E_TBBT_F)
+
+!
+! H5I flags declaration
+!
+      INTEGER, PARAMETER :: H5I_FLAGS_LEN = 7
+      INTEGER H5I_flags(H5I_FLAGS_LEN)
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /H5I_FLAGS/
+!DEC$endif
+      COMMON /H5I_FLAGS/ H5I_flags
+
+      INTEGER ::  H5I_FILE_F
+      INTEGER ::  H5I_GROUP_F
+      INTEGER ::  H5I_DATATYPE_F
+      INTEGER ::  H5I_DATASPACE_F
+      INTEGER ::  H5I_DATASET_F
+      INTEGER ::  H5I_ATTR_F
+      INTEGER ::  H5I_BADID_F
+
+      EQUIVALENCE(H5I_flags(1), H5I_FILE_F)
+      EQUIVALENCE(H5I_flags(2), H5I_GROUP_F)
+      EQUIVALENCE(H5I_flags(3), H5I_DATATYPE_F)
+      EQUIVALENCE(H5I_flags(4), H5I_DATASPACE_F)
+      EQUIVALENCE(H5I_flags(5), H5I_DATASET_F)
+      EQUIVALENCE(H5I_flags(6), H5I_ATTR_F)
+      EQUIVALENCE(H5I_flags(7), H5I_BADID_F)
+
+!
+! H5P flags declaration
+!
+      INTEGER, PARAMETER :: H5P_FLAGS_LEN = 7 
+      INTEGER H5P_flags(H5P_FLAGS_LEN)
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /H5P_FLAGS/
+!DEC$endif
+      COMMON /H5P_FLAGS/ H5P_flags
+
+      INTEGER ::  H5P_FILE_CREATE_F 
+      INTEGER ::  H5P_FILE_ACCESS_F 
+      INTEGER ::  H5P_DATASET_CREATE_F
+      INTEGER ::  H5P_DATASET_XFER_F 
+      INTEGER ::  H5P_MOUNT_F 
+      INTEGER ::  H5P_DEFAULT_F 
+      INTEGER ::  H5P_NO_CLASS_F 
+
+      EQUIVALENCE(H5P_flags(1), H5P_FILE_CREATE_F)
+      EQUIVALENCE(H5P_flags(2), H5P_FILE_ACCESS_F)
+      EQUIVALENCE(H5P_flags(3), H5P_DATASET_CREATE_F)
+      EQUIVALENCE(H5P_flags(4), H5P_DATASET_XFER_F)
+      EQUIVALENCE(H5P_flags(5), H5P_MOUNT_F)
+      EQUIVALENCE(H5P_flags(6), H5P_DEFAULT_F)
+      EQUIVALENCE(H5P_flags(7), H5P_NO_CLASS_F)
+
+!
+! H5P flags declaration
+!
+      INTEGER, PARAMETER :: H5R_FLAGS_LEN = 2
+      INTEGER H5R_flags(H5R_FLAGS_LEN)
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /H5R_FLAGS/
+!DEC$endif
+      COMMON /H5R_FLAGS/ H5R_flags
+      
+      INTEGER :: H5R_OBJECT_F
+      INTEGER :: H5R_DATASET_REGION_F
+
+      EQUIVALENCE(H5R_flags(1), H5R_OBJECT_F)
+      EQUIVALENCE(H5R_flags(2), H5R_DATASET_REGION_F)
+
+!
+! H5S flags declaration
+!
+      INTEGER, PARAMETER :: H5S_FLAGS_LEN = 19
+      INTEGER H5S_flags(H5S_FLAGS_LEN)
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /H5S_FLAGS/
+!DEC$endif
+      COMMON /H5S_FLAGS/ H5S_flags
+
+      INTEGER :: H5S_SCALAR_F 
+      INTEGER :: H5S_SIMPLE_F 
+
+      INTEGER :: H5S_UNLIMITED_F
+      INTEGER :: H5S_ALL_F
+
+      INTEGER :: H5S_SELECT_NOOP_F
+      INTEGER :: H5S_SELECT_SET_F
+      INTEGER :: H5S_SELECT_OR_F
+      INTEGER :: H5S_SELECT_AND_F 
+      INTEGER :: H5S_SELECT_XOR_F 
+      INTEGER :: H5S_SELECT_NOTB_F 
+      INTEGER :: H5S_SELECT_NOTA_F 
+      INTEGER :: H5S_SELECT_APPEND_F 
+      INTEGER :: H5S_SELECT_PREPEND_F 
+      INTEGER :: H5S_SELECT_INVALID_F 
+
+
+      INTEGER :: H5S_SEL_ERROR_F
+      INTEGER :: H5S_SEL_NONE_F
+      INTEGER :: H5S_SEL_POINTS_F
+      INTEGER :: H5S_SEL_HYPERSLABS_F
+      INTEGER :: H5S_SEL_ALL_F
+
+      EQUIVALENCE(H5S_flags(1), H5S_SCALAR_F)
+      EQUIVALENCE(H5S_flags(2), H5S_SIMPLE_F)
+      EQUIVALENCE(H5S_flags(3), H5S_SELECT_SET_F)
+      EQUIVALENCE(H5S_flags(4), H5S_SELECT_OR_F)
+      EQUIVALENCE(H5S_flags(5), H5S_UNLIMITED_F)
+      EQUIVALENCE(H5S_flags(6), H5S_ALL_F)
+
+      EQUIVALENCE(H5S_flags(7), H5S_SELECT_NOOP_F)
+      EQUIVALENCE(H5S_flags(8), H5S_SELECT_AND_F) 
+      EQUIVALENCE(H5S_flags(9), H5S_SELECT_XOR_F)
+      EQUIVALENCE(H5S_flags(10), H5S_SELECT_NOTB_F)
+      EQUIVALENCE(H5S_flags(11), H5S_SELECT_NOTA_F)
+      EQUIVALENCE(H5S_flags(12), H5S_SELECT_APPEND_F) 
+      EQUIVALENCE(H5S_flags(13), H5S_SELECT_PREPEND_F) 
+      EQUIVALENCE(H5S_flags(14), H5S_SELECT_INVALID_F)
+
+
+      EQUIVALENCE(H5S_flags(15), H5S_SEL_ERROR_F)
+      EQUIVALENCE(H5S_flags(16), H5S_SEL_NONE_F)
+      EQUIVALENCE(H5S_flags(17), H5S_SEL_POINTS_F)
+      EQUIVALENCE(H5S_flags(18), H5S_SEL_HYPERSLABS_F)
+      EQUIVALENCE(H5S_flags(19), H5S_SEL_ALL_F)
+
+
+!
+! H5T flags declaration
+!
+      INTEGER, PARAMETER :: H5T_FLAGS_LEN = 30
+      INTEGER H5T_flags(H5T_FLAGS_LEN)
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /H5T_FLAGS/
+!DEC$endif
+      COMMON /H5T_FLAGS/ H5T_flags
+
+      INTEGER ::  H5T_NO_CLASS_F 
+      INTEGER ::  H5T_INTEGER_F 
+      INTEGER ::  H5T_FLOAT_F  
+      INTEGER ::  H5T_TIME_F 
+      INTEGER ::  H5T_STRING_F 
+      INTEGER ::  H5T_BITFIELD_F
+      INTEGER ::  H5T_OPAQUE_F 
+      INTEGER ::  H5T_COMPOUND_F 
+      INTEGER ::  H5T_REFERENCE_F
+      INTEGER ::  H5T_ENUM_F 
+      INTEGER ::  H5T_VLEN_F
+      INTEGER ::  H5T_ARRAY_F
+      INTEGER ::  H5T_ORDER_LE_F 
+      INTEGER ::  H5T_ORDER_BE_F
+      INTEGER ::  H5T_ORDER_VAX_F
+      INTEGER ::  H5T_PAD_ZERO_F
+      INTEGER ::  H5T_PAD_ONE_F
+      INTEGER ::  H5T_PAD_BACKGROUND_F
+      INTEGER ::  H5T_PAD_ERROR_F    
+      INTEGER ::  H5T_SGN_NONE_F   
+      INTEGER ::  H5T_SGN_2_F     
+      INTEGER ::  H5T_SGN_ERROR_F
+      INTEGER ::  H5T_NORM_IMPLIED_F
+      INTEGER ::  H5T_NORM_MSBSET_F
+      INTEGER ::  H5T_NORM_NONE_F 
+      INTEGER ::  H5T_CSET_ASCII_F
+      INTEGER ::  H5T_STR_NULLTERM_F 
+      INTEGER ::  H5T_STR_NULLPAD_F 
+      INTEGER ::  H5T_STR_SPACEPAD_F
+      INTEGER ::  H5T_STR_ERROR_F
+       
+      EQUIVALENCE(H5T_flags(1), H5T_NO_CLASS_F)
+      EQUIVALENCE(H5T_flags(2), H5T_INTEGER_F)
+      EQUIVALENCE(H5T_flags(3), H5T_FLOAT_F)
+      EQUIVALENCE(H5T_flags(4), H5T_TIME_F)
+      EQUIVALENCE(H5T_flags(5), H5T_STRING_F)
+      EQUIVALENCE(H5T_flags(6), H5T_BITFIELD_F)
+      EQUIVALENCE(H5T_flags(7), H5T_OPAQUE_F)
+      EQUIVALENCE(H5T_flags(8), H5T_COMPOUND_F)
+      EQUIVALENCE(H5T_flags(9), H5T_REFERENCE_F)
+      EQUIVALENCE(H5T_flags(10), H5T_ENUM_F)
+      EQUIVALENCE(H5T_flags(11), H5T_ORDER_LE_F)
+      EQUIVALENCE(H5T_flags(12), H5T_ORDER_BE_F)
+      EQUIVALENCE(H5T_flags(13), H5T_ORDER_VAX_F)
+      EQUIVALENCE(H5T_flags(14), H5T_PAD_ZERO_F)
+      EQUIVALENCE(H5T_flags(15), H5T_PAD_ONE_F)
+      EQUIVALENCE(H5T_flags(16), H5T_PAD_BACKGROUND_F)
+      EQUIVALENCE(H5T_flags(17), H5T_PAD_ERROR_F)
+      EQUIVALENCE(H5T_flags(18), H5T_SGN_NONE_F)
+      EQUIVALENCE(H5T_flags(19), H5T_SGN_2_F)
+      EQUIVALENCE(H5T_flags(20), H5T_SGN_ERROR_F)
+      EQUIVALENCE(H5T_flags(21), H5T_NORM_IMPLIED_F)
+      EQUIVALENCE(H5T_flags(22), H5T_NORM_MSBSET_F)
+      EQUIVALENCE(H5T_flags(23), H5T_NORM_NONE_F)
+      EQUIVALENCE(H5T_flags(24), H5T_CSET_ASCII_F)
+      EQUIVALENCE(H5T_flags(25), H5T_STR_NULLTERM_F)
+      EQUIVALENCE(H5T_flags(26), H5T_STR_NULLPAD_F)
+      EQUIVALENCE(H5T_flags(27), H5T_STR_SPACEPAD_F)
+      EQUIVALENCE(H5T_flags(28), H5T_STR_ERROR_F)
+      EQUIVALENCE(H5T_flags(29), H5T_VLEN_F)
+      EQUIVALENCE(H5T_flags(30), H5T_ARRAY_F)
+
+!
+! H5Z flags declaration
+!
+      INTEGER, PARAMETER :: H5Z_FLAGS_LEN = 14
+      INTEGER H5Z_flags(H5Z_FLAGS_LEN)
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /H5Z_FLAGS/
+!DEC$endif
+      COMMON /H5Z_FLAGS/ H5Z_flags
+
+      INTEGER :: H5Z_FILTER_ERROR_F 
+      INTEGER :: H5Z_FILTER_NONE_F 
+      INTEGER :: H5Z_FILTER_ALL_F
+      INTEGER :: H5Z_FILTER_DEFLATE_F 
+      INTEGER :: H5Z_FILTER_SHUFFLE_F 
+      INTEGER :: H5Z_FILTER_FLETCHER32_F 
+      INTEGER :: H5Z_FILTER_SZIP_F 
+      INTEGER :: H5Z_ERROR_EDC_F
+      INTEGER :: H5Z_DISABLE_EDC_F
+      INTEGER :: H5Z_ENABLE_EDC_F
+      INTEGER :: H5Z_NO_EDC_F
+      INTEGER :: H5Z_FLAG_OPTIONAL_F
+      INTEGER :: H5Z_FILTER_ENCODE_ENABLED_F
+      INTEGER :: H5Z_FILTER_DECODE_ENABLED_F
+
+      EQUIVALENCE(H5Z_flags(1), H5Z_FILTER_ERROR_F)
+      EQUIVALENCE(H5Z_flags(2), H5Z_FILTER_NONE_F)
+      EQUIVALENCE(H5Z_flags(3), H5Z_FILTER_DEFLATE_F)
+      EQUIVALENCE(H5Z_flags(4), H5Z_FILTER_SHUFFLE_F)
+      EQUIVALENCE(H5Z_flags(5), H5Z_FILTER_FLETCHER32_F)
+      EQUIVALENCE(H5Z_flags(6), H5Z_ERROR_EDC_F)
+      EQUIVALENCE(H5Z_flags(7), H5Z_DISABLE_EDC_F)
+      EQUIVALENCE(H5Z_flags(8), H5Z_ENABLE_EDC_F)
+      EQUIVALENCE(H5Z_flags(9), H5Z_NO_EDC_F)
+      EQUIVALENCE(H5Z_flags(10), H5Z_FILTER_SZIP_F)
+      EQUIVALENCE(H5Z_flags(11), H5Z_FLAG_OPTIONAL_F)
+      EQUIVALENCE(H5Z_flags(12), H5Z_FILTER_ENCODE_ENABLED_F)
+      EQUIVALENCE(H5Z_flags(13), H5Z_FILTER_DECODE_ENABLED_F)
+      EQUIVALENCE(H5Z_flags(14), H5Z_FILTER_ALL_F)
+
+
+!
+! H5 Library flags declaration
+!
+     INTEGER, PARAMETER :: H5LIB_FLAGS_LEN =  2
+     INTEGER :: H5LIB_flags(H5LIB_FLAGS_LEN) 
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$ ATTRIBUTES DLLEXPORT :: /H5LIB_FLAGS/
+!DEC$endif
+     COMMON /H5LIB_FLAGS/ H5LIB_flags
+      INTEGER :: H5_SZIP_EC_OM_F
+      INTEGER :: H5_SZIP_NN_OM_F
+!
+      EQUIVALENCE(H5LIB_flags(1), H5_SZIP_EC_OM_F)
+      EQUIVALENCE(H5LIB_flags(2), H5_SZIP_NN_OM_F)
+
+    END MODULE H5GLOBAL
+      

Added: packages/hdf5/branches/upstream/current/fortran/src/H5f90i.h
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5f90i.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5f90i.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,250 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#ifndef _H5f90i_H
+#define _H5f90i_H
+
+/*
+ * Standard header files needed all the time
+ */
+
+#include "H5private.h"
+
+#if (defined (UNICOS) || defined (_UNICOS)) && !defined(__crayx1)
+
+#include <fortran.h>
+
+/*typedef char*              _fcd;*/
+typedef long               haddr_t_f;
+typedef long               hsize_t_f;
+typedef long               hssize_t_f;
+typedef long               size_t_f;
+typedef long               int_f;
+typedef long               hid_t_f;
+typedef double             real_f;
+#define DF_CAPFNAMES
+/*#define _fcdtocp(desc) (desc)*/
+
+#endif /* UNICOS */
+
+#if defined(IBM6000) || defined(_AIX)
+
+typedef char              *_fcd;
+typedef long long         haddr_t_f;
+typedef long long         hsize_t_f;
+typedef long long         hssize_t_f;
+typedef int               size_t_f;
+typedef int               int_f;
+typedef int               hid_t_f;
+typedef float             real_f;
+#define _fcdtocp(desc) (desc)
+#endif /*IBM6000*/
+
+/* MAC APPLE definitions with IBM XL compiler*/
+#if defined(__APPLE__)
+typedef char              *_fcd;
+typedef long long         haddr_t_f;
+typedef long long         hsize_t_f;
+typedef long long         hssize_t_f;
+typedef int               size_t_f;
+typedef int               int_f;
+typedef int               hid_t_f;
+typedef float             real_f;
+#define FNAME(x) x
+#if defined H5_ABSOFT
+#define DF_CAPFNAMES
+#endif /*H5_ABSOFT*/
+#define _fcdtocp(desc) (desc)
+
+#endif /*APPLE*/
+
+/* LINUX definitions */
+#if (defined(linux) || defined(__gnu_linux__) || defined(__linux__))
+
+/* Common definitions */
+typedef char              *_fcd;
+typedef int               int_f;
+typedef int               hid_t_f;
+typedef float             real_f;
+#define _fcdtocp(desc) (desc)
+
+/* IA32 specific definitions */
+#if (defined(i386) || defined(__i386) || defined(__i386__))
+
+typedef long long         haddr_t_f;
+typedef long long         hsize_t_f;
+typedef long long         hssize_t_f;
+typedef int               size_t_f;
+#if defined H5_ABSOFT
+#define DF_CAPFNAMES
+#elif defined H5_G95
+#define FNAME_POST2_UNDERSCORE
+#else
+#define FNAME_POST_UNDERSCORE
+#endif /*H5_ABSOFT*/
+
+/* AMD64 specific definitions */
+#elif defined __x86_64__
+
+typedef long long         haddr_t_f;
+typedef long long         hsize_t_f;
+typedef long long         hssize_t_f;
+typedef int               size_t_f;
+#define FNAME_POST_UNDERSCORE
+
+/* IA64 specific definitions */
+#elif defined __ia64
+
+typedef long              haddr_t_f;
+typedef long              hsize_t_f;
+typedef long              hssize_t_f;
+typedef long              size_t_f;
+#define FNAME_POST_UNDERSCORE
+
+#endif /* IA64 */
+#endif /* LINUX*/
+
+#if defined(IRIX) || defined(IRIS4) || defined(sgi) || defined(__sgi__) || defined(__sgi)
+
+typedef char          *_fcd;
+typedef long          haddr_t_f;
+typedef long          hsize_t_f;
+typedef long          hssize_t_f;
+typedef long          size_t_f;
+typedef int           int_f;
+typedef int           hid_t_f;
+typedef float         real_f;
+#define FNAME_POST_UNDERSCORE
+#define _fcdtocp(desc) (desc)
+#endif /* IRIX */
+
+#if defined(__crayx1)
+
+typedef char          *_fcd;
+typedef long          haddr_t_f;
+typedef long          hsize_t_f;
+typedef long          hssize_t_f;
+typedef long          size_t_f;
+typedef int           int_f;
+typedef int           hid_t_f;
+typedef float         real_f;
+#define FNAME_POST_UNDERSCORE
+#define _fcdtocp(desc) (desc)
+#endif /* Cray X1 */
+
+#if (defined(SUN) || defined(sun) || defined(__sun__) || defined(__SUNPRO_C)) & !defined(__i386)
+
+typedef char              *_fcd;
+typedef long long         haddr_t_f;
+typedef long long         hssize_t_f;
+typedef long long         hsize_t_f;
+typedef int               size_t_f;
+typedef int               int_f;
+typedef int               hid_t_f;
+typedef float             real_f;
+#define FNAME_POST_UNDERSCORE
+#define _fcdtocp(desc) (desc)
+
+#endif     /*SUN*/
+
+#if defined DEC_ALPHA || (defined __alpha && defined __unix__ && !defined __linux__)
+
+typedef char             *_fcd;
+typedef long             haddr_t_f;
+typedef long             hsize_t_f;
+typedef long             hssize_t_f;
+typedef long             size_t_f;
+typedef int              int_f;
+typedef int              hid_t_f;
+typedef float            real_f;
+#define FNAME_POST_UNDERSCORE
+#define _fcdtocp(desc) (desc)
+
+#endif /* DEC_ALPHA */
+
+#if defined __alpha__ && defined __linux__
+
+typedef char             *_fcd;
+typedef long long        haddr_t_f;
+typedef long long        hsize_t_f;
+typedef long long        hssize_t_f;
+typedef long long        size_t_f;
+typedef int              int_f;
+typedef int              hid_t_f;
+typedef float            real_f;
+#define FNAME_POST2_UNDERSCORE
+#define _fcdtocp(desc) (desc)
+
+#endif /* DEC_ALPHA_LINUX */
+
+#if defined(HP9000) || (!defined(__convexc__) && (defined(hpux) || defined(__hpux)))
+
+typedef char           *_fcd;
+typedef long long      haddr_t_f;
+typedef long long      hsize_t_f;
+typedef long long      hssize_t_f;
+typedef long           size_t_f;
+typedef int            int_f;
+typedef int            hid_t_f;
+typedef float          real_f;
+#define _fcdtocp(desc) (desc)
+
+#if defined __ia64
+#define FNAME_POST_UNDERSCORE
+#endif
+#endif /* HP9000 */
+
+
+#if defined _WINDOWS || defined WIN32
+
+typedef char              *_fcd;
+typedef int               haddr_t_f;
+typedef int               hsize_t_f;
+typedef int               hssize_t_f;
+typedef int               size_t_f;
+typedef int               int_f;
+typedef int               hid_t_f;
+typedef float             real_f;
+
+#define DF_CAPFNAMES
+#define _fcdtocp(desc) (desc)
+
+#endif /*WINDOWS */
+
+/*----------------------------------------------------------------
+** MACRO FNAME for any fortran callable routine name.
+**
+**  This macro prepends, appends, or does not modify a name
+**  passed as a macro parameter to it based on the FNAME_PRE_UNDERSCORE,
+**  FNAME_POST_UNDERSCORE macros set for a specific system.
+**
+**---------------------------------------------------------------*/
+#if defined(FNAME_PRE_UNDERSCORE) && defined(FNAME_POST_UNDERSCORE)
+#   define FNAME(x)     _##x##_
+#endif
+#if defined(FNAME_PRE_UNDERSCORE) && !defined(FNAME_POST_UNDERSCORE)
+#   define FNAME(x)     _##x
+#endif
+#if !defined(FNAME_PRE_UNDERSCORE) && defined(FNAME_POST_UNDERSCORE)
+#   define FNAME(x)     x##_
+#endif
+#if !defined(FNAME_PRE_UNDERSCORE) && !defined(FNAME_POST_UNDERSCORE)
+#   define FNAME(x)     x
+#endif
+#if !defined(FNAME_PRE_UNDERSCORE) && defined(FNAME_POST2_UNDERSCORE)
+#   define FNAME(x)     x##__
+#endif
+
+#endif /* _H5f90i_H */

Added: packages/hdf5/branches/upstream/current/fortran/src/H5f90kit.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5f90kit.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5f90kit.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,102 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#include <ctype.h>
+#include <stddef.h>
+#include "H5f90.h"
+
+
+/*
+ * Routines from HDF4 to deal with C-FORTRAN issues.
+ *
+ * HD5f2cstring   -- convert a Fortran string to a C string
+ * HD5packFstring -- convert a C string into a Fortran string
+ */
+
+/* ----------------------------- HDf2cstring ------------------------------ */
+/*
+NAME
+   HD5f2cstring -- convert a Fortran string to a C string
+USAGE
+   char * HDf2cstring(fdesc, len)
+   _fcd  fdesc;     IN: Fortran string descriptor
+   int  len;       IN: length of Fortran string
+RETURNS
+   Pointer to the C string if success, else NULL
+DESCRIPTION
+   Chop off trailing blanks off of a Fortran string and
+   move it into a newly allocated C string.  It is up
+   to the user to free this string.
+
+---------------------------------------------------------------------------*/
+char *
+HD5f2cstring(_fcd fdesc, size_t len)
+{
+    char       *cstr;   /* C string to return */
+    char       *str;    /* Pointer to FORTRAN string */
+    int         i;      /* Local index variable */
+
+    /* Search for the end of the string */
+    str = _fcdtocp(fdesc);
+    for(i=(int)len-1; i>=0 && !isgraph((int)str[i]); i--)
+        /*EMPTY*/;
+
+    /* Allocate C string */
+    if ((cstr = HDmalloc( (size_t)(i + 2))) == NULL)
+        return NULL;
+
+    /* Copy text from FORTRAN to C string */
+    HDmemcpy(cstr,str,(size_t)(i+1));
+
+    /* Terminate C string */
+    cstr[i + 1] = '\0';
+
+    return cstr;
+}   /* HD5f2cstring */
+
+/* ---------------------------- HD5packFstring ----------------------------- */
+/*
+NAME
+   HD5packFstring -- convert a C string into a Fortran string
+USAGE
+   int HD5packFstring(src, dest, len)
+   char * src;          IN:  source string
+   char * dest;         OUT: destination
+   int   len;          IN:  length of string
+RETURNS
+   SUCCEED / FAIL
+DESCRIPTION
+   given a NULL terminated C string 'src' convert it to
+   a space padded Fortran string 'dest' of length 'len'
+
+   This is very similar to HDc2fstr except that function does
+   it in place and this one copies.  We should probably only
+   support one of these.
+
+---------------------------------------------------------------------------*/
+void
+HD5packFstring(char *src, char *dest, size_t dst_len)
+{
+    size_t src_len=HDstrlen(src);
+
+    /* Copy over the string information, up to the length of the src */
+    /* (Don't copy the NUL terminator from the C string to the FORTRAN string */
+    HDmemcpy(dest,src,MIN(src_len,dst_len));
+
+    /* Pad out any remaining space in the FORTRAN string with ' 's */
+    if(src_len<dst_len)
+        HDmemset(&dest[src_len],' ',dst_len-src_len);
+}   /* HD5packFstring */
+

Added: packages/hdf5/branches/upstream/current/fortran/src/H5f90proto.h
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5f90proto.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5f90proto.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1022 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#ifndef _H5f90proto_H
+#define _H5f90proto_H
+
+H5_FCDLL char * HD5f2cstring (_fcd fdesc, size_t len);
+H5_FCDLL void HD5packFstring(char *src, char *dest, size_t len);
+
+/*
+ *  Functions from H5Ff.c
+ */
+#ifndef H5Ff90_FNAMES
+#    define H5Ff90_FNAMES
+#ifdef DF_CAPFNAMES
+#   define nh5fcreate_c              FNAME(H5FCREATE_C)
+#   define nh5fflush_c               FNAME(H5FFLUSH_C)
+#   define nh5fclose_c               FNAME(H5FCLOSE_C)
+#   define nh5fopen_c                FNAME(H5FOPEN_C)
+#   define nh5fis_hdf5_c             FNAME(H5FIS_HDF5_C)
+#   define nh5fmount_c               FNAME(H5FMOUNT_C)
+#   define nh5funmount_c             FNAME(H5FUNMOUNT_C)
+#   define nh5freopen_c              FNAME(H5FREOPEN_C)
+#   define nh5fget_create_plist_c    FNAME(H5FGET_CREATE_PLIST_C)
+#   define nh5fget_access_plist_c    FNAME(H5FGET_ACCESS_PLIST_C)
+#   define nh5fget_obj_count_c       FNAME(H5FGET_OBJ_COUNT_C)
+#   define nh5fget_obj_ids_c         FNAME(H5FGET_OBJ_IDS_C)
+#   define nh5fget_freespace_c       FNAME(H5FGET_FREESPACE_C)
+#   define nh5fget_name_c            FNAME(H5FGET_NAME_C)
+#   define nh5fget_filesize_c        FNAME(H5FGET_FILESIZE_C)
+#else                                              /* !DF_CAPFNAMES */
+#   define nh5fcreate_c            FNAME(h5fcreate_c)
+#   define nh5fflush_c             FNAME(h5fflush_c)
+#   define nh5fclose_c             FNAME(h5fclose_c)
+#   define nh5fopen_c              FNAME(h5fopen_c)
+#   define nh5fis_hdf5_c           FNAME(h5fis_hdf5_c)
+#   define nh5fmount_c             FNAME(h5fmount_c)
+#   define nh5funmount_c           FNAME(h5funmount_c)
+#   define nh5freopen_c            FNAME(h5freopen_c)
+#   define nh5fget_create_plist_c  FNAME(h5fget_create_plist_c)
+#   define nh5fget_access_plist_c  FNAME(h5fget_access_plist_c)
+#   define nh5fget_obj_count_c     FNAME(h5fget_obj_count_c)
+#   define nh5fget_obj_ids_c       FNAME(h5fget_obj_ids_c)
+#   define nh5fget_freespace_c     FNAME(h5fget_freespace_c)
+#   define nh5fget_name_c          FNAME(h5fget_name_c)
+#   define nh5fget_filesize_c      FNAME(h5fget_filesize_c)
+#endif                                             /* DF_CAPFNAMES */
+#endif                                             /* H5Ff90_FNAMES */
+
+H5_FCDLL int_f nh5fcreate_c (_fcd name, int_f *namelen, int_f *access_flags, hid_t_f *crt_prp, hid_t_f *acc_prp, hid_t_f *file_id);
+H5_FCDLL int_f nh5fopen_c (_fcd name, int_f *namelen, int_f *access_flags, hid_t_f *acc_prp, hid_t_f *file_id);
+H5_FCDLL int_f nh5fis_hdf5_c (_fcd name, int_f *namelen, int_f *flag);
+H5_FCDLL int_f nh5fclose_c (hid_t_f *file_id);
+H5_FCDLL int_f nh5fmount_c (hid_t_f *loc_id, _fcd dsetname, int_f *namelen, hid_t_f *file_id, hid_t_f *acc_prp);
+H5_FCDLL int_f nh5funmount_c (hid_t_f *loc_id, _fcd dsetname, int_f *namelen);
+H5_FCDLL int_f nh5freopen_c (hid_t_f *file_id1, hid_t_f *file_id2);
+H5_FCDLL int_f nh5fget_create_plist_c (hid_t_f *file_id, hid_t_f *prop_id);
+H5_FCDLL int_f nh5fget_access_plist_c (hid_t_f *file_id, hid_t_f *access_id);
+H5_FCDLL int_f nh5fget_obj_count_c (hid_t_f *file_id, int_f *obj_type, int_f *obj_count);
+H5_FCDLL int_f nh5fget_obj_ids_c (hid_t_f *file_id, int_f *obj_type, int_f *max_objs, int_f *obj_ids);
+H5_FCDLL int_f nh5fget_freespace_c (hid_t_f *file_id, hssize_t_f *free_space);
+H5_FCDLL int_f nh5fflush_c (hid_t_f *obj_id, int_f *scope);
+H5_FCDLL int_f nh5fget_name_c(hid_t_f *obj_id, size_t_f *size, _fcd buf, size_t_f *buflen);
+H5_FCDLL int_f nh5fget_filesize_c(hid_t_f *file_id, hsize_t_f *size);
+
+/*
+ * Functions from H5Sf.c
+ */
+#ifndef H5Sf90_FNAMES
+#    define H5Sf90_FNAMES
+#ifdef DF_CAPFNAMES
+#   define nh5screate_simple_c      FNAME(H5SCREATE_SIMPLE_C)
+#   define nh5sclose_c              FNAME(H5SCLOSE_C)
+#   define nh5screate_c             FNAME(H5SCREATE_C)
+#   define nh5scopy_c               FNAME(H5SCOPY_C)
+#   define nh5sget_select_hyper_nblocks_c FNAME(H5SGET_SELECT_HYPER_NBLOCKS_C)
+#   define nh5sget_select_hyper_blocklist_c FNAME(H5SGET_SELECT_HYPER_BLOCKLIST_C)
+#   define nh5sget_select_elem_npoints_c FNAME(H5SGET_SELECT_ELEM_NPOINTS_C)
+#   define nh5sget_select_elem_pointlist_c FNAME(H5SGET_SELECT_ELEM_POINTLIST_C)
+#   define nh5sget_select_bounds_c  FNAME(H5SGET_SELECT_BOUNDS_C)
+#   define nh5sselect_all_c         FNAME(H5SSELECT_ALL_C)
+#   define nh5sselect_none_c        FNAME(H5SSELECT_NONE_C)
+#   define nh5sselect_valid_c       FNAME(H5SSELECT_VALID_C)
+#   define nh5sget_simple_extent_npoints_c FNAME(H5SGET_SIMPLE_EXTENT_NPOINTS_C)
+#   define nh5sget_select_npoints_c FNAME(H5SGET_SELECT_NPOINTS_C)
+#   define nh5sget_simple_extent_ndims_c FNAME(H5SGET_SIMPLE_EXTENT_NDIMS_C)
+#   define nh5sget_simple_extent_type_c  FNAME(H5SGET_SIMPLE_EXTENT_TYPE_C)
+#   define nh5soffset_simple_c      FNAME(H5SOFFSET_SIMPLE_C)
+#   define nh5sset_extent_simple_c  FNAME(H5SSET_EXTENT_SIMPLE_C)
+#   define nh5sis_simple_c          FNAME(H5SIS_SIMPLE_C)
+#   define nh5sextent_class_c       FNAME(H5SEXTENT_CLASS_C)
+#   define nh5sget_simple_extent_dims_c FNAME(H5SGET_SIMPLE_EXTENT_DIMS_C)
+#   define nh5sextent_copy_c        FNAME(H5SEXTENT_COPY_C)
+#   define nh5sset_extent_none_c    FNAME(H5SSET_EXTENT_NONE_C)
+#   define nh5sselect_hyperslab_c   FNAME(H5SSELECT_HYPERSLAB_C)
+#   define nh5sget_select_type_c   FNAME(H5SGET_SELECT_TYPE_C)
+#   define nh5sselect_elements_c    FNAME(H5SSELECT_ELEMENTS_C)
+#else                                              /* !DF_CAPFNAMES */
+#   define nh5screate_simple_c      FNAME(h5screate_simple_c)
+#   define nh5sclose_c              FNAME(h5sclose_c)
+#   define nh5screate_c             FNAME(h5screate_c)
+#   define nh5scopy_c               FNAME(h5scopy_c)
+#   define nh5sget_select_hyper_nblocks_c FNAME(h5sget_select_hyper_nblocks_c)
+#   define nh5sget_select_hyper_blocklist_c FNAME(h5sget_select_hyper_blocklist_c)
+#   define nh5sget_select_elem_npoints_c FNAME(h5sget_select_elem_npoints_c)
+#   define nh5sget_select_bounds_c  FNAME(h5sget_select_bounds_c)
+#   define nh5sget_select_elem_pointlist_c FNAME(h5sget_select_elem_pointlist_c)
+#   define nh5sselect_all_c         FNAME(h5sselect_all_c)
+#   define nh5sselect_none_c        FNAME(h5sselect_none_c)
+#   define nh5sselect_valid_c       FNAME(h5sselect_valid_c)
+#   define nh5sget_simple_extent_npoints_c FNAME(h5sget_simple_extent_npoints_c)
+#   define nh5sget_select_npoints_c FNAME(h5sget_select_npoints_c)
+#   define nh5sget_simple_extent_ndims_c FNAME(h5sget_simple_extent_ndims_c)
+#   define nh5sget_simple_extent_type_c  FNAME(h5sget_simple_extent_type_c)
+#   define nh5soffset_simple_c      FNAME(h5soffset_simple_c)
+#   define nh5sset_extent_simple_c  FNAME(h5sset_extent_simple_c)
+#   define nh5sis_simple_c          FNAME(h5sis_simple_c)
+#   define nh5sextent_class_c       FNAME(h5sextent_class_c)
+#   define nh5sget_simple_extent_dims_c FNAME(h5sget_simple_extent_dims_c)
+#   define nh5sextent_copy_c        FNAME(h5sextent_copy_c)
+#   define nh5sset_extent_none_c    FNAME(h5sset_extent_none_c)
+#   define nh5sselect_hyperslab_c   FNAME(h5sselect_hyperslab_c)
+#   define nh5sget_select_type_c   FNAME(h5sget_select_type_c)
+#   define nh5sselect_elements_c    FNAME(h5sselect_elements_c)
+#endif                                             /* DF_CAPFNAMES */
+#endif
+
+H5_FCDLL int_f nh5screate_simple_c ( int_f *rank, hsize_t_f *dims, hsize_t_f *maxdims, hid_t_f *space_id );
+H5_FCDLL int_f nh5sclose_c ( hid_t_f *space_id );
+H5_FCDLL int_f nh5screate_c ( int_f *classtype, hid_t_f *space_id );
+H5_FCDLL int_f nh5scopy_c ( hid_t_f *space_id , hid_t_f *new_space_id);
+H5_FCDLL int_f nh5sget_select_hyper_nblocks_c( hid_t_f *space_id , hssize_t_f * num_blocks);
+H5_FCDLL int_f nh5sget_select_hyper_blocklist_c( hid_t_f *space_id ,hsize_t_f * startblock, hsize_t_f * num_blocks, hsize_t_f * buf);
+H5_FCDLL int_f nh5sget_select_bounds_c( hid_t_f *space_id , hsize_t_f * start, hsize_t_f * end);
+H5_FCDLL int_f nh5sget_select_elem_npoints_c( hid_t_f *space_id , hssize_t_f * num_points);
+H5_FCDLL int_f nh5sget_select_elem_pointlist_c( hid_t_f *space_id ,hsize_t_f * startpoint, hsize_t_f * numpoints, hsize_t_f * buf);
+H5_FCDLL int_f nh5sselect_all_c ( hid_t_f *space_id );
+H5_FCDLL int_f nh5sselect_none_c ( hid_t_f *space_id );
+H5_FCDLL int_f nh5sselect_valid_c ( hid_t_f *space_id , int_f *flag );
+H5_FCDLL int_f nh5sget_simple_extent_npoints_c ( hid_t_f *space_id , hsize_t_f *npoints );
+H5_FCDLL int_f nh5sget_select_npoints_c ( hid_t_f *space_id , hssize_t_f *npoints );
+H5_FCDLL int_f nh5sget_simple_extent_ndims_c ( hid_t_f *space_id , int_f *ndims );
+H5_FCDLL int_f nh5sget_simple_extent_type_c ( hid_t_f *space_id , int_f *classtype);
+H5_FCDLL int_f nh5soffset_simple_c ( hid_t_f *space_id , hssize_t_f *offset);
+H5_FCDLL int_f nh5sset_extent_simple_c ( hid_t_f *space_id , int_f *rank, hsize_t_f * current_size, hsize_t_f *maximum_size);
+H5_FCDLL int_f nh5sis_simple_c ( hid_t_f *space_id , int_f *flag );
+H5_FCDLL int_f nh5sextent_class_c ( hid_t_f *space_id , int_f *classtype);
+H5_FCDLL int_f nh5sget_simple_extent_dims_c ( hid_t_f *space_id , hsize_t_f *dims, hsize_t_f *maxdims);
+H5_FCDLL int_f nh5sextent_copy_c ( hid_t_f *dest_space_id , hid_t_f *source_space_id);
+H5_FCDLL int_f nh5sset_extent_none_c ( hid_t_f *space_id );
+H5_FCDLL int_f nh5sselect_hyperslab_c ( hid_t_f *space_id , int_f *op, hsize_t_f *start, hsize_t_f *count, hsize_t_f *stride, hsize_t_f *block);
+H5_FCDLL int_f nh5sget_select_type_c ( hid_t_f *space_id , int_f *op);
+H5_FCDLL int_f nh5sselect_elements_c ( hid_t_f *space_id , int_f *op, size_t_f *nelements, hsize_t_f *coord);
+
+
+/*
+ * Functions from H5Df.c
+ */
+#ifndef H5Df90_FNAMES
+#    define H5Df90_FNAMES
+#ifdef DF_CAPFNAMES
+#   define nh5dcreate_c                FNAME(H5DCREATE_C)
+#   define nh5dclose_c                 FNAME(H5DCLOSE_C)
+#   define nh5dopen_c                  FNAME(H5DOPEN_C)
+#   define nh5dwrite_c                 FNAME(H5DWRITE_C)
+#   define nh5dwrite_ref_obj_c         FNAME(H5DWRITE_REF_OBJ_C)
+#   define nh5dwrite_ref_reg_c         FNAME(H5DWRITE_REF_REG_C)
+#   define nh5dwritec_c                FNAME(H5DWRITEC_C)
+#   define nh5dread_c                  FNAME(H5DREAD_C)
+#   define nh5dread_c_b                FNAME(H5DREAD_C_B)
+#   define nh5dread_ref_reg_c          FNAME(H5DREAD_REF_REG_C)
+#   define nh5dread_ref_obj_c          FNAME(H5DREAD_REF_OBJ_C)
+#   define nh5dreadc_c                 FNAME(H5DREADC_C)
+#   define nh5dreadc_c_b               FNAME(H5DREADC_C_B)
+#   define nh5dget_space_c             FNAME(H5DGET_SPACE_C)
+#   define nh5dget_type_c              FNAME(H5DGET_TYPE_C)
+#   define nh5dget_create_plist_c      FNAME(H5DGET_CREATE_PLIST_C)
+#   define nh5dextend_c                FNAME(H5DEXTEND_C)
+#   define nh5dget_storage_size_c      FNAME(H5DGET_STORAGE_SIZE_C)
+#   define nh5dvlen_get_max_len_c      FNAME(H5DVLEN_GET_MAX_LEN_C)
+#   define nh5dwrite_vl_integer_c      FNAME(H5DWRITE_VL_INTEGER_C)
+#   define nh5dread_vl_integer_c       FNAME(H5DREAD_VL_INTEGER_C)
+#   define nh5dwrite_vl_real_c         FNAME(H5DWRITE_VL_REAL_C)
+#   define nh5dread_vl_real_c          FNAME(H5DREAD_VL_REAL_C)
+#   define nh5dwrite_vl_string_c       FNAME(H5DWRITE_VL_STRING_C)
+#   define nh5dread_vl_string_c        FNAME(H5DREAD_VL_STRING_C)
+#   define nh5dfillc_c                 FNAME(H5DFILLC_C)
+#   define nh5dfill_c                  FNAME(H5DFILL_C)
+#   define nh5dget_space_status_c      FNAME(H5DGET_SPACE_STATUS_C)
+#else                                              /* !DF_CAPFNAMES */
+#   define nh5dcreate_c                FNAME(h5dcreate_c)
+#   define nh5dclose_c                 FNAME(h5dclose_c)
+#   define nh5dopen_c                  FNAME(h5dopen_c)
+#   define nh5dwrite_c                 FNAME(h5dwrite_c)
+#   define nh5dwritec_c                FNAME(h5dwritec_c)
+#   define nh5dwrite_ref_obj_c         FNAME(h5dwrite_ref_obj_c)
+#   define nh5dwrite_ref_reg_c         FNAME(h5dwrite_ref_reg_c)
+#   define nh5dread_c                  FNAME(h5dread_c)
+#   define nh5dread_ref_reg_c          FNAME(h5dread_ref_reg_c)
+#   define nh5dread_ref_obj_c          FNAME(h5dread_ref_obj_c)
+#   define nh5dreadc_c                 FNAME(h5dreadc_c)
+#   define nh5dget_space_c             FNAME(h5dget_space_c)
+#   define nh5dget_type_c              FNAME(h5dget_type_c)
+#   define nh5dget_create_plist_c      FNAME(h5dget_create_plist_c)
+#   define nh5dextend_c                FNAME(h5dextend_c)
+#   define nh5dget_storage_size_c      FNAME(h5dget_storage_size_c)
+#   define nh5dvlen_get_max_len_c      FNAME(h5dvlen_get_max_len_c)
+#   define nh5dwrite_vl_integer_c      FNAME(h5dwrite_vl_integer_c)
+#   define nh5dread_vl_integer_c       FNAME(h5dread_vl_integer_c)
+#   define nh5dwrite_vl_real_c         FNAME(h5dwrite_vl_real_c)
+#   define nh5dread_vl_real_c          FNAME(h5dread_vl_real_c)
+#   define nh5dwrite_vl_string_c       FNAME(h5dwrite_vl_string_c)
+#   define nh5dread_vl_string_c        FNAME(h5dread_vl_string_c)
+#   define nh5dfillc_c                 FNAME(h5dfillc_c)
+#   define nh5dfill_c                  FNAME(h5dfill_c)
+#   define nh5dget_space_status_c      FNAME(h5dget_space_status_c)
+#endif                                             /* DF_CAPFNAMES */
+#endif
+
+H5_FCDLL 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 *crt_prp,  hid_t_f *dset_id);
+H5_FCDLL int_f nh5dopen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *dset_id);
+H5_FCDLL int_f nh5dclose_c ( hid_t_f *dset_id );
+H5_FCDLL 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 *dims);
+H5_FCDLL 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);
+H5_FCDLL 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);
+H5_FCDLL 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);
+H5_FCDLL 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);
+H5_FCDLL 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);
+H5_FCDLL 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);
+H5_FCDLL 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 *dims);
+H5_FCDLL 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);
+H5_FCDLL 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);
+H5_FCDLL 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);
+H5_FCDLL 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);
+H5_FCDLL 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);
+H5_FCDLL 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);
+H5_FCDLL int_f nh5dget_space_c ( hid_t_f *dset_id , hid_t_f *space_id);
+H5_FCDLL int_f nh5dget_type_c ( hid_t_f *dset_id , hid_t_f *type_id);
+H5_FCDLL int_f nh5dget_create_plist_c ( hid_t_f *dset_id , hid_t_f *plist_id);
+H5_FCDLL int_f nh5dextend_c ( hid_t_f *dset_id , hsize_t_f *dims);
+H5_FCDLL int_f nh5dvlen_get_max_len_c(hid_t_f *dataset_id, hid_t_f *type_id, hid_t_f *space_id, size_t_f *len);
+H5_FCDLL int_f nh5dget_storage_size_c(hid_t_f *dataset_id, hsize_t_f *size);
+H5_FCDLL 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);
+H5_FCDLL 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);
+H5_FCDLL int_f nh5dget_space_status_c ( hid_t_f *dset_id, int_f *flag);
+
+/*
+ * Functions from H5Gf.c
+ */
+#ifndef H5Gf90_FNAMES
+#    define H5Gf90_FNAMES
+#ifdef DF_CAPFNAMES
+#   define nh5gcreate_c      FNAME(H5GCREATE_C)
+#   define nh5gclose_c       FNAME(H5GCLOSE_C)
+#   define nh5gopen_c        FNAME(H5GOPEN_C)
+#   define nh5gget_obj_info_idx_c FNAME(H5GGET_OBJ_INFO_IDX_C)
+#   define nh5gn_members_c   FNAME(H5GN_MEMBERS_C)
+#   define nh5glink_c        FNAME(H5GLINK_C)
+#   define nh5glink2_c        FNAME(H5GLINK2_C)
+#   define nh5gunlink_c      FNAME(H5GUNLINK_C)
+#   define nh5gmove_c        FNAME(H5GMOVE_C)
+#   define nh5gmove2_c        FNAME(H5GMOVE2_C)
+#   define nh5gget_linkval_c   FNAME(H5GGET_LINKVAL_C)
+#   define nh5gset_comment_c   FNAME(H5GSET_COMMENT_C)
+#   define nh5gget_comment_c   FNAME(H5GGET_COMMENT_C)
+#else                                              /* !DF_CAPFNAMES */
+#   define nh5gcreate_c      FNAME(h5gcreate_c)
+#   define nh5gclose_c       FNAME(h5gclose_c)
+#   define nh5gopen_c        FNAME(h5gopen_c)
+#   define nh5gget_obj_info_idx_c FNAME(h5gget_obj_info_idx_c)
+#   define nh5gn_members_c   FNAME(h5gn_members_c)
+#   define nh5glink_c        FNAME(h5glink_c)
+#   define nh5glink2_c        FNAME(h5glink2_c)
+#   define nh5gunlink_c      FNAME(h5gunlink_c)
+#   define nh5gmove_c        FNAME(h5gmove_c)
+#   define nh5gmove2_c        FNAME(h5gmove2_c)
+#   define nh5gget_linkval_c   FNAME(h5gget_linkval_c)
+#   define nh5gset_comment_c   FNAME(h5gset_comment_c)
+#   define nh5gget_comment_c   FNAME(h5gget_comment_c)
+#endif                                             /* DF_CAPFNAMES */
+#endif
+
+H5_FCDLL int_f nh5gcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size_hint,  hid_t_f *grp_id);
+H5_FCDLL int_f nh5gopen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *grp_id);
+H5_FCDLL int_f nh5gclose_c ( hid_t_f *grp_id );
+H5_FCDLL int_f nh5gget_obj_info_idx_c (hid_t_f *loc_id, _fcd name, int_f *namelen, int_f *idx, _fcd obj_name, int_f *obj_namelen, int_f *obj_type);
+H5_FCDLL int_f nh5gn_members_c (hid_t_f *loc_id, _fcd name, int_f *namelen, int_f *nmembers);
+H5_FCDLL int_f nh5glink_c (hid_t_f *loc_id, int_f *link_type, _fcd current_name, int_f *current_namelen, _fcd new_name, int_f *new_namelen);
+H5_FCDLL int_f nh5glink2_c (hid_t_f *cur_loc_id, _fcd cur_name, int_f *cur_namelen, int_f *link_type, hid_t_f *new_loc_id, _fcd new_name, int_f *new_namelen);
+H5_FCDLL int_f nh5gunlink_c (hid_t_f *loc_id, _fcd name, int_f *namelen);
+H5_FCDLL int_f nh5gmove_c (hid_t_f *loc_id, _fcd src_name, int_f *src_namelen, _fcd dst_name, int_f *dst_namelen);
+H5_FCDLL int_f nh5gmove2_c (hid_t_f *src_loc_id, _fcd src_name, int_f *src_namelen, hid_t_f *dst_loc_id,_fcd dst_name, int_f *dst_namelen);
+H5_FCDLL int_f nh5gget_linkval_c (hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size, _fcd value );
+H5_FCDLL int_f nh5gset_comment_c (hid_t_f *loc_id, _fcd name, int_f *namelen, _fcd comment, int_f *commentlen);
+H5_FCDLL int_f nh5gget_comment_c (hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *bufsize, _fcd comment);
+
+/*
+ * Functions from H5Af.c
+ */
+#ifndef H5Af90_FNAMES
+#    define H5Af90_FNAMES
+#ifdef DF_CAPFNAMES
+#   define nh5acreate_c      FNAME(H5ACREATE_C)
+#   define nh5aclose_c       FNAME(H5ACLOSE_C)
+#   define nh5aopen_name_c   FNAME(H5AOPEN_NAME_C)
+#   define nh5awrite_c       FNAME(H5AWRITE_C)
+#   define nh5awritec_c      FNAME(H5AWRITEC_C)
+#   define nh5aread_c        FNAME(H5AREAD_C)
+#   define nh5areadc_c       FNAME(H5AREADC_C)
+#   define nh5aget_name_c    FNAME(H5AGET_NAME_C)
+#   define nh5aopen_idx_c    FNAME(H5AOPEN_IDX_C)
+#   define nh5aget_space_c   FNAME(H5AGET_SPACE_C)
+#   define nh5aget_type_c    FNAME(H5AGET_TYPE_C)
+#   define nh5aget_num_attrs_c FNAME(H5AGET_NUM_ATTRS_C)
+#   define nh5adelete_c      FNAME(H5ADELETE_C)
+#else                                              /* !DF_CAPFNAMES */
+#   define nh5acreate_c      FNAME(h5acreate_c)
+#   define nh5aclose_c       FNAME(h5aclose_c)
+#   define nh5aopen_name_c   FNAME(h5aopen_name_c)
+#   define nh5awrite_c       FNAME(h5awrite_c)
+#   define nh5awritec_c      FNAME(h5awritec_c)
+#   define nh5aread_c        FNAME(h5aread_c)
+#   define nh5areadc_c       FNAME(h5areadc_c)
+#   define nh5aget_name_c    FNAME(h5aget_name_c)
+#   define nh5aopen_idx_c    FNAME(h5aopen_idx_c)
+#   define nh5aget_space_c   FNAME(h5aget_space_c)
+#   define nh5aget_type_c    FNAME(h5aget_type_c)
+#   define nh5aget_num_attrs_c FNAME(h5aget_num_attrs_c)
+#   define nh5adelete_c      FNAME(h5adelete_c)
+#endif                                             /* DF_CAPFNAMES */
+#endif
+
+H5_FCDLL 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 *attr_id);
+H5_FCDLL int_f nh5aopen_name_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *attr_id);
+H5_FCDLL int_f nh5awritec_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5awrite_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5areadc_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
+H5_FCDLL int_f nh5aread_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aclose_c ( hid_t_f *attr_id );
+H5_FCDLL int_f nh5adelete_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen);
+H5_FCDLL int_f nh5aopen_idx_c (hid_t_f *obj_id, int_f *idx, hid_t_f *attr_id);
+H5_FCDLL int_f nh5aget_space_c (hid_t_f *attr_id, hid_t_f *space_id);
+H5_FCDLL int_f nh5aget_type_c (hid_t_f *attr_id, hid_t_f *type_id);
+H5_FCDLL int_f nh5aget_num_attrs_c (hid_t_f *obj_id, int_f *attr_num);
+H5_FCDLL int_f nh5aget_name_c(hid_t_f *attr_id, size_t_f *size, _fcd buf);
+
+/*
+ * Functions form H5Tf.c file
+ */
+#ifndef H5Tf90_FNAMES
+#    define H5Tf90_FNAMES
+#ifdef DF_CAPFNAMES
+#   define nh5topen_c         FNAME(H5TOPEN_C)
+#   define nh5tcommit_c       FNAME(H5TCOMMIT_C)
+#   define nh5tcommitted_c    FNAME(H5TCOMMITTED_C)
+#   define nh5tclose_c        FNAME(H5TCLOSE_C)
+#   define nh5tcopy_c         FNAME(H5TCOPY_C)
+#   define nh5tequal_c        FNAME(H5TEQUAL_C)
+#   define nh5tget_class_c    FNAME(H5TGET_CLASS_C)
+#   define nh5tget_order_c    FNAME(H5TGET_ORDER_C)
+#   define nh5tset_order_c    FNAME(H5TSET_ORDER_C)
+#   define nh5tget_size_c     FNAME(H5TGET_SIZE_C)
+#   define nh5tset_size_c     FNAME(H5TSET_SIZE_C)
+#   define nh5tget_precision_c     FNAME(H5TGET_PRECISION_C)
+#   define nh5tset_precision_c     FNAME(H5TSET_PRECISION_C)
+#   define nh5tget_offset_c        FNAME(H5TGET_OFFSET_C)
+#   define nh5tset_offset_c        FNAME(H5TSET_OFFSET_C)
+#   define nh5tget_pad_c        FNAME(H5TGET_PAD_C)
+#   define nh5tset_pad_c        FNAME(H5TSET_PAD_C)
+#   define nh5tget_sign_c       FNAME(H5TGET_SIGN_C)
+#   define nh5tset_sign_c       FNAME(H5TSET_SIGN_C)
+#   define nh5tget_fields_c       FNAME(H5TGET_FIELDS_C)
+#   define nh5tset_fields_c       FNAME(H5TSET_FIELDS_C)
+#   define nh5tget_ebias_c     FNAME(H5TGET_EBIAS_C)
+#   define nh5tset_ebias_c     FNAME(H5TSET_EBIAS_C)
+#   define nh5tget_norm_c     FNAME(H5TGET_NORM_C)
+#   define nh5tset_norm_c     FNAME(H5TSET_NORM_C)
+#   define nh5tget_inpad_c        FNAME(H5TGET_INPAD_C)
+#   define nh5tset_inpad_c        FNAME(H5TSET_INPAD_C)
+#   define nh5tget_cset_c        FNAME(H5TGET_CSET_C)
+#   define nh5tset_cset_c        FNAME(H5TSET_CSET_C)
+#   define nh5tget_strpad_c        FNAME(H5TGET_STRPAD_C)
+#   define nh5tset_strpad_c        FNAME(H5TSET_STRPAD_C)
+#   define nh5tget_nmembers_c        FNAME(H5TGET_NMEMBERS_C)
+#   define nh5tget_member_name_c        FNAME(H5TGET_MEMBER_NAME_C)
+#   define nh5tget_member_offset_c        FNAME(H5TGET_MEMBER_OFFSET_C)
+#   define nh5tget_member_dims_c        FNAME(H5TGET_MEMBER_DIMS_C)
+#   define nh5tget_member_type_c        FNAME(H5TGET_MEMBER_TYPE_C)
+#   define nh5tget_member_index_c        FNAME(H5TGET_MEMBER_INDEX_C)
+#   define nh5tinsert_c        FNAME(H5TINSERT_C)
+#   define nh5tcreate_c        FNAME(H5TCREATE_C)
+#   define nh5tpack_c                   FNAME(H5TPACK_C)
+#   define nh5tinsert_array_c           FNAME(H5TINSERT_ARRAY_C)
+#   define nh5tinsert_array_c2           FNAME(H5TINSERT_ARRAY_C2)
+#   define nh5tenum_create_c             FNAME(H5TENUM_CREATE_C)
+#   define nh5tenum_insert_c             FNAME(H5TENUM_INSERT_C)
+#   define nh5tenum_nameof_c             FNAME(H5TENUM_NAMEOF_C)
+#   define nh5tenum_valueof_c             FNAME(H5TENUM_VALUEOF_C)
+#   define nh5tget_member_value_c         FNAME(H5TGET_MEMBER_VALUE_C)
+#   define nh5tset_tag_c                  FNAME(H5TSET_TAG_C)
+#   define nh5tget_tag_c                  FNAME(H5TGET_TAG_C)
+#   define nh5tarray_create_c             FNAME(H5TARRAY_CREATE_C)
+#   define nh5tget_array_ndims_c          FNAME(H5TGET_ARRAY_NDIMS_C)
+#   define nh5tget_array_dims_c          FNAME(H5TGET_ARRAY_DIMS_C)
+#   define nh5tget_super_c               FNAME(H5TGET_SUPER_C)
+#   define nh5tvlen_create_c               FNAME(H5TVLEN_CREATE_C)
+#   define nh5tis_variable_str_c         FNAME(H5TIS_VARIABLE_STR_C)
+#   define nh5tget_member_class_c         FNAME(H5TGET_MEMBER_CLASS_C)
+#else
+#   define nh5topen_c         FNAME(h5topen_c)
+#   define nh5tcommit_c       FNAME(h5tcommit_c)
+#   define nh5tcommitted_c    FNAME(h5tcommitted_c)
+#   define nh5tclose_c        FNAME(h5tclose_c)
+#   define nh5tcopy_c         FNAME(h5tcopy_c)
+#   define nh5tequal_c        FNAME(h5tequal_c)
+#   define nh5tget_class_c    FNAME(h5tget_class_c)
+#   define nh5tget_order_c    FNAME(h5tget_order_c)
+#   define nh5tset_order_c    FNAME(h5tset_order_c)
+#   define nh5tget_size_c     FNAME(h5tget_size_c)
+#   define nh5tset_size_c     FNAME(h5tset_size_c)
+#   define nh5tget_precision_c     FNAME(h5tget_precision_c)
+#   define nh5tset_precision_c     FNAME(h5tset_precision_c)
+#   define nh5tget_offset_c        FNAME(h5tget_offset_c)
+#   define nh5tset_offset_c        FNAME(h5tset_offset_c)
+#   define nh5tget_pad_c        FNAME(h5tget_pad_c)
+#   define nh5tset_pad_c        FNAME(h5tset_pad_c)
+#   define nh5tget_sign_c       FNAME(h5tget_sign_c)
+#   define nh5tset_sign_c       FNAME(h5tset_sign_c)
+#   define nh5tget_fields_c       FNAME(h5tget_fields_c)
+#   define nh5tset_fields_c       FNAME(h5tset_fields_c)
+#   define nh5tget_ebias_c     FNAME(h5tget_ebias_c)
+#   define nh5tset_ebias_c     FNAME(h5tset_ebias_c)
+#   define nh5tget_norm_c     FNAME(h5tget_norm_c)
+#   define nh5tset_norm_c     FNAME(h5tset_norm_c)
+#   define nh5tget_inpad_c        FNAME(h5tget_inpad_c)
+#   define nh5tset_inpad_c        FNAME(h5tset_inpad_c)
+#   define nh5tget_cset_c        FNAME(h5tget_cset_c)
+#   define nh5tset_cset_c        FNAME(h5tset_cset_c)
+#   define nh5tget_strpad_c        FNAME(h5tget_strpad_c)
+#   define nh5tset_strpad_c        FNAME(h5tset_strpad_c)
+#   define nh5tget_nmembers_c        FNAME(h5tget_nmembers_c)
+#   define nh5tget_member_name_c        FNAME(h5tget_member_name_c)
+#   define nh5tget_member_offset_c        FNAME(h5tget_member_offset_c)
+#   define nh5tget_member_dims_c        FNAME(h5tget_member_dims_c)
+#   define nh5tget_member_type_c        FNAME(h5tget_member_type_c)
+#   define nh5tget_member_index_c        FNAME(h5tget_member_index_c)
+#   define nh5tinsert_c                 FNAME(h5tinsert_c)
+#   define nh5tcreate_c        FNAME(h5tcreate_c)
+#   define nh5tpack_c                   FNAME(h5tpack_c)
+#   define nh5tinsert_array_c           FNAME(h5tinsert_array_c)
+#   define nh5tinsert_array_c2           FNAME(h5tinsert_array_c2)
+#   define nh5tenum_create_c             FNAME(h5tenum_create_c)
+#   define nh5tenum_insert_c             FNAME(h5tenum_insert_c)
+#   define nh5tenum_nameof_c             FNAME(h5tenum_nameof_c)
+#   define nh5tenum_valueof_c             FNAME(h5tenum_valueof_c)
+#   define nh5tget_member_value_c             FNAME(h5tget_member_value_c)
+#   define nh5tset_tag_c                  FNAME(h5tset_tag_c)
+#   define nh5tget_tag_c                  FNAME(h5tget_tag_c)
+#   define nh5tarray_create_c             FNAME(h5tarray_create_c)
+#   define nh5tget_array_ndims_c          FNAME(h5tget_array_ndims_c)
+#   define nh5tget_array_dims_c          FNAME(h5tget_array_dims_c)
+#   define nh5tget_super_c               FNAME(h5tget_super_c)
+#   define nh5tvlen_create_c               FNAME(h5tvlen_create_c)
+#   define nh5tis_variable_str_c         FNAME(h5tis_variable_str_c)
+#   define nh5tget_member_class_c         FNAME(h5tget_member_class_c)
+#endif
+#endif
+
+H5_FCDLL int_f nh5tcreate_c(int_f *class, size_t_f *size, hid_t_f *type_id);
+H5_FCDLL int_f nh5topen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id);
+H5_FCDLL int_f nh5tcommit_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id);
+H5_FCDLL int_f nh5tclose_c ( hid_t_f *type_id );
+H5_FCDLL int_f nh5tequal_c ( hid_t_f *type1_id , hid_t_f *type2_id, int_f *c_flag);
+H5_FCDLL int_f nh5tcopy_c ( hid_t_f *type_id , hid_t_f *new_type_id);
+H5_FCDLL int_f nh5tget_class_c ( hid_t_f *type_id , int_f *classtype);
+H5_FCDLL int_f nh5tget_order_c ( hid_t_f *type_id , int_f *order);
+H5_FCDLL int_f nh5tset_order_c ( hid_t_f *type_id , int_f *order);
+H5_FCDLL int_f nh5tget_size_c ( hid_t_f *type_id , size_t_f *size);
+H5_FCDLL int_f nh5tset_size_c ( hid_t_f *type_id , size_t_f *size);
+H5_FCDLL int_f nh5tcommitted_c (hid_t_f *type_id);
+H5_FCDLL int_f nh5tget_precision_c ( hid_t_f *type_id , size_t_f *precision);
+H5_FCDLL int_f nh5tset_precision_c ( hid_t_f *type_id , size_t_f *precision);
+H5_FCDLL int_f nh5tget_offset_c ( hid_t_f *type_id , size_t_f *offset);
+H5_FCDLL int_f nh5tset_offset_c ( hid_t_f *type_id , size_t_f *offset);
+H5_FCDLL int_f nh5tget_pad_c ( hid_t_f *type_id , int_f * lsbpad, int_f * msbpad);
+H5_FCDLL int_f nh5tset_pad_c ( hid_t_f *type_id, int_f * lsbpad, int_f * msbpad );
+H5_FCDLL int_f nh5tget_sign_c ( hid_t_f *type_id , int_f* sign);
+H5_FCDLL int_f nh5tset_sign_c ( hid_t_f *type_id , int_f *sign);
+H5_FCDLL int_f nh5tget_fields_c ( hid_t_f *type_id, size_t_f *spos, size_t_f *epos, size_t_f* esize, size_t_f* mpos, size_t_f* msize);
+H5_FCDLL int_f nh5tset_fields_c ( hid_t_f *type_id, size_t_f *spos, size_t_f *epos, size_t_f* esize, size_t_f* mpos, size_t_f* msize);
+H5_FCDLL int_f nh5tget_ebias_c ( hid_t_f *type_id , size_t_f *ebias);
+H5_FCDLL int_f nh5tset_ebias_c ( hid_t_f *type_id , size_t_f *ebias);
+H5_FCDLL int_f nh5tget_norm_c ( hid_t_f *type_id , int_f *norm);
+H5_FCDLL int_f nh5tset_norm_c ( hid_t_f *type_id , int_f *norm);
+H5_FCDLL int_f nh5tget_inpad_c ( hid_t_f *type_id, int_f * padtype);
+H5_FCDLL int_f nh5tset_inpad_c ( hid_t_f *type_id, int_f * padtype);
+H5_FCDLL int_f nh5tget_cset_c ( hid_t_f *type_id, int_f * cset);
+H5_FCDLL int_f nh5tset_cset_c ( hid_t_f *type_id, int_f * cset);
+H5_FCDLL int_f nh5tget_strpad_c ( hid_t_f *type_id, int_f * strpad);
+H5_FCDLL int_f nh5tset_strpad_c ( hid_t_f *type_id, int_f * strpad);
+H5_FCDLL int_f nh5tget_nmembers_c ( hid_t_f *type_id , int_f * num_members);
+H5_FCDLL int_f nh5tget_member_name_c ( hid_t_f *type_id ,int_f* idx, _fcd member_name, int_f *namelen);
+H5_FCDLL int_f nh5tget_member_dims_c ( hid_t_f *type_id ,int_f* field_idx, int_f * dims, size_t_f * field_dims, int_f * perm );
+H5_FCDLL int_f nh5tget_member_offset_c ( hid_t_f *type_id ,int_f* member_no, size_t_f* offset);
+H5_FCDLL int_f nh5tget_member_type_c ( hid_t_f *type_id ,int_f* field_idx, hid_t_f * datatype);
+H5_FCDLL int_f nh5tget_member_index_c ( hid_t_f *type_id ,_fcd name, int_f* namelen, int_f *idx);
+H5_FCDLL int_f nh5tinsert_c(hid_t_f *type_id, _fcd name, int_f* namelen, size_t_f *offset, hid_t_f * field_id);
+H5_FCDLL int_f nh5tpack_c(hid_t_f * type_id);
+H5_FCDLL int_f nh5tinsert_array_c(hid_t_f * parent_id, _fcd name, int_f* namelen, size_t_f* offset, int_f* ndims, size_t_f* dims, hid_t_f* member_id, int_f* perm );
+H5_FCDLL int_f nh5tinsert_array_c2(hid_t_f * parent_id, _fcd name, int_f* namelen, size_t_f* offset, int_f* ndims, size_t_f* dims, hid_t_f* member_id);
+H5_FCDLL int_f nh5tenum_create_c ( hid_t_f *parent_id , hid_t_f *new_type_id);
+H5_FCDLL int_f nh5tenum_insert_c(hid_t_f *type_id, _fcd name, int_f* namelen, int_f* value);
+H5_FCDLL int_f nh5tenum_nameof_c(hid_t_f *type_id, int_f* value, _fcd name, size_t_f* namelen);
+H5_FCDLL int_f nh5tenum_valueof_c(hid_t_f *type_id, _fcd name, int_f* namelen, int_f* value);
+H5_FCDLL int_f nh5tget_member_value_c(hid_t_f *type_id, int_f* member_no, int_f* value);
+H5_FCDLL int_f nh5tset_tag_c(hid_t_f* type_id, _fcd tag, int_f* namelen);
+H5_FCDLL int_f nh5tget_tag_c(hid_t_f* type_id, _fcd tag, int_f* namelen);
+H5_FCDLL int_f nh5tarray_create_c(hid_t_f * base_id, int_f *rank, hsize_t_f* dims, hid_t_f* type_id);
+H5_FCDLL int_f nh5tget_array_dims_c ( hid_t_f *type_id , hsize_t_f * dims);
+H5_FCDLL int_f nh5tget_array_ndims_c ( hid_t_f *type_id , int_f * ndims);
+H5_FCDLL int_f nh5tget_super_c ( hid_t_f *type_id , hid_t_f *base_type_id);
+H5_FCDLL int_f nh5tvlen_create_c ( hid_t_f *type_id , hid_t_f *vltype_id);
+H5_FCDLL int_f nh5tis_variable_str_c ( hid_t_f *type_id , int_f *flag );
+H5_FCDLL int_f nh5tget_member_class_c ( hid_t_f *type_id ,  int_f *member_no, int_f *class );
+
+/*
+ * Functions from H5Pf.c
+ */
+#ifndef H5Pf90_FNAMES
+#    define H5Pf90_FNAMES
+#ifdef DF_CAPFNAMES
+#   define nh5pcreate_c       FNAME(H5PCREATE_C)
+#   define nh5pclose_c        FNAME(H5PCLOSE_C)
+#   define nh5pcopy_c         FNAME(H5PCOPY_C)
+#   define nh5pequal_c         FNAME(H5PEQUAL_C)
+#   define nh5pget_class_c    FNAME(H5PGET_CLASS_C)
+#   define nh5pset_deflate_c  FNAME(H5PSET_DEFLATE_C)
+#   define nh5pset_preserve_c  FNAME(H5PSET_PRESERVE_C)
+#   define nh5pget_preserve_c  FNAME(H5PGET_PRESERVE_C)
+#   define nh5pset_chunk_c    FNAME(H5PSET_CHUNK_C)
+#   define nh5pget_chunk_c    FNAME(H5PGET_CHUNK_C)
+#   define nh5pset_fill_valuec_c FNAME(H5PSET_FILL_VALUEC_C)
+#   define nh5pset_fill_value_c FNAME(H5PSET_FILL_VALUE_C)
+#   define nh5pget_fill_valuec_c FNAME(H5PGET_FILL_VALUEC_C)
+#   define nh5pget_fill_value_c FNAME(H5PGET_FILL_VALUE_C)
+#   define nh5pget_version_c    FNAME(H5PGET_VERSION_C)
+#   define nh5pget_userblock_c    FNAME(H5PGET_USERBLOCK_C)
+#   define nh5pset_userblock_c    FNAME(H5PSET_USERBLOCK_C)
+#   define nh5pset_sizes_c        FNAME(H5PSET_SIZES_C)
+#   define nh5pget_sizes_c         FNAME(H5PGET_SIZES_C)
+#   define nh5pget_sym_k_c         FNAME(H5PGET_SYM_K_C)
+#   define nh5pset_sym_k_c         FNAME(H5PSET_SYM_K_C)
+#   define nh5pget_istore_k_c         FNAME(H5PGET_ISTORE_K_C)
+#   define nh5pset_istore_k_c         FNAME(H5PSET_ISTORE_K_C)
+#   define nh5pget_driver_c         FNAME(H5PGET_DRIVER_C)
+#   define nh5pset_fapl_stdio_c         FNAME(H5PSET_FAPL_STDIO_C)
+#   define nh5pget_fapl_stdio_c         FNAME(H5PGET_FAPL_STDIO_C)
+#   define nh5pset_fapl_sec2_c         FNAME(H5PSET_FAPL_SEC2_C)
+#   define nh5pget_fapl_sec2_c         FNAME(H5PGET_FAPL_SEC2_C)
+#   define nh5pset_alignment_c         FNAME(H5PSET_ALIGNMENT_C)
+#   define nh5pget_alignment_c         FNAME(H5PGET_ALIGNMENT_C)
+#   define nh5pset_fapl_core_c         FNAME(H5PSET_FAPL_CORE_C)
+#   define nh5pget_fapl_core_c         FNAME(H5PGET_FAPL_CORE_C)
+#   define nh5pset_fapl_family_c         FNAME(H5PSET_FAPL_FAMILY_C)
+#   define nh5pget_fapl_family_c         FNAME(H5PGET_FAPL_FAMILY_C)
+#   define nh5pset_cache_c         FNAME(H5PSET_CACHE_C)
+#   define nh5pget_cache_c         FNAME(H5PGET_CACHE_C)
+#   define nh5pset_fapl_split_c         FNAME(H5PSET_FAPL_SPLIT_C)
+#   define nh5pget_fapl_split_c         FNAME(H5PGET_FAPL_SPLIT_C)
+#   define nh5pset_gc_references_c         FNAME(H5PSET_GC_REFERENCES_C)
+#   define nh5pget_gc_references_c         FNAME(H5PGET_GC_REFERENCES_C)
+#   define nh5pset_layout_c         FNAME(H5PSET_LAYOUT_C)
+#   define nh5pget_layout_c         FNAME(H5PGET_LAYOUT_C)
+#   define nh5pset_filter_c         FNAME(H5PSET_FILTER_C)
+#   define nh5premove_filter_c         FNAME(H5PREMOVE_FILTER_C)
+#   define nh5pmodify_filter_c         FNAME(H5PMODIFY_FILTER_C)
+#   define nh5pget_nfilters_c         FNAME(H5PGET_NFILTERS_C)
+#   define nh5pget_filter_c         FNAME(H5PGET_FILTER_C)
+#   define nh5pget_filter_by_id_c         FNAME(H5PGET_FILTER_BY_ID_C)
+#   define nh5pset_external_c         FNAME(H5PSET_EXTERNAL_C)
+#   define nh5pget_external_count_c         FNAME(H5PGET_EXTERNAL_COUNT_C)
+#   define nh5pget_external_c         FNAME(H5PGET_EXTERNAL_C)
+#   define nh5pset_hyper_cache_c         FNAME(H5PSET_HYPER_CACHE_C)
+#   define nh5pget_hyper_cache_c         FNAME(H5PGET_HYPER_CACHE_C)
+#   define nh5pget_btree_ratios_c         FNAME(H5PGET_BTREE_RATIOS_C)
+#   define nh5pset_btree_ratios_c         FNAME(H5PSET_BTREE_RATIOS_C)
+#   define nh5pset_fapl_mpio_c         FNAME(H5PSET_FAPL_MPIO_C)
+#   define nh5pget_fapl_mpio_c         FNAME(H5PGET_FAPL_MPIO_C)
+#   define nh5pset_fapl_mpiposix_c     FNAME(H5PSET_FAPL_MPIPOSIX_C)
+#   define nh5pget_fapl_mpiposix_c     FNAME(H5PGET_FAPL_MPIPOSIX_C)
+#   define nh5pset_dxpl_mpio_c        FNAME(H5PSET_DXPL_MPIO_C)
+#   define nh5pget_dxpl_mpio_c        FNAME(H5PGET_DXPL_MPIO_C)
+#   define nh5pget_fclose_degree_c    FNAME(H5PGET_FCLOSE_DEGREE_C)
+#   define nh5pset_fclose_degree_c    FNAME(H5PSET_FCLOSE_DEGREE_C)
+#   define nh5pset_buffer_c    FNAME(H5PSET_BUFFER_C)
+#   define nh5pget_buffer_c    FNAME(H5PGET_BUFFER_C)
+#   define nh5pfill_value_defined_c    FNAME(H5PFILL_VALUE_DEFINED_C)
+#   define nh5pset_alloc_time_c    FNAME(H5PSET_ALLOC_TIME_C)
+#   define nh5pget_alloc_time_c    FNAME(H5PGET_ALLOC_TIME_C)
+#   define nh5pset_fill_time_c    FNAME(H5PSET_FILL_TIME_C)
+#   define nh5pget_fill_time_c    FNAME(H5PGET_FILL_TIME_C)
+#   define nh5pset_meta_block_size_c    FNAME(H5PSET_META_BLOCK_SIZE_C)
+#   define nh5pget_meta_block_size_c    FNAME(H5PGET_META_BLOCK_SIZE_C)
+#   define nh5pset_sieve_buf_size_c    FNAME(H5PSET_SIEVE_BUF_SIZE_C)
+#   define nh5pget_sieve_buf_size_c    FNAME(H5PGET_SIEVE_BUF_SIZE_C)
+#   define nh5pset_hyper_vector_size_c    FNAME(H5PSET_HYPER_VECTOR_SIZE_C)
+#   define nh5pget_hyper_vector_size_c    FNAME(H5PGET_HYPER_VECTOR_SIZE_C)
+#   define nh5pset_small_data_block_size_c    FNAME(H5PSET_SMALL_DATA_BLOCK_SIZE_C)
+#   define nh5pget_small_data_block_size_c    FNAME(H5PGET_SMALL_DATA_BLOCK_SIZE_C)
+#   define nh5pcreate_class_c             FNAME(H5PCREATE_CLASS_C)
+#   define nh5pregister_c                 FNAME(H5PREGISTER_C)
+#   define nh5pregisterc_c                FNAME(H5PREGISTERC_C)
+#   define nh5pinsert_c                   FNAME(H5PINSERT_C)
+#   define nh5pinsertc_c                  FNAME(H5PINSERTC_C)
+#   define nh5pset_c                      FNAME(H5PSET_C)
+#   define nh5psetc_c                     FNAME(H5PSETC_C)
+#   define nh5pget_c                      FNAME(H5PGET_C)
+#   define nh5pgetc_c                     FNAME(H5PGETC_C)
+#   define nh5pexist_c                    FNAME(H5PEXIST_C)
+#   define nh5pget_size_c                 FNAME(H5PGET_SIZE_C)
+#   define nh5pget_nprops_c               FNAME(H5PGET_NPROPS_C)
+#   define nh5pget_class_parent_c         FNAME(H5PGET_CLASS_PARENT_C)
+#   define nh5pisa_class_c                FNAME(H5PISA_CLASS_C)
+#   define nh5pcopy_prop_c                FNAME(H5PCOPY_PROP_C)
+#   define nh5premove_c                   FNAME(H5PREMOVE_C)
+#   define nh5punregister_c               FNAME(H5PUNREGISTER_C)
+#   define nh5pclose_class_c              FNAME(H5PCLOSE_CLASS_C)
+#   define nh5pget_class_name_c           FNAME(H5PGET_CLASS_NAME_C)
+#   define nh5pset_shuffle_c               FNAME(H5PSET_SHUFFLE_C)
+#   define nh5pset_fletcher32_c           FNAME(H5PSET_FLETCHER32_C)
+#   define nh5pset_edc_check_c            FNAME(H5PSET_EDC_CHECK_C)
+#   define nh5pget_edc_check_c            FNAME(H5PGET_EDC_CHECK_C)
+#   define nh5pset_family_offset_c       FNAME(H5PSET_FAMILY_OFFSET_C)
+#   define nh5pget_fapl_multi_c          FNAME(H5PGET_FAPL_MULTI_C)
+#   define nh5pset_fapl_multi_c          FNAME(H5PSET_FAPL_MULTI_C)
+#   define nh5pset_fapl_multi_sc          FNAME(H5PSET_FAPL_MULTI_SC)
+#   define nh5pset_szip_c                 FNAME(H5PSET_SZIP_C)
+#   define nh5pall_filters_avail_c        FNAME(H5PALL_FILTERS_AVAIL_C)
+
+#else
+#   define nh5pcreate_c       FNAME(h5pcreate_c)
+#   define nh5pclose_c        FNAME(h5pclose_c)
+#   define nh5pcopy_c         FNAME(h5pcopy_c)
+#   define nh5pequal_c         FNAME(h5pequal_c)
+#   define nh5pget_class_c    FNAME(h5pget_class_c)
+#   define nh5pset_deflate_c  FNAME(h5pset_deflate_c)
+#   define nh5pset_preserve_c  FNAME(h5pset_preserve_c)
+#   define nh5pget_preserve_c  FNAME(h5pget_preserve_c)
+#   define nh5pset_chunk_c    FNAME(h5pset_chunk_c)
+#   define nh5pget_chunk_c    FNAME(h5pget_chunk_c)
+#   define nh5pset_fill_valuec_c FNAME(h5pset_fill_valuec_c)
+#   define nh5pset_fill_value_c FNAME(h5pset_fill_value_c)
+#   define nh5pget_fill_valuec_c FNAME(h5pget_fill_valuec_c)
+#   define nh5pget_fill_value_c FNAME(h5pget_fill_value_c)
+#   define nh5pget_version_c    FNAME(h5pget_version_c)
+#   define nh5pget_userblock_c    FNAME(h5pget_userblock_c)
+#   define nh5pset_userblock_c    FNAME(h5pset_userblock_c)
+#   define nh5pset_sizes_c        FNAME(h5pset_sizes_c)
+#   define nh5pget_sizes_c         FNAME(h5pget_sizes_c)
+#   define nh5pget_sym_k_c         FNAME(h5pget_sym_k_c)
+#   define nh5pset_sym_k_c         FNAME(h5pset_sym_k_c)
+#   define nh5pget_istore_k_c         FNAME(h5pget_istore_k_c)
+#   define nh5pset_istore_k_c         FNAME(h5pset_istore_k_c)
+#   define nh5pget_driver_c         FNAME(h5pget_driver_c)
+#   define nh5pset_fapl_stdio_c         FNAME(h5pset_fapl_stdio_c)
+#   define nh5pget_fapl_stdio_c         FNAME(h5pget_fapl_stdio_c)
+#   define nh5pset_fapl_sec2_c         FNAME(h5pset_fapl_sec2_c)
+#   define nh5pget_fapl_sec2_c         FNAME(h5pget_fapl_sec2_c)
+#   define nh5pset_alignment_c         FNAME(h5pset_alignment_c)
+#   define nh5pget_alignment_c         FNAME(h5pget_alignment_c)
+#   define nh5pset_fapl_core_c         FNAME(h5pset_fapl_core_c)
+#   define nh5pget_fapl_core_c         FNAME(h5pget_fapl_core_c)
+#   define nh5pset_fapl_family_c         FNAME(h5pset_fapl_family_c)
+#   define nh5pget_fapl_family_c         FNAME(h5pget_fapl_family_c)
+#   define nh5pset_cache_c         FNAME(h5pset_cache_c)
+#   define nh5pget_cache_c         FNAME(h5pget_cache_c)
+#   define nh5pset_fapl_split_c         FNAME(h5pset_fapl_split_c)
+#   define nh5pget_fapl_split_c         FNAME(h5pget_fapl_split_c)
+#   define nh5pset_gc_references_c         FNAME(h5pset_gc_references_c)
+#   define nh5pget_gc_references_c         FNAME(h5pget_gc_references_c)
+#   define nh5pset_layout_c         FNAME(h5pset_layout_c)
+#   define nh5pget_layout_c         FNAME(h5pget_layout_c)
+#   define nh5pset_filter_c         FNAME(h5pset_filter_c)
+#   define nh5premove_filter_c         FNAME(h5premove_filter_c)
+#   define nh5pmodify_filter_c         FNAME(h5pmodify_filter_c)
+#   define nh5pget_nfilters_c         FNAME(h5pget_nfilters_c)
+#   define nh5pget_filter_c         FNAME(h5pget_filter_c)
+#   define nh5pget_filter_by_id_c         FNAME(h5pget_filter_by_id_c)
+#   define nh5pset_external_c         FNAME(h5pset_external_c)
+#   define nh5pget_external_count_c         FNAME(h5pget_external_count_c)
+#   define nh5pget_external_c         FNAME(h5pget_external_c)
+#   define nh5pset_hyper_cache_c         FNAME(h5pset_hyper_cache_c)
+#   define nh5pget_hyper_cache_c         FNAME(h5pget_hyper_cache_c)
+#   define nh5pget_btree_ratios_c         FNAME(h5pget_btree_ratios_c)
+#   define nh5pset_btree_ratios_c         FNAME(h5pset_btree_ratios_c)
+#   define nh5pset_fapl_mpio_c         FNAME(h5pset_fapl_mpio_c)
+#   define nh5pget_fapl_mpio_c         FNAME(h5pget_fapl_mpio_c)
+#   define nh5pset_fapl_mpiposix_c     FNAME(h5pset_fapl_mpiposix_c)
+#   define nh5pget_fapl_mpiposix_c     FNAME(h5pget_fapl_mpiposix_c)
+#   define nh5pset_dxpl_mpio_c        FNAME(h5pset_dxpl_mpio_c)
+#   define nh5pget_dxpl_mpio_c        FNAME(h5pget_dxpl_mpio_c)
+#   define nh5pget_fclose_degree_c    FNAME(h5pget_fclose_degree_c)
+#   define nh5pset_fclose_degree_c    FNAME(h5pset_fclose_degree_c)
+#   define nh5pset_buffer_c    FNAME(h5pset_buffer_c)
+#   define nh5pget_buffer_c    FNAME(h5pget_buffer_c)
+#   define nh5pfill_value_defined_c    FNAME(h5pfill_value_defined_c)
+#   define nh5pset_alloc_time_c    FNAME(h5pset_alloc_time_c)
+#   define nh5pget_alloc_time_c    FNAME(h5pget_alloc_time_c)
+#   define nh5pset_fill_time_c    FNAME(h5pset_fill_time_c)
+#   define nh5pget_fill_time_c    FNAME(h5pget_fill_time_c)
+#   define nh5pset_meta_block_size_c    FNAME(h5pset_meta_block_size_c)
+#   define nh5pget_meta_block_size_c    FNAME(h5pget_meta_block_size_c)
+#   define nh5pset_sieve_buf_size_c    FNAME(h5pset_sieve_buf_size_c)
+#   define nh5pget_sieve_buf_size_c    FNAME(h5pget_sieve_buf_size_c)
+#   define nh5pset_hyper_vector_size_c    FNAME(h5pset_hyper_vector_size_c)
+#   define nh5pget_hyper_vector_size_c    FNAME(h5pget_hyper_vector_size_c)
+#   define nh5pset_small_data_block_size_c    FNAME(h5pset_small_data_block_size_c)
+#   define nh5pget_small_data_block_size_c    FNAME(h5pget_small_data_block_size_c)
+#   define nh5pcreate_class_c             FNAME(h5pcreate_class_c)
+#   define nh5pregister_c                 FNAME(h5pregister_c)
+#   define nh5pregisterc_c                FNAME(h5pregisterc_c)
+#   define nh5pinsert_c                   FNAME(h5pinsert_c)
+#   define nh5pinsertc_c                  FNAME(h5pinsertc_c)
+#   define nh5pset_c                      FNAME(h5pset_c)
+#   define nh5psetc_c                     FNAME(h5psetc_c)
+#   define nh5pget_c                      FNAME(h5pget_c)
+#   define nh5pgetc_c                     FNAME(h5pgetc_c)
+#   define nh5pexist_c                    FNAME(h5pexist_c)
+#   define nh5pget_size_c                 FNAME(h5pget_size_c)
+#   define nh5pget_nprops_c               FNAME(h5pget_nprops_c)
+#   define nh5pget_class_parent_c         FNAME(h5pget_class_parent_c)
+#   define nh5pisa_class_c                FNAME(h5pisa_class_c)
+#   define nh5pcopy_prop_c                FNAME(h5pcopy_prop_c)
+#   define nh5premove_c                   FNAME(h5premove_c)
+#   define nh5punregister_c               FNAME(h5punregister_c)
+#   define nh5pclose_class_c              FNAME(h5pclose_class_c)
+#   define nh5pget_class_name_c           FNAME(h5pget_class_name_c)
+#   define nh5pset_shuffle_c               FNAME(h5pset_shuffle_c)
+#   define nh5pset_fletcher32_c           FNAME(h5pset_fletcher32_c)
+#   define nh5pset_edc_check_c            FNAME(h5pset_edc_check_c)
+#   define nh5pget_edc_check_c            FNAME(h5pget_edc_check_c)
+#   define nh5pset_family_offset_c       FNAME(h5pset_family_offset_c)
+#   define nh5pget_fapl_multi_c          FNAME(h5pget_fapl_multi_c)
+#   define nh5pset_fapl_multi_c          FNAME(h5pset_fapl_multi_c)
+#   define nh5pset_fapl_multi_sc          FNAME(h5pset_fapl_multi_sc)
+#   define nh5pset_szip_c                 FNAME(h5pset_szip_c)
+#   define nh5pall_filters_avail_c        FNAME(h5pall_filters_avail_c)
+#endif
+#endif
+
+H5_FCDLL int_f nh5pcreate_c ( hid_t_f *class, hid_t_f *prp_id );
+H5_FCDLL int_f nh5pclose_c ( hid_t_f *prp_id );
+H5_FCDLL int_f nh5pcopy_c ( hid_t_f *prp_id , hid_t_f *new_prp_id);
+H5_FCDLL int_f nh5pequal_c ( hid_t_f *plist1_id , hid_t_f *plist2_id, int_f *c_flag);
+H5_FCDLL int_f nh5pget_class_c ( hid_t_f *prp_id , int_f *classtype);
+H5_FCDLL int_f nh5pset_deflate_c ( hid_t_f *prp_id , int_f *level);
+H5_FCDLL int_f nh5pset_chunk_c ( hid_t_f *prp_id, int_f *rank, hsize_t_f *dims );
+H5_FCDLL int_f nh5pget_chunk_c ( hid_t_f *prp_id, int_f *max_rank, hsize_t_f *dims );
+H5_FCDLL int_f nh5pset_fill_valuec_c (hid_t_f *prp_id, hid_t_f *type_id, _fcd fillvalue);
+H5_FCDLL int_f nh5pset_fill_value_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue);
+H5_FCDLL int_f nh5pget_fill_valuec_c (hid_t_f *prp_id, hid_t_f *type_id, _fcd fillvalue);
+H5_FCDLL int_f nh5pget_fill_value_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue);
+H5_FCDLL int_f nh5pset_preserve_c ( hid_t_f *prp_id , int_f *flag);
+H5_FCDLL int_f nh5pget_preserve_c ( hid_t_f *prp_id , int_f *flag);
+H5_FCDLL int_f nh5pget_version_c (hid_t_f *prp_id, int_f * boot,int_f * freelist, int_f * stab, int_f *shhdr);
+H5_FCDLL int_f nh5pset_userblock_c (hid_t_f *prp_id, hsize_t_f * size);
+H5_FCDLL int_f nh5pget_userblock_c (hid_t_f *prp_id, hsize_t_f * size);
+H5_FCDLL int_f nh5pget_sizes_c (hid_t_f *prp_id, size_t_f * sizeof_addr, size_t_f * sizeof_size);
+H5_FCDLL int_f nh5pset_sizes_c (hid_t_f *prp_id, size_t_f * sizeof_addr, size_t_f * sizeof_size);
+H5_FCDLL int_f nh5pset_sym_k_c (hid_t_f *prp_id, int_f* ik, int_f* lk);
+H5_FCDLL int_f nh5pget_sym_k_c (hid_t_f *prp_id, int_f* ik, int_f* lk);
+H5_FCDLL int_f nh5pset_istore_k_c (hid_t_f *prp_id, int_f* ik);
+H5_FCDLL int_f nh5pget_istore_k_c (hid_t_f *prp_id, int_f* ik);
+H5_FCDLL int_f nh5pget_driver_c (hid_t_f *prp_id, hid_t_f*driver);
+H5_FCDLL int_f nh5pset_fapl_stdio_c (hid_t_f *prp_id);
+H5_FCDLL int_f nh5pget_fapl_stdio_c (hid_t_f *prp_id, int_f* io);
+H5_FCDLL int_f nh5pset_fapl_sec2_c (hid_t_f *prp_id);
+H5_FCDLL int_f nh5pget_fapl_sec2_c (hid_t_f *prp_id, int_f* sec2);
+H5_FCDLL int_f nh5pset_alignment_c(hid_t_f *prp_id, hsize_t_f* threshold, hsize_t_f* alignment);
+H5_FCDLL int_f nh5pget_alignment_c(hid_t_f *prp_id, hsize_t_f* threshold, hsize_t_f* alignment);
+H5_FCDLL int_f nh5pget_fapl_core_c (hid_t_f *prp_id, size_t_f* increment, int_f *flag);
+H5_FCDLL int_f nh5pset_fapl_core_c (hid_t_f *prp_id, size_t_f* increment, int_f *flag);
+H5_FCDLL int_f nh5pset_fapl_family_c (hid_t_f *prp_id, hsize_t_f* memb_size, hid_t_f* memb_plist );
+H5_FCDLL int_f nh5pget_fapl_family_c (hid_t_f *prp_id, hsize_t_f* memb_size, hid_t_f* memb_plist );
+H5_FCDLL int_f nh5pset_cache_c(hid_t_f *prp_id, int_f* mdc_nelmts, size_t_f* rdcc_nelmts, size_t_f* rdcc_nbytes, real_f* rdcc_w0);
+H5_FCDLL int_f nh5pget_cache_c(hid_t_f *prp_id, int_f* mdc_nelmts, size_t_f* rdcc_nelmts, size_t_f* rdcc_nbytes, real_f* rdcc_w0);
+H5_FCDLL int_f nh5pget_fapl_split_c(hid_t_f *prp_id, size_t_f* meta_ext_size , _fcd meta_ext, hid_t_f* meta_plist, size_t_f* raw_ext_size, _fcd raw_ext, hid_t_f * raw_plist);
+H5_FCDLL int_f nh5pset_fapl_split_c(hid_t_f *prp_id, int_f* meta_len, _fcd meta_ext, hid_t_f* meta_plist, int_f* raw_len, _fcd raw_ext, hid_t_f * raw_plist);
+H5_FCDLL int_f nh5pset_gc_references_c(hid_t_f *prp_id, int_f* gc_references);
+H5_FCDLL int_f nh5pget_gc_references_c(hid_t_f *prp_id, int_f* gc_references);
+H5_FCDLL int_f nh5pset_layout_c (hid_t_f *prp_id, int_f* layout);
+H5_FCDLL int_f nh5pget_layout_c (hid_t_f *prp_id, int_f* layout);
+H5_FCDLL int_f nh5pset_filter_c (hid_t_f *prp_id, int_f* filter, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values );
+H5_FCDLL int_f nh5premove_filter_c (hid_t_f *prp_id, int_f* filter);
+H5_FCDLL int_f nh5pmodify_filter_c (hid_t_f *prp_id, int_f* filter, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values );
+H5_FCDLL int_f nh5pget_nfilters_c (hid_t_f *prp_id, int_f* nfilters);
+H5_FCDLL int_f nh5pget_filter_c(hid_t_f *prp_id, int_f* filter_number, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values, size_t_f *namelen, _fcd name, int_f* filter_id);
+H5_FCDLL int_f nh5pget_filter_by_id_c(hid_t_f *prp_id, int_f* filter_id, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values, size_t_f *namelen, _fcd name);
+H5_FCDLL int_f nh5pset_external_c (hid_t_f *prp_id, _fcd name, int_f* namelen, int_f* offset, hsize_t_f*bytes);
+H5_FCDLL int_f nh5pget_external_count_c (hid_t_f *prp_id, int_f* count);
+H5_FCDLL int_f nh5pget_external_c(hid_t_f *prp_id, int_f *idx, size_t_f* name_size, _fcd name, int_f* offset, hsize_t_f*bytes);
+H5_FCDLL int_f nh5pset_hyper_cache_c(hid_t_f *prp_id, int_f* cache, int_f* limit);
+H5_FCDLL int_f nh5pget_hyper_cache_c(hid_t_f *prp_id, int_f* cache, int_f* limit);
+H5_FCDLL int_f nh5pget_btree_ratios_c(hid_t_f *prp_id, real_f* left, real_f* middle, real_f* right);
+H5_FCDLL int_f nh5pset_btree_ratios_c(hid_t_f *prp_id, real_f* left, real_f* middle, real_f* right);
+H5_FCDLL int_f nh5pget_fapl_mpio_c(hid_t_f *prp_id, int_f* comm, int_f* info);
+H5_FCDLL int_f nh5pset_fapl_mpio_c(hid_t_f *prp_id, int_f* comm, int_f* info);
+H5_FCDLL int_f nh5pget_fapl_mpiposix_c(hid_t_f *prp_id, int_f* comm, int_f* flag);
+H5_FCDLL int_f nh5pset_fapl_mpiposix_c(hid_t_f *prp_id, int_f* comm, int_f* flag);
+H5_FCDLL int_f nh5pget_dxpl_mpio_rc(hid_t_f *prp_id, int_f* data_xfer_mode);
+H5_FCDLL int_f nh5pset_dxpl_mpio_c(hid_t_f *prp_id, int_f* data_xfer_mode);
+H5_FCDLL int_f nh5pset_fclose_degree_c(hid_t_f *fapl, int_f *degree);
+H5_FCDLL int_f nh5pget_fclose_degree_c(hid_t_f *fapl, int_f *degree);
+H5_FCDLL int_f nh5pget_buffer_c(hid_t_f *plist, hsize_t_f *size);
+H5_FCDLL int_f nh5pset_buffer_c(hid_t_f *plist, hsize_t_f *size);
+H5_FCDLL int_f nh5pfill_value_define_c(hid_t_f *plist, int_f *flag);
+H5_FCDLL int_f nh5pset_alloc_time_c(hid_t_f *plist, int_f *flag);
+H5_FCDLL int_f nh5pget_alloc_time_c(hid_t_f *plist, int_f *flag);
+H5_FCDLL int_f nh5pset_fill_time_c(hid_t_f *plist, int_f *flag);
+H5_FCDLL int_f nh5pget_fill_time_c(hid_t_f *plist, int_f *flag);
+H5_FCDLL int_f nh5pset_meta_block_size_c(hid_t_f *plist, hsize_t_f *size);
+H5_FCDLL int_f nh5pget_meta_block_size_c(hid_t_f *plist, hsize_t_f *size);
+H5_FCDLL int_f nh5pset_sieve_buf_size_c(hid_t_f *plist, size_t_f *size);
+H5_FCDLL int_f nh5pget_sieve_buf_size_c(hid_t_f *plist, size_t_f *size);
+H5_FCDLL int_f nh5pset_small_data_block_size_c(hid_t_f *plist, hsize_t_f *size);
+H5_FCDLL int_f nh5pget_small_data_block_size_c(hid_t_f *plist, hsize_t_f *size);
+H5_FCDLL int_f nh5pset_hyper_vector_size_c(hid_t_f *plist, size_t_f *size);
+H5_FCDLL int_f nh5pget_hyper_vector_size_c(hid_t_f *plist, size_t_f *size);
+H5_FCDLL int_f nh5pcreate_class_c(hid_t_f *parent, _fcd name, int_f *name_len, hid_t_f *class);
+H5_FCDLL int_f nh5pregister_c(hid_t_f *class, _fcd name, int_f * name_len, size_t_f *size, void *value);
+H5_FCDLL int_f nh5pregisterc_c(hid_t_f *class, _fcd name, int_f * name_len, size_t_f *size, _fcd value, int_f *value_len);
+H5_FCDLL int_f nh5pinsert_c(hid_t_f  *plist, _fcd name, int_f *name_len, size_t_f *size, void *value);
+H5_FCDLL int_f nh5pinsertc_c(hid_t_f  *plist, _fcd name, int_f *name_len, size_t_f *size, _fcd value, int_f *value_len);
+H5_FCDLL int_f nh5pset_c(hid_t_f *prp_id, _fcd name, int_f *name_len, void *value);
+H5_FCDLL int_f nh5psetc_c(hid_t_f *prp_id, _fcd name, int_f *name_len, _fcd value, int_f *value_len);
+H5_FCDLL int_f nh5pget_c(hid_t_f *prp_id, _fcd name, int_f *name_len, void *value);
+H5_FCDLL int_f nh5pgetc_c(hid_t_f *prp_id, _fcd name, int_f *name_len, _fcd value, int_f *value_len);
+H5_FCDLL int_f nh5pexist_c(hid_t_f *prp_id, _fcd name, int_f *name_len);
+H5_FCDLL int_f nh5pget_size_c(hid_t_f *prp_id, _fcd name, int_f *name_len, size_t_f *size);
+H5_FCDLL int_f nh5pget_nprops_c(hid_t_f *prp_id, size_t_f *nprops);
+H5_FCDLL int_f nh5pget_class_parent_c(hid_t_f *prp_id, hid_t_f *parent_id);
+H5_FCDLL int_f nh5pisa_class_c(hid_t_f *plist, hid_t_f *pclass);
+H5_FCDLL int_f nh5pcopy_prop_c(hid_t_f *dst_id, hid_t_f *src_id, _fcd name, int_f *name_len);
+H5_FCDLL int_f nh5premove_c(hid_t_f *plid, _fcd name, int_f *name_len);
+H5_FCDLL int_f nh5punregister_c(hid_t_f *class, _fcd name, int_f *name_len);
+H5_FCDLL int_f nh5pclose_class_c(hid_t_f * class);
+H5_FCDLL int_f nh5pget_class_name_c(hid_t_f *prp_id, _fcd name, int_f *name_len);
+H5_FCDLL int_f nh5pset_shuffle_c ( hid_t_f *prp_id);
+H5_FCDLL int_f nh5pset_fletcher32_c ( hid_t_f *prp_id );
+H5_FCDLL int_f nh5pset_edc_check_c ( hid_t_f *prp_id, int_f *flag );
+H5_FCDLL int_f nh5pget_edc_check_c ( hid_t_f *prp_id, int_f *flag );
+H5_FCDLL int_f nh5pset_family_offset_c ( hid_t_f *prp_id , hsize_t_f *offset);
+H5_FCDLL int_f nh5pget_fapl_multi_c ( hid_t_f *prp_id , int_f *mem_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, real_f *memb_addr, int_f *flag, int_f *maxlen_out);
+H5_FCDLL int_f nh5pset_fapl_multi_c ( hid_t_f *prp_id , int_f *mem_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, real_f *memb_addr, int_f *flag);
+H5_FCDLL int_f nh5pset_fapl_multi_sc ( hid_t_f *prp_id , int_f *flag);
+H5_FCDLL int_f nh5pset_szip_c ( hid_t_f *prp_id , int_f *options_mask, int_f *pixels_per_block);
+H5_FCDLL int_f nh5pall_filters_avail_c ( hid_t_f *prp_id , int_f *status);
+H5_FCDLL int_f nh5pfill_value_defined_c ( hid_t_f *prp_id , int_f *flag);
+
+/*
+ * Functions frome H5Rf.c
+ */
+#ifndef H5Rf90_FNAMES
+#    define H5Rf90_FNAMES
+#ifdef DF_CAPFNAMES
+#   define nh5rcreate_object_c     FNAME(H5RCREATE_OBJECT_C)
+#   define nh5rcreate_region_c     FNAME(H5RCREATE_REGION_C)
+#   define nh5rdereference_region_c FNAME(H5RDEREFERENCE_REGION_C)
+#   define nh5rdereference_object_c FNAME(H5RDEREFERENCE_OBJECT_C)
+#   define nh5rget_region_region_c FNAME(H5RGET_REGION_REGION_C)
+#   define nh5rget_object_type_obj_c FNAME(H5RGET_OBJECT_TYPE_OBJ_C)
+#else                                              /* !DF_CAPFNAMES */
+#   define nh5rcreate_object_c     FNAME(h5rcreate_object_c)
+#   define nh5rcreate_region_c     FNAME(h5rcreate_region_c)
+#   define nh5rdereference_region_c FNAME(h5rdereference_region_c)
+#   define nh5rdereference_object_c FNAME(h5rdereference_object_c)
+#   define nh5rget_region_region_c FNAME(h5rget_region_region_c)
+#   define nh5rget_object_type_obj_c FNAME(h5rget_object_type_obj_c)
+#endif                                             /* DF_CAPFNAMES */
+#endif                                             /* H5Rf90_FNAMES */
+
+H5_FCDLL int_f nh5rcreate_object_c (haddr_t_f *ref, hid_t_f *loc_id, _fcd name, int_f *namelen);
+H5_FCDLL int_f nh5rcreate_region_c (int_f *ref, hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *space_id);
+H5_FCDLL int_f nh5rdereference_region_c (hid_t_f *dset_id, int_f *ref, hid_t_f *obj_id);
+H5_FCDLL int_f nh5rdereference_object_c (hid_t_f *dset_id, haddr_t_f *ref, hid_t_f *obj_id);
+H5_FCDLL int_f nh5rget_region_region_c (hid_t_f *dset_id, int_f *ref, hid_t_f *space_id);
+H5_FCDLL int_f nh5rget_object_type_obj_c (hid_t_f *dset_id, haddr_t_f *ref, int_f *obj_type);
+
+/*
+ * Functions from H5If.c
+ */
+#ifndef H5If90_FNAMES
+#    define H5If90_FNAMES
+#ifdef DF_CAPFNAMES
+#  define nh5iget_type_c    FNAME(H5IGET_TYPE_C)
+#  define nh5iget_name_c    FNAME(H5IGET_NAME_C)
+#  define nh5iinc_ref_c     FNAME(H5IINC_REF_C)
+#  define nh5idec_ref_c     FNAME(H5IDEC_REF_C)
+#  define nh5iget_ref_c     FNAME(H5IGET_REF_C)
+#  define nh5iget_file_id_c FNAME(H5IGET_FILE_ID_C)
+#else
+#  define nh5iget_type_c    FNAME(h5iget_type_c)
+#  define nh5iget_name_c    FNAME(h5iget_name_c)
+#  define nh5iinc_ref_c     FNAME(h5iinc_ref_c)
+#  define nh5idec_ref_c     FNAME(h5idec_ref_c)
+#  define nh5iget_ref_c     FNAME(h5iget_ref_c)
+#  define nh5iget_file_id_c FNAME(h5iget_file_id_c)
+#endif
+#endif
+
+H5_FCDLL int_f nh5iget_type_c(hid_t_f *obj_id, int_f *type);
+H5_FCDLL int_f nh5iget_name_c(hid_t_f *obj_id, _fcd buf, size_t_f *buf_size, size_t_f *name_size);
+H5_FCDLL int_f nh5iinc_ref_c(hid_t_f *obj_id, int_f *ref_count);
+H5_FCDLL int_f nh5idec_ref_c(hid_t_f *obj_id, int_f *ref_count);
+H5_FCDLL int_f nh5iget_ref_c(hid_t_f *obj_id, int_f *ref_count);
+H5_FCDLL int_f nh5iget_file_id_c(hid_t_f *obj_id, hid_t_f *file_id);
+
+#ifndef H5Ef90_FNAMES
+#    define H5Ef90_FNAMES
+#ifdef DF_CAPFNAMES
+#  define nh5eclear_c    FNAME(H5ECLEAR_C)
+#  define nh5eprint_c1   FNAME(H5EPRINT_C1)
+#  define nh5eprint_c2   FNAME(H5EPRINT_C2)
+#  define nh5eget_major_c FNAME(H5EGET_MAJOR_C)
+#  define nh5eget_minor_c FNAME(H5EGET_MINOR_C)
+#  define nh5eset_auto_c  FNAME(H5ESET_AUTO_C)
+#else
+#  define nh5eclear_c    FNAME(h5eclear_c)
+#  define nh5eprint_c1   FNAME(h5eprint_c1)
+#  define nh5eprint_c2   FNAME(h5eprint_c2)
+#  define nh5eget_major_c FNAME(h5eget_major_c)
+#  define nh5eget_minor_c FNAME(h5eget_minor_c)
+#  define nh5eset_auto_c  FNAME(h5eset_auto_c)
+#endif
+#endif
+
+H5_FCDLL int_f nh5eclear_c(void);
+H5_FCDLL int_f nh5eprint_c1(_fcd name, int_f* namelen);
+H5_FCDLL int_f nh5eprint_c2(void);
+H5_FCDLL int_f nh5eget_major_c(int_f* error_no, _fcd name);
+H5_FCDLL int_f nh5eget_minor_c(int_f* error_no, _fcd name);
+H5_FCDLL int_f nh5eset_auto_c(int_f* printflag);
+
+/*
+ * Functions from H5f.c
+ */
+#ifndef H5_FNAMES
+#    define H5_FNAMES
+#ifdef DF_CAPFNAMES
+#   define nh5open_c          FNAME(H5OPEN_C)
+#   define nh5close_c         FNAME(H5CLOSE_C)
+#   define nh5init_types_c    FNAME(H5INIT_TYPES_C)
+#   define nh5close_types_c   FNAME(H5CLOSE_TYPES_C)
+#   define nh5init_flags_c    FNAME(H5INIT_FLAGS_C)
+#   define nh5init1_flags_c    FNAME(H5INIT1_FLAGS_C)
+#   define nh5get_libversion_c  FNAME(H5GET_LIBVERSION_C)
+#   define nh5check_version_c   FNAME(H5CHECK_VERSION_C)
+#   define nh5garbage_collect_c FNAME(H5GARBAGE_COLLECT_C)
+#   define nh5dont_atexit_c     FNAME(H5DONT_ATEXIT_C)
+#else
+#   define nh5open_c         FNAME(h5open_c)
+#   define nh5close_c         FNAME(h5close_c)
+#   define nh5init_types_c    FNAME(h5init_types_c)
+#   define nh5close_types_c   FNAME(h5close_types_c)
+#   define nh5init_flags_c    FNAME(h5init_flags_c)
+#   define nh5init1_flags_c    FNAME(h5init1_flags_c)
+#   define nh5get_libversion_c  FNAME(h5get_libversion_c)
+#   define nh5check_version_c   FNAME(h5check_version_c)
+#   define nh5garbage_collect_c FNAME(h5garbage_collect_c)
+#   define nh5dont_atexit_c     FNAME(h5dont_atexit_c)
+#endif
+#endif
+
+H5_FCDLL int_f nh5open_c(void);
+H5_FCDLL int_f nh5close_c(void);
+H5_FCDLL int_f nh5init_types_c(hid_t_f *types, hid_t_f * floatingtypes, hid_t_f * integertypes);
+H5_FCDLL int_f nh5close_types_c(hid_t_f *types, int_f *lentypes, hid_t_f * floatingtypes, int_f * floatinglen, hid_t_f * integertypes,  int_f * integerlen);
+ H5_FCDLL int_f nh5init_flags_c( int_f *h5d_flags, int_f *h5e_flags, int_f *h5f_flags,
+                              int_f *h5fd_flags, hid_t_f *h5fd_hid_flags,
+                              int_f *h5g_flags, int_f *h5i_flags,
+                              int_f *h5p_flags, int_f *h5r_flags, int_f *h5s_flags,
+                              int_f *h5t_flags, int_f *h5z_flags);
+H5_FCDLL int_f nh5init1_flags_c(int_f *h5lib_flags);
+H5_FCDLL int_f nh5get_libversion_c(int_f *majnum, int_f *minnum, int_f *relnum);
+H5_FCDLL int_f nh5check_version_c(int_f *majnum, int_f *minnum, int_f *relnum);
+H5_FCDLL int_f nh5garbage_collect_c(void);
+H5_FCDLL int_f nh5dont_atexit_c(void);
+
+/*
+ * Functions from H5Zf.c
+ */
+#ifndef H5Zf90_FNAMES
+#    define H5Zf90_FNAMES
+#ifdef DF_CAPFNAMES
+#  define nh5zunregister_c    FNAME(H5ZUNREGISTER_C)
+#  define nh5zfilter_avail_c  FNAME(H5ZFILTER_AVAIL_C)
+#  define nh5zget_filter_info_c FNAME(H5ZGET_FILTER_INFO_C)
+#else
+#  define nh5zunregister_c    FNAME(h5zunregister_c)
+#  define nh5zfilter_avail_c  FNAME(h5zfilter_avail_c)
+#  define nh5zget_filter_info_c FNAME(h5zget_filter_info_c)
+#endif
+#endif
+
+H5_FCDLL int_f nh5zunregister_c (int_f *filter);
+H5_FCDLL int_f nh5zfilter_avail_c (int_f *filter, int_f *flag);
+H5_FCDLL int_f nh5zget_filter_info_c (int_f *filter, int_f *flag);
+
+
+#endif /* _H5f90proto_H */

Added: packages/hdf5/branches/upstream/current/fortran/src/H5fortran_flags.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5fortran_flags.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5fortran_flags.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,25 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+      MODULE H5FORTRAN_FLAGS
+!
+!  H5E interface related fortran flags: 
+!
+         !Turn on automatic printing of errors
+         INTEGER, PARAMETER :: PRINTON = 1
+         
+         !Turn off automatic printing of errors  
+         INTEGER, PARAMETER :: PRINTOFF = 0
+         
+      END MODULE H5FORTRAN_FLAGS

Added: packages/hdf5/branches/upstream/current/fortran/src/H5fortran_types.f90.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/H5fortran_types.f90.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/H5fortran_types.f90.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,45 @@
+
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 file contains HDF5 Fortran90 type definitions
+!
+       MODULE H5FORTRAN_TYPES
+         !
+         !  HDF5 integers 
+         !
+         !  Each of the arguments of SELECTED_INT_KIND function should be 
+         !  determined by configure. 
+         !  R_LARGE is the number of digits for the biggest integer supported.
+         !  R_INTEGER is the number of digits in INTEGER  
+         !  For example: 
+         !  On 64 bit machine ( DEC ALPHA) R_LARGE = 18 and R_INTEGER = 9
+         !  On 32 bit machines ( Sparc Solaris ) R_LARGE = 9 and R_INTEGER = 9 
+         !   
+         INTEGER, PARAMETER :: R_LARGE = @R_LARGE@
+         INTEGER, PARAMETER :: R_INTEGER = @R_INTEGER@
+         INTEGER, PARAMETER :: HADDR_T  = @HADDR_T@
+         INTEGER, PARAMETER :: HSIZE_T  = @HSIZE_T@
+         INTEGER, PARAMETER :: HSSIZE_T = @HSSIZE_T@
+         INTEGER, PARAMETER :: HID_T    = @HID_T@
+         INTEGER, PARAMETER :: SIZE_T   = @SIZE_T@
+
+         !
+         ! Some HDF5 FORTARN90 default values ( here for now 8/5/99 EIP )
+         !
+
+         INTEGER(SIZE_T), PARAMETER :: OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@
+
+       END MODULE H5FORTRAN_TYPES                                   

Added: packages/hdf5/branches/upstream/current/fortran/src/HDF5.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/HDF5.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/HDF5.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,29 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+    MODULE HDF5
+       USE H5GLOBAL
+       USE H5F
+       USE H5G
+       USE H5E
+       USE H5I
+       USE H5S
+       USE H5D
+       USE H5A
+       USE H5T
+       USE H5P
+       USE H5R
+       USE H5Z
+       USE H5LIB
+    END MODULE HDF5

Added: packages/hdf5/branches/upstream/current/fortran/src/HDF5mpio.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/HDF5mpio.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/HDF5mpio.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,30 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+    MODULE HDF5
+       USE H5GLOBAL
+       USE H5F
+       USE H5E
+       USE H5G
+       USE H5I
+       USE H5S
+       USE H5D
+       USE H5A
+       USE H5T
+       USE H5P
+       USE H5FDMPIO
+       USE H5R
+       USE H5Z
+       USE H5LIB
+    END MODULE HDF5

Added: packages/hdf5/branches/upstream/current/fortran/src/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,86 @@
+##
+## HDF5 Fortran Library Makefile(.in)
+##
+## 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.
+##
+top_srcdir=@top_srcdir@/..
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+hdf5_srcdir=$(top_srcdir)/src
+hdf5_builddir=$(top_builddir)/src
+
+TRACE=perl $(top_srcdir)/bin/trace
+
+## Add `-I.' to the C preprocessor flags.
+CPPFLAGS=-I. -I$(hdf5_builddir) -I$(hdf5_srcdir) @CPPFLAGS@
+
+## This is our main target
+LIB=libhdf5_fortran.la
+
+## h5fc and libhdf5_fortran.settings are generated during configure. 
+## Remove them only when distclean.
+DISTCLEAN=H5fortran_types.f90 h5fc libhdf5_fortran.settings
+
+## Public header files (to be installed)...
+PUB_HDR=H5pubconf_fortran.h
+PUB_PROGS=h5fc
+
+## Source and object files for the library
+ADD_PARALLEL_FILES=@ADD_PARALLEL_FILES@
+
+FPAR_MOD=${ADD_PARALLEL_FILES:yes=HDF5mpio.f90}
+
+CPARALLEL=${ADD_PARALLEL_FILES:yes=H5FDmpiof.c}
+CLIB_SRC=H5f90kit.c H5_f.c H5Rf.c H5Ff.c  H5Sf.c H5Df.c H5Gf.c	\
+         H5Af.c H5Tf.c H5Pf.c H5If.c H5Ef.c H5Zf.c ${CPARALLEL:no=}
+
+FPARALLEL=${ADD_PARALLEL_FILES:yes=H5FDmpioff.f90}
+FLIB_SRC=H5fortran_types.f90 H5fortran_flags.f90 H5f90global.f90 H5_ff.f90	\
+         H5Rff.f90 H5Fff.f90 H5Sff.f90 H5Dff.f90 H5Gff.f90 H5Aff.f90 H5Tff.f90 	\
+         H5Pff.f90 H5Iff.f90 H5Eff.f90 H5Zff.f90 ${FPARALLEL:no=} ${FPAR_MOD:no=HDF5.f90}
+
+LIB_SRC=$(CLIB_SRC) $(FLIB_SRC)
+LIB_OBJ=$(CLIB_SRC:.c=.lo) $(FLIB_SRC:.f90=.lo)
+
+## Hardcode the dependencies of these files. There isn't a known way of
+## determining this automagically (like we do with the C files). So, when
+## doing a parallel make, some modules could be made way before the
+## modules they depend upon are actually made. *sigh*
+H5fortran_flags.lo: $(srcdir)/H5fortran_flags.f90
+H5fortran_types.lo: H5fortran_types.f90
+H5f90global.lo:	    $(srcdir)/H5f90global.f90 H5fortran_flags.lo H5fortran_types.lo
+H5Aff.lo:	    $(srcdir)/H5Aff.f90 H5f90global.lo
+H5Dff.lo:	    $(srcdir)/H5Dff.f90 H5f90global.lo
+H5Eff.lo:	    $(srcdir)/H5Eff.f90 H5f90global.lo
+H5Fff.lo:	    $(srcdir)/H5Fff.f90 H5f90global.lo
+H5Gff.lo:	    $(srcdir)/H5Gff.f90 H5f90global.lo
+H5Iff.lo:	    $(srcdir)/H5Iff.f90 H5f90global.lo
+H5Pff.lo:	    $(srcdir)/H5Pff.f90 H5f90global.lo
+H5Rff.lo:	    $(srcdir)/H5Rff.f90 H5f90global.lo
+H5Sff.lo:	    $(srcdir)/H5Sff.f90 H5f90global.lo
+H5Tff.lo:	    $(srcdir)/H5Tff.f90 H5f90global.lo
+H5Zff.lo:	    $(srcdir)/H5Zff.f90 H5f90global.lo
+H5_ff.lo:	    $(srcdir)/H5_ff.f90 H5f90global.lo
+HDF5.lo:	    $(srcdir)/HDF5.f90 H5f90global.lo H5Aff.lo	    \
+		    H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo    \
+		    H5Pff.lo H5Rff.lo H5Sff.lo H5Tff.lo H5Zff.lo
+H5FDmpioff.lo:	    $(srcdir)/H5FDmpioff.f90 H5f90global.lo
+HDF5mpio.lo:	    $(srcdir)/H5FDmpioff.f90 H5f90global.lo H5Aff.lo  \
+		    H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo    \
+		    H5Pff.lo H5Rff.lo H5Sff.lo H5Tff.lo H5Zff.lo H5FDmpioff.lo
+
+ARFLAGS=rc
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/fortran/src/README
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/README	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/README	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,240 @@
+
+          README for the FORTRAN90 Prototype APIs to HDF5
+
+
+This distribution contains the HDF5 FORTRAN90 APIs source code (prototype) 
+based on the HDF5 1.2.2 release (ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current), 
+tests and examples.
+
+This prototype supports a selected subset of the HDF5 Library functionality. 
+A complete list of the Fortran subroutines can be found in the HDF5 
+Reference Manual provided with this release.
+Check the online documentation at http://hdf.ncsa.uiuc.edu/HDF5/doc (select 
+the "HDF5 Fortran90 Docs" link at the bottom of the left-hand column) or 
+H5_F90.R1.2.2.RefMan.tar at ftp://hdf.ncsa.uiuc.edu/HDF5/fortran .
+
+Changes since last release (October 1999)
+=========================================
+* Support for Linux 
+* Support for parallel features (tested on O2K platform only)
+* Most of the functions from the H5R, H5P, H5T, H5E and H5I interfaces were 
+  implemented. See Reference Manual for complete list. The new functions  
+  include support for object and dataset region references, and for 
+  compound datatypes.
+* This prototype supports more predefined types. See list below in 
+  the "About the Fortran APIs" section.
+* This prototype supports T3E and T3E with mpt 1.3. One has to modify
+  H5Dff.f90, H5Aff.f90, H5Pff.f90 to comment lines with the module procedures for
+  double precision datatypes. See source code.
+
+Supported platforms
+===================
+The FORTRAN90 APIs provided here are known to work with the
+following platforms and compilers:
+
+     *  SunOS 5.6  with  WorkshopCompilers 4.2 Fortran 90 1.2
+     *  SunOS 5.7  with  WorkshopCompilers 5.0 Fortran 90 2.0 
+     *  OSF1 V4.0  with  Digital Fortran 90 4.1 
+     *  IRIX64 6.5 (64 option only) with  MIPSpro Compilers: Version 7.3.1m    
+                          mpt.1.4
+     *  Linux RedHat 6.1, Kernel 2.2.12 with PGF90
+     *  T3E with Cray Fortran: Version 3.4.0.0
+            with mpt 1.3
+
+Compilation
+===========
+
+1. Install HDF5 Release 1.2.2 on your system
+   (ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current).  If you are using a
+   binary distribution provided by the HDF group, make sure that a GZIP 
+   library is installed on your system. If you do not have a GZIP library,
+   you may copy it from the HDF FTP server.
+
+2. In the src directory copy H5fortran_types.f90_<system> to 
+   H5fortran_types.f90, where <system> is one of the following:
+
+     solaris
+     digunix
+     irix
+     linux
+
+   Example: On Digital Unix systems use the following command
+            cp H5fortran_types.f90_digunix H5fortran_types.f90
+
+3. Edit Makefile_<system >in the src/, test/ and examples/ directories
+   to specify the locations of the HDF5 C Library, the GZIP Library, and the 
+   corresponding include files on your system.
+
+4. In the src directory, run make to create the HDF5 FORTRAN90 library 
+   hdf5_fortran.a
+             make -f Makefile_<system>
+             
+   Example: On Solaris run
+            make -f Makefile_solaris
+
+   The Fortran library hdf5_fortran.a will be created.
+
+5. In the test directory, build tests by running  
+            make -f Makefile_<system>
+   This command will build fortranlib_test, fflush1 and fflush2 executables.
+   Run those executables to make sure that the library works on your system.
+
+6. In the examples directory, run
+            make -f Makefile_<system>
+   to build the following examples:
+   
+   fileexample       - creates an HDF5 file
+   dsetexample       - creates an empty dataset of integers
+   rwdsetexample     - writes and reads to the dataset created by dsetexample
+   groupexample      - creates a group in the file
+   grpsexample       - creates groups using absolute and relative names
+   grpdsetexample    - creates datasets in the groups
+   hyperslabexample  - writes and reads a hyperslab
+   selectele         - writes element selections
+   grpit             - iterates through the members of the group
+   attrexample       - creates and writes a dataset attribute
+   compound          - creates, writes and reads one dim array of structures
+   mountexample      - shows how to use mounting files to access a dataset
+   refobjexample     - creates and stores references to the objects
+   refregexample     - creates and stores references to the dataset regions
+
+   The script run_example.sh runs the examples in the appropriate order. 
+
+   Use the HDF5 utility, h5dump, to see the content of the created HDF5 files.
+
+7. Install the HDF5 Reference Manual (in HTML format).  The manual
+   can be found in the Unix tar file H5_F90.R1.2.2.RefMan.tar
+   on the ftp server and is served over the Web from
+   http://hdf.ncsa.uiuc.edu/HDF5/doc/ (select the "HDF5 Fortran90 Docs" 
+   link at the bottom of the left-hand column).
+
+
+8. Send bug reports and comments to hdfhelp at ncsa.uiuc.edu
+
+User's Guide Notes
++++++++++++++++++++
+
+About the source code organization
+==================================
+
+The Fortran APIs are organized in modules parallel to the HDF5 Interfaces.
+Each module is in a separate file with the name H5*ff.f.  Corresponding C
+stubs are in the H5*f.c files.  For example, the Fortran File APIs are in 
+the file H5Fff.f and the corresponding C stubs are in the file H5Ff.c. 
+
+Each module contains Fortran definitions of the constants, interfaces to 
+the subroutines if needed, and the subroutines themselves.  
+
+Users must use constant names in their programs instead of the numerical 
+values, as the numerical values are subject to change without notice. 
+
+About the Fortran APIs 
+=======================
+
+*  The Fortran APIs come in the form of Fortran subroutines.
+
+*  Each Fortran subroutine name is derived from the corresponding C function
+   name by adding "_f" to the name.  For example, the name of the C function 
+   to create an HDF5 file is H5Fcreate;  the corresponding Fortran subroutine 
+   is h5fcreate_f. 
+
+*  A description of each Fortran subroutine and its parameters can be found 
+   following the description of the corresponding C function in the 
+   Reference Manual provided with this release.  The manual can be found in 
+   the Unix tar file H5_F90.R1.2.2.tar in this directory and
+   is served over the Web from http://hdf.ncsa.uiuc.edu/HDF5/doc/ (select 
+   the "HDF5 Fortran90 Docs" link at the bottom of the left-hand column).
+
+*  The parameter list for each Fortran subroutine has two more parameters
+   than the corresponding C function.  These additional parameters hold 
+   the return value and an error code.  The order of the Fortran subroutine 
+   parameters may differ from the order of the C function parameters. 
+   The Fortran subroutine parameters are listed in the following order: 
+      -- required input parameters,
+      -- output parameters, including return value and error code, and 
+      -- optional input parameters.
+   For example, the C function to create a dataset has the following 
+   prototype:
+
+       hid_t H5Dcreate(hid_it loc_id, char *name, hid_t type_id, 
+             hid_t space_id, hid_t creation_prp);
+   
+   The corresponding Fortran subroutine has the following form:
+   
+       SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, 
+             hdferr, creation_prp)
+  
+   The first four parameters of the Fortran subroutine correspond to the 
+   C function parameters.  The fifth parameter dset_id is an output 
+   parameter and contains a valid dataset identifier if the value of the 
+   sixth output parameter hdferr indicates successful completion. 
+   (Error code descriptions are provided with the subroutine descriptions 
+   in the Reference Manual.)  The seventh input parameter creation_prp 
+   is optional, and may be omitted when the default creation property 
+   list is used.
+
+*  Parameters to the Fortran subroutines have one of the following 
+   predefined datatypes (see the file H5fortran_types.f90 for KIND 
+   definitions):
+   
+        INTEGER(HID_T)      compares with hid_t type in HDF5 C APIs
+        INTEGER(HSIZE_T)    compares with hsize_t in HDF5 C APIs
+        INTEGER(HSSIZE_T)   compares with hssize_t in HDF5 C APIs
+        INTEGER(SIZE_T)     compares with the C size_t type
+   These integer types usually correspond to 4 or 8 byte integers, 
+   depending on the FORTRAN90 compiler and corresponding HDF5 
+   C library definitions.
+   
+   The H5R module defines two types: 
+        TYPE(HOBJ_REF_T_F)  compares to the hobj_ref_t in HDF5 C API
+        TYPE(HDSET_REG_REF_T_F) compares to hdset_reg_ref_t in HDF5 C API
+   These types are represented by character arrays now. 
+   The internal representation can be changed in the future.
+
+*  Each Fortran application must call the h5init_types subroutine to 
+   initialize the Fortran predefined datatypes before calling the HDF5 Fortran 
+   subroutines.  The application must call the h5close_types subroutine 
+   after all calls to the HDF5 Fortran Library. 
+
+*  The following predefined types are implemented in this prototype: 
+
+                                H5T_NATIVE_INTEGER
+                                H5T_NATIVE_REAL
+                                H5T_NATIVE_DOUBLE
+                                H5T_NATIVE_CHARACTER
+                                H5T_STD_REF_OBJ
+                                H5T_STD_REF_DSETREG
+                                H5T_IEEE_F32BE
+                                H5T_IEEE_F32LE
+                                H5T_IEEE_F64BE
+                                H5T_IEEE_F64LE
+                                H5T_STD_I8BE
+                                H5T_STD_I8LE
+                                H5T_STD_I16BE
+                                H5T_STD_I16LE
+                                H5T_STD_I32BE
+                                H5T_STD_I32LE
+                                H5T_STD_I64BE
+                                H5T_STD_I64LE
+                                H5T_STD_U8BE
+                                H5T_STD_U8LE
+                                H5T_STD_U16BE
+                                H5T_STD_U16LE
+                                H5T_STD_U32BE
+                                H5T_STD_U32LE
+                                H5T_STD_U64BE
+                                H5T_STD_U64LE
+                                
+    
+*  When a C application reads data stored from a Fortran program, the data 
+   will appear to be transposed due to the difference in the C - Fortran 
+   storage order.  For example, if Fortran writes a 4x6 two-dimensional dataset 
+   to the file, a C program will read it as a 6x4 two-dimensional dataset into 
+   memory.  The HDF5 C utilities h5dump and h5ls display transposed data, if
+   data is written from a Fortran program.
+ 
+*  Fortran indices are 1 based.
+
+*  Compound datatype datasets can be written or read by atomic fields only.
+
+Not all of the APIs provided with this prototype have been fully tested. 

Added: packages/hdf5/branches/upstream/current/fortran/src/h5fc.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/h5fc.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/h5fc.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,231 @@
+#! /bin/sh
+##
+## 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.
+##
+
+############################################################################
+##                                                                        ##
+## Things You May Have to Modify:                                         ##
+##                                                                        ##
+## If the following paths don't point to the place were HDF5 is installed ##
+## on your system (i.e., you received a binary distribution or moved the  ##
+## files from the originally installed directory to another directory)    ##
+## then modify them accordingly to represent the new paths.               ##
+##                                                                        ##
+############################################################################
+prefix="@prefix@"
+exec_prefix="@exec_prefix@"
+libdir="@libdir@"
+includedir="@includedir@"
+
+############################################################################
+##                                                                        ##
+## You shouldn't have to modify anything below this line.                 ##
+##                                                                        ##
+############################################################################
+
+host_os="@host_os@"
+
+prog_name="`basename $0`"
+
+allargs=""
+compile_args=""
+link_args=""
+link_objs=""
+
+do_link="yes"
+do_compile="no"
+dash_o="no"
+dash_c="no"
+get_output_file="no"
+
+SHOW="eval"
+FCBASE="@F9X@"
+FLINKERBASE="@F9X@"
+FFLAGS="@FFLAGS@"
+F9XMODFLAG="@F9XMODFLAG@"
+F9XSUFFIXFLAG="@F9XSUFFIXFLAG@"
+LDFLAGS="@LDFLAGS@"
+LIBS="@LIBS@"
+
+FC="${HDF5_FC:-$FCBASE}"
+FLINKER="${HDF5_FLINKER:-$FLINKERBASE}"
+
+usage() {
+  # A wonderfully informative "usage" message.
+  echo "usage: $prog_name [OPTIONS] <compile line>"
+  echo "  OPTIONS:"
+  echo "    -help        This help message."
+  echo "    -echo        Show all the shell commands executed"
+  echo "    -prefix=DIR  Prefix directory to find HDF5 lib/ and include/"
+  echo "                   subdirectories [default: $prefix]"
+  echo "    -show        Show the commands without executing them"
+  echo "    -showconfig  Show the HDF5 library configuration summary"
+  echo " "
+  echo "  <compile line>  - the normal compile line options for your compiler."
+  echo "                    $prog_name uses the same compiler you used to compile"
+  echo "                    HDF5. Check with your compiler's man pages for more"
+  echo "                    information on which options are needed."
+  echo " "
+  echo " You can override the compiler and linker to compile your program by"
+  echo " setting the following environment variables accordingly:"
+  echo " "
+  echo "   HDF5_FC                  -  use a different Fortran 90 or 95 compiler"
+  echo "   HDF5_FLINKER             -  use a different linker"
+  echo " "
+  exit 1
+}
+
+# Show the configuration summary of the library recorded in the
+# libhdf5.settings file reside in the lib directory.
+showconfigure()
+{
+  cat ${libdir}/libhdf5.settings
+  status=$?
+}
+
+# Main
+status=0
+
+if test "$#" = "0"; then
+  # No parameters specified, issue usage statement and exit.
+  usage
+fi
+
+for arg in $@ ; do
+  if test "x$get_output_file" = "xyes"; then
+    link_args="$link_args $arg"
+    output_file="$arg"
+    get_output_file="no"
+    continue
+  fi
+
+  case "$arg" in
+    -c)
+      allargs="$allargs $arg"
+      compile_args="$compile_args $arg"
+
+      if test "x$do_link" = "xyes" -a -n "$output_file"; then
+        compile_args="$compile_args -o $outputfile"
+      fi
+
+      do_link="no"
+      dash_c="yes"
+      ;;
+    -o)
+      allargs="$allargs $arg"
+      dash_o="yes"
+
+      if test "x$dash_c" = "xyes"; then
+        compile_args="$compile_args $arg"
+      else
+        link_args="$link_args $arg"
+        do_link="yes"
+        get_output_file="yes"
+      fi
+      ;;
+    -E|-M)
+      allargs="$allargs $arg"
+      compile_args="$compile_args $arg"
+      dash_c="yes"
+      do_link="no"
+      ;;
+    -l*)
+      link_args="$link_args $arg"
+      allargs="$allargs $arg"
+      ;;
+    -prefix=*)
+      prefix="`expr "$arg" : '-prefix=\(.*\)'`"
+      ;;
+    -echo)
+      set -x
+      ;;
+    -show)
+      SHOW="echo"
+      ;;
+    -showconfig)
+      showconfigure
+      exit $status
+      ;;
+    -help)
+      usage
+      ;;
+    *\"*)
+      qarg="'"$arg"'"
+      allargs="$allargs $qarg"
+      ;;
+    *\'*)
+      qarg='\"'"$arg"'\"'
+      allargs="$allargs $qarg"
+      ;;
+
+        *) allargs="$allargs $arg"
+	if [ -s "$arg" ] ; then
+	    ext=`expr "$arg" : '.*\(\..*\)'`
+	    if [ "$ext" = ".f" -o "$ext" = ".F" -o "$ext" = ".f90" -o \
+		 "$ext" = ".for" -o "$ext" = ".FOR" -o "$ext" = ".F90" ] ; then
+	        do_compile="yes"
+	        compile_args="$compile_args $arg"
+	        fname=`basename $arg $ext`
+	        link_objs="$link_objs $fname.o"
+	    elif [ "$ext" = ".o" ] ; then
+		if test "x$dash_c" = "xyes"  ; then
+	            compile_args="$compile_args $arg"
+                else
+	            do_link="yes"
+	            link_objs="$link_objs $arg"
+                fi
+            elif test "x$ext" = "x.a"; then
+              # This is an archive that we're linking in
+              libraries=" $libraries $arg "
+            else
+              compile_args="$compile_args $arg"
+              link_args="$link_args $arg"
+            fi
+	    else
+	        compile_args="$compile_args $arg"
+	        link_args="$link_args $arg"
+	    fi
+	;;
+  esac
+done
+
+# It's possible that there isn't a modules flag...
+  fmodules=""
+  if test -n "$F9XMODFLAG"; then
+    fmodules="${F9XMODFLAG}${libdir}"
+  fi
+
+if test "x$do_compile" = "xyes"; then
+  if test "x$dash_c" != "xyes"; then
+    compile_args="-c $compile_args"
+  fi
+
+  $SHOW $FC $FFLAGS ${F9XSUFFIXFLAG} ${fmodules} $compile_args
+  status=$?
+
+  if test "$status" != "0"; then
+    exit $status
+  fi
+fi
+
+if test "x$do_link" = "xyes"; then
+
+  link_args="$link_args ${libdir}/libhdf5_fortran.a ${libdir}/libhdf5.a"
+
+  link_args="$link_args $LIBS"
+  $SHOW $FLINKER ${FFLAGS} ${F9XSUFFIXFLAG} ${fmodules} ${LDFLAGS} $link_objs $link_args
+  status=$?
+fi
+
+exit $status


Property changes on: packages/hdf5/branches/upstream/current/fortran/src/h5fc.in
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/fortran/src/libhdf5_fortran.settings.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/src/libhdf5_fortran.settings.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/src/libhdf5_fortran.settings.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+SUMMARY OF THE HDF5 CONFIGURATION
+=================================
+
+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@
+Byte sex:           @BYTESEX@
+Parallel support:   @PARALLEL@
+Installation point: @prefix@
+C Compiler:         @CC_VERSION@
+C Flags:            @CFLAGS@ @CPPFLAGS@
+Extra C libraries:  @LDFLAGS@ @LIBS@
+Fortran Compiler:   @FC_VERSION@
+Fortran Flags:      @FFLAGS@
+Archiver:           @AR@
+Ranlib:             @RANLIB@

Added: packages/hdf5/branches/upstream/current/fortran/test/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,16 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+

Added: packages/hdf5/branches/upstream/current/fortran/test/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,63 @@
+## HDF5-Fortran test/Makefile(.in)
+
+##
+## 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.
+##
+top_srcdir=@top_srcdir@/..
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+hdf5_srcdir=$(top_srcdir)/src 
+hdf5_builddir=$(top_builddir)/src
+CPPFLAGS=-I. -I$(hdf5_builddir) -I$(hdf5_srcdir) @CPPFLAGS@
+FSEARCH_DIRS =@F9XMODFLAG at ../src @FSEARCH_DIRS@
+
+## Add include directory to the C preprocessor flags and the h5test and hdf5
+## libraries to the library list.
+LT_LINK_LIB=$(LT) --mode=link $(F9X) -static -rpath $(libdir)
+FLIB=../src/libhdf5_fortran.la
+HDF5LIB=$(hdf5_builddir)/libhdf5.la
+TCLIB=../../test/.libs/libh5test.a
+LIB=libh5test_fortran.la
+LIB_CSRC=t.c
+LIB_FSRC=tf.f90
+LIB_OBJ=$(LIB_FSRC:.f90=.lo) $(LIB_CSRC:.c=.lo)
+
+TEST_PROGS_SRC=fortranlib_test.f90 fflush1.f90 fflush2.f90
+TEST_PROGS=$(TEST_PROGS_SRC:.f90=)
+
+# fortranlib_test settting
+FORTLIBTEST_FSRC=fortranlib_test.f90 \
+	tH5F.f90 tH5D.f90 tH5R.f90 tH5S.f90 tH5T.f90 tH5VL.f90 tH5Z.f90\
+	tH5Sselect.f90 tH5P.f90 tH5A.f90 tH5I.f90 tH5G.f90 tH5E.f90 tf.f90
+FORTLIBTEST_CSRC = t.c
+FORTLIBTEST_OBJ=$(FORTLIBTEST_FSRC:.f90=.lo) $(FORTLIBTEST_CSRC:.c=.lo)
+
+TEST_OBJ=$(FORTLIBTEST_OBJ) $(TEST_PROGS_SRC:.f90=.lo)
+PUB_LIB=
+## Temporary files
+MOSTLYCLEAN=*.h5 *.tmp
+
+$(TEST_PROGS): $(LIB) $(FLIB) 
+
+fortranlib_test: $(FORTLIBTEST_OBJ)
+	@$(LT_LINK_FEXE) $(FFLAGS) -o $@ $(FORTLIBTEST_OBJ) $(LIB) $(TCLIB) $(FLIB) $(LIBS) $(HDF5LIB)
+
+fflush1: fflush1.lo 
+	@$(LT_LINK_FEXE) $(FFLAGS) -o $@ fflush1.lo $(LIB) $(TCLIB) $(FLIB) $(LIBS) $(HDF5LIB)
+
+fflush2: fflush2.lo 
+	@$(LT_LINK_FEXE) $(FFLAGS) -o $@ fflush2.lo $(LIB) $(TCLIB) $(FLIB) $(LIBS) $(HDF5LIB)
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/fortran/test/fflush1.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/fflush1.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/fflush1.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,154 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! Purpose:	This is the first half of a two-part test that makes sure
+!		that a file can be read after an application crashes as long
+!		as the file was flushed first.  We simulate by exit the 
+!              the program using stop statement
+!
+
+     PROGRAM FFLUSH1EXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     !
+     !the respective filename is "fflush1.h5" 
+     !
+     CHARACTER(LEN=7), PARAMETER :: filename = "fflush1"
+     CHARACTER(LEN=80) :: fix_filename
+
+     !
+     !data space rank and dimensions
+     !
+     INTEGER, PARAMETER :: RANK = 2
+     INTEGER, PARAMETER :: NX = 4
+     INTEGER, PARAMETER :: NY = 5
+
+     !
+     ! File identifiers
+     !
+     INTEGER(HID_T) :: file_id 
+     
+     !
+     ! Group identifier
+     !
+     INTEGER(HID_T) :: gid 
+
+     !
+     ! dataset identifier
+     !
+     INTEGER(HID_T) :: dset_id
+ 
+     !
+     ! data space identifier
+     !
+     INTEGER(HID_T) :: dataspace
+ 
+     !
+     ! data type identifier
+     !
+     INTEGER(HID_T) :: dtype_id
+
+     ! 
+     !The dimensions for the dataset.
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/NX,NY/)
+
+     !
+     !flag to check operation success 
+     !         
+     INTEGER     ::   error
+
+     !
+     !general purpose integer 
+     !         
+     INTEGER     ::   i, j, total_error = 0
+
+     !
+     !data buffers 
+     !         
+     INTEGER, DIMENSION(NX,NY) :: data_in, data_out
+     INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+     data_dims(1) = NX
+     data_dims(2) = NY
+
+     !
+     !Initialize FORTRAN predifined datatypes
+     !
+     CALL h5open_f(error) 
+          CALL check("h5open_f",error,total_error)
+
+     !
+     !Initialize data_in buffer
+     !
+     do i = 1, NX
+          do j = 1, NY
+               data_in(i,j) =  (i-1) + (j-1)
+          end do
+     end do
+
+     !
+     !Create file "fflush1.h5" using default properties.
+     ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+     CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+          CALL check("h5fcreate_f",error,total_error)
+
+     !
+     !Create group "/G" inside file "fflush1.h5".
+     ! 
+     CALL h5gcreate_f(file_id, "/G", gid, error)
+          CALL check("h5gcreate_f",error,total_error)
+
+     !
+     !Create data space for the dataset. 
+     !
+     CALL h5screate_simple_f(RANK, dims, dataspace, error)
+          CALL check("h5screate_simple_f",error,total_error)
+
+     !
+     !Create dataset "/D" inside file "fflush1.h5".
+     ! 
+     CALL h5dcreate_f(file_id, "/D", H5T_NATIVE_INTEGER, dataspace, &
+                      dset_id, error)
+          CALL check("h5dcreate_f",error,total_error)
+ 
+     !
+     ! Write data_in to the dataset
+     !
+     CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data_in, data_dims, error)
+          CALL check("h5dwrite_f",error,total_error)
+  
+     !
+     !flush and exit without closing the library
+     !
+     CALL H5fflush_f(file_id, H5F_SCOPE_GLOBAL_F, error)
+          CALL check("h5fflush_f",error,total_error)
+
+     ! if errors detected, exit with non-zero code.
+     IF (total_error .ne. 0) CALL h5_exit_f (1)
+
+
+     001 STOP
+
+
+     END PROGRAM FFLUSH1EXAMPLE
+

Added: packages/hdf5/branches/upstream/current/fortran/test/fflush2.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/fflush2.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/fflush2.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,182 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! Purpose:	This is the second half of a two-part test that makes sure
+!		that a file can be read after an application crashes as long
+!		as the file was flushed first.  This half tries to read the
+!		file created by the first half.
+!
+
+     PROGRAM FFLUSH2EXAMPLE
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+
+     CHARACTER(LEN=7), PARAMETER :: filename = "fflush1"
+     CHARACTER(LEN=80) :: fix_filename
+
+     !
+     !data space rank and dimensions
+     !
+     INTEGER, PARAMETER :: RANK = 2
+     INTEGER, PARAMETER :: NX = 4
+     INTEGER, PARAMETER :: NY = 5
+
+     !
+     ! File identifiers
+     !
+     INTEGER(HID_T) :: file_id 
+     
+     !
+     ! Group identifier
+     !
+     INTEGER(HID_T) :: gid 
+
+     !
+     ! dataset identifier
+     !
+     INTEGER(HID_T) :: dset_id
+ 
+     !
+     ! data space identifier
+     !
+     INTEGER(HID_T) :: dataspace
+ 
+     !
+     ! data type identifier
+     !
+     INTEGER(HID_T) :: dtype_id
+
+     ! 
+     !The dimensions for the dataset.
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/NX,NY/)
+
+     !
+     !flag to check operation success 
+     !         
+     INTEGER     ::   error
+
+     !
+     !general purpose integer 
+     !         
+     INTEGER     ::   i, j, total_error = 0
+
+     !
+     !data buffers 
+     !         
+     INTEGER, DIMENSION(NX,NY) :: data_out
+     INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+     data_dims(1) = NX
+     data_dims(2) = NY
+
+     !
+     !Initialize FORTRAN predifined datatypes
+     !
+     CALL h5open_f(error) 
+          CALL check("h5open_f",error,total_error)
+
+     !
+     !Open the file.
+     !
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+     CALL h5fopen_f(fix_filename, H5F_ACC_RDONLY_F, file_id, error)
+          CALL check("h5fopen_f",error,total_error)
+
+     !
+     !Open the dataset
+     ! 
+     CALL h5dopen_f(file_id, "/D", dset_id, error)
+          CALL check("h5dopen_f",error,total_error)
+
+     !
+     !Get dataset's data type.
+     ! 
+     CALL h5dget_type_f(dset_id, dtype_id, error)
+          CALL check("h5dget_type_f",error,total_error)
+
+     !
+     !Read the dataset.
+     !
+     CALL h5dread_f(dset_id, dtype_id, data_out, data_dims, error)
+          CALL check("h5dread_f",error,total_error)
+
+     !
+     !Print the dataset.
+     !
+     do i = 1, NX
+          write(*,*) (data_out(i,j), j = 1, NY)
+     end do
+!
+!result of the print statement
+!
+! 0,  1,  2,  3,  4
+! 1,  2,  3,  4,  5
+! 2,  3,  4,  5,  6
+! 3,  4,  5,  6,  7
+
+     !
+     !Open the group.
+     !
+     CALL h5gopen_f(file_id, "G", gid, error)     
+          CALL check("h5gopen_f",error,total_error)
+    
+     !
+     !In case error happens, jump to stop.
+     !
+     IF (error == -1) THEN
+          001 STOP
+     END IF
+    
+     !
+     !Close the datatype
+     !
+     CALL h5tclose_f(dtype_id, error)
+          CALL check("h5tclose_f",error,total_error)
+
+     !
+     !Close the dataset.
+     !
+     CALL h5dclose_f(dset_id, error)
+          CALL check("h5dclose_f",error,total_error)
+
+     !
+     !Close the group.
+     !
+     CALL h5gclose_f(gid, error)
+          CALL check("h5gclose_f",error,total_error)
+
+     !
+     !Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+          CALL check("h5fclose_f",error,total_error)
+
+     !
+     !Close FORTRAN predifined datatypes
+      !
+     CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+     CALL h5close_f(error)
+         CALL check("h5close_types_f",error,total_error)
+     
+     ! if errors detected, exit with non-zero code.
+     IF (total_error .ne. 0) CALL h5_exit_f (1)
+
+     END PROGRAM FFLUSH2EXAMPLE

Added: packages/hdf5/branches/upstream/current/fortran/test/fortranlib_test.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/fortranlib_test.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/fortranlib_test.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,345 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! 
+!    Testing Fortran functionality.
+!
+     PROGRAM fortranlibtest
+
+       USE HDF5
+
+     IMPLICIT NONE
+     INTEGER :: total_error = 0
+     INTEGER :: error 
+     INTEGER :: mounting_total_error = 0
+     INTEGER :: reopen_total_error = 0
+     INTEGER :: fclose_total_error = 0
+     INTEGER :: fspace_total_error = 0
+     INTEGER :: dataset_total_error = 0
+     INTEGER :: extend_dataset_total_error = 0
+     INTEGER :: refobj_total_error = 0
+     INTEGER :: refreg_total_error = 0
+     INTEGER :: dataspace_total_error = 0
+     INTEGER :: hyperslab_total_error = 0
+     INTEGER :: element_total_error = 0
+     INTEGER :: basic_select_total_error = 0
+     INTEGER :: total_error_compoundtest = 0
+     INTEGER :: basic_datatype_total_error = 0
+     INTEGER :: enum_total_error = 0
+     INTEGER :: external_total_error = 0
+     INTEGER :: multi_file_total_error = 0
+     INTEGER :: attribute_total_error = 0
+     INTEGER :: identifier_total_error = 0
+     INTEGER :: group_total_error = 0
+     INTEGER :: error_total_error = 0
+     INTEGER :: vl_total_error = 0
+     INTEGER :: z_total_error = 0
+     INTEGER :: sz_total_error = 0
+     INTEGER :: majnum, minnum, relnum
+     CHARACTER(LEN=8) error_string
+     CHARACTER(LEN=8) :: success = ' PASSED '
+     CHARACTER(LEN=8) :: failure = '*FAILED*'
+     CHARACTER(LEN=8) :: skip = '--SKIP--'
+     CHARACTER(LEN=4) :: e_format ='(8a)'
+     LOGICAL :: cleanup = .TRUE.
+!     LOGICAL :: cleanup = .FALSE.
+     LOGICAL :: szip_flag
+
+     CALL h5open_f(error) 
+     write(*,*) '                       ==========================                            '
+     write(*,*) '                              FORTRAN tests '
+     write(*,*) '                       ==========================                            '
+
+     CALL h5get_libversion_f(majnum, minnum, relnum, total_error)
+     if(total_error .eq. 0) then
+
+     write(*, '(" FORTRANLIB_TEST is linked with HDF5 Library version ")', advance="NO")
+     write(*, '(I1)', advance="NO") majnum
+     write(*, '(".")', advance="NO") 
+     write(*, '(I1)', advance="NO") minnum
+     write(*, '(" release ")', advance="NO")
+     write(*, '(I3)') relnum
+     else
+        total_error = total_error + 1
+     endif
+     write(*,*)
+!     CALL h5check_version_f(1,4,4,total_error)
+
+!     write(*,*) '========================================='
+!     write(*,*) 'Testing FILE Interface                   '
+!     write(*,*) '========================================='
+     error_string = failure
+     CALL mountingtest(cleanup, mounting_total_error)
+     IF (mounting_total_error == 0) error_string = success
+     write(*, fmt = '(14a)', advance = 'no') ' Mounting test'     
+     write(*, fmt = '(56x,a)', advance = 'no') ' ' 
+
+     write(*, fmt = e_format) error_string 
+     total_error = total_error + mounting_total_error 
+
+     error_string = failure
+     CALL reopentest(cleanup, reopen_total_error)
+     IF (reopen_total_error == 0) error_string = success
+     write(*, fmt = '(12a)', advance = 'no') ' Reopen test'     
+     write(*, fmt = '(58x,a)', advance = 'no') ' ' 
+     write(*, fmt = e_format) error_string
+     total_error = total_error + reopen_total_error 
+
+     error_string = failure
+     CALL file_close(cleanup, fclose_total_error)
+     IF (fclose_total_error == 0) error_string = success
+     write(*, fmt = '(21a)', advance = 'no') ' File open/close test'     
+     write(*, fmt = '(49x,a)', advance = 'no') ' ' 
+     write(*, fmt = e_format) error_string
+     total_error = total_error + fclose_total_error 
+
+     error_string = failure
+     CALL file_space(cleanup, fspace_total_error)
+     IF (fspace_total_error == 0) error_string = success
+     write(*, fmt = '(21a)', advance = 'no') ' File free space test'     
+     write(*, fmt = '(49x,a)', advance = 'no') ' ' 
+     write(*, fmt = e_format) error_string
+     total_error = total_error + fspace_total_error 
+
+
+!     write(*,*)
+!     write(*,*) '========================================='
+!     write(*,*) 'Testing DATASET Interface                '
+!     write(*,*) '========================================='
+
+     error_string = failure
+     CALL datasettest(cleanup, dataset_total_error)
+     IF (dataset_total_error == 0) error_string = success
+     write(*, fmt = '(13a)', advance = 'no') ' Dataset test'     
+     write(*, fmt = '(57x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + dataset_total_error 
+
+     error_string = failure
+     CALL extenddsettest(cleanup, extend_dataset_total_error)
+     IF (extend_dataset_total_error == 0)  error_string = success
+     write(*, fmt = '(24a)', advance = 'no') ' Extendible dataset test'     
+     write(*, fmt = '(46x,a)', advance = 'no') ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + extend_dataset_total_error 
+
+!     write(*,*)
+!     write(*,*) '========================================='
+!     write(*,*) 'Testing DATASPACE Interface             '
+!     write(*,*) '========================================='
+
+     error_string = failure
+     CALL dataspace_basic_test(cleanup, dataspace_total_error)
+     IF (dataspace_total_error == 0) error_string = success
+     write(*, fmt = '(21a)', advance = 'no') ' Basic dataspace test'     
+     write(*, fmt = '(49x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + dataspace_total_error 
+
+
+!     write(*,*)
+!     write(*,*) '========================================='
+!     write(*,*) 'Testing REFERENCE Interface              '
+!     write(*,*) '========================================='
+
+     error_string = failure
+     CALL refobjtest(cleanup, refobj_total_error)
+     IF (refobj_total_error == 0) error_string = success
+     write(*, fmt = '(25a)', advance = 'no') ' Reference to object test'     
+     write(*, fmt = '(45x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + refobj_total_error 
+
+     error_string = failure
+     CALL refregtest(cleanup, refreg_total_error)
+     IF (refreg_total_error == 0) error_string = success
+     write(*, fmt = '(33a)', advance = 'no') ' Reference to dataset region test'     
+     write(*, fmt = '(37x,a)', advance = 'no')  ' ' 
+     write(*, fmt = e_format) error_string
+     total_error = total_error + refreg_total_error 
+
+!     write(*,*)
+!     write(*,*) '========================================='
+!     write(*,*) 'Testing selection functionalities        '
+!     write(*,*) '========================================='
+
+     error_string = failure
+     CALL test_basic_select(cleanup, basic_select_total_error)
+     IF (basic_select_total_error == 0) error_string = success
+     write(*, fmt = '(21a)', advance = 'no') ' Basic selection test'     
+     write(*, fmt = '(49x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + basic_select_total_error 
+
+     error_string = failure
+     CALL  test_select_hyperslab( cleanup, hyperslab_total_error)
+     IF ( hyperslab_total_error == 0) error_string = success
+     write(*, fmt = '(25a)', advance = 'no') ' Hyperslab selection test'     
+     write(*, fmt = '(45x,a)', advance = 'no')  ' ' 
+     write(*, fmt = e_format) error_string
+     total_error = total_error + hyperslab_total_error 
+
+     error_string = failure
+     CALL test_select_element(cleanup, element_total_error)
+     IF (element_total_error == 0) error_string = success
+     write(*, fmt = '(23a)', advance = 'no') ' Element selection test'     
+     write(*, fmt = '(47x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + element_total_error 
+
+
+!     write(*,*)
+!     write(*,*) '========================================='
+!     write(*,*) 'Testing DATATYPE interface               '
+!     write(*,*) '========================================='
+
+     error_string = failure
+     CALL basic_data_type_test(cleanup, basic_datatype_total_error)
+     IF (basic_datatype_total_error == 0) error_string = success
+     write(*, fmt = '(20a)', advance = 'no') ' Basic datatype test'     
+     write(*, fmt = '(50x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + basic_datatype_total_error 
+
+     error_string = failure
+     CALL compoundtest(cleanup, total_error_compoundtest)
+     IF (total_error_compoundtest == 0) error_string = success
+     write(*, fmt = '(23a)', advance = 'no') ' Compound datatype test'     
+     write(*, fmt = '(47x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + total_error_compoundtest
+
+     error_string = failure
+     CALL enumtest(cleanup, enum_total_error)
+     IF (enum_total_error == 0) error_string = success
+     write(*, fmt = '(19a)', advance = 'no') ' Enum datatype test'     
+     write(*, fmt = '(51x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + enum_total_error 
+
+
+!     write(*,*)
+!     write(*,*) '========================================='
+!     write(*,*) 'Testing PROPERTY interface               ' 
+!     write(*,*) '========================================='
+
+     error_string = failure
+     CALL external_test(cleanup, external_total_error)
+     IF (external_total_error == 0) error_string = success
+     write(*, fmt = '(22a)', advance = 'no') ' External dataset test'     
+     write(*, fmt = '(48x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + external_total_error 
+    
+     error_string = failure
+     cleanup = .FALSE.
+     CALL multi_file_test(cleanup, multi_file_total_error)
+     IF (multi_file_total_error == 0) error_string = success
+     write(*, fmt = '(23a)', advance = 'no') ' Multi file driver test'     
+     write(*, fmt = '(47x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + multi_file_total_error 
+    
+!     write(*,*)
+!     write(*,*) '========================================='
+!     write(*,*) 'Testing ATTRIBUTE interface              ' 
+!     write(*,*) '========================================='
+
+     error_string = failure
+     CALL attribute_test(cleanup, attribute_total_error)
+     write(*, fmt = '(15a)', advance = 'no') ' Attribute test'     
+     write(*, fmt = '(55x,a)', advance = 'no')  ' '
+     IF (attribute_total_error == 0) error_string = success
+     write(*, fmt = e_format) error_string
+     total_error = total_error + attribute_total_error 
+
+!     write(*,*)
+!     write(*,*) '========================================='
+!     write(*,*) 'Testing IDENTIFIER interface             '
+!     write(*,*) '========================================='
+
+     error_string = failure
+     CALL identifier_test(cleanup, identifier_total_error)
+     IF (identifier_total_error == 0) error_string = success
+     write(*, fmt = '(16a)', advance = 'no') ' Identifier test'     
+     write(*, fmt = '(54x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + identifier_total_error 
+
+     error_string = failure
+     CALL filters_test(cleanup, z_total_error)
+     IF (z_total_error == 0) error_string = success
+     write(*, fmt = '(13a)', advance = 'no') ' Filters test'     
+     write(*, fmt = '(57x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + z_total_error 
+
+     CALL szip_test(szip_flag, cleanup, sz_total_error)
+     IF (sz_total_error == 0) error_string = success
+     ! Reset the flag is compression was not available 
+     IF (.NOT. szip_flag) error_string = skip
+     IF (sz_total_error .gt. 0) error_string = failure
+     write(*, fmt = '(18a)', advance = 'no') ' SZIP filter test'     
+     write(*, fmt = '(53x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     if(sz_total_error .gt. 0) total_error = total_error + sz_total_error 
+
+!     write(*,*)
+!     write(*,*) '========================================='
+!     write(*,*) 'Testing GROUP interface             '
+!     write(*,*) '========================================='
+
+     error_string = failure
+     CALL group_test(cleanup, group_total_error)
+     IF (group_total_error == 0) error_string = success
+     write(*, fmt = '(11a)', advance = 'no') ' Group test'     
+     write(*, fmt = '(59x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + group_total_error 
+
+     error_string = failure
+     CALL error_report_test(cleanup, error_total_error)
+     IF (error_total_error == 0) error_string = success
+     write(*, fmt = '(11a)', advance = 'no') ' Error test'     
+     write(*, fmt = '(59x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + error_total_error 
+
+     error_string = failure
+     CALL vl_test_integer(cleanup, vl_total_error)
+     CALL vl_test_real(cleanup, vl_total_error)
+     CALL vl_test_string(cleanup, vl_total_error)
+     IF (vl_total_error == 0) error_string = success
+     write(*, fmt = '(11a)', advance = 'no') ' VL test'     
+     write(*, fmt = '(62x,a)', advance = 'no')  ' '
+     write(*, fmt = e_format) error_string
+     total_error = total_error + vl_total_error 
+
+     write(*,*)
+
+     write(*,*) '                  ============================================  '
+     write(*, fmt = '(19x, 27a)', advance='NO') ' FORTRAN tests completed with '
+     write(*, fmt = '(i4)', advance='NO') total_error
+     write(*, fmt = '(12a)' ) ' error(s) ! '
+     write(*,*) '                  ============================================  '
+
+     CALL h5close_f(error)
+
+     ! if errors detected, exit with non-zero code.
+     IF (total_error .ne. 0) CALL h5_exit_f (1)
+
+    END PROGRAM fortranlibtest
+
+

Added: packages/hdf5/branches/upstream/current/fortran/test/t.c
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/t.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/t.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,130 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "t.h"
+
+/*----------------------------------------------------------------------------
+ * Name:        h5_fixname_c
+ * Purpose:     Call h5_fixname to modify file name
+ * Inputs:      base_name - name of the file
+ *              base_namelen - name length
+ *              fapl - file access property list
+ *              full_name - buffer to return full name
+ *              full_namelen - name length
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Friday, September 13, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5_fixname_c(_fcd base_name, size_t_f *base_namelen, hid_t_f* fapl, _fcd full_name, size_t_f *full_namelen)
+{
+     int ret_value = -1;
+     char *c_base_name;
+     char *c_full_name;
+     hid_t c_fapl;
+
+     /*
+      * Define ifile access property list
+      */
+     c_fapl = (hid_t)*fapl;
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_base_name = (char *)HD5f2cstring(base_name, (size_t)*base_namelen);
+     if (c_base_name == NULL) goto DONE;
+     c_full_name = (char *) HDmalloc((size_t)*full_namelen + 1);
+     if (c_full_name == NULL) goto DONE;
+
+     /*
+      * Call h5_fixname function.
+      */
+     if (NULL != h5_fixname(c_base_name, c_fapl, c_full_name, (size_t)*full_namelen + 1)) {
+         HD5packFstring(c_full_name, _fcdtocp(full_name), (size_t)*full_namelen);
+         ret_value = 0;
+         goto DONE;
+     }
+
+DONE:
+     if (NULL != c_base_name) HDfree(c_base_name);
+     if (NULL != c_full_name) HDfree(c_full_name);
+     return ret_value;
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5_cleanup_c
+ * Purpose:     Call h5_cleanup to clean temporary files.
+ * Inputs:      base_name - name of the file
+ *              base_namelen - name length
+ *              fapl - file access property list
+ * Returns:     0 on success, -1 on failure
+ * Programmer:  Elena Pourmal
+ *              Thursday, September 19, 2002
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+int_f
+nh5_cleanup_c(_fcd base_name, size_t_f *base_namelen, hid_t_f* fapl)
+{
+     char filename[1024];
+     int ret_value = -1;
+     char *c_base_name[1];
+     hid_t c_fapl;
+
+     /*
+      * Define ifile access property list
+      */
+     c_fapl = (hid_t)*fapl;
+     /*c_fapl = H5Pcreate(H5P_FILE_ACCESS);*/
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_base_name[0] = (char *)HD5f2cstring(base_name, (size_t)*base_namelen);
+     if (c_base_name[0] == NULL) goto DONE;
+
+     /*
+      * Call h5_cleanup function.
+      */
+     /*if (h5_cleanup(c_base_name, c_fapl) != 0) {
+     ret_value = 0;
+     goto DONE;
+     }
+*/
+     h5_fixname(c_base_name[0], c_fapl, filename, sizeof(filename));
+     HDremove(filename);
+     ret_value =0;
+
+DONE:
+     if (NULL != c_base_name[0]) HDfree(c_base_name[0]);
+     return ret_value;
+
+}
+
+/*----------------------------------------------------------------------------
+ * Name:        h5_exit_c
+ * Purpose:     Call 'exit()' to terminate application.  Be careful not to
+ *              overflow the exit value range since UNIX supports a very
+ *              small range such as 1 byte.  Therefore, exit(256) may end
+ *              up as exit(0).
+ * Inputs:      status - status for exit() to return
+ * Returns:     none
+ * Programmer:  Quincey Koziol
+ *              Tuesday, December 14, 2004
+ * Modifications:
+ *---------------------------------------------------------------------------*/
+void
+nh5_exit_c(int_f *status)
+{
+    HDexit((int)*status);
+}   /* h5_exit_c */
+

Added: packages/hdf5/branches/upstream/current/fortran/test/t.h
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/t.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/t.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,42 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "../../src/hdf5.h"
+#include "../src/H5f90i.h"
+#include "../src/H5f90proto.h"
+
+char *h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size);
+
+/*
+ *  Functions from t.c
+ */
+#ifdef DF_CAPFNAMES
+#   define nh5_fixname_c              FNAME(H5_FIXNAME_C)
+#   define nh5_cleanup_c              FNAME(H5_CLEANUP_C)
+#   define nh5_exit_c                 FNAME(H5_EXIT_C)
+#else                                              /* !DF_CAPFNAMES */
+#   define nh5_fixname_c              FNAME(h5_fixname_c)
+#   define nh5_cleanup_c              FNAME(h5_cleanup_c)
+#   define nh5_exit_c                 FNAME(h5_exit_c)
+#endif                                             /* DF_CAPFNAMES */
+
+H5_FCTESTDLL int_f nh5_fixname_c
+(_fcd base_name, size_t_f *base_namelen, hid_t_f *fapl, _fcd full_name, size_t_f *full_namelen);
+
+H5_FCTESTDLL int_f nh5_cleanup_c
+(_fcd base_name, size_t_f *base_namelen, hid_t_f *fapl);
+
+H5_FCTESTDLL void nh5_exit_c
+(int_f *status);
+

Added: packages/hdf5/branches/upstream/current/fortran/test/tH5A.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/tH5A.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/tH5A.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,535 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+    SUBROUTINE attribute_test(cleanup, total_error)
+
+!   This subroutine tests following functionalities: 
+!   h5acreate_f,  h5awrite_f, h5aclose_f,h5aread_f, h5aopen_name_f,
+!   h5aget_name_f,h5aget_space_f, h5aget_type_f,
+! 
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+     LOGICAL, INTENT(IN)  :: cleanup
+     INTEGER, INTENT(OUT) :: total_error 
+
+     CHARACTER(LEN=5), PARAMETER :: filename = "atest"    !File name
+     CHARACTER(LEN=80) :: fix_filename 
+     CHARACTER(LEN=9), PARAMETER :: dsetname = "atestdset"        !Dataset name
+     CHARACTER(LEN=11), PARAMETER :: aname = "attr_string"   !String Attribute name
+     CHARACTER(LEN=14), PARAMETER :: aname2 = "attr_character"!Character Attribute name
+     CHARACTER(LEN=11), PARAMETER :: aname3 = "attr_double"   !DOuble Attribute name
+     CHARACTER(LEN=9), PARAMETER :: aname4 = "attr_real"      !Real Attribute name
+     CHARACTER(LEN=12), PARAMETER :: aname5 = "attr_integer"  !Integer Attribute name
+    
+     !
+     !data space rank and dimensions
+     !
+     INTEGER, PARAMETER :: RANK = 2
+     INTEGER, PARAMETER :: NX = 4
+     INTEGER, PARAMETER :: NY = 5
+
+
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+     INTEGER(HID_T) :: dataspace     ! Dataspace identifier for dataset 
+
+     INTEGER(HID_T) :: attr_id        !String Attribute identifier 
+     INTEGER(HID_T) :: attr2_id       !Character Attribute identifier 
+     INTEGER(HID_T) :: attr3_id       !Double Attribute identifier 
+     INTEGER(HID_T) :: attr4_id       !Real Attribute identifier 
+     INTEGER(HID_T) :: attr5_id       !Integer Attribute identifier 
+     INTEGER(HID_T) :: aspace_id      !String Attribute Dataspace identifier 
+     INTEGER(HID_T) :: aspace2_id     !Character Attribute Dataspace identifier 
+     INTEGER(HID_T) :: aspace3_id     !Double Attribute Dataspace identifier 
+     INTEGER(HID_T) :: aspace4_id     !Real Attribute Dataspace identifier 
+     INTEGER(HID_T) :: aspace5_id     !Integer Attribute Dataspace identifier 
+     INTEGER(HID_T) :: atype_id       !String Attribute Datatype identifier 
+     INTEGER(HID_T) :: atype2_id      !Character Attribute Datatype identifier 
+     INTEGER(HID_T) :: atype3_id      !Double Attribute Datatype identifier 
+     INTEGER(HID_T) :: atype4_id      !Real Attribute Datatype identifier 
+     INTEGER(HID_T) :: atype5_id      !Integer Attribute Datatype identifier 
+     INTEGER(HSIZE_T), DIMENSION(1) :: adims = (/2/) ! Attribute dimension
+     INTEGER(HSIZE_T), DIMENSION(1) :: adims2 = (/1/) ! Attribute dimension
+     INTEGER     ::   arank = 1                      ! Attribure rank
+     INTEGER(SIZE_T) :: attrlen    ! Length of the attribute string
+
+     INTEGER(HID_T) :: attr_space     !Returned String Attribute Space identifier 
+     INTEGER(HID_T) :: attr2_space    !Returned other Attribute Space identifier 
+     INTEGER(HID_T) :: attr_type      !Returned Attribute Datatype identifier
+     INTEGER(HID_T) :: attr2_type      !Returned CHARACTER Attribute Datatype identifier
+     INTEGER(HID_T) :: attr3_type      !Returned DOUBLE Attribute Datatype identifier
+     INTEGER(HID_T) :: attr4_type      !Returned REAL Attribute Datatype identifier
+     INTEGER(HID_T) :: attr5_type      !Returned INTEGER Attribute Datatype identifier
+     INTEGER        :: num_attrs      !number of attributes 
+     CHARACTER(LEN=256) :: attr_name    !buffer to put attr_name
+     INTEGER(SIZE_T)    ::  name_size = 80 !attribute name length
+
+     CHARACTER(LEN=35), DIMENSION(2) ::  attr_data  ! String attribute data
+     CHARACTER(LEN=35), DIMENSION(2) ::  aread_data ! Buffer to put read back 
+                                               ! string attr data
+     CHARACTER ::  attr_character_data = 'A'
+     DOUBLE PRECISION,  DIMENSION(1) ::  attr_double_data = 3.459
+     REAL,         DIMENSION(1) ::  attr_real_data = 4.0
+     INTEGER,      DIMENSION(1) ::  attr_integer_data = 5
+     INTEGER(HSIZE_T), DIMENSION(7) :: data_dims
+
+     
+     CHARACTER :: aread_character_data ! variable to put read back Character attr data
+     INTEGER, DIMENSION(1)  :: aread_integer_data ! variable to put read back integer attr data
+     DOUBLE PRECISION, DIMENSION(1)   :: aread_double_data ! variable to put read back double attr data
+     REAL, DIMENSION(1)  :: aread_real_data ! variable to put read back real attr data
+
+     !
+     !general purpose integer 
+     !         
+     INTEGER     ::   i, j
+     INTEGER     ::   error ! Error flag
+     
+     ! 
+     !The dimensions for the dataset.
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/NX,NY/)
+
+     !
+     !data buffers 
+     !         
+     INTEGER, DIMENSION(NX,NY) :: data_in, data_out
+
+
+     !
+     !Initialize data_in buffer
+     !
+     do i = 1, NX
+        do j = 1, NY
+           data_in(i,j) =  (i-1) + (j-1)
+        end do
+     end do
+     !
+     ! Initialize attribute's data
+     !
+     attr_data(1) = 'Dataset character attribute'
+     attr_data(2) = 'Some other string here     ' 
+     attrlen = len(attr_data(1)) 
+    
+     !
+     ! Create the file.
+     !
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify file name"
+              stop
+          endif
+     CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+     CALL check("h5fcreate_f",error,total_error)
+
+     !
+     !Create data space for the dataset. 
+     !
+     CALL h5screate_simple_f(RANK, dims, dataspace, error)
+     CALL check("h5screate_simple_f",error,total_error)
+
+     !
+     ! create dataset in the file. 
+     !
+     CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INTEGER, dataspace, &
+               dset_id, error)
+     CALL check("h5dcreate_f",error,total_error)
+
+     !
+     ! Write data_in to the dataset
+     !
+     data_dims(1) = NX
+     data_dims(2) = NY
+     CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data_in, data_dims, error)
+     CALL check("h5dwrite_f",error,total_error)
+
+     !
+     ! Create scalar data space for the String attribute. 
+     !
+     CALL h5screate_simple_f(arank, adims, aspace_id, error)
+     CALL check("h5screate_simple_f",error,total_error)
+     !
+     ! Create scalar data space for all other attributes. 
+     !
+     CALL h5screate_simple_f(arank, adims2, aspace2_id, error)
+     CALL check("h5screate_simple_f",error,total_error)
+
+     !
+     ! Create datatype for the String attribute.
+     !
+     CALL h5tcopy_f(H5T_NATIVE_CHARACTER, atype_id, error)
+     CALL check("h5tcopy_f",error,total_error)
+
+     CALL h5tset_size_f(atype_id, attrlen, error)
+     CALL check("h5tset_size_f",error,total_error)
+
+     !
+     ! Create datatype for the Character attribute.
+     !
+     CALL h5tcopy_f(H5T_NATIVE_CHARACTER, atype2_id, error)
+     CALL check("h5tcopy_f",error,total_error)
+     !
+     ! Create datatype for the Double attribute.
+     !
+     CALL h5tcopy_f(H5T_NATIVE_DOUBLE, atype3_id, error)
+     CALL check("h5tcopy_f",error,total_error)
+     !
+     ! Create datatype for the Real attribute.
+     !
+     CALL h5tcopy_f(H5T_NATIVE_REAL, atype4_id, error)
+     CALL check("h5tcopy_f",error,total_error)
+     !
+     ! Create datatype for the Integer attribute.
+     !
+     CALL h5tcopy_f(H5T_NATIVE_INTEGER, atype5_id, error)
+     CALL check("h5tcopy_f",error,total_error)
+
+
+     !
+     ! Create dataset String attribute.
+     !
+     CALL h5acreate_f(dset_id, aname, atype_id, aspace_id, &
+                      attr_id, error)
+     CALL check("h5acreate_f",error,total_error)
+
+
+     !
+     ! Create dataset CHARACTER attribute.
+     !
+     CALL h5acreate_f(dset_id, aname2, atype2_id, aspace2_id, &
+                      attr2_id, error)
+     CALL check("h5acreate_f",error,total_error)
+     
+
+     !
+     ! Create dataset DOUBLE attribute.
+     !
+     CALL h5acreate_f(dset_id, aname3, atype3_id, aspace2_id, &
+                      attr3_id, error)
+     CALL check("h5acreate_f",error,total_error)
+     !
+     ! Create dataset REAL attribute.
+     !
+     CALL h5acreate_f(dset_id, aname4, atype4_id, aspace2_id, &
+                      attr4_id, error)
+     CALL check("h5acreate_f",error,total_error)
+     !
+     ! Create dataset INTEGER attribute.
+     !
+     CALL h5acreate_f(dset_id, aname5, atype5_id, aspace2_id, &
+                      attr5_id, error)
+     CALL check("h5acreate_f",error,total_error)
+     
+     !
+     ! Write the String attribute data.
+     !
+     data_dims(1) = 2
+     CALL h5awrite_f(attr_id, atype_id, attr_data, data_dims, error)
+     CALL check("h5awrite_f",error,total_error)
+      !
+     ! Write the Character attribute data.
+     !
+     CALL h5awrite_f(attr2_id, atype2_id, attr_character_data, data_dims, error)
+     CALL check("h5awrite_f",error,total_error)
+     !
+     ! Write the DOUBLE attribute data.
+     !
+     data_dims(1) = 1 
+     CALL h5awrite_f(attr3_id, atype3_id, attr_double_data, data_dims, error)
+     CALL check("h5awrite_f",error,total_error)
+     !
+     ! Write the Real attribute data.
+     !
+     data_dims(1) = 1 
+     CALL h5awrite_f(attr4_id, atype4_id, attr_real_data, data_dims, error)
+     CALL check("h5awrite_f",error,total_error)
+
+     !
+     ! Write the Integer attribute data.
+     !
+     data_dims(1) = 1 
+     CALL h5awrite_f(attr5_id, atype5_id, attr_integer_data, data_dims, error)
+     CALL check("h5awrite_f",error,total_error)
+    
+     !
+     ! Close the attribute. 
+     !
+     CALL h5aclose_f(attr_id, error)
+     CALL check("h5aclose_f",error,total_error)
+     CALL h5aclose_f(attr2_id, error)
+     CALL check("h5aclose_f",error,total_error)
+     CALL h5aclose_f(attr3_id, error)
+     CALL check("h5aclose_f",error,total_error)
+     CALL h5aclose_f(attr4_id, error)
+     CALL check("h5aclose_f",error,total_error)
+     CALL h5aclose_f(attr5_id, error)
+     CALL check("h5aclose_f",error,total_error)
+
+     CALL h5tclose_f(atype_id, error)
+     CALL check("h5tclose_f",error,total_error)
+     CALL h5tclose_f(atype2_id, error)
+     CALL check("h5tclose_f",error,total_error)
+     CALL h5tclose_f(atype3_id, error)
+     CALL check("h5tclose_f",error,total_error)
+     CALL h5tclose_f(atype4_id, error)
+     CALL check("h5tclose_f",error,total_error)
+     CALL h5tclose_f(atype5_id, error)
+     CALL check("h5tclose_f",error,total_error)
+
+     !
+     ! Terminate access to the data space.
+     !
+     CALL h5sclose_f(aspace_id, error)
+     CALL check("h5sclose_f",error,total_error)
+     CALL h5sclose_f(aspace2_id, error)
+     CALL check("h5sclose_f",error,total_error)
+     !
+     ! Terminate access to the dataset.
+     !
+     CALL h5dclose_f(dset_id, error)
+     CALL check("h5dclose_f",error,total_error)
+     !
+     ! Terminate access to the file.
+     !
+     CALL h5fclose_f(file_id, error)
+     CALL check("h5fclose_f",error,total_error)
+     !
+     ! Open file
+     !
+     CALL h5fopen_f(fix_filename, H5F_ACC_RDWR_F, file_id, error)
+     CALL check("h5open_f",error,total_error)
+     !
+     ! Reopen dataset
+     !
+     CALL h5dopen_f(file_id, dsetname, dset_id, error)
+     CALL check("h5dopen_f",error,total_error)
+     !
+     !open the String attrbute by name
+     !
+     CALL h5aopen_name_f(dset_id, aname, attr_id, error)
+     CALL check("h5aopen_name_f",error,total_error)
+
+     !
+     !open the CHARACTER attrbute by name
+     !
+     CALL h5aopen_name_f(dset_id, aname2, attr2_id, error)
+     CALL check("h5aopen_name_f",error,total_error)
+      !
+     !open the DOUBLE attrbute by name
+     !
+     CALL h5aopen_name_f(dset_id, aname3, attr3_id, error)
+     CALL check("h5aopen_name_f",error,total_error)
+     !
+     !open the REAL attrbute by name
+     !
+     CALL h5aopen_name_f(dset_id, aname4, attr4_id, error)
+     CALL check("h5aopen_name_f",error,total_error)
+
+     !
+     !open the INTEGER attrbute by name
+     !
+     CALL h5aopen_name_f(dset_id, aname5, attr5_id, error)
+     CALL check("h5aopen_idx_f",error,total_error)
+
+     !
+     !get the attrbute name
+     !
+     CALL h5aget_name_f(attr5_id, name_size, attr_name, error)
+     CALL check("h5aget_name_f",error,total_error)
+     if (attr_name(1:12) .ne. aname5) then
+       total_error = total_error + 1
+     end if
+     if (error .ne. 12) then
+       total_error = total_error + 1
+     end if
+       
+     !
+     !get the STRING attrbute space
+     !
+     CALL h5aget_space_f(attr_id, attr_space, error)
+     CALL check("h5aget_space_f",error,total_error)
+     !
+     !get other attrbute space
+     !
+     CALL h5aget_space_f(attr2_id, attr2_space, error)
+     CALL check("h5aget_space_f",error,total_error)
+     !
+     !get the string attrbute datatype
+     !
+     CALL h5aget_type_f(attr_id, attr_type, error)
+     CALL check("h5aget_type_f",error,total_error)
+     !
+     !get the character attrbute datatype
+     !
+     CALL h5aget_type_f(attr2_id, attr2_type, error)
+     CALL check("h5aget_type_f",error,total_error)
+     !
+     !get the double attrbute datatype
+     !
+     CALL h5aget_type_f(attr3_id, attr3_type, error)
+     CALL check("h5aget_type_f",error,total_error)
+     !
+     !get the real attrbute datatype
+     !
+     CALL h5aget_type_f(attr4_id, attr4_type, error)
+     CALL check("h5aget_type_f",error,total_error)
+
+     !
+     !get the integer attrbute datatype
+     !
+     CALL h5aget_type_f(attr5_id, attr5_type, error)
+     CALL check("h5aget_type_f",error,total_error)
+
+     !
+     !get number of attributes
+     !
+     CALL h5aget_num_attrs_f(dset_id, num_attrs, error)
+     CALL check("h5aget_num_attrs_f",error,total_error)
+     if (num_attrs .ne. 5) then
+       write(*,*) "got number of attributes wrong", num_attrs
+       total_error = total_error +1
+     end if
+
+     !
+     !set the read back data type's size
+     !
+     CALL h5tcopy_f(H5T_NATIVE_CHARACTER, atype_id, error)
+     CALL check("h5tcopy_f",error,total_error)
+
+     CALL h5tset_size_f(atype_id, attrlen, error)
+     CALL check("h5tset_size_f",error,total_error)
+     !
+     !read the string attribute data back to memory
+     !
+     data_dims(1) = 2
+     CALL h5aread_f(attr_id, atype_id, aread_data, data_dims, error)
+     CALL check("h5aread_f",error,total_error)
+
+     if ( (aread_data(1) .ne. attr_data(1)) .or. (aread_data(2) .ne. attr_data(2)) ) then
+         write(*,*) "Read back string attrbute is wrong", aread_data(1), aread_data(2)
+         total_error = total_error + 1  
+     end if
+     
+     !
+     !read the CHARACTER attribute data back to memory
+     !
+     CALL h5aread_f(attr2_id, H5T_NATIVE_CHARACTER, aread_character_data, data_dims, error)
+     CALL check("h5aread_f",error,total_error)
+     if (aread_character_data .ne. 'A' ) then
+         write(*,*) "Read back character attrbute is wrong ",aread_character_data
+         total_error = total_error + 1  
+     end if
+     !
+     !read the double attribute data back to memory
+     !
+     data_dims(1) = 1 
+     CALL h5aread_f(attr3_id, H5T_NATIVE_DOUBLE, aread_double_data, data_dims, error)
+     CALL check("h5aread_f",error,total_error)
+     if (aread_double_data(1) .ne. 3.459 ) then
+         write(*,*) "Read back double attrbute is wrong", aread_double_data(1)
+         total_error = total_error + 1
+     end if  
+     !
+     !read the real attribute data back to memory
+     !
+     data_dims(1) = 1 
+     CALL h5aread_f(attr4_id, H5T_NATIVE_REAL, aread_real_data, data_dims, error)
+     CALL check("h5aread_f",error,total_error)
+     if (aread_real_data(1) .ne. 4.0 ) then
+         write(*,*) "Read back real attrbute is wrong ", aread_real_data
+         total_error = total_error + 1 
+     end if 
+     !
+     !read the Integer attribute data back to memory
+     !
+     data_dims(1) = 1 
+     CALL h5aread_f(attr5_id, H5T_NATIVE_INTEGER, aread_integer_data, data_dims, error)
+     CALL check("h5aread_f",error,total_error)
+     if (aread_integer_data(1) .ne. 5 ) then
+         write(*,*) "Read back integer attrbute is wrong ", aread_integer_data
+         total_error = total_error + 1 
+     end if 
+     
+     !
+     ! Close the attribute. 
+     !
+     CALL h5aclose_f(attr_id, error)
+     CALL check("h5aclose_f",error,total_error)
+     CALL h5aclose_f(attr2_id, error)
+     CALL check("h5aclose_f",error,total_error)
+     CALL h5aclose_f(attr3_id, error)
+     CALL check("h5aclose_f",error,total_error)
+     CALL h5aclose_f(attr4_id, error)
+     CALL check("h5aclose_f",error,total_error)
+     CALL h5aclose_f(attr5_id, error)
+     CALL check("h5aclose_f",error,total_error)
+
+     !
+     ! Delete the attribute from the Dataset. 
+     !
+     CALL h5adelete_f(dset_id, aname, error)     
+     CALL check("h5adelete_f",error,total_error)
+
+     !
+     !get number of attributes
+     !
+     CALL h5aget_num_attrs_f(dset_id, num_attrs, error)
+     CALL check("h5aget_num_attrs_f",error,total_error)
+     if (num_attrs .ne. 4) then
+       write(*,*) "got number of attributes wrong", num_attrs
+       total_error = total_error +1
+     end if
+
+
+
+     CALL h5sclose_f(attr_space, error)
+     CALL check("h5sclose_f",error,total_error)
+     CALL h5sclose_f(attr2_space, error)
+     CALL check("h5sclose_f",error,total_error)
+
+     !
+     ! Terminate access to the data type.
+     !
+     CALL h5tclose_f(attr_type, error)
+     CALL check("h5tclose_f",error,total_error)
+     CALL h5tclose_f(attr2_type, error)
+     CALL check("h5tclose_f",error,total_error)
+     CALL h5tclose_f(attr3_type, error)
+     CALL check("h5tclose_f",error,total_error)
+     CALL h5tclose_f(attr4_type, error)
+     CALL check("h5tclose_f",error,total_error)
+     CALL h5tclose_f(attr5_type, error)
+     CALL check("h5tclose_f",error,total_error)
+
+     !   
+     ! End access to the dataset and release resources used by it.
+     ! 
+     CALL h5dclose_f(dset_id, error)
+     CALL check("h5dclose_f",error,total_error)
+
+     ! 
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+     CALL check("h5fclose_f",error,total_error)
+     !
+     ! Remove the file
+     !
+     if (cleanup) call h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+
+     RETURN
+     END SUBROUTINE attribute_test

Added: packages/hdf5/branches/upstream/current/fortran/test/tH5D.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/tH5D.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/tH5D.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,465 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! 
+!    Testing Dataset Interface functionality.
+!
+!
+!    The following subroutine tests the following functionalities:
+!    h5dcreate_f, h5dopen_f, h5dclose_f, h5dget_space_f, h5dget_type_f,
+!    h5dread_f, and h5dwrite_f
+!
+        SUBROUTINE datasettest(cleanup, total_error)
+        USE HDF5 ! This module contains all necessary modules 
+
+          IMPLICIT NONE
+          LOGICAL, INTENT(IN) :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+
+          CHARACTER(LEN=5), PARAMETER :: filename = "dsetf" ! File name
+          CHARACTER(LEN=80) :: fix_filename 
+          CHARACTER(LEN=4), PARAMETER :: dsetname = "dset"     ! Dataset name
+
+          INTEGER(HID_T) :: file_id       ! File identifier 
+          INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+          INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+          INTEGER(HID_T) :: dtype_id      ! Datatype identifier
+
+
+          INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/4,6/) ! Dataset dimensions
+          INTEGER     ::   rank = 2                        ! Dataset rank
+
+          INTEGER, DIMENSION(4,6) :: dset_data, data_out ! Data buffers
+          INTEGER     ::   error ! Error flag
+
+          INTEGER     :: i, j    !general purpose integers
+          INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+
+          !
+          ! Initialize the dset_data array.
+          !
+          do i = 1, 4
+             do j = 1, 6
+                dset_data(i,j) = (i-1)*6 + j;
+             end do
+          end do
+
+
+          !
+          ! Create a new file using default properties.
+          ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+              CALL check("h5fcreate_f", error, total_error)
+
+
+          ! 
+          ! Create the dataspace.
+          !
+          CALL h5screate_simple_f(rank, dims, dspace_id, error)
+              CALL check("h5screate_simple_f", error, total_error)
+
+
+          !
+          ! Create the dataset with default properties.
+          !
+          CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INTEGER, dspace_id, &
+                           dset_id, error)
+              CALL check("h5dcreate_f", error, total_error)
+
+          !
+          ! Write the dataset.
+          !
+          data_dims(1) = 4
+          data_dims(2) = 6 
+          CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, dset_data, data_dims, error)
+              CALL check("h5dwrite_f", error, total_error)
+
+
+          !   
+          ! End access to the dataset and release resources used by it.
+          ! 
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f", error, total_error)
+
+          !
+          ! Terminate access to the data space.
+          !
+          CALL h5sclose_f(dspace_id, error)
+              CALL check("h5sclose_f", error, total_error)
+
+          ! 
+          ! Close the file.
+          !
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f", error, total_error)
+
+          !
+          ! Open the existing file.
+          !
+          CALL h5fopen_f (fix_filename, H5F_ACC_RDWR_F, file_id, error)
+              CALL check("h5fopen_f", error, total_error)
+
+          !
+          ! Open the existing dataset. 
+          !
+          CALL h5dopen_f(file_id, dsetname, dset_id, error)
+              CALL check("h5dopen_f", error, total_error)
+
+          !
+          ! Get the dataset type. 
+          !
+          CALL h5dget_type_f(dset_id, dtype_id, error)
+              CALL check("h5dget_type_f", error, total_error)
+
+          !
+          ! Get the data space. 
+          !
+          CALL h5dget_space_f(dset_id, dspace_id, error)
+              CALL check("h5dget_space_f", error, total_error)
+
+          !
+          ! Read the dataset.
+          !
+          CALL h5dread_f(dset_id, H5T_NATIVE_INTEGER, data_out, data_dims, error)
+              CALL check("h5dread_f", error, total_error)
+
+          !
+          !Compare the data.
+          ! 
+          do i = 1, 4
+              do j = 1, 6
+                  IF (data_out(i,j) .NE. dset_data(i, j)) THEN 
+                      write(*, *) "dataset test error occured"
+                      write(*,*) "data read is not the same as the data writen"
+                  END IF
+              end do    
+          end do
+
+          !   
+          ! End access to the dataset and release resources used by it.
+          ! 
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f", error, total_error)
+
+          !
+          ! Terminate access to the data space.
+          !
+          CALL h5sclose_f(dspace_id, error)
+              CALL check("h5sclose_f", error, total_error)
+
+          !
+          ! Terminate access to the data type.
+          !
+          CALL h5tclose_f(dtype_id, error)
+              CALL check("h5tclose_f", error, total_error)
+          ! 
+          ! Close the file.
+          !
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f", error, total_error)
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+     
+          RETURN
+        END SUBROUTINE datasettest
+
+!
+!the following subroutine tests h5dextend_f functionality
+!
+
+        SUBROUTINE extenddsettest(cleanup, total_error)
+        USE HDF5 ! This module contains all necessary modules 
+
+          IMPLICIT NONE
+          LOGICAL, INTENT(IN)  :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+
+          !
+          !the dataset is stored in file "extf.h5"
+          !
+          CHARACTER(LEN=4), PARAMETER :: filename = "extf"
+          CHARACTER(LEN=80) :: fix_filename
+
+          !
+          !dataset name is "ExtendibleArray"
+          !
+          CHARACTER(LEN=15), PARAMETER :: dsetname = "ExtendibleArray"
+
+          !
+          !dataset rank is 2
+          !
+          INTEGER :: RANK = 2
+
+          INTEGER(HID_T) :: file_id       ! File identifier 
+          INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+          INTEGER(HID_T) :: dataspace     ! Dataspace identifier 
+          INTEGER(HID_T) :: memspace      ! memory Dataspace identifier 
+          INTEGER(HID_T) :: crp_list        ! dataset creatation property identifier 
+
+          !
+          !dataset dimensions at creation time
+          !
+          INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/3,3/)
+
+          !
+          !data dimensions 
+          !
+          INTEGER(HSIZE_T), DIMENSION(2) :: dims1 = (/10,3/)
+
+          !
+          !Maximum dimensions
+          !
+          INTEGER(HSIZE_T), DIMENSION(2) :: maxdims 
+
+          !
+          !data arrays for reading and writing 
+          !
+          INTEGER, DIMENSION(10,3) :: data_in, data_out
+
+          !
+          !Size of data in the file 
+          !
+          INTEGER(HSIZE_T), DIMENSION(2) :: size
+
+          !
+          !general purpose integer 
+          !
+          INTEGER :: i, j
+
+          !
+          !flag to check operation success 
+          !
+          INTEGER :: error 
+
+          !
+          !Variables used in reading data back
+          !  
+          INTEGER(HSIZE_T), DIMENSION(2) :: dimsr, maxdimsr
+          INTEGER :: rankr
+          INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+
+          !
+          !data initialization 
+          !
+          do i = 1, 10
+             do j = 1, 3
+                data_in(i,j) = 2
+             end do
+          end do
+
+          !
+          !Initialize FORTRAN predifined datatypes
+          !
+!          CALL h5init_types_f(error) 
+!               CALL check("h5init_types_f",error,total_error)
+
+          !
+          !Create a new file using default properties.
+          ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+               CALL check("h5fcreate_f",error,total_error)
+
+
+          !
+          !Create the data space with unlimited dimensions.
+          !
+          maxdims = (/H5S_UNLIMITED_F, H5S_UNLIMITED_F/)
+
+          CALL h5screate_simple_f(RANK, dims, dataspace, error, maxdims)
+               CALL check("h5screate_simple_f",error,total_error)
+
+          !
+          !Modify dataset creation properties, i.e. enable chunking
+          !
+          CALL h5pcreate_f(H5P_DATASET_CREATE_F, crp_list, error)
+              CALL check("h5pcreat_f",error,total_error)
+
+          CALL h5pset_chunk_f(crp_list, RANK, dims1, error)
+              CALL check("h5pset_chunk_f",error,total_error)
+
+          !
+          !Create a dataset with 3X3 dimensions using cparms creation propertie .
+          !
+          CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INTEGER, dataspace, &
+                           dset_id, error, crp_list )
+              CALL check("h5dcreate_f",error,total_error)
+
+          !
+          !Extend the dataset. This call assures that dataset is 3 x 3.
+          !
+          size(1) = 3
+          size(2) = 3
+          CALL h5dextend_f(dset_id, size, error)
+              CALL check("h5dextend_f",error,total_error)
+
+
+          !
+          !Extend the dataset. Dataset becomes 10 x 3.
+          !
+          size(1)   = 10;  
+          size(2)   = 3; 
+          CALL h5dextend_f(dset_id, size, error)
+              CALL check("h5dextend_f",error,total_error)
+
+          !
+          !Write the data of size 10X3 to the extended dataset.
+          !
+          data_dims(1) = 10
+          data_dims(2) = 3
+          CALL H5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data_in, data_dims, error)
+               CALL check("h5dwrite_f",error,total_error)
+
+          !
+          !Close the dataspace for the dataset.
+          !
+          CALL h5sclose_f(dataspace, error)
+              CALL check("h5sclose_f",error,total_error)
+
+          !
+          !Close the property list.
+          !
+          CALL h5pclose_f(crp_list, error)
+              CALL check("h5pclose_f",error,total_error)
+          !
+          !Close the dataset.
+          !
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f",error,total_error)
+
+          !
+          !Close the file.
+          !
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f",error,total_error)
+
+          !
+          !read the data back
+          !
+          !Open the file.
+          !
+          CALL h5fopen_f (fix_filename, H5F_ACC_RDONLY_F, file_id, error)
+              CALL check("hfopen_f",error,total_error)
+
+          !
+          !Open the  dataset.
+          !
+          CALL h5dopen_f(file_id, dsetname, dset_id, error)
+              CALL check("h5dopen_f",error,total_error)
+
+          !
+          !Get dataset's dataspace handle.
+          !
+          CALL h5dget_space_f(dset_id, dataspace, error)
+              CALL check("h5dget_space_f",error,total_error)
+
+          !
+          !Get dataspace's rank.
+          !
+          CALL h5sget_simple_extent_ndims_f(dataspace, rankr, error)
+              CALL check("h5sget_simple_extent_ndims_f",error,total_error)
+          IF (rankr .NE. RANK) then
+              write(*,*) "dataset rank error occured"
+              stop
+          END IF
+
+          !
+          !Get dataspace's dimensinons.
+          !
+          CALL h5sget_simple_extent_dims_f(dataspace, dimsr, maxdimsr, error)
+              CALL check("h5sget_simple_extent_dims_f",error,total_error)
+          IF ((dimsr(1) .NE. dims1(1)) .OR. (dimsr(2) .NE. dims1(2))) THEN
+              write(*,*) "dataset dimensions error occured"
+              stop
+          END IF
+
+          !
+          !Get creation property list.
+          !
+          CALL h5dget_create_plist_f(dset_id, crp_list, error)
+              CALL check("h5dget_create_plist_f",error,total_error)
+
+
+          !
+          !create memory dataspace.
+          !
+          CALL h5screate_simple_f(rankr, dimsr, memspace, error)
+              CALL check("h5screate_simple_f",error,total_error)
+
+          !
+          !Read data 
+          !
+          CALL H5dread_f(dset_id, H5T_NATIVE_INTEGER, data_out, data_dims, error, &
+                    memspace, dataspace)
+              CALL check("h5dread_f",error,total_error)
+
+
+          !
+          !Compare the data.
+          ! 
+          do i = 1, dims1(1)
+              do j = 1, dims1(2)
+                  IF (data_out(i,j) .NE. data_in(i, j)) THEN 
+                      write(*, *) "extend dataset test error occured"
+                      write(*, *) "read value is not the same as the written values"
+                  END IF
+              end do    
+          end do
+
+          !
+          !Close the dataspace for the dataset.
+          !
+          CALL h5sclose_f(dataspace, error)
+              CALL check("h5sclose_f",error,total_error)
+
+          !
+          !Close the memspace for the dataset.
+          !
+          CALL h5sclose_f(memspace, error)
+              CALL check("h5sclose_f",error,total_error)
+
+          !
+          !Close the property list.
+          !
+          CALL h5pclose_f(crp_list, error)
+              CALL check("h5pclose_f",error,total_error)
+
+          !
+          !Close the dataset.
+          !
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f",error,total_error)
+
+          !
+          !Close the file.
+          !
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f",error,total_error)
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+
+          RETURN
+        END SUBROUTINE extenddsettest 
+
+

Added: packages/hdf5/branches/upstream/current/fortran/test/tH5E.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/tH5E.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/tH5E.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,75 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+    SUBROUTINE error_report_test(cleanup, total_error)
+
+!   This subroutine tests following functionalities: h5eprint_f
+
+   USE HDF5 ! This module contains all necessary modules 
+
+     IMPLICIT NONE
+     LOGICAL, INTENT(IN)  :: cleanup
+     INTEGER, INTENT(OUT) :: total_error 
+
+     CHARACTER(LEN=6), PARAMETER :: filename = "etestf" ! File name
+     CHARACTER(LEN=80) :: fix_filename
+     CHARACTER(LEN=8), PARAMETER :: err_filename = "err_file"! Error output file
+     CHARACTER(LEN=80)  :: fix_err_filename
+          
+          
+
+     INTEGER(HID_T) :: file_id       ! File identifier
+     INTEGER(HID_T) :: grp_id        ! Group identifier
+     INTEGER :: error, tmp_error, err_flag
+      
+     err_flag = 0 
+     CALL h5eset_auto_f(err_flag, error)
+     CALL check("h5eprint_f",error, total_error)
+     !
+     ! Create a new file using default properties.
+     ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+     CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+     CALL check("h5fcreate_f",error,total_error)
+     
+     !
+     ! Try to open non-existing group in the file.
+     ! Error message should go to the err_file_name file.
+     !
+     CALL h5gopen_f(file_id, "Doesnotexist1", grp_id, tmp_error)
+          CALL h5_fixname_f(err_filename, fix_err_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+     CALL h5eprint_f(error, fix_err_filename)
+     CALL h5gopen_f(file_id, "Doesnotexist2", grp_id, tmp_error)
+     CALL h5eprint_f(error, fix_err_filename)
+    
+     ! 
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+     CALL check("h5fclose_f",error,total_error)
+
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+          if(cleanup) CALL h5_cleanup_f(err_filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+     RETURN
+     END SUBROUTINE error_report_test

Added: packages/hdf5/branches/upstream/current/fortran/test/tH5F.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/tH5F.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/tH5F.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,763 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! 
+!    Testing File Interface functionality.
+!
+!    In the mountingtest subroutine we create one file with a group in it, 
+!    and another file with a dataset. Mounting is used to
+!    access the dataset from the second file as a member of a group 
+!    in the first file. 
+!
+        SUBROUTINE mountingtest(cleanup, total_error)
+        USE HDF5  ! This module contains all necessary modules
+          IMPLICIT NONE
+          LOGICAL, INTENT(IN)  :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+
+          !
+          !the respective filename is "mount1.h5" and "mount2.h5"
+          !
+          CHARACTER(LEN=6)  :: filename1 
+          CHARACTER(LEN=6)  :: filename2
+          CHARACTER(LEN=80) :: fix_filename1
+          CHARACTER(LEN=80) :: fix_filename2
+
+          !
+          !data space rank and dimensions
+          !
+          INTEGER, PARAMETER :: RANK = 2
+          INTEGER, PARAMETER :: NX = 4
+          INTEGER, PARAMETER :: NY = 5
+
+          !
+          ! File identifiers
+          !
+          INTEGER(HID_T) :: file1_id, file2_id  
+
+          !
+          ! Group identifier
+          !
+          INTEGER(HID_T) :: gid 
+
+          !
+          ! dataset identifier
+          !
+          INTEGER(HID_T) :: dset_id
+
+          !
+          ! data space identifier
+          !
+          INTEGER(HID_T) :: dataspace
+
+          !
+          ! data type identifier
+          !
+          INTEGER(HID_T) :: dtype_id
+
+          ! 
+          !The dimensions for the dataset.
+          !
+          INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/NX,NY/)
+   
+          !
+          !return value for testing whether a file is in hdf5 format
+          !
+          LOGICAL     ::  status
+
+          !
+          !flag to check operation success 
+          !         
+          INTEGER     ::   error
+
+          !
+          !general purpose integer 
+          !         
+          INTEGER     ::   i, j
+
+          !
+          !data buffers 
+          !         
+          INTEGER, DIMENSION(NX,NY) :: data_in, data_out
+
+          INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+          filename1 = "mount1"
+          filename2 = "mount2"
+
+          do i = 1,80
+             fix_filename1(i:i) = " "
+             fix_filename2(i:i) = " "
+          enddo
+          !
+          !Initialize data_in buffer
+          !
+          do j = 1, NY
+             do i = 1, NX
+                data_in(i,j) =  (i-1) + (j-1)
+             end do
+          end do
+
+          !
+          ! Fix names of the files
+          !
+          CALL h5_fixname_f(filename1, fix_filename1, H5P_DEFAULT_F, error)
+          if(error .ne. 0) stop 
+          CALL h5_fixname_f(filename2, fix_filename2, H5P_DEFAULT_F, error)
+          if(error .ne. 0) stop 
+
+          !
+          !Create first file "mount1.h5" using default properties.
+          ! 
+          CALL h5fcreate_f(fix_filename1, H5F_ACC_TRUNC_F, file1_id, error)
+               CALL check("h5fcreate_f",error,total_error)
+        
+
+          !
+          !Create group "/G" inside file "mount1.h5".
+          ! 
+          CALL h5gcreate_f(file1_id, "/G", gid, error)
+               CALL check("h5gcreate_f",error,total_error)
+
+          !
+          !close file and group identifiers.
+          ! 
+          CALL h5gclose_f(gid, error)
+               CALL check("h5gclose_f",error,total_error)
+          CALL h5fclose_f(file1_id, error)
+               CALL check("h5fclose_f",error,total_error)
+
+          !
+          !Create second file "mount2.h5" using default properties.
+          ! 
+          CALL h5fcreate_f(fix_filename2, H5F_ACC_TRUNC_F, file2_id, error)
+               CALL check("h5fcreate_f",error,total_error)
+
+          !
+          !Create data space for the dataset. 
+          !
+          CALL h5screate_simple_f(RANK, dims, dataspace, error)
+               CALL check("h5screate_simple_f",error,total_error)
+
+          !
+          !Create dataset "/D" inside file "mount2.h5".
+          ! 
+          CALL h5dcreate_f(file2_id, "/D", H5T_NATIVE_INTEGER, dataspace, &
+               dset_id, error)
+              CALL check("h5dcreate_f",error,total_error)
+
+          !
+          ! Write data_in to the dataset
+          !
+          data_dims(1) = NX
+          data_dims(2) = NY
+          CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data_in, data_dims, error)
+               CALL check("h5dwrite_f",error,total_error)
+
+          !
+          !close file, dataset and dataspace identifiers.
+          ! 
+          CALL h5sclose_f(dataspace, error)
+              CALL check("h5sclose_f",error,total_error)
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f",error,total_error)
+          CALL h5fclose_f(file2_id, error)
+              CALL check("h5fclose_f",error,total_error)
+
+          !
+          !test whether files are in hdf5 format
+          !
+          CALL h5fis_hdf5_f(fix_filename1, status, error)
+               CALL check("h5fis_hdf5_f",error,total_error)
+          IF ( .NOT. status ) THEN
+              write(*,*) "File ", fix_filename1, " is not in hdf5 format"
+              stop
+          END IF
+
+          CALL h5fis_hdf5_f(fix_filename2, status, error)
+               CALL check("h5fis_hdf5_f",error,total_error)
+          IF ( .NOT. status ) THEN
+              write(*,*) "File ", fix_filename2, " is not in hdf5 format"
+              stop
+          END IF
+
+          !
+          !reopen both files.
+          ! 
+          CALL h5fopen_f (fix_filename1, H5F_ACC_RDWR_F, file1_id, error)
+              CALL check("hfopen_f",error,total_error)
+          CALL h5fopen_f (fix_filename2, H5F_ACC_RDWR_F, file2_id, error)
+              CALL check("h5fopen_f",error,total_error)
+
+          !
+          !mount the second file under the first file's "/G" group.
+          ! 
+          CALL h5fmount_f (file1_id, "/G", file2_id, error)
+              CALL check("h5fmount_f",error,total_error)
+
+
+          !
+          !Access dataset D in the first file under /G/D name.
+          ! 
+          CALL h5dopen_f(file1_id, "/G/D", dset_id, error)
+              CALL check("h5dopen_f",error,total_error)
+
+          !
+          !Get dataset's data type.
+          ! 
+          CALL h5dget_type_f(dset_id, dtype_id, error)
+              CALL check("h5dget_type_f",error,total_error)
+
+          !
+          !Read the dataset.
+          ! 
+          CALL h5dread_f(dset_id, dtype_id, data_out, data_dims, error)
+              CALL check("h5dread_f",error,total_error)
+
+          !
+          !Compare the data.
+          ! 
+          do i = 1, NX
+              do j = 1, NY
+                  IF (data_out(i,j) .NE. data_in(i, j)) THEN 
+                      write(*, *) "mounting test error occured"
+                  END IF
+              end do    
+          end do
+
+
+          !
+          !Close dset_id and dtype_id.
+          ! 
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f",error,total_error)
+          CALL h5tclose_f(dtype_id, error)
+              CALL check("h5tclose_f",error,total_error)
+
+          !
+          !unmount the second file.
+          ! 
+          CALL h5funmount_f(file1_id, "/G", error);
+              CALL check("h5funmount_f",error,total_error)
+
+          !
+          !Close both files.
+          ! 
+          CALL h5fclose_f(file1_id, error)
+              CALL check("h5fclose_f",error,total_error)
+          CALL h5fclose_f(file2_id, error)
+              CALL check("h5fclose_f",error,total_error)
+
+          if(cleanup) CALL h5_cleanup_f(filename1, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+          if(cleanup) CALL h5_cleanup_f(filename2, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+          RETURN
+        END SUBROUTINE mountingtest
+
+!
+!    The following subroutine tests h5freopen_f.
+!    It creates the file which has name "reopen.h5" and 
+!    the "/dset" dataset inside the file.
+!    writes the data to the file, close the dataset.
+!    Reopen the file based upon the file_id, open the 
+!    dataset use the reopen_id then reads the 
+!    dataset back to memory to test whether the data
+!    read is identical to the data written  
+!
+
+        SUBROUTINE reopentest(cleanup, total_error)
+        USE HDF5  ! This module contains all necessary modules
+          IMPLICIT NONE
+          LOGICAL, INTENT(IN) :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+     
+          !
+          CHARACTER(LEN=6), PARAMETER :: filename = "reopen"
+          CHARACTER(LEN=80)  :: fix_filename 
+
+          INTEGER(HID_T) :: file_id, reopen_id  ! File identifiers 
+          INTEGER(HID_T) :: dset_id             ! Dataset identifier 
+
+          !
+          !dataset name is "dset"
+          !
+          CHARACTER(LEN=4), PARAMETER :: dsetname = "dset"
+
+          !
+          !data space rank and dimensions
+          !
+          INTEGER, PARAMETER :: RANK = 2
+          INTEGER, PARAMETER :: NX = 4
+          INTEGER, PARAMETER :: NY = 6
+
+          !
+          ! data space identifier
+          !
+          INTEGER(HID_T) :: dataspace
+
+          ! 
+          !The dimensions for the dataset.
+          !
+          INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/NX,NY/)
+
+          !
+          !flag to check operation success
+          !          
+          INTEGER     ::   error
+
+          !
+          !general purpose integer
+          !          
+          INTEGER     ::  i, j
+
+          !
+          !array to store data 
+          !
+          INTEGER, DIMENSION(4,6) :: dset_data, data_out
+          INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+          INTEGER(HSIZE_T)  :: file_size
+          CHARACTER(LEN=80) :: file_name
+          INTEGER(SIZE_T) :: name_size
+     
+          !
+          !initialize the dset_data array which will be written to the "/dset"
+          !
+          do j = 1, NY
+               do i = 1, NX
+                    dset_data(i,j) = (i-1)*6 + j;
+               end do
+          end do
+
+          !
+          !Initialize FORTRAN predifined datatypes
+          !
+!          CALL h5init_types_f(error) 
+!               CALL check("h5init_types_f",error,total_error)
+
+
+          !
+          !Create file "reopen.h5" using default properties.
+          ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+               CALL check("h5fcreate_f",error,total_error)
+
+          !
+          !Create data space for the dataset. 
+          !
+          CALL h5screate_simple_f(RANK, dims, dataspace, error)
+               CALL check("h5screate_simple_f",error,total_error)
+
+          !
+          !Create dataset "/dset" inside the file .
+          ! 
+          CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INTEGER, dataspace, &
+               dset_id, error)
+              CALL check("h5dcreate_f",error,total_error)
+
+         !
+         !Write the dataset.
+         !
+         data_dims(1) = NX
+         data_dims(2) = NY
+         CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, dset_data, data_dims, error)
+              CALL check("h5dwrite_f",error,total_error)
+
+         !
+         !close the dataset.
+         !
+         CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f",error,total_error)
+
+         !
+         !close the dataspace.
+         !
+         CALL h5sclose_f(dataspace, error)
+              CALL check("h5sclose_f",error,total_error)
+
+         !
+         !Reopen file dsetf.h5. 
+         !
+         CALL h5freopen_f(file_id, reopen_id, error)
+              CALL check("h5freopen_f",error,total_error)
+         !
+         !Check file size
+         !
+         CALL h5fget_filesize_f(file_id, file_size, error)
+              CALL check("h5fget_filesize_f",error,total_error)
+
+         !
+         !Open the dataset based on the reopen_id. 
+         !
+         CALL h5dopen_f(reopen_id, dsetname, dset_id, error)
+              CALL check("h5dopen_f",error,total_error)
+         !
+         !Get file name from the dataset identifier
+         !
+         CALL h5fget_name_f(dset_id, file_name, name_size, error)
+              CALL check("h5fget_name_f",error,total_error)
+              IF(file_name(1:name_size) .NE. fix_filename(1:name_size)) THEN
+                 write(*,*) "file name obtained from the dataset id is incorrect"
+              END IF 
+
+         !
+         !Read the dataset.
+         !
+         CALL h5dread_f(dset_id, H5T_NATIVE_INTEGER, data_out, data_dims, error)
+              CALL check("h5dread_f",error,total_error)
+
+          !
+          !Compare the data.
+          ! 
+          do i = 1, NX
+              do j = 1, NY
+                  IF (data_out(i,j) .NE. dset_data(i, j)) THEN 
+                      write(*, *) "reopen test error occured"
+                  END IF
+              end do    
+          end do
+
+
+         !
+         !Close the dataset.
+         !
+         CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f",error,total_error)
+
+         !
+         !Close the file identifiers.
+         !
+         CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f",error,total_error)
+         CALL h5fclose_f(reopen_id, error)
+              CALL check("h5fclose_f",error,total_error)
+     
+
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+          RETURN
+
+        END SUBROUTINE reopentest
+
+!
+!    The following example demonstrates how to get creation property list,
+!    and access property list.
+!    We first create a file using the default creation and access property
+!    list. Then, the file was closed and reopened. We then get the
+!    creation and access property lists of the first file. The second file is
+!    created using the got property lists 
+
+        SUBROUTINE plisttest(cleanup, total_error)
+         USE HDF5  ! This module contains all necessary modules
+          IMPLICIT NONE
+          LOGICAL, INTENT(IN)  :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+
+          !
+          !file names are "plist1.h5" and "plist2.h5"
+          !
+          CHARACTER(LEN=6), PARAMETER :: filename1 = "plist1"
+          CHARACTER(LEN=80) :: fix_filename1
+          CHARACTER(LEN=6), PARAMETER :: filename2 = "plist2"
+          CHARACTER(LEN=80) :: fix_filename2
+
+          INTEGER(HID_T) :: file1_id, file2_id   ! File identifiers
+          INTEGER(HID_T) :: prop_id    ! File creation property list identifier
+          INTEGER(HID_T) :: access_id  ! File Access property list identifier
+
+          !flag to check operation success          
+          INTEGER     ::   error
+
+          !
+          !Create a file1 using default properties.
+          ! 
+          CALL h5_fixname_f(filename1, fix_filename1, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify file name"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename1, H5F_ACC_TRUNC_F, file1_id, error)
+              CALL check("h5fcreate_f",error,total_error)
+
+          !
+          !Terminate access to the file.
+          !
+          CALL h5fclose_f(file1_id, error)
+              CALL check("h5fclose_f",error,total_error)
+
+          !
+          !Open an existing file.
+          !
+          CALL h5fopen_f (fix_filename1, H5F_ACC_RDWR_F, file1_id, error)
+              CALL check("h5fopen_f",error,total_error)
+
+          !
+          !get the creation property list.
+          !
+          CALL h5fget_create_plist_f(file1_id, prop_id, error)
+              CALL check("h5fget_create_plist_f",error,total_error)
+
+          !
+          !get the access property list.
+          !
+          CALL h5fget_access_plist_f(file1_id, access_id, error)
+              CALL check("h5fget_access_plist_f",error,total_error)
+
+          !
+          !based on the creation property list id and access property list id
+          !create a new file
+          !
+          CALL h5_fixname_f(filename2, fix_filename2, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify file name"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename2, H5F_ACC_TRUNC_F, file2_id, error, &
+               prop_id, access_id)
+              CALL check("h5create_f",error,total_error)
+
+          !
+          !Close all the property lists.
+          !
+          CALL h5pclose_f(prop_id, error)
+              CALL check("h5pclose_f",error,total_error)
+          CALL h5pclose_f(access_id, error)
+              CALL check("h5pclose_f",error,total_error)
+          
+          !
+          !Terminate access to the files.
+          !
+          CALL h5fclose_f(file1_id, error)
+              CALL check("h5fclose_f",error,total_error)
+
+          CALL h5fclose_f(file2_id, error)
+              CALL check("h5fclose_f",error,total_error)
+
+          if(cleanup) CALL h5_cleanup_f(filename1, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+          if(cleanup) CALL h5_cleanup_f(filename2, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+          RETURN
+
+        END SUBROUTINE plisttest
+              
+     
+!
+!    The following subroutine tests h5pget(set)_fclose_degree_f
+!
+
+        SUBROUTINE file_close(cleanup, total_error)
+        USE HDF5  ! This module contains all necessary modules
+          IMPLICIT NONE
+          LOGICAL, INTENT(IN) :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+          INTEGER              :: error
+     
+          !
+          CHARACTER(LEN=10), PARAMETER :: filename = "file_close"
+          CHARACTER(LEN=80)  :: fix_filename 
+
+          INTEGER(HID_T) :: fid, fid_d, fid1, fid2, fid3  ! File identifiers 
+          INTEGER(HID_T) :: fapl, fapl1, fapl2, fapl3 ! File access identifiers
+          INTEGER(HID_T) :: fid_d_fapl, fid1_fapl     ! File access identifiers
+          LOGICAL        :: flag
+          INTEGER        :: obj_count, obj_countf
+          INTEGER(HID_T), ALLOCATABLE, DIMENSION(:) :: obj_ids
+          INTEGER        :: i
+          
+          CALL h5eset_auto_f(0, error)
+
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, fid, error)
+               CALL check("h5fcreate_f",error,total_error)
+
+          CALL h5pcreate_f(H5P_FILE_ACCESS_F, fapl, error)
+               CALL check("h5pcreate_f",error,total_error)
+          CALL h5pset_fclose_degree_f(fapl, H5F_CLOSE_DEFAULT_F, error)
+               CALL check("h5pset_fclose_degree_f",error,total_error)
+
+
+          CALL h5pcreate_f(H5P_FILE_ACCESS_F, fapl1, error)
+               CALL check("h5pcreate_f",error,total_error)
+          CALL h5pset_fclose_degree_f(fapl1, H5F_CLOSE_WEAK_F, error)
+               CALL check("h5pset_fclose_degree_f",error,total_error)
+
+
+          CALL h5pcreate_f(H5P_FILE_ACCESS_F, fapl2, error)
+               CALL check("h5pcreate_f",error,total_error)
+          CALL h5pset_fclose_degree_f(fapl2, H5F_CLOSE_SEMI_F, error)
+               CALL check("h5pset_fclose_degree_f",error,total_error)
+
+          CALL h5pcreate_f(H5P_FILE_ACCESS_F, fapl3, error)
+               CALL check("h5pcreate_f",error,total_error)
+          CALL h5pset_fclose_degree_f(fapl3, H5F_CLOSE_STRONG_F, error)
+               CALL check("h5pset_fclose_degree_f",error,total_error)
+
+          CALL h5fopen_f(fix_filename, H5F_ACC_RDWR_F, fid1, error, access_prp=fapl1)
+               CALL check("h5fopen_f",error,total_error)
+          CALL h5fopen_f(fix_filename, H5F_ACC_RDWR_F, fid_d, error, access_prp=fapl)
+               CALL check("h5fopen_f",error,total_error)
+          CALL h5fget_access_plist_f(fid1, fid1_fapl, error)
+               CALL check("h5fget_access_plist_f",error,total_error)
+          CALL h5fget_access_plist_f(fid_d, fid_d_fapl, error)
+               CALL check("h5fget_access_plist_f",error,total_error)
+
+          CALL h5pequal_f(fid_d_fapl, fid1_fapl, flag, error)
+               CALL check("h5pequal_f",error,total_error)
+          if (.NOT. flag) then
+               write(*,*) " File access lists should be equal, error "
+               total_error=total_error + 1
+          endif
+
+          CALL h5fopen_f(fix_filename, H5F_ACC_RDWR_F, fid2, error, access_prp=fapl2)
+               if( error .ne. -1) then
+                   total_error = total_error + 1
+                   write(*,*) " Open with H5F_CLOSE_SEMI should fail "
+               endif
+          CALL h5fopen_f(fix_filename, H5F_ACC_RDWR_F, fid3, error, access_prp=fapl3)
+               if( error .ne. -1) then
+                   total_error = total_error + 1
+                   write(*,*) " Open with H5F_CLOSE_STRONG should fail "
+               endif
+
+          CALL h5fget_obj_count_f(fid1, H5F_OBJ_ALL_F, obj_count, error)
+               CALL check("h5fget_obj_count_f",error,total_error)
+               if(error .eq.0 .and. obj_count .ne. 3) then
+                 total_error = total_error + 1
+                 write(*,*) "Wrong number of open objects reported, error"
+               endif
+          CALL h5fget_obj_count_f(fid1, H5F_OBJ_FILE_F, obj_countf, error)
+               CALL check("h5fget_obj_count_f",error,total_error)
+               if(error .eq.0 .and. obj_countf .ne. 3) then
+                 total_error = total_error + 1
+                 write(*,*) "Wrong number of open objects reported, error"
+               endif
+          allocate(obj_ids(obj_countf), stat = error) 
+          CALL h5fget_obj_ids_f(fid, H5F_OBJ_FILE_F, -1, obj_ids, error)
+               CALL check("h5fget_obj_ids_f",error,total_error)
+          if(error .eq. 0) then
+             do i = 1, obj_countf
+                    CALL h5fclose_f(obj_ids(i), error)
+                         CALL check("h5fclose_f",error,total_error)
+             enddo
+          endif
+          
+          CALL h5fclose_f(fid, error)
+              if(error .eq. 0) then
+                 total_error = total_error + 1
+                 write(*,*) "File should be closed at this point, error"
+              endif 
+          CALL h5fclose_f(fid1, error)
+              if(error .eq. 0) then
+                 total_error = total_error + 1
+                 write(*,*) "File should be closed at this point, error"
+              endif 
+          CALL h5fclose_f(fid_d, error)
+              if(error .eq. 0) then
+                 total_error = total_error + 1
+                 write(*,*) "File should be closed at this point, error"
+              endif 
+
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+          deallocate(obj_ids)
+          RETURN
+
+        END SUBROUTINE file_close 
+
+!
+!    The following subroutine tests h5fget_freespace_f
+!
+
+        SUBROUTINE file_space(cleanup, total_error)
+        USE HDF5  ! This module contains all necessary modules
+          IMPLICIT NONE
+          LOGICAL, INTENT(IN) :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+          INTEGER              :: error
+     
+          !
+          CHARACTER(LEN=10), PARAMETER :: filename = "file_space"
+          CHARACTER(LEN=3), PARAMETER :: grpname = "grp"
+          CHARACTER(LEN=80)  :: fix_filename 
+
+          INTEGER(HID_T) :: fid ! File identifiers 
+          INTEGER(HSSIZE_T) :: free_space
+          INTEGER(HID_T) :: group_id      ! Group identifier 
+          
+          CALL h5eset_auto_f(0, error)
+
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, fid, error)
+               CALL check("h5fcreate_f",error,total_error)
+
+          CALL h5fget_freespace_f(fid, free_space, error)
+               CALL check("h5fget_freespace_f",error,total_error)
+               if(error .eq.0 .and. free_space .ne. 0) then
+                 total_error = total_error + 1
+                 write(*,*) "Wrong amount of free space reported, ", free_space
+               endif
+
+          ! Create group in the file.
+          CALL h5gcreate_f(fid, grpname, group_id, error)
+          CALL check("h5gcreate_f",error,total_error)
+
+          ! Close group
+          CALL h5gclose_f(group_id, error)
+          CALL check("h5gclose_f", error, total_error)
+          
+          ! Check the free space now
+          CALL h5fget_freespace_f(fid, free_space, error)
+               CALL check("h5fget_freespace_f",error,total_error)
+               if(error .eq.0 .and. free_space .ne. 0) then
+                 total_error = total_error + 1
+                 write(*,*) "Wrong amount of free space reported, ", free_space
+               endif
+
+          !Unlink the group
+          CALL h5gunlink_f(fid, grpname, error)
+          CALL check("h5gunlink_f", error, total_error)
+
+          ! Check the free space now
+          CALL h5fget_freespace_f(fid, free_space, error)
+               CALL check("h5fget_freespace_f",error,total_error)
+               if(error .eq.0 .and. free_space .ne. 976) then
+                 total_error = total_error + 1
+                 write(*,*) "Wrong amount of free space reported, ", free_space
+               endif
+
+          CALL h5fclose_f(fid, error)
+              CALL check("h5fclose_f",error,total_error)
+
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+          RETURN
+
+        END SUBROUTINE file_space 
+
+
+

Added: packages/hdf5/branches/upstream/current/fortran/test/tH5G.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/tH5G.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/tH5G.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,244 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+    SUBROUTINE group_test(cleanup, total_error)
+
+!   This subroutine tests following functionalities: 
+!   h5gcreate_f, h5gopen_f, h5gclose_f, (?)h5gget_obj_info_idx_f,  h5gn_members_f
+!   h5glink(2)_f, h5gunlink_f, h5gmove(2)_f,  h5gget_linkval_f, h5gset_comment_f,
+!   h5gget_comment_f 
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+     LOGICAL, INTENT(IN)  :: cleanup
+     INTEGER, INTENT(OUT) :: total_error 
+
+     CHARACTER(LEN=5), PARAMETER :: filename = "gtest"    !File name
+     CHARACTER(LEN=80) :: fix_filename
+     CHARACTER(LEN=33), PARAMETER :: comment = "Testing the group functionalities"  
+                                              ! comment for this file
+     CHARACTER(LEN=7), PARAMETER :: groupname1 = "MyGroup"  ! Group name
+     CHARACTER(LEN=16), PARAMETER :: groupname2 = "/MyGroup/Group_A" 
+     CHARACTER(LEN=9), PARAMETER :: linkname1 = "hardlink1" 
+     CHARACTER(LEN=9), PARAMETER :: linkname2 = "hardlink2" 
+     CHARACTER(LEN=9), PARAMETER :: linkname3 = "softlink1" 
+     CHARACTER(LEN=9), PARAMETER :: linkname4 = "softlink2" 
+     CHARACTER(LEN=12), PARAMETER :: linkname5 = "newsoftlink2" 
+
+     CHARACTER(LEN=13), PARAMETER :: dsetname1 = "MyGroup/dset1" ! Dataset name
+     CHARACTER(LEN=5),  PARAMETER :: dsetname2 = "dset2" ! dataset name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: group1_id      ! Group identifier 
+     INTEGER(HID_T) :: group2_id      ! Group identifier 
+     INTEGER(HID_T) :: dset1_id    ! Dataset identifier 
+     INTEGER(HID_T) :: dset2_id    ! Dataset identifier 
+     INTEGER(HID_T) :: dsetnew_id    ! Dataset identifier 
+     INTEGER(HID_T) :: dspace_id  ! Data space identifier 
+
+     INTEGER, DIMENSION(1) :: dset1_data = 34 ! Data value      
+     INTEGER, DIMENSION(1) :: dset2_data = 98 ! Data value      
+     INTEGER(HSIZE_T), DIMENSION(1) :: dims = 1 ! Datasets dimensions
+     INTEGER     ::   rank = 1 ! Datasets rank
+     INTEGER     ::   error ! Error flag
+     INTEGER(SIZE_T)   ::   namesize = 100 !size for symbolic object
+     CHARACTER(LEN=100) :: name !name to put symbolic object
+     CHARACTER(LEN=100) :: commentout !comment to the file
+     INTEGER     ::   nmembers
+     INTEGER     :: obj_type
+     INTEGER(HSIZE_T), DIMENSION(2) :: data_dims 
+     !
+     ! Create the file.
+     !
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+     CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+     CALL check("h5fcreate_f",error,total_error)
+
+     !
+     ! Create a group named "/MyGroup" in the file.
+     !
+     CALL h5gcreate_f(file_id, groupname1, group1_id, error)
+     CALL check("h5gcreate_f",error,total_error)
+     
+     !
+     ! Create a group named "/MyGroup/Group_A" in the file.
+     !
+     CALL h5gcreate_f(file_id, groupname2, group2_id, error)
+     CALL check("h5gcreate_f",error,total_error)
+
+     !
+     !Create data space for the dataset. 
+     !
+     CALL h5screate_simple_f(rank, dims, dspace_id, error)
+     CALL check("h5screate_simple_f",error,total_error)
+     !
+     ! create dataset in the file. 
+     !
+     CALL h5dcreate_f(file_id, dsetname1, H5T_NATIVE_INTEGER, dspace_id, &
+               dset1_id, error)
+     CALL check("h5dcreate_f",error,total_error)
+
+     !
+     ! Write data_in to dataset1
+     !
+     data_dims(1) = 1
+     CALL h5dwrite_f(dset1_id, H5T_NATIVE_INTEGER, dset1_data, data_dims, error)
+     CALL check("h5dwrite_f",error,total_error)
+
+     !
+     ! create dataset2 in the Group_A. 
+     !
+     CALL h5dcreate_f(group2_id, dsetname2, H5T_NATIVE_INTEGER, dspace_id, &
+               dset2_id, error)
+     CALL check("h5dcreate_f",error,total_error)
+
+     !
+     ! Write data_in to dataset2
+     !
+     CALL h5dwrite_f(dset2_id, H5T_NATIVE_INTEGER, dset2_data, data_dims, error)
+     CALL check("h5dwrite_f",error,total_error)
+
+     !
+     !Create a hard link to the group1
+     !
+     CALL h5glink_f(file_id, H5G_LINK_HARD_F, groupname1, linkname1, error)   
+     CALL check("h5glink_f",error,total_error)
+     !
+     !Create a hard link to the group2
+     !
+     CALL h5glink2_f(file_id, groupname2, H5G_LINK_HARD_F, file_id, linkname2, error)   
+     CALL check("h5glink2_f",error,total_error)
+     !
+     !Create a soft link to  dataset11
+     !
+     CALL h5glink_f(file_id, H5G_LINK_SOFT_F, dsetname1, linkname3, error)   
+     CALL check("h5glink_f",error,total_error)
+     !
+     !Create a soft link to  dataset2
+     !
+     CALL h5glink_f(file_id, H5G_LINK_SOFT_F, dsetname2, linkname4, error)   
+     CALL check("h5glink_f",error,total_error)
+
+     !
+     !close group1
+     !
+     CALL h5gclose_f(group1_id, error)
+     CALL check("h5gclose_f", error, total_error)
+     !
+     !reopen group1
+     !
+     CALL h5gopen_f(file_id, groupname1, group1_id, error)
+     CALL check("h5gopen_f", error, total_error)
+     !
+     !get obj info of group1
+     !
+!     CALL h5gget_obj_info_idx_f(file_id, linkname1, 2, name, obj_type, error)
+!     CALL check("h5gget_obj_info_idx_f", error, total_error) 
+!     if (obj_type .ne. H5G_LINK_F) then
+!         write(*,*)  "got object  ", name, " type error ", obj_type
+!         total_error = total_error +1
+!     end if
+     !
+     !Get number of members in the group
+     !
+     CALL  h5gn_members_f(file_id, groupname1, nmembers, error)
+     CALL check("h5gn_members_f",error,total_error)
+     if (nmembers .ne. 2) then
+         write(*,*)  "got nmembers ", nmembers, " is wrong"
+         total_error = total_error +1
+     end if
+
+
+     !
+     !Get the name of a symbolic name
+     !
+     CALL h5gget_linkval_f(file_id, linkname3, namesize, name, error)
+     CALL check("h5gget_linkval_f",error,total_error)
+     if ( name(1:13) .ne. dsetname1) then
+         write(*,*)  "got symbolic name  ", name, " is wrong"
+         total_error = total_error +1
+     end if
+     !
+     !move softlink2 to newsoftlink2
+     !
+     CALL h5gmove_f(file_id, linkname4, linkname5, error)
+     CALL check("h5gmove_f",error,total_error)
+     !
+     !Get the name of the moved symbolic name
+     !
+     CALL h5gget_linkval_f(file_id, linkname5, namesize, name, error)
+     CALL check("h5gget_linkval_f",error,total_error)
+     if ( name(1:5) .ne. dsetname2) then
+         write(*,*)  "got symbolic name  ", name, " is wrong"
+         total_error = total_error +1
+     end if
+
+     !
+     !Unlink the moved symbolic link
+     !
+     CALL h5gunlink_f(file_id, linkname5, error)
+     CALL check("h5gunlink_f", error, total_error)
+
+
+     !
+     !set the comment of dataset1 to comment
+     !
+     CALL  h5gset_comment_f(file_id, dsetname1, comment, error)
+     CALL check("h5gset_comment_f", error, total_error)
+     !
+     !get the comment of dataset1
+     !
+     CALL  h5gget_comment_f(file_id, dsetname1,namesize, commentout, error)
+     CALL check("h5gget_comment_f", error, total_error)  
+     if ( commentout(1:33) .ne. comment) then
+         write(*,*)  "got comment  ", commentout, " is wrong"
+         total_error = total_error +1
+     end if
+     !
+     ! Move dataset1 to gourp2_id location
+     !
+     CALL h5dclose_f(dset1_id, error)
+     CALL check("h5dclose_f", error, total_error)   
+
+     CALL h5gmove2_f(file_id, dsetname1, group2_id, "dset1", error) 
+     CALL check("h5gmove2_f", error, total_error)  
+     !
+     ! Open dataset from the new location
+     !
+     Call h5dopen_f(file_id, "/MyGroup/Group_A/dset1" , dsetnew_id, error)
+     CALL check("h5dopen_f",error, total_error)
+     !
+     !release all the resources
+     !
+     CALL h5fclose_f(file_id, error)
+     CALL check("h5fclose_f", error, total_error)   
+     CALL h5gclose_f(group1_id, error)
+     CALL check("h5gclose_f", error, total_error)   
+     CALL h5gclose_f(group2_id, error)
+     CALL check("h5gclose_f", error, total_error)   
+     CALL h5dclose_f(dset2_id, error)
+     CALL check("h5dclose_f", error, total_error)   
+     CALL h5dclose_f(dsetnew_id, error)
+     CALL check("h5dclose_f", error, total_error)   
+     CALL h5sclose_f(dspace_id, error)
+     CALL check("h5sclose_f", error, total_error)   
+
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+  END SUBROUTINE group_test

Added: packages/hdf5/branches/upstream/current/fortran/test/tH5I.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/tH5I.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/tH5I.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,273 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+    SUBROUTINE identifier_test(cleanup, total_error)
+
+!   This subroutine tests following functionalities: h5iget_type_f
+
+   USE HDF5 ! This module contains all necessary modules 
+
+     IMPLICIT NONE
+     LOGICAL, INTENT(IN)  :: cleanup
+     INTEGER, INTENT(OUT) :: total_error 
+
+     CHARACTER(LEN=6), PARAMETER :: filename = "itestf" ! File name
+     CHARACTER(LEN=80) :: fix_filename
+     CHARACTER(LEN=10), PARAMETER :: dsetname = "/itestdset" ! Dataset name
+     CHARACTER(LEN=10), PARAMETER :: groupname = "itestgroup"! group name
+     CHARACTER(LEN=10), PARAMETER :: aname = "itestattr"! group name
+          
+          
+
+     INTEGER(HID_T) :: file_id       ! File identifier
+     INTEGER(HID_T) :: new_file_id   ! File identifier
+     INTEGER(HID_T) :: group_id      ! group identifier  
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+     INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+     INTEGER(HID_T) :: attr_id      ! Datatype attribute identifier
+     INTEGER(HID_T) :: aspace_id     ! attribute data space identifier
+     INTEGER(HID_T) :: atype_id     ! attribute data type identifier
+
+
+     INTEGER, DIMENSION(1) :: dset_data = 0 ! Data value 
+     
+     INTEGER(HSIZE_T), DIMENSION(1) :: dims = 1 ! Datasets dimensions
+     INTEGER(HSIZE_T), DIMENSION(1) :: adims = 1 ! Attribute dimensions
+
+     INTEGER, DIMENSION(1) ::  attr_data = 12
+     INTEGER     ::   rank = 1 ! Datasets rank
+     INTEGER     ::   arank = 1 ! Attribute rank
+
+     INTEGER     ::   type !object identifier
+     INTEGER     ::   error ! Error flag
+     INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+     CHARACTER(LEN=80) name_buf
+     CHARACTER(LEN=280) name_buf1
+     INTEGER(SIZE_T)   buf_size
+     INTEGER(SIZE_T)   name_size
+     INTEGER    ::    ref_count ! Reference count for IDs
+
+
+     !
+     ! Create a new file using default properties.
+     ! 
+     CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+     endif
+     CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+     CALL check("h5fcreate_f",error,total_error)
+    
+     !
+     ! Create a group named "/MyGroup" in the file.
+     !
+     CALL h5gcreate_f(file_id, groupname, group_id, error)
+     CALL check("h5gcreate_f",error,total_error)
+
+     !
+     !Create data space for the dataset. 
+     !
+     CALL h5screate_simple_f(rank, dims, dspace_id, error)
+     CALL check("h5screate_simple_f",error,total_error)
+
+     !
+     ! create dataset in the file. 
+     !
+     CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INTEGER, dspace_id, &
+               dset_id, error)
+     CALL check("h5dcreate_f",error,total_error)
+     !
+     ! Get dataset name from dataset identifier
+     ! 
+     buf_size = 80
+     CALL h5iget_name_f(dset_id, name_buf, buf_size, name_size, error)
+     CALL check("h5iget_name_f",error,total_error)
+      if (name_size .ne. len(dsetname)) then
+          write(*,*) "h5iget_name returned wrong name size"
+          total_error = total_error + 1
+      else
+          if (name_buf(1:name_size) .ne. dsetname) then
+              write(*,*) "h5iget_name returned wrong name"
+              total_error = total_error + 1
+          endif
+      endif
+     
+     ! 
+     ! Get file identifier from dataset identifier and then get file name
+     !
+     CALL h5iget_file_id_f(dset_id, new_file_id, error)
+     CALL check("h5iget_file_id_f",error,total_error)
+     name_size = 280
+     CALL h5fget_name_f(new_file_id, name_buf1, name_size, error)
+     CALL check("h5fget_name_f",error,total_error)
+          if (name_buf1(1:name_size) .ne. fix_filename(1:name_size)) then
+              write(*,*) "h5fget_name returned wrong file name"
+              total_error = total_error + 1
+          endif
+
+     !
+     ! Write data_in to the dataset
+     !
+     data_dims(1) = 1
+     CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, dset_data, data_dims, error)
+     CALL check("h5dwrite_f",error,total_error)
+
+     !
+     ! Create scalar data space for dataset attribute. 
+     !
+     CALL h5screate_simple_f(arank, adims, aspace_id, error)
+     CALL check("h5screate_simple_f",error,total_error)
+
+     !
+     ! Create datatype for the Integer attribute.
+     !
+     CALL h5tcopy_f(H5T_NATIVE_INTEGER, atype_id, error)
+     CALL check("h5tcopy_f",error,total_error)
+
+     !
+     ! Create dataset INTEGER attribute.
+     !
+     CALL h5acreate_f(dset_id, aname, atype_id, aspace_id, attr_id, error)
+     CALL check("h5acreate_f",error,total_error)
+
+     !
+     ! Write the Integer attribute data.
+     !
+     CALL h5awrite_f(attr_id, atype_id, attr_data, data_dims, error)
+     CALL check("h5awrite_f",error,total_error)
+
+     !
+     !Get the file identifier
+     !
+     CALL h5iget_type_f(file_id, type, error)
+     CALL check("h5iget_type_f",error,total_error)
+     CALL verify("get file identifier wrong",type,H5I_FILE_F,total_error)
+
+     !
+     !Get the group identifier
+     !
+     CALL h5iget_type_f(group_id, type, error)
+     CALL check("h5iget_type_f",error,total_error)
+     CALL verify("get group identifier wrong",type,H5I_GROUP_F,total_error)
+
+     !
+     !Get the datatype identifier
+     !
+     CALL h5iget_type_f(atype_id, type, error)
+     CALL check("h5iget_type_f",error,total_error)
+     CALL verify("get datatype identifier wrong",type,H5I_DATATYPE_F,total_error)
+
+     !
+     !Get the dataspace identifier
+     !
+     CALL h5iget_type_f(aspace_id, type, error)
+     CALL check("h5iget_type_f",error,total_error)
+     CALL verify("get dataspace identifier wrong",type,H5I_DATASPACE_F,total_error)
+
+     !
+     !Get the dataset identifier
+     !
+     CALL h5iget_type_f(dset_id, type, error)
+     CALL check("h5iget_type_f",error,total_error)
+     CALL verify("get dataset identifier wrong",type,H5I_DATASET_F,total_error)
+
+     !
+     !Get the attribute identifier
+     !
+     CALL h5iget_type_f(attr_id, type, error)
+     CALL check("h5iget_type_f",error,total_error)
+     CALL verify("get attribute identifier wrong",type,H5I_ATTR_F,total_error)
+
+     !   
+     ! Close the attribute.
+     ! 
+     CALL h5aclose_f(attr_id, error)
+     CALL check("h5aclose_f",error,total_error)
+     !   
+     ! Close the dataspace.
+     ! 
+     CALL h5sclose_f(aspace_id, error)
+     CALL check("h5sclose_f",error,total_error)
+     CALL h5sclose_f(dspace_id, error)
+     CALL check("h5sclose_f",error,total_error)
+     !   
+     ! Close the dataype.
+     ! 
+     CALL h5tclose_f(atype_id, error)
+     CALL check("h5tclose_f",error,total_error)
+
+     !   
+     ! Close the dataset.
+     ! 
+     CALL h5dclose_f(dset_id, error)
+     CALL check("h5dclose_f",error,total_error)
+
+     !   
+     ! Close the group.
+     ! 
+     CALL h5gclose_f(group_id, error)
+     CALL check("h5gclose_f",error,total_error)
+
+     ! 
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+     CALL check("h5fclose_f",error,total_error)
+     CALL h5fclose_f(new_file_id, error)
+     CALL check("h5fclose_f",error,total_error)
+
+     !
+     ! Basic Test of increment/decrement ID functions
+     !
+
+     ! Create a file
+     CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+     CALL check("h5fcreate_f",error,total_error)
+    
+     ! Get the reference count for the file ID
+     CALL h5iget_ref_f(file_id, ref_count, error)
+     CALL check("h5iget_ref_f",error,total_error)
+     CALL verify("get file ref count wrong",ref_count,1,total_error)
+
+     ! Increment the reference count for the file ID
+     CALL h5iinc_ref_f(file_id, ref_count, error)
+     CALL check("h5iinc_ref_f",error,total_error)
+     CALL verify("get file ref count wrong",ref_count,2,total_error)
+
+     ! Close the file normally.
+     CALL h5fclose_f(file_id, error)
+     CALL check("h5fclose_f",error,total_error)
+
+     ! Get the reference count for the file ID
+     CALL h5iget_ref_f(file_id, ref_count, error)
+     CALL check("h5iget_ref_f",error,total_error)
+     CALL verify("get file ref count wrong",ref_count,1,total_error)
+
+     ! Close the file by decrementing the reference count
+     CALL h5idec_ref_f(file_id, ref_count, error)
+     CALL check("h5iinc_ref_f",error,total_error)
+     CALL verify("get file ref count wrong",ref_count,0,total_error)
+
+     ! Try closing the file again (should fail)
+     CALL h5fclose_f(file_id, error)
+     CALL verify("file close should fail",error,-1,total_error)
+     ! Clear the error stack from the file close failure
+     CALL h5eclear_f(error)
+
+      if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+          CALL check("h5_cleanup_f", error, total_error)
+
+     RETURN
+     END SUBROUTINE identifier_test

Added: packages/hdf5/branches/upstream/current/fortran/test/tH5P.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/tH5P.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/tH5P.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,375 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+    SUBROUTINE external_test(cleanup, total_error)
+
+!   This subroutine tests following functionalities: 
+!   h5pset_external_f,  h5pget_external_count_f,
+!   h5pget_external_f
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+     LOGICAL, INTENT(IN)  :: cleanup
+     INTEGER, INTENT(OUT) :: total_error 
+
+     CHARACTER(LEN=8), PARAMETER :: filename = "external"
+     CHARACTER(LEN=80) :: fix_filename
+     INTEGER(HID_T) :: file_id     
+     INTEGER(HID_T) :: plist_id     
+     INTEGER(HID_T) :: space_id     
+     INTEGER(HID_T) :: dataset_id
+     INTEGER(HSIZE_T), DIMENSION(1) :: cur_size !data space current size
+     INTEGER(HSIZE_T), DIMENSION(1) :: max_size !data space maximum size
+     CHARACTER(LEN=256) :: name !external file name
+     INTEGER :: file_offset !external file offset
+     INTEGER(HSIZE_T) :: file_size   !sizeof external file segment
+     INTEGER :: error !error code
+     INTEGER(SIZE_T) :: int_size !size of integer
+     INTEGER(HSIZE_T) :: file_bytes !Number of bytes reserved 
+                                   !in the file for the data
+     INTEGER :: RANK = 1 !dataset rank
+     INTEGER :: count !number of external files for the
+                      !specified dataset
+     INTEGER(SIZE_T) :: namesize
+     INTEGER(HSIZE_T) :: size, buf_size
+
+     buf_size = 4*1024*1024
+
+
+
+     !
+     !Create file "external.h5" using default properties.
+     ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+     CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+     CALL check("h5fcreate_f",error,total_error)
+
+
+     CALL h5pcreate_f(H5P_DATASET_XFER_F, plist_id, error)
+         CALL check("h5pcreate_f", error, total_error)
+     CALL h5pset_buffer_f(plist_id, buf_size, error)
+         CALL check("h5pset_buffer_f", error, total_error)
+     CALL h5pget_buffer_f(plist_id, size, error)
+         CALL check("h5pget_buffer_f", error, total_error)
+     if (size .ne.buf_size) then
+         total_error = total_error + 1
+         write(*,*) "h5pget_buffer_f returned wrong size, error"
+      endif
+     CALL h5pclose_f(plist_id, error)
+         CALL check("h5pclose_f", error, total_error)
+
+     CALL h5pcreate_f(H5P_DATASET_CREATE_F, plist_id, error)
+     CALL check("h5pcreate_f",error,total_error)
+     cur_size(1) =100
+     max_size(1) = 100;
+     call h5tget_size_f(H5T_NATIVE_INTEGER, int_size, error)
+     CALL check("h5tget_size_f",error,total_error)
+     file_size = int_size * max_size(1);     
+     CALL h5pset_external_f(plist_id, "ext1.data", 0, file_size, error)
+     CALL check("h5pset_external_f",error,total_error)
+     CALL h5screate_simple_f(RANK, cur_size, space_id, error, max_size)
+     CALL check("h5screate_simple_f", error, total_error)
+     CALL h5dcreate_f(file_id, "dset1", H5T_NATIVE_INTEGER, space_id, &
+                           dataset_id, error, plist_id)
+     CALL check("h5dcreate_f", error, total_error)
+     
+     CALL h5dclose_f(dataset_id, error)
+     CALL check("h5dclose_f", error, total_error)
+     CALL h5pclose_f(plist_id, error)
+     CALL check("h5pclose_f", error, total_error)
+     CALL h5sclose_f(space_id, error)
+     CALL check("h5sclose_f", error, total_error)
+     ! Read dataset creation information 
+     CALL h5dopen_f(file_id, "dset1", dataset_id, error)
+     CALL check("h5dopen_f",error,total_error)
+    
+     CALL h5dget_create_plist_f(dataset_id, plist_id, error)
+     CALL check("h5dget_create_plist_f",error,total_error)
+     CALL h5pget_external_count_f(plist_id, count, error)
+     CALL check("h5pget_external_count_f",error,total_error)
+     if(count .ne. 1 ) then
+         write (*,*) "got external_count is not correct"
+         total_error = total_error + 1
+     end if
+     namesize = 10
+     CALL h5pget_external_f(plist_id, 0, namesize, name, file_offset, &
+                            file_bytes, error)
+     CALL check("h5pget_external_f",error,total_error)
+     if(file_offset .ne. 0 ) then
+         write (*,*) "got external file offset is not correct"
+         total_error = total_error + 1
+     end if
+     if(file_bytes .ne. file_size ) then
+         write (*,*) "got external file size is not correct"
+         total_error = total_error + 1
+     end if
+ 
+     CALL h5dclose_f(dataset_id, error)
+     CALL check("h5dclose_f", error, total_error)
+     CALL h5pclose_f(plist_id, error)
+     CALL check("h5pclose_f", error, total_error)
+     CALL h5fclose_f(file_id, error)
+     CALL check("h5fclose_f", error, total_error)
+
+
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+     RETURN
+     END SUBROUTINE external_test
+    
+        SUBROUTINE multi_file_test(cleanup, total_error)
+        USE HDF5 ! This module contains all necessary modules 
+
+          IMPLICIT NONE
+          LOGICAL, INTENT(IN) :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+
+          CHARACTER(LEN=9), PARAMETER :: filename = "multidset" ! File name
+          CHARACTER(LEN=80) :: fix_filename 
+          CHARACTER(LEN=4), PARAMETER :: dsetname = "dset"     ! Dataset name
+
+          INTEGER(HID_T) :: file_id       ! File identifier 
+          INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+          INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+          INTEGER(HID_T) :: dtype_id      ! Datatype identifier
+          INTEGER(HID_T) :: fapl, fapl_1  ! File access property list identifier
+          INTEGER(HID_T) :: driver
+          INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: memb_map, memb_map_out
+          INTEGER(HID_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: memb_fapl, memb_fapl_out
+          CHARACTER(LEN=20), DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: memb_name, memb_name_out
+          REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: memb_addr, memb_addr_out 
+          !INTEGER(HADDR_T), DIMENSION(0:H5FD_MEM_NTYPES_F) :: memb_addr
+          LOGICAL :: relax  = .TRUE.
+          LOGICAL :: relax_out = .TRUE.
+
+          INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/4,6/) ! Dataset dimensions
+          INTEGER     ::   rank = 2                        ! Dataset rank
+
+          INTEGER, DIMENSION(4,6) :: dset_data, data_out ! Data buffers
+          INTEGER     ::   error ! Error flag
+ 
+
+          INTEGER     :: i, j    !general purpose integers
+          INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+          INTEGER :: mdc_nelmts
+          INTEGER(SIZE_T) :: rdcc_nelmts
+          INTEGER(SIZE_T) :: rdcc_nbytes
+          REAL :: rdcc_w0
+          memb_fapl = H5P_DEFAULT_F
+          memb_map = H5FD_MEM_SUPER_F
+          memb_addr = 0.
+          memb_map(H5FD_MEM_SUPER_F) = H5FD_MEM_SUPER_F
+          memb_addr(H5FD_MEM_SUPER_F) = 0.
+          memb_map(H5FD_MEM_BTREE_F) = H5FD_MEM_BTREE_F
+          memb_addr(H5FD_MEM_BTREE_F) = 0.1
+          memb_map(H5FD_MEM_DRAW_F)  = H5FD_MEM_DRAW_F
+          memb_addr(H5FD_MEM_DRAW_F) = 0.5
+          memb_map(H5FD_MEM_GHEAP_F) = H5FD_MEM_GHEAP_F
+          memb_addr(H5FD_MEM_GHEAP_F) = 0.2
+          memb_map(H5FD_MEM_LHEAP_F) = H5FD_MEM_LHEAP_F
+          memb_addr(H5FD_MEM_LHEAP_F) = 0.3
+          memb_map(H5FD_MEM_OHDR_F)  = H5FD_MEM_OHDR_F
+          memb_addr(H5FD_MEM_OHDR_F) = 0.4
+
+          memb_name = ''
+          memb_name(H5FD_MEM_SUPER_F) = '%s-s.h5'
+          memb_name(H5FD_MEM_BTREE_F) = '%s-b.h5'
+          memb_name(H5FD_MEM_DRAW_F)  = '%s-r.h5'
+          memb_name(H5FD_MEM_GHEAP_F) = '%s-g.h5'
+          memb_name(H5FD_MEM_LHEAP_F) = '%s-l.h5'
+          memb_name(H5FD_MEM_OHDR_F)  = '%s-o.h5'
+
+          !
+          ! Initialize the dset_data array.
+          !
+          do i = 1, 4
+             do j = 1, 6
+                dset_data(i,j) = (i-1)*6 + j;
+             end do
+          end do
+
+          !
+          ! Create a new file using default properties.
+          ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+          CALL h5pcreate_f(H5P_FILE_ACCESS_F, fapl, error)
+              CALL check("h5pcreate_f", error, total_error)
+          CALL h5pset_fapl_multi_f(fapl, memb_map, memb_fapl, memb_name, memb_addr, relax, error)
+              CALL check("h5pset_fapl_multi_f", error, total_error)
+          CALL h5pget_fapl_multi_f(fapl, memb_map_out, memb_fapl_out, memb_name_out, &
+                                   memb_addr_out, relax_out, error)
+              CALL check("h5pget_fapl_multi_f", error, total_error)
+          CALL h5pget_driver_f(fapl, driver, error)
+              CALL check("h5pget_driver_f",error, total_error)
+          if(driver .ne. H5FD_MULTI_F) then
+             write(*,*) "Wrong value for driver"
+          endif
+          !
+          ! Let's check h5pget(set)cache_f APIs here for now 
+          !
+          CALL h5pget_cache_f(fapl, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, &
+                              rdcc_w0, error)
+               CALL check("h5pget_cache_f", error, total_error)
+ 
+          ! Set cache to some number
+          !
+          rdcc_nbytes = 1024*1024
+          CALL h5pset_cache_f(fapl, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, &
+                              rdcc_w0, error)
+               CALL check("h5pset_cache_f", error, total_error)
+ 
+          CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error, access_prp = fapl)
+              CALL check("h5fcreate_f", error, total_error)
+
+
+          ! 
+          ! Create the dataspace.
+          !
+          CALL h5screate_simple_f(rank, dims, dspace_id, error)
+              CALL check("h5screate_simple_f", error, total_error)
+
+
+          !
+          ! Create the dataset with default properties.
+          !
+          CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INTEGER, dspace_id, &
+                           dset_id, error)
+              CALL check("h5dcreate_f", error, total_error)
+
+          !
+          ! Write the dataset.
+          !
+          data_dims(1) = 4
+          data_dims(2) = 6 
+          CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, dset_data, data_dims, error)
+              CALL check("h5dwrite_f", error, total_error)
+
+
+          !   
+          ! End access to the dataset and release resources used by it.
+          ! 
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f", error, total_error)
+
+          !
+          ! Terminate access to the data space.
+          !
+          CALL h5sclose_f(dspace_id, error)
+              CALL check("h5sclose_f", error, total_error)
+
+          ! 
+          ! Close the file.
+          !
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f", error, total_error)
+          CALL h5pclose_f(fapl, error)
+              CALL check("h5pclose_f", error, total_error)
+
+         ! 
+          ! Open the existing file.
+          !
+          CALL h5pcreate_f(H5P_FILE_ACCESS_F, fapl, error)
+              CALL check("h5pcreate_f", error, total_error)
+          CALL h5pset_fapl_multi_f(fapl, relax, error)
+              CALL check("h5pset_fapl_multi_f", error, total_error)
+          CALL h5fopen_f (fix_filename, H5F_ACC_RDWR_F, file_id, error, access_prp = fapl)
+              CALL check("h5fopen_f", error, total_error)
+          !
+          CALL h5fget_access_plist_f(file_id, fapl_1, error)
+              CALL check("h5fget_access_plist_f", error, total_error)
+          !It doesn't work on Windows.
+          !CALL h5pget_fapl_multi_f(fapl_1, memb_map_out, memb_fapl_out, memb_name_out, &
+          !                         memb_addr_out, relax_out, error)
+          ! write(*,*)  memb_map_out
+          ! write(*,*)  memb_fapl_out
+          ! write(*,*)  memb_name_out
+          ! write(*,*)  memb_addr_out
+          !    CALL check("h5pget_fapl_multi_f", error, total_error)
+
+          !
+          ! Open the existing dataset. 
+          !
+          CALL h5dopen_f(file_id, dsetname, dset_id, error)
+              CALL check("h5dopen_f", error, total_error)
+
+          !
+          ! Get the dataset type. 
+          !
+          CALL h5dget_type_f(dset_id, dtype_id, error)
+              CALL check("h5dget_type_f", error, total_error)
+
+          !
+          ! Get the data space. 
+          !
+          CALL h5dget_space_f(dset_id, dspace_id, error)
+              CALL check("h5dget_space_f", error, total_error)
+
+          !
+          ! Read the dataset.
+          !
+          CALL h5dread_f(dset_id, H5T_NATIVE_INTEGER, data_out, data_dims, error)
+              CALL check("h5dread_f", error, total_error)
+
+          !
+          !Compare the data.
+          ! 
+          do i = 1, 4
+              do j = 1, 6
+                  IF (data_out(i,j) .NE. dset_data(i, j)) THEN 
+                      write(*, *) "dataset test error occured"
+                      write(*,*) "data read is not the same as the data writen"
+                  END IF
+              end do    
+          end do
+
+          !   
+          ! End access to the dataset and release resources used by it.
+          ! 
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f", error, total_error)
+
+          !
+          ! Terminate access to the data space.
+          !
+          CALL h5sclose_f(dspace_id, error)
+              CALL check("h5sclose_f", error, total_error)
+
+          !
+          ! Terminate access to the data type.
+          !
+          CALL h5tclose_f(dtype_id, error)
+              CALL check("h5tclose_f", error, total_error)
+          ! 
+          ! Close the file.
+          !
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f", error, total_error)
+          CALL h5pclose_f(fapl, error)
+              CALL check("h5pclose_f", error, total_error)
+          CALL h5pclose_f(fapl_1, error)
+              CALL check("h5pclose_f", error, total_error)
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+     
+          RETURN
+        END SUBROUTINE multi_file_test

Added: packages/hdf5/branches/upstream/current/fortran/test/tH5R.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/tH5R.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/tH5R.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,392 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! 
+!    Testing Reference Interface functionality.
+!
+!    The following subroutine tests h5rcreate_f, h5rdereference_f
+!    and H5Rget_object_type functions
+!
+        SUBROUTINE refobjtest(cleanup, total_error)
+        USE HDF5 ! This module contains all necessary modules 
+          IMPLICIT NONE
+          LOGICAL, INTENT(IN)  :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+
+          CHARACTER(LEN=9), PARAMETER :: filename = "reference"
+          CHARACTER(LEN=80) :: fix_filename
+          CHARACTER(LEN=8), PARAMETER :: dsetnamei = "INTEGERS"
+          CHARACTER(LEN=17), PARAMETER :: dsetnamer = "OBJECT_REFERENCES"
+          CHARACTER(LEN=6), PARAMETER :: groupname1 = "GROUP1"
+          CHARACTER(LEN=6), PARAMETER :: groupname2 = "GROUP2"
+
+          INTEGER(HID_T) :: file_id       ! File identifier 
+          INTEGER(HID_T) :: grp1_id       ! Group identifier 
+          INTEGER(HID_T) :: grp2_id       ! Group identifier 
+          INTEGER(HID_T) :: dset1_id      ! Dataset identifier 
+          INTEGER(HID_T) :: dsetr_id      ! Dataset identifier 
+          INTEGER(HID_T) :: type_id       ! Type identifier  
+          INTEGER(HID_T) :: space_id      ! Dataspace identifier 
+          INTEGER(HID_T) :: spacer_id     ! Dataspace identifier 
+          INTEGER     ::   error, obj_type
+          INTEGER(HSIZE_T), DIMENSION(1) :: dims = (/5/)
+          INTEGER(HSIZE_T), DIMENSION(1) :: dimsr= (/4/)
+          INTEGER(HSIZE_T), DIMENSION(1) :: my_maxdims = (/5/)
+          INTEGER :: rank = 1 
+          INTEGER :: rankr = 1 
+          TYPE(hobj_ref_t_f), DIMENSION(4) ::  ref
+          TYPE(hobj_ref_t_f), DIMENSION(4) ::  ref_out
+          INTEGER(HSIZE_T), DIMENSION(1) :: ref_dim
+          INTEGER, DIMENSION(5) :: data = (/1, 2, 3, 4, 5/)
+          INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+
+
+          !
+          !Create a new file with Default file access and
+          !file creation properties . 
+          !
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+              CALL check("h5fcreate_f",error,total_error)
+
+
+          !
+          ! Create a group inside the file
+          !
+          CALL h5gcreate_f(file_id, groupname1, grp1_id, error)
+              CALL check("h5gcreate_f",error,total_error)
+
+          !
+          ! Create a group inside the group GROUP1
+          !
+          CALL h5gcreate_f(grp1_id, groupname2, grp2_id, error)
+              CALL check("h5gcreate_f",error,total_error)
+
+          ! 
+          ! Create dataspaces for datasets   
+          !
+          CALL h5screate_simple_f(rank, dims, space_id, error, maxdims=my_maxdims)
+              CALL check("h5screate_simple_f",error,total_error)
+          CALL h5screate_simple_f(rankr, dimsr, spacer_id, error)
+              CALL check("h5screate_simple_f",error,total_error)
+
+          !
+          ! Create integer dataset
+          !
+          CALL h5dcreate_f(file_id, dsetnamei, H5T_NATIVE_INTEGER, space_id, &
+                      dset1_id, error)
+              CALL check("h5dcreate_f",error,total_error)
+          !
+          ! Create dataset to store references to the objects
+          !
+          CALL h5dcreate_f(file_id, dsetnamer, H5T_STD_REF_OBJ, spacer_id, &
+                      dsetr_id, error)
+              CALL check("h5dcreate_f",error,total_error)
+          !
+          ! Create a datatype and store in the file
+          !
+          CALL h5tcopy_f(H5T_NATIVE_REAL, type_id, error)
+              CALL check("h5tcopy_f",error,total_error)
+          CALL h5tcommit_f(file_id, "MyType", type_id, error)
+              CALL check("h5tcommit_f",error,total_error)
+
+          !
+          !  Close dataspaces, groups and integer dataset
+          ! 
+          CALL h5sclose_f(space_id, error)
+              CALL check("h5sclose_f",error,total_error)
+          CALL h5sclose_f(spacer_id, error)         
+              CALL check("h5sclose_f",error,total_error)
+          CALL h5dclose_f(dset1_id, error)
+              CALL check("h5dclose_f",error,total_error)
+          CALL h5tclose_f(type_id, error)
+              CALL check("h5tclose_f",error,total_error)
+          CALL h5gclose_f(grp1_id, error)
+              CALL check("h5gclose_f",error,total_error)
+          CALL h5gclose_f(grp2_id, error)
+              CALL check("h5gclose_f",error,total_error)
+
+
+          !
+          ! Craete references to two groups, integer dataset and shared datatype
+          ! and write it to the dataset in the file
+          !
+          CALL h5rcreate_f(file_id, groupname1, ref(1), error)
+              CALL check("h5rcreate_f",error,total_error)
+          CALL h5rcreate_f(file_id, "/GROUP1/GROUP2", ref(2), error)
+              CALL check("h5rcreate_f",error,total_error)
+          CALL h5rcreate_f(file_id, dsetnamei, ref(3), error)
+              CALL check("h5rcreate_f",error,total_error)
+          CALL h5rcreate_f(file_id, "MyType", ref(4), error)
+              CALL check("h5rcreate_f",error,total_error)
+          ref_dim(1) = size(ref)
+          CALL h5dwrite_f(dsetr_id, H5T_STD_REF_OBJ, ref, ref_dim, error)
+              CALL check("h5dwrite_f",error,total_error)
+
+          !
+          !Close the dataset
+          ! 
+          CALL h5dclose_f(dsetr_id, error)
+              CALL check("h5dclose_f",error,total_error)
+          ! 
+          ! Reopen the dataset with object references
+          !
+          CALL h5dopen_f(file_id, dsetnamer,dsetr_id,error)
+              CALL check("h5dopen_f",error,total_error)
+          ref_dim(1) = size(ref_out)
+          CALL h5dread_f(dsetr_id, H5T_STD_REF_OBJ, ref_out, ref_dim, error)
+              CALL check("h5dread_f",error,total_error)
+   
+          !
+          !get the third reference's type and Dereference it
+          !
+          CALL h5rget_object_type_f(dsetr_id, ref(3), obj_type, error) 
+              CALL check("h5rget_object_type_f",error,total_error)
+          if (obj_type == 2) then 
+              CALL h5rdereference_f(dsetr_id, ref(3), dset1_id, error)
+                  CALL check("h5rdereference_f",error,total_error)
+          
+              data_dims(1) = 5
+              CALL h5dwrite_f(dset1_id, H5T_NATIVE_INTEGER, data, data_dims, error)
+                  CALL check("h5dwrite_f",error,total_error)
+          end if
+
+          !
+          !get the fourth reference's type and Dereference it
+          !
+          CALL h5rget_object_type_f(dsetr_id, ref(4), obj_type, error) 
+              CALL check("h5rget_object_type_f",error,total_error)
+          if (obj_type == 3) then 
+              CALL h5rdereference_f(dsetr_id, ref(4), type_id, error)
+                  CALL check("h5rdereference_f",error,total_error)
+          end if
+
+          !
+          ! Close all objects.
+          !          
+          CALL h5dclose_f(dset1_id, error)
+              CALL check("h5dclose_f",error,total_error)
+          CALL h5tclose_f(type_id, error)
+              CALL check("h5tclose_f",error,total_error)
+
+          CALL h5dclose_f(dsetr_id, error)
+              CALL check("h5dclose_f",error,total_error)
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f",error,total_error)
+
+
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+          RETURN
+
+        END SUBROUTINE refobjtest
+!
+!   The following subroutine tests h5rget_region_f, h5rcreate_f
+!   and h5rdereference_f functionalities
+! 
+        SUBROUTINE refregtest(cleanup, total_error)
+        USE HDF5 ! This module contains all necessary modules 
+          IMPLICIT NONE
+          LOGICAL, INTENT(IN)  :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+
+          CHARACTER(LEN=6), PARAMETER :: filename = "Refreg"
+          CHARACTER(LEN=80) :: fix_filename
+          CHARACTER(LEN=6), PARAMETER :: dsetnamev = "MATRIX"
+          CHARACTER(LEN=17), PARAMETER :: dsetnamer = "REGION_REFERENCES"
+
+          INTEGER(HID_T) :: file_id       ! File identifier 
+          INTEGER(HID_T) :: space_id      ! Dataspace identifier 
+          INTEGER(HID_T) :: spacer_id     ! Dataspace identifier 
+          INTEGER(HID_T) :: dsetv_id      ! Dataset identifier 
+          INTEGER(HID_T) :: dsetr_id      ! Dataset identifier 
+          INTEGER     ::   error
+          TYPE(hdset_reg_ref_t_f) , DIMENSION(2) :: ref     ! Buffers to store references
+          TYPE(hdset_reg_ref_t_f) , DIMENSION(2) :: ref_out !
+          INTEGER(HSIZE_T), DIMENSION(2) :: ref_dim
+          INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+          INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/2,9/)  ! Datasets dimensions
+          INTEGER(HSIZE_T), DIMENSION(1) :: dimsr = (/2/)   ! 
+          INTEGER(HSIZE_T), DIMENSION(2) :: start
+          INTEGER(HSIZE_T), DIMENSION(2) :: count
+          INTEGER :: rankr = 1 
+          INTEGER :: rank = 2
+          INTEGER , DIMENSION(2,9) ::  data 
+          INTEGER , DIMENSION(2,9) ::  data_out = 0 
+          INTEGER(HSIZE_T) , DIMENSION(2,3) :: coord
+          INTEGER(SIZE_T) ::num_points = 3  ! Number of selected points
+          INTEGER :: i, j
+          coord = reshape((/1,1,2,7,1,9/), (/2,3/))   ! Coordinates of selected points
+          data = reshape ((/1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6/), (/2,9/))
+
+          !
+          !  Initialize FORTRAN predefined datatypes.
+          !
+!          CALL h5init_types_f(error)
+!              CALL check("h5init_types_f", error, total_error)
+          !
+          !  Create a new file.
+          !
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+          ! Default file access and file creation
+          ! properties are used. 
+              CALL check("h5fcreate_f", error, total_error)
+          ! 
+          ! Create  dataspaces:
+          ! 
+          ! for dataset with references to dataset regions 
+          !
+          CALL h5screate_simple_f(rankr, dimsr, spacer_id, error)
+              CALL check("h5screate_simple_f", error, total_error)
+          !
+          ! for integer dataset 
+          !
+          CALL h5screate_simple_f(rank, dims, space_id, error)
+              CALL check("h5screate_simple_f", error, total_error)
+          !
+          ! Create  and write datasets:
+          !
+          ! Integer dataset 
+          !
+          CALL h5dcreate_f(file_id, dsetnamev, H5T_NATIVE_INTEGER, space_id, &
+               dsetv_id, error)
+              CALL check("h5dcreate_f", error, total_error)
+          data_dims(1) = 2
+          data_dims(2) = 9 
+          CALL h5dwrite_f(dsetv_id, H5T_NATIVE_INTEGER, data, data_dims, error)
+              CALL check("h5dwrite_f", error, total_error)
+
+          CALL h5dclose_f(dsetv_id, error)
+              CALL check("h5dclose_f", error, total_error)
+          !
+          ! Dataset with references
+          !
+          CALL h5dcreate_f(file_id, dsetnamer, H5T_STD_REF_DSETREG, spacer_id, &
+               dsetr_id, error)
+              CALL check("h5dcreate_f", error, total_error)
+          !
+          ! Create a reference to the hyperslab selection.
+          !
+          start(1) = 0 
+          start(2) = 3 
+          count(1) = 2
+          count(2) = 3
+          CALL h5sselect_hyperslab_f(space_id, H5S_SELECT_SET_F, &
+               start, count, error) 
+              CALL check("h5sselect_hyperslab_f", error, total_error)
+          CALL h5rcreate_f(file_id, dsetnamev, space_id, ref(1), error) 
+              CALL check("h5rcreate_f", error, total_error)
+          !
+          ! Create a reference to elements selection.
+          !
+          CALL h5sselect_none_f(space_id, error)
+              CALL check("h5sselect_none_f", error, total_error)
+          CALL h5sselect_elements_f(space_id, H5S_SELECT_SET_F, rank, num_points,&
+               coord, error) 
+              CALL check("h5sselect_elements_f", error, total_error)
+          CALL h5rcreate_f(file_id, dsetnamev, space_id, ref(2), error) 
+              CALL check("h5rcreate_f", error, total_error)
+          !
+          ! Write dataset with the references. 
+          !
+          ref_dim(1) = size(ref)
+          CALL h5dwrite_f(dsetr_id, H5T_STD_REF_DSETREG, ref, ref_dim, error) 
+              CALL check("h5dwrite_f", error, total_error)
+          !
+          ! Close all objects.
+          !
+          CALL h5sclose_f(space_id, error)
+              CALL check("h5sclose_f", error, total_error)
+          CALL h5sclose_f(spacer_id, error)
+              CALL check("h5sclose_f", error, total_error)
+          CALL h5dclose_f(dsetr_id, error)
+              CALL check("h5dclose_f", error, total_error)
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f", error, total_error)
+          !
+          ! Reopen the file to test selections.
+          !
+          CALL h5fopen_f (fix_filename, H5F_ACC_RDWR_F, file_id, error)
+              CALL check("h5fopen_f", error, total_error)
+          CALL h5dopen_f(file_id, dsetnamer, dsetr_id, error)
+              CALL check("h5dopen_f", error, total_error)
+          !
+          ! Read references to the dataset regions.
+          !
+          ref_dim(1) = size(ref_out)
+          CALL h5dread_f(dsetr_id, H5T_STD_REF_DSETREG, ref_out, ref_dim, error) 
+              CALL check("h5dread_f", error, total_error)
+          ! 
+          ! Dereference the first reference.
+          ! 
+          CALL H5rdereference_f(dsetr_id, ref_out(1), dsetv_id, error)
+              CALL check("h5rdereference_f", error, total_error)
+          CALL H5rget_region_f(dsetr_id, ref_out(1), space_id, error) 
+              CALL check("h5rget_region_f", error, total_error)
+          !
+          ! Read selected data from the dataset.
+          !
+          data_dims(1) = 2
+          data_dims(2) = 9
+          CALL h5dread_f(dsetv_id, H5T_NATIVE_INTEGER, data_out, data_dims, error, &
+               mem_space_id = space_id, file_space_id = space_id)
+              CALL check("h5dread_f", error, total_error)
+          CALL h5sclose_f(space_id, error)
+              CALL check("h5sclose_f", error, total_error)
+          CALL h5dclose_f(dsetv_id, error)
+              CALL check("h5dclose_f", error, total_error)
+          data_out = 0
+          !  
+          ! Dereference the second reference.
+          ! 
+          CALL H5rdereference_f(dsetr_id, ref_out(2), dsetv_id, error)
+              CALL check("h5rdereference_f", error, total_error)
+           
+          CALL H5rget_region_f(dsetr_id, ref_out(2), space_id, error) 
+              CALL check("h5rget_region_f", error, total_error)
+          !
+          ! Read selected data from the dataset.
+          !
+          CALL h5dread_f(dsetv_id, H5T_NATIVE_INTEGER, data_out, data_dims, error, &
+               mem_space_id = space_id, file_space_id = space_id)
+              CALL check("h5dread_f", error, total_error)
+          !
+          ! Close all objects
+          !
+          CALL h5sclose_f(space_id, error)
+              CALL check("h5sclose_f", error, total_error)
+          CALL h5dclose_f(dsetv_id, error)
+              CALL check("h5dclose_f", error, total_error)
+          CALL h5dclose_f(dsetr_id, error)
+              CALL check("h5dclose_f", error, total_error)
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f", error, total_error)
+
+
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+          RETURN
+
+        END SUBROUTINE refregtest
+

Added: packages/hdf5/branches/upstream/current/fortran/test/tH5S.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/tH5S.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/tH5S.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,274 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! 
+!    Testing Dataspace Interface functionality.
+!
+!
+!   The following subroutine tests the following functionalities:
+!   h5screate_f, h5scopy_f, h5screate_simple_f, h5sis_simple_f,   
+!   h5sget_simple_extent_dims_f,h5sget_simple_extent_ndims_f 
+!   h5sget_simple_extent_npoints_f, h5sget_simple_extent_type_f,
+!   h5sextent_copy_f, h5sset_extent_simple_f, h5sset_extent_none_f     
+!
+        SUBROUTINE dataspace_basic_test(cleanup, total_error)
+
+        USE HDF5 ! This module contains all necessary modules 
+
+          IMPLICIT NONE
+          LOGICAL, INTENT(IN)  :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+
+          CHARACTER(LEN=10), PARAMETER :: filename1 = "basicspace" ! File1 name
+          CHARACTER(LEN=9), PARAMETER :: filename2 = "copyspace"  ! File2 name
+          CHARACTER(LEN=80) :: fix_filename1 
+          CHARACTER(LEN=80) :: fix_filename2 
+          CHARACTER(LEN=9), PARAMETER :: dsetname = "basicdset"       ! Dataset name
+
+          INTEGER(HID_T) :: file1_id, file2_id     ! File identifiers 
+          INTEGER(HID_T) :: dset1_id, dset2_id     ! Dataset identifiers 
+          INTEGER(HID_T) :: space1_id, space2_id   ! Dataspace identifiers
+
+          INTEGER(HSIZE_T), DIMENSION(2) :: dims1 = (/4,6/) ! Dataset dimensions
+          INTEGER(HSIZE_T), DIMENSION(2) :: maxdims1 = (/4,6/) ! maximum dimensions
+          INTEGER(HSIZE_T), DIMENSION(2) :: dims2 = (/6,6/) ! Dataset dimensions
+          INTEGER(HSIZE_T), DIMENSION(2) :: maxdims2 = (/6,6/) ! maximum dimensions
+          INTEGER(HSIZE_T), DIMENSION(2) :: dimsout, maxdimsout ! dimensions
+          INTEGER(HSIZE_T)   ::   npoints  !number of elements in the dataspace
+
+          INTEGER     ::   rank1 = 2               ! Dataspace1 rank
+          INTEGER     ::   rank2 = 2               ! Dataspace2 rank
+          INTEGER     ::   classtype               ! Dataspace class type
+
+          INTEGER, DIMENSION(4,6) :: data1_in, data1_out   ! Data input buffers
+          INTEGER, DIMENSION(6,6) :: data2_in, data2_out  ! Data output buffers
+          INTEGER     ::   error ! Error flag
+
+          LOGICAL     ::   flag  !flag to test datyspace is simple or not
+          INTEGER     :: i, j    !general purpose integers
+          INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+
+          !
+          ! Initialize the dset_data array.
+          !
+          do i = 1, 4
+             do j = 1, 6
+                data1_in(i,j) = (i-1)*6 + j;
+             end do
+          end do
+
+          do i = 1, 6
+             do j = 1, 6
+                data2_in(i,j) = i*6 + j;
+             end do
+          end do
+
+          !
+          !  Initialize FORTRAN predefined datatypes.
+          !
+!          CALL h5init_types_f(error)
+!              CALL check("h5init_types_f", error, total_error)
+          
+          !
+          ! Create new files using default properties.
+          ! 
+          CALL h5_fixname_f(filename1, fix_filename1, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename1, H5F_ACC_TRUNC_F, file1_id, error)
+              CALL check("h5fcreate_f", error, total_error)
+
+          CALL h5_fixname_f(filename2, fix_filename2, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename2, H5F_ACC_TRUNC_F, file2_id, error)
+              CALL check("h5fcreate_f", error, total_error)
+
+          ! 
+          ! Create dataspace for file1.
+          !
+          CALL h5screate_simple_f(rank1, dims1, space1_id, error, maxdims1)
+              CALL check("h5screate_simple_f", error, total_error)
+          ! 
+          ! Copy space1_id to space2_id.
+          !
+          CALL h5scopy_f(space1_id, space2_id, error)
+              CALL check("h5scopy_f", error, total_error)
+
+          ! 
+          !Check whether copied space is simple.
+          !
+          CALL h5sis_simple_f(space2_id, flag, error)
+              CALL check("h5sissimple_f", error, total_error)
+          IF (.NOT. flag) write(*,*) "dataspace is not simple type"
+      
+          ! 
+          !set the copied space to none.
+          !
+          CALL h5sset_extent_none_f(space2_id, error)
+              CALL check("h5sset_extent_none_f", error, total_error)
+ 
+          ! 
+          !copy the extent of space1_id to space2_id.
+          !
+          CALL h5sextent_copy_f(space2_id, space1_id, error) 
+              CALL check("h5sextent_copy_f", error, total_error)
+
+          ! 
+          !get the copied space's dimensions.
+          !
+          CALL h5sget_simple_extent_dims_f(space2_id, dimsout, maxdimsout, error)
+              CALL check("h5sget_simple_extent_dims_f", error, total_error)
+          IF ((dimsout(1) .NE. dims1(1)) .OR. (dimsout(2) .NE. dims1(2)) ) THEN
+              write(*,*)"error occured, copied dims not same" 
+          END IF
+   
+          ! 
+          !get the copied space's rank.
+          !
+          CALL h5sget_simple_extent_ndims_f(space2_id, rank2, error)
+              CALL check("h5sget_simple_extent_ndims_f", error, total_error)
+          IF (rank2 .NE. rank1) write(*,*)"error occured, copied ranks not same" 
+   
+          ! 
+          !get the copied space's number of elements.
+          !
+          CALL h5sget_simple_extent_npoints_f(space2_id, npoints, error)
+              CALL check("h5sget_simple_extent_npoints_f", error, total_error)
+          IF (npoints .NE. 24) write(*,*)"error occured, number of elements not correct"
+
+
+          ! 
+          !get the copied space's class type.
+          !
+          CALL h5sget_simple_extent_type_f(space2_id, classtype, error)   
+              CALL check("h5sget_simple_extent_type_f", error, total_error)
+          IF (classtype .NE. 1) write(*,*)"class type not H5S_SIMPLE_f"
+
+          ! 
+          !set the copied space to dim2 size.
+          !
+          CALL h5sset_extent_simple_f(space2_id, rank2, dims2, maxdims2, error)
+              CALL check("h5sset_extent_simple_f", error, total_error)
+
+          ! 
+          !get the copied space's dimensions.
+          !
+          CALL h5sget_simple_extent_dims_f(space2_id, dimsout, maxdimsout, error)
+              CALL check("h5sget_simple_extent_dims_f", error, total_error)
+          IF ((dimsout(1) .NE. dims2(1)) .OR. (dimsout(2) .NE. dims2(2)) ) THEN
+              write(*,*)"error occured, copied dims not same"
+          END IF 
+
+          !
+          ! Create the datasets with default properties in two files.
+          !
+          CALL h5dcreate_f(file1_id, dsetname, H5T_NATIVE_INTEGER, space1_id, &
+                           dset1_id, error)
+              CALL check("h5dcreate_f", error, total_error)
+
+          CALL h5dcreate_f(file2_id, dsetname, H5T_NATIVE_INTEGER, space2_id, &
+                           dset2_id, error)
+              CALL check("h5dcreate_f", error, total_error)
+
+          !
+          ! Write the datasets.
+          !
+          data_dims(1) = 4
+          data_dims(2) = 6
+          CALL h5dwrite_f(dset1_id, H5T_NATIVE_INTEGER, data1_in, data_dims, error)
+              CALL check("h5dwrite_f", error, total_error)
+
+          data_dims(1) = 6 
+          data_dims(2) = 6
+          CALL h5dwrite_f(dset2_id, H5T_NATIVE_INTEGER, data2_in, data_dims, error)
+              CALL check("h5dwrite_f", error, total_error)
+
+          !
+          ! Read the first dataset.
+          !
+          data_dims(1) = 4
+          data_dims(2) = 6
+          CALL h5dread_f(dset1_id, H5T_NATIVE_INTEGER, data1_out, data_dims, error)
+              CALL check("h5dread_f", error, total_error)
+
+          !
+          !Compare the data.
+          ! 
+          do i = 1, 4
+              do j = 1, 6
+                  IF (data1_out(i,j) .NE. data1_in(i, j)) THEN 
+                      write(*, *) "dataset test error occured"
+                      write(*,*) "data read is not the same as the data writen"
+                  END IF
+              end do    
+          end do
+
+
+          !
+          ! Read the second dataset.
+          !
+          data_dims(1) = 6 
+          data_dims(2) = 6
+          CALL h5dread_f(dset2_id, H5T_NATIVE_INTEGER, data2_out, data_dims, error)
+              CALL check("h5dread_f", error, total_error)
+
+          !
+          !Compare the data.
+          ! 
+          do i = 1, 6
+              do j = 1, 6
+                  IF (data2_out(i,j) .NE. data2_in(i, j)) THEN 
+                      write(*, *) "dataset test error occured"
+                      write(*,*) "data read is not the same as the data writen"
+                  END IF
+              end do    
+          end do
+
+          !   
+          !Close the datasets.
+          ! 
+          CALL h5dclose_f(dset1_id, error)
+              CALL check("h5dclose_f", error, total_error)
+          CALL h5dclose_f(dset2_id, error)
+              CALL check("h5dclose_f", error, total_error)
+
+          !
+          ! Terminate access to the data spaces.
+          !
+          CALL h5sclose_f(space1_id, error)
+              CALL check("h5sclose_f", error, total_error)
+          CALL h5sclose_f(space2_id, error)
+              CALL check("h5sclose_f", error, total_error)
+          ! 
+          ! Close the files.
+          !
+          CALL h5fclose_f(file1_id, error)
+              CALL check("h5fclose_f", error, total_error)
+          CALL h5fclose_f(file2_id, error)
+              CALL check("h5fclose_f", error, total_error)
+     
+
+          if(cleanup) CALL h5_cleanup_f(filename1, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+          if(cleanup) CALL h5_cleanup_f(filename2, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+          RETURN
+        END SUBROUTINE dataspace_basic_test
+

Added: packages/hdf5/branches/upstream/current/fortran/test/tH5Sselect.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/tH5Sselect.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/tH5Sselect.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1035 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+! 
+!    Testing Selection-related Dataspace Interface functionality.
+!
+
+!
+!    The following subroutines tests the following functionalities:
+!    h5sget_select_npoints_f, h5sselect_elements_f, h5sselect_all_f,
+!    h5sselect_none_f, h5sselect_valid_f, h5sselect_hyperslab_f,
+!    h5sget_select_bounds_f, h5sget_select_elem_pointlist_f,
+!    h5sget_select_elem_npoints_f, h5sget_select_hyper_blocklist_f, 
+!    h5sget_select_hyper_nblocks_f, h5sget_select_npoints_f
+!
+
+  SUBROUTINE test_select_hyperslab(cleanup, total_error)
+
+    USE HDF5 ! This module contains all necessary modules 
+
+    IMPLICIT NONE
+    LOGICAL, INTENT(IN) :: cleanup
+    INTEGER, INTENT(OUT) :: total_error 
+
+    CHARACTER(LEN=7), PARAMETER :: filename = "tselect"
+    CHARACTER(LEN=80) :: fix_filename
+
+    !
+    !dataset name is "IntArray"
+    !
+    CHARACTER(LEN=8), PARAMETER :: dsetname = "IntArray"
+
+    INTEGER(HID_T) :: file_id       ! File identifier 
+    INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+    INTEGER(HID_T) :: dataspace     ! Dataspace identifier 
+    INTEGER(HID_T) :: memspace      ! memspace identifier 
+
+    !
+    !Memory space dimensions 
+    !
+    INTEGER(HSIZE_T), DIMENSION(3) :: dimsm = (/7,7,3/)
+
+    !
+    !to get Dataset dimensions 
+    !
+    INTEGER(HSIZE_T), DIMENSION(2) :: dims_out
+
+    !
+    !Dataset dimensions 
+    !
+    INTEGER(HSIZE_T), DIMENSION(2) :: dimsf = (/5,6/)
+
+    !
+    !Size of the hyperslab in the file 
+    !
+    INTEGER(HSIZE_T), DIMENSION(2) :: count = (/3,4/)
+
+    !
+    !hyperslab offset in the file 
+    !
+    INTEGER(HSIZE_T), DIMENSION(2) :: offset = (/1,2/)
+
+    !
+    !Size of the hyperslab in memory 
+    !
+    INTEGER(HSIZE_T), DIMENSION(3) :: count_out = (/3,4,1/)
+
+    !
+    !hyperslab offset in memory 
+    !
+    INTEGER(HSIZE_T), DIMENSION(3) :: offset_out = (/3,0,0/)
+
+    !
+    !data to write 
+    !
+    INTEGER, DIMENSION(5,6) :: data
+
+    !
+    !output buffer 
+    !
+    INTEGER, DIMENSION(7,7,3) :: data_out
+
+
+    !
+    !dataset space rank 
+    !
+    INTEGER :: dsetrank = 2 
+
+    !
+    !memspace rank 
+    !
+    INTEGER :: memrank = 3
+
+    !
+    !integer to get the dataspace rank from dataset
+    !
+    INTEGER :: rank 
+
+
+    !
+    !general purpose integer 
+    !
+    INTEGER :: i, j, k 
+
+    !
+    !flag to check operation success 
+    !
+    INTEGER :: error, error_n 
+    INTEGER(HSIZE_T), DIMENSION(3) :: data_dims
+
+
+    !
+    !This writes data to the HDF5 file.  
+    !
+
+    !
+    !data initialization 
+    !
+    do i = 1, 5
+       do j = 1, 6
+          data(i,j) = (i-1) + (j-1);
+       end do
+    end do
+    !
+    ! 0,  1,  2,  3,  4,  5
+    ! 1,  2,  3,  4,  5,  6
+    ! 2,  3,  4,  5,  6,  7
+    ! 3,  4,  5,  6,  7,  8
+    ! 4,  5,  6,  7,  8,  9
+    !
+
+    !
+    !Initialize FORTRAN predifined datatypes
+    !
+!    CALL h5init_types_f(error) 
+!    CALL check("h5init_types_f", error, total_error)
+
+    !
+    !Create a new file using default properties.
+    ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+    CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+    CALL check("h5fcreate_f", error, total_error)
+
+    !
+    !Create the data space for the  dataset. 
+    !
+    CALL h5screate_simple_f(dsetrank, dimsf, dataspace, error)
+    CALL check("h5screate_simple_f", error, total_error)
+
+    !
+    ! Create the dataset with default properties
+    !
+    CALL h5dcreate_f(file_id, dsetname, H5T_STD_I32BE, dataspace, &
+         dset_id, error)
+    CALL check("h5dcreate_f", error, total_error)
+
+    !
+    ! Write the dataset
+    !
+    data_dims(1) = 5
+    data_dims(2) = 6 
+    CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data, data_dims, error)
+    CALL check("h5dwrite_f", error, total_error)
+
+    !
+    !Close the dataspace for the dataset.
+    !
+    CALL h5sclose_f(dataspace, error)
+    CALL check("h5sclose_f", error, total_error)
+
+    !
+    !Close the dataset.
+    !
+    CALL h5dclose_f(dset_id, error)
+    CALL check("h5dclose_f", error, total_error)
+
+    !
+    !Close the file.
+    !
+    CALL h5fclose_f(file_id, error)
+    CALL check("h5fclose_f", error, total_error)
+
+    !
+    !This reads the hyperslab from the sds.h5 file just 
+    !created, into a 2-dimensional plane of the 3-dimensional array.
+    !
+
+    !
+    !initialize data_out array
+    !
+    !     do i = 1, 7
+    !          do j = 1, 7
+    !              do k = 1,3
+    !                  data_out(i,j,k) = 0;
+    !              end do
+    !          end do
+    !     end do
+
+    !
+    !Open the file.
+    !
+    CALL h5fopen_f (fix_filename, H5F_ACC_RDONLY_F, file_id, error)
+    CALL check("h5fopen_f", error, total_error)
+
+    !
+    !Open the  dataset.
+    !
+    CALL h5dopen_f(file_id, dsetname, dset_id, error)
+    CALL check("h5dopen_f", error, total_error)
+
+    !
+    !Get dataset's dataspace handle.
+    !
+    CALL h5dget_space_f(dset_id, dataspace, error)
+    CALL check("h5dget_space_f", error, total_error)
+
+    !
+    !Select hyperslab in the dataset.
+    !
+    CALL h5sselect_hyperslab_f(dataspace, H5S_SELECT_SET_F, &
+         offset, count, error) 
+    CALL check("h5sselect_hyperslab_f", error, total_error)
+    !
+    !create memory dataspace.
+    !
+    CALL h5screate_simple_f(memrank, dimsm, memspace, error)
+    CALL check("h5screate_simple_f", error, total_error)
+
+    !
+    !Select hyperslab in memory.
+    !
+    CALL h5sselect_hyperslab_f(memspace, H5S_SELECT_SET_F, &
+         offset_out, count_out, error) 
+    CALL check("h5sselect_hyperslab_f", error, total_error)
+
+    !
+    !Read data from hyperslab in the file into the hyperslab in 
+    !memory and display.
+    !
+    data_dims(1) = 7
+    data_dims(2) = 7 
+    data_dims(3) = 3 
+    CALL h5dread_f(dset_id, H5T_NATIVE_INTEGER, data_out, data_dims, error, &
+         memspace, dataspace)
+    CALL check("h5dread_f", error, total_error)
+
+    !
+    !Display data_out array
+    !
+    !do i = 1, 7
+    !   print *, (data_out(i,j,1), j = 1,7)
+    !end do
+
+    ! 0 0 0 0 0 0 0
+    ! 0 0 0 0 0 0 0
+    ! 0 0 0 0 0 0 0
+    ! 3 4 5 6 0 0 0  
+    ! 4 5 6 7 0 0 0
+    ! 5 6 7 8 0 0 0
+    ! 0 0 0 0 0 0 0
+    !
+
+    !
+    !Close the dataspace for the dataset.
+    !
+    CALL h5sclose_f(dataspace, error)
+    CALL check("h5sclose_f", error, total_error)
+
+    !
+    !Close the memoryspace.
+    !
+    CALL h5sclose_f(memspace, error)
+    CALL check("h5sclose_f", error, total_error)
+
+    !
+    !Close the dataset.
+    !
+    CALL h5dclose_f(dset_id, error)
+    CALL check("h5dclose_f", error, total_error)
+
+    !
+    !Close the file.
+    !
+    CALL h5fclose_f(file_id, error)
+    CALL check("h5fclose_f", error, total_error)
+
+
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+    RETURN
+
+  END SUBROUTINE test_select_hyperslab
+
+  !
+  !Subroutine to test element selection
+  !
+
+  SUBROUTINE test_select_element(cleanup, total_error)
+
+    USE HDF5 ! This module contains all necessary modules 
+
+    IMPLICIT NONE
+    LOGICAL, INTENT(IN)  :: cleanup
+    INTEGER, INTENT(OUT) :: total_error 
+
+    !
+    !the dataset1 is stored in file "copy1.h5"
+    !
+    CHARACTER(LEN=13), PARAMETER :: filename1 = "tselect_copy1"
+    CHARACTER(LEN=80) :: fix_filename1
+
+    !
+    !the dataset2 is stored in file "copy2.h5"
+    !
+    CHARACTER(LEN=13), PARAMETER :: filename2 = "tselect_copy2"
+    CHARACTER(LEN=80) :: fix_filename2
+    !
+    !dataset1 name is "Copy1"
+    !
+    CHARACTER(LEN=8), PARAMETER :: dsetname1 = "Copy1"
+
+    !
+    !dataset2 name is "Copy2"
+    !
+    CHARACTER(LEN=8), PARAMETER :: dsetname2 = "Copy2"
+
+    !
+    !dataset rank 
+    !
+    INTEGER, PARAMETER :: RANK = 2
+
+    !
+    !number of points selected 
+    !
+    INTEGER(SIZE_T), PARAMETER :: NUMP = 2
+
+    INTEGER(HID_T) :: file1_id       ! File1 identifier 
+    INTEGER(HID_T) :: file2_id       ! File2 identifier 
+    INTEGER(HID_T) :: dset1_id       ! Dataset1 identifier 
+    INTEGER(HID_T) :: dset2_id       ! Dataset2 identifier 
+    INTEGER(HID_T) :: dataspace1     ! Dataspace identifier 
+    INTEGER(HID_T) :: dataspace2     ! Dataspace identifier 
+    INTEGER(HID_T) :: memspace       ! memspace identifier 
+
+    !
+    !Memory space dimensions 
+    !
+    INTEGER(HSIZE_T), DIMENSION(1) :: dimsm = (/2/)
+
+    !
+    !Dataset dimensions 
+    !
+    INTEGER(HSIZE_T), DIMENSION(2) :: dimsf = (/3,4/)
+
+    !
+    !Points positions in the file 
+    !
+    INTEGER(HSIZE_T), DIMENSION(RANK,NUMP) :: coord
+
+    !
+    !data buffers 
+    !
+    INTEGER, DIMENSION(3,4) :: buf1, buf2, bufnew
+
+    !
+    !value to write 
+    !
+    INTEGER, DIMENSION(2) :: val = (/53, 59/)
+
+    !
+    !memory rank 
+    !
+    INTEGER :: memrank = 1 
+
+    !
+    !general purpose integer 
+    !
+    INTEGER :: i, j 
+
+    !
+    !flag to check operation success 
+    !
+    INTEGER :: error 
+    LOGICAL :: status
+    INTEGER(HSIZE_T), DIMENSION(3) :: data_dims
+
+
+    !
+    !Create two files containing identical datasets. Write 0's to one
+    !and 1's to the other. 
+    !
+
+    !
+    !data initialization 
+    !
+    do i = 1, 3
+       do j = 1, 4
+          buf1(i,j) = 0;
+       end do
+    end do
+
+    do i = 1, 3
+       do j = 1, 4
+          buf2(i,j) = 1;
+       end do
+    end do
+
+    !
+    !Initialize FORTRAN predifined datatypes
+    !
+!    CALL h5init_types_f(error) 
+!    CALL check("h5init_types_f", error, total_error)
+
+    !
+    !Create file1, file2  using default properties.
+    ! 
+          CALL h5_fixname_f(filename1, fix_filename1, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+    CALL h5fcreate_f(fix_filename1, H5F_ACC_TRUNC_F, file1_id, error)
+    CALL check("h5fcreate_f", error, total_error)
+
+          CALL h5_fixname_f(filename2, fix_filename2, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+    CALL h5fcreate_f(fix_filename2, H5F_ACC_TRUNC_F, file2_id, error)
+    CALL check("h5fcreate_f", error, total_error)
+
+    !
+    !Create the data space for the  datasets. 
+    !
+    CALL h5screate_simple_f(RANK, dimsf, dataspace1, error)
+    CALL check("h5screate_simple_f", error, total_error)
+
+    CALL h5screate_simple_f(RANK, dimsf, dataspace2, error)
+    CALL check("h5screate_simple_f", error, total_error)
+
+    !
+    ! Create the datasets with default properties
+    !
+    CALL h5dcreate_f(file1_id, dsetname1, H5T_NATIVE_INTEGER, dataspace1, &
+         dset1_id, error)
+    CALL check("h5dcreate_f", error, total_error)
+
+    CALL h5dcreate_f(file2_id, dsetname2, H5T_NATIVE_INTEGER, dataspace2, &
+         dset2_id, error)
+    CALL check("h5dcreate_f", error, total_error)
+
+    !
+    ! Write the datasets
+    !
+    data_dims(1) = 3
+    data_dims(2) = 4
+    CALL h5dwrite_f(dset1_id, H5T_NATIVE_INTEGER, buf1, data_dims, error)
+    CALL check("h5dwrite_f", error, total_error)
+
+    CALL h5dwrite_f(dset2_id, H5T_NATIVE_INTEGER, buf2, data_dims, error)
+    CALL check("h5dwrite_f", error, total_error)
+
+    !
+    !Close the dataspace for the datasets.
+    !
+    CALL h5sclose_f(dataspace1, error)
+    CALL check("h5sclose_f", error, total_error)
+
+    CALL h5sclose_f(dataspace2, error)
+    CALL check("h5sclose_f", error, total_error)
+
+    !
+    !Close the datasets.
+    !
+    CALL h5dclose_f(dset1_id, error)
+    CALL check("h5dclose_f", error, total_error)
+
+    CALL h5dclose_f(dset2_id, error)
+    CALL check("h5dclose_f", error, total_error)
+
+    !
+    !Close the files.
+    !
+    CALL h5fclose_f(file1_id, error)
+    CALL check("h5fclose_f", error, total_error)
+
+    CALL h5fclose_f(file2_id, error)
+    CALL check("h5fclose_f", error, total_error)
+
+    !
+    !Open the two files.  Select two points in one file, write values to 
+    !those point locations, then do H5Scopy and write the values to the  
+    !other file.  Close files.
+    !
+
+    !
+    !Open the files.
+    !
+    CALL h5fopen_f (fix_filename1, H5F_ACC_RDWR_F, file1_id, error)
+    CALL check("h5fopen_f", error, total_error)
+
+    CALL h5fopen_f (fix_filename2, H5F_ACC_RDWR_F, file2_id, error)
+    CALL check("h5fopen_f", error, total_error)
+
+    !
+    !Open the  datasets.
+    !
+    CALL h5dopen_f(file1_id, dsetname1, dset1_id, error)
+    CALL check("h5dopen_f", error, total_error)
+
+    CALL h5dopen_f(file2_id, dsetname2, dset2_id, error)
+    CALL check("h5dopen_f", error, total_error)
+
+    !
+    !Get dataset1's dataspace handle.
+    !
+    CALL h5dget_space_f(dset1_id, dataspace1, error)
+    CALL check("h5dget_space_f", error, total_error)
+
+    !
+    !create memory dataspace.
+    !
+    CALL h5screate_simple_f(memrank, dimsm, memspace, error)
+    CALL check("h5screate_simple_f", error, total_error)
+
+    !
+    !Set the selected point positions.Because Fortran array index starts 
+    ! from 1, so add one to the actual select points in C
+    !
+    coord(1,1) = 1     
+    coord(2,1) = 2     
+    coord(1,2) = 1     
+    coord(2,2) = 4
+
+    !
+    !Select the elements in file space
+    !
+    CALL h5sselect_elements_f(dataspace1, H5S_SELECT_SET_F, RANK, NUMP,&
+         coord, error)
+    CALL check("h5sselect_elements_f", error, total_error)
+
+    !
+    !Write value into the selected points in dataset1
+    !
+    data_dims(1) = 2
+    CALL H5dwrite_f(dset1_id, H5T_NATIVE_INTEGER, val, data_dims, error, &
+         mem_space_id=memspace, file_space_id=dataspace1)
+    CALL check("h5dwrite_f", error, total_error)
+
+    !
+    !Copy the daspace1 into dataspace2
+    !
+    CALL h5scopy_f(dataspace1, dataspace2, error)  
+    CALL check("h5scopy_f", error, total_error)
+
+    !
+    !Write value into the selected points in dataset2
+    !
+    CALL H5dwrite_f(dset2_id, H5T_NATIVE_INTEGER, val, data_dims, error, &
+         mem_space_id=memspace, file_space_id=dataspace2)
+    CALL check("h5dwrite_f", error, total_error)
+
+    !
+    !Close the dataspace for the datasets.
+    !
+    CALL h5sclose_f(dataspace1, error)
+    CALL check("h5sclose_f", error, total_error)
+
+    CALL h5sclose_f(dataspace2, error)
+    CALL check("h5sclose_f", error, total_error)
+
+    !
+    !Close the memoryspace.
+    !
+    CALL h5sclose_f(memspace, error)
+    CALL check("h5sclose_f", error, total_error)
+
+    !
+    !Close the datasets.
+    !
+    CALL h5dclose_f(dset1_id, error)
+    CALL check("h5dclose_f", error, total_error)
+
+    CALL h5dclose_f(dset2_id, error)
+    CALL check("h5dclose_f", error, total_error)
+
+    !
+    !Close the files.
+    !
+    CALL h5fclose_f(file1_id, error)
+    CALL check("h5fclose_f", error, total_error)
+
+    CALL h5fclose_f(file2_id, error)
+    CALL check("h5fclose_f", error, total_error)
+
+    !
+    !Open both files and print the contents of the datasets.
+    !
+
+    !
+    !Open the files.
+    !
+    CALL h5fopen_f (fix_filename1, H5F_ACC_RDWR_F, file1_id, error)
+    CALL check("h5fopen_f", error, total_error)
+
+    CALL h5fopen_f (fix_filename2, H5F_ACC_RDWR_F, file2_id, error)
+    CALL check("h5fopen_f", error, total_error)
+
+    !
+    !Open the  datasets.
+    !
+    CALL h5dopen_f(file1_id, dsetname1, dset1_id, error)
+    CALL check("h5dopen_f", error, total_error)
+
+    CALL h5dopen_f(file2_id, dsetname2, dset2_id, error)
+    CALL check("h5dopen_f", error, total_error)
+
+    !
+    !Read dataset1.
+    !
+    data_dims(1) = 3
+    data_dims(2) = 4
+    CALL h5dread_f(dset1_id, H5T_NATIVE_INTEGER, bufnew, data_dims, error)
+    CALL check("h5dread_f", error, total_error)
+
+    !
+    !Display the data read from dataset "Copy1"
+    !
+    !write(*,*) "The data in dataset Copy1 is: "
+    !do i = 1, 3
+    !   print *, (bufnew(i,j), j = 1,4)
+    !end do
+
+    !
+    !Read dataset2.
+    !
+    CALL h5dread_f(dset2_id, H5T_NATIVE_INTEGER, bufnew, data_dims, error)
+    CALL check("h5dread_f", error, total_error)
+
+    !
+    !Display the data read from dataset "Copy2"
+    !
+    !write(*,*) "The data in dataset Copy2 is: "
+    !do i = 1, 3
+    !   print *, (bufnew(i,j), j = 1,4)
+    !end do
+
+    !
+    !Close the datasets.
+    !
+    CALL h5dclose_f(dset1_id, error)
+    CALL check("h5dclose_f", error, total_error)
+
+    CALL h5dclose_f(dset2_id, error)
+    CALL check("h5dclose_f", error, total_error)
+
+    !
+    !Close the files.
+    !
+    CALL h5fclose_f(file1_id, error)
+    CALL check("h5fclose_f", error, total_error)
+
+    CALL h5fclose_f(file2_id, error)
+    CALL check("h5fclose_f", error, total_error)
+
+
+          if(cleanup) CALL h5_cleanup_f(filename1, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+          if(cleanup) CALL h5_cleanup_f(filename2, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+     RETURN
+  END SUBROUTINE  test_select_element
+
+
+  SUBROUTINE test_basic_select(cleanup, total_error)
+    USE HDF5 ! This module contains all necessary modules 
+
+    IMPLICIT NONE
+    LOGICAL, INTENT(IN)  :: cleanup
+    INTEGER, INTENT(OUT) :: total_error 
+
+     !
+     !the dataset is stored in file "testselect.h5"
+     !
+     CHARACTER(LEN=10), PARAMETER :: filename = "testselect"
+     CHARACTER(LEN=80) :: fix_filename 
+
+     !
+     !dataspace rank 
+     !
+     INTEGER, PARAMETER :: RANK = 2
+
+     !
+     !select NUMP_POINTS points from the file 
+     !
+     INTEGER(SIZE_T), PARAMETER :: NUMPS = 10
+
+     !
+     !dataset name is "testselect"
+     !
+     CHARACTER(LEN=10), PARAMETER :: dsetname = "testselect"
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+     INTEGER(HID_T) :: dataspace     ! Dataspace identifier 
+     INTEGER(HID_T) :: memspace      ! memspace identifier 
+
+     !
+     !Dataset dimensions 
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: dimsf = (/5,6/)
+
+     !
+     !Size of the hyperslab in the file 
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: count = (/2,2/)
+
+     !
+     !hyperslab offset in the file 
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: offset = (/0,0/)
+
+     !
+     !start block for getting the selected hyperslab 
+     !
+     INTEGER(HSIZE_T) :: startblock = 0
+
+     !
+     !start point for getting the selected elements 
+     !
+     INTEGER(HSIZE_T)  :: startpoint = 0
+
+     !
+     !Stride of the hyperslab in the file 
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: stride = (/3,3/)
+
+     !
+     !BLock size of the hyperslab in the file 
+     !
+     INTEGER(HSIZE_T), DIMENSION(2) :: block = (/2,2/)
+
+     !
+     !array to give selected points' coordinations 
+     !
+     INTEGER(HSIZE_T), DIMENSION(RANK, NUMPS) :: coord
+
+     !
+     !Size of the hyperslab in memory 
+     !
+     INTEGER(HSIZE_T), DIMENSION(3) :: count_out = (/3,4,1/)
+
+     !
+     !Number of hyperslabs selected in the current dataspace 
+     !
+     INTEGER(HSSIZE_T) :: num_blocks
+
+     !
+     !allocatable array for putting a list of hyperslabs
+     !selected in the current file dataspace 
+     !
+     INTEGER(HSIZE_T), ALLOCATABLE, DIMENSION(:) :: blocklist
+
+     !
+     !Number of points selected in the current dataspace 
+     !
+     INTEGER(HSSIZE_T) :: num_points
+     INTEGER(HSIZE_T) :: num1_points
+
+     !
+     !allocatable array for putting a list of points
+     !selected in the current file dataspace 
+     !
+     INTEGER(HSIZE_T), ALLOCATABLE, DIMENSION(:) :: pointlist
+
+     !
+     !start and end bounds in the current dataspace selection 
+     !
+     INTEGER(HSIZE_T), DIMENSION(RANK) :: startout, endout
+
+     !
+     !data to write 
+     !
+     INTEGER, DIMENSION(5,6) :: data
+
+     !
+     !output buffer 
+     !
+     INTEGER, DIMENSION(7,7,3) :: data_out
+
+     !
+     !general purpose integer 
+     !
+     INTEGER :: i, j, k 
+
+     !
+     !flag to check operation success 
+     !
+     INTEGER :: error, error_n 
+     INTEGER(HSIZE_T), DIMENSION(3) :: data_dims
+
+     !
+     !initialize the coord array to give the selected points' position 
+     !
+     coord(1,1) = 1
+     coord(2,1) = 1
+     coord(1,2) = 1
+     coord(2,2) = 3
+     coord(1,3) = 1
+     coord(2,3) = 5
+     coord(1,4) = 3
+     coord(2,4) = 1
+     coord(1,5) = 3
+     coord(2,5) = 3
+     coord(1,6) = 3
+     coord(2,6) = 5
+     coord(1,7) = 4
+     coord(2,7) = 3
+     coord(1,8) = 4
+     coord(2,8) = 1
+     coord(1,9) = 5
+     coord(2,9) = 3
+     coord(1,10) = 5
+     coord(2,10) = 5
+
+     !
+     !Create a new file using default properties.
+     ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+     CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+     CALL check("h5fcreate_f", error, total_error)
+
+     !
+     !Create the data space for the  dataset. 
+     !
+     CALL h5screate_simple_f(RANK, dimsf, dataspace, error)
+     CALL check("h5screate_simple_f", error, total_error)
+
+     !
+     ! Create the dataset with default properties
+     !
+     CALL h5dcreate_f(file_id, dsetname, H5T_STD_I32BE, dataspace, &
+                      dset_id, error)
+     CALL check("h5dcreate_f", error, total_error)
+
+     !
+     ! Write the dataset
+     !
+     data_dims(1) = 5
+     data_dims(2) = 6
+     CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data, data_dims, error)
+     CALL check("h5dwrite_f", error, total_error)
+
+     !
+     !Close the dataspace for the dataset.
+     !
+     CALL h5sclose_f(dataspace, error)
+     CALL check("h5sclose_f", error, total_error)
+
+     !
+     !Close the dataset.
+     !
+     CALL h5dclose_f(dset_id, error)
+     CALL check("h5dclose_f", error, total_error)
+
+     !
+     !Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+     CALL check("h5fclose_f", error, total_error)
+
+     !
+     !Open the file.
+     !
+     CALL h5fopen_f (fix_filename, H5F_ACC_RDONLY_F, file_id, error)
+     CALL check("h5fopen_f", error, total_error)
+       
+     !
+     !Open the  dataset.
+     !
+     CALL h5dopen_f(file_id, dsetname, dset_id, error)
+     CALL check("h5dopen_f", error, total_error)
+
+     !
+     !Get dataset's dataspace handle.
+     !
+     CALL h5dget_space_f(dset_id, dataspace, error)
+     CALL check("h5dget_space_f", error, total_error)
+
+     !
+     !Select hyperslab in the dataset.
+     !
+     CALL h5sselect_hyperslab_f(dataspace, H5S_SELECT_SET_F, &
+                                offset, count, error, stride, block) 
+     CALL check("h5sselect_hyperslab_f", error, total_error)
+
+     !
+     !get the number of hyperslab blocks in the current dataspac selection 
+     !
+     CALL h5sget_select_hyper_nblocks_f(dataspace, num_blocks, error)
+     CALL check("h5sget_select_hyper_nblocks_f", error, total_error)
+     IF (num_blocks .NE. 4) write (*,*) "error occured with num_blocks"
+     !write(*,*) num_blocks
+     !result of num_blocks is 4
+
+     !
+     !allocate the blocklist array
+     !
+     ALLOCATE(blocklist(num_blocks*RANK*2), STAT= error)
+     if(error .NE. 0) then
+         STOP
+     endif
+     
+     !
+     !get the list of hyperslabs selected in the current dataspac selection 
+     !
+     CALL h5sget_select_hyper_blocklist_f(dataspace, startblock, &
+                                          num_blocks, blocklist, error)
+     CALL check("h5sget_select_hyper_blocklist_f", error, total_error)
+     !write(*,*) (blocklist(i), i =1, num_blocks*RANK*2)
+     !result of blocklist selected is:
+     !1,  1,  2,  2,  4,  1,  5,  2,  1,  4,  2,  5,  4,  4,  5,  5     
+
+     !
+     !deallocate the blocklist array
+     !
+     DEALLOCATE(blocklist)
+
+     !
+     !get the selection bounds in the current dataspac selection 
+     !
+     CALL h5sget_select_bounds_f(dataspace, startout, endout, error)
+     CALL check("h5sget_select_bounds_f", error, total_error)
+     IF ( (startout(1) .ne. 1) .or. (startout(2) .ne. 1) ) THEN
+        write(*,*) "error occured to select_bounds's start position"
+     END IF
+
+     IF ( (endout(1) .ne. 5) .or. (endout(2) .ne. 5) ) THEN
+        write(*,*) "error occured to select_bounds's end position"
+     END IF
+     !write(*,*) (startout(i), i = 1, RANK)
+     !result of startout is 0, 0
+
+     !write(*,*) (endout(i), i = 1, RANK)
+     !result of endout is 5, 5
+
+     !
+     !allocate the pointlist array
+     !
+!     ALLOCATE(pointlist(num_blocks*RANK), STAT= error)
+     ALLOCATE(pointlist(20), STAT= error)
+     if(error .NE. 0) then
+         STOP
+     endif
+
+     !
+     !Select the elements in file space
+     !
+     CALL h5sselect_elements_f(dataspace, H5S_SELECT_SET_F, RANK, NUMPS,&
+                               coord, error)
+     CALL check("h5sselect_elements_f", error, total_error)
+
+     !
+     !Get the number of selected elements
+     !
+     CALL h5sget_select_elem_npoints_f(dataspace, num_points, error)
+     CALL check("h5sget_select_elem_npoints_f", error, total_error)
+     IF (num_points .NE. 10) write(*,*) "error occured with num_points"
+     !write(*,*) num_points 
+     ! result of num_points is 10
+
+     !
+     !Get the list of selected elements
+     !
+     num1_points = num_points
+     CALL h5sget_select_elem_pointlist_f(dataspace, startpoint, &
+                                          num1_points, pointlist, error)
+     CALL check("h5sget_select_elem_pointlist_f", error, total_error)
+     !write(*,*) (pointlist(i), i =1, num1_points*RANK) 
+     !result of pintlist is:
+     !1,  1,  3,  1,  5,  1,  1,  3,  3,  3,  5,  3,  3, 
+     !4,  1,  4,  3,  5,  5,  5
+      
+     !
+     !deallocate the pointlist array
+     !
+     DEALLOCATE(pointlist)
+
+     !
+     !Close the dataspace for the dataset.
+     !
+     CALL h5sclose_f(dataspace, error)
+     CALL check("h5sclose_f", error, total_error)
+
+     !
+     !Close the dataset.
+     !
+     CALL h5dclose_f(dset_id, error)
+     CALL check("h5dclose_f", error, total_error)
+
+     !
+     !Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+     CALL check("h5fclose_f", error, total_error)
+
+
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+
+     RETURN
+  END SUBROUTINE  test_basic_select
+
+

Added: packages/hdf5/branches/upstream/current/fortran/test/tH5T.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/tH5T.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/tH5T.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,825 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+    SUBROUTINE compoundtest(cleanup, total_error)
+!
+! This program creates a dataset that is one dimensional array of
+! structures  {
+!                 character*2
+!                 integer
+!                 double precision
+!                 real
+!                                   }
+! Data is written and read back by fields.
+!
+! The following H5T interface functions are tested:
+! h5tcopy_f, h5tset(get)_size_f, h5tcreate_f, h5tinsert_f,  h5tclose_f,
+! h5tget_class_f, h5tget_member_name_f, h5tget_member_offset_f, h5tget_member_type_f,
+! h5tequal_f, h5tinsert_array_f, h5tcommit_f
+
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+     LOGICAL, INTENT(IN)  :: cleanup
+     INTEGER, INTENT(OUT) :: total_error 
+
+     CHARACTER(LEN=8), PARAMETER :: filename = "compound" ! File name
+     CHARACTER(LEN=80) :: fix_filename
+     CHARACTER(LEN=8), PARAMETER :: dsetname = "Compound"     ! Dataset name
+     INTEGER, PARAMETER :: dimsize = 6 ! Size of the dataset
+     INTEGER, PARAMETER :: COMP_NUM_MEMBERS = 4 ! Number of members in the compound datatype 
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+     INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+     INTEGER(HID_T) :: dtype_id      ! Compound datatype identifier
+     INTEGER(HID_T) :: dtarray_id    ! Compound datatype identifier
+     INTEGER(HID_T) :: arrayt_id    ! Array datatype identifier
+     INTEGER(HID_T) :: dt1_id      ! Memory datatype identifier (for character field)
+     INTEGER(HID_T) :: dt2_id      ! Memory datatype identifier (for integer field)
+     INTEGER(HID_T) :: dt3_id      ! Memory datatype identifier (for double precision field)
+     INTEGER(HID_T) :: dt4_id      ! Memory datatype identifier (for real field)
+     INTEGER(HID_T) :: dt5_id      ! Memory datatype identifier 
+     INTEGER(HID_T) :: membtype_id ! Datatype identifier 
+     INTEGER(HID_T) :: plist_id    ! Dataset trasfer property
+
+
+     INTEGER(HSIZE_T), DIMENSION(1) :: dims = (/dimsize/) ! Dataset dimensions
+     INTEGER     ::   rank = 1                            ! Dataset rank
+
+     INTEGER     ::   error ! Error flag
+     INTEGER(SIZE_T)     ::   type_size  ! Size of the datatype
+     INTEGER(SIZE_T)     ::   type_sizec  ! Size of the character datatype 
+     INTEGER(SIZE_T)     ::   type_sizei  ! Size of the integer datatype
+     INTEGER(SIZE_T)     ::   type_sized  ! Size of the double precision datatype
+     INTEGER(SIZE_T)     ::   type_sizer  ! Size of the real datatype
+     INTEGER(SIZE_T)     ::   offset     ! Member's offset
+     INTEGER(SIZE_T)     ::   offset_out     ! Member's offset
+     CHARACTER(LEN=2), DIMENSION(dimsize)      :: char_member
+     CHARACTER(LEN=2), DIMENSION(dimsize)      :: char_member_out ! Buffer to read data out
+     INTEGER, DIMENSION(dimsize)          :: int_member
+     INTEGER, DIMENSION(dimsize)          :: int_member_out
+     DOUBLE PRECISION, DIMENSION(dimsize) :: double_member
+     DOUBLE PRECISION, DIMENSION(dimsize) :: double_member_out
+     REAL, DIMENSION(dimsize)             :: real_member
+     REAL, DIMENSION(dimsize)             :: real_member_out
+     INTEGER :: i
+     INTEGER :: class ! Datatype class              
+     INTEGER :: num_members ! Number of members in the compound datatype
+     CHARACTER(LEN=256) :: member_name 
+     INTEGER :: len ! Lenght of the name of the compound datatype member 
+     INTEGER :: member_index ! index of the field
+     INTEGER(HSIZE_T), DIMENSION(3) :: array_dims=(/2,3,4/)
+     INTEGER :: array_dims_range = 3
+     INTEGER :: elements = 24 ! number of elements in the array_dims array.
+     INTEGER(SIZE_T) :: sizechar
+     INTEGER(HSIZE_T), DIMENSION(1) :: data_dims
+     LOGICAL :: flag = .TRUE.
+     data_dims(1) = dimsize
+     !
+     ! Initialize data buffer.
+     !
+     do i = 1, dimsize
+        char_member(i)(1:1) = char(65+i)
+        char_member(i)(2:2) = char(65+i)
+        char_member_out(i)(1:1)   = char(65) 
+        char_member_out(i)(2:2)   = char(65) 
+        int_member(i)   = i
+        int_member_out(i)   = 0
+        double_member(i)   = 2.* i
+        double_member_out(i)   = 0.
+        real_member(i)   = 3. * i
+        real_member_out(i)   = 0.
+     enddo
+
+     !
+     ! Set dataset transfer property to preserve partially initialized fields
+     ! during write/read to/from dataset with compound datatype.
+     !
+     CALL h5pcreate_f(H5P_DATASET_XFER_F, plist_id, error)
+         CALL check("h5pcreate_f", error, total_error)
+     CALL h5pset_preserve_f(plist_id, flag, error)
+         CALL check("h5pset_preserve_f", error, total_error)
+     !
+     ! Create a new file using default properties.
+     ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+     CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+         CALL check("h5fcreate_f", error, total_error)
+
+     ! 
+     ! Create the dataspace.
+     !
+     CALL h5screate_simple_f(rank, dims, dspace_id, error)
+         CALL check("h5screate_simple_f", error, total_error)
+     !
+     ! Create compound datatype.
+     !
+     ! First calculate total size by calculating sizes of each member
+     !
+     CALL h5tcopy_f(H5T_NATIVE_CHARACTER, dt5_id, error)
+         CALL check("h5tcopy_f", error, total_error)
+     sizechar = 2
+     CALL h5tset_size_f(dt5_id, sizechar, error)
+         CALL check("h5tset_size_f", error, total_error)
+     CALL h5tget_size_f(dt5_id, type_sizec, error)
+         CALL check("h5tget_size_f", error, total_error)
+     CALL h5tget_size_f(H5T_NATIVE_INTEGER, type_sizei, error)
+         CALL check("h5tget_size_f", error, total_error)
+     CALL h5tget_size_f(H5T_NATIVE_DOUBLE, type_sized, error)
+         CALL check("h5tget_size_f", error, total_error)
+     CALL h5tget_size_f(H5T_NATIVE_REAL, type_sizer, error)
+         CALL check("h5tget_size_f", error, total_error)
+     !write(*,*) "get sizes", type_sizec, type_sizei, type_sizer, type_sized
+     type_size = type_sizec + type_sizei + type_sized + type_sizer
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_size, dtype_id, error)
+         CALL check("h5tcreate_f", error, total_error)
+     !
+     ! Insert memebers
+     !
+     ! CHARACTER*2 memeber
+     !
+     offset = 0
+     CALL h5tinsert_f(dtype_id, "char_field", offset, dt5_id, error)
+         CALL check("h5tinsert_f", error, total_error)
+     !
+     ! INTEGER member
+     !
+     offset = offset + type_sizec ! Offset of the second memeber is 2
+     CALL h5tinsert_f(dtype_id, "integer_field", offset, H5T_NATIVE_INTEGER, error)
+         CALL check("h5tinsert_f", error, total_error)
+     !
+     ! DOUBLE PRECISION member
+     !
+     offset = offset + type_sizei  ! Offset of the third memeber is 6
+     CALL h5tinsert_f(dtype_id, "double_field", offset, H5T_NATIVE_DOUBLE, error)
+         CALL check("h5tinsert_f", error, total_error)
+     !
+     ! REAL member
+     !
+     offset = offset + type_sized  ! Offset of the last member is 14
+     CALL h5tinsert_f(dtype_id, "real_field", offset, H5T_NATIVE_REAL, error)
+         CALL check("h5tinsert_f", error, total_error)
+
+     !
+     ! Create the dataset with compound datatype.
+     !
+     CALL h5dcreate_f(file_id, dsetname, dtype_id, dspace_id, &
+                      dset_id, error)
+         CALL check("h5dcreate_f", error, total_error)
+     !
+     ! Create memory types. We have to create a compound datatype 
+     ! for each member we want to write. 
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sizec, dt1_id, error)
+         CALL check("h5tcreate_f", error, total_error)
+     offset = 0
+     CALL h5tinsert_f(dt1_id, "char_field", offset, dt5_id, error)
+         CALL check("h5tinsert_f", error, total_error)
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sizei, dt2_id, error)
+         CALL check("h5tcreate_f", error, total_error)
+     offset = 0
+     CALL h5tinsert_f(dt2_id, "integer_field", offset, H5T_NATIVE_INTEGER, error)
+         CALL check("h5tinsert_f", error, total_error)
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sized, dt3_id, error)
+         CALL check("h5tcreate_f", error, total_error)
+     offset = 0
+     CALL h5tinsert_f(dt3_id, "double_field", offset, H5T_NATIVE_DOUBLE, error)
+         CALL check("h5tinsert_f", error, total_error)
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sizer, dt4_id, error)
+         CALL check("h5tcreate_f", error, total_error)
+     offset = 0
+     CALL h5tinsert_f(dt4_id, "real_field", offset, H5T_NATIVE_REAL, error)
+         CALL check("h5tinsert_f", error, total_error)
+     !
+     ! Write data by fields in the datatype. Fields order is not important.
+     !
+     CALL h5dwrite_f(dset_id, dt4_id, real_member, data_dims, error, xfer_prp = plist_id)
+         CALL check("h5dwrite_f", error, total_error)
+     CALL h5dwrite_f(dset_id, dt1_id, char_member, data_dims, error, xfer_prp = plist_id)
+         CALL check("h5dwrite_f", error, total_error)
+     CALL h5dwrite_f(dset_id, dt3_id, double_member, data_dims, error, xfer_prp = plist_id)
+         CALL check("h5dwrite_f", error, total_error)
+     CALL h5dwrite_f(dset_id, dt2_id, int_member, data_dims, error, xfer_prp = plist_id)
+         CALL check("h5dwrite_f", error, total_error)
+
+     !   
+     ! End access to the dataset and release resources used by it.
+     ! 
+     CALL h5dclose_f(dset_id, error)
+         CALL check("h5dclose_f", error, total_error)
+
+     !
+     ! Terminate access to the data space.
+     !
+     CALL h5sclose_f(dspace_id, error)
+         CALL check("h5sclose_f", error, total_error)
+     !
+     ! Terminate access to the datatype
+     !
+     CALL h5tclose_f(dtype_id, error)
+         CALL check("h5tclose_f", error, total_error)
+     CALL h5tclose_f(dt1_id, error)
+         CALL check("h5tclose_f", error, total_error)
+     CALL h5tclose_f(dt2_id, error)
+         CALL check("h5tclose_f", error, total_error)
+     CALL h5tclose_f(dt3_id, error)
+         CALL check("h5tclose_f", error, total_error)
+     CALL h5tclose_f(dt4_id, error)
+         CALL check("h5tclose_f", error, total_error)
+
+     !
+     ! Create and store compound datatype with the character and 
+     ! array members.
+     !
+     type_size = type_sizec + elements*type_sizer ! Size of compound datatype
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_size, dtarray_id, error)
+         CALL check("h5tcreate_f", error, total_error)
+     offset = 0
+     CALL h5tinsert_f(dtarray_id, "char_field", offset, H5T_NATIVE_CHARACTER, error)
+         CALL check("h5tinsert_f", error, total_error)
+     offset = type_sizec
+     CALL h5tarray_create_f(H5T_NATIVE_REAL, array_dims_range, array_dims, arrayt_id, error)
+         CALL check("h5tarray_create_f", error, total_error)
+     CALL h5tinsert_f(dtarray_id,"array_field", offset, arrayt_id, error)
+         CALL check("h5tinsert_f", error, total_error)
+     CALL h5tcommit_f(file_id, "Compound_with_array_member", dtarray_id, error)
+         CALL check("h5tcommit_f", error, total_error)
+     CALL h5tclose_f(arrayt_id, error)
+         CALL check("h5tclose_f", error, total_error)
+     CALL h5tclose_f(dtarray_id, error)
+         CALL check("h5tclose_f", error, total_error)
+      
+     ! 
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+         CALL check("h5fclose_f", error, total_error)
+     
+     !
+     ! Open the file.
+     !
+     CALL h5fopen_f (fix_filename, H5F_ACC_RDWR_F, file_id, error)
+         CALL check("h5fopen_f", error, total_error)
+     !
+     ! Open the dataset.
+     !
+     CALL h5dopen_f(file_id, dsetname, dset_id, error)
+         CALL check("h5dopen_f", error, total_error)
+     !
+     ! Get datatype of the open dataset.
+     ! Check it class, number of members,  and member's names.
+     ! 
+     CALL h5dget_type_f(dset_id, dtype_id, error)
+         CALL check("h5dget_type_f", error, total_error)
+     CALL h5tget_class_f(dtype_id, class, error)
+         CALL check("h5dget_class_f", error, total_error)
+         if (class .ne. H5T_COMPOUND_F) then
+            write(*,*) " Wrong class type returned"
+            total_error = total_error + 1
+         endif
+     CALL h5tget_nmembers_f(dtype_id, num_members, error)
+         CALL check("h5dget_nmembers_f", error, total_error)
+         if (num_members .ne. COMP_NUM_MEMBERS ) then
+            write(*,*) " Wrong number of members returned"
+            total_error = total_error + 1
+         endif
+     !
+     !  Go through the members and find out their names and offsets.
+     !  Also see if name corresponds to the index
+     !
+     do i = 1, num_members
+        CALL h5tget_member_name_f(dtype_id, i-1, member_name, len, error)
+         CALL check("h5tget_member_name_f", error, total_error)
+        CALL h5tget_member_offset_f(dtype_id, i-1, offset_out, error)
+         CALL check("h5tget_member_offset_f", error, total_error)
+        CALL h5tget_member_index_f(dtype_id, member_name(1:len), member_index, error)
+         CALL check("h5tget_member_index_f", error, total_error)
+         if(member_index .ne. i-1) then
+            write(*,*) "Index returned is incorrect"
+            write(*,*) member_index, i-1
+            total_error = total_error + 1
+            endif
+
+        CHECK_NAME: SELECT CASE (member_name(1:len))
+        CASE("char_field")
+             if(offset_out .ne. 0) then
+               write(*,*) "Offset of the char member is incorrect"
+               total_error = total_error + 1
+             endif 
+             CALL h5tget_member_type_f(dtype_id, i-1, membtype_id, error)
+              CALL check("h5tget_member_type_f", error, total_error)
+             CALL h5tequal_f(membtype_id, dt5_id, flag, error)
+              CALL check("h5tequal_f", error, total_error)
+             if(.not. flag) then
+                write(*,*) "Wrong member type returned for character member"
+                total_error = total_error + 1
+             endif 
+             CALL h5tget_member_class_f(dtype_id, i-1, class, error)
+              CALL check("h5tget_member_class_f",error, total_error)
+              if (class .ne. H5T_STRING_F) then
+                 write(*,*) "Wrong class returned for character member"
+                 total_error = total_error + 1
+              endif
+        CASE("integer_field")
+             if(offset_out .ne. type_sizec) then
+               write(*,*) "Offset of the integer member is incorrect"
+               total_error = total_error + 1
+             endif 
+             CALL h5tget_member_type_f(dtype_id, i-1, membtype_id, error)
+              CALL check("h5tget_member_type_f", error, total_error)
+             CALL h5tequal_f(membtype_id, H5T_NATIVE_INTEGER, flag, error)
+              CALL check("h5tequal_f", error, total_error)
+             if(.not. flag) then
+                write(*,*) "Wrong member type returned for integer memebr"
+                total_error = total_error + 1
+             endif 
+             CALL h5tget_member_class_f(dtype_id, i-1, class, error)
+              CALL check("h5tget_member_class_f",error, total_error)
+              if (class .ne. H5T_INTEGER_F) then
+                 write(*,*) "Wrong class returned for integer member"
+                 total_error = total_error + 1
+              endif
+        CASE("double_field")
+             if(offset_out .ne. (type_sizec+type_sizei)) then
+               write(*,*) "Offset of the double precision member is incorrect"
+               total_error = total_error + 1
+             endif 
+             CALL h5tget_member_type_f(dtype_id, i-1, membtype_id, error)
+              CALL check("h5tget_member_type_f", error, total_error)
+             CALL h5tequal_f(membtype_id, H5T_NATIVE_DOUBLE, flag, error)
+              CALL check("h5tequal_f", error, total_error)
+             if(.not. flag) then
+                write(*,*) "Wrong member type returned for double precision memebr"
+                total_error = total_error + 1
+             endif 
+             CALL h5tget_member_class_f(dtype_id, i-1, class, error)
+              CALL check("h5tget_member_class_f",error, total_error)
+              if (class .ne. H5T_FLOAT_F) then
+                 write(*,*) "Wrong class returned for double precision member"
+                 total_error = total_error + 1
+              endif
+        CASE("real_field")
+             if(offset_out .ne. (type_sizec+type_sizei+type_sized)) then
+               write(*,*) "Offset of the real member is incorrect"
+               total_error = total_error + 1
+             endif 
+             CALL h5tget_member_type_f(dtype_id, i-1, membtype_id, error)
+              CALL check("h5tget_member_type_f", error, total_error)
+             CALL h5tequal_f(membtype_id, H5T_NATIVE_REAL, flag, error)
+              CALL check("h5tequal_f", error, total_error)
+             if(.not. flag) then
+                write(*,*) "Wrong member type returned for real memebr"
+                total_error = total_error + 1
+             endif 
+             CALL h5tget_member_class_f(dtype_id, i-1, class, error)
+              CALL check("h5tget_member_class_f",error, total_error)
+              if (class .ne. H5T_FLOAT_F) then
+                 write(*,*) "Wrong class returned for real member"
+                 total_error = total_error + 1
+              endif
+        CASE DEFAULT
+               write(*,*) "Wrong member's name"
+               total_error = total_error + 1
+  
+        END SELECT CHECK_NAME
+
+     enddo
+     !
+     ! Create memory datatype to read character member of the compound datatype.
+     !
+     CALL h5tcopy_f(H5T_NATIVE_CHARACTER, dt2_id, error)
+         CALL check("h5tcopy_f", error, total_error)
+     sizechar = 2 
+     CALL h5tset_size_f(dt2_id, sizechar, error)
+         CALL check("h5tset_size_f", error, total_error)
+     CALL h5tget_size_f(dt2_id, type_size, error)
+         CALL check("h5tget_size_f", error, total_error)
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_size, dt1_id, error)
+         CALL check("h5tcreate_f", error, total_error)
+     offset = 0
+     CALL h5tinsert_f(dt1_id, "char_field", offset, dt2_id, error)
+         CALL check("h5tinsert_f", error, total_error)
+     !
+     ! Read part of the dataset
+     !
+     CALL h5dread_f(dset_id, dt1_id, char_member_out, data_dims, error)
+         CALL check("h5dread_f", error, total_error)
+         do i = 1, dimsize
+            if (char_member_out(i) .ne. char_member(i)) then
+                write(*,*) " Wrong character data is read back "
+                total_error = total_error + 1
+            endif
+         enddo
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sizei, dt5_id, error)
+         CALL check("h5tcreate_f", error, total_error)
+     offset = 0
+     CALL h5tinsert_f(dt5_id, "integer_field", offset, H5T_NATIVE_INTEGER, error)
+         CALL check("h5tinsert_f", error, total_error)
+     !
+     ! Read part of the dataset
+     !
+     CALL h5dread_f(dset_id, dt5_id, int_member_out, data_dims, error)
+         CALL check("h5dread_f", error, total_error)
+         do i = 1, dimsize
+            if (int_member_out(i) .ne. int_member(i)) then
+                write(*,*) " Wrong integer data is read back "
+                total_error = total_error + 1
+            endif
+         enddo
+     !
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sized, dt3_id, error)
+         CALL check("h5tcreate_f", error, total_error)
+     offset = 0
+     CALL h5tinsert_f(dt3_id, "double_field", offset, H5T_NATIVE_DOUBLE, error)
+         CALL check("h5tinsert_f", error, total_error)
+     !
+     ! Read part of the dataset
+     !
+     CALL h5dread_f(dset_id, dt3_id, double_member_out, data_dims, error)
+         CALL check("h5dread_f", error, total_error)
+         do i = 1, dimsize
+            if (double_member_out(i) .ne. double_member(i)) then
+                write(*,*) " Wrong double precision data is read back "
+                total_error = total_error + 1
+            endif
+         enddo
+     !
+     !
+     CALL h5tcreate_f(H5T_COMPOUND_F, type_sizer, dt4_id, error)
+         CALL check("h5tcreate_f", error, total_error)
+     offset = 0
+     CALL h5tinsert_f(dt4_id, "real_field", offset, H5T_NATIVE_REAL, error)
+         CALL check("h5tinsert_f", error, total_error)
+     !
+     ! Read part of the dataset
+     !
+     CALL h5dread_f(dset_id, dt4_id, real_member_out, data_dims, error)
+         CALL check("h5dread_f", error, total_error)
+         do i = 1, dimsize
+            if (real_member_out(i) .ne. real_member(i)) then
+                write(*,*) " Wrong double precision data is read back "
+                total_error = total_error + 1
+            endif
+         enddo
+     !
+
+     !
+     ! Close all open objects.
+     !
+     CALL h5dclose_f(dset_id, error)
+         CALL check("h5dclose_f", error, total_error)
+     CALL h5tclose_f(dt1_id, error)
+         CALL check("h5tclose_f", error, total_error)
+     CALL h5tclose_f(dt2_id, error)
+         CALL check("h5tclose_f", error, total_error)
+     CALL h5tclose_f(dt3_id, error)
+         CALL check("h5tclose_f", error, total_error)
+     CALL h5tclose_f(dt4_id, error)
+         CALL check("h5tclose_f", error, total_error)
+     CALL h5tclose_f(dt5_id, error)
+         CALL check("h5tclose_f", error, total_error)
+     CALL h5fclose_f(file_id, error)
+         CALL check("h5fclose_f", error, total_error)
+
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+     RETURN
+     END SUBROUTINE compoundtest
+
+
+
+     
+    SUBROUTINE basic_data_type_test(cleanup, total_error)
+
+!   This subroutine tests following functionalities: 
+!   H5tget_precision_f, H5tset_precision_f, H5tget_offset_f
+!   H5tset_offset_f, H5tget_pad_f, H5tset_pad_f, H5tget_sign_f,
+!   H5tset_sign_f, H5tget_ebias_f,H5tset_ebias_f, H5tget_norm_f,
+!   H5tset_norm_f, H5tget_inpad_f, H5tset_inpad_f, H5tget_cset_f,
+!   H5tset_cset_f, H5tget_strpad_f, H5tset_strpad_f
+
+     USE HDF5 ! This module contains all necessary modules 
+        
+     IMPLICIT NONE
+     LOGICAL, INTENT(IN)  :: cleanup
+     INTEGER, INTENT(OUT) :: total_error 
+
+     INTEGER(HID_T) :: dtype1_id, dtype2_id, dtype3_id, dtype4_id, dtype5_id  
+                                     ! datatype identifiers
+     INTEGER(SIZE_T) :: precision ! Datatype precision
+     INTEGER(SIZE_T) :: setprecision ! Datatype precision
+     INTEGER(SIZE_T) :: offset ! Datatype offset
+     INTEGER(SIZE_T) :: setoffset ! Datatype offset
+     INTEGER :: lsbpad !padding type of the least significant bit 
+     INTEGER :: msbpad !padding type of the most significant bit 
+     INTEGER :: sign !sign type for an integer type 
+     INTEGER(SIZE_T) :: ebias1 !Datatype exponent bias of a floating-point type 
+     INTEGER(SIZE_T) :: ebias2 !Datatype exponent bias of a floating-point type
+     INTEGER(SIZE_T) :: setebias 
+     INTEGER :: norm   !mantissa normalization of a floating-point datatype 
+     INTEGER :: inpad   !padding type for unused bits in floating-point datatypes.
+     INTEGER :: cset   !character set type of a string datatype
+     INTEGER :: strpad !string padding method for a string datatype
+     INTEGER :: error !error flag
+
+
+     !
+     ! Create a datatype 
+     !
+     CALL h5tcopy_f(H5T_STD_U16BE, dtype1_id, error)
+     CALL check("h5tcopy_f",error,total_error)
+     !
+     !datatype type_id should be modifiable after h5tcopy_f
+     !
+     setprecision = 12
+     CALL h5tset_precision_f(dtype1_id, setprecision, error)
+     CALL check("h5set_precision_f",error,total_error)
+     CALL h5tget_precision_f(dtype1_id,precision, error)
+     CALL check("h5get_precision_f",error,total_error)
+     if(precision .ne. 12) then
+         write (*,*) "got precision is not correct"
+         total_error = total_error + 1
+     end if
+     
+     CALL h5tcopy_f(H5T_STD_I32LE, dtype2_id, error)
+     CALL check("h5tcopy_f",error,total_error)
+     setprecision = 12
+     CALL h5tset_precision_f(dtype2_id, setprecision, error)
+     CALL check("h5set_precision_f",error,total_error)
+
+     setoffset = 2 
+     CALL h5tset_offset_f(dtype1_id, setoffset, error)
+     CALL check("h5set_offset_f",error,total_error)
+     setoffset = 10 
+     CALL h5tset_offset_f(dtype2_id, setoffset, error)
+     CALL check("h5set_offset_f",error,total_error)
+     CALL h5tget_offset_f(dtype2_id,offset, error)
+     CALL check("h5get_offset_f",error,total_error)
+     if(offset .ne. 10) then
+         write (*,*) "got offset is not correct"
+         total_error = total_error + 1
+     end if
+         
+     CALL h5tset_pad_f(dtype2_id,H5T_PAD_ONE_F, H5T_PAD_ONE_F, error)
+     CALL check("h5set_pad_f",error,total_error)
+     CALL h5tget_pad_f(dtype2_id,lsbpad,msbpad, error)
+     CALL check("h5get_pad_f",error,total_error)
+     if((lsbpad .ne. H5T_PAD_ONE_F) .and. (msbpad .ne. H5T_PAD_ONE_F)) then
+         write (*,*) "got pad is not correct"
+         total_error = total_error + 1
+     end if
+
+!     CALL h5tset_sign_f(dtype2_id,H5T_SGN_2_F, error)
+!     CALL check("h5set_sign_f",error,total_error)
+!     CALL h5tget_sign_f(dtype2_id,sign, error)
+     CALL h5tget_sign_f(H5T_NATIVE_INTEGER, sign, error)
+     CALL check("h5tget_sign_f",error,total_error)
+     if(sign .ne. H5T_SGN_2_F ) then
+         write (*,*) "got sign is not correct"
+         total_error = total_error + 1
+     end if
+
+     CALL h5tcopy_f(H5T_IEEE_F64BE, dtype3_id, error)
+     CALL check("h5tcopy_f",error,total_error)
+     CALL h5tcopy_f(H5T_IEEE_F32LE, dtype4_id, error)
+     CALL check("h5tcopy_f",error,total_error)
+
+     setebias = 257
+     CALL h5tset_ebias_f(dtype3_id, setebias, error)
+     CALL check("h5tset_ebias_f",error,total_error)
+     setebias = 1 
+     CALL h5tset_ebias_f(dtype4_id, setebias, error)
+     CALL check("h5tset_ebias_f",error,total_error)
+     CALL h5tget_ebias_f(dtype3_id, ebias1, error)
+     CALL check("h5tget_ebias_f",error,total_error)
+     if(ebias1 .ne. 257 ) then
+         write (*,*) "got ebias is not correct"
+         total_error = total_error + 1
+     end if
+     CALL h5tget_ebias_f(dtype4_id, ebias2, error)
+     CALL check("h5tget_ebias_f",error,total_error)
+     if(ebias2 .ne. 1 ) then
+         write (*,*) "got ebias is not correct"
+         total_error = total_error + 1
+     end if
+       
+     !attention:
+     !It seems that I can't use H5T_NORM_IMPLIED_F to set the norm value
+     !because I got error for the get_norm function
+!     CALL h5tset_norm_f(dtype3_id,H5T_NORM_IMPLIED_F , error)
+!     CALL check("h5tset_norm_f",error,total_error)
+!     CALL h5tget_norm_f(dtype3_id, norm, error)
+!     CALL check("h5tget_norm_f",error,total_error)
+!     if(norm .ne. H5T_NORM_IMPLIED_F ) then
+!         write (*,*) "got norm is not correct"
+!         total_error = total_error + 1
+!     end if
+     CALL h5tset_norm_f(dtype3_id, H5T_NORM_MSBSET_F , error)
+     CALL check("h5tset_norm_f",error,total_error)
+     CALL h5tget_norm_f(dtype3_id, norm, error)
+     CALL check("h5tget_norm_f",error,total_error)
+     if(norm .ne. H5T_NORM_MSBSET_F ) then
+         write (*,*) "got norm is not correct"
+         total_error = total_error + 1
+     end if
+
+     CALL h5tset_norm_f(dtype3_id, H5T_NORM_NONE_F , error)
+     CALL check("h5tset_norm_f",error,total_error)
+     CALL h5tget_norm_f(dtype3_id, norm, error)
+     CALL check("h5tget_norm_f",error,total_error)
+     if(norm .ne. H5T_NORM_NONE_F ) then
+         write (*,*) "got norm is not correct"
+         total_error = total_error + 1
+    end if
+
+     CALL h5tset_inpad_f(dtype3_id, H5T_PAD_ZERO_F , error)
+     CALL check("h5tset_inpad_f",error,total_error)
+     CALL h5tget_inpad_f(dtype3_id, inpad , error)
+     CALL check("h5tget_inpad_f",error,total_error)
+     if(inpad .ne. H5T_PAD_ZERO_F ) then
+         write (*,*) "got inpad is not correct"
+         total_error = total_error + 1
+     end if
+
+     CALL h5tset_inpad_f(dtype3_id,H5T_PAD_ONE_F  , error)
+     CALL check("h5tset_inpad_f",error,total_error)
+     CALL h5tget_inpad_f(dtype3_id, inpad , error)
+     CALL check("h5tget_inpad_f",error,total_error)
+     if(inpad .ne. H5T_PAD_ONE_F ) then
+         write (*,*) "got inpad is not correct"
+         total_error = total_error + 1
+     end if
+
+     CALL h5tset_inpad_f(dtype3_id,H5T_PAD_BACKGROUND_F  , error)
+     CALL check("h5tset_inpad_f",error,total_error)
+     CALL h5tget_inpad_f(dtype3_id, inpad , error)
+     CALL check("h5tget_inpad_f",error,total_error)
+     if(inpad .ne. H5T_PAD_BACKGROUND_F ) then
+         write (*,*) "got inpad is not correct"
+         total_error = total_error + 1
+     end if
+
+!     we should not apply h5tset_cset_f to non_character data typemake
+ 
+!     CALL h5tset_cset_f(dtype4_id, H5T_CSET_ASCII_F, error)
+!     CALL check("h5tset_cset_f",error,total_error)
+!     CALL h5tget_cset_f(dtype4_id, cset, error)
+!     CALL check("h5tget_cset_f",error,total_error)
+!     if(cset .ne. H5T_CSET_ASCII_F ) then
+!         write (*,*) "got cset is not correct"
+!         total_error = total_error + 1
+!     end if
+
+     CALL h5tcopy_f(H5T_NATIVE_CHARACTER, dtype5_id, error)
+     CALL check("h5tcopy_f",error,total_error)
+     CALL h5tset_cset_f(dtype5_id, H5T_CSET_ASCII_F, error)
+     CALL check("h5tset_cset_f",error,total_error)
+     CALL h5tget_cset_f(dtype5_id, cset, error)
+     CALL check("h5tget_cset_f",error,total_error)
+     if(cset .ne. H5T_CSET_ASCII_F ) then
+         write (*,*) "got cset is not correct"
+         total_error = total_error + 1
+     end if
+     CALL h5tset_strpad_f(dtype5_id, H5T_STR_NULLPAD_F, error)
+     CALL check("h5tset_strpad_f",error,total_error)
+     CALL h5tget_strpad_f(dtype5_id, strpad, error)
+     CALL check("h5tget_strpad_f",error,total_error)
+     if(strpad .ne. H5T_STR_NULLPAD_F ) then
+         write (*,*) "got strpad is not correct"
+         total_error = total_error + 1
+     end if
+
+     CALL h5tset_strpad_f(dtype5_id, H5T_STR_SPACEPAD_F, error)
+     CALL check("h5tset_strpad_f",error,total_error)
+     CALL h5tget_strpad_f(dtype5_id, strpad, error)
+     CALL check("h5tget_strpad_f",error,total_error)
+     if(strpad .ne. H5T_STR_SPACEPAD_F ) then
+         write (*,*) "got strpad is not correct"
+         total_error = total_error + 1
+     end if
+
+    CALL h5tclose_f(dtype1_id, error)
+    CALL check("h5tclose_f", error, total_error)
+    CALL h5tclose_f(dtype2_id, error)
+    CALL check("h5tclose_f", error, total_error)
+    CALL h5tclose_f(dtype3_id, error)
+    CALL check("h5tclose_f", error, total_error)
+    CALL h5tclose_f(dtype4_id, error)
+    CALL check("h5tclose_f", error, total_error)
+    CALL h5tclose_f(dtype5_id, error)
+    CALL check("h5tclose_f", error, total_error)
+
+
+     RETURN
+     END SUBROUTINE basic_data_type_test
+
+    SUBROUTINE enumtest(cleanup, total_error)
+
+    USE HDF5
+    IMPLICIT none
+
+    LOGICAL, INTENT(IN)  :: cleanup
+    INTEGER, INTENT(OUT) :: total_error 
+    CHARACTER(LEN=4), PARAMETER :: filename="enum"
+    CHARACTER(LEN=80) :: fix_filename
+    CHARACTER(LEN=8), PARAMETER :: dsetname="enumdset"
+    CHARACTER(LEN=4)            :: true ="TRUE"
+    CHARACTER(LEN=5)            :: false="FALSE"
+    CHARACTER(LEN=5)            :: mem_name 
+
+    INTEGER(HID_T) :: file_id
+    INTEGER(HID_T) :: dset_id
+    INTEGER(HID_T) :: dspace_id
+    INTEGER(HID_T) :: dtype_id
+    INTEGER        :: error
+    INTEGER        :: value
+    INTEGER(HSIZE_T), DIMENSION(1) :: dsize
+    INTEGER(SIZE_T) :: buf_size 
+    INTEGER, DIMENSION(2) :: data
+    INTEGER(HSIZE_T), DIMENSION(7) :: dims
+
+    dims(1) = 2
+    dsize(1) = 2
+    data(1) = 1
+    data(2) = 0
+     !
+     ! Create a new file using default properties.
+     ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+    CALL h5fcreate_f(fix_filename,H5F_ACC_TRUNC_F,file_id,error)
+        CALL check("h5fcreate_f", error, total_error)
+    !
+    ! Create enumeration datatype with tow values
+    !
+    CALL h5tenum_create_f(H5T_NATIVE_INTEGER,dtype_id,error)
+        CALL check("h5tenum_create_f", error, total_error)
+    CALL h5tenum_insert_f(dtype_id,true,data(1),error)
+        CALL check("h5tenum_insert_f", error, total_error)
+    CALL h5tenum_insert_f(dtype_id,false,data(2),error)
+        CALL check("h5tenum_insert_f", error, total_error)
+    !
+    ! Create write  and close a dataset with enum datatype
+    !
+    CALL h5screate_simple_f(1,dsize,dspace_id,error)
+        CALL check("h5screate_simple_f", error, total_error)
+    CALL h5dcreate_f(file_id,dsetname,dtype_id,dspace_id,dset_id,error)
+        CALL check("h5dcreate_f", error, total_error)
+    CALL h5dwrite_f(dset_id,dtype_id,data,dims,error)
+        CALL check("h5dwrite_f", error, total_error)
+    CALL h5dclose_f(dset_id,error)
+        CALL check("h5dclose_f", error, total_error)
+    CALL h5sclose_f(dspace_id,error)
+        CALL check("h5sclose_f", error, total_error)
+    !
+    ! Get value of "TRUE"
+    !
+    CALL h5tenum_valueof_f(dtype_id, "TRUE", value, error)
+        CALL check("h5tenum_valueof_f", error, total_error)
+        if (value .ne. 1) then
+            write(*,*) " Value of TRUE is not 1, error"
+            total_error = total_error + 1
+        endif 
+    !
+    !  Get name of 0
+    !
+    value = 0
+    buf_size = 5
+    CALL h5tenum_nameof_f(dtype_id,  value, buf_size, mem_name, error)
+         CALL check("h5tenum_nameof_f", error, total_error)
+         if (mem_name .ne. "FALSE") then
+             write(*,*) " Wrong name for 0 value"
+             total_error = total_error + 1
+         endif
+    CALL h5tclose_f(dtype_id,error)
+        CALL check("h5tclose_f", error, total_error)
+    CALL h5fclose_f(file_id,error)
+        CALL check("h5fclose_f", error, total_error)
+    RETURN
+    END SUBROUTINE enumtest 
+

Added: packages/hdf5/branches/upstream/current/fortran/test/tH5VL.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/tH5VL.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/tH5VL.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,502 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! 
+!    Testing Variable_length datatypes
+!
+!
+!
+        SUBROUTINE vl_test_integer(cleanup, total_error)
+        USE HDF5 ! This module contains all necessary modules 
+
+          IMPLICIT NONE
+          LOGICAL, INTENT(IN) :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+
+          CHARACTER(LEN=7), PARAMETER :: filename = "VLtypes" ! File name
+          CHARACTER(LEN=80) :: fix_filename 
+          CHARACTER(LEN=5), PARAMETER :: dsetname = "VLint"     ! Dataset name
+
+          INTEGER(HID_T) :: file_id       ! File identifier 
+          INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+          INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+          INTEGER(HID_T) :: vltype_id     ! Datatype identifier
+
+
+          INTEGER(HSIZE_T), DIMENSION(1) :: dims = (/6/) ! Dataset dimensions
+          INTEGER(SIZE_T), DIMENSION(6) :: len           ! Elements lengths 
+          INTEGER(SIZE_T), DIMENSION(6) :: len_out 
+          INTEGER     ::   rank = 1                      ! Dataset rank
+
+          INTEGER, DIMENSION(5,6) :: vl_int_data ! Data buffers
+          INTEGER, DIMENSION(5,6) :: vl_int_data_out ! Data buffers
+          INTEGER     ::   error ! Error flag
+
+          INTEGER     :: i, j    !general purpose integers
+          INTEGER(HSIZE_T), DIMENSION(2) :: data_dims = (/5,6/)
+          INTEGER(SIZE_T)  max_len
+
+          !
+          ! Initialize the vl_int_data array.
+          !
+          do i = 1, 6 
+             do j = 1, 5 
+                vl_int_data(j,i) = -100
+             end do
+          end do
+
+          do i = 2, 6 
+             do j = 1,  i-1 
+                vl_int_data(j,i) = i-1
+             end do
+          end do
+
+           do i = 1,6
+              len(i) = i-1
+           end do
+
+
+          !
+          ! Create a new file using default properties.
+          ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+              CALL check("h5fcreate_f", error, total_error)
+
+
+          ! 
+          ! Create the dataspace.
+          !
+          CALL h5screate_simple_f(rank, dims, dspace_id, error)
+              CALL check("h5screate_simple_f", error, total_error)
+
+
+          !
+          ! Create the dataset with default properties.
+          !
+          CALL h5tvlen_create_f(H5T_NATIVE_INTEGER, vltype_id, error)
+              CALL check("h5dvlen_create_f", error, total_error)
+
+          CALL h5dcreate_f(file_id, dsetname, vltype_id, dspace_id, &
+                           dset_id, error)
+              CALL check("h5dcreate_f", error, total_error)
+
+          !
+          ! Write the dataset.
+          !
+          CALL h5dwrite_vl_f(dset_id, vltype_id, vl_int_data, data_dims, len, error)
+              CALL check("h5dwrite_int_f", error, total_error)
+
+
+          !   
+          ! End access to the dataset and release resources used by it.
+          ! 
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f", error, total_error)
+
+          ! 
+          ! Close the file.
+          !
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f", error, total_error)
+
+          !
+          ! Open the existing file.
+          !
+          CALL h5fopen_f (fix_filename, H5F_ACC_RDWR_F, file_id, error)
+              CALL check("h5fopen_f", error, total_error)
+
+          !
+          ! Open the existing dataset. 
+          !
+          CALL h5dopen_f(file_id, dsetname, dset_id, error)
+              CALL check("h5dopen_f", error, total_error)
+          
+          CALL h5dvlen_get_max_len_f(dset_id, vltype_id, dspace_id, max_len, error)
+              CALL check("h5dvlen_get_max_len_f", error, total_error)
+              if(max_len .ne. data_dims(1)) then
+                      total_error = total_error + 1
+                      write(*,*) "Wrong number of elemets returned by h5dvlen_get_max_len_f"
+              endif
+          !
+          ! Read the dataset.
+          !
+          CALL h5dread_vl_f(dset_id, vltype_id, vl_int_data_out, data_dims, len_out, &
+                            error, mem_space_id = dspace_id, file_space_id = dspace_id)
+              CALL check("h5dread_int_f", error, total_error)
+              do i = 1, data_dims(2)
+              do j = 1, len_out(i)
+              if(vl_int_data(j,i) .ne. vl_int_data_out(j,i))  then
+                  total_error = total_error + 1
+                  write(*,*) "h5dread_vl_f returned incorrect data"
+              endif
+              enddo
+               if (len(i) .ne. len_out(i)) then
+                  total_error = total_error + 1
+                  write(*,*) "h5dread_vl_f returned incorrect data"
+              endif
+              enddo
+
+
+          !
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f", error, total_error)
+
+          CALL h5tclose_f(vltype_id, error)
+              CALL check("h5tclose_f", error, total_error)
+
+          !
+          ! Terminate access to the data space.
+          !
+          CALL h5sclose_f(dspace_id, error)
+              CALL check("h5sclose_f", error, total_error)
+
+          ! 
+          ! Close the file.
+          !
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f", error, total_error)
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+     
+          RETURN
+        END SUBROUTINE vl_test_integer
+
+        SUBROUTINE vl_test_real(cleanup, total_error)
+        USE HDF5 ! This module contains all necessary modules 
+
+          IMPLICIT NONE
+          LOGICAL, INTENT(IN) :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+
+          CHARACTER(LEN=8), PARAMETER :: filename = "VLtypesR" ! File name
+          CHARACTER(LEN=80) :: fix_filename 
+          CHARACTER(LEN=6), PARAMETER :: dsetname = "VLreal"     ! Dataset name
+
+          INTEGER(HID_T) :: file_id       ! File identifier 
+          INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+          INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+          INTEGER(HID_T) :: vltype_id     ! Datatype identifier
+
+
+          INTEGER(HSIZE_T), DIMENSION(1) :: dims = (/6/) ! Dataset dimensions
+          INTEGER(SIZE_T), DIMENSION(6) :: len           ! Elements lengths 
+          INTEGER(SIZE_T), DIMENSION(6) :: len_out 
+          INTEGER     ::   rank = 1                      ! Dataset rank
+
+          REAL, DIMENSION(5,6) :: vl_real_data ! Data buffers
+          REAL, DIMENSION(5,6) :: vl_real_data_out ! Data buffers
+          INTEGER     ::   error ! Error flag
+
+          INTEGER     :: i, j    !general purpose integers
+          INTEGER(HSIZE_T), DIMENSION(2) :: data_dims = (/5,6/)
+          INTEGER(SIZE_T)  max_len
+          INTEGER(HID_T) ::  vl_type_id
+          LOGICAL        ::  vl_flag
+
+          !
+          ! Initialize the vl_int_data array.
+          !
+          do i = 1, 6 
+             do j = 1, 5 
+                vl_real_data(j,i) = -100.
+             end do
+          end do
+
+          do i = 2, 6 
+             do j = 1,  i-1 
+                vl_real_data(j,i) = i-1
+             end do
+          end do
+
+           do i = 1,6
+              len(i) = i-1
+           end do
+
+
+          !
+          ! Create a new file using default properties.
+          ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+              CALL check("h5fcreate_f", error, total_error)
+
+
+          ! 
+          ! Create the dataspace.
+          !
+          CALL h5screate_simple_f(rank, dims, dspace_id, error)
+              CALL check("h5screate_simple_f", error, total_error)
+
+
+          !
+          ! Create the dataset with default properties.
+          !
+          CALL h5tvlen_create_f(H5T_NATIVE_REAL, vltype_id, error)
+              CALL check("h5dvlen_create_f", error, total_error)
+
+          CALL h5dcreate_f(file_id, dsetname, vltype_id, dspace_id, &
+                           dset_id, error)
+              CALL check("h5dcreate_f", error, total_error)
+          CALL h5dget_type_f(dset_id, vl_type_id, error)
+              CALL check("h5dget_type_f", error, total_error)
+          CALL h5tis_variable_str_f( vl_type_id, vl_flag, error)
+              CALL check("h5tis_variable_str_f", error, total_error)
+              if( vl_flag ) then
+                 write(*,*) "type is wrong"
+                 total_error = total_error + 1
+              endif
+
+
+          !
+          ! Write the dataset.
+          !
+          CALL h5dwrite_vl_f(dset_id, vltype_id, vl_real_data, data_dims, len, error)
+              CALL check("h5dwrite_vl_real_f", error, total_error)
+
+
+          !   
+          ! End access to the dataset and release resources used by it.
+          ! 
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f", error, total_error)
+
+          ! 
+          ! Close the file.
+          !
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f", error, total_error)
+
+          !
+          ! Open the existing file.
+          !
+          CALL h5fopen_f (fix_filename, H5F_ACC_RDWR_F, file_id, error)
+              CALL check("h5fopen_f", error, total_error)
+
+          !
+          ! Open the existing dataset. 
+          !
+          CALL h5dopen_f(file_id, dsetname, dset_id, error)
+              CALL check("h5dopen_f", error, total_error)
+          
+          CALL h5dvlen_get_max_len_f(dset_id, vltype_id, dspace_id, max_len, error)
+              CALL check("h5dvlen_get_max_len_f", error, total_error)
+              if(max_len .ne. data_dims(1)) then
+                      total_error = total_error + 1
+                      write(*,*) "Wrong number of elemets returned by h5dvlen_get_max_len_f"
+              endif
+          !
+          ! Read the dataset.
+          !
+          CALL h5dread_vl_f(dset_id, vltype_id, vl_real_data_out, data_dims, len_out, &
+                            error, mem_space_id = dspace_id, file_space_id = dspace_id)
+              CALL check("h5dread_real_f", error, total_error)
+              do i = 1, data_dims(2)
+              do j = 1, len_out(i)
+              if(vl_real_data(j,i) .ne. vl_real_data_out(j,i))  then
+                  total_error = total_error + 1
+                  write(*,*) "h5dread_vl_f returned incorrect data"
+              endif
+              enddo
+               if (len(i) .ne. len_out(i)) then
+                  total_error = total_error + 1
+                  write(*,*) "h5dread_vl_f returned incorrect data"
+              endif
+              enddo
+
+
+          !
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f", error, total_error)
+
+          CALL h5tclose_f(vltype_id, error)
+              CALL check("h5tclose_f", error, total_error)
+
+          !
+          ! Terminate access to the data space.
+          !
+          CALL h5sclose_f(dspace_id, error)
+              CALL check("h5sclose_f", error, total_error)
+
+          ! 
+          ! Close the file.
+          !
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f", error, total_error)
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+     
+          RETURN
+        END SUBROUTINE vl_test_real
+
+        SUBROUTINE vl_test_string(cleanup, total_error)
+        USE HDF5 ! This module contains all necessary modules 
+
+          IMPLICIT NONE
+          LOGICAL, INTENT(IN) :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+
+          CHARACTER(LEN=8), PARAMETER :: filename = "VLtypesS" ! File name
+          CHARACTER(LEN=80) :: fix_filename 
+          CHARACTER(LEN=9), PARAMETER :: dsetname = "VLstrings"     ! Dataset name
+
+          INTEGER(HID_T) :: file_id       ! File identifier 
+          INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+          INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+          INTEGER(HID_T) :: vltype_id     ! Datatype identifier
+
+
+          INTEGER(HSIZE_T), DIMENSION(1) :: dims = (/4/) ! Dataset dimensions
+          INTEGER(SIZE_T), DIMENSION(4) :: str_len           ! Elements lengths 
+          INTEGER(SIZE_T), DIMENSION(4) :: str_len_out 
+          INTEGER     ::   rank = 1                      ! Dataset rank
+
+          CHARACTER(LEN=10), DIMENSION(4) :: string_data ! Array of strings
+          CHARACTER(LEN=10), DIMENSION(4) :: string_data_out     ! Data buffers
+          CHARACTER(LEN=10) :: tmp_str
+          INTEGER     ::   error ! Error flag
+
+          INTEGER     :: i, j    !general purpose integers
+          INTEGER(HSIZE_T), DIMENSION(2) :: data_dims = (/10,4/)
+          INTEGER(HID_T) :: vl_type_id
+          LOGICAL        :: vl_flag
+
+          !
+          ! Initialize the string_data array.
+          !
+          string_data(1) = 'This is   '
+          str_len(1) = 8
+          string_data(2) = 'a fortran '
+          str_len(2) = 10
+          string_data(3) = 'strings   '
+          str_len(3) = 8 
+          string_data(4) = 'test.     '
+          str_len(4) = 5 
+
+
+          !
+          ! Create a new file using default properties.
+          ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+              CALL check("h5fcreate_f", error, total_error)
+
+
+          ! 
+          ! Create the dataspace.
+          !
+          CALL h5screate_simple_f(rank, dims, dspace_id, error)
+              CALL check("h5screate_simple_f", error, total_error)
+
+
+          !
+          ! Create the dataset with default properties.
+          !
+          CALL h5dcreate_f(file_id, dsetname, H5T_STRING, dspace_id, &
+                           dset_id, error)
+              CALL check("h5dcreate_f", error, total_error)
+          !
+          ! Check that dataset has a string datatype
+          !
+          CALL h5dget_type_f(dset_id, vl_type_id, error)
+              CALL check("h5dget_type_f", error, total_error)
+          CALL h5tis_variable_str_f( vl_type_id, vl_flag, error)
+              CALL check("h5tis_variable_str_f", error, total_error)
+              if( .NOT. vl_flag ) then
+                 write(*,*) "type is wrong"
+                 total_error = total_error + 1
+              endif
+
+          !
+          ! Write the dataset.
+          !
+          CALL h5dwrite_vl_f(dset_id, H5T_STRING, string_data, data_dims, str_len, error)
+              CALL check("h5dwrite_string_f", error, total_error)
+
+
+          !   
+          ! End access to the dataset and release resources used by it.
+          ! 
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f", error, total_error)
+
+          ! 
+          ! Close the file.
+          !
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f", error, total_error)
+
+          !
+          ! Open the existing file.
+          !
+          CALL h5fopen_f (fix_filename, H5F_ACC_RDWR_F, file_id, error)
+              CALL check("h5fopen_f", error, total_error)
+
+          !
+          ! Open the existing dataset. 
+          !
+          CALL h5dopen_f(file_id, dsetname, dset_id, error)
+              CALL check("h5dopen_f", error, total_error)
+          !
+          !  Read the dataset.
+          !
+          CALL h5dread_vl_f(dset_id, H5T_STRING, string_data_out, data_dims,  &
+                            str_len_out, error)
+              CALL check("h5dread_string_f", error, total_error)
+          do 100 i = 1, data_dims(2)
+             if(str_len(i) .ne. str_len_out(i)) then
+                total_error=total_error + 1
+                write(*,*) 'Returned string length is incorrect'
+                goto 100
+             endif 
+             if(string_data(1)(1:str_len(i)) .ne. string_data_out(1)(1:str_len(i))) then
+             write(*,*) ' Returned string is wrong'
+             total_error = total_error + 1
+             endif
+100       continue 
+          
+          !
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f", error, total_error)
+
+          !
+          ! Terminate access to the data space.
+          !
+          CALL h5sclose_f(dspace_id, error)
+              CALL check("h5sclose_f", error, total_error)
+
+          ! 
+          ! Close the file.
+          !
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f", error, total_error)
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+     
+          RETURN
+        END SUBROUTINE vl_test_string
+

Added: packages/hdf5/branches/upstream/current/fortran/test/tH5Z.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/tH5Z.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/tH5Z.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,399 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+    SUBROUTINE filters_test(cleanup, total_error)
+
+!   This subroutine tests following functionalities: h5zfilter_avail_f, h5zunregister_f
+
+   USE HDF5 ! This module contains all necessary modules 
+
+     IMPLICIT NONE
+     LOGICAL, INTENT(IN)  :: cleanup
+     INTEGER, INTENT(OUT) :: total_error 
+     LOGICAL :: status, status1
+     INTEGER(HID_T)    :: crtpr_id, xfer_id
+     INTEGER           :: nfilters
+     INTEGER           :: error
+     INTEGER(HSIZE_T)  :: ch_dims(2)
+     INTEGER           :: RANK = 2
+     INTEGER           :: dlevel = 6
+     INTEGER           :: edc_flag
+
+     ch_dims(1) = 10
+     ch_dims(2) = 3
+!
+! Deflate filter
+!
+     CALL h5zfilter_avail_f(H5Z_FILTER_DEFLATE_F, status, error)
+              CALL check("h5zfilter_avail_f", error, total_error)
+     if(status) then
+        CALL h5pcreate_f(H5P_DATASET_CREATE_F, crtpr_id, error)
+              CALL check("h5pcreate_f", error, total_error)
+        CALL h5pset_chunk_f(crtpr_id, RANK, ch_dims, error)
+              CALL check("h5pset_chunk_f",error, total_error)
+        CALL h5pset_deflate_f(crtpr_id, dlevel, error)
+              CALL check("h5pset_deflate_f", error, total_error) 
+        CALL h5pclose_f(crtpr_id,error)
+              CALL check("h5pclose_f", error, total_error)
+     endif
+        
+!
+! Shuffle filter
+!
+     CALL h5zfilter_avail_f(H5Z_FILTER_SHUFFLE_F, status, error)
+              CALL check("h5zfilter_avail_f", error, total_error)
+     if(status) then
+        CALL h5pcreate_f(H5P_DATASET_CREATE_F, crtpr_id, error)
+              CALL check("h5pcreate_f", error, total_error)
+        CALL h5pset_chunk_f(crtpr_id, RANK, ch_dims, error)
+              CALL check("h5pset_chunk_f",error, total_error)
+        CALL h5pset_shuffle_f(crtpr_id, error)
+              CALL check("h5pset_shuffle_f", error, total_error) 
+        CALL h5pclose_f(crtpr_id,error)
+              CALL check("h5pclose_f", error, total_error)
+     endif
+        
+!
+! Checksum filter
+!
+     CALL h5zfilter_avail_f(H5Z_FILTER_FLETCHER32_F, status, error)
+              CALL check("h5zfilter_avail_f", error, total_error)
+     if(status) then
+        CALL h5pcreate_f(H5P_DATASET_CREATE_F, crtpr_id, error)
+              CALL check("h5pcreate_f", error, total_error)
+        CALL h5pset_chunk_f(crtpr_id, RANK, ch_dims, error)
+              CALL check("h5pset_chunk_f",error, total_error)
+        CALL h5pset_fletcher32_f(crtpr_id, error)
+              CALL check("h5pset_fletcher32_f", error, total_error) 
+        CALL h5pclose_f(crtpr_id,error)
+              CALL check("h5pclose_f", error, total_error)
+        CALL h5pcreate_f(H5P_DATASET_XFER_F, xfer_id, error)
+              CALL check("h5pcreate_f", error, total_error)
+        CALL h5pset_edc_check_f( xfer_id, H5Z_DISABLE_EDC_F, error)
+              CALL check("h5pset_edc_check_f", error, total_error)
+        CALL h5pget_edc_check_f( xfer_id, edc_flag, error)
+              CALL check("h5pget_edc_check_f", error, total_error)
+        if (edc_flag .ne. H5Z_DISABLE_EDC_F) then
+              write(*,*) "EDC status is wrong"
+              total_error = total_error + 1
+        endif
+        CALL h5pclose_f(xfer_id, error)
+              CALL check("h5pclose_f", error, total_error)
+
+     endif
+
+!
+! Verify h5premove_filter_f
+!
+     CALL h5zfilter_avail_f(H5Z_FILTER_FLETCHER32_F, status, error)
+              CALL check("h5zfilter_avail_f", error, total_error)
+     if(status) then
+         CALL h5zfilter_avail_f(H5Z_FILTER_SHUFFLE_F, status, error)
+                  CALL check("h5zfilter_avail_f", error, total_error)
+         if(status) then
+            CALL h5pcreate_f(H5P_DATASET_CREATE_F, crtpr_id, error)
+                  CALL check("h5pcreate_f", error, total_error)
+            CALL h5pset_fletcher32_f(crtpr_id, error)
+                  CALL check("h5pset_fletcher32_f", error, total_error) 
+            CALL h5pset_shuffle_f(crtpr_id, error)
+                  CALL check("h5pset_shuffle_f", error, total_error) 
+            CALL h5pget_nfilters_f(crtpr_id, nfilters, error)
+                  CALL check("h5pget_nfilters_f", error, total_error) 
+
+            ! Verify the correct number of filters
+            if (nfilters .ne. 2) then
+                  write(*,*) "number of filters is wrong"
+                  total_error = total_error + 1
+            endif
+
+            ! Delete a single filter
+            CALL h5premove_filter_f(crtpr_id, H5Z_FILTER_SHUFFLE_F, error)
+                  CALL check("h5pset_shuffle_f", error, total_error) 
+
+            ! Verify the correct number of filters now
+            CALL h5pget_nfilters_f(crtpr_id, nfilters, error)
+                  CALL check("h5pget_nfilters_f", error, total_error) 
+            if (nfilters .ne. 1) then
+                  write(*,*) "number of filters is wrong"
+                  total_error = total_error + 1
+            endif
+
+            ! Delete all filters
+            CALL h5premove_filter_f(crtpr_id, H5Z_FILTER_ALL_F, error)
+                  CALL check("h5premove_filter_f", error, total_error) 
+
+            ! Verify the correct number of filters now
+            CALL h5pget_nfilters_f(crtpr_id, nfilters, error)
+                  CALL check("h5pget_nfilters_f", error, total_error) 
+            if (nfilters .ne. 0) then
+                  write(*,*) "number of filters is wrong"
+                  total_error = total_error + 1
+            endif
+            CALL h5pclose_f(crtpr_id,error)
+                  CALL check("h5pclose_f", error, total_error)
+         endif
+     endif
+
+     RETURN
+     END SUBROUTINE filters_test
+
+        SUBROUTINE szip_test(szip_flag, cleanup, total_error)
+        USE HDF5 ! This module contains all necessary modules 
+
+          IMPLICIT NONE
+          LOGICAL, INTENT(OUT) :: szip_flag
+          LOGICAL, INTENT(IN) :: cleanup
+          INTEGER, INTENT(OUT) :: total_error 
+ 
+
+          CHARACTER(LEN=4), PARAMETER :: filename = "szip" ! File name
+          CHARACTER(LEN=80) :: fix_filename 
+          CHARACTER(LEN=4), PARAMETER :: dsetname = "dset"     ! Dataset name
+          INTEGER, PARAMETER :: N = 1024
+          INTEGER, PARAMETER :: NN = 64
+          INTEGER, PARAMETER :: M = 512
+          INTEGER, PARAMETER :: MM = 32
+
+          INTEGER(HID_T) :: file_id       ! File identifier 
+          INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+          INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+          INTEGER(HID_T) :: dtype_id      ! Datatype identifier
+
+
+          INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/N,M/) ! Dataset dimensions
+          INTEGER(HSIZE_T), DIMENSION(2) :: chunk_dims = (/NN, MM/)
+          INTEGER     ::   rank = 2                        ! Dataset rank
+
+          INTEGER, DIMENSION(N,M) :: dset_data, data_out ! Data buffers
+          INTEGER     ::   error ! Error flag
+          INTEGER     ::   num_errors = 0 ! Number of data errors
+
+          INTEGER     :: i, j    !general purpose integers
+          INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
+          INTEGER(HID_T) ::  crp_list
+          INTEGER :: options_mask, pix_per_block 
+          LOGICAL :: flag
+          CHARACTER(LEN=4) filter_name 
+
+          INTEGER :: filter_flag = -1
+          INTEGER(SIZE_T) :: cd_nelemnts = 4
+          INTEGER(SIZE_T) :: filter_name_len = 4
+          INTEGER, DIMENSION(4) :: cd_values
+          INTEGER     :: config_flag = 0   ! for h5zget_filter_info_f
+          INTEGER     :: config_flag_both = 0   ! for h5zget_filter_info_f
+
+          !
+          ! Verify that SZIP exists and has an encoder
+          !
+          CALL h5zfilter_avail_f(H5Z_FILTER_SZIP_F, szip_flag, error)
+              CALL check("h5zfilter_avail", error, total_error)
+
+          ! Quit if failed
+          if (error .ne. 0) return
+
+          ! Skip if no SZIP available
+          if (.NOT. szip_flag)then
+              return
+
+          else  !SZIP available
+
+          ! Continue
+          CALL h5zget_filter_info_f(H5Z_FILTER_SZIP_F, config_flag, error)
+              CALL check("h5zget_filter_info_f", error, total_error)
+          ! Quit if failed
+          if (error .ne. 0) return 
+          !
+          ! Make sure h5zget_filter_info_f returns the right flag
+          !
+          config_flag_both=IOR(H5Z_FILTER_ENCODE_ENABLED_F,H5Z_FILTER_DECODE_ENABLED_F)
+          if( szip_flag ) then
+              if (config_flag .NE. config_flag_both) then
+                  if(config_flag .NE. H5Z_FILTER_DECODE_ENABLED_F)  then
+                     error = -1
+                     CALL check("h5zget_filter_info_f config_flag", error, total_error)
+                  endif
+              endif
+          endif    
+
+          ! Continue only when encoder is available
+          if ( IAND(config_flag,  H5Z_FILTER_ENCODE_ENABLED_F) .EQ. 0 ) return 
+
+          options_mask = H5_SZIP_NN_OM_F
+          pix_per_block = 32
+          !
+          ! Initialize the dset_data array.
+          !
+          do i = 1, N
+             do j = 1, M
+                dset_data(i,j) = (i-1)*6 + j;
+             end do
+          end do
+
+
+          !
+          ! Create a new file using default properties.
+          ! 
+          CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
+          if (error .ne. 0) then
+              write(*,*) "Cannot modify filename"
+              stop
+          endif
+          CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error)
+              CALL check("h5fcreate_f", error, total_error)
+
+
+          ! 
+          ! Create the dataspace.
+          !
+          CALL h5screate_simple_f(rank, dims, dspace_id, error)
+              CALL check("h5screate_simple_f", error, total_error)
+          
+          CALL h5pcreate_f(H5P_DATASET_CREATE_F, crp_list, error)
+              CALL check("h5pcreat_f",error,total_error)
+
+          CALL h5pset_chunk_f(crp_list, rank, chunk_dims, error)
+              CALL check("h5pset_chunk_f",error,total_error)
+          CALL h5pset_szip_f(crp_list, options_mask, pix_per_block, error)
+              CALL check("h5pset_szip_f",error,total_error)
+          CALL h5pall_filters_avail_f(crp_list, flag, error)
+              CALL check("h5pall_filters_avail_f",error,total_error)
+          if (.NOT. flag) then
+             CALL h5pclose_f(crp_list, error)
+             CALL h5sclose_f(dspace_id, error)
+             CALL h5fclose_f(file_id, error)
+             szip_flag = .FALSE.
+             total_error = -1
+             return
+          endif
+ 
+         CALL h5pget_filter_by_id_f(crp_list, H5Z_FILTER_SZIP_F, filter_flag, &
+ 
+                                    cd_nelemnts, cd_values,&
+ 
+                                    filter_name_len, filter_name, error)
+               CALL check("h5pget_filter_by_id_f",error,total_error)
+          !
+          ! Create the dataset with default properties.
+          !
+          CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INTEGER, dspace_id, &
+                           dset_id, error, crp_list)
+              CALL check("h5dcreate_f", error, total_error)
+
+          !
+          ! Write the dataset.
+          !
+          data_dims(1) = N
+          data_dims(2) =  M
+          CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, dset_data, data_dims, error)
+              CALL check("h5dwrite_f", error, total_error)
+
+
+          !   
+          ! End access to the dataset and release resources used by it.
+          ! 
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f", error, total_error)
+
+          !
+          ! Terminate access to the data space.
+          !
+          CALL h5sclose_f(dspace_id, error)
+              CALL check("h5sclose_f", error, total_error)
+
+          ! 
+          ! Close the file.
+          !
+             CALL h5pclose_f(crp_list, error)
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f", error, total_error)
+
+          !
+          ! Open the existing file.
+          !
+          CALL h5fopen_f (fix_filename, H5F_ACC_RDWR_F, file_id, error)
+              CALL check("h5fopen_f", error, total_error)
+
+          !
+          ! Open the existing dataset. 
+          !
+          CALL h5dopen_f(file_id, dsetname, dset_id, error)
+              CALL check("h5dopen_f", error, total_error)
+               CALL check("h5pget_filter_by_id_f",error,total_error)
+
+          !
+          ! Get the dataset type. 
+          !
+          CALL h5dget_type_f(dset_id, dtype_id, error)
+              CALL check("h5dget_type_f", error, total_error)
+
+          !
+          ! Get the data space. 
+          !
+          CALL h5dget_space_f(dset_id, dspace_id, error)
+              CALL check("h5dget_space_f", error, total_error)
+
+          !
+          ! Read the dataset.
+          !
+          CALL h5dread_f (dset_id, H5T_NATIVE_INTEGER, data_out, data_dims, error)
+              CALL check("h5dread_f", error, total_error)
+
+          !
+          !Compare the data.
+          ! 
+          do i = 1, N
+              do j = 1, M
+                  IF (data_out(i,j) .NE. dset_data(i, j)) THEN 
+                      write(*, *) "dataset test error occured"
+                      write(*,*) "data read is not the same as the data written"
+                      num_errors = num_errors + 1
+                      IF (num_errors .GE. 512) THEN
+                        write(*, *) "maximum data errors reached"
+                        goto 100
+                      END IF
+                  END IF
+              end do    
+          end do
+100       IF (num_errors .GT. 0) THEN
+            total_error=total_error + 1
+          END IF
+
+          !   
+          ! End access to the dataset and release resources used by it.
+          ! 
+          CALL h5dclose_f(dset_id, error)
+              CALL check("h5dclose_f", error, total_error)
+
+          !
+          ! Terminate access to the data space.
+          !
+          CALL h5sclose_f(dspace_id, error)
+              CALL check("h5sclose_f", error, total_error)
+
+          !
+          ! Terminate access to the data type.
+          !
+          CALL h5tclose_f(dtype_id, error)
+              CALL check("h5tclose_f", error, total_error)
+          ! 
+          ! Close the file.
+          !
+          CALL h5fclose_f(file_id, error)
+              CALL check("h5fclose_f", error, total_error)
+          if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
+              CALL check("h5_cleanup_f", error, total_error)
+          endif ! SZIP available
+     
+          RETURN
+        END SUBROUTINE szip_test

Added: packages/hdf5/branches/upstream/current/fortran/test/tf.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/test/tf.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/test/tf.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,202 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 file contains subroutines which are used in
+!    all the hdf5 fortran tests
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: check
+!DEC$endif
+
+         SUBROUTINE check(string,error,total_error)
+            CHARACTER(LEN=*) :: string
+            INTEGER :: error, total_error
+            if (error .lt. 0) then
+                total_error=total_error+1
+                write(*,*) string, " failed"
+            endif
+            RETURN
+         END SUBROUTINE check   
+
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: verify
+!DEC$endif
+         SUBROUTINE verify(string,value,correct_value,total_error)
+            CHARACTER(LEN=*) :: string
+            INTEGER :: value, correct_value, total_error
+            if (value .ne. correct_value) then
+                total_error=total_error+1
+                write(*,*) string
+            endif
+            RETURN
+         END SUBROUTINE verify
+
+!----------------------------------------------------------------------
+! Name:		h5_fixname_f 
+!
+! Purpose:	Create a file name from the a file base name.
+!               It is a fortran counterpart for the h5_fixname in ../../test/h5test.c
+!
+! Inputs:  
+!		base_name	- base name of the file 
+!               fapl		- file access property list 
+! Outputs:  
+!		full_name	- full file name
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+!
+! Programmer:	Elena Pourmal
+!		September 13, 2002
+!
+!
+!----------------------------------------------------------------------
+          SUBROUTINE h5_fixname_f(base_name, full_name, fapl, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5_fixname_f
+!DEC$endif
+            USE H5GLOBAL           
+            IMPLICIT NONE
+            CHARACTER(LEN=*), INTENT(IN) :: base_name   ! base name 
+            CHARACTER(LEN=*), INTENT(IN) :: full_name   ! full name 
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+            INTEGER(HID_T), INTENT(IN) :: fapl ! file access property list
+
+            INTEGER(SIZE_T) :: base_namelen ! Length of the base name character string
+            INTEGER(SIZE_T) :: full_namelen ! Length of the full name character string
+!            INTEGER(HID_T) :: fapl_default
+
+            INTERFACE
+              INTEGER FUNCTION h5_fixname_c(base_name, base_namelen, fapl, &
+                               full_name, full_namelen)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5_FIXNAME_C':: h5_fixname_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: base_name 
+              !DEC$ATTRIBUTES reference :: full_name 
+              CHARACTER(LEN=*), INTENT(IN) :: base_name
+              INTEGER(SIZE_T) :: base_namelen
+              INTEGER(HID_T), INTENT(IN) :: fapl
+              CHARACTER(LEN=*), INTENT(IN) :: full_name
+              INTEGER(SIZE_T) :: full_namelen
+              END FUNCTION h5_fixname_c
+            END INTERFACE
+
+            base_namelen = LEN(base_name)
+            full_namelen = LEN(full_name)
+            hdferr = h5_fixname_c(base_name, base_namelen, fapl, &
+                     full_name, full_namelen) 
+
+          END SUBROUTINE h5_fixname_f
+          
+!----------------------------------------------------------------------
+! Name:		h5_cleanup_f 
+!
+! Purpose:	Cleanups tests files
+!               It is a fortran counterpart for the h5_cleanup in ../../test/h5test.c
+!
+! Inputs:  
+!		base_name	- base name of the file 
+!               fapl		- file access property list 
+! Outputs:  
+!		hdferr:		- error code		
+!				 	Success:  0
+!				 	Failure: -1   
+!
+! Programmer:	Elena Pourmal
+!		September 19, 2002
+!
+!
+!----------------------------------------------------------------------
+          SUBROUTINE h5_cleanup_f(base_name, fapl, hdferr)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5_cleanup_f
+!DEC$endif
+            USE H5GLOBAL           
+            IMPLICIT NONE
+            CHARACTER(LEN=*), INTENT(IN) :: base_name   ! base name 
+            INTEGER, INTENT(OUT) :: hdferr         ! Error code 
+            INTEGER(HID_T), INTENT(IN) :: fapl ! file access property list
+
+            INTEGER(SIZE_T) :: base_namelen ! Length of the base name character string
+
+            INTERFACE
+              INTEGER FUNCTION h5_cleanup_c(base_name, base_namelen, fapl)
+              USE H5GLOBAL
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5_CLEANUP_C':: h5_cleanup_c
+              !DEC$ ENDIF
+              !DEC$ATTRIBUTES reference :: base_name 
+              CHARACTER(LEN=*), INTENT(IN) :: base_name
+              INTEGER(SIZE_T) :: base_namelen
+              INTEGER(HID_T), INTENT(IN) :: fapl
+              END FUNCTION h5_cleanup_c
+            END INTERFACE
+
+            base_namelen = LEN(base_name)
+            hdferr = h5_cleanup_c(base_name, base_namelen, fapl)
+
+          END SUBROUTINE h5_cleanup_f
+
+!----------------------------------------------------------------------
+! Name:		h5_exit_f 
+!
+! Purpose:	Exit application
+!               It is a fortran counterpart for the standard C 'exit()' routine
+! 		Be careful not to overflow the exit value range since
+! 		UNIX supports a very small range such as 1 byte.
+!		Therefore, exit(256) may end up as exit(0).
+!
+! Inputs:  
+!		status	- Status to return from application
+!
+! Outputs:  
+!		none
+!
+! Programmer:	Quincey Koziol
+!		December 14, 2004
+!
+!
+!----------------------------------------------------------------------
+          SUBROUTINE h5_exit_f(status)
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5_exit_f
+!DEC$endif
+            IMPLICIT NONE
+            INTEGER, INTENT(IN) :: status         ! Return code
+
+            INTERFACE
+              SUBROUTINE h5_exit_c(status)
+              !DEC$ IF DEFINED(HDF5F90_WINDOWS)
+              !MS$ATTRIBUTES C,reference,alias:'_H5_EXIT_C':: h5_exit_c
+              !DEC$ ENDIF
+              INTEGER, INTENT(IN) :: status
+              END SUBROUTINE h5_exit_c
+            END INTERFACE
+
+            CALL h5_exit_c(status)
+
+          END SUBROUTINE h5_exit_f

Added: packages/hdf5/branches/upstream/current/fortran/testpar/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/testpar/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/testpar/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,16 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+

Added: packages/hdf5/branches/upstream/current/fortran/testpar/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/testpar/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/testpar/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,60 @@
+## HDF5 Fortran Parallel Library Test Makefile(.in)
+##
+
+##
+## 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.
+##
+top_srcdir=@top_srcdir@/..
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+hdf5_builddir=$(top_builddir)/src
+
+## Add the include directory to the C preprocessor flags the the hdf5 library
+## to the library list.
+LT_LINK_LIB=$(LT) --mode=link $(F9X) -static -rpath $(libdir)
+LIBFORTRAN=../src/libhdf5_fortran.la
+LIBHDF5=$(hdf5_builddir)/libhdf5.la
+FTLIB = ../test/libh5test_fortran.la
+CTLIB = ../../test/.libs/libh5test.a
+FSEARCH_DIRS =@F9XMODFLAG at ../src @FSEARCH_DIRS@
+
+## These are our main targets
+TEST_PROGS_PARA=ptesthdf5_fortran
+
+## Temporary files
+MOSTLYCLEAN=ParaEg[123].h5f
+DISTCLEAN=go
+
+## Test source files
+TEST_PFORTRAN_SRC=ptesthdf5_fortran.f90 thdf5.f90 thyperslab_wr.f90
+TEST_PFORTRAN_OBJ=$(TEST_PFORTRAN_SRC:.f90=.lo)
+TEST_SRC=$(TEST_PFORTRAN_SRC)
+TEST_OBJ=$(TEST_SRC:.f90=.lo)
+TEST_HDR=
+
+## How to build the tests... They all depend on the hdf5 library
+$(TEST_PROGS_PARA): $(LIBHDF5)
+
+$(TEST_OBJ): $(TEST_HDR)
+
+## Put in dependencies to the THDF5 module so that things will be built
+## in the correct order.
+thyperslab_wr.lo:	    $(srcdir)/thyperslab_wr.f90 thdf5.lo
+ptesthdf5_fortran.lo:	    $(srcdir)/ptesthdf5_fortran.f90 thdf5.lo
+
+ptesthdf5_fortran: thdf5.lo thyperslab_wr.lo ptesthdf5_fortran.lo
+	@$(LT_LINK_FEXE) $(FFLAGS) -o $@ ptesthdf5_fortran.lo thdf5.lo thyperslab_wr.lo  $(FTLIB) $(CTLIB) $(LIBFORTRAN) $(LIBHDF5) $(LIBS)
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/fortran/testpar/ptesthdf5_fortran.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/testpar/ptesthdf5_fortran.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/testpar/ptesthdf5_fortran.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,86 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! Main program for parallel HDF5 Fortran tests. 
+
+     PROGRAM PHDF5F90TEST
+
+     USE HDF5 ! This module contains all necessary modules 
+     USE THDF5
+!     USE MPI
+        
+     IMPLICIT NONE
+     INTEGER :: h5retcode    ! HDF5 call return code
+     INTEGER :: nerrors = 0  ! Error flags
+     !
+     ! MPI definitions and calls.
+     !
+     INTEGER :: mpiretcode       ! MPI calls return code
+     INTEGER :: comm, info
+     INTEGER :: mpi_size, mpi_rank
+     LOGICAL :: cleanup = .TRUE.
+!     LOGICAL :: cleanup = .FALSE.
+     comm = MPI_COMM_WORLD
+     info = MPI_INFO_NULL
+     CALL MPI_INIT(mpiretcode)
+     CALL MPI_COMM_SIZE(comm, mpi_size, mpiretcode)
+     CALL MPI_COMM_RANK(comm, mpi_rank, mpiretcode) 
+     !
+     ! Check that datasets can be divided into equal parts by the processes.
+     !
+     if ( (mod(DIM1, mpi_size) .ne. 0) .or. (mod(DIM2, mpi_size) .ne. 0)) then
+         if (mpi_rank .eq. 0) then
+             write(*,*) "Number of processors is", mpi_size
+             write(*,*)  "It must be a factor of ", DIM1, " and ", DIM2
+             write(*,*) "Exiting..."
+         endif
+	 nerrors = nerrors + 1
+         goto 1000
+     endif
+     !
+     ! Initialize FORTRAN predefined datatypes
+     !
+     CALL h5open_f(h5retcode) 
+     if (mpi_rank .eq. 0) then
+         write(*,*) '==========================================='
+         write(*,*) '         Parallel Fortran Tests            ' 
+         write(*,*) '==========================================='
+         write(*,*) 
+     endif
+     if (mpi_rank .eq. 0) then 
+         write(*,*) 'Writing/reading dataset by hyperslabs'
+     endif
+     CALL dataset_wr_by_hyperslabs(cleanup, nerrors)
+     if (nerrors .ne. 0 ) write(*,*) 'Process ', mpi_rank, 'reports failure'
+     if (mpi_rank .eq. 0) then
+         write(*,*) 
+         write(*,*) '==========================================='
+         write(*,*) '      Parallel Fortran Tests finished      ' 
+         write(*,*) '==========================================='
+     endif
+     !
+     ! Close FORTRAN predefined datatypes.
+     !
+     CALL h5close_f(h5retcode)
+
+1000 continue
+
+     if (nerrors .eq. 0) then
+	 CALL MPI_FINALIZE(mpiretcode)
+     else
+         CALL MPI_ABORT(MPI_COMM_WORLD, 1, mpiretcode)
+     endif
+
+     END PROGRAM PHDF5F90TEST

Added: packages/hdf5/branches/upstream/current/fortran/testpar/thdf5.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/testpar/thdf5.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/testpar/thdf5.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,25 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+         MODULE THDF5
+         USE HDF5
+         include 'mpif.h'
+!         USE MPI
+
+!        Dataset dimensions
+
+           INTEGER, PARAMETER ::  DIM1 = 120, &
+                                  DIM2 = 240
+
+         END MODULE THDF5

Added: packages/hdf5/branches/upstream/current/fortran/testpar/thyperslab_wr.f90
===================================================================
--- packages/hdf5/branches/upstream/current/fortran/testpar/thyperslab_wr.f90	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/fortran/testpar/thyperslab_wr.f90	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,253 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   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 test writes/reads dataset by hyperslabs collectively. 
+
+     SUBROUTINE dataset_wr_by_hyperslabs(cleanup, total_error) 
+     USE THDF5
+     IMPLICIT NONE
+     LOGICAL, INTENT(IN) :: cleanup
+     INTEGER, INTENT(OUT) :: total_error
+
+     CHARACTER(LEN=8), PARAMETER :: filename = "par_sdsf"  ! File name
+     CHARACTER(LEN=80) :: fix_filename
+     CHARACTER(LEN=8), PARAMETER :: dsetname = "IntArray" ! Dataset name
+
+     INTEGER(HID_T) :: file_id       ! File identifier 
+     INTEGER(HID_T) :: dset_id       ! Dataset identifier 
+     INTEGER(HID_T) :: filespace     ! Dataspace identifier in file 
+     INTEGER(HID_T) :: memspace      ! Dataspace identifier in memory
+     INTEGER(HID_T) :: plac_id      ! Property list identifier 
+     INTEGER(HID_T) :: plxfer_id      ! Property list identifier 
+
+     INTEGER(HSIZE_T), DIMENSION(2) :: dimsf = (/DIM1,DIM2/) ! Dataset dimensions.
+
+     INTEGER(HSIZE_T), DIMENSION(2) :: count  
+     INTEGER(HSIZE_T), DIMENSION(2) :: offset 
+     INTEGER, ALLOCATABLE :: data (:,:)  ! Data to write
+     INTEGER, ALLOCATABLE :: data_out (:,:)  ! Buffer to store data
+     INTEGER :: rank = 2 ! Dataset rank 
+     INTEGER :: i, j
+     INTEGER(HSIZE_T), DIMENSION(2) :: dims
+     INTEGER(HID_T) :: driver
+
+     INTEGER :: error  ! Error flag
+     !
+     ! MPI definitions and calls.
+     !
+     INTEGER :: mpierror       ! MPI error flag
+     INTEGER :: comm, info
+     INTEGER :: mpi_size, mpi_rank
+     comm = MPI_COMM_WORLD
+     info = MPI_INFO_NULL
+     CALL MPI_COMM_SIZE(comm, mpi_size, mpierror)
+     CALL MPI_COMM_RANK(comm, mpi_rank, mpierror) 
+     ! 
+     ! Setup file access property list with parallel I/O access.
+     !
+     CALL h5pcreate_f(H5P_FILE_ACCESS_F, plac_id, error)
+          CALL check("h5pcreate_f", error, total_error)
+     CALL h5pset_fapl_mpio_f(plac_id, comm, info, error)
+          CALL check("h5pset_fapl_mpio_f", error, total_error)
+     CALL h5pget_driver_f(plac_id, driver, error)
+          CALL check("h5pget_driver_f", error, total_error)
+     if( driver .ne. H5FD_MPIO_F) then
+          write(*,*) "Wrong driver information returned"
+     endif
+     CALL h5_fixname_f(filename, fix_filename, plac_id, error)
+
+     !
+     ! Create the file collectively.
+     ! 
+     CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error, access_prp = plac_id)
+          CALL check("h5fcreate_f", error, total_error)
+     CALL h5pclose_f(plac_id, error)
+          CALL check("h5pclose_f", error, total_error)
+     !
+     ! Create the data space for the  dataset. 
+     !
+     CALL h5screate_simple_f(rank, dimsf, filespace, error)
+          CALL check("h5screate_simple_f", error, total_error)
+
+     !
+     ! Create the dataset with default properties.
+     !
+     CALL h5dcreate_f(file_id, dsetname, H5T_NATIVE_INTEGER, filespace, &
+                      dset_id, error)
+          CALL check("h5dcreate_f", error, total_error)
+     CALL h5sclose_f(filespace, error)
+          CALL check("h5sclose_f", error, total_error)
+     !
+     ! Each process defines dataset in memory and writes it to the hyperslab
+     ! in the file. 
+     !
+     count(1) = dimsf(1)
+     count(2) = dimsf(2)/mpi_size 
+     offset(1) = 0
+     offset(2) = mpi_rank * count(2) 
+     CALL h5screate_simple_f(rank, count, memspace, error) 
+          CALL check("h5screate_simple_f", error, total_error)
+     ! 
+     ! Select hyperslab in the file.
+     !
+     CALL h5dget_space_f(dset_id, filespace, error)
+          CALL check("h5dget_space_f", error, total_error)
+     CALL h5sselect_hyperslab_f (filespace, H5S_SELECT_SET_F, offset, count, error)
+          CALL check("h5sselect_hyperslab_f", error, total_error)
+     ! 
+     ! Initialize data buffer with trivial data.
+     !
+     ALLOCATE ( data(count(1),count(2)))
+     dims(1) = count(1)
+     dims(2) = count(2)
+     data = mpi_rank + 10
+     !
+     ! Create property list for collective dataset write
+     !
+     CALL h5pcreate_f(H5P_DATASET_XFER_F, plxfer_id, error) 
+          CALL check("h5pcreate_f", error, total_error)
+     CALL h5pset_dxpl_mpio_f(plxfer_id, H5FD_MPIO_COLLECTIVE_F, error)
+          CALL check("h5pset_dxpl_mpio_f", error, total_error)
+     
+     !
+     ! Write the dataset collectively. 
+     !
+     CALL h5dwrite_f(dset_id, H5T_NATIVE_INTEGER, data, dims, error, &
+                     file_space_id = filespace, mem_space_id = memspace, xfer_prp = plxfer_id)
+          CALL check("h5dwrite_f", error, total_error)
+     !
+     ! Deallocate data buffer.
+     !
+     DEALLOCATE(data)
+
+     !
+     ! Close dataspaces.
+     !
+     CALL h5sclose_f(filespace, error)
+          CALL check("h5sclose_f", error, total_error)
+     CALL h5sclose_f(memspace, error)
+          CALL check("h5sclose_f", error, total_error)
+
+     !
+     ! Close the dataset.
+     !
+     CALL h5dclose_f(dset_id, error)
+          CALL check("h5dclose_f", error, total_error)
+
+     CALL h5pclose_f(plxfer_id, error)
+          CALL check("h5pclose_f", error, total_error)
+
+     !
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+          CALL check("h5fclose_f", error, total_error)
+     !
+     ! Reopen the file with || access.
+     !
+     CALL h5pcreate_f(H5P_FILE_ACCESS_F, plac_id, error)
+          CALL check("h5pcreate_f", error, total_error)
+     CALL h5pset_fapl_mpio_f(plac_id, comm, info, error)
+          CALL check("h5pset_fapl_mpio_f", error, total_error)
+     CALL h5fopen_f(fix_filename, H5F_ACC_RDWR_F, file_id, error, plac_id)
+          CALL check("h5fopen_f", error, total_error)
+     !
+     ! Open dataset.
+     !
+     CALL h5dopen_f(file_id, dsetname, dset_id, error)
+          CALL check("h5dopen_f", error, total_error)
+
+     !
+     ! Each process defines dataset in memory and reads hyperslab
+     ! from the file. 
+     !
+     count(1) = dimsf(1)
+     count(2) = dimsf(2)/mpi_size 
+     offset(1) = 0
+     offset(2) = mpi_rank * count(2) 
+     CALL h5screate_simple_f(rank, count, memspace, error) 
+          CALL check("h5screate_simple_f", error, total_error)
+     ! 
+     ! Select hyperslab in the file.
+     !
+     CALL h5dget_space_f(dset_id, filespace, error)
+          CALL check("h5dget_space_f", error, total_error)
+     CALL h5sselect_hyperslab_f (filespace, H5S_SELECT_SET_F, offset, count, error)
+          CALL check("h5sselect_hyperslab_f", error, total_error)
+     ! 
+     ! Allocate data buffer.
+     !
+     ALLOCATE ( data(count(1),count(2)))
+     ALLOCATE ( data_out(count(1),count(2)))
+     data = mpi_rank + 10
+     !
+     ! Create property list for collective dataset write
+     !
+     CALL h5pcreate_f(H5P_DATASET_XFER_F, plxfer_id, error) 
+          CALL check("h5pcreate_f", error, total_error)
+     CALL h5pset_dxpl_mpio_f(plxfer_id, H5FD_MPIO_COLLECTIVE_F, error)
+          CALL check("h5pset_dxpl_mpio_f", error, total_error)
+     
+     !
+     ! Write the dataset collectively. 
+     !
+     CALL h5dread_f(dset_id, H5T_NATIVE_INTEGER, data_out, dims, error, &
+                     file_space_id = filespace, mem_space_id = memspace, xfer_prp = plxfer_id)
+          CALL check("h5dread_f", error, total_error)
+     do j = 1, count(2)
+      do i = 1, count(1)
+        if( data(i,j) .ne. data_out(i,j)) then
+              total_error = total_error + 1
+              goto 100
+        endif
+      enddo 
+     enddo 
+ 100 continue
+     !
+     ! Deallocate data buffer.
+     !
+     DEALLOCATE(data)
+     DEALLOCATE(data_out)
+     !
+     ! Close dataspaces.
+     !
+     CALL h5sclose_f(filespace, error)
+          CALL check("h5sclose_f", error, total_error)
+     CALL h5sclose_f(memspace, error)
+          CALL check("h5sclose_f", error, total_error)
+     !
+     ! Close property list.
+     !
+     CALL h5pclose_f(plxfer_id, error)
+          CALL check("h5pclose_f", error, total_error)
+     !
+     ! Close dataset.
+     !
+     CALL h5dclose_f(dset_id, error)
+          CALL check("h5dclose_f", error, total_error)
+     !
+     ! Close the file.
+     !
+     CALL h5fclose_f(file_id, error)
+          CALL check("h5fclose_f", error, total_error)
+
+          if(cleanup) CALL h5_cleanup_f(filename, plac_id, error)
+              CALL check("h5_cleanup_f", error, total_error)
+
+     CALL h5pclose_f(plac_id, error)
+          CALL check("h5pclose_f", error, total_error)
+
+     RETURN
+     END SUBROUTINE dataset_wr_by_hyperslabs 

Added: packages/hdf5/branches/upstream/current/hl/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/hl/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/hl/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,109 @@
+## Top-level HDF5 Makefile(.in)
+##
+## 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 makefile mostly just reinvokes make in the various subdirectories
+## but does so in the correct order.  You can alternatively invoke make from
+## each subdirectory manually.
+##
+top_srcdir=@top_srcdir@
+top_builddir=..
+srcdir=@srcdir@
+
+ at COMMENCE@
+
+# Subdirectories in build-order
+SUBDIRS=src test 
+
+##############################################################################
+##		    T A R G E T S
+##
+## all:		Build libraries, header files, tests, and programs in the
+##	 	various subdirectories but does not run tests or install the
+##		library, header files, or programs.  The components can be
+##		built individually with the targets lib, progs, and tests.
+## check:	Test the uninstalled library to make sure it works. You may
+##		also say `test' or `_test' (`test' doesn't work from the top
+##		level directory for some versions of make because `test' is
+##		also a directory).
+## install:	Installs libraries, header files, programs, and documentation
+##		in the various directories under the prefix directory (lib,
+##		include, bin, man, info).  Use the `--prefix=PATH' option
+##		to `configure' (or `config.status') or say `--help' for
+##		other alternatives.  The default prefix is `/usr/local'.
+## uninstall:	Delete all the installed files that the `install' target
+##		created (but not the noninstalled files such as `make all'
+##		created).
+## clean:	Removes temporary files except those that record the
+##		configuration and those that are part of the distribution.
+## mostlyclean:	Like `clean' except it doesn't delete a few files like
+##		libraries, programs, and/or generated header files because
+##		regenerating them is rarely necessary and takes a lot of time.
+## distclean:	Deletes all files that are created by configuring or building
+##		HDF5.  If you have unpacked the source and built HDF5 without
+##		creating any other files, then `make distclean' will leave
+##		only the files that were in the distrubution.
+## maintainer-clean:
+##		Like `distclean' except it deletes more files.  It deletes
+##		all generated files.  This target is not intended for normal
+##		users; it deletes files that may require special tools to
+##		rebuild.
+## TAGS:	Updates the tags table for this program.
+## dep depend:	Builds dependencies in all subdirectories.  These targets
+##		might not be available on certain combinations of make
+##		programs and C compilers.  At the other extreme, the GNU
+##		make used in combination with gcc will maintain dependency
+##		information automatically.
+lib progs check check-s check-p test _test uninstall:
+	@@SETX@; for d in $(SUBDIRS); do				      \
+	   (cd $$d && $(MAKE) $@) || exit 1;				      \
+	done
+
+tests TAGS dep depend:
+	@@SETX@; for d in $(SUBDIRS); do			              \
+	   (cd $$d && $(MAKE) $@) || exit 1;				      \
+	done
+
+install:
+	@@SETX@; for d in $(SUBDIRS); do				      \
+	   (cd $$d && $(MAKE) $@) || exit 1;				      \
+	done
+
+install-doc:
+	(cd doc && $(MAKE) $@) || exit 1;
+
+uninstall-doc:
+	(cd doc && $(MAKE) $@) || exit 1;
+
+.PHONY: all lib progs test _test install uninstall dep depend clean           \
+	mostlyclean distclean maintainer-clean
+
+clean mostlyclean:
+	@@SETX@; for d in $(SUBDIRS); do		                      \
+	   (cd $$d && $(MAKE) $@);					      \
+	done
+
+distclean:
+	@@SETX@; for d in $(SUBDIRS); do		                      \
+	   (cd $$d && $(MAKE) $@);					      \
+	done
+	-$(RM)  Makefile
+
+maintainer-clean:
+	@echo "This target is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+	@@SETX@; for d in $(SUBDIRS); do		                      \
+	   (cd $$d && $(MAKE) $@);					      \
+	done
+
+


Property changes on: packages/hdf5/branches/upstream/current/hl/Makefile.in
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/hl/src/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/hl/src/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/hl/src/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,27 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+H5LT.lo: \
+   $(srcdir)/H5LT.c \
+   $(srcdir)/H5LT.h
+H5TA.lo: \
+   $(srcdir)/H5TA.c \
+   $(srcdir)/H5TA.h \
+   $(srcdir)/H5LT.h
+H5IM.lo: \
+   $(srcdir)/H5IM.c \
+   $(srcdir)/H5IM.h \
+   $(srcdir)/H5LT.h

Added: packages/hdf5/branches/upstream/current/hl/src/H5IM.c
===================================================================
--- packages/hdf5/branches/upstream/current/hl/src/H5IM.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/hl/src/H5IM.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1260 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "H5IM.h"
+
+#include <string.h>
+#include <stdlib.h>
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5IMmake_image_8bit
+ *
+ * Purpose: Creates and writes an image an 8 bit image
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: June 13, 2001
+ *
+ * Comments:
+ *  based on HDF5 Image and Palette Specification
+ *  http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageSpec.html
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5IMmake_image_8bit( hid_t loc_id,
+                            const char *dset_name,
+                            hsize_t width,
+                            hsize_t height,
+                            const unsigned char *buffer )
+{
+ int      rank = 3;
+ hsize_t  dims[3];
+
+  /* Initialize the image dimensions */
+ dims[0] = height;
+ dims[1] = width;
+ dims[2] = 1;
+
+ /* Make the dataset */
+ if ( H5LTmake_dataset( loc_id, dset_name, rank, dims, H5T_NATIVE_UCHAR, buffer ) < 0 )
+  return -1;
+
+ /* Attach the CLASS attribute */
+ if ( H5LTset_attribute_string( loc_id, dset_name, "CLASS", "IMAGE" ) < 0 )
+  return -1;
+
+ /* Attach the VERSION attribute */
+ if ( H5LTset_attribute_string( loc_id, dset_name, "IMAGE_VERSION", "1.2" ) < 0 )
+  return -1;
+
+ /* Attach the IMAGE_SUBCLASS attribute */
+ if ( H5LTset_attribute_string( loc_id, dset_name, "IMAGE_SUBCLASS", "IMAGE_INDEXED" ) < 0 )
+  return -1;
+
+ return 0;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5IMmake_image_24bit
+ *
+ * Purpose:
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: June 13, 2001
+ *
+ * Comments:
+ *  based on HDF5 Image and Palette Specification
+ *  http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageSpec.html
+ *
+ * Interlace Mode Dimensions in the Dataspace
+ * INTERLACE_PIXEL [height][width][pixel components]
+ * INTERLACE_PLANE [pixel components][height][width]
+ *
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5IMmake_image_24bit( hid_t loc_id,
+                             const char *dset_name,
+                             hsize_t width,
+                             hsize_t height,
+                             const char *interlace,
+                             const unsigned char *buffer )
+{
+ int      rank = 3;
+ hsize_t  dims[3];
+
+ /* Initialize the image dimensions */
+
+ if ( strcmp( interlace, "INTERLACE_PIXEL" ) == 0 )
+ {
+  /* Number of color planes is defined as the third dimension */
+  dims[0] = height;
+  dims[1] = width;
+  dims[2] = 3;
+ }
+ else
+ if ( strcmp( interlace, "INTERLACE_PLANE" ) == 0 )
+ {
+  /* Number of color planes is defined as the first dimension */
+  dims[0] = 3;
+  dims[1] = height;
+  dims[2] = width;
+ }
+ else return -1;
+
+ /* Make the dataset */
+ if ( H5LTmake_dataset( loc_id, dset_name, rank, dims, H5T_NATIVE_UCHAR, buffer ) < 0 )
+  return -1;
+
+ /* Attach the CLASS attribute */
+ if ( H5LTset_attribute_string( loc_id, dset_name, "CLASS", "IMAGE" ) < 0 )
+  return -1;
+
+ /* Attach the VERSION attribute */
+ if ( H5LTset_attribute_string( loc_id, dset_name, "IMAGE_VERSION", "1.2" ) < 0 )
+  return -1;
+
+ /* Attach the IMAGE_SUBCLASS attribute */
+ if ( H5LTset_attribute_string( loc_id, dset_name, "IMAGE_SUBCLASS", "IMAGE_TRUECOLOR" ) < 0 )
+  return -1;
+
+ /* Attach the INTERLACE_MODE attribute. This attributes is only for true color images */
+ if ( H5LTset_attribute_string( loc_id, dset_name, "INTERLACE_MODE", interlace ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: find_palette
+ *
+ * Purpose: operator function used by H5LT_find_palette
+ *
+ * Return:
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 28, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static herr_t find_palette( hid_t loc_id, const char *name, void  *op_data )
+{
+
+ /* Define a default zero value for return. This will cause the iterator to continue if
+  * the palette attribute is not found yet.
+  */
+
+ int ret = 0;
+
+ /* Shut compiler */
+ loc_id=loc_id;
+ op_data=op_data;
+
+ /* Define a positive value for return value if the attribute was found. This will
+  * cause the iterator to immediately return that positive value,
+  * indicating short-circuit success
+  */
+
+ if( strcmp( name, "PALETTE" ) == 0 )
+  ret = 1;
+
+
+ return ret;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5IM_find_palette
+ *
+ * Purpose: Private function. Find the attribute "PALETTE" in the image dataset
+ *
+ * Return: Success: 1, Failure: 0
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 11, 2001
+ *
+ * Comments:
+ *  The function uses H5Aiterate with the operator function find_palette
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static herr_t H5IM_find_palette( hid_t loc_id )
+{
+
+ unsigned int attr_num;     /* Starting attribute to look up */
+ herr_t       ret;
+
+ attr_num = 0;
+ ret = H5Aiterate( loc_id, &attr_num, find_palette, 0 );
+
+ return ret;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5IMget_image_info
+ *
+ * Purpose: Gets information about an image dataset (dimensions, interlace mode
+ *          and number of associated palettes).
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: July 25, 2001
+ *
+ * Comments:
+ *  based on HDF5 Image and Palette Specification
+ *  http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageSpec.html
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5IMget_image_info( hid_t loc_id,
+                     const char *dset_name,
+                     hsize_t *width,
+                     hsize_t *height,
+                     hsize_t *planes,
+                     char *interlace,
+                     hssize_t *npals )
+{
+ hid_t   did, sid;
+ hsize_t dims[3];
+ hid_t   attr_id;
+ hid_t   attr_type;
+ int     has_attr;
+ hid_t   attr_space_id;
+ hid_t   attr_class;
+ int     has_pal;
+
+ /*assume initially we have no palettes attached*/
+ *npals = 0;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Try to find the attribute "INTERLACE_MODE" on the >>image<< dataset */
+ has_attr = H5LT_find_attribute( did, "INTERLACE_MODE" );
+
+ /* It exists, get it */
+ if ( has_attr == 1 )
+ {
+
+  if ( (attr_id = H5Aopen_name( did, "INTERLACE_MODE" )) < 0 )
+   goto out;
+
+  if ( (attr_type = H5Aget_type( attr_id )) < 0 )
+   goto out;
+
+  if ( H5Aread( attr_id, attr_type, interlace ) < 0 )
+   goto out;
+
+  if ( H5Tclose( attr_type )  < 0 )
+   goto out;
+
+  if ( H5Aclose( attr_id )  < 0 )
+   goto out;
+ }
+
+ /* Get the dataspace handle */
+ if ( (sid = H5Dget_space( did )) < 0 )
+  goto out;
+
+ /* Get dimensions */
+ if ( H5Sget_simple_extent_dims( sid, dims, NULL) < 0 )
+  goto out;
+
+ /* Initialize the image dimensions */
+
+ if ( has_attr == 1 )
+ /* This is a 24 bit image */
+ {
+
+  if ( strcmp( interlace, "INTERLACE_PIXEL" ) == 0 )
+  {
+   /* Number of color planes is defined as the third dimension */
+   *height = dims[0];
+   *width  = dims[1];
+   *planes = dims[2];
+  }
+  else
+  if ( strcmp( interlace, "INTERLACE_PLANE" ) == 0 )
+  {
+   /* Number of color planes is defined as the first dimension */
+   *planes = dims[0];
+   *height = dims[1];
+   *width  = dims[2];
+  }
+  else return -1;
+ }
+ else
+ /* This is a 8 bit image */
+ {
+  *height = dims[0];
+  *width  = dims[1];
+  *planes = dims[2];
+ }
+
+ /* Close */
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+
+
+ /* Get number of palettes */
+
+
+ /* Try to find the attribute "PALETTE" on the >>image<< dataset */
+ has_pal = H5IM_find_palette( did );
+
+ if ( has_pal ==  1 )
+ {
+
+  if ( (attr_id = H5Aopen_name( did, "PALETTE" )) < 0 )
+   goto out;
+
+  if ( (attr_type = H5Aget_type( attr_id )) < 0 )
+   goto out;
+
+  if ( (attr_class = H5Tget_class( attr_type )) < 0 )
+   goto out;
+
+  /* Check if it is really a reference */
+
+  if ( attr_class == H5T_REFERENCE )
+  {
+
+   /* Get the reference(s) */
+
+   if ( (attr_space_id = H5Aget_space( attr_id )) < 0 )
+    goto out;
+
+   *npals = H5Sget_simple_extent_npoints( attr_space_id );
+
+   if ( H5Sclose( attr_space_id ) < 0 )
+    goto out;
+
+  } /* H5T_REFERENCE */
+
+  if ( H5Tclose( attr_type ) < 0 )
+   goto out;
+
+  /* Close the attribute. */
+  if ( H5Aclose( attr_id ) < 0 )
+   goto out;
+
+ }
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) < 0 )
+  goto out;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5IMread_image
+ *
+ * Purpose: Reads image data from disk.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: June 13, 2001
+ *
+ * Comments:
+ *  based on HDF5 Image and Palette Specification
+ *  http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageSpec.html
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5IMread_image( hid_t loc_id,
+                       const char *dset_name,
+                       unsigned char *buffer )
+{
+ hid_t   did;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Read */
+ if ( H5Dread( did, H5T_NATIVE_UCHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT, buffer ) < 0 )
+  goto out;
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5IMmake_palette
+ *
+ * Purpose: Creates and writes a palette.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 01, 2001
+ *
+ * Comments:
+ *  based on HDF5 Image and Palette Specification
+ *  http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageSpec.html
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5IMmake_palette( hid_t loc_id,
+                         const char *pal_name,
+                         const hsize_t *pal_dims,
+                         const unsigned char *pal_data )
+
+{
+
+ int has_pal;
+
+ /* Check if the dataset already exists */
+ has_pal = H5LTfind_dataset( loc_id, pal_name );
+
+ /* It exists. Return */
+ if ( has_pal == 1 )
+  return 0;
+
+ /* Make the palette dataset. */
+ if ( H5LTmake_dataset( loc_id, pal_name, 2, pal_dims, H5T_NATIVE_UCHAR, pal_data ) <  0 )
+  return -1;
+
+ /* Attach the attribute "CLASS" to the >>palette<< dataset*/
+ if ( H5LTset_attribute_string( loc_id, pal_name, "CLASS", "PALETTE" ) < 0 )
+  return -1;
+
+ /* Attach the attribute "PAL_VERSION" to the >>palette<< dataset*/
+ if ( H5LTset_attribute_string( loc_id, pal_name, "PAL_VERSION", "1.2" ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5IMlink_palette
+ *
+ * Purpose: This function attaches a palette to an existing image dataset
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 01, 2001
+ *
+ * Comments:
+ *  based on HDF5 Image and Palette Specification
+ *  http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageSpec.html
+ *
+ *  An image (dataset) within an HDF5 file may optionally specify an array of
+ *  palettes to be viewed with. The dataset will have an attribute
+ *  which contains an array of object reference pointers which refer to palettes in the file.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5IMlink_palette( hid_t loc_id,
+                         const char *image_name,
+                         const char *pal_name )
+
+{
+
+ hid_t       image_id;
+ hid_t       attr_type;
+ hid_t       attr_id;
+ hid_t       attr_space_id;
+ hid_t       attr_class;
+ hobj_ref_t  ref;         /* write a new reference */
+ hobj_ref_t  *refbuf;     /* buffer to read references */
+ hssize_t    n_refs;
+ hsize_t     dim_ref;
+ int         ok_pal;
+
+ /* The image dataset may or not have the attribute "PALETTE"
+  * First we try to open to see if it is already there; if not, it is created.
+  * If it exists, the array of references is extended to hold the reference
+  * to the new palette
+  */
+
+ /* First we get the image id */
+ if ( (image_id = H5Dopen( loc_id, image_name )) < 0 )
+  return -1;
+
+ /* Try to find the attribute "PALETTE" on the >>image<< dataset */
+ ok_pal = H5LT_find_attribute( image_id, "PALETTE" );
+
+ /* It does not exist. We create the attribute and one reference */
+ if ( ok_pal == 0 )
+ {
+
+  if ( (attr_space_id = H5Screate( H5S_SCALAR )) < 0 )
+   goto out;
+
+  /* Create the attribute type for the reference */
+  if ( (attr_type = H5Tcopy( H5T_STD_REF_OBJ )) < 0 )
+   goto out;
+
+  /* Create the attribute "PALETTE" to be attached to the image*/
+  if ( (attr_id = H5Acreate( image_id, "PALETTE", attr_type, attr_space_id, H5P_DEFAULT )) < 0 )
+   goto out;
+
+  /* Create a reference. The reference is created on the local id.  */
+  if ( H5Rcreate( &ref, loc_id, pal_name, H5R_OBJECT, -1 ) < 0 )
+   goto out;
+
+  /* Write the attribute with the reference */
+  if ( H5Awrite( attr_id, attr_type, &ref ) < 0 )
+   goto out;
+
+  if ( H5Sclose( attr_space_id ) < 0 )
+   goto out;
+
+ }
+
+ /* The attribute already exists, open it */
+
+ else if ( ok_pal ==  1 )
+
+ {
+
+  if ( (attr_id = H5Aopen_name( image_id, "PALETTE" )) < 0 )
+   goto out;
+
+  if ( (attr_type = H5Aget_type( attr_id )) < 0 )
+   goto out;
+
+  if ( (attr_class = H5Tget_class( attr_type )) < 0 )
+   goto out;
+
+  /* Check if it is really a reference */
+
+  if ( attr_class == H5T_REFERENCE )
+  {
+
+   /* Get and save the old reference(s) */
+
+   if ( (attr_space_id = H5Aget_space( attr_id )) < 0 )
+    goto out;
+
+   n_refs = H5Sget_simple_extent_npoints( attr_space_id );
+
+   dim_ref = n_refs + 1;
+
+   refbuf = malloc( sizeof(hobj_ref_t) * (int)dim_ref );
+
+   if ( H5Aread( attr_id, attr_type, refbuf ) < 0 )
+    goto out;
+
+   if ( H5Sclose( attr_space_id ) < 0 )
+    goto out;
+
+   /* The attribute must be deleted, in order to the new one can reflect the changes*/
+   if ( H5Adelete( image_id, "PALETTE" ) < 0 )
+    goto out;
+
+   /* Create a new reference for this palette. */
+   if ( H5Rcreate( &ref, loc_id, pal_name, H5R_OBJECT, -1 ) < 0 )
+    goto out;
+
+   refbuf[n_refs] = ref;
+
+   /* Create the data space for the new references */
+   if ( (attr_space_id = H5Screate_simple( 1, &dim_ref, NULL )) < 0 )
+    goto out;
+
+   /* Create the attribute again with the changes of space */
+   if ( (attr_id = H5Acreate( image_id, "PALETTE", attr_type, attr_space_id, H5P_DEFAULT )) < 0 )
+    goto out;
+
+    /* Write the attribute with the new references */
+   if ( H5Awrite( attr_id, attr_type, refbuf ) < 0 )
+    goto out;
+
+   if ( H5Sclose( attr_space_id ) < 0 )
+    goto out;
+
+   free( refbuf );
+
+  } /* H5T_REFERENCE */
+
+  if ( H5Tclose( attr_type ) < 0 )
+   goto out;
+
+  /* Close the attribute. */
+  if ( H5Aclose( attr_id ) < 0 )
+   goto out;
+
+ }
+
+  /* Close the image dataset. */
+ if ( H5Dclose( image_id ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( image_id );
+ return -1;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5IMunlink_palette
+ *
+ * Purpose: This function dettaches a palette from an existing image dataset
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 10, 2001
+ *
+ * Comments:
+ *  based on HDF5 Image and Palette Specification
+ *  http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageSpec.html
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5IMunlink_palette( hid_t loc_id,
+                           const char *image_name,
+                           const char *pal_name )
+{
+ hid_t       image_id;
+ hid_t       attr_type;
+ hid_t       attr_id;
+ hid_t       attr_class;
+ int         ok_pal, has_pal;
+
+ /* Try to find the palette dataset */
+ has_pal = H5LTfind_dataset( loc_id, pal_name );
+
+ /* It does not exist. Return */
+ if ( has_pal == 0 )
+  return -1;
+
+ /* The image dataset may or not have the attribute "PALETTE"
+  * First we try to open to see if it is already there; if not, it is created.
+  * If it exists, the array of references is extended to hold the reference
+  * to the new palette
+  */
+
+ /* First we get the image id */
+ if ( (image_id = H5Dopen( loc_id, image_name )) < 0 )
+  return -1;
+
+ /* Try to find the attribute "PALETTE" on the >>image<< dataset */
+ ok_pal = H5LT_find_attribute( image_id, "PALETTE" );
+
+ /* It does not exist. Nothing to do */
+ if ( ok_pal == 0 )
+  return -1;
+
+ /* The attribute exists, open it */
+ else if ( ok_pal ==  1 )
+ {
+  if ( (attr_id = H5Aopen_name( image_id, "PALETTE" )) < 0 )
+   goto out;
+
+  if ( (attr_type = H5Aget_type( attr_id )) < 0 )
+   goto out;
+
+  if ( (attr_class = H5Tget_class( attr_type )) < 0 )
+   goto out;
+
+  /* Check if it is really a reference */
+  if ( attr_class == H5T_REFERENCE )
+  {
+
+   /* Deelete the attribute */
+   if ( H5Adelete( image_id, "PALETTE" ) < 0 )
+    goto out;
+
+  }  /* H5T_REFERENCE */
+
+  if ( H5Tclose( attr_type ) < 0 )
+   goto out;
+
+  /* Close the attribute. */
+  if ( H5Aclose( attr_id ) < 0 )
+   goto out;
+
+ } /* ok_pal */
+
+  /* Close the image dataset. */
+ if ( H5Dclose( image_id ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( image_id );
+ return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5IMget_npalettes
+ *
+ * Purpose: Gets the number of palettes associated to an image
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: July 22, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5IMget_npalettes( hid_t loc_id,
+                          const char *image_name,
+                          hssize_t *npals )
+{
+ hid_t      image_id;
+ hid_t      attr_type;
+ hid_t      attr_id;
+ hid_t      attr_space_id;
+ hid_t      attr_class;
+ int        has_pal;
+
+ /*assume initially we have no palettes attached*/
+ *npals = 0;
+
+ /* Open the dataset. */
+ if ( (image_id = H5Dopen( loc_id, image_name )) < 0 )
+  return -1;
+
+ /* Try to find the attribute "PALETTE" on the >>image<< dataset */
+ has_pal = H5IM_find_palette( image_id );
+
+ if ( has_pal ==  1 )
+ {
+
+  if ( (attr_id = H5Aopen_name( image_id, "PALETTE" )) < 0 )
+   goto out;
+
+  if ( (attr_type = H5Aget_type( attr_id )) < 0 )
+   goto out;
+
+  if ( (attr_class = H5Tget_class( attr_type )) < 0 )
+   goto out;
+
+  /* Check if it is really a reference */
+
+  if ( attr_class == H5T_REFERENCE )
+  {
+   if ( (attr_space_id = H5Aget_space( attr_id )) < 0 )
+    goto out;
+
+   *npals = H5Sget_simple_extent_npoints( attr_space_id );
+
+   if ( H5Sclose( attr_space_id ) < 0 )
+    goto out;
+
+  } /* H5T_REFERENCE */
+
+  if ( H5Tclose( attr_type ) < 0 )
+   goto out;
+
+  /* Close the attribute. */
+  if ( H5Aclose( attr_id ) < 0 )
+   goto out;
+
+ }
+
+     /* Close the image dataset. */
+ if ( H5Dclose( image_id ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( image_id );
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5IMget_palette_info
+ *
+ * Purpose: Get palette information
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: July 22, 2001
+ *
+ * Comments:
+ *  based on HDF5 Image and Palette Specification
+ *  http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageSpec.html
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5IMget_palette_info( hid_t loc_id,
+                        const char *image_name,
+                        int pal_number,
+                        hsize_t *pal_dims )
+{
+ hid_t      image_id;
+ int        has_pal;
+ hid_t      attr_type;
+ hid_t      attr_id;
+ hid_t      attr_space_id;
+ hid_t      attr_class;
+ hssize_t   n_refs;
+ hsize_t    dim_ref;
+ hobj_ref_t *refbuf;     /* buffer to read references */
+ hid_t      pal_id;
+ hid_t      pal_space_id;
+ hsize_t    pal_maxdims[2];
+
+ /* Open the dataset. */
+ if ( (image_id = H5Dopen( loc_id, image_name )) < 0 )
+  return -1;
+
+ /* Try to find the attribute "PALETTE" on the >>image<< dataset */
+ has_pal = H5IM_find_palette( image_id );
+
+ if ( has_pal ==  1 )
+ {
+
+  if ( (attr_id = H5Aopen_name( image_id, "PALETTE" )) < 0 )
+   goto out;
+
+  if ( (attr_type = H5Aget_type( attr_id )) < 0 )
+   goto out;
+
+  if ( (attr_class = H5Tget_class( attr_type )) < 0 )
+   goto out;
+
+  /* Check if it is really a reference */
+
+  if ( attr_class == H5T_REFERENCE )
+  {
+
+   /* Get the reference(s) */
+
+   if ( (attr_space_id = H5Aget_space( attr_id )) < 0 )
+    goto out;
+
+   n_refs = H5Sget_simple_extent_npoints( attr_space_id );
+
+   dim_ref = n_refs;
+
+   refbuf = malloc( sizeof(hobj_ref_t) * (int)dim_ref );
+
+   if ( H5Aread( attr_id, attr_type, refbuf ) < 0 )
+    goto out;
+
+ /* Get the actual palette */
+
+  if ( (pal_id = H5Rdereference( image_id, H5R_OBJECT, &refbuf[pal_number] )) < 0 )
+    goto out;
+
+  if ( (pal_space_id = H5Dget_space( pal_id )) < 0 )
+   goto out;
+
+  if ( H5Sget_simple_extent_ndims( pal_space_id ) < 0 )
+   goto out;
+
+  if ( H5Sget_simple_extent_dims( pal_space_id, pal_dims, pal_maxdims ) < 0 )
+   goto out;
+
+  if ( H5Sclose( pal_space_id ) < 0 )
+   goto out;
+
+  if ( H5Sclose( attr_space_id ) < 0 )
+   goto out;
+
+   free( refbuf );
+
+  } /* H5T_REFERENCE */
+
+  if ( H5Tclose( attr_type ) < 0 )
+   goto out;
+
+  /* Close the attribute. */
+  if ( H5Aclose( attr_id ) < 0 )
+   goto out;
+
+ }
+
+	/* Close the image dataset. */
+ if ( H5Dclose( image_id ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( image_id );
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5IMget_palette
+ *
+ * Purpose: Read palette
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: August 30, 2001
+ *
+ * Comments:
+ *  based on HDF5 Image and Palette Specification
+ *  http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageSpec.html
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5IMget_palette( hid_t loc_id,
+                        const char *image_name,
+                        int pal_number,
+                        unsigned char *pal_data )
+{
+ hid_t      image_id;
+ int        has_pal;
+ hid_t      attr_type;
+ hid_t      attr_id;
+ hid_t      attr_space_id;
+ hid_t      attr_class;
+ hssize_t   n_refs;
+ hsize_t    dim_ref;
+ hobj_ref_t *refbuf;     /* buffer to read references */
+ hid_t      pal_id;
+
+ /* Open the dataset. */
+ if ( (image_id = H5Dopen( loc_id, image_name )) < 0 )
+  return -1;
+
+ /* Try to find the attribute "PALETTE" on the >>image<< dataset */
+ has_pal = H5IM_find_palette( image_id );
+
+ if ( has_pal ==  1 )
+ {
+
+  if ( (attr_id = H5Aopen_name( image_id, "PALETTE" )) < 0 )
+   goto out;
+
+  if ( (attr_type = H5Aget_type( attr_id )) < 0 )
+   goto out;
+
+  if ( (attr_class = H5Tget_class( attr_type )) < 0 )
+   goto out;
+
+  /* Check if it is really a reference */
+
+  if ( attr_class == H5T_REFERENCE )
+  {
+
+   /* Get the reference(s) */
+
+   if ( (attr_space_id = H5Aget_space( attr_id )) < 0 )
+    goto out;
+
+   n_refs = H5Sget_simple_extent_npoints( attr_space_id );
+
+   dim_ref = n_refs;
+
+   refbuf = malloc( sizeof(hobj_ref_t) * (int)dim_ref );
+
+   if ( H5Aread( attr_id, attr_type, refbuf ) < 0 )
+    goto out;
+
+   /* Get the palette id */
+   if ( (pal_id = H5Rdereference( image_id, H5R_OBJECT, &refbuf[pal_number] )) < 0 )
+    goto out;
+
+   /* Read the palette dataset */
+   if ( H5Dread( pal_id, H5Dget_type(pal_id), H5S_ALL, H5S_ALL, H5P_DEFAULT, pal_data ) < 0 )
+    goto out;
+
+   if ( H5Sclose( attr_space_id ) < 0 )
+    goto out;
+
+   free( refbuf );
+
+  } /* H5T_REFERENCE */
+
+  if ( H5Tclose( attr_type ) < 0 )
+   goto out;
+
+  /* Close the attribute. */
+  if ( H5Aclose( attr_id ) < 0 )
+   goto out;
+
+ }
+
+
+     /* Close the image dataset. */
+ if ( H5Dclose( image_id ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( image_id );
+ return -1;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5IMis_image
+ *
+ * Purpose:
+ *
+ * Return: true, false, fail
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: August 30, 2001
+ *
+ * Comments:
+ *  based on HDF5 Image and Palette Specification
+ *  http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageSpec.html
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5IMis_image( hid_t loc_id,
+                     const char *dset_name )
+{
+ hid_t      did;
+ int        has_class;
+ hid_t      attr_type;
+ hid_t      attr_id;
+ char       attr_data[20];
+ herr_t     ret;
+
+ /* Assume initially fail condition */
+ ret = -1;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Try to find the attribute "CLASS" on the dataset */
+ has_class = H5LT_find_attribute( did, "CLASS" );
+
+ if ( has_class ==  0 )
+ {
+  H5Dclose( did );
+  return 0;
+ }
+
+ else if ( has_class ==  1 )
+ {
+
+  if ( (attr_id = H5Aopen_name( did, "CLASS" )) < 0 )
+   goto out;
+
+  if ( (attr_type = H5Aget_type( attr_id )) < 0 )
+   goto out;
+
+  if ( H5Tget_class( attr_type ) < 0 )
+   goto out;
+
+  if ( H5Aread( attr_id, attr_type, attr_data ) < 0 )
+    goto out;
+
+  if( strcmp( attr_data, "IMAGE" ) == 0 )
+   ret = 1;
+  else
+   ret = 0;
+
+  if ( H5Tclose( attr_type ) < 0 )
+   goto out;
+
+  if ( H5Aclose( attr_id ) < 0 )
+   goto out;
+
+ }
+
+ /* Close the dataset. */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ return ret;
+
+out:
+ H5Dclose( did );
+ return -1;
+
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5IMis_palette
+ *
+ * Purpose:
+ *
+ * Return: true, false, fail
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: August 30, 2001
+ *
+ * Comments:
+ *  based on HDF5 Image and Palette Specification
+ *  http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageSpec.html
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5IMis_palette( hid_t loc_id,
+                       const char *dset_name )
+{
+ hid_t      did;
+ int        has_class;
+ hid_t      attr_type;
+ hid_t      attr_id;
+ char       attr_data[20];
+ herr_t     ret;
+
+ /* Assume initially fail condition */
+ ret = -1;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+    /* Try to find the attribute "CLASS" on the dataset */
+ has_class = H5LT_find_attribute( did, "CLASS" );
+
+ if ( has_class ==  0 )
+ {
+  H5Dclose( did );
+  return 0;
+ }
+
+ else if ( has_class ==  1 )
+ {
+
+  if ( (attr_id = H5Aopen_name( did, "CLASS" )) < 0 )
+   goto out;
+
+  if ( (attr_type = H5Aget_type( attr_id )) < 0 )
+   goto out;
+
+  if ( H5Tget_class( attr_type ) < 0 )
+   goto out;
+
+  if ( H5Aread( attr_id, attr_type, attr_data ) < 0 )
+    goto out;
+
+  if( strcmp( attr_data, "PALETTE" ) == 0 )
+   ret = 1;
+  else
+   ret = 0;
+
+  if ( H5Tclose( attr_type ) < 0 )
+   goto out;
+
+  if ( H5Aclose( attr_id ) < 0 )
+   goto out;
+
+ }
+
+     /* Close the dataset. */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ return ret;
+
+out:
+ H5Dclose( did );
+ return -1;
+
+}

Added: packages/hdf5/branches/upstream/current/hl/src/H5IM.h
===================================================================
--- packages/hdf5/branches/upstream/current/hl/src/H5IM.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/hl/src/H5IM.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,91 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5IM_H
+#define _H5IM_H
+
+#include "H5LT.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+herr_t H5IMmake_image_8bit( hid_t loc_id,
+                            const char *dset_name,
+                            hsize_t width,
+                            hsize_t height,
+                            const unsigned char *buffer );
+
+herr_t H5IMmake_image_24bit( hid_t loc_id,
+                             const char *dset_name,
+                             hsize_t width,
+                             hsize_t height,
+                             const char *interlace,
+                             const unsigned char *buffer );
+
+herr_t H5IMget_image_info( hid_t loc_id,
+                     const char *dset_name,
+                     hsize_t *width,
+                     hsize_t *height,
+                     hsize_t *planes,
+                     char    *interlace,
+                     hssize_t *npals );
+
+herr_t H5IMread_image( hid_t loc_id,
+                       const char *dset_name,
+                       unsigned char *buffer );
+
+
+
+herr_t H5IMmake_palette( hid_t loc_id,
+                         const char *pal_name,
+                         const hsize_t *pal_dims,
+                         const unsigned char *pal_data );
+
+herr_t H5IMlink_palette( hid_t loc_id,
+                        const char *image_name,
+                        const char *pal_name );
+
+herr_t H5IMunlink_palette( hid_t loc_id,
+                           const char *image_name,
+                           const char *pal_name );
+
+herr_t H5IMget_npalettes( hid_t loc_id,
+                          const char *image_name,
+                          hssize_t *npals );
+
+herr_t H5IMget_palette_info( hid_t loc_id,
+                        const char *image_name,
+                        int pal_number,
+                        hsize_t *pal_dims );
+
+
+herr_t H5IMget_palette( hid_t loc_id,
+                        const char *image_name,
+                        int pal_number,
+                        unsigned char *pal_data );
+
+herr_t H5IMis_image( hid_t loc_id,
+                     const char *dset_name );
+
+herr_t H5IMis_palette( hid_t loc_id,
+                     const char *dset_name );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Added: packages/hdf5/branches/upstream/current/hl/src/H5LT.c
===================================================================
--- packages/hdf5/branches/upstream/current/hl/src/H5LT.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/hl/src/H5LT.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2718 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "H5LT.h"
+#include <string.h>
+#include <stdlib.h>
+
+/*-------------------------------------------------------------------------
+ *
+ * Private functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LT_open_id( hid_t loc_id,
+                     const char *obj_name,
+                     int obj_type );
+
+herr_t H5LT_close_id( hid_t obj_id,
+                      int obj_type );
+
+/*-------------------------------------------------------------------------
+ *
+ * Public functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTmake_dataset
+ *
+ * Purpose: Creates and writes a dataset of a type tid
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 19, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTmake_dataset( hid_t loc_id,
+                         const char *dset_name,
+                         int rank,
+                         const hsize_t *dims,
+                         hid_t tid,
+                         const void *data )
+{
+
+ hid_t   did, sid;
+
+ /* Create the data space for the dataset. */
+ if ( (sid = H5Screate_simple( rank, dims, NULL )) < 0 )
+  return -1;
+
+ /* Create the dataset. */
+ if ( (did = H5Dcreate( loc_id, dset_name, tid, sid, H5P_DEFAULT )) < 0 )
+  goto out;
+
+ /* Write the dataset only if there is data to write */
+
+ if ( data )
+ {
+  if ( H5Dwrite( did, tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+   goto out;
+ }
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ /* Terminate access to the data space. */
+ if ( H5Sclose( sid ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ H5Sclose( sid );
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTmake_dataset_char
+ *
+ * Purpose: Creates and writes a dataset of H5T_NATIVE_CHAR type
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 14, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTmake_dataset_char( hid_t loc_id,
+                              const char *dset_name,
+                              int rank,
+                              const hsize_t *dims,
+                              const char *data )
+{
+
+ hid_t   did, sid;
+
+ /* Create the data space for the dataset. */
+ if ( (sid = H5Screate_simple( rank, dims, NULL )) < 0 )
+  return -1;
+
+ /* Create the dataset. */
+ if ( (did = H5Dcreate( loc_id, dset_name, H5T_NATIVE_CHAR, sid, H5P_DEFAULT )) < 0 )
+  goto out;
+
+ /* Write the dataset only if there is data to write */
+
+ if ( data )
+ {
+  if ( H5Dwrite( did, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+   goto out;
+ }
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ /* Terminate access to the data space. */
+ if ( H5Sclose( sid ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ H5Sclose( sid );
+ return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTmake_dataset_short
+ *
+ * Purpose: Creates and writes a dataset of H5T_NATIVE_SHORT type
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 14, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LTmake_dataset_short( hid_t loc_id,
+                               const char *dset_name,
+                               int rank,
+                               const hsize_t *dims,
+                               const short *data )
+{
+
+ hid_t   did, sid;
+
+ /* Create the data space for the dataset. */
+ if ( (sid = H5Screate_simple( rank, dims, NULL )) < 0 )
+  return -1;
+
+ /* Create the dataset. */
+ if ( (did = H5Dcreate( loc_id, dset_name, H5T_NATIVE_SHORT, sid, H5P_DEFAULT )) < 0 )
+  goto out;
+
+ /* Write the dataset only if there is data to write */
+
+ if ( data )
+ {
+  if ( H5Dwrite( did, H5T_NATIVE_SHORT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+   goto out;
+ }
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ /* Terminate access to the data space. */
+ if ( H5Sclose( sid ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ H5Sclose( sid );
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTmake_dataset_int
+ *
+ * Purpose: Creates and writes a dataset of H5T_NATIVE_INT type
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 14, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LTmake_dataset_int( hid_t loc_id,
+                             const char *dset_name,
+                             int rank,
+                             const hsize_t *dims,
+                             const int *data )
+{
+
+ hid_t   did, sid;
+
+ /* Create the data space for the dataset. */
+ if ( (sid = H5Screate_simple( rank, dims, NULL )) < 0 )
+  return -1;
+
+ /* Create the dataset. */
+ if ( (did = H5Dcreate( loc_id, dset_name, H5T_NATIVE_INT, sid, H5P_DEFAULT )) < 0 )
+  goto out;
+
+ /* Write the dataset only if there is data to write */
+
+ if ( data )
+ {
+  if ( H5Dwrite( did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+   goto out;
+ }
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ /* Terminate access to the data space. */
+ if ( H5Sclose( sid ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ H5Sclose( sid );
+ return -1;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTmake_dataset_long
+ *
+ * Purpose: Creates and writes a dataset of H5T_NATIVE_LONG type
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 14, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LTmake_dataset_long( hid_t loc_id,
+                              const char *dset_name,
+                              int rank,
+                              const hsize_t *dims,
+                              const long *data )
+{
+
+ hid_t   did, sid;
+
+ /* Create the data space for the dataset. */
+ if ( (sid = H5Screate_simple( rank, dims, NULL )) < 0 )
+  return -1;
+
+ /* Create the dataset. */
+ if ( (did = H5Dcreate( loc_id, dset_name, H5T_NATIVE_LONG, sid, H5P_DEFAULT )) < 0 )
+  goto out;
+
+ /* Write the dataset only if there is data to write */
+
+ if ( data )
+ {
+  if ( H5Dwrite( did, H5T_NATIVE_LONG, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+   goto out;
+ }
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ /* Terminate access to the data space. */
+ if ( H5Sclose( sid ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ H5Sclose( sid );
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTmake_dataset_float
+ *
+ * Purpose: Creates and writes a dataset of H5T_NATIVE_FLOAT type
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 14, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LTmake_dataset_float( hid_t loc_id,
+                               const char *dset_name,
+                               int rank,
+                               const hsize_t *dims,
+                               const float *data )
+{
+
+ hid_t   did, sid;
+
+ /* Create the data space for the dataset. */
+ if ( (sid = H5Screate_simple( rank, dims, NULL )) < 0 )
+  return -1;
+
+ /* Create the dataset. */
+ if ( (did = H5Dcreate( loc_id, dset_name, H5T_NATIVE_FLOAT, sid, H5P_DEFAULT )) < 0 )
+  goto out;
+
+ /* Write the dataset only if there is data to write */
+
+ if ( data )
+ {
+  if ( H5Dwrite( did, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+   goto out;
+ }
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ /* Terminate access to the data space. */
+ if ( H5Sclose( sid ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ H5Sclose( sid );
+ return -1;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTmake_dataset_double
+ *
+ * Purpose: Creates and writes a dataset of H5T_NATIVE_DOUBLE type
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 14, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LTmake_dataset_double( hid_t loc_id,
+                                const char *dset_name,
+                                int rank,
+                                const hsize_t *dims,
+                                const double *data )
+{
+
+ hid_t   did, sid;
+
+ /* Create the data space for the dataset. */
+ if ( (sid = H5Screate_simple( rank, dims, NULL )) < 0 )
+  return -1;
+
+ /* Create the dataset. */
+ if ( (did = H5Dcreate( loc_id, dset_name, H5T_NATIVE_DOUBLE, sid, H5P_DEFAULT )) < 0 )
+  goto out;
+
+ /* Write the dataset only if there is data to write */
+
+ if ( data )
+ {
+  if ( H5Dwrite( did, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+   goto out;
+ }
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ /* Terminate access to the data space. */
+ if ( H5Sclose( sid ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ H5Sclose( sid );
+ return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTmake_dataset_string
+ *
+ * Purpose: Creates and writes a dataset of H5T_C_S1 type
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October 05, 2004
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LTmake_dataset_string(hid_t loc_id,
+                               const char *dset_name,
+                               const char *buf )
+{
+
+ hid_t   did=-1;
+	hid_t   sid=-1;
+	hid_t   tid;
+	size_t  size;
+
+ /* create a string data type */
+ if ( (tid = H5Tcopy( H5T_C_S1 )) < 0 )
+  goto out;
+
+ size = strlen(buf) + 1; /* extra null term */
+
+ if ( H5Tset_size(tid,size) < 0 )
+  goto out;
+
+ if ( H5Tset_strpad(tid,H5T_STR_NULLTERM ) < 0 )
+  goto out;
+
+ /* Create the data space for the dataset. */
+ if ( (sid = H5Screate( H5S_SCALAR )) < 0 )
+  goto out;
+
+ /* Create the dataset. */
+ if ( (did = H5Dcreate(loc_id,dset_name,tid,sid,H5P_DEFAULT)) < 0 )
+  goto out;
+
+ /* Write the dataset only if there is data to write */
+
+ if (buf)
+ {
+  if ( H5Dwrite(did,tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf) < 0 )
+   goto out;
+ }
+
+ /* close*/
+ if ( H5Dclose(did) < 0 )
+  return -1;
+ if ( H5Sclose(sid) < 0 )
+  return -1;
+	if ( H5Tclose(tid) < 0 )
+  goto out;
+
+ return 0;
+
+out:
+  H5Dclose(did);
+  H5Tclose(tid);
+  H5Sclose(sid);
+ return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTread_dataset
+ *
+ * Purpose: Reads a dataset from disk.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: June 13, 2001
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTread_dataset( hid_t loc_id,
+                         const char *dset_name,
+                         hid_t tid,
+                         void *data )
+{
+ hid_t   did;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Read */
+ if ( H5Dread( did, tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+  goto out;
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTread_dataset_char
+ *
+ * Purpose: Reads a dataset from disk.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 5, 2001
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTread_dataset_char( hid_t loc_id,
+                              const char *dset_name,
+                              char *data )
+{
+ hid_t   did;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Read */
+ if ( H5Dread( did, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+  goto out;
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ return -1;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTread_dataset_short
+ *
+ * Purpose: Reads a dataset from disk.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 5, 2001
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTread_dataset_short( hid_t loc_id,
+                               const char *dset_name,
+                               short *data )
+{
+ hid_t   did;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Read */
+ if ( H5Dread( did, H5T_NATIVE_SHORT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+  goto out;
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ return -1;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTread_dataset_int
+ *
+ * Purpose: Reads a dataset from disk.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 5, 2001
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTread_dataset_int( hid_t loc_id,
+                             const char *dset_name,
+                             int *data )
+{
+ hid_t   did;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Read */
+ if ( H5Dread( did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+  goto out;
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ return -1;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTread_dataset_long
+ *
+ * Purpose: Reads a dataset from disk.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 5, 2001
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTread_dataset_long( hid_t loc_id,
+                              const char *dset_name,
+                              long *data )
+{
+ hid_t   did;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Read */
+ if ( H5Dread( did, H5T_NATIVE_LONG, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+  goto out;
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ return -1;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTread_dataset_float
+ *
+ * Purpose: Reads a dataset from disk.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 5, 2001
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTread_dataset_float( hid_t loc_id,
+                               const char *dset_name,
+                               float *data )
+{
+ hid_t   did;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Read */
+ if ( H5Dread( did, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+  goto out;
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTread_dataset_double
+ *
+ * Purpose: Reads a dataset from disk.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 5, 2001
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTread_dataset_double( hid_t loc_id,
+                                const char *dset_name,
+                                double *data )
+{
+ hid_t   did;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Read */
+ if ( H5Dread( did, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+  goto out;
+
+ /* End access to the dataset and release resources used by it. */
+ if ( H5Dclose( did ) )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTread_dataset_string
+ *
+ * Purpose: Reads a dataset
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October 05, 2004
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTread_dataset_string( hid_t loc_id,
+                                const char *dset_name,
+                                char *buf )
+{
+ hid_t   did;
+	hid_t   tid;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+	if ( (tid = H5Dget_type(did)) < 0 )
+  goto out;
+
+ /* Read */
+ if ( H5Dread(did,tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf) < 0 )
+  goto out;
+
+ /* close */
+ if ( H5Dclose(did) )
+  goto out;
+	if ( H5Tclose(tid) )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+	H5Tclose( tid );
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_dataset_ndims
+ *
+ * Purpose: Gets the dimensionality of a dataset.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 4, 2001
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTget_dataset_ndims( hid_t loc_id,
+                              const char *dset_name,
+                              int *rank )
+{
+ hid_t       did;
+ hid_t       sid;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Get the dataspace handle */
+ if ( (sid = H5Dget_space( did )) < 0 )
+  goto out;
+
+ /* Get rank */
+ if ( (*rank = H5Sget_simple_extent_ndims( sid )) < 0 )
+  goto out;
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+
+ /* End access to the dataset */
+ if ( H5Dclose( did ) )
+  return -1;
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ H5Sclose( sid );
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_dataset_info
+ *
+ * Purpose: Gets information about a dataset.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 4, 2001
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTget_dataset_info( hid_t loc_id,
+                             const char *dset_name,
+                             hsize_t *dims,
+                             H5T_class_t *type_class,
+                             size_t *type_size )
+{
+ hid_t       did;
+ hid_t       tid;
+ hid_t       sid;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Get an identifier for the datatype. */
+ tid = H5Dget_type( did );
+
+ /* Get the class. */
+ *type_class = H5Tget_class( tid );
+
+ /* Get the size. */
+ *type_size = H5Tget_size( tid );
+
+  /* Get the dataspace handle */
+ if ( (sid = H5Dget_space( did )) < 0 )
+  goto out;
+
+ /* Get dimensions */
+ if ( H5Sget_simple_extent_dims( sid, dims, NULL) < 0 )
+  goto out;
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+
+  /* Release the datatype. */
+ if ( H5Tclose( tid ) )
+  return -1;
+
+ /* End access to the dataset */
+ if ( H5Dclose( did ) )
+  return -1;
+
+ return 0;
+
+out:
+ H5Tclose( tid );
+ H5Dclose( did );
+ return -1;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: find_dataset
+ *
+ * Purpose: operator function used by H5LTfind_dataset
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: June 21, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static herr_t find_dataset( hid_t loc_id, const char *name, void *op_data)
+{
+
+ /* Define a default zero value for return. This will cause the iterator to continue if
+  * the dataset is not found yet.
+  */
+
+ int ret = 0;
+
+ char *dset_name = (char*)op_data;
+
+ /* Shut the compiler up */
+ loc_id=loc_id;
+
+ /* Define a positive value for return value if the dataset was found. This will
+  * cause the iterator to immediately return that positive value,
+  * indicating short-circuit success
+  */
+
+ if( strcmp( name, dset_name ) == 0 )
+  ret = 1;
+
+
+ return ret;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTfind_dataset
+ *
+ * Purpose:  Inquires if a dataset named dset_name exists attached
+ *           to the object loc_id.
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: July 15, 2001
+ *
+ * Return:
+ *     Success: The return value of the first operator that
+ *              returns non-zero, or zero if all members were
+ *              processed with no operator returning non-zero.
+ *
+ *      Failure:    Negative if something goes wrong within the
+ *              library, or the negative value returned by one
+ *              of the operators.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTfind_dataset( hid_t loc_id, const char *dset_name )
+{
+
+ herr_t  ret;
+
+ ret = H5Giterate( loc_id, ".", 0, find_dataset, (void *)dset_name );
+
+ return ret;
+}
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Set attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTset_attribute_string
+ *
+ * Purpose: Creates and writes a string attribute named attr_name and attaches
+ *          it to the object specified by the name obj_name.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: July 23, 2001
+ *
+ * Comments: If the attribute already exists, it is overwritten
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTset_attribute_string( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 const char *attr_data )
+{
+ hid_t      attr_type;
+ hid_t      attr_space_id;
+ hid_t      attr_id;
+ hid_t      obj_id;
+ int        has_attr;
+ H5G_stat_t statbuf;
+	size_t     attr_size;
+
+
+ /* Get the type of object */
+ if (H5Gget_objinfo( loc_id, obj_name, 1, &statbuf )<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Create the attribute */
+ if ( (attr_type = H5Tcopy( H5T_C_S1 )) < 0 )
+  goto out;
+
+ attr_size = strlen( attr_data ) + 1; /* extra null term */
+
+ if ( H5Tset_size( attr_type, (size_t)attr_size) < 0 )
+  goto out;
+
+ if ( H5Tset_strpad( attr_type, H5T_STR_NULLTERM ) < 0 )
+  goto out;
+
+ if ( (attr_space_id = H5Screate( H5S_SCALAR )) < 0 )
+  goto out;
+
+ /* Verify if the attribute already exists */
+ has_attr = H5LT_find_attribute( obj_id, attr_name );
+
+ /* The attribute already exists, delete it */
+ if ( has_attr == 1 )
+ {
+  if ( H5Adelete( obj_id, attr_name ) < 0 )
+    goto out;
+ }
+
+ /* Create and write the attribute */
+
+ if ( (attr_id = H5Acreate( obj_id, attr_name, attr_type, attr_space_id, H5P_DEFAULT )) < 0 )
+  goto out;
+
+ if ( H5Awrite( attr_id, attr_type, attr_data ) < 0 )
+  goto out;
+
+ if ( H5Aclose( attr_id ) < 0 )
+  goto out;
+
+ if ( H5Sclose( attr_space_id ) < 0 )
+  goto out;
+
+ if ( H5Tclose(attr_type) < 0 )
+  goto out;
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+  return 0;
+
+out:
+
+ H5LT_close_id( obj_id, statbuf.type );
+ return -1;
+}
+
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LT_set_attribute_numerical
+ *
+ * Purpose: Private function used by H5LTset_attribute_int and H5LTset_attribute_float
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: July 25, 2001
+ *
+ * Comments:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LT_set_attribute_numerical( hid_t loc_id,
+                                     const char *obj_name,
+                                     const char *attr_name,
+                                     size_t size,
+                                     hid_t tid,
+                                     const void *data )
+{
+
+ hid_t      obj_id, sid, attr_id;
+ hsize_t    dim_size=size;
+ int        has_attr;
+ H5G_stat_t statbuf;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Create the data space for the attribute. */
+ if ( (sid = H5Screate_simple( 1, &dim_size, NULL )) < 0 )
+  goto out;
+
+  /* Verify if the attribute already exists */
+ has_attr = H5LT_find_attribute( obj_id, attr_name );
+
+ /* The attribute already exists, delete it */
+ if ( has_attr == 1 )
+ {
+  if ( H5Adelete( obj_id, attr_name ) < 0 )
+    goto out;
+ }
+
+ /* Create the attribute. */
+ if ( (attr_id = H5Acreate( obj_id, attr_name, tid, sid, H5P_DEFAULT )) < 0 )
+  goto out;
+
+ /* Write the attribute data. */
+ if ( H5Awrite( attr_id, tid, data ) < 0 )
+  goto out;
+
+ /* Close the attribute. */
+ if ( H5Aclose( attr_id ) < 0 )
+  goto out;
+
+ /* Close the dataspace. */
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5LT_close_id( obj_id, statbuf.type );
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LT_open_id
+ *
+ * Purpose: Private function used by H5LT_set_attribute_*
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 19, 2002
+ *
+ * Comments:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LT_open_id( hid_t loc_id,
+                     const char *obj_name,
+                     int obj_type /*basic object type*/ )
+{
+
+ hid_t   obj_id = -1;
+
+ switch ( obj_type )
+ {
+  case H5G_DATASET:
+
+   /* Open the dataset. */
+   if ( (obj_id = H5Dopen( loc_id, obj_name )) < 0 )
+    return -1;
+   break;
+
+  case H5G_GROUP:
+
+   /* Open the group. */
+   if ( (obj_id = H5Gopen( loc_id, obj_name )) < 0 )
+    return -1;
+   break;
+
+  default:
+   return -1;
+ }
+
+ return obj_id;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LT_close_id
+ *
+ * Purpose: Private function used by H5LT_set_attribute_*
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 19, 2002
+ *
+ * Comments:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LT_close_id( hid_t obj_id,
+                      int obj_type /*basic object type*/ )
+{
+ switch ( obj_type )
+ {
+  case H5G_DATASET:
+   /* Close the dataset. */
+   if ( H5Dclose( obj_id ) < 0 )
+    return -1;
+   break;
+
+  case H5G_GROUP:
+  /* Close the group. */
+   if ( H5Gclose( obj_id ) < 0 )
+    return -1;
+   break;
+
+  default:
+   return -1;
+ }
+
+ return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTset_attribute_char
+ *
+ * Purpose: Create and write an attribute.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 7, 2001
+ *
+ * Comments:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTset_attribute_char( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const char *data,
+                               size_t size )
+{
+
+ if ( H5LT_set_attribute_numerical( loc_id, obj_name, attr_name, size,
+      H5T_NATIVE_CHAR, data ) < 0 )
+  return -1;
+
+ return 0;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTset_attribute_uchar
+ *
+ * Purpose: Create and write an attribute.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 8, 2004
+ *
+ * Comments:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTset_attribute_uchar( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                const unsigned char *data,
+                                size_t size )
+{
+
+ if ( H5LT_set_attribute_numerical( loc_id, obj_name, attr_name, size,
+      H5T_NATIVE_UCHAR, data ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTset_attribute_short
+ *
+ * Purpose: Create and write an attribute.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 7, 2001
+ *
+ * Comments:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTset_attribute_short( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                const short *data,
+                                size_t size )
+{
+
+ if ( H5LT_set_attribute_numerical( loc_id, obj_name, attr_name, size,
+      H5T_NATIVE_SHORT, data ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTset_attribute_ushort
+ *
+ * Purpose: Create and write an attribute.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 8, 2004
+ *
+ * Comments:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTset_attribute_ushort( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                const unsigned short *data,
+                                size_t size )
+{
+
+ if ( H5LT_set_attribute_numerical( loc_id, obj_name, attr_name, size,
+      H5T_NATIVE_USHORT, data ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTset_attribute_int
+ *
+ * Purpose: Create and write an attribute.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 7, 2001
+ *
+ * Comments:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTset_attribute_int( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              const int *data,
+                              size_t size )
+{
+
+ if ( H5LT_set_attribute_numerical( loc_id, obj_name, attr_name, size,
+      H5T_NATIVE_INT, data ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTset_attribute_uint
+ *
+ * Purpose: Create and write an attribute.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 8, 2004
+ *
+ * Comments:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTset_attribute_uint( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              const unsigned int *data,
+                              size_t size )
+{
+
+ if ( H5LT_set_attribute_numerical( loc_id, obj_name, attr_name, size,
+      H5T_NATIVE_UINT, data ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTset_attribute_long
+ *
+ * Purpose: Create and write an attribute.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 7, 2001
+ *
+ * Comments:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTset_attribute_long( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const long *data,
+                               size_t size )
+{
+
+ if ( H5LT_set_attribute_numerical( loc_id, obj_name, attr_name, size,
+      H5T_NATIVE_LONG, data ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTset_attribute_ulong
+ *
+ * Purpose: Create and write an attribute.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 8, 2004
+ *
+ * Comments:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTset_attribute_ulong( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const unsigned long *data,
+                               size_t size )
+{
+
+ if ( H5LT_set_attribute_numerical( loc_id, obj_name, attr_name, size,
+      H5T_NATIVE_ULONG, data ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTset_attribute_float
+ *
+ * Purpose: Create and write an attribute.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: July 25, 2001
+ *
+ * Comments:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LTset_attribute_float( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                const float *data,
+                                size_t size )
+{
+
+ if ( H5LT_set_attribute_numerical( loc_id, obj_name, attr_name, size,
+      H5T_NATIVE_FLOAT, data ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTset_attribute_double
+ *
+ * Purpose: Create and write an attribute.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 7, 2001
+ *
+ * Comments:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTset_attribute_double( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 const double *data,
+                                 size_t size )
+{
+
+ if ( H5LT_set_attribute_numerical( loc_id, obj_name, attr_name, size,
+      H5T_NATIVE_DOUBLE, data ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: find_attr
+ *
+ * Purpose: operator function used by H5LT_find_attribute
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: June 21, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static herr_t find_attr( hid_t loc_id, const char *name, void *op_data)
+{
+
+ /* Define a default zero value for return. This will cause the iterator to continue if
+  * the palette attribute is not found yet.
+  */
+
+ int ret = 0;
+
+ char *attr_name = (char*)op_data;
+
+ /* Shut the compiler up */
+ loc_id=loc_id;
+
+ /* Define a positive value for return value if the attribute was found. This will
+  * cause the iterator to immediately return that positive value,
+  * indicating short-circuit success
+  */
+
+ if( strcmp( name, attr_name ) == 0 )
+  ret = 1;
+
+
+ return ret;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LT_find_attribute
+ *
+ * Purpose: Inquires if an attribute named attr_name exists attached to the object loc_id.
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: June 21, 2001
+ *
+ * Comments:
+ *  The function uses H5Aiterate with the operator function find_attr
+ *
+ * Return:
+ *  Success: The return value of the first operator that
+ *              returns non-zero, or zero if all members were
+ *              processed with no operator returning non-zero.
+ *
+ *  Failure: Negative if something goes wrong within the
+ *              library, or the negative value returned by one
+ *              of the operators.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LT_find_attribute( hid_t loc_id, const char* attr_name )
+{
+
+ unsigned int attr_num;
+ herr_t       ret;
+
+ attr_num = 0;
+ ret = H5Aiterate( loc_id, &attr_num, find_attr, (void *)attr_name );
+
+ return ret;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_attribute_ndims
+ *
+ * Purpose: Gets the dimensionality of an attribute.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 4, 2001
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTget_attribute_ndims( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                int *rank )
+{
+ hid_t       attr_id;
+ hid_t       sid;
+ H5G_stat_t  statbuf;
+ hid_t       obj_id;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo( loc_id, obj_name, 1, &statbuf )<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Open the attribute. */
+ if ( ( attr_id = H5Aopen_name( obj_id, attr_name ) ) < 0 )
+ {
+  H5LT_close_id( obj_id, statbuf.type );
+  return -1;
+ }
+
+ /* Get the dataspace handle */
+ if ( (sid = H5Aget_space( attr_id )) < 0 )
+  goto out;
+
+ /* Get rank */
+ if ( (*rank = H5Sget_simple_extent_ndims( sid )) < 0 )
+  goto out;
+
+ /* Terminate access to the attribute */
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+
+ /* End access to the attribute */
+ if ( H5Aclose( attr_id ) )
+  goto out;;
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Aclose( attr_id );
+ H5LT_close_id( obj_id, statbuf.type );
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_attribute_info
+ *
+ * Purpose: Gets information about an attribute.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 4, 2001
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTget_attribute_info( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               hsize_t *dims,
+                               H5T_class_t *type_class,
+                               size_t *type_size )
+{
+ hid_t       attr_id;
+ hid_t       tid;
+ hid_t       sid;
+ H5G_stat_t  statbuf;
+ hid_t       obj_id;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo( loc_id, obj_name, 1, &statbuf )<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+  /* Open the attribute. */
+ if ( ( attr_id = H5Aopen_name( obj_id, attr_name ) ) < 0 )
+ {
+  H5LT_close_id( obj_id, statbuf.type );
+  return -1;
+ }
+
+ /* Get an identifier for the datatype. */
+ tid = H5Aget_type( attr_id );
+
+ /* Get the class. */
+  *type_class = H5Tget_class( tid );
+
+ /* Get the size. */
+  *type_size = H5Tget_size( tid );
+
+  /* Get the dataspace handle */
+ if ( (sid = H5Aget_space( attr_id )) < 0 )
+  goto out;
+
+ /* Get dimensions */
+ if ( H5Sget_simple_extent_dims( sid, dims, NULL) < 0 )
+  goto out;
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+
+  /* Release the datatype. */
+ if ( H5Tclose( tid ) )
+  goto out;
+
+  /* End access to the attribute */
+ if ( H5Aclose( attr_id ) )
+  goto out;
+
+  /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Tclose( tid );
+ H5Aclose( attr_id );
+ H5LT_close_id( obj_id, statbuf.type );
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ *
+ * General functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTcreate_compound_type
+ *
+ * Purpose:
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 18, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+hid_t H5LTcreate_compound_type( hsize_t nfields, size_t size, const char *field_names[],
+                                const size_t *field_offset, const hid_t *field_types )
+{
+
+ hid_t   tid;
+ hsize_t i;
+
+ /* Create the memory data type. */
+ if ((tid = H5Tcreate (H5T_COMPOUND, size )) < 0 )
+  goto out;
+
+ /* Insert fields. */
+ for ( i = 0; i < nfields; i++)
+ {
+  if ( H5Tinsert(tid, field_names[i], field_offset[i], field_types[i] ) < 0 )
+   goto out;
+ }
+
+ return tid;
+
+out:
+ return -1;
+}
+
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTrepack
+ *
+ * Purpose: Packs/Unpacks data from buffers. This function transfers data from a packed
+ * data, src_buf, to a "natural byte aligned" (an n-byte item at an n-byte boundary)
+ * data, dst_buf, and vice-versa.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: January 17, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTrepack( hsize_t nfields,
+                   hsize_t nrecords,
+                   size_t src_size,
+                   const size_t *src_offset,
+                   const size_t *src_sizes,
+                   size_t dst_size,
+                   const size_t *dst_offset,
+                   const size_t *dst_sizes,
+                   unsigned char *src_buf,
+                   unsigned char *dst_buf )
+{
+ hsize_t   i, j;
+ /* size of each field of destination data counting with padding */
+ size_t *size_pad = (size_t *)malloc((size_t)nfields * sizeof(size_t));
+
+ /* Shut compiler */
+ src_size=src_size;
+ src_offset=src_offset;
+
+ if ( size_pad == NULL )
+  goto out;
+
+ for ( i= 0; i < nfields; i++)
+ {
+
+  size_pad[i] = ( i == nfields-1 ? dst_size-dst_offset[i] : dst_offset[i+1]-dst_offset[i] );
+
+ }
+
+ /* Iterate tru the records */
+ for ( i = 0; i < nrecords; i++)
+ {
+  /* Iterate tru the members */
+  for ( j = 0; j < nfields; j++)
+  {
+
+   memcpy( dst_buf, src_buf, dst_sizes[j] );
+   dst_buf += size_pad[j];
+   src_buf += src_sizes[j];
+
+  }
+
+ }
+
+ if ( size_pad != NULL )
+  free( size_pad );
+
+return 0;
+
+out:
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Get attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_attribute_string
+ *
+ * Purpose: Reads an attribute named attr_name
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 19, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LTget_attribute_string( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 char *data )
+{
+
+ /* identifiers */
+ hid_t      obj_id;
+ H5G_stat_t statbuf;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Get the attribute */
+ if ( H5LT_get_attribute_disk( obj_id, attr_name, data ) < 0 )
+  return -1;
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_attribute_char
+ *
+ * Purpose: Reads an attribute named attr_name
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 19, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5LTget_attribute_char( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                char *data )
+{
+
+ /* identifiers */
+ hid_t      obj_id;
+ H5G_stat_t statbuf;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Get the attribute */
+ if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_CHAR, data ) < 0 )
+  return -1;
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_attribute_uchar
+ *
+ * Purpose: Reads an attribute named attr_name
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 8, 2004
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5LTget_attribute_uchar( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                unsigned char *data )
+{
+
+ /* identifiers */
+ hid_t      obj_id;
+ H5G_stat_t statbuf;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Get the attribute */
+ if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_UCHAR, data ) < 0 )
+  return -1;
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_attribute_short
+ *
+ * Purpose: Reads an attribute named attr_name
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 19, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5LTget_attribute_short( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                short *data )
+{
+
+ /* identifiers */
+ hid_t      obj_id;
+ H5G_stat_t statbuf;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Get the attribute */
+ if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_SHORT, data ) < 0 )
+  return -1;
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_attribute_ushort
+ *
+ * Purpose: Reads an attribute named attr_name
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 8, 2004
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5LTget_attribute_ushort( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                unsigned short *data )
+{
+
+ /* identifiers */
+ hid_t      obj_id;
+ H5G_stat_t statbuf;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Get the attribute */
+ if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_USHORT, data ) < 0 )
+  return -1;
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_attribute_int
+ *
+ * Purpose: Reads an attribute named attr_name
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 19, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5LTget_attribute_int( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              int *data )
+{
+
+ /* identifiers */
+ hid_t      obj_id;
+ H5G_stat_t statbuf;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Get the attribute */
+ if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_INT, data ) < 0 )
+  return -1;
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_attribute_uint
+ *
+ * Purpose: Reads an attribute named attr_name
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 8, 2004
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5LTget_attribute_uint( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              unsigned int *data )
+{
+
+ /* identifiers */
+ hid_t      obj_id;
+ H5G_stat_t statbuf;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Get the attribute */
+ if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_UINT, data ) < 0 )
+  return -1;
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_attribute_long
+ *
+ * Purpose: Reads an attribute named attr_name
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 19, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5LTget_attribute_long( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              long *data )
+{
+
+ /* identifiers */
+ hid_t      obj_id;
+ H5G_stat_t statbuf;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Get the attribute */
+ if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_LONG, data ) < 0 )
+  return -1;
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_attribute_ulong
+ *
+ * Purpose: Reads an attribute named attr_name
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 8, 2004
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5LTget_attribute_ulong( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              unsigned long *data )
+{
+
+ /* identifiers */
+ hid_t      obj_id;
+ H5G_stat_t statbuf;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Get the attribute */
+ if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_ULONG, data ) < 0 )
+  return -1;
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_attribute_float
+ *
+ * Purpose: Reads an attribute named attr_name
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 19, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LTget_attribute_float( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                float *data )
+{
+
+ /* identifiers */
+ hid_t      obj_id;
+ H5G_stat_t statbuf;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Get the attribute */
+ if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_FLOAT, data ) < 0 )
+  return -1;
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_attribute_double
+ *
+ * Purpose: Reads an attribute named attr_name
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 19, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LTget_attribute_double( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 double *data )
+{
+
+ /* identifiers */
+ hid_t      obj_id;
+ H5G_stat_t statbuf;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Get the attribute */
+ if ( H5LT_get_attribute_mem( obj_id, attr_name, H5T_NATIVE_DOUBLE, data ) < 0 )
+  return -1;
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LTget_attribute
+ *
+ * Purpose: Reads an attribute named attr_name with the memory type mem_type_id
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 19, 2002
+ *
+ * Comments: Private function
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LTget_attribute( hid_t loc_id,
+                          const char *obj_name,
+                          const char *attr_name,
+                          hid_t mem_type_id,
+                          void *data )
+{
+
+ /* identifiers */
+ hid_t      obj_id;
+ H5G_stat_t statbuf;
+
+ /* Get the type of object */
+ if (H5Gget_objinfo(loc_id, obj_name, 1, &statbuf)<0)
+  return -1;
+
+ /* Open the object */
+ if ((obj_id = H5LT_open_id( loc_id, obj_name, statbuf.type )) < 0)
+  return -1;
+
+ /* Get the attribute */
+ if ( H5LT_get_attribute_mem( obj_id, attr_name, mem_type_id, data ) < 0 )
+ {
+  H5LT_close_id( obj_id, statbuf.type );
+  return -1;
+ }
+
+ /* Close the object */
+ if ( H5LT_close_id( obj_id, statbuf.type ) < 0 )
+  return -1;
+
+ return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5LT_get_attribute_mem
+ *
+ * Purpose: Reads an attribute named attr_name with the memory type mem_type_id
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 19, 2002
+ *
+ * Comments: Private function
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LT_get_attribute_mem( hid_t obj_id,
+                           const char *attr_name,
+                           hid_t mem_type_id,
+                           void *data )
+{
+
+ /* identifiers */
+ hid_t attr_id;
+
+ if ( ( attr_id = H5Aopen_name( obj_id, attr_name ) ) < 0 )
+  return -1;
+
+ if ( H5Aread( attr_id, mem_type_id, data ) < 0 )
+  goto out;
+
+ if ( H5Aclose( attr_id ) < 0 )
+  return -1;
+
+ return 0;
+
+out:
+ H5Aclose( attr_id );
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5LT_get_attribute_disk
+ *
+ * Purpose: Reads an attribute named attr_name with the datatype stored on disk
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September 19, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LT_get_attribute_disk( hid_t loc_id,
+                          const char *attr_name,
+                          void *attr_out )
+{
+ /* identifiers */
+ hid_t      attr_id;
+ hid_t      attr_type;
+
+ if ( ( attr_id = H5Aopen_name( loc_id, attr_name ) ) < 0 )
+  return -1;
+
+ if ( (attr_type = H5Aget_type( attr_id )) < 0 )
+  goto out;
+
+ if ( H5Aread( attr_id, attr_type, attr_out ) < 0 )
+  goto out;
+
+ if ( H5Tclose( attr_type )  < 0 )
+  goto out;
+
+ if ( H5Aclose( attr_id ) < 0 )
+  return -1;;
+
+ return 0;
+
+out:
+ H5Tclose( attr_type );
+ H5Aclose( attr_id );
+ return -1;
+}
+
+
+
+

Added: packages/hdf5/branches/upstream/current/hl/src/H5LT.h
===================================================================
--- packages/hdf5/branches/upstream/current/hl/src/H5LT.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/hl/src/H5LT.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,374 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5LT_H
+#define _H5LT_H
+
+#include <hdf5.h>
+
+#define TESTING(WHAT)	{printf("%-70s", "Testing " WHAT); fflush(stdout);}
+#define PASSED()	{puts(" PASSED");fflush(stdout);}
+#define H5_FAILED()	{puts("*FAILED*");fflush(stdout);}
+#define SKIPPED()	{puts(" -SKIP-");fflush(stdout);}
+#define EXAMPLE(WHAT)	{printf("%-70s", "Example " WHAT); fflush(stdout);}
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Make dataset functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTmake_dataset( hid_t loc_id,
+                         const char *dset_name,
+                         int rank,
+                         const hsize_t *dims,
+                         hid_t type_id,
+                         const void *buffer );
+
+herr_t H5LTmake_dataset_char( hid_t loc_id,
+                              const char *dset_name,
+                              int rank,
+                              const hsize_t *dims,
+                              const char *buffer );
+
+herr_t H5LTmake_dataset_short( hid_t loc_id,
+                               const char *dset_name,
+                               int rank,
+                               const hsize_t *dims,
+                               const short *buffer );
+
+herr_t H5LTmake_dataset_int( hid_t loc_id,
+                             const char *dset_name,
+                             int rank,
+                             const hsize_t *dims,
+                             const int *buffer );
+
+herr_t H5LTmake_dataset_long( hid_t loc_id,
+                              const char *dset_name,
+                              int rank,
+                              const hsize_t *dims,
+                              const long *buffer );
+
+herr_t H5LTmake_dataset_float( hid_t loc_id,
+                               const char *dset_name,
+                               int rank,
+                               const hsize_t *dims,
+                               const float *buffer );
+
+herr_t H5LTmake_dataset_double( hid_t loc_id,
+                                const char *dset_name,
+                                int rank,
+                                const hsize_t *dims,
+                                const double *buffer );
+
+herr_t H5LTmake_dataset_string(hid_t loc_id,
+                               const char *dset_name,
+                               const char *buf );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Read dataset functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTread_dataset( hid_t loc_id,
+                         const char *dset_name,
+                         hid_t type_id,
+                         void *buffer );
+
+herr_t H5LTread_dataset_char( hid_t loc_id,
+                              const char *dset_name,
+                              char *buffer );
+
+herr_t H5LTread_dataset_short( hid_t loc_id,
+                               const char *dset_name,
+                               short *buffer );
+
+herr_t H5LTread_dataset_int( hid_t loc_id,
+                             const char *dset_name,
+                             int *buffer );
+
+herr_t H5LTread_dataset_long( hid_t loc_id,
+                              const char *dset_name,
+                              long *buffer );
+
+herr_t H5LTread_dataset_float( hid_t loc_id,
+                               const char *dset_name,
+                               float *buffer );
+
+herr_t H5LTread_dataset_double( hid_t loc_id,
+                                const char *dset_name,
+                                double *buffer );
+
+herr_t H5LTread_dataset_string( hid_t loc_id,
+                                const char *dset_name,
+                                char *buf );
+
+/*-------------------------------------------------------------------------
+ *
+ * Query dataset functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LTget_dataset_ndims( hid_t loc_id,
+                             const char *dset_name,
+                             int *rank );
+
+herr_t H5LTget_dataset_info( hid_t loc_id,
+                             const char *dset_name,
+                             hsize_t *dims,
+                             H5T_class_t *type_class,
+                             size_t *type_size );
+
+herr_t H5LTfind_dataset( hid_t loc_id, const char *name );
+
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Set attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LTset_attribute_string( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 const char *attr_data );
+
+herr_t H5LTset_attribute_char( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const char *buffer,
+                               size_t size );
+
+herr_t H5LTset_attribute_uchar( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const unsigned char *buffer,
+                               size_t size );
+
+herr_t H5LTset_attribute_short( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              const short *buffer,
+                              size_t size );
+
+herr_t H5LTset_attribute_ushort( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              const unsigned short *buffer,
+                              size_t size );
+
+herr_t H5LTset_attribute_int( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              const int *buffer,
+                              size_t size );
+
+herr_t H5LTset_attribute_uint( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              const unsigned int *buffer,
+                              size_t size );
+
+herr_t H5LTset_attribute_long( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const long *buffer,
+                               size_t size );
+
+herr_t H5LTset_attribute_ulong( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               const unsigned long *buffer,
+                               size_t size );
+
+herr_t H5LTset_attribute_float( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                const float *buffer,
+                                size_t size );
+
+herr_t H5LTset_attribute_double( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 const double *buffer,
+                                 size_t size );
+
+/*-------------------------------------------------------------------------
+ *
+ * Get attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5LTget_attribute( hid_t loc_id,
+                          const char *obj_name,
+                          const char *attr_name,
+                          hid_t mem_type_id,
+                          void *data );
+
+herr_t H5LTget_attribute_string( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 char *data );
+
+herr_t H5LTget_attribute_char( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               char *data );
+
+herr_t H5LTget_attribute_uchar( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               unsigned char *data );
+
+herr_t H5LTget_attribute_short( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                short *data );
+
+herr_t H5LTget_attribute_ushort( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                unsigned short *data );
+
+herr_t H5LTget_attribute_int( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              int *data );
+
+herr_t H5LTget_attribute_uint( hid_t loc_id,
+                              const char *obj_name,
+                              const char *attr_name,
+                              unsigned int *data );
+
+herr_t H5LTget_attribute_long( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               long *data );
+
+herr_t H5LTget_attribute_ulong( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               unsigned long *data );
+
+herr_t H5LTget_attribute_float( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                float *data );
+
+herr_t H5LTget_attribute_double( hid_t loc_id,
+                                 const char *obj_name,
+                                 const char *attr_name,
+                                 double *data );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Query attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LTget_attribute_ndims( hid_t loc_id,
+                                const char *obj_name,
+                                const char *attr_name,
+                                int *rank );
+
+herr_t H5LTget_attribute_info( hid_t loc_id,
+                               const char *obj_name,
+                               const char *attr_name,
+                               hsize_t *dims,
+                               H5T_class_t *type_class,
+                               size_t *type_size );
+
+
+
+
+
+/*-------------------------------------------------------------------------
+ *
+ * General functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+hid_t H5LTcreate_compound_type( hsize_t nfields, size_t size, const char *field_names[],
+                                const size_t *field_offset, const hid_t *field_types );
+
+
+herr_t H5LTrepack( hsize_t nfields,
+                   hsize_t nrecords,
+                   size_t src_size,
+                   const size_t *src_offset,
+                   const size_t *src_sizes,
+                   size_t dst_size,
+                   const size_t *dst_offset,
+                   const size_t *dst_sizes,
+                   unsigned char *src_buf,
+                   unsigned char *dst_buf );
+
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Private functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5LT_get_attribute_mem( hid_t obj_id,
+                           const char *attr_name,
+                           hid_t mem_type_id,
+                           void *data );
+
+herr_t H5LT_get_attribute_disk( hid_t obj_id,
+                           const char *attr_name,
+                           void *data );
+
+herr_t H5LT_find_attribute( hid_t loc_id, const char *name );
+
+
+herr_t H5LT_set_attribute_numerical( hid_t loc_id,
+                                     const char *obj_name,
+                                     const char *attr_name,
+                                     size_t size,
+                                     hid_t type_id,
+                                     const void *data );
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Added: packages/hdf5/branches/upstream/current/hl/src/H5TA.c
===================================================================
--- packages/hdf5/branches/upstream/current/hl/src/H5TA.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/hl/src/H5TA.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3684 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "H5TA.h"
+#include <stdlib.h>
+#include <string.h>
+
+#if 0
+#define SHRINK
+#endif
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Private functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int H5TB_find_field(const char *field,
+                    const char *field_list);
+
+herr_t H5TB_attach_attributes(const char *table_title,
+                              hid_t loc_id,
+                              const char *dset_name,
+                              hsize_t nfields,
+                              hid_t tid );
+
+hid_t H5TB_create_type(hid_t loc_id,
+                       const char *dset_name,
+                       size_t dst_size,
+                       const size_t *dst_offset,
+                       const size_t *dst_sizes,
+                       hid_t ftype_id);
+
+/*-------------------------------------------------------------------------
+ *
+ * Create functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBmake_table
+ *
+ * Purpose: Make a table
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *             Quincey Koziol
+ *
+ * Date: January 17, 2001
+ *
+ * Comments: The data is packed
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5TBmake_table( const char *table_title,
+                       hid_t loc_id,
+                       const char *dset_name,
+                       hsize_t nfields,
+                       hsize_t nrecords,
+                       size_t type_size,
+                       const char *field_names[],
+                       const size_t *field_offset,
+                       const hid_t *field_types,
+                       hsize_t chunk_size,
+                       void *fill_data,
+                       int compress,
+                       const void *data )
+{
+
+ hid_t   did;
+ hid_t   sid;
+ hid_t   mem_type_id;
+ hid_t   plist_id;
+ hsize_t dims[1];
+ hsize_t dims_chunk[1];
+ hsize_t maxdims[1] = { H5S_UNLIMITED };
+ char    attr_name[255];
+ char    *member_name;
+ hid_t   attr_id;
+ char    aux[255];
+ hsize_t i;
+ unsigned char *tmp_buf;
+
+ dims[0]       = nrecords;
+ dims_chunk[0] = chunk_size;
+
+ /* Create the memory data type. */
+ if ((mem_type_id = H5Tcreate (H5T_COMPOUND, type_size )) < 0 )
+  return -1;
+
+ /* Insert fields. */
+ for ( i = 0; i < nfields; i++)
+ {
+  if ( H5Tinsert(mem_type_id, field_names[i], field_offset[i], field_types[i] ) < 0 )
+   return -1;
+ }
+
+ /* Create a simple data space with unlimited size */
+ if ( (sid = H5Screate_simple( 1, dims, maxdims )) < 0 )
+  return -1;
+
+ /* Modify dataset creation properties, i.e. enable chunking  */
+ plist_id = H5Pcreate (H5P_DATASET_CREATE);
+ if ( H5Pset_chunk ( plist_id, 1, dims_chunk ) < 0 )
+  return -1;
+
+ /* Set the fill value using a struct as the data type. */
+ if ( fill_data )
+ {
+  if ( H5Pset_fill_value( plist_id, mem_type_id, fill_data ) < 0 )
+   return -1;
+ }
+
+ /*
+  Dataset creation property list is modified to use
+  GZIP compression with the compression effort set to 6.
+  Note that compression can be used only when dataset is chunked.
+  */
+ if ( compress )
+ {
+  if ( H5Pset_deflate( plist_id, 6) < 0 )
+   return -1;
+ }
+
+ /* Create the dataset. */
+ if ( (did = H5Dcreate( loc_id, dset_name, mem_type_id, sid, plist_id )) < 0 )
+  goto out;
+
+ /* Only write if there is something to write */
+ if ( data )
+ {
+  /* Write data to the dataset. */
+  if ( H5Dwrite( did, mem_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, data ) < 0 )
+   goto out;
+ }
+
+ /* Terminate access to the data space. */
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+
+ /* End access to the dataset */
+ if ( H5Dclose( did ) < 0 )
+  goto out;
+
+ /* End access to the property list */
+ if ( H5Pclose( plist_id ) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Set the conforming table attributes
+ *-------------------------------------------------------------------------
+ */
+
+ /* Attach the CLASS attribute */
+ if ( H5LTset_attribute_string( loc_id, dset_name, "CLASS", "TABLE" ) < 0 )
+  goto out;
+
+ /* Attach the VERSION attribute */
+ if ( H5LTset_attribute_string( loc_id, dset_name, "VERSION", "2.0" ) < 0 )
+  goto out;
+
+ /* Attach the TITLE attribute */
+ if ( H5LTset_attribute_string( loc_id, dset_name, "TITLE", table_title ) < 0 )
+  goto out;
+
+ /* Attach the FIELD_ name attribute */
+ for ( i = 0; i < nfields; i++)
+ {
+
+  /* Get the member name */
+  member_name = H5Tget_member_name( mem_type_id,(unsigned) i );
+
+  strcpy( attr_name, "FIELD_" );
+  sprintf( aux, "%d", (int)i );
+  strcat( attr_name, aux );
+  sprintf( aux, "%s", "_NAME" );
+  strcat( attr_name, aux );
+
+  /* Attach the attribute */
+  if ( H5LTset_attribute_string( loc_id, dset_name, attr_name, member_name ) < 0 )
+   goto out;
+
+  free( member_name );
+
+ }
+
+ /* Attach the FIELD_ fill value attribute */
+ if ( fill_data )
+ {
+
+  tmp_buf = fill_data;
+
+  /* Open the dataset. */
+  if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+   return -1;
+
+  if (( sid = H5Screate(H5S_SCALAR)) < 0 )
+   goto out;
+
+  for ( i = 0; i < nfields; i++)
+  {
+
+   /* Get the member name */
+   member_name = H5Tget_member_name( mem_type_id, (unsigned) i );
+
+   strcpy( attr_name, "FIELD_" );
+   sprintf( aux, "%d", (int)i );
+   strcat( attr_name, aux );
+   sprintf( aux, "%s", "_FILL" );
+   strcat( attr_name, aux );
+
+   if ( (attr_id = H5Acreate( did, attr_name, field_types[i], sid, H5P_DEFAULT )) < 0 )
+    goto out;
+
+   if ( H5Awrite( attr_id, field_types[i], tmp_buf+field_offset[i] ) < 0 )
+    goto out;
+
+   if ( H5Aclose( attr_id ) < 0 )
+    goto out;
+
+   free( member_name );
+  }
+
+   /* Close the dataset. */
+   H5Dclose( did );
+
+   /* Close data space. */
+   H5Sclose( sid );
+ }
+
+ /* Release the datatype. */
+ if ( H5Tclose( mem_type_id ) < 0 )
+  return -1;
+
+
+return 0;
+
+/* error zone, gracefully close */
+out:
+ H5E_BEGIN_TRY {
+  H5Dclose(did);
+  H5Sclose(sid);
+  H5Pclose(plist_id);
+  H5Tclose(mem_type_id);
+ } H5E_END_TRY;
+ return -1;
+
+}
+
+/*-------------------------------------------------------------------------
+ *
+ * Write functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBappend_records
+ *
+ * Purpose: Appends records to a table
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmers:
+ *  Pedro Vicente, pvn at ncsa.uiuc.edu
+ *  Quincey Koziol
+ *
+ * Date: November 19, 2001
+ *
+ * Comments: Uses memory offsets
+ *
+ * Modifications: April 1, 2004
+ *  the DST_SIZES parameter is used to define the memory type ID
+ *  returned by H5TB_create_type
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5TBappend_records( hid_t loc_id,
+                           const char *dset_name,
+                           hsize_t nrecords,
+                           size_t dst_size,
+                           const size_t *dst_offset,
+                           const size_t *dst_sizes,
+                           const void *data )
+{
+ hid_t    did;
+ hid_t    tid=-1;
+ hid_t    mem_type_id=-1;
+ hsize_t  count[1];
+ hsize_t offset[1];
+ hid_t    sid=-1;
+ hid_t    mem_space_id=-1;
+ hsize_t  dims[1];
+ hsize_t  mem_dims[1];
+ hsize_t  nrecords_orig;
+ hsize_t  nfields;
+
+ /* Get the original number of records and fields  */
+ if ( H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords_orig ) < 0 )
+  return -1;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  goto out;
+
+  /* Get the datatypes */
+ if ( (tid = H5Dget_type( did )) < 0 )
+  goto out;
+
+ if ((mem_type_id=H5TB_create_type(loc_id,dset_name,dst_size,dst_offset,dst_sizes,tid))<0)
+  goto out;
+
+ /* Extend the dataset */
+ dims[0] = nrecords_orig;
+ dims[0] += nrecords;
+
+ if ( H5Dextend ( did, dims ) < 0 )
+  goto out;
+
+ /* Create a simple memory data space */
+ mem_dims[0]=nrecords;
+ if ( (mem_space_id = H5Screate_simple( 1, mem_dims, NULL )) < 0 )
+  return -1;
+
+ /* Get the file data space */
+ if ( (sid = H5Dget_space( did )) < 0 )
+  return -1;
+
+ /* Get the dimensions */
+ if ( H5Sget_simple_extent_dims( sid, dims, NULL ) != 1 )
+  goto out;
+
+ /* Define a hyperslab in the dataset */
+ offset[0] = nrecords_orig;
+ count[0]  = nrecords;
+ if ( H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+  goto out;
+
+ if ( H5Dwrite( did, mem_type_id, mem_space_id, sid, H5P_DEFAULT, data ) < 0 )
+  goto out;
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( mem_space_id ) < 0 )
+  goto out;
+
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( tid ) < 0 )
+  return -1;
+
+  /* Release the datatype. */
+ if ( H5Tclose( mem_type_id ) < 0 )
+  goto out;
+
+ /* End access to the dataset */
+ if ( H5Dclose( did ) < 0 )
+  goto out;
+
+
+return 0;
+
+/* error zone, gracefully close */
+out:
+ H5E_BEGIN_TRY {
+  H5Dclose(did);
+  H5Tclose(mem_type_id);
+  H5Tclose(tid);
+  H5Sclose(mem_space_id);
+  H5Sclose(sid);
+ } H5E_END_TRY;
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBwrite_records
+ *
+ * Purpose: Writes records
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 19, 2001
+ *
+ * Comments: Uses memory offsets
+ *
+ * Modifications: April 1, 2004
+ *  the DST_SIZES parameter is used to define the memory type ID
+ *  returned by H5TB_create_type
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5TBwrite_records( hid_t loc_id,
+                          const char *dset_name,
+                          hsize_t start,
+                          hsize_t nrecords,
+                          size_t dst_size,
+                          const size_t *dst_offset,
+                          const size_t *dst_sizes,
+                          const void *data )
+{
+
+ hid_t    did;
+ hid_t    tid;
+ hsize_t  count[1];
+ hsize_t offset[1];
+ hid_t    sid=-1;
+ hid_t    mem_space_id=-1;
+ hsize_t  mem_size[1];
+ hsize_t  dims[1];
+ hid_t    mem_type_id=-1;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+  /* Get the datatype */
+ if ( (tid = H5Dget_type( did )) < 0 )
+  goto out;
+
+ if ((mem_type_id=H5TB_create_type(loc_id,dset_name,dst_size,dst_offset,dst_sizes,tid))<0)
+  goto out;
+
+ /* Get the dataspace handle */
+ if ( (sid = H5Dget_space( did )) < 0 )
+  goto out;
+
+  /* Get records */
+ if ( H5Sget_simple_extent_dims( sid, dims, NULL) < 0 )
+  goto out;
+
+ if ( start + nrecords > dims[0] )
+  goto out;
+
+ /* Define a hyperslab in the dataset of the size of the records */
+ offset[0] = start;
+ count[0]  = nrecords;
+ if ( H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+  goto out;
+
+ /* Create a memory dataspace handle */
+ mem_size[0] = count[0];
+ if ( (mem_space_id = H5Screate_simple( 1, mem_size, NULL )) < 0 )
+  goto out;
+
+ if ( H5Dwrite( did, mem_type_id, mem_space_id, sid, H5P_DEFAULT, data ) < 0 )
+  goto out;
+
+ /* Terminate access to the memory dataspace */
+ if ( H5Sclose( mem_space_id ) < 0 )
+  goto out;
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( tid ) < 0 )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( mem_type_id ) < 0 )
+  return -1;
+
+ /* End access to the dataset */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+
+return 0;
+
+/* error zone, gracefully close */
+out:
+ H5E_BEGIN_TRY {
+  H5Dclose(did);
+  H5Tclose(mem_type_id);
+  H5Tclose(tid);
+  H5Sclose(mem_space_id);
+  H5Sclose(sid);
+ } H5E_END_TRY;
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBwrite_fields_name
+ *
+ * Purpose: Writes fields
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 21, 2001
+ *
+ * Comments:
+ *
+ * Modifications: April 1, 2004
+ *  the DST_SIZES parameter is used to define the memory type ID
+ *  returned by H5TB_create_type
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5TBwrite_fields_name( hid_t loc_id,
+                              const char *dset_name,
+                              const char *field_names,
+                              hsize_t start,
+                              hsize_t nrecords,
+                              size_t type_size,
+                              const size_t *field_offset,
+                              const size_t *dst_sizes,
+                              const void *data )
+{
+
+ hid_t    did;
+ hid_t    tid=-1;
+ hid_t    write_type_id=-1;
+ hid_t    member_type_id;
+ hid_t    nmtype_id;
+ hsize_t  count[1];
+ hsize_t offset[1];
+ hid_t    sid=-1;
+ char     *member_name;
+ hssize_t  nfields;
+ hssize_t  i, j;
+ hid_t    PRESERVE;
+ size_t   size_native;
+
+ /* Create xfer properties to preserve initialized data */
+ if ((PRESERVE = H5Pcreate (H5P_DATASET_XFER))<0)
+  return -1;
+ if (H5Pset_preserve (PRESERVE, 1)<0)
+  return -1;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  goto out;
+
+ /* Get the datatype */
+ if ( (tid = H5Dget_type( did )) < 0 )
+  goto out;
+
+ /* Get the number of fields */
+ if ( ( nfields = H5Tget_nmembers( tid )) < 0 )
+  goto out;
+
+ /* Create a write id */
+ if ( ( write_type_id = H5Tcreate( H5T_COMPOUND, type_size )) < 0 )
+  goto out;
+
+ j = 0;
+
+ /* Iterate tru the members */
+ for ( i = 0; i < nfields; i++)
+ {
+  /* Get the member name */
+  member_name = H5Tget_member_name( tid, (unsigned)i );
+
+  if ( H5TB_find_field( member_name, field_names ) > 0 )
+  {
+
+   /* Get the member type */
+   if ( ( member_type_id = H5Tget_member_type( tid,(unsigned) i )) < 0 )
+    goto out;
+
+   /* Convert to native type */
+   if ((nmtype_id=H5Tget_native_type(member_type_id,H5T_DIR_DEFAULT))<0)
+    goto out;
+
+   size_native=H5Tget_size(nmtype_id);
+
+   /* Adjust, if necessary */
+   if (dst_sizes[j]!=size_native)
+   {
+    if (H5Tset_size(nmtype_id, dst_sizes[j])<0)
+     goto out;
+   }
+
+   /* The field in the file is found by its name */
+   if ( field_offset )
+   {
+    if ( H5Tinsert( write_type_id, member_name, field_offset[j], nmtype_id ) < 0 )
+     goto out;
+   }
+   /* Only one field */
+   else
+   {
+    if ( H5Tinsert( write_type_id, member_name, 0, nmtype_id ) < 0 )
+     goto out;
+   }
+
+   j++;
+
+   /* Close */
+   if ( H5Tclose( member_type_id ) < 0 )
+    goto out;
+   if ( H5Tclose( nmtype_id ) < 0 )
+    goto out;
+  }
+
+  free( member_name );
+
+ }
+
+  /* Get the dataspace handle */
+ if ( (sid = H5Dget_space( did )) < 0 )
+  goto out;
+
+ /* Define a hyperslab in the dataset */
+ offset[0] = start;
+ count[0]  = nrecords;
+ if ( H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+  goto out;
+
+ /* Write */
+ if ( H5Dwrite( did, write_type_id, H5S_ALL, sid, PRESERVE, data ) < 0 )
+  goto out;
+
+ /* End access to the write id */
+ if ( H5Tclose( write_type_id ) )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( tid ) < 0 )
+  return -1;
+
+ /* End access to the dataset */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ /* End access to the property list */
+ if ( H5Pclose( PRESERVE ) < 0 )
+  return -1;
+
+return 0;
+
+ /* error zone, gracefully close */
+out:
+ H5E_BEGIN_TRY {
+  H5Pclose(PRESERVE);
+  H5Dclose(did);
+  H5Sclose(sid);
+  H5Tclose(write_type_id);
+  H5Tclose(tid);
+ } H5E_END_TRY;
+ return -1;
+
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBwrite_fields_index
+ *
+ * Purpose: Writes fields
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 21, 2001
+ *
+ * Comments: Uses memory offsets
+ *
+ * Modifications: April 1, 2004
+ *  the DST_SIZES parameter is used to define the memory type ID
+ *  returned by H5TB_create_type
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5TBwrite_fields_index( hid_t loc_id,
+                               const char *dset_name,
+                               hsize_t nfields,
+                               const int *field_index,
+                               hsize_t start,
+                               hsize_t nrecords,
+                               size_t type_size,
+                               const size_t *field_offset,
+                               const size_t *dst_sizes,
+                               const void *data )
+{
+
+ hid_t    did;
+ hid_t    tid=-1;
+ hid_t    write_type_id=-1;
+ hid_t    member_type_id;
+ hid_t    nmtype_id;
+ hsize_t  count[1];
+ hsize_t offset[1];
+ hid_t    sid=-1;
+ char     *member_name;
+ hsize_t  i, j;
+ hid_t    PRESERVE;
+ size_t   size_native;
+
+ /* Create xfer properties to preserve initialized data */
+ if ((PRESERVE = H5Pcreate (H5P_DATASET_XFER))<0)
+  return -1;
+ if (H5Pset_preserve (PRESERVE, 1)<0)
+  return -1;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  goto out;
+
+ /* Get the datatype */
+ if ( (tid = H5Dget_type( did )) < 0 )
+  goto out;
+
+ /* Get the number of fields */
+ if ( H5Tget_nmembers( tid ) < 0 )
+  goto out;
+
+ /* Create a write id */
+ if ( ( write_type_id = H5Tcreate( H5T_COMPOUND, type_size )) < 0 )
+  goto out;
+
+
+ /* Iterate tru the members */
+ for ( i = 0; i < nfields; i++)
+ {
+
+  j = field_index[i];
+
+  /* Get the member name */
+  member_name = H5Tget_member_name( tid, (unsigned) j );
+
+  /* Get the member type */
+  if ( ( member_type_id = H5Tget_member_type( tid, (unsigned) j )) < 0 )
+   goto out;
+
+   /* Convert to native type */
+  if ((nmtype_id=H5Tget_native_type(member_type_id,H5T_DIR_DEFAULT))<0)
+   goto out;
+
+  size_native=H5Tget_size(nmtype_id);
+
+  if (dst_sizes[i]!=size_native)
+  {
+   if (H5Tset_size(nmtype_id, dst_sizes[i])<0)
+    goto out;
+  }
+
+   /* The field in the file is found by its name */
+   if ( field_offset )
+   {
+    if ( H5Tinsert( write_type_id, member_name, field_offset[ i ], nmtype_id ) < 0 )
+     goto out;
+   }
+   /* Only one field */
+   else
+   {
+    if ( H5Tinsert( write_type_id, member_name, 0, nmtype_id ) < 0 )
+     goto out;
+   }
+  /* Close */
+  if ( H5Tclose( member_type_id ) < 0 )
+   goto out;
+  if ( H5Tclose( nmtype_id ) < 0 )
+   goto out;
+
+  free( member_name );
+
+ }
+
+  /* Get the dataspace handle */
+ if ( (sid = H5Dget_space( did )) < 0 )
+  goto out;
+
+ /* Define a hyperslab in the dataset */
+ offset[0] = start;
+ count[0]  = nrecords;
+ if ( H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+  goto out;
+
+ /* Write */
+ if ( H5Dwrite( did, write_type_id, H5S_ALL, sid, PRESERVE, data ) < 0 )
+  goto out;
+
+ /* End access to the write id */
+ if ( H5Tclose( write_type_id ) )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( tid ) < 0 )
+  return -1;
+
+ /* End access to the dataset */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ /* End access to the property list */
+ if ( H5Pclose( PRESERVE ) < 0 )
+  return -1;
+
+return 0;
+
+ /* error zone, gracefully close */
+out:
+ H5E_BEGIN_TRY {
+  H5Pclose(PRESERVE);
+  H5Dclose(did);
+  H5Sclose(sid);
+  H5Tclose(write_type_id);
+  H5Tclose(tid);
+ } H5E_END_TRY;
+ return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Read functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBread_table
+ *
+ * Purpose: Reads a table
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 20, 2001
+ *
+ * Comments:
+ *
+ * Modifications: April 1, 2004
+ *  used a memory type ID returned by H5TB_create_type
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5TBread_table( hid_t loc_id,
+                       const char *dset_name,
+                       size_t dst_size,
+                       const size_t *dst_offset,
+                       const size_t *dst_sizes,
+                       void *dst_buf )
+{
+ hid_t    did;
+ hid_t    ftype_id=-1;
+ hid_t    mem_type_id=-1;
+ hid_t    sid;
+ hsize_t  dims[1];
+
+ /* open the dataset. */
+ if ((did=H5Dopen(loc_id,dset_name))<0)
+  return -1;
+
+ /* get the dataspace handle */
+ if ( (sid = H5Dget_space( did )) < 0 )
+  goto out;
+
+ /* get dimensions */
+ if ( H5Sget_simple_extent_dims( sid, dims, NULL) < 0 )
+  goto out;
+
+ /* get the datatypes */
+ if ((ftype_id=H5Dget_type (did))<0)
+  goto out;
+
+ if ((mem_type_id=H5TB_create_type(loc_id,dset_name,dst_size,dst_offset,dst_sizes,ftype_id))<0)
+  goto out;
+
+ /* read */
+ if ( H5Dread( did, mem_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, dst_buf) < 0 )
+  goto out;
+
+ /* close */
+ if ( H5Tclose( ftype_id ) < 0 )
+  goto out;
+ if ( H5Tclose( mem_type_id ) < 0 )
+  goto out;
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ return 0;
+
+ /* error zone, gracefully close */
+out:
+ H5E_BEGIN_TRY {
+  H5Dclose(did);
+  H5Tclose(mem_type_id);
+  H5Tclose(ftype_id);
+  H5Sclose(sid);
+ } H5E_END_TRY;
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBread_records
+ *
+ * Purpose: Reads records
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 19, 2001
+ *
+ * Comments:
+ *
+ * Modifications: April 1, 2004
+ *  the DST_SIZES parameter is used to define the memory type ID
+ *  returned by H5TB_create_type
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5TBread_records( hid_t loc_id,
+                         const char *dset_name,
+                         hsize_t start,
+                         hsize_t nrecords,
+                         size_t dst_size,
+                         const size_t *dst_offset,
+                         const size_t *dst_sizes,
+                         void *data )
+{
+
+ hid_t    did;
+ hid_t    ftype_id;
+ hid_t    mem_type_id=-1;
+ hsize_t  count[1];
+ hsize_t offset[1];
+ hid_t    sid=-1;
+ hsize_t  dims[1];
+ hid_t    mem_space_id=-1;
+ hsize_t  mem_size[1];
+ hsize_t  nrecords_orig;
+ hsize_t  nfields;
+
+ /* get the number of records and fields  */
+ if ( H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords_orig ) < 0 )
+  return -1;
+
+ /* open the dataset */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* get the datatypes */
+ if ( (ftype_id = H5Dget_type( did )) < 0 )
+  goto out;
+
+ if ((mem_type_id=H5TB_create_type(loc_id,dset_name,dst_size,dst_offset,dst_sizes,ftype_id))<0)
+  goto out;
+
+ /* get the dataspace handle */
+ if ( (sid = H5Dget_space( did )) < 0 )
+  goto out;
+
+ /* get records */
+ if ( H5Sget_simple_extent_dims( sid, dims, NULL) < 0 )
+  goto out;
+
+ if ( start + nrecords > dims[0] )
+  goto out;
+
+ /* define a hyperslab in the dataset of the size of the records */
+ offset[0] = start;
+ count[0]  = nrecords;
+ if ( H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+  goto out;
+
+ /* create a memory dataspace handle */
+ mem_size[0] = count[0];
+ if ( (mem_space_id = H5Screate_simple( 1, mem_size, NULL )) < 0 )
+  goto out;
+
+ /* read */
+ if ( H5Dread( did, mem_type_id, mem_space_id, sid, H5P_DEFAULT, data ) < 0 )
+  goto out;
+
+ /* close */
+ if ( H5Sclose( mem_space_id ) < 0 )
+  goto out;
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+ if ( H5Tclose( ftype_id ) < 0 )
+  return -1;
+ if ( H5Tclose( mem_type_id ) < 0 )
+  return -1;
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ return 0;
+
+ /* error zone, gracefully close */
+out:
+ H5E_BEGIN_TRY {
+  H5Dclose(did);
+  H5Tclose(mem_type_id);
+  H5Tclose(ftype_id);
+  H5Sclose(mem_space_id);
+  H5Sclose(sid);
+ } H5E_END_TRY;
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBread_fields_name
+ *
+ * Purpose: Reads fields
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 19, 2001
+ *
+ * Comments:
+ *
+ * Modifications: April 1, 2004
+ *  the DST_SIZES parameter is used to define the memory type ID
+ *  returned by H5TB_create_type
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5TBread_fields_name( hid_t loc_id,
+                             const char *dset_name,
+                             const char *field_names,
+                             hsize_t start,
+                             hsize_t nrecords,
+                             size_t type_size,
+                             const size_t *field_offset,
+                             const size_t *dst_sizes,
+                             void *data )
+{
+
+ hid_t    did;
+ hid_t    ftype_id=-1;
+ hid_t    mem_type_id=-1;
+ hid_t    mtype_id;
+ hid_t    nmtype_id;
+ char     *member_name;
+ hssize_t nfields;
+ hsize_t  count[1];
+ hsize_t offset[1];
+ hid_t    sid=-1;
+ hid_t    mem_space_id=-1;
+ hsize_t  mem_size[1];
+ size_t   size_native;
+ hssize_t i, j;
+
+ /* open the dataset */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  goto out;
+
+ /* get the datatype */
+ if ( (ftype_id = H5Dget_type( did )) < 0 )
+  goto out;
+
+ /* get the number of fields */
+ if ( ( nfields = H5Tget_nmembers( ftype_id )) < 0 )
+  goto out;
+
+ /* create a memory read id */
+ if ( ( mem_type_id = H5Tcreate( H5T_COMPOUND, type_size )) < 0 )
+  goto out;
+
+ /* iterate tru the members */
+ for ( i=0,j=0; i<nfields; i++)
+ {
+  /* get the member name */
+  member_name = H5Tget_member_name( ftype_id, (unsigned)i );
+
+  if ( H5TB_find_field( member_name, field_names ) > 0 )
+  {
+   /* get the member type */
+   if ( ( mtype_id = H5Tget_member_type( ftype_id, (unsigned) i )) < 0 )
+    goto out;
+
+   /* convert to native type */
+   if ((nmtype_id=H5Tget_native_type(mtype_id,H5T_DIR_DEFAULT))<0)
+    goto out;
+
+   size_native=H5Tget_size(nmtype_id);
+
+   if (dst_sizes[j]!=size_native)
+   {
+    if (H5Tset_size(nmtype_id, dst_sizes[j])<0)
+     goto out;
+   }
+   /* the field in the file is found by its name */
+   if ( field_offset )
+   {
+    if ( H5Tinsert( mem_type_id, member_name, field_offset[j], nmtype_id ) < 0 )
+     goto out;
+   }
+    else
+   {
+    if ( H5Tinsert( mem_type_id, member_name, 0, nmtype_id ) < 0 )
+     goto out;
+   }
+
+   /* close */
+   if ( H5Tclose( mtype_id ) < 0 )
+    goto out;
+   if ( H5Tclose( nmtype_id ) < 0 )
+    goto out;
+   j++;
+  }
+  free( member_name );
+ }
+
+ /* get the dataspace handle */
+ if ( (sid = H5Dget_space( did )) < 0 )
+  goto out;
+
+ /* define a hyperslab in the dataset */
+ offset[0] = start;
+ count[0]  = nrecords;
+ if ( H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+  goto out;
+
+ /* create a memory dataspace handle */
+ mem_size[0] = count[0];
+ if ( (mem_space_id = H5Screate_simple( 1, mem_size, NULL )) < 0 )
+  goto out;
+
+ /* read */
+ if ( H5Dread( did, mem_type_id, mem_space_id, sid, H5P_DEFAULT, data ) < 0 )
+  goto out;
+
+ /* close */
+ if ( H5Tclose( mem_type_id ) )
+  goto out;
+ if ( H5Tclose( ftype_id ) < 0 )
+  return -1;
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+ if ( H5Sclose( mem_space_id ) < 0 )
+  goto out;
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ return 0;
+
+/* error zone, gracefully close */
+out:
+ H5E_BEGIN_TRY {
+  H5Dclose(did);
+  H5Tclose(mem_type_id);
+  H5Tclose(ftype_id);
+  H5Sclose(mem_space_id);
+  H5Sclose(sid);
+ } H5E_END_TRY;
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBread_fields_index
+ *
+ * Purpose: Reads fields
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 19, 2001
+ *
+ * Comments:
+ *
+ * Modifications: April 1, 2004
+ *  the DST_SIZES parameter is used to define the memory type ID
+ *  returned by H5TB_create_type
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5TBread_fields_index( hid_t loc_id,
+                              const char *dset_name,
+                              hsize_t nfields,
+                              const int *field_index,
+                              hsize_t start,
+                              hsize_t nrecords,
+                              size_t type_size,
+                              const size_t *field_offset,
+                              const size_t *dst_sizes,
+                              void *data )
+{
+
+ hid_t    did;
+ hid_t    tid=-1;
+ hid_t    read_type_id=-1;
+ hid_t    member_type_id;
+ hid_t    nmtype_id;
+ char     *member_name;
+ hsize_t  count[1];
+ hsize_t offset[1];
+ hid_t    sid=-1;
+ hid_t    mem_space_id=-1;
+ hsize_t  mem_size[1];
+ size_t   size_native;
+ hsize_t  i, j;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  goto out;
+
+ /* Get the datatype */
+ if ( (tid = H5Dget_type( did )) < 0 )
+  goto out;
+
+ /* Create a read id */
+ if ( ( read_type_id = H5Tcreate( H5T_COMPOUND, type_size )) < 0 )
+  goto out;
+
+ /* Iterate tru the members */
+ for ( i = 0; i < nfields; i++)
+ {
+  j = field_index[i];
+
+  /* Get the member name */
+  member_name = H5Tget_member_name( tid, (unsigned) j );
+
+  /* Get the member type */
+  if ( ( member_type_id = H5Tget_member_type( tid, (unsigned) j )) < 0 )
+   goto out;
+
+  /* Get the member size */
+  if ( H5Tget_size( member_type_id ) == 0 )
+   goto out;
+
+  /* Convert to native type */
+  if ((nmtype_id=H5Tget_native_type(member_type_id,H5T_DIR_DEFAULT))<0)
+   goto out;
+
+  size_native=H5Tget_size(nmtype_id);
+
+  if (dst_sizes[i]!=size_native)
+  {
+   if (H5Tset_size(nmtype_id, dst_sizes[i])<0)
+    goto out;
+  }
+
+  /* The field in the file is found by its name */
+  if ( field_offset )
+  {
+   if ( H5Tinsert( read_type_id, member_name, field_offset[i], nmtype_id ) < 0 )
+    goto out;
+  }
+  else
+  {
+   if ( H5Tinsert( read_type_id, member_name, 0, nmtype_id ) < 0 )
+    goto out;
+  }
+
+  /* Close the member type */
+  if ( H5Tclose( member_type_id ) < 0 )
+   goto out;
+  if ( H5Tclose( nmtype_id ) < 0 )
+   goto out;
+
+  free( member_name );
+ }
+
+  /* Get the dataspace handle */
+ if ( (sid = H5Dget_space( did )) < 0 )
+  goto out;
+
+ /* Define a hyperslab in the dataset */
+ offset[0] = start;
+ count[0]  = nrecords;
+ if ( H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+  goto out;
+
+ /* Create a memory dataspace handle */
+ mem_size[0] = count[0];
+ if ( (mem_space_id = H5Screate_simple( 1, mem_size, NULL )) < 0 )
+  goto out;
+
+ /* Read */
+ if ( H5Dread( did, read_type_id, mem_space_id, sid, H5P_DEFAULT, data ) < 0 )
+  goto out;
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+
+ /* Terminate access to the memory dataspace */
+  if ( H5Sclose( mem_space_id ) < 0 )
+   goto out;
+
+ /* End access to the read id */
+ if ( H5Tclose( read_type_id ) )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( tid ) < 0 )
+  return -1;
+
+ /* End access to the dataset */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+return 0;
+
+/* error zone, gracefully close */
+out:
+ H5E_BEGIN_TRY {
+  H5Dclose(did);
+  H5Tclose(read_type_id);
+  H5Tclose(tid);
+  H5Sclose(mem_space_id);
+  H5Sclose(sid);
+ } H5E_END_TRY;
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Manipulation functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBdelete_record
+ *
+ * Purpose: Delete records from middle of table ("pulling up" all the records after it)
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 26, 2001
+ *
+ * Modifications: April 29, 2003
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5TBdelete_record( hid_t loc_id,
+                          const char *dset_name,
+                          hsize_t start,
+                          hsize_t nrecords )
+{
+
+ hsize_t  nfields;
+ hsize_t  ntotal_records;
+ hsize_t  read_start;
+ hsize_t  read_nrecords;
+ hid_t    did;
+ hid_t    tid;
+ hsize_t  count[1];
+ hsize_t offset[1];
+ hid_t    sid;
+ hid_t    mem_space_id;
+ hsize_t  mem_size[1];
+ unsigned char *tmp_buf;
+ size_t   src_size;
+ size_t   *src_offset;
+ size_t   *src_sizes;
+ hsize_t  nrows;
+#if defined (SHRINK)
+ hsize_t  dims[1];
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * First we get information about type size and offsets on disk
+ *-------------------------------------------------------------------------
+ */
+
+ /* Get the number of records and fields  */
+ if ( H5TBget_table_info ( loc_id, dset_name, &nfields, &ntotal_records ) < 0 )
+  return -1;
+
+ src_offset = (size_t *)malloc((size_t)nfields * sizeof(size_t));
+ src_sizes = (size_t *)malloc((size_t)nfields * sizeof(size_t));
+
+ if ( src_offset == NULL )
+  return -1;
+
+ /* Get field info */
+ if ( H5TBget_field_info( loc_id, dset_name, NULL, src_sizes, src_offset, &src_size ) < 0 )
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * Read the records after the deleted one(s)
+ *-------------------------------------------------------------------------
+ */
+
+ read_start = start + nrecords;
+ read_nrecords = ntotal_records - read_start;
+ tmp_buf = (unsigned char *)calloc((size_t) read_nrecords, src_size );
+
+ if ( tmp_buf == NULL )
+  return -1;
+
+ /* Read the records after the deleted one(s) */
+ if ( H5TBread_records( loc_id, dset_name, read_start, read_nrecords, src_size,
+      src_offset, src_sizes, tmp_buf ) < 0 )
+  return -1;
+
+
+/*-------------------------------------------------------------------------
+ * Write the records in another position
+ *-------------------------------------------------------------------------
+ */
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Get the datatype */
+ if ( (tid = H5Dget_type( did )) < 0 )
+  goto out;
+
+ /* Get the dataspace handle */
+ if ( (sid = H5Dget_space( did )) < 0 )
+  goto out;
+
+ /* Define a hyperslab in the dataset of the size of the records */
+ offset[0] = start;
+ count[0]  = read_nrecords;
+ if ( H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+  goto out;
+
+ /* Create a memory dataspace handle */
+ mem_size[0] = count[0];
+ if ( (mem_space_id = H5Screate_simple( 1, mem_size, NULL )) < 0 )
+  goto out;
+
+ if ( H5Dwrite( did, tid, mem_space_id, sid, H5P_DEFAULT, tmp_buf ) < 0 )
+  goto out;
+
+ /* Terminate access to the memory dataspace */
+ if ( H5Sclose( mem_space_id ) < 0 )
+  goto out;
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( tid ) < 0 )
+  goto out;
+
+
+/*-------------------------------------------------------------------------
+ * Change the table dimension
+ *-------------------------------------------------------------------------
+ */
+#if defined (SHRINK)
+ dims[0] = ntotal_records - nrecords;
+ if ( H5Dset_extent( did, dims ) < 0 )
+  goto out;
+#endif
+
+ /* End access to the dataset */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ free( tmp_buf );
+ free( src_offset );
+ free( src_sizes );
+
+
+/*-------------------------------------------------------------------------
+ * Store the new dimension as an attribute
+ *-------------------------------------------------------------------------
+ */
+
+ nrows = ntotal_records - nrecords;
+ /* Set the attribute */
+ if (H5LT_set_attribute_numerical(loc_id,dset_name,"NROWS",1,
+      H5T_NATIVE_LLONG,&nrows)<0)
+  return -1;
+
+
+ return 0;
+
+out:
+ H5Dclose( did );
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBinsert_record
+ *
+ * Purpose: Inserts records into middle of table ("pushing down" all the records after it)
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 26, 2001
+ *
+ * Comments: Uses memory offsets
+ *
+ * Modifications: April 1, 2004
+ *  the DST_SIZES parameter is used to define the memory type ID
+ *  returned by H5TB_create_type
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5TBinsert_record( hid_t loc_id,
+                          const char *dset_name,
+                          hsize_t start,
+                          hsize_t nrecords,
+                          size_t dst_size,
+                          const size_t *dst_offset,
+                          const size_t *dst_sizes,
+                          void *data )
+{
+
+ hsize_t  nfields;
+ hsize_t  ntotal_records;
+ hsize_t  read_nrecords;
+ hid_t    did;
+ hid_t    tid=-1;
+ hid_t    mem_type_id=-1;
+ hsize_t  count[1];
+ hsize_t offset[1];
+ hid_t    sid=-1;
+ hid_t    mem_space_id=-1;
+ hsize_t  dims[1];
+ hsize_t  mem_dims[1];
+ unsigned char *tmp_buf;
+
+/*-------------------------------------------------------------------------
+ * Read the records after the inserted one(s)
+ *-------------------------------------------------------------------------
+ */
+
+ /* Get the dimensions  */
+ if ( H5TBget_table_info ( loc_id, dset_name, &nfields, &ntotal_records ) < 0 )
+  return -1;
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  goto out;
+
+  /* Get the datatype */
+ if ( (tid = H5Dget_type( did )) < 0 )
+  goto out;
+
+ /* Create the memory data type. */
+ if ((mem_type_id=H5TB_create_type(loc_id,dset_name,dst_size,dst_offset,dst_sizes,tid))<0)
+  goto out;
+
+ read_nrecords = ntotal_records - start;
+ tmp_buf = (unsigned char *)calloc((size_t) read_nrecords, dst_size );
+
+ /* Read the records after the inserted one(s) */
+ if ( H5TBread_records( loc_id, dset_name, start, read_nrecords, dst_size, dst_offset,
+  dst_sizes, tmp_buf ) < 0 )
+  return -1;
+
+ /* Extend the dataset */
+ dims[0] = ntotal_records + nrecords;
+
+ if ( H5Dextend ( did, dims ) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Write the inserted records
+ *-------------------------------------------------------------------------
+ */
+
+ /* Create a simple memory data space */
+ mem_dims[0]=nrecords;
+ if ( (mem_space_id = H5Screate_simple( 1, mem_dims, NULL )) < 0 )
+  return -1;
+
+ /* Get the file data space */
+ if ( (sid = H5Dget_space( did )) < 0 )
+  return -1;
+
+ /* Define a hyperslab in the dataset to write the new data */
+ offset[0] = start;
+ count[0]  = nrecords;
+ if ( H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+  goto out;
+
+ if ( H5Dwrite( did, mem_type_id, mem_space_id, sid, H5P_DEFAULT, data ) < 0 )
+  goto out;
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( mem_space_id ) < 0 )
+  goto out;
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Write the "pushed down" records
+ *-------------------------------------------------------------------------
+ */
+
+ /* Create a simple memory data space */
+ mem_dims[0]=read_nrecords;
+ if ( (mem_space_id = H5Screate_simple( 1, mem_dims, NULL )) < 0 )
+  return -1;
+
+ /* Get the file data space */
+ if ( (sid = H5Dget_space( did )) < 0 )
+  return -1;
+
+ /* Define a hyperslab in the dataset to write the new data */
+ offset[0] = start + nrecords;
+ count[0]  = read_nrecords;
+ if ( H5Sselect_hyperslab( sid, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+  goto out;
+
+ if ( H5Dwrite( did, mem_type_id, mem_space_id, sid, H5P_DEFAULT, tmp_buf ) < 0 )
+  goto out;
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( mem_space_id ) < 0 )
+  goto out;
+
+ if ( H5Sclose( sid ) < 0 )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( tid ) < 0 )
+  return -1;
+
+ /* Release the datatype. */
+ if ( H5Tclose( mem_type_id ) < 0 )
+  return -1;
+
+ /* End access to the dataset */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+ free( tmp_buf );
+
+ return 0;
+
+ /* error zone, gracefully close */
+out:
+ H5E_BEGIN_TRY {
+  H5Dclose(did);
+  H5Sclose(sid);
+  H5Sclose(mem_space_id);
+  H5Tclose(mem_type_id);
+  H5Tclose(tid);
+ } H5E_END_TRY;
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBadd_records_from
+ *
+ * Purpose: Add records from first table to second table
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: December 5, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5TBadd_records_from( hid_t loc_id,
+                             const char *dset_name1,
+                             hsize_t start1,
+                             hsize_t nrecords,
+                             const char *dset_name2,
+                             hsize_t start2 )
+{
+
+ /* Identifiers for the 1st dataset. */
+ hid_t    dataset_id1;
+ hid_t    type_id1;
+ hid_t    space_id1=-1;
+ hid_t    mem_space_id1=-1;
+ size_t   type_size1;
+
+ hsize_t  count[1];
+ hsize_t offset[1];
+ hsize_t  mem_size[1];
+ hsize_t  nfields;
+ hsize_t  ntotal_records;
+ unsigned char *tmp_buf;
+ size_t   src_size;
+ size_t   *src_offset;
+ size_t   *src_sizes;
+
+/*-------------------------------------------------------------------------
+ * First we get information about type size and offsets on disk
+ *-------------------------------------------------------------------------
+ */
+
+ /* Get the number of records and fields  */
+ if ( H5TBget_table_info ( loc_id, dset_name1, &nfields, &ntotal_records ) < 0 )
+  return -1;
+
+ src_offset = (size_t *)malloc((size_t)nfields * sizeof(size_t));
+ src_sizes  = (size_t *)malloc((size_t)nfields * sizeof(size_t));
+
+ if ( src_offset == NULL )
+  return -1;
+
+ /* Get field info */
+ if ( H5TBget_field_info( loc_id, dset_name1, NULL, src_sizes, src_offset, &src_size ) < 0 )
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * Get information about the first table and read it
+ *-------------------------------------------------------------------------
+ */
+
+ /* Open the 1st dataset. */
+ if ( (dataset_id1 = H5Dopen( loc_id, dset_name1 )) < 0 )
+  return -1;
+
+ /* Get the datatype */
+ if ( (type_id1 = H5Dget_type( dataset_id1 )) < 0 )
+  goto out;
+
+ /* Get the dataspace handle */
+ if ( (space_id1 = H5Dget_space( dataset_id1 )) < 0 )
+  goto out;
+
+ /* Get the size of the datatype */
+ if ( ( type_size1 = H5Tget_size( type_id1 )) == 0 )
+  goto out;
+
+ tmp_buf = (unsigned char *)calloc((size_t)nrecords, type_size1 );
+
+ /* Define a hyperslab in the dataset of the size of the records */
+ offset[0] = start1;
+ count[0]  = nrecords;
+ if ( H5Sselect_hyperslab( space_id1, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+  goto out;
+
+ /* Create a memory dataspace handle */
+ mem_size[0] = count[0];
+ if ( (mem_space_id1 = H5Screate_simple( 1, mem_size, NULL )) < 0 )
+  goto out;
+
+ if ( H5Dread( dataset_id1, type_id1, mem_space_id1, space_id1, H5P_DEFAULT, tmp_buf ) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Add to the second table
+ *-------------------------------------------------------------------------
+ */
+ if ( H5TBinsert_record(loc_id,dset_name2,start2,nrecords,src_size,src_offset,src_sizes,tmp_buf ) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Close resources for table 1
+ *-------------------------------------------------------------------------
+ */
+
+ /* Terminate access to the memory dataspace */
+ if ( H5Sclose( mem_space_id1 ) < 0 )
+  goto out;
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( space_id1 ) < 0 )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( type_id1 ) < 0 )
+  return -1;
+
+ /* End access to the dataset */
+ if ( H5Dclose( dataset_id1 ) < 0 )
+  return -1;
+
+ free( tmp_buf );
+ free( src_offset );
+ free( src_sizes );
+
+return 0;
+
+ /* error zone, gracefully close */
+out:
+ H5E_BEGIN_TRY {
+  H5Dclose(dataset_id1);
+  H5Sclose(space_id1);
+  H5Sclose(mem_space_id1);
+  H5Tclose(type_id1);
+ } H5E_END_TRY;
+ return -1;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBcombine_tables
+ *
+ * Purpose: Combine records from two tables into a third
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: December 10, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5TBcombine_tables( hid_t loc_id1,
+                           const char *dset_name1,
+                           hid_t loc_id2,
+                           const char *dset_name2,
+                           const char *dset_name3 )
+{
+
+ /* Identifiers for the 1st dataset. */
+ hid_t    dataset_id1;
+ hid_t    type_id1;
+ hid_t    space_id1;
+ hid_t    plist_id1;
+
+ /* Identifiers for the 2nd dataset. */
+ hid_t    dataset_id2;
+ hid_t    type_id2;
+ hid_t    space_id2;
+ hid_t    plist_id2;
+
+ /* Identifiers for the 3rd dataset. */
+ hid_t    dataset_id3;
+ hid_t    type_id3;
+ hid_t    space_id3;
+ hid_t    plist_id3;
+
+ hsize_t  count[1];
+ hsize_t offset[1];
+ hid_t    mem_space_id;
+ hsize_t  mem_size[1];
+ hsize_t  nfields;
+ hsize_t  nrecords;
+ hsize_t  dims[1];
+ hsize_t  maxdims[1] = { H5S_UNLIMITED };
+
+
+ size_t   type_size;
+ hid_t    sid;
+ hid_t    member_type_id;
+ size_t   member_offset;
+ char     attr_name[255];
+ hid_t    attr_id;
+ char     aux[255];
+ unsigned char *tmp_buf;
+ unsigned char *tmp_fill_buf;
+ hsize_t  i;
+ size_t   src_size;
+ size_t   *src_offset;
+ size_t   *src_sizes;
+ int      has_fill=0;
+
+/*-------------------------------------------------------------------------
+ * First we get information about type size and offsets on disk
+ *-------------------------------------------------------------------------
+ */
+
+ /* Get the number of records and fields  */
+ if ( H5TBget_table_info ( loc_id1, dset_name1, &nfields, &nrecords ) < 0 )
+  return -1;
+
+ src_offset = (size_t *)malloc((size_t)nfields * sizeof(size_t));
+ src_sizes  = (size_t *)malloc((size_t)nfields * sizeof(size_t));
+
+
+ if ( src_offset == NULL )
+  return -1;
+
+ /* Get field info */
+ if ( H5TBget_field_info( loc_id1, dset_name1, NULL, src_sizes, src_offset, &src_size ) < 0 )
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * Get information about the first table
+ *-------------------------------------------------------------------------
+ */
+
+ /* Open the 1st dataset. */
+ if ( (dataset_id1 = H5Dopen( loc_id1, dset_name1 )) < 0 )
+  goto out;
+
+ /* Get the datatype */
+ if ( (type_id1 = H5Dget_type( dataset_id1 )) < 0 )
+  goto out;
+
+ /* Get the dataspace handle */
+ if ( (space_id1 = H5Dget_space( dataset_id1 )) < 0 )
+  goto out;
+
+ /* Get creation properties list */
+ if ( (plist_id1 = H5Dget_create_plist( dataset_id1 )) < 0 )
+  goto out;
+
+ /* Get the dimensions  */
+ if ( H5TBget_table_info ( loc_id1, dset_name1, &nfields, &nrecords ) < 0 )
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * Make the merged table with no data originally
+ *-------------------------------------------------------------------------
+ */
+
+ /* Clone the property list */
+ if ( ( plist_id3 = H5Pcopy( plist_id1 )) < 0 )
+  goto out;
+
+ /* Clone the type id */
+ if ( ( type_id3 = H5Tcopy( type_id1 )) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Here we do not clone the file space from the 1st dataset, because we want to create
+ * an empty table. Instead we create a new dataspace with zero records and expandable.
+ *-------------------------------------------------------------------------
+ */
+ dims[0] = 0;
+
+/* Create a simple data space with unlimited size */
+ if ( (space_id3 = H5Screate_simple( 1, dims, maxdims )) < 0 )
+  return -1;
+
+ /* Create the dataset */
+ if ( (dataset_id3 = H5Dcreate( loc_id1, dset_name3, type_id3, space_id3, plist_id3 )) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Attach the conforming table attributes
+ *-------------------------------------------------------------------------
+ */
+ if ( H5TB_attach_attributes( "Merge table", loc_id1, dset_name3, nfields, type_id3 ) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Get attributes
+ *-------------------------------------------------------------------------
+ */
+
+ type_size = H5Tget_size( type_id3 );
+
+ /* alloc fill value attribute buffer */
+ tmp_fill_buf = (unsigned char *)malloc((size_t) type_size );
+
+ /* Get the fill value attributes */
+ has_fill=H5TBAget_fill( loc_id1, dset_name1, dataset_id1, tmp_fill_buf );
+
+/*-------------------------------------------------------------------------
+ * Attach the fill attributes from previous table
+ *-------------------------------------------------------------------------
+ */
+ if ( has_fill == 1 )
+ {
+
+  if (( sid = H5Screate(H5S_SCALAR)) < 0 )
+   goto out;
+
+  for ( i = 0; i < nfields; i++)
+  {
+
+   /* Get the member type */
+   if ( ( member_type_id = H5Tget_member_type( type_id3, (unsigned) i )) < 0 )
+    goto out;
+
+   /* Get the member offset */
+   member_offset = H5Tget_member_offset( type_id3, (unsigned) i );
+
+   strcpy( attr_name, "FIELD_" );
+   sprintf( aux, "%d", (int) i );
+   strcat( attr_name, aux );
+   sprintf( aux, "%s", "_FILL" );
+   strcat( attr_name, aux );
+
+   if ( (attr_id = H5Acreate( dataset_id3, attr_name, member_type_id, sid, H5P_DEFAULT )) < 0 )
+    goto out;
+
+   if ( H5Awrite( attr_id, member_type_id, tmp_fill_buf+member_offset ) < 0 )
+    goto out;
+
+   if ( H5Aclose( attr_id ) < 0 )
+    goto out;
+
+   if ( H5Tclose( member_type_id ) < 0 )
+    goto out;
+  }
+
+  /* Close data space. */
+  if ( H5Sclose( sid ) < 0 )
+   goto out;
+ }
+
+/*-------------------------------------------------------------------------
+ * Read data from 1st table
+ *-------------------------------------------------------------------------
+ */
+
+ tmp_buf = (unsigned char *)calloc((size_t) nrecords, type_size );
+
+ /* Define a hyperslab in the dataset of the size of the records */
+ offset[0] = 0;
+ count[0]  = nrecords;
+ if ( H5Sselect_hyperslab( space_id1, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+  goto out;
+
+ /* Create a memory dataspace handle */
+ mem_size[0] = count[0];
+ if ( (mem_space_id = H5Screate_simple( 1, mem_size, NULL )) < 0 )
+  goto out;
+
+ if ( H5Dread( dataset_id1, type_id1, mem_space_id, space_id1, H5P_DEFAULT, tmp_buf ) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Save data from 1st table into new table
+ *-------------------------------------------------------------------------
+ */
+
+ /* Append the records to the new table */
+ if ( H5TBappend_records( loc_id1, dset_name3, nrecords, src_size, src_offset, src_sizes, tmp_buf ) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Release resources from 1st table
+ *-------------------------------------------------------------------------
+ */
+
+ /* Terminate access to the memory dataspace */
+ if ( H5Sclose( mem_space_id ) < 0 )
+  goto out;
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( space_id1 ) < 0 )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( type_id1 ) < 0 )
+  goto out;
+
+ /* Terminate access to a property list */
+ if ( H5Pclose( plist_id1 ) < 0 )
+  goto out;
+
+ /* End access to the dataset */
+ if ( H5Dclose( dataset_id1 ) < 0 )
+  goto out;
+
+ /* Release resources. */
+ free( tmp_buf );
+
+/*-------------------------------------------------------------------------
+ * Get information about the 2nd table
+ *-------------------------------------------------------------------------
+ */
+
+ /* Open the dataset. */
+ if ( (dataset_id2 = H5Dopen( loc_id2, dset_name2 )) < 0 )
+  goto out;
+
+ /* Get the datatype */
+ if ( (type_id2 = H5Dget_type( dataset_id2 )) < 0 )
+  goto out;
+
+ /* Get the dataspace handle */
+ if ( (space_id2 = H5Dget_space( dataset_id2 )) < 0 )
+  goto out;
+
+ /* Get the property list handle */
+ if ( (plist_id2 = H5Dget_create_plist( dataset_id2 )) < 0 )
+  goto out;
+
+ /* Get the dimensions  */
+ if ( H5TBget_table_info ( loc_id2, dset_name2, &nfields, &nrecords ) < 0 )
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * Read data from 2nd table
+ *-------------------------------------------------------------------------
+ */
+
+ tmp_buf = (unsigned char *)calloc((size_t) nrecords, type_size );
+
+ /* Define a hyperslab in the dataset of the size of the records */
+ offset[0] = 0;
+ count[0]  = nrecords;
+ if ( H5Sselect_hyperslab( space_id2, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+  goto out;
+
+ /* Create a memory dataspace handle */
+ mem_size[0] = count[0];
+ if ( (mem_space_id = H5Screate_simple( 1, mem_size, NULL )) < 0 )
+  goto out;
+
+ if ( H5Dread( dataset_id2, type_id2, mem_space_id, space_id2, H5P_DEFAULT, tmp_buf ) < 0 )
+  goto out;
+
+
+/*-------------------------------------------------------------------------
+ * Save data from 2nd table into new table
+ *-------------------------------------------------------------------------
+ */
+
+ /* append the records to the new table */
+ if ( H5TBappend_records( loc_id1, dset_name3, nrecords, src_size, src_offset, src_sizes, tmp_buf ) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Release resources from 2nd table
+ *-------------------------------------------------------------------------
+ */
+
+ /* Terminate access to the memory dataspace */
+ if ( H5Sclose( mem_space_id ) < 0 )
+  goto out;
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( space_id2 ) < 0 )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( type_id2 ) < 0 )
+  return -1;
+
+ /* Terminate access to a property list */
+ if ( H5Pclose( plist_id2 ) < 0 )
+  goto out;
+
+ /* End access to the dataset */
+ if ( H5Dclose( dataset_id2 ) < 0 )
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * Release resources from 3rd table
+ *-------------------------------------------------------------------------
+ */
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( space_id3 ) < 0 )
+  return -1;
+
+ /* Release the datatype. */
+ if ( H5Tclose( type_id3 ) < 0 )
+  return -1;
+
+ /* Terminate access to a property list */
+ if ( H5Pclose( plist_id3 ) < 0 )
+  return -1;
+
+ /* End access to the dataset */
+ if ( H5Dclose( dataset_id3 ) < 0 )
+  return -1;
+
+ /* Release resources. */
+ free( tmp_buf );
+ free( tmp_fill_buf );
+ free( src_offset );
+ free( src_sizes );
+
+return 0;
+
+out:
+ H5Dclose( dataset_id1 );
+ return -1;
+
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBinsert_field
+ *
+ * Purpose: Inserts a field
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: January 30, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5TBinsert_field( hid_t loc_id,
+                         const char *dset_name,
+                         const char *field_name,
+                         hid_t field_type,
+                         hsize_t position,
+                         const void *fill_data,
+                         const void *data )
+{
+
+ /* Identifiers for the 1st, original dataset */
+ hid_t    dataset_id1;
+ hid_t    type_id1;
+ hid_t    space_id1;
+ hid_t    plist_id1;
+ hid_t    mem_space_id1;
+
+ /* Identifiers for the 2nd, new dataset */
+ hid_t    dataset_id2;
+ hid_t    type_id2;
+ hid_t    space_id2;
+ hid_t    plist_id2;
+ hid_t    mem_space_id2;
+
+ hid_t    member_type_id;
+ size_t   member_size;
+ size_t   new_member_size = 0;
+ char     *member_name;
+ size_t   total_size;
+ hsize_t  nfields;
+ hsize_t  nrecords;
+ hsize_t  dims_chunk[1];
+ hsize_t  dims[1];
+ hsize_t  maxdims[1] = { H5S_UNLIMITED };
+ hsize_t  count[1];
+ hsize_t offset[1];
+ hsize_t  mem_size[1];
+ hid_t    write_type_id;
+ hid_t    PRESERVE;
+ size_t   curr_offset;
+ int      inserted;
+ hsize_t  idx;
+ char     table_title[255];
+ size_t   member_offset;
+ char     attr_name[255];
+ hid_t    attr_id;
+ char     aux[255];
+ unsigned char *tmp_buf;
+ unsigned char *tmp_fill_buf;
+ hsize_t  i;
+
+ /* Get the number of records and fields  */
+ if ( H5TBget_table_info ( loc_id, dset_name,  &nfields, &nrecords ) < 0 )
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * Get information about the old data type
+ *-------------------------------------------------------------------------
+ */
+
+ /* Open the dataset. */
+ if ( (dataset_id1 = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Get creation properties list */
+ if ( (plist_id1 = H5Dget_create_plist( dataset_id1 )) < 0 )
+  goto out;
+
+ /* Get the datatype */
+ if ( (type_id1 = H5Dget_type( dataset_id1 )) < 0 )
+  goto out;
+
+ /* Get the size of the datatype */
+ if ( ( total_size = H5Tget_size( type_id1 )) == 0 )
+  goto out;
+
+ /* Get the dataspace handle */
+ if ( (space_id1 = H5Dget_space( dataset_id1 )) < 0 )
+  goto out;
+
+ /* Get dimension */
+ if ( H5Sget_simple_extent_dims( space_id1, dims, NULL) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Get attributes
+ *-------------------------------------------------------------------------
+ */
+
+ /* Get the table title */
+ if ( (H5TBAget_title( dataset_id1, table_title )) < 0 )
+  goto out;
+
+ /* alloc fill value attribute buffer */
+ tmp_fill_buf = (unsigned char *)malloc(total_size );
+
+ /* Get the fill value attributes */
+ if ( (H5TBAget_fill( loc_id, dset_name, dataset_id1, tmp_fill_buf )) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Create a new data type
+ *-------------------------------------------------------------------------
+ */
+
+ /* Get the new member size */
+ member_size = H5Tget_size( field_type );
+
+ /* Create the data type. */
+ if (( type_id2 = H5Tcreate (H5T_COMPOUND,(size_t)(total_size + member_size) )) < 0 )
+  goto out;
+
+ curr_offset = 0;
+ inserted    = 0;
+
+ /* Insert the old fields, counting with the new one */
+ for ( i = 0; i < nfields + 1; i++)
+ {
+
+  idx = i;
+  if ( inserted )
+   idx = i - 1;
+
+  if ( i == position )
+  {
+
+   /* Get the new member size */
+   new_member_size = H5Tget_size( field_type );
+
+   /* Insert the new field type */
+   if ( H5Tinsert( type_id2, field_name, curr_offset, field_type ) < 0 )
+    goto out;
+
+   curr_offset += new_member_size;
+
+   inserted = 1;
+
+   continue;
+
+  }
+
+  /* Get the member name */
+  member_name = H5Tget_member_name( type_id1, (unsigned)idx );
+
+  /* Get the member type */
+  if ( ( member_type_id = H5Tget_member_type( type_id1,(unsigned)idx )) < 0 )
+   goto out;
+
+  /* Get the member size */
+  member_size = H5Tget_size( member_type_id );
+
+  /* Insert it into the new type */
+  if ( H5Tinsert( type_id2, member_name, curr_offset, member_type_id ) < 0 )
+    goto out;
+
+  curr_offset += member_size;
+
+  free( member_name );
+
+   /* Close the member type */
+  if ( H5Tclose( member_type_id ) < 0 )
+   goto out;
+
+
+ } /* i */
+
+/*-------------------------------------------------------------------------
+ * Create a new temporary dataset
+ *-------------------------------------------------------------------------
+ */
+
+ /* Retrieve the size of chunk */
+ if ( H5Pget_chunk( plist_id1, 1, dims_chunk ) < 0 )
+  goto out;
+
+ /* Create a new simple data space with unlimited size, using the dimension */
+ if ( ( space_id2 = H5Screate_simple( 1, dims, maxdims )) < 0 )
+  return -1;
+
+ /* Modify dataset creation properties, i.e. enable chunking  */
+ plist_id2 = H5Pcreate (H5P_DATASET_CREATE);
+ if ( H5Pset_chunk ( plist_id2, 1, dims_chunk ) < 0 )
+  return -1;
+
+ /* Create the dataset. */
+ if ( ( dataset_id2 = H5Dcreate( loc_id, "new", type_id2, space_id2, plist_id2 )) < 0 )
+  goto out;
+
+
+/*-------------------------------------------------------------------------
+ * Read data from 1st table
+ *-------------------------------------------------------------------------
+ */
+
+ tmp_buf = (unsigned char *)calloc((size_t) nrecords, (size_t)total_size );
+
+ /* Define a hyperslab in the dataset of the size of the records */
+ offset[0] = 0;
+ count[0]  = nrecords;
+ if ( H5Sselect_hyperslab( space_id1, H5S_SELECT_SET, offset, NULL, count, NULL) < 0 )
+  goto out;
+
+ /* Create a memory dataspace handle */
+ mem_size[0] = count[0];
+ if ( (mem_space_id1 = H5Screate_simple( 1, mem_size, NULL )) < 0 )
+  goto out;
+
+ if ( H5Dread( dataset_id1, type_id1, mem_space_id1, H5S_ALL, H5P_DEFAULT, tmp_buf ) < 0 )
+  goto out;
+
+
+/*-------------------------------------------------------------------------
+ * Save data from 1st table into new table, using the 1st type id
+ *-------------------------------------------------------------------------
+ */
+
+ /* Write */
+ if ( H5Dwrite( dataset_id2, type_id1, mem_space_id1, H5S_ALL, H5P_DEFAULT, tmp_buf ) < 0 )
+  goto out;
+
+
+/*-------------------------------------------------------------------------
+ * Save the function supplied data of the new field
+ *-------------------------------------------------------------------------
+ */
+
+
+ /* Create a write id */
+ if ( ( write_type_id = H5Tcreate( H5T_COMPOUND, (size_t)new_member_size )) < 0 )
+  goto out;
+
+ /* The field in the file is found by its name */
+ if ( H5Tinsert( write_type_id, field_name, 0, field_type ) < 0 )
+  goto out;
+
+ /* Create xfer properties to preserve initialized data */
+ if ((PRESERVE = H5Pcreate (H5P_DATASET_XFER))<0)
+  goto out;
+ if (H5Pset_preserve (PRESERVE, 1)<0)
+  goto out;
+
+  /* Only write if there is something to write */
+ if ( data )
+ {
+
+  /* Create a memory dataspace handle */
+  if ( (mem_space_id2 = H5Screate_simple( 1, mem_size, NULL )) < 0 )
+   goto out;
+
+  /* Write */
+  if ( H5Dwrite( dataset_id2, write_type_id, mem_space_id2, space_id2, PRESERVE, data ) < 0 )
+   goto out;
+
+   /* Terminate access to the memory dataspace */
+  if ( H5Sclose( mem_space_id2 ) < 0 )
+   goto out;
+ }
+
+ /* End access to the property list */
+ if ( H5Pclose( PRESERVE ) < 0 )
+  goto out;
+
+
+
+/*-------------------------------------------------------------------------
+ * Release resources from 1st table
+ *-------------------------------------------------------------------------
+ */
+
+ /* Terminate access to the memory dataspace */
+ if ( H5Sclose( mem_space_id1 ) < 0 )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( type_id1 ) < 0 )
+  goto out;
+
+ /* Terminate access to a property list */
+ if ( H5Pclose( plist_id1 ) < 0 )
+  goto out;
+
+ /* Terminate access to the data space */
+ if ( H5Sclose( space_id1 ) < 0 )
+  goto out;
+
+ /* End access to the dataset */
+ if ( H5Dclose( dataset_id1 ) < 0 )
+  goto out;
+
+
+/*-------------------------------------------------------------------------
+ * Release resources from 2nd table
+ *-------------------------------------------------------------------------
+ */
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( space_id2 ) < 0 )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( type_id2 ) < 0 )
+  return -1;
+
+ /* Terminate access to a property list */
+ if ( H5Pclose( plist_id2 ) < 0 )
+  goto out;
+
+ /* End access to the dataset */
+ if ( H5Dclose( dataset_id2 ) < 0 )
+  return -1;
+/*-------------------------------------------------------------------------
+ * Delete 1st table
+ *-------------------------------------------------------------------------
+ */
+ if ( H5Gunlink( loc_id, dset_name ) < 0 )
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * Rename 2nd table
+ *-------------------------------------------------------------------------
+ */
+
+ if ( H5Gmove( loc_id, "new", dset_name ) < 0 )
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * Attach the conforming table attributes
+ *-------------------------------------------------------------------------
+ */
+
+ /* Get the number of records and fields  */
+ if ( H5TBget_table_info ( loc_id, dset_name,  &nfields, &nrecords ) < 0 )
+  return -1;
+
+ /* Open the dataset. */
+ if ( (dataset_id1 = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Get the datatype */
+ if ( (type_id1 = H5Dget_type( dataset_id1 )) < 0 )
+  goto out;
+
+ /* Set the attributes */
+ if ( H5TB_attach_attributes( table_title, loc_id, dset_name,(hsize_t) nfields, type_id1 ) < 0 )
+  return -1;
+/*-------------------------------------------------------------------------
+ * Attach the fill attributes from previous table
+ *-------------------------------------------------------------------------
+ */
+
+  if (( space_id1 = H5Screate(H5S_SCALAR)) < 0 )
+   goto out;
+
+  for ( i = 0; i < nfields-1; i++)
+  {
+    /* Get the member type */
+   if ( ( member_type_id = H5Tget_member_type( type_id1, (unsigned) i )) < 0 )
+    goto out;
+
+   /* Get the member offset */
+   member_offset = H5Tget_member_offset( type_id1, (unsigned) i );
+
+   strcpy( attr_name, "FIELD_" );
+   sprintf( aux, "%d", (int)i );
+   strcat( attr_name, aux );
+   sprintf( aux, "%s", "_FILL" );
+   strcat( attr_name, aux );
+
+   if ( (attr_id = H5Acreate( dataset_id1, attr_name, member_type_id, space_id1, H5P_DEFAULT )) < 0 )
+    goto out;
+
+   if ( H5Awrite( attr_id, member_type_id, tmp_fill_buf+member_offset ) < 0 )
+    goto out;
+
+   if ( H5Aclose( attr_id ) < 0 )
+    goto out;
+
+   /* Close the member type */
+   if ( H5Tclose( member_type_id ) < 0 )
+    goto out;
+  }
+
+/*-------------------------------------------------------------------------
+ * Attach the fill attribute from the new field, if present
+ *-------------------------------------------------------------------------
+ */
+ if ( fill_data )
+ {
+
+   strcpy( attr_name, "FIELD_" );
+   sprintf( aux, "%d",(int)( nfields-1) );
+   strcat( attr_name, aux );
+   sprintf( aux, "%s", "_FILL" );
+   strcat( attr_name, aux );
+
+    /* Get the member type */
+   if ( ( member_type_id = H5Tget_member_type( type_id1, (unsigned)nfields-1 )) < 0 )
+    goto out;
+
+   if ( (attr_id = H5Acreate( dataset_id1, attr_name, member_type_id, space_id1, H5P_DEFAULT )) < 0 )
+    goto out;
+
+   if ( H5Awrite( attr_id, member_type_id, fill_data ) < 0 )
+    goto out;
+
+   if ( H5Aclose( attr_id ) < 0 )
+    goto out;
+
+   if ( H5Tclose( member_type_id ) < 0 )
+    goto out;
+
+ }
+
+  /* Close data space. */
+ if ( H5Sclose( space_id1 ) < 0 )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( type_id1 ) < 0 )
+  goto out;
+
+ /* End access to the dataset */
+ if ( H5Dclose( dataset_id1 ) < 0 )
+  goto out;
+
+ /* Release resources. */
+ free ( tmp_buf );
+ free ( tmp_fill_buf );
+
+
+return 0;
+
+out:
+ H5Dclose( dataset_id1 );
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBdelete_field
+ *
+ * Purpose: Deletes a field
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: January 30, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5TBdelete_field( hid_t loc_id,
+                         const char *dset_name,
+                         const char *field_name )
+{
+
+ /* Identifiers for the 1st original dataset */
+ hid_t    dataset_id1;
+ hid_t    type_id1;
+ hid_t    space_id1;
+ hid_t    plist_id1;
+
+ /* Identifiers for the 2nd new dataset */
+ hid_t    dataset_id2;
+ hid_t    type_id2;
+ hid_t    space_id2;
+ hid_t    plist_id2;
+
+ hid_t    member_type_id;
+ size_t   member_size;
+ char     *member_name;
+ size_t   type_size1;
+ size_t   type_size2;
+ hsize_t  nfields;
+ hsize_t  nrecords;
+ hsize_t  dims_chunk[1];
+ hsize_t  dims[1];
+ hsize_t  maxdims[1] = { H5S_UNLIMITED };
+ hid_t    PRESERVE;
+ size_t   curr_offset;
+ size_t   delete_member_size = 0;
+ hid_t    read_type_id;
+ hid_t    write_type_id;
+ unsigned char *tmp_buf;
+ unsigned char *tmp_fill_buf;
+ char     attr_name[255];
+ char     aux[255];
+ char     table_title[255];
+ size_t   member_offset;
+ hid_t    attr_id;
+ hsize_t  i;
+ int      has_fill=0;
+
+ /* Get the number of records and fields  */
+ if ( H5TBget_table_info ( loc_id, dset_name,  &nfields, &nrecords ) < 0 )
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * Get information about the old data type
+ *-------------------------------------------------------------------------
+ */
+
+ /* Open the dataset. */
+ if ( (dataset_id1 = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Get creation properties list */
+ if ( (plist_id1 = H5Dget_create_plist( dataset_id1 )) < 0 )
+  goto out;
+
+ /* Get the datatype */
+ if ( (type_id1 = H5Dget_type( dataset_id1 )) < 0 )
+  goto out;
+
+ /* Get the size of the datatype */
+ type_size1 = H5Tget_size( type_id1 );
+
+ /* Get the dataspace handle */
+ if ( (space_id1 = H5Dget_space( dataset_id1 )) < 0 )
+  goto out;
+
+ /* Get dimension */
+ if ( H5Sget_simple_extent_dims( space_id1, dims, NULL) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Create a new data type; first we find the size of the datatype to delete
+ *-------------------------------------------------------------------------
+ */
+
+ /* Check out the field */
+ for ( i = 0; i < nfields; i++)
+ {
+
+  /* Get the member name */
+  member_name = H5Tget_member_name( type_id1,(unsigned) i );
+
+  /* We want to find the field to delete */
+  if ( H5TB_find_field( member_name, field_name ) > 0 )
+  {
+   /* Get the member type */
+   if ( ( member_type_id = H5Tget_member_type( type_id1,(unsigned) i )) < 0 )
+    goto out;
+
+   /* Get the member size */
+   delete_member_size = H5Tget_size( member_type_id );
+
+   /* Close the member type */
+   if ( H5Tclose( member_type_id ) < 0 )
+    goto out;
+
+   free( member_name );
+
+   break;
+
+  }
+
+  free( member_name );
+
+ } /* i */
+
+ /* No field to delete was found */
+ if ( delete_member_size == 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * Create a new data type; we now insert all the fields into the new type
+ *-------------------------------------------------------------------------
+ */
+
+ type_size2 = type_size1 - delete_member_size;
+
+ /* Create the data type. */
+ if (( type_id2 = H5Tcreate (H5T_COMPOUND, type_size2 )) < 0 )
+  goto out;
+
+ curr_offset = 0;
+
+ /* alloc fill value attribute buffer */
+ tmp_fill_buf = (unsigned char *)malloc((size_t) type_size2 );
+
+/*-------------------------------------------------------------------------
+ * Get attributes from previous table in the process
+ *-------------------------------------------------------------------------
+ */
+
+ /* Get the table title */
+ if ( (H5TBAget_title( dataset_id1, table_title )) < 0 )
+  goto out;
+
+ /* Insert the old fields except the one to delete */
+ for ( i = 0; i < nfields; i++)
+ {
+
+  /* Get the member name */
+  member_name = H5Tget_member_name( type_id1, (unsigned) i );
+
+  /* We want to skip the field to delete */
+  if ( H5TB_find_field( member_name, field_name ) > 0 )
+  {
+   free( member_name );
+   continue;
+  }
+
+  /* Get the member type */
+  if ( ( member_type_id = H5Tget_member_type( type_id1, (unsigned)i )) < 0 )
+   goto out;
+
+  /* Get the member size */
+  member_size = H5Tget_size( member_type_id );
+
+  /* Insert it into the new type */
+  if ( H5Tinsert( type_id2, member_name, curr_offset, member_type_id ) < 0 )
+    goto out;
+
+ /*-------------------------------------------------------------------------
+  * Get the fill value information
+  *-------------------------------------------------------------------------
+  */
+
+  strcpy( attr_name, "FIELD_" );
+  sprintf( aux, "%d", (int)i );
+  strcat( attr_name, aux );
+  sprintf( aux, "%s", "_FILL" );
+  strcat( attr_name, aux );
+
+  /* Check if we have the _FILL attribute */
+  has_fill = H5LT_find_attribute( dataset_id1, attr_name );
+
+  /* Get it */
+  if ( has_fill == 1 )
+  {
+   if ( H5LT_get_attribute_disk( dataset_id1, attr_name, tmp_fill_buf+curr_offset ) < 0 )
+    goto out;
+  }
+
+  curr_offset += member_size;
+
+  free( member_name );
+
+  /* Close the member type */
+  if ( H5Tclose( member_type_id ) < 0 )
+   goto out;
+
+ } /* i */
+
+/*-------------------------------------------------------------------------
+ * Create a new temporary dataset
+ *-------------------------------------------------------------------------
+ */
+
+ /* Retrieve the size of chunk */
+ if ( H5Pget_chunk( plist_id1, 1, dims_chunk ) < 0 )
+  goto out;
+
+ /* Create a new simple data space with unlimited size, using the dimension */
+ if ( ( space_id2 = H5Screate_simple( 1, dims, maxdims )) < 0 )
+  return -1;
+
+ /* Modify dataset creation properties, i.e. enable chunking  */
+ plist_id2 = H5Pcreate (H5P_DATASET_CREATE);
+ if ( H5Pset_chunk ( plist_id2, 1, dims_chunk ) < 0 )
+  return -1;
+
+ /* Create the dataset. */
+ if ( ( dataset_id2 = H5Dcreate( loc_id, "new", type_id2, space_id2, plist_id2 )) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * We have to read field by field of the old dataset and save it into the new one
+ *-------------------------------------------------------------------------
+ */
+ for ( i = 0; i < nfields; i++)
+ {
+
+  /* Get the member name */
+  member_name = H5Tget_member_name( type_id1,(unsigned) i );
+
+  /* Skip the field to delete */
+  if ( H5TB_find_field( member_name, field_name ) > 0 )
+  {
+   free( member_name );
+   continue;
+  }
+
+  /* Get the member type */
+  if ( ( member_type_id = H5Tget_member_type( type_id1, (unsigned)i )) < 0 )
+   goto out;
+
+  /* Get the member size */
+  member_size = H5Tget_size( member_type_id );
+
+  /* Create a read id */
+  if ( ( read_type_id = H5Tcreate( H5T_COMPOUND, member_size )) < 0 )
+   goto out;
+
+  /* Insert it into the new type */
+  if ( H5Tinsert( read_type_id, member_name, 0, member_type_id ) < 0 )
+    goto out;
+
+  tmp_buf = (unsigned char *)calloc((size_t) nrecords, member_size );
+
+  /* Read */
+  if ( H5Dread( dataset_id1, read_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp_buf ) < 0 )
+   goto out;
+
+  /* Create a write id */
+  if ( ( write_type_id = H5Tcreate( H5T_COMPOUND, member_size )) < 0 )
+   goto out;
+
+  /* The field in the file is found by its name */
+  if ( H5Tinsert( write_type_id, member_name, 0, member_type_id ) < 0 )
+   goto out;
+
+  /* Create xfer properties to preserve initialized data */
+  if ((PRESERVE = H5Pcreate (H5P_DATASET_XFER))<0)
+   goto out;
+  if (H5Pset_preserve (PRESERVE, 1)<0)
+   goto out;
+
+  /* Write */
+  if ( H5Dwrite( dataset_id2, write_type_id, H5S_ALL, H5S_ALL, PRESERVE, tmp_buf ) < 0 )
+   goto out;
+
+  /* End access to the property list */
+  if ( H5Pclose( PRESERVE ) < 0 )
+   goto out;
+
+ /* Close the member type */
+  if ( H5Tclose( member_type_id ) < 0 )
+   goto out;
+
+  /* Close the read type */
+  if ( H5Tclose( read_type_id ) < 0 )
+   goto out;
+
+  /* Close the write type */
+  if ( H5Tclose( write_type_id ) < 0 )
+   goto out;
+
+  /* Release resources. */
+  free( member_name );
+  free ( tmp_buf );
+
+ } /* i */
+
+/*-------------------------------------------------------------------------
+ * Release resources from 1st table
+ *-------------------------------------------------------------------------
+ */
+
+ /* Release the datatype. */
+ if ( H5Tclose( type_id1 ) < 0 )
+  goto out;
+
+ /* Terminate access to a property list */
+ if ( H5Pclose( plist_id1 ) < 0 )
+  goto out;
+
+ /* Terminate access to the data space */
+ if ( H5Sclose( space_id1 ) < 0 )
+  goto out;
+
+ /* End access to the dataset */
+ if ( H5Dclose( dataset_id1 ) < 0 )
+  goto out;
+
+
+/*-------------------------------------------------------------------------
+ * Release resources from 2nd table
+ *-------------------------------------------------------------------------
+ */
+
+ /* Terminate access to the dataspace */
+ if ( H5Sclose( space_id2 ) < 0 )
+  goto out;
+
+ /* Release the datatype. */
+ if ( H5Tclose( type_id2 ) < 0 )
+  return -1;
+
+ /* Terminate access to a property list */
+ if ( H5Pclose( plist_id2 ) < 0 )
+  goto out;
+
+ /* End access to the dataset */
+ if ( H5Dclose( dataset_id2 ) < 0 )
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * Delete 1st table
+ *-------------------------------------------------------------------------
+ */
+
+ if ( H5Gunlink( loc_id, dset_name ) < 0 )
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * Rename 2nd table
+ *-------------------------------------------------------------------------
+ */
+
+ if ( H5Gmove( loc_id, "new", dset_name ) < 0 )
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * Attach the conforming table attributes
+ *-------------------------------------------------------------------------
+ */
+
+ /* Get the number of records and fields  */
+ if ( H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords ) < 0 )
+  return -1;
+
+ /* Open the dataset. */
+ if ( (dataset_id1 = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Get the datatype */
+ if ( (type_id1 = H5Dget_type( dataset_id1 )) < 0 )
+  goto out;
+
+ /* Set the attributes */
+ if ( H5TB_attach_attributes( table_title, loc_id, dset_name, nfields, type_id1 ) < 0 )
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * Attach the fill attributes from previous table
+ *-------------------------------------------------------------------------
+ */
+
+ if ( has_fill == 1 )
+ {
+
+  if (( space_id1 = H5Screate(H5S_SCALAR)) < 0 )
+   goto out;
+
+  for ( i = 0; i < nfields; i++)
+  {
+
+   /* Get the member type */
+   if ( ( member_type_id = H5Tget_member_type( type_id1, (unsigned)i )) < 0 )
+    goto out;
+
+   /* Get the member offset */
+   member_offset = H5Tget_member_offset( type_id1, (unsigned)i );
+
+   strcpy( attr_name, "FIELD_" );
+   sprintf( aux, "%d", (int)i );
+   strcat( attr_name, aux );
+   sprintf( aux, "%s", "_FILL" );
+   strcat( attr_name, aux );
+
+   if ( (attr_id = H5Acreate( dataset_id1, attr_name, member_type_id, space_id1, H5P_DEFAULT )) < 0 )
+    goto out;
+
+   if ( H5Awrite( attr_id, member_type_id, tmp_fill_buf+member_offset ) < 0 )
+    goto out;
+
+   if ( H5Aclose( attr_id ) < 0 )
+    goto out;
+
+   /* Close the member type */
+   if ( H5Tclose( member_type_id ) < 0 )
+    goto out;
+
+  }
+
+  /* Close data space. */
+  if ( H5Sclose( space_id1 ) < 0 )
+   goto out;
+
+ } /*has_fill*/
+
+ /* Release the datatype. */
+ if ( H5Tclose( type_id1 ) < 0 )
+  goto out;
+
+ /* End access to the dataset */
+ if ( H5Dclose( dataset_id1 ) < 0 )
+  goto out;
+
+ /* Release resources. */
+ free ( tmp_fill_buf );
+
+return 0;
+
+out:
+ H5Dclose( dataset_id1 );
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ *
+ * Table attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBAget_title
+ *
+ * Purpose: Read the table title
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: January 30, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5TBAget_title( hid_t loc_id,
+                       char *table_title )
+{
+
+ /* Get the TITLE attribute */
+ if ( H5LT_get_attribute_disk( loc_id, "TITLE", table_title ) < 0 )
+  return -1;
+
+
+ return 0;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBAget_fill
+ *
+ * Purpose: Read the table attribute fill values
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: January 30, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5TBAget_fill( hid_t loc_id,
+                      const char *dset_name,
+                      hid_t dset_id,
+                      unsigned char *dst_buf )
+{
+
+ hsize_t nfields;
+ hsize_t nrecords;
+ char    attr_name[255];
+ char    aux[255];
+ hsize_t i;
+ size_t  *src_offset;
+ int     has_fill=0;
+
+ /* Get the number of records and fields  */
+ if ( H5TBget_table_info ( loc_id, dset_name, &nfields, &nrecords ) < 0 )
+  return -1;
+
+ src_offset = (size_t *)malloc((size_t)nfields * sizeof(size_t));
+
+ if (src_offset == NULL )
+  return -1;
+
+ /* Get field info */
+ if ( H5TBget_field_info( loc_id, dset_name, NULL, NULL, src_offset, NULL ) < 0 )
+  goto out;
+
+ for ( i = 0; i < nfields; i++)
+ {
+  strcpy( attr_name, "FIELD_" );
+  sprintf( aux, "%d", (int)i );
+  strcat( attr_name, aux );
+  sprintf( aux, "%s", "_FILL" );
+  strcat( attr_name, aux );
+
+  /* Check if we have the _FILL attribute */
+  has_fill = H5LT_find_attribute( dset_id, attr_name );
+
+  /* Get it */
+  if ( has_fill == 1 )
+  {
+   if ( H5LT_get_attribute_disk( dset_id, attr_name, dst_buf+src_offset[i] ) < 0 )
+    goto out;
+  }
+
+ }
+
+ free( src_offset );
+
+ return has_fill;
+
+out:
+ free( src_offset );
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Inquiry functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBget_table_info
+ *
+ * Purpose: Gets the number of records and fields of a table
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 19, 2001
+ *
+ * Comments:
+ *
+ * Modifications: May 08, 2003
+ *  In version 2.0 of Table, the number of records is stored as an
+ *  attribute "NROWS"
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5TBget_table_info ( hid_t loc_id,
+                            const char *dset_name,
+                            hsize_t *nfields,
+                            hsize_t *nrecords )
+{
+ hid_t      tid;
+ hid_t      sid=-1;
+ hid_t      did;
+ int        num_members;
+ hsize_t    dims[1];
+ int        has_attr;
+ hsize_t    n[1];
+
+ /* Open the dataset. */
+ if ( (did = H5Dopen( loc_id, dset_name )) < 0 )
+  return -1;
+
+ /* Get the datatype */
+ if ( (tid = H5Dget_type( did )) < 0 )
+  goto out;
+
+ /* Get the number of members */
+ if ( (num_members = H5Tget_nmembers( tid )) < 0 )
+  goto out;
+
+ if (nfields)
+  *nfields = num_members;
+
+
+/*-------------------------------------------------------------------------
+ * Get number of records
+ *-------------------------------------------------------------------------
+ */
+
+ if (nrecords)
+ {
+  /* Try to find the attribute "NROWS" */
+  has_attr = H5LT_find_attribute( did, "NROWS" );
+
+  /* It exists, get it */
+  if ( has_attr == 1 )
+  {
+   /* Get the attribute */
+   if ( H5LTget_attribute(loc_id,dset_name,"NROWS",H5T_NATIVE_LLONG,n)<0)
+    return -1;
+
+   *nrecords = *n;
+  }
+  else
+  {
+   /* Get the dataspace handle */
+   if ( (sid = H5Dget_space( did )) < 0 )
+    goto out;
+
+   /* Get records */
+   if ( H5Sget_simple_extent_dims( sid, dims, NULL) < 0 )
+    goto out;
+
+   /* Terminate access to the dataspace */
+   if ( H5Sclose( sid ) < 0 )
+    goto out;
+
+   *nrecords = dims[0];
+  }
+ }/*nrecords*/
+
+ /* close */
+ if ( H5Tclose( tid ) < 0 )
+  goto out;
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+return 0;
+
+/* error zone, gracefully close */
+out:
+ H5E_BEGIN_TRY {
+  H5Dclose(did);
+  H5Sclose(sid);
+  H5Tclose(tid);
+ } H5E_END_TRY;
+ return -1;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5TBget_field_info
+ *
+ * Purpose: Get information about fields
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 19, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5TBget_field_info( hid_t loc_id,
+                           const char *dset_name,
+                           char *field_names[],
+                           size_t *field_sizes,
+                           size_t *field_offsets,
+                           size_t *type_size )
+{
+ hid_t         did;
+ hid_t         ftype_id;
+ hid_t         native_type_id;
+ hssize_t      nfields;
+ char          *member_name;
+ hid_t         member_type_id;
+ hid_t         nativem_type_id;
+ size_t        member_size;
+ size_t        member_offset;
+ size_t        size;
+ hssize_t      i;
+
+ /* Open the dataset. */
+ if ( ( did = H5Dopen( loc_id, dset_name )) < 0 )
+  goto out;
+
+ /* Get the datatype */
+ if ( ( ftype_id = H5Dget_type( did )) < 0 )
+  goto out;
+
+ if ((native_type_id = H5Tget_native_type(ftype_id,H5T_DIR_DEFAULT))<0)
+  goto out;
+
+ /* Get the type size */
+ size = H5Tget_size( native_type_id );
+
+ if ( type_size )
+  *type_size = size;
+
+ /* Get the number of members */
+ if ( ( nfields = H5Tget_nmembers( ftype_id )) < 0 )
+  goto out;
+
+ /* Iterate tru the members */
+ for ( i = 0; i < nfields; i++)
+ {
+  /* Get the member name */
+  member_name = H5Tget_member_name( ftype_id, (unsigned)i );
+
+  if ( field_names )
+   strcpy( field_names[i], member_name );
+
+  /* Get the member type */
+  if ( ( member_type_id = H5Tget_member_type( ftype_id,(unsigned) i )) < 0 )
+   goto out;
+  if ((nativem_type_id = H5Tget_native_type(member_type_id,H5T_DIR_DEFAULT))<0)
+   goto out;
+
+  /* Get the member size */
+  member_size = H5Tget_size( nativem_type_id );
+
+  if ( field_sizes )
+   field_sizes[i] = member_size;
+
+  /* Get the member offset */
+  member_offset = H5Tget_member_offset( native_type_id,(unsigned) i );
+
+  if ( field_offsets )
+   field_offsets[i] = member_offset;
+
+  /* Close the member type */
+  if ( H5Tclose( member_type_id ) < 0 )
+   goto out;
+  if ( H5Tclose( nativem_type_id ) < 0 )
+   goto out;
+
+  free( member_name );
+
+ } /* i */
+
+ /* Release the datatype. */
+ if ( H5Tclose( ftype_id ) < 0 )
+  return -1;
+ if ( H5Tclose( native_type_id ) < 0 )
+  return -1;
+
+ /* End access to the dataset */
+ if ( H5Dclose( did ) < 0 )
+  return -1;
+
+return 0;
+
+out:
+ H5Dclose( did );
+ return -1;
+
+}
+
+/*-------------------------------------------------------------------------
+ *
+ * Private functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * Function: H5TB_find_field
+ *
+ * Purpose: Find a string field
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 19, 2001
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+int H5TB_find_field( const char *field, const char *field_list )
+{
+ const char *start = field_list;
+ const char *end;
+
+ while ( (end = strstr( start, "," )) != 0 ) {
+    if ( strncmp(start,field,(size_t)(end-start)) == 0 ) return 1;
+    start = end + 1;
+ }
+
+ if ( strcmp( start, field ) == 0 ) return 1;
+
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5TB_attach_attributes
+ *
+ * Purpose: Private function that creates the conforming table attributes;
+ *          Used by H5TBcombine_tables; not used by H5TBmake_table, which does not read
+ *          the fill value attributes from an existing table
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: December 6, 2001
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5TB_attach_attributes( const char *table_title,
+                               hid_t loc_id,
+                               const char *dset_name,
+                               hsize_t nfields,
+                               hid_t tid )
+{
+
+ char    attr_name[255];
+ char    *member_name;
+ char    aux[255];
+ hsize_t i;
+
+ /* Attach the CLASS attribute */
+ if ( H5LTset_attribute_string( loc_id, dset_name, "CLASS", "TABLE" ) < 0 )
+  goto out;
+
+ /* Attach the VERSION attribute */
+ if ( H5LTset_attribute_string( loc_id, dset_name, "VERSION", "2.0" ) < 0 )
+  goto out;
+
+ /* Attach the TITLE attribute */
+ if ( H5LTset_attribute_string( loc_id, dset_name, "TITLE", table_title ) < 0 )
+  goto out;
+
+ /* Attach the FIELD_ name attribute */
+ for ( i = 0; i < nfields; i++)
+ {
+
+  /* Get the member name */
+  member_name = H5Tget_member_name( tid, (unsigned)i );
+
+  strcpy( attr_name, "FIELD_" );
+  sprintf( aux, "%d", (int)i );
+  strcat( attr_name, aux );
+  sprintf( aux, "%s", "_NAME" );
+  strcat( attr_name, aux );
+
+  /* Attach the attribute */
+  if ( H5LTset_attribute_string( loc_id, dset_name, attr_name, member_name ) < 0 )
+   goto out;
+
+  free( member_name );
+
+ }
+
+ return 0;
+
+out:
+ return -1;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5TB_create_type
+ *
+ * Purpose: Private function that creates a memory type ID
+ *
+ * Return: Success: the memory type ID, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 31, 2004
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+hid_t H5TB_create_type(hid_t loc_id,
+                       const char *dset_name,
+                       size_t dst_size,
+                       const size_t *dst_offset,
+                       const size_t *dst_sizes,
+                       hid_t ftype_id)
+{
+ hid_t    mem_type_id;
+ hid_t    mtype_id=-1;
+ hid_t    nmtype_id=-1;
+ size_t   size_native;
+ hsize_t  nfields;
+ char     **fnames;
+ unsigned i;
+
+ /* get the number of fields  */
+ if (H5TBget_table_info(loc_id,dset_name,&nfields,NULL)<0)
+  return -1;
+
+ if ((fnames=malloc(sizeof(char*)*(size_t)nfields))==NULL)
+  return -1;
+
+ for ( i=0; i<nfields; i++)
+ {
+  if ((fnames[i]=malloc(sizeof(char)*HLTB_MAX_FIELD_LEN))==NULL) {
+   free(fnames);
+   return -1;
+  }
+ }
+
+ /* get field info */
+ if ( H5TBget_field_info(loc_id,dset_name,fnames,NULL,NULL,NULL)<0)
+  goto out;
+
+ /* create the memory data type */
+ if ((mem_type_id=H5Tcreate(H5T_COMPOUND,dst_size))<0)
+  goto out;
+
+ /* get each field ID and adjust its size, if necessary */
+ for ( i=0; i<nfields; i++)
+ {
+  if ((mtype_id=H5Tget_member_type(ftype_id,i))<0)
+   goto out;
+  if ((nmtype_id=H5Tget_native_type(mtype_id,H5T_DIR_DEFAULT))<0)
+   goto out;
+  size_native=H5Tget_size(nmtype_id);
+  if (dst_sizes[i]!=size_native)
+  {
+   if (H5Tset_size(nmtype_id,dst_sizes[i])<0)
+    goto out;
+  }
+  if (H5Tinsert(mem_type_id,fnames[i],dst_offset[i],nmtype_id) < 0 )
+   goto out;
+  if (H5Tclose(mtype_id)<0)
+   goto out;
+  if (H5Tclose(nmtype_id)<0)
+   goto out;
+ }
+
+ for ( i=0; i<nfields; i++)
+ {
+  free (fnames[i]);
+ }
+ free (fnames);
+
+ return mem_type_id;
+
+ /* error zone, gracefully close and free */
+out:
+ H5E_BEGIN_TRY {
+  H5Tclose(mtype_id);
+  H5Tclose(nmtype_id);
+ } H5E_END_TRY;
+ for ( i=0; i<nfields; i++)
+ {
+  if (fnames[i])
+   free (fnames[i]);
+ }
+ if (fnames)
+  free (fnames);
+ return -1;
+
+}
+

Added: packages/hdf5/branches/upstream/current/hl/src/H5TA.h
===================================================================
--- packages/hdf5/branches/upstream/current/hl/src/H5TA.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/hl/src/H5TA.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,246 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef _H5TB_H
+#define _H5TB_H
+
+#if 0
+#define H5_TB_DEBUG
+#endif
+
+#include "H5LT.h"
+
+#define HLTB_MAX_FIELD_LEN 255
+
+#if !defined(MAX)
+#define MAX(X,Y) ((X)>(Y)?(X):(Y))
+#endif
+
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Create functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5TBmake_table( const char *table_title,
+                       hid_t loc_id,
+                       const char *dset_name,
+                       hsize_t nfields,
+                       hsize_t nrecords,
+                       size_t type_size,
+                       const char *field_names[],
+                       const size_t *field_offset,
+                       const hid_t *field_types,
+                       hsize_t chunk_size,
+                       void *fill_data,
+                       int compress,
+                       const void *data );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Write functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5TBappend_records( hid_t loc_id,
+                           const char *dset_name,
+                           hsize_t nrecords,
+                           size_t type_size,
+                           const size_t *field_offset,
+                           const size_t *dst_sizes,
+                           const void *data );
+
+herr_t H5TBwrite_records( hid_t loc_id,
+                          const char *dset_name,
+                          hsize_t start,
+                          hsize_t nrecords,
+                          size_t type_size,
+                          const size_t *field_offset,
+                          const size_t *dst_sizes,
+                          const void *data );
+
+
+herr_t H5TBwrite_fields_name( hid_t loc_id,
+                              const char *dset_name,
+                              const char *field_names,
+                              hsize_t start,
+                              hsize_t nrecords,
+                              size_t type_size,
+                              const size_t *field_offset,
+                              const size_t *dst_sizes,
+                              const void *data );
+
+herr_t H5TBwrite_fields_index( hid_t loc_id,
+                               const char *dset_name,
+                               hsize_t nfields,
+                               const int *field_index,
+                               hsize_t start,
+                               hsize_t nrecords,
+                               size_t type_size,
+                               const size_t *field_offset,
+                               const size_t *dst_sizes,
+                               const void *data );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Read functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+
+herr_t H5TBread_table( hid_t loc_id,
+                       const char *dset_name,
+                       size_t dst_size,
+                       const size_t *dst_offset,
+                       const size_t *dst_sizes,
+                       void *dst_buf );
+
+
+herr_t H5TBread_fields_name( hid_t loc_id,
+                             const char *dset_name,
+                             const char *field_names,
+                             hsize_t start,
+                             hsize_t nrecords,
+                             size_t type_size,
+                             const size_t *field_offset,
+                             const size_t *dst_sizes,
+                             void *data );
+
+herr_t H5TBread_fields_index( hid_t loc_id,
+                              const char *dset_name,
+                              hsize_t nfields,
+                              const int *field_index,
+                              hsize_t start,
+                              hsize_t nrecords,
+                              size_t type_size,
+                              const size_t *field_offset,
+                              const size_t *dst_sizes,
+                              void *data );
+
+
+herr_t H5TBread_records( hid_t loc_id,
+                         const char *dset_name,
+                         hsize_t start,
+                         hsize_t nrecords,
+                         size_t type_size,
+                         const size_t *dst_offset,
+                         const size_t *dst_sizes,
+                         void *data );
+
+/*-------------------------------------------------------------------------
+ *
+ * Inquiry functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5TBget_table_info ( hid_t loc_id,
+                            const char *dset_name,
+                            hsize_t *nfields,
+                            hsize_t *nrecords );
+
+herr_t H5TBget_field_info( hid_t loc_id,
+                           const char *dset_name,
+                           char *field_names[],
+                           size_t *field_sizes,
+                           size_t *field_offsets,
+                           size_t *type_size );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Manipulation functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+herr_t H5TBdelete_record( hid_t loc_id,
+                          const char *dset_name,
+                          hsize_t start,
+                          hsize_t nrecords );
+
+
+herr_t H5TBinsert_record( hid_t loc_id,
+                          const char *dset_name,
+                          hsize_t start,
+                          hsize_t nrecords,
+                          size_t dst_size,
+                          const size_t *dst_offset,
+                          const size_t *dst_sizes,
+                          void *data );
+
+herr_t H5TBadd_records_from( hid_t loc_id,
+                             const char *dset_name1,
+                             hsize_t start1,
+                             hsize_t nrecords,
+                             const char *dset_name2,
+                             hsize_t start2 );
+
+herr_t H5TBcombine_tables( hid_t loc_id1,
+                           const char *dset_name1,
+                           hid_t loc_id2,
+                           const char *dset_name2,
+                           const char *dset_name3 );
+
+herr_t H5TBinsert_field( hid_t loc_id,
+                         const char *dset_name,
+                         const char *field_name,
+                         hid_t field_type,
+                         hsize_t position,
+                         const void *fill_data,
+                         const void *data );
+
+herr_t H5TBdelete_field( hid_t loc_id,
+                         const char *dset_name,
+                         const char *field_name );
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Table attribute functions
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t H5TBAget_title( hid_t loc_id,
+                       char *table_title );
+
+herr_t H5TBAget_fill( hid_t loc_id,
+                      const char *dset_name,
+                      hid_t dset_id,
+                      unsigned char *dst_buf );
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
+

Added: packages/hdf5/branches/upstream/current/hl/src/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/hl/src/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/hl/src/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,43 @@
+## HDF5 Library Makefile(.in)
+##
+## 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.
+##
+## 
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Add `-I.' to the C preprocessor flags.
+CPPFLAGS=-I. -I$(srcdir) -I$(top_builddir)/src -I$(top_srcdir)/src  -I$(top_srcdir)/hl/src @CPPFLAGS@
+
+## This is our main target, but also remove the settings file when cleaning.
+LIB=libhdf5_hl.la
+LIBHDF5=$(top_builddir)/src/libhdf5.la
+CLEAN=
+
+## Source and object files for the library (lexicographically)...
+LIB_SRC=H5LT.c H5TA.c H5IM.c
+
+LIB_OBJ=$(LIB_SRC:.c=.lo)
+
+## Temporary files
+MOSTLYCLEAN=
+
+## Public header files (to be installed)...
+PUB_HDR=H5IM.h H5LT.h H5TA.h 
+
+## Other header files (not to be installed)...
+PRIVATE_HDR=
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/hl/test/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/hl/test/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/hl/test/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,27 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+test_lite.lo: \
+   $(srcdir)/test_lite.c \
+   $(top_srcdir)/hl/src/H5LT.h
+test_image.lo: \
+   $(srcdir)/test_image.c \
+   $(top_srcdir)/hl/src/H5IM.h \
+   $(top_srcdir)/hl/src/H5LT.h
+test_table.lo: \
+   $(srcdir)/test_table.c \
+   $(top_srcdir)/hl/src/H5TA.h \
+   $(top_srcdir)/hl/src/H5LT.h

Added: packages/hdf5/branches/upstream/current/hl/test/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/hl/test/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/hl/test/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,71 @@
+## HDF5 Library Test Makefile(.in)
+##
+## 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.
+##
+## 
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Add include directory to the C preprocessor flags and the h5test and hdf5
+## libraries to the library list.
+CPPFLAGS=-I. -I$(srcdir) -I$(top_builddir)/src -I$(top_srcdir)/src -I$(top_srcdir)/hl/src  @CPPFLAGS@
+## These are our main targets. They should be listed in the order to be
+## executed, generally most specific tests to least specific tests.
+TEST_PROGS=test_lite test_image test_table 
+
+## The libh5test.a library provides common support code for the tests. We link
+## this library statically because some systems can only link executables to
+## a single shared library and libhdf5 is much bigger than libh5test.
+LIBHDF5=$(top_builddir)/src/libhdf5.la
+LIBHDF5_HL=../src/libhdf5_hl.la
+LIB_SRC=
+LIB_OBJ=$(LIB_SRC:.c=.lo)
+PUB_LIB=
+
+## Temporary files.  These files are the ones created by setting the
+## HDF5_NOCLEANUP environment variable and running `make test' without
+## specifying a file prefix or low-level driver.  Changing the file
+## prefix or low-level driver with environment variables will influence 
+## the temporary file name in ways that the makefile is not aware of.
+MOSTLYCLEAN=$(TEST_PROGS)
+CLEAN=*.h5
+
+## Source and object files for programs...  The TEST_SRC list contains all the
+## source files and is used for things like dependencies, archiving, etc.  The
+## other source lists are for the individual tests, the files of which may
+## overlap with other tests.
+
+TEST_SRC=test_lite.c test_image.c test_table.c
+
+TEST_OBJ=$(TEST_SRC:.c=.lo)
+
+## Private header files (not to be installed)...
+PRIVATE_HDR=
+
+## How to build the tests...  They all depend on the hdf5_hl and hdf5
+## libraries.
+$(TEST_PROGS): $(LIBHDF5_HL) $(LIBHDF5)
+
+test_lite: test_lite.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ test_lite.lo $(LIBHDF5_HL) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+test_image: test_image.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ test_image.lo $(LIBHDF5_HL) $(LIBHDF5)  $(LDFLAGS) $(LIBS)
+
+test_table: test_table.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ test_table.lo $(LIBHDF5_HL) $(LIBHDF5)  $(LDFLAGS) $(LIBS)
+
+	
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/hl/test/test_image.c
===================================================================
--- packages/hdf5/branches/upstream/current/hl/test/test_image.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/hl/test/test_image.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,194 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#include "H5IM.h"
+
+#define FILE_NAME "test_image.h5"
+#define WIDTH  (hsize_t)500
+#define HEIGHT (hsize_t)200
+unsigned char image_in1 [ WIDTH*HEIGHT ];
+unsigned char image_out1[ WIDTH*HEIGHT ];
+unsigned char image_in2 [ WIDTH*HEIGHT*3 ];
+unsigned char image_out2[ WIDTH*HEIGHT*3 ];
+
+
+/*-------------------------------------------------------------------------
+ * the main program
+ *-------------------------------------------------------------------------
+ */
+int main( void )
+{
+ hid_t         file_id;
+ hsize_t       width, height, planes;
+ hsize_t       pal_dims[] = {9,3};
+ hsize_t       pal_dims_out[2];
+ hsize_t       i;
+ char          interlace[20];
+ hssize_t      npals;
+
+ unsigned char pal_data_out[9*3];
+ /* create a 9 entry grey palette */
+ unsigned char pal_data_in[9*3] = {0,0,0,
+ 25,25,25,
+ 50,50,50,
+ 75,75,75,
+ 100,100,100,
+ 125,125,125,
+ 150,150,150,
+ 175,175,175,
+ 200,200,200};
+
+ for (i = 0; i < WIDTH*HEIGHT; i++ )
+  image_in1[i] = (unsigned char)i;
+ for (i = 0; i < WIDTH*HEIGHT*3; i++)
+  image_in2[i] = (unsigned char)i;
+
+ /* Create a new HDF5 file using default properties. */
+ file_id = H5Fcreate(FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+/*-------------------------------------------------------------------------
+ * Indexed image test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("indexed image");
+
+ /* Write image */
+ if ( H5IMmake_image_8bit( file_id, "Image1", WIDTH, HEIGHT, image_in1 ) < 0 )
+  goto out;
+
+ /* Make a palette */
+ if ( H5IMmake_palette( file_id, "Pallete", pal_dims, pal_data_in ) < 0 )
+  goto out;
+
+  /* Attach a palette to the image dataset */
+ if ( H5IMlink_palette( file_id, "Image1", "Pallete" ) < 0 )
+  goto out;
+
+ /* Read image */
+ if ( H5IMget_image_info( file_id, "Image1", &width, &height, &planes, interlace, &npals ) < 0 )
+  goto out;
+
+ if ( H5IMread_image( file_id, "Image1", image_out1 ) < 0 )
+  goto out;
+
+ for (i = 0; i < height*width*planes; i++) {
+  if ( image_in1[i] != image_out1[i] ) {
+    goto out;
+
+  }
+ }
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * True color image test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("true color image");
+
+ /* Write image */
+ if ( H5IMmake_image_24bit( file_id, "Image2", WIDTH, HEIGHT, "INTERLACE_PIXEL", image_in2 ) )
+  goto out;
+
+ /* Read image */
+ if ( H5IMget_image_info( file_id, "Image2", &width, &height, &planes, interlace, &npals ) < 0 )
+  goto out;
+
+ if ( H5IMread_image( file_id, "Image2", image_out2 ) < 0 )
+  goto out;
+
+ for (i = 0; i < height*width*planes; i++) {
+  if ( image_in2[i] != image_out2[i] ) {
+    goto out;
+  }
+ }
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5IMget_npalettes test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("pallete functions");
+
+ if ( H5IMget_npalettes( file_id, "Image1", &npals ) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * H5IMget_palette_info test
+ *-------------------------------------------------------------------------
+ */
+
+ if ( H5IMget_palette_info( file_id, "Image1", 0, pal_dims_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < 2; i++) {
+  if ( pal_dims[i] != pal_dims_out[i] ) {
+    goto out;
+  }
+ }
+
+/*-------------------------------------------------------------------------
+ * H5IMget_palette test
+ *-------------------------------------------------------------------------
+ */
+
+ if ( H5IMget_palette( file_id, "Image1", 0, pal_data_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < 9*3; i++) {
+  if ( pal_data_in[i] != pal_data_out[i] ) {
+   goto out;
+  }
+ }
+
+/*-------------------------------------------------------------------------
+ * H5IMis_image test
+ *-------------------------------------------------------------------------
+ */
+
+ if ( H5IMis_image( file_id, "Image1" ) < 0 )
+  goto out;
+
+ if ( H5IMis_image( file_id, "Image2" ) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * H5IMis_palette test
+ *-------------------------------------------------------------------------
+ */
+
+ if ( H5IMis_palette( file_id, "Pallete" ) < 0 )
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * end tests
+ *-------------------------------------------------------------------------
+ */
+
+     /* Close the file. */
+ if(H5Fclose( file_id ) < 0) goto out;
+
+ PASSED();
+ return 0;
+
+out:
+ H5_FAILED();
+ return 1;
+
+}

Added: packages/hdf5/branches/upstream/current/hl/test/test_lite.c
===================================================================
--- packages/hdf5/branches/upstream/current/hl/test/test_lite.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/hl/test/test_lite.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1072 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdlib.h>
+
+
+#include "H5LT.h"
+
+
+#define FILE_NAME "test_lite1.h5"
+#define FILE_NAME2 "test_lite2.h5"
+
+#define DSET0_NAME "2D int array"
+#define DSET1_NAME "dataset char"
+#define DSET2_NAME "dataset short"
+#define DSET3_NAME "dataset int"
+#define DSET4_NAME "dataset long"
+#define DSET5_NAME "dataset float"
+#define DSET6_NAME "dataset double"
+#define DSET7_NAME "dataset string"
+
+#define DIM 6
+
+#define ATTR1_NAME "attr string"
+#define ATTR2_NAME "attr char"
+#define ATTR3_NAME "attr short"
+#define ATTR4_NAME "attr int"
+#define ATTR5_NAME "attr long"
+#define ATTR6_NAME "attr uchar"
+#define ATTR7_NAME "attr ushort"
+#define ATTR8_NAME "attr uint"
+#define ATTR9_NAME "attr ulong"
+#define ATTR10_NAME "attr float"
+#define ATTR11_NAME "attr double"
+
+static herr_t make_attributes( hid_t loc_id, const char* obj_name );
+
+
+
+/*-------------------------------------------------------------------------
+ * test dataset functions
+ *-------------------------------------------------------------------------
+ */
+
+static int test_dsets( void )
+{
+ int     rank     = 2;
+ hsize_t dims[2]  = {2,3};
+ hid_t   file_id;
+ hid_t   dataset_id;
+ char    data_char_in[DIM]    = {1,2,3,4,5,6};
+ char    data_char_out[DIM];
+ short   data_short_in[DIM]   = {1,2,3,4,5,6};
+ short   data_short_out[DIM];
+ int     data_int_in[DIM]     = {1,2,3,4,5,6};
+ int     data_int_out[DIM];
+ long    data_long_in[DIM]    = {1,2,3,4,5,6};
+ long    data_long_out[DIM];
+ float   data_float_in[DIM]   = {1,2,3,4,5,6};
+ float   data_float_out[DIM];
+ double  data_double_in[DIM]  = {1,2,3,4,5,6};
+ double  data_double_out[DIM];
+	char    *data_string_in = "This is a string";
+	char    data_string_out[20];
+ int     i;
+
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate( FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+/*-------------------------------------------------------------------------
+ * H5LTmake_dataset test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTmake_dataset");
+
+ /* Make dataset */
+ if ( H5LTmake_dataset( file_id, DSET0_NAME, rank, dims, H5T_NATIVE_INT, data_int_in ) < 0 )
+  goto out;
+
+ /* Read dataset using the basic HDF5 API */
+
+ if ( ( dataset_id = H5Dopen ( file_id, DSET0_NAME) ) < 0 )
+  goto out;
+
+ if ( H5Dread ( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data_int_out ) < 0 )
+  goto out;
+
+ if ( H5Dclose( dataset_id ) < 0 )
+  goto out;
+
+ for (i = 0; i < DIM; i++)
+ {
+  if ( data_int_in[i] != data_int_out[i] ) {
+    goto out;
+  }
+ }
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * read using the LT function H5LTread_dataset
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTread_dataset");
+
+ if ( H5LTread_dataset( file_id, DSET0_NAME, H5T_NATIVE_INT, data_int_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < DIM; i++)
+ {
+  if ( data_int_in[i] != data_int_out[i] ) {
+    goto out;
+  }
+ }
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * test the H5LTmake_dataset_ functions
+ *-------------------------------------------------------------------------
+ */
+
+
+/*-------------------------------------------------------------------------
+ * H5LTmake_dataset_char
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTmake_dataset_char");
+
+ /* Make dataset char */
+ if ( H5LTmake_dataset_char( file_id, DSET1_NAME, rank, dims, data_char_in ) < 0 )
+  goto out;
+
+ /* Read dataset */
+ if ( H5LTread_dataset( file_id, DSET1_NAME, H5T_NATIVE_CHAR, data_char_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < DIM; i++)
+ {
+  if ( data_char_in[i] != data_char_out[i] ) {
+    goto out;
+  }
+ }
+
+ /* Read dataset */
+ if ( H5LTread_dataset_char( file_id, DSET1_NAME, data_char_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < DIM; i++)
+ {
+  if ( data_char_in[i] != data_char_out[i] ) {
+    goto out;
+  }
+ }
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * H5LTmake_dataset_short
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTmake_dataset_short");
+
+ /* Make dataset short */
+ if ( H5LTmake_dataset_short( file_id, DSET2_NAME, rank, dims, data_short_in ) < 0 )
+  goto out;
+
+ /* Read dataset */
+ if ( H5LTread_dataset( file_id, DSET2_NAME, H5T_NATIVE_SHORT, data_short_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < DIM; i++)
+ {
+  if ( data_short_in[i] != data_short_out[i] ) {
+    goto out;
+  }
+ }
+
+ /* Read dataset */
+ if ( H5LTread_dataset_short( file_id, DSET2_NAME, data_short_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < DIM; i++)
+ {
+  if ( data_short_in[i] != data_short_out[i] ) {
+    goto out;
+  }
+ }
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTmake_dataset_int
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTmake_dataset_int");
+
+ /* Make dataset int */
+ if ( H5LTmake_dataset_int( file_id, DSET3_NAME, rank, dims, data_int_in ) < 0 )
+  goto out;
+
+ /* Read dataset */
+ if ( H5LTread_dataset( file_id, DSET3_NAME, H5T_NATIVE_INT, data_int_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < DIM; i++)
+ {
+  if ( data_int_in[i] != data_int_out[i] ) {
+    goto out;
+  }
+ }
+
+ /* Read dataset */
+ if ( H5LTread_dataset_int( file_id, DSET3_NAME, data_int_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < DIM; i++)
+ {
+  if ( data_int_in[i] != data_int_out[i] ) {
+    goto out;
+  }
+ }
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * H5LTmake_dataset_long
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTmake_dataset_long");
+
+ /* Make dataset long */
+ if ( H5LTmake_dataset_long( file_id, DSET4_NAME, rank, dims, data_long_in ) < 0 )
+  goto out;
+
+ /* Read dataset */
+ if ( H5LTread_dataset( file_id, DSET4_NAME, H5T_NATIVE_LONG, data_long_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < DIM; i++)
+ {
+  if ( data_long_in[i] != data_long_out[i] ) {
+    goto out;
+  }
+ }
+
+  /* Read dataset */
+ if ( H5LTread_dataset_long( file_id, DSET4_NAME, data_long_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < DIM; i++)
+ {
+  if ( data_long_in[i] != data_long_out[i] ) {
+    goto out;
+  }
+ }
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * H5LTmake_dataset_float
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTmake_dataset_float");
+
+ /* Make dataset float */
+ if ( H5LTmake_dataset_float( file_id, DSET5_NAME, rank, dims, data_float_in ) < 0 )
+  goto out;
+
+ /* Read dataset */
+ if ( H5LTread_dataset( file_id, DSET5_NAME, H5T_NATIVE_FLOAT, data_float_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < DIM; i++)
+ {
+  if ( data_float_in[i] != data_float_out[i] ) {
+    goto out;
+  }
+ }
+
+  /* Read dataset */
+ if ( H5LTread_dataset_float( file_id, DSET5_NAME, data_float_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < DIM; i++)
+ {
+  if ( data_float_in[i] != data_float_out[i] ) {
+    goto out;
+  }
+ }
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * H5LTmake_dataset_double
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTmake_dataset_double");
+
+ /* Make dataset double */
+ if ( H5LTmake_dataset_double( file_id, DSET6_NAME, rank, dims, data_double_in ) < 0 )
+  goto out;
+
+ /* Read dataset */
+ if ( H5LTread_dataset( file_id, DSET6_NAME, H5T_NATIVE_DOUBLE, data_double_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < DIM; i++)
+ {
+  if ( data_double_in[i] != data_double_out[i] ) {
+    goto out;
+  }
+ }
+
+  /* Read dataset */
+ if ( H5LTread_dataset_double( file_id, DSET6_NAME, data_double_out ) < 0 )
+  goto out;
+
+ for (i = 0; i < DIM; i++)
+ {
+  if ( data_double_in[i] != data_double_out[i] ) {
+    goto out;
+  }
+ }
+
+	PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * H5LTmake_dataset_string
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTmake_dataset_string");
+
+ /* Make dataset string */
+ if ( H5LTmake_dataset_string(file_id,DSET7_NAME,data_string_in) < 0 )
+  goto out;
+
+ /* Read dataset */
+ if ( H5LTread_dataset_string(file_id,DSET7_NAME,data_string_out) < 0 )
+  goto out;
+
+	if ( strcmp(data_string_in,data_string_out) != 0 )
+		goto out;
+
+
+
+/*-------------------------------------------------------------------------
+ * end tests
+ *-------------------------------------------------------------------------
+ */
+
+ /* Close the file. */
+ H5Fclose( file_id );
+
+ PASSED();
+
+
+ return 0;
+
+out:
+ /* Close the file. */
+ H5_FAILED();
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * test attribute functions
+ *-------------------------------------------------------------------------
+ */
+
+static int test_attr( void )
+{
+
+ hid_t   file_id;
+ hid_t   dataset_id;
+ hid_t   group_id;
+ hid_t   space_id;
+ hsize_t dims[1] = { 5 };
+
+ /* Create a new file using default properties. */
+ file_id = H5Fcreate( FILE_NAME2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+
+/*-------------------------------------------------------------------------
+ * Create a dataset named "dset" on the root group
+ *-------------------------------------------------------------------------
+ */
+
+ /* Create the data space  */
+ if ((space_id = H5Screate_simple( 1, dims, NULL ))<0) goto out;
+
+ /* Create the dataset */
+ if ((dataset_id = H5Dcreate( file_id , "dset", H5T_NATIVE_INT, space_id,
+  H5P_DEFAULT ))<0) goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+
+/*-------------------------------------------------------------------------
+ * Create a group named "grp" on the root group
+ *-------------------------------------------------------------------------
+ */
+
+ /* Create a group. */
+ if ((group_id = H5Gcreate( file_id, "grp", 0 ))<0)
+  goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+
+/*-------------------------------------------------------------------------
+ *
+ * Create attributes in the root group
+	* Note that we are calling the H5LTset_attribute functions with the name "."
+ *
+ *-------------------------------------------------------------------------
+ */
+ if (make_attributes( file_id, "." )<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ *
+ * Create attributes in the dataset "dset"
+ *
+ *-------------------------------------------------------------------------
+ */
+ if (make_attributes( file_id, "dset" )<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ *
+ * Create attributes in the group "grp"
+	*
+ *-------------------------------------------------------------------------
+ */
+ if (make_attributes( file_id, "grp" )<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * end
+ *-------------------------------------------------------------------------
+ */
+ /* Close the file. */
+ H5Fclose( file_id );
+
+ return 0;
+
+out:
+ /* Close the file. */
+	H5Fclose( file_id );
+ H5_FAILED();
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * make_attributes
+ *-------------------------------------------------------------------------
+ */
+
+static herr_t make_attributes( hid_t loc_id, const char* obj_name )
+{
+
+ int         rank_out;
+ hsize_t     *dims_out = 0;
+ H5T_class_t type_class;
+ size_t      type_size;
+ int         i;
+
+ char    attr_str_in[]     = {"My attribute"};
+ char    attr_str_out[20];
+ char    attr_char_in[5]   = {1,2,3,4,5};
+ char    attr_char_out[5];
+ short   attr_short_in[5]  = {1,2,3,4,5};
+ short   attr_short_out[5];
+ int     attr_int_in[5]    = {1,2,3,4,5};
+ int     attr_int_out[5];
+ long    attr_long_in[5]   = {1,2,3,4,5};
+ long    attr_long_out[5];
+ float   attr_float_in[5]  = {1,2,3,4,5};
+ float   attr_float_out[5];
+ double  attr_double_in[5] = {1,2,3,4,5};
+ double  attr_double_out[5];
+ unsigned char    attr_uchar_in[5]   = {1,2,3,4,5};
+ unsigned char    attr_uchar_out[5];
+ unsigned short   attr_ushort_in[5]  = {1,2,3,4,5};
+ unsigned short   attr_ushort_out[5];
+ unsigned int     attr_uint_in[5]    = {1,2,3,4,5};
+ unsigned int     attr_uint_out[5];
+ unsigned long    attr_ulong_in[5]   = {1,2,3,4,5};
+ unsigned long    attr_ulong_out[5];
+
+/*-------------------------------------------------------------------------
+ * H5LTset_attribute_string test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTset_attribute_string");
+
+ /* Set the attribute */
+ if ( H5LTset_attribute_string( loc_id, obj_name, ATTR1_NAME, attr_str_in ) < 0 )
+  return -1;
+
+	PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTset_attribute_string test
+ *-------------------------------------------------------------------------
+ */
+
+	TESTING("H5LTget_attribute_string");
+
+
+ /* Get the attribute */
+ if ( H5LTget_attribute_string( loc_id, obj_name, ATTR1_NAME, attr_str_out ) < 0 )
+  return -1;
+
+ if ( strcmp( attr_str_in, attr_str_out ) != 0 )
+ {
+  return -1;
+ }
+
+	PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * H5LTset_attribute_char test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTset_attribute_char");
+
+ /* Set the attribute */
+ if ( H5LTset_attribute_char( loc_id, obj_name, ATTR2_NAME, attr_char_in, 5 ) < 0 )
+  return -1;
+
+	PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTget_attribute_char test
+ *-------------------------------------------------------------------------
+ */
+
+	TESTING("H5LTget_attribute_char");
+
+ /* Get the attribute */
+ if ( H5LTget_attribute_char( loc_id, obj_name, ATTR2_NAME, attr_char_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_char_in[i] != attr_char_out[i] ) {
+    return -1;
+   }
+  }
+
+	/* Get the attribute */
+ if ( H5LTget_attribute( loc_id, obj_name, ATTR2_NAME, H5T_NATIVE_CHAR, attr_char_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_char_in[i] != attr_char_out[i] ) {
+    return -1;
+   }
+  }
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTset_attribute_short test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTset_attribute_short");
+
+ /* Set the attribute */
+ if ( H5LTset_attribute_short( loc_id, obj_name, ATTR3_NAME, attr_short_in, 5 ) < 0 )
+  return -1;
+
+	PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * H5LTget_attribute_short test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTget_attribute_short");
+
+ /* Get the attribute */
+ if ( H5LTget_attribute_short( loc_id, obj_name, ATTR3_NAME, attr_short_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_short_in[i] != attr_short_out[i] ) {
+    return -1;
+   }
+  }
+
+	/* Get the attribute */
+ if ( H5LTget_attribute( loc_id, obj_name, ATTR3_NAME, H5T_NATIVE_SHORT, attr_short_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_short_in[i] != attr_short_out[i] ) {
+    return -1;
+   }
+  }
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * H5LTset_attribute_int test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTset_attribute_int");
+
+ /* Set the attribute */
+ if ( H5LTset_attribute_int( loc_id, obj_name, ATTR4_NAME, attr_int_in, 5 ) < 0 )
+  return -1;
+
+	PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTget_attribute_int test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTget_attribute_int");
+
+ /* Get the attribute */
+ if ( H5LTget_attribute_int( loc_id, obj_name, ATTR4_NAME, attr_int_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_int_in[i] != attr_int_out[i] ) {
+    return -1;
+   }
+  }
+
+	/* Get the attribute */
+ if ( H5LTget_attribute( loc_id, obj_name, ATTR4_NAME, H5T_NATIVE_INT, attr_int_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_int_in[i] != attr_int_out[i] ) {
+    return -1;
+   }
+  }
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTset_attribute_long test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTset_attribute_long");
+
+ /* Set the attribute */
+ if ( H5LTset_attribute_long( loc_id, obj_name, ATTR5_NAME, attr_long_in, 5 ) < 0 )
+  return -1;
+
+	PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTget_attribute_long test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTget_attribute_long");
+
+ /* Get the attribute */
+ if ( H5LTget_attribute_long( loc_id, obj_name, ATTR5_NAME, attr_long_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_long_in[i] != attr_long_out[i] ) {
+    return -1;
+   }
+  }
+
+	/* Get the attribute */
+ if ( H5LTget_attribute( loc_id, obj_name, ATTR5_NAME, H5T_NATIVE_LONG, attr_long_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_long_in[i] != attr_long_out[i] ) {
+    return -1;
+   }
+  }
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTset_attribute_uchar test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTset_attribute_uchar");
+
+ /* Set the attribute */
+ if ( H5LTset_attribute_uchar( loc_id, obj_name, ATTR6_NAME, attr_uchar_in, 5 ) < 0 )
+  return -1;
+
+	PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTget_attribute_uchar test
+ *-------------------------------------------------------------------------
+ */
+
+	TESTING("H5LTget_attribute_uchar");
+
+ /* Get the attribute */
+ if ( H5LTget_attribute_uchar( loc_id, obj_name, ATTR6_NAME, attr_uchar_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_uchar_in[i] != attr_uchar_out[i] ) {
+    return -1;
+   }
+  }
+
+	/* Get the attribute */
+ if ( H5LTget_attribute( loc_id, obj_name, ATTR6_NAME, H5T_NATIVE_UCHAR, attr_uchar_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_uchar_in[i] != attr_uchar_out[i] ) {
+    return -1;
+   }
+  }
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTset_attribute_ushort test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTset_attribute_ushort");
+
+ /* Set the attribute */
+ if ( H5LTset_attribute_ushort( loc_id, obj_name, ATTR7_NAME, attr_ushort_in, 5 ) < 0 )
+  return -1;
+
+	PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * H5LTget_attribute_ushort test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTget_attribute_ushort");
+
+ /* Get the attribute */
+ if ( H5LTget_attribute_ushort( loc_id, obj_name, ATTR7_NAME, attr_ushort_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_ushort_in[i] != attr_ushort_out[i] ) {
+    return -1;
+   }
+  }
+
+	/* Get the attribute */
+ if ( H5LTget_attribute( loc_id, obj_name, ATTR7_NAME, H5T_NATIVE_USHORT, attr_ushort_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_ushort_in[i] != attr_ushort_out[i] ) {
+    return -1;
+   }
+  }
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * H5LTset_attribute_int test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTset_attribute_uint");
+
+ /* Set the attribute */
+ if ( H5LTset_attribute_uint( loc_id, obj_name, ATTR8_NAME, attr_uint_in, 5 ) < 0 )
+  return -1;
+
+	PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTget_attribute_int test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTget_attribute_uint");
+
+ /* Get the attribute */
+ if ( H5LTget_attribute_uint( loc_id, obj_name, ATTR8_NAME, attr_uint_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_uint_in[i] != attr_uint_out[i] ) {
+    return -1;
+   }
+  }
+
+	/* Get the attribute */
+ if ( H5LTget_attribute( loc_id, obj_name, ATTR8_NAME, H5T_NATIVE_UINT, attr_uint_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_uint_in[i] != attr_uint_out[i] ) {
+    return -1;
+   }
+  }
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTset_attribute_ulong test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTset_attribute_ulong");
+
+ /* Set the attribute */
+ if ( H5LTset_attribute_ulong( loc_id, obj_name, ATTR9_NAME, attr_ulong_in, 5 ) < 0 )
+  return -1;
+
+	PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTget_attribute_long test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTget_attribute_ulong");
+
+ /* Get the attribute */
+ if ( H5LTget_attribute_ulong( loc_id, obj_name, ATTR9_NAME, attr_ulong_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_ulong_in[i] != attr_ulong_out[i] ) {
+    return -1;
+   }
+  }
+
+	/* Get the attribute */
+ if ( H5LTget_attribute( loc_id, obj_name, ATTR9_NAME, H5T_NATIVE_ULONG, attr_ulong_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_ulong_in[i] != attr_ulong_out[i] ) {
+    return -1;
+   }
+  }
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * H5LTset_attribute_float test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTset_attribute_float");
+
+ /* Set the attribute */
+ if ( H5LTset_attribute_float( loc_id, obj_name, ATTR10_NAME, attr_float_in, 5 ) < 0 )
+  return -1;
+
+	PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTget_attribute_float test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTget_attribute_float");
+
+
+ /* Get the attribute */
+ if ( H5LTget_attribute_float( loc_id, obj_name, ATTR10_NAME, attr_float_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_float_in[i] != attr_float_out[i] ) {
+    return -1;
+   }
+  }
+
+	/* Get the attribute */
+ if ( H5LTget_attribute( loc_id, obj_name, ATTR10_NAME, H5T_NATIVE_FLOAT, attr_float_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_float_in[i] != attr_float_out[i] ) {
+    return -1;
+   }
+  }
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTset_attribute_double test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTset_attribute_double");
+
+ /* Set the attribute */
+ if ( H5LTset_attribute_double( loc_id, obj_name, ATTR11_NAME, attr_double_in, 5 ) < 0 )
+  return -1;
+
+	PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTget_attribute_double test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTget_attribute_double");
+
+ /* Get the attribute */
+ if ( H5LTget_attribute_double( loc_id, obj_name, ATTR11_NAME, attr_double_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_double_in[i] != attr_double_out[i] ) {
+    return -1;
+   }
+  }
+
+ /* Get the attribute */
+ if ( H5LTget_attribute( loc_id, obj_name, ATTR11_NAME, H5T_NATIVE_DOUBLE, attr_double_out ) < 0 )
+  return -1;
+
+ for (i = 0; i < 5; i++)
+  {
+   if ( attr_double_in[i] != attr_double_out[i] ) {
+    return -1;
+   }
+  }
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * H5LTget_attribute_ndims test
+ *-------------------------------------------------------------------------
+ */
+
+
+ TESTING("H5LTget_attribute_ndims");
+
+ if ( H5LTget_attribute_ndims( loc_id, obj_name, ATTR2_NAME, &rank_out ) < 0 )
+  return -1;
+
+ if ( rank_out != 1 ) {
+  return -1;
+ }
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * H5LTget_attribute_info test
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5LTget_attribute_info");
+
+ dims_out = malloc( sizeof(hsize_t) * rank_out );
+
+ if ( H5LTget_attribute_info( loc_id, obj_name, ATTR2_NAME, dims_out, &type_class,
+       &type_size) < 0 )
+  return -1;
+
+  for (i = 0; i < rank_out; i++)
+  {
+   if ( dims_out[i] != 5 ) {
+    return -1;
+   }
+  }
+
+ if ( type_class != H5T_INTEGER ) {
+   return -1;
+  }
+
+ if ( dims_out )
+  free( dims_out );
+
+  PASSED();
+
+ return 0;
+}
+
+/*-------------------------------------------------------------------------
+ * the main program
+ *-------------------------------------------------------------------------
+ */
+
+int main( void )
+{
+ int  nerrors=0;
+
+ /* test dataset functions */
+ nerrors += test_dsets();
+
+ /* test attribute functions */
+ nerrors += test_attr();
+
+ /* check for errors */
+ if (nerrors)
+  goto error;
+
+ return 0;
+
+error:
+ return 1;
+
+
+}
+

Added: packages/hdf5/branches/upstream/current/hl/test/test_table.c
===================================================================
--- packages/hdf5/branches/upstream/current/hl/test/test_table.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/hl/test/test_table.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1601 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "H5TA.h"
+
+#include <stdlib.h>
+#include <assert.h>
+
+#define TEST_FILE_BE "test_table_be.hdf5"
+#define TEST_FILE_LE "test_table_le.hdf5"
+#define TEST_FILE_CRAY "test_table_cray.hdf5"
+
+/* Compiler optimization on Cray X1s can cause this file not to compile.
+ * Turn it off.
+ */
+#ifdef __crayx1
+#pragma OPTIMIZE OFF
+#endif
+
+/*-------------------------------------------------------------------------
+ * Table API test
+ *
+ * Functions tested:
+ *
+ * H5TBmake_table
+ * H5TBread_table
+ * H5TBwrite_records
+ * H5TBread_records
+ * H5TBappend_records
+ * H5TBinsert_record
+ * H5TBdelete_record
+ * H5TBcombine_tables
+ * H5TBwrite_fields_name
+ * H5TBread_fields_name
+ * H5TBwrite_fields_index
+ * H5TBinsert_field
+ * H5TBdelete_field
+ * H5TBget_table_info
+ * H5TBget_field_info
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define TITLE "Title"
+#define NFIELDS  (hsize_t)5
+#define NRECORDS (hsize_t)8
+#define TESTING2(WHAT) {printf("%-70s", "Testing     " WHAT); fflush(stdout);}
+
+/*-------------------------------------------------------------------------
+ * structure used for all tests, a particle with properties
+ *-------------------------------------------------------------------------
+ */
+typedef struct particle_t
+{
+ char   name[16];
+ long   longi;
+ float  pressure;
+ double temperature;
+ int    lati;
+} particle_t;
+
+/*-------------------------------------------------------------------------
+ * local auxiliary functions
+ *-------------------------------------------------------------------------
+ */
+
+static hid_t h5file_open(const char *fname, unsigned flags);
+static int cmp_par(hsize_t i, hsize_t j, particle_t *rbuf, particle_t *wbuf );
+static int compare_deleted(hsize_t rrecords, hsize_t dstart, hsize_t drecords,
+                           particle_t *rbuf, particle_t *wbuf);
+
+/*-------------------------------------------------------------------------
+ * a subset of particle_t, with latitude and longitude fields
+ *-------------------------------------------------------------------------
+ */
+ typedef struct position_t
+ {
+  long   longi;
+  int    lati;
+ } position_t;
+
+/*-------------------------------------------------------------------------
+ * a subset of particle_t, with name and pressure fields
+ *-------------------------------------------------------------------------
+ */
+ typedef struct namepressure_t
+ {
+  char   name[16];
+  float  pressure;
+ } namepressure_t;
+
+/*-------------------------------------------------------------------------
+ * an extended particle, used in the insert field test
+ *-------------------------------------------------------------------------
+ */
+ typedef struct particle2_t
+ {
+  char   name[16];
+  long   longi;
+  float  pressure;
+  double temperature;
+  int    lati;
+  int    new_field;
+ } particle2_t;
+
+/*-------------------------------------------------------------------------
+ * a particle with one field less, used in the delete field test
+ *-------------------------------------------------------------------------
+ */
+ typedef struct particle3_t
+ {
+  char   name[16];
+  long   longi;
+  double temperature;
+  int    lati;
+ } particle3_t;
+
+
+/*-------------------------------------------------------------------------
+ * the test program
+ *-------------------------------------------------------------------------
+ */
+
+int test_table(hid_t fid, int write)
+{
+ /* identifiers */
+ hid_t       fid1;
+ hid_t       fid2;
+ hsize_t     chunk_size=10;
+ int         compress=0;
+ int         *fill=NULL;
+ particle_t  fill1[1] = { {"no data",-1, -99.0f, -99.0, -1} };
+ int         fill1_new[1] = { -100 };
+ hsize_t     position;
+ char        tname[20];
+
+ /* write, read, append, delete, insert some records and fields */
+ hsize_t start;
+ hsize_t wstart;
+ hsize_t rstart;
+ hsize_t istart;
+ hsize_t dstart;
+ hsize_t nrecords;
+ hsize_t rrecords;
+ hsize_t wrecords;
+ hsize_t arecords;
+ hsize_t irecords;
+ hsize_t drecords;
+ hsize_t nfields;
+ hsize_t rfields;
+ hsize_t i, j;
+ hsize_t start1;      /* record to start reading from 1st table */
+ hsize_t start2;      /* record to start writing in 2nd table */
+
+/*-------------------------------------------------------------------------
+ * read, write, insert, append buffers
+ *-------------------------------------------------------------------------
+ */
+ particle_t  rbuf[NRECORDS+4];
+ particle2_t rbuf2[NRECORDS];
+ particle3_t rbuf3[NRECORDS];
+ particle_t  rbufc[NRECORDS*2];
+ particle_t  abuf[2]={{"eight",80,8.0f,80.0,80},{"nine",90,9.0f,90.0,90}};
+ particle_t  ibuf[2]={{"zero", 0, 0.0f, 0.0, 0},{"zero", 0, 0.0f, 0.0, 0}};
+ particle_t  wbufd[NRECORDS];
+ particle_t  wbuf[NRECORDS] = {
+ {"zero", 0, 0.0f, 0.0, 0,},
+ {"one",  10, 1.0f, 10.0, 10},
+ {"two",  20, 2.0f, 20.0, 20},
+ {"three",30, 3.0f, 30.0, 30},
+ {"four", 40, 4.0f, 40.0, 40},
+ {"five", 50, 5.0f, 50.0, 50},
+ {"six",  60, 6.0f, 60.0, 60},
+ {"seven",70, 7.0f, 70.0, 70}
+  };
+ /* buffers for the field "Pressure" and "New_field" */
+ float           pressure_in [NRECORDS] = { 0.0f,1.0f,2.0f,3.0f,4.0f,5.0f,6.0f,7.0f };
+ float           pressure_out [NRECORDS];
+ int             buf_new[NRECORDS] = { 0,1,2,3,4,5,6,7 };
+ /* buffers for the fields "Latitude,Longitude"  */
+ position_t      position_out[NRECORDS];
+ position_t      position_in[NRECORDS] = { {0,0},
+ {10,10},
+ {20,20},
+ {30,30},
+ {40,40},
+ {50,50},
+ {60,60},
+ {70,70} };
+ /* buffers for the fields "Name,Pressure"  */
+ namepressure_t   namepre_out[NRECORDS];
+ namepressure_t   namepre_in[NRECORDS] =
+ { {"zero",0.0f},
+ {"one",   1.0f},
+ {"two",   2.0f},
+ {"three", 3.0f},
+ {"four",  4.0f},
+ {"five",  5.0f},
+ {"six",   6.0f},
+ {"seven", 7.0f},
+  };
+
+
+/*-------------------------------------------------------------------------
+ * initialize table parameters
+ * field offsets and sizes used in the fields functions
+ *-------------------------------------------------------------------------
+ */
+
+ size_t field_offset_pos[2]=
+ {
+  HOFFSET( position_t, longi ),
+  HOFFSET( position_t, lati )
+ };
+ size_t field_offset_namepre[2]=
+ {
+  HOFFSET( namepressure_t, name ),
+  HOFFSET( namepressure_t, pressure )
+ };
+ size_t field_sizes_pos[2]=
+ {
+  sizeof(position_in[0].longi),
+  sizeof(position_in[0].lati)
+ };
+ size_t field_sizes_namepre[2]=
+ {
+  sizeof(namepre_in[0].name),
+  sizeof(namepre_in[0].pressure)
+ };
+ size_t field_sizes_pre[1]=
+ {
+  sizeof(namepre_in[0].pressure)
+ };
+
+/*-------------------------------------------------------------------------
+ * query table test
+ *-------------------------------------------------------------------------
+ */
+  char    **names_out;
+  size_t  sizes_out[NFIELDS];
+  size_t  offset_out[NFIELDS];
+  size_t  size_out;
+
+/*-------------------------------------------------------------------------
+ * initialize table parameters
+ * field indexes (zero based) used in the fields functions
+ * "Name 0","Longitude 1","Pressure 2","Temperature 3","Latitude 4"
+ *-------------------------------------------------------------------------
+ */
+ int    field_index_pre[1]     = { 2 };
+ int    field_index_pos[2]     = { 1,4 };
+ int    field_index_namepre[2] = { 0,2 };
+ int    field_index[NFIELDS]   = { 0,1,2,3,4 };
+
+/*-------------------------------------------------------------------------
+ * initialize table parameters
+ * size and the offsets of struct members in memory
+ * define the inserted field HDF5 type and buffers
+ * these are used for the insert field test
+ *-------------------------------------------------------------------------
+ */
+ hid_t   field_type_new = H5T_NATIVE_INT;
+ size_t  dst_size2 =  sizeof( particle2_t );
+ size_t  dst_offset2[NFIELDS+1] = { HOFFSET( particle2_t, name ),
+                                  HOFFSET( particle2_t, longi ),
+                                  HOFFSET( particle2_t, pressure ),
+                                  HOFFSET( particle2_t, temperature ),
+                                  HOFFSET( particle2_t, lati ),
+                                  HOFFSET( particle2_t, new_field )};
+ size_t dst_sizes2[NFIELDS+1] = { sizeof( rbuf2[0].name),
+                                  sizeof( rbuf2[0].longi),
+                                  sizeof( rbuf2[0].pressure),
+                                  sizeof( rbuf2[0].temperature),
+                                  sizeof( rbuf2[0].lati),
+                                  sizeof( rbuf2[0].new_field)};
+/*-------------------------------------------------------------------------
+ * initialize table parameters
+ * size and the offsets of struct members in memory
+ * these are used for the delete field test
+ *-------------------------------------------------------------------------
+ */
+ size_t dst_size3 =  sizeof( particle3_t );
+ size_t dst_offset3[NFIELDS-1] = { HOFFSET( particle3_t, name ),
+                                   HOFFSET( particle3_t, longi ),
+                                   HOFFSET( particle3_t, temperature ),
+                                   HOFFSET( particle3_t, lati )};
+
+ size_t dst_sizes3[NFIELDS-1] = { sizeof( rbuf3[0].name),
+                                  sizeof( rbuf3[0].longi),
+                                  sizeof( rbuf3[0].temperature),
+                                  sizeof( rbuf3[0].lati)};
+
+
+/*-------------------------------------------------------------------------
+ * initialize table parameters
+ * 1) size and the offsets of struct members in memory
+ * 2) field names
+ * 3) define a HDF5 type for the fields
+ *-------------------------------------------------------------------------
+ */
+
+ size_t type_size_mem =  sizeof( particle_t );
+ size_t field_offset[NFIELDS]=
+ {
+  HOFFSET( particle_t, name ),
+  HOFFSET( particle_t, longi ),
+  HOFFSET( particle_t, pressure ),
+  HOFFSET( particle_t, temperature ),
+  HOFFSET( particle_t, lati )
+ };
+ size_t field_size[NFIELDS] =
+ {
+  sizeof( rbuf[0].name),
+  sizeof( rbuf[0].longi),
+  sizeof( rbuf[0].pressure),
+  sizeof( rbuf[0].temperature),
+  sizeof( rbuf[0].lati)
+ };
+ const char *field_names[NFIELDS]  =
+  { "Name","Longitude","Pressure","Temperature","Latitude" };
+ hid_t field_type[NFIELDS];
+ hid_t string_type = H5Tcopy( H5T_C_S1 );
+ H5Tset_size( string_type, 16 );
+ field_type[0] = string_type;
+ field_type[1] = H5T_NATIVE_LONG;
+ field_type[2] = H5T_NATIVE_FLOAT;
+ field_type[3] = H5T_NATIVE_DOUBLE;
+ field_type[4] = H5T_NATIVE_INT;
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBmake_table
+ * H5TBread_table
+ *
+ *-------------------------------------------------------------------------
+ */
+ if (write)
+ {
+ TESTING2("making table");
+
+ if (H5TBmake_table(TITLE,fid,"table1",NFIELDS,NRECORDS,type_size_mem,
+                    field_names,field_offset,field_type,
+                    chunk_size,fill,compress,wbuf)<0)
+                    goto out;
+ PASSED();
+ }
+
+
+ TESTING2("reading table");
+
+/*-------------------------------------------------------------------------
+ * read the table
+ *-------------------------------------------------------------------------
+ */
+
+ if (H5TBread_table(fid,"table1",type_size_mem,field_offset,field_size,rbuf)<0)
+  goto out;
+
+ /* compare the extracted table with the original array */
+ for( i = 0; i < NRECORDS; i++ )
+ {
+  if (cmp_par(i,i,rbuf,wbuf)<0)
+   goto out;
+ }
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBwrite_records
+ *
+ *-------------------------------------------------------------------------
+ */
+ if (write)
+ {
+ TESTING2("writing records");
+
+ /* create an empty table */
+ if (H5TBmake_table(TITLE,fid,"table2",NFIELDS,NRECORDS,type_size_mem,
+                    field_names,field_offset,field_type,
+                    chunk_size,fill,compress,0)<0)
+                    goto out;
+
+/*-------------------------------------------------------------------------
+ * write records, start at 0, write 8
+ * pos = 0 1 2 3 4 5 6 7
+ * data= 0 1 2 3 4 5 6 7
+ *-------------------------------------------------------------------------
+ */
+ wstart=0; wrecords=8;
+ if (H5TBwrite_records(fid,"table2",wstart,wrecords,type_size_mem,field_offset,
+  field_size,wbuf)<0)
+  goto out;
+
+ /* read it back */
+ if (H5TBread_table(fid,"table2",type_size_mem,field_offset,field_size,rbuf)<0)
+  goto out;
+
+ /* compare  */
+ for( i = 0; i < NRECORDS; i++ )
+ {
+  if (cmp_par(i,i,rbuf,wbuf)<0)
+   goto out;
+ }
+
+ PASSED();
+ }
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBread_records
+ *
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING2("reading records");
+
+/*-------------------------------------------------------------------------
+ * read records, start at 0, read 8
+ * pos = 0 1 2 3 4 5 6 7
+ * data= 0 1 2 3 4 5 6 7
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * for the read test we cannot use "table2" because it has been appended
+ * we use the original "table1" instead
+ *-------------------------------------------------------------------------
+ */
+ if(write)
+  strcpy(tname,"table2");
+ else
+  strcpy(tname,"table1");
+
+ rstart=0; rrecords=8;
+ if (H5TBread_records(fid,tname,rstart,rrecords,type_size_mem,field_offset,
+  field_size,rbuf)<0)
+  goto out;
+
+ /* compare */
+ for( i=rstart; i<rrecords; i++)
+ {
+  if (cmp_par(i,i,rbuf,wbuf)<0)
+   goto out;
+ }
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBappend_records
+ * H5TBread_records
+ *
+ *-------------------------------------------------------------------------
+ */
+ if (write)
+ {
+ TESTING2("appending records");
+
+/*-------------------------------------------------------------------------
+ * append 2 records
+ * pos = 0 1 2 3 4 5 6 7 8 9
+ * data= 0 1 2 3 4 5 6 7 8 9
+ *-------------------------------------------------------------------------
+ */
+ arecords=2;
+ if (H5TBappend_records(fid,"table2",arecords,type_size_mem,field_offset,field_size,abuf)<0)
+  return 1;
+
+ if (H5TBget_table_info(fid,"table2",&rfields,&rrecords)<0)
+  return 1;
+
+ rstart=0; rrecords=NRECORDS+arecords;
+ if (H5TBread_records(fid,"table2",rstart,rrecords,type_size_mem,field_offset,
+  field_size,rbuf)<0)
+  return 1;
+
+ /* compare */
+ wrecords=8;
+ for( i=rstart; i<wrecords; i++)
+ {
+  if (cmp_par(i,i,rbuf,wbuf)<0)
+   goto out;
+ }
+ for( i=wrecords, j=0; i<rrecords; i++,j++)
+ {
+  if (cmp_par(i,j,rbuf,abuf)<0)
+   goto out;
+ }
+ PASSED();
+ }
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBinsert_record
+ * H5TBread_records
+ *
+ *-------------------------------------------------------------------------
+ */
+ if (write)
+ {
+ TESTING2("inserting records");
+
+/*-------------------------------------------------------------------------
+ * insert 2 records
+ * pos = 0 1 2 3 4 5 6 7 8 9 10 11
+ * data= 0 0 0 1 2 3 4 5 6 7 8  9
+ *-------------------------------------------------------------------------
+ */
+ istart=1; irecords=2;
+ if (H5TBinsert_record(fid,"table2",istart,irecords,type_size_mem,field_offset,field_size,ibuf)<0)
+  return 1;
+
+ if (H5TBget_table_info(fid,"table2",&rfields,&rrecords)<0)
+  return 1;
+
+ if (H5TBread_records(fid,"table2",rstart,rrecords,type_size_mem,field_offset,
+  field_size,rbuf)<0)
+  return 1;
+
+ /* compare */
+ for( i=0; i<12; i++)
+ {
+  if (i<istart)
+  {
+   if (cmp_par(i,i,rbuf,wbuf)<0)
+    goto out;
+  }
+  else if (i>=istart && i<istart+irecords)
+  {
+   j=i-istart;
+   if (cmp_par(i,j,rbuf,ibuf)<0)
+    goto out;
+  }
+  else if (i>=istart+irecords && i<10)
+  {
+   j=i-irecords;
+   if (cmp_par(i,j,rbuf,wbuf)<0)
+    goto out;
+  }
+  else
+  {
+   j=i-10;
+   if (cmp_par(i,j,rbuf,abuf)<0)
+    goto out;
+  }
+ }
+ PASSED();
+ }
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBdelete_record
+ * H5TBread_records
+ *
+ *-------------------------------------------------------------------------
+ */
+ if (write)
+ {
+ TESTING2("deleting records");
+
+/*-------------------------------------------------------------------------
+ * Create a table
+ * pos = 0 1 2 3 4 5 6 7
+ * data= 0 1 2 3 4 5 6 7
+ *-------------------------------------------------------------------------
+ */
+ for( i=0; i<NRECORDS; i++)
+  wbufd[i] = wbuf[i];
+
+ if (H5TBmake_table(TITLE,fid,"table3",NFIELDS,NRECORDS,type_size_mem,
+                    field_names,field_offset,field_type,
+                    chunk_size,fill,compress,wbufd)<0)
+                    goto out;
+
+/*-------------------------------------------------------------------------
+ * Delete records, start at 2, delete 3
+ * pos = 0 1 2 3 4
+ * data= 0 1 5 6 7
+ *-------------------------------------------------------------------------
+ */
+ dstart=2; drecords=3;
+ if (H5TBdelete_record(fid,"table3",dstart,drecords)<0)
+  goto out;
+
+ if (H5TBget_table_info(fid,"table3",&rfields,&rrecords)<0)
+  goto out;
+
+ rstart=0;
+ if (H5TBread_records(fid,"table3",rstart,rrecords,type_size_mem,field_offset,
+  field_size,rbuf)<0)
+  goto out;
+
+ /* Compare */
+ nrecords=NRECORDS;
+ assert(rrecords == nrecords-drecords);
+ if (compare_deleted(rrecords,dstart,drecords,rbuf,wbufd)<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * reset compare buffer
+ *-------------------------------------------------------------------------
+ */
+ nrecords=rrecords;
+ for( i=0; i<nrecords; i++)
+  wbufd[i] = rbuf[i];
+
+/*-------------------------------------------------------------------------
+ * Delete records, start at 0, delete 2
+ * pos = 0 1 2
+ * data= 5 6 7
+ *-------------------------------------------------------------------------
+ */
+ dstart=0; drecords=2;
+ if (H5TBdelete_record(fid,"table3",dstart,drecords)<0)
+  goto out;
+
+ if (H5TBget_table_info(fid,"table3",&rfields,&rrecords)<0)
+  goto out;
+
+ rstart=0;
+ if (H5TBread_records(fid,"table3",rstart,rrecords,type_size_mem,field_offset,
+  field_size,rbuf)<0)
+  goto out;
+
+ /* Compare */
+ assert(rrecords == nrecords-drecords);
+ if (compare_deleted(rrecords,dstart,drecords,rbuf,wbufd)<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * reset compare buffer
+ *-------------------------------------------------------------------------
+ */
+ nrecords=rrecords;
+ for( i=0; i<nrecords; i++)
+  wbufd[i] = rbuf[i];
+
+/*-------------------------------------------------------------------------
+ * Delete records, start at 1, delete 1
+ * pos = 0 1
+ * data= 5 7
+ *-------------------------------------------------------------------------
+ */
+ dstart=1; drecords=1;
+ if (H5TBdelete_record(fid,"table3",dstart,drecords)<0)
+  goto out;
+
+ if (H5TBget_table_info(fid,"table3",&rfields,&rrecords)<0)
+  goto out;
+
+ rstart=0;
+ if (H5TBread_records(fid,"table3",rstart,rrecords,type_size_mem,field_offset,
+  field_size,rbuf)<0)
+  goto out;
+
+ /* Compare */
+ assert(rrecords == nrecords-drecords);
+ if (compare_deleted(rrecords,dstart,drecords,rbuf,wbufd)<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * reset compare buffer
+ *-------------------------------------------------------------------------
+ */
+ nrecords=rrecords;
+ for( i=0; i<nrecords; i++)
+  wbufd[i] = rbuf[i];
+
+/*-------------------------------------------------------------------------
+ * Delete records, start at 0, delete 1
+ * pos = 0
+ * data= 7
+ *-------------------------------------------------------------------------
+ */
+ dstart=0; drecords=1;
+ if (H5TBdelete_record(fid,"table3",dstart,drecords)<0)
+  goto out;
+
+ if (H5TBget_table_info(fid,"table3",&rfields,&rrecords)<0)
+  goto out;
+
+ rstart=0;
+ if (H5TBread_records(fid,"table3",rstart,rrecords,type_size_mem,field_offset,
+  field_size,rbuf)<0)
+  goto out;
+
+ /* Compare */
+ assert(rrecords == nrecords-drecords);
+ if (compare_deleted(rrecords,dstart,drecords,rbuf,wbufd)<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * reset compare buffer
+ *-------------------------------------------------------------------------
+ */
+ nrecords=rrecords;
+ for( i=0; i<nrecords; i++)
+  wbufd[i] = rbuf[i];
+
+ /* Read complete table */
+ if (H5TBread_table(fid,"table3",type_size_mem,field_offset,field_size,rbuf)<0)
+  goto out;
+
+ /* Compare */
+ for( i=0; i<rrecords; i++)
+ {
+  if (cmp_par(i,i,rbuf,wbufd)<0)
+   goto out;
+ }
+
+ PASSED();
+ }
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBadd_records_from
+ * H5TBread_records
+ *
+ *-------------------------------------------------------------------------
+ */
+
+ if (write)
+ {
+ TESTING2("adding records");
+
+ /* create 2 tables */
+ if (H5TBmake_table(TITLE,fid,"table4",NFIELDS,NRECORDS,type_size_mem,
+                    field_names,field_offset,field_type,
+                    chunk_size,fill,compress,wbuf)<0)
+                    goto out;
+ if (H5TBmake_table(TITLE,fid,"table5",NFIELDS,NRECORDS,type_size_mem,
+                    field_names,field_offset,field_type,
+                    chunk_size,fill,compress,wbuf)<0)
+                    goto out;
+
+ /* add the records from "table4" to "table5"  */
+ start1    = 3;
+ nrecords  = 2;
+ start2    = 6;
+ if ( H5TBadd_records_from(fid,"table4",start1,nrecords,"table5",start2)<0)
+  goto out;
+
+ /* read final table */
+ if (H5TBread_table(fid,"table5",type_size_mem,field_offset,field_size,rbuf)<0)
+  goto out;
+
+ /* compare */
+ for( i = 0; i < NRECORDS+2; i++ )
+ {
+  if ( i < start2 )
+  {
+   if (cmp_par(i,i,rbuf,wbuf)<0)
+    goto out;
+  }
+  else if ( i < start2+nrecords )
+  {
+   j = i-start1;
+   if (cmp_par(i,j,rbuf,wbuf)<0)
+    goto out;
+  }
+  else
+  {
+   j = i-nrecords;
+   if (cmp_par(i,j,rbuf,wbuf)<0)
+    goto out;
+  }
+ }
+
+ PASSED();
+ }
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBcombine_tables
+ * H5TBread_table
+ *
+ *-------------------------------------------------------------------------
+ */
+
+ if (write)
+ {
+ TESTING2("combining tables");
+
+ /* create 2 tables */
+ if (H5TBmake_table(TITLE,fid,"table6",NFIELDS,NRECORDS,type_size_mem,
+                    field_names,field_offset,field_type,
+                    chunk_size,fill,compress,wbuf)<0)
+                    goto out;
+ if (H5TBmake_table(TITLE,fid,"table7",NFIELDS,NRECORDS,type_size_mem,
+                    field_names,field_offset,field_type,
+                    chunk_size,fill,compress,wbuf)<0)
+                    goto out;
+
+ /* combine the two tables into a third  */
+ if ( H5TBcombine_tables(fid,"table6",fid,"table7","table8")<0)
+  goto out;
+
+ /* read merged table */
+ if (H5TBread_table(fid,"table8",type_size_mem,field_offset,field_size,rbufc)<0)
+  goto out;
+
+ /* compare  */
+ for( i = 0; i < NRECORDS*2; i++ )
+ {
+  if ( i < NRECORDS )
+  {
+   if (cmp_par(i,i,rbufc,wbuf)<0)
+    goto out;
+  }
+  else
+  {
+   if (cmp_par(i,i-NRECORDS,rbufc,wbuf)<0)
+    goto out;
+  }
+ }
+
+/*-------------------------------------------------------------------------
+ * multi file test
+ *-------------------------------------------------------------------------
+ */
+
+ /* create 2 files using default properties. */
+ fid1 = H5Fcreate("combine_tables1.h5",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);
+ fid2 = H5Fcreate("combine_tables2.h5",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);
+
+ /* create 2 tables, one in each file */
+ if (H5TBmake_table(TITLE,fid1,"table1",NFIELDS,NRECORDS,type_size_mem,
+                    field_names,field_offset,field_type,
+                    chunk_size,fill,compress,wbuf)<0)
+                    goto out;
+ if (H5TBmake_table(TITLE,fid2,"table2",NFIELDS,NRECORDS,type_size_mem,
+                    field_names,field_offset,field_type,
+                    chunk_size,fill,compress,wbuf)<0)
+                    goto out;
+
+ /* combine the two tables into a third  */
+ if ( H5TBcombine_tables(fid1,"table1",fid2,"table2","table3")<0)
+  goto out;
+
+ /* read merged table */
+ if (H5TBread_table(fid1,"table3",type_size_mem,field_offset,field_size,rbufc)<0)
+  goto out;
+
+ /* compare  */
+ for( i = 0; i < NRECORDS*2; i++ )
+ {
+  if ( i < NRECORDS )
+  {
+   if (cmp_par(i,i,rbufc,wbuf)<0)
+    goto out;
+  }
+  else
+  {
+   if (cmp_par(i,i-NRECORDS,rbufc,wbuf)<0)
+    goto out;
+  }
+ }
+
+ /* close files */
+ H5Fclose(fid1);
+ H5Fclose(fid2);
+
+ PASSED();
+ }
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBwrite_fields_name
+ *
+ *-------------------------------------------------------------------------
+ */
+ if (write)
+ {
+ TESTING2("writing fields by name");
+
+ /* make an empty table with fill values */
+ if (H5TBmake_table(TITLE,fid,"table9",NFIELDS,NRECORDS,type_size_mem,
+                    field_names,field_offset,field_type,
+                    chunk_size,fill1,compress,0)<0)
+                    goto out;
+
+ /* write the pressure field starting at record 2 */
+ start    = 2;
+ nrecords = 3;
+ if (H5TBwrite_fields_name(fid,"table9","Pressure",start,nrecords,sizeof(float),
+  0,field_sizes_pre,pressure_in)<0)
+  goto out;
+
+ /* write the new longitude and latitude information starting at record 2 */
+ start    = 2;
+ nrecords = 3;
+ if (H5TBwrite_fields_name(fid,"table9","Latitude,Longitude",start,nrecords,sizeof(position_t),
+  field_offset_pos,field_sizes_pos,position_in)<0)
+  goto out;
+
+ /* read back the all table */
+ start    = 0;
+ nrecords = NRECORDS;
+ if (H5TBread_table(fid,"table9",type_size_mem,field_offset,field_size,rbuf)<0)
+  goto out;
+
+ /* compare the read values with the initial values */
+ for( i = 0; i < NRECORDS; i++ )
+ {
+  if ( i >= 2 && i <= 4 )
+  {
+    if ( rbuf[i].lati        != position_in[i].lati ||
+         rbuf[i].longi       != position_in[i].longi ||
+         rbuf[i].pressure    != pressure_in[i] )
+    {
+     fprintf(stderr,"%ld %f %d\n",
+      rbuf[i].longi,rbuf[i].pressure,rbuf[i].lati);
+     fprintf(stderr,"%ld %f %d\n",
+      position_in[i].longi,pressure_in[i],position_in[i].lati);
+      goto out;
+    }
+  }
+ }
+
+ PASSED();
+ } /*write*/
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBread_fields_name
+ *
+ *-------------------------------------------------------------------------
+ */
+ TESTING2("reading fields by name");
+
+/*-------------------------------------------------------------------------
+ * write and read the "Pressure" field
+ *-------------------------------------------------------------------------
+ */
+ if (write)
+ {
+  if (H5TBmake_table(TITLE,fid,"table10",NFIELDS,NRECORDS,type_size_mem,
+   field_names,field_offset,field_type,
+   chunk_size,fill1,compress,0)<0)
+   goto out;
+
+  /* write the pressure field to all the records */
+  start    = 0;
+  nrecords = NRECORDS;
+  if ( H5TBwrite_fields_name(fid,"table10","Pressure",start,nrecords,
+   sizeof( float ),0,field_sizes_pre,pressure_in)<0)
+   goto out;
+ }
+
+ /* read the "Pressure" field */
+ start    = 0;
+ nrecords = NRECORDS;
+ if ( H5TBread_fields_name(fid,"table10","Pressure",start,nrecords,
+  sizeof(float),0,field_sizes_pre,pressure_out)<0)
+  goto out;
+
+ /* Compare the extracted table with the initial values */
+ for( i = 0; i < NRECORDS; i++ )
+ {
+  if ( pressure_out[i] != pressure_in[i] ) {
+   goto out;
+  }
+ }
+
+/*-------------------------------------------------------------------------
+ * Write and read the "Latitude,Longitude" fields
+ *-------------------------------------------------------------------------
+ */
+ if (write)
+ {
+  /* Write the new longitude and latitude information to all the records */
+  start    = 0;
+  nrecords = NRECORDS;
+  if ( H5TBwrite_fields_name(fid,"table10", "Latitude,Longitude", start, nrecords,
+   sizeof( position_t ), field_offset_pos, field_sizes_pos, position_in  ) < 0 )
+   goto out;
+ }/*write*/
+
+ /* Read the "Latitude,Longitude" fields */
+ start    = 0;
+ nrecords = NRECORDS;
+ if ( H5TBread_fields_name( fid, "table10", "Latitude,Longitude",
+  start, nrecords, sizeof(position_t), field_offset_pos, field_sizes_pos, position_out ) < 0 )
+  goto out;
+
+ /* Compare the extracted table with the initial values */
+ for( i = 0; i < NRECORDS; i++ )
+ {
+  if ( position_out[i].lati  != position_in[i].lati ||
+   position_out[i].longi != position_in[i].longi )
+   goto out;
+ }
+
+
+/*-------------------------------------------------------------------------
+ * Write and read the "Name,Pressure" fields
+ *-------------------------------------------------------------------------
+ */
+ if (write)
+ {
+ /* Write the new name and pressure information to all the records */
+ start    = 0;
+ nrecords = NRECORDS;
+ if ( H5TBwrite_fields_name( fid, "table10", "Name,Pressure", start, nrecords,
+   sizeof( namepressure_t ), field_offset_namepre, field_sizes_namepre, namepre_in  ) < 0 )
+  goto out;
+ }/*write*/
+
+ /* Read the "Name,Pressure" fields */
+ start    = 0;
+ nrecords = NRECORDS;
+ if ( H5TBread_fields_name( fid, "table10", "Name,Pressure",
+   start, nrecords, sizeof(namepressure_t), field_offset_namepre, field_sizes_namepre,
+   namepre_out ) < 0 )
+  goto out;
+
+ /* Compare the extracted table with the initial values */
+ for( i = 0; i < NRECORDS; i++ )
+ {
+  if ( ( strcmp( namepre_out[i].name,  namepre_in[i].name ) != 0 ) ||
+         namepre_out[i].pressure != namepre_in[i].pressure ) {
+   goto out;
+  }
+ }
+ /* reset buffer */
+ for( i = 0; i < NRECORDS; i++ )
+ {
+  strcpy( namepre_out[i].name,  "\0" );
+  namepre_out[i].pressure = -1;
+ }
+
+/*-------------------------------------------------------------------------
+ * read only 3 records of the "Name,Pressure" fields, starting at record 2
+ *-------------------------------------------------------------------------
+ */
+ start    = 2;
+ nrecords = 3;
+ if ( H5TBread_fields_name( fid, "table10", "Name,Pressure",
+   start, nrecords, sizeof(namepressure_t), field_offset_namepre,
+   field_sizes_namepre, namepre_out ) < 0 )
+  goto out;
+
+ /* Compare the extracted table with the initial values */
+ for( i = 0; i < 3; i++ )
+ {
+  if ( ( strcmp( namepre_out[i].name,  namepre_in[start+i].name ) != 0 ) ||
+         namepre_out[i].pressure != namepre_in[start+i].pressure ) {
+   goto out;
+  }
+ }
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBwrite_fields_index
+ *
+ *-------------------------------------------------------------------------
+ */
+ if (write)
+ {
+ TESTING2("writing fields by index");
+
+ /* make an empty table */
+ if (H5TBmake_table(TITLE,fid,"table11",NFIELDS,NRECORDS,type_size_mem,
+                    field_names,field_offset,field_type,
+                    chunk_size,fill,compress,NULL)<0)
+                    goto out;
+
+ /* write the pressure field starting at record 2 */
+ nfields  = 1;
+ start    = 2;
+ nrecords = 3;
+ if ( H5TBwrite_fields_index(fid, "table11", nfields, field_index_pre, start, nrecords,
+   sizeof( float ), 0, field_sizes_pre, pressure_in  ) < 0 )
+  goto out;
+
+
+ /* write the new longitude and latitude information starting at record 2  */
+ nfields  = 2;
+ start    = 2;
+ nrecords = 3;
+ if ( H5TBwrite_fields_index(fid, "table11", nfields, field_index_pos, start, nrecords,
+   sizeof( position_t ), field_offset_pos, field_sizes_pos, position_in  ) < 0 )
+  goto out;
+
+ /* read back the all table */
+ nfields  = 5;
+ start    = 0;
+ nrecords = NRECORDS;
+ if ( H5TBread_fields_index(fid, "table11", nfields, field_index,
+                            start, nrecords, type_size_mem, field_offset, field_size, rbuf ) < 0 )
+  goto out;
+
+ /* Compare the extracted table with the initial values */
+ for( i = 0; i < NRECORDS; i++ )
+ {
+  if ( i >= 2 && i <= 4 )
+  {
+    if ( rbuf[i].lati        != position_in[i].lati ||
+         rbuf[i].longi       != position_in[i].longi ||
+         rbuf[i].pressure    != pressure_in[i] )
+   goto out;
+  }
+ }
+
+ PASSED();
+ }
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBread_fields_index
+ *
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING2("reading fields by index");
+
+ if (write)
+ {
+ /* make an empty table */
+ if (H5TBmake_table(TITLE,fid,"table12",NFIELDS,NRECORDS,type_size_mem,
+                    field_names,field_offset,field_type,
+                    chunk_size,fill,compress,NULL)<0)
+                    goto out;
+
+/*-------------------------------------------------------------------------
+ * write and read the "Pressure" field
+ *-------------------------------------------------------------------------
+ */
+
+ /* write the pressure field to all the records */
+ nfields  = 1;
+ start    = 0;
+ nrecords = NRECORDS;
+ if ( H5TBwrite_fields_index(fid, "table12", nfields, field_index_pre, start, nrecords,
+   sizeof( float ), 0, field_sizes_pre, pressure_in  ) < 0 )
+  goto out;
+ }
+
+ /* read the "Pressure" field */
+ nfields  = 1;
+ start    = 0;
+ nrecords = NRECORDS;
+ if ( H5TBread_fields_index(fid, "table12", nfields, field_index_pre,
+   start, nrecords, sizeof(float), 0, field_sizes_pre, pressure_out ) < 0 )
+  goto out;
+
+ /* compare the extracted table with the initial values */
+ for( i = 0; i < NRECORDS; i++ )
+ {
+  if ( pressure_out[i] != pressure_in[i] ) {
+   goto out;
+  }
+ }
+
+/*-------------------------------------------------------------------------
+ * write and read the "Latitude,Longitude" fields
+ *-------------------------------------------------------------------------
+ */
+ if (write)
+ {
+ /* write the new longitude and latitude information to all the records */
+ nfields = 2;
+ start    = 0;
+ nrecords = NRECORDS;
+ if ( H5TBwrite_fields_index(fid, "table12", nfields, field_index_pos, start, nrecords,
+   sizeof( position_t ), field_offset_pos, field_sizes_pos, position_in  ) < 0 )
+  goto out;
+ } /*write*/
+
+ /* read the "Latitude,Longitude" fields */
+ nfields = 2;
+ start    = 0;
+ nrecords = NRECORDS;
+ if ( H5TBread_fields_index(fid, "table12", nfields, field_index_pos,
+   start, nrecords, sizeof(position_t), field_offset_pos, field_sizes_pos, position_out ) < 0 )
+  goto out;
+
+ /* compare the extracted table with the initial values */
+ for( i = 0; i < NRECORDS; i++ )
+ {
+  if ( position_out[i].lati  != position_in[i].lati ||
+       position_out[i].longi != position_in[i].longi ) {
+   goto out;
+  }
+ }
+
+/*-------------------------------------------------------------------------
+ * write and read the "Name,Pressure" fields
+ *-------------------------------------------------------------------------
+ */
+
+ if (write)
+ {
+ /* write the new name and pressure information to all the records */
+ nfields = 2;
+ start    = 0;
+ nrecords = NRECORDS;
+ if ( H5TBwrite_fields_index(fid, "table12", nfields, field_index_namepre, start, nrecords,
+   sizeof( namepressure_t ), field_offset_namepre, field_sizes_namepre, namepre_in  ) < 0 )
+  goto out;
+ }
+
+ /* read the "Name,Pressure" fields */
+ nfields = 2;
+ start    = 0;
+ nrecords = NRECORDS;
+ if ( H5TBread_fields_index(fid, "table12", nfields, field_index_namepre,
+   start, nrecords, sizeof(namepressure_t), field_offset_namepre,
+   field_sizes_namepre, namepre_out ) < 0 )
+  goto out;
+
+ /* compare the extracted table with the initial values */
+ for( i = 0; i < NRECORDS; i++ )
+ {
+  if ( ( strcmp( namepre_out[i].name,  namepre_in[i].name ) != 0 ) ||
+         namepre_out[i].pressure != namepre_in[i].pressure ) {
+   goto out;
+  }
+ }
+
+ /* reset buffer */
+ for( i = 0; i < NRECORDS; i++ )
+ {
+  strcpy( namepre_out[i].name,  "\0" );
+  namepre_out[i].pressure = -1;
+ }
+
+/*-------------------------------------------------------------------------
+ * read only 3 records of the "Name,Pressure" fields, starting at record 2
+ *-------------------------------------------------------------------------
+ */
+
+ /* write the new name and pressure information to all the records */
+ nfields  = 2;
+ start    = 2;
+ nrecords = 3;
+ if ( H5TBread_fields_index(fid, "table12", nfields, field_index_namepre,
+   start, nrecords, sizeof(namepressure_t), field_offset_namepre,
+   field_sizes_namepre, namepre_out ) < 0 )
+  goto out;
+
+ /* compare the extracted table with the initial values */
+ for( i = 0; i < 3; i++ )
+ {
+  if ( ( strcmp( namepre_out[i].name,  wbuf[start+i].name ) != 0 ) ||
+   namepre_out[i].pressure != wbuf[start+i].pressure ) {
+   goto out;
+  }
+ }
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBinsert_field
+ *
+ *-------------------------------------------------------------------------
+ */
+
+ if (write)
+ {
+ TESTING2("inserting fields");
+
+ /* make a table */
+ if (H5TBmake_table(TITLE,fid,"table13",NFIELDS,NRECORDS,type_size_mem,
+                    field_names,field_offset,field_type,
+                    chunk_size,fill1,compress,wbuf)<0)
+                    goto out;
+
+ /* insert the new field at the end of the field list */
+ position = NFIELDS;
+ if ( H5TBinsert_field( fid, "table13", "New Field", field_type_new, position,
+                        fill1_new, buf_new ) < 0 )
+  goto out;
+
+ /* read the table */
+ if ( H5TBread_table( fid, "table13", dst_size2, dst_offset2, dst_sizes2, rbuf2 ) < 0 )
+  goto out;
+
+ /* compare the extracted table with the original array */
+ for( i = 0; i < NRECORDS; i++ )
+ {
+  if ( ( strcmp( rbuf2[i].name,  wbuf[i].name ) != 0 ) ||
+   rbuf2[i].lati          != wbuf[i].lati ||
+   rbuf2[i].longi         != wbuf[i].longi ||
+   rbuf2[i].pressure      != wbuf[i].pressure ||
+   rbuf2[i].temperature   != wbuf[i].temperature ||
+   rbuf2[i].new_field     != buf_new[i] ) {
+   goto out;
+  }
+ }
+ PASSED();
+ }
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBdelete_field
+ *
+ *-------------------------------------------------------------------------
+ */
+ if (write)
+ {
+ TESTING2("deleting fields");
+
+  /* make a table */
+ if (H5TBmake_table(TITLE,fid,"table14",NFIELDS,NRECORDS,type_size_mem,
+                    field_names,field_offset,field_type,
+                    chunk_size,fill,compress,wbuf)<0)
+                    goto out;
+
+
+ /* delete the field */
+ if ( H5TBdelete_field(fid, "table14", "Pressure" ) < 0 )
+  goto out;
+
+ /* read the table */
+ if ( H5TBread_table(fid, "table14", dst_size3, dst_offset3, dst_sizes3, rbuf3 ) < 0 )
+  goto out;
+
+ /* compare the extracted table with the original array */
+ for( i = 0; i < NRECORDS; i++ )
+ {
+  if ( ( strcmp( rbuf3[i].name, wbuf[i].name ) != 0 ) ||
+         rbuf3[i].lati != wbuf[i].lati ||
+         rbuf3[i].longi != wbuf[i].longi ||
+         rbuf3[i].temperature != wbuf[i].temperature ) {
+   goto out;
+  }
+ }
+
+ PASSED();
+ }
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBget_table_info
+ * H5TBget_field_info
+ *
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING2("getting table info");
+
+ /* get table info  */
+ if ( H5TBget_table_info (fid, "table1", &rfields, &rrecords ) < 0 )
+  goto out;
+
+ if ( NFIELDS != rfields || rrecords != NRECORDS  ) {
+  goto out;
+ }
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ *
+ * Functions tested:
+ *
+ * H5TBget_field_info
+ *
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING2("getting field info");
+
+ /* alocate */
+ names_out = malloc( sizeof(char*) * (size_t)NFIELDS );
+ for ( i = 0; i < NFIELDS; i++)
+ {
+  names_out[i] = malloc( sizeof(char) * 255 );
+ }
+
+ /* Get field info */
+ if ( H5TBget_field_info(fid, "table1", names_out, sizes_out, offset_out, &size_out ) < 0 )
+  goto out;
+
+ for ( i = 0; i < NFIELDS; i++)
+ {
+  if ( (strcmp( field_names[i], names_out[i] ) != 0)) {
+   goto out;
+  }
+ }
+
+ /* release */
+ for ( i = 0; i < NFIELDS; i++)
+ {
+  free ( names_out[i] );
+ }
+ free ( names_out );
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * end
+ *-------------------------------------------------------------------------
+ */
+ return 0;
+out:
+ H5_FAILED();
+ return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * the main program
+ *-------------------------------------------------------------------------
+ */
+
+int main(void)
+{
+ hid_t    fid;  /* identifier for the file */
+ unsigned flags=H5F_ACC_RDONLY;
+
+/*-------------------------------------------------------------------------
+ * test1: create a file for the write/read test
+ *-------------------------------------------------------------------------
+ */
+
+ /* create a file using default properties */
+ fid=H5Fcreate("test_table.h5",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);
+
+ puts("Testing table with file creation mode (read/write in native architecture):");
+
+ /* test, do write */
+ if (test_table(fid,1)<0)
+  goto out;
+
+ /* close */
+ H5Fclose(fid);
+
+/*-------------------------------------------------------------------------
+ * test2: open a file written in test1 on a big-endian machine
+ *-------------------------------------------------------------------------
+ */
+ puts("Testing table with file open mode (read big-endian data):");
+
+ fid=h5file_open(TEST_FILE_BE,flags);
+
+ /* test, do not write */
+ if (test_table(fid,0)<0)
+  goto out;
+
+ /* close */
+ H5Fclose(fid);
+
+/*-------------------------------------------------------------------------
+ * test3: open a file written in test1 on a little-endian machine
+ *-------------------------------------------------------------------------
+ */
+ puts("Testing table with file open mode (read little-endian data):");
+
+ fid=h5file_open(TEST_FILE_LE,flags);
+
+ /* test, do not write */
+ if (test_table(fid,0)<0)
+  goto out;
+
+ /* close */
+ H5Fclose(fid);
+
+/*-------------------------------------------------------------------------
+ * test4: open a file written in test1 on the Cray T3 machine
+ *-------------------------------------------------------------------------
+ */
+ puts("Testing table with file open mode (read Cray data):");
+
+ fid=h5file_open(TEST_FILE_CRAY,flags);
+
+ /* test, do not write */
+ if (test_table(fid,0)<0)
+  goto out;
+
+ /* close */
+ H5Fclose(fid);
+
+ return 0;
+out:
+ H5Fclose(fid);
+ return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * function to open an HDF5 file and return its file identifier
+ *-------------------------------------------------------------------------
+ */
+static hid_t h5file_open(const char *fname, unsigned flags)
+{
+
+ hid_t fid;                        /* identifier for the file */
+ char  *srcdir = getenv("srcdir"); /* the source directory */
+ char  data_file[512]="";          /* buffer to hold name of existing file */
+
+ /* compose the name of the file to open, using the srcdir, if appropriate */
+ if (srcdir){
+  strcpy(data_file,srcdir);
+  strcat(data_file,"/");
+ }
+ strcat(data_file,fname);
+
+ /* open */
+ if((fid=H5Fopen(data_file,flags,H5P_DEFAULT))<0) {
+  fprintf(stderr,"Error: Cannot open file <%s>\n",data_file );
+  exit(1);
+ }
+
+ return fid;
+}
+
+/*-------------------------------------------------------------------------
+ * function that compares one particle
+ *-------------------------------------------------------------------------
+ */
+static int cmp_par(hsize_t i, hsize_t j, particle_t *rbuf, particle_t *wbuf )
+{
+ if ( ( strcmp( rbuf[i].name, wbuf[j].name ) != 0 ) ||
+  rbuf[i].lati != wbuf[j].lati ||
+  rbuf[i].longi != wbuf[j].longi ||
+  rbuf[i].pressure != wbuf[j].pressure ||
+  rbuf[i].temperature != wbuf[j].temperature ) {
+  fprintf(stderr,"read and write buffers have differences\n");
+  fprintf(stderr,"%s %ld %f %f %d\n",
+   rbuf[i].name,rbuf[i].longi,rbuf[i].pressure,rbuf[i].temperature,rbuf[i].lati);
+  fprintf(stderr,"%s %ld %f %f %d\n",
+   wbuf[j].name,wbuf[j].longi,wbuf[j].pressure,wbuf[j].temperature,wbuf[j].lati);
+  return -1;
+ }
+ return 0;
+}
+
+/*-------------------------------------------------------------------------
+ * function to compare deleted records
+ *-------------------------------------------------------------------------
+ */
+static int compare_deleted(hsize_t rrecords, hsize_t dstart, hsize_t drecords,
+                           particle_t *rbuf, particle_t *wbuf)
+{
+ hsize_t i,j;
+ for( i=0; i<rrecords; i++)
+ {
+  if (i<dstart)
+  {
+   if (cmp_par(i,i,rbuf,wbuf)<0)
+    return -1;
+  }
+  else
+  {
+   j=i+drecords;
+   if (cmp_par(i,j,rbuf,wbuf)<0)
+    return -1;
+  }
+ }
+ return 0;
+}
+

Added: packages/hdf5/branches/upstream/current/hl/test/test_table_be.hdf5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/hl/test/test_table_be.hdf5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/hl/test/test_table_cray.hdf5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/hl/test/test_table_cray.hdf5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/hl/test/test_table_le.hdf5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/hl/test/test_table_le.hdf5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/perform/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/perform/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,315 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+iopipe.lo: \
+   $(srcdir)/iopipe.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+chunk.lo: \
+   $(srcdir)/chunk.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+overhead.lo: \
+   $(srcdir)/overhead.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+zip_perf.lo: \
+   $(srcdir)/zip_perf.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/tools/lib/h5tools_utils.h
+perf_meta.lo: \
+   $(srcdir)/perf_meta.c \
+   $(top_srcdir)/test/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+pio_perf.lo: \
+   $(srcdir)/pio_perf.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+pio_engine.lo: \
+   $(srcdir)/pio_engine.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+pio_timer.lo: \
+   $(srcdir)/pio_timer.c \
+   $(srcdir)/pio_timer.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h

Added: packages/hdf5/branches/upstream/current/perform/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/perform/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,84 @@
+##
+## 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.
+##
+## HDF5 Library Performance Makefile(.in)
+##
+top_srcdir=@top_srcdir@
+top_builddir=..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Add include directory to the C preprocessor flags and the hdf5 library
+## to the library list.
+CPPFLAGS=-I. -I$(srcdir) -I../src -I$(top_srcdir)/src -I$(top_srcdir)/test \
+    -I$(top_srcdir)/tools/lib @CPPFLAGS@
+LIBHDF5=../src/libhdf5.la
+LIBH5TEST=../test/libh5test.la
+LIBTOOLS=../tools/lib/libh5tools.la
+
+## These are the programs that `make all' or `make tests' will build and which
+## `make check' will run. List them in the order they should be run.
+TEST_PROGS_PARA=h5perf
+TEST_PROGS=iopipe chunk overhead zip_perf perf_meta
+
+PUB_PROGS=h5perf
+
+## These are the files that `make clean' (and derivatives) will remove from
+## this directory.
+CLEAN=*.h5 *.raw *.dat x-gnuplot
+
+## List all source files here.  The list of object files will be
+## created by replacing the `.c' with a `.o'.  This list is necessary
+## for building automatic dependencies.
+PIO_PERF_SRC=pio_perf.c pio_engine.c pio_timer.c
+PIO_PERF_OBJ=$(PIO_PERF_SRC:.c=.lo)
+
+TEST_SRC_PARA=$(PIO_PERF_SRC)
+
+TEST_SRC=iopipe.c chunk.c overhead.c zip_perf.c perf_meta.c $(TEST_SRC_PARA)
+TEST_OBJ=$(TEST_SRC:.c=.lo)
+
+## How to build the programs... they all depend on the hdf5 library,
+## and most depend on the testhdf5 library as well.
+$(TEST_PROGS) $(TEST_PROGS_PARA): $(LIBHDF5) $(LIBH5TEST)
+
+h5perf: $(PIO_PERF_OBJ)
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(PIO_PERF_OBJ) $(LIBH5TEST) \
+	$(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+perf: perf.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ perf.lo $(LIBH5TEST) $(LIBHDF5) \
+	$(LDFLAGS) $(LIBS)
+
+mpi-perf: mpi-perf.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ mpi-perf.lo $(LIBH5TEST) $(LIBHDF5) \
+	$(LDFLAGS) $(LIBS)
+
+iopipe: iopipe.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ iopipe.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+chunk: chunk.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ chunk.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+overhead: overhead.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ overhead.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+zip_perf: zip_perf.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ zip_perf.lo $(LIBH5TEST) \
+	$(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+perf_meta: perf_meta.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ perf_meta.lo $(LIBH5TEST) $(LIBHDF5) \
+	$(LDFLAGS) $(LIBS)
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/perform/benchpar.c
===================================================================
--- packages/hdf5/branches/upstream/current/perform/benchpar.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/benchpar.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,494 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <assert.h>
+#include <math.h>
+
+#include "hdf5.h"
+
+/* Local macros */
+
+/* defines for type of VFL driver to use */
+#define FACC_DEFAULT    0
+#define FACC_MPIO       1
+#define FACC_MPIPOSIX   2
+
+/* Defines for computing performance information */
+#define ONE_KB              1024
+#define ONE_MB              (ONE_KB * ONE_KB)
+#define ONE_GB              (ONE_MB * ONE_KB)
+
+/* report 0.0 in case t is zero too */
+#define MB_PER_SEC(bytes,t) ((fabs(t)<0.0000000001) ? 0.0 : ((((double)bytes) / ONE_MB) / (t)))
+
+/* Control default behavior (with no command line arguments) */
+#define DEFAULT_RANK    3
+#define DEFAULT_DIM     1024
+#define DEFAULT_PREFIX      "/tmp"
+#define DEFAULT_USERNAME    "koziol"
+#define DEFAULT_FILENAME    "benchpar.h5"
+#define DEFAULT_SLICE   0
+#define DEFAULT_C_TYPE      int
+#define DEFAULT_HDF5_DATATYPE   H5T_NATIVE_INT  /* Keep this in sync with the DEFAULT_C_TYPE */
+#define DEFAULT_DATASET_NAME    "Dataset"
+#define DEFAULT_VFL_DRIVER      FACC_MPIO
+#define DEFAULT_PAR_MODE        H5FD_MPIO_COLLECTIVE
+#define DEFAULT_CHUNK_STORAGE   0
+#define DEFAULT_ITER    3
+
+/* MPI info */
+int mpi_rank, mpi_size;
+int mpi_namelen;
+char mpi_name[MPI_MAX_PROCESSOR_NAME];
+
+/* Usage information */
+static void usage(void)
+{
+    printf("usage: benchpar [-d <# of dims>] [-s <dim_size>] [-f <file name>] [-h]\n");
+    printf("            [-S <slice dim>] [-p] [-I] [-c] [-i <# of iterations>\n");
+    printf("    -c              - Use chunked storage for dataset with 1-1 exact\n");
+    printf("                      mapping of chunks to hyperslabs\n");
+    printf("                      Default: off (i.e. contiguous storage)\n");
+    printf("    -d <# of dims>  - Number of dimensions of the dataset\n");
+    printf("                      Default: 3\n");
+    printf("    -f <file name>  - Set the name of the test file\n");
+    printf("                      Default: /tmp/<login>/benchpar.h5\n");
+    printf("    -h              - Prints usage information\n");
+    printf("    -i <# of iters> - Set the number of test iterations to perform\n");
+    printf("                      Default: 3\n");
+    printf("    -I              - Use independent parallel I/O\n");
+    printf("                      Default: use collective parallel I/O\n");
+    printf("    -p              - Use MPI-posix VFL driver\n");
+    printf("                      Default: use MPI-I/O VFL driver\n");
+    printf("    -s <dim_size>   - Set the size of each of the dataset's dimensions\n");
+    printf("                      Default: 1024\n");
+    printf("    -S <slice dim>  - Set the dimension to slice the dataset along\n");
+    printf("                      Default: 0\n");
+} /* end usage() */
+
+/* Create & initialize file creation property list with appropriate properties */
+static hid_t create_fcpl(void)
+{
+    hid_t fcpl;         /* File creation property list */
+
+    fcpl=H5Pcreate(H5P_FILE_CREATE);
+    assert(fcpl>0);
+
+    return(fcpl);
+} /* end create_fcpl() */
+
+/* Create & initialize file access property list with appropriate properties */
+static hid_t create_fapl(MPI_Comm comm, MPI_Info info, int acc_type )
+{
+    hid_t fapl;                 /* File access property list    */
+    hbool_t use_gpfs = FALSE;   /* Use GPFS hints               */
+    herr_t ret;                 /* Generic return value         */
+
+    fapl = H5Pcreate (H5P_FILE_ACCESS);
+    assert(fapl>0);
+
+    /* set parallel access with communicator, using MPI-I/O driver */
+    if (acc_type == FACC_MPIO) {
+	ret = H5Pset_fapl_mpio(fapl, comm, info);
+        assert(ret>=0);
+    } /* end if */
+
+    /* set parallel access with communicator, using MPI-posix driver */
+    if (acc_type == FACC_MPIPOSIX) {
+	ret = H5Pset_fapl_mpiposix(fapl, comm, use_gpfs);
+        assert(ret>=0);
+    } /* end if */
+
+    return (fapl);
+} /* end create_fapl() */
+
+/* Create & initialize dataset creation property list with appropriate properties */
+static hid_t create_dcpl(unsigned use_chunks, int rank, hsize_t *dims)
+{
+    hid_t dcpl;         /* Dataset creation property list */
+    herr_t ret;         /* Generic return value */
+
+    dcpl=H5Pcreate(H5P_DATASET_CREATE);
+    assert(dcpl>0);
+
+    /* Check if the dataset should be chunked */
+    if(use_chunks) {
+        ret = H5Pset_chunk(dcpl, rank, dims);
+        assert(ret>=0);
+    } /* end if */
+
+    return(dcpl);
+} /* end create_dcpl() */
+
+/* Create & initialize dataset transfer property list with appropriate properties */
+static hid_t create_dxpl(H5FD_mpio_xfer_t par_mode)
+{
+    hid_t dxpl;         /* Dataset creation property list */
+    herr_t ret;         /* Generic return value */
+
+    dxpl=H5Pcreate(H5P_DATASET_XFER);
+    assert(dxpl>0);
+
+    /* Set collective I/O on this transfer */
+    ret=H5Pset_dxpl_mpio(dxpl, par_mode);
+    assert(ret>=0);
+
+    return(dxpl);
+} /* end create_dcpl() */
+
+int main(int argc, char *argv[])
+{
+    int curr_arg;       /* Current command line argument being processed */
+    int rank;           /* Number of dimensions of the dataset */
+    hsize_t dim_size;   /* Dimension size of each dimension */
+    hsize_t *dims;      /* Pointer to array of dimensions */
+    hssize_t *start;    /* Pointer to array of starting locations for hyperslab selection */
+    hsize_t *count;     /* Pointer to array of counts for hyperslab selection */
+    unsigned slice_dim; /* Dimension to slice up */
+    char *file_name=NULL;    /* Name of file to put data into */
+    hid_t fcpl;         /* HDF5 File creation property list ID */
+    hid_t fapl;         /* HDF5 File access property list ID */
+    hid_t dcpl;         /* HDF5 Dataset creation property list ID */
+    hid_t dxpl;         /* HDF5 Dataset transfer property list ID */
+    hid_t fid;          /* HDF5 file ID */
+    hid_t dsid;         /* HDF5 dataset ID */
+    hid_t file_sid;     /* HDF5 dataspace ID for dataset on disk */
+    hid_t mem_sid;      /* HDF5 dataspace ID for dataset in memory */
+    DEFAULT_C_TYPE *buf;        /* Buffer to write out */
+    hsize_t buf_size;   /* Size of buffer to write */
+    int i;              /* Local index variable */
+    herr_t ret;         /* Generic return value */
+    double start_write_time, end_write_time, elap_write_time;   /* Start, end and elapsed time to write raw data */
+    double tmp_max_write_time;      /* Temporary holders for maximum time for all nodes to perform raw data I/O */
+    double max_write_time=-DBL_MAX, min_write_time=DBL_MAX;      /* Minimum & maximum time for all nodes to perform raw data I/O */
+    double start_file_time, end_file_time, elap_file_time;   /* Start, end and elapsed time from file open to file close */
+    double tmp_max_file_time;        /* Temporary holders for maximum time for all nodes from file open to file close */
+    double max_file_time=-DBL_MAX, min_file_time=DBL_MAX;        /* Minimum & maximum time for all nodes from file open to file close */
+    int vfl_type;       /* Type of VFL driver to use */
+    H5FD_mpio_xfer_t par_mode;  /* Type of parallel I/O to perform */
+    unsigned use_chunks;        /* Whether to use chunks for dataset or not */
+    unsigned num_iter;  /* Number of iterations to perform */
+    unsigned u;         /* Local index variable */
+
+    /* Un-buffer the stdout and stderr */
+    setbuf(stderr, NULL);
+    setbuf(stdout, NULL);
+
+    /* MPI initialization */
+    MPI_Init(&argc,&argv);
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+    MPI_Get_processor_name(mpi_name,&mpi_namelen);
+
+    /* Set some defaults */
+    rank=DEFAULT_RANK;
+    dim_size=DEFAULT_DIM;
+    slice_dim=DEFAULT_SLICE;
+    vfl_type=DEFAULT_VFL_DRIVER;
+    par_mode=DEFAULT_PAR_MODE;
+    use_chunks=DEFAULT_CHUNK_STORAGE;
+    num_iter=DEFAULT_ITER;
+
+    /* Parse command line arguments */
+    if(argc>1) {
+        curr_arg=1;
+        while(curr_arg<argc) {
+            /* Trap any unknown command line parameters */
+            if(argv[curr_arg][0]!='-') {
+                printf("unknown command line parameter: %s\n",argv[curr_arg]);
+                goto done;
+            } /* end if */
+
+            /* Skip over command line flag */
+            curr_arg++;
+
+            switch(argv[curr_arg-1][1]) {
+                case 'c':       /* Use chunked storage for dataset */
+                    use_chunks=1;
+                    break;
+
+                case 'd':       /* Change number of dimensions */
+                    /* Get new number of dimensions */
+                    rank=atoi(argv[curr_arg]);
+                    curr_arg++; /* Skip over number of dimensions */
+
+                    /* Sanity check */
+                    if(rank<=0) {
+                        printf("rank=%d, invalid number of dimensions: %d\n",mpi_rank,rank);
+                        goto done;
+                    } /* end if */
+                    break;
+
+                case 'f':       /* Change test file name */
+                    /* Get new file name */
+                    file_name=strdup(argv[curr_arg]);
+                    curr_arg++; /* Skip over file name from command line */
+                    break;
+
+                case 'h':       /* Print usage information */
+                    usage();
+                    goto done;
+                    break;
+
+                case 'i':       /* Change number of iterations */
+                    /* Get new number of dimensions */
+                    num_iter=atoi(argv[curr_arg]);
+                    curr_arg++; /* Skip over number of iterations */
+
+                    /* Sanity check */
+                    if(num_iter<1) {
+                        printf("rank=%d, invalid number of iterations: %u\n",mpi_rank,num_iter);
+                        goto done;
+                    } /* end if */
+                    break;
+
+                case 'I':       /* Use independent I/O for parallel I/O */
+                    par_mode=H5FD_MPIO_INDEPENDENT;
+                    break;
+
+                case 'p':       /* Use MPI-posix VFL driver */
+                    vfl_type=FACC_MPIPOSIX;
+                    break;
+
+                case 's':       /* Change dimension size */
+                    /* Get new dimension size */
+                    dim_size=atoi(argv[curr_arg]);
+                    curr_arg++; /* Skip over dimension size from command line */
+
+                    /* Sanity check */
+                    if(dim_size<=0) {
+                        printf("rank=%d, invalid dimension size: %ld\n",mpi_rank,(long)dim_size);
+                        goto done;
+                    } /* end if */
+                    break;
+
+                case 'S':       /* Change dimension to slice */
+                    /* Get new dimension to slice */
+                    slice_dim=atoi(argv[curr_arg]);
+                    curr_arg++; /* Skip over slice dimension from command line */
+                    break;
+
+                default:
+                    printf("rank=%d, unknown command line parameter: %s\n",mpi_rank,argv[curr_arg-1]);
+                    goto done;
+            } /* end switch */
+        } /* end while */
+    } /* end if */
+
+    /* Sanity check */
+    if(slice_dim>=rank) {
+        printf("rank=%d, error, slice dim larger than rank: slice_dim=%d, rank=%d\n",mpi_rank,slice_dim,rank);
+        goto done;
+    } /* end if */
+
+    /* Set rest of defaults */
+    if(file_name==NULL) {
+        char *login;    /* Pointer to login name */
+
+        /* Get the login name for this user */
+        login=getlogin();
+        if(login==NULL)
+            login=DEFAULT_USERNAME;
+
+        /* Allocate enough room for the prefix, the login name, two '/'s, the filename and the string terminator */
+        file_name=malloc(strlen(DEFAULT_PREFIX)+1+strlen(login)+1+strlen(DEFAULT_FILENAME)+1);
+        strcpy(file_name,DEFAULT_PREFIX);
+        strcat(file_name,"/");
+        strcat(file_name,login);
+        strcat(file_name,"/");
+        strcat(file_name,DEFAULT_FILENAME);
+    } /* end if */
+
+    /* Allocate memory for this process's portion of dataset */
+    buf_size=sizeof(DEFAULT_C_TYPE);
+    for(i=0; i<rank; i++)
+        buf_size *= dim_size;
+    buf_size /= mpi_size;
+
+    /* Sanity check for overflow */
+    assert((hsize_t)((size_t)buf_size)==buf_size);
+
+    buf=malloc((size_t)buf_size);
+    assert(buf);
+
+    /* Initialize dataset portion to something unique for each process */
+    memset(buf,mpi_rank,(size_t)buf_size);
+
+    for(u=0; u<num_iter; u++) {
+        /* Create file creation property list */
+        fcpl=create_fcpl();
+        assert(fcpl>0);
+
+        /* Create file access property list */
+        fapl=create_fapl(MPI_COMM_WORLD,MPI_INFO_NULL,vfl_type);
+        assert(fapl>0);
+
+        /* Get file start time */
+        start_file_time = MPI_Wtime();
+
+        /* Create file */
+        fid=H5Fcreate(file_name,H5F_ACC_TRUNC,fcpl,fapl);
+        assert(fid>0);
+
+        /* Close file creation property list */
+        ret=H5Pclose(fcpl);
+        assert(ret>=0);
+
+        /* Close file access property list */
+        ret=H5Pclose(fapl);
+        assert(ret>=0);
+
+        /* Create dataspace for dataset on disk */
+        dims=malloc(sizeof(hsize_t)*rank);
+        assert(dims);
+        for(i=0; i<rank; i++)
+            dims[i]=dim_size;
+
+        file_sid=H5Screate_simple(rank,dims,NULL);
+        assert(file_sid>0);
+
+        /* Create dataspace for buffer in memory */
+        for(i=0; i<rank; i++)
+            dims[i]=dim_size;
+        dims[slice_dim] /= mpi_size;
+
+        mem_sid=H5Screate_simple(rank,dims,NULL);
+        assert(mem_sid>0);
+
+        /* Create dataset creation property list */
+        dcpl=create_dcpl(use_chunks,rank,dims);
+        assert(dcpl>0);
+
+        /* Create dataset */
+        dsid=H5Dcreate(fid,DEFAULT_DATASET_NAME,DEFAULT_HDF5_DATATYPE,file_sid,dcpl);
+        assert(dsid>0);
+
+        /* Close dataset creation property list */
+        ret=H5Pclose(dcpl);
+        assert(ret>=0);
+
+        /* Select hyperslab for file dataspace */
+        start=malloc(sizeof(hssize_t)*rank);
+        assert(start);
+        count=malloc(sizeof(hsize_t)*rank);
+        assert(count);
+        for(i=0; i<rank; i++) {
+            start[i]=0;
+            count[i]=dim_size;
+        } /* end for */
+        start[slice_dim]=mpi_rank*(dim_size/mpi_size);
+        count[slice_dim]=dim_size/mpi_size;
+
+        ret = H5Sselect_hyperslab(file_sid,H5S_SELECT_SET,start,NULL,count,NULL);
+        assert(ret>=0);
+
+        /* Create dataset transfer property list */
+        dxpl=create_dxpl(par_mode);
+        assert(dxpl>0);
+
+        /* Get raw data start time */
+        start_write_time = MPI_Wtime();
+
+        /* Write hyperslab to dataset */
+        ret = H5Dwrite(dsid, DEFAULT_HDF5_DATATYPE, mem_sid,
+                       file_sid, dxpl, buf);
+        assert(ret>=0);
+
+        /* Get stop time for raw data timer */
+        end_write_time = MPI_Wtime();
+
+        /* Close dataset transfer property list */
+        ret=H5Pclose(dxpl);
+        assert(ret>=0);
+
+        /* Close memory dataspace */
+        ret=H5Sclose(mem_sid);
+        assert(ret>=0);
+
+        /* Close file dataspace */
+        ret=H5Sclose(file_sid);
+        assert(ret>=0);
+
+        /* Close dataset */
+        ret=H5Dclose(dsid);
+        assert(ret>=0);
+
+        /* Close file */
+        ret=H5Fclose(fid);
+        assert(ret>=0);
+
+        /* Get stop time for file timer */
+        end_file_time = MPI_Wtime();
+
+        /* Compute timing results */
+        elap_write_time=end_write_time-start_write_time;
+        elap_file_time=end_file_time-start_file_time;
+
+        /* Collect the minimum and maximum times by MPI reduces */
+        MPI_Allreduce(&elap_write_time, &tmp_max_write_time, 1, MPI_DOUBLE, MPI_MAX, MPI_COMM_WORLD);
+        MPI_Allreduce(&elap_file_time, &tmp_max_file_time, 1, MPI_DOUBLE, MPI_MAX, MPI_COMM_WORLD);
+
+        /* Track the fastest & slowest total runs */
+        if(tmp_max_write_time>max_write_time)
+            max_write_time=tmp_max_write_time;
+        if(tmp_max_write_time<min_write_time)
+            min_write_time=tmp_max_write_time;
+        if(tmp_max_file_time>max_file_time)
+            max_file_time=tmp_max_file_time;
+        if(tmp_max_file_time<min_file_time)
+            min_file_time=tmp_max_file_time;
+    } /* end for */
+
+    /* Only print information from one node */
+    if(mpi_rank==0) {
+        /* Print information about test */
+        printf("File driver used: %s\n",vfl_type==FACC_MPIO ? "MPI-I/O" : "MPI-posix");
+        printf("Type of parallel access: %s\n",par_mode==H5FD_MPIO_COLLECTIVE ? "Collective" : "Independent");
+        printf("Type of dataset storage: %s\n",use_chunks ? "Chunked" : "Contiguous");
+        printf("Number of processes: %d\n",mpi_size);
+        printf("Element size: %u\n",(unsigned)sizeof(DEFAULT_C_TYPE));
+        printf("# of dimensions: %d\n",rank);
+        printf("Dimension size: %ld\n",(long)dim_size);
+        printf("Dimension sliced: %u\n",slice_dim);
+        printf("Number of elements: %lu\n",(unsigned long)((buf_size/sizeof(DEFAULT_C_TYPE))*mpi_size));
+        printf("Total dataset size (bytes): %lu\n",(unsigned long)(buf_size*mpi_size));
+        printf("Dataset size per process (bytes): %lu\n",(unsigned long)buf_size);
+
+        /* Print timing results */
+        printf("# of iterations: %u\n",num_iter);
+        printf("Maximum raw data write throughput=%6.2f MB/s (%7.3f s)\n",MB_PER_SEC((buf_size*mpi_size),min_write_time),min_write_time);
+        printf("Minimum raw data write throughput=%6.2f MB/s (%7.3f s)\n",MB_PER_SEC((buf_size*mpi_size),max_write_time),max_write_time);
+        printf("Maximum file throughput=%6.2f MB/s (%7.3f s)\n",MB_PER_SEC((buf_size*mpi_size),min_file_time),min_file_time);
+        printf("Minimum file throughput=%6.2f MB/s (%7.3f s)\n",MB_PER_SEC((buf_size*mpi_size),max_file_time),max_file_time);
+    } /* end if */
+
+done:
+    /* Free buffers allocated */
+    if(file_name)
+        free(file_name);
+    if(buf)
+        free(buf);
+    if(dims)
+        free(dims);
+    if(start)
+        free(start);
+    if(count)
+        free(count);
+
+    /* MPI termination */
+    MPI_Finalize();
+    return(0);
+} /* end main() */

Added: packages/hdf5/branches/upstream/current/perform/chunk.c
===================================================================
--- packages/hdf5/branches/upstream/current/perform/chunk.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/chunk.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,561 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <robb at arborea.spizella.com>
+ *              Thursday, May 14, 1998
+ *
+ * Purpose:	Checks the effect of various I/O request sizes and raw data
+ *		cache sizes.  Performance depends on the amount of data read
+ *		from disk and we use a filter to get that number.
+ */
+
+/* See H5private.h for how to include headers */
+#undef NDEBUG
+#include "hdf5.h"
+
+#ifdef H5_STDC_HEADERS
+#   include <assert.h>
+#   include <stdio.h>
+#   include <stdlib.h>
+#   include <string.h>
+#endif
+
+
+#if !defined(H5_HAVE_ATTRIBUTE) || defined __cplusplus
+#   undef __attribute__
+#   define __attribute__(X) /*void*/
+#   define UNUSED /*void*/
+#else
+#   define UNUSED __attribute__((unused))
+#endif
+
+#define FILE_NAME	"chunk.h5"
+#define LINESPOINTS	"lines"
+#define CH_SIZE		100		/*squared in terms of bytes    	*/
+#define DS_SIZE		20		/*squared in terms of chunks	*/
+#define FILTER_COUNTER	305
+#define READ		0
+#define WRITE		1
+#define MIN(X,Y)	((X)<(Y)?(X):(Y))
+#define MAX(X,Y)	((X)>(Y)?(X):(Y))
+#define SQUARE(X)	((X)*(X))
+
+/* The row-major test */
+#define RM_CACHE_STRT	25
+#define RM_CACHE_END	25
+#define RM_CACHE_DELT	5
+#define RM_START	0.50
+#define RM_END	        5.00
+#define RM_DELTA	0.50
+#define RM_W0		0.0
+#define RM_NRDCC	521
+
+/* Diagonal test */
+#define DIAG_CACHE_STRT	25
+#define DIAG_CACHE_END	25
+#define DIAG_CACHE_DELT	5
+#define DIAG_START	0.50
+#define DIAG_END	5.00
+#define DIAG_DELTA	0.50
+/* #define DIAG_W0		0.65 */
+/* #define DIAG_NRDCC		521 */
+
+static size_t	nio_g;
+static hid_t	fapl_g = -1;
+
+/* Local function prototypes */
+static size_t
+counter (unsigned UNUSED flags, size_t cd_nelmts,
+	 const unsigned *cd_values, size_t nbytes,
+	 size_t *buf_size, void **buf);
+
+/* This message derives from H5Z */
+const H5Z_class_t H5Z_COUNTER[1] = {{
+    FILTER_COUNTER,		/* Filter id number		*/
+    "counter",			/* Filter name for debugging	*/
+    NULL,                       /* The "can apply" callback     */
+    NULL,                       /* The "set local" callback     */
+    counter,			/* The actual filter function	*/
+}};
+
+
+/*-------------------------------------------------------------------------
+ * Function:	counter
+ *
+ * Purpose:	Count number of bytes but don't do anything.
+ *
+ * Return:	Success:	src_nbytes-1
+ *
+ *		Failure:	never fails
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 14, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+counter (unsigned UNUSED flags, size_t UNUSED cd_nelmts,
+	 const unsigned UNUSED *cd_values, size_t nbytes,
+	 size_t UNUSED *buf_size, void UNUSED **buf)
+{
+    nio_g += nbytes;
+    return nbytes;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	create_dataset
+ *
+ * Purpose:	Creates a square dataset with square chunks, registers a
+ *		stupid compress/uncompress pair for counting I/O, and
+ *		initializes the dataset.  The chunk size is in bytes, the
+ *		dataset size is in terms of chunks.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 14, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+create_dataset (void)
+{
+    hid_t	file, space, dcpl, dset;
+    hsize_t	size[2];
+    signed char	*buf;
+
+    /* The file */
+    file = H5Fcreate (FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_g);
+
+    /* The data space */
+    size[0] = size[1] = DS_SIZE * CH_SIZE;
+    space = H5Screate_simple (2, size, size);
+
+    /* The storage layout and compression */
+    dcpl = H5Pcreate (H5P_DATASET_CREATE);
+    size[0] = size[1] = CH_SIZE;
+    H5Pset_chunk (dcpl, 2, size);
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    H5Zregister (FILTER_COUNTER, "counter", counter);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    H5Zregister (H5Z_COUNTER);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    H5Pset_filter (dcpl, FILTER_COUNTER, 0, 0, NULL);
+
+    /* The dataset */
+    dset = H5Dcreate (file, "dset", H5T_NATIVE_SCHAR, space, dcpl);
+    assert (dset>=0);
+
+    /* The data */
+    buf = calloc (1, SQUARE (DS_SIZE*CH_SIZE));
+    H5Dwrite (dset, H5T_NATIVE_SCHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
+    free (buf);
+
+    /* Close */
+    H5Dclose (dset);
+    H5Sclose (space);
+    H5Pclose (dcpl);
+    H5Fclose (file);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_rowmaj
+ *
+ * Purpose:	Reads the entire dataset using the specified size-squared
+ *		I/O requests in row major order.
+ *
+ * Return:	Efficiency: data requested divided by data actually read.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 14, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static double
+test_rowmaj (int op, size_t cache_size, size_t io_size)
+{
+    hid_t	file, dset, mem_space, file_space;
+    signed char	*buf = calloc (1, (size_t)(SQUARE(io_size)));
+    hsize_t	i, j, hs_size[2];
+    hsize_t	hs_offset[2];
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int		mdc_nelmts, rdcc_nelmts;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    int		mdc_nelmts;
+    size_t	rdcc_nelmts;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    double	w0;
+
+    H5Pget_cache (fapl_g, &mdc_nelmts, &rdcc_nelmts, NULL, &w0);
+#ifdef RM_W0
+    w0 = RM_W0;
+#endif
+#ifdef RM_NRDCC
+    rdcc_nelmts = RM_NRDCC;
+#endif
+    H5Pset_cache (fapl_g, mdc_nelmts, rdcc_nelmts,
+		  cache_size*SQUARE (CH_SIZE), w0);
+    file = H5Fopen (FILE_NAME, H5F_ACC_RDWR, fapl_g);
+    dset = H5Dopen (file, "dset");
+    file_space = H5Dget_space (dset);
+    nio_g = 0;
+
+    for (i=0; i<CH_SIZE*DS_SIZE; i+=io_size) {
+#if 0
+	fprintf (stderr, "%5d\b\b\b\b\b", (int)i);
+	fflush (stderr);
+#endif
+	for (j=0; j<CH_SIZE*DS_SIZE; j+=io_size) {
+	    hs_offset[0] = i;
+	    hs_size[0] = MIN (io_size, CH_SIZE*DS_SIZE-i);
+	    hs_offset[1] = j;
+	    hs_size[1] = MIN (io_size, CH_SIZE*DS_SIZE-j);
+	    mem_space = H5Screate_simple (2, hs_size, hs_size);
+	    H5Sselect_hyperslab (file_space, H5S_SELECT_SET, hs_offset,
+				 NULL, hs_size, NULL);
+
+	    if (READ==op) {
+		H5Dread (dset, H5T_NATIVE_SCHAR, mem_space, file_space,
+			 H5P_DEFAULT, buf);
+	    } else {
+		H5Dwrite (dset, H5T_NATIVE_SCHAR, mem_space, file_space,
+			  H5P_DEFAULT, buf);
+	    }
+	    H5Sclose (mem_space);
+	}
+    }
+
+    free (buf);
+    H5Sclose (file_space);
+    H5Dclose (dset);
+    H5Fclose (file);
+
+    return (double)SQUARE(CH_SIZE*DS_SIZE)/(double)nio_g;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_diag
+ *
+ * Purpose:	Reads windows diagonally across the dataset.  Each window is
+ *		offset from the previous window by OFFSET in the x and y
+ *		directions.  The reading ends after the (k,k) value is read
+ *		where k is the maximum index in the dataset.
+ *
+ * Return:	Efficiency.
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, May 15, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static double
+test_diag (int op, size_t cache_size, size_t io_size, size_t offset)
+{
+    hid_t	file, dset, mem_space, file_space;
+    hsize_t	i, hs_size[2];
+    hsize_t	nio = 0;
+    hsize_t	hs_offset[2];
+    signed char	*buf = calloc (1, (size_t)(SQUARE (io_size)));
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int		mdc_nelmts, rdcc_nelmts;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    int		mdc_nelmts;
+    size_t	rdcc_nelmts;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    double	w0;
+
+    H5Pget_cache (fapl_g, &mdc_nelmts, &rdcc_nelmts, NULL, &w0);
+#ifdef DIAG_W0
+    w0 = DIAG_W0;
+#endif
+#ifdef DIAG_NRDCC
+    rdcc_nelmts = DIAG_NRDCC;
+#endif
+    H5Pset_cache (fapl_g, mdc_nelmts, rdcc_nelmts,
+		  cache_size*SQUARE (CH_SIZE), w0);
+    file = H5Fopen (FILE_NAME, H5F_ACC_RDWR, fapl_g);
+    dset = H5Dopen (file, "dset");
+    file_space = H5Dget_space (dset);
+    nio_g = 0;
+
+    for (i=0, hs_size[0]=io_size; hs_size[0]==io_size; i+=offset) {
+	hs_offset[0] = hs_offset[1] = i;
+	hs_size[0] = hs_size[1] = MIN (io_size, CH_SIZE*DS_SIZE-i);
+	mem_space = H5Screate_simple (2, hs_size, hs_size);
+	H5Sselect_hyperslab (file_space, H5S_SELECT_SET, hs_offset, NULL,
+			     hs_size, NULL);
+	if (READ==op) {
+	    H5Dread (dset, H5T_NATIVE_SCHAR, mem_space, file_space,
+		     H5P_DEFAULT, buf);
+	} else {
+	    H5Dwrite (dset, H5T_NATIVE_SCHAR, mem_space, file_space,
+		      H5P_DEFAULT, buf);
+	}
+	H5Sclose (mem_space);
+	nio += hs_size[0]*hs_size[1];
+	if (i>0) nio -= SQUARE (io_size-offset);
+    }
+
+    free (buf);
+    H5Sclose (file_space);
+    H5Dclose (dset);
+    H5Fclose (file);
+
+    /*
+     * The extra cast in the following statement is a bug workaround for the
+     * Win32 version 5.0 compiler.
+     * 1998-11-06 ptl
+     */
+    return (double)(hssize_t)nio/(hssize_t)nio_g;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	See file prologue.
+ *
+ * Return:	Success:
+ *
+ *		Failure:
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 14, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main (void)
+{
+    size_t	io_size;
+    double	effic, io_percent;
+    FILE	*f, *d;
+    size_t	cache_size;
+    double	w0;
+
+    /*
+     * Create a global file access property list.
+     */
+    fapl_g = H5Pcreate (H5P_FILE_ACCESS);
+    H5Pget_cache (fapl_g, NULL, NULL, NULL, &w0);
+
+    /* Create the file */
+    create_dataset ();
+    f = fopen ("x-gnuplot", "w");
+
+    printf("Test      %8s %8s %8s\n", "CacheSz", "ChunkSz",  "Effic");
+    printf("--------- -------- -------- --------\n");
+
+#if 1
+    /*
+     * Test row-major reading of the dataset with various sizes of request
+     * windows.
+     */
+    if (RM_CACHE_STRT==RM_CACHE_END) {
+	fprintf (f, "set yrange [0:1.2]\n");
+	fprintf (f, "set ytics 0, 0.1, 1\n");
+	fprintf (f, "set xlabel \"%s\"\n",
+		 "Request size as a fraction of chunk size");
+	fprintf (f, "set ylabel \"Efficiency\"\n");
+	fprintf (f, "set title \"Cache %d chunks, w0=%g, "
+		 "Size=(total=%d, chunk=%d)\"\n",
+		 RM_CACHE_STRT, w0, DS_SIZE*CH_SIZE, CH_SIZE);
+    } else {
+	fprintf (f, "set autoscale\n");
+	fprintf (f, "set hidden3d\n");
+    }
+
+    fprintf (f, "set terminal postscript\nset output \"x-rowmaj-rd.ps\"\n");
+    fprintf (f, "%s \"x-rowmaj-rd.dat\" title \"RowMaj-Read\" with %s\n",
+	     RM_CACHE_STRT==RM_CACHE_END?"plot":"splot",
+	     LINESPOINTS);
+    fprintf (f, "set terminal x11\nreplot\n");
+    d = fopen ("x-rowmaj-rd.dat", "w");
+    for (cache_size=RM_CACHE_STRT;
+	 cache_size<=RM_CACHE_END;
+	 cache_size+=RM_CACHE_DELT) {
+	for (io_percent=RM_START; io_percent<=RM_END; io_percent+=RM_DELTA) {
+	    io_size = MAX (1, (size_t)(CH_SIZE*io_percent));
+	    printf ("Rowmaj-rd %8d %8.2f", (int)cache_size, io_percent);
+	    fflush (stdout);
+	    effic = test_rowmaj (READ, cache_size, io_size);
+	    printf (" %8.2f\n", effic);
+	    if (RM_CACHE_STRT==RM_CACHE_END) {
+		fprintf (d, "%g %g\n", io_percent, effic);
+	    } else {
+		fprintf (d, "%g\n", effic);
+	    }
+	}
+	fprintf (d, "\n");
+    }
+    fclose (d);
+    fprintf (f, "pause -1\n");
+#endif
+
+#if 1
+    /*
+     * Test row-major writing of the dataset with various sizes of request
+     * windows.
+     */
+    if (RM_CACHE_STRT==RM_CACHE_END) {
+	fprintf (f, "set yrange [0:1.2]\n");
+	fprintf (f, "set ytics 0, 0.1, 1\n");
+	fprintf (f, "set xlabel \"%s\"\n",
+		 "Request size as a fraction of chunk size");
+	fprintf (f, "set ylabel \"Efficiency\"\n");
+	fprintf (f, "set title \"Cache %d chunks,w0=%g, "
+		 "Size=(total=%d, chunk=%d)\"\n",
+		 RM_CACHE_STRT, w0, DS_SIZE*CH_SIZE, CH_SIZE);
+    } else {
+	fprintf (f, "set autoscale\n");
+	fprintf (f, "set hidden3d\n");
+    }
+
+    fprintf (f, "set terminal postscript\nset output \"x-rowmaj-wr.ps\"\n");
+    fprintf (f, "%s \"x-rowmaj-wr.dat\" title \"RowMaj-Write\" with %s\n",
+	     RM_CACHE_STRT==RM_CACHE_END?"plot":"splot",
+	     LINESPOINTS);
+    fprintf (f, "set terminal x11\nreplot\n");
+    d = fopen ("x-rowmaj-wr.dat", "w");
+    for (cache_size=RM_CACHE_STRT;
+	 cache_size<=RM_CACHE_END;
+	 cache_size+=RM_CACHE_DELT) {
+	for (io_percent=RM_START; io_percent<=RM_END; io_percent+=RM_DELTA) {
+	    io_size = MAX (1, (size_t)(CH_SIZE*io_percent));
+	    printf ("Rowmaj-wr %8d %8.2f", (int)cache_size, io_percent);
+	    fflush (stdout);
+	    effic = test_rowmaj (WRITE, cache_size, io_size);
+	    printf (" %8.2f\n", effic);
+	    if (RM_CACHE_STRT==RM_CACHE_END) {
+		fprintf (d, "%g %g\n", io_percent, effic);
+	    } else {
+		fprintf (d, "%g\n", effic);
+	    }
+	}
+	fprintf (d, "\n");
+    }
+    fclose (d);
+    fprintf (f, "pause -1\n");
+#endif
+
+#if 1
+    /*
+     * Test diagonal read
+     */
+    if (DIAG_CACHE_STRT==DIAG_CACHE_END) {
+	fprintf (f, "set yrange [0:1.2]\n");
+	fprintf (f, "set ytics 0, 0.1, 1\n");
+	fprintf (f, "set xlabel \"%s\"\n",
+		 "Request size as a fraction of chunk size");
+	fprintf (f, "set ylabel \"Efficiency\"\n");
+	fprintf (f, "set title \"Cache %d chunks,w0=%g, "
+		 "Size=(total=%d, chunk=%d)\"\n",
+		 DIAG_CACHE_STRT, w0, DS_SIZE*CH_SIZE, CH_SIZE);
+    } else {
+	fprintf (f, "set autoscale\n");
+	fprintf (f, "set hidden3d\n");
+    }
+    fprintf (f, "set terminal postscript\nset output \"x-diag-rd.ps\"\n");
+    fprintf (f, "%s \"x-diag-rd.dat\" title \"Diag-Read\" with %s\n",
+	     DIAG_CACHE_STRT==DIAG_CACHE_END?"plot":"splot", LINESPOINTS);
+    fprintf (f, "set terminal x11\nreplot\n");
+    d = fopen ("x-diag-rd.dat", "w");
+    for (cache_size=DIAG_CACHE_STRT;
+	 cache_size<=DIAG_CACHE_END;
+	 cache_size+=DIAG_CACHE_DELT) {
+	for (io_percent=DIAG_START;
+	     io_percent<=DIAG_END;
+	     io_percent+=DIAG_DELTA) {
+	    io_size = MAX (1, (size_t)(CH_SIZE*io_percent));
+	    printf ("Diag-rd   %8d %8.2f", (int)cache_size, io_percent);
+	    fflush (stdout);
+	    effic = test_diag (READ, cache_size, io_size, MAX (1, io_size/2));
+	    printf (" %8.2f\n", effic);
+	    if (DIAG_CACHE_STRT==DIAG_CACHE_END) {
+		fprintf (d, "%g %g\n", io_percent, effic);
+	    } else {
+		fprintf (d, "%g\n", effic);
+	    }
+	}
+	fprintf (d, "\n");
+    }
+    fclose (d);
+    fprintf (f, "pause -1\n");
+#endif
+
+#if 1
+    /*
+     * Test diagonal write
+     */
+    if (DIAG_CACHE_STRT==DIAG_CACHE_END) {
+	fprintf (f, "set yrange [0:1.2]\n");
+	fprintf (f, "set ytics 0, 0.1, 1\n");
+	fprintf (f, "set xlabel \"%s\"\n",
+		 "Request size as a fraction of chunk size");
+	fprintf (f, "set ylabel \"Efficiency\"\n");
+	fprintf (f, "set title \"Cache %d chunks, w0=%g, "
+		 "Size=(total=%d, chunk=%d)\"\n",
+		 DIAG_CACHE_STRT, w0, DS_SIZE*CH_SIZE, CH_SIZE);
+    } else {
+	fprintf (f, "set autoscale\n");
+	fprintf (f, "set hidden3d\n");
+    }
+    fprintf (f, "set terminal postscript\nset output \"x-diag-wr.ps\"\n");
+    fprintf (f, "%s \"x-diag-wr.dat\" title \"Diag-Write\" with %s\n",
+	     DIAG_CACHE_STRT==DIAG_CACHE_END?"plot":"splot", LINESPOINTS);
+    fprintf (f, "set terminal x11\nreplot\n");
+    d = fopen ("x-diag-wr.dat", "w");
+    for (cache_size=DIAG_CACHE_STRT;
+	 cache_size<=DIAG_CACHE_END;
+	 cache_size+=DIAG_CACHE_DELT) {
+	for (io_percent=DIAG_START;
+	     io_percent<=DIAG_END;
+	     io_percent+=DIAG_DELTA) {
+	    io_size = MAX (1, (size_t)(CH_SIZE*io_percent));
+	    printf ("Diag-wr   %8d %8.2f", (int)cache_size, io_percent);
+	    fflush (stdout);
+	    effic = test_diag (WRITE, cache_size, io_size, MAX (1, io_size/2));
+	    printf (" %8.2f\n", effic);
+	    if (DIAG_CACHE_STRT==DIAG_CACHE_END) {
+		fprintf (d, "%g %g\n", io_percent, effic);
+	    } else {
+		fprintf (d, "%g\n", effic);
+	    }
+	}
+	fprintf (d, "\n");
+    }
+    fclose (d);
+    fprintf (f, "pause -1\n");
+#endif
+
+
+    H5Pclose (fapl_g);
+    fclose (f);
+    return 0;
+}
+

Added: packages/hdf5/branches/upstream/current/perform/gen_report.pl
===================================================================
--- packages/hdf5/branches/upstream/current/perform/gen_report.pl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/gen_report.pl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,293 @@
+#!/usr/bin/perl
+#
+# 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.
+#
+
+#
+#    Generates an ASCII and Excel-importable file of tables representing
+#    the output of running the "pio_perf" command. The name of the input
+#    file is important. The name should reflect the command-line options
+#    used in the performance test. It needs to be of the form:
+#
+#        f#[GMK].i#.d#.X#[GMK].x#[GMK]..*
+#
+#    For example:
+#
+#        PIO_output_f1G.i2.d1.X2M.x128K.frost
+#
+#    for a 1GB sized file ran for 2 iterations with 1 dataset from xfer
+#    buffer size of 128KB to 2MB on the frost machine.
+#
+#    The output file will have the same name as the input, but will append
+#    ".ascii" for the ASCII file and ".excel" for the Excel-importable
+#    file.
+#
+#    The data structure used in this program looks like:
+#
+#        %results = {
+#            num_proc => (
+#                %xfer_size => (
+#                    %posix = {
+#                        'write-only' => ##,
+#                        'write-close' => ##,
+#                        'read-only' => ##,
+#                        'read-close' => ##
+#                    },
+#                    %mpio = {
+#                        'write-only' => ##,
+#                        'write-close' => ##,
+#                        'read-only' => ##,
+#                        'read-close' => ##
+#                    },
+#                    %phdf = {
+#                        'write-only' => ##,
+#                        'write-close' => ##,
+#                        'read-only' => ##,
+#                        'read-close' => ##
+#                    }
+#                )
+#            )
+#        }
+
+if ($#ARGV != 0) {
+	print "gen_report.pl [FILE]\n";
+	exit 1;
+}
+
+my ($ascii_output, $excel_output);
+
+foreach my $arg (@ARGV) {
+	if ($arg !~ /^-/) {
+		$arg =~ /f([0-9]+.)\.i([0-9]+)\.d([0-9]+)\.X([0-9]+.)\.x([0-9]+.)\.(.*)/;
+
+		my $output = "result_f" . $1 . ".X" . $4 . ".x" . $5 . "." . $6;
+
+		$ascii_output = $output . ".ascii";
+		$excel_output = $output . ".excel";
+
+		open(INPUT, "<$arg") or die "error: cannot open file $arg: $!\n";
+		open(ASCII_OUTPUT, ">$ascii_output") or
+				die "error: cannot open file $ascii_output: $!\n";
+		open(EXCEL_OUTPUT, ">$excel_output") or
+				die "error: cannot open file $excel_output: $!\n";
+	} else {
+		die "error: unrecognized option: $arg\n";
+	}
+}
+
+my %results;
+my $num_procs = 0;
+my ($xfer_size, $avg_type, $type);
+
+my $posix = 0, $mpio = 1, $phdf5 = 2;
+
+##"==== End of Parameters ===="
+
+while (<INPUT>) {
+	if (/Number of processors = ([0-9]+)/) {
+		$num_procs = $1;
+	}
+
+	if (/Transfer Buffer Size: ([0-9]+)/) {
+		$xfer_size = $1;
+	}
+
+	$type = $posix if /POSIX/;
+	$type = $mpio if /MPIO/;
+	$type = $phdf5 if /PHDF5/;
+
+	if (/Write Open/) {
+		$avg_type = "write-close";
+	} elsif (/Write/) {
+		$avg_type = "write-only";
+	} elsif (/Read Open/) {
+		$avg_type = "read-close";
+	} elsif (/Read/) {
+		$avg_type = "read-only";
+	}
+
+	if (/Maximum Throughput: ( ?[0-9]+\.[0-9]{2}) MB\/s/) {
+		$results{$num_procs}{$xfer_size}[$type]{$avg_type} = $1;
+	}
+}
+
+sub create_excel_output_header {
+	my $output_header;
+	my $kb = 1024;
+	my $mb = $kb * $kb;
+
+	foreach my $key (sort { $a <=> $b } keys(%{$results{$num_procs}})) {
+		if ($key < $mb) {
+			$key /= $kb;
+			$output_header .= "\t". $key . "K";
+		} else {
+			$key /= $mb;
+			$output_header .= "\t". $key . "M";
+		}
+	}
+
+	$output_header;
+}
+
+sub create_excel_output_string {
+	my ($t) = @_;
+	my $output_content = "";
+
+	foreach my $procs (sort { $b <=> $a } keys(%results)) {
+		$output_content .= "\n$procs Procs";
+		$output_content .= "\n" . create_excel_output_header;
+		$output_content .= "\n  POSIX";
+
+		foreach my $xfer (sort { $a <=> $b } keys(%{$results{$procs}})) {
+			$output_content .= "\t$results{$procs}{$xfer}[0]{$t}";
+		}
+
+		$output_content .= "\n  MPIO";
+
+		foreach my $xfer (sort { $a <=> $b } keys(%{$results{$procs}})) {
+			$output_content .= "\t$results{$procs}{$xfer}[1]{$t}";
+		}
+
+		$output_content .= "\n  PHDF5";
+
+		foreach my $xfer (sort { $a <=> $b } keys(%{$results{$procs}})) {
+			$output_content .= "\t$results{$procs}{$xfer}[2]{$t}";
+		}
+
+		$output_content .= "\n";
+	}
+
+	$output_content;
+}
+
+sub is_defined {
+	my ($t) = @_;
+	my $def = 1;
+
+	foreach my $procs (sort { $b <=> $a } keys(%results)) {
+		foreach my $xfer (sort { $a <=> $b } keys(%{$results{$procs}})) {
+			if (!defined($results{$procs}{$xfer}[0]{$t})) {
+				$def = 0;
+			}
+		}
+
+		foreach my $xfer (sort { $a <=> $b } keys(%{$results{$procs}})) {
+			if (!defined($results{$procs}{$xfer}[0]{$t})) {
+				$def = 0;
+			}
+		}
+
+		foreach my $xfer (sort { $a <=> $b } keys(%{$results{$procs}})) {
+			if (!defined($results{$procs}{$xfer}[0]{$t})) {
+				$def = 0;
+			}
+		}
+	}
+
+	$def;
+}
+
+sub write_excel_file {
+	print EXCEL_OUTPUT "\nWrite-Only\n";
+	print EXCEL_OUTPUT create_excel_output_string("write-only");
+	print EXCEL_OUTPUT "\nWrite-Close\n";
+	print EXCEL_OUTPUT create_excel_output_string("write-close");
+
+	if (is_defined("read-only")) {
+		print EXCEL_OUTPUT "\nRead-Only\n";
+		print EXCEL_OUTPUT create_excel_output_string("read-only");
+		print EXCEL_OUTPUT "\nRead-Close\n";
+		print EXCEL_OUTPUT create_excel_output_string("read-close");
+	}
+}
+
+sub create_ascii_output_header {
+	my $output_header = " " x 12 . "|";
+	my $kb = 1024;
+	my $mb = $kb * $kb;
+
+	foreach my $key (sort { $a <=> $b } keys(%{$results{$num_procs}})) {
+		if ($key < $mb) {
+			$key /= $kb;
+			$output_header = sprintf("$output_header   %-4s   |", $key .  "K");
+		} else {
+			$key /= $mb;
+			$output_header = sprintf("$output_header   %-4s   |", $key .  "M");
+		}
+	}
+
+	$output_header;
+}
+
+sub create_ascii_output_string {
+	my ($t) = @_;
+	my $output_content = "";
+	my $output_header = create_ascii_output_header;
+
+	foreach my $procs (sort { $b <=> $a } keys(%results)) {
+		$output_content .= "\n$procs Procs";
+		$output_content .= "\n$output_header\n";
+		$output_content .= "-" x length($output_header);
+		$output_content .= "\n     POSIX  |";
+
+		foreach my $xfer (sort { $a <=> $b } keys(%{$results{$procs}})) {
+			$output_content = sprintf("$output_content   %-6s |",
+									   $results{$procs}{$xfer}[0]{$t});
+		}
+
+		$output_content .= "\n    ";
+		$output_content .= "-" x (length($output_header) - 4);
+		$output_content .= "\n     MPI/IO |";
+
+		foreach my $xfer (sort { $a <=> $b } keys(%{$results{$procs}})) {
+			$output_content = sprintf("$output_content   %-6s |",
+									   $results{$procs}{$xfer}[1]{$t});
+		}
+
+		$output_content .= "\n    ";
+		$output_content .= "-" x (length($output_header) - 4);
+		$output_content .= "\n     PHDF5  |";
+
+		foreach my $xfer (sort { $a <=> $b } keys(%{$results{$procs}})) {
+			$output_content = sprintf("$output_content   %-6s |",
+									   $results{$procs}{$xfer}[2]{$t});
+		}
+
+		$output_content .= "\n";
+		$output_content .= "=" x length($output_header);
+		$output_content .= "\n";
+	}
+
+	$output_content;
+}
+
+sub write_ascii_file {
+	print ASCII_OUTPUT "\nWrite-Only";
+	print ASCII_OUTPUT "\n----------\n";
+	print ASCII_OUTPUT create_ascii_output_string("write-only");
+	print ASCII_OUTPUT "\n\nWrite-Close";
+	print ASCII_OUTPUT "\n-----------\n";
+	print ASCII_OUTPUT create_ascii_output_string("write-close");
+
+	if (is_defined("read-only")) {
+		print ASCII_OUTPUT "\n\nRead-Only";
+		print ASCII_OUTPUT "\n---------\n";
+		print ASCII_OUTPUT create_ascii_output_string("read-only");
+		print ASCII_OUTPUT "\n\nRead-Close";
+		print ASCII_OUTPUT "\n----------\n";
+		print ASCII_OUTPUT create_ascii_output_string("read-close");
+	}
+}
+
+write_excel_file;
+write_ascii_file;


Property changes on: packages/hdf5/branches/upstream/current/perform/gen_report.pl
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/perform/iopipe.c
===================================================================
--- packages/hdf5/branches/upstream/current/perform/iopipe.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/iopipe.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,523 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Thursday, March 12, 1998
+ */
+
+/* See H5private.h for how to include headers */
+#include "hdf5.h"
+
+#ifdef H5_HAVE_WINSOCK_H
+#include <Winsock.h>
+#endif
+
+/*Winsock.h includes windows.h, due to the different value of
+WINVER, windows.h should be put before H5private.h. Kent yang 6/21/2001*/
+
+#if defined (__MWERKS__)
+#ifdef H5_HAVE_SYS_TIMEB
+#undef H5_HAVE_SYS_TIMEB
+#endif
+#ifdef H5_HAVE_SYSTEM
+#undef H5_HAVE_SYSTEM
+#endif
+#endif /* __MWERKS__*/
+
+#include "H5private.h"
+
+#ifdef H5_HAVE_SYS_TIMEB
+#include <sys/timeb.h>
+#endif
+
+
+#define RAW_FILE_NAME	"iopipe.raw"
+#define HDF5_FILE_NAME	"iopipe.h5"
+#define HEADING		"%-16s"
+#define PROGRESS	'='
+
+#if 0
+/* Normal testing */
+#define REQUEST_SIZE_X	4579
+#define REQUEST_SIZE_Y	4579
+#define NREAD_REQUESTS	45
+#define NWRITE_REQUESTS	45
+#else
+/* Speedy testing */
+#define REQUEST_SIZE_X	1000
+#define REQUEST_SIZE_Y	1000
+#define NREAD_REQUESTS	45
+#define NWRITE_REQUESTS	45
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * Function:	print_stats
+ *
+ * Purpose:	Prints statistics
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, March 12, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifdef H5_HAVE_GETRUSAGE
+static void
+print_stats (const char *prefix,
+	     struct rusage *r_start, struct rusage *r_stop,
+	     struct timeval *t_start, struct timeval *t_stop,
+	     size_t nbytes)
+#else /* H5_HAVE_GETRUSAGE */
+static void
+print_stats (const char *prefix,
+	     struct timeval *r_start, struct timeval *r_stop,
+	     struct timeval *t_start, struct timeval *t_stop,
+	     size_t nbytes)
+#endif /* H5_HAVE_GETRUSAGE */
+{
+    double	e_time, bw;
+#ifdef H5_HAVE_GETRUSAGE
+    double	u_time, s_time;
+
+    u_time = ((double)(r_stop->ru_utime.tv_sec)+
+	      (double)(r_stop->ru_utime.tv_usec)/1000000.0) -
+	     ((double)(r_start->ru_utime.tv_sec)+
+	      (double)(r_start->ru_utime.tv_usec)/1000000.0);
+
+    s_time = ((double)(r_stop->ru_stime.tv_sec)+
+	      (double)(r_stop->ru_stime.tv_usec)/1000000.0) -
+	     ((double)(r_start->ru_stime.tv_sec)+
+	      (double)(r_start->ru_stime.tv_usec)/1000000.0);
+#endif
+#ifndef H5_HAVE_SYS_TIMEB
+    e_time = ((double)(t_stop->tv_sec)+
+	      (double)(t_stop->tv_usec)/1000000.0) -
+	     ((double)(t_start->tv_sec)+
+	      (double)(t_start->tv_usec)/1000000.0);
+#else
+    e_time = ((double)(t_stop->tv_sec)+
+	      (double)(t_stop->tv_usec)/1000.0) -
+	     ((double)(t_start->tv_sec)+
+	      (double)(t_start->tv_usec)/1000.0);
+#endif
+    bw = (double)nbytes / e_time;
+
+#ifdef H5_HAVE_GETRUSAGE
+    printf (HEADING "%1.2fuser %1.2fsystem %1.2felapsed %1.2fMB/s\n",
+	    prefix, u_time, s_time, e_time, bw/(1024*1024));
+#else
+    printf (HEADING "%1.2felapsed %1.2fMB/s\n",
+	    prefix, e_time, bw/(1024*1024));
+#endif
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	synchronize
+ *
+ * Purpose:
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, March 12, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+synchronize (void)
+{
+#ifdef H5_HAVE_SYSTEM
+#if defined(WIN32) && ! defined(__CYGWIN__)
+	_flushall();
+#else
+    HDsystem ("sync");
+    HDsystem ("df >/dev/null");
+#endif
+#if 0
+    /*
+     * This works well on Linux to get rid of all cached disk buffers. The
+     * number should be approximately the amount of RAM in MB.  Do not
+     * include swap space in that amount or the command will fail.
+     */
+    system ("/sbin/swapout 128");
+#endif
+#endif
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:
+ *
+ * Return:	Success:
+ *
+ *		Failure:
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, March 12, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main (void)
+{
+    static hsize_t	size[2] = {REQUEST_SIZE_X, REQUEST_SIZE_Y};
+    static int		nread=NREAD_REQUESTS, nwrite=NWRITE_REQUESTS;
+
+    unsigned char	*the_data = NULL;
+    hid_t		file, dset, file_space=-1;
+    herr_t		status;
+#ifdef H5_HAVE_GETRUSAGE
+    struct rusage	r_start, r_stop;
+#else
+    struct timeval r_start, r_stop;
+#endif
+    struct timeval	t_start, t_stop;
+    int			i, fd;
+    hssize_t		n;
+    off_t		offset;
+    hsize_t		start[2];
+    hsize_t		count[2];
+
+
+#ifdef H5_HAVE_SYS_TIMEB
+	struct _timeb *tbstart = malloc(sizeof(struct _timeb));
+	struct _timeb *tbstop = malloc(sizeof(struct _timeb));
+#endif
+    /*
+     * The extra cast in the following statement is a bug workaround for the
+     * Win32 version 5.0 compiler.
+     * 1998-11-06 ptl
+     */
+    printf ("I/O request size is %1.1fMB\n",
+	    (double)(hssize_t)(size[0]*size[1])/1024.0*1024);
+
+    /* Open the files */
+    file = H5Fcreate (HDF5_FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    assert (file>=0);
+    fd = HDopen (RAW_FILE_NAME, O_RDWR|O_CREAT|O_TRUNC, 0666);
+    assert (fd>=0);
+
+    /* Create the dataset */
+    file_space = H5Screate_simple (2, size, size);
+    assert (file_space>=0);
+    dset = H5Dcreate (file, "dset", H5T_NATIVE_UCHAR, file_space, H5P_DEFAULT);
+    assert (dset>=0);
+    the_data = malloc ((size_t)(size[0]*size[1]));
+    /*initial fill for lazy malloc*/
+    memset (the_data, 0xAA, (size_t)(size[0]*size[1]));
+
+    /* Fill raw */
+    synchronize ();
+#ifdef H5_HAVE_GETRUSAGE
+printf("Before getrusage() call\n");
+    getrusage (RUSAGE_SELF, &r_start);
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    gettimeofday (&t_start, NULL);
+#else
+#ifdef H5_HAVE_SYS_TIMEB
+	_ftime(tbstart);
+#endif
+#endif
+    fprintf (stderr, HEADING, "fill raw");
+    for (i=0; i<nwrite; i++) {
+	putc (PROGRESS, stderr);
+	fflush (stderr);
+	memset (the_data, 0xAA, (size_t)(size[0]*size[1]));
+    }
+#ifdef H5_HAVE_GETRUSAGE
+    getrusage (RUSAGE_SELF, &r_stop);
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    gettimeofday (&t_stop, NULL);
+#else
+#ifdef H5_HAVE_SYS_TIMEB
+	_ftime(tbstop);
+	t_start.tv_sec = tbstart->time;
+	t_start.tv_usec = tbstart->millitm;
+	t_stop.tv_sec = tbstop->time;
+	t_stop.tv_usec = tbstop->millitm;
+#endif
+#endif
+    putc ('\n', stderr);
+    print_stats ("fill raw",
+		 &r_start, &r_stop, &t_start, &t_stop,
+		 (size_t)(nread*size[0]*size[1]));
+
+
+    /* Fill hdf5 */
+    synchronize ();
+#ifdef H5_HAVE_GETRUSAGE
+    getrusage (RUSAGE_SELF, &r_start);
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    gettimeofday (&t_start, NULL);
+#else
+#ifdef H5_HAVE_SYS_TIMEB
+	_ftime(tbstart);
+#endif
+#endif
+    fprintf (stderr, HEADING, "fill hdf5");
+    for (i=0; i<nread; i++) {
+	putc (PROGRESS, stderr);
+	fflush (stderr);
+	status = H5Dread (dset, H5T_NATIVE_UCHAR, file_space, file_space,
+			  H5P_DEFAULT, the_data);
+	assert (status>=0);
+    }
+#ifdef H5_HAVE_GETRUSAGE
+    getrusage (RUSAGE_SELF, &r_stop);
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    gettimeofday (&t_stop, NULL);
+#else
+#ifdef H5_HAVE_SYS_TIMEB
+	_ftime(tbstop);
+	t_start.tv_sec = tbstart->time;
+	t_start.tv_usec = tbstart->millitm;
+	t_stop.tv_sec = tbstop->time;
+	t_stop.tv_usec = tbstop->millitm;
+#endif
+#endif
+    putc ('\n', stderr);
+    print_stats ("fill hdf5",
+		 &r_start, &r_stop, &t_start, &t_stop,
+		 (size_t)(nread*size[0]*size[1]));
+
+    /* Write the raw dataset */
+    synchronize ();
+#ifdef H5_HAVE_GETRUSAGE
+    getrusage (RUSAGE_SELF, &r_start);
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    gettimeofday (&t_start, NULL);
+#else
+#ifdef H5_HAVE_SYS_TIMEB
+	_ftime(tbstart);
+#endif
+#endif
+    fprintf (stderr, HEADING, "out raw");
+    for (i=0; i<nwrite; i++) {
+	putc (PROGRESS, stderr);
+	fflush (stderr);
+	offset = lseek (fd, (off_t)0, SEEK_SET);
+	assert (0==offset);
+	n = write (fd, the_data, (size_t)(size[0]*size[1]));
+	assert (n>=0 && (size_t)n==size[0]*size[1]);
+    }
+#ifdef H5_HAVE_GETRUSAGE
+    getrusage (RUSAGE_SELF, &r_stop);
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    gettimeofday (&t_stop, NULL);
+#else
+#ifdef H5_HAVE_SYS_TIMEB
+	_ftime(tbstop);
+	t_start.tv_sec = tbstart->time;
+	t_start.tv_usec = tbstart->millitm;
+	t_stop.tv_sec = tbstop->time;
+	t_stop.tv_usec = tbstop->millitm;
+#endif
+#endif
+    putc ('\n', stderr);
+    print_stats ("out raw",
+		 &r_start, &r_stop, &t_start, &t_stop,
+		 (size_t)(nread*size[0]*size[1]));
+
+    /* Write the hdf5 dataset */
+    synchronize ();
+#ifdef H5_HAVE_GETRUSAGE
+    getrusage (RUSAGE_SELF, &r_start);
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    gettimeofday (&t_start, NULL);
+#else
+#ifdef H5_HAVE_SYS_TIMEB
+	_ftime(tbstart);
+#endif
+#endif
+    fprintf (stderr, HEADING, "out hdf5");
+    for (i=0; i<nwrite; i++) {
+	putc (PROGRESS, stderr);
+	fflush (stderr);
+	status = H5Dwrite (dset, H5T_NATIVE_UCHAR, H5S_ALL, H5S_ALL,
+			   H5P_DEFAULT, the_data);
+	assert (status>=0);
+    }
+#ifdef H5_HAVE_GETRUSAGE
+    getrusage (RUSAGE_SELF, &r_stop);
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    gettimeofday (&t_stop, NULL);
+#else
+#ifdef H5_HAVE_SYS_TIMEB
+	_ftime(tbstop);
+	t_start.tv_sec = tbstart->time;
+	t_start.tv_usec = tbstart->millitm;
+	t_stop.tv_sec = tbstop->time;
+	t_stop.tv_usec = tbstop->millitm;
+#endif
+#endif
+    putc ('\n', stderr);
+    print_stats ("out hdf5",
+		 &r_start, &r_stop, &t_start, &t_stop,
+		 (size_t)(nread*size[0]*size[1]));
+
+    /* Read the raw dataset */
+    synchronize ();
+#ifdef H5_HAVE_GETRUSAGE
+    getrusage (RUSAGE_SELF, &r_start);
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    gettimeofday (&t_start, NULL);
+#else
+#ifdef H5_HAVE_SYS_TIMEB
+	_ftime(tbstart);
+#endif
+#endif
+    fprintf (stderr, HEADING, "in raw");
+    for (i=0; i<nread; i++) {
+	putc (PROGRESS, stderr);
+	fflush (stderr);
+	offset = lseek (fd, (off_t)0, SEEK_SET);
+	assert (0==offset);
+	n = read (fd, the_data, (size_t)(size[0]*size[1]));
+	assert (n>=0 && (size_t)n==size[0]*size[1]);
+    }
+#ifdef H5_HAVE_GETRUSAGE
+    getrusage (RUSAGE_SELF, &r_stop);
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    gettimeofday (&t_stop, NULL);
+#else
+#ifdef H5_HAVE_SYS_TIMEB
+	_ftime(tbstop);
+	t_start.tv_sec = tbstart->time;
+	t_start.tv_usec = tbstart->millitm;
+	t_stop.tv_sec = tbstop->time;
+	t_stop.tv_usec = tbstop->millitm;
+#endif
+#endif
+    putc ('\n', stderr);
+    print_stats ("in raw",
+		 &r_start, &r_stop, &t_start, &t_stop,
+		 (size_t)(nread*size[0]*size[1]));
+
+
+    /* Read the hdf5 dataset */
+    synchronize ();
+#ifdef H5_HAVE_GETRUSAGE
+    getrusage (RUSAGE_SELF, &r_start);
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    gettimeofday (&t_start, NULL);
+#else
+#ifdef H5_HAVE_SYS_TIMEB
+	_ftime(tbstart);
+#endif
+#endif
+    fprintf (stderr, HEADING, "in hdf5");
+    for (i=0; i<nread; i++) {
+	putc (PROGRESS, stderr);
+	fflush (stderr);
+	status = H5Dread (dset, H5T_NATIVE_UCHAR, file_space, file_space,
+			  H5P_DEFAULT, the_data);
+	assert (status>=0);
+    }
+#ifdef H5_HAVE_GETRUSAGE
+    getrusage (RUSAGE_SELF, &r_stop);
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    gettimeofday (&t_stop, NULL);
+#else
+#ifdef H5_HAVE_SYS_TIMEB
+	_ftime(tbstop);
+	t_start.tv_sec = tbstart->time;
+	t_start.tv_usec = tbstart->millitm;
+	t_stop.tv_sec = tbstop->time;
+	t_stop.tv_usec = tbstop->millitm;
+#endif
+#endif
+    putc ('\n', stderr);
+    print_stats ("in hdf5",
+		 &r_start, &r_stop, &t_start, &t_stop,
+		 (size_t)(nread*size[0]*size[1]));
+
+    /* Read hyperslab */
+    assert (size[0]>20 && size[1]>20);
+    start[0] = start[1] = 10;
+    count[0] = count[1] = size[0]-20;
+    status = H5Sselect_hyperslab (file_space, H5S_SELECT_SET, start, NULL, count, NULL);
+    assert (status>=0);
+    synchronize ();
+#ifdef H5_HAVE_GETRUSAGE
+    getrusage (RUSAGE_SELF, &r_start);
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    gettimeofday (&t_start, NULL);
+#else
+#ifdef H5_HAVE_SYS_TIMEB
+	_ftime(tbstart);
+#endif
+#endif
+    fprintf (stderr, HEADING, "in hdf5 partial");
+    for (i=0; i<nread; i++) {
+	putc (PROGRESS, stderr);
+	fflush (stderr);
+	status = H5Dread (dset, H5T_NATIVE_UCHAR, file_space, file_space,
+			  H5P_DEFAULT, the_data);
+	assert (status>=0);
+    }
+#ifdef H5_HAVE_GETRUSAGE
+    getrusage (RUSAGE_SELF, &r_stop);
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    gettimeofday (&t_stop, NULL);
+#else
+#ifdef H5_HAVE_SYS_TIMEB
+	_ftime(tbstop);
+	t_start.tv_sec = tbstart->time;
+	t_start.tv_usec = tbstart->millitm;
+	t_stop.tv_sec = tbstop->time;
+	t_stop.tv_usec = tbstop->millitm;
+#endif
+#endif
+    putc ('\n', stderr);
+    print_stats ("in hdf5 partial",
+		 &r_start, &r_stop, &t_start, &t_stop,
+		 (size_t)(nread*count[0]*count[1]));
+
+
+
+    /* Close everything */
+    HDclose (fd);
+    H5Dclose (dset);
+    H5Sclose (file_space);
+    H5Fclose (file);
+
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/perform/mpi-perf.c
===================================================================
--- packages/hdf5/branches/upstream/current/perform/mpi-perf.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/mpi-perf.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,373 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * (C) 1995-2001 Clemson University and Argonne National Laboratory.
+ *
+ * See COPYING in top-level directory.
+ *
+ * This is contributed by Robert Ross to the HDF5 software.
+ * and was called mpi-io-test.c
+ */
+
+#include "hdf5.h"
+#include "H5private.h"
+#ifdef H5_HAVE_PARALLEL
+/* mpi-perf.c
+ *
+ * This is derived from code given to me by Rajeev Thakur.  Dunno where
+ * it originated.
+ *
+ * It's purpose is to produce aggregate bandwidth numbers for varying
+ * block sizes, number of processors, an number of iterations.
+ *
+ * This is strictly an mpi program - it is used to test the MPI I/O
+ * functionality implemented by Romio.
+ *
+ * Compiling is usually easiest with something like:
+ * mpicc -Wall -Wstrict-prototypes mpi-io-test.c -o mpi-io-test
+ *
+ * NOTE: This code assumes that all command line arguments make it out to all
+ * the processes that make up the parallel job, which isn't always the case.
+ * So if it doesn't work on some platform, that might be why.
+ */
+/* Modifications:
+ *    Albert Cheng, Apr 30, 20001
+ *    Changed MPI_File_open to use MPI_COMM_WORLD (was MPI_COMM_SELF).
+ *    Albert Cheng, May 5, 20001
+ *    Changed MPI_File_seek then MPI_File_write or MPI_File_read to just
+ *    MPI_File_write_at and MPI_File_read_at.  Some compiler, e.g., IBM
+ *    mpcc_r does not support MPI_File_seek and MPI_File_read or MPI_File_write.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/time.h>
+#include <mpi.h>
+#ifndef MPI_FILE_NULL           /*MPIO may be defined in mpi.h already       */
+#   include <mpio.h>
+#endif
+
+
+
+/* DEFAULT VALUES FOR OPTIONS */
+int64_t opt_block     = 1048576*16;
+int     opt_iter      = 1;
+int     opt_stripe    = -1;
+int     opt_correct   = 0;
+int     amode         = O_RDWR | O_CREAT;
+char    opt_file[256] = "/tmp/test.out\0";
+char    opt_pvfstab[256] = "notset\0";
+int     opt_pvfstab_set = 0;
+
+/* function prototypes */
+int parse_args(int argc, char **argv);
+double Wtime(void);
+
+extern int errno;
+extern int debug_on;
+
+/* globals needed for getopt */
+extern char *optarg;
+extern int optind, opterr;
+
+int main(int argc, char **argv)
+{
+	char *buf, *tmp, *buf2, *tmp2, *check;
+	int i, j, mynod=0, nprocs=1, err, my_correct = 1, correct, myerrno;
+	double stim, etim;
+	double write_tim = 0;
+	double read_tim = 0;
+	double read_bw, write_bw;
+	double max_read_tim, max_write_tim;
+	double min_read_tim, min_write_tim;
+	double ave_read_tim, ave_write_tim;
+	int64_t iter_jump = 0;
+	int64_t seek_position = 0;
+	MPI_File fh;
+	MPI_Status status;
+	int nchars;
+
+	/* startup MPI and determine the rank of this process */
+	MPI_Init(&argc,&argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+	MPI_Comm_rank(MPI_COMM_WORLD, &mynod);
+
+	/* parse the command line arguments */
+	parse_args(argc, argv);
+
+	if (mynod == 0) printf("# Using mpi-io calls.\n");
+
+
+	/* kindof a weird hack- if the location of the pvfstab file was
+	 * specified on the command line, then spit out this location into
+	 * the appropriate environment variable: */
+
+#if H5_HAVE_SETENV
+/* no setenv or unsetenv */
+	if (opt_pvfstab_set) {
+		if((setenv("PVFSTAB_FILE", opt_pvfstab, 1)) < 0){
+			perror("setenv");
+			goto die_jar_jar_die;
+		}
+	}
+#endif
+
+	/* this is how much of the file data is covered on each iteration of
+	 * the test.  used to help determine the seek offset on each
+	 * iteration */
+	iter_jump = nprocs * opt_block;
+
+	/* setup a buffer of data to write */
+	if (!(tmp = (char *) malloc(opt_block + 256))) {
+		perror("malloc");
+		goto die_jar_jar_die;
+	}
+	buf = tmp + 128 - (((long)tmp) % 128);  /* align buffer */
+
+	if (opt_correct) {
+		/* do the same buffer setup for verifiable data */
+		if (!(tmp2 = (char *) malloc(opt_block + 256))) {
+			perror("malloc2");
+			goto die_jar_jar_die;
+		 }
+		buf2 = tmp + 128 - (((long)tmp) % 128);
+	}
+
+	/* open the file for writing */
+	err = MPI_File_open(MPI_COMM_WORLD, opt_file,
+	MPI_MODE_CREATE | MPI_MODE_RDWR, MPI_INFO_NULL, &fh);
+	if (err < 0) {
+		fprintf(stderr, "node %d, open error: %s\n", mynod, strerror(errno));
+		goto die_jar_jar_die;
+	}
+
+	/* now repeat the write operations the number of times
+	 * specified on the command line */
+	for (j=0; j < opt_iter; j++) {
+
+		/* calculate the appropriate position depending on the iteration
+		 * and rank of the current process */
+		seek_position = (j*iter_jump)+(mynod*opt_block);
+
+		if (opt_correct) /* fill in buffer for iteration */ {
+			for (i=mynod+j, check=buf; i<opt_block; i++,check++) *check=(char)i;
+		}
+
+		/* discover the starting time of the operation */
+	   MPI_Barrier(MPI_COMM_WORLD);
+	   stim = MPI_Wtime();
+
+		/* write out the data */
+		nchars = opt_block/sizeof(char);
+		err = MPI_File_write_at(fh, seek_position, buf, nchars, MPI_CHAR, &status);
+		if(err){
+			fprintf(stderr, "node %d, write error: %s\n", mynod,
+			strerror(errno));
+		}
+
+		/* discover the ending time of the operation */
+	   etim = MPI_Wtime();
+
+	   write_tim += (etim - stim);
+
+		/* we are done with this "write" iteration */
+	}
+
+	err = MPI_File_close(&fh);
+	if(err){
+		fprintf(stderr, "node %d, close error after write\n", mynod);
+	}
+
+	/* wait for everyone to synchronize at this point */
+	MPI_Barrier(MPI_COMM_WORLD);
+
+	/* reopen the file to read the data back out */
+	err = MPI_File_open(MPI_COMM_WORLD, opt_file,
+	MPI_MODE_CREATE | MPI_MODE_RDWR, MPI_INFO_NULL, &fh);
+	if (err < 0) {
+		fprintf(stderr, "node %d, open error: %s\n", mynod, strerror(errno));
+		goto die_jar_jar_die;
+	}
+
+
+	/* we are going to repeat the read operation the number of iterations
+	 * specified */
+	for (j=0; j < opt_iter; j++) {
+		/* calculate the appropriate spot give the current iteration and
+		 * rank within the MPI processes */
+		seek_position = (j*iter_jump)+(mynod*opt_block);
+
+		/* discover the start time */
+	   MPI_Barrier(MPI_COMM_WORLD);
+	   stim = MPI_Wtime();
+
+		/* read in the file data */
+		if (!opt_correct){
+			err = MPI_File_read_at(fh, seek_position, buf, nchars, MPI_CHAR, &status);
+		}
+		else{
+			err = MPI_File_read_at(fh, seek_position, buf2, nchars, MPI_CHAR, &status);
+		}
+		myerrno = errno;
+
+		/* discover the end time */
+	   etim = MPI_Wtime();
+	   read_tim += (etim - stim);
+
+	   if (err < 0) fprintf(stderr, "node %d, read error, loc = %Ld: %s\n",
+			mynod, mynod*opt_block, strerror(myerrno));
+
+		/* if the user wanted to check correctness, compare the write
+		 * buffer to the read buffer */
+		if (opt_correct && memcmp(buf, buf2, opt_block)) {
+			fprintf(stderr, "node %d, correctness test failed\n", mynod);
+			my_correct = 0;
+			MPI_Allreduce(&my_correct, &correct, 1, MPI_INT, MPI_MIN,
+				MPI_COMM_WORLD);
+		}
+
+		/* we are done with this read iteration */
+	}
+
+	/* close the file */
+	err = MPI_File_close(&fh);
+	if(err){
+		fprintf(stderr, "node %d, close error after write\n", mynod);
+	}
+
+	/* compute the read and write times */
+	MPI_Allreduce(&read_tim, &max_read_tim, 1, MPI_DOUBLE, MPI_MAX,
+		MPI_COMM_WORLD);
+	MPI_Allreduce(&read_tim, &min_read_tim, 1, MPI_DOUBLE, MPI_MIN,
+		MPI_COMM_WORLD);
+	MPI_Allreduce(&read_tim, &ave_read_tim, 1, MPI_DOUBLE, MPI_SUM,
+		MPI_COMM_WORLD);
+
+	/* calculate the average from the sum */
+	ave_read_tim = ave_read_tim / nprocs;
+
+	MPI_Allreduce(&write_tim, &max_write_tim, 1, MPI_DOUBLE, MPI_MAX,
+		MPI_COMM_WORLD);
+	MPI_Allreduce(&write_tim, &min_write_tim, 1, MPI_DOUBLE, MPI_MIN,
+		MPI_COMM_WORLD);
+	MPI_Allreduce(&write_tim, &ave_write_tim, 1, MPI_DOUBLE, MPI_SUM,
+		MPI_COMM_WORLD);
+
+	/* calculate the average from the sum */
+	ave_write_tim = ave_write_tim / nprocs;
+
+	/* print out the results on one node */
+	if (mynod == 0) {
+	   read_bw = ((int64_t)(opt_block*nprocs*opt_iter))/(max_read_tim*1000000.0);
+	   write_bw = ((int64_t)(opt_block*nprocs*opt_iter))/(max_write_tim*1000000.0);
+
+			printf("nr_procs = %d, nr_iter = %d, blk_sz = %ld\n", nprocs,
+		opt_iter, (long)opt_block);
+
+			printf("# total_size = %ld\n", (long)(opt_block*nprocs*opt_iter));
+
+			printf("# Write:  min_time = %f, max_time = %f, mean_time = %f\n",
+				min_write_tim, max_write_tim, ave_write_tim);
+			printf("# Read:  min_time = %f, max_time = %f, mean_time = %f\n",
+				min_read_tim, max_read_tim, ave_read_tim);
+
+	   printf("Write bandwidth = %f Mbytes/sec\n", write_bw);
+	   printf("Read bandwidth = %f Mbytes/sec\n", read_bw);
+
+		if (opt_correct) {
+			printf("Correctness test %s.\n", correct ? "passed" : "failed");
+		}
+	}
+
+
+die_jar_jar_die:
+
+#if H5_HAVE_SETENV
+/* no setenv or unsetenv */
+	/* clear the environment variable if it was set earlier */
+	if	(opt_pvfstab_set){
+		unsetenv("PVFSTAB_FILE");
+	}
+#endif
+
+	free(tmp);
+	if (opt_correct) free(tmp2);
+	MPI_Finalize();
+	return(0);
+}
+
+int parse_args(int argc, char **argv)
+{
+	int c;
+
+	while ((c = getopt(argc, argv, "s:b:i:f:p:c")) != EOF) {
+		switch (c) {
+			case 's': /* stripe */
+				opt_stripe = atoi(optarg);
+				break;
+			case 'b': /* block size */
+				opt_block = atoi(optarg);
+				break;
+			case 'i': /* iterations */
+				opt_iter = atoi(optarg);
+				break;
+			case 'f': /* filename */
+				strncpy(opt_file, optarg, 255);
+				break;
+			case 'p': /* pvfstab file */
+				strncpy(opt_pvfstab, optarg, 255);
+				opt_pvfstab_set = 1;
+				break;
+			case 'c': /* correctness */
+				opt_correct = 1;
+				break;
+			case '?': /* unknown */
+			default:
+				break;
+		}
+	}
+	return(0);
+}
+
+/* Wtime() - returns current time in sec., in a double */
+double Wtime()
+{
+	struct timeval t;
+
+	gettimeofday(&t, NULL);
+	return((double)t.tv_sec + (double)t.tv_usec / 1000000);
+}
+
+/*
+ * Local variables:
+ *  c-indent-level: 3
+ *  c-basic-offset: 3
+ *  tab-width: 3
+ * End:
+ */
+
+#else /* H5_HAVE_PARALLEL */
+/* dummy program since H5_HAVE_PARALLE is not configured in */
+int
+main()
+{
+printf("No parallel performance because parallel is not configured in\n");
+return(0);
+}
+#endif /* H5_HAVE_PARALLEL */

Added: packages/hdf5/branches/upstream/current/perform/overhead.c
===================================================================
--- packages/hdf5/branches/upstream/current/perform/overhead.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/overhead.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,420 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Monday, September 28, 1998
+ *
+ * Purpose:	Creates a chunked dataset and measures the storage overhead.
+ */
+
+/* See H5private.h for how to include headers */
+#undef NDEBUG
+#include "hdf5.h"
+#include "H5private.h"
+
+#ifdef H5_STDC_HEADERS
+#   include <ctype.h>
+#   include <fcntl.h>
+#   include <stdlib.h>
+#   include <sys/stat.h>
+#   include <string.h>
+#endif
+
+#ifdef H5_HAVE_IO_H
+#   include <io.h>
+#endif
+
+#ifdef H5_HAVE_UNISTD_H
+#   include <sys/types.h>
+#   include <unistd.h>
+#endif
+
+#ifdef H5_HAVE_IO_H
+#   include <io.h>
+#endif
+
+#ifndef H5_HAVE_ATTRIBUTE
+#   undef __attribute__
+#   define __attribute__(X) /*void*/
+#   define UNUSED /*void*/
+#else
+#   define UNUSED __attribute__((unused))
+#endif
+
+#define FILE_NAME_1	"overhead.h5"
+#ifndef FALSE
+#define FALSE		0
+#endif /* FALSE */
+#ifndef TRUE
+#define TRUE		1
+#endif /* TRUE */
+
+typedef enum fill_t {
+    FILL_ALL,
+    FILL_FORWARD,
+    FILL_REVERSE,
+    FILL_INWARD,
+    FILL_OUTWARD,
+    FILL_RANDOM
+} fill_t;
+
+
+/*-------------------------------------------------------------------------
+ * Function:	usage
+ *
+ * Purpose:	Prints a usage message and exits.
+ *
+ * Return:	never returns
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, September 30, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+usage(const char *prog)
+{
+    fprintf(stderr, "usage: %s [STYLE|cache] [LEFT [MIDDLE [RIGHT]]]\n",
+	    prog);
+    fprintf(stderr, "\
+    STYLE is the order that the dataset is filled and should be one of:\n\
+        forward   --  Fill the dataset from lowest address to highest\n\
+                      address. This style tests the right split ratio.\n\
+        reverse   --  Fill the dataset from highest address to lowest\n\
+                      address.  This is the reverse order of `forward' and\n\
+                      tests the left split ratio.\n\
+        inward    --  Fill beginning at both the lowest and highest\n\
+                      addresses and work in toward the center of the\n\
+                      dataset.  This tests the middle split ratio.\n\
+        outward   --  Start at the center of the dataset and work outward\n\
+                      toward the lowest and highest addresses.  This tests\n\
+                      both left and right split ratios.\n\
+        random    --  Write the chunks of the dataset in random order.  This\n\
+                      tests all split ratios.\n\
+    If no fill style is specified then all fill styles are tried and a\n\
+    single value is printed for each one.\n\
+\n\
+    If the word `cache' is used instead of a fill style then the raw data\n\
+    cache is enabled.  It is not possible to enable the raw data cache when\n\
+    a specific fill style is used because H5Fflush() is called after each\n\
+    chunk is written in order to calculate overhead during the test.  If\n\
+    the cache is enabled then chunks are written to disk in different orders\n\
+    than the actual H5Dwrite() calls in the test due to collisions and the\n\
+    resulting B-tree will be split differently.\n\
+\n\
+    LEFT, MIDDLE, and RIGHT are the ratios to use for splitting and should\n\
+    be values between zero and one, inclusive.\n");
+    exit(1);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup
+ *
+ * Purpose:	Removes test files
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, June  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+cleanup (void)
+{
+    if (!getenv ("HDF5_NOCLEANUP")) {
+	remove (FILE_NAME_1);
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	display_error_cb
+ *
+ * Purpose:	Displays the error stack after printing "*FAILED*".
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, March  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+display_error_cb (void UNUSED *client_data)
+{
+    puts ("*FAILED*");
+    H5Eprint (stdout);
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test
+ *
+ * Purpose:	The guts of the test
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, September 30, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test(fill_t fill_style, const double splits[],
+     hbool_t verbose, hbool_t use_rdcc)
+{
+    hid_t	file = (-1), fapl = (-1), dcpl = (-1), xfer = (-1), mspace = (-1), fspace = (-1), dset = (-1);
+    hsize_t	ch_size[1] = {1};		/*chunk size		*/
+    hsize_t	cur_size[1] = {1000};		/*current dataset size	*/
+    hsize_t	max_size[1] = {H5S_UNLIMITED};	/*maximum dataset size	*/
+    hsize_t	hs_start[1];			/*hyperslab start offset*/
+    hsize_t	hs_count[1] = {1};		/*hyperslab nelmts	*/
+    int		fd = (-1);			/*h5 file direct	*/
+    static int	*had = NULL;			/*for random filling	*/
+    const char	*sname=NULL;			/*fill style nam	*/
+    int		mdc_nelmts;			/*num meta objs to cache*/
+    hsize_t	i;
+    int		j;
+    h5_stat_t	sb;
+
+    if (!had) had = calloc((size_t)cur_size[0], sizeof(int));
+    if ((fapl=H5Pcreate(H5P_FILE_ACCESS))<0) goto error;
+    if (!use_rdcc) {
+	if (H5Pget_cache(fapl, &mdc_nelmts, NULL, NULL, NULL)<0) goto error;
+	if (H5Pset_cache(fapl, mdc_nelmts, 0, 0, 0.0)<0) goto error;
+    }
+    if ((file=H5Fcreate(FILE_NAME_1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) {
+	goto error;
+    }
+    if ((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_chunk(dcpl, 1, ch_size)<0) goto error;
+    if ((xfer=H5Pcreate(H5P_DATASET_XFER))<0) goto error;
+    if (H5Pset_btree_ratios(xfer, splits[0], splits[1], splits[2])<0) {
+	goto error;
+    }
+    if ((fspace=H5Screate_simple(1, cur_size, max_size))<0) goto error;
+    if ((mspace=H5Screate_simple(1, ch_size, ch_size))<0) goto error;
+    if ((dset=H5Dcreate(file, "chunked", H5T_NATIVE_INT,
+			fspace, dcpl))<0) goto error;
+
+#if !defined( __MWERKS__)
+
+ /*
+  workaround for a bug in the Metrowerks version 6.0 open function
+  */
+    if ((fd=HDopen(FILE_NAME_1, O_RDONLY, 0666))<0) goto error;
+#endif
+
+    for (i=1; i<=cur_size[0]; i++) {
+
+	/* Decide which chunk to write to */
+	switch (fill_style) {
+	case FILL_FORWARD:
+	    hs_start[0] = i-1;
+	    break;
+	case FILL_REVERSE:
+	    hs_start[0] = cur_size[0]-i;
+	    break;
+	case FILL_INWARD:
+	    hs_start[0] = i%2 ? i/2 : cur_size[0]-i/2;
+	    break;
+	case FILL_OUTWARD:
+	    j = (int)(cur_size[0]-i)+1;
+	    hs_start[0] = j%2 ? j/2 : (hssize_t)cur_size[0]-j/2;
+	    break;
+	case FILL_RANDOM:
+	    for (j=HDrand()%(int)cur_size[0]; had[j]; j=(j+1)%(int)cur_size[0]) /*void*/;
+	    hs_start[0] = j;
+	    had[j] = 1;
+	    break;
+	case FILL_ALL:
+	    abort();
+	}
+
+	/* Write the chunk */
+	if (H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_start, NULL,
+				hs_count, NULL)<0) goto error;
+	if (H5Dwrite(dset, H5T_NATIVE_INT, mspace, fspace, xfer, &i)<0) {
+	    goto error;
+	}
+
+
+#if !defined( __MWERKS__)
+
+	/* Determine overhead */
+	if (verbose) {
+	    if (H5Fflush(file, H5F_SCOPE_LOCAL)<0) goto error;
+	    if (HDfstat(fd, &sb)<0) goto error;
+	    /*
+	     * The extra cast in the following statement is a bug workaround
+	     * for the Win32 version 5.0 compiler.
+	     * 1998-11-06 ptl
+	     */
+	    printf("%4lu %8.3f ***\n",
+		   (unsigned long)i,
+		   (double)(hssize_t)(sb.st_size-i*sizeof(int))/(hssize_t)i);
+	}
+#endif
+
+
+    }
+
+    H5Dclose(dset);
+    H5Sclose(mspace);
+    H5Sclose(fspace);
+    H5Pclose(dcpl);
+    H5Pclose(xfer);
+    H5Fclose(file);
+
+    if (!verbose) {
+	switch (fill_style) {
+	case FILL_FORWARD:
+	    sname = "forward";
+	    break;
+	case FILL_REVERSE:
+	    sname = "reverse";
+	    break;
+	case FILL_INWARD:
+	    sname = "inward";
+	    break;
+	case FILL_OUTWARD:
+	    sname = "outward";
+	    break;
+	case FILL_RANDOM:
+	    sname = "random";
+	    break;
+	case FILL_ALL:
+	    abort();
+	}
+
+#if !defined( __MWERKS__)
+
+	if (HDfstat(fd, &sb)<0) goto error;
+		printf("%-7s %8.3f\n", sname,
+	       (double)(hssize_t)(sb.st_size-cur_size[0]*sizeof(int))/
+	           (hssize_t)cur_size[0]);
+#endif
+
+    }
+
+
+#if !defined( __MWERKS__)
+    HDclose(fd);
+#endif
+
+    return 0;
+
+ error:
+    H5Dclose(dset);
+    H5Sclose(mspace);
+    H5Sclose(fspace);
+    H5Pclose(dcpl);
+    H5Pclose(xfer);
+    H5Fclose(file);
+    free(had);
+    HDclose(fd);
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:
+ *
+ * Return:	Success:        zero
+ *
+ *		Failure:	non-zero
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, September 28, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(int argc, char *argv[])
+{
+    hid_t	xfer;
+    fill_t	fill_style = FILL_ALL;
+    hbool_t	use_cache = FALSE;
+    double	splits[3];
+    int		i, j, nerrors=0;
+
+    /* Default split ratios */
+    H5Eset_auto(display_error_cb, NULL);
+    if ((xfer=H5Pcreate(H5P_DATASET_XFER))<0) goto error;
+    if (H5Pget_btree_ratios(xfer, splits+0, splits+1, splits+2)<0) {
+	goto error;
+    }
+    if (H5Pclose(xfer)<0) goto error;
+
+    /* Parse command-line options */
+    for (i=1, j=0; i<argc; i++) {
+	if (!strcmp(argv[i], "forward")) {
+	    fill_style = FILL_FORWARD;
+	} else if (!strcmp(argv[i], "reverse")) {
+	    fill_style = FILL_REVERSE;
+	} else if (!strcmp(argv[i], "inward")) {
+	    fill_style = FILL_INWARD;
+	} else if (!strcmp(argv[i], "outward")) {
+	    fill_style = FILL_OUTWARD;
+	} else if (!strcmp(argv[i], "random")) {
+	    fill_style = FILL_RANDOM;
+	} else if (!strcmp(argv[i], "cache")) {
+	    use_cache = TRUE;
+	} else if (j<3 && (isdigit(argv[i][0]) || '.'==argv[i][0])) {
+	    splits[j++] = strtod(argv[i], NULL);
+	} else {
+	    usage(argv[0]);
+	}
+    }
+
+    if (FILL_ALL==fill_style) {
+	printf("%-7s %8s\n", "Style", "Bytes/Chunk");
+	printf("%-7s %8s\n", "-----", "-----------");
+	nerrors += test(FILL_FORWARD, splits, FALSE, use_cache);
+	nerrors += test(FILL_REVERSE, splits, FALSE, use_cache);
+	nerrors += test(FILL_INWARD,  splits, FALSE, use_cache);
+	nerrors += test(FILL_OUTWARD, splits, FALSE, use_cache);
+	nerrors += test(FILL_RANDOM,  splits, FALSE, use_cache);
+    } else {
+	if (use_cache) usage(argv[0]);
+	nerrors += test(fill_style,   splits, TRUE, FALSE);
+    }
+    if (nerrors>0) goto error;
+    cleanup();
+    return 0;
+
+ error:
+    fprintf(stderr, "*** ERRORS DETECTED ***\n");
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/perform/perf.c
===================================================================
--- packages/hdf5/branches/upstream/current/perform/perf.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/perf.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,468 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Author: Albert Cheng of NCSA, May 1, 2001.
+ * This is derived from code given to me by Robert Ross.
+ *
+ * NOTE: This code assumes that all command line arguments make it out to all
+ * the processes that make up the parallel job, which isn't always the case.
+ * So if it doesn't work on some platform, that might be why.
+ */
+
+#include "hdf5.h"
+#include "H5private.h"
+#ifdef H5_HAVE_PARALLEL
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/time.h>
+#include <mpi.h>
+#ifndef MPI_FILE_NULL           /*MPIO may be defined in mpi.h already       */
+#   include <mpio.h>
+#endif
+
+
+/* Macro definitions */
+/* Verify:
+ * if val is false (0), print mesg and if fatal is true (non-zero), die.
+ */
+#define H5FATAL 1
+#define VRFY(val, mesg, fatal) do {                                            \
+    if (!val) {                                                                \
+	printf("Proc %d: ", mynod);					       \
+        printf("*** Assertion failed (%s) at line %4d in %s\n",                \
+	    mesg, (int)__LINE__, __FILE__);     			       \
+	if (fatal){							       \
+	    fflush(stdout);						       \
+	    goto die_jar_jar_die;					       \
+	}								       \
+    }                                                                          \
+} while(0)
+#define RANK 1
+hsize_t dims[RANK];   	/* dataset dim sizes */
+hsize_t block[RANK], stride[RANK], count[RANK];
+hssize_t start[RANK];
+hid_t fid;                  /* HDF5 file ID */
+hid_t acc_tpl;		/* File access templates */
+hid_t sid;   		/* Dataspace ID */
+hid_t file_dataspace;	/* File dataspace ID */
+hid_t mem_dataspace;	/* memory dataspace ID */
+hid_t dataset;		/* Dataset ID */
+hsize_t opt_alignment	= 1;
+hsize_t opt_threshold	= 1;
+int	opt_split_vfd	= 0;
+char	*meta_ext, *raw_ext;	/* holds the meta and raw file extension if */
+				/* opt_split_vfd is set */
+
+
+/* DEFAULT VALUES FOR OPTIONS */
+int64_t opt_block     = 1048576*16;
+int     opt_iter      = 1;
+int     opt_stripe    = -1;
+int     opt_correct   = 0;
+int     amode         = O_RDWR | O_CREAT;
+char    opt_file[256] = "/tmp/test.out\0";
+char    opt_pvfstab[256] = "notset\0";
+int     opt_pvfstab_set = 0;
+
+/* function prototypes */
+int parse_args(int argc, char **argv);
+double Wtime(void);
+
+extern int errno;
+extern int debug_on;
+
+/* globals needed for getopt */
+extern char *optarg;
+extern int optind, opterr;
+
+int main(int argc, char **argv)
+{
+	char *buf, *tmp, *buf2, *tmp2, *check;
+	int i, j, mynod=0, nprocs=1, err, my_correct = 1, correct, myerrno;
+	double stim, etim;
+	double write_tim = 0;
+	double read_tim = 0;
+	double read_bw, write_bw;
+	double max_read_tim, max_write_tim;
+	double min_read_tim, min_write_tim;
+	double ave_read_tim, ave_write_tim;
+	int64_t iter_jump = 0;
+	int64_t seek_position = 0;
+	MPI_File fh;
+	MPI_Status status;
+	int nchars;
+    herr_t ret;         	/* Generic return value */
+
+	/* startup MPI and determine the rank of this process */
+	MPI_Init(&argc,&argv);
+	MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+	MPI_Comm_rank(MPI_COMM_WORLD, &mynod);
+
+	/* parse the command line arguments */
+	parse_args(argc, argv);
+
+	if (mynod == 0) printf("# Using hdf5-io calls.\n");
+
+
+	/* kindof a weird hack- if the location of the pvfstab file was
+	 * specified on the command line, then spit out this location into
+	 * the appropriate environment variable: */
+
+#if H5_HAVE_SETENV
+/* no setenv or unsetenv */
+	if (opt_pvfstab_set) {
+		if((setenv("PVFSTAB_FILE", opt_pvfstab, 1)) < 0){
+			perror("setenv");
+			goto die_jar_jar_die;
+		}
+	}
+#endif
+
+	/* this is how much of the file data is covered on each iteration of
+	 * the test.  used to help determine the seek offset on each
+	 * iteration */
+	iter_jump = nprocs * opt_block;
+
+	/* setup a buffer of data to write */
+	if (!(tmp = (char *) malloc(opt_block + 256))) {
+		perror("malloc");
+		goto die_jar_jar_die;
+	}
+	buf = tmp + 128 - (((long)tmp) % 128);  /* align buffer */
+
+	if (opt_correct) {
+		/* do the same buffer setup for verifiable data */
+		if (!(tmp2 = (char *) malloc(opt_block + 256))) {
+			perror("malloc2");
+			goto die_jar_jar_die;
+		 }
+		buf2 = tmp + 128 - (((long)tmp) % 128);
+	}
+
+    /* setup file access template with parallel IO access. */
+    if (opt_split_vfd){
+	hid_t mpio_pl;
+
+	mpio_pl = H5Pcreate (H5P_FILE_ACCESS);
+	VRFY((acc_tpl >= 0), "", H5FATAL);
+	ret = H5Pset_fapl_mpio(mpio_pl, MPI_COMM_WORLD, MPI_INFO_NULL);
+	VRFY((ret >= 0), "", H5FATAL);
+
+	/* set optional allocation alignment */
+	if (opt_alignment*opt_threshold != 1){
+	    ret = H5Pset_alignment(acc_tpl, opt_threshold, opt_alignment );
+	    VRFY((ret >= 0), "H5Pset_alignment succeeded", !H5FATAL);
+	}
+
+	/* setup file access template */
+	acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
+	VRFY((acc_tpl >= 0), "", H5FATAL);
+	ret = H5Pset_fapl_split(acc_tpl, meta_ext, mpio_pl, raw_ext, mpio_pl);
+	VRFY((ret >= 0), "H5Pset_fapl_split succeeded", H5FATAL);
+    }else{
+	/* setup file access template */
+	acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
+	VRFY((acc_tpl >= 0), "", H5FATAL);
+	ret = H5Pset_fapl_mpio(acc_tpl, MPI_COMM_WORLD, MPI_INFO_NULL);
+	VRFY((ret >= 0), "", H5FATAL);
+
+	/* set optional allocation alignment */
+	if (opt_alignment*opt_threshold != 1){
+	    ret = H5Pset_alignment(acc_tpl, opt_threshold, opt_alignment );
+	    VRFY((ret >= 0), "H5Pset_alignment succeeded", !H5FATAL);
+	}
+    }
+
+    /* create the parallel file */
+    fid=H5Fcreate(opt_file,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
+    VRFY((fid >= 0), "H5Fcreate succeeded", H5FATAL);
+
+    /* define a contiquous dataset of opt_iter*nprocs*opt_block chars */
+    dims[0] = opt_iter*nprocs*opt_block;
+    sid = H5Screate_simple (RANK, dims, NULL);
+    VRFY((sid >= 0), "H5Screate_simple succeeded", H5FATAL);
+    dataset = H5Dcreate(fid, "Dataset1", H5T_NATIVE_CHAR, sid,
+			H5P_DEFAULT);
+    VRFY((dataset >= 0), "H5Dcreate succeeded", H5FATAL);
+
+    /* create the memory dataspace and the file dataspace */
+    dims[0] = opt_block;
+    mem_dataspace = H5Screate_simple (RANK, dims, NULL);
+    VRFY((mem_dataspace >= 0), "", H5FATAL);
+    file_dataspace = H5Dget_space (dataset);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded", H5FATAL);
+
+	/* now each process writes a block of opt_block chars in round robbin
+	 * fashion until the whole dataset is covered.
+	 */
+	for (j=0; j < opt_iter; j++) {
+	    /* setup a file dataspace selection */
+	    start[0] = (j*iter_jump)+(mynod*opt_block);
+	    stride[0] = block[0] = opt_block;
+	    count[0]= 1;
+	    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+	    VRFY((ret >= 0), "H5Sset_hyperslab succeeded", H5FATAL);
+
+		if (opt_correct) /* fill in buffer for iteration */ {
+			for (i=mynod+j, check=buf; i<opt_block; i++,check++) *check=(char)i;
+		}
+
+		/* discover the starting time of the operation */
+	   MPI_Barrier(MPI_COMM_WORLD);
+	   stim = MPI_Wtime();
+
+    /* write data */
+    ret = H5Dwrite(dataset, H5T_NATIVE_CHAR, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, buf);
+    VRFY((ret >= 0), "H5Dwrite dataset1 succeeded", !H5FATAL);
+
+		/* discover the ending time of the operation */
+	   etim = MPI_Wtime();
+
+	   write_tim += (etim - stim);
+
+		/* we are done with this "write" iteration */
+	}
+
+    /* close dataset and file */
+    ret=H5Dclose(dataset);
+    VRFY((ret >= 0), "H5Dclose succeeded", H5FATAL);
+    ret=H5Fclose(fid);
+    VRFY((ret >= 0), "H5Fclose succeeded", H5FATAL);
+
+
+
+	/* wait for everyone to synchronize at this point */
+	MPI_Barrier(MPI_COMM_WORLD);
+
+    /* reopen the file for reading */
+    fid=H5Fopen(opt_file,H5F_ACC_RDONLY,acc_tpl);
+    VRFY((fid >= 0), "", H5FATAL);
+
+    /* open the dataset */
+    dataset = H5Dopen(fid, "Dataset1");
+    VRFY((dataset >= 0), "H5Dopen succeeded", H5FATAL);
+
+    /* we can re-use the same mem_dataspace and file_dataspace
+     * the H5Dwrite used since the dimension size is the same.
+     */
+
+	/* we are going to repeat the read the same pattern the write used */
+	for (j=0; j < opt_iter; j++) {
+	    /* setup a file dataspace selection */
+	    start[0] = (j*iter_jump)+(mynod*opt_block);
+	    stride[0] = block[0] = opt_block;
+	    count[0]= 1;
+	    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+	    VRFY((ret >= 0), "H5Sset_hyperslab succeeded", H5FATAL);
+		/* seek to the appropriate spot give the current iteration and
+		 * rank within the MPI processes */
+
+		/* discover the start time */
+	   MPI_Barrier(MPI_COMM_WORLD);
+	   stim = MPI_Wtime();
+
+    /* read data */
+		/* read in the file data */
+		if (!opt_correct){
+    ret = H5Dread(dataset, H5T_NATIVE_CHAR, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, buf);
+		}
+		else{
+    ret = H5Dread(dataset, H5T_NATIVE_CHAR, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, buf2);
+		}
+		myerrno = errno;
+		/* discover the end time */
+	   etim = MPI_Wtime();
+	   read_tim += (etim - stim);
+    VRFY((ret >= 0), "H5Dwrite dataset1 succeeded", !H5FATAL);
+
+
+	   if (ret < 0) fprintf(stderr, "node %d, read error, loc = %Ld: %s\n",
+			mynod, mynod*opt_block, strerror(myerrno));
+
+		/* if the user wanted to check correctness, compare the write
+		 * buffer to the read buffer */
+		if (opt_correct && memcmp(buf, buf2, opt_block)) {
+			fprintf(stderr, "node %d, correctness test failed\n", mynod);
+			my_correct = 0;
+			MPI_Allreduce(&my_correct, &correct, 1, MPI_INT, MPI_MIN,
+				MPI_COMM_WORLD);
+		}
+
+		/* we are done with this read iteration */
+	}
+
+    /* close dataset and file */
+    ret=H5Dclose(dataset);
+    VRFY((ret >= 0), "H5Dclose succeeded", H5FATAL);
+    ret=H5Fclose(fid);
+    VRFY((ret >= 0), "H5Fclose succeeded", H5FATAL);
+
+	/* compute the read and write times */
+	MPI_Allreduce(&read_tim, &max_read_tim, 1, MPI_DOUBLE, MPI_MAX,
+		MPI_COMM_WORLD);
+	MPI_Allreduce(&read_tim, &min_read_tim, 1, MPI_DOUBLE, MPI_MIN,
+		MPI_COMM_WORLD);
+	MPI_Allreduce(&read_tim, &ave_read_tim, 1, MPI_DOUBLE, MPI_SUM,
+		MPI_COMM_WORLD);
+
+	/* calculate the average from the sum */
+	ave_read_tim = ave_read_tim / nprocs;
+
+	MPI_Allreduce(&write_tim, &max_write_tim, 1, MPI_DOUBLE, MPI_MAX,
+		MPI_COMM_WORLD);
+	MPI_Allreduce(&write_tim, &min_write_tim, 1, MPI_DOUBLE, MPI_MIN,
+		MPI_COMM_WORLD);
+	MPI_Allreduce(&write_tim, &ave_write_tim, 1, MPI_DOUBLE, MPI_SUM,
+		MPI_COMM_WORLD);
+
+	/* calculate the average from the sum */
+	ave_write_tim = ave_write_tim / nprocs;
+
+	/* print out the results on one node */
+	if (mynod == 0) {
+	   read_bw = ((int64_t)(opt_block*nprocs*opt_iter))/(max_read_tim*1000000.0);
+	   write_bw = ((int64_t)(opt_block*nprocs*opt_iter))/(max_write_tim*1000000.0);
+
+			printf("nr_procs = %d, nr_iter = %d, blk_sz = %ld\n", nprocs,
+		opt_iter, (long)opt_block);
+
+			printf("# total_size = %ld\n", (long)(opt_block*nprocs*opt_iter));
+
+			printf("# Write:  min_time = %f, max_time = %f, mean_time = %f\n",
+				min_write_tim, max_write_tim, ave_write_tim);
+			printf("# Read:  min_time = %f, max_time = %f, mean_time = %f\n",
+				min_read_tim, max_read_tim, ave_read_tim);
+
+	   printf("Write bandwidth = %f Mbytes/sec\n", write_bw);
+	   printf("Read bandwidth = %f Mbytes/sec\n", read_bw);
+
+		if (opt_correct) {
+			printf("Correctness test %s.\n", correct ? "passed" : "failed");
+		}
+	}
+
+
+die_jar_jar_die:
+
+#if H5_HAVE_SETENV
+/* no setenv or unsetenv */
+	/* clear the environment variable if it was set earlier */
+	if	(opt_pvfstab_set){
+		unsetenv("PVFSTAB_FILE");
+	}
+#endif
+
+	free(tmp);
+	if (opt_correct) free(tmp2);
+	MPI_Finalize();
+	return(0);
+}
+
+int parse_args(int argc, char **argv)
+{
+	int c;
+
+	while ((c = getopt(argc, argv, "s:b:i:f:p:a:2:c")) != EOF) {
+		switch (c) {
+			case 's': /* stripe */
+				opt_stripe = atoi(optarg);
+				break;
+			case 'b': /* block size */
+				opt_block = atoi(optarg);
+				break;
+			case 'i': /* iterations */
+				opt_iter = atoi(optarg);
+				break;
+			case 'f': /* filename */
+				strncpy(opt_file, optarg, 255);
+				break;
+			case 'p': /* pvfstab file */
+				strncpy(opt_pvfstab, optarg, 255);
+				opt_pvfstab_set = 1;
+				break;
+			case 'a': /* aligned allocation.
+				   * syntax: -a<alignment>/<threshold>
+				   * e.g., -a4096/512  allocate at 4096 bytes
+				   * boundary if request size >= 512.
+				   */
+				{char *p;
+				opt_alignment = atoi(optarg);
+				if (p=(char*)strchr(optarg, '/'))
+				    opt_threshold = atoi(p+1);
+				}
+				HDfprintf(stdout,
+				    "alignment/threshold=%Hu/%Hu\n",
+				     opt_alignment, opt_threshold);
+				break;
+			case '2': /* use 2-files, i.e., split file driver */
+				opt_split_vfd=1;
+				/* get meta and raw file extension. */
+				/* syntax is <raw_ext>,<meta_ext> */
+				meta_ext = raw_ext = optarg;
+				while (*raw_ext != '\0'){
+				    if (*raw_ext == ','){
+					*raw_ext = '\0';
+					raw_ext++;
+					break;
+				    }
+				    raw_ext++;
+				}
+				printf("split-file-vfd used: %s,%s\n",
+				    meta_ext, raw_ext);
+				break;
+			case 'c': /* correctness */
+				opt_correct = 1;
+				break;
+			case '?': /* unknown */
+			default:
+				break;
+		}
+	}
+	return(0);
+}
+
+/* Wtime() - returns current time in sec., in a double */
+double Wtime()
+{
+	struct timeval t;
+
+	gettimeofday(&t, NULL);
+	return((double)t.tv_sec + (double)t.tv_usec / 1000000);
+}
+
+/*
+ * Local variables:
+ *  c-indent-level: 3
+ *  c-basic-offset: 3
+ *  tab-width: 3
+ * End:
+ */
+
+#else /* H5_HAVE_PARALLEL */
+/* dummy program since H5_HAVE_PARALLE is not configured in */
+int
+main()
+{
+printf("No parallel performance because parallel is not configured in\n");
+return(0);
+}
+#endif /* H5_HAVE_PARALLEL */

Added: packages/hdf5/branches/upstream/current/perform/perf_meta.c
===================================================================
--- packages/hdf5/branches/upstream/current/perform/perf_meta.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/perf_meta.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,857 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Raymond Lu <slu at ncsa.uiuc.edu>
+ *		Friday, Oct 3, 2004
+ *
+ * Purpose:	Tests performance of metadata
+ */
+
+#include "h5test.h"
+#include <sys/time.h>
+
+#ifdef H5_HAVE_PARALLEL
+#define MAINPROCESS	(!mpi_rank)	/* define process 0 as main process */
+#endif /*H5_HAVE_PARALLEL*/
+
+/* File_Access_type bits */
+#define FACC_DEFAULT	0x0	/* serial as default */
+#define FACC_MPIO	0x1	/* MPIO */
+#define FACC_MPIPOSIX   0x8	/* MPIPOSIX */
+
+/* Which test to run */
+int RUN_TEST = 0x0;     /* all tests as default */
+int TEST_1   = 0x1;     /* Test 1 */
+int TEST_2   = 0x2;     /* Test 2 */
+int TEST_3   = 0x4;     /* Test 3 */
+
+
+const char *FILENAME[] = {
+    "meta_perf_1",
+    "meta_perf_2",
+    "meta_perf_3",
+    NULL
+};
+
+/* Default values for performance. Can be changed through command line options */
+int 	NUM_DSETS = 16;
+int 	NUM_ATTRS = 8;
+int 	BATCH_ATTRS = 2;
+hbool_t flush_dset = FALSE;
+hbool_t flush_attr = FALSE;
+int 	nerrors = 0;			/* errors count */
+hid_t	fapl;
+
+/* Data space IDs */
+hid_t	space;
+hid_t	small_space;
+
+/* Performance data */
+typedef struct p_time {
+    double total;
+    double avg;
+    double max;
+    double min;
+    double start;
+    char   func[32];
+} p_time;
+
+/*Test file access type for parallel.  MPIO as default */
+int facc_type = FACC_DEFAULT;
+
+double  retrieve_time(void);
+void    perf(p_time *perf_t, double start_t, double end_t);
+void    print_perf(p_time, p_time, p_time);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	parse_options
+ *
+  Purpose:	Parse command line options
+ *
+ * Programmer:	Raymond Lu
+ *		Friday, Oct 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+parse_options(int argc, char **argv)
+{
+    int t;
+
+    /* Use default values */
+    if(argc==1)
+	return(0);
+
+    while (--argc){
+	if (**(++argv) != '-'){
+	    break;
+	}else{
+	    switch(*(*argv+1)){
+                case 'h':   /* Help page */
+                            return(1);
+
+		case 'd':   /* Number of datasets */
+                            NUM_DSETS = atoi((*argv+1)+1);
+			    if (NUM_DSETS < 0){
+				nerrors++;
+				return(1);
+			    }
+			    break;
+
+		case 'a':   /* Number of attributes per dataset */
+                            NUM_ATTRS = atoi((*argv+1)+1);
+			    if (NUM_ATTRS < 0){
+				nerrors++;
+				return(1);
+			    }
+			    break;
+
+		case 'n':   /* Number of attributes to be created in batch */
+                            BATCH_ATTRS = atoi((*argv+1)+1);
+			    if (BATCH_ATTRS < 0){
+				nerrors++;
+				return(1);
+			    }
+			    break;
+
+		case 'p':   /* Use the MPI-POSIX driver access */
+			    facc_type = FACC_MPIPOSIX;
+			    break;
+
+		case 'm':   /* Use the MPI-POSIX driver access */
+			    facc_type = FACC_MPIO;
+			    break;
+
+                case 'f':   /* Call H5Fflush for each dataset or attribute */
+                            if(!strcmp("a", (*argv+2)))
+                                flush_attr = TRUE;
+                            else if(!strcmp("d", (*argv+2)))
+                                flush_dset = TRUE;
+                            else {
+                                nerrors++;
+                                return(1);
+                            }
+                            break;
+
+		case 't':   /* Which test to run */
+                            t = atoi((*argv+1)+1);
+			    if (t < 1 || t > 3){
+				nerrors++;
+				return(1);
+			    }
+                            if(t == 1)
+                                RUN_TEST |= TEST_1;
+                            else if(t == 2)
+                                RUN_TEST |= TEST_2;
+                            else
+                                RUN_TEST |= TEST_3;
+
+			    break;
+
+ 		default:    nerrors++;
+			    return(1);
+	    }
+	}
+    } /*while*/
+
+    /* Check valid values */
+#ifndef H5_HAVE_PARALLEL
+    if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX)
+    {
+        nerrors++;
+        return(1);
+    }
+#endif /*H5_HAVE_PARALLEL*/
+
+    if(NUM_ATTRS && !BATCH_ATTRS)
+        NUM_ATTRS = 0;
+
+    if(!NUM_ATTRS && BATCH_ATTRS)
+        BATCH_ATTRS = 0;
+
+    if(!NUM_DSETS) {
+        nerrors++;
+        return(1);
+    }
+
+    if(NUM_ATTRS && BATCH_ATTRS) {
+        if(BATCH_ATTRS > NUM_ATTRS || NUM_ATTRS % BATCH_ATTRS) {
+	    nerrors++;
+            return(1);
+        }
+    }
+
+    return(0);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	usage
+ *
+  Purpose:	Prints help page
+ *
+ * Programmer:	Raymond Lu
+ *		Friday, Oct 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+usage(void)
+{
+    printf("Usage: perf_meta [-h] [-m] [-p] [-d<num_datasets>]"
+           "[-a<num_attributes>]\n"
+           "\t[-n<batch_attributes>] [-f<option>] [-t<test>]\n");
+    printf("\t-h"
+	"\t\t\thelp page.\n");
+    printf("\t-m"
+	"\t\t\tset MPIO as the file driver when parallel HDF5\n"
+        "\t\t\t\tis enabled.  Either -m or -p has be to \n"
+        "\t\t\t\tspecified when running parallel program.\n");
+    printf("\t-p"
+	"\t\t\tset MPI POSIX as the file driver when parallel \n"
+	"\t\t\t\tHDF5 is enabled.  Either -m or -p has be to \n"
+        "\t\t\t\tspecified when running parallel program.\n");
+    printf("\t-d<num_datasets>"
+	"\tset number of datasets for meta data \n"
+        "\t\t\t\tperformance test\n");
+    printf("\t-a<num_attributes>"
+        "\tset number of attributes per dataset for meta \n"
+        "\t\t\t\tdata performance test.\n");
+    printf("\t-n<batch_attributes>"
+	"\tset batch number of attributes for dataset \n"
+        "\t\t\t\tfor meta data performance test.\n");
+    printf("\t-f<option>"
+	"\t\tflush data to disk after closing a dataset \n"
+        "\t\t\t\tor attribute.  Valid options are \"d\" for \n"
+        "\t\t\t\tdataset, \"a\" for attribute.  Disabled is \n"
+        "\t\t\t\tthe default.\n");
+    printf("\t-t<tests>"
+	"\t\trun specific test.  Give only one number each \n"
+        "\t\t\t\ttime. i.e. \"-t1 -t3\" will run test 1 and 3. \n"
+        "\t\t\t\tDefault is all three tests.  The 3 tests are: \n\n"
+        "\t\t\t\t1. Create <num_attributes> attributes for each \n"
+        "\t\t\t\t   of <num_datasets> existing datasets.\n"
+        "\t\t\t\t2. Create <num_attributes> attributes for each \n"
+        "\t\t\t\t   of <num_datasets> new datasets.\n"
+        "\t\t\t\t3. Create <batch_attributes> attributes for \n"
+        "\t\t\t\t   each of <num_dataset> new datasets for \n"
+        "\t\t\t\t   <num_attributes>/<batch_attributes> times.\n");
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	create_dspace
+ *
+ * Purpose:	Attempts to create data space.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		Friday, Oct 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+create_dspace(void)
+{
+    hsize_t	dims[2];
+    hsize_t	small_dims[2];
+
+    /* Create the data space */
+    dims[0] = 256;
+    dims[1] = 512;
+    if((space = H5Screate_simple(2, dims, NULL)) < 0)
+	    goto error;
+
+    /* Create a small data space for attributes */
+    small_dims[0] = 16;
+    small_dims[1] = 8;
+    if((small_space = H5Screate_simple(2, small_dims, NULL)) < 0)
+	    goto error;
+
+    return 0;
+
+error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	create_dsets
+ *
+ * Purpose:	Attempts to create some datasets.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		Friday, Oct 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+create_dsets(hid_t file)
+{
+    hid_t	dataset;
+    char	dset_name[32];
+    int		i;
+
+    /*
+     * Create a dataset using the default dataset creation properties.
+     */
+    for(i=0; i<NUM_DSETS; i++) {
+	sprintf(dset_name, "dataset %d", i);
+    	if((dataset = H5Dcreate(file, dset_name, H5T_NATIVE_DOUBLE,
+				space, H5P_DEFAULT)) < 0)
+    		goto error;
+
+    	if (H5Dclose(dataset) < 0) goto error;
+    }
+
+    return 0;
+
+error:
+    return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	create_attrs_1
+ *
+ * Purpose:	Attempts to create all attributes for each existing dataset.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		Friday, Oct 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+create_attrs_1(void)
+{
+    hid_t	file, dataset, attr;
+    char	filename[128];
+    char	dset_name[64];
+    char	attr_name[128];
+    int		i, j;
+    p_time      attr_t  = {0, 0, 0, 1000000, 0, ""};
+    p_time      open_t  = {0, 0, 0, 1000000, 0, "H5Dopen"};
+    p_time      close_t = {0, 0, 0, 1000000, 0, ""};
+
+#ifdef H5_HAVE_PARALLEL
+    /* need the rank for printing data */
+    int         mpi_rank;
+    if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX)
+        MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+#endif /*H5_HAVE_PARALLEL*/
+
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT,
+	fapl))<0)
+	goto error;
+
+    if(create_dsets(file)<0)
+	goto error;
+
+    /*
+     * Create all(user specifies the number) attributes for each dataset
+     */
+    for(i=0; i<NUM_DSETS; i++) {
+	sprintf(dset_name, "dataset %d", i);
+        open_t.start = retrieve_time();
+	if((dataset=H5Dopen(file, dset_name))<0)
+		goto error;
+	perf(&open_t, open_t.start, retrieve_time());
+
+	for(j=0; j<NUM_ATTRS; j++) {
+		sprintf(attr_name, "all attrs for each dset %d", j);
+	        attr_t.start = retrieve_time();
+    		if((attr = H5Acreate(dataset, attr_name, H5T_NATIVE_DOUBLE,
+			small_space, H5P_DEFAULT)) < 0)
+    			goto error;
+    		if (H5Aclose(attr) < 0) goto error;
+	 	perf(&attr_t, attr_t.start, retrieve_time());
+                if(flush_attr && H5Fflush(file, H5F_SCOPE_LOCAL)<0) goto error;
+    	}
+
+	close_t.start = retrieve_time();
+    	if(H5Dclose(dataset)<0) goto error;
+	perf(&close_t, close_t.start, retrieve_time());
+        if(flush_dset && H5Fflush(file,  H5F_SCOPE_LOCAL) < 0) goto error;
+    }
+
+    if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) {
+#ifdef H5_HAVE_PARALLEL
+        MPI_Barrier(MPI_COMM_WORLD);
+#endif /*H5_HAVE_PARALLEL*/
+    }
+
+#ifdef H5_HAVE_PARALLEL
+    if (facc_type == FACC_DEFAULT || (facc_type != FACC_DEFAULT && MAINPROCESS)) /* only process 0 reports */
+#endif /*H5_HAVE_PARALLEL*/
+    {
+        /* Calculate the average time */
+        open_t.avg  = open_t.total / NUM_DSETS;
+        close_t.avg = close_t.total / NUM_DSETS;
+        if(NUM_ATTRS)
+            attr_t.avg  = attr_t.total / (NUM_ATTRS*NUM_DSETS);
+
+        /* Print out the performance result */
+        fprintf(stderr, "1.  Create %d attributes for each of %d existing datasets\n",
+            NUM_ATTRS, NUM_DSETS);
+        print_perf(open_t, close_t, attr_t);
+    }
+
+    if (H5Fclose(file)<0) goto error;
+
+    return 0;
+
+error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	create_attrs_2
+ *
+ * Purpose:	Attempts to create all attributes for each new dataset.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		Friday, Oct 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+create_attrs_2(void)
+{
+    hid_t	file, dataset, attr;
+    char	filename[128];
+    char	dset_name[64];
+    char	attr_name[128];
+    int		i, j;
+    p_time      attr_t  = {0, 0, 0, 1000000, 0, ""};
+    p_time      create_t  = {0, 0, 0, 1000000, 0, "H5Dcreate"};
+    p_time      close_t = {0, 0, 0, 1000000, 0, ""};
+
+#ifdef H5_HAVE_PARALLEL
+    /* need the rank for printing data */
+    int         mpi_rank;
+    if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX)
+        MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+#endif /*H5_HAVE_PARALLEL*/
+
+    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	goto error;
+
+    /*
+     * Create all(user specifies the number) attributes for each new dataset
+     */
+    for(i=0; i<NUM_DSETS; i++) {
+	sprintf(dset_name, "dataset %d", i);
+        create_t.start = retrieve_time();
+   	if((dataset = H5Dcreate(file, dset_name, H5T_NATIVE_DOUBLE,
+				space, H5P_DEFAULT)) < 0)
+    		goto error;
+	perf(&create_t, create_t.start, retrieve_time());
+
+	for(j=0; j<NUM_ATTRS; j++) {
+		sprintf(attr_name, "all attrs for each dset %d", j);
+	        attr_t.start = retrieve_time();
+    		if((attr = H5Acreate(dataset, attr_name, H5T_NATIVE_DOUBLE,
+			small_space, H5P_DEFAULT)) < 0)
+    			goto error;
+    		if (H5Aclose(attr) < 0) goto error;
+	 	perf(&attr_t, attr_t.start, retrieve_time());
+                if(flush_attr && H5Fflush(file,  H5F_SCOPE_LOCAL) < 0) goto error;
+	}
+
+	close_t.start = retrieve_time();
+    	if(H5Dclose(dataset)<0) goto error;
+	perf(&close_t, close_t.start, retrieve_time());
+        if(flush_dset && H5Fflush(file,  H5F_SCOPE_LOCAL) < 0) goto error;
+    }
+
+    if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) {
+#ifdef H5_HAVE_PARALLEL
+    MPI_Barrier(MPI_COMM_WORLD);
+#endif /*H5_HAVE_PARALLEL*/
+    }
+
+#ifdef H5_HAVE_PARALLEL
+    /* only process 0 reports if parallel */
+    if (facc_type == FACC_DEFAULT || (facc_type != FACC_DEFAULT && MAINPROCESS))
+#endif /*H5_HAVE_PARALLEL*/
+    {
+        /* Calculate the average time */
+        create_t.avg = create_t.total / NUM_DSETS;
+        close_t.avg  = close_t.total / NUM_DSETS;
+        if(NUM_ATTRS)
+            attr_t.avg = attr_t.total / (NUM_ATTRS*NUM_DSETS);
+
+        /* Print out the performance result */
+        fprintf(stderr, "2.  Create %d attributes for each of %d new datasets\n",
+            NUM_ATTRS, NUM_DSETS);
+        print_perf(create_t, close_t, attr_t);
+    }
+
+    if (H5Fclose(file)<0) goto error;
+
+    return 0;
+
+error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	create_attrs_3
+ *
+ * Purpose:	Attempts to create some attributes for each dataset in a
+ * 		loop.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		Friday, Oct 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+create_attrs_3(void)
+{
+    hid_t	file, dataset, attr;
+    char	filename[128];
+    char	dset_name[64];
+    char	attr_name[128];
+    int		loop_num;
+    int		i, j, k;
+    p_time      attr_t  = {0, 0, 0, 1000000, 0, ""};
+    p_time      open_t  = {0, 0, 0, 1000000, 0, "H5Dopen"};
+    p_time      close_t = {0, 0, 0, 1000000, 0, ""};
+
+#ifdef H5_HAVE_PARALLEL
+    /* need the rank for printing data */
+    int         mpi_rank;
+    if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX)
+        MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+#endif /*H5_HAVE_PARALLEL*/
+
+    h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
+
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT,
+	fapl))<0)
+	goto error;
+
+    if(create_dsets(file)<0)
+	goto error;
+
+    /*
+     * Create some(user specifies the number) attributes for each dataset
+     * in a loop
+     */
+    loop_num = NUM_ATTRS/BATCH_ATTRS;
+
+    for(i=0; i<loop_num; i++) {
+    	for(j=0; j<NUM_DSETS; j++) {
+		sprintf(dset_name, "dataset %d", j);
+        	open_t.start = retrieve_time();
+   		if((dataset = H5Dopen(file, dset_name)) < 0)
+    			goto error;
+		perf(&open_t, open_t.start, retrieve_time());
+
+    		for(k=0; k<BATCH_ATTRS; k++) {
+			sprintf(attr_name, "some attrs for each dset %d %d",
+					i, k);
+	        	attr_t.start = retrieve_time();
+    			if((attr = H5Acreate(dataset, attr_name,
+				H5T_NATIVE_DOUBLE, small_space, H5P_DEFAULT))
+					< 0) goto error;
+    			if (H5Aclose(attr) < 0) goto error;
+	 		perf(&attr_t, attr_t.start, retrieve_time());
+                        if(flush_attr && H5Fflush(file,  H5F_SCOPE_LOCAL) < 0) goto error;
+    		}
+
+		close_t.start = retrieve_time();
+    		if(H5Dclose(dataset)<0) goto error;
+		perf(&close_t, close_t.start, retrieve_time());
+                if(flush_dset && H5Fflush(file,  H5F_SCOPE_LOCAL) < 0) goto error;
+    	}
+    }
+
+    if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) {
+#ifdef H5_HAVE_PARALLEL
+        MPI_Barrier(MPI_COMM_WORLD);
+#endif /*H5_HAVE_PARALLEL*/
+    }
+
+#ifdef H5_HAVE_PARALLEL
+    /* only process 0 reports if parallel */
+    if (facc_type == FACC_DEFAULT || (facc_type != FACC_DEFAULT && MAINPROCESS))
+#endif /*H5_HAVE_PARALLEL*/
+    {
+        /* Calculate the average time */
+        open_t.avg = open_t.total / (loop_num*NUM_DSETS);
+        close_t.avg = close_t.total / (loop_num*NUM_DSETS);
+        attr_t.avg = attr_t.total / (NUM_ATTRS*NUM_DSETS);
+
+        /* Print out the performance result */
+        fprintf(stderr, "3.  Create %d attributes for each of %d existing datasets for %d times\n",
+            BATCH_ATTRS, NUM_DSETS, loop_num);
+        print_perf(open_t, close_t, attr_t);
+    }
+
+    if (H5Fclose(file)<0) goto error;
+
+    return 0;
+
+error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	retrieve_time
+ *
+ * Purpose:     Returns time in seconds, in a double number.
+ *
+ * Programmer:	Raymond Lu
+ *		Friday, Oct 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+double retrieve_time(void)
+{
+#ifdef H5_HAVE_PARALLEL
+    if(facc_type == FACC_DEFAULT) {
+#endif /*H5_HAVE_PARALLEL*/
+        struct timeval t;
+        gettimeofday(&t, NULL);
+        return ((double)t.tv_sec + (double)t.tv_usec / 1000000);
+#ifdef H5_HAVE_PARALLEL
+    } else {
+        return MPI_Wtime();
+    }
+#endif /*H5_HAVE_PARALLEL*/
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	perf
+ *
+ * Purpose:	Calculate total time, maximal and minimal time of
+ *              performance.
+ *
+ * Programmer:	Raymond Lu
+ *		Friday, Oct 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void perf(p_time *perf_t, double start_t, double end_t)
+{
+	double t = end_t - start_t;
+
+    if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) {
+#ifdef H5_HAVE_PARALLEL
+        double reduced_t;
+        double t_max, t_min;
+        int    mpi_size, mpi_rank;
+
+        MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+        MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+        MPI_Barrier(MPI_COMM_WORLD);
+
+        MPI_Reduce(&t, &reduced_t, 1, MPI_DOUBLE, MPI_SUM, 0,
+                MPI_COMM_WORLD);
+        reduced_t /= mpi_size;
+
+        MPI_Reduce(&t, &t_max, 1, MPI_DOUBLE, MPI_MAX, 0,
+                MPI_COMM_WORLD);
+        MPI_Reduce(&t, &t_min, 1, MPI_DOUBLE, MPI_MIN, 0,
+                MPI_COMM_WORLD);
+
+        if (MAINPROCESS) {
+            perf_t->total += reduced_t;
+
+	    if(t_max > perf_t->max)
+		perf_t->max = t_max;
+	    if(t_min < perf_t->min)
+		perf_t->min = t_min;
+        }
+#endif /*H5_HAVE_PARALLEL*/
+    } else {
+	perf_t->total += t;
+
+	if(t > perf_t->max)
+		perf_t->max = t;
+	if(t < perf_t->min)
+		perf_t->min = t;
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	print_perf
+ *
+ * Purpose:	Print out performance data.
+ *
+ * Programmer:	Raymond Lu
+ *		Friday, Oct 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void print_perf(p_time open_t, p_time close_t, p_time attr_t)
+{
+    fprintf(stderr, "\t%s:\t\tavg=%.6fs;\tmax=%.6fs;\tmin=%.6fs\n",
+		open_t.func, open_t.avg, open_t.max, open_t.min);
+    fprintf(stderr, "\tH5Dclose:\t\tavg=%.6fs;\tmax=%.6fs;\tmin=%.6fs\n",
+		close_t.avg, close_t.max, close_t.min);
+    if(NUM_ATTRS)
+        fprintf(stderr, "\tH5A(create & close):\tavg=%.6fs;\tmax=%.6fs;\tmin=%.6fs\n",
+		attr_t.avg, attr_t.max, attr_t.min);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Tests
+ *
+ * Return:	Success:	exit(0)
+ *
+ *		Failure:	exit(1)
+ *
+ * Programmer:	Raymond Lu
+ *		Friday, Oct 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(int argc, char **argv)
+{
+#ifdef H5_HAVE_PARALLEL
+    int mpi_size, mpi_rank;				/* mpi variables */
+#endif /*H5_HAVE_PARALLEL*/
+
+    if(parse_options(argc, argv) != 0) {
+	   usage();
+	   return 0;
+    }
+
+    if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) {
+#ifdef H5_HAVE_PARALLEL
+        MPI_Init(&argc, &argv);
+        MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+        MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+#endif /*H5_HAVE_PARALLEL*/
+    }
+
+#ifdef H5_HAVE_PARALLEL
+    if (facc_type == FACC_DEFAULT || (facc_type != FACC_DEFAULT && MAINPROCESS))
+#endif /*H5_HAVE_PARALLEL*/
+        fprintf(stderr, "\t\tPerformance result of metadata for datasets and attributes\n\n");
+
+    fapl = H5Pcreate (H5P_FILE_ACCESS);
+    if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) {
+#ifdef H5_HAVE_PARALLEL
+        if(facc_type == FACC_DEFAULT || facc_type == FACC_MPIO)
+            H5Pset_fapl_mpio(fapl, MPI_COMM_WORLD, MPI_INFO_NULL);
+        else if(facc_type == FACC_MPIPOSIX)
+#ifdef H5_WANT_H5_V1_4_COMPAT
+            H5Pset_fapl_mpiposix(fapl, MPI_COMM_WORLD);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+            H5Pset_fapl_mpiposix(fapl, MPI_COMM_WORLD, FALSE);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+#endif /*H5_HAVE_PARALLEL*/
+    }
+
+    nerrors += create_dspace()<0 	?1:0;
+
+    if((RUN_TEST & TEST_1) || !RUN_TEST)
+        nerrors += create_attrs_1()<0 	?1:0;
+    if((RUN_TEST & TEST_2) || !RUN_TEST)
+        nerrors += create_attrs_2()<0 	?1:0;
+    if(((RUN_TEST & TEST_3) || !RUN_TEST) && BATCH_ATTRS && NUM_ATTRS)
+        nerrors += create_attrs_3()<0 	?1:0;
+
+    if (H5Sclose(space)<0) goto error;
+    if (H5Sclose(small_space)<0) goto error;
+
+    h5_cleanup(FILENAME, fapl);
+
+    if(facc_type == FACC_MPIO || facc_type == FACC_MPIPOSIX) {
+#ifdef H5_HAVE_PARALLEL
+        /* MPI_Finalize must be called AFTER H5close which may use MPI calls */
+        MPI_Finalize();
+#endif /*H5_HAVE_PARALLEL*/
+    }
+
+    if (nerrors) goto error;
+#ifdef H5_HAVE_PARALLEL
+    if (facc_type != FACC_DEFAULT && MAINPROCESS)
+#endif /*H5_HAVE_PARALLEL*/
+        printf("All metadata performance tests passed.\n");
+
+    return 0;
+
+ error:
+    nerrors = MAX(1, nerrors);
+#ifdef H5_HAVE_PARALLEL
+    if (facc_type != FACC_DEFAULT && MAINPROCESS)
+#endif /*H5_HAVE_PARALLEL*/
+        printf("***** %d PERFORMANCE TEST%s FAILED! *****\n",
+	   nerrors, 1 == nerrors ? "" : "S");
+
+    return 1;
+}
+

Added: packages/hdf5/branches/upstream/current/perform/pio_engine.c
===================================================================
--- packages/hdf5/branches/upstream/current/perform/pio_engine.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/pio_engine.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2145 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Author: Albert Cheng of NCSA, Oct 24, 2001.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include "hdf5.h"
+
+#ifdef H5_HAVE_PARALLEL
+
+#include <mpi.h>
+
+#ifndef MPI_FILE_NULL           /*MPIO may be defined in mpi.h already       */
+#   include <mpio.h>
+#endif  /* !MPI_FILE_NULL */
+
+#ifdef H5_HAVE_GPFS
+#   include <gpfs_fcntl.h>
+#endif  /* H5_HAVE_GPFS */
+
+#include "pio_perf.h"
+#include "pio_timer.h"
+
+/* Macro definitions */
+
+/* sizes of various items. these sizes won't change during program execution */
+/* The following three must have the same type */
+#define ELMT_SIZE           (sizeof(unsigned char))     /* we're doing bytes */
+#define ELMT_MPI_TYPE       MPI_BYTE
+#define ELMT_H5_TYPE        H5T_NATIVE_UCHAR
+
+#define GOTOERROR(errcode)	{ ret_code = errcode; goto done; }
+#define GOTODONE		{ goto done; }
+#define ERRMSG(mesg) {                                                  \
+    fprintf(stderr, "Proc %d: ", pio_mpi_rank_g);                       \
+    fprintf(stderr, "*** Assertion failed (%s) at line %4d in %s\n",    \
+            mesg, (int)__LINE__, __FILE__);                             \
+}
+
+#define MSG(mesg) {                                     \
+    fprintf(stderr, "Proc %d: ", pio_mpi_rank_g);       \
+    fprintf(stderr, "(%s) at line %4d in %s\n",         \
+            mesg, (int)__LINE__, __FILE__);             \
+}
+
+/* verify: if val is false (0), print mesg. */
+#define VRFY(val, mesg) do {                            \
+    if (!val) {                                         \
+        ERRMSG(mesg);                                   \
+        GOTOERROR(FAIL);                                \
+    }                                                   \
+} while(0)
+
+
+/* POSIX I/O macros */
+#define POSIXCREATE(fn)           HDopen(fn, O_CREAT|O_TRUNC|O_RDWR, 0600)
+#define POSIXOPEN(fn, F)          HDopen(fn, F, 0600)
+#define POSIXCLOSE(F)             HDclose(F)
+#define POSIXSEEK(F,L)            HDlseek(F, L, SEEK_SET)
+#define POSIXWRITE(F,B,S)         HDwrite(F,B,S)
+#define POSIXREAD(F,B,S)          HDread(F,B,S)
+
+enum {
+    PIO_CREATE = 1,
+    PIO_WRITE = 2,
+    PIO_READ = 4
+};
+
+/* Global variables */
+static int	clean_file_g = -1;	/*whether to cleanup temporary test     */
+                                        /*files. -1 is not defined;             */
+                                        /*0 is no cleanup; 1 is do cleanup      */
+
+/*
+ * In a parallel machine, the filesystem suitable for compiling is
+ * unlikely a parallel file system that is suitable for parallel I/O.
+ * There is no standard pathname for the parallel file system.  /tmp
+ * is about the best guess.
+ */
+#ifndef HDF5_PARAPREFIX
+#  ifdef __PUMAGON__
+     /* For the PFS of TFLOPS */
+#    define HDF5_PARAPREFIX     "pfs:/pfs_grande/multi/tmp_1"
+#  else
+#    define HDF5_PARAPREFIX     ""
+#  endif    /* __PUMAGON__ */
+#endif  /* !HDF5_PARAPREFIX */
+
+#ifndef MIN
+#   define MIN(a,b) ((a) < (b) ? (a) : (b))
+#endif  /* !MIN */
+
+/* the different types of file descriptors we can expect */
+typedef union _file_descr {
+    int         posixfd;    /* POSIX file handle*/
+    MPI_File    mpifd;      /* MPI file         */
+    hid_t       h5fd;       /* HDF5 file        */
+} file_descr;
+
+/* local functions */
+static char  *pio_create_filename(iotype iot, const char *base_name,
+                                  char *fullname, size_t size);
+static herr_t do_write(results *res, file_descr *fd, parameters *parms,
+    long ndsets, off_t nelmts, size_t buf_size, void *buffer);
+static herr_t do_read(results *res, file_descr *fd, parameters *parms,
+    long ndsets, off_t nelmts, size_t buf_size, void *buffer /*out*/);
+static herr_t do_fopen(parameters *param, char *fname, file_descr *fd /*out*/,
+                       int flags);
+static herr_t do_fclose(iotype iot, file_descr *fd);
+static void do_cleanupfile(iotype iot, char *fname);
+
+/* GPFS-specific functions */
+#ifdef H5_HAVE_GPFS
+static void gpfs_access_range(int handle, off_t start, off_t length, int is_write);
+static void gpfs_free_range(int handle, off_t start, off_t length);
+static void gpfs_clear_file_cache(int handle);
+static void gpfs_cancel_hints(int handle);
+static void gpfs_start_data_shipping(int handle, int num_insts);
+static void gpfs_start_data_ship_map(int handle, int partition_size,
+                                     int agent_count, int *agent_node_num);
+static void gpfs_stop_data_shipping(int handle);
+static void gpfs_invalidate_file_cache(const char *filename);
+#endif /* H5_HAVE_GPFS */
+
+/*
+ * Function:    do_pio
+ * Purpose:     PIO Engine where Parallel IO are executed.
+ * Return:      results
+ * Programmer:  Albert Cheng, Bill Wendling 2001/12/12
+ * Modifications:
+ */
+results
+do_pio(parameters param)
+{
+    /* return codes */
+    herr_t      ret_code = 0;   /*return code                           */
+    results     res;
+
+    file_descr	fd;
+    iotype      iot;
+
+    char        fname[FILENAME_MAX];
+    long	nf;
+    long        ndsets;
+    off_t       nbytes;                 /* Number of bytes per dataset  */
+    char        *buffer = NULL;         /*data buffer pointer           */
+    size_t      buf_size;               /*data buffer size in bytes     */
+    size_t      blk_size;               /*data block size in bytes      */
+
+    /* HDF5 variables */
+    herr_t          hrc;                /*HDF5 return code              */
+
+    /* Sanity check parameters */
+
+    /* IO type */
+    iot = param.io_type;
+
+    switch (iot) {
+    case MPIO:
+        fd.mpifd = MPI_FILE_NULL;
+        res.timers = pio_time_new(MPI_TIMER);
+        break;
+    case POSIXIO:
+        fd.posixfd = -1;
+        res.timers = pio_time_new(MPI_TIMER);
+        break;
+    case PHDF5:
+        fd.h5fd = -1;
+        res.timers = pio_time_new(MPI_TIMER);
+        break;
+    default:
+        /* unknown request */
+        fprintf(stderr, "Unknown IO type request (%d)\n", iot);
+        GOTOERROR(FAIL);
+    }
+
+    ndsets = param.num_dsets;       /* number of datasets per file          */
+    nbytes = param.num_bytes;       /* number of bytes per dataset          */
+    buf_size = param.buf_size;
+    blk_size = param.blk_size;
+
+    if (param.num_files < 0 ) {
+        fprintf(stderr,
+                "number of files must be >= 0 (%ld)\n",
+                param.num_files);
+        GOTOERROR(FAIL);
+    }
+
+    if (ndsets < 0 ) {
+        fprintf(stderr,
+                "number of datasets per file must be >= 0 (%ld)\n",
+                ndsets);
+        GOTOERROR(FAIL);
+    }
+
+    if (param.num_procs <= 0 ) {
+        fprintf(stderr,
+                "maximum number of process to use must be > 0 (%d)\n",
+                param.num_procs);
+        GOTOERROR(FAIL);
+    }
+
+    /* Validate transfer buffer size & block size*/
+    if(blk_size<=0) {
+        HDfprintf(stderr,
+	    "Transfer block size (%Hd) must be > 0\n", (long_long)blk_size);
+	GOTOERROR(FAIL);
+    }
+    if(buf_size<=0) {
+        HDfprintf(stderr,
+	    "Transfer buffer size (%Hd) must be > 0\n", (long_long)buf_size);
+	GOTOERROR(FAIL);
+    }
+    if ((buf_size % blk_size) != 0){
+        HDfprintf(stderr,
+            "Transfer buffer size (%Hd) must be a multiple of the "
+            "interleaved I/O block size (%Hd)\n",
+            (long_long)buf_size, (long_long)blk_size);
+        GOTOERROR(FAIL);
+    }
+    if((nbytes%pio_mpi_nprocs_g)!=0) {
+        HDfprintf(stderr,
+            "Dataset size (%Hd) must be a multiple of the "
+            "number of processes (%d)\n",
+            (long_long)nbytes, pio_mpi_nprocs_g);
+	GOTOERROR(FAIL);
+    }
+    if(((nbytes/pio_mpi_nprocs_g)%buf_size)!=0) {
+        HDfprintf(stderr,
+            "Dataset size/process (%Hd) must be a multiple of the "
+            "trasfer buffer size (%Hd)\n",
+            (long_long)(nbytes/pio_mpi_nprocs_g), (long_long)buf_size);
+	GOTOERROR(FAIL);
+    }
+
+    /* Allocate transfer buffer */
+    if ((buffer = malloc(buf_size)) == NULL){
+        HDfprintf(stderr, "malloc for transfer buffer size (%Hd) failed\n",
+            (long_long)(buf_size));
+        GOTOERROR(FAIL);
+    }
+
+    if (pio_debug_level >= 4) {
+        int myrank;
+
+        MPI_Comm_rank(pio_comm_g, &myrank);
+
+        /* output all of the times for all iterations */
+        if (myrank == 0)
+            fprintf(output, "Timer details:\n");
+    }
+
+    for (nf = 1; nf <= param.num_files; nf++) {
+	/*
+	 * Write performance measurement
+	 */
+        /* Open file for write */
+        char base_name[256];
+
+        sprintf(base_name, "#pio_tmp_%lu", nf);
+        pio_create_filename(iot, base_name, fname, sizeof(fname));
+	if (pio_debug_level > 0)
+	    HDfprintf(output, "rank %d: data filename=%s\n",
+		pio_mpi_rank_g, fname);
+
+	/* Need barrier to make sure everyone starts at the same time */
+        MPI_Barrier(pio_comm_g);
+
+        set_time(res.timers, HDF5_GROSS_WRITE_FIXED_DIMS, START);
+        hrc = do_fopen(&param, fname, &fd, PIO_CREATE | PIO_WRITE);
+
+        VRFY((hrc == SUCCESS), "do_fopen failed");
+
+        set_time(res.timers, HDF5_FINE_WRITE_FIXED_DIMS, START);
+        hrc = do_write(&res, &fd, &param, ndsets, nbytes, buf_size, buffer);
+        set_time(res.timers, HDF5_FINE_WRITE_FIXED_DIMS, STOP);
+
+        VRFY((hrc == SUCCESS), "do_write failed");
+
+        /* Close file for write */
+        hrc = do_fclose(iot, &fd);
+
+        set_time(res.timers, HDF5_GROSS_WRITE_FIXED_DIMS, STOP);
+        VRFY((hrc == SUCCESS), "do_fclose failed");
+
+        if (!param.h5_write_only) {
+            /*
+             * Read performance measurement
+             */
+	    /* Need barrier to make sure everyone is done writing and has
+	     * closed the file.  Also to make sure everyone starts reading
+	     * at the same time.
+	     */
+            MPI_Barrier(pio_comm_g);
+
+            /* Open file for read */
+            set_time(res.timers, HDF5_GROSS_READ_FIXED_DIMS, START);
+            hrc = do_fopen(&param, fname, &fd, PIO_READ);
+
+            VRFY((hrc == SUCCESS), "do_fopen failed");
+
+            set_time(res.timers, HDF5_FINE_READ_FIXED_DIMS, START);
+            hrc = do_read(&res, &fd, &param, ndsets, nbytes, buf_size, buffer);
+            set_time(res.timers, HDF5_FINE_READ_FIXED_DIMS, STOP);
+            VRFY((hrc == SUCCESS), "do_read failed");
+
+            /* Close file for read */
+            hrc = do_fclose(iot, &fd);
+
+            set_time(res.timers, HDF5_GROSS_READ_FIXED_DIMS, STOP);
+            VRFY((hrc == SUCCESS), "do_fclose failed");
+        }
+
+	/* Need barrier to make sure everyone is done with the file */
+	/* before it may be removed by do_cleanupfile */
+        MPI_Barrier(pio_comm_g);
+        do_cleanupfile(iot, fname);
+    }
+
+done:
+    /* clean up */
+    /* release HDF5 objects */
+
+    /* close any opened files */
+    /* no remove(fname) because that should have happened normally. */
+    switch (iot) {
+    case POSIXIO:
+        if (fd.posixfd != -1)
+            hrc = do_fclose(iot, &fd);
+        break;
+    case MPIO:
+        if (fd.mpifd != MPI_FILE_NULL)
+            hrc = do_fclose(iot, &fd);
+        break;
+    case PHDF5:
+        if (fd.h5fd != -1)
+            hrc = do_fclose(iot, &fd);
+        break;
+    }
+
+    /* release generic resources */
+    if(buffer)
+        free(buffer);
+    res.ret_code = ret_code;
+    return res;
+}
+
+/*
+ * Function:    pio_create_filename
+ * Purpose:     Create a new filename to write to. Determine the correct
+ *              suffix to append to the filename by the type of I/O we're
+ *              doing. Also, place in the /tmp/{$USER,$LOGIN} directory if
+ *              USER or LOGIN are specified in the environment.
+ * Return:      Pointer to filename or NULL
+ * Programmer:  Bill Wendling, 21. November 2001
+ * Modifications:
+ */
+static char *
+pio_create_filename(iotype iot, const char *base_name, char *fullname, size_t size)
+{
+    const char *prefix, *suffix="";
+    char *ptr, last = '\0';
+    size_t i, j;
+
+    if (!base_name || !fullname || size < 1)
+        return NULL;
+
+    memset(fullname, 0, size);
+
+    switch (iot) {
+    case POSIXIO:
+        suffix = ".posix";
+        break;
+    case MPIO:
+        suffix = ".mpio";
+        break;
+    case PHDF5:
+        suffix = ".h5";
+        break;
+    }
+
+    /* First use the environment variable and then try the constant */
+    prefix = getenv("HDF5_PARAPREFIX");
+
+#ifdef HDF5_PARAPREFIX
+    if (!prefix)
+        prefix = HDF5_PARAPREFIX;
+#endif  /* HDF5_PARAPREFIX */
+
+    /* Prepend the prefix value to the base name */
+    if (prefix && *prefix) {
+        /* If the prefix specifies the HDF5_PARAPREFIX directory, then
+         * default to using the "/tmp/$USER" or "/tmp/$LOGIN"
+         * directory instead. */
+        register char *user, *login, *subdir;
+
+        user = getenv("USER");
+        login = getenv("LOGIN");
+        subdir = (user ? user : login);
+
+        if (subdir) {
+            for (i = 0; i < size && prefix[i]; i++)
+                fullname[i] = prefix[i];
+
+            fullname[i++] = '/';
+
+            for (j = 0; i < size && subdir[j]; i++, j++)
+                fullname[i] = subdir[j];
+        } else {
+            /* We didn't append the prefix yet */
+            strncpy(fullname, prefix, MIN(strlen(prefix), size));
+        }
+
+        if ((strlen(fullname) + strlen(base_name) + 1) < size) {
+            /* Append the base_name with a slash first. Multiple slashes are
+             * handled below. */
+            h5_stat_t buf;
+
+            if (HDstat(fullname, &buf) < 0)
+                /* The directory doesn't exist just yet */
+                if (mkdir(fullname, (mode_t)0755) < 0 && errno != EEXIST) {
+                    /* We couldn't make the "/tmp/${USER,LOGIN}" subdirectory.
+                     * Default to PREFIX's original prefix value. */
+                    strcpy(fullname, prefix);
+                }
+
+            strcat(fullname, "/");
+            strcat(fullname, base_name);
+        } else {
+            /* Buffer is too small */
+            return NULL;
+        }
+    } else if (strlen(base_name) >= size) {
+        /* Buffer is too small */
+        return NULL;
+    } else {
+        strcpy(fullname, base_name);
+    }
+
+    /* Append a suffix */
+    if (suffix) {
+        if (strlen(fullname) + strlen(suffix) >= size)
+            return NULL;
+
+        strcat(fullname, suffix);
+    }
+
+    /* Remove any double slashes in the filename */
+    for (ptr = fullname, i = j = 0; ptr && i < size; i++, ptr++) {
+        if (*ptr != '/' || last != '/')
+            fullname[j++] = *ptr;
+
+        last = *ptr;
+    }
+
+    return fullname;
+}
+
+/*
+ * Function:    do_write
+ * Purpose:     Write the required amount of data to the file.
+ * Return:      SUCCESS or FAIL
+ * Programmer:  Albert Cheng, Bill Wendling, 2001/12/13
+ * Modifications:
+ */
+static herr_t
+do_write(results *res, file_descr *fd, parameters *parms, long ndsets,
+         off_t nbytes, size_t buf_size, void *buffer)
+{
+    int         ret_code = SUCCESS;
+    int         rc;             /*routine return code                   */
+    long        ndset;
+    size_t      blk_size;       /* The block size to subdivide the xfer buffer into */
+    off_t       nbytes_xfer;    /* Total number of bytes transferred so far */
+    size_t      nbytes_toxfer;  /* Number of bytes to transfer a particular time */
+    char        dname[64];
+    off_t       dset_offset=0;  /*dataset offset in a file              */
+    off_t       bytes_begin;    /*first elmt this process transfer      */
+    off_t       bytes_count;    /*number of elmts this process transfer */
+    unsigned char *buf_p;       /* Current buffer pointer               */
+
+    /* POSIX variables */
+    off_t       file_offset;    /* File offset of the next transfer     */
+    off_t       posix_file_offset;    /* Base file offset of the next transfer      */
+
+    /* MPI variables */
+    MPI_Offset  mpi_file_offset;/* Base file offset of the next transfer*/
+    MPI_Offset	mpi_offset;     /* Offset in MPI file                   */
+    MPI_Datatype mpi_file_type; /* MPI derived type for file            */
+    MPI_Datatype mpi_blk_type;  /* MPI derived type for buffer          */
+    MPI_Status	mpi_status;
+    int         mrc;            /* MPI return code                      */
+
+    /* HDF5 variables */
+    herr_t      hrc;                    /*HDF5 return code              */
+    hsize_t     h5dims[1];              /*dataset dim sizes             */
+    hid_t       h5dset_space_id = -1;   /*dataset space ID              */
+    hid_t       h5mem_space_id = -1;    /*memory dataspace ID           */
+    hid_t       h5ds_id = -1;           /*dataset handle                */
+    hsize_t	h5block[1];		/*dataspace selection           */
+    hsize_t	h5stride[1];
+    hsize_t	h5count[1];
+    hsize_t	h5start[1];
+    hssize_t	h5offset[1];            /* Selection offset within dataspace */
+    hid_t       h5dcpl = -1;            /* Dataset creation property list */
+    hid_t       h5dxpl = -1;            /* Dataset transfer property list */
+
+    /* Get the parameters from the parameter block */
+    blk_size=parms->blk_size;
+
+    /* Prepare buffer for verifying data */
+    if (parms->verify)
+        memset(buffer,pio_mpi_rank_g,buf_size);
+
+    /* There are two kinds of transfer patterns, contiguous and interleaved.
+     * Let 0,1,2,...,n be data accessed by process 0,1,2,...,n
+     *     where n is rank of the last process.
+     * In contiguous pattern, data are accessed as
+     *    000...111...222...nnn...
+     * In interleaved pattern, data are accessed as
+     *    012...n012...n...
+     * These are all in the scope of one dataset.
+     */
+    if (parms->interleaved==0) {
+        /* Contiguous Pattern: */
+        bytes_begin = (off_t)(((double)nbytes*pio_mpi_rank_g)/pio_mpi_nprocs_g);
+    } /* end if */
+    else {
+        /* Interleaved Pattern: */
+        bytes_begin = (off_t)(blk_size*pio_mpi_rank_g);
+    } /* end else */
+
+    /* Calculate the total number of bytes (bytes_count) to be
+     * transferred by this process. It may be different for different
+     * transfer pattern due to rounding to integral values.
+     */
+    /*
+     * Calculate the beginning bytes of this process and the next.
+     * bytes_count is the difference between these two beginnings.
+     * This way, it eliminates any rounding errors.
+     * (This is tricky, don't mess with the formula, rounding errors
+     * can easily get introduced) */
+    bytes_count = (off_t)(((double)nbytes*(pio_mpi_rank_g+1)) / pio_mpi_nprocs_g)
+                  - (off_t)(((double)nbytes*pio_mpi_rank_g) / pio_mpi_nprocs_g);
+
+    /* debug */
+    if (pio_debug_level >= 4) {
+        HDprint_rank(output);
+        HDfprintf(output, "Debug(do_write): "
+            "buf_size=%Hd, bytes_begin=%Hd, bytes_count=%Hd\n",
+            (long_long)buf_size, (long_long)bytes_begin,
+            (long_long)bytes_count);
+    }
+
+    /* I/O Access specific setup */
+    switch (parms->io_type) {
+        case POSIXIO:
+            /* No extra setup */
+            break;
+
+        case MPIO: /* MPI-I/O setup */
+            /* Build block's derived type */
+            mrc = MPI_Type_contiguous((int)blk_size,
+                    MPI_BYTE, &mpi_blk_type);
+            VRFY((mrc==MPI_SUCCESS), "MPIO_TYPE_CREATE");
+
+            /* Build file's derived type */
+            mrc = MPI_Type_vector((int)(buf_size/blk_size), (int)1,
+                    (int)pio_mpi_nprocs_g, mpi_blk_type, &mpi_file_type);
+            VRFY((mrc==MPI_SUCCESS), "MPIO_TYPE_CREATE");
+
+            /* Commit file type */
+            mrc = MPI_Type_commit( &mpi_file_type );
+            VRFY((mrc==MPI_SUCCESS), "MPIO_TYPE_COMMIT");
+
+            /* Commit buffer type */
+            mrc = MPI_Type_commit( &mpi_blk_type );
+            VRFY((mrc==MPI_SUCCESS), "MPIO_TYPE_COMMIT");
+            break;
+
+        case PHDF5: /* HDF5 setup */
+            if(nbytes>0) {
+                /* define a contiquous dataset of nbytes native bytes */
+                h5dims[0] = nbytes;
+                h5dset_space_id = H5Screate_simple(1, h5dims, NULL);
+                VRFY((h5dset_space_id >= 0), "H5Screate_simple");
+
+                /* Set up the file dset space id to select the pattern to access */
+                if (parms->interleaved==0){
+                    /* Contiguous pattern */
+                    h5start[0] = bytes_begin;
+                    h5stride[0] = h5block[0] = blk_size;
+                    h5count[0] = buf_size/blk_size;
+                } /* end if */
+                else {
+                    /* Interleaved access pattern */
+                    /* Skip offset over blocks of other processes */
+                    h5start[0] = bytes_begin;
+                    h5stride[0] = blk_size*pio_mpi_nprocs_g;
+                    h5block[0] = blk_size;
+                    h5count[0] = buf_size/blk_size;
+                } /* end else */
+                hrc = H5Sselect_hyperslab(h5dset_space_id, H5S_SELECT_SET,
+                          h5start, h5stride, h5count, h5block);
+                VRFY((hrc >= 0), "H5Sselect_hyperslab");
+            } /* end if */
+            else {
+                h5dset_space_id = H5Screate(H5S_SCALAR);
+                VRFY((h5dset_space_id >= 0), "H5Screate");
+            } /* end else */
+
+            /* Create the memory dataspace that corresponds to the xfer buffer */
+            if(buf_size>0) {
+                h5dims[0] = buf_size;
+                h5mem_space_id = H5Screate_simple(1, h5dims, NULL);
+                VRFY((h5mem_space_id >= 0), "H5Screate_simple");
+            } /* end if */
+            else {
+                h5mem_space_id = H5Screate(H5S_SCALAR);
+                VRFY((h5mem_space_id >= 0), "H5Screate");
+            } /* end else */
+
+            /* Create the dataset transfer property list */
+            h5dxpl = H5Pcreate(H5P_DATASET_XFER);
+            if (h5dxpl < 0) {
+                fprintf(stderr, "HDF5 Property List Create failed\n");
+                GOTOERROR(FAIL);
+            }
+
+            /* Change to collective I/O, if asked */
+            if(parms->collective) {
+                hrc = H5Pset_dxpl_mpio(h5dxpl, H5FD_MPIO_COLLECTIVE);
+                if (hrc < 0) {
+                    fprintf(stderr, "HDF5 Property List Set failed\n");
+                    GOTOERROR(FAIL);
+                } /* end if */
+            } /* end if */
+            break;
+    } /* end switch */
+
+    for (ndset = 1; ndset <= ndsets; ++ndset) {
+
+        /* Calculate dataset offset within a file */
+
+        /* create dataset */
+        switch (parms->io_type) {
+        case POSIXIO:
+        case MPIO:
+            /* both posix and mpi io just need dataset offset in file*/
+            dset_offset = (ndset - 1) * nbytes;
+            break;
+
+        case PHDF5:
+            h5dcpl = H5Pcreate(H5P_DATASET_CREATE);
+            if (h5dcpl < 0) {
+                fprintf(stderr, "HDF5 Property List Create failed\n");
+                GOTOERROR(FAIL);
+            }
+
+            /* Make the dataset chunked if asked */
+            if(parms->h5_use_chunks) {
+                /* Set the chunk size to be the same as the buffer size */
+                h5dims[0] = buf_size;
+                hrc = H5Pset_chunk(h5dcpl, 1, h5dims);
+                if (hrc < 0) {
+                    fprintf(stderr, "HDF5 Property List Set failed\n");
+                    GOTOERROR(FAIL);
+                } /* end if */
+            } /* end if */
+
+            sprintf(dname, "Dataset_%ld", ndset);
+            h5ds_id = H5Dcreate(fd->h5fd, dname, ELMT_H5_TYPE,
+                                h5dset_space_id, h5dcpl);
+
+            if (h5ds_id < 0) {
+                fprintf(stderr, "HDF5 Dataset Create failed\n");
+                GOTOERROR(FAIL);
+            }
+
+            hrc = H5Pclose(h5dcpl);
+            /* verifying the close of the dcpl */
+            if (hrc < 0) {
+                fprintf(stderr, "HDF5 Property List Close failed\n");
+                GOTOERROR(FAIL);
+            }
+
+            break;
+        }
+
+	/* The task is to transfer bytes_count bytes, starting at
+	 * bytes_begin position, using transfer buffer of buf_size bytes.
+	 * If interleaved, select buf_size at a time, in round robin
+	 * fashion, according to number of process. Otherwise, select
+	 * all bytes_count in contiguous.
+	 */
+        nbytes_xfer = 0 ;
+
+        /* Set base file offset for all I/O patterns and POSIX access */
+        posix_file_offset = dset_offset + bytes_begin;
+
+        /* Set base file offset for all I/O patterns and MPI access */
+        mpi_file_offset = (MPI_Offset)(dset_offset + bytes_begin);
+
+        /* Start "raw data" write timer */
+        set_time(res->timers, HDF5_RAW_WRITE_FIXED_DIMS, START);
+
+        while (nbytes_xfer < bytes_count){
+            /* Write */
+            /* Calculate offset of write within a dataset/file */
+            switch (parms->io_type) {
+            case POSIXIO:
+                /* Contiguous pattern */
+                if (parms->interleaved==0) {
+                    /* Compute file offset */
+                    file_offset = posix_file_offset + (off_t)nbytes_xfer;
+
+                    /* only care if seek returns error */
+                    rc = POSIXSEEK(fd->posixfd, file_offset) < 0 ? -1 : 0;
+                    VRFY((rc==0), "POSIXSEEK");
+
+                    /* check if all bytes are written */
+                    rc = ((ssize_t)buf_size ==
+                        POSIXWRITE(fd->posixfd, buffer, buf_size));
+                    VRFY((rc != 0), "POSIXWRITE");
+
+                    /* Advance global offset in dataset */
+                    nbytes_xfer+=buf_size;
+                } /* end if */
+                /* Interleaved access pattern */
+                else {
+                    /* Set the base of user's buffer */
+                    buf_p=(unsigned char *)buffer;
+
+                    /* Set the number of bytes to transfer this time */
+                    nbytes_toxfer = buf_size;
+
+                    /* Loop over the buffers to write */
+                    while(nbytes_toxfer>0) {
+                        /* Skip offset over blocks of other processes */
+                        file_offset = posix_file_offset +
+                            (off_t)(nbytes_xfer*pio_mpi_nprocs_g);
+
+                        /* only care if seek returns error */
+                        rc = POSIXSEEK(fd->posixfd, file_offset) < 0 ? -1 : 0;
+                        VRFY((rc==0), "POSIXSEEK");
+
+                        /* check if all bytes are written */
+                        rc = ((ssize_t)blk_size ==
+                            POSIXWRITE(fd->posixfd, buf_p, blk_size));
+                        VRFY((rc != 0), "POSIXWRITE");
+
+                        /* Advance location in buffer */
+                        buf_p+=blk_size;
+
+                        /* Advance global offset in dataset */
+                        nbytes_xfer+=blk_size;
+
+                        /* Decrement number of bytes left this time */
+                        nbytes_toxfer-=blk_size;
+                    } /* end while */
+                } /* end else */
+                break;
+
+            case MPIO:
+                /* Independent file access */
+                if(parms->collective==0) {
+                    /* Contiguous pattern */
+                    if (parms->interleaved==0){
+                        /* Compute offset in file */
+                        mpi_offset = mpi_file_offset +
+                            nbytes_xfer;
+
+                        /* Perform independent write */
+                        mrc = MPI_File_write_at(fd->mpifd, mpi_offset, buffer,
+                                    (int)(buf_size/blk_size), mpi_blk_type,
+                                    &mpi_status);
+                        VRFY((mrc==MPI_SUCCESS), "MPIO_WRITE");
+
+                        /* Advance global offset in dataset */
+                        nbytes_xfer+=buf_size;
+                    } /* end if */
+                    /* Interleaved access pattern */
+                    else {
+                        /* Set the base of user's buffer */
+                        buf_p=(unsigned char *)buffer;
+
+                        /* Set the number of bytes to transfer this time */
+                        nbytes_toxfer = buf_size;
+
+                        /* Loop over the buffers to write */
+                        while(nbytes_toxfer>0) {
+                            /* Skip offset over blocks of other processes */
+                            mpi_offset = mpi_file_offset +
+                                (nbytes_xfer*pio_mpi_nprocs_g);
+
+                            /* Perform independent write */
+                            mrc = MPI_File_write_at(fd->mpifd, mpi_offset, buf_p,
+                                    (int)1, mpi_blk_type, &mpi_status);
+                            VRFY((mrc==MPI_SUCCESS), "MPIO_WRITE");
+
+                            /* Advance location in buffer */
+                            buf_p+=blk_size;
+
+                            /* Advance global offset in dataset */
+                            nbytes_xfer+=blk_size;
+
+                            /* Decrement number of bytes left this time */
+                            nbytes_toxfer-=blk_size;
+                        } /* end while */
+                    } /* end else */
+                } /* end if */
+                /* Collective file access */
+                else {
+                    /* Contiguous access pattern */
+                    if (parms->interleaved==0){
+                        /* Compute offset in file */
+                        mpi_offset = mpi_file_offset +
+                            nbytes_xfer;
+
+                        /* Perform independent write */
+                        mrc = MPI_File_write_at_all(fd->mpifd, mpi_offset, buffer,
+                                (int)(buf_size/blk_size), mpi_blk_type, &mpi_status);
+                        VRFY((mrc==MPI_SUCCESS), "MPIO_WRITE");
+
+                        /* Advance global offset in dataset */
+                        nbytes_xfer+=buf_size;
+                    } /* end if */
+                    /* Interleaved access pattern */
+                    else {
+                        /* Compute offset in file */
+                        mpi_offset = mpi_file_offset +
+                            (nbytes_xfer*pio_mpi_nprocs_g);
+
+                        /* Set the file view */
+                        mrc = MPI_File_set_view(fd->mpifd, mpi_offset, mpi_blk_type,
+                                mpi_file_type, (char*)"native",  h5_io_info_g);
+                        VRFY((mrc==MPI_SUCCESS), "MPIO_VIEW");
+
+                        /* Perform write */
+                        mrc = MPI_File_write_at_all(fd->mpifd, 0, buffer,
+                                (int)(buf_size/blk_size), mpi_blk_type, &mpi_status);
+                        VRFY((mrc==MPI_SUCCESS), "MPIO_WRITE");
+
+                        /* Advance global offset in dataset */
+                        nbytes_xfer+=buf_size;
+                    } /* end else */
+                } /* end else */
+                break;
+
+            case PHDF5:
+                /* Set up the file dset space id to move the selection to process */
+                if (parms->interleaved==0){
+                    /* Contiguous pattern */
+                    h5offset[0] = nbytes_xfer;
+                } /* end if */
+                else {
+                    /* Interleaved access pattern */
+                    /* Skip offset over blocks of other processes */
+                    h5offset[0] = (nbytes_xfer*pio_mpi_nprocs_g);
+                } /* end else */
+                hrc = H5Soffset_simple(h5dset_space_id, h5offset);
+                VRFY((hrc >= 0), "H5Soffset_simple");
+
+                /* Write the buffer out */
+                hrc = H5Dwrite(h5ds_id, ELMT_H5_TYPE, h5mem_space_id,
+                               h5dset_space_id, h5dxpl, buffer);
+                VRFY((hrc >= 0), "H5Dwrite");
+
+                /* Increment number of bytes transferred */
+                nbytes_xfer += buf_size;
+
+                break;
+            } /* switch (parms->io_type) */
+        } /* end while */
+
+        /* Stop "raw data" write timer */
+        set_time(res->timers, HDF5_RAW_WRITE_FIXED_DIMS, STOP);
+
+        /* Calculate write time */
+
+        /* Close dataset. Only HDF5 needs to do an explicit close. */
+        if (parms->io_type == PHDF5) {
+            hrc = H5Dclose(h5ds_id);
+
+            if (hrc < 0) {
+                fprintf(stderr, "HDF5 Dataset Close failed\n");
+                GOTOERROR(FAIL);
+            }
+
+            h5ds_id = -1;
+        } /* end if */
+    } /* end for */
+
+done:
+    /* release MPI-I/O objects */
+    if (parms->io_type == MPIO) {
+        /* Free file type */
+        mrc = MPI_Type_free( &mpi_file_type );
+        VRFY((mrc==MPI_SUCCESS), "MPIO_TYPE_FREE");
+
+        /* Free buffer type */
+        mrc = MPI_Type_free( &mpi_blk_type );
+        VRFY((mrc==MPI_SUCCESS), "MPIO_TYPE_FREE");
+    } /* end if */
+
+    /* release HDF5 objects */
+    if (h5dset_space_id != -1) {
+        hrc = H5Sclose(h5dset_space_id);
+        if (hrc < 0){
+            fprintf(stderr, "HDF5 Dataset Space Close failed\n");
+            ret_code = FAIL;
+        } else {
+            h5dset_space_id = -1;
+        }
+    }
+
+    if (h5mem_space_id != -1) {
+        hrc = H5Sclose(h5mem_space_id);
+        if (hrc < 0) {
+            fprintf(stderr, "HDF5 Memory Space Close failed\n");
+            ret_code = FAIL;
+        } else {
+            h5mem_space_id = -1;
+        }
+    }
+
+    if (h5dxpl != -1) {
+        hrc = H5Pclose(h5dxpl);
+        if (hrc < 0) {
+            fprintf(stderr, "HDF5 Dataset Transfer Property List Close failed\n");
+            ret_code = FAIL;
+        } else {
+            h5dxpl = -1;
+        }
+    }
+
+    return ret_code;
+}
+
+/*
+ * Function:    do_read
+ * Purpose:     read the required amount of data from the file.
+ * Return:      SUCCESS or FAIL
+ * Programmer:  Albert Cheng 2001/12/13
+ * Modifications:
+ */
+static herr_t
+do_read(results *res, file_descr *fd, parameters *parms, long ndsets,
+         off_t nbytes, size_t buf_size, void *buffer /*out*/)
+{
+    int         ret_code = SUCCESS;
+    int         rc;             /*routine return code                   */
+    long        ndset;
+    size_t      blk_size;       /* The block size to subdivide the xfer buffer into */
+    off_t       nbytes_xfer;    /* Total number of bytes transferred so far */
+    size_t      nbytes_toxfer;  /* Number of bytes to transfer a particular time */
+    char        dname[64];
+    off_t       dset_offset=0;  /*dataset offset in a file              */
+    off_t       bytes_begin;    /*first elmt this process transfer      */
+    off_t       bytes_count;    /*number of elmts this process transfer */
+    unsigned char *buf_p;       /* Current buffer pointer               */
+
+    /* POSIX variables */
+    off_t       file_offset;    /* File offset of the next transfer    */
+    off_t       posix_file_offset;    /* Base file offset of the next transfer      */
+
+    /* MPI variables */
+    MPI_Offset  mpi_file_offset;/* Base file offset of the next transfer*/
+    MPI_Offset	mpi_offset;     /* Offset in MPI file                   */
+    MPI_Datatype mpi_file_type; /* MPI derived type for file            */
+    MPI_Datatype mpi_blk_type;  /* MPI derived type for buffer          */
+    MPI_Status	mpi_status;
+    int         mrc;            /* MPI return code                      */
+
+    /* HDF5 variables */
+    herr_t      hrc;                    /*HDF5 return code              */
+    hsize_t     h5dims[1];              /*dataset dim sizes             */
+    hid_t       h5dset_space_id = -1;   /*dataset space ID              */
+    hid_t       h5mem_space_id = -1;    /*memory dataspace ID           */
+    hid_t       h5ds_id = -1;           /*dataset handle                */
+    hsize_t	h5block[1];		/*dataspace selection           */
+    hsize_t	h5stride[1];
+    hsize_t	h5count[1];
+    hsize_t	h5start[1];
+    hssize_t	h5offset[1];            /* Selection offset within dataspace */
+    hid_t       h5dxpl = -1;            /* Dataset transfer property list */
+
+    /* Get the parameters from the parameter block */
+    blk_size=parms->blk_size;
+
+    /* There are two kinds of transfer patterns, contiguous and interleaved.
+     * Let 0,1,2,...,n be data accessed by process 0,1,2,...,n
+     *     where n is rank of the last process.
+     * In contiguous pattern, data are accessed as
+     *    000...111...222...nnn...
+     * In interleaved pattern, data are accessed as
+     *    012...n012...n...
+     * These are all in the scope of one dataset.
+     */
+    if (parms->interleaved==0) {
+        /* Contiguous Pattern: */
+        bytes_begin = (off_t)(((double)nbytes*pio_mpi_rank_g)/pio_mpi_nprocs_g);
+    } /* end if */
+    else {
+        /* Interleaved Pattern: */
+        bytes_begin = (off_t)(blk_size*pio_mpi_rank_g);
+    } /* end else */
+
+    /* Calculate the total number of bytes (bytes_count) to be
+     * transferred by this process. It may be different for different
+     * transfer pattern due to rounding to integral values.
+     */
+    /*
+     * Calculate the beginning bytes of this process and the next.
+     * bytes_count is the difference between these two beginnings.
+     * This way, it eliminates any rounding errors.
+     * (This is tricky, don't mess with the formula, rounding errors
+     * can easily get introduced) */
+    bytes_count = (off_t)(((double)nbytes*(pio_mpi_rank_g+1)) / pio_mpi_nprocs_g)
+                  - (off_t)(((double)nbytes*pio_mpi_rank_g) / pio_mpi_nprocs_g);
+
+    /* debug */
+    if (pio_debug_level >= 4) {
+        HDprint_rank(output);
+        HDfprintf(output, "Debug(do_read): "
+            "buf_size=%Hd, bytes_begin=%Hd, bytes_count=%Hd\n",
+            (long_long)buf_size, (long_long)bytes_begin,
+            (long_long)bytes_count);
+    }
+
+    /* I/O Access specific setup */
+    switch (parms->io_type) {
+        case POSIXIO:
+            /* No extra setup */
+            break;
+
+        case MPIO: /* MPI-I/O setup */
+            /* Build block's derived type */
+            mrc = MPI_Type_contiguous((int)blk_size,
+                    MPI_BYTE, &mpi_blk_type);
+            VRFY((mrc==MPI_SUCCESS), "MPIO_TYPE_CREATE");
+
+            /* Build file's derived type */
+            mrc = MPI_Type_vector((int)(buf_size/blk_size), (int)1,
+                    (int)pio_mpi_nprocs_g, mpi_blk_type, &mpi_file_type);
+            VRFY((mrc==MPI_SUCCESS), "MPIO_TYPE_CREATE");
+
+            /* Commit file type */
+            mrc = MPI_Type_commit( &mpi_file_type );
+            VRFY((mrc==MPI_SUCCESS), "MPIO_TYPE_COMMIT");
+
+            /* Commit buffer type */
+            mrc = MPI_Type_commit( &mpi_blk_type );
+            VRFY((mrc==MPI_SUCCESS), "MPIO_TYPE_COMMIT");
+            break;
+
+        case PHDF5: /* HDF5 setup */
+            if(nbytes>0) {
+                /* define a contiquous dataset of nbytes native bytes */
+                h5dims[0] = nbytes;
+                h5dset_space_id = H5Screate_simple(1, h5dims, NULL);
+                VRFY((h5dset_space_id >= 0), "H5Screate_simple");
+
+                /* Set up the file dset space id to select the pattern to access */
+                if (parms->interleaved==0){
+                    /* Contiguous pattern */
+                    h5start[0] = bytes_begin;
+                    h5stride[0] = h5block[0] = blk_size;
+                    h5count[0] = buf_size/blk_size;
+                } /* end if */
+                else {
+                    /* Interleaved access pattern */
+                    /* Skip offset over blocks of other processes */
+                    h5start[0] = bytes_begin;
+                    h5stride[0] = blk_size*pio_mpi_nprocs_g;
+                    h5block[0] = blk_size;
+                    h5count[0] = buf_size/blk_size;
+                } /* end else */
+                hrc = H5Sselect_hyperslab(h5dset_space_id, H5S_SELECT_SET,
+                          h5start, h5stride, h5count, h5block);
+                VRFY((hrc >= 0), "H5Sselect_hyperslab");
+            } /* end if */
+            else {
+                h5dset_space_id = H5Screate(H5S_SCALAR);
+                VRFY((h5dset_space_id >= 0), "H5Screate");
+            } /* end else */
+
+            /* Create the memory dataspace that corresponds to the xfer buffer */
+            if(buf_size>0) {
+                h5dims[0] = buf_size;
+                h5mem_space_id = H5Screate_simple(1, h5dims, NULL);
+                VRFY((h5mem_space_id >= 0), "H5Screate_simple");
+            } /* end if */
+            else {
+                h5mem_space_id = H5Screate(H5S_SCALAR);
+                VRFY((h5mem_space_id >= 0), "H5Screate");
+            } /* end else */
+
+            /* Create the dataset transfer property list */
+            h5dxpl = H5Pcreate(H5P_DATASET_XFER);
+            if (h5dxpl < 0) {
+                fprintf(stderr, "HDF5 Property List Create failed\n");
+                GOTOERROR(FAIL);
+            }
+
+            /* Change to collective I/O, if asked */
+            if(parms->collective) {
+                hrc = H5Pset_dxpl_mpio(h5dxpl, H5FD_MPIO_COLLECTIVE);
+                if (hrc < 0) {
+                    fprintf(stderr, "HDF5 Property List Set failed\n");
+                    GOTOERROR(FAIL);
+                } /* end if */
+            } /* end if */
+            break;
+    } /* end switch */
+
+    for (ndset = 1; ndset <= ndsets; ++ndset) {
+
+        /* Calculate dataset offset within a file */
+
+        /* create dataset */
+        switch (parms->io_type) {
+        case POSIXIO:
+        case MPIO:
+            /* both posix and mpi io just need dataset offset in file*/
+            dset_offset = (ndset - 1) * nbytes;
+            break;
+
+        case PHDF5:
+            sprintf(dname, "Dataset_%ld", ndset);
+            h5ds_id = H5Dopen(fd->h5fd, dname);
+            if (h5ds_id < 0) {
+                fprintf(stderr, "HDF5 Dataset open failed\n");
+                GOTOERROR(FAIL);
+            }
+
+            break;
+        }
+
+	/* The task is to transfer bytes_count bytes, starting at
+	 * bytes_begin position, using transfer buffer of buf_size bytes.
+	 * If interleaved, select buf_size at a time, in round robin
+	 * fashion, according to number of process. Otherwise, select
+	 * all bytes_count in contiguous.
+	 */
+        nbytes_xfer = 0 ;
+
+        /* Set base file offset for all I/O patterns and POSIX access */
+        posix_file_offset = dset_offset + bytes_begin;
+
+        /* Set base file offset for all I/O patterns and MPI access */
+        mpi_file_offset = (MPI_Offset)(dset_offset + bytes_begin);
+
+        /* Start "raw data" read timer */
+        set_time(res->timers, HDF5_RAW_READ_FIXED_DIMS, START);
+
+        while (nbytes_xfer < bytes_count){
+            /* Read */
+            /* Calculate offset of read within a dataset/file */
+            switch (parms->io_type) {
+            case POSIXIO:
+                /* Contiguous pattern */
+                if (parms->interleaved==0) {
+                    /* Compute file offset */
+                    file_offset = posix_file_offset + (off_t)nbytes_xfer;
+
+                    /* only care if seek returns error */
+                    rc = POSIXSEEK(fd->posixfd, file_offset) < 0 ? -1 : 0;
+                    VRFY((rc==0), "POSIXSEEK");
+
+                    /* check if all bytes are written */
+                    rc = ((ssize_t)buf_size ==
+                        POSIXREAD(fd->posixfd, buffer, buf_size));
+                    VRFY((rc != 0), "POSIXREAD");
+
+                    /* Advance global offset in dataset */
+                    nbytes_xfer+=buf_size;
+                } /* end if */
+                /* Interleaved access pattern */
+                else {
+                    /* Set the base of user's buffer */
+                    buf_p=(unsigned char *)buffer;
+
+                    /* Set the number of bytes to transfer this time */
+                    nbytes_toxfer = buf_size;
+
+                    /* Loop over the buffers to read */
+                    while(nbytes_toxfer>0) {
+                        /* Skip offset over blocks of other processes */
+                        file_offset = posix_file_offset +
+                            (off_t)(nbytes_xfer*pio_mpi_nprocs_g);
+
+                        /* only care if seek returns error */
+                        rc = POSIXSEEK(fd->posixfd, file_offset) < 0 ? -1 : 0;
+                        VRFY((rc==0), "POSIXSEEK");
+
+                        /* check if all bytes are written */
+                        rc = ((ssize_t)blk_size ==
+                            POSIXREAD(fd->posixfd, buf_p, blk_size));
+                        VRFY((rc != 0), "POSIXREAD");
+
+                        /* Advance location in buffer */
+                        buf_p+=blk_size;
+
+                        /* Advance global offset in dataset */
+                        nbytes_xfer+=blk_size;
+
+                        /* Decrement number of bytes left this time */
+                        nbytes_toxfer-=blk_size;
+                    } /* end while */
+                } /* end else */
+                break;
+
+            case MPIO:
+                /* Independent file access */
+                if(parms->collective==0) {
+                    /* Contiguous pattern */
+                    if (parms->interleaved==0){
+                        /* Compute offset in file */
+                        mpi_offset = mpi_file_offset +
+                            nbytes_xfer;
+
+                        /* Perform independent read */
+                        mrc = MPI_File_read_at(fd->mpifd, mpi_offset, buffer,
+                                    (int)(buf_size/blk_size), mpi_blk_type,
+                                    &mpi_status);
+                        VRFY((mrc==MPI_SUCCESS), "MPIO_READ");
+
+                        /* Advance global offset in dataset */
+                        nbytes_xfer+=buf_size;
+                    } /* end if */
+                    /* Interleaved access pattern */
+                    else {
+                        /* Set the base of user's buffer */
+                        buf_p=(unsigned char *)buffer;
+
+                        /* Set the number of bytes to transfer this time */
+                        nbytes_toxfer = buf_size;
+
+                        /* Loop over the buffers to read */
+                        while(nbytes_toxfer>0) {
+                            /* Skip offset over blocks of other processes */
+                            mpi_offset = mpi_file_offset +
+                                (nbytes_xfer*pio_mpi_nprocs_g);
+
+                            /* Perform independent read */
+                            mrc = MPI_File_read_at(fd->mpifd, mpi_offset, buf_p,
+                                    (int)1, mpi_blk_type, &mpi_status);
+                            VRFY((mrc==MPI_SUCCESS), "MPIO_READ");
+
+                            /* Advance location in buffer */
+                            buf_p+=blk_size;
+
+                            /* Advance global offset in dataset */
+                            nbytes_xfer+=blk_size;
+
+                            /* Decrement number of bytes left this time */
+                            nbytes_toxfer-=blk_size;
+                        } /* end while */
+                    } /* end else */
+                } /* end if */
+                /* Collective file access */
+                else {
+                    /* Contiguous access pattern */
+                    if (parms->interleaved==0){
+                        /* Compute offset in file */
+                        mpi_offset = mpi_file_offset +
+                            nbytes_xfer;
+
+                        /* Perform collective read */
+                        mrc = MPI_File_read_at_all(fd->mpifd, mpi_offset, buffer,
+                                (int)(buf_size/blk_size), mpi_blk_type, &mpi_status);
+                        VRFY((mrc==MPI_SUCCESS), "MPIO_READ");
+
+                        /* Advance global offset in dataset */
+                        nbytes_xfer+=buf_size;
+                    } /* end if */
+                    /* Interleaved access pattern */
+                    else {
+                        /* Compute offset in file */
+                        mpi_offset = mpi_file_offset +
+                            (nbytes_xfer*pio_mpi_nprocs_g);
+
+                        /* Set the file view */
+                        mrc = MPI_File_set_view(fd->mpifd, mpi_offset, mpi_blk_type,
+                                mpi_file_type, (char*)"native",  h5_io_info_g);
+                        VRFY((mrc==MPI_SUCCESS), "MPIO_VIEW");
+
+                        /* Perform collective read */
+                        mrc = MPI_File_read_at_all(fd->mpifd, 0, buffer,
+                                (int)(buf_size/blk_size), mpi_blk_type, &mpi_status);
+                        VRFY((mrc==MPI_SUCCESS), "MPIO_READ");
+
+                        /* Advance global offset in dataset */
+                        nbytes_xfer+=buf_size;
+                    } /* end else */
+                } /* end else */
+                break;
+
+            case PHDF5:
+                /* Set up the file dset space id to move the selection to process */
+                if (parms->interleaved==0){
+                    /* Contiguous pattern */
+                    h5offset[0] = nbytes_xfer;
+                } /* end if */
+                else {
+                    /* Interleaved access pattern */
+                    /* Skip offset over blocks of other processes */
+                    h5offset[0] = (nbytes_xfer*pio_mpi_nprocs_g);
+                } /* end else */
+                hrc = H5Soffset_simple(h5dset_space_id, h5offset);
+                VRFY((hrc >= 0), "H5Soffset_simple");
+
+                /* Read the buffer in */
+                hrc = H5Dread(h5ds_id, ELMT_H5_TYPE, h5mem_space_id,
+                               h5dset_space_id, h5dxpl, buffer);
+                VRFY((hrc >= 0), "H5Dread");
+
+                /* Increment number of bytes transferred */
+                nbytes_xfer += buf_size;
+
+                break;
+            } /* switch (parms->io_type) */
+
+            /* Verify raw data, if asked */
+	    if (parms->verify) {
+		/* Verify data read */
+                unsigned char *ucharptr = (unsigned char *)buffer;
+                size_t i;
+		int nerror=0;
+
+                for (i = 0; i < buf_size; ++i){
+                    if (*ucharptr++ != pio_mpi_rank_g) {
+			if (++nerror < 20){
+			    /* report at most 20 errors */
+			    HDprint_rank(output);
+			    HDfprintf(output, "read data error, expected (%Hd), "
+				     "got (%Hd)\n",
+				     (long_long)pio_mpi_rank_g,
+				     (long_long)*(ucharptr-1));
+			} /* end if */
+		    } /* end if */
+		} /* end for */
+		if (nerror >= 20) {
+		    HDprint_rank(output);
+		    HDfprintf(output, "...");
+		    HDfprintf(output, "total read data errors=%d\n",
+			    nerror);
+		} /* end if */
+            }	/* if (parms->verify) */
+
+        } /* end while */
+
+        /* Stop "raw data" read timer */
+        set_time(res->timers, HDF5_RAW_READ_FIXED_DIMS, STOP);
+
+        /* Calculate read time */
+
+        /* Close dataset. Only HDF5 needs to do an explicit close. */
+        if (parms->io_type == PHDF5) {
+            hrc = H5Dclose(h5ds_id);
+
+            if (hrc < 0) {
+                fprintf(stderr, "HDF5 Dataset Close failed\n");
+                GOTOERROR(FAIL);
+            }
+
+            h5ds_id = -1;
+        } /* end if */
+    } /* end for */
+
+done:
+    /* release MPI-I/O objects */
+    if (parms->io_type == MPIO) {
+        /* Free file type */
+        mrc = MPI_Type_free( &mpi_file_type );
+        VRFY((mrc==MPI_SUCCESS), "MPIO_TYPE_FREE");
+
+        /* Free buffer type */
+        mrc = MPI_Type_free( &mpi_blk_type );
+        VRFY((mrc==MPI_SUCCESS), "MPIO_TYPE_FREE");
+    } /* end if */
+
+    /* release HDF5 objects */
+    if (h5dset_space_id != -1) {
+        hrc = H5Sclose(h5dset_space_id);
+        if (hrc < 0){
+            fprintf(stderr, "HDF5 Dataset Space Close failed\n");
+            ret_code = FAIL;
+        } else {
+            h5dset_space_id = -1;
+        }
+    }
+
+    if (h5mem_space_id != -1) {
+        hrc = H5Sclose(h5mem_space_id);
+        if (hrc < 0) {
+            fprintf(stderr, "HDF5 Memory Space Close failed\n");
+            ret_code = FAIL;
+        } else {
+            h5mem_space_id = -1;
+        }
+    }
+
+    if (h5dxpl != -1) {
+        hrc = H5Pclose(h5dxpl);
+        if (hrc < 0) {
+            fprintf(stderr, "HDF5 Dataset Transfer Property List Close failed\n");
+            ret_code = FAIL;
+        } else {
+            h5dxpl = -1;
+        }
+    }
+
+    return ret_code;
+}
+
+/*
+ * Function:    do_fopen
+ * Purpose:     Open the specified file.
+ * Return:      SUCCESS or FAIL
+ * Programmer:  Albert Cheng, Bill Wendling, 2001/12/13
+ * Modifications:
+ */
+static herr_t
+do_fopen(parameters *param, char *fname, file_descr *fd /*out*/, int flags)
+{
+    int ret_code = SUCCESS, mrc;
+    herr_t hrc;
+    hid_t acc_tpl = -1;         /* file access templates */
+    hbool_t use_gpfs = FALSE;   /* use GPFS hints        */
+
+    switch (param->io_type) {
+    case POSIXIO:
+        if (flags & (PIO_CREATE | PIO_WRITE))
+            fd->posixfd = POSIXCREATE(fname);
+        else
+            fd->posixfd = POSIXOPEN(fname, O_RDONLY);
+
+        if (fd->posixfd < 0 ) {
+            fprintf(stderr, "POSIX File Open failed(%s)\n", fname);
+            GOTOERROR(FAIL);
+        }
+
+
+        /* The perils of POSIX I/O in a parallel environment. The problem is:
+         *
+         *      - Process n opens a file with truncation and then starts
+         *        writing to the file.
+         *      - Process m also opens the file with truncation, but after
+         *        process n has already started to write to the file. Thus,
+         *        all of the stuff process n wrote is now lost.
+         */
+        MPI_Barrier(pio_comm_g);
+
+        break;
+
+    case MPIO:
+        if (flags & (PIO_CREATE | PIO_WRITE)) {
+            MPI_File_delete(fname, h5_io_info_g);
+            mrc = MPI_File_open(pio_comm_g, fname, MPI_MODE_CREATE | MPI_MODE_RDWR,
+                                h5_io_info_g, &fd->mpifd);
+
+            if (mrc != MPI_SUCCESS) {
+                fprintf(stderr, "MPI File Open failed(%s)\n", fname);
+                GOTOERROR(FAIL);
+            }
+
+            /*since MPI_File_open with MPI_MODE_CREATE does not truncate  */
+            /*filesize , set size to 0 explicitedly.	*/
+            mrc = MPI_File_set_size(fd->mpifd, (MPI_Offset)0);
+
+            if (mrc != MPI_SUCCESS) {
+                fprintf(stderr, "MPI_File_set_size failed\n");
+                GOTOERROR(FAIL);
+            }
+        } else {
+            mrc = MPI_File_open(pio_comm_g, fname, MPI_MODE_RDONLY,
+                                h5_io_info_g, &fd->mpifd);
+
+            if (mrc != MPI_SUCCESS) {
+                fprintf(stderr, "MPI File Open failed(%s)\n", fname);
+                GOTOERROR(FAIL);
+            }
+        }
+
+        break;
+
+    case PHDF5:
+        acc_tpl = H5Pcreate(H5P_FILE_ACCESS);
+        if (acc_tpl < 0) {
+            fprintf(stderr, "HDF5 Property List Create failed\n");
+            GOTOERROR(FAIL);
+        }
+
+        /* Use the appropriate VFL driver */
+        if(param->h5_use_mpi_posix) {
+            /* Set the file driver to the MPI-posix driver */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+            hrc = H5Pset_fapl_mpiposix(acc_tpl, pio_comm_g);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+            hrc = H5Pset_fapl_mpiposix(acc_tpl, pio_comm_g, use_gpfs);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+            if (hrc < 0) {
+                fprintf(stderr, "HDF5 Property List Set failed\n");
+                GOTOERROR(FAIL);
+            }
+        } /* end if */
+        else {
+            /* Set the file driver to the MPI-I/O driver */
+            hrc = H5Pset_fapl_mpio(acc_tpl, pio_comm_g, h5_io_info_g);
+            if (hrc < 0) {
+                fprintf(stderr, "HDF5 Property List Set failed\n");
+                GOTOERROR(FAIL);
+            }
+        } /* end else */
+
+        /* Set the alignment of objects in HDF5 file */
+        hrc = H5Pset_alignment(acc_tpl, param->h5_thresh, param->h5_align);
+        if (hrc < 0) {
+            fprintf(stderr, "HDF5 Property List Set failed\n");
+            GOTOERROR(FAIL);
+        }
+
+        /* create the parallel file */
+        if (flags & (PIO_CREATE | PIO_WRITE)) {
+            fd->h5fd = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, acc_tpl);
+        } else {
+            fd->h5fd = H5Fopen(fname, H5F_ACC_RDONLY, acc_tpl);
+        }
+
+        hrc = H5Pclose(acc_tpl);
+
+        if (fd->h5fd < 0) {
+            fprintf(stderr, "HDF5 File Create failed(%s)\n", fname);
+            GOTOERROR(FAIL);
+        }
+
+        /* verifying the close of the acc_tpl */
+        if (hrc < 0) {
+            fprintf(stderr, "HDF5 Property List Close failed\n");
+            GOTOERROR(FAIL);
+        }
+
+        break;
+    }
+
+done:
+    return ret_code;
+}
+
+/*
+ * Function:    do_fclose
+ * Purpose:     Close the specified file descriptor.
+ * Return:      SUCCESS or FAIL
+ * Programmer:  Albert Cheng, Bill Wendling, 2001/12/13
+ * Modifications:
+ */
+static herr_t
+do_fclose(iotype iot, file_descr *fd /*out*/)
+{
+    herr_t ret_code = SUCCESS, hrc;
+    int mrc = 0, rc = 0;
+
+    switch (iot) {
+    case POSIXIO:
+        rc = POSIXCLOSE(fd->posixfd);
+
+        if (rc != 0){
+            fprintf(stderr, "POSIX File Close failed\n");
+            GOTOERROR(FAIL);
+        }
+
+        fd->posixfd = -1;
+        break;
+
+    case MPIO:
+        mrc = MPI_File_close(&fd->mpifd);
+
+        if (mrc != MPI_SUCCESS){
+            fprintf(stderr, "MPI File close failed\n");
+            GOTOERROR(FAIL);
+        }
+
+        fd->mpifd = MPI_FILE_NULL;
+        break;
+
+    case PHDF5:
+        hrc = H5Fclose(fd->h5fd);
+
+        if (hrc < 0) {
+            fprintf(stderr, "HDF5 File Close failed\n");
+            GOTOERROR(FAIL);
+        }
+
+        fd->h5fd = -1;
+        break;
+    }
+
+done:
+    return ret_code;
+}
+
+
+/*
+ * Function:    do_fclose
+ * Purpose:     Cleanup temporary file unless HDF5_NOCLEANUP is set.
+ * 		Only Proc 0 of the PIO communicator will do the cleanup.
+ *		Other processes just return.
+ * Return:      void
+ * Programmer:  Albert Cheng 2001/12/12
+ * Modifications:
+ */
+static void
+do_cleanupfile(iotype iot, char *fname)
+{
+    if (pio_mpi_rank_g != 0)
+        return;
+
+    if (clean_file_g == -1)
+        clean_file_g = (getenv("HDF5_NOCLEANUP")==NULL) ? 1 : 0;
+
+    if (clean_file_g){
+        switch (iot){
+        case POSIXIO:
+            remove(fname);
+            break;
+        case MPIO:
+        case PHDF5:
+            MPI_File_delete(fname, h5_io_info_g);
+            break;
+        }
+    }
+}
+
+#ifdef H5_HAVE_GPFS
+
+    /* Descriptions here come from the IBM GPFS Manual */
+
+/*
+ * Function:    gpfs_access_range
+ * Purpose:     Declares an access range within a file for an
+ *              application.
+ *
+ *              The application will access file offsets within the given
+ *              range, and will not access offsets outside the range.
+ *              Violating this hint may produce worse performance than if
+ *              no hint was specified.
+ *
+ *              This hint is useful in situations where a file is
+ *              partitioned coarsely among several nodes. If the ranges
+ *              do not overlap, each node can specify which range of the
+ *              file it will access, with a performance improvement in
+ *              some cases, such as for sequential writing within a
+ *              range.
+ *
+ *              Subsequent GPFS_ACCESS_RANGE hints will replace a hint
+ *              passed earlier.
+ *
+ *                  START    - The start of the access range offset, in
+ *                             bytes, from the beginning of the file
+ *                  LENGTH   - Length of the access range. 0 indicates to
+ *                             the end of the file
+ *                  IS_WRITE - 0 indicates READ access, 1 indicates WRITE access
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 03. June 2002
+ * Modifications:
+ */
+static void
+gpfs_access_range(int handle, off_t start, off_t length, int is_write)
+{
+    struct {
+        gpfsFcntlHeader_t hdr;
+        gpfsAccessRange_t access;
+    } access_range;
+
+    access_range.hdr.totalLength = sizeof(access_range);
+    access_range.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
+    access_range.hdr.fcntlReserved = 0;
+    access_range.access.structLen = sizeof(gpfsAccessRange_t);
+    access_range.access.structType = GPFS_ACCESS_RANGE;
+    access_range.access.start = start;
+    access_range.access.length = length;
+    access_range.access.isWrite = is_write;
+
+    if (gpfs_fcntl(handle, &access_range) != 0) {
+        fprintf(stderr,
+                "gpfs_fcntl DS start directive failed. errno=%d errorOffset=%d\n",
+                errno, access_range.hdr.errorOffset);
+        exit(EXIT_FAILURE);
+    }
+}
+
+/*
+ * Function:    gpfs_free_range
+ * Purpose:     Undeclares an access range within a file for an
+ *              application.
+ *
+ *              The application will no longer access file offsets within
+ *              the given range. GPFS flushes the data at the file
+ *              offsets and removes it from the cache.
+ *
+ *              Multi-node applications that have finished one phase of
+ *              their computation may wish to use this hint before the
+ *              file is accessed in a conflicting mode from another node
+ *              in a later phase. The potential performance benefit is
+ *              that GPFS can avoid later synchronous cache consistency
+ *              operations.
+ *
+ *                  START  - The start of the access range offset, in
+ *                           bytes from the beginning of the file.
+ *                  LENGTH - Length of the access range. 0 indicates to
+ *                           the end of the file.
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 03. June 2002
+ * Modifications:
+ */
+static void
+gpfs_free_range(int handle, off_t start, off_t length)
+{
+    struct {
+        gpfsFcntlHeader_t hdr;
+        gpfsFreeRange_t range;
+    } free_range;
+
+    /* Issue the invalidate hint */
+    free_range.hdr.totalLength = sizeof(free_range);
+    free_range.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
+    free_range.hdr.fcntlReserved = 0;
+    free_range.range.structLen = sizeof(gpfsFreeRange_t);
+    free_range.range.structType = GPFS_FREE_RANGE;
+    free_range.range.start = start;
+    free_range.range.length = length;
+
+    if (gpfs_fcntl(handle, &free_range) != 0) {
+        fprintf(stderr,
+                "gpfs_fcntl free range failed for range %d:%d. errno=%d errorOffset=%d\n",
+                start, length, errno, free_range.hdr.errorOffset);
+        exit(EXIT_FAILURE);
+    }
+}
+
+/*
+ * Function:    gpfs_clear_file_cache
+ * Purpose:     Indicates file access in the near future is not expected.
+ *
+ *              The application does not expect to make any further
+ *              accesses to the file in the near future, so GPFS removes
+ *              any data or metadata pertaining to the file from its
+ *              cache.
+ *
+ *              Multi-node applications that have finished one phase of
+ *              their computation may wish to use this hint before the
+ *              file is accessed in a conflicting mode from another node
+ *              in a later phase. The potential performance benefit is
+ *              that GPFS can avoid later synchronous cache consistency
+ *              operations.
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 03. June 2002
+ * Modifications:
+ */
+static void
+gpfs_clear_file_cache(int handle)
+{
+    struct {
+        gpfsFcntlHeader_t hdr;
+        gpfsClearFileCache_t clear;
+    } clear_cache;
+
+    clear_cache.hdr.totalLength = sizeof(clear_cache);
+    clear_cache.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
+    clear_cache.hdr.fcntlReserved = 0;
+    clear_cache.clear.structLen = sizeof(gpfsClearFileCache_t);
+    clear_cache.clear.structType = GPFS_CLEAR_FILE_CACHE;
+
+    if (gpfs_fcntl(handle, &clear_cache) != 0) {
+        fprintf(stderr,
+                "gpfs_fcntl clear file cache directive failed. errno=%d errorOffset=%d\n",
+                errno, clear_cache.hdr.errorOffset);
+        exit(EXIT_FAILURE);
+    }
+}
+
+/*
+ * Function:    gpfs_cancel_hints
+ * Purpose:     Indicates to remove any hints against the open file
+ *              handle.
+ *
+ *              GPFS removes any hints that may have been issued against
+ *              this open file handle:
+ *
+ *                  - The hint status of the file is restored ot what it
+ *                    would have been immediately after being opened, but
+ *                    does not affect the contents of the GPFS file
+ *                    cache. Cancelling an earlier hint that resulted in
+ *                    data being removed from the GPFS file cache does
+ *                    not bring that data back int othe cache; data
+ *                    re-enters the cache only pon access by the
+ *                    application or by user-driven or automatic
+ *                    prefetching.
+ *                  - Only the GPFS_MULTIPLE_ACCESS_RANGE hint has a
+ *                    state that might be removed by the
+ *                    GPFS_CANCEL_HINTS directive.
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 03. June 2002
+ * Modifications:
+ */
+static void
+gpfs_cancel_hints(int handle)
+{
+    struct {
+        gpfsFcntlHeader_t hdr;
+        gpfsCancelHints_t cancel;
+    } cancel_hints;
+
+    cancel_hints.hdr.totalLength = sizeof(cancel_hints);
+    cancel_hints.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
+    cancel_hints.hdr.fcntlReserved = 0;
+    cancel_hints.cancel.structLen = sizeof(gpfsCancelHints_t);
+    cancel_hints.cancel.structType = GPFS_CANCEL_HINTS;
+
+    if (gpfs_fcntl(handle, &cancel_hints) != 0) {
+        fprintf(stderr,
+                "gpfs_fcntl cancel hints directive failed. errno=%d errorOffset=%d\n",
+                errno, cancel_hints.hdr.errorOffset);
+        exit(EXIT_FAILURE);
+    }
+}
+
+/*
+ * Function:    gpfs_start_data_shipping
+ * Purpose:     Initiates data shipping mode.
+ *
+ *              Once all participating threads have issued this directive
+ *              for a file, GPFS enters a mode where it logically
+ *              partitions the blocks of the file among a group of agent
+ *              nodes. The agents are those nodes on which one or more
+ *              threads have issued the GPFS_DATA_SHIP_START directive.
+ *              Each thread that has issued a GPFS_DATA_SHIP_START
+ *              directive and the associated agent nodes are referred to
+ *              as the data shipping collective.
+ *
+ *              The second parameter is the total number of open
+ *              instances on all nodes that will be operating on the
+ *              file. Must be called for every such instance with the
+ *              same value of NUM_INSTS.
+ *
+ *                  NUM_INSTS - The number of open file instances, on all
+ *                              nodes, collaborating to operate on the file
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 28. May 2002
+ * Modifications:
+ */
+static void
+gpfs_start_data_shipping(int handle, int num_insts)
+{
+    struct {
+        gpfsFcntlHeader_t hdr;
+        gpfsDataShipStart_t start;
+    } ds_start;
+
+    ds_start.hdr.totalLength = sizeof(ds_start);
+    ds_start.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
+    ds_start.hdr.fcntlReserved = 0;
+    ds_start.start.structLen = sizeof(gpfsDataShipStart_t);
+    ds_start.start.structType = GPFS_DATA_SHIP_START;
+    ds_start.start.numInstances = num_insts;
+    ds_start.start.reserved = 0;
+
+    if (gpfs_fcntl(handle, &ds_start) != 0) {
+        fprintf(stderr,
+                "gpfs_fcntl DS start directive failed. errno=%d errorOffset=%d\n",
+                errno, ds_start.hdr.errorOffset);
+        exit(EXIT_FAILURE);
+    }
+}
+
+/*
+ * Function:    gpfs_start_data_ship_map
+ * Purpose:     Indicates which agent nodes are to be used for data
+ *              shipping. GPFS recognizes which agent nodes to use for
+ *              data shipping.
+ *
+ *                  PARTITION_SIZE - The number of contiguous bytes per
+ *                                   server. This value must be a
+ *                                   multiple of the number of bytes in a
+ *                                   single file system block
+ *                  AGENT_COUNT    - The number of entries in the
+ *                                   agentNodeNumber array
+ *                  AGENT_NODE_NUM - The data ship agent node numbers as
+ *                                   listed in the SDT or the global ODM
+ *
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 10. Jul 2002
+ * Modifications:
+ */
+static void
+gpfs_start_data_ship_map(int handle, int partition_size, int agent_count,
+                         int *agent_node_num)
+{
+    int i;
+    struct {
+        gpfsFcntlHeader_t hdr;
+        gpfsDataShipMap_t map;
+    } ds_map;
+
+    ds_map.hdr.totalLength = sizeof(ds_map);
+    ds_map.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
+    ds_map.hdr.fcntlReserved = 0;
+    ds_map.map.structLen = sizeof(gpfsDataShipMap_t);
+    ds_map.map.structType = GPFS_DATA_SHIP_MAP;
+    ds_map.map.partitionSize = partition_size;
+    ds_map.map.agentCount = agent_count;
+
+    for (i = 0; i < agent_count; ++i)
+        ds_map.map.agentNodeNumber[i] = agent_node_num[i];
+
+    if (gpfs_fcntl(handle, &ds_map) != 0) {
+        fprintf(stderr,
+                "gpfs_fcntl DS map directive failed. errno=%d errorOffset=%d\n",
+                errno, ds_map.hdr.errorOffset);
+        exit(EXIT_FAILURE);
+    }
+}
+
+/*
+ * Function:    gpfs_stop_data_shipping
+ * Purpose:     Takes a file out of the data shipping mode.
+ *
+ *              - GPFS waits for all threads that issued the
+ *                GPFS_DATA_SHIP_START directive to issue this directive,
+ *                then flushes the dirty file data to disk.
+ *
+ *              - While a gpfs_cntl() call is blocked for other threads,
+ *                the call can be interrupted by any signal. If a signal
+ *                is delivered to any of the waiting calls, all waiting
+ *                calls on every node will be interrupted and will return
+ *                EINTR. GPFS will not cancel data shipping mode if such
+ *                a signal occurs. It is the responsibility of the
+ *                application to mask off any signals that might normally
+ *                occur while waiting for another node in the data
+ *                shipping collective. Several libraries use SIGALRM; the
+ *                thread that makes the gpfs_fcntl() call should use
+ *                sigthreadmask to mask off delivery of this signal while
+ *                inside the call.
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 28. May 2002
+ * Modifications:
+ */
+static void
+gpfs_stop_data_shipping(int handle)
+{
+    struct {
+        gpfsFcntlHeader_t hdr;
+        gpfsDataShipStop_t stop;
+    } ds_stop;
+
+    ds_stop.hdr.totalLength = sizeof(ds_stop);
+    ds_stop.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
+    ds_stop.hdr.fcntlReserved = 0;
+    ds_stop.stop.structLen = sizeof(ds_stop.stop);
+    ds_stop.stop.structType = GPFS_DATA_SHIP_STOP;
+
+    if (gpfs_fcntl(handle, &ds_stop) != 0)
+        fprintf(stderr,
+                "gpfs_fcntl DS stop directive failed. errno=%d errorOffset=%d\n",
+                errno, ds_stop.hdr.errorOffset);
+}
+
+/*
+ * Function:    gpfs_invalidate_file_cache
+ * Purpose:     Invalidate all cached data held on behalf of a file on
+ *              this node.
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 03. June 2002
+ * Modifications:
+ */
+static void
+gpfs_invalidate_file_cache(const char *filename)
+{
+    int handle;
+    struct {
+        gpfsFcntlHeader_t hdr;
+        gpfsClearFileCache_t inv;
+    } inv_cache_hint;
+
+    /* Open the file.  If the open fails, the file cannot be cached. */
+    handle = open(filename, O_RDONLY, 0);
+
+    if (handle == -1)
+        return;
+
+    /* Issue the invalidate hint */
+    inv_cache_hint.hdr.totalLength = sizeof(inv_cache_hint);
+    inv_cache_hint.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
+    inv_cache_hint.hdr.fcntlReserved = 0;
+    inv_cache_hint.inv.structLen = sizeof(gpfsClearFileCache_t);
+    inv_cache_hint.inv.structType = GPFS_CLEAR_FILE_CACHE;
+
+    if (gpfs_fcntl(handle, &inv_cache_hint) != 0) {
+        fprintf(stderr,
+                "gpfs_fcntl clear cache hint failed for file '%s'.",
+                filename);
+        fprintf(stderr, " errno=%d errorOffset=%d\n",
+                errno, inv_cache_hint.hdr.errorOffset);
+        exit(1);
+    }
+
+    /* Close the file */
+    if (close(handle) == -1) {
+        fprintf(stderr,
+                "could not close file '%s' after flushing file cache, ",
+                filename);
+        fprintf(stderr, "errno=%d\n", errno);
+        exit(1);
+    }
+}
+
+#else
+
+/* turn the stubs off since some compilers are warning they are not used */
+#if 0
+/* H5_HAVE_GPFS isn't defined...stub functions */
+
+static void
+gpfs_access_range(int UNUSED handle, off_t UNUSED start, off_t UNUSED length,
+                  int UNUSED is_write)
+{
+    return;
+}
+
+static void
+gpfs_free_range(int UNUSED handle, off_t UNUSED start, off_t UNUSED length)
+{
+    return;
+}
+
+static void
+gpfs_clear_file_cache(int UNUSED handle)
+{
+    return;
+}
+
+static void
+gpfs_cancel_hints(int UNUSED handle)
+{
+    return;
+}
+
+static void
+gpfs_start_data_shipping(int UNUSED handle, int UNUSED num_insts)
+{
+    return;
+}
+
+static void
+gpfs_stop_data_shipping(int UNUSED handle)
+{
+    return;
+}
+
+static void
+gpfs_start_data_ship_map(int UNUSED handle, int UNUSED partition_size,
+                         int UNUSED agent_count, int UNUSED *agent_node_num)
+{
+    return;
+}
+
+static void
+gpfs_invalidate_file_cache(const char UNUSED *filename)
+{
+    return;
+}
+
+#endif  /* 0 */
+
+#endif  /* H5_HAVE_GPFS */
+
+#ifdef TIME_MPI
+/* instrument the MPI_File_wrirte_xxx and read_xxx calls to measure
+ * pure time spent in MPI_File code.
+ */
+int MPI_File_read_at(MPI_File fh, MPI_Offset offset, void *buf,
+	  int count, MPI_Datatype datatype, MPI_Status *status)
+{
+    int err;
+    set_time(timer_g, HDF5_MPI_READ, START);
+    err=PMPI_File_read_at(fh, offset, buf, count, datatype, status);
+    set_time(timer_g, HDF5_MPI_READ, STOP);
+    return err;
+}
+
+
+int MPI_File_read_at_all(MPI_File fh, MPI_Offset offset, void *buf,
+	int count, MPI_Datatype datatype, MPI_Status *status)
+{
+    int err;
+    set_time(timer_g, HDF5_MPI_READ, START);
+    err=PMPI_File_read_at_all(fh, offset, buf, count, datatype, status);
+    set_time(timer_g, HDF5_MPI_READ, STOP);
+    return err;
+}
+
+int MPI_File_write_at(MPI_File fh, MPI_Offset offset, void *buf,
+      int count, MPI_Datatype datatype, MPI_Status *status)
+{
+    int err;
+    set_time(timer_g, HDF5_MPI_WRITE, START);
+    err=PMPI_File_write_at(fh, offset, buf, count, datatype, status);
+    set_time(timer_g, HDF5_MPI_WRITE, STOP);
+    return err;
+}
+
+int MPI_File_write_at_all(MPI_File fh, MPI_Offset offset, void *buf,
+    int count, MPI_Datatype datatype, MPI_Status *status)
+{
+    int err;
+    set_time(timer_g, HDF5_MPI_WRITE, START);
+    err=PMPI_File_write_at_all(fh, offset, buf, count, datatype, status);
+    set_time(timer_g, HDF5_MPI_WRITE, STOP);
+    return err;
+}
+
+#endif	/* TIME_MPI */
+#endif /* H5_HAVE_PARALLEL */

Added: packages/hdf5/branches/upstream/current/perform/pio_perf.c
===================================================================
--- packages/hdf5/branches/upstream/current/perform/pio_perf.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/pio_perf.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1484 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Parallel HDF5 Performance Testing Code
+ * --------------------------------------
+ *
+ * Portable code to test performance on the different platforms we support.
+ * This is what the report should look like:
+ *
+ *  nprocs = Max#Procs
+ *      IO API = POSIXIO
+ *          # Files = 1, # of dsets = 1000, Elements per dset = 37000
+ *              Write Results = x MB/s
+ *              Read Results = x MB/s
+ *          # Files = 1, # of dsets = 3000, Elements per dset = 37000
+ *              Write Results = x MB/s
+ *              Read Results = x MB/s
+ *
+ *          . . .
+ *
+ *      IO API = MPIO
+ *          # Files = 1, # of dsets = 1000, Elements per dset = 37000
+ *              Write Results = x MB/s
+ *              Read Results = x MB/s
+ *          # Files = 1, # of dsets = 3000, Elements per dset = 37000
+ *              Write Results = x MB/s
+ *              Read Results = x MB/s
+ *
+ *          . . .
+ *
+ *      IO API = PHDF5
+ *          # Files = 1, # of dsets = 1000, Elements per dset = 37000
+ *              Write Results = x MB/s
+ *              Read Results = x MB/s
+ *          # Files = 1, # of dsets = 3000, Elements per dset = 37000
+ *              Write Results = x MB/s
+ *              Read Results = x MB/s
+ *
+ *          . . .
+ *
+ *  nprocs = Max#Procs / 2
+ *
+ *      . . .
+ *
+ */
+
+/* system header files */
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "hdf5.h"
+
+#ifdef H5_HAVE_PARALLEL
+
+/* library header files */
+#include <mpi.h>
+
+/* our header files */
+#include "h5tools_utils.h"
+#include "pio_perf.h"
+
+/* useful macros */
+#define TAB_SPACE           4
+
+#define ONE_KB              1024
+#define ONE_MB              (ONE_KB * ONE_KB)
+#define ONE_GB              (ONE_MB * ONE_KB)
+
+#define PIO_POSIX           0x1
+#define PIO_MPI             0x2
+#define PIO_HDF5            0x4
+
+/* report 0.0 in case t is zero too */
+#define MB_PER_SEC(bytes,t) (((t)==0.0) ? 0.0 : ((((double)bytes) / ONE_MB) / (t)))
+
+#ifndef TRUE
+#define TRUE    1
+#endif  /* TRUE */
+#ifndef FALSE
+#define FALSE   (!TRUE)
+#endif  /* FALSE */
+
+/* global variables */
+FILE       *output;             /* output file                          */
+int         comm_world_rank_g;  /* my rank in MPI_COMM_RANK             */
+int         comm_world_nprocs_g;/* num. of processes of MPI_COMM_WORLD  */
+MPI_Comm    pio_comm_g;         /* Communicator to run the PIO          */
+int         pio_mpi_rank_g;     /* MPI rank of pio_comm_g               */
+int         pio_mpi_nprocs_g;   /* Number of processes of pio_comm_g    */
+int         pio_debug_level = 0;/* The debug level:
+                                 *   0 - Off
+                                 *   1 - Minimal
+                                 *   2 - Some more
+                                 *   3 - Maximal
+                                 *   4 - Maximal & then some
+                                 */
+
+/* local variables */
+static const char  *progname = "h5perf";
+
+/*
+ * Command-line options: The user can specify short or long-named
+ * parameters. The long-named ones can be partially spelled. When
+ * adding more, make sure that they don't clash with each other.
+ */
+#if 1
+static const char *s_opts = "a:A:B:cCd:D:e:F:hi:Imno:p:P:stT:wx:X:";
+#else
+static const char *s_opts = "a:A:bB:cCd:D:e:F:hi:Imno:p:P:stT:wx:X:";
+#endif  /* 1 */
+static struct long_options l_opts[] = {
+    { "align", require_arg, 'a' },
+    { "alig", require_arg, 'a' },
+    { "ali", require_arg, 'a' },
+    { "al", require_arg, 'a' },
+    { "api", require_arg, 'A' },
+    { "ap", require_arg, 'A' },
+#if 0
+    /* a sighting of the elusive binary option */
+    { "binary", no_arg, 'b' },
+    { "binar", no_arg, 'b' },
+    { "bina", no_arg, 'b' },
+    { "bin", no_arg, 'b' },
+    { "bi", no_arg, 'b' },
+#endif  /* 0 */
+    { "block-size", require_arg, 'B' },
+    { "block-siz", require_arg, 'B' },
+    { "block-si", require_arg, 'B' },
+    { "block-s", require_arg, 'B' },
+    { "block-", require_arg, 'B' },
+    { "block", require_arg, 'B' },
+    { "bloc", require_arg, 'B' },
+    { "blo", require_arg, 'B' },
+    { "bl", require_arg, 'B' },
+    { "chunk", no_arg, 'c' },
+    { "chun", no_arg, 'c' },
+    { "chu", no_arg, 'c' },
+    { "ch", no_arg, 'c' },
+    { "collective", no_arg, 'C' },
+    { "collectiv", no_arg, 'C' },
+    { "collecti", no_arg, 'C' },
+    { "collect", no_arg, 'C' },
+    { "collec", no_arg, 'C' },
+    { "colle", no_arg, 'C' },
+    { "coll", no_arg, 'C' },
+    { "col", no_arg, 'C' },
+    { "co", no_arg, 'C' },
+    { "debug", require_arg, 'D' },
+    { "debu", require_arg, 'D' },
+    { "deb", require_arg, 'D' },
+    { "de", require_arg, 'D' },
+    { "help", no_arg, 'h' },
+    { "hel", no_arg, 'h' },
+    { "he", no_arg, 'h' },
+    { "interleaved", require_arg, 'I' },
+    { "interleave", require_arg, 'I' },
+    { "interleav", require_arg, 'I' },
+    { "interlea", require_arg, 'I' },
+    { "interle", require_arg, 'I' },
+    { "interl", require_arg, 'I' },
+    { "inter", require_arg, 'I' },
+    { "inte", require_arg, 'I' },
+    { "int", require_arg, 'I' },
+    { "in", require_arg, 'I' },
+    { "max-num-processes", require_arg, 'P' },
+    { "max-num-processe", require_arg, 'P' },
+    { "max-num-process", require_arg, 'P' },
+    { "max-num-proces", require_arg, 'P' },
+    { "max-num-proce", require_arg, 'P' },
+    { "max-num-proc", require_arg, 'P' },
+    { "max-num-pro", require_arg, 'P' },
+    { "max-num-pr", require_arg, 'P' },
+    { "max-num-p", require_arg, 'P' },
+    { "min-num-processes", require_arg, 'p' },
+    { "min-num-processe", require_arg, 'p' },
+    { "min-num-process", require_arg, 'p' },
+    { "min-num-proces", require_arg, 'p' },
+    { "min-num-proce", require_arg, 'p' },
+    { "min-num-proc", require_arg, 'p' },
+    { "min-num-pro", require_arg, 'p' },
+    { "min-num-pr", require_arg, 'p' },
+    { "min-num-p", require_arg, 'p' },
+    { "max-xfer-size", require_arg, 'X' },
+    { "max-xfer-siz", require_arg, 'X' },
+    { "max-xfer-si", require_arg, 'X' },
+    { "max-xfer-s", require_arg, 'X' },
+    { "max-xfer", require_arg, 'X' },
+    { "max-xfe", require_arg, 'X' },
+    { "max-xf", require_arg, 'X' },
+    { "max-x", require_arg, 'X' },
+    { "min-xfer-size", require_arg, 'x' },
+    { "min-xfer-siz", require_arg, 'x' },
+    { "min-xfer-si", require_arg, 'x' },
+    { "min-xfer-s", require_arg, 'x' },
+    { "min-xfer", require_arg, 'x' },
+    { "min-xfe", require_arg, 'x' },
+    { "min-xf", require_arg, 'x' },
+    { "min-x", require_arg, 'x' },
+    { "mpi-posix", no_arg, 'm' },
+    { "mpi-posi", no_arg, 'm' },
+    { "mpi-pos", no_arg, 'm' },
+    { "mpi-po", no_arg, 'm' },
+    { "mpi-p", no_arg, 'm' },
+    { "mpi-", no_arg, 'm' },
+    { "mpi", no_arg, 'm' },
+    { "mp", no_arg, 'm' },
+    { "num-bytes", require_arg, 'e' },
+    { "num-byte", require_arg, 'e' },
+    { "num-byt", require_arg, 'e' },
+    { "num-by", require_arg, 'e' },
+    { "num-b", require_arg, 'e' },
+    { "num-dsets", require_arg, 'd' },
+    { "num-dset", require_arg, 'd' },
+    { "num-dse", require_arg, 'd' },
+    { "num-ds", require_arg, 'd' },
+    { "num-d", require_arg, 'd' },
+    { "num-files", require_arg, 'F' },
+    { "num-file", require_arg, 'F' },
+    { "num-fil", require_arg, 'F' },
+    { "num-fi", require_arg, 'F' },
+    { "num-f", require_arg, 'F' },
+    { "num-iterations", require_arg, 'i' },
+    { "num-iteration", require_arg, 'i' },
+    { "num-iteratio", require_arg, 'i' },
+    { "num-iterati", require_arg, 'i' },
+    { "num-iterat", require_arg, 'i' },
+    { "num-itera", require_arg, 'i' },
+    { "num-iter", require_arg, 'i' },
+    { "num-ite", require_arg, 'i' },
+    { "num-it", require_arg, 'i' },
+    { "num-i", require_arg, 'i' },
+    { "output", require_arg, 'o' },
+    { "outpu", require_arg, 'o' },
+    { "outp", require_arg, 'o' },
+    { "out", require_arg, 'o' },
+    { "ou", require_arg, 'o' },
+    { "threshold", require_arg, 'T' },
+    { "threshol", require_arg, 'T' },
+    { "thresho", require_arg, 'T' },
+    { "thresh", require_arg, 'T' },
+    { "thres", require_arg, 'T' },
+    { "thre", require_arg, 'T' },
+    { "thr", require_arg, 'T' },
+    { "th", require_arg, 'T' },
+    { "write-only", require_arg, 'w' },
+    { "write-onl", require_arg, 'w' },
+    { "write-on", require_arg, 'w' },
+    { "write-o", require_arg, 'w' },
+    { "write", require_arg, 'w' },
+    { "writ", require_arg, 'w' },
+    { "wri", require_arg, 'w' },
+    { "wr", require_arg, 'w' },
+    { NULL, 0, '\0' }
+};
+
+struct options {
+    long io_types;              /* bitmask of which I/O types to test   */
+    const char *output_file;    /* file to print report to              */
+    long num_dsets;             /* number of datasets                   */
+    long num_files;             /* number of files                      */
+    size_t num_bpp;             /* number of bytes per proc per dset    */
+    int num_iters;              /* number of iterations                 */
+    int max_num_procs;          /* maximum number of processes to use   */
+    int min_num_procs;          /* minimum number of processes to use   */
+    size_t max_xfer_size;       /* maximum transfer buffer size         */
+    size_t min_xfer_size;       /* minimum transfer buffer size         */
+    size_t blk_size;            /* Block size                           */
+    unsigned interleaved;       /* Interleaved vs. contiguous blocks    */
+    unsigned collective;        /* Collective vs. independent I/O       */
+    int print_times;       	/* print times as well as throughputs   */
+    int print_raw;         	/* print raw data throughput info       */
+    off_t h5_alignment;         /* alignment in HDF5 file               */
+    off_t h5_threshold;         /* threshold for alignment in HDF5 file */
+    int h5_use_chunks;     	/* Make HDF5 dataset chunked            */
+    int h5_write_only;        	/* Perform the write tests only         */
+    unsigned h5_use_mpi_posix;  /* Use MPI-posix VFD for HDF5 I/O (instead of MPI-I/O VFD) */
+    int verify;        		/* Verify data correctness              */
+};
+
+typedef struct _minmax {
+    double min;
+    double max;
+    double sum;
+    int num;
+} minmax;
+
+/* local functions */
+static off_t parse_size_directive(const char *size);
+static struct options *parse_command_line(int argc, char *argv[]);
+static void run_test_loop(struct options *options);
+static int run_test(iotype iot, parameters parms, struct options *opts);
+static void output_all_info(minmax *mm, int count, int indent_level);
+static void get_minmax(minmax *mm, double val);
+static minmax accumulate_minmax_stuff(minmax *mm, int count);
+static int create_comm_world(int num_procs, int *doing_pio);
+static int destroy_comm_world(void);
+static void output_results(const struct options *options, const char *name,
+                           minmax *table, int table_size, off_t data_size);
+static void output_report(const char *fmt, ...);
+static void print_indent(register int indent);
+static void usage(const char *prog);
+static void report_parameters(struct options *opts);
+
+/*
+ * Function:    main
+ * Purpose:     Start things up. Initialize MPI and then call the test looping
+ *              function.
+ * Return:      EXIT_SUCCESS or EXIT_FAILURE
+ * Programmer:  Bill Wendling, 30. October 2001
+ * Modifications:
+ */
+int
+main(int argc, char **argv)
+{
+    int ret;
+    int exit_value = EXIT_SUCCESS;
+    struct options *opts = NULL;
+
+    output = stdout;
+
+    /* initialize MPI and get the maximum num of processors we started with */
+    MPI_Init(&argc, &argv);
+    ret = MPI_Comm_size(MPI_COMM_WORLD, &comm_world_nprocs_g);
+
+    if (ret != MPI_SUCCESS) {
+        fprintf(stderr, "%s: MPI_Comm_size call failed\n", progname);
+
+        if (ret == MPI_ERR_COMM)
+            fprintf(stderr, "invalid MPI communicator\n");
+        else
+            fprintf(stderr, "invalid argument\n");
+
+        exit_value = EXIT_FAILURE;
+        goto finish;
+    }
+
+    ret = MPI_Comm_rank(MPI_COMM_WORLD, &comm_world_rank_g);
+
+    if (ret != MPI_SUCCESS) {
+        fprintf(stderr, "%s: MPI_Comm_rank call failed\n", progname);
+
+        if (ret == MPI_ERR_COMM)
+            fprintf(stderr, "invalid MPI communicator\n");
+        else
+            fprintf(stderr, "invalid argument\n");
+
+        exit_value = EXIT_FAILURE;
+        goto finish;
+    }
+
+    pio_comm_g = MPI_COMM_WORLD;
+
+    h5_set_info_object();
+    opts = parse_command_line(argc, argv);
+
+    if (!opts) {
+        exit_value = EXIT_FAILURE;
+        goto finish;
+    }
+
+    if (opts->output_file) {
+        if ((output = fopen(opts->output_file, "w")) == NULL) {
+            fprintf(stderr, "%s: cannot open output file\n", progname);
+            perror(opts->output_file);
+            goto finish;
+        }
+    }
+
+    if ((pio_debug_level == 0 && comm_world_rank_g == 0) || pio_debug_level > 0)
+        report_parameters(opts);
+
+    run_test_loop(opts);
+
+finish:
+    MPI_Finalize();
+    free(opts);
+    return exit_value;
+}
+
+/*
+ * Function:    run_test_loop
+ * Purpose:     Run the I/O tests. Write the results to OUTPUT.
+ *
+ *            - The slowest changing part of the test is the number of
+ *              processors to use. For each loop iteration, we divide that
+ *              number by 2 and rerun the test.
+ *
+ *            - The second slowest is what type of IO API to perform. We have
+ *              three choices: POSIXIO, MPI-IO, and PHDF5.
+ *
+ *            - Then we change the size of the buffer. This information is
+ *              inferred from the number of datasets to create and the number
+ *              of integers to put into each dataset. The backend code figures
+ *              this out.
+ *
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 30. October 2001
+ * Modifications:
+ */
+static void
+run_test_loop(struct options *opts)
+{
+    parameters parms;
+    int num_procs;
+    int doing_pio;      /* if this process is doing PIO */
+
+    parms.num_files = opts->num_files;
+    parms.num_dsets = opts->num_dsets;
+    parms.num_iters = opts->num_iters;
+    parms.blk_size = opts->blk_size;
+    parms.interleaved = opts->interleaved;
+    parms.collective = opts->collective;
+    parms.h5_align = opts->h5_alignment;
+    parms.h5_thresh = opts->h5_threshold;
+    parms.h5_use_chunks = opts->h5_use_chunks;
+    parms.h5_write_only = opts->h5_write_only;
+    parms.h5_use_mpi_posix = opts->h5_use_mpi_posix;
+    parms.verify = opts->verify;
+
+    /* start with max_num_procs and decrement it by half for each loop. */
+    /* if performance needs restart, fewer processes may be needed. */
+    for (num_procs = opts->max_num_procs;
+            num_procs >= opts->min_num_procs; num_procs >>= 1) {
+        register size_t buf_size;
+
+        parms.num_procs = num_procs;
+
+        if (create_comm_world(parms.num_procs, &doing_pio) != SUCCESS) {
+            /* do something harsh */
+        }
+
+	/* only processes doing PIO will run the tests */
+	if (doing_pio){
+            output_report("Number of processors = %ld\n", parms.num_procs);
+
+            /* multiply the xfer buffer size by 2 for each loop iteration */
+            for (buf_size = opts->min_xfer_size;
+                    buf_size <= opts->max_xfer_size; buf_size <<= 1) {
+                parms.buf_size = buf_size;
+                parms.num_bytes = (off_t)opts->num_bpp*parms.num_procs;
+
+                print_indent(1);
+                output_report("Transfer Buffer Size: %ld bytes, File size: %.2f MBs\n",
+                              buf_size,
+                              ((double)parms.num_dsets * (double)parms.num_bytes)
+                                / ONE_MB);
+                print_indent(1);
+                output_report("  # of files: %ld, # of datasets: %ld, dataset size: %.2f MBs\n",
+                              parms.num_files, parms.num_dsets, (double)parms.num_bytes/ONE_MB);
+
+                if (opts->io_types & PIO_POSIX)
+                    run_test(POSIXIO, parms, opts);
+
+                if (opts->io_types & PIO_MPI)
+                    run_test(MPIO, parms, opts);
+
+                if (opts->io_types & PIO_HDF5)
+                    run_test(PHDF5, parms, opts);
+
+                /* Run the tests once if buf_size==0, but then break out */
+                if(buf_size==0)
+                    break;
+            }
+
+            if (destroy_comm_world() != SUCCESS) {
+                /* do something harsh */
+            }
+	}
+    }
+}
+
+/*
+ * Function:    run_test
+ * Purpose:     Inner loop call to actually run the I/O test.
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 18. December 2001
+ * Modifications:
+ */
+static int
+run_test(iotype iot, parameters parms, struct options *opts)
+{
+    results         res;
+    register int    i, ret_value = SUCCESS;
+    int             comm_size;
+    off_t           raw_size;
+    minmax         *write_mpi_mm_table=NULL;
+    minmax         *write_mm_table=NULL;
+    minmax         *write_gross_mm_table=NULL;
+    minmax         *write_raw_mm_table=NULL;
+    minmax         *read_mpi_mm_table=NULL;
+    minmax         *read_mm_table=NULL;
+    minmax         *read_gross_mm_table=NULL;
+    minmax         *read_raw_mm_table=NULL;
+    minmax          write_mpi_mm = {0.0, 0.0, 0.0, 0};
+    minmax          write_mm = {0.0, 0.0, 0.0, 0};
+    minmax          write_gross_mm = {0.0, 0.0, 0.0, 0};
+    minmax          write_raw_mm = {0.0, 0.0, 0.0, 0};
+    minmax          read_mpi_mm = {0.0, 0.0, 0.0, 0};
+    minmax          read_mm = {0.0, 0.0, 0.0, 0};
+    minmax          read_gross_mm = {0.0, 0.0, 0.0, 0};
+    minmax          read_raw_mm = {0.0, 0.0, 0.0, 0};
+
+    raw_size = (off_t)parms.num_dsets * (off_t)parms.num_bytes;
+    parms.io_type = iot;
+    print_indent(2);
+    output_report("IO API = ");
+
+    switch (iot) {
+    case POSIXIO:
+        output_report("POSIX\n");
+        break;
+    case MPIO:
+        output_report("MPIO\n");
+        break;
+    case PHDF5:
+        if(parms.h5_use_mpi_posix)
+            output_report("PHDF5 (w/MPI-posix driver)\n");
+        else
+            output_report("PHDF5 (w/MPI-I/O driver)\n");
+        break;
+    }
+
+    MPI_Comm_size(pio_comm_g, &comm_size);
+
+    /* allocate space for tables minmax and that it is sufficient */
+    /* to initialize all elements to zeros by calloc.             */
+    write_mpi_mm_table = calloc((size_t)parms.num_iters , sizeof(minmax));
+    write_mm_table = calloc((size_t)parms.num_iters , sizeof(minmax));
+    write_gross_mm_table = calloc((size_t)parms.num_iters , sizeof(minmax));
+    write_raw_mm_table = calloc((size_t)parms.num_iters , sizeof(minmax));
+
+    if (!parms.h5_write_only) {
+        read_mpi_mm_table = calloc((size_t)parms.num_iters , sizeof(minmax));
+        read_mm_table = calloc((size_t)parms.num_iters , sizeof(minmax));
+        read_gross_mm_table = calloc((size_t)parms.num_iters , sizeof(minmax));
+        read_raw_mm_table = calloc((size_t)parms.num_iters , sizeof(minmax));
+    }
+
+    /* Do IO iteration times, collecting statistics each time */
+    for (i = 0; i < parms.num_iters; ++i) {
+        double t;
+
+        MPI_Barrier(pio_comm_g);
+        res = do_pio(parms);
+
+        /* gather all of the "mpi write" times */
+        t = get_time(res.timers, HDF5_MPI_WRITE);
+	get_minmax(&write_mpi_mm, t);
+
+        write_mpi_mm_table[i] = write_mpi_mm;
+
+        /* gather all of the "write" times */
+        t = get_time(res.timers, HDF5_FINE_WRITE_FIXED_DIMS);
+	get_minmax(&write_mm, t);
+
+        write_mm_table[i] = write_mm;
+
+        /* gather all of the "write" times from open to close */
+        t = get_time(res.timers, HDF5_GROSS_WRITE_FIXED_DIMS);
+	get_minmax(&write_gross_mm, t);
+
+        write_gross_mm_table[i] = write_gross_mm;
+
+        /* gather all of the raw "write" times */
+        t = get_time(res.timers, HDF5_RAW_WRITE_FIXED_DIMS);
+	get_minmax(&write_raw_mm, t);
+
+        write_raw_mm_table[i] = write_raw_mm;
+
+        if (!parms.h5_write_only) {
+            /* gather all of the "mpi read" times */
+            t = get_time(res.timers, HDF5_MPI_READ);
+            get_minmax(&read_mpi_mm, t);
+
+            read_mpi_mm_table[i] = read_mpi_mm;
+
+            /* gather all of the "read" times */
+            t = get_time(res.timers, HDF5_FINE_READ_FIXED_DIMS);
+            get_minmax(&read_mm, t);
+
+            read_mm_table[i] = read_mm;
+
+            /* gather all of the "read" times from open to close */
+            t = get_time(res.timers, HDF5_GROSS_READ_FIXED_DIMS);
+            get_minmax(&read_gross_mm, t);
+
+            read_gross_mm_table[i] = read_gross_mm;
+
+            /* gather all of the raw "read" times */
+            t = get_time(res.timers, HDF5_RAW_READ_FIXED_DIMS);
+            get_minmax(&read_raw_mm, t);
+
+            read_raw_mm_table[i] = read_raw_mm;
+        }
+
+        pio_time_destroy(res.timers);
+    }
+
+    /*
+     * Show various statistics
+     */
+    /* Write statistics	*/
+    /* Print the raw data throughput if desired */
+    if (opts->print_raw) {
+        /* accumulate and output the max, min, and average "raw write" times */
+        if (pio_debug_level >= 3) {
+            /* output all of the times for all iterations */
+            print_indent(3);
+            output_report("Raw Data Write details:\n");
+            output_all_info(write_raw_mm_table, parms.num_iters, 4);
+        }
+
+        output_results(opts,"Raw Data Write",write_raw_mm_table,parms.num_iters,raw_size);
+    } /* end if */
+
+    /* show mpi write statics */
+    if (pio_debug_level >= 3) {
+        /* output all of the times for all iterations */
+        print_indent(3);
+        output_report("MPI Write details:\n");
+        output_all_info(write_mpi_mm_table, parms.num_iters, 4);
+    }
+
+    /* We don't currently output the MPI write results */
+
+    /* accumulate and output the max, min, and average "write" times */
+    if (pio_debug_level >= 3) {
+        /* output all of the times for all iterations */
+        print_indent(3);
+        output_report("Write details:\n");
+        output_all_info(write_mm_table, parms.num_iters, 4);
+    }
+
+    output_results(opts,"Write",write_mm_table,parms.num_iters,raw_size);
+
+    /* accumulate and output the max, min, and average "gross write" times */
+    if (pio_debug_level >= 3) {
+        /* output all of the times for all iterations */
+        print_indent(3);
+        output_report("Write Open-Close details:\n");
+        output_all_info(write_gross_mm_table, parms.num_iters, 4);
+    }
+
+    output_results(opts,"Write Open-Close",write_gross_mm_table,parms.num_iters,raw_size);
+
+    if (!parms.h5_write_only) {
+        /* Read statistics	*/
+        /* Print the raw data throughput if desired */
+        if (opts->print_raw) {
+            /* accumulate and output the max, min, and average "raw read" times */
+            if (pio_debug_level >= 3) {
+                /* output all of the times for all iterations */
+                print_indent(3);
+                output_report("Raw Data Read details:\n");
+                output_all_info(read_raw_mm_table, parms.num_iters, 4);
+            }
+
+            output_results(opts, "Raw Data Read", read_raw_mm_table,
+                           parms.num_iters, raw_size);
+        } /* end if */
+
+        /* show mpi read statics */
+        if (pio_debug_level >= 3) {
+            /* output all of the times for all iterations */
+            print_indent(3);
+            output_report("MPI Read details:\n");
+            output_all_info(read_mpi_mm_table, parms.num_iters, 4);
+        }
+
+        /* We don't currently output the MPI read results */
+
+        /* accumulate and output the max, min, and average "read" times */
+        if (pio_debug_level >= 3) {
+            /* output all of the times for all iterations */
+            print_indent(3);
+            output_report("Read details:\n");
+            output_all_info(read_mm_table, parms.num_iters, 4);
+        }
+
+        output_results(opts, "Read", read_mm_table, parms.num_iters, raw_size);
+
+        /* accumulate and output the max, min, and average "gross read" times */
+        if (pio_debug_level >= 3) {
+            /* output all of the times for all iterations */
+            print_indent(3);
+            output_report("Read Open-Close details:\n");
+            output_all_info(read_gross_mm_table, parms.num_iters, 4);
+        }
+
+        output_results(opts, "Read Open-Close", read_gross_mm_table,
+                       parms.num_iters, raw_size);
+    }
+
+    /* clean up our mess */
+    free(write_mpi_mm_table);
+    free(write_mm_table);
+    free(write_gross_mm_table);
+    free(write_raw_mm_table);
+
+    if (!parms.h5_write_only) {
+        free(read_mpi_mm_table);
+        free(read_mm_table);
+        free(read_gross_mm_table);
+        free(read_raw_mm_table);
+    }
+
+    return ret_value;
+}
+
+/*
+ * Function:    output_all_info
+ * Purpose:
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 29. January 2002
+ * Modifications:
+ */
+static void
+output_all_info(minmax *mm, int count, int indent_level)
+{
+    int i;
+
+    for (i = 0; i < count; ++i) {
+        print_indent(indent_level);
+        output_report("Iteration %d:\n", i + 1);
+        print_indent(indent_level + 1);
+        output_report("Minimum Time: %.2fs\n", mm[i].min);
+        print_indent(indent_level + 1);
+        output_report("Maximum Time: %.2fs\n", mm[i].max);
+    }
+}
+
+/*
+ * Function:    get_minmax
+ * Purpose:     Gather all the min, max and total of val.
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 21. December 2001
+ * Modifications:
+ *    Use MPI_Allreduce to do it. -akc, 2002/01/11
+ */
+static void
+get_minmax(minmax *mm, double val)
+{
+    int myrank;
+
+    MPI_Comm_rank(pio_comm_g, &myrank);
+    MPI_Comm_size(pio_comm_g, &mm->num);
+
+    MPI_Allreduce(&val, &mm->max, 1, MPI_DOUBLE, MPI_MAX, pio_comm_g);
+    MPI_Allreduce(&val, &mm->min, 1, MPI_DOUBLE, MPI_MIN, pio_comm_g);
+    MPI_Allreduce(&val, &mm->sum, 1, MPI_DOUBLE, MPI_SUM, pio_comm_g);
+}
+
+/*
+ * Function:    accumulate_minmax_stuff
+ * Purpose:     Accumulate the minimum, maximum, and average of the times
+ *              across all processes.
+ * Return:      TOTAL_MM - the total of all of these.
+ * Programmer:  Bill Wendling, 21. December 2001
+ * Modifications:
+ *              Changed to use seconds instead of MB/s - QAK, 5/9/02
+ */
+static minmax
+accumulate_minmax_stuff(minmax *mm, int count)
+{
+    int i;
+    minmax total_mm;
+
+    total_mm.sum = 0.0;
+    total_mm.max = -DBL_MAX;
+    total_mm.min = DBL_MAX;
+    total_mm.num = count;
+
+    for (i = 0; i < count; ++i) {
+        double m = mm[i].max;
+
+        total_mm.sum += m;
+
+        if (m < total_mm.min)
+            total_mm.min = m;
+
+        if (m > total_mm.max)
+            total_mm.max = m;
+    }
+
+    return total_mm;
+}
+
+/*
+ * Function:    create_comm_world
+ * Purpose:     Create an MPI Comm world and store it in pio_comm_g, which
+ *              is a global variable.
+ * Return:      SUCCESS on success.
+ *              FAIL otherwise.
+ * Programmer:  Bill Wendling, 19. December 2001
+ * Modifications:
+ */
+static int
+create_comm_world(int num_procs, int *doing_pio)
+{
+    /* MPI variables */
+    int     mrc;     /* return values                */
+    int     color;              /* for communicator creation    */
+    int     myrank, nprocs;
+
+    pio_comm_g = MPI_COMM_NULL;
+
+    /*
+     * Create a sub communicator for this PIO run. Easier to use the first N
+     * processes.
+     */
+    MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
+
+    if (num_procs > nprocs) {
+        fprintf(stderr,
+                "number of process(%d) must be <= number of processes in MPI_COMM_WORLD(%d)\n",
+                num_procs, nprocs);
+        goto error_done;
+    }
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
+    color = (myrank < num_procs);
+    mrc = MPI_Comm_split(MPI_COMM_WORLD, color, myrank, &pio_comm_g);
+
+    if (mrc != MPI_SUCCESS) {
+        fprintf(stderr, "MPI_Comm_split failed\n");
+        goto error_done;
+    }
+
+    if (!color) {
+        /* not involved in this run */
+        mrc = destroy_comm_world();
+        goto done;
+    }
+
+    /* determine the MPI rank in the PIO communicator */
+    MPI_Comm_size(pio_comm_g, &pio_mpi_nprocs_g);
+    MPI_Comm_rank(pio_comm_g, &pio_mpi_rank_g);
+
+done:
+    *doing_pio = color;
+    return SUCCESS;
+
+error_done:
+    destroy_comm_world();
+    return FAIL;
+}
+
+/*
+ * Function:    destroy_comm_world
+ * Purpose:     Destroy the created MPI Comm world which is stored in the
+ *              pio_comm_g global variable.
+ * Return:      SUCCESS on success.
+ *              FAIL otherwise.
+ * Programmer:  Bill Wendling, 19. December 2001
+ * Modifications:
+ */
+static int
+destroy_comm_world(void)
+{
+    int     mrc = SUCCESS;      /* return code      */
+
+    /* release MPI resources */
+    if (pio_comm_g != MPI_COMM_NULL)
+        mrc = (MPI_Comm_free(&pio_comm_g) == MPI_SUCCESS ? SUCCESS : FAIL);
+
+    return mrc;
+}
+
+/*
+ * Function:    output_results
+ * Purpose:     Print information about the time & bandwidth for a given
+ *                  minmax & # of iterations.
+ * Return:      Nothing
+ * Programmer:  Quincey Koziol, 9. May 2002
+ * Modifications:
+ */
+static void
+output_results(const struct options *opts, const char *name, minmax *table,
+    int table_size,off_t data_size)
+{
+    minmax          total_mm;
+
+    total_mm = accumulate_minmax_stuff(table, table_size);
+
+    print_indent(3);
+    output_report("%s (%d iteration(s)):\n", name,table_size);
+
+    /* Note: The maximum throughput uses the minimum amount of time & vice versa */
+
+    print_indent(4);
+    output_report("Maximum Throughput: %6.2f MB/s", MB_PER_SEC(data_size,total_mm.min));
+    if(opts->print_times)
+        output_report(" (%7.3f s)\n", total_mm.min);
+    else
+        output_report("\n");
+
+    print_indent(4);
+    output_report("Average Throughput: %6.2f MB/s",
+                  MB_PER_SEC(data_size,total_mm.sum / total_mm.num));
+    if(opts->print_times)
+        output_report(" (%7.3f s)\n", (total_mm.sum / total_mm.num));
+    else
+        output_report("\n");
+
+    print_indent(4);
+    output_report("Minimum Throughput: %6.2f MB/s", MB_PER_SEC(data_size,total_mm.max));
+    if(opts->print_times)
+        output_report(" (%7.3f s)\n", total_mm.max);
+    else
+        output_report("\n");
+}
+
+/*
+ * Function:    output_report
+ * Purpose:     Print a line of the report. Only do so if I'm the 0 process.
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 19. December 2001
+ * Modifications:
+ */
+static void
+output_report(const char *fmt, ...)
+{
+    int myrank;
+
+    MPI_Comm_rank(pio_comm_g, &myrank);
+
+    if (myrank == 0) {
+        va_list ap;
+
+        va_start(ap, fmt);
+        vfprintf(output, fmt, ap);
+        va_end(ap);
+    }
+}
+
+/*
+ * Function:    print_indent
+ * Purpose:     Print spaces to indent a new line of text for pretty printing
+ *              things.
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 29. October 2001
+ * Modifications:
+ */
+static void
+print_indent(register int indent)
+{
+    int myrank;
+
+    MPI_Comm_rank(pio_comm_g, &myrank);
+
+    if (myrank == 0) {
+	indent *= TAB_SPACE;
+
+	for (; indent > 0; --indent)
+	    fputc(' ', output);
+    }
+}
+
+static void
+recover_size_and_print(long_long val, const char *end)
+{
+    if (val >= ONE_KB && (val % ONE_KB) == 0) {
+        if (val >= ONE_MB && (val % ONE_MB) == 0) {
+            if (val >= ONE_GB && (val % ONE_GB) == 0)
+                HDfprintf(output, "%HdGB%s", val / ONE_GB, end);
+            else
+                HDfprintf(output, "%HdMB%s", val / ONE_MB, end);
+        } else {
+            HDfprintf(output, "%HdKB%s", val / ONE_KB, end);
+        }
+    } else {
+        HDfprintf(output, "%Hd%s", val, end);
+    }
+}
+
+static void
+print_io_api(long io_types)
+{
+    if (io_types & PIO_POSIX)
+	HDfprintf(output, "posix ");
+    if (io_types & PIO_MPI)
+	HDfprintf(output, "mpiio ");
+    if (io_types & PIO_HDF5)
+	HDfprintf(output, "phdf5 ");
+    HDfprintf(output, "\n");
+}
+
+static void
+report_parameters(struct options *opts)
+{
+    int rank = comm_world_rank_g;
+
+    print_version("HDF5 Library");	/* print library version */
+    HDfprintf(output, "rank %d: ==== Parameters ====\n", rank);
+
+    HDfprintf(output, "rank %d: IO API=", rank);
+    print_io_api(opts->io_types);
+
+    HDfprintf(output, "rank %d: Number of bytes per process per dataset=", rank);
+    recover_size_and_print((long_long)opts->num_bpp, "\n");
+
+    HDfprintf(output, "rank %d: Number of files=%Hd\n", rank,
+              (long_long)opts->num_files);
+    HDfprintf(output, "rank %d: Number of datasets=%Hd\n", rank,
+              (long_long)opts->num_dsets);
+    HDfprintf(output, "rank %d: Number of iterations=%Hd\n", rank,
+              (long_long)opts->num_iters);
+    HDfprintf(output, "rank %d: Number of processes=%d:%d\n", rank,
+              opts->min_num_procs, opts->max_num_procs);
+
+    HDfprintf(output, "rank %d: Size of dataset(s)=", rank);
+    recover_size_and_print((long_long)(opts->num_bpp * opts->min_num_procs), ":");
+    recover_size_and_print((long_long)(opts->num_bpp * opts->max_num_procs), "\n");
+
+    HDfprintf(output, "rank %d: File size=", rank);
+    recover_size_and_print((long_long)(opts->num_bpp * opts->min_num_procs
+                                            * opts->num_dsets), ":");
+    recover_size_and_print((long_long)(opts->num_bpp * opts->max_num_procs
+                                            * opts->num_dsets), "\n");
+
+    HDfprintf(output, "rank %d: Transfer buffer size=", rank);
+    recover_size_and_print((long_long)opts->min_xfer_size, ":");
+    recover_size_and_print((long_long)opts->max_xfer_size, "\n");
+    HDfprintf(output, "rank %d: Block size=", rank);
+    recover_size_and_print((long_long)opts->blk_size, "\n");
+
+    HDfprintf(output, "rank %d: Block Pattern in Dataset=", rank);
+    if(opts->interleaved)
+        HDfprintf(output, "Interleaved\n");
+    else
+        HDfprintf(output, "Contiguous\n");
+
+    HDfprintf(output, "rank %d: I/O Method for MPI and HDF5=", rank);
+    if(opts->collective)
+        HDfprintf(output, "Collective\n");
+    else
+        HDfprintf(output, "Independent\n");
+
+    HDfprintf(output, "rank %d: VFL used for HDF5 I/O=", rank);
+    if(opts->h5_use_mpi_posix)
+        HDfprintf(output, "MPI-posix driver\n");
+    else
+        HDfprintf(output, "MPI-I/O driver\n");
+
+    HDfprintf(output, "rank %d: Data storage method in HDF5=", rank);
+    if(opts->h5_use_chunks)
+        HDfprintf(output, "Chunked\n");
+    else
+        HDfprintf(output, "Contiguous\n");
+
+    {
+        char *prefix = getenv("HDF5_PARAPREFIX");
+
+        HDfprintf(output, "rank %d: Env HDF5_PARAPREFIX=%s\n", rank,
+                  (prefix ? prefix : "not set"));
+    }
+
+    HDfprintf(output, "rank %d: ", rank);
+    h5_dump_info_object(h5_io_info_g);
+
+    HDfprintf(output, "rank %d: ==== End of Parameters ====\n", rank);
+    HDfprintf(output, "\n");
+}
+
+/*
+ * Function:    parse_command_line
+ * Purpose:     Parse the command line options and return a STRUCT OPTIONS
+ *              structure which will need to be freed by the calling function.
+ * Return:      Pointer to an OPTIONS structure
+ * Programmer:  Bill Wendling, 31. October 2001
+ * Modifications:
+ */
+static struct options *
+parse_command_line(int argc, char *argv[])
+{
+    register int opt;
+    struct options *cl_opts;
+
+    cl_opts = (struct options *)malloc(sizeof(struct options));
+
+    cl_opts->output_file = NULL;
+    cl_opts->io_types =  0;    /* will set default after parsing options */
+    cl_opts->num_dsets = 1;
+    cl_opts->num_files = 1;
+    cl_opts->num_bpp = 256 * ONE_KB;
+    cl_opts->num_iters = 1;
+    cl_opts->max_num_procs = comm_world_nprocs_g;
+    cl_opts->min_num_procs = 1;
+    cl_opts->max_xfer_size = 1 * ONE_MB;
+    cl_opts->min_xfer_size = 128 * ONE_KB;
+    cl_opts->blk_size = 128 * ONE_KB;   /* Default to writing 128K per block */
+    cl_opts->interleaved = 0;       /* Default to contiguous blocks in dataset */
+    cl_opts->collective = 0;        /* Default to independent I/O access */
+    cl_opts->print_times = FALSE;   /* Printing times is off by default */
+    cl_opts->print_raw = FALSE;     /* Printing raw data throughput is off by default */
+    cl_opts->h5_alignment = 1;      /* No alignment for HDF5 objects by default */
+    cl_opts->h5_threshold = 1;      /* No threshold for aligning HDF5 objects by default */
+    cl_opts->h5_use_chunks = FALSE; /* Don't chunk the HDF5 dataset by default */
+    cl_opts->h5_write_only = FALSE; /* Do both read and write by default */
+    cl_opts->h5_use_mpi_posix = FALSE; /* Don't use MPI-posix VFD for HDF5 I/O by default */
+    cl_opts->verify = FALSE;        /* No Verify data correctness by default */
+
+    while ((opt = get_option(argc, (const char **)argv, s_opts, l_opts)) != EOF) {
+        switch ((char)opt) {
+        case 'a':
+            cl_opts->h5_alignment = parse_size_directive(opt_arg);
+            break;
+        case 'A':
+            {
+                const char *end = opt_arg;
+
+                while (end && *end != '\0') {
+                    char buf[10];
+                    int i;
+
+                    memset(buf, '\0', sizeof(buf));
+
+                    for (i = 0; *end != '\0' && *end != ','; ++end)
+                        if (isalnum(*end) && i < 10)
+                            buf[i++] = *end;
+
+                    if (!strcasecmp(buf, "phdf5")) {
+                        cl_opts->io_types |= PIO_HDF5;
+                    } else if (!strcasecmp(buf, "mpiio")) {
+                        cl_opts->io_types |= PIO_MPI;
+                    } else if (!strcasecmp(buf, "posix")) {
+                        cl_opts->io_types |= PIO_POSIX;
+                    } else {
+                        fprintf(stderr, "pio_perf: invalid --api option %s\n",
+                                buf);
+                        exit(EXIT_FAILURE);
+                    }
+
+                    if (*end == '\0')
+                        break;
+
+                    end++;
+                }
+            }
+
+            break;
+#if 0
+        case 'b':
+            /* the future "binary" option */
+            break;
+#endif  /* 0 */
+        case 'B':
+            cl_opts->blk_size = parse_size_directive(opt_arg);
+            break;
+        case 'c':
+            /* Turn on chunked HDF5 dataset creation */
+            cl_opts->h5_use_chunks = TRUE;
+            break;
+        case 'C':
+            cl_opts->collective = 1;
+            break;
+        case 'd':
+            cl_opts->num_dsets = atoi(opt_arg);
+            break;
+        case 'D':
+            {
+                const char *end = opt_arg;
+
+                while (end && *end != '\0') {
+                    char buf[10];
+                    int i;
+
+                    memset(buf, '\0', sizeof(buf));
+
+                    for (i = 0; *end != '\0' && *end != ','; ++end)
+                        if (isalnum(*end) && i < 10)
+                            buf[i++] = *end;
+
+                    if (strlen(buf) > 1 || isdigit(buf[0])) {
+                        size_t j;
+
+                        for (j = 0; j < 10 && buf[j] != '\0'; ++j)
+                            if (!isdigit(buf[j])) {
+                                fprintf(stderr, "pio_perf: invalid --debug option %s\n",
+                                        buf);
+                                exit(EXIT_FAILURE);
+                            }
+
+                        pio_debug_level = atoi(buf);
+
+                        if (pio_debug_level > 4)
+                            pio_debug_level = 4;
+                        else if (pio_debug_level < 0)
+                            pio_debug_level = 0;
+                    } else {
+                        switch (*buf) {
+                        case 'r':
+                            /* Turn on raw data throughput info */
+                            cl_opts->print_raw = TRUE;
+                            break;
+                        case 't':
+                            /* Turn on time printing */
+                            cl_opts->print_times = TRUE;
+                            break;
+			case 'v':
+                            /* Turn on verify data correctness*/
+			    cl_opts->verify = TRUE;
+			    break;
+                        default:
+                            fprintf(stderr, "pio_perf: invalid --debug option %s\n", buf);
+                            exit(EXIT_FAILURE);
+                        }
+                    }
+
+                    if (*end == '\0')
+                        break;
+
+                    end++;
+                }
+            }
+
+            break;
+        case 'e':
+            cl_opts->num_bpp = parse_size_directive(opt_arg);
+            break;
+        case 'F':
+            cl_opts->num_files = atoi(opt_arg);
+            break;
+        case 'i':
+            cl_opts->num_iters = atoi(opt_arg);
+            break;
+        case 'I':
+            cl_opts->interleaved = 1;
+            break;
+        case 'm':
+            /* Turn on MPI-posix VFL driver for HDF5 I/O */
+            cl_opts->h5_use_mpi_posix = TRUE;
+            break;
+        case 'o':
+            cl_opts->output_file = opt_arg;
+            break;
+        case 'p':
+            cl_opts->min_num_procs = atoi(opt_arg);
+            break;
+        case 'P':
+            cl_opts->max_num_procs = atoi(opt_arg);
+            break;
+        case 'T':
+            cl_opts->h5_threshold = parse_size_directive(opt_arg);
+            break;
+        case 'w':
+            cl_opts->h5_write_only = TRUE;
+            break;
+        case 'x':
+            cl_opts->min_xfer_size = parse_size_directive(opt_arg);
+            break;
+        case 'X':
+            cl_opts->max_xfer_size = parse_size_directive(opt_arg);
+            break;
+        case 'h':
+        case '?':
+        default:
+            usage(progname);
+            free(cl_opts);
+            return NULL;
+        }
+    }
+
+    /* set default if none specified yet */
+    if (!cl_opts->io_types)
+	cl_opts->io_types = PIO_HDF5 | PIO_MPI | PIO_POSIX; /* run all API */
+
+    /* verify parameters sanity.  Adjust if needed. */
+    /* cap xfer_size with bytes per process */
+    if (cl_opts->min_xfer_size > cl_opts->num_bpp)
+	cl_opts->min_xfer_size = cl_opts->num_bpp;
+    if (cl_opts->max_xfer_size > cl_opts->num_bpp)
+	cl_opts->max_xfer_size = cl_opts->num_bpp;
+    if (cl_opts->min_xfer_size > cl_opts->max_xfer_size)
+	cl_opts->min_xfer_size = cl_opts->max_xfer_size;
+    /* check range of number of processes */
+    if (cl_opts->min_num_procs <= 0)
+	cl_opts->min_num_procs = 1;
+    if (cl_opts->max_num_procs <= 0)
+	cl_opts->max_num_procs = 1;
+    if (cl_opts->min_num_procs > cl_opts->max_num_procs)
+	cl_opts->min_num_procs = cl_opts->max_num_procs;
+    /* check iteration */
+    if (cl_opts->num_iters <= 0)
+	cl_opts->num_iters = 1;
+
+    return cl_opts;
+}
+
+/*
+ * Function:    parse_size_directive
+ * Purpose:     Parse the size directive passed on the commandline. The size
+ *              directive is an integer followed by a size indicator:
+ *
+ *                  K, k - Kilobyte
+ *                  M, m - Megabyte
+ *                  G, g - Gigabyte
+ *
+ * Return:      The size as a off_t because this is related to file size.
+ *              If an unknown size indicator is used, then the program will
+ *              exit with EXIT_FAILURE as the return value.
+ * Programmer:  Bill Wendling, 18. December 2001
+ * Modifications:
+ */
+static off_t
+parse_size_directive(const char *size)
+{
+    off_t s;
+    char *endptr;
+
+    s = strtol(size, &endptr, 10);
+
+    if (endptr && *endptr) {
+        while (*endptr != '\0' && (*endptr == ' ' || *endptr == '\t'))
+            ++endptr;
+
+        switch (*endptr) {
+            case 'K':
+            case 'k':
+                s *= ONE_KB;
+                break;
+            case 'M':
+            case 'm':
+                s *= ONE_MB;
+                break;
+            case 'G':
+            case 'g':
+                s *= ONE_GB;
+                break;
+            default:
+                fprintf(stderr, "Illegal size specifier '%c'\n", *endptr);
+                exit(EXIT_FAILURE);
+        }
+    }
+
+    return s;
+}
+
+/*
+ * Function:    usage
+ * Purpose:     Print a usage message and then exit.
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 31. October 2001
+ * Modifications:
+ */
+static void
+usage(const char *prog)
+{
+    int myrank;
+
+    MPI_Comm_rank(pio_comm_g, &myrank);
+
+    if (myrank == 0) {
+	print_version(prog);
+        printf("usage: %s [OPTIONS]\n", prog);
+        printf("  OPTIONS\n");
+        printf("     -h, --help                  Print a usage message and exit\n");
+        printf("     -a S, --align=S             Alignment of objects in HDF5 file [default: 1]\n");
+        printf("     -A AL, --api=AL             Which APIs to test [default: all of them]\n");
+#if 0
+        printf("     -b, --binary                The elusive binary option\n");
+#endif  /* 0 */
+        printf("     -B S, --block-size=S        Block size within transfer buffer\n");
+        printf("                                 (see below for description)\n");
+        printf("                                 [default:128K]\n");
+        printf("     -c, --chunk                 Create HDF5 datasets chunked [default: off]\n");
+        printf("     -C, --collective            Use collective I/O for MPI and HDF5 APIs\n");
+        printf("                                 [default: off (i.e. independent I/O)]\n");
+        printf("     -d N, --num-dsets=N         Number of datasets per file [default:1]\n");
+        printf("     -D DL, --debug=DL           Indicate the debugging level\n");
+        printf("                                 [default: no debugging]\n");
+        printf("     -e S, --num-bytes=S         Number of bytes per process per dataset\n");
+        printf("                                 [default: 256K]\n");
+        printf("     -F N, --num-files=N         Number of files [default: 1]\n");
+        printf("     -i N, --num-iterations=N    Number of iterations to perform [default: 1]\n");
+        printf("     -I, --interleaved           Interleaved block I/O (see below for example)\n");
+        printf("                                 [default: Contiguous block I/O]\n");
+        printf("     -m, --mpi-posix             Use MPI-posix driver for HDF5 I/O\n");
+        printf("                                 [default: use MPI-I/O driver]\n");
+        printf("     -o F, --output=F            Output raw data into file F [default: none]\n");
+        printf("     -p N, --min-num-processes=N Minimum number of processes to use [default: 1]\n");
+        printf("     -P N, --max-num-processes=N Maximum number of processes to use\n");
+        printf("                                 [default: all MPI_COMM_WORLD processes ]\n");
+        printf("     -T S, --threshold=S         Threshold for alignment of objects in HDF5 file\n");
+        printf("                                 [default: 1]\n");
+        printf("     -w, --write-only            Perform write tests not the read tests\n");
+        printf("     -x S, --min-xfer-size=S     Minimum transfer buffer size [default: 128K]\n");
+        printf("     -X S, --max-xfer-size=S     Maximum transfer buffer size [default: 1M]\n");
+        printf("\n");
+        printf("  F  - is a filename.\n");
+        printf("  N  - is an integer >=0.\n");
+        printf("  S  - is a size specifier, an integer >=0 followed by a size indicator:\n");
+        printf("          K - Kilobyte (%d)\n", ONE_KB);
+        printf("          M - Megabyte (%d)\n", ONE_MB);
+        printf("          G - Gigabyte (%d)\n", ONE_GB);
+        printf("\n");
+        printf("      Example: '37M' is 37 megabytes or %d bytes\n", 37*ONE_MB);
+        printf("\n");
+        printf("  AL - is an API list. Valid values are:\n");
+        printf("          phdf5 - Parallel HDF5\n");
+        printf("          mpiio - MPI-I/O\n");
+        printf("          posix - POSIX\n");
+        printf("\n");
+        printf("      Example: --api=mpiio,phdf5\n");
+        printf("\n");
+        printf("  Block size vs. Transfer buffer size:\n");
+        printf("      The transfer buffer size is the size of a buffer in memory, which is\n");
+        printf("      broken into 'block size' pieces and written to the file.  The pattern\n");
+        printf("      of the blocks in the file is described below in the 'Interleaved vs.\n");
+        printf("      Contiguous blocks' example.\n");
+        printf("\n");
+        printf("      If the collective I/O option is given, the blocks in each transfer buffer\n");
+        printf("      are written at once with an MPI derived type, for the MPI-I/O and PHDF5\n");
+        printf("      APIs.\n");
+        printf("\n");
+        printf("  Interleaved vs. Contiguous blocks:\n");
+        printf("      When contiguous blocks are written to a dataset, the dataset is divided\n");
+        printf("      into '# processes' regions and each process writes data to its own region.\n");
+        printf("      When interleaved blocks are written to a dataset, space for the first\n");
+        printf("      block of the first process is allocated in the dataset, then space is\n");
+        printf("      allocated for the first block of the second process, etc. until space is\n");
+        printf("      allocated for the first block of each process, then space is allocated for\n");
+        printf("      the second block of the first process, the second block of the second\n");
+        printf("      process, etc.\n");
+        printf("\n");
+        printf("      For example, with a 4 process run, 1MB bytes-per-process, 256KB transfer\n");
+        printf("        buffer size, and 64KB block size,\n");
+        printf("          16 contiguous blocks per process are written to the file like so:\n");
+        printf("              1111111111111111222222222222222233333333333333334444444444444444\n");
+        printf("          16 interleaved blocks per process are written to the file like so:\n");
+        printf("              1234123412341234123412341234123412341234123412341234123412341234\n");
+        printf("        If collective I/O is turned on, all of the four blocks per transfer\n");
+        printf("        buffer will be written in one collective I/O call.\n");
+        printf("\n");
+        printf("  DL - is a list of debugging flags. Valid values are:\n");
+        printf("          1 - Minimal\n");
+        printf("          2 - Not quite everything\n");
+        printf("          3 - Everything\n");
+        printf("          4 - The kitchen sink\n");
+        printf("          r - Raw data I/O throughput information\n");
+        printf("          t - Times as well as throughputs\n");
+        printf("          v - Verify data correctness\n");
+        printf("\n");
+        printf("      Example: --debug=2,r,t\n");
+        printf("\n");
+        printf("  Environment variables:\n");
+        printf("  HDF5_NOCLEANUP   Do not remove data files if set [default remove]\n");
+        printf("  HDF5_MPI_INFO    MPI INFO object key=value separated by ;\n");
+        printf("  HDF5_PARAPREFIX  Paralllel data files prefix\n");
+        fflush(stdout);
+    }
+}
+
+#else /* H5_HAVE_PARALLEL */
+
+/*
+ * Function:    main
+ * Purpose:     Dummy main() function for if HDF5 was configured without
+ *              parallel stuff.
+ * Return:      EXIT_SUCCESS
+ * Programmer:  Bill Wendling, 14. November 2001
+ * Modifications:
+ */
+int
+main(void)
+{
+    printf("No parallel IO performance because parallel is not configured\n");
+    return EXIT_SUCCESS;
+}
+
+#endif /* !H5_HAVE_PARALLEL */

Added: packages/hdf5/branches/upstream/current/perform/pio_perf.h
===================================================================
--- packages/hdf5/branches/upstream/current/perform/pio_perf.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/pio_perf.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,98 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef PIO_PERF_H__
+#define PIO_PERF_H__
+
+#include "pio_timer.h"
+#include "H5private.h"
+#include "h5test.h"
+
+/* setup the dataset no fill option if this is v1.5 or more */
+#if H5_VERS_MAJOR > 1 || H5_VERS_MINOR > 4
+#define H5_HAVE_NOFILL 1
+#endif
+
+typedef enum iotype_ {
+    POSIXIO,
+    MPIO,
+    PHDF5
+    /*NUM_TYPES*/
+} iotype;
+
+typedef struct parameters_ {
+    iotype	io_type;        /* The type of IO test to perform       */
+    int		num_procs;      /* Maximum number of processes to use   */
+    long	num_files;      /* Number of files to create            */
+    long	num_dsets;      /* Number of datasets to create         */
+    off_t	num_bytes;      /* Number of bytes in each dset         */
+    int         num_iters;      /* Number of times to loop doing the IO */
+    size_t 	buf_size;       /* Buffer size                          */
+    size_t 	blk_size;       /* Block size                           */
+    unsigned    interleaved;    /* Interleaved vs. contiguous blocks    */
+    unsigned    collective;     /* Collective vs. independent I/O       */
+    hsize_t 	h5_align;       /* HDF5 object alignment                */
+    hsize_t 	h5_thresh;      /* HDF5 object alignment threshold      */
+    int 	h5_use_chunks;  /* Make HDF5 dataset chunked            */
+    int    	h5_write_only;  /* Perform the write tests only         */
+    unsigned    h5_use_mpi_posix;   /* Use MPI-posix VFD for HDF5 I/O (instead of MPI-I/O VFD) */
+    int 	verify;    	/* Verify data correctness              */
+} parameters;
+
+typedef struct results_ {
+    herr_t      ret_code;
+    pio_time   *timers;
+} results;
+
+#ifndef SUCCESS
+#define SUCCESS     0
+#endif  /* !SUCCESS */
+
+#ifndef FAIL
+#define FAIL        -1
+#endif  /* !FAIL */
+
+extern FILE     *output;            /* output file                          */
+extern pio_time *timer_g;           /* timer: global for stub functions     */
+extern int      comm_world_rank_g;  /* my rank in MPI_COMM_RANK             */
+extern int      comm_world_nprocs_g;/* num. of processes of MPI_COMM_WORLD  */
+extern MPI_Comm pio_comm_g;         /* Communicator to run the PIO          */
+extern int      pio_mpi_rank_g;     /* MPI rank of pio_comm_g               */
+extern int      pio_mpi_nprocs_g;   /* number of processes of pio_comm_g    */
+extern int      pio_debug_level;    /* The debug level:
+                                     *   0 - Off
+                                     *   1 - Minimal
+                                     *   2 - Some more
+                                     *   3 - Maximal
+                                     *   4 - Even More Debugging (timer stuff)
+                                     */
+
+#define HDprint_rank(f)              /* print rank in MPI_COMM_WORLD */    \
+    HDfprintf(f, "%d: ", comm_world_rank_g);
+#define HDprint_size(f)              /* print size of MPI_COMM_WORLD */    \
+    HDfprintf(f, "%d", comm_world_nprocs_g);
+#define HDprint_rank_size(f)         /* print rank/size of MPI_COMM_WORLD */  \
+    HDfprintf(f, "%d/%d: ", comm_world_rank_g, comm_world_nprocs_g);
+
+#ifdef __cplusplus
+extern "C" {
+#endif  /* __cplusplus */
+
+extern results do_pio(parameters param);
+
+#ifdef __cplusplus
+}
+#endif  /* __cplusplus */
+
+#endif  /* PIO_PERF_H__ */

Added: packages/hdf5/branches/upstream/current/perform/pio_timer.c
===================================================================
--- packages/hdf5/branches/upstream/current/perform/pio_timer.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/pio_timer.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,204 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Purpose:
+ *
+ * This is a module of useful timing functions for performance testing.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "pio_timer.h"
+
+#ifdef H5_HAVE_PARALLEL
+
+#include <mpi.h>
+
+#include "pio_perf.h"
+
+/*
+ * The number to divide the tv_usec field with to get a nice decimal to add to
+ * the number of seconds.
+ */
+#define MICROSECOND     1000000.0
+
+/* global variables */
+pio_time   *timer_g;            /* timer: global for stub functions     */
+
+/*
+ * Function:    pio_time_new
+ * Purpose:     Build us a brand, spankin', new performance time object.
+ *              The object is a black box to the user. They just tell us
+ *              what type of timer they want (MPI_TIMER for MPI_Wtime or
+ *              SYS_TIMER for system time).
+ * Return:      Pointer to pio_time object
+ * Programmer:  Bill Wendling, 01. October 2001
+ * Modifications:
+ */
+pio_time *
+pio_time_new(clock_type type)
+{
+    pio_time *pt = (pio_time *)calloc(1, sizeof(struct pio_time_));
+
+    /* set global timer variable */
+    timer_g = pt;
+
+    pt->type = type;
+    return pt;
+}
+
+/*
+ * Function:    pio_time_destroy
+ * Purpose:     Remove the memory allocated for the pio_time object. Only
+ *              need to call on a pointer allocated with the ``pio_time_new''
+ *              function.
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 01. October 2001
+ * Modifications:
+ */
+void
+pio_time_destroy(pio_time *pt)
+{
+    free(pt);
+    /* reset the global timer pointer too. */
+    timer_g = NULL;
+}
+
+/*
+ * Function:    set_timer_type
+ * Purpose:     Set the type of the timer to either MPI_TIMER or SYS_TIMER.
+ *              This really only needs to be called if you didn't construct a
+ *              timer with the pio_timer_new function (shame!).
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 04. October 2001
+ * Modifications:
+ */
+void
+set_timer_type(pio_time *pt, clock_type type)
+{
+    pt->type = type;
+}
+
+/*
+ * Function:    get_timer_type
+ * Purpose:     Get the type of the timer.
+ * Return:      MPI_TIMER or SYS_TIMER.
+ * Programmer:  Bill Wendling, 04. October 2001
+ * Modifications:
+ */
+clock_type
+get_timer_type(pio_time *pt)
+{
+    return pt->type;
+}
+
+/*
+ * Function:    set_time
+ * Purpose:     Set the time in a ``pio_time'' object.
+ * Return:      Pointer to the passed in ``pio_time'' object.
+ * Programmer:  Bill Wendling, 01. October 2001
+ * Modifications:
+ */
+pio_time *
+set_time(pio_time *pt, timer_type t, int start_stop)
+{
+    if (pt) {
+        if (pt->type == MPI_TIMER) {
+            if (start_stop == START) {
+                pt->mpi_timer[t] = MPI_Wtime();
+            } else {
+                pt->total_time[t] += MPI_Wtime() - pt->mpi_timer[t];
+            }
+        } else {
+            if (start_stop == START) {
+                gettimeofday(&pt->sys_timer[t], NULL);
+            } else {
+                struct timeval sys_t;
+
+                gettimeofday(&sys_t, NULL);
+                pt->total_time[t] +=
+                    ((double)sys_t.tv_sec +
+                                ((double)sys_t.tv_usec) / MICROSECOND) -
+                    ((double)pt->sys_timer[t].tv_sec +
+                            ((double)pt->sys_timer[t].tv_usec) / MICROSECOND);
+            }
+        }
+
+        if (pio_debug_level >= 4) {
+            const char *msg;
+            int myrank;
+
+            MPI_Comm_rank(pio_comm_g, &myrank);
+
+            switch (t) {
+            case HDF5_FILE_OPENCLOSE:
+                msg = "File Open/Close";
+                break;
+            case HDF5_DATASET_CREATE:
+                msg = "Dataset Create";
+                break;
+            case HDF5_MPI_WRITE:
+                msg = "MPI Write";
+                break;
+            case HDF5_MPI_READ:
+                msg = "MPI Read";
+                break;
+            case HDF5_FINE_WRITE_FIXED_DIMS:
+                msg = "Fine Write";
+                break;
+            case HDF5_FINE_READ_FIXED_DIMS:
+                msg = "Fine Read";
+                break;
+            case HDF5_GROSS_WRITE_FIXED_DIMS:
+                msg = "Gross Write";
+                break;
+            case HDF5_GROSS_READ_FIXED_DIMS:
+                msg = "Gross Read";
+                break;
+            case HDF5_RAW_WRITE_FIXED_DIMS:
+                msg = "Raw Write";
+                break;
+            case HDF5_RAW_READ_FIXED_DIMS:
+                msg = "Raw Read";
+                break;
+            default:
+                msg = "Unknown Timer";
+                break;
+            }
+
+            fprintf(output, "    Proc %d: %s %s: %.2f\n", myrank, msg,
+                    (start_stop == START ? "Start" : "Stop"),
+                    pt->total_time[t]);
+        }
+    }
+
+    return pt;
+}
+
+/*
+ * Function:    get_time
+ * Purpose:     Get the time from a ``pio_time'' object.
+ * Return:      The number of seconds as a DOUBLE.
+ * Programmer:  Bill Wendling, 01. October 2001
+ * Modifications:
+ */
+double
+get_time(pio_time *pt, timer_type t)
+{
+    return pt->total_time[t];
+}
+
+#endif /* H5_HAVE_PARALLEL */

Added: packages/hdf5/branches/upstream/current/perform/pio_timer.h
===================================================================
--- packages/hdf5/branches/upstream/current/perform/pio_timer.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/pio_timer.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,77 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef PIO_TIMER__
+#define PIO_TIMER__
+
+#include "hdf5.h"
+
+#if defined(H5_TIME_WITH_SYS_TIME)
+#   include <sys/time.h>
+#   include <time.h>
+#elif defined(H5_HAVE_SYS_TIME_H)
+#   include <sys/time.h>
+#else
+#   include <time.h>
+#endif
+
+/* The different types of timers we can have */
+typedef enum timer_type_ {
+    HDF5_FILE_OPENCLOSE,
+    HDF5_DATASET_CREATE,
+    HDF5_MPI_WRITE,
+    HDF5_MPI_READ,
+    HDF5_FINE_WRITE_FIXED_DIMS,
+    HDF5_FINE_READ_FIXED_DIMS,
+    HDF5_GROSS_WRITE_FIXED_DIMS,
+    HDF5_GROSS_READ_FIXED_DIMS,
+    HDF5_RAW_WRITE_FIXED_DIMS,
+    HDF5_RAW_READ_FIXED_DIMS,
+    NUM_TIMERS
+} timer_type;
+
+typedef enum clock_type_ {
+    MPI_TIMER = 0,  /* Use MPI timer to measure time        */
+    SYS_TIMER = 1   /* Use system clock to measure time     */
+} clock_type;
+
+/* Miscellaneous identifiers */
+enum {
+    START,          /* Start a specified timer              */
+    STOP            /* Stop a specified timer               */
+};
+
+/* The performance time structure */
+typedef struct pio_time_ {
+    clock_type type;
+    double total_time[NUM_TIMERS];
+    double mpi_timer[NUM_TIMERS];
+    struct timeval sys_timer[NUM_TIMERS];
+} pio_time;
+
+/* External function declarations */
+#ifdef __cplusplus
+extern "C" {
+#endif  /* __cplusplus */
+extern pio_time    *pio_time_new(clock_type t);
+extern void         pio_time_destroy(pio_time *pt);
+extern void         set_timer_type(pio_time *pt, clock_type type);
+extern clock_type   get_timer_type(pio_time *pt);
+extern pio_time    *set_time(pio_time *pt, timer_type t, int start_stop);
+extern double       get_time(pio_time *pt, timer_type t);
+#ifdef __cplusplus
+}
+#endif  /* __cplusplus */
+
+#endif  /* PIO_TIMER__ */

Added: packages/hdf5/branches/upstream/current/perform/zip_perf.c
===================================================================
--- packages/hdf5/branches/upstream/current/perform/zip_perf.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/perform/zip_perf.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,671 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* ===========================================================================
+ * Usage:  zip_perf [-d] [-f] [-h] [-1 to -9] [files...]
+ *   -d : decompress
+ *   -f : compress with Z_FILTERED
+ *   -h : compress with Z_HUFFMAN_ONLY
+ *   -1 to -9 : compression level
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <math.h>
+#include <sys/time.h>
+#include <sys/uio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+/* our header files */
+#include "hdf5.h"
+#include "H5private.h"
+#include "h5tools_utils.h"
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+
+#include <zlib.h>
+
+#if defined(MSDOS) || defined(OS2) || defined(WIN32)
+#  include <fcntl.h>
+#  include <io.h>
+#  define SET_BINARY_MODE(file)     setmode(fileno(file), O_BINARY)
+#else
+#  define SET_BINARY_MODE(file)     /* nothing */
+#endif  /* MSDOS || OS2 || WIN32 */
+
+#ifdef VMS
+#  define unlink        delete
+#  define GZ_SUFFIX     "-gz"
+#endif  /* VMS */
+
+#ifdef RISCOS
+#  define unlink        remove
+#  define GZ_SUFFIX     "-gz"
+#  define fileno(file)  file->__file
+#endif  /* RISCOS */
+
+#if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os
+#  include <unix.h>     /* for fileno */
+#endif  /* __MWERKS__ ... */
+
+#ifndef GZ_SUFFIX
+#  define GZ_SUFFIX     ".gz"
+#endif  /* GZ_SUFFIX */
+
+#define SUFFIX_LEN          (sizeof(GZ_SUFFIX) - 1)
+
+#define ONE_KB              1024
+#define ONE_MB              (ONE_KB * ONE_KB)
+#define ONE_GB              (ONE_MB * ONE_KB)
+
+#define MICROSECOND         1000000.0
+
+/* report 0.0 in case t is zero too */
+#define MB_PER_SEC(bytes,t) ((fabs(t)<0.0000000001) ? 0.0 : ((((double)bytes) / ONE_MB) / (t)))
+
+#ifndef TRUE
+#define TRUE    1
+#endif  /* TRUE */
+
+#ifndef FALSE
+#define FALSE   (!TRUE)
+#endif  /* FALSE */
+
+#define BUFLEN              (16 * ONE_KB)
+#define MAX_NAME_LEN        ONE_KB
+
+/* internal variables */
+static const char *prog;
+static const char *option_prefix;
+static char *filename;
+static int compress_percent = 0;
+static int compress_level = Z_DEFAULT_COMPRESSION;
+static int output, random_test = FALSE;
+static int report_once_flag;
+static double compression_time;
+
+/* internal functions */
+static void error(const char *fmt, ...);
+static void compress_buffer(Bytef *dest, uLongf *destLen, const Bytef *source,
+                            uLong sourceLen);
+
+/* commandline options : long and short form */
+static const char *s_opts = "hB:b:c:p:rs:0123456789";
+static struct long_options l_opts[] = {
+    { "help", no_arg, 'h' },
+    { "compressability", require_arg, 'c' },
+    { "compressabilit", require_arg, 'c' },
+    { "compressabili", require_arg, 'c' },
+    { "compressabil", require_arg, 'c' },
+    { "compressabi", require_arg, 'c' },
+    { "compressab", require_arg, 'c' },
+    { "compressa", require_arg, 'c' },
+    { "compress", require_arg, 'c' },
+    { "compres", require_arg, 'c' },
+    { "compre", require_arg, 'c' },
+    { "compr", require_arg, 'c' },
+    { "comp", require_arg, 'c' },
+    { "com", require_arg, 'c' },
+    { "co", require_arg, 'c' },
+    { "file-size", require_arg, 's' },
+    { "file-siz", require_arg, 's' },
+    { "file-si", require_arg, 's' },
+    { "file-s", require_arg, 's' },
+    { "file", require_arg, 's' },
+    { "fil", require_arg, 's' },
+    { "fi", require_arg, 's' },
+    { "max-buffer-size", require_arg, 'B' },
+    { "max-buffer-siz", require_arg, 'B' },
+    { "max-buffer-si", require_arg, 'B' },
+    { "max-buffer-s", require_arg, 'B' },
+    { "max-buffer", require_arg, 'B' },
+    { "max-buffe", require_arg, 'B' },
+    { "max-buff", require_arg, 'B' },
+    { "max-buf", require_arg, 'B' },
+    { "max-bu", require_arg, 'B' },
+    { "max-b", require_arg, 'B' },
+    { "max", require_arg, 'B' },
+    { "min-buffer-size", require_arg, 'b' },
+    { "min-buffer-siz", require_arg, 'b' },
+    { "min-buffer-si", require_arg, 'b' },
+    { "min-buffer-s", require_arg, 'b' },
+    { "min-buffer", require_arg, 'b' },
+    { "min-buffe", require_arg, 'b' },
+    { "min-buff", require_arg, 'b' },
+    { "min-buf", require_arg, 'b' },
+    { "min-bu", require_arg, 'b' },
+    { "min-b", require_arg, 'b' },
+    { "min", require_arg, 'b' },
+    { "prefix", require_arg, 'p' },
+    { "prefi", require_arg, 'p' },
+    { "pref", require_arg, 'p' },
+    { "pre", require_arg, 'p' },
+    { "pr", require_arg, 'p' },
+    { "random-test", no_arg, 'r' },
+    { "random-tes", no_arg, 'r' },
+    { "random-te", no_arg, 'r' },
+    { "random-t", no_arg, 'r' },
+    { "random", no_arg, 'r' },
+    { "rando", no_arg, 'r' },
+    { "rand", no_arg, 'r' },
+    { "ran", no_arg, 'r' },
+    { "ra", no_arg, 'r' },
+    { NULL, 0, '\0' }
+};
+
+/*
+ * Function:    error
+ * Purpose:     Display error message and exit.
+ * Programmer:  Bill Wendling, 05. June 2002
+ * Modifications:
+ */
+static void
+error(const char *fmt, ...)
+{
+    va_list ap;
+
+    va_start(ap, fmt);
+    fprintf(stderr, "%s: error: ", prog);
+    vfprintf(stderr, fmt, ap);
+    fprintf(stderr, "\n");
+    va_end(ap);
+    exit(EXIT_FAILURE);
+}
+
+/*
+ * Function:    cleanup
+ * Purpose:     Cleanup the output file.
+ * Returns:     Nothing
+ * Programmer:  Bill Wendling, 06. June 2002
+ * Modifications:
+ */
+static void
+cleanup(void)
+{
+    if (!getenv("HDF5_NOCLEANUP"))
+        unlink(filename);
+}
+
+static void
+write_file(Bytef *source, uLongf sourceLen)
+{
+    Bytef *d_ptr, *dest;
+    uLongf d_len, destLen;
+    struct timeval timer_start, timer_stop;
+
+    /* destination buffer needs to be at least 0.1% larger than sourceLen
+     * plus 12 bytes */
+    destLen = (uLongf)((double)sourceLen + ((double)sourceLen * 0.1)) + 12;
+    dest = (Bytef *)malloc(destLen);
+
+    if (!dest)
+        error("out of memory");
+
+    gettimeofday(&timer_start, NULL);
+    compress_buffer(dest, &destLen, source, sourceLen);
+    gettimeofday(&timer_stop, NULL);
+
+    compression_time += ((double)timer_stop.tv_sec +
+                            ((double)timer_stop.tv_usec) / MICROSECOND) -
+                        ((double)timer_start.tv_sec +
+                            ((double)timer_start.tv_usec) / MICROSECOND);
+
+    if (report_once_flag) {
+        printf("\tCompression Ratio: %g\n", ((double)destLen) / (double)sourceLen);
+        report_once_flag = 0;
+    }
+
+    d_ptr = dest;
+    d_len = destLen;
+
+    /* loop to make sure we write everything out that we want to write */
+    for (;;) {
+        int rc = (int)write(output, d_ptr, (size_t)d_len);
+
+        if (rc == -1)
+            error(strerror(errno));
+
+        if (rc == (int)d_len)
+            break;
+
+        d_len -= rc;
+        d_ptr += rc;
+    }
+
+    free(dest);
+}
+
+/*
+ * Function:    compress_buffer
+ * Purpose:     Compress the buffer.
+ * Returns:     Z_OK            - success
+ *              Z_MEM_ERROR     - not enough memory
+ *              Z_BUF_ERROR     - not enough room in the output buffer
+ *              Z_STREAM_ERROR  - level parameter is invalid
+ * Programmer:  Bill Wendling, 05. June 2002
+ * Modifications:
+ */
+static void
+compress_buffer(Bytef *dest, uLongf *destLen, const Bytef *source,
+                uLong sourceLen)
+{
+    int rc = compress2(dest, destLen, source, sourceLen, compress_level);
+
+    if (rc != Z_OK) {
+        /* compress2 failed - cleanup and tell why */
+        cleanup();
+
+        switch (rc) {
+        case Z_MEM_ERROR:
+            error("not enough memory");
+            break;
+        case Z_BUF_ERROR:
+            error("not enough room in the output buffer");
+            break;
+        case Z_STREAM_ERROR:
+            error("level parameter (%d) is invalid", compress_level);
+            break;
+        default:
+            error("unknown compression error");
+            break;
+        }
+    }
+}
+
+#ifdef LATER
+/*
+ * Function:    uncompress_buffer
+ * Purpose:     Uncompress the buffer.
+ * Returns:     Z_OK            - success
+ *              Z_MEM_ERROR     - not enough memory
+ *              Z_BUF_ERROR     - not enough room in the output buffer
+ *              Z_DATA_ERROR    - the input data was corrupted
+ * Programmer:  Bill Wendling, 05. June 2002
+ * Modifications:
+ */
+static int
+uncompress_buffer(Bytef *dest, uLongf *destLen, const Bytef *source,
+                  uLong sourceLen)
+{
+    int rc = uncompress(dest, destLen, source, sourceLen);
+
+    return rc;
+}
+#endif /* LATER */
+
+/*
+ * Function:    get_unique_name
+ * Purpose:     Create a new file who's name doesn't conflict with
+ *              pre-existing files.
+ * Returns:     Nothing
+ * Programmer:  Bill Wendling, 06. June 2002
+ * Modifications:
+ */
+static void
+get_unique_name(void)
+{
+    const char *prefix = "/tmp", *tmpl = "/zip_perf.data";
+    const char *env = getenv("HDF5_PREFIX");
+
+    if (env)
+        prefix = env;
+
+    if (option_prefix)
+        prefix = option_prefix;
+
+    filename = calloc(1, strlen(prefix) + strlen(tmpl) + 1);
+
+    if (!filename)
+        error("out of memory");
+
+    strcpy(filename, prefix);
+    strcat(filename, tmpl);
+}
+
+/*
+ * Function:    usage
+ * Purpose:     Print a usage message and then exit.
+ * Return:      Nothing
+ * Programmer:  Bill Wendling, 05. June 2002
+ * Modifications:
+ */
+static void
+usage(void)
+{
+    printf("usage: %s [OPTIONS]\n", prog);
+    printf("  OPTIONS\n");
+    printf("     -h, --help                 Print this usage message and exit\n");
+    printf("     -1...-9                    Level of compression, from 1 to 9\n");
+    printf("     -c P, --compressability=P  Percentage of compressability of the random\n");
+    printf("                                data you want [default: 0]");
+    printf("     -s S, --file-size=S        Maximum size of uncompressed file [default: 64M]\n");
+    printf("     -B S, --max-buffer_size=S  Maximum size of buffer [default: 1M]\n");
+    printf("     -b S, --min-buffer_size=S  Minumum size of buffer [default: 128K]\n");
+    printf("     -p D, --prefix=D           The directory prefix to place the file\n");
+    printf("     -r, --random-test          Use random data to write to the file\n");
+    printf("                                [default: no]\n");
+    printf("\n");
+    printf("  D  - a directory which exists\n");
+    printf("  P  - a number between 0 and 100\n");
+    printf("  S  - is a size specifier, an integer >=0 followed by a size indicator:\n");
+    printf("\n");
+    printf("          K - Kilobyte (%d)\n", ONE_KB);
+    printf("          M - Megabyte (%d)\n", ONE_MB);
+    printf("          G - Gigabyte (%d)\n", ONE_GB);
+    printf("\n");
+    printf("      Example: 37M = 37 Megabytes = %d bytes\n", 37 * ONE_MB);
+    printf("\n");
+    fflush(stdout);
+}
+
+/*
+ * Function:    parse_size_directive
+ * Purpose:     Parse the size directive passed on the commandline. The size
+ *              directive is an integer followed by a size indicator:
+ *
+ *                  K, k - Kilobyte
+ *                  M, m - Megabyte
+ *
+ * Return:      The size as a size_t because this is related to buffer size.
+ *              If an unknown size indicator is used, then the program will
+ *              exit with EXIT_FAILURE as the return value.
+ * Programmer:  Bill Wendling, 05. June 2002
+ * Modifications:
+ */
+static unsigned long
+parse_size_directive(const char *size)
+{
+    unsigned long s;
+    char *endptr;
+
+    s = strtoul(size, &endptr, 10);
+
+    if (endptr && *endptr) {
+        while (*endptr != '\0' && (*endptr == ' ' || *endptr == '\t'))
+            ++endptr;
+
+        switch (*endptr) {
+            case 'K':
+            case 'k':
+                s *= ONE_KB;
+                break;
+            case 'M':
+            case 'm':
+                s *= ONE_MB;
+                break;
+            case 'G':
+            case 'g':
+                s *= ONE_GB;
+                break;
+            default:
+                error("illegal size specifier '%c'", *endptr);
+                break;
+        }
+    }
+
+    return s;
+}
+
+static void
+fill_with_random_data(Bytef *src, uLongf src_len)
+{
+    register unsigned u;
+    struct stat stat_buf;
+
+    if (stat("/dev/urandom", &stat_buf) == 0) {
+        uLongf len = src_len;
+        Bytef *buf = src;
+        int fd = open("/dev/urandom", O_RDONLY);
+
+        printf("Using /dev/urandom for random data\n");
+
+        if (fd < 0)
+            error(strerror(errno));
+
+        for (;;) {
+            ssize_t rc = read(fd, buf, src_len);
+
+            if (rc == -1)
+                error(strerror(errno));
+
+            if (rc == (ssize_t)len)
+                break;
+
+            buf += rc;
+            len -= rc;
+        }
+    } else {
+        printf("Using random() for random data\n");
+
+        for (u = 0; u < src_len; ++u)
+            src[u] = (Bytef)(0xff & HDrandom());
+    }
+
+    if (compress_percent) {
+        unsigned long s = src_len * compress_percent / 100;
+
+        memset(src, '\0', s);
+    }
+}
+
+static void
+do_write_test(unsigned long file_size, unsigned long min_buf_size,
+              unsigned long max_buf_size)
+{
+    uLongf src_len, total_len;
+    struct timeval timer_start, timer_stop;
+    double total_time;
+    Bytef *src;
+
+    for (src_len = min_buf_size; src_len <= max_buf_size; src_len <<= 1) {
+        register unsigned long i, iters;
+
+        iters = file_size / src_len;
+        src = (Bytef *)calloc(1, sizeof(Bytef) * src_len);
+
+        if (!src) {
+            cleanup();
+            error("out of memory");
+        }
+
+        compression_time = 0.0;
+
+        if (random_test)
+            fill_with_random_data(src, src_len);
+
+        printf("Buffer size == ");
+
+        if (src_len >= ONE_KB && (src_len % ONE_KB) == 0) {
+            if (src_len >= ONE_MB && (src_len % ONE_MB) == 0) {
+                printf("%ldMB", src_len / ONE_MB);
+            } else {
+                printf("%ldKB", src_len / ONE_KB);
+            }
+        } else {
+            printf("%ld", src_len);
+        }
+
+        printf("\n");
+
+        /* do uncompressed data write */
+        gettimeofday(&timer_start, NULL);
+        output = open(filename, O_RDWR | O_CREAT, S_IRWXU);
+
+        if (output == -1)
+            error(strerror(errno));
+
+        for (i = 0; i <= iters; ++i) {
+            Bytef *s_ptr = src;
+            uLong s_len = src_len;
+
+            /* loop to make sure we write everything out that we want to write */
+            for (;;) {
+                ssize_t rc = write(output, s_ptr, s_len);
+
+                if (rc == -1)
+                    error(strerror(errno));
+
+                if (rc == (ssize_t)s_len)
+                    break;
+
+                s_len -= rc;
+                s_ptr += rc;
+            }
+        }
+
+        close(output);
+        gettimeofday(&timer_stop, NULL);
+
+        total_time = ((double)timer_stop.tv_sec +
+                            ((double)timer_stop.tv_usec) / MICROSECOND) -
+                     ((double)timer_start.tv_sec +
+                            ((double)timer_start.tv_usec) / MICROSECOND);
+
+        printf("\tUncompressed Write Time: %.2fs\n", total_time);
+        printf("\tUncompressed Write Throughput: %.2fMB/s\n",
+               MB_PER_SEC(file_size, total_time));
+
+        unlink(filename);
+
+        /* do compressed data write */
+        output = open(filename, O_RDWR | O_CREAT);
+
+        if (output == -1)
+            error(strerror(errno));
+
+        report_once_flag = 1;
+        gettimeofday(&timer_start, NULL);
+
+        for (total_len = 0; total_len < file_size; total_len += src_len)
+            write_file(src, src_len);
+
+        close(output);
+        gettimeofday(&timer_stop, NULL);
+
+        total_time = ((double)timer_stop.tv_sec +
+                            ((double)timer_stop.tv_usec) / MICROSECOND) -
+                     ((double)timer_start.tv_sec +
+                            ((double)timer_start.tv_usec) / MICROSECOND);
+
+        printf("\tCompressed Write Time: %.2fs\n", total_time);
+        printf("\tCompressed Write Throughput: %.2fMB/s\n",
+               MB_PER_SEC(file_size, total_time));
+        printf("\tCompression Time: %gs\n", compression_time);
+
+        unlink(filename);
+        free(src);
+    }
+}
+
+/*
+ * Function:    main
+ * Purpose:     Run the program
+ * Return:      EXIT_SUCCESS or EXIT_FAILURE
+ * Programmer:  Bill Wendling, 05. June 2002
+ * Modifications:
+ */
+int
+main(int argc, char **argv)
+{
+    unsigned long min_buf_size = 128 * ONE_KB, max_buf_size = ONE_MB;
+    unsigned long file_size = 64 * ONE_MB;
+    int opt;
+
+    prog = argv[0];
+
+    while ((opt = get_option(argc, (const char **)argv, s_opts, l_opts)) > 0) {
+        switch ((char)opt) {
+        case '0': case '1': case '2':
+        case '3': case '4': case '5':
+        case '6': case '7': case '8':
+        case '9':
+            compress_level = opt - '0';
+            break;
+        case 'B':
+            max_buf_size = parse_size_directive(opt_arg);
+            break;
+        case 'b':
+            min_buf_size = parse_size_directive(opt_arg);
+            break;
+        case 'c':
+            compress_percent = (int)strtol(opt_arg, NULL, 10);
+
+            if (compress_percent < 0)
+                compress_percent = 0;
+            else if (compress_percent > 100)
+                compress_percent = 100;
+
+            break;
+        case 'p':
+            option_prefix = opt_arg;
+            break;
+        case 'r':
+            random_test = TRUE;
+            break;
+        case 's':
+            file_size = parse_size_directive(opt_arg);
+            break;
+        case '?':
+            usage();
+            exit(EXIT_FAILURE);
+            break;
+        case 'h':
+        default:
+            usage();
+            exit(EXIT_SUCCESS);
+            break;
+        }
+    }
+
+    if (min_buf_size > max_buf_size)
+        error("minmum buffer size (%d) exceeds maximum buffer size (%d)",
+              min_buf_size, max_buf_size);
+
+    printf("Filesize: %ld\n", file_size);
+
+    if (compress_level == Z_DEFAULT_COMPRESSION)
+        printf("Compression Level: 6\n");
+    else
+        printf("Compression Level: %d\n", compress_level);
+
+    get_unique_name();
+    do_write_test(file_size, min_buf_size, max_buf_size);
+    cleanup();
+    return EXIT_SUCCESS;
+}
+
+#else
+
+/*
+ * Function:    main
+ * Purpose:     Dummy main() function for if HDF5 was configured without
+ *              zlib stuff.
+ * Return:      EXIT_SUCCESS
+ * Programmer:  Bill Wendling, 10. June 2002
+ * Modifications:
+ */
+int
+main(void)
+{
+    printf("No compression IO performance because zlib was not configured\n");
+    return EXIT_SUCCESS;
+}
+
+#endif  /* !H5_HAVE_FILTER_DEFLATE */

Added: packages/hdf5/branches/upstream/current/release_docs/HISTORY.txt
===================================================================
--- packages/hdf5/branches/upstream/current/release_docs/HISTORY.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/release_docs/HISTORY.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5817 @@
+HDF5 HISTORY
+============
+This file contains history of the HDF5 libraries releases
+
+CONTENTS
+
+18.     Release Information for hdf5-1.6.4
+17.     Release Information for hdf5-1.6.3
+16.     Release Information for hdf5-1.6.2
+15.     Release Information for hdf5-1.6.1
+14.     Release Information for hdf5-1.6.0
+13.     Release Information for hdf5-1.4.5
+12.     Release Information for hdf5-1.4.4
+11.     Release Information for hdf5-1.4.3
+10.     Release Information for hdf5-1.4.2
+9.      Release Information for hdf5-1.4.1
+8.      Release Information for hdf5-1.4.0
+7.      Release Information for hdf5-1.2.2
+6.      Release Information for hdf5-1.2.1
+5.      Release Information for hdf5-1.2.0
+4.      Changes from Release 1.0.0 to Release 1.0.1
+3.      Changes from the Beta 1.0.0 Release to Release 1.0.0
+2.      Changes from the Second Alpha 1.0.0 Release to the Beta 1.0.0 Release
+1.      Changes from the First Alpha 1.0.0 Release to the 
+                Second Alpha 1.0.0 Release
+
+[Search on the string '%%%%' for per-release section breaks.]
+
+%%%%1.6.4%%%%   Release Information for hdf5-1.6.4 (15/March/05)
+
+
+HDF5 version 1.6.4 released on Tue Mar 15 20:38:48 CST 2005
+================================================================================
+
+INTRODUCTION
+============
+This document describes the differences between HDF5-1.6.3 and
+HDF5-1.6.4, and contains information on the platforms tested and
+known problems in HDF5-1.6.4. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+========
+- New Features
+- Support for new platforms and languages
+- Bug Fixes since HDF5-1.6.3
+- Documentation
+- Platforms Tested
+- Supported Configuration Features Summary
+- Known Problems
+
+
+New Features
+============
+    Source code distribution:
+    -------------------------
+
+    The High-Level (HL) C APIs were added to the source code distribution.
+    For HL documentation, see
+    http://hdf.ncsa.uiuc.edu/HDF5/hdf5_hl/doc/RM_hdf5hl.html.
+
+    The HL library, libhdf5_hl.a(so), is built and installed by default. 
+    Use --disable-hl configure flag to disable the HL library.
+
+    Library:
+    --------
+        - We recommend you to use SZIP v2.0 with this release. 
+          For more information see
+          http://hdf.ncsa.uiuc.edu/doc_resource/SZIP/ 
+        - The compound datatype has been enhanced with a new feature of size 
+            adjustment.  The size can be increased and decreased (without
+            cutting the last member).  No API change is involved.  SLU - 
+            2004/10/1
+        - Removed PABLO support.  2005/01/20 EIP 
+
+    Parallel Library:
+    -----------------
+        - Allow compressed, chunked datasets to be read in parallel.
+            QAK - 2004/10/04
+
+    Tools:
+    ------
+	- New tool, h5jam.  See HDF5 Reference Manual.  2004/10/08	      
+
+    F90 API:
+    --------
+          No new features in this release.
+
+    C++ API:
+    --------
+	- Started using C library's reference counting in place of the class
+	  RefCounter, which existed before the C mechanism was available.  
+	  As a result, RefCounter has been removed.  2005/03/12 BMR
+
+
+Support for new platforms, languages and compilers.
+=======================================
+
+    Configuration
+    -------------
+	- Upgraded from GNU autoconf 2.53 to autoconf 2.59.  JML - 2005/01/31
+
+
+Bug Fixes since HDF5-1.6.3 release
+==================================
+
+    Library
+    -------
+        - Fixed a racing condition in MPIPOSIX virtual file drive close
+	  function.  Now all processes must completed the close before any
+	  of them is returned.  This prevents some "faster" processes start
+	  accessing the file for another purpose (e.g., open with truncate)
+	  while other "slower" processes have not closed the same file with
+	  the previous purpose.  AKC - 2005/03/01
+	- H5Tget_member_value calls for enum datatype didn't return correct 
+          value if H5Tenum_valueof was called first.  It's fixed.  SLU - 
+          2005/02/08
+        - For variable-length string, H5Tget_class returned H5T_STRING as its
+          class.  But H5Tdetect_class and H5Tget_member_class considered it
+          as H5T_VLEN.  This is fixed to let all these 3 functions treat it
+          as H5T_STRING.  SLU - 2005/02/08
+        - The byte order of all 1-byte integer types was fixed as
+          little-endian even on a big-endian machine.  It's corrected.
+          SLU - 2005/02/07
+        - Fixed segmentation fault when calling H5Fflush with an attribute that
+          hasn't had a value written to it open.  QAK - 2004/10/18
+        - Backed out support for bitfield and time types in H5Tget_native_type.
+          Leave it to future support.  The function simply returns error 
+          message of "not support" for bitfield and time types. SLU - 2004/10/5
+        - Fixed address check in Core VFL driver to avoid spurious address/size
+          overflows for odd valued addresses and/or sizes.  QAK - 2004/09/27
+        - Fixed problem where chunked datasets were not able to be deleted
+          from a file under certain circumstances.  QAK - 2004/09/27/
+
+    Configuration
+    -------------
+	- IRIX64 MIPSpro compiler of 7.4.x supports C99 features.  Default
+	  to use the 'c99' compiler if available. AKC - 2004/12/13
+	- Intel v8.0 compiler would infinite loop when compiling some test
+	  code with -O3 option.  Changed enable-production default compiler
+	  option to -O2. AKC - 2004/12/06
+	- Long double is assumed to be a supported C data type.  It is a
+	  standard C89 type. AKC - 2004/10/22
+
+    Performance
+    -------------
+    Many changes were made to the library to improve performance,
+    especially for the variable-length datatypes and metadata cache.
+   
+    Tools
+    -----
+        - h5fc and h5c++ work correctly when -c compiler flag
+          is used.  EIP - 2005/03/14        
+	- Fixed h5dump to print attributes data in ASCII if -r option is used.
+	  AKC - 2004/11/18
+        - Fixed space utilization reported in h5ls to correct error 
+          in formula used.  QAK - 2004/10/22
+
+    Documentation 
+    ------------- 
+
+    F90 API
+    -------
+       - On windows, previously Fortran DLL built and tested failed.
+         Now Fortran DLL has been built and tested successfully
+         with Dec Fortran 6.6c or Dec Fortran 6.0.
+
+    C++ API
+    -------
+
+
+Documentation
+=============
+
+    HDF5 Library documentation
+    --------------------------
+    No substantive changes to the structure or types of content in the 
+    HDF5 Library documentation.
+
+    Windows installation documentation
+    ----------------------------------
+    1. On Windows zlib has been updated to 1.2.2. You may find the binary at
+       either http://www.zlib.net/zlib122-dll.zip or
+              ftp://hdf.ncsa.uiuc.edu/lib-external/zlib/bin/windows
+
+    2. Only DLLs of external libraries (zlib and szip) are linked with the 
+       HDF5 Library. We will no longer provide binary to link static library 
+       with HDF5. For details, please check INSTALL_Windows in this directory.
+        
+
+Platforms Tested
+================
+
+    AIX 5.1  (32 and 64-bit)      xlc 6.0.0.6
+                                  xlf 8.1.1.3
+    				  xlC 6.0.0.6
+				  mpcc_r 6.0.0.6
+                                  mpxlf_r 8.1.1.3
+				  xlc 5.0.2.5
+				  xlf 7.1.1.2
+				  xlC 5.0.2.5
+				  mpcc_r 5.0.2.5
+				  mpxlf_r 7.1.1.2
+    AIX 5.2 (32/64 bit)           xlc 6.0.0.8
+                                  xlC 6.0.0.9
+                                  xlf 8.1.1.7
+                                  mpcc_r 6.0.0.8
+                                  mpxlf_r 8.1.1.7
+    AIX 5.2 (32/64 bit, LLNL frost)    xlc 6.0.0.8
+                                  xlC 6.0.0.8
+                                  xlf 8.1.1.7
+                                  mpcc_r 6.0.0.8
+                                  mpxlf_r 8.1.1.7
+    Cray T90 sn7001 10.0.0md      Cray Standard C Version 6.4.0.3
+                                  Cray Fortran Version 3.4.0.0
+    Cray SV1 sn9617 10.0.1.2      Cray Standard C Version 6.6.0.3.6
+                                  Cray Fortran Version 3.6.0.3.1
+    FreeBSD 4.9                   gcc 2.95.4
+                                  g++ 2.95.4
+                                  gcc 3.2.3, 3.3.6, 3.4.4, 4.0.0
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP ANSI C++ B3910B A.03.13
+                                  MPIch 1.2.4
+    IRIX64 6.5 (tesla -64)        MIPSpro cc 7.4.2m
+                                  F90 MIPSpro 7.4.2m
+                                  C++ MIPSpro cc 7.4.2m
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+                                  C++ MIPSpro cc 7.3.1.3m
+				  mpt 1.6
+    Linux 2.4.20-28.7             gcc 2.96
+    (eirene, verbena)             gcc 3.3.2
+                                  PGI compilers (pgcc, pgf90, pgCC) 
+                                  version 5.2-1
+                                  Absoft Fortran compiler v9.0
+                         	  Intel(R) C++ 32-bit Version 8.1
+    				  Intel(R) Fortran 32-bit Version 8.1
+                                  MPIch 1.2.6
+    Linux 2.4.21-268-smp x86_64   gcc 3.3.1 (SuSE Linux, AMD)
+    (mir)                         PGI 5.2-1 C and F90 (with k3-32) 
+                         	  Intel(R) C++ 32-bit Version 8.1
+    				  Intel(R) Fortran 32-bit Version 8.1
+    Linux 2.4.21-sgi303r2 Altix 
+          SMP ia64                Intel(R) C++ Version 8.1
+    (cobalt)                      Intel(R) Fortran Itanium(R) Version 8.1
+                                  SGI MPI
+    OSF1 V5.1 (QSC)               Compaq C V6.5-011 
+                                  HP Fortran V5.5A-3548
+				  Compaq C++ V6.5-036  
+				  MPIX200_64_r13.4
+    OSF1 V5.1 (PSC)               Compaq C V6.5-303 
+                                  HP Fortran V5.5A-3548
+				  Compaq C++ V6.5-040  
+				  MPIX200_64_r13.4
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8 32,46               Sun WorkShop 6 update 2 C 5.3
+     (Solaris 2.8)                Sun WorkShop 6 update 2 Fortran 90
+                                  Sun WorkShop 6 update 2 C++ 5.3
+    SunOS 5.9 32,64               Sun C 5.6 2004/07/15
+     (Solaris 2.9)                Sun Fortran 95 8.0 2004/07/15
+                                  Sun C++ 5.6 2004/07/15
+    TFLOPS r1.0.4 v4.5.2 i386     pgcc Rel 3.1-4i with mpich-1.2.4 with
+                                          local modifications
+    Xeon Linux 2.4.20-31.9smp_perfctr_lustre
+    (tungsten)	                  Intel(R) C++ Version 8.0
+                                  Intel(R) Fortran Compiler Version 8.0
+    IA-64 Linux 2.4.21.SuSE_128.bef1 ia64
+    (NCSA tg-login)               Intel(R) C++ Version 8.0
+                                  Intel(R) Fortran Compiler Version 8.0
+				  mpich-gm-1.2.5..intel
+    Windows XP                    MSVC++.NET
+                                  MSVC++ 6.0
+                                  Compaq Visual Fortran 6.6C
+                                  Intel 8.1 C++
+    MAC OS X                      Darwin 7.5
+                                  gcc and g++ Apple Computer, Inc. GCC 
+                                  version 1175, based on gcc version 3.3.2
+                                  IBM XL Fortran version 8.1 
+                                  Absoft Fortran compiler v8.2
+
+
+Supported Configuration Features Summary
+========================================
+
+Key:   y   = tested and supported
+       n   = not supported or not tested in this release
+       x   = not working in this release
+       dna = does not apply
+       ( ) = footnote appears below second table
+
+Platform                             C        F90    F90      C++  zlib  SZIP
+                                     parallel        parallel      
+Solaris2.8 64-bit                    y        y      y(1)     y    y     y
+Solaris2.8 32-bit                    y        y      y(1)     y    y     y
+Solaris2.9 64-bit                    y(1)     y      y(1)     y    y     y
+Solaris2.9 32-bit                    y(1)     y      y(1)     y    y     y
+IRIX64_6.5 64-bit                    y(2)     y      y        y    y     y
+IRIX64_6.5 32-bit                    y(2)     n      n        n    y     y
+HPUX11.00                            y(1)     y      y        y    y     y
+OSF1 v5.1                            y        y      y        y    y     y
+T90 IEEE                             n        y      n        n    y     n
+SV1                                  y(5)     y      y(5)     n    y     n
+TFLOPS                               y(1)     n      n        n    y     n
+AIX-5.1 & 5.2 32-bit                 y        y      y        y    y     y
+AIX-5.1 & 5.2 64-bit                 y        y      y        y    y     y
+WinXP Visual Studio 6.0              n        y(9)   n        y    y     y
+WinXP .Net                           n        n      n        y(8) y     y
+Mac OS X 10.3                        n        y(10)  n        y    y     y
+FreeBSD 4.9                          y(1)     n      n        y    y     y
+RedHat 7.3  W (3)                    y(1)     y(11)  n        y    y     y
+RedHat 7.3  W Intel (3)              n        y      n        y    y     y
+RedHat 7.3  W PGI (3)                n        y      n        y    y     y
+SuSe x86_64 gcc (3,13)               n        y(12)  n        y    y     y
+SuSe x86_64 icc (3,13)               n        y(14)  n        y    y     y
+Linux 2.4 Xeon C Lustre Intel (3,6)  n        y      n        y    y     y
+Linux 2.4 SuSE ia64 C Intel (3,7)    y        y      y        y    y     y
+Linux 2.4 SGI Altix ia64 Intel (3)   y        y      y        y    y     y
+
+
+Platform                             Shared        static-  Thread-  STREAM- 
+                                     libraries(4)  exec     safe     VFD    
+Solaris2.8 64-bit                    y              x       y        y
+Solaris2.8 32-bit                    y              x       y        y
+Solaris2.9 64-bit                    y              x       y        y
+Solaris2.9 32-bit                    y              x       y        y
+IRIX64_6.5 64-bit                    y              y       y        y
+IRIX64_6.5 32-bit                    y              y       y        y
+HPUX11.00                            y              x       n        y
+OSF1 v5.1                            y              y       n        y
+T90 IEEE                             n              y       n        y
+SV1                                  n              y       n        y
+TFLOPS                               n              y       n        n
+AIX-5.1 & 5.2 32-bit                 n              y       n        y
+AIX-5.1 & 5.2 64-bit                 n              y       n        y
+WinXP Visual Studio 6.0              y              y       n        n
+WinXP .Net                           y              y       n        n
+Mac OS X 10.3                        y              y       n        y
+FreeBSD 4.9                          y              y       y        y
+RedHat 7.3   W (3)                   y              y       y        y
+RedHat 7.3  W  Intel (3)             n              y       n        y
+RedHat 7.3  W  PGI (3)               n              y       n        y
+SuSe x86_64 gcc (3,13)               n              y       n        y
+SuSe x86_64 icc (3,13)               y              y(15)   n        y
+Linux 2.4 Xeon C Lustre Intel (3,6)  y              y       n        y
+Linux 2.4 SuSE ia64 C Intel (3,7)    y              y       n        n
+Linux 2.4 SGI Altix ia64 Intel  (3)  y              y       n        y
+
+
+Compiler versions for each platform are listed in the "Platforms Tested" 
+table found elsewhere in this file (RELEASE.txt).  Unless otherwise noted, 
+compilers used are the system compilers.
+
+Footnotes:  (1) Using mpich 1.2.6
+            (2) Using mpt and mpich 1.2.6.
+            (3) Linux 2.4 with GNU, Intel, and PGI compilers, as indicated.  
+                  W or C indicates workstation or cluster, respectively.
+            (4) Shared libraries are provided only for the C library, 
+                except on Windows where they are provided for C and C++.
+            (5) Using mpt.
+            (6) Linux 2.4.20-31.9.  Xeon cluster with smp_perfctr_lustre 
+                and Intel compilers
+            (7) Linux 2.4.21, SuSE_128.befl.  Ia64 cluster with Intel compilers
+            (8) Intel 8.1
+            (9) Compaq Visual Fortran 6.6C
+           (10) IBM XLF and Absoft
+           (11) PGI, Absoft.  No shared libraries with Absoft; 
+                use '--disable-shared'.
+           (12) PGI and Intel compilers for both C and Fortran
+           (13) AMD Opteron x86_64
+           (14) ifort
+           (15) Yes with C and Fortran, but not with C++
+       FMB/EIP - 2005/03/15
+
+
+Known Problems
+==============
+* test/big fails sometimes with the message "Possible overlap with another
+  region."  The test selects regions randomly, and this error occurs when
+  two regions overlap each other; it is an bug in the test and not in
+  HDF5.  Since the error is triggered by a random situation, it will
+  usually disappear if the test is re-run.
+
+* Cray SV1 fails to correctly convert between floating-point and "long double"
+  for software conversion.  Problem is being investigated. SLU - 2005/03/04
+
+* Newer SGI MIPSpro compilers (version 7.4.x) support C99 features but it
+  has a "guard" statement in stdint.h that will #error and skip the rest
+  of the header file if C99 option is not used explicitly.  Hardset
+  $CC to c99 will resolve the problem. AKC - 2004/12/13
+
+* On IBM AIX systems, parallel HDF5 mode will fail some tests with error
+  messages like "INFO: 0031-XXX ...".  This is from the command poe.
+  Set the environment variable MP_INFOLEVEL to 0 to minimize the messages
+  and run the tests again.
+  The tests may fail with messages like "The socket name is already
+  in use".  HDF5 does not use sockets (except for stream-VFD).  This is
+  due to problems of the poe command trying to set up the debug socket.
+  Check if there are many old /tmp/s.pedb.* staying around.  These are
+  sockets used by the poe command and left behind due to failed commands.
+  Ask your system administrator to clean them out.  Lastly, request IBM
+  to provide a mean to run poe without the debug socket.
+
+* Fortran subroutine h5pget_driver_f doesn't return a correct driver 
+  information.
+
+* There are two h5dump xml tests(h5dump --xml thlink.h5 and 
+  h5dump --xml tmany.h5) failed on windows xp with .NET for debug and 
+  debug dll. Release and Release dll work fine. 
+
+* The h5dump tests may fail to match the expected output on some platforms
+  (e.g. parallel jobs, Windows) where the error messages directed to
+  "stderr" do not appear in the "right order" with output from stdout.
+  This is not an error.
+
+* The stream-vfd test uses ip port 10007 for testing. If another
+  application is already using that port address, the test will hang
+  indefinitely and has to be terminated by the kill command. To try the
+  test again, change the port address in test/stream_test.c to one not
+  being used in the host.
+
+* The --enable-static-exec configure flag fails to compile for Solaris
+  platforms. This is due to the fact that not all of the system
+  libraries on Solaris are available in a static format.
+
+  The --enable-static-exec configure flag also fails to correctly compile
+  on IBM SP2 platform for the serial mode. The parallel mode works fine
+  with this option.
+  
+  It is suggested that you don't use this option on these platforms
+  during configuration.
+
+* The Stream VFD was not tested yet under Windows. It is not supported
+  in the TFLOPS machine.
+
+* The ./dsets tests failed in the TFLOPS machine if the test program,
+  dsets.c, is compiled with the -O option.  The hdf5 library still works
+  correctly with the -O option.  The test program works fine if it is
+  compiled with -O1 or -O0.  Only -O (same as -O2) causes the test
+  program to fail.
+
+* Certain platforms give false negatives when testing h5ls:
+    - Cray T90IEEE give errors during testing when displaying
+      some floating-point values. These are benign differences due to
+      the different precision in the values displayed.
+      h5ls appears to be dumping floating-point numbers correctly.
+
+* Before building HDF5 F90 Library from source on Crays 
+  replace H5Aff.f90, H5Dff.f90 and H5Pff.f90 files in the fortran/src
+  subdirectory in the top level directory with the Cray-specific files
+  from the site:
+  ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/src/patches/
+
+* On some platforms that use Intel and Absoft compilers to build HDF5 fortran 
+  library, compilation may fail for fortranlib_test.f90, fflush1.f90 and 
+  fflush2.f90 complaining about exit subroutine. Comment out the line 
+  IF (total_error .ne. 0) CALL exit (total_error)
+
+* Use --disable-shared configure flag if building with Absoft Fortran
+  compiler
+
+* Information about building with PGI and Intel compilers is available in
+  INSTALL file sections 5.7 and 5.8
+
+* In LANL QSC, the new cc compiler has problems converting small values of
+  long long (absolute values less than 1**-308) to double.  This triggers
+  the test/dtypes to report failure in the
+      Testing random sw long double -> double conversions
+  If -ieee is used, the converted doubles spread over the range 0.0 to 1**-308.
+  If -ieee is not used, the converted double values are mostly 0.0 but
+  occasionally as 1**-308.  This has been reported to the system staff.
+  All other tests have passed.
+
+* The C++ library's tests fails when compiling with PGI C++ compiler.  The
+  workaround until the problem is correctly handled is to use the
+  flag "--instantiate=local" prior to the configure and build steps, as:
+        setenv CXX "pgCC --instantiate=local"  for pgCC 5.02 and higher
+        setenv CXX "pgCC -tlocal" for others
+
+* Fortran release DLL randomly failed with compaq visual fortran 6.6c on
+  windows. 
+
+* Fortran DLL built with Intel 8.1 in .NET environment crushed the compiler,
+  To build Fortran Static library with Intel 8.1 in .NET environment 
+  needs manually setting the project file,
+  please contact to hdfhelp at ncsa.uiuc.edu if you need to build
+  fortran static library with Intel 8.1 with .NET environment.
+
+* On at least one system, (SDSC DataStar), the scheduler (in this case
+  LoadLeveler) sends job status updates to standard error when you run
+  any executable that was compiled with the parallel compilers.
+
+  This causes problems when running "make check" on parallel builds, as
+  many of the tool tests function by saving the output from test runs,
+  and comparing it to an exemplar.
+
+  The best solution is to reconfigure the target system so it no longer
+  inserts the extra text.  However, this may not be practical.
+
+  In such cases, one solution is to "setenv HDF5_Make_Ignore yes" prior to
+  the configure and build.  This will cause "make check" to continue after
+  detecting errors in the tool tests.  However, in the case of SDSC DataStar,
+  it also leaves you with some 150 "failed" tests to examine by hand.
+
+  A second solution is to write a script to run serial tests and filter
+  out the text added by the scheduler.  A sample script used on SDSC
+  DataStar is given below, but you will probably have to customize it
+  for your installation.
+
+  Observe that the basic idea is to insert the script as the first item
+  on the command line which executes the test.  The script then
+  executes the test and filters out the offending text before passing
+  it on.
+
+        #!/bin/csh
+
+        set STDOUT_FILE=~/bin/serial_filter.stdout
+        set STDERR_FILE=~/bin/serial_filter.stderr
+
+        rm -f $STDOUT_FILE $STDERR_FILE
+
+        ($* > $STDOUT_FILE) >& $STDERR_FILE
+
+        set RETURN_VALUE=$status
+
+        cat $STDOUT_FILE
+
+        tail +3 $STDERR_FILE
+
+        exit $RETURN_VALUE
+
+  You get the HDF make files and test scripts to execute your filter script
+  by setting the environment variable "RUNSERIAL" to the full path of the
+  script prior to running configure for parallel builds.  Remember to
+  "unsetenv RUNSERIAL" before running configure for a serial build.
+
+  Note that the RUNSERIAL environment variable exists so that we can
+  can prefix serial runs as necessary on the target system.  On DataStar,
+  no prefix is necessary.  However on an MPICH system, the prefix might
+  have to be set to something like "/usr/local/mpi/bin/mpirun -np 1" to
+  get the serial tests to run at all.
+
+  In such cases, you will have to include the regular prefix in your
+  filter script.
+
+
+%%%%1.6.3%%%%   Release Information for hdf5-1.6.3 (22/September/04)
+
+HDF5 version 1.6.3 released on Wed Sep 22 11:30:11 CDT 2004
+================================================================================
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.6.2 and
+HDF5-1.6.3, and contains information on the platforms tested and
+known problems in HDF5-1.6.3. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+CONTENTS
+
+- New Features
+- Support for new platforms and languages
+- Bug Fixes since HDF5-1.6.2
+- Documentation
+- Platforms Tested
+- Supported Configuration Features Summary
+- Known Problems
+
+
+New Features
+============
+
+    Configuration:
+    --------------
+        - Added some initial support for making purify (or similar memory
+            checking products) happier by initializing buffers to zero and
+            disabling the internal free list code.  To take advantage of this,
+            define 'H5_USING_PURIFY' in your CFLAGS when building the library.
+            QAK - 2004/07/23
+
+        - WINDOWS building,testing and installing improvements
+
+          - On Windows, FORTRAN,C++ and C projects are merged into one zip file, 
+            users can choose an option to build either FORTRAN or C++ or both 
+            with basic C library.For detailed information,
+            please read INSTALL_Windows.txt.
+
+          - On Windows, szip compression library with or without encoder can be easily
+            turned off or on when building HDF5.  For detailed information,
+            please read INSTALL_Windows.txt, especially section V. 
+  
+          - On Windows, an optional procedure for building,testing and installing
+            HDF5 from command line is provided. This procedure is supposed to be
+            convenient for experienced users, please read 
+            INSTALL_windows_From_Command_Line.txt for details.
+
+          - On Windows, an alternative short instruction document for building,
+            testing and installing HDF5 is provided. This instruction is supposed to
+            be convenient for general users, please read 
+            INSTALL_Windows_Short.txt for details.
+
+          - On Windows, h5repack,h5diff,h5ls and h5import tool tests have been added.
+          KY - 2004/9/16
+  
+
+    Library:
+    --------
+        - Modified the way how HDF5 calculates 'pixels_per_scanline' parameter for
+          SZIP compression. Now there is no restriction on the size and shape of the 
+          chunk except that the total number of elements in the chunk cannot be 
+          bigger than 'pixels_per_block' parameter provided by the user.
+                                                                    EIP - 2004/07/21 
+        - HDF5 can now link to SZIP with or without szip's encoder.
+          The new API function H5Zget_filter_info can be used to check
+          szip's status.  Attempting to assign szip to a dataset property
+          list or attempting to write with szip will generate an error if
+          szip's encoder is disabled.  JL/NF - 2004/6/30
+        - SZIP always uses K13 compression.  This flag no longer needs to
+          be set when calling H5Pset_szip.  If the flag for CHIP
+          compression is set, it will be ignored (since the two are mutually
+          exclusive).  JL/NF - 2004/6/30
+        - A new API function H5Fget_name was added.  It returns the name
+          of the file by object(file, group, data set, named data type,
+          attribute) ID.  SLU - 2004/06/29
+        - A new API function H5Fget_filesize was added.  It returns the
+          actual file size of the opened file.  SLU - 2004/06/24
+	- Added option that if $HDF5_DISABLE_VERSION_CHECK is set to 2,
+	  will suppress all library version mismatch warning messages.
+	  AKC - 2004/4/14
+
+    Parallel Library:
+    -----------------
+
+    Tools:
+    ------
+        - h5repack was added to the tools suite. h5repack regenerates an HDF5 file 
+	  from another HDF5 file, optionally applying HDF5 filters (compression) 
+	  and/or chunking to the copied file. The filters options are read from 
+	  the command line. See /doc/html/Tools.html for more details.
+	  PVN - 2004/9/13
+
+        - h5dump includes new features:
+           1) Printing of dataset filters, storage layout and fill value information.
+           2) Print a list of the file contents.
+	   3) Escape non printing characters.
+	   4) Print the content of the boot block.
+	   5) Print array indices with the data (the default).
+	  These options are all switch controlled. See /doc/html/Tools.html for more details.
+	  PVN - 2004/9/13
+	      
+
+    F90 API:
+    --------
+        - added new subroutines:
+                h5fget_filesize_f
+                h5iget_file_id_f
+                h5premove_filter_f
+                h5zget_filter_info_f
+                                         EIP 2004/9/21
+ 
+        - added new h5fget_name_f and h5fget_filesize_f subroutines
+                                         EIP 2004/07/08
+
+    C++ API:
+    --------
+	- Added wrappers for array and variable length datatypes APIs
+	- Added wrappers for newly added APIs from H5T, H5F, and H5I
+	- Added many wrappers that were missing from the H5P API
+	- Added the ability to reference HDF5 objects to these classes:
+	  DataSet, DataType, Group, and H5File (wrappers for H5R APIs)
+	BMR 2004/08/04
+
+
+Support for new platforms, languages and compilers.
+=======================================
+        - Added PGI Fortran support for Linux64 (x86_64) systems
+                            EIP - 2004/08/19
+        - Absoft compiler f95 v9.0 is supported on Linux 2.4 32bit
+                            EIP - 2004/07/29 
+        - HDF5 Fortran APIs are supported on Mac OSX with IBM XL Fortran
+          compiler version 8.1. This is a default compiler.
+        - HDF5 Fortran APIs are supported on MAC OSX with Absoft F95 compiler
+          version 8.2; set F9X environment variable to f95, for example
+          setenv F9X f95
+          Use --disable-shared --enable-static configure flags when Absoft
+          compiler is used.
+                             EIP - 2004/07/27
+
+Bug Fixes since HDF5-1.6.2 release
+==================================
+
+    Library
+    -------
+	- Fixed parallel bug in which some processes attempted collective
+	  I/O while others did independent I/O.  Bug appeared when some
+	  processes used point selections, and others didn't.  JRM - 2004/9/15
+        - Corrected error where dataset region references were written in an
+          incorrect way on Cray machines.  PVN & QAK - 2004/09/13
+        - The H5Tget_native_type now determines the native type for integers
+          based on the precision. This is to avoid cases of wrongly converting        
+          an int to a short in machines that have a short of 8 bytes but with
+	  32bit precision (e.g Cray SV1). PVN - 2004/09/07 
+        - Changed H5Dread() to not overwrite data in an application's buffer
+          with garbage when accessing a chunked dataset with an undefined fill
+          value and an unwritten chunk is uncountered.  QAK - 2004/08/25
+        - Fixed error which could cause a core dump when a type conversion
+          routine was registered after a compound datatype had been
+          converted and then an equivalent compound datatype was converted
+          again.  QAK - 2004/08/07
+        - Fixed memory overwrite when encoding "multi" file driver information
+          for file's superblock.  QAK - 2004/08/05
+        - Fixed obscure bug where a filter which failed during chunk allocation
+          could allow library to write uncompressed data to disk but think
+          the data was compressed.  QAK - 2004/07/29
+        - Fixed bug where I/O to an extendible chunked dataset with zero-sized
+          dimensions would cause library to fail an assertion.
+          QAK - 2004/07/27
+        - Fixed bug where chunked datasets which have filters defined,
+          allocation time set to "late" and whose chunks don't align with
+          the dataspace bounds could have incorrect data stored when
+          overwriting the entire dataset on the first write.  QAK - 2004/07/27
+        - Added check to ensure that dataspaces have extents set. JML-2004/07/26
+        - Fixed bug on some Solaris systems where HDF5 would try to use
+          gettimeofday() when that function didn't work properly.
+          JML - 2004/07/23
+        - Fixed bug in H5Sset_extent_simple where setting maximum size to
+          non-zero, then to zero would cause an error.  JML - 2004/07/20
+        - Allow NULL pointer for buffer parameter to H5Dread & H5Dwrite
+          when not writing data ("none" selection or hyperslab or point
+          selection with no elements defined).  QAK - 2004/07/20
+        - Calling H5Gcreate() on "/" or "." throws an error instead of
+          failing quietly. JML - 2004/07/19
+        - Fixed bug where setting file address size to be very small could
+          trigger an assert if the file grew to more than 64 KB.  Now throws
+          an error and data can be recovered. JL/NF - 2004/07/14
+        - Fixed bug where "resurrecting" a dataset was failing.
+          QAK - 2004/07/14
+        - Fixed bug where incorrect data could be read from a chunked dataset
+          after it was extended.  QAK - 2004/07/12
+        - After compound datatype with variable-length string in the fields
+          is committed to file, the size is messed up when it's read back.
+          Fixed.  SLU - 2004/06/11
+        - Fixed potential file corruption bug when a block of metadata could
+          overlap the end of the internal metadata accumulator buffer and
+          the buffer would be extended correctly, but would incorrectly 
+          change it's starting address.  QAK - 2004/06/09
+        - Opaque datatype with no tag failed for some operations.  Fixed.
+          SLU - 2004/6/3
+        - Fixed potential file corruption bug where dimensions that were
+          too large (a value greater than could be represented in 32-bits)
+          could cause the incorrect amount of space to be allocated in a
+          file for the raw data for the dataset.  QAK - 2004/06/01
+	- Fixed dtypes "sw long double -> double" failure in QSC class
+	  machines.  AKC - 2004/4/16
+
+    Configuration
+    -------------
+        - Fixed the long compile time of H5detect.c when v7.x Intel Compiler
+	  is used with optimization NOT off.  AKC - 2004/05/20
+
+    Performance
+    -------------
+
+    Tools
+    -----
+        - On SGI h5dump displayed only part of the data due to the bug
+          in the system printf; fixed.
+                                             EIP - 2004/09/21 
+    Documentation 
+    ------------- 
+        - Several descriptive errors have been fixed throughout the 
+          documentation, particularly in the reference manual (RM).
+          A selection particularly worthy of note would be these: 
+        - The H5Pset_szip description in the RM has been expanded and
+          corrected to facilitate use of SZIP compression.
+        - A note has been added to the H5Dcreate description that an
+          unexplained failure is likely to be due to a property list error 
+          that is detected only at the time of dataset creation.
+        -
+        FMB - 2004/09/21
+
+    F90 API
+    -------
+    
+    Fortran functions h5dwrite/read_f and h5awrite/read_f do not
+    accept dims parameter of INTEGER type anymore. Code was removed.
+                                                    2004/04/15
+    C++ API
+    -------
+	- H5::Exception's and its subclasses' constructors that were 
+	  overloaded to take char pointers are removed and constructors
+	  that passed in reference of 'string' are changed to pass 
+	  by value.  In addition, the default value of the data member
+	  H5::Exception::detailMessage is changed from 0/NULL to 
+	  DEFAULT_MSG ("No detailed information provided".)
+	- Prototype for DSetCreatPropList::setLayout is changed: 1st parameter
+          is removed because it was there only by mistake.
+	BMR 2004/08/04
+
+Documentation
+=============
+    HDF5 Library documentation
+    --------------------------
+        - HDF5 C++ API Reference Manual
+          This document has been added to the HDF5 document set.  
+          The predecessor document, "HDF5 C++ Interfaces," has been removed.
+        - HDF5 C++ API Design Specification
+          A first draft of this document has been added to the HDF5 document 
+          set.  The draft has been posted on the HDF5 website and a link 
+          has been added to the HDF5 documents index (index.html at the top 
+          level of the document set).
+        - Parallel HDF5
+          In prior releases, the HDF5 document set included two parallel
+          HDF5 documents.  Those documents have been deleted and the 
+          HDF5 documents index (index.html) now links to a "Parallel HDF5" 
+          page on the HDF5 website (http://hdf.ncsa.uiuc.edu/HDF5/PHDF5/).
+        - HDF5 High Level APIs
+          Links to the HDF5 High Level APIs and to the HDF5 High Level 
+          Reference Manual have been added to the HDF5 documents index
+          (index.html).
+        - HDF5 Reference Manual
+          Tools: h5repack -- A description of the new h5repack tool has been 
+              added to the Tools page.
+          Tools: h5dump -- Several new options have been added to h5dump.
+          New functions -- All new functions have been added to the RM.
+          API changes -- Relevant function descriptions have been updated in
+              instances where programming interfaces have changed. 
+        FMB - 2004/09/21
+
+    Windows installation documentation
+    ----------------------------------
+        -  INSTALL_Windows.txt has been enhanced to include instructions building 
+           HDF5 with FORTRAN and C++. 
+        -  Two optional installation documents have been added. They are
+           INSTALL_Windows_Short.txt and INSTALL_Windows_From_Command_Line.txt.
+           INSTALL_Windows_Short.txt is supposed to help general users who
+           only want to build,test and install HDF5 in a quick way.
+           INSTALL_Windows_From_Command_Line.txt is supposed to help users who
+           would like to compile,test and install HDF5 in command line environment.
+        -  INSTALL_Windows_withcpp.txt and INSTALL_Windows_withF90.txt became
+           obsolete. Files are deleted from the release_docs directory.
+        KY 2004/09/16, EIP 2004/9/21
+        
+
+
+Platforms Tested
+================
+
+    AIX 5.1  (32 and 64-bit)      xlc 6.0.0.6
+                                  xlf 8.1.1.3
+    				  xlC 6.0.0.6
+				  mpcc_r 6.0.0.6
+                                  mpxlf_r 8.1.1.3
+				  xlc 5.0.2.5
+				  xlf 7.1.1.2
+				  xlC 5.0.2.5
+				  mpcc_r 5.0.2.5
+				  mpxlf_r 7.1.1.2
+    AIX 5.2                       xlc 6.0.0.8
+                                  xlC 6.0.0.8
+                                  xlf 8.1.1.6
+                                  mpcc_r 6.0.0.8
+                                  mpxlf_r 8.1.1.6
+    Cray T90 sn7001 10.0.0md      Cray Standard C Version 6.4.0.3
+                                  Cray Fortran Version 3.4.0.0
+    Cray T3E sn6606 2.0.6.08      Cray Standard C Version 6.6.0.3
+                                  Cray Fortran Version 3.6.0.3
+    Cray SV1 sn9617 10.0.1.2      Cray Standard C Version 6.6.0.3.6
+                                  Cray Fortran Version 3.6.0.3.1
+    FreeBSD 4.9                   gcc 2.95.4
+                                  g++ 2.95.4
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP ANSI C++ B3910B A.03.13
+                                  MPIch 1.2.4
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+                                  C++ MIPSpro cc 7.3.1.3m
+				  mpt 1.6
+    Linux 2.4.18                  gcc 2.96, 3.3.2
+                                  g++ 3.3.2
+                                  Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Compiler Version 7.1
+                                  PGI compilers (pgcc, pgf90, pgCC) version 5.0-2
+                                  MPIch 1.2.4
+                                  Absoft Fortran compiler v9.0
+    Linux 2.4.20-8                gcc 3.3.2
+                                  PGI compilers (pgcc, pgf90, pgCC) version 5.0-2
+                                  MPIch 1.2.4
+    Linux 2.4.21-2.9.5ws #3       gcc 3.2.3 (Red Hat Linux 3.2.3-16)
+          SMP x86_64              g++ 3.2.3
+    Linux 2.4.21-4.ELsmp	  Intel(R) C++ 32-bit Version 8.0
+    				  Intel(R) Fortran 32-bit Version 8.0
+				  gcc 3.4.0
+				  MPICH 1..5.2 Inmel 8.0
+    Linux 2.4.19-SMP  x86_64      gcc (GCC) 3.2.2 (SuSE Linux)
+                                  g++ 3.2.2
+    Linux 2.6.4-52smp x86_64      gcc 3.3.3 (SuSE Linux 9.1 AMD64))
+                                  PGI 5.2-1 C and F90 
+
+    Linux 2.4.21-sgi Altix 
+          SMP ia64                Intel(R) C++ Version 8.0
+                                  Intel(R) Fortran Itanium(R) Version 8.0
+                                  SGI MPI
+    OSF1 V5.1                     Compaq C V6.5-303 
+                                  HP Fortran V5.5A-3548
+				  Compaq C++ V6.5-040  
+				  MPI_64bit_R13
+    SunOS 5.7(32 and 64 bit)      WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                WorkShop Compilers 5.0 98/12/15 C++ 5.0 
+                                  WorkShop Compilers 5.0 98/10/25 
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8(32 and 64 bit)      Sun WorkShop 6 update 2 C 5.3
+     (Solaris 2.8)                Sun WorkShop 6 update 2 Fortran 90
+                                  Sun WorkShop 6 update 2 C++ 5.3
+    TFLOPS r1.0.4 v4.4.3 i386     pgcc Rel 3.1-4i with mpich-1.2.4 with
+                                          local modifications
+    IA-32 Linux 2.4.18            gcc 2.96
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+
+    Xeon Linux 2.4.20-31.9smp_perfctr_lustre
+	                          Intel(R) C++ Version 8.0
+                                  Intel(R) Fortran Compiler Version 8.0
+                                  
+    IA-64 Linux 2.4.16 ia64       gcc version 3.0.4
+                                  Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Compiler Version 7.1
+
+    IA-64 Linux 2.4.21.SuSE_128.bef1 ia64
+                                  Intel(R) C++ Version 8.0
+                                  Intel(R) Fortran Compiler Version 8.0
+				  mpich-gm-1.2.5..intel
+
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+                                  MSVC++ .NET
+                                  DEC Visual Fortran 6.0
+                                  Intel C and F90 compilers version 7.1
+				  Code Warrior 8.0
+    Windows XP                    MSVC++.NET
+                                  MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+
+    MAC OS X                      Darwin 7.5
+                                  gcc and g++ Apple Computer, Inc. GCC 
+                                  version 1175, based on gcc version 3.3.2
+                                  IBM XL Fortran version 8.1 
+                                  Absoft Fortran compiler v8.2
+                                  
+
+
+Supported Configuration Features Summary
+========================================
+
+Key:   y = tested and supported
+       n = not supported or not tested in this release
+       x = not working in this release
+       dna = does not apply
+       ( ) = footnote appears below second table
+
+Platform                             C        F90    F90      C++  zlib  SZIP
+                                     parallel        parallel      
+Solaris2.7 64-bit                    y (1)    y      y (1)    y    y     y
+Solaris2.7 32-bit                    y (1)    y      y (1)    y    y     y
+Solaris2.8 64-bit                    y (1)    y      y (1)    y    y     y
+Solaris2.8 32-bit                    y        y      y (1)    y    y     y
+IRIX64_6.5 64-bit                    y (2)    y      y        y    y     y
+IRIX64_6.5 32-bit                    y (2)    n      n        n    y     y
+HPUX11.00                            y (1)    y      y        y    y     y
+OSF1 v5.1                            y        y      y        y    y     y
+T90 IEEE                             n        y      n        n    y     n
+T3E                                  y (5)    y      y (5)    n    y     n
+SV1                                  y (5)    y      y (5)    n    y     n
+TFLOPS                               y (1)    n      n        n    y     n
+AIX-5.1 & 5.2 32-bit                 y        y      y        y    y     y
+AIX-5.1 & 5.2 64-bit                 y        y      y        y    y     y
+WinXP Visual Studio 6.0              n        y (9)  n        y    y     y
+WinXP .Net                           n        n      n        y    y     y
+WinXP Code Warrior                   n        n      n        n    y     y
+Win2000 Visual Studio 6.0            n        y (10) n        y    y     y
+Win2000 Visual Studio Intel (6)      n        y      n        y    y     y
+Win2000 .Net                         n        n      n        y    y     y
+Mac OS X 10.3                        n        y (11) n        y    y     y
+FreeBSD 4.9                          y (1)    n      n        y    y     y
+RedHat 7   W        (3)              y (1)    y (12) n        y    y     y
+RedHat 7.3  W Intel (3)              n        y      n        y    y     y
+RedHat 7.3  W PGI   (3)              n        y      n        y    y     y
+RedHat 8 & SuSe x86_64 gcc     (3)   n        y (13) n        y    y     y
+Linux 2.4 Xeon C Lustre Intel (3,7)  n        y      n        y    y     y
+Linux 2.4 SuSE ia64 C   Intel (3,8)  y        y      y        y    y     y
+Linux 2.4 SGI Altix ia64 Intel (3)   y        y      y        y    y     y
+
+
+Platform                             Shared         static-  Thread-  STREAM- 
+                                     libraries (4)  exec     safe     VFD    
+Solaris2.7 64-bit                    y              x        y        y
+Solaris2.7 32-bit                    y              x        y        y
+Solaris2.8 64-bit                    y              x        y        y
+Solaris2.8 32-bit                    y              x        y        y
+IRIX64_6.5 64-bit                    y              y        y        y
+IRIX64_6.5 32-bit                    y              y        y        y
+HPUX11.00                            y              x        n        y
+OSF1 v5.1                            y              y        n        y
+T90 IEEE                             n              y        n        y
+T3E                                  n              y        n        y
+SV1                                  n              y        n        y
+TFLOPS                               n              y        n        n
+AIX-5.1 & 5.2 32-bit                 n              y        n        y
+AIX-5.1 & 5.2 64-bit                 n              y        n        y
+WinXP Visual Studio 6.0              y              y        n        n
+WinXP .Net                           y              y        n        n
+WinXP Code Warrior                   n              y        n        n
+Win2000 Visual Studio 6.0            y              y        n        n
+Win2000 Visual Studio Intel (6)      y              y        n        n
+Win2000 .Net                         y              y        n        n
+Mac OS X 10.3                        y              y        n        y
+FreeBSD 4.9                          y              y        y        y
+RedHat 7    W       (3)              y              y        y        y
+RedHat 7.3  W Intel (3)              n              y        n        y
+RedHat 7.3  W PGI   (3)              n              y        n        y
+RedHat 8 & SuSe x86_64 gcc     (3)   n              y        n        y
+Linux 2.4 Xeon C Lustre Intel (3,7)  y              y        n        y
+Linux 2.4 SuSE ia64 C Intel   (3,8)  y              y        n        n
+Linux 2.4 SGI Altix ia64 Intel (3)   y              y        n        y
+
+
+
+Compiler versions for each platform are listed in the "Platforms Tested" 
+table found elsewhere in this file (RELEASE.txt).  Unless otherwise noted, 
+compilers used are the system compilers.
+
+Footnotes:  (1) Using mpich 1.2.4
+            (2) Using mpt and mpich 1.2.4
+            (3) Linux 2.4 with GNU, Intel, and PGI compilers, as indicated  
+                W or C indicates workstation or cluster, respectively
+            (4) Shared libraries are provided only for the C library, 
+                except on Windows where they are provided for C and C++
+            (5) Using mpt
+            (6) Intel 7.1 compilers in Visual Studio 6.0 environment
+            (7) Linux 2.4.20-31.9.  Xeon cluster with smp_perfctr_lustre 
+                and Intel compilers
+            (8) Linux 2.4.21, SuSE_128.befl.  Ia64 cluster with Intel compilers
+            (9) DEC Visual Fortran 6.0 and Intel 7.1
+            (10) DEC Visual Fortran 6.0
+            (11) IBM XLF and Absoft
+            (12) PGI, Absoft
+            (13) PGI
+       FMB/EIP - 2004/09/21
+
+
+
+Known Problems
+==============
+* h5fc and h5c++ compilation scripts have a bug: object files (*.o) cannot be
+  created when source code is compiled using h5fc or h5c++. We will provide
+  a fix. Please check ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/src/patches/ 
+  for the patches.
+
+* Fortran subroutine h5pget_driver_f doesn't return a correct driver information.
+
+* There are two h5dump xml tests(h5dump --xml thlink.h5 and h5dump --xml tmany.h5)
+  failed on windows xp with .NET for debug and debug dll. Release and Release
+  dll work fine. 
+
+* The h5dump tests may fail to match the expected output on some platforms
+  (e.g. parallel jobs, Windows) where the error messages directed to
+  "stderr" do not appear in the "right order" with output from stdout.
+  This is not an error.
+
+* The stream-vfd test uses ip port 10007 for testing. If another
+  application is already using that port address, the test will hang
+  indefinitely and has to be terminated by the kill command. To try the
+  test again, change the port address in test/stream_test.c to one not
+  being used in the host.
+
+* The --enable-static-exec configure flag fails to compile for Solaris
+  platforms. This is due to the fact that not all of the system
+  libraries on Solaris are available in a static format.
+
+  The --enable-static-exec configure flag also fails to correctly compile
+  on IBM SP2 platform for the serial mode. The parallel mode works fine
+  with this option.
+  
+  It is suggested that you don't use this option on these platforms
+  during configuration.
+
+* The Stream VFD was not tested yet under Windows. It is not supported
+  in the TFLOPS machine.
+
+* The ./dsets tests failed in the TFLOPS machine if the test program,
+  dsets.c, is compiled with the -O option.  The hdf5 library still works
+  correctly with the -O option.  The test program works fine if it is
+  compiled with -O1 or -O0.  Only -O (same as -O2) causes the test
+  program to fail.
+
+* Certain platforms give false negatives when testing h5ls:
+    - Cray J90 and Cray T90IEEE give errors during testing when displaying
+      some floating-point values. These are benign differences due to
+      the different precision in the values displayed and h5ls appears to
+      be dumping floating-point numbers correctly.
+
+* Before building HDF5 F90 Library from source on Crays 
+  replace H5Aff.f90, H5Dff.f90 and H5Pff.f90 files in the fortran/src
+  subdirectory in the top level directory with the Cray-specific files
+  from the site:
+  ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/src/patches/
+
+* On some platforms that use Intel and Absoft compilers to build HDF5 fortran library,
+  compilation may fail for fortranlib_test.f90, fflush1.f90 and fflush2.f90
+  complaining about exit subroutine. Comment out the line 
+  IF (total_error .ne. 0) CALL exit (total_error)
+
+* On IA32 and IA64 systems, if you use a compiler other than GCC (such as
+  Intel's ecc or icc compilers), you will need to modify the generated
+  "libtool" program after configuration is finished. On or around line 104 of
+  the libtool file, there are lines which look like:
+
+      # How to pass a linker flag through the compiler.
+      wl=""
+
+  change these lines to this:
+
+      # How to pass a linker flag through the compiler.
+      wl="-Wl,"
+
+  UPDATE: This is now done automatically by the configure script. However, if
+  you still experience a problem, you may want to check this line in the
+  libtool file and make sure that it has the correct value.
+
+* Information about building with PGI and Intel compilers is available in
+  INSTALL file sections 5.7 and 5.8
+
+* In LANL QSC, the new cc compiler has problems converting small values of
+  long long (absolute values less than 1**-308) to double.  This triggers
+  the test/dtypes to report failure in the
+      Testing random sw long double -> double conversions
+  If -ieee is used, the converted doubles spread over the range 0.0 to 1**-308.
+  If -ieee is not used, the converted double values are mostly 0.0 but
+  occasionally as 1**-308.  This has been reported to the system staff.
+  All other tests have passed.
+
+* On at least one system, (SDSC DataStar), the scheduler (in this case
+  LoadLeveler) sends job status updates to standard error when you run
+  any executable that was compiled with the parallel compilers.
+
+  This causes problems when running "make check" on parallel builds, as
+  many of the tool tests function by saving the output from test runs,
+  and comparing it to an exemplar.
+
+  The best solution is to reconfigure the target system so it no longer
+  inserts the extra text.  However, this may not be practical.
+
+  In such cases, one solution is to "setenv HDF5_Make_Ignore yes" prior to
+  the configure and build.  This will cause "make check" to continue after
+  detecting errors in the tool tests.  However, in the case of SDSC DataStar,
+  it also leaves you with some 150 "failed" tests to examine by hand.
+
+  A second solution is to write a script to run serial tests and filter
+  out the text added by the scheduler.  A sample script used on SDSC
+  DataStar is given below, but you will probably have to customize it
+  for your installation.
+
+  Observe that the basic idea is to insert the script as the first item
+  on the command line which executes the test.  The script then
+  executes the test and filters out the offending text before passing
+  it on.
+
+        #!/bin/csh
+
+        set STDOUT_FILE=~/bin/serial_filter.stdout
+        set STDERR_FILE=~/bin/serial_filter.stderr
+
+        rm -f $STDOUT_FILE $STDERR_FILE
+
+        ($* > $STDOUT_FILE) >& $STDERR_FILE
+
+        set RETURN_VALUE=$status
+
+        cat $STDOUT_FILE
+
+        tail +3 $STDERR_FILE
+
+        exit $RETURN_VALUE
+
+  You get the HDF make files and test scripts to execute your filter script
+  by setting the environment variable "RUNSERIAL" to the full path of the
+  script prior to running configure for parallel builds.  Remember to
+  "unsetenv RUNSERIAL" before running configure for a serial build.
+
+  Note that the RUNSERIAL environment variable exists so that we can
+  can prefix serial runs as necessary on the target system.  On DataStar,
+  no prefix is necessary.  However on an MPICH system, the prefix might
+  have to be set to something like "/usr/local/mpi/bin/mpirun -np 1" to
+  get the serial tests to run at all.
+
+  In such cases, you will have to include the regular prefix in your
+  filter script.
+
+%%%%1.6.2%%%%   Release Information for hdf5-1.6.2 (12/February/04)
+
+HDF5 version 1.6.2 released on Thu Feb 12 14:18:13 CST 2004
+================================================================================
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.6.1 and
+HDF5-1.6.2, and contains information on the platforms tested and
+known problems in HDF5-1.6.2. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+CONTENTS
+
+- New Features
+- Support for new platforms and languages
+- Bug Fixes since HDF5-1.6.1
+- Documentation
+- Platforms Tested
+- Supported Configuration Features Summary
+- Known Problems
+
+
+New Features
+============
+
+    Configuration:
+    --------------
+        - Default of $prefix is changed to $PWD/hdf5 so that multiple
+	  builds using --srcdir is possible in the same machine.
+	  AKC - 2003/12/1
+
+    Library:
+    --------
+        - Added H5Iget_ref, H5Iinc_ref and H5Idec_ref routines to the C
+          library and the FORTRAN wrapper.  See the reference manual for a
+          full description of these new routines.  QAK - 2003/12/11
+
+    Parallel Library:
+    -----------------
+	- The parallel tests in testpar/ now provides different levels of
+	  verbosity via the '-v' option.  The default is less verbose
+	  than before.  AKC - 2004/01/23
+        - Added parallel test, test_mpio_1wMr, which tests if the
+          underlaying parallel I/O system is conforming to the POSIX
+          write/read requirement. This version includes options of using
+          atomicity and file-sync.  AKC - 2003/11/27
+
+    Tools:
+    ------
+        - Added option -showconfig to compiler tools (h5cc,h5fc,h5c++).
+	  AKC - 2004/01/08
+	- Install the "h5cc" and "h5fc" tools as "h5pcc" and "h5pfc"
+	  respectively if library is built in parallel mode.  AKC - 2004/01/07
+        - Added metadata benchmark (perform/perf_meta).  SLU - 2003/10/03
+
+    C++ API:
+    --------
+
+
+Support for new platforms, languages and compilers.
+=======================================
+        - HDF5 Fortran APIs are supported on MAC OSX with IBM XL Fortran compiler
+          version 8.1 Beta  
+          Use --disbale-shared --enable-static flags with configure when 
+          building HDF5 Fortran Library on MAC OSX.
+        - C and C++ Libraries are available for Linux64 RH8
+        - C, C++ and Fortran sequential Libraries, and C and Fortran parallel
+          Libraries are available for Altix (Linux ia64)
+
+Bug Fixes since HDF5-1.6.1 release
+==================================
+
+    Library
+    -------
+        - Fixed problem with H5Tget_native_type() not handling opaque fields
+            correctly.  QAK - 2004/01/31
+        - Fixed several errors in B-tree deletion code which could cause a
+            B-tree (used with groups and chunked datasets) to become corrupt
+            with the right sequence of deleted objects.  QAK - 2004/01/19
+        - Fixed small internal memory leaks of fill-value information.
+            QAK - 2004/01/13
+        - Fixed bug that caused variable-length datatypes (strings or sequences)
+            used for datasets in files with objects that were unlinked to
+            fail to be read/written to a file.  QAK - 2004/01/13
+        - Detect situation where szip 'pixels per block' is larger than the
+            fastest changing dimension of a dataset's chunk size and disallow
+            this (due to limits in szip library).  QAK - 2003/12/31
+        - Fixed bug with flattened hyperslab selections that would generate
+            incorrect hyperslab information with certain high-dimensionality
+            combinations of start/stride/count/block information.
+            QAK - 2003/12/31
+        - Fixed bug with variable-length datatypes used in compound datatypes.
+            SLU - 2003/12/29
+        - Fixed bug in parallel I/O routines that would cause reads from
+            "short datasets" (datasets which were only partially written out)
+            to return invalid data.  QAK & AKC - 2003/12/19
+        - Fixed bug where scalar dataspaces for attributes were reporting as
+            simple dataspaces.  QAK - 2003/12/13
+        - Fixed problem with selection offsets of hyperslab selections in
+            chunked datasets causing the library to go into an infinite loop.
+            QAK - 2003/12/13
+        - Fixed H5Giterate to avoid re-using index parameter after iteration
+            callback has been called (allows iteration callback to modify the
+            index parameter itself).  QAK - 2003/12/06
+        - Fixed various floating-point conversion problems, including a
+            change which could corrupt data when converting from double->float.
+            QAK - 2003/11/24
+        - Changed "single process" metadata writing in library to collective
+            I/O by all processes, in order to guarantee correct data being
+            written with MPI-I/O.  QAK - 2003/11/20
+        - Fixed problems with fill values and variable-length types and also
+            I/O on VL values that were set to NULL.  QAK - 2003/11/08
+        - Fixed problems with MPI datatypes that caused ASCI Q machine to
+            hang.  QAK - 2003/10/28
+        - Removed HDF5_MPI_PREFER_DERIVED_TYPES environment variable support,
+            since it had no benefit.  QAK - 2003/10/28
+        - Single hyperslab selections (which were set with only one call to
+            H5Sselect_hyperslab) that had dimensions that could be "flattened"
+            but were interspersed with dimensions that could not be flattened
+            were not correctly handled, causing core dumps.  QAK - 2003/10/25
+        - Avoid metadata cache from preempting current dataset object header
+            when looking up information about the named datatype that the
+            dataset uses.  QAK - 2003/10/20
+
+    Configuration
+    -------------
+        - Parallel I/O with the MPI-I/O driver will no longer work if the
+            filesystem is not POSIX compliant.  The "HDF5_MPI_1_METAWRITE"
+            environment variable has been removed.  QAK - 2004/01/30
+
+    Performance
+    -------------
+        - More optimizations to inner loops of datatype conversions for
+            integers and floats which give a 10-50% speedup.  QAK - 2003/11/07
+        - Hoisted invariant 'if/else's out of inner datatype conversion loop for
+            integer and floating-point values, giving about a 20% speedup.
+            QAK - 2003/10/20
+
+    Tools
+    -----
+	- Fixed h5redeploy which sometimes complain too many argument for the
+	  test command. (The complain did not hinder the h5redploy to proceed
+	  correctly.) AKC - 2003/11/03
+
+    Documentation 
+    ------------- 
+
+
+Documentation
+=============
+
+
+
+Platforms Tested
+================
+
+    AIX 5.1  (32 and 64-bit)      xlc 6.0.0.2
+                                  xlf 8.1.0.3
+    				  xlC 6.0.0.4
+				  xlc 5.0.2.5
+				  xlf 7.1.1.2
+				  xlC 5.0.2.5
+				  mpcc_r 5.0.2.5
+				  mpxlf_r 7.1.1.2
+                                  poe 3.2.0.10
+    Cray T3E sn6606 2.0.6.08      Cray Standard C Version 6.6.0.2
+                                  Cray Fortran Version 3.6.0.2
+    Cray SV1 sn9617 10.0.1.2      Cray Standard C Version 6.6.0.2
+                                  Cray Fortran Version 3.6.0.2
+    Cray T90IEEE 10.0.0md         Cray Standard C Version 6.4.0.3
+                                  Cray Fortran Version 3.4.0.0
+    FreeBSD 4.9                   gcc 2.95.4
+                                  g++ 2.95.4
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP ANSI C++ B3910B A.03.13
+                                  MPIch 1.2.4
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+                                  C++ MIPSpro cc 7.3.1.3m
+    Linux 2.4.18                  gcc 2.96, 3.3.2
+                                  g++ 3.3.2
+                                  Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Compiler Version 7.1
+                                  PGI compilers (pgcc, pgf90, pgCC) version 5.0-2
+                                  MPIch 1.2.4
+    Linux 2.4.20-8                gcc 3.3.2
+                                  PGI compilers (pgcc, pgf90, pgCC) version 5.0-2
+                                  MPIch 1.2.4
+    Linux 2.4.21-2.9.5ws #3       gcc 3.2.3 (Red Hat Linux 3.2.3-16)
+          SMP x86_64              g++ 3.2.3
+    Linux 2.4.19-SMP  x86_64      gcc (GCC) 3.2.2 (SuSE Linux)
+                                  g++ 3.2.2
+
+    Linux 2.4.21-sgi Altix 
+          SMP ia64                Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Itanium(R) Version 7.1
+                                  SGI MPI
+    OSF1 V5.1                     Compaq C V6.4-014
+				  Compaq Fortran V5.5-2602
+				  Compaq Fortran V5.5-1877
+				  Compaq C++ V6.5-033
+				  Compaq C++ V6.5-030
+				  MPI_64bit_R13
+    SunOS 5.7(32 and 64 bit)      WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                WorkShop Compilers 5.0 98/12/15 C++ 5.0 
+                                  WorkShop Compilers 5.0 98/10/25 
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8(32 and 64 bit)      Sun WorkShop 6 update 2 C 5.3
+     (Solaris 2.8)                Sun WorkShop 6 update 2 Fortran 90
+                                  Sun WorkShop 6 update 2 C++ 5.3
+    TFLOPS r1.0.4 v4.4.2 i386     pgcc Rel 3.1-4i with mpich-1.2.4 with
+                                          local modifications
+    IA-32 Linux 2.4.18            gcc 2.96
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+                                  
+    IA-64 Linux 2.4.16 ia64       gcc version 3.0.4
+                                  Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Compiler Version 7.1
+
+    IA-64 Linux 2.4.21.SuSE_128.bef1 ia64
+                                  Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Compiler Version 7.1
+				  mpich-gm-1.2.5..intel
+
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+                                  Intel C and F90 compilers version 7.1
+				  Code Warrior 8.0
+    Windows XP                    MSVC++.NET
+    MAC OS X                      Darwin 7.2
+                                  gcc and g++ Apple Computer, Inc. GCC 
+                                  version 1175, based on gcc version 3.3.2
+                                  IBM XL Fortran version 8.1 Beta
+                                  
+
+
+Supported Configuration Features Summary
+========================================
+
+Key:   y = tested and supported
+       n = not supported or not tested in this release
+       x = not working in this release
+       dna = does not apply
+       ( ) = footnote appears below second table
+
+Platform                    C   C        F90    F90      C++  Shared        zlib
+                                parallel        parallel      libraries (4)
+Solaris2.7 64-bit           y   y (1)    y      y (1)    y    y             y
+Solaris2.7 32-bit           y   y (1)    y      y (1)    y    y             y
+Solaris2.8 64-bit           y   y (1)    y      y (1)    y    y             y
+Solaris2.8 32-bit           y   y        y      y (1)    y    y             y
+IRIX64_6.5 64-bit           y   y (2)    y      y        y    y             y
+IRIX64_6.5 32-bit           y   y (2)    n      n        n    y             y
+HPUX11.00                   y   y (1)    y      y        y    y             y
+OSF1 v5.1                   y   y        y      y        y    y             y
+T3E                         y   y (5)    y      y (5)    n    n             y
+SV1                         y   y (5)    y      y (5)    n    n             y
+T90 IEEE                    y   y (5)    y      y (5)    n    n             y
+TFLOPS                      n   y (1)    n      n        n    n             y
+AIX-5.1 32-bit              y   y        y      y        y    n             y
+AIX-5.1 64-bit              y   y        y      y        y    n             y
+WinXP Visual Studio (7)     y   n        n      n        y    y             y
+WinXP Intel                 y   n        n      n        y    y             y
+WinXP CW                    y   n        n      n        n    n             y
+Win2000 Visual Studio       y   n        y      n        y    y             y
+Win2000 Intel               y   n        y      n        y    y             y
+Mac OS X 10.3               y   n        y      n        y    y             y
+FreeBSD 4.9                 y   y (1)    n      n        y    y             y
+RedHat 7, 8 & 9 ia32        y   y (1)    y(PGI) n        y    y             y
+    W gcc (3)
+RedHat 7.3 ia32 W Intel (3) y   n        y      n        y    n             y
+RedHat 7.3 ia32 W PGI (3)   y   n        y      n        y    n             y
+RedHat 7 ia32 C Intel (3)   y   n        y      n        y    n             y
+RedHat 7.1 ia64 C Intel (3) y   n        y      n        y    n             y
+RedHat 8 & SuSe x86_64      y   n        n      n        y    n             y
+    gcc (3)
+Linux 2.4 SGI Altix ia64    y   n        y      n        y    y             y
+    Intel (3) 
+
+
+Platform                    static-  Thread-  SZIP  GASS  STREAM-  High-  H4/H5 
+                            exec     safe                 VFD      level  tools
+                                                                   APIs   (6)
+Solaris2.7 64-bit           x        y        y     n     y        y      n
+Solaris2.7 32-bit           x        y        y     n     y        y      y
+Solaris2.8 64-bit           x        y        y     n     y        y      n
+Solaris2.8 32-bit           x        y        y     n     y        y      y
+IRIX64_6.5 64-bit           x        y        y     y     y        y      y
+IRIX64_6.5 32-bit           x        y        y     y     y        y      y
+HPUX11.00                   x        n        y     n     y        y      y
+OSF1 v5.1                   y        n        y     n     y        y      y
+T3E                         y        n        n     n     y        y      y
+SV1                         y        n        n     n     y        y      y
+T90 IEEE                    y        n        n     n     y        y      n
+TFLOPS                      y        n        n     n     n        n      n
+AIX-5.1 32-bit              y        n        y     n     y        y      y
+AIX-5.1 64-bit              y        n        y     n     y        y      y
+WinXP Visual Studio         y        n        y     n     n        y      y
+WinXP Intel                 y        n        y     n     n        y      y
+WinXP CW                    y        n        y     n     n        y      y
+Win2000 Visual Studio       y        n        y     n     n        y      y
+Win2000 Intel               y        n        y     n     n        y      y
+Mac OS X 10.3               y        n        y     n     y        y      n
+FreeBSD 4.9                 y        y        y     n     y        y      y
+RedHat 7, 8 & 9 ia32        y        y        y     n     y        y      y
+    W gcc (3)
+RedHat 7.3 ia32 W Intel (3) y        n        y     n     y        n      n
+RedHat 7.3 ia32 W PGI (3)   y        n        y     n     y        n      n
+RedHat 7 ia32 C Intel (3)   y        n        y     n     y        y      y
+RedHat 7.1 ia64 C Intel (3) y        n        y     n     y        y      y
+RedHat 8 & SuSe x86_64      y        n        y     n     y        y      y
+    gcc (3)
+Linux 2.4 SGI Altix ia64    y        n        y     n     y        y      y
+    Intel (3) 
+
+
+Compiler versions for each platform are listed in the "Platforms Tested" 
+table found elsewhere in this file (RELEASE.txt).  Unless otherwise noted, 
+compilers used are the system compilers.
+
+Footnotes:  (1) Using mpich 1.2.4.
+            (2) Using mpt and mpich 1.2.4.
+            (3) Linux 2.4 with GNU, Intel, and PGI compilers, as indicated.  
+                W or C indicates workstation or cluster, respectively.
+            (4) Shared libraries are provided only for the C library, 
+                except on Windows where they are provided for C and C++.
+            (5) Using mpt.
+            (6) Includes the H4toH5 Library and the h4toh5 and h5toh4 
+                utilities.
+
+
+Known Problems
+==============
+* Fortran subroutine h5pget_driver_f doesn't return a correct driver information.
+
+* There are two h5dump xml tests(h5dump --xml thlink.h5 and h5dump --xml tmany.h5)
+  failed on windows xp with .NET for debug and debug dll. Release and Release
+  dll work fine. 
+
+* The h5dump tests may fail to match the expected output on some platforms
+  (e.g. parallel jobs, Windows) where the error messages directed to
+  "stderr" do not appear in the "right order" with output from stdout.
+  This is not an error.
+
+* The stream-vfd test uses ip port 10007 for testing. If another
+  application is already using that port address, the test will hang
+  indefinitely and has to be terminated by the kill command. To try the
+  test again, change the port address in test/stream_test.c to one not
+  being used in the host.
+
+* The --enable-static-exec configure flag fails to compile for Solaris
+  platforms. This is due to the fact that not all of the system
+  libraries on Solaris are available in a static format.
+
+  The --enable-static-exec configure flag also fails to correctly compile
+  on IBM SP2 platform for the serial mode. The parallel mode works fine
+  with this option.
+  
+  It is suggested that you don't use this option on these platforms
+  during configuration.
+
+* The Stream VFD was not tested yet under Windows. It is not supported
+  in the TFLOPS machine.
+
+
+* The ./dsets tests failed in the TFLOPS machine if the test program,
+  dsets.c, is compiled with the -O option.  The hdf5 library still works
+  correctly with the -O option.  The test program works fine if it is
+  compiled with -O1 or -O0.  Only -O (same as -O2) causes the test
+  program to fail.
+
+* Certain platforms give false negatives when testing h5ls:
+    - Cray J90 and Cray T90IEEE give errors during testing when displaying
+      some floating-point values. These are benign differences due to
+      the different precision in the values displayed and h5ls appears to
+      be dumping floating-point numbers correctly.
+
+* Before building HDF5 F90 Library from source on Crays 
+  replace H5Aff.f90, H5Dff.f90 and H5Pff.f90 files in the fortran/src
+  subdirectory in the top level directory with the Cray-specific files
+  from the site:
+  ftp://hdf.ncsa.uiuc.edu/pub/outgoing/hdf5/hdf5-1.6.2/F90_source_for_Crays
+
+* On some platforms that use Intel compilers to build HDF5 fortran library,
+  compilation may fail for fortranlib_test.f90, fflush1.f90 and fflush2.f90
+  complaining about exit subroutine. Comment out the line 
+  IF (total_error .ne. 0) CALL exit (total_error)
+
+* On IA32 and IA64 systems, if you use a compiler other than GCC (such as
+  Intel's ecc or icc compilers), you will need to modify the generated
+  "libtool" program after configuration is finished. On or around line 104 of
+  the libtool file, there are lines which look like:
+
+      # How to pass a linker flag through the compiler.
+      wl=""
+
+  change these lines to this:
+
+      # How to pass a linker flag through the compiler.
+      wl="-Wl,"
+
+  UPDATE: This is now done automatically by the configure script. However, if
+  you still experience a problem, you may want to check this line in the
+  libtool file and make sure that it has the correct value.
+
+* Information about building with PGI and Intel compilers is available in
+  INSTALL file sections 5.7 and 5.8
+
+* In LANL QSC, the new cc compiler has problems converting small values of
+  long long (absolute values less than 1**-308) to double.  This triggers
+  the test/dtypes to report failure in the
+      Testing random sw long double -> double conversions
+  If -ieee is used, the converted doubles spread over the range 0.0 to 1**-308.
+  If -ieee is not used, the converted double values are mostly 0.0 but
+  occassionaly as 1**-308.  This has been reported to the system staff.
+  All other tests have passed.
+
+* On AIX 5.1 when 64-bit parallel C Library is built with zlib configured in,
+  compilation fails for H5Zdeflate.c. To bypass the problem, remove "const"
+  definition in front of H5Z_DEFLATE in H5Zpkg.h line 29.
+
+%%%%1.6.1%%%%   Release Information for hdf5-1.6.1 (16/October/03)
+
+15.  Release information for HDF5 version 1.6.1
+================================================
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.6.0 and
+HDF5-1.6.1, and contains information on the platforms tested and
+known problems in HDF5-1.6.1. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+CONTENTS
+
+- New Features
+- Support for new platforms and languages
+- Bug Fixes since HDF5-1.6.0
+- Documentation
+- Platforms Tested
+- Known Problems
+
+
+New Features
+============
+
+    Configuration:
+    --------------
+
+    Library:
+    --------
+        - Added new fields to the H5G_stat_t for more information about an
+            object's object header.  QAK 2003/10/06
+        - Added new H5Fget_freespace() routine to query the free space in a
+            given file.  QAK 2003/10/06
+
+    Parallel Library:
+    -----------------
+
+    Tools:
+    ------
+
+    C++ API:
+    --------
+        - Added overloaded functions read and write to H5::Attribute.
+          BMR - 2003/04/21
+        - Added an overloaded constructor H5::StrType so the need to separately
+          set the length of the string type can be eliminated. BMR - 2003/04/21
+        - Added overloaded functions read and write to H5::DataSet.
+          BMR - 2003/04/27
+
+        The following items were added but not documented in previous releases:
+
+        - On windows, any application, that uses the C++ API dll, must
+          include the name HDF5CPP_USEDLL in its project setting. (Feb 17, 2002)
+          BMR - 2003/10/10
+        - Added missing default constructor H5::H5File. (Apr 26, 2002)
+          BMR - 2003/10/10
+        - Added new member function H5::DataSet::fillMemBuf per the new C
+          API H5Dfill, which fills the elements in a selection for a memory
+          buffer with a fill value. (May 16, 2002) BMR - 2003/10/10
+        - Added the new member function getMemberIndex to H5::EnumType
+          and H5::CompType to match the new C API H5Tget_member_index.  Given
+          the name of a member of an enumeration or compound datatype, this
+          new function queries the index of the member. (May 16, 2002)
+          BMR - 2003/10/10
+        - Added these member functions to H5::Group per the new C functions
+          H5Gget_num_objs, H5Gget_objname_by_idx and H5Gget_objtype_by_idx:
+          + getNumObjs: Returns the number of objects in the group.
+          + getObjnameByIdx: Retrieves the name of an object in a group,
+                             given an index
+          + getObjTypeByIdx: Returns the type of an object in a group,
+                             given an index
+          (Jan 20, 2003) BMR - 2003/10/10
+
+
+Support for new platforms, languages and compilers.
+=======================================
+         - gcc 3.3.1 is supported on Linux.
+  
+
+Bug Fixes since HDF5-1.6.0 release
+==================================
+
+    Library
+    -------
+        - Fixed incorrect datatype of the third parameter to the Fortran90
+          h5pset(get)_cache_f functions (INTEGER to INTEGER(SIZE_T)) EIP - 2003/10/13
+        - Fixed problems with accessing variable-length data datatypes on
+            Crays.  QAK - 2003/10/10
+        - Fixed potential file corruption bug when too many object header
+            messages (probably attributes, from a user perspective) were
+            inserted into an object header and certain other conditions were
+            met.  QAK - 2003/10/08
+        - Changed implementation of internal ID searching algorithm to avoid
+            O(n) behavior for many common cases.  QAK - 2003/10/06
+        - Allow partial parallel writing to compact datasets.  QAK - 2003/10/06
+        - Correctly create reference to shared datatype in attribute, instead
+            of making a copy of the shared datatype in the attribute.
+            QAK - 2003/10/01
+        - Revert changes which caused files >2GB to fail when created with
+            MPI-I/O file driver on certain platforms.  QAK - 2003/09/16
+        - Allow compound datatypes to grow in size.  SLU - 2003/09/10
+        - Detect if a type is already packed before attempting to pack it
+            again or check if it is locked.  SLU - 2003/09/10
+        - Corrected bug when opening a file twice with read-only permission
+            for one open and then closing the read-only access file ID would
+            generate an error.  QAK - 2003/09/10
+        - Corrected bug in repeated calls to H5Pget_access_plist() which would
+            incorrectly manage reference counts of internal information and
+            eventually blow up.  QAK - 2003/09/02
+        - Return rank of the array datatype on successful call to
+            H5Tget_array_dims().  QAK - 2003/08/30
+        - Corrected bug in H5Tdetect_class which was not correctly detecting
+            datatype classes of fields in nested compound datatypes in some
+            circumstances.  QAK - 2003/08/30
+        - Corrected bug in sieve buffer code which could cause loss of data
+            when a small dataset was created and deleted in quick succession.
+            QAK - 2003/08/27
+        - Corrected bug in H5Gget_objname_by_idx which was not allowing NULL
+            for the name when just querying for the object name's length.
+            QAK - 2003/08/25
+        - Corrected bug in variable-length string handling which could
+            generate a core dump on writing variable-length strings as part
+            of a compound datatype on certain architectures.  QAK - 2003/08/25
+        - Corrected bug in H5Tget_native_type which would incorrectly compute
+            the size of certain compound datatypes and also incorrectly
+            compute the offset of the last field for those compound datatypes.
+            QAK - 2003/08/25
+        - Corrected bug in H5Tget_native_type which would drop string datatype
+            metadata (padding, etc.)  QAK - 2003/08/25
+        - Corrected bugs in H5Gget_num_objs, H5Gget_objname_by_idx and
+            H5Gget_objtype_by_idx to allow them to accept location IDs, not just
+            group IDs.  QAK - 2003/08/21
+        - Corrected bug when using scalar dataspace for memory selection and
+            operating on chunked dataset.  QAK - 2003/08/18
+        - Corrected bugs with multiple '/' characters in names for H5Glink
+            and H5Gunlink.  QAK - 2003/08/16
+        - Corrected bug with user blocks that didn't allow a user block to
+            be inserted in front of a file after the file was created.
+            QAK - 2003/08/13
+        - Corrected errors with using point selections to access data in
+            chunked datasets.  QAK - 2003/07/23
+        - Corrected error with variable-length datatypes and chunked datasets
+            which caused H5Dwrite to fail sometimes.  QAK - 2003/07/19
+        - Modified library and file format to support storing indexed storage
+            (chunked dataset) B-tree's with non-default internal 'K' values.
+            QAK - 2003/07/15
+        - Returned H5T_BKG_TEMP support to library after it was accidentally
+            removed.  QAK - 2003/07/14
+
+    Configuration
+    -------------
+        - Fixed the error that caused "make install" to fail because of the
+            macro definition syntax of "prefix?=..."  AKC - 2003/07/22
+
+    Performance
+    -------------
+
+    Tools
+    -----
+	- Fixed a segmentation fault of h5diff when percentage option is used.
+            AKC - 2003/08/27
+        - Switched away from tools using internal "fixtype" function(s) to use
+            H5Tget_native_type() internally.  QAK - 2003/08/25
+
+    Documentation 
+    ------------- 
+        - Added two missing Fortran APIs (h5pget_fapl_mpiposix_f and 
+            h5pset_fapl_mpiposix_f) to the reference manual.
+            FMB - 2003/10/15
+        - Corrected the reference manual descriptions of H5open/h5open_f and 
+            H5close/h5close_f to indicate that these calls are required in 
+            Fortran90 applications.   FMB - 2003/10/15
+
+
+Documentation
+=============
+
+    Fortran90 APIs are being integrated into the main body of the 
+    HDF5 Reference Manual (RM).  This process is complete in all RM sections
+    except H5P.
+
+    A PDF version of the RM will be posted on the HDF5 website
+    (at http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/) approximately one week
+    after the release.
+
+
+Platforms Tested
+================
+
+    AIX 5.1  (32 and 64-bit)      xlc 6.0.0.2
+                                  xlf 8.1.0.3
+    				  xlC 6.0.0.4
+				  xlc 5.0.2.5
+				  xlf 7.1.1.2
+				  xlC 5.0.2.5
+				  mpcc_r 5.0.2.5
+				  mpxlf_r 7.1.1.2
+                                  poe 3.2.0.10
+    Cray T3E sn6606 2.0.6.08      Cray Standard C Version 6.6.0.2
+                                  Cray Fortran Version 3.6.0.2
+    Cray SV1 sn9617 10.0.1.2      Cray Standard C Version 6.6.0.2
+                                  Cray Fortran Version 3.6.0.2
+    Cray T90IEEE 10.0.1.01y       Cray Standard C Version 6.4.0.2.3
+                                  Cray Fortran Version 3.4.0.3
+    FreeBSD 4.9                   gcc 2.95.4
+                                  g++ 2.95.4
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP ANSI C++ B3910B A.03.13
+                                  HP MPI 01.07.00.00
+    IRIX 6.5                      MIPSpro cc 7.3.1.2m
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+                                  MPIch 1.2.4
+    Linux 2.4.18                  gcc 2.96, 3.2.2, 3.3.1
+                                  g++ 3.2.2, 3.2.3
+                                  Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Compiler Version 7.1
+                                  PGI compilers (pgcc, pgf90, pgCC) version 4.0-2
+                                  MPIch 1.2.4
+    Linux 2.4.20-8                gcc 3.2.2
+    OSF1 V5.1                     Compaq C V6.4-014
+                                  Compaq C V6.3-027
+				  Compaq Fortran V5.5-2602
+				  Compaq C++ V6.5-030
+				  MPI_64bit_R5
+                                  g++ version 3.0 for C++
+    SunOS 5.7(32 and 64 bit)      WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                WorkShop Compilers 5.0 98/12/15 C++ 5.0 
+                                  WorkShop Compilers 5.0 98/10/25 
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8(32 and 64 bit)      Sun WorkShop 6 update 2 C 5.3
+     (Solaris 2.8)                Sun WorkShop 6 update 2 Fortran 90
+                                  Sun WorkShop 6 update 2 C++ 5.3
+    TFLOPS r1.0.4 v4.4.0 i386     pgcc Rel 3.1-4i with mpich-1.2.4 with
+                                          local modifications
+    IA-32 Linux 2.4.9             gcc 2.96
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+                                  
+    IA-64 Linux 2.4.16 ia64       gcc version 2.96 20000731
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+                                  Intel C and F90 compilers version 7.1
+				  Code Warrior 8.0
+    Windows XP                    MSVC++.NET
+    MAC OS X                      Darwin 6.8
+                                  gcc and g++ Apple Computer, Inc. GCC 
+                                  version 1175, based on gcc version 3.1
+                                  
+
+
+Supported Configuration Features Summary
+========================================
+
+    In the tables below
+          y   = tested and supported
+          n   = not supported or not tested in this release
+          x   = not working in this release
+          dna = does not apply
+          ( ) = footnote appears below second table
+
+Platform              C   C         F90      F90       C++  Shared        zlib
+                          parallel           parallel       libraries (4)
+Solaris2.7 64-bit     y   y (1)     y        y (1)     y    y             y
+Solaris2.7 32-bit     y   y (1)     y        y (1)     y    y             y
+Solaris2.8 64-bit     y   y (1)     y        y (1)     y    y             y
+Solaris2.8 32-bit     y   y         y        y (1)     y    y             y
+IRIX6.5               y   y (1)     n        n         n    y             y 
+IRIX64_6.5 64-bit     y   y (2)     y        y         y    y             y
+IRIX64_6.5 32-bit     y   y (2)     n        n         n    y             y
+HPUX11.00             y   y (1)     y        y         y    y             y
+OSF1 v5.1             y   y         y        y         y    y             y
+T3E                   y   y (5)     y        y (5)     n    n             y
+SV1                   y   y (5)     y        y (5)     n    n             y
+T90 IEEE              y   y (5)     y        y (5)     n    n             y
+TFLOPS                n   y (1)     n        n         n    n             y
+AIX-5.1 32-bit        y   y         y        y         y    n             y
+AIX-5.1 64-bit        y   y         y        y         y    n             y
+WinXP           (6)   y   n         n        n         y    y             y
+WinXP Intel           y   n         n        n         y    y             y
+Win2000               y   n         y        n         y    y             y
+Win2000 Intel         y   n         y        n         y    y             y
+WinNT CW              y   n         n        n         n    n             y
+Mac OS X 10.2         y   n         n        n         y    y             y
+FreeBSD               y   y (1)     n        n         y    y             y
+Linux 2.4 gcc   (3)   y   y (1)     y (PGI)  n         y    y             y
+Linux 2.4 Intel (3)   y   n         y        n         y    n             y
+Linux 2.4 PGI   (3)   y   n         y        n         y    n             y
+Linux 2.4 IA32 Intel  y   n         y        n         y    n             y
+Linux 2.4 IA64 Intel  y   n         y        n         y    n             y
+
+
+ASCII Table 2 -- for RELEASE.txt
+
+Platform              static- Thread- SZIP GASS STREAM-  High-level  H4/H5 
+                      exec    safe              VFD      APIs        tools (7)
+Solaris2.7 64-bit     x       y       y    n    y        y           n
+Solaris2.7 32-bit     x       y       y    n    y        y           y
+Solaris2.8 64-bit     x       y       y    n    y        y           n
+Solaris2.8 32-bit     x       y       y    n    y        y           y
+IRIX6.5               x       n       y    n    y        y           y
+IRIX64_6.5 64-bit     x       y       y    y    y        y           y
+IRIX64_6.5 32-bit     x       y       y    y    y        y           y
+HPUX11.00             x       n       y    n    y        y           y
+OSF1 v5.1             y       n       y    n    y        y           y
+T3E                   y       n       n    n    y        y           y
+SV1                   y       n       n    n    y        y           y
+T90 IEEE              y       n       n    n    y        y           n
+TFLOPS                y       n       n    n    n        n           n
+AIX-5.1 32-bit        y       n       y    n    y        y           y
+AIX-5.1 64-bit        y       n       y    n    y        y           y
+WinXP           (6)   y       n       y    n    n        y           y
+WinXP Intel           y       n       y    n    n        y           y
+Win2000               y       n       y    n    n        y           y
+Win2000 Intel         y       n       y    n    n        y           y
+WinNT CW              y       n       y    n    n        y           y
+Mac OS X 10.2         y       n       y    n    y        y           n
+FreeBSD               y       y       y    n    y        y           y
+Linux 2.4 gcc   (3)   y       y       y    n    y        y           y
+Linux 2.4 Intel (3)   y       n       y    n    y        n           n
+Linux 2.4 PGI   (3)   y       n       y    n    y        n           n
+Linux 2.4 IA32 Intel  y       n       y    n    y        y           y
+Linux 2.4 IA64 Intel  y       n       y    n    y        y           y
+
+    Notes: (1) Using mpich 1.2.4.
+           (2) Using mpt and mpich 1.2.4.
+           (3) Linux 2.4 with GNU, Intel, and PGI compilers, respectively.
+           (4) Shared libraries are provided only for the C library, except 
+               on Windows where they are provided for C and C++.
+           (5) Using mpt.
+           (6) Binaries only; source code for this platform is not being 
+               released at this time.
+           (7) Includes the H4toH5 Library and the h4toh5 and h5toh4 
+               utilities.
+    Compiler versions for each platform are listed in the preceding
+    "Platforms Tested" table.
+
+
+
+Known Problems
+==============
+* Fortran subroutine h5pget_driver_f doesn't return a correct driver information.
+  The fix willl be available in the 1.6.2 release. 
+* There are two h5dump xml tests(h5dump --xml thlink.h5 and h5dump --xml tmany.h5)
+  failed on windows xp with .NET for debug and debug dll. Release and Release
+  dll work fine. 
+
+* The h5dump tests may fail to match the expected output on some platforms
+  (e.g. parallel jobs, Windows) where the error messages directed to
+  "stderr" do not appear in the "right order" with output from stdout.
+  This is not an error.
+
+* The stream-vfd test uses ip port 10007 for testing. If another
+  application is already using that port address, the test will hang
+  indefinitely and has to be terminated by the kill command. To try the
+  test again, change the port address in test/stream_test.c to one not
+  being used in the host.
+
+* The --enable-static-exec configure flag fails to compile for Solaris
+  platforms. This is due to the fact that not all of the system
+  libraries on Solaris are available in a static format.
+
+  The --enable-static-exec configure flag also fails to correctly compile
+  on IBM SP2 platform for the serial mode. The parallel mode works fine
+  with this option.
+  
+  It is suggested that you don't use this option on these platforms
+  during configuration.
+
+* With the gcc 2.95.2 compiler, HDF 5 uses the `-ansi' flag during
+  compilation. The ANSI version of the compiler complains about not being
+  able to handle the `long long' datatype with the warning:
+
+        warning: ANSI C does not support `long long'
+  
+  This warning is innocuous and can be safely ignored.
+
+
+* The Stream VFD was not tested yet under Windows. It is not supported
+  in the TFLOPS machine.
+
+
+* The ./dsets tests failed in the TFLOPS machine if the test program,
+  dsets.c, is compiled with the -O option.  The hdf5 library still works
+  correctly with the -O option.  The test program works fine if it is
+  compiled with -O1 or -O0.  Only -O (same as -O2) causes the test
+  program to fail.
+
+* Certain platforms give false negatives when testing h5ls:
+    - Cray J90 and Cray T90IEEE give errors during testing when displaying
+      some floating-point values. These are benign differences due to
+      the different precision in the values displayed and h5ls appears to
+      be dumping floating-point numbers correctly.
+
+* Before building HDF5 F90 Library from source on Crays 
+  replace H5Aff.f90, H5Dff.f90 and H5Pff.f90 files in the fortran/src
+  subdirectory in the top level directory with the Cray-specific files
+  from the site:
+
+* On some platforms that use Intel compilers to build HDF5 fortran library,
+  compilation may fail for fortranlib_test.f90, fflush1.f90 and fflush2.f90
+  complaining about exit subroutine. Comment out the line 
+  IF (total_error .ne. 0) CALL exit (total_error)
+
+  ftp://hdf.ncsa.uiuc.edu/pub/outgoing/hdf5/hdf5-1.6.0/F90_source_for_Crays
+
+* On IA32 and IA64 systems, if you use a compiler other than GCC (such as
+  Intel's ecc or icc compilers), you will need to modify the generated
+  "libtool" program after configuration is finished. On or around line 104 of
+  the libtool file, there are lines which look like:
+
+      # How to pass a linker flag through the compiler.
+      wl=""
+
+  change these lines to this:
+
+      # How to pass a linker flag through the compiler.
+      wl="-Wl,"
+
+  UPDATE: This is now done automatically by the configure script. However, if
+  you still experience a problem, you may want to check this line in the
+  libtool file and make sure that it has the correct value.
+
+* Information about building with PGI and Intel compilers is available in
+  INSTALL file sections 5.7 and 5.8
+%%%%1.6.0%%%%   Release Information for hdf5-1.6.0 (03/July/03)
+
+14.  Release information for HDF5 version 1.6.0
+================================================
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.4.* and
+HDF5-1.6.0, and contains information on the platforms tested and
+known problems in HDF5-1.6.0. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+CONTENTS
+
+- New Features
+- Support for new platforms and languages
+- Bug Fixes since HDF5-1.4.0
+- Platforms Tested
+- Known Problems
+
+
+New Features
+============
+
+Configuration:
+--------------
+The following flags have been added to the configuration script:
+--enable-hdf5v1_4       Compile the HDF5 v1.4 compatibility interface
+--enable-filters=all    Turn on all internal I/O filters. One may also
+                        specify a comma-separated list of filters or the
+                        word no. The default is all internal I/O filters.
+--with-mpe=DIR          Use MPE instrumentation [default=no]
+--with-szlib=DIR        Use szlib library for external szlib I/O filter
+                        [default=no]
+
+Library:
+--------
+    Summary: This release has the following new features that are not
+             available in 1.4.* releases
+
+    1. Generic properties to give application more control on I/O pipeline
+    2. Time allocation and fill value properties
+    3. New  filters: external compression filter szip
+                     internal shuffling and checksum filters
+    4. Compact storage layout for datasets
+    5. Redesigned I/O pipeline for better performance.
+
+    For more information see
+    http://hdf.ncsa.uiuc.edu/HDF5/doc_resource/SZIP/index.html
+    http://hdf.ncsa.uiuc.edu/HDF5/doc/ADGuide.html
+    http://hdf.ncsa.uiuc.edu/HDF5/doc/ADGuide/Changes.html 
+    
+    Complete list of changes:
+
+    * Changed dataset modification time to _not_ be updated when raw data is
+      written to a dataset.  The modification time is only updated when the
+      dataset's metadata is modified.  QAK - 2003/06/10
+    * Changed H5Sget_select_bounds to use 'hssize_t *' for start and end
+      parameters, instead of 'hsize_t *', to better match other parts of the
+      dataspace API.  QAK - 2003/06/04
+    * Changed raw data I/O to only access each chunk once, improving performance
+      in many situations with hyperslabs and large chunks or chunks with
+      filters.  These improvements are currently limited to serial I/O, with
+      similar parallel I/O improvements forthcoming sometime in the future.
+      QAK - 2003/05/07
+    * Added parameter to the MPI/POSIX driver. If GPFS is enabled (by
+      modifying the H5FDmpiposix.c file to uncomment the USE_GPFS_HINTS
+      macro), then this extra parameter will turn GPFS hints on and off
+      during runtime. BW - 2003/05/05
+    * Added option to print 1-byte integer datasets as ASCII to h5dump. BW -
+      2003/04/30
+    * Added a new utility "h5fc". It can be used to compile easily Fortran
+      programs which use HDF5. It automatically uses the compiler the HDF5
+      library was built with and links in any libraries HDF5 requires.
+      BW - 2003/04/10
+    * Added new dataset creation property list functions for working with
+      I/O filters: H5Pmodify_filter, H5Pget_filter_by_id and
+      H5Pall_filters_avail.  Also changed H5Zregister to use new method
+      of registering filters with library.  QAK - 2003/04/08
+    * The first version of szip compression support were implemented. 
+      User should have static szlib library installed. Using function
+      H5Pset_szip to pass the szip parameters to the HDF5 library.
+      More detailed decription of the process will be followed.
+      KY-2003/04/01
+    * Added Fletcher32 checksum as a filter in pipeline.  It only works in 
+      chunked dataset.  SLU - 2003/2/11
+    * MPICH/MPE instrumentation feature added.  Use --with-mpe[=DIR] to configure
+      it.  AKC - 2003/1/3
+    * New functions H5Gget_num_objs, H5Gget_objname_by_idx and H5Gget_objtype_by_idx 
+      are added to the library.  SLU - 2002/11/25
+    * H5Dget_offset is added to return the offset of a dataset's data relative
+      to the beginning of the file.  SLU - 2002/11/7
+    * Functions H5Tget_native_type and H5Tis_variable_str are added.  The first
+      one reconstructs a datatype based on native memory datatype.  The second
+      one checks if a datatype is variable string.  SLU - 2002/11/6
+    * Added environment variable "HDF5_DISABLE_VERSION_CHECK", which disables
+      the version checking between the header files and the library linked into
+      an application if set to '1'.  This should be used with caution, mis-
+      matched headers and library binaries can cause _serious_ problems.
+      QAK - 2002/10/15
+    * Added new API function to get the name of an object in a file, using
+      an open ID (hid_t).  QAK - 2002/10/14
+    * Added API functions to return pointer to low-level file handle
+      (H5Fget_vfd_handle and H5FDget_vfd_handle) and related property list
+      setting functions(H5Pset_family_offset and H5Pset_multi_type).
+      SLU - 2002/09/30
+    * Changed "H5P[set|get]_space_time" functions to "H5P[set|get]_alloc_time"
+      Unify all symbolic names for these functions to use "alloc time" instead
+      of other names.  QAK - 2002/09/13
+    * Added "H5D_SPACE_ALLOC_INCR" setting to H5D_SPACE_ALLOC_EARLY and
+      H5D_SPACE_ALLOC_LATE for H5Dset_space_time().  This allows chunked
+      datasets to be incrementally allocated as in the 1.4.x branch.
+      QAK - 2002/08/27
+    * Compact dataset is added to the library.  The data will be stored in 
+      the header message of dataset layout.  Space allocation time has to be
+      EARLY.  No hyperslab is supported for parallel collective write.  There
+      is no API changes except activating H5Pset_layout and H5Pget_layout for
+      compact dataset.  -SLU, 2002/8/20
+    * Added 'closing' parameter to VFL 'flush' callback function and H5FDflush.
+      This allows the library to indicate that the file will be closed
+      immediately following the call to 'flush' and can be used to avoid actions
+      that are duplicated in the VFL 'close' callback function.  QAK - 2002/05/20
+    * Added feature to parallel chunk allocation routine to not write fill
+      values to chunks allocated if the user has set the "fill time" to never.
+      This can improve parallel I/O performance for chunked
+      datasets.  QAK - 2002/05/17
+    * New functions H5Glink2 and H5Gmove2 were added to allow link and move to
+      be in different locations in the same file.  The old functions H5Glink 
+      and H5Gmove remain valid.  SLU - 2002/04/26 
+    * Fill-value's behaviors for contiguous dataset have been redefined.  
+      Basicly, dataset won't allocate space until it's necessary.  Full details
+      are available at http://hdf.ncsa.uiuc.edu/RFC/Fill_Value, at this moment.
+      SLU - 2002/04/11
+    * Added new routine "H5Dfill" to fill a selection with a particular value
+      in memory.  QAK - 2002/04/09
+    * Improved performance of "regular" hyperslab I/O when using MPI-IO and the
+      datatype conversion is unneccessary.  QAK - 2002/04/02
+    * Improved performance of single hyperslab I/O when datatype conversion is
+      unneccessary.  QAK - 2002/04/02
+    * Added new "H5Sget_select_type" API function to determine which type of
+      selection is defined for a dataspace ("all", "none", "hyperslab" or
+      "point"). QAK - 2002/02/07
+    * Added support to read/write portions of chunks directly, if they are
+      uncompressed and too large to cache.  This should speed up I/O on chunked
+      datasets for a few more cases.  QAK - 2002/01/31
+    * Added H5Rget_obj_type() API function, which performs the same functionality
+      as H5Rget_object_type(), but requires the reference type as a parameter
+      in order to correctly handle dataset region references.  Moved
+      H5Rget_object_type() to be only compiled into the library when v1.4
+      compatibility is enabled.
+    * Added a new file access property, file close degree, to control file 
+      close behavior.  It has four values, H5F_CLOSE_WEAK, H5F_CLOSE_SEMI,
+      H5F_CLOSE_STRONG, and H5F_CLOSE_DEFAULT.  Two correspont functions 
+      H5Pset_fclose_degree and H5Pget_fclose_degree are also provided.  Two 
+      new functions H5Fget_obj_count and H5Fget_obj_ids are offerted to assist
+      this new feature.  For full details, please refer to the reference 
+      manual under the description of H5Fcreate, H5Fopen, H5Fclose and the 
+      functions mentioned above. 
+    * Removed H5P(get|set)_hyper_cache API function, since the property is no
+      longer used.
+    * Improved performance of non-contiguous hyperslabs (built up with
+      several hyperslab selection calls).
+    * Improved performance of single, contiguous hyperslabs when reading or
+      writing.
+    * As part of the transition to using generic properties everywhere, the
+      parameter of H5Pcreate changed from H5P_class_t to hid_t, as well
+      the return type of H5Pget_class changed from H5P_class_t to hid_t.
+      Further changes are still necessary and will be documented here as they
+      are made.
+    * Improved regular hyperslab I/O by about a factor of 6 or so.
+    * Modified the Pablo build procedure to permit building of the instrumented
+      library to link either with the Trace libraries as before or with the
+      Pablo Performance Caputure Facility.
+    * Added new F90 APIs for generic properties, new filters, and
+      time/space allocation properties.
+    * C++ API:
+        - Added two new member functions: Exception::getFuncName() and
+          Exception::getCFuncName() to provide the name of the member
+          function, where an exception is thrown.
+        - IdComponent::operator= becomes a virtual function because
+          DataType, DataSpace, and PropList provide their own
+          implementation.  The new operator= functions invoke H5Tcopy,
+          H5Scopy, and H5Pcopy to make a copy of a datatype, dataspace,
+          and property list, respectively.
+
+Parallel Library:
+-----------------
+
+Tools:
+------
+    * When the "-S" option for "simple" output is chosen, h5ls now displays
+        modification times of datasets in UTC instead of local time.
+        QAK - 2003/06/06
+    * h5diff to compare two HDF5 files was added
+    * h5import to import ascii and binary data to an HDF5 file was added.
+      Old h5import tool in the tools/misc directory was renamed to 
+      h5createU8 to reflect its purpose. h5createU8 will be deleted in 
+      1.6.1 release. 
+    * Two new scripts h5fc and h5c++ were added to compile F90 and C++
+      HDF5 applications.
+
+Support for new platforms, languages and compilers.
+=======================================
+    * Added C++ API support on HPUX11.00.  BMR - 2003/03/19
+    * Absoft compiler is supported for Fortran HDF5 Library. 
+      When building with Absoft compiler, add -DH5_ABSOFT to
+      C compilation flags to get correct names of C functions
+      called by Fortran APIs. 
+
+
+Bug Fixes since HDF5-1.4.0 release
+==================================
+
+Library
+-------
+    * Don't attempt to perform collective I/O on chunked datasets with
+      parallel I/O.  QAK - 2003/06/05
+    * The library now correctly reuses space when objects are deleted in the
+      file.  This should be handled correctly for every situation, except
+      datasets with variable-length datatypes are not returning the space they
+      use in the global heap currently. QAK - 2003/04/13
+    * Fixed error in B-tree deletion routine which could cause groups to be
+      corrupted when objects are removed from them.
+      QAK - 2003/04/11
+    * Fixed error in file space freeing code which could cause metadata to
+      fail to be written to the file.
+      QAK - 2003/04/11
+    * -O caused errors in AIX 5.x platforms.  Removed it from
+      --enable-production mode.  AKC - 2003/03/31
+    * Corrected memory/resource leaks in per-thread key information when
+      thread-safe operation was enabled.  QAK - 2003/02/07
+    * Improved error assertion for nil VL strings, making it fails with error
+      stack instead of just assertion failure.  SLU - 2002/12/16
+    * Added two new API functions: H5Zunregister & H5Zfilter_avail.
+      QAK - 2002/11/16
+    * Add data shuffle filter(source code H5Zshuffle.c), the combination of the
+      shuffling and compression can make data compression better without suffering
+      much encoding and decoding CPU time for many application datasets(especially
+      for floating point data). This adds a new API function: H5Pset_shuffle.
+      KY - 2002/11/13
+    * Allow scalar dataspaces to be used for parallel I/O.  QAK - 2002/11/05
+    * New functions H5Gget_comment(modification), H5Aget_storage_size, 
+      H5Arename.  SLU - 2002/10/29
+    * Fixed an assertion of H5S_select_iterate that did not account for scalar
+      type that has no dimension sizes.   AKC - 2002/10/15
+    * Partially fixed space allocation inefficiencies in the file by
+      improving our algorithms for re-using freed space.  QAK - 2002/08/27
+    * Fixed data corruption problem which could occur when fill values were
+      written to a contiguously stored dataset in parallel.  QAK - 2002/08/27
+    * Fixed VL memory leak when data is overwritten.  The heap objects holding
+      old data are freed.  If the fill value writting time is set to 
+      H5D_FILL_TIME_NEVER, the library prohibits user to create VL type dataset.
+      The library free all the heap objects storing VL type if there is nested 
+      VL type(a VL type contains another VL type).  SLU - 2002/07/10 
+    * Tweaked a few API functions to use 'size_t' instead of 'unsigned' or
+      'hsize_t', which may cause errors in some cases.
+
+
+Configuration
+-------------
+    * Included the both the examples of fortran and c++ "make check-install"
+      testing. This tests the correctness of the h5fc command. AKC - 2003/04/22
+    * When using gcc 3.x, we use -std=c99 instead of -ansi for compiling.
+      QAK - 2003/04/11
+    * IA64 platform has its own configure setting and use Intel Compilers as
+      the default compilers (were gcc and pgf90 before.)  This also eliminated
+      the segmentation fault in the fortran test.  The missing reference of
+      "exit" is fixed too.  AKC - 2003/04/02
+
+Performance
+-------------
+    * Improved dataset creation time by about 30% (relative to the 1.4.x
+      branch).
+
+Tools
+-----
+
+    * Added a -force option to h5redeploy.  AKC - 2003/03/04 
+    * The VL string bug(data and datatype cannot be shown) in h5dump is fixed.
+      -SLU - 2002/11/18
+    * Fixed segfault if h5dump was invoked with some options but no file 
+      (e.g., h5dump -H). -AKC, 2002/10/15
+    * Fixed so that the "-i" flag works correctly with the h5dumper.
+    * Fixed segfault when "-v" flag was used with the h5dumper.
+
+
+Documentation 
+------------- 
+
+
+
+
+
+
+Platforms Tested
+================
+
+    AIX 5.1  (32 and 64-bit)      xlc 6.0.0.2
+                                  xlf 8.1.0.3
+    				  xlC 6.0.0.4
+				  xlc 5.0.2.5
+				  xlf 7.1.1.2
+				  xlC 5.0.2.5
+				  mpcc_r 5.0.2.5
+				  mpxlf_r 7.1.1.2
+                                  poe 3.2.0.10
+    Cray T3E sn6606 2.0.6.08      Cray Standard C Version 6.6.0.2
+                                  Cray Fortran Version 3.6.0.0.2
+                                  mpt 2.2.0.0
+    Cray SV1 sn9617 10.0.1.2      Cray Standard C Version 6.6.0.2
+                                  mpt 2.2.0.0
+                                  Cray Fortran Version 3.6.0.0.2
+    Cray T90IEEE 10.0.1.01y       Cray Standard C Version 6.4.0.2.3
+                                  Cray Fortran Version 3.4.0.3
+                                  mpt 2.1.0.0
+    FreeBSD 4.7                   gcc 2.95.4
+                                  g++ 2.95.5
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP ANSI C++ B3910B A.03.13
+                                  MPIch 1.2.4
+    IRIX 6.5                      MIPSpro cc 7.30
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+                                  MPIch 1.2.4
+    Linux 2.4.18                  gcc 2.96, 3.2.2, 3.2.3
+                                  g++ 3.2.2, 3.2.3
+                                  Intel(R) C++ Version 7.1
+                                  Intel(R) Fortran Compiler Version 7.1
+                                  PGI compilers (pgcc, pgf90, pgCC) version 4.0-2
+                                  MPIch 1.2.4
+    OSF1 V5.1                     Compaq C V6.4-014
+                                  Compaq C V6.3-027
+				  Compaq Fortran V5.5-1877
+				  Compaq C++ V6.5-014
+				  MPI_64bit_R5
+                                  g++ version 3.0 for C++
+    SunOS 5.7                     WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                WorkShop Compilers 5.0 98/12/15 C++ 5.0 
+                                  WorkShop Compilers 5.0 98/10/25 
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8/32                  Sun WorkShop 6 update 2 C 5.3
+     (Solaris 2.8)                Sun WorkShop 6 update 2 Fortran 90
+                                  Sun WorkShop 6 update 2 C++ 5.3
+    SunOS 5.8/64                  Sun WorkShop 6 update 2 C 5.3
+     (Solaris 2.8)                Sun WorkShop 6 update 2 Fortran 90
+                                  Sun WorkShop 6 update 2 C++ 5.3
+    TFLOPS r1.0.4 v4.3.3 i386     pgcc Rel 3.1-4i with mpich-1.2.4 with
+                                          local modifications
+    IA-32 Linux 2.4.9             gcc 2.96
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+                                  
+    IA-64 Linux 2.4.16 ia64       gcc version 2.96 20000731
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+                                  Intel C and F90 compilers version 7.1
+				  Code Warrior 8.0
+    Windows XP                    MSVC++.NET
+    MAC OS X                      Darwin 6.5
+                                  gcc and g++ Apple Computer, Inc. GCC 
+                                  version 1161, based on gcc version 3.1
+                                  
+
+
+Supported Configuration Features Summary
+========================================
+
+    In the tables below
+          y   = tested and supported
+          n   = not supported or not tested in this release
+          x   = not working in this release
+          dna = does not apply
+          ( ) = footnote appears below second table
+
+Platform              C   C         F90      F90       C++  Shared        zlib
+                          parallel           parallel       libraries (4)
+Solaris2.7 64-bit     y   y (1)     y        y (1)     y    y             y
+Solaris2.7 32-bit     y   y (1)     y        y (1)     y    y             y
+Solaris2.8 64-bit     y   y (1)     y        y (1)     y    y             y
+Solaris2.8 32-bit     y   y         y        y (1)     y    y             y
+IRIX6.5               y   y (1)     n        n         n    y             y 
+IRIX64_6.5 64-bit     y   y (2)     y        y         y    y             y
+IRIX64_6.5 32-bit     y   y (2)     n        n         n    y             y
+HPUX11.00             y   y (1)     y        y         y    y             y
+OSF1 v5.1             y   y         y        y         y    y             y
+T3E                   y   y (5)     y        y (5)     n    n             y
+SV1                   y   y (5)     y        y (5)     n    n             y
+T90 IEEE              y   y (5)     y        y (5)     n    n             y
+TFLOPS                n   y (1)     n        n         n    n             y
+AIX-5.1 32-bit        y   y         y        y         y    n             y
+AIX-5.1 64-bit        y   y         y        y         y    n             y
+WinXP           (6)   y   n         n        n         y    y             y
+WinXP Intel           y   n         n        n         y    y             y
+Win2000               y   n         y        n         y    y             y
+Win2000 Intel         y   n         y        n         y    y             y
+WinNT CW              y   n         n        n         n    n             y
+Mac OS X 10.2         y   n         n        n         y    y             y
+FreeBSD               y   y (1)     n        n         y    y             y
+Linux 2.4 gcc   (3)   y   y (1)     y (PGI)  n         y    y             y
+Linux 2.4 Intel (3)   y   n         y        n         y    n             y
+Linux 2.4 PGI   (3)   y   n         y        n         y    n             y
+Linux 2.4 IA32 Intel  y   n         y        n         y    n             y
+Linux 2.4 IA64 Intel  y   n         y        n         y    n             y
+
+
+ASCII Table 2 -- for RELEASE.txt
+
+Platform              static- Thread- SZIP GASS STREAM-  High-level  H4/H5 
+                      exec    safe              VFD      APIs        tools (7)
+Solaris2.7 64-bit     x       y       y    n    y        y           n
+Solaris2.7 32-bit     x       y       y    n    y        y           y
+Solaris2.8 64-bit     x       y       y    n    y        y           n
+Solaris2.8 32-bit     x       y       y    n    y        y           y
+IRIX6.5               x       n       y    n    y        y           y
+IRIX64_6.5 64-bit     x       y       y    y    y        y           y
+IRIX64_6.5 32-bit     x       y       y    y    y        y           y
+HPUX11.00             x       n       y    n    y        y           y
+OSF1 v5.1             y       n       y    n    y        y           y
+T3E                   y       n       n    n    y        y           y
+SV1                   y       n       n    n    y        y           y
+T90 IEEE              y       n       n    n    y        y           n
+TFLOPS                y       n       n    n    n        n           n
+AIX-5.1 32-bit        y       n       y    n    y        y           y
+AIX-5.1 64-bit        y       n       y    n    y        y           y
+WinXP           (6)   y       n       y    n    n        y           y
+WinXP Intel           y       n       y    n    n        y           y
+Win2000               y       n       y    n    n        y           y
+Win2000 Intel         y       n       y    n    n        y           y
+WinNT CW              y       n       y    n    n        y           y
+Mac OS X 10.2         y       n       y    n    y        y           n
+FreeBSD               y       y       y    n    y        y           y
+Linux 2.4 gcc   (3)   y       y       y    n    y        y           y
+Linux 2.4 Intel (3)   y       n       y    n    y        n           n
+Linux 2.4 PGI   (3)   y       n       y    n    y        n           n
+Linux 2.4 IA32 Intel  y       n       y    n    y        y           y
+Linux 2.4 IA64 Intel  y       n       y    n    y        y           y
+
+    Notes: (1) Using mpich 1.2.4.
+           (2) Using mpt and mpich 1.2.4.
+           (3) Linux 2.4 with GNU, Intel, and PGI compilers, respectively.
+           (4) Shared libraries are provided only for the C library, except 
+               on Windows where they are provided for C and C++.
+           (5) Using mpt.
+           (6) Binaries only; source code for this platform is not being 
+               released at this time.
+           (7) Includes the H4toH5 Library and the h4toh5 and h5toh4 
+               utilities.
+    Compiler versions for each platform are listed in the preceding
+    "Platforms Tested" table.
+
+
+
+Known Problems
+==============
+
+* PGI C++ compiler fails when compiling the C++ library's tests.
+  Therefore, we cannot verify that the C++ library built with the PGI C++
+  compiler is correct.
+
+* The h5dump tests may fail to match the expected output on some platforms
+  (e.g. parallel jobs, Windows) where the error messages directed to
+  "stderr" do not appear in the "right order" with output from stdout.
+  This is not an error.
+
+* The stream-vfd test uses ip port 10007 for testing. If another
+  application is already using that port address, the test will hang
+  indefinitely and has to be terminated by the kill command. To try the
+  test again, change the port address in test/stream_test.c to one not
+  being used in the host.
+
+* The --enable-static-exec configure flag fails to compile for Solaris
+  platforms. This is due to the fact that not all of the system
+  libraries on Solaris are available in a static format.
+
+  The --enable-static-exec configure flag also fails to correctly compile
+  on IBM SP2 platform for the serial mode. The parallel mode works fine
+  with this option.
+  
+  It is suggested that you don't use this option on these platforms
+  during configuration.
+
+* With the gcc 2.95.2 compiler, HDF 5 uses the `-ansi' flag during
+  compilation. The ANSI version of the compiler complains about not being
+  able to handle the `long long' datatype with the warning:
+
+        warning: ANSI C does not support `long long'
+  
+  This warning is innocuous and can be safely ignored.
+
+
+* The Stream VFD was not tested yet under Windows. It is not supported
+  in the TFLOPS machine.
+
+
+* The ./dsets tests failed in the TFLOPS machine if the test program,
+  dsets.c, is compiled with the -O option.  The hdf5 library still works
+  correctly with the -O option.  The test program works fine if it is
+  compiled with -O1 or -O0.  Only -O (same as -O2) causes the test
+  program to fail.
+
+* Certain platforms give false negatives when testing h5ls:
+    - Cray J90 and Cray T90IEEE give errors during testing when displaying
+      some floating-point values. These are benign differences due to
+      the different precision in the values displayed and h5ls appears to
+      be dumping floating-point numbers correctly.
+
+* Before building HDF5 F90 Library from source on Crays 
+  replace H5Aff.f90, H5Dff.f90 and H5Pff.f90 files in the fortran/src
+  subdirectory in the top level directory with the Cray-specific files
+  from the site:
+
+* On some platforms that use Intel compilers to build HDF5 fortran library,
+  compilation may fail for fortranlib_test.f90, fflush1.f90 and fflush2.f90
+  complaining about exit subroutine. Comment out the line 
+  IF (total_error .ne. 0) CALL exit (total_error)
+
+  ftp://hdf.ncsa.uiuc.edu/pub/outgoing/hdf5/hdf5-1.6.0/F90_source_for_Crays
+
+* On IA32 and IA64 systems, if you use a compiler other than GCC (such as
+  Intel's ecc or icc compilers), you will need to modify the generated
+  "libtool" program after configuration is finished. On or around line 104 of
+  the libtool file, there are lines which look like:
+
+      # How to pass a linker flag through the compiler.
+      wl=""
+
+  change these lines to this:
+
+      # How to pass a linker flag through the compiler.
+      wl="-Wl,"
+
+  UPDATE: This is now done automatically by the configure script. However, if
+  you still experience a problem, you may want to check this line in the
+  libtool file and make sure that it has the correct value.
+
+* Information about building with PGI and Intel compilers is available in
+  INSTALL file sections 5.7 and 5.8
+-----------------------------------------------------------------------
+%%%%1.4.5%%%%   Release Information for hdf5-1.4.5 (02/February/03)
+
+
+13.   Release information for HDF5 version 1.4.5
+==============================================================================
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.4.4 and
+HDF5-1.4.5, and contains information on the platforms tested and
+known problems in HDF5-1.4.5. For additional information check the 
+HISTORY.txt file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+    /HDF/HDF5/docs/
+
+For more information, see the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+
+- New Features
+- Bug Fixes since HDF5-1.4.4
+- Performance Improvements
+- Documentation
+- Platforms Tested
+- Supported Configuration Features
+- Known Problems
+
+
+New Features
+============
+  o Configuration
+  ================
+    * Added "unofficial support" for building with a C++ compiler (or at least
+      not failing badly when building with a C++ compiler).  QAK - 2003/01/09
+    * Added "unofficial support" for AIX 64bits.  See INSTALL for configure
+      details. AKC - 2002/08/29
+    * Added "--with-dmalloc" flag, to easily enable support for the 'dmalloc'
+      debugging malloc implementation. QAK - 2002/07/15
+
+  o Library
+  =========
+    o General
+    --------- 
+      * Allow scalar dataspaces to be used for parallel I/O.  QAK - 2002/11/05
+      * Added environment variable "HDF5_DISABLE_VERSION_CHECK", which disables
+        the version checking between the header files and the library linked
+        into an application if set to '1'.  This should be used with caution,
+        mis-matched headers and library binaries can cause _serious_ problems.
+        QAK - 2002/10/15
+      * Partially fixed space allocation inefficiencies in the file by
+        improving our algorithms for re-using freed space.  QAK - 2002/08/27
+      * API tracing has been improved. Nested API calls don't screw up the
+        output format; function call and return event times can be logged;
+        total time spent in each function can be logged.  The following
+        HDF5_DEBUG environment variable words affect tracing:
+	    trace   -- turn on/off basic tracing
+	    ttimes  -- turn on tracing and report event times and
+                       time spent in each API function.
+        ttop    -- turn on tracing but display only top-level
+                       API calls.
+
+    o APIs
+    ------
+      * Several missing fortran APIs have been added to the library:
+
+        h5get_libversion_f        h5tget_member_index_f  h5dget_storage_size_f 
+        h5check_version_f         h5tvlen_create_f       h5dvlen_get_max_len_f
+        h5garbage_collect_f                              h5dwrite_vl_f
+        h5dont_atexit_f                                  h5dread_vl_f
+
+      Functions h5dvlen_get_max_len_f, h5dwrite_vl_f, and h5dread_vl_f support
+      VL Length C APIs functionality for integer, real and string datatypes.
+      See HDF5 Reference Manual and HDF5 FORTRAN90 User's Notes for more
+      information and for the functions description.
+
+  o Parallel library
+  ==================
+    * The MPI-posix virtual file driver makes gpfs_fcntl() hints to tell
+        the underlying GPFS file system to avoid prefetching byte range
+        tokens if USE_GPFS_HINTS is defined when this file is compiled.
+        This temporary solution is intended to be removed once the HDF5
+        API supports the necessary functionality that makes it possible
+        for this sort of thing do be done at a higher software layer.
+        RPM - 2002/12/03
+    * Added MPI-posix VFL driver.  This VFL driver uses MPI functions to
+        coordinate actions, but performs I/O directly with POSIX sec(2)
+        (i.e. open/close/read/write/etc.) calls.  This driver should _NOT_
+        be used to access files that are not on a parallel filesystem.
+        The following API functions were added:
+            herr_t H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm);
+            herr_t H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/);
+        QAK - 2002/07/15
+
+
+
+  o Support for new platforms and languages
+  =========================================
+    * C++ API now works on the Origin2000 (IRIX6.5.14.)  BMR - 2002/11/14
+
+  
+  o Misc.
+  =========================================
+    HDF5 1.4.5 works with Portland Group Compilers (pgcc, pgf90 and pgCC 
+    version 4.0-2) on Linux 2.4 
+
+
+Bug Fixes since HDF5-1.4.4 Release
+==================================
+    * H5Fopen without the H5F_ACC_CREAT flag should not succeed in creating
+        a new file with the 'core' VFL driver.  QAK - 2003/01/24
+    * Corrected metadata caching bug in parallel I/O which could cause hangs
+        when chunked datasets were accessed with independent transfer mode.
+        QAK - 2003/01/23
+    * Allow opening objects with unknown object header messages.
+        QAK - 2003/01/21
+    * Added improved error assertion for nil VL strings.  It return error
+        stack instead of a simple assertion.  SLU - 2002/12/16
+    * Fixed h5dump bug(cannot dump data and datatype) for VL string. 
+        SLU - 2002/11/18 
+    * Fixed error condition where "none" selections were not being handled
+        correctly in serial & parallel.  QAK - 2002/10/29
+    * Fixed problem where optimized hyperslab routines were incorrectly
+        invoked for parallel I/O operations in collective mode.  QAK - 2002/07/22
+    * Fixed metadata corruption problem which could occur when many objects
+        are created in a file during parallel I/O.  QAK - 2002/07/19
+    * Fixed minor problem with configuration when users specified /usr/include
+        and /usr/lib for the --with-* options that some compilers can't
+        handle. BW - 2003/01/23
+
+
+
+Documentation
+=============
+    New PDF files are not available for this release.
+
+
+Platforms Tested
+================
+
+    AIX 5.1  (32 and 64-bit)      C for AIX Compiler, Version 6
+                                  xlf 8.1.0.2
+                                  poe 3.2.0.11
+    Cray T3E sn6606 2.0.6.08      Cray Standard C Version 6.6.0.1.3 
+                                  Cray Fortran Version 3.6.0.0.12 
+    Cray SV1 10.0.1. 0            Cray Standard C Version 6.6.0.1.3
+                                  Cray Fortran Version 3.6.0.0.12
+    Cray T90IEEE 10.0.1.01u       Cray Standard C Version 6.4.0.2.3
+                                  Cray Fortran Version 3.4.0.3
+    FreeBSD 4.7                   gcc 2.95.4
+                                  g++ 2.95.5
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+    IRIX 6.5                      MIPSpro cc 7.30
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+    Linux 2.4.18                  gcc 3.2.1
+                                  g++ 3.2.1
+                                  Intel(R) C++ Version 6.0
+                                  Intel(R) Fortran Compiler Version 6.0
+                                  PGI compilers (pgcc, pgf90, pgCC) version 4.0-2
+                                  pgf90  3.2-4
+    OSF1 V5.1                     Compaq C V6.4-014
+                                  Compaq Fortran X5.4A-1684
+                                  gcc version 3.0 for C++
+    SunOS 5.7                     WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                WorkShop Compilers 5.0 98/12/15 C++ 5.0 
+                                  WorkShop Compilers 5.0 98/10/25 
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8/32                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          Patch 109503-07 2001/08/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 Patch
+                                        109508-04 2001/07/11
+    SunOS 5.8/64                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          Patch 109503-07 2001/08/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 Patch
+                                        109508-04 2001/07/11
+    TFLOPS r1.0.4 v4.3.3 i386     pgcc Rel 3.1-4i with mpich-1.2.4 with
+                                          local modifications
+    IA-32 Linux 2.4.9             gcc 2.96
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+                                  
+    IA-64 Linux 2.4.16 ia64       gcc version 2.96 20000731
+                                  Intel(R) C++ Version 7.0
+                                  Intel(R) Fortran Compiler Version 7.0
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+    Windows XP                    .NET
+    Windows NT4.0                 Code Warrior 6.0
+    MAC OS X                      Darwin 6.2
+                                  gcc and g++ Apple Computer, Inc. GCC 
+                                  version 1161, based on gcc version 3.1
+                                  
+
+
+Supported Configuration Features Summary
+========================================
+
+    In the tables below
+          y   = tested and supported
+          n   = not supported or not tested in this release
+          x   = not working in this release
+          dna = does not apply
+          ( ) = footnote appears below second table
+
+
+    Platform             C   C         F90  F90       C++  Shared         zlib
+                             parallel       parallel       libraries (5)
+    Solaris2.6           y   n         y    n         y    y              y
+    Solaris2.7 64-bit    y   y (1)     y    y (1)     y    y              y
+    Solaris2.7 32-bit    y   y (1)     y    y (1)     y    y              y
+    Solaris2.8 64-bit    y   n         y    y (1)     y    y              y
+    Solaris2.8 32-bit    y   n         y    y (1)     y    y              y
+    IRIX6.5              y   y (1)     n    n         n    y              y 
+    IRIX64_6.5 64-bit    y   y (2)     y    y         y    y              y
+    IRIX64_6.5 32-bit    y   y (2)     n    n         n    y              y
+    HPUX11.00            y   y (1)     y    n         n    y              y
+    OSF1 v5.1            y   n         y    n         y    y              y
+    T3E             (6)  y   n         y    n         n    n              y
+    SV1                  y   n         y    n         n    n              y
+    T90 IEEE             y   n         y    n         n    n              y
+    TFLOPS               n   y (1)     n    n         n    n              y
+    AIX-5.1 32-bit       y   y         y    y         y    n              y
+    AIX-5.1 64-bit       y   y         y    y         y    n              y
+    WinXP           (7)  y   n         n    n         y    y              y
+    WinNT/2000           y   n         y    n         y    y              y
+    WinNT CW             y   n         n    n         n    n              y
+    Mac OS X 10.2        y   n         n    n         y    y              y
+    FreeBSD              y   y (1)     n    n         y    y              y
+    Linux 2.2            y   y (1)     y    y (1)     y    y              y
+    Linux 2.4 gcc   (3)  y   y (1)     y    n         y    y              y
+    Linux 2.4 Intel (3)  y   n         y    n         n    n              y
+    Linux 2.4 PGI   (3)  y   n         y    n         y    n              y
+    Linux 2.4 IA32       y   n         y    n         n    n              y
+    Linux 2.4 IA64       y   n         y    n         n    n              y
+    
+
+    Platform             static-  Thread-  SRB  GASS  STREAM-
+                         exec     safe                VFD
+    Solaris2.6           x        y        n    n     y
+    Solaris2.7 64-bit    x        y        n    n     y
+    Solaris2.7 32-bit    x        y        n    n     y
+    Solaris2.8 64-bit    x        n        n    n     y
+    Solaris2.8 32-bit    x        y        n    n     y
+    IRIX6.5              x        n        n    n     y
+    IRIX64_6.5 64-bit    x        y        n    y     y
+    IRIX64_6.5 32-bit    x        y        n    y     y
+    HPUX11.00            x        n        n    n     y
+    OSF1 v5.1            y        n        n    n     y
+    T3E             (6)  y        n        n    n     y
+    SV1                  y        n        n    n     y
+    T90 IEEE             y        n        n    n     y
+    TFLOPS               y        n        n    n     n
+    AIX-5.1 32-bit       y        n        n    n     y
+    AIX-5.1 64-bit       y        n        n    n     y
+    WinXP           (7)  dna      n        n    n     n
+    WinNT/2000           dna      n        n    n     n
+    WinNT CW             dna      n        n    n     n
+    Mac OS X 10.2        y        n        n    n     y
+    FreeBSD              y        y        n    n     y
+    Linux 2.2            y        y        n    n     y
+    Linux 2.4 gcc   (3)  y        y        n    n     y
+    Linux 2.4 Intel (3)  y        n        n    n     y
+    Linux 2.4 PGI   (3)  y        n        n    n     y
+    Linux 2.4 IA32       y        n        n    n     y
+    Linux 2.4 IA64       y        n        n    n     y
+
+    Notes: (1) Using mpich 1.2.4.
+           (2) Using mpt and mpich 1.2.4.
+           (3) Linux 2.4 with GNU, Intel, and PGI compilers.
+           (4) No HDF4-related tools.
+           (5) Shared libraries are provided only for the C library, 
+               except on Windows where they are provided for all languages.
+           (6) Debug mode only.
+           (7) Binaries only; source code for this platform is not being 
+               released at this time.
+
+
+Known Problems
+==============
+
+    * On Linux 2.4 IA64, Fortran test fails for h5dwrite_vl_f 
+      for integer and real base datatypes.
+
+    * When fortran library is built with Intel compilers, compilation
+      for fflush1.f90, fflush2.f90 and fortanlib_test.f90 will fail 
+      complaining about EXEC function. Comment the call to EXEC subroutine
+      in each program, or get a patch for the HDF5 Fortran source code. 
+
+    * Fortran external dataset test fails on Linux 2.4 with pgf90 compiler.
+
+    * On Windows, h5dump may abort printing if a VL string is longer than 4096
+      bytes due to a compiler problem.  It'll be fixed in v1.6 release.
+
+    * Datasets or attributes which have a variable-length string datatype are
+      not printing correctly with h5dump and h5ls.
+
+    * When a dataset with the variable-length datatype is overwritten, 
+      the library can develop memory leaks that cause the file to become 
+      unnecessarily large.  This is planned to be fixed in the next release.
+
+    * On the SV1, the h5ls test fails due to a difference between the 
+      SV1 printf precision and the printf precision on other platforms.
+
+    * The h5dump tests may fail to match the expected output on some
+      platforms (e.g. SP2 parallel, Windows) where the error messages
+      directed to "stderr" do not appear in the "right order" with output
+      from stdout.  This is not an error.
+
+    * The --enable-static-exec configure flag fails to compile for HP-UX
+      11.00 platforms.
+
+    * The executables are always dynamic on IRIX64 6.5(64 and n32) and 
+      IRIX 6.5 even if they are configured with --enable-static-exec.
+
+    * IRIX 6.5 fails to compile if configured with --enable-static-exec.
+
+    * The executables are always dynamic on Solaris 2.7 ans 2.8(64 and n32)
+      even if they are configured with --enable-static-exec.
+    
+    * The HDF5_MPI_OPT_TYPES optimization code in the parallel HDF5 will cause
+      a hang in some cases when chunked storage is used.  This is now set to
+      be off by default.  One may turn it on by setting the environment 
+      variable HDF5_MPI_OPT_TYPES to a non-zero value such as 1.
+
+    * On OSF1 v5.1 and IA32 h5dumpgentst program that generates test files
+      for h5dump, gives segmentation fault.
+
+    * On Windows platforms, C and Fortran tests fail with the debug DLL version
+      of the Library if built from all_withf90.zip file.
+
+    * On Cray T3E (sn6606 2.0.6.08 unicosmk CRAY T3E) with Cray Standard C Version 6.6.0.1.3
+      compiler optimization causes errors in many HDF5 Library tests. Use -g -h zero flags
+      to build HDF5 Library. 
+
+    * On Cray SV1 10.0.1. 0 datatype convertion test fails. Please check HDF FTP site
+      if patch is available. We will try to provide one in the nearest future. 
+
+    * For configuration, building and testing with Intel and PGI compilers see
+      corresponding section in INSTALL file.
+
+
+%%%%1.4.4%%%%   Release Information for hdf5-1.4.4 (02/July/02)
+
+12.   Release information for HDF5 version 1.4.4
+==============================================================================
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.4.3 and
+HDF5-1.4.4, and contains information on the platforms tested and
+known problems in HDF5-1.4.4. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+    /HDF/HDF5/docs/
+
+For more information, see the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+
+- New Features
+- Bug Fixes since HDF5-1.4.3
+- Performance Improvements
+- Documentation
+- Platforms Tested
+- Supported Configuration Features
+- Known Problems
+
+
+New Features
+============
+  o Configuration
+  ================
+    * The H4 to H5 tools have been removed from the main source and placed 
+      in a separate package. You can get these tools from the HDF ftp site
+      (ftp://hdf.ncsa.uiuc.edu/). The "--with-hdf4" command-line option 
+      during configure is no longer valid.  BW - 2002/06/25
+
+  o Library
+  =========
+    o General
+    --------- 
+      * Fill-value forward-compatibility with release 1.5 was added.  SLU -
+        2002/04/11
+      * A new query function H5Tget_member_index has been added for compound
+        and enumeration data types.  This function retrieves a member's index 
+        by name.  SLU - 2002/04/05
+      * Added serial multi-gigabyte file size test.  "test/big -h" shows
+        the help page.  AKC - 2002/03/29
+ 
+    o APIs
+    ------
+      * The F90 subroutines h5dwrite_f, h5dread_f, h5awrite_f, and h5aread_f 
+        were overloaded with a "dims" argument of type INTEGER(HSIZE_T) to 
+        specify the size of the array.  We recommend using these subroutines 
+        with the new type; module subroutines that accept "dims" as an i
+        INTEGER array of size 7 will be deprecated in release 1.6.  
+        EIP - 2002/05/06
+ 
+    o Performance
+    -------------
+      * Added internal "small data" aggregation, which can reduce the number of
+        actual I/O calls made, improving performance.  QAK - 2002/06/05
+      * Improved internal metadata aggregation, which can reduce the number of
+        actual I/O calls made, improving performance.  Additionally, this can
+        reduce the size of files produced.  QAK - 2002/06/04
+      * Improved internal metadata caching, which can reduce the number of
+        actual I/O calls made by a substantial amount, improving
+        performance.  QAK - 2002/06/03
+
+
+  o Parallel library
+  ==================
+    * Fixed bug in parallel I/O routines where a collective I/O which used
+      MPI derived types, followed by an independent I/O would cause the library
+      to hang.  QAK 2002/06/24
+    * Added environment variable flag to control whether creating MPI derived
+      types is preferred or not.  This can affect performance, depending on
+      which way the MPI-I/O library is optimized.  The default is set to
+      prefer MPI derived types for collective raw data transfers; setting the
+      HDF5_MPI_PREFER_DERIVED_TYPES environment variable to "0" (i.e.:
+      "setenv HDF5_MPI_PREFER_DERIVED_TYPES 0") changes the preference to avoid
+      using them whenever possible.  QAK - 2002/06/19
+    * Changed MPI I/O routines to avoid creating MPI derived types (and thus
+      needing to set the file view) for contiguous selections within datasets.
+      This should result in some performance improvement for those types of
+      selections.  QAK - 2002/06/18
+    * Changed MPI type support for collective I/O to be enabled by default.
+      This can be disabled by setting the HDF5_MPI_OPT_TYPES environment
+      variable to the value "0".  QAK - 2002/06/14
+    * Allowed chunks in chunked datasets to be cached when parallel file is
+      opened for read-only access (bug #709).  QAK - 2002/06/10
+    * Changed method for allocating chunked dataset blocks to only allocate
+      blocks that don't already exist, instead of attempting to create all the
+      blocks all the time.  This improves performance for chunked
+      datasets.  QAK - 2002/05/17
+    * Allowed the call to MPI_File_sync to be avoided when the file is going to
+      immediately be closed, improving performance.  QAK - 2002/05/13
+    * Allowed the metadata writes to be shared among all processes, easing the
+      burden on process 0.  QAK - 2002/05/10
+
+
+  o Tools
+  =======
+    * h5redeploy utility was added. It updates HDF5 compiler tools
+      after the HDF5 software has been installed in a new location.
+
+
+  o Support for new platforms and languages
+  =========================================
+    * Parallel Fortran Library works now on HP-UX B.11.00 Sys V.
+      EIP - 2002/05/06
+    * Intel C++ and F90 compilers Version 6.0 are supported on Linux 2.4.
+    * Intel C++ compilers Version 6.0 are supported on Windows 2000.
+
+  
+  o Misc.
+  =========================================
+   * zlib has been moved out of the Windows source release. Users should go to
+     the ZLIB homepage(http://www.zlib.org) to download the corresponding 
+     zlib library.
+   * The Windows binary release is built with the old version of the zlib 
+     library.  We expect users to use zlib 1.1.4 to build with the source 
+     release.  
+   * In the Windows-specific install document, we specify how to test backward
+     compatibility. However, in this release, we are not testing the backward
+     compatibility of HDF5.
+
+
+Bug Fixes since HDF5-1.4.3 Release
+==================================
+    * Fixed bug in chunking routines where they were using internal allocation
+        free routines, instead of malloc/free, preventing user filters from
+        working correctly.  Chunks are now allocated/freed with malloc/free and
+        so should the chunks in user filters.  QAK 2002/06/18
+    * Fixed bug where regular hyperslab selection could get incorrectly
+        transferred when the number of elements in a row did not fit evenly
+        into the buffer provided.  QAK 2002/06/12
+    * Fixed bug (#499) which allowed an "empty" compound or enumerated datatype
+        (one with no members) to be used to create a dataset or to be committed
+        to a file.  QAK - 2002/06/11
+    * Fixed bug (#777) which allowed a compound datatype to be inserted into
+        itself.  QAK - 2002/06/10
+    * Fixed bug (#789) where creating 1-D dataset region reference caused the
+        library to go into infinite loop.  QAK - 2002/06/10
+    * Fixed bug (#699, fix provided by a user) where a scalar dataspace was
+        written to the file and then subsequently queried with the
+        H5Sget_simple_extent_type function; type was reported as H5S_SIMPLE 
+        instead of H5S_SCALAR. EIP - 2002/06/04
+    * Clear symbol table node "dirty" flag when flushing symbol tables to
+        disk, to reduce I/O calls made & improve performance.  QAK - 2002/06/03
+    * Fixed bug where an object's header could get corrupted in certain
+        obscure situations when many objects were created in the
+        file.  QAK - 2002/05/31
+    * Fixed bug where read/write intent in file IDs created with H5Freopen
+        was not being kept the same as the original file.  QAK - 2002/05/14
+    * Fixed bug where selection offsets were not being used when iterating
+        through point and hyperslab selections with
+        H5Diterate().  QAK - 2002/04/29
+    * Fixed bug where the data for several level deep nested compound &
+        variable-length datatypes used for datasets were getting corrupted when
+        written to the file.  QAK - 2002/04/17
+    * Fixed bug where selection offset was being ignored for certain hyperslab
+        selections when optimized I/O was being performed.  QAK - 2002/04/02
+    * Fixed limitation in h5dumper with object names which reached over 1024
+        characters in length. We can now handle arbitrarily larger sizes for
+        object names. BW - 2002/03/29
+    * Fixed bug where variable-length string type did not behave as a
+        string.  SLU - 2002/03/28
+    * Fixed bug in H5Gget_objinfo() which was not setting the 'fileno'
+        of the H5G_stat_t struct.  QAK - 2002/03/27
+    * Fixed data corruption bug in hyperslab routines when contiguous
+        hyperslab that spans entire dimension and is larger than type
+        conversion buffer is attempted to be read.  QAK - 2002/03/26
+
+
+Performance Improvements
+========================
+    This release of the HDF5 library has been extensively tuned to improve
+performance, especially to improve parallel I/O performance.
+    Most of the specific information for particular performance improvements
+is mentioned in the "New Features" and "Bug Fixes since HDF5-1.4.3" sections
+of this document, but in general, the library should make fewer and larger
+I/O requests when accessing a file.  Additionally, improvements to the parallel
+I/O portions of the library should have reduced the communications and barriers
+used in various internal algorithms, improving the performance of the library.
+    However, with the extensive changes to some portions of the library that
+were required for these improvements, some errors or unanticipated results may
+have been introduced also.  Please report any problems encountered to our
+support team at hdfhelp at ncsa.uiuc.edu.
+    Hopefully these improvements will benefit all HDF5 applications, but if
+there are particular I/O patterns that appear to be slower than necessary,
+please send e-mail to hdfhelp at ncsa.uiuc.edu with a sample program showing the
+problem behavior; we will look into the issue to see if it is possible to
+address it.
+
+
+Documentation
+=============
+    * Documentation was updated for the hdf5-1.4.4 release.
+    * A new "HDF5 User's Guide" is under development.  See 
+      http://hdf.ncsa.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/current/.
+    * A "Parallel HDF5 Tutorial" is available at 
+      http://hdf.ncsa.uiuc.edu/HDF5/doc/Tutor/.
+    * The "HDF5 Tutorial" is not distributed with this release.  It is 
+      available at http://hdf.ncsa.uiuc.edu/HDF5/doc/Tutor/.
+
+
+Platforms Tested
+================
+
+    AIX 4.3.3.0 (IBM SP powerpc)  xlc 5.0.2.0
+                                  mpcc_r 5.0.2.0
+                                  xlf 07.01.0000.0002
+                                  mpxlf 07.01.0000.0002
+    AIX 4.3 (IBM SP RS6000)       C for AIX Compiler, Version 5.0.2.0
+                                  xlf 7.1.0.2
+                                  poe 3.1.0.12 (includes mpi)
+    AIX 5.1                       xlc 5.0.2.0 
+                                  xlf 07.01.0000.0002
+                                  mpcc_r 5.0.2.0; mpxlf_r 07.01.0000.0002
+    Cray T3E sn6711 2.0.5.57      Cray Standard C Version 6.5.0.3
+                                  Cray Fortran Version 3.5.0.4
+    Cray SV1 10.0.1.1             Cray Standard C Version 6.5.0.3 
+                                  Cray Fortran Version 3.5.0.4
+    FreeBSD 4.6                   gcc 2.95.4
+                                  g++ 2.95.4
+    HP-UX B.10.20                 HP C  HP92453-01 A.10.32.30
+                                  HP F90 v2.3
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+    HP-UX B.11.00 SysV            HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP MPI [not a product] (03/24/2000) B6060BA
+    IRIX 6.5                      MIPSpro cc 7.30
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+    Linux 2.4.9-31smp             gcc 2.95.3
+                                  g++ 2.95.3
+                                  Intel(R) C++ Version 6.0
+                                  Intel(R) Fortran Compiler Version 6.0
+                                  MPICH 1.2.2
+    Linux 2.2.18smp               gcc 2.95.2
+                                  gcc 2.95.2 with mpich 1.2.1
+                                  g++ 2.95.2
+                                  pgf90 3.2-4
+    OSF1 V5.1                     Compaq C V6.4-014
+                                  Compaq Fortran V5.5-1877-48BBF
+                                  gcc version 3.0 for C++
+    SunOS 5.7                     WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                WorkShop Compilers 5.0 98/12/15 C++ 5.0 
+                                  WorkShop Compilers 5.0 98/10/25 
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8/32                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          Patch 109503-07 2001/08/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 Patch
+                                        109508-04 2001/07/11
+    SunOS 5.8/64                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          Patch 109503-07 2001/08/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 Patch
+                                        109508-04 2001/07/11
+    TFLOPS r1.0.4 v4.2.2 i386     pgcc Rel 3.1-4i with mpich-1.2.3 with
+                                          local modifications
+    IA-32 Linux 2.4.9             cc Intel 5.0.1
+                                  gcc 2.96
+                                  Intel(R) C++ Version 6.0
+                                  Intel(R) Fortran Compiler Version 6.0
+                                  
+    IA-64 Linux 2.4.16 ia64       gcc version 2.96 20000731
+                                  Intel(R) C++ Version 6.0
+                                  Intel(R) Fortran Compiler Version 6.0
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+    Windows NT4.0                 MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+    Windows NT4.0                 Code Warrior 6.0
+
+
+Supported Configuration Features Summary
+========================================
+
+    In the tables below
+          y  = tested and supported
+          n  = not supported or not tested in this release
+          x  = not working in this release
+         ( ) = footnote appears below second table
+
+
+    Platform           C  C         F90  F90      C++  Shared       zlib  Tools
+                          parallel       parallel      libraries(5)
+    Solaris2.6         y  n         y    n        y    y            y     y
+    Solaris2.7 64      y  y (1)     y    n        y    y            y     y
+    Solaris2.7 32      y  y (1)     y    n        y    y            y     y
+    Solaris2.8 64      y  n         y    n        y    y            y     y
+    Solaris2.8 32      y  n         y    n        y    y            y     y
+    IRIX6.5            y  y (1)     n    n        n    y            y     y
+    IRIX64_6.5 64      y  y (2)     y    y        n    y            y     y
+    IRIX64_6.5 n32     y  y (2)     n    n        n    y            y     y
+    HPUX10.20          y  n         y    n        n    y            y     y
+    HPUX11.00          y  n         y    n        n    y            y     y
+    HPUX11 SysV        y  y         y    y        n    y            y     y
+    OSF1 v5.1          y  n         y    n        y    y            y     y
+    T3E                y  y         y    y        n    n            y     y
+    SV1                y  n         y    n        n    n            y     y
+    TFLOPS             n  y (1)     n    n        n    n            y     y (4)
+    AIX-4.3            y  y         y    y        y    n            y     y
+    AIX-5.1            y  y         y    y        n    n            y     y
+    WinNT/2000         y  n         y    n        y    y            y     y
+    WinNT CW           y  n         n    n        n    n            y     y
+    FreeBSD            y  n         n    n        y    y            y     y
+    Linux 2.2          y  y (1)     y    n        y    y            y     y
+    Linux 2.4          y  y (1)     n    n        y    y            y     y
+    Linux 2.4 Intel(6) y  n         y    n        y    n            y     y
+    Linux 2.4 IA32     y  n         y    n        n    n            y     y
+    Linux 2.4 IA64     y  n         y    n        n    n            y     y
+
+
+    Platform           1.2            static-  Thread-  SRB  GASS  STREAM-
+                       compatibility  exec     safe                VFD
+    Solaris2.6         y              x        y        n    n     y
+    Solaris2.7 64      y              x        y        n    n     y
+    Solaris2.7 32      y              x        y        n    n     y
+    Solaris2.8 64      y              y        n        n    n     y
+    Solaris2.8 32      y              x        y        n    n     y
+    IRIX6.5            y              x        n        n    n     y
+    IRIX64_6.5 64      y              x        y        n    y     y
+    IRIX64_6.5 n32     y              x        y        n    y     y
+    HPUX10.20          y              y        n        n    n     y
+    HPUX11.00          y              x        n        n    n     y
+    HPUX11 SysV        y              x        n        n    n     y
+    OSF1 v5.1          y              y        n        n    n     y
+    T3E                y              y        n        n    n     y
+    SV1                y              y        n        n    n     y
+    TFLOPS             y              y        n        n    n     n
+    AIX-4.3            y              y (3)    n        n    n     y
+    AIX-5.1            y              y        n        n    n     y
+    WinNT/2000         y              y        n        n    n     n
+    WinNT CW           n              n        n        n    n     n
+    FreeBSD            y              y        y        n    n     y
+    Linux 2.2          y              y        y        n    n     y
+    Linux 2.4          y              y        y        n    n     y
+    Linux 2.4 Intel(6) y              y        n        n    n     y
+    Linux 2.4 IA32     y              y        n        n    n     y
+    Linux 2.4 IA64     y              y        n        n    n     y
+
+
+    Footnotes: (1) Using mpich.
+               (2) Using mpt and mpich.
+               (3) When configured with static-exec enabled, tests fail in 
+                   serial mode.
+               (4) No HDF4-related tools.
+               (5) Shared libraries are provided only for the C library, 
+                   except on Windows where they are provided for all languages.
+               (6) Linux 2.4 with Intel compilers.
+
+
+Known Problems
+==============
+
+    * Datasets or attributes which have a variable-length string datatype are
+      not printing correctly with h5dump and h5ls.
+
+    * When a dataset with the variable-length datatype is overwritten, 
+      the library can develop memory leaks that cause the file to become 
+      unnecessarily large.  This is planned to be fixed in the next release.
+
+    * On the SV1, the h5ls test fails due to a difference between the 
+      SV1 printf precision and the printf precision on other platforms.
+
+    * The h5dump tests may fail to match the expected output on some
+      platforms (e.g. SP2 parallel, Windows) where the error messages
+      directed to "stderr" do not appear in the "right order" with output
+      from stdout.  This is not an error.
+
+    * The --enable-static-exec configure flag fails to compile for HP-UX
+      11.00 platforms.
+
+    * The executables are always dynamic on IRIX64 6.5(64 and n32) and 
+      IRIX 6.5 even if they are configured with --enable-static-exec.
+
+    * IRIX 6.5 fails to compile if configured with --enable-static-exec.
+    
+    * The HDF5_MPI_OPT_TYPES optimization code in the parallel HDF5 will cause
+      a hang in some cases when chunked storage is used.  This is now set to
+      be off by default.  One may turn it on by setting the environment 
+      variable HDF5_MPI_OPT_TYPES to a non-zero value such as 1.
+
+    * On IA32 and IA64 systems, if you use a compiler other than GCC (such as
+      Intel's ecc or icc compilers), you will need to modify the generated
+      "libtool" program after configuration is finished. On or around line 104
+      of the libtool file, there are lines which look like:
+
+          # How to pass a linker flag through the compiler.
+          wl=""
+
+      Change these lines to this:
+
+          # How to pass a linker flag through the compiler.
+          wl="-Wl,"
+
+    * To build the Fortran library using Intel compilers, one has to 
+          x modify the source code in the fortran/src directory to remove the
+            !DEC and !MS compiler directives.
+          x The build will fail in the fortran/test directory and then in the
+            fortran/examples directory; to proceed, edit the work.pcl files in
+            those directories to contain two lines
+
+                    work.pc
+                    ../src/work.pc 
+
+    * To build the Fortran library on IA64 use
+                   setenv CC "ecc -DIA64"
+                   setenv F9X "efc -cl,work.pcl"
+            before running configure and see the steps described above.
+
+
+%%%%1.4.3%%%%   Release Information for hdf5-1.4.3 (18/Februaru/02)
+
+11.  Release information for HDF5 version 1.4.3
+==============================================================================
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.4.2 and
+HDF5-1.4.3, and contains information on the platforms tested and
+known problems in HDF5-1.4.2. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+
+- New Features
+- Bug Fixes since HDF5-1.4.2
+- Documentation
+- Platforms Tested
+- Supported Configuration Features
+- Known Problems
+
+
+New Features
+============
+  o Configuration
+  ================
+    * Can use just enable-threadsafe if the C compiler has built-in pthreads
+      support.
+
+  o Library
+  =========
+   o General
+   --------- 
+    * Added a new test to verify the information provided by the configure
+      command.
+    * Changed internal error handling macros to reduce code size of library by
+      about 10%.
+
+   o APIs
+   ------
+    * Changed prototype for H5Awrite from:
+        H5Awrite(hid_t attr_id, hid_t type_id, void *buf)
+      to:
+        H5Awrite(hid_t attr_id, hid_t type_id, const void *buf)
+    * The H5Pset_fapl_split() accepts raw and meta file names similar to the
+      syntax of H5Pset_fapl_multi() in addition to what it used to accept.
+
+    C++ API:
+    * Added operator= to class PredType
+    * Add the overloaded member function Attribute::getName to return
+      the attribute name's length as in C API.  Note that the current
+      Attribute::getName, that returns "string", is still available.
+    * Following the change in the C library, the corresponding C++ API
+      is changed from:
+        void Attribute::write( const DataType& mem_type, void *buf )
+      to:
+        void Attribute::write( const DataType& mem_type, const void *buf )
+
+   o Performance
+   -------------
+    * Added perform programs to test the HDF5 library performance.  Programs
+      are installed in directory perform/.
+    * Improved performance of byte-swapping during data conversions.
+    * Improved performance of single, contiguous hyperslabs when reading or
+      writing.
+    * Added support to read/write portions of chunks directly, if they are
+      uncompressed and too large to cache.  This should speed up I/O on chunked
+      datasets for a few more cases.  -QAK, 1/31/02
+
+  o Parallel Library
+  ==================
+    * Parallel C HDF5 now works on HP-UX platforms, Compaq clusters,
+      Linux clusters, Cplants (alpha-linux clusters).
+
+  o Tools
+  =======
+    * A helper script called ``h5cc'', which helps compilation of HDF5
+      programs, is now distributed with HDF5. See the reference manual
+      for information on how to use this feature.
+    * The H5Dumper can now dump comments associated with groups. -WCW 01-05-02
+
+  o Support for new platforms and languages
+  =========================================
+    * HDF5 C++ Library is supported on Windows platforms (shared and static)
+    * HDF5 F90 shared library is supported on Windows platforms.
+    * HDF5 C Library is supported on IA32 and IA64 platforms.
+
+
+
+Bug Fixes since HDF5-1.4.2 Release
+==================================
+
+    * Fixed a bug when reading chunked datasets where the edge of the dataset
+      would be incorrectly detected and generate an assertion failure.
+    * Fixed a bug where reading an entire dataset wasn't being handled
+      optimally when the dataset had unlimited dimensions.  Dataset is read
+      in a single low-level I/O now, instead of being broken into separate
+      pieces internally.
+    * Fixed a bug where reading or writing chunked data which needed datatype
+      conversion could result in data values getting corrupted.
+    * Fixed a bug where appending a point selection to the current selection
+      would not actually append the point when there were no points defined
+      currently.
+    * Fixed a bug where 'or'ing a hyperslab with a 'none' selection would
+      fail.  Now adds that hyperslab as the first hyperlab in the selection.
+    * Fixed a bug in the 'big' test where quota limits weren't being detected
+      properly if they caused close() to fail.
+    * Fixed a bug in internal B-tree code where a B-tree was not being copied
+      correctly.
+    * Fixed an off-by-one error in H5Sselect_valid when hyperslab selections
+      which would allow hyperslab selections which overlapped the edge of the
+      selection by one element as valid.
+    * Fixed the internal macros used to encode & decode file metadata, to avoid
+      an unaligned access warning on IA64 machines.
+    * Corrected behavior of H5Tinsert to not allow compound datatype fields to
+      be inserted past the end of the datatype.
+    * Retired the DPSS virtual file driver (--with-gridstorage configure
+      option).
+    * Fixed bug where variable-length datatypes for attributes was not working
+      correctly.
+    * Fixed bug where raw data re-allocated from the free-list would sometimes
+      overlap with the metadata accumulator and get corrupted. QAK - 1/23/02
+    * Fixed bug where a preempted chunk in the chunk data could still be
+      used by an internal pointer and cause an assertion failure or core
+      dump. QAK - 2/13/02
+    * Fixed bug where non-zero fill-value was not being read correctly from
+      certain chunked datasets when using an "all" or contiguous hyperslab
+      selection.  QAK - 2/14/02
+
+
+Documentation
+=============
+    * Documentation was updated for the hdf5-1.4.3 release.
+    * A new "HDF5 User's Guide" is under development.  See 
+      http://hdf.ncsa.uiuc.edu/HDF5/doc_dev_snapshot/H5_NewUG/current/.
+    * Parallel Tutorial is available at http://hdf.ncsa.uiuc.edu/HDF5/doc/Tutor/
+
+
+Platforms Tested
+================
+
+    AIX 4.3.3.0 (IBM SP powerpc)  xlc 5.0.2.0
+                                  mpcc_r 5.0.2.0
+                                  xlf 07.01.0000.0002
+                                  mpxlf 07.01.0000.0002
+    AIX 4.3 (IBM SP RS6000)       C for AIX Compiler, Version 5.0.2.0
+                                  xlf 7.1.0.2
+                                  poe 3.1.0.12 (includes mpi)
+    Cray T3E sn6711 2.0.5.57      Cray Standard C Version 6.5.0.3
+                                  Cray Fortran Version 3.5.0.4
+    Cray SV1 10.0.0.8             Cray Standard C Version 6.5.0.3 
+                                  Cray Fortran Version 3.5.0.4
+    FreeBSD 4.5                   gcc 2.95.3
+                                  g++ 2.95.3
+    HP-UX B.10.20                 HP C  HP92453-01 A.10.32.30
+                                  HP F90 v2.3
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+    HP-UX B.11.00 SysV            HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP MPI [not a product] (03/24/2000) B6060BA
+    IRIX 6.5                      MIPSpro cc 7.30
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.2m
+    Linux 2.4.4                   gcc 2.95.3
+                                  g++ 2.95.3
+    Linux 2.2.18smp               gcc 2.95.2
+                                  gcc 2.95.2 with mpich 1.2.1
+                                  g++ 2.95.2
+                                  pgf90 3.2-4
+    OSF1 V5.1                     Compaq C V6.3-028         
+                                  Compaq Fortran V5.4-1283
+    SunOS 5.7                     WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                Workshop Compilers 5.0 98/12/15 C++ 5.0 
+                                  Workshop Compilers 5.0 98/10/25 
+                                  FORTRAN 90 2.0 Patch 107356-04 
+    SunOS 5.8/32                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          Patch 109503-07 2001/08/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 Patch
+                                        109508-04 2001/07/11
+    SunOS 5.8/64                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          Patch 109503-07 2001/08/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 Patch
+                                        109508-04 2001/07/11
+    TFLOPS r1.0.4 v4.0.8 i386     pgcc Rel 3.1-4i with mpich-1.2.1 with
+                                          local modifications
+    IA-32 Linux 2.2.10smpx        cc Intel 5.0.1
+                                  egcs-2.91.66
+    IA-64 Linux 2.4.16 ia64       gcc version 2.96 20000731
+                                  Intel(R) C++ Itanium(TM) Compiler 
+                                  for the Itanium(TM)-based applications,
+                                  Version 6.0 Beta, Build 20010905       
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+    Windows NT4.0                 MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+    Windows NT4.0                 Code Warrior 6.0
+    Windows 98                    MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+
+
+Supported Configuration Features Summary
+========================================
+
+    In the tables below
+          y  = tested and supported
+          n  = not supported or not tested in this release
+          x  = not working in this release
+         ( ) = footnote appears below second table
+
+
+    Platform       C  C         F90  F90       C++   Shared     zlib  Tools
+                      parallel       parallel        libraries
+                                                     (5)
+    Solaris2.7     y  y (1)     y    n         y     y          y     y
+    Solaris2.8 64  y  n         y    n         y     y          y     y
+    Solaris2.8 32  y  n         y    n         y     y          y     y
+    IA-64          y  n         n    n         n     n          y     y 
+    IRIX6.5        y  y (1)     n    n         n     y          y     y
+    IRIX64_6.5 64  y  y (2)     y    y         n     y          y     y
+    IRIX64_6.5 32  y  y (2)     n    n         n     y          y     y
+    HPUX10.20      y  n         y    n         n     y          y     y
+    HPUX11.00      y  y         y    n         n     y          y     y
+    HPUX11 SysV    y  y         y    n         n     y          y     y
+    DECOSF         y  n         y    n         y     y          y     y
+    T3E            y  y         y    y         n     n          y     y
+    SV1            y  n         y    n         n     n          y     y
+    TFLOPS         y  y (1)     n    n         n     n          y     y (4)
+    AIX-4.3 SP2    y  y         y    y         n     n          y     n
+    AIX-4.3 SP3    y  y         y    y         y     n          y     n
+    Win2000        y  n         y    n         y (6) y          y     y
+    Win98          y  n         y    n         y (6) y          y     y
+    WinNT          y  n         y    n         y (6) y          y     y
+    WinNT CW       y  n         n    n         n     n          y     y
+    FreeBSD        y  n         n    n         y     y          y     y
+    Linux 2.2      y  y (1)     y    n         y     y          y     y
+    Linux 2.4      y  y (1)     n    n         y     y          y     y
+
+
+    Platform       1.2            static-   Thread-  SRB  GASS	STREAM-
+                   compatibility  exec      safe                VFD
+    Solaris2.7     n              x         y        n    n     y
+    Solaris2.8 64  n              y         n        n    n     y
+    Solaris2.8 32  n              x         n        n    n     y
+    IA-64          n              n         n        n    n     y   
+    IRIX6.5        n              x         y        n    n     y
+    IRIX64_6.5 64  n              x         y        n    y     y
+    IRIX64_6.5 32  n              x         y        n    y     y
+    HPUX10.20      n              y         n        n    n     y
+    HPUX11.00      n              x         n        n    n     y
+    HPUX11 SysV    n              x         n        n    n     y
+    DECOSF         n              y         n        n    n     y
+    T3E            n              y         n        n    n     y
+    SV1            n              y         n        n    n     y
+    TFLOPS         n              y         n        n    n     n
+    AIX-4.3 SP2    n              y (3)     n        n    n     y
+    AIX-4.3 SP3    n              y         n        n    n     y
+    Win2000        n              y         n        n    n     n
+    Win98          n              y         n        n    n     n
+    WinNT          n              y         n        n    n     n
+    WinNT CW       n              n         n        n    n     n
+    FreeBSD        n              y         y        n    n     y
+    Linux 2.2      n              y         y        n    n     y
+    Linux 2.4      n              y         y        n    n     y
+
+
+    Footnotes:  (1) Using mpich.
+                (2) Using mpt and mpich.
+                (3) When configured with static-exec enabled, tests fail 
+                    in serial mode.
+                (4) No HDF4-related tools.
+                (5) Shared libraries are provided only for the C library.
+		(6) Exception of (5): DLL is available for C++ API on Windows
+
+
+Known Problems
+==============
+
+    * Datasets or attributes which have a variable-length string datatype are
+      not printing correctly with h5dump and h5ls.
+
+    * When a dataset with the variable-legth datatype is overwritten, 
+      the library can develop memory leaks that cause the file to become 
+      unnecessarily large.  This is planned to be fixed in the next release.
+
+    * On the SV1, the h5ls test fails due to a difference between the 
+      SV1 printf precision and the printf precision on other platforms.
+
+
+    * The h5dump tests may fail to match the expected output in some
+      platforms (e.g. SP2 parallel, Windows) where the error messages
+      directed to "stderr" do not appear in the "right order" with output
+      from stdout.  This is not an error.
+
+    * The --enable-static-exec configure flag fails to compile for HP-UX
+      11.00 platforms.
+
+    * The executables are always dynamic on IRIX64 6.5(64 and n32) and 
+      IRIX 6.5 even if they are configured with --enable-static-exec.
+
+    * IRIX 6.5 fails to compile if configured with --enable-static-exec.
+    
+    * The HDF5_MPI_OPT_TYPES optimization code in the parallel HDF5 will cause
+      a hang in some cases when chunked storage is used.  This is now set to
+      be off by default.  One may turn it on by setting environment variable
+      HDF5_MPI_OPT_TYPES to a non-zero value such as 1.
+
+    * On IA64 systems one has to use -DIA64 compilation flag to compile
+      h4toh5 and h5toh4 utilites. After configuration step manually modify
+      Makefile in the tools/h4toh4 and tools/h5toh4 directories to add 
+      -DIA64 to the compilation flags.
+
+    * On IA32 ansd IA64 systems, if you use a compiler other than GCC 
+      (such as Intel's ecc compiler), you will need to modify the generated
+      "libtool" program after configuration is finished. On or around line 102 
+      of the libtool file, there are lines which look like:
+
+          # How to pass a linker flag through the compiler.
+          wl=""
+
+      change the lines to this:
+
+          # How to pass a linker flag through the compiler.
+          wl="-Wl,"
+
+
+%%%%1.4.2%%%%   Release Information for hdf5-1.4.2 (31/July/01)
+
+10.   Release Information for hdf5-1.4.2 
+=================================================================
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.4.1 and
+HDF5-1.4.2, and contains information on the platforms tested and
+known problems in HDF5-1.4.2.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+
+- New Features
+- Bug Fixes since HDF5-1.4.1
+- Documentation
+- Platforms Tested
+- Supported Configuration Features
+- Known Problems
+
+
+New Features
+============
+
+    * File sizes greater than 2GB are now supported on Linux systems with
+      version 2.4.x or higher kernels.
+    * Added a global string variable H5_lib_vers_info_g which holds the
+      HDF5 library version information.  This can be used to identify
+      an hdf5 library or hdf5 application binary.
+      Also added a verification of the consistency between H5_lib_vers_info_g
+      and other version information in the source code.
+    * Parallel HDF5 now runs on the HP V2500 and HP N4000 machines.
+    * F90 API:
+        - Added aditional parameter "dims" to the h5dread_f/h5dwrite_f and
+          h5aread_f/h5awrite_f subroutines.  This parameter is a 1-D array 
+          of size 7 and contains the sizes of the data buffer dimensions. 
+          This change enables portability between Windows and UNIX platforms.
+          In previous versions of the F90 APIs, the data buffer parameters of 
+          the above functions were declared as assumed-shape arrays, which 
+          were passed to the C functions by a descriptor.  There is no 
+          portable means, however, of passing descriptors from F90 to C, 
+          causing portability problems between Windows and UNIX and among
+          UNIX platforms.  With this change, the data buffers are assumed-
+          size arrays, which can be portably passed to the C functions.
+    * F90 static library is available on Windows platforms. 
+      See INSTALL_Windows_withF90.txt for details.
+    * F90 APIs are available on HPUX 11.00 and 10.20 and IBM SP platforms.
+    * H5 <-> GIF convertor has been added. This is available under 
+      tools/gifconv. The convertor supports the ability to create animated
+      gifs as well.
+    * Verified correct operation of library on Solaris 2.8 in both 64-bit and
+      32-bit compilation modes.  See INSTALL document for instructions on
+      compiling the distribution with 64-bit support.
+    * Added support for the Metrowerks Code Warrior compiler for Windows.  
+    * For H4->H5 converter utility, added a new option to choose not to convert
+      HDF4 specified attributes(reference number, class) into HDF5 attributes.
+    * Added support chunking and compression in SDS and image in H4->H5 converter. 
+      Currently HDF5 only supports gzip compression, so by default an HDF4 file 
+      with any other compression method will be converted into an HDF5 file in 
+      gzip compression. 
+    * correct the order or reading HDF4 image array in H4->H5 conversion.  
+    * Added new parallel hdf5 tests in t_mpi.  The new test checks if the
+      filesystem or the MPI-IO can really handle greater than 2GB files.
+      If it fails, it prints information message only without failing the
+      test.
+    * Added a parallel HDF5 example examples/ph5example.c to illustrate
+      the basic way of using parallel HDF5.
+    * Added a new public macro, H5_VERS_INFO, which is a string holding
+      the HDF5 library version information.  This string is also compiled
+      into all HDF5 binary code which helps to identify the version information
+      of the binary code.  One may use the Unix strings command on the binary
+      file and looks for the pattern "HDF5 library version".
+    * Added new checking in H5check_version() to verify the five HDF5 version
+      information macros (H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE,
+      H5_VERS_SUBRELEASE and H5_VERS_INFO) are consistent.
+      
+         
+Bug Fixes since HDF5-1.4.1 Release
+==================================
+
+    * Fixed bug with non-zero userblock sizes causing raw data to not
+      write correctly.
+    * Fixed problems with Pablo build and linking with non-standard MPI I/O.
+    * Fixed build on Linux systems with --enable-static-exec flag. It now
+      works correctly.
+    * IMPORTANT: Fixed file metadata corruption bug which could cause 
+      metadata data loss in certain situations.
+    * The allocation by alignment (H5Pset_alignment) feature code somehow
+      got dropped in some 1.3.x version. Re-implemented it with "new and
+      improved" algorithm.  It keeps track of "wasted" file-fragment in
+      the free-list too.
+    * Removed limitation that the data transfer buffer size needed to be
+      set for datasets whose dimensions were too large for the 'all' 
+      selection code to handle.  Any size dimensioned datasets should be 
+      handled correctly now.
+    * Changed behavior of H5Tget_member_type to correctly emulate HDF5 v1.2.x
+      when --enable-hdf5v1_2 configure flag is enabled.
+    * Added --enable-linux-lfs flag to allow more control over whether to 
+      enable or disable large file support on Linux.
+    * Fixed various bugs releated to SDS dimensional scale conversions in H4->H5 
+      converter.
+    * Fixed a bug to correctly convert HDF4 objects with fill value into HDF5.
+    * Fixed a bug of H5pubconf.h causing repeated definitions if it is included
+      more than once.  hdf5.h now includes H5public.h which includes
+      H5pubconf.h.  Applications should #include hdf5.h which handles multiple
+      inclusion correctly.
+    * Fixed H5FDmpio.h to be C++ friendly by making Parallel HDF5 API's to be
+      external to C++.
+    * Fixed a bug in H5FD_mpio_flush() that might result in negative file seek
+      if both MPIO and Split-file drivers are used together.
+
+
+
+Documentation
+=============
+
+    * The H5T_conv_t and H5T_cdata_t structures are now properly defined
+      in the H5Tregister entry in the "H5T" section of the "HDF5 Reference 
+      Manual" and described in detail in section 12, "Data Conversions," in 
+      the "Datatypes" chapter of the "HDF5 User's Guide."
+    * The new tools h52gif and gif2h5 have been added to the "Tools" section
+      of the Reference Manual.
+    * A "Freespace Management" section has been added to the "Performance" 
+      chapter of the User's Guide.
+    * Several user-reported bugs have been fixed since Release 1.4.1.
+    * The "HDF5 Image and Palette Specification" (in the "HDF5 Application
+      Developer's Guide") has been heavily revised.  Based on extensive user 
+      feedback and input from visualization software developers, Version 1.2 
+      of the image specification is substantially different from prior 
+      versions.
+
+
+Platforms Tested
+================
+
+    AIX 4.3.3.0 (IBM SP powerpc)  xlc 3.6.6.0
+                                  mpcc_r 3.6.6.0
+                                  xlf 07.01.0000.0002
+                                  mpxlf 07.01.0000.0002
+    AIX 4.3 (IBM SP RS6000)       C for AIX Compiler, Version 5.0.2.0
+                                  xlf 7.1.0.2
+                                  poe 2.4.0.14 (includes mpi)
+    Cray T3E sn6711 2.0.5.49a     Cray Standard C Version 6.5.0.1
+    Cray SV1 10.0.0.2             Cray Standard C Version 6.5.0.1  
+                                  Cray Fortran Version 3.5.0.1
+    FreeBSD 4.3                   gcc 2.95.3
+                                  g++ 2.95.3
+    HP-UX B.10.20                 HP C  HP92453-01 A.10.32.30
+                                  HP F90 v2.3
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+    HP-UX B.11.00 SysV            HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+    IRIX 6.5                      MIPSpro cc 7.30
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.2m
+    Linux 2.4.4                   gcc 2.95.3
+                                  g++ 2.95.3
+    Linux 2.2.18smp               gcc 2.95.2
+                                  gcc 2.95.2 with mpich 1.2.1
+                                  g++ 2.95.2
+                                  pgf90 3.2-4
+    OSF1 V4.0                     DEC-V5.2-040 on Digital UNIX V4.0 (Rev 564)
+                                  Digital Fortran 90 V4.1-270
+    SunOS 5.6                     WorkShop Compilers 5.0 98/12/15 C 5.0 
+     (Solaris 2.6)                WorkShop Compilers 5.0 98/10/25 FORTRAN 90 
+                                          2.0 Patch 107356-04
+    SunOS 5.7                     WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                Workshop Compilers 5.0 98/12/15 C++ 5.0 
+                                  Workshop Compilers 5.0 98/10/25 FORTRAN 90
+                                          2.0 Patch 107356-04 
+    SunOS 5.8/32                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          2000/09/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 2000/09/11
+    SunOS 5.8/64                  Sun WorkShop 6 update 1 C 5.2 2000/09/11
+     (Solaris 2.8)                Sun WorkShop 6 update 1 Fortran 95 6.1 
+                                          2000/09/11
+                                  Sun WorkShop 6 update 1 C++ 5.2 2000/09/11
+    TFLOPS r1.0.4 v4.0.7 i386     pgcc Rel 3.1-4i with mpich-1.2.1 with
+                                          local modifications
+    Windows 2000 (NT5.0)          MSVC++ 6.0
+    Windows NT4.0                 MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+    Windows NT4.0                 Code Warrior 6.0
+    Windows 98                    MSVC++ 6.0
+                                  DEC Visual Fortran 6.0
+
+
+Supported Configuration Features Summary
+========================================
+
+    In the tables below
+          y  = tested and supported
+          n  = not supported or not tested in this release
+          x  = not working in this release
+         ( ) = footnote appears below second table
+
+
+    Platform       C  C         F90  F90       C++  Shared     zlib  Tools
+                      parallel       parallel       libraries
+                                                    (5)
+    Solaris2.6     y  n         y    n         y    y          y     y
+    Solaris2.7     y  y (1)     y    n         y    y          y     y
+    Solaris2.8 64  y  n         n    n         y    y          y     y
+    Solaris2.8 32  y  n         y    n         y    y          y     y
+    IRIX6.5        y  y (1)     n    n         n    y          y     y
+    IRIX64_6.5 64  y  y (2)     y    y         n    y          y     y
+    IRIX64_6.5 32  y  y (2)     n    n         n    y          y     y
+    HPUX10.20      y  n         y    n         n    y          y     y
+    HPUX11.00      y  n         y    n         n    y          y     y
+    HPUX11 SysV    y  n         y    n         n    y          y     y
+    DECOSF         y  n         y    n         n    y          y     y
+    T3E            y  y         y    y         n    n          y     y
+    SV1            y  n         y    n         n    n          y     y
+    TFLOPS         y  y (1)     n    n         n    n          y     y (4)
+    AIX-4.3 SP2    y  y         y    y         n    n          y     n
+    AIX-4.3 SP3    y  y         y    y         n    n          y     n
+    Win2000        y  n         n    n         n    y          y     y
+    Win98          y  n         y    n         n    y          y     y
+    WinNT          y  n         y    n         n    y          y     y
+    WinNT CW       y  n         n    n         n    n          y     y
+    FreeBSD        y  n         n    n         y    y          y     y
+    Linux 2.2      y  y (1)     y    n         y    y          y     y
+    Linux 2.4      y  y (1)     n    n         y    y          y     y
+
+
+    Platform       1.2            static-   Thread-  SRB  GASS	STREAM-
+                   compatibility  exec      safe                VFD
+    Solaris2.6     y              x         n        n    n     y
+    Solaris2.7     y              x         y        n    n     y
+    Solaris2.8 64  y              y         n        n    n     y
+    Solaris2.8 32  y              x         n        n    n     y
+    IRIX6.5        y              x         y        n    n     y
+    IRIX64_6.5 64  y              x         n        n    n     y
+    IRIX64_6.5 32  y              x         n        n    n     y
+    HPUX10.20      y              y         n        n    n     y
+    HPUX11.00      y              x         n        n    n     y
+    HPUX11 SysV    y              x         n        n    n     y
+    DECOSF         y              y         n        n    n     y
+    T3E            y              y         n        n    n     y
+    SV1            y              y         n        n    n     y
+    TFLOPS         y              y         n        n    n     n
+    AIX-4.3 SP2    y              y (3)     n        n    n     y
+    AIX-4.3 SP3    y              y         n        n    n     y
+    Win2000        y              y         n        n    n     n
+    Win98          n              y         n        n    n     n
+    WinNT          y              y         n        n    n     n
+    WinNT CW       n              n         n        n    n     n
+    FreeBSD        y              y         n        n    n     y
+    Linux 2.2      y              y         y        n    n     y
+    Linux 2.4      y              y         y        n    n     y
+
+
+    Footnotes:  (1) Using mpich.
+                (2) Using mpt and mpich.
+                (3) When configured with static-exec enabled, tests fail 
+                    in serial mode.
+                (4) No HDF4-related tools.
+                (5) Shared libraries are provided only for the C library.
+
+
+Known Problems
+==============
+
+    * When a dataset with the variable-legth datatype is overwritten, 
+      the library can develop memory leaks that cause the file to become 
+      unnecessarily large.  This is planned to be fixed in the next release.
+
+    * On the SV1, the h5ls test fails due to a difference between the 
+      SV1 printf precision and the printf precision on other platforms.
+
+    * The h5dump tests may fail to match the expected output in some
+      platforms (e.g. SP2 parallel, Windows) where the error messages
+      directed to "stderr" do not appear in the "right order" with output
+      from stdout.  This is not an error.
+
+    * The --enable-static-exec configure flag fails to compile for HP-UX
+      11.00 platforms.
+
+    * The executables are always dynamic on IRIX64 6.5(64 and n32) and 
+      IRIX 6.5 even if they are configured with --enable-static-exec.
+
+    * IRIX 6.5 fails to compile if configured with --enable-static-exec.
+    
+    * For 24-bit image conversion from H4->H5, the current conversion is
+      not consistent with HDF5 image specification. 
+
+    * In some cases, and SDS with an UNLIMITED dimension that has not
+      been written (current size = 0) is not converted correctly.
+
+    * After "make install" or "make install-doc" one may need to reload
+      the source from the tar file before doing another build.
+
+    * The HDF5_MPI_OPT_TYPES optimization code in the parallel HDF5 will cause
+      a hang in some cases when chunked storage is used.  This is now set to
+      be off by default.  One may turn it on by setting environment variable
+      HDF5_MPI_OPT_TYPES to a non-zero value such as 1.
+
+%%%%1.4.1%%%%   Release Information for hdf5-1.4.1 (April/01)
+
+9.   Release Information for hdf5-1.4.1 (April/01)
+=====================================================================
+
+
+ 
+                       HDF5 Release 1.4.1
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.4.0 and
+HDF5-1.4.1, and contains information on the platforms tested and
+known problems in HDF5-1.4.1.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+
+- New Features
+- Bug Fixes since HDF5-1.4.0
+- Documentation
+- Platforms Tested
+- Supported Configuration Features
+- Known Problems
+
+
+New Features
+============
+
+   * XML output option for h5dump utility.
+  
+     A new option --xml to output data in XML format has been added. The
+     XML output contains a complete description of the file, marked up in
+     XML. 
+
+     The XML conforms to the HDF5 Document Type Definition (DTD), which
+     is available at:
+
+       http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.dtd
+
+     The XML output is suitable for use with other tools, including the
+     Java Tools:
+
+       http://hdf.ncsa.uiuc.edu/java-hdf5-html
+
+
+Bug Fixes since HDF5-1.4.0 Release
+==================================
+
+   * h4toh5 utility: conversion of images is fixed
+
+     Earlier releases of the h4toh5 utility produced images that did not
+     correctly conform to the HDF5 Image and Palette Specification.
+
+       http://hdf.ncsa.uiuc.edu/HDF5/doc/ImageSpec.html
+
+     Several required HDF5 attributes are omitted, and the dataspace
+     is reversed (i.e., the ht. and width of the image dataset is
+     incorrectly described.)  For more information, please see:
+
+       http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageDetails.htm
+
+   * Fixed bug with contiguous hyperslabs not being detected, causing
+     slower I/O than necessary.
+   * Fixed bug where non-aligned hyperslab I/O on chunked datasets was
+     causing errors during I/O
+   * The RCSID string in H5public.h was causing the C++ compiling problem
+     because when it was included multiple times, C++ did not like
+     multiple definitions of the same static variable. All occurance of
+     RCSID definition are removed since we have not used it consistently
+     before.
+
+
+Documentation
+=============
+
+    PDF and Postscript versions of the following documents are available 
+    for this release:
+        Document                                 Filename
+        --------                                 --------
+        Introduction to HDF5                     H5-R141-Introduction.pdf
+        HDF5 Reference Manual                    H5-R141-RefManual.pdf 
+        C++ APIs to HDF5 documents               H5-R141-Cplusplus.pdf
+        Fortran90 APIs to HDF5 documents         H5-R141-Fortran90.pdf
+
+        PDF and Postscript files containing      H5-R141-DocSet.pdf
+            all of the above                     H5-R141-DocSet.ps
+
+    These files are not included in this distribution, but are available 
+    via the Web or FTP at the following locations:
+        http://hdf.ncsa.uiuc.edu/HDF5/doc/PSandPDF/
+        ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/docs/
+
+    While these documents are labeled Release 1.4.1, they describe 
+    Release 1.4.0 as well.  
+
+
+Platforms Tested
+================
+
+Due to the nature of this release only C, C++ libraries and tools were tested.
+
+    AIX 4.3.3.0 (IBM SP powerpc)  xlc 3.6.6
+                                  mpcc_r 3.6.6
+    Cray T3E sn6711 2.0.5.47      Cray Standard C Version 6.5.0.0
+    Cray SV1 10.0.0.8             Cray Standard C Version 6.5.0.0
+    FreeBSD 4.3                   gcc 2.95.2
+    HP-UX B.10.20                 HP C  HP92453-01 A.10.32.30
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20
+    IRIX 6.5                      MIPSpro cc 7.30
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1m
+    Linux 2.2.18smp               gcc-2.95.2
+                                  g++ 2.95.2
+    OSF1 V4.0                     DEC-V5.2-040
+                                  Digital Fortran 90 V4.1-270
+    SunOS 5.6                     WorkShop Compilers 5.0 98/12/15 C 5.0 
+     (Solaris 2.6)                
+
+    SunOS 5.7                     WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                Workshop Compilers 5.0 98/12/15 C++ 5.0
+    TFLOPS r1.0.4 v4.0            mpich-1.2.1 with local changes
+    Windows NT4.0, 2000 (NT5.0)   MSVC++ 6.0
+    Windows 98                    MSVC++ 6.0
+
+
+Supported Configuration Features Summary
+========================================
+
+    * See "Supported Configuration Features Summary" section for the HDF5
+      1.4.0 release in the HISTORY.txt file.
+
+Known Problems
+==============
+
+    * The h5dump tests may fail to match the expected output in some
+      platforms (e.g. SP2 parallel, Windows) where the error messages
+      directed to "stderr" do not appear in the "right order" with output
+      from stdout.  This is not an error.
+
+    * The --enable-static-exec configure flag fails to compile for HP-UX
+      11.00 platforms.
+
+    * The executable are always dynamic on IRIX64 6.5(64 and n32) and 
+      IRIX 6.5 even if they are configured with --enable-static-exec.
+
+    * The shared library failed compilation on IRIX 6.5.
+    
+    * After "make install" or "make install-doc" one may need to reload the source
+      from the tar file before doing another build.
+
+    * See "Known problems" section for the HDF5 1.4.0 release in the
+      HISTORY.txt file.
+
+%%%%1.4.0%%%%   Release Information for hdf5-1.4.0 (2/22/01)
+
+8.  Release Information for hdf5-1.4.0
+===================================================================
+ 
+                       HDF5 Release 1.4.0
+
+
+INTRODUCTION
+
+This document describes the differences between HDF5-1.2.0 and
+HDF5-1.4.0, and contains information on the platforms tested and
+known problems in HDF5-1.4.0. For more details check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+
+- New Features
+- h4toh5 Utility 
+- F90 Support
+- C++ Support
+- Pablo Support 
+- Bug Fixes since HDF5-1.2.0 
+- Bug Fixes since HDF5-1.4.0-beta2
+- Bug Fixes since HDF5-1.4.0
+- Documentation
+- Platforms Tested
+- Supported Configuration Features
+- Known Problems
+
+
+New Features
+============
+   * The Virtual File Layer, VFL, was added to replace the old file
+     drivers. It also provides an API for user defined file drivers.
+   * New features added to snapshots. Use 'snapshot help' to see a
+     complete list of features.
+   * Improved configure to detect if MPIO routines are available when
+     parallel mode is requested.
+   * Added Thread-Safe support. Phase I implemented. See:
+
+        http://hdf.ncsa.uiuc.edu/HDF5/papers/mthdf/MTHDFpaper.htm
+
+     for more details.
+   * Added data sieve buffering to raw data I/O path. This is enabled
+     for all VFL drivers except the mpio & core drivers. Setting the
+     sieve buffer size is controlled with the new API function,
+     H5Pset_sieve_buf_size(), and retrieved with H5Pget_sieve_buf_size().
+   * Added new Virtual File Driver, Stream VFD, to send/receive entire
+     HDF5 files via socket connections.
+   * As parts of VFL, HDF-GASS and HDF-SRB are also added to this
+     release. To find out details, please read INSTALL_VFL file. 
+   * Increased maximum number of dimensions for a dataset (H5S_MAX_RANK)
+     from 31 to 32 to align with HDF4 & netCDF.
+   * Added 'query' function to VFL drivers.  Also added 'type' parameter to
+     VFL 'read' & 'write' calls, so they are aware of the type of data
+     being accessed in the file.  Updated the VFL document also.
+   * A new h4toh5 utility, to convert HDF4 files to analogous HDF5 files.
+   * Added a new array datatype to the datatypes which can be created.  
+     Removed "array fields" from compound datatypes (use an array datatype 
+     instead).
+   * Parallel HDF5 works correctly with mpich-1.2.1 on Solaris, SGI, Linux.
+   * You can now install the HDF5 documentation using the
+     ``make install-doc'' command. The documentation is installed in the
+     $(prefix)/doc directory where $(prefix) is the prefix specified by
+     the (optional) ``--prefix'' flag during configuration.
+   * HDF5 can operate correctly in the OpenMP environment in a limited way.
+     Check doc/html/TechNotes/openmp-hdf5.html for details.
+
+
+h4toh5 Utility 
+==============
+    The h4toh5 utility is a new utility that converts an HDF4 file to an 
+    HDF5 file.  For details, see the document, "Mapping HDF4 Objects to 
+    HDF5 Objects":
+       http://hdf.ncsa.uiuc.edu/HDF5/papers/H4-H5MappingGuidelines.pdf
+
+    Known Bugs:
+
+      The h4toh5 utility produces images that do not correctly conform
+      to the HDF5 Image and Palette Specification. 
+
+        http://hdf.ncsa.uiuc.edu/HDF5/doc/ImageSpec.html
+
+      Several required HDF5 attributes are omitted, and the dataspace 
+      is reversed (i.e., the ht. and width of the image dataset is 
+      incorrectly described.)  For more information, please see:
+
+        http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageDetails.html
+ 
+      This bug has been fixed for the snapshot of hdf5 1.4 release. March 12th,2001
+
+    Known Limitations of the h4toh5 release
+    ---------------------------------------------
+
+    1. Error handlings
+
+       h4toh5 utility will print out an error message when an error occurs.
+
+    2. String Datatype
+
+    HDF4 has no 'string' type. String valued data are usually defined as
+    an array of 'char' in HDF4. The h4toh5 utility will generally map
+    these to HDF5 'String' types rather than array of char, with the
+    following additional rules:
+
+       * For the data of an HDF4 SDS, image, and palette, if the data is
+         declared 'DFNT_CHAR8' it will be assumed to be integer and will
+         be an H5T_INTEGER type.
+       * For attributes of any HDF4 object, data of type 'DFNT_CHAR8'
+         will be converted to an HDF5 'H5T_STRING' type.
+       * For an HDF4 Vdata, it is difficult to determine whether data 
+         of type 'DFNT_CHAR8' is intended to be bytes or characters. The
+         h4toh5 utility will consider them to be C characters, and will
+         convert them to an HDF5 'H5T_STRING' type.
+
+
+    3. Compression, Chunking and External Storage
+
+    Chunking is supported, but compression and external storage is not.
+
+    An HDF4 object that uses chunking will be converted to an HDF5 file
+    with analogous chunked storage.
+
+    An HDF4 object that uses compression will be converted to an
+    uncompressed HDF5 object.  
+
+    An HDF4 object that uses external storage will be converted to an
+    HDF5 object without external storage.  
+
+    4. Memory Use
+
+    This version of the h4toh5 utility copies data from HDF4 objects
+    in a single read followed by a single write to the HDF5 object. For
+    large objects, this requires a very large amount of memory, which may
+    be extremely slow or fail on some platforms.
+
+    Note that a dataset that has only been partly written will
+    be read completely, including uninitialized data, and all the
+    data will be written to the HDF5 object.
+
+    5. Platforms
+
+    The h4toh5 utility requires HDF5-1.4.0 and HDF4r1.4
+
+    h4toh5 utility has been tested on all platforms listed below (see 
+    section "Platforms Tested") except TFLOPS.
+
+ 
+F90 Support
+===========
+    This is the first release of the HDF5 Library with fully integrated 
+    F90 API support.  The Fortran Library is created when the 
+    --enable-fortran flag is specified during configuration.
+
+    Not all F90 subroutines are implemented. Please refer to the HDF5 
+    Reference Manual for more details.
+   
+    F90 APIs are available for the Solaris 2.6 and 2.7, Linux, DEC UNIX, 
+    T3E, SV1 and O2K (64 bit option only) platforms. The Parallel version of 
+    the HDF5 F90 Library is supported on the O2K and T3E platforms.
+
+    Changes since the last prototype release (July 2000)
+    ----------------------------------------------------
+       * h5open_f and h5close_f must be called instead of h5init_types and 
+         h5close_types.
+
+       * The following subroutines are no longer available: 
+
+             h5pset_xfer_f
+             h5pget_xfer_f
+             h5pset_mpi_f
+             h5pget_mpi_f
+             h5pset_stdio_f
+             h5pget_stdio_f
+             h5pset_sec2_f
+             h5pget_sec2_f
+             h5pset_core_f
+             h5pget_core_f
+             h5pset_family_f
+             h5pget_family_f
+             
+       * The following functions have been added:
+
+             h5pset_fapl_mpio_f
+             h5pget_fapl_mpio_f
+             h5pset_dxpl_mpio_f
+             h5pget_dxpl_mpio_f
+        
+       * In the previous HDF5 F90 releases, the implementation of object 
+         references and dataset region references was not portable. This 
+         release introduces a portable implementation, but it also introduces 
+         changes to the read/write APIs that handle references.  If object or 
+         dataset region references are written or read to/from an HDF5 file, 
+         h5dwrite_f and h5dread_f must use the extra parameter, n, for the 
+         buffer size:
+
+            h5dwrite(read)_f(dset_id, mem_type_id, buf, n, hdferr, &
+                                                       ^^^ 
+                             mem_space_id, file_space_id, xfer_prp)
+
+         For other datatypes the APIs were not changed. 
+              
+             
+C++ Support
+===========
+    This is the first release of the HDF5 Library with fully integrated 
+    C++ API support. The HDF5 C++ library is built when the --enable-cxx
+    flag is specified during configuration.
+
+    Check the HDF5 Reference Manual for available C++ documentation.
+
+    C++ APIs are available for Solaris 2.6 and 2.7, Linux, and FreeBSD. 
+
+
+Pablo Support
+=============
+    This version does not allow proper building of the Pablo-instrumented
+    version of the library.  A version supporting the pablo build is
+    available on the Pablo Website at 
+    www-pablo.cs.uiuc.edu/pub/Pablo.Release.5/HDFLibrary/hdf5_v1.4.tar.gz
+
+
+Bug Fixes since HDF5-1.2.0
+==========================
+
+Library
+-------
+   * The function H5Pset_mpi is renamed as H5Pset_fapl_mpio.
+   * Corrected a floating point number conversion error for the Cray J90
+     platform. The error did not convert the value 0.0 correctly.
+   * Error was fixed which was not allowing dataset region references to
+     have their regions retrieved correctly.
+   * Corrected a bug that caused non-parallel file drivers to fail in
+     the parallel version.
+   * Added internal free-lists to reduce memory required by the library
+     and H5garbage_collect API function
+   * Fixed error in H5Giterate which was not updating the "index"
+     parameter correctly.
+   * Fixed error in hyperslab iteration which was not walking through the
+     correct sequence of array elements if hyperslabs were staggered in a
+     certain pattern
+   * Fixed several other problems in hyperslab iteration code.
+   * Fixed another H5Giterate bug which was causes groups with large
+     numbers of objects in them to misbehave when the callback function
+     returned non-zero values.
+   * Changed return type of H5Aiterate and H5A_operator_t typedef to be
+     herr_t, to align them with the dataset and group iterator functions.
+   * Changed H5Screate_simple and H5Sset_extent_simple to not allow
+     dimensions of size 0 with out the same dimension being unlimited.
+   * QAK - 4/19/00 - Improved metadata hashing & caching algorithms to
+     avoid many hash flushes and also remove some redundant I/O when
+     moving metadata blocks in the file.
+   * The "struct(opt)" type conversion function which gets invoked for
+     certain compound datatype conversions was fixed for nested compound
+     types. This required a small change in the datatype conversion
+     function API.
+   * Re-wrote lots of the hyperslab code to speed it up quite a bit.
+   * Added bounded garbage collection for the free lists when they run
+     out of memory and also added H5set_free_list_limits API call to
+     allow users to put an upper limit on the amount of memory used for
+     free lists.
+   * Checked for non-existent or deleted objects when dereferencing one
+     with object or region references and disallow dereference.
+   * "Time" datatypes (H5T_UNIX_D*) were not being stored and retrieved
+     from object headers correctly, fixed now.
+   * Fixed H5Dread or H5Dwrite calls with H5FD_MPIO_COLLECTIVE requests
+     that may hang because not all processes are transfer the same amount
+     of data. (A.K.A. prematured collective return when zero amount data
+     requested.) Collective calls that may cause hanging is done via the
+     corresponding MPI-IO independent calls.
+   * If configure with --enable-debug=all, couple functions would issue
+     warning messages to "stderr" that the operation is expensive time-wise.
+     This messed up applications (like testings) that did not expect the
+     extra output. It is changed so that the warning will be printed only
+     if the corresponding Debug key is set.
+
+Configuration
+-------------
+   * The hdf5.h include file was fixed to allow the HDF5 Library to be
+     compiled with other libraries/applications that use GNU autoconf. 
+   * Configuration for parallel HDF5 was improved. Configure now attempts
+     to link with libmpi.a and/or libmpio.a as the MPI libraries by
+     default. It also uses "mpirun" to launch MPI tests by default. It
+     tests to link MPIO routines during the configuration stage, rather
+     than failing later as before. One can just do "./configure
+     --enable-parallel" if the MPI library is in the system library.
+   * Added support for pthread library and thread-safe option.
+   * The libhdf5.settings file shows the correct machine byte-sex.
+   * Added option "--enable-stream-vfd" to configure w/o the Stream VFD.
+     For Solaris, added -lsocket to the LIBS list of libraries.
+
+Tools
+-----
+   * h5dump now accepts both short and long command-line parameters:
+         -h, --help          Print a usage message and exit
+         -B, --bootblock     Print the content of the boot block
+         -H, --header        Print the header only; no data is displayed
+         -i, --object-ids    Print the object ids
+         -V, --version       Print version number and exit
+         -a P, --attribute=P Print the specified attribute
+         -d P, --dataset=P   Print the specified dataset
+         -g P, --group=P     Print the specified group and all members
+         -l P, --soft-link=P Print the value(s) of the specified soft link
+         -o F, --output=F    Output raw data into file F
+         -t T, --datatype=T  Print the specified named data type
+         -w #, --width=#     Set the number of columns
+
+     P - is the full path from the root group to the object.
+     T - is the name of the data type.
+     F - is a filename.
+     # - is an integer greater than 1.
+   * A change from the old way command line parameters were interpreted
+     is that multiple attributes, datasets, groups, soft-links, and
+     object-ids cannot be specified with just one flag but you have to
+     use a flag with each object. I.e., instead of doing this:
+
+       h5dump -a /attr1 /attr2 foo.h5
+
+     do this:
+
+       h5dump -a /attr1 -a /attr2 foo.h5
+
+     The cases are similar for the other object types.
+   * h5dump correctly displays compound datatypes.
+   * Corrected an error in h5toh4 which did not convert the 32bits
+     int from HDF5 to HDF4 correctly for the T3E platform.
+   * h5dump correctly displays the committed copy of predefined types
+     correctly.
+   * Added an option, -V, to show the version information of h5dump.
+   * Fixed a core dumping bug of h5toh4 when executed on platforms like 
+     TFLOPS.
+   * The test script for h5toh4 used to not able to detect the hdp
+     dumper command was not valid.  It now detects and reports the
+     failure of hdp execution.
+   * Merged the tools with the 1.2.2 branch. Required adding new
+     macros, VERSION12 and VERSION13, used in conditional compilation.
+     Updated the Windows project files for the tools.            
+   * h5dump displays opaque and bitfield data correctly.
+   * h5dump and h5ls can browse files created with the Stream VFD
+     (eg. "h5ls <hostname>:<port>").
+   * h5dump has a new feature "-o <filename>" which outputs the raw data
+     of the dataset into ascii text file <filename>.
+   * h5toh4 used to converts hdf5 strings type to hdf4 DFNT_INT8 type.
+     Corrected to produce hdf4 DFNT_CHAR type instead.
+   * h5dump and h5ls displays array data correctly.
+
+
+Bug Fixes since HDF5-1.4.0-beta2
+================================
+   * Fixed a bug in the conversion from a little endian double to a big 
+     endian float in some special cases.
+   * Corrected configuration error which was not including compression 
+     support correctly. 
+   * Cleaned up lots of warnings.
+   * Changed a few h5dump command line switches and added long versions of
+     the switches.
+   * Changed parameters for H5Tconvert, H5Pset_bufer and H5Pget_buffer from
+     size_t to hsize_t
+   * Fixed fairly obscure bug in hyperslab I/O which could (in rare cases)
+     not copy all the data during a transfer.
+   * Removed ragged array code from library.
+   * F90 library and module files are installed properly now on all supported 
+     platforms.
+
+
+Bug Fixes since HDF5-1.4.0 Release
+==================================
+
+   * Fixed bug with contiguous hyperslabs not being detected, causing
+     slower I/O than necessary.
+   * Fixed bug where non-aligned hyperslab I/O on chunked datasets was
+     causing errors during I/O
+   * Implemented XML support in h5dump.
+
+
+Documentation
+=============
+   * A new document summarizing the changes in the library leading up to 
+     the current release has been added: 
+           HDF5 Software Changes from Release to Release
+     This document is in the Application Developer's Guide and is of 
+     particular interest to developers who must keep an application 
+     synchronized with the library.
+   * The documentation for the Fortran90 and C++ APIs is linked to the
+     opening page of the Reference Manual.  Fortran90 functions are 
+     individually referenced from the corresponding C functions through-
+     out the Reference Manual.
+   * User's Guide and Reference Manual were updated to reflect changed 
+     function syntax and to fix reported bugs. 
+   * Functions that are new at this release were added to the Reference 
+     Manual.  
+   * Functions that have been removed from the library were removed from 
+     the User's Guide and the Reference Manual.
+   * PostScript and PDF versions of the Release 1.4 document set are 
+     not available at the time of Release 1.4.0.
+
+   
+Platforms Tested
+================
+    AIX 4.3.3.0 (IBM SP powerpc)  xlc 3.6.6
+                                  mpcc_r 3.6.6
+    Cray T3E sn6711 2.0.5.45      Cray Standard C Version 6.4.0.0
+                                  Cray Fortran Version 3.4.0.2
+    Cray SV1 sn9605 10.0.0.7      Cray Standard C Version 6.4.0.0
+                                  Cray Fortran Version 3.4.0.2
+    FreeBSD 4.2                   gcc 2.95.2
+                                  g++ 2.95.2
+    HP-UX B.10.20                 HP C  HP92453-01 A.10.32.30
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.00.13
+    IRIX 6.5                      MIPSpro cc 7.30
+                                  mpich-1.2.1
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1m
+                                  mpt.1.4.0.2
+                                  mpich-1.2.1
+    Linux 2.2.16-3smp             gcc-2.95.2
+                                  g++ 2.95.2
+                                  pgf90 3.1-3
+                                  mpich-1.2.1
+    OSF1 V4.0                     DEC-V5.2-040
+                                  Digital Fortran 90 V4.1-270
+    SunOS 5.6                     WorkShop Compilers 5.0 98/12/15 C 5.0 
+    (Solaris 2.6)                 WorkShop Compilers 5.0 99/10/25 Fortran 90
+                                         2.0 Patch 107356-04
+                                  Workshop Compilers 5.0 98/12/15 C++ 5.0
+    SunOS 5.7                     WorkShop Compilers 5.0 98/12/15 C 5.0
+     (Solaris 2.7)                WorkShop Compilers 5.0 99/10/25 Fortran 90
+                                         2.0 Patch 107356-04
+                                  Workshop Compilers 5.0 98/12/15 C++ 5.0
+                                  mpich-1.2.1
+    SunOS 5.5.1                   gcc-2.7.2 
+     (Solaris 2.5.1 (x86))
+    TFLOPS r1.0.4 v4.0            mpich-1.2.1 with local changes
+    Windows NT4.0, 2000 (NT5.0)   MSVC++ 6.0
+    Windows 98                    MSVC++ 6.0
+
+
+Supported Configuration Features Summary
+========================================
+    In the tables below
+          y  = tested and supported
+          n  = not supported or not working in this release
+         ( ) = footnote appears below table
+
+    Platform       C   C         F90  F90       C++  Shared     zlib   Tools
+                       parallel       parallel       libraries
+    Solaris2.6     y   n         y    n         y    y          y      y
+    Solaris2.7     y   y (1)     y    n         y    y          y      y
+    Solarisx86     y   n         n    n         n    y          y      y
+    IRIX6.5        y   y (1)     n    n         n    n          y      y
+    IRIX64_6.5 64  y   y (2)     y    y         n    y          y      y
+    IRIX64_6.5 32  y   y (2)     n    n         n    y          y      y
+    HPUX10.20      y   n         n    n         n    y          y      y
+    DECOSF         y   n         y    n         n    y          y      y
+    T3E            y   y         y    y         n    n          y      y
+    SV1            y   n         y    n         n    n          y      y
+    TFLOPS         y   y (1)     n    n         n    n          y      y (4)
+    AIX-4.3        y   y         n    n         n    n          y      n
+    Win2000        y   n         n    n         n    y          y      y
+    Win98          y   n         n    n         n    y          y      y
+    WinNT          y   n         n    n         n    y          y      y
+    FreeBSD        y   n         n    n         y    y          y      y
+    Linux          y   y (1)     y    n         y    y          y      y
+
+
+    Platform       1.2            static-   Thread-  SRB  GASS  STREAM-
+                   compatibility  exec      safe                VFD
+    Solaris2.6     y              n         n        n    n     y
+    Solaris2.7     y              n         y        n    n     y
+    Solarisx86     y              n         n        n    n     y
+    IRIX6.5        y              n         y        n    n     y
+    IRIX64_6.5 64  y              n         n        n    n     y
+    IRIX64_6.5 32  y              n         n        n    n     y
+    HPUX10.20      y              y         n        n    n     y
+    DECOSF         y              y         n        n    n     y
+    T3E            y              y         n        n    n     y
+    SV1            y              y         n        n    n     y
+    TFLOPS         y              y         n        n    n     n
+    AIX-4.3        y              y (3)     n        n    n     y
+    Win2000        y              y         n        n    n     n
+    Win98          y              y         n        n    n     n
+    WinNT          y              y         n        n    n     n
+    FreeBSD        y              y         n        n    n     y
+    Linux          y              n         y        n    n     y
+
+    Footnotes:  (1) Using mpich.
+                (2) Using mpt and mpich.
+                (3) When configured with static-exec enabled, tests fail 
+                    in serial mode.
+                (4) No HDF4-related tools.
+
+
+Known Problems
+==============
+   * The stream-vfd test uses ip port 10007 for testing.  If another 
+     application is already using that port address, the test will hang 
+     indefinitely and has to be terminated by the kill command.  To try the 
+     test again, change the port address in test/stream_test.c to one not 
+     being used in the host.
+
+   * The --enable-static-exec configure flag fails to compile for Solaris
+     platforms. This is due to the fact that not all of the system
+     libraries on Solaris are available in a static format.
+
+     The --enable-static-exec configure flag also fails to correctly compile
+     on Linux platforms using the gcc-2.95.2 compiler.
+   
+     The --enable-static-exec configure flag also fails to correctly compile
+     on IBM SP2 platform for the serial mode.  The parallel mode works fine
+     with this option.
+
+     The compilation fails if configured with --enable-static-exec on IRIX 6.5.
+
+     The executable files in hdf5/bin are dynamic-linked for IRIX64 6.5(64 and
+     n32 modes) and IRIX 6.5, even though they are compiled with static library.
+  
+     It is suggested that you don't use this option on these platforms
+     during configuration.
+
+   * testhdf5 got bus error with configuration options --prefix and --with-hdf4
+     on IRIX 6.5.
+
+   * With the gcc 2.95.2 compiler, HDF 5 uses the `-ansi' flag during
+     compilation. The ANSI version of the compiler complains about not being
+     able to handle the `long long' datatype with the warning:
+
+           warning: ANSI C does not support `long long'
+  
+     This warning is innocuous and can be safely ignored.
+
+   * SunOS 5.6 with C WorkShop Compilers 4.2:  Hyperslab selections will 
+     fail if library is compiled using optimization of any level.
+
+   * When building hdf5 tools and applications on windows platform, a linking
+     warning: defaultlib "LIBC" conflicts with use of other libs will appear
+     on debug version when running VC++6.0. This warning doesn't affect building
+     and testing hdf5 applications. We will continue investigating this.
+
+   * h5toh4 converter fails two cases(tstr.h5 and tmany.h5) for release dll 
+     version on windows 2000 and NT.  The reason is possibly due to Windows NT 
+     DLL convention on freeing memory. It seems that memory cannot be freed
+     across library or DLL. It is still under investigation.
+
+   * HDF-GASS testings and testhdf5 in the test directory will get bus error if
+     the configured with --with-gass.
+
+   * HDF-SRB testing got segmentation error on Solaris 2.7.
+    
+   * The Stream VFD was not tested yet under Windows.
+     It is not supported in the TFLOPS machine.
+
+   * Shared library option is broken for IBM SP and some Origin 2000 platforms.
+     One needs to run ./configure with '--disable-shared --enable-static'.
+
+   * The ./dsets tests failed in the TFLOPS machine if the test program,
+     dsets.c, is compiled with the -O option.  The hdf5 library still works
+     correctly with the -O option.  The test program works fine if it is
+     compiled with -O1 or -O0.  Only -O (same as -O2) causes the test
+     program to fail.
+
+   * Certain platforms give false negatives when testing h5ls:
+       - Solaris x86 2.5.1, Cray T3E and Cray J90 give errors during testing
+         when displaying object references in certain files.  These are benign 
+         differences due to the difference in sizes of the objects created on
+         those platforms.  h5ls appears to be dumping object references
+         correctly.
+       - Cray J90 give errors during testing when displaying
+         some floating-point values.  These are benign differences due to the
+         different precision in the values displayed and h5ls appears to be
+         dumping floating-point numbers correctly.
+
+   * Before building HDF5 F90 Library from source on Crays (T3E and SV1) 
+     replace H5Aff.f90, H5Dff.f90 and H5Pff.f90 files in the fortran/src 
+     subdirectory in the top level directory with the Cray-specific files from 
+     the ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/hdf5-1.4.0/src/crayf90/  directory.
+
+   * The h4toh5 utility produces images that do not correctly conform
+     to the HDF5 Image and Palette Specification. 
+
+         http://hdf.ncsa.uiuc.edu/HDF5/doc/ImageSpec.html
+
+     Several required HDF5 attributes are omitted, and the dataspace 
+     is reversed (i.e., the ht. and width of the image dataset is 
+     incorrectly described.)  For more information, please see:
+
+         http://hdf.ncsa.uiuc.edu/HDF5/H5Image/ImageDetails.htm
+
+%%%%1.2.2%%%%   Release Information for hdf5-1.2.2 (6/23/00)
+
+7.  Release Information for hdf5-1.2.2
+=================================================================
+INTRODUCTION
+
+This document describes the differences between HDF5-1.2.1 and 
+HDF5-1.2.2, and contains information on the platforms where HDF5-1.2.2
+was tested and known problems in HDF5-1.2.2. 
+
+The HDF5 documentation can be found on the NCSA ftp server 
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+For more information look at the HDF5 home page at:
+   
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+
+- Features Added since HDF5-1.2.1 
+- Bug Fixes since HDF5-1.2.1
+- Known Problems
+- Platforms Tested
+
+
+Features Added since HDF5-1.2.1
+===============================
+   * Added internal free-lists to reduce memory required by the library and
+     H5garbage_collect API function.
+   * h5dump displays opaque and bitfield types.
+   * New features added to snapshots.  Use 'snapshot help' to see a
+     complete list of features.
+   * Improved configure to detect if MPIO routines are available when
+     parallel mode is requested.
+
+Bug Fixes since HDF5-1.2.1
+==========================
+   * h5dump correctly displays compound datatypes, including simple and
+     nested compound types.
+   * h5dump correctly displays the committed copy of predefined types.
+   * Corrected an error in h5toh4 which did not convert the 32-bit
+     int from HDF5 to HDF4 correctly for the T3E platform.
+   * Corrected a floating point number conversion error for the
+     Cray J90 platform.  The error did not convert the value 0.0
+     correctly.
+   * Fixed error in H5Giterate which was not updating the "index" parameter
+     correctly.
+   * Fixed error in hyperslab iteration which was not walking through the
+     correct sequence of array elements if hyperslabs were staggered in a
+     certain pattern.
+   * Fixed several other problems in hyperslab iteration code.
+   * Fixed another H5Giterate bug which caused groups with large numbers
+     of objects in them to misbehave when the callback function returned
+     non-zero values.
+   * Changed return type of H5Aiterate and H5A_operator_t typedef to be
+     herr_t, to align them with the dataset and group iterator functions.
+   * Changed H5Screate_simple and H5Sset_extent_simple to not allow dimensions
+     of size 0 without the same dimension being unlimited.
+   * Improved metadata hashing & caching algorithms to avoid
+     many hash flushes and also removed some redundant I/O when moving metadata
+     blocks in the file.
+   * The libhdf5.settings file shows the correct machine byte-sex.
+   * The "struct(opt)" type conversion function which gets invoked for
+     certain compound datatype conversions was fixed for nested compound
+     types. This required a small change in the datatype conversion
+     function API.
+
+Known Problems
+==============
+
+o SunOS 5.6 with C WorkShop Compilers 4.2:  hyperslab selections will 
+  fail if library is compiled using optimization of any level.
+o TFLOPS: dsets test fails if compiled with optimization turned on.
+o J90: tools fail to dispay data for the datasets with a compound datatype. 
+
+Platforms Tested
+================
+
+  AIX 4.3.3 (IBM SP)            3.6.6                               | binaries
+                                mpicc using mpich 1.1.2             | are not
+                                mpicc_r using IBM MPI-IO prototype  | available
+  AIX 4.3.2.0 (IBM SP)          xlc 5.0.1.0
+  Cray J90 10.0.0.7             cc 6.3.0.2
+  Cray T3E 2.0.5.29             cc 6.3.0.2
+                                mpt.1.3
+  FreeBSD 4.0                   gcc 2.95.2
+  HP-UX B.10.20                 HP C  HP92453-01 A.10.32
+  HP-UX B.11.00                 HP92453-01 A.11.00.13 HP C Compiler 
+                                (static library only, h5toh4 tool is not available) 
+  IRIX 6.5                      MIPSpro cc 7.30
+  IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1m
+                                mpt.1.4
+
+  Linux 2.2.10 SMP              gcc 2.95.1 
+                                mpicc(gcc-2.95.1)
+                                gcc (egcs-2.91.66)
+                                mpicc (egcs-2.91.66)
+  Linux 2.2.16 (RedHat 6.2)     gcc 2.95.2
+
+  OSF1 V4.0                     DEC-V5.2-040
+  SunOS 5.6                     cc WorkShop Compilers 5.0 no optimization
+  SunOS 5.7                     cc WorkShop Compilers 5.0
+  SolarisX86 SunOS 5.5.1        gcc version 2.7.2 with --disable-hsizet
+  TFLOPS 3.2.1                  pgcc Rel 3.1-3i
+                                mpich-1.1.2 with local changes
+  Windows NT4.0 sp5             MSVC++ 6.0
+  Windows 98                    MSVC++ 6.0
+  Windows 2000                  MSVC++ 6.0
+
+
+
+%%%%1.2.1%%%%   Release Information for hdf5-1.2.1
+
+6.  Release Information for hdf5-1.2.1
+================================================================
+
+
+Bug fixes since HDF5-1.2.0
+==========================
+
+Configuration
+-------------
+
+   * The hdf5.h include file was fixed to allow the HDF5 Library to be compiled
+     with other libraries/applications that use GNU autoconf. 
+   * Configuration for parallel HDF5 was improved. Configure now attempts to
+     link with libmpi.a and/or libmpio.a as the MPI libraries by default.
+     It also uses "mpirun" to launch MPI tests by default.  It tests to
+     link MPIO routines during the configuration stage, rather than failing
+     later as before.  One can just do "./configure --enable-parallel"
+     if the MPI library is in the system library.
+
+Library
+-------
+
+   * Error was fixed which was not allowing dataset region references to have
+     their regions retrieved correctly.
+   * Added internal free-lists to reduce memory required by the library and
+     H5garbage_collect API function
+   * Fixed error in H5Giterate which was not updating the "index" parameter
+     correctly.
+   * Fixed error in hyperslab iteration which was not walking through the
+     correct sequence of array elements if hyperslabs were staggered in a
+     certain pattern
+   * Fixed several other problems in hyperslab iteration code.
+
+Tests
+------
+
+   * Added additional tests for group and attribute iteration.
+   * Added additional test for staggered hyperslab iteration.
+   * Added additional test for random 5-D hyperslab selection.
+
+Tools
+------
+
+   * Added an option, -V, to show the version information of h5dump.
+   * Fixed a core dumping bug of h5toh4 when executed on platforms like 
+     TFLOPS.
+   * The test script for h5toh4 used to not able to detect the hdp
+     dumper command was not valid.  It now detects and reports the
+     failure of hdp execution.
+
+Documentation
+-------------
+
+   * User's Guide and Reference Manual were updated. 
+     See doc/html/PSandPDF/index.html for more details. 
+
+   
+Platforms Tested:
+================
+Note: Due to the nature of bug fixes, only static versions of the library and tools were tested.
+
+
+  AIX 4.3.2 (IBM SP)            3.6.6
+  Cray T3E 2.0.4.81             cc 6.3.0.1
+                                mpt.1.3
+  FreeBSD 3.3-STABLE            gcc 2.95.2
+  HP-UX B.10.20                 HP C  HP92453-01 A.10.32
+  IRIX 6.5                      MIPSpro cc 7.30
+  IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1m
+                                mpt.1.3 (SGI MPI 3.2.0.0)
+
+  Linux 2.2.10 SuSE             egcs-2.91.66               configured with
+  (i686-pc-linux-gnu)                                      --disable-hsizet
+                                mpich-1.2.0 egcs-2.91.66 19990314/Linux 
+
+  OSF1 V4.0                     DEC-V5.2-040
+  SunOS 5.6                     cc WorkShop Compilers 4.2  no optimization
+  SunOS 5.7                     cc WorkShop Compilers 5.0
+  TFLOPS 2.8                    cicc (pgcc Rel 3.0-5i)
+                                mpich-1.1.2 with local changes
+  Windows NT4.0 sp5             MSVC++ 6.0
+
+Known Problems:
+==============
+
+o SunOS 5.6 with C WorkShop Compilers 4.2:  Hyperslab selections will 
+  fail if library is compiled using optimization of any level.
+
+
+
+%%%%1.2.0%%%%   Release Information for hdf5-1.2.0
+         
+5. Release Information for hdf5-1.2.0
+===================================================================
+
+A. Platforms Supported
+   -------------------
+
+Operating systems listed below with compiler information and MPI library, if
+applicable, are systems that HDF5 1.2.0 was tested on.
+
+                           Compiler & libraries
+  Platform                      Information              Comment
+  --------                      ----------               -------- 
+                                
+  AIX 4.3.2 (IBM SP)            3.6.6
+
+  Cray J90 10.0.0.6             cc 6.3.0.0
+
+  Cray T3E 2.0.4.61             cc 6.2.1.0 
+                                mpt.1.3
+
+  FreeBSD 3.2                   gcc 2.95.1
+
+  HP-UX B.10.20                 HP C  HP92453-01 A.10.32
+                                gcc 2.8.1
+
+  IRIX 6.5                      MIPSpro cc 7.30 
+
+  IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1m
+  			        mpt.1.3 (SGI MPI 3.2.0.0)
+
+  Linux 2.2.10                  egcs-2.91.66               configured with
+  						         --disable-hsizet
+                                                           lbraries: glibc2
+
+  OSF1 V4.0                     DEC-V5.2-040
+
+  SunOS 5.6                     cc WorkShop Compilers 4.2   
+                                                           no optimization
+  			        gcc 2.8.1
+
+  SunOS 5.7                     cc WorkShop Compilers 5.0
+                                gcc 2.8.1
+ 
+  TFLOPS 2.7.1                  cicc (pgcc Rel 3.0-4i)
+  			        mpich-1.1.2 with local changes
+
+  Windows NT4.0 intel           MSVC++ 5.0 and 6.0
+
+  Windows NT alpha 4.0          MSVC++ 5.0 
+
+  Windows 98                    MSVC++ 5.0
+
+
+B. Known Problems
+   --------------
+
+* NT alpha 4.0
+  Dumper utiliy h5dump fails if linked with DLL.
+
+* SunOS 5.6 with C WorkShop Compilers 4.2
+  Hyperslab selections will fail if library is compiled using optimization
+  of any level.
+
+ 
+C. Changes Since Version 1.0.1
+   ---------------------------
+
+1. Documentation
+   -------------
+
+* More examples
+
+* Updated user guide, reference manual, and format specification.
+
+* Self-contained documentation for installations isolated from the
+  Internet.
+
+* HDF5 Tutorial was added to the documentation  
+
+2. Configuration
+   -------------
+
+* Better detection and support for MPI-IO.
+
+* Recognition of compilers with known code generation problems.
+
+* Support for various compilers on a single architecture (e.g., the
+  native compiler and the GNU compilers).
+
+* Ability to build from read-only media and with different compilers
+  and/or options concurrently.
+
+* Added a libhdf5.settings file which summarizes the configuration
+  information and is installed along with the library.
+
+* Builds a shared library on most systems that support it.
+
+* Support for Cray T3E, J90 and Windows/NT.
+
+3. Debugging
+   ---------
+
+* Improved control and redirection of debugging and tracing messages.
+
+4. Datatypes
+   ---------
+
+* Optimizations to compound datatype conversions and I/O operations.
+
+* Added nearly 100 optimized conversion functions for native datatypes 
+  including support for non-aligned data.
+
+* Added support for bitfield, opaque, and enumeration types.
+
+* Added distinctions between signed and unsigned char types to the
+  list of predefined native hdf5 datatypes.
+
+* Added HDF5 type definitions for C9x types like int32_t.
+
+* Application-defined type conversion functions can handle non-packed
+  data.
+
+* Changed the H5Tunregister() function to use wildcards when matching
+  conversion functions.  H5Tregister_hard() and H5Tregister_soft()
+  were combined into H5Tregister().
+
+* Support for variable-length datatypes (arrays of varying length per
+  dataset element). Variable length strings currently supported only
+  as variable length arrays of 1-byte integers.
+
+5. Dataspaces
+   ----------
+
+* New query functions for selections.
+
+* I/O operations bypass the stripmining loop and go directly to
+  storage for certain contiguous selections in the absense of type
+  conversions.  In other cases the stripmining buffers are used more
+  effectively.
+
+* Reduced the number of I/O requests under certain circumstances,
+  improving performance on systems with high I/O latency.
+
+6. Persistent Pointers
+   -------------------
+
+* Object (serial and parallel) and dataset region (serial only)
+  references are implemented.
+
+7. Parallel Support
+   ----------------
+
+* Improved parallel I/O performance.
+
+* Supported new platforms: Cray T3E, Linux, DEC Cluster.
+
+* Use vendor supported version of MPIO on SGI O2K and Cray platforms.
+
+* Improved the algorithm that translates an HDF5 hyperslab selection
+  into an MPI type for better collective I/O performance.
+
+8. New API functions 
+   -----------------
+
+  a. Property List Interface:
+     ------------------------
+
+  H5Pset_xfer		- set data transfer properties
+  H5Pset_preserve      - set dataset transfer property list status 
+  H5Pget_preserve      - get dataset transfer property list status
+  H5Pset_hyper_cache   - indicates whether to cache hyperslab blocks during I/O
+  H5Pget_hyper_cache   - returns information regarding the caching of 
+                         hyperslab blocks during I/O
+  H5Pget_btree_ratios  - sets B-tree split ratios for a dataset 
+                         transfer property list
+  H5Pset_btree_ratios  - gets B-tree split ratios for a dataset
+                         transfer property list
+  H5Pset_vlen_mem_manager - sets the memory manager for variable-length 
+                            datatype allocation
+  H5Pget_vlen_mem_manager - sets the memory manager for variable-length
+                            datatype allocation
+
+  b. Dataset Interface:
+     ------------------
+
+  H5Diterate           - iterate over all selected elements in a dataspace
+  H5Dget_storage_size  - return the amount of storage required for a dataset
+  H5Dvlen_reclaim      - reclaim VL datatype memory buffers
+
+  c. Dataspace Interface:
+     --------------------
+  H5Sget_select_hyper_nblocks   - get number of hyperslab blocks
+  H5Sget_select_hyper_blocklist - get the list of hyperslab blocks 
+                                  currently selected
+  H5Sget_select_elem_npoints    - get the number of element points 
+                                  in the current selection
+  H5Sget_select_elem_pointlist  - get the list of element points 
+                                  currently selected
+  H5Sget_select_bounds          - gets the bounding box containing 
+                                  the current selection
+
+  d. Datatype Interface:
+     -------------------
+  H5Tget_super         - return the base datatype from which a 
+                         datatype is derived
+  H5Tvlen_create       - creates a new variable-length dataype
+  H5Tenum_create       - creates a new enumeration datatype
+  H5Tenum_insert       - inserts a new enumeration datatype member
+  H5Tenum_nameof       - returns the symbol name corresponding to a 
+                         specified member of an enumeration datatype
+  H5Tvalueof           - return the value corresponding to a 
+                         specified member of an enumeration datatype 
+  H5Tget_member_value  - return the value of an enumeration datatype member
+  H5Tset_tag           - tags an opaque datatype
+  H5Tget_tag           - gets the tag associated with an opaque datatype
+
+  e. Identifier Interface:
+     ---------------------
+  H5Iget_type          - retrieve the type of an object
+
+  f. Reference Interface:
+     --------------------
+  H5Rcreate            - creates a reference
+  H5Rdereference       - open the HDF5 object referenced
+  H5Rget_region        - retrieve a dataspace with the specified region selected
+  H5Rget_object_type   - retrieve the type of object that an 
+                         object reference points to
+
+  g. Ragged Arrays (alpha) (names of those API functions were changed):
+     ------------------------------------------------------------------
+   H5RAcreate		- create a new ragged array (old name was H5Rcreate)
+   H5RAopen		- open an existing array    (old name was H5Ropen)
+   H5RAclose		- close a ragged array      (old name was H5Rclose)
+   H5RAwrite		- write to an array         (old name was H5Rwrite)
+   H5RAread		- read from an array        (old name was H5Rread)
+
+
+9. Tools
+   -----
+
+* Enhancements to the h5ls tool including the ability to list objects
+  from more than one file, to display raw hexadecimal data, to
+  show file addresses for raw data, to format output more reasonably,
+  to show object attributes, and to perform a recursive listing, 
+
+* Enhancements to h5dump: support new data types added since previous
+  versions.
+
+* h5toh4: An hdf5 to hdf4 converter.
+
+
+
+%%%%1.0.1%%%%   Release Information for hdf5-1.0.1
+         
+4.  Changes from Release 1.0.0 to Release 1.0.1
+=====================================================================
+
+* [Improvement]: configure sets up the Makefile in the parallel tests
+  suit (testpar/) correctly.
+
+* [Bug-Fix]: Configure failed for all IRIX versions other than 6.3.
+  It now configures correctly for all IRIX 6.x version.
+
+* Released Parallel HDF5 
+
+     Supported Features:
+     ------------------
+
+     HDF5 files are accessed according to the communicator and INFO
+     object defined in the property list set by H5Pset_mpi.
+
+     Independent read and write accesses to fixed and extendable dimension
+     datasets.
+
+     Collective read and write accesses to fixed dimension datasets.
+
+     Supported Platforms:
+     -------------------
+
+     Intel Red
+     IBM SP2
+     SGI Origin 2000
+
+     Changes In This Release: 
+     -----------------------
+
+   o Support of Access to Extendable Dimension Datasets.
+     Extendable dimension datasets must use chunked storage methods.
+     A new function, H5Dextend, is created to extend the current
+     dimensions of a dataset.  The current release requires the
+     MPI application must make a collective call to extend the
+     dimensions of an extendable dataset before writing to the
+     newly extended area.  (The serial does not require the
+     call of H5Dextend.  The dimensions of an extendable
+     dataset is increased when data is written to beyond the
+     current dimensions but within the maximum dimensions.)
+     The required collective call of H5Dextend may be relaxed
+     in future release.
+
+     This release only support independent read and write accesses
+     to extendable datasets.  Collective accesses to extendable
+     datasets will be implemented in future releases.
+
+   o Collective access to fixed dimension datasets.
+     Collective access to a dataset can be specified in the transfer
+     property list argument in H5Dread and H5Dwrite.  The current
+     release supports collective access to fixed dimension datasets.
+     Collective access to extendable datasets will be implemented in
+     future releases.
+
+   o HDF5 files are opened according to Communicator and INFO object.
+     H5Dopen now records the communicator and INFO setup by H5Pset_mmpi
+     and pass them to the corresponding MPIO open file calls for
+     processing.
+
+   o This release has been tested on IBM SP2, Intel Red and SGI Origin 2000
+     systems.  It uses the ROMIO version of MPIO interface for parallel
+     I/O supports.
+
+
+
+%%%%1.0.0%%%%   Release Information for hdf5-1.0.0
+
+3.  Changes from the Beta 1.0.0 Release to Release 1.0.0
+====================================================================
+
+* Added fill values for datasets.  For contiguous datasets fill value
+  performance may be quite poor since the fill value is written to the 
+  entire dataset when the dataset is created.  This will be remedied
+  in a future version.  Chunked datasets using fill values do not
+  incur any additional overhead. See H5Pset_fill_value().
+
+* Multiple hdf5 files can be "mounted" on one another to create a
+  larger virtual file. See H5Fmount().
+
+* Object names can be removed or changed but objects are never
+  actually removed from the file yet. See H5Gunlink() and H5Gmove().
+
+* Added a tuning mechanism for B-trees to insure that sequential
+  writes to chunked datasets use less overhead.  See H5Pset_btree_ratios().
+
+* Various optimizations and bug fixes.
+
+
+
+%%%%1.0.0 Beta%%%%   Release Information for hdf5-1.0.0 Beta
+
+2. Changes from the Second Alpha 1.0.0 Release to the Beta 1.0.0 Release
+=========================================================================
+
+* Strided hyperslab selections in dataspaces now working.
+
+* The compression API has been replaced with a more general filter
+  API.  See doc/html/Filters.html for details.
+
+* Alpha-quality 2d ragged arrays are implemented as a layer built on
+  top of other hdf5 objects.  The API and storage format will almost
+  certainly change.
+
+* More debugging support including API tracing.  See Debugging.html.
+
+* C and Fortran style 8-bit fixed-length character string types are
+  supported with space or null padding or null termination and
+  translations between them.
+
+* Added function H5Fflush() to write all cached data immediately to
+  the file.
+
+* Datasets maintain a modification time which can be retrieved with
+  H5Gstat().
+
+* The h5ls tool can display much more information, including all the
+  values of a dataset.
+
+
+
+%%%%1.0.0 Alpha 2%%%%   Release Information for hdf5-1.0.0 Alpha 2
+
+1.  Changes from the First Alpha 1.0.0 Release to 
+     the Second Alpha 1.0.0 Release
+=====================================================================
+
+* Two of the packages have been renamed.  The data space API has been
+  renamed from `H5P' to `H5S' and the property list (template) API has 
+  been renamed from `H5C' to `H5P'.
+
+* The new attribute API `H5A' has been added.  An attribute is a small 
+  dataset which can be attached to some other object (for instance, a
+  4x4 transformation matrix attached to a 3-dimensional dataset, or an 
+  English abstract attached to a group).
+
+* The error handling API `H5E' has been completed.  By default, when an
+  API function returns failure an error stack is displayed on the
+  standard error stream.  The H5Eset_auto() controls the automatic
+  printing and H5E_BEGIN_TRY/H5E_END_TRY macros can temporarily
+  disable the automatic error printing.
+
+* Support for large files and datasets (>2GB) has been added.  There
+  is an html document that describes how it works.  Some of the types
+  for function arguments have changed to support this: all arguments
+  pertaining to sizes of memory objects are `size_t' and all arguments 
+  pertaining to file sizes are `hsize_t'.
+
+* More data type conversions have been added although none of them are
+  fine tuned for performance.  There are new converters from integer
+  to integer and float to float, but not between integers and floating
+  points.  A bug has been fixed in the converter between compound
+  types.
+
+* The numbered types have been removed from the API: int8, uint8,
+  int16, uint16, int32, uint32, int64, uint64, float32, and float64.
+  Use standard C types instead.  Similarly, the numbered types were
+  removed from the H5T_NATIVE_* architecture; use unnumbered types
+  which correspond to the standard C types like H5T_NATIVE_INT.
+
+* More debugging support was added.  If tracing is enabled at
+  configuration time (the default) and the HDF5_TRACE environment
+  variable is set to a file descriptor then all API calls will emit
+  the function name, argument names and values, and return value on
+  that file number.  There is an html document that describes this.
+  If appropriate debugging options are enabled at configuration time,
+  some packages will display performance information on stderr.
+
+* Data types can be stored in the file as independent objects and
+  multiple datasets can share a data type.
+
+* The raw data I/O stream has been implemented and the application can 
+  control meta and raw data caches, so I/O performance should be
+  improved from the first alpha release.
+
+* Group and attribute query functions have been implemented so it is
+  now possible to find out the contents of a file with no prior
+  knowledge.
+
+* External raw data storage allows datasets to be written by other
+  applications or I/O libraries and described and accessed through
+  HDF5.
+
+* Hard and soft (symbolic) links are implemented which allow groups to 
+  share objects. Dangling and recursive symbolic links are supported.
+
+* User-defined data compression is implemented although we may
+  generalize the interface to allow arbitrary user-defined filters
+  which can be used for compression, checksums, encryption,
+  performance monitoring, etc.  The publicly-available `deflate'
+  method is predefined if the GNU libz.a can be found at configuration 
+  time.
+
+* The configuration scripts have been modified to make it easier to
+  build debugging vs. production versions of the library.
+
+* The library automatically checks that the application was compiled
+  with the correct version of header files.
+
+
+		    Parallel HDF5 Changes
+
+* Parallel support for fixed dimension datasets with contiguous or
+  chunked storages.  Also, support unlimited dimension datasets which
+  must use chunk storage.  No parallel support for compressed datasets.
+
+* Collective data transfer for H5Dread/H5Dwrite.  Collective access
+  support for datasets with contiguous storage only, thus only fixed
+  dimension datasets for now.
+
+* H5Pset_mpi and H5Pget_mpi no longer have the access_mode
+  argument.  It is taken over by the data-transfer property list
+  of H5Dread/H5Dwrite.
+
+* New functions H5Pset_xfer and H5Pget_xfer to handle the
+  specification of independent or collective data transfer_mode
+  in the dataset transfer properties list.  The properties
+  list can be used to specify data transfer mode in the H5Dwrite
+  and H5Dread function calls.
+
+* Added parallel support for datasets with chunked storage layout.
+  When a dataset is extend in a PHDF5 file, all processes that open
+  the file must collectively call H5Dextend with identical new dimension
+  sizes.
+
+
+			LIST OF API FUNCTIONS
+
+The following functions are implemented. Errors are returned if an
+attempt is made to use some feature which is not implemented and
+printing the error stack will show `not implemented yet'.
+
+Library
+   H5check		- check that lib version matches header version
+   H5open		- initialize library (happens automatically)
+   H5close		- shut down the library (happens automatically)
+   H5dont_atexit	- don't call H5close on exit
+   H5get_libversion	- retrieve library version info
+   H5check_version	- check for specific library version
+
+Property Lists
+   H5Pclose		- release template resources
+   H5Pcopy		- copy a template
+   H5Pcreate		- create a new template
+   H5Pget_chunk		- get chunked storage properties
+   H5Pset_chunk		- set chunked storage properties
+   H5Pget_class		- get template class
+   H5Pget_istore_k	- get chunked storage properties
+   H5Pset_istore_k	- set chunked storage properties
+   H5Pget_layout	- get raw data layout class
+   H5Pset_layout	- set raw data layout class
+   H5Pget_sizes		- get address and size sizes
+   H5Pset_sizes		- set address and size sizes
+   H5Pget_sym_k		- get symbol table storage properties
+   H5Pset_sym_k		- set symbol table storage properties
+   H5Pget_userblock	- get user-block size
+   H5Pset_userblock	- set user-block size
+   H5Pget_version	- get file version numbers
+   H5Pget_alignment	- get data alignment properties
+   H5Pset_alignment	- set data alignment properties
+   H5Pget_external_count- get count of external data files
+   H5Pget_external	- get information about an external data file
+   H5Pset_external	- add a new external data file to the list
+   H5Pget_driver	- get low-level file driver class
+   H5Pget_stdio		- get properties for stdio low-level driver
+   H5Pset_stdio		- set properties for stdio low-level driver
+   H5Pget_sec2		- get properties for sec2 low-level driver
+   H5Pset_sec2		- set properties for sec2 low-level driver
+   H5Pget_core		- get properties for core low-level driver
+   H5Pset_core		- set properties for core low-level driver
+   H5Pget_split		- get properties for split low-level driver
+   H5Pset_split		- set properties for split low-level driver
+   H5P_get_family	- get properties for family low-level driver
+   H5P_set_family	- set properties for family low-level driver
+   H5Pget_cache		- get meta- and raw-data caching properties
+   H5Pset_cache		- set meta- and raw-data caching properties
+   H5Pget_buffer	- get raw-data I/O pipe buffer properties
+   H5Pset_buffer	- set raw-data I/O pipe buffer properties
+   H5Pget_preserve	- get type conversion preservation properties
+   H5Pset_preserve	- set type conversion preservation properties
+   H5Pget_nfilters	- get number of raw data filters
+   H5Pget_filter	- get raw data filter properties
+   H5Pset_filter	- set raw data filter properties
+   H5Pset_deflate	- set deflate compression filter properties
+   H5Pget_mpi		- get MPI-IO properties
+   H5Pset_mpi		- set MPI-IO properties
+   H5Pget_xfer		- get data transfer properties
+ + H5Pset_xfer		- set data transfer properties
+ + H5Pset_preserve      - set dataset transfer property list status 
+ + H5Pget_preserve      - get dataset transfer property list status
+ + H5Pset_hyper_cache   - indicates whether to cache hyperslab blocks during I/O
+ + H5Pget_hyper_cache   - returns information regarding the caching of 
+                          hyperslab blocks during I/O
+ + H5Pget_btree_ratios  - sets B-tree split ratios for a dataset 
+                          transfer property list
+ + H5Pset_btree_ratios  - gets B-tree split ratios for a dataset
+                          transfer property list
+ + H5Pset_vlen_mem_manager - sets the memory manager for variable-length 
+                             datatype allocation
+ + H5Pget_vlen_mem_manager - sets the memory manager for variable-length
+                             datatype allocation
+
+Datasets
+   H5Dclose		- release dataset resources
+   H5Dcreate		- create a new dataset
+   H5Dget_space		- get data space
+   H5Dget_type		- get data type
+   H5Dget_create_plist	- get dataset creation properties
+   H5Dopen		- open an existing dataset
+   H5Dread		- read raw data
+   H5Dwrite		- write raw data
+   H5Dextend		- extend a dataset
+ + H5Diterate           - iterate over all selected elements in a dataspace
+ + H5Dget_storage_size  - return the amount of storage required for a dataset
+ + H5Dvlen_reclaim      - reclaim VL datatype memory buffers
+
+Attributes
+   H5Acreate		- create a new attribute
+   H5Aopen_name		- open an attribute by name
+   H5Aopen_idx		- open an attribute by number
+   H5Awrite		- write values into an attribute
+   H5Aread		- read values from an attribute
+   H5Aget_space		- get attribute data space
+   H5Aget_type		- get attribute data type
+   H5Aget_name		- get attribute name
+   H5Anum_attrs		- return the number of attributes for an object
+   H5Aiterate		- iterate over an object's attributes
+   H5Adelete		- delete an attribute
+   H5Aclose		- close an attribute
+
+Errors
+   H5Eclear		- clear the error stack
+   H5Eprint		- print an error stack
+   H5Eget_auto		- get automatic error reporting settings
+   H5Eset_auto		- set automatic error reporting
+   H5Ewalk		- iterate over the error stack
+   H5Ewalk_cb		- the default error stack iterator function
+   H5Eget_major		- get the message for the major error number
+   H5Eget_minor		- get the message for the minor error number
+
+Files
+   H5Fclose		- close a file and release resources
+   H5Fcreate		- create a new file
+   H5Fget_create_plist	- get file creation property list
+   H5Fget_access_plist	- get file access property list
+   H5Fis_hdf5		- determine if a file is an hdf5 file
+   H5Fopen		- open an existing file
+   H5Freopen            - reopen an HDF5 file
+   H5Fmount             - mount a file
+   H5Funmount           - unmount a file
+   H5Fflush             - flush all buffers associated with a file to disk
+
+Groups
+   H5Gclose		- close a group and release resources
+   H5Gcreate    	- create a new group
+   H5Gopen		- open an existing group
+   H5Giterate   	- iterate over the contents of a group
+   H5Gmove		- change the name of some object
+   H5Glink		- create a hard or soft link to an object
+   H5Gunlink    	- break the link between a name and an object
+   H5Gget_objinfo	- get information about a group entry
+   H5Gget_linkval	- get the value of a soft link
+   H5Gget_comment	- get the comment string for an object
+   H5Gset_comment	- set the comment string for an object
+
+Dataspaces
+   H5Screate	        - create a new data space
+   H5Scopy		- copy a data space
+   H5Sclose		- release data space
+   H5Screate_simple	- create a new simple data space
+   H5Sset_space		- set simple data space extents
+   H5Sis_simple		- determine if data space is simple
+   H5Sset_extent_simple	- set simple data space dimensionality and size
+   H5Sget_simple_extent_npoints	- get number of points in simple extent
+   H5Sget_simple_extent_ndims - get simple data space dimensionality
+   H5Sget_simple_extent_dims - get simple data space size
+   H5Sget_simple_extent_type - get type of simple extent
+   H5Sset_extent_none	- reset extent to be empty
+   H5Sextent_copy	- copy the extent from one data space to another
+   H5Sget_select_npoints - get number of points selected for I/O
+   H5Sselect_hyperslab	- set hyperslab dataspace selection
+   H5Sselect_elements   - set element sequence dataspace selection
+   H5Sselect_all	- select entire extent for I/O
+   H5Sselect_none	- deselect all elements of extent
+   H5Soffset_simple	- set selection offset
+   H5Sselect_valid	- determine if selection is valid for extent
+ + H5Sget_select_hyper_nblocks   - get number of hyperslab blocks
+ + H5Sget_select_hyper_blocklist - get the list of hyperslab blocks 
+                                   currently selected
+ + H5Sget_select_elem_npoints    - get the number of element points 
+                                   in the current selection
+ + H5Sget_select_elem_pointlist  - get the list of element points 
+                                   currently selected
+ + H5Sget_select_bounds          - gets the bounding box containing 
+                                   the current selection
+
+Datatypes
+   H5Tclose		- release data type resources
+   H5Topen		- open a named data type
+   H5Tcommit		- name a data type
+   H5Tcommitted		- determine if a type is named
+   H5Tcopy		- copy a data type
+   H5Tcreate		- create a new data type
+   H5Tequal		- compare two data types
+   H5Tlock		- lock type to prevent changes
+   H5Tfind		- find a data type conversion function
+   H5Tconvert		- convert data from one type to another
+   H5Tregister    	- register a conversion function
+   H5Tunregister	- remove a conversion function
+   H5Tget_overflow	- get function that handles overflow conv. cases
+   H5Tset_overflow	- set function to handle overflow conversion cases
+   H5Tget_class		- get data type class
+   H5Tget_cset		- get character set
+   H5Tget_ebias		- get exponent bias
+   H5Tget_fields	- get floating point fields
+   H5Tget_inpad		- get inter-field padding
+   H5Tget_member_dims	- get struct member dimensions
+   H5Tget_member_name	- get struct member name
+   H5Tget_member_offset	- get struct member byte offset
+   H5Tget_member_type	- get struct member type
+   H5Tget_nmembers	- get number of struct members
+   H5Tget_norm		- get floating point normalization
+   H5Tget_offset	- get bit offset within type
+   H5Tget_order		- get byte order
+   H5Tget_pad		- get padding type
+   H5Tget_precision	- get precision in bits
+   H5Tget_sign		- get integer sign type
+   H5Tget_size		- get size in bytes
+   H5Tget_strpad	- get string padding
+   H5Tinsert		- insert scalar struct member
+   H5Tinsert_array	- insert array struct member
+   H5Tpack		- pack struct members
+   H5Tset_cset		- set character set
+   H5Tset_ebias		- set exponent bias
+   H5Tset_fields	- set floating point fields
+   H5Tset_inpad		- set inter-field padding
+   H5Tset_norm		- set floating point normalization
+   H5Tset_offset	- set bit offset within type
+   H5Tset_order		- set byte order
+   H5Tset_pad		- set padding type
+   H5Tset_precision	- set precision in bits
+   H5Tset_sign		- set integer sign type
+   H5Tset_size		- set size in bytes
+   H5Tset_strpad	- set string padding
+ + H5Tget_super         - return the base datatype from which a 
+                          datatype is derived
+ + H5Tvlen_create       - creates a new variable-length dataype
+ + H5Tenum_create       - creates a new enumeration datatype
+ + H5Tenum_insert       - inserts a new enumeration datatype member
+ + H5Tenum_nameof       - returns the symbol name corresponding to a 
+                          specified member of an enumeration datatype
+ + H5Tvalueof           - return the value corresponding to a 
+                          specified member of an enumeration datatype 
+ + H5Tget_member_value  - return the value of an enumeration datatype member
+ + H5Tset_tag           - tags an opaque datatype
+ + H5Tget_tag           - gets the tag associated with an opaque datatype
+
+ - H5Tregister_hard	- register specific type conversion function
+ - H5Tregister_soft	- register general type conversion function
+
+Filters
+   H5Tregister		- register a conversion function 
+
+Compression
+   H5Zregister		- register new compression and uncompression 
+                          functions for a method specified by a method number
+
+Identifiers
+ + H5Iget_type          - retrieve the type of an object
+
+References
+ + H5Rcreate            - creates a reference
+ + H5Rdereference       - open the HDF5 object referenced
+ + H5Rget_region        - retrieve a dataspace with the specified region selected
+ + H5Rget_object_type   - retrieve the type of object that an 
+                          object reference points to
+
+Ragged Arrays (alpha)
+   H5RAcreate		- create a new ragged array
+   H5RAopen		- open an existing array
+   H5RAclose		- close a ragged array
+   H5RAwrite		- write to an array
+   H5RAread		- read from an array
+
+

Added: packages/hdf5/branches/upstream/current/release_docs/INSTALL
===================================================================
--- packages/hdf5/branches/upstream/current/release_docs/INSTALL	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/release_docs/INSTALL	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,649 @@
+
+	Instructions for the Installation of HDF5 Software
+	==================================================
+
+	CONTENTS
+	--------
+	1. Obtaining HDF5
+
+	2. Warnings about compilers
+	2.1. GNU (Intel platforms)
+	2.2. DEC
+	2.3. SGI (Irix64 6.2)
+
+	3. Quick installation
+	3.1. TFLOPS
+	3.2. Windows
+	3.3. Certain Virtual File Layer(VFL)
+
+	4. HDF5 dependencies
+	4.1. Zlib
+	4.2  Szip
+	4.3. MPI and MPI-IO
+
+	5. Full installation instructions for source distributions
+	5.1. Unpacking the distribution
+	5.1.1. Non-compressed tar archive (*.tar)
+	5.1.2. Compressed tar archive (*.tar.Z)
+	5.1.3. Gzip'd tar archive (*.tar.gz)
+	5.1.4. Bzip'd tar archive (*.tar.bz2)
+	5.2. Source vs. Build Directories
+	5.3. Configuring
+	5.3.1. Specifying the installation directories
+	5.3.2. Using an alternate C compiler
+	5.3.3. Additional compilation flags
+	5.3.4. Compiling HDF5 wrapper libraries
+	5.3.5. Specifying other programs
+	5.3.6. Specifying other libraries and headers
+	5.3.7. Static versus shared linking
+	5.3.8. Optimization versus symbolic debugging
+	5.3.9. Large (>2GB) vs. small (<2GB) file capability
+	5.3.10. Parallel vs. serial library
+	5.4. Building
+	5.5. Testing
+	5.6. Installing
+	5.7  Building and testing with Intel compilers
+	5.8  Building and testing with PGI compilers
+
+	6. Using the Library
+
+	7. Support
+
+*****************************************************************************
+
+1. Obtaining HDF5
+	The latest supported public release of HDF5 is available from
+	ftp://hdf.ncsa.uiuc.edu/HDF5/current/src.  It is
+	available in tar format compressed with gzip. 
+
+	The HDF team also makes snapshots of the source code available on
+	a regular basis. These snapshots are unsupported (that is, the
+	HDF team will not release a bug-fix on a particular snapshot;
+	rather any bug fixes will be rolled into the next snapshot).
+	Furthermore, the snapshots have only been tested on a few
+	machines and may not test correctly for parallel applications.
+	Snapshots can be found at
+	ftp://hdf.ncsa.uiuc.edu/pub/outgoing/hdf5/snapshots in a limited
+	number of formats.
+
+
+2. Warnings about compilers
+	OUTPUT FROM THE FOLLOWING COMPILERS SHOULD BE EXTREMELY SUSPECT
+	WHEN USED TO COMPILE THE HDF5 LIBRARY, ESPECIALLY IF
+	OPTIMIZATIONS ARE ENABLED. IN ALL CASES, HDF5 ATTEMPTS TO WORK
+	AROUND THE COMPILER BUGS BUT THE HDF5 DEVELOPMENT TEAM MAKES NO
+	GUARANTEES THAT THERE ARE OTHER CODE GENERATION PROBLEMS.
+
+2.1. GNU (Intel platforms)
+	Versions before 2.8.1 have serious problems allocating registers
+	when functions contain operations on `long long' data types.
+	Supplying the `--disable-hsizet' switch to configure (documented
+	below) will prevent hdf5 from using `long long' data types in
+	situations that are known not to work, but it limits the hdf5
+	address space to 2GB.
+
+2.2. COMPAQ/DEC
+	The V5.2-038 compiler (and possibly others) occasionally
+	generates incorrect code for memcpy() calls when optimizations
+	are enabled, resulting in unaligned access faults. HDF5 works
+	around the problem by casting the second argument to `char *'.
+        The fortran module (5.4.1a) fails in compiling some fortran
+        programs.  Need to use 5.5.0 or more.
+
+2.3. SGI (Irix64 6.2)
+	The Mongoose 7.00 compiler has serious optimization bugs and
+	should be upgraded to MIPSpro 7.2.1.2m. Patches are available
+	from SGI.
+
+
+3. Quick installation
+	For those that don't like to read ;-) the following steps can be
+	used to configure, build, test, and install the HDF5 library,
+	header files, and support programs. "#" in "hdf5-1.6.#" below stands
+        for the release number, for example "3" for hdf5-1.6.3, or
+        for release and subrelease versions, for example,
+        "3-snap4" for hdf5-1.6.3-snap4.
+
+	    $ gunzip < hdf5-1.6.#.tar.gz | tar xf -
+	    $ cd hdf5-1.6.#
+	    $ make check
+	    $ make install
+
+3.1. TFLOPS
+	Users of the Intel TFLOPS machine, after reading this file,
+	should see the INSTALL_TFLOPS for more instructions.
+
+3.2. Windows
+	Users of Microsoft Windows should see the INSTALL_Windows for
+	detailed instructions.
+
+3.3. Certain Virtual File Layer(VFL)
+	If users want to install with special Virtual File Layer(VFL),
+	please go to read INSTALL_VFL file.  SRB and Globus-GASS have
+	been documented. 
+
+
+4. HDF5 dependencies
+4.1. Zlib 
+	The HDF5 library has a predefined compression filter that uses
+	the "deflate" method for chunked datatsets. If zlib-1.1.2 or
+	later is found then HDF5 will use it, otherwise HDF5's predefined
+	compression method will degenerate to a no-op (the compression
+	filter will succeed but the data will not be compressed).
+
+4.2. Szip (optional)
+	The HDF5 library has a predefined compression filter that uses
+	the extended-Rice lossless compression algorithm for chunked 
+        datatsets. For more information about Szip compression and license terms
+        see http://hdf.ncsa.uiuc.edu/doc_resource/SZIP/index.html.
+        Precompiled szip binaries for each supported platform and source tar ball
+        file can be found at ftp://ftp.ncsa.uiuc.edu/HDF/szip/
+        
+        To configure HDF5 library with Szip compression filter, use 
+        --enable-szlib=/PATH_TO_SZIP flag. For more information see 5.3.6.
+
+        Starting with the release 1.6.3 Szip library binaries are distributed 
+        with encoder enabled (license may be required to use this binary) 
+        and with encoder disabled (license free). Depending on which Szip 
+        binary is used, Szip compression is available or is not available 
+        for an HDF5 application. Szip decoding is always available, i.e.
+        an HDF5 application can always read Szip compressed data if Szip filter
+        is present.
+
+4.3. MPI and MPI-IO
+	The parallel version of the library is built upon the foundation
+	provided by MPI and MPI-IO. If these libraries are not available
+	when HDF5 is configured then only a serial version of HDF5 can be
+	built.
+
+
+5. Full installation instructions for source distributions
+5.1. Unpacking the distribution
+	The HDF5 source code is distributed in a variety of formats which
+	can be unpacked with the following commands, each of which
+	creates an `hdf5-1.6.#' directory.
+
+5.1.1. Non-compressed tar archive (*.tar)
+
+	    $ tar xf hdf5-1.6.#.tar
+
+5.1.2. Compressed tar archive (*.tar.Z)
+
+	    $ uncompress -c < hdf5-1.6.#.tar.Z | tar xf -
+
+5.1.3. Gzip'd tar archive (*.tar.gz)
+
+	    $ gunzip < hdf5-1.6.#.tar.gz | tar xf -
+
+5.1.4. Bzip'd tar archive (*.tar.bz2)
+
+	    $ bunzip2 < hdf5-1.6.#.tar.bz2 | tar xf -
+
+5.2. Source vs. Build Directories
+	On most systems the build can occur in a directory other than the
+	source directory, allowing multiple concurrent builds and/or
+	read-only source code. In order to accomplish this, one should
+	create a build directory, cd into that directory, and run the
+	`configure' script found in the source directory (configure
+	details are below).
+
+	Unfortunately, this does not work on recent Irix platforms (6.5?
+	and later) because that `make' doesn't understand the VPATH
+	variable. However, hdf5 also supports Irix `pmake' which has a
+	.PATH target which serves a similar purpose. Here's what the man
+	pages say about VPATH, which is the facility used by HDF5
+	makefiles for this feature:
+
+		The VPATH facility is a derivation of the undocumented
+		VPATH feature in the System V Release 3 version of make.
+		System V Release 4 has a new VPATH implementation, much
+		like the pmake(1) .PATH feature. This new feature is also
+		undocumented in the standard System V Release 4 manual
+		pages.  For this reason it is not available in the IRIX
+		version of make. The VPATH facility should not be used
+		with the new parallel make option.
+
+5.3. Configuring
+	HDF5 uses the GNU autoconf system for configuration, which
+	detects various features of the host system and creates the
+	Makefiles. On most systems it should be sufficient to say:
+
+	    $ ./configure		OR
+	    $ sh configure
+
+	The configuration process can be controlled through environment
+	variables, command-line switches, and host configuration files.
+	For a complete list of switches type:
+
+	    $ ./configure --help
+
+	The host configuration files are located in the `config'
+	directory and are based on architecture name, vendor name, and/or
+	operating system which are displayed near the beginning of the
+	`configure' output. The host config file influences the behavior
+	of configure by setting or augmenting shell variables.
+
+5.3.1. Specifying the installation directories
+	Typing `make install' will install the HDF5 library, header
+	files, examples, and support programs in hdf5/lib,
+	hdf5/include, hdf5/examples and hdf5/bin under the directory where it
+        was built (hdf5-1.6.# or build directory mentioned in 5.2)
+        To use a path other than hdf5 specify the path with 
+        the `--prefix=PATH' switch:
+
+	    $ ./configure --prefix=$HOME
+
+	If shared libraries are being built (the default) then the final
+	home of the shared library must be specified with this switch
+	before the library and executables are built.
+
+5.3.2. Using an alternate C compiler
+	By default, configure will look for the C compiler specified
+        in the host configuration file in the config directory or by trying
+	`gcc' and `cc'. However, if the environment variable "CC" is set
+	then its value is used as the C compiler (users of csh and
+	derivatives will need to prefix the commands below with `env').
+	For instance, to use the native C compiler on a system which also
+	has the GNU gcc compiler:
+
+	    $ CC=cc ./configure
+
+	A parallel version of hdf5 can be built by specifying parallel compiler,
+        usually `mpicc', as the C compiler (the `--enable-parallel' flag documented
+	below is optional in this case).  Using the `mpicc' compiler
+	will insure that the correct MPI and MPI-IO header files and
+	libraries are used.
+
+	    $ CC=/usr/local/mpi/bin/mpicc ./configure
+
+	On Irix64 the default compiler is `cc'. To use an alternate
+	compiler specify it with the CC variable:
+
+	    $ CC='cc -n32' ./configure
+
+	Similarly, users compiling on a Solaris machine and desiring to
+	build the distribution with 64-bit support should specify the
+	correct flags with the CC variable:
+
+	    $ CC='cc -xarch=v9' ./configure
+
+	To configure AIX 64 bits including fortran API and C++,
+	(Remark: need to hardset $AR to 'ar -X 64'.)
+	Serial:
+	    $ CFLAGS=-q64 FFLAGS=-q64 CXXFLAGS=-q64 AR='ar -X 64'\
+	    $ ./configure --enable-fortran
+	Parallel:
+	    $ CFLAGS=-q64 FFLAGS=-q64 AR='ar -X 64'\
+	    $ ./configure --enable-fortran --enable-parallel
+
+5.3.3. Additional compilation flags
+	If addtional flags must be passed to the compilation commands
+	then specify those flags with the CFLAGS variable. For instance,
+	to enable symbolic debugging of a production version of HDF5 one
+	might say:
+
+	    $ CFLAGS=-g ./configure --enable-production
+
+5.3.4. Compiling HDF5 wrapper libraries
+	One can optionally build the Fortran and/or C++ interface to the
+	HDF5 C library. By default, both options are disabled. To build
+	them, specify `--enable-fortran' and `--enable-cxx' respectively.
+
+	    $ ./configure --enable-fortran
+	    $ ./configure --enable-cxx
+	
+        Configure uses Fortran compiler specified in the host configuration
+        file in the fortran/config directory and C++ compiler specified in the
+        host configuration file under the c++/config directory. 
+        Configuration will halt if a working Fortran 90 or 95 compiler or 
+        C++ compiler is not found. Currently, the Fortran configure tests
+	for these compilers in order: f90, pgf90, f95. To use an
+	alternative Fortran compiler specify it with the F9X variable,
+        for example:
+
+	    $ F9X=/mycompiler/bin/g95 ./configure --enable-fortran
+
+        To use an alternative C++ compiler specify it with the CXX variable:
+
+            $ CXX=/mycompiler/bin/c++ ./configure --enable-cxx 
+
+	Note: Fortran interface supports parallel HDF5 while the 
+              C++ interface does not.
+          
+        Note:  On Cray T3E machines the following files need to be modified
+               before building the Fortran Library:
+                 fortran/src/H5Dff.f90
+                 fortran/src/H5Aff.f90
+                 fortran/src/H5Pff.f90
+               Check for "Comment if on T3E ..." comment and comment out 
+               specified lines or use a patch from HDF FTP server
+               ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/
+
+        Note: See sections 5.7 and 5.8 for how to build Fortran Library with
+              PGI or Intel compilers. 
+
+5.3.5. Specifying other programs
+	The build system has been tuned for use with GNU make but works
+	also with other versions of make.  If the `make' command runs a
+	non-GNU version but a GNU version is available under a different
+	name (perhaps `gmake') then HDF5 can be configured to use it by
+	setting the MAKE variable. Note that whatever value is used for
+	MAKE must also be used as the make command when building the
+	library:
+
+	    $ MAKE=gmake ./configure
+	    $ gmake
+
+	The `AR', 'TR', and `RANLIB' variables can also be set to the names
+	of the `ar', 'tr', and `ranlib' (or `:') commands to override values
+	detected by configure.
+
+	The HDF5 library, include files, and utilities are installed
+	during `make install' (described below) with a BSD-compatible
+	install program detected automatically by configure. If none is
+	found then the shell script bin/install-sh is used. Configure
+	doesn't check that the install script actually works, but if a
+	bad install is detected on your system (e.g., on the ASCI blue
+	machine as of March 2, 1999) you have two choices:
+
+	    1. Copy the bin/install-sh program to your $HOME/bin
+	       directory, name it `install', and make sure that $HOME/bin
+	       is searched before the system bin directories.
+
+	    2. Specify the full path name of the `install-sh' program
+	       as the value of the INSTALL environment variable. Note: do
+	       not use `cp' or some other program in place of install
+	       because the HDF5 makefiles also use the install program to
+	       also change file ownership and/or access permissions.
+
+5.3.6. Specifying other libraries and headers
+	Configure searches the standard places (those places known by the
+	systems compiler) for include files and header files. However,
+	additional directories can be specified by using the CPPFLAGS
+	and/or LDFLAGS variables:
+
+	    $ CPPFLAGS=-I/home/robb/include \
+              LDFLAGS=-L/home/robb/lib \
+	      ./configure
+
+	HDF5 uses the zlib library for two purposes: it provides support
+	for the HDF5 deflate data compression filter, and it is used by
+	the h5toh4 converter and  the h4toh5 converter in support of
+	HDF4. Configure searches the standard places (plus those
+	specified above with CPPFLAGS and LDFLAGS variables) for the zlib
+	headers and library. The search can be disabled by specifying
+	`--without-zlib' or alternate directories can be specified with
+	`--with-zlib=/PATH_TO_ZLIB' or through the CPPFLAGS and LDFLAGS
+	variables:
+
+	    $ ./configure --with-zlib=/PATH_TO_ZLIB
+
+	    $ CPPFLAGS=-I/PATH_TO_ZLIB/include \
+	      LDFLAGS=-L/PATH_TO_ZLIB/lib \
+	      ./configure
+
+	HDF5 has Szip predefined compression method (see 4.2).  To enable
+	Szip compression, HDF5 library has to be configured and build using 
+	Szip Library
+
+        $ ./configure --with-szlib=/PATH_TO_SZIP
+
+5.3.7. Static versus shared linking
+	The build process will create static libraries on all systems and
+	shared libraries on systems that support dynamic linking to a
+	sufficient degree. Either form of library may be suppressed by
+	saying `--disable-static' or `--disable-shared'.
+
+	    $ ./configure --disable-shared
+
+	The C++ and Fortran libraries are currently only available in the
+	static format.
+
+	To build only statically linked executables on platforms which
+	support shared libraries, use the `--enable-static-exec' flag.
+
+	    $ ./configure --enable-static-exec
+
+5.3.8. Optimization versus symbolic debugging
+	The library can be compiled to provide symbolic debugging support
+	so it can be debugged with gdb, dbx, ddd, etc or it can be
+	compiled with various optimizations. To compile for symbolic
+	debugging (the default for snapshots) say `--disable-production';
+	to compile with optimizations (the default for supported public
+	releases) say `--enable-production'. On some systems the library
+	can also be compiled for profiling with gprof by saying
+	`--enable-production=profile'.
+
+	    $ ./configure --disable-production         #symbolic debugging
+	    $ ./configure --enable-production          #optimized code
+	    $ ./configure --enable-production=profile  #for use with gprof
+
+	Regardless of whether support for symbolic debugging is enabled,
+	the library also is able to perform runtime debugging of certain
+	packages (such as type conversion execution times, and extensive
+	invariant condition checking). To enable this debugging supply a
+	comma-separated list of package names to to the `--enable-debug'
+	switch (see doc/html/Debugging.html in the source directory
+        for a list of package names).
+	Debugging can be disabled by saying `--disable-debug'. The
+	default debugging level for snapshots is a subset of the
+	available packages; the default for supported releases is no
+	debugging (debugging can incur a significant runtime penalty).
+
+	    $ ./configure --enable-debug=s,t  #debug only H5S and H5T
+	    $ ./configure --enable-debug      #debug normal packages
+	    $ ./configure --enable-debug=all  #debug all packages
+	    $ ./configure --disable-debug     #no debugging
+
+	HDF5 is also able to print a trace of all API function calls,
+	their arguments, and the return values. To enable or disable the
+	ability to trace the API say `--enable-trace' (the default for
+	snapthots) or `--disable-trace' (the default for public
+	releases). The tracing must also be enabled at runtime to see any
+	output (see Debugging.html).
+
+5.3.9. Large (>2GB) vs. small (<2GB) file capability
+	In order to read or write files that could potentially be larger
+	than 2GB it is necessary to use the non-ANSI `long long' data
+	type on some platforms. However, some compilers (e.g., GNU gcc
+	versions before 2.8.1 on Intel platforms) are unable to produce
+	correct machine code for this data type. To disable use of the
+	`long long' type on these machines say:
+
+	    $ ./configure --disable-hsizet
+
+5.3.10. Parallel vs. serial library
+	The HDF5 library can be configured to use MPI and MPI-IO for
+	parallelizm on a distributed multi-processor system.  Read the
+	file INSTALL_parallel for detailed explanations.
+
+5.3.11. Threadsafe capability
+	The HDF5 library can be configured to be thread-safe (on a very
+	large scale) with the with the `--enable-threadsafe' flag to
+        the configure script.  Some platforms may also require the 
+        '-with-pthread=INC,LIB' (or '--with-pthread=DIR') flag to the configure
+        script as well.  Read the file doc/html/TechNotes/ThreadSafeLibrary.html
+         in the source directory for further details.
+
+5.3.12. Backward compatibility
+	The 1.6 version of the HDF5 library can be configured to operate
+	identically to the v1.4 library with the `--enable-hdf5v1_4'
+	configure flag. This allows existing code to be compiled with the
+	v1.6 library without requiring immediate changes to the
+	application source code. This flag will only be supported in the
+	v1.6 branch of the library, it will not be available in v1.7+.
+
+5.3.13. Network stream capability
+	The HDF5 library can be configured with a network stream file
+	driver with the `--enable-stream-vfd' configure flag. This option
+	compiles the "stream" Virtual File Driver into the main library.
+	See the documentation on the Virtual File Layer for more details
+	about the use of this driver. This option is ON by default. Use
+        --disable-stream-vfd configuration flag to turn it OFF.
+
+5.4. Building
+	The library, confidence tests, and programs can be build by
+	saying just:
+
+	    $ make
+
+	Note that if you supplied some other make command via the MAKE
+	variable during the configuration step then that same command
+	must be used here.
+
+	When using GNU make you can add `-j -l6' to the make command to
+	compile in parallel on SMP machines. Do not give a number after
+	th `-j' since GNU make will turn it off for recursive invocations
+	of make.
+
+	    $ make -j -l6
+
+5.5. Testing
+	HDF5 comes with various test suites, all of which can be run by
+	saying
+
+	    $ make check
+
+	To run only the tests for the library change to the `test'
+	directory before issuing the command. Similarly, tests for the
+	parallel aspects of the library are in `testpar' and tests for
+	the support programs are in `tools'.
+
+	Temporary files will be deleted by each test when it complets,
+	but may continue to exist in an incomplete state if the test
+	fails. To prevent deletion of the files define the HDF5_NOCLEANUP
+	environment variable.
+
+5.6. Installing
+	The HDF5 library, include files, and support programs can be
+	installed in a (semi-)public place by saying `make install'. The
+	files are installed under the directory specified with
+	`--prefix=DIR' (or 'hdf5' in the build directory) in directories named `lib',
+	`include', 'doc', and `bin'. The prefix directory DIR must exist prior to
+	`make install', but its subdirectories are created automatically. 
+        'hdf5' directory under the build directory is created automatically.
+
+	If `make install' fails because the install command at your site
+	somehow fails, you may use the install-sh that comes with the
+	source. You need to run ./configure again.
+
+            $ INSTALL="$PWD/bin/install-sh -c" ./configure ...
+            $ make install
+
+	The library can be used without installing it by pointing the
+	compiler at the `src' and 'src/.libs' directory for include files and
+	libraries. However, the minimum which must be installed to make
+	the library publically available is:
+
+	    The library:
+		./src/.libs/libhdf5.a
+
+	    The public header files:
+		./src/H5*public.h, ./src/H5public.h
+                ./src/H5FD*.h except ./src/H5FDprivate.h,
+                ./src/H5api_adpt.h
+
+	    The main header file:
+		./src/hdf5.h
+
+	    The configuration information:
+		./src/H5pubconf.h
+	
+    	The support programs that are useful are:
+	    ./tools/h5ls/h5ls		(list file contents)
+	    ./tools/h5dump/h5dump	(dump file contents)
+	    ./tools/misc/h5repart	(repartition file families)
+	    ./tools/misc/h5debug	(low-level file debugging)
+	    ./tools/h5import/h5import	(imports data to HDF5 file)
+            ./tools/h5diff/h5diff       (compares two HDF5 files)
+            ./tools/gifconv/h52gif	(HDF5 to GIF converter) 
+            ./tools/gifconv/gif2h5      (GIF to HDF5 converter)
+
+5.7  Building and testing with Intel compilers
+
+
+     When Intel compilers are used (icc or ecc), you will need to 
+     modify the generated "libtool" program after configuration is finished.
+     On or around line 104 of the libtool file, there are lines which 
+     look like:
+
+          # How to pass a linker flag through the compiler.
+          wl=""
+
+      Change these lines to this:
+
+          # How to pass a linker flag through the compiler.
+          wl="-Wl,"
+
+      UPDATE: This is now done automatically by the configure script. However,
+      if you still experience a problem, you may want to check this line in
+      the libtool file and make sure that it has the correct value.
+
+    * To build the Fortran library using Intel compiler on Linux 2.4, one has to 
+          x Use -fpp -DDEC$=DEC_ -DMS$=MS_ compiler flags to disable
+            DEC and MS compiler directives in source files in fortran/src, fortran/test 
+            and fortran/examples directories.
+	    e.g., setenv F9X 'ifc -fpp -DDEC$=DEC_ -DMS$=MS_'
+	    (do not use double quotes since $ is interpreted in them.)
+
+          x If Version 6.0 of Fortran compiler is used, build fails in 
+            the fortran/test directory and then in the
+            fortran/examples directory; to proceed, edit the work.pcl files in
+            those directories to contain two lines
+
+                    work.pc
+                    ../src/work.pc 
+
+          x Do the same in fortran/examples directory
+          x Problem with work.pc files was resolved for newest version of the compiler (7.0)
+
+    * To build the Fortran Library on IA32 follow step described above, except 
+      that DEC and MS compiler directives should be removed manually or 
+      use a patch from HDF FTP server ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/
+      Also check "How to build HDF5 Fortran with Intel Compiler" under HDF5 FAQ
+      http://hdf.ncsa.uiuc.edu/hdf5-quest.html#plat-intel
+
+
+5.8  Building and testing with PGI compilers
+     
+     When PGI C and C++ compilers are used (pgcc or pgCC), you will need to 
+     modify the generated "libtool" program after configuration is finished.
+     On or around line 104 of the libtool file, there are lines which 
+     look like:
+
+          # How to pass a linker flag through the compiler.
+          wl=""
+
+      Change these lines to this:
+
+          # How to pass a linker flag through the compiler.
+          wl="-Wl,"
+
+      UPDATE: This is now done automatically by the configure script. However,
+      if you still experience a problem, you may want to check this line in
+      the libtool file and make sure that it has the correct value.
+
+      To build HDF5 C++ Library with pgCC (version 4.0 and later), set
+      environment variable CXX to "pgCC -tlocal"
+         setenv CXX "pgCC -tlocal"
+      before running the configure script.
+
+
+6. Using the Library
+	Please see the User Manual in the doc/html directory.
+
+	Most programs will include <hdf5.h> and link with -lhdf5.
+	Additional libraries may also be necessary depending on whether
+	support for compression, etc. was compiled into the hdf5 library.
+
+	A summary of the hdf5 installation can be found in the
+	libhdf5.settings and libhdf5_fortran.settings files in the bin
+        subdirectory. 
+
+        Users are encouraged to use helper compiler scripts h5cc, h5fc, and
+        h5c++ to build HDF5 C, Fortran and C++ applications correspondigly. Those
+        scripts are installed under bin subdirectory when make install is run.
+
+
+7. Support
+	Support is described in the README file.

Added: packages/hdf5/branches/upstream/current/release_docs/INSTALL_TFLOPS
===================================================================
--- packages/hdf5/branches/upstream/current/release_docs/INSTALL_TFLOPS	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/release_docs/INSTALL_TFLOPS	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,166 @@
+FOR THE INTEL TFLOPS MACHINE:
+
+Below are the step-by-step procedures for building, testing, and
+installing the parallel and sequential versions of the HDF5 library.
+
+-----------------
+Software locations
+------------------
+The zlib compression library is installed in /usr/community/hdf5/ZLIB.
+The latest version is zlib v1.1.4.
+
+The mpich library, including mpi-io support, is now supported by the 
+TFLOPS system staff.  Check Sasn100:/usr/local/FAQ/R4.4.0_Release_Notes
+for details.  A modified version of mpicc is created to simply the
+command. It is installed as /usr/community/hdf5/tflop-mpich/bin/mpicc.
+
+---------------
+gmake recommended
+---------------
+Both Sasn100 and Janus have multiple versions of the make command.
+We recommand the use of the Gnu gmake which has some features
+(e.g., -j and --srcdir support) that makes (sic) life easier.
+
+---------------
+Parallel HDF5:
+---------------
+
+The setup process for building the parallel HDF5 library for the
+ASCI Red machine is done by a coordination of events from sasn100 and
+janus.  Though janus can do compiling, it is better to build it
+from sasn100 which has more complete building tools and runs faster.
+It is also anti-social to tie up janus with compiling.  The HDF5 building
+requires the use of janus because one of steps is to execute a program
+to find out the run-time characteristics of the TFLOPS machine.
+
+Assuming you have already unpacked the HDF5 tar-file into the 
+directory <hdf5>, follow the steps below:
+FROM SASN100,
+
+1) cd <hdf5>
+
+2) CC=/usr/community/hdf5/tflop-mpich/bin/mpicc \
+      ./configure --host=i386-intel-osf1 --with-zlib=/usr/community/hdf5/ZLIB
+
+   Skip the "--with-zlib=..." option if you do not wish to include the zlib
+   compression feature.  Without the zlib compression feature, the library
+   will not be able to access zlib compressed datasets.
+
+   You may safely ignore the WARNING message,
+    =========
+    configure: WARNING: If you wanted to set the --build type, don't use --host.
+	If a cross compiler is detected then cross compile mode will be used.
+    =========
+   You may add the option "--build=i386-intel-osf1" to get rid of the WARNING.
+
+3) gmake H5detect
+
+
+FROM JANUS, 
+
+4) cd <hdf5>
+
+5) gmake H5Tinit.c
+
+
+FROM SASN100,
+
+6) gmake
+
+
+When everything is finished compiling and linking,
+FROM JANUS, 
+
+7) gmake check 
+   (We have not encountered the following problem for a year.)
+   Sometimes the "gmake check" fails in the sub-directories of test
+   or tools with a message as "print not found".  This is due to the
+   "gmake" of Janus thinking some binary code needs to be recompiled.
+   The easiest way to fix it is
+   FROM SASN100
+   cd <hdf5>/test	# or cd <hdf5>/tools
+   gmake clean; gmake   # re-make all binary
+
+
+Once satisfied with the parallel test results, as long as you 
+have the correct permission,
+FROM SASN100,
+
+8) gmake install
+
+
+---------------
+Sequential HDF5:
+---------------
+(**NOTE** We have stopped testing sequential HDF5 for the Tflops machine
+since it has little practical value to build sequential applications for
+the Tflops machine.  The instruction below are kept more for historical
+purpose.)
+
+The setup process for building the sequential HDF5 library for the
+ASCI Red machine is done by a coordination of events from sasn100 and
+janus.  Though janus can do compiling, it is better to build it
+from sasn100 which has more complete building tools and runs faster.
+It is also anti-social to tie up janus with compiling.  The HDF5 building
+requires the use of janus because one of steps is to execute a program
+to find out the run-time characteristics of the TFLOPS machine.
+
+Assuming you have already unpacked the HDF5 tar-file into the 
+directory <hdf5>, follow the steps below:
+
+FROM SASN100,
+
+1) cd <hdf5>
+
+2) ./configure --host=i386-intel-osf1 --with-zlib=/usr/community/hdf5/ZLIB
+
+   Skip the "--with-zlib=..." option if you do not wish to include the zlib
+   compression feature.  Without the zlib compression feature, the library
+   will not be able to access zlib compressed datasets.
+
+   You may safely ignore the WARNING message,
+    =========
+    configure: WARNING: If you wanted to set the --build type, don't use --host.
+	If a cross compiler is detected then cross compile mode will be used.
+    =========
+   You may add the option "--build=i386-intel-osf1" to get rid of the WARNING.
+
+   (The previous bugs in src/Makefile and test/Makefile have been resolved.
+    You don't need to edit them any more.)
+
+3) gmake H5detect
+
+
+FROM JANUS, 
+
+4) cd <hdf5>
+
+5) gmake H5Tinit.c
+
+
+FROM SASN100,
+
+6) gmake
+
+
+When everything is finished compiling and linking,
+you can run the tests by
+FROM JANUS, 
+
+7) gmake check 
+     Sometimes the "gmake check" fails in the sub-directories of test
+     or tools with a message as "print not found".  This is due to the
+     "gmake" of Janus thinking some binary code needs to be recompiled.
+     The easiest way to fix it is
+     FROM SASN100
+     cd <hdf5>/test	# or cd <hdf5>/tools
+     gmake clean; gmake   # re-make all binary
+
+
+Once satisfied with the test results, you can install
+the software by
+FROM SASN100,
+
+8) gmake install
+
+

Added: packages/hdf5/branches/upstream/current/release_docs/INSTALL_VFL
===================================================================
--- packages/hdf5/branches/upstream/current/release_docs/INSTALL_VFL	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/release_docs/INSTALL_VFL	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,130 @@
+		Installation Instructions for HDF5
+                with Different Virtual File Layer 
+              
+                   *              *             *
+
+This file contains installation instructions for HDF5 with certain Virtual File
+Layer to handle file I/O.  We currently have documented SRB and Globus-GASS.
+
+
+
+                         ---   Part I.   SRB   ---
+I. Overview
+-----------
+This part contains instructions for remote-accessing HDF5 through SRB.  The 
+SRB version 1.1.7 on Sun Solaris 2.7 platform has been tested.  If you have 
+difficulties installing the software in your system, please send mails to me
+(Raymond Lu) at
+
+        slu at ncsa.uiuc.edu
+
+First, you must obtain and unpack the HDF5 source as described in the file 
+INSTALL.  You need the SRB library(client part) installed.  You should also 
+have access to SRB server. 
+
+
+The Storage Resource Broker(SRB) from San Diego Supercomputer Center is client-
+server middleware that provides a uniform interface for connecting to 
+heterogeneous data resources over a network and accessig replicated data sets.
+SRB, in conjunction with the Metadata Catalog(MCAT), provides a way to access 
+data sets and resources based on their attributes rather than their names or 
+physical locations.  Their webpage is at http://www.npaci.edu/Research/DI/srb.
+
+HDF5 is built on the top of SRB as a client to remotely access files on SRB
+server through SRB.  Right now, HDF-SRB only support low-level file transfer of
+SRB.  The MCAT part is not supported yet.  Low-level file transfer means files
+are treated just like Unix type files.  Files can be read, written and 
+appended.  Partial access(read and write to a chunk of file without transferrig
+the whole) is also supported.  
+
+
+II. Installation Steps
+----------------------
+The installation steps are similar to the ones in INSTALL file:
+
+1. Run 'configure' file with SRB options:
+   configure --with-srb=$SRB/include,$SRB/lib
+   where $SRB is your SRB installed library directory.
+
+   For example, below is a script file to run 'configure':
+	#! /bin/sh
+	# how to configure to use the SRB
+
+	SRB_DIR=/afs/ncsa.uiuc.edu/projects/hdf/users/slu/srb_install
+	configure --with-srb=$SRB_DIR/include,$SRB_DIR/lib
+
+2. Run 'make'
+
+3. Run 'make check'
+
+4. Run 'make install'
+
+5. Run testing program(Optional):
+   Go to the testing directory(cd test) and run srb_write, srb_read, 
+   srb_append.  Actually, these tests have been run in step 3.
+
+   srb_write:  Connect to SRB server, write an HDF5 file with an integer 
+               dataset to SRB server.
+   srb_read:   Connect to SRB server, read part of HDF5 file on the SRB server.
+   srb_append: Connect to SRB server, append an integer dataset to an existent
+               HDF5 file on the SRB server.
+
+6. For using HDF-SRB, please read comments in srb_write.c, srb_read.c, 
+   srb_append.c in the hdf5/test directory.
+
+
+
+                      ---   Part II.   Globus-GASS   ---
+
+I. Overview
+-----------
+This part contains instructions for remote-accessing HDF5 through Globus-GASS.
+The SGI IRIX64(and IRIX) 6.5 platform have been tested.  If you have 
+difficulties installing the software in your system, please send mails to me
+(Raymond Lu) at
+        slu at ncsa.uiuc.edu
+
+First, you must obtain and unpack the HDF5 source as described in the file 
+INSTALL.  You need the Globus 1.1.x and SSL(should have come with Globus) 
+packages.  
+
+HDF5 is built on the top of Globus-GASS(1.1.x) to handle remote access.  
+Globus-GASS(1.1.x) only supports HTTP and HTTPS protocals for 'whole file 
+read and write'.  More features may be added in the future.  
+
+II. Installation Steps
+----------------------
+The installation steps are similar to the ones in INSTALL file:
+
+1. Run 'configure' file with SSL and GASS options:
+   configure --with-ssl=$SSL/lib --with-gass=$GASS/include,$GASS/lib
+   where $SSL is your SSL directory, and $GASS is your Globus directory.
+
+   For example, below is a script file to run 'configure':
+	#! /bin/sh
+	# how to configure to use the Globus-GASS(1.1.x)
+
+	GASS_DIR=/usr/local/globus-install-1.1.1/development/mips-sgi-irix6.5-64_nothreads_standard_debug
+	SSL_LIB=/usr/local/ssl/lib
+
+	configure --with-ssl=$SSL_LIB --with-gass=$GASS_DIR/include,$GASS_DIR/lib
+
+2. Run 'make'
+
+3. Run 'make check'
+
+4. Run 'make install'
+
+5. Run testing program:
+   There is one read testing program called 'gass_read' in the 'test' 
+   directory.  It does whole file read through HTTP protocal.  The URL is 
+   hard coded as 
+      http://hdf.ncsa.uiuc.edu/GLOBUS/a.h5
+
+   The writing really depends on your web server.  You have to set up your 
+   server in right way to accept writing in files.  We have tested it using 
+   Apache Server(1.3.12) without authentication.  If you need more details 
+   about our testing, please contact us.  Globus suggests using their GASS
+   server. 
+
+   There is another program called 'gass_append' used for experiments.

Added: packages/hdf5/branches/upstream/current/release_docs/INSTALL_Windows.txt
===================================================================
--- packages/hdf5/branches/upstream/current/release_docs/INSTALL_Windows.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/release_docs/INSTALL_Windows.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1288 @@
+HDF5 Build and Install Instructions for Windows 2000/XP (Full Version)
+------------------------------------------------------------------------
+
+The following instructions assume that the HDF5 source code package from
+HDF website (http://hdf.ncsa.uiuc.edu) is used.
+
+
+***************************WARNINGS*************************************
+Please read CAREFULLY about the following preconditions and notes first.
+
+Preconditions 
+
+   1. Installed Microsoft Visual C++ 6.0 or Intel C compiler and WinZip.
+       
+      1.1 Installed DEC Visual Fortran compiler(6.0 or higher version), 
+          or Intel Fortran compiler if you want to build HDF5 Fortran
+          libraries.    
+
+      Note: By default, WinZip will convert the Unix end of line format
+            when extracting .tar file.  This conversion will cause
+            "false" failure in some HDF5 tools testings.
+ 
+            Please uncheck the "TAR file smart CR/LF conversion" option
+            in your WinZip to prevent the conversion when extracting
+            .tar file.
+
+            To uncheck the "TAR file smart CR/LF conversion" option:
+
+            Invoke WinZip, go to "Options", select "Configuration..."
+
+            Click the "Miscellaneous" tab and uncheck "TAR file smart
+            CR/LF conversion" option, then click OK.
+
+   2. Set up a directory structure to unpack the library.  For example:
+
+	        c:\                              (any drive)
+	        MyHDFstuff\                      (any folder name)
+
+   3. Download the hdf5-1.6.x source code package and use WinZip to 
+      extract the HDF5 package into c:\MyHDFstuff.  This creates a 
+      directory called 'hdf5-1.6.x' under MyHDFstuff which contains 
+      several files and directories.  Rename "hdf5-1.6.x" to "hdf5".  
+
+   4. HDF5 provide options to do in-memory compress within HDF5
+      library.  Currently, two external compression libraries Zlib and
+      Szip can be used with HDF5.
+
+      4.1 HDF5 uses Zlib version 1.2.2 for compression and Zlib is NOT
+          distributed with HDF5 library in 1.6.x release. To use Zlib
+          library, you have to install your own Zlib DLL library or go
+          to ftp://hdf.ncsa.uiuc.edu/lib-external/zlib/bin/windows 
+          to download the Zlib library.
+
+          Note: Zlib 1.2.2 DLL library can also be downloaded from
+          http://www.zlib.net/zlib122-dll.zip
+      
+      4.2 HDF5 uses Szip version 2.0 for compression and Szip
+          compression software is provided with HDF5 products starting
+          from 1.6.0 release.  To use Szip 2.0 library, you can
+          download Szip source codes and binaries from
+          ftp://hdf.ncsa.uiuc.edu/lib-external/szip/bin/windows
+
+          Please note that Szip is not a totally open-source free
+          software.  For licensing issue of Szip, please check 
+          "Licensing terms" at
+          http://hdf.ncsa.uiuc.edu/doc_resource/SZIP/index.html.
+
+      Compression feature inside HDF5 is optional. 
+      
+   5. Define the following environment variables: 
+
+        HDF5_EXT_ZLIB
+        HDF5_EXT_SZIP
+      
+      In this section, Zlib and Szip compression software are assumed
+      to be used.  Please read section V as well as this section if you
+      do not want to use compression feature inside HDF5.
+      
+      To define these environment variables:
+      
+      Click "Start", click "Control Panel", and then double-click
+      "System".  On the "Advanced" tab, click "Environment Variables".
+      
+      If you are logged on as administrator to the local computer AND
+      want to let all other users use these two environment variables,
+      click "New" under "System Variables" box; otherwise, click "New"
+      under "User Variables" box.
+      
+      In the New Variable window, set "Variable name" as HDF5_EXT_ZLIB
+      and "Variable value" as zdll.lib, then click OK.
+      
+      Similarly, you can set:
+
+      HDF5_EXT_SZIP environment variable as szlibdll.lib
+
+      Notes:
+
+         a. You might have to close and reopen running programs for
+            the new environment variable settings to take effect. 
+
+         b. c:\zlib122\zlib1.dll and c:\szip\dll\szlibdll.dll should
+            be copied into the location that the application can find,
+            one suggestion is to use the c:\WINNT\system or
+            c:\WINDOWS\system
+      
+   6. Set up path for external libraries and headers
+    
+      Skip this part if you don't want to use ANY compression feature
+      provided by HDF5.  Please do read section V.
+
+      You have to read this part even if you want to only use Zlib
+      or Szip.  You also need to read section V.
+
+      Invoke Microsoft Visual C++ and go to "Tools" and select
+      "Options", find "Directories";
+      
+      6.1 Find the box "Show directories for", choose 
+          "Include files",
+          If you cannot find your Zlib and Szip header path
+          (for example, c:\zlib122\include, c:\szip\include)
+          from the directory list, add the header path
+          (c:\zlib122\include, c:\szip\include) to the 
+          included directories.
+      
+      6.2 Find the box "Show directories for", choose "Library files",
+          If you cannot find your Zlib and Szip library path
+          (for example, c:\zlib122\lib, c:\szip\dll)
+          from the directory list, add the library path
+          (c:\zlib122\lib, c:\szip\dll) to the library directories.
+      
+Notes
+
+   1. To build HDF5 C++ and FORTRAN libraries, please read through
+      this document.
+   
+   2. For users who want to quickly build HDF5 library or do not 
+      want to know HDF5 building and installation details, please 
+      read INSATLL_Windows_Short.txt.
+
+   3. For users who would like to build and test HDF5 package from the 
+      command line, please read INSATLL_Windows_From_Command_Line.txt.
+   
+   4. HDF4-related tools are not built and released with HDF5 library
+      packages any more. To obtain HDF4-related tools, please check
+      http://hdf.ncsa.uiuc.edu/h4toh5/ and 
+      ftp://hdf.ncsa.uiuc.edu/HDF5/h4toh5/
+
+   5. For DLL users, please do read and follow "DLL hints"
+      at Section IV.
+
+   6. For .NET users, please read section VI.
+
+   7. For users who would like to build, test and use HDF5 snapshot
+      release, please read Section VII.
+
+------------------------------------------------------------------------
+
+The following sections discuss installation procedures in detail:
+
+   Section I:    What do we build and install
+   Section II:   How to build and test HDF5 libraries and tools 
+   Section III:  How to build an application using the HDF5 library 
+                 or DLL
+   Section IV:   Helpful pointers
+   Section V:    How to disable Gzip(Zlib)/Szip compression  
+   Section VI:   How to build in HDF5 in VS 7.0(.NET) and Intel 8.x with
+                 .NET environment
+   Section VII:  How to build and test HDF5 snapshot release
+   Section VIII: Misc. 
+
+************************************************************************
+
+Section I: What do we build and install? 
+========================================================================
+
+   1. Build and Install
+
+      HDF5 static library: 
+           debug and release version
+
+      HDF5 Dynamic Link Library(DLL): 
+           debug and release version as well as export libraries for DLL
+
+      HDF5 tools:
+           HDF5 tools 
+
+   2. Build Only (Not included in the binary distribution)        
+
+      HDF5 tool library:
+           debug and release version
+
+      HDF5 tool export library for DLL:
+           debug and release version 
+
+      HDF5 library testing programs:
+           HDF5 library comprehensive tests
+		
+      HDF5 related tools testing programs:
+           HDF5 tools comprehensive tests
+
+   3. Examples (Not included in the binary distribution)
+
+      HDF5 examples:
+           simple HDF5 C/C++/Fortran examples
+
+************************************************************************
+
+
+Section II: How to build and test HDF5 libraries and tools 
+========================================================================
+STEP 1: Building HDF5 libraries and tools
+    
+   1. Unpack all.zip
+    
+      Unpack all.zip in c:\MyHDFstuff\hdf5\windows directory.  Files in 
+      all.zip has path hdf5\....  Make sure that you extract files into
+      the c:\MyHDFstuff directory. 
+
+   2. Invoke Microsoft Visual C++ compiler
+    
+      Invoke Microsoft Visual C++.  From the main menu, go to "File"
+      and select the "Open Workspace" option. Then open the
+      c:\MyHDFstuff\hdf5\proj\all\all.dsw workspace. 
+
+      You should find windows project files listed as "all files, 
+      big files etc." on the left.        
+
+   3. (Optional) HDF5 C++, Fortran libraries and Intel compiler
+    
+      3.1 Skip this step if you do not want to build HDF5 C++ libraries
+        
+          Go to "Project" and select "dependencies";
+          Select "all" in the "Select project to modify:" box,
+          then enable the desired projects:
+      
+             dsets_cpp
+             dsets_cppdll
+             hdf5_cpp
+             hdf5_cppdll
+             testhdf5_cpp
+             testhdf5_cppdll
+
+      3.2 Skip this step if you do not want to build HDF5 Fortran
+          libraries
+        
+          Go to "Project" and select "dependencies";
+          Select "all" in the "Select project to modify:" box,
+          then enable the desired projects:
+              
+             flush1_fortran
+             flush1_fortrandll
+             flush2_fortran
+             flush2_fortrandll
+             hdf5_f90cstub
+             hdf5_f90cstubdll
+             hdf5_fortran
+             hdf5_fortrandll
+             libtest_cstubdll
+             libtest_fortran
+             libtest_fortrandll
+             testhdf5_fortran
+             testhdf5_fortrandll
+
+      3.3 Skip this step if you are not using Intel 7.x compilers
+    
+          a. Intel C Compiler
+             Go to Tools-->Select Compiler
+             Check Intel box and click OK button.
+          
+          b. Intel Fortran Compiler
+             Go to Tools-->Select Compiler
+             Check Intel box and click OK button.
+             Go to Tools-->Customize-->Add-ins and Macro Files
+             and check Intel Fortran Compiler Build Tool
+           
+          Note: Szip library is different when using Intel 7.x compiler.
+                You should build Szip source codes with Intel
+                compiler or download binaries for Intel compiler
+                from ftp://ftp.ncsa.uiuc.edu/HDF/szip/bin/windows.
+                The Szip library and header path should also be 
+                set up accordingly (refer to precondition 6).
+               
+   4. Select "Build", then Select "Set Active Configuration".
+
+      In "Project configurations", select the active configuration
+
+            "all -- Win32 Debug" to build debug versions of
+                    single-threaded static libraries, Debug 
+                    multithreaded DLLs and tests. 
+                
+                    or
+
+            "all -- Win32 Release" to build release versions of
+                    single-threaded static libraries, 
+                    multithreaded DLLs and tests.
+
+      Then build project "all".
+       
+      Warning messages can be ignored. 
+
+      When the debug or release build is done the directories 
+      listed below will contain the following files:
+
+            c:\MyHDFstuff\hdf5\proj\hdf5\debug - 
+
+               hdf5d.lib- the hdf5 static library
+
+            c:\MyHDFstuff\hdf5\proj\hdf5\release - 
+
+               hdf5.lib- the hdf5 static library
+
+            c:\MyHDFstuff\hdf5\proj\hdf5dll\debug - 
+
+               hdf5ddll.dll- DLL
+               hdf5ddll.lib- the DLL export library                  
+
+            c:\MyHDFstuff\hdf5\proj\hdf5dll\release - 
+
+               hdf5dll.dll- DLL
+               hdf5dll.lib- the DLL export library
+
+            c:\MyHDFstuff\hdf5\test\libtest\debug - 
+        and c:\MyHDFstuff\hdf5\test\libtest\release -
+            
+               libtest.lib - the internal library for test
+
+            c:\MyHDFstuff\hdf5\test\libtestD\debug -
+
+               libtestD.dll - the internal DLL for test
+               libtestD.lib - the internal DLL export library for test
+
+            c:\MyHDFstuff\hdf5\test\libtestD\release -
+
+               libtestD.dll - the internal DLL for test
+               libtestD.lib - the internal DLL export library for test
+
+            c:\MyHDFstuff\hdf5\tools\toolslib\debug -
+        and c:\MyHDFstuff\hdf5\tools\toolslib\release -
+
+               toolslib.lib- the internal tools library
+
+            c:\MyHDFstuff\hdf5\tools\toolslibD\debug -
+        and c:\MyHDFstuff\hdf5\tools\toolslibD\release -
+
+               toolslibD.dll- DLL
+               toolslibD.lib- the internal DLL export library for tools 
+
+            c:\MyHDFstuff\hdf5\tools\"tools directory"-
+            where tools are located		
+
+       The directories listed below will contain the following files
+       ONLY when you choose to build HDF5 C++ libraries:
+       
+            c:\MyHDFstuff\hdf5\proj\hdf5_cpp\debug - 
+               
+               hdf5_cppd.lib- the HDF5 C++ API static library
+
+            c:\MyHDFstuff\hdf5\proj\hdf5_cpp\release - 
+               
+               hdf5_cpp.lib- the HDF5 C++ API static library
+
+            c:\MyHDFstuff\hdf5\proj\hdf5_cppdll\debug - 
+               
+               hdf5_cppddll.dll- the HDF5 C++ API DLL
+               hdf5_cppddll.lib- the C++ API DLL export library
+               
+            c:\MyHDFstuff\hdf5\proj\hdf5_cppdll\release - 
+               
+               hdf5_cppdll.dll- the HDF5 C++ API DLL
+               hdf5_cppdll.lib- the C++ API DLL export library
+            
+       The directories listed below will contain the following files
+       ONLY when you choose to build HDF5 Fortran libraries:
+
+            c:\MyHDFstuff\hdf5\proj\hdf5_fortran\debug - 
+       
+               hdf5_fortrand.lib- the HDF5 Fortran API static library
+               
+            c:\MyHDFstuff\hdf5\proj\hdf5_fortran\release - 
+       
+               hdf5_fortran.lib- the HDF5 Fortran API static library
+
+            c:\MyHDFstuff\hdf5\proj\hdf5_fortrandll\debug - 
+       
+               hdf5_fortranddll.dll- the HDF5 Fortran API DLL
+               hdf5_fortranddll.lib- the HDF5 Fortran API DLL export
+                                     library
+               
+            c:\MyHDFstuff\hdf5\proj\hdf5_fortrandll\release - 
+       
+               hdf5_fortrandll.dll- the HDF5 Fortran API DLL
+               hdf5_fortrandll.lib- the HDF5 Fortran API DLL export
+                                    library
+               
+            c:\MyHDFstuff\hdf5\proj\hdf5_f90sctub\debug - 
+
+               hdf5_f90cstubd.lib- the HDF5 C and Fortran stub static
+                                   library
+
+            c:\MyHDFstuff\hdf5\proj\hdf5_f90cstub\release - 
+
+               hdf5_f90cstub.lib- the HDF5 C and Fortran stub static
+                                  library
+
+            c:\MyHDFstuff\hdf5\proj\hdf5_f90sctubdll\debug - 
+
+               hdf5_f90cstubddll.dll- the HDF5 C and Fortran stub DLL
+               hdf5_f90cstubddll.lib- the HDF5 C and Fortran stub DLL
+                                      export library
+
+            c:\MyHDFstuff\hdf5\proj\hdf5_f90cstubdll\release - 
+
+               hdf5_f90cstubdll.dll- the HDF5 C and Fortran stub DLL
+               hdf5_f90cstubdll.lib- the HDF5 C and Fortran stub DLL
+                                     export library
+
+            c:\MyHDFstuff\hdf5\fortran\test\libtest_cstubdll\debug - 
+          
+               libtest_cstubddll.dll- the HDF5 Fortran test C and
+                                      Fortran stub DLL
+               libtest_cstubddll.lib- the HDF5 Fortran test C and
+                                      Fortran stub DLL export library
+
+            c:\MyHDFstuff\hdf5\fortran\test\libtest_cstubdll\release - 
+          
+               libtest_cstubdll.dll- the HDF5 Fortran test C and
+                                     Fortran stub DLL
+               libtest_cstubdll.lib- the HDF5 Fortran test C and
+                                     Fortran stub DLL export library
+
+            c:\MyHDFstuff\hdf5\fortran\test\libtest_fortran\debug - 
+          
+               libtest_fortrand.lib- the HDF5 Fortran test static
+                                     library
+
+            c:\MyHDFstuff\hdf5\fortran\test\libtest_fortran\release - 
+          
+               libtest_fortran.lib- the HDF5 Fortran test static
+                                    library
+
+            c:\MyHDFstuff\hdf5\fortran\test\libtest_fortrandll\debug - 
+          
+               libtest_fortranddll.dll- the HDF5 Fortran test DLL
+               libtest_fortranddll.lib- the HDF5 Fortran test DLL
+                                        export library
+
+            c:\MyHDFstuff\hdf5\fortran\test\libtest_fortran\release - 
+          
+               libtest_fortrandll.dll- the HDF5 Fortran test DLL
+               libtest_fortrandll.lib- the HDF5 Fortran test DLL
+                                       export library
+              
+
+STEP 2: Testing HDF5 libraries and tools
+
+HDF5 libraries and tools should be tested to make sure that they were
+built correctly.
+
+We provide 2 options for users to test HDF5 libraries and tools.  
+
+   Option 1: Automatic testings
+
+   HDF5 comes with various test suites, all of which can be tested
+   with hdf5check.bat batch file in c:\MyHDFstuff\hdf5 directory.
+
+   To use automatic testing batch file, you must build both HDF5 
+   release and debug libraries.
+
+   hdf5check batch file can be run with one of the following four
+   options:
+   
+      hdf5check                  test HDF5 C library and tools only
+      
+      hdf5check enablecpp        test HDF5 C/C++ libraries and tools
+                                 To use this option, HDF5 C++ 
+                                 libraries must have been built 
+                                 in step I.
+      
+      hdf5check enablefortran    test HDF5 C/FORTRAN libraries and
+                                 tools
+                                 To use this option, HDF5 Fortran
+                                 libraries must have been built 
+                                 in step I.      
+      
+      hdf5check enableall        test HDF5 C/C++/FORTRAN libraries
+                                 and tools
+                                 To use this option, HDF5 C++ and 
+                                 Fortran libraries must have been
+                                 built in step I.      
+
+   Invoke a command prompt window and run hdf5check with appropriate
+   option.
+
+   Test results are saved in two files:
+
+      c:\MyHDFstuff\hdf5\check_results.txt   
+
+      c:\MyHDFstuff\hdf5\tests_results.txt.
+
+   In general, you only need to check tests_results.txt.  If all the
+   tests passed, then you do not have to check check_results.txt.  
+   If some tests failed, check check_results.txt can help you
+   figure out what was wrong.
+
+   Option 2: Step-by-step HDF5 libraries and tools testings
+
+   You can also test HDF5 libraries and tools one by one.  There are
+   possibly four versions of HDF5 libraries and tools testings. 
+
+   They are:
+
+      release version
+      release dll version
+      debug version
+      debug dll version
+
+   We strongly suggest you to redirect your testing results into an
+   output file so that you can easily check the testing results. You
+   may use either Notepad or WordPad or whatever other windows word
+   processor to check the results.  For the purpose of printing,  
+   please choose font less than 14 for better alignment of the text.
+
+   DLLs listed below should be placed into the Windows system
+   directory.  A batch file named install_dll.bat is included in 
+   c:\MyHDFstuff\hdf5 directory.  Run this batch file and the 
+   following HDF5 DLLs will be copied to the system directory.
+
+      hdf5\proj\hdf5dll\release\hdf5dll.dll
+      hdf5\proj\hdf5dll\debug\hdf5ddll.dll
+      hdf5\test\libtestD\release\libtestD.dll
+      hdf5\test\libtestD\debug\libtestDd.dll
+
+   1. HDF5 library testing 
+
+      cd into the hdf5\test directory. 
+
+         (1) basic tests
+            
+             Go to a) b) c) or d) to test your chosen version
+
+             a) release static version
+             type:             
+                hdf5test release >"Your output filename" 
+
+             b) release dll version
+             type:
+                hdf5test release dll > "Your output filename"
+				
+             c) debug static version
+             type: 
+                hdf5test debug >"Your output filename"
+
+             d) debug dll version
+             type:
+                hdf5test debug dll >"Your output filename"
+            
+         (2) timing tests
+
+             Go to a) b) c) or d) to test your chosen version
+ 
+             a) release static version
+             type:             
+                hdf5timingtest release >"Your output filename" 
+
+             b) release dll version
+             type:
+                hdf5timingtest release dll >"Your output filename"
+				
+             c) debug static version
+             type: 
+                hdf5timingtest debug >"Your output filename"
+
+             d) debug dll version
+             type:
+                hdf5timingtest debug dll >"Your output filename"
+
+      Use Notepad or WordPad to check results. You should 
+      not find any FAILED marks in your output files.
+
+   2. HDF5 tools testing
+ 
+      To test HDF5 tools, cd back into hdf5 directory and then cd into 
+      tools directory(c:\MyHDFstuff\hdf5\tools).  The HDF5 tools testing
+      results are saved into output files in tools directory by the
+      testhdf5tools.bat as described below.
+
+      Go to a) b) c) or d) to test your chosen version
+
+         a) release static version
+         type:             
+            testhdf5tools release
+         output file: toolstest_release.txt 
+
+         b) release dll version
+         type:
+            testhdf5tools release dll
+         output file: toolstest_releasedll.txt 
+				
+         c) debug static version
+         type: 
+            testhdf5tools debug
+         output file: toolstest_debug.txt 
+
+         d) debug dll version
+         type:
+            testhdf5tools debug dll
+         output file: toolstest_debugdll.txt 
+               
+      Use Notepad or WordPad to check results. You should 
+      not find any FAILED marks in your output files.
+    
+   3. HDF5 C++ library test
+  
+      Skip this step UNLESS you have built HDF5 C++ libraries
+      and want to test them.
+     
+      DLLs listed below should be placed into to the Windows system
+      directory.  A batch file named install_cppdll.bat is included in 
+      c:\MyHDFstuff\hdf5 directory.  Run this batch file and the 
+      following HDF5 C++ DLLs will be copied to the system directory.
+       
+         hdf5\proj\hdf5_cppdll\release\hdf5_cppdll.dll
+         hdf5\proj\hdf5_cppdll\debug\hdf5_cppddll.dll
+
+      Run hdf5cpptest.bat in the hdf5\c++\test directory at the 
+      command prompt as below:
+     
+         hdf5cpptest release >"Your output filename"
+         hdf5cpptest release dll >"Your output filename"
+         hdf5cpptest debug >"Your output filename"
+         hdf5cpptest debug dll >"Your output filename"
+
+      Use Notepad or WordPad to check results. You should 
+      not find any FAILED marks in your output files.
+     
+   4. HDF5 Fortran library test
+  
+      Skip this step UNLESS you have built HDF5 Fortran libraries     
+      and want to test them.
+     
+      DLLs listed below should be placed into to the Windows system
+      directory.  A batch file named install_f90dll.bat is included in 
+      c:\MyHDFstuff\hdf5 directory.  Run this batch file and the 
+      following HDF5 Fortran DLLs will be copied to the system
+      directory.
+       
+         hdf5\proj\hdf5_f90cstubdll\release\hdf5_f90cstubdll.dll
+         hdf5\proj\hdf5_f90cstubdll\debug\hdf5_f90cstubddll.dll
+         hdf5\proj\hdf5_fortrandll\release\hdf5_fortrandll.dll
+         hdf5\proj\hdf5_fortrandll\debug\hdf5_fortranddll.dll
+         hdf5\fortran\test\libtest_cstubdll\release\libtest_cstubdll.dll
+         hdf5\fortran\test\libtest_cstubdll\debug\libtest_cstubddll.dll
+         hdf5\fortran\test\libtest_fortrandll\release\libtest_fortrandll.dll
+         hdf5\fortran\test\libtest_fortrandll\debug\libtest_fortranddll.dll
+
+      Run testhdf5_fortran.bat at the command prompt as below:
+
+         testhdf5_fortran release >"Your output filename"
+         testhdf5_fortran release dll >"Your output filename"
+         testhdf5_fortran debug >"Your output filename"
+         testhdf5_fortran debug dll >"Your output filename"
+
+      Use Notepad or WordPad to check results. You should 
+      not find any FAILED marks in your output files.
+
+     
+STEP 3: Installing HDF5 Libraries
+
+We provide a batch file for users to relocate all HDF5 libraries in one
+folder (C++ and Fortran libraries will also be copied into this folder
+if they have been built in step I).  The file is called
+installhdf5lib.bat under c:\MyHDFstuff\hdf5 directory.  Run the batch 
+file, you may see a folder called hdf5lib under c:\MyHDFstuff\hdf5.  
+    
+The <release> layout of <hdf5lib> should be:
+    
+   release\include   --  HDF5 header files
+   release\bin       --  HDF5 static tool executables
+   release\bindll    --  HDF5 DLL tool executables
+   release\lib       --  HDF5 static libraries
+   release\dll       --  HDF5 DLLs
+       
+You may also find the similar layout for the <debug>.
+
+
+STEP 4: Building HDF5 C/C++/Fortran examples (Optional)
+
+Simple examples have been provided for users to test HDF5
+C/C++/Fortran library and tools.
+
+Note: 
+      1) To build HDF5 C++ examples, HDF5 C++ library must have been
+         built in step I.
+
+      2) To build HDF5 Fortran examples, HDF5 Fortran library must
+         have been built in step I.
+
+      3) By default, the debug versions of HDF5 C/C++/Fortran examples
+         are linked with the debug versions of HDF5 C/C++/Fortran
+         libraries and DLLs.  The debug versions of HDF5 C/C++/Fortran
+         examples will fail if they are linked with HDF5 binary
+         distribution, which only includes the release versions of
+         HDF5 C/C++/Fortran libraries and DLLs.
+
+To build and test HDF5 C examples:
+
+   1. Invoke Microsoft Visual C++, go to "File" and select
+      the "Open Workspace" option. 
+      
+      Then open the workspace
+      c:\MyHDFstuff\hdf5\examples\allexamples\allexamples.dsw.
+
+   2. Select "Build", then Select "Set Active Configuration".
+
+      In "Project configurations", select the active configuration
+
+          "allexamples -- Win32 Debug" to build debug versions of the
+                                       C examples.
+
+                          or
+	
+          "allexamples -- Win32 Release" to build release versions the 
+                                         C examples.
+
+      When the debug build or release build is done, there should be the 
+      following subdirectories in c:\MyHDFstuff\hdf5\examples\
+
+          attributetest
+          attributetestdll
+          chunkread
+          chunkreaddll
+          compoundtest 
+          compoundtestdll
+          extendwritetest 
+          extendwritetestdll
+          grouptest 
+          grouptestdll
+          readtest 
+          readtestdll
+          selecttest 
+          selecttestdll
+          writetest 
+          writetestdll
+
+   3. Invoke a command prompt window and run the batch file 
+      InstallExamples.bat which resides in the top level directory
+      (c:\MyHDFstuff\hdf5).  This file creates 4 new directories, 
+      examplesREL, examplesRELDLL, examplesDBG, and examplesDBGDLL,
+      in the c:\MyHDFstuff\hdf5\examples directory and places all the
+      executables in it.  Both the release and debug versions of the
+      examples should be built before this step is done.
+
+   4. We provide a batch file named testExamples.bat and an expected
+      examples tests output file named testExamples_exp_output.txt
+      in c:\MyHDFstuff\hdf5\examples directory for you to test HDF5
+      C examples. You need to run InstallExamples.bat before running 
+      testExamples.bat. 
+      
+      testExamples.bat batch file has 4 options:
+
+         testExamples release     -- for release version
+
+         testExamples release dll -- for release DLL version
+
+         testExamples debug       -- for debug version
+
+         testExamples debug dll   -- for debug DLL version
+
+      Invoke a command prompt window and run testExamples with
+      appropriate options.  You should get "All HDF5 C examples tests
+      passed." when the C examples are built successfully.  Otherwise,
+      the difference between the expected outputs and actual outputs
+      will be given.
+
+To build and test HDF5 C++ examples:
+
+   1. Invoke Microsoft Visual C++, go to "File" and select
+      the "Open Workspace" option. 
+
+      Then open the workspace
+      c:\myHDFstuff\hdf5\c++\examples\allcppexamples\allcppexamples.dsw.
+
+   2. Select "Build", then Select "Set Active Configuration".
+
+      In "Project configurations", select the active configuration
+
+          "allcppexamples -- Win32 Debug" to build debug versions of the
+                                          C++ examples.
+
+                             or
+	
+          "allcppexamples -- Win32 Release" to build release versions the 
+                                            C++ examples.
+
+      When the debug build or release build is done, there should be the 
+      following subdirectories in c:\MyHDFstuff\hdf5\c++\examples\
+
+          chunkstest
+          chunkstestdll
+          compoundtest 
+          compoundtestdll 
+          createtest 
+          createtestdll 
+          extend_dstest 
+          extend_dstestdll 
+          h5grouptest 
+          h5grouptestdll 
+          readdatatest 
+          readdatatestdll 
+          writedatatest 
+          writedatatestdll 
+
+   3. Invoke a command prompt window and run the batch file 
+      InstallcppExamples.bat which resides in the top level directory
+      (c:\MyHDFstuff\hdf5).  This file creates 4 new directories, 
+      cppexamplesREL, cppexamplesRELDLL, cppexamplesDBG,
+      and cppexamplesDBGDLL, in the c:\MyHDFstuff\c++\examples
+      directory and places all the executables in it.  Both the release
+      and debug versions of the examples should be built before this 
+      step is done.
+
+   4. We provide a batch file named testcppExamples.bat in
+      c:\MyHDFstuff\hdf5\c++\examples directory for you to test HDF5
+      C++ examples. You should run InstallcppExamples.bat before
+      running testcppExamples.bat.
+      
+      testcppExamples.bat batch file has 4 options:
+
+         testcppExamples release     -- for release version
+
+         testcppExamples release dll -- for release DLL version
+
+         testcppExamples debug       -- for debug version 
+
+         testcppExamples debug dll   -- for debug DLL version 
+
+      Invoke a command prompt window and run testcppExamples with
+      appropriate options.  You should get "All HDF5 C++ examples tests
+      passed." when the C++ examples are built successfully.  Otherwise,
+      the difference between the expected outputs and actual outputs
+      will be given.
+
+To build and test HDF5 Fortran example:
+
+   1. Invoke Compaq visual Fortran or intel Fortran under Microsoft 
+      Visual studio development environment, go to "File" and select
+      the "Open Workspace" option.
+
+      Then open the workspace
+      c:\MyHDFstuff\hdf5\fortran\examples\allf90examples\allf90examples.dsw.
+
+   2. Select "Build", then Select "Set Active Configuration".
+
+      In "Project configurations", select the active configuration
+
+          "allf90examples -- Win32 Debug" to build debug versions of the
+                                          Fortran examples.
+
+                             or
+	
+          "allf90examples -- Win32 Release" to build release versions the 
+                                            Fortran examples.
+
+      When the debug build or release build is done, there should be the 
+      following subdirectories in c:\MyHDFstuff\hdf5\fortran\examples\
+
+          attreexampletest
+          attreexampletestdll 
+          compoundtest 
+          compoundtestdll
+          dsetexampletest
+          dsetexampletestdll
+          fileexampletest
+          fileexampletestdll
+          groupexampletest
+          groupexampletestdll
+          grpdsetexampletest
+          grpdsetexampletestdll
+          grpittest
+          grpittestdll
+          grpsexampletest
+          grpsexampletestdll
+          hyperslabtest
+          hyperslabtestdll
+          mountexampletest
+          mountexampletest
+          refobjexampletest
+          refobjexampletestdll
+          refregexampletest
+          refregexampletestdll
+          rwdsetexampletest
+          rwdsetexampletestdll
+          selecteletest
+          selecteletestdll
+
+   3. Invoke a command prompt window and run the batch file 
+      Installf90Examples.bat which resides in the top level directory
+      (c:\MyHDFstuff\hdf5).  This file creates 4 new directories, 
+      f90examplesREL, f90examplesRELDLL, f90examplesDBG, and
+      f90examplesDBGDLL, in the c:\MyHDFstuff\fortran\examples directory
+      and places all the executables in it.  Both the release and debug
+      versions of the examples should be built before this step is done.
+
+************************************************************************
+
+
+Section III: Building an application using the HDF5 library or DLL
+========================================================================
+Waring: The instructions below will only describe how to build an
+        application using the release version of the HDF5 library or
+        DLL.  To use the debug version of the HDF5 library or DLL, you
+        need to substitute the release version of the HDF5 library or
+        DLL with the debug version.
+
+To use HDF5 static library
+
+  To build an application that uses the HDF5 static library the
+  following locations will need to be specified for locating header
+  files and linking with the HDF static library, for example:
+
+   c:\MyHDFstuff\hdf5\hdf5lib\include
+   c:\MyHDFstuff\hdf5\hdf5lib\release\lib
+
+  if you have installed HDF5 library in Section II, step 3.
+
+  We assume that you will use Zlib and Szip compression with HDF5
+  library.
+
+  To specify these locations in the settings for your VC++ project,
+  you may choose one of the following two methods.
+
+   1) Method One
+
+    Step 1: 
+    To insert the path that specifies HDF5 and Zlib, Szip header files:
+
+    1. Open your VC++ project in Microsoft Visual C++ and make sure it
+       is the active project.
+
+    2. Go to the Project menu and chose the "Settings" option.
+
+    3. Choose the build configuration you would like to modify in the
+       drop down menu labeled with "Settings For:"
+
+    4. Choose the C/C++ tab
+
+    5. Choose "Preprocessor" in the drop down menu labeled with
+       "Category:"
+
+    6. In a text-area labeled with "Additional include directories:",
+       add HDF5, Zlib, and Szip header files directories.  For example:
+       
+          c:\MyHDFstuff\hdf5\hdf5lib\include
+          c:\zlib122\include
+          c:\szip\include
+
+       Then click OK.
+
+    7. (optional) to use HDF5 Fortran static library, the location of 
+       Fortran module files should be specified by following
+       Project->Settings->Fortran->Preprocessor,
+       and in a test-area labeled with "INCLUDE and USE Paths:", add
+       HDF5 Fortran module files directories.  For example:
+
+          c:\MyHDFstuff\hdf5\hdf5lib\include
+
+    Step 2: 
+    To link the HDF5 library with your application:
+
+    1. Open your VC++ project in Microsoft Visual C++ and make sure it
+       is the active project.
+
+    2. Go to the Project menu and chose the "Add to Project" option and
+       then "Files" option.
+
+    3. Change the "Files of type:" to "Library Files (.lib)"
+
+    4. Navigate through the directories until you find the location of 
+       the hdf5.lib. 
+
+    5. Select hdf5.lib and click OK.
+
+    6. repeat 1-5, to select zdll.lib and szlibdll.lib.
+
+    7. (optional) repeat 1-5, to select hdf5_cpp.lib to link with HDF5
+       C++ static library.
+
+    8. (optional) repeat 1-5, to select hdf5_fortran.lib to link with
+       HDF5 Fortran static library.
+
+   2)  Method Two
+
+    1. Go to Tools->Options->Directories,
+
+    2. Insert the correct HDF5, Zlib, Szip paths for both headers(include)
+       and libraries.  For example, 
+       
+          c:\MyHDFstuff\hdf5\hdf5lib\include
+          c:\MyHDFstuff\hdf5\hdf5lib\lib
+          c:\zlib122\include
+          c:\zlib122\lib
+          c:\szip\include
+          c:\szip\dll
+
+    3. Go to the Project menu and choose the "Settings" option.
+
+    4. Find the "link" option and "Input" category, insert 
+       "zdll.lib, szlibdll.lib, hdf5.lib".
+
+    5. (Optional) repeat 3-4, to insert "hdf5_cpp.lib" if you want to 
+       use HDF5 C++ static library.
+
+    6. (Optional) repeat 3-4, to insert "hdf5_fortran.lib" if you want to 
+       use HDF5 Fortran static library.
+
+
+To use the DLL:
+
+    1. Follow the steps for specifying the location of the header files
+       as shown above.
+
+    2. Follow the steps for linking the HDF5 library as shown above
+       except now link the export library that is created with the DLL.
+       The export library is called hdf5dll.lib for HDF5 C libray,
+       hdf5_cppdll.lib for HDF5 C++ library, and hdf5_fortrandll.lib
+       for HDF5 Fortran library.
+
+    3. Place the DLL in a location that Windows will be able to locate 
+       it. The searched path and order for DLL's is
+
+       a) The directory where the executable module for the current
+          process is located.
+       b) The current directory. 
+       c} The Windows system directory. The GetSystemDirectory function 
+          retrieves the path of this directory. 
+       d) The Windows directory. The GetWindowsDirectory function
+          retrieves the path of this directory.
+       e) The directories listed in the PATH environment variable.
+ 
+    4. To modify your own application settings, please DO FOLLOW the 
+       "DLL Hints" at section IV "HELPFUL POINTERS".
+
+************************************************************************
+
+
+Section IV: HELPFUL POINTERS
+========================================================================
+
+Here are some notes that may be of help if you are not familiar with
+using the Visual C++ Development Environment.
+
+Project name and location issues: 
+       
+    If you must install all.dsw and all.dsp in another directory,
+    relative to hdf5 directory, you will be asked to locate the 
+    sub-project files, when you open the project all.dsw.
+
+    If you want to rename all (the entire project), you will need to
+    modify two files all.dsw and all.dsp as text (contrary to the
+    explicit warnings in the files).
+
+    You can also modify all.dsw and all.dsp as text, to allow these 2
+    files to be installed in another directory.
+
+  
+Settings... details:
+
+    If you create your own project, the necessary settings can be read
+    from the all.dsp file(as text), or from the Project Settings in the
+    Developer Studio project settings dialog.
+
+    Project
+       Settings
+          C/C++
+             Category
+                Code Generation
+                   Use run-time Library
+                      These are all set to use Single-Threaded
+
+DLL... hints:
+  
+   If you want to use DLL versions of HDF5 library in your application, 
+   you should  
+      1) put HDF5 DLL into windows system directory
+      2) add HDF5 DLL export library into your project
+      3) Follow "Settings... details" into the last line:
+         change Single-Threaded into Multithreaded DLL or 
+         Debug Multithreaded DLL
+      4) Follow "Settings.. details" into PreProcessor:
+         Project
+            Settings
+               C/C++
+                  Category
+                     PreProcessor
+
+         Find PreProcessor definations and Add _HDF5USEDLL_ at the
+         end of the PreProcessor definitions to use HDF5 C DLL.
+
+      5) (optional) repeat 4), add HDF5CPP_USEDLL at the
+         end of the PreProcessor definitions to use HDF5 C++ DLL.
+
+      6) (optional) Follow Project->Settings->Fortran->Category->
+         General->Predefined Preprocess or Symbols, and add 
+         "HDF5F90_WINDOWS" to use HDF5 Fortran DLL.
+
+************************************************************************
+
+
+Section V: How to disable Gzip(Zlib)/Szip compression
+
+Warning: When you modify the H5pubconf.h file as described below,
+         DO NOT just change the values of these macros from 1 to 0.
+         Please DO remove(or comment out) appropriate lines.
+         
+   1. Disable Gzip compression 
+
+      If you would like to remove Gzip compression from the HDF5
+      library, follow the steps below.
+
+      1.1 Open the H5pubconf.h file from the c:\MyHDFstuff\hdf5\src
+          directory and remove(or comment out) the following two lines:
+
+             #define H5_HAVE_ZLIB_H 1
+             #define H5_HAVE_FILTER_DEFLATE 1
+
+          then save the file.
+	  
+      1.2 Delete HDF5_EXT_ZLIB environment variable if you have
+          set it in preconditions.
+   
+      1.3 Run-compile HDF5 library according to section II.
+
+      When you disable Gzip, you may get the following message
+      when building HDF5 libraries:
+
+      The following environment variables were not found
+      $(HDF5_EXT_ZLIB)
+
+      This message can be ignored.
+
+   2. Disable Szip compression (both encoder and decoder)
+
+      If you would like to remove Szip compression from the HDF5
+      library, follow the steps below.
+
+      2.1 Open the H5pubconf.h file from the c:\MyHDFstuff\hdf5\src
+          directory and remove(or comment out) the following three
+          lines: 
+
+             #define H5_HAVE_SZLIB_H 1
+             #define H5_HAVE_FILTER_SZIP 1
+             #define H5_SZIP_CAN_ENCODE 1
+		   
+          then save the file.
+	
+      2.2 Delete HDF5_EXT_SZIP environment variable if you have
+          set it in preconditions.
+
+      2.3 Run-compile HDF5 library according to section II.
+
+      When you disable Szip, you may get the following message 
+      when building HDF5 libraries:
+
+      The following environment variables were not found
+      $(HDF5_EXT_SZIP)
+
+      This message can be ignored.
+
+   Note:   
+
+   To disable Gzip and Szip at the same time, just follow 1.1~1.3
+   and 2.1~2.4 and run-compile HDF5 library according to section II.
+
+   3. Disable Szip encoder
+
+      If you would like to just disable Szip encoder from the HDF5
+      library while keeping Szip decoder enabled, follow the steps
+      below.
+
+      3.1 Download Szip library without encoder
+
+          Szip library is different if you want to disable Szip encoder.
+          Download szip_noencoder binaries from
+          ftp://ftp.ncsa.uiuc.edu/HDF/szip/bin/windows.
+          The Szip library and header path should also be set up
+          accordingly (refer to precondition 6).
+   
+      3.2 Open the H5pubconf.h file from the c:\MyHDFstuff\hdf5\src
+          directory and remove (or comment out) the following line: 
+
+             #define H5_SZIP_CAN_ENCODE 1
+		   
+          then save the file.
+	
+      3.3 Run-compile HDF5 library according to section II.
+
+************************************************************************
+
+
+Section VI: 
+How to build HDF5 in VS 7.0(.NET) and intel 8.x with .NET environment
+
+========================================================================
+
+We just briefly introduce you how to build HDF5 in VS 7.0(.NET)
+and intel 8.x with .NET environment
+
+1. Build HDF5 in VS 7.x(.NET)
+
+
+1.1 You need to specify the zlib and szip include header files and 
+    libraries under Tools->Options->Projects->VC++ Directories and choose
+    Include and libraries under the category of "show directories for" to
+    add the corresponding path if you want to use compression feature
+    inside HDF5.
+1.2 Open the old workspace file with the "Open solution" option,
+    .NET will ask you whether you want to convert all VS 6.0 project files 
+    to .NET corresponding project files, choose <CONVERT ALL>,
+    .NET will automatically convert the data space file to solution file.
+1.3 Then find  "Build" and go to "Configuration Manager"; choose
+    "release" or "debug", if you don't want to build C++ or Fortran libraries,
+    you need to explicitly turn off project files in the "Configuration
+    Manager" and then choose "build all".
+   
+1.4 If you want to change some project setting, select the project and
+    right click the button to choose Properties; find the similar menu
+    there as in 6.0.
+
+2. Build HDF5 in Intel 8.x with .NET environment
+
+2.1 Repeat 1.1 - 1.2 of this section. You may need to install intel 8.x version of
+    szip library.
+2.2 Right click Solution "all" in the "Solution Explorer" window, choose
+    "Convert to use Intel C++ Project System",
+2.3 Repeat 1.3 - 1.4 of this section. 
+
+NOTE: Please read section V if you do not want to use compression
+      feature inside HDF5.
+ 
+************************************************************************
+
+
+Section VII: Building and testing HDF5 snapshot release
+========================================================================
+
+Note: This section is only for users who would like to build and test 
+      HDF5 snapshot release.
+
+If you want to test and build HDF5 snapshot release, you need extra 
+steps to automatically generate H5Tinit.c before going to section II
+step 1(2).
+
+Previous step: section II, step 1(1).
+Extra steps:
+1) After extracting all.zip to the correct path, open the 
+   c:\myHDFstuff\hdf5\misc\typegen\typegen.dsw.
+2) Build the project file.
+3) Invoke command prompt and go to c:\myHDFstuff\hdf5\src.
+4) type H5Tinit.exe >H5Tinit.c
+5) Go back to section II, continue with step 1(2).
+
+************************************************************************
+
+
+Section VIII: Misc.
+========================================================================
+
+1) drivers we support
+The default driver on windows we support is sec2 driver. However, stdio
+driver is also supported. If you want to use stdio driver in your 
+application, you may set environment variable HDF5_DRIVER to "stdio".
+
+On windows 2000/XP, the following steps should be followed to set the
+environment variable,
+
+ a) Go to Control panel and find "system",
+ b) Click "system" and choose "advanced",
+ c) Choose Environment Variables
+ d) Add new variable "HDF5_DRIVER"
+ e) set the "HDF5_DRIVER" to "stdio"
+
+Reminder: if you don't want to use stdio driver, please remember to 
+delete the environment variable "HDF5_DRIVER" or change the variable 
+value to "sec2".
+
+
+Please send email to hdfhelp at ncsa.uiuc.edu for further assistance.
+

Added: packages/hdf5/branches/upstream/current/release_docs/INSTALL_Windows_From_Command_Line.txt
===================================================================
--- packages/hdf5/branches/upstream/current/release_docs/INSTALL_Windows_From_Command_Line.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/release_docs/INSTALL_Windows_From_Command_Line.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,193 @@
+      Instructions for Building and Testing HDF5 on Command Line
+                         for Windows XP/2000
+
+************************************************************************
+Note: This instruction is written for users who would like to build HDF5
+      libraries and tools from the HDF5 source code package on command
+      line.
+         
+      Currently, we only support building and testing HDF5 on command
+      line with Microsoft Visual C++ 6.0 and DEC Fortran 6.0.
+      
+      For all other Windows development tools, HDF5 should be built in
+      the development environment.  Please refer to INSTALL_Windows.txt
+      for detailed HDF5 building and installation information, or 
+      INSTALL_Windows_short.txt for quick HDF5 building and installation
+      instructions.
+            
+*****************************WARNINGS***********************************
+
+Please read CAREFULLY about HDF5 build and install preconditions and 
+notes in INSTALL_Windows.txt before starting below procedures.
+
+************************************************************************
+
+Extra Preconditions
+
+   1. Set path for Microsoft Visual C++ 6.0 and DEC Fortran 6.0
+   
+      Open "System" in Control Panel.
+   
+      On the "Advanced" tab, click "Environment Variables", click 
+      "Path" in the "System variables" box, then click "Edit" and 
+      add your Visual C++ 6.0 path (For example, 
+      C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\)
+      and DEC Fortran 6.0 path (For example, 
+      C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin\)
+      into "Variable Value" and click "OK".
+
+   2. Add WinZip command line support (Optional)
+      
+      To use WinZip command line utility, you have to install 
+      WinZip 9.0 or higher version.
+
+      If you want to extract hdf5\windows\all.zip on the command line,
+      you should
+   
+      2.1 Install WinZip command line support add-on 1.1
+   
+          Download WinZip command line support add-on 1.1 from 
+          http://www.winzip.com and install it.
+   
+      2.2 Add WinZip into environment path
+   
+          Open "System" in Control Panel.
+          On the "Advanced" tab, click "Environment Variables", click
+          "Path" in the "System variables" box, then click "Edit" and 
+          add your WinZip path (For example C:\Program Files\WinZip)
+          into "Variable Value" and click "OK".
+
+      Note: 
+         You can also extract all.zip from interactive WinZip interface 
+         without the above two steps.
+  
+***********************************************************************
+Step 1. Building and testing HDF5 libraries and tools
+
+   1. Unpack all.zip
+
+      Unpack all.zip in c:\MyHDFstuff\hdf5\windows into the 
+      C:\myHDFstuff directory.
+      
+      This can be done with either of the following 2 options:
+
+      Option A. Unpack from the interactive WinZip interface
+
+      Option B. unpack on the command line
+
+         cd into the c:\MyHDFstuff\hdf5\windows directory
+   
+         type: wzunzip -yO -d -o all.zip c:\MyHDFstuff
+   
+
+   2. Build and Test
+
+      We provide 2 options for users to build test HDF5 libraries 
+      and tools.
+      
+      Options A: Build and test in one step 
+      
+         A batch file named hdf5bt.bat in c:\MyHDFstuff\hdf5 directory
+         is provided for users to build and test HDF5 library and tools
+         together from command line.
+
+         hdf5bt.bat has four options:
+
+            hdf5bt                 build and test C library and tools
+
+            hdf5bt enablecpp       build and test C/C++ libraries 
+                                   and tools
+
+            hdf5bt enablefortran   build and test C/Fortran libraries
+                                   and tools
+
+            hdf5bt enableall       build and test C/C++/Fortran 
+                                   libraries and tools
+
+         Invoke a command prompt window and run hdf5bt with
+         appropriate options.
+
+         Test results are saved in two files:
+
+            c:\MyHDFstuff\hdf5\hdf5_results.txt   
+
+            c:\MyHDFstuff\hdf5\tests_results.txt.
+
+         In general, you only need to check tests_results.txt.
+         If all the tests passed, then you do not have to check
+         hdf5_results.txt.  If some tests failed, check
+         hdf5_results.txt can help you figure out what was wrong.
+
+      Options B: Build and test in two steps 
+
+         We also provide users with the option to build and test 
+         HDF5 libraries and tools seperately.
+   
+         Step 1) Build HDF5 Libraries and Tools
+
+            A batch file named hdf5build.bat in c:\MyHDFstuff\hdf5 
+            directory is provided for users to build HDF5 library and 
+            tools from command line.
+
+            hdf5build.bat has four options:
+  
+               hdf5build                 build HDF5 C library 
+                                         and tools
+
+               hdf5build enablecpp       build HDF5 C/C++ libraries 
+                                         and tools
+
+               hdf5build enablefortran   build HDF5 C/Fortran libraries
+                                         and tools
+
+               hdf5build enableall       build HDF5 C/C++/Fortran 
+                                         libraries and tools
+
+            Invoke a command prompt window and run hdf5build with 
+            appropriate options.  Compiling outputs are saved in 
+            c:\MyHDFstuff\hdf5\build_results.txt.  You can check 
+            the file to find out whether there are any compilation
+            errors.
+
+         Step 2) Test HDF5 Libraries and Tools
+   
+            A batch file named hdf5check.bat in c:\MyHDFstuff\hdf5
+            directory is provided for users to test HDF5 library 
+            and tools from command line.
+
+            hdf5check.bat has four options:
+
+               hdf5check                 test HDF5 C library and tools
+      
+               hdf5check enablecpp       test HDF5 C/C++ libraries 
+                                         and tools
+      
+               hdf5check enablefortran   test HDF5 C/Fortran libraries
+                                         and tools
+      
+               hdf5check enableall       test HDF5 C/C++/Fortran 
+                                         libraries and tools
+
+            Invoke a command prompt window and run hdf5check with 
+            appropriate options.
+
+            Test results are saved in two files:
+
+               c:\MyHDFstuff\hdf5\tests_results.txt   
+
+               c:\MyHDFstuff\hdf5\check_results.txt.
+
+            In general, you only need to check tests_results.txt.  If
+            all the tests passed, then you do not have to check 
+            check_results.txt. If some tests failed, check 
+            check_results.txt can help you figure out what was wrong.
+
+
+   
+STEP 2: Installing HDF5 Libraries
+
+Run the batch file c:\MyHDFstuff\hdf5\installhdf5lib.bat to install all
+HDF5 libraries and tools into c:\MyHDFstuff\hdf5\hdf5lib directory.
+
+
+For further information, please refer to INSTALL_WINDOWS.txt.
\ No newline at end of file


Property changes on: packages/hdf5/branches/upstream/current/release_docs/INSTALL_Windows_From_Command_Line.txt
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/release_docs/INSTALL_Windows_Short.txt
===================================================================
--- packages/hdf5/branches/upstream/current/release_docs/INSTALL_Windows_Short.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/release_docs/INSTALL_Windows_Short.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,123 @@
+HDF5 Build and Install Instructions for Windows 2000/XP (Short Version)
+------------------------------------------------------------------------
+Note: This short instruction is written for users who want to quickly
+      build HDF5 library and tools from the HDF5 source code package
+      but do not want to know HDF5 building and installation details
+      on Windows 2000/XP.
+         
+      For detailed HDF5 build and install information, or if you have
+      trouble following any steps in the instructions, please refer to
+      INSTALL_Windows.txt for further information.
+      
+      For users who would like to build and test HDF5 package from the
+      command line, please refer to
+      INSATLL_Windows_From_Command_Line.txt.
+        
+***************************WARNINGS*************************************
+Please read CAREFULLY about HDF5 build and install preconditions and 
+notes in INSTALL_Windows.txt before starting below procedures.
+************************************************************************
+
+STEP 1: Building HDF5 Libraries and Tools
+    
+1. Unpack all.zip
+    
+   Unpack all.zip in c:\MyHDFstuff\hdf5\windows into the 
+   c:\MyHDFstuff directory. 
+
+2. Open all.dsw workspace
+    
+   Open the c:\MyHDFstuff\hdf5\proj\all\all.dsw workspace. 
+
+3. (Optional) Add C++ and/or FORTRAN related projects
+    
+   3.1 Add the following projects to project "all" dependencies 
+       ONLY if you want to build HDF5 C++ libraries
+        
+          dsets_cpp
+          dsets_cppdll
+          hdf5_cpp
+          hdf5_cppdll
+          testhdf5_cpp
+          testhdf5_cppdll
+
+   3.2 Add the follwing projects to project "all" dependencies 
+       ONLY if you want to build HDF5 FORTRAN libraries
+              
+          flush1_fortran
+          flush1_fortrandll
+          flush2_fortran
+          flush2_fortrandll
+          hdf5_f90cstub
+          hdf5_f90cstubdll
+          hdf5_fortran
+          hdf5_fortrandll
+          libtest_cstubdll
+          libtest_fortran
+          libtest_fortrandll
+          testhdf5_fortran
+          testhdf5_fortrandll
+         
+4. Select "Build", then Select "Set Active Configuration".
+
+   In "Project configurations", select the active configuration
+
+	    "all -- Win32 Debug"
+               
+               or
+
+	    "all -- Win32 Release"
+	        
+   Then build project "all".
+
+
+STEP 2: Testing HDF5 Libraries and Tools 
+
+HDF5 libraries and tools should be tested to make sure that they were
+built correctly.
+
+HDF5 libraries and tools can be tested with hdf5check.bat batch file 
+in c:\MyHDFstuff\hdf5 directory.
+
+hdf5check.bat has four options:
+   
+   hdf5check                     test HDF5 C library and tools only
+      
+   hdf5check enablecpp           test HDF5 C/C++ libraries and tools
+         
+   hdf5check enablefortran       test HDF5 C/Fortran libraries 
+                                 and tools
+         
+   hdf5check enableall           test HDF5 C/C++/Fortran libraries
+                                 and tools
+   
+
+Invoke a command prompt window and run hdf5check with appropriate
+options.
+
+Test results are saved in two files:
+
+   c:\MyHDFstuff\hdf5\tests_results.txt   
+
+   c:\MyHDFstuff\hdf5\check_results.txt.
+
+In general, you only need to check tests_results.txt.  If all the
+tests passed, then you do not have to check check_results.txt.  
+If some tests failed, check check_results.txt can help you
+figure out what was wrong.
+
+If you want to test HDF5 libraries and tools one by one, please refer to
+section II, step 2 in INSTALL_Windows.txt.
+
+
+STEP 3: Installing HDF5 Libraries
+
+Run the batch file c:\MyHDFstuff\hdf5\installhdf5lib.bat to install 
+all HDF5 libraries and tools into c:\MyHDFstuff\hdf5\hdf5lib directory.
+
+
+STEP 4: Building HDF5 Examples (Optional)
+
+Please read section II, step 4 in INSTALL_Windows.txt.
+
+


Property changes on: packages/hdf5/branches/upstream/current/release_docs/INSTALL_Windows_Short.txt
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/release_docs/INSTALL_codewarrior.txt
===================================================================
--- packages/hdf5/branches/upstream/current/release_docs/INSTALL_codewarrior.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/release_docs/INSTALL_codewarrior.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,74 @@
+
+Instructions for Building the HDF5 Library, Tests, and Tools 
+with the Metrowerks Code Warrior Compiler
+---------------------------------------------------------------------------
+
+The HDF5 library is supported under the Metrowerks Code Warrior version 8.0 compiler.
+The Code Warrior port of the HDF5 library has been tested only on the
+Windows NT platform.
+The following instructions assume we will be using the path D:\hdf5 for installing the library.
+
+------------------------------------------------------------------------
+Pre conditions: 
+-------------------------------------------------------------------------
+Both the ZLIB and SZIP libraries are needed to link with HDF5.
+The Code Warrior project file settings assumes ZLIB is intalled in D:\zlib\zlib.lib  
+and SZIP is installed in D:\szip\codewarrior\szip.lib
+These precompiled libraries can be obtained from the HDF web site, 
+please see hdf.ncsa.uiuc.edu for downloading instructions.
+If you do not have these libraries installed on these locations, you must change
+the path in the Project Settings (menu Edit->Settings->Target->Access Paths)
+
+-------------------------------------------------------------------------
+Setup
+--------------------------------------------------------------------------
+
+1. This setup assumes that you installed the distribution zip file as 
+   explained in INSTALL_windows.txt file. The steps are
+   a) making a folder called <my install>/hdf5/ as your base hdf5 folder 
+   b) unpack the file all.zip located  in d:\hdf5\windows to d:\. 
+      This file contains the Windows specific files of HDF5.
+
+To build the HDF5 library with Code Warrior:
+1. Open the project file hdf5.mcp (located in d:\hdf5\proj\codewarrior\).
+2. To build the library:
+	Select the 'hdf5' target and build (menu Projects-> Make or F7 key).
+3. To build all the targets (HDF5 library, test, and tools):
+	Select the 'all' target and build.
+4. To run the tests in a command line window:
+	In the command line window, change directory to d:\hdf5\test\. 
+	Type 
+	    Hdf5test debug
+	or, to redirect the output to a file called myfile.txt,
+	    Hdf5test debug > myfile.txt
+   The test and tools files are generated in the same directory as 
+   those compiled with the Microsoft Visual Studio compiler.
+
+
+---------------------------------------------------------------------------
+Known problems
+---------------------------------------------------------------------------
+
+The test "testhdf5" fails on a open file call. This is caused by a CodeWarrior v8.0
+bug in the "open" function
+
+Metrowerks provides a patch for this error
+
+1) Edit the file file_io.win32.c, located on <MY_INSTALL\MSL\MSL_C\MSL_Win32\Src\>
+
+2) Change the following symbol to 1 instead of 0
+
+#define _MSL_ALLOW_SHARED_WRITING  0  
+/* Set this value to 1 for file opening with shared writing */	
+
+3)  Add this source code to your project and relink it with your application.
+    A source code in a project overrides the library source.
+
+
+
+---------------------------------------------------------------------------
+The HDF Group would like to thank Ron Liechty of Metrowerks technical 
+support for all the help provided during the development of this project.
+
+
+

Added: packages/hdf5/branches/upstream/current/release_docs/INSTALL_parallel
===================================================================
--- packages/hdf5/branches/upstream/current/release_docs/INSTALL_parallel	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/release_docs/INSTALL_parallel	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,415 @@
+	    Installation instructions for Parallel HDF5
+	    -------------------------------------------
+
+
+1. Overview
+-----------
+
+This file contains instructions for the installation of parallel HDF5 (PHDF5).
+PHDF5 requires an MPI compiler with MPI-IO support and a parallel file system. 
+If you don't know yet, you should first consult with your system support staff
+of information how to compile an MPI program, how to run an MPI application,
+and how to access the parallel file system.  There are sample MPI-IO C and
+Fortran programs in the section of "Sample programs".  You can use them to
+run simple tests of your MPI compilers and the parallel file system.
+
+If you still have difficulties installing PHDF5 in your system, please
+send mail to
+	hdfhelp at ncsa.uiuc.edu
+
+In your mail, please include the output of "uname -a". If you have run the
+"configure" command, attach the output of the command and the content of
+the file "config.log".
+
+
+2. Quick Instruction for known systems
+--------------------------------------
+
+The following shows particular steps to run the parallel HDF5
+configure for a few machines we've tested. If your particular platform
+is not shown or somehow the steps do not work for yours, please go
+to the next section for more detailed explanations.
+
+------
+Know parallel compilers
+------
+
+HDF5 knows several parallel compilers: mpicc, hcc, mpcc, mpcc_r.
+To build parallel HDF5 with one of the above, just set CC as it
+and configure.  The "--enable-parallel" is optional in this case.
+
+    $ CC=/usr/local/mpi/bin/mpicc ./configure --prefix=<install-directory>
+    $ make
+    $ make check
+    $ make install
+
+
+------
+TFLOPS
+------
+
+Follow the instructions in INSTALL_TFLOPS.
+
+-------
+IBM SP
+-------
+
+First of all, make sure your environment variables are set correctly
+to compile and execute a single process mpi applications for the SP
+machine. Unfortunately, the setting varies from machine to machine.
+E.g., the following works for the Blue machine of LLNL.
+
+    setenv MP_PROCS     1
+    setenv MP_NODES     1
+    setenv MP_LABELIO   no
+    setenv MP_RMPOOL    0
+    setenv LLNL_COMPILE_SINGLE_THREADED TRUE    # for LLNL site only
+
+The shared library configuration for this version is broken. So, only
+static library is supported.
+
+Then do the following steps:
+
+    $ ./configure --disable-shared --prefix=<install-directory>
+    $ make		# build the library
+    $ make check	# verify the correctness
+    $ make install
+
+
+We also suggest that you add "-qxlf90=autodealloc" to FFLAGS when 
+building parallel with fortran enabled.  This can be done by invoking:
+
+    setenv FFLAGS -qxlf90=autodealloc		# 32 bit build
+
+or
+
+    setenv FFLAGS "-q64 -qxlf90=autodealloc"	# 64 bit build
+
+prior to running configure.  Recall that the "-q64" is necessary
+for 64 bit builds.
+
+---------------
+SGI Origin 2000
+Cray T3E
+(where MPI-IO is part of system MPI library such as the mpt module)
+---------------
+
+#!/bin/sh
+
+RUNPARALLEL="mpirun -np 3"
+export RUNPARALLEL
+LIBS="-lmpi"
+export LIBS
+./configure --enable-parallel --prefix=$PWD/installdir
+make
+make check
+make install
+
+
+***Known problem***
+Some O2K system may encounter an error during make.
+    ld32: FATAL 9: I/O error (-lmpi): No such file or directory
+
+This is because libtool tries too hard to locate the loader 'ld'
+but ends up with one that does not know where to find the right
+version of libmpi.a for the particular ABI requested.
+The fix is to edit the file 'libtool' at the top of the build directory.
+Search for a string that looks like the following:
+    LD="/opt/MIPSpro/MIPSpro_default/opt/MIPSpro/bin/ld -n32"
+
+Replace it with something that knows how to find the right libmpi.a.
+E.g.,
+    LD="/opt/MIPSpro/MIPSpro_default/opt/MIPSpro/bin/cc -n32"
+
+Or you can pre-empt it by setting LD at configure time
+    $ LD="cc" ./configure --enable-parallel ...
+
+
+---------------
+SGI Origin 2000
+Cray T3E
+(where MPI-IO is not part of system MPI library or I want to use my own
+ version of MPIO)
+---------------
+
+mpi1_inc=""                                     #mpi-1 include
+mpi1_lib=""                                     #mpi-1 library
+mpio_inc=-I$HOME/ROMIO/include                  #mpio include
+mpio_lib="-L$HOME/ROMIO/lib/IRIX64"             #mpio library
+
+MPI_INC="$mpio_inc $mpi1_inc"
+MPI_LIB="$mpio_lib $mpi1_lib"
+
+#for version 1.1
+CPPFLAGS=$MPI_INC
+export CPPFLAGS
+LDFLAGS=$MPI_LIB
+export LDFLAGS
+RUNPARALLEL="mpirun -np 3"
+export RUNPARALLEL
+LIBS="-lmpio -lmpi"
+export LIBS
+
+./configure --enable-parallel --prefix=$PWD/installdir
+make
+make check
+make install
+
+
+---------------------
+Linux 2.4 and greater
+---------------------
+
+Be sure that your installation of MPICH was configured with the following
+configuration command-line option:
+
+    -cflags="-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64"
+
+This allows for >2GB sized files on Linux systems and is only available
+with Linux kernels 2.4 and greater.
+
+
+------------------
+HP V2500 and N4000
+------------------
+
+Follow the instructions in section 3.
+
+
+3. Detail explanation
+---------------------
+
+The HDF5 library can be configured to use MPI and MPI-IO for parallelism
+on a distributed multi-processor system. The easiest way to do this is to
+have a properly installed parallel compiler (e.g., MPICH's mpicc or IBM's
+mpcc_r) and supply that executable as the value of the CC environment
+variable.  For examples,
+
+    $ CC=mpcc_r ./configure
+    
+    $ CC=/usr/local/mpi/bin/mpicc ./configure
+
+If no such wrapper script is available then you must specify your normal
+C compiler along with the distribution of MPI/MPI-IO which is to be used
+(values other than `mpich' will be added at a later date):
+
+    $ ./configure --enable-parallel=mpich
+
+If the MPI/MPI-IO include files and/or libraries cannot be found by the
+compiler then their directories must be given as arguments to CPPFLAGS
+and/or LDFLAGS:
+
+    $ CPPFLAGS=-I/usr/local/mpi/include \
+      LDFLAGS=-L/usr/local/mpi/lib/LINUX/ch_p4 \
+      ./configure --enable-parallel=mpich
+
+If a parallel library is being built then configure attempts to determine
+how to run a parallel application on one processor and on many
+processors. If the compiler is `mpicc' and the user hasn't specified
+values for RUNSERIAL and RUNPARALLEL then configure chooses `mpirun' from
+the same directory as `mpicc':
+
+    RUNSERIAL:    /usr/local/mpi/bin/mpirun -np 1
+    RUNPARALLEL:  /usr/local/mpi/bin/mpirun -np $${NPROCS:=3}
+
+The `$${NPROCS:=3}' will be substituted with the value of the NPROCS
+environment variable at the time `make check' is run (or the value 3).
+
+
+4. Parallel tests
+-----------------
+
+The testpar/ directory contains tests for Parallel HDF5 and MPI-IO.
+The t_mpi tests the basic functionalities of some MPI-IO features used by
+Parallel HDF5.  It usually exits with non-zero code if a required MPI-IO
+feature does not succeed as expected.  One exception is the testing of
+accessing files larger than 2GB.  If the underlaying filesystem or if
+the MPI-IO library fails to handle file sizes larger than 2GB, the test
+will print informational messages stating the failure but will not exit
+with non-zero code.  Failure to support file size greater than 2GB is
+not a fatal error for HDF5 because HDF5 can use other file-drivers such
+as families of files to by pass the file size limit.
+
+By default, the parallel tests use the current directory as the test directory.
+This can be changed by the environment variable $HDF5_PARAPREFIX.
+For example, if the tests should use directory /PFS/user/me, do
+    HDF5_PARAPREFIX=/PFS/user/me
+    export HDF5_PARAPREFIX
+    make check
+
+(In some batch job system, you many need to hardset HDF5_PARAPREFIX in
+the shell initial files like .profile, .cshrc, etc.)
+
+
+5. Sample programs
+------------------
+
+Here are sample MPI-IO C and Fortran programs.  You may use them to run simple
+tests of your MPI compilers and the parallel file system.  The MPI commands
+used here are mpicc, mpif90 and mpirun.  Replace them with the commands of
+your system.  
+
+The programs assume they run in the parallel file system. Thus they create
+the test data file in the current directory.  If the parallel file system
+is somewhere else, you need to run the sample programs there or edit the
+programs to use a different file name.
+
+Example compiling and running:
+
+% mpicc Sample_mpio.c -o c.out
+% mpirun -np 4 c.out
+
+% mpif90 Sample_mpio.f90 -o f.out
+% mpirun -np 4 f.out
+
+
+==> Sample_mpio.c <==
+/* Simple MPI-IO program testing if a parallel file can be created.
+ * Default filename can be specified via first program argument.
+ * Each process writes something, then reads all data back.
+ */
+
+#include <mpi.h>
+#ifndef MPI_FILE_NULL           /*MPIO may be defined in mpi.h already       */
+#   include <mpio.h>
+#endif
+
+#define DIMSIZE	10		/* dimension size, avoid powers of 2. */
+#define PRINTID printf("Proc %d: ", mpi_rank)
+
+main(int ac, char **av)
+{
+    char hostname[128];
+    int  mpi_size, mpi_rank;
+    MPI_File fh;
+    char *filename = "./mpitest.data";
+    char mpi_err_str[MPI_MAX_ERROR_STRING];
+    int  mpi_err_strlen;
+    int  mpi_err;
+    char writedata[DIMSIZE], readdata[DIMSIZE];
+    char expect_val;
+    int  i, irank; 
+    int  nerrors = 0;		/* number of errors */
+    MPI_Offset  mpi_off;
+    MPI_Status  mpi_stat;
+
+    MPI_Init(&ac, &av);
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
+    /* get file name if provided */
+    if (ac > 1){
+	filename = *++av;
+    }
+    if (mpi_rank==0){
+	printf("Testing simple MPIO program with %d processes accessing file %s\n",
+	    mpi_size, filename);
+        printf("    (Filename can be specified via program argument)\n");
+    }
+
+    /* show the hostname so that we can tell where the processes are running */
+    if (gethostname(hostname, 128) < 0){
+	PRINTID;
+	printf("gethostname failed\n");
+	return 1;
+    }
+    PRINTID;
+    printf("hostname=%s\n", hostname);
+
+    if ((mpi_err = MPI_File_open(MPI_COMM_WORLD, filename,
+	    MPI_MODE_RDWR | MPI_MODE_CREATE | MPI_MODE_DELETE_ON_CLOSE,
+	    MPI_INFO_NULL, &fh))
+	    != MPI_SUCCESS){
+	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+	PRINTID;
+	printf("MPI_File_open failed (%s)\n", mpi_err_str);
+	return 1;
+    }
+
+    /* each process writes some data */
+    for (i=0; i < DIMSIZE; i++)
+	writedata[i] = mpi_rank*DIMSIZE + i;
+    mpi_off = mpi_rank*DIMSIZE;
+    if ((mpi_err = MPI_File_write_at(fh, mpi_off, writedata, DIMSIZE, MPI_BYTE,
+	    &mpi_stat))
+	    != MPI_SUCCESS){
+	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+	PRINTID;
+	printf("MPI_File_write_at offset(%ld), bytes (%d), failed (%s)\n",
+		(long) mpi_off, (int) DIMSIZE, mpi_err_str);
+	return 1;
+    };
+
+    /* make sure all processes has done writing. */
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* each process reads all data and verify. */
+    for (irank=0; irank < mpi_size; irank++){
+	mpi_off = irank*DIMSIZE;
+	if ((mpi_err = MPI_File_read_at(fh, mpi_off, readdata, DIMSIZE, MPI_BYTE,
+		&mpi_stat))
+		!= MPI_SUCCESS){
+	    MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+	    PRINTID;
+	    printf("MPI_File_read_at offset(%ld), bytes (%d), failed (%s)\n",
+		    (long) mpi_off, (int) DIMSIZE, mpi_err_str);
+	    return 1;
+	};
+	for (i=0; i < DIMSIZE; i++){
+	    expect_val = irank*DIMSIZE + i;
+	    if (readdata[i] != expect_val){
+		PRINTID;
+		printf("read data[%d:%d] got %d, expect %d\n", irank, i,
+			readdata[i], expect_val);
+		nerrors++;
+	    }
+	}
+    }
+    if (nerrors)
+	return 1;
+
+    MPI_File_close(&fh);
+
+    PRINTID;
+    printf("all tests passed\n");
+
+    MPI_Finalize();
+    return 0;
+}
+
+==> Sample_mpio.f90 <==
+!
+! The following example demonstrates how to create and close a parallel
+! file using MPI-IO calls.
+!
+! USE MPI is the proper way to bring in MPI definitions but many
+! MPI Fortran compiler supports the pseudo standard of INCLUDE.
+! So, HDF5 uses the INCLUDE statement instead.
+! 
+
+     PROGRAM MPIOEXAMPLE
+
+     ! USE MPI
+
+     IMPLICIT NONE
+
+     INCLUDE 'mpif.h'
+        
+     CHARACTER(LEN=80), PARAMETER :: filename = "filef.h5" ! File name
+     INTEGER     ::   ierror  ! Error flag
+     INTEGER     ::   fh      ! File handle
+     INTEGER     ::   amode   ! File access mode
+     
+     call MPI_INIT(ierror)
+     amode = MPI_MODE_RDWR + MPI_MODE_CREATE + MPI_MODE_DELETE_ON_CLOSE
+     call MPI_FILE_OPEN(MPI_COMM_WORLD, filename, amode, MPI_INFO_NULL, fh, ierror)
+     print *, "Trying to create ", filename
+     if ( ierror .eq. MPI_SUCCESS ) then
+        print *, "MPI_FILE_OPEN succeeded"
+        call MPI_FILE_CLOSE(fh, ierror)
+     else
+        print *, "MPI_FILE_OPEN failed"
+     endif
+
+     call MPI_FINALIZE(ierror);
+     END PROGRAM

Added: packages/hdf5/branches/upstream/current/release_docs/RELEASE.txt
===================================================================
--- packages/hdf5/branches/upstream/current/release_docs/RELEASE.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/release_docs/RELEASE.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,616 @@
+HDF5 version 1.6.5 released on Thu Nov 10 18:17:53 CST 2005
+================================================================================
+
+INTRODUCTION
+============
+This document describes the differences between HDF5-1.6.4 and
+HDF5-1.6.5.  It contains information on the platforms tested and
+known problems in HDF5-1.6.5. For more details, check the HISTORY.txt
+file in the HDF5 source.
+
+The HDF5 documentation can be found on the NCSA ftp server
+(ftp.ncsa.uiuc.edu) in the directory:
+
+     /HDF/HDF5/docs/
+
+Documentation for the current release is also on the HDF web site:
+
+     http://hdf.ncsa.uiuc.edu/HDF5/doc/
+
+For more information look at the HDF5 home page at:
+
+    http://hdf.ncsa.uiuc.edu/HDF5/
+
+If you have any questions or comments, please send them to:
+
+    hdfhelp at ncsa.uiuc.edu
+
+
+CONTENTS
+========
+- New Features
+- Support for New Platforms, Languages and Compilers
+- Bug Fixes since HDF5-1.6.4
+- Documentation
+- Platforms Tested
+- Supported Configuration Features Summary
+- Known Problems
+
+
+New Features
+============
+    Configuration:
+    -------------------------
+	- Added yodconfigure, a configure tool, that patches up the configure
+	  file to allow configure to launch executable via the proper
+	  launching command like "yod -sz 1".  AKC - 2005/11/10
+	- Configure now recognizes the TR variable as the location of the
+          tr utility.  JML 2005/10/20
+
+    Source code distribution:
+    -------------------------
+	- Added g95 as a testing "platform" informally. AKC - 2005/10/04.
+        - Added MD5 checksumming to snapshot releases.  Releases will now
+          produce an .md5 file as well as a .tar archive.  md5sum can be
+          used to verify the arvhice with the .md5 checksum.  -JL 2005/09/06
+
+    Library:
+    --------
+        - Added HSYS_ERROR which retrieves the system error message and pushes
+          it to the error stack.  This provides more information regarding the 
+	  failed system call. AKC - 2005/08/04
+        - Added H5F_OBJ_LOCAL flag to H5Fget_obj_count() & H5Fget_obj_ids(), to
+          allow querying for objects in a file that was opened with a particular
+          file ID, instead of all objects opened in the file with any file ID.
+          QAK - 2005/06/01
+
+    Parallel Library:
+    -----------------
+	- Added mpich2 as a testing "platform" informally. AKC - 2005/10/04.
+	- HDF5 supports collective MPI-IO for irregular selection with HDF5
+	  dataset. Irregular selection is when users use API H5Sselect_hyperslab
+	  more than once for the same dataset.
+	  Currently, not all MPI-IO packages support the complicated 
+	  MPI derived datatypes used in the implementation of irregular 
+	  selections INSIDE HDF5. 
+	  1) DEC 5.x wdoes not support complicated derived datatypes.
+	  2) For AIX 5.1:
+	     If your poe version number is 3.2.0.20 or lower,
+	     please edit powerpc-ibm-aix5.x in the directory hdf5/config/.
+	     Find the line with
+	          << hdf5_mpi_complex_derived_datatype_works >>
+	     and UNCOMMENT this line before the configure.
+	     check poe version with the following command:
+	     lpp -l all | grep ppe.poe
+	  3) For Linux cluster,:
+	     If mpich version is 1.2.5 or lower, collective irregular selection
+	     IO is not supported; internally independent IO is used.
+	  4) For IRIX 6.5:
+	     if C compiler version is 7.3 or lower, collective irregular 
+	     selection IO is not supported; internally independent IO is used.
+	  5) For platforms which internally used mpich: 
+	     If the mpich version is 1.2.5 or lower, please find the 
+	     corresponding config (in hdf5/config) file and add
+	         hdf5_mpi_complex_derived_datatype_works='no' 
+	     at the end of the configuration file. For example, on the 
+	     NCSA SGI Altix, the internal mpich library is 1.2.5. So 
+	         hdf5_mpi_complex_derived_datatype_works='no' 
+	     should be added at the end of the config file ia64-linux-gnu.
+	     KY - 2005/09/12
+
+    Tools:
+    ------
+        - Removed obsolete pdb2hdf tool.  JML - 2005/10/28
+        - Sped up h5dump on files with large numbers of objects.
+            QAK - 2005/08/25
+
+    F90 API:
+    --------
+        - Added missing h5tget_member_class_f function
+                                            EIP 2005/04/06
+    C++ API:
+    --------
+        - Added missing member functions:
+		H5::CompType::getMemberArrayType
+		H5::CompType::getMemberVarLenType
+		H5::AbstractDs::getArrayType
+		H5::AbstractDs::getVarLenType
+		H5::CommonFG::openArrayType
+		H5::CommonFG::openVarLenType
+		H5::PropList::copyProp -- this will replace the current
+			H5::PropList::copyProp in later releases due
+			to incorrect prototype.
+		BMR - 2005/07/27
+
+
+Support for New Platforms, Languages and Compilers
+==================================================
+    - Added support for RedStorm platform (serial only.)  AKC 2005/11/10
+    - Added support for BG/L platform (serial only.)  LA 2005/11/10
+    - Added support for HPUX 11.23 (IA64); only C and C++ are supported
+      with the +DD64 flag 
+                                             EIP 2005/10/05
+ 
+
+    Configuration
+    -------------
+        - Added support for Cray X1.  JML 2005/10/03
+
+
+Bug Fixes since HDF5-1.6.4 Release
+==================================
+
+    Library
+    -------
+        - Fixed collective IO in chunking-storage.  HDF5 may have called the 
+            wrong routine when the shape of the dataspace in the file and in 
+            the bufferred chunk were different. This bug was fixed to make sure
+            the correct routine is called. KY - 2005/10/19
+        - Fixed core dump when closing root groups opened through two different
+            file handles that operate on the same actual file.  QAK - 2005/10/02
+        - The ./dsets tests used to fail in the TFLOPS machine if the
+            test program, dsets.c, was compiled with the -O option.
+            The HDF5 library still worked correctly with the -O option. Only
+            the ./dsets failed.  It is fixed. AKC - 2005/09/14
+        - Corrected errors when performing various operations on a group opened
+            by dereferencing an object reference.  QAK - 2005/07/30
+        - Fixed a bug with named datatypes where a copy of a named datatype
+            used to create a dataset would accidentally use the original
+            named datatype for the dataset's datatype.  QAK - 2005/07/23
+        - Made H5Fget_name() to be consistent and always return name of actual
+            file the ID is in.  (Instead of the name of the top file in a
+            file mounting hierarchy).  QAK - 2005/07/19
+        - Reworked internal file mounting semantics to hopefully eliminate
+            mounting problems.  We now require that files that are mounting
+            together all have the same "file close degree".  QAK - 2005/07/19
+        - More bug fixes on holding open files that are mounted and have
+            IDs open.  QAK - 2005/07/14
+        - Dataset sieve buffer cache was inadvertantly disabled; it has been
+            re-enabled.  QAK - 2005/07/08
+        - Don't unmount child files until the parent file actually closes.
+            (Previously, if an object was holding open a file, the child files
+            would get unmounted too early).  QAK - 2005/07/05
+        - Fixed bug where unmounted files could cause the library to go into
+            an infinite loop when shutting down.  QAK - 2005/06/30
+        - Fixed bug with hyperslab selections that use selection offsets and
+            operate on chunked datasets going into infinite loop or dumping
+            core.  QAK - 2005/06/17
+        - Corrected memory leak and possible corruption when opening a group.
+            QAK - 2005/06/17
+        - Added check for opaque datatype tags being too long (check against
+            H5T_OPAQUE_TAG_MAX, currently set to 256).  QAK - 2005/06/14
+        - Fixed various errors in maintaining names for open objects in the
+            face of unusual mount & unmount operations.  QAK - 2005/06/08
+        - "SEMI" and "STRONG" file close degree settings now apply only to the
+            particular file ID being closed, instead of operating on all open
+            file IDs for a given file.  QAK - 2005/06/01
+        - Fixed error in opening object in a group that was opened in a mounted
+            file which has been unmounted.  QAK - 2005/03/17
+
+    Configuration
+    -------------
+	- Configure can recognize -lmpich as a form of MPI library. -AKC-
+	  2005/9/28.
+	- Changed default C++ compiler for the IA64 platform from icc to
+	    icpc which is the preferred compiler for Intel Compiler version
+	    8. AKC - 2005/09/02
+
+    Performance
+    -------------
+        - Optimized I/O for enumerated datatypes that are a superset of a 
+            source enumerated datatype.  QAK - 2005/03/19
+   
+    Tools
+    -----
+
+    Documentation 
+    ------------- 
+
+    F90 API
+    -------
+       - h5pget_driver_f was returning information that could not be
+         interpreted by a Fortran application program; fixed. EIP - 2005/04/10
+                                
+    C++ API
+    -------
+	- Several member functions' prototype changed due to the 
+	  "int -> unsigned" change in the main library.  They are:
+		H5::CompType::getMemberDataType(unsigned member_num)
+		H5::CompType::getMemberCompType(unsigned member_num)
+		H5::CompType::getMemberEnumType(unsigned member_num)
+		H5::CompType::getMemberIntType(unsigned member_num)
+		H5::CompType::getMemberFloatType(unsigned member_num)
+		H5::CompType::getMemberStrType(unsigned member_num)
+		BMR - 2005/07/27
+
+
+
+   
+
+Platforms Tested
+================
+
+    AIX 5.1  (32 and 64-bit)      xlc 6.0.0.6
+                                  xlf 8.1.1.3
+    				  xlC 6.0.0.6
+				  mpcc_r 6.0.0.6
+                                  mpxlf_r 8.1.1.3
+				  xlc 5.0.2.5
+				  xlf 7.1.1.2
+				  xlC 5.0.2.5
+				  mpcc_r 5.0.2.5
+				  mpxlf_r 7.1.1.2
+    AIX 5.2 (32/64 bit)           xlc 6.0.0.8
+                                  xlC 6.0.0.9
+                                  xlf 8.1.1.7
+                                  mpcc_r 6.0.0.8
+                                  mpxlf_r 8.1.1.7
+    AIX 5.2 (32/64 bit, LLNL frost)    xlc 6.0.0.8
+                                  xlC 6.0.0.8
+                                  xlf 8.1.1.7
+                                  mpcc_r 6.0.0.8
+                                  mpxlf_r 8.1.1.7
+    AIX 5.3 (32/64 bit)           xlc 7.0.0.0
+                                  xlC 7.0.
+                                  xlf 9.1.0.3
+    Cray X1 water 3.0.35          Cray Standard C Version 5.4.0.7.4
+                                  Cray Fortran 5.4.0.7.3
+                                  Cray C++ 5.4.0.7.4
+    FreeBSD 4.11                  gcc 2.95.4
+                                  g++ 2.95.4
+                                  gcc 3.2.3, 3.3.6, 3.4.4, 4.0.0
+    HP-UX B.11.00                 HP C  HP92453-01 A.11.01.20 
+                                  HP F90 v2.4
+                                  HP ANSI C++ B3910B A.03.13
+    HP-UX B.11.23                 HP aC++/ANSI C B3910B A.06.00
+                                  HP F90 v2.9
+                                  HP aC++/ANSI C B3910B A.06.00
+    IRIX64 6.5 (tesla -64)        MIPSpro cc 7.4.2m
+                                  F90 MIPSpro 7.4.2m
+                                  C++ MIPSpro cc 7.4.2m
+    IRIX64 6.5 (64 & n32)         MIPSpro cc 7.3.1.3m
+                                  F90 MIPSpro 7.3.1.3m (64 only)
+                                  C++ MIPSpro cc 7.3.1.3m
+				  mpt 1.6
+    Linux 2.4.20-28.7             gcc 2.96
+    (eirene, verbena)             gcc 3.3.2
+                                  PGI compilers (pgcc, pgf90, pgCC) 
+                                  version 5.2-1
+                                  Absoft Fortran compiler v9.0
+                         	  Intel(R) C++ 32-bit Version 8.1
+    				  Intel(R) Fortran 32-bit Version 8.1
+                                  MPIch 1.2.6
+    Linux 2.4.21-268-smp x86_64   gcc 3.3.1 (SuSE Linux, AMD)
+    (mir)                         PGI 5.2-1 C and F90 (with k3-32) 
+                         	  Intel(R) C++ 32-bit Version 8.1
+    				  Intel(R) Fortran 32-bit Version 8.1
+    Linux 2.4.21-sgi306rp21 Altix 
+          SMP ia64                Intel(R) C++ Version 8.1
+    (cobalt)                      Intel(R) Fortran Itanium(R) Version 8.1
+                                  SGI MPI
+    OSF1 V5.1 (QSC)               Compaq C V6.5-011 
+                                  HP Fortran V5.5A-3548
+				  Compaq C++ V6.5-036  
+				  MPIX200_64_r13.4
+    OSF1 V5.1 (PSC)               Compaq C V6.5-303 
+                                  HP Fortran V5.5A-3548
+				  Compaq C++ V6.5-040  
+    SunOS 5.8 32,46               Sun WorkShop 6 update 2 C 5.3
+     (Solaris 2.8)                Sun WorkShop 6 update 2 Fortran 90
+                                  Sun WorkShop 6 update 2 C++ 5.3
+    SunOS 5.9 32,64               Sun C 5.6 2004/07/15
+     (Solaris 2.9)                Sun Fortran 95 8.0 2004/07/15
+                                  Sun C++ 5.6 2004/07/15
+    SunOS 5.10                    Sun WorkShop 6 update 2 C 5.3
+                                  Sun WorkShop 6 update 2 Fortran 95 6.2
+                                  Sun WorkShop 6 update 2 C++ 5.3
+                                  Patch 111685-13 
+    Xeon Linux 2.4.21-32.0.1.ELsmp-perfctr-lustre
+    (tungsten)	                  Intel(R) C++ Version 9.0
+                                  Intel(R) Fortran Compiler Version 9.0
+    IA-64 Linux 2.4.21.SuSE_292.til1 ia64
+    (NCSA tg-login)               Intel(R) C++ Version 8.0
+                                  Intel(R) Fortran Compiler Version 8.0
+				  mpich-gm-1.2.5..10-intel-r2
+    Windows XP                    MSVC++.NET
+                                  MSVC++ 6.0
+                                  Intel 8.1 C++
+    MAC OS X                      Darwin 7.5
+                                  gcc and g++ Apple Computer, Inc. GCC 
+                                  version 1175, based on gcc version 3.3.2
+                                  IBM XL Fortran version 8.1 
+                                  Absoft Fortran compiler v8.2
+
+
+Supported Configuration Features Summary
+========================================
+
+Key:   y   = tested and supported
+       n   = not supported or not tested in this release
+       x   = not working in this release
+       dna = does not apply
+       ( ) = footnote appears below second table
+
+Platform                             C        F90    F90      C++  zlib  SZIP
+                                     parallel        parallel      
+IBM BG/L (16)			     n        n      n        n    y     y
+Solaris2.8 64-bit                    y        y      y(1)     y    y     y
+Solaris2.8 32-bit                    y        y      y(1)     y    y     y
+Solaris2.9 64-bit                    y(1)     y      y(1)     y    y     y
+Solaris2.9 32-bit                    y(1)     y      y(1)     y    y     y
+Solaris2.10 64-bit                   y(1)     y      n        y    y     y
+Solaris2.10 32-bit                   y(1)     y      n        y    y     y
+IRIX64_6.5 64-bit                    y(2)     y      y        y    y     y
+IRIX64_6.5 32-bit                    y(2)     n      n        n    y     y
+HPUX11.00                            y(1)     y      y        y    y     y
+HPUX11.23-32bit                      n        y      n        y    y     y
+HPUX11.23-64bit                      n        n      n        y    y     y
+OSF1 v5.1                            y        y      y        y    y     y
+X1                                   y        y      y        y    y     n
+AIX-5.1, 5.2 & 5.3 32-bit            y        y      y        y    y     y
+AIX-5.1, 5.2 & 5.3 64-bit            y        y      y        y    y     y
+WinXP Visual Studio 6.0              n        n(9)   n        y    y     y
+WinXP .Net                           n        n      n        y(8) y     y
+Mac OS X 10.3                        n        y(10)  n        y    y     y
+FreeBSD 4.11                         n        n      n        y    y     y
+RedHat 7.3  W (3)                    y(1)     y(11)  n        y    y     y
+RedHat 7.3  W Intel (3)              n        y      n        y    y     y
+RedHat 7.3  W PGI (3)                n        y      n        y    y     y
+RedStorm (16)			     n        y      n        y    y     n
+SuSe x86_64 gcc (3,13)               n        y(12)  n        y    y     y
+SuSe x86_64 icc (3,13)               n        y(14)  n        y    y     y
+Linux 2.4 Xeon C Lustre Intel (3,6)  n        y      n        y    y     y
+Linux 2.4 SuSE ia64 C Intel (3,7)    y        y      y        y    y     y
+Linux 2.4 SGI Altix ia64 Intel (3)   y        y      y        y    y     y
+
+
+Platform                             Shared        static-  Thread-  STREAM- 
+                                     libraries(4)  exec     safe     VFD    
+IBM BG/L 			     n              y       n        n
+Solaris2.8 64-bit                    y              x       y        y
+Solaris2.8 32-bit                    y              x       y        y
+Solaris2.9 64-bit                    y              x       y        y
+Solaris2.9 32-bit                    y              x       y        y
+Solaris2.10 64-bit                   y              x       y        y
+Solaris2.10 32-bit                   y              x       y        y
+IRIX64_6.5 64-bit                    y              y       y        y
+IRIX64_6.5 32-bit                    y              y       y        y
+HPUX11.00                            y              x       n        y
+HPUX11.23                            y              y       n        y
+OSF1 v5.1                            y              y       n        y
+X1                                   n              y       n        y
+AIX-5.1, 5.2 & 5.3 32-bit            n              y       n        y
+AIX-5.1, 5.2 & 5.3 64-bit            n              y       n        y
+WinXP Visual Studio 6.0              y              y       n        n
+WinXP .Net                           y              y       n        n
+Mac OS X 10.3                        y              y       n        y
+FreeBSD 4.11                         y              y       y        y
+RedHat 7.3   W (3)                   y              y       y        y
+RedHat 7.3  W  Intel (3)             n              y       n        y
+RedHat 7.3  W  PGI (3)               n              y       n        y
+RedStorm 			     n              y       n        y
+SuSe x86_64 gcc (3,13)               n              y       n        y
+SuSe x86_64 icc (3,13)               y              y(15)   n        y
+Linux 2.4 Xeon C Lustre Intel (3,6)  y              y       n        y
+Linux 2.4 SuSE ia64 C Intel (3,7)    y              y       n        n
+Linux 2.4 SGI Altix ia64 Intel  (3)  y              y       n        y
+
+
+Compiler versions for each platform are listed in the "Platforms Tested" 
+table found elsewhere in this file (RELEASE.txt).  Unless otherwise noted, 
+compilers used are the system compilers.
+
+Footnotes:  (1) Using mpich 1.2.6
+            (2) Using mpt and mpich 1.2.6.
+            (3) Linux 2.4 with GNU, Intel, and PGI compilers, as indicated.  
+                  W or C indicates workstation or cluster, respectively.
+            (4) Shared libraries are provided only for the C library, 
+                except on Windows where they are provided for C and C++.
+            (5) Using mpt.
+            (6) Linux 2.4.21-32.0.1.  Xeon cluster with ELsmp-perfctr-lustre 
+                and Intel compilers
+            (7) Linux 2.4.21, SuSE_292.til1.  Ia64 cluster with Intel compilers
+            (8) Intel 8.1
+            (9) One test of this release failed with Compaq Visual Fortran 6.6c.
+                No binary fortran release will be provided. Users should build
+                the library by themselves and use it at their own risk. 
+                We recommend that users use HDF5 1.7 instead 
+                or use Compaq Visual Fortran 6.0.
+           (10) IBM XLF and Absoft
+           (11) PGI, Absoft.  No shared libraries with Absoft; 
+                use '--disable-shared'.
+           (12) PGI and Intel compilers for both C and Fortran
+           (13) AMD Opteron x86_64
+           (14) ifort
+           (15) Yes with C and Fortran, but not with C++
+           (16) Only serial is ported.  PFS does not work for PHDF5 yet.
+           FMB/EIP - 2005/11/10
+
+
+Known Problems
+==============
+* Intel Compilers for Linux x86_86 platforms (EM64T-based, v8.1) has
+  optimization error in the data types conversion code.  Before running
+  configure, edit the file config/intel-flags by changing the setting of
+  PROD_CFLAGS from -O3 to -O0, then run configure.  AKC - 2005/11/10.
+
+* Fortran testing and compiling failures on windows XP 
+  1. Compaq visual fortran 6.6c with VS 6.0
+     The Fortran tests failed for both release, release dll, debug and debug
+     dll. The failure is a random one. We won't provide fortran libraries. The
+     same test passed with the 1.7.51 snapshot. You may find the 1.7.51 
+     snapshot under ftp://hdf.ncsa.uiuc.edu/pub/outgoing/hdf5/snapshots/.
+  2. Intel fortran 8.1 under .Net environment
+     The fortran library cannot even be compiled. Some users have pointed this
+     to intel forum.
+
+* When testing parallel HDF5 with the C compiler version MIPSpro 7.4.3 at IRIX
+  6.5, set enviroment variable MPI_TYPE_MAX to be a bigger number, for example 
+  120000, in order to pass the complicated collective IO tests inside parallel 
+  HDF5 library. This is not a problem inside parallel HDF5 library. You can 
+  always set a bigger number in your system.
+                                  KY - 2005/10/6
+
+* A contiguous or chunked dataset created by a sequential version may
+  not be modified with a parallel version of the library. 
+  Use the H5Pset_alloc_time function with H5D_ALLOC_TIME_EARLY to set up the 
+  dataset creation property list to avoid the problem.
+                                    EIP - 2005/09/09
+
+* The dataset created or rewritten with the v1.6.3 library or after can't 
+  be read with the v1.6.2 library or before when Fletcher32 EDC(filter) is 
+  enabled.  There was a bug in the calculating code of the Fletcher32 
+  checksum in the library before v1.6.3.  The checksum value wasn't consistent 
+  between big-endian and little-endian systems.  This bug was fixed in 
+  Release 1.6.3.  However, after fixing the bug, the checksum value is no 
+  longer the same as before on little-endian system.  The library release 
+  after 1.6.4 can still read the dataset created or rewritten with the library
+  of v1.6.2 or before.  SLU - 2005/7/8
+
+* For version 6 (6.02 and 6.04) of the Portland Group compiler on AMD Opteron
+  processor, there's a bug in the compiler for optimization(-O2).  The library
+  failed in several tests but all related to multi driver.  The problem has 
+  been reported to the vendor.  
+
+* test/big fails sometimes with the message "Possible overlap with another
+  region."  The test selects regions randomly, and this error occurs when
+  two regions overlap each other; it is a bug in the test and not in
+  HDF5.  Since the error is triggered by a random situation, it will
+  usually disappear if the test is re-run.
+
+* Newer SGI MIPSpro compilers (version 7.4.x) support C99 features but it
+  has a "guard" statement in stdint.h that will #error and skip the rest
+  of the header file if C99 option is not used explicitly.  Hardset
+  $CC to c99 will resolve the problem. AKC - 2004/12/13
+
+* On IBM AIX systems, parallel HDF5 mode will fail some tests with error
+  messages like "INFO: 0031-XXX ...".  This is from the command poe.
+  Set the environment variable MP_INFOLEVEL to 0 to minimize the messages
+  and run the tests again.
+  The tests may fail with messages like "The socket name is already
+  in use".  HDF5 does not use sockets (except for stream-VFD).  This is
+  due to problems of the poe command trying to set up the debug socket.
+  Check if there are many old /tmp/s.pedb.* staying around.  These are
+  sockets used by the poe command and left behind due to failed commands.
+  Ask your system administrator to clean them out.  Lastly, request IBM
+  to provide a means to run poe without the debug socket.
+
+* Two h5dump xml tests(h5dump --xml thlink.h5 and h5dump --xml tmany.h5) 
+  failed on windows xp with .NET for debug and debug dll. Release and 
+  Release dll work fine. 
+
+* The h5dump tests may fail to match the expected output on some platforms
+  (e.g. parallel jobs, Windows) where the error messages directed to
+  "stderr" do not appear in the "right order" with output from stdout.
+  This is not an error.
+
+* The stream-vfd test uses ip port 10007 for testing. If another
+  application is already using that port address, the test will hang
+  indefinitely and has to be terminated by the kill command. To try the
+  test again, change the port address in test/stream_test.c to one not
+  being used in the host.
+
+* The --enable-static-exec configure flag fails to compile for Solaris
+  platforms. This is due to the fact that not all of the system
+  libraries on Solaris are available in a static format.
+
+  The --enable-static-exec configure flag also fails to correctly compile
+  on IBM SP2 platform for the serial mode. The parallel mode works fine
+  with this option.
+
+  The --enable-static-exec configure flag also fails to correctly compile
+  on the HPUX 11.00.
+  
+  It is suggested that you don't use this option on these platforms
+  during configuration.
+
+* The Stream VFD was not tested yet under Windows.
+
+
+* Before building HDF5 F90 Library from source on Crays 
+  replace H5Aff.f90, H5Dff.f90 and H5Pff.f90 files in the fortran/src
+  subdirectory in the top level directory with the Cray-specific files
+  from the site:
+  ftp://ftp.ncsa.uiuc.edu/HDF/HDF5/current/src/patches/
+
+* Use --disable-shared configure flag if building with Absoft Fortran
+  compiler.
+
+* Information about building with PGI and Intel compilers is available in
+  INSTALL file sections 5.7 and 5.8.
+
+* In LANL QSC, the new cc compiler has problems converting small values of
+  long long (absolute values less than 1**-308) to double.  This triggers
+  the test/dtypes to report failure in the
+      Testing random sw long double -> double conversions
+  If -ieee is used, the converted doubles spread over the range 0.0 to 1**-308.
+  If -ieee is not used, the converted double values are mostly 0.0 but
+  occasionally as 1**-308.  This has been reported to the system staff.
+  All other tests have passed.
+
+* Fortran release DLL randomly failed with Compaq Visual Fortran 6.6c on
+  Windows. 
+
+* Fortran DLL built with Intel 8.1 in .NET environment crushed the compiler,
+  Building Fortran static library with Intel 8.1 in .NET environment 
+  requires manually setting the project file.
+  Please contact to hdfhelp at ncsa.uiuc.edu if you need to build
+  Fortran static library with Intel 8.1 with .NET environment.
+
+* On at least one system, SDSC DataStar, the scheduler (in this case
+  LoadLeveler) sends job status updates to standard error when you run
+  any executable that was compiled with the parallel compilers.
+
+  This causes problems when running "make check" on parallel builds, as
+  many of the tool tests function by saving the output from test runs,
+  and comparing it to an exemplar.
+
+  The best solution is to reconfigure the target system so it no longer
+  inserts the extra text.  However, this may not be practical.
+
+  In such cases, one solution is to "setenv HDF5_Make_Ignore yes" prior to
+  the configure and build.  This will cause "make check" to continue after
+  detecting errors in the tool tests.  However, in the case of SDSC DataStar,
+  it also leaves you with some 150 "failed" tests to examine by hand.
+
+  A second solution is to write a script to run serial tests and filter
+  out the text added by the scheduler.  A sample script used on SDSC
+  DataStar is given below, but you will probably have to customize it
+  for your installation.
+
+  Observe that the basic idea is to insert the script as the first item
+  on the command line which executes the test.  The script then
+  executes the test and filters out the offending text before passing
+  it on.
+
+        #!/bin/csh
+
+        set STDOUT_FILE=~/bin/serial_filter.stdout
+        set STDERR_FILE=~/bin/serial_filter.stderr
+
+        rm -f $STDOUT_FILE $STDERR_FILE
+
+        ($* > $STDOUT_FILE) >& $STDERR_FILE
+
+        set RETURN_VALUE=$status
+
+        cat $STDOUT_FILE
+
+        tail +3 $STDERR_FILE
+
+        exit $RETURN_VALUE
+
+  You get the HDF make files and test scripts to execute your filter script
+  by setting the environment variable "RUNSERIAL" to the full path of the
+  script prior to running configure for parallel builds.  Remember to
+  "unsetenv RUNSERIAL" before running configure for a serial build.
+
+  Note that the RUNSERIAL environment variable exists so that we can
+  prefix serial runs as necessary on the target system.  On DataStar,
+  no prefix is necessary.  However, on an MPICH system, the prefix might
+  have to be set to something like "/usr/local/mpi/bin/mpirun -np 1" to
+  get the serial tests to run at all.
+
+  In such cases, you will have to include the regular prefix in your
+  filter script.
+

Added: packages/hdf5/branches/upstream/current/src/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/src/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,4218 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+H5.lo: \
+   $(srcdir)/H5.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Ipkg.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Sprivate.h
+H5A.lo: \
+   $(srcdir)/H5A.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Apkg.h \
+   $(srcdir)/H5Aprivate.h \
+   $(srcdir)/H5Apublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h
+H5AC.lo: \
+   $(srcdir)/H5AC.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h
+H5B.lo: \
+   $(srcdir)/H5B.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5Bpkg.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MFprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h
+H5C.lo: \
+   $(srcdir)/H5C.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h
+H5D.lo: \
+   $(srcdir)/H5D.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dpkg.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5HLprivate.h \
+   $(srcdir)/H5HLpublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Vprivate.h
+H5Dcontig.lo: \
+   $(srcdir)/H5Dcontig.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dpkg.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5MFprivate.h \
+   $(srcdir)/H5Vprivate.h
+H5Dcompact.lo: \
+   $(srcdir)/H5Dcompact.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dpkg.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Vprivate.h
+H5Defl.lo: \
+   $(srcdir)/H5Defl.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dpkg.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h
+H5Dio.lo: \
+   $(srcdir)/H5Dio.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dpkg.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Vprivate.h
+H5Distore.lo: \
+   $(srcdir)/H5Distore.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Bpkg.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5Dpkg.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MFprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Vprivate.h
+H5Dmpio.lo: \
+   $(srcdir)/H5Dmpio.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dpkg.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h
+H5Dselect.lo: \
+   $(srcdir)/H5Dselect.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dpkg.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FLprivate.h
+H5Dtest.lo: \
+   $(srcdir)/H5Dtest.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dpkg.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Iprivate.h
+H5E.lo: \
+   $(srcdir)/H5E.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h
+H5F.lo: \
+   $(srcdir)/H5F.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Aprivate.h \
+   $(srcdir)/H5Apublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5FDcore.h \
+   $(srcdir)/H5FDfamily.h \
+   $(srcdir)/H5FDgass.h \
+   $(srcdir)/H5FDlog.h \
+   $(srcdir)/H5FDmulti.h \
+   $(srcdir)/H5FDsec2.h \
+   $(srcdir)/H5FDsrb.h \
+   $(srcdir)/H5FDstdio.h \
+   $(srcdir)/H5FDstream.h
+H5Fdbg.lo: \
+   $(srcdir)/H5Fdbg.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h
+H5Fmount.lo: \
+   $(srcdir)/H5Fmount.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5MMprivate.h
+H5Fsfile.lo: \
+   $(srcdir)/H5Fsfile.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5FLprivate.h
+H5Fsuper.lo: \
+   $(srcdir)/H5Fsuper.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h
+H5FD.lo: \
+   $(srcdir)/H5FD.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5FDcore.h \
+   $(srcdir)/H5FDfamily.h \
+   $(srcdir)/H5FDgass.h \
+   $(srcdir)/H5FDlog.h \
+   $(srcdir)/H5FDmulti.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5FDsec2.h \
+   $(srcdir)/H5FDsrb.h \
+   $(srcdir)/H5FDstdio.h \
+   $(srcdir)/H5FDstream.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Pprivate.h
+H5FDcore.lo: \
+   $(srcdir)/H5FDcore.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5FDcore.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h
+H5FDfamily.lo: \
+   $(srcdir)/H5FDfamily.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5FDfamily.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h
+H5FDgass.lo: \
+   $(srcdir)/H5FDgass.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5FDgass.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h
+H5FDlog.lo: \
+   $(srcdir)/H5FDlog.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5FDlog.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h
+H5FDmpi.lo: \
+   $(srcdir)/H5FDmpi.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h
+H5FDmpio.lo: \
+   $(srcdir)/H5FDmpio.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h
+H5FDmpiposix.lo: \
+   $(srcdir)/H5FDmpiposix.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h
+H5FDmulti.lo: \
+   $(srcdir)/H5FDmulti.c \
+   $(srcdir)/hdf5.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5Apublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5HLpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5FDcore.h \
+   $(srcdir)/H5FDfamily.h \
+   $(srcdir)/H5FDgass.h \
+   $(srcdir)/H5FDlog.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5FDmulti.h \
+   $(srcdir)/H5FDsec2.h \
+   $(srcdir)/H5FDsrb.h \
+   $(srcdir)/H5FDstdio.h \
+   $(srcdir)/H5FDstream.h
+H5FDsec2.lo: \
+   $(srcdir)/H5FDsec2.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5FDsec2.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h
+H5FDsrb.lo: \
+   $(srcdir)/H5FDsrb.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5FDsrb.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h
+H5FDstdio.lo: \
+   $(srcdir)/H5FDstdio.c \
+   $(srcdir)/hdf5.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5Apublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5HLpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5FDcore.h \
+   $(srcdir)/H5FDfamily.h \
+   $(srcdir)/H5FDgass.h \
+   $(srcdir)/H5FDlog.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5FDmulti.h \
+   $(srcdir)/H5FDsec2.h \
+   $(srcdir)/H5FDsrb.h \
+   $(srcdir)/H5FDstdio.h \
+   $(srcdir)/H5FDstream.h
+H5FDstream.lo: \
+   $(srcdir)/H5FDstream.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5FDstream.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h
+H5FL.lo: \
+   $(srcdir)/H5FL.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h
+H5FO.lo: \
+   $(srcdir)/H5FO.c \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h
+H5FS.lo: \
+   $(srcdir)/H5FS.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5FSprivate.h
+H5G.lo: \
+   $(srcdir)/H5G.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Aprivate.h \
+   $(srcdir)/H5Apublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Gpkg.h \
+   $(srcdir)/H5HLprivate.h \
+   $(srcdir)/H5HLpublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h
+H5Gent.lo: \
+   $(srcdir)/H5Gent.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Gpkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5HLprivate.h \
+   $(srcdir)/H5HLpublic.h
+H5Gnode.lo: \
+   $(srcdir)/H5Gnode.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Gpkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5HLprivate.h \
+   $(srcdir)/H5HLpublic.h \
+   $(srcdir)/H5MFprivate.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5MMprivate.h
+H5Gstab.lo: \
+   $(srcdir)/H5Gstab.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Gpkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5HLprivate.h \
+   $(srcdir)/H5HLpublic.h \
+   $(srcdir)/H5MMprivate.h
+H5HG.lo: \
+   $(srcdir)/H5HG.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5HGpkg.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5MFprivate.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h
+H5HGdbg.lo: \
+   $(srcdir)/H5HGdbg.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5HGpkg.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Iprivate.h
+H5HL.lo: \
+   $(srcdir)/H5HL.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5HLpkg.h \
+   $(srcdir)/H5HLprivate.h \
+   $(srcdir)/H5HLpublic.h \
+   $(srcdir)/H5MFprivate.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h
+H5HLdbg.lo: \
+   $(srcdir)/H5HLdbg.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5HLpkg.h \
+   $(srcdir)/H5HLprivate.h \
+   $(srcdir)/H5HLpublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h
+H5HP.lo: \
+   $(srcdir)/H5HP.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5HPprivate.h \
+   $(srcdir)/H5FLprivate.h
+H5I.lo: \
+   $(srcdir)/H5I.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Ipkg.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h
+H5MF.lo: \
+   $(srcdir)/H5MF.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5MFprivate.h
+H5MM.lo: \
+   $(srcdir)/H5MM.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h
+H5O.lo: \
+   $(srcdir)/H5O.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MFprivate.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Opkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h
+H5Oattr.lo: \
+   $(srcdir)/H5Oattr.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Apkg.h \
+   $(srcdir)/H5Aprivate.h \
+   $(srcdir)/H5Apublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Opkg.h \
+   $(srcdir)/H5Spkg.h
+H5Obogus.lo: \
+   $(srcdir)/H5Obogus.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Opkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h
+H5Ocont.lo: \
+   $(srcdir)/H5Ocont.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Opkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h
+H5Odtype.lo: \
+   $(srcdir)/H5Odtype.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Opkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Tpkg.h
+H5Oefl.lo: \
+   $(srcdir)/H5Oefl.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5HLprivate.h \
+   $(srcdir)/H5HLpublic.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Opkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h
+H5Ofill.lo: \
+   $(srcdir)/H5Ofill.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Opkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h
+H5Olayout.lo: \
+   $(srcdir)/H5Olayout.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5MFprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Opkg.h
+H5Omtime.lo: \
+   $(srcdir)/H5Omtime.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Opkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h
+H5Oname.lo: \
+   $(srcdir)/H5Oname.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Opkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h
+H5Onull.lo: \
+   $(srcdir)/H5Onull.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Opkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h
+H5Opline.lo: \
+   $(srcdir)/H5Opline.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Opkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h
+H5Osdspace.lo: \
+   $(srcdir)/H5Osdspace.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Opkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Spkg.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h
+H5Oshared.lo: \
+   $(srcdir)/H5Oshared.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Opkg.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h
+H5Ostab.lo: \
+   $(srcdir)/H5Ostab.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Gpkg.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Opkg.h
+H5P.lo: \
+   $(srcdir)/H5P.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Ppkg.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5SLprivate.h
+H5Pdcpl.lo: \
+   $(srcdir)/H5Pdcpl.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Ppkg.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5SLprivate.h
+H5Pdxpl.lo: \
+   $(srcdir)/H5Pdxpl.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ppkg.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5SLprivate.h
+H5Pfapl.lo: \
+   $(srcdir)/H5Pfapl.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Ppkg.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5FDsec2.h
+H5Pfcpl.lo: \
+   $(srcdir)/H5Pfcpl.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ppkg.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5SLprivate.h
+H5Ptest.lo: \
+   $(srcdir)/H5Ptest.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Ppkg.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5SLprivate.h
+H5R.lo: \
+   $(srcdir)/H5R.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Fpkg.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h
+H5RC.lo: \
+   $(srcdir)/H5RC.c \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5RCprivate.h
+H5RS.lo: \
+   $(srcdir)/H5RS.c \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5RSprivate.h
+H5S.lo: \
+   $(srcdir)/H5S.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Spkg.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h
+H5Sall.lo: \
+   $(srcdir)/H5Sall.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Spkg.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Vprivate.h
+H5Shyper.lo: \
+   $(srcdir)/H5Shyper.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Spkg.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Vprivate.h
+H5Smpio.lo: \
+   $(srcdir)/H5Smpio.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Spkg.h \
+   $(srcdir)/H5Sprivate.h
+H5Snone.lo: \
+   $(srcdir)/H5Snone.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Spkg.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Vprivate.h
+H5Spoint.lo: \
+   $(srcdir)/H5Spoint.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Spkg.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Vprivate.h
+H5Sselect.lo: \
+   $(srcdir)/H5Sselect.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Spkg.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Vprivate.h
+H5Stest.lo: \
+   $(srcdir)/H5Stest.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Spkg.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h
+H5SL.lo: \
+   $(srcdir)/H5SL.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5SLprivate.h
+H5ST.lo: \
+   $(srcdir)/H5ST.c \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5STprivate.h
+H5T.lo: \
+   $(srcdir)/H5T.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Tpkg.h
+H5Tarray.lo: \
+   $(srcdir)/H5Tarray.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Tbit.lo: \
+   $(srcdir)/H5Tbit.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Tcommit.lo: \
+   $(srcdir)/H5Tcommit.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FOprivate.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5SLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Tpkg.h
+H5Tcompound.lo: \
+   $(srcdir)/H5Tcompound.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Tconv.lo: \
+   $(srcdir)/H5Tconv.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Tpkg.h
+H5Tcset.lo: \
+   $(srcdir)/H5Tcset.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Tenum.lo: \
+   $(srcdir)/H5Tenum.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Tfields.lo: \
+   $(srcdir)/H5Tfields.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Tfixed.lo: \
+   $(srcdir)/H5Tfixed.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Tfloat.lo: \
+   $(srcdir)/H5Tfloat.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Tinit.lo: \
+   H5Tinit.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Tnative.lo: \
+   $(srcdir)/H5Tnative.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Tpkg.h
+H5Toffset.lo: \
+   $(srcdir)/H5Toffset.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Topaque.lo: \
+   $(srcdir)/H5Topaque.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Torder.lo: \
+   $(srcdir)/H5Torder.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Tpad.lo: \
+   $(srcdir)/H5Tpad.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Tprecis.lo: \
+   $(srcdir)/H5Tprecis.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Tstrpad.lo: \
+   $(srcdir)/H5Tstrpad.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5Tpkg.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Spublic.h
+H5Tvlen.lo: \
+   $(srcdir)/H5Tvlen.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5FLprivate.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Tpkg.h
+H5TS.lo: \
+   $(srcdir)/H5TS.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h
+H5V.lo: \
+   $(srcdir)/H5V.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Vprivate.h
+H5Z.lo: \
+   $(srcdir)/H5Z.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Dprivate.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5FDprivate.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDmpi.h \
+   $(srcdir)/H5FDmpio.h \
+   $(srcdir)/H5FDmpiposix.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Iprivate.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5Pprivate.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Sprivate.h \
+   $(srcdir)/H5Zpkg.h
+H5Zdeflate.lo: \
+   $(srcdir)/H5Zdeflate.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Zpkg.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h
+H5Zfletcher32.lo: \
+   $(srcdir)/H5Zfletcher32.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Zpkg.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h
+H5Zshuffle.lo: \
+   $(srcdir)/H5Zshuffle.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Zpkg.h \
+   $(srcdir)/H5Zprivate.h
+H5Zszip.lo: \
+   $(srcdir)/H5Zszip.c \
+   $(srcdir)/H5private.h \
+   $(srcdir)/H5public.h \
+   H5pubconf.h \
+   $(srcdir)/H5api_adpt.h \
+   $(srcdir)/H5MPprivate.h \
+   $(srcdir)/H5Eprivate.h \
+   $(srcdir)/H5Epublic.h \
+   $(srcdir)/H5Ipublic.h \
+   $(srcdir)/H5Fprivate.h \
+   $(srcdir)/H5Fpublic.h \
+   $(srcdir)/H5FDpublic.h \
+   $(srcdir)/H5MMprivate.h \
+   $(srcdir)/H5MMpublic.h \
+   $(srcdir)/H5Oprivate.h \
+   $(srcdir)/H5Opublic.h \
+   $(srcdir)/H5Dpublic.h \
+   $(srcdir)/H5Spublic.h \
+   $(srcdir)/H5HGprivate.h \
+   $(srcdir)/H5HGpublic.h \
+   $(srcdir)/H5Tprivate.h \
+   $(srcdir)/H5Tpublic.h \
+   $(srcdir)/H5Gprivate.h \
+   $(srcdir)/H5Gpublic.h \
+   $(srcdir)/H5Bprivate.h \
+   $(srcdir)/H5Bpublic.h \
+   $(srcdir)/H5ACprivate.h \
+   $(srcdir)/H5ACpublic.h \
+   $(srcdir)/H5Cprivate.h \
+   $(srcdir)/H5Cpublic.h \
+   $(srcdir)/H5RCprivate.h \
+   $(srcdir)/H5RSprivate.h \
+   $(srcdir)/H5Rprivate.h \
+   $(srcdir)/H5Rpublic.h \
+   $(srcdir)/H5Zprivate.h \
+   $(srcdir)/H5Zpublic.h \
+   $(srcdir)/H5Ppublic.h \
+   $(srcdir)/H5Zpkg.h

Added: packages/hdf5/branches/upstream/current/src/H5.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3097 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5I_PACKAGE		/*suppress error about including H5Ipkg	  */
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Bprivate.h"		/* B-link trees				*/
+#include "H5Dprivate.h"		/* Datasets				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FLprivate.h"	/* Free lists                           */
+#include "H5Ipkg.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"		/* Property lists			*/
+#include "H5Rpublic.h"		/* References				*/
+#include "H5Sprivate.h"		/* Dataspaces 				*/
+#include "H5Tprivate.h"		/* Datatypes				*/
+#include "H5Zprivate.h"         /* I/O pipeline filters			*/
+
+#ifdef H5_HAVE_PARALLEL
+/* datatypes of predefined drivers needed by H5_trace() */
+#include "H5FDmpio.h"
+#endif /* H5_HAVE_PARALLEL */
+
+/* we need this for the struct rusage declaration */
+#if defined(H5_HAVE_GETRUSAGE) && defined(H5_HAVE_SYS_RESOURCE_H)
+#   include <sys/resource.h>
+#endif
+
+/* statically initialize block for pthread_once call used in initializing */
+/* the first global mutex                                                 */
+#ifdef H5_HAVE_THREADSAFE
+H5_api_t H5_g;
+#else
+hbool_t H5_libinit_g = FALSE;   /* Library hasn't been initialized */
+#endif
+
+#ifdef H5_HAVE_MPE
+hbool_t H5_MPEinit_g = FALSE;	/* MPE Library hasn't been initialized */
+#endif
+
+char			H5_lib_vers_info_g[] = H5_VERS_INFO;
+static hbool_t          H5_dont_atexit_g = FALSE;
+H5_debug_t		H5_debug_g;		/*debugging info	*/
+static void		H5_debug_mask(const char*);
+
+/*--------------------------------------------------------------------------
+ * NAME
+ *   H5_init_library -- Initialize library-global information
+ * USAGE
+ *    herr_t H5_init_library()
+ *
+ * RETURNS
+ *    Non-negative on success/Negative on failure
+ *
+ * DESCRIPTION
+ *    Initializes any library-global data or routines.
+ *
+ *--------------------------------------------------------------------------
+ */
+herr_t
+H5_init_library(void)
+{
+    herr_t ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5_init_library, FAIL)
+    /*
+     * Make sure the package information is updated.
+     */
+    HDmemset(&H5_debug_g, 0, sizeof H5_debug_g);
+    H5_debug_g.pkg[H5_PKG_A].name = "a";
+    H5_debug_g.pkg[H5_PKG_AC].name = "ac";
+    H5_debug_g.pkg[H5_PKG_B].name = "b";
+    H5_debug_g.pkg[H5_PKG_D].name = "d";
+    H5_debug_g.pkg[H5_PKG_E].name = "e";
+    H5_debug_g.pkg[H5_PKG_F].name = "f";
+    H5_debug_g.pkg[H5_PKG_G].name = "g";
+    H5_debug_g.pkg[H5_PKG_HG].name = "hg";
+    H5_debug_g.pkg[H5_PKG_HL].name = "hl";
+    H5_debug_g.pkg[H5_PKG_I].name = "i";
+    H5_debug_g.pkg[H5_PKG_MF].name = "mf";
+    H5_debug_g.pkg[H5_PKG_MM].name = "mm";
+    H5_debug_g.pkg[H5_PKG_O].name = "o";
+    H5_debug_g.pkg[H5_PKG_P].name = "p";
+    H5_debug_g.pkg[H5_PKG_S].name = "s";
+    H5_debug_g.pkg[H5_PKG_T].name = "t";
+    H5_debug_g.pkg[H5_PKG_V].name = "v";
+    H5_debug_g.pkg[H5_PKG_Z].name = "z";
+
+#ifdef H5_HAVE_MPE
+    /* Initialize MPE instrumentation library.  May need to move this
+     * up earlier if any of the above initialization involves using
+     * the instrumentation code.
+     */
+    if (!H5_MPEinit_g)
+    {
+	int mpe_code;
+	int mpi_initialized;
+	MPI_Initialized(&mpi_initialized);
+	if (mpi_initialized){
+	    mpe_code = MPE_Init_log();
+	    assert(mpe_code >=0);
+	    H5_MPEinit_g = TRUE;
+	}
+    }
+#endif
+
+    /*
+     * Install atexit() library cleanup routine unless the H5dont_atexit()
+     * has been called.  Once we add something to the atexit() list it stays
+     * there permanently, so we set H5_dont_atexit_g after we add it to prevent
+     * adding it again later if the library is cosed and reopened.
+     */
+    if (!H5_dont_atexit_g) {
+	(void)HDatexit(H5_term_library);
+	H5_dont_atexit_g = TRUE;
+    }
+
+    /*
+     * Initialize interfaces that might not be able to initialize themselves
+     * soon enough.  The file & dataset interfaces must be initialized because
+     * calling H5P_create() might require the file/dataset property classes to be
+     * initialized.  The property interface must be initialized before the file
+     * & dataset interfaces though, in order to provide them with the proper
+     * property classes.
+     */
+    if (H5P_init()<0)
+        HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize property list interface")
+    if (H5F_init()<0)
+        HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize file interface")
+    if (H5T_init()<0)
+        HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize datatype interface")
+    if (H5D_init()<0)
+        HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize dataset interface")
+    if (H5AC_init()<0)
+        HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, FAIL, "unable to initialize metadata caching interface")
+
+    /* Debugging? */
+    H5_debug_mask("-all");
+    H5_debug_mask(HDgetenv("HDF5_DEBUG"));
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5_term_library
+ *
+ * Purpose:	Terminate interfaces in a well-defined order due to
+ *		dependencies among the interfaces, then terminate
+ *		library-specific data.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, November 20, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+H5_term_library(void)
+{
+    int	pending, ntries=0, n;
+    unsigned	at=0;
+    char	loop[1024];
+    H5E_auto_t func;
+
+#ifdef H5_HAVE_THREADSAFE
+    /* explicit locking of the API */
+    H5_FIRST_THREAD_INIT
+    H5_API_LOCK
+#endif
+
+    /* Don't do anything if the library is already closed */
+    if (!(H5_INIT_GLOBAL))
+	goto done;
+
+    /* Check if we should display error output */
+    (void)H5Eget_auto(&func,NULL);
+
+    /*
+     * Terminate each interface. The termination functions return a positive
+     * value if they do something that might affect some other interface in a
+     * way that would necessitate some cleanup work in the other interface.
+     */
+#define DOWN(F)								      \
+    (((n=H5##F##_term_interface()) && at+8<sizeof loop)?		      \
+     (sprintf(loop+at, "%s%s", at?",":"", #F),				      \
+      at += HDstrlen(loop+at),						      \
+      n):                                                                     \
+     ((n>0 && at+5<sizeof loop)?					      \
+     (sprintf(loop+at, "..."),						      \
+      at += HDstrlen(loop+at),						      \
+     n):n))
+
+    do {
+	pending = 0;
+        /* Try to organize these so the "higher" level components get shut
+         * down before "lower" level components that they might rely on. -QAK
+         */
+	pending += DOWN(R);
+	pending += DOWN(D);
+	pending += DOWN(G);
+	pending += DOWN(A);
+	pending += DOWN(S);
+	pending += DOWN(T);
+        /* Don't shut down the file code until objects in files are shut down */
+        if(pending==0)
+            pending += DOWN(F);
+
+        /* Don't shut down "low-level" components until "high-level" components
+         * have successfully shut down.  This prevents property lists and IDs
+         * from being closed "out from underneath" of the high-level objects
+         * that depend on them. -QAK
+         */
+        if(pending==0) {
+            pending += DOWN(AC);
+            pending += DOWN(Z);
+            pending += DOWN(FD);
+            pending += DOWN(P);
+            /* Don't shut down the ID code until other APIs which use them are shut down */
+            if(pending==0)
+                pending += DOWN(I);
+            /* Don't shut down the free list code until _everything_ else is down */
+            if(pending==0)
+                pending += DOWN(FL);
+        }
+    } while (pending && ntries++ < 100);
+
+    if (pending) {
+        /* Only display the error message if the user is interested in them. */
+        if (func) {
+            fprintf(stderr, "HDF5: infinite loop closing library\n");
+            fprintf(stderr, "      %s\n", loop);
+#ifndef NDEBUG
+            HDabort();
+#endif /* NDEBUG */
+        }
+    }
+
+#ifdef H5_HAVE_MPE
+    /* Close MPE instrumentation library.  May need to move this
+     * down if any of the below code involves using the instrumentation code.
+     */
+    if (H5_MPEinit_g)
+    {
+	int mpe_code;
+	int mpi_initialized;
+	MPI_Initialized(&mpi_initialized);
+	if (mpi_initialized){
+	    mpe_code = MPE_Finish_log("cpilog");
+	    assert(mpe_code >=0);
+	}
+	H5_MPEinit_g = FALSE;	/* turn it off no matter what */
+    }
+#endif
+
+    /* Mark library as closed */
+    H5_INIT_GLOBAL = FALSE;
+done:
+#ifdef H5_HAVE_THREADSAFE
+    H5_API_UNLOCK
+#endif
+    return;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5dont_atexit
+ *
+ * Purpose:	Indicates that the library is not to clean up after itself
+ *		when the application exits by calling exit() or returning
+ *		from main().  This function must be called before any other
+ *		HDF5 function or constant is used or it will have no effect.
+ *
+ *		If this function is used then certain memory buffers will not
+ *		be de-allocated nor will open files be flushed automatically.
+ *		The application may still call H5close() explicitly to
+ *		accomplish these things.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative if this function is called more than
+ *				once or if it is called too late.
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, November 20, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5dont_atexit(void)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API_NOINIT(H5dont_atexit)
+    H5TRACE0("e","");
+
+    if (H5_dont_atexit_g)
+        ret_value=FAIL;
+    else
+        H5_dont_atexit_g = TRUE;
+
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5garbage_collect
+ *
+ * Purpose:	Walks through all the garbage collection routines for the
+ *		library, which are supposed to free any unused memory they have
+ *		allocated.
+ *
+ *      These should probably be registered dynamicly in a linked list of
+ *          functions to call, but there aren't that many right now, so we
+ *          hard-wire them...
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, March 11, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5garbage_collect(void)
+{
+    herr_t                  ret_value = SUCCEED;
+
+    FUNC_ENTER_API(H5garbage_collect, FAIL)
+    H5TRACE0("e","");
+
+    /* Call the garbage collection routines in the library */
+    if(H5FL_garbage_coll()<0)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, FAIL, "can't garbage collect objects")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}   /* end H5garbage_collect() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5set_free_list_limits
+ *
+ * Purpose:	Sets limits on the different kinds of free lists.  Setting a value
+ *      of -1 for a limit means no limit of that type.  These limits are global
+ *      for the entire library.  Each "global" limit only applies to free lists
+ *      of that type, so if an application sets a limit of 1 MB on each of the
+ *      global lists, up to 3 MB of total storage might be allocated (1MB on
+ *      each of regular, array and block type lists).
+ *
+ * Parameters:
+ *  int reg_global_lim;  IN: The limit on all "regular" free list memory used
+ *  int reg_list_lim;    IN: The limit on memory used in each "regular" free list
+ *  int arr_global_lim;  IN: The limit on all "array" free list memory used
+ *  int arr_list_lim;    IN: The limit on memory used in each "array" free list
+ *  int blk_global_lim;  IN: The limit on all "block" free list memory used
+ *  int blk_list_lim;    IN: The limit on memory used in each "block" free list
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, August 2, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5set_free_list_limits(int reg_global_lim, int reg_list_lim, int arr_global_lim,
+    int arr_list_lim, int blk_global_lim, int blk_list_lim)
+{
+    herr_t                  ret_value = SUCCEED;
+
+    FUNC_ENTER_API(H5set_free_list_limits, FAIL)
+    H5TRACE6("e","IsIsIsIsIsIs",reg_global_lim,reg_list_lim,arr_global_lim,
+             arr_list_lim,blk_global_lim,blk_list_lim);
+
+    /* Call the free list function to actually set the limits */
+    if(H5FL_set_free_list_limits(reg_global_lim, reg_list_lim, arr_global_lim, arr_list_lim, blk_global_lim, blk_list_lim)<0)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_CANTSET, FAIL, "can't set garbage collection limits")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}   /* end H5set_free_list_limits() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5_debug_mask
+ *
+ * Purpose:	Set runtime debugging flags according to the string S.  The
+ *		string should contain file numbers and package names
+ *		separated by other characters. A file number applies to all
+ *		following package names up to the next file number. The
+ *		initial file number is `2' (the standard error stream). Each
+ *		package name can be preceded by a `+' or `-' to add or remove
+ *		the package from the debugging list (`+' is the default). The
+ *		special name `all' means all packages.
+ *
+ *		The name `trace' indicates that API tracing is to be turned
+ *		on or off.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August 19, 1998
+ *
+ * Modifications:
+ *              Robb Matzke, 2002-08-08
+ *              Accepts the `ttop' word. If enabled then show only the
+ *              top level API calls, otherwise show all API calls.  Also
+ *              turns on tracing as if the `trace' word was present.
+ *-------------------------------------------------------------------------
+ */
+static void
+H5_debug_mask(const char *s)
+{
+    FILE	*stream = stderr;
+    char	pkg_name[32], *rest;
+    size_t	i;
+    int		clear;
+
+    while (s && *s) {
+	if (HDisalpha(*s) || '-'==*s || '+'==*s) {
+	    /* Enable or Disable debugging? */
+	    if ('-'==*s) {
+		clear = TRUE;
+		s++;
+	    } else if ('+'==*s) {
+		clear = FALSE;
+		s++;
+	    } else {
+		clear = FALSE;
+	    }
+
+	    /* Get the name */
+	    for (i=0; HDisalpha(*s); i++, s++)
+		if (i<sizeof pkg_name)
+                    pkg_name[i] = *s;
+	    pkg_name[MIN(sizeof(pkg_name)-1, i)] = '\0';
+
+	    /* Trace, all, or one? */
+	    if (!HDstrcmp(pkg_name, "trace")) {
+		H5_debug_g.trace = clear?NULL:stream;
+            } else if (!HDstrcmp(pkg_name, "ttop")) {
+                H5_debug_g.trace = stream;
+                H5_debug_g.ttop = !clear;
+            } else if (!HDstrcmp(pkg_name, "ttimes")) {
+                H5_debug_g.trace = stream;
+                H5_debug_g.ttimes = !clear;
+	    } else if (!HDstrcmp(pkg_name, "all")) {
+		for (i=0; i<(size_t)H5_NPKGS; i++)
+		    H5_debug_g.pkg[i].stream = clear?NULL:stream;
+	    } else {
+		for (i=0; i<(size_t)H5_NPKGS; i++) {
+		    if (!HDstrcmp(H5_debug_g.pkg[i].name, pkg_name)) {
+			H5_debug_g.pkg[i].stream = clear?NULL:stream;
+			break;
+		    }
+		}
+		if (i>=(size_t)H5_NPKGS)
+		    fprintf(stderr, "HDF5_DEBUG: ignored %s\n", pkg_name);
+	    }
+
+	} else if (HDisdigit(*s)) {
+	    int fd = (int)HDstrtol (s, &rest, 0);
+	    if ((stream=HDfdopen(fd, "w"))!=NULL)
+	        (void)HDsetvbuf (stream, NULL, _IOLBF, 0);
+	    s = rest;
+	} else {
+	    s++;
+	}
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5get_libversion
+ *
+ * Purpose:	Returns the library version numbers through arguments. MAJNUM
+ *		will be the major revision number of the library, MINNUM the
+ *		minor revision number, and RELNUM the release revision number.
+ *
+ * Note:	When printing an HDF5 version number it should be printed as
+ *
+ * 		printf("%u.%u.%u", maj, min, rel)		or
+ *		printf("version %u.%u release %u", maj, min, rel)
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Unknown
+ *
+ * Modifications:
+ * 	Robb Matzke, 4 Mar 1998
+ *	Now use "normal" data types for the interface.  Any of the arguments
+ *	may be null pointers
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5get_libversion(unsigned *majnum, unsigned *minnum, unsigned *relnum)
+{
+    herr_t                  ret_value = SUCCEED;
+
+    FUNC_ENTER_API(H5get_libversion, FAIL)
+    H5TRACE3("e","*Iu*Iu*Iu",majnum,minnum,relnum);
+
+    /* Set the version information */
+    if (majnum) *majnum = H5_VERS_MAJOR;
+    if (minnum) *minnum = H5_VERS_MINOR;
+    if (relnum) *relnum = H5_VERS_RELEASE;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5check_version
+ *
+ * Purpose:	Verifies that the arguments match the version numbers
+ *		compiled into the library.  This function is intended to be
+ *		called from user to verify that the versions of header files
+ *		compiled into the application match the version of the hdf5
+ *		library.
+ *
+ * Return:	Success:	SUCCEED
+ *
+ *		Failure:	abort()
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, April 21, 1998
+ *
+ * Modifications:
+ *	Albert Cheng, May 12, 2001
+ *	Added verification of H5_VERS_INFO.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5check_version(unsigned majnum, unsigned minnum, unsigned relnum)
+{
+    char	lib_str[256];
+    char	substr[] = H5_VERS_SUBRELEASE;
+    static int	checked = 0;            /* If we've already checked the version info */
+    static int	disable_version_check = 0;      /* Set if the version check should be disabled */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API_NOINIT(H5check_version)
+    H5TRACE3("e","IuIuIu",majnum,minnum,relnum);
+
+    /* Don't check again, if we already have */
+    if (checked)
+	HGOTO_DONE(SUCCEED)
+
+    {    const char *s;  /* Environment string for disabling version check */
+
+        /* Allow different versions of the header files and library? */
+        s = HDgetenv ("HDF5_DISABLE_VERSION_CHECK");
+
+        if (s && HDisdigit(*s))
+            disable_version_check = (int)HDstrtol (s, NULL, 0);
+    }
+
+    if (H5_VERS_MAJOR!=majnum || H5_VERS_MINOR!=minnum ||
+            H5_VERS_RELEASE!=relnum) {
+        switch (disable_version_check) {
+	case 0:
+            HDfputs ("Warning! The HDF5 header files included by this application "
+                     "do not match the\nversion used by the HDF5 library to which "
+                     "this application is linked. Data\ncorruption or "
+                     "segmentation faults may occur if the application "
+                     "is\nallowed to continue.  You can, at your own risk, "
+                     "disable this check by setting\nthe environment variable "
+                     "'HDF5_DISABLE_VERSION_CHECK' to a value of '1'.\n"
+		     "Setting it to 2 will suppress the warning totally.\n",
+		     stderr);
+	    /* Mention the versions we are referring to */
+	    HDfprintf (stderr, "Headers are %u.%u.%u, library is %u.%u.%u\n",
+		     majnum, minnum, relnum,
+		     (unsigned)H5_VERS_MAJOR, (unsigned)H5_VERS_MINOR, (unsigned)H5_VERS_RELEASE);
+
+	    /* Bail out now. */
+	    HDfputs ("Bye...\n", stderr);
+	    HDabort ();
+	case 2:
+	    /* continue silently */
+	    break;
+	default:
+	    /* continue with a warning */
+            HDfputs ("Warning! The HDF5 header files included by this application "
+                     "do not match the\nversion used by the HDF5 library to which "
+                     "this application is linked. Data\ncorruption or "
+                     "segmentation faults may occur if the application "
+                     "continues.\n'HDF5_DISABLE_VERSION_CHECK' "
+                     "environment variable set, application will\n"
+                     "continue.\n", stderr);
+	    /* Mention the versions we are referring to */
+	    HDfprintf (stderr, "Headers are %u.%u.%u, library is %u.%u.%u\n",
+		     majnum, minnum, relnum,
+		     (unsigned)H5_VERS_MAJOR, (unsigned)H5_VERS_MINOR, (unsigned)H5_VERS_RELEASE);
+	    break;
+        } /* end switch */
+
+    } /* end if */
+
+    /* Indicate that the version check has been performed */
+    checked = 1;
+
+    if (!disable_version_check){
+	/*
+	 *verify if H5_VERS_INFO is consistent with the other version information.
+	 *Check only the first sizeof(lib_str) char.  Assume the information
+	 *will fit within this size or enough significance.
+	 */
+	sprintf(lib_str, "HDF5 library version: %d.%d.%d",
+	    H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE);
+	if (*substr){
+	    HDstrcat(lib_str, "-");
+	    HDstrncat(lib_str, substr, (sizeof(lib_str) - HDstrlen(lib_str)) - 1);
+	} /* end if */
+	if (HDstrcmp(lib_str, H5_lib_vers_info_g)){
+	    HDfputs ("Warning!  Library version information error.\n"
+		     "The HDF5 library version information are not "
+		     "consistent in its source code.\nThis is NOT a fatal error "
+		     "but should be corrected.  Setting the environment\n"
+		     "variable 'HDF5_DISABLE_VERSION_CHECK' to a value of 1 "
+		     "will suppress\nthis warning.\n",
+		     stderr);
+	    HDfprintf (stderr, "Library version information are:\n"
+		     "H5_VERS_MAJOR=%d, H5_VERS_MINOR=%d, H5_VERS_RELEASE=%d, "
+		     "H5_VERS_SUBRELEASE=%s,\nH5_VERS_INFO=%s\n",
+		     H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE,
+		     H5_VERS_SUBRELEASE, H5_VERS_INFO);
+	} /* end if */
+    }
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5open
+ *
+ * Purpose:     Initialize the library.  This is normally called
+ *              automatically, but if you find that an HDF5 library function
+ *              is failing inexplicably, then try calling this function
+ *              first.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5open(void)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_API_NOCLEAR(H5open, FAIL)
+    H5TRACE0("e","");
+    /* all work is done by FUNC_ENTER() */
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5close
+ *
+ * Purpose:	Terminate the library and release all resources.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, January 30, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5close(void)
+{
+    /*
+     * Don't call FUNC_ENTER() since we don't want to initialize the whole
+     * thing just to release it all right away.  It is safe to call this
+     * function for an uninitialized library.
+     */
+    FUNC_ENTER_API_NOINIT(H5close)
+    H5TRACE0("e","");
+
+    H5_term_library();
+
+    FUNC_LEAVE_API(SUCCEED)
+}
+
+
+#ifndef H5_HAVE_SNPRINTF
+/*-------------------------------------------------------------------------
+ * Function:	HDsnprintf
+ *
+ * Purpose:	Writes output to the string BUF under control of the format
+ *		FMT that specifies how subsequent arguments are converted for
+ *		output.  It is similar to sprintf except that SIZE specifies
+ *		the maximum number of characters to produce.  The trailing
+ *		null character is counted towards this limit, so you should
+ *		allocated at least SIZE characters for the string BUF.
+ *
+ * Note:	This function is for compatibility on systems that don't have
+ *		snprintf(3). It doesn't actually check for overflow like the
+ *		real snprintf() would.
+ *
+ * Return:	Success:	Number of characters stored, not including
+ *				the terminating null.  If this value equals
+ *				SIZE then there was not enough space in BUF
+ *				for all the output.
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, November 24, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+int
+HDsnprintf(char *buf, size_t UNUSED size, const char *fmt, ...)
+{
+    int		n;
+    va_list	ap;
+
+    va_start(ap, fmt);
+    n = HDvsprintf(buf, fmt, ap);
+    va_end(ap);
+    return n;
+}
+#endif /* H5_HAVE_SNPRINTF */
+
+
+#ifndef H5_HAVE_VSNPRINTF
+/*-------------------------------------------------------------------------
+ * Function:	HDvsnprintf
+ *
+ * Purpose:	The same as HDsnprintf() except the variable arguments are
+ *		passed as a va_list.
+ *
+ * Note:	This function is for compatibility on systems that don't have
+ *		vsnprintf(3). It doesn't actually check for overflow like the
+ *		real vsnprintf() would.
+ *
+ * Return:	Success:	Number of characters stored, not including
+ *				the terminating null. If this value equals
+ *				SIZE then there was not enough space in BUF
+ *				for all the output.
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April 26, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+int
+HDvsnprintf(char *buf, size_t UNUSED size, const char *fmt, va_list ap)
+{
+    return HDvsprintf(buf, fmt, ap);
+}
+#endif /* H5_HAVE_VSNPRINTF */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	HDfprintf
+ *
+ * Purpose:	Prints the optional arguments under the control of the format
+ *		string FMT to the stream STREAM.  This function takes the
+ *		same format as fprintf(3c) with a few added features:
+ *
+ *		The conversion modifier `H' refers to the size of an
+ *		`hsize_t' or `hssize_t' type.  For instance, "0x%018Hx"
+ *		prints an `hsize_t' value as a hex number right justified and
+ *		zero filled in an 18-character field.
+ *
+ *		The conversion `a' refers to an `haddr_t' type.
+ *
+ * Return:	Success:	Number of characters printed
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April  9, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-27
+ *		The `%a' format refers to an argument of `haddr_t' type
+ *		instead of `haddr_t*' and the return value is correct.
+ *-------------------------------------------------------------------------
+ */
+int
+HDfprintf(FILE *stream, const char *fmt, ...)
+{
+    int		n=0, nout = 0;
+    int		fwidth, prec;
+    int		zerofill;
+    int		leftjust;
+    int		plussign;
+    int		ldspace;
+    int		prefix;
+    char	modifier[8];
+    int		conv;
+    char	*rest, format_templ[128];
+    const char	*s;
+    va_list	ap;
+
+    assert (stream);
+    assert (fmt);
+
+    va_start (ap, fmt);
+    while (*fmt) {
+	fwidth = prec = 0;
+	zerofill = 0;
+	leftjust = 0;
+	plussign = 0;
+	prefix = 0;
+	ldspace = 0;
+	modifier[0] = '\0';
+
+	if ('%'==fmt[0] && '%'==fmt[1]) {
+	    HDputc ('%', stream);
+	    fmt += 2;
+	    nout++;
+	} else if ('%'==fmt[0]) {
+	    s = fmt + 1;
+
+	    /* Flags */
+	    while (HDstrchr ("-+ #", *s)) {
+		switch (*s) {
+		case '-':
+		    leftjust = 1;
+		    break;
+		case '+':
+		    plussign = 1;
+		    break;
+		case ' ':
+		    ldspace = 1;
+		    break;
+		case '#':
+		    prefix = 1;
+		    break;
+		} /*lint !e744 Switch statement doesn't _need_ default */
+		s++;
+	    }
+
+	    /* Field width */
+	    if (HDisdigit (*s)) {
+		zerofill = ('0'==*s);
+		fwidth = (int)HDstrtol (s, &rest, 10);
+		s = rest;
+	    } else if ('*'==*s) {
+		fwidth = va_arg (ap, int);
+		if (fwidth<0) {
+		    leftjust = 1;
+		    fwidth = -fwidth;
+		}
+		s++;
+	    }
+
+	    /* Precision */
+	    if ('.'==*s) {
+		s++;
+		if (HDisdigit (*s)) {
+		    prec = (int)HDstrtol (s, &rest, 10);
+		    s = rest;
+		} else if ('*'==*s) {
+		    prec = va_arg (ap, int);
+		    s++;
+		}
+		if (prec<1) prec = 1;
+	    }
+
+	    /* Extra type modifiers */
+	    if (HDstrchr ("ZHhlqLI", *s)) {
+		switch (*s) {
+                /*lint --e{506} Don't issue warnings about constant value booleans */
+                /*lint --e{774} Don't issue warnings boolean within 'if' always evaluates false/true */
+		case 'H':
+		    if (sizeof(hsize_t)<sizeof(long)) {
+			modifier[0] = '\0';
+		    } else if (sizeof(hsize_t)==sizeof(long)) {
+			HDstrcpy (modifier, "l");
+		    } else {
+			HDstrcpy (modifier, H5_PRINTF_LL_WIDTH);
+		    }
+		    break;
+		case 'Z':
+		    if (sizeof(size_t)<sizeof(long)) {
+			modifier[0] = '\0';
+		    } else if (sizeof(size_t)==sizeof(long)) {
+			HDstrcpy (modifier, "l");
+		    } else {
+			HDstrcpy (modifier, H5_PRINTF_LL_WIDTH);
+		    }
+		    break;
+		default:
+                    /* Handle 'I64' modifier for Microsoft's "__int64" type */
+                    if(*s=='I' && *(s+1)=='6' && *(s+2)=='4') {
+                        modifier[0] = *s;
+                        modifier[1] = *(s+1);
+                        modifier[2] = *(s+2);
+                        modifier[3] = '\0';
+                        s+=2; /* Increment over 'I6', the '4' is taken care of below */
+                    } /* end if */
+                    else {
+                        /* Handle 'll' for long long types */
+                        if(*s=='l' && *(s+1)=='l') {
+                            modifier[0] = *s;
+                            modifier[1] = *s;
+                            modifier[2] = '\0';
+                            s++; /* Increment over first 'l', second is taken care of below */
+                        } /* end if */
+                        else {
+                            modifier[0] = *s;
+                            modifier[1] = '\0';
+                        } /* end else */
+                    } /* end else */
+		    break;
+		}
+		s++;
+	    }
+
+	    /* Conversion */
+	    conv = *s++;
+
+	    /* Create the format template */
+	    sprintf (format_templ, "%%%s%s%s%s%s",
+		     leftjust?"-":"", plussign?"+":"",
+		     ldspace?" ":"", prefix?"#":"", zerofill?"0":"");
+	    if (fwidth>0)
+		sprintf (format_templ+HDstrlen(format_templ), "%d", fwidth);
+	    if (prec>0)
+		sprintf (format_templ+HDstrlen(format_templ), ".%d", prec);
+	    if (*modifier)
+		sprintf (format_templ+HDstrlen(format_templ), "%s", modifier);
+	    sprintf (format_templ+HDstrlen(format_templ), "%c", conv);
+
+
+	    /* Conversion */
+	    switch (conv) {
+	    case 'd':
+	    case 'i':
+		if (!HDstrcmp(modifier, "h")) {
+		    short x = (short)va_arg (ap, int);
+		    n = fprintf (stream, format_templ, x);
+		} else if (!*modifier) {
+		    int x = va_arg (ap, int);
+		    n = fprintf (stream, format_templ, x);
+		} else if (!HDstrcmp (modifier, "l")) {
+		    long x = va_arg (ap, long);
+		    n = fprintf (stream, format_templ, x);
+		} else {
+		    int64_t x = va_arg(ap, int64_t);
+		    n = fprintf (stream, format_templ, x);
+		}
+		break;
+
+	    case 'o':
+	    case 'u':
+	    case 'x':
+	    case 'X':
+		if (!HDstrcmp (modifier, "h")) {
+		    unsigned short x = (unsigned short)va_arg (ap, unsigned int);
+		    n = fprintf (stream, format_templ, x);
+		} else if (!*modifier) {
+		    unsigned int x = va_arg (ap, unsigned int); /*lint !e732 Loss of sign not really occuring */
+		    n = fprintf (stream, format_templ, x);
+		} else if (!HDstrcmp (modifier, "l")) {
+		    unsigned long x = va_arg (ap, unsigned long); /*lint !e732 Loss of sign not really occuring */
+		    n = fprintf (stream, format_templ, x);
+		} else {
+		    uint64_t x = va_arg(ap, uint64_t); /*lint !e732 Loss of sign not really occuring */
+		    n = fprintf (stream, format_templ, x);
+		}
+		break;
+
+	    case 'f':
+	    case 'e':
+	    case 'E':
+	    case 'g':
+	    case 'G':
+		if (!HDstrcmp (modifier, "h")) {
+		    float x = (float) va_arg (ap, double);
+		    n = fprintf (stream, format_templ, x);
+		} else if (!*modifier || !HDstrcmp (modifier, "l")) {
+		    double x = va_arg (ap, double);
+		    n = fprintf (stream, format_templ, x);
+		} else {
+		    /*
+		     * Some compilers complain when `long double' and
+		     * `double' are the same thing.
+		     */
+#if H5_SIZEOF_LONG_DOUBLE != H5_SIZEOF_DOUBLE
+		    long double x = va_arg (ap, long double);
+		    n = fprintf (stream, format_templ, x);
+#else
+		    double x = va_arg (ap, double);
+		    n = fprintf (stream, format_templ, x);
+#endif
+		}
+		break;
+
+	    case 'a':
+                {
+		    haddr_t x = va_arg (ap, haddr_t); /*lint !e732 Loss of sign not really occuring */
+		    if (H5F_addr_defined(x)) {
+			sprintf(format_templ, "%%%s%s%s%s%s",
+				leftjust?"-":"", plussign?"+":"",
+				ldspace?" ":"", prefix?"#":"",
+				zerofill?"0":"");
+			if (fwidth>0)
+			    sprintf(format_templ+HDstrlen(format_templ), "%d", fwidth);
+
+                        /*lint --e{506} Don't issue warnings about constant value booleans */
+                        /*lint --e{774} Don't issue warnings boolean within 'if' always evaluates false/true */
+			if (sizeof(x)==H5_SIZEOF_INT) {
+			    HDstrcat(format_templ, "u");
+			} else if (sizeof(x)==H5_SIZEOF_LONG) {
+			    HDstrcat(format_templ, "lu");
+			} else if (sizeof(x)==H5_SIZEOF_LONG_LONG) {
+			    HDstrcat(format_templ, H5_PRINTF_LL_WIDTH);
+			    HDstrcat(format_templ, "u");
+			}
+			n = fprintf(stream, format_templ, x);
+		    } else {
+			HDstrcpy(format_templ, "%");
+			if (leftjust)
+                            HDstrcat(format_templ, "-");
+			if (fwidth)
+			    sprintf(format_templ+HDstrlen(format_templ), "%d", fwidth);
+			HDstrcat(format_templ, "s");
+			fprintf(stream, format_templ, "UNDEF");
+		    }
+		}
+		break;
+
+	    case 'c':
+                {
+		    char x = (char)va_arg (ap, int);
+		    n = fprintf (stream, format_templ, x);
+		}
+		break;
+
+	    case 's':
+	    case 'p':
+                {
+		    char *x = va_arg (ap, char*); /*lint !e64 Type mismatch not really occuring */
+		    n = fprintf (stream, format_templ, x);
+		}
+		break;
+
+	    case 'n':
+                format_templ[HDstrlen(format_templ)-1] = 'u';
+                n = fprintf (stream, format_templ, nout);
+		break;
+
+	    default:
+		HDfputs (format_templ, stream);
+		n = (int)HDstrlen (format_templ);
+		break;
+	    }
+	    nout += n;
+	    fmt = s;
+	} else {
+	    HDputc (*fmt, stream);
+	    fmt++;
+	    nout++;
+	}
+    }
+    va_end (ap);
+    return nout;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	HDstrtoll
+ *
+ * Purpose:	Converts the string S to an int64_t value according to the
+ *		given BASE, which must be between 2 and 36 inclusive, or be
+ *		the special value zero.
+ *
+ *		The string must begin with an arbitrary amount of white space
+ *		(as determined by isspace(3c)) followed by a single optional
+ *              `+' or `-' sign.  If BASE is zero or 16 the string may then
+ *		include a `0x' or `0X' prefix, and the number will be read in
+ *		base 16; otherwise a zero BASE is taken as 10 (decimal)
+ *		unless the next character is a `0', in which case it is taken
+ *		as 8 (octal).
+ *
+ *		The remainder of the string is converted to an int64_t in the
+ *		obvious manner, stopping at the first character which is not
+ *		a valid digit in the given base.  (In bases above 10, the
+ *		letter `A' in either upper or lower case represetns 10, `B'
+ *		represents 11, and so forth, with `Z' representing 35.)
+ *
+ *		If REST is not null, the address of the first invalid
+ *		character in S is stored in *REST.  If there were no digits
+ *		at all, the original value of S is stored in *REST.  Thus, if
+ *		*S is not `\0' but **REST is `\0' on return the entire string
+ *		was valid.
+ *
+ * Return:	Success:	The result.
+ *
+ *		Failure:	If the input string does not contain any
+ *				digits then zero is returned and REST points
+ *				to the original value of S.  If an overflow
+ *				or underflow occurs then the maximum or
+ *				minimum possible value is returned and the
+ *				global `errno' is set to ERANGE.  If BASE is
+ *				incorrect then zero is returned.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April  9, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int64_t
+HDstrtoll(const char *s, const char **rest, int base)
+{
+    int64_t	sign=1, acc=0;
+    hbool_t	overflow = FALSE;
+
+    errno = 0;
+    if (!s || (base && (base<2 || base>36))) {
+	if (rest) *rest = s;
+	return 0;
+    }
+
+    /* Skip white space */
+    while (HDisspace (*s)) s++;
+
+    /* Optional minus or plus sign */
+    if ('+'==*s) {
+	s++;
+    } else if ('-'==*s) {
+	sign = -1;
+	s++;
+    }
+
+    /* Zero base prefix */
+    if (0==base && '0'==*s && ('x'==s[1] || 'X'==s[1])) {
+	base = 16;
+	s += 2;
+    } else if (0==base && '0'==*s) {
+	base = 8;
+	s++;
+    } else if (0==base) {
+	base = 10;
+    }
+
+    /* Digits */
+    while ((base<=10 && *s>='0' && *s<'0'+base) ||
+	   (base>10 && ((*s>='0' && *s<='9') ||
+			(*s>='a' && *s<'a'+base-10) ||
+			(*s>='A' && *s<'A'+base-10)))) {
+	if (!overflow) {
+	    int64_t digit = 0;
+	    if (*s>='0' && *s<='9') digit = *s - '0';
+	    else if (*s>='a' && *s<='z') digit = (*s-'a')+10;
+	    else digit = (*s-'A')+10;
+
+	    if (acc*base+digit < acc) {
+		overflow = TRUE;
+	    } else {
+		acc = acc*base + digit;
+	    }
+	}
+	s++;
+    }
+
+    /* Overflow */
+    if (overflow) {
+	if (sign>0) {
+	    acc = ((uint64_t)1<<(8*sizeof(int64_t)-1))-1;
+	} else {
+	    acc = (uint64_t)1<<(8*sizeof(int64_t)-1);
+	}
+	errno = ERANGE;
+    }
+
+    /* Return values */
+    acc *= sign;
+    if (rest) *rest = s;
+    return acc;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5_timer_reset
+ *
+ * Purpose:	Resets the timer struct to zero.  Use this to reset a timer
+ *		that's being used as an accumulator for summing times.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+H5_timer_reset (H5_timer_t *timer)
+{
+    assert (timer);
+    HDmemset (timer, 0, sizeof *timer);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5_timer_begin
+ *
+ * Purpose:	Initialize a timer to time something.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+H5_timer_begin (H5_timer_t *timer)
+{
+#ifdef H5_HAVE_GETRUSAGE
+    struct rusage	rusage;
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    struct timeval	etime;
+#endif
+
+    assert (timer);
+
+#ifdef H5_HAVE_GETRUSAGE
+    HDgetrusage (RUSAGE_SELF, &rusage);
+    timer->utime = (double)rusage.ru_utime.tv_sec +
+                   ((double)rusage.ru_utime.tv_usec/1e6);
+    timer->stime = (double)rusage.ru_stime.tv_sec +
+                   ((double)rusage.ru_stime.tv_usec/1e6);
+#else
+    timer->utime = 0.0;
+    timer->stime = 0.0;
+#endif
+#ifdef H5_HAVE_GETTIMEOFDAY
+    HDgettimeofday (&etime, NULL);
+    timer->etime = (double)etime.tv_sec + ((double)etime.tv_usec/1e6);
+#else
+    timer->etime = 0.0;
+#endif
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5_timer_end
+ *
+ * Purpose:	This function should be called at the end of a timed region.
+ *		The SUM is an optional pointer which will accumulate times.
+ *		TMS is the same struct that was passed to H5_timer_start().
+ *		On return, TMS will contain total times for the timed region.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+H5_timer_end (H5_timer_t *sum/*in,out*/, H5_timer_t *timer/*in,out*/)
+{
+    H5_timer_t		now;
+
+    assert (timer);
+    H5_timer_begin (&now);
+
+    timer->utime = MAX(0.0, now.utime - timer->utime);
+    timer->stime = MAX(0.0, now.stime - timer->stime);
+    timer->etime = MAX(0.0, now.etime - timer->etime);
+
+    if (sum) {
+	sum->utime += timer->utime;
+	sum->stime += timer->stime;
+	sum->etime += timer->etime;
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5_bandwidth
+ *
+ * Purpose:	Prints the bandwidth (bytes per second) in a field 10
+ *		characters wide widh four digits of precision like this:
+ *
+ * 			       NaN	If <=0 seconds
+ *			1234. TB/s
+ * 			123.4 TB/s
+ *			12.34 GB/s
+ *			1.234 MB/s
+ *			4.000 kB/s
+ *			1.000  B/s
+ *			0.000  B/s	If NBYTES==0
+ *			1.2345e-10	For bandwidth less than 1
+ *			6.7893e+94	For exceptionally large values
+ *			6.678e+106	For really big values
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+H5_bandwidth(char *buf/*out*/, double nbytes, double nseconds)
+{
+    double	bw;
+
+    if (nseconds<=0.0) {
+	HDstrcpy(buf, "       NaN");
+    } else {
+	bw = nbytes/nseconds;
+        if (fabs(bw) < 0.0000000001) {
+            /* That is == 0.0, but direct comparison between floats is bad */
+	    HDstrcpy(buf, "0.000  B/s");
+	} else if (bw<1.0) {
+	    sprintf(buf, "%10.4e", bw);
+	} else if (bw<1024.0) {
+	    sprintf(buf, "%05.4f", bw);
+	    HDstrcpy(buf+5, "  B/s");
+	} else if (bw<1024.0*1024.0) {
+	    sprintf(buf, "%05.4f", bw/1024.0);
+	    HDstrcpy(buf+5, " kB/s");
+	} else if (bw<1024.0*1024.0*1024.0) {
+	    sprintf(buf, "%05.4f", bw/(1024.0*1024.0));
+	    HDstrcpy(buf+5, " MB/s");
+	} else if (bw<1024.0*1024.0*1024.0*1024.0) {
+	    sprintf(buf, "%05.4f",
+		    bw/(1024.0*1024.0*1024.0));
+	    HDstrcpy(buf+5, " GB/s");
+	} else if (bw<1024.0*1024.0*1024.0*1024.0*1024.0) {
+	    sprintf(buf, "%05.4f",
+		    bw/(1024.0*1024.0*1024.0*1024.0));
+	    HDstrcpy(buf+5, " TB/s");
+	} else {
+	    sprintf(buf, "%10.4e", bw);
+	    if (HDstrlen(buf)>10) {
+		sprintf(buf, "%10.3e", bw);
+	    }
+	}
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5_trace
+ *
+ * Purpose:	This function is called whenever an API function is called
+ *		and tracing is turned on.  If RETURNING is non-zero then
+ *		the caller is about to return and RETURNING points to the
+ *              time for the corresponding function call event.  Otherwise
+ *              we print the function name and the arguments.
+ *
+ *		The TYPE argument is a string which gives the type of each of
+ *		the following argument pairs.  Each type is zero or more
+ *		asterisks (one for each level of indirection, although some
+ *		types have one level of indirection already implied) followed
+ *		by either one letter (lower case) or two letters (first one
+ *		uppercase).
+ *
+ *		The variable argument list consists of pairs of values. Each
+ *		pair is a string which is the formal argument name in the
+ *		calling function, followed by the argument value.  The type
+ *		of the argument value is given by the TYPE string.
+ *
+ * Note:	The TYPE string is meant to be terse and is generated by a
+ *		separate perl script.
+ *
+ * WARNING:	DO NOT CALL ANY HDF5 FUNCTION THAT CALLS FUNC_ENTER(). DOING
+ *		SO MAY CAUSE H5_trace() TO BE INVOKED RECURSIVELY OR MAY
+ *		CAUSE LIBRARY INITIALIZATIONS THAT ARE NOT DESIRED.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, June 16, 1998
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-08-02
+ *		Added the `a' type letter for haddr_t arguments and `Mt' for
+ *		H5FD_mem_t arguments.
+ *
+ * 		Robb Matzke, 1999-10-25
+ *		The `Ej' and `En' types are H5E_major_t and H5E_minor_t error
+ *		types. We only print the integer value here.
+ *
+ *              Robb Matzke, 2002-08-08
+ *              Better output for nested calls.  Show only top-level calls
+ *              if so desired. Show event times if so desired.
+ *-------------------------------------------------------------------------
+ */
+double
+H5_trace (const double *returning, const char *func, const char *type, ...)
+{
+    va_list		ap;
+    char		buf[64], *rest;
+    const char		*argname;
+    int		argno=0, ptr, asize_idx;
+    hssize_t		asize[16];
+    hssize_t		i;
+    void		*vp = NULL;
+    FILE		*out = H5_debug_g.trace;
+    H5_timer_t          event_time;
+    static H5_timer_t   first_time = {0.0, 0.0, 0.0};
+    static int          current_depth=0;
+    static int          last_call_depth=0;
+
+    /* FUNC_ENTER() should not be called */
+
+    if (!out) return 0.0;	/*tracing is off*/
+    va_start (ap, type);
+
+    if (H5_debug_g.ttop) {
+        if (returning) {
+            if (current_depth>1) {
+                --current_depth;
+                return 0.0;
+            }
+        } else {
+            if (current_depth>0) {
+                /*do not update last_call_depth*/
+                current_depth++;
+                return 0.0;
+            }
+        }
+    }
+
+    /* Get tim for event */
+    if (fabs(first_time.etime) < 0.0000000001)
+        /* That is == 0.0, but direct comparison between floats is bad */
+        H5_timer_begin(&first_time);
+    if (H5_debug_g.ttimes) {
+        H5_timer_begin(&event_time);
+    } else {
+        HDmemset(&event_time, 0, sizeof event_time);
+    }
+
+    /* Print the first part of the line.  This is the indication of the
+     * nesting depth followed by the function name and either start of
+     * argument list or start of return value.  If this call is for a
+     * function return and no other calls have been made to H5_trace()
+     * since the one for the function call, then we're continuing
+     * the same line. */
+    if (returning) {
+        assert(current_depth>0);
+        --current_depth;
+        if (current_depth<last_call_depth) {
+            /* We are at the beginning of a line */
+            if (H5_debug_g.ttimes) {
+                char tmp[128];
+                sprintf(tmp, "%.6f", event_time.etime-first_time.etime);
+                fprintf(out, " %*s ", (int)strlen(tmp), "");
+            }
+            for (i=0; i<current_depth; i++)
+                fputc('+', out);
+            fprintf(out, "%*s%s = ", 2*current_depth, "", func);
+        } else {
+            /* Continue current line with return value */
+            fprintf(out, " = ");
+        }
+    } else {
+        if (current_depth>last_call_depth)
+            fputs(" = <delayed>\n", out);
+        if (H5_debug_g.ttimes)
+            fprintf(out, "@%.6f ", event_time.etime-first_time.etime);
+        for (i=0; i<current_depth; i++)
+            fputc('+', out);
+        fprintf(out, "%*s%s(", 2*current_depth, "", func);
+    }
+
+    /* Clear array sizes */
+    for (i=0; i<(hssize_t)NELMTS(asize); i++) asize[i] = -1;
+
+    /* Parse the argument types */
+    for (argno=0; *type; argno++, type+=HDisupper(*type)?2:1) {
+	/* Count levels of indirection */
+	for (ptr=0; '*'==*type; type++) ptr++;
+	if ('['==*type) {
+	    if ('a'==type[1]) {
+		asize_idx = (int)HDstrtol(type+2, &rest, 10);
+		assert(']'==*rest);
+		type = rest+1;
+	    } else {
+		rest = (char *)HDstrchr(type, ']');
+		assert(rest);
+		type = rest+1;
+		asize_idx = -1;
+	    }
+	} else {
+	    asize_idx = -1;
+	}
+
+	/*
+	 * The argument name.  Leave off the `_id' part.  If the argument
+	 * name is the null pointer then don't print the argument or the
+	 * following `='.  This is used for return values.
+	 */
+	argname = va_arg (ap, char*); /*lint !e64 Type mismatch not really occuring */
+	if (argname) {
+	    unsigned n = (unsigned)MAX (0, (int)HDstrlen(argname)-3); /*lint !e666 Allow expression with side effects */
+	    if (!HDstrcmp (argname+n, "_id")) {
+		HDstrncpy (buf, argname, (size_t)MIN ((int)sizeof(buf)-1, n));
+		buf[MIN((int)sizeof(buf)-1, n)] = '\0';
+		argname = buf;
+	    }
+	    fprintf (out, "%s%s=", argno?", ":"", argname);
+	} else {
+	    argname = "";
+	}
+
+	/* The value */
+	if (ptr) vp = va_arg (ap, void*); /*lint !e64 Type mismatch not really occuring */
+	switch (type[0]) {
+	case 'a':
+	    if (ptr) {
+		if (vp) {
+		    fprintf(out, "0x%lx", (unsigned long)vp);
+		} else {
+		    fprintf(out, "NULL");
+		}
+	    } else {
+		haddr_t addr = va_arg(ap, haddr_t); /*lint !e732 Loss of sign not really occuring */
+		HDfprintf(out, "%a", addr);
+	    }
+	    break;
+
+	case 'b':
+	    if (ptr) {
+		if (vp) {
+		    fprintf (out, "0x%lx", (unsigned long)vp);
+		} else {
+		    fprintf(out, "NULL");
+		}
+	    } else {
+		hbool_t bool_var = va_arg (ap, hbool_t); /*lint !e732 Loss of sign not really occuring */
+		if (TRUE==bool_var) fprintf (out, "TRUE");
+		else if (!bool_var) fprintf (out, "FALSE");
+		else fprintf (out, "TRUE(%u)", (unsigned)bool_var);
+	    }
+	    break;
+
+	case 'd':
+	    if (ptr) {
+		if (vp) {
+		    fprintf (out, "0x%lx", (unsigned long)vp);
+		} else {
+		    fprintf(out, "NULL");
+		}
+	    } else {
+		double dbl = va_arg (ap, double);
+		fprintf (out, "%g", dbl);
+	    }
+	    break;
+
+	case 'D':
+	    switch (type[1]) {
+            case 'a':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5D_alloc_time_t alloc_time = va_arg (ap, H5D_alloc_time_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (alloc_time) {
+		    case H5D_ALLOC_TIME_ERROR:
+			fprintf (out, "H5D_ALLOC_TIME_ERROR");
+			break;
+		    case H5D_ALLOC_TIME_DEFAULT:
+			fprintf (out, "H5D_ALLOC_TIME_DEFAULT");
+			break;
+		    case H5D_ALLOC_TIME_EARLY:
+			fprintf (out, "H5D_ALLOC_TIME_EARLY");
+			break;
+		    case H5D_ALLOC_TIME_LATE:
+			fprintf (out, "H5D_ALLOC_TIME_LATE");
+			break;
+		    case H5D_ALLOC_TIME_INCR:
+			fprintf (out, "H5D_ALLOC_TIME_INCR");
+			break;
+		    }
+		}
+		break;
+
+            case 'f':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5D_fill_time_t fill_time = va_arg (ap, H5D_fill_time_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (fill_time) {
+		    case H5D_FILL_TIME_ERROR:
+			fprintf (out, "H5D_FILL_TIME_ERROR");
+			break;
+		    case H5D_FILL_TIME_ALLOC:
+			fprintf (out, "H5D_FILL_TIME_ALLOC");
+			break;
+		    case H5D_FILL_TIME_NEVER:
+			fprintf (out, "H5D_FILL_TIME_NEVER");
+			break;
+		    case H5D_FILL_TIME_IFSET:
+			fprintf (out, "H5D_FILL_TIME_IFSET");
+			break;
+		    }
+		}
+		break;
+
+            case 'F':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5D_fill_value_t fill_value = va_arg (ap, H5D_fill_value_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (fill_value) {
+		    case H5D_FILL_VALUE_ERROR:
+			fprintf (out, "H5D_FILL_VALUE_ERROR");
+			break;
+		    case H5D_FILL_VALUE_UNDEFINED:
+			fprintf (out, "H5D_FILL_VALUE_UNDEFINED");
+			break;
+		    case H5D_FILL_VALUE_DEFAULT:
+			fprintf (out, "H5D_FILL_VALUE_DEFAULT");
+			break;
+		    case H5D_FILL_VALUE_USER_DEFINED:
+			fprintf (out, "H5D_FILL_VALUE_USER_DEFINED");
+			break;
+		    }
+		}
+		break;
+
+	    case 'l':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5D_layout_t layout = va_arg (ap, H5D_layout_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (layout) {
+		    case H5D_LAYOUT_ERROR:
+			fprintf (out, "H5D_LAYOUT_ERROR");
+			break;
+		    case H5D_COMPACT:
+			fprintf (out, "H5D_COMPACT");
+			break;
+		    case H5D_CONTIGUOUS:
+			fprintf (out, "H5D_CONTIGUOUS");
+			break;
+		    case H5D_CHUNKED:
+			fprintf (out, "H5D_CHUNKED");
+			break;
+		    case H5D_NLAYOUTS:
+			fprintf (out, "H5D_NLAYOUTS");
+			break;
+		    default:
+			fprintf (out, "%ld", (long)layout);
+			break;
+		    }
+		}
+		break;
+
+	    case 's':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5D_space_status_t space_status = va_arg(ap, H5D_space_status_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (space_status) {
+		    case H5D_SPACE_STATUS_NOT_ALLOCATED:
+			fprintf (out, "H5D_SPACE_STATUS_NOT_ALLOCATED");
+			break;
+		    case H5D_SPACE_STATUS_PART_ALLOCATED:
+			fprintf (out, "H5D_SPACE_STATUS_PART_ALLOCATED");
+			break;
+		    case H5D_SPACE_STATUS_ALLOCATED:
+			fprintf (out, "H5D_SPACE_STATUS_ALLOCATED");
+			break;
+		    case H5D_SPACE_STATUS_ERROR:
+			fprintf (out, "H5D_SPACE_STATUS_ERROR");
+			break;
+		    default:
+			fprintf (out, "%ld", (long)space_status);
+			break;
+		    }
+		}
+		break;
+
+	    case 't':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5FD_mpio_xfer_t transfer = va_arg(ap, H5FD_mpio_xfer_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (transfer) {
+		    case H5FD_MPIO_INDEPENDENT:
+			fprintf (out, "H5FD_MPIO_INDEPENDENT");
+			break;
+		    case H5FD_MPIO_COLLECTIVE:
+			fprintf (out, "H5FD_MPIO_COLLECTIVE");
+			break;
+		    default:
+			fprintf (out, "%ld", (long)transfer);
+			break;
+		    }
+		}
+		break;
+
+	    default:
+		fprintf (out, "BADTYPE(D%c)", type[1]);
+		goto error;
+	    }
+	    break;
+
+	case 'e':
+	    if (ptr) {
+		if (vp) {
+		    fprintf (out, "0x%lx", (unsigned long)vp);
+		} else {
+		    fprintf(out, "NULL");
+		}
+	    } else {
+		herr_t status = va_arg (ap, herr_t);
+		if (status>=0) fprintf (out, "SUCCEED");
+		else fprintf (out, "FAIL");
+	    }
+	    break;
+
+	case 'E':
+	    switch (type[1]) {
+	    case 'd':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5E_direction_t direction = va_arg (ap, H5E_direction_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (direction) {
+		    case H5E_WALK_UPWARD:
+			fprintf (out, "H5E_WALK_UPWARD");
+			break;
+		    case H5E_WALK_DOWNWARD:
+			fprintf (out, "H5E_WALK_DOWNWARD");
+			break;
+		    default:
+			fprintf (out, "%ld", (long)direction);
+			break;
+		    }
+		}
+		break;
+
+	    case 'e':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5E_error_t *error = va_arg (ap, H5E_error_t*); /*lint !e64 Type mismatch not really occuring */
+		    fprintf (out, "0x%lx", (unsigned long)error);
+		}
+		break;
+
+	    case 'j':
+		if (ptr) {
+		    if (vp) {
+			fprintf(out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5E_major_t emaj = va_arg(ap, H5E_major_t);
+		    fprintf(out, "%d", (int)emaj);
+		}
+		break;
+
+	    case 'n':
+		if (ptr) {
+		    if (vp) {
+			fprintf(out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5E_minor_t emin = va_arg(ap, H5E_minor_t);
+		    fprintf(out, "%d", (int)emin);
+		}
+		break;
+
+	    default:
+		fprintf (out, "BADTYPE(E%c)", type[1]);
+		goto error;
+	    }
+	    break;
+
+	case 'F':
+	    switch (type[1]) {
+	    case 'd':
+		if (ptr) {
+		    if (vp) {
+			fprintf(out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5F_close_degree_t degree = va_arg(ap, H5F_close_degree_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (degree) {
+		    case H5F_CLOSE_DEFAULT:
+			fprintf(out, "H5F_CLOSE_DEFAULT");
+			break;
+		    case H5F_CLOSE_WEAK:
+			fprintf(out, "H5F_CLOSE_WEAK");
+			break;
+		    case H5F_CLOSE_SEMI:
+			fprintf(out, "H5F_CLOSE_SEMI");
+			break;
+		    case H5F_CLOSE_STRONG:
+			fprintf(out, "H5F_CLOSE_STRONG");
+			break;
+		    }
+		}
+		break;
+
+	    case 's':
+		if (ptr) {
+		    if (vp) {
+			fprintf(out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5F_scope_t scope = va_arg(ap, H5F_scope_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (scope) {
+		    case H5F_SCOPE_LOCAL:
+			fprintf(out, "H5F_SCOPE_LOCAL");
+			break;
+		    case H5F_SCOPE_GLOBAL:
+			fprintf(out, "H5F_SCOPE_GLOBAL");
+			break;
+		    case H5F_SCOPE_DOWN:
+			fprintf(out, "H5F_SCOPE_DOWN "
+				"/*FOR INTERNAL USE ONLY!*/");
+			break;
+		    }
+		}
+		break;
+
+	    default:
+		fprintf(out, "BADTYPE(F%c)", type[1]);
+		goto error;
+	    }
+	    break;
+
+	case 'G':
+	    switch (type[1]) {
+	    case 'l':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5G_link_t link_type = va_arg (ap, H5G_link_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (link_type) {
+		    case H5G_LINK_ERROR:
+			fprintf (out, "H5G_LINK_ERROR");
+			break;
+		    case H5G_LINK_HARD:
+			fprintf (out, "H5G_LINK_HARD");
+			break;
+		    case H5G_LINK_SOFT:
+			fprintf (out, "H5G_LINK_SOFT");
+			break;
+		    default:
+			fprintf (out, "%ld", (long)link_type);
+			break;
+		    }
+		}
+		break;
+
+	    case 's':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5G_stat_t *statbuf = va_arg (ap, H5G_stat_t*); /*lint !e64 Type mismatch not really occuring */
+		    fprintf (out, "0x%lx", (unsigned long)statbuf);
+		}
+		break;
+
+	    default:
+		fprintf (out, "BADTYPE(G%c)", type[1]);
+		goto error;
+	    }
+	    break;
+
+	case 'h':
+	    if (ptr) {
+		if (vp) {
+		    fprintf (out, "0x%lx", (unsigned long)vp);
+		    if (asize_idx>=0 && asize[asize_idx]>=0) {
+			hsize_t *p = (hsize_t*)vp;
+			fprintf(out, " {");
+			for (i=0; i<asize[asize_idx]; i++) {
+			    if (H5S_UNLIMITED==p[i]) {
+				HDfprintf(out, "%sH5S_UNLIMITED", i?", ":"");
+			    } else {
+				HDfprintf(out, "%s%Hu", i?", ":"", p[i]);
+			    }
+			}
+			fprintf(out, "}");
+		    }
+		} else {
+		    fprintf(out, "NULL");
+		}
+	    } else {
+		hsize_t hsize = va_arg (ap, hsize_t); /*lint !e732 Loss of sign not really occuring */
+		if (H5S_UNLIMITED==hsize) {
+		    HDfprintf(out, "H5S_UNLIMITED");
+		} else {
+		    HDfprintf (out, "%Hu", hsize);
+		    asize[argno] = (hssize_t)hsize;
+		}
+	    }
+	    break;
+
+	case 'H':
+	    switch (type[1]) {
+	    case 's':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+			if (asize_idx>=0 && asize[asize_idx]>=0) {
+			    hssize_t *p = (hssize_t*)vp;
+			    fprintf(out, " {");
+			    for (i=0; i<asize[asize_idx]; i++) {
+				HDfprintf(out, "%s%Hd", i?", ":"", p[i]);
+			    }
+			    fprintf(out, "}");
+			}
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    hssize_t hssize = va_arg (ap, hssize_t);
+		    HDfprintf (out, "%Hd", hssize);
+		    asize[argno] = (hssize_t)hssize;
+		}
+		break;
+
+	    default:
+		fprintf (out, "BADTYPE(H%c)", type[1]);
+		goto error;
+	    }
+	    break;
+
+	case 'i':
+	    if (ptr) {
+		if (vp) {
+		    fprintf (out, "0x%lx", (unsigned long)vp);
+		} else {
+		    fprintf(out, "NULL");
+		}
+	    } else {
+		hid_t obj = va_arg (ap, hid_t);
+		if (H5P_DEFAULT == obj) {
+		    fprintf (out, "H5P_DEFAULT");
+		} else if (obj<0) {
+		    fprintf (out, "FAIL");
+		} else {
+		    switch (H5I_GROUP(obj)) { /* Use internal H5I macro instead of function call */
+                        case H5I_BADID:
+                            fprintf (out, "%ld (error)", (long)obj);
+                            break;
+                        case H5I_FILE:
+                            fprintf(out, "%ld (file)", (long)obj);
+                            break;
+                        case H5I_GROUP:
+                            fprintf(out, "%ld (group)", (long)obj);
+                            break;
+                        case H5I_DATATYPE:
+                            if (obj==H5T_NATIVE_SCHAR_g) {
+                                fprintf(out, "H5T_NATIVE_SCHAR");
+                            } else if (obj==H5T_NATIVE_UCHAR_g) {
+                                fprintf(out, "H5T_NATIVE_UCHAR");
+                            } else if (obj==H5T_NATIVE_SHORT_g) {
+                                fprintf(out, "H5T_NATIVE_SHORT");
+                            } else if (obj==H5T_NATIVE_USHORT_g) {
+                                fprintf(out, "H5T_NATIVE_USHORT");
+                            } else if (obj==H5T_NATIVE_INT_g) {
+                                fprintf(out, "H5T_NATIVE_INT");
+                            } else if (obj==H5T_NATIVE_UINT_g) {
+                                fprintf(out, "H5T_NATIVE_UINT");
+                            } else if (obj==H5T_NATIVE_LONG_g) {
+                                fprintf(out, "H5T_NATIVE_LONG");
+                            } else if (obj==H5T_NATIVE_ULONG_g) {
+                                fprintf(out, "H5T_NATIVE_ULONG");
+                            } else if (obj==H5T_NATIVE_LLONG_g) {
+                                fprintf(out, "H5T_NATIVE_LLONG");
+                            } else if (obj==H5T_NATIVE_ULLONG_g) {
+                                fprintf(out, "H5T_NATIVE_ULLONG");
+                            } else if (obj==H5T_NATIVE_FLOAT_g) {
+                                fprintf(out, "H5T_NATIVE_FLOAT");
+                            } else if (obj==H5T_NATIVE_DOUBLE_g) {
+                                fprintf(out, "H5T_NATIVE_DOUBLE");
+                            } else if (obj==H5T_NATIVE_LDOUBLE_g) {
+                                fprintf(out, "H5T_NATIVE_LDOUBLE");
+                            } else if (obj==H5T_IEEE_F32BE_g) {
+                                fprintf(out, "H5T_IEEE_F32BE");
+                            } else if (obj==H5T_IEEE_F32LE_g) {
+                                fprintf(out, "H5T_IEEE_F32LE");
+                            } else if (obj==H5T_IEEE_F64BE_g) {
+                                fprintf(out, "H5T_IEEE_F64BE");
+                            } else if (obj==H5T_IEEE_F64LE_g) {
+                                fprintf(out, "H5T_IEEE_F64LE");
+                            } else if (obj==H5T_STD_I8BE_g) {
+                                fprintf(out, "H5T_STD_I8BE");
+                            } else if (obj==H5T_STD_I8LE_g) {
+                                fprintf(out, "H5T_STD_I8LE");
+                            } else if (obj==H5T_STD_I16BE_g) {
+                                fprintf(out, "H5T_STD_I16BE");
+                            } else if (obj==H5T_STD_I16LE_g) {
+                                fprintf(out, "H5T_STD_I16LE");
+                            } else if (obj==H5T_STD_I32BE_g) {
+                                fprintf(out, "H5T_STD_I32BE");
+                            } else if (obj==H5T_STD_I32LE_g) {
+                                fprintf(out, "H5T_STD_I32LE");
+                            } else if (obj==H5T_STD_I64BE_g) {
+                                fprintf(out, "H5T_STD_I64BE");
+                            } else if (obj==H5T_STD_I64LE_g) {
+                                fprintf(out, "H5T_STD_I64LE");
+                            } else if (obj==H5T_STD_U8BE_g) {
+                                fprintf(out, "H5T_STD_U8BE");
+                            } else if (obj==H5T_STD_U8LE_g) {
+                                fprintf(out, "H5T_STD_U8LE");
+                            } else if (obj==H5T_STD_U16BE_g) {
+                                fprintf(out, "H5T_STD_U16BE");
+                            } else if (obj==H5T_STD_U16LE_g) {
+                                fprintf(out, "H5T_STD_U16LE");
+                            } else if (obj==H5T_STD_U32BE_g) {
+                                fprintf(out, "H5T_STD_U32BE");
+                            } else if (obj==H5T_STD_U32LE_g) {
+                                fprintf(out, "H5T_STD_U32LE");
+                            } else if (obj==H5T_STD_U64BE_g) {
+                                fprintf(out, "H5T_STD_U64BE");
+                            } else if (obj==H5T_STD_U64LE_g) {
+                                fprintf(out, "H5T_STD_U64LE");
+                            } else if (obj==H5T_STD_B8BE_g) {
+                                fprintf(out, "H5T_STD_B8BE");
+                            } else if (obj==H5T_STD_B8LE_g) {
+                                fprintf(out, "H5T_STD_B8LE");
+                            } else if (obj==H5T_STD_B16BE_g) {
+                                fprintf(out, "H5T_STD_B16BE");
+                            } else if (obj==H5T_STD_B16LE_g) {
+                                fprintf(out, "H5T_STD_B16LE");
+                            } else if (obj==H5T_STD_B32BE_g) {
+                                fprintf(out, "H5T_STD_B32BE");
+                            } else if (obj==H5T_STD_B32LE_g) {
+                                fprintf(out, "H5T_STD_B32LE");
+                            } else if (obj==H5T_STD_B64BE_g) {
+                                fprintf(out, "H5T_STD_B64BE");
+                            } else if (obj==H5T_STD_B64LE_g) {
+                                fprintf(out, "H5T_STD_B64LE");
+                            } else if (obj==H5T_C_S1_g) {
+                                fprintf(out, "H5T_C_S1");
+                            } else if (obj==H5T_FORTRAN_S1_g) {
+                                fprintf(out, "H5T_FORTRAN_S1");
+                            } else {
+                                fprintf(out, "%ld (dtype)", (long)obj);
+                            }
+                            break;
+                        case H5I_DATASPACE:
+                            fprintf(out, "%ld (dspace)", (long)obj);
+                            /* Save the rank of simple data spaces for arrays */
+                            /* This may generate recursive call to the library... -QAK */
+                            {
+                                H5S_t *space = H5I_object(obj);
+                                if (H5S_SIMPLE==H5S_GET_EXTENT_TYPE(space)) {
+                                    asize[argno] = H5S_GET_EXTENT_NDIMS(space);
+                                }
+                            }
+                            break;
+                        case H5I_DATASET:
+                            fprintf(out, "%ld (dset)", (long)obj);
+                            break;
+                        case H5I_ATTR:
+                            fprintf(out, "%ld (attr)", (long)obj);
+                            break;
+                        case H5I_REFERENCE:
+                            fprintf(out, "%ld (reference)", (long)obj);
+                            break;
+                        case H5I_VFL:
+                            fprintf(out, "%ld (file driver)", (long)obj);
+                            break;
+                        case H5I_GENPROP_CLS:
+                            fprintf(out, "%ld (genprop class)", (long)obj);
+                            break;
+                        case H5I_GENPROP_LST:
+                            fprintf(out, "%ld (genprop list)", (long)obj);
+                            break;
+                        case H5I_NGROUPS:
+                            fprintf (out, "%ld (ngroups - error)", (long)obj);
+                            break;
+                        default:
+                            fprintf(out, "%ld (unknown class)", (long)obj);
+                            break;
+		    }
+		}
+	    }
+	    break;
+
+	case 'I':
+	    switch (type[1]) {
+	    case 's':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+			if (asize_idx>=0 && asize[asize_idx]>=0) {
+			    int *p = (int*)vp;
+			    fprintf(out, " {");
+			    for (i=0; i<asize[asize_idx]; i++) {
+				fprintf(out, "%s%d", i?", ":"", p[i]);
+			    }
+			    fprintf(out, "}");
+			}
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    int is = va_arg (ap, int);
+		    fprintf (out, "%d", is);
+		    asize[argno] = is;
+		}
+		break;
+
+	    case 'u':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+			if (asize_idx>=0 && asize[asize_idx]>=0) {
+			    unsigned *p = (unsigned*)vp;
+			    fprintf(out, " {");
+			    for (i=0; i<asize[asize_idx]; i++) {
+				HDfprintf(out, "%s%u", i?", ":"", p[i]);
+			    }
+			    fprintf(out, "}");
+			}
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    unsigned iu = va_arg (ap, unsigned); /*lint !e732 Loss of sign not really occuring */
+		    fprintf (out, "%u", iu);
+		    asize[argno] = iu;
+		}
+		break;
+
+	    case 't':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5I_type_t id_type = va_arg (ap, H5I_type_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (id_type) {
+                        case H5I_BADID:
+                            fprintf (out, "H5I_BADID");
+                            break;
+                        case H5I_FILE:
+                            fprintf (out, "H5I_FILE");
+                            break;
+                        case H5I_GROUP:
+                            fprintf (out, "H5I_GROUP");
+                            break;
+                        case H5I_DATATYPE:
+                            fprintf (out, "H5I_DATATYPE");
+                            break;
+                        case H5I_DATASPACE:
+                            fprintf (out, "H5I_DATASPACE");
+                            break;
+                        case H5I_DATASET:
+                            fprintf (out, "H5I_DATASET");
+                            break;
+                        case H5I_ATTR:
+                            fprintf (out, "H5I_ATTR");
+                            break;
+                        case H5I_REFERENCE:
+                            fprintf (out, "H5I_REFERENCE");
+                            break;
+                        case H5I_VFL:
+                            fprintf (out, "H5I_VFL");
+                            break;
+                        case H5I_GENPROP_CLS:
+                            fprintf (out, "H5I_GENPROP_CLS");
+                            break;
+                        case H5I_GENPROP_LST:
+                            fprintf (out, "H5I_GENPROP_LST");
+                            break;
+                        case H5I_NGROUPS:
+                            fprintf (out, "H5I_NGROUPS");
+                            break;
+                        default:
+                            fprintf (out, "%ld", (long)id_type);
+                            break;
+		    }
+		}
+		break;
+
+	    default:
+		fprintf (out, "BADTYPE(I%c)", type[1]);
+		goto error;
+	    }
+	    break;
+
+	case 'M':
+	    switch (type[1]) {
+	    case 'c':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+#ifdef H5_HAVE_PARALLEL
+		    MPI_Comm comm = va_arg (ap, MPI_Comm);
+		    fprintf (out, "%ld", (long)comm);
+#endif
+		}
+		break;
+	    case 'i':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+#ifdef H5_HAVE_PARALLEL
+		    MPI_Info info = va_arg (ap, MPI_Info);
+		    fprintf (out, "%ld", (long)info);
+#endif
+		}
+		break;
+	    case 't':
+		if (ptr) {
+		    if (vp) {
+			fprintf(out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5FD_mem_t mt = va_arg(ap, H5FD_mem_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (mt) {
+		    case H5FD_MEM_NOLIST:
+			fprintf(out, "H5FD_MEM_NOLIST");
+			break;
+		    case H5FD_MEM_DEFAULT:
+			fprintf(out, "H5FD_MEM_DEFAULT");
+			break;
+		    case H5FD_MEM_SUPER:
+			fprintf(out, "H5FD_MEM_SUPER");
+			break;
+		    case H5FD_MEM_BTREE:
+			fprintf(out, "H5FD_MEM_BTREE");
+			break;
+		    case H5FD_MEM_DRAW:
+			fprintf(out, "H5FD_MEM_DRAW");
+			break;
+		    case H5FD_MEM_GHEAP:
+			fprintf(out, "H5FD_MEM_GHEAP");
+			break;
+		    case H5FD_MEM_LHEAP:
+			fprintf(out, "H5FD_MEM_LHEAP");
+			break;
+		    case H5FD_MEM_OHDR:
+			fprintf(out, "H5FD_MEM_OHDR");
+			break;
+		    case H5FD_MEM_NTYPES:
+			fprintf(out, "H5FD_MEM_NTYPES");
+			break;
+		    default:
+			fprintf(out, "%ld", (long)mt);
+			break;
+		    }
+		}
+		break;
+
+	    default:
+		goto error;
+	    }
+	    break;
+
+	case 'o':
+	    if (ptr) {
+		if (vp) {
+		    fprintf (out, "0x%lx", (unsigned long)vp);
+		} else {
+		    fprintf(out, "NULL");
+		}
+	    } else {
+		off_t offset = va_arg (ap, off_t);
+		fprintf (out, "%ld", (long)offset);
+	    }
+	    break;
+
+	case 'p':
+	    if (ptr) {
+		if (vp) {
+		    fprintf (out, "0x%lx", (unsigned long)vp);
+		} else {
+		    fprintf(out, "NULL");
+		}
+	    } else {
+		hid_t pclass_id = va_arg (ap, hid_t);
+                char *class_name=NULL;
+                H5P_genclass_t *pclass;
+
+                /* Get the class name and print it */
+                /* This may generate recursive call to the library... -QAK */
+                if(NULL != (pclass = H5I_object(pclass_id)) &&
+                        (class_name=H5P_get_class_name(pclass))!=NULL) {
+		    fprintf (out, class_name);
+                    H5MM_xfree(class_name);
+                } /* end if */
+                else {
+		    fprintf (out, "%ld", (long)pclass_id);
+                } /* end else */
+	    }
+	    break;
+
+	case 'r':
+	    if (ptr) {
+                if (vp) {
+                    fprintf (out, "0x%lx", (unsigned long)vp);
+                } else {
+                    fprintf(out, "NULL");
+                }
+	    } else {
+                hobj_ref_t ref = va_arg (ap, hobj_ref_t); /*lint !e732 Loss of sign not really occuring */
+		HDfprintf(out, "Reference Object=%a", ref);
+	    }
+	    break;
+
+	case 'R':
+	    switch (type[1]) {
+                case 't':
+                    if (ptr) {
+                        if (vp) {
+                            fprintf(out, "0x%lx", (unsigned long)vp);
+                        } else {
+                            fprintf(out, "NULL");
+                        }
+                    } else {
+                        H5R_type_t reftype = va_arg(ap, H5R_type_t); /*lint !e64 Type mismatch not really occuring */
+                        switch (reftype) {
+                            case H5R_BADTYPE:
+                                fprintf(out, "H5R_BADTYPE");
+                                break;
+                            case H5R_OBJECT:
+                                fprintf(out, "H5R_OBJECT");
+                                break;
+                            case H5R_DATASET_REGION:
+                                fprintf(out, "H5R_DATASET_REGION");
+                                break;
+                            case H5R_INTERNAL:
+                                fprintf(out, "H5R_INTERNAL");
+                                break;
+                            case H5R_MAXTYPE:
+                                fprintf(out, "H5R_MAXTYPE");
+                                break;
+                            default:
+                                fprintf(out, "BADTYPE(%ld)", (long)reftype);
+                                break;
+                        }
+                    }
+                    break;
+
+                default:
+                    fprintf(out, "BADTYPE(S%c)", type[1]);
+                    goto error;
+	    }
+	    break;
+
+	case 'S':
+	    switch (type[1]) {
+	    case 'c':
+		if (ptr) {
+		    if (vp) {
+			fprintf(out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5S_class_t cls = va_arg(ap, H5S_class_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (cls) {
+                        case H5S_NO_CLASS:
+                            fprintf(out, "H5S_NO_CLASS");
+                            break;
+                        case H5S_SCALAR:
+                            fprintf(out, "H5S_SCALAR");
+                            break;
+                        case H5S_SIMPLE:
+                            fprintf(out, "H5S_SIMPLE");
+                            break;
+                        case H5S_COMPLEX:
+                            fprintf(out, "H5S_COMPLEX");
+                            break;
+                        default:
+                            fprintf(out, "%ld", (long)cls);
+                            break;
+		    }
+		}
+		break;
+
+	    case 's':
+		if (ptr) {
+		    if (vp) {
+			fprintf(out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5S_seloper_t so = va_arg(ap, H5S_seloper_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (so) {
+                        case H5S_SELECT_NOOP:
+                            fprintf(out, "H5S_NOOP");
+                            break;
+                        case H5S_SELECT_SET:
+                            fprintf(out, "H5S_SELECT_SET");
+                            break;
+                        case H5S_SELECT_OR:
+                            fprintf(out, "H5S_SELECT_OR");
+                            break;
+                        case H5S_SELECT_AND:
+                            fprintf(out, "H5S_SELECT_AND");
+                            break;
+                        case H5S_SELECT_XOR:
+                            fprintf(out, "H5S_SELECT_XOR");
+                            break;
+                        case H5S_SELECT_NOTB:
+                            fprintf(out, "H5S_SELECT_NOTB");
+                            break;
+                        case H5S_SELECT_NOTA:
+                            fprintf(out, "H5S_SELECT_NOTA");
+                            break;
+                        case H5S_SELECT_APPEND:
+                            fprintf(out, "H5S_SELECT_APPEND");
+                            break;
+                        case H5S_SELECT_PREPEND:
+                            fprintf(out, "H5S_SELECT_PREPEND");
+                            break;
+                        case H5S_SELECT_INVALID:
+                            fprintf(out, "H5S_SELECT_INVALID");
+                            break;
+                        default:
+                            fprintf(out, "%ld", (long)so);
+                            break;
+		    }
+		}
+		break;
+
+            case 't':
+                if (ptr) {
+                    if (vp) {
+                        fprintf(out, "0x%lx", (unsigned long)vp);
+                    } else {
+                        fprintf(out, "NULL");
+                    }
+                } else {
+                    H5S_sel_type st = va_arg(ap, H5S_sel_type); /*lint !e64 Type mismatch not really occuring */
+                    switch (st) {
+                    case H5S_SEL_ERROR:
+                        fprintf(out, "H5S_SEL_ERROR");
+                        break;
+                    case H5S_SEL_NONE:
+                        fprintf(out, "H5S_SEL_NONE");
+                        break;
+                    case H5S_SEL_POINTS:
+                        fprintf(out, "H5S_SEL_POINTS");
+                        break;
+                    case H5S_SEL_HYPERSLABS:
+                        fprintf(out, "H5S_SEL_HYPERSLABS");
+                        break;
+                    case H5S_SEL_ALL:
+                        fprintf(out, "H5S_SEL_ALL");
+                        break;
+                    case H5S_SEL_N:
+                        fprintf(out, "H5S_SEL_N");
+                        break;
+                    default:
+                        fprintf(out, "%ld", (long)st);
+                        break;
+                    }
+                }
+                break;
+
+	    default:
+		fprintf(out, "BADTYPE(S%c)", type[1]);
+		goto error;
+	    }
+	    break;
+
+	case 's':
+	    if (ptr) {
+		if (vp) {
+		    fprintf (out, "0x%lx", (unsigned long)vp);
+		} else {
+		    fprintf(out, "NULL");
+		}
+	    } else {
+		const char *str = va_arg (ap, const char*); /*lint !e64 Type mismatch not really occuring */
+		fprintf (out, "\"%s\"", str);
+	    }
+	    break;
+
+	case 'T':
+	    switch (type[1]) {
+	    case 'c':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5T_cset_t cset = va_arg (ap, H5T_cset_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (cset) {
+                        case H5T_CSET_ERROR:
+                            fprintf (out, "H5T_CSET_ERROR");
+                            break;
+                        case H5T_CSET_ASCII:
+                            fprintf (out, "H5T_CSET_ASCII");
+                            break;
+                        case H5T_CSET_RESERVED_1:
+                        case H5T_CSET_RESERVED_2:
+                        case H5T_CSET_RESERVED_3:
+                        case H5T_CSET_RESERVED_4:
+                        case H5T_CSET_RESERVED_5:
+                        case H5T_CSET_RESERVED_6:
+                        case H5T_CSET_RESERVED_7:
+                        case H5T_CSET_RESERVED_8:
+                        case H5T_CSET_RESERVED_9:
+                        case H5T_CSET_RESERVED_10:
+                        case H5T_CSET_RESERVED_11:
+                        case H5T_CSET_RESERVED_12:
+                        case H5T_CSET_RESERVED_13:
+                        case H5T_CSET_RESERVED_14:
+                        case H5T_CSET_RESERVED_15:
+                            fprintf (out, "H5T_CSET_RESERVED(%ld)",(long)cset);
+                            break;
+                        default:
+                            fprintf (out, "%ld", (long)cset);
+                            break;
+		    }
+		}
+		break;
+
+	    case 'd':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5T_direction_t direct = va_arg (ap, H5T_direction_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (direct) {
+                        case H5T_DIR_DEFAULT:
+                            fprintf (out, "H5T_DIR_DEFAULT");
+                            break;
+                        case H5T_DIR_ASCEND:
+                            fprintf (out, "H5T_DIR_ASCEND");
+                            break;
+                        case H5T_DIR_DESCEND:
+                            fprintf (out, "H5T_DIR_DESCEND");
+                            break;
+                        default:
+                            fprintf (out, "%ld", (long)direct);
+                            break;
+		    }
+		}
+		break;
+
+	    case 'e':
+		if (ptr) {
+		    if (vp) {
+			fprintf(out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5T_pers_t pers = va_arg(ap, H5T_pers_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (pers) {
+                        case H5T_PERS_DONTCARE:
+                            fprintf(out, "H5T_PERS_DONTCARE");
+                            break;
+                        case H5T_PERS_SOFT:
+                            fprintf(out, "H5T_PERS_SOFT");
+                            break;
+                        case H5T_PERS_HARD:
+                            fprintf(out, "H5T_PERS_HARD");
+                            break;
+                        default:
+                            fprintf(out, "%ld", (long)pers);
+                            break;
+		    }
+		}
+		break;
+
+	    case 'n':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5T_norm_t norm = va_arg (ap, H5T_norm_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (norm) {
+                        case H5T_NORM_ERROR:
+                            fprintf (out, "H5T_NORM_ERROR");
+                            break;
+                        case H5T_NORM_IMPLIED:
+                            fprintf (out, "H5T_NORM_IMPLIED");
+                            break;
+                        case H5T_NORM_MSBSET:
+                            fprintf (out, "H5T_NORM_MSBSET");
+                            break;
+                        case H5T_NORM_NONE:
+                            fprintf (out, "H5T_NORM_NONE");
+                            break;
+                        default:
+                            fprintf (out, "%ld", (long)norm);
+                            break;
+		    }
+		}
+		break;
+
+	    case 'o':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5T_order_t order = va_arg (ap, H5T_order_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (order) {
+                        case H5T_ORDER_ERROR:
+                            fprintf (out, "H5T_ORDER_ERROR");
+                            break;
+                        case H5T_ORDER_LE:
+                            fprintf (out, "H5T_ORDER_LE");
+                            break;
+                        case H5T_ORDER_BE:
+                            fprintf (out, "H5T_ORDER_BE");
+                            break;
+                        case H5T_ORDER_VAX:
+                            fprintf (out, "H5T_ORDER_VAX");
+                            break;
+                        case H5T_ORDER_NONE:
+                            fprintf (out, "H5T_ORDER_NONE");
+                            break;
+                        default:
+                            fprintf (out, "%ld", (long)order);
+                            break;
+		    }
+		}
+		break;
+
+	    case 'p':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5T_pad_t pad = va_arg (ap, H5T_pad_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (pad) {
+                        case H5T_PAD_ERROR:
+                            fprintf (out, "H5T_PAD_ERROR");
+                            break;
+                        case H5T_PAD_ZERO:
+                            fprintf (out, "H5T_PAD_ZERO");
+                            break;
+                        case H5T_PAD_ONE:
+                            fprintf (out, "H5T_PAD_ONE");
+                            break;
+                        case H5T_PAD_BACKGROUND:
+                            fprintf (out, "H5T_PAD_BACKGROUND");
+                            break;
+                        case H5T_NPAD:
+                            fprintf (out, "H5T_NPAD");
+                            break;
+                        default:
+                            fprintf (out, "%ld", (long)pad);
+                            break;
+		    }
+		}
+		break;
+
+	    case 's':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5T_sign_t sign = va_arg (ap, H5T_sign_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (sign) {
+                        case H5T_SGN_ERROR:
+                            fprintf (out, "H5T_SGN_ERROR");
+                            break;
+                        case H5T_SGN_NONE:
+                            fprintf (out, "H5T_SGN_NONE");
+                            break;
+                        case H5T_SGN_2:
+                            fprintf (out, "H5T_SGN_2");
+                            break;
+                        case H5T_NSGN:
+                            fprintf (out, "H5T_NSGN");
+                            break;
+                        default:
+                            fprintf (out, "%ld", (long)sign);
+                            break;
+		    }
+		}
+		break;
+
+	    case 't':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5T_class_t type_class = va_arg(ap, H5T_class_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (type_class) {
+                        case H5T_NO_CLASS:
+                            fprintf(out, "H5T_NO_CLASS");
+                            break;
+                        case H5T_INTEGER:
+                            fprintf(out, "H5T_INTEGER");
+                            break;
+                        case H5T_FLOAT:
+                            fprintf(out, "H5T_FLOAT");
+                            break;
+                        case H5T_TIME:
+                            fprintf(out, "H5T_TIME");
+                            break;
+                        case H5T_STRING:
+                            fprintf(out, "H5T_STRING");
+                            break;
+                        case H5T_BITFIELD:
+                            fprintf(out, "H5T_BITFIELD");
+                            break;
+                        case H5T_OPAQUE:
+                            fprintf(out, "H5T_OPAQUE");
+                            break;
+                        case H5T_COMPOUND:
+                            fprintf(out, "H5T_COMPOUND");
+                            break;
+                        case H5T_REFERENCE:
+                            fprintf(out, "H5T_REFERENCE");
+                            break;
+                        case H5T_ENUM:
+                            fprintf(out, "H5T_ENUM");
+                            break;
+                        case H5T_VLEN:
+                            fprintf(out, "H5T_VLEN");
+                            break;
+                        case H5T_ARRAY:
+                            fprintf(out, "H5T_ARRAY");
+                            break;
+                        case H5T_NCLASSES:
+                            fprintf(out, "H5T_NCLASSES");
+                            break;
+                        default:
+                            fprintf(out, "%ld", (long)type_class);
+                            break;
+		    }
+		}
+		break;
+
+	    case 'z':
+		if (ptr) {
+		    if (vp) {
+			fprintf (out, "0x%lx", (unsigned long)vp);
+		    } else {
+			fprintf(out, "NULL");
+		    }
+		} else {
+		    H5T_str_t str = va_arg(ap, H5T_str_t); /*lint !e64 Type mismatch not really occuring */
+		    switch (str) {
+                        case H5T_STR_ERROR:
+                            fprintf(out, "H5T_STR_ERROR");
+                            break;
+                        case H5T_STR_NULLTERM:
+                            fprintf(out, "H5T_STR_NULLTERM");
+                            break;
+                        case H5T_STR_NULLPAD:
+                            fprintf(out, "H5T_STR_NULLPAD");
+                            break;
+                        case H5T_STR_SPACEPAD:
+                            fprintf(out, "H5T_STR_SPACEPAD");
+                            break;
+                        case H5T_STR_RESERVED_3:
+                        case H5T_STR_RESERVED_4:
+                        case H5T_STR_RESERVED_5:
+                        case H5T_STR_RESERVED_6:
+                        case H5T_STR_RESERVED_7:
+                        case H5T_STR_RESERVED_8:
+                        case H5T_STR_RESERVED_9:
+                        case H5T_STR_RESERVED_10:
+                        case H5T_STR_RESERVED_11:
+                        case H5T_STR_RESERVED_12:
+                        case H5T_STR_RESERVED_13:
+                        case H5T_STR_RESERVED_14:
+                        case H5T_STR_RESERVED_15:
+                            fprintf(out, "H5T_STR_RESERVED(%ld)",(long)str);
+                            break;
+                        default:
+                            fprintf(out, "%ld", (long)str);
+                            break;
+		    }
+		}
+		break;
+
+	    default:
+		fprintf (out, "BADTYPE(T%c)", type[1]);
+		goto error;
+	    }
+	    break;
+
+	case 't':
+	    if (ptr) {
+		if (vp) {
+		    fprintf (out, "0x%lx", (unsigned long)vp);
+		} else {
+		    fprintf(out, "NULL");
+		}
+	    } else {
+		htri_t tri_var = va_arg (ap, htri_t);
+		if (tri_var>0) fprintf (out, "TRUE");
+		else if (!tri_var) fprintf (out, "FALSE");
+		else fprintf (out, "FAIL(%d)", (int)tri_var);
+	    }
+	    break;
+
+	case 'x':
+	    if (ptr) {
+		if (vp) {
+		    fprintf (out, "0x%lx", (unsigned long)vp);
+		    if (asize_idx>=0 && asize[asize_idx]>=0) {
+			void **p = (void**)vp;
+			fprintf(out, " {");
+			for (i=0; i<asize[asize_idx]; i++) {
+			    if (p[i]) {
+				fprintf(out, "%s0x%lx", i?", ":"",
+					(unsigned long)(p[i]));
+			    } else {
+				fprintf(out, "%sNULL", i?", ":"");
+			    }
+			}
+			fprintf(out, "}");
+		    }
+		} else {
+		    fprintf(out, "NULL");
+		}
+	    } else {
+		vp = va_arg (ap, void*); /*lint !e64 Type mismatch not really occuring */
+		if (vp) {
+		    fprintf (out, "0x%lx", (unsigned long)vp);
+		} else {
+		    fprintf(out, "NULL");
+		}
+	    }
+	    break;
+
+	case 'z':
+	    if (ptr) {
+		if (vp) {
+		    fprintf (out, "0x%lx", (unsigned long)vp);
+		    if (asize_idx>=0 && asize[asize_idx]>=0) {
+			size_t *p = (size_t*)vp;
+			fprintf(out, " {");
+			for (i=0; i<asize[asize_idx]; i++) {
+			    HDfprintf(out, "%s%Zu", i?", ":"", p[i]);
+			}
+			fprintf(out, "}");
+		    }
+		} else {
+		    fprintf(out, "NULL");
+		}
+	    } else {
+		size_t size = va_arg (ap, size_t); /*lint !e732 Loss of sign not really occuring */
+
+		HDfprintf (out, "%Zu", size);
+		asize[argno] = (hssize_t)size;
+	    }
+	    break;
+
+	case 'Z':
+	    switch (type[1]) {
+                case 'c':
+                    if (ptr) {
+                        if (vp) {
+                            fprintf (out, "0x%lx", (unsigned long)vp);
+                        } else {
+                            fprintf(out, "NULL");
+                        }
+                    } else {
+                        H5Z_class_t *filter = va_arg (ap, H5Z_class_t*); /*lint !e64 Type mismatch not really occuring */
+                        fprintf (out, "0x%lx", (unsigned long)filter);
+                    }
+                    break;
+
+                case 'e':
+                    if (ptr) {
+                        if (vp) {
+                            fprintf (out, "0x%lx", (unsigned long)vp);
+                        } else {
+                            fprintf(out, "NULL");
+                        }
+                    } else {
+                        H5Z_EDC_t edc = va_arg (ap, H5Z_EDC_t); /*lint !e64 Type mismatch not really occuring */
+
+                        if (H5Z_DISABLE_EDC==edc) {
+                            fprintf (out, "H5Z_DISABLE_EDC");
+                        } else if (H5Z_ENABLE_EDC==edc) {
+                            fprintf (out, "H5Z_ENABLE_EDC");
+                        } else {
+                            fprintf (out, "%ld", (long)edc);
+                        }
+                    }
+                    break;
+
+                case 'f':
+                    if (ptr) {
+                        if (vp) {
+                            fprintf (out, "0x%lx", (unsigned long)vp);
+                        } else {
+                            fprintf(out, "NULL");
+                        }
+                    } else {
+                        H5Z_filter_t id = va_arg (ap, H5Z_filter_t);
+
+                        if (H5Z_FILTER_DEFLATE==id) {
+                            fprintf (out, "H5Z_FILTER_DEFLATE");
+                        } else {
+                            fprintf (out, "%ld", (long)id);
+                        }
+                    }
+                    break;
+
+                case 's':
+                    if (ptr) {
+                        if (vp) {
+                            fprintf (out, "0x%lx", (unsigned long)vp);
+                            if (asize_idx>=0 && asize[asize_idx]>=0) {
+                                ssize_t *p = (ssize_t*)vp;
+                                fprintf(out, " {");
+                                for (i=0; i<asize[asize_idx]; i++) {
+                                    HDfprintf(out, "%s%Zd", i?", ":"", p[i]);
+                                }
+                                fprintf(out, "}");
+                            }
+                        } else {
+                            fprintf(out, "NULL");
+                        }
+                    } else {
+                        ssize_t ssize = va_arg (ap, ssize_t);
+
+                        HDfprintf (out, "%Zd", ssize);
+                        asize[argno] = (hssize_t)ssize;
+                    }
+                    break;
+
+                default:
+                    fprintf (out, "BADTYPE(Z%c)", type[1]);
+                    goto error;
+	    }
+	    break;
+
+	default:
+	    if (HDisupper (type[0])) {
+		fprintf (out, "BADTYPE(%c%c)", type[0], type[1]);
+	    } else {
+		fprintf (out, "BADTYPE(%c)", type[0]);
+	    }
+	    goto error;
+	}
+    }
+
+
+    /* Display event time for return */
+    if (returning && H5_debug_g.ttimes)
+        fprintf(out, " @%.6f [dt=%.6f]",
+                event_time.etime - first_time.etime,
+                event_time.etime - *returning);
+
+  error:
+    va_end (ap);
+    if (returning) {
+	fprintf (out, ";\n");
+    } else {
+	last_call_depth = current_depth++;
+	fprintf (out, ")");
+    }
+    HDfflush (out);
+    return event_time.etime;
+}

Added: packages/hdf5/branches/upstream/current/src/H5A.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5A.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5A.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1702 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5A_PACKAGE		/*suppress error about including H5Apkg	*/
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5A_init_interface
+
+
+/* Private header files */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Apkg.h"		/* Attributes				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free Lists				*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Sprivate.h"		/* Dataspace functions			*/
+
+/* PRIVATE PROTOTYPES */
+static hid_t H5A_create(const H5G_entry_t *ent, const char *name,
+			const H5T_t *type, const H5S_t *space, hid_t dxpl_id);
+static hid_t H5A_open(H5G_entry_t *ent, unsigned idx, hid_t dxpl_id);
+static herr_t H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id);
+static herr_t H5A_read(const H5A_t *attr, const H5T_t *mem_type, void *buf, hid_t dxpl_id);
+static int H5A_get_index(H5G_entry_t *ent, const char *name, hid_t dxpl_id);
+static hsize_t H5A_get_storage_size(const H5A_t *attr);
+static herr_t H5A_rename(H5G_entry_t *ent, const char *old_name, const char *new_name, hid_t dxpl_id);
+
+/* Object header iterator callbacks */
+/* Data structure for callback for locating the index by name */
+typedef struct H5A_iter_cb1 {
+    const char *name;
+    int idx;
+} H5A_iter_cb1;
+static herr_t H5A_find_idx_by_name(const void *mesg, unsigned idx, void *op_data);
+
+/* The number of reserved IDs in dataset ID group */
+#define H5A_RESERVED_ATOMS  0
+
+/* Declare the free lists for H5A_t's */
+H5FL_DEFINE(H5A_t);
+
+/* Declare a free list to manage blocks of type conversion data */
+H5FL_BLK_DEFINE(attr_buf);
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5A_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5A_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5A_init_interface(void)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5A_init_interface)
+
+    /*
+     * Create attribute group.
+     */
+    if (H5I_init_group(H5I_ATTR, H5I_ATTRID_HASHSIZE, H5A_RESERVED_ATOMS, (H5I_free_t)H5A_close)<0)
+        HGOTO_ERROR(H5E_INTERNAL, H5E_CANTINIT, FAIL, "unable to initialize interface")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5A_term_interface
+ PURPOSE
+    Terminate various H5A objects
+ USAGE
+    void H5A_term_interface()
+ RETURNS
+ DESCRIPTION
+    Release any other resources allocated.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+     Can't report errors...
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+int
+H5A_term_interface(void)
+{
+    int	n=0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5A_term_interface)
+
+    if (H5_interface_initialize_g) {
+	if ((n=H5I_nmembers(H5I_ATTR))>0) {
+	    (void)H5I_clear_group(H5I_ATTR, FALSE);
+	} else {
+	    (void)H5I_destroy_group(H5I_ATTR);
+	    H5_interface_initialize_g = 0;
+	    n = 1;
+	}
+    }
+    FUNC_LEAVE_NOAPI(n)
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Acreate
+ PURPOSE
+    Creates a dataset as an attribute of another dataset or group
+ USAGE
+    hid_t H5Acreate (loc_id, name, type_id, space_id, plist_id)
+        hid_t loc_id;       IN: Object (dataset or group) to be attached to
+        const char *name;   IN: Name of attribute to create
+        hid_t type_id;      IN: ID of datatype for attribute
+        hid_t space_id;     IN: ID of dataspace for attribute
+        hid_t plist_id;     IN: ID of creation property list (currently not used)
+ RETURNS
+    Non-negative on success/Negative on failure
+
+ ERRORS
+
+ DESCRIPTION
+        This function creates an attribute which is attached to the object
+    specified with 'location_id'.  The name specified with 'name' for each
+    attribute for an object must be unique for that object.  The 'type_id'
+    and 'space_id' are created with the H5T and H5S interfaces respectively.
+    Currently only simple dataspaces are allowed for attribute dataspaces.
+    The 'plist_id' property list is currently un-used, but will be
+    used int the future for optional properties of attributes.  The attribute
+    ID returned from this function must be released with H5Aclose or resource
+    leaks will develop.
+        The link created (see H5G API documentation for more information on
+    link types) is a hard link, so the attribute may be shared among datasets
+    and will not be removed from the file until the reference count for the
+    attribute is reduced to zero.
+        The location object may be either a group or a dataset, both of
+    which may have any sort of attribute.
+ *
+ * Modifications:
+ * 	Robb Matzke, 5 Jun 1998
+ *	The LOC_ID can also be a committed datatype.
+ *
+--------------------------------------------------------------------------*/
+/* ARGSUSED */
+hid_t
+H5Acreate(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
+	  hid_t UNUSED plist_id)
+{
+    H5G_entry_t    	*ent = NULL;
+    H5T_t		*type = NULL;
+    H5S_t		*space = NULL;
+    hid_t		ret_value = FAIL;
+
+    FUNC_ENTER_API(H5Acreate, FAIL)
+    H5TRACE5("i","isiii",loc_id,name,type_id,space_id,plist_id);
+
+    /* check arguments */
+    if (H5I_FILE==H5I_get_type(loc_id) || H5I_ATTR==H5I_get_type(loc_id))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute")
+    if (NULL==(ent=H5G_loc(loc_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
+    if (!name || !*name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
+    if (NULL == (type = H5I_object_verify(type_id, H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a type")
+    if (NULL == (space = H5I_object_verify(space_id, H5I_DATASPACE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
+
+    /* Go do the real work for attaching the attribute to the dataset */
+    if ((ret_value=H5A_create(ent,name,type,space, H5AC_dxpl_id))<0)
+	HGOTO_ERROR (H5E_ATTR, H5E_CANTINIT, FAIL, "unable to create attribute")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* H5Acreate() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5A_create
+ *
+ * Purpose:
+ *      This is the guts of the H5Acreate function.
+ * Usage:
+ *  hid_t H5A_create (ent, name, type, space)
+ *      const H5G_entry_t *ent;   IN: Pointer to symbol table entry for object to attribute
+ *      const char *name;   IN: Name of attribute
+ *      H5T_t *type;        IN: Datatype of attribute
+ *      H5S_t *space;       IN: Dataspace of attribute
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		April 2, 1998
+ *
+ * Modifications:
+ *
+ *	 Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *	 Added a deep copy of the symbol table entry
+ *
+ *-------------------------------------------------------------------------
+ */
+static hid_t
+H5A_create(const H5G_entry_t *ent, const char *name, const H5T_t *type,
+	   const H5S_t *space, hid_t dxpl_id)
+{
+    H5A_t	*attr = NULL;
+    H5A_iter_cb1 cb;                    /* Iterator callback */
+    hid_t	ret_value = FAIL;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5A_create)
+
+    /* check args */
+    assert(ent);
+    assert(name);
+    assert(type);
+    assert(space);
+
+    /* Iterate over the existing attributes to check for duplicates */
+    cb.name=name;
+    cb.idx=(-1);
+    if((ret_value=H5O_iterate(ent,H5O_ATTR_ID,H5A_find_idx_by_name,&cb,dxpl_id))<0)
+        HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "error iterating over attributes")
+    if(ret_value>0)
+        HGOTO_ERROR(H5E_ATTR, H5E_ALREADYEXISTS, FAIL, "attribute already exists")
+
+    /* Check if the dataspace has an extent set (or is NULL) */
+    if( !(H5S_has_extent(space)) )
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "dataspace extent has not been set")
+
+    /* Build the attribute information */
+    if((attr = H5FL_CALLOC(H5A_t))==NULL)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for attribute info")
+
+    /* Copy the attribute name */
+    attr->name=HDstrdup(name);
+
+    /* Copy the attribute's datatype */
+    attr->dt=H5T_copy(type, H5T_COPY_ALL);
+
+    /* Mark any VL datatypes as being on disk now */
+    if (H5T_vlen_mark(attr->dt, ent->file, H5T_VLEN_DISK)<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location");
+
+    /* Copy the dataspace for the attribute */
+    attr->ds=H5S_copy(space, FALSE);
+
+    /* Mark it initially set to initialized */
+    attr->initialized = TRUE; /*for now, set to false later*/
+
+    /* Deep copy of the symbol table entry */
+    if (H5G_ent_copy(&(attr->ent),ent,H5G_COPY_DEEP)<0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to copy entry")
+
+    /* Compute the size of pieces on disk */
+    if(H5T_committed(attr->dt)) {
+        H5O_shared_t	sh_mesg;
+
+        /* Reset shared message information */
+        HDmemset(&sh_mesg,0,sizeof(H5O_shared_t));
+
+        /* Get shared message information for datatype */
+        if (H5O_get_share(H5O_DTYPE_ID,attr->ent.file, type, &sh_mesg/*out*/)<0)
+            HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to copy entry")
+
+        /* Compute shared message size for datatype */
+        attr->dt_size=H5O_raw_size(H5O_SHARED_ID,attr->ent.file,&sh_mesg);
+    } /* end if */
+    else
+        attr->dt_size=H5O_raw_size(H5O_DTYPE_ID,attr->ent.file,type);
+    assert(attr->dt_size>0);
+    attr->ds_size=H5S_raw_size(attr->ent.file,space);
+    assert(attr->ds_size>0);
+    H5_ASSIGN_OVERFLOW(attr->data_size,H5S_GET_EXTENT_NPOINTS(attr->ds)*H5T_get_size(attr->dt),hssize_t,size_t);
+
+    /* Hold the symbol table entry (and file) open */
+    if (H5O_open(&(attr->ent)) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to open")
+    attr->ent_opened=1;
+
+    /* Create the attribute message and save the attribute index */
+    if (H5O_modify(&(attr->ent), H5O_ATTR_ID, H5O_NEW_MESG, 0, H5O_UPDATE_TIME, attr, dxpl_id) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to update attribute header messages")
+
+    /* Register the new attribute and get an ID for it */
+    if ((ret_value = H5I_register(H5I_ATTR, attr)) < 0)
+        HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register attribute for ID")
+
+    /* Now it's safe to say it's uninitialized */
+    attr->initialized = FALSE;
+
+done:
+    if (ret_value < 0) {
+        if(attr)
+            (void)H5A_close(attr);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_create() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5A_find_idx_by_name
+ PURPOSE
+    Iterator callback to determine the index of a attribute
+ USAGE
+    herr_t H5A_find_idx_by_name (mesg, idx, op_data)
+        const H5A_t *mesg;      IN: Pointer to attribute
+        unsigned idx;           IN: Index of attribute
+        void *op_data;          IN: Op data passed in
+ RETURNS
+    Non-negative on success, negative on failure
+
+ ERRORS
+
+ DESCRIPTION
+        This function determines if an attribute matches the name to search
+    for (from the 'op_data') and sets the index value in the 'op_data'.
+--------------------------------------------------------------------------*/
+static herr_t
+H5A_find_idx_by_name(const void *_mesg, unsigned idx, void *_op_data)
+{
+    const H5A_t *mesg = (const H5A_t *)_mesg;   /* Pointer to attribute */
+    H5A_iter_cb1 *op_data = (H5A_iter_cb1 *)_op_data;   /* Pointer to op data */
+    int		ret_value;         /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5A_find_idx_by_name)
+
+    assert(mesg);
+    assert(op_data);
+
+    /*
+     * Compare found attribute name to queried name and set the idx in the
+     * callback info if names are the same.
+     */
+    if(HDstrcmp(mesg->name,op_data->name)==0) {
+        op_data->idx=idx;
+        ret_value=1;
+    } /* end if */
+    else
+        ret_value=0;
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_find_idx_by_name() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5A_get_index
+ PURPOSE
+    Determine the index of an attribute in an object header
+ USAGE
+    int H5A_get_index (ent, name)
+        H5G_entry_t    *ent; IN: Symbol table entry of object
+        const char *name;    IN: Name of dataset to find
+ RETURNS
+    non-negative on success, negative on failure
+
+ ERRORS
+
+ DESCRIPTION
+        This function determines the index of the attribute within an object
+    header.  This is not stored in the attribute structure because it is only
+    a subjective measure and can change if attributes are deleted from the
+    object header.
+--------------------------------------------------------------------------*/
+static int
+H5A_get_index(H5G_entry_t *ent, const char *name, hid_t dxpl_id)
+{
+    H5A_iter_cb1 cb;                    /* Iterator callback */
+    int		ret_value=FAIL;         /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5A_get_index)
+
+    assert(ent);
+    assert(name);
+
+    cb.name=name;
+    cb.idx=(-1);
+    if((ret_value=H5O_iterate(ent,H5O_ATTR_ID,H5A_find_idx_by_name,&cb,dxpl_id))<0)
+        HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "error iterating over attributes")
+    if(ret_value>0)
+        ret_value=cb.idx;
+    else
+        HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "attribute not found")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_get_index() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Aopen_name
+ PURPOSE
+    Opens an attribute for an object by looking up the attribute name
+ USAGE
+    hid_t H5Aopen_name (loc_id, name)
+        hid_t loc_id;       IN: Object (dataset or group) to be attached to
+        const char *name;   IN: Name of attribute to locate and open
+ RETURNS
+    ID of attribute on success, negative on failure
+
+ ERRORS
+
+ DESCRIPTION
+        This function opens an existing attribute for access.  The attribute
+    name specified is used to look up the corresponding attribute for the
+    object.  The attribute ID returned from this function must be released with
+    H5Aclose or resource leaks will develop.
+        The location object may be either a group or a dataset, both of
+    which may have any sort of attribute.
+ *
+ * Modifications:
+ * 	Robb Matzke, 5 Jun 1998
+ *	The LOC_ID can also be a named (committed) datatype.
+--------------------------------------------------------------------------*/
+hid_t
+H5Aopen_name(hid_t loc_id, const char *name)
+{
+    H5G_entry_t    	*ent = NULL;   /*Symtab entry of object to attribute*/
+    int            	idx=0;
+    hid_t		ret_value;
+
+    FUNC_ENTER_API(H5Aopen_name, FAIL)
+    H5TRACE2("i","is",loc_id,name);
+
+    /* check arguments */
+    if (H5I_FILE==H5I_get_type(loc_id) || H5I_ATTR==H5I_get_type(loc_id))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute")
+    if (NULL==(ent=H5G_loc(loc_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
+    if (!name || !*name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
+
+    /* Look up the attribute for the object */
+    if((idx=H5A_get_index(ent,name, H5AC_dxpl_id))<0)
+        HGOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "attribute not found")
+
+    /* Go do the real work for opening the attribute */
+    if ((ret_value=H5A_open(ent, (unsigned)idx, H5AC_dxpl_id))<0)
+	HGOTO_ERROR (H5E_ATTR, H5E_CANTINIT, FAIL, "unable to open attribute")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* H5Aopen_name() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Aopen_idx
+ PURPOSE
+    Opens the n'th attribute for an object
+ USAGE
+    hid_t H5Aopen_idx (loc_id, idx)
+        hid_t loc_id;       IN: Object (dataset or group) to be attached to
+        unsigned idx;       IN: Index (0-based) attribute to open
+ RETURNS
+    ID of attribute on success, negative on failure
+
+ ERRORS
+
+ DESCRIPTION
+        This function opens an existing attribute for access.  The attribute
+    index specified is used to look up the corresponding attribute for the
+    object.  The attribute ID returned from this function must be released with
+    H5Aclose or resource leaks will develop.
+        The location object may be either a group or a dataset, both of
+    which may have any sort of attribute.
+ *
+ * Modifications:
+ * 	Robb Matzke, 5 Jun 1998
+ *	The LOC_ID can also be a named (committed) datatype.
+ *
+--------------------------------------------------------------------------*/
+hid_t
+H5Aopen_idx(hid_t loc_id, unsigned idx)
+{
+    H5G_entry_t	*ent = NULL;	/*Symtab entry of object to attribute */
+    hid_t	ret_value;
+
+    FUNC_ENTER_API(H5Aopen_idx, FAIL)
+    H5TRACE2("i","iIu",loc_id,idx);
+
+    /* check arguments */
+    if (H5I_FILE==H5I_get_type(loc_id) || H5I_ATTR==H5I_get_type(loc_id))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute")
+    if (NULL==(ent=H5G_loc(loc_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
+
+    /* Go do the real work for opening the attribute */
+    if ((ret_value=H5A_open(ent, idx, H5AC_dxpl_id))<0)
+	HGOTO_ERROR (H5E_ATTR, H5E_CANTINIT, FAIL, "unable to open attribute")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* H5Aopen_idx() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5A_open
+ *
+ * Purpose:
+ *      This is the guts of the H5Aopen_xxx functions
+ * Usage:
+ *  herr_t H5A_open (ent, idx)
+ *      const H5G_entry_t *ent;   IN: Pointer to symbol table entry for object to attribute
+ *      unsigned idx;       IN: index of attribute to open (0-based)
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		April 2, 1998
+ *
+ * Modifications:
+ *
+ *	 Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *	 Added a deep copy of the symbol table entry
+ *
+ *-------------------------------------------------------------------------
+ */
+static hid_t
+H5A_open(H5G_entry_t *ent, unsigned idx, hid_t dxpl_id)
+{
+    H5A_t       *attr = NULL;
+    hid_t	    ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5A_open)
+
+    /* check args */
+    assert(ent);
+
+    /* Read in attribute with H5O_read() */
+    H5_CHECK_OVERFLOW(idx,unsigned,int);
+    if (NULL==(attr=H5O_read(ent, H5O_ATTR_ID, (int)idx, NULL, dxpl_id)))
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to load attribute info from dataset header")
+    attr->initialized=1;
+
+    /* Deep copy of the symbol table entry */
+    if (H5G_ent_copy(&(attr->ent),ent,H5G_COPY_DEEP)<0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to copy entry")
+
+    /* Hold the symbol table entry (and file) open */
+    if (H5O_open(&(attr->ent)) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "unable to open")
+    attr->ent_opened=1;
+
+    /* Register the new attribute and get an ID for it */
+    if ((ret_value = H5I_register(H5I_ATTR, attr)) < 0)
+        HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register attribute for ID")
+
+done:
+    if (ret_value < 0) {
+        if(attr)
+            (void)H5A_close(attr);
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_open() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Awrite
+ PURPOSE
+    Write out data to an attribute
+ USAGE
+    herr_t H5Awrite (attr_id, type_id, buf)
+        hid_t attr_id;       IN: Attribute to write
+        hid_t type_id;       IN: Memory datatype of buffer
+        const void *buf;     IN: Buffer of data to write
+ RETURNS
+    Non-negative on success/Negative on failure
+
+ ERRORS
+
+ DESCRIPTION
+        This function writes a complete attribute to disk.
+--------------------------------------------------------------------------*/
+herr_t
+H5Awrite(hid_t attr_id, hid_t type_id, const void *buf)
+{
+    H5A_t		   *attr = NULL;
+    const H5T_t    *mem_type = NULL;
+    herr_t		    ret_value;
+
+    FUNC_ENTER_API(H5Awrite, FAIL)
+    H5TRACE3("e","iix",attr_id,type_id,buf);
+
+    /* check arguments */
+    if (NULL == (attr = H5I_object_verify(attr_id, H5I_ATTR)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
+    if (NULL == (mem_type = H5I_object_verify(type_id, H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+    if (NULL == buf)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null attribute buffer")
+
+    /* Go write the actual data to the attribute */
+    if ((ret_value=H5A_write(attr,mem_type,buf, H5AC_dxpl_id))<0)
+        HGOTO_ERROR(H5E_ATTR, H5E_WRITEERROR, FAIL, "unable to write attribute")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* H5Awrite() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5A_write
+ PURPOSE
+    Actually write out data to an attribute
+ USAGE
+    herr_t H5A_write (attr, mem_type, buf)
+        H5A_t *attr;         IN: Attribute to write
+        const H5T_t *mem_type;     IN: Memory datatype of buffer
+        const void *buf;           IN: Buffer of data to write
+ RETURNS
+    Non-negative on success/Negative on failure
+
+ ERRORS
+
+ DESCRIPTION
+    This function writes a complete attribute to disk.
+--------------------------------------------------------------------------*/
+static herr_t
+H5A_write(H5A_t *attr, const H5T_t *mem_type, const void *buf, hid_t dxpl_id)
+{
+    uint8_t		*tconv_buf = NULL;	/* datatype conv buffer */
+    uint8_t		*bkg_buf = NULL;	/* temp conversion buffer */
+    hssize_t		snelmts;		/* elements in attribute */
+    size_t		nelmts;		    	/* elements in attribute */
+    H5T_path_t		*tpath = NULL;		/* conversion information*/
+    hid_t		src_id = -1, dst_id = -1;/* temporary type atoms */
+    size_t		src_type_size;		/* size of source type	*/
+    size_t		dst_type_size;		/* size of destination type*/
+    size_t		buf_size;		/* desired buffer size	*/
+    int			idx;			/* index of attribute in object header */
+    herr_t		ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5A_write)
+
+    assert(attr);
+    assert(mem_type);
+    assert(buf);
+
+    /* Create buffer for data to store on disk */
+    if((snelmts=H5S_GET_EXTENT_NPOINTS(attr->ds))<0)
+        HGOTO_ERROR (H5E_ATTR, H5E_CANTCOUNT, FAIL, "dataspace is invalid")
+    H5_ASSIGN_OVERFLOW(nelmts,snelmts,hssize_t,size_t);
+
+    if(nelmts>0) {
+        /* Get the memory and file datatype sizes */
+        src_type_size = H5T_get_size(mem_type);
+        dst_type_size = H5T_get_size(attr->dt);
+
+        /* Convert memory buffer into disk buffer */
+        /* Set up type conversion function */
+        if (NULL == (tpath = H5T_path_find(mem_type, attr->dt, NULL, NULL, dxpl_id)))
+            HGOTO_ERROR(H5E_ATTR, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dst datatypes")
+
+        /* Check for type conversion required */
+        if (!H5T_path_noop(tpath)) {
+            if ((src_id = H5I_register(H5I_DATATYPE, H5T_copy(mem_type, H5T_COPY_ALL)))<0 ||
+                    (dst_id = H5I_register(H5I_DATATYPE, H5T_copy(attr->dt, H5T_COPY_ALL)))<0)
+                HGOTO_ERROR(H5E_ATTR, H5E_CANTREGISTER, FAIL, "unable to register types for conversion")
+
+            /* Get the maximum buffer size needed and allocate it */
+            buf_size=nelmts*MAX(src_type_size,dst_type_size);
+            if (NULL==(tconv_buf = H5FL_BLK_MALLOC (attr_buf, buf_size)) || NULL==(bkg_buf = H5FL_BLK_CALLOC(attr_buf, buf_size)))
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+            /* Copy the user's data into the buffer for conversion */
+            HDmemcpy(tconv_buf,buf,(src_type_size*nelmts));
+
+            /* Perform datatype conversion */
+            if (H5T_convert(tpath, src_id, dst_id, nelmts, (size_t)0, (size_t)0, tconv_buf, bkg_buf, dxpl_id)<0)
+                HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "datatype conversion failed")
+
+            /* Free the previous attribute data buffer, if there is one */
+            if(attr->data)
+                H5FL_BLK_FREE(attr_buf, attr->data);
+
+            /* Set the pointer to the attribute data to the converted information */
+            attr->data=tconv_buf;
+        } /* end if */
+        /* No type conversion necessary */
+        else {
+            HDassert(dst_type_size==src_type_size);
+
+                /* Allocate the attribute buffer, if there isn't one */
+                if(attr->data==NULL)
+                    if (NULL==(attr->data = H5FL_BLK_MALLOC(attr_buf, dst_type_size*nelmts)))
+                        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+                /* Copy the attribute data into the user's buffer */
+                HDmemcpy(attr->data,buf,(dst_type_size*nelmts));
+        } /* end else */
+
+        /* Look up the attribute for the object */
+        if((idx=H5A_get_index(&(attr->ent),attr->name,dxpl_id))<0)
+            HGOTO_ERROR(H5E_ATTR, H5E_BADVALUE, FAIL, "attribute not found")
+
+        /* Modify the attribute data */
+        if (H5O_modify(&(attr->ent), H5O_ATTR_ID, idx, 0, H5O_UPDATE_DATA_ONLY|H5O_UPDATE_TIME, attr, dxpl_id) < 0)
+            HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to update attribute header messages")
+    } /* end if */
+
+    /* Indicate the the attribute doesn't need fill-values */
+    attr->initialized=TRUE;
+
+done:
+    /* Release resources */
+    if (src_id >= 0)
+        (void)H5I_dec_ref(src_id);
+    if (dst_id >= 0)
+        (void)H5I_dec_ref(dst_id);
+    if (bkg_buf)
+        H5FL_BLK_FREE(attr_buf, bkg_buf);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_write() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Aread
+ PURPOSE
+    Read in data from an attribute
+ USAGE
+    herr_t H5Aread (attr_id, type_id, buf)
+        hid_t attr_id;       IN: Attribute to read
+        hid_t type_id;       IN: Memory datatype of buffer
+        void *buf;           IN: Buffer for data to read
+ RETURNS
+    Non-negative on success/Negative on failure
+
+ ERRORS
+
+ DESCRIPTION
+        This function reads a complete attribute from disk.
+--------------------------------------------------------------------------*/
+herr_t
+H5Aread(hid_t attr_id, hid_t type_id, void *buf)
+{
+    H5A_t		*attr = NULL;
+    const H5T_t    	*mem_type = NULL;
+    herr_t		ret_value;
+
+    FUNC_ENTER_API(H5Aread, FAIL)
+    H5TRACE3("e","iix",attr_id,type_id,buf);
+
+    /* check arguments */
+    if (NULL == (attr = H5I_object_verify(attr_id, H5I_ATTR)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
+    if (NULL == (mem_type = H5I_object_verify(type_id, H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+    if (NULL == buf)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null attribute buffer")
+
+    /* Go write the actual data to the attribute */
+    if ((ret_value=H5A_read(attr,mem_type,buf,H5AC_dxpl_id))<0)
+        HGOTO_ERROR(H5E_ATTR, H5E_READERROR, FAIL, "unable to read attribute")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* H5Aread() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5A_read
+ PURPOSE
+    Actually read in data from an attribute
+ USAGE
+    herr_t H5A_read (attr, mem_type, buf)
+        H5A_t *attr;         IN: Attribute to read
+        const H5T_t *mem_type;     IN: Memory datatype of buffer
+        void *buf;           IN: Buffer for data to read
+ RETURNS
+    Non-negative on success/Negative on failure
+
+ ERRORS
+
+ DESCRIPTION
+    This function reads a complete attribute from disk.
+--------------------------------------------------------------------------*/
+static herr_t
+H5A_read(const H5A_t *attr, const H5T_t *mem_type, void *buf, hid_t dxpl_id)
+{
+    uint8_t		*tconv_buf = NULL;	/* datatype conv buffer*/
+    uint8_t		*bkg_buf = NULL;	/* background buffer */
+    hssize_t		snelmts;		/* elements in attribute */
+    size_t		nelmts;			/* elements in attribute*/
+    H5T_path_t		*tpath = NULL;		/* type conversion info	*/
+    hid_t		src_id = -1, dst_id = -1;/* temporary type atoms*/
+    size_t		src_type_size;		/* size of source type 	*/
+    size_t		dst_type_size;		/* size of destination type */
+    size_t		buf_size;		/* desired buffer size	*/
+    herr_t		ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5A_read)
+
+    assert(attr);
+    assert(mem_type);
+    assert(buf);
+
+    /* Create buffer for data to store on disk */
+    if((snelmts=H5S_GET_EXTENT_NPOINTS(attr->ds))<0)
+        HGOTO_ERROR (H5E_ATTR, H5E_CANTCOUNT, FAIL, "dataspace is invalid")
+    H5_ASSIGN_OVERFLOW(nelmts,snelmts,hssize_t,size_t);
+
+    if(nelmts>0) {
+        /* Get the memory and file datatype sizes */
+        src_type_size = H5T_get_size(attr->dt);
+        dst_type_size = H5T_get_size(mem_type);
+
+        /* Check if the attribute has any data yet, if not, fill with zeroes */
+        if(attr->ent_opened && !attr->initialized) {
+            HDmemset(buf,0,(dst_type_size*nelmts));
+        }   /* end if */
+        else {  /* Attribute exists and has a value */
+            /* Convert memory buffer into disk buffer */
+            /* Set up type conversion function */
+            if (NULL == (tpath = H5T_path_find(attr->dt, mem_type, NULL, NULL, dxpl_id)))
+                HGOTO_ERROR(H5E_ATTR, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dst datatypes")
+
+            /* Check for type conversion required */
+            if (!H5T_path_noop(tpath)) {
+                if ((src_id = H5I_register(H5I_DATATYPE, H5T_copy(attr->dt, H5T_COPY_ALL)))<0 ||
+                        (dst_id = H5I_register(H5I_DATATYPE, H5T_copy(mem_type, H5T_COPY_ALL)))<0)
+                    HGOTO_ERROR(H5E_ATTR, H5E_CANTREGISTER, FAIL, "unable to register types for conversion")
+
+                /* Get the maximum buffer size needed and allocate it */
+                buf_size=nelmts*MAX(src_type_size,dst_type_size);
+                if (NULL==(tconv_buf = H5FL_BLK_MALLOC(attr_buf, buf_size)) || NULL==(bkg_buf = H5FL_BLK_CALLOC(attr_buf, buf_size)))
+                    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+                /* Copy the attribute data into the buffer for conversion */
+                HDmemcpy(tconv_buf,attr->data,(src_type_size*nelmts));
+
+                /* Perform datatype conversion.  */
+                if (H5T_convert(tpath, src_id, dst_id, nelmts, (size_t)0, (size_t)0, tconv_buf, bkg_buf, dxpl_id)<0)
+                    HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "datatype conversion failed")
+
+                /* Copy the converted data into the user's buffer */
+                HDmemcpy(buf,tconv_buf,(dst_type_size*nelmts));
+            } /* end if */
+            /* No type conversion necessary */
+            else {
+                HDassert(dst_type_size==src_type_size);
+
+                /* Copy the attribute data into the user's buffer */
+                HDmemcpy(buf,attr->data,(dst_type_size*nelmts));
+            } /* end else */
+        } /* end else */
+    } /* end if */
+
+done:
+    /* Release resources */
+    if (src_id >= 0)
+        (void)H5I_dec_ref(src_id);
+    if (dst_id >= 0)
+        (void)H5I_dec_ref(dst_id);
+    if (tconv_buf)
+        H5FL_BLK_FREE(attr_buf, tconv_buf);
+    if (bkg_buf)
+	H5FL_BLK_FREE(attr_buf, bkg_buf);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5A_read() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Aget_space
+ PURPOSE
+    Gets a copy of the dataspace for an attribute
+ USAGE
+    hid_t H5Aget_space (attr_id)
+        hid_t attr_id;       IN: Attribute to get dataspace of
+ RETURNS
+    A dataspace ID on success, negative on failure
+
+ ERRORS
+
+ DESCRIPTION
+        This function retrieves a copy of the dataspace for an attribute.
+    The dataspace ID returned from this function must be released with H5Sclose
+    or resource leaks will develop.
+--------------------------------------------------------------------------*/
+hid_t
+H5Aget_space(hid_t attr_id)
+{
+    H5A_t	*attr = NULL;
+    H5S_t	*dst = NULL;
+    hid_t	ret_value;
+
+    FUNC_ENTER_API(H5Aget_space, FAIL)
+    H5TRACE1("i","i",attr_id);
+
+    /* check arguments */
+    if (NULL == (attr = H5I_object_verify(attr_id, H5I_ATTR)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
+
+    /* Copy the attribute's dataspace */
+    if (NULL==(dst=H5S_copy (attr->ds, FALSE)))
+	HGOTO_ERROR (H5E_ATTR, H5E_CANTINIT, FAIL, "unable to copy dataspace")
+
+    /* Atomize */
+    if ((ret_value=H5I_register (H5I_DATASPACE, dst))<0)
+        HGOTO_ERROR (H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register dataspace atom")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* H5Aget_space() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Aget_type
+ PURPOSE
+    Gets a copy of the datatype for an attribute
+ USAGE
+    hid_t H5Aget_type (attr_id)
+        hid_t attr_id;       IN: Attribute to get datatype of
+ RETURNS
+    A datatype ID on success, negative on failure
+
+ ERRORS
+
+ DESCRIPTION
+        This function retrieves a copy of the datatype for an attribute.
+    The datatype ID returned from this function must be released with H5Tclose
+    or resource leaks will develop.
+ *
+ * Modifications:
+ * 	Robb Matzke, 4 Jun 1998
+ *	The datatype is reopened if it's a named type before returning it to
+ *	the application.  The datatypes returned by this function are always
+ *	read-only. If an error occurs when atomizing the return datatype
+ *	then the datatype is closed.
+--------------------------------------------------------------------------*/
+hid_t
+H5Aget_type(hid_t attr_id)
+{
+    H5A_t	*attr = NULL;
+    H5T_t	*dst = NULL;
+    hid_t	 ret_value;
+
+    FUNC_ENTER_API(H5Aget_type, FAIL)
+    H5TRACE1("i","i",attr_id);
+
+    /* check arguments */
+    if (NULL == (attr = H5I_object_verify(attr_id, H5I_ATTR)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
+
+    /*
+     * Copy the attribute's datatype.  If the type is a named type then
+     * reopen the type before returning it to the user. Make the type
+     * read-only.
+     */
+    if (NULL==(dst=H5T_copy(attr->dt, H5T_COPY_REOPEN)))
+	HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to copy datatype")
+
+    /* Mark any VL datatypes as being in memory now */
+    if (H5T_vlen_mark(dst, NULL, H5T_VLEN_MEMORY)<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location")
+    if (H5T_lock(dst, FALSE)<0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to lock transient datatype")
+
+    /* Atomize */
+    if ((ret_value=H5I_register(H5I_DATATYPE, dst))<0)
+        HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register datatype atom")
+
+done:
+    if(ret_value<0) {
+        if(dst!=NULL)
+            (void)H5T_close(dst);
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value)
+} /* H5Aget_type() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Aget_name
+ PURPOSE
+    Gets a copy of the name for an attribute
+ USAGE
+    hssize_t H5Aget_name (attr_id, buf_size, buf)
+        hid_t attr_id;      IN: Attribute to get name of
+        size_t buf_size;    IN: The size of the buffer to store the string in.
+        char *buf;          IN: Buffer to store name in
+ RETURNS
+    This function returns the length of the attribute's name (which may be
+    longer than 'buf_size') on success or negative for failure.
+
+ ERRORS
+
+ DESCRIPTION
+        This function retrieves the name of an attribute for an attribute ID.
+    Up to 'buf_size' characters are stored in 'buf' followed by a '\0' string
+    terminator.  If the name of the attribute is longer than 'buf_size'-1,
+    the string terminator is stored in the last position of the buffer to
+    properly terminate the string.
+--------------------------------------------------------------------------*/
+ssize_t
+H5Aget_name(hid_t attr_id, size_t buf_size, char *buf)
+{
+    H5A_t		*attr = NULL;
+    size_t              copy_len, nbytes;
+    ssize_t		ret_value;
+
+    FUNC_ENTER_API(H5Aget_name, FAIL)
+    H5TRACE3("Zs","izs",attr_id,buf_size,buf);
+
+    /* check arguments */
+    if (NULL == (attr = H5I_object_verify(attr_id, H5I_ATTR)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
+    if (!buf && buf_size)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid buffer")
+
+    /* get the real attribute length */
+    nbytes = HDstrlen(attr->name);
+    assert((ssize_t)nbytes>=0); /*overflow, pretty unlikey --rpm*/
+
+    /* compute the string length which will fit into the user's buffer */
+    copy_len = MIN(buf_size-1, nbytes);
+
+    /* Copy all/some of the name */
+    if(buf && copy_len>0) {
+        HDmemcpy(buf, attr->name, copy_len);
+
+        /* Terminate the string */
+        buf[copy_len]='\0';
+    }
+
+    /* Set return value */
+    ret_value = (ssize_t)nbytes;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* H5Aget_type() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Aget_storage_size
+ *
+ * Purpose:	Returns the amount of storage size that is required for this
+ *		attribute.
+ *
+ * Return:	Success:	The amount of storage size allocated for the
+ *				attribute.  The return value may be zero
+ *                              if no data has been stored.
+ *
+ *		Failure:	Zero
+ *
+ * Programmer:	Raymond Lu
+ *              October 23, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t
+H5Aget_storage_size(hid_t attr_id)
+{
+    H5A_t	*attr=NULL;
+    hsize_t	ret_value;      /* Return value */
+
+    FUNC_ENTER_API(H5Aget_storage_size, 0)
+    H5TRACE1("h","i",attr_id);
+
+    /* Check args */
+    if (NULL==(attr=H5I_object_verify(attr_id, H5I_ATTR)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not an attribute")
+
+    /* Set return value */
+    ret_value = H5A_get_storage_size(attr);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5A_get_storage_size
+ *
+ * Purpose:	Private function for H5Aget_storage_size.  Returns the
+ *              amount of storage size that is required for this
+ *		attribute.
+ *
+ * Return:	Success:	The amount of storage size allocated for the
+ *				attribute.  The return value may be zero
+ *                              if no data has been stored.
+ *
+ *		Failure:	Zero
+ *
+ * Programmer:	Raymond Lu
+ *              October 23, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hsize_t
+H5A_get_storage_size(const H5A_t *attr)
+{
+    hsize_t	ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5A_get_storage_size)
+
+    /* Set return value */
+    ret_value = attr->data_size;
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Aget_num_attrs
+ PURPOSE
+    Determines the number of attributes attached to an object
+ USAGE
+    int H5Aget_num_attrs (loc_id)
+        hid_t loc_id;       IN: Object (dataset or group) to be queried
+ RETURNS
+    Number of attributes on success, negative on failure
+
+ ERRORS
+
+ DESCRIPTION
+        This function returns the number of attributes attached to a dataset or
+    group, 'location_id'.
+ *
+ * Modifications:
+ * 	Robb Matzke, 5 Jun 1998
+ *	The LOC_ID can also be a named (committed) datatype.
+--------------------------------------------------------------------------*/
+int
+H5Aget_num_attrs(hid_t loc_id)
+{
+    H5G_entry_t    	*ent = NULL;	/*symtab ent of object to attribute */
+    void           	*obj = NULL;
+    int			ret_value;
+
+    FUNC_ENTER_API(H5Aget_num_attrs, FAIL)
+    H5TRACE1("Is","i",loc_id);
+
+    /* check arguments */
+    if (H5I_FILE==H5I_get_type(loc_id) || H5I_ATTR==H5I_get_type(loc_id))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute")
+    if(NULL == (obj = H5I_object(loc_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADATOM, FAIL, "illegal object atom")
+    switch (H5I_get_type (loc_id)) {
+        case H5I_DATASET:
+            ent = H5D_entof ((H5D_t*)obj);
+            break;
+        case H5I_DATATYPE:
+            if (NULL==(ent=H5T_entof ((H5T_t*)obj)))
+                HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "target datatype is not committed")
+            break;
+        case H5I_GROUP:
+            ent = H5G_entof ((H5G_t*)obj);
+            break;
+        default:
+            HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "inappropriate attribute target")
+    } /*lint !e788 All appropriate cases are covered */
+
+    /* Look up the attribute for the object */
+    ret_value=H5O_count(ent, H5O_ATTR_ID, H5AC_ind_dxpl_id);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* H5Aget_num_attrs() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Arename
+ *
+ * Purpose:     Rename an attribute
+ *
+ * Return:	Success:             Non-negative
+ *
+ *		Failure:             Negative
+ *
+ * Programmer:	Raymond Lu
+ *              October 23, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Arename(hid_t loc_id, const char *old_name, const char *new_name)
+{
+    H5G_entry_t	*ent = NULL;	/*symtab ent of object to attribute */
+    herr_t	ret_value;      /* Return value */
+
+    FUNC_ENTER_API(H5Arename, FAIL)
+    H5TRACE3("e","iss",loc_id,old_name,new_name);
+
+    /* check arguments */
+    if (!old_name || !new_name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "name is nil")
+    if (H5I_FILE==H5I_get_type(loc_id) || H5I_ATTR==H5I_get_type(loc_id))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute")
+    if (NULL==(ent=H5G_loc(loc_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
+
+    /* Call private function */
+    ret_value = H5A_rename(ent, old_name, new_name, H5AC_dxpl_id);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* H5Arename() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5A_rename
+ *
+ * Purpose:     Private function for H5Arename.  Rename an attribute
+ *
+ * Return:	Success:             Non-negative
+ *
+ *		Failure:             Negative
+ *
+ * Programmer:	Raymond Lu
+ *              October 23, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5A_rename(H5G_entry_t *ent, const char *old_name, const char *new_name, hid_t dxpl_id)
+{
+    int         seq, idx=FAIL;  /* Index of attribute being querried */
+    H5A_t       found_attr;     /* Attribute with OLD_NAME */
+    herr_t	ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5A_rename)
+
+    /* Check arguments */
+    assert(ent);
+    assert(old_name);
+    assert(new_name);
+
+    /* Read in the existing attributes to check for duplicates */
+    seq=0;
+    while(H5O_read(ent, H5O_ATTR_ID, seq, &found_attr, dxpl_id)!=NULL) {
+        /*
+	 * Compare found attribute name.
+	 */
+	if(HDstrcmp(found_attr.name,old_name)==0) {
+            idx = seq;
+            break;
+	}
+	if(H5O_reset (H5O_ATTR_ID, &found_attr)<0)
+	    HGOTO_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't release attribute info")
+	seq++;
+    }
+    H5E_clear ();
+    if(idx<0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "attribute cannot be found")
+
+    /* Copy the attribute name. */
+    if(found_attr.name)
+        HDfree(found_attr.name);
+    found_attr.name = HDstrdup(new_name);
+    if(!found_attr.name)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "String copy failed")
+
+    /* Indicate entry is not opened and the attribute doesn't need fill-values. */
+    found_attr.ent_opened=FALSE;
+    found_attr.initialized=TRUE;
+
+    /* Modify the attribute message */
+    if (H5O_modify(ent, H5O_ATTR_ID, idx, 0, H5O_UPDATE_TIME, &found_attr, dxpl_id) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to update attribute header messages")
+
+    /* Close the attribute */
+    if(H5A_free(&found_attr)<0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "unable to close renamed attribute")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Aiterate
+ PURPOSE
+    Calls a user's function for each attribute on an object
+ USAGE
+    herr_t H5Aiterate (loc_id, attr_num, op, data)
+        hid_t loc_id;       IN: Object (dataset or group) to be iterated over
+        unsigned *attr_num; IN/OUT: Starting (IN) & Ending (OUT) attribute number
+        H5A_operator_t op;  IN: User's function to pass each attribute to
+        void *op_data;      IN/OUT: User's data to pass through to iterator operator function
+ RETURNS
+        Returns a negative value if something is wrong, the return value of the
+    last operator if it was non-zero, or zero if all attributes were processed.
+
+ ERRORS
+
+ DESCRIPTION
+        This function interates over the attributes of dataset or group
+    specified with 'loc_id'.  For each attribute of the object, the
+    'op_data' and some additional information (specified below) are passed
+    to the 'op' function.  The iteration begins with the '*attr_number'
+    object in the group and the next attribute to be processed by the operator
+    is returned in '*attr_number'.
+        The operation receives the ID for the group or dataset being iterated
+    over ('loc_id'), the name of the current attribute about the object
+    ('attr_name') and the pointer to the operator data passed in to H5Aiterate
+    ('op_data').  The return values from an operator are:
+        A. Zero causes the iterator to continue, returning zero when all
+            attributes have been processed.
+        B. Positive causes the iterator to immediately return that positive
+            value, indicating short-circuit success.  The iterator can be
+            restarted at the next attribute.
+        C. Negative causes the iterator to immediately return that value,
+            indicating failure.  The iterator can be restarted at the next
+            attribute.
+ *
+ * Modifications:
+ * 	Robb Matzke, 5 Jun 1998
+ *	The LOC_ID can also be a named (committed) datatype.
+ *
+ * 	Robb Matzke, 5 Jun 1998
+ *	Like the group iterator, if ATTR_NUM is the null pointer then all
+ *	attributes are processed.
+ *
+--------------------------------------------------------------------------*/
+herr_t
+H5Aiterate(hid_t loc_id, unsigned *attr_num, H5A_operator_t op, void *op_data)
+{
+    H5G_entry_t		*ent = NULL;	/*symtab ent of object to attribute */
+    H5A_t          	found_attr;
+    herr_t	        ret_value = 0;
+    int		idx, start_idx;
+
+    FUNC_ENTER_API(H5Aiterate, FAIL)
+    H5TRACE4("e","i*Iuxx",loc_id,attr_num,op,op_data);
+
+    /* check arguments */
+    if (H5I_FILE==H5I_get_type(loc_id) || H5I_ATTR==H5I_get_type(loc_id))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute")
+    if (NULL==(ent=H5G_loc(loc_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
+
+    /*
+     * Look up the attribute for the object. Make certain the start point is
+     * reasonable.
+     */
+    start_idx = idx = (attr_num ? (int)*attr_num : 0);
+    if (idx<0)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid index specified")
+    if(idx<H5O_count(ent, H5O_ATTR_ID, H5AC_dxpl_id)) {
+        while(H5O_read(ent, H5O_ATTR_ID, idx++, &found_attr, H5AC_dxpl_id)!=NULL) {
+	    /*
+	     * Compare found attribute name to new attribute name reject
+	     * creation if names are the same.
+	     */
+	    if((ret_value=(op)(loc_id,found_attr.name,op_data))!=0) {
+		if(H5O_reset (H5O_ATTR_ID, &found_attr)<0)
+                    HGOTO_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't release attribute info")
+		break;
+	    }
+	    if(H5O_reset (H5O_ATTR_ID, &found_attr)<0)
+                HGOTO_ERROR(H5E_ATTR, H5E_CANTFREE, FAIL, "can't release attribute info")
+	}
+	H5E_clear ();
+    }
+    else
+        if(start_idx>0)
+            HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid index specified")
+
+    if (attr_num)
+        *attr_num = (unsigned)idx;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* H5Aiterate() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Adelete
+ PURPOSE
+    Deletes an attribute from a location
+ USAGE
+    herr_t H5Adelete (loc_id, name)
+        hid_t loc_id;       IN: Object (dataset or group) to have attribute deleted from
+        const char *name;   IN: Name of attribute to delete
+ RETURNS
+    Non-negative on success/Negative on failure
+
+ ERRORS
+
+ DESCRIPTION
+        This function removes the named attribute from a dataset or group.
+    This function should not be used when attribute IDs are open on 'loc_id'
+    as it may cause the internal indexes of the attributes to change and future
+    writes to the open attributes to produce incorrect results.
+ *
+ * Modifications:
+ * 	Robb Matzke, 5 Jun 1998
+ *	The LOC_ID can also be a named (committed) datatype.
+ *
+--------------------------------------------------------------------------*/
+herr_t
+H5Adelete(hid_t loc_id, const char *name)
+{
+    H5G_entry_t	*ent = NULL;		/*symtab ent of object to attribute */
+    int         found;
+    herr_t	ret_value;
+
+    FUNC_ENTER_API(H5Adelete, FAIL)
+    H5TRACE2("e","is",loc_id,name);
+
+    /* check arguments */
+    if (H5I_FILE==H5I_get_type(loc_id) || H5I_ATTR==H5I_get_type(loc_id))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "location is not valid for an attribute")
+    if (NULL==(ent=H5G_loc(loc_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
+    if (!name || !*name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
+
+    /* Look up the attribute index for the object */
+    if((found=H5A_get_index(ent,name,H5AC_dxpl_id))<0)
+        HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, FAIL, "attribute not found")
+
+    /* Delete the attribute from the location */
+    if ((ret_value=H5O_remove(ent, H5O_ATTR_ID, found, TRUE, H5AC_dxpl_id)) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, FAIL, "unable to delete attribute header message")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* H5Adelete() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Aclose
+ PURPOSE
+    Close an attribute ID
+ USAGE
+    herr_t H5Aclose (attr_id)
+        hid_t attr_id;       IN: Attribute to release access to
+ RETURNS
+    Non-negative on success/Negative on failure
+
+ ERRORS
+
+ DESCRIPTION
+        This function releases an attribute from use.  Further use of the
+    attribute ID will result in undefined behavior.
+--------------------------------------------------------------------------*/
+herr_t
+H5Aclose(hid_t attr_id)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_API(H5Aclose, FAIL)
+    H5TRACE1("e","i",attr_id);
+
+    /* check arguments */
+    if (NULL == H5I_object_verify(attr_id, H5I_ATTR))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
+
+    /* Decrement references to that atom (and close it) */
+    if(H5I_dec_ref (attr_id)<0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTDEC, FAIL, "can't close attribute")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* H5Aclose() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5A_copy
+ *
+ * Purpose:	Copies attribute OLD_ATTR.
+ *
+ * Return:	Success:	Pointer to a new copy of the OLD_ATTR argument.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December  4, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5A_t *
+H5A_copy(H5A_t *_new_attr, const H5A_t *old_attr, unsigned update_flags)
+{
+    H5A_t	*new_attr=NULL;
+    hbool_t     allocated_attr=FALSE;   /* Whether the attribute was allocated */
+    H5A_t	*ret_value=NULL;        /* Return value */
+
+    FUNC_ENTER_NOAPI(H5A_copy, NULL)
+
+    /* check args */
+    assert(old_attr);
+
+    /* get space */
+    if(_new_attr==NULL) {
+        /* Sanity check - We should not be only updating data if we don'y have anything */
+        HDassert(!(update_flags&H5O_UPDATE_DATA_ONLY));
+
+        if (NULL==(new_attr = H5FL_MALLOC(H5A_t)))
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+        allocated_attr=TRUE;
+    } /* end if */
+    else
+        new_attr=_new_attr;
+
+    if(!(update_flags&H5O_UPDATE_DATA_ONLY)) {
+        /* Copy the top level of the attribute */
+        *new_attr = *old_attr;
+
+        /* Don't open the object header for a copy */
+        new_attr->ent_opened=0;
+
+        /* Copy the guts of the attribute */
+        new_attr->name=HDstrdup(old_attr->name);
+        new_attr->dt=H5T_copy(old_attr->dt, H5T_COPY_ALL);
+        new_attr->ds=H5S_copy(old_attr->ds, FALSE);
+    } /* end if */
+    if(old_attr->data) {
+        if(!(update_flags&H5O_UPDATE_DATA_ONLY) || new_attr->data==NULL) {
+            if (NULL==(new_attr->data=H5FL_BLK_MALLOC(attr_buf,old_attr->data_size)))
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+        } /* end if */
+        HDmemcpy(new_attr->data,old_attr->data,old_attr->data_size);
+    } /* end if */
+
+    /* Set the return value */
+    ret_value=new_attr;
+
+done:
+    if(ret_value==NULL) {
+        if(new_attr!=NULL && allocated_attr)
+            (void)H5A_close(new_attr);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5A_free
+ *
+ * Purpose:	Frees all memory associated with an attribute, but does not
+ *              free the H5A_t structure (which should be done in H5T_close).
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Monday, November 15, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5A_free(H5A_t *attr)
+{
+    herr_t ret_value=SUCCEED;           /* Return value */
+
+    FUNC_ENTER_NOAPI(H5A_free, FAIL)
+
+    assert(attr);
+
+    /* Free dynamicly allocated items */
+    if(attr->name)
+        H5MM_xfree(attr->name);
+    if(attr->dt)
+        if(H5T_close(attr->dt)<0)
+	    HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release datatype info")
+    if(attr->ds)
+        if(H5S_close(attr->ds)<0)
+	    HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release dataspace info")
+    if(attr->data)
+        H5FL_BLK_FREE(attr_buf, attr->data);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5A_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5A_close
+ *
+ * Purpose:	Frees an attribute and all associated memory.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, December  8, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5A_close(H5A_t *attr)
+{
+    herr_t ret_value=SUCCEED;           /* Return value */
+
+    FUNC_ENTER_NOAPI(H5A_close, FAIL)
+
+    assert(attr);
+
+    /* Check if the attribute has any data yet, if not, fill with zeroes */
+    if(attr->ent_opened && !attr->initialized) {
+        uint8_t *tmp_buf=H5FL_BLK_CALLOC(attr_buf, attr->data_size);
+        if (NULL == tmp_buf)
+            HGOTO_ERROR(H5E_ATTR, H5E_NOSPACE, FAIL, "memory allocation failed for attribute fill-value")
+
+        /* Go write the fill data to the attribute */
+        if (H5A_write(attr,attr->dt,tmp_buf,H5AC_dxpl_id)<0)
+            HGOTO_ERROR(H5E_ATTR, H5E_WRITEERROR, FAIL, "unable to write attribute")
+
+        /* Free temporary buffer */
+        H5FL_BLK_FREE(attr_buf, tmp_buf);
+    } /* end if */
+
+    /* Free dynamicly allocated items */
+    if(H5A_free(attr)<0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release attribute info")
+
+    /* Close the object's symbol-table entry */
+    if(attr->ent_opened)
+        if(H5O_close(&(attr->ent))<0)
+	    HGOTO_ERROR(H5E_ATTR, H5E_CANTRELEASE, FAIL, "can't release object header info")
+
+    H5FL_FREE(H5A_t, attr);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5A_close() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5A_entof
+ *
+ * Purpose:	Return the symbol table entry for an attribute.  It's the
+ *		symbol table entry for the object to which the attribute
+ *		belongs, not the attribute itself.
+ *
+ * Return:	Success:	Ptr to entry
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, August  6, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5G_entry_t *
+H5A_entof(H5A_t *attr)
+{
+    H5G_entry_t *ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5A_entof, NULL)
+    assert(attr);
+
+    /* Set return value */
+    ret_value=&(attr->ent);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}

Added: packages/hdf5/branches/upstream/current/src/H5AC.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5AC.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5AC.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1001 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5AC.c
+ *                      Jul  9 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             Functions in this file implement a cache for
+ *                      things which exist on disk.  All "things" associated
+ *                      with a particular HDF file share the same cache; each
+ *                      HDF file has it's own cache.
+ *
+ * Modifications:
+ *
+ *      Robb Matzke, 4 Aug 1997
+ *      Added calls to H5E.
+ *
+ *      Quincey Koziol, 22 Apr 2000
+ *      Turned on "H5AC_SORT_BY_ADDR"
+ *
+ *	John Mainzer, 5/19/04
+ * 	Complete redesign and rewrite.  See the header comments for
+ *      H5AC_t for an overview of what is going on.
+ *
+ *	John Mainzer, 6/4/04
+ *	Factored the new cache code into a separate file (H5C.c) to
+ *	facilitate re-use.  Re-worked this file again to use H5C.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5AC_init_interface
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5Dprivate.h"		/* Dataset functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"		/* Files				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Pprivate.h"         /* Property lists                       */
+
+
+/*
+ * Private file-scope variables.
+ */
+
+/* Default dataset transfer property list for metadata I/O calls */
+/* (Collective set, "block before metadata write" set and "library internal" set) */
+/* (Global variable definition, declaration is in H5ACprivate.h also) */
+hid_t H5AC_dxpl_id=(-1);
+
+/* Private dataset transfer property list for metadata I/O calls */
+/* (Collective set and "library internal" set) */
+/* (Static variable definition) */
+static hid_t H5AC_noblock_dxpl_id=(-1);
+
+/* Dataset transfer property list for independent metadata I/O calls */
+/* (just "library internal" set - i.e. independent transfer mode) */
+/* (Global variable definition, declaration is in H5ACprivate.h also) */
+hid_t H5AC_ind_dxpl_id=(-1);
+
+
+/*
+ * Private file-scope function declarations:
+ */
+
+static herr_t H5AC_check_if_write_permitted(const H5F_t *f,
+                                            hid_t dxpl_id,
+                                            hbool_t * write_permitted_ptr);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5AC_init
+ *
+ * Purpose:	Initialize the interface from some other layer.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, January 18, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5AC_init(void)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5AC_init, FAIL)
+    /* FUNC_ENTER() does all the work */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5AC_init_interface
+ *
+ * Purpose:	Initialize interface-specific information
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 18, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5AC_init_interface(void)
+{
+#ifdef H5_HAVE_PARALLEL
+    H5P_genclass_t  *xfer_pclass;   /* Dataset transfer property list class object */
+    H5P_genplist_t  *xfer_plist;    /* Dataset transfer property list object */
+    unsigned block_before_meta_write; /* "block before meta write" property value */
+    unsigned library_internal=1;    /* "library internal" property value */
+    H5FD_mpio_xfer_t xfer_mode;     /* I/O transfer mode property value */
+    herr_t ret_value=SUCCEED;           /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5AC_init_interface)
+
+    /* Sanity check */
+    HDassert(H5P_CLS_DATASET_XFER_g!=(-1));
+
+    /* Get the dataset transfer property list class object */
+    if (NULL == (xfer_pclass = H5I_object(H5P_CLS_DATASET_XFER_g)))
+        HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get property list class")
+
+    /* Get an ID for the blocking, collective H5AC dxpl */
+    if ((H5AC_dxpl_id=H5P_create_id(xfer_pclass)) < 0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
+
+    /* Get the property list object */
+    if (NULL == (xfer_plist = H5I_object(H5AC_dxpl_id)))
+        HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
+
+    /* Insert 'block before metadata write' property */
+    block_before_meta_write=1;
+    if(H5P_insert(xfer_plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,H5AC_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
+
+    /* Insert 'library internal' property */
+    if(H5P_insert(xfer_plist,H5AC_LIBRARY_INTERNAL_NAME,H5AC_LIBRARY_INTERNAL_SIZE,&library_internal,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
+
+    /* Set the transfer mode */
+    xfer_mode=H5FD_MPIO_COLLECTIVE;
+    if (H5P_set(xfer_plist,H5D_XFER_IO_XFER_MODE_NAME,&xfer_mode)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value")
+
+    /* Get an ID for the non-blocking, collective H5AC dxpl */
+    if ((H5AC_noblock_dxpl_id=H5P_create_id(xfer_pclass)) < 0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
+
+    /* Get the property list object */
+    if (NULL == (xfer_plist = H5I_object(H5AC_noblock_dxpl_id)))
+        HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
+
+    /* Insert 'block before metadata write' property */
+    block_before_meta_write=0;
+    if(H5P_insert(xfer_plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,H5AC_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
+
+    /* Insert 'library internal' property */
+    if(H5P_insert(xfer_plist,H5AC_LIBRARY_INTERNAL_NAME,H5AC_LIBRARY_INTERNAL_SIZE,&library_internal,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
+
+    /* Set the transfer mode */
+    xfer_mode=H5FD_MPIO_COLLECTIVE;
+    if (H5P_set(xfer_plist,H5D_XFER_IO_XFER_MODE_NAME,&xfer_mode)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value")
+
+    /* Get an ID for the non-blocking, independent H5AC dxpl */
+    if ((H5AC_ind_dxpl_id=H5P_create_id(xfer_pclass)) < 0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, FAIL, "unable to register property list")
+
+    /* Get the property list object */
+    if (NULL == (xfer_plist = H5I_object(H5AC_ind_dxpl_id)))
+        HGOTO_ERROR(H5E_CACHE, H5E_BADATOM, FAIL, "can't get new property list object")
+
+    /* Insert 'block before metadata write' property */
+    block_before_meta_write=0;
+    if(H5P_insert(xfer_plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,H5AC_BLOCK_BEFORE_META_WRITE_SIZE,&block_before_meta_write,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
+
+    /* Insert 'library internal' property */
+    if(H5P_insert(xfer_plist,H5AC_LIBRARY_INTERNAL_NAME,H5AC_LIBRARY_INTERNAL_SIZE,&library_internal,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert metadata cache dxpl property")
+
+    /* Set the transfer mode */
+    xfer_mode=H5FD_MPIO_INDEPENDENT;
+    if (H5P_set(xfer_plist,H5D_XFER_IO_XFER_MODE_NAME,&xfer_mode)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+
+#else /* H5_HAVE_PARALLEL */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5AC_init_interface)
+
+    /* Sanity check */
+    assert(H5P_LST_DATASET_XFER_g!=(-1));
+
+    H5AC_dxpl_id=H5P_DATASET_XFER_DEFAULT;
+    H5AC_noblock_dxpl_id=H5P_DATASET_XFER_DEFAULT;
+    H5AC_ind_dxpl_id=H5P_DATASET_XFER_DEFAULT;
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+#endif /* H5_HAVE_PARALLEL */
+} /* end H5AC_init_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5AC_term_interface
+ *
+ * Purpose:	Terminate this interface.
+ *
+ * Return:	Success:	Positive if anything was done that might
+ *				affect other interfaces; zero otherwise.
+ *
+ * 		Failure:	Negative.
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 18, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5AC_term_interface(void)
+{
+    int		n=0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5AC_term_interface)
+
+    if (H5_interface_initialize_g) {
+#ifdef H5_HAVE_PARALLEL
+        if(H5AC_dxpl_id>0 || H5AC_noblock_dxpl_id>0 || H5AC_ind_dxpl_id>0) {
+            /* Indicate more work to do */
+            n = 1; /* H5I */
+
+            /* Close H5AC dxpl */
+            if (H5I_dec_ref(H5AC_dxpl_id) < 0 ||
+                    H5I_dec_ref(H5AC_noblock_dxpl_id) < 0 ||
+                    H5I_dec_ref(H5AC_ind_dxpl_id) < 0)
+                H5E_clear(); /*ignore error*/
+            else {
+                /* Reset static IDs */
+                H5AC_dxpl_id=(-1);
+                H5AC_noblock_dxpl_id=(-1);
+                H5AC_ind_dxpl_id=(-1);
+
+                /* Reset interface initialization flag */
+                H5_interface_initialize_g = 0;
+            } /* end else */
+        } /* end if */
+        else
+#else /* H5_HAVE_PARALLEL */
+            /* Reset static IDs */
+            H5AC_dxpl_id=(-1);
+            H5AC_noblock_dxpl_id=(-1);
+            H5AC_ind_dxpl_id=(-1);
+
+#endif /* H5_HAVE_PARALLEL */
+            /* Reset interface initialization flag */
+            H5_interface_initialize_g = 0;
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(n)
+} /* end H5AC_term_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5AC_create
+ *
+ * Purpose:     Initialize the cache just after a file is opened.  The
+ *              SIZE_HINT is the number of cache slots desired.  If you
+ *              pass an invalid value then H5AC_NSLOTS is used.  You can
+ *              turn off caching by using 1 for the SIZE_HINT value.
+ *
+ * Return:      Success:        Number of slots actually used.
+ *
+ *              Failure:        Negative
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Jul  9 1997
+ *
+ * Modifications:
+ *
+ *		Complete re-design and re-write to support the re-designed
+ *		metadata cache.
+ *
+ *		At present, the size_hint is ignored, and the
+ *		max_cache_size and min_clean_size fields are hard
+ *		coded.  This should be fixed, but a parameter
+ *		list change will be required, so I will leave it
+ *		for now.
+ *
+ *		Since no-one seems to care, the function now returns
+ *		one on success.
+ *						JRM - 4/28/04
+ *
+ *		Reworked the function again after abstracting its guts to
+ *		the similar function in H5C.c.  The function is now a
+ *		wrapper for H5C_create().
+ *						JRM - 6/4/04
+ *-------------------------------------------------------------------------
+ */
+
+static const char * H5AC_entry_type_names[H5AC_NTYPES] =
+{
+    "B-tree nodes",
+    "symbol table nodes",
+    "local heaps",
+    "global heaps",
+    "object headers"
+};
+
+herr_t
+H5AC_create(const H5F_t *f, int UNUSED size_hint)
+{
+    int ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5AC_create, FAIL)
+
+    HDassert(f);
+    HDassert(NULL == f->shared->cache);
+
+    /* this is test code that should be removed when we start passing
+     * in proper size hints.
+     *                                             -- JRM
+     */
+    f->shared->cache = H5C_create(H5C__DEFAULT_MAX_CACHE_SIZE,
+                           H5C__DEFAULT_MIN_CLEAN_SIZE,
+                           (H5AC_NTYPES - 1),
+                           (const char **)H5AC_entry_type_names,
+                           H5AC_check_if_write_permitted);
+
+    if ( NULL == f->shared->cache ) {
+
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+    }
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5AC_create() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5AC_dest
+ *
+ * Purpose:     Flushes all data to disk and destroys the cache.
+ *              This function fails if any object are protected since the
+ *              resulting file might not be consistent.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Jul  9 1997
+ *
+ * Modifications:
+ *
+ *		Complete re-design and re-write to support the re-designed
+ *		metadata cache.
+ *                                                 JRM - 5/12/04
+ *
+ *		Abstracted the guts of the function to H5C_dest() in H5C.c,
+ *		and then re-wrote the function as a wrapper for H5C_dest().
+ *
+ *                                                 JRM - 6/7/04
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5AC_dest(H5F_t *f, hid_t dxpl_id)
+{
+    H5AC_t *cache = NULL;
+    herr_t ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5AC_dest, FAIL)
+
+    assert(f);
+    assert(f->shared->cache);
+    cache = f->shared->cache;
+
+    f->shared->cache = NULL;
+
+    if ( H5C_dest(f, dxpl_id, H5AC_noblock_dxpl_id, cache) < 0 ) {
+
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTFREE, FAIL, "can't destroy cache")
+    }
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5AC_dest() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5AC_flush
+ *
+ * Purpose:	Flush (and possibly destroy) the metadata cache associated
+ *		with the specified file.
+ *
+ *		This is a re-write of an earlier version of the function
+ *		which was reputedly capable of flushing (and destroying
+ *		if requested) individual entries, individual entries if
+ *		they match the supplied type, all entries of a given type,
+ *		as well as all entries in the cache.
+ *
+ *		As only this last capability is actually used at present,
+ *		I have not implemented the other capabilities in this
+ *		version of the function.
+ *
+ *		The type and addr parameters are retained to avoid source
+ *		code changed, but values other than NULL and HADDR_UNDEF
+ *		respectively are errors.  If all goes well, they should
+ *		be removed, and the function renamed to something more
+ *		descriptive -- perhaps H5AC_flush_cache.
+ *
+ *		If the cache contains protected entries, the function will
+ *		fail, as protected entries cannot be flushed.  However
+ *		all unprotected entries should be flushed before the
+ *		function returns failure.
+ *
+ *		For historical purposes, the original version of the
+ *		purpose section is reproduced below:
+ *
+ *              ============ Original Version of "Purpose:" ============
+ *
+ *              Flushes (and destroys if DESTROY is non-zero) the specified
+ *              entry from the cache.  If the entry TYPE is CACHE_FREE and
+ *              ADDR is HADDR_UNDEF then all types of entries are
+ *              flushed. If TYPE is CACHE_FREE and ADDR is defined then
+ *              whatever is cached at ADDR is flushed.  Otherwise the thing
+ *              at ADDR is flushed if it is the correct type.
+ *
+ *              If there are protected objects they will not be flushed.
+ *              However, an attempt will be made to flush all non-protected
+ *              items before this function returns failure.
+ *
+ * Return:      Non-negative on success/Negative on failure if there was a
+ *              request to flush all items and something was protected.
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Jul  9 1997
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-07-27
+ *		The ADDR argument is passed by value.
+ *
+ *		Complete re-write. See above for details.  -- JRM 5/11/04
+ *
+ *		Abstracted the guts of the function to H5C_dest() in H5C.c,
+ *		and then re-wrote the function as a wrapper for H5C_dest().
+ *
+ *                                                 JRM - 6/7/04
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5AC_flush(H5F_t *f, hid_t dxpl_id, unsigned flags)
+{
+    herr_t status;
+    herr_t ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5AC_flush, FAIL)
+
+    HDassert(f);
+    HDassert(f->shared->cache);
+
+    status = H5C_flush_cache(f,
+                             dxpl_id,
+                             H5AC_noblock_dxpl_id,
+                             f->shared->cache,
+                             flags);
+
+    if ( status < 0 ) {
+
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "Can't flush entry.")
+    }
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5AC_flush() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5AC_set
+ *
+ * Purpose:     Adds the specified thing to the cache.  The thing need not
+ *              exist on disk yet, but it must have an address and disk
+ *              space reserved.
+ *
+ *              If H5AC_DEBUG is defined then this function checks
+ *              that the object being inserted isn't a protected object.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Jul  9 1997
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-07-27
+ *		The ADDR argument is passed by value.
+ *
+ *		Bill Wendling, 2003-09-16
+ *		Added automatic "flush" if the FPHDF5 driver is being
+ *		used. This'll write the metadata to the SAP where other,
+ *		lesser processes can grab it.
+ *
+ *		JRM - 5/13/04
+ *		Complete re-write for the new metadata cache.  The new
+ *		code is functionally almost identical to the old, although
+ *		the sanity check for a protected entry is now an assert
+ *		at the beginning of the function.
+ *
+ *		JRM - 6/7/04
+ *		Abstracted the guts of the function to H5C_insert_entry()
+ *		in H5C.c, and then re-wrote the function as a wrapper for
+ *		H5C_insert_entry().
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5AC_set(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr, void *thing)
+{
+    herr_t		result;
+    H5AC_info_t        *info;
+    H5AC_t             *cache;
+    herr_t ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5AC_set, FAIL)
+
+    HDassert(f);
+    HDassert(f->shared->cache);
+    HDassert(type);
+    HDassert(type->flush);
+    HDassert(type->size);
+    HDassert(H5F_addr_defined(addr));
+    HDassert(thing);
+
+    /* Get local copy of this information */
+    cache = f->shared->cache;
+    info = (H5AC_info_t *)thing;
+
+    info->addr = addr;
+    info->type = type;
+    info->is_protected = FALSE;
+
+    result = H5C_insert_entry(f,
+                              dxpl_id,
+                              H5AC_noblock_dxpl_id,
+                              cache,
+                              type,
+                              addr,
+                              thing);
+
+    if ( result < 0 ) {
+
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, "H5C_insert_entry() failed")
+    }
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5AC_set() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5AC_rename
+ *
+ * Purpose:     Use this function to notify the cache that an object's
+ *              file address changed.
+ *
+ *              If H5AC_DEBUG is defined then this function checks
+ *              that the old and new addresses don't correspond to the
+ *              address of a protected object.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Jul  9 1997
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-07-27
+ *		The OLD_ADDR and NEW_ADDR arguments are passed by value.
+ *
+ *		JRM 5/17/04
+ *		Complete rewrite for the new meta-data cache.
+ *
+ *		JRM - 6/7/04
+ *		Abstracted the guts of the function to H5C_rename_entry()
+ *		in H5C.c, and then re-wrote the function as a wrapper for
+ *		H5C_rename_entry().
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5AC_rename(H5F_t *f, const H5AC_class_t *type, haddr_t old_addr, haddr_t new_addr)
+{
+    herr_t		result;
+    herr_t ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5AC_rename, FAIL)
+
+    HDassert(f);
+    HDassert(f->shared->cache);
+    HDassert(type);
+    HDassert(H5F_addr_defined(old_addr));
+    HDassert(H5F_addr_defined(new_addr));
+    HDassert(H5F_addr_ne(old_addr, new_addr));
+
+    result = H5C_rename_entry(f->shared->cache,
+                              type,
+                              old_addr,
+                              new_addr);
+
+    if ( result < 0 ) {
+
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTRENAME, FAIL, \
+                    "H5C_rename_entry() failed.")
+    }
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5AC_rename() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5AC_protect
+ *
+ * Purpose:     If the target entry is not in the cache, load it.  If
+ *		necessary, attempt to evict one or more entries to keep
+ *		the cache within its maximum size.
+ *
+ *		Mark the target entry as protected, and return its address
+ *		to the caller.  The caller must call H5AC_unprotect() when
+ *		finished with the entry.
+ *
+ *		While it is protected, the entry may not be either evicted
+ *		or flushed -- nor may it be accessed by another call to
+ *		H5AC_protect.  Any attempt to do so will result in a failure.
+ *
+ *		This comment is a re-write of the original Purpose: section.
+ *		For historical interest, the original version is reproduced
+ *		below:
+ *
+ *		Original Purpose section:
+ *
+ *              Similar to H5AC_find() except the object is removed from
+ *              the cache and given to the caller, preventing other parts
+ *              of the program from modifying the protected object or
+ *              preempting it from the cache.
+ *
+ *              The caller must call H5AC_unprotect() when finished with
+ *              the pointer.
+ *
+ *              If H5AC_DEBUG is defined then we check that the
+ *              requested object isn't already protected.
+ *
+ * Return:      Success:        Ptr to the object.
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Sep  2 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-27
+ *		The ADDR argument is passed by value.
+ *
+ *              Bill Wendling, 2003-09-10
+ *              Added parameter to indicate whether this is a READ or
+ *              WRITE type of protect.
+ *
+ *		JRM -- 5/17/04
+ *		Complete re-write for the new client cache.  See revised
+ *		Purpose section above.
+ *
+ *		JRM - 6/7/04
+ *		Abstracted the guts of the function to H5C_protect()
+ *		in H5C.c, and then re-wrote the function as a wrapper for
+ *		H5C_protect().
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5AC_protect(H5F_t *f,
+             hid_t dxpl_id,
+             const H5AC_class_t *type,
+             haddr_t addr,
+	     const void *udata1,
+             void *udata2,
+             H5AC_protect_t
+             UNUSED
+             rw)
+{
+    void *		thing = NULL;
+    void *		ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5AC_protect, NULL)
+
+    /* check args */
+    HDassert(f);
+    HDassert(f->shared->cache);
+    HDassert(type);
+    HDassert(type->flush);
+    HDassert(type->load);
+    HDassert(H5F_addr_defined(addr));
+
+
+    thing = H5C_protect(f,
+                        dxpl_id,
+                        H5AC_noblock_dxpl_id,
+                        f->shared->cache,
+                        type,
+                        addr,
+                        udata1,
+                        udata2);
+
+    if ( thing == NULL ) {
+
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, NULL, "H5C_protect() failed.")
+    }
+
+    /* Set return value */
+    ret_value = thing;
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5AC_protect() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5AC_unprotect
+ *
+ * Purpose:	Undo an H5AC_protect() call -- specifically, mark the
+ *		entry as unprotected, remove it from the protected list,
+ *		and give it back to the replacement policy.
+ *
+ *		The TYPE and ADDR arguments must be the same as those in
+ *		the corresponding call to H5AC_protect() and the THING
+ *		argument must be the value returned by that call to
+ *		H5AC_protect().
+ *
+ *		If the deleted flag is TRUE, simply remove the target entry
+ *		from the cache, clear it, and free it without writing it to
+ *		disk.
+ *
+ *		This verion of the function is a complete re-write to
+ *		use the new metadata cache.  While there isn't all that
+ *		much difference between the old and new Purpose sections,
+ *		the original version is given below.
+ *
+ *		Original purpose section:
+ *
+ *		This function should be called to undo the effect of
+ *              H5AC_protect().  The TYPE and ADDR arguments should be the
+ *              same as the corresponding call to H5AC_protect() and the
+ *              THING argument should be the value returned by H5AC_protect().
+ *              If the DELETED flag is set, then this object has been deleted
+ *              from the file and should not be returned to the cache.
+ *
+ *              If H5AC_DEBUG is defined then this function fails
+ *              if the TYPE and ADDR arguments are not what was used when the
+ *              object was protected or if the object was never protected.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Sep  2 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-27
+ *		The ADDR argument is passed by value.
+ *
+ *		Quincey Koziol, 2003-03-19
+ *		Added "deleted" argument
+ *
+ *              Bill Wendling, 2003-09-18
+ *              If this is an FPHDF5 driver and the data is dirty,
+ *              perform a "flush" that writes the data to the SAP.
+ *
+ *		John Mainzer 5/19/04
+ *		Complete re-write for the new metadata cache.
+ *
+ *		JRM - 6/7/04
+ *		Abstracted the guts of the function to H5C_unprotect()
+ *		in H5C.c, and then re-wrote the function as a wrapper for
+ *		H5C_unprotect().
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5AC_unprotect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr, void *thing, hbool_t deleted)
+{
+    herr_t		result;
+    herr_t                  ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5AC_unprotect, FAIL)
+
+    HDassert(f);
+    HDassert(f->shared->cache);
+    HDassert(type);
+    HDassert(type->clear);
+    HDassert(type->flush);
+    HDassert(H5F_addr_defined(addr));
+    HDassert(thing);
+    HDassert( ((H5AC_info_t *)thing)->addr == addr );
+    HDassert( ((H5AC_info_t *)thing)->type == type );
+
+    result = H5C_unprotect(f,
+                           dxpl_id,
+                           H5AC_noblock_dxpl_id,
+                           f->shared->cache,
+                           type,
+                           addr,
+                           thing,
+                           deleted);
+
+    if ( result < 0 ) {
+
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
+                    "H5C_unprotect() failed.")
+    }
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5AC_unprotect() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5AC_stats
+ *
+ * Purpose:     Prints statistics about the cache.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              Thursday, October 30, 1997
+ *
+ * Modifications:
+ *		John Mainzer 5/19/04
+ *		Re-write to support the new metadata cache.
+ *
+ *		JRM - 6/7/04
+ *		Abstracted the guts of the function to H5C_stats()
+ *		in H5C.c, and then re-wrote the function as a wrapper for
+ *		H5C_stats().
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5AC_stats(const H5F_t *f)
+{
+    herr_t		ret_value = SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5AC_stats, FAIL)
+
+    HDassert(f);
+    HDassert(f->shared->cache);
+
+    (void)H5C_stats(f->shared->cache, f->name, FALSE); /* at present, this can't fail */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5AC_stats() */
+
+
+/*************************************************************************/
+/**************************** Private Functions: *************************/
+/*************************************************************************/
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:    H5AC_check_if_write_permitted
+ *
+ * Purpose:     Determine if a write is permitted under the current
+ *		circumstances, and set *write_permitted_ptr accordingly.
+ *		As a general rule it is, but when we are running in parallel
+ *		mode with collective I/O, we must ensure that a read cannot
+ *		cause a write.
+ *
+ *		In the event of failure, the value of *write_permitted_ptr
+ *		is undefined.
+ *
+ * Return:      Non-negative on success/Negative on failure.
+ *
+ * Programmer:  John Mainzer, 5/15/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifdef H5_HAVE_PARALLEL
+static herr_t
+H5AC_check_if_write_permitted(const H5F_t *f,
+                              hid_t dxpl_id,
+                              hbool_t * write_permitted_ptr)
+#else /* H5_HAVE_PARALLEL */
+static herr_t
+H5AC_check_if_write_permitted(const H5F_t UNUSED * f,
+                              hid_t UNUSED dxpl_id,
+                              hbool_t * write_permitted_ptr)
+#endif /* H5_HAVE_PARALLEL */
+{
+    hbool_t		write_permitted = TRUE;
+    herr_t		ret_value = SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5AC_check_if_write_permitted, FAIL)
+
+#ifdef H5_HAVE_PARALLEL
+
+    if ( IS_H5FD_MPI(f) ) {
+
+        H5P_genplist_t     *dxpl;       /* Dataset transfer property list   */
+        H5FD_mpio_xfer_t    xfer_mode;  /* I/O transfer mode property value */
+
+        /* Get the dataset transfer property list */
+        if ( NULL == (dxpl = H5I_object(dxpl_id)) ) {
+
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, \
+                        "not a dataset creation property list")
+
+        }
+
+        /* Get the transfer mode property */
+        if( H5P_get(dxpl, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0 ) {
+
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, \
+                        "can't retrieve xfer mode")
+
+        }
+
+        if ( xfer_mode == H5FD_MPIO_INDEPENDENT ) {
+
+            write_permitted = FALSE;
+
+        } else {
+
+            HDassert(xfer_mode == H5FD_MPIO_COLLECTIVE );
+
+        }
+    }
+
+#endif /* H5_HAVE_PARALLEL */
+
+    *write_permitted_ptr = write_permitted;
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5AC_check_if_write_permitted() */

Added: packages/hdf5/branches/upstream/current/src/H5ACprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5ACprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5ACprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,181 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:		H5ACprivate.h
+ *			Jul  9 1997
+ *			Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:		Constants and typedefs available to the rest of the
+ *			library.
+ *
+ * Modifications:	JRM - 6/4/04
+ *			Complete re-write for a new caching algorithm
+ *			located in H5C.c
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifndef _H5ACprivate_H
+#define _H5ACprivate_H
+
+#include "H5ACpublic.h"		/*public prototypes			*/
+
+/* Pivate headers needed by this header */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5Cprivate.h"		/* cache				*/
+
+
+#define H5AC_BT_ID	0	/*B-tree nodes				     */
+#define H5AC_SNODE_ID	1	/*symbol table nodes			     */
+#define H5AC_LHEAP_ID	2	/*local heap				     */
+#define H5AC_GHEAP_ID	3	/*global heap				     */
+#define H5AC_OHDR_ID	4	/*object header				     */
+#define H5AC_NTYPES	5
+
+/* H5AC_DUMP_STATS_ON_CLOSE should always be FALSE when
+ * H5C_COLLECT_CACHE_STATS is FALSE.
+ *
+ * When H5C_COLLECT_CACHE_STATS is TRUE, H5AC_DUMP_STATS_ON_CLOSE must
+ * be FALSE for "make check" to succeed, but may be set to TRUE at other
+ * times for debugging purposes.
+ *
+ * Hence the following, somewhat odd set of #defines.
+ */
+#if H5C_COLLECT_CACHE_STATS
+
+#define H5AC_DUMP_STATS_ON_CLOSE	0
+
+#else /* H5C_COLLECT_CACHE_STATS */
+
+#define H5AC_DUMP_STATS_ON_CLOSE	0
+
+#endif /* H5C_COLLECT_CACHE_STATS */
+
+/*
+ * Class methods pertaining to caching.	 Each type of cached object will
+ * have a constant variable with permanent life-span that describes how
+ * to cache the object.	 That variable will be of type H5AC_class_t and
+ * have the following required fields...
+ *
+ * LOAD:	Loads an object from disk to memory.  The function
+ *		should allocate some data structure and return it.
+ *
+ * FLUSH:	Writes some data structure back to disk.  It would be
+ *		wise for the data structure to include dirty flags to
+ *		indicate whether it really needs to be written.	 This
+ *		function is also responsible for freeing memory allocated
+ *		by the LOAD method if the DEST argument is non-zero (by
+ *              calling the DEST method).
+ *
+ * DEST:	Just frees memory allocated by the LOAD method.
+ *
+ * CLEAR:	Just marks object as non-dirty.
+ *
+ * SIZE:	Report the size (on disk) of the specified cache object.
+ *		Note that the space allocated on disk may not be contiguous.
+ */
+
+typedef H5C_load_func_t		H5AC_load_func_t;
+typedef H5C_flush_func_t	H5AC_flush_func_t;
+typedef H5C_dest_func_t		H5AC_dest_func_t;
+typedef H5C_clear_func_t	H5AC_clear_func_t;
+typedef H5C_size_func_t		H5AC_size_func_t;
+
+typedef H5C_class_t		H5AC_class_t;
+
+
+/* The H5AC_NSLOTS #define is now obsolete, as the metadata cache no longer
+ * uses slots.  However I am leaving it in for now to avoid modifying the
+ * interface between the metadata cache and the rest of HDF.  It should
+ * be removed when we get to dealing with the size_hint parameter in
+ * H5AC_create().
+ *						JRM - 5/20/04
+ *
+ * Old comment on H5AC_NSLOTS follows:
+ *
+ * A cache has a certain number of entries.  Objects are mapped into a
+ * cache entry by hashing the object's file address.  Each file has its
+ * own cache, an array of slots.
+ */
+#define H5AC_NSLOTS     10330           /* The library "likes" this number... */
+
+
+typedef H5C_cache_entry_t	H5AC_info_t;
+
+
+/*===----------------------------------------------------------------------===
+ *                             Protect Types
+ *===----------------------------------------------------------------------===
+ *
+ * These are for the wrapper functions to H5AC_protect. They specify what
+ * type of operation you're planning on doing to the metadata. The
+ * Flexible Parallel HDF5 locking can then act accordingly.
+ */
+
+typedef enum H5AC_protect_t {
+    H5AC_WRITE,                 /* Protect object for writing                */
+    H5AC_READ                   /* Protect object for reading                */
+} H5AC_protect_t;
+
+
+/* Typedef for metadata cache (defined in H5C.c) */
+typedef H5C_t	H5AC_t;
+
+/* Metadata specific properties for FAPL */
+/* (Only used for parallel I/O) */
+#ifdef H5_HAVE_PARALLEL
+/* Definitions for "block before metadata write" property */
+#define H5AC_BLOCK_BEFORE_META_WRITE_NAME       "H5AC_block_before_meta_write"
+#define H5AC_BLOCK_BEFORE_META_WRITE_SIZE       sizeof(unsigned)
+#define H5AC_BLOCK_BEFORE_META_WRITE_DEF        0
+
+/* Definitions for "library internal" property */
+#define H5AC_LIBRARY_INTERNAL_NAME       "H5AC_library_internal"
+#define H5AC_LIBRARY_INTERNAL_SIZE       sizeof(unsigned)
+#define H5AC_LIBRARY_INTERNAL_DEF        0
+#endif /* H5_HAVE_PARALLEL */
+
+/* Dataset transfer property list for flush calls */
+/* (Collective set, "block before metadata write" set and "library internal" set) */
+/* (Global variable declaration, definition is in H5AC.c) */
+extern hid_t H5AC_dxpl_id;
+
+/* Dataset transfer property list for independent metadata I/O calls */
+/* (just "library internal" set - i.e. independent transfer mode) */
+/* (Global variable declaration, definition is in H5AC.c) */
+extern hid_t H5AC_ind_dxpl_id;
+
+/*
+ * Library prototypes.
+ */
+H5_DLL herr_t H5AC_init(void);
+H5_DLL herr_t H5AC_create(const H5F_t *f, int size_hint);
+H5_DLL herr_t H5AC_set(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
+			void *thing);
+H5_DLL void *H5AC_protect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type,
+                          haddr_t addr, const void *udata1, void *udata2,
+                          H5AC_protect_t rw);
+H5_DLL herr_t H5AC_unprotect(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t addr,
+			     void *thing, hbool_t deleted);
+H5_DLL herr_t H5AC_flush(H5F_t *f, hid_t dxpl_id, unsigned flags);
+H5_DLL herr_t H5AC_rename(H5F_t *f, const H5AC_class_t *type,
+			   haddr_t old_addr, haddr_t new_addr);
+H5_DLL herr_t H5AC_dest(H5F_t *f, hid_t dxpl_id);
+H5_DLL herr_t H5AC_stats(const H5F_t *f);
+
+#endif /* !_H5ACprivate_H */
+

Added: packages/hdf5/branches/upstream/current/src/H5ACpublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5ACpublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5ACpublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,40 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5ACproto.h
+ *                      Jul 10 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             Public include file for cache functions.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5ACpublic_H
+#define _H5ACpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Apkg.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Apkg.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Apkg.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,62 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol
+ *              Monday, Apr 20
+ *
+ * Purpose:     This file contains declarations which are visible only within
+ *              the H5A package.  Source files outside the H5A package should
+ *              include H5Aprivate.h instead.
+ */
+#ifndef H5A_PACKAGE
+#error "Do not include this file outside the H5A package!"
+#endif
+
+#ifndef _H5Apkg_H
+#define _H5Apkg_H
+
+/*
+ * Define this to enable debugging.
+ */
+#ifdef NDEBUG
+#  undef H5A_DEBUG
+#endif
+
+/* Get package's private header */
+#include "H5Aprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5Sprivate.h"		/* Dataspace				*/
+#include "H5Tprivate.h"		/* Datatype functions			*/
+
+struct H5A_t {
+    unsigned       initialized;/* Indicate whether the attribute has been modified */
+    unsigned       ent_opened; /* Object header entry opened? */
+    H5G_entry_t ent;        /* Object Header entry (for both datasets & groups) */
+    char        *name;      /* Attribute's name */
+    H5T_t       *dt;        /* Attribute's datatype */
+    size_t      dt_size;    /* Size of datatype on disk */
+    H5S_t       *ds;        /* Attribute's dataspace */
+    size_t      ds_size;    /* Size of dataspace on disk */
+    void        *data;      /* Attribute data (on a temporary basis) */
+    size_t      data_size;  /* Size of data on disk */
+};
+
+/* Function prototypes for H5A package scope */
+H5_DLL H5A_t       *H5A_copy(H5A_t *new_attr, const H5A_t *old_attr, unsigned update_flags);
+H5_DLL herr_t      H5A_free(H5A_t *attr);
+H5_DLL herr_t      H5A_close(H5A_t *attr);
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Aprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Aprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Aprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,33 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains private information about the H5D module
+ */
+#ifndef _H5Aprivate_H
+#define _H5Aprivate_H
+
+/* Include package's public header */
+#include "H5Apublic.h"
+
+/* Private headers needed by this file */
+#include "H5Gprivate.h"		/* Groups				*/
+
+/* Forward references of package typedefs */
+typedef struct H5A_t H5A_t;
+
+/* Library private functions in package */
+H5_DLL H5G_entry_t *H5A_entof(H5A_t *attr);
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Apublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Apublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Apublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,53 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains public declarations for the H5A module.
+ */
+#ifndef _H5Apublic_H
+#define _H5Apublic_H
+
+/* Public headers needed by this file */
+#include "H5Ipublic.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef herr_t (*H5A_operator_t)(hid_t location_id/*in*/,
+    const char *attr_name/*in*/, void *operator_data/*in,out*/);
+
+/* Public function prototypes */
+H5_DLL hid_t   H5Acreate(hid_t loc_id, const char *name, hid_t type_id,
+	 		 hid_t space_id, hid_t plist_id);
+H5_DLL hid_t   H5Aopen_name(hid_t loc_id, const char *name);
+H5_DLL hid_t   H5Aopen_idx(hid_t loc_id, unsigned idx);
+H5_DLL herr_t  H5Awrite(hid_t attr_id, hid_t type_id, const void *buf);
+H5_DLL herr_t  H5Aread(hid_t attr_id, hid_t type_id, void *buf);
+H5_DLL herr_t  H5Aclose(hid_t attr_id);
+H5_DLL hid_t   H5Aget_space(hid_t attr_id);
+H5_DLL hid_t   H5Aget_type(hid_t attr_id);
+H5_DLL ssize_t H5Aget_name(hid_t attr_id, size_t buf_size, char *buf);
+H5_DLL hsize_t H5Aget_storage_size(hid_t attr_id);
+H5_DLL int     H5Aget_num_attrs(hid_t loc_id);
+H5_DLL herr_t  H5Arename(hid_t loc_id, const char *old_name, const char *new_name);
+H5_DLL herr_t  H5Aiterate(hid_t loc_id, unsigned *attr_num, H5A_operator_t op,
+	  	          void *op_data);
+H5_DLL herr_t  H5Adelete(hid_t loc_id, const char *name);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _H5Apublic_H */

Added: packages/hdf5/branches/upstream/current/src/H5B.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5B.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5B.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2362 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:		hdf5btree.c
+ *			Jul 10 1997
+ *			Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:		Implements balanced, sibling-linked, N-ary trees
+ *			capable of storing any type of data with unique key
+ *			values.
+ *
+ *			A B-link-tree is a balanced tree where each node has
+ *			a pointer to its left and right siblings.  A
+ *			B-link-tree is a rooted tree having the following
+ *			properties:
+ *
+ *			1. Every node, x, has the following fields:
+ *
+ *			   a. level[x], the level in the tree at which node
+ *			      x appears.  Leaf nodes are at level zero.
+ *
+ *			   b. n[x], the number of children pointed to by the
+ *			      node.  Internal nodes point to subtrees while
+ *			      leaf nodes point to arbitrary data.
+ *
+ *			   c. The child pointers themselves, child[x,i] such
+ *			      that 0 <= i < n[x].
+ *
+ *			   d. n[x]+1 key values stored in increasing
+ *			      order:
+ *
+ *				key[x,0] < key[x,1] < ... < key[x,n[x]].
+ *
+ *			   e. left[x] is a pointer to the node's left sibling
+ *			      or the null pointer if this is the left-most
+ *			      node at this level in the tree.
+ *
+ *			   f. right[x] is a pointer to the node's right
+ *			      sibling or the null pointer if this is the
+ *			      right-most node at this level in the tree.
+ *
+ *			3. The keys key[x,i] partition the key spaces of the
+ *			   children of x:
+ *
+ *			      key[x,i] <= key[child[x,i],j] <= key[x,i+1]
+ *
+ *			   for any valid combination of i and j.
+ *
+ *			4. There are lower and upper bounds on the number of
+ *			   child pointers a node can contain.  These bounds
+ *			   can be expressed in terms of a fixed integer k>=2
+ *			   called the `minimum degree' of the B-tree.
+ *
+ *			   a. Every node other than the root must have at least
+ *			      k child pointers and k+1 keys.  If the tree is
+ *			      nonempty, the root must have at least one child
+ *			      pointer and two keys.
+ *
+ *			   b. Every node can contain at most 2k child pointers
+ *			      and 2k+1 keys.  A node is `full' if it contains
+ *			      exactly 2k child pointers and 2k+1 keys.
+ *
+ *			5. When searching for a particular value, V, and
+ *			   key[V] = key[x,i] for some node x and entry i,
+ *			   then:
+ *
+ *			   a. If i=0 the child[0] is followed.
+ *
+ *			   b. If i=n[x] the child[n[x]-1] is followed.
+ *
+ *			   c. Otherwise, the child that is followed
+ *			      (either child[x,i-1] or child[x,i]) is
+ *			      determined by the type of object to which the
+ *			      leaf nodes of the tree point and is controlled
+ *			      by the key comparison function registered for
+ *			      that type of B-tree.
+ *
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 4 Aug 1997
+ *	Added calls to H5E.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define H5B_PACKAGE		/*suppress error about including H5Bpkg	  */
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+/* private headers */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5Bpkg.h"		/* B-link trees				*/
+#include "H5Dprivate.h"		/* Datasets				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"		/* File access				*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MFprivate.h"	/* File memory management		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"         /* Property lists                       */
+
+/* Local macros */
+#define H5B_SIZEOF_HDR(F)						      \
+   (H5B_SIZEOF_MAGIC +		/*magic number				  */  \
+    4 +				/*type, level, num entries		  */  \
+    2*H5F_SIZEOF_ADDR(F))	/*left and right sibling addresses	  */
+#define H5B_NKEY(b,shared,idx)  ((b)->native+(shared)->nkey[(idx)])
+
+/* Local typedefs */
+
+/* PRIVATE PROTOTYPES */
+static H5B_ins_t H5B_insert_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+				   const H5B_class_t *type,
+				   uint8_t *lt_key,
+				   hbool_t *lt_key_changed,
+				   uint8_t *md_key, void *udata,
+				   uint8_t *rt_key,
+				   hbool_t *rt_key_changed,
+				   haddr_t *retval);
+static herr_t H5B_insert_child(H5B_t *bt, unsigned idx, haddr_t child,
+			       H5B_ins_t anchor, const void *md_key);
+static herr_t H5B_split(H5F_t *f, hid_t dxpl_id, H5B_t *old_bt,
+			haddr_t old_addr, unsigned idx,
+                        void *udata, haddr_t *new_addr/*out*/);
+static H5B_t * H5B_copy(const H5B_t *old_bt);
+static herr_t H5B_serialize(const H5F_t *f, const H5B_t *bt);
+#ifdef H5B_DEBUG
+static herr_t H5B_assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type,
+			 void *udata);
+#endif
+
+/* Metadata cache callbacks */
+static H5B_t *H5B_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_type, void *udata);
+static herr_t H5B_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5B_t *b);
+static herr_t H5B_dest(H5F_t *f, H5B_t *b);
+static herr_t H5B_clear(H5F_t *f, H5B_t *b, hbool_t destroy);
+static herr_t H5B_compute_size(const H5F_t *f, const H5B_t *bt, size_t *size_ptr);
+
+/* H5B inherits cache-like properties from H5AC */
+static const H5AC_class_t H5AC_BT[1] = {{
+    H5AC_BT_ID,
+    (H5AC_load_func_t)H5B_load,
+    (H5AC_flush_func_t)H5B_flush,
+    (H5AC_dest_func_t)H5B_dest,
+    (H5AC_clear_func_t)H5B_clear,
+    (H5AC_size_func_t)H5B_compute_size,
+}};
+
+/* Declare a PQ free list to manage the native block information */
+H5FL_BLK_DEFINE_STATIC(native_block);
+
+/* Declare a free list to manage the haddr_t sequence information */
+H5FL_SEQ_DEFINE_STATIC(haddr_t);
+
+/* Declare a free list to manage the H5B_shared_t struct */
+H5FL_DEFINE(H5B_shared_t);
+
+/* Declare a free list to manage the H5B_t struct */
+H5FL_DEFINE_STATIC(H5B_t);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_create
+ *
+ * Purpose:	Creates a new empty B-tree leaf node.  The UDATA pointer is
+ *		passed as an argument to the sizeof_rkey() method for the
+ *		B-tree.
+ *
+ * Return:	Success:	Non-negative, and the address of new node is
+ *				returned through the ADDR_P argument.
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 23 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		Changed the name of the ADDR argument to ADDR_P to make it
+ *		obvious that the address is passed by reference unlike most
+ *		other functions that take addresses.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B_create(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, void *udata,
+	   haddr_t *addr_p/*out*/)
+{
+    H5B_t		*bt = NULL;
+    H5B_shared_t        *shared=NULL;        /* Pointer to shared B-tree info */
+    herr_t		ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5B_create, FAIL)
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(type);
+    assert(addr_p);
+
+    /*
+     * Allocate file and memory data structures.
+     */
+    if (NULL==(bt = H5FL_MALLOC(H5B_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree root node")
+    HDmemset(&bt->cache_info,0,sizeof(H5AC_info_t));
+    bt->cache_info.is_dirty = TRUE;
+    bt->level = 0;
+    bt->left = HADDR_UNDEF;
+    bt->right = HADDR_UNDEF;
+    bt->nchildren = 0;
+    if((bt->rc_shared=(type->get_shared)(f, udata))==NULL)
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't retrieve B-tree node buffer")
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+    if (NULL==(bt->native=H5FL_BLK_MALLOC(native_block,shared->sizeof_keys)) ||
+            NULL==(bt->child=H5FL_SEQ_MALLOC(haddr_t,(size_t)shared->two_k)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree root node")
+    if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_BTREE, dxpl_id, (hsize_t)shared->sizeof_rnode)))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "file allocation failed for B-tree root node")
+
+    /*
+     * Cache the new B-tree node.
+     */
+    if (H5AC_set(f, dxpl_id, H5AC_BT, *addr_p, bt) < 0)
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "can't add B-tree root node to cache")
+#ifdef H5B_DEBUG
+    H5B_assert(f, dxpl_id, *addr_p, shared->type, udata);
+#endif
+
+done:
+    if (ret_value<0) {
+        if(shared && shared->sizeof_rnode>0) {
+            H5_CHECK_OVERFLOW(shared->sizeof_rnode,size_t,hsize_t);
+            (void)H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, *addr_p, (hsize_t)shared->sizeof_rnode);
+        } /* end if */
+	if (bt)
+            (void)H5B_dest(f,bt);
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /*lint !e818 Can't make udata a pointer to const */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_load
+ *
+ * Purpose:	Loads a B-tree node from the disk.
+ *
+ * Return:	Success:	Pointer to a new B-tree node.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 23 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ *	Quincey Koziol, 2002-7-180
+ *	Added dxpl parameter to allow more control over I/O from metadata
+ *      cache.
+ *-------------------------------------------------------------------------
+ */
+static H5B_t *
+H5B_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_type, void *udata)
+{
+    const H5B_class_t	*type = (const H5B_class_t *) _type;
+    H5B_t		*bt = NULL;
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    uint8_t		*p;             /* Pointer into raw data buffer */
+    uint8_t		*native;        /* Pointer to native keys */
+    unsigned		u;              /* Local index variable */
+    H5B_t		*ret_value;
+
+    FUNC_ENTER_NOAPI(H5B_load, NULL)
+
+    /* Check arguments */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(type);
+    assert(type->get_shared);
+
+    if (NULL==(bt = H5FL_MALLOC(H5B_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+    HDmemset(&bt->cache_info,0,sizeof(H5AC_info_t));
+    if((bt->rc_shared=(type->get_shared)(f, udata))==NULL)
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "can't retrieve B-tree node buffer")
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+    if (NULL==(bt->native=H5FL_BLK_MALLOC(native_block,shared->sizeof_keys)) ||
+            NULL==(bt->child=H5FL_SEQ_MALLOC(haddr_t,(size_t)shared->two_k)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    if (H5F_block_read(f, H5FD_MEM_BTREE, addr, shared->sizeof_rnode, dxpl_id, shared->page)<0)
+	HGOTO_ERROR(H5E_BTREE, H5E_READERROR, NULL, "can't read B-tree node")
+
+    p = shared->page;
+
+    /* magic number */
+    if (HDmemcmp(p, H5B_MAGIC, (size_t)H5B_SIZEOF_MAGIC))
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, NULL, "wrong B-tree signature")
+    p += 4;
+
+    /* node type and level */
+    if (*p++ != (uint8_t)type->id)
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, NULL, "incorrect B-tree node type")
+    bt->level = *p++;
+
+    /* entries used */
+    UINT16DECODE(p, bt->nchildren);
+
+    /* sibling pointers */
+    H5F_addr_decode(f, (const uint8_t **) &p, &(bt->left));
+    H5F_addr_decode(f, (const uint8_t **) &p, &(bt->right));
+
+    /* the child/key pairs */
+    native=bt->native;
+    for (u = 0; u < bt->nchildren; u++) {
+        /* Decode native key value */
+        if ((type->decode) (f, bt, p, native) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTDECODE, NULL, "unable to decode key")
+        p += shared->sizeof_rkey;
+        native += type->sizeof_nkey;
+
+        /* Decode address value */
+        H5F_addr_decode(f, (const uint8_t **) &p, bt->child + u);
+    }
+
+    /* Decode final key */
+    if(bt->nchildren>0) {
+        /* Decode native key value */
+        if ((type->decode) (f, bt, p, native) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTDECODE, NULL, "unable to decode key")
+    } /* end if */
+
+    /* Set return value */
+    ret_value = bt;
+
+done:
+    if (!ret_value && bt)
+        (void)H5B_dest(f,bt);
+    FUNC_LEAVE_NOAPI(ret_value)
+} /*lint !e818 Can't make udata a pointer to const */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5B_serialize
+ *
+ * Purpose:     Serialize the data structure for writing to disk or
+ *              storing on the SAP (for FPHDF5).
+ *
+ * Return:      Success:        SUCCEED
+ *              Failure:        FAIL
+ *
+ * Programmer:  Bill Wendling
+ *              wendling at ncsa.uiuc.edu
+ *              Sept. 15, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B_serialize(const H5F_t *f, const H5B_t *bt)
+{
+    H5B_shared_t *shared=NULL;  /* Pointer to shared B-tree info */
+    unsigned    u;
+    uint8_t    *p;              /* Pointer into raw data buffer */
+    uint8_t    *native;         /* Pointer to native keys */
+    herr_t      ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5B_serialize, FAIL)
+
+    /* check arguments */
+    assert(f);
+    assert(bt);
+    assert(bt->rc_shared);
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+
+    p = shared->page;
+
+    /* magic number */
+    HDmemcpy(p, H5B_MAGIC, (size_t)H5B_SIZEOF_MAGIC);
+    p += 4;
+
+    /* node type and level */
+    *p++ = (uint8_t)shared->type->id;
+    H5_CHECK_OVERFLOW(bt->level, unsigned, uint8_t);
+    *p++ = (uint8_t)bt->level;
+
+    /* entries used */
+    UINT16ENCODE(p, bt->nchildren);
+
+    /* sibling pointers */
+    H5F_addr_encode(f, &p, bt->left);
+    H5F_addr_encode(f, &p, bt->right);
+
+    /* child keys and pointers */
+    native=bt->native;
+    for (u = 0; u < bt->nchildren; ++u) {
+        /* encode the key */
+        if (shared->type->encode(f, bt, p, native) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTENCODE, FAIL, "unable to encode B-tree key")
+        p += shared->sizeof_rkey;
+        native += shared->type->sizeof_nkey;
+
+        /* encode the child address */
+        H5F_addr_encode(f, &p, bt->child[u]);
+    } /* end for */
+    if(bt->nchildren>0) {
+        /* Encode the final key */
+        if (shared->type->encode(f, bt, p, native) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTENCODE, FAIL, "unable to encode B-tree key")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_flush
+ *
+ * Purpose:	Flushes a dirty B-tree node to disk.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 23 1997
+ *
+ * Modifications:
+ *      rky 980828
+ *      Only p0 writes metadata to disk.
+ *
+ *      Robb Matzke, 1999-07-28
+ *      The ADDR argument is passed by value.
+ *
+ *	Quincey Koziol, 2002-7-180
+ *	Added dxpl parameter to allow more control over I/O from metadata
+ *      cache.
+ *
+ *      Bill Wendling, 2003-09-15
+ *      Separated out the bit of code that serializes the B-Tree
+ *      structure.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5B_t *bt)
+{
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    herr_t      ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5B_flush, FAIL)
+
+    /* check arguments */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(bt);
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+    assert(shared->type);
+    assert(shared->type->encode);
+
+    if (bt->cache_info.is_dirty) {
+        if (H5B_serialize(f, bt) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTSERIALIZE, FAIL, "unable to serialize B-tree")
+
+	/*
+         * Write the disk page.	We always write the header, but we don't
+         * bother writing data for the child entries that don't exist or
+         * for the final unchanged children.
+	 */
+	if (H5F_block_write(f, H5FD_MEM_BTREE, addr, shared->sizeof_rnode, dxpl_id, shared->page) < 0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTFLUSH, FAIL, "unable to save B-tree node to disk")
+
+	bt->cache_info.is_dirty = FALSE;
+    } /* end if */
+
+    if (destroy)
+        if (H5B_dest(f,bt) < 0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to destroy B-tree node")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_dest
+ *
+ * Purpose:	Destroys a B-tree node in memory.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Jan 15 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5B_dest(H5F_t UNUSED *f, H5B_t *bt)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5B_dest)
+
+    /*
+     * Check arguments.
+     */
+    assert(bt);
+    assert(bt->rc_shared);
+
+    H5FL_SEQ_FREE(haddr_t,bt->child);
+    H5FL_BLK_FREE(native_block,bt->native);
+    H5RC_DEC(bt->rc_shared);
+    H5FL_FREE(H5B_t,bt);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5B_dest() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_clear
+ *
+ * Purpose:	Mark a B-tree node in memory as non-dirty.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Mar 20 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B_clear(H5F_t *f, H5B_t *bt, hbool_t destroy)
+{
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5B_clear)
+
+    /*
+     * Check arguments.
+     */
+    assert(bt);
+
+    /* Reset the dirty flag.  */
+    bt->cache_info.is_dirty = FALSE;
+
+    if (destroy)
+        if (H5B_dest(f, bt) < 0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to destroy B-tree node")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5B_clear() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_compute_size
+ *
+ * Purpose:	Compute the size in bytes of the specified instance of
+ *		H5B_t on disk, and return it in *len_ptr.  On failure,
+ *		the value of *len_ptr is undefined.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	John Mainzer
+ *		5/13/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B_compute_size(const H5F_t *f, const H5B_t *bt, size_t *size_ptr)
+{
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    size_t	size;
+    herr_t      ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5B_compute_size)
+
+    /* check arguments */
+    HDassert(f);
+    HDassert(bt);
+    HDassert(bt->rc_shared);
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+    HDassert(shared->type);
+    HDassert(size_ptr);
+
+    /* Check node's size */
+    if ((size = H5B_nodesize(f, shared, NULL)) == 0)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGETSIZE, FAIL, "H5B_nodesize() failed")
+
+    /* Set size value */
+    *size_ptr = size;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5B_H5B_compute_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_find
+ *
+ * Purpose:	Locate the specified information in a B-tree and return
+ *		that information by filling in fields of the caller-supplied
+ *		UDATA pointer depending on the type of leaf node
+ *		requested.  The UDATA can point to additional data passed
+ *		to the key comparison function.
+ *
+ * Note:	This function does not follow the left/right sibling
+ *		pointers since it assumes that all nodes can be reached
+ *		from the parent node.
+ *
+ * Return:	Non-negative on success (if found, values returned through the
+ *              UDATA argument). Negative on failure (if not found, UDATA is
+ *              undefined).
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 23 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B_find(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *udata)
+{
+    H5B_t	*bt = NULL;
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    unsigned    idx=0, lt = 0, rt;        /* Final, left & right key indices */
+    int	        cmp = 1;                /* Key comparison value */
+    int		ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5B_find, FAIL)
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(type);
+    assert(type->decode);
+    assert(type->cmp3);
+    assert(type->found);
+    assert(H5F_addr_defined(addr));
+
+    /*
+     * Perform a binary search to locate the child which contains
+     * the thing for which we're searching.
+     */
+    if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata, H5AC_READ)))
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree node")
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+    rt = bt->nchildren;
+
+    while (lt < rt && cmp) {
+	idx = (lt + rt) / 2;
+	/* compare */
+	if ((cmp = (type->cmp3) (f, dxpl_id, H5B_NKEY(bt,shared,idx), udata,
+				 H5B_NKEY(bt,shared,idx+1))) < 0) {
+	    rt = idx;
+	} else {
+	    lt = idx+1;
+	}
+    }
+    if (cmp)
+        /* Note: don't push error on stack, leave that to next higher level,
+         *      since many times the B-tree is searched in order to determine
+         *      if an object exists in the B-tree or not. -QAK
+         */
+#ifdef OLD_WAY
+	HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "B-tree key not found")
+#else /* OLD_WAY */
+	HGOTO_DONE(FAIL)
+#endif /* OLD_WAY */
+
+    /*
+     * Follow the link to the subtree or to the data node.
+     */
+    assert(idx < bt->nchildren);
+
+    if (bt->level > 0) {
+	if (H5B_find(f, dxpl_id, type, bt->child[idx], udata) < 0)
+        /* Note: don't push error on stack, leave that to next higher level,
+         *      since many times the B-tree is searched in order to determine
+         *      if an object exists in the B-tree or not. -QAK
+         */
+#ifdef OLD_WAY
+	    HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "key not found in subtree")
+#else /* OLD_WAY */
+            HGOTO_DONE(FAIL)
+#endif /* OLD_WAY */
+    } else {
+	if ((type->found) (f, dxpl_id, bt->child[idx], H5B_NKEY(bt,shared,idx), udata) < 0)
+        /* Note: don't push error on stack, leave that to next higher level,
+         *      since many times the B-tree is searched in order to determine
+         *      if an object exists in the B-tree or not. -QAK
+         */
+#ifdef OLD_WAY
+            HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "key not found in leaf node")
+#else /* OLD_WAY */
+            HGOTO_DONE(FAIL)
+#endif /* OLD_WAY */
+    }
+
+done:
+    if (bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE) < 0)
+	HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release node")
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_split
+ *
+ * Purpose:	Split a single node into two nodes.  The old node will
+ *		contain the left children and the new node will contain the
+ *		right children.
+ *
+ *		The UDATA pointer is passed to the sizeof_rkey() method but is
+ *		otherwise unused.
+ *
+ *		The OLD_BT argument is a pointer to a protected B-tree
+ *		node.
+ *
+ * Return:	Non-negative on success (The address of the new node is
+ *              returned through the NEW_ADDR argument). Negative on failure.
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul  3 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The OLD_ADDR argument is passed by value. The NEW_ADDR
+ *		argument has been renamed to NEW_ADDR_P
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B_split(H5F_t *f, hid_t dxpl_id, H5B_t *old_bt, haddr_t old_addr,
+	  unsigned idx, void *udata, haddr_t *new_addr_p/*out*/)
+{
+    H5P_genplist_t *dx_plist;           /* Data transfer property list */
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    H5B_t	*new_bt = NULL, *tmp_bt = NULL;
+    unsigned	nleft, nright;          /* Number of keys in left & right halves */
+    double      split_ratios[3];        /* B-tree split ratios */
+    herr_t	ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5B_split)
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(old_bt);
+    assert(H5F_addr_defined(old_addr));
+
+    /*
+     * Initialize variables.
+     */
+    shared=H5RC_GET_OBJ(old_bt->rc_shared);
+    HDassert(shared);
+    assert(old_bt->nchildren == shared->two_k);
+
+    /* Get the dataset transfer property list */
+    if (NULL == (dx_plist = H5I_object(dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
+
+    /* Get B-tree split ratios */
+    if(H5P_get(dx_plist, H5D_XFER_BTREE_SPLIT_RATIO_NAME, &split_ratios[0])<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve B-tree split ratios")
+
+#ifdef H5B_DEBUG
+    if (H5DEBUG(B)) {
+	const char *side;
+	if (!H5F_addr_defined(old_bt->left) &&
+	    !H5F_addr_defined(old_bt->right)) {
+	    side = "ONLY";
+	} else if (!H5F_addr_defined(old_bt->right)) {
+	    side = "RIGHT";
+	} else if (!H5F_addr_defined(old_bt->left)) {
+	    side = "LEFT";
+	} else {
+	    side = "MIDDLE";
+	}
+	fprintf(H5DEBUG(B), "H5B_split: %3u {%5.3f,%5.3f,%5.3f} %6s",
+		shared->two_k, split_ratios[0], split_ratios[1], split_ratios[2], side);
+    }
+#endif
+
+    /*
+     * Decide how to split the children of the old node among the old node
+     * and the new node.
+     */
+    if (!H5F_addr_defined(old_bt->right)) {
+	nleft = (unsigned)((double)shared->two_k * split_ratios[2]);	/*right*/
+    } else if (!H5F_addr_defined(old_bt->left)) {
+	nleft = (unsigned)((double)shared->two_k * split_ratios[0]);	/*left*/
+    } else {
+	nleft = (unsigned)((double)shared->two_k * split_ratios[1]);	/*middle*/
+    }
+
+    /*
+     * Keep the new child in the same node as the child that split.  This can
+     * result in nodes that have an unused child when data is written
+     * sequentially, but it simplifies stuff below.
+     */
+    if (idx<nleft && nleft==shared->two_k) {
+	--nleft;
+    } else if (idx>=nleft && 0==nleft) {
+	nleft++;
+    }
+    nright = shared->two_k - nleft;
+#ifdef H5B_DEBUG
+    if (H5DEBUG(B))
+	fprintf(H5DEBUG(B), " split %3d/%-3d\n", nleft, nright);
+#endif
+
+    /*
+     * Create the new B-tree node.
+     */
+    if (H5B_create(f, dxpl_id, shared->type, udata, new_addr_p/*out*/) < 0)
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to create B-tree")
+    if (NULL==(new_bt=H5AC_protect(f, dxpl_id, H5AC_BT, *new_addr_p, shared->type, udata, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to protect B-tree")
+    new_bt->level = old_bt->level;
+
+    /*
+     * Copy data from the old node to the new node.
+     */
+    HDmemcpy(new_bt->native,
+	     old_bt->native + nleft * shared->type->sizeof_nkey,
+	     (nright+1) * shared->type->sizeof_nkey);
+    HDmemcpy(new_bt->child,
+            &old_bt->child[nleft],
+            nright*sizeof(haddr_t));
+
+    new_bt->nchildren = nright;
+
+    /*
+     * Truncate the old node.
+     */
+    old_bt->cache_info.is_dirty = TRUE;
+    old_bt->nchildren = nleft;
+
+    /*
+     * Update sibling pointers.
+     */
+    new_bt->left = old_addr;
+    new_bt->right = old_bt->right;
+
+    if (H5F_addr_defined(old_bt->right)) {
+	if (NULL == (tmp_bt = H5AC_protect(f, dxpl_id, H5AC_BT, old_bt->right, shared->type, udata, H5AC_WRITE)))
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load right sibling")
+
+	tmp_bt->cache_info.is_dirty = TRUE;
+	tmp_bt->left = *new_addr_p;
+
+        if (H5AC_unprotect(f, dxpl_id, H5AC_BT, old_bt->right, tmp_bt, FALSE) != SUCCEED)
+            HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node")
+        tmp_bt=NULL;    /* Make certain future references will be caught */
+    }
+
+    old_bt->right = *new_addr_p;
+
+done:
+    if (new_bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, *new_addr_p, new_bt, FALSE) < 0)
+        HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node")
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_insert
+ *
+ * Purpose:	Adds a new item to the B-tree.	If the root node of
+ *		the B-tree splits then the B-tree gets a new address.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 23 1997
+ *
+ * Modifications:
+ * 	Robb Matzke, 28 Sep 1998
+ *	The optional SPLIT_RATIOS[] indicates what percent of the child
+ *	pointers should go in the left node when a node splits.  There are
+ *	three possibilities and a separate split ratio can be specified for
+ *	each: [0] The node that split is the left-most node at its level of
+ *	the tree, [1] the node that split has left and right siblings, [2]
+ *	the node that split is the right-most node at its level of the tree.
+ *	When a node is an only node at its level then we use the right-most
+ *	rule.  If SPLIT_RATIOS is null then default values are used.
+ *
+ * 	Robb Matzke, 1999-07-28
+ *	The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B_insert(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
+           void *udata)
+{
+    /*
+     * These are defined this way to satisfy alignment constraints.
+     */
+    uint64_t	_lt_key[128], _md_key[128], _rt_key[128];
+    uint8_t	*lt_key=(uint8_t*)_lt_key;
+    uint8_t	*md_key=(uint8_t*)_md_key;
+    uint8_t	*rt_key=(uint8_t*)_rt_key;
+
+    hbool_t	lt_key_changed = FALSE, rt_key_changed = FALSE;
+    haddr_t	child, old_root;
+    unsigned	level;
+    H5B_t	*bt;
+    H5B_t	*new_bt;        /* Copy of B-tree info */
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    H5B_ins_t	my_ins = H5B_INS_ERROR;
+    herr_t	ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5B_insert, FAIL)
+
+    /* Check arguments. */
+    assert(f);
+    assert(type);
+    assert(type->sizeof_nkey <= sizeof _lt_key);
+    assert(H5F_addr_defined(addr));
+
+    if ((int)(my_ins = H5B_insert_helper(f, dxpl_id, addr, type, lt_key,
+            &lt_key_changed, md_key, udata, rt_key, &rt_key_changed, &child/*out*/))<0)
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to insert key")
+    if (H5B_INS_NOOP == my_ins)
+        HGOTO_DONE(SUCCEED)
+    assert(H5B_INS_RIGHT == my_ins);
+
+    /* the current root */
+    if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata, H5AC_READ)))
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to locate root of B-tree")
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+
+    level = bt->level;
+
+    if (!lt_key_changed)
+	HDmemcpy(lt_key, H5B_NKEY(bt,shared,0), type->sizeof_nkey);
+
+    if (H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE) != SUCCEED)
+        HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release new child")
+
+    bt = NULL;
+
+    /* the new node */
+    if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, child, type, udata, H5AC_READ)))
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load new node")
+
+    if (!rt_key_changed)
+	HDmemcpy(rt_key, H5B_NKEY(bt,shared,bt->nchildren), type->sizeof_nkey);
+
+    if (H5AC_unprotect(f, dxpl_id, H5AC_BT, child, bt, FALSE) != SUCCEED)
+        HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release new child")
+
+    bt = NULL;
+
+    /*
+     * Copy the old root node to some other file location and make the new
+     * root at the old root's previous address.	 This prevents the B-tree
+     * from "moving".
+     */
+    H5_CHECK_OVERFLOW(shared->sizeof_rnode,size_t,hsize_t);
+    if (HADDR_UNDEF==(old_root=H5MF_alloc(f, H5FD_MEM_BTREE, dxpl_id, (hsize_t)shared->sizeof_rnode)))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate file space to move root")
+
+    /* update the new child's left pointer */
+    if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, child, type, udata, H5AC_WRITE)))
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load new child")
+
+    bt->cache_info.is_dirty = TRUE;
+    bt->left = old_root;
+
+    if (H5AC_unprotect(f, dxpl_id, H5AC_BT, child, bt, FALSE) != SUCCEED)
+        HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release new child")
+
+    bt=NULL;    /* Make certain future references will be caught */
+
+    /*
+     * Move the node to the new location by checking it out & checking it in
+     * at the new location -QAK
+     */
+    /* Bring the old root into the cache if it's not already */
+    if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata, H5AC_WRITE)))
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load new child")
+
+    /* Make certain the old root info is marked as dirty before moving it, */
+    /* so it is certain to be written out at the new location */
+    bt->cache_info.is_dirty = TRUE;
+
+    /* Make a copy of the old root information */
+    if (NULL == (new_bt = H5B_copy(bt))) {
+        HCOMMON_ERROR(H5E_BTREE, H5E_CANTLOAD, "unable to copy old root");
+
+        if (H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE) != SUCCEED)
+            HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release new child")
+
+        HGOTO_DONE(FAIL)
+    }
+
+    if (H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE) != SUCCEED)
+        HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release new child")
+
+    bt=NULL;    /* Make certain future references will be caught */
+
+    /* Move the location of the old root on the disk */
+    if (H5AC_rename(f, H5AC_BT, addr, old_root) < 0)
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, FAIL, "unable to move B-tree root node")
+
+    /* clear the old root info at the old address (we already copied it) */
+    new_bt->cache_info.is_dirty = TRUE;
+    new_bt->left = HADDR_UNDEF;
+    new_bt->right = HADDR_UNDEF;
+
+    /* Set the new information for the copy */
+    new_bt->level = level + 1;
+    new_bt->nchildren = 2;
+
+    new_bt->child[0] = old_root;
+    HDmemcpy(H5B_NKEY(new_bt,shared,0), lt_key, shared->type->sizeof_nkey);
+
+    new_bt->child[1] = child;
+    HDmemcpy(H5B_NKEY(new_bt,shared,1), md_key, shared->type->sizeof_nkey);
+
+    HDmemcpy(H5B_NKEY(new_bt,shared,2), rt_key, shared->type->sizeof_nkey);
+
+    /* Insert the modified copy of the old root into the file again */
+    if (H5AC_set(f, dxpl_id, H5AC_BT, addr, new_bt) < 0)
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTFLUSH, FAIL, "unable to flush old B-tree root node")
+
+#ifdef H5B_DEBUG
+    H5B_assert(f, dxpl_id, addr, type, udata);
+#endif
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_insert_child
+ *
+ * Purpose:	Insert a child to the left or right of child[IDX] depending
+ *		on whether ANCHOR is H5B_INS_LEFT or H5B_INS_RIGHT. The BT
+ *		argument is a pointer to a protected B-tree node.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul  8 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The CHILD argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5B_insert_child(H5B_t *bt, unsigned idx, haddr_t child,
+    H5B_ins_t anchor, const void *md_key)
+{
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    uint8_t             *base;          /* Base offset for move */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5B_insert_child)
+
+    assert(bt);
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+    assert(bt->nchildren<shared->two_k);
+
+    bt->cache_info.is_dirty = TRUE;
+
+    /* Check for inserting right-most key into node (common when just appending
+     * records to an unlimited dimension chunked dataset)
+     */
+    base=H5B_NKEY(bt,shared,(idx+1));
+    if((idx+1)==bt->nchildren) {
+        /* Make room for the new key */
+        HDmemcpy(base + shared->type->sizeof_nkey, base,
+                  shared->type->sizeof_nkey);   /* No overlap possible - memcpy() OK */
+        HDmemcpy(base, md_key, shared->type->sizeof_nkey);
+
+        /* The MD_KEY is the left key of the new node */
+        if (H5B_INS_RIGHT == anchor)
+            idx++;  /* Don't have to memmove() child addresses down, just add new child */
+        else
+            /* Make room for the new child address */
+            bt->child[idx+1] = bt->child[idx];
+    } /* end if */
+    else {
+        /* Make room for the new key */
+        HDmemmove(base + shared->type->sizeof_nkey, base,
+                  (bt->nchildren - idx) * shared->type->sizeof_nkey);
+        HDmemcpy(base, md_key, shared->type->sizeof_nkey);
+
+        /* The MD_KEY is the left key of the new node */
+        if (H5B_INS_RIGHT == anchor)
+            idx++;
+
+        /* Make room for the new child address */
+        HDmemmove(bt->child + idx + 1, bt->child + idx,
+                  (bt->nchildren - idx) * sizeof(haddr_t));
+    } /* end if */
+
+    bt->child[idx] = child;
+    bt->nchildren += 1;
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_insert_helper
+ *
+ * Purpose:	Inserts the item UDATA into the tree rooted at ADDR and having
+ *		the specified type.
+ *
+ *		On return, if LT_KEY_CHANGED is non-zero, then LT_KEY is
+ *		the new native left key.  Similarily for RT_KEY_CHANGED
+ *		and RT_KEY.
+ *
+ *		If the node splits, then MD_KEY contains the key that
+ *		was split between the two nodes (that is, the key that
+ *		appears as the max key in the left node and the min key
+ *		in the right node).
+ *
+ * Return:	Success:	A B-tree operation.  The address of the new
+ *				node, if the node splits, is returned through
+ *				the NEW_NODE_P argument. The new node is always
+ *				to the right of the previous node.  This
+ *				function is called recursively and the return
+ *				value influences the behavior of the caller.
+ *				See also, declaration of H5B_ins_t.
+ *
+ *		Failure:	H5B_INS_ERROR
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul  9 1997
+ *
+ * Modifications:
+ *
+ * 	Robb Matzke, 28 Sep 1998
+ *	The optional SPLIT_RATIOS[] indicates what percent of the child
+ *	pointers should go in the left node when a node splits.  There are
+ *	three possibilities and a separate split ratio can be specified for
+ *	each: [0] The node that split is the left-most node at its level of
+ *	the tree, [1] the node that split has left and right siblings, [2]
+ *	the node that split is the right-most node at its level of the tree.
+ *	When a node is an only node at its level then we use the right-most
+ *	rule.  If SPLIT_RATIOS is null then default values are used.
+ *
+ * 	Robb Matzke, 1999-07-28
+ *	The ADDR argument is passed by value. The NEW_NODE argument is
+ *	renamed NEW_NODE_P
+ *-------------------------------------------------------------------------
+ */
+static H5B_ins_t
+H5B_insert_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type,
+                  uint8_t *lt_key, hbool_t *lt_key_changed,
+                  uint8_t *md_key, void *udata,
+		  uint8_t *rt_key, hbool_t *rt_key_changed,
+		  haddr_t *new_node_p/*out*/)
+{
+    H5B_t	*bt = NULL, *twin = NULL;
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    unsigned	lt = 0, idx = 0, rt;    /* Left, final & right index values */
+    int         cmp = -1;               /* Key comparison value */
+    haddr_t	child_addr = HADDR_UNDEF;
+    H5B_ins_t	my_ins = H5B_INS_ERROR;
+    H5B_ins_t	ret_value = H5B_INS_ERROR;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5B_insert_helper)
+
+    /*
+     * Check arguments
+     */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(type);
+    assert(type->decode);
+    assert(type->cmp3);
+    assert(type->new_node);
+    assert(lt_key);
+    assert(lt_key_changed);
+    assert(rt_key);
+    assert(rt_key_changed);
+    assert(new_node_p);
+
+    *lt_key_changed = FALSE;
+    *rt_key_changed = FALSE;
+
+    /*
+     * Use a binary search to find the child that will receive the new
+     * data.  When the search completes IDX points to the child that
+     * should get the new data.
+     */
+    if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, H5B_INS_ERROR, "unable to load node")
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+    rt = bt->nchildren;
+
+    while (lt < rt && cmp) {
+	idx = (lt + rt) / 2;
+	if ((cmp = (type->cmp3) (f, dxpl_id, H5B_NKEY(bt,shared,idx), udata,
+				 H5B_NKEY(bt,shared,idx+1))) < 0) {
+	    rt = idx;
+	} else {
+	    lt = idx + 1;
+	}
+    }
+
+    if (0 == bt->nchildren) {
+	/*
+	 * The value being inserted will be the only value in this tree. We
+	 * must necessarily be at level zero.
+	 */
+	assert(0 == bt->level);
+	if ((type->new_node)(f, dxpl_id, H5B_INS_FIRST, H5B_NKEY(bt,shared,0), udata,
+			     H5B_NKEY(bt,shared,1), bt->child + 0/*out*/) < 0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, H5B_INS_ERROR, "unable to create leaf node")
+	bt->nchildren = 1;
+	bt->cache_info.is_dirty = TRUE;
+	idx = 0;
+
+	if (type->follow_min) {
+	    if ((int)(my_ins = (type->insert)(f, dxpl_id, bt->child[idx], H5B_NKEY(bt,shared,idx),
+                     lt_key_changed, md_key, udata, H5B_NKEY(bt,shared,idx+1),
+                     rt_key_changed, &child_addr/*out*/)) < 0)
+		HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "unable to insert first leaf node")
+	} else {
+	    my_ins = H5B_INS_NOOP;
+	}
+
+    } else if (cmp < 0 && idx == 0 && bt->level > 0) {
+	/*
+	 * The value being inserted is less than any value in this tree.
+	 * Follow the minimum branch out of this node to a subtree.
+	 */
+	if ((int)(my_ins = H5B_insert_helper(f, dxpl_id, bt->child[idx], type,
+                H5B_NKEY(bt,shared,idx), lt_key_changed, md_key,
+                udata, H5B_NKEY(bt,shared,idx+1), rt_key_changed,
+                &child_addr/*out*/))<0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert minimum subtree")
+    } else if (cmp < 0 && idx == 0 && type->follow_min) {
+	/*
+	 * The value being inserted is less than any leaf node out of this
+	 * current node.  Follow the minimum branch to a leaf node and let the
+	 * subclass handle the problem.
+	 */
+	if ((int)(my_ins = (type->insert)(f, dxpl_id, bt->child[idx], H5B_NKEY(bt,shared,idx),
+                 lt_key_changed, md_key, udata, H5B_NKEY(bt,shared,idx+1),
+                 rt_key_changed, &child_addr/*out*/)) < 0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert minimum leaf node")
+    } else if (cmp < 0 && idx == 0) {
+	/*
+	 * The value being inserted is less than any leaf node out of the
+	 * current node. Create a new minimum leaf node out of this B-tree
+	 * node. This node is not empty (handled above).
+	 */
+	my_ins = H5B_INS_LEFT;
+	HDmemcpy(md_key, H5B_NKEY(bt,shared,idx), type->sizeof_nkey);
+	if ((type->new_node)(f, dxpl_id, H5B_INS_LEFT, H5B_NKEY(bt,shared,idx), udata,
+			     md_key, &child_addr/*out*/) < 0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert minimum leaf node")
+	*lt_key_changed = TRUE;
+
+    } else if (cmp > 0 && idx + 1 >= bt->nchildren && bt->level > 0) {
+	/*
+	 * The value being inserted is larger than any value in this tree.
+	 * Follow the maximum branch out of this node to a subtree.
+	 */
+	idx = bt->nchildren - 1;
+	if ((int)(my_ins = H5B_insert_helper(f, dxpl_id, bt->child[idx], type,
+                H5B_NKEY(bt,shared,idx), lt_key_changed, md_key, udata,
+                H5B_NKEY(bt,shared,idx+1), rt_key_changed, &child_addr/*out*/)) < 0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert maximum subtree")
+    } else if (cmp > 0 && idx + 1 >= bt->nchildren && type->follow_max) {
+	/*
+	 * The value being inserted is larger than any leaf node out of the
+	 * current node.  Follow the maximum branch to a leaf node and let the
+	 * subclass handle the problem.
+	 */
+	idx = bt->nchildren - 1;
+	if ((int)(my_ins = (type->insert)(f, dxpl_id, bt->child[idx], H5B_NKEY(bt,shared,idx),
+                 lt_key_changed, md_key, udata, H5B_NKEY(bt,shared,idx+1),
+                 rt_key_changed, &child_addr/*out*/)) < 0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert maximum leaf node")
+    } else if (cmp > 0 && idx + 1 >= bt->nchildren) {
+	/*
+	 * The value being inserted is larger than any leaf node out of the
+	 * current node.  Create a new maximum leaf node out of this B-tree
+	 * node.
+	 */
+	idx = bt->nchildren - 1;
+	my_ins = H5B_INS_RIGHT;
+	HDmemcpy(md_key, H5B_NKEY(bt,shared,idx+1), type->sizeof_nkey);
+	if ((type->new_node)(f, dxpl_id, H5B_INS_RIGHT, md_key, udata,
+			     H5B_NKEY(bt,shared,idx+1), &child_addr/*out*/) < 0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert maximum leaf node")
+	*rt_key_changed = TRUE;
+
+    } else if (cmp) {
+	/*
+	 * We couldn't figure out which branch to follow out of this node. THIS
+	 * IS A MAJOR PROBLEM THAT NEEDS TO BE FIXED --rpm.
+	 */
+	assert("INTERNAL HDF5 ERROR (contact rpm)" && 0);
+#ifdef NDEBUG
+	HDabort();
+#endif /* NDEBUG */
+    } else if (bt->level > 0) {
+	/*
+	 * Follow a branch out of this node to another subtree.
+	 */
+	assert(idx < bt->nchildren);
+	if ((int)(my_ins = H5B_insert_helper(f, dxpl_id, bt->child[idx], type,
+                H5B_NKEY(bt,shared,idx), lt_key_changed, md_key, udata,
+                H5B_NKEY(bt,shared,idx+1), rt_key_changed, &child_addr/*out*/)) < 0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert subtree")
+    } else {
+	/*
+	 * Follow a branch out of this node to a leaf node of some other type.
+	 */
+	assert(idx < bt->nchildren);
+	if ((int)(my_ins = (type->insert)(f, dxpl_id, bt->child[idx], H5B_NKEY(bt,shared,idx),
+                  lt_key_changed, md_key, udata, H5B_NKEY(bt,shared,idx+1),
+                  rt_key_changed, &child_addr/*out*/)) < 0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert leaf node")
+    }
+    assert((int)my_ins >= 0);
+
+    /*
+     * Update the left and right keys of the current node.
+     */
+    if (*lt_key_changed) {
+	bt->cache_info.is_dirty = TRUE;
+	if (idx > 0)
+	    *lt_key_changed = FALSE;
+	else
+	    HDmemcpy(lt_key, H5B_NKEY(bt,shared,idx), type->sizeof_nkey);
+    }
+    if (*rt_key_changed) {
+	bt->cache_info.is_dirty = TRUE;
+	if (idx+1 < bt->nchildren)
+	    *rt_key_changed = FALSE;
+	else
+	    HDmemcpy(rt_key, H5B_NKEY(bt,shared,idx+1), type->sizeof_nkey);
+    }
+    if (H5B_INS_CHANGE == my_ins) {
+	/*
+	 * The insertion simply changed the address for the child.
+	 */
+	bt->child[idx] = child_addr;
+	bt->cache_info.is_dirty = TRUE;
+	ret_value = H5B_INS_NOOP;
+
+    } else if (H5B_INS_LEFT == my_ins || H5B_INS_RIGHT == my_ins) {
+        H5B_t	*tmp_bt;
+
+	/*
+	 * If this node is full then split it before inserting the new child.
+	 */
+	if (bt->nchildren == shared->two_k) {
+	    if (H5B_split(f, dxpl_id, bt, addr, idx, udata, new_node_p/*out*/)<0)
+		HGOTO_ERROR(H5E_BTREE, H5E_CANTSPLIT, H5B_INS_ERROR, "unable to split node")
+	    if (NULL == (twin = H5AC_protect(f, dxpl_id, H5AC_BT, *new_node_p, type, udata, H5AC_WRITE)))
+		HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, H5B_INS_ERROR, "unable to load node")
+	    if (idx<bt->nchildren) {
+		tmp_bt = bt;
+	    } else {
+		idx -= bt->nchildren;
+		tmp_bt = twin;
+	    }
+	} else {
+	    tmp_bt = bt;
+	}
+
+	/* Insert the child */
+	if (H5B_insert_child(tmp_bt, idx, child_addr, my_ins, md_key) < 0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTINSERT, H5B_INS_ERROR, "can't insert child")
+    }
+
+    /*
+     * If this node split, return the mid key (the one that is shared
+     * by the left and right node).
+     */
+    if (twin) {
+	HDmemcpy(md_key, H5B_NKEY(twin,shared,0), type->sizeof_nkey);
+	ret_value = H5B_INS_RIGHT;
+#ifdef H5B_DEBUG
+	/*
+	 * The max key in the original left node must be equal to the min key
+	 * in the new node.
+	 */
+	cmp = (type->cmp2) (f, dxpl_id, H5B_NKEY(bt,shared,bt->nchildren), udata,
+			    H5B_NKEY(twin,shared,0));
+	assert(0 == cmp);
+#endif
+    } else {
+	ret_value = H5B_INS_NOOP;
+    }
+
+done:
+    {
+	herr_t e1 = (bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE) < 0);
+	herr_t e2 = (twin && H5AC_unprotect(f, dxpl_id, H5AC_BT, *new_node_p, twin, FALSE)<0);
+	if (e1 || e2)  /*use vars to prevent short-circuit of side effects */
+	    HDONE_ERROR(H5E_BTREE, H5E_PROTECT, H5B_INS_ERROR, "unable to release node(s)")
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_iterate
+ *
+ * Purpose:	Calls the list callback for each leaf node of the
+ *		B-tree, passing it the UDATA structure.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 23 1997
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-04-21
+ *		The key values are passed to the function which is called.
+ *
+ * 		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ *		Quincey Koziol, 2002-04-22
+ *		Changed callback to function pointer from static function
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B_iterate (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, H5B_operator_t op, haddr_t addr, void *udata)
+{
+    H5B_t		*bt = NULL;
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    haddr_t		next_addr;
+    haddr_t		cur_addr = HADDR_UNDEF;
+    haddr_t		*child = NULL;
+    uint8_t		*key = NULL;
+    unsigned		nchildren;      /* Number of children of B-tree node */
+    unsigned		u;              /* Local index variable */
+    unsigned            level;
+    haddr_t             left_child;
+    herr_t		ret_value;
+
+    FUNC_ENTER_NOAPI(H5B_iterate, FAIL)
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(type);
+    assert(op);
+    assert(H5F_addr_defined(addr));
+    assert(udata);
+
+    if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata, H5AC_READ)))
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree node")
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+
+    level = bt->level;
+    left_child = bt->child[0];
+
+    if (H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE) < 0)
+        HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node")
+
+    bt = NULL;  /* Make certain future references will be caught */
+
+    if (level > 0) {
+	/* Keep following the left-most child until we reach a leaf node. */
+	if ((ret_value=H5B_iterate(f, dxpl_id, type, op, left_child, udata))<0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "unable to list B-tree node")
+    } else {
+	/*
+	 * We've reached the left-most leaf.  Now follow the right-sibling
+	 * pointer from leaf to leaf until we've processed all leaves.
+	 */
+	if (NULL==(child=H5FL_SEQ_MALLOC(haddr_t,(size_t)shared->two_k)) ||
+                NULL==(key=H5FL_BLK_MALLOC(native_block,shared->sizeof_keys)))
+	    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+	for (cur_addr=addr, ret_value=0; H5F_addr_defined(cur_addr) && !ret_value; cur_addr=next_addr) {
+	    /*
+	     * Save all the child addresses and native keys since we can't
+	     * leave the B-tree node protected during an application
+	     * callback.
+	     */
+	    if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, cur_addr, type, udata, H5AC_READ)))
+		HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "B-tree node")
+
+            HDmemcpy(child, bt->child, bt->nchildren*sizeof(haddr_t));
+            HDmemcpy(key, bt->native, shared->sizeof_keys);
+
+	    next_addr = bt->right;
+	    nchildren = bt->nchildren;
+
+            if (H5AC_unprotect(f, dxpl_id, H5AC_BT, cur_addr, bt, FALSE) < 0)
+                HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node")
+
+	    bt = NULL;
+
+	    /*
+	     * Perform the iteration operator, which might invoke an
+	     * application callback.
+	     */
+	    for (u=0, ret_value=H5B_ITER_CONT; u<nchildren && !ret_value; u++) {
+		ret_value = (*op)(f, dxpl_id, key+u*type->sizeof_nkey,
+                         child[u], key+(u+1)*type->sizeof_nkey, udata);
+		if (ret_value<0)
+		    HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "iterator function failed")
+	    } /* end for */
+	} /* end for */
+    } /* end else */
+
+done:
+    if(child!=NULL)
+        H5FL_SEQ_FREE(haddr_t,child);
+    if(key!=NULL)
+        H5FL_BLK_FREE(native_block,key);
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_remove_helper
+ *
+ * Purpose:	The recursive part of removing an item from a B-tree.  The
+ *		sub B-tree that is being considered is located at ADDR and
+ *		the item to remove is described by UDATA.  If the removed
+ *		item falls at the left or right end of the current level then
+ *		it might be necessary to adjust the left and/or right keys
+ *		(LT_KEY and/or RT_KEY) to to indicate that they changed by
+ * 		setting LT_KEY_CHANGED and/or RT_KEY_CHANGED.
+ *
+ * Return:	Success:	A B-tree operation, see comments for
+ *				H5B_ins_t declaration.  This function is
+ *				called recursively and the return value
+ *				influences the actions of the caller. It is
+ *				also called by H5B_remove().
+ *
+ *		Failure:	H5B_INS_ERROR, a negative value.
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, September 16, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+static H5B_ins_t
+H5B_remove_helper(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type,
+		  int level, uint8_t *lt_key/*out*/,
+		  hbool_t *lt_key_changed/*out*/, void *udata,
+		  uint8_t *rt_key/*out*/, hbool_t *rt_key_changed/*out*/)
+{
+    H5B_t	*bt = NULL, *sibling = NULL;
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    unsigned    idx=0, lt=0, rt;        /* Final, left & right indices */
+    int         cmp=1;                  /* Key comparison value */
+    H5B_ins_t	ret_value = H5B_INS_ERROR;
+
+    FUNC_ENTER_NOAPI(H5B_remove_helper, H5B_INS_ERROR)
+
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(type);
+    assert(type->decode);
+    assert(type->cmp3);
+    assert(lt_key && lt_key_changed);
+    assert(udata);
+    assert(rt_key && rt_key_changed);
+
+    /*
+     * Perform a binary search to locate the child which contains the thing
+     * for which we're searching.
+     */
+    if (NULL==(bt=H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, H5B_INS_ERROR, "unable to load B-tree node")
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+
+    rt = bt->nchildren;
+    while (lt<rt && cmp) {
+	idx = (lt+rt)/2;
+	if ((cmp=(type->cmp3)(f, dxpl_id, H5B_NKEY(bt,shared,idx), udata,
+			      H5B_NKEY(bt,shared,idx+1)))<0) {
+	    rt = idx;
+	} else {
+	    lt = idx+1;
+	}
+    }
+    if (cmp)
+	HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, H5B_INS_ERROR, "B-tree key not found")
+
+    /*
+     * Follow the link to the subtree or to the data node.  The return value
+     * will be one of H5B_INS_ERROR, H5B_INS_NOOP, or H5B_INS_REMOVE.
+     */
+    assert(idx<bt->nchildren);
+    if (bt->level>0) {
+	/* We're at an internal node -- call recursively */
+	if ((int)(ret_value=H5B_remove_helper(f, dxpl_id,
+                 bt->child[idx], type, level+1, H5B_NKEY(bt,shared,idx)/*out*/,
+                 lt_key_changed/*out*/, udata, H5B_NKEY(bt,shared,idx+1)/*out*/,
+                 rt_key_changed/*out*/))<0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, H5B_INS_ERROR, "key not found in subtree")
+    } else if (type->remove) {
+	/*
+	 * We're at a leaf node but the leaf node points to an object that
+	 * has a removal method.  Pass the removal request to the pointed-to
+	 * object and let it decide how to progress.
+	 */
+	if ((int)(ret_value=(type->remove)(f, dxpl_id,
+                  bt->child[idx], H5B_NKEY(bt,shared,idx), lt_key_changed, udata,
+                  H5B_NKEY(bt,shared,idx+1), rt_key_changed))<0)
+	    HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, H5B_INS_ERROR, "key not found in leaf node")
+    } else {
+	/*
+	 * We're at a leaf node which points to an object that has no removal
+	 * method.  The best we can do is to leave the object alone but
+	 * remove the B-tree reference to the object.
+	 */
+	*lt_key_changed = FALSE;
+	*rt_key_changed = FALSE;
+	ret_value = H5B_INS_REMOVE;
+    }
+
+    /*
+     * Update left and right key dirty bits if the subtree indicates that they
+     * have changed.  If the subtree's left key changed and the subtree is the
+     * left-most child of the current node then we must update the key in our
+     * parent and indicate that it changed.  Similarly, if the right subtree
+     * key changed and it's the right most key of this node we must update
+     * our right key and indicate that it changed.
+     */
+    if (*lt_key_changed) {
+	bt->cache_info.is_dirty = TRUE;
+	if (idx>0) {
+            /* Don't propagate change out of this B-tree node */
+	    *lt_key_changed = FALSE;
+	} else {
+	    HDmemcpy(lt_key, H5B_NKEY(bt,shared,idx), type->sizeof_nkey);
+	}
+    }
+    if (*rt_key_changed) {
+	bt->cache_info.is_dirty = TRUE;
+	if (idx+1<bt->nchildren) {
+            /* Don't propagate change out of this B-tree node */
+	    *rt_key_changed = FALSE;
+	} else {
+	    HDmemcpy(rt_key, H5B_NKEY(bt,shared,idx+1), type->sizeof_nkey);
+
+            /* Since our right key was changed, we must check for a right
+             * sibling and change it's left-most key as well.
+             * (Handle the ret_value==H5B_INS_REMOVE case below)
+             */
+            if (ret_value!=H5B_INS_REMOVE && level>0) {
+                if (H5F_addr_defined(bt->right)) {
+                    if (NULL == (sibling = H5AC_protect(f, dxpl_id, H5AC_BT, bt->right, type, udata, H5AC_WRITE)))
+                        HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, H5B_INS_ERROR, "unable to unlink node from tree")
+
+                    /* Make certain the native key for the right sibling is set up */
+                    HDmemcpy(H5B_NKEY(sibling,shared,0), H5B_NKEY(bt,shared,idx+1), type->sizeof_nkey);
+                    sibling->cache_info.is_dirty = TRUE;
+
+                    if (H5AC_unprotect(f, dxpl_id, H5AC_BT, bt->right, sibling, FALSE) != SUCCEED)
+                        HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, H5B_INS_ERROR, "unable to release node from tree")
+
+                    sibling=NULL;   /* Make certain future references will be caught */
+                }
+            }
+	}
+    }
+
+    /*
+     * If the subtree returned H5B_INS_REMOVE then we should remove the
+     * subtree entry from the current node.  There are four cases:
+     */
+    if (H5B_INS_REMOVE==ret_value && 1==bt->nchildren) {
+	/*
+	 * The subtree is the only child of this node.  Discard both
+	 * keys and the subtree pointer. Free this node (unless it's the
+	 * root node) and return H5B_INS_REMOVE.
+	 */
+	bt->cache_info.is_dirty = TRUE;
+	bt->nchildren = 0;
+	if (level>0) {
+	    if (H5F_addr_defined(bt->left)) {
+		if (NULL == (sibling = H5AC_protect(f, dxpl_id, H5AC_BT, bt->left, type, udata, H5AC_WRITE)))
+		    HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, H5B_INS_ERROR, "unable to load node from tree")
+
+		sibling->right = bt->right;
+		sibling->cache_info.is_dirty = TRUE;
+
+                if (H5AC_unprotect(f, dxpl_id, H5AC_BT, bt->left, sibling, FALSE) != SUCCEED)
+                    HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, H5B_INS_ERROR, "unable to release node from tree")
+
+                sibling=NULL;   /* Make certain future references will be caught */
+	    }
+	    if (H5F_addr_defined(bt->right)) {
+		if (NULL == (sibling = H5AC_protect(f, dxpl_id, H5AC_BT, bt->right, type, udata, H5AC_WRITE)))
+		    HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, H5B_INS_ERROR, "unable to unlink node from tree")
+
+                /* Copy left-most key from deleted node to left-most key in it's right neighbor */
+                HDmemcpy(H5B_NKEY(sibling,shared,0), H5B_NKEY(bt,shared,0), type->sizeof_nkey);
+
+		sibling->left = bt->left;
+		sibling->cache_info.is_dirty = TRUE;
+
+                if (H5AC_unprotect(f, dxpl_id, H5AC_BT, bt->right, sibling, FALSE) != SUCCEED)
+                    HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, H5B_INS_ERROR, "unable to release node from tree")
+
+                sibling=NULL;   /* Make certain future references will be caught */
+	    }
+	    bt->left = HADDR_UNDEF;
+	    bt->right = HADDR_UNDEF;
+            H5_CHECK_OVERFLOW(shared->sizeof_rnode,size_t,hsize_t);
+	    if (H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, addr, (hsize_t)shared->sizeof_rnode)<0
+                    || H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, TRUE)<0) {
+		bt = NULL;
+		HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, H5B_INS_ERROR, "unable to free B-tree node")
+	    }
+	    bt = NULL;
+	}
+
+    } else if (H5B_INS_REMOVE==ret_value && 0==idx) {
+	/*
+	 * The subtree is the left-most child of this node. We discard the
+	 * left-most key and the left-most child (the child has already been
+	 * freed) and shift everything down by one.  We copy the new left-most
+	 * key into lt_key and notify the caller that the left key has
+	 * changed.  Return H5B_INS_NOOP.
+	 */
+	bt->cache_info.is_dirty = TRUE;
+	bt->nchildren -= 1;
+
+	HDmemmove(bt->native,
+		  bt->native + type->sizeof_nkey,
+		  (bt->nchildren+1) * type->sizeof_nkey);
+	HDmemmove(bt->child,
+		  bt->child+1,
+		  bt->nchildren * sizeof(haddr_t));
+	HDmemcpy(lt_key, H5B_NKEY(bt,shared,0), type->sizeof_nkey);
+	*lt_key_changed = TRUE;
+	ret_value = H5B_INS_NOOP;
+
+    } else if (H5B_INS_REMOVE==ret_value && idx+1==bt->nchildren) {
+	/*
+	 * The subtree is the right-most child of this node.  We discard the
+	 * right-most key and the right-most child (the child has already been
+	 * freed).  We copy the new right-most key into rt_key and notify the
+	 * caller that the right key has changed.  Return H5B_INS_NOOP.
+	 */
+	bt->cache_info.is_dirty = TRUE;
+	bt->nchildren -= 1;
+	HDmemcpy(rt_key, H5B_NKEY(bt,shared,bt->nchildren), type->sizeof_nkey);
+	*rt_key_changed = TRUE;
+
+        /* Since our right key was changed, we must check for a right
+         * sibling and change it's left-most key as well.
+         * (Handle the ret_value==H5B_INS_REMOVE case below)
+         */
+        if (level>0) {
+            if (H5F_addr_defined(bt->right)) {
+                if (NULL == (sibling = H5AC_protect(f, dxpl_id, H5AC_BT, bt->right, type, udata, H5AC_WRITE)))
+                    HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, H5B_INS_ERROR, "unable to unlink node from tree")
+
+                HDmemcpy(H5B_NKEY(sibling,shared,0), H5B_NKEY(bt,shared,bt->nchildren), type->sizeof_nkey);
+                sibling->cache_info.is_dirty = TRUE;
+
+                if (H5AC_unprotect(f, dxpl_id, H5AC_BT, bt->right, sibling, FALSE) != SUCCEED)
+                    HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, H5B_INS_ERROR, "unable to release node from tree")
+
+                sibling=NULL;   /* Make certain future references will be caught */
+            }
+        }
+
+	ret_value = H5B_INS_NOOP;
+
+    } else if (H5B_INS_REMOVE==ret_value) {
+	/*
+	 * There are subtrees out of this node to both the left and right of
+	 * the subtree being removed.  The key to the left of the subtree and
+	 * the subtree are removed from this node and all keys and nodes to
+	 * the right are shifted left by one place.  The subtree has already
+	 * been freed). Return H5B_INS_NOOP.
+	 */
+	bt->cache_info.is_dirty = TRUE;
+	bt->nchildren -= 1;
+
+	HDmemmove(bt->native + idx * type->sizeof_nkey,
+		  bt->native + (idx+1) * type->sizeof_nkey,
+		  (bt->nchildren+1-idx) * type->sizeof_nkey);
+	HDmemmove(bt->child+idx,
+		  bt->child+idx+1,
+		  (bt->nchildren-idx) * sizeof(haddr_t));
+	ret_value = H5B_INS_NOOP;
+
+    } else {
+	ret_value = H5B_INS_NOOP;
+    }
+
+done:
+    if (bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE)<0)
+	HDONE_ERROR(H5E_BTREE, H5E_PROTECT, H5B_INS_ERROR, "unable to release node")
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_remove
+ *
+ * Purpose:	Removes an item from a B-tree.
+ *
+ * Note:	The current version does not attempt to rebalance the tree.
+ *              (Read the paper Yao & Lehman paper for details on why)
+ *
+ * Return:	Non-negative on success/Negative on failure (failure includes
+ *		not being able to find the object which is to be removed).
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, September 16, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B_remove(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *udata)
+{
+    /* These are defined this way to satisfy alignment constraints */
+    uint64_t	_lt_key[128], _rt_key[128];
+    uint8_t	*lt_key = (uint8_t*)_lt_key;	/*left key*/
+    uint8_t	*rt_key = (uint8_t*)_rt_key;	/*right key*/
+    hbool_t	lt_key_changed = FALSE;		/*left key changed?*/
+    hbool_t	rt_key_changed = FALSE;		/*right key changed?*/
+    H5B_t	*bt = NULL;			/*btree node */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5B_remove, FAIL)
+
+    /* Check args */
+    assert(f);
+    assert(type);
+    assert(type->sizeof_nkey <= sizeof _lt_key);
+    assert(H5F_addr_defined(addr));
+
+    /* The actual removal */
+    if (H5B_remove_helper(f, dxpl_id, addr, type, 0, lt_key, &lt_key_changed,
+			  udata, rt_key, &rt_key_changed)==H5B_INS_ERROR)
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTINIT, FAIL, "unable to remove entry from B-tree")
+
+    /*
+     * If the B-tree is now empty then make sure we mark the root node as
+     * being at level zero
+     */
+    if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree root node")
+
+    if (0==bt->nchildren && 0!=bt->level) {
+	bt->level = 0;
+	bt->cache_info.is_dirty = TRUE;
+    }
+
+    if (H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE) != SUCCEED)
+        HGOTO_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release node")
+
+    bt=NULL;    /* Make certain future references will be caught */
+
+#ifdef H5B_DEBUG
+    H5B_assert(f, dxpl_id, addr, type, udata);
+#endif
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_delete
+ *
+ * Purpose:	Deletes an entire B-tree from the file, calling the 'remove'
+ *              callbacks for each node.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, March 20, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B_delete(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr, void *udata)
+{
+    H5B_t	*bt;                    /* B-tree node being operated on */
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    unsigned    u;                      /* Local index variable */
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5B_delete, FAIL)
+
+    /* Check args */
+    assert(f);
+    assert(type);
+    assert(H5F_addr_defined(addr));
+
+    /* Lock this B-tree node into memory for now */
+    if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree node")
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+
+    /* Iterate over all children in tree, deleting them */
+    if (bt->level > 0) {
+        /* Iterate over all children in node, deleting them */
+        for (u=0; u<bt->nchildren; u++)
+            if (H5B_delete(f, dxpl_id, type, bt->child[u], udata)<0)
+                HGOTO_ERROR(H5E_BTREE, H5E_CANTLIST, FAIL, "unable to delete B-tree node")
+
+    } else {
+        hbool_t lt_key_changed, rt_key_changed; /* Whether key changed (unused here, just for callback) */
+
+        /* Check for removal callback */
+        if(type->remove) {
+            /* Iterate over all entries in node, calling callback */
+            for (u=0; u<bt->nchildren; u++) {
+                /* Call user's callback for each entry */
+                if ((type->remove)(f, dxpl_id,
+                          bt->child[u], H5B_NKEY(bt,shared,u), &lt_key_changed, udata,
+                          H5B_NKEY(bt,shared,u+1), &rt_key_changed)<H5B_INS_NOOP)
+                    HGOTO_ERROR(H5E_BTREE, H5E_NOTFOUND, FAIL, "can't remove B-tree node")
+            } /* end for */
+        } /* end if */
+    } /* end else */
+
+    /* Delete this node from disk */
+    if (H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, addr, (hsize_t)shared->sizeof_rnode)<0)
+        HGOTO_ERROR(H5E_BTREE, H5E_CANTFREE, FAIL, "unable to free B-tree node")
+
+done:
+    if (bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, TRUE)<0)
+        HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node in cache")
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5B_delete() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_nodesize
+ *
+ * Purpose:	Returns the number of bytes needed for this type of
+ *		B-tree node.  The size is the size of the header plus
+ *		enough space for 2t child pointers and 2t+1 keys.
+ *
+ *		If TOTAL_NKEY_SIZE is non-null, what it points to will
+ *		be initialized with the total number of bytes required to
+ *		hold all the key values in native order.
+ *
+ * Return:	Success:	Size of node in file.
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul  3 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5B_nodesize(const H5F_t *f, const H5B_shared_t *shared,
+	     size_t *total_nkey_size/*out*/)
+{
+    size_t	size;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5B_nodesize)
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(shared);
+    assert(shared->two_k > 0);
+    assert(shared->sizeof_rkey > 0);
+
+    /*
+     * Total native key size.
+     */
+    if (total_nkey_size)
+	*total_nkey_size = (shared->two_k + 1) * shared->type->sizeof_nkey;
+
+    /*
+     * Total node size.
+     */
+    size = (H5B_SIZEOF_HDR(f) + /*node header	*/
+	    shared->two_k * H5F_SIZEOF_ADDR(f) +	/*child pointers */
+	    (shared->two_k + 1) * shared->sizeof_rkey);	/*keys		*/
+
+    FUNC_LEAVE_NOAPI(size)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_copy
+ *
+ * Purpose:	Deep copies an existing H5B_t node.
+ *
+ * Return:	Success:	Pointer to H5B_t object.
+ *
+ * 		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Apr 18 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5B_t *
+H5B_copy(const H5B_t *old_bt)
+{
+    H5B_t		*new_node = NULL;
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    H5B_t		*ret_value;
+
+    FUNC_ENTER_NOAPI(H5B_copy, NULL)
+
+    /*
+     * Check arguments.
+     */
+    assert(old_bt);
+    shared=H5RC_GET_OBJ(old_bt->rc_shared);
+    HDassert(shared);
+
+    /* Allocate memory for the new H5B_t object */
+    if (NULL==(new_node = H5FL_MALLOC(H5B_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for B-tree root node")
+
+    /* Copy the main structure */
+    HDmemcpy(new_node,old_bt,sizeof(H5B_t));
+
+    if ( NULL==(new_node->native=H5FL_BLK_MALLOC(native_block,shared->sizeof_keys)) ||
+            NULL==(new_node->child=H5FL_SEQ_MALLOC(haddr_t,(size_t)shared->two_k)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for B-tree root node")
+
+    /* Copy the other structures */
+    HDmemcpy(new_node->native,old_bt->native,shared->sizeof_keys);
+    HDmemcpy(new_node->child,old_bt->child,(sizeof(haddr_t)*shared->two_k));
+
+    /* Increment the ref-count on the raw page */
+    H5RC_INC(new_node->rc_shared);
+
+    /* Set return value */
+    ret_value=new_node;
+
+done:
+    if(ret_value==NULL) {
+        if(new_node) {
+	    H5FL_BLK_FREE (native_block,new_node->native);
+	    H5FL_SEQ_FREE (haddr_t,new_node->child);
+	    H5FL_FREE (H5B_t,new_node);
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* H5B_copy */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_debug
+ *
+ * Purpose:	Prints debugging info about a B-tree.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  4 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5B_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth,
+	  const H5B_class_t *type, void *udata)
+{
+    H5B_t	*bt = NULL;
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    unsigned	u;                      /* Local index variable */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5B_debug, FAIL)
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+    assert(type);
+
+    /*
+     * Load the tree node.
+     */
+    if (NULL == (bt = H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata, H5AC_READ)))
+	HGOTO_ERROR(H5E_BTREE, H5E_CANTLOAD, FAIL, "unable to load B-tree node")
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+
+    /*
+     * Print the values.
+     */
+    HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+	      "Tree type ID:",
+	      ((shared->type->id)==H5B_SNODE_ID ? "H5B_SNODE_ID" :
+            ((shared->type->id)==H5B_ISTORE_ID ? "H5B_ISTORE_ID" : "Unknown!")));
+    HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+	      "Size of node:",
+	      shared->sizeof_rnode);
+    HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+	      "Size of raw (disk) key:",
+	      shared->sizeof_rkey);
+    HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+	      "Dirty flag:",
+	      bt->cache_info.is_dirty ? "True" : "False");
+    HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+	      "Level:",
+	      bt->level);
+
+    HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+	      "Address of left sibling:",
+	      bt->left);
+
+    HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+	      "Address of right sibling:",
+	      bt->right);
+
+    HDfprintf(stream, "%*s%-*s %u (%u)\n", indent, "", fwidth,
+	      "Number of children (max):",
+	      bt->nchildren, shared->two_k);
+
+    /*
+     * Print the child addresses
+     */
+    for (u = 0; u < bt->nchildren; u++) {
+	HDfprintf(stream, "%*sChild %d...\n", indent, "", u);
+	HDfprintf(stream, "%*s%-*s %a\n", indent + 3, "", MAX(0, fwidth - 3),
+		  "Address:", bt->child[u]);
+
+        /* If there is a key debugging routine, use it to display the left & right keys */
+	if (type->debug_key) {
+            /* Decode the 'left' key & print it */
+            HDfprintf(stream, "%*s%-*s\n", indent + 3, "", MAX(0, fwidth - 3),
+                      "Left Key:");
+            assert(H5B_NKEY(bt,shared,u));
+	    (void)(type->debug_key)(stream, f, dxpl_id, indent+6, MAX (0, fwidth-6),
+			      H5B_NKEY(bt,shared,u), udata);
+
+            /* Decode the 'right' key & print it */
+            HDfprintf(stream, "%*s%-*s\n", indent + 3, "", MAX(0, fwidth - 3),
+                      "Right Key:");
+            assert(H5B_NKEY(bt,shared,u+1));
+	    (void)(type->debug_key)(stream, f, dxpl_id, indent+6, MAX (0, fwidth-6),
+			      H5B_NKEY(bt,shared,u+1), udata);
+	}
+    }
+
+done:
+    if (bt && H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE) < 0)
+        HDONE_ERROR(H5E_BTREE, H5E_PROTECT, FAIL, "unable to release B-tree node")
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5B_assert
+ *
+ * Purpose:	Verifies that the tree is structured correctly.
+ *
+ * Return:	Success:	SUCCEED
+ *
+ *		Failure:	aborts if something is wrong.
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, November  4, 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+#ifdef H5B_DEBUG
+static herr_t
+H5B_assert(H5F_t *f, hid_t dxpl_id, haddr_t addr, const H5B_class_t *type, void *udata)
+{
+    H5B_t	*bt = NULL;
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    int	i, ncell, cmp;
+    static int	ncalls = 0;
+    herr_t	status;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    /* A queue of child data */
+    struct child_t {
+	haddr_t			addr;
+	unsigned		level;
+	struct child_t	       *next;
+    } *head = NULL, *tail = NULL, *prev = NULL, *cur = NULL, *tmp = NULL;
+
+    FUNC_ENTER_NOAPI(H5B_assert, FAIL)
+
+    if (0==ncalls++) {
+	if (H5DEBUG(B)) {
+	    fprintf(H5DEBUG(B), "H5B: debugging B-trees (expensive)\n");
+	}
+    }
+    /* Initialize the queue */
+    bt = H5AC_protect(f, dxpl_id, H5AC_BT, addr, type, udata, H5AC_READ);
+    assert(bt);
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+    cur = H5MM_calloc(sizeof(struct child_t));
+    assert (cur);
+    cur->addr = addr;
+    cur->level = bt->level;
+    head = tail = cur;
+
+    status = H5AC_unprotect(f, dxpl_id, H5AC_BT, addr, bt, FALSE);
+    assert(status >= 0);
+    bt=NULL;    /* Make certain future references will be caught */
+
+    /*
+     * Do a breadth-first search of the tree.  New nodes are added to the end
+     * of the queue as the `cur' pointer is advanced toward the end.  We don't
+     * remove any nodes from the queue because we need them in the uniqueness
+     * test.
+     */
+    for (ncell = 0; cur; ncell++) {
+	bt = H5AC_protect(f, dxpl_id, H5AC_BT, cur->addr, type, udata, H5AC_READ);
+	assert(bt);
+
+	/* Check node header */
+	assert(bt->level == cur->level);
+	if (cur->next && cur->next->level == bt->level) {
+	    assert(H5F_addr_eq(bt->right, cur->next->addr));
+	} else {
+	    assert(!H5F_addr_defined(bt->right));
+	}
+	if (prev && prev->level == bt->level) {
+	    assert(H5F_addr_eq(bt->left, prev->addr));
+	} else {
+	    assert(!H5F_addr_defined(bt->left));
+	}
+
+	if (cur->level > 0) {
+	    for (i = 0; i < bt->nchildren; i++) {
+
+		/*
+		 * Check that child nodes haven't already been seen.  If they
+		 * have then the tree has a cycle.
+		 */
+		for (tmp = head; tmp; tmp = tmp->next) {
+		    assert(H5F_addr_ne(tmp->addr, bt->child[i]));
+		}
+
+		/* Add the child node to the end of the queue */
+		tmp = H5MM_calloc(sizeof(struct child_t));
+		assert (tmp);
+		tmp->addr = bt->child[i];
+		tmp->level = bt->level - 1;
+		tail->next = tmp;
+		tail = tmp;
+
+		/* Check that the keys are monotonically increasing */
+		cmp = (type->cmp2) (f, dxpl_id, H5B_NKEY(bt,shared,i), udata,
+				    H5B_NKEY(bt,shared,i+1));
+		assert(cmp < 0);
+	    }
+	}
+	/* Release node */
+	status = H5AC_unprotect(f, dxpl_id, H5AC_BT, cur->addr, bt, FALSE);
+	assert(status >= 0);
+        bt=NULL;    /* Make certain future references will be caught */
+
+	/* Advance current location in queue */
+	prev = cur;
+	cur = cur->next;
+    }
+
+    /* Free all entries from queue */
+    while (head) {
+	tmp = head->next;
+	H5MM_xfree(head);
+	head = tmp;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+#endif /* H5B_DEBUG */

Added: packages/hdf5/branches/upstream/current/src/H5Bpkg.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Bpkg.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Bpkg.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,63 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *		Thursday, May 15, 2003
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5B package.  Source files outside the H5B package should
+ *		include H5Bprivate.h instead.
+ */
+#ifndef H5B_PACKAGE
+#error "Do not include this file outside the H5B package!"
+#endif
+
+#ifndef _H5Bpkg_H
+#define _H5Bpkg_H
+
+/* Get package's private header */
+#include "H5Bprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5RCprivate.h"	/* Reference counted object functions	  */
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+/*
+ * The B-tree node as stored in memory...
+ */
+struct H5B_t {
+    H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
+                            /* first field in structure */
+    H5RC_t		*rc_shared;	/*ref-counted shared info	     */
+    unsigned		level;		/*node level			     */
+    unsigned		nchildren;	/*number of child pointers	     */
+    haddr_t		left;		/*address of left sibling	     */
+    haddr_t		right;		/*address of right sibling	     */
+    uint8_t		*native;	/*array of keys in native format     */
+    haddr_t		*child;		/*2k child pointers		     */
+};
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+#endif /*_H5Bpkg_H*/

Added: packages/hdf5/branches/upstream/current/src/H5Bprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Bprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Bprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,146 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:		H5Bprivate.h
+ *			Jul 10 1997
+ *			Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:		Private non-prototype header.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifndef _H5Bprivate_H
+#define _H5Bprivate_H
+
+#include "H5Bpublic.h"		/*API prototypes			     */
+
+/* Private headers needed by this file */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5RCprivate.h"	/* Reference counted object functions	*/
+
+/*
+ * Feature: Define this constant if you want to check B-tree consistency
+ *	    after each B-tree operation.  Note that this slows down the
+ *	    library considerably! Debugging the B-tree depends on assert()
+ *	    being enabled.
+ */
+#ifdef NDEBUG
+#  undef H5B_DEBUG
+#endif
+#define H5B_MAGIC	"TREE"		/*tree node magic number	     */
+#define H5B_SIZEOF_MAGIC 4		/*size of magic number		     */
+
+typedef enum H5B_ins_t {
+    H5B_INS_ERROR	 = -1,	/*error return value			     */
+    H5B_INS_NOOP	 = 0,	/*insert made no changes		     */
+    H5B_INS_LEFT	 = 1,	/*insert new node to left of cur node	     */
+    H5B_INS_RIGHT	 = 2,	/*insert new node to right of cur node	     */
+    H5B_INS_CHANGE	 = 3,	/*change child address for cur node	     */
+    H5B_INS_FIRST	 = 4,	/*insert first node in (sub)tree	     */
+    H5B_INS_REMOVE	 = 5	/*remove current node			     */
+} H5B_ins_t;
+
+/* Define return values from operator callback function for H5B_iterate */
+/* (Actually, any postive value will cause the iterator to stop and pass back
+ *      that positive value to the function that called the iterator)
+ */
+#define H5B_ITER_ERROR  (-1)
+#define H5B_ITER_CONT   (0)
+#define H5B_ITER_STOP   (1)
+
+/* Define the operator callback function pointer for H5B_iterate() */
+typedef int (*H5B_operator_t)(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
+                                        const void *_rt_key, void *_udata);
+
+/* Typedef for B-tree in memory (defined in H5Bpkg.h) */
+typedef struct H5B_t H5B_t;
+
+/* Each B-tree has certain information that can be shared across all
+ * the instances of nodes in that B-tree.
+ */
+typedef struct H5B_shared_t {
+    const struct H5B_class_t	*type;	/* Type of tree			     */
+    unsigned            two_k;          /* 2*"K" value for tree's nodes      */
+    size_t		sizeof_rkey;	/* Size of raw (disk) key	     */
+    size_t		sizeof_rnode;	/* Size of raw (disk) node	     */
+    size_t		sizeof_keys;	/* Size of native (memory) key node  */
+    uint8_t	        *page;	        /* Disk page */
+    size_t              *nkey;          /* Offsets of each native key in native key buffer */
+} H5B_shared_t;
+
+/*
+ * Each class of object that can be pointed to by a B-link tree has a
+ * variable of this type that contains class variables and methods.  Each
+ * tree has a K (1/2 rank) value on a per-file basis.  The file_create_parms
+ * has an array of K values indexed by the `id' class field below.  The
+ * array is initialized with the HDF5_BTREE_K_DEFAULT macro.
+ */
+
+typedef struct H5B_class_t {
+    H5B_subid_t id;					/*id as found in file*/
+    size_t	sizeof_nkey;			/*size of native (memory) key*/
+    size_t	(*get_sizeof_rkey)(const H5F_t*, const void*);    /*raw key size   */
+    H5RC_t *    (*get_shared)(const H5F_t*, const void*);    /*shared info for node */
+    herr_t	(*new_node)(H5F_t*, hid_t, H5B_ins_t, void*, void*, void*, haddr_t*);
+    int         (*cmp2)(H5F_t*, hid_t, void*, void*, void*);	    /*compare 2 keys */
+    int         (*cmp3)(H5F_t*, hid_t, void*, void*, void*);	    /*compare 3 keys */
+    herr_t	(*found)(H5F_t*, hid_t, haddr_t, const void*, void*);
+
+    /* insert new data */
+    H5B_ins_t	(*insert)(H5F_t*, hid_t, haddr_t, void*, hbool_t*, void*, void*,
+			  void*, hbool_t*, haddr_t*);
+
+    /* min insert uses min leaf, not new(), similarily for max insert */
+    hbool_t	follow_min;
+    hbool_t	follow_max;
+
+    /* remove existing data */
+    H5B_ins_t	(*remove)(H5F_t*, hid_t, haddr_t, void*, hbool_t*, void*, void*,
+			  hbool_t*);
+
+    /* encode, decode, debug key values */
+    herr_t	(*decode)(const H5F_t*, const struct H5B_t*, const uint8_t*, void*);
+    herr_t	(*encode)(const H5F_t*, const struct H5B_t*, uint8_t*, void*);
+    herr_t	(*debug_key)(FILE*, H5F_t*, hid_t, int, int, const void*, const void*);
+
+} H5B_class_t;
+
+/*
+ * Library prototypes.
+ */
+H5_DLL size_t H5B_nodesize(const H5F_t *f, const H5B_shared_t *shared,
+			   size_t *total_nkey_size);
+H5_DLL herr_t H5B_create (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, void *udata,
+			   haddr_t *addr_p/*out*/);
+H5_DLL herr_t H5B_find (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
+			 void *udata);
+H5_DLL herr_t H5B_insert (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
+                           void *udata);
+H5_DLL herr_t H5B_iterate (H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, H5B_operator_t
+                            op, haddr_t addr, void *udata);
+H5_DLL herr_t H5B_remove(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
+			  void *udata);
+H5_DLL herr_t H5B_delete(H5F_t *f, hid_t dxpl_id, const H5B_class_t *type, haddr_t addr,
+                        void *udata);
+H5_DLL herr_t H5B_debug (H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream,
+			  int indent, int fwidth, const H5B_class_t *type,
+			  void *udata);
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Bpublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Bpublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Bpublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Bproto.h
+ *                      Jul 10 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             Public declarations for the H5B package.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5Bpublic_H
+#define _H5Bpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+/* B-tree IDs for various internal things. */
+/* Not really a "public" symbol, but that should be OK -QAK */
+/* Note - if more of these are added, any 'K' values (for internal or leaf
+ * nodes) they use will need to be stored in the file somewhere. -QAK
+ */
+typedef enum H5B_subid_t {
+    H5B_SNODE_ID	 = 0,	/*B-tree is for symbol table nodes	     */
+    H5B_ISTORE_ID	 = 1,	/*B-tree is for indexed object storage	     */
+    H5B_NUM_BTREE_ID            /* Number of B-tree key IDs (must be last)   */
+} H5B_subid_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5C.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5C.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5C.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,4126 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:     H5C.c
+ *              June 1 2004
+ *              John Mainzer
+ *
+ * Purpose:     Functions in this file implement a generic cache for
+ *              things which exist on disk, and which may be
+ *	 	unambiguously referenced by their disk addresses.
+ *
+ *              The code in this module was initially written in
+ *		support of a complete re-write of the metadata cache
+ *		in H5AC.c  However, other uses for the cache code
+ *		suggested themselves, and thus this file was created
+ *		in an attempt to support re-use.
+ *
+ *		For a detailed overview of the cache, please see the
+ *		header comment for H5C_t in this file.
+ *
+ * Modifications:
+ *
+ *              QAK - 11/27/2004
+ *              Switched over to using skip list routines instead of TBBT
+ *              routines.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/**************************************************************************
+ *
+ *				To Do:
+ *
+ *	Code Changes:
+ *
+ *	 - Remove extra functionality in H5C_flush_single_entry()?
+ *
+ *	 - Change protect/unprotect to lock/unlock.
+ *
+ *	 - Change the way the dirty flag is set.  Probably pass it in
+ *	   as a parameter in unprotect & insert.
+ *
+ *	 - Size should also be passed in as a parameter in insert and
+ *	   unprotect -- or some other way should be found to advise the
+ *	   cache of changes in entry size.
+ *
+ *	 - Flush entries in increasing address order in
+ *	   H5C_make_space_in_cache().
+ *
+ *	 - Also in H5C_make_space_in_cache(), use high and low water marks
+ *	   to reduce the number of I/O calls.
+ *
+ *	 - When flushing, attempt to combine contiguous entries to reduce
+ *	   I/O overhead.  Can't do this just yet as some entries are not
+ *	   contiguous.  Do this in parallel only or in serial as well?
+ *
+ *	 - Create MPI type for dirty objects when flushing in parallel.
+ *
+ *	 - Now that TBBT routines aren't used, fix nodes in memory to
+ *         point directly to the skip list node from the LRU list, eliminating
+ *         skip list lookups when evicting objects from the cache.
+ *
+ *	Tests:
+ *
+ *	 - Trim execution time.
+ *
+ *	 - Add random tests.
+ *
+ **************************************************************************/
+
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Cprivate.h"		/* Cache				*/
+#include "H5Dprivate.h"		/* Dataset functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"		/* Files				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"         /* Property lists                       */
+#include "H5SLprivate.h"	/* Skip lists				*/
+
+
+/****************************************************************************
+ *
+ * We maintain doubly linked lists of instances of H5C_cache_entry_t for a
+ * variety of reasons -- protected list, LRU list, and the clean and dirty
+ * LRU lists at present.  The following macros support linking and unlinking
+ * of instances of H5C_cache_entry_t by both their regular and auxilary next
+ * and previous pointers.
+ *
+ * The size and length fields are also maintained.
+ *
+ * Note that the relevant pair of prev and next pointers are presumed to be
+ * NULL on entry in the insertion macros.
+ *
+ * Finally, observe that the sanity checking macros evaluate to the empty
+ * string when H5C_DO_SANITY_CHECKS is FALSE.  They also contain calls
+ * to the HGOTO_ERROR macro, which may not be appropriate in all cases.
+ * If so, we will need versions of the insertion and deletion macros which
+ * do not reference the sanity checking macros.
+ *							JRM - 5/5/04
+ *
+ ****************************************************************************/
+
+#if H5C_DO_SANITY_CHECKS
+
+#define H5C__DLL_PRE_REMOVE_SC(entry_ptr, head_ptr, tail_ptr, len, Size, fv) \
+if ( ( (head_ptr) == NULL ) ||                                               \
+     ( (tail_ptr) == NULL ) ||                                               \
+     ( (entry_ptr) == NULL ) ||                                              \
+     ( (len) <= 0 ) ||                                                       \
+     ( (Size) < (entry_ptr)->size ) ||                                       \
+     ( ( (Size) == (entry_ptr)->size ) && ( (len) != 1 ) ) ||                \
+     ( ( (entry_ptr)->prev == NULL ) && ( (head_ptr) != (entry_ptr) ) ) ||   \
+     ( ( (entry_ptr)->next == NULL ) && ( (tail_ptr) != (entry_ptr) ) ) ||   \
+     ( ( (len) == 1 ) &&                                                     \
+       ( ! ( ( (head_ptr) == (entry_ptr) ) &&                                \
+             ( (tail_ptr) == (entry_ptr) ) &&                                \
+             ( (entry_ptr)->next == NULL ) &&                                \
+             ( (entry_ptr)->prev == NULL ) &&                                \
+             ( (Size) == (entry_ptr)->size )                                 \
+           )                                                                 \
+       )                                                                     \
+     )                                                                       \
+   ) {                                                                       \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "DLL pre remove SC failed")     \
+}
+
+#define H5C__DLL_SC(head_ptr, tail_ptr, len, Size, fv)                   \
+if ( ( ( ( (head_ptr) == NULL ) || ( (tail_ptr) == NULL ) ) &&           \
+       ( (head_ptr) != (tail_ptr) )                                      \
+     ) ||                                                                \
+     ( (len) < 0 ) ||                                                    \
+     ( (Size) < 0 ) ||                                                   \
+     ( ( (len) == 1 ) &&                                                 \
+       ( ( (head_ptr) != (tail_ptr) ) || ( (cache_ptr)->size <= 0 ) ||   \
+         ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) )        \
+       )                                                                 \
+     ) ||                                                                \
+     ( ( (len) >= 1 ) &&                                                 \
+       ( ( (head_ptr) == NULL ) || ( (head_ptr)->prev != NULL ) ||       \
+         ( (tail_ptr) == NULL ) || ( (tail_ptr)->next != NULL )          \
+       )                                                                 \
+     )                                                                   \
+   ) {                                                                   \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "DLL sanity check failed")  \
+}
+
+#define H5C__DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size, fv) \
+if ( ( (entry_ptr) == NULL ) ||                                              \
+     ( (entry_ptr)->next != NULL ) ||                                        \
+     ( (entry_ptr)->prev != NULL ) ||                                        \
+     ( ( ( (head_ptr) == NULL ) || ( (tail_ptr) == NULL ) ) &&               \
+       ( (head_ptr) != (tail_ptr) )                                          \
+     ) ||                                                                    \
+     ( (len) < 0 ) ||                                                        \
+     ( ( (len) == 1 ) &&                                                     \
+       ( ( (head_ptr) != (tail_ptr) ) || ( (Size) <= 0 ) ||                  \
+         ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) )            \
+       )                                                                     \
+     ) ||                                                                    \
+     ( ( (len) >= 1 ) &&                                                     \
+       ( ( (head_ptr) == NULL ) || ( (head_ptr)->prev != NULL ) ||           \
+         ( (tail_ptr) == NULL ) || ( (tail_ptr)->next != NULL )              \
+       )                                                                     \
+     )                                                                       \
+   ) {                                                                       \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "DLL pre insert SC failed")     \
+}
+
+#else /* H5C_DO_SANITY_CHECKS */
+
+#define H5C__DLL_PRE_REMOVE_SC(entry_ptr, head_ptr, tail_ptr, len, Size, fv)
+#define H5C__DLL_SC(head_ptr, tail_ptr, len, Size, fv)
+#define H5C__DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size, fv)
+
+#endif /* H5C_DO_SANITY_CHECKS */
+
+
+#define H5C__DLL_APPEND(entry_ptr, head_ptr, tail_ptr, len, Size, fail_val) \
+        H5C__DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size,    \
+                               fail_val)                                    \
+        if ( (head_ptr) == NULL )                                           \
+        {                                                                   \
+           (head_ptr) = (entry_ptr);                                        \
+           (tail_ptr) = (entry_ptr);                                        \
+        }                                                                   \
+        else                                                                \
+        {                                                                   \
+           (tail_ptr)->next = (entry_ptr);                                  \
+           (entry_ptr)->prev = (tail_ptr);                                  \
+           (tail_ptr) = (entry_ptr);                                        \
+        }                                                                   \
+        (len)++;                                                            \
+        (Size) += (entry_ptr)->size;
+
+#define H5C__DLL_PREPEND(entry_ptr, head_ptr, tail_ptr, len, Size, fail_val) \
+        H5C__DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size,     \
+                               fail_val)                                     \
+        if ( (head_ptr) == NULL )                                            \
+        {                                                                    \
+           (head_ptr) = (entry_ptr);                                         \
+           (tail_ptr) = (entry_ptr);                                         \
+        }                                                                    \
+        else                                                                 \
+        {                                                                    \
+           (head_ptr)->prev = (entry_ptr);                                   \
+           (entry_ptr)->next = (head_ptr);                                   \
+           (head_ptr) = (entry_ptr);                                         \
+        }                                                                    \
+        (len)++;                                                             \
+        (Size) += entry_ptr->size;
+
+#define H5C__DLL_REMOVE(entry_ptr, head_ptr, tail_ptr, len, Size, fail_val) \
+        H5C__DLL_PRE_REMOVE_SC(entry_ptr, head_ptr, tail_ptr, len, Size,    \
+                               fail_val)                                    \
+        {                                                                   \
+           if ( (head_ptr) == (entry_ptr) )                                 \
+           {                                                                \
+              (head_ptr) = (entry_ptr)->next;                               \
+              if ( (head_ptr) != NULL )                                     \
+              {                                                             \
+                 (head_ptr)->prev = NULL;                                   \
+              }                                                             \
+           }                                                                \
+           else                                                             \
+           {                                                                \
+              (entry_ptr)->prev->next = (entry_ptr)->next;                  \
+           }                                                                \
+           if ( (tail_ptr) == (entry_ptr) )                                 \
+           {                                                                \
+              (tail_ptr) = (entry_ptr)->prev;                               \
+              if ( (tail_ptr) != NULL )                                     \
+              {                                                             \
+                 (tail_ptr)->next = NULL;                                   \
+              }                                                             \
+           }                                                                \
+           else                                                             \
+           {                                                                \
+              (entry_ptr)->next->prev = (entry_ptr)->prev;                  \
+           }                                                                \
+           entry_ptr->next = NULL;                                          \
+           entry_ptr->prev = NULL;                                          \
+           (len)--;                                                         \
+           (Size) -= entry_ptr->size;                                       \
+        }
+
+
+#if H5C_DO_SANITY_CHECKS
+
+#define H5C__AUX_DLL_PRE_REMOVE_SC(entry_ptr, hd_ptr, tail_ptr, len, Size, fv) \
+if ( ( (hd_ptr) == NULL ) ||                                                   \
+     ( (tail_ptr) == NULL ) ||                                                 \
+     ( (entry_ptr) == NULL ) ||                                                \
+     ( (len) <= 0 ) ||                                                         \
+     ( (Size) < (entry_ptr)->size ) ||                                         \
+     ( ( (Size) == (entry_ptr)->size ) && ( ! ( (len) == 1 ) ) ) ||            \
+     ( ( (entry_ptr)->aux_prev == NULL ) && ( (hd_ptr) != (entry_ptr) ) ) ||   \
+     ( ( (entry_ptr)->aux_next == NULL ) && ( (tail_ptr) != (entry_ptr) ) ) || \
+     ( ( (len) == 1 ) &&                                                       \
+       ( ! ( ( (hd_ptr) == (entry_ptr) ) && ( (tail_ptr) == (entry_ptr) ) &&   \
+             ( (entry_ptr)->aux_next == NULL ) &&                              \
+             ( (entry_ptr)->aux_prev == NULL ) &&                              \
+             ( (Size) == (entry_ptr)->size )                                   \
+           )                                                                   \
+       )                                                                       \
+     )                                                                         \
+   ) {                                                                         \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "aux DLL pre remove SC failed")   \
+}
+
+#define H5C__AUX_DLL_SC(head_ptr, tail_ptr, len, Size, fv)                  \
+if ( ( ( ( (head_ptr) == NULL ) || ( (tail_ptr) == NULL ) ) &&              \
+       ( (head_ptr) != (tail_ptr) )                                         \
+     ) ||                                                                   \
+     ( (len) < 0 ) ||                                                       \
+     ( (Size) < 0 ) ||                                                      \
+     ( ( (len) == 1 ) &&                                                    \
+       ( ( (head_ptr) != (tail_ptr) ) || ( (Size) <= 0 ) ||                 \
+         ( (head_ptr) == NULL ) || ( (head_ptr)->size != (Size) )           \
+       )                                                                    \
+     ) ||                                                                   \
+     ( ( (len) >= 1 ) &&                                                    \
+       ( ( (head_ptr) == NULL ) || ( (head_ptr)->aux_prev != NULL ) ||      \
+         ( (tail_ptr) == NULL ) || ( (tail_ptr)->aux_next != NULL )         \
+       )                                                                    \
+     )                                                                      \
+   ) {                                                                      \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "AUX DLL sanity check failed") \
+}
+
+#define H5C__AUX_DLL_PRE_INSERT_SC(entry_ptr, hd_ptr, tail_ptr, len, Size, fv) \
+if ( ( (entry_ptr) == NULL ) ||                                                \
+     ( (entry_ptr)->aux_next != NULL ) ||                                      \
+     ( (entry_ptr)->aux_prev != NULL ) ||                                      \
+     ( ( ( (hd_ptr) == NULL ) || ( (tail_ptr) == NULL ) ) &&                   \
+       ( (hd_ptr) != (tail_ptr) )                                              \
+     ) ||                                                                      \
+     ( (len) < 0 ) ||                                                          \
+     ( ( (len) == 1 ) &&                                                       \
+       ( ( (hd_ptr) != (tail_ptr) ) || ( (Size) <= 0 ) ||                      \
+         ( (hd_ptr) == NULL ) || ( (hd_ptr)->size != (Size) )                  \
+       )                                                                       \
+     ) ||                                                                      \
+     ( ( (len) >= 1 ) &&                                                       \
+       ( ( (hd_ptr) == NULL ) || ( (hd_ptr)->aux_prev != NULL ) ||             \
+         ( (tail_ptr) == NULL ) || ( (tail_ptr)->aux_next != NULL )            \
+       )                                                                       \
+     )                                                                         \
+   ) {                                                                         \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, (fv), "AUX DLL pre insert SC failed")   \
+}
+
+#else /* H5C_DO_SANITY_CHECKS */
+
+#define H5C__AUX_DLL_PRE_REMOVE_SC(entry_ptr, hd_ptr, tail_ptr, len, Size, fv)
+#define H5C__AUX_DLL_SC(head_ptr, tail_ptr, len, Size, fv)
+#define H5C__AUX_DLL_PRE_INSERT_SC(entry_ptr, hd_ptr, tail_ptr, len, Size, fv)
+
+#endif /* H5C_DO_SANITY_CHECKS */
+
+
+#define H5C__AUX_DLL_APPEND(entry_ptr, head_ptr, tail_ptr, len, Size, fail_val)\
+        H5C__AUX_DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size,   \
+                                   fail_val)                                   \
+        if ( (head_ptr) == NULL )                                              \
+        {                                                                      \
+           (head_ptr) = (entry_ptr);                                           \
+           (tail_ptr) = (entry_ptr);                                           \
+        }                                                                      \
+        else                                                                   \
+        {                                                                      \
+           (tail_ptr)->aux_next = (entry_ptr);                                 \
+           (entry_ptr)->aux_prev = (tail_ptr);                                 \
+           (tail_ptr) = (entry_ptr);                                           \
+        }                                                                      \
+        (len)++;                                                               \
+        (Size) += entry_ptr->size;
+
+#define H5C__AUX_DLL_PREPEND(entry_ptr, head_ptr, tail_ptr, len, Size, fv)   \
+        H5C__AUX_DLL_PRE_INSERT_SC(entry_ptr, head_ptr, tail_ptr, len, Size, \
+                                   fv)                                       \
+        if ( (head_ptr) == NULL )                                            \
+        {                                                                    \
+           (head_ptr) = (entry_ptr);                                         \
+           (tail_ptr) = (entry_ptr);                                         \
+        }                                                                    \
+        else                                                                 \
+        {                                                                    \
+           (head_ptr)->aux_prev = (entry_ptr);                               \
+           (entry_ptr)->aux_next = (head_ptr);                               \
+           (head_ptr) = (entry_ptr);                                         \
+        }                                                                    \
+        (len)++;                                                             \
+        (Size) += entry_ptr->size;
+
+#define H5C__AUX_DLL_REMOVE(entry_ptr, head_ptr, tail_ptr, len, Size, fv)    \
+        H5C__AUX_DLL_PRE_REMOVE_SC(entry_ptr, head_ptr, tail_ptr, len, Size, \
+                                   fv)                                       \
+        {                                                                    \
+           if ( (head_ptr) == (entry_ptr) )                                  \
+           {                                                                 \
+              (head_ptr) = (entry_ptr)->aux_next;                            \
+              if ( (head_ptr) != NULL )                                      \
+              {                                                              \
+                 (head_ptr)->aux_prev = NULL;                                \
+              }                                                              \
+           }                                                                 \
+           else                                                              \
+           {                                                                 \
+              (entry_ptr)->aux_prev->aux_next = (entry_ptr)->aux_next;       \
+           }                                                                 \
+           if ( (tail_ptr) == (entry_ptr) )                                  \
+           {                                                                 \
+              (tail_ptr) = (entry_ptr)->aux_prev;                            \
+              if ( (tail_ptr) != NULL )                                      \
+              {                                                              \
+                 (tail_ptr)->aux_next = NULL;                                \
+              }                                                              \
+           }                                                                 \
+           else                                                              \
+           {                                                                 \
+              (entry_ptr)->aux_next->aux_prev = (entry_ptr)->aux_prev;       \
+           }                                                                 \
+           entry_ptr->aux_next = NULL;                                       \
+           entry_ptr->aux_prev = NULL;                                       \
+           (len)--;                                                          \
+           (Size) -= entry_ptr->size;                                        \
+        }
+
+
+/***********************************************************************
+ *
+ * Stats collection macros
+ *
+ * The following macros must handle stats collection when this collection
+ * is enabled, and evaluate to the empty string when it is not.
+ *
+ ***********************************************************************/
+
+#if H5C_COLLECT_CACHE_STATS
+
+#define H5C__UPDATE_STATS_FOR_INSERTION(cache_ptr, entry_ptr)        \
+	(((cache_ptr)->insertions)[(entry_ptr)->type->id])++;        \
+        if ( (cache_ptr)->index_len > (cache_ptr)->max_index_len )   \
+	    (cache_ptr)->max_index_len = (cache_ptr)->index_len;     \
+        if ( (cache_ptr)->index_size > (cache_ptr)->max_index_size ) \
+	    (cache_ptr)->max_index_size = (cache_ptr)->index_size;   \
+        if ( (cache_ptr)->slist_len > (cache_ptr)->max_slist_len )   \
+	    (cache_ptr)->max_slist_len = (cache_ptr)->slist_len;     \
+        if ( (cache_ptr)->slist_size > (cache_ptr)->max_slist_size ) \
+	    (cache_ptr)->max_slist_size = (cache_ptr)->slist_size;   \
+        if ( (entry_ptr)->size >                                     \
+             ((cache_ptr)->max_size)[(entry_ptr)->type->id] ) {      \
+            ((cache_ptr)->max_size)[(entry_ptr)->type->id]           \
+                 = (entry_ptr)->size;                                \
+        }
+
+#define H5C__UPDATE_STATS_FOR_UNPROTECT(cache_ptr)                   \
+        if ( (cache_ptr)->slist_len > (cache_ptr)->max_slist_len )   \
+	    (cache_ptr)->max_slist_len = (cache_ptr)->slist_len;     \
+        if ( (cache_ptr)->slist_size > (cache_ptr)->max_slist_size ) \
+	    (cache_ptr)->max_slist_size = (cache_ptr)->slist_size;
+
+#define H5C__UPDATE_STATS_FOR_RENAME(cache_ptr, entry_ptr) \
+	(((cache_ptr)->renames)[(entry_ptr)->type->id])++;
+
+#define H5C__UPDATE_STATS_FOR_HT_INSERTION(cache_ptr) \
+	(cache_ptr)->total_ht_insertions++;
+
+#define H5C__UPDATE_STATS_FOR_HT_DELETION(cache_ptr) \
+	(cache_ptr)->total_ht_deletions++;
+
+#define H5C__UPDATE_STATS_FOR_HT_SEARCH(cache_ptr, success, depth)  \
+	if ( success ) {                                            \
+	    (cache_ptr)->successful_ht_searches++;                  \
+	    (cache_ptr)->total_successful_ht_search_depth += depth; \
+	} else {                                                    \
+	    (cache_ptr)->failed_ht_searches++;                      \
+	    (cache_ptr)->total_failed_ht_search_depth += depth;     \
+	}
+
+#if H5C_COLLECT_CACHE_ENTRY_STATS
+
+#define H5C__RESET_CACHE_ENTRY_STATS(entry_ptr) \
+        (entry_ptr)->accesses = 0;              \
+        (entry_ptr)->clears   = 0;              \
+        (entry_ptr)->flushes  = 0;
+
+#define H5C__UPDATE_STATS_FOR_CLEAR(cache_ptr, entry_ptr) \
+	(((cache_ptr)->clears)[(entry_ptr)->type->id])++; \
+        ((entry_ptr)->clears)++;
+
+#define H5C__UPDATE_STATS_FOR_FLUSH(cache_ptr, entry_ptr)  \
+	(((cache_ptr)->flushes)[(entry_ptr)->type->id])++; \
+        ((entry_ptr)->flushes)++;
+
+#define H5C__UPDATE_STATS_FOR_EVICTION(cache_ptr, entry_ptr)        \
+	(((cache_ptr)->evictions)[(entry_ptr)->type->id])++;        \
+        if ( (entry_ptr)->accesses >                                \
+             ((cache_ptr)->max_accesses)[(entry_ptr)->type->id] ) { \
+            ((cache_ptr)->max_accesses)[(entry_ptr)->type->id]      \
+                = (entry_ptr)->accesses;                            \
+        }                                                           \
+        if ( (entry_ptr)->accesses <                                \
+             ((cache_ptr)->min_accesses)[(entry_ptr)->type->id] ) { \
+            ((cache_ptr)->min_accesses)[(entry_ptr)->type->id]      \
+                = (entry_ptr)->accesses;                            \
+        }                                                           \
+        if ( (entry_ptr)->clears >                                  \
+             ((cache_ptr)->max_clears)[(entry_ptr)->type->id] ) {   \
+            ((cache_ptr)->max_clears)[(entry_ptr)->type->id]        \
+                 = (entry_ptr)->clears;                             \
+        }                                                           \
+        if ( (entry_ptr)->flushes >                                 \
+             ((cache_ptr)->max_flushes)[(entry_ptr)->type->id] ) {  \
+            ((cache_ptr)->max_flushes)[(entry_ptr)->type->id]       \
+                 = (entry_ptr)->flushes;                            \
+        }                                                           \
+        if ( (entry_ptr)->size >                                    \
+             ((cache_ptr)->max_size)[(entry_ptr)->type->id] ) {     \
+            ((cache_ptr)->max_size)[(entry_ptr)->type->id]          \
+                 = (entry_ptr)->size;                               \
+        }                                                           \
+
+#define H5C__UPDATE_STATS_FOR_PROTECT(cache_ptr, entry_ptr, hit)     \
+	if ( hit )                                                   \
+            ((cache_ptr)->hits)[(entry_ptr)->type->id]++;            \
+	else                                                         \
+            ((cache_ptr)->misses)[(entry_ptr)->type->id]++;          \
+        if ( (cache_ptr)->index_len > (cache_ptr)->max_index_len )   \
+            (cache_ptr)->max_index_len = (cache_ptr)->index_len;     \
+        if ( (cache_ptr)->index_size > (cache_ptr)->max_index_size ) \
+            (cache_ptr)->max_index_size = (cache_ptr)->index_size;   \
+        if ( (cache_ptr)->pl_len > (cache_ptr)->max_pl_len )         \
+            (cache_ptr)->max_pl_len = (cache_ptr)->pl_len;           \
+        if ( (cache_ptr)->pl_size > (cache_ptr)->max_pl_size )       \
+            (cache_ptr)->max_pl_size = (cache_ptr)->pl_size;         \
+        if ( (entry_ptr)->size >                                     \
+             ((cache_ptr)->max_size)[(entry_ptr)->type->id] ) {      \
+            ((cache_ptr)->max_size)[(entry_ptr)->type->id]           \
+                 = (entry_ptr)->size;                                \
+        }                                                            \
+        ((entry_ptr)->accesses)++;
+
+#else /* H5C_COLLECT_CACHE_ENTRY_STATS */
+
+#define H5C__RESET_CACHE_ENTRY_STATS(entry_ptr)
+
+#define H5C__UPDATE_STATS_FOR_CLEAR(cache_ptr, entry_ptr) \
+	(((cache_ptr)->clears)[(entry_ptr)->type->id])++;
+
+#define H5C__UPDATE_STATS_FOR_FLUSH(cache_ptr, entry_ptr) \
+	(((cache_ptr)->flushes)[(entry_ptr)->type->id])++;
+
+#define H5C__UPDATE_STATS_FOR_EVICTION(cache_ptr, entry_ptr) \
+	(((cache_ptr)->evictions)[(entry_ptr)->type->id])++;
+
+#define H5C__UPDATE_STATS_FOR_PROTECT(cache_ptr, entry_ptr, hit)     \
+	if ( hit )                                                   \
+            ((cache_ptr)->hits)[(entry_ptr)->type->id]++;            \
+	else                                                         \
+            ((cache_ptr)->misses)[(entry_ptr)->type->id]++;          \
+        if ( (cache_ptr)->index_len > (cache_ptr)->max_index_len )   \
+            (cache_ptr)->max_index_len = (cache_ptr)->index_len;     \
+        if ( (cache_ptr)->index_size > (cache_ptr)->max_index_size ) \
+            (cache_ptr)->max_index_size = (cache_ptr)->index_size;   \
+        if ( (cache_ptr)->pl_len > (cache_ptr)->max_pl_len )         \
+            (cache_ptr)->max_pl_len = (cache_ptr)->pl_len;           \
+        if ( (cache_ptr)->pl_size > (cache_ptr)->max_pl_size )       \
+            (cache_ptr)->max_pl_size = (cache_ptr)->pl_size;
+
+#endif /* H5C_COLLECT_CACHE_ENTRY_STATS */
+
+#else /* H5C_COLLECT_CACHE_STATS */
+
+#define H5C__RESET_CACHE_ENTRY_STATS(entry_ptr)
+#define H5C__UPDATE_STATS_FOR_UNPROTECT(cache_ptr)
+#define H5C__UPDATE_STATS_FOR_RENAME(cache_ptr, entry_ptr)
+#define H5C__UPDATE_STATS_FOR_HT_INSERTION(cache_ptr)
+#define H5C__UPDATE_STATS_FOR_HT_DELETION(cache_ptr)
+#define H5C__UPDATE_STATS_FOR_HT_SEARCH(cache_ptr, success, depth)
+#define H5C__UPDATE_STATS_FOR_INSERTION(cache_ptr, entry_ptr)
+#define H5C__UPDATE_STATS_FOR_CLEAR(cache_ptr, entry_ptr)
+#define H5C__UPDATE_STATS_FOR_FLUSH(cache_ptr, entry_ptr)
+#define H5C__UPDATE_STATS_FOR_EVICTION(cache_ptr, entry_ptr)
+#define H5C__UPDATE_STATS_FOR_PROTECT(cache_ptr, entry_ptr, hit)
+
+#endif /* H5C_COLLECT_CACHE_STATS */
+
+
+/***********************************************************************
+ *
+ * Hash table access and manipulation macros:
+ *
+ * The following macros handle searches, insertions, and deletion in
+ * the hash table.
+ *
+ * When modifying these macros, remember to modify the similar macros
+ * in tst/cache.c
+ *
+ ***********************************************************************/
+
+#define H5C__HASH_TABLE_LEN	(32 * 1024) /* must be a power of 2 */
+
+#define H5C__HASH_MASK		((size_t)(H5C__HASH_TABLE_LEN - 1) << 3)
+
+#define H5C__HASH_FCN(x)	(int)(((x) & H5C__HASH_MASK) >> 3)
+
+#if H5C_DO_SANITY_CHECKS
+
+#define H5C__PRE_HT_INSERT_SC(cache_ptr, entry_ptr, fail_val) \
+if ( ( (cache_ptr) == NULL ) ||                               \
+     ( (cache_ptr)->magic != H5C__H5C_T_MAGIC ) ||            \
+     ( (entry_ptr) == NULL ) ||                               \
+     ( ! H5F_addr_defined((entry_ptr)->addr) ) ||             \
+     ( (entry_ptr)->ht_next != NULL ) ||                      \
+     ( (entry_ptr)->ht_prev != NULL ) ||                      \
+     ( (entry_ptr)->size <= 0 ) ||                            \
+     ( (k = H5C__HASH_FCN((entry_ptr)->addr)) < 0 ) ||        \
+     ( k >= H5C__HASH_TABLE_LEN ) ) {                         \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, fail_val,              \
+               "Pre HT insert SC failed")                     \
+}
+
+#define H5C__PRE_HT_REMOVE_SC(cache_ptr, entry_ptr)                     \
+if ( ( (cache_ptr) == NULL ) ||                                         \
+     ( (cache_ptr)->magic != H5C__H5C_T_MAGIC ) ||                      \
+     ( (cache_ptr)->index_len < 1 ) ||                                  \
+     ( (entry_ptr) == NULL ) ||                                         \
+     ( (cache_ptr)->index_size < (entry_ptr)->size ) ||                 \
+     ( ! H5F_addr_defined((entry_ptr)->addr) ) ||                       \
+     ( (entry_ptr)->size <= 0 ) ||                                      \
+     ( H5C__HASH_FCN((entry_ptr)->addr) < 0 ) ||                        \
+     ( H5C__HASH_FCN((entry_ptr)->addr) >= H5C__HASH_TABLE_LEN ) ||     \
+     ( ((cache_ptr)->index)[(H5C__HASH_FCN((entry_ptr)->addr))]         \
+       == NULL ) ||                                                     \
+     ( ( ((cache_ptr)->index)[(H5C__HASH_FCN((entry_ptr)->addr))]       \
+       != (entry_ptr) ) &&                                              \
+       ( (entry_ptr)->ht_prev == NULL ) ) ||                            \
+     ( ( ((cache_ptr)->index)[(H5C__HASH_FCN((entry_ptr)->addr))] ==    \
+         (entry_ptr) ) &&                                               \
+       ( (entry_ptr)->ht_prev != NULL ) ) ) {                           \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Pre HT remove SC failed") \
+}
+
+#define H5C__PRE_HT_SEARCH_SC(cache_ptr, Addr, fail_val)                    \
+if ( ( (cache_ptr) == NULL ) ||                                             \
+     ( (cache_ptr)->magic != H5C__H5C_T_MAGIC ) ||                          \
+     ( ! H5F_addr_defined(Addr) ) ||                                        \
+     ( H5C__HASH_FCN(Addr) < 0 ) ||                                         \
+     ( H5C__HASH_FCN(Addr) >= H5C__HASH_TABLE_LEN ) ) {                     \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, fail_val, "Pre HT search SC failed") \
+}
+
+#define H5C__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k, fail_val) \
+if ( ( (cache_ptr) == NULL ) ||                                             \
+     ( (cache_ptr)->magic != H5C__H5C_T_MAGIC ) ||                          \
+     ( (cache_ptr)->index_len < 1 ) ||                                      \
+     ( (entry_ptr) == NULL ) ||                                             \
+     ( (cache_ptr)->index_size < (entry_ptr)->size ) ||                     \
+     ( H5F_addr_ne((entry_ptr)->addr, (Addr)) ) ||                          \
+     ( (entry_ptr)->size <= 0 ) ||                                          \
+     ( ((cache_ptr)->index)[k] == NULL ) ||                                 \
+     ( ( ((cache_ptr)->index)[k] != (entry_ptr) ) &&                        \
+       ( (entry_ptr)->ht_prev == NULL ) ) ||                                \
+     ( ( ((cache_ptr)->index)[k] == (entry_ptr) ) &&                        \
+       ( (entry_ptr)->ht_prev != NULL ) ) ||                                \
+     ( ( (entry_ptr)->ht_prev != NULL ) &&                                  \
+       ( (entry_ptr)->ht_prev->ht_next != (entry_ptr) ) ) ||                \
+     ( ( (entry_ptr)->ht_next != NULL ) &&                                  \
+       ( (entry_ptr)->ht_next->ht_prev != (entry_ptr) ) ) ) {               \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, fail_val,                            \
+                "Post successful HT search SC failed")                      \
+}
+
+#define H5C__POST_HT_SHIFT_TO_FRONT(cache_ptr, entry_ptr, k, fail_val) \
+if ( ( (cache_ptr) == NULL ) ||                                        \
+     ( ((cache_ptr)->index)[k] != (entry_ptr) ) ||                     \
+     ( (entry_ptr)->ht_prev != NULL ) ) {                              \
+    HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, fail_val,                       \
+               "Post HT shift to front SC failed")                     \
+}
+
+
+#else /* H5C_DO_SANITY_CHECKS */
+
+#define H5C__PRE_HT_INSERT_SC(cache_ptr, entry_ptr, fail_val)
+#define H5C__PRE_HT_REMOVE_SC(cache_ptr, entry_ptr)
+#define H5C__PRE_HT_SEARCH_SC(cache_ptr, Addr, fail_val)
+#define H5C__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k, fail_val)
+#define H5C__POST_HT_SHIFT_TO_FRONT(cache_ptr, entry_ptr, k, fail_val)
+
+#endif /* H5C_DO_SANITY_CHECKS */
+
+
+#define H5C__INSERT_IN_INDEX(cache_ptr, entry_ptr, fail_val) \
+{                                                            \
+    int k;                                                   \
+    H5C__PRE_HT_INSERT_SC(cache_ptr, entry_ptr, fail_val)    \
+    k = H5C__HASH_FCN((entry_ptr)->addr);                    \
+    if ( ((cache_ptr)->index)[k] == NULL )                   \
+    {                                                        \
+        ((cache_ptr)->index)[k] = (entry_ptr);               \
+    }                                                        \
+    else                                                     \
+    {                                                        \
+        (entry_ptr)->ht_next = ((cache_ptr)->index)[k];      \
+        (entry_ptr)->ht_next->ht_prev = (entry_ptr);         \
+        ((cache_ptr)->index)[k] = (entry_ptr);               \
+    }                                                        \
+    (cache_ptr)->index_len++;                                \
+    (cache_ptr)->index_size += (entry_ptr)->size;            \
+    H5C__UPDATE_STATS_FOR_HT_INSERTION(cache_ptr)            \
+}
+
+#define H5C__DELETE_FROM_INDEX(cache_ptr, entry_ptr)          \
+{                                                             \
+    int k;                                                    \
+    H5C__PRE_HT_REMOVE_SC(cache_ptr, entry_ptr)               \
+    k = H5C__HASH_FCN((entry_ptr)->addr);                     \
+    if ( (entry_ptr)->ht_next )                               \
+    {                                                         \
+        (entry_ptr)->ht_next->ht_prev = (entry_ptr)->ht_prev; \
+    }                                                         \
+    if ( (entry_ptr)->ht_prev )                               \
+    {                                                         \
+        (entry_ptr)->ht_prev->ht_next = (entry_ptr)->ht_next; \
+    }                                                         \
+    if ( ((cache_ptr)->index)[k] == (entry_ptr) )             \
+    {                                                         \
+        ((cache_ptr)->index)[k] = (entry_ptr)->ht_next;       \
+    }                                                         \
+    (entry_ptr)->ht_next = NULL;                              \
+    (entry_ptr)->ht_prev = NULL;                              \
+    (cache_ptr)->index_len--;                                 \
+    (cache_ptr)->index_size -= (entry_ptr)->size;             \
+    H5C__UPDATE_STATS_FOR_HT_DELETION(cache_ptr)              \
+}
+
+#define H5C__SEARCH_INDEX(cache_ptr, Addr, entry_ptr, fail_val)             \
+{                                                                           \
+    int k;                                                                  \
+    int depth = 0;                                                          \
+    H5C__PRE_HT_SEARCH_SC(cache_ptr, Addr, fail_val)                        \
+    k = H5C__HASH_FCN(Addr);                                                \
+    entry_ptr = ((cache_ptr)->index)[k];                                    \
+    while ( ( entry_ptr ) && ( H5F_addr_ne(Addr, (entry_ptr)->addr) ) )     \
+    {                                                                       \
+        (entry_ptr) = (entry_ptr)->ht_next;                                 \
+        (depth)++;                                                          \
+    }                                                                       \
+    if ( entry_ptr )                                                        \
+    {                                                                       \
+        H5C__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k, fail_val) \
+        if ( entry_ptr != ((cache_ptr)->index)[k] )                         \
+        {                                                                   \
+            if ( (entry_ptr)->ht_next )                                     \
+            {                                                               \
+                (entry_ptr)->ht_next->ht_prev = (entry_ptr)->ht_prev;       \
+            }                                                               \
+            HDassert( (entry_ptr)->ht_prev != NULL );                       \
+            (entry_ptr)->ht_prev->ht_next = (entry_ptr)->ht_next;           \
+            ((cache_ptr)->index)[k]->ht_prev = (entry_ptr);                 \
+            (entry_ptr)->ht_next = ((cache_ptr)->index)[k];                 \
+            (entry_ptr)->ht_prev = NULL;                                    \
+            ((cache_ptr)->index)[k] = (entry_ptr);                          \
+            H5C__POST_HT_SHIFT_TO_FRONT(cache_ptr, entry_ptr, k, fail_val)  \
+        }                                                                   \
+    }                                                                       \
+    H5C__UPDATE_STATS_FOR_HT_SEARCH(cache_ptr, (entry_ptr != NULL), depth)  \
+}
+
+
+/**************************************************************************
+ *
+ * Skip list insertion and deletion macros:
+ *
+ * These used to be functions, but I converted them to macros to avoid some
+ * function call overhead.
+ *
+ **************************************************************************/
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__INSERT_ENTRY_IN_SLIST
+ *
+ * Purpose:     Insert the specified instance of H5C_cache_entry_t into
+ *		the skip list in the specified instance of H5C_t.  Update
+ *		the associated length and size fields.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 5/10/04
+ *
+ * Modifications:
+ *
+ *		JRM -- 7/21/04
+ *		Updated function to set the in_tree flag when inserting
+ *		an entry into the tree.  Also modified the function to
+ *		update the tree size and len fields instead of the similar
+ *		index fields.
+ *
+ *		All of this is part of the modifications to support the
+ *		hash table.
+ *
+ *		JRM -- 7/27/04
+ *		Converted the function H5C_insert_entry_in_tree() into
+ *		the macro H5C__INSERT_ENTRY_IN_TREE in the hopes of
+ *		wringing a little more speed out of the cache.
+ *
+ *		Note that we don't bother to check if the entry is already
+ *		in the tree -- if it is, H5SL_insert() will fail.
+ *
+ *		QAK -- 11/27/04
+ *		Switched over to using skip list routines.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define H5C__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr)                       \
+{                                                                              \
+    HDassert( (cache_ptr) );                                                   \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                        \
+    HDassert( (entry_ptr) );                                                   \
+    HDassert( (entry_ptr)->size > 0 );                                         \
+    HDassert( H5F_addr_defined((entry_ptr)->addr) );                           \
+    HDassert( !((entry_ptr)->in_slist) );                                      \
+                                                                               \
+    if ( H5SL_insert((cache_ptr)->slist_ptr, &entry_ptr->addr, entry_ptr) < 0 ) \
+        HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "Can't insert entry in skip list") \
+                                                                               \
+    (entry_ptr)->in_slist = TRUE;                                              \
+    (cache_ptr)->slist_len++;                                                  \
+    (cache_ptr)->slist_size += (entry_ptr)->size;                              \
+                                                                               \
+    HDassert( (cache_ptr)->slist_len > 0 );                                    \
+    HDassert( (cache_ptr)->slist_size > 0 );                                   \
+                                                                               \
+} /* H5C__INSERT_ENTRY_IN_SLIST */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:    H5C__REMOVE_ENTRY_FROM_SLIST
+ *
+ * Purpose:     Remove the specified instance of H5C_cache_entry_t from the
+ *		index skip list in the specified instance of H5C_t.  Update
+ *		the associated length and size fields.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 5/10/04
+ *
+ * Modifications:
+ *
+ *		JRM -- 7/21/04
+ *		Updated function for the addition of the hash table.
+ *
+ *		JRM - 7/27/04
+ *		Converted from the function H5C_remove_entry_from_tree()
+ *		to the macro H5C__REMOVE_ENTRY_FROM_TREE in the hopes of
+ *		wringing a little more performance out of the cache.
+ *
+ *		QAK -- 11/27/04
+ *		Switched over to using skip list routines.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr)          \
+{                                                                   \
+    HDassert( (cache_ptr) );                                        \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );             \
+    HDassert( (entry_ptr) );                                        \
+    HDassert( !((entry_ptr)->is_protected) );                       \
+    HDassert( (entry_ptr)->size > 0 );                              \
+    HDassert( (entry_ptr)->in_slist );                              \
+    HDassert( (cache_ptr)->slist_ptr );                             \
+                                                                    \
+    if ( H5SL_remove((cache_ptr)->slist_ptr, &(entry_ptr)->addr)    \
+         != (entry_ptr) )                                           \
+                                                                    \
+        HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL,                  \
+                    "Can't delete entry from skip list.")           \
+                                                                    \
+    HDassert( (cache_ptr)->slist_len > 0 );                         \
+    (cache_ptr)->slist_len--;                                       \
+    HDassert( (cache_ptr)->slist_size >= (entry_ptr)->size );       \
+    (cache_ptr)->slist_size -= (entry_ptr)->size;                   \
+    (entry_ptr)->in_slist = FALSE;                                  \
+} /* H5C__REMOVE_ENTRY_FROM_SLIST */
+
+
+/**************************************************************************
+ *
+ * Replacement policy update macros:
+ *
+ * These used to be functions, but I converted them to macros to avoid some
+ * function call overhead.
+ *
+ **************************************************************************/
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__UPDATE_RP_FOR_EVICTION
+ *
+ * Purpose:     Update the replacement policy data structures for an
+ *		eviction of the specified cache entry.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the function
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      Non-negative on success/Negative on failure.
+ *
+ * Programmer:  John Mainzer, 5/10/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/27/04
+ *		Converted the function H5C_update_rp_for_eviction() to the
+ *		macro H5C__UPDATE_RP_FOR_EVICTION in an effort to squeeze
+ *		a bit more performance out of the cache.
+ *
+ *		At least for the first cut, I am leaving the comments and
+ *		white space in the macro.  If they cause dificulties with
+ *		the pre-processor, I'll have to remove them.
+ *
+ *		JRM - 7/28/04
+ *		Split macro into two version, one supporting the clean and
+ *		dirty LRU lists, and the other not.  Yet another attempt
+ *		at optimization.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__UPDATE_RP_FOR_EVICTION(cache_ptr, entry_ptr, fail_val)          \
+{                                                                            \
+    HDassert( (cache_ptr) );                                                 \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                      \
+    HDassert( (entry_ptr) );                                                 \
+    HDassert( !((entry_ptr)->is_protected) );                                \
+    HDassert( (entry_ptr)->size > 0 );                                       \
+                                                                             \
+    /* modified LRU specific code */                                         \
+                                                                             \
+    /* remove the entry from the LRU list. */                                \
+                                                                             \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,                  \
+                    (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len,    \
+                    (cache_ptr)->LRU_list_size, (fail_val))                  \
+                                                                             \
+    /* If the entry is clean when it is evicted, it should be on the         \
+     * clean LRU list, if it was dirty, it should be on the dirty LRU list.  \
+     * Remove it from the appropriate list according to the value of the     \
+     * dirty flag.                                                           \
+     */                                                                      \
+                                                                             \
+    if ( (entry_ptr)->is_dirty ) {                                           \
+                                                                             \
+        H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->dLRU_head_ptr,         \
+                            (cache_ptr)->dLRU_tail_ptr,                      \
+                            (cache_ptr)->dLRU_list_len,                      \
+                            (cache_ptr)->dLRU_list_size, (fail_val))         \
+    } else {                                                                 \
+        H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->cLRU_head_ptr,         \
+                            (cache_ptr)->cLRU_tail_ptr,                      \
+                            (cache_ptr)->cLRU_list_len,                      \
+                            (cache_ptr)->cLRU_list_size, (fail_val))         \
+    }                                                                        \
+                                                                             \
+} /* H5C__UPDATE_RP_FOR_EVICTION */
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__UPDATE_RP_FOR_EVICTION(cache_ptr, entry_ptr, fail_val)          \
+{                                                                            \
+    HDassert( (cache_ptr) );                                                 \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                      \
+    HDassert( (entry_ptr) );                                                 \
+    HDassert( !((entry_ptr)->is_protected) );                                \
+    HDassert( (entry_ptr)->size > 0 );                                       \
+                                                                             \
+    /* modified LRU specific code */                                         \
+                                                                             \
+    /* remove the entry from the LRU list. */                                \
+                                                                             \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,                  \
+                    (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len,    \
+                    (cache_ptr)->LRU_list_size, (fail_val))                  \
+                                                                             \
+} /* H5C__UPDATE_RP_FOR_EVICTION */
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__UPDATE_RP_FOR_FLUSH
+ *
+ * Purpose:     Update the replacement policy data structures for a flush
+ *		of the specified cache entry.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the function
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 5/6/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/27/04
+ *		Converted the function H5C_update_rp_for_flush() to the
+ *		macro H5C__UPDATE_RP_FOR_FLUSH in an effort to squeeze
+ *		a bit more performance out of the cache.
+ *
+ *		At least for the first cut, I am leaving the comments and
+ *		white space in the macro.  If they cause dificulties with
+ *		pre-processor, I'll have to remove them.
+ *
+ *		JRM - 7/28/04
+ *		Split macro into two version, one supporting the clean and
+ *		dirty LRU lists, and the other not.  Yet another attempt
+ *		at optimization.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__UPDATE_RP_FOR_FLUSH(cache_ptr, entry_ptr, fail_val)            \
+{                                                                           \
+    HDassert( (cache_ptr) );                                                \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                     \
+    HDassert( (entry_ptr) );                                                \
+    HDassert( !((entry_ptr)->is_protected) );                               \
+    HDassert( (entry_ptr)->size > 0 );                                      \
+                                                                            \
+    /* modified LRU specific code */                                        \
+                                                                            \
+    /* remove the entry from the LRU list, and re-insert it at the head. */ \
+                                                                            \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,                 \
+                    (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len,   \
+                    (cache_ptr)->LRU_list_size, (fail_val))                 \
+                                                                            \
+    H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,                \
+                     (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len,  \
+                     (cache_ptr)->LRU_list_size, (fail_val))                \
+                                                                            \
+    /* since the entry is being flushed or cleared, one would think that it \
+     * must be dirty -- but that need not be the case.  Use the dirty flag  \
+     * to infer whether the entry is on the clean or dirty LRU list, and    \
+     * remove it.  Then insert it at the head of the clean LRU list.        \
+     *                                                                      \
+     * The function presumes that a dirty entry will be either cleared or   \
+     * flushed shortly, so it is OK if we put a dirty entry on the clean    \
+     * LRU list.                                                            \
+     */                                                                     \
+                                                                            \
+    if ( (entry_ptr)->is_dirty ) {                                          \
+        H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->dLRU_head_ptr,        \
+                            (cache_ptr)->dLRU_tail_ptr,                     \
+                            (cache_ptr)->dLRU_list_len,                     \
+                            (cache_ptr)->dLRU_list_size, (fail_val))        \
+    } else {                                                                \
+        H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->cLRU_head_ptr,        \
+                            (cache_ptr)->cLRU_tail_ptr,                     \
+                            (cache_ptr)->cLRU_list_len,                     \
+                            (cache_ptr)->cLRU_list_size, (fail_val))        \
+    }                                                                       \
+                                                                            \
+    H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr,           \
+                         (cache_ptr)->cLRU_tail_ptr,                        \
+                         (cache_ptr)->cLRU_list_len,                        \
+                         (cache_ptr)->cLRU_list_size, (fail_val))           \
+                                                                            \
+    /* End modified LRU specific code. */                                   \
+                                                                            \
+} /* H5C__UPDATE_RP_FOR_FLUSH */
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__UPDATE_RP_FOR_FLUSH(cache_ptr, entry_ptr, fail_val)            \
+{                                                                           \
+    HDassert( (cache_ptr) );                                                \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                     \
+    HDassert( (entry_ptr) );                                                \
+    HDassert( !((entry_ptr)->is_protected) );                               \
+    HDassert( (entry_ptr)->size > 0 );                                      \
+                                                                            \
+    /* modified LRU specific code */                                        \
+                                                                            \
+    /* remove the entry from the LRU list, and re-insert it at the head. */ \
+                                                                            \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,                 \
+                    (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len,   \
+                    (cache_ptr)->LRU_list_size, (fail_val))                 \
+                                                                            \
+    H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,                \
+                     (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len,  \
+                     (cache_ptr)->LRU_list_size, (fail_val))                \
+                                                                            \
+    /* End modified LRU specific code. */                                   \
+                                                                            \
+} /* H5C__UPDATE_RP_FOR_FLUSH */
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__UPDATE_RP_FOR_INSERTION
+ *
+ * Purpose:     Update the replacement policy data structures for an
+ *		insertion of the specified cache entry.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the function
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 5/17/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/27/04
+ *		Converted the function H5C_update_rp_for_insertion() to the
+ *		macro H5C__UPDATE_RP_FOR_INSERTION in an effort to squeeze
+ *		a bit more performance out of the cache.
+ *
+ *		At least for the first cut, I am leaving the comments and
+ *		white space in the macro.  If they cause dificulties with
+ *		pre-processor, I'll have to remove them.
+ *
+ *		JRM - 7/28/04
+ *		Split macro into two version, one supporting the clean and
+ *		dirty LRU lists, and the other not.  Yet another attempt
+ *		at optimization.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__UPDATE_RP_FOR_INSERTION(cache_ptr, entry_ptr, fail_val)       \
+{                                                                          \
+    HDassert( (cache_ptr) );                                               \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                    \
+    HDassert( (entry_ptr) );                                               \
+    HDassert( !((entry_ptr)->is_protected) );                              \
+    HDassert( (entry_ptr)->size > 0 );                                     \
+                                                                           \
+    /* modified LRU specific code */                                       \
+                                                                           \
+    /* insert the entry at the head of the LRU list. */                    \
+                                                                           \
+    H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,               \
+                     (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len, \
+                     (cache_ptr)->LRU_list_size, (fail_val))               \
+                                                                           \
+    /* insert the entry at the head of the clean or dirty LRU list as      \
+     * appropriate.                                                        \
+     */                                                                    \
+                                                                           \
+    if ( entry_ptr->is_dirty ) {                                           \
+        H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->dLRU_head_ptr,      \
+                             (cache_ptr)->dLRU_tail_ptr,                   \
+                             (cache_ptr)->dLRU_list_len,                   \
+                             (cache_ptr)->dLRU_list_size, (fail_val))      \
+    } else {                                                               \
+        H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr,      \
+                             (cache_ptr)->cLRU_tail_ptr,                   \
+                             (cache_ptr)->cLRU_list_len,                   \
+                             (cache_ptr)->cLRU_list_size, (fail_val))      \
+    }                                                                      \
+                                                                           \
+    /* End modified LRU specific code. */                                  \
+                                                                           \
+}
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__UPDATE_RP_FOR_INSERTION(cache_ptr, entry_ptr, fail_val)       \
+{                                                                          \
+    HDassert( (cache_ptr) );                                               \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                    \
+    HDassert( (entry_ptr) );                                               \
+    HDassert( !((entry_ptr)->is_protected) );                              \
+    HDassert( (entry_ptr)->size > 0 );                                     \
+                                                                           \
+    /* modified LRU specific code */                                       \
+                                                                           \
+    /* insert the entry at the head of the LRU list. */                    \
+                                                                           \
+    H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,               \
+                     (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len, \
+                     (cache_ptr)->LRU_list_size, (fail_val))               \
+                                                                           \
+    /* End modified LRU specific code. */                                  \
+                                                                           \
+}
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__UPDATE_RP_FOR_PROTECT
+ *
+ * Purpose:     Update the replacement policy data structures for a
+ *		protect of the specified cache entry.
+ *
+ *		To do this, unlink the specified entry from any data
+ *		structures used by the replacement policy, and add the
+ *		entry to the protected list.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the function
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 5/17/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/27/04
+ *		Converted the function H5C_update_rp_for_protect() to the
+ *		macro H5C__UPDATE_RP_FOR_PROTECT in an effort to squeeze
+ *		a bit more performance out of the cache.
+ *
+ *		At least for the first cut, I am leaving the comments and
+ *		white space in the macro.  If they cause dificulties with
+ *		pre-processor, I'll have to remove them.
+ *
+ *		JRM - 7/28/04
+ *		Split macro into two version, one supporting the clean and
+ *		dirty LRU lists, and the other not.  Yet another attempt
+ *		at optimization.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__UPDATE_RP_FOR_PROTECT(cache_ptr, entry_ptr, fail_val)        \
+{                                                                         \
+    HDassert( (cache_ptr) );                                              \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                   \
+    HDassert( (entry_ptr) );                                              \
+    HDassert( !((entry_ptr)->is_protected) );                             \
+    HDassert( (entry_ptr)->size > 0 );                                    \
+                                                                          \
+    /* modified LRU specific code */                                      \
+                                                                          \
+    /* remove the entry from the LRU list. */                             \
+                                                                          \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,               \
+                    (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len, \
+                    (cache_ptr)->LRU_list_size, (fail_val))               \
+                                                                          \
+    /* Similarly, remove the entry from the clean or dirty LRU list       \
+     * as appropriate.                                                    \
+     */                                                                   \
+                                                                          \
+    if ( (entry_ptr)->is_dirty ) {                                        \
+                                                                          \
+        H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->dLRU_head_ptr,      \
+                            (cache_ptr)->dLRU_tail_ptr,                   \
+                            (cache_ptr)->dLRU_list_len,                   \
+                            (cache_ptr)->dLRU_list_size, (fail_val))      \
+                                                                          \
+    } else {                                                              \
+                                                                          \
+        H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->cLRU_head_ptr,      \
+                            (cache_ptr)->cLRU_tail_ptr,                   \
+                            (cache_ptr)->cLRU_list_len,                   \
+                            (cache_ptr)->cLRU_list_size, (fail_val))      \
+    }                                                                     \
+                                                                          \
+    /* End modified LRU specific code. */                                 \
+                                                                          \
+    /* Regardless of the replacement policy, now add the entry to the     \
+     * protected list.                                                    \
+     */                                                                   \
+                                                                          \
+    H5C__DLL_APPEND((entry_ptr), (cache_ptr)->pl_head_ptr,                \
+                    (cache_ptr)->pl_tail_ptr,                             \
+                    (cache_ptr)->pl_len,                                  \
+                    (cache_ptr)->pl_size, (fail_val))                     \
+} /* H5C__UPDATE_RP_FOR_PROTECT */
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__UPDATE_RP_FOR_PROTECT(cache_ptr, entry_ptr, fail_val)        \
+{                                                                         \
+    HDassert( (cache_ptr) );                                              \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                   \
+    HDassert( (entry_ptr) );                                              \
+    HDassert( !((entry_ptr)->is_protected) );                             \
+    HDassert( (entry_ptr)->size > 0 );                                    \
+                                                                          \
+    /* modified LRU specific code */                                      \
+                                                                          \
+    /* remove the entry from the LRU list. */                             \
+                                                                          \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,               \
+                    (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len, \
+                    (cache_ptr)->LRU_list_size, (fail_val))               \
+                                                                          \
+    /* End modified LRU specific code. */                                 \
+                                                                          \
+    /* Regardless of the replacement policy, now add the entry to the     \
+     * protected list.                                                    \
+     */                                                                   \
+                                                                          \
+    H5C__DLL_APPEND((entry_ptr), (cache_ptr)->pl_head_ptr,                \
+                    (cache_ptr)->pl_tail_ptr,                             \
+                    (cache_ptr)->pl_len,                                  \
+                    (cache_ptr)->pl_size, (fail_val))                     \
+} /* H5C__UPDATE_RP_FOR_PROTECT */
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__UPDATE_RP_FOR_RENAME
+ *
+ * Purpose:     Update the replacement policy data structures for a
+ *		rename of the specified cache entry.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the function
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 5/17/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/27/04
+ *		Converted the function H5C_update_rp_for_rename() to the
+ *		macro H5C__UPDATE_RP_FOR_RENAME in an effort to squeeze
+ *		a bit more performance out of the cache.
+ *
+ *		At least for the first cut, I am leaving the comments and
+ *		white space in the macro.  If they cause dificulties with
+ *		pre-processor, I'll have to remove them.
+ *
+ *		JRM - 7/28/04
+ *		Split macro into two version, one supporting the clean and
+ *		dirty LRU lists, and the other not.  Yet another attempt
+ *		at optimization.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__UPDATE_RP_FOR_RENAME(cache_ptr, entry_ptr, fail_val)           \
+{                                                                           \
+    HDassert( (cache_ptr) );                                                \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                     \
+    HDassert( (entry_ptr) );                                                \
+    HDassert( !((entry_ptr)->is_protected) );                               \
+    HDassert( (entry_ptr)->size > 0 );                                      \
+                                                                            \
+    /* modified LRU specific code */                                        \
+                                                                            \
+    /* remove the entry from the LRU list, and re-insert it at the head. */ \
+                                                                            \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,                 \
+                    (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len,   \
+                    (cache_ptr)->LRU_list_size, (fail_val))                 \
+                                                                            \
+    H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,                \
+                     (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len,  \
+                     (cache_ptr)->LRU_list_size, (fail_val))                \
+                                                                            \
+    /* move the entry to the head of either the clean or dirty LRU list     \
+     * as appropriate.                                                      \
+     */                                                                     \
+                                                                            \
+    if ( (entry_ptr)->is_dirty ) {                                          \
+                                                                            \
+        H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->dLRU_head_ptr,        \
+                            (cache_ptr)->dLRU_tail_ptr,                     \
+                            (cache_ptr)->dLRU_list_len,                     \
+                            (cache_ptr)->dLRU_list_size, (fail_val))        \
+                                                                            \
+        H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->dLRU_head_ptr,       \
+                             (cache_ptr)->dLRU_tail_ptr,                    \
+                             (cache_ptr)->dLRU_list_len,                    \
+                             (cache_ptr)->dLRU_list_size, (fail_val))       \
+                                                                            \
+    } else {                                                                \
+                                                                            \
+        H5C__AUX_DLL_REMOVE((entry_ptr), (cache_ptr)->cLRU_head_ptr,        \
+                            (cache_ptr)->cLRU_tail_ptr,                     \
+                            (cache_ptr)->cLRU_list_len,                     \
+                            (cache_ptr)->cLRU_list_size, (fail_val))        \
+                                                                            \
+        H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr,       \
+                             (cache_ptr)->cLRU_tail_ptr,                    \
+                             (cache_ptr)->cLRU_list_len,                    \
+                             (cache_ptr)->cLRU_list_size, (fail_val))       \
+    }                                                                       \
+                                                                            \
+    /* End modified LRU specific code. */                                   \
+                                                                            \
+} /* H5C__UPDATE_RP_FOR_RENAME */
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__UPDATE_RP_FOR_RENAME(cache_ptr, entry_ptr, fail_val)           \
+{                                                                           \
+    HDassert( (cache_ptr) );                                                \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                     \
+    HDassert( (entry_ptr) );                                                \
+    HDassert( !((entry_ptr)->is_protected) );                               \
+    HDassert( (entry_ptr)->size > 0 );                                      \
+                                                                            \
+    /* modified LRU specific code */                                        \
+                                                                            \
+    /* remove the entry from the LRU list, and re-insert it at the head. */ \
+                                                                            \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->LRU_head_ptr,                 \
+                    (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len,   \
+                    (cache_ptr)->LRU_list_size, (fail_val))                 \
+                                                                            \
+    H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,                \
+                     (cache_ptr)->LRU_tail_ptr, (cache_ptr)->LRU_list_len,  \
+                     (cache_ptr)->LRU_list_size, (fail_val))                \
+                                                                            \
+    /* End modified LRU specific code. */                                   \
+                                                                            \
+} /* H5C__UPDATE_RP_FOR_RENAME */
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Macro:	H5C__UPDATE_RP_FOR_UNPROTECT
+ *
+ * Purpose:     Update the replacement policy data structures for an
+ *		unprotect of the specified cache entry.
+ *
+ *		To do this, unlink the specified entry from the protected
+ *		list, and re-insert it in the data structures used by the
+ *		current replacement policy.
+ *
+ *		At present, we only support the modified LRU policy, so
+ *		this function deals with that case unconditionally.  If
+ *		we ever support other replacement policies, the function
+ *		should switch on the current policy and act accordingly.
+ *
+ * Return:      N/A
+ *
+ * Programmer:  John Mainzer, 5/19/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/27/04
+ *		Converted the function H5C_update_rp_for_unprotect() to
+ *		the macro H5C__UPDATE_RP_FOR_UNPROTECT in an effort to
+ *		squeeze a bit more performance out of the cache.
+ *
+ *		At least for the first cut, I am leaving the comments and
+ *		white space in the macro.  If they cause dificulties with
+ *		pre-processor, I'll have to remove them.
+ *
+ *		JRM - 7/28/04
+ *		Split macro into two version, one supporting the clean and
+ *		dirty LRU lists, and the other not.  Yet another attempt
+ *		at optimization.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+#define H5C__UPDATE_RP_FOR_UNPROTECT(cache_ptr, entry_ptr, fail_val)   \
+{                                                                      \
+    HDassert( (cache_ptr) );                                           \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                \
+    HDassert( (entry_ptr) );                                           \
+    HDassert( (entry_ptr)->is_protected);                              \
+    HDassert( (entry_ptr)->size > 0 );                                 \
+                                                                       \
+    /* Regardless of the replacement policy, remove the entry from the \
+     * protected list.                                                 \
+     */                                                                \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->pl_head_ptr,             \
+                    (cache_ptr)->pl_tail_ptr, (cache_ptr)->pl_len,     \
+                    (cache_ptr)->pl_size, (fail_val))                  \
+                                                                       \
+    /* modified LRU specific code */                                   \
+                                                                       \
+    /* insert the entry at the head of the LRU list. */                \
+                                                                       \
+    H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,           \
+                     (cache_ptr)->LRU_tail_ptr,                        \
+                     (cache_ptr)->LRU_list_len,                        \
+                     (cache_ptr)->LRU_list_size, (fail_val))           \
+                                                                       \
+    /* Similarly, insert the entry at the head of either the clean or  \
+     * dirty LRU list as appropriate.                                  \
+     */                                                                \
+                                                                       \
+    if ( (entry_ptr)->is_dirty ) {                                     \
+                                                                       \
+        H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->dLRU_head_ptr,  \
+                             (cache_ptr)->dLRU_tail_ptr,               \
+                             (cache_ptr)->dLRU_list_len,               \
+                             (cache_ptr)->dLRU_list_size, (fail_val))  \
+                                                                       \
+    } else {                                                           \
+                                                                       \
+        H5C__AUX_DLL_PREPEND((entry_ptr), (cache_ptr)->cLRU_head_ptr,  \
+                             (cache_ptr)->cLRU_tail_ptr,               \
+                             (cache_ptr)->cLRU_list_len,               \
+                             (cache_ptr)->cLRU_list_size, (fail_val))  \
+    }                                                                  \
+                                                                       \
+    /* End modified LRU specific code. */                              \
+                                                                       \
+} /* H5C__UPDATE_RP_FOR_UNPROTECT */
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+#define H5C__UPDATE_RP_FOR_UNPROTECT(cache_ptr, entry_ptr, fail_val)   \
+{                                                                      \
+    HDassert( (cache_ptr) );                                           \
+    HDassert( (cache_ptr)->magic == H5C__H5C_T_MAGIC );                \
+    HDassert( (entry_ptr) );                                           \
+    HDassert( (entry_ptr)->is_protected);                              \
+    HDassert( (entry_ptr)->size > 0 );                                 \
+                                                                       \
+    /* Regardless of the replacement policy, remove the entry from the \
+     * protected list.                                                 \
+     */                                                                \
+    H5C__DLL_REMOVE((entry_ptr), (cache_ptr)->pl_head_ptr,             \
+                    (cache_ptr)->pl_tail_ptr, (cache_ptr)->pl_len,     \
+                    (cache_ptr)->pl_size, (fail_val))                  \
+                                                                       \
+    /* modified LRU specific code */                                   \
+                                                                       \
+    /* insert the entry at the head of the LRU list. */                \
+                                                                       \
+    H5C__DLL_PREPEND((entry_ptr), (cache_ptr)->LRU_head_ptr,           \
+                     (cache_ptr)->LRU_tail_ptr,                        \
+                     (cache_ptr)->LRU_list_len,                        \
+                     (cache_ptr)->LRU_list_size, (fail_val))           \
+                                                                       \
+    /* End modified LRU specific code. */                              \
+                                                                       \
+} /* H5C__UPDATE_RP_FOR_UNPROTECT */
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+
+/****************************************************************************
+ *
+ * structure H5C_t
+ *
+ * Catchall structure for all variables specific to an instance of the cache.
+ *
+ * While the individual fields of the structure are discussed below, the
+ * following overview may be helpful.
+ *
+ * Entries in the cache are stored in an instance of H5TB_TREE, indexed on
+ * the entry's disk address.  While the H5TB_TREE is less efficient than
+ * hash table, it keeps the entries in address sorted order.  As flushes
+ * in parallel mode are more efficient if they are issued in increasing
+ * address order, this is a significant benefit.  Also the H5TB_TREE code
+ * was readily available, which reduced development time.
+ *
+ * While the cache was designed with multiple replacement policies in mind,
+ * at present only a modified form of LRU is supported.
+ *
+ *                                              JRM - 4/26/04
+ *
+ * Profiling has indicated that searches in the instance of H5TB_TREE are
+ * too expensive.  To deal with this issue, I have augmented the cache
+ * with a hash table in which all entries will be stored.  Given the
+ * advantages of flushing entries in increasing address order, the TBBT
+ * is retained, but only dirty entries are stored in it.  At least for
+ * now, we will leave entries in the TBBT after they are flushed.
+ *
+ * Note that index_size and index_len now refer to the total size of
+ * and number of entries in the hash table.
+ *
+ *						JRM - 7/19/04
+ *
+ * Note that the dirty entries are now stored in a skip list, instead of
+ * the threaded, balanced binary tree (TBBT).
+ *
+ *						QAK - 11/27/04
+ *
+ *           *********************************************
+ *
+ * WARNING:  A copy of H5C_t is in tst/cache.c (under the name "local_H5C_t"
+ *	     to allow the test code to access the internal fields of the
+ *	     cache.  If you modify H5C_t, be sure to update local_H5C_t
+ *	     in cache.c as well.
+ *
+ *           *********************************************
+ *
+ * magic:	Unsigned 32 bit integer always set to H5C__H5C_T_MAGIC.  This
+ *		field is used to validate pointers to instances of H5C_t.
+ *
+ * max_type_id:	Integer field containing the maximum type id number assigned
+ *		to a type of entry in the cache.  All type ids from 0 to
+ *		max_type_id inclusive must be defined.  The names of the
+ *		types are stored in the type_name_table discussed below, and
+ *		indexed by the ids.
+ *
+ * type_name_table_ptr: Pointer to an array of pointer to char of length
+ *		max_type_id + 1.  The strings pointed to by the entries
+ *		in the array are the names of the entry types associated
+ *		with the indexing type IDs.
+ *
+ * max_cache_size:  Nominal maximum number of bytes that may be stored in the
+ *              cache.  This value should be viewed as a soft limit, as the
+ *              cache can exceed this value under the following circumstances:
+ *
+ *              a) All entries in the cache are protected, and the cache is
+ *                 asked to insert a new entry.  In this case the new entry
+ *                 will be created.  If this causes the cache to exceed
+ *                 max_cache_size, it will do so.  The cache will attempt
+ *                 to reduce its size as entries are unprotected.
+ *
+ *              b) When running in parallel mode, the cache may not be
+ *		   permitted to flush a dirty entry in response to a read.
+ *		   If there are no clean entries available to evict, the
+ *		   cache will exceed its maximum size.  Again the cache
+ *                 will attempt to reduce its size to the max_cache_size
+ *                 limit on the next cache write.
+ *
+ * min_clean_size: Nominal minimum number of clean bytes in the cache.
+ *              The cache attempts to maintain this number of bytes of
+ *              clean data so as to avoid case b) above.  Again, this is
+ *              a soft limit.
+ *
+ *
+ * In addition to the call back functions required for each entry, the
+ * cache requires the following call back functions for this instance of
+ * the cache as a whole:
+ *
+ * check_write_permitted:  In certain applications, the cache may not
+ *		be allowed to write to disk at certain time.  If specified,
+ *		the check_write_permitted function is used to determine if
+ *		a write is permissible at any given point in time.
+ *
+ *		If no such function is specified (i.e. this field is NULL),
+ *		the cache will presume that writes are always permissable.
+ *
+ *
+ * The cache requires an index to facilitate searching for entries.  The
+ * following fields support that index.
+ *
+ * index_len:   Number of entries currently in the hash table used to index
+ *		the cache.
+ *
+ * index_size:  Number of bytes of cache entries currently stored in the
+ *              hash table used to index the cache.
+ *
+ *              This value should not be mistaken for footprint of the
+ *              cache in memory.  The average cache entry is small, and
+ *              the cache has a considerable overhead.  Multiplying the
+ *              index_size by two should yield a conservative estimate
+ *              of the cache's memory footprint.
+ *
+ * index:	Array of pointer to H5C_cache_entry_t of size
+ *		H5C__HASH_TABLE_LEN.  At present, this value is a power
+ *		of two, not the usual prime number.
+ *
+ *		I hope that the variable size of cache elements, the large
+ *		hash table size, and the way in which HDF5 allocates space
+ *		will combine to avoid problems with periodicity.  If so, we
+ *		can use a trivial hash function (a bit-and and a 3 bit left
+ *		shift) with some small savings.
+ *
+ *		If not, it will become evident in the statistics. Changing
+ *		to the usual prime number length hash table will require
+ *		changing the H5C__HASH_FCN macro and the deletion of the
+ *		H5C__HASH_MASK #define.  No other changes should be required.
+ *
+ *
+ * When we flush the cache, we need to write entries out in increasing
+ * address order.  An instance of a skip list is used to store dirty entries in
+ * sorted order.  Whether it is cheaper to sort the dirty entries as needed,
+ * or to maintain the list is an open question.  At a guess, it depends
+ * on how frequently the cache is flushed.  We will see how it goes.
+ *
+ * For now at least, I will not remove dirty entries from the list as they
+ * are flushed.
+ *
+ * slist_len:    Number of entries currently in the skip list
+ *              used to maintain a sorted list of dirty entries in the
+ *		cache.
+ *
+ * slist_size:   Number of bytes of cache entries currently stored in the
+ *              skip list used to maintain a sorted list of
+ *		dirty entries in the cache.
+ *
+ * slist_ptr:	pointer to the instance of H5SL_t used maintain a sorted
+ *		list of dirty entries in the cache.  This sorted list has
+ *		two uses:
+ *
+ *		a) It allows us to flush dirty entries in increasing address
+ *		   order, which results in significant savings.
+ *
+ *		b) It facilitates checking for adjacent dirty entries when
+ *		   attempting to evict entries from the cache.  While we
+ *		   don't use this at present, I hope that this will allow
+ *		   some optimizations when I get to it.
+ *
+ *
+ * When a cache entry is protected, it must be removed from the LRU
+ * list(s) as it cannot be either flushed or evicted until it is unprotected.
+ * The following fields are used to implement the protected list (pl).
+ *
+ * pl_len:      Number of entries currently residing on the protected list.
+ *
+ * pl_size:     Number of bytes of cache entries currently residing on the
+ *              protected list.
+ *
+ * pl_head_ptr: Pointer to the head of the doubly linked list of protected
+ *              entries.  Note that cache entries on this list are linked
+ *              by their next and prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ * pl_tail_ptr: Pointer to the tail of the doubly linked list of protected
+ *              entries.  Note that cache entries on this list are linked
+ *              by their next and prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ *
+ * The cache must have a replacement policy, and the fields supporting this
+ * policy must be accessible from this structure.
+ *
+ * While there has been interest in several replacement policies for
+ * this cache, the initial development schedule is tight.  Thus I have
+ * elected to support only a modified LRU policy for the first cut.
+ *
+ * To further simplify matters, I have simply included the fields needed
+ * by the modified LRU in this structure.  When and if we add support for
+ * other policies, it will probably be easiest to just add the necessary
+ * fields to this structure as well -- we only create one instance of this
+ * structure per file, so the overhead is not excessive.
+ *
+ *
+ * Fields supporting the modified LRU policy:
+ *
+ * See most any OS text for a discussion of the LRU replacement policy.
+ *
+ * When operating in parallel mode, we must ensure that a read does not
+ * cause a write.  If it does, the process will hang, as the write will
+ * be collective and the other processes will not know to participate.
+ *
+ * To deal with this issue, I have modified the usual LRU policy by adding
+ * clean and dirty LRU lists to the usual LRU list.
+ *
+ * The clean LRU list is simply the regular LRU list with all dirty cache
+ * entries removed.
+ *
+ * Similarly, the dirty LRU list is the regular LRU list with all the clean
+ * cache entries removed.
+ *
+ * When reading in parallel mode, we evict from the clean LRU list only.
+ * This implies that we must try to ensure that the clean LRU list is
+ * reasonably well stocked at all times.
+ *
+ * We attempt to do this by trying to flush enough entries on each write
+ * to keep the cLRU_list_size >= min_clean_size.
+ *
+ * Even if we start with a completely clean cache, a sequence of protects
+ * without unprotects can empty the clean LRU list.  In this case, the
+ * cache must grow temporarily.  At the next write, we will attempt to
+ * evict enough entries to reduce index_size to less than max_cache_size.
+ * While this will usually be possible, all bets are off if enough entries
+ * are protected.
+ *
+ * Discussions of the individual fields used by the modified LRU replacement
+ * policy follow:
+ *
+ * LRU_list_len:  Number of cache entries currently on the LRU list.
+ *
+ *              Observe that LRU_list_len + pl_len must always equal
+ *              index_len.
+ *
+ * LRU_list_size:  Number of bytes of cache entries currently residing on the
+ *              LRU list.
+ *
+ *              Observe that LRU_list_size + pl_size must always equal
+ *              index_size.
+ *
+ * LRU_head_ptr:  Pointer to the head of the doubly linked LRU list.  Cache
+ *              entries on this list are linked by their next and prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ * LRU_tail_ptr:  Pointer to the tail of the doubly linked LRU list.  Cache
+ *              entries on this list are linked by their next and prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ * cLRU_list_len: Number of cache entries currently on the clean LRU list.
+ *
+ *              Observe that cLRU_list_len + dLRU_list_len must always
+ *              equal LRU_list_len.
+ *
+ * cLRU_list_size:  Number of bytes of cache entries currently residing on
+ *              the clean LRU list.
+ *
+ *              Observe that cLRU_list_size + dLRU_list_size must always
+ *              equal LRU_list_size.
+ *
+ * cLRU_head_ptr:  Pointer to the head of the doubly linked clean LRU list.
+ *              Cache entries on this list are linked by their aux_next and
+ *              aux_prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ * cLRU_tail_ptr:  Pointer to the tail of the doubly linked clean LRU list.
+ *              Cache entries on this list are linked by their aux_next and
+ *              aux_prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ * dLRU_list_len: Number of cache entries currently on the dirty LRU list.
+ *
+ *              Observe that cLRU_list_len + dLRU_list_len must always
+ *              equal LRU_list_len.
+ *
+ * dLRU_list_size:  Number of cache entries currently on the dirty LRU list.
+ *
+ *              Observe that cLRU_list_len + dLRU_list_len must always
+ *              equal LRU_list_len.
+ *
+ * dLRU_head_ptr:  Pointer to the head of the doubly linked dirty LRU list.
+ *              Cache entries on this list are linked by their aux_next and
+ *              aux_prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ * dLRU_tail_ptr:  Pointer to the tail of the doubly linked dirty LRU list.
+ *              Cache entries on this list are linked by their aux_next and
+ *              aux_prev fields.
+ *
+ *              This field is NULL if the list is empty.
+ *
+ *
+ * Statistics collection fields:
+ *
+ * When enabled, these fields are used to collect statistics as described
+ * below.  The first set are collected only when H5C_COLLECT_CACHE_STATS
+ * is true.
+ *
+ * hits:        Array of int64 of length H5C__MAX_NUM_TYPE_IDS.  The cells
+ *		are used to record the number of times an entry with type id
+ *		equal to the array index has been in cache when requested in
+ *		the current epoch.
+ *
+ * misses:      Array of int64 of length H5C__MAX_NUM_TYPE_IDS.  The cells
+ *		are used to record the number of times an entry with type id
+ *		equal to the array index has not been in cache when
+ *		requested in the current epoch.
+ *
+ * insertions:  Array of int64 of length H5C__MAX_NUM_TYPE_IDS.  The cells
+ *		are used to record the number of times an entry with type
+ *		id equal to the array index has been inserted into the
+ *		cache in the current epoch.
+ *
+ * clears:      Array of int64 of length H5C__MAX_NUM_TYPE_IDS.  The cells
+ *		are used to record the number of times an entry with type
+ *		id equal to the array index has been cleared in the current
+ *		epoch.
+ *
+ * flushes:     Array of int64 of length H5C__MAX_NUM_TYPE_IDS.  The cells
+ *		are used to record the number of times an entry with type id
+ *		equal to the array index has been written to disk in the
+ *              current epoch.
+ *
+ * evictions:   Array of int64 of length H5C__MAX_NUM_TYPE_IDS.  The cells
+ *		are used to record the number of times an entry with type id
+ *		equal to the array index has been evicted from the cache in
+ *		the current epoch.
+ *
+ * renames:     Array of int64 of length H5C__MAX_NUM_TYPE_IDS.  The cells
+ *		are used to record the number of times an entry with type
+ *		id equal to the array index has been renamed in the current
+ *		epoch.
+ *
+ * total_ht_insertions: Number of times entries have been inserted into the
+ *		hash table in the current epoch.
+ *
+ * total_ht_deletions: Number of times entries have been deleted from the
+ *              hash table in the current epoch.
+ *
+ * successful_ht_searches: int64 containing the total number of successful
+ *		searches of the hash table in the current epoch.
+ *
+ * total_successful_ht_search_depth: int64 containing the total number of
+ *		entries other than the targets examined in successful
+ *		searches of the hash table in the current epoch.
+ *
+ * failed_ht_searches: int64 containing the total number of unsuccessful
+ *              searches of the hash table in the current epoch.
+ *
+ * total_failed_ht_search_depth: int64 containing the total number of
+ *              entries examined in unsuccessful searches of the hash
+ *		table in the current epoch.
+ *
+ * max_index_len:  Largest value attained by the index_len field in the
+ *              current epoch.
+ *
+ * max_index_size:  Largest value attained by the index_size field in the
+ *              current epoch.
+ *
+ * max_slist_len:  Largest value attained by the slist_len field in the
+ *              current epoch.
+ *
+ * max_slist_size:  Largest value attained by the slist_size field in the
+ *              current epoch.
+ *
+ * max_pl_len:  Largest value attained by the pl_len field in the
+ *              current epoch.
+ *
+ * max_pl_size: Largest value attained by the pl_size field in the
+ *              current epoch.
+ *
+ * The remaining stats are collected only when both H5C_COLLECT_CACHE_STATS
+ * and H5C_COLLECT_CACHE_ENTRY_STATS are true.
+ *
+ * max_accesses: Array of int32 of length H5C__MAX_NUM_TYPE_IDS.  The cells
+ *		are used to record the maximum number of times any single
+ *		entry with type id equal to the array index has been
+ *		accessed in the current epoch.
+ *
+ * min_accesses: Array of int32 of length H5C__MAX_NUM_TYPE_IDS.  The cells
+ *		are used to record the minimum number of times any single
+ *		entry with type id equal to the array index has been
+ *		accessed in the current epoch.
+ *
+ * max_clears:  Array of int32 of length H5C__MAX_NUM_TYPE_IDS.  The cells
+ *		are used to record the maximum number of times any single
+ *		entry with type id equal to the array index has been cleared
+ *		in the current epoch.
+ *
+ * max_flushes: Array of int32 of length H5C__MAX_NUM_TYPE_IDS.  The cells
+ *		are used to record the maximum number of times any single
+ *		entry with type id equal to the array index has been
+ *		flushed in the current epoch.
+ *
+ * max_size:	Array of size_t of length H5C__MAX_NUM_TYPE_IDS.  The cells
+ *              are used to record the maximum size of any single entry
+ *		with type id equal to the array index that has resided in
+ *		the cache in the current epoch.
+ *
+ *
+ * Fields supporting testing:
+ *
+ * For test purposes, it is useful to turn off some asserts and sanity
+ * checks.  The following flags support this.
+ *
+ * skip_file_checks:  Boolean flag used to skip sanity checks on file
+ *		parameters passed to the cache.  In the test bed, there
+ *		is no reason to have a file open, as the cache proper
+ *		just passes these parameters through without using them.
+ *
+ *		When this flag is set, all sanity checks on the file
+ *		parameters are skipped.  The field defaults to FALSE.
+ *
+ * skip_dxpl_id_checks:  Boolean flag used to skip sanity checks on the
+ *		dxpl_id parameters passed to the cache.  These are not
+ *		used directly by the cache, so skipping the checks
+ *		simplifies the test bed.
+ *
+ *		When this flag is set, all sanity checks on the dxpl_id
+ *		parameters are skipped.  The field defaults to FALSE.
+ *
+ ****************************************************************************/
+
+#define H5C__H5C_T_MAGIC	0x005CAC0E
+#define H5C__MAX_NUM_TYPE_IDS	9
+
+struct H5C_t
+{
+    uint32_t			magic;
+
+    int32_t			max_type_id;
+    const char *                (* type_name_table_ptr);
+
+    size_t                      max_cache_size;
+    size_t                      min_clean_size;
+
+    H5C_write_permitted_func_t	check_write_permitted;
+
+    int32_t                     index_len;
+    size_t                      index_size;
+    H5C_cache_entry_t *		(index[H5C__HASH_TABLE_LEN]);
+
+
+    int32_t                     slist_len;
+    size_t                      slist_size;
+    H5SL_t *                    slist_ptr;
+
+    int32_t                     pl_len;
+    size_t                      pl_size;
+    H5C_cache_entry_t *	        pl_head_ptr;
+    H5C_cache_entry_t *  	pl_tail_ptr;
+
+    int32_t                     LRU_list_len;
+    size_t                      LRU_list_size;
+    H5C_cache_entry_t *		LRU_head_ptr;
+    H5C_cache_entry_t *		LRU_tail_ptr;
+
+    int32_t                     cLRU_list_len;
+    size_t                      cLRU_list_size;
+    H5C_cache_entry_t *		cLRU_head_ptr;
+    H5C_cache_entry_t *		cLRU_tail_ptr;
+
+    int32_t                     dLRU_list_len;
+    size_t                      dLRU_list_size;
+    H5C_cache_entry_t *		dLRU_head_ptr;
+    H5C_cache_entry_t *	        dLRU_tail_ptr;
+
+#if H5C_COLLECT_CACHE_STATS
+
+    /* stats fields */
+    int64_t                     hits[H5C__MAX_NUM_TYPE_IDS];
+    int64_t                     misses[H5C__MAX_NUM_TYPE_IDS];
+    int64_t                     insertions[H5C__MAX_NUM_TYPE_IDS];
+    int64_t                     clears[H5C__MAX_NUM_TYPE_IDS];
+    int64_t                     flushes[H5C__MAX_NUM_TYPE_IDS];
+    int64_t                     evictions[H5C__MAX_NUM_TYPE_IDS];
+    int64_t                     renames[H5C__MAX_NUM_TYPE_IDS];
+
+    int64_t			total_ht_insertions;
+    int64_t			total_ht_deletions;
+    int64_t			successful_ht_searches;
+    int64_t			total_successful_ht_search_depth;
+    int64_t			failed_ht_searches;
+    int64_t			total_failed_ht_search_depth;
+
+    int32_t                     max_index_len;
+    size_t                      max_index_size;
+
+    int32_t                     max_slist_len;
+    size_t                      max_slist_size;
+
+    int32_t                     max_pl_len;
+    size_t                      max_pl_size;
+
+#if H5C_COLLECT_CACHE_ENTRY_STATS
+
+    int32_t                     max_accesses[H5C__MAX_NUM_TYPE_IDS];
+    int32_t                     min_accesses[H5C__MAX_NUM_TYPE_IDS];
+    int32_t                     max_clears[H5C__MAX_NUM_TYPE_IDS];
+    int32_t                     max_flushes[H5C__MAX_NUM_TYPE_IDS];
+    size_t                      max_size[H5C__MAX_NUM_TYPE_IDS];
+
+#endif /* H5C_COLLECT_CACHE_ENTRY_STATS */
+
+#endif /* H5C_COLLECT_CACHE_STATS */
+
+    hbool_t			skip_file_checks;
+    hbool_t			skip_dxpl_id_checks;
+
+};
+
+
+/*
+ * Private file-scope variables.
+ */
+
+/* Declare a free list to manage the H5C_t struct */
+H5FL_DEFINE_STATIC(H5C_t);
+
+/*
+ * Private file-scope function declarations:
+ */
+
+static herr_t H5C_flush_single_entry(H5F_t *             f,
+                                     hid_t               primary_dxpl_id,
+                                     hid_t               secondary_dxpl_id,
+                                     H5C_t *             cache_ptr,
+                                     const H5C_class_t * type_ptr,
+                                     haddr_t             addr,
+                                     unsigned            flags,
+                                     hbool_t *           first_flush_ptr,
+                                     hbool_t    del_entry_from_slist_on_destroy);
+
+static void * H5C_load_entry(H5F_t *             f,
+                             hid_t               dxpl_id,
+                             const H5C_class_t * type,
+                             haddr_t             addr,
+                             const void *        udata1,
+                             void *              udata2,
+                             hbool_t             skip_file_checks);
+
+static herr_t H5C_make_space_in_cache(H5F_t * f,
+                                      hid_t   primary_dxpl_id,
+                                      hid_t   secondary_dxpl_id,
+                                      H5C_t * cache_ptr,
+                                      size_t  space_needed,
+                                      hbool_t write_permitted);
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5C_create
+ *
+ * Purpose:     Allocate, initialize, and return the address of a new
+ *		instance of H5C_t.
+ *
+ *		In general, the max_cache_size parameter must be positive,
+ *		and the min_clean_size parameter must lie in the closed
+ *		interval [0, max_cache_size].
+ *
+ *		The check_write_permitted parameter must either be NULL,
+ *		or point to a function of type H5C_write_permitted_func_t.
+ *		If it is NULL, the cache will presume that writes are
+ *		always permitted.
+ *
+ * Return:      Success:        Pointer to the new instance.
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  John Mainzer
+ *              6/2/04
+ *
+ * Modifications:
+ *
+ *		JRM -- 7/20/04
+ *		Updated for the addition of the hash table.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+H5C_t *
+H5C_create(size_t		      max_cache_size,
+           size_t		      min_clean_size,
+           int			      max_type_id,
+           const char *		      (* type_name_table_ptr),
+           H5C_write_permitted_func_t check_write_permitted)
+{
+    int i;
+    H5C_t * cache_ptr = NULL;
+    H5C_t * ret_value = NULL;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5C_create, NULL)
+
+    HDassert( max_cache_size > 0 );
+    HDassert( min_clean_size <= max_cache_size );
+
+    HDassert( max_type_id >= 0 );
+    HDassert( max_type_id < H5C__MAX_NUM_TYPE_IDS );
+    HDassert( type_name_table_ptr );
+
+    for ( i = 0; i <= max_type_id; i++ ) {
+
+        HDassert( (type_name_table_ptr)[i] );
+        HDassert( HDstrlen(( type_name_table_ptr)[i]) > 0 );
+    }
+
+
+    if ( NULL == (cache_ptr = H5FL_CALLOC(H5C_t)) ) {
+
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, \
+                    "memory allocation failed")
+    }
+
+    if ( (cache_ptr->slist_ptr = H5SL_create(H5SL_TYPE_HADDR,0.5,16))
+         == NULL ) {
+
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTCREATE, NULL, "can't create skip list.")
+    }
+
+    /* If we get this far, we should succeed.  Go ahead and initialize all
+     * the fields.
+     */
+
+    cache_ptr->magic 			= H5C__H5C_T_MAGIC;
+
+    cache_ptr->max_type_id		= max_type_id;
+    cache_ptr->type_name_table_ptr	= type_name_table_ptr;
+
+    cache_ptr->max_cache_size		= max_cache_size;
+    cache_ptr->min_clean_size		= min_clean_size;
+
+    cache_ptr->check_write_permitted	= check_write_permitted;
+
+    cache_ptr->index_len		= 0;
+    cache_ptr->index_size		= (size_t)0;
+
+    cache_ptr->slist_len			= 0;
+    cache_ptr->slist_size		= (size_t)0;
+
+    for ( i = 0; i < H5C__HASH_TABLE_LEN; i++ )
+    {
+        (cache_ptr->index)[i] = NULL;
+    }
+
+    cache_ptr->pl_len			= 0;
+    cache_ptr->pl_size			= (size_t)0;
+    cache_ptr->pl_head_ptr		= NULL;
+    cache_ptr->pl_tail_ptr		= NULL;
+
+    cache_ptr->LRU_list_len		= 0;
+    cache_ptr->LRU_list_size		= (size_t)0;
+    cache_ptr->LRU_head_ptr		= NULL;
+    cache_ptr->LRU_tail_ptr		= NULL;
+
+    cache_ptr->cLRU_list_len		= 0;
+    cache_ptr->cLRU_list_size		= (size_t)0;
+    cache_ptr->cLRU_head_ptr		= NULL;
+    cache_ptr->cLRU_tail_ptr		= NULL;
+
+    cache_ptr->dLRU_list_len		= 0;
+    cache_ptr->dLRU_list_size		= (size_t)0;
+    cache_ptr->dLRU_head_ptr		= NULL;
+    cache_ptr->dLRU_tail_ptr		= NULL;
+
+    H5C_stats__reset(cache_ptr);
+
+    cache_ptr->skip_file_checks		= FALSE;
+    cache_ptr->skip_dxpl_id_checks	= FALSE;
+
+    /* Set return value */
+    ret_value = cache_ptr;
+
+done:
+
+    if ( ret_value == 0 ) {
+
+        if ( cache_ptr != NULL ) {
+
+            if ( cache_ptr->slist_ptr != NULL )
+                H5SL_close(cache_ptr->slist_ptr);
+
+            cache_ptr->magic = 0;
+            H5FL_FREE(H5C_t, cache_ptr);
+            cache_ptr = NULL;
+
+        } /* end if */
+
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_create() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5C_dest
+ *
+ * Purpose:     Flush all data to disk and destroy the cache.
+ *
+ *              This function fails if any object are protected since the
+ *              resulting file might not be consistent.
+ *
+ *		The primary_dxpl_id and secondary_dxpl_id parameters
+ *		specify the dxpl_ids used on the first write occasioned
+ *		by the destroy (primary_dxpl_id), and on all subsequent
+ *		writes (secondary_dxpl_id).  This is useful in the metadata
+ *		cache, but may not be needed elsewhere.  If so, just use the
+ *		same dxpl_id for both parameters.
+ *
+ *		Note that *cache_ptr has been freed upon successful return.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  John Mainzer
+ *		6/2/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C_dest(H5F_t * f,
+         hid_t	 primary_dxpl_id,
+         hid_t	 secondary_dxpl_id,
+         H5C_t * cache_ptr)
+{
+    herr_t ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5C_dest, FAIL)
+
+    HDassert( cache_ptr );
+    HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
+    HDassert( cache_ptr->skip_file_checks || f );
+
+    if ( H5C_flush_cache(f, primary_dxpl_id, secondary_dxpl_id,
+                         cache_ptr, H5F_FLUSH_INVALIDATE) < 0 ) {
+
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush cache")
+    }
+
+    if ( cache_ptr->slist_ptr != NULL ) {
+
+        H5SL_close(cache_ptr->slist_ptr);
+        cache_ptr->slist_ptr = NULL;
+    }
+
+    cache_ptr->magic = 0;
+
+    H5FL_FREE(H5C_t, cache_ptr);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_dest() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5C_dest_empty
+ *
+ * Purpose:     Destroy an empty cache.
+ *
+ *              This function fails if the cache is not empty on entry.
+ *
+ *		Note that *cache_ptr has been freed upon successful return.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  John Mainzer
+ *		6/2/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C_dest_empty(H5C_t * cache_ptr)
+{
+    herr_t ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5C_dest_empty, FAIL)
+
+    /* This would normally be an assert, but we need to use an HGOTO_ERROR
+     * call to shut up the compiler.
+     */
+    if ( ( ! cache_ptr ) ||
+         ( cache_ptr->magic != H5C__H5C_T_MAGIC ) ||
+         ( cache_ptr->index_len != 0 ) ) {
+
+        HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+                    "Bad cache_ptr or non-empty cache on entry.")
+    }
+
+
+    if ( cache_ptr->slist_ptr != NULL ) {
+
+        H5SL_close(cache_ptr->slist_ptr);
+        cache_ptr->slist_ptr = NULL;
+    }
+
+    cache_ptr->magic = 0;
+
+    H5FL_FREE(H5C_t, cache_ptr);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_dest_empty() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5C_flush_cache
+ *
+ * Purpose:	Flush (and possibly destroy) the entries contained in the
+ *		specified cache.
+ *
+ *		If the cache contains protected entries, the function will
+ *		fail, as protected entries cannot be flushed.  However
+ *		all unprotected entries should be flushed before the
+ *		function returns failure.
+ *
+ *		The primary_dxpl_id and secondary_dxpl_id parameters
+ *		specify the dxpl_ids used on the first write occasioned
+ *		by the flush (primary_dxpl_id), and on all subsequent
+ *		writes (secondary_dxpl_id).  This is useful in the metadata
+ *		cache, but may not be needed elsewhere.  If so, just use the
+ *		same dxpl_id for both parameters.
+ *
+ * Return:      Non-negative on success/Negative on failure or if there was
+ *		a request to flush all items and something was protected.
+ *
+ * Programmer:  John Mainzer
+ *		6/2/04
+ *
+ * Modifications:
+ *
+ *		JRM -- 7/20/04
+ *		Modified the function for the addition of the hash table.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C_flush_cache(H5F_t *  f,
+                hid_t    primary_dxpl_id,
+                hid_t    secondary_dxpl_id,
+                H5C_t *  cache_ptr,
+                unsigned flags)
+{
+    herr_t              status;
+    herr_t		ret_value = SUCCEED;
+    hbool_t             destroy = ( (flags & H5F_FLUSH_INVALIDATE) != 0 );
+    hbool_t		first_flush = TRUE;
+    int32_t		protected_entries = 0;
+    int32_t		i;
+    H5SL_node_t * 	node_ptr;
+    H5C_cache_entry_t *	entry_ptr;
+#if H5C_DO_SANITY_CHECKS
+    int32_t		actual_slist_len = 0;
+    size_t              actual_slist_size = 0;
+#endif /* H5C_DO_SANITY_CHECKS */
+
+    FUNC_ENTER_NOAPI(H5C_flush_cache, FAIL)
+
+    HDassert( cache_ptr );
+    HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
+    HDassert( cache_ptr->skip_file_checks || f );
+    HDassert( cache_ptr->slist_ptr );
+
+    if ( cache_ptr->slist_len == 0 ) {
+
+        node_ptr = NULL;
+        HDassert( cache_ptr->slist_size == 0 );
+
+    } else {
+
+        node_ptr = H5SL_first(cache_ptr->slist_ptr);
+    }
+
+    while ( node_ptr != NULL )
+    {
+        entry_ptr = (H5C_cache_entry_t *)H5SL_item(node_ptr);
+
+        HDassert( entry_ptr != NULL );
+        HDassert( entry_ptr->in_slist );
+
+#if H5C_DO_SANITY_CHECKS
+        actual_slist_len++;
+        actual_slist_size += entry_ptr->size;
+#endif /* H5C_DO_SANITY_CHECKS */
+
+        if ( entry_ptr->is_protected ) {
+
+            /* we have major problems -- but lets flush everything
+             * we can before we flag an error.
+             */
+	    protected_entries++;
+
+        } else {
+
+            status = H5C_flush_single_entry(f,
+                                            primary_dxpl_id,
+                                            secondary_dxpl_id,
+                                            cache_ptr,
+                                            NULL,
+                                            entry_ptr->addr,
+                                            flags,
+                                            &first_flush,
+                                            FALSE);
+            if ( status < 0 ) {
+
+                /* This shouldn't happen -- if it does, we are toast so
+                 * just scream and die.
+                 */
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
+                            "Can't flush entry.")
+            }
+        }
+
+        node_ptr = H5SL_next(node_ptr);
+
+    } /* while */
+
+#if H5C_DO_SANITY_CHECKS
+    HDassert( actual_slist_len == cache_ptr->slist_len );
+    HDassert( actual_slist_size == cache_ptr->slist_size );
+#endif /* H5C_DO_SANITY_CHECKS */
+
+    if ( destroy ) {
+
+        if(cache_ptr->slist_ptr) {
+
+            /* Release all nodes from skip list, but keep list active */
+            H5SL_release(cache_ptr->slist_ptr);
+
+        }
+        cache_ptr->slist_len = 0;
+        cache_ptr->slist_size = 0;
+
+        /* Since we are doing a destroy, we must make a pass through
+         * the hash table and flush all entries that remain.  Note that
+         * all remaining entries entries must be clean, so this will
+         * not result in any writes to disk.
+         */
+        for ( i = 0; i < H5C__HASH_TABLE_LEN; i++ )
+        {
+            while ( cache_ptr->index[i] )
+            {
+                entry_ptr = cache_ptr->index[i];
+
+                if ( entry_ptr->is_protected ) {
+
+                    /* we have major problems -- but lets flush and destroy
+                     * everything we can before we flag an error.
+                     */
+
+                    H5C__DELETE_FROM_INDEX(cache_ptr, entry_ptr)
+
+                    if ( !entry_ptr->in_slist ) {
+
+	                protected_entries++;
+                        HDassert( !(entry_ptr->is_dirty) );
+                    }
+                } else {
+
+                    HDassert( !(entry_ptr->is_dirty) );
+                    HDassert( !(entry_ptr->in_slist) );
+
+                    status = H5C_flush_single_entry(f,
+                                                    primary_dxpl_id,
+                                                    secondary_dxpl_id,
+                                                    cache_ptr,
+                                                    NULL,
+                                                    entry_ptr->addr,
+                                                    flags,
+                                                    &first_flush,
+                                                    FALSE);
+                    if ( status < 0 ) {
+
+                        /* This shouldn't happen -- if it does, we are toast so
+                         * just scream and die.
+                         */
+                        HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
+                                    "Can't flush entry.")
+                    }
+                }
+            }
+        }
+
+        HDassert( protected_entries == cache_ptr->pl_len );
+
+        if ( protected_entries > 0 )
+        {
+            /* the caller asked us to flush and destroy a cache that
+             * contains one or more protected entries.  Since we can't
+             * flush protected entries, we haven't destroyed them either.
+             * Since they are all on the protected list, just re-insert
+             * them into the cache before we flag an error.
+             */
+            entry_ptr = cache_ptr->pl_head_ptr;
+
+            while ( entry_ptr != NULL )
+            {
+                entry_ptr->in_slist = FALSE;
+
+                H5C__INSERT_IN_INDEX(cache_ptr, entry_ptr, FAIL)
+
+                if ( entry_ptr->is_dirty ) {
+
+                    H5C__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr)
+                }
+                entry_ptr = entry_ptr->next;
+            }
+        }
+    }
+
+    HDassert( protected_entries <= cache_ptr->pl_len );
+
+    if ( cache_ptr->pl_len > 0 ) {
+
+        HGOTO_ERROR(H5E_CACHE, H5E_PROTECT, FAIL, "cache has protected items")
+    }
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_flush_cache() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5C_insert_entry
+ *
+ * Purpose:     Adds the specified thing to the cache.  The thing need not
+ *              exist on disk yet, but it must have an address and disk
+ *              space reserved.
+ *
+ *		The primary_dxpl_id and secondary_dxpl_id parameters
+ *		specify the dxpl_ids used on the first write occasioned
+ *		by the insertion (primary_dxpl_id), and on all subsequent
+ *		writes (secondary_dxpl_id).  This is useful in the
+ *		metadata cache, but may not be needed elsewhere.  If so,
+ *		just use the same dxpl_id for both parameters.
+ *
+ *		The primary_dxpl_id is the dxpl_id passed to the
+ *		check_write_permitted function if such a function has been
+ *		provided.
+ *
+ *		Observe that this function cannot occasion a read.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  John Mainzer
+ *		6/2/04
+ *
+ * Modifications:
+ *
+ *		JRM -- 7/21/04
+ *		Updated function for the addition of the hash table.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t
+H5C_insert_entry(H5F_t * 	     f,
+                 hid_t		     primary_dxpl_id,
+                 hid_t		     secondary_dxpl_id,
+                 H5C_t *	     cache_ptr,
+                 const H5C_class_t * type,
+                 haddr_t 	     addr,
+                 void *		     thing)
+{
+    herr_t		result;
+    herr_t		ret_value = SUCCEED;    /* Return value */
+    hbool_t		write_permitted = TRUE;
+    H5C_cache_entry_t *	entry_ptr;
+    H5C_cache_entry_t *	test_entry_ptr;
+
+    FUNC_ENTER_NOAPI(H5C_insert_entry, FAIL)
+
+    HDassert( cache_ptr );
+    HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
+    HDassert( cache_ptr->skip_file_checks || f );
+    HDassert( type );
+    HDassert( type->flush );
+    HDassert( type->size );
+    HDassert( H5F_addr_defined(addr) );
+    HDassert( thing );
+
+    entry_ptr = (H5C_cache_entry_t *)thing;
+
+    entry_ptr->addr = addr;
+    entry_ptr->type = type;
+
+    if ( (type->size)(f, thing, &(entry_ptr->size)) < 0 ) {
+
+        HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGETSIZE, FAIL, \
+                    "Can't get size of thing")
+    }
+
+    HDassert( entry_ptr->size < H5C_MAX_ENTRY_SIZE );
+
+    entry_ptr->in_slist = FALSE;
+
+    entry_ptr->ht_next = NULL;
+    entry_ptr->ht_prev = NULL;
+
+    entry_ptr->next = NULL;
+    entry_ptr->prev = NULL;
+
+    entry_ptr->aux_next = NULL;
+    entry_ptr->aux_prev = NULL;
+
+    H5C__RESET_CACHE_ENTRY_STATS(entry_ptr)
+
+    if ((cache_ptr->index_size + entry_ptr->size) > cache_ptr->max_cache_size) {
+
+        size_t space_needed;
+
+        if ( cache_ptr->check_write_permitted != NULL ) {
+
+            result = (cache_ptr->check_write_permitted)(f,
+                                                        primary_dxpl_id,
+                                                        &write_permitted);
+
+            if ( result < 0 ) {
+
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, \
+                            "Can't get write_permitted")
+            }
+        }
+
+        HDassert( entry_ptr->size <= H5C_MAX_ENTRY_SIZE );
+
+        space_needed = (cache_ptr->index_size + entry_ptr->size) -
+                       cache_ptr->max_cache_size;
+
+        /* It would be nice to be able to do a tight sanity check on
+         * space_needed here, but it is hard to assign an upper bound on
+         * its value other than then value assigned to it.
+         *
+         * This fact springs from several features of the cache:
+         *
+         * First, it is possible for the cache to grow without
+         * bound as long as entries are protected and not unprotected.
+         *
+         * Second, when writes are not permitted it is also possible
+         * for the cache to grow without bound.
+         *
+         * Finally, we don't check to see if the cache is oversized
+         * at the end of an unprotect.  As a result, it is possible
+         * to have a vastly oversized cache with no protected entries
+         * as long as all the protects preceed the unprotects.
+         *
+         * Since items 1 and 2 are not changing any time soon, I see
+         * no point in worrying about the third.
+         *
+         * In any case, I hope this explains why there is no sanity
+         * check on space_needed here.
+         */
+
+        result = H5C_make_space_in_cache(f,
+                                         primary_dxpl_id,
+                                         secondary_dxpl_id,
+                                         cache_ptr,
+                                         space_needed,
+                                         write_permitted);
+
+        if ( result < 0 ) {
+
+            HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, \
+                        "H5C_make_space_in_cache failed.")
+        }
+    }
+
+    /* verify that the new entry isn't already in the hash table -- scream
+     * and die if it is.
+     */
+
+    H5C__SEARCH_INDEX(cache_ptr, addr, test_entry_ptr, FAIL)
+
+    if ( test_entry_ptr != NULL ) {
+
+        if ( test_entry_ptr == entry_ptr ) {
+
+            HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, \
+                        "entry already in cache.")
+
+        } else {
+
+            HGOTO_ERROR(H5E_CACHE, H5E_CANTINS, FAIL, \
+                        "duplicate entry in cache.")
+        }
+    }
+
+    /* we don't initialize the protected field until here as it is
+     * possible that the entry is already in the cache, and already
+     * protected.  If it is, we don't want to make things worse by
+     * marking it unprotected.
+     */
+
+    entry_ptr->is_protected = FALSE;
+
+    H5C__INSERT_IN_INDEX(cache_ptr, entry_ptr, FAIL)
+
+    if ( entry_ptr->is_dirty ) {
+
+        H5C__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr)
+    }
+
+    H5C__UPDATE_RP_FOR_INSERTION(cache_ptr, entry_ptr, FAIL)
+
+    H5C__UPDATE_STATS_FOR_INSERTION(cache_ptr, entry_ptr)
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_insert_entry() */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:    H5C_rename_entry
+ *
+ * Purpose:     Use this function to notify the cache that an entry's
+ *              file address changed.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  John Mainzer
+ *              6/2/04
+ *
+ * Modifications:
+ *
+ *		JRM -- 7/21/04
+ *		Updated function for the addition of the hash table.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t
+H5C_rename_entry(H5C_t *	     cache_ptr,
+                 const H5C_class_t * type,
+                 haddr_t 	     old_addr,
+	         haddr_t 	     new_addr)
+{
+    herr_t		ret_value = SUCCEED;      /* Return value */
+    H5C_cache_entry_t *	entry_ptr = NULL;
+    H5C_cache_entry_t *	test_entry_ptr = NULL;
+
+    FUNC_ENTER_NOAPI(H5C_rename_entry, FAIL)
+
+    HDassert( cache_ptr );
+    HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
+    HDassert( type );
+    HDassert( H5F_addr_defined(old_addr) );
+    HDassert( H5F_addr_defined(new_addr) );
+    HDassert( H5F_addr_ne(old_addr, new_addr) );
+
+    H5C__SEARCH_INDEX(cache_ptr, old_addr, entry_ptr, FAIL)
+
+    if ( ( entry_ptr == NULL ) || ( entry_ptr->type != type ) )
+
+        /* the old item doesn't exist in the cache, so we are done. */
+        HGOTO_DONE(SUCCEED)
+
+    HDassert( entry_ptr->addr == old_addr );
+    HDassert( entry_ptr->type == type );
+    HDassert( !(entry_ptr->is_protected) );
+
+    H5C__SEARCH_INDEX(cache_ptr, new_addr, test_entry_ptr, FAIL)
+
+    if ( test_entry_ptr != NULL ) { /* we are hosed */
+
+        if ( test_entry_ptr->type == type ) {
+
+            HGOTO_ERROR(H5E_CACHE, H5E_CANTRENAME, FAIL, \
+                        "Target already renamed & reinserted???.")
+
+        } else {
+
+            HGOTO_ERROR(H5E_CACHE, H5E_CANTRENAME, FAIL, \
+                        "New address already in use?.")
+        }
+    }
+
+    /* If we get this far, we have work to do.  Remove *entry_ptr from
+     * the hash table (and skip list if necessary), change its address to the
+     * new address, and then re-insert.
+     *
+     * Update the replacement policy for a hit to avoid an eviction before
+     * the renamed entry is touched.  Update stats for a rename.
+     *
+     * Note that we do not check the size of the cache, or evict anything.
+     * Since this is a simple re-name, cache size should be unaffected.
+     */
+    H5C__DELETE_FROM_INDEX(cache_ptr, entry_ptr)
+
+    if ( entry_ptr->in_slist ) {
+
+        HDassert( cache_ptr->slist_ptr );
+
+        H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr)
+    }
+
+    entry_ptr->addr = new_addr;
+
+    H5C__INSERT_IN_INDEX(cache_ptr, entry_ptr, FAIL)
+
+    if ( entry_ptr->is_dirty ) {
+
+        H5C__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr)
+    }
+
+    H5C__UPDATE_RP_FOR_RENAME(cache_ptr, entry_ptr, FAIL)
+
+    H5C__UPDATE_STATS_FOR_RENAME(cache_ptr, entry_ptr)
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_rename_entry() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5C_protect
+ *
+ * Purpose:     If the target entry is not in the cache, load it.  If
+ *		necessary, attempt to evict one or more entries to keep
+ *		the cache within its maximum size.
+ *
+ *		Mark the target entry as protected, and return its address
+ *		to the caller.  The caller must call H5C_unprotect() when
+ *		finished with the entry.
+ *
+ *		While it is protected, the entry may not be either evicted
+ *		or flushed -- nor may it be accessed by another call to
+ *		H5C_protect.  Any attempt to do so will result in a failure.
+ *
+ *		The primary_dxpl_id and secondary_dxpl_id parameters
+ *		specify the dxpl_ids used on the first write occasioned
+ *		by the insertion (primary_dxpl_id), and on all subsequent
+ *		writes (secondary_dxpl_id).  This is useful in the
+ *		metadata cache, but may not be needed elsewhere.  If so,
+ *		just use the same dxpl_id for both parameters.
+ *
+ *		All reads are performed with the primary_dxpl_id.
+ *
+ *		Similarly, the primary_dxpl_id is passed to the
+ *		check_write_permitted function if it is called.
+ *
+ * Return:      Success:        Ptr to the desired entry
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  John Mainzer -  6/2/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/21/04
+ *		Updated for the addition of the hash table.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+void *
+H5C_protect(H5F_t *	       f,
+           hid_t	       primary_dxpl_id,
+           hid_t	       secondary_dxpl_id,
+           H5C_t *	       cache_ptr,
+           const H5C_class_t * type,
+           haddr_t 	       addr,
+           const void *	       udata1,
+           void *	       udata2)
+{
+    hbool_t		hit = FALSE;
+    void *		thing = NULL;
+    H5C_cache_entry_t *	entry_ptr;
+    void *		ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5C_protect, NULL)
+
+    /* check args */
+    HDassert( cache_ptr );
+    HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
+    HDassert( cache_ptr->skip_file_checks || f );
+    HDassert( type );
+    HDassert( type->flush );
+    HDassert( type->load );
+    HDassert( H5F_addr_defined(addr) );
+
+    /* first check to see if the target is in cache */
+    H5C__SEARCH_INDEX(cache_ptr, addr, entry_ptr, NULL)
+
+    if ( entry_ptr != NULL ) {
+
+        hit = TRUE;
+        thing = (void *)entry_ptr;
+
+    } else { /* must try to load the entry from disk. */
+
+        hit = FALSE;
+        thing = H5C_load_entry(f, primary_dxpl_id, type, addr, udata1, udata2,
+                               cache_ptr->skip_file_checks);
+
+        if ( thing == NULL ) {
+
+            HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "can't load entry")
+        }
+
+        entry_ptr = (H5C_cache_entry_t *)thing;
+
+        /* try to free up some space if necessay */
+        if ( (cache_ptr->index_size + entry_ptr->size) >
+              cache_ptr->max_cache_size ) {
+
+            hbool_t write_permitted = TRUE;
+            herr_t result;
+            size_t space_needed;
+
+            if ( cache_ptr->check_write_permitted != NULL ) {
+
+                result = (cache_ptr->check_write_permitted)(f,
+                                                            primary_dxpl_id,
+                                                            &write_permitted);
+
+                if ( result < 0 ) {
+
+                    HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, NULL, \
+                               "Can't get write_permitted")
+                }
+            }
+
+            HDassert( entry_ptr->size <= H5C_MAX_ENTRY_SIZE );
+
+            space_needed = (cache_ptr->index_size + entry_ptr->size) -
+                           cache_ptr->max_cache_size;
+
+            /* It would be nice to be able to do a tight sanity check on
+             * space_needed here, but it is hard to assign an upper bound on
+             * its value other than then value assigned to it.
+             *
+             * This fact springs from several features of the cache:
+             *
+             * First, it is possible for the cache to grow without
+             * bound as long as entries are protected and not unprotected.
+             *
+             * Second, when writes are not permitted it is also possible
+             * for the cache to grow without bound.
+             *
+             * Finally, we don't check to see if the cache is oversized
+             * at the end of an unprotect.  As a result, it is possible
+             * to have a vastly oversized cache with no protected entries
+             * as long as all the protects preceed the unprotects.
+             *
+             * Since items 1 and 2 are not changing any time soon, I see
+             * no point in worrying about the third.
+             *
+             * In any case, I hope this explains why there is no sanity
+             * check on space_needed here.
+             */
+
+            result = H5C_make_space_in_cache(f, primary_dxpl_id,
+                                             secondary_dxpl_id, cache_ptr,
+                                             space_needed, write_permitted);
+
+            if ( result < 0 ) {
+
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, NULL, \
+                            "H5C_make_space_in_cache failed.")
+            }
+        }
+
+        /* Insert the entry in the hash table.  It can't be dirty yet, so
+         * we don't even check to see if it should go in the skip list.
+         */
+        H5C__INSERT_IN_INDEX(cache_ptr, entry_ptr, NULL)
+
+        /* insert the entry in the data structures used by the replacement
+         * policy.  We are just going to take it out again when we update
+         * the replacement policy for a protect, but this simplifies the
+         * code.  If we do this often enough, we may want to optimize this.
+         */
+        H5C__UPDATE_RP_FOR_INSERTION(cache_ptr, entry_ptr, NULL)
+    }
+
+    HDassert( entry_ptr->addr == addr );
+    HDassert( entry_ptr->type == type );
+
+    if ( entry_ptr->is_protected ) {
+
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTPROTECT, NULL, \
+                    "Target already protected?!?.")
+    }
+
+    H5C__UPDATE_RP_FOR_PROTECT(cache_ptr, entry_ptr, NULL)
+
+    entry_ptr->is_protected = TRUE;
+
+    ret_value = thing;
+
+    H5C__UPDATE_STATS_FOR_PROTECT(cache_ptr, entry_ptr, hit)
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_protect() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5C_unprotect
+ *
+ * Purpose:	Undo an H5C_protect() call -- specifically, mark the
+ *		entry as unprotected, remove it from the protected list,
+ *		and give it back to the replacement policy.
+ *
+ *		The TYPE and ADDR arguments must be the same as those in
+ *		the corresponding call to H5C_protect() and the THING
+ *		argument must be the value returned by that call to
+ *		H5C_protect().
+ *
+ *		The primary_dxpl_id and secondary_dxpl_id parameters
+ *		specify the dxpl_ids used on the first write occasioned
+ *		by the unprotect (primary_dxpl_id), and on all subsequent
+ *		writes (secondary_dxpl_id).  Since an uprotect cannot
+ *		occasion a write at present, all this is moot for now.
+ *		However, things change, and in any case,
+ *		H5C_flush_single_entry() needs primary_dxpl_id and
+ *		secondary_dxpl_id in its parameter list.
+ *
+ *		The function can't cause a read either, so the dxpl_id
+ *		parameters are moot in this case as well.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ *		If the deleted flag is TRUE, simply remove the target entry
+ *		from the cache, clear it, and free it without writing it to
+ *		disk.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  John Mainzer
+ *              6/2/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/21/04
+ *		Updated the function for the addition of the hash table.
+ *		In particular, we now add dirty entries to the skip list if
+ *		they aren't in the list already.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5C_unprotect(H5F_t *		  f,
+              hid_t		  primary_dxpl_id,
+              hid_t		  secondary_dxpl_id,
+              H5C_t *		  cache_ptr,
+              const H5C_class_t * type,
+              haddr_t		  addr,
+              void *		  thing,
+              hbool_t		  deleted)
+{
+    herr_t              ret_value = SUCCEED;    /* Return value */
+    H5C_cache_entry_t *	entry_ptr;
+    H5C_cache_entry_t *	test_entry_ptr;
+
+    FUNC_ENTER_NOAPI(H5C_unprotect, FAIL)
+
+    HDassert( cache_ptr );
+    HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
+    HDassert( cache_ptr->skip_file_checks || f );
+    HDassert( type );
+    HDassert( type->clear );
+    HDassert( type->flush );
+    HDassert( H5F_addr_defined(addr) );
+    HDassert( thing );
+
+    entry_ptr = (H5C_cache_entry_t *)thing;
+
+    HDassert( entry_ptr->addr == addr );
+    HDassert( entry_ptr->type == type );
+
+    if ( ! (entry_ptr->is_protected) ) {
+
+            HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
+                        "Entry already unprotected??")
+    }
+
+    H5C__UPDATE_RP_FOR_UNPROTECT(cache_ptr, entry_ptr, FAIL)
+
+    entry_ptr->is_protected = FALSE;
+
+    /* add the entry to the skip list if it is dirty, and it isn't already in
+     * the list.
+     */
+
+    if ( ( entry_ptr->is_dirty ) && ( ! (entry_ptr->in_slist) ) ) {
+
+        H5C__INSERT_ENTRY_IN_SLIST(cache_ptr, entry_ptr)
+    }
+
+    /* this implementation of the "deleted" option is a bit inefficient, as
+     * we re-insert the entry to be deleted into the replacement policy
+     * data structures, only to remove them again.  Depending on how often
+     * we do this, we may want to optimize a bit.
+     *
+     * On the other hand, this implementation is reasonably clean, and
+     * makes good use of existing code.
+     *                                             JRM - 5/19/04
+     */
+    if ( deleted ) {
+
+        /* the following first flush flag will never be used as we are
+         * calling H5C_flush_single_entry with both the H5F_FLUSH_CLEAR_ONLY
+         * and H5F_FLUSH_INVALIDATE flags.  However, it is needed for the
+         * function call.
+         */
+        hbool_t		dummy_first_flush = TRUE;
+
+        /* verify that the target entry is in the cache. */
+
+        H5C__SEARCH_INDEX(cache_ptr, addr, test_entry_ptr, FAIL)
+
+        if ( test_entry_ptr == NULL ) {
+
+            HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
+                        "entry not in hash table?!?.")
+        }
+        else if ( test_entry_ptr != entry_ptr ) {
+
+            HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, \
+                        "hash table contains multiple entries for addr?!?.")
+        }
+
+        if ( H5C_flush_single_entry(f,
+                                    primary_dxpl_id,
+                                    secondary_dxpl_id,
+                                    cache_ptr,
+                                    type,
+                                    addr,
+                                    (H5F_FLUSH_CLEAR_ONLY|H5F_FLUSH_INVALIDATE),
+                                    &dummy_first_flush,
+                                    TRUE) < 0 ) {
+
+            HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPROTECT, FAIL, "Can't flush.")
+        }
+    }
+
+    H5C__UPDATE_STATS_FOR_UNPROTECT(cache_ptr)
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_unprotect() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5C_stats
+ *
+ * Purpose:     Prints statistics about the cache.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  John Mainzer
+ *              6/2/04
+ *
+ * Modifications:
+ *
+ *		JRM -- 7/21/04
+ *		Updated function for the addition of the hash table.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t
+H5C_stats(H5C_t * cache_ptr,
+          const char *  cache_name,
+          hbool_t
+#if !H5C_COLLECT_CACHE_STATS
+          UNUSED
+#endif /* H5C_COLLECT_CACHE_STATS */
+          display_detailed_stats)
+{
+    herr_t	ret_value = SUCCEED;   /* Return value */
+
+#if H5C_COLLECT_CACHE_STATS
+    int		i;
+    int64_t     total_hits = 0;
+    int64_t     total_misses = 0;
+    int64_t     total_insertions = 0;
+    int64_t     total_clears = 0;
+    int64_t     total_flushes = 0;
+    int64_t     total_evictions = 0;
+    int64_t     total_renames = 0;
+    int32_t     aggregate_max_accesses = 0;
+    int32_t     aggregate_min_accesses = 1000000;
+    int32_t     aggregate_max_clears = 0;
+    int32_t     aggregate_max_flushes = 0;
+    size_t      aggregate_max_size = 0;
+    double      hit_rate;
+    double	average_successful_search_depth = 0.0;
+    double	average_failed_search_depth = 0.0;
+#endif /* H5C_COLLECT_CACHE_STATS */
+
+    FUNC_ENTER_NOAPI(H5C_stats, FAIL)
+
+    /* This would normally be an assert, but we need to use an HGOTO_ERROR
+     * call to shut up the compiler.
+     */
+    if ( ( ! cache_ptr ) ||
+         ( cache_ptr->magic != H5C__H5C_T_MAGIC ) ||
+         ( !cache_name ) ) {
+
+        HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr or cache_name")
+    }
+
+#if H5C_COLLECT_CACHE_STATS
+
+    for ( i = 0; i <= cache_ptr->max_type_id; i++ ) {
+
+        total_hits       += cache_ptr->hits[i];
+        total_misses     += cache_ptr->misses[i];
+        total_insertions += cache_ptr->insertions[i];
+        total_clears     += cache_ptr->clears[i];
+        total_flushes    += cache_ptr->flushes[i];
+        total_evictions  += cache_ptr->evictions[i];
+        total_renames    += cache_ptr->renames[i];
+#if H5C_COLLECT_CACHE_ENTRY_STATS
+    if ( aggregate_max_accesses < cache_ptr->max_accesses[i] )
+        aggregate_max_accesses = cache_ptr->max_accesses[i];
+    if ( aggregate_min_accesses > aggregate_max_accesses )
+        aggregate_min_accesses = aggregate_max_accesses;
+    if ( aggregate_min_accesses > cache_ptr->min_accesses[i] )
+        aggregate_min_accesses = cache_ptr->min_accesses[i];
+    if ( aggregate_max_clears < cache_ptr->max_clears[i] )
+        aggregate_max_clears = cache_ptr->max_clears[i];
+    if ( aggregate_max_flushes < cache_ptr->max_flushes[i] )
+        aggregate_max_flushes = cache_ptr->max_flushes[i];
+    if ( aggregate_max_size < cache_ptr->max_size[i] )
+        aggregate_max_size = cache_ptr->max_size[i];
+#endif /* H5C_COLLECT_CACHE_ENTRY_STATS */
+    }
+
+    if ( ( total_hits > 0 ) || ( total_misses > 0 ) ) {
+
+        hit_rate = 100.0 * ((double)(total_hits)) /
+                   ((double)(total_hits + total_misses));
+    } else {
+        hit_rate = 0.0;
+    }
+
+    if ( cache_ptr->successful_ht_searches > 0 ) {
+
+        average_successful_search_depth =
+            ((double)(cache_ptr->total_successful_ht_search_depth)) /
+            ((double)(cache_ptr->successful_ht_searches));
+    }
+
+    if ( cache_ptr->failed_ht_searches > 0 ) {
+
+        average_failed_search_depth =
+            ((double)(cache_ptr->total_failed_ht_search_depth)) /
+            ((double)(cache_ptr->failed_ht_searches));
+    }
+
+
+    HDfprintf(stdout, "\nH5C: cache statistics for %s\n",
+              cache_name);
+
+    HDfprintf(stdout, "\n");
+
+    HDfprintf(stdout,
+              "  hash table insertion / deletions   = %ld / %ld\n",
+              (long)(cache_ptr->total_ht_insertions),
+              (long)(cache_ptr->total_ht_deletions));
+
+    HDfprintf(stdout,
+              "  HT successful / failed searches    = %ld / %ld\n",
+              (long)(cache_ptr->successful_ht_searches),
+              (long)(cache_ptr->failed_ht_searches));
+
+    HDfprintf(stdout,
+              "  Av. HT suc / failed search depth   = %f / %f\n",
+              average_successful_search_depth,
+              average_failed_search_depth);
+
+    HDfprintf(stdout,
+              "  current (max) index size / length  = %ld (%ld) / %ld (%ld)\n",
+              (long)(cache_ptr->index_size),
+              (long)(cache_ptr->max_index_size),
+              (long)(cache_ptr->index_len),
+              (long)(cache_ptr->max_index_len));
+
+    HDfprintf(stdout,
+              "  current (max) skip list size / length   = %ld (%ld) / %ld (%ld)\n",
+              (long)(cache_ptr->slist_size),
+              (long)(cache_ptr->max_slist_size),
+              (long)(cache_ptr->slist_len),
+              (long)(cache_ptr->max_slist_len));
+
+    HDfprintf(stdout,
+              "  current (max) PL size / length     = %ld (%ld) / %ld (%ld)\n",
+              (long)(cache_ptr->pl_size),
+              (long)(cache_ptr->max_pl_size),
+              (long)(cache_ptr->pl_len),
+              (long)(cache_ptr->max_pl_len));
+
+    HDfprintf(stdout,
+              "  current LRU list size / length     = %ld / %ld\n",
+              (long)(cache_ptr->LRU_list_size),
+              (long)(cache_ptr->LRU_list_len));
+
+    HDfprintf(stdout,
+              "  current clean LRU size / length    = %ld / %ld\n",
+              (long)(cache_ptr->cLRU_list_size),
+              (long)(cache_ptr->cLRU_list_len));
+
+    HDfprintf(stdout,
+              "  current dirty LRU size / length    = %ld / %ld\n",
+              (long)(cache_ptr->dLRU_list_size),
+              (long)(cache_ptr->dLRU_list_len));
+
+    HDfprintf(stdout,
+              "  Total hits / misses / hit_rate     = %ld / %ld / %f\n",
+              (long)total_hits,
+              (long)total_misses,
+              hit_rate);
+
+    HDfprintf(stdout,
+              "  Total clears / flushes / evictions = %ld / %ld / %ld\n",
+              (long)total_clears,
+              (long)total_flushes,
+              (long)total_evictions);
+
+    HDfprintf(stdout, "  Total insertions / renames         = %ld / %ld\n",
+              (long)total_insertions,
+              (long)total_renames);
+
+#if H5C_COLLECT_CACHE_ENTRY_STATS
+
+    HDfprintf(stdout, "  aggregate max / min accesses       = %d / %d\n",
+              (int)aggregate_max_accesses,
+              (int)aggregate_min_accesses);
+
+    HDfprintf(stdout, "  aggregate max_clears / max_flushes = %d / %d\n",
+              (int)aggregate_max_clears,
+              (int)aggregate_max_flushes);
+
+    HDfprintf(stdout, "  aggregate max_size                 = %d\n",
+              (int)aggregate_max_size);
+
+
+#endif /* H5C_COLLECT_CACHE_ENTRY_STATS */
+
+    if ( display_detailed_stats )
+    {
+
+        for ( i = 0; i <= cache_ptr->max_type_id; i++ ) {
+
+            HDfprintf(stdout, "\n");
+
+            HDfprintf(stdout, "  Stats on %s:\n",
+                      ((cache_ptr->type_name_table_ptr))[i]);
+
+            if ( ( cache_ptr->hits[i] > 0 ) || ( cache_ptr->misses[i] > 0 ) ) {
+
+                hit_rate = 100.0 * ((double)(cache_ptr->hits[i])) /
+                          ((double)(cache_ptr->hits[i] + cache_ptr->misses[i]));
+            } else {
+                hit_rate = 0.0;
+            }
+
+            HDfprintf(stdout,
+                      "    hits / misses / hit_rate       = %ld / %ld / %f\n",
+                      (long)(cache_ptr->hits[i]),
+                      (long)(cache_ptr->misses[i]),
+                      hit_rate);
+
+            HDfprintf(stdout,
+                      "    clears / flushes / evictions   = %ld / %ld / %ld\n",
+                      (long)(cache_ptr->clears[i]),
+                      (long)(cache_ptr->flushes[i]),
+                      (long)(cache_ptr->evictions[i]));
+
+            HDfprintf(stdout,
+                      "    insertions / renames           = %ld / %ld\n",
+                      (long)(cache_ptr->insertions[i]),
+                      (long)(cache_ptr->renames[i]));
+
+#if H5C_COLLECT_CACHE_ENTRY_STATS
+
+            HDfprintf(stdout,
+                      "    entry max / min accesses       = %d / %d\n",
+                      cache_ptr->max_accesses[i],
+                      cache_ptr->min_accesses[i]);
+
+            HDfprintf(stdout,
+                      "    entry max_clears / max_flushes = %d / %d\n",
+                      cache_ptr->max_clears[i],
+                      cache_ptr->max_flushes[i]);
+
+            HDfprintf(stdout,
+                      "    entry max_size                 = %d\n",
+                      (int)(cache_ptr->max_size[i]));
+
+
+#endif /* H5C_COLLECT_CACHE_ENTRY_STATS */
+
+        }
+    }
+
+    HDfprintf(stdout, "\n");
+
+#endif /* H5C_COLLECT_CACHE_STATS */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_stats() */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:    H5C_stats__reset
+ *
+ * Purpose:     Reset the stats fields to their initial values.
+ *
+ * Return:      void
+ *
+ * Programmer:  John Mainzer, 4/28/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/21/04
+ *		Updated for hash table related statistics.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+void
+H5C_stats__reset(H5C_t * cache_ptr)
+{
+#if H5C_COLLECT_CACHE_STATS
+    int i;
+#endif /* H5C_COLLECT_CACHE_STATS */
+
+    HDassert( cache_ptr );
+    HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
+
+#if H5C_COLLECT_CACHE_STATS
+    for ( i = 0; i <= cache_ptr->max_type_id; i++ )
+    {
+        cache_ptr->hits[i]			= 0;
+        cache_ptr->misses[i]			= 0;
+        cache_ptr->insertions[i]		= 0;
+        cache_ptr->clears[i]			= 0;
+        cache_ptr->flushes[i]			= 0;
+        cache_ptr->evictions[i]	 		= 0;
+        cache_ptr->renames[i]	 		= 0;
+    }
+
+    cache_ptr->total_ht_insertions		= 0;
+    cache_ptr->total_ht_deletions		= 0;
+    cache_ptr->successful_ht_searches		= 0;
+    cache_ptr->total_successful_ht_search_depth	= 0;
+    cache_ptr->failed_ht_searches		= 0;
+    cache_ptr->total_failed_ht_search_depth	= 0;
+
+    cache_ptr->max_index_len			= 0;
+    cache_ptr->max_index_size			= (size_t)0;
+
+    cache_ptr->max_slist_len			= 0;
+    cache_ptr->max_slist_size			= (size_t)0;
+
+    cache_ptr->max_pl_len			= 0;
+    cache_ptr->max_pl_size			= (size_t)0;
+
+#if H5C_COLLECT_CACHE_ENTRY_STATS
+
+    for ( i = 0; i <= cache_ptr->max_type_id; i++ )
+    {
+        cache_ptr->max_accesses[i]		= 0;
+        cache_ptr->min_accesses[i]		= 1000000;
+        cache_ptr->max_clears[i]		= 0;
+        cache_ptr->max_flushes[i]		= 0;
+        cache_ptr->max_size[i]			= (size_t)0;
+    }
+
+#endif /* H5C_COLLECT_CACHE_ENTRY_STATS */
+#endif /* H5C_COLLECT_CACHE_STATS */
+
+    return;
+
+} /* H5C_stats__reset() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5C_set_skip_flags
+ *
+ * Purpose:     Set the values of the skip sanity check flags.
+ *
+ *		This function and the skip sanity check flags were created
+ *		for the convenience of the test bed.  However it is
+ *		possible that there may be other uses for the flags.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  John Mainzer
+ *              6/11/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t
+H5C_set_skip_flags(H5C_t * cache_ptr,
+                   hbool_t skip_file_checks,
+                   hbool_t skip_dxpl_id_checks)
+{
+    herr_t		ret_value = SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5C_set_skip_flags, FAIL)
+
+    /* This would normally be an assert, but we need to use an HGOTO_ERROR
+     * call to shut up the compiler.
+     */
+    if ( ( ! cache_ptr ) || ( cache_ptr->magic != H5C__H5C_T_MAGIC ) ) {
+
+        HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr")
+    }
+
+    cache_ptr->skip_file_checks    = skip_file_checks;
+    cache_ptr->skip_dxpl_id_checks = skip_dxpl_id_checks;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_set_skip_flags() */
+
+
+/*************************************************************************/
+/**************************** Private Functions: *************************/
+/*************************************************************************/
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:    H5C_flush_single_entry
+ *
+ * Purpose:     Flush or clear (and evict if requested) the cache entry
+ *		with the specified address and type.  If the type is NULL,
+ *		any unprotected entry at the specified address will be
+ *		flushed (and possibly evicted).
+ *
+ *		Attempts to flush a protected entry will result in an
+ *		error.
+ *
+ *		*first_flush_ptr should be true if only one
+ *		flush is contemplated before the next load, or if this
+ *		is the first of a sequence of flushes that will be
+ *		completed before the next load.  *first_flush_ptr is set
+ *		to false if a flush actually takes place, and should be
+ *		left false until the end of the sequence.
+ *
+ *		The primary_dxpl_id is used if *first_flush_ptr is TRUE
+ *		on entry, and a flush actually takes place.  The
+ *		secondary_dxpl_id is used in any subsequent flush where
+ *		*first_flush_ptr is FALSE on entry.
+ *
+ *		If the H5F_FLUSH_CLEAR_ONLY flag is set, the entry will
+ *		be cleared and not flushed -- in the case *first_flush_ptr,
+ *		primary_dxpl_id, and secondary_dxpl_id are all irrelevent,
+ *		and the call can't be part of a sequence of flushes.
+ *
+ *		If the caller knows the address of the TBBT node at
+ *		which the target entry resides, it can avoid a lookup
+ *		by supplying that address in the tgt_node_ptr parameter.
+ *		If this parameter is NULL, the function will do a TBBT
+ *		search for the entry instead.
+ *
+ *		The function does nothing silently if there is no entry
+ *		at the supplied address, or if the entry found has the
+ *		wrong type.
+ *
+ * Return:      Non-negative on success/Negative on failure or if there was
+ *		an attempt to flush a protected item.
+ *
+ * Programmer:  John Mainzer, 5/5/04
+ *
+ * Modifications:
+ *
+ *		JRM -- 7/21/04
+ *		Updated function for the addition of the hash table.
+ *
+ *		QAK -- 11/26/04
+ *		Updated function for the switch from TBBTs to skip lists.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5C_flush_single_entry(H5F_t *		   f,
+                       hid_t 		   primary_dxpl_id,
+                       hid_t 		   secondary_dxpl_id,
+                       H5C_t *		   cache_ptr,
+                       const H5C_class_t * type_ptr,
+                       haddr_t		   addr,
+                       unsigned		   flags,
+                       hbool_t *	   first_flush_ptr,
+                       hbool_t		   del_entry_from_slist_on_destroy)
+{
+    hbool_t		destroy = ( (flags & H5F_FLUSH_INVALIDATE) != 0 );
+    hbool_t		clear_only = ( (flags & H5F_FLUSH_CLEAR_ONLY) != 0);
+    herr_t		ret_value = SUCCEED;      /* Return value */
+    herr_t		status;
+    H5C_cache_entry_t *	entry_ptr = NULL;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5C_flush_single_entry)
+
+    HDassert( cache_ptr );
+    HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
+    HDassert( cache_ptr->skip_file_checks || f );
+    HDassert( H5F_addr_defined(addr) );
+    HDassert( first_flush_ptr );
+
+    /* attempt to find the target entry in the hash table */
+    H5C__SEARCH_INDEX(cache_ptr, addr, entry_ptr, FAIL)
+
+#if H5C_DO_SANITY_CHECKS
+    if ( entry_ptr->in_slist ) {
+
+        if ( ( entry_ptr->addr != addr ) ) {
+
+            HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+                        "Hash table and skip list out of sync.")
+        }
+    } else if ( entry_ptr != NULL ) {
+
+        if ( ( entry_ptr->in_slist ) ||
+             ( entry_ptr->is_dirty ) ||
+             ( entry_ptr->addr != addr ) ) {
+
+            HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+                        "entry failed sanity checks.")
+        }
+    }
+#endif /* H5C_DO_SANITY_CHECKS */
+
+    if ( ( entry_ptr != NULL ) && ( entry_ptr->is_protected ) )
+    {
+        /* Attempt to flush a protected entry -- scream and die. */
+        HGOTO_ERROR(H5E_CACHE, H5E_PROTECT, FAIL, \
+                    "Attempt to flush a protected entry.")
+    }
+
+    if ( ( entry_ptr != NULL ) &&
+         ( ( type_ptr == NULL ) || ( type_ptr->id == entry_ptr->type->id ) ) )
+    {
+        /* we have work to do */
+
+#ifdef H5_HAVE_PARALLEL
+#ifndef NDEBUG
+
+        /* If MPI based VFD is used, do special parallel I/O sanity checks.
+         * Note that we only do these sanity checks when the clear_only flag
+         * is not set, and the entry to be flushed is dirty.  Don't bother
+         * otherwise as no file I/O can result.
+         *
+         * There are also cases (testing for instance) where it is convenient
+         * to pass in dummy dxpl_ids.  Since we don't use the dxpl_ids directly,
+         * this isn't a problem -- but we do have to turn off sanity checks
+         * involving them.  We use cache_ptr->skip_dxpl_id_checks to do this.
+         */
+        if ( ( ! cache_ptr->skip_dxpl_id_checks ) &&
+             ( ! clear_only ) &&
+             ( entry_ptr->is_dirty ) &&
+             ( IS_H5FD_MPI(f) ) ) {
+
+            H5P_genplist_t *dxpl;           /* Dataset transfer property list */
+            H5FD_mpio_xfer_t xfer_mode;     /* I/O xfer mode property value */
+
+            /* Get the dataset transfer property list */
+            if ( NULL == (dxpl = H5I_object(primary_dxpl_id)) ) {
+
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, \
+                            "not a dataset creation property list")
+            }
+
+            /* Get the transfer mode property */
+            if( H5P_get(dxpl, H5D_XFER_IO_XFER_MODE_NAME, &xfer_mode) < 0 ) {
+
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, \
+                            "can't retrieve xfer mode")
+            }
+
+            /* Sanity check transfer mode */
+            HDassert( xfer_mode == H5FD_MPIO_COLLECTIVE );
+        }
+
+#endif /* NDEBUG */
+#endif /* H5_HAVE_PARALLEL */
+
+        if ( clear_only ) {
+            H5C__UPDATE_STATS_FOR_CLEAR(cache_ptr, entry_ptr)
+        } else {
+            H5C__UPDATE_STATS_FOR_FLUSH(cache_ptr, entry_ptr)
+        }
+
+        if ( destroy ) {
+            H5C__UPDATE_STATS_FOR_EVICTION(cache_ptr, entry_ptr)
+        }
+
+        /* Always remove the entry from the hash table on a destroy.  On a
+         * flush with destroy, it is cheaper to discard the skip list all at once
+         * rather than remove the entries one by one, so we only delete from
+         * the list if requested.
+         *
+         * We must do deletions now as the callback routines will free the
+         * entry if destroy is true.
+         */
+        if ( destroy ) {
+
+            H5C__DELETE_FROM_INDEX(cache_ptr, entry_ptr)
+
+            if ( ( entry_ptr->in_slist ) && ( del_entry_from_slist_on_destroy ) ) {
+
+                H5C__REMOVE_ENTRY_FROM_SLIST(cache_ptr, entry_ptr)
+            }
+        }
+
+        /* Update the replacement policy for the flush or eviction.
+         * Again, do this now so we don't have to reference freed
+         * memory in the destroy case.
+         */
+        if ( destroy ) { /* AKA eviction */
+
+            H5C__UPDATE_RP_FOR_EVICTION(cache_ptr, entry_ptr, FAIL)
+
+        } else {
+
+            H5C__UPDATE_RP_FOR_FLUSH(cache_ptr, entry_ptr, FAIL)
+        }
+
+        /* Clear the dirty flag only, if requested */
+        if ( clear_only ) {
+            /* Call the callback routine to clear all dirty flags for object */
+            if ( (entry_ptr->type->clear)(f, entry_ptr, destroy) < 0 ) {
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "can't clear entry")
+            }
+        } else {
+
+            /* Only block for all the processes on the first piece of metadata
+             */
+
+            if ( *first_flush_ptr && entry_ptr->is_dirty ) {
+                status = (entry_ptr->type->flush)(f, primary_dxpl_id, destroy,
+                                                 entry_ptr->addr, entry_ptr);
+                *first_flush_ptr = FALSE;
+            } else {
+                status = (entry_ptr->type->flush)(f, secondary_dxpl_id,
+                                                 destroy, entry_ptr->addr,
+                                                 entry_ptr);
+            }
+
+            if ( status < 0 ) {
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
+                            "unable to flush entry")
+            }
+        }
+
+        if ( ! destroy ) {
+
+            HDassert( !(entry_ptr->is_dirty) );
+        }
+    }
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_flush_single_entry() */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:    H5C_load_entry
+ *
+ * Purpose:     Attempt to load the entry at the specified disk address
+ *		and with the specified type into memory.  If successful.
+ *		return the in memory address of the entry.  Return NULL
+ *		on failure.
+ *
+ *		Note that this function simply loads the entry into
+ *		core.  It does not insert it into the cache.
+ *
+ * Return:      Non-NULL on success / NULL on failure.
+ *
+ * Programmer:  John Mainzer, 5/18/04
+ *
+ * Modifications:
+ *
+ *		JRM - 7/21/04
+ *		Updated function for the addition of the hash table.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void *
+H5C_load_entry(H5F_t *             f,
+               hid_t               dxpl_id,
+               const H5C_class_t * type,
+               haddr_t             addr,
+               const void *        udata1,
+               void *              udata2,
+               hbool_t		   skip_file_checks)
+{
+    void *		thing = NULL;
+    void *		ret_value = NULL;
+    H5C_cache_entry_t *	entry_ptr = NULL;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5C_load_entry)
+
+    HDassert( skip_file_checks || f );
+    HDassert( type );
+    HDassert( type->load );
+    HDassert( type->size );
+    HDassert( H5F_addr_defined(addr) );
+
+    if ( NULL == (thing = (type->load)(f, dxpl_id, addr, udata1, udata2)) ) {
+
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTLOAD, NULL, "unable to load entry")
+
+    }
+
+    entry_ptr = (H5C_cache_entry_t *)thing;
+
+    HDassert( entry_ptr->is_dirty == FALSE );
+
+    entry_ptr->addr = addr;
+    entry_ptr->type = type;
+    entry_ptr->is_protected = FALSE;
+    entry_ptr->in_slist = FALSE;
+
+    if ( (type->size)(f, thing, &(entry_ptr->size)) < 0 ) {
+
+        HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGETSIZE, NULL, \
+                    "Can't get size of thing")
+    }
+
+    HDassert( entry_ptr->size < H5C_MAX_ENTRY_SIZE );
+
+    entry_ptr->ht_next = NULL;
+    entry_ptr->ht_prev = NULL;
+
+    entry_ptr->next = NULL;
+    entry_ptr->prev = NULL;
+
+    entry_ptr->aux_next = NULL;
+    entry_ptr->aux_prev = NULL;
+
+    H5C__RESET_CACHE_ENTRY_STATS(entry_ptr);
+
+    ret_value = thing;
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_load_entry() */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:    H5C_make_space_in_cache
+ *
+ * Purpose:     Attempt to evict cache entries until the index_size
+ *		is at least needed_space below max_cache_size.
+ *
+ *		In passing, also attempt to bring cLRU_list_size to a
+ *		value greater than min_clean_size.
+ *
+ *		Depending on circumstances, both of these goals may
+ *		be impossible, as in parallel mode, we must avoid generating
+ *		a write as part of a read (to avoid deadlock in collective
+ *		I/O), and in all cases, it is possible (though hopefully
+ *		highly unlikely) that the protected list may exceed the
+ *		maximum size of the cache.
+ *
+ *		Thus the function simply does its best, returning success
+ *		unless an error is encountered.
+ *
+ *		The primary_dxpl_id and secondary_dxpl_id parameters
+ *		specify the dxpl_ids used on the first write occasioned
+ *		by the call (primary_dxpl_id), and on all subsequent
+ *		writes (secondary_dxpl_id).  This is useful in the metadata
+ *		cache, but may not be needed elsewhere.  If so, just use the
+ *		same dxpl_id for both parameters.
+ *
+ *		Observe that this function cannot occasion a read.
+ *
+ * Return:      Non-negative on success/Negative on failure.
+ *
+ * Programmer:  John Mainzer, 5/14/04
+ *
+ * Modifications:
+ *
+ *		JRM --7/21/04
+ *		Minor modifications in support of the addition of a hash
+ *		table to facilitate lookups.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static herr_t
+H5C_make_space_in_cache(H5F_t *	f,
+                        hid_t	primary_dxpl_id,
+                        hid_t	secondary_dxpl_id,
+                        H5C_t *	cache_ptr,
+		        size_t	space_needed,
+                        hbool_t	write_permitted)
+{
+    hbool_t		first_flush = TRUE;
+    herr_t		ret_value = SUCCEED;      /* Return value */
+    herr_t		result;
+    int32_t		entries_examined = 0;
+    int32_t		initial_list_len;
+    H5C_cache_entry_t *	entry_ptr;
+    H5C_cache_entry_t *	prev_ptr;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5C_make_space_in_cache)
+
+    HDassert( cache_ptr );
+    HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
+
+    if ( write_permitted ) {
+
+        initial_list_len = cache_ptr->LRU_list_len;
+        entry_ptr = cache_ptr->LRU_tail_ptr;
+
+        while ( ( (cache_ptr->index_size + space_needed)
+                  >
+                  cache_ptr->max_cache_size
+                )
+                &&
+                ( entries_examined <= (2 * initial_list_len) )
+                &&
+                ( entry_ptr != NULL )
+              )
+        {
+            HDassert( ! (entry_ptr->is_protected) );
+
+            prev_ptr = entry_ptr->prev;
+
+            if ( entry_ptr->is_dirty ) {
+
+                result = H5C_flush_single_entry(f,
+                                                primary_dxpl_id,
+                                                secondary_dxpl_id,
+                                                cache_ptr,
+                                                entry_ptr->type,
+                                                entry_ptr->addr,
+                                                (unsigned)0,
+                                                &first_flush,
+                                                FALSE);
+            } else {
+
+                result = H5C_flush_single_entry(f,
+                                                primary_dxpl_id,
+                                                secondary_dxpl_id,
+                                                cache_ptr,
+                                                entry_ptr->type,
+                                                entry_ptr->addr,
+                                                H5F_FLUSH_INVALIDATE,
+                                                &first_flush,
+                                                TRUE);
+            }
+
+            if ( result < 0 ) {
+
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
+                            "unable to flush entry")
+            }
+
+            entry_ptr = prev_ptr;
+        }
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+        initial_list_len = cache_ptr->dLRU_list_len;
+        entry_ptr = cache_ptr->dLRU_tail_ptr;
+
+        while ( ( cache_ptr->cLRU_list_size < cache_ptr->min_clean_size ) &&
+                ( entries_examined <= initial_list_len ) &&
+                ( entry_ptr != NULL )
+              )
+        {
+            HDassert( ! (entry_ptr->is_protected) );
+            HDassert( entry_ptr->is_dirty );
+            HDassert( entry_ptr->in_slist );
+
+            prev_ptr = entry_ptr->aux_prev;
+
+            result = H5C_flush_single_entry(f,
+                                            primary_dxpl_id,
+                                            secondary_dxpl_id,
+                                            cache_ptr,
+                                            entry_ptr->type,
+                                            entry_ptr->addr,
+                                            (unsigned)0,
+                                            &first_flush,
+                                            FALSE);
+
+            if ( result < 0 ) {
+
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
+                            "unable to flush entry")
+            }
+
+            entry_ptr = prev_ptr;
+        }
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+    } else {
+
+        HDassert( H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS );
+
+        initial_list_len = cache_ptr->cLRU_list_len;
+        entry_ptr = cache_ptr->cLRU_tail_ptr;
+
+        while ( ( (cache_ptr->index_size + space_needed)
+                  >
+                  cache_ptr->max_cache_size
+                )
+                &&
+                ( entries_examined <= initial_list_len )
+                &&
+                ( entry_ptr != NULL )
+              )
+        {
+            HDassert( ! (entry_ptr->is_protected) );
+            HDassert( ! (entry_ptr->is_dirty) );
+
+            prev_ptr = entry_ptr->aux_prev;
+
+            result = H5C_flush_single_entry(f,
+                                            primary_dxpl_id,
+                                            secondary_dxpl_id,
+                                            cache_ptr,
+                                            entry_ptr->type,
+                                            entry_ptr->addr,
+                                            H5F_FLUSH_INVALIDATE,
+                                            &first_flush,
+                                            TRUE);
+
+            if ( result < 0 ) {
+
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, \
+                            "unable to flush entry")
+            }
+
+            entry_ptr = prev_ptr;
+        }
+    }
+
+done:
+
+    FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_make_space_in_cache() */

Added: packages/hdf5/branches/upstream/current/src/H5Cprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Cprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Cprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,414 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:		H5Cprivate.h
+ *			6/3/04
+ *			John Mainzer
+ *
+ * Purpose:		Constants and typedefs available to the rest of the
+ *			library.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifndef _H5Cprivate_H
+#define _H5Cprivate_H
+
+#include "H5Cpublic.h"		/*public prototypes			     */
+
+/* Pivate headers needed by this header */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Fprivate.h"		/* File access				*/
+
+#define H5C_DO_SANITY_CHECKS		0
+
+/* This sanity checking constant was picked out of the air.  Increase
+ * or decrease it if appropriate.  Its purposes is to detect corrupt
+ * object sizes, so it probably doesn't matter if it is a bit big.
+ *
+ *					JRM - 5/17/04
+ */
+#define H5C_MAX_ENTRY_SIZE		((size_t)(10 * 1024 * 1024))
+
+/* H5C_COLLECT_CACHE_STATS controls overall collection of statistics
+ * on cache activity.  In general, this #define should be set to 0.
+ */
+#define H5C_COLLECT_CACHE_STATS	0
+
+/* H5C_COLLECT_CACHE_ENTRY_STATS controls collection of statistics
+ * in individual cache entries.
+ *
+ * H5C_COLLECT_CACHE_ENTRY_STATS should only be defined to true if
+ * H5C_COLLECT_CACHE_STATS is also defined to true.
+ */
+#if H5C_COLLECT_CACHE_STATS
+
+#define H5C_COLLECT_CACHE_ENTRY_STATS	1
+
+#else
+
+#define H5C_COLLECT_CACHE_ENTRY_STATS	0
+
+#endif /* H5C_COLLECT_CACHE_STATS */
+
+
+#ifdef H5_HAVE_PARALLEL
+
+/* we must maintain the clean and dirty LRU lists when we are compiled
+ * with parallel support.
+ */
+#define H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS  1
+
+#else /* H5_HAVE_PARALLEL */
+
+/* The clean and dirty LRU lists don't buy us anything here -- we may
+ * want them on for testing on occasion, but in general they should be
+ * off.
+ */
+#define H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS  0
+
+#endif /* H5_HAVE_PARALLEL */
+
+
+/*
+ * Class methods pertaining to caching.	 Each type of cached object will
+ * have a constant variable with permanent life-span that describes how
+ * to cache the object.	 That variable will be of type H5C_class_t and
+ * have the following required fields...
+ *
+ * LOAD:	Loads an object from disk to memory.  The function
+ *		should allocate some data structure and return it.
+ *
+ * FLUSH:	Writes some data structure back to disk.  It would be
+ *		wise for the data structure to include dirty flags to
+ *		indicate whether it really needs to be written.	 This
+ *		function is also responsible for freeing memory allocated
+ *		by the LOAD method if the DEST argument is non-zero (by
+ *              calling the DEST method).
+ *
+ * DEST:	Just frees memory allocated by the LOAD method.
+ *
+ * CLEAR:	Just marks object as non-dirty.
+ *
+ * SIZE:	Report the size (on disk) of the specified cache object.
+ *		Note that the space allocated on disk may not be contiguous.
+ */
+
+typedef void *(*H5C_load_func_t)(H5F_t *f,
+                                 hid_t dxpl_id,
+                                 haddr_t addr,
+                                 const void *udata1,
+                                 void *udata2);
+typedef herr_t (*H5C_flush_func_t)(H5F_t *f,
+                                   hid_t dxpl_id,
+                                   hbool_t dest,
+                                   haddr_t addr,
+                                   void *thing);
+typedef herr_t (*H5C_dest_func_t)(H5F_t *f,
+                                  void *thing);
+typedef herr_t (*H5C_clear_func_t)(H5F_t *f,
+                                   void *thing,
+                                   hbool_t dest);
+typedef herr_t (*H5C_size_func_t)(const H5F_t *f,
+                                  const void *thing,
+                                  size_t *size_ptr);
+
+typedef struct H5C_class_t {
+    int			id;
+    H5C_load_func_t	load;
+    H5C_flush_func_t	flush;
+    H5C_dest_func_t	dest;
+    H5C_clear_func_t	clear;
+    H5C_size_func_t	size;
+} H5C_class_t;
+
+
+/* Type defintions of call back functions used by the cache as a whole */
+
+typedef herr_t (*H5C_write_permitted_func_t)(const H5F_t *f,
+                                             hid_t dxpl_id,
+                                             hbool_t * write_permitted_ptr);
+
+
+/* Default max cache size and min clean size are give here to make
+ * them generally accessable.
+ */
+
+#define H5C__DEFAULT_MAX_CACHE_SIZE     ((size_t)(8 * 1024 * 1024))
+#define H5C__DEFAULT_MIN_CLEAN_SIZE     ((size_t)(4 * 1024 * 1024))
+
+
+/****************************************************************************
+ *
+ * structure H5C_cache_entry_t
+ *
+ * Instances of the H5C_cache_entry_t structure are used to store cache
+ * entries in a hash table and sometimes in a skip list.
+ * See H5SL.c for the particulars of the skip list.
+ *
+ * In typical application, this structure is the first field in a
+ * structure to be cached.  For historical reasons, the external module
+ * is responsible for managing the is_dirty field.  All other fields are
+ * managed by the cache.
+ *
+ * The fields of this structure are discussed individually below:
+ *
+ *						JRM - 4/26/04
+ *
+ * addr:	Base address of the cache entry on disk.
+ *
+ * size:	Length of the cache entry on disk.  Note that unlike normal
+ *		caches, the entries in this cache are of variable length.
+ *		The entries should never overlap, and when we do writebacks,
+ *		we will want to writeback adjacent entries where possible.
+ *
+ * type:	Pointer to the instance of H5C_class_t containing pointers
+ *		to the methods for cache entries of the current type.  This
+ *		field should be NULL when the instance of H5C_cache_entry_t
+ *		is not in use.
+ *
+ *		The name is not particularly descriptive, but is retained
+ *		to avoid changes in existing code.
+ *
+ * is_dirty:	Boolean flag indicating whether the contents of the cache
+ *		entry has been modified since the last time it was written
+ *		to disk.
+ *
+ *		NOTE: For historical reasons, this field is not maintained
+ *		      by the cache.  Instead, the module using the cache
+ *		      sets this flag when it modifies the entry, and the
+ *		      flush and clear functions supplied by that module
+ *		      reset the dirty when appropriate.
+ *
+ *		      This is a bit quirky, so we may want to change this
+ *		      someday.  However it will require a change in the
+ *		      cache interface.
+ *
+ * is_protected: Boolean flag indicating whether this entry is protected
+ *		(or locked, to use more conventional terms).  When it is
+ *		protected, the entry cannot be flushed or accessed until
+ *		it is unprotected (or unlocked -- again to use more
+ *		conventional terms).
+ *
+ *		Note that protected entries are removed from the LRU lists
+ *		and inserted on the protected list.
+ *
+ * in_slist:	Boolean flag indicating whether the entry is in the skip list
+ *		As a general rule, entries are placed in the list when they
+ *              are marked dirty.  However they may remain in the list after
+ *              being flushed.
+ *
+ *
+ * Fields supporting the hash table:
+ *
+ * Fields in the cache are indexed by a more or less conventional hash table.
+ * If there are multiple entries in any hash bin, they are stored in a doubly
+ * linked list.
+ *
+ * ht_next:	Next pointer used by the hash table to store multiple
+ *		entries in a single hash bin.  This field points to the
+ *		next entry in the doubly linked list of entries in the
+ *		hash bin, or NULL if there is no next entry.
+ *
+ * ht_prev:     Prev pointer used by the hash table to store multiple
+ *              entries in a single hash bin.  This field points to the
+ *              previous entry in the doubly linked list of entries in
+ *		the hash bin, or NULL if there is no previuos entry.
+ *
+ *
+ * Fields supporting replacement policies:
+ *
+ * The cache must have a replacement policy, and it will usually be
+ * necessary for this structure to contain fields supporting that policy.
+ *
+ * While there has been interest in several replacement policies for
+ * this cache, the initial development schedule is tight.  Thus I have
+ * elected to support only a modified LRU policy for the first cut.
+ *
+ * When additional replacement policies are added, the fields in this
+ * section will be used in different ways or not at all.  Thus the
+ * documentation of these fields is repeated for each replacement policy.
+ *
+ * Modified LRU:
+ *
+ * When operating in parallel mode, we must ensure that a read does not
+ * cause a write.  If it does, the process will hang, as the write will
+ * be collective and the other processes will not know to participate.
+ *
+ * To deal with this issue, I have modified the usual LRU policy by adding
+ * clean and dirty LRU lists to the usual LRU list.  When reading in
+ * parallel mode, we evict from the clean LRU list only.  This implies
+ * that we must try to ensure that the clean LRU list is reasonably well
+ * stocked.  See the comments on H5C_t in H5C.c for more details.
+ *
+ * Note that even if we start with a completely clean cache, a sequence
+ * of protects without unprotects can empty the clean LRU list.  In this
+ * case, the cache must grow temporarily.  At the next write, we will
+ * attempt to evict enough entries to get the cache down to its nominal
+ * maximum size.
+ *
+ * The use of the replacement policy fields under the Modified LRU policy
+ * is discussed below:
+ *
+ * next:	Next pointer in either the LRU or the protected list,
+ *		depending on the current value of protected.  If there
+ *		is no next entry on the list, this field should be set
+ *		to NULL.
+ *
+ * prev:	Prev pointer in either the LRU or the protected list,
+ *		depending on the current value of protected.  If there
+ *		is no previous entry on the list, this field should be
+ *		set to NULL.
+ *
+ * aux_next:	Next pointer on either the clean or dirty LRU lists.
+ *		This entry should be NULL when protected is true.  When
+ *		protected is false, and dirty is true, it should point
+ *		to the next item on the dirty LRU list.  When protected
+ *		is false, and dirty is false, it should point to the
+ *		next item on the clean LRU list.  In either case, when
+ *		there is no next item, it should be NULL.
+ *
+ * aux_prev:	Previous pointer on either the clean or dirty LRU lists.
+ *		This entry should be NULL when protected is true.  When
+ *		protected is false, and dirty is true, it should point
+ *		to the previous item on the dirty LRU list.  When protected
+ *		is false, and dirty is false, it should point to the
+ *		previous item on the clean LRU list.  In either case, when
+ *		there is no previous item, it should be NULL.
+ *
+ *
+ * Cache entry stats collection fields:
+ *
+ * These fields should only be compiled in when both H5C_COLLECT_CACHE_STATS
+ * and H5C_COLLECT_CACHE_ENTRY_STATS are true.  When present, they allow
+ * collection of statistics on individual cache entries.
+ *
+ * accesses:	int32_t containing the number of times this cache entry has
+ *		been referenced in its lifetime.
+ *
+ * clears:	int32_t containing the number of times this cache entry has
+ *              been cleared in its life time.
+ *
+ * flushes:	int32_t containing the number of times this cache entry has
+ *              been flushed to file in its life time.
+ *
+ ****************************************************************************/
+
+typedef struct H5C_cache_entry_t
+{
+    haddr_t		addr;
+    size_t		size;
+    const H5C_class_t *	type;
+    hbool_t		is_dirty;
+    hbool_t		is_protected;
+    hbool_t		in_slist;
+
+    /* fields supporting the hash table: */
+
+    struct H5C_cache_entry_t *	ht_next;
+    struct H5C_cache_entry_t *	ht_prev;
+
+    /* fields supporting replacement policies: */
+
+    struct H5C_cache_entry_t *	next;
+    struct H5C_cache_entry_t *	prev;
+    struct H5C_cache_entry_t *	aux_next;
+    struct H5C_cache_entry_t *	aux_prev;
+
+#if H5C_COLLECT_CACHE_ENTRY_STATS
+
+    /* cache entry stats fields */
+
+    int32_t			accesses;
+    int32_t			clears;
+    int32_t			flushes;
+
+#endif /* H5C_COLLECT_CACHE_ENTRY_STATS */
+
+} H5C_cache_entry_t;
+
+
+/* Typedef for the main structure for the cache (defined in H5C.c) */
+
+typedef struct H5C_t H5C_t;
+
+/*
+ * Library prototypes.
+ */
+H5_DLL H5C_t * H5C_create(size_t                     max_cache_size,
+                          size_t                     min_clean_size,
+                          int                        max_type_id,
+                          const char *              (* type_name_table_ptr),
+                          H5C_write_permitted_func_t check_write_permitted);
+
+H5_DLL herr_t H5C_dest(H5F_t * f,
+                       hid_t   primary_dxpl_id,
+                       hid_t   secondary_dxpl_id,
+                       H5C_t * cache_ptr);
+
+H5_DLL herr_t H5C_dest_empty(H5C_t * cache_ptr);
+
+H5_DLL herr_t H5C_flush_cache(H5F_t *  f,
+                              hid_t    primary_dxpl_id,
+                              hid_t    secondary_dxpl_id,
+                              H5C_t *  cache_ptr,
+                              unsigned flags);
+
+H5_DLL herr_t H5C_insert_entry(H5F_t *             f,
+                               hid_t               primary_dxpl_id,
+                               hid_t               secondary_dxpl_id,
+                               H5C_t *             cache_ptr,
+                               const H5C_class_t * type,
+                               haddr_t             addr,
+                               void *              thing);
+
+H5_DLL herr_t H5C_rename_entry(H5C_t *             cache_ptr,
+                               const H5C_class_t * type,
+                               haddr_t             old_addr,
+                               haddr_t             new_addr);
+
+H5_DLL void * H5C_protect(H5F_t *             f,
+                          hid_t               primary_dxpl_id,
+                          hid_t               secondary_dxpl_id,
+                          H5C_t *             cache_ptr,
+                          const H5C_class_t * type,
+                          haddr_t             addr,
+                          const void *        udata1,
+                          void *              udata2);
+
+H5_DLL herr_t H5C_unprotect(H5F_t *             f,
+                            hid_t               primary_dxpl_id,
+                            hid_t               secondary_dxpl_id,
+                            H5C_t *             cache_ptr,
+                            const H5C_class_t * type,
+                            haddr_t             addr,
+                            void *              thing,
+                            hbool_t             deleted);
+
+H5_DLL herr_t H5C_stats(H5C_t * cache_ptr,
+                        const char * cache_name,
+                        hbool_t display_detailed_stats);
+
+H5_DLL void H5C_stats__reset(H5C_t * cache_ptr);
+
+H5_DLL herr_t H5C_set_skip_flags(H5C_t * cache_ptr,
+                                 hbool_t skip_file_checks,
+                                 hbool_t skip_dxpl_id_checks);
+
+#endif /* !_H5Cprivate_H */
+

Added: packages/hdf5/branches/upstream/current/src/H5Cpublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Cpublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Cpublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,40 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:	H5Cproto.h
+ *              June 4, 2005
+ *              John Mainzer
+ *
+ * Purpose:     Public include file for cache functions.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5Cpublic_H
+#define _H5Cpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5D.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5D.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5D.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,4139 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5D_PACKAGE		/*suppress error about including H5Dpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5D_init_interface
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dpkg.h"		/* Datasets 				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5FOprivate.h"        /* File objects                         */
+#include "H5HLprivate.h"	/* Local heaps				*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Sprivate.h"		/* Dataspaces 				*/
+#include "H5Vprivate.h"		/* Vectors and arrays 			*/
+
+/*#define H5D_DEBUG*/
+
+/* Local functions */
+static herr_t H5D_init_storage(H5D_t *dataset, hbool_t full_overwrite, hid_t dxpl_id);
+static H5D_shared_t * H5D_new(hid_t dcpl_id, hbool_t creating, hbool_t vl_type);
+static H5D_t * H5D_create(H5G_entry_t *loc, const char *name, hid_t type_id,
+           const H5S_t *space, hid_t dcpl_id, hid_t dxpl_id);
+static H5D_t * H5D_open_oid(const H5G_entry_t *ent, hid_t dxpl_id);
+static herr_t H5D_get_space_status(H5D_t *dset, H5D_space_status_t *allocation, hid_t dxpl_id);
+static hsize_t H5D_get_storage_size(H5D_t *dset, hid_t dxpl_id);
+static haddr_t H5D_get_offset(const H5D_t *dset);
+static herr_t H5D_extend(H5D_t *dataset, const hsize_t *size, hid_t dxpl_id);
+static herr_t H5D_set_extent(H5D_t *dataset, const hsize_t *size, hid_t dxpl_id);
+static herr_t H5D_init_type(H5F_t *file, const H5D_t *dset, hid_t type_id, const H5T_t *type);
+static int H5D_crt_fill_value_cmp(const void *value1, const void *value2, size_t size);
+static int H5D_crt_ext_file_list_cmp(const void *value1, const void *value2, size_t size);
+static int H5D_crt_data_pipeline_cmp(const void *value1, const void *value2, size_t size);
+
+/* Internal data structure for computing variable-length dataset's total size */
+typedef struct {
+    hid_t dataset_id;   /* ID of the dataset we are working on */
+    hid_t fspace_id;    /* ID of the file dataset's dataspace we are working on */
+    hid_t mspace_id;    /* ID of the memory dataset's dataspace we are working on */
+    void *fl_tbuf;      /* Ptr to the temporary buffer we are using for fixed-length data */
+    void *vl_tbuf;      /* Ptr to the temporary buffer we are using for VL data */
+    hid_t xfer_pid;     /* ID of the dataset xfer property list */
+    hsize_t size;       /* Accumulated number of bytes for the selection */
+} H5D_vlen_bufsize_t;
+
+/* Declare a free list to manage the H5D_t and H5D_shared_t structs */
+H5FL_DEFINE_STATIC(H5D_t);
+H5FL_DEFINE_STATIC(H5D_shared_t);
+
+/* Declare a free list to manage blocks of VL data */
+H5FL_BLK_DEFINE_STATIC(vlen_vl_buf);
+
+/* Declare a free list to manage other blocks of VL data */
+H5FL_BLK_DEFINE_STATIC(vlen_fl_buf);
+
+/* Declare the external PQ free list for the sieve buffer information */
+H5FL_BLK_EXTERN(sieve_buf);
+
+/* Define a static "default" dataset structure to use to initialize new datasets */
+static H5D_shared_t H5D_def_dset;
+
+/* Define a "default" dataset transfer property list cache structure to use for default DXPLs */
+H5D_dxpl_cache_t H5D_def_dxpl_cache;
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_init
+ *
+ * Purpose:	Initialize the interface from some other layer.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, March 4, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_init(void)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_init, FAIL)
+    /* FUNC_ENTER() does all the work */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5D_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5D_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.
+NOTES
+    Care must be taken when using the H5P functions, since they can cause
+    a deadlock in the library when the library is attempting to terminate -QAK
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5D_init_interface(void)
+{
+    /* Dataset Transfer property class variables.  In sequence, they are,
+     * - Transfer Property list class to modify
+     * - Default value for maximum temp buffer size
+     * - Default value for type conversion buffer
+     * - Default value for background buffer
+     * - Default value for B-tree node split ratios
+     * - Default value for hyperslab caching
+     * - Default value for hyperslab cache limit
+     * - Default value for vlen allocation function
+     * - Default value for vlen allocation information
+     * - Default value for vlen free function
+     * - Default value for vlen free information
+     * - Default value for file driver ID
+     * - Default value for file driver info
+     * - Default value for 'gather reads' property
+     * - Default value for vector size
+     * - Default value for I/O transfer mode
+     * - Default value for EDC property
+     * - Default value for filter callback
+     */
+    H5P_genclass_t  *xfer_pclass;
+    size_t          def_max_temp_buf         = H5D_XFER_MAX_TEMP_BUF_DEF;
+    void            *def_tconv_buf           = H5D_XFER_TCONV_BUF_DEF;
+    void            *def_bkgr_buf            = H5D_XFER_BKGR_BUF_DEF;
+    H5T_bkg_t       def_bkgr_buf_type        = H5D_XFER_BKGR_BUF_TYPE_DEF;
+    double          def_btree_split_ratio[3] = H5D_XFER_BTREE_SPLIT_RATIO_DEF;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    unsigned        def_hyper_cache          = H5D_XFER_HYPER_CACHE_DEF;
+    unsigned        def_hyper_cache_lim      = H5D_XFER_HYPER_CACHE_LIM_DEF;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    H5MM_allocate_t def_vlen_alloc           = H5D_XFER_VLEN_ALLOC_DEF;
+    void            *def_vlen_alloc_info     = H5D_XFER_VLEN_ALLOC_INFO_DEF;
+    H5MM_free_t     def_vlen_free            = H5D_XFER_VLEN_FREE_DEF;
+    void            *def_vlen_free_info      = H5D_XFER_VLEN_FREE_INFO_DEF;
+    hid_t           def_vfl_id               = H5D_XFER_VFL_ID_DEF;
+    void            *def_vfl_info            = H5D_XFER_VFL_INFO_DEF;
+    size_t          def_hyp_vec_size         = H5D_XFER_HYPER_VECTOR_SIZE_DEF;
+#ifdef H5_HAVE_PARALLEL
+    H5FD_mpio_xfer_t def_io_xfer_mode        = H5D_XFER_IO_XFER_MODE_DEF;
+#endif /* H5_HAVE_PARALLEL */
+    H5Z_EDC_t       enable_edc               = H5D_XFER_EDC_DEF;
+    H5Z_cb_t        filter_cb                = H5D_XFER_FILTER_CB_DEF;
+
+    /* Dataset creation property class variables.  In sequence, they are,
+     * - Creation property list class to modify
+     * - Default value for storage layout property
+     * - Default value for chunk dimensionality property
+     * - Default value for chunk size
+     * - Default value for fill value
+     * - Default value for external file list
+     * - Default value for data filter pipeline
+     */
+    H5P_genclass_t  *crt_pclass;
+    H5D_layout_t    layout                   = H5D_CRT_LAYOUT_DEF;
+    unsigned        chunk_ndims              = H5D_CRT_CHUNK_DIM_DEF;
+    size_t          chunk_size[H5O_LAYOUT_NDIMS] = H5D_CRT_CHUNK_SIZE_DEF;
+    H5O_fill_t      fill                     = H5D_CRT_FILL_VALUE_DEF;
+    H5D_alloc_time_t    alloc_time           = H5D_CRT_ALLOC_TIME_DEF;
+    unsigned        alloc_time_state         = H5D_CRT_ALLOC_TIME_STATE_DEF;
+    H5D_fill_time_t     fill_time            = H5D_CRT_FILL_TIME_DEF;
+    H5O_efl_t       efl                      = H5D_CRT_EXT_FILE_LIST_DEF;
+    H5O_pline_t     pline                    = H5D_CRT_DATA_PIPELINE_DEF;
+
+    H5P_genplist_t *def_dcpl;               /* Default Dataset Creation Property list */
+    size_t          nprops;                 /* Number of properties */
+    herr_t          ret_value                = SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_init_interface)
+
+    /* Initialize the atom group for the dataset IDs */
+    if (H5I_init_group(H5I_DATASET, H5I_DATASETID_HASHSIZE, H5D_RESERVED_ATOMS, (H5I_free_t)H5D_close)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize interface")
+
+    /* =========Dataset Transfer Property Class Initialization========= */
+    /* Register the default dataset transfer properties */
+    assert(H5P_CLS_DATASET_XFER_g!=(-1));
+
+    /* Get the pointer to the dataset transfer class */
+    if (NULL == (xfer_pclass = H5I_object(H5P_CLS_DATASET_XFER_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list class")
+
+    /* Get the number of properties in the class */
+    if(H5P_get_nprops_pclass(xfer_pclass,&nprops)<0)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "can't query number of properties")
+
+    /* Assume that if there are properties in the class, they are the default ones */
+    if(nprops==0) {
+        /* Register the max. temp buffer size property */
+        if(H5P_register(xfer_pclass,H5D_XFER_MAX_TEMP_BUF_NAME,H5D_XFER_MAX_TEMP_BUF_SIZE,&def_max_temp_buf,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the type conversion buffer property */
+        if(H5P_register(xfer_pclass,H5D_XFER_TCONV_BUF_NAME,H5D_XFER_TCONV_BUF_SIZE,&def_tconv_buf,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the background buffer property */
+        if(H5P_register(xfer_pclass,H5D_XFER_BKGR_BUF_NAME,H5D_XFER_BKGR_BUF_SIZE,&def_bkgr_buf,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the background buffer type property */
+        if(H5P_register(xfer_pclass,H5D_XFER_BKGR_BUF_TYPE_NAME,H5D_XFER_BKGR_BUF_TYPE_SIZE,&def_bkgr_buf_type,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the B-Tree node splitting ratios property */
+        if(H5P_register(xfer_pclass,H5D_XFER_BTREE_SPLIT_RATIO_NAME,H5D_XFER_BTREE_SPLIT_RATIO_SIZE,def_btree_split_ratio,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+        /* Register the hyperslab caching property */
+        if(H5P_register(xfer_pclass,H5D_XFER_HYPER_CACHE_NAME,H5D_XFER_HYPER_CACHE_SIZE,&def_hyper_cache,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the hyperslab cache limit property */
+        if(H5P_register(xfer_pclass,H5D_XFER_HYPER_CACHE_LIM_NAME,H5D_XFER_HYPER_CACHE_LIM_SIZE,&def_hyper_cache_lim,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+        /* Register the vlen allocation function property */
+        if(H5P_register(xfer_pclass,H5D_XFER_VLEN_ALLOC_NAME,H5D_XFER_VLEN_ALLOC_SIZE,&def_vlen_alloc,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the vlen allocation information property */
+        if(H5P_register(xfer_pclass,H5D_XFER_VLEN_ALLOC_INFO_NAME,H5D_XFER_VLEN_ALLOC_INFO_SIZE,&def_vlen_alloc_info,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the vlen free function property */
+        if(H5P_register(xfer_pclass,H5D_XFER_VLEN_FREE_NAME,H5D_XFER_VLEN_FREE_SIZE,&def_vlen_free,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the vlen free information property */
+        if(H5P_register(xfer_pclass,H5D_XFER_VLEN_FREE_INFO_NAME,H5D_XFER_VLEN_FREE_INFO_SIZE,&def_vlen_free_info,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the file driver ID property */
+        if(H5P_register(xfer_pclass,H5D_XFER_VFL_ID_NAME,H5D_XFER_VFL_ID_SIZE,&def_vfl_id,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the file driver info property */
+        if(H5P_register(xfer_pclass,H5D_XFER_VFL_INFO_NAME,H5D_XFER_VFL_INFO_SIZE,&def_vfl_info,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the vector size property */
+        if(H5P_register(xfer_pclass,H5D_XFER_HYPER_VECTOR_SIZE_NAME,H5D_XFER_HYPER_VECTOR_SIZE_SIZE,&def_hyp_vec_size,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+#ifdef H5_HAVE_PARALLEL
+        /* Register the I/O transfer mode property */
+        if(H5P_register(xfer_pclass,H5D_XFER_IO_XFER_MODE_NAME,H5D_XFER_IO_XFER_MODE_SIZE,&def_io_xfer_mode,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+#endif /* H5_HAVE_PARALLEL */
+
+        /* Register the EDC property */
+        if(H5P_register(xfer_pclass,H5D_XFER_EDC_NAME,H5D_XFER_EDC_SIZE,&enable_edc,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the filter callback property */
+        if(H5P_register(xfer_pclass,H5D_XFER_FILTER_CB_NAME,H5D_XFER_FILTER_CB_SIZE,&filter_cb,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+    } /* end if */
+
+    /* Only register the default property list if it hasn't been created yet */
+    if(H5P_LST_DATASET_XFER_g==(-1)) {
+        /* Register the default data transfer property list */
+        if ((H5P_LST_DATASET_XFER_g = H5P_create_id (xfer_pclass))<0)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't register default property list")
+    } /* end if */
+
+    /* =========Dataset Creation Property Class Initialization========== */
+    /* Register the default dataset creation properties */
+    assert(H5P_CLS_DATASET_CREATE_g != -1);
+
+    /* Get the pointer to the dataset creation class */
+    if(NULL == (crt_pclass = H5I_object(H5P_CLS_DATASET_CREATE_g)))
+       HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list class")
+
+    /* Get the number of properties in the class */
+    if(H5P_get_nprops_pclass(crt_pclass,&nprops)<0)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "can't query number of properties")
+
+    /* Assume that if there are properties in the class, they are the default ones */
+    if(nprops==0) {
+        /* Register the storage layout property */
+        if(H5P_register(crt_pclass, H5D_CRT_LAYOUT_NAME, H5D_CRT_LAYOUT_SIZE, &layout, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
+           HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the chunking dimensionality property */
+        if(H5P_register(crt_pclass, H5D_CRT_CHUNK_DIM_NAME, H5D_CRT_CHUNK_DIM_SIZE, &chunk_ndims, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
+           HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the chunking size property */
+        if(H5P_register(crt_pclass, H5D_CRT_CHUNK_SIZE_NAME, H5D_CRT_CHUNK_SIZE_SIZE, chunk_size, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
+           HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the fill value property */
+        if(H5P_register(crt_pclass, H5D_CRT_FILL_VALUE_NAME, H5D_CRT_FILL_VALUE_SIZE, &fill, NULL, NULL, NULL, NULL, NULL, H5D_CRT_FILL_VALUE_CMP, NULL) < 0)
+           HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the space allocation time property */
+        if(H5P_register(crt_pclass, H5D_CRT_ALLOC_TIME_NAME, H5D_CRT_ALLOC_TIME_SIZE, &alloc_time, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the space allocation time state property */
+        if(H5P_register(crt_pclass, H5D_CRT_ALLOC_TIME_STATE_NAME, H5D_CRT_ALLOC_TIME_STATE_SIZE, &alloc_time_state, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the fill value writing time property */
+        if(H5P_register(crt_pclass, H5D_CRT_FILL_TIME_NAME, H5D_CRT_FILL_TIME_SIZE, &fill_time, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the external file list property */
+        if(H5P_register(crt_pclass, H5D_CRT_EXT_FILE_LIST_NAME, H5D_CRT_EXT_FILE_LIST_SIZE, &efl, NULL, NULL, NULL, NULL, NULL, H5D_CRT_EXT_FILE_LIST_CMP, NULL) < 0)
+           HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the data pipeline property */
+        if(H5P_register(crt_pclass, H5D_CRT_DATA_PIPELINE_NAME, H5D_CRT_DATA_PIPELINE_SIZE, &pline, NULL, NULL, NULL, NULL, NULL, H5D_CRT_DATA_PIPELINE_CMP, NULL) < 0)
+           HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+    } /* end if */
+
+    /* Only register the default property list if it hasn't been created yet */
+    if(H5P_LST_DATASET_CREATE_g==(-1)) {
+        /* Register the default data transfer property list */
+        if ((H5P_LST_DATASET_CREATE_g = H5P_create_id (crt_pclass))<0)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't register default property list")
+    } /* end if */
+
+    /* Reset the "default dataset" information */
+    HDmemset(&H5D_def_dset,0,sizeof(H5D_shared_t));
+
+    /* Get the default dataset cretion property list values and initialize the
+     * default dataset with them.
+     */
+    if (NULL == (def_dcpl = H5I_object(H5P_LST_DATASET_CREATE_g)))
+        HGOTO_ERROR(H5E_DATASET, H5E_BADTYPE, FAIL, "can't get default dataset creation property list")
+
+    /* Set up the default allocation time information */
+    if(H5P_get(def_dcpl, H5D_CRT_ALLOC_TIME_NAME, &H5D_def_dset.alloc_time) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve space allocation time")
+
+    /* Get the default external file list information */
+    if(H5P_get(def_dcpl, H5D_CRT_EXT_FILE_LIST_NAME, &H5D_def_dset.efl) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve external file list")
+
+    /* Get the default data storage method */
+    if(H5P_get(def_dcpl, H5D_CRT_LAYOUT_NAME, &H5D_def_dset.layout.type) < 0)
+         HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve layout")
+
+    /* Get the default fill value time */
+    if (H5P_get(def_dcpl, H5D_CRT_FILL_TIME_NAME, &H5D_def_dset.fill_time) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve fill time")
+
+    /* Get the default fill value */
+    if (H5P_get(def_dcpl, H5D_CRT_FILL_VALUE_NAME, &H5D_def_dset.fill) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve fill value")
+
+    /* Reset the "default DXPL cache" information */
+    HDmemset(&H5D_def_dxpl_cache,0,sizeof(H5D_dxpl_cache_t));
+
+    /* Get the default DXPL cache information */
+    if (H5D_get_dxpl_cache_real(H5P_DATASET_XFER_DEFAULT, &H5D_def_dxpl_cache) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve default DXPL info")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_term_interface
+ *
+ * Purpose:	Terminate this interface.
+ *
+ * Return:	Success:	Positive if anything was done that might
+ *				affect other interfaces; zero otherwise.
+ *
+ * 		Failure:	Negative.
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, November 20, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5D_term_interface(void)
+{
+    int		n=0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_term_interface)
+
+    if (H5_interface_initialize_g) {
+	if ((n=H5I_nmembers(H5I_DATASET))>0) {
+            /* The dataset API uses the "force" flag set to true because it
+             * is using the "file objects" (H5FO) API functions to track open
+             * objects in the file.  Using the H5FO code means that dataset
+             * IDs can have reference counts >1, when an existing dataset is
+             * opened more than once.  However, the H5I code does not attempt
+             * to close objects with reference counts>1 unless the "force" flag
+             * is set to true.
+             *
+             * At some point (probably after the group and datatypes use the
+             * the H5FO code), the H5FO code might need to be switched around
+             * to storing pointers to the objects being tracked (H5D_t, H5G_t,
+             * etc) and reference count those itself instead of relying on the
+             * reference counting in the H5I layer.  Then, the "force" flag can
+             * be put back to false.
+             *
+             * Setting the "force" flag to true for all the interfaces won't
+             * work because the "file driver" (H5FD) APIs use the H5I reference
+             * counting to avoid closing a file driver out from underneath an
+             * open file...
+             *
+             * QAK - 5/13/03
+             */
+	    H5I_clear_group(H5I_DATASET, TRUE);
+	} else {
+	    H5I_destroy_group(H5I_DATASET);
+	    H5_interface_initialize_g = 0;
+	    n = 1; /*H5I*/
+	}
+    }
+    FUNC_LEAVE_NOAPI(n)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5D_crt_copy
+ *
+ * Purpose:        Callback routine which is called whenever any dataset
+ *                 creation property list is copied.  This routine copies
+ *                 the properties from the old list to the new list.
+ *
+ * Return:         Success:        Non-negative
+ *
+ *                 Failure:        Negative
+ *
+ * Programmer:     Raymond Lu
+ *                 Tuesday, October 2, 2001
+ *
+ * Modification:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+herr_t
+H5D_crt_copy(hid_t new_plist_id, hid_t old_plist_id, void UNUSED *copy_data)
+{
+    H5O_fill_t     src_fill, dst_fill;
+    H5O_efl_t      src_efl, dst_efl;
+    H5O_pline_t    src_pline, dst_pline;
+    H5P_genplist_t *old_plist;
+    H5P_genplist_t *new_plist;
+    herr_t         ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5D_crt_copy, FAIL)
+
+    /* Verify property list ID */
+    if (NULL == (new_plist = H5I_object(new_plist_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list")
+    if (NULL == (old_plist = H5I_object(old_plist_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list")
+
+    /* Get the fill value, external file list, and data pipeline properties
+     * from the old property list */
+    if(H5P_get(old_plist, H5D_CRT_FILL_VALUE_NAME, &src_fill) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get fill value")
+    if(H5P_get(old_plist, H5D_CRT_EXT_FILE_LIST_NAME, &src_efl) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get external file list")
+    if(H5P_get(old_plist, H5D_CRT_DATA_PIPELINE_NAME, &src_pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get pipeline")
+
+    /* Make copies of fill value, external file list, and data pipeline */
+    if(src_fill.buf) {
+        if(NULL==H5O_copy(H5O_FILL_ID, &src_fill, &dst_fill))
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't copy fill value")
+    } /* end if */
+    else {
+	dst_fill.type = dst_fill.buf = NULL;
+	dst_fill.size = src_fill.size;
+    }
+    HDmemset(&dst_efl,0,sizeof(H5O_efl_t));
+    if(NULL==H5O_copy(H5O_EFL_ID, &src_efl, &dst_efl))
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't copy external file list")
+    if(NULL==H5O_copy(H5O_PLINE_ID, &src_pline, &dst_pline))
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't copy data pipeline")
+
+    /* Set the fill value, external file list, and data pipeline property
+     * for the new property list */
+    if(H5P_set(new_plist, H5D_CRT_FILL_VALUE_NAME, &dst_fill) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set fill value")
+    if(H5P_set(new_plist, H5D_CRT_EXT_FILE_LIST_NAME, &dst_efl) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set external file list")
+    if(H5P_set(new_plist, H5D_CRT_DATA_PIPELINE_NAME, &dst_pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set pipeline")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_crt_close
+ *
+ * Purpose:	Callback routine which is called whenever any dataset create
+ *              property list is closed.  This routine performs any generic
+ *              cleanup needed on the properties the library put into the list.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, July 11, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+herr_t
+H5D_crt_close(hid_t dcpl_id, void UNUSED *close_data)
+{
+    H5O_fill_t     fill;
+    H5O_efl_t      efl;
+    H5O_pline_t    pline;
+    H5P_genplist_t *plist;      /* Property list */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_crt_close, FAIL)
+
+    /* Check arguments */
+    if (NULL == (plist = H5I_object(dcpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list")
+
+    /* Get the fill value, external file list, and data pipeline properties
+     * from the old property list */
+    if(H5P_get(plist, H5D_CRT_FILL_VALUE_NAME, &fill) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get fill value")
+    if(H5P_get(plist, H5D_CRT_EXT_FILE_LIST_NAME, &efl) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get external file list")
+    if(H5P_get(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get pipeline")
+
+    /* Clean up any values set for the fill-value, external file-list and
+     * data pipeline */
+    if(H5O_reset(H5O_FILL_ID, &fill)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "can't release fill info")
+    if(H5O_reset(H5O_EFL_ID, &efl)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "can't release external file list info")
+    if(H5O_reset(H5O_PLINE_ID, &pline)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "can't release pipeline info")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_crt_close() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5D_crt_fill_value_cmp
+ *
+ * Purpose:        Callback routine which is called whenever the fill value
+ *                 property in the dataset creation property list is compared.
+ *
+ * Return:         positive if VALUE1 is greater than VALUE2, negative if
+ *                      VALUE2 is greater than VALUE1 and zero if VALUE1 and
+ *                      VALUE2 are equal.
+ *
+ * Programmer:     Quincey Koziol
+ *                 Wednesday, January 7, 2004
+ *
+ * Modification:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5D_crt_fill_value_cmp(const void *value1, const void *value2, size_t UNUSED size)
+{
+    const H5O_fill_t     *fill1=(const H5O_fill_t *)value1,     /* Create local aliases for values */
+        *fill2=(const H5O_fill_t *)value2;
+    int cmp_value;              /* Value from comparison */
+    herr_t         ret_value=0; /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_crt_fill_value_cmp)
+
+    /* Sanity check */
+    assert(fill1);
+    assert(fill2);
+    assert(size==sizeof(H5O_fill_t));
+
+    /* Check the size of fill values */
+    if(fill1->size < fill2->size) HGOTO_DONE(-1);
+    if(fill1->size > fill2->size) HGOTO_DONE(1);
+
+    /* Check the types of the fill values */
+    if(fill1->type==NULL && fill2->type!=NULL) HGOTO_DONE(-1);
+    if(fill1->type!=NULL && fill2->type==NULL) HGOTO_DONE(1);
+    if(fill1->type!=NULL)
+        if((cmp_value=H5T_cmp(fill1->type,fill2->type, FALSE))!=0)
+            HGOTO_DONE(cmp_value);
+
+    /* Check the fill values in the buffers */
+    if(fill1->buf==NULL && fill2->buf!=NULL) HGOTO_DONE(-1);
+    if(fill1->buf!=NULL && fill2->buf==NULL) HGOTO_DONE(1);
+    if(fill1->buf!=NULL)
+        if((cmp_value=HDmemcmp(fill1->buf,fill2->buf,fill1->size))!=0)
+            HGOTO_DONE(cmp_value);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_crt_fill_value_cmp() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5D_crt_ext_file_list_cmp
+ *
+ * Purpose:        Callback routine which is called whenever the external file
+ *                 list property in the dataset creation property list is
+ *                 compared.
+ *
+ * Return:         positive if VALUE1 is greater than VALUE2, negative if
+ *                      VALUE2 is greater than VALUE1 and zero if VALUE1 and
+ *                      VALUE2 are equal.
+ *
+ * Programmer:     Quincey Koziol
+ *                 Wednesday, January 7, 2004
+ *
+ * Modification:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5D_crt_ext_file_list_cmp(const void *value1, const void *value2, size_t UNUSED size)
+{
+    const H5O_efl_t     *efl1=(const H5O_efl_t *)value1,     /* Create local aliases for values */
+        *efl2=(const H5O_efl_t *)value2;
+    int cmp_value;              /* Value from comparison */
+    herr_t         ret_value=0; /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_crt_ext_file_list_cmp)
+
+    /* Sanity check */
+    assert(efl1);
+    assert(efl2);
+    assert(size==sizeof(H5O_efl_t));
+
+    /* Check the heap address of external file lists */
+    if(H5F_addr_defined(efl1->heap_addr) || H5F_addr_defined(efl2->heap_addr)) {
+        if(!H5F_addr_defined(efl1->heap_addr) && H5F_addr_defined(efl2->heap_addr)) HGOTO_DONE(-1);
+        if(H5F_addr_defined(efl1->heap_addr) && !H5F_addr_defined(efl2->heap_addr)) HGOTO_DONE(1);
+        if((cmp_value=H5F_addr_cmp(efl1->heap_addr,efl2->heap_addr))!=0)
+            HGOTO_DONE(cmp_value);
+    } /* end if */
+
+    /* Check the number of allocated efl entries */
+    if(efl1->nalloc < efl2->nalloc) HGOTO_DONE(-1);
+    if(efl1->nalloc > efl2->nalloc) HGOTO_DONE(1);
+
+    /* Check the number of used efl entries */
+    if(efl1->nused < efl2->nused) HGOTO_DONE(-1);
+    if(efl1->nused > efl2->nused) HGOTO_DONE(1);
+
+    /* Check the efl entry information */
+    if(efl1->slot==NULL && efl2->slot!=NULL) HGOTO_DONE(-1);
+    if(efl1->slot!=NULL && efl2->slot==NULL) HGOTO_DONE(1);
+    if(efl1->slot!=NULL && efl1->nused>0) {
+        size_t u;       /* Local index variable */
+
+        /* Loop through all entries, comparing them */
+        for(u=0; u<efl1->nused; u++) {
+            /* Check the name offset of the efl entry */
+            if(efl1->slot[u].name_offset < efl2->slot[u].name_offset) HGOTO_DONE(-1);
+            if(efl1->slot[u].name_offset > efl2->slot[u].name_offset) HGOTO_DONE(1);
+
+            /* Check the name of the efl entry */
+            if(efl1->slot[u].name==NULL && efl2->slot[u].name!=NULL) HGOTO_DONE(-1);
+            if(efl1->slot[u].name!=NULL && efl2->slot[u].name==NULL) HGOTO_DONE(1);
+            if(efl1->slot[u].name!=NULL)
+                if((cmp_value=HDstrcmp(efl1->slot[u].name,efl2->slot[u].name))!=0)
+                    HGOTO_DONE(cmp_value);
+
+            /* Check the file offset of the efl entry */
+            if(efl1->slot[u].offset < efl2->slot[u].offset) HGOTO_DONE(-1);
+            if(efl1->slot[u].offset > efl2->slot[u].offset) HGOTO_DONE(1);
+
+            /* Check the file size of the efl entry */
+            if(efl1->slot[u].size < efl2->slot[u].size) HGOTO_DONE(-1);
+            if(efl1->slot[u].size > efl2->slot[u].size) HGOTO_DONE(1);
+        } /* end for */
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_crt_ext_file_list_cmp() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5D_crt_data_pipeline_cmp
+ *
+ * Purpose:        Callback routine which is called whenever the filter pipeline
+ *                 property in the dataset creation property list is compared.
+ *
+ * Return:         positive if VALUE1 is greater than VALUE2, negative if
+ *                      VALUE2 is greater than VALUE1 and zero if VALUE1 and
+ *                      VALUE2 are equal.
+ *
+ * Programmer:     Quincey Koziol
+ *                 Wednesday, January 7, 2004
+ *
+ * Modification:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5D_crt_data_pipeline_cmp(const void *value1, const void *value2, size_t UNUSED size)
+{
+    const H5O_pline_t     *pline1=(const H5O_pline_t *)value1,     /* Create local aliases for values */
+        *pline2=(const H5O_pline_t *)value2;
+    int cmp_value;              /* Value from comparison */
+    herr_t         ret_value=0; /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_crt_data_pipeline_cmp)
+
+    /* Sanity check */
+    assert(pline1);
+    assert(pline2);
+    assert(size==sizeof(H5O_pline_t));
+
+    /* Check the number of allocated pipeline entries */
+    if(pline1->nalloc < pline2->nalloc) HGOTO_DONE(-1);
+    if(pline1->nalloc > pline2->nalloc) HGOTO_DONE(1);
+
+    /* Check the number of used pipeline entries */
+    if(pline1->nused < pline2->nused) HGOTO_DONE(-1);
+    if(pline1->nused > pline2->nused) HGOTO_DONE(1);
+
+    /* Check the filter entry information */
+    if(pline1->filter==NULL && pline2->filter!=NULL) HGOTO_DONE(-1);
+    if(pline1->filter!=NULL && pline2->filter==NULL) HGOTO_DONE(1);
+    if(pline1->filter!=NULL && pline1->nused>0) {
+        size_t u;       /* Local index variable */
+
+        /* Loop through all filters, comparing them */
+        for(u=0; u<pline1->nused; u++) {
+            /* Check the ID of the filter */
+            if(pline1->filter[u].id < pline2->filter[u].id) HGOTO_DONE(-1);
+            if(pline1->filter[u].id > pline2->filter[u].id) HGOTO_DONE(1);
+
+            /* Check the flags for the filter */
+            if(pline1->filter[u].flags < pline2->filter[u].flags) HGOTO_DONE(-1);
+            if(pline1->filter[u].flags > pline2->filter[u].flags) HGOTO_DONE(1);
+
+            /* Check the name of the filter */
+            if(pline1->filter[u].name==NULL && pline2->filter[u].name!=NULL) HGOTO_DONE(-1);
+            if(pline1->filter[u].name!=NULL && pline2->filter[u].name==NULL) HGOTO_DONE(1);
+            if(pline1->filter[u].name!=NULL)
+                if((cmp_value=HDstrcmp(pline1->filter[u].name,pline2->filter[u].name))!=0)
+                    HGOTO_DONE(cmp_value);
+
+            /* Check the number of parameters for the filter */
+            if(pline1->filter[u].cd_nelmts < pline2->filter[u].cd_nelmts) HGOTO_DONE(-1);
+            if(pline1->filter[u].cd_nelmts > pline2->filter[u].cd_nelmts) HGOTO_DONE(1);
+
+            /* Check the filter parameter information */
+            if(pline1->filter[u].cd_values==NULL && pline2->filter[u].cd_values!=NULL) HGOTO_DONE(-1);
+            if(pline1->filter[u].cd_values!=NULL && pline2->filter[u].cd_values==NULL) HGOTO_DONE(1);
+            if(pline1->filter[u].cd_values!=NULL && pline1->filter[u].cd_nelmts>0) {
+                size_t v;       /* Local index variable */
+
+                /* Loop through all parameters, comparing them */
+                for(v=0; v<pline1->filter[u].cd_nelmts; v++) {
+                    /* Check each parameter for the filter */
+                    if(pline1->filter[u].cd_values[v] < pline2->filter[u].cd_values[v]) HGOTO_DONE(-1);
+                    if(pline1->filter[u].cd_values[v] > pline2->filter[u].cd_values[v]) HGOTO_DONE(1);
+                } /* end for */
+            } /* end if */
+        } /* end for */
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_crt_data_pipeline_cmp() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_xfer_create
+ *
+ * Purpose:	Callback routine which is called whenever any dataset transfer
+ *              property list is created.  This routine performs any generic
+ *              initialization needed on the properties the library put into
+ *              the list.
+ *              Right now, it's just allocating the driver-specific dataset
+ *              transfer information.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, August 2, 2001
+ *
+ * Notes:       This same routine is currently used for the 'copy' callback.
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+herr_t
+H5D_xfer_create(hid_t dxpl_id, void UNUSED *create_data)
+{
+    hid_t driver_id;            /* VFL driver ID */
+    void *driver_info;          /* VFL driver info */
+    H5P_genplist_t *plist;      /* Property list */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_xfer_create, FAIL)
+
+    /* Check arguments */
+    if (NULL == (plist = H5I_object(dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
+
+    /* Get the driver information */
+    if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve VFL driver ID")
+    if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &driver_info)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve VFL driver info")
+
+    /* Check if we have a valid driver ID */
+    if(driver_id>0) {
+        /* Set the driver for the property list */
+        if(H5FD_dxpl_open(plist, driver_id, driver_info)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set driver")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_xfer_create() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5D_xfer_copy
+ *
+ * Purpose:        Callback routine which is called whenever any dataset
+ *                 transfer property list is copied.  This routine copies
+ *                 the properties from the old list to the new list.
+ *
+ * Return:         Success:        Non-negative
+ *
+ *                 Failure:        Negative
+ *
+ * Programmer:     Raymond Lu
+ *                 Tuesday, October 2, 2001
+ *
+ * Modification:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+herr_t
+H5D_xfer_copy(hid_t new_dxpl_id, hid_t old_dxpl_id, void UNUSED *copy_data)
+{
+    hid_t          driver_id;
+    void*          driver_info;
+    H5P_genplist_t *new_plist;              /* New property list */
+    H5P_genplist_t *old_plist;              /* Old property list */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_xfer_copy, FAIL)
+
+    if(NULL == (new_plist = H5I_object(new_dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+    if(NULL == (old_plist = H5I_object(old_dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
+    /* Get values from old property list */
+    if(H5P_get(old_plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve VFL driver ID")
+    if(H5P_get(old_plist, H5D_XFER_VFL_INFO_NAME, &driver_info)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get drver info")
+
+    if(driver_id > 0) {
+        /* Set the driver for the property list */
+        if(H5FD_dxpl_open(new_plist, driver_id, driver_info)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set driver")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_xfer_close
+ *
+ * Purpose:	Callback routine which is called whenever any dataset transfer
+ *              property list is closed.  This routine performs any generic
+ *              cleanup needed on the properties the library put into the list.
+ *              Right now, it's just freeing the driver-specific dataset
+ *              transfer information.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, July 11, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+herr_t
+H5D_xfer_close(hid_t dxpl_id, void UNUSED *close_data)
+{
+    hid_t driver_id;            /* VFL driver ID */
+    void *driver_info;          /* VFL driver info */
+    H5P_genplist_t *plist;      /* Property list */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_xfer_close, FAIL)
+
+    /* Check arguments */
+    if (NULL == (plist = H5I_object(dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
+
+    if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID")
+    if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &driver_info)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver info")
+    if(driver_id>0) {
+        /* Close the driver for the property list */
+        if(H5FD_dxpl_close(driver_id, driver_info)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't reset driver")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_xfer_close() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5D_get_dcpl_cache
+ PURPOSE
+    Get all the values for the DCPL cache.
+ USAGE
+    herr_t H5D_get_dcpl_cache(dcpl_id, cache)
+        hid_t dcpl_id;          IN: DCPL to query
+        H5D_dcpl_cache_t *cache;IN/OUT: DCPL cache to fill with values
+ RETURNS
+    Non-negative on success/Negative on failure.
+ DESCRIPTION
+    Query all the values from a DCPL that are needed by internal routines
+    within the library.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5D_get_dcpl_cache(hid_t dcpl_id, H5D_dcpl_cache_t *cache)
+{
+    H5P_genplist_t *dc_plist;   /* Data transfer property list */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_get_dcpl_cache)
+
+    /* Check args */
+    assert(cache);
+
+    /* Get the dataset transfer property list */
+    if (NULL == (dc_plist = H5I_object(dcpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list")
+
+    /* Get I/O pipeline info */
+    if(H5P_get(dc_plist, H5D_CRT_DATA_PIPELINE_NAME, &cache->pline)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve I/O pipeline info")
+
+    /* Get fill value info */
+    if(H5P_get(dc_plist, H5D_CRT_FILL_VALUE_NAME, &cache->fill)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve fill value info")
+
+    /* Get fill time info */
+    if(H5P_get(dc_plist, H5D_CRT_FILL_TIME_NAME, &cache->fill_time)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve fill time")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* H5D_get_dcpl_cache() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Dcreate
+ *
+ * Purpose:	Creates a new dataset named NAME at LOC_ID, opens the
+ *		dataset for access, and associates with that dataset constant
+ *		and initial persistent properties including the type of each
+ *		datapoint as stored in the file (TYPE_ID), the size of the
+ *		dataset (SPACE_ID), and other initial miscellaneous
+ *		properties (DCPL_ID).
+ *
+ *		All arguments are copied into the dataset, so the caller is
+ *		allowed to derive new types, data spaces, and creation
+ *		parameters from the old ones and reuse them in calls to
+ *		create other datasets.
+ *
+ * Return:	Success:	The object ID of the new dataset.  At this
+ *				point, the dataset is ready to receive its
+ *				raw data.  Attempting to read raw data from
+ *				the dataset will probably return the fill
+ *				value.	The dataset should be closed when
+ *				the caller is no longer interested in it.
+ *
+ *		Failure:	FAIL
+ *
+ * Errors:
+ *		ARGS	  BADTYPE	Not a data space.
+ *		ARGS	  BADTYPE	Not a dataset creation plist.
+ *		ARGS	  BADTYPE	Not a file.
+ *		ARGS	  BADTYPE	Not a type.
+ *		ARGS	  BADVALUE	No name.
+ *		DATASET	  CANTINIT	Can't create dataset.
+ *		DATASET	  CANTREGISTER	Can't register dataset.
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, December  3, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Dcreate(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id,
+	  hid_t dcpl_id)
+{
+    H5G_entry_t	   *loc = NULL;         /* Entry for group to insert dataset into */
+    H5D_t	   *new_dset = NULL;    /* New dataset's info */
+    const H5S_t    *space;              /* Dataspace for dataset */
+    hid_t	    ret_value;          /* Return value */
+
+    FUNC_ENTER_API(H5Dcreate, FAIL)
+    H5TRACE5("i","isiii",loc_id,name,type_id,space_id,dcpl_id);
+
+    /* Check arguments */
+    if (NULL == (loc = H5G_loc(loc_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location ID")
+    if (!name || !*name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
+    if (H5I_DATATYPE != H5I_get_type(type_id))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype ID")
+    if (NULL == (space = H5I_object_verify(space_id,H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace ID")
+    if(H5P_DEFAULT == dcpl_id)
+        dcpl_id = H5P_DATASET_CREATE_DEFAULT;
+    else
+        if(TRUE != H5P_isa_class(dcpl_id, H5P_DATASET_CREATE))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not dataset create property list ID")
+
+    /* build and open the new dataset */
+    if (NULL == (new_dset = H5D_create(loc, name, type_id, space, dcpl_id, H5AC_dxpl_id)))
+	HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to create dataset")
+
+    /* Register the new dataset to get an ID for it */
+    if ((ret_value = H5I_register(H5I_DATASET, new_dset)) < 0)
+	HGOTO_ERROR(H5E_DATASET, H5E_CANTREGISTER, FAIL, "unable to register dataset")
+
+done:
+    if(ret_value<0) {
+        if(new_dset!=NULL) {
+            if(H5D_close(new_dset)<0)
+                HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release dataset")
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Dopen
+ *
+ * Purpose:	Finds a dataset named NAME at LOC_ID, opens it, and returns
+ *		its ID.	 The dataset should be close when the caller is no
+ *		longer interested in it.
+ *
+ * Return:	Success:	A new dataset ID
+ *
+ *		Failure:	FAIL
+ *
+ * Errors:
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December  4, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Dopen(hid_t loc_id, const char *name)
+{
+    H5D_t       *dset = NULL;
+    H5G_entry_t	*loc = NULL;		/*location holding the dataset	*/
+    H5G_entry_t  ent;            	/*dataset symbol table entry	*/
+    hbool_t      ent_found = FALSE;     /* Entry at 'name' found */
+    hid_t        dxpl_id = H5AC_dxpl_id;    /* dxpl to use to open datset */
+    hid_t        ret_value;
+
+    FUNC_ENTER_API(H5Dopen, FAIL)
+    H5TRACE2("i","is",loc_id,name);
+
+    /* Check args */
+    if (NULL == (loc = H5G_loc(loc_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
+
+    /* Find the dataset object */
+    if (H5G_find(loc, name, &ent, dxpl_id) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_NOTFOUND, FAIL, "not found")
+    ent_found = TRUE;
+
+    /* Check that the object found is the correct type */
+    if (H5G_get_type(&ent, dxpl_id) != H5G_DATASET)
+        HGOTO_ERROR(H5E_DATASET, H5E_BADTYPE, FAIL, "not a dataset")
+
+    /* Open the dataset */
+    if ((dset = H5D_open(&ent, dxpl_id))==NULL)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't open dataset")
+
+    /* Register an atom for the dataset */
+    if((ret_value=H5I_register(H5I_DATASET, dset)) <0)
+        HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "can't register dataset atom")
+
+done:
+    if(ret_value < 0) {
+        if(dset != NULL) {
+            if(H5D_close(dset) < 0)
+                HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release dataset")
+        } /* end if */
+        else {
+            if(ent_found && ent.header)
+                H5G_free_ent_name(&ent);
+        } /* end else */
+    } /* end if */
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Dclose
+ *
+ * Purpose:	Closes access to a dataset (DATASET_ID) and releases
+ *		resources used by it. It is illegal to subsequently use that
+ *		same dataset ID in calls to other dataset functions.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Errors:
+ *		ARGS	  BADTYPE	Not a dataset.
+ *		DATASET	  CANTINIT	Can't free.
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December  4, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Dclose(hid_t dset_id)
+{
+    H5D_t	*dset = NULL;	        /* Dataset object to release */
+    herr_t       ret_value=SUCCEED;     /* Return value */
+
+    FUNC_ENTER_API(H5Dclose, FAIL)
+    H5TRACE1("e","i",dset_id);
+
+    /* Check args */
+    if (NULL == (dset = H5I_object_verify(dset_id, H5I_DATASET)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+    if (NULL == dset->ent.file)
+	HGOTO_ERROR(H5E_DATASET, H5E_BADTYPE, FAIL, "not a dataset")
+
+    /*
+     * Decrement the counter on the dataset.  It will be freed if the count
+     * reaches zero.
+     */
+    if (H5I_dec_ref(dset_id) < 0)
+	HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't free")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Dget_space
+ *
+ * Purpose:	Returns a copy of the file data space for a dataset.
+ *
+ * Return:	Success:	ID for a copy of the data space.  The data
+ *				space should be released by calling
+ *				H5Sclose().
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January 28, 1998
+ *
+ * Modifications:
+ *	Robb Matzke, 9 Jun 1998
+ *	The data space is not constant and is no longer cached by the dataset
+ *	struct.
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Dget_space(hid_t dset_id)
+{
+    H5D_t	*dset = NULL;
+    H5S_t	*space = NULL;
+    hid_t	ret_value;
+
+    FUNC_ENTER_API(H5Dget_space, FAIL)
+    H5TRACE1("i","i",dset_id);
+
+    /* Check args */
+    if (NULL==(dset=H5I_object_verify(dset_id, H5I_DATASET)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+
+    /* Read the data space message and return a data space object */
+    if (NULL==(space=H5S_copy (dset->shared->space, FALSE)))
+	HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get data space")
+
+    /* Create an atom */
+    if ((ret_value=H5I_register (H5I_DATASPACE, space))<0)
+	HGOTO_ERROR (H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register data space")
+
+done:
+    if(ret_value<0) {
+        if(space!=NULL) {
+            if(H5S_close(space)<0)
+                HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release dataspace")
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Dget_space_status
+ *
+ * Purpose:	Returns the status of data space allocation.
+ *
+ * Return:
+ *		Success:	Non-negative
+ *
+ *		Failture:	Negative
+ *
+ * Programmer:	Raymond Lu
+ *
+ * Modification:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Dget_space_status(hid_t dset_id, H5D_space_status_t *allocation)
+{
+    H5D_t 	*dset = NULL;
+    herr_t 	ret_value = SUCCEED;
+
+    FUNC_ENTER_API(H5Dget_space_status, FAIL)
+    H5TRACE2("e","i*Ds",dset_id,allocation);
+
+    /* Check arguments */
+    if(NULL==(dset=H5I_object_verify(dset_id, H5I_DATASET)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+
+    /* Read data space address and return */
+    if(FAIL==(ret_value=H5D_get_space_status(dset, allocation, H5AC_ind_dxpl_id)))
+        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get space status")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5D_get_space_status
+ *
+ * Purpose:     Returns the status of data space allocation.
+ *
+ * Return:
+ *              Success:        Non-negative
+ *
+ *              Failture:       Negative
+ *
+ * Programmer:  Raymond Lu
+ *
+ * Modification:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_get_space_status(H5D_t *dset, H5D_space_status_t *allocation, hid_t dxpl_id)
+{
+    H5S_t      *space;              /* Dataset's dataspace */
+    hsize_t     space_allocated;    /* The number of bytes allocated for chunks */
+    hssize_t    total_elem;         /* The total number of elements in dataspace */
+    size_t      type_size;          /* The size of the datatype for the dataset */
+    hsize_t     full_size;          /* The number of bytes in the dataset when fully populated */
+    herr_t      ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_get_space_status)
+
+    assert(dset);
+
+    /* Get the dataset's dataspace */
+    space=dset->shared->space;
+    assert(space);
+
+    /* Get the total number of elements in dataset's dataspace */
+    if((total_elem=H5S_GET_EXTENT_NPOINTS(space))<0)
+	HGOTO_ERROR(H5E_DATASET, H5E_CANTCOUNT, FAIL, "unable to get # of dataspace elements")
+
+    /* Get the size of the dataset's datatype */
+    if((type_size=H5T_get_size(dset->shared->type))==0)
+	HGOTO_ERROR(H5E_DATASET, H5E_CANTCOUNT, FAIL, "unable to get size of datatype")
+
+    /* Compute the maximum size of the dataset in bytes */
+    H5_CHECK_OVERFLOW(total_elem,hssize_t,hsize_t);
+    full_size=((hsize_t)total_elem)*type_size;
+
+    /* Difficult to error check, since the error value is 0 and 0 is a valid value... :-/ */
+    space_allocated=H5D_get_storage_size(dset,dxpl_id);
+
+    /* Decide on how much of the space is allocated */
+    if(space_allocated==0)
+        *allocation = H5D_SPACE_STATUS_NOT_ALLOCATED;
+    else if(space_allocated==full_size)
+        *allocation = H5D_SPACE_STATUS_ALLOCATED;
+    else {
+        /* Should only happen for chunked datasets currently */
+        assert(dset->shared->layout.type==H5D_CHUNKED);
+
+        *allocation = H5D_SPACE_STATUS_PART_ALLOCATED;
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Dget_type
+ *
+ * Purpose:	Returns a copy of the file data type for a dataset.
+ *
+ * Return:	Success:	ID for a copy of the data type.	 The data
+ *				type should be released by calling
+ *				H5Tclose().
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, February  3, 1998
+ *
+ * Modifications:
+ *
+ * 	Robb Matzke, 1 Jun 1998
+ *	If the dataset has a named data type then a handle to the opened data
+ *	type is returned.  Otherwise the returned data type is read-only.  If
+ *	atomization of the data type fails then the data type is closed.
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Dget_type(hid_t dset_id)
+{
+
+    H5D_t	*dset = NULL;
+    H5T_t	*copied_type = NULL;
+    hid_t	ret_value = FAIL;
+
+    FUNC_ENTER_API(H5Dget_type, FAIL)
+    H5TRACE1("i","i",dset_id);
+
+    /* Check args */
+    if (NULL==(dset=H5I_object_verify(dset_id, H5I_DATASET)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+
+    /* Copy the data type and mark it read-only */
+    if (NULL==(copied_type=H5T_copy (dset->shared->type, H5T_COPY_REOPEN)))
+	HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to copy the data type")
+
+    /* Mark any VL datatypes as being in memory now */
+    if (H5T_vlen_mark(copied_type, NULL, H5T_VLEN_MEMORY)<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location");
+
+    /* Unlock copied type */
+    if (H5T_lock (copied_type, FALSE)<0)
+	HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to lock transient data type")
+
+    /* Create an atom */
+    if ((ret_value=H5I_register (H5I_DATATYPE, copied_type))<0)
+	HGOTO_ERROR (H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register data type")
+
+done:
+    if(ret_value<0) {
+        if(copied_type!=NULL) {
+            if(H5T_close (copied_type)<0)
+                HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release datatype")
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Dget_create_plist
+ *
+ * Purpose:	Returns a copy of the dataset creation property list.
+ *
+ * Return:	Success:	ID for a copy of the dataset creation
+ *				property list.  The template should be
+ *				released by calling H5P_close().
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, February  3, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              The way to retrieve and set property is changed for the
+ *              generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Dget_create_plist(hid_t dset_id)
+{
+    H5D_t		*dset = NULL;
+    H5O_fill_t          copied_fill={NULL,0,NULL};
+    H5P_genplist_t      *dcpl_plist;
+    H5P_genplist_t      *new_plist;
+    hid_t		new_dcpl_id = FAIL;
+    hid_t		ret_value = FAIL;
+
+    FUNC_ENTER_API(H5Dget_create_plist, FAIL)
+    H5TRACE1("i","i",dset_id);
+
+    /* Check args */
+    if (NULL==(dset=H5I_object_verify(dset_id, H5I_DATASET)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+    if (NULL == (dcpl_plist = H5I_object(dset->shared->dcpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
+    /* Copy the creation property list */
+    if((new_dcpl_id = H5P_copy_plist(dcpl_plist)) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "unable to copy the creation property list")
+    if (NULL == (new_plist = H5I_object(new_dcpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
+    /* Get the fill value property */
+    if(H5P_get(new_plist, H5D_CRT_FILL_VALUE_NAME, &copied_fill) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get fill value")
+
+    /* Copy the dataset type into the fill value message */
+    if(copied_fill.type==NULL)
+        if(NULL==(copied_fill.type=H5T_copy(dset->shared->type, H5T_COPY_TRANSIENT)))
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to copy dataset data type for fill value")
+
+    /* Set back the fill value property to property list */
+    if(H5P_set(new_plist, H5D_CRT_FILL_VALUE_NAME, &copied_fill) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, FAIL, "unable to set property list fill value")
+
+    /* Set the return value */
+    ret_value=new_dcpl_id;
+
+done:
+    if(ret_value<0) {
+        if(new_dcpl_id>0)
+            (void)H5I_dec_ref(new_dcpl_id);
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Dextend
+ *
+ * Purpose:	This function makes sure that the dataset is at least of size
+ *		SIZE. The dimensionality of SIZE is the same as the data
+ *		space of the dataset being changed.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January 30, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Dextend(hid_t dset_id, const hsize_t *size)
+{
+    H5D_t	*dset = NULL;
+    herr_t       ret_value=SUCCEED;  /* Return value */
+
+    FUNC_ENTER_API(H5Dextend, FAIL)
+    H5TRACE2("e","i*h",dset_id,size);
+
+    /* Check args */
+    if (NULL==(dset=H5I_object_verify(dset_id, H5I_DATASET)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+    if (!size)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no size specified")
+
+    /* Increase size */
+    if (H5D_extend (dset, size, H5AC_dxpl_id)<0)
+	HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to extend dataset")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_new
+ *
+ * Purpose:	Creates a new, empty dataset structure
+ *
+ * Return:	Success:	Pointer to a new dataset descriptor.
+ *
+ *		Failure:	NULL
+ *
+ * Errors:
+ *
+ * Programmer:	Quincey Koziol
+ *		Monday, October 12, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to query and inialization for generic
+ *              property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5D_shared_t *
+H5D_new(hid_t dcpl_id, hbool_t creating, hbool_t vl_type)
+{
+    H5P_genplist_t  *plist;             /* Property list created */
+    H5D_shared_t    *new_dset = NULL;   /* New dataset object */
+    H5D_shared_t    *ret_value;         /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_new)
+
+    if (NULL==(new_dset = H5FL_MALLOC(H5D_shared_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    /* If we are using the default dataset creation property list, during creation
+     * don't bother to copy it, just increment the reference count
+     */
+    if(!vl_type && creating && dcpl_id == H5P_DATASET_CREATE_DEFAULT) {
+        /* Copy the default dataset information */
+        HDmemcpy(new_dset,&H5D_def_dset,sizeof(H5D_shared_t));
+
+        if(H5I_inc_ref(dcpl_id)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTINC, NULL, "Can't increment default DCPL ID")
+        new_dset->dcpl_id = dcpl_id;
+    } /* end if */
+    else {
+        /* Reset the dataset information */
+        HDmemset(new_dset,0,sizeof(H5D_shared_t));
+
+        /* Get the property list */
+        if (NULL == (plist = H5I_object(dcpl_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a property list")
+
+        new_dset->dcpl_id = H5P_copy_plist(plist);
+    } /* end else */
+
+    /* Set return value */
+    ret_value=new_dset;
+
+done:
+    if(ret_value==NULL) {
+        if(new_dset!=NULL) {
+            if(new_dset->dcpl_id!=0)
+                (void)H5I_dec_ref(new_dset->dcpl_id);
+            H5FL_FREE(H5D_shared_t,new_dset);
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_init_type
+ *
+ * Purpose:	Copy a datatype for a dataset's use, performing all the
+ *              necessary adjustments, etc.
+ *
+ * Return:	Success:    SUCCEED
+ *		Failure:    FAIL
+ *
+ * Errors:
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, June 24, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_init_type(H5F_t *file, const H5D_t *dset, hid_t type_id, const H5T_t *type)
+{
+    htri_t relocatable;                 /* Flag whether the type is relocatable */
+    htri_t immutable;                   /* Flag whether the type is immutable */
+    herr_t ret_value = SUCCEED;         /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_init_type, FAIL)
+
+    /* Sanity checking */
+    assert(file);
+    assert(dset);
+    assert(type);
+
+    /* Check whether the datatype is relocatable */
+    if((relocatable=H5T_is_relocatable(type))<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't check datatype?")
+
+    /* Check whether the datatype is immutable */
+    if((immutable=H5T_is_immutable(type))<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't check datatype?")
+
+    /* Copy the datatype if it's a custom datatype or if it'll change when it's location is changed */
+    if(!immutable || relocatable) {
+        /* Copy datatype for dataset */
+        if((dset->shared->type = H5T_copy(type, H5T_COPY_ALL))==NULL)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCOPY, FAIL, "can't copy datatype")
+
+        /* Mark any datatypes as being on disk now */
+        if(H5T_vlen_mark(dset->shared->type, file, H5T_VLEN_DISK)<0)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid datatype location")
+
+        /* Get a datatype ID for the dataset's datatype */
+	if((dset->shared->type_id = H5I_register(H5I_DATATYPE, dset->shared->type))<0)
+	    HGOTO_ERROR(H5E_DATASET, H5E_CANTREGISTER, FAIL, "unable to register type")
+    } /* end if */
+    /* Not a custom datatype, just use it directly */
+    else {
+        if(H5I_inc_ref(type_id)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTINC, FAIL, "Can't increment datatype ID")
+
+        /* Use existing datatype */
+        dset->shared->type_id = type_id;
+        dset->shared->type = (H5T_t *)type; /* (Cast away const OK - QAK) */
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_init_type() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_update_entry_info
+ *
+ * Purpose:	Create and fill an H5G_entry_t object for insertion into
+ *              the group LOC.
+ *
+ *              This code was originally found at the end of H5D_create()
+ *              but was placed here for general use.
+ *
+ * Return:	Success:    SUCCEED
+ *		Failure:    FAIL
+ *
+ * Errors:
+ *
+ * Programmer:	Bill Wendling
+ *		Thursday, October 31, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_update_entry_info(H5F_t *file, hid_t dxpl_id, H5D_t *dset, H5P_genplist_t *plist)
+{
+    size_t              ohdr_size = H5D_MINHDR_SIZE;    /* Size of dataset's object header */
+    H5G_entry_t        *ent=NULL;    /* Dataset's group entry */
+    H5O_layout_t       *layout; /* Dataset's layout information */
+    H5T_t              *type;   /* Dataset's datatype */
+    H5S_t              *space;  /* Dataset's dataspace */
+    H5D_alloc_time_t alloc_time;/* Dataset's allocation time */
+    H5O_efl_t          *efl;    /* Dataset's external file list */
+
+    /* fill value variables */
+    H5D_fill_time_t	fill_time;
+    H5O_fill_t		*fill_prop;     /* Pointer to dataset's fill value information */
+    H5O_fill_new_t      fill = { NULL, 0, NULL, H5D_ALLOC_TIME_LATE, H5D_FILL_TIME_ALLOC, TRUE };
+    H5D_fill_value_t	fill_status;
+
+    struct H5O_t       *oh=NULL;        /* Pointer to dataset's object header */
+
+    /* return code */
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5D_update_entry_info, FAIL)
+
+    /* Sanity checking */
+    assert(file);
+    assert(dset);
+
+    /* Pick up former parameters */
+    ent=&dset->ent;
+    layout=&dset->shared->layout;
+    type=dset->shared->type;
+    space=dset->shared->space;
+    alloc_time=dset->shared->alloc_time;
+    efl=&dset->shared->efl;
+
+    /* Add the dataset's raw data size to the size of the header, if the raw data will be stored as compact */
+    if (layout->type == H5D_COMPACT)
+        ohdr_size += layout->u.compact.size;
+
+    /* Create (open for write access) an object header */
+    if (H5O_create(file, dxpl_id, ohdr_size, ent) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to create dataset object header")
+
+    /* Get a pointer to the object header itself */
+    if((oh=H5O_protect(ent, dxpl_id))==NULL)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to protect dataset object header")
+
+    /* Point at dataset's copy, to cache it for later */
+    fill_prop=&dset->shared->fill;
+    fill_time=dset->shared->fill_time;
+
+    /* Check if dataset has non-default creation property list */
+    if(dset->shared->dcpl_id!=H5P_DATASET_CREATE_DEFAULT) {
+        /*
+         * Retrieve properties of fill value and others. Copy them into new fill
+         * value struct.
+         */
+        if (H5P_get(plist, H5D_CRT_FILL_TIME_NAME, &fill_time) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve fill time")
+        dset->shared->fill_time=fill_time;    /* Cache this for later */
+
+        /* Get the fill value information from the property list */
+        if (H5P_get(plist, H5D_CRT_FILL_VALUE_NAME, fill_prop) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve fill value")
+    } /* end if */
+
+    if (H5P_is_fill_value_defined(fill_prop, &fill_status) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't tell if fill value defined")
+
+    /* Special case handling for variable-length types */
+    if(H5T_detect_class(type, H5T_VLEN)) {
+        /* If the default fill value is chosen for variable-length types, always write it */
+        if(fill_time==H5D_FILL_TIME_IFSET && fill_status==H5D_FILL_VALUE_DEFAULT) {
+            dset->shared->fill_time=fill_time=H5D_FILL_TIME_ALLOC;
+
+            /* Update dataset creation property */
+            assert(dset->shared->dcpl_id!=H5P_DATASET_CREATE_DEFAULT);
+            if (H5P_set(plist, H5D_CRT_FILL_TIME_NAME, &fill_time) < 0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set fill time")
+        } /* end if */
+
+        /* Don't allow never writing fill values with variable-length types */
+        if(fill_time==H5D_FILL_TIME_NEVER)
+            HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "Dataset doesn't support VL datatype when fill value is not defined")
+    } /* end if */
+
+    if (fill_status == H5D_FILL_VALUE_DEFAULT || fill_status == H5D_FILL_VALUE_USER_DEFINED) {
+        if (H5O_copy(H5O_FILL_ID, fill_prop, &fill) == NULL)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT,FAIL, "unable to copy fill value")
+
+        if (fill_prop->buf && fill_prop->size > 0 && H5O_fill_convert(&fill, type, dxpl_id) < 0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to convert fill value to dataset type")
+
+	fill.fill_defined = TRUE;
+    } else if (fill_status == H5D_FILL_VALUE_UNDEFINED) {
+	fill.size = -1;
+ 	fill.type = fill.buf = NULL;
+ 	fill.fill_defined = FALSE;
+    } else
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "unable to determine if fill value is defined")
+
+    fill.alloc_time = alloc_time;
+    fill.fill_time = fill_time;
+
+    if (fill.fill_defined == FALSE && fill_time == H5D_FILL_TIME_ALLOC)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT,FAIL, "unable to create dataset")
+
+    /* Write new fill value message */
+    if (H5O_append(file, dxpl_id, oh, H5O_FILL_NEW_ID, H5O_FLAG_CONSTANT, &fill) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update fill value header message")
+
+    /* If there is valid information for the old fill value struct, update it */
+    if (fill.buf) {
+        /* Clear any previous values */
+        if(H5O_reset(H5O_FILL_ID, fill_prop)<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "can't release fill info")
+
+        /* Copy new fill value information to old fill value struct */
+        if(H5O_copy(H5O_FILL_ID, &fill, fill_prop) == NULL)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT,FAIL,"unable to copy fill value")
+
+        /* Write old fill value */
+        if (fill_prop->buf && H5O_append(file, dxpl_id, oh, H5O_FILL_ID, H5O_FLAG_CONSTANT, fill_prop) < 0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update fill value header message")
+
+        /* Update dataset creation property */
+        assert(dset->shared->dcpl_id!=H5P_DATASET_CREATE_DEFAULT);
+        if (H5P_set(plist, H5D_CRT_FILL_VALUE_NAME, fill_prop) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set fill value")
+    } /* end if */
+
+    /* Update the type and space header messages */
+    if (H5O_append(file, dxpl_id, oh, H5O_DTYPE_ID, H5O_FLAG_CONSTANT | H5O_FLAG_SHARED, type) < 0 ||
+            H5S_append(file, dxpl_id, oh, space) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update type or space header messages")
+
+    /* Update the filters message, if this is a chunked dataset */
+    if(layout->type==H5D_CHUNKED) {
+        H5O_pline_t         pline;      /* Chunked data I/O pipeline info */
+
+        if (H5P_get(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve pipeline filter")
+
+        if (pline.nused > 0 && H5O_append(file, dxpl_id, oh, H5O_PLINE_ID, H5O_FLAG_CONSTANT, &pline) < 0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update filter header message")
+    } /* end if */
+
+    /*
+     * Allocate storage if space allocate time is early; otherwise delay
+     * allocation until later.
+     */
+    if (alloc_time == H5D_ALLOC_TIME_EARLY)
+        if (H5D_alloc_storage(file, dxpl_id, dset, H5D_ALLOC_CREATE, FALSE, FALSE) < 0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize storage")
+
+    /* Update external storage message */
+    if (efl->nused > 0) {
+        size_t heap_size = H5HL_ALIGN(1);
+        size_t u;
+
+        for (u = 0; u < efl->nused; ++u)
+            heap_size += H5HL_ALIGN(HDstrlen(efl->slot[u].name) + 1);
+
+        if (H5HL_create(file, dxpl_id, heap_size, &efl->heap_addr/*out*/) < 0 ||
+                H5HL_insert(file, dxpl_id, efl->heap_addr, 1, "") == (size_t)(-1))
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to create external file list name heap")
+
+        for (u = 0; u < efl->nused; ++u) {
+            size_t offset = H5HL_insert(file, dxpl_id, efl->heap_addr,
+                        HDstrlen(efl->slot[u].name) + 1, efl->slot[u].name);
+
+            assert(0 == efl->slot[u].name_offset);
+
+            if (offset == (size_t)(-1))
+                HGOTO_ERROR(H5E_EFL, H5E_CANTINIT, FAIL, "unable to insert URL into name heap")
+
+            efl->slot[u].name_offset = offset;
+        }
+
+        if (H5O_append(file, dxpl_id, oh, H5O_EFL_ID, H5O_FLAG_CONSTANT, efl) < 0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update external file list message")
+    }
+
+    /* Update layout message */
+    /* (Don't make layout message constant unless allocation time is early, since space may not be allocated) */
+    /* Note: this is relying on H5D_alloc_storage not calling H5O_modify during dataset creation */
+    if (H5D_COMPACT != layout->type && H5O_append(file, dxpl_id, oh, H5O_LAYOUT_ID, (alloc_time == H5D_ALLOC_TIME_EARLY ? H5O_FLAG_CONSTANT : 0), layout) < 0)
+         HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update layout")
+
+#ifdef H5O_ENABLE_BOGUS
+    /*
+     * Add a "bogus" message.
+     */
+    if (H5O_bogus_oh(file, dxpl_id, oh))<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to update 'bogus' message")
+#endif /* H5O_ENABLE_BOGUS */
+
+    /* Add a modification time message. */
+    if (H5O_touch_oh(file, oh, TRUE) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update modification time message")
+
+done:
+    /* Release fill value information */
+    if (H5O_reset(H5O_FILL_ID, &fill) <0)
+        HDONE_ERROR(H5E_DATASET, H5E_CANTRELEASE, FAIL, "unable to release fill-value info")
+
+    /* Release pointer to object header itself */
+    if(ent!=NULL && oh!=NULL)
+        if(H5O_unprotect(ent,oh, dxpl_id)<0)
+            HDONE_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to unprotect dataset object header")
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_update_entry_info() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_create
+ *
+ * Purpose:	Creates a new dataset with name NAME in file F and associates
+ *		with it a datatype TYPE for each element as stored in the
+ *		file, dimensionality information or dataspace SPACE, and
+ *		other miscellaneous properties CREATE_PARMS.  All arguments
+ *		are deep-copied before being associated with the new dataset,
+ *		so the caller is free to subsequently modify them without
+ *		affecting the dataset.
+ *
+ * Return:	Success:	Pointer to a new dataset
+ *
+ *		Failure:	NULL
+ *
+ * Errors:
+ *		DATASET	  CANTINIT	Can't update dataset header.
+ *		DATASET	  CANTINIT	Problem with the dataset name.
+ *		DATASET	  CANTINIT	Fail in file space allocation for
+ *					chunks
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December  4, 1997
+ *
+ * Modifications:
+ *	Robb Matzke, 9 Jun 1998
+ *	The data space message is no longer cached in the dataset struct.
+ *
+ * 	Robb Matzke, 27 Jul 1998
+ *	Added the MTIME message to the dataset object header.
+ *
+ * 	Robb Matzke, 1999-10-14
+ *	The names for the external file list are entered into the heap hear
+ *	instead of when the efl message is encoded, preventing a possible
+ *	infinite recursion situation.
+ *
+ *      Raymond Lu
+ *      Tuesday, October 2, 2001
+ *      Changed the way to retrieve and set property for generic property
+ *      list.
+ *
+ *	Raymond Lu, 26 Feb 2002
+ *	A new fill value message is added.  Two properties, space allocation
+ *	time and fill value writing time, govern space allocation and fill
+ *      value writing.
+ *
+ *      Bill Wendling, 1. November 2002
+ *      Removed the cache updating mechanism. This was done so that it
+ *      can be called separately from the H5D_create function. There were
+ *      two of these mechanisms: one to create and insert into the parent
+ *      group the H5G_entry_t object and the other to update based upon
+ *      whether we're working with an external file or not. Between the
+ *      two, there is a conditional call to allocate space which isn't
+ *      part of updating the cache.
+ *
+ *      Nat Furrer and James Laird
+ *      June 7, 2004
+ *      Added checked_filters flag
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5D_t *
+H5D_create(H5G_entry_t *loc, const char *name, hid_t type_id, const H5S_t *space,
+    hid_t dcpl_id, hid_t dxpl_id)
+{
+    const H5T_t         *type;                  /* Datatype for dataset */
+    H5D_t		*new_dset = NULL;
+    int		        i, ndims;
+    unsigned		u;
+    H5F_t		*file=NULL;
+    unsigned            chunk_ndims = 0;        /* Dimensionality of chunk */
+    H5P_genplist_t 	*dc_plist=NULL;         /* New Property list */
+    hbool_t             has_vl_type=FALSE;      /* Flag to indicate a VL-type for dataset */
+    hbool_t             chunk_init=FALSE;       /* Flag to indicate that chunk information was initialized */
+    H5D_t		*ret_value;             /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_create, NULL)
+
+    /* check args */
+    assert (loc);
+    assert (name && *name);
+    assert (H5I_DATATYPE==H5I_get_type(type_id));
+    assert (space);
+    assert (H5I_GENPROP_LST==H5I_get_type(dcpl_id));
+    assert (H5I_GENPROP_LST==H5I_get_type(dxpl_id));
+
+    /* Get the dataset's datatype */
+    if (NULL == (type = H5I_object(type_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a datatype")
+
+    /* Check if the datatype is "sensible" for use in a dataset */
+    if(H5T_is_sensible(type)!=TRUE)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "datatype is not sensible")
+
+    /* Check if the datatype is/contains a VL-type */
+    if(H5T_detect_class(type, H5T_VLEN))
+        has_vl_type=TRUE;
+
+    /* Check if the dataspace has an extent set (or is NULL) */
+    if( !(H5S_has_extent(space)) )
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "dataspace extent has not been set.")
+
+    /* Initialize the dataset object */
+    if (NULL==(new_dset = H5FL_CALLOC(H5D_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    H5G_ent_reset(&(new_dset->ent));
+
+    /* Initialize the shared dataset space */
+    if(NULL == (new_dset->shared = H5D_new(dcpl_id,TRUE,has_vl_type)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    /* What file is the dataset being added to? */
+    if(NULL==(file=H5G_insertion_file(loc, name, dxpl_id)))
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to locate insertion point")
+
+    /* Copy datatype for dataset */
+    if(H5D_init_type(file, new_dset, type_id, type)<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCOPY, NULL, "can't copy datatype")
+
+    /* Check if the filters in the DCPL can be applied to this dataset */
+    if(H5Z_can_apply(new_dset->shared->dcpl_id,new_dset->shared->type_id)<0)
+        HGOTO_ERROR(H5E_ARGS, H5E_CANTINIT, NULL, "I/O filters can't operate on this dataset")
+
+    /* Set the dataset's checked_filters flag to enable writing */
+    new_dset->shared->checked_filters = TRUE;
+
+    /* Copy dataspace for dataset */
+    if((new_dset->shared->space = H5S_copy(space, FALSE))==NULL)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOPY, NULL, "can't copy dataspace")
+
+    /* Set the dataset's dataspace to 'all' selection */
+    if(H5S_select_all(new_dset->shared->space,1)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTSET, NULL, "unable to set all selection")
+
+    /* Make the "set local" filter callbacks for this dataset */
+    if(H5Z_set_local(new_dset->shared->dcpl_id,new_dset->shared->type_id)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to set local filter parameters")
+
+    /* Check if the dataset has a non-default DCPL & get important values, if so */
+    if(new_dset->shared->dcpl_id!=H5P_DATASET_CREATE_DEFAULT) {
+        H5D_layout_t    dcpl_layout;    /* Dataset's layout information */
+        H5O_pline_t     dcpl_pline;     /* Dataset's I/O pipeline information */
+        H5D_alloc_time_t alloc_time;    /* Dataset's allocation time */
+
+        /* Get new dataset's property list object */
+        if (NULL == (dc_plist = H5I_object(new_dset->shared->dcpl_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "can't get dataset creation property list")
+
+        if(H5P_get(dc_plist, H5D_CRT_DATA_PIPELINE_NAME, &dcpl_pline) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't retrieve pipeline filter")
+        if(H5P_get(dc_plist, H5D_CRT_LAYOUT_NAME, &dcpl_layout) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't retrieve layout")
+        if(dcpl_pline.nused > 0 && H5D_CHUNKED != dcpl_layout)
+            HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, NULL, "filters can only be used with chunked layout")
+        if(H5P_get(dc_plist, H5D_CRT_ALLOC_TIME_NAME, &alloc_time) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't retrieve space allocation time")
+
+        /* Check if the alloc_time is the default and error out */
+        if(alloc_time==H5D_ALLOC_TIME_DEFAULT)
+            HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, NULL, "invalid space allocation state")
+
+        /* Don't allow compact datasets to allocate space later */
+        if(dcpl_layout==H5D_COMPACT && alloc_time!=H5D_ALLOC_TIME_EARLY)
+            HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, NULL, "compact dataset doesn't support late space allocation")
+
+        /* Set the alloc_time for the dataset, in case the default was used */
+        new_dset->shared->alloc_time=alloc_time;
+
+        /* If MPI VFD is used, no filter support yet. */
+        if(IS_H5FD_MPI(file) && dcpl_pline.nused > 0)
+            HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, NULL, "Parallel I/O does not support filters yet")
+
+        /* Chunked datasets are non-default, so retrieve their info here */
+        if(H5P_get(dc_plist, H5D_CRT_CHUNK_DIM_NAME, &chunk_ndims) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't retrieve chunk dimensions")
+
+        /* Get the dataset's external file list information */
+        if(H5P_get(dc_plist, H5D_CRT_EXT_FILE_LIST_NAME, &new_dset->shared->efl) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't retrieve external file list")
+
+        /* Set the dataset's data storage method */
+        new_dset->shared->layout.type=dcpl_layout;
+    } /* end if */
+
+    /* Check if this dataset is going into a parallel file and set space allocation time */
+    if(IS_H5FD_MPI(file))
+        new_dset->shared->alloc_time=H5D_ALLOC_TIME_EARLY;
+
+    /* Set up layout information */
+    new_dset->shared->layout.unused.ndims = H5S_GET_EXTENT_NDIMS(new_dset->shared->space) + 1;
+    assert((unsigned)(new_dset->shared->layout.unused.ndims) <= NELMTS(new_dset->shared->layout.unused.dim));
+    if (H5S_get_simple_extent_dims(new_dset->shared->space, new_dset->shared->layout.unused.dim, NULL)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to initialize storage info")
+    new_dset->shared->layout.unused.dim[new_dset->shared->layout.unused.ndims-1] = H5T_get_size(new_dset->shared->type);
+
+    switch (new_dset->shared->layout.type) {
+        case H5D_CONTIGUOUS:
+            {
+                hssize_t tmp_size;                      /* Temporary holder for raw data size */
+                hsize_t	max_dim[H5O_LAYOUT_NDIMS];      /* Maximum size of data in elements */
+
+                /*
+                 * The maximum size of the dataset cannot exceed the storage size.
+                 * Also, only the slowest varying dimension of a simple data space
+                 * can be extendible (currently only for external data storage).
+                 */
+                new_dset->shared->layout.u.contig.addr = HADDR_UNDEF;        /* Initialize to no address */
+
+                if ((ndims=H5S_get_simple_extent_dims(new_dset->shared->space, NULL, max_dim))<0)
+                    HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to initialize contiguous storage")
+                for (i=1; i<ndims; i++)
+                    if (max_dim[i]>new_dset->shared->layout.unused.dim[i])
+                        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL, "only the first dimension can be extendible")
+                if (new_dset->shared->efl.nused>0) {
+                    hsize_t max_points = H5S_get_npoints_max (new_dset->shared->space);
+                    hsize_t max_storage = H5O_efl_total_size (&new_dset->shared->efl);
+
+                    if (H5S_UNLIMITED==max_points) {
+                        if (H5O_EFL_UNLIMITED!=max_storage)
+                            HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL, "unlimited data space but finite storage")
+                    } else if (max_points * H5T_get_size (type) < max_points) {
+                        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL, "data space * type size overflowed")
+                    } else if (max_points * H5T_get_size (type) > max_storage) {
+                        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL, "data space size exceeds external storage size")
+                    }
+
+                    /* Set the I/O functions for this layout type */
+                    new_dset->shared->io_ops.readvv=H5D_efl_readvv;
+                    new_dset->shared->io_ops.writevv=H5D_efl_writevv;
+                } /* end if */
+                else {
+                    if (ndims>0 && max_dim[0]>new_dset->shared->layout.unused.dim[0])
+                        HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, NULL, "extendible contiguous non-external dataset")
+
+                    /* Set the I/O functions for this layout type */
+                    new_dset->shared->io_ops.readvv=H5D_contig_readvv;
+                    new_dset->shared->io_ops.writevv=H5D_contig_writevv;
+                } /* end else */
+
+                /* Compute the total size of a chunk */
+                tmp_size = H5S_GET_EXTENT_NPOINTS(new_dset->shared->space) *
+                                        H5T_get_size(new_dset->shared->type);
+                H5_ASSIGN_OVERFLOW(new_dset->shared->layout.u.contig.size,tmp_size,hssize_t,hsize_t);
+
+                /* Get the sieve buffer size for this dataset */
+                new_dset->shared->cache.contig.sieve_buf_size = H5F_SIEVE_BUF_SIZE(loc->file);
+            } /* end case */
+            break;
+
+        case H5D_CHUNKED:
+            {
+                hsize_t	max_dim[H5O_LAYOUT_NDIMS];      /* Maximum size of data in elements */
+
+                /* Set up layout information */
+                if((ndims=H5S_GET_EXTENT_NDIMS(new_dset->shared->space))<0)
+                    HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, NULL, "unable to get rank")
+                new_dset->shared->layout.u.chunk.ndims = (unsigned)ndims + 1;
+                assert((unsigned)(new_dset->shared->layout.u.chunk.ndims) <= NELMTS(new_dset->shared->layout.u.chunk.dim));
+
+                new_dset->shared->layout.u.chunk.addr = HADDR_UNDEF;        /* Initialize to no address */
+
+                /*
+                 * Chunked storage allows any type of data space extension, so we
+                 * don't even bother checking.
+                 */
+                if(chunk_ndims != (unsigned)ndims)
+                    HGOTO_ERROR(H5E_DATASET, H5E_BADVALUE, NULL, "dimensionality of chunks doesn't match the data space")
+                if (new_dset->shared->efl.nused>0)
+                    HGOTO_ERROR (H5E_DATASET, H5E_BADVALUE, NULL, "external storage not supported with chunked layout")
+
+                /*
+                 * The chunk size of a dimension with a fixed size cannot exceed
+                 * the maximum dimension size
+                 */
+                if(H5P_get(dc_plist, H5D_CRT_CHUNK_SIZE_NAME, new_dset->shared->layout.u.chunk.dim) < 0)
+                    HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't retrieve chunk size")
+                new_dset->shared->layout.u.chunk.dim[new_dset->shared->layout.u.chunk.ndims-1] = H5T_get_size(new_dset->shared->type);
+
+                if (H5S_get_simple_extent_dims(new_dset->shared->space, NULL, max_dim)<0)
+                    HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to query maximum dimensions")
+                for (u=0; u<new_dset->shared->layout.u.chunk.ndims-1; u++)
+                    if(max_dim[u] != H5S_UNLIMITED && max_dim[u] < new_dset->shared->layout.u.chunk.dim[u])
+                        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL, "chunk size must be <= maximum dimension size for fixed-sized dimensions")
+
+                /* Compute the total size of a chunk */
+                for (u=1, new_dset->shared->layout.u.chunk.size=new_dset->shared->layout.u.chunk.dim[0]; u<new_dset->shared->layout.u.chunk.ndims; u++)
+                    new_dset->shared->layout.u.chunk.size *= new_dset->shared->layout.u.chunk.dim[u];
+
+                /* Set the I/O functions for this layout type */
+                new_dset->shared->io_ops.readvv=H5D_istore_readvv;
+                new_dset->shared->io_ops.writevv=H5D_istore_writevv;
+
+                /* Initialize the chunk cache for the dataset */
+                if(H5D_istore_init(file,new_dset)<0)
+                    HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL, "can't initialize chunk cache")
+
+                /* Indicate that the chunk information was initialized */
+                chunk_init=TRUE;
+            } /* end case */
+            break;
+
+        case H5D_COMPACT:
+            {
+                hssize_t tmp_size;      /* Temporary holder for raw data size */
+                hsize_t	comp_data_size;
+
+                /*
+                 * Compact dataset is stored in dataset object header message of
+                 * layout.
+                 */
+                tmp_size = H5S_GET_EXTENT_NPOINTS(space) *
+                                        H5T_get_size(new_dset->shared->type);
+                H5_ASSIGN_OVERFLOW(new_dset->shared->layout.u.compact.size,tmp_size,hssize_t,size_t);
+
+                /* Verify data size is smaller than maximum header message size
+                 * (64KB) minus other layout message fields.
+                 */
+                comp_data_size=H5O_MAX_SIZE-H5O_layout_meta_size(file, &(new_dset->shared->layout));
+                if(new_dset->shared->layout.u.compact.size > comp_data_size)
+                    HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "compact dataset size is bigger than header message maximum size")
+
+                /* Set the I/O functions for this layout type */
+                new_dset->shared->io_ops.readvv=H5D_compact_readvv;
+                new_dset->shared->io_ops.writevv=H5D_compact_writevv;
+            } /* end case */
+            break;
+
+        default:
+            HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, NULL, "not implemented yet")
+    } /* end switch */ /*lint !e788 All appropriate cases are covered */
+
+    /* Update the dataset's entry info. */
+    if (H5D_update_entry_info(file, dxpl_id, new_dset, dc_plist) != SUCCEED)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "can't update the metadata cache")
+
+    /* Get the dataset's DCPL cache info */
+    if (H5D_get_dcpl_cache(new_dset->shared->dcpl_id,&new_dset->shared->dcpl_cache)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, NULL, "can't fill DCPL cache")
+
+    /*
+     * Give the dataset a name.  That is, create and add a new object to the
+     * group this dataset is being initially created in.
+     */
+    if (H5G_insert(loc, name, &new_dset->ent, dxpl_id) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to name dataset")
+
+    /* Add the dataset to the list of opened objects in the file */
+    if(H5FO_top_incr(new_dset->ent.file, new_dset->ent.header)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINC, NULL, "can't incr object ref. count")
+    if(H5FO_insert(new_dset->ent.file,new_dset->ent.header,new_dset->shared)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, NULL, "can't insert dataset into list of open objects")
+
+    new_dset->shared->fo_count=1;
+
+    /* Success */
+    ret_value = new_dset;
+
+done:
+    if (!ret_value && new_dset && new_dset->shared) {
+        if( new_dset->shared) {
+            if(new_dset->shared->layout.type==H5D_CHUNKED && chunk_init) {
+                if(H5D_istore_dest(new_dset,H5AC_dxpl_id)<0)
+                    HDONE_ERROR(H5E_DATASET, H5E_CANTRELEASE, NULL, "unable to destroy chunk cache")
+            } /* end if */
+            if (new_dset->shared->space) {
+                if(H5S_close(new_dset->shared->space)<0)
+                    HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, NULL, "unable to release dataspace")
+            } /* end if */
+            if (new_dset->shared->type) {
+                if(H5I_dec_ref(new_dset->shared->type_id)<0)
+                    HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, NULL, "unable to release datatype")
+            } /* end if */
+            if (H5F_addr_defined(new_dset->ent.header)) {
+                if(H5O_close(&(new_dset->ent))<0)
+                    HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, NULL, "unable to release object header")
+                if(file) {
+                    if(H5O_delete(file, dxpl_id,new_dset->ent.header)<0)
+                        HDONE_ERROR(H5E_DATASET, H5E_CANTDELETE, NULL, "unable to delete object header")
+                } /* end if */
+            } /* end if */
+            if(new_dset->shared->dcpl_id!=0) {
+                if(H5I_dec_ref(new_dset->shared->dcpl_id)<0)
+                    HDONE_ERROR(H5E_DATASET, H5E_CANTDEC, NULL, "unable to decrement ref count on property list")
+            } /* end if */
+            H5FL_FREE(H5D_shared_t,new_dset->shared);
+        } /* end if */
+        new_dset->ent.file = NULL;
+        H5FL_FREE(H5D_t, new_dset);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_create() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_isa
+ *
+ * Purpose:	Determines if an object has the requisite messages for being
+ *		a dataset.
+ *
+ * Return:	Success:	TRUE if the required dataset messages are
+ *				present; FALSE otherwise.
+ *
+ *		Failure:	FAIL if the existence of certain messages
+ *				cannot be determined.
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November  2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5D_isa(H5G_entry_t *ent, hid_t dxpl_id)
+{
+    htri_t	exists;
+    htri_t	ret_value=TRUE;         /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_isa, FAIL)
+
+    assert(ent);
+
+    /* Data type */
+    if ((exists=H5O_exists(ent, H5O_DTYPE_ID, 0, dxpl_id))<0) {
+	HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to read object header")
+    } else if (!exists) {
+	HGOTO_DONE(FALSE)
+    }
+
+    /* Layout */
+    if ((exists=H5O_exists(ent, H5O_LAYOUT_ID, 0, dxpl_id))<0) {
+	HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to read object header")
+    } else if (!exists) {
+	HGOTO_DONE(FALSE)
+    }
+
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*
+ *-------------------------------------------------------------------------
+ * Function:	H5D_open
+ *
+ * Purpose:	Checks if dataset is already open, or opens a dataset for
+ *              access.
+ *
+ * Return:	Success:	Dataset ID
+ *		Failure:	FAIL
+ *
+ * Errors:
+ *
+ * Programmer:	Quincey Koziol
+ *		Friday, December 20, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5D_t*
+H5D_open(const H5G_entry_t *ent, hid_t dxpl_id)
+{
+    H5D_shared_t    *shared_fo=NULL;
+    H5D_t           *dataset=NULL;
+    H5D_t           *ret_value;              /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_open, NULL)
+
+    /* check args */
+    assert (ent);
+
+    /* Check if dataset was already open */
+    if((shared_fo=H5FO_opened(ent->file,ent->header))==NULL) {
+        /* Clear any errors from H5FO_opened() */
+        H5E_clear();
+
+        /* Open the dataset object */
+        if ((dataset=H5D_open_oid(ent, dxpl_id)) ==NULL)
+            HGOTO_ERROR(H5E_DATASET, H5E_NOTFOUND, NULL, "not found")
+
+        /* Add the dataset to the list of opened objects in the file */
+        if(H5FO_insert(dataset->ent.file,dataset->ent.header,dataset->shared)<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINSERT, NULL, "can't insert dataset into list of open objects")
+
+        /* Increment object count for the object in the top file */
+        if(H5FO_top_incr(dataset->ent.file, dataset->ent.header) < 0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINC, NULL, "can't increment object count")
+
+        dataset->shared->fo_count = 1;
+    } /* end if */
+    else {
+        if(NULL == (dataset = H5FL_CALLOC(H5D_t)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate space for dataset")
+
+        /* Shallow copy (take ownership) of the group entry object */
+        if(H5G_ent_copy(&(dataset->ent),ent,H5G_COPY_SHALLOW)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTCOPY, NULL, "can't copy group entry")
+
+        dataset->shared=shared_fo;
+
+        shared_fo->fo_count++;
+
+        /* Check if the object has been opened through the top file yet */
+        if(H5FO_top_count(dataset->ent.file, dataset->ent.header) == 0) {
+            /* Open the object through this top file */
+            if(H5O_open(&(dataset->ent)) < 0)
+                HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, NULL, "unable to open object header")
+        } /* end if */
+
+        /* Increment object count for the object in the top file */
+        if(H5FO_top_incr(dataset->ent.file, dataset->ent.header) < 0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINC, NULL, "can't increment object count")
+    } /* end else */
+
+    ret_value = dataset;
+
+done:
+    if(ret_value==NULL) {
+        if(dataset) {
+            if(shared_fo==NULL)   /* Need to free shared fo */
+                H5FL_FREE(H5D_shared_t, dataset->shared);
+            H5FL_FREE(H5D_t, dataset);
+        }
+        if(shared_fo)
+            shared_fo->fo_count--;
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_open_oid
+ *
+ * Purpose:	Opens a dataset for access.
+ *
+ * Return:	Dataset pointer on success, NULL on failure
+ *
+ * Errors:
+ *
+ * Programmer:	Quincey Koziol
+ *		Monday, October 12, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to set property for generic property list.
+ *
+ *		Raymond Lu
+ *		Feb 26, 2002
+ *		A new fill value message and two new properties are added.
+ *
+ *              Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *              Added a deep copy of the symbol table entry
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5D_t *
+H5D_open_oid(const H5G_entry_t *ent, hid_t dxpl_id)
+{
+    H5D_t 	*dataset = NULL;	/*new dataset struct 		*/
+    H5O_fill_new_t  fill = {NULL, 0, NULL, H5D_ALLOC_TIME_LATE, H5D_CRT_FILL_TIME_DEF, TRUE};
+    unsigned    alloc_time_state;       /* Allocation time state */
+    H5O_fill_t     *fill_prop;          /* Pointer to dataset's fill value area */
+    H5O_pline_t  pline;                 /* I/O pipeline information */
+    H5P_genplist_t *plist;              /* Property list */
+    H5D_t 	*ret_value = NULL;	/*return value			*/
+
+    FUNC_ENTER_NOAPI(H5D_open_oid, NULL)
+
+    /* check args */
+    assert (ent);
+
+    /* Allocate the dataset structure */
+    if(NULL==(dataset=H5FL_CALLOC(H5D_t)))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    /* (Set the 'vl_type' parameter to FALSE since it doesn't matter from here) */
+    if(NULL==(dataset->shared = H5D_new(H5P_DATASET_CREATE_DEFAULT,FALSE,FALSE)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    /* Shallow copy (take ownership) of the group entry object */
+    if(H5G_ent_copy(&(dataset->ent),ent,H5G_COPY_SHALLOW)<0)
+        HGOTO_ERROR (H5E_DATASET, H5E_CANTCOPY, NULL, "can't copy group entry")
+
+    /* Find the dataset object */
+    if (H5O_open(&(dataset->ent)) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTOPENOBJ, NULL, "unable to open")
+
+    /* Get the type and space */
+    if (NULL==(dataset->shared->type=H5O_read(&(dataset->ent), H5O_DTYPE_ID, 0, NULL, dxpl_id)))
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to load type info from dataset header")
+    /* Get a datatype ID for the dataset's datatype */
+    if((dataset->shared->type_id = H5I_register(H5I_DATATYPE, dataset->shared->type))<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTREGISTER, NULL, "unable to register type")
+
+    if (NULL==(dataset->shared->space=H5S_read(&(dataset->ent),dxpl_id)))
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to load space info from dataset header")
+
+    /* Get dataset creation property list object */
+    if (NULL == (plist = H5I_object(dataset->shared->dcpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "can't get dataset creation property list")
+
+    /* Get the optional filters message */
+    if(NULL == H5O_read(&(dataset->ent), H5O_PLINE_ID, 0, &pline, dxpl_id)) {
+        H5E_clear();
+        HDmemset(&pline, 0, sizeof(pline));
+    }
+    if(H5P_set(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't set pipeline")
+
+    /*
+     * Get the raw data layout info.  It's actually stored in two locations:
+     * the storage message of the dataset (dataset->storage) and certain
+     * values are copied to the dataset create plist so the user can query
+     * them.
+     */
+    if (NULL==H5O_read(&(dataset->ent), H5O_LAYOUT_ID, 0, &(dataset->shared->layout), dxpl_id))
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to read data layout message")
+    if(H5P_set(plist, H5D_CRT_LAYOUT_NAME, &dataset->shared->layout.type) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't set layout")
+    switch (dataset->shared->layout.type) {
+        case H5D_CONTIGUOUS:
+            /* Compute the size of the contiguous storage for versions of the
+             * layout message less than version 3 because versions 1 & 2 would
+             * truncate the dimension sizes to 32-bits of information. - QAK 5/26/04
+             */
+            if(dataset->shared->layout.version<3) {
+                hssize_t tmp_size;                      /* Temporary holder for raw data size */
+
+                tmp_size = H5S_GET_EXTENT_NPOINTS(dataset->shared->space) *
+                                        H5T_get_size(dataset->shared->type);
+                H5_ASSIGN_OVERFLOW(dataset->shared->layout.u.contig.size,tmp_size,hssize_t,hsize_t);
+            } /* end if */
+
+            /* Set the I/O functions for this layout type */
+            dataset->shared->io_ops.readvv=H5D_contig_readvv;
+            dataset->shared->io_ops.writevv=H5D_contig_writevv;
+
+            /* Get the sieve buffer size for this dataset */
+            dataset->shared->cache.contig.sieve_buf_size = H5F_SIEVE_BUF_SIZE(dataset->ent.file);
+            break;
+
+        case H5D_CHUNKED:
+            /*
+             * Chunked storage.  The creation plist's dimension is one less than
+             * the chunk dimension because the chunk includes a dimension for the
+             * individual bytes of the data type.
+             */
+            {
+                unsigned     chunk_ndims;           /* Dimensionality of chunk */
+
+                chunk_ndims  = dataset->shared->layout.u.chunk.ndims - 1;
+
+                if(H5P_set(plist, H5D_CRT_CHUNK_DIM_NAME, &chunk_ndims) < 0)
+                     HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't set chunk dimensions")
+                if(H5P_set(plist, H5D_CRT_CHUNK_SIZE_NAME, dataset->shared->layout.u.chunk.dim) < 0)
+                     HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't set chunk size")
+
+                /* Initialize the chunk cache for the dataset */
+                if(H5D_istore_init(dataset->ent.file,dataset)<0)
+                    HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, NULL, "can't initialize chunk cache")
+            }
+
+            /* Set the I/O functions for this layout type */
+            dataset->shared->io_ops.readvv=H5D_istore_readvv;
+            dataset->shared->io_ops.writevv=H5D_istore_writevv;
+            break;
+
+        case H5D_COMPACT:
+            /* Set the I/O functions for this layout type */
+            dataset->shared->io_ops.readvv=H5D_compact_readvv;
+            dataset->shared->io_ops.writevv=H5D_compact_writevv;
+            break;
+
+        default:
+            HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, NULL, "not implemented yet")
+    } /* end switch */ /*lint !e788 All appropriate cases are covered */
+
+    /* Point at dataset's copy, to cache it for later */
+    fill_prop=&dataset->shared->fill;
+
+    /* Retrieve & release the previous fill-value settings */
+    if(H5P_get(plist, H5D_CRT_FILL_VALUE_NAME, fill_prop) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't get fill value")
+    if(H5O_reset(H5O_FILL_ID, fill_prop)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, NULL, "can't release fill info")
+
+    /* Get the new fill value message */
+    if(NULL == H5O_read(&(dataset->ent), H5O_FILL_NEW_ID, 0, &fill, dxpl_id)) {
+        H5E_clear();
+        HDmemset(&fill, 0, sizeof(fill));
+
+        /* Set the space allocation time appropriately, based on the type of dataset storage */
+        switch (dataset->shared->layout.type) {
+            case H5D_COMPACT:
+                fill.alloc_time=H5D_ALLOC_TIME_EARLY;
+                break;
+
+            case H5D_CONTIGUOUS:
+                fill.alloc_time=H5D_ALLOC_TIME_LATE;
+                break;
+
+            case H5D_CHUNKED:
+                fill.alloc_time=H5D_ALLOC_TIME_INCR;
+                break;
+
+            default:
+                HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, NULL, "not implemented yet")
+        } /* end switch */ /*lint !e788 All appropriate cases are covered */
+
+        /* Set the default fill time */
+        fill.fill_time=H5D_CRT_FILL_TIME_DEF;
+    } /* end if */
+    if(fill.fill_defined) {
+        if(NULL==H5O_copy(H5O_FILL_ID, &fill, fill_prop))
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "can't copy fill value")
+    } else {
+	/* For compatibility with v1.4.  Retrieve the old fill value message.
+ 	 * If size is 0, make it -1 for undefined. */
+        if(NULL == H5O_read(&(dataset->ent), H5O_FILL_ID, 0, fill_prop, dxpl_id)) {
+            H5E_clear();
+            HDmemset(fill_prop, 0, sizeof(H5O_fill_t));
+        }
+        if(fill_prop->size == 0) {
+	    fill_prop->type = fill_prop->buf = NULL;
+	    fill_prop->size = (size_t)-1;
+	}
+    } /* end else */
+    alloc_time_state=0;
+    if( (dataset->shared->layout.type==H5D_COMPACT && fill.alloc_time==H5D_ALLOC_TIME_EARLY)
+            || (dataset->shared->layout.type==H5D_CONTIGUOUS && fill.alloc_time==H5D_ALLOC_TIME_LATE)
+            || (dataset->shared->layout.type==H5D_CHUNKED && fill.alloc_time==H5D_ALLOC_TIME_INCR))
+        alloc_time_state=1;
+
+    /* Set revised fill value properties */
+    if(H5P_set(plist, H5D_CRT_FILL_VALUE_NAME, fill_prop) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't set fill value")
+    dataset->shared->alloc_time=fill.alloc_time;        /* Cache this for later */
+    if(H5P_set(plist, H5D_CRT_ALLOC_TIME_NAME, &fill.alloc_time) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't set allocation time")
+    if(H5P_set(plist, H5D_CRT_ALLOC_TIME_STATE_NAME, &alloc_time_state) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't set allocation time state")
+    dataset->shared->fill_time=fill.fill_time;          /* Cache this for later */
+    if(H5P_set(plist, H5D_CRT_FILL_TIME_NAME, &fill.fill_time) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't set fill time")
+
+    /* Get the external file list message, which might not exist.  Space is
+     * also undefined when space allocate time is H5D_ALLOC_TIME_LATE. */
+    if((dataset->shared->layout.type==H5D_CONTIGUOUS && !H5F_addr_defined(dataset->shared->layout.u.contig.addr))
+            || (dataset->shared->layout.type==H5D_CHUNKED && !H5F_addr_defined(dataset->shared->layout.u.chunk.addr))) {
+        HDmemset(&dataset->shared->efl,0,sizeof(H5O_efl_t));
+        if(NULL != H5O_read(&(dataset->ent), H5O_EFL_ID, 0, &dataset->shared->efl, dxpl_id)) {
+            if(H5P_set(plist, H5D_CRT_EXT_FILE_LIST_NAME, &dataset->shared->efl) < 0)
+            	HGOTO_ERROR(H5E_DATASET, H5E_CANTSET, NULL, "can't set external file list")
+
+            /* Override the I/O functions for this layout type */
+            dataset->shared->io_ops.readvv=H5D_efl_readvv;
+            dataset->shared->io_ops.writevv=H5D_efl_writevv;
+        } /* end if */
+    } /* end if */
+
+    /*
+     * Make sure all storage is properly initialized.
+     * This is important only for parallel I/O where the space must
+     * be fully allocated before I/O can happen.
+     */
+    if ((H5F_get_intent(dataset->ent.file) & H5F_ACC_RDWR)
+            && ((dataset->shared->layout.type==H5D_CONTIGUOUS && !H5F_addr_defined(dataset->shared->layout.u.contig.addr))
+                || (dataset->shared->layout.type==H5D_CHUNKED && !H5F_addr_defined(dataset->shared->layout.u.chunk.addr)))
+            && IS_H5FD_MPI(dataset->ent.file)) {
+        if (H5D_alloc_storage(dataset->ent.file, dxpl_id, dataset,H5D_ALLOC_OPEN, TRUE, FALSE)<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, NULL, "unable to initialize file storage")
+    }
+
+    /* Get the dataset's DCPL cache info */
+    if (H5D_get_dcpl_cache(dataset->shared->dcpl_id,&dataset->shared->dcpl_cache)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, NULL, "can't fill DCPL cache")
+
+    /* Success */
+    ret_value = dataset;
+
+done:
+    /* Release fill value information */
+    if (H5O_reset(H5O_FILL_ID, &fill) <0)
+        HDONE_ERROR(H5E_DATASET, H5E_CANTRELEASE, NULL, "unable to release fill-value info")
+
+    if (ret_value==NULL && dataset) {
+        if (H5F_addr_defined(dataset->ent.header)) {
+            if(H5O_close(&(dataset->ent))<0)
+                HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, NULL, "unable to release object header")
+        } /* end if */
+        if (dataset->shared->space) {
+            if(H5S_close(dataset->shared->space)<0)
+                HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, NULL, "unable to release dataspace")
+        } /* end if */
+        if (dataset->shared->type) {
+            if(H5I_dec_ref(dataset->shared->type_id)<0)
+                HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, NULL, "unable to release datatype")
+        } /* end if */
+        dataset->ent.file = NULL;
+        H5FL_FREE(H5D_t,dataset);
+    } /* end if */
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_open_oid() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_close
+ *
+ * Purpose:	Insures that all data has been saved to the file, closes the
+ *		dataset object header, and frees all resources used by the
+ *		descriptor.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Errors:
+ *		DATASET	  CANTINIT	Couldn't free the type or space,
+ *					but the dataset was freed anyway.
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December  4, 1997
+ *
+ * Modifications:
+ *	Robb Matzke, 9 Jun 1998
+ *	The data space message is no longer cached in the dataset struct.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_close(H5D_t *dataset)
+{
+    unsigned                free_failed=FALSE;
+    herr_t                  ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_close, FAIL)
+
+    /* check args */
+    assert(dataset && dataset->ent.file && dataset->shared);
+    assert(dataset->shared->fo_count >0);
+
+    /* Dump debugging info */
+#ifdef H5D_ISTORE_DEBUG
+    H5D_istore_stats(dataset, FALSE);
+#endif /* H5F_ISTORE_DEBUG */
+
+    dataset->shared->fo_count--;
+    if(dataset->shared->fo_count ==0)
+    {
+        /* Free the data sieve buffer, if it's been allocated */
+        if(dataset->shared->cache.contig.sieve_buf) {
+            assert(dataset->shared->layout.type!=H5D_COMPACT);      /* We should never have a sieve buffer for compact storage */
+
+            /* Flush the raw data buffer, if its dirty */
+            if (dataset->shared->cache.contig.sieve_dirty) {
+                /* Write dirty data sieve buffer to file */
+                if (H5F_block_write(dataset->ent.file, H5FD_MEM_DRAW, dataset->shared->cache.contig.sieve_loc,
+                        dataset->shared->cache.contig.sieve_size, H5AC_dxpl_id, dataset->shared->cache.contig.sieve_buf) < 0)
+                    HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "block write failed")
+
+                /* Reset sieve buffer dirty flag */
+                dataset->shared->cache.contig.sieve_dirty=0;
+            } /* end if */
+
+            dataset->shared->cache.contig.sieve_buf = H5FL_BLK_FREE (sieve_buf,dataset->shared->cache.contig.sieve_buf);
+        } /* end if */
+
+        /* Free cached information for each kind of dataset */
+        switch(dataset->shared->layout.type) {
+            case H5D_CONTIGUOUS:
+                break;
+
+            case H5D_CHUNKED:
+                /* Flush and destroy chunks in the cache */
+                if(H5D_istore_dest(dataset,H5AC_dxpl_id)<0)
+                    HGOTO_ERROR(H5E_DATASET, H5E_CANTRELEASE, FAIL, "unable to destroy chunk cache")
+                break;
+
+            case H5D_COMPACT:
+                /* Update header message of layout for compact dataset. */
+                if(dataset->shared->layout.u.compact.dirty) {
+                    if(H5O_modify(&(dataset->ent), H5O_LAYOUT_ID, 0, 0, H5O_UPDATE_TIME, &(dataset->shared->layout), H5AC_dxpl_id)<0)
+                        HGOTO_ERROR(H5E_DATASET, H5E_CANTRELEASE, FAIL, "unable to update layout message")
+                    dataset->shared->layout.u.compact.dirty = FALSE;
+                } /* end if */
+
+                /* Free the buffer for the raw data for compact datasets */
+                dataset->shared->layout.u.compact.buf=H5MM_xfree(dataset->shared->layout.u.compact.buf);
+                break;
+
+            default:
+                assert ("not implemented yet" && 0);
+#ifdef NDEBUG
+                HGOTO_ERROR (H5E_IO, H5E_UNSUPPORTED, FAIL, "unsupported storage layout")
+#endif /* NDEBUG */
+        } /* end switch */ /*lint !e788 All appropriate cases are covered */
+
+        /*
+        * Release datatype, dataspace and creation property list -- there isn't
+        * much we can do if one of these fails, so we just continue.
+        */
+        free_failed=(H5I_dec_ref(dataset->shared->type_id)<0 || H5S_close(dataset->shared->space)<0 ||
+                          H5I_dec_ref(dataset->shared->dcpl_id) < 0);
+
+        /* Remove the dataset from the list of opened objects in the file */
+        if(H5FO_top_decr(dataset->ent.file, dataset->ent.header) < 0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTRELEASE, FAIL, "can't decrement count for object")
+        if(H5FO_delete(dataset->ent.file, H5AC_dxpl_id, dataset->ent.header)<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTRELEASE, FAIL, "can't remove dataset from list of open objects")
+
+        /* Close the dataset object */
+        /* (This closes the file, if this is the last object open) */
+        if(H5O_close(&(dataset->ent))<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release object header");
+
+        /*
+        * Free memory.  Before freeing the memory set the file pointer to NULL.
+        * We always check for a null file pointer in other H5D functions to be
+        * sure we're not accessing an already freed dataset (see the assert()
+        * above).
+        */
+        dataset->ent.file = NULL;
+
+        H5FL_FREE(H5D_shared_t,dataset->shared);
+    } /* end if */
+    else
+    {
+        /* Decrement the ref. count for this object in the top file */
+        if(H5FO_top_decr(dataset->ent.file, dataset->ent.header) < 0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTRELEASE, FAIL, "can't decrement count for object")
+
+        /* Check reference count for this object in the top file */
+        if(H5FO_top_count(dataset->ent.file, dataset->ent.header) == 0)
+            if(H5O_close(&(dataset->ent)) < 0)
+                HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to close")
+
+       if(H5G_free_ent_name(&dataset->ent)<0)
+           free_failed=TRUE;
+    } /* end else */
+
+    H5FL_FREE(H5D_t,dataset);
+
+    if (free_failed)
+	HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "couldn't free the type or creation property list, but the dataset was freed anyway.")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_extend
+ *
+ * Purpose:	Increases the size of a dataset.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January 30, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to retrieve property for generic property
+ *              list.
+ *
+ *              Nat Furrer and James Laird
+ *              June 17, 2004
+ *              Added check for filter encode capability
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_extend (H5D_t *dataset, const hsize_t *size, hid_t dxpl_id)
+{
+    int	changed;                        /* Flag to indicate that the dataspace was successfully extended */
+    H5S_t	*space = NULL;          /* Dataset's dataspace */
+    H5D_fill_value_t fill_status;
+    H5D_fill_time_t  fill_time;
+    herr_t	ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_extend, FAIL)
+
+    /* Check args */
+    assert (dataset);
+    assert (size);
+
+    /* Check if the filters in the DCPL will need to encode, and if so, can they?
+     * Filters need encoding if fill value is defined and a fill policy is set that requires
+     * writing on an extend.
+     */
+    if(! dataset->shared->checked_filters)
+    {
+        if(H5P_is_fill_value_defined(&(dataset->shared->fill), &fill_status) < 0)
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Couldn't retrieve fill value from dataset.");
+
+        if(fill_status == H5D_FILL_VALUE_DEFAULT || fill_status == H5D_FILL_VALUE_USER_DEFINED)
+        {
+            if( H5Pget_fill_time(dataset->shared->dcpl_id, &fill_time) < 0)
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "Couldn't retrieve fill time from dataset.");
+
+            if(fill_time == H5D_FILL_TIME_ALLOC ||
+                    (fill_time == H5D_FILL_TIME_IFSET && fill_status == H5D_FILL_VALUE_USER_DEFINED) )
+            {
+                /* Filters must have encoding enabled. Ensure that all filters can be applied */
+                if(H5Z_can_apply(dataset->shared->dcpl_id, dataset->shared->type_id) <0)
+                    HGOTO_ERROR(H5E_PLINE, H5E_CANAPPLY, FAIL, "can't apply filters")
+
+                dataset->shared->checked_filters = TRUE;
+            }
+        }
+    }
+
+    /*
+     * NOTE: Restrictions on extensions were checked when the dataset was
+     *	     created.  All extensions are allowed here since none should be
+     *	     able to muck things up.
+     */
+
+    /* Increase the size of the data space */
+    space=dataset->shared->space;
+    if ((changed=H5S_extend (space, size))<0)
+	HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to increase size of data space")
+
+    if (changed>0){
+	/* Save the new dataspace in the file if necessary */
+	if (H5S_modify (&(dataset->ent), space, TRUE, dxpl_id)<0)
+	    HGOTO_ERROR (H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to update file with new dataspace")
+
+        /* Update the index values for the cached chunks for this dataset */
+        if(H5D_CHUNKED == dataset->shared->layout.type)
+            if(H5D_istore_update_cache(dataset, dxpl_id) < 0)
+                HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to update cached chunk indices")
+
+	/* Allocate space for the new parts of the dataset, if appropriate */
+        if(dataset->shared->alloc_time==H5D_ALLOC_TIME_EARLY)
+            if (H5D_alloc_storage(dataset->ent.file, dxpl_id, dataset, H5D_ALLOC_EXTEND, TRUE, FALSE)<0)
+                HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize dataset with fill value")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_entof
+ *
+ * Purpose:	Returns a pointer to the entry for a dataset.
+ *
+ * Return:	Success:	Ptr to entry
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, April 24, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5G_entry_t *
+H5D_entof (H5D_t *dataset)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_entof)
+
+    FUNC_LEAVE_NOAPI( dataset ? &(dataset->ent) : (H5G_entry_t *)NULL)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_typeof
+ *
+ * Purpose:	Returns a pointer to the dataset's data type.  The data type
+ *		is not copied.
+ *
+ * Return:	Success:	Ptr to the dataset's data type, uncopied.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, June  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_t *
+H5D_typeof (const H5D_t *dset)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_typeof)
+
+    assert (dset);
+    assert (dset->shared->type);
+
+    FUNC_LEAVE_NOAPI(dset->shared->type)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:  H5D_get_file
+ *
+ * Purpose:   Returns the dataset's file pointer.
+ *
+ * Return:    Success:        Ptr to the dataset's file pointer.
+ *
+ *            Failure:        NULL
+ *
+ * Programmer:        Quincey Koziol
+ *              Thursday, October 22, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5F_t *
+H5D_get_file (const H5D_t *dset)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_get_file)
+
+    assert (dset);
+    assert (dset->ent.file);
+
+    FUNC_LEAVE_NOAPI(dset->ent.file)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_alloc_storage
+ *
+ * Purpose:	Allocate storage for the raw data of a dataset.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, January 16, 1998
+ *
+ * Modifications:
+ *              Quincey Koziol
+ *              Thursday, August 22, 2002
+ *              Moved here from H5F_arr_create and moved more logic into
+ *              this function from places where it was being called.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_alloc_storage (H5F_t *f, hid_t dxpl_id, H5D_t *dset/*in,out*/, H5D_time_alloc_t time_alloc,
+    hbool_t update_time, hbool_t full_overwrite)
+{
+    struct H5O_layout_t *layout;        /* The dataset's layout information */
+    unsigned init_space=0;              /* Flag to indicate that space should be initialized */
+    unsigned addr_set=0;                /* Flag to indicate that the dataset's storage address was set */
+    herr_t      ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_alloc_storage)
+
+    /* check args */
+    assert (f);
+    assert (dset);
+
+    /* If the data is stored in external files, don't set an address for the layout
+     * We assume that external storage is already
+     * allocated by the caller, or at least will be before I/O is performed.
+     */
+    if(dset->shared->efl.nused==0) {
+        /* Get a pointer to the dataset's layout information */
+        layout=&(dset->shared->layout);
+
+        switch (layout->type) {
+            case H5D_CONTIGUOUS:
+                if(layout->u.contig.addr==HADDR_UNDEF) {
+                    /* Reserve space in the file for the entire array */
+                    if (H5D_contig_create (f, dxpl_id, layout/*out*/)<0)
+                        HGOTO_ERROR (H5E_IO, H5E_CANTINIT, FAIL, "unable to initialize contiguous storage")
+
+                    /* Indicate that we set the storage addr */
+                    addr_set=1;
+
+                    /* Indicate that we should initialize storage space */
+                    init_space=1;
+                } /* end if */
+                break;
+
+            case H5D_CHUNKED:
+                if(layout->u.chunk.addr==HADDR_UNDEF) {
+                    /* Create the root of the B-tree that describes chunked storage */
+                    if (H5D_istore_create (f, dxpl_id, layout/*out*/)<0)
+                        HGOTO_ERROR (H5E_IO, H5E_CANTINIT, FAIL, "unable to initialize chunked storage")
+
+                    /* Indicate that we set the storage addr */
+                    addr_set=1;
+
+                    /* Indicate that we should initialize storage space */
+                    init_space=1;
+                } /* end if */
+
+                /* If space allocation is set to 'early' and we are extending
+                 *  the dataset, indicate that space should be allocated, so the
+                 *  B-tree gets expanded. -QAK
+                 */
+                if(dset->shared->alloc_time==H5D_ALLOC_TIME_EARLY && time_alloc==H5D_ALLOC_EXTEND)
+                    init_space=1;
+
+                break;
+
+            case H5D_COMPACT:
+                /* Check if space is already allocated */
+                if(layout->u.compact.buf==NULL) {
+                    /* Reserve space in layout header message for the entire array. */
+                    assert(layout->u.compact.size>0);
+                    if (NULL==(layout->u.compact.buf=H5MM_malloc(layout->u.compact.size)))
+                        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate memory for compact dataset")
+                    layout->u.compact.dirty = TRUE;
+
+                    /* Indicate that we set the storage addr */
+                    addr_set=1;
+
+                    /* Indicate that we should initialize storage space */
+                    init_space=1;
+                } /* end if */
+                break;
+
+            default:
+                assert ("not implemented yet" && 0);
+#ifdef NDEBUG
+                HGOTO_ERROR (H5E_IO, H5E_UNSUPPORTED, FAIL, "unsupported storage layout")
+#endif /* NDEBUG */
+        } /* end switch */ /*lint !e788 All appropriate cases are covered */
+
+        /* Check if we need to initialize the space */
+        if(init_space) {
+            if (layout->type==H5D_CHUNKED) {
+                /* If we are doing incremental allocation and the B-tree got
+                 * created during a H5Dwrite call, don't initialize the storage
+                 * now, wait for the actual writes to each block and let the
+                 * low-level chunking routines handle initialize the fill-values.
+                 * Otherwise, pass along the space initialization call and let
+                 * the low-level chunking routines sort out whether to write
+                 * fill values to the chunks they allocate space for.  Yes,
+                 * this is icky. -QAK
+                 */
+                if(!(dset->shared->alloc_time==H5D_ALLOC_TIME_INCR && time_alloc==H5D_ALLOC_WRITE)) {
+                    if(H5D_init_storage(dset, full_overwrite, dxpl_id) < 0)
+                        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize dataset with fill value")
+                } /* end if */
+            } /* end if */
+            else {
+                H5D_fill_value_t	fill_status;    /* The fill value status */
+
+                /* Check the dataset's fill-value status */
+                if (H5P_is_fill_value_defined(&(dset->shared->fill), &fill_status) < 0)
+                    HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't tell if fill value defined")
+
+                /* If we are filling the dataset on allocation or "if set" and
+                 * the fill value _is_ set, do that now */
+                if(dset->shared->fill_time==H5D_FILL_TIME_ALLOC ||
+                        (dset->shared->fill_time==H5D_FILL_TIME_IFSET && fill_status==H5D_FILL_VALUE_USER_DEFINED)) {
+                    if(H5D_init_storage(dset, full_overwrite, dxpl_id) < 0)
+                        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize dataset with fill value")
+                } /* end if */
+            } /* end else */
+        } /* end if */
+
+        /* Also update header message for layout with new address, if we
+         * set the address.  (this is improves forward compatibility).
+         */
+        if(time_alloc!=H5D_ALLOC_CREATE && addr_set)
+            if (H5O_modify (&(dset->ent), H5O_LAYOUT_ID, 0, H5O_FLAG_CONSTANT, update_time, &(dset->shared->layout), dxpl_id) < 0)
+                HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update layout message")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_alloc_storage() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_init_storage
+ *
+ * Purpose:	Initialize the data for a new dataset.  If a selection is
+ *		defined for SPACE then initialize only that part of the
+ *		dataset.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, October  5, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to retrieve property for generic property
+ *              list.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_init_storage(H5D_t *dset, hbool_t full_overwrite, hid_t dxpl_id)
+{
+    herr_t		ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_init_storage)
+
+    assert(dset);
+
+    switch (dset->shared->layout.type) {
+        case H5D_COMPACT:
+            {
+                hssize_t            snpoints;       /* Number of points in space (for error checking) */
+                size_t              npoints;        /* Number of points in space */
+
+                /* Get the number of elements in the dataset's dataspace */
+                snpoints = H5S_GET_EXTENT_NPOINTS(dset->shared->space);
+                assert(snpoints>=0);
+                H5_ASSIGN_OVERFLOW(npoints,snpoints,hssize_t,size_t);
+
+                /* If we will be immediately overwriting the values, don't bother to clear them */
+                if(!full_overwrite) {
+                    /* If the fill value is defined, initialize the data buffer with it */
+                    if(dset->shared->fill.buf)
+                        /* Initialize the cached data buffer with the fill value */
+                        H5V_array_fill(dset->shared->layout.u.compact.buf, dset->shared->fill.buf, dset->shared->fill.size, npoints);
+                    else /* If the fill value is default, zero set data buf. */
+                        HDmemset(dset->shared->layout.u.compact.buf, 0, dset->shared->layout.u.compact.size);
+                } /* end if */
+            }
+            break;
+
+        case H5D_CONTIGUOUS:
+            /* Don't write default fill values to external files */
+            /* If we will be immediately overwriting the values, don't bother to clear them */
+            if((dset->shared->efl.nused==0 || dset->shared->fill.buf) && !full_overwrite) {
+                if (H5D_contig_fill(dset, dxpl_id)<0)
+                    HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to allocate all chunks of dataset")
+            } /* end if */
+            break;
+
+        case H5D_CHUNKED:
+            /*
+             * Allocate file space
+             * for all chunks now and initialize each chunk with the fill value.
+             */
+            if (H5D_istore_allocate(dset, dxpl_id, full_overwrite)<0)
+                HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to allocate all chunks of dataset")
+            break;
+
+        default:
+            assert ("not implemented yet" && 0);
+#ifdef NDEBUG
+            HGOTO_ERROR (H5E_IO, H5E_UNSUPPORTED, FAIL, "unsupported storage layout")
+#endif /* NDEBUG */
+    } /* end switch */ /*lint !e788 All appropriate cases are covered */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_init_storage() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Dget_storage_size
+ *
+ * Purpose:	Returns the amount of storage that is required for the
+ *		dataset. For chunked datasets this is the number of allocated
+ *		chunks times the chunk size.
+ *
+ * Return:	Success:	The amount of storage space allocated for the
+ *				dataset, not counting meta data. The return
+ *				value may be zero if no data has been stored.
+ *
+ *		Failure:	Zero
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 21, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t
+H5Dget_storage_size(hid_t dset_id)
+{
+    H5D_t	*dset=NULL;
+    hsize_t	ret_value;      /* Return value */
+
+    FUNC_ENTER_API(H5Dget_storage_size, 0)
+    H5TRACE1("h","i",dset_id);
+
+    /* Check args */
+    if (NULL==(dset=H5I_object_verify(dset_id, H5I_DATASET)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a dataset")
+
+    /* Set return value */
+    ret_value = H5D_get_storage_size(dset,H5AC_ind_dxpl_id);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_get_storage_size
+ *
+ * Purpose:	Determines how much space has been reserved to store the raw
+ *		data of a dataset.
+ *
+ * Return:	Success:	Number of bytes reserved to hold raw data.
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 21, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hsize_t
+H5D_get_storage_size(H5D_t *dset, hid_t dxpl_id)
+{
+    hsize_t	ret_value;
+
+    FUNC_ENTER_NOAPI(H5D_get_storage_size, 0)
+
+    switch(dset->shared->layout.type) {
+        case H5D_CHUNKED:
+            if(dset->shared->layout.u.chunk.addr == HADDR_UNDEF)
+                ret_value=0;
+            else
+                ret_value = H5D_istore_allocated(dset, dxpl_id);
+            break;
+
+        case H5D_CONTIGUOUS:
+            /* Datasets which are not allocated yet are using no space on disk */
+            if(dset->shared->layout.u.contig.addr == HADDR_UNDEF)
+                ret_value=0;
+            else
+                 ret_value=dset->shared->layout.u.contig.size;
+            break;
+
+        case H5D_COMPACT:
+            ret_value = dset->shared->layout.u.compact.size;
+            break;
+
+        default:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a dataset type")
+    } /*lint !e788 All appropriate cases are covered */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Dget_offset
+ *
+ * Purpose:	Returns the address of dataset in file.
+ *
+ * Return:	Success:        the address of dataset
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:  Raymond Lu
+ *              November 6, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5Dget_offset(hid_t dset_id)
+{
+    H5D_t	*dset=NULL;
+    haddr_t	ret_value;      /* Return value */
+
+    FUNC_ENTER_API(H5Dget_offset, HADDR_UNDEF)
+    H5TRACE1("a","i",dset_id);
+
+    /* Check args */
+    if (NULL==(dset=H5I_object_verify(dset_id, H5I_DATASET)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, HADDR_UNDEF, "not a dataset")
+
+    /* Set return value */
+    ret_value = H5D_get_offset(dset);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_get_offset
+ *
+ * Purpose:	Private function for H5D_get_offset.  Returns the address
+ *              of dataset in file.
+ *
+ * Return:	Success:        the address of dataset
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:  Raymond Lu
+ *              November 6, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5D_get_offset(const H5D_t *dset)
+{
+    haddr_t	ret_value=HADDR_UNDEF;
+    haddr_t     base_addr;
+    H5F_t       *f;
+
+    FUNC_ENTER_NOAPI(H5D_get_offset, HADDR_UNDEF)
+
+    assert(dset);
+
+    switch(dset->shared->layout.type) {
+        case H5D_CHUNKED:
+        case H5D_COMPACT:
+            break;
+
+        case H5D_CONTIGUOUS:
+            /* If dataspace hasn't been allocated or dataset is stored in
+             * an external file, the value will be HADDR_UNDEF. */
+            f =  H5D_get_file(dset);
+            base_addr = H5F_get_base_addr(f);
+
+            /* If there's user block in file, returns the absolute dataset offset
+             * from the beginning of file. */
+            if(base_addr!=HADDR_UNDEF)
+                ret_value = dset->shared->layout.u.contig.addr + base_addr;
+            else
+                ret_value = dset->shared->layout.u.contig.addr;
+            break;
+
+        default:
+            assert ("not implemented yet" && 0);
+#ifdef NDEBUG
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, HADDR_UNDEF, "unknown dataset layout type")
+#endif /* NDEBUG */
+    } /*lint !e788 All appropriate cases are covered */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Diterate
+ *
+ * Purpose:	This routine iterates over all the elements selected in a memory
+ *      buffer.  The callback function is called once for each element selected
+ *      in the dataspace.  The selection in the dataspace is modified so
+ *      that any elements already iterated over are removed from the selection
+ *      if the iteration is interrupted (by the H5D_operator_t function
+ *      returning non-zero) in the "middle" of the iteration and may be
+ *      re-started by the user where it left off.
+ *
+ *      NOTE: Until "subtracting" elements from a selection is implemented,
+ *          the selection is not modified.
+ *
+ * Parameters:
+ *      void *buf;          IN/OUT: Pointer to the buffer in memory containing
+ *                              the elements to iterate over.
+ *      hid_t type_id;      IN: Datatype ID for the elements stored in BUF.
+ *      hid_t space_id;     IN: Dataspace ID for BUF, also contains the
+ *                              selection to iterate over.
+ *      H5D_operator_t op; IN: Function pointer to the routine to be
+ *                              called for each element in BUF iterated over.
+ *      void *operator_data;    IN/OUT: Pointer to any user-defined data
+ *                              associated with the operation.
+ *
+ * Operation information:
+ *      H5D_operator_t is defined as:
+ *          typedef herr_t (*H5D_operator_t)(void *elem, hid_t type_id,
+ *              unsigned ndim, const hsize_t *point, void *operator_data);
+ *
+ *      H5D_operator_t parameters:
+ *          void *elem;         IN/OUT: Pointer to the element in memory containing
+ *                                  the current point.
+ *          hid_t type_id;      IN: Datatype ID for the elements stored in ELEM.
+ *          unsigned ndim;       IN: Number of dimensions for POINT array
+ *          const hsize_t *point; IN: Array containing the location of the element
+ *                                  within the original dataspace.
+ *          void *operator_data;    IN/OUT: Pointer to any user-defined data
+ *                                  associated with the operation.
+ *
+ *      The return values from an operator are:
+ *          Zero causes the iterator to continue, returning zero when all
+ *              elements have been processed.
+ *          Positive causes the iterator to immediately return that positive
+ *              value, indicating short-circuit success.  The iterator can be
+ *              restarted at the next element.
+ *          Negative causes the iterator to immediately return that value,
+ *              indicating failure. The iterator can be restarted at the next
+ *              element.
+ *
+ * Return:	Returns the return value of the last operator if it was non-zero,
+ *          or zero if all elements were processed. Otherwise returns a
+ *          negative value.
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, June 11, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Diterate(void *buf, hid_t type_id, hid_t space_id, H5D_operator_t op,
+        void *operator_data)
+{
+    H5S_t		   *space = NULL;
+    herr_t ret_value;
+
+    FUNC_ENTER_API(H5Diterate, FAIL)
+    H5TRACE5("e","xiixx",buf,type_id,space_id,op,operator_data);
+
+    /* Check args */
+    if (NULL==op)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid operator")
+    if (buf==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid buffer")
+    if (H5I_DATATYPE != H5I_get_type(type_id))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid datatype")
+    if (NULL == (space = H5I_object_verify(space_id, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid dataspace")
+    if( !(H5S_has_extent(space)) )
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "dataspace does not have extent set")
+
+    ret_value=H5S_select_iterate(buf,type_id,space,op,operator_data);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}   /* end H5Diterate() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Dvlen_reclaim
+ *
+ * Purpose:	Frees the buffers allocated for storing variable-length data
+ *      in memory.  Only frees the VL data in the selection defined in the
+ *      dataspace.  The dataset transfer property list is required to find the
+ *      correct allocation/free methods for the VL data in the buffer.
+ *
+ * Return:	Non-negative on success, negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, June 10, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Dvlen_reclaim(hid_t type_id, hid_t space_id, hid_t plist_id, void *buf)
+{
+    H5T_vlen_alloc_info_t _vl_alloc_info;       /* VL allocation info buffer */
+    H5T_vlen_alloc_info_t *vl_alloc_info=&_vl_alloc_info;   /* VL allocation info */
+    herr_t ret_value;
+
+    FUNC_ENTER_API(H5Dvlen_reclaim, FAIL)
+    H5TRACE4("e","iiix",type_id,space_id,plist_id,buf);
+
+    /* Check args */
+    if (H5I_DATATYPE!=H5I_get_type(type_id) || H5I_DATASPACE!=H5I_get_type(space_id) ||
+            buf==NULL)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid argument")
+
+    /* Get the default dataset transfer property list if the user didn't provide one */
+    if (H5P_DEFAULT == plist_id)
+        plist_id= H5P_DATASET_XFER_DEFAULT;
+    else
+        if (TRUE!=H5P_isa_class(plist_id,H5P_DATASET_XFER))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms")
+
+    /* Get the allocation info */
+    if(H5T_vlen_get_alloc_info(plist_id,&vl_alloc_info)<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTGET, FAIL, "unable to retrieve VL allocation info");
+
+    /* Call H5Diterate with args, etc. */
+    ret_value=H5Diterate(buf,type_id,space_id,H5T_vlen_reclaim,vl_alloc_info);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}   /* end H5Dvlen_reclaim() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_vlen_get_buf_size_alloc
+ *
+ * Purpose:	This routine makes certain there is enough space in the temporary
+ *      buffer for the new data to read in.  All the VL data read in is actually
+ *      placed in this buffer, overwriting the previous data.  Needless to say,
+ *      this data is not actually usable.
+ *
+ * Return:	Non-negative on success, negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, August 17, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5D_vlen_get_buf_size_alloc(size_t size, void *info)
+{
+    H5D_vlen_bufsize_t *vlen_bufsize=(H5D_vlen_bufsize_t *)info;
+    void *ret_value;    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_vlen_get_buf_size_alloc, NULL)
+
+    /* Get a temporary pointer to space for the VL data */
+    if ((vlen_bufsize->vl_tbuf=H5FL_BLK_REALLOC(vlen_vl_buf,vlen_bufsize->vl_tbuf,size))!=NULL)
+        vlen_bufsize->size+=size;
+
+    /* Set return value */
+    ret_value=vlen_bufsize->vl_tbuf;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_vlen_get_buf_size_alloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_vlen_get_buf_size
+ *
+ * Purpose:	This routine checks the number of bytes required to store a single
+ *      element from a dataset in memory, creating a selection with just the
+ *      single element selected to read in the element and using a custom memory
+ *      allocator for any VL data encountered.
+ *          The *size value is modified according to how many bytes are
+ *      required to store the element in memory.
+ *
+ * Implementation: This routine actually performs the read with a custom
+ *      memory manager which basically just counts the bytes requested and
+ *      uses a temporary memory buffer (through the H5FL API) to make certain
+ *      enough space is available to perform the read.  Then the temporary
+ *      buffer is released and the number of bytes allocated is returned.
+ *      Kinda kludgy, but easier than the other method of trying to figure out
+ *      the sizes without actually reading the data in... - QAK
+ *
+ * Return:	Non-negative on success, negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, August 17, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5D_vlen_get_buf_size(void UNUSED *elem, hid_t type_id, unsigned UNUSED ndim, const hsize_t *point, void *op_data)
+{
+    H5D_vlen_bufsize_t *vlen_bufsize=(H5D_vlen_bufsize_t *)op_data;
+    H5T_t	*dt = NULL;
+    herr_t ret_value=0;         /* The correct return value, if this function succeeds */
+
+    FUNC_ENTER_NOAPI(H5D_vlen_get_buf_size, FAIL)
+
+    assert(op_data);
+    assert(H5I_DATATYPE == H5I_get_type(type_id));
+
+    /* Check args */
+    if (NULL==(dt=H5I_object(type_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type")
+
+    /* Make certain there is enough fixed-length buffer available */
+    if ((vlen_bufsize->fl_tbuf=H5FL_BLK_REALLOC(vlen_fl_buf,vlen_bufsize->fl_tbuf,H5T_get_size(dt)))==NULL)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't resize tbuf")
+
+    /* Select point to read in */
+    if (H5Sselect_elements(vlen_bufsize->fspace_id,H5S_SELECT_SET,1,(const hsize_t **)point)<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCREATE, FAIL, "can't select point")
+
+    /* Read in the point (with the custom VL memory allocator) */
+    if(H5Dread(vlen_bufsize->dataset_id,type_id,vlen_bufsize->mspace_id,vlen_bufsize->fspace_id,vlen_bufsize->xfer_pid,vlen_bufsize->fl_tbuf)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "can't read point")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5D_vlen_get_buf_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Dvlen_get_buf_size
+ *
+ * Purpose:	This routine checks the number of bytes required to store the VL
+ *      data from the dataset, using the space_id for the selection in the
+ *      dataset on disk and the type_id for the memory representation of the
+ *      VL data, in memory.  The *size value is modified according to how many
+ *      bytes are required to store the VL data in memory.
+ *
+ * Implementation: This routine actually performs the read with a custom
+ *      memory manager which basically just counts the bytes requested and
+ *      uses a temporary memory buffer (through the H5FL API) to make certain
+ *      enough space is available to perform the read.  Then the temporary
+ *      buffer is released and the number of bytes allocated is returned.
+ *      Kinda kludgy, but easier than the other method of trying to figure out
+ *      the sizes without actually reading the data in... - QAK
+ *
+ * Return:	Non-negative on success, negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, August 11, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Dvlen_get_buf_size(hid_t dataset_id, hid_t type_id, hid_t space_id,
+        hsize_t *size)
+{
+    H5D_vlen_bufsize_t vlen_bufsize = {0, 0, 0, 0, 0, 0, 0};
+    char bogus;         /* bogus value to pass to H5Diterate() */
+    H5P_genclass_t  *pclass;    /* Property class */
+    H5P_genplist_t  *plist;     /* Property list */
+    herr_t ret_value=FAIL;
+
+    FUNC_ENTER_API(H5Dvlen_get_buf_size, FAIL)
+    H5TRACE4("e","iii*h",dataset_id,type_id,space_id,size);
+
+    /* Check args */
+    if (H5I_DATASET!=H5I_get_type(dataset_id) ||
+            H5I_DATATYPE!=H5I_get_type(type_id) ||
+            H5I_DATASPACE!=H5I_get_type(space_id) || size==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid argument")
+
+    /* Save the dataset ID */
+    vlen_bufsize.dataset_id=dataset_id;
+
+    /* Get a copy of the dataspace ID */
+    if((vlen_bufsize.fspace_id=H5Dget_space(dataset_id))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOPY, FAIL, "can't copy dataspace")
+
+    /* Create a scalar for the memory dataspace */
+    if((vlen_bufsize.mspace_id=H5Screate(H5S_SCALAR))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOPY, FAIL, "can't create dataspace")
+
+    /* Grab the temporary buffers required */
+    if((vlen_bufsize.fl_tbuf=H5FL_BLK_MALLOC(vlen_fl_buf,1))==NULL)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "no temporary buffers available")
+    if((vlen_bufsize.vl_tbuf=H5FL_BLK_MALLOC(vlen_vl_buf,1))==NULL)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "no temporary buffers available")
+
+    /* Get the pointer to the dataset transfer class */
+    if (NULL == (pclass = H5I_object(H5P_CLS_DATASET_XFER_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list class")
+
+    /* Change to the custom memory allocation routines for reading VL data */
+    if((vlen_bufsize.xfer_pid=H5P_create_id(pclass))<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTCREATE, FAIL, "no dataset xfer plists available")
+
+    /* Get the property list struct */
+    if (NULL == (plist = H5I_object(vlen_bufsize.xfer_pid)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
+
+    /* Set the memory manager to the special allocation routine */
+    if(H5P_set_vlen_mem_manager(plist,H5D_vlen_get_buf_size_alloc,&vlen_bufsize,NULL,NULL)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't set VL data allocation routine")
+
+    /* Set the initial number of bytes required */
+    vlen_bufsize.size=0;
+
+    /* Call H5Diterate with args, etc. */
+    ret_value=H5Diterate(&bogus,type_id,space_id,H5D_vlen_get_buf_size,&vlen_bufsize);
+
+    /* Get the size if we succeeded */
+    if(ret_value>=0)
+        *size=vlen_bufsize.size;
+
+done:
+    if(vlen_bufsize.fspace_id>0) {
+        if(H5I_dec_ref(vlen_bufsize.fspace_id)<0)
+            HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release dataspace")
+    } /* end if */
+    if(vlen_bufsize.mspace_id>0) {
+        if(H5I_dec_ref(vlen_bufsize.mspace_id)<0)
+            HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release dataspace")
+    } /* end if */
+    if(vlen_bufsize.fl_tbuf!=NULL)
+        H5FL_BLK_FREE(vlen_fl_buf,vlen_bufsize.fl_tbuf);
+    if(vlen_bufsize.vl_tbuf!=NULL)
+        H5FL_BLK_FREE(vlen_vl_buf,vlen_bufsize.vl_tbuf);
+    if(vlen_bufsize.xfer_pid>0) {
+        if(H5I_dec_ref(vlen_bufsize.xfer_pid)<0)
+            HDONE_ERROR(H5E_DATASET, H5E_CANTDEC, FAIL, "unable to decrement ref count on property list")
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value)
+}   /* end H5Dvlen_get_buf_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5Dset_extent
+ *
+ * Purpose: Modifies the dimensions of a dataset, based on H5Dextend.
+ *  Can change to a lower dimension.
+ *
+ * Return: Success: SUCCEED, Failure: FAIL
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *             Robb Matzke
+ *
+ * Date: April 9, 2002
+ *
+ * Comments: Public function, calls private H5D_set_extent
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Dset_extent(hid_t dset_id, const hsize_t *size)
+{
+    H5D_t                  *dset = NULL;
+    herr_t                  ret_value=SUCCEED;  /* Return value */
+
+    FUNC_ENTER_API(H5Dset_extent, FAIL)
+    H5TRACE2("e","i*h",dset_id,size);
+
+    /* Check args */
+    if(NULL == (dset = H5I_object_verify(dset_id, H5I_DATASET)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+    if(!size)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no size specified")
+
+    /* Private function */
+    if(H5D_set_extent(dset, size, H5AC_dxpl_id) < 0)
+	HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to set extend dataset")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5D_set_extent
+ *
+ * Purpose: Based in H5D_extend, allows change to a lower dimension,
+ *  calls H5S_set_extent and H5D_istore_prune_by_extent instead
+ *
+ * Return: Success: SUCCEED, Failure: FAIL
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *             Robb Matzke
+ *
+ * Date: April 9, 2002
+ *
+ * Comments: Private function
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_set_extent(H5D_t *dset, const hsize_t *size, hid_t dxpl_id)
+{
+    hsize_t                 curr_dims[H5O_LAYOUT_NDIMS];	/* Current dimension sizes */
+    int                     rank;	/* Dataspace # of dimensions */
+    herr_t                  ret_value = SUCCEED;        /* Return value */
+    H5S_t                  *space = NULL;
+    int                     u;
+    unsigned                shrink = 0;         /* Flag to indicate a dimension has shrank */
+    unsigned                expand = 0;         /* Flag to indicate a dimension has grown */
+    int                     changed = 0;
+
+    FUNC_ENTER_NOAPI(H5D_set_extent, FAIL)
+
+    /* Check args */
+    assert(dset);
+    assert(size);
+
+ /*-------------------------------------------------------------------------
+  * Get the data space
+  *-------------------------------------------------------------------------
+  */
+    space = dset->shared->space;
+
+ /*-------------------------------------------------------------------------
+  * Check if we are shrinking or expanding any of the dimensions
+  *-------------------------------------------------------------------------
+  */
+    if((rank = H5S_get_simple_extent_dims(space, curr_dims, NULL)) < 0)
+	HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataset dimensions")
+
+    for(u = 0; u < rank; u++) {
+	if(size[u] < curr_dims[u])
+	    shrink = 1;
+	if(size[u] > curr_dims[u])
+	    expand = 1;
+    }
+
+ /*-------------------------------------------------------------------------
+  * Modify the size of the data space
+  *-------------------------------------------------------------------------
+  */
+    if((changed=H5S_set_extent(space, size)) < 0)
+	HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to modify size of data space")
+
+    /* Don't bother updating things, unless they've changed */
+    if(changed) {
+     /*-------------------------------------------------------------------------
+      * Modify the dataset storage
+      *-------------------------------------------------------------------------
+      */
+        /* Save the new dataspace in the file if necessary */
+        if(H5S_modify(&(dset->ent), space, TRUE, dxpl_id) < 0)
+            HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to update file with new dataspace")
+
+        /* Update the index values for the cached chunks for this dataset */
+        if(H5D_CHUNKED == dset->shared->layout.type)
+            if(H5D_istore_update_cache(dset, dxpl_id) < 0)
+                HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to update cached chunk indices")
+
+	/* Allocate space for the new parts of the dataset, if appropriate */
+        if(expand && dset->shared->alloc_time==H5D_ALLOC_TIME_EARLY)
+            if(H5D_alloc_storage(dset->ent.file, dxpl_id, dset, H5D_ALLOC_EXTEND, TRUE, FALSE) < 0)
+                HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize dataset storage")
+
+
+     /*-------------------------------------------------------------------------
+      * Remove chunk information in the case of chunked datasets
+      * This removal takes place only in case we are shrinking the dateset
+      *-------------------------------------------------------------------------
+      */
+        if(shrink && H5D_CHUNKED == dset->shared->layout.type) {
+            H5D_io_info_t io_info;              /* Dataset I/O info */
+            H5D_dxpl_cache_t _dxpl_cache;       /* Data transfer property cache buffer */
+            H5D_dxpl_cache_t *dxpl_cache=&_dxpl_cache;   /* Data transfer property cache */
+
+            /* Fill the DXPL cache values for later use */
+            if (H5D_get_dxpl_cache(dxpl_id,&dxpl_cache)<0)
+                HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
+
+            /* Construct dataset I/O info */
+            H5D_BUILD_IO_INFO(&io_info,dset,dxpl_cache,dxpl_id,NULL);
+
+            /* Remove excess chunks */
+            if(H5D_istore_prune_by_extent(&io_info) < 0)
+                HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to remove chunks ")
+
+            /* Reset the elements outsize the new dimensions, but in existing chunks */
+            if(H5D_istore_initialize_by_extent(&io_info) < 0)
+                HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "unable to initialize chunks ")
+        } /* end if */
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5D_flush
+ *
+ * Purpose:     Flush any dataset information cached in memory
+ *
+ * Return:	Success:	Non-negative
+ *		Failure:	Negative
+ *
+ *
+ * Programmer:  Ray Lu
+ *
+ * Date:        August 14, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_flush(const H5F_t *f, hid_t dxpl_id, unsigned flags)
+{
+    unsigned    num_dsets;      /* Number of datasets in file   */
+    hid_t       *id_list=NULL;  /* list of dataset IDs          */
+    H5D_t       *dataset=NULL;  /* Dataset pointer              */
+    unsigned	u;              /* Index variable */
+    herr_t      ret_value = SUCCEED;        /* Return value     */
+
+    FUNC_ENTER_NOAPI(H5D_flush, FAIL)
+
+    /* Check args */
+    assert(f);
+
+    /* Update layout message for compact dataset */
+    num_dsets=H5F_get_obj_count(f, H5F_OBJ_DATASET);
+
+    /* Check for something to do */
+    if(num_dsets>0) {
+        H5_CHECK_OVERFLOW(num_dsets,unsigned,size_t);
+        if(NULL==(id_list=H5MM_malloc((size_t)num_dsets*sizeof(hid_t))))
+            HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to allocate memory for ID list")
+        if(H5F_get_obj_ids(f, H5F_OBJ_DATASET, -1, id_list) != num_dsets)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to get dataset ID list")
+        for(u = 0; u < num_dsets; u++) {
+            if(NULL==(dataset=H5I_object_verify(id_list[u], H5I_DATASET)))
+                HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to get dataset object")
+
+            /* Flush the raw data buffer, if we have a dirty one */
+            if (dataset->shared->cache.contig.sieve_buf && dataset->shared->cache.contig.sieve_dirty) {
+                assert(dataset->shared->layout.type!=H5D_COMPACT);      /* We should never have a sieve buffer for compact storage */
+
+                /* Write dirty data sieve buffer to file */
+                if (H5F_block_write(f, H5FD_MEM_DRAW, dataset->shared->cache.contig.sieve_loc,
+                        dataset->shared->cache.contig.sieve_size, dxpl_id, dataset->shared->cache.contig.sieve_buf) < 0)
+                    HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "block write failed")
+
+                /* Reset sieve buffer dirty flag */
+                dataset->shared->cache.contig.sieve_dirty=0;
+            } /* end if */
+
+            /* Flush cached information for each kind of dataset */
+            switch(dataset->shared->layout.type) {
+                case H5D_CONTIGUOUS:
+                    break;
+
+                case H5D_CHUNKED:
+                    /* Flush the raw data cache */
+                    if (H5D_istore_flush(dataset, dxpl_id, flags & (H5F_FLUSH_INVALIDATE | H5F_FLUSH_CLEAR_ONLY)) < 0)
+                        HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush raw data cache")
+                    break;
+
+                case H5D_COMPACT:
+                    if(dataset->shared->layout.u.compact.dirty) {
+                        if(H5O_modify(&(dataset->ent), H5O_LAYOUT_ID, 0, 0, H5O_UPDATE_TIME, &(dataset->shared->layout), dxpl_id)<0)
+                            HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to update layout message")
+                        dataset->shared->layout.u.compact.dirty = FALSE;
+                    } /* end if */
+                    break;
+
+                default:
+                    assert ("not implemented yet" && 0);
+#ifdef NDEBUG
+                    HGOTO_ERROR (H5E_IO, H5E_UNSUPPORTED, FAIL, "unsupported storage layout")
+#endif /* NDEBUG */
+            } /* end switch */ /*lint !e788 All appropriate cases are covered */
+
+        }
+    } /* end if */
+
+done:
+    if(id_list!=NULL)
+        H5MM_xfree(id_list);
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_flush() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Ddebug
+ *
+ * Purpose:	Prints various information about a dataset.  This function is
+ *		not to be documented in the API at this time.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 28, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Ddebug(hid_t dset_id)
+{
+    H5D_t	*dset=NULL;
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_API(H5Ddebug, FAIL)
+    H5TRACE1("e","i",dset_id);
+
+    /* Check args */
+    if (NULL==(dset=H5I_object_verify(dset_id, H5I_DATASET)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+
+    /* Print B-tree information */
+    if (H5D_CHUNKED==dset->shared->layout.type) {
+	(void)H5D_istore_dump_btree(dset->ent.file, H5AC_dxpl_id, stdout, dset->shared->layout.u.chunk.ndims, dset->shared->layout.u.chunk.addr);
+    } else if (H5D_CONTIGUOUS==dset->shared->layout.type) {
+	HDfprintf(stdout, "    %-10s %a\n", "Address:", dset->shared->layout.u.contig.addr);
+    }
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}

Added: packages/hdf5/branches/upstream/current/src/H5Dcompact.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Dcompact.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Dcompact.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,119 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Raymond Lu <slu at ncsa.uiuc.edu>
+ *              August 5, 2002
+ *
+ * Purpose:     Compact dataset I/O functions.  These routines are similar
+ *              H5D_contig_* and H5D_istore_*.
+ */
+
+#define H5D_PACKAGE             /*suppress error about including H5Dpkg   */
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dpkg.h"		/* Dataset functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* Files				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5Oprivate.h"		/* Object headers		  	*/
+#include "H5Vprivate.h"		/* Vector and array functions		*/
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5D_compact_readvv
+ *
+ * Purpose:     Reads some data vectors from a dataset into a buffer.
+ *              The data is in compact dataset.  The address is relative
+ *              to the beginning address of the dataset.  The offsets and
+ *              sequence lengths are in bytes.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *              May 7, 2003
+ *
+ * Notes:
+ *              Offsets in the sequences must be monotonically increasing
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+ssize_t
+H5D_compact_readvv(const H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_size_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_size_arr[], hsize_t mem_offset_arr[],
+    void *buf)
+{
+    ssize_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_compact_readvv, FAIL)
+
+    assert(io_info->dset);
+
+    /* Use the vectorized memory copy routine to do actual work */
+    if((ret_value=H5V_memcpyvv(buf,mem_max_nseq,mem_curr_seq,mem_size_arr,mem_offset_arr,io_info->dset->shared->layout.u.compact.buf,dset_max_nseq,dset_curr_seq,dset_size_arr,dset_offset_arr))<0)
+        HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "vectorized memcpy failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5D_compact_readvv() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5D_compact_writevv
+ *
+ * Purpose:     Writes some data vectors from a dataset into a buffer.
+ *              The data is in compact dataset.  The address is relative
+ *              to the beginning address for the file.  The offsets and
+ *              sequence lengths are in bytes.  This function only copies
+ *              data into the buffer in the LAYOUT struct and mark it
+ *              as DIRTY.  Later in H5D_close, the data is copied into
+ *              header message in memory.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *              May 2, 2003
+ *
+ * Notes:
+ *              Offsets in the sequences must be monotonically increasing
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+ssize_t
+H5D_compact_writevv(const H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_size_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_size_arr[], hsize_t mem_offset_arr[],
+    const void *buf)
+{
+    ssize_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_compact_writevv, FAIL)
+
+    assert(io_info->dset);
+
+    /* Use the vectorized memory copy routine to do actual work */
+    if((ret_value=H5V_memcpyvv(io_info->dset->shared->layout.u.compact.buf,dset_max_nseq,dset_curr_seq,dset_size_arr,dset_offset_arr,buf,mem_max_nseq,mem_curr_seq,mem_size_arr,mem_offset_arr))<0)
+        HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "vectorized memcpy failed")
+
+    io_info->dset->shared->layout.u.compact.dirty = TRUE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5D_compact_writevv() */

Added: packages/hdf5/branches/upstream/current/src/H5Dcontig.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Dcontig.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Dcontig.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,966 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: 	Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *	       	Thursday, September 28, 2000
+ *
+ * Purpose:
+ *      Contiguous dataset I/O functions. These routines are similar to
+ *      the H5D_istore_* routines and really only an abstract way of dealing
+ *      with the data sieve buffer from H5F_seq_read/write.
+ */
+
+#define H5D_PACKAGE		/*suppress error about including H5Dpkg	  */
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dpkg.h"		/* Dataset functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* Files				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5MFprivate.h"	/* File memory management		*/
+#include "H5Oprivate.h"		/* Object headers		  	*/
+#include "H5Pprivate.h"		/* Property lists			*/
+#include "H5Sprivate.h"		/* Dataspace functions			*/
+#include "H5Vprivate.h"		/* Vector and array functions		*/
+
+/* Private prototypes */
+static herr_t H5D_contig_write(H5D_t *dset, const H5D_dxpl_cache_t *dxpl_cache,
+    hid_t dxpl_id, const H5D_storage_t *store, hsize_t offset, size_t size, const void *buf);
+
+/* Declare a PQ free list to manage the sieve buffer information */
+H5FL_BLK_DEFINE(sieve_buf);
+
+/* Declare the free list to manage blocks of non-zero fill-value data */
+H5FL_BLK_DEFINE_STATIC(non_zero_fill);
+
+/* Declare the free list to manage blocks of zero fill-value data */
+H5FL_BLK_DEFINE_STATIC(zero_fill);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_contig_create
+ *
+ * Purpose:	Allocate file space for a contiguously stored dataset
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		April 19, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_contig_create(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout /*out */ )
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_contig_create, FAIL)
+
+    /* check args */
+    assert(f);
+    assert(layout);
+
+    /* Allocate space for the contiguous data */
+    if (HADDR_UNDEF==(layout->u.contig.addr=H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, layout->u.contig.size)))
+        HGOTO_ERROR (H5E_IO, H5E_NOSPACE, FAIL, "unable to reserve file space")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_contig_create */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_contig_fill
+ *
+ * Purpose:	Write fill values to a contiguously stored dataset.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		August 22, 2002
+ *
+ * Modifications:
+ *          Bill Wendling, February 20, 2003
+ *          Added support for getting the barrier COMM if you're using
+ *          Flexible PHDF5.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_contig_fill(H5D_t *dset, hid_t dxpl_id)
+{
+    H5D_storage_t store;                /* Union of storage info for dataset */
+    H5D_dxpl_cache_t _dxpl_cache;       /* Data transfer property cache buffer */
+    H5D_dxpl_cache_t *dxpl_cache=&_dxpl_cache;   /* Data transfer property cache */
+    hssize_t    snpoints;       /* Number of points in space (for error checking) */
+    size_t      npoints;        /* Number of points in space */
+    size_t      ptsperbuf;      /* Maximum # of points which fit in the buffer */
+    size_t      elmt_size;      /* Size of each element */
+    size_t	bufsize=64*1024; /* Size of buffer to write */
+    size_t	size;           /* Current # of points to write */
+    hsize_t	offset;         /* Offset of dataset */
+    void       *buf = NULL;     /* Buffer for fill value writing */
+#ifdef H5_HAVE_PARALLEL
+    MPI_Comm	mpi_comm=MPI_COMM_NULL;	/* MPI communicator for file */
+    int         mpi_rank=(-1);  /* This process's rank  */
+    int         mpi_code;       /* MPI return code */
+    unsigned    blocks_written=0; /* Flag to indicate that chunk was actually written */
+    unsigned    using_mpi=0;    /* Flag to indicate that the file is being accessed with an MPI-capable file driver */
+#endif /* H5_HAVE_PARALLEL */
+    int         non_zero_fill_f=(-1);   /* Indicate that a non-zero fill-value was used */
+    herr_t	ret_value=SUCCEED;	/* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_contig_fill, FAIL)
+
+    /* Check args */
+    assert(TRUE==H5P_isa_class(dxpl_id,H5P_DATASET_XFER));
+    assert(dset && H5D_CONTIGUOUS==dset->shared->layout.type);
+    assert(H5F_addr_defined(dset->shared->layout.u.contig.addr));
+    assert(dset->shared->layout.u.contig.size>0);
+    assert(dset->shared->space);
+
+#ifdef H5_HAVE_PARALLEL
+    /* Retrieve MPI parameters */
+    if(IS_H5FD_MPI(dset->ent.file)) {
+        /* Get the MPI communicator */
+        if (MPI_COMM_NULL == (mpi_comm=H5F_mpi_get_comm(dset->ent.file)))
+            HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI communicator")
+
+        /* Get the MPI rank */
+        if ((mpi_rank=H5F_mpi_get_rank(dset->ent.file))<0)
+            HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI rank")
+
+        /* Set the MPI-capable file driver flag */
+        using_mpi=1;
+
+        /* Fill the DXPL cache values for later use */
+        if (H5D_get_dxpl_cache(H5AC_ind_dxpl_id,&dxpl_cache)<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
+    } /* end if */
+    else {
+#endif  /* H5_HAVE_PARALLEL */
+        /* Fill the DXPL cache values for later use */
+        if (H5D_get_dxpl_cache(dxpl_id,&dxpl_cache)<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
+#ifdef H5_HAVE_PARALLEL
+    } /* end else */
+#endif  /* H5_HAVE_PARALLEL */
+
+    /* Initialize storage info for this dataset */
+    store.contig.dset_addr=dset->shared->layout.u.contig.addr;
+    store.contig.dset_size=dset->shared->layout.u.contig.size;
+
+    /* Get size of elements */
+    elmt_size=H5T_get_size(dset->shared->type);
+    assert(elmt_size>0);
+
+    /* Get the number of elements in the dataset's dataspace */
+    snpoints = H5S_GET_EXTENT_NPOINTS(dset->shared->space);
+    assert(snpoints>=0);
+    H5_ASSIGN_OVERFLOW(npoints,snpoints,hssize_t,size_t);
+
+    /* If fill value is not library default, use it to set the element size */
+    if(dset->shared->fill.buf)
+        elmt_size=dset->shared->fill.size;
+
+    /*
+     * Fill the entire current extent with the fill value.  We can do
+     * this quite efficiently by making sure we copy the fill value
+     * in relatively large pieces.
+     */
+    ptsperbuf = MAX(1, bufsize/elmt_size);
+    bufsize = ptsperbuf*elmt_size;
+
+    /* Fill the buffer with the user's fill value */
+    if(dset->shared->fill.buf) {
+        /* Allocate temporary buffer */
+        if ((buf=H5FL_BLK_MALLOC(non_zero_fill,bufsize))==NULL)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for fill buffer")
+
+        H5V_array_fill(buf, dset->shared->fill.buf, elmt_size, ptsperbuf);
+
+        /* Indicate that a non-zero fill buffer was used */
+        non_zero_fill_f=1;
+    } /* end if */
+    else {      /* Fill the buffer with the default fill value */
+        htri_t buf_avail;
+
+        /* Check if there is an already zeroed out buffer available */
+        buf_avail=H5FL_BLK_AVAIL(zero_fill,bufsize);
+        assert(buf_avail!=FAIL);
+
+        /* Allocate temporary buffer (zeroing it if no buffer is available) */
+        if(!buf_avail)
+            buf=H5FL_BLK_CALLOC(zero_fill,bufsize);
+        else
+            buf=H5FL_BLK_MALLOC(zero_fill,bufsize);
+        if(buf==NULL)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for fill buffer")
+
+        /* Indicate that a zero fill buffer was used */
+        non_zero_fill_f=0;
+    } /* end else */
+
+    /* Start at the beginning of the dataset */
+    offset = 0;
+
+    /* Loop through writing the fill value to the dataset */
+    while (npoints>0) {
+          size = MIN(ptsperbuf, npoints) * elmt_size;
+
+#ifdef H5_HAVE_PARALLEL
+            /* Check if this file is accessed with an MPI-capable file driver */
+            if(using_mpi) {
+                /* Write the chunks out from only one process */
+                /* !! Use the internal "independent" DXPL!! -QAK */
+                if(H5_PAR_META_WRITE==mpi_rank) {
+                    if (H5D_contig_write(dset, dxpl_cache, H5AC_ind_dxpl_id, &store, offset, size, buf)<0)
+                        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to write fill value to dataset")
+                } /* end if */
+
+                /* Indicate that blocks are being written */
+                blocks_written=1;
+            } /* end if */
+            else {
+#endif /* H5_HAVE_PARALLEL */
+                H5_CHECK_OVERFLOW(size,size_t,hsize_t);
+                if (H5D_contig_write(dset, dxpl_cache, dxpl_id, &store, offset, size, buf)<0)
+                    HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to write fill value to dataset")
+#ifdef H5_HAVE_PARALLEL
+            } /* end else */
+#endif /* H5_HAVE_PARALLEL */
+
+          npoints -= MIN(ptsperbuf, npoints);
+          offset += size;
+      } /* end while */
+
+#ifdef H5_HAVE_PARALLEL
+    /* Only need to block at the barrier if we actually wrote fill values */
+    /* And if we are using an MPI-capable file driver */
+    if(using_mpi && blocks_written) {
+        /* Wait at barrier to avoid race conditions where some processes are
+         * still writing out fill values and other processes race ahead to data
+         * in, getting bogus data.
+         */
+        if (MPI_SUCCESS != (mpi_code=MPI_Barrier(mpi_comm)))
+            HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code)
+    } /* end if */
+#endif /* H5_HAVE_PARALLEL */
+
+done:
+    /* Free the buffer for fill values */
+    if (buf) {
+        assert(non_zero_fill_f>=0);
+        if(non_zero_fill_f)
+            H5FL_BLK_FREE(non_zero_fill,buf);
+        else
+            H5FL_BLK_FREE(zero_fill,buf);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_contig_fill() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_contig_delete
+ *
+ * Purpose:	Delete the file space for a contiguously stored dataset
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		March 20, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_contig_delete(H5F_t *f, hid_t dxpl_id, const struct H5O_layout_t *layout)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_contig_delete, FAIL)
+
+    /* check args */
+    assert(f);
+    assert(layout);
+
+    /* Free the file space for the chunk */
+    if (H5MF_xfree(f, H5FD_MEM_DRAW, dxpl_id, layout->u.contig.addr, layout->u.contig.size)<0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTFREE, FAIL, "unable to free object header")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_contig_delete */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_contig_get_addr
+ *
+ * Purpose:	Get the offset of the contiguous data on disk
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		June  2, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5D_contig_get_addr(const H5D_t *dset)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5D_contig_get_addr)
+
+    /* check args */
+    assert(dset);
+    assert(dset->shared->layout.type==H5D_CONTIGUOUS);
+
+    FUNC_LEAVE_NOAPI(dset->shared->layout.u.contig.addr)
+} /* end H5D_contig_get_addr */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_contig_write
+ *
+ * Purpose:	Writes some data from a dataset into a buffer.
+ *		The data is contiguous.	 The address is relative to the base
+ *		address for the file.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, September 28, 2000
+ *
+ * Modifications:
+ *              Re-written in terms of the new writevv call, QAK, 5/7/03
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_contig_write(H5D_t *dset, const H5D_dxpl_cache_t *dxpl_cache,
+    hid_t dxpl_id, const H5D_storage_t *store,
+    hsize_t offset, size_t size, const void *buf)
+{
+    H5D_io_info_t io_info;      /* Dataset I/O info */
+    hsize_t dset_off=offset;    /* Offset in dataset */
+    size_t dset_len=size;       /* Length in dataset */
+    size_t dset_curr_seq=0;     /* "Current sequence" in dataset */
+    hsize_t mem_off=0;          /* Offset in memory */
+    size_t mem_len=size;        /* Length in memory */
+    size_t mem_curr_seq=0;      /* "Current sequence" in memory */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_contig_write, FAIL)
+
+    assert (dset);
+    assert (dxpl_cache);
+    assert (store);
+    assert (buf);
+
+    H5D_BUILD_IO_INFO(&io_info,dset,dxpl_cache,dxpl_id,store);
+    if (H5D_contig_writevv(&io_info,
+            1, &dset_curr_seq, &dset_len, &dset_off, 1, &mem_curr_seq, &mem_len, &mem_off, buf)<0)
+        HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "vector write failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5D_contig_write() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_contig_readvv
+ *
+ * Purpose:	Reads some data vectors from a dataset into a buffer.
+ *		The data is contiguous.	 The address is the start of the dataset,
+ *              relative to the base address for the file and the offsets and
+ *              sequence lengths are in bytes.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, May 3, 2001
+ *
+ * Notes:
+ *      Offsets in the sequences must be monotonically increasing
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+ssize_t
+H5D_contig_readvv(const H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[],
+    void *_buf)
+{
+    H5F_t *file=io_info->dset->ent.file;        /* File for dataset */
+    H5D_rdcdc_t *dset_contig=&(io_info->dset->shared->cache.contig); /* Cached information about contiguous data */
+    const H5D_contig_storage_t *store_contig=&(io_info->store->contig);    /* Contiguous storage info for this I/O operation */
+    unsigned char *buf=(unsigned char *)_buf;   /* Pointer to buffer to fill */
+    haddr_t addr;               /* Actual address to read */
+    size_t total_size=0;        /* Total size of sequence in bytes */
+    size_t size;                /* Size of sequence in bytes */
+    size_t u;                   /* Counting variable */
+    size_t v;                   /* Counting variable */
+    ssize_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_contig_readvv, FAIL)
+
+    /* Check args */
+    assert(io_info);
+    assert(io_info->dset);
+    assert(io_info->store);
+    assert(buf);
+
+    /* Check if data sieving is enabled */
+    if(H5F_HAS_FEATURE(file,H5FD_FEAT_DATA_SIEVE)) {
+        haddr_t sieve_start=HADDR_UNDEF, sieve_end=HADDR_UNDEF;     /* Start & end locations of sieve buffer */
+        haddr_t contig_end;             /* End locations of block to write */
+        size_t sieve_size=(size_t)-1;   /* size of sieve buffer */
+        haddr_t abs_eoa;	        /* Absolute end of file address		*/
+        haddr_t rel_eoa;	        /* Relative end of file address		*/
+        hsize_t max_data;               /* Actual maximum size of data to cache */
+
+        /* Set offsets in sequence lists */
+        u=*dset_curr_seq;
+        v=*mem_curr_seq;
+
+        /* Stash local copies of these value */
+        if(dset_contig->sieve_buf!=NULL) {
+            sieve_start=dset_contig->sieve_loc;
+            sieve_size=dset_contig->sieve_size;
+            sieve_end=sieve_start+sieve_size;
+        } /* end if */
+
+        /* Works through sequences as fast as possible */
+        for(; u<dset_max_nseq && v<mem_max_nseq; ) {
+            /* Choose smallest buffer to write */
+            if(mem_len_arr[v]<dset_len_arr[u])
+                size=mem_len_arr[v];
+            else
+                size=dset_len_arr[u];
+
+            /* Compute offset on disk */
+            addr=store_contig->dset_addr+dset_offset_arr[u];
+
+            /* Compute offset in memory */
+            buf = (unsigned char *)_buf + mem_offset_arr[v];
+
+            /* Check if the sieve buffer is allocated yet */
+            if(dset_contig->sieve_buf==NULL) {
+                /* Check if we can actually hold the I/O request in the sieve buffer */
+                if(size>dset_contig->sieve_buf_size) {
+                    if (H5F_block_read(file, H5FD_MEM_DRAW, addr, size, io_info->dxpl_id, buf)<0)
+                        HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "block read failed")
+                } /* end if */
+                else {
+                    /* Allocate room for the data sieve buffer */
+                    if (NULL==(dset_contig->sieve_buf=H5FL_BLK_MALLOC(sieve_buf,dset_contig->sieve_buf_size)))
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+                    /* Determine the new sieve buffer size & location */
+                    dset_contig->sieve_loc=addr;
+
+                    /* Make certain we don't read off the end of the file */
+                    if (HADDR_UNDEF==(abs_eoa=H5F_get_eoa(file)))
+                        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to determine file size")
+
+                    /* Adjust absolute EOA address to relative EOA address */
+                    rel_eoa=abs_eoa-H5F_get_base_addr(file);
+
+                    /* Set up the buffer parameters */
+                    max_data=store_contig->dset_size-dset_offset_arr[u];
+
+                    /* Compute the size of the sieve buffer */
+                    H5_ASSIGN_OVERFLOW(dset_contig->sieve_size,MIN3(rel_eoa-dset_contig->sieve_loc,max_data,dset_contig->sieve_buf_size),hsize_t,size_t);
+
+                    /* Read the new sieve buffer */
+                    if (H5F_block_read(file, H5FD_MEM_DRAW, dset_contig->sieve_loc, dset_contig->sieve_size, io_info->dxpl_id, dset_contig->sieve_buf)<0)
+                        HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "block read failed")
+
+                    /* Grab the data out of the buffer (must be first piece of data in buffer ) */
+                    HDmemcpy(buf,dset_contig->sieve_buf,size);
+
+                    /* Reset sieve buffer dirty flag */
+                    dset_contig->sieve_dirty=0;
+
+                    /* Stash local copies of these value */
+                    sieve_start=dset_contig->sieve_loc;
+                    sieve_size=dset_contig->sieve_size;
+                    sieve_end=sieve_start+sieve_size;
+                } /* end else */
+            } /* end if */
+            else {
+                /* Compute end of sequence to retrieve */
+                contig_end=addr+size-1;
+
+                /* If entire read is within the sieve buffer, read it from the buffer */
+                if(addr>=sieve_start && contig_end<sieve_end) {
+                    unsigned char *base_sieve_buf=dset_contig->sieve_buf+(addr-sieve_start);
+
+                    /* Grab the data out of the buffer */
+                    HDmemcpy(buf,base_sieve_buf,size);
+                } /* end if */
+                /* Entire request is not within this data sieve buffer */
+                else {
+                    /* Check if we can actually hold the I/O request in the sieve buffer */
+                    if(size>dset_contig->sieve_buf_size) {
+                        /* Check for any overlap with the current sieve buffer */
+                        if((sieve_start>=addr && sieve_start<(contig_end+1))
+                                || ((sieve_end-1)>=addr && (sieve_end-1)<(contig_end+1))) {
+                            /* Flush the sieve buffer, if it's dirty */
+                            if(dset_contig->sieve_dirty) {
+                                /* Write to file */
+                                if (H5F_block_write(file, H5FD_MEM_DRAW, sieve_start, sieve_size, io_info->dxpl_id, dset_contig->sieve_buf)<0)
+                                    HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "block write failed")
+
+                                /* Reset sieve buffer dirty flag */
+                                dset_contig->sieve_dirty=0;
+                            } /* end if */
+                        } /* end if */
+
+                        /* Read directly into the user's buffer */
+                        if (H5F_block_read(file, H5FD_MEM_DRAW, addr, size, io_info->dxpl_id, buf)<0)
+                            HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "block read failed")
+                    } /* end if */
+                    /* Element size fits within the buffer size */
+                    else {
+                        /* Flush the sieve buffer if it's dirty */
+                        if(dset_contig->sieve_dirty) {
+                            /* Write to file */
+                            if (H5F_block_write(file, H5FD_MEM_DRAW, sieve_start, sieve_size, io_info->dxpl_id, dset_contig->sieve_buf)<0)
+                                HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "block write failed")
+
+                            /* Reset sieve buffer dirty flag */
+                            dset_contig->sieve_dirty=0;
+                        } /* end if */
+
+                        /* Determine the new sieve buffer size & location */
+                        dset_contig->sieve_loc=addr;
+
+                        /* Make certain we don't read off the end of the file */
+                        if (HADDR_UNDEF==(abs_eoa=H5F_get_eoa(file)))
+                            HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to determine file size")
+
+                        /* Adjust absolute EOA address to relative EOA address */
+                        rel_eoa=abs_eoa-H5F_get_base_addr(file);
+
+                        /* Only need this when resizing sieve buffer */
+                        max_data=store_contig->dset_size-dset_offset_arr[u];
+
+                        /* Compute the size of the sieve buffer */
+                        /* Don't read off the end of the file, don't read past the end of the data element and don't read more than the buffer size */
+                        H5_ASSIGN_OVERFLOW(dset_contig->sieve_size,MIN3(rel_eoa-dset_contig->sieve_loc,max_data,dset_contig->sieve_buf_size),hsize_t,size_t);
+
+                        /* Update local copies of sieve information */
+                        sieve_start=dset_contig->sieve_loc;
+                        sieve_size=dset_contig->sieve_size;
+                        sieve_end=sieve_start+sieve_size;
+
+                        /* Read the new sieve buffer */
+                        if (H5F_block_read(file, H5FD_MEM_DRAW, dset_contig->sieve_loc, dset_contig->sieve_size, io_info->dxpl_id, dset_contig->sieve_buf)<0)
+                            HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "block read failed")
+
+                        /* Grab the data out of the buffer (must be first piece of data in buffer ) */
+                        HDmemcpy(buf,dset_contig->sieve_buf,size);
+
+                        /* Reset sieve buffer dirty flag */
+                        dset_contig->sieve_dirty=0;
+                    } /* end else */
+                } /* end else */
+            } /* end else */
+
+            /* Update memory information */
+            mem_len_arr[v]-=size;
+            mem_offset_arr[v]+=size;
+            if(mem_len_arr[v]==0)
+                v++;
+
+            /* Update file information */
+            dset_len_arr[u]-=size;
+            dset_offset_arr[u]+=size;
+            if(dset_len_arr[u]==0)
+                u++;
+
+            /* Increment number of bytes copied */
+            total_size+=size;
+        } /* end for */
+    } /* end if */
+    else {
+        /* Work through all the sequences */
+        for(u=*dset_curr_seq, v=*mem_curr_seq; u<dset_max_nseq && v<mem_max_nseq; ) {
+            /* Choose smallest buffer to write */
+            if(mem_len_arr[v]<dset_len_arr[u])
+                size=mem_len_arr[v];
+            else
+                size=dset_len_arr[u];
+
+            /* Compute offset on disk */
+            addr=store_contig->dset_addr+dset_offset_arr[u];
+
+            /* Compute offset in memory */
+            buf = (unsigned char *)_buf + mem_offset_arr[v];
+
+            /* Write data */
+            if (H5F_block_read(file, H5FD_MEM_DRAW, addr, size, io_info->dxpl_id, buf)<0)
+                HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "block write failed")
+
+            /* Update memory information */
+            mem_len_arr[v]-=size;
+            mem_offset_arr[v]+=size;
+            if(mem_len_arr[v]==0)
+                v++;
+
+            /* Update file information */
+            dset_len_arr[u]-=size;
+            dset_offset_arr[u]+=size;
+            if(dset_len_arr[u]==0)
+                u++;
+
+            /* Increment number of bytes copied */
+            total_size+=size;
+        } /* end for */
+    } /* end else */
+
+    /* Update current sequence vectors */
+    *dset_curr_seq=u;
+    *mem_curr_seq=v;
+
+    /* Set return value */
+    H5_ASSIGN_OVERFLOW(ret_value,total_size,size_t,ssize_t);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5D_contig_readvv() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_contig_writevv
+ *
+ * Purpose:	Writes some data vectors into a dataset from vectors into a
+ *              buffer.  The address is the start of the dataset,
+ *              relative to the base address for the file and the offsets and
+ *              sequence lengths are in bytes.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, May 2, 2003
+ *
+ * Notes:
+ *      Offsets in the sequences must be monotonically increasing
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+ssize_t
+H5D_contig_writevv(const H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[],
+    const void *_buf)
+{
+    H5F_t *file=io_info->dset->ent.file;        /* File for dataset */
+    H5D_rdcdc_t *dset_contig=&(io_info->dset->shared->cache.contig); /* Cached information about contiguous data */
+    const H5D_contig_storage_t *store_contig=&(io_info->store->contig);    /* Contiguous storage info for this I/O operation */
+    const unsigned char *buf=_buf;      /* Pointer to buffer to fill */
+    haddr_t addr;               /* Actual address to read */
+    size_t total_size=0;        /* Size of sequence in bytes */
+    size_t size;                /* Size of sequence in bytes */
+    size_t u;                   /* Counting variable */
+    size_t v;                   /* Counting variable */
+    ssize_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_contig_writevv, FAIL)
+
+    /* Check args */
+    assert(io_info);
+    assert(io_info->dset);
+    assert(io_info->store);
+    assert(buf);
+
+    /* Check if data sieving is enabled */
+    if(H5F_HAS_FEATURE(file,H5FD_FEAT_DATA_SIEVE)) {
+        haddr_t sieve_start=HADDR_UNDEF, sieve_end=HADDR_UNDEF;     /* Start & end locations of sieve buffer */
+        haddr_t contig_end;             /* End locations of block to write */
+        size_t sieve_size=(size_t)-1;   /* size of sieve buffer */
+        haddr_t abs_eoa;	        /* Absolute end of file address		*/
+        haddr_t rel_eoa;	        /* Relative end of file address		*/
+        hsize_t max_data;               /* Actual maximum size of data to cache */
+
+        /* Set offsets in sequence lists */
+        u=*dset_curr_seq;
+        v=*mem_curr_seq;
+
+        /* Stash local copies of these values */
+        if(dset_contig->sieve_buf!=NULL) {
+            sieve_start=dset_contig->sieve_loc;
+            sieve_size=dset_contig->sieve_size;
+            sieve_end=sieve_start+sieve_size;
+        } /* end if */
+
+        /* Works through sequences as fast as possible */
+        for(; u<dset_max_nseq && v<mem_max_nseq; ) {
+            /* Choose smallest buffer to write */
+            if(mem_len_arr[v]<dset_len_arr[u])
+                size=mem_len_arr[v];
+            else
+                size=dset_len_arr[u];
+
+            /* Compute offset on disk */
+            addr=store_contig->dset_addr+dset_offset_arr[u];
+
+            /* Compute offset in memory */
+            buf = (const unsigned char *)_buf + mem_offset_arr[v];
+
+            /* No data sieve buffer yet, go allocate one */
+            if(dset_contig->sieve_buf==NULL) {
+                /* Check if we can actually hold the I/O request in the sieve buffer */
+                if(size>dset_contig->sieve_buf_size) {
+                    if (H5F_block_write(file, H5FD_MEM_DRAW, addr, size, io_info->dxpl_id, buf)<0)
+                        HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "block write failed")
+                } /* end if */
+                else {
+                    /* Allocate room for the data sieve buffer */
+                    if (NULL==(dset_contig->sieve_buf=H5FL_BLK_MALLOC(sieve_buf,dset_contig->sieve_buf_size)))
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+                    /* Determine the new sieve buffer size & location */
+                    dset_contig->sieve_loc=addr;
+
+                    /* Make certain we don't read off the end of the file */
+                    if (HADDR_UNDEF==(abs_eoa=H5F_get_eoa(file)))
+                        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to determine file size")
+
+                    /* Adjust absolute EOA address to relative EOA address */
+                    rel_eoa=abs_eoa-H5F_get_base_addr(file);
+
+                    /* Set up the buffer parameters */
+                    max_data=store_contig->dset_size-dset_offset_arr[u];
+
+                    /* Compute the size of the sieve buffer */
+                    H5_ASSIGN_OVERFLOW(dset_contig->sieve_size,MIN3(rel_eoa-dset_contig->sieve_loc,max_data,dset_contig->sieve_buf_size),hsize_t,size_t);
+
+                    /* Check if there is any point in reading the data from the file */
+                    if(dset_contig->sieve_size>size) {
+                        /* Read the new sieve buffer */
+                        if (H5F_block_read(file, H5FD_MEM_DRAW, dset_contig->sieve_loc, dset_contig->sieve_size, io_info->dxpl_id, dset_contig->sieve_buf)<0)
+                            HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "block read failed")
+                    } /* end if */
+
+                    /* Grab the data out of the buffer (must be first piece of data in buffer ) */
+                    HDmemcpy(dset_contig->sieve_buf,buf,size);
+
+                    /* Set sieve buffer dirty flag */
+                    dset_contig->sieve_dirty=1;
+
+                    /* Stash local copies of these values */
+                    sieve_start=dset_contig->sieve_loc;
+                    sieve_size=dset_contig->sieve_size;
+                    sieve_end=sieve_start+sieve_size;
+                } /* end else */
+            } /* end if */
+            else {
+                /* Compute end of sequence to retrieve */
+                contig_end=addr+size-1;
+
+                /* If entire write is within the sieve buffer, write it to the buffer */
+                if(addr>=sieve_start && contig_end<sieve_end) {
+                    unsigned char *base_sieve_buf=dset_contig->sieve_buf+(addr-sieve_start);
+
+                    /* Put the data into the sieve buffer */
+                    HDmemcpy(base_sieve_buf,buf,size);
+
+                    /* Set sieve buffer dirty flag */
+                    dset_contig->sieve_dirty=1;
+                } /* end if */
+                /* Entire request is not within this data sieve buffer */
+                else {
+                    /* Check if we can actually hold the I/O request in the sieve buffer */
+                    if(size>dset_contig->sieve_buf_size) {
+                        /* Check for any overlap with the current sieve buffer */
+                        if((sieve_start>=addr && sieve_start<(contig_end+1))
+                                || ((sieve_end-1)>=addr && (sieve_end-1)<(contig_end+1))) {
+                            /* Flush the sieve buffer, if it's dirty */
+                            if(dset_contig->sieve_dirty) {
+                                /* Write to file */
+                                if (H5F_block_write(file, H5FD_MEM_DRAW, sieve_start, sieve_size, io_info->dxpl_id, dset_contig->sieve_buf)<0)
+                                    HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "block write failed")
+
+                                /* Reset sieve buffer dirty flag */
+                                dset_contig->sieve_dirty=0;
+                            } /* end if */
+
+                            /* Force the sieve buffer to be re-read the next time */
+                            dset_contig->sieve_loc=HADDR_UNDEF;
+                            dset_contig->sieve_size=0;
+                        } /* end if */
+
+                        /* Write directly from the user's buffer */
+                        if (H5F_block_write(file, H5FD_MEM_DRAW, addr, size, io_info->dxpl_id, buf)<0)
+                            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "block write failed")
+                    } /* end if */
+                    /* Element size fits within the buffer size */
+                    else {
+                        /* Check if it is possible to (exactly) prepend or append to existing (dirty) sieve buffer */
+                        if(((addr+size)==sieve_start || addr==sieve_end) &&
+                                (size+sieve_size)<=dset_contig->sieve_buf_size &&
+                                dset_contig->sieve_dirty) {
+                            /* Prepend to existing sieve buffer */
+                            if((addr+size)==sieve_start) {
+                                /* Move existing sieve information to correct location */
+                                HDmemmove(dset_contig->sieve_buf+size,dset_contig->sieve_buf,dset_contig->sieve_size);
+
+                                /* Copy in new information (must be first in sieve buffer) */
+                                HDmemcpy(dset_contig->sieve_buf,buf,size);
+
+                                /* Adjust sieve location */
+                                dset_contig->sieve_loc=addr;
+
+                            } /* end if */
+                            /* Append to existing sieve buffer */
+                            else {
+                                /* Copy in new information */
+                                HDmemcpy(dset_contig->sieve_buf+sieve_size,buf,size);
+                            } /* end else */
+
+                            /* Adjust sieve size */
+                            dset_contig->sieve_size += size;
+
+                            /* Update local copies of sieve information */
+                            sieve_start=dset_contig->sieve_loc;
+                            sieve_size=dset_contig->sieve_size;
+                            sieve_end=sieve_start+sieve_size;
+                        } /* end if */
+                        /* Can't add the new data onto the existing sieve buffer */
+                        else {
+                            /* Flush the sieve buffer if it's dirty */
+                            if(dset_contig->sieve_dirty) {
+                                /* Write to file */
+                                if (H5F_block_write(file, H5FD_MEM_DRAW, sieve_start, sieve_size, io_info->dxpl_id, dset_contig->sieve_buf)<0)
+                                    HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "block write failed")
+
+                                /* Reset sieve buffer dirty flag */
+                                dset_contig->sieve_dirty=0;
+                            } /* end if */
+
+                            /* Determine the new sieve buffer size & location */
+                            dset_contig->sieve_loc=addr;
+
+                            /* Make certain we don't read off the end of the file */
+                            if (HADDR_UNDEF==(abs_eoa=H5F_get_eoa(file)))
+                                HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to determine file size")
+
+                            /* Adjust absolute EOA address to relative EOA address */
+                            rel_eoa=abs_eoa-H5F_get_base_addr(file);
+
+                            /* Only need this when resizing sieve buffer */
+                            max_data=store_contig->dset_size-dset_offset_arr[u];
+
+                            /* Compute the size of the sieve buffer */
+                            /* Don't read off the end of the file, don't read past the end of the data element and don't read more than the buffer size */
+                            H5_ASSIGN_OVERFLOW(dset_contig->sieve_size,MIN3(rel_eoa-dset_contig->sieve_loc,max_data,dset_contig->sieve_buf_size),hsize_t,size_t);
+
+                            /* Update local copies of sieve information */
+                            sieve_start=dset_contig->sieve_loc;
+                            sieve_size=dset_contig->sieve_size;
+                            sieve_end=sieve_start+sieve_size;
+
+                            /* Check if there is any point in reading the data from the file */
+                            if(dset_contig->sieve_size>size) {
+                                /* Read the new sieve buffer */
+                                if (H5F_block_read(file, H5FD_MEM_DRAW, dset_contig->sieve_loc, dset_contig->sieve_size, io_info->dxpl_id, dset_contig->sieve_buf)<0)
+                                    HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "block read failed")
+                            } /* end if */
+
+                            /* Grab the data out of the buffer (must be first piece of data in buffer ) */
+                            HDmemcpy(dset_contig->sieve_buf,buf,size);
+
+                            /* Set sieve buffer dirty flag */
+                            dset_contig->sieve_dirty=1;
+                        } /* end else */
+                    } /* end else */
+                } /* end else */
+            } /* end else */
+
+            /* Update memory information */
+            mem_len_arr[v]-=size;
+            mem_offset_arr[v]+=size;
+            if(mem_len_arr[v]==0)
+                v++;
+
+            /* Update file information */
+            dset_len_arr[u]-=size;
+            dset_offset_arr[u]+=size;
+            if(dset_len_arr[u]==0)
+                u++;
+
+            /* Increment number of bytes copied */
+            total_size+=size;
+        } /* end for */
+    } /* end if */
+    else {
+        /* Work through all the sequences */
+        for(u=*dset_curr_seq, v=*mem_curr_seq; u<dset_max_nseq && v<mem_max_nseq; ) {
+            /* Choose smallest buffer to write */
+            if(mem_len_arr[v]<dset_len_arr[u])
+                size=mem_len_arr[v];
+            else
+                size=dset_len_arr[u];
+
+            /* Compute offset on disk */
+            addr=store_contig->dset_addr+dset_offset_arr[u];
+
+            /* Compute offset in memory */
+            buf = (const unsigned char *)_buf + mem_offset_arr[v];
+
+            /* Write data */
+            if (H5F_block_write(file, H5FD_MEM_DRAW, addr, size, io_info->dxpl_id, buf)<0)
+                HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "block write failed")
+
+            /* Update memory information */
+            mem_len_arr[v]-=size;
+            mem_offset_arr[v]+=size;
+            if(mem_len_arr[v]==0)
+                v++;
+
+            /* Update file information */
+            dset_len_arr[u]-=size;
+            dset_offset_arr[u]+=size;
+            if(dset_len_arr[u]==0)
+                u++;
+
+            /* Increment number of bytes copied */
+            total_size+=size;
+        } /* end for */
+    } /* end else */
+
+    /* Update current sequence vectors */
+    *dset_curr_seq=u;
+    *mem_curr_seq=v;
+
+    /* Set return value */
+    H5_ASSIGN_OVERFLOW(ret_value,total_size,size_t,ssize_t);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5D_contig_writevv() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Defl.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Defl.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Defl.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,377 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *	       Thursday, September 30, 2004
+ */
+
+#define H5D_PACKAGE		/*suppress error about including H5Dpkg	  */
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dpkg.h"		/* Datasets				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* Files				*/
+
+/* PRIVATE PROTOTYPES */
+static herr_t H5D_efl_read (const H5O_efl_t *efl, haddr_t addr, size_t size,
+    uint8_t *buf);
+static herr_t H5D_efl_write(const H5O_efl_t *efl, haddr_t addr, size_t size,
+    const uint8_t *buf);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_efl_read
+ *
+ * Purpose:	Reads data from an external file list.  It is an error to
+ *		read past the logical end of file, but reading past the end
+ *		of any particular member of the external file list results in
+ *		zeros.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, March  4, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_efl_read (const H5O_efl_t *efl, haddr_t addr, size_t size, uint8_t *buf)
+{
+    int		fd=-1;
+    size_t	to_read;
+#ifndef NDEBUG
+    hsize_t     tempto_read;
+#endif /* NDEBUG */
+    hsize_t     skip=0;
+    haddr_t     cur;
+    ssize_t	n;
+    size_t      u;                      /* Local index variable */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_efl_read)
+
+    /* Check args */
+    assert (efl && efl->nused>0);
+    assert (H5F_addr_defined (addr));
+    assert (size < SIZET_MAX);
+    assert (buf || 0==size);
+
+    /* Find the first efl member from which to read */
+    for (u=0, cur=0; u<efl->nused; u++) {
+	if (H5O_EFL_UNLIMITED==efl->slot[u].size || addr < cur+efl->slot[u].size) {
+	    skip = addr - cur;
+	    break;
+	}
+  	cur += efl->slot[u].size;
+    }
+
+    /* Read the data */
+    while (size) {
+        assert(buf);
+	if (u>=efl->nused)
+	    HGOTO_ERROR (H5E_EFL, H5E_OVERFLOW, FAIL, "read past logical end of file")
+	if (H5F_OVERFLOW_HSIZET2OFFT (efl->slot[u].offset+skip))
+	    HGOTO_ERROR (H5E_EFL, H5E_OVERFLOW, FAIL, "external file address overflowed")
+	if ((fd=HDopen (efl->slot[u].name, O_RDONLY, 0))<0)
+	    HGOTO_ERROR (H5E_EFL, H5E_CANTOPENFILE, FAIL, "unable to open external raw data file")
+	if (HDlseek (fd, (off_t)(efl->slot[u].offset+skip), SEEK_SET)<0)
+	    HGOTO_ERROR (H5E_EFL, H5E_SEEKERROR, FAIL, "unable to seek in external raw data file")
+#ifndef NDEBUG
+	tempto_read = MIN(efl->slot[u].size-skip,(hsize_t)size);
+        H5_CHECK_OVERFLOW(tempto_read,hsize_t,size_t);
+	to_read = (size_t)tempto_read;
+#else /* NDEBUG */
+	to_read = MIN((size_t)(efl->slot[u].size-skip), size);
+#endif /* NDEBUG */
+	if ((n=HDread (fd, buf, to_read))<0) {
+	    HGOTO_ERROR (H5E_EFL, H5E_READERROR, FAIL, "read error in external raw data file")
+	} else if ((size_t)n<to_read) {
+	    HDmemset (buf+n, 0, to_read-n);
+	}
+	HDclose (fd);
+	fd = -1;
+	size -= to_read;
+	buf += to_read;
+	skip = 0;
+	u++;
+    }
+
+done:
+    if (fd>=0)
+        HDclose (fd);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_efl_write
+ *
+ * Purpose:	Writes data to an external file list.  It is an error to
+ *		write past the logical end of file, but writing past the end
+ *		of any particular member of the external file list just
+ *		extends that file.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, March  4, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_efl_write (const H5O_efl_t *efl, haddr_t addr, size_t size, const uint8_t *buf)
+{
+    int		fd=-1;
+    size_t	to_write;
+#ifndef NDEBUG
+    hsize_t	tempto_write;
+#endif /* NDEBUG */
+    haddr_t     cur;
+    hsize_t     skip=0;
+    size_t	u;                      /* Local index variable */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_efl_write)
+
+    /* Check args */
+    assert (efl && efl->nused>0);
+    assert (H5F_addr_defined (addr));
+    assert (size < SIZET_MAX);
+    assert (buf || 0==size);
+
+    /* Find the first efl member in which to write */
+    for (u=0, cur=0; u<efl->nused; u++) {
+	if (H5O_EFL_UNLIMITED==efl->slot[u].size || addr < cur+efl->slot[u].size) {
+	    skip = addr - cur;
+	    break;
+	}
+	cur += efl->slot[u].size;
+    }
+
+    /* Write the data */
+    while (size) {
+        assert(buf);
+	if (u>=efl->nused)
+	    HGOTO_ERROR (H5E_EFL, H5E_OVERFLOW, FAIL, "write past logical end of file")
+	if (H5F_OVERFLOW_HSIZET2OFFT (efl->slot[u].offset+skip))
+	    HGOTO_ERROR (H5E_EFL, H5E_OVERFLOW, FAIL, "external file address overflowed")
+	if ((fd=HDopen (efl->slot[u].name, O_CREAT|O_RDWR, 0666))<0) {
+	    if (HDaccess (efl->slot[u].name, F_OK)<0) {
+		HGOTO_ERROR (H5E_EFL, H5E_CANTOPENFILE, FAIL, "external raw data file does not exist")
+	    } else {
+		HGOTO_ERROR (H5E_EFL, H5E_CANTOPENFILE, FAIL, "unable to open external raw data file")
+	    }
+	}
+	if (HDlseek (fd, (off_t)(efl->slot[u].offset+skip), SEEK_SET)<0)
+	    HGOTO_ERROR (H5E_EFL, H5E_SEEKERROR, FAIL, "unable to seek in external raw data file")
+#ifndef NDEBUG
+	tempto_write = MIN(efl->slot[u].size-skip,(hsize_t)size);
+        H5_CHECK_OVERFLOW(tempto_write,hsize_t,size_t);
+        to_write = (size_t)tempto_write;
+#else /* NDEBUG */
+	to_write = MIN((size_t)(efl->slot[u].size-skip), size);
+#endif /* NDEBUG */
+	if ((size_t)HDwrite (fd, buf, to_write)!=to_write)
+	    HGOTO_ERROR (H5E_EFL, H5E_READERROR, FAIL, "write error in external raw data file")
+	HDclose (fd);
+	fd = -1;
+	size -= to_write;
+	buf += to_write;
+	skip = 0;
+	u++;
+    }
+
+done:
+    if (fd>=0)
+        HDclose (fd);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_efl_readvv
+ *
+ * Purpose:	Reads data from an external file list.  It is an error to
+ *		read past the logical end of file, but reading past the end
+ *		of any particular member of the external file list results in
+ *		zeros.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, May  7, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+ssize_t
+H5D_efl_readvv(const H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[],
+    void *_buf)
+{
+    const H5O_efl_t *efl=&(io_info->store->efl); /* Pointer to efl info */
+    unsigned char *buf;         /* Pointer to buffer to write */
+    haddr_t addr;               /* Actual address to read */
+    size_t total_size=0;        /* Total size of sequence in bytes */
+    size_t size;                /* Size of sequence in bytes */
+    size_t u;                   /* Counting variable */
+    size_t v;                   /* Counting variable */
+    ssize_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_efl_readvv, FAIL)
+
+    /* Check args */
+    assert (efl && efl->nused>0);
+    assert (_buf);
+
+    /* Work through all the sequences */
+    for(u=*dset_curr_seq, v=*mem_curr_seq; u<dset_max_nseq && v<mem_max_nseq; ) {
+        /* Choose smallest buffer to write */
+        if(mem_len_arr[v]<dset_len_arr[u])
+            size=mem_len_arr[v];
+        else
+            size=dset_len_arr[u];
+
+        /* Compute offset on disk */
+        addr=dset_offset_arr[u];
+
+        /* Compute offset in memory */
+        buf = (unsigned char *)_buf + mem_offset_arr[v];
+
+        /* Read data */
+        if (H5D_efl_read(efl, addr, size, buf)<0)
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "block write failed")
+
+        /* Update memory information */
+        mem_len_arr[v]-=size;
+        mem_offset_arr[v]+=size;
+        if(mem_len_arr[v]==0)
+            v++;
+
+        /* Update file information */
+        dset_len_arr[u]-=size;
+        dset_offset_arr[u]+=size;
+        if(dset_len_arr[u]==0)
+            u++;
+
+        /* Increment number of bytes copied */
+        total_size+=size;
+    } /* end for */
+
+    /* Update current sequence vectors */
+    *dset_curr_seq=u;
+    *mem_curr_seq=v;
+
+    /* Set return value */
+    H5_ASSIGN_OVERFLOW(ret_value,total_size,size_t,ssize_t);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_efl_readvv() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_efl_writevv
+ *
+ * Purpose:	Writes data to an external file list.  It is an error to
+ *		write past the logical end of file, but writing past the end
+ *		of any particular member of the external file list just
+ *		extends that file.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, May  2, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+ssize_t
+H5D_efl_writevv(const H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[],
+    const void *_buf)
+{
+    const H5O_efl_t *efl=&(io_info->store->efl); /* Pointer to efl info */
+    const unsigned char *buf;   /* Pointer to buffer to write */
+    haddr_t addr;               /* Actual address to read */
+    size_t total_size=0;        /* Total size of sequence in bytes */
+    size_t size;                /* Size of sequence in bytes */
+    size_t u;                   /* Counting variable */
+    size_t v;                   /* Counting variable */
+    ssize_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_efl_writevv, FAIL)
+
+    /* Check args */
+    assert (efl && efl->nused>0);
+    assert (_buf);
+
+    /* Work through all the sequences */
+    for(u=*dset_curr_seq, v=*mem_curr_seq; u<dset_max_nseq && v<mem_max_nseq; ) {
+        /* Choose smallest buffer to write */
+        if(mem_len_arr[v]<dset_len_arr[u])
+            size=mem_len_arr[v];
+        else
+            size=dset_len_arr[u];
+
+        /* Compute offset on disk */
+        addr=dset_offset_arr[u];
+
+        /* Compute offset in memory */
+        buf = (const unsigned char *)_buf + mem_offset_arr[v];
+
+        /* Write data */
+        if (H5D_efl_write(efl, addr, size, buf)<0)
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "block write failed")
+
+        /* Update memory information */
+        mem_len_arr[v]-=size;
+        mem_offset_arr[v]+=size;
+        if(mem_len_arr[v]==0)
+            v++;
+
+        /* Update file information */
+        dset_len_arr[u]-=size;
+        dset_offset_arr[u]+=size;
+        if(dset_len_arr[u]==0)
+            u++;
+
+        /* Increment number of bytes copied */
+        total_size+=size;
+    } /* end for */
+
+    /* Update current sequence vectors */
+    *dset_curr_seq=u;
+    *mem_curr_seq=v;
+
+    /* Set return value */
+    H5_ASSIGN_OVERFLOW(ret_value,total_size,size_t,ssize_t);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_efl_writevv() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Dio.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Dio.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Dio.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3365 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5D_PACKAGE		/*suppress error about including H5Dpkg	  */
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dpkg.h"		/* Dataset functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Sprivate.h"		/* Dataspace functions			*/
+#include "H5SLprivate.h"	/* Skip lists				*/
+#include "H5Vprivate.h"		/* Vector and array functions		*/
+
+/*#define H5D_DEBUG*/
+
+#ifdef H5_HAVE_PARALLEL
+/* Remove this if H5R_DATASET_REGION is no longer used in this file */
+#   include "H5Rpublic.h"
+#endif /*H5_HAVE_PARALLEL*/
+
+/* Local macros */
+#define H5D_DEFAULT_SKIPLIST_HEIGHT     8
+
+/* Local typedefs */
+
+/* Information for mapping between file space and memory space */
+
+/* Structure holding information about a chunk's selection for mapping */
+typedef struct H5D_chunk_info_t {
+    hsize_t index;              /* "Index" of chunk in dataset */
+    size_t chunk_points;        /* Number of elements selected in chunk */
+    H5S_t *fspace;              /* Dataspace describing chunk & selection in it */
+    hsize_t coords[H5O_LAYOUT_NDIMS];   /* Coordinates of chunk in file dataset's dataspace */
+    H5S_t *mspace;              /* Dataspace describing selection in memory corresponding to this chunk */
+    unsigned mspace_shared;     /* Indicate that the memory space for a chunk is shared and shouldn't be freed */
+} H5D_chunk_info_t;
+
+/* Main structure holding the mapping between file chunks and memory */
+typedef struct fm_map {
+    H5SL_t *fsel;               /* Skip list containing file dataspaces for all chunks */
+    hsize_t last_index;         /* Index of last chunk operated on */
+    H5D_chunk_info_t *last_chunk_info;  /* Pointer to last chunk's info */
+    const H5S_t *file_space;    /* Pointer to the file dataspace */
+    const H5S_t *mem_space;     /* Pointer to the memory dataspace */
+    unsigned mem_space_copy;    /* Flag to indicate that the memory dataspace must be copied */
+    hsize_t f_dims[H5O_LAYOUT_NDIMS];   /* File dataspace dimensions */
+    H5S_t *mchunk_tmpl;         /* Dataspace template for new memory chunks */
+    unsigned f_ndims;           /* Number of dimensions for file dataspace */
+    H5S_sel_iter_t mem_iter;    /* Iterator for elements in memory selection */
+    unsigned m_ndims;           /* Number of dimensions for memory dataspace */
+    hsize_t chunks[H5O_LAYOUT_NDIMS];   /* Number of chunks in each dimension */
+    hsize_t chunk_dim[H5O_LAYOUT_NDIMS];    /* Size of chunk in each dimension */
+    hsize_t down_chunks[H5O_LAYOUT_NDIMS];   /* "down" size of number of chunks in each dimension */
+    H5O_layout_t *layout;       /* Dataset layout information*/
+    H5S_sel_type msel_type;     /* Selection type in memory */
+} fm_map;
+
+/* Local functions */
+static herr_t H5D_fill(const void *fill, const H5T_t *fill_type, void *buf,
+    const H5T_t *buf_type, const H5S_t *space, hid_t dxpl_id);
+static herr_t H5D_read(H5D_t *dataset, hid_t mem_type_id,
+			const H5S_t *mem_space, const H5S_t *file_space,
+			hid_t dset_xfer_plist, void *buf/*out*/);
+static herr_t H5D_write(H5D_t *dataset, hid_t mem_type_id,
+			 const H5S_t *mem_space, const H5S_t *file_space,
+			 hid_t dset_xfer_plist, const void *buf);
+static herr_t
+H5D_contig_read(H5D_io_info_t *io_info, hsize_t nelmts,
+            const H5T_t *mem_type, const H5S_t *mem_space,
+            const H5S_t *file_space, H5T_path_t *tpath,
+            hid_t src_id, hid_t dst_id, void *buf/*out*/);
+static herr_t
+H5D_contig_write(H5D_io_info_t *io_info, hsize_t nelmts,
+            const H5T_t *mem_type, const H5S_t *mem_space,
+	    const H5S_t *file_space, H5T_path_t *tpath,
+            hid_t src_id, hid_t dst_id, const void *buf);
+static herr_t
+H5D_chunk_read(H5D_io_info_t *io_info, hsize_t nelmts,
+            const H5T_t *mem_type, const H5S_t *mem_space,
+            const H5S_t *file_space, H5T_path_t *tpath,
+            hid_t src_id, hid_t dst_id, void *buf/*out*/);
+static herr_t
+H5D_chunk_write(H5D_io_info_t *io_info, hsize_t nelmts,
+            const H5T_t *mem_type, const H5S_t *mem_space,
+	    const H5S_t *file_space, H5T_path_t *tpath,
+            hid_t src_id, hid_t dst_id, const void *buf);
+#ifdef H5_HAVE_PARALLEL
+/*static herr_t
+H5D_io_assist_mpio(hid_t dxpl_id, H5D_dxpl_cache_t *dxpl_cache,
+            hbool_t *xfer_mode_changed);
+static herr_t
+H5D_io_restore_mpio(hid_t dxpl_id);
+static htri_t
+H5D_get_collective_io_consensus(const H5F_t *file,
+            const htri_t local_opinion,
+            const unsigned flags);
+*/
+static herr_t H5D_ioinfo_make_ind(H5D_io_info_t *io_info);  
+static herr_t H5D_ioinfo_make_coll(H5D_io_info_t *io_info); 
+static herr_t H5D_ioinfo_term(H5D_io_info_t *io_info);
+static herr_t H5D_mpio_get_min_chunk(const H5D_io_info_t *io_info,
+    const fm_map *fm, int *min_chunkf);
+#endif /* H5_HAVE_PARALLEL */
+
+/* I/O info operations */
+static herr_t H5D_ioinfo_init(H5D_t *dset, const H5D_dxpl_cache_t *dxpl_cache,
+    hid_t dxpl_id, const H5S_t *mem_space, const H5S_t *file_space,
+    H5T_path_t *tpath, H5D_io_info_t *io_info);
+
+/* Chunk operations */
+static herr_t H5D_create_chunk_map(const H5D_t *dataset, const H5T_t *mem_type,
+        const H5S_t *file_space, const H5S_t *mem_space, fm_map *fm);
+static herr_t H5D_destroy_chunk_map(const fm_map *fm);
+static herr_t H5D_free_chunk_info(void *item, void *key, void *opdata);
+static herr_t H5D_create_chunk_file_map_hyper(const fm_map *fm);
+static herr_t H5D_create_chunk_mem_map_hyper(const fm_map *fm);
+static herr_t H5D_chunk_file_cb(void *elem, hid_t type_id, unsigned ndims,
+    const hsize_t *coords, void *fm);
+static herr_t H5D_chunk_mem_cb(void *elem, hid_t type_id, unsigned ndims,
+    const hsize_t *coords, void *fm);
+
+/* Declare a free list to manage blocks of single datatype element data */
+H5FL_BLK_DEFINE(type_elem);
+
+/* Declare a free list to manage blocks of type conversion data */
+H5FL_BLK_DEFINE(type_conv);
+
+/* Declare a free list to manage the H5D_chunk_info_t struct */
+H5FL_DEFINE_STATIC(H5D_chunk_info_t);
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Dfill
+ PURPOSE
+    Fill a selection in memory with a value
+ USAGE
+    herr_t H5Dfill(fill, fill_type, space, buf, buf_type)
+        const void *fill;       IN: Pointer to fill value to use
+        hid_t fill_type_id;     IN: Datatype of the fill value
+        void *buf;              IN/OUT: Memory buffer to fill selection within
+        hid_t buf_type_id;      IN: Datatype of the elements in buffer
+        hid_t space_id;         IN: Dataspace describing memory buffer &
+                                    containing selection to use.
+ RETURNS
+    Non-negative on success/Negative on failure.
+ DESCRIPTION
+    Use the selection in the dataspace to fill elements in a memory buffer.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    If "fill" parameter is NULL, use all zeros as fill value
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Dfill(const void *fill, hid_t fill_type_id, void *buf, hid_t buf_type_id, hid_t space_id)
+{
+    H5S_t *space;               /* Dataspace */
+    H5T_t *fill_type;           /* Fill-value datatype */
+    H5T_t *buf_type;            /* Buffer datatype */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_API(H5Dfill, FAIL)
+    H5TRACE5("e","xixii",fill,fill_type_id,buf,buf_type_id,space_id);
+
+    /* Check args */
+    if (buf==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid buffer")
+    if (NULL == (space=H5I_object_verify(space_id, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a dataspace")
+    if (NULL == (fill_type=H5I_object_verify(fill_type_id, H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a datatype")
+    if (NULL == (buf_type=H5I_object_verify(buf_type_id, H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a datatype")
+
+    /* Fill the selection in the memory buffer */
+    if(H5D_fill(fill,fill_type,buf,buf_type,space, H5AC_dxpl_id)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTENCODE, FAIL, "filling selection failed")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}   /* H5Dfill() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5D_fill
+ PURPOSE
+    Fill a selection in memory with a value (internal version)
+ USAGE
+    herr_t H5D_fill(fill, fill_type, buf, buf_type, space)
+        const void *fill;       IN: Pointer to fill value to use
+        H5T_t *fill_type;       IN: Datatype of the fill value
+        void *buf;              IN/OUT: Memory buffer to fill selection within
+        H5T_t *buf_type;        IN: Datatype of the elements in buffer
+        H5S_t *space;           IN: Dataspace describing memory buffer &
+                                    containing selection to use.
+ RETURNS
+    Non-negative on success/Negative on failure.
+ DESCRIPTION
+    Use the selection in the dataspace to fill elements in a memory buffer.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    If "fill" parameter is NULL, use all zeros as fill value.  If "fill_type"
+    parameter is NULL, use "buf_type" for the fill value datatype.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5D_fill(const void *fill, const H5T_t *fill_type, void *buf, const H5T_t *buf_type, const H5S_t *space, hid_t dxpl_id)
+{
+    H5T_path_t *tpath = NULL;   /* Conversion information*/
+    uint8_t *tconv_buf = NULL;  /* Data type conv buffer */
+    uint8_t *bkg_buf = NULL;    /* Temp conversion buffer */
+    hid_t src_id = -1, dst_id = -1;     /* Temporary type IDs */
+    size_t src_type_size;       /* Size of source type	*/
+    size_t dst_type_size;       /* Size of destination type*/
+    size_t buf_size;            /* Desired buffer size	*/
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_fill)
+
+    /* Check args */
+    assert(fill_type);
+    assert(buf);
+    assert(buf_type);
+    assert(space);
+
+    /* Make sure the dataspace has an extent set */
+    if( !(H5S_has_extent(space)) )
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "dataspace extent has not been set")
+
+    /* Get the memory and file datatype sizes */
+    src_type_size = H5T_get_size(fill_type);
+    dst_type_size = H5T_get_size(buf_type);
+
+    /* Get the maximum buffer size needed and allocate it */
+    buf_size=MAX(src_type_size,dst_type_size);
+    if (NULL==(tconv_buf = H5FL_BLK_MALLOC(type_elem,buf_size)) || NULL==(bkg_buf = H5FL_BLK_CALLOC(type_elem,buf_size)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+    /* Check for actual fill value to replicate */
+    if(fill==NULL)
+        /* If there's no fill value, just use zeros */
+        HDmemset(tconv_buf,0,dst_type_size);
+    else {
+        /* Copy the user's data into the buffer for conversion */
+        HDmemcpy(tconv_buf,fill,src_type_size);
+
+        /* Set up type conversion function */
+        if (NULL == (tpath = H5T_path_find(fill_type, buf_type, NULL, NULL, dxpl_id)))
+            HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest data types")
+
+        /* Convert memory buffer into disk buffer */
+        if (!H5T_path_noop(tpath)) {
+            if ((src_id = H5I_register(H5I_DATATYPE, H5T_copy(fill_type, H5T_COPY_ALL)))<0 ||
+                    (dst_id = H5I_register(H5I_DATATYPE, H5T_copy(buf_type, H5T_COPY_ALL)))<0)
+                HGOTO_ERROR(H5E_DATASET, H5E_CANTREGISTER, FAIL, "unable to register types for conversion")
+
+            /* Perform data type conversion */
+            if (H5T_convert(tpath, src_id, dst_id, 1, 0, 0, tconv_buf, bkg_buf, dxpl_id)<0)
+                HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, FAIL, "data type conversion failed")
+        } /* end if */
+    } /* end if */
+
+    /* Fill the selection in the memory buffer */
+    if(H5S_select_fill(tconv_buf, dst_type_size, space, buf)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTENCODE, FAIL, "filling selection failed")
+
+done:
+    if (tconv_buf)
+        H5FL_BLK_FREE(type_elem,tconv_buf);
+    if (bkg_buf)
+        H5FL_BLK_FREE(type_elem,bkg_buf);
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* H5D_fill() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5D_get_dxpl_cache_real
+ PURPOSE
+    Get all the values for the DXPL cache.
+ USAGE
+    herr_t H5D_get_dxpl_cache_real(dxpl_id, cache)
+        hid_t dxpl_id;          IN: DXPL to query
+        H5D_dxpl_cache_t *cache;IN/OUT: DXPL cache to fill with values
+ RETURNS
+    Non-negative on success/Negative on failure.
+ DESCRIPTION
+    Query all the values from a DXPL that are needed by internal routines
+    within the library.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5D_get_dxpl_cache_real(hid_t dxpl_id, H5D_dxpl_cache_t *cache)
+{
+    H5P_genplist_t *dx_plist;   /* Data transfer property list */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_get_dxpl_cache_real,FAIL)
+
+    /* Check args */
+    assert(cache);
+
+    /* Get the dataset transfer property list */
+    if (NULL == (dx_plist = H5I_object(dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
+
+    /* Get maximum temporary buffer size */
+    if(H5P_get(dx_plist, H5D_XFER_MAX_TEMP_BUF_NAME, &cache->max_temp_buf)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve maximum temporary buffer size")
+
+    /* Get temporary buffer pointer */
+    if(H5P_get(dx_plist, H5D_XFER_TCONV_BUF_NAME, &cache->tconv_buf)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve temporary buffer pointer")
+
+    /* Get background buffer pointer */
+    if(H5P_get(dx_plist, H5D_XFER_BKGR_BUF_NAME, &cache->bkgr_buf)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve background buffer pointer")
+
+    /* Get background buffer type */
+    if(H5P_get(dx_plist, H5D_XFER_BKGR_BUF_TYPE_NAME, &cache->bkgr_buf_type)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve background buffer type")
+
+    /* Get B-tree split ratios */
+    if(H5P_get(dx_plist, H5D_XFER_BTREE_SPLIT_RATIO_NAME, &cache->btree_split_ratio)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve B-tree split ratios")
+
+    /* Get I/O vector size */
+    if(H5P_get(dx_plist, H5D_XFER_HYPER_VECTOR_SIZE_NAME, &cache->vec_size)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve I/O vector size")
+
+#ifdef H5_HAVE_PARALLEL
+    /* Collect Parallel I/O information for possible later use */
+    if(H5P_get(dx_plist, H5D_XFER_IO_XFER_MODE_NAME, &cache->xfer_mode)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve parallel transfer method")
+#endif /*H5_HAVE_PARALLEL*/
+
+    /* Get error detection properties */
+    if(H5P_get(dx_plist, H5D_XFER_EDC_NAME, &cache->err_detect)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve error detection info")
+
+    /* Get filter callback function */
+    if(H5P_get(dx_plist, H5D_XFER_FILTER_CB_NAME, &cache->filter_cb)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve filter callback function")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* H5D_get_dxpl_cache_real() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5D_get_dxpl_cache
+ PURPOSE
+    Get all the values for the DXPL cache.
+ USAGE
+    herr_t H5D_get_dxpl_cache(dxpl_id, cache)
+        hid_t dxpl_id;          IN: DXPL to query
+        H5D_dxpl_cache_t *cache;IN/OUT: DXPL cache to fill with values
+ RETURNS
+    Non-negative on success/Negative on failure.
+ DESCRIPTION
+    Query all the values from a DXPL that are needed by internal routines
+    within the library.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    The CACHE pointer should point at already allocated memory to place
+    non-default property list info.  If a default property list is used, the
+    CACHE pointer will be changed to point at the default information.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5D_get_dxpl_cache(hid_t dxpl_id, H5D_dxpl_cache_t **cache)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_get_dxpl_cache,FAIL)
+
+    /* Check args */
+    assert(cache);
+
+    /* Check for the default DXPL */
+    if(dxpl_id==H5P_DATASET_XFER_DEFAULT)
+        *cache=&H5D_def_dxpl_cache;
+    else
+        if(H5D_get_dxpl_cache_real(dxpl_id,*cache)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTGET, FAIL, "Can't retrieve DXPL values")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* H5D_get_dxpl_cache() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Dread
+ *
+ * Purpose:	Reads (part of) a DSET from the file into application
+ *		memory BUF. The part of the dataset to read is defined with
+ *		MEM_SPACE_ID and FILE_SPACE_ID.	 The data points are
+ *		converted from their file type to the MEM_TYPE_ID specified.
+ *		Additional miscellaneous data transfer properties can be
+ *		passed to this function with the PLIST_ID argument.
+ *
+ *		The FILE_SPACE_ID can be the constant H5S_ALL which indicates
+ *		that the entire file data space is to be referenced.
+ *
+ *		The MEM_SPACE_ID can be the constant H5S_ALL in which case
+ *		the memory data space is the same as the file data space
+ *		defined when the dataset was created.
+ *
+ *		The number of elements in the memory data space must match
+ *		the number of elements in the file data space.
+ *
+ *		The PLIST_ID can be the constant H5P_DEFAULT in which
+ *		case the default data transfer properties are used.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Errors:
+ *		ARGS	  BADTYPE	Not a data space.
+ *		ARGS	  BADTYPE	Not a data type.
+ *		ARGS	  BADTYPE	Not a dataset.
+ *		ARGS	  BADTYPE	Not xfer parms.
+ *		ARGS	  BADVALUE	No output buffer.
+ *		DATASET	  READERROR	Can't read data.
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December  4, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Dread(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
+	hid_t file_space_id, hid_t plist_id, void *buf/*out*/)
+{
+    H5D_t		   *dset = NULL;
+    const H5S_t		   *mem_space = NULL;
+    const H5S_t		   *file_space = NULL;
+    herr_t                  ret_value=SUCCEED;  /* Return value */
+
+    FUNC_ENTER_API(H5Dread, FAIL)
+    H5TRACE6("e","iiiiix",dset_id,mem_type_id,mem_space_id,file_space_id,
+             plist_id,buf);
+
+    /* check arguments */
+    if (NULL == (dset = H5I_object_verify(dset_id, H5I_DATASET)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+    if (NULL == dset->ent.file)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+    if (H5S_ALL != mem_space_id) {
+	if (NULL == (mem_space = H5I_object_verify(mem_space_id, H5I_DATASPACE)))
+	    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
+
+	/* Check for valid selection */
+	if(H5S_SELECT_VALID(mem_space)!=TRUE)
+	    HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "selection+offset not within extent")
+    }
+    if (H5S_ALL != file_space_id) {
+	if (NULL == (file_space = H5I_object_verify(file_space_id, H5I_DATASPACE)))
+	    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
+
+	/* Check for valid selection */
+	if(H5S_SELECT_VALID(file_space)!=TRUE)
+	    HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "selection+offset not within extent")
+    }
+
+    /* Get the default dataset transfer property list if the user didn't provide one */
+    if (H5P_DEFAULT == plist_id)
+        plist_id= H5P_DATASET_XFER_DEFAULT;
+    else
+        if (TRUE!=H5P_isa_class(plist_id,H5P_DATASET_XFER))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms")
+    if (!buf && H5S_GET_SELECT_NPOINTS(file_space)!=0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no output buffer")
+
+    /* read raw data */
+    if (H5D_read(dset, mem_type_id, mem_space, file_space, plist_id, buf/*out*/) < 0)
+	HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "can't read data")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Dwrite
+ *
+ * Purpose:	Writes (part of) a DSET from application memory BUF to the
+ *		file.  The part of the dataset to write is defined with the
+ *		MEM_SPACE_ID and FILE_SPACE_ID arguments. The data points
+ *		are converted from their current type (MEM_TYPE_ID) to their
+ *		file data type.	 Additional miscellaneous data transfer
+ *		properties can be passed to this function with the
+ *		PLIST_ID argument.
+ *
+ *		The FILE_SPACE_ID can be the constant H5S_ALL which indicates
+ *		that the entire file data space is to be referenced.
+ *
+ *		The MEM_SPACE_ID can be the constant H5S_ALL in which case
+ *		the memory data space is the same as the file data space
+ *		defined when the dataset was created.
+ *
+ *		The number of elements in the memory data space must match
+ *		the number of elements in the file data space.
+ *
+ *		The PLIST_ID can be the constant H5P_DEFAULT in which
+ *		case the default data transfer properties are used.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Errors:
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December  4, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Dwrite(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
+	 hid_t file_space_id, hid_t plist_id, const void *buf)
+{
+    H5D_t		   *dset = NULL;
+    const H5S_t		   *mem_space = NULL;
+    const H5S_t		   *file_space = NULL;
+    herr_t                  ret_value=SUCCEED;  /* Return value */
+
+    FUNC_ENTER_API(H5Dwrite, FAIL)
+    H5TRACE6("e","iiiiix",dset_id,mem_type_id,mem_space_id,file_space_id,
+             plist_id,buf);
+
+    /* check arguments */
+    if (NULL == (dset = H5I_object_verify(dset_id, H5I_DATASET)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+    if (NULL == dset->ent.file)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+    if (H5S_ALL != mem_space_id) {
+	if (NULL == (mem_space = H5I_object_verify(mem_space_id, H5I_DATASPACE)))
+	    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
+
+	/* Check for valid selection */
+	if (H5S_SELECT_VALID(mem_space)!=TRUE)
+	    HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "memory selection+offset not within extent")
+    }
+    if (H5S_ALL != file_space_id) {
+	if (NULL == (file_space = H5I_object_verify(file_space_id, H5I_DATASPACE)))
+	    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space")
+
+	/* Check for valid selection */
+	if (H5S_SELECT_VALID(file_space)!=TRUE)
+	    HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "file selection+offset not within extent")
+    }
+
+    /* Get the default dataset transfer property list if the user didn't provide one */
+    if (H5P_DEFAULT == plist_id)
+        plist_id= H5P_DATASET_XFER_DEFAULT;
+    else
+        if (TRUE!=H5P_isa_class(plist_id,H5P_DATASET_XFER))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not xfer parms")
+    if (!buf && H5S_GET_SELECT_NPOINTS(file_space)!=0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no output buffer")
+
+    /* write raw data */
+    if (H5D_write(dset, mem_type_id, mem_space, file_space, plist_id, buf) < 0)
+	HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "can't write data")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_read
+ *
+ * Purpose:	Reads (part of) a DATASET into application memory BUF. See
+ *		H5Dread() for complete details.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December  4, 1997
+ *
+ * Modifications:
+ *	Robb Matzke, 1998-06-09
+ *	The data space is no longer cached in the dataset struct.
+ *
+ * 	Robb Matzke, 1998-08-11
+ *	Added timing calls around all the data space I/O functions.
+ *
+ * 	rky, 1998-09-18
+ *	Added must_convert to do non-optimized read when necessary.
+ *
+ *  	Quincey Koziol, 1999-07-02
+ *	Changed xfer_parms parameter to xfer plist parameter, so it
+ *	could be passed to H5T_convert.
+ *
+ *	Albert Cheng, 2000-11-21
+ *	Added the code that when it detects it is not safe to process a
+ *	COLLECTIVE read request without hanging, it changes it to
+ *	INDEPENDENT calls.
+ *
+ *	Albert Cheng, 2000-11-27
+ *	Changed to use the optimized MPIO transfer for Collective calls only.
+ *
+ *      Raymond Lu, 2001-10-2
+ *      Changed the way to retrieve property for generic property list.
+ *
+ *	Raymond Lu, 2002-2-26
+ *	For the new fill value design, data space can either be allocated
+ *	or not allocated at this stage.  Fill value or data from space is
+ *	returned to outgoing buffer.
+ *
+ *      QAK - 2002/04/02
+ *      Removed the must_convert parameter and move preconditions to
+ *      H5S_<foo>_opt_possible() routine
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_read(H5D_t *dataset, hid_t mem_type_id, const H5S_t *mem_space,
+	 const H5S_t *file_space, hid_t dxpl_id, void *buf/*out*/)
+{
+    hssize_t	snelmts;                /*total number of elmts	(signed) */
+    hsize_t	nelmts;                 /*total number of elmts	*/
+    H5T_path_t	*tpath = NULL;		/*type conversion info	*/
+    const H5T_t	*mem_type = NULL;       /* Memory datatype */
+    H5D_io_info_t io_info;              /* Dataset I/O info     */
+    hbool_t     io_info_init = FALSE;   /* Whether the I/O info has been initialized */
+    H5D_dxpl_cache_t _dxpl_cache;       /* Data transfer property cache buffer */
+    H5D_dxpl_cache_t *dxpl_cache=&_dxpl_cache;   /* Data transfer property cache */
+
+    herr_t	ret_value = SUCCEED;	/* Return value	*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_read)
+
+    /* check args */
+    assert(dataset && dataset->ent.file);
+
+    /* Get memory datatype */
+    if (NULL == (mem_type = H5I_object_verify(mem_type_id, H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type")
+
+    if (!file_space)
+        file_space = dataset->shared->space;
+    if (!mem_space)
+        mem_space = file_space;
+    if((snelmts = H5S_GET_SELECT_NPOINTS(mem_space))<0)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "src dataspace has invalid selection")
+    H5_ASSIGN_OVERFLOW(nelmts,snelmts,hssize_t,hsize_t);
+
+    /* Fill the DXPL cache values for later use */
+    if (H5D_get_dxpl_cache(dxpl_id,&dxpl_cache)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
+
+#ifdef H5_HAVE_PARALLEL
+    /* Collective access is not permissible without a MPI based VFD */
+    if (dxpl_cache->xfer_mode==H5FD_MPIO_COLLECTIVE && !IS_H5FD_MPI(dataset->ent.file))
+        HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, "collective access for MPI-based drivers only")
+
+
+#endif /*H5_HAVE_PARALLEL*/
+
+    /* Make certain that the number of elements in each selection is the same */
+    if (nelmts!=(hsize_t)H5S_GET_SELECT_NPOINTS(file_space))
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "src and dest data spaces have different sizes")
+
+    /* Make sure that both selections have their extents set */
+    if( !(H5S_has_extent(file_space)) )
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file dataspace does not have extent set")
+    if( !(H5S_has_extent(mem_space)) )
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "memory dataspace does not have extent set")
+
+    /* Retrieve dataset properties */
+    /* <none needed in the general case> */
+
+    /* If space hasn't been allocated and not using external storage,
+     * return fill value to buffer if fill time is upon allocation, or
+     * do nothing if fill time is never.  If the dataset is compact and
+     * fill time is NEVER, there is no way to tell whether part of data
+     * has been overwritten.  So just proceed in reading.
+     */
+    if(nelmts > 0 && dataset->shared->efl.nused==0 &&
+            ((dataset->shared->layout.type==H5D_CONTIGUOUS && !H5F_addr_defined(dataset->shared->layout.u.contig.addr))
+                || (dataset->shared->layout.type==H5D_CHUNKED && !H5F_addr_defined(dataset->shared->layout.u.chunk.addr)))) {
+        H5D_fill_value_t fill_status;   /* Whether/How the fill value is defined */
+
+        /* Retrieve dataset's fill-value properties */
+        if(H5P_is_fill_value_defined(&dataset->shared->dcpl_cache.fill, &fill_status)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't tell if fill value defined")
+
+        /* Should be impossible, but check anyway... */
+        if(fill_status == H5D_FILL_VALUE_UNDEFINED &&
+                (dataset->shared->dcpl_cache.fill_time == H5D_FILL_TIME_ALLOC || dataset->shared->dcpl_cache.fill_time == H5D_FILL_TIME_IFSET))
+            HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "read failed: dataset doesn't exist, no data can be read")
+
+        /* If we're never going to fill this dataset, just leave the junk in the user's buffer */
+        if(dataset->shared->dcpl_cache.fill_time == H5D_FILL_TIME_NEVER)
+            HGOTO_DONE(SUCCEED)
+
+        /* Go fill the user's selection with the dataset's fill value */
+        if(H5D_fill(dataset->shared->dcpl_cache.fill.buf,dataset->shared->type,buf,mem_type,mem_space,dxpl_id)<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "filling buf failed")
+        else
+            HGOTO_DONE(SUCCEED)
+    } /* end if */
+
+    /*
+     * Locate the type conversion function and data space conversion
+     * functions, and set up the element numbering information. If a data
+     * type conversion is necessary then register data type atoms. Data type
+     * conversion is necessary if the user has set the `need_bkg' to a high
+     * enough value in xfer_parms since turning off data type conversion also
+     * turns off background preservation.
+     */
+    if (NULL==(tpath=H5T_path_find(dataset->shared->type, mem_type, NULL, NULL, dxpl_id)))
+        HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest data types")
+
+    
+
+    /* Set up I/O operation */
+    if(H5D_ioinfo_init(dataset,dxpl_cache,dxpl_id,mem_space,file_space,tpath,&io_info)<0)
+        HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unable to set up I/O operation")
+    io_info_init = TRUE;
+
+    /* Determine correct I/O routine to invoke */
+    if(dataset->shared->layout.type!=H5D_CHUNKED) {
+        if(H5D_contig_read(&io_info, nelmts, mem_type, mem_space, file_space, tpath,
+                dataset->shared->type_id, mem_type_id, buf)<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "can't read data")
+    } /* end if */
+    else {
+        if(H5D_chunk_read(&io_info, nelmts, mem_type, mem_space, file_space, tpath,
+                dataset->shared->type_id, mem_type_id, buf)<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "can't read data")
+    } /* end else */
+
+done:
+#ifdef H5_HAVE_PARALLEL
+    /* Shut down io_info struct */
+    if (io_info_init)
+        if(H5D_ioinfo_term(&io_info) < 0)
+            HDONE_ERROR(H5E_DATASET, H5E_CANTCLOSEOBJ, FAIL, "can't shut down io_info")
+#endif /*H5_HAVE_PARALLEL*/
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_read() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_write
+ *
+ * Purpose:	Writes (part of) a DATASET to a file from application memory
+ *		BUF. See H5Dwrite() for complete details.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December  4, 1997
+ *
+ * Modifications:
+ * 	Robb Matzke, 9 Jun 1998
+ *	The data space is no longer cached in the dataset struct.
+ *
+ * 	rky 980918
+ *	Added must_convert to do non-optimized read when necessary.
+ *
+ *      Quincey Koziol, 2 July 1999
+ *      Changed xfer_parms parameter to xfer plist parameter, so it could
+ *      be passed to H5T_convert
+ *
+ *	Albert Cheng, 2000-11-21
+ *	Added the code that when it detects it is not safe to process a
+ *	COLLECTIVE write request without hanging, it changes it to
+ *	INDEPENDENT calls.
+ *
+ *	Albert Cheng, 2000-11-27
+ *	Changed to use the optimized MPIO transfer for Collective calls only.
+ *
+ *      Raymond Lu, 2001-10-2
+ *      Changed the way to retrieve property for generic property list.
+ *
+ *	Raymond Lu, 2002-2-26
+ *	For the new fill value design, space may not be allocated until
+ *	this function is called.  Allocate and initialize space if it
+ *	hasn't been.
+ *
+ *      QAK - 2002/04/02
+ *      Removed the must_convert parameter and move preconditions to
+ *      H5S_<foo>_opt_possible() routine
+ *
+ *      Nat Furrer and James Laird, 2004/6/7
+ *      Added check for filter encode capability
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_write(H5D_t *dataset, hid_t mem_type_id, const H5S_t *mem_space,
+	  const H5S_t *file_space, hid_t dxpl_id, const void *buf)
+{
+    hssize_t	snelmts;                /*total number of elmts	(signed) */
+    hsize_t	nelmts;                 /*total number of elmts	*/
+    H5T_path_t	*tpath = NULL;		/*type conversion info	*/
+    const H5T_t	*mem_type = NULL;       /* Memory datatype */
+    H5D_io_info_t io_info;              /* Dataset I/O info     */
+    hbool_t     io_info_init = FALSE;   /* Whether the I/O info has been initialized */
+    H5D_dxpl_cache_t _dxpl_cache;       /* Data transfer property cache buffer */
+    H5D_dxpl_cache_t *dxpl_cache=&_dxpl_cache;   /* Data transfer property cache */
+    herr_t	ret_value = SUCCEED;	/* Return value	*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_write)
+
+    /* check args */
+    assert(dataset && dataset->ent.file);
+
+    /* Get the memory datatype */
+    if (NULL == (mem_type = H5I_object_verify(mem_type_id, H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type")
+
+    /* All filters in the DCPL must have encoding enabled. */
+    if(! dataset->shared->checked_filters)
+    {
+        if(H5Z_can_apply(dataset->shared->dcpl_id, dataset->shared->type_id) <0)
+            HGOTO_ERROR(H5E_PLINE, H5E_CANAPPLY, FAIL, "can't apply filters")
+
+        dataset->shared->checked_filters = TRUE;
+    }
+    /* Check if we are allowed to write to this file */
+    if (0==(H5F_get_intent(dataset->ent.file) & H5F_ACC_RDWR))
+	HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "no write intent on file")
+
+    /* Fill the DXPL cache values for later use */
+    if (H5D_get_dxpl_cache(dxpl_id,&dxpl_cache)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
+
+    /* Various MPI based checks */
+    if (IS_H5FD_MPI(dataset->ent.file)) {
+        /* If MPI based VFD is used, no VL datatype support yet. */
+        /* This is because they use the global heap in the file and we don't */
+        /* support parallel access of that yet */
+        if(H5T_detect_class(mem_type, H5T_VLEN)>0)
+            HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, "Parallel IO does not support writing VL datatypes yet")
+
+        /* If MPI based VFD is used, no VL datatype support yet. */
+        /* This is because they use the global heap in the file and we don't */
+        /* support parallel access of that yet */
+        /* We should really use H5T_detect_class() here, but it will be difficult
+         * to detect the type of the reference if it is nested... -QAK
+         */
+        if (H5T_get_class(mem_type, TRUE)==H5T_REFERENCE &&
+                H5T_get_ref_type(mem_type)==H5R_DATASET_REGION)
+            HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, "Parallel IO does not support writing region reference datatypes yet")
+    } /* end if */
+#ifdef H5_HAVE_PARALLEL
+    else {
+        /* Collective access is not permissible without a MPI based VFD */
+        if (dxpl_cache->xfer_mode==H5FD_MPIO_COLLECTIVE)
+            HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, "collective access for MPI-based driver only")
+    } /* end else */
+#endif /*H5_HAVE_PARALLEL*/
+
+    if (!file_space)
+        file_space = dataset->shared->space;
+    if (!mem_space)
+        mem_space = file_space;
+    if((snelmts = H5S_GET_SELECT_NPOINTS(mem_space))<0)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "src dataspace has invalid selection")
+    H5_ASSIGN_OVERFLOW(nelmts,snelmts,hssize_t,hsize_t);
+
+#ifdef H5_HAVE_PARALLEL
+    /* Collective access is not permissible without a MPI based VFD */
+    if (dxpl_cache->xfer_mode==H5FD_MPIO_COLLECTIVE && !IS_H5FD_MPI(dataset->ent.file))
+        HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, "collective access for MPI-based driver only")
+
+#endif /*H5_HAVE_PARALLEL*/
+
+    /* Make certain that the number of elements in each selection is the same */
+    if (nelmts!=(hsize_t)H5S_GET_SELECT_NPOINTS(file_space))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "src and dest data spaces have different sizes")
+
+    /* Make sure that both selections have their extents set */
+    if( !(H5S_has_extent(file_space)) )
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file dataspace does not have extent set")
+    if( !(H5S_has_extent(mem_space)) )
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "memory dataspace does not have extent set")
+
+    /* Retrieve dataset properties */
+    /* <none needed currently> */
+
+    /* Allocate data space and initialize it if it hasn't been. */
+    if(nelmts > 0 && dataset->shared->efl.nused==0 &&
+            ((dataset->shared->layout.type==H5D_CONTIGUOUS && !H5F_addr_defined(dataset->shared->layout.u.contig.addr))
+                || (dataset->shared->layout.type==H5D_CHUNKED && !H5F_addr_defined(dataset->shared->layout.u.chunk.addr)))) {
+        hssize_t file_nelmts;   /* Number of elements in file dataset's dataspace */
+        hbool_t full_overwrite; /* Whether we are over-writing all the elements */
+
+        /* Get the number of elements in file dataset's dataspace */
+        if((file_nelmts=H5S_GET_EXTENT_NPOINTS(file_space))<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_BADVALUE, FAIL, "can't retrieve number of elements in file dataset")
+
+        /* Always allow fill values to be written if the dataset has a VL datatype */
+        if(H5T_detect_class(dataset->shared->type, H5T_VLEN))
+            full_overwrite=FALSE;
+        else
+            full_overwrite=(hsize_t)file_nelmts==nelmts ? TRUE : FALSE;
+
+ 	/* Allocate storage */
+        if(H5D_alloc_storage(dataset->ent.file,dxpl_id,dataset,H5D_ALLOC_WRITE, TRUE, full_overwrite)<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize storage")
+    } /* end if */
+
+    /*
+     * Locate the type conversion function and data space conversion
+     * functions, and set up the element numbering information. If a data
+     * type conversion is necessary then register data type atoms. Data type
+     * conversion is necessary if the user has set the `need_bkg' to a high
+     * enough value in xfer_parms since turning off data type conversion also
+     * turns off background preservation.
+     */
+    if (NULL==(tpath=H5T_path_find(mem_type, dataset->shared->type, NULL, NULL, dxpl_id)))
+	HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest data types")
+
+
+    /* Set up I/O operation */
+    if(H5D_ioinfo_init(dataset,dxpl_cache,dxpl_id,mem_space,file_space,tpath,&io_info)<0)
+        HGOTO_ERROR (H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unable to set up I/O operation")
+    io_info_init = TRUE;
+
+    /* Determine correct I/O routine to invoke */
+    if(dataset->shared->layout.type!=H5D_CHUNKED) {
+        if(H5D_contig_write(&io_info, nelmts, mem_type, mem_space, file_space, tpath,
+                mem_type_id, dataset->shared->type_id, buf)<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "can't write data")
+    } /* end if */
+    else {
+        if(H5D_chunk_write(&io_info, nelmts, mem_type, mem_space, file_space, tpath,
+                mem_type_id, dataset->shared->type_id, buf)<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "can't write data")
+    } /* end else */
+
+#ifdef OLD_WAY
+/*
+ * This was taken out because it can be called in a parallel program with
+ * independent access, causing the metadata cache to get corrupted. Its been
+ * disabled for all types of access (serial as well as parallel) to make the
+ * modification time consistent for all programs. -QAK
+ */
+    /*
+     * Update modification time.  We have to do this explicitly because
+     * writing to a dataset doesn't necessarily change the object header.
+     */
+    if (H5O_touch(&(dataset->ent), FALSE, dxpl_id)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to update modification time")
+#endif /* OLD_WAY */
+
+done:
+#ifdef H5_HAVE_PARALLEL
+    /* Shut down io_info struct */
+    if (io_info_init)
+        if(H5D_ioinfo_term(&io_info) < 0)
+            HDONE_ERROR(H5E_DATASET, H5E_CANTCLOSEOBJ, FAIL, "can't shut down io_info")
+#endif /*H5_HAVE_PARALLEL*/
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_write() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_contig_read
+ *
+ * Purpose:	Read from a contiguous dataset.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Raymond Lu
+ *		Thursday, April 10, 2003
+ *
+ * Modifications:
+ *      QAK - 2003/04/17
+ *      Hacked on it a lot. :-)
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_contig_read(H5D_io_info_t *io_info, hsize_t nelmts,
+    const H5T_t *mem_type, const H5S_t *mem_space,
+    const H5S_t *file_space, H5T_path_t *tpath,
+    hid_t src_id, hid_t dst_id, void *buf/*out*/)
+{
+    H5D_t *dataset=io_info->dset;       /* Local pointer to dataset info */
+    const H5D_dxpl_cache_t *dxpl_cache=io_info->dxpl_cache;     /* Local pointer to dataset transfer info */
+    herr_t      status;                 /*function return status*/
+#ifdef H5S_DEBUG
+    H5_timer_t	timer;
+#endif
+    size_t	src_type_size;		/*size of source type	*/
+    size_t	dst_type_size;	        /*size of destination type*/
+    size_t	max_type_size;	        /* Size of largest source/destination type */
+    size_t	target_size;		/*desired buffer size	*/
+    size_t	request_nelmts;		/*requested strip mine	*/
+    H5S_sel_iter_t mem_iter;            /*memory selection iteration info*/
+    hbool_t	mem_iter_init=0;	/*memory selection iteration info has been initialized */
+    H5S_sel_iter_t bkg_iter;            /*background iteration info*/
+    hbool_t	bkg_iter_init=0;	/*background iteration info has been initialized */
+    H5S_sel_iter_t file_iter;           /*file selection iteration info*/
+    hbool_t	file_iter_init=0;	/*file selection iteration info has been initialized */
+    H5T_bkg_t	need_bkg;		/*type of background buf*/
+    uint8_t	*tconv_buf = NULL;	/*data type conv buffer	*/
+    uint8_t	*bkg_buf = NULL;	/*background buffer	*/
+    hsize_t	smine_start;		/*strip mine start loc	*/
+    size_t	n, smine_nelmts;	/*elements per strip	*/
+    H5D_storage_t store;                /*union of storage info for dataset */
+    herr_t	ret_value = SUCCEED;	/*return value		*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_contig_read)
+
+    /* Initialize storage info for this dataset */
+    if (dataset->shared->efl.nused>0)
+        HDmemcpy(&store.efl,&(dataset->shared->efl),sizeof(H5O_efl_t));
+    else {
+        store.contig.dset_addr=dataset->shared->layout.u.contig.addr;
+        store.contig.dset_size=dataset->shared->layout.u.contig.size;
+    } /* end if */
+
+    /* Set dataset storage for I/O info */
+    io_info->store=&store;
+
+    /*
+     * If there is no type conversion then read directly into the
+     * application's buffer.  This saves at least one mem-to-mem copy.
+     */
+    if (H5T_path_noop(tpath)) {
+#ifdef H5S_DEBUG
+	H5_timer_begin(&timer);
+#endif
+  	/* Sanity check dataset, then read it */
+        assert(((dataset->shared->layout.type==H5D_CONTIGUOUS && H5F_addr_defined(dataset->shared->layout.u.contig.addr))
+                || (dataset->shared->layout.type==H5D_CHUNKED && H5F_addr_defined(dataset->shared->layout.u.chunk.addr)))
+                || dataset->shared->efl.nused>0 || 0 == nelmts
+                || dataset->shared->layout.type==H5D_COMPACT);
+        H5_CHECK_OVERFLOW(nelmts,hsize_t,size_t);
+        status = (io_info->ops.read)(io_info,
+            (size_t)nelmts, H5T_get_size(dataset->shared->type),
+            file_space, mem_space,
+            buf/*out*/);
+#ifdef H5S_DEBUG
+        H5_timer_end(&(io_info->stats->stats[1].read_timer), &timer);
+        io_info->stats->stats[1].read_nbytes += nelmts * H5T_get_size(dataset->shared->type);
+        io_info->stats->stats[1].read_ncalls++;
+#endif
+
+        /* Check return value from optimized read */
+        if (status<0) {
+            HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "optimized read failed")
+        } else
+            /* direct xfer accomplished successfully */
+            HGOTO_DONE(SUCCEED)
+    } /* end if */
+
+    /*
+     * This is the general case (type conversion, usually).
+     */
+    if(nelmts==0)
+        HGOTO_DONE(SUCCEED)
+
+    /* Compute element sizes and other parameters */
+    src_type_size = H5T_get_size(dataset->shared->type);
+    dst_type_size = H5T_get_size(mem_type);
+    max_type_size = MAX(src_type_size, dst_type_size);
+    target_size = dxpl_cache->max_temp_buf;
+    /* XXX: This could cause a problem if the user sets their buffer size
+     * to the same size as the default, and then the dataset elements are
+     * too large for the buffer... - QAK
+     */
+    if(target_size==H5D_XFER_MAX_TEMP_BUF_DEF) {
+        /* If the buffer is too small to hold even one element, make it bigger */
+        if(target_size<max_type_size)
+            target_size = max_type_size;
+        /* If the buffer is too large to hold all the elements, make it smaller */
+        else if(target_size>(nelmts*max_type_size))
+            target_size=(size_t)(nelmts*max_type_size);
+    } /* end if */
+    request_nelmts = target_size / max_type_size;
+
+    /* Sanity check elements in temporary buffer */
+    if (request_nelmts==0)
+        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "temporary buffer max size is too small")
+
+    /* Figure out the strip mine size. */
+    if (H5S_select_iter_init(&file_iter, file_space, src_type_size)<0)
+        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize file selection information")
+    file_iter_init=1;	/*file selection iteration info has been initialized */
+    if (H5S_select_iter_init(&mem_iter, mem_space, dst_type_size)<0)
+        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize memory selection information")
+    mem_iter_init=1;	/*file selection iteration info has been initialized */
+    if (H5S_select_iter_init(&bkg_iter, mem_space, dst_type_size)<0)
+        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize background selection information")
+    bkg_iter_init=1;	/*file selection iteration info has been initialized */
+
+    /*
+     * Get a temporary buffer for type conversion unless the app has already
+     * supplied one through the xfer properties. Instead of allocating a
+     * buffer which is the exact size, we allocate the target size.  The
+     * malloc() is usually less resource-intensive if we allocate/free the
+     * same size over and over.
+     */
+    if (H5T_path_bkg(tpath)) {
+        H5T_bkg_t path_bkg;     /* Type conversion's background info */
+
+        /* Retrieve the bkgr buffer property */
+        need_bkg=dxpl_cache->bkgr_buf_type;
+        path_bkg = H5T_path_bkg(tpath);
+        need_bkg = MAX(path_bkg, need_bkg);
+    } else {
+        need_bkg = H5T_BKG_NO; /*never needed even if app says yes*/
+    } /* end else */
+    if (NULL==(tconv_buf=dxpl_cache->tconv_buf)) {
+        /* Allocate temporary buffer */
+        if((tconv_buf=H5FL_BLK_MALLOC(type_conv,target_size))==NULL)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion")
+    } /* end if */
+    if (need_bkg && NULL==(bkg_buf=dxpl_cache->bkgr_buf)) {
+        /* Allocate background buffer */
+        /* (Need calloc()-like call since memory needs to be initialized) */
+        if((bkg_buf=H5FL_BLK_CALLOC(type_conv,(request_nelmts*dst_type_size)))==NULL)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for background conversion")
+    } /* end if */
+
+    /* Start strip mining... */
+    for (smine_start=0; smine_start<nelmts; smine_start+=smine_nelmts) {
+        /* Go figure out how many elements to read from the file */
+        assert(H5S_SELECT_ITER_NELMTS(&file_iter)==(nelmts-smine_start));
+        smine_nelmts = (size_t)MIN(request_nelmts, (nelmts-smine_start));
+
+        /*
+         * Gather the data from disk into the data type conversion
+         * buffer. Also gather data from application to background buffer
+         * if necessary.
+         */
+#ifdef H5S_DEBUG
+	H5_timer_begin(&timer);
+#endif
+	/* Sanity check that space is allocated, then read data from it */
+        assert(((dataset->shared->layout.type==H5D_CONTIGUOUS && H5F_addr_defined(dataset->shared->layout.u.contig.addr))
+                || (dataset->shared->layout.type==H5D_CHUNKED && H5F_addr_defined(dataset->shared->layout.u.chunk.addr)))
+            || dataset->shared->efl.nused>0 ||
+             dataset->shared->layout.type==H5D_COMPACT);
+        n = H5D_select_fgath(io_info,
+            file_space, &file_iter, smine_nelmts,
+            tconv_buf/*out*/);
+
+#ifdef H5S_DEBUG
+	H5_timer_end(&(io_info->stats->stats[1].gath_timer), &timer);
+	io_info->stats->stats[1].gath_nbytes += n * src_type_size;
+	io_info->stats->stats[1].gath_ncalls++;
+#endif
+	if (n!=smine_nelmts)
+            HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file gather failed")
+
+        if (H5T_BKG_YES==need_bkg) {
+#ifdef H5S_DEBUG
+            H5_timer_begin(&timer);
+#endif
+            n = H5D_select_mgath(buf, mem_space, &bkg_iter,
+				 smine_nelmts, dxpl_cache, bkg_buf/*out*/);
+#ifdef H5S_DEBUG
+            H5_timer_end(&(io_info->stats->stats[1].bkg_timer), &timer);
+            io_info->stats->stats[1].bkg_nbytes += n * dst_type_size;
+            io_info->stats->stats[1].bkg_ncalls++;
+#endif
+            if (n!=smine_nelmts)
+                HGOTO_ERROR (H5E_IO, H5E_READERROR, FAIL, "mem gather failed")
+        } /* end if */
+
+	/*
+         * Perform data type conversion.
+         */
+        if (H5T_convert(tpath, src_id, dst_id, smine_nelmts, 0, 0, tconv_buf, bkg_buf, io_info->dxpl_id)<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "data type conversion failed")
+
+        /*
+         * Scatter the data into memory.
+         */
+#ifdef H5S_DEBUG
+	H5_timer_begin(&timer);
+#endif
+        status = H5D_select_mscat(tconv_buf, mem_space,
+                          &mem_iter, smine_nelmts, dxpl_cache, buf/*out*/);
+#ifdef H5S_DEBUG
+	H5_timer_end(&(io_info->stats->stats[1].scat_timer), &timer);
+	io_info->stats->stats[1].scat_nbytes += smine_nelmts * dst_type_size;
+	io_info->stats->stats[1].scat_ncalls++;
+#endif
+	if (status<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_READERROR, FAIL, "scatter failed")
+
+    } /* end for */
+
+done:
+    /* Release selection iterators */
+    if(file_iter_init) {
+        if(H5S_SELECT_ITER_RELEASE(&file_iter)<0)
+            HDONE_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+    } /* end if */
+    if(mem_iter_init) {
+        if(H5S_SELECT_ITER_RELEASE(&mem_iter)<0)
+            HDONE_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+    } /* end if */
+    if(bkg_iter_init) {
+        if(H5S_SELECT_ITER_RELEASE(&bkg_iter)<0)
+            HDONE_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+    } /* end if */
+
+    if (tconv_buf && NULL==dxpl_cache->tconv_buf)
+        H5FL_BLK_FREE(type_conv,tconv_buf);
+    if (bkg_buf && NULL==dxpl_cache->bkgr_buf)
+        H5FL_BLK_FREE(type_conv,bkg_buf);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_contig_read() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_contig_write
+ *
+ * Purpose:	Write to a contiguous dataset.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Raymond Lu
+ *		Thursday, April 10, 2003
+ *
+ * Modifications:
+ *      QAK - 2003/04/17
+ *      Hacked on it a lot. :-)
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_contig_write(H5D_io_info_t *io_info, hsize_t nelmts,
+    const H5T_t *mem_type, const H5S_t *mem_space,
+    const H5S_t *file_space, H5T_path_t *tpath,
+    hid_t src_id, hid_t dst_id, const void *buf)
+{
+    H5D_t *dataset=io_info->dset;       /* Local pointer to dataset info */
+    const H5D_dxpl_cache_t *dxpl_cache=io_info->dxpl_cache;     /* Local pointer to dataset transfer info */
+    herr_t      status;                 /*function return status*/
+#ifdef H5S_DEBUG
+    H5_timer_t	timer;
+#endif
+    size_t	src_type_size;		/*size of source type	*/
+    size_t	dst_type_size;	        /*size of destination type*/
+    size_t	max_type_size;	        /* Size of largest source/destination type */
+    size_t	target_size;		/*desired buffer size	*/
+    size_t	request_nelmts;		/*requested strip mine	*/
+    H5S_sel_iter_t mem_iter;            /*memory selection iteration info*/
+    hbool_t	mem_iter_init=0;	/*memory selection iteration info has been initialized */
+    H5S_sel_iter_t bkg_iter;            /*background iteration info*/
+    hbool_t	bkg_iter_init=0;	/*background iteration info has been initialized */
+    H5S_sel_iter_t file_iter;           /*file selection iteration info*/
+    hbool_t	file_iter_init=0;	/*file selection iteration info has been initialized */
+    H5T_bkg_t	need_bkg;		/*type of background buf*/
+    uint8_t	*tconv_buf = NULL;	/*data type conv buffer	*/
+    uint8_t	*bkg_buf = NULL;	/*background buffer	*/
+    hsize_t	smine_start;		/*strip mine start loc	*/
+    size_t	n, smine_nelmts;	/*elements per strip	*/
+    H5D_storage_t store;                /*union of storage info for dataset */
+    herr_t	ret_value = SUCCEED;	/*return value		*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_contig_write)
+
+    /* Initialize storage info for this dataset */
+    if (dataset->shared->efl.nused>0)
+        HDmemcpy(&store.efl,&(dataset->shared->efl),sizeof(H5O_efl_t));
+    else {
+        store.contig.dset_addr=dataset->shared->layout.u.contig.addr;
+        store.contig.dset_size=dataset->shared->layout.u.contig.size;
+    } /* end if */
+
+    /* Set dataset storage for I/O info */
+    io_info->store=&store;
+
+    /*
+     * If there is no type conversion then write directly from the
+     * application's buffer.  This saves at least one mem-to-mem copy.
+     */
+    if (H5T_path_noop(tpath)) {
+#ifdef H5S_DEBUG
+	H5_timer_begin(&timer);
+#endif
+        H5_CHECK_OVERFLOW(nelmts,hsize_t,size_t);
+        status = (io_info->ops.write)(io_info,
+            (size_t)nelmts, H5T_get_size(dataset->shared->type),
+            file_space, mem_space,
+            buf);
+#ifdef H5S_DEBUG
+        H5_timer_end(&(io_info->stats->stats[0].write_timer), &timer);
+        io_info->stats->stats[0].write_nbytes += nelmts * H5T_get_size(mem_type);
+        io_info->stats->stats[0].write_ncalls++;
+#endif
+
+        /* Check return value from optimized write */
+        if (status<0) {
+	    HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "optimized write failed")
+	} else
+	    /* direct xfer accomplished successfully */
+	    HGOTO_DONE(SUCCEED)
+    } /* end if */
+
+    /*
+     * This is the general case.
+     */
+    if(nelmts==0)
+        HGOTO_DONE(SUCCEED)
+
+    /* Compute element sizes and other parameters */
+    src_type_size = H5T_get_size(mem_type);
+    dst_type_size = H5T_get_size(dataset->shared->type);
+    max_type_size = MAX(src_type_size, dst_type_size);
+    target_size = dxpl_cache->max_temp_buf;
+    /* XXX: This could cause a problem if the user sets their buffer size
+     * to the same size as the default, and then the dataset elements are
+     * too large for the buffer... - QAK
+     */
+    if(target_size==H5D_XFER_MAX_TEMP_BUF_DEF) {
+        /* If the buffer is too small to hold even one element, make it bigger */
+        if(target_size<max_type_size)
+            target_size = max_type_size;
+        /* If the buffer is too large to hold all the elements, make it smaller */
+        else if(target_size>(nelmts*max_type_size))
+            target_size=(size_t)(nelmts*max_type_size);
+    } /* end if */
+    request_nelmts = target_size / max_type_size;
+
+    /* Sanity check elements in temporary buffer */
+    if (request_nelmts==0)
+        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "temporary buffer max size is too small")
+
+    /* Figure out the strip mine size. */
+    if (H5S_select_iter_init(&file_iter, file_space, dst_type_size)<0)
+        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize file selection information")
+    file_iter_init=1;	/*file selection iteration info has been initialized */
+    if (H5S_select_iter_init(&mem_iter, mem_space, src_type_size)<0)
+        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize memory selection information")
+    mem_iter_init=1;	/*file selection iteration info has been initialized */
+    if (H5S_select_iter_init(&bkg_iter, file_space, dst_type_size)<0)
+        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize background selection information")
+    bkg_iter_init=1;	/*file selection iteration info has been initialized */
+
+    /*
+     * Get a temporary buffer for type conversion unless the app has already
+     * supplied one through the xfer properties.  Instead of allocating a
+     * buffer which is the exact size, we allocate the target size. The
+     * malloc() is usually less resource-intensive if we allocate/free the
+     * same size over and over.
+     */
+    if(H5T_detect_class(dataset->shared->type, H5T_VLEN)) {
+	/* Old data is retrieved into background buffer for VL datatype.  The
+	 * data is used later for freeing heap objects. */
+        need_bkg = H5T_BKG_YES;
+    } else if (H5T_path_bkg(tpath)) {
+        H5T_bkg_t path_bkg;     /* Type conversion's background info */
+
+        /* Retrieve the bkgr buffer property */
+        need_bkg=dxpl_cache->bkgr_buf_type;
+        path_bkg = H5T_path_bkg(tpath);
+        need_bkg = MAX (path_bkg, need_bkg);
+    } else {
+        need_bkg = H5T_BKG_NO; /*never needed even if app says yes*/
+    } /* end else */
+    if (NULL==(tconv_buf=dxpl_cache->tconv_buf)) {
+        /* Allocate temporary buffer */
+        if((tconv_buf=H5FL_BLK_MALLOC(type_conv,target_size))==NULL)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion")
+    } /* end if */
+    if (need_bkg && NULL==(bkg_buf=dxpl_cache->bkgr_buf)) {
+        /* Allocate background buffer */
+        /* (Don't need calloc()-like call since file data is already initialized) */
+        if((bkg_buf=H5FL_BLK_MALLOC(type_conv,(request_nelmts*dst_type_size)))==NULL)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for background conversion")
+    } /* end if */
+
+    /* Start strip mining... */
+    for (smine_start=0; smine_start<nelmts; smine_start+=smine_nelmts) {
+        /* Go figure out how many elements to read from the file */
+        assert(H5S_SELECT_ITER_NELMTS(&file_iter)==(nelmts-smine_start));
+        smine_nelmts = (size_t)MIN(request_nelmts, (nelmts-smine_start));
+
+        /*
+         * Gather data from application buffer into the data type conversion
+         * buffer. Also gather data from the file into the background buffer
+         * if necessary.
+         */
+#ifdef H5S_DEBUG
+	H5_timer_begin(&timer);
+#endif
+        n = H5D_select_mgath(buf, mem_space, &mem_iter,
+			     smine_nelmts, dxpl_cache, tconv_buf/*out*/);
+#ifdef H5S_DEBUG
+	H5_timer_end(&(io_info->stats->stats[0].gath_timer), &timer);
+	io_info->stats->stats[0].gath_nbytes += n * src_type_size;
+	io_info->stats->stats[0].gath_ncalls++;
+#endif
+        if (n!=smine_nelmts)
+            HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "mem gather failed")
+
+        if (H5T_BKG_YES==need_bkg) {
+#ifdef H5S_DEBUG
+            H5_timer_begin(&timer);
+#endif
+            n = H5D_select_fgath(io_info,
+                file_space, &bkg_iter, smine_nelmts,
+                bkg_buf/*out*/);
+
+#ifdef H5S_DEBUG
+            H5_timer_end(&(io_info->stats->stats[0].bkg_timer), &timer);
+            io_info->stats->stats[0].bkg_nbytes += n * dst_type_size;
+            io_info->stats->stats[0].bkg_ncalls++;
+#endif
+            if (n!=smine_nelmts)
+                HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "file gather failed")
+        } /* end if */
+
+	/*
+         * Perform data type conversion.
+         */
+        if (H5T_convert(tpath, src_id, dst_id, smine_nelmts, 0, 0, tconv_buf, bkg_buf, io_info->dxpl_id)<0)
+            HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "data type conversion failed")
+
+        /*
+         * Scatter the data out to the file.
+         */
+#ifdef H5S_DEBUG
+        H5_timer_begin(&timer);
+#endif
+	status = H5D_select_fscat(io_info,
+            file_space, &file_iter, smine_nelmts,
+            tconv_buf);
+#ifdef H5S_DEBUG
+        H5_timer_end(&(io_info->stats->stats[0].scat_timer), &timer);
+        io_info->stats->stats[0].scat_nbytes += smine_nelmts * dst_type_size;
+        io_info->stats->stats[0].scat_ncalls++;
+#endif
+        if (status<0)
+            HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "scatter failed")
+    } /* end for */
+
+done:
+    /* Release selection iterators */
+    if(file_iter_init) {
+        if(H5S_SELECT_ITER_RELEASE(&file_iter)<0)
+            HDONE_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+    } /* end if */
+    if(mem_iter_init) {
+        if(H5S_SELECT_ITER_RELEASE(&mem_iter)<0)
+            HDONE_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+    } /* end if */
+    if(bkg_iter_init) {
+        if(H5S_SELECT_ITER_RELEASE(&bkg_iter)<0)
+            HDONE_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+    } /* end if */
+
+    if (tconv_buf && NULL==dxpl_cache->tconv_buf)
+        H5FL_BLK_FREE(type_conv,tconv_buf);
+    if (bkg_buf && NULL==dxpl_cache->bkgr_buf)
+        H5FL_BLK_FREE(type_conv,bkg_buf);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_contig_write() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_chunk_read
+ *
+ * Purpose:	Read from a chunked dataset.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Raymond Lu
+ *		Thursday, April 10, 2003
+ *
+ * Modifications:
+ *      QAK - 2003/04/17
+ *      Hacked on it a lot. :-)
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_chunk_read(H5D_io_info_t *io_info, hsize_t nelmts,
+    const H5T_t *mem_type, const H5S_t *mem_space,
+    const H5S_t *file_space, H5T_path_t *tpath,
+    hid_t src_id, hid_t dst_id, void *buf/*out*/)
+{
+    H5D_t *dataset=io_info->dset;       /* Local pointer to dataset info */
+    const H5D_dxpl_cache_t *dxpl_cache=io_info->dxpl_cache;     /* Local pointer to dataset transfer info */
+    fm_map      fm;                     /* File<->memory mapping */
+    H5SL_node_t *chunk_node;            /* Current node in chunk skip list */
+    herr_t      status;                 /*function return status*/
+#ifdef H5S_DEBUG
+    H5_timer_t	timer;
+#endif
+    size_t	src_type_size;		/*size of source type	*/
+    size_t	dst_type_size;	        /*size of destination type*/
+    size_t	max_type_size;	        /* Size of largest source/destination type */
+    size_t	target_size;		/*desired buffer size	*/
+    size_t	request_nelmts;		/*requested strip mine	*/
+    hsize_t     smine_start;            /*strip mine start loc  */
+    size_t      n, smine_nelmts;        /*elements per strip    */
+    H5S_sel_iter_t mem_iter;            /*memory selection iteration info*/
+    hbool_t	mem_iter_init=0;	/*memory selection iteration info has been initialized */
+    H5S_sel_iter_t bkg_iter;            /*background iteration info*/
+    hbool_t	bkg_iter_init=0;	/*background iteration info has been initialized */
+    H5S_sel_iter_t file_iter;           /*file selection iteration info*/
+    hbool_t	file_iter_init=0;	/*file selection iteration info has been initialized */
+    H5T_bkg_t	need_bkg;		/*type of background buf*/
+    uint8_t	*tconv_buf = NULL;	/*data type conv buffer	*/
+    uint8_t	*bkg_buf = NULL;	/*background buffer	*/
+    H5D_storage_t store;                /*union of EFL and chunk pointer in file space */
+#ifdef H5_HAVE_PARALLEL
+    int         count_chunk;            /* Number of chunks accessed */
+    int         min_num_chunk;          /* Number of chunks to access collectively */
+#endif
+    herr_t	ret_value = SUCCEED;	/*return value		*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_chunk_read)
+
+    /* Map elements between file and memory for each chunk*/
+    if(H5D_create_chunk_map(dataset, mem_type, file_space, mem_space, &fm)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't build chunk mapping")
+
+    /* Set dataset storage for I/O info */
+    io_info->store=&store;
+
+    /*
+     * If there is no type conversion then read directly into the
+     * application's buffer.  This saves at least one mem-to-mem copy.
+     */
+    if (H5T_path_noop(tpath)) {
+#ifdef H5S_DEBUG
+	H5_timer_begin(&timer);
+#endif
+  	/* Sanity check dataset, then read it */
+        assert(((dataset->shared->layout.type==H5D_CONTIGUOUS && H5F_addr_defined(dataset->shared->layout.u.contig.addr))
+                || (dataset->shared->layout.type==H5D_CHUNKED && H5F_addr_defined(dataset->shared->layout.u.chunk.addr)))
+                || dataset->shared->efl.nused>0 || 0 == nelmts
+                || dataset->shared->layout.type==H5D_COMPACT);
+
+        /* Get first node in chunk skip list */
+        chunk_node=H5SL_first(fm.fsel);
+
+#ifdef H5_HAVE_PARALLEL
+        if(io_info->dxpl_cache->xfer_mode == H5FD_MPIO_COLLECTIVE) {
+       	    if(H5D_mpio_get_min_chunk(io_info, &fm, &min_num_chunk)<0)
+		HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get minimum number of chunk")
+	}
+        count_chunk = 0;
+#endif /* H5_HAVE_PARALLEL */
+
+        /* Iterate through chunks to be operated on */
+        while(chunk_node) {
+            H5D_chunk_info_t *chunk_info;   /* chunk information */
+#ifdef H5_HAVE_PARALLEL
+            hbool_t make_ind, make_coll;        /* Flags to indicate that the MPI mode should change */
+#endif /* H5_HAVE_PARALLEL */
+
+            /* Get the actual chunk information from the skip list node */
+            chunk_info=H5SL_item(chunk_node);
+
+            /* Pass in chunk's coordinates in a union. */
+            store.chunk.offset = chunk_info->coords;
+            store.chunk.index = chunk_info->index;
+
+#ifdef H5_HAVE_PARALLEL
+            /* Reset flags for changing parallel I/O mode */
+            make_ind = make_coll = FALSE;
+
+            if(io_info->dxpl_cache->xfer_mode == H5FD_MPIO_COLLECTIVE) {
+                /* Increment chunk we are operating on */
+                count_chunk++;
+
+	       /* If the number of chunk is greater than minimum number of chunk,
+		  Do independent read */
+                if(count_chunk > min_num_chunk) {
+                    /* Switch to independent I/O (permanently) */
+                    make_ind = TRUE;
+                }
+#ifndef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
+                else {
+                        /* Switch to independent I/O (temporarily) */
+                        make_ind = TRUE;
+                        make_coll = TRUE;
+                } /* end else */
+#endif /* H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS */
+            } /* end if */
+
+            /* Switch to independent I/O */
+            if(make_ind)
+                if(H5D_ioinfo_make_ind(io_info) < 0)
+                    HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't switch to independent I/O")
+#endif /* H5_HAVE_PARALLEL */
+
+            /* Perform the actual read operation */
+            status = (io_info->ops.read)(io_info,
+                chunk_info->chunk_points, H5T_get_size(dataset->shared->type),
+                chunk_info->fspace, chunk_info->mspace, buf);
+
+#ifdef H5_HAVE_PARALLEL
+            /* Switch back to collective I/O */
+            if(make_coll)
+                if(H5D_ioinfo_make_coll(io_info) < 0)
+                    HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't switch to independent I/O")
+#endif /* H5_HAVE_PARALLEL */
+
+            /* Check return value from optimized read */
+            if (status<0)
+                HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "optimized read failed")
+
+            /* Get the next chunk node in the skip list */
+            chunk_node=H5SL_next(chunk_node);
+        } /* end while */
+
+#ifdef H5S_DEBUG
+        H5_timer_end(&(io_info->stats->stats[1].read_timer), &timer);
+        io_info->stats->stats[1].read_nbytes += nelmts * H5T_get_size(dataset->shared->type);
+        io_info->stats->stats[1].read_ncalls++;
+#endif
+
+	/* direct xfer accomplished successfully */
+        HGOTO_DONE(SUCCEED)
+    } /* end if */
+
+    /*
+     * This is the general case (type conversion, usually).
+     */
+    if(nelmts==0)
+        HGOTO_DONE(SUCCEED)
+
+    /* Compute element sizes and other parameters */
+    src_type_size = H5T_get_size(dataset->shared->type);
+    dst_type_size = H5T_get_size(mem_type);
+    max_type_size = MAX(src_type_size, dst_type_size);
+    target_size = dxpl_cache->max_temp_buf;
+    /* XXX: This could cause a problem if the user sets their buffer size
+     * to the same size as the default, and then the dataset elements are
+     * too large for the buffer... - QAK
+     */
+    if(target_size==H5D_XFER_MAX_TEMP_BUF_DEF) {
+        /* If the buffer is too small to hold even one element, make it bigger */
+        if(target_size<max_type_size)
+            target_size = max_type_size;
+        /* If the buffer is too large to hold all the elements, make it smaller */
+        else if(target_size>(nelmts*max_type_size))
+            target_size=(size_t)(nelmts*max_type_size);
+    } /* end if */
+    request_nelmts = target_size / max_type_size;
+
+    /* Sanity check elements in temporary buffer */
+    if (request_nelmts==0)
+        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "temporary buffer max size is too small")
+
+    /*
+     * Get a temporary buffer for type conversion unless the app has already
+     * supplied one through the xfer properties. Instead of allocating a
+     * buffer which is the exact size, we allocate the target size.  The
+     * malloc() is usually less resource-intensive if we allocate/free the
+     * same size over and over.
+     */
+    if (H5T_path_bkg(tpath)) {
+        H5T_bkg_t path_bkg;     /* Type conversion's background info */
+
+        /* Retrieve the bkgr buffer property */
+        need_bkg=dxpl_cache->bkgr_buf_type;
+        path_bkg = H5T_path_bkg(tpath);
+        need_bkg = MAX(path_bkg, need_bkg);
+    } else {
+        need_bkg = H5T_BKG_NO; /*never needed even if app says yes*/
+    } /* end else */
+    if (NULL==(tconv_buf=dxpl_cache->tconv_buf)) {
+        /* Allocate temporary buffer */
+        if((tconv_buf=H5FL_BLK_MALLOC(type_conv,target_size))==NULL)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion")
+    } /* end if */
+    if (need_bkg && NULL==(bkg_buf=dxpl_cache->bkgr_buf)) {
+        /* Allocate background buffer */
+        /* (Need calloc()-like call since memory needs to be initialized) */
+        if((bkg_buf=H5FL_BLK_CALLOC(type_conv,(request_nelmts*dst_type_size)))==NULL)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for background conversion")
+    } /* end if */
+
+    /* Loop over all the chunks, performing I/O on each */
+
+    /* Get first node in chunk skip list */
+    chunk_node=H5SL_first(fm.fsel);
+
+    /* Iterate through chunks to be operated on */
+    while(chunk_node) {
+        H5D_chunk_info_t *chunk_info;   /* chunk information */
+
+        /* Get the actual chunk information from the skip list nodes */
+        chunk_info=H5SL_item(chunk_node);
+
+        /* initialize selection iterator */
+        if (H5S_select_iter_init(&file_iter, chunk_info->fspace, src_type_size)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize file selection information")
+        file_iter_init=1;	/*file selection iteration info has been initialized */
+        if (H5S_select_iter_init(&mem_iter, chunk_info->mspace, dst_type_size)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize memory selection information")
+        mem_iter_init=1;	/*file selection iteration info has been initialized */
+        if (H5S_select_iter_init(&bkg_iter, chunk_info->mspace, dst_type_size)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize background selection information")
+        bkg_iter_init=1;	/*file selection iteration info has been initialized */
+
+        /* Pass in chunk's coordinates in a union*/
+        store.chunk.offset = chunk_info->coords;
+        store.chunk.index = chunk_info->index;
+
+        for (smine_start=0; smine_start<chunk_info->chunk_points; smine_start+=smine_nelmts) {
+            /* Go figure out how many elements to read from the file */
+            assert(H5S_SELECT_ITER_NELMTS(&file_iter)==(chunk_info->chunk_points-smine_start));
+            smine_nelmts = (size_t)MIN(request_nelmts, (chunk_info->chunk_points-smine_start));
+
+            /*
+             * Gather the data from disk into the data type conversion
+             * buffer. Also gather data from application to background buffer
+             * if necessary.
+             */
+#ifdef H5S_DEBUG
+            H5_timer_begin(&timer);
+#endif
+            /* Sanity check that space is allocated, then read data from it */
+            assert(((dataset->shared->layout.type==H5D_CONTIGUOUS && H5F_addr_defined(dataset->shared->layout.u.contig.addr))
+                    || (dataset->shared->layout.type==H5D_CHUNKED && H5F_addr_defined(dataset->shared->layout.u.chunk.addr)))
+                || dataset->shared->efl.nused>0 || dataset->shared->layout.type==H5D_COMPACT);
+            n = H5D_select_fgath(io_info,
+                chunk_info->fspace, &file_iter, smine_nelmts,
+                tconv_buf/*out*/);
+
+#ifdef H5S_DEBUG
+            H5_timer_end(&(io_info->stats->stats[1].gath_timer), &timer);
+            io_info->stats->stats[1].gath_nbytes += n * src_type_size;
+            io_info->stats->stats[1].gath_ncalls++;
+#endif
+            if (n!=smine_nelmts)
+                HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file gather failed")
+
+            if (H5T_BKG_YES==need_bkg) {
+#ifdef H5S_DEBUG
+                H5_timer_begin(&timer);
+#endif
+                n = H5D_select_mgath(buf, chunk_info->mspace, &bkg_iter,
+                                 smine_nelmts, dxpl_cache, bkg_buf/*out*/);
+#ifdef H5S_DEBUG
+                H5_timer_end(&(io_info->stats->stats[1].bkg_timer), &timer);
+                io_info->stats->stats[1].bkg_nbytes += n * dst_type_size;
+                io_info->stats->stats[1].bkg_ncalls++;
+#endif
+                if (n!=smine_nelmts)
+                    HGOTO_ERROR (H5E_IO, H5E_READERROR, FAIL, "mem gather failed")
+            } /* end if */
+
+            /*
+             * Perform data type conversion.
+             */
+            if (H5T_convert(tpath, src_id, dst_id, smine_nelmts, 0, 0,
+                    tconv_buf, bkg_buf, io_info->dxpl_id)<0)
+                HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "data type conversion failed")
+
+            /*
+             * Scatter the data into memory.
+             */
+#ifdef H5S_DEBUG
+            H5_timer_begin(&timer);
+#endif
+            status = H5D_select_mscat(tconv_buf, chunk_info->mspace,
+                        &mem_iter, smine_nelmts, dxpl_cache, buf/*out*/);
+#ifdef H5S_DEBUG
+            H5_timer_end(&(io_info->stats->stats[1].scat_timer), &timer);
+            io_info->stats->stats[1].scat_nbytes += smine_nelmts * dst_type_size;
+            io_info->stats->stats[1].scat_ncalls++;
+#endif
+            if (status<0)
+                HGOTO_ERROR (H5E_DATASET, H5E_READERROR, FAIL, "scatter failed")
+        } /* end for */
+
+        /* Release selection iterators */
+        if(file_iter_init) {
+            if(H5S_SELECT_ITER_RELEASE(&file_iter)<0)
+                HGOTO_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+            file_iter_init=0;
+        } /* end if */
+        if(mem_iter_init) {
+            if(H5S_SELECT_ITER_RELEASE(&mem_iter)<0)
+                HGOTO_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+            mem_iter_init=0;
+        } /* end if */
+        if(bkg_iter_init) {
+            if(H5S_SELECT_ITER_RELEASE(&bkg_iter)<0)
+                HGOTO_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+            bkg_iter_init=0;
+        } /* end if */
+
+        /* Get the next chunk node in the skip list */
+        chunk_node=H5SL_next(chunk_node);
+    } /* end while */
+
+done:
+    /* Release selection iterators, if necessary */
+    if(file_iter_init) {
+        if(H5S_SELECT_ITER_RELEASE(&file_iter)<0)
+            HDONE_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+    } /* end if */
+    if(mem_iter_init) {
+        if(H5S_SELECT_ITER_RELEASE(&mem_iter)<0)
+            HDONE_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+    } /* end if */
+    if(bkg_iter_init) {
+        if(H5S_SELECT_ITER_RELEASE(&bkg_iter)<0)
+            HDONE_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+    } /* end if */
+
+    if (tconv_buf && NULL==dxpl_cache->tconv_buf)
+        H5FL_BLK_FREE(type_conv,tconv_buf);
+    if (bkg_buf && NULL==dxpl_cache->bkgr_buf)
+        H5FL_BLK_FREE(type_conv,bkg_buf);
+
+    /* Release chunk mapping information */
+    if(H5D_destroy_chunk_map(&fm) < 0)
+        HDONE_ERROR(H5E_DATASET, H5E_CANTRELEASE, FAIL, "can't release chunk mapping")
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5D_chunk_read() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_chunk_write
+ *
+ * Purpose:	Writes to a chunked dataset.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Raymond Lu
+ *		Thursday, April 10, 2003
+ *
+ * Modifications:
+ *      QAK - 2003/04/17
+ *      Hacked on it a lot. :-)
+
+ *      Kent Yang: 8/10/04
+ *      Added support for collective chunk IO.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_chunk_write(H5D_io_info_t *io_info, hsize_t nelmts,
+    const H5T_t *mem_type, const H5S_t *mem_space,
+    const H5S_t *file_space, H5T_path_t *tpath,
+    hid_t src_id, hid_t dst_id, const void *buf)
+{
+    H5D_t *dataset=io_info->dset;       /* Local pointer to dataset info */
+    const H5D_dxpl_cache_t *dxpl_cache=io_info->dxpl_cache;     /* Local pointer to dataset transfer info */
+    fm_map      fm;                     /* File<->memory mapping */
+    H5SL_node_t *chunk_node;            /* Current node in chunk skip list */
+    herr_t      status;                 /*function return status*/
+#ifdef H5S_DEBUG
+    H5_timer_t	timer;
+#endif
+    size_t	src_type_size;		/*size of source type	*/
+    size_t	dst_type_size;	        /*size of destination type*/
+    size_t	max_type_size;	        /* Size of largest source/destination type */
+    size_t	target_size;		/*desired buffer size	*/
+    size_t	request_nelmts;		/*requested strip mine	*/
+    hsize_t     smine_start;            /*strip mine start loc  */
+    size_t      n, smine_nelmts;        /*elements per strip    */
+    H5S_sel_iter_t mem_iter;            /*memory selection iteration info*/
+    hbool_t	mem_iter_init=0;	/*memory selection iteration info has been initialized */
+    H5S_sel_iter_t bkg_iter;            /*background iteration info*/
+    hbool_t	bkg_iter_init=0;	/*background iteration info has been initialized */
+    H5S_sel_iter_t file_iter;           /*file selection iteration info*/
+    hbool_t	file_iter_init=0;	/*file selection iteration info has been initialized */
+    H5T_bkg_t	need_bkg;		/*type of background buf*/
+    uint8_t	*tconv_buf = NULL;	/*data type conv buffer	*/
+    uint8_t	*bkg_buf = NULL;	/*background buffer	*/
+    H5D_storage_t store;                /*union of EFL and chunk pointer in file space */
+#ifdef H5_HAVE_PARALLEL
+    int         count_chunk;            /* Number of chunks accessed */
+    int         min_num_chunk;          /* Number of chunks to access collectively */
+#endif
+    herr_t	ret_value = SUCCEED;	/*return value		*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_chunk_write)
+
+    /* Map elements between file and memory for each chunk*/
+    if(H5D_create_chunk_map(dataset, mem_type, file_space, mem_space, &fm)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "can't build chunk mapping")
+
+    /* Set dataset storage for I/O info */
+    io_info->store=&store;
+
+    /*
+     * If there is no type conversion then write directly from the
+     * application's buffer.  This saves at least one mem-to-mem copy.
+     */
+    if (H5T_path_noop(tpath)) {
+#ifdef H5S_DEBUG
+	H5_timer_begin(&timer);
+#endif
+
+#ifdef H5_HAVE_PARALLEL
+        if(io_info->dxpl_cache->xfer_mode == H5FD_MPIO_COLLECTIVE) {
+       	    if(H5D_mpio_get_min_chunk(io_info, &fm, &min_num_chunk)<0)
+		HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get minimum number of chunk")
+	}
+        count_chunk = 0;
+#endif /* H5_HAVE_PARALLEL */
+
+        /* Get first node in chunk skip list */
+        chunk_node=H5SL_first(fm.fsel);
+
+        /* Iterate through chunks to be operated on */
+        while(chunk_node) {
+            H5D_chunk_info_t *chunk_info;       /* Chunk information */
+#ifdef H5_HAVE_PARALLEL
+            hbool_t make_ind, make_coll;        /* Flags to indicate that the MPI mode should change */
+#endif /* H5_HAVE_PARALLEL */
+
+            /* Get the actual chunk information from the skip list node */
+            chunk_info=H5SL_item(chunk_node);
+
+            /* Pass in chunk's coordinates in a union. */
+            store.chunk.offset = chunk_info->coords;
+            store.chunk.index = chunk_info->index;
+
+#ifdef H5_HAVE_PARALLEL
+            /* Reset flags for changing parallel I/O mode */
+            make_ind = make_coll = FALSE;
+
+            if(io_info->dxpl_cache->xfer_mode == H5FD_MPIO_COLLECTIVE) {
+                /* Increment chunk we are operating on */
+                count_chunk++;
+
+	       /* If the number of chunk is greater than minimum number of chunk,
+		  Do independent write */
+                if(count_chunk > min_num_chunk) {
+                    /* Switch to independent I/O (permanently) */
+                    make_ind = TRUE;
+	        }
+#ifndef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
+	        else {
+                        /* Switch to independent I/O (temporarily) */
+                        make_ind = TRUE;
+                        make_coll = TRUE;
+                } /* end else */
+#endif /* H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS */
+            } /* end if */
+
+            /* Switch to independent I/O */
+            if(make_ind)
+                if(H5D_ioinfo_make_ind(io_info) < 0)
+                    HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't switch to independent I/O")
+#endif	/* H5_HAVE_PARALLEL */
+
+            /* Perform the actual write operation */
+            status = (io_info->ops.write)(io_info,
+                chunk_info->chunk_points, H5T_get_size(dataset->shared->type),
+                chunk_info->fspace, chunk_info->mspace, buf);
+
+#ifdef H5_HAVE_PARALLEL
+            /* Switch back to collective I/O */
+            if(make_coll)
+                if(H5D_ioinfo_make_coll(io_info) < 0)
+                    HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't switch to independent I/O")
+#endif	/* H5_HAVE_PARALLEL */
+
+            /* Check return value from optimized write */
+            if (status<0)
+                HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "optimized write failed")
+
+            /* Get the next chunk node in the skip list */
+            chunk_node=H5SL_next(chunk_node);
+        } /* end while */
+
+#ifdef H5S_DEBUG
+	H5_timer_end(&(io_info->stats->stats[0].write_timer), &timer);
+	io_info->stats->stats[0].write_nbytes += nelmts * H5T_get_size(mem_type);
+	io_info->stats->stats[0].write_ncalls++;
+#endif
+
+	/* direct xfer accomplished successfully */
+	HGOTO_DONE(SUCCEED)
+    } /* end if */
+
+    /*
+     * This is the general case (type conversion, usually).
+     */
+    if(nelmts==0)
+        HGOTO_DONE(SUCCEED)
+
+    /* Compute element sizes and other parameters */
+    src_type_size = H5T_get_size(mem_type);
+    dst_type_size = H5T_get_size(dataset->shared->type);
+    max_type_size = MAX(src_type_size, dst_type_size);
+    target_size = dxpl_cache->max_temp_buf;
+    /* XXX: This could cause a problem if the user sets their buffer size
+     * to the same size as the default, and then the dataset elements are
+     * too large for the buffer... - QAK
+     */
+    if(target_size==H5D_XFER_MAX_TEMP_BUF_DEF) {
+        /* If the buffer is too small to hold even one element, make it bigger */
+        if(target_size<max_type_size)
+            target_size = max_type_size;
+        /* If the buffer is too large to hold all the elements, make it smaller */
+        else if(target_size>(nelmts*max_type_size))
+            target_size=(size_t)(nelmts*max_type_size);
+    } /* end if */
+    request_nelmts = target_size / max_type_size;
+
+    /* Sanity check elements in temporary buffer */
+    if (request_nelmts==0)
+        HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "temporary buffer max size is too small")
+
+    /*
+     * Get a temporary buffer for type conversion unless the app has already
+     * supplied one through the xfer properties.  Instead of allocating a
+     * buffer which is the exact size, we allocate the target size. The
+     * malloc() is usually less resource-intensive if we allocate/free the
+     * same size over and over.
+     */
+    if(H5T_detect_class(dataset->shared->type, H5T_VLEN)) {
+	/* Old data is retrieved into background buffer for VL datatype.  The
+	 * data is used later for freeing heap objects. */
+        need_bkg = H5T_BKG_YES;
+    } else if (H5T_path_bkg(tpath)) {
+        H5T_bkg_t path_bkg;     /* Type conversion's background info */
+
+        /* Retrieve the bkgr buffer property */
+        need_bkg=dxpl_cache->bkgr_buf_type;
+        path_bkg = H5T_path_bkg(tpath);
+        need_bkg = MAX (path_bkg, need_bkg);
+    } else {
+        need_bkg = H5T_BKG_NO; /*never needed even if app says yes*/
+    } /* end else */
+    if (NULL==(tconv_buf=dxpl_cache->tconv_buf)) {
+        /* Allocate temporary buffer */
+        if((tconv_buf=H5FL_BLK_MALLOC(type_conv,target_size))==NULL)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion")
+    } /* end if */
+    if (need_bkg && NULL==(bkg_buf=dxpl_cache->bkgr_buf)) {
+        /* Allocate background buffer */
+        /* (Don't need calloc()-like call since file data is already initialized) */
+        if((bkg_buf=H5FL_BLK_MALLOC(type_conv,(request_nelmts*dst_type_size)))==NULL)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for background conversion")
+    } /* end if */
+
+    /* Loop over all the chunks, performing I/O on each */
+
+    /* Get first node in chunk skip list */
+    chunk_node=H5SL_first(fm.fsel);
+
+    /* Iterate through chunks to be operated on */
+    while(chunk_node) {
+        H5D_chunk_info_t *chunk_info;   /* chunk information */
+
+        /* Get the actual chunk information from the skip list node */
+        chunk_info=H5SL_item(chunk_node);
+
+        /* initialize selection iterator */
+        if (H5S_select_iter_init(&file_iter, chunk_info->fspace, dst_type_size)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize file selection information")
+        file_iter_init=1;	/*file selection iteration info has been initialized */
+        if (H5S_select_iter_init(&mem_iter, chunk_info->mspace, src_type_size)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize memory selection information")
+        mem_iter_init=1;	/*file selection iteration info has been initialized */
+        if (H5S_select_iter_init(&bkg_iter, chunk_info->fspace, dst_type_size)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize background selection information")
+        bkg_iter_init=1;	/*file selection iteration info has been initialized */
+
+        /*pass in chunk's coordinates in a union*/
+        store.chunk.offset = chunk_info->coords;
+        store.chunk.index = chunk_info->index;
+
+        for (smine_start=0; smine_start<chunk_info->chunk_points; smine_start+=smine_nelmts) {
+            /* Go figure out how many elements to read from the file */
+            assert(H5S_SELECT_ITER_NELMTS(&file_iter)==(chunk_info->chunk_points-smine_start));
+            smine_nelmts = (size_t)MIN(request_nelmts, (chunk_info->chunk_points-smine_start));
+
+            /*
+             * Gather the data from disk into the data type conversion
+             * buffer. Also gather data from application to background buffer
+             * if necessary.
+             */
+#ifdef H5S_DEBUG
+            H5_timer_begin(&timer);
+#endif
+            n = H5D_select_mgath(buf, chunk_info->mspace, &mem_iter,
+                                 smine_nelmts, dxpl_cache, tconv_buf/*out*/);
+
+#ifdef H5S_DEBUG
+            H5_timer_end(&(io_info->stats->stats[1].gath_timer), &timer);
+            io_info->stats->stats[1].gath_nbytes += n * src_type_size;
+            io_info->stats->stats[1].gath_ncalls++;
+#endif
+            if (n!=smine_nelmts)
+                HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file gather failed")
+
+            if (H5T_BKG_YES==need_bkg) {
+#ifdef H5S_DEBUG
+                H5_timer_begin(&timer);
+#endif
+                n = H5D_select_fgath(io_info,
+                    chunk_info->fspace, &bkg_iter, smine_nelmts,
+                    bkg_buf/*out*/);
+
+#ifdef H5S_DEBUG
+                H5_timer_end(&(io_info->stats->stats[0].bkg_timer), &timer);
+                io_info->stats->stats[0].bkg_nbytes += n * dst_type_size;
+                io_info->stats->stats[0].bkg_ncalls++;
+#endif
+                if (n!=smine_nelmts)
+                    HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "file gather failed")
+            } /* end if */
+
+	    /*
+             * Perform data type conversion.
+             */
+            if (H5T_convert(tpath, src_id, dst_id, smine_nelmts, 0, 0,
+                    tconv_buf, bkg_buf, io_info->dxpl_id)<0)
+                HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "data type conversion failed")
+
+            /*
+             * Scatter the data out to the file.
+             */
+#ifdef H5S_DEBUG
+            H5_timer_begin(&timer);
+#endif
+            status = H5D_select_fscat(io_info,
+                chunk_info->fspace, &file_iter, smine_nelmts,
+                tconv_buf);
+
+#ifdef H5S_DEBUG
+            H5_timer_end(&(io_info->stats->stats[0].scat_timer), &timer);
+            io_info->stats->stats[0].scat_nbytes += n * dst_type_size;
+            io_info->stats->stats[0].scat_ncalls++;
+#endif
+            if (status<0)
+                HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "scatter failed")
+        } /* end for */
+
+        /* Release selection iterators */
+        if(file_iter_init) {
+            if(H5S_SELECT_ITER_RELEASE(&file_iter)<0)
+                HGOTO_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+            file_iter_init=0;
+        } /* end if */
+        if(mem_iter_init) {
+            if(H5S_SELECT_ITER_RELEASE(&mem_iter)<0)
+                HGOTO_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+            mem_iter_init=0;
+        } /* end if */
+        if(bkg_iter_init) {
+            if(H5S_SELECT_ITER_RELEASE(&bkg_iter)<0)
+                HGOTO_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+            bkg_iter_init=0;
+        } /* end if */
+
+        /* Get the next chunk node in the skip list */
+        chunk_node=H5SL_next(chunk_node);
+    } /* end while */
+
+done:
+    /* Release selection iterators, if necessary */
+    if(file_iter_init) {
+        if(H5S_SELECT_ITER_RELEASE(&file_iter)<0)
+            HDONE_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+    } /* end if */
+    if(mem_iter_init) {
+        if(H5S_SELECT_ITER_RELEASE(&mem_iter)<0)
+            HDONE_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+    } /* end if */
+    if(bkg_iter_init) {
+        if(H5S_SELECT_ITER_RELEASE(&bkg_iter)<0)
+            HDONE_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+    } /* end if */
+
+    if (tconv_buf && NULL==dxpl_cache->tconv_buf)
+        H5FL_BLK_FREE(type_conv,tconv_buf);
+    if (bkg_buf && NULL==dxpl_cache->bkgr_buf)
+        H5FL_BLK_FREE(type_conv,bkg_buf);
+
+    /* Release chunk mapping information */
+    if(H5D_destroy_chunk_map(&fm) < 0)
+        HDONE_ERROR(H5E_DATASET, H5E_CANTRELEASE, FAIL, "can't release chunk mapping")
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5D_chunk_write() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_create_chunk_map
+ *
+ * Purpose:	Creates the mapping between elements selected in each chunk
+ *              and the elements in the memory selection.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Raymond Lu
+ *		Thursday, April 10, 2003
+ *
+ * Modifications:
+ *      QAK - 2003/04/17
+ *      Hacked on it a lot. :-)
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_create_chunk_map(const H5D_t *dataset, const H5T_t *mem_type, const H5S_t *file_space,
+            const H5S_t *mem_space, fm_map *fm)
+{
+    H5S_t *tmp_mspace=NULL;     /* Temporary memory dataspace */
+    H5S_t *equiv_mspace=NULL;   /* Equivalent memory dataspace */
+    hbool_t equiv_mspace_init=0;/* Equivalent memory dataspace was created */
+    hssize_t old_offset[H5O_LAYOUT_NDIMS];  /* Old selection offset */
+    hbool_t file_space_normalized = FALSE;  /* File dataspace was normalized */
+    hid_t f_tid=(-1);           /* Temporary copy of file datatype for iteration */
+    hbool_t iter_init=0;        /* Selection iteration info has been initialized */
+    unsigned f_ndims;           /* The number of dimensions of the file's dataspace */
+    int sm_ndims;               /* The number of dimensions of the memory buffer's dataspace (signed) */
+    H5SL_node_t *curr_node;     /* Current node in skip list */
+    H5S_sel_type fsel_type;     /* Selection type on disk */
+    char bogus;                 /* "bogus" buffer to pass to selection iterator */
+    unsigned u;                 /* Local index variable */
+    herr_t ret_value = SUCCEED;	/* Return value		*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_create_chunk_map)
+
+    /* Get layout for dataset */
+    fm->layout = &(dataset->shared->layout);
+
+    /* Check if the memory space is scalar & make equivalent memory space */
+    if((sm_ndims = H5S_GET_EXTENT_NDIMS(mem_space))<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTGET, FAIL, "unable to get dimension number")
+    if(sm_ndims==0) {
+        hsize_t dims[H5O_LAYOUT_NDIMS];    /* Temporary dimension information */
+
+        /* Set up "equivalent" n-dimensional dataspace with size '1' in each dimension */
+        for(u=0; u<dataset->shared->layout.u.chunk.ndims-1; u++)
+            dims[u]=1;
+        if((equiv_mspace = H5S_create_simple(dataset->shared->layout.u.chunk.ndims-1,dims,NULL))==NULL)
+            HGOTO_ERROR (H5E_DATASPACE, H5E_CANTCREATE, FAIL, "unable to create equivalent dataspace for scalar space")
+
+        /* Indicate that this space needs to be released */
+        equiv_mspace_init=1;
+
+        /* Set the number of dimensions for the memory dataspace */
+        fm->m_ndims=dataset->shared->layout.u.chunk.ndims-1;
+    } /* end else */
+    else {
+        equiv_mspace=(H5S_t *)mem_space; /* Casting away 'const' OK... */
+
+        /* Set the number of dimensions for the memory dataspace */
+        H5_ASSIGN_OVERFLOW(fm->m_ndims,sm_ndims,int,unsigned);
+    } /* end else */
+
+    /* Get dim number and dimensionality for each dataspace */
+    fm->f_ndims=f_ndims=dataset->shared->layout.u.chunk.ndims-1;
+
+    if(H5S_get_simple_extent_dims(file_space, fm->f_dims, NULL)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTGET, FAIL, "unable to get dimensionality")
+
+    /* Normalize hyperslab selections by adjusting them by the offset */
+    /* (It might be worthwhile to normalize both the file and memory dataspaces
+     * before any (contiguous, chunked, etc) file I/O operation, in order to
+     * speed up hyperslab calculations by removing the extra checks and/or
+     * additions involving the offset and the hyperslab selection -QAK)
+     */
+    if(H5S_hyper_normalize_offset(file_space, old_offset)<0)
+        HGOTO_ERROR (H5E_DATASET, H5E_BADSELECT, FAIL, "unable to normalize dataspace by offset")
+    file_space_normalized = TRUE;
+
+    /* Decide the number of chunks in each dimension*/
+    for(u=0; u<f_ndims; u++) {
+        /* Keep the size of the chunk dimensions as hsize_t for various routines */
+        fm->chunk_dim[u]=fm->layout->u.chunk.dim[u];
+
+        /* Round up to the next integer # of chunks, to accomodate partial chunks */
+        fm->chunks[u] = ((fm->f_dims[u]+dataset->shared->layout.u.chunk.dim[u])-1) / dataset->shared->layout.u.chunk.dim[u];
+    } /* end for */
+
+    /* Compute the "down" size of 'chunks' information */
+    if(H5V_array_down(f_ndims,fm->chunks,fm->down_chunks)<0)
+        HGOTO_ERROR (H5E_INTERNAL, H5E_BADVALUE, FAIL, "can't compute 'down' sizes")
+
+    /* Initialize skip list for chunk selections */
+    if((fm->fsel=H5SL_create(H5SL_TYPE_HSIZE,0.5,H5D_DEFAULT_SKIPLIST_HEIGHT))==NULL)
+        HGOTO_ERROR(H5E_DATASET,H5E_CANTCREATE,FAIL,"can't create skip list for chunk selections")
+
+    /* Initialize "last chunk" information */
+    fm->last_index=(hsize_t)-1;
+    fm->last_chunk_info=NULL;
+
+    /* Point at the dataspaces */
+    fm->file_space=file_space;
+    fm->mem_space=equiv_mspace;
+    fm->mem_space_copy=equiv_mspace_init;       /* Make certain to copy memory dataspace if necessary */
+
+    /* Get type of selection on disk & in memory */
+    if((fsel_type=H5S_GET_SELECT_TYPE(file_space))<H5S_SEL_NONE)
+        HGOTO_ERROR (H5E_DATASET, H5E_BADSELECT, FAIL, "unable to convert from file to memory data space")
+    if((fm->msel_type=H5S_GET_SELECT_TYPE(equiv_mspace))<H5S_SEL_NONE)
+        HGOTO_ERROR (H5E_DATASET, H5E_BADSELECT, FAIL, "unable to convert from file to memory data space")
+
+    /* Check if file selection is a point selection */
+    if(fsel_type==H5S_SEL_POINTS) {
+        /* Create temporary datatypes for selection iteration */
+        if((f_tid = H5I_register(H5I_DATATYPE, H5T_copy(dataset->shared->type, H5T_COPY_ALL)))<0)
+            HGOTO_ERROR (H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register file datatype")
+
+        /* Spaces aren't the same shape, iterate over the memory selection directly */
+        if(H5S_select_iterate(&bogus, f_tid, file_space,  H5D_chunk_file_cb, fm)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to create file chunk selections")
+
+        /* Reset "last chunk" info */
+        fm->last_index=(hsize_t)-1;
+        fm->last_chunk_info=NULL;
+    } /* end if */
+    else {
+        /* Build the file selection for each chunk */
+        if(H5D_create_chunk_file_map_hyper(fm)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to create file chunk selections")
+
+        /* Clean file chunks' hyperslab span "scratch" information */
+        curr_node=H5SL_first(fm->fsel);
+        while(curr_node) {
+            H5D_chunk_info_t *chunk_info;   /* Pointer chunk information */
+
+            /* Get pointer to chunk's information */
+            chunk_info=H5SL_item(curr_node);
+            assert(chunk_info);
+
+            /* Clean hyperslab span's "scratch" information */
+            if(H5S_hyper_reset_scratch(chunk_info->fspace)<0)
+                HGOTO_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "unable to reset span scratch info")
+
+            /* Get the next chunk node in the skip list */
+            curr_node=H5SL_next(curr_node);
+        } /* end while */
+    } /* end else */
+
+    /* Build the memory selection for each chunk */
+    if(fsel_type!=H5S_SEL_POINTS && H5S_select_shape_same(file_space,equiv_mspace)==TRUE) {
+        /* Reset chunk template information */
+        fm->mchunk_tmpl=NULL;
+
+        /* If the selections are the same shape, use the file chunk information
+         * to generate the memory chunk information quickly.
+         */
+        if(H5D_create_chunk_mem_map_hyper(fm)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to create memory chunk selections")
+    } /* end if */
+    else {
+        size_t elmt_size;           /* Memory datatype size */
+
+        /* Make a copy of equivalent memory space */
+        if((tmp_mspace = H5S_copy(equiv_mspace,TRUE))==NULL)
+            HGOTO_ERROR (H5E_DATASPACE, H5E_CANTCOPY, FAIL, "unable to copy memory space")
+
+        /* De-select the mem space copy */
+        if(H5S_select_none(tmp_mspace)<0)
+            HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to de-select memory space")
+
+        /* Save chunk template information */
+        fm->mchunk_tmpl=tmp_mspace;
+
+        /* Create temporary datatypes for selection iteration */
+        if(f_tid<0) {
+            if((f_tid = H5I_register(H5I_DATATYPE, H5T_copy(dataset->shared->type, H5T_COPY_ALL)))<0)
+                HGOTO_ERROR (H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register file datatype")
+        } /* end if */
+
+        /* Create selection iterator for memory selection */
+        if((elmt_size=H5T_get_size(mem_type))==0)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_BADSIZE, FAIL, "datatype size invalid")
+        if (H5S_select_iter_init(&(fm->mem_iter), equiv_mspace, elmt_size)<0)
+            HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to initialize selection iterator")
+        iter_init=1;	/* Selection iteration info has been initialized */
+
+        /* Spaces aren't the same shape, iterate over the memory selection directly */
+        if(H5S_select_iterate(&bogus, f_tid, file_space,  H5D_chunk_mem_cb, fm)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to create memory chunk selections")
+
+        /* Clean up hyperslab stuff, if necessary */
+        if(fm->msel_type!=H5S_SEL_POINTS) {
+            /* Clean memory chunks' hyperslab span "scratch" information */
+            curr_node=H5SL_first(fm->fsel);
+            while(curr_node) {
+                H5D_chunk_info_t *chunk_info;   /* Pointer chunk information */
+
+                /* Get pointer to chunk's information */
+                chunk_info=H5SL_item(curr_node);
+                assert(chunk_info);
+
+                /* Clean hyperslab span's "scratch" information */
+                if(H5S_hyper_reset_scratch(chunk_info->mspace)<0)
+                    HGOTO_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "unable to reset span scratch info")
+
+                /* Get the next chunk node in the skip list */
+                curr_node=H5SL_next(curr_node);
+            } /* end while */
+        } /* end if */
+    } /* end else */
+
+done:
+    /* Release the [potentially partially built] chunk mapping information if an error occurs */
+    if(ret_value<0) {
+        if(tmp_mspace && !fm->mchunk_tmpl) {
+            if(H5S_close(tmp_mspace)<0)
+                HDONE_ERROR(H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "can't release memory chunk dataspace template")
+        } /* end if */
+
+        if (H5D_destroy_chunk_map(fm)<0)
+            HDONE_ERROR (H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release chunk mapping")
+    } /* end if */
+
+    /* Reset the global dataspace info */
+    fm->file_space=NULL;
+    fm->mem_space=NULL;
+
+    if(equiv_mspace_init && equiv_mspace) {
+        if(H5S_close(equiv_mspace)<0)
+            HDONE_ERROR(H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "can't release memory chunk dataspace template")
+    } /* end if */
+    if(iter_init) {
+        if (H5S_SELECT_ITER_RELEASE(&(fm->mem_iter))<0)
+            HDONE_ERROR (H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release selection iterator")
+    }
+    if(f_tid!=(-1)) {
+        if(H5I_dec_ref(f_tid)<0)
+            HDONE_ERROR (H5E_DATASET, H5E_CANTFREE, FAIL, "Can't decrement temporary datatype ID")
+    } /* end if */
+    if(file_space_normalized) {
+        if(H5S_hyper_denormalize_offset(file_space, old_offset)<0)
+            HGOTO_ERROR (H5E_DATASET, H5E_BADSELECT, FAIL, "unable to normalize dataspace by offset")
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_create_chunk_map() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5D_free_chunk_info
+ PURPOSE
+    Internal routine to destroy a chunk info node
+ USAGE
+    void H5D_free_chunk_info(chunk_info)
+        void *chunk_info;    IN: Pointer to chunk info to destroy
+ RETURNS
+    No return value
+ DESCRIPTION
+    Releases all the memory for a chunk info node.  Called by H5SL_iterate
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5D_free_chunk_info(void *item, void UNUSED *key, void UNUSED *opdata)
+{
+    H5D_chunk_info_t *chunk_info=(H5D_chunk_info_t *)item;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_free_chunk_info)
+
+    assert(chunk_info);
+
+    /* Close the chunk's file dataspace */
+    (void)H5S_close(chunk_info->fspace);
+
+    /* Close the chunk's memory dataspace, if it's not shared */
+    if(!chunk_info->mspace_shared)
+        (void)H5S_close(chunk_info->mspace);
+
+    /* Free the actual chunk info */
+    H5FL_FREE(H5D_chunk_info_t,chunk_info);
+
+    FUNC_LEAVE_NOAPI(0);
+}   /* H5D_free_chunk_info() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_destroy_chunk_map
+ *
+ * Purpose:	Destroy chunk mapping information.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Saturday, May 17, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_destroy_chunk_map(const fm_map *fm)
+{
+    herr_t	ret_value = SUCCEED;	/*return value		*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_destroy_chunk_map)
+
+    /* Free the chunk info skip list */
+    if(fm->fsel) {
+        if(H5SL_count(fm->fsel)>0)
+            if(H5SL_iterate(fm->fsel,H5D_free_chunk_info,NULL)<0)
+                HGOTO_ERROR(H5E_PLIST,H5E_CANTNEXT,FAIL,"can't iterate over chunks")
+
+        H5SL_close(fm->fsel);
+    } /* end if */
+
+    /* Free the memory chunk dataspace template */
+    if(fm->mchunk_tmpl)
+        if(H5S_close(fm->mchunk_tmpl)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "can't release memory chunk dataspace template")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_destroy_chunk_map() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_create_chunk_file_map_hyper
+ *
+ * Purpose:	Create all chunk selections in file.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, May 29, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_create_chunk_file_map_hyper(const fm_map *fm)
+{
+    hssize_t    ssel_points;                /* Number of elements in file selection */
+    hsize_t     sel_points;                 /* Number of elements in file selection */
+    hsize_t    sel_start[H5O_LAYOUT_NDIMS];   /* Offset of low bound of file selection */
+    hsize_t    sel_end[H5O_LAYOUT_NDIMS];   /* Offset of high bound of file selection */
+    hsize_t    start_coords[H5O_LAYOUT_NDIMS];   /* Starting coordinates of selection */
+    hsize_t    coords[H5O_LAYOUT_NDIMS];   /* Current coordinates of chunk */
+    hsize_t    end[H5O_LAYOUT_NDIMS];      /* Current coordinates of chunk */
+    hsize_t     chunk_index;                /* Index of chunk */
+    int         curr_dim;                   /* Current dimension to increment */
+    unsigned    u;                          /* Local index variable */
+    herr_t	ret_value = SUCCEED;        /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_create_chunk_file_map_hyper)
+
+    /* Sanity check */
+    assert(fm->f_ndims>0);
+
+    /* Get number of elements selected in file */
+    if((ssel_points=H5S_GET_SELECT_NPOINTS(fm->file_space))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't get file selection # of elements")
+    H5_ASSIGN_OVERFLOW(sel_points,ssel_points,hssize_t,hsize_t);
+
+    /* Get bounding box for selection (to reduce the number of chunks to iterate over) */
+    if(H5S_SELECT_BOUNDS(fm->file_space, sel_start, sel_end)<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't get file selection bound info")
+
+    /* Set initial chunk location & hyperslab size */
+    for(u=0; u<fm->f_ndims; u++) {
+        start_coords[u]=(sel_start[u]/fm->layout->u.chunk.dim[u])*fm->layout->u.chunk.dim[u];
+        coords[u]=start_coords[u];
+        end[u]=(coords[u]+fm->chunk_dim[u])-1;
+    } /* end for */
+
+    /* Calculate the index of this chunk */
+    if(H5V_chunk_index(fm->f_ndims,coords,fm->layout->u.chunk.dim,fm->down_chunks,&chunk_index)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index")
+
+    /* Iterate through each chunk in the dataset */
+    while(sel_points) {
+        /* Check for intersection of temporary chunk and file selection */
+        /* (Casting away const OK - QAK) */
+        if(H5S_hyper_intersect_block((H5S_t *)fm->file_space,coords,end)==TRUE) {
+            H5S_t *tmp_fchunk;                  /* Temporary file dataspace */
+            H5D_chunk_info_t *new_chunk_info;   /* chunk information to insert into skip list */
+            hssize_t    schunk_points;          /* Number of elements in chunk selection */
+
+            /* Create "temporary" chunk for selection operations (copy file space) */
+            if((tmp_fchunk = H5S_copy(fm->file_space,TRUE))==NULL)
+                HGOTO_ERROR (H5E_DATASPACE, H5E_CANTCOPY, FAIL, "unable to copy memory space")
+
+            /* Make certain selections are stored in span tree form (not "optimized hyperslab" or "all") */
+            if(H5S_hyper_convert(tmp_fchunk)<0) {
+                (void)H5S_close(tmp_fchunk);
+                HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to convert selection to span trees")
+            } /* end if */
+
+            /* "AND" temporary chunk and current chunk */
+            if(H5S_select_hyperslab(tmp_fchunk,H5S_SELECT_AND,coords,NULL,fm->chunk_dim,NULL)<0) {
+                (void)H5S_close(tmp_fchunk);
+                HGOTO_ERROR(H5E_DATASPACE, H5E_CANTSELECT, FAIL, "can't create chunk selection")
+            } /* end if */
+
+            /* Resize chunk's dataspace dimensions to size of chunk */
+            if(H5S_set_extent_real(tmp_fchunk,fm->chunk_dim)<0) {
+                (void)H5S_close(tmp_fchunk);
+                HGOTO_ERROR(H5E_DATASPACE, H5E_CANTSELECT, FAIL, "can't adjust chunk dimensions")
+            } /* end if */
+
+            /* Move selection back to have correct offset in chunk */
+            if(H5S_hyper_adjust_u(tmp_fchunk,coords)<0) {
+                (void)H5S_close(tmp_fchunk);
+                HGOTO_ERROR(H5E_DATASPACE, H5E_CANTSELECT, FAIL, "can't adjust chunk selection")
+            } /* end if */
+
+            /* Add temporary chunk to the list of chunks */
+
+            /* Allocate the file & memory chunk information */
+            if (NULL==(new_chunk_info = H5FL_MALLOC (H5D_chunk_info_t))) {
+                (void)H5S_close(tmp_fchunk);
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate chunk info")
+            } /* end if */
+
+            /* Initialize the chunk information */
+
+            /* Set the chunk index */
+            new_chunk_info->index=chunk_index;
+
+            /* Set the file chunk dataspace */
+            new_chunk_info->fspace=tmp_fchunk;
+
+            /* Set the memory chunk dataspace */
+            new_chunk_info->mspace=NULL;
+            new_chunk_info->mspace_shared=0;
+
+            /* Copy the chunk's coordinates */
+            for(u=0; u<fm->f_ndims; u++)
+                new_chunk_info->coords[u]=coords[u];
+            new_chunk_info->coords[fm->f_ndims]=0;
+
+            /* Insert the new chunk into the skip list */
+            if(H5SL_insert(fm->fsel,new_chunk_info,&new_chunk_info->index)<0) {
+                H5D_free_chunk_info(new_chunk_info,NULL,NULL);
+                HGOTO_ERROR(H5E_DATASPACE,H5E_CANTINSERT,FAIL,"can't insert chunk into skip list")
+            } /* end if */
+
+            /* Get number of elements selected in chunk */
+            if((schunk_points=H5S_GET_SELECT_NPOINTS(tmp_fchunk))<0)
+                HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't get file selection # of elements")
+            H5_ASSIGN_OVERFLOW(new_chunk_info->chunk_points,schunk_points,hssize_t,size_t);
+
+            /* Decrement # of points left in file selection */
+            sel_points-=(hsize_t)schunk_points;
+
+            /* Leave if we are done */
+            if(sel_points==0)
+                HGOTO_DONE(SUCCEED)
+            assert(sel_points>0);
+        } /* end if */
+
+        /* Increment chunk index */
+        chunk_index++;
+
+        /* Set current increment dimension */
+        curr_dim=(int)fm->f_ndims-1;
+
+        /* Increment chunk location in fastest changing dimension */
+        H5_CHECK_OVERFLOW(fm->chunk_dim[curr_dim],hsize_t,hssize_t);
+        coords[curr_dim]+=fm->chunk_dim[curr_dim];
+        end[curr_dim]+=fm->chunk_dim[curr_dim];
+
+        /* Bring chunk location back into bounds, if necessary */
+        if(coords[curr_dim]>sel_end[curr_dim]) {
+            do {
+                /* Reset current dimension's location to 0 */
+                coords[curr_dim]=start_coords[curr_dim]; /*lint !e771 The start_coords will always be initialized */
+                end[curr_dim]=(coords[curr_dim]+(hssize_t)fm->chunk_dim[curr_dim])-1;
+
+                /* Decrement current dimension */
+                curr_dim--;
+
+                /* Increment chunk location in current dimension */
+                coords[curr_dim]+=fm->chunk_dim[curr_dim];
+                end[curr_dim]=(coords[curr_dim]+fm->chunk_dim[curr_dim])-1;
+            } while(coords[curr_dim]>sel_end[curr_dim]);
+
+            /* Re-Calculate the index of this chunk */
+            if(H5V_chunk_index(fm->f_ndims,coords,fm->layout->u.chunk.dim,fm->down_chunks,&chunk_index)<0)
+                HGOTO_ERROR (H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index")
+        } /* end if */
+    } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_create_chunk_file_map_hyper() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_create_chunk_mem_map_hyper
+ *
+ * Purpose:	Create all chunk selections in memory by copying the file
+ *              chunk selections and adjusting their offsets to be correct
+ *              for the memory.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, May 29, 2003
+ *
+ * Assumptions: That the file and memory selections are the same shape.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_create_chunk_mem_map_hyper(const fm_map *fm)
+{
+    H5SL_node_t *curr_node;                 /* Current node in skip list */
+    hsize_t    file_sel_start[H5O_LAYOUT_NDIMS];    /* Offset of low bound of file selection */
+    hsize_t    file_sel_end[H5O_LAYOUT_NDIMS];  /* Offset of high bound of file selection */
+    hsize_t    mem_sel_start[H5O_LAYOUT_NDIMS]; /* Offset of low bound of file selection */
+    hsize_t    mem_sel_end[H5O_LAYOUT_NDIMS];   /* Offset of high bound of file selection */
+    hssize_t adjust[H5O_LAYOUT_NDIMS];      /* Adjustment to make to all file chunks */
+    hssize_t chunk_adjust[H5O_LAYOUT_NDIMS];  /* Adjustment to make to a particular chunk */
+    unsigned    u;                          /* Local index variable */
+    herr_t	ret_value = SUCCEED;        /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_create_chunk_mem_map_hyper)
+
+    /* Sanity check */
+    assert(fm->f_ndims>0);
+
+    /* Check for all I/O going to a single chunk */
+    if(H5SL_count(fm->fsel)==1) {
+        H5D_chunk_info_t *chunk_info;   /* Pointer to chunk information */
+
+        /* Get the node */
+        curr_node=H5SL_first(fm->fsel);
+
+        /* Get pointer to chunk's information */
+        chunk_info=H5SL_item(curr_node);
+        assert(chunk_info);
+
+        /* Check if it's OK to share dataspace */
+        if(fm->mem_space_copy) {
+            /* Copy the memory dataspace & selection to be the chunk's dataspace & selection */
+            if((chunk_info->mspace = H5S_copy(fm->mem_space,FALSE))==NULL)
+                HGOTO_ERROR (H5E_DATASPACE, H5E_CANTCOPY, FAIL, "unable to copy memory space")
+        } /* end if */
+        else {
+            /* Just point at the memory dataspace & selection */
+            /* (Casting away const OK -QAK) */
+            chunk_info->mspace=(H5S_t *)fm->mem_space;
+
+            /* Indicate that the chunk's memory space is shared */
+            chunk_info->mspace_shared=1;
+        } /* end else */
+    } /* end if */
+    else {
+        /* Get bounding box for file selection */
+        if(H5S_SELECT_BOUNDS(fm->file_space, file_sel_start, file_sel_end)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't get file selection bound info")
+
+        /* Get bounding box for memory selection */
+        if(H5S_SELECT_BOUNDS(fm->mem_space, mem_sel_start, mem_sel_end)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't get file selection bound info")
+
+        /* Calculate the adjustment for memory selection from file selection */
+        assert(fm->m_ndims==fm->f_ndims);
+        for(u=0; u<fm->f_ndims; u++) {
+            H5_CHECK_OVERFLOW(file_sel_start[u],hsize_t,hssize_t);
+            H5_CHECK_OVERFLOW(mem_sel_start[u],hsize_t,hssize_t);
+            adjust[u]=(hssize_t)file_sel_start[u]-(hssize_t)mem_sel_start[u];
+        } /* end for */
+
+        /* Iterate over each chunk in the chunk list */
+        curr_node=H5SL_first(fm->fsel);
+        while(curr_node) {
+            H5D_chunk_info_t *chunk_info;   /* Pointer to chunk information */
+
+            /* Get pointer to chunk's information */
+            chunk_info=H5SL_item(curr_node);
+            assert(chunk_info);
+
+            /* Copy the information */
+
+            /* Copy the memory dataspace */
+            if((chunk_info->mspace = H5S_copy(fm->mem_space,TRUE))==NULL)
+                HGOTO_ERROR (H5E_DATASPACE, H5E_CANTCOPY, FAIL, "unable to copy memory space")
+
+            /* Release the current selection */
+            if(H5S_SELECT_RELEASE(chunk_info->mspace)<0)
+                HGOTO_ERROR (H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release selection")
+
+            /* Copy the file chunk's selection */
+            if(H5S_select_copy(chunk_info->mspace,chunk_info->fspace,FALSE)<0)
+                HGOTO_ERROR (H5E_DATASPACE, H5E_CANTCOPY, FAIL, "unable to copy selection")
+
+            /* Compensate for the chunk offset */
+            for(u=0; u<fm->f_ndims; u++) {
+                H5_CHECK_OVERFLOW(chunk_info->coords[u],hsize_t,hssize_t);
+                chunk_adjust[u]=adjust[u]-(hssize_t)chunk_info->coords[u]; /*lint !e771 The adjust array will always be initialized */
+            } /* end for */
+
+            /* Adjust the selection */
+            if(H5S_hyper_adjust_s(chunk_info->mspace,chunk_adjust)<0) /*lint !e772 The chunk_adjust array will always be initialized */
+                HGOTO_ERROR(H5E_DATASPACE, H5E_CANTSELECT, FAIL, "can't adjust chunk selection")
+
+            /* Get the next chunk node in the skip list */
+            curr_node=H5SL_next(curr_node);
+        } /* end while */
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_create_chunk_mem_map_hyper() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_chunk_file_cb
+ *
+ * Purpose:	Callback routine for file selection iterator.  Used when
+ *              creating selections in file for each point selected.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, July 23, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_chunk_file_cb(void UNUSED *elem, hid_t UNUSED type_id, unsigned ndims, const hsize_t *coords, void *_fm)
+{
+    fm_map      *fm = (fm_map*)_fm;             /* File<->memory chunk mapping info */
+    H5D_chunk_info_t *chunk_info;               /* Chunk information for current chunk */
+    hsize_t    coords_in_chunk[H5O_LAYOUT_NDIMS];        /* Coordinates of element in chunk */
+    hsize_t     chunk_index;                    /* Chunk index */
+    unsigned    u;                              /* Local index variable */
+    herr_t	ret_value = SUCCEED;            /* Return value		*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_chunk_file_cb)
+
+    /* Calculate the index of this chunk */
+    if(H5V_chunk_index(ndims,coords,fm->layout->u.chunk.dim,fm->down_chunks,&chunk_index)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index")
+
+    /* Find correct chunk in file & memory skip list */
+    if(chunk_index==fm->last_index) {
+        /* If the chunk index is the same as the last chunk index we used,
+         * get the cached info to operate on.
+         */
+        chunk_info=fm->last_chunk_info;
+    } /* end if */
+    else {
+        /* If the chunk index is not the same as the last chunk index we used,
+         * find the chunk in the skip list.
+         */
+        /* Get the chunk node from the skip list */
+        if((chunk_info=H5SL_search(fm->fsel,&chunk_index))==NULL) {
+            H5S_t *fspace;                      /* Memory chunk's dataspace */
+
+            /* Allocate the file & memory chunk information */
+            if (NULL==(chunk_info = H5FL_MALLOC (H5D_chunk_info_t)))
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate chunk info")
+
+            /* Initialize the chunk information */
+
+            /* Set the chunk index */
+            chunk_info->index=chunk_index;
+
+            /* Create a dataspace for the chunk */
+            if((fspace = H5S_create_simple(fm->f_ndims,fm->chunk_dim,NULL))==NULL) {
+                H5FL_FREE(H5D_chunk_info_t,chunk_info);
+                HGOTO_ERROR (H5E_DATASPACE, H5E_CANTCREATE, FAIL, "unable to create dataspace for chunk")
+            } /* end if */
+
+            /* De-select the chunk space */
+            if(H5S_select_none(fspace)<0) {
+                (void)H5S_close(fspace);
+                H5FL_FREE(H5D_chunk_info_t,chunk_info);
+                HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to de-select dataspace")
+            } /* end if */
+
+            /* Set the file chunk dataspace */
+            chunk_info->fspace=fspace;
+
+            /* Set the memory chunk dataspace */
+            chunk_info->mspace=NULL;
+            chunk_info->mspace_shared=0;
+
+            /* Set the number of selected elements in chunk to zero */
+            chunk_info->chunk_points=0;
+
+            /* Compute the chunk's coordinates */
+            for(u=0; u<fm->f_ndims; u++) {
+                H5_CHECK_OVERFLOW(fm->layout->u.chunk.dim[u],hsize_t,hssize_t);
+                chunk_info->coords[u]=(coords[u]/(hssize_t)fm->layout->u.chunk.dim[u])*(hssize_t)fm->layout->u.chunk.dim[u];
+            } /* end for */
+            chunk_info->coords[fm->f_ndims]=0;
+
+            /* Insert the new chunk into the skip list */
+            if(H5SL_insert(fm->fsel,chunk_info,&chunk_info->index)<0) {
+                H5D_free_chunk_info(chunk_info,NULL,NULL);
+                HGOTO_ERROR(H5E_DATASPACE,H5E_CANTINSERT,FAIL,"can't insert chunk into skip list")
+            } /* end if */
+        } /* end if */
+
+        /* Update the "last chunk seen" information */
+        fm->last_index=chunk_index;
+        fm->last_chunk_info=chunk_info;
+    } /* end else */
+
+    /* Get the coordinates of the element in the chunk */
+    for(u=0; u<fm->f_ndims; u++)
+        coords_in_chunk[u]=coords[u]%fm->layout->u.chunk.dim[u];
+
+    /* Add point to file selection for chunk */
+    if(H5S_select_elements(chunk_info->fspace,H5S_SELECT_APPEND,1,(const hsize_t **)coords_in_chunk)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTSELECT, FAIL, "unable to select element")
+
+    /* Increment the number of elemented selected in chunk */
+    chunk_info->chunk_points++;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_chunk_file_cb() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_chunk_mem_cb
+ *
+ * Purpose:	Callback routine for file selection iterator.  Used when
+ *              creating selections in memory for each chunk.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Raymond Lu
+ *		Thursday, April 10, 2003
+ *
+ * Modifications:
+ *      QAK - 2003/04/17
+ *      Hacked on it a lot. :-)
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5D_chunk_mem_cb(void UNUSED *elem, hid_t UNUSED type_id, unsigned ndims, const hsize_t *coords, void *_fm)
+{
+    fm_map      *fm = (fm_map*)_fm;             /* File<->memory chunk mapping info */
+    H5D_chunk_info_t *chunk_info;               /* Chunk information for current chunk */
+    hsize_t    coords_in_mem[H5O_LAYOUT_NDIMS];        /* Coordinates of element in memory */
+    hsize_t     chunk_index;                    /* Chunk index */
+    herr_t	ret_value = SUCCEED;            /* Return value		*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_chunk_mem_cb)
+
+    /* Calculate the index of this chunk */
+    if(H5V_chunk_index(ndims,coords,fm->layout->u.chunk.dim,fm->down_chunks,&chunk_index)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index")
+
+    /* Find correct chunk in file & memory skip list */
+    if(chunk_index==fm->last_index) {
+        /* If the chunk index is the same as the last chunk index we used,
+         * get the cached spaces to operate on.
+         */
+        chunk_info=fm->last_chunk_info;
+    } /* end if */
+    else {
+        /* If the chunk index is not the same as the last chunk index we used,
+         * find the chunk in the skip list.
+         */
+        /* Get the chunk node from the skip list */
+        if((chunk_info=H5SL_search(fm->fsel,&chunk_index))==NULL)
+            HGOTO_ERROR(H5E_DATASPACE,H5E_NOTFOUND,FAIL,"can't locate chunk in skip list")
+
+        /* Check if the chunk already has a memory space */
+        if(chunk_info->mspace==NULL) {
+            /* Copy the template memory chunk dataspace */
+            if((chunk_info->mspace = H5S_copy(fm->mchunk_tmpl,FALSE))==NULL)
+                HGOTO_ERROR (H5E_DATASPACE, H5E_CANTCOPY, FAIL, "unable to copy file space")
+        } /* end else */
+
+        /* Update the "last chunk seen" information */
+        fm->last_index=chunk_index;
+        fm->last_chunk_info=chunk_info;
+    } /* end else */
+
+    /* Get coordinates of selection iterator for memory */
+    if(H5S_SELECT_ITER_COORDS(&fm->mem_iter,coords_in_mem)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTGET, FAIL, "unable to get iterator coordinates")
+
+    /* Add point to memory selection for chunk */
+    if(fm->msel_type==H5S_SEL_POINTS) {
+        if(H5S_select_elements(chunk_info->mspace,H5S_SELECT_APPEND,1,(const hsize_t **)coords_in_mem)<0)
+            HGOTO_ERROR (H5E_DATASPACE, H5E_CANTSELECT, FAIL, "unable to select element")
+    } /* end if */
+    else {
+        if(H5S_hyper_add_span_element(chunk_info->mspace, fm->m_ndims, coords_in_mem)<0)
+            HGOTO_ERROR (H5E_DATASPACE, H5E_CANTSELECT, FAIL, "unable to select element")
+    } /* end else */
+
+    /* Move memory selection iterator to next element in selection */
+    if(H5S_SELECT_ITER_NEXT(&fm->mem_iter,1)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTNEXT, FAIL, "unable to move to next iterator location")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_chunk_mem_cb() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_ioinfo_init
+ *
+ * Purpose:	Routine for determining correct I/O operations for
+ *              each I/O action.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, September 30, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_ioinfo_init(H5D_t *dset, const H5D_dxpl_cache_t *dxpl_cache, hid_t dxpl_id,
+    const H5S_t
+#if !(defined H5_HAVE_PARALLEL || defined H5S_DEBUG)
+    UNUSED
+#endif /* H5_HAVE_PARALLEL */
+    *mem_space, const H5S_t
+#if !(defined H5_HAVE_PARALLEL || defined H5S_DEBUG)
+    UNUSED
+#endif /* H5_HAVE_PARALLEL */
+    *file_space, H5T_path_t
+#ifndef H5_HAVE_PARALLEL
+    UNUSED
+#endif /* H5_HAVE_PARALLEL */
+    *tpath,
+    H5D_io_info_t *io_info)
+{
+
+    herr_t	ret_value = SUCCEED;	/* Return value	*/
+
+#if defined H5_HAVE_PARALLEL || defined H5S_DEBUG
+    FUNC_ENTER_NOAPI_NOINIT(H5D_ioinfo_init)
+#else /* defined H5_HAVE_PARALLEL || defined H5S_DEBUG */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_ioinfo_init)
+#endif /* defined H5_HAVE_PARALLEL || defined H5S_DEBUG */
+
+    /* check args */
+    HDassert(dset);
+    HDassert(dset->ent.file);
+    HDassert(mem_space);
+    HDassert(file_space);
+    HDassert(tpath);
+    HDassert(io_info);
+
+    /* Set up "normal" I/O fields */
+    io_info->dset=dset;
+    io_info->dxpl_cache=dxpl_cache;
+    io_info->dxpl_id=dxpl_id;
+    io_info->store=NULL;        /* Set later in I/O routine? */
+
+    /* Set I/O operations to initial values */
+    io_info->ops=dset->shared->io_ops;
+
+#ifdef H5_HAVE_PARALLEL
+    /* Start in the "not modified" xfer_mode state */
+    io_info->xfer_mode_changed = FALSE;
+
+    if(IS_H5FD_MPI(dset->ent.file)) {
+        htri_t opt;         /* Flag whether a selection is optimizable */
+
+        /* Get MPI communicator */
+        if((io_info->comm = H5F_mpi_get_comm(dset->ent.file)) == MPI_COMM_NULL)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't retrieve MPI communicator")
+
+        /*
+         * Check if we can set direct MPI-IO read/write functions
+         */
+        opt=H5D_mpio_opt_possible(io_info, mem_space, file_space, tpath);
+        if(opt==FAIL)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "invalid check for direct IO dataspace ");
+
+        /* Check if we can use the optimized parallel I/O routines */
+        if(opt==TRUE) {
+            /* Set the pointers to the MPI-specific routines */
+            io_info->ops.read = H5D_mpio_select_read;
+            io_info->ops.write = H5D_mpio_select_write;
+        } /* end if */
+        else {
+            /* Set the pointers to the non-MPI-specific routines */
+            io_info->ops.read = H5D_select_read;
+            io_info->ops.write = H5D_select_write;
+
+            /* If we won't be doing collective I/O, but the user asked for
+             * collective I/O, change the request to use independent I/O, but
+             * mark it so that we remember to revert the change.
+             */
+            if(io_info->dxpl_cache->xfer_mode==H5FD_MPIO_COLLECTIVE) {
+                H5P_genplist_t *dx_plist;           /* Data transer property list */
+
+                /* Get the dataset transfer property list */
+                if (NULL == (dx_plist = H5I_object(dxpl_id)))
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list")
+
+                /* Change the xfer_mode to independent for handling the I/O */
+                io_info->dxpl_cache->xfer_mode = H5FD_MPIO_INDEPENDENT;
+                if(H5P_set (dx_plist, H5D_XFER_IO_XFER_MODE_NAME, &io_info->dxpl_cache->xfer_mode) < 0)
+                    HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set transfer mode")
+
+                /* Indicate that the transfer mode should be restored before returning
+                 * to user.
+                 */
+                io_info->xfer_mode_changed = TRUE;
+            } /* end if */
+
+#ifdef H5_HAVE_INSTRUMENTED_LIBRARY
+            /**** Test for collective chunk IO
+                  notice the following code should be removed after
+                  a more general collective chunk IO algorithm is applied.
+                  (This property is only reset for independent I/O)
+            */
+            if(dset->shared->layout.type == H5D_CHUNKED) { /*only check for chunking storage */
+                htri_t check_prop;
+
+                check_prop = H5Pexist(dxpl_id,H5D_XFER_COLL_CHUNK_NAME);
+                if(check_prop < 0)
+                    HGOTO_ERROR(H5E_PLIST, H5E_UNSUPPORTED, FAIL, "unable to check property list");
+                if(check_prop > 0) {
+                    int prop_value = 0;
+
+                    if(H5Pset(dxpl_id,H5D_XFER_COLL_CHUNK_NAME,&prop_value)<0)
+                        HGOTO_ERROR(H5E_PLIST, H5E_UNSUPPORTED, FAIL, "unable to set property value");
+                } /* end if */
+            } /* end if */
+#endif /* H5_HAVE_INSTRUMENTED_LIBRARY */
+        } /* end else */
+    } /* end if */
+    else {
+        /* Set the pointers to the non-MPI-specific routines */
+        io_info->ops.read = H5D_select_read;
+        io_info->ops.write = H5D_select_write;
+
+
+    } /* end else */
+#else /* H5_HAVE_PARALLEL */
+    io_info->ops.read = H5D_select_read;
+    io_info->ops.write = H5D_select_write;
+#endif /* H5_HAVE_PARALLEL */
+
+#ifdef H5S_DEBUG
+    /* Get the information for the I/O statistics */
+    if((io_info->stats=H5S_find(mem_space,file_space))==NULL)
+        HGOTO_ERROR(H5E_DATASET, H5E_BADSELECT, FAIL, "can't set up selection statistics");
+#endif /* H5S_DEBUG */
+
+#if defined H5_HAVE_PARALLEL || defined H5S_DEBUG
+done:
+#endif /* H5_HAVE_PARALLEL || H5S_DEBUG */
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_ioinfo_init() */
+#ifdef H5_HAVE_PARALLEL
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_ioinfo_make_ind
+ *
+ * Purpose:	Switch to MPI independent I/O
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Friday, August 12, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_ioinfo_make_ind(H5D_io_info_t *io_info)
+{
+    H5P_genplist_t *dx_plist;           /* Data transer property list */
+    herr_t	ret_value = SUCCEED;	/*return value		*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_ioinfo_make_ind)
+
+    /* Get the dataset transfer property list */
+    if (NULL == (dx_plist = H5I_object(io_info->dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
+
+    /* Change the xfer_mode to independent, handle the request,
+     * then set xfer_mode before return.
+     */
+    io_info->dxpl_cache->xfer_mode = H5FD_MPIO_INDEPENDENT;
+    if(H5P_set (dx_plist, H5D_XFER_IO_XFER_MODE_NAME, &io_info->dxpl_cache->xfer_mode) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set transfer mode")
+
+    /* Set the pointers to the non-MPI-specific routines */
+    io_info->ops.read = H5D_select_read;
+    io_info->ops.write = H5D_select_write;
+
+    /* Indicate that the transfer mode should be restored before returning
+     * to user.
+     */
+    io_info->xfer_mode_changed=TRUE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_ioinfo_make_ind() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_ioinfo_make_coll
+ *
+ * Purpose:	Switch to MPI collective I/O
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Friday, August 12, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_ioinfo_make_coll(H5D_io_info_t *io_info)
+{
+    H5P_genplist_t *dx_plist;           /* Data transer property list */
+    herr_t	ret_value = SUCCEED;	/*return value		*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_ioinfo_make_coll)
+
+    /* Get the dataset transfer property list */
+    if (NULL == (dx_plist = H5I_object(io_info->dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
+
+    /* Change the xfer_mode to independent, handle the request,
+     * then set xfer_mode before return.
+     */
+    io_info->dxpl_cache->xfer_mode = H5FD_MPIO_COLLECTIVE;
+    if(H5P_set (dx_plist, H5D_XFER_IO_XFER_MODE_NAME, &io_info->dxpl_cache->xfer_mode) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set transfer mode")
+
+    /* Set the pointers to the MPI-specific routines */
+    io_info->ops.read = H5D_mpio_select_read;
+    io_info->ops.write = H5D_mpio_select_write;
+
+    /* Indicate that the transfer mode should _NOT_ be restored before returning
+     * to user.
+     */
+    io_info->xfer_mode_changed=FALSE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_ioinfo_make_coll() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_ioinfo_term
+ *
+ * Purpose:	Common logic for terminating an I/O info object
+ *              (Only used for restoring MPI transfer mode currently)
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Friday, February  6, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_ioinfo_term(H5D_io_info_t *io_info)
+{
+    herr_t	ret_value = SUCCEED;	/*return value		*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_ioinfo_term)
+
+    /* Check if we need to revert the change to the xfer mode */
+    if (io_info->xfer_mode_changed) {
+        H5P_genplist_t *dx_plist;           /* Data transer property list */
+
+        /* Get the dataset transfer property list */
+        if (NULL == (dx_plist = H5I_object(io_info->dxpl_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
+
+        /* Restore the original parallel I/O mode */
+        io_info->dxpl_cache->xfer_mode = H5FD_MPIO_COLLECTIVE;
+        if(H5P_set (dx_plist, H5D_XFER_IO_XFER_MODE_NAME, &io_info->dxpl_cache->xfer_mode) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set transfer mode")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_ioinfo_term() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_mpio_get_min_chunk
+ *
+ * Purpose:	Routine for obtaining minimum number of chunks to cover
+ *              hyperslab selection selected by all processors.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_mpio_get_min_chunk(const H5D_io_info_t *io_info,
+    const fm_map *fm, int *min_chunkf)
+{
+    int num_chunkf;             /* Number of chunks to iterate over */
+    int mpi_code;               /* MPI return code */
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_mpio_get_min_chunk);
+
+    /* Get the number of chunks to perform I/O on */
+    num_chunkf = H5SL_count(fm->fsel);
+
+    /* Determine the minimum # of chunks for all processes */
+    if (MPI_SUCCESS != (mpi_code = MPI_Allreduce(&num_chunkf, min_chunkf, 1, MPI_INT, MPI_MIN, io_info->comm)))
+        HMPI_GOTO_ERROR(FAIL, "MPI_Allreduce failed", mpi_code)
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5D_mpio_get_min_chunk() */
+#endif /*H5_HAVE_PARALLEL*/
+

Added: packages/hdf5/branches/upstream/current/src/H5Distore.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Distore.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Distore.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3498 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer: 	Robb Matzke <matzke at llnl.gov>
+ *	       	Wednesday, October  8, 1997
+ *
+ * Purpose:	Indexed (chunked) I/O functions.  The logical
+ *		multi-dimensional data space is regularly partitioned into
+ *		same-sized "chunks", the first of which is aligned with the
+ *		logical origin.  The chunks are given a multi-dimensional
+ *		index which is used as a lookup key in a B-tree that maps
+ *		chunk index to disk address.  Each chunk can be compressed
+ *		independently and the chunks may move around in the file as
+ *		their storage requirements change.
+ *
+ * Cache:	Disk I/O is performed in units of chunks and H5MF_alloc()
+ *		contains code to optionally align chunks on disk block
+ *		boundaries for performance.
+ *
+ *		The chunk cache is an extendible hash indexed by a function
+ *		of storage B-tree address and chunk N-dimensional offset
+ *		within the dataset.  Collisions are not resolved -- one of
+ *		the two chunks competing for the hash slot must be preempted
+ *		from the cache.  All entries in the hash also participate in
+ *		a doubly-linked list and entries are penalized by moving them
+ *		toward the front of the list.  When a new chunk is about to
+ *		be added to the cache the heap is pruned by preempting
+ *		entries near the front of the list to make room for the new
+ *		entry which is added to the end of the list.
+ */
+
+#define H5B_PACKAGE		/*suppress error about including H5Bpkg	  */
+#define H5D_PACKAGE		/*suppress error about including H5Dpkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Bpkg.h"		/* B-link trees				*/
+#include "H5Dpkg.h"		/* Datasets				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* Files				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MFprivate.h"	/* File space management		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Oprivate.h"		/* Object headers		  	*/
+#include "H5Pprivate.h"         /* Property lists                       */
+#include "H5Sprivate.h"         /* Dataspaces                           */
+#include "H5Vprivate.h"		/* Vector and array functions		*/
+
+/*
+ * Feature: If this constant is defined then every cache preemption and load
+ *	    causes a character to be printed on the standard error stream:
+ *
+ *     `.': Entry was preempted because it has been completely read or
+ *	    completely written but not partially read and not partially
+ *	    written. This is often a good reason for preemption because such
+ *	    a chunk will be unlikely to be referenced in the near future.
+ *
+ *     `:': Entry was preempted because it hasn't been used recently.
+ *
+ *     `#': Entry was preempted because another chunk collided with it. This
+ *	    is usually a relatively bad thing.  If there are too many of
+ *	    these then the number of entries in the cache can be increased.
+ *
+ *       c: Entry was preempted because the file is closing.
+ *
+ *	 w: A chunk read operation was eliminated because the library is
+ *	    about to write new values to the entire chunk.  This is a good
+ *	    thing, especially on files where the chunk size is the same as
+ *	    the disk block size, chunks are aligned on disk block boundaries,
+ *	    and the operating system can also eliminate a read operation.
+ */
+
+/*#define H5D_ISTORE_DEBUG */
+
+/*
+ * Given a B-tree node return the dimensionality of the chunks pointed to by
+ * that node.
+ */
+#define H5D_ISTORE_NDIMS(X)	(((X)->sizeof_rkey-8)/8)
+
+/* Raw data chunks are cached.  Each entry in the cache is: */
+typedef struct H5D_rdcc_ent_t {
+    hbool_t	locked;		/*entry is locked in cache		*/
+    hbool_t	dirty;		/*needs to be written to disk?		*/
+    hsize_t	offset[H5O_LAYOUT_NDIMS]; /*chunk name			*/
+    size_t	rd_count;	/*bytes remaining to be read		*/
+    size_t	wr_count;	/*bytes remaining to be written		*/
+    size_t	chunk_size;	/*size of a chunk			*/
+    size_t	alloc_size;	/*amount allocated for the chunk	*/
+    uint8_t	*chunk;		/*the unfiltered chunk data		*/
+    unsigned	idx;		/*index in hash table			*/
+    struct H5D_rdcc_ent_t *next;/*next item in doubly-linked list	*/
+    struct H5D_rdcc_ent_t *prev;/*previous item in doubly-linked list	*/
+} H5D_rdcc_ent_t;
+typedef H5D_rdcc_ent_t *H5D_rdcc_ent_ptr_t; /* For free lists */
+
+/*
+ * B-tree key.	A key contains the minimum logical N-dimensional address and
+ * the logical size of the chunk to which this key refers.  The
+ * fastest-varying dimension is assumed to reference individual bytes of the
+ * array, so a 100-element 1-d array of 4-byte integers would really be a 2-d
+ * array with the slow varying dimension of size 100 and the fast varying
+ * dimension of size 4 (the storage dimensionality has very little to do with
+ * the real dimensionality).
+ *
+ * Only the first few values of the OFFSET and SIZE fields are actually
+ * stored on disk, depending on the dimensionality.
+ *
+ * The chunk's file address is part of the B-tree and not part of the key.
+ */
+typedef struct H5D_istore_key_t {
+    size_t	nbytes;				/*size of stored data	*/
+    hsize_t	offset[H5O_LAYOUT_NDIMS];	/*logical offset to start*/
+    unsigned	filter_mask;			/*excluded filters	*/
+} H5D_istore_key_t;
+
+typedef struct H5D_istore_ud1_t {
+    H5D_istore_key_t	key;	                /*key values		*/
+    haddr_t		addr;			/*file address of chunk */
+    const H5O_layout_t	*mesg;		        /*layout message	*/
+    hsize_t		total_storage;	        /*output from iterator	*/
+    FILE		*stream;		/*debug output stream	*/
+    hsize_t		*dims;		        /*dataset dimensions	*/
+} H5D_istore_ud1_t;
+
+#define H5D_HASH(D,ADDR) H5F_addr_hash(ADDR,(D)->cache.chunk.nslots)
+
+/* Private prototypes */
+static void *H5D_istore_chunk_alloc(size_t size, const H5O_pline_t *pline);
+static void *H5D_istore_chunk_xfree(void *chk, const H5O_pline_t *pline);
+static herr_t H5D_istore_shared_create (const H5F_t *f, H5O_layout_t *layout);
+static herr_t H5D_istore_shared_free (void *page);
+
+/* B-tree iterator callbacks */
+static int H5D_istore_iter_allocated(H5F_t *f, hid_t dxpl_id, const void *left_key, haddr_t addr,
+				 const void *right_key, void *_udata);
+static int H5D_istore_iter_dump(H5F_t *f, hid_t dxpl_id, const void *left_key, haddr_t addr,
+				 const void *right_key, void *_udata);
+static int H5D_istore_prune_extent(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
+        const void *_rt_key, void *_udata);
+
+/* B-tree callbacks */
+static size_t H5D_istore_sizeof_rkey(const H5F_t *f, const void *_udata);
+static H5RC_t *H5D_istore_get_shared(const H5F_t *f, const void *_udata);
+static herr_t H5D_istore_new_node(H5F_t *f, hid_t dxpl_id, H5B_ins_t, void *_lt_key,
+				  void *_udata, void *_rt_key,
+				  haddr_t *addr_p /*out*/);
+static int H5D_istore_cmp2(H5F_t *f, hid_t dxpl_id, void *_lt_key, void *_udata,
+			    void *_rt_key);
+static int H5D_istore_cmp3(H5F_t *f, hid_t dxpl_id, void *_lt_key, void *_udata,
+			    void *_rt_key);
+static herr_t H5D_istore_found(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_lt_key,
+			       void *_udata);
+static H5B_ins_t H5D_istore_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key,
+				   hbool_t *lt_key_changed, void *_md_key,
+				   void *_udata, void *_rt_key,
+				   hbool_t *rt_key_changed,
+				   haddr_t *new_node/*out*/);
+static H5B_ins_t H5D_istore_remove( H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key,
+                  hbool_t *lt_key_changed, void *_udata, void *_rt_key,
+                  hbool_t *rt_key_changed);
+static herr_t H5D_istore_decode_key(const H5F_t *f, const H5B_t *bt, const uint8_t *raw,
+				    void *_key);
+static herr_t H5D_istore_encode_key(const H5F_t *f, const H5B_t *bt, uint8_t *raw,
+				    void *_key);
+static herr_t H5D_istore_debug_key(FILE *stream, H5F_t *f, hid_t dxpl_id,
+                                int indent, int fwidth, const void *key,
+                                    const void *udata);
+
+/* inherits B-tree like properties from H5B */
+H5B_class_t H5B_ISTORE[1] = {{
+    H5B_ISTORE_ID,		/*id			*/
+    sizeof(H5D_istore_key_t),	/*sizeof_nkey		*/
+    H5D_istore_sizeof_rkey, 	/*get_sizeof_rkey	*/
+    H5D_istore_get_shared,	/*get_shared		*/
+    H5D_istore_new_node,	/*new			*/
+    H5D_istore_cmp2,		/*cmp2			*/
+    H5D_istore_cmp3,		/*cmp3			*/
+    H5D_istore_found,		/*found			*/
+    H5D_istore_insert,		/*insert		*/
+    FALSE,			/*follow min branch?	*/
+    FALSE,			/*follow max branch?	*/
+    H5D_istore_remove,          /*remove		*/
+    H5D_istore_decode_key,	/*decode		*/
+    H5D_istore_encode_key,	/*encode		*/
+    H5D_istore_debug_key,	/*debug			*/
+}};
+
+/* Declare a free list to manage the H5B_shared_t struct */
+H5FL_EXTERN(H5B_shared_t);
+
+/* Declare a free list to manage H5F_rdcc_ent_t objects */
+H5FL_DEFINE_STATIC(H5D_rdcc_ent_t);
+
+/* Declare a free list to manage the H5F_rdcc_ent_ptr_t sequence information */
+H5FL_SEQ_DEFINE_STATIC(H5D_rdcc_ent_ptr_t);
+
+/* Declare a free list to manage the chunk sequence information */
+H5FL_BLK_DEFINE_STATIC(chunk);
+
+/* Declare a free list to manage the native key offset sequence information */
+H5FL_SEQ_DEFINE_STATIC(size_t);
+
+/* Declare a free list to manage the raw page information */
+H5FL_BLK_DEFINE_STATIC(chunk_page);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_sizeof_rkey
+ *
+ * Purpose:	Returns the size of a raw key for the specified UDATA.	The
+ *		size of the key is dependent on the number of dimensions for
+ *		the object to which this B-tree points.	 The dimensionality
+ *		of the UDATA is the only portion that's referenced here.
+ *
+ * Return:	Success:	Size of raw key in bytes.
+ *
+ *		Failure:	abort()
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, October  8, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static size_t
+H5D_istore_sizeof_rkey(const H5F_t UNUSED *f, const void *_udata)
+{
+    const H5D_istore_ud1_t *udata = (const H5D_istore_ud1_t *) _udata;
+    size_t		    nbytes;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_sizeof_rkey)
+
+    assert(udata);
+    assert(udata->mesg->u.chunk.ndims > 0 && udata->mesg->u.chunk.ndims <= H5O_LAYOUT_NDIMS);
+
+    nbytes = 4 +			/*storage size		*/
+	     4 +			/*filter mask		*/
+	     udata->mesg->u.chunk.ndims*8;	/*dimension indices	*/
+
+    FUNC_LEAVE_NOAPI(nbytes)
+} /* end H5D_istore_sizeof_rkey() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_get_shared
+ *
+ * Purpose:	Returns the shared B-tree info for the specified UDATA.
+ *
+ * Return:	Success:	Pointer to the raw B-tree page for this dataset
+ *
+ *		Failure:	Can't fail
+ *
+ * Programmer:	Quincey Koziol
+ *		Monday, July  5, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static H5RC_t *
+H5D_istore_get_shared(const H5F_t UNUSED *f, const void *_udata)
+{
+    const H5D_istore_ud1_t *udata = (const H5D_istore_ud1_t *) _udata;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_get_shared)
+
+    assert(udata);
+    assert(udata->mesg);
+    assert(udata->mesg->u.chunk.btree_shared);
+
+    /* Increment reference count on B-tree info */
+    H5RC_INC(udata->mesg->u.chunk.btree_shared);
+
+    /* Return the pointer to the ref-count object */
+    FUNC_LEAVE_NOAPI(udata->mesg->u.chunk.btree_shared)
+} /* end H5D_istore_get_shared() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_decode_key
+ *
+ * Purpose:	Decodes a raw key into a native key for the B-tree
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, October 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_istore_decode_key(const H5F_t UNUSED *f, const H5B_t *bt, const uint8_t *raw, void *_key)
+{
+    H5D_istore_key_t	*key = (H5D_istore_key_t *) _key;
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    size_t		ndims;
+    unsigned		u;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_decode_key)
+
+    /* check args */
+    assert(f);
+    assert(bt);
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+    assert(raw);
+    assert(key);
+    ndims = H5D_ISTORE_NDIMS(shared);
+    assert(ndims<=H5O_LAYOUT_NDIMS);
+
+    /* decode */
+    UINT32DECODE(raw, key->nbytes);
+    UINT32DECODE(raw, key->filter_mask);
+    for (u=0; u<ndims; u++)
+	UINT64DECODE(raw, key->offset[u]);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5D_istore_decode_key() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_encode_key
+ *
+ * Purpose:	Encode a key from native format to raw format.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, October 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_istore_encode_key(const H5F_t UNUSED *f, const H5B_t *bt, uint8_t *raw, void *_key)
+{
+    H5D_istore_key_t	*key = (H5D_istore_key_t *) _key;
+    H5B_shared_t        *shared;        /* Pointer to shared B-tree info */
+    size_t		ndims;
+    unsigned		u;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_encode_key)
+
+    /* check args */
+    assert(f);
+    assert(bt);
+    shared=H5RC_GET_OBJ(bt->rc_shared);
+    HDassert(shared);
+    assert(raw);
+    assert(key);
+    ndims = H5D_ISTORE_NDIMS(shared);
+    assert(ndims<=H5O_LAYOUT_NDIMS);
+
+    /* encode */
+    UINT32ENCODE(raw, key->nbytes);
+    UINT32ENCODE(raw, key->filter_mask);
+    for (u=0; u<ndims; u++)
+	UINT64ENCODE(raw, key->offset[u]);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5D_istore_encode_key() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_debug_key
+ *
+ * Purpose:	Prints a key.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5D_istore_debug_key (FILE *stream, H5F_t UNUSED *f, hid_t UNUSED dxpl_id, int indent, int fwidth,
+		      const void *_key, const void *_udata)
+{
+    const H5D_istore_key_t	*key = (const H5D_istore_key_t *)_key;
+    const H5D_istore_ud1_t	*udata = (const H5D_istore_ud1_t *)_udata;
+    unsigned		u;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_debug_key)
+
+    assert (key);
+
+    HDfprintf(stream, "%*s%-*s %Zd bytes\n", indent, "", fwidth,
+	      "Chunk size:", key->nbytes);
+    HDfprintf(stream, "%*s%-*s 0x%08x\n", indent, "", fwidth,
+	      "Filter mask:", key->filter_mask);
+    HDfprintf(stream, "%*s%-*s {", indent, "", fwidth,
+	      "Logical offset:");
+    for (u=0; u<udata->mesg->u.chunk.ndims; u++)
+        HDfprintf (stream, "%s%Hd", u?", ":"", key->offset[u]);
+    HDfputs ("}\n", stream);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5D_istore_debug_key() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_cmp2
+ *
+ * Purpose:	Compares two keys sort of like strcmp().  The UDATA pointer
+ *		is only to supply extra information not carried in the keys
+ *		(in this case, the dimensionality) and is not compared
+ *		against the keys.
+ *
+ * Return:	Success:	-1 if LT_KEY is less than RT_KEY;
+ *				1 if LT_KEY is greater than RT_KEY;
+ *				0 if LT_KEY and RT_KEY are equal.
+ *
+ *		Failure:	FAIL (same as LT_KEY<RT_KEY)
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, November  6, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static int
+H5D_istore_cmp2(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, void *_lt_key, void *_udata,
+		void *_rt_key)
+{
+    H5D_istore_key_t	*lt_key = (H5D_istore_key_t *) _lt_key;
+    H5D_istore_key_t	*rt_key = (H5D_istore_key_t *) _rt_key;
+    H5D_istore_ud1_t	*udata = (H5D_istore_ud1_t *) _udata;
+    int		ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_cmp2)
+
+    assert(lt_key);
+    assert(rt_key);
+    assert(udata);
+    assert(udata->mesg->u.chunk.ndims > 0 && udata->mesg->u.chunk.ndims <= H5O_LAYOUT_NDIMS);
+
+    /* Compare the offsets but ignore the other fields */
+    ret_value = H5V_vector_cmp_u(udata->mesg->u.chunk.ndims, lt_key->offset, rt_key->offset);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_cmp2() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_cmp3
+ *
+ * Purpose:	Compare the requested datum UDATA with the left and right
+ *		keys of the B-tree.
+ *
+ * Return:	Success:	negative if the min_corner of UDATA is less
+ *				than the min_corner of LT_KEY.
+ *
+ *				positive if the min_corner of UDATA is
+ *				greater than or equal the min_corner of
+ *				RT_KEY.
+ *
+ *				zero otherwise.	 The min_corner of UDATA is
+ *				not necessarily contained within the address
+ *				space represented by LT_KEY, but a key that
+ *				would describe the UDATA min_corner address
+ *				would fall lexicographically between LT_KEY
+ *				and RT_KEY.
+ *
+ *		Failure:	FAIL (same as UDATA < LT_KEY)
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, October  8, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static int
+H5D_istore_cmp3(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, void *_lt_key, void *_udata,
+		void *_rt_key)
+{
+    H5D_istore_key_t	*lt_key = (H5D_istore_key_t *) _lt_key;
+    H5D_istore_key_t	*rt_key = (H5D_istore_key_t *) _rt_key;
+    H5D_istore_ud1_t	*udata = (H5D_istore_ud1_t *) _udata;
+    int		ret_value = 0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_cmp3)
+
+    assert(lt_key);
+    assert(rt_key);
+    assert(udata);
+    assert(udata->mesg->u.chunk.ndims > 0 && udata->mesg->u.chunk.ndims <= H5O_LAYOUT_NDIMS);
+
+    /* Special case for faster checks on 1-D chunks */
+    /* (Checking for ndims==2 because last dimension is the datatype size) */
+    /* The additional checking for the right key is necessary due to the */
+    /* slightly odd way the library initializes the right-most node in the */
+    /* indexed storage B-tree... */
+    /* (Dump the B-tree with h5debug to look at it) -QAK */
+    if(udata->mesg->u.chunk.ndims==2) {
+        if(udata->key.offset[0]>rt_key->offset[0])
+            ret_value=1;
+        else if(udata->key.offset[0]==rt_key->offset[0] &&
+                udata->key.offset[1]>=rt_key->offset[1])
+            ret_value=1;
+        else if(udata->key.offset[0]<lt_key->offset[0])
+            ret_value=(-1);
+    } /* end if */
+    else {
+        if (H5V_vector_ge_u(udata->mesg->u.chunk.ndims, udata->key.offset,
+                                 rt_key->offset))
+            ret_value = 1;
+        else if (H5V_vector_lt_u(udata->mesg->u.chunk.ndims, udata->key.offset,
+                            lt_key->offset))
+            ret_value = -1;
+    } /* end else */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_cmp3() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_new_node
+ *
+ * Purpose:	Adds a new entry to an i-storage B-tree.  We can assume that
+ *		the domain represented by UDATA doesn't intersect the domain
+ *		already represented by the B-tree.
+ *
+ * Return:	Success:	Non-negative. The address of leaf is returned
+ *				through the ADDR argument.  It is also added
+ *				to the UDATA.
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, October 14, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_istore_new_node(H5F_t *f, hid_t dxpl_id, H5B_ins_t op,
+		    void *_lt_key, void *_udata, void *_rt_key,
+		    haddr_t *addr_p/*out*/)
+{
+    H5D_istore_key_t	*lt_key = (H5D_istore_key_t *) _lt_key;
+    H5D_istore_key_t	*rt_key = (H5D_istore_key_t *) _rt_key;
+    H5D_istore_ud1_t	*udata = (H5D_istore_ud1_t *) _udata;
+    unsigned		u;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_istore_new_node)
+
+    /* check args */
+    assert(f);
+    assert(lt_key);
+    assert(rt_key);
+    assert(udata);
+    assert(udata->mesg->u.chunk.ndims > 0 && udata->mesg->u.chunk.ndims < H5O_LAYOUT_NDIMS);
+    assert(addr_p);
+
+    /* Allocate new storage */
+    assert (udata->key.nbytes > 0);
+    H5_CHECK_OVERFLOW( udata->key.nbytes ,size_t, hsize_t);
+    if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, (hsize_t)udata->key.nbytes)))
+        HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "couldn't allocate new file storage")
+    udata->addr = *addr_p;
+
+    /*
+     * The left key describes the storage of the UDATA chunk being
+     * inserted into the tree.
+     */
+    lt_key->nbytes = udata->key.nbytes;
+    lt_key->filter_mask = udata->key.filter_mask;
+    for (u=0; u<udata->mesg->u.chunk.ndims; u++)
+        lt_key->offset[u] = udata->key.offset[u];
+
+    /*
+     * The right key might already be present.  If not, then add a zero-width
+     * chunk.
+     */
+    if (H5B_INS_LEFT != op) {
+        rt_key->nbytes = 0;
+        rt_key->filter_mask = 0;
+        for (u=0; u<udata->mesg->u.chunk.ndims; u++) {
+            assert (udata->key.offset[u]+udata->mesg->u.chunk.dim[u] >
+                udata->key.offset[u]);
+            rt_key->offset[u] = udata->key.offset[u] + udata->mesg->u.chunk.dim[u];
+        }
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_new_node() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_found
+ *
+ * Purpose:	This function is called when the B-tree search engine has
+ *		found the leaf entry that points to a chunk of storage that
+ *		contains the beginning of the logical address space
+ *		represented by UDATA.  The LT_KEY is the left key (the one
+ *		that describes the chunk) and RT_KEY is the right key (the
+ *		one that describes the next or last chunk).
+ *
+ * Note:	It's possible that the chunk isn't really found.  For
+ *		instance, in a sparse dataset the requested chunk might fall
+ *		between two stored chunks in which case this function is
+ *		called with the maximum stored chunk indices less than the
+ *		requested chunk indices.
+ *
+ * Return:	Non-negative on success with information about the chunk
+ *		returned through the UDATA argument. Negative on failure.
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, October  9, 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5D_istore_found(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, haddr_t addr, const void *_lt_key,
+		 void *_udata)
+{
+    H5D_istore_ud1_t	   *udata = (H5D_istore_ud1_t *) _udata;
+    const H5D_istore_key_t *lt_key = (const H5D_istore_key_t *) _lt_key;
+    unsigned		u;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_found)
+
+    /* Check arguments */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(udata);
+    assert(lt_key);
+
+    /* Is this *really* the requested chunk? */
+    for (u=0; u<udata->mesg->u.chunk.ndims; u++)
+        if (udata->key.offset[u] >= lt_key->offset[u]+udata->mesg->u.chunk.dim[u])
+            HGOTO_DONE(FAIL)
+
+    /* Initialize return values */
+    udata->addr = addr;
+    udata->key.nbytes = lt_key->nbytes;
+    udata->key.filter_mask = lt_key->filter_mask;
+    assert (lt_key->nbytes>0);
+    for (u = 0; u < udata->mesg->u.chunk.ndims; u++)
+        udata->key.offset[u] = lt_key->offset[u];
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_found() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_insert
+ *
+ * Purpose:	This function is called when the B-tree insert engine finds
+ *		the node to use to insert new data.  The UDATA argument
+ *		points to a struct that describes the logical addresses being
+ *		added to the file.  This function allocates space for the
+ *		data and returns information through UDATA describing a
+ *		file chunk to receive (part of) the data.
+ *
+ *		The LT_KEY is always the key describing the chunk of file
+ *		memory at address ADDR. On entry, UDATA describes the logical
+ *		addresses for which storage is being requested (through the
+ *		`offset' and `size' fields). On return, UDATA describes the
+ *		logical addresses contained in a chunk on disk.
+ *
+ * Return:	Success:	An insertion command for the caller, one of
+ *				the H5B_INS_* constants.  The address of the
+ *				new chunk is returned through the NEW_NODE
+ *				argument.
+ *
+ *		Failure:	H5B_INS_ERROR
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, October  9, 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value. The NEW_NODE argument
+ *		is renamed NEW_NODE_P.
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static H5B_ins_t
+H5D_istore_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key,
+		  hbool_t *lt_key_changed,
+		  void *_md_key, void *_udata, void *_rt_key,
+		  hbool_t UNUSED *rt_key_changed,
+		  haddr_t *new_node_p/*out*/)
+{
+    H5D_istore_key_t	*lt_key = (H5D_istore_key_t *) _lt_key;
+    H5D_istore_key_t	*md_key = (H5D_istore_key_t *) _md_key;
+    H5D_istore_key_t	*rt_key = (H5D_istore_key_t *) _rt_key;
+    H5D_istore_ud1_t	*udata = (H5D_istore_ud1_t *) _udata;
+    int		cmp;
+    unsigned		u;
+    H5B_ins_t		ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_istore_insert)
+
+    /* check args */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(lt_key);
+    assert(lt_key_changed);
+    assert(md_key);
+    assert(udata);
+    assert(rt_key);
+    assert(new_node_p);
+
+    cmp = H5D_istore_cmp3(f, dxpl_id, lt_key, udata, rt_key);
+    assert(cmp <= 0);
+
+    if (cmp < 0) {
+        /* Negative indices not supported yet */
+        HGOTO_ERROR(H5E_STORAGE, H5E_UNSUPPORTED, H5B_INS_ERROR, "internal error")
+
+    } else if (H5V_vector_eq_u (udata->mesg->u.chunk.ndims,
+				udata->key.offset, lt_key->offset) &&
+	       lt_key->nbytes>0) {
+        /*
+         * Already exists.  If the new size is not the same as the old size
+         * then we should reallocate storage.
+         */
+        if (lt_key->nbytes != udata->key.nbytes) {
+/* Currently, the old chunk data is "thrown away" after the space is reallocated,
+ * so avoid data copy in H5MF_realloc() call by just free'ing the space and
+ * allocating new space.
+ *
+ * This should keep the file smaller also, by freeing the space and then
+ * allocating new space, instead of vice versa (in H5MF_realloc).
+ *
+ * QAK - 11/19/2002
+ */
+#ifdef OLD_WAY
+            if (HADDR_UNDEF==(*new_node_p=H5MF_realloc(f, H5FD_MEM_DRAW, addr,
+                      (hsize_t)lt_key->nbytes, (hsize_t)udata->key.nbytes)))
+                HGOTO_ERROR (H5E_STORAGE, H5E_NOSPACE, H5B_INS_ERROR, "unable to reallocate chunk storage")
+#else /* OLD_WAY */
+            H5_CHECK_OVERFLOW( lt_key->nbytes ,size_t, hsize_t);
+            if (H5MF_xfree(f, H5FD_MEM_DRAW, dxpl_id, addr, (hsize_t)lt_key->nbytes)<0)
+                HGOTO_ERROR(H5E_STORAGE, H5E_CANTFREE, H5B_INS_ERROR, "unable to free chunk")
+            H5_CHECK_OVERFLOW( udata->key.nbytes ,size_t, hsize_t);
+            if (HADDR_UNDEF==(*new_node_p=H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, (hsize_t)udata->key.nbytes)))
+                HGOTO_ERROR(H5E_STORAGE, H5E_NOSPACE, H5B_INS_ERROR, "unable to reallocate chunk")
+#endif /* OLD_WAY */
+            lt_key->nbytes = udata->key.nbytes;
+            lt_key->filter_mask = udata->key.filter_mask;
+            *lt_key_changed = TRUE;
+            udata->addr = *new_node_p;
+            ret_value = H5B_INS_CHANGE;
+        } else {
+            udata->addr = addr;
+            ret_value = H5B_INS_NOOP;
+        }
+
+    } else if (H5V_hyper_disjointp(udata->mesg->u.chunk.ndims,
+				   lt_key->offset, udata->mesg->u.chunk.dim,
+				   udata->key.offset, udata->mesg->u.chunk.dim)) {
+        assert(H5V_hyper_disjointp(udata->mesg->u.chunk.ndims,
+				   rt_key->offset, udata->mesg->u.chunk.dim,
+				   udata->key.offset, udata->mesg->u.chunk.dim));
+        /*
+         * Split this node, inserting the new new node to the right of the
+         * current node.  The MD_KEY is where the split occurs.
+         */
+        md_key->nbytes = udata->key.nbytes;
+        md_key->filter_mask = udata->key.filter_mask;
+        for (u=0; u<udata->mesg->u.chunk.ndims; u++) {
+            assert(0 == udata->key.offset[u] % udata->mesg->u.chunk.dim[u]);
+            md_key->offset[u] = udata->key.offset[u];
+        }
+
+        /*
+         * Allocate storage for the new chunk
+         */
+        H5_CHECK_OVERFLOW( udata->key.nbytes ,size_t, hsize_t);
+        if (HADDR_UNDEF==(*new_node_p=H5MF_alloc(f, H5FD_MEM_DRAW, dxpl_id, (hsize_t)udata->key.nbytes)))
+            HGOTO_ERROR(H5E_STORAGE, H5E_NOSPACE, H5B_INS_ERROR, "file allocation failed")
+        udata->addr = *new_node_p;
+        ret_value = H5B_INS_RIGHT;
+
+    } else {
+        HGOTO_ERROR(H5E_IO, H5E_UNSUPPORTED, H5B_INS_ERROR, "internal error")
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_insert() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_iter_allocated
+ *
+ * Purpose:	Simply counts the number of chunks for a dataset.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 21, 1999
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ *		Quincey Koziol, 2002-04-22
+ *		Changed to callback from H5B_iterate
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static int
+H5D_istore_iter_allocated (H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *_lt_key, haddr_t UNUSED addr,
+		    const void UNUSED *_rt_key, void *_udata)
+{
+    H5D_istore_ud1_t	*bt_udata = (H5D_istore_ud1_t *)_udata;
+    const H5D_istore_key_t	*lt_key = (const H5D_istore_key_t *)_lt_key;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_iter_allocated)
+
+    bt_udata->total_storage += lt_key->nbytes;
+
+    FUNC_LEAVE_NOAPI(H5B_ITER_CONT)
+} /* H5D_istore_iter_allocated() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_iter_dump
+ *
+ * Purpose:	If the UDATA.STREAM member is non-null then debugging
+ *              information is written to that stream.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 21, 1999
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ *		Quincey Koziol, 2002-04-22
+ *		Changed to callback from H5B_iterate
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static int
+H5D_istore_iter_dump (H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *_lt_key, haddr_t UNUSED addr,
+		    const void UNUSED *_rt_key, void *_udata)
+{
+    H5D_istore_ud1_t	*bt_udata = (H5D_istore_ud1_t *)_udata;
+    const H5D_istore_key_t	*lt_key = (const H5D_istore_key_t *)_lt_key;
+    unsigned		u;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_iter_dump)
+
+    if (bt_udata->stream) {
+        if (0==bt_udata->total_storage) {
+            fprintf(bt_udata->stream,
+                "             Flags    Bytes    Address Logical Offset\n");
+            fprintf(bt_udata->stream,
+                "        ========== ======== ========== "
+                "==============================\n");
+        }
+        HDfprintf(bt_udata->stream, "        0x%08x %8Zu %10a [",
+              lt_key->filter_mask, lt_key->nbytes, addr);
+        for (u=0; u<bt_udata->mesg->u.chunk.ndims; u++)
+            HDfprintf(bt_udata->stream, "%s%Hd", u?", ":"", lt_key->offset[u]);
+        HDfputs("]\n", bt_udata->stream);
+
+        /* Use "total storage" information as flag for printing headers */
+        bt_udata->total_storage++;
+    }
+
+    FUNC_LEAVE_NOAPI(H5B_ITER_CONT)
+} /* H5D_istore_iter_dump() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_init
+ *
+ * Purpose:	Initialize the raw data chunk cache for a dataset.  This is
+ *		called when the dataset is initialized.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, May 18, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_istore_init (const H5F_t *f, const H5D_t *dset)
+{
+    H5D_rdcc_t	*rdcc = &(dset->shared->cache.chunk);
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_init, FAIL)
+
+    if (H5F_RDCC_NBYTES(f)>0 && H5F_RDCC_NELMTS(f)>0) {
+        rdcc->nbytes=H5F_RDCC_NBYTES(f);
+	rdcc->nslots = H5F_RDCC_NELMTS(f);
+	rdcc->slot = H5FL_SEQ_CALLOC (H5D_rdcc_ent_ptr_t,rdcc->nslots);
+	if (NULL==rdcc->slot)
+	    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+    } /* end if */
+
+    /* Allocate the shared structure */
+    if(H5D_istore_shared_create(f, &dset->shared->layout)<0)
+	HGOTO_ERROR (H5E_RESOURCE, H5E_CANTINIT, FAIL, "can't create wrapper for shared B-tree info")
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_init() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_flush_entry
+ *
+ * Purpose:	Writes a chunk to disk.  If RESET is non-zero then the
+ *		entry is cleared -- it's slightly faster to flush a chunk if
+ *		the RESET flag is turned on because it results in one fewer
+ *		memory copy.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 21, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_istore_flush_entry(const H5D_io_info_t *io_info, H5D_rdcc_ent_t *ent, hbool_t reset)
+{
+    herr_t		ret_value=SUCCEED;	/*return value			*/
+    unsigned		u;		/*counters			*/
+    void		*buf=NULL;	/*temporary buffer		*/
+    size_t		alloc;		/*bytes allocated for BUF	*/
+    hbool_t		point_of_no_return = FALSE;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_istore_flush_entry)
+
+    assert(io_info);
+    assert(io_info->dset);
+    assert(ent);
+    assert(!ent->locked);
+
+    buf = ent->chunk;
+    if (ent->dirty) {
+        H5D_istore_ud1_t 	udata;		/*pass through B-tree		*/
+
+        udata.mesg = &io_info->dset->shared->layout;
+        udata.key.filter_mask = 0;
+        udata.addr = HADDR_UNDEF;
+        udata.key.nbytes = ent->chunk_size;
+        for (u=0; u<io_info->dset->shared->layout.u.chunk.ndims; u++)
+            udata.key.offset[u] = ent->offset[u];
+        alloc = ent->alloc_size;
+
+        /* Should the chunk be filtered before writing it to disk? */
+        if (io_info->dset->shared->dcpl_cache.pline.nused) {
+            if (!reset) {
+                /*
+                 * Copy the chunk to a new buffer before running it through
+                 * the pipeline because we'll want to save the original buffer
+                 * for later.
+                 */
+                alloc = ent->chunk_size;
+                if (NULL==(buf = H5MM_malloc(alloc)))
+                    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for pipeline")
+                HDmemcpy(buf, ent->chunk, ent->chunk_size);
+            } else {
+                /*
+                 * If we are reseting and something goes wrong after this
+                 * point then it's too late to recover because we may have
+                 * destroyed the original data by calling H5Z_pipeline().
+                 * The only safe option is to continue with the reset
+                 * even if we can't write the data to disk.
+                 */
+                point_of_no_return = TRUE;
+                ent->chunk = NULL;
+            }
+            if (H5Z_pipeline(&(io_info->dset->shared->dcpl_cache.pline), 0, &(udata.key.filter_mask), io_info->dxpl_cache->err_detect,
+                     io_info->dxpl_cache->filter_cb, &(udata.key.nbytes), &alloc, &buf)<0)
+                HGOTO_ERROR(H5E_PLINE, H5E_WRITEERROR, FAIL, "output pipeline failed")
+        }
+
+        /*
+         * Create the chunk it if it doesn't exist, or reallocate the chunk if
+         * its size changed.  Then write the data into the file.
+         */
+        if (H5B_insert(io_info->dset->ent.file, io_info->dxpl_id, H5B_ISTORE, io_info->dset->shared->layout.u.chunk.addr, &udata)<0)
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to allocate chunk")
+        if (H5F_block_write(io_info->dset->ent.file, H5FD_MEM_DRAW, udata.addr, udata.key.nbytes, io_info->dxpl_id, buf)<0)
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
+
+        /* Mark cache entry as clean */
+        ent->dirty = FALSE;
+#ifdef H5D_ISTORE_DEBUG
+        io_info->dset->shared->cache.chunk.nflushes++;
+#endif /* H5D_ISTORE_DEBUG */
+    } /* end if */
+
+    /* Reset, but do not free or removed from list */
+    if (reset) {
+        point_of_no_return = FALSE;
+        if(buf==ent->chunk)
+            buf = NULL;
+        if(ent->chunk!=NULL)
+            ent->chunk = H5D_istore_chunk_xfree(ent->chunk,&(io_info->dset->shared->dcpl_cache.pline));
+    } /* end if */
+
+done:
+    /* Free the temp buffer only if it's different than the entry chunk */
+    if (buf!=ent->chunk)
+        H5MM_xfree(buf);
+
+    /*
+     * If we reached the point of no return then we have no choice but to
+     * reset the entry.  This can only happen if RESET is true but the
+     * output pipeline failed.  Do not free the entry or remove it from the
+     * list.
+     */
+    if (ret_value<0 && point_of_no_return) {
+        if(ent->chunk)
+            ent->chunk = H5D_istore_chunk_xfree(ent->chunk,&(io_info->dset->shared->dcpl_cache.pline));
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_flush_entry() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5D_istore_preempt
+ *
+ * Purpose:     Preempts the specified entry from the cache, flushing it to
+ *              disk if necessary.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              Thursday, May 21, 1998
+ *
+ * Modifications:
+ *      Pedro Vicente, March 28, 2002
+ *      Added flush parameter that switches the call to H5F_istore_flush_entry
+ *      The call with FALSE is used by the H5F_istore_prune_by_extent function
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_istore_preempt(const H5D_io_info_t *io_info, H5D_rdcc_ent_t * ent, hbool_t flush)
+{
+    H5D_rdcc_t *rdcc = &(io_info->dset->shared->cache.chunk);
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_istore_preempt)
+
+    assert(io_info);
+    assert(ent);
+    assert(!ent->locked);
+    assert(ent->idx < rdcc->nslots);
+
+    if(flush) {
+	/* Flush */
+	if(H5D_istore_flush_entry(io_info, ent, TRUE) < 0)
+	    HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "cannot flush indexed storage buffer")
+    }
+    else {
+        /* Don't flush, just free chunk */
+	if(ent->chunk != NULL)
+	    ent->chunk = H5D_istore_chunk_xfree(ent->chunk,&(io_info->dset->shared->dcpl_cache.pline));
+    }
+
+    /* Unlink from list */
+    if(ent->prev)
+	ent->prev->next = ent->next;
+    else
+	rdcc->head = ent->next;
+    if(ent->next)
+	ent->next->prev = ent->prev;
+    else
+	rdcc->tail = ent->prev;
+    ent->prev = ent->next = NULL;
+
+    /* Remove from cache */
+    rdcc->slot[ent->idx] = NULL;
+    ent->idx = UINT_MAX;
+    rdcc->nbytes -= ent->chunk_size;
+    --rdcc->nused;
+
+    /* Free */
+    H5FL_FREE(H5D_rdcc_ent_t, ent);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_preempt() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_flush
+ *
+ * Purpose:	Writes all dirty chunks to disk and optionally preempts them
+ *		from the cache.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 21, 1998
+ *
+ * Modifications:
+ *      Pedro Vicente, March 28, 2002
+ *      Added TRUE parameter to the call to H5F_istore_preempt
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_istore_flush (H5D_t *dset, hid_t dxpl_id, unsigned flags)
+{
+    H5D_io_info_t io_info;              /* Temporary I/O info object */
+    H5D_dxpl_cache_t _dxpl_cache;       /* Data transfer property cache buffer */
+    H5D_dxpl_cache_t *dxpl_cache=&_dxpl_cache;   /* Data transfer property cache */
+    H5D_rdcc_t *rdcc = &(dset->shared->cache.chunk);
+    int		nerrors=0;
+    H5D_rdcc_ent_t	*ent=NULL, *next=NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_flush, FAIL)
+
+    /* Fill the DXPL cache values for later use */
+    if (H5D_get_dxpl_cache(dxpl_id,&dxpl_cache)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
+
+    /* Construct dataset I/O info */
+    H5D_BUILD_IO_INFO(&io_info,dset,dxpl_cache,dxpl_id,NULL);
+
+    for (ent=rdcc->head; ent; ent=next) {
+	next = ent->next;
+	if ((flags&H5F_FLUSH_CLEAR_ONLY)) {
+            /* Just mark cache entry as clean */
+            ent->dirty = FALSE;
+        } /* end if */
+	else if ((flags&H5F_FLUSH_INVALIDATE)) {
+	    if (H5D_istore_preempt(&io_info, ent, TRUE )<0)
+		nerrors++;
+	} else {
+	    if (H5D_istore_flush_entry(&io_info, ent, FALSE)<0)
+		nerrors++;
+	}
+    } /* end for */
+
+    if (nerrors)
+	HGOTO_ERROR (H5E_IO, H5E_CANTFLUSH, FAIL, "unable to flush one or more raw data chunks")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_flush() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_dest
+ *
+ * Purpose:	Destroy the entire chunk cache by flushing dirty entries,
+ *		preempting all entries, and freeing the cache itself.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 21, 1998
+ *
+ * Modifications:
+ *      Pedro Vicente, March 28, 2002
+ *      Added TRUE parameter to the call to H5F_istore_preempt
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_istore_dest (H5D_t *dset, hid_t dxpl_id)
+{
+    H5D_io_info_t io_info;              /* Temporary I/O info object */
+    H5D_dxpl_cache_t _dxpl_cache;       /* Data transfer property cache buffer */
+    H5D_dxpl_cache_t *dxpl_cache=&_dxpl_cache;   /* Data transfer property cache */
+    H5D_rdcc_t		*rdcc = &(dset->shared->cache.chunk);
+    int		nerrors=0;
+    H5D_rdcc_ent_t	*ent=NULL, *next=NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_dest, FAIL)
+
+    assert(dset);
+
+    /* Fill the DXPL cache values for later use */
+    if (H5D_get_dxpl_cache(dxpl_id,&dxpl_cache)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
+
+    /* Construct dataset I/O info */
+    H5D_BUILD_IO_INFO(&io_info,dset,dxpl_cache,dxpl_id,NULL);
+
+    /* Flush all the cached chunks */
+    for (ent=rdcc->head; ent; ent=next) {
+#ifdef H5D_ISTORE_DEBUG
+	HDfputc('c', stderr);
+	HDfflush(stderr);
+#endif
+	next = ent->next;
+	if (H5D_istore_preempt(&io_info, ent, TRUE )<0)
+	    nerrors++;
+    }
+    if (nerrors)
+	HGOTO_ERROR (H5E_IO, H5E_CANTFLUSH, FAIL, "unable to flush one or more raw data chunks")
+
+    if(rdcc->slot)
+        H5FL_SEQ_FREE (H5D_rdcc_ent_ptr_t,rdcc->slot);
+    HDmemset (rdcc, 0, sizeof(H5D_rdcc_t));
+
+    /* Free the raw B-tree node buffer */
+   if(dset->shared->layout.u.chunk.btree_shared==NULL)
+        HGOTO_ERROR (H5E_IO, H5E_CANTFREE, FAIL, "ref-counted page nil")
+    if(H5RC_DEC(dset->shared->layout.u.chunk.btree_shared)<0)
+	HGOTO_ERROR (H5E_IO, H5E_CANTFREE, FAIL, "unable to decrement ref-counted page")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_dest() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_shared_create
+ *
+ * Purpose:	Create & initialize B-tree shared info
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, September 27, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_istore_shared_create (const H5F_t *f, H5O_layout_t *layout)
+{
+    H5D_istore_ud1_t	udata;
+    H5B_shared_t *shared;               /* Shared B-tree node info */
+    size_t	u;                      /* Local index variable */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_istore_shared_create)
+
+    /* Initialize "user" data for B-tree callbacks, etc. */
+    udata.mesg = layout;
+
+    /* Allocate space for the shared structure */
+    if(NULL==(shared=H5FL_MALLOC(H5B_shared_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for shared B-tree info")
+
+    /* Set up the "global" information for this file's groups */
+    shared->type= H5B_ISTORE;
+    shared->two_k=2*H5F_KVALUE(f,H5B_ISTORE);
+    shared->sizeof_rkey = H5D_istore_sizeof_rkey(f, &udata);
+    assert(shared->sizeof_rkey);
+    shared->sizeof_rnode = H5B_nodesize(f, shared, &shared->sizeof_keys);
+    assert(shared->sizeof_rnode);
+    if(NULL==(shared->page=H5FL_BLK_MALLOC(chunk_page,shared->sizeof_rnode)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree page")
+#ifdef H5_USING_PURIFY
+HDmemset(shared->page,0,shared->sizeof_rnode);
+#endif /* H5_USING_PURIFY */
+    if(NULL==(shared->nkey=H5FL_SEQ_MALLOC(size_t,(size_t)(2*H5F_KVALUE(f,H5B_ISTORE)+1))))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree page")
+
+    /* Initialize the offsets into the native key buffer */
+    for(u=0; u<(2*H5F_KVALUE(f,H5B_ISTORE)+1); u++)
+        shared->nkey[u]=u*H5B_ISTORE[0].sizeof_nkey;
+
+    /* Make shared B-tree info reference counted */
+    if(NULL==(layout->u.chunk.btree_shared=H5RC_create(shared,H5D_istore_shared_free)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't create ref-count wrapper for shared B-tree info")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_shared_create() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_shared_free
+ *
+ * Purpose:	Free B-tree shared info
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July  8, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_istore_shared_free (void *_shared)
+{
+    H5B_shared_t *shared = (H5B_shared_t *)_shared;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_shared_free)
+
+    /* Free the raw B-tree node buffer */
+    H5FL_BLK_FREE(chunk_page,shared->page);
+
+    /* Free the B-tree native key offsets buffer */
+    H5FL_SEQ_FREE(size_t,shared->nkey);
+
+    /* Free the shared B-tree info */
+    H5FL_FREE(H5B_shared_t,shared);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5D_istore_shared_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_prune
+ *
+ * Purpose:	Prune the cache by preempting some things until the cache has
+ *		room for something which is SIZE bytes.  Only unlocked
+ *		entries are considered for preemption.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 21, 1998
+ *
+ * Modifications:
+ *      Pedro Vicente, March 28, 2002
+ *      TRUE parameter to the call to H5F_istore_preempt
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_istore_prune (const H5D_io_info_t *io_info, size_t size)
+{
+    int		i, j, nerrors=0;
+    const H5D_rdcc_t	*rdcc = &(io_info->dset->shared->cache.chunk);
+    size_t		total = rdcc->nbytes;
+    const int		nmeth=2;	/*number of methods		*/
+    int		        w[1];		/*weighting as an interval	*/
+    H5D_rdcc_ent_t	*p[2], *cur;	/*list pointers			*/
+    H5D_rdcc_ent_t	*n[2];		/*list next pointers		*/
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_istore_prune)
+
+    /*
+     * Preemption is accomplished by having multiple pointers (currently two)
+     * slide down the list beginning at the head. Pointer p(N+1) will start
+     * traversing the list when pointer pN reaches wN percent of the original
+     * list.  In other words, preemption method N gets to consider entries in
+     * approximate least recently used order w0 percent before method N+1
+     * where 100% means tha method N will run to completion before method N+1
+     * begins.  The pointers participating in the list traversal are each
+     * given a chance at preemption before any of the pointers are advanced.
+     */
+    w[0] = (int)(rdcc->nused * H5F_RDCC_W0(io_info->dset->ent.file));
+    p[0] = rdcc->head;
+    p[1] = NULL;
+
+    while ((p[0] || p[1]) && rdcc->nbytes+size>total) {
+
+	/* Introduce new pointers */
+	for (i=0; i<nmeth-1; i++)
+            if (0==w[i])
+                p[i+1] = rdcc->head;
+
+	/* Compute next value for each pointer */
+	for (i=0; i<nmeth; i++)
+            n[i] = p[i] ? p[i]->next : NULL;
+
+	/* Give each method a chance */
+	for (i=0; i<nmeth && rdcc->nbytes+size>total; i++) {
+	    if (0==i && p[0] && !p[0]->locked &&
+                    ((0==p[0]->rd_count && 0==p[0]->wr_count) ||
+                     (0==p[0]->rd_count && p[0]->chunk_size==p[0]->wr_count) ||
+                     (p[0]->chunk_size==p[0]->rd_count && 0==p[0]->wr_count))) {
+		/*
+		 * Method 0: Preempt entries that have been completely written
+		 * and/or completely read but not entries that are partially
+		 * written or partially read.
+		 */
+		cur = p[0];
+#ifdef H5D_ISTORE_DEBUG
+		HDputc('.', stderr);
+		HDfflush(stderr);
+#endif
+
+	    } else if (1==i && p[1] && !p[1]->locked) {
+		/*
+		 * Method 1: Preempt the entry without regard to
+		 * considerations other than being locked.  This is the last
+		 * resort preemption.
+		 */
+		cur = p[1];
+#ifdef H5D_ISTORE_DEBUG
+		HDputc(':', stderr);
+		HDfflush(stderr);
+#endif
+
+	    } else {
+		/* Nothing to preempt at this point */
+		cur= NULL;
+	    }
+
+	    if (cur) {
+		for (j=0; j<nmeth; j++) {
+		    if (p[j]==cur)
+                        p[j] = NULL;
+		    if (n[j]==cur)
+                        n[j] = cur->next;
+		}
+		if (H5D_istore_preempt(io_info, cur, TRUE)<0)
+                    nerrors++;
+	    }
+	}
+
+	/* Advance pointers */
+	for (i=0; i<nmeth; i++)
+            p[i] = n[i];
+	for (i=0; i<nmeth-1; i++)
+            w[i] -= 1;
+    }
+
+    if (nerrors)
+	HGOTO_ERROR (H5E_IO, H5E_CANTFLUSH, FAIL, "unable to preempt one or more raw data cache entry")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_prune() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_lock
+ *
+ * Purpose:	Return a pointer to a dataset chunk.  The pointer points
+ *		directly into the chunk cache and should not be freed
+ *		by the caller but will be valid until it is unlocked.  The
+ *		input value IDX_HINT is used to speed up cache lookups and
+ *		it's output value should be given to H5F_istore_unlock().
+ *		IDX_HINT is ignored if it is out of range, and if it points
+ *		to the wrong entry then we fall back to the normal search
+ *		method.
+ *
+ *		If RELAX is non-zero and the chunk isn't in the cache then
+ *		don't try to read it from the file, but just allocate an
+ *		uninitialized buffer to hold the result.  This is intended
+ *		for output functions that are about to overwrite the entire
+ *		chunk.
+ *
+ * Return:	Success:	Ptr to a file chunk.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 21, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-08-02
+ *		The split ratios are passed in as part of the data transfer
+ *		property list.
+ *
+ *              Pedro Vicente, March 28, 2002
+ *              TRUE parameter to the call to H5F_istore_preempt
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5D_istore_lock(const H5D_io_info_t *io_info,
+    H5D_istore_ud1_t *udata, hbool_t relax, unsigned *idx_hint/*in,out*/)
+{
+    H5D_t *dset=io_info->dset;          /* Local pointer to the dataset info */
+    const H5O_pline_t  *pline=&(dset->shared->dcpl_cache.pline);    /* I/O pipeline info */
+    const H5O_layout_t *layout=&(dset->shared->layout); /* Dataset layout */
+    const H5O_fill_t *fill=&(dset->shared->dcpl_cache.fill);    /* Fill value info */
+    H5D_fill_time_t fill_time=dset->shared->dcpl_cache.fill_time;  /* Fill time */
+    H5D_rdcc_t		*rdcc = &(dset->shared->cache.chunk);/*raw data chunk cache*/
+    H5D_rdcc_ent_t	*ent = NULL;		/*cache entry		*/
+    unsigned		idx=0;			/*hash index number	*/
+    hbool_t		found = FALSE;		/*already in cache?	*/
+    unsigned		u;			/*counters		*/
+    size_t		chunk_size=0;		/*size of a chunk	*/
+    void		*chunk=NULL;		/*the file chunk	*/
+    void		*ret_value;	        /*return value		*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_istore_lock)
+
+    assert(io_info);
+    assert(dset);
+    assert(io_info->dxpl_cache);
+    assert(io_info->store);
+    assert(TRUE==H5P_isa_class(io_info->dxpl_id,H5P_DATASET_XFER));
+
+    /* Get the chunk's size */
+    assert(layout->u.chunk.size>0);
+    H5_ASSIGN_OVERFLOW(chunk_size,layout->u.chunk.size,hsize_t,size_t);
+
+    /* Search for the chunk in the cache */
+    if (rdcc->nslots>0) {
+        idx=H5D_HASH(dset->shared,io_info->store->chunk.index);
+        ent = rdcc->slot[idx];
+
+        if (ent) {
+            for (u=0, found=TRUE; u<layout->u.chunk.ndims; u++) {
+                if (io_info->store->chunk.offset[u]!=ent->offset[u]) {
+                    found = FALSE;
+                    break;
+                } /* end if */
+            } /* end for */
+        } /* end if */
+    } /* end if */
+
+    if (found) {
+        /*
+         * Already in the cache.  Count a hit.
+         */
+#ifdef H5D_ISTORE_DEBUG
+        rdcc->nhits++;
+#endif /* H5D_ISTORE_DEBUG */
+
+    } else if (relax) {
+        /*
+         * Not in the cache, but we're about to overwrite the whole thing
+         * anyway, so just allocate a buffer for it but don't initialize that
+         * buffer with the file contents. Count this as a hit instead of a
+         * miss because we saved ourselves lots of work.
+         */
+#ifdef H5D_ISTORE_DEBUG
+        HDputc('w', stderr);
+        HDfflush(stderr);
+        rdcc->nhits++;
+#endif
+        if (NULL==(chunk=H5D_istore_chunk_alloc (chunk_size,pline)))
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for raw data chunk")
+
+    } else {
+        H5D_istore_ud1_t tmp_udata;		/*B-tree pass-through	*/
+        haddr_t chunk_addr;             /* Address of chunk on disk */
+
+        if(udata!=NULL)
+            chunk_addr=udata->addr;
+        else {
+            /* Point at temporary storage for B-tree pass through */
+            udata=&tmp_udata;
+
+            /*
+             * Not in the cache.  Read it from the file and count this as a miss
+             * if it's in the file or an init if it isn't.
+             */
+            chunk_addr = H5D_istore_get_addr(io_info, udata);
+        } /* end else */
+
+        if (H5F_addr_defined(chunk_addr)) {
+            size_t		chunk_alloc=0;		/*allocated chunk size	*/
+
+            /*
+             * The chunk exists on disk.
+             */
+            /* Chunk size on disk isn't [likely] the same size as the final chunk
+             * size in memory, so allocate memory big enough. */
+            chunk_alloc = udata->key.nbytes;
+            if (NULL==(chunk = H5D_istore_chunk_alloc (chunk_alloc,pline)))
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for raw data chunk")
+            if (H5F_block_read(dset->ent.file, H5FD_MEM_DRAW, chunk_addr, udata->key.nbytes, io_info->dxpl_id, chunk)<0)
+                HGOTO_ERROR (H5E_IO, H5E_READERROR, NULL, "unable to read raw data chunk")
+
+            if (pline->nused)
+                if (H5Z_pipeline(pline, H5Z_FLAG_REVERSE, &(udata->key.filter_mask), io_info->dxpl_cache->err_detect,
+                         io_info->dxpl_cache->filter_cb, &(udata->key.nbytes), &chunk_alloc, &chunk)<0) {
+                    HGOTO_ERROR(H5E_PLINE, H5E_READERROR, NULL, "data pipeline read failed")
+                }
+#ifdef H5D_ISTORE_DEBUG
+            rdcc->nmisses++;
+#endif /* H5D_ISTORE_DEBUG */
+        } else {
+            H5D_fill_value_t	fill_status;
+
+#ifdef OLD_WAY
+            /* Clear the error stack from not finding the chunk on disk */
+            H5E_clear();
+#endif /* OLD_WAY */
+
+            /* Chunk size on disk isn't [likely] the same size as the final chunk
+             * size in memory, so allocate memory big enough. */
+            if (NULL==(chunk = H5D_istore_chunk_alloc (chunk_size,pline)))
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for raw data chunk")
+
+            if (H5P_is_fill_value_defined(fill, &fill_status) < 0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't tell if fill value defined")
+
+            if(fill_time==H5D_FILL_TIME_ALLOC ||
+                    (fill_time==H5D_FILL_TIME_IFSET && fill_status==H5D_FILL_VALUE_USER_DEFINED)) {
+                if (fill && fill->buf) {
+                    /*
+                     * The chunk doesn't exist in the file.  Replicate the fill
+                     * value throughout the chunk.
+                     */
+                    assert(0==chunk_size % fill->size);
+                    H5V_array_fill(chunk, fill->buf, fill->size, chunk_size/fill->size);
+                } else {
+                    /*
+                     * The chunk doesn't exist in the file and no fill value was
+                     * specified.  Assume all zeros.
+                     */
+                    HDmemset (chunk, 0, chunk_size);
+                } /* end else */
+            } /* end if */
+#ifdef H5_USING_PURIFY
+else
+    HDmemset(chunk,0,chunk_size);
+#endif /* H5_USING_PURIFY */
+#ifdef H5D_ISTORE_DEBUG
+            rdcc->ninits++;
+#endif /* H5D_ISTORE_DEBUG */
+        } /* end else */
+    }
+    assert (found || chunk_size>0);
+
+    if (!found && rdcc->nslots>0 && chunk_size<=rdcc->nbytes &&
+            (!ent || !ent->locked)) {
+        /*
+         * Add the chunk to the cache only if the slot is not already locked.
+         * Preempt enough things from the cache to make room.
+         */
+        if (ent) {
+#ifdef H5D_ISTORE_DEBUG
+            HDputc('#', stderr);
+            HDfflush(stderr);
+#endif
+            if (H5D_istore_preempt(io_info, ent, TRUE)<0)
+                HGOTO_ERROR(H5E_IO, H5E_CANTINIT, NULL, "unable to preempt chunk from cache")
+        }
+        if (H5D_istore_prune(io_info, chunk_size)<0)
+            HGOTO_ERROR(H5E_IO, H5E_CANTINIT, NULL, "unable to preempt chunk(s) from cache")
+
+        /* Create a new entry */
+        ent = H5FL_MALLOC(H5D_rdcc_ent_t);
+        ent->locked = 0;
+        ent->dirty = FALSE;
+        ent->chunk_size = chunk_size;
+        ent->alloc_size = chunk_size;
+        for (u=0; u<layout->u.chunk.ndims; u++)
+            ent->offset[u] = io_info->store->chunk.offset[u];
+        ent->rd_count = chunk_size;
+        ent->wr_count = chunk_size;
+        ent->chunk = chunk;
+
+        /* Add it to the cache */
+        assert(NULL==rdcc->slot[idx]);
+        rdcc->slot[idx] = ent;
+        ent->idx = idx;
+        rdcc->nbytes += chunk_size;
+        rdcc->nused++;
+
+        /* Add it to the linked list */
+        ent->next = NULL;
+        if (rdcc->tail) {
+            rdcc->tail->next = ent;
+            ent->prev = rdcc->tail;
+            rdcc->tail = ent;
+        } else {
+            rdcc->head = rdcc->tail = ent;
+            ent->prev = NULL;
+        }
+        found = TRUE;
+    } else if (!found) {
+        /*
+         * The chunk is larger than the entire cache so we don't cache it.
+         * This is the reason all those arguments have to be repeated for the
+         * unlock function.
+         */
+        ent = NULL;
+        idx = UINT_MAX;
+
+    } else {
+        /*
+         * The chunk is not at the beginning of the cache; move it backward
+         * by one slot.  This is how we implement the LRU preemption
+         * algorithm.
+         */
+        assert(ent);
+        if (ent->next) {
+            if (ent->next->next)
+                ent->next->next->prev = ent;
+            else
+                rdcc->tail = ent;
+            ent->next->prev = ent->prev;
+            if (ent->prev)
+                ent->prev->next = ent->next;
+            else
+                rdcc->head = ent->next;
+            ent->prev = ent->next;
+            ent->next = ent->next->next;
+            ent->prev->next = ent;
+        }
+    }
+
+    /* Lock the chunk into the cache */
+    if (ent) {
+        assert (!ent->locked);
+        ent->locked = TRUE;
+        chunk = ent->chunk;
+    }
+
+    if (idx_hint)
+        *idx_hint = idx;
+
+    /* Set return value */
+    ret_value = chunk;
+
+done:
+    if (!ret_value)
+        if(chunk)
+            chunk=H5D_istore_chunk_xfree (chunk,pline);
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_lock() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_unlock
+ *
+ * Purpose:	Unlocks a previously locked chunk. The LAYOUT, COMP, and
+ *		OFFSET arguments should be the same as for H5F_rdcc_lock().
+ *		The DIRTY argument should be set to non-zero if the chunk has
+ *		been modified since it was locked. The IDX_HINT argument is
+ *		the returned index hint from the lock operation and BUF is
+ *		the return value from the lock.
+ *
+ *		The NACCESSED argument should be the number of bytes accessed
+ *		for reading or writing (depending on the value of DIRTY).
+ *		It's only purpose is to provide additional information to the
+ *		preemption policy.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 21, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-08-02
+ *		The split_ratios are passed as part of the data transfer
+ *		property list.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_istore_unlock(const H5D_io_info_t *io_info,
+    hbool_t dirty, unsigned idx_hint, uint8_t *chunk, size_t naccessed)
+{
+    const H5O_layout_t *layout=&(io_info->dset->shared->layout); /* Dataset layout */
+    const H5D_rdcc_t	*rdcc = &(io_info->dset->shared->cache.chunk);
+    H5D_rdcc_ent_t	*ent = NULL;
+    unsigned		u;
+    herr_t              ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_istore_unlock)
+
+    assert(io_info);
+
+    if (UINT_MAX==idx_hint) {
+        /*
+         * It's not in the cache, probably because it's too big.  If it's
+         * dirty then flush it to disk.  In any case, free the chunk.
+         * Note: we have to copy the layout and filter messages so we
+         *	 don't discard the `const' qualifier.
+         */
+        if (dirty) {
+            H5D_rdcc_ent_t x;
+
+            HDmemset (&x, 0, sizeof x);
+            x.dirty = TRUE;
+            for (u=0; u<layout->u.chunk.ndims; u++)
+                x.offset[u] = io_info->store->chunk.offset[u];
+            assert(layout->u.chunk.size>0);
+            H5_ASSIGN_OVERFLOW(x.chunk_size,layout->u.chunk.size,hsize_t,size_t);
+            x.alloc_size = x.chunk_size;
+            x.chunk = chunk;
+
+            if (H5D_istore_flush_entry(io_info, &x, TRUE)<0)
+                HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "cannot flush indexed storage buffer")
+        } else {
+            if(chunk)
+                chunk=H5D_istore_chunk_xfree (chunk,&(io_info->dset->shared->dcpl_cache.pline));
+        }
+    } else {
+        /* Sanity check */
+	assert(idx_hint<rdcc->nslots);
+	assert(rdcc->slot[idx_hint]);
+	assert(rdcc->slot[idx_hint]->chunk==chunk);
+
+        /*
+         * It's in the cache so unlock it.
+         */
+        ent = rdcc->slot[idx_hint];
+        assert (ent->locked);
+        if (dirty) {
+            ent->dirty = TRUE;
+            ent->wr_count -= MIN (ent->wr_count, naccessed);
+        } else {
+            ent->rd_count -= MIN (ent->rd_count, naccessed);
+        }
+        ent->locked = FALSE;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_unlock() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_readvv
+ *
+ * Purpose:	Reads a multi-dimensional buffer from (part of) an indexed raw
+ *		storage array.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, May  7, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+ssize_t
+H5D_istore_readvv(const H5D_io_info_t *io_info,
+    size_t chunk_max_nseq, size_t *chunk_curr_seq, size_t chunk_len_arr[], hsize_t chunk_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[],
+    void *buf)
+{
+    H5D_t *dset=io_info->dset;          /* Local pointer to the dataset info */
+    H5D_istore_ud1_t udata;		/*B-tree pass-through	*/
+    haddr_t	        chunk_addr;     /* Chunk address on disk */
+    size_t		u;              /* Local index variables */
+    ssize_t             ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_readvv, FAIL)
+
+    /* Check args */
+    assert(io_info);
+    assert(dset && H5D_CHUNKED==dset->shared->layout.type);
+    assert(dset->shared->layout.u.chunk.ndims>0 && dset->shared->layout.u.chunk.ndims<=H5O_LAYOUT_NDIMS);
+    assert(io_info->dxpl_cache);
+    assert(io_info->store);
+    assert(chunk_len_arr);
+    assert(chunk_offset_arr);
+    assert(mem_len_arr);
+    assert(mem_offset_arr);
+    assert(buf);
+
+    /* Get the address of this chunk on disk */
+#ifdef QAK
+HDfprintf(stderr,"%s: io_info->store->chunk.offset={",FUNC);
+for(u=0; u<dset->shared->layout.u.chunk.ndims; u++)
+    HDfprintf(stderr,"%Hd%s",io_info->store->chunk.offset[u],(u<(dset->shared->layout.u.chunk.ndims-1) ? ", " : "}\n"));
+#endif /* QAK */
+    chunk_addr=H5D_istore_get_addr(io_info, &udata);
+#ifdef QAK
+HDfprintf(stderr,"%s: chunk_addr=%a, chunk_size=%Zu\n",FUNC,chunk_addr,dset->shared->layout.u.chunk.size);
+HDfprintf(stderr,"%s: chunk_len_arr[%Zu]=%Zu\n",FUNC,*chunk_curr_seq,chunk_len_arr[*chunk_curr_seq]);
+HDfprintf(stderr,"%s: chunk_offset_arr[%Zu]=%Hu\n",FUNC,*chunk_curr_seq,chunk_offset_arr[*chunk_curr_seq]);
+HDfprintf(stderr,"%s: mem_len_arr[%Zu]=%Zu\n",FUNC,*mem_curr_seq,mem_len_arr[*mem_curr_seq]);
+HDfprintf(stderr,"%s: mem_offset_arr[%Zu]=%Hu\n",FUNC,*mem_curr_seq,mem_offset_arr[*mem_curr_seq]);
+HDfprintf(stderr,"%s: buf=%p\n",FUNC,buf);
+#endif /* QAK */
+
+    /*
+     * If the chunk is too large to load into the cache and it has no
+     * filters in the pipeline (i.e. not compressed) and if the address
+     * for the chunk has been defined, then don't load the chunk into the
+     * cache, just read the data from it directly.
+     *
+     * If MPI based VFD is used, must bypass the
+     * chunk-cache scheme because other MPI processes could be
+     * writing to other elements in the same chunk.  Do a direct
+     * read-through of only the elements requested.
+     */
+    if (dset->shared->dcpl_cache.pline.nused==0 && ((dset->shared->layout.u.chunk.size>dset->shared->cache.chunk.nbytes && chunk_addr!=HADDR_UNDEF)
+            || (IS_H5FD_MPI(dset->ent.file) && (H5F_ACC_RDWR & H5F_get_intent(dset->ent.file))))) {
+        H5D_io_info_t chk_io_info;      /* Temporary I/O info object */
+        H5D_storage_t chk_store;        /* Chunk storage information */
+
+        /* Set up the storage information for the chunk */
+        chk_store.contig.dset_addr=chunk_addr;
+        chk_store.contig.dset_size=(hsize_t)dset->shared->layout.u.chunk.size;
+
+        /* Set up new dataset I/O info */
+        H5D_BUILD_IO_INFO(&chk_io_info,dset,io_info->dxpl_cache,io_info->dxpl_id,&chk_store);
+
+        /* Do I/O directly on chunk without reading it into the cache */
+        if ((ret_value=H5D_contig_readvv(&chk_io_info, chunk_max_nseq, chunk_curr_seq, chunk_len_arr, chunk_offset_arr, mem_max_nseq, mem_curr_seq, mem_len_arr, mem_offset_arr, buf))<0)
+            HGOTO_ERROR (H5E_IO, H5E_READERROR, FAIL, "unable to read raw data to file")
+    } /* end if */
+    else {
+        uint8_t         *chunk;         /* Pointer to cached chunk in memory */
+        unsigned        idx_hint=0;     /* Cache index hint      */
+        ssize_t         naccessed;      /* Number of bytes accessed in chunk */
+
+        /* If the chunk address is not defined, check if the fill value is
+         * undefined also.  If both situations hold, don't bother copying
+         * values to the destination buffer, since they will just be
+         * garbage.
+         *
+         * Ideally, this will eventually be checked at a higher level and
+         * the entire I/O operation on the chunk will be skipped.  -QAK
+         */
+        if(!H5F_addr_defined(chunk_addr)) {
+            const H5O_fill_t *fill=&(dset->shared->dcpl_cache.fill);    /* Fill value info */
+            H5D_fill_time_t fill_time=dset->shared->dcpl_cache.fill_time;  /* Fill time */
+            H5D_fill_value_t	fill_status;
+            H5D_rdcc_t		*rdcc = &(dset->shared->cache.chunk);/*raw data chunk cache*/
+            hbool_t		found = FALSE;		/*already in cache?	*/
+
+            /* Check if the chunk is in the cache (but hasn't been written to disk yet) */
+            if (rdcc->nslots>0) {
+                unsigned idx=H5D_HASH(dset->shared,io_info->store->chunk.index); /* Cache entry index */
+                H5D_rdcc_ent_t	*ent = rdcc->slot[idx]; /* Cache entry */
+
+                /* Potential match... */
+                if (ent) {
+                    for (u=0, found=TRUE; u<dset->shared->layout.u.chunk.ndims; u++) {
+                        if (io_info->store->chunk.offset[u]!=ent->offset[u]) {
+                            found = FALSE;
+                            break;
+                        } /* end if */
+                    } /* end for */
+                } /* end if */
+            } /* end if */
+
+            /* If the chunk is in the cache, then it must have valid data */
+            if(!found) {
+                /* Check if the fill value is defined */
+                if (H5P_is_fill_value_defined(fill, &fill_status) < 0)
+                    HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't tell if fill value defined")
+
+                /* If we are never to return fill values, or if we would return them
+                 * but they aren't set, process the entire set of I/O vectors and
+                 * get out now.
+                 */
+                if(fill_time==H5D_FILL_TIME_NEVER ||
+                        (fill_time==H5D_FILL_TIME_IFSET && fill_status!=H5D_FILL_VALUE_USER_DEFINED)) {
+                    size_t size;                /* Size of sequence in bytes */
+                    size_t v;                   /* Local index variable */
+                    ssize_t bytes_processed=0;  /* Eventual return value */
+
+                    /* Work through all the sequences */
+                    for(u=*mem_curr_seq, v=*chunk_curr_seq; u<mem_max_nseq && v<chunk_max_nseq; ) {
+                        /* Choose smallest buffer to write */
+                        if(chunk_len_arr[v]<mem_len_arr[u])
+                            size=chunk_len_arr[v];
+                        else
+                            size=mem_len_arr[u];
+
+                        /* Update source information */
+                        chunk_len_arr[v]-=size;
+                        chunk_offset_arr[v]+=size;
+                        if(chunk_len_arr[v]==0)
+                            v++;
+
+                        /* Update destination information */
+                        mem_len_arr[u]-=size;
+                        mem_offset_arr[u]+=size;
+                        if(mem_len_arr[u]==0)
+                            u++;
+
+                        /* Increment number of bytes copied */
+                        bytes_processed+=(ssize_t)size;
+                    } /* end for */
+
+                    /* Update current sequence vectors */
+                    *mem_curr_seq=u;
+                    *chunk_curr_seq=v;
+
+                    HGOTO_DONE(bytes_processed)
+                } /* end if */
+            } /* end if */
+        } /* end if */
+
+        /*
+         * Lock the chunk, copy from application to chunk, then unlock the
+         * chunk.
+         */
+        if (NULL==(chunk=H5D_istore_lock(io_info, &udata, FALSE, &idx_hint)))
+            HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "unable to read raw data chunk")
+
+        /* Use the vectorized memory copy routine to do actual work */
+        if((naccessed=H5V_memcpyvv(buf,mem_max_nseq,mem_curr_seq,mem_len_arr,mem_offset_arr,chunk,chunk_max_nseq,chunk_curr_seq,chunk_len_arr,chunk_offset_arr))<0)
+            HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "vectorized memcpy failed")
+
+        H5_CHECK_OVERFLOW(naccessed,ssize_t,size_t);
+        if (H5D_istore_unlock(io_info, FALSE, idx_hint, chunk, (size_t)naccessed)<0)
+            HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "unable to unlock raw data chunk")
+
+        /* Set return value */
+        ret_value=naccessed;
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5D_istore_readvv() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_writevv
+ *
+ * Purpose:	Writes a multi-dimensional buffer to (part of) an indexed raw
+ *		storage array.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Friday, May  2, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+ssize_t
+H5D_istore_writevv(const H5D_io_info_t *io_info,
+    size_t chunk_max_nseq, size_t *chunk_curr_seq, size_t chunk_len_arr[], hsize_t chunk_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[],
+    const void *buf)
+{
+    H5D_t *dset=io_info->dset;          /* Local pointer to the dataset info */
+    H5D_istore_ud1_t udata;		/*B-tree pass-through	*/
+    haddr_t	        chunk_addr;     /* Chunk address on disk */
+    size_t		u;              /* Local index variables */
+    ssize_t             ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_writevv, FAIL)
+
+    /* Check args */
+    assert(io_info);
+    assert(dset && H5D_CHUNKED==dset->shared->layout.type);
+    assert(dset->shared->layout.u.chunk.ndims>0 && dset->shared->layout.u.chunk.ndims<=H5O_LAYOUT_NDIMS);
+    assert(io_info->dxpl_cache);
+    assert(io_info->store);
+    assert(chunk_len_arr);
+    assert(chunk_offset_arr);
+    assert(mem_len_arr);
+    assert(mem_offset_arr);
+    assert(buf);
+
+    /* Get the address of this chunk on disk */
+#ifdef QAK
+HDfprintf(stderr,"%s: io_info->store->chunk.offset={",FUNC);
+for(u=0; u<dset->shared->layout.u.chunk.ndims; u++)
+    HDfprintf(stderr,"%Hd%s",io_info->store->chunk.offset[u],(u<(dset->shared->layout.u.chunk.ndims-1) ? ", " : "}\n"));
+#endif /* QAK */
+    chunk_addr=H5D_istore_get_addr(io_info, &udata);
+#ifdef QAK
+HDfprintf(stderr,"%s: chunk_addr=%a, chunk_size=%Zu\n",FUNC,chunk_addr,dset->shared->layout.u.chunk.size);
+HDfprintf(stderr,"%s: chunk_len_arr[%Zu]=%Zu\n",FUNC,*chunk_curr_seq,chunk_len_arr[*chunk_curr_seq]);
+HDfprintf(stderr,"%s: chunk_offset_arr[%Zu]=%Hu\n",FUNC,*chunk_curr_seq,chunk_offset_arr[*chunk_curr_seq]);
+HDfprintf(stderr,"%s: mem_len_arr[%Zu]=%Zu\n",FUNC,*mem_curr_seq,mem_len_arr[*mem_curr_seq]);
+HDfprintf(stderr,"%s: mem_offset_arr[%Zu]=%Hu\n",FUNC,*mem_curr_seq,mem_offset_arr[*mem_curr_seq]);
+#endif /* QAK */
+
+    /*
+     * If the chunk is too large to load into the cache and it has no
+     * filters in the pipeline (i.e. not compressed) and if the address
+     * for the chunk has been defined, then don't load the chunk into the
+     * cache, just write the data to it directly.
+     *
+     * If MPI based VFD is used, must bypass the
+     * chunk-cache scheme because other MPI processes could be
+     * writing to other elements in the same chunk.  Do a direct
+     * write-through of only the elements requested.
+     */
+#ifdef H5_HAVE_PARALLEL
+    /* Additional sanity checks when operating in parallel */
+    if(IS_H5FD_MPI(dset->ent.file)) {
+        if (chunk_addr==HADDR_UNDEF)
+            HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to locate raw data chunk")
+        if (dset->shared->dcpl_cache.pline.nused>0)
+            HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "cannot write to chunked storage with filters in parallel")
+    } /* end if */
+#endif /* H5_HAVE_PARALLEL */
+
+    if (dset->shared->dcpl_cache.pline.nused==0 && ((dset->shared->layout.u.chunk.size>dset->shared->cache.chunk.nbytes && chunk_addr!=HADDR_UNDEF)
+            || (IS_H5FD_MPI(dset->ent.file) && (H5F_ACC_RDWR & H5F_get_intent(dset->ent.file))))) {
+        H5D_io_info_t chk_io_info;      /* Temporary I/O info object */
+        H5D_storage_t chk_store;        /* Chunk storage information */
+
+        /* Set up the storage information for the chunk */
+        chk_store.contig.dset_addr=chunk_addr;
+        chk_store.contig.dset_size=(hsize_t)dset->shared->layout.u.chunk.size;
+
+        /* Set up new dataset I/O info */
+        H5D_BUILD_IO_INFO(&chk_io_info,dset,io_info->dxpl_cache,io_info->dxpl_id,&chk_store);
+
+        /* Do I/O directly on chunk without reading it into the cache */
+        if ((ret_value=H5D_contig_writevv(&chk_io_info, chunk_max_nseq, chunk_curr_seq, chunk_len_arr, chunk_offset_arr, mem_max_nseq, mem_curr_seq, mem_len_arr, mem_offset_arr, buf))<0)
+            HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
+    } /* end if */
+    else {
+        uint8_t         *chunk;         /* Pointer to cached chunk in memory */
+        unsigned        idx_hint=0;     /* Cache index hint      */
+        ssize_t         naccessed;      /* Number of bytes accessed in chunk */
+        size_t          total_bytes;    /* Total # of bytes accessed on disk & memory */
+        hbool_t         relax;          /* Whether whole chunk is selected */
+
+        /*
+         * Lock the chunk, copy from application to chunk, then unlock the
+         * chunk.
+         */
+#ifdef OLD_WAY
+/* Note that this is technically OK, since eventually all the data in the chunk
+ * will be overwritten.  However, it seems risky and a better approach would
+ * be to lock the chunk in the dataset I/O routine (setting the relax flag
+ * appropriately) and then unlock it after all the I/O the chunk was finished. -QAK
+ */
+        if(chunk_max_nseq==1 && chunk_len_arr[0] == dset->shared->layout.u.chunk.size)
+            relax = TRUE;
+        else
+            relax = FALSE;
+#else /* OLD_WAY */
+        relax=TRUE;
+        total_bytes=0;
+        for(u=*chunk_curr_seq; u<chunk_max_nseq; u++)
+            total_bytes+=chunk_len_arr[u];
+        if(total_bytes!=dset->shared->layout.u.chunk.size)
+            relax=FALSE;
+        if(relax) {
+            total_bytes=0;
+            for(u=*mem_curr_seq; u<mem_max_nseq; u++)
+                total_bytes+=mem_len_arr[u];
+            if(total_bytes!=dset->shared->layout.u.chunk.size)
+                relax=FALSE;
+        } /* end if */
+#endif /* OLD_WAY */
+
+        if (NULL==(chunk=H5D_istore_lock(io_info, &udata, relax, &idx_hint)))
+            HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "unable to read raw data chunk")
+
+        /* Use the vectorized memory copy routine to do actual work */
+        if((naccessed=H5V_memcpyvv(chunk,chunk_max_nseq,chunk_curr_seq,chunk_len_arr,chunk_offset_arr,buf,mem_max_nseq,mem_curr_seq,mem_len_arr,mem_offset_arr))<0)
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "vectorized memcpy failed")
+
+        H5_CHECK_OVERFLOW(naccessed,ssize_t,size_t);
+        if (H5D_istore_unlock(io_info, TRUE, idx_hint, chunk, (size_t)naccessed)<0)
+            HGOTO_ERROR (H5E_IO, H5E_WRITEERROR, FAIL, "uanble to unlock raw data chunk")
+
+        /* Set return value */
+        ret_value=naccessed;
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5D_istore_writevv() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_create
+ *
+ * Purpose:	Creates a new indexed-storage B-tree and initializes the
+ *		istore struct with information about the storage.  The
+ *		struct should be immediately written to the object header.
+ *
+ *		This function must be called before passing ISTORE to any of
+ *		the other indexed storage functions!
+ *
+ * Return:	Non-negative on success (with the ISTORE argument initialized
+ *		and ready to write to an object header). Negative on failure.
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, October 21, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_istore_create(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout /*out */ )
+{
+    H5D_istore_ud1_t	udata;
+#ifndef NDEBUG
+    unsigned			u;
+#endif
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_create, FAIL)
+
+    /* Check args */
+    assert(f);
+    assert(layout && H5D_CHUNKED == layout->type);
+    assert(layout->u.chunk.ndims > 0 && layout->u.chunk.ndims <= H5O_LAYOUT_NDIMS);
+#ifndef NDEBUG
+    for (u = 0; u < layout->u.chunk.ndims; u++)
+	assert(layout->u.chunk.dim[u] > 0);
+#endif
+
+    /* Initialize "user" data for B-tree callbacks, etc. */
+    udata.mesg = layout;
+
+    if (H5B_create(f, dxpl_id, H5B_ISTORE, &udata, &(layout->u.chunk.addr)/*out*/) < 0)
+	HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "can't create B-tree")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_create() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_allocated
+ *
+ * Purpose:	Return the number of bytes allocated in the file for storage
+ *		of raw data under the specified B-tree (ADDR is the address
+ *		of the B-tree).
+ *
+ * Return:	Success:	Number of bytes stored in all chunks.
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 21, 1999
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+hsize_t
+H5D_istore_allocated(H5D_t *dset, hid_t dxpl_id)
+{
+    H5D_io_info_t io_info;              /* Temporary I/O info object */
+    const H5D_rdcc_t   *rdcc = &(dset->shared->cache.chunk);	/*raw data chunk cache */
+    H5D_rdcc_ent_t     *ent;    /*cache entry  */
+    H5D_dxpl_cache_t _dxpl_cache;       /* Data transfer property cache buffer */
+    H5D_dxpl_cache_t *dxpl_cache=&_dxpl_cache;   /* Data transfer property cache */
+    H5D_istore_ud1_t	udata;
+    hsize_t      ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_allocated, 0)
+
+    assert(dset);
+
+    /* Fill the DXPL cache values for later use */
+    if (H5D_get_dxpl_cache(dxpl_id,&dxpl_cache)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, 0, "can't fill dxpl cache")
+
+    /* Construct dataset I/O info */
+    H5D_BUILD_IO_INFO(&io_info,dset,dxpl_cache,dxpl_id,NULL);
+
+    /* Search for cached chunks that haven't been written out */
+    for(ent = rdcc->head; ent; ent = ent->next) {
+        /* Flush the chunk out to disk, to make certain the size is correct later */
+        if (H5D_istore_flush_entry(&io_info, ent, FALSE)<0)
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, 0, "cannot flush indexed storage buffer")
+    } /* end for */
+
+    HDmemset(&udata, 0, sizeof udata);
+    udata.mesg = &dset->shared->layout;
+    if (H5B_iterate(dset->ent.file, dxpl_id, H5B_ISTORE, H5D_istore_iter_allocated, dset->shared->layout.u.chunk.addr, &udata)<0)
+        HGOTO_ERROR(H5E_IO, H5E_CANTINIT, 0, "unable to iterate over chunk B-tree")
+
+    /* Set return value */
+    ret_value=udata.total_storage;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_allocated() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_get_addr
+ *
+ * Purpose:	Get the file address of a chunk if file space has been
+ *		assigned.  Save the retrieved information in the udata
+ *		supplied.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Albert Cheng
+ *              June 27, 1998
+ *
+ * Modifications:
+ *              Modified to return the address instead of returning it through
+ *              a parameter - QAK, 1/30/02
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5D_istore_get_addr(const H5D_io_info_t *io_info, H5D_istore_ud1_t *_udata)
+{
+    H5D_istore_ud1_t	tmp_udata;      /* Information about a chunk */
+    H5D_istore_ud1_t	*udata;         /* Pointer to information about a chunk */
+    unsigned	u;
+    haddr_t	ret_value;		/* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_get_addr)
+
+    assert(io_info);
+    assert(io_info->dset);
+    assert(io_info->dset->shared->layout.u.chunk.ndims > 0);
+    assert(io_info->store->chunk.offset);
+
+    /* Check for udata struct to return */
+    udata = (_udata!=NULL ? _udata : &tmp_udata);
+
+    /* Initialize the information about the chunk we are looking for */
+    for (u=0; u<io_info->dset->shared->layout.u.chunk.ndims; u++)
+	udata->key.offset[u] = io_info->store->chunk.offset[u];
+    udata->mesg = &(io_info->dset->shared->layout);
+    udata->addr = HADDR_UNDEF;
+
+    /* Go get the chunk information */
+    if (H5B_find (io_info->dset->ent.file, io_info->dxpl_id, H5B_ISTORE, io_info->dset->shared->layout.u.chunk.addr, udata)<0) {
+        /* Note: don't push error on stack, leave that to next higher level,
+         *      since many times the B-tree is searched in order to determine
+         *      if a chunk exists in the B-tree or not. -QAK
+         */
+#ifdef OLD_WAY
+        H5E_clear();
+
+	HGOTO_ERROR(H5E_BTREE,H5E_NOTFOUND,HADDR_UNDEF,"Can't locate chunk info")
+#else /* OLD_WAY */
+	HGOTO_DONE(HADDR_UNDEF)
+#endif /* OLD_WAY */
+    } /* end if */
+
+    /* Success!  Set the return value */
+    ret_value=udata->addr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5D_istore_get_addr() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_chunk_alloc
+ *
+ * Purpose:	Allocate space for a chunk in memory.  This routine allocates
+ *              memory space for non-filtered chunks from a block free list
+ *              and uses malloc()/free() for filtered chunks.
+ *
+ * Return:	Pointer to memory for chunk on success/NULL on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              April 22, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5D_istore_chunk_alloc(size_t size, const H5O_pline_t *pline)
+{
+    void *ret_value=NULL;		/* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_chunk_alloc)
+
+    assert(size);
+    assert(pline);
+
+    if(pline->nused>0)
+        ret_value=H5MM_malloc(size);
+    else
+        ret_value=H5FL_BLK_MALLOC(chunk,size);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5D_istore_chunk_alloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_chunk_xfree
+ *
+ * Purpose:	Free space for a chunk in memory.  This routine allocates
+ *              memory space for non-filtered chunks from a block free list
+ *              and uses malloc()/free() for filtered chunks.
+ *
+ * Return:	NULL (never fails)
+ *
+ * Programmer:	Quincey Koziol
+ *              April 22, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5D_istore_chunk_xfree(void *chk, const H5O_pline_t *pline)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5D_istore_chunk_xfree)
+
+    assert(pline);
+
+    if(chk) {
+        if(pline->nused>0)
+            H5MM_xfree(chk);
+        else
+            H5FL_BLK_FREE(chunk,chk);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(NULL)
+} /* H5D_istore_chunk_xfree() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_allocate
+ *
+ * Purpose:	Allocate file space for all chunks that are not allocated yet.
+ *		Return SUCCEED if all needed allocation succeed, otherwise
+ *		FAIL.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Note:	Current implementation relies on cache_size being 0,
+ *		thus no chunk is cashed and written to disk immediately
+ *		when a chunk is unlocked (via H5F_istore_unlock)
+ *		This should be changed to do a direct flush independent
+ *		of the cache value.
+ *
+ *              This routine might be called before the dcpl_cache is set up
+ *              correctly, so don't use those values.
+ *
+ * Programmer:	Albert Cheng
+ *		June 26, 1998
+ *
+ * Modifications:
+ *		rky, 1998-09-23
+ *		Added barrier to preclude racing with data writes.
+ *
+ *		rky, 1998-12-07
+ *		Added Wait-Signal wrapper around unlock-lock critical region
+ *		to prevent race condition (unlock reads, lock writes the
+ *		chunk).
+ *
+ * 		Robb Matzke, 1999-08-02
+ *		The split_ratios are passed in as part of the data transfer
+ *		property list.
+ *
+ * 		Quincey Koziol, 2002-05-16
+ *		Rewrote algorithm to allocate & write blocks without using
+ *              lock/unlock code.
+ *
+ * 		Quincey Koziol, 2002-05-17
+ *		Added feature to avoid writing fill-values if user has indicated
+ *              that they should never be written.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_istore_allocate(H5D_t *dset, hid_t dxpl_id, hbool_t full_overwrite)
+{
+    H5D_io_info_t io_info;      /* Dataset I/O info */
+    H5D_storage_t store;        /* Dataset storage information */
+    hsize_t	chunk_offset[H5O_LAYOUT_NDIMS]; /* Offset of current chunk */
+    hsize_t	chunk_size;     /* Size of chunk in bytes */
+    unsigned filter_mask=0;     /* Filter mask for chunks that have them */
+    H5O_pline_t pline;          /* I/O pipeline information */
+    hbool_t     pline_initialized=FALSE;        /* Flag to indicate that pline has valid info */
+    H5O_fill_t fill;            /* Fill value information */
+    H5D_fill_time_t fill_time;  /* When to write fill values */
+    H5D_fill_value_t fill_status;    /* The fill value status */
+    unsigned   should_fill=0;   /* Whether fill values should be written */
+    H5D_istore_ud1_t udata;	/* B-tree pass-through for creating chunk */
+    void *chunk=NULL;           /* Chunk buffer for writing fill values */
+    H5D_dxpl_cache_t _dxpl_cache;       /* Data transfer property cache buffer */
+    H5D_dxpl_cache_t *dxpl_cache=&_dxpl_cache;   /* Data transfer property cache */
+#ifdef H5_HAVE_PARALLEL
+    MPI_Comm	mpi_comm=MPI_COMM_NULL;	/* MPI communicator for file */
+    int         mpi_rank=(-1);  /* This process's rank  */
+    int         mpi_code;       /* MPI return code */
+    unsigned    blocks_written=0; /* Flag to indicate that chunk was actually written */
+    unsigned    using_mpi=0;    /* Flag to indicate that the file is being accessed with an MPI-capable file driver */
+#endif /* H5_HAVE_PARALLEL */
+    int		carry;          /* Flag to indicate that chunk increment carrys to higher dimension (sorta) */
+    unsigned	chunk_exists;   /* Flag to indicate whether a chunk exists already */
+    int		i;              /* Local index variable */
+    unsigned	u;              /* Local index variable */
+    H5P_genplist_t *dc_plist;       /* Property list */
+    int         space_ndims;    /* Dataset's space rank */
+    hsize_t     space_dim[H5O_LAYOUT_NDIMS];    /* Dataset's dataspace dimensions */
+    herr_t	ret_value=SUCCEED;	/* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_allocate, FAIL)
+
+    /* Check args */
+    assert(dset && H5D_CHUNKED==dset->shared->layout.type);
+    assert(dset->shared->layout.u.chunk.ndims>0 && dset->shared->layout.u.chunk.ndims<=H5O_LAYOUT_NDIMS);
+    assert(H5F_addr_defined(dset->shared->layout.u.chunk.addr));
+    assert(TRUE==H5P_isa_class(dxpl_id,H5P_DATASET_XFER));
+
+    /* Get dataset's creation property list */
+    if (NULL == (dc_plist = H5I_object(dset->shared->dcpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list")
+
+    /* We only handle simple data spaces so far */
+    if ((space_ndims=H5S_get_simple_extent_dims(dset->shared->space, space_dim, NULL))<0)
+         HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get simple data space info")
+    space_dim[space_ndims] = dset->shared->layout.u.chunk.dim[space_ndims];
+
+    /* Get necessary properties from dataset creation property list */
+    if(H5P_get(dc_plist, H5D_CRT_FILL_VALUE_NAME, &fill) < 0)
+        HGOTO_ERROR(H5E_STORAGE, H5E_CANTGET, FAIL, "can't get fill value")
+    if(H5P_get(dc_plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_STORAGE, H5E_CANTGET, FAIL, "can't get data pipeline")
+    pline_initialized=TRUE;
+    if(H5P_get(dc_plist, H5D_CRT_FILL_TIME_NAME, &fill_time) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve fill time")
+
+    /* Fill the DXPL cache values for later use */
+    if (H5D_get_dxpl_cache(dxpl_id,&dxpl_cache)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
+
+#ifdef H5_HAVE_PARALLEL
+    /* Retrieve MPI parameters */
+    if(IS_H5FD_MPI(dset->ent.file)) {
+        /* Get the MPI communicator */
+        if (MPI_COMM_NULL == (mpi_comm=H5F_mpi_get_comm(dset->ent.file)))
+            HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI communicator")
+
+        /* Get the MPI rank */
+        if ((mpi_rank=H5F_mpi_get_rank(dset->ent.file))<0)
+            HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, FAIL, "Can't retrieve MPI rank")
+
+        /* Set the MPI-capable file driver flag */
+        using_mpi=1;
+    } /* end if */
+#endif  /* H5_HAVE_PARALLEL */
+
+    /*
+     * Setup indice to go through all chunks. (Future improvement
+     * should allocate only chunks that have no file space assigned yet.
+     */
+    for (u=0; u<dset->shared->layout.u.chunk.ndims; u++)
+        chunk_offset[u] = 0;
+    chunk_size = dset->shared->layout.u.chunk.size;
+
+    /* Check the dataset's fill-value status */
+    if (H5P_is_fill_value_defined(&fill, &fill_status) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't tell if fill value defined")
+
+    /* If we are filling the dataset on allocation or "if set" and
+     * the fill value _is_ set, _and_ we are not overwriting the new blocks,
+     * or if there are any pipeline filters defined,
+     * set the "should fill" flag
+     */
+    if((!full_overwrite && (fill_time==H5D_FILL_TIME_ALLOC ||
+            (fill_time==H5D_FILL_TIME_IFSET && fill_status==H5D_FILL_VALUE_USER_DEFINED)))
+            || pline.nused>0)
+        should_fill=1;
+
+    /* Check if fill values should be written to blocks */
+    if(should_fill) {
+        /* Allocate chunk buffer for processes to use when writing fill values */
+        H5_CHECK_OVERFLOW(chunk_size,hsize_t,size_t);
+        if (NULL==(chunk = H5D_istore_chunk_alloc((size_t)chunk_size,&pline)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for chunk")
+
+        /* Fill the chunk with the proper values */
+        if(fill.buf) {
+            /*
+             * Replicate the fill value throughout the chunk.
+             */
+            assert(0==chunk_size % fill.size);
+            H5V_array_fill(chunk, fill.buf, fill.size, (size_t)chunk_size/fill.size);
+        } else {
+            /*
+             * No fill value was specified, assume all zeros.
+             */
+            HDmemset (chunk, 0, (size_t)chunk_size);
+        } /* end else */
+
+        /* Check if there are filters which need to be applied to the chunk */
+        if (pline.nused>0) {
+            size_t buf_size=(size_t)chunk_size;
+            size_t nbytes=(size_t)chunk_size;
+
+            /* Push the chunk through the filters */
+            if (H5Z_pipeline(&pline, 0, &filter_mask, dxpl_cache->err_detect, dxpl_cache->filter_cb, &nbytes, &buf_size, &chunk)<0)
+                HGOTO_ERROR(H5E_PLINE, H5E_WRITEERROR, FAIL, "output pipeline failed")
+
+            /* Keep the number of bytes the chunk turned in to */
+            chunk_size=nbytes;
+        } /* end if */
+    } /* end if */
+
+    /* Set up dataset I/O info */
+    store.chunk.offset=chunk_offset;
+    H5D_BUILD_IO_INFO(&io_info,dset,dxpl_cache,dxpl_id,&store);
+
+    /* Loop over all chunks */
+    carry=0;
+    while (carry==0) {
+        /* Check if the chunk exists yet on disk */
+        chunk_exists=1;
+        if(H5D_istore_get_addr(&io_info,NULL)==HADDR_UNDEF) {
+            const H5D_rdcc_t       *rdcc = &(dset->shared->cache.chunk);	/*raw data chunk cache */
+            H5D_rdcc_ent_t         *ent = NULL;              	/*cache entry  */
+
+            /* Didn't find the chunk on disk */
+            chunk_exists = 0;
+
+            /* Look for chunk in cache */
+            for(ent = rdcc->head; ent && !chunk_exists; ent = ent->next) {
+                /* Assume a match */
+                chunk_exists = 1;
+                for(u = 0; u < dset->shared->layout.u.chunk.ndims && chunk_exists; u++) {
+                    if(ent->offset[u] != chunk_offset[u])
+                        chunk_exists = 0;       /* Reset if no match */
+                } /* end for */
+            } /* end for */
+        } /* end if */
+
+        if(!chunk_exists) {
+            /* Initialize the chunk information */
+            udata.mesg = &dset->shared->layout;
+            udata.key.filter_mask = filter_mask;
+            udata.addr = HADDR_UNDEF;
+            H5_CHECK_OVERFLOW(chunk_size,hsize_t,size_t);
+            udata.key.nbytes = (size_t)chunk_size;
+            for (u=0; u<dset->shared->layout.u.chunk.ndims; u++)
+                udata.key.offset[u] = chunk_offset[u];
+
+            /* Allocate the chunk with all processes */
+            if (H5B_insert(dset->ent.file, dxpl_id, H5B_ISTORE, dset->shared->layout.u.chunk.addr, &udata)<0)
+                HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to allocate chunk")
+
+            /* Check if fill values should be written to blocks */
+            if(should_fill) {
+#ifdef H5_HAVE_PARALLEL
+                /* Check if this file is accessed with an MPI-capable file driver */
+                if(using_mpi) {
+                    /* Write the chunks out from only one process */
+                    /* !! Use the internal "independent" DXPL!! -QAK */
+                    if(H5_PAR_META_WRITE==mpi_rank) {
+                        if (H5F_block_write(dset->ent.file, H5FD_MEM_DRAW, udata.addr, udata.key.nbytes, H5AC_ind_dxpl_id, chunk)<0)
+                            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
+                    } /* end if */
+
+                    /* Indicate that blocks are being written */
+                    blocks_written=1;
+                } /* end if */
+                else {
+#endif /* H5_HAVE_PARALLEL */
+                    if (H5F_block_write(dset->ent.file, H5FD_MEM_DRAW, udata.addr, udata.key.nbytes, dxpl_id, chunk)<0)
+                        HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write raw data to file")
+#ifdef H5_HAVE_PARALLEL
+                } /* end else */
+#endif /* H5_HAVE_PARALLEL */
+            } /* end if */
+        } /* end if */
+
+        /* Increment indices */
+        for (i=(int)dset->shared->layout.u.chunk.ndims-1, carry=1; i>=0 && carry; --i) {
+            chunk_offset[i] += dset->shared->layout.u.chunk.dim[i];
+            if (chunk_offset[i] >= space_dim[i])
+                chunk_offset[i] = 0;
+            else
+                carry = 0;
+        } /* end for */
+    } /* end while */
+
+#ifdef H5_HAVE_PARALLEL
+    /* Only need to block at the barrier if we actually allocated a chunk */
+    /* And if we are using an MPI-capable file driver */
+    if(using_mpi && blocks_written) {
+        /* Wait at barrier to avoid race conditions where some processes are
+         * still writing out chunks and other processes race ahead to read
+         * them in, getting bogus data.
+         */
+        if (MPI_SUCCESS != (mpi_code=MPI_Barrier(mpi_comm)))
+            HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code);
+    } /* end if */
+#endif /* H5_HAVE_PARALLEL */
+
+done:
+    /* Free the chunk for fill values */
+    if(chunk!=NULL && pline_initialized)
+        chunk=H5D_istore_chunk_xfree(chunk,&pline);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_allocate() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5D_istore_prune_by_extent
+ *
+ * Purpose: This function searches for chunks that are no longer necessary both in the
+ *  raw data cache and in the B-tree.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ * Algorithm: Robb Matzke
+ *
+ * Date: March 27, 2002
+ *
+ * The algorithm is:
+ *
+ *  For chunks that are no longer necessary:
+ *
+ *  1. Search in the raw data cache for each chunk
+ *  2. If found then preempt it from the cache
+ *  3. Search in the B-tree for each chunk
+ *  4. If found then remove it from the B-tree and deallocate file storage for the chunk
+ *
+ * This example shows a 2d dataset of 90x90 with a chunk size of 20x20.
+ *
+ *
+ *     0         20        40        60        80    90   100
+ *    0 +---------+---------+---------+---------+-----+...+
+ *      |:::::X::::::::::::::         :         :     |   :
+ *      |:::::::X::::::::::::         :         :     |   :   Key
+ *      |::::::::::X:::::::::         :         :     |   :   --------
+ *      |::::::::::::X:::::::         :         :     |   :  +-+ Dataset
+ *    20+::::::::::::::::::::.........:.........:.....+...:  | | Extent
+ *      |         :::::X:::::         :         :     |   :  +-+
+ *      |         :::::::::::         :         :     |   :
+ *      |         :::::::::::         :         :     |   :  ... Chunk
+ *      |         :::::::X:::         :         :     |   :  : : Boundary
+ *    40+.........:::::::::::.........:.........:.....+...:  :.:
+ *      |         :         :         :         :     |   :
+ *      |         :         :         :         :     |   :  ... Allocated
+ *      |         :         :         :         :     |   :  ::: & Filled
+ *      |         :         :         :         :     |   :  ::: Chunk
+ *    60+.........:.........:.........:.........:.....+...:
+ *      |         :         :::::::X:::         :     |   :   X  Element
+ *      |         :         :::::::::::         :     |   :      Written
+ *      |         :         :::::::::::         :     |   :
+ *      |         :         :::::::::::         :     |   :
+ *    80+.........:.........:::::::::::.........:.....+...:   O  Fill Val
+ *      |         :         :         :::::::::::     |   :      Explicitly
+ *      |         :         :         ::::::X::::     |   :      Written
+ *    90+---------+---------+---------+---------+-----+   :
+ *      :         :         :         :::::::::::         :
+ *   100:.........:.........:.........:::::::::::.........:
+ *
+ *
+ * We have 25 total chunks for this dataset, 5 of which have space
+ * allocated in the file because they were written to one or more
+ * elements. These five chunks (and only these five) also have entries in
+ * the storage B-tree for this dataset.
+ *
+ * Now lets say we want to shrink the dataset down to 70x70:
+ *
+ *
+ *      0         20        40        60   70   80    90   100
+ *    0 +---------+---------+---------+----+----+-----+...+
+ *      |:::::X::::::::::::::         :    |    :     |   :
+ *      |:::::::X::::::::::::         :    |    :     |   :    Key
+ *      |::::::::::X:::::::::         :    |    :     |   :    --------
+ *      |::::::::::::X:::::::         :    |    :     |   :   +-+ Dataset
+ *    20+::::::::::::::::::::.........:....+....:.....|...:   | | Extent
+ *      |         :::::X:::::         :    |    :     |   :   +-+
+ *      |         :::::::::::         :    |    :     |   :
+ *      |         :::::::::::         :    |    :     |   :   ... Chunk
+ *      |         :::::::X:::         :    |    :     |   :   : : Boundary
+ *    40+.........:::::::::::.........:....+....:.....|...:   :.:
+ *      |         :         :         :    |    :     |   :
+ *      |         :         :         :    |    :     |   :   ... Allocated
+ *      |         :         :         :    |    :     |   :   ::: & Filled
+ *      |         :         :         :    |    :     |   :   ::: Chunk
+ *    60+.........:.........:.........:....+....:.....|...:
+ *      |         :         :::::::X:::    |    :     |   :    X  Element
+ *      |         :         :::::::::::    |    :     |   :       Written
+ *      +---------+---------+---------+----+    :     |   :
+ *      |         :         :::::::::::         :     |   :
+ *    80+.........:.........:::::::::X:.........:.....|...:    O  Fill Val
+ *      |         :         :         :::::::::::     |   :       Explicitly
+ *      |         :         :         ::::::X::::     |   :       Written
+ *    90+---------+---------+---------+---------+-----+   :
+ *      :         :         :         :::::::::::         :
+ *   100:.........:.........:.........:::::::::::.........:
+ *
+ *
+ * That means that the nine chunks along the bottom and right side should
+ * no longer exist. Of those nine chunks, (0,80), (20,80), (40,80),
+ * (60,80), (80,80), (80,60), (80,40), (80,20), and (80,0), one is actually allocated
+ * that needs to be released.
+ * To release the chunks, we traverse the B-tree to obtain a list of unused
+ * allocated chunks, and then call H5B_remove() for each chunk.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_istore_prune_by_extent(const H5D_io_info_t *io_info)
+{
+    H5D_t *dset=io_info->dset;          /* Local pointer to the dataset info */
+    const H5D_rdcc_t       *rdcc = &(dset->shared->cache.chunk);	/*raw data chunk cache */
+    H5D_rdcc_ent_t         *ent = NULL, *next = NULL;	/*cache entry  */
+    unsigned                u;	/*counters  */
+    int                     found;	/*remove this entry  */
+    H5D_istore_ud1_t        udata;	/*B-tree pass-through */
+    hsize_t                 curr_dims[H5O_LAYOUT_NDIMS];	/*current dataspace dimensions */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_prune_by_extent, FAIL)
+
+    /* Check args */
+    assert(io_info);
+    assert(dset && H5D_CHUNKED == dset->shared->layout.type);
+    assert(dset->shared->layout.u.chunk.ndims > 0 && dset->shared->layout.u.chunk.ndims <= H5O_LAYOUT_NDIMS);
+    assert(H5F_addr_defined(dset->shared->layout.u.chunk.addr));
+
+    /* Go get the rank & dimensions */
+    if(H5S_get_simple_extent_dims(dset->shared->space, curr_dims, NULL) < 0)
+	HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataset dimensions")
+
+ /*-------------------------------------------------------------------------
+  * Figure out what chunks are no longer in use for the specified extent
+  * and release them from the linked list raw data cache
+  *-------------------------------------------------------------------------
+  */
+    found = 0;
+    for(ent = rdcc->head; ent; ent = next) {
+	next = ent->next;
+
+        for(u = 0; u < dset->shared->layout.u.chunk.ndims - 1; u++) {
+            if((hsize_t)ent->offset[u] > curr_dims[u]) {
+                found = 1;
+                break;
+            } /* end if */
+        } /* end for */
+
+	if(found) {
+#ifdef H5D_ISTORE_DEBUG
+	    HDfputs("cache:remove:[", stderr);
+	    for(u = 0; u < dset->shared->layout.u.chunk.ndims - 1; u++)
+		HDfprintf(stderr, "%s%Hd", u ? ", " : "", ent->offset[u]);
+	    HDfputs("]\n", stderr);
+#endif
+
+	    /* Preempt the entry from the cache, but do not flush it to disk */
+	    if(H5D_istore_preempt(io_info, ent, FALSE) < 0)
+		HGOTO_ERROR(H5E_IO, H5E_CANTINIT, 0, "unable to preempt chunk")
+
+            found=0;
+	}
+    }
+
+/*-------------------------------------------------------------------------
+ * Check if there are any chunks on the B-tree
+ *-------------------------------------------------------------------------
+ */
+
+    HDmemset(&udata, 0, sizeof udata);
+    udata.stream = stdout;
+    udata.mesg = &dset->shared->layout;
+    udata.dims = curr_dims;
+
+    if(H5B_iterate(dset->ent.file, io_info->dxpl_id, H5B_ISTORE, H5D_istore_prune_extent, dset->shared->layout.u.chunk.addr, &udata) < 0)
+	HGOTO_ERROR(H5E_IO, H5E_CANTINIT, 0, "unable to iterate over B-tree")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_prune_by_extent() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5D_istore_prune_extent
+ *
+ * Purpose: Search for chunks that are no longer necessary in the B-tree.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 26, 2002
+ *
+ * Comments: Called by H5D_prune_by_extent
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static int
+H5D_istore_prune_extent(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t UNUSED addr,
+        const void UNUSED *_rt_key, void *_udata)
+{
+    H5D_istore_ud1_t       *bt_udata = (H5D_istore_ud1_t *)_udata;
+    const H5D_istore_key_t       *lt_key = (const H5D_istore_key_t *)_lt_key;
+    unsigned                u;
+    H5D_istore_ud1_t        udata;
+    int                     ret_value=H5B_ITER_CONT;       /* Return value */
+
+    /* The LT_KEY is the left key (the one that describes the chunk). It points to a chunk of
+     * storage that contains the beginning of the logical address space represented by UDATA.
+     */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_istore_prune_extent)
+
+    /* Figure out what chunks are no longer in use for the specified extent and release them */
+    for(u = 0; u < bt_udata->mesg->u.chunk.ndims - 1; u++)
+	if((hsize_t)lt_key->offset[u] > bt_udata->dims[u]) {
+#ifdef H5D_ISTORE_DEBUG
+            HDfputs("b-tree:remove:[", bt_udata->stream);
+            for(u = 0; u < bt_udata->mesg->u.chunk.ndims - 1; u++)
+                HDfprintf(bt_udata->stream, "%s%Hd", u ? ", " : "", lt_key->offset[u]);
+            HDfputs("]\n", bt_udata->stream);
+#endif
+
+            HDmemset(&udata, 0, sizeof udata);
+            udata.key = *lt_key;
+            udata.mesg = bt_udata->mesg;
+
+            /* Remove */
+            if(H5B_remove(f, dxpl_id, H5B_ISTORE, bt_udata->mesg->u.chunk.addr, &udata) < 0)
+                HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, H5B_ITER_ERROR, "unable to remove entry")
+	    break;
+	} /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_prune_extent() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5D_istore_remove
+ *
+ * Purpose: Removes chunks that are no longer necessary in the B-tree.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Robb Matzke
+ *             Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 28, 2002
+ *
+ * Comments: Part of H5B_ISTORE
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static H5B_ins_t
+H5D_istore_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key /*in,out */ ,
+	hbool_t *lt_key_changed /*out */ ,
+	void UNUSED * _udata /*in,out */ ,
+	void UNUSED * _rt_key /*in,out */ ,
+	hbool_t *rt_key_changed /*out */ )
+{
+    H5D_istore_key_t    *lt_key = (H5D_istore_key_t *)_lt_key;
+    H5B_ins_t ret_value=H5B_INS_REMOVE; /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_istore_remove)
+
+    /* Remove raw data chunk from file */
+    if(H5MF_xfree(f, H5FD_MEM_DRAW, dxpl_id, addr, (hsize_t)lt_key->nbytes)<0)
+        HGOTO_ERROR(H5E_STORAGE, H5E_CANTFREE, H5B_INS_ERROR, "unable to free chunk")
+
+    /* Mark keys as unchanged */
+    *lt_key_changed = FALSE;
+    *rt_key_changed = FALSE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_remove() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5D_istore_initialize_by_extent
+ *
+ * Purpose:  This function searches for chunks that have to be initialized with the fill
+ *   value both in the raw data cache and in the B-tree.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: April 4, 2002
+ *
+ * Comments:
+ *
+ * (See the example of H5D_istore_prune_by_extent)
+ * Next, there are seven chunks where the database extent boundary is
+ * within the chunk. We find those seven just like we did with the previous nine.
+ * Fot the ones that are allocated we initialize the part that lies outside the boundary
+ * with the fill value.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_istore_initialize_by_extent(H5D_io_info_t *io_info)
+{
+    const H5O_layout_t *layout=&(io_info->dset->shared->layout); /* Dataset layout */
+    uint8_t                *chunk = NULL;	/*the file chunk  */
+    unsigned                idx_hint = 0;	/*input value for H5F_istore_lock */
+    hsize_t                 chunk_offset[H5O_LAYOUT_NDIMS];	/*logical location of the chunks */
+    hsize_t                 idx_cur[H5O_LAYOUT_NDIMS];	/*multi-dimensional counters */
+    hsize_t                 idx_max[H5O_LAYOUT_NDIMS];
+    hsize_t                 sub_size[H5O_LAYOUT_NDIMS];
+    hsize_t                 naccessed;	/*bytes accessed in chunk */
+    hsize_t                 end_chunk;	/*chunk position counter */
+    hsize_t                start[H5O_LAYOUT_NDIMS];	/*starting location of hyperslab */
+    hsize_t                 count[H5O_LAYOUT_NDIMS];	/*element count of hyperslab */
+    hsize_t                 size[H5O_LAYOUT_NDIMS];	/*current size of dimensions */
+    H5S_t                  *space_chunk = NULL;	/*dataspace for a chunk */
+    hsize_t                 chunk_dims[H5O_LAYOUT_NDIMS];	/*current chunk dimensions */
+    hsize_t                 curr_dims[H5O_LAYOUT_NDIMS];	/*current dataspace dimensions */
+    hsize_t                 chunks[H5O_LAYOUT_NDIMS];	        /*current number of chunks in each dimension */
+    hsize_t                 down_chunks[H5O_LAYOUT_NDIMS];   /* "down" size of number of elements in each dimension */
+    int                     srank;	/*current # of dimensions (signed) */
+    unsigned                rank;	/*current # of dimensions */
+    int                     i, carry;	/*counters  */
+    unsigned                u;
+    int                     found = 0;	/*initialize this entry  */
+    H5P_genplist_t         *dc_plist;   /* Property list */
+    H5O_pline_t             pline;      /* I/O pipeline information */
+    H5O_fill_t              fill;       /* Fill value information */
+    H5D_fill_time_t         fill_time;  /* Fill time information */
+    H5D_storage_t           store;      /* Dataset storage information */
+    herr_t	            ret_value=SUCCEED;	/* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_initialize_by_extent, FAIL)
+
+    /* Check args */
+    assert(io_info);
+    assert(io_info->dset && H5D_CHUNKED == layout->type);
+    assert(layout->u.chunk.ndims > 0 && layout->u.chunk.ndims <= H5O_LAYOUT_NDIMS);
+    assert(H5F_addr_defined(layout->u.chunk.addr));
+
+    /* Get dataset's creation property list */
+    if (NULL == (dc_plist = H5I_object(io_info->dset->shared->dcpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list")
+
+    /* Get necessary properties from property list */
+    if(H5P_get(dc_plist, H5D_CRT_FILL_VALUE_NAME, &fill) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get fill value")
+    if(H5P_get(dc_plist, H5D_CRT_FILL_TIME_NAME, &fill_time) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get fill time")
+    if(H5P_get(dc_plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get data pipeline")
+
+    /* Reset start & count arrays */
+    HDmemset(start, 0, sizeof(start));
+    HDmemset(count, 0, sizeof(count));
+
+    /* Go get the rank & dimensions */
+    if((srank = H5S_get_simple_extent_dims(io_info->dset->shared->space, curr_dims, NULL)) < 0)
+	HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataset dimensions");
+    H5_ASSIGN_OVERFLOW(rank,srank,int,unsigned);
+
+    /* Copy current dimensions */
+    for(u = 0; u < rank; u++) {
+	size[u] = curr_dims[u];
+
+        /* Round up to the next integer # of chunks, to accomodate partial chunks */
+        chunks[u] = ((curr_dims[u]+layout->u.chunk.dim[u])-1) / layout->u.chunk.dim[u];
+    } /* end for */
+    size[u] = layout->u.chunk.dim[u];
+
+    /* Get the "down" sizes for each dimension */
+    if(H5V_array_down(rank,chunks,down_chunks)<0)
+        HGOTO_ERROR (H5E_INTERNAL, H5E_BADVALUE, FAIL, "can't compute 'down' sizes")
+
+    /* Create a data space for a chunk & set the extent */
+    for(u = 0; u < rank; u++)
+	chunk_dims[u] = layout->u.chunk.dim[u];
+    if(NULL == (space_chunk = H5S_create_simple(rank,chunk_dims,NULL)))
+	HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCREATE, FAIL, "can't create simple dataspace")
+
+/*
+ * Set up multi-dimensional counters (idx_max, and idx_cur) and
+ * loop through the chunks copying each chunk from the application to the
+ * chunk cache.
+ */
+    for(u = 0; u < layout->u.chunk.ndims; u++) {
+	idx_max[u] = (size[u] - 1) / layout->u.chunk.dim[u] + 1;
+	idx_cur[u] = 0;
+    } /* end for */
+
+    /* Point to local dataset storage info */
+    assert(io_info->store==NULL);       /* Make certain we aren't blowing anything away */
+    io_info->store=&store;
+
+    /* Loop over all chunks */
+    carry=0;
+    while(carry==0) {
+	for(u = 0, naccessed = 1; u < layout->u.chunk.ndims; u++) {
+	    /* The location and size of the chunk being accessed */
+	    chunk_offset[u] = idx_cur[u] * layout->u.chunk.dim[u];
+	    sub_size[u] = MIN((idx_cur[u] + 1) * layout->u.chunk.dim[u],
+		    size[u]) - chunk_offset[u];
+	    naccessed *= sub_size[u];
+	} /* end for */
+
+	/*
+	 * Figure out what chunks have to be initialized. These are the chunks where the dataspace
+	 * extent boundary is within the chunk
+	 */
+	for(u = 0, found = 0; u < rank; u++) {
+	    end_chunk = chunk_offset[u] + layout->u.chunk.dim[u];
+	    if(end_chunk > size[u]) {
+		found = 1;
+		break;
+	    }
+	} /* end for */
+
+	if(found) {
+
+            /* Calculate the index of this chunk */
+            if(H5V_chunk_index(rank,chunk_offset,layout->u.chunk.dim,down_chunks,&store.chunk.index)<0)
+                HGOTO_ERROR (H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index")
+
+            store.chunk.offset=chunk_offset;
+	    if(NULL == (chunk = H5D_istore_lock(io_info, NULL, FALSE, &idx_hint)))
+		HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to read raw data chunk")
+
+	    if(H5S_select_all(space_chunk,1) < 0)
+		HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to select space")
+
+	    for(u = 0; u < rank; u++)
+		count[u] = MIN((idx_cur[u] + 1) * layout->u.chunk.dim[u], size[u] - chunk_offset[u]);
+
+#ifdef H5D_ISTORE_DEBUG
+	    HDfputs("cache:initialize:offset:[", stdout);
+	    for(u = 0; u < rank; u++)
+		HDfprintf(stdout, "%s%Hd", u ? ", " : "", chunk_offset[u]);
+	    HDfputs("]", stdout);
+	    HDfputs(":count:[", stdout);
+	    for(u = 0; u < rank; u++)
+		HDfprintf(stdout, "%s%Hd", u ? ", " : "", count[u]);
+	    HDfputs("]\n", stdout);
+#endif
+
+	    if(H5S_select_hyperslab(space_chunk, H5S_SELECT_NOTB, start, NULL,
+			count, NULL) < 0)
+		HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to select hyperslab")
+
+	    /* Fill the selection in the memory buffer */
+            /* Use the size of the elements in the chunk directly instead of */
+            /* relying on the fill.size, which might be set to 0 if there is */
+            /* no fill-value defined for the dataset -QAK */
+            H5_CHECK_OVERFLOW(size[rank],hsize_t,size_t);
+	    if(H5S_select_fill(fill.buf, (size_t)size[rank], space_chunk, chunk) < 0)
+		HGOTO_ERROR(H5E_DATASET, H5E_CANTENCODE, FAIL, "filling selection failed")
+
+	    if(H5D_istore_unlock(io_info, TRUE, idx_hint, chunk, (size_t)naccessed) < 0)
+		HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to unlock raw data chunk")
+	} /*found */
+
+	/* Increment indices */
+	for(i = (int)rank, carry = 1; i >= 0 && carry; --i) {
+	    if(++idx_cur[i] >= idx_max[i])
+		idx_cur[i] = 0;
+	    else
+		carry = 0;
+	} /* end for */
+    } /* end while */
+
+done:
+    if(space_chunk)
+        if(H5S_close(space_chunk)<0)
+            HDONE_ERROR(H5E_DATASET, H5E_CLOSEERROR, FAIL, "unable to release dataspace")
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_initialize_by_extent() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_delete
+ *
+ * Purpose:	Delete raw data storage for entire dataset (i.e. all chunks)
+ *
+ * Return:	Success:	Non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, March 20, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_istore_delete(H5F_t *f, hid_t dxpl_id, const H5O_layout_t *layout)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_delete, FAIL)
+
+    /* Check if the B-tree has been created in the file */
+    if(H5F_addr_defined(layout->u.chunk.addr)) {
+        H5O_layout_t tmp_layout=*layout;/* Local copy of layout info */
+        H5D_istore_ud1_t	udata;  /* User data for B-tree iterator call */
+
+        /* Set up user data for B-tree deletion */
+        HDmemset(&udata, 0, sizeof udata);
+        udata.mesg = &tmp_layout;
+
+        /* Allocate the shared structure */
+        if(H5D_istore_shared_create(f, &tmp_layout)<0)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_CANTINIT, FAIL, "can't create wrapper for shared B-tree info")
+
+        /* Delete entire B-tree */
+        if(H5B_delete(f, dxpl_id, H5B_ISTORE, tmp_layout.u.chunk.addr, &udata)<0)
+            HGOTO_ERROR(H5E_IO, H5E_CANTDELETE, 0, "unable to delete chunk B-tree")
+
+        /* Free the raw B-tree node buffer */
+        if(tmp_layout.u.chunk.btree_shared==NULL)
+            HGOTO_ERROR (H5E_IO, H5E_CANTFREE, FAIL, "ref-counted page nil")
+        if(H5RC_DEC(tmp_layout.u.chunk.btree_shared)<0)
+            HGOTO_ERROR (H5E_IO, H5E_CANTFREE, FAIL, "unable to decrement ref-counted page")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_delete() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_update_cache
+ *
+ * Purpose:	Update any cached chunks index values after the dataspace
+ *              size has changed
+ *
+ * Return:	Success:	Non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, May 29, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_istore_update_cache(H5D_t *dset, hid_t dxpl_id)
+{
+    H5D_io_info_t io_info;              /* Temporary I/O info object */
+    H5D_rdcc_t         *rdcc = &(dset->shared->cache.chunk);	/*raw data chunk cache */
+    H5D_rdcc_ent_t     *ent, *next;	/*cache entry  */
+    H5D_rdcc_ent_t     *old_ent;	/* Old cache entry  */
+    H5D_dxpl_cache_t _dxpl_cache;       /* Data transfer property cache buffer */
+    H5D_dxpl_cache_t *dxpl_cache=&_dxpl_cache;   /* Data transfer property cache */
+    unsigned            rank;	/*current # of dimensions */
+    hsize_t             curr_dims[H5O_LAYOUT_NDIMS];	/*current dataspace dimensions */
+    hsize_t             chunks[H5O_LAYOUT_NDIMS];	        /*current number of chunks in each dimension */
+    hsize_t             down_chunks[H5O_LAYOUT_NDIMS];   /* "down" size of number of elements in each dimension */
+    hsize_t             idx;    /* Chunk index */
+    unsigned	        old_idx;	/* Previous index number	*/
+    unsigned            u;	/*counters  */
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_update_cache, FAIL)
+
+    /* Check args */
+    assert(dset && H5D_CHUNKED == dset->shared->layout.type);
+    assert(dset->shared->layout.u.chunk.ndims > 0 && dset->shared->layout.u.chunk.ndims <= H5O_LAYOUT_NDIMS);
+
+    /* Go get the rank & dimensions */
+    rank = dset->shared->layout.u.chunk.ndims-1;
+    if(H5S_get_simple_extent_dims(dset->shared->space, curr_dims, NULL) < 0)
+	HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get dataset dimensions")
+
+    /* Round up to the next integer # of chunks, to accomodate partial chunks */
+    for(u = 0; u < rank; u++)
+        chunks[u] = ((curr_dims[u]+dset->shared->layout.u.chunk.dim[u])-1) / dset->shared->layout.u.chunk.dim[u];
+
+    /* Get the "down" sizes for each dimension */
+    if(H5V_array_down(rank,chunks,down_chunks)<0)
+        HGOTO_ERROR (H5E_INTERNAL, H5E_BADVALUE, FAIL, "can't compute 'down' sizes")
+
+    /* Fill the DXPL cache values for later use */
+    if (H5D_get_dxpl_cache(dxpl_id,&dxpl_cache)<0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't fill dxpl cache")
+
+    /* Construct dataset I/O info */
+    H5D_BUILD_IO_INFO(&io_info,dset,dxpl_cache,dxpl_id,NULL);
+
+    /* Recompute the index for each cached chunk that is in a dataset */
+    for(ent = rdcc->head; ent; ent = next) {
+        next=ent->next;
+
+        /* Calculate the index of this chunk */
+        if(H5V_chunk_index(rank,ent->offset,dset->shared->layout.u.chunk.dim,down_chunks,&idx)<0)
+            HGOTO_ERROR (H5E_DATASPACE, H5E_BADRANGE, FAIL, "can't get chunk index")
+
+        /* Compute the index for the chunk entry */
+        old_idx=ent->idx;   /* Save for later */
+        ent->idx=H5D_HASH(dset->shared,idx);
+
+        if(old_idx!=ent->idx) {
+            /* Check if there is already a chunk at this chunk's new location */
+            old_ent = rdcc->slot[ent->idx];
+            if(old_ent!=NULL) {
+                assert(old_ent->locked==0);
+
+                /* Check if we are removing the entry we would walk to next */
+                if(old_ent==next)
+                    next=old_ent->next;
+
+                /* Remove the old entry from the cache */
+                if (H5D_istore_preempt(&io_info, old_ent, TRUE )<0)
+                    HGOTO_ERROR (H5E_IO, H5E_CANTFLUSH, FAIL, "unable to flush one or more raw data chunks")
+            } /* end if */
+
+            /* Insert this chunk into correct location in hash table */
+            rdcc->slot[ent->idx]=ent;
+
+            /* Null out previous location */
+            rdcc->slot[old_idx]=NULL;
+        } /* end if */
+    } /* end for */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_istore_update_cache() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_dump_btree
+ *
+ * Purpose:	Prints information about the storage B-tree to the specified
+ *		stream.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 28, 1999
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_istore_dump_btree(H5F_t *f, hid_t dxpl_id, FILE *stream, unsigned ndims, haddr_t addr)
+{
+    H5O_layout_t        layout;
+    H5D_istore_ud1_t	udata;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_dump_btree, FAIL)
+
+    HDmemset(&udata, 0, sizeof udata);
+    layout.u.chunk.ndims = ndims;
+    udata.mesg = &layout;
+    udata.stream = stream;
+    if(stream)
+        HDfprintf(stream, "    Address: %a\n",addr);
+    if(H5B_iterate(f, dxpl_id, H5B_ISTORE, H5D_istore_iter_dump, addr, &udata)<0)
+        HGOTO_ERROR(H5E_IO, H5E_CANTINIT, 0, "unable to iterate over chunk B-tree")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_dump_btree() */
+
+#ifdef H5D_ISTORE_DEBUG
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_stats
+ *
+ * Purpose:	Print raw data cache statistics to the debug stream.  If
+ *		HEADERS is non-zero then print table column headers,
+ *		otherwise assume that the H5AC layer has already printed them.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 21, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_istore_stats (H5D_t *dset, hbool_t headers)
+{
+    H5D_rdcc_t	*rdcc = &(dset->shared->cache.chunk);
+    double	miss_rate;
+    char	ascii[32];
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_stats, FAIL)
+
+    if (!H5DEBUG(AC))
+        HGOTO_DONE(SUCCEED)
+
+    if (headers) {
+        fprintf(H5DEBUG(AC), "H5D: raw data cache statistics\n");
+        fprintf(H5DEBUG(AC), "   %-18s %8s %8s %8s %8s+%-8s\n",
+            "Layer", "Hits", "Misses", "MissRate", "Inits", "Flushes");
+        fprintf(H5DEBUG(AC), "   %-18s %8s %8s %8s %8s-%-8s\n",
+            "-----", "----", "------", "--------", "-----", "-------");
+    }
+
+#ifdef H5AC_DEBUG
+    if (H5DEBUG(AC)) headers = TRUE;
+#endif
+
+    if (headers) {
+        if (rdcc->nhits>0 || rdcc->nmisses>0) {
+            miss_rate = 100.0 * rdcc->nmisses /
+                    (rdcc->nhits + rdcc->nmisses);
+        } else {
+            miss_rate = 0.0;
+        }
+        if (miss_rate > 100) {
+            sprintf(ascii, "%7d%%", (int) (miss_rate + 0.5));
+        } else {
+            sprintf(ascii, "%7.2f%%", miss_rate);
+        }
+
+        fprintf(H5DEBUG(AC), "   %-18s %8u %8u %7s %8d+%-9ld\n",
+            "raw data chunks", rdcc->nhits, rdcc->nmisses, ascii,
+            rdcc->ninits, (long)(rdcc->nflushes)-(long)(rdcc->ninits));
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_stats() */
+#endif /* H5D_ISTORE_DEBUG */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_istore_debug
+ *
+ * Purpose:	Debugs a B-tree node for indexed raw data storage.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April 16, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_istore_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
+		 int fwidth, unsigned ndims)
+{
+    H5O_layout_t        layout;
+    H5D_istore_ud1_t	udata;
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_istore_debug,FAIL)
+
+    layout.u.chunk.ndims = ndims;
+    HDmemset (&udata, 0, sizeof udata);
+    udata.mesg = &layout;
+
+    /* Allocate the shared structure */
+    if(H5D_istore_shared_create(f, &layout)<0)
+	HGOTO_ERROR (H5E_RESOURCE, H5E_CANTINIT, FAIL, "can't create wrapper for shared B-tree info")
+
+    (void)H5B_debug (f, dxpl_id, addr, stream, indent, fwidth, H5B_ISTORE, &udata);
+
+    /* Free the raw B-tree node buffer */
+    if(layout.u.chunk.btree_shared==NULL)
+        HGOTO_ERROR (H5E_IO, H5E_CANTFREE, FAIL, "ref-counted page nil")
+    if(H5RC_DEC(layout.u.chunk.btree_shared)<0)
+	HGOTO_ERROR (H5E_IO, H5E_CANTFREE, FAIL, "unable to decrement ref-counted page")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5D_istore_debug() */

Added: packages/hdf5/branches/upstream/current/src/H5Dmpio.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Dmpio.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Dmpio.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,358 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  rky 980813
+ *
+ * Purpose:	Functions to read/write directly between app buffer and file.
+ *
+ * 		Beware of the ifdef'ed print statements.
+ *		I didn't make them portable.
+ */
+
+#define H5D_PACKAGE		/*suppress error about including H5Dpkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dpkg.h"		/* Datasets				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5Oprivate.h"		/* Object headers		  	*/
+#include "H5Pprivate.h"         /* Property lists                       */
+#include "H5Sprivate.h"		/* Dataspaces 				*/
+
+#ifdef H5_HAVE_PARALLEL
+
+/* For regular hyperslab selection. */
+static herr_t
+H5D_mpio_spaces_xfer(H5D_io_info_t *io_info, size_t elmt_size,
+                     const H5S_t *file_space, const H5S_t *mem_space,
+                     void *buf/*out*/,
+		     hbool_t do_write);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_mpio_opt_possible
+ *
+ * Purpose:	Checks if an direct I/O transfer is possible between memory and
+ *                  the file.
+ *
+ * Return:	Success:        Non-negative: TRUE or FALSE
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, April 3, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5D_mpio_opt_possible( const H5D_io_info_t *io_info,
+    const H5S_t *mem_space, const H5S_t *file_space, const H5T_path_t *tpath)
+{
+    int         local_opinion = TRUE;   /* This process's idea of whether to perform collective I/O or not */
+    int         consensus;              /* Consensus opinion of all processes */
+    int         mpi_code;               /* MPI error code */
+    htri_t ret_value=TRUE;
+
+    FUNC_ENTER_NOAPI(H5D_mpio_opt_possible, FAIL);
+
+    /* Check args */
+    assert(io_info);
+    assert(mem_space);
+    assert(file_space);
+
+    /* For independent I/O, get out quickly and don't try to form consensus */
+    if (io_info->dxpl_cache->xfer_mode==H5FD_MPIO_INDEPENDENT)
+        HGOTO_DONE(FALSE);
+
+    /* Optimized MPI types flag must be set and it is must be collective IO */
+    /* (Don't allow parallel I/O for the MPI-posix driver, since it doesn't do real collective I/O) */
+    if (!(H5S_mpi_opt_types_g && io_info->dxpl_cache->xfer_mode==H5FD_MPIO_COLLECTIVE && !IS_H5FD_MPIPOSIX(io_info->dset->ent.file))) {
+        local_opinion = FALSE;
+        goto broadcast;
+    } /* end if */
+
+    /* Check whether these are both simple or scalar dataspaces */
+    if (!((H5S_SIMPLE==H5S_GET_EXTENT_TYPE(mem_space) || H5S_SCALAR==H5S_GET_EXTENT_TYPE(mem_space))
+            && (H5S_SIMPLE==H5S_GET_EXTENT_TYPE(file_space) || H5S_SCALAR==H5S_GET_EXTENT_TYPE(file_space)))) {
+        local_opinion = FALSE;
+        goto broadcast;
+    } /* end if */
+
+    /* Can't currently handle point selections */
+    if (H5S_SEL_POINTS==H5S_GET_SELECT_TYPE(mem_space) || H5S_SEL_POINTS==H5S_GET_SELECT_TYPE(file_space)) {
+        local_opinion = FALSE;
+        goto broadcast;
+    } /* end if */
+
+    /* Dataset storage must be contiguous or chunked */
+    if (!(io_info->dset->shared->layout.type == H5D_CONTIGUOUS ||
+            io_info->dset->shared->layout.type == H5D_CHUNKED)) {
+        local_opinion = FALSE;
+        goto broadcast;
+    } /* end if */
+
+    /*The handling of memory space is different for chunking
+	  and contiguous storage,
+	  For contigous storage, mem_space and file_space won't
+	  change when it it is doing disk IO.
+	  For chunking storage, mem_space will change for different
+	  chunks. So for chunking storage, whether we can use
+	  collective IO will defer until the each chunk IO is reached.
+	  For contiguous storage, if we find the MPI-IO cannot
+	  support complicated MPI derived data type, we will
+	  set use_par_opt_io = FALSE.
+	*/
+#ifndef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
+    if(io_info->dset->shared->layout.type == H5D_CONTIGUOUS)
+        if((H5S_SELECT_IS_REGULAR(file_space) != TRUE) ||
+                (H5S_SELECT_IS_REGULAR(mem_space) != TRUE)) {
+            local_opinion = FALSE;
+            goto broadcast;
+        } /* end if */
+#endif
+
+    /* Don't allow collective operations if filters need to be applied */
+    if(io_info->dset->shared->layout.type == H5D_CHUNKED)
+        if(io_info->dset->shared->dcpl_cache.pline.nused>0) {
+            local_opinion = FALSE;
+            goto broadcast;
+        } /* end if */
+
+    /* Don't allow collective operations if datatype conversions need to happen */
+    if(!H5T_path_noop(tpath)) {
+        local_opinion = FALSE;
+        goto broadcast;
+    } /* end if */
+
+
+broadcast:
+    /* Form consensus opinion among all processes about whether to perform
+     * collective I/O */
+    if (MPI_SUCCESS != (mpi_code = MPI_Allreduce(&local_opinion, &consensus, 1, MPI_INT, MPI_LAND, io_info->comm)))
+        HMPI_GOTO_ERROR(FAIL, "MPI_Allreduce failed", mpi_code)
+
+    ret_value = consensus > 0 ? TRUE : FALSE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* H5D_mpio_opt_possible() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_mpio_spaces_xfer
+ *
+ * Purpose:	Use MPI-IO to transfer data efficiently
+ *		directly between app buffer and file.
+ *
+ * Return:	non-negative on success, negative on failure.
+ *
+ * Programmer:	rky 980813
+ *
+ * Notes:
+ *      For collective data transfer only since this would eventually call
+ *      H5FD_mpio_setup to do setup to eveually call MPI_File_set_view in
+ *      H5FD_mpio_read or H5FD_mpio_write.  MPI_File_set_view is a collective
+ *      call.  Letting independent data transfer use this route would result in
+ *      hanging.
+ *
+ *      The preconditions for calling this routine are located in the
+ *      H5S_mpio_opt_possible() routine, which determines whether this routine
+ *      can be called for a given dataset transfer.
+ *
+ * Modifications:
+ *	rky 980918
+ *	Added must_convert parameter to let caller know we can't optimize
+ *	the xfer.
+ *
+ *	Albert Cheng, 001123
+ *	Include the MPI_type freeing as part of cleanup code.
+ *
+ *      QAK - 2002/04/02
+ *      Removed the must_convert parameter and move preconditions to
+ *      H5S_mpio_opt_possible() routine
+ *
+ *      QAK - 2002/06/17
+ *      Removed 'disp' parameter from H5FD_mpio_setup routine and use the
+ *      address of the dataset in MPI_File_set_view() calls, as necessary.
+ *
+ *      QAK - 2002/06/18
+ *      Removed 'dc_plist' parameter, since it was not used.  Also, switch to
+ *      getting the 'extra_offset' setting for each selection.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5D_mpio_spaces_xfer(H5D_io_info_t *io_info, size_t elmt_size,
+    const H5S_t *file_space, const H5S_t *mem_space,
+    void *_buf /*out*/, hbool_t do_write )
+{
+    haddr_t	 addr;                  /* Address of dataset (or selection) within file */
+    size_t	 mpi_buf_count, mpi_file_count;       /* Number of "objects" to transfer */
+    hsize_t	 mpi_buf_offset, mpi_file_offset;       /* Offset within dataset where selection (ie. MPI type) begins */
+    MPI_Datatype mpi_buf_type, mpi_file_type;   /* MPI types for buffer (memory) and file */
+    hbool_t	 mbt_is_derived=0,      /* Whether the buffer (memory) type is derived and needs to be free'd */
+		 mft_is_derived=0;      /* Whether the file type is derived and needs to be free'd */
+    hbool_t	 plist_is_setup=0;      /* Whether the dxpl has been customized */
+    uint8_t	*buf=(uint8_t *)_buf;   /* Alias for pointer arithmetic */
+    int          mpi_code;              /* MPI return code */
+    herr_t	 ret_value = SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5D_mpio_spaces_xfer);
+
+    /* Check args */
+    assert (io_info);
+    assert (io_info->dset);
+    assert (file_space);
+    assert (mem_space);
+    assert (buf);
+    assert (IS_H5FD_MPIO(io_info->dset->ent.file));
+    /* Make certain we have the correct type of property list */
+    assert(TRUE==H5P_isa_class(io_info->dxpl_id,H5P_DATASET_XFER));
+
+    /* create the MPI buffer type */
+    if (H5S_mpio_space_type( mem_space, elmt_size,
+			       /* out: */
+			       &mpi_buf_type,
+			       &mpi_buf_count,
+			       &mpi_buf_offset,
+			       &mbt_is_derived )<0)
+    	HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't create MPI buf type");
+
+    /* create the MPI file type */
+    if ( H5S_mpio_space_type( file_space, elmt_size,
+			       /* out: */
+			       &mpi_file_type,
+			       &mpi_file_count,
+			       &mpi_file_offset,
+			       &mft_is_derived )<0)
+    	HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't create MPI file type");
+
+    /* Get the base address of the contiguous dataset or the chunk */
+    if(io_info->dset->shared->layout.type == H5D_CONTIGUOUS)
+       addr = H5D_contig_get_addr(io_info->dset) + mpi_file_offset;
+    else {
+        haddr_t   chunk_addr; /* for collective chunk IO */
+
+        assert(io_info->dset->shared->layout.type == H5D_CHUNKED);
+        chunk_addr=H5D_istore_get_addr(io_info,NULL);
+        addr = H5F_BASE_ADDR(io_info->dset->ent.file) + chunk_addr + mpi_file_offset;
+    }
+
+    /*
+     * Pass buf type, file type to the file driver. Request an MPI type
+     * transfer (instead of an elementary byteblock transfer).
+     */
+    if(H5FD_mpi_setup_collective(io_info->dxpl_id, mpi_buf_type, mpi_file_type)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set MPI-I/O properties");
+    plist_is_setup=1;
+
+    /* Adjust the buffer pointer to the beginning of the selection */
+    buf+=mpi_buf_offset;
+
+    /* transfer the data */
+    if (do_write) {
+    	if (H5F_block_write(io_info->dset->ent.file, H5FD_MEM_DRAW, addr, mpi_buf_count, io_info->dxpl_id, buf) <0)
+	    HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL,"MPI write failed");
+    } else {
+    	if (H5F_block_read (io_info->dset->ent.file, H5FD_MEM_DRAW, addr, mpi_buf_count, io_info->dxpl_id, buf) <0)
+	    HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL,"MPI read failed");
+    }
+
+done:
+    /* Reset the dxpl settings */
+    if(plist_is_setup) {
+        if(H5FD_mpi_teardown_collective(io_info->dxpl_id)<0)
+    	    HDONE_ERROR(H5E_DATASPACE, H5E_CANTFREE, FAIL, "unable to reset dxpl values");
+    } /* end if */
+
+    /* free the MPI buf and file types */
+    if (mbt_is_derived) {
+	if (MPI_SUCCESS != (mpi_code= MPI_Type_free( &mpi_buf_type )))
+            HMPI_DONE_ERROR(FAIL, "MPI_Type_free failed", mpi_code);
+    }
+    if (mft_is_derived) {
+	if (MPI_SUCCESS != (mpi_code= MPI_Type_free( &mpi_file_type )))
+            HMPI_DONE_ERROR(FAIL, "MPI_Type_free failed", mpi_code);
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5D_mpio_spaces_xfer() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_mpio_select_read
+ *
+ * Purpose:	MPI-IO function to read directly from app buffer to file.
+ *
+ * Return:	non-negative on success, negative on failure.
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_mpio_select_read(H5D_io_info_t *io_info,
+    size_t UNUSED nelmts, size_t elmt_size,
+    const H5S_t *file_space, const H5S_t *mem_space,
+    void *buf/*out*/)
+{
+    herr_t ret_value;
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5D_mpio_select_read);
+
+    ret_value = H5D_mpio_spaces_xfer(io_info, elmt_size, file_space,
+        mem_space, buf, 0/*read*/);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5D_mpio_select_read() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_mpio_select_write
+ *
+ * Purpose:	MPI-IO function to write directly from app buffer to file.
+ *
+ * Return:	non-negative on success, negative on failure.
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_mpio_select_write(H5D_io_info_t *io_info,
+    size_t UNUSED nelmts, size_t elmt_size,
+    const H5S_t *file_space, const H5S_t *mem_space,
+    const void *buf)
+{
+    herr_t ret_value;
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5D_mpio_select_write);
+
+    /*OKAY: CAST DISCARDS CONST QUALIFIER*/
+    ret_value = H5D_mpio_spaces_xfer(io_info, elmt_size, file_space,
+                    mem_space, (void*)buf, 1/*write*/);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5D_mpio_spaces_write() */
+#endif  /* H5_HAVE_PARALLEL */
+

Added: packages/hdf5/branches/upstream/current/src/H5Dpkg.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Dpkg.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Dpkg.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,334 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *		Monday, April 14, 2003
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5D package.  Source files outside the H5D package should
+ *		include H5Dprivate.h instead.
+ */
+#ifndef H5D_PACKAGE
+#error "Do not include this file outside the H5D package!"
+#endif
+
+#ifndef _H5Dpkg_H
+#define _H5Dpkg_H
+
+/* Get package's private header */
+#include "H5Dprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5Gprivate.h"		/* Groups 			  	*/
+#include "H5Oprivate.h"		/* Object headers		  	*/
+#include "H5Sprivate.h"		/* Dataspaces 				*/
+#include "H5Tprivate.h"		/* Datatype functions			*/
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/* The number of reserved IDs in dataset ID group */
+#define H5D_RESERVED_ATOMS  0
+
+/* Set the minimum object header size to create objects with */
+#define H5D_MINHDR_SIZE 256
+
+/* [Simple] Macro to construct a H5D_io_info_t from it's components */
+#define H5D_BUILD_IO_INFO(io_info,ds,dxpl_c,dxpl_i,str)                 \
+    (io_info)->dset=ds;                                                 \
+    (io_info)->dxpl_cache=dxpl_c;                                       \
+    (io_info)->dxpl_id=dxpl_i;                                          \
+    (io_info)->store=str
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+/*
+ * If there is no data type conversion then it might be possible to
+ * transfer data points between application memory and the file in one
+ * step without going through the data type conversion buffer.
+ */
+
+/* Read from file to application w/o intermediate scratch buffer */
+struct H5D_io_info_t;
+typedef herr_t (*H5D_io_read_func_t)(struct H5D_io_info_t *io_info,
+    size_t nelmts, size_t elmt_size,
+    const H5S_t *file_space, const H5S_t *mem_space,
+    void *buf/*out*/);
+
+
+/* Write directly from app buffer to file */
+typedef herr_t (*H5D_io_write_func_t)(struct H5D_io_info_t *io_info,
+    size_t nelmts, size_t elmt_size,
+    const H5S_t *file_space, const H5S_t *mem_space,
+    const void *buf);
+
+/* Function pointers for I/O on particular types of dataset layouts */
+typedef ssize_t (*H5D_io_readvv_func_t)(const struct H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[],
+    void *buf);
+typedef ssize_t (*H5D_io_writevv_func_t)(const struct H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[],
+    const void *buf);
+
+/* Typedef for raw data I/O framework info */
+typedef struct H5D_io_ops_t {
+    H5D_io_read_func_t read;            /* Direct I/O routine for reading */
+    H5D_io_write_func_t write;          /* Direct I/O routine for writing */
+    H5D_io_readvv_func_t readvv;        /* I/O routine for reading data */
+    H5D_io_writevv_func_t writevv;      /* I/O routine for writing data */
+} H5D_io_ops_t;
+
+/* Typedef for raw data I/O operation info */
+typedef struct H5D_io_info_t {
+    H5D_t *dset;                /* Pointer to dataset being operated on */
+#ifndef H5_HAVE_PARALLEL
+    const
+#endif /* H5_HAVE_PARALLEL */
+        H5D_dxpl_cache_t *dxpl_cache; /* Pointer to cache DXPL info */
+    hid_t dxpl_id;              /* Original DXPL ID */
+#ifdef H5_HAVE_PARALLEL
+    MPI_Comm comm;              /* MPI communicator for file */
+    hbool_t xfer_mode_changed;  /* Whether the transfer mode was changed */
+#endif /* H5_HAVE_PARALLEL */
+    const H5D_storage_t *store; /* Dataset storage info */
+    H5D_io_ops_t ops;           /* I/O operation function pointers */
+#ifdef H5S_DEBUG
+    H5S_iostats_t *stats;       /* I/O statistics */
+#endif /* H5S_DEBUG */
+} H5D_io_info_t;
+
+/* The raw data chunk cache */
+typedef struct H5D_rdcc_t {
+#ifdef H5D_ISTORE_DEBUG
+    unsigned		ninits;	/* Number of chunk creations		*/
+    unsigned		nhits;	/* Number of cache hits			*/
+    unsigned		nmisses;/* Number of cache misses		*/
+    unsigned		nflushes;/* Number of cache flushes		*/
+#endif /* H5D_ISTORE_DEBUG */
+    size_t		nbytes;	/* Current cached raw data in bytes	*/
+    size_t		nslots;	/* Number of chunk slots allocated	*/
+    struct H5D_rdcc_ent_t *head; /* Head of doubly linked list		*/
+    struct H5D_rdcc_ent_t *tail; /* Tail of doubly linked list		*/
+    int		nused;	/* Number of chunk slots in use		*/
+    struct H5D_rdcc_ent_t **slot; /* Chunk slots, each points to a chunk*/
+} H5D_rdcc_t;
+
+/* The raw data contiguous data cache */
+typedef struct H5D_rdcdc_t {
+    unsigned char *sieve_buf;   /* Buffer to hold data sieve buffer */
+    haddr_t sieve_loc;          /* File location (offset) of the data sieve buffer */
+    size_t sieve_size;          /* Size of the data sieve buffer used (in bytes) */
+    size_t sieve_buf_size;      /* Size of the data sieve buffer allocated (in bytes) */
+    unsigned sieve_dirty;       /* Flag to indicate that the data sieve buffer is dirty */
+} H5D_rdcdc_t;
+
+/*
+ * A dataset is made of two layers, an H5D_t struct that is unique to
+ * each instance of an opened datset, and a shared struct that is only
+ * created once for a given dataset.  Thus, if a dataset is opened twice,
+ * there will be two IDs and two H5D_t structs, both sharing one H5D_shared_t.
+ */
+typedef struct H5D_shared_t {
+    size_t              fo_count;       /* reference count */
+    hid_t               type_id;        /* ID for dataset's datatype    */
+    H5T_t              *type;           /* datatype of this dataset     */
+    H5S_t              *space;          /* dataspace of this dataset    */
+    hid_t               dcpl_id;        /* dataset creation property id */
+    H5D_dcpl_cache_t    dcpl_cache;     /* Cached DCPL values */
+    H5D_io_ops_t        io_ops;         /* I/O operations */
+    H5O_layout_t        layout;         /* data layout                  */
+    hbool_t             checked_filters;/* TRUE if dataset passes can_apply check */
+
+    /* Cache some frequently accessed values from the DCPL */
+    H5O_efl_t           efl;            /* External file list information */
+    H5D_alloc_time_t    alloc_time;     /* Dataset allocation time      */
+    H5D_fill_time_t	fill_time;	/* Dataset fill value writing time */
+    H5O_fill_t          fill;           /* Dataset fill value information */
+
+    /* Buffered/cached information for types of raw data storage*/
+    struct {
+        H5D_rdcdc_t     contig;         /* Information about contiguous data */
+                                        /* (Note that the "contig" cache
+                                         * information can be used by a chunked
+                                         * dataset in certain circumstances)
+                                         */
+        H5D_rdcc_t      chunk;          /* Information about chunked data */
+    } cache;
+} H5D_shared_t;
+
+struct H5D_t {
+    H5G_entry_t         ent;            /* cached object header stuff   */
+    H5D_shared_t        *shared;        /* cached information from file */
+};
+
+/* Enumerated type for allocating dataset's storage */
+typedef enum {
+    H5D_ALLOC_CREATE,           /* Dataset is being created */
+    H5D_ALLOC_OPEN,             /* Dataset is being opened */
+    H5D_ALLOC_EXTEND,           /* Dataset's dataspace is being extended */
+    H5D_ALLOC_WRITE             /* Dataset is being extended */
+} H5D_time_alloc_t;
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+extern H5D_dxpl_cache_t H5D_def_dxpl_cache;
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+H5_DLL herr_t H5D_alloc_storage (H5F_t *f, hid_t dxpl_id, H5D_t *dset, H5D_time_alloc_t time_alloc,
+                        hbool_t update_time, hbool_t full_overwrite);
+
+/* Functions that perform serial I/O operations */
+H5_DLL herr_t H5D_select_fscat (H5D_io_info_t *io_info,
+    const H5S_t *file_space, H5S_sel_iter_t *file_iter, size_t nelmts,
+    const void *_buf);
+H5_DLL size_t H5D_select_fgath (H5D_io_info_t *io_info,
+    const H5S_t *file_space, H5S_sel_iter_t *file_iter, size_t nelmts,
+    void *buf);
+H5_DLL herr_t H5D_select_mscat (const void *_tscat_buf,
+    const H5S_t *space, H5S_sel_iter_t *iter, size_t nelmts,
+    const H5D_dxpl_cache_t *dxpl_cache, void *_buf/*out*/);
+H5_DLL size_t H5D_select_mgath (const void *_buf,
+    const H5S_t *space, H5S_sel_iter_t *iter, size_t nelmts,
+    const H5D_dxpl_cache_t *dxpl_cache, void *_tgath_buf/*out*/);
+H5_DLL herr_t H5D_select_read(H5D_io_info_t *io_info,
+    size_t nelmts, size_t elmt_size,
+    const H5S_t *file_space, const H5S_t *mem_space,
+    void *buf/*out*/);
+H5_DLL herr_t H5D_select_write(H5D_io_info_t *io_info,
+    size_t nelmts, size_t elmt_size,
+    const H5S_t *file_space, const H5S_t *mem_space,
+    const void *buf/*out*/);
+
+/* Functions that operate on contiguous storage */
+H5_DLL herr_t H5D_contig_create(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout);
+H5_DLL herr_t H5D_contig_fill(H5D_t *dset, hid_t dxpl_id);
+H5_DLL haddr_t H5D_contig_get_addr(const H5D_t *dset);
+H5_DLL ssize_t H5D_contig_readvv(const H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[],
+    void *buf);
+H5_DLL ssize_t H5D_contig_writevv(const H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[],
+    const void *buf);
+
+/* Functions that operate on compact dataset storage */
+H5_DLL ssize_t H5D_compact_readvv(const H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_size_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_size_arr[], hsize_t mem_offset_arr[],
+    void *buf);
+H5_DLL ssize_t H5D_compact_writevv(const H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_size_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_size_arr[], hsize_t mem_offset_arr[],
+    const void *buf);
+
+/* Functions that operate on indexed storage */
+/* forward reference for collective-chunk IO use */
+struct H5D_istore_ud1_t; /*define in H5Distore.c*/
+H5_DLL herr_t H5D_istore_init (const H5F_t *f, const H5D_t *dset);
+H5_DLL herr_t H5D_istore_flush (H5D_t *dset, hid_t dxpl_id, unsigned flags);
+H5_DLL herr_t H5D_istore_create(H5F_t *f, hid_t dxpl_id, H5O_layout_t *layout);
+H5_DLL herr_t H5D_istore_dest (H5D_t *dset, hid_t dxpl_id);
+H5_DLL herr_t H5D_istore_allocate (H5D_t *dset, hid_t dxpl_id,
+        hbool_t full_overwrite);
+H5_DLL hsize_t H5D_istore_allocated(H5D_t *dset, hid_t dxpl_id);
+H5_DLL herr_t H5D_istore_prune_by_extent(const H5D_io_info_t *io_info);
+H5_DLL herr_t H5D_istore_initialize_by_extent(H5D_io_info_t *io_info);
+H5_DLL herr_t H5D_istore_update_cache(H5D_t *dset, hid_t dxpl_id);
+H5_DLL herr_t H5D_istore_dump_btree(H5F_t *f, hid_t dxpl_id, FILE *stream, unsigned ndims,
+        haddr_t addr);
+#ifdef H5D_ISTORE_DEBUG
+H5_DLL herr_t H5D_istore_stats (H5D_t *dset, hbool_t headers);
+#endif /* H5D_ISTORE_DEBUG */
+H5_DLL ssize_t H5D_istore_readvv(const H5D_io_info_t *io_info,
+    size_t chunk_max_nseq, size_t *chunk_curr_seq, size_t chunk_len_arr[], hsize_t chunk_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[],
+    void *buf);
+H5_DLL ssize_t H5D_istore_writevv(const H5D_io_info_t *io_info,
+    size_t chunk_max_nseq, size_t *chunk_curr_seq, size_t chunk_len_arr[], hsize_t chunk_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[],
+    const void *buf);
+H5_DLL haddr_t H5D_istore_get_addr(const H5D_io_info_t *io_info,
+    struct H5D_istore_ud1_t *_udata);
+
+/* Functions that operate on external file list (efl) storage */
+H5_DLL ssize_t H5D_efl_readvv(const H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[],
+    void *buf);
+H5_DLL ssize_t H5D_efl_writevv(const H5D_io_info_t *io_info,
+    size_t dset_max_nseq, size_t *dset_curr_seq, size_t dset_len_arr[], hsize_t dset_offset_arr[],
+    size_t mem_max_nseq, size_t *mem_curr_seq, size_t mem_len_arr[], hsize_t mem_offset_arr[],
+    const void *buf);
+
+#ifdef H5_HAVE_PARALLEL
+/* MPI-IO function to read directly from app buffer to file rky980813 */
+H5_DLL herr_t H5D_mpio_select_read(H5D_io_info_t *io_info,
+    size_t nelmts, size_t elmt_size,
+    const struct H5S_t *file_space, const struct H5S_t *mem_space,
+    void *buf/*out*/);
+
+/* MPI-IO function to read , it will select either regular or irregular read */
+H5_DLL herr_t H5D_mpio_select_write(H5D_io_info_t *io_info,
+    size_t nelmts, size_t elmt_size,
+    const struct H5S_t *file_space, const struct H5S_t *mem_space,
+    const void *buf);
+
+/* MPI-IO function to read directly from app buffer to file rky980813 */
+H5_DLL herr_t H5D_mpio_spaces_read(H5D_io_info_t *io_info,
+    size_t nelmts, size_t elmt_size,
+    const struct H5S_t *file_space, const struct H5S_t *mem_space,
+    void *buf/*out*/);
+
+/* MPI-IO function to write directly from app buffer to file rky980813 */
+H5_DLL herr_t H5D_mpio_spaces_write(H5D_io_info_t *io_info,
+    size_t nelmts, size_t elmt_size,
+    const struct H5S_t *file_space, const struct H5S_t *mem_space,
+    const void *buf);
+
+/* MPI-IO function to read directly from app buffer to file rky980813 */
+H5_DLL herr_t H5D_mpio_spaces_span_read(H5D_io_info_t *io_info,
+    size_t nelmts, size_t elmt_size,
+    const struct H5S_t *file_space, const struct H5S_t *mem_space,
+    void *buf/*out*/);
+
+/* MPI-IO function to write directly from app buffer to file rky980813 */
+H5_DLL herr_t H5D_mpio_spaces_span_write(H5D_io_info_t *io_info,
+    size_t nelmts, size_t elmt_size,
+    const struct H5S_t *file_space, const struct H5S_t *mem_space,
+    const void *buf);
+
+/* MPI-IO function to check if a direct I/O transfer is possible between
+ * memory and the file */
+H5_DLL htri_t H5D_mpio_opt_possible(const H5D_io_info_t *io_info, const H5S_t *mem_space,
+    const H5S_t *file_space, const H5T_path_t *tpath);
+#endif /* H5_HAVE_PARALLEL */
+
+/* Testing functions */
+#ifdef H5D_TESTING
+H5_DLL herr_t H5D_layout_version_test(hid_t did, unsigned *version);
+H5_DLL herr_t H5D_layout_contig_size_test(hid_t did, hsize_t *size);
+#endif /* H5D_TESTING */
+
+#endif /*_H5Dpkg_H*/

Added: packages/hdf5/branches/upstream/current/src/H5Dprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Dprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Dprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,241 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains private information about the H5D module
+ */
+#ifndef _H5Dprivate_H
+#define _H5Dprivate_H
+
+/* Include package's public header */
+#include "H5Dpublic.h"
+
+/* Private headers needed by this file */
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5Oprivate.h"		/* Object headers		  	*/
+
+/*
+ * Feature: Define H5D_DEBUG on the compiler command line if you want to
+ *	    debug dataset I/O. NDEBUG must not be defined in order for this
+ *	    to have any effect.
+ */
+#ifdef NDEBUG
+#  undef H5D_DEBUG
+#endif
+
+/* ========  Dataset creation properties ======== */
+/* Definitions for storage layout property */
+#define H5D_CRT_LAYOUT_NAME        "layout"
+#define H5D_CRT_LAYOUT_SIZE        sizeof(H5D_layout_t)
+#define H5D_CRT_LAYOUT_DEF         H5D_CONTIGUOUS
+/* Definitions for chunk dimensionality property */
+#define H5D_CRT_CHUNK_DIM_NAME     "chunk_ndims"
+#define H5D_CRT_CHUNK_DIM_SIZE     sizeof(unsigned)
+#define H5D_CRT_CHUNK_DIM_DEF      1
+/* Definitions for chunk size */
+#define H5D_CRT_CHUNK_SIZE_NAME    "chunk_size"
+#define H5D_CRT_CHUNK_SIZE_SIZE    sizeof(size_t[H5O_LAYOUT_NDIMS])
+#define H5D_CRT_CHUNK_SIZE_DEF     {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,\
+                                   1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
+/* Definitions for fill value.  size=0 means fill value will be 0 as
+ * library default; size=-1 means fill value is undefined. */
+#define H5D_CRT_FILL_VALUE_NAME    "fill_value"
+#define H5D_CRT_FILL_VALUE_SIZE    sizeof(H5O_fill_t)
+#define H5D_CRT_FILL_VALUE_DEF     {NULL, 0, NULL}
+#define H5D_CRT_FILL_VALUE_CMP     H5D_crt_fill_value_cmp
+/* Definitions for space allocation time */
+#define H5D_CRT_ALLOC_TIME_NAME   "alloc_time"
+#define H5D_CRT_ALLOC_TIME_SIZE   sizeof(H5D_alloc_time_t)
+#define H5D_CRT_ALLOC_TIME_DEF    H5D_ALLOC_TIME_LATE
+#define H5D_CRT_ALLOC_TIME_STATE_NAME   "alloc_time_state"
+#define H5D_CRT_ALLOC_TIME_STATE_SIZE   sizeof(unsigned)
+#define H5D_CRT_ALLOC_TIME_STATE_DEF    1
+/* Definitions for time of fill value writing */
+#define H5D_CRT_FILL_TIME_NAME     "fill_time"
+#define H5D_CRT_FILL_TIME_SIZE     sizeof(H5D_fill_time_t)
+#define H5D_CRT_FILL_TIME_DEF      H5D_FILL_TIME_IFSET
+/* Definitions for external file list */
+#define H5D_CRT_EXT_FILE_LIST_NAME "efl"
+#define H5D_CRT_EXT_FILE_LIST_SIZE sizeof(H5O_efl_t)
+#define H5D_CRT_EXT_FILE_LIST_DEF  {HADDR_UNDEF, 0, 0, NULL}
+#define H5D_CRT_EXT_FILE_LIST_CMP  H5D_crt_ext_file_list_cmp
+/* Definitions for data filter pipeline */
+#define H5D_CRT_DATA_PIPELINE_NAME "pline"
+#define H5D_CRT_DATA_PIPELINE_SIZE sizeof(H5O_pline_t)
+#define H5D_CRT_DATA_PIPELINE_DEF  {0, 0, NULL}
+#define H5D_CRT_DATA_PIPELINE_CMP  H5D_crt_data_pipeline_cmp
+
+/* ======== Data transfer properties ======== */
+/* Definitions for maximum temp buffer size property */
+#define H5D_XFER_MAX_TEMP_BUF_NAME       "max_temp_buf"
+#define H5D_XFER_MAX_TEMP_BUF_SIZE       sizeof(size_t)
+#define H5D_XFER_MAX_TEMP_BUF_DEF  (1024*1024)
+/* Definitions for type conversion buffer property */
+#define H5D_XFER_TCONV_BUF_NAME       "tconv_buf"
+#define H5D_XFER_TCONV_BUF_SIZE       sizeof(void *)
+#define H5D_XFER_TCONV_BUF_DEF      NULL
+/* Definitions for background buffer property */
+#define H5D_XFER_BKGR_BUF_NAME       "bkgr_buf"
+#define H5D_XFER_BKGR_BUF_SIZE       sizeof(void *)
+#define H5D_XFER_BKGR_BUF_DEF      NULL
+/* Definitions for background buffer type property */
+#define H5D_XFER_BKGR_BUF_TYPE_NAME       "bkgr_buf_type"
+#define H5D_XFER_BKGR_BUF_TYPE_SIZE       sizeof(H5T_bkg_t)
+#define H5D_XFER_BKGR_BUF_TYPE_DEF      H5T_BKG_NO
+/* Definitions for B-tree node splitting ratio property */
+/* (These default B-tree node splitting ratios are also used for splitting
+ * group's B-trees as well as chunked dataset's B-trees - QAK)
+ */
+#define H5D_XFER_BTREE_SPLIT_RATIO_NAME       "btree_split_ratio"
+#define H5D_XFER_BTREE_SPLIT_RATIO_SIZE       sizeof(double[3])
+#define H5D_XFER_BTREE_SPLIT_RATIO_DEF      {0.1, 0.5, 0.9}
+#ifdef H5_WANT_H5_V1_4_COMPAT
+/* Definitions for hyperslab caching property */
+#define H5D_XFER_HYPER_CACHE_NAME       "hyper_cache"
+#define H5D_XFER_HYPER_CACHE_SIZE       sizeof(unsigned)
+#ifndef H5_HAVE_PARALLEL
+#define H5D_XFER_HYPER_CACHE_DEF  1
+#else
+#define H5D_XFER_HYPER_CACHE_DEF  0
+#endif
+/* Definitions for hyperslab cache limit property */
+#define H5D_XFER_HYPER_CACHE_LIM_NAME       "hyper_cache_limit"
+#define H5D_XFER_HYPER_CACHE_LIM_SIZE       sizeof(unsigned)
+#define H5D_XFER_HYPER_CACHE_LIM_DEF  0
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+/* Definitions for vlen allocation function property */
+#define H5D_XFER_VLEN_ALLOC_NAME       "vlen_alloc"
+#define H5D_XFER_VLEN_ALLOC_SIZE       sizeof(H5MM_allocate_t)
+#define H5D_XFER_VLEN_ALLOC_DEF  NULL
+/* Definitions for vlen allocation info property */
+#define H5D_XFER_VLEN_ALLOC_INFO_NAME       "vlen_alloc_info"
+#define H5D_XFER_VLEN_ALLOC_INFO_SIZE       sizeof(void *)
+#define H5D_XFER_VLEN_ALLOC_INFO_DEF  NULL
+/* Definitions for vlen free function property */
+#define H5D_XFER_VLEN_FREE_NAME       "vlen_free"
+#define H5D_XFER_VLEN_FREE_SIZE       sizeof(H5MM_free_t)
+#define H5D_XFER_VLEN_FREE_DEF  NULL
+/* Definitions for vlen free info property */
+#define H5D_XFER_VLEN_FREE_INFO_NAME       "vlen_free_info"
+#define H5D_XFER_VLEN_FREE_INFO_SIZE       sizeof(void *)
+#define H5D_XFER_VLEN_FREE_INFO_DEF  NULL
+/* Definitions for file driver ID property */
+#define H5D_XFER_VFL_ID_NAME       "vfl_id"
+#define H5D_XFER_VFL_ID_SIZE       sizeof(hid_t)
+#define H5D_XFER_VFL_ID_DEF  H5FD_VFD_DEFAULT
+/* Definitions for file driver info property */
+#define H5D_XFER_VFL_INFO_NAME       "vfl_info"
+#define H5D_XFER_VFL_INFO_SIZE       sizeof(void *)
+#define H5D_XFER_VFL_INFO_DEF  NULL
+/* Definitions for hyperslab vector size property */
+/* (Be cautious about increasing the default size, there are arrays allocated
+ *      on the stack which depend on it - QAK)
+ */
+#define H5D_XFER_HYPER_VECTOR_SIZE_NAME       "vec_size"
+#define H5D_XFER_HYPER_VECTOR_SIZE_SIZE       sizeof(size_t)
+#define H5D_XFER_HYPER_VECTOR_SIZE_DEF        1024
+/* Definitions for I/O transfer mode property */
+#define H5D_XFER_IO_XFER_MODE_NAME       "io_xfer_mode"
+#define H5D_XFER_IO_XFER_MODE_SIZE       sizeof(H5FD_mpio_xfer_t)
+#define H5D_XFER_IO_XFER_MODE_DEF        H5FD_MPIO_INDEPENDENT
+/* Definitions for EDC property */
+#define H5D_XFER_EDC_NAME       "err_detect"
+#define H5D_XFER_EDC_SIZE       sizeof(H5Z_EDC_t)
+#define H5D_XFER_EDC_DEF        H5Z_ENABLE_EDC
+/* Definitions for filter callback function property */
+#define H5D_XFER_FILTER_CB_NAME       "filter_cb"
+#define H5D_XFER_FILTER_CB_SIZE       sizeof(H5Z_cb_t)
+#define H5D_XFER_FILTER_CB_DEF        {NULL,NULL}
+#ifdef H5_HAVE_INSTRUMENTED_LIBRARY
+/* Definitions for collective chunk I/O property */
+#define H5D_XFER_COLL_CHUNK_NAME       "coll_chunk"
+#define H5D_XFER_COLL_CHUNK_SIZE       sizeof(unsigned)
+#define H5D_XFER_COLL_CHUNK_DEF        1
+#endif /* H5_HAVE_INSTRUMENTED_LIBRARY */
+
+/****************************/
+/* Library Private Typedefs */
+/****************************/
+
+/* Typedef for dataset in memory (defined in H5Dpkg.h) */
+typedef struct H5D_t H5D_t;
+
+/* Typedef for dataset storage information */
+typedef struct {
+    hsize_t index;          /* "Index" of chunk in dataset (must be first for TBBT routines) */
+    hsize_t *offset;        /* Chunk's coordinates in elements */
+} H5D_chunk_storage_t;
+
+typedef struct {
+    haddr_t dset_addr;      /* Address of dataset in file */
+    hsize_t dset_size;      /* Total size of dataset in file */
+} H5D_contig_storage_t;
+
+typedef union H5D_storage_t {
+    H5O_efl_t   efl;            /* External file list information for dataset */
+    H5D_chunk_storage_t chunk;  /* Chunk information for dataset */
+    H5D_contig_storage_t contig; /* Contiguous information for dataset */
+} H5D_storage_t;
+
+/* Typedef for cached dataset transfer property list information */
+typedef struct H5D_dxpl_cache_t {
+    size_t max_temp_buf;        /* Maximum temporary buffer size (H5D_XFER_MAX_TEMP_BUF_NAME) */
+    void *tconv_buf;            /* Temporary conversion buffer (H5D_XFER_TCONV_BUF_NAME) */
+    void *bkgr_buf;             /* Background conversion buffer (H5D_XFER_BKGR_BUF_NAME) */
+    H5T_bkg_t bkgr_buf_type;    /* Background buffer type (H5D_XFER_BKGR_BUF_NAME) */
+    H5Z_EDC_t err_detect;       /* Error detection info (H5D_XFER_EDC_NAME) */
+    double btree_split_ratio[3];/* B-tree split ratios (H5D_XFER_BTREE_SPLIT_RATIO_NAME) */
+    size_t vec_size;            /* Size of hyperslab vector (H5D_XFER_HYPER_VECTOR_SIZE_NAME) */
+#ifdef H5_HAVE_PARALLEL
+    H5FD_mpio_xfer_t xfer_mode; /* Parallel transfer for this request (H5D_XFER_IO_XFER_MODE_NAME) */
+#endif /*H5_HAVE_PARALLEL*/
+    H5Z_cb_t filter_cb;         /* Filter callback function (H5D_XFER_FILTER_CB_NAME) */
+} H5D_dxpl_cache_t;
+
+/* Typedef for cached dataset creation property list information */
+typedef struct H5D_dcpl_cache_t {
+    H5O_pline_t pline;          /* I/O pipeline info (H5D_CRT_DATA_PIPELINE_NAME) */
+    H5O_fill_t fill;            /* Fill value info (H5D_CRT_FILL_VALUE_NAME) */
+    H5D_fill_time_t fill_time;  /* Fill time (H5D_CRT_FILL_TIME_NAME) */
+} H5D_dcpl_cache_t;
+
+/* Library-private functions defined in H5D package */
+H5_DLL herr_t H5D_init(void);
+H5_DLL H5D_t *H5D_open(const H5G_entry_t *ent, hid_t dxpl_id);
+H5_DLL herr_t H5D_close(H5D_t *dataset);
+H5_DLL htri_t H5D_isa(H5G_entry_t *ent, hid_t dxpl_id);
+H5_DLL H5G_entry_t *H5D_entof(H5D_t *dataset);
+H5_DLL H5T_t *H5D_typeof(const H5D_t *dset);
+H5_DLL herr_t H5D_crt_copy(hid_t new_plist_t, hid_t old_plist_t,
+                            void *copy_data);
+H5_DLL herr_t H5D_crt_close(hid_t dxpl_id, void *close_data);
+H5_DLL herr_t H5D_xfer_create(hid_t dxpl_id, void *create_data);
+H5_DLL herr_t H5D_xfer_copy(hid_t new_plist_id, hid_t old_plist_id,
+                             void *copy_data);
+H5_DLL herr_t H5D_xfer_close(hid_t dxpl_id, void *close_data);
+H5_DLL herr_t H5D_flush(const H5F_t *f, hid_t dxpl_id, unsigned flags);
+H5_DLL herr_t H5D_get_dxpl_cache(hid_t dxpl_id, H5D_dxpl_cache_t **cache);
+H5_DLL herr_t H5D_get_dxpl_cache_real(hid_t dxpl_id, H5D_dxpl_cache_t *cache);
+
+/* Functions that operate on contiguous storage */
+H5_DLL herr_t H5D_contig_delete(H5F_t *f, hid_t dxpl_id,
+    const H5O_layout_t *layout);
+
+/* Functions that operate on indexed storage */
+H5_DLL herr_t H5D_istore_delete(H5F_t *f, hid_t dxpl_id,
+    const H5O_layout_t *layout);
+H5_DLL herr_t H5D_istore_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream,
+				int indent, int fwidth, unsigned ndims);
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Dpublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Dpublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Dpublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,105 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains public declarations for the H5D module.
+ */
+#ifndef _H5Dpublic_H
+#define _H5Dpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Ipublic.h"
+
+/* Values for the H5D_LAYOUT property */
+typedef enum H5D_layout_t {
+    H5D_LAYOUT_ERROR	= -1,
+
+    H5D_COMPACT		= 0,	/*raw data is very small		     */
+    H5D_CONTIGUOUS	= 1,	/*the default				     */
+    H5D_CHUNKED		= 2,	/*slow and fancy			     */
+    H5D_NLAYOUTS	= 3	/*this one must be last!		     */
+} H5D_layout_t;
+
+/* Values for the space allocation time property */
+typedef enum H5D_alloc_time_t {
+    H5D_ALLOC_TIME_ERROR	=-1,
+    H5D_ALLOC_TIME_DEFAULT  	=0,
+    H5D_ALLOC_TIME_EARLY	=1,
+    H5D_ALLOC_TIME_LATE	=2,
+    H5D_ALLOC_TIME_INCR	=3
+} H5D_alloc_time_t;
+
+/* Values for the status of space allocation */
+typedef enum H5D_space_status_t {
+    H5D_SPACE_STATUS_ERROR	=-1,
+    H5D_SPACE_STATUS_NOT_ALLOCATED	=0,
+    H5D_SPACE_STATUS_PART_ALLOCATED	=1,
+    H5D_SPACE_STATUS_ALLOCATED		=2
+} H5D_space_status_t;
+
+/* Values for time of writing fill value property */
+typedef enum H5D_fill_time_t {
+    H5D_FILL_TIME_ERROR	=-1,
+    H5D_FILL_TIME_ALLOC =0,
+    H5D_FILL_TIME_NEVER	=1,
+    H5D_FILL_TIME_IFSET	=2
+} H5D_fill_time_t;
+
+/* Values for fill value status */
+typedef enum H5D_fill_value_t {
+    H5D_FILL_VALUE_ERROR        =-1,
+    H5D_FILL_VALUE_UNDEFINED    =0,
+    H5D_FILL_VALUE_DEFAULT      =1,
+    H5D_FILL_VALUE_USER_DEFINED =2
+} H5D_fill_value_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Define the operator function pointer for H5Diterate() */
+typedef herr_t (*H5D_operator_t)(void *elem, hid_t type_id, unsigned ndim,
+				 const hsize_t *point, void *operator_data);
+
+H5_DLL hid_t H5Dcreate (hid_t file_id, const char *name, hid_t type_id,
+			 hid_t space_id, hid_t plist_id);
+H5_DLL hid_t H5Dopen (hid_t file_id, const char *name);
+H5_DLL herr_t H5Dclose (hid_t dset_id);
+H5_DLL hid_t H5Dget_space (hid_t dset_id);
+H5_DLL herr_t H5Dget_space_status(hid_t dset_id,
+				H5D_space_status_t *allocation);
+H5_DLL hid_t H5Dget_type (hid_t dset_id);
+H5_DLL hid_t H5Dget_create_plist (hid_t dset_id);
+H5_DLL hsize_t H5Dget_storage_size(hid_t dset_id);
+H5_DLL haddr_t H5Dget_offset(hid_t dset_id);
+H5_DLL herr_t H5Dread (hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
+			hid_t file_space_id, hid_t plist_id, void *buf/*out*/);
+H5_DLL herr_t H5Dwrite (hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id,
+			 hid_t file_space_id, hid_t plist_id, const void *buf);
+H5_DLL herr_t H5Dextend (hid_t dset_id, const hsize_t *size);
+H5_DLL herr_t H5Diterate(void *buf, hid_t type_id, hid_t space_id,
+            H5D_operator_t op, void *operator_data);
+H5_DLL herr_t H5Dvlen_reclaim(hid_t type_id, hid_t space_id, hid_t plist_id, void *buf);
+H5_DLL herr_t H5Dvlen_get_buf_size(hid_t dataset_id, hid_t type_id, hid_t space_id, hsize_t *size);
+H5_DLL herr_t H5Dfill(const void *fill, hid_t fill_type, void *buf,
+        hid_t buf_type, hid_t space);
+H5_DLL herr_t H5Dset_extent (hid_t dset_id, const hsize_t *size);
+H5_DLL herr_t H5Ddebug(hid_t dset_id);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Dselect.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Dselect.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Dselect.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,688 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Quincey Koziol <koziol at ncsa.uiuc.ued>
+ *              Thursday, September 30, 2004
+ *
+ * Purpose:	Dataspace I/O functions.
+ */
+
+#define H5D_PACKAGE		/*suppress error about including H5Dpkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dpkg.h"		/* Datasets				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+
+/* Declare a free list to manage sequences of size_t */
+H5FL_SEQ_DEFINE_STATIC(size_t);
+
+/* Declare a free list to manage sequences of hsize_t */
+H5FL_SEQ_DEFINE_STATIC(hsize_t);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_select_fscat
+ *
+ * Purpose:	Scatters dataset elements from the type conversion buffer BUF
+ *		to the file F where the data points are arranged according to
+ *		the file dataspace FILE_SPACE and stored according to
+ *		LAYOUT and EFL. Each element is ELMT_SIZE bytes.
+ *		The caller is requesting that NELMTS elements are copied.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, June 20, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_select_fscat (H5D_io_info_t *io_info,
+    const H5S_t *space, H5S_sel_iter_t *iter, size_t nelmts,
+    const void *_buf)
+{
+    const uint8_t *buf=_buf;       /* Alias for pointer arithmetic */
+    hsize_t _off[H5D_XFER_HYPER_VECTOR_SIZE_DEF];             /* Array to store sequence offsets */
+    hsize_t *off=NULL;             /* Pointer to sequence offsets */
+    hsize_t mem_off;               /* Offset in memory */
+    size_t mem_curr_seq;           /* "Current sequence" in memory */
+    size_t dset_curr_seq;          /* "Current sequence" in dataset */
+    size_t _len[H5D_XFER_HYPER_VECTOR_SIZE_DEF];              /* Array to store sequence lengths */
+    size_t *len=NULL;              /* Array to store sequence lengths */
+    size_t orig_mem_len, mem_len;  /* Length of sequence in memory */
+    size_t  nseq;                  /* Number of sequences generated */
+    size_t  nelem;                 /* Number of elements used in sequences */
+    herr_t  ret_value=SUCCEED;     /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_select_fscat, FAIL);
+
+    /* Check args */
+    assert (io_info);
+    assert (space);
+    assert (iter);
+    assert (nelmts>0);
+    assert (_buf);
+    assert(TRUE==H5P_isa_class(io_info->dxpl_id,H5P_DATASET_XFER));
+
+    /* Allocate the vector I/O arrays */
+    if(io_info->dxpl_cache->vec_size!=H5D_XFER_HYPER_VECTOR_SIZE_DEF) {
+        if((len = H5FL_SEQ_MALLOC(size_t,io_info->dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate I/O length vector array");
+        if((off = H5FL_SEQ_MALLOC(hsize_t,io_info->dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate I/O offset vector array");
+    } /* end if */
+    else {
+        len=_len;
+        off=_off;
+    } /* end else */
+
+    /* Loop until all elements are written */
+    while(nelmts>0) {
+        /* Get list of sequences for selection to write */
+        if(H5S_SELECT_GET_SEQ_LIST(space,H5S_GET_SEQ_LIST_SORTED,iter,io_info->dxpl_cache->vec_size,nelmts,&nseq,&nelem,off,len)<0)
+            HGOTO_ERROR (H5E_INTERNAL, H5E_UNSUPPORTED, FAIL, "sequence length generation failed");
+
+        /* Reset the current sequence information */
+        mem_curr_seq=dset_curr_seq=0;
+        orig_mem_len=mem_len=nelem*iter->elmt_size;
+        mem_off=0;
+
+        /* Write sequence list out */
+        if ((*io_info->ops.writevv)(io_info, nseq, &dset_curr_seq, len, off, 1, &mem_curr_seq, &mem_len, &mem_off, buf)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_WRITEERROR, FAIL, "write error");
+
+        /* Update buffer */
+        buf += orig_mem_len;
+
+        /* Decrement number of elements left to process */
+        nelmts -= nelem;
+    } /* end while */
+
+done:
+    if(io_info->dxpl_cache->vec_size!=H5D_XFER_HYPER_VECTOR_SIZE_DEF) {
+        if(len!=NULL)
+            H5FL_SEQ_FREE(size_t,len);
+        if(off!=NULL)
+            H5FL_SEQ_FREE(hsize_t,off);
+    } /* end if */
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* H5D_select_fscat() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_select_fgath
+ *
+ * Purpose:	Gathers data points from file F and accumulates them in the
+ *		type conversion buffer BUF.  The LAYOUT argument describes
+ *		how the data is stored on disk and EFL describes how the data
+ *		is organized in external files.  ELMT_SIZE is the size in
+ *		bytes of a datum which this function treats as opaque.
+ *		FILE_SPACE describes the dataspace of the dataset on disk
+ *		and the elements that have been selected for reading (via
+ *		hyperslab, etc).  This function will copy at most NELMTS
+ *		elements.
+ *
+ * Return:	Success:	Number of elements copied.
+ *		Failure:	0
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, June 24, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5D_select_fgath (H5D_io_info_t *io_info,
+    const H5S_t *space, H5S_sel_iter_t *iter, size_t nelmts,
+    void *_buf/*out*/)
+{
+    uint8_t *buf=_buf;          /* Alias for pointer arithmetic */
+    hsize_t _off[H5D_XFER_HYPER_VECTOR_SIZE_DEF];          /* Array to store sequence offsets */
+    hsize_t *off=NULL;          /* Pointer to sequence offsets */
+    hsize_t mem_off;            /* Offset in memory */
+    size_t mem_curr_seq;        /* "Current sequence" in memory */
+    size_t dset_curr_seq;       /* "Current sequence" in dataset */
+    size_t _len[H5D_XFER_HYPER_VECTOR_SIZE_DEF];           /* Array to store sequence lengths */
+    size_t *len=NULL;           /* Pointer to sequence lengths */
+    size_t orig_mem_len, mem_len;       /* Length of sequence in memory */
+    size_t nseq;                /* Number of sequences generated */
+    size_t nelem;               /* Number of elements used in sequences */
+    size_t ret_value=nelmts;    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_select_fgath, 0);
+
+    /* Check args */
+    assert (io_info);
+    assert (io_info->dset);
+    assert (io_info->store);
+    assert (space);
+    assert (iter);
+    assert (nelmts>0);
+    assert (_buf);
+
+    /* Allocate the vector I/O arrays */
+    if(io_info->dxpl_cache->vec_size!=H5D_XFER_HYPER_VECTOR_SIZE_DEF) {
+        if((len = H5FL_SEQ_MALLOC(size_t,io_info->dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "can't allocate I/O length vector array");
+        if((off = H5FL_SEQ_MALLOC(hsize_t,io_info->dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "can't allocate I/O offset vector array");
+    } /* end if */
+    else {
+        len=_len;
+        off=_off;
+    } /* end else */
+
+    /* Loop until all elements are read */
+    while(nelmts>0) {
+        /* Get list of sequences for selection to read */
+        if(H5S_SELECT_GET_SEQ_LIST(space,H5S_GET_SEQ_LIST_SORTED,iter,io_info->dxpl_cache->vec_size,nelmts,&nseq,&nelem,off,len)<0)
+            HGOTO_ERROR (H5E_INTERNAL, H5E_UNSUPPORTED, 0, "sequence length generation failed");
+
+        /* Reset the current sequence information */
+        mem_curr_seq=dset_curr_seq=0;
+        orig_mem_len=mem_len=nelem*iter->elmt_size;
+        mem_off=0;
+
+        /* Read sequence list in */
+        if ((*io_info->ops.readvv)(io_info, nseq, &dset_curr_seq, len, off, 1, &mem_curr_seq, &mem_len, &mem_off, buf)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_READERROR, 0, "read error");
+
+        /* Update buffer */
+        buf += orig_mem_len;
+
+        /* Decrement number of elements left to process */
+        nelmts -= nelem;
+    } /* end while */
+
+done:
+    if(io_info->dxpl_cache->vec_size!=H5D_XFER_HYPER_VECTOR_SIZE_DEF) {
+        if(len!=NULL)
+            H5FL_SEQ_FREE(size_t,len);
+        if(off!=NULL)
+            H5FL_SEQ_FREE(hsize_t,off);
+    } /* end if */
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* H5D_select_fgath() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_select_mscat
+ *
+ * Purpose:	Scatters NELMTS data points from the scatter buffer
+ *		TSCAT_BUF to the application buffer BUF.  Each element is
+ *		ELMT_SIZE bytes and they are organized in application memory
+ *		according to SPACE.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, July 8, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_select_mscat (const void *_tscat_buf, const H5S_t *space,
+    H5S_sel_iter_t *iter, size_t nelmts, const H5D_dxpl_cache_t *dxpl_cache,
+    void *_buf/*out*/)
+{
+    uint8_t *buf=(uint8_t *)_buf;   /* Get local copies for address arithmetic */
+    const uint8_t *tscat_buf=(const uint8_t *)_tscat_buf;
+    hsize_t _off[H5D_XFER_HYPER_VECTOR_SIZE_DEF];          /* Array to store sequence offsets */
+    hsize_t *off=NULL;          /* Pointer to sequence offsets */
+    size_t _len[H5D_XFER_HYPER_VECTOR_SIZE_DEF];           /* Array to store sequence lengths */
+    size_t *len=NULL;           /* Pointer to sequence lengths */
+    size_t curr_len;            /* Length of bytes left to process in sequence */
+    size_t nseq;                /* Number of sequences generated */
+    size_t curr_seq;            /* Current sequence being processed */
+    size_t nelem;               /* Number of elements used in sequences */
+    herr_t ret_value=SUCCEED;   /* Number of elements scattered */
+
+    FUNC_ENTER_NOAPI(H5D_select_mscat, FAIL);
+
+    /* Check args */
+    assert (tscat_buf);
+    assert (space);
+    assert (iter);
+    assert (nelmts>0);
+    assert (buf);
+
+    /* Allocate the vector I/O arrays */
+    if(dxpl_cache->vec_size!=H5D_XFER_HYPER_VECTOR_SIZE_DEF) {
+        if((len = H5FL_SEQ_MALLOC(size_t,dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate I/O length vector array");
+        if((off = H5FL_SEQ_MALLOC(hsize_t,dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate I/O offset vector array");
+    } /* end if */
+    else {
+        len=_len;
+        off=_off;
+    } /* end else */
+
+    /* Loop until all elements are written */
+    while(nelmts>0) {
+        /* Get list of sequences for selection to write */
+        if(H5S_SELECT_GET_SEQ_LIST(space,0,iter,dxpl_cache->vec_size,nelmts,&nseq,&nelem,off,len)<0)
+            HGOTO_ERROR (H5E_INTERNAL, H5E_UNSUPPORTED, 0, "sequence length generation failed");
+
+        /* Loop, while sequences left to process */
+        for(curr_seq=0; curr_seq<nseq; curr_seq++) {
+            /* Get the number of bytes in sequence */
+            curr_len=len[curr_seq];
+
+            HDmemcpy(buf+off[curr_seq],tscat_buf,curr_len);
+
+            /* Advance offset in destination buffer */
+            tscat_buf+=curr_len;
+        } /* end for */
+
+        /* Decrement number of elements left to process */
+        nelmts -= nelem;
+    } /* end while */
+
+done:
+    if(dxpl_cache->vec_size!=H5D_XFER_HYPER_VECTOR_SIZE_DEF) {
+        if(len!=NULL)
+            H5FL_SEQ_FREE(size_t,len);
+        if(off!=NULL)
+            H5FL_SEQ_FREE(hsize_t,off);
+    } /* end if */
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5D_select_mscat() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_select_mgath
+ *
+ * Purpose:	Gathers dataset elements from application memory BUF and
+ *		copies them into the gather buffer TGATH_BUF.
+ *		Each element is ELMT_SIZE bytes and arranged in application
+ *		memory according to SPACE.
+ *		The caller is requesting that at most NELMTS be gathered.
+ *
+ * Return:	Success:	Number of elements copied.
+ *		Failure:	0
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, June 24, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5D_select_mgath (const void *_buf, const H5S_t *space,
+    H5S_sel_iter_t *iter, size_t nelmts, const H5D_dxpl_cache_t *dxpl_cache,
+    void *_tgath_buf/*out*/)
+{
+    const uint8_t *buf=(const uint8_t *)_buf;   /* Get local copies for address arithmetic */
+    uint8_t *tgath_buf=(uint8_t *)_tgath_buf;
+    hsize_t _off[H5D_XFER_HYPER_VECTOR_SIZE_DEF];          /* Array to store sequence offsets */
+    hsize_t *off=NULL;          /* Pointer to sequence offsets */
+    size_t _len[H5D_XFER_HYPER_VECTOR_SIZE_DEF];           /* Array to store sequence lengths */
+    size_t *len=NULL;           /* Pointer to sequence lengths */
+    size_t curr_len;            /* Length of bytes left to process in sequence */
+    size_t nseq;                /* Number of sequences generated */
+    size_t curr_seq;            /* Current sequence being processed */
+    size_t nelem;               /* Number of elements used in sequences */
+    size_t ret_value=nelmts;    /* Number of elements gathered */
+
+    FUNC_ENTER_NOAPI(H5D_select_mgath, 0);
+
+    /* Check args */
+    assert (buf);
+    assert (space);
+    assert (iter);
+    assert (nelmts>0);
+    assert (tgath_buf);
+
+    /* Allocate the vector I/O arrays */
+    if(dxpl_cache->vec_size!=H5D_XFER_HYPER_VECTOR_SIZE_DEF) {
+        if((len = H5FL_SEQ_MALLOC(size_t,dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "can't allocate I/O length vector array");
+        if((off = H5FL_SEQ_MALLOC(hsize_t,dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "can't allocate I/O offset vector array");
+    } /* end if */
+    else {
+        len=_len;
+        off=_off;
+    } /* end else */
+
+    /* Loop until all elements are written */
+    while(nelmts>0) {
+        /* Get list of sequences for selection to write */
+        if(H5S_SELECT_GET_SEQ_LIST(space,0,iter,dxpl_cache->vec_size,nelmts,&nseq,&nelem,off,len)<0)
+            HGOTO_ERROR (H5E_INTERNAL, H5E_UNSUPPORTED, 0, "sequence length generation failed");
+
+        /* Loop, while sequences left to process */
+        for(curr_seq=0; curr_seq<nseq; curr_seq++) {
+            /* Get the number of bytes in sequence */
+            curr_len=len[curr_seq];
+
+            HDmemcpy(tgath_buf,buf+off[curr_seq],curr_len);
+
+            /* Advance offset in gather buffer */
+            tgath_buf+=curr_len;
+        } /* end for */
+
+        /* Decrement number of elements left to process */
+        nelmts -= nelem;
+    } /* end while */
+
+done:
+    if(dxpl_cache->vec_size!=H5D_XFER_HYPER_VECTOR_SIZE_DEF) {
+        if(len!=NULL)
+            H5FL_SEQ_FREE(size_t,len);
+        if(off!=NULL)
+            H5FL_SEQ_FREE(hsize_t,off);
+    } /* end if */
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5D_select_mgath() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_select_read
+ *
+ * Purpose:	Reads directly from file into application memory.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, July 23, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_select_read(H5D_io_info_t *io_info,
+    size_t nelmts, size_t elmt_size,
+    const H5S_t *file_space, const H5S_t *mem_space,
+    void *buf/*out*/)
+{
+    H5S_sel_iter_t mem_iter;    /* Memory selection iteration info */
+    hbool_t mem_iter_init=0;    /* Memory selection iteration info has been initialized */
+    H5S_sel_iter_t file_iter;   /* File selection iteration info */
+    hbool_t file_iter_init=0;	/* File selection iteration info has been initialized */
+    hsize_t _mem_off[H5D_XFER_HYPER_VECTOR_SIZE_DEF];      /* Array to store sequence offsets in memory */
+    hsize_t *mem_off=NULL;      /* Pointer to sequence offsets in memory */
+    hsize_t _file_off[H5D_XFER_HYPER_VECTOR_SIZE_DEF];     /* Array to store sequence offsets in the file */
+    hsize_t *file_off=NULL;     /* Pointer to sequence offsets in the file */
+    size_t _mem_len[H5D_XFER_HYPER_VECTOR_SIZE_DEF];       /* Array to store sequence lengths in memory */
+    size_t *mem_len=NULL;       /* Pointer to sequence lengths in memory */
+    size_t _file_len[H5D_XFER_HYPER_VECTOR_SIZE_DEF];      /* Array to store sequence lengths in the file */
+    size_t *file_len=NULL;      /* Pointer to sequence lengths in the file */
+    size_t mem_nseq;            /* Number of sequences generated in the file */
+    size_t file_nseq;           /* Number of sequences generated in memory */
+    size_t mem_nelem;           /* Number of elements used in memory sequences */
+    size_t file_nelem;          /* Number of elements used in file sequences */
+    size_t curr_mem_seq;        /* Current memory sequence to operate on */
+    size_t curr_file_seq;       /* Current file sequence to operate on */
+    ssize_t tmp_file_len;       /* Temporary number of bytes in file sequence */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_select_read, FAIL);
+
+    /* Check args */
+    assert(io_info);
+    assert(io_info->dset);
+    assert(io_info->dxpl_cache);
+    assert(io_info->store);
+    assert(buf);
+    assert(TRUE==H5P_isa_class(io_info->dxpl_id,H5P_DATASET_XFER));
+
+    /* Initialize file iterator */
+    if (H5S_select_iter_init(&file_iter, file_space, elmt_size)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to initialize selection iterator");
+    file_iter_init=1;	/* File selection iteration info has been initialized */
+
+    /* Initialize memory iterator */
+    if (H5S_select_iter_init(&mem_iter, mem_space, elmt_size)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to initialize selection iterator");
+    mem_iter_init=1;	/* Memory selection iteration info has been initialized */
+
+    /* Allocate the vector I/O arrays */
+    if(io_info->dxpl_cache->vec_size!=H5D_XFER_HYPER_VECTOR_SIZE_DEF) {
+        if((mem_len = H5FL_SEQ_MALLOC(size_t,io_info->dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate I/O length vector array");
+        if((mem_off = H5FL_SEQ_MALLOC(hsize_t,io_info->dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate I/O offset vector array");
+        if((file_len = H5FL_SEQ_MALLOC(size_t,io_info->dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate I/O length vector array");
+        if((file_off = H5FL_SEQ_MALLOC(hsize_t,io_info->dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate I/O offset vector array");
+    } /* end if */
+    else {
+        mem_len=_mem_len;
+        mem_off=_mem_off;
+        file_len=_file_len;
+        file_off=_file_off;
+    } /* end else */
+
+    /* Initialize sequence counts */
+    curr_mem_seq=curr_file_seq=0;
+    mem_nseq=file_nseq=0;
+
+    /* Loop, until all bytes are processed */
+    while(nelmts>0) {
+        /* Check if more file sequences are needed */
+        if(curr_file_seq>=file_nseq) {
+            /* Get sequences for file selection */
+            if(H5S_SELECT_GET_SEQ_LIST(file_space,H5S_GET_SEQ_LIST_SORTED,&file_iter,io_info->dxpl_cache->vec_size,nelmts,&file_nseq,&file_nelem,file_off,file_len)<0)
+                HGOTO_ERROR (H5E_INTERNAL, H5E_UNSUPPORTED, FAIL, "sequence length generation failed");
+
+            /* Start at the beginning of the sequences again */
+            curr_file_seq=0;
+        } /* end if */
+
+        /* Check if more memory sequences are needed */
+        if(curr_mem_seq>=mem_nseq) {
+            /* Get sequences for memory selection */
+            if(H5S_SELECT_GET_SEQ_LIST(mem_space,0,&mem_iter,io_info->dxpl_cache->vec_size,nelmts,&mem_nseq,&mem_nelem,mem_off,mem_len)<0)
+                HGOTO_ERROR (H5E_INTERNAL, H5E_UNSUPPORTED, FAIL, "sequence length generation failed");
+
+            /* Start at the beginning of the sequences again */
+            curr_mem_seq=0;
+        } /* end if */
+
+        /* Read file sequences into current memory sequence */
+        if ((tmp_file_len=(*io_info->ops.readvv)(io_info,
+                file_nseq, &curr_file_seq, file_len, file_off,
+                mem_nseq, &curr_mem_seq, mem_len, mem_off,
+                buf))<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_READERROR, FAIL, "read error");
+
+        /* Decrement number of elements left to process */
+        assert((tmp_file_len%elmt_size)==0);
+        nelmts-=(tmp_file_len/elmt_size);
+    } /* end while */
+
+done:
+    /* Release file selection iterator */
+    if(file_iter_init) {
+        if (H5S_SELECT_ITER_RELEASE(&file_iter)<0)
+            HDONE_ERROR (H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release selection iterator");
+    } /* end if */
+
+    /* Release memory selection iterator */
+    if(mem_iter_init) {
+        if (H5S_SELECT_ITER_RELEASE(&mem_iter)<0)
+            HDONE_ERROR (H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release selection iterator");
+    } /* end if */
+
+    /* Free vector arrays */
+    if(io_info->dxpl_cache->vec_size!=H5D_XFER_HYPER_VECTOR_SIZE_DEF) {
+        if(file_len!=NULL)
+            H5FL_SEQ_FREE(size_t,file_len);
+        if(file_off!=NULL)
+            H5FL_SEQ_FREE(hsize_t,file_off);
+        if(mem_len!=NULL)
+            H5FL_SEQ_FREE(size_t,mem_len);
+        if(mem_off!=NULL)
+            H5FL_SEQ_FREE(hsize_t,mem_off);
+    } /* end if */
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5D_select_read() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5D_select_write
+ *
+ * Purpose:	Writes directly from application memory into a file
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, July 23, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5D_select_write(H5D_io_info_t *io_info,
+    size_t nelmts, size_t elmt_size,
+    const H5S_t *file_space, const H5S_t *mem_space,
+    const void *buf/*out*/)
+{
+    H5S_sel_iter_t mem_iter;    /* Memory selection iteration info */
+    hbool_t mem_iter_init=0;    /* Memory selection iteration info has been initialized */
+    H5S_sel_iter_t file_iter;   /* File selection iteration info */
+    hbool_t file_iter_init=0;	/* File selection iteration info has been initialized */
+    hsize_t _mem_off[H5D_XFER_HYPER_VECTOR_SIZE_DEF];      /* Array to store sequence offsets in memory */
+    hsize_t *mem_off=NULL;      /* Pointer to sequence offsets in memory */
+    hsize_t _file_off[H5D_XFER_HYPER_VECTOR_SIZE_DEF];     /* Array to store sequence offsets in the file */
+    hsize_t *file_off=NULL;     /* Pointer to sequence offsets in the file */
+    size_t _mem_len[H5D_XFER_HYPER_VECTOR_SIZE_DEF];       /* Array to store sequence lengths in memory */
+    size_t *mem_len=NULL;       /* Pointer to sequence lengths in memory */
+    size_t _file_len[H5D_XFER_HYPER_VECTOR_SIZE_DEF];      /* Array to store sequence lengths in the file */
+    size_t *file_len=NULL;      /* Pointer to sequence lengths in the file */
+    size_t mem_nseq;            /* Number of sequences generated in the file */
+    size_t file_nseq;           /* Number of sequences generated in memory */
+    size_t mem_nelem;           /* Number of elements used in memory sequences */
+    size_t file_nelem;          /* Number of elements used in file sequences */
+    size_t curr_mem_seq;        /* Current memory sequence to operate on */
+    size_t curr_file_seq;       /* Current file sequence to operate on */
+    ssize_t tmp_file_len;       /* Temporary number of bytes in file sequence */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5D_select_write, FAIL);
+
+    /* Check args */
+    assert(io_info);
+    assert(io_info->dset);
+    assert(io_info->store);
+    assert(TRUE==H5P_isa_class(io_info->dxpl_id,H5P_DATASET_XFER));
+    assert(buf);
+
+    /* Allocate the vector I/O arrays */
+    if(io_info->dxpl_cache->vec_size!=H5D_XFER_HYPER_VECTOR_SIZE_DEF) {
+        if((mem_len = H5FL_SEQ_MALLOC(size_t,io_info->dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate I/O length vector array");
+        if((mem_off = H5FL_SEQ_MALLOC(hsize_t,io_info->dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate I/O offset vector array");
+        if((file_len = H5FL_SEQ_MALLOC(size_t,io_info->dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate I/O length vector array");
+        if((file_off = H5FL_SEQ_MALLOC(hsize_t,io_info->dxpl_cache->vec_size))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate I/O offset vector array");
+    } /* end if */
+    else {
+        mem_len=_mem_len;
+        mem_off=_mem_off;
+        file_len=_file_len;
+        file_off=_file_off;
+    } /* end else */
+
+    /* Initialize file iterator */
+    if (H5S_select_iter_init(&file_iter, file_space, elmt_size)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to initialize selection iterator");
+    file_iter_init=1;	/* File selection iteration info has been initialized */
+
+    /* Initialize memory iterator */
+    if (H5S_select_iter_init(&mem_iter, mem_space, elmt_size)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to initialize selection iterator");
+    mem_iter_init=1;	/* Memory selection iteration info has been initialized */
+
+    /* Initialize sequence counts */
+    curr_mem_seq=curr_file_seq=0;
+    mem_nseq=file_nseq=0;
+
+    /* Loop, until all bytes are processed */
+    while(nelmts>0) {
+        /* Check if more file sequences are needed */
+        if(curr_file_seq>=file_nseq) {
+            /* Get sequences for file selection */
+            if(H5S_SELECT_GET_SEQ_LIST(file_space,H5S_GET_SEQ_LIST_SORTED,&file_iter,io_info->dxpl_cache->vec_size,nelmts,&file_nseq,&file_nelem,file_off,file_len)<0)
+                HGOTO_ERROR (H5E_INTERNAL, H5E_UNSUPPORTED, FAIL, "sequence length generation failed");
+
+            /* Start at the beginning of the sequences again */
+            curr_file_seq=0;
+        } /* end if */
+
+        /* Check if more memory sequences are needed */
+        if(curr_mem_seq>=mem_nseq) {
+            /* Get sequences for memory selection */
+            if(H5S_SELECT_GET_SEQ_LIST(mem_space,0,&mem_iter,io_info->dxpl_cache->vec_size,nelmts,&mem_nseq,&mem_nelem,mem_off,mem_len)<0)
+                HGOTO_ERROR (H5E_INTERNAL, H5E_UNSUPPORTED, FAIL, "sequence length generation failed");
+
+            /* Start at the beginning of the sequences again */
+            curr_mem_seq=0;
+        } /* end if */
+
+        /* Write memory sequences into file sequences */
+        if ((tmp_file_len=(*io_info->ops.writevv)(io_info,
+                file_nseq, &curr_file_seq, file_len, file_off,
+                mem_nseq, &curr_mem_seq, mem_len, mem_off,
+                buf))<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_WRITEERROR, FAIL, "write error");
+
+        /* Decrement number of elements left to process */
+        assert((tmp_file_len%elmt_size)==0);
+        nelmts-=(tmp_file_len/elmt_size);
+    } /* end while */
+
+done:
+    /* Release file selection iterator */
+    if(file_iter_init) {
+        if (H5S_SELECT_ITER_RELEASE(&file_iter)<0)
+            HDONE_ERROR (H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release selection iterator");
+    } /* end if */
+
+    /* Release memory selection iterator */
+    if(mem_iter_init) {
+        if (H5S_SELECT_ITER_RELEASE(&mem_iter)<0)
+            HDONE_ERROR (H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release selection iterator");
+    } /* end if */
+
+    /* Free vector arrays */
+    if(io_info->dxpl_cache->vec_size!=H5D_XFER_HYPER_VECTOR_SIZE_DEF) {
+        if(file_len!=NULL)
+            H5FL_SEQ_FREE(size_t,file_len);
+        if(file_off!=NULL)
+            H5FL_SEQ_FREE(hsize_t,file_off);
+        if(mem_len!=NULL)
+            H5FL_SEQ_FREE(size_t,mem_len);
+        if(mem_off!=NULL)
+            H5FL_SEQ_FREE(hsize_t,mem_off);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5D_select_write() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Dtest.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Dtest.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Dtest.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,109 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Thusdayr, May 27, 2004
+ *
+ * Purpose:	Dataset testing functions.
+ */
+
+#define H5D_PACKAGE		/*suppress error about including H5Dpkg	  */
+#define H5D_TESTING		/*suppress warning about H5D testing funcs*/
+
+
+#include "H5private.h"		/* Generic Functions			  */
+#include "H5Dpkg.h"		/* Datasets 				*/
+#include "H5Eprivate.h"		/* Error handling		  */
+#include "H5Iprivate.h"		/* ID Functions		  */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5D_layout_version_test
+ PURPOSE
+    Determine the storage layout version for a dataset's layout information
+ USAGE
+    herr_t H5D_layout_version_test(did, version)
+        hid_t did;              IN: Dataset to query
+        unsigned *version;      OUT: Pointer to location to place version info
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Checks the version of the storage layout information for a dataset.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    DO NOT USE THIS FUNCTION FOR ANYTHING EXCEPT TESTING
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5D_layout_version_test(hid_t did, unsigned *version)
+{
+    H5D_t	*dset;          /* Pointer to dataset to query */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_NOAPI(H5D_layout_version_test, FAIL);
+
+    /* Check args */
+    if (NULL==(dset=H5I_object_verify(did, H5I_DATASET)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+
+    if(version)
+        *version=dset->shared->layout.version;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5D_layout_version_test() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5D_layout_contig_size_test
+ PURPOSE
+    Determine the size of a contiguous layout for a dataset's layout information
+ USAGE
+    herr_t H5D_layout_contig_size_test(did, size)
+        hid_t did;              IN: Dataset to query
+        hsize_t *size;          OUT: Pointer to location to place size info
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Checks the size of a contiguous dataset's storage.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    DO NOT USE THIS FUNCTION FOR ANYTHING EXCEPT TESTING
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5D_layout_contig_size_test(hid_t did, hsize_t *size)
+{
+    H5D_t	*dset;          /* Pointer to dataset to query */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_NOAPI(H5D_layout_contig_size_test, FAIL);
+
+    /* Check args */
+    if (NULL==(dset=H5I_object_verify(did, H5I_DATASET)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
+
+    if(size) {
+        assert(dset->shared->layout.type==H5D_CONTIGUOUS);
+        *size=dset->shared->layout.u.contig.size;
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5D_layout_contig_size_test() */
+

Added: packages/hdf5/branches/upstream/current/src/H5E.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5E.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5E.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,901 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Purpose:	Provides error handling in the form of a stack.  The
+ *		FUNC_ENTER() macro clears the error stack whenever an API
+ *		function is entered.  When an error is detected, an entry is
+ *		pushed onto the stack.  As the functions unwind additional
+ *		entries are pushed onto the stack. The API function will
+ *		return some indication that an error occurred and the
+ *		application can print the error stack.
+ *
+ *		Certain API functions in the H5E package (such as H5Eprint())
+ *		do not clear the error stack.  Otherwise, any function which
+ *		doesn't have an underscore immediately after the package name
+ *		will clear the error stack.  For instance, H5Fopen() clears
+ *		the error stack while H5F_open() does not.
+ *
+ *		An error stack has a fixed maximum size.  If this size is
+ *		exceeded then the stack will be truncated and only the
+ *		inner-most functions will have entries on the stack. This is
+ *		expected to be a rare condition.
+ *
+ *		Each thread has its own error stack, but since
+ *		multi-threading has not been added to the library yet, this
+ *		package maintains a single error stack. The error stack is
+ *		statically allocated to reduce the complexity of handling
+ *		errors within the H5E package.
+ *
+ */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5E_init_interface
+
+
+#include "H5private.h"		/* Generic Functions			  */
+#include "H5Iprivate.h"		/* IDs                                    */
+#include "H5Eprivate.h"		/* Private error routines		  */
+#include "H5MMprivate.h"	/* Memory management			  */
+
+static const H5E_major_mesg_t H5E_major_mesg_g[] = {
+    {H5E_NONE_MAJOR,	"No error"},
+    {H5E_ARGS,		"Function arguments"},
+    {H5E_RESOURCE,	"Resource unavailable"},
+    {H5E_INTERNAL,	"Internal HDF5 error"},
+    {H5E_FILE,		"File interface"},
+    {H5E_IO,		"Low-level I/O layer"},
+    {H5E_FUNC,		"Function entry/exit"},
+    {H5E_ATOM,		"Atom layer"},
+    {H5E_CACHE,		"Meta data cache layer"},
+    {H5E_BTREE,		"B-tree layer"},
+    {H5E_SYM,		"Symbol table layer"},
+    {H5E_HEAP,		"Heap layer"},
+    {H5E_OHDR,		"Object header layer"},
+    {H5E_DATATYPE,	"Datatype interface"},
+    {H5E_DATASPACE,	"Dataspace interface"},
+    {H5E_DATASET,	"Dataset interface"},
+    {H5E_STORAGE,	"Data storage layer"},
+    {H5E_PLIST,		"Property list interface"},
+    {H5E_ATTR, 		"Attribute layer"},
+    {H5E_PLINE,		"Data filters layer"},
+    {H5E_EFL, 		"External file list"},
+    {H5E_REFERENCE,	"References layer"},
+    {H5E_VFL,		"Virtual File Layer"},
+    {H5E_TBBT,		"Threaded, Balanced, Binary Trees"},
+    {H5E_TST,		"Ternary Search Trees"},
+    {H5E_RS,		"Reference Counted Strings"},
+    {H5E_ERROR,		"Error API"},
+    {H5E_SLIST,		"Skip Lists"},
+};
+
+static const H5E_minor_mesg_t H5E_minor_mesg_g[] = {
+    {H5E_NONE_MINOR, 	"No error"},
+
+    /* Argument errors */
+    {H5E_UNINITIALIZED, "Information is uninitialized"},
+    {H5E_UNSUPPORTED, 	"Feature is unsupported"},
+    {H5E_BADTYPE, 	"Inappropriate type"},
+    {H5E_BADRANGE, 	"Out of range"},
+    {H5E_BADVALUE, 	"Bad value"},
+
+    /* Resource errors */
+    {H5E_NOSPACE, 	"No space available for allocation"},
+    {H5E_CANTCOPY, 	"Unable to copy object"},
+    {H5E_CANTFREE, 	"Unable to free object"},
+    {H5E_ALREADYEXISTS, "Object already exists"},
+    {H5E_CANTLOCK, 	"Unable to lock object"},
+    {H5E_CANTUNLOCK, 	"Unable to unlock object"},
+    {H5E_CANTGC, 	"Unable to garbage collect"},
+    {H5E_CANTGETSIZE, 	"Unable to compute size"},
+
+    /* File accessability errors */
+    {H5E_FILEEXISTS, 	"File already exists"},
+    {H5E_FILEOPEN, 	"File already open"},
+    {H5E_CANTCREATE, 	"Unable to create file"},
+    {H5E_CANTOPENFILE, 	"Unable to open file"},
+    {H5E_CANTCLOSEFILE, 	"Unable to close file"},
+    {H5E_NOTHDF5, 	"Not an HDF5 file"},
+    {H5E_BADFILE, 	"Bad file ID accessed"},
+    {H5E_TRUNCATED, 	"File has been truncated"},
+    {H5E_MOUNT,		"File mount error"},
+
+    /* Generic low-level file I/O errors */
+    {H5E_SEEKERROR,	"Seek failed"},
+    {H5E_READERROR, 	"Read failed"},
+    {H5E_WRITEERROR, 	"Write failed"},
+    {H5E_CLOSEERROR, 	"Close failed"},
+    {H5E_OVERFLOW, 	"Address overflowed"},
+    {H5E_FCNTL,         "File control (fcntl) failed"},
+
+    /* Function entry/exit interface errors */
+    {H5E_CANTINIT, 	"Unable to initialize object"},
+    {H5E_ALREADYINIT, 	"Object already initialized"},
+    {H5E_CANTRELEASE, 	"Unable to release object"},
+
+    /* Object atom related errors */
+    {H5E_BADATOM, 	"Unable to find atom information (already closed?)"},
+    {H5E_BADGROUP, 	"Unable to find ID group information"},
+    {H5E_CANTREGISTER, 	"Unable to register new atom"},
+    {H5E_CANTINC,      	"Unable to increment reference count"},
+    {H5E_CANTDEC,      	"Unable to decrement reference count"},
+    {H5E_NOIDS,      	"Out of IDs for group"},
+
+    /* Cache related errors */
+    {H5E_CANTFLUSH, 	"Unable to flush data from cache"},
+    {H5E_CANTSERIALIZE, "Unable to serialize data from cache"},
+    {H5E_CANTLOAD, 	"Unable to load metadata into cache"},
+    {H5E_PROTECT, 	"Protected metadata error"},
+    {H5E_NOTCACHED, 	"Metadata not currently cached"},
+    {H5E_SYSTEM, 	"Internal error detected"},
+    {H5E_CANTINS, 	"Unable to insert metadata into cache"},
+    {H5E_CANTRENAME, 	"Unable to rename metadata"},
+    {H5E_CANTPROTECT, 	"Unable to protect metadata"},
+    {H5E_CANTUNPROTECT,	"Unable to unprotect metadata"},
+
+    /* B-tree related errors */
+    {H5E_NOTFOUND, 	"Object not found"},
+    {H5E_EXISTS, 	"Object already exists"},
+    {H5E_CANTENCODE, 	"Unable to encode value"},
+    {H5E_CANTDECODE, 	"Unable to decode value"},
+    {H5E_CANTSPLIT, 	"Unable to split node"},
+    {H5E_CANTINSERT, 	"Unable to insert object"},
+    {H5E_CANTLIST, 	"Unable to list node"},
+
+    /* Object header related errors */
+    {H5E_LINKCOUNT, 	"Bad object header link count"},
+    {H5E_VERSION, 	"Wrong version number"},
+    {H5E_ALIGNMENT, 	"Alignment error"},
+    {H5E_BADMESG, 	"Unrecognized message"},
+    {H5E_CANTDELETE, 	"Can't delete message"},
+    {H5E_BADITER, 	"Iteration failed"},
+
+    /* Group related errors */
+    {H5E_CANTOPENOBJ, 	"Can't open object"},
+    {H5E_CANTCLOSEOBJ, 	"Can't close object"},
+    {H5E_COMPLEN, 	"Name component is too long"},
+    {H5E_LINK, 		"Link count failure"},
+    {H5E_SLINK,		"Symbolic link error"},
+    {H5E_PATH,		"Problem with path to object"},
+
+    /* Datatype conversion errors */
+    {H5E_CANTCONVERT,	"Can't convert datatypes"},
+    {H5E_BADSIZE,	"Bad size for object"},
+
+    /* Dataspace errors */
+    {H5E_CANTCLIP,	"Can't clip hyperslab region"},
+    {H5E_CANTCOUNT,	"Can't count elements"},
+    {H5E_CANTSELECT,    "Can't select hyperslab"},
+    {H5E_CANTNEXT,      "Can't move to next iterator location"},
+    {H5E_BADSELECT,     "Invalid selection"},
+    {H5E_CANTCOMPARE,   "Can't compare objects"},
+
+    /* Property list errors */
+    {H5E_CANTGET,	"Can't get value"},
+    {H5E_CANTSET,	"Can't set value"},
+    {H5E_DUPCLASS,	"Duplicate class name in parent class"},
+
+    /* Parallel MPI errors */
+    {H5E_MPI,		"Some MPI function failed"},
+    {H5E_MPIERRSTR,     "MPI Error String"},
+
+    /* Heap errors */
+    {H5E_CANTRESTORE,	"Can't restore condition"},
+
+    /* TBBT errors */
+    {H5E_CANTMAKETREE,	"Can't create TBBT tree"},
+
+    /* I/O pipeline errors */
+    {H5E_NOFILTER,      "Requested filter is not available"},
+    {H5E_CALLBACK,      "Callback failed"},
+    {H5E_CANAPPLY,      "Error from filter \"can apply\" callback"},
+    {H5E_SETLOCAL,      "Error from filter \"set local\" callback"},
+    {H5E_NOENCODER,     "Filter present, but encoder not enabled"},
+
+    /* I/O pipeline errors */
+    {H5E_SYSERRSTR,     "System error message"}
+};
+
+/* Interface initialization? */
+static int interface_initialize_g = 0;
+#define INTERFACE_INIT H5E_init_interface
+
+#ifdef H5_HAVE_THREADSAFE
+/*
+ * The per-thread error stack. pthread_once() initializes a special
+ * key that will be used by all threads to create a stack specific to
+ * each thread individually. The association of stacks to threads will
+ * be handled by the pthread library.
+ *
+ * In order for this macro to work, H5E_get_my_stack() must be preceeded
+ * by "H5E_t *estack =".
+ */
+static H5E_t *    H5E_get_stack(void);
+#define H5E_get_my_stack()  H5E_get_stack()
+#else /* H5_HAVE_THREADSAFE */
+/*
+ * The current error stack.
+ */
+H5E_t		H5E_stack_g[1];
+#define H5E_get_my_stack() (H5E_stack_g+0)
+#endif /* H5_HAVE_THREADSAFE */
+
+
+#ifdef H5_HAVE_PARALLEL
+/*
+ * variables used for MPI error reporting
+ */
+char	H5E_mpi_error_str[MPI_MAX_ERROR_STRING];
+int	H5E_mpi_error_str_len;
+#endif
+
+/* Static function declarations */
+static herr_t H5E_walk (H5E_direction_t direction, H5E_walk_t func, void *client_data);
+static herr_t H5E_walk_cb (int n, H5E_error_t *err_desc, void *client_data);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5E_init_interface
+ *
+ * Purpose:	Initialize the H5E interface. `stderr' is an extern or
+ *		function on some systems so we can't initialize
+ *		H5E_auto_data_g statically.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, June 11, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5E_init_interface (void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5E_init_interface)
+
+#ifndef H5_HAVE_THREADSAFE
+    H5E_stack_g[0].nused = 0;
+    H5E_stack_g[0].auto_func = (H5E_auto_t)H5Eprint;
+    H5E_stack_g[0].auto_data = stderr;
+#endif /* H5_HAVE_THREADSAFE */
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}
+
+
+#ifdef H5_HAVE_THREADSAFE
+/*-------------------------------------------------------------------------
+ * Function:	H5E_get_stack
+ *
+ * Purpose:	Support function for H5E_get_my_stack() to initialize and
+ *              acquire per-thread error stack.
+ *
+ * Return:	Success:	error stack (H5E_t *)
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Chee Wai LEE
+ *              April 24, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5E_t *
+H5E_get_stack(void)
+{
+    H5E_t *estack;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5E_get_stack)
+
+    estack = pthread_getspecific(H5TS_errstk_key_g);
+
+    if (!estack) {
+        /* no associated value with current thread - create one */
+        estack = (H5E_t *)H5MM_malloc(sizeof(H5E_t));
+        assert(estack);
+
+        /* Set thread specific information */
+        estack->nused = 0;
+        estack->auto_func = (H5E_auto_t)H5Eprint;
+        estack->auto_data = stderr;
+
+        pthread_setspecific(H5TS_errstk_key_g, (void *)estack);
+    }
+
+    FUNC_LEAVE_NOAPI(estack)
+}
+#endif  /* H5_HAVE_THREADSAFE */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Eset_auto
+ *
+ * Purpose:	Turns on or off automatic printing of errors.  When turned on
+ *		(non-null FUNC pointer) any API function which returns an
+ *		error indication will first call FUNC passing it CLIENT_DATA
+ *		as an argument.
+ *
+ *		The default values before this function is called are
+ *		H5Eprint() with client data being the standard error stream,
+ *		stderr.
+ *
+ *		Automatic stack traversal is always in the H5E_WALK_DOWNWARD
+ *		direction.
+ *
+ * See Also:	H5Ewalk()
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, February 27, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Eset_auto(H5E_auto_t func, void *client_data)
+{
+    H5E_t   *estack;            /* Error stack to operate on */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_API(H5Eset_auto, FAIL)
+    H5TRACE2("e","xx",func,client_data);
+
+    /* Get the thread-specific error stack */
+    if((estack = H5E_get_my_stack())==NULL) /*lint !e506 !e774 Make lint 'constant value Boolean' in non-threaded case */
+        HGOTO_ERROR(H5E_ERROR, H5E_CANTGET, FAIL, "can't get current error stack")
+
+    /* Set the automatic error reporting info */
+    estack->auto_func = func;
+    estack->auto_data = client_data;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Eget_auto
+ *
+ * Purpose:	Returns the current settings for the automatic error stack
+ *		traversal function and its data.  Either (or both) arguments
+ *		may be null in which case the value is not returned.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Saturday, February 28, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Eget_auto(H5E_auto_t *func, void **client_data)
+{
+    H5E_t   *estack;            /* Error stack to operate on */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_API(H5Eget_auto, FAIL)
+    H5TRACE2("e","*xx",func,client_data);
+
+    /* Get the thread-specific error stack */
+    if((estack = H5E_get_my_stack())==NULL) /*lint !e506 !e774 Make lint 'constant value Boolean' in non-threaded case */
+        HGOTO_ERROR(H5E_ERROR, H5E_CANTGET, FAIL, "can't get current error stack")
+
+    /* Set the automatic error reporting info */
+    if (func) *func = estack->auto_func;
+    if (client_data) *client_data = estack->auto_data;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Eclear
+ *
+ * Purpose:	Clears the error stack for the current thread.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, February 27, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Eclear(void)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_API(H5Eclear, FAIL)
+    H5TRACE0("e","");
+    /* FUNC_ENTER() does all the work */
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Eprint
+ *
+ * Purpose:	Prints the error stack in some default way.  This is just a
+ *		convenience function for H5Ewalk() with a function that
+ *		prints error messages.  Users are encouraged to write there
+ *		own more specific error handlers.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, February 27, 1998
+ *
+ * Modifications:
+ *	Albert Cheng, 2000/12/02
+ *	Show MPI process rank id if applicable.
+ *	Albert Cheng, 2001/07/14
+ *	Show HDF5 library version information string too.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Eprint(FILE *stream)
+{
+    H5E_t	*estack = H5E_get_my_stack ();
+    herr_t	ret_value = FAIL;
+
+    /* Don't clear the error stack! :-) */
+    FUNC_ENTER_API_NOCLEAR(H5Eprint, FAIL)
+    /*NO TRACE*/
+
+    if (!stream) stream = stderr;
+    fprintf (stream, "HDF5-DIAG: Error detected in %s ", H5_lib_vers_info_g);
+    /* try show the process or thread id in multiple processes cases*/
+#ifdef H5_HAVE_PARALLEL
+    {   int mpi_rank, mpi_initialized;
+	MPI_Initialized(&mpi_initialized);
+	if (mpi_initialized){
+	    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+	    fprintf (stream, "MPI-process %d.", mpi_rank);
+	}else
+	    fprintf (stream, "thread 0.");
+    }
+#elif defined(H5_HAVE_THREADSAFE)
+    fprintf (stream, "thread %lu.", (unsigned long)pthread_self());
+#else
+    fprintf (stream, "thread 0.");
+#endif
+    if (estack && estack->nused>0) fprintf (stream, "  Back trace follows.");
+    HDfputc ('\n', stream);
+
+    ret_value = H5E_walk (H5E_WALK_DOWNWARD, H5E_walk_cb, (void*)stream);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Ewalk
+ *
+ * Purpose:	Walks the error stack for the current thread and calls some
+ *		function for each error along the way.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, February 27, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Ewalk(H5E_direction_t direction, H5E_walk_t func, void *client_data)
+{
+    herr_t	ret_value;
+
+    /* Don't clear the error stack! :-) */
+    FUNC_ENTER_API_NOCLEAR(H5Ewalk, FAIL)
+    H5TRACE3("e","Edxx",direction,func,client_data);
+
+    ret_value = H5E_walk (direction, func, client_data);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5E_walk_cb
+ *
+ * Purpose:	This is a default error stack traversal callback function
+ *		that prints error messages to the specified output stream.
+ *		It is not meant to be called directly but rather as an
+ *		argument to the H5Ewalk() function.  This function is called
+ *		also by H5Eprint().  Application writers are encouraged to
+ *		use this function as a model for their own error stack
+ *		walking functions.
+ *
+ *		N is a counter for how many times this function has been
+ *		called for this particular traversal of the stack.  It always
+ *		begins at zero for the first error on the stack (either the
+ *		top or bottom error, or even both, depending on the traversal
+ *		direction and the size of the stack).
+ *
+ *		ERR_DESC is an error description.  It contains all the
+ *		information about a particular error.
+ *
+ *		CLIENT_DATA is the same pointer that was passed as the
+ *		CLIENT_DATA argument of H5Ewalk().  It is expected to be a
+ *		file pointer (or stderr if null).
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, December 12, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5E_walk_cb(int n, H5E_error_t *err_desc, void *client_data)
+{
+    FILE		*stream = (FILE *)client_data;
+    const char		*maj_str = NULL;
+    const char		*min_str = NULL;
+    const int		indent = 2;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5E_walk_cb)
+    /*NO TRACE*/
+
+    /* Check arguments */
+    assert (err_desc);
+    if (!client_data) client_data = stderr;
+
+    /* Get descriptions for the major and minor error numbers */
+    maj_str = H5Eget_major (err_desc->maj_num);
+    min_str = H5Eget_minor (err_desc->min_num);
+
+    /* Print error message */
+    fprintf (stream, "%*s#%03d: %s line %u in %s(): %s\n",
+	     indent, "", n, err_desc->file_name, err_desc->line,
+	     err_desc->func_name, err_desc->desc);
+    fprintf (stream, "%*smajor(%02d): %s\n",
+	     indent*2, "", err_desc->maj_num, maj_str);
+    fprintf (stream, "%*sminor(%02d): %s\n",
+	     indent*2, "", err_desc->min_num, min_str);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Eget_major
+ *
+ * Purpose:	Given a major error number return a constant character string
+ *		that describes the error.
+ *
+ * Return:	Success:	Ptr to a character string.
+ *
+ *		Failure:	Ptr to "Invalid major error number"
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, February 27, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+const char *
+H5Eget_major (H5E_major_t n)
+{
+    unsigned	i;
+    const char *ret_value="Invalid major error number";
+
+    /*
+     * WARNING: Do not call the FUNC_ENTER() or FUNC_LEAVE() macros since
+     *		they might interact badly with the error stack.  We are
+     *		probably calling this function during an error stack
+     *		traversal and adding/removing entries as the result of an
+     *		error would most likely mess things up.
+     */
+    FUNC_ENTER_API_NOINIT(H5Eget_major)
+
+    for (i=0; i<NELMTS (H5E_major_mesg_g); i++)
+	if (H5E_major_mesg_g[i].error_code==n)
+	    HGOTO_DONE(H5E_major_mesg_g[i].str)
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Eget_minor
+ *
+ * Purpose:	Given a minor error number return a constant character string
+ *		that describes the error.
+ *
+ * Return:	Success:	Ptr to a character string.
+ *
+ *		Failure:	Ptr to "Invalid minor error number"
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, February 27, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+const char *
+H5Eget_minor (H5E_minor_t n)
+{
+    unsigned	i;
+    const char *ret_value="Invalid minor error number";
+
+    /*
+     * WARNING: Do not call the FUNC_ENTER() or FUNC_LEAVE() macros since
+     *		they might interact badly with the error stack.  We are
+     *		probably calling this function during an error stack
+     *		traversal and adding/removing entries as the result of an
+     *		error would most likely mess things up.
+     */
+    FUNC_ENTER_API_NOINIT(H5Eget_minor)
+
+    for (i=0; i<NELMTS (H5E_minor_mesg_g); i++)
+	if (H5E_minor_mesg_g[i].error_code==n)
+	    HGOTO_DONE(H5E_minor_mesg_g[i].str)
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5E_push
+ *
+ * Purpose:	Pushes a new error record onto error stack for the current
+ *		thread.  The error has major and minor numbers MAJ_NUM and
+ *		MIN_NUM, the name of a function where the error was detected,
+ *		the name of the file where the error was detected, the
+ *		line within that file, and an error description string.  The
+ *		function name, file name, and error description strings must
+ *		be statically allocated (the FUNC_ENTER() macro takes care of
+ *		the function name and file name automatically, but the
+ *		programmer is responsible for the description string).
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, December 12, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5E_push(H5E_major_t maj_num, H5E_minor_t min_num, const char *function_name,
+	 const char *file_name, unsigned line, const char *desc)
+{
+    H5E_t	*estack = H5E_get_my_stack ();
+
+    /*
+     * WARNING: We cannot call HERROR() from within this function or else we
+     *		could enter infinite recursion.  Furthermore, we also cannot
+     *		call any other HDF5 macro or function which might call
+     *		HERROR().  HERROR() is called by HRETURN_ERROR() which could
+     *		be called by FUNC_ENTER().
+     */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5E_push)
+
+    /*
+     * Don't fail if arguments are bad.  Instead, substitute some default
+     * value.
+     */
+    if (!function_name) function_name = "Unknown_Function";
+    if (!file_name) file_name = "Unknown_File";
+    if (!desc) desc = "No description given";
+
+    /*
+     * Push the error if there's room.  Otherwise just forget it.
+     */
+    assert (estack);
+    if (estack->nused<H5E_NSLOTS) {
+	estack->slot[estack->nused].maj_num = maj_num;
+	estack->slot[estack->nused].min_num = min_num;
+	estack->slot[estack->nused].func_name = function_name;
+	estack->slot[estack->nused].file_name = file_name;
+	estack->slot[estack->nused].line = line;
+	estack->slot[estack->nused].desc = desc;
+	estack->nused++;
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Epush
+ *
+ * Purpose:	Pushes a new error record onto error stack for the current
+ *		thread.  The error has major and minor numbers MAJ_NUM and
+ *		MIN_NUM, the name of a function where the error was detected,
+ *		the name of the file where the error was detected, the
+ *		line within that file, and an error description string.  The
+ *		function name, file name, and error description strings must
+ *		be statically allocated.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Monday, October 18, 1999
+ *
+ * Notes: 	Basically a public API wrapper around the H5E_push function.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Epush(const char *file, const char *func, unsigned line, H5E_major_t maj,
+	H5E_minor_t min, const char *str)
+{
+    herr_t	ret_value;
+
+    FUNC_ENTER_API(H5Epush, FAIL)
+    H5TRACE6("e","ssIuEjEns",file,func,line,maj,min,str);
+
+    ret_value = H5E_push(maj, min, func, file, line, str);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5E_clear
+ *
+ * Purpose:	Clears the error stack for the current thread.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, February 27, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5E_clear(void)
+{
+    H5E_t	*estack = H5E_get_my_stack ();
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5E_clear, FAIL)
+
+    if (estack) estack->nused = 0;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5E_walk
+ *
+ * Purpose:	Walks the error stack, calling the specified function for
+ *		each error on the stack.  The DIRECTION argument determines
+ *		whether the stack is walked from the inside out or the
+ *		outside in.  The value H5E_WALK_UPWARD means begin with the
+ *		most specific error and end at the API; H5E_WALK_DOWNWARD
+ *		means to start at the API and end at the inner-most function
+ *		where the error was first detected.
+ *
+ *		The function pointed to by FUNC will be called for each error
+ *		in the error stack. It's arguments will include an index
+ *		number (beginning at zero regardless of stack traversal
+ *		direction), an error stack entry, and the CLIENT_DATA pointer
+ *		passed to H5E_print.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, December 12, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5E_walk (H5E_direction_t direction, H5E_walk_t func, void *client_data)
+{
+    H5E_t	*estack = H5E_get_my_stack ();
+    int		i;
+    herr_t	status;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5E_walk, FAIL)
+
+    /* check args, but rather than failing use some default value */
+    if (direction!=H5E_WALK_UPWARD && direction!=H5E_WALK_DOWNWARD) {
+	direction = H5E_WALK_UPWARD;
+    }
+
+    /* walk the stack */
+    assert (estack);
+    if (func && H5E_WALK_UPWARD==direction) {
+	for (i=0, status=SUCCEED; i<estack->nused && status>=0; i++) {
+	    status = (func)(i, estack->slot+i, client_data);
+	}
+    } else if (func && H5E_WALK_DOWNWARD==direction) {
+	for (i=estack->nused-1, status=SUCCEED; i>=0 && status>=0; --i) {
+	    status = (func)(estack->nused-(i+1), estack->slot+i, client_data);
+	}
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5E_dump_api_stack
+ *
+ * Purpose:     Private function to dump the error stack during an error in
+ *              an API function if a callback function is defined for the
+ *              current error stack.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *              Thursday, January 20, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5E_dump_api_stack(int is_api)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5E_dump_api_stack, FAIL)
+
+    /* Only dump the error stack during an API call */
+    if(is_api) {
+        H5E_t *estack = H5E_get_my_stack();
+
+        assert(estack);
+        if (estack->auto_func)
+            (void)((estack->auto_func)(estack->auto_data));
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+

Added: packages/hdf5/branches/upstream/current/src/H5Eprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Eprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Eprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,149 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  Header file for error values, etc.
+ */
+#ifndef _H5Eprivate_H
+#define _H5Eprivate_H
+
+#include "H5Epublic.h"
+
+/* Private headers needed by this file */
+#include "H5private.h"
+
+#define H5E_NSLOTS	32	/*number of slots in an error stack	     */
+
+/*
+ * The list of error messages in the system is kept as an array of
+ * error_code/message pairs, one for major error numbers and another for
+ * minor error numbers.
+ */
+typedef struct H5E_major_mesg_t {
+    H5E_major_t error_code;
+    const char	*str;
+} H5E_major_mesg_t;
+
+typedef struct H5E_minor_mesg_t {
+    H5E_minor_t error_code;
+    const char	*str;
+} H5E_minor_mesg_t;
+
+/* An error stack */
+typedef struct H5E_t {
+    int	nused;			/*num slots currently used in stack  */
+    H5E_error_t slot[H5E_NSLOTS];	/*array of error records	     */
+    H5E_auto_t auto_func;       /* Function for 'automatic' error reporting */
+    void *auto_data;            /* Callback data for 'automatic' error reporting */
+} H5E_t;
+
+/*
+ * HERROR macro, used to facilitate error reporting between a FUNC_ENTER()
+ * and a FUNC_LEAVE() within a function body.  The arguments are the major
+ * error number, the minor error number, and a description of the error.
+ */
+#define HERROR(maj, min, str) H5E_push(maj, min, FUNC, __FILE__, __LINE__, str)
+
+/*
+ * HCOMMON_ERROR macro, used by HDONE_ERROR and HGOTO_ERROR
+ * (Shouldn't need to be used outside this header file)
+ */
+#define HCOMMON_ERROR(maj, min, str)  				              \
+   HERROR (maj, min, str);						      \
+   (void)H5E_dump_api_stack((int)H5_IS_API(FUNC));
+
+/*
+ * HDONE_ERROR macro, used to facilitate error reporting between a
+ * FUNC_ENTER() and a FUNC_LEAVE() within a function body, but _AFTER_ the
+ * "done:" label.  The arguments are
+ * the major error number, the minor error number, a return value, and a
+ * description of the error.
+ * (This macro can also be used to push an error and set the return value
+ *      without jumping to any labels)
+ */
+#define HDONE_ERROR(maj, min, ret_val, str) {				      \
+   HCOMMON_ERROR (maj, min, str);					      \
+   ret_value = ret_val;                                                       \
+}
+
+/*
+ * HGOTO_ERROR macro, used to facilitate error reporting between a
+ * FUNC_ENTER() and a FUNC_LEAVE() within a function body.  The arguments are
+ * the major error number, the minor error number, the return value, and an
+ * error string.  The return value is assigned to a variable `ret_value' and
+ * control branches to the `done' label.
+ */
+#define HGOTO_ERROR(maj, min, ret_val, str) {				      \
+   HCOMMON_ERROR (maj, min, str);					      \
+   HGOTO_DONE (ret_val)						              \
+}
+
+/*
+ * HGOTO_DONE macro, used to facilitate normal return between a FUNC_ENTER()
+ * and a FUNC_LEAVE() within a function body. The argument is the return
+ * value which is assigned to the `ret_value' variable.	 Control branches to
+ * the `done' label.
+ */
+#define HGOTO_DONE(ret_val) {ret_value = ret_val; goto done;}
+
+/* Library-private functions defined in H5E package */
+H5_DLL herr_t H5E_push (H5E_major_t maj_num, H5E_minor_t min_num,
+			 const char *func_name, const char *file_name,
+			 unsigned line, const char *desc);
+H5_DLL herr_t H5E_clear (void);
+H5_DLL herr_t H5E_dump_api_stack (int is_api);
+
+/*
+ * Macros handling system error messages as described in C standard.
+ * These macros assume errnum is a valid system error code.
+ */
+
+/* Retrieve the error code description string and push it onto the error
+ * stack.
+ */
+#define	HSYS_ERROR(errnum){						      \
+    HERROR(H5E_INTERNAL, H5E_SYSERRSTR, HDstrerror(errnum));                  \
+}
+#define	HSYS_DONE_ERROR(majorcode, minorcode, retcode, str){				      \
+    HSYS_ERROR(errno);							      \
+    HDONE_ERROR(majorcode, minorcode, retcode, str);			      \
+}
+#define	HSYS_GOTO_ERROR(majorcode, minorcode, retcode, str){				      \
+    HSYS_ERROR(errno);							      \
+    HGOTO_ERROR(majorcode, minorcode, retcode, str);			      \
+}
+
+#ifdef H5_HAVE_PARALLEL
+/*
+ * MPI error handling macros.
+ */
+
+extern	char	H5E_mpi_error_str[MPI_MAX_ERROR_STRING];
+extern	int	H5E_mpi_error_str_len;
+
+#define	HMPI_ERROR(mpierr){						      \
+    MPI_Error_string(mpierr, H5E_mpi_error_str, &H5E_mpi_error_str_len);      \
+    HERROR(H5E_INTERNAL, H5E_MPIERRSTR, H5E_mpi_error_str);                   \
+}
+#define	HMPI_DONE_ERROR(retcode, str, mpierr){				      \
+    HMPI_ERROR(mpierr);							      \
+    HDONE_ERROR(H5E_INTERNAL, H5E_MPI, retcode, str);			      \
+}
+#define	HMPI_GOTO_ERROR(retcode, str, mpierr){				      \
+    HMPI_ERROR(mpierr);							      \
+    HGOTO_ERROR(H5E_INTERNAL, H5E_MPI, retcode, str);			      \
+}
+#endif
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Epublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Epublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Epublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,276 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains public declarations for the H5E module.
+ */
+#ifndef _H5Epublic_H
+#define _H5Epublic_H
+
+#include <stdio.h>              /*FILE arg of H5Eprint()                     */
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Ipublic.h"
+
+/*
+ * One often needs to temporarily disable automatic error reporting when
+ * trying something that's likely or expected to fail.  For instance, to
+ * determine if an object exists one can call H5Gget_objinfo() which will fail if
+ * the object doesn't exist.  The code to try can be nested between calls to
+ * H5Eget_auto() and H5Eset_auto(), but it's easier just to use this macro
+ * like:
+ * 	H5E_BEGIN_TRY {
+ *	    ...stuff here that's likely to fail...
+ *      } H5E_END_TRY;
+ *
+ * Warning: don't break, return, or longjmp() from the body of the loop or
+ *	    the error reporting won't be properly restored!
+ */
+#define H5E_BEGIN_TRY {							      \
+    H5E_auto_t H5E_saved_efunc;						      \
+    void *H5E_saved_edata;						      \
+    H5Eget_auto (&H5E_saved_efunc, &H5E_saved_edata);			      \
+    H5Eset_auto (NULL, NULL);
+
+#define H5E_END_TRY							      \
+    H5Eset_auto (H5E_saved_efunc, H5E_saved_edata);			      \
+}
+
+/*
+ * Public API Convenience Macros for Error reporting - Documented
+ */
+/* Use the Standard C __FILE__ & __LINE__ macros instead of typing them in */
+#define H5Epush_sim(func,maj,min,str) H5Epush(__FILE__,func,__LINE__,maj,min,str)
+
+/*
+ * Public API Convenience Macros for Error reporting - Undocumented
+ */
+/* Use the Standard C __FILE__ & __LINE__ macros instead of typing them in */
+/*  And return after pushing error onto stack */
+#define H5Epush_ret(func,maj,min,str,ret) {         \
+    H5Epush(__FILE__,func,__LINE__,maj,min,str);    \
+    return(ret);                                    \
+}
+
+/* Use the Standard C __FILE__ & __LINE__ macros instead of typing them in */
+/*  And goto a label after pushing error onto stack */
+#define H5Epush_goto(func,maj,min,str,label) {      \
+    H5Epush(__FILE__,func,__LINE__,maj,min,str);    \
+    goto label;                                   \
+}
+
+/*
+ * Declare an enumerated type which holds all the valid major HDF error codes.
+ */
+typedef enum H5E_major_t {
+    H5E_NONE_MAJOR       = 0,   /*special zero, no error                     */
+    H5E_ARGS,                   /*invalid arguments to routine               */
+    H5E_RESOURCE,               /*resource unavailable                       */
+    H5E_INTERNAL,               /* Internal error (too specific to document
+                                 * in detail)
+                                 */
+    H5E_FILE,                   /*file Accessability                         */
+    H5E_IO,                     /*Low-level I/O                              */
+    H5E_FUNC,                   /*function Entry/Exit                        */
+    H5E_ATOM,                   /*object Atom                                */
+    H5E_CACHE,                  /*object Cache                               */
+    H5E_BTREE,                  /*B-Tree Node                                */
+    H5E_SYM,                    /*symbol Table                               */
+    H5E_HEAP,                   /*Heap                                       */
+    H5E_OHDR,                   /*object Header                              */
+    H5E_DATATYPE,               /*Datatype                                   */
+    H5E_DATASPACE,              /*Dataspace                                  */
+    H5E_DATASET,                /*Dataset                                    */
+    H5E_STORAGE,                /*data storage                               */
+    H5E_PLIST,                  /*Property lists                             */
+    H5E_ATTR,                   /*Attribute                                  */
+    H5E_PLINE,                  /*Data filters                               */
+    H5E_EFL,                    /*External file list                         */
+    H5E_REFERENCE,              /*References                                 */
+    H5E_VFL,			/*Virtual File Layer			     */
+    H5E_TBBT, 		        /*Threaded, Balanced, Binary Trees           */
+    H5E_TST, 		        /*Ternary Search Trees                       */
+    H5E_RS,  		        /*Reference Counted Strings                  */
+    H5E_ERROR,  		/*Error API                                  */
+    H5E_SLIST  		        /*Skip Lists                                 */
+} H5E_major_t;
+
+/* Declare an enumerated type which holds all the valid minor HDF error codes */
+typedef enum H5E_minor_t {
+    H5E_NONE_MINOR       = 0,   /*special zero, no error                     */
+
+    /* Argument errors */
+    H5E_UNINITIALIZED,          /*information is unitialized                 */
+    H5E_UNSUPPORTED,            /*feature is unsupported                     */
+    H5E_BADTYPE,                /*incorrect type found                       */
+    H5E_BADRANGE,               /*argument out of range                      */
+    H5E_BADVALUE,               /*bad value for argument                     */
+
+    /* Resource errors */
+    H5E_NOSPACE,                /*no space available for allocation          */
+    H5E_CANTCOPY,               /*unable to copy object                      */
+    H5E_CANTFREE,               /*unable to free object                      */
+    H5E_ALREADYEXISTS,          /*Object already exists */
+    H5E_CANTLOCK,               /*Unable to lock object                      */
+    H5E_CANTUNLOCK,             /*Unable to unlock object                    */
+    H5E_CANTGC,                 /*Unable to garbage collect                  */
+    H5E_CANTGETSIZE,            /*Unable to compute size                     */
+
+    /* File accessability errors */
+    H5E_FILEEXISTS,             /*file already exists                        */
+    H5E_FILEOPEN,               /*file already open                          */
+    H5E_CANTCREATE,             /*Can't create file                          */
+    H5E_CANTOPENFILE,           /*Can't open file                            */
+    H5E_CANTCLOSEFILE,          /*Can't close file			     */
+    H5E_NOTHDF5,                /*not an HDF5 format file                    */
+    H5E_BADFILE,                /*bad file ID accessed                       */
+    H5E_TRUNCATED,              /*file has been truncated                    */
+    H5E_MOUNT,			/*file mount error			     */
+
+    /* Generic low-level file I/O errors */
+    H5E_SEEKERROR,              /*seek failed                                */
+    H5E_READERROR,              /*read failed                                */
+    H5E_WRITEERROR,             /*write failed                               */
+    H5E_CLOSEERROR,             /*close failed                               */
+    H5E_OVERFLOW,		/*address overflowed			     */
+    H5E_FCNTL,                  /*file fcntl failed                          */
+
+    /* Function entry/exit interface errors */
+    H5E_CANTINIT,               /*Can't initialize object                    */
+    H5E_ALREADYINIT,            /*object already initialized                 */
+    H5E_CANTRELEASE,            /*Can't release object                       */
+
+    /* Object atom related errors */
+    H5E_BADATOM,                /*Can't find atom information                */
+    H5E_BADGROUP,               /*Can't find group information               */
+    H5E_CANTREGISTER,           /*Can't register new atom                    */
+    H5E_CANTINC,                /*Can't increment reference count            */
+    H5E_CANTDEC,                /*Can't decrement reference count            */
+    H5E_NOIDS,                  /*Out of IDs for group                       */
+
+    /* Cache related errors */
+    H5E_CANTFLUSH,              /*Can't flush object from cache              */
+    H5E_CANTSERIALIZE,          /*Unable to serialize data from cache        */
+    H5E_CANTLOAD,               /*Can't load object into cache               */
+    H5E_PROTECT,                /*protected object error                     */
+    H5E_NOTCACHED,              /*object not currently cached                */
+    H5E_SYSTEM,                 /*Internal error detected                    */
+    H5E_CANTINS,                /*Unable to insert metadata into cache       */
+    H5E_CANTRENAME,             /*Unable to rename metadata                  */
+    H5E_CANTPROTECT,            /*Unable to protect metadata                 */
+    H5E_CANTUNPROTECT,          /*Unable to unprotect metadata               */
+
+    /* B-tree related errors */
+    H5E_NOTFOUND,               /*object not found                           */
+    H5E_EXISTS,                 /*object already exists                      */
+    H5E_CANTENCODE,             /*Can't encode value                         */
+    H5E_CANTDECODE,             /*Can't decode value                         */
+    H5E_CANTSPLIT,              /*Can't split node                           */
+    H5E_CANTINSERT,             /*Can't insert object                        */
+    H5E_CANTLIST,               /*Can't list node                            */
+
+    /* Object header related errors */
+    H5E_LINKCOUNT,              /*bad object header link count               */
+    H5E_VERSION,                /*wrong version number                       */
+    H5E_ALIGNMENT,              /*alignment error                            */
+    H5E_BADMESG,                /*unrecognized message                       */
+    H5E_CANTDELETE,             /* Can't delete message                      */
+    H5E_BADITER,                /* Iteration failed                          */
+
+    /* Group related errors */
+    H5E_CANTOPENOBJ,            /*Can't open object                          */
+    H5E_CANTCLOSEOBJ,           /*Can't close object                         */
+    H5E_COMPLEN,                /*name component is too long                 */
+    H5E_LINK,                   /*link count failure                         */
+    H5E_SLINK,			/*symbolic link error			     */
+    H5E_PATH,			/*Problem with path to object		     */
+
+    /* Datatype conversion errors */
+    H5E_CANTCONVERT,            /*Can't convert datatypes                    */
+    H5E_BADSIZE,                /*Bad size for object                        */
+
+    /* Dataspace errors */
+    H5E_CANTCLIP,               /*Can't clip hyperslab region                */
+    H5E_CANTCOUNT,              /*Can't count elements                       */
+    H5E_CANTSELECT,             /*Can't select hyperslab                     */
+    H5E_CANTNEXT,               /*Can't move to next iterator location       */
+    H5E_BADSELECT,              /*Invalid selection                          */
+    H5E_CANTCOMPARE,            /*Can't compare objects                      */
+
+    /* Property list errors */
+    H5E_CANTGET,                /*Can't get value                            */
+    H5E_CANTSET,                /*Can't set value                            */
+    H5E_DUPCLASS,               /*Duplicate class name in parent class       */
+
+    /* Parallel errors */
+    H5E_MPI,			/*some MPI function failed		     */
+    H5E_MPIERRSTR,		/*MPI Error String 			     */
+
+    /* Heap errors */
+    H5E_CANTRESTORE,		/*Can't restore condition                    */
+
+    /* TBBT errors */
+    H5E_CANTMAKETREE,		/*Can't create TBBT tree                     */
+
+    /* I/O pipeline errors */
+    H5E_NOFILTER,               /*requested filter is not available          */
+    H5E_CALLBACK,               /*callback failed                            */
+    H5E_CANAPPLY,               /*error from filter "can apply" callback     */
+    H5E_SETLOCAL,               /*error from filter "set local" callback     */
+    H5E_NOENCODER,              /* Filter present, but encoding disabled     */
+
+    /* System level errors */
+    H5E_SYSERRSTR               /* System error message			     */
+} H5E_minor_t;
+
+/* Information about an error */
+typedef struct H5E_error_t {
+    H5E_major_t maj_num;		/*major error number		     */
+    H5E_minor_t min_num;		/*minor error number		     */
+    const char	*func_name;   		/*function in which error occurred   */
+    const char	*file_name;		/*file in which error occurred       */
+    unsigned	line;			/*line in file where error occurs    */
+    const char	*desc;			/*optional supplied description      */
+} H5E_error_t;
+
+/* Error stack traversal direction */
+typedef enum H5E_direction_t {
+    H5E_WALK_UPWARD	= 0,		/*begin deep, end at API function    */
+    H5E_WALK_DOWNWARD	= 1		/*begin at API function, end deep    */
+} H5E_direction_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Error stack traversal callback function */
+typedef herr_t (*H5E_walk_t)(int n, H5E_error_t *err_desc, void *client_data);
+typedef herr_t (*H5E_auto_t)(void *client_data);
+
+H5_DLL herr_t H5Eset_auto (H5E_auto_t func, void *client_data);
+H5_DLL herr_t H5Eget_auto (H5E_auto_t *func, void **client_data);
+H5_DLL herr_t H5Eclear (void);
+H5_DLL herr_t H5Eprint (FILE *stream);
+H5_DLL herr_t H5Ewalk (H5E_direction_t direction, H5E_walk_t func,
+			void *client_data);
+H5_DLL const char *H5Eget_major (H5E_major_t major_number);
+H5_DLL const char *H5Eget_minor (H5E_minor_t minor_number);
+H5_DLL herr_t H5Epush(const char *file, const char *func,
+            unsigned line, H5E_major_t maj, H5E_minor_t min, const char *str);
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5F.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5F.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5F.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3616 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5F_init_interface
+
+
+/* Packages needed by this file... */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Aprivate.h"		/* Attributes				*/
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5Dprivate.h"		/* Datasets				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"             /* File access				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FLprivate.h"	/* Free lists                           */
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Gprivate.h"		/* Groups				*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"		/* Property lists			*/
+#include "H5Tprivate.h"		/* Datatypes				*/
+
+/* Predefined file drivers */
+#include "H5FDcore.h"		/*temporary in-memory files		*/
+#include "H5FDfamily.h"		/*family of files			*/
+#include "H5FDgass.h"           /*GASS I/O                              */
+#include "H5FDlog.h"            /* sec2 driver with logging, for debugging */
+#include "H5FDmpi.h"            /* MPI-based file drivers		*/
+#include "H5FDmulti.h"		/*multiple files partitioned by mem usage */
+#include "H5FDsec2.h"		/*Posix unbuffered I/O			*/
+#include "H5FDsrb.h"            /*SRB I/O                               */
+#include "H5FDstdio.h"		/* Standard C buffered I/O		*/
+#include "H5FDstream.h"         /*in-memory files streamed via sockets  */
+
+/* Struct only used by functions H5F_get_objects and H5F_get_objects_cb */
+typedef struct H5F_olist_t {
+    H5I_type_t obj_type;        /* Type of object to look for */
+    hid_t      *obj_id_list;    /* Pointer to the list of open IDs to return */
+    unsigned   *obj_id_count;   /* Number of open IDs */
+    struct {
+        hbool_t local;          /* Set flag for "local" file searches */
+        union {
+            H5F_file_t *shared; /* Pointer to shared file to look inside */
+            const H5F_t *file;  /* Pointer to file to look inside */
+        } ptr;
+    } file_info;
+    unsigned   list_index;      /* Current index in open ID array */
+    int   max_index;            /* Maximum # of IDs to put into array */
+} H5F_olist_t;
+
+/* PRIVATE PROTOTYPES */
+#ifdef NOT_YET
+static int H5F_flush_all_cb(void *f, hid_t fid, void *_invalidate);
+#endif /* NOT_YET */
+static unsigned H5F_get_objects(const H5F_t *f, unsigned types, int max_objs, hid_t *obj_id_list);
+static int H5F_get_objects_cb(void *obj_ptr, hid_t obj_id, void *key);
+static herr_t H5F_get_vfd_handle(const H5F_t *file, hid_t fapl, void** file_handle);
+static H5F_t *H5F_new(H5F_file_t *shared, hid_t fcpl_id, hid_t fapl_id);
+static herr_t H5F_dest(H5F_t *f, hid_t dxpl_id);
+static H5F_t *H5F_open(const char *name, unsigned flags, hid_t fcpl_id,
+			hid_t fapl_id, hid_t dxpl_id);
+static herr_t H5F_flush(H5F_t *f, hid_t dxpl_id, H5F_scope_t scope, unsigned flags);
+static herr_t H5F_close(H5F_t *f);
+
+/* Declare a free list to manage the H5F_t struct */
+H5FL_DEFINE_STATIC(H5F_t);
+
+/* Declare a free list to manage the H5F_file_t struct */
+H5FL_DEFINE_STATIC(H5F_file_t);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_init
+ *
+ * Purpose:	Initialize the interface from some other layer.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, December 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_init(void)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5F_init, FAIL)
+    /* FUNC_ENTER() does all the work */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_init_interface
+ *
+ * Purpose:	Initialize interface-specific information.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, November 20, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 4 Aug 1997
+ *	Changed pablo mask from H5_mask to H5F_mask for the FUNC_LEAVE call.
+ *	It was already H5F_mask for the PABLO_TRACE_ON call.
+ *
+ *  	Kim Yates, 1998-08-16
+ *	Added .disp, .btype, .ftype to H5F_access_t.
+ *
+ * 	Robb Matzke, 1999-02-19
+ *	Added initialization for the H5I_FILE_CLOSING ID group.
+ *
+ *      Raymond Lu, April 10, 2000
+ *      Put SRB into the 'Register predefined file drivers' list.
+ *
+ *      Thomas Radke, 2000-09-12
+ *      Put Stream VFD into the 'Register predefined file drivers' list.
+ *
+ *      Raymond Lu, 2001-10-14
+ *	Change File creation property list to generic property list mechanism.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5F_init_interface(void)
+{
+    size_t      nprops;                 /* Number of properties */
+    herr_t	ret_value = SUCCEED;
+
+    /* File creation property class variables.  In sequence, they are
+     * - File create property list class to modify
+     * - Default value for size of file user block
+     * - Default value for 1/2 rank for symbol table leaf nodes
+     * - Default value for 1/2 rank for btree internal nodes
+     * - Default value for byte number in an address
+     * - Default value for byte number for object size
+     * - Default value for version number of superblock
+     * - Default value for free-space version number
+     * - Default value for object directory version number
+     * - Default value for share-header format version
+     */
+    H5P_genclass_t  *crt_pclass;
+    hsize_t         userblock_size      = H5F_CRT_USER_BLOCK_DEF;
+    unsigned        sym_leaf_k          = H5F_CRT_SYM_LEAF_DEF;
+    unsigned        btree_k[H5B_NUM_BTREE_ID] = H5F_CRT_BTREE_RANK_DEF;
+    size_t          sizeof_addr         = H5F_CRT_ADDR_BYTE_NUM_DEF;
+    size_t          sizeof_size         = H5F_CRT_OBJ_BYTE_NUM_DEF;
+    unsigned        superblock_ver       = H5F_CRT_SUPER_VERS_DEF;
+    unsigned        freespace_ver       = H5F_CRT_FREESPACE_VERS_DEF;
+    unsigned        objectdir_ver       = H5F_CRT_OBJ_DIR_VERS_DEF;
+    unsigned        sharedheader_ver    = H5F_CRT_SHARE_HEAD_VERS_DEF;
+    /* File access property class variables.  In sequence, they are
+     * - File access property class to modify
+     * - Size of meta data cache(elements)
+     * - Size of raw data chunk cache(elements)
+     * - Size of raw data chunk cache(bytes)
+     * - Preemption for reading chunks
+     * - Threshold for alignment
+     * - Alignment
+     * - Minimum metadata allocation block size
+     * - Maximum sieve buffer size
+     * - Garbage-collect reference
+     * - File driver ID
+     * - File driver info
+     */
+    H5P_genclass_t  *acs_pclass;
+    int             mdc_nelmts          = H5F_ACS_META_CACHE_SIZE_DEF;
+    size_t          rdcc_nelmts         = H5F_ACS_DATA_CACHE_ELMT_SIZE_DEF;
+    size_t          rdcc_nbytes         = H5F_ACS_DATA_CACHE_BYTE_SIZE_DEF;
+    double          rdcc_w0             = H5F_ACS_PREEMPT_READ_CHUNKS_DEF;
+    hsize_t         threshold           = H5F_ACS_ALIGN_THRHD_DEF;
+    hsize_t         alignment           = H5F_ACS_ALIGN_DEF;
+    hsize_t         meta_block_size     = H5F_ACS_META_BLOCK_SIZE_DEF;
+    size_t          sieve_buf_size      = H5F_ACS_SIEVE_BUF_SIZE_DEF;
+    hsize_t         sdata_block_size    = H5F_ACS_SDATA_BLOCK_SIZE_DEF;
+    unsigned        gc_ref              = H5F_ACS_GARBG_COLCT_REF_DEF;
+    hid_t           driver_id           = H5F_ACS_FILE_DRV_ID_DEF;
+    void            *driver_info        = H5F_ACS_FILE_DRV_INFO_DEF;
+    H5F_close_degree_t close_degree     = H5F_CLOSE_DEGREE_DEF;
+    hsize_t         family_offset       = H5F_ACS_FAMILY_OFFSET_DEF;
+    H5FD_mem_t      mem_type            = H5F_ACS_MULTI_TYPE_DEF;
+
+    /* File mount property class variable.
+     * - Mount property class to modify
+     * - whether absolute symlinks is local to file
+     */
+    H5P_genclass_t  *mnt_pclass;
+    hbool_t 	    local		= H5F_MNT_SYM_LOCAL_DEF;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_init_interface)
+
+    /*
+     * Initialize the atom group for the file IDs. There are two groups:
+     * the H5I_FILE group contains all the ID's for files which are currently
+     * open at the public API level while the H5I_FILE_CLOSING group contains
+     * ID's for files for which the application has called H5Fclose() but
+     * which are pending completion because there are object headers still
+     * open within the file.
+     */
+    if (H5I_init_group(H5I_FILE, (size_t)H5I_FILEID_HASHSIZE, 0, (H5I_free_t)H5F_close)<0)
+        HGOTO_ERROR (H5E_FILE, H5E_CANTINIT, FAIL, "unable to initialize interface")
+
+    /* ========== File Creation Property Class Initialization ============*/
+    assert(H5P_CLS_FILE_CREATE_g!=-1);
+
+    /* Get the pointer to file creation class */
+    if(NULL == (crt_pclass = H5I_object(H5P_CLS_FILE_CREATE_g)))
+         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list class")
+
+    /* Get the number of properties in the class */
+    if(H5P_get_nprops_pclass(crt_pclass,&nprops)<0)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "can't query number of properties")
+
+    /* Assume that if there are properties in the class, they are the default ones */
+    if(nprops==0) {
+        /* Register the user block size */
+        if(H5P_register(crt_pclass,H5F_CRT_USER_BLOCK_NAME,H5F_CRT_USER_BLOCK_SIZE, &userblock_size,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the 1/2 rank for symbol table leaf nodes */
+        if(H5P_register(crt_pclass,H5F_CRT_SYM_LEAF_NAME,H5F_CRT_SYM_LEAF_SIZE, &sym_leaf_k,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the 1/2 rank for btree internal nodes */
+        if(H5P_register(crt_pclass,H5F_CRT_BTREE_RANK_NAME,H5F_CRT_BTREE_RANK_SIZE, btree_k,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the byte number for an address */
+        if(H5P_register(crt_pclass,H5F_CRT_ADDR_BYTE_NUM_NAME, H5F_CRT_ADDR_BYTE_NUM_SIZE, &sizeof_addr,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the byte number for object size */
+        if(H5P_register(crt_pclass,H5F_CRT_OBJ_BYTE_NUM_NAME, H5F_CRT_OBJ_BYTE_NUM_SIZE,&sizeof_size,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the superblock version number */
+        if(H5P_register(crt_pclass,H5F_CRT_SUPER_VERS_NAME,H5F_CRT_SUPER_VERS_SIZE, &superblock_ver,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the free-space version number */
+        if(H5P_register(crt_pclass,H5F_CRT_FREESPACE_VERS_NAME, H5F_CRT_FREESPACE_VERS_SIZE,&freespace_ver,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the object directory version number */
+        if(H5P_register(crt_pclass,H5F_CRT_OBJ_DIR_VERS_NAME, H5F_CRT_OBJ_DIR_VERS_SIZE,&objectdir_ver,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the shared-header version number */
+        if(H5P_register(crt_pclass,H5F_CRT_SHARE_HEAD_VERS_NAME, H5F_CRT_SHARE_HEAD_VERS_SIZE, &sharedheader_ver,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+    } /* end if */
+
+    /* Only register the default property list if it hasn't been created yet */
+    if(H5P_LST_FILE_CREATE_g==(-1)) {
+        /* Register the default file creation property list */
+        if((H5P_LST_FILE_CREATE_g = H5P_create_id(crt_pclass))<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't insert property into class")
+    } /* end if */
+
+    /* ========== File Access Property Class Initialization ============*/
+    assert(H5P_CLS_FILE_ACCESS_g!=-1);
+
+    /* Get the pointer to file creation class */
+    if(NULL == (acs_pclass = H5I_object(H5P_CLS_FILE_ACCESS_g)))
+         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list class")
+
+    /* Get the number of properties in the class */
+    if(H5P_get_nprops_pclass(acs_pclass,&nprops)<0)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "can't query number of properties")
+
+    /* Assume that if there are properties in the class, they are the default ones */
+    if(nprops==0) {
+        /* Register the size of meta data cache(elements) */
+        if(H5P_register(acs_pclass,H5F_ACS_META_CACHE_SIZE_NAME,H5F_ACS_META_CACHE_SIZE_SIZE, &mdc_nelmts,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the size of raw data chunk cache (elements) */
+        if(H5P_register(acs_pclass,H5F_ACS_DATA_CACHE_ELMT_SIZE_NAME,H5F_ACS_DATA_CACHE_ELMT_SIZE_SIZE, &rdcc_nelmts,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the size of raw data chunk cache(bytes) */
+        if(H5P_register(acs_pclass,H5F_ACS_DATA_CACHE_BYTE_SIZE_NAME,H5F_ACS_DATA_CACHE_BYTE_SIZE_SIZE, &rdcc_nbytes,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the preemption for reading chunks */
+        if(H5P_register(acs_pclass,H5F_ACS_PREEMPT_READ_CHUNKS_NAME,H5F_ACS_PREEMPT_READ_CHUNKS_SIZE, &rdcc_w0,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the threshold for alignment */
+        if(H5P_register(acs_pclass,H5F_ACS_ALIGN_THRHD_NAME,H5F_ACS_ALIGN_THRHD_SIZE, &threshold,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the alignment */
+        if(H5P_register(acs_pclass,H5F_ACS_ALIGN_NAME,H5F_ACS_ALIGN_SIZE, &alignment,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the minimum metadata allocation block size */
+        if(H5P_register(acs_pclass,H5F_ACS_META_BLOCK_SIZE_NAME,H5F_ACS_META_BLOCK_SIZE_SIZE, &meta_block_size,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the maximum sieve buffer size */
+        if(H5P_register(acs_pclass,H5F_ACS_SIEVE_BUF_SIZE_NAME,H5F_ACS_SIEVE_BUF_SIZE_SIZE, &sieve_buf_size,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the minimum "small data" allocation block size */
+        if(H5P_register(acs_pclass,H5F_ACS_SDATA_BLOCK_SIZE_NAME,H5F_ACS_SDATA_BLOCK_SIZE_SIZE, &sdata_block_size,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the garbage collection reference */
+        if(H5P_register(acs_pclass,H5F_ACS_GARBG_COLCT_REF_NAME,H5F_ACS_GARBG_COLCT_REF_SIZE, &gc_ref,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the file driver ID */
+        if(H5P_register(acs_pclass,H5F_ACS_FILE_DRV_ID_NAME,H5F_ACS_FILE_DRV_ID_SIZE, &driver_id,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the file driver info */
+        if(H5P_register(acs_pclass,H5F_ACS_FILE_DRV_INFO_NAME,H5F_ACS_FILE_DRV_INFO_SIZE, &driver_info,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the file close degree */
+        if(H5P_register(acs_pclass,H5F_CLOSE_DEGREE_NAME,H5F_CLOSE_DEGREE_SIZE, &close_degree,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the offset of family driver info */
+        if(H5P_register(acs_pclass,H5F_ACS_FAMILY_OFFSET_NAME,H5F_ACS_FAMILY_OFFSET_SIZE, &family_offset,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+        /* Register the data type of multi driver info */
+        if(H5P_register(acs_pclass,H5F_ACS_MULTI_TYPE_NAME,H5F_ACS_MULTI_TYPE_SIZE, &mem_type,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+    } /* end if */
+
+    /* Only register the default property list if it hasn't been created yet */
+    if(H5P_LST_FILE_ACCESS_g==(-1)) {
+        /* Register the default file access property list */
+        if((H5P_LST_FILE_ACCESS_g = H5P_create_id(acs_pclass))<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't insert property into class")
+    } /* end if */
+
+    /* ================ Mount Porperty Class Initialization ==============*/
+    assert(H5P_CLS_MOUNT_g!=-1);
+
+    /* Get the pointer to file mount class */
+    if(NULL == (mnt_pclass = H5I_object(H5P_CLS_MOUNT_g)))
+         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list class")
+
+    /* Get the number of properties in the class */
+    if(H5P_get_nprops_pclass(mnt_pclass,&nprops)<0)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "can't query number of properties")
+
+    /* Assume that if there are properties in the class, they are the default ones */
+    if(nprops==0) {
+        /* Register property of whether symlinks is local to file */
+        if(H5P_register(mnt_pclass,H5F_MNT_SYM_LOCAL_NAME,H5F_MNT_SYM_LOCAL_SIZE, &local,NULL,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+    } /* end if */
+
+    /* Only register the default property list if it hasn't been created yet */
+    if(H5P_LST_MOUNT_g==(-1)) {
+        /* Register the default file mount property list */
+        if((H5P_LST_MOUNT_g = H5P_create_id(mnt_pclass))<0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't insert property into class")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_term_interface
+ *
+ * Purpose:	Terminate this interface: free all memory and reset global
+ *		variables to their initial values.  Release all ID groups
+ *		associated with this interface.
+ *
+ * Return:	Success:	Positive if anything was done that might
+ *				have affected other interfaces; zero
+ *				otherwise.
+ *
+ *		Failure:        Never fails.
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, February 19, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5F_term_interface(void)
+{
+    int	n = 0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_term_interface)
+
+    if (H5_interface_initialize_g) {
+	if ((n=H5I_nmembers(H5I_FILE))!=0) {
+            H5I_clear_group(H5I_FILE, FALSE);
+	} else {
+            /* Make certain we've cleaned up all the shared file objects */
+            H5F_sfile_assert_num(0);
+
+	    H5I_destroy_group(H5I_FILE);
+	    H5_interface_initialize_g = 0;
+	    n = 1; /*H5I*/
+	}
+    }
+    FUNC_LEAVE_NOAPI(n)
+}
+
+
+/*----------------------------------------------------------------------------
+ * Function:	H5F_acs_create
+ *
+ * Purpose:	Callback routine which is called whenever a file access
+ *		property list is closed.  This routine performs any generic
+ * 		initialization needed on the properties the library put into
+ * 		the list.
+ *
+ * Return:	Success:		Non-negative
+ * 		Failure:		Negative
+ *
+ * Programmer:	Raymond Lu
+ *		Tuesday, Oct 23, 2001
+ *
+ * Modifications:
+ *
+ *----------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+herr_t
+H5F_acs_create(hid_t fapl_id, void UNUSED *copy_data)
+{
+    hid_t          driver_id;
+    void*          driver_info;
+    H5P_genplist_t *plist;              /* Property list */
+    herr_t         ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5F_acs_create, FAIL)
+
+    /* Check argument */
+    if(NULL == (plist = H5I_object(fapl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
+
+    /* Retrieve properties */
+    if(H5P_get(plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get drver ID")
+    if(H5P_get(plist, H5F_ACS_FILE_DRV_INFO_NAME, &driver_info) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get drver info")
+
+    if(driver_id > 0) {
+        /* Set the driver for the property list */
+        if(H5FD_fapl_open(plist, driver_id, driver_info)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set driver")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*--------------------------------------------------------------------------
+ * Function:	H5F_acs_copy
+ *
+ * Purpose:	Callback routine which is called whenever a file access
+ * 		property list is copied.  This routine performs any generic
+ * 	 	copy needed on the properties.
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ * Programmer:	Raymond Lu
+ *		Tuesday, Oct 23, 2001
+ *
+ * Modifications:
+ *
+ *--------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+herr_t
+H5F_acs_copy(hid_t new_fapl_id, hid_t old_fapl_id, void UNUSED *copy_data)
+{
+    hid_t          driver_id;
+    void*          driver_info;
+    H5P_genplist_t *new_plist;              /* New property list */
+    H5P_genplist_t *old_plist;              /* Old property list */
+    herr_t         ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5F_acs_copy, FAIL)
+
+    if(NULL == (new_plist = H5I_object(new_fapl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+    if(NULL == (old_plist = H5I_object(old_fapl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
+    /* Get values from old property list */
+    if(H5P_get(old_plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get drver ID")
+    if(H5P_get(old_plist, H5F_ACS_FILE_DRV_INFO_NAME, &driver_info) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get drver info")
+
+    if(driver_id > 0) {
+        /* Set the driver for the property list */
+        if(H5FD_fapl_open(new_plist, driver_id, driver_info)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set driver")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*--------------------------------------------------------------------------
+ * Function:	H5F_acs_close
+ *
+ * Purpose:	Callback routine which is called whenever a file access
+ *		property list is closed.  This routine performs any generic
+ *		cleanup needed on the properties.
+ *
+ * Return:	Success:	Non-negative
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:	Raymond Lu
+ *		Tuesday, Oct 23, 2001
+ *
+ * Modifications:
+ *
+ *---------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+herr_t
+H5F_acs_close(hid_t fapl_id, void UNUSED *close_data)
+{
+    hid_t      driver_id;
+    void       *driver_info;
+    H5P_genplist_t *plist;              /* Property list */
+    herr_t     ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5F_acs_close, FAIL)
+
+    /* Check argument */
+    if(NULL == (plist = H5I_object(fapl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
+
+    if(H5P_get(plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
+        HGOTO_DONE(FAIL) /* Can't return errors when library is shutting down */
+    if(H5P_get(plist, H5F_ACS_FILE_DRV_INFO_NAME, &driver_info) < 0)
+        HGOTO_DONE(FAIL) /* Can't return errors when library is shutting down */
+
+    if(driver_id > 0) {
+        /* Close the driver for the property list */
+        if(H5FD_fapl_close(driver_id, driver_info)<0)
+            HGOTO_DONE(FAIL) /* Can't return errors when library is shutting down */
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+#ifdef NOT_YET
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_flush_all_cb
+ *
+ * Purpose:	Callback function for H5F_flush_all().
+ *
+ * Return:	Always returns zero.
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, February 19, 1999
+ *
+ * Modifications:
+ *          Bill Wendling, 2003-03-18
+ *          Changed H5F_flush to accept H5F_flush_t flags instead of a
+ *          series of h5bool_t's.
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5F_flush_all_cb(void *_f, hid_t UNUSED fid, void *_invalidate)
+{
+    H5F_t *f=(H5F_t *)_f;
+    unsigned    invalidate = (*((hbool_t*)_invalidate);
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_flush_all_cb)
+
+    H5F_flush(f, H5F_SCOPE_LOCAL, (invalidate ? H5F_FLUSH_INVALIDATE : H5F_FLUSH_NONE));
+
+    FUNC_LEAVE_NOAPI(0)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_flush_all
+ *
+ * Purpose:	Flush all open files. If INVALIDATE is true then also remove
+ *		everything from the cache.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, February 18, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_flush_all(hbool_t invalidate)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5F_flush_all, FAIL)
+
+    H5I_search(H5I_FILE,H5F_flush_all_cb,&invalidate);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+#endif /* NOT_YET */
+
+#ifdef NOT_YET
+
+/*--------------------------------------------------------------------------
+ NAME
+       H5F_encode_length_unusual -- encode an unusual length size
+ USAGE
+       void H5F_encode_length_unusual(f, p, l)
+       const H5F_t *f;		   IN: pointer to the file record
+       uint8_t **p;		IN: pointer to buffer pointer to encode length in
+       uint8_t *l;		IN: pointer to length to encode
+
+ ERRORS
+
+ RETURNS
+    none
+ DESCRIPTION
+    Encode non-standard (i.e. not 2, 4 or 8-byte) lengths in file meta-data.
+--------------------------------------------------------------------------*/
+void
+H5F_encode_length_unusual(const H5F_t *f, uint8_t **p, uint8_t *l)
+{
+    int		    i = (int)H5F_SIZEOF_SIZE(f)-1;
+
+#ifdef WORDS_BIGENDIAN
+    /*
+     * For non-little-endian platforms, encode each byte in memory backwards.
+     */
+    for (/*void*/; i>=0; i--, (*p)++)*(*p) = *(l+i);
+#else
+    /* platform has little-endian integers */
+    HDmemcpy(*p,l,(size_t)(i+1));
+    *p+=(i+1);
+#endif
+
+}
+#endif /* NOT_YET */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Fget_create_plist
+ *
+ * Purpose:	Get an atom for a copy of the file-creation property list for
+ *		this file. This function returns an atom with a copy of the
+ *		properties used to create a file.
+ *
+ * Return:	Success:	template ID
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Unknown
+ *
+ * Modifications:
+ *
+ * 	Robb Matzke, 18 Feb 1998
+ *	Calls H5P_copy_plist() to copy the property list and H5P_close() to free
+ *	that property list if an error occurs.
+ *
+ *	Raymond Lu, Oct 14, 2001
+ *	Changed to generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Fget_create_plist(hid_t file_id)
+{
+    H5F_t		*file = NULL;
+    H5P_genplist_t *plist;              /* Property list */
+    hid_t		ret_value;
+
+    FUNC_ENTER_API(H5Fget_create_plist, FAIL)
+    H5TRACE1("i","i",file_id);
+
+    /* check args */
+    if (NULL==(file=H5I_object_verify(file_id, H5I_FILE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
+    if(NULL == (plist = H5I_object(file->shared->fcpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
+
+    /* Create the property list object to return */
+    if((ret_value=H5P_copy_plist(plist)) < 0)
+	HGOTO_ERROR(H5E_INTERNAL, H5E_CANTINIT, FAIL, "unable to copy file creation properties")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Fget_access_plist
+ *
+ * Purpose:	Returns a copy of the file access property list of the
+ *		specified file.
+ *
+ *              NOTE: Make sure that, if you are going to overwrite
+ *              information in the copied property list that was
+ *              previously opened and assigned to the property list, then
+ *              you must close it before overwriting the values.
+ *
+ * Return:	Success:	Object ID for a copy of the file access
+ *				property list.
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, February 18, 1998
+ *
+ * Modifications:
+ *		Raymond Lu, Oct 23, 2001
+ *		Changed file access property list to the new generic
+ * 		property list.
+ *
+ *              Bill Wendling, Apr 21, 2003
+ *              Fixed bug where the driver ID and info in the property
+ *              list were being overwritten but the original ID and info
+ *              weren't being close.
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Fget_access_plist(hid_t file_id)
+{
+    H5F_t		*f = NULL;
+    H5P_genplist_t *new_plist;              /* New property list */
+    H5P_genplist_t *old_plist;              /* Old property list */
+    hid_t		ret_value = SUCCEED;
+    void		*driver_info=NULL;
+
+    FUNC_ENTER_API(H5Fget_access_plist, FAIL)
+    H5TRACE1("i","i",file_id);
+
+    /* Check args */
+    if (NULL==(f=H5I_object_verify(file_id, H5I_FILE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
+
+    /* Make a copy of the default file access property list */
+    if(NULL == (old_plist = H5I_object(H5P_LST_FILE_ACCESS_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
+    if((ret_value=H5P_copy_plist(old_plist)) < 0)
+	HGOTO_ERROR(H5E_INTERNAL, H5E_CANTINIT, FAIL, "can't copy file access property list")
+    if(NULL == (new_plist = H5I_object(ret_value)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
+
+    /* Copy properties of the file access property list */
+    if(H5P_set(new_plist, H5F_ACS_META_CACHE_SIZE_NAME, &(f->shared->mdc_nelmts)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set meta data cache size")
+    if(H5P_set(new_plist, H5F_ACS_DATA_CACHE_ELMT_SIZE_NAME, &(f->shared->rdcc_nelmts)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set data cache element size")
+    if(H5P_set(new_plist, H5F_ACS_DATA_CACHE_BYTE_SIZE_NAME, &(f->shared->rdcc_nbytes)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set data cache byte size")
+
+    if(H5P_set(new_plist, H5F_ACS_PREEMPT_READ_CHUNKS_NAME, &(f->shared->rdcc_w0)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set preempt read chunks")
+    if(H5P_set(new_plist, H5F_ACS_ALIGN_THRHD_NAME, &(f->shared->threshold)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set alignment threshold")
+    if(H5P_set(new_plist, H5F_ACS_ALIGN_NAME, &(f->shared->alignment)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set alignment")
+
+    if(H5P_set(new_plist, H5F_ACS_GARBG_COLCT_REF_NAME, &(f->shared->gc_ref)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set garbage collect reference")
+    if(H5P_set(new_plist, H5F_ACS_META_BLOCK_SIZE_NAME, &(f->shared->lf->def_meta_block_size)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set meta data cache size")
+    if(H5P_set(new_plist, H5F_ACS_SIEVE_BUF_SIZE_NAME, &(f->shared->sieve_buf_size)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't sieve buffer size")
+    if(H5P_set(new_plist, H5F_ACS_SDATA_BLOCK_SIZE_NAME, &(f->shared->lf->def_sdata_block_size)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set 'small data' cache size")
+
+    /*
+     * Since we're resetting the driver ID and info, close them if they
+     * exist in this new property list.
+     */
+    if (H5F_acs_close(ret_value, NULL) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTFREE, FAIL, "can't free the old driver information")
+
+    /* Increment the reference count on the driver ID and insert it into the property list */
+    if(H5I_inc_ref(f->shared->lf->driver_id)<0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTINC, FAIL, "unable to increment ref count on VFL driver")
+    if(H5P_set(new_plist, H5F_ACS_FILE_DRV_ID_NAME, &(f->shared->lf->driver_id)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set file driver ID")
+
+    /* Set the driver "info" in the property list */
+    driver_info = H5FD_fapl_get(f->shared->lf);
+    if(driver_info != NULL && H5P_set(new_plist, H5F_ACS_FILE_DRV_INFO_NAME, &driver_info) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set file driver info")
+
+    /* Set the file close degree appropriately */
+    if(f->shared->fc_degree == H5F_CLOSE_DEFAULT && H5P_set(new_plist, H5F_CLOSE_DEGREE_NAME, &(f->shared->lf->cls->fc_degree)) < 0) {
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set file close degree")
+    } else if(f->shared->fc_degree != H5F_CLOSE_DEFAULT && H5P_set(new_plist, H5F_CLOSE_DEGREE_NAME, &(f->shared->fc_degree)) < 0) {
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set file close degree")
+    }
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Fget_obj_count
+ *
+ * Purpose:	Public function returning the number of opened object IDs
+ *		(files, datasets, groups and datatypes) in the same file.
+ *
+ * Return:	Non-negative on success; negative on failure.
+ *
+ * Programmer:	Raymond Lu
+ *		Wednesday, Dec 5, 2001
+ *
+ * Modification:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Fget_obj_count(hid_t file_id, unsigned types)
+{
+    H5F_t    *f=NULL;
+    int   ret_value;            /* Return value */
+
+    FUNC_ENTER_API(H5Fget_obj_count, FAIL)
+    H5TRACE2("Is","iIu",file_id,types);
+
+    if( file_id != (hid_t)H5F_OBJ_ALL && (NULL==(f=H5I_object_verify(file_id,H5I_FILE))) )
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file id")
+    if( (types&H5F_OBJ_ALL)==0)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not an object type")
+
+    if((ret_value = H5F_get_obj_count(f, types))<0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTCOUNT, FAIL, "can't get object count")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5F_get_obj_count
+ *
+ * Purpose:	Private function return the number of opened object IDs
+ *		(files, datasets, groups, datatypes) in the same file.
+ *
+ * Return:      Non-negative on success; negative on failure.
+ *
+ * Programmer:  Raymond Lu
+ *              Wednesday, Dec 5, 2001
+ *
+ * Modification:
+ *
+ *-------------------------------------------------------------------------
+ */
+unsigned
+H5F_get_obj_count(const H5F_t *f, unsigned types)
+{
+    unsigned   ret_value;            /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_obj_count)
+
+    ret_value=H5F_get_objects(f, types, -1, NULL);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Fget_object_ids
+ *
+ * Purpose:	Public function to return a list of opened object IDs.
+ *
+ * Return:	Non-negative on success; negative on failure.
+ *
+ * Programmer:  Raymond Lu
+ *              Wednesday, Dec 5, 2001
+ *
+ * Modification:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Fget_obj_ids(hid_t file_id, unsigned types, int max_objs, hid_t *oid_list)
+{
+    herr_t   ret_value;
+    H5F_t    *f=NULL;
+
+    FUNC_ENTER_API(H5Fget_obj_ids, FAIL)
+    H5TRACE4("e","iIuIs*i",file_id,types,max_objs,oid_list);
+
+    if( file_id != (hid_t)H5F_OBJ_ALL && (NULL==(f=H5I_object_verify(file_id,H5I_FILE))) )
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file id")
+    if( (types&H5F_OBJ_ALL)==0)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not an object type")
+    assert(oid_list);
+
+    ret_value = H5F_get_obj_ids(f, types, max_objs, oid_list);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5F_get_obj_ids
+ *
+ * Purpose:     Private function to return a list of opened object IDs.
+ *
+ * Return:      Non-negative on success; negative on failure.
+ *
+ * Programmer:  Raymond Lu
+ *              Wednesday, Dec 5, 2001
+ *
+ * Modification:
+ *
+ *-------------------------------------------------------------------------
+ */
+unsigned
+H5F_get_obj_ids(const H5F_t *f, unsigned types, int max_objs, hid_t *oid_list)
+{
+    unsigned ret_value;              /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_obj_ids)
+
+    ret_value = H5F_get_objects(f, types, max_objs, oid_list);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*---------------------------------------------------------------------------
+ * Function:	H5F_get_objects
+ *
+ * Purpose:	This function is called by H5F_get_obj_count or
+ *		H5F_get_obj_ids to get number of object IDs and/or a
+ *		list of opened object IDs (in return value).
+ * Return:	Non-negative on success; negative on failure.
+ *
+ * Programmer:  Raymond Lu
+ *              Wednesday, Dec 5, 2001
+ *
+ * Modification:
+ *
+ *---------------------------------------------------------------------------
+ */
+static unsigned
+H5F_get_objects(const H5F_t *f, unsigned types, int max_index, hid_t *obj_id_list)
+{
+    unsigned obj_id_count=0;    /* Number of open IDs */
+    H5F_olist_t olist;          /* Structure to hold search results */
+    unsigned ret_value;         /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_objects)
+
+    /* Set up search information */
+    olist.obj_id_list  = (max_index==0 ? NULL : obj_id_list);
+    olist.obj_id_count = &obj_id_count;
+    olist.list_index   = 0;
+    olist.max_index   = max_index;
+
+    /* Determine if we are searching for local or global objects */
+    if(types&H5F_OBJ_LOCAL) {
+        olist.file_info.local = TRUE;
+        olist.file_info.ptr.file = f;
+    } /* end if */
+    else {
+        olist.file_info.local = FALSE;
+        olist.file_info.ptr.shared = f ? f->shared : NULL;
+    } /* end else */
+
+    /* Search through file IDs to count the number, and put their
+     * IDs on the object list */
+    if(types & H5F_OBJ_FILE) {
+        olist.obj_type = H5I_FILE;
+        (void)H5I_search(H5I_FILE, H5F_get_objects_cb, &olist);
+    } /* end if */
+
+    /* Search through dataset IDs to count number of datasets, and put their
+     * IDs on the object list */
+    if( (max_index < 0 || (int)olist.list_index < max_index) && (types & H5F_OBJ_DATASET) ) {
+        olist.obj_type = H5I_DATASET;
+        (void)H5I_search(H5I_DATASET, H5F_get_objects_cb, &olist);
+    }
+
+    /* Search through group IDs to count number of groups, and put their
+     * IDs on the object list */
+    if( (max_index < 0 || (int)olist.list_index < max_index) && (types & H5F_OBJ_GROUP) ) {
+        olist.obj_type = H5I_GROUP;
+        (void)H5I_search(H5I_GROUP, H5F_get_objects_cb, &olist);
+    }
+
+    /* Search through datatype IDs to count number of named datatypes, and put their
+     * IDs on the object list */
+    if( (max_index < 0 || (int)olist.list_index < max_index) && (types & H5F_OBJ_DATATYPE) ) {
+        olist.obj_type = H5I_DATATYPE;
+        (void)H5I_search(H5I_DATATYPE, H5F_get_objects_cb, &olist);
+    }
+
+    /* Search through attribute IDs to count number of attributes, and put their
+     * IDs on the object list */
+    if( (max_index < 0 || (int)olist.list_index < max_index) && (types & H5F_OBJ_ATTR) ) {
+        olist.obj_type = H5I_ATTR;
+        (void)H5I_search(H5I_ATTR, H5F_get_objects_cb, &olist);
+    }
+
+    /* Set the number of objects currently open */
+    ret_value = obj_id_count;
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_get_objects_cb
+ *
+ * Purpose:	H5F_get_objects' callback function.  It verifies if an
+ * 		object is in the file, and either count it or put its ID
+ *		on the list.
+ *
+ * Programmer:  Raymond Lu
+ *              Wednesday, Dec 5, 2001
+ *
+ * Modification:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5F_get_objects_cb(void *obj_ptr, hid_t obj_id, void *key)
+{
+    H5F_olist_t *olist = (H5F_olist_t *)key;    /* Alias for search info */
+    int      ret_value = FALSE;    /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_get_objects_cb)
+
+    assert(obj_ptr);
+    assert(olist);
+
+    /* Count file IDs */
+    if(olist->obj_type == H5I_FILE) {
+        if((olist->file_info.local &&
+                        (!olist->file_info.ptr.file || (olist->file_info.ptr.file && (H5F_t*)obj_ptr == olist->file_info.ptr.file) ))
+                ||  (!olist->file_info.local &&
+                        ( !olist->file_info.ptr.shared || (olist->file_info.ptr.shared && ((H5F_t*)obj_ptr)->shared == olist->file_info.ptr.shared) ))) {
+            /* Add the object's ID to the ID list, if appropriate */
+            if(olist->obj_id_list) {
+                olist->obj_id_list[olist->list_index] = obj_id;
+		olist->list_index++;
+	    }
+
+            /* Increment the number of open objects */
+	    if(olist->obj_id_count)
+	    	(*olist->obj_id_count)++;
+
+            /* Check if we've filled up the array */
+            if(olist->max_index>=0 && (int)olist->list_index>=olist->max_index)
+                HGOTO_DONE(TRUE)  /* Indicate that the iterator should stop */
+	}
+    } else { /* either count opened object IDs or put the IDs on the list */
+        H5G_entry_t *ent;        /* Group entry info for object */
+
+    	switch(olist->obj_type) {
+	    case H5I_ATTR:
+	        ent = H5A_entof((H5A_t*)obj_ptr);
+                break;
+	    case H5I_GROUP:
+	        ent = H5G_entof((H5G_t*)obj_ptr);
+                break;
+	    case H5I_DATASET:
+	        ent = H5D_entof((H5D_t*)obj_ptr);
+		break;
+	    case H5I_DATATYPE:
+                if(H5T_is_named((H5T_t*)obj_ptr)==TRUE)
+                    ent = H5T_entof((H5T_t*)obj_ptr);
+                else
+                    ent = NULL;
+		break;
+            default:
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "unknown data object")
+	}
+
+        if((olist->file_info.local &&
+                    ( (!olist->file_info.ptr.file && olist->obj_type==H5I_DATATYPE && H5T_is_immutable((H5T_t*)obj_ptr)==FALSE)
+                            || (!olist->file_info.ptr.file && olist->obj_type!=H5I_DATATYPE)
+                            || (ent && ent->file == olist->file_info.ptr.file) ))
+                || (!olist->file_info.local &&
+                    ((!olist->file_info.ptr.shared && olist->obj_type==H5I_DATATYPE && H5T_is_immutable((H5T_t*)obj_ptr)==FALSE)
+                            || (!olist->file_info.ptr.shared && olist->obj_type!=H5I_DATATYPE)
+                            || (ent && ent->file && ent->file->shared == olist->file_info.ptr.shared) ))) {
+            /* Add the object's ID to the ID list, if appropriate */
+            if(olist->obj_id_list) {
+            	olist->obj_id_list[olist->list_index] = obj_id;
+		olist->list_index++;
+	    }
+
+            /* Increment the number of open objects */
+	    if(olist->obj_id_count)
+            	(*olist->obj_id_count)++;
+
+            /* Check if we've filled up the array */
+            if(olist->max_index>=0 && (int)olist->list_index>=olist->max_index)
+                HGOTO_DONE(TRUE)  /* Indicate that the iterator should stop */
+    	}
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Fget_vfd_handle
+ *
+ * Purpose:     Returns a pointer to the file handle of the low-level file
+ *              driver.
+ *
+ * Return:      Success:        non-negative value.
+ *
+ *              Failture:       negative.
+ *
+ * Programmer:  Raymond Lu
+ *              Sep. 16, 2002
+ *
+ * Modification:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Fget_vfd_handle(hid_t file_id, hid_t fapl, void **file_handle)
+{
+    H5F_t               *file=NULL;
+    herr_t              ret_value;
+
+    FUNC_ENTER_API(H5Fget_vfd_handle, FAIL)
+    H5TRACE3("e","iix",file_id,fapl,file_handle);
+
+    /* Check args */
+    assert(file_handle);
+    if(NULL==(file=H5I_object_verify(file_id, H5I_FILE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file id")
+
+    ret_value=H5F_get_vfd_handle(file, fapl, file_handle);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5F_get_vfd_handle
+ *
+ * Purpose:     Returns a pointer to the file handle of the low-level file
+ *              driver.  This is the private function for H5Fget_vfd_handle.
+ *
+ * Return:      Success:        Non-negative.
+ *
+ *              Failture:       negative.
+ *
+ * Programmer:  Raymond Lu
+ *              Sep. 16, 2002
+ *
+ * Modification:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5F_get_vfd_handle(const H5F_t *file, hid_t fapl, void**file_handle)
+{
+    herr_t ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_get_vfd_handle)
+
+    assert(file_handle);
+    if((ret_value=H5FD_get_vfd_handle(file->shared->lf, fapl, file_handle)) < 0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "can't get file handle for file driver")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_locate_signature
+ *
+ * Purpose:	Finds the HDF5 super block signature in a file.	The signature
+ *		can appear at address 0, or any power of two beginning with
+ *		512.
+ *
+ * Return:	Success:	The absolute format address of the signature.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November  7, 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-08-02
+ *		Rewritten to use the virtual file layer.
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5F_locate_signature(H5FD_t *file, hid_t dxpl_id)
+{
+    haddr_t	    addr, eoa;
+    uint8_t	    buf[H5F_SIGNATURE_LEN];
+    unsigned	    n, maxpow;
+    haddr_t         ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_locate_signature)
+
+    /* Find the least N such that 2^N is larger than the file size */
+    if (HADDR_UNDEF==(addr=H5FD_get_eof(file)) ||
+            HADDR_UNDEF==(eoa=H5FD_get_eoa(file)))
+	HGOTO_ERROR(H5E_IO, H5E_CANTINIT, HADDR_UNDEF, "unable to obtain EOF/EOA value")
+    for (maxpow=0; addr; maxpow++)
+        addr>>=1;
+    maxpow = MAX(maxpow, 9);
+
+    /*
+     * Search for the file signature at format address zero followed by
+     * powers of two larger than 9.
+     */
+    for (n=8; n<maxpow; n++) {
+	addr = (8==n) ? 0 : (haddr_t)1 << n;
+	if (H5FD_set_eoa(file, addr+H5F_SIGNATURE_LEN)<0)
+	    HGOTO_ERROR(H5E_IO, H5E_CANTINIT, HADDR_UNDEF, "unable to set EOA value for file signature")
+	if (H5FD_read(file, H5FD_MEM_SUPER, dxpl_id, addr, (size_t)H5F_SIGNATURE_LEN, buf)<0)
+	    HGOTO_ERROR(H5E_IO, H5E_CANTINIT, HADDR_UNDEF, "unable to read file signature")
+	if (!HDmemcmp(buf, H5F_SIGNATURE, (size_t)H5F_SIGNATURE_LEN))
+            break;
+    }
+
+    /*
+     * If the signature was not found then reset the EOA value and return
+     * failure.
+     */
+    if (n>=maxpow) {
+	(void)H5FD_set_eoa(file, eoa); /* Ignore return value */
+	HGOTO_ERROR(H5E_IO, H5E_CANTINIT, HADDR_UNDEF, "unable to find a valid file signature")
+    }
+
+    /* Set return value */
+    ret_value=addr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Fis_hdf5
+ *
+ * Purpose:	Check the file signature to detect an HDF5 file.
+ *
+ * Bugs:	This function is not robust: it only uses the default file
+ *		driver when attempting to open the file when in fact it
+ *		should use all known file drivers.
+ *
+ * Return:	Success:	TRUE/FALSE
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Unknown
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-08-02
+ *		Rewritten to use the virtual file layer.
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5Fis_hdf5(const char *name)
+{
+    H5FD_t	*file = NULL;
+    htri_t	ret_value;
+
+    FUNC_ENTER_API(H5Fis_hdf5, FAIL)
+    H5TRACE1("t","s",name);
+
+    /* Check args and all the boring stuff. */
+    if (!name || !*name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "no file name specified")
+
+    /* Open the file at the virtual file layer */
+    if (NULL==(file=H5FD_open(name, H5F_ACC_RDONLY, H5P_FILE_ACCESS_DEFAULT, HADDR_UNDEF)))
+	HGOTO_ERROR(H5E_IO, H5E_CANTINIT, FAIL, "unable to open file")
+
+    /* The file is an hdf5 file if the hdf5 file signature can be found */
+    ret_value = (HADDR_UNDEF!=H5F_locate_signature(file, H5AC_ind_dxpl_id));
+
+done:
+    /* Close the file */
+    if (file)
+        if(H5FD_close(file)<0 && ret_value>=0)
+            HDONE_ERROR(H5E_IO, H5E_CANTCLOSEFILE, FAIL, "unable to close file")
+
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_new
+ *
+ * Purpose:	Creates a new file object and initializes it.  The
+ *		H5Fopen and H5Fcreate functions then fill in various
+ *		fields.	 If SHARED is a non-null pointer then the shared info
+ *		to which it points has the reference count incremented.
+ *		Otherwise a new, empty shared info struct is created and
+ *		initialized with the specified file access property list.
+ *
+ * Errors:
+ *
+ * Return:	Success:	Ptr to a new file struct.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 18 1997
+ *
+ * Modifications:
+ *
+ *		Raymond Lu, Oct 14, 2001
+ *		Changed the file creation and access property list to the
+ *		new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5F_t *
+H5F_new(H5F_file_t *shared, hid_t fcpl_id, hid_t fapl_id)
+{
+    H5F_t	*f=NULL, *ret_value;
+    H5P_genplist_t *plist;              /* Property list */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_new)
+
+    if (NULL==(f=H5FL_CALLOC(H5F_t)))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+    f->file_id = -1;
+
+    if (shared) {
+	f->shared = shared;
+    } else {
+    	int		n;
+
+	f->shared = H5FL_CALLOC(H5F_file_t);
+	f->shared->super_addr = HADDR_UNDEF;
+	f->shared->base_addr = HADDR_UNDEF;
+	f->shared->freespace_addr = HADDR_UNDEF;
+	f->shared->driver_addr = HADDR_UNDEF;
+
+	/*
+	 * Copy the file creation and file access property lists into the
+	 * new file handle.  We do this early because some values might need
+	 * to change as the file is being opened.
+	 */
+        if(NULL == (plist = H5I_object(fcpl_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not property list")
+        f->shared->fcpl_id = H5P_copy_plist(plist);
+
+        /* Get the FCPL values to cache */
+        if(H5P_get(plist, H5F_CRT_ADDR_BYTE_NUM_NAME, &f->shared->sizeof_addr)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get byte number for address")
+        if(H5P_get(plist, H5F_CRT_OBJ_BYTE_NUM_NAME, &f->shared->sizeof_size)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get byte number for object size")
+        if(H5P_get(plist, H5F_CRT_SYM_LEAF_NAME, &f->shared->sym_leaf_k)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get byte number for object size")
+        if(H5P_get(plist, H5F_CRT_BTREE_RANK_NAME, &f->shared->btree_k[0])<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "unable to get rank for btree internal nodes")
+
+        /* Check for non-default indexed storage B-tree internal 'K' value
+         * and increment the version # of the superblock if it is a non-default
+         * value.
+         */
+        if(f->shared->btree_k[H5B_ISTORE_ID]!=HDF5_BTREE_ISTORE_IK_DEF) {
+            unsigned super_vers=HDF5_SUPERBLOCK_VERSION_MAX; /* Super block version */
+            H5P_genplist_t *c_plist;              /* Property list */
+
+            if(NULL == (c_plist = H5I_object(f->shared->fcpl_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not property list")
+            if(H5P_set(c_plist, H5F_CRT_SUPER_VERS_NAME, &super_vers) < 0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, NULL, "unable to set superblock version")
+        } /* end if */
+
+        if(NULL == (plist = H5I_object(fapl_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not file access property list")
+
+        if(H5P_get(plist, H5F_ACS_META_CACHE_SIZE_NAME, &(f->shared->mdc_nelmts)) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get meta data cache size")
+        if(H5P_get(plist, H5F_ACS_DATA_CACHE_ELMT_SIZE_NAME, &(f->shared->rdcc_nelmts)) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get data cache element size")
+        if(H5P_get(plist, H5F_ACS_DATA_CACHE_BYTE_SIZE_NAME, &(f->shared->rdcc_nbytes)) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get data cache cache size")
+        if(H5P_get(plist, H5F_ACS_PREEMPT_READ_CHUNKS_NAME, &(f->shared->rdcc_w0)) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get preempt read chunk")
+
+        if(H5P_get(plist, H5F_ACS_ALIGN_THRHD_NAME, &(f->shared->threshold))<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get alignment threshold")
+        if(H5P_get(plist, H5F_ACS_ALIGN_NAME, &(f->shared->alignment)) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get alignment")
+        if(H5P_get(plist, H5F_ACS_GARBG_COLCT_REF_NAME,&(f->shared->gc_ref))<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get garbage collect reference")
+        if(H5P_get(plist, H5F_ACS_SIEVE_BUF_SIZE_NAME, &(f->shared->sieve_buf_size)) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get sieve buffer size")
+
+	/*
+	 * Create a meta data cache with the specified number of elements.
+	 * The cache might be created with a different number of elements and
+	 * the access property list should be updated to reflect that.
+	 */
+	if ((n=H5AC_create(f, f->shared->mdc_nelmts))<0)
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create meta data cache")
+
+	f->shared->mdc_nelmts = n;
+
+        /* Create the file's "open object" information */
+        if(H5FO_create(f)<0)
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create open object data structure")
+
+        /* Add new "shared" struct to list of open files */
+        if(H5F_sfile_add(f->shared) < 0)
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to append to list of open files")
+    } /* end else */
+
+    f->shared->nrefs++;
+
+    /* Create the file's "top open object" information */
+    if(H5FO_top_create(f)<0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create open object data structure")
+
+    /* Set return value */
+    ret_value = f;
+
+done:
+    if (!ret_value && f) {
+	if (!shared)
+            H5FL_FREE(H5F_file_t,f->shared);
+	H5FL_FREE(H5F_t,f);
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_dest
+ *
+ * Purpose:	Destroys a file structure.  This function flushes the cache
+ *		but doesn't do any other cleanup other than freeing memory
+ *		for the file struct.  The shared info for the file is freed
+ *		only when its reference count reaches zero.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 18 1997
+ *
+ * Modifications:
+ *
+ * 	Robb Matzke, 1998-10-14
+ *	Nothing happens unless the reference count for the H5F_t goes to
+ *	zero.  The reference counts are decremented here.
+ *
+ * 	Robb Matzke, 1999-02-19
+ *	More careful about decrementing reference counts so they don't go
+ *	negative or wrap around to some huge value.  Nothing happens if a
+ *	reference count is already zero.
+ *
+ *      Robb Matzke, 2000-10-31
+ *      H5FL_FREE() aborts if called with a null pointer (unlike the
+ *      original H5MM_free()).
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 18 Sep 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5F_dest(H5F_t *f, hid_t dxpl_id)
+{
+    herr_t	   ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_dest)
+
+    /* Sanity check */
+    HDassert(f);
+
+    if (1==f->shared->nrefs) {
+        /* Remove shared file struct from list of open files */
+        if(H5F_sfile_remove(f->shared) < 0)
+            /* Push error, but keep going*/
+            HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
+
+        /*
+         * Do not close the root group since we didn't count it, but free
+         * the memory associated with it.
+         */
+        if (f->shared->root_grp) {
+            /* Free the ID to name buffer */
+            if(H5G_free_grp_name(f->shared->root_grp)<0)
+                /* Push error, but keep going*/
+                HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
+
+            /* Free the memory for the root group */
+            if(H5G_free(f->shared->root_grp)<0)
+                /* Push error, but keep going*/
+                HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
+            f->shared->root_grp=NULL;
+        }
+        if (H5AC_dest(f, dxpl_id))
+            /* Push error, but keep going*/
+            HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
+        if (H5FO_dest(f)<0)
+            /* Push error, but keep going*/
+            HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
+        f->shared->cwfs = H5MM_xfree (f->shared->cwfs);
+        if (H5G_node_close(f)<0)
+            /* Push error, but keep going*/
+            HDONE_ERROR(H5E_FILE, H5E_CANTRELEASE, FAIL, "problems closing file")
+
+        /* Destroy file creation properties */
+        if(H5I_GENPROP_LST != H5I_get_type(f->shared->fcpl_id))
+            /* Push error, but keep going*/
+            HDONE_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a property list")
+        if((ret_value=H5I_dec_ref(f->shared->fcpl_id)) < 0)
+            /* Push error, but keep going*/
+            HDONE_ERROR(H5E_PLIST, H5E_CANTFREE, FAIL, "can't close property list")
+
+        /* Close low-level file */
+        if (H5FD_close(f->shared->lf)<0)
+            /* Push error, but keep going*/
+            HDONE_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "problems closing file")
+
+        /* Destroy shared file struct */
+        f->shared = H5FL_FREE(H5F_file_t,f->shared);
+
+    } else if (f->shared->nrefs>0) {
+        /*
+         * There are other references to the shared part of the file.
+         * Only decrement the reference count.
+         */
+        --f->shared->nrefs;
+    }
+
+    /* Free the non-shared part of the file */
+    f->name = H5MM_xfree(f->name);
+    f->mtab.child = H5MM_xfree(f->mtab.child);
+    f->mtab.nalloc = 0;
+    if(H5FO_top_dest(f) < 0)
+        HDONE_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "problems closing file")
+    H5FL_FREE(H5F_t,f);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_dest() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_open
+ *
+ * Purpose:	Opens (or creates) a file.  This function understands the
+ *		following flags which are similar in nature to the Posix
+ *		open(2) flags.
+ *
+ *		H5F_ACC_RDWR:	Open with read/write access. If the file is
+ *				currently open for read-only access then it
+ *				will be reopened. Absence of this flag
+ *				implies read-only access.
+ *
+ *		H5F_ACC_CREAT:	Create a new file if it doesn't exist yet.
+ *				The permissions are 0666 bit-wise AND with
+ *				the current umask.  H5F_ACC_WRITE must also
+ *				be specified.
+ *
+ *		H5F_ACC_EXCL:	This flag causes H5F_open() to fail if the
+ *				file already exists.
+ *
+ *		H5F_ACC_TRUNC:	The file is truncated and a new HDF5 superblock
+ *				is written.  This operation will fail if the
+ *				file is already open.
+ *
+ *		Unlinking the file name from the group directed graph while
+ *		the file is opened causes the file to continue to exist but
+ *		one will not be able to upgrade the file from read-only
+ *		access to read-write access by reopening it. Disk resources
+ *		for the file are released when all handles to the file are
+ *		closed. NOTE: This paragraph probably only applies to Unix;
+ *		deleting the file name in other OS's has undefined results.
+ *
+ *		The CREATE_PARMS argument is optional.	A null pointer will
+ *		cause the default file creation parameters to be used.
+ *
+ *		The ACCESS_PARMS argument is optional.  A null pointer will
+ *		cause the default file access parameters to be used.
+ *
+ * Return:	Success:	A new file pointer.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, September 23, 1997
+ *
+ * Modifications:
+ *		Albert Cheng, 1998-02-05
+ *		Added the access_parms argument to pass down access template
+ *		information.
+ *
+ * 		Robb Matzke, 1998-02-18
+ *		The H5F_access_t changed to allow more generality.  The low
+ *		level driver is part of the file access template so the TYPE
+ *		argument has been removed.
+ *
+ * 		Robb Matzke, 1999-08-02
+ *		Rewritten to use the virtual file layer.
+ *
+ * 		Robb Matzke, 1999-08-16
+ *		Added decoding of file driver information block, which uses a
+ *		formerly reserved address slot in the boot block in order to
+ *		be compatible with previous versions of the file format.
+ *
+ * 		Robb Matzke, 1999-08-20
+ *		Optimizations for opening a file. If the driver can't
+ *		determine when two file handles refer to the same file then
+ *		we open the file in one step.  Otherwise if the first attempt
+ *		to open the file fails then we skip the second attempt if the
+ *		arguments would be the same.
+ *
+ *		Raymond Lu, 2001-10-14
+ *		Changed the file creation and access property lists to the
+ *		new generic property list.
+ *
+ *		Bill Wendling, 2003-03-18
+ *		Modified H5F_flush call to take one flag instead of
+ *		multiple Boolean flags.
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5F_t *
+H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id, hid_t dxpl_id)
+{
+    H5F_t              *file = NULL;        /*the success return value      */
+    H5F_file_t         *shared = NULL;      /*shared part of `file'         */
+    H5FD_t             *lf = NULL;          /*file driver part of `shared'  */
+    H5G_entry_t         root_ent;           /*root symbol table entry       */
+    unsigned            tent_flags;         /*tentative flags               */
+    H5FD_class_t       *drvr;               /*file driver class info        */
+    hbool_t             driver_has_cmp;     /*`cmp' callback defined?       */
+    H5P_genplist_t     *a_plist;            /*file access property list     */
+    H5F_close_degree_t  fc_degree;          /*file close degree             */
+    H5F_t              *ret_value;          /*actual return value           */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_open)
+
+    /*
+     * If the driver has a `cmp' method then the driver is capable of
+     * determining when two file handles refer to the same file and the
+     * library can insure that when the application opens a file twice
+     * that the two handles coordinate their operations appropriately.
+     * Otherwise it is the application's responsibility to never open the
+     * same file more than once at a time.
+     */
+    if((drvr=H5FD_get_class(fapl_id))==NULL)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTGET, NULL, "unable to retrieve VFL class")
+    driver_has_cmp = (NULL!=drvr->cmp);
+
+    /*
+     * Opening a file is a two step process. First we try to open the
+     * file in a way which doesn't affect its state (like not truncating
+     * or creating it) so we can compare it with files that are already
+     * open. If that fails then we try again with the full set of flags
+     * (only if they're different than the original failed attempt).
+     * However, if the file driver can't distinquish between files then
+     * there's no reason to open the file tentatively because it's the
+     * application's responsibility to prevent this situation (there's no
+     * way for us to detect it here anyway).
+     */
+    if (driver_has_cmp) {
+	tent_flags = flags & ~(H5F_ACC_CREAT|H5F_ACC_TRUNC|H5F_ACC_EXCL);
+    } else {
+	tent_flags = flags;
+    }
+
+    if (NULL==(lf=H5FD_open(name, tent_flags, fapl_id, HADDR_UNDEF))) {
+	if (tent_flags == flags)
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file")
+	H5E_clear();
+	tent_flags = flags;
+	if (NULL==(lf=H5FD_open(name, tent_flags, fapl_id, HADDR_UNDEF)))
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file")
+    } /* end if */
+
+    /* Is the file already open? */
+    if ((shared = H5F_sfile_search(lf)) != NULL) {
+	/*
+	 * The file is already open, so use that one instead of the one we
+	 * just opened. We only one one H5FD_t* per file so one doesn't
+	 * confuse the other.  But fail if this request was to truncate the
+	 * file (since we can't do that while the file is open), or if the
+	 * request was to create a non-existent file (since the file already
+	 * exists), or if the new request adds write access (since the
+	 * readers don't expect the file to change under them).
+	 */
+	if(H5FD_close(lf)<0)
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to close low-level file info")
+	if (flags & H5F_ACC_TRUNC)
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to truncate a file which is already open")
+	if (flags & H5F_ACC_EXCL)
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "file exists")
+	if ((flags & H5F_ACC_RDWR) && 0 == (shared->flags & H5F_ACC_RDWR))
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "file is already open for read-only")
+
+        /* Allocate new "high-level" file struct */
+        if ((file = H5F_new(shared, fcpl_id, fapl_id)) == NULL)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to create new file object")
+
+	lf = file->shared->lf;
+    } else if (flags!=tent_flags) {
+	/*
+	 * This file is not yet open by the library and the flags we used to
+	 * open it are different than the desired flags. Close the tentative
+	 * file and open it for real.
+	 */
+	if(H5FD_close(lf)<0) {
+	    file = NULL; /*to prevent destruction of wrong file*/
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to close low-level file info")
+        } /* end if */
+	if (NULL==(lf=H5FD_open(name, flags, fapl_id, HADDR_UNDEF))) {
+	    file = NULL; /*to prevent destruction of wrong file*/
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file")
+	}
+	if (NULL==(file = H5F_new(NULL, fcpl_id, fapl_id)))
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to create new file object")
+	file->shared->flags = flags;
+	file->shared->lf = lf;
+    } else {
+	/*
+	 * This file is not yet open by the library and our tentative opening
+	 * above is good enough.
+	 */
+	if (NULL==(file = H5F_new(NULL, fcpl_id, fapl_id)))
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to create new file object")
+
+	file->shared->flags = flags;
+	file->shared->lf = lf;
+    }
+
+    /* Short cuts */
+    shared = file->shared;
+    lf = shared->lf;
+
+    /*
+     * The intent at the top level file struct are not necessarily the same as
+     * the flags at the bottom.	 The top level describes how the file can be
+     * accessed through the HDF5 library.  The bottom level describes how the
+     * file can be accessed through the C library.
+     */
+    file->intent = flags;
+    file->name = H5MM_xstrdup(name);
+
+    /*
+     * Read or write the file superblock, depending on whether the file is
+     * empty or not.
+     */
+    if (0==H5FD_get_eof(lf) && (flags & H5F_ACC_RDWR)) {
+        /*
+         * We've just opened a fresh new file (or truncated one). We need
+         * to create & write the superblock.
+         */
+
+        /* Initialize information about the superblock and allocate space for it */
+        if (H5F_init_superblock(file, dxpl_id)<0)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to allocate file superblock")
+
+	/* Create and open the root group */
+	if (H5G_mkroot(file, dxpl_id, NULL)<0)
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create/open root group")
+
+        /* Write the superblock to the file */
+        /* (This must be after the root group is created, since the root
+         *      group's symbol table entry is part of the superblock)
+         */
+        if (H5F_write_superblock(file, dxpl_id) < 0)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to write file superblock")
+
+    } else if (1 == shared->nrefs) {
+	/* Read the superblock if it hasn't been read before. */
+        if (H5F_read_superblock(file, dxpl_id, &root_ent) < 0)
+	    HGOTO_ERROR(H5E_FILE, H5E_READERROR, NULL, "unable to read superblock")
+
+	/* Make sure we can open the root group */
+	if (H5G_mkroot(file, dxpl_id, &root_ent)<0)
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to read root group")
+    }
+
+    /*
+     * Decide the file close degree.  If it's the first time to open the
+     * file, set the degree to access property list value; if it's the
+     * second time or later, verify the access property list value matches
+     * the degree in shared file structure.
+     */
+    if(NULL == (a_plist = H5I_object(fapl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not file access property list")
+    if(H5P_get(a_plist, H5F_CLOSE_DEGREE_NAME, &fc_degree) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get file close degree")
+
+    if(shared->nrefs == 1) {
+        if(fc_degree == H5F_CLOSE_DEFAULT)
+            shared->fc_degree = shared->lf->cls->fc_degree;
+        else
+            shared->fc_degree = fc_degree;
+    } else if(shared->nrefs > 1) {
+        if(fc_degree==H5F_CLOSE_DEFAULT && shared->fc_degree!=shared->lf->cls->fc_degree)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "file close degree doesn't match")
+        if(fc_degree!=H5F_CLOSE_DEFAULT && fc_degree != shared->fc_degree)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "file close degree doesn't match")
+    }
+
+    /* Success */
+    ret_value = file;
+
+done:
+    if (!ret_value && file)
+        if(H5F_dest(file, dxpl_id)<0)
+            HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, NULL, "problems closing file")
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Fcreate
+ *
+ * Purpose:	This is the primary function for creating HDF5 files . The
+ *		flags parameter determines whether an existing file will be
+ *		overwritten or not.  All newly created files are opened for
+ *		both reading and writing.  All flags may be combined with the
+ *		bit-wise OR operator (`|') to change the behavior of the file
+ *		create call.
+ *
+ *		The more complex behaviors of a file's creation and access
+ *		are controlled through the file-creation and file-access
+ *		property lists.  The value of H5P_DEFAULT for a template
+ *		value indicates that the library should use the default
+ *		values for the appropriate template.
+ *
+ * See also:	H5Fpublic.h for the list of supported flags. H5Ppublic.h for
+ * 		the list of file creation and file access properties.
+ *
+ * Return:	Success:	A file ID
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Unknown
+ *
+ * Modifications:
+ * 		Robb Matzke, 1997-07-18
+ *		File struct creation and destruction is through H5F_new() and
+ *		H5F_dest(). Writing the root symbol table entry is done with
+ *		H5G_encode().
+ *
+ *  		Robb Matzke, 1997-08-29
+ *		Moved creation of the boot block to H5F_flush().
+ *
+ *  		Robb Matzke, 1997-09-23
+ *		Most of the work is now done by H5F_open() since H5Fcreate()
+ *		and H5Fopen() originally contained almost identical code.
+ *
+ * 		Robb Matzke, 1998-02-18
+ *		Better error checking for the creation and access property
+ *		lists. It used to be possible to swap the two and core the
+ *		library.  Also, zero is no longer valid as a default property
+ *		list; one must use H5P_DEFAULT instead.
+ *
+ * 		Robb Matzke, 1999-08-02
+ *		The file creation and file access property lists are passed
+ *		to the H5F_open() as object IDs.
+ *
+ *		Raymond Lu, 2001-10-14
+ *              Changed the file creation and access property list to the
+ * 		new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Fcreate(const char *filename, unsigned flags, hid_t fcpl_id, hid_t fapl_id)
+{
+    H5F_t	*new_file = NULL;	/*file struct for new file	*/
+    hid_t	ret_value;	        /*return value			*/
+
+    FUNC_ENTER_API(H5Fcreate, FAIL)
+    H5TRACE4("i","sIuii",filename,flags,fcpl_id,fapl_id);
+
+    /* Check/fix arguments */
+    if (!filename || !*filename)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file name")
+    if (flags & ~(H5F_ACC_EXCL|H5F_ACC_TRUNC|H5F_ACC_DEBUG))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid flags")
+    if ((flags & H5F_ACC_EXCL) && (flags & H5F_ACC_TRUNC))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "mutually exclusive flags for file creation")
+
+    /* Check file creation property list */
+    if(H5P_DEFAULT == fcpl_id)
+        fcpl_id = H5P_FILE_CREATE_DEFAULT;
+    else
+        if(TRUE != H5P_isa_class(fcpl_id, H5P_FILE_CREATE))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not file create property list")
+
+    /* Check the file access property list */
+    if(H5P_DEFAULT == fapl_id)
+        fapl_id = H5P_FILE_ACCESS_DEFAULT;
+    else
+        if(TRUE != H5P_isa_class(fapl_id, H5P_FILE_ACCESS))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not file access property list")
+
+    /*
+     * Adjust bit flags by turning on the creation bit and making sure that
+     * the EXCL or TRUNC bit is set.  All newly-created files are opened for
+     * reading and writing.
+     */
+    if (0==(flags & (H5F_ACC_EXCL|H5F_ACC_TRUNC)))
+	flags |= H5F_ACC_EXCL;	 /*default*/
+    flags |= H5F_ACC_RDWR | H5F_ACC_CREAT;
+
+    /*
+     * Create a new file or truncate an existing file.
+     */
+    if (NULL==(new_file=H5F_open(filename, flags, fcpl_id, fapl_id, H5AC_dxpl_id)))
+	HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to create file")
+
+    /* Get an atom for the file */
+    if ((ret_value = H5I_register(H5I_FILE, new_file))<0)
+	HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize file")
+
+    /* Keep this ID in file object structure */
+    new_file->file_id = ret_value;
+
+done:
+    if (ret_value<0 && new_file)
+        if(H5F_close(new_file)<0)
+            HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "problems closing file")
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Fopen
+ *
+ * Purpose:	This is the primary function for accessing existing HDF5
+ *		files.  The FLAGS argument determines whether writing to an
+ *		existing file will be allowed or not.  All flags may be
+ *		combined with the bit-wise OR operator (`|') to change the
+ *		behavior of the file open call.  The more complex behaviors
+ *		of a file's access are controlled through the file-access
+ *		property list.
+ *
+ * See Also:	H5Fpublic.h for a list of possible values for FLAGS.
+ *
+ * Return:	Success:	A file ID
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Unknown
+ *
+ * Modifications:
+ *	  	Robb Matzke, 1997-07-18
+ *		File struct creation and destruction is through H5F_new() and
+ *		H5F_dest(). Reading the root symbol table entry is done with
+ *		H5G_decode().
+ *
+ *  		Robb Matzke, 1997-09-23
+ *		Most of the work is now done by H5F_open() since H5Fcreate()
+ *		and H5Fopen() originally contained almost identical code.
+ *
+ *	 	Robb Matzke, 1998-02-18
+ *		Added better error checking for the flags and the file access
+ *		property list.  It used to be possible to make the library
+ *		dump core by passing an object ID that was not a file access
+ *		property list.
+ *
+ * 		Robb Matzke, 1999-08-02
+ *		The file access property list is passed to the H5F_open() as
+ *		object IDs.
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Fopen(const char *filename, unsigned flags, hid_t fapl_id)
+{
+    H5F_t	*new_file = NULL;	/*file struct for new file	*/
+    hid_t	ret_value;	        /*return value			*/
+
+    FUNC_ENTER_API(H5Fopen, FAIL)
+    H5TRACE3("i","sIui",filename,flags,fapl_id);
+
+    /* Check/fix arguments. */
+    if (!filename || !*filename)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file name")
+    if ((flags & ~H5F_ACC_PUBLIC_FLAGS) ||
+            (flags & H5F_ACC_TRUNC) || (flags & H5F_ACC_EXCL))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file open flags")
+    if(H5P_DEFAULT == fapl_id)
+        fapl_id = H5P_FILE_ACCESS_DEFAULT;
+    else
+        if(TRUE != H5P_isa_class(fapl_id, H5P_FILE_ACCESS))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not file access property list")
+
+    /* Open the file */
+    if (NULL==(new_file=H5F_open(filename, flags, H5P_FILE_CREATE_DEFAULT, fapl_id, H5AC_dxpl_id)))
+	HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to open file")
+
+    /* Get an atom for the file */
+    if ((ret_value = H5I_register(H5I_FILE, new_file))<0)
+	HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize file handle")
+
+    /* Keep this ID in file object structure */
+    new_file->file_id = ret_value;
+
+done:
+    if (ret_value<0 && new_file)
+        if(H5F_close(new_file)<0)
+            HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "problems closing file")
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Fflush
+ *
+ * Purpose:	Flushes all outstanding buffers of a file to disk but does
+ *		not remove them from the cache.  The OBJECT_ID can be a file,
+ *		dataset, group, attribute, or named data type.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, August  6, 1998
+ *
+ * Modifications:
+ * 		Robb Matzke, 1998-10-16
+ *		Added the `scope' argument.
+ *
+ *		Bill Wendling, 2003-03-18
+ *		Modified H5F_flush call to take one flag instead of
+ *		several Boolean flags.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Fflush(hid_t object_id, H5F_scope_t scope)
+{
+    H5F_t	*f = NULL;
+    H5G_t	*grp = NULL;
+    H5T_t	*type = NULL;
+    H5D_t	*dset = NULL;
+    H5A_t	*attr = NULL;
+    H5G_entry_t	*ent = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Fflush, FAIL)
+    H5TRACE2("e","iFs",object_id,scope);
+
+    switch (H5I_get_type(object_id)) {
+        case H5I_FILE:
+            if (NULL==(f=H5I_object(object_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid file identifier")
+            break;
+
+        case H5I_GROUP:
+            if (NULL==(grp=H5I_object(object_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid group identifier")
+            ent = H5G_entof(grp);
+            break;
+
+        case H5I_DATATYPE:
+            if (NULL==(type=H5I_object(object_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid type identifier")
+            ent = H5T_entof(type);
+            break;
+
+        case H5I_DATASET:
+            if (NULL==(dset=H5I_object(object_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid dataset identifier")
+            ent = H5D_entof(dset);
+            break;
+
+        case H5I_ATTR:
+            if (NULL==(attr=H5I_object(object_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid attribute identifier")
+            ent = H5A_entof(attr);
+            break;
+
+        default:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file or file object")
+    }
+
+    if (!f) {
+	if (!ent)
+	    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "object is not assocated with a file")
+	f = ent->file;
+    }
+    if (!f)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "object is not associated with a file")
+
+    /* Flush the file */
+    if (H5F_flush(f, H5AC_dxpl_id, scope, H5F_FLUSH_NONE) < 0)
+	HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "flush failed")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_flush
+ *
+ * Purpose:	Flushes (and optionally invalidates) cached data plus the
+ *		file super block.  If the logical file size field is zero
+ *		then it is updated to be the length of the super block.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug 29 1997
+ *
+ * Modifications:
+ *              rky 1998-08-28
+ *		Only p0 writes metadata to disk.
+ *
+ * 		Robb Matzke, 1998-10-16
+ *		Added the `scope' argument to indicate what should be
+ *		flushed. If the value is H5F_SCOPE_GLOBAL then the entire
+ *		virtual file is flushed; a value of H5F_SCOPE_LOCAL means
+ *		that only the specified file is flushed.  A value of
+ *		H5F_SCOPE_DOWN means flush the specified file and all
+ *		children.
+ *
+ * 		Robb Matzke, 1999-08-02
+ *		If ALLOC_ONLY is non-zero then all this function does is
+ *		allocate space for the userblock and superblock. Also
+ *		rewritten to use the virtual file layer.
+ *
+ * 		Robb Matzke, 1999-08-16
+ *		The driver information block is encoded and either allocated
+ *		or written to disk.
+ *
+ *		Raymond Lu, 2001-10-14
+ *              Changed to new generic property list.
+ *
+ *		Quincey Koziol, 2002-05-20
+ *              Added 'closing' parameter
+ *
+ *		Quincey Koziol, 2002-06-05
+ *              Added boot block & driver info block checksumming, to avoid
+ *              writing them out when they haven't changed.
+ *
+ *		Quincey Koziol, 2002-06-06
+ *              Return the remainders of the metadata & "small data" blocks to
+ *              the free list of blocks for the file.
+ *
+ *              Bill Wendling, 2003-03-18
+ *              Modified the flags being passed in to be one flag instead
+ *              of several.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5F_flush(H5F_t *f, hid_t dxpl_id, H5F_scope_t scope, unsigned flags)
+{
+    unsigned		nerrors = 0;    /* Errors from nested flushes */
+    unsigned		i;              /* Index variable */
+    herr_t              ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_flush)
+
+    /* Sanity check arguments */
+    assert(f);
+
+    /*
+     * Nothing to do if the file is read only.	This determination is
+     * made at the shared open(2) flags level, implying that opening a
+     * file twice, once for read-only and once for read-write, and then
+     * calling H5F_flush() with the read-only handle, still causes data
+     * to be flushed.
+     */
+    if (0 == (H5F_ACC_RDWR & f->shared->flags))
+	HGOTO_DONE(SUCCEED)
+
+    /* Flush other stuff depending on scope */
+    if (H5F_SCOPE_GLOBAL == scope) {
+	while (f->mtab.parent)
+            f = f->mtab.parent;
+
+	scope = H5F_SCOPE_DOWN;
+    }
+
+    if (H5F_SCOPE_DOWN == scope)
+        for (i = 0; i < f->mtab.nmounts; i++)
+            if (H5F_flush(f->mtab.child[i].file, dxpl_id, scope, flags) < 0)
+                nerrors++;
+
+    /* Flush any cached dataset storage raw data */
+    if (H5D_flush(f, dxpl_id, flags) < 0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush dataset cache")
+
+    /* flush (and invalidate) the entire meta data cache */
+    if (H5AC_flush(f, dxpl_id, flags & (H5F_FLUSH_INVALIDATE | H5F_FLUSH_CLEAR_ONLY)) < 0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush meta data cache")
+
+    /*
+     * If we are invalidating everything (which only happens just before
+     * the file closes), release the unused portion of the metadata and
+     * "small data" blocks back to the free lists in the file.
+     */
+    if (flags & H5F_FLUSH_INVALIDATE) {
+            if (f->shared->lf->feature_flags & H5FD_FEAT_AGGREGATE_METADATA) {
+                /* Return the unused portion of the metadata block to a free list */
+                if (f->shared->lf->eoma != 0)
+                    if (H5FD_free(f->shared->lf, H5FD_MEM_DEFAULT, dxpl_id,
+                            f->shared->lf->eoma, f->shared->lf->cur_meta_block_size) < 0)
+                        HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, FAIL, "can't free metadata block")
+
+                /* Reset metadata block information, just in case */
+                f->shared->lf->eoma=0;
+                f->shared->lf->cur_meta_block_size=0;
+            } /* end if */
+
+            if (f->shared->lf->feature_flags & H5FD_FEAT_AGGREGATE_SMALLDATA) {
+                /* Return the unused portion of the "small data" block to a free list */
+                if (f->shared->lf->eosda != 0)
+                    if (H5FD_free(f->shared->lf, H5FD_MEM_DRAW, dxpl_id,
+                            f->shared->lf->eosda, f->shared->lf->cur_sdata_block_size) < 0)
+                        HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, FAIL, "can't free 'small data' block")
+
+                /* Reset "small data" block information, just in case */
+                f->shared->lf->eosda=0;
+                f->shared->lf->cur_sdata_block_size=0;
+            } /* end if */
+
+    } /* end if */
+
+    /* Write the superblock to disk */
+    if (H5F_write_superblock(f, dxpl_id) != SUCCEED)
+        HGOTO_ERROR(H5E_CACHE, H5E_WRITEERROR, FAIL, "unable to write superblock to file")
+
+    /* Flush file buffers to disk. */
+    if (H5FD_flush(f->shared->lf, dxpl_id,
+                   (unsigned)((flags & H5F_FLUSH_CLOSING) > 0)) < 0)
+        HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "low level flush failed")
+
+    /* Check flush errors for children - errors are already on the stack */
+    ret_value = (nerrors ? FAIL : SUCCEED);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_flush() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_close
+ *
+ * Purpose:	Closes a file or causes the close operation to be pended.
+ *		This function is called two ways: from the API it gets called
+ *		by H5Fclose->H5I_dec_ref->H5F_close when H5I_dec_ref()
+ *		decrements the file ID reference count to zero.  The file ID
+ *		is removed from the H5I_FILE group by H5I_dec_ref() just
+ *		before H5F_close() is called. If there are open object
+ *		headers then the close is pended by moving the file to the
+ *		H5I_FILE_CLOSING ID group (the f->closing contains the ID
+ *		assigned to file).
+ *
+ *		This function is also called directly from H5O_close() when
+ *		the last object header is closed for the file and the file
+ *		has a pending close.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, September 23, 1997
+ *
+ * Modifications:
+ * 		Robb Matzke, 1998-10-14
+ *		Nothing happens unless the H5F_t reference count is one (the
+ *		file is flushed anyway).  The reference count is decremented
+ *		by H5F_dest().
+ *
+ * 		Robb Matzke, 1999-08-02
+ *		Modified to use the virtual file layer.
+ *
+ *		Bill Wendling, 2003-03-18
+ *		Modified H5F_flush call to take one flag instead of
+ *		several Boolean flags.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5F_close(H5F_t *f)
+{
+    herr_t	        ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_close)
+
+    /* Sanity check */
+    HDassert(f);
+    HDassert(f->file_id > 0);   /* This routine should only be called when a file ID's ref count drops to zero */
+
+    /* Perform checks for "semi" file close degree here, since closing the
+     * file is not allowed if there are objects still open */
+    if(f->shared->fc_degree == H5F_CLOSE_SEMI) {
+        unsigned nopen_files = 0;       /* Number of open files in file/mount hierarchy */
+        unsigned nopen_objs = 0;        /* Number of open objects in file/mount hierarchy */
+
+        /* Get the number of open objects and open files on this file/mount hierarchy */
+        if(H5F_mount_count_ids(f, &nopen_files, &nopen_objs) < 0)
+            HGOTO_ERROR(H5E_SYM, H5E_MOUNT, FAIL, "problem checking mount hierarchy")
+
+        /* If there are no other file IDs open on this file/mount hier., but
+         * there are still open objects, issue an error and bail out now,
+         * without decrementing the file ID's reference count and triggering
+         * a "real" attempt at closing the file */
+        if(nopen_files == 1 && nopen_objs > 0)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close file, there are objects still open")
+    } /* end if */
+
+    /* Reset the file ID for this file */
+    f->file_id = -1;
+
+    /* Attempt to close the file/mount hierarchy */
+    if(H5F_try_close(f) < 0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close file")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_close() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_try_close
+ *
+ * Purpose:	Attempts to close a file due to one of several actions:
+ *                      - The reference count on the file ID dropped to zero
+ *                      - The last open object was closed in the file
+ *                      - The file was unmounted
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Tuesday, July 19, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_try_close(H5F_t *f)
+{
+    unsigned            nopen_files = 0;        /* Number of open files in file/mount hierarchy */
+    unsigned            nopen_objs = 0;         /* Number of open objects in file/mount hierarchy */
+    herr_t	        ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_try_close)
+
+    /* Sanity check */
+    HDassert(f);
+
+    /* Check if this file is already in the process of closing */
+    if(f->closing)
+        HGOTO_DONE(SUCCEED)
+
+    /* Get the number of open objects and open files on this file/mount hierarchy */
+    if(H5F_mount_count_ids(f, &nopen_files, &nopen_objs) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_MOUNT, FAIL, "problem checking mount hierarchy")
+
+    /*
+     * Close file according to close degree:
+     *
+     *  H5F_CLOSE_WEAK:	if there are still objects open, wait until
+     *			they are all closed.
+     *  H5F_CLOSE_SEMI:	if there are still objects open, return fail;
+     *			otherwise, close file.
+     *  H5F_CLOSE_STRONG:	if there are still objects open, close them
+     *			first, then close file.
+     */
+    switch(f->shared->fc_degree) {
+        case H5F_CLOSE_WEAK:
+            /*
+             * If file or object IDS are still open then delay deletion of
+             * resources until they have all been closed.  Flush all
+             * caches and update the object header anyway so that failing to
+             * close all objects isn't a major problem.
+             */
+            if ((nopen_files + nopen_objs) > 0)
+                HGOTO_DONE(SUCCEED)
+            break;
+
+        case H5F_CLOSE_SEMI:
+            /* Can leave safely if file IDs are still open on this file */
+            if (nopen_files > 0)
+                HGOTO_DONE(SUCCEED)
+
+            /* Sanity check: If close degree if "semi" and we have gotten this
+             * far and there are objects left open, bail out now */
+            HDassert(nopen_files == 0 && nopen_objs == 0);
+
+            /* If we've gotten this far (ie. there are no open objects in the file), fall through to flush & close */
+            break;
+
+        case H5F_CLOSE_STRONG:
+            /* If there are other open files in the hierarchy, we can leave now */
+            if(nopen_files > 0)
+                HGOTO_DONE(SUCCEED)
+
+            /* If we've gotten this far (ie. there are no open file IDs in the file/mount hierarchy), fall through to flush & close */
+            break;
+
+        default:
+            HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close file, unknown file close degree")
+    } /* end switch */
+
+    /* Mark this file as closing (prevents re-entering file shutdown code below) */
+    f->closing = TRUE;
+
+    /* If the file close degree is "strong", close all the open objects in this file */
+    if(f->shared->fc_degree == H5F_CLOSE_STRONG) {
+        HDassert(nopen_files ==  0);
+
+        /* Forced close of all opened objects in this file */
+        if(f->nopen_objs > 0) {
+            unsigned obj_count;     /* # of open objects */
+            hid_t objs[128];        /* Array of objects to close */
+            unsigned u;             /* Local index variable */
+
+            /* Get the list of IDs of open dataset, group, & attribute objects */
+            while((obj_count = H5F_get_obj_ids(f, H5F_OBJ_LOCAL|H5F_OBJ_DATASET|H5F_OBJ_GROUP|H5F_OBJ_ATTR, (int)(sizeof(objs)/sizeof(objs[0])), objs)) != 0) {
+
+                /* Try to close all the open objects in this file */
+                for(u = 0; u < obj_count; u++)
+                    if(H5I_dec_ref(objs[u]) < 0)
+                        HGOTO_ERROR(H5E_ATOM, H5E_CLOSEERROR, FAIL, "can't close object")
+            } /* end while */
+
+            /* Get the list of IDs of open named datatype objects */
+            /* (Do this separately from the dataset & attribute IDs, because
+             * they could be using one of the named datatypes and then the
+             * open named datatype ID will get closed twice.
+             */
+            while((obj_count = H5F_get_obj_ids(f, H5F_OBJ_LOCAL|H5F_OBJ_DATATYPE, (int)(sizeof(objs)/sizeof(objs[0])), objs)) != 0) {
+
+                /* Try to close all the open objects in this file */
+                for(u = 0; u < obj_count; u++)
+                    if(H5I_dec_ref(objs[u]) < 0)
+                        HGOTO_ERROR(H5E_ATOM, H5E_CLOSEERROR, FAIL, "can't close object")
+            } /* end while */
+        } /* end if */
+    } /* end if */
+
+    /* Check if this is a child file in a mounting hierarchy & proceed up the
+     * hierarchy if so.
+     */
+    if(f->mtab.parent)
+        if(H5F_try_close(f->mtab.parent) < 0)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close parent file")
+
+    /* Unmount and close each child before closing the current file. */
+    if(H5F_close_mounts(f) < 0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't unmount child files")
+
+#if H5AC_DUMP_STATS_ON_CLOSE
+    /* Dump debugging info */
+    H5AC_stats(f);
+#endif /* H5AC_DUMP_STATS_ON_CLOSE */
+
+    /* Flush at this point since the file will be closed */
+    /* (Only try to flush the file if it was opened with write access) */
+    if(f->intent&H5F_ACC_RDWR) {
+        /* Flush and destroy all caches */
+        if (H5F_flush(f, H5AC_dxpl_id, H5F_SCOPE_LOCAL, H5F_FLUSH_INVALIDATE | H5F_FLUSH_CLOSING) < 0)
+            HGOTO_ERROR(H5E_CACHE, H5E_CANTFLUSH, FAIL, "unable to flush cache")
+    } /* end if */
+
+    /*
+     * Destroy the H5F_t struct and decrement the reference count for the
+     * shared H5F_file_t struct. If the reference count for the H5F_file_t
+     * struct reaches zero then destroy it also.
+     */
+    if (H5F_dest(f, H5AC_dxpl_id) < 0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "problems closing file")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_try_close() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Fclose
+ *
+ * Purpose:	This function closes the file specified by FILE_ID by
+ *		flushing all data to storage, and terminating access to the
+ *		file through FILE_ID.  If objects (e.g., datasets, groups,
+ *		etc.) are open in the file then the underlying storage is not
+ *		closed until those objects are closed; however, all data for
+ *		the file and the open objects is flushed.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Saturday, February 20, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Fclose(hid_t file_id)
+{
+    herr_t	ret_value = SUCCEED;
+
+    FUNC_ENTER_API(H5Fclose, FAIL)
+    H5TRACE1("e","i",file_id);
+
+    /* Check/fix arguments. */
+    if (H5I_FILE != H5I_get_type(file_id))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file ID")
+
+    /*
+     * Decrement reference count on atom.  When it reaches zero the file will
+     * be closed.
+     */
+    if (H5I_dec_ref (file_id)<0)
+	HGOTO_ERROR (H5E_ATOM, H5E_CANTCLOSEFILE, FAIL, "decrementing file ID failed")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Freopen
+ *
+ * Purpose:	Reopen a file.  The new file handle which is returned points
+ *		to the same file as the specified file handle.  Both handles
+ *		share caches and other information.  The only difference
+ *		between the handles is that the new handle is not mounted
+ *		anywhere and no files are mounted on it.
+ *
+ * Return:	Success:	New file ID
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, October 16, 1998
+ *
+ * Modifications:
+ *              Quincey Koziol, May 14, 2002
+ *              Keep old file's read/write intent in reopened file.
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Freopen(hid_t file_id)
+{
+    H5F_t	*old_file=NULL;
+    H5F_t	*new_file=NULL;
+    hid_t	ret_value;
+
+    FUNC_ENTER_API(H5Freopen, FAIL)
+    H5TRACE1("i","i",file_id);
+
+    if (NULL==(old_file=H5I_object_verify(file_id, H5I_FILE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
+
+    /* Get a new "top level" file struct, sharing the same "low level" file struct */
+    if (NULL==(new_file=H5F_new(old_file->shared, H5P_FILE_CREATE_DEFAULT, H5P_FILE_ACCESS_DEFAULT)))
+	HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to reopen file")
+
+    /* Keep old file's read/write intent in new file */
+    new_file->intent=old_file->intent;
+
+    /* Duplicate old file's name */
+    new_file->name = H5MM_xstrdup(old_file->name);
+
+    if ((ret_value=H5I_register(H5I_FILE, new_file))<0)
+	HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize file handle")
+
+    /* Keep this ID in file object structure */
+    new_file->file_id = ret_value;
+
+done:
+    if (ret_value<0 && new_file)
+	if(H5F_dest(new_file, H5AC_dxpl_id)<0)
+	    HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close file")
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_get_intent
+ *
+ * Purpose:	Quick and dirty routine to retrieve the file's 'intent' flags
+ *          (Mainly added to stop non-file routines from poking about in the
+ *          H5F_t data structure)
+ *
+ * Return:	'intent' on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *		September 29, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+unsigned
+H5F_get_intent(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_intent)
+
+    assert(f);
+
+    FUNC_LEAVE_NOAPI(f->intent)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_sizeof_addr
+ *
+ * Purpose:	Quick and dirty routine to retrieve the size of the file's size_t
+ *          (Mainly added to stop non-file routines from poking about in the
+ *          H5F_t data structure)
+ *
+ * Return:	'sizeof_addr' on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *		September 29, 2000
+ *
+ * Modifications:
+ *
+ *		Raymond Lu, Oct 14, 2001
+ *		Changed to generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5F_sizeof_addr(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_sizeof_addr)
+
+    assert(f);
+    assert(f->shared);
+
+    FUNC_LEAVE_NOAPI(f->shared->sizeof_addr)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_sizeof_size
+ *
+ * Purpose:	Quick and dirty routine to retrieve the size of the file's off_t
+ *          (Mainly added to stop non-file routines from poking about in the
+ *          H5F_t data structure)
+ *
+ * Return:	'sizeof_size' on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *		September 29, 2000
+ *
+ * Modifications:
+ *
+ * 		Raymond Lu, Oct 14, 2001
+ *		Changed to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5F_sizeof_size(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_sizeof_size)
+
+    assert(f);
+    assert(f->shared);
+
+    FUNC_LEAVE_NOAPI(f->shared->sizeof_size)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_sym_leaf_k
+ *
+ * Purpose:	Replaced a macro to retrieve the symbol table leaf size,
+ *              now that the generic properties are being used to store
+ *              the values.
+ *
+ * Return:	Success:	Non-negative, and the symbol table leaf size is
+ *                              returned.
+ *
+ * 		Failure:	Negative (should not happen)
+ *
+ * Programmer:	Raymond Lu
+ *		slu at ncsa.uiuc.edu
+ *		Oct 14 2001
+ *
+ * Modifications:
+ *		Quincey Koziol, 2001-10-15
+ *		Added this header and removed unused ret_value variable.
+ *-------------------------------------------------------------------------
+ */
+unsigned
+H5F_sym_leaf_k(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_sym_leaf_k)
+
+    assert(f);
+    assert(f->shared);
+
+    FUNC_LEAVE_NOAPI(f->shared->sym_leaf_k)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_Kvalue
+ *
+ * Purpose:	Replaced a macro to retrieve a B-tree key value for a certain
+ *              type, now that the generic properties are being used to store
+ *              the B-tree values.
+ *
+ * Return:	Success:	Non-negative, and the B-tree key value is
+ *                              returned.
+ *
+ * 		Failure:	Negative (should not happen)
+ *
+ * Programmer:	Raymond Lu
+ *		slu at ncsa.uiuc.edu
+ *		Oct 14 2001
+ *
+ * Modifications:
+ *		Quincey Koziol, 2001-10-15
+ *		Added this header and removed unused ret_value variable.
+ *-------------------------------------------------------------------------
+ */
+unsigned
+H5F_Kvalue(const H5F_t *f, const H5B_class_t *type)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_Kvalue)
+
+    assert(f);
+    assert(f->shared);
+    assert(type);
+
+    FUNC_LEAVE_NOAPI(f->shared->btree_k[type->id])
+} /* end H5F_Kvalue() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_rdcc_nelmts
+ *
+ * Purpose:	Replaced a macro to retrieve the raw data cache number of elments,
+ *              now that the generic properties are being used to store
+ *              the values.
+ *
+ * Return:	Success:	Non-negative, and the raw data cache number of
+ *                              of elemnts is returned.
+ *
+ * 		Failure:	Negative (should not happen)
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Jun  1 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5F_rdcc_nelmts(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_rdcc_nelmts)
+
+    assert(f);
+    assert(f->shared);
+
+    FUNC_LEAVE_NOAPI(f->shared->rdcc_nelmts)
+} /* end H5F_rdcc_nelmts() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_rdcc_nbytes
+ *
+ * Purpose:	Replaced a macro to retrieve the raw data cache number of bytes,
+ *              now that the generic properties are being used to store
+ *              the values.
+ *
+ * Return:	Success:	Non-negative, and the raw data cache number of
+ *                              of bytes is returned.
+ *
+ * 		Failure:	Negative (should not happen)
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Jun  1 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5F_rdcc_nbytes(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_rdcc_nbytes)
+
+    assert(f);
+    assert(f->shared);
+
+    FUNC_LEAVE_NOAPI(f->shared->rdcc_nbytes)
+} /* end H5F_rdcc_nbytes() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_rdcc_w0
+ *
+ * Purpose:	Replaced a macro to retrieve the raw data cache 'w0' value
+ *              now that the generic properties are being used to store
+ *              the values.
+ *
+ * Return:	Success:	Non-negative, and the raw data cache 'w0' value
+ *                              is returned.
+ *
+ * 		Failure:	Negative (should not happen)
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Jun  2 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+double
+H5F_rdcc_w0(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_rdcc_w0)
+
+    assert(f);
+    assert(f->shared);
+
+    FUNC_LEAVE_NOAPI(f->shared->rdcc_w0)
+} /* end H5F_rdcc_w0() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_has_feature
+ *
+ * Purpose:	Check if a file has a particular feature enabled
+ *
+ * Return:	Success:	Non-negative - TRUE or FALSE
+ * 		Failure:	Negative (should not happen)
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		May 31 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hbool_t
+H5F_has_feature(const H5F_t *f, unsigned feature)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_has_feature)
+
+    assert(f);
+    assert(f->shared);
+
+    FUNC_LEAVE_NOAPI((hbool_t)(f->shared->lf->feature_flags&feature))
+} /* end H5F_has_feature() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_get_driver_id
+ *
+ * Purpose:	Quick and dirty routine to retrieve the file's 'driver_id' value
+ *          (Mainly added to stop non-file routines from poking about in the
+ *          H5F_t data structure)
+ *
+ * Return:	'driver_id' on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *		October 10, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5F_get_driver_id(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_driver_id)
+
+    assert(f);
+    assert(f->shared);
+    assert(f->shared->lf);
+
+    FUNC_LEAVE_NOAPI(f->shared->lf->driver_id)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_get_fileno
+ *
+ * Purpose:	Quick and dirty routine to retrieve the file's 'fileno' value
+ *          (Mainly added to stop non-file routines from poking about in the
+ *          H5F_t data structure)
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *		March 27, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_get_fileno(const H5F_t *f, unsigned long *filenum)
+{
+    herr_t	ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5F_get_fileno, FAIL)
+
+    assert(f);
+    assert(f->shared);
+    assert(f->shared->lf);
+    assert(filenum);
+
+    /* Retrieve the file's serial number */
+    if(H5FD_get_fileno(f->shared->lf,filenum)<0)
+	HGOTO_ERROR(H5E_FILE, H5E_BADRANGE, FAIL, "can't retrieve fileno")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_get_fileno() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_get_id
+ *
+ * Purpose:	Get the file ID, incrementing it, or "resurrecting" it as
+ *              appropriate.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Raymond Lu
+ *		Oct 29, 2003
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5F_get_id(H5F_t *file)
+{
+    hid_t       ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_get_id)
+
+    assert(file);
+
+    if(file->file_id == -1) {
+        /* Get an atom for the file */
+        if ((file->file_id = H5I_register(H5I_FILE, file))<0)
+	    HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to atomize file")
+    } else {
+        /* Increment reference count on atom. */
+        if (H5I_inc_ref(file->file_id)<0)
+            HGOTO_ERROR (H5E_ATOM, H5E_CANTSET, FAIL, "incrementing file ID failed")
+    }
+
+    ret_value = file->file_id;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_get_id() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_get_base_addr
+ *
+ * Purpose:	Quick and dirty routine to retrieve the file's 'base_addr' value
+ *          (Mainly added to stop non-file routines from poking about in the
+ *          H5F_t data structure)
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Raymond Lu <slu at ncsa.uiuc.edu>
+ *		December 20, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5F_get_base_addr(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_base_addr)
+
+    assert(f);
+    assert(f->shared);
+
+    FUNC_LEAVE_NOAPI(f->shared->base_addr)
+} /* end H5F_get_base_addr() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_get_eoa
+ *
+ * Purpose:	Quick and dirty routine to retrieve the file's 'eoa' value
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *		June 1, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5F_get_eoa(const H5F_t *f)
+{
+    haddr_t	ret_value;
+
+    FUNC_ENTER_NOAPI(H5F_get_eoa, HADDR_UNDEF)
+
+    assert(f);
+    assert(f->shared);
+
+    /* Dispatch to driver */
+    if (HADDR_UNDEF==(ret_value=H5FD_get_eoa(f->shared->lf)))
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, HADDR_UNDEF, "driver get_eoa request failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_get_eoa() */
+
+#ifdef H5_HAVE_PARALLEL
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_mpi_get_rank
+ *
+ * Purpose:	Retrieves the rank of an MPI process.
+ *
+ * Return:	Success:	The rank (non-negative)
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, January 30, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5F_mpi_get_rank(const H5F_t *f)
+{
+    int	ret_value;
+
+    FUNC_ENTER_NOAPI(H5F_mpi_get_rank, FAIL)
+
+    assert(f && f->shared);
+
+    /* Dispatch to driver */
+    if ((ret_value=H5FD_mpi_get_rank(f->shared->lf))<0)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTGET, FAIL, "driver get_rank request failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_mpi_get_rank() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_mpi_get_comm
+ *
+ * Purpose:	Retrieves the file's communicator
+ *
+ * Return:	Success:	The communicator (non-negative)
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, January 30, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+MPI_Comm
+H5F_mpi_get_comm(const H5F_t *f)
+{
+    MPI_Comm	ret_value;
+
+    FUNC_ENTER_NOAPI(H5F_mpi_get_comm, MPI_COMM_NULL)
+
+    assert(f && f->shared);
+
+    /* Dispatch to driver */
+    if ((ret_value=H5FD_mpi_get_comm(f->shared->lf))==MPI_COMM_NULL)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTGET, MPI_COMM_NULL, "driver get_comm request failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_mpi_get_comm() */
+#endif /* H5_HAVE_PARALLEL */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_grp_btree_shared
+ *
+ * Purpose:	Replaced a macro to retrieve the shared B-tree node info
+ *              now that the generic properties are being used to store
+ *              the values.
+ *
+ * Return:	Success:	Non-void, and the shared B-tree node info
+ *                              is returned.
+ *
+ * 		Failure:	void (should not happen)
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Jul  5 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5RC_t *
+H5F_grp_btree_shared(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_grp_btree_shared)
+
+    assert(f);
+    assert(f->shared);
+
+    FUNC_LEAVE_NOAPI(f->shared->grp_btree_shared)
+} /* end H5F_grp_btree_shared() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_sieve_buf_size
+ *
+ * Purpose:	Replaced a macro to retrieve the dataset sieve buffer size
+ *              now that the generic properties are being used to store
+ *              the values.
+ *
+ * Return:	Success:	Non-void, and the dataset sieve buffer size
+ *                              is returned.
+ *
+ * 		Failure:	void (should not happen)
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Jul  8 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5F_sieve_buf_size(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_sieve_buf_size)
+
+    assert(f);
+    assert(f->shared);
+
+    FUNC_LEAVE_NOAPI(f->shared->sieve_buf_size)
+} /* end H5F_sieve_buf_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_block_read
+ *
+ * Purpose:	Reads some data from a file/server/etc into a buffer.
+ *		The data is contiguous.	 The address is relative to the base
+ *		address for the file.
+ *
+ * Errors:
+ *		IO	  READERROR	Low-level read failed.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 10 1997
+ *
+ * Modifications:
+ *		Albert Cheng, 1998-06-02
+ *		Added XFER_MODE argument
+ *
+ * 		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ * 		Robb Matzke, 1999-08-02
+ *		Modified to use the virtual file layer. The data transfer
+ *		property list is passed in by object ID since that's how the
+ *		virtual file layer needs it.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_block_read(const H5F_t *f, H5FD_mem_t type, haddr_t addr, size_t size, hid_t dxpl_id,
+	       void *buf/*out*/)
+{
+    haddr_t		    abs_addr;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5F_block_read, FAIL)
+
+    assert (f);
+    assert (f->shared);
+    assert(size<SIZET_MAX);
+    assert (buf);
+
+    /* convert the relative address to an absolute address */
+    abs_addr = f->shared->base_addr + addr;
+
+    /* Read the data */
+    if (H5FD_read(f->shared->lf, type, dxpl_id, abs_addr, size, buf)<0)
+	HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_block_write
+ *
+ * Purpose:	Writes some data from memory to a file/server/etc.  The
+ *		data is contiguous.  The address is relative to the base
+ *		address.
+ *
+ * Errors:
+ *		IO	  WRITEERROR	Low-level write failed.
+ *		IO	  WRITEERROR	No write intent.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 10 1997
+ *
+ * Modifications:
+ *		Albert Cheng, 1998-06-02
+ *		Added XFER_MODE argument
+ *
+ * 		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ * 		Robb Matzke, 1999-08-02
+ *		Modified to use the virtual file layer. The data transfer
+ *		property list is passed in by object ID since that's how the
+ *		virtual file layer needs it.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_block_write(const H5F_t *f, H5FD_mem_t type, haddr_t addr, size_t size,
+        hid_t dxpl_id, const void *buf)
+{
+    haddr_t		    abs_addr;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5F_block_write, FAIL)
+
+    assert (f);
+    assert (f->shared);
+    assert (size<SIZET_MAX);
+    assert (buf);
+
+    if (0==(f->intent & H5F_ACC_RDWR))
+	HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "no write intent")
+
+    /* Convert the relative address to an absolute address */
+    abs_addr = f->shared->base_addr + addr;
+
+    /* Write the data */
+    if (H5FD_write(f->shared->lf, type, dxpl_id, abs_addr, size, buf))
+	HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_addr_encode
+ *
+ * Purpose:	Encodes an address into the buffer pointed to by *PP and
+ *		then increments the pointer to the first byte after the
+ *		address.  An undefined value is stored as all 1's.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November  7, 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+void
+H5F_addr_encode(const H5F_t *f, uint8_t **pp/*in,out*/, haddr_t addr)
+{
+    unsigned		    i;
+
+    assert(f);
+    assert(pp && *pp);
+
+    if (H5F_addr_defined(addr)) {
+	for (i=0; i<H5F_SIZEOF_ADDR(f); i++) {
+	    *(*pp)++ = (uint8_t)(addr & 0xff);
+	    addr >>= 8;
+	}
+	assert("overflow" && 0 == addr);
+
+    } else {
+	for (i=0; i<H5F_SIZEOF_ADDR(f); i++)
+	    *(*pp)++ = 0xff;
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_addr_decode
+ *
+ * Purpose:	Decodes an address from the buffer pointed to by *PP and
+ *		updates the pointer to point to the next byte after the
+ *		address.
+ *
+ *		If the value read is all 1's then the address is returned
+ *		with an undefined value.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November  7, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+H5F_addr_decode(const H5F_t *f, const uint8_t **pp/*in,out*/, haddr_t *addr_p/*out*/)
+{
+    unsigned		    i;
+    haddr_t		    tmp;
+    uint8_t		    c;
+    hbool_t		    all_zero = TRUE;
+
+    assert(f);
+    assert(pp && *pp);
+    assert(addr_p);
+
+    *addr_p = 0;
+
+    for (i=0; i<H5F_SIZEOF_ADDR(f); i++) {
+	c = *(*pp)++;
+	if (c != 0xff)
+            all_zero = FALSE;
+
+	if (i<sizeof(*addr_p)) {
+	    tmp = c;
+	    tmp <<= (i * 8);	/*use tmp to get casting right */
+	    *addr_p |= tmp;
+	} else if (!all_zero) {
+	    assert(0 == **pp);	/*overflow */
+	}
+    }
+    if (all_zero)
+        *addr_p = HADDR_UNDEF;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_addr_pack
+ *
+ * Purpose:	Converts a long[2] array (usually returned from
+ *		H5G_get_objinfo) back into a haddr_t
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Tuesday, October  23, 1998
+ *
+ * Modifications:
+ *		Albert Cheng, 1999-02-18
+ *		Changed objno to unsigned long type to be consistent with
+ *      	addr->offset and how it is being called.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_addr_pack(H5F_t UNUSED *f, haddr_t *addr_p/*out*/,
+	      const unsigned long objno[2])
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_addr_pack)
+
+    assert(f);
+    assert(objno);
+    assert(addr_p);
+
+    *addr_p = objno[0];
+#if H5_SIZEOF_LONG<H5_SIZEOF_UINT64_T
+    *addr_p |= ((uint64_t)objno[1]) << (8*sizeof(long));
+#endif
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Fget_freespace
+ *
+ * Purpose:     Retrieves the amount of free space (of a given type) in the
+ *              file.  If TYPE is 'H5FD_MEM_DEFAULT', then the amount of free
+ *              space for all types is returned.
+ *
+ * Return:      Success:        Amount of free space for type
+ *              Failure:        Negative
+ *
+ * Programmer:  Quincey Koziol
+ *              koziol at ncsa.uiuc.edu
+ *              Oct  6, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hssize_t
+H5Fget_freespace(hid_t file_id)
+{
+    H5F_t      *file=NULL;      /* File object for file ID */
+    hssize_t    ret_value;      /* Return value */
+
+    FUNC_ENTER_API(H5Fget_freespace, FAIL)
+    H5TRACE1("Hs","i",file_id);
+
+    /* Check args */
+    if(NULL==(file=H5I_object_verify(file_id, H5I_FILE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
+
+    /* Go get the actual amount of free space in the file */
+    if((ret_value = H5FD_get_freespace(file->shared->lf))<0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to check free space for file")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Fget_freespace() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Fget_filesize
+ *
+ * Purpose:     Retrieves the file size of the HDF5 file. This function
+ *              is called after an existing file is opened in order
+ *		to learn the true size of the underlying file.
+ *
+ * Return:      Success:        Non-negative
+ *              Failure:        Negative
+ *
+ * Programmer:  David Pitt
+ *              david.pitt at bigpond.com
+ *              Apr 27, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Fget_filesize(hid_t file_id, hsize_t *size)
+{
+    H5F_t      *file=NULL;      /* File object for file ID */
+    herr_t     ret_value = SUCCEED;      /* Return value */
+    haddr_t    eof;
+
+    FUNC_ENTER_API(H5Fget_filesize, FAIL)
+    H5TRACE2("e","i*h",file_id,size);
+
+    /* Check args */
+    if(NULL==(file=H5I_object_verify(file_id, H5I_FILE)))
+         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a file ID")
+
+    /* Go get the actual file size */
+    if((eof = H5FDget_eof(file->shared->lf))==HADDR_UNDEF)
+         HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to get file size")
+
+    *size = (hsize_t)eof;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Fget_filesize() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Fget_name
+ *
+ * Purpose:     Gets the name of the file to which object OBJ_ID belongs.
+ *              If `name' is non-NULL then write up to `size' bytes into that
+ *              buffer and always return the length of the entry name.
+ *              Otherwise `size' is ignored and the function does not store the name,
+ *              just returning the number of characters required to store the name.
+ *              If an error occurs then the buffer pointed to by `name' (NULL or non-NULL)
+ *              is unchanged and the function returns a negative value.
+ *
+ * Return:      Success:        The length of the file name
+ *              Failure:        Negative
+ *
+ * Programmer:  Raymond Lu
+ *              June 29, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+ssize_t
+H5Fget_name(hid_t obj_id, char *name/*out*/, size_t size)
+{
+    H5G_entry_t   *ent;         /*symbol table entry */
+    H5F_t   *f;               /* Top file in mount hierarchy */
+    size_t        len=0;
+    ssize_t       ret_value;
+
+    FUNC_ENTER_API (H5Fget_name, FAIL)
+    H5TRACE3("Zs","ixz",obj_id,name,size);
+
+    /* For file IDs, get the file object directly */
+    /* (This prevents the H5G_loc() call from returning the file pointer for
+     * the top file in a mount hierarchy)
+     */
+    if(H5I_get_type(obj_id) == H5I_FILE ) {
+        if (NULL==(f=H5I_object(obj_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
+    } /* end if */
+    else {
+        /* Get symbol table entry */
+        if((ent = H5G_loc(obj_id))==NULL)
+             HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a valid object ID")
+        f = ent->file;
+    } /* end else */
+
+    len = HDstrlen(f->name);
+
+    if(name) {
+        HDstrncpy(name, f->name, MIN(len+1,size));
+        if(len >= size)
+            name[size-1]='\0';
+    } /* end if */
+
+    /* Set return value */
+    ret_value=(ssize_t)len;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Fget_name() */
+

Added: packages/hdf5/branches/upstream/current/src/H5FD.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FD.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FD.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3723 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Monday, July 26, 1999
+ *
+ * Purpose:	The Virtual File Layer as described in documentation.
+ *              This is the greatest common denominator for all types of
+ *              storage access whether a file, memory, network, etc. This
+ *              layer usually just dispatches the request to an actual
+ *              file driver layer.
+ */
+
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5FD_init_interface
+
+
+/* Packages needed by this file */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dprivate.h"		/* Datasets				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"             /* File access				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FDcore.h"		/* Files stored entirely in memory	*/
+#include "H5FDfamily.h"		/* File families 			*/
+#include "H5FDgass.h"		/* Remote files using GASS I/O		*/
+#include "H5FDlog.h"        	/* sec2 driver with I/O logging (for debugging) */
+#include "H5FDmpi.h"            /* MPI-based file drivers		*/
+#include "H5FDmulti.h"		/* Usage-partitioned file family	*/
+#include "H5FDsec2.h"		/* POSIX unbuffered file I/O		*/
+#include "H5FDsrb.h"        	/* Remote access using SRB              */
+#include "H5FDstdio.h"		/* Standard C buffered I/O		*/
+#include "H5FDstream.h"     	/* In-memory files streamed via sockets */
+#include "H5FLprivate.h"	/* Free lists                           */
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"		/* Property lists			*/
+
+/* static prototypes */
+static herr_t H5FD_pl_copy(void *(*copy_func)(const void *), size_t pl_size,
+    const void *old_pl, void **copied_pl);
+static herr_t H5FD_pl_close(hid_t driver_id, herr_t (*free_func)(void *),
+    void *pl);
+static herr_t H5FD_free_cls(H5FD_class_t *cls);
+static haddr_t H5FD_alloc_from_free_list(H5FD_t *file, H5FD_mem_t type,
+                                         H5FD_mem_t mapped_type, hsize_t size);
+static haddr_t H5FD_alloc_metadata(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                                   hsize_t size);
+static haddr_t H5FD_alloc_raw(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                              hsize_t size);
+static haddr_t H5FD_real_alloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+static haddr_t H5FD_update_eoa(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+
+/* Declare a free list to manage the H5FD_free_t struct */
+H5FL_DEFINE(H5FD_free_t);
+
+/* Declare a PQ free list to manage the metadata accumulator buffer */
+H5FL_BLK_DEFINE_STATIC(meta_accum);
+
+/* Local macro definitions */
+#define H5FD_ACCUM_THROTTLE     8
+#define H5FD_ACCUM_THRESHOLD    2048
+
+/* Static local variables */
+
+/*
+ * Global count of the number of H5FD_t's handed out.  This is used as a
+ * "serial number" for files that are currently open and is used for the
+ * 'fileno[2]' field in H5G_stat_t.  However, if a VFL driver is not able
+ * to detect whether two files are the same, a file that has been opened
+ * by H5Fopen more than once with that VFL driver will have two different
+ * serial numbers.  :-/
+ *
+ * Also, if a file is opened, the 'fileno[2]' field is retrieved for an
+ * object and the file is closed and re-opened, the 'fileno[2]' value will
+ * be different.
+ */
+static unsigned long file_serial_no[2];
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_init_interface
+ *
+ * Purpose:	Initialize the virtual file layer.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, July 26, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_init_interface(void)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5FD_init_interface)
+
+    if (H5I_init_group(H5I_VFL, H5I_VFL_HASHSIZE, 0, (H5I_free_t)H5FD_free_cls)<0)
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "unable to initialize interface")
+
+    /* Reset the file serial numbers */
+    HDmemset(file_serial_no,0,sizeof(file_serial_no));
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_term_interface
+ *
+ * Purpose:	Terminate this interface: free all memory and reset global
+ *		variables to their initial values.  Release all ID groups
+ *		associated with this interface.
+ *
+ * Return:	Success:	Positive if anything was done that might
+ *				have affected other interfaces; zero
+ *				otherwise.
+ *
+ *		Failure:        Never fails.
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, February 19, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5FD_term_interface(void)
+{
+    int	n = 0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_term_interface)
+
+    if (H5_interface_initialize_g) {
+	if ((n=H5I_nmembers(H5I_VFL))!=0) {
+	    H5I_clear_group(H5I_VFL, FALSE);
+
+            /* Reset the VFL drivers, if they've been closed */
+            if(H5I_nmembers(H5I_VFL)==0) {
+                H5FD_sec2_term();
+                H5FD_log_term();
+                H5FD_stdio_term();
+                H5FD_family_term();
+#ifdef H5_HAVE_GASS
+                H5FD_gass_term();
+#endif
+#ifdef H5_HAVE_SRB
+                H5FD_srb_term();
+#endif
+                H5FD_core_term();
+                H5FD_multi_term();
+#ifdef H5_HAVE_PARALLEL
+                H5FD_mpio_term();
+                H5FD_mpiposix_term();
+#endif /* H5_HAVE_PARALLEL */
+#ifdef H5_HAVE_STREAM
+                H5FD_stream_term();
+#endif
+            } /* end if */
+	} else {
+	    H5I_destroy_group(H5I_VFL);
+	    H5_interface_initialize_g = 0;
+	    n = 1; /*H5I*/
+	}
+    }
+    FUNC_LEAVE_NOAPI(n)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_free_cls
+ *
+ * Purpose:	Frees a file driver class struct and returns an indication of
+ *		success. This function is used as the free callback for the
+ *		virtual file layer object identifiers (cf H5FD_init_interface).
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, July 26, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_free_cls(H5FD_class_t *cls)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_free_cls)
+
+    H5MM_xfree(cls);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDregister
+ *
+ * Purpose:	Registers a new file driver as a member of the virtual file
+ *		driver class.  Certain fields of the class struct are
+ *		required and that is checked here so it doesn't have to be
+ *		checked every time the field is accessed.
+ *
+ * Return:	Success:	A file driver ID which is good until the
+ *				library is closed or the driver is
+ *				unregistered.
+ *
+ *		Failure:	A negative value.
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, July 26, 1999
+ *
+ * Modifications:
+ *              Copied guts of function info H5FD_register
+ *              Quincey Koziol
+ *              Friday, January 30, 2004
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5FDregister(const H5FD_class_t *cls)
+{
+    hid_t		ret_value;
+    H5FD_mem_t		type;
+
+    FUNC_ENTER_API(H5FDregister, FAIL)
+    H5TRACE1("i","x",cls);
+
+    /* Check arguments */
+    if (!cls)
+	HGOTO_ERROR(H5E_ARGS, H5E_UNINITIALIZED, FAIL, "null class pointer is disallowed")
+    if (!cls->open || !cls->close)
+	HGOTO_ERROR(H5E_ARGS, H5E_UNINITIALIZED, FAIL, "`open' and/or `close' methods are not defined")
+    if (!cls->get_eoa || !cls->set_eoa)
+	HGOTO_ERROR(H5E_ARGS, H5E_UNINITIALIZED, FAIL, "`get_eoa' and/or `set_eoa' methods are not defined")
+    if (!cls->get_eof)
+	HGOTO_ERROR(H5E_ARGS, H5E_UNINITIALIZED, FAIL, "`get_eof' method is not defined")
+    if (!cls->read || !cls->write)
+	HGOTO_ERROR(H5E_ARGS, H5E_UNINITIALIZED, FAIL, "`read' and/or `write' method is not defined")
+    for (type=H5FD_MEM_DEFAULT; type<H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,type))
+	if (cls->fl_map[type]<H5FD_MEM_NOLIST || cls->fl_map[type]>=H5FD_MEM_NTYPES)
+	    HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid free-list mapping")
+
+    /* Create the new class ID */
+    if ((ret_value=H5FD_register(cls, sizeof(H5FD_class_t)))<0)
+        HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register file driver ID")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5FDregister() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_register
+ *
+ * Purpose:	Registers a new file driver as a member of the virtual file
+ *		driver class.  Certain fields of the class struct are
+ *		required and that is checked here so it doesn't have to be
+ *		checked every time the field is accessed.
+ *
+ * Return:	Success:	A file driver ID which is good until the
+ *				library is closed or the driver is
+ *				unregistered.
+ *
+ *		Failure:	A negative value.
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, July 26, 1999
+ *
+ * Modifications:
+ *              Broke into public and internal routines & added 'size'
+ *              parameter to internal routine, which allows us to create
+ *              sub-classes of H5FD_class_t for internal support (see the
+ *              MPI drivers, etc.)
+ *              Quincey Koziol
+ *              January 30, 2004
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5FD_register(const void *_cls, size_t size)
+{
+    hid_t		ret_value;
+    const H5FD_class_t	*cls=(const H5FD_class_t *)_cls;
+    H5FD_class_t	*saved=NULL;
+    H5FD_mem_t		type;
+
+    FUNC_ENTER_NOAPI(H5FD_register, FAIL)
+
+    /* Check arguments */
+    assert(cls);
+    assert(cls->open && cls->close);
+    assert(cls->get_eoa && cls->set_eoa);
+    assert(cls->get_eof);
+    assert(cls->read && cls->write);
+    for (type=H5FD_MEM_DEFAULT; type<H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,type))
+        assert(cls->fl_map[type]>=H5FD_MEM_NOLIST && cls->fl_map[type]<H5FD_MEM_NTYPES);
+
+    /* Copy the class structure so the caller can reuse or free it */
+    if (NULL==(saved=H5MM_malloc(size)))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for file driver class struct")
+    HDmemcpy(saved,cls,size);
+
+    /* Create the new class ID */
+    if ((ret_value=H5I_register(H5I_VFL, saved))<0)
+        HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register file driver ID")
+
+done:
+    if(ret_value<0)
+        if(saved)
+            H5MM_xfree(saved);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_register() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDunregister
+ *
+ * Purpose:	Removes a driver ID from the library. This in no way affects
+ *		file access property lists which have been defined to use
+ *		this driver or files which are already opened under this
+ *		driver.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, July 26, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FDunregister(hid_t driver_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5FDunregister, FAIL)
+    H5TRACE1("e","i",driver_id);
+
+    /* Check arguments */
+    if (NULL==H5I_object_verify(driver_id,H5I_VFL))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file driver")
+
+    /* The H5FD_class_t struct will be freed by this function */
+    if (H5I_dec_ref(driver_id)<0)
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "unable to unregister file driver")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_get_class
+ *
+ * Purpose:	Optains a pointer to the driver struct containing all the
+ *		callback pointers, etc. The PLIST_ID argument can be a file
+ *		access property list, a data transfer property list, or a
+ *		file driver identifier.
+ *
+ * Return:	Success:	Ptr to the driver information. The pointer is
+ *				only valid as long as the driver remains
+ *				registered or some file or property list
+ *				exists which references the driver.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, August 20, 1999
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ * 		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *-------------------------------------------------------------------------
+ */
+H5FD_class_t *
+H5FD_get_class(hid_t id)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    H5FD_class_t	*ret_value=NULL;
+    hid_t               driver_id = -1;
+
+    FUNC_ENTER_NOAPI(H5FD_get_class, NULL)
+
+    if (H5I_VFL==H5I_get_type(id)) {
+	ret_value = H5I_object(id);
+    } else {
+        /* Get the plist structure */
+        if(NULL == (plist = H5I_object(id)))
+            HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, NULL, "can't find object for ID")
+
+        if (TRUE==H5P_isa_class(id,H5P_FILE_ACCESS)) {
+            if(H5P_get(plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get driver ID")
+            ret_value = H5FD_get_class(driver_id);
+        } else if (TRUE==H5P_isa_class(id,H5P_DATASET_XFER)) {
+            if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id) < 0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get driver ID")
+            ret_value = H5FD_get_class(driver_id);
+        } else {
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a driver id, file access property list or data transfer property list")
+        }
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_sb_size
+ *
+ * Purpose:	Obtains the number of bytes required to store the driver file
+ *		access data in the HDF5 superblock.
+ *
+ * Return:	Success:	Number of bytes required.
+ *
+ *		Failure:	0 if an error occurs or if the driver has no
+ *				data to store in the superblock.
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August 16, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t
+H5FD_sb_size(H5FD_t *file)
+{
+    hsize_t	ret_value=0;
+
+    FUNC_ENTER_NOAPI(H5FD_sb_size, 0)
+
+    assert(file && file->cls);
+
+    if (file->cls->sb_size)
+	ret_value = (file->cls->sb_size)(file);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_sb_encode
+ *
+ * Purpose:	Encode driver-specific data into the output arguments. The
+ *		NAME is a nine-byte buffer which should get an
+ *		eight-character driver name and/or version followed by a null
+ *		terminator. The BUF argument is a buffer to receive the
+ *		encoded driver-specific data. The size of the BUF array is
+ *		the size returned by the H5FD_sb_size() call.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August 16, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_sb_encode(H5FD_t *file, char *name/*out*/, uint8_t *buf)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_sb_encode, FAIL)
+
+    assert(file && file->cls);
+    if (file->cls->sb_encode &&
+            (file->cls->sb_encode)(file, name/*out*/, buf/*out*/)<0)
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver sb_encode request failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_sb_decode
+ *
+ * Purpose:	Decodes the driver information block.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August 16, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_sb_decode(H5FD_t *file, const char *name, const uint8_t *buf)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_sb_decode, FAIL)
+
+    assert(file && file->cls);
+    if (file->cls->sb_decode &&
+            (file->cls->sb_decode)(file, name, buf)<0)
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver sb_decode request failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_pl_copy
+ *
+ * Purpose:	Copies the driver-specific part of the a property list.
+ *              This is common code, used by both the dataset transfer and
+ *              file access property list routines.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, October 23, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_pl_copy(void *(*copy_func)(const void *), size_t pl_size, const void *old_pl, void **copied_pl)
+{
+    void *new_pl = NULL;        /* Copy of property list */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5FD_pl_copy)
+
+    /* Copy old pl, if one exists */
+    if (old_pl) {
+        /* Allow the driver to copy or do it ourselves */
+        if (copy_func) {
+            new_pl = (copy_func)(old_pl);
+        } else if (pl_size>0) {
+            if((new_pl = H5MM_malloc(pl_size))==NULL)
+                HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, FAIL, "property list allocation failed")
+            HDmemcpy(new_pl, old_pl, pl_size);
+        } else
+            HGOTO_ERROR(H5E_VFL, H5E_UNSUPPORTED, FAIL, "no way to copy driver property list")
+    } /* end if */
+
+    /* Set copied value */
+    *copied_pl=new_pl;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_pl_copy() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_pl_close
+ *
+ * Purpose:	Closes a driver for a property list
+ *              This is common code, used by both the dataset transfer and
+ *              file access property list routines.
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, October 23, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_pl_close(hid_t driver_id, herr_t (*free_func)(void *), void *pl)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5FD_pl_close)
+
+    /* Allow driver to free or do it ourselves */
+    if (pl && free_func) {
+	if ((free_func)(pl)<0)
+	    HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver free request failed")
+    } else
+	H5MM_xfree(pl);
+
+    /* Decrement reference count for driver */
+    if(H5I_dec_ref(driver_id)<0)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTDEC, FAIL, "can't decrement reference count for driver")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_pl_close() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_fapl_get
+ *
+ * Purpose:	Gets the file access property list associated with a file.
+ *		Usually the file will copy what it needs from the original
+ *		file access property list when the file is created. The
+ *		purpose of this function is to create a new file access
+ *		property list based on the settings in the file, which may
+ *		have been modified from the original file access property
+ *		list.
+ *
+ * Return:	Success:	Pointer to a new file access property list
+ *				with all members copied.  If the file is
+ *				closed then this property list lives on, and
+ *				vice versa.
+ *
+ *		Failure:	NULL, including when the file has no
+ *				properties.
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, August 13, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FD_fapl_get(H5FD_t *file)
+{
+    void	*ret_value=NULL;
+
+    FUNC_ENTER_NOAPI(H5FD_fapl_get, NULL)
+
+    assert(file);
+
+    if (file->cls->fapl_get)
+	ret_value = (file->cls->fapl_get)(file);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_fapl_get() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_fapl_open
+ *
+ * Purpose:	Mark a driver as used by a file access property list
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, October 23, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_fapl_open(H5P_genplist_t *plist, hid_t driver_id, const void *driver_info)
+{
+    void *copied_driver_info;           /* Temporary VFL driver info */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_fapl_open, FAIL)
+
+    /* Increment the reference count on driver and copy driver info */
+    if(H5I_inc_ref(driver_id)<0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTINC, FAIL, "unable to increment ref count on VFL driver")
+    if(H5FD_fapl_copy(driver_id, driver_info, &copied_driver_info)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTCOPY, FAIL, "can't copy VFL driver info")
+
+    /* Set the driver properties for the list */
+    if(H5P_set(plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set driver ID")
+    if(H5P_set(plist, H5F_ACS_FILE_DRV_INFO_NAME, &copied_driver_info) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set driver info")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_fapl_open() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_fapl_copy
+ *
+ * Purpose:	Copies the driver-specific part of the file access property
+ *		list.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, August  3, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_fapl_copy(hid_t driver_id, const void *old_fapl, void **copied_fapl)
+{
+    H5FD_class_t	*driver=NULL;
+    herr_t ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_fapl_copy, FAIL)
+
+    /* Check args */
+    if (NULL==(driver=H5I_object(driver_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a driver ID")
+
+    /* Copy the file access property list */
+    if(H5FD_pl_copy(driver->fapl_copy,driver->fapl_size,old_fapl,copied_fapl)<0)
+        HGOTO_ERROR(H5E_VFL, H5E_UNSUPPORTED, FAIL, "can't copy driver file access property list")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_fapl_close
+ *
+ * Purpose:	Closes a driver for a dataset transfer property list
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, August  3, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_fapl_close(hid_t driver_id, void *fapl)
+{
+    H5FD_class_t	*driver=NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_fapl_close, FAIL)
+
+    /* Check args */
+    if(driver_id>0) {
+        if (NULL==(driver=H5I_object(driver_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a driver ID")
+
+        /* Close the driver for the property list */
+        if(H5FD_pl_close(driver_id,driver->fapl_free,fapl)<0)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver fapl_free request failed")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_fapl_close() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_dxpl_open
+ *
+ * Purpose:	Mark a driver as used by a data transfer property list
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, October 23, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_dxpl_open(H5P_genplist_t *plist, hid_t driver_id, const void *driver_info)
+{
+    void *copied_driver_info;           /* Temporary VFL driver info */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_dxpl_open, FAIL)
+
+    /* Increment the reference count on the driver and copy the driver info */
+    if(H5I_inc_ref(driver_id)<0)
+        HGOTO_ERROR (H5E_DATASET, H5E_CANTINC, FAIL, "can't increment VFL driver ID")
+    if(H5FD_dxpl_copy(driver_id, driver_info, &copied_driver_info)<0)
+        HGOTO_ERROR (H5E_DATASET, H5E_CANTCOPY, FAIL, "can't copy VFL driver")
+
+    /* Set the driver information for the new property list */
+    if(H5P_set(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTSET, FAIL, "can't set VFL driver ID")
+    if(H5P_set(plist, H5D_XFER_VFL_INFO_NAME, &copied_driver_info)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTSET, FAIL, "can't set VFL driver info")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_dxpl_open() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_dxpl_copy
+ *
+ * Purpose:	Copies the driver-specific part of the data transfer property
+ *		list.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, August  3, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_dxpl_copy(hid_t driver_id, const void *old_dxpl, void **copied_dxpl)
+{
+    H5FD_class_t	*driver=NULL;
+    herr_t ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_dxpl_copy, FAIL)
+
+    /* Check args */
+    if (NULL==(driver=H5I_object(driver_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a driver ID")
+
+    /* Copy the file access property list */
+    if(H5FD_pl_copy(driver->dxpl_copy,driver->dxpl_size,old_dxpl,copied_dxpl)<0)
+        HGOTO_ERROR(H5E_VFL, H5E_UNSUPPORTED, FAIL, "can't copy driver data transfer property list")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_dxpl_copy() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_dxpl_close
+ *
+ * Purpose:	Closes a driver for a dataset transfer property list
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, August  3, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_dxpl_close(hid_t driver_id, void *dxpl)
+{
+    H5FD_class_t	*driver=NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_dxpl_close, FAIL)
+
+    /* Check args */
+    if(driver_id>0) {
+        if (NULL==(driver=H5I_object(driver_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a driver ID")
+
+        /* Close the driver for the property list */
+        if(H5FD_pl_close(driver_id,driver->dxpl_free,dxpl)<0)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver fapl_free request failed")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_dxpl_close() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDopen
+ *
+ * Purpose:	Opens a file named NAME for the type(s) of access described
+ *		by the bit vector FLAGS according to a file access property
+ *		list FAPL_ID (which may be the constant H5P_DEFAULT). The
+ *		file should expect to handle format addresses in the range [0,
+ *		MAXADDR] (if MAXADDR is the undefined address then the caller
+ *		doesn't care about the address range).
+ *
+ * 		Possible values for the FLAGS bits are:
+ *
+ *		H5F_ACC_RDWR:	Open the file for read and write access. If
+ *				this bit is not set then open the file for
+ *				read only access. It is permissible to open a
+ *				file for read and write access when only read
+ *				access is requested by the library (the
+ *				library will never attempt to write to a file
+ *				which it opened with only read access).
+ *
+ *		H5F_ACC_CREATE:	Create the file if it doesn't already exist.
+ *				However, see H5F_ACC_EXCL below.
+ *
+ *		H5F_ACC_TRUNC:	Truncate the file if it already exists. This
+ *				is equivalent to deleting the file and then
+ *				creating a new empty file.
+ *
+ *		H5F_ACC_EXCL:	When used with H5F_ACC_CREATE, if the file
+ *				already exists then the open should fail.
+ *				Note that this is unsupported/broken with
+ *				some file drivers (e.g., sec2 across nfs) and
+ *				will contain a race condition when used to
+ *				perform file locking.
+ *
+ *		The MAXADDR is the maximum address which will be requested by
+ *		the library during an allocation operation. Usually this is
+ *		the same value as the MAXADDR field of the class structure,
+ *		but it can be smaller if the driver is being used under some
+ *		other driver.
+ *
+ *		Note that when the driver `open' callback gets control that
+ *		the public part of the file struct (the H5FD_t part) will be
+ *		incomplete and will be filled in after that callback returns.
+ *
+ * Return:	Success:	Pointer to a new file driver struct.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, July 27, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5FD_t *
+H5FDopen(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
+{
+    H5FD_t	*ret_value=NULL;
+
+    FUNC_ENTER_API(H5FDopen, NULL)
+
+    /* Check arguments */
+    if(H5P_DEFAULT == fapl_id)
+        fapl_id = H5P_FILE_ACCESS_DEFAULT;
+    else
+        if (TRUE!=H5P_isa_class(fapl_id,H5P_FILE_ACCESS))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+
+    if (NULL==(ret_value=H5FD_open(name, flags, fapl_id, maxaddr)))
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, NULL, "unable to open file")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_open
+ *
+ * Purpose:	Private version of H5FDopen()
+ *
+ * Return:	Success:	Pointer to a new file driver struct
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ * 		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *-------------------------------------------------------------------------
+ */
+H5FD_t *
+H5FD_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
+{
+    H5FD_class_t	*driver;
+    H5FD_t		*file=NULL;
+    hid_t               driver_id = -1;
+    hsize_t             meta_block_size=0;
+    hsize_t             sdata_block_size=0;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    H5FD_t		*ret_value;
+
+    FUNC_ENTER_NOAPI(H5FD_open, NULL)
+
+    /* Get file access property list */
+    if(NULL == (plist = H5I_object(fapl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+
+    if (0==maxaddr)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "zero format address range")
+
+    if(H5P_get(plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get driver ID")
+
+    /* Get driver info */
+    if (NULL==(driver=H5I_object(driver_id)))
+	HGOTO_ERROR(H5E_VFL, H5E_BADVALUE, NULL, "invalid driver ID in file access property list")
+    if (NULL==driver->open)
+	HGOTO_ERROR(H5E_VFL, H5E_UNSUPPORTED, NULL, "file driver has no `open' method")
+
+    /* Dispatch to file driver */
+    if (HADDR_UNDEF==maxaddr)
+        maxaddr = driver->maxaddr;
+    if (NULL==(file=(driver->open)(name, flags, fapl_id, maxaddr)))
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, NULL, "open failed")
+
+    /*
+     * Fill in public fields. We must increment the reference count on the
+     * driver ID to prevent it from being freed while this file is open.
+     */
+    file->driver_id = driver_id;
+    if(H5I_inc_ref(file->driver_id)<0)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTINC, NULL, "unable to increment ref count on VFL driver")
+    file->cls = driver;
+    file->maxaddr = maxaddr;
+    file->reserved_alloc = 0;
+    HDmemset(file->fl, 0, sizeof(file->fl));
+    if(H5P_get(plist, H5F_ACS_META_BLOCK_SIZE_NAME, &(meta_block_size)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get meta data block size")
+    file->def_meta_block_size = meta_block_size;
+    if(H5P_get(plist, H5F_ACS_SDATA_BLOCK_SIZE_NAME, &(sdata_block_size)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get 'small data' block size")
+    file->def_sdata_block_size = sdata_block_size;
+    file->accum_loc = HADDR_UNDEF;
+    if(H5P_get(plist, H5F_ACS_ALIGN_THRHD_NAME, &(file->threshold)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get alignment threshold")
+    if(H5P_get(plist, H5F_ACS_ALIGN_NAME, &(file->alignment)) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, NULL, "can't get alignment")
+
+    /* Retrieve the VFL driver feature flags */
+    if (H5FD_query(file, &(file->feature_flags))<0)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, NULL, "unable to query file driver")
+
+    /* Increment the global serial number & assign it to this H5FD_t object */
+    if(++file_serial_no[0]==0) {
+        /* (Just error out if we wrap both numbers around for now...) */
+        if(++file_serial_no[1]==0)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, NULL, "unable to get file serial number")
+    } /* end if */
+    HDmemcpy(file->fileno,file_serial_no,sizeof(file_serial_no));
+
+    /* Set return value */
+    ret_value=file;
+
+done:
+    /* Can't cleanup 'file' information, since we don't know what type it is */
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDclose
+ *
+ * Purpose:     Closes the file by calling the driver `close' callback, which
+ *		should free all driver-private data and free the file struct.
+ *		Note that the public part of the file struct (the H5FD_t part)
+ *		will be all zero during the driver close callback like during
+ *		the `open' callback.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, July 27, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FDclose(H5FD_t *file)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5FDclose, FAIL)
+    H5TRACE1("e","x",file);
+
+    if (!file || !file->cls)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file pointer")
+
+    if (H5FD_close(file)<0)
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "unable to close file")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_close
+ *
+ * Purpose:	Private version of H5FDclose()
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *              Robb Matzke, 2000-11-10
+ *              Removed a call to set *file to all zero because the struct
+ *              has already been freed by the close method. This fixes a write
+ *              to freed memory.
+ *
+ *              Bill Wendling, 2003-02-17
+ *              Split out the freeing of the freelist from this function
+ *              so that the Flexible PHDF5 stuff can call it without
+ *              having to call H5FD_close().
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_close(H5FD_t *file)
+{
+    const H5FD_class_t *driver;
+    herr_t              ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_close, FAIL)
+
+    /* check args */
+    assert(file && file->cls);
+
+    /* Free the freelist (this call never fails) */
+    (void)H5FD_free_freelist(file);
+
+    /* Prepare to close file by clearing all public fields */
+    driver = file->cls;
+    if(H5I_dec_ref(file->driver_id)<0)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTDEC, FAIL, "can't close driver ID")
+
+    /*
+     * Dispatch to the driver for actual close. If the driver fails to
+     * close the file then the file will be in an unusable state.
+     */
+    assert(driver->close);
+
+    if ((driver->close)(file) < 0)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "close failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_free_freelist
+ * Purpose:     Split off from H5FD_close(). Free the elements in the
+ *              free list for this file driver.
+ * Return:      Success:    SUCCEED
+ *              Failure:    Never fails
+ * Programmer:  Bill Wendling
+ *              17. February 2003
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_free_freelist(H5FD_t *file)
+{
+    H5FD_mem_t  i;
+#ifdef H5F_DEBUG
+    unsigned    nblocks = 0;
+    hsize_t     nbytes = 0;
+#endif  /* H5F_DEBUG */
+    herr_t      ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_free_freelist, FAIL)
+
+    /* check args */
+    assert(file && file->cls);
+
+    /*
+     * Free all free-lists, leaking any memory thus described. Also leaks
+     * file space allocated but not used when metadata aggregation is
+     * turned on.
+     */
+    for (i = H5FD_MEM_DEFAULT; i < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t, i)) {
+        H5FD_free_t *cur, *next;
+
+        for (cur = file->fl[i]; cur; cur = next) {
+#ifdef H5F_DEBUG
+            ++nblocks;
+            nbytes += cur->size;
+#endif  /* H5F_DEBUG */
+            next = cur->next;
+            H5FL_FREE(H5FD_free_t, cur);
+        }
+
+        file->fl[i] = NULL;
+    }
+
+#ifdef H5F_DEBUG
+    if (nblocks && H5DEBUG(F))
+        HDfprintf(H5DEBUG(F),
+                  "H5F: leaked %Hu bytes of file memory in %u blocks\n",
+                  nbytes, nblocks);
+#endif  /* H5F_DEBUG */
+
+    /* Check if we need to reset the metadata accumulator information */
+    if (file->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) {
+        /* Free the buffer */
+        if (file->meta_accum)
+            file->meta_accum = H5FL_BLK_FREE(meta_accum, file->meta_accum);
+
+        /* Reset the buffer sizes & location */
+        file->accum_buf_size = file->accum_size = 0;
+        file->accum_loc = HADDR_UNDEF;
+        file->accum_dirty = 0;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDcmp
+ *
+ * Purpose:	Compare the keys of two files using the file driver callback
+ *		if the files belong to the same driver, otherwise sort the
+ *		files by driver class pointer value.
+ *
+ * Return:	Success:	A value like strcmp()
+ *
+ *		Failure:	Must never fail. If both file handles are
+ *				invalid then they compare equal. If one file
+ *				handle is invalid then it compares less than
+ *				the other.  If both files belong to the same
+ *				driver and the driver doesn't provide a
+ *				comparison callback then the file pointers
+ *				themselves are compared.
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, July 27, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5FDcmp(const H5FD_t *f1, const H5FD_t *f2)
+{
+    int	ret_value;
+
+    FUNC_ENTER_API(H5FDcmp, -1) /*return value is arbitrary*/
+    H5TRACE2("Is","xx",f1,f2);
+
+    ret_value = H5FD_cmp(f1, f2);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_cmp
+ *
+ * Purpose:	Private version of H5FDcmp()
+ *
+ * Return:	Success:	A value like strcmp()
+ *
+ *		Failure:	Must never fail.
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5FD_cmp(const H5FD_t *f1, const H5FD_t *f2)
+{
+    int	ret_value;
+
+    FUNC_ENTER_NOAPI(H5FD_cmp, -1) /*return value is arbitrary*/
+
+    if ((!f1 || !f1->cls) && (!f2 || !f2->cls))
+        HGOTO_DONE(0)
+    if (!f1 || !f1->cls)
+        HGOTO_DONE(-1)
+    if (!f2 || !f2->cls)
+        HGOTO_DONE(1)
+    if (f1->cls < f2->cls)
+        HGOTO_DONE(-1)
+    if (f1->cls > f2->cls)
+        HGOTO_DONE(1)
+
+    /* Files are same driver; no cmp callback */
+    if (!f1->cls->cmp) {
+	if (f1<f2)
+            HGOTO_DONE(-1)
+	if (f1>f2)
+            HGOTO_DONE(1)
+	HGOTO_DONE(0)
+    }
+
+    ret_value = (f1->cls->cmp)(f1, f2);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDquery
+ *
+ * Purpose:	Query a VFL driver for its feature flags. (listed in H5FDpublic.h)
+ *
+ * Return:	Success:    non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, August 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5FDquery(const H5FD_t *f, unsigned long *flags/*out*/)
+{
+    int	ret_value;
+
+    FUNC_ENTER_API(H5FDquery, FAIL)
+    H5TRACE2("Is","xx",f,flags);
+
+    assert(f);
+    assert(flags);
+
+    ret_value = H5FD_query(f, flags);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_query
+ *
+ * Purpose:	Private version of H5FDquery()
+ *
+ * Return:	Success:    non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, August 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5FD_query(const H5FD_t *f, unsigned long *flags/*out*/)
+{
+    int	ret_value=0;
+
+    FUNC_ENTER_NOAPI(H5FD_query, FAIL)
+
+    assert(f);
+    assert(flags);
+
+    /* Check for query driver and call it */
+    if (f->cls->query)
+        ret_value = (f->cls->query)(f, flags);
+    else
+        *flags=0;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDalloc
+ *
+ * Purpose:	Allocates SIZE bytes of memory from the FILE. The memory will
+ *		be used according to the allocation class TYPE. First we try
+ *		to satisfy the request from one of the free lists, according
+ *		to the free list map provided by the driver. The free list
+ *		array has one entry for each request type and the value of
+ *		that array element can be one of four possibilities:
+ *
+ *		      It can be the constant H5FD_MEM_DEFAULT (or zero) which
+ *		      indicates that the identity mapping is used. In other
+ *		      words, the request type maps to its own free list.
+ *
+ *		      It can be the request type itself, which has the same
+ *		      effect as the H5FD_MEM_DEFAULT value above.
+ *
+ *		      It can be the ID for another request type, which
+ *		      indicates that the free list for the specified type
+ *		      should be used instead.
+ *
+ *		      It can be the constant H5FD_MEM_NOLIST which means that
+ *		      no free list should be used for this type of request.
+ *
+ *		If the request cannot be satisfied from a free list then
+ *		either the driver's `alloc' callback is invoked (if one was
+ *		supplied) or the end-of-address marker is extended. The
+ *		`alloc' callback is always called with the same arguments as
+ * 		the H5FDalloc().
+ *
+ * Return:	Success:	The format address of the new file memory.
+ *
+ *		Failure:	The undefined address HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, July 27, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5FDalloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
+{
+    haddr_t	ret_value = HADDR_UNDEF;
+
+    FUNC_ENTER_API(H5FDalloc, HADDR_UNDEF)
+    H5TRACE4("a","xMtih",file,type,dxpl_id,size);
+
+    /* Check args */
+    if (!file || !file->cls)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, HADDR_UNDEF, "invalid file pointer")
+    if (type<H5FD_MEM_DEFAULT || type>=H5FD_MEM_NTYPES)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, HADDR_UNDEF, "invalid request type")
+    if (size==0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, HADDR_UNDEF, "zero-size request")
+    if (H5P_DEFAULT == dxpl_id)
+        dxpl_id= H5P_DATASET_XFER_DEFAULT;
+    else
+        if (TRUE!=H5P_isa_class(dxpl_id,H5P_DATASET_XFER))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, HADDR_UNDEF, "not a data transfer property list")
+
+    /* Do the real work */
+    if (HADDR_UNDEF==(ret_value=H5FD_alloc(file, type, dxpl_id, size)))
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, HADDR_UNDEF, "unable to allocate file memory")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_alloc
+ * Purpose:     Private version of H5FDalloc().
+ *
+ * Return:      Success:    The format address of the new file memory.
+ *              Failure:    The undefined address HADDR_UNDEF
+ * Programmer:  Robb Matzke
+ *              Wednesday, August  4, 1999
+ * Modifications:
+ *	Albert Cheng, 2001/05/01
+ *	Implement the allocation by alignment/threshold.
+ *
+ *      Bill Wendling, 2002/12/02
+ *      Split apart into subfunctions for each separate task.
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
+{
+    H5FD_mem_t  mapped_type;
+    haddr_t     ret_value = HADDR_UNDEF;
+
+    FUNC_ENTER_NOAPI(H5FD_alloc, HADDR_UNDEF)
+
+    /* check args */
+    assert(file);
+    assert(file->cls);
+    assert(type >= H5FD_MEM_DEFAULT && type < H5FD_MEM_NTYPES);
+    assert(size > 0);
+
+
+#ifdef H5F_DEBUG
+    if (H5DEBUG(F))
+	HDfprintf(H5DEBUG(F), "%s: alignment=%Hd, threshold=%Hd, size=%Hd\n",
+                  FUNC, file->alignment, file->threshold, size);
+#endif  /* H5F_DEBUG */
+
+    /* Map the allocation request to a free list */
+    if (H5FD_MEM_DEFAULT == file->cls->fl_map[type])
+        mapped_type = type;
+    else
+        mapped_type = file->cls->fl_map[type];
+
+    /* Try to allocate from the free list first */
+    if ((ret_value = H5FD_alloc_from_free_list(file, type,
+                                               mapped_type, size)) != HADDR_UNDEF)
+        HGOTO_DONE(ret_value)
+
+#ifdef H5F_DEBUG
+    if (H5DEBUG(F))
+	HDfprintf(H5DEBUG(F), "%s: Could not allocate from freelists\n", FUNC);
+#endif  /* H5F_DEBUG */
+
+    if (type != H5FD_MEM_DRAW) {
+        /* Handle metadata differently from "raw" data */
+        if ((ret_value = H5FD_alloc_metadata(file, type, dxpl_id, size)) == HADDR_UNDEF)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, HADDR_UNDEF, "can't allocate for metadata")
+    } else {
+        /* Allocate "raw" data */
+        if ((ret_value = H5FD_alloc_raw(file, type, dxpl_id, size)) == HADDR_UNDEF)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, HADDR_UNDEF, "can't allocate for raw data")
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_alloc_from_free_list
+ * Purpose:     Try to allocate SIZE bytes of memory from the free list
+ *              if possible.
+ *
+ *              This is split from H5FD_alloc().
+ * Return:      Success:    The format address of the new file memory.
+ *              Failure:    The undefined address HADDR_UNDEF
+ * Programmer:  Bill Wendling
+ *              02. December, 2002
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_alloc_from_free_list(H5FD_t *file, H5FD_mem_t type,
+                          H5FD_mem_t mapped_type, hsize_t size)
+{
+    haddr_t ret_value = HADDR_UNDEF;
+
+    FUNC_ENTER_NOAPI(H5FD_alloc_from_free_list, HADDR_UNDEF)
+
+    assert(file);
+    assert(type >= H5FD_MEM_DEFAULT && type < H5FD_MEM_NTYPES);
+    assert(size > 0);
+
+    /*
+     * Try to satisfy the request from the free list. Only perform the
+     * search if the free list has the potential of satisfying the
+     * request.
+     *
+     * Here, aligned requests are requests that are >= threshold and
+     * alignment > 1.
+     *
+     * For non-aligned request, first try to find an exact match,
+     * otherwise use the best match which is the smallest size that meets
+     * the requested size.
+     *
+     * For aligned address request, find a block in the following order
+     * of preferences:
+     *
+     *   1. block address is aligned and exact match in size;
+     *   2. block address is aligned with smallest size > requested size;
+     *   3. block address is not aligned with smallest size >= requested size.
+     */
+    if (mapped_type >= H5FD_MEM_DEFAULT && (file->maxsize == 0 || size <= file->maxsize)) {
+        H5FD_free_t    *prev = NULL, *best = NULL;
+        H5FD_free_t    *cur = file->fl[mapped_type];
+        int             found_aligned = 0;
+        int             need_aligned;
+        hsize_t         head;
+
+        need_aligned = file->alignment > 1 && size >= file->threshold;
+
+        while (cur) {
+            file->maxsize = MAX(file->maxsize, cur->size);
+
+            if (need_aligned) {
+                if ((head = cur->addr % file->alignment) == 0) {
+                    /*
+                     * Aligned address
+                     */
+                    if (cur->size == size) {
+                        /* exact match */
+                        ret_value = cur->addr;
+
+                        /*
+                         * Make certain we don't hand out a block of raw data
+                         * from the free list which overlaps with the metadata
+                         * aggregation buffer (if it's turned on)
+                         */
+                        if (type == H5FD_MEM_DRAW &&
+                                (file->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) &&
+                                H5F_addr_overlap(ret_value, size,
+                                                 file->accum_loc, file->accum_size)) {
+                            ret_value = HADDR_UNDEF;
+                        } else {
+                            if (prev)
+                                prev->next = cur->next;
+                            else
+                                file->fl[mapped_type] = cur->next;
+
+                            H5FL_FREE(H5FD_free_t, cur);
+
+                            if (size == file->maxsize)
+                                file->maxsize = 0;  /*unknown*/
+
+                            HGOTO_DONE(ret_value)
+                        }
+                    }
+
+                    if (cur->size > size)
+                        if (!best || !found_aligned || cur->size < best->size) {
+                            best = cur;
+                            found_aligned = 1;
+                        }
+                } else {
+                    /*
+                     * Non-aligned address
+                     *
+                     * Check to see if this block is big enough to skip
+                     * to the next aligned address and is still big
+                     * enough for the requested size.  the extra
+                     * cur->size>head is for preventing unsigned
+                     * underflow. (this can be improved by checking for
+                     * an exact match after excluding the head. Such
+                     * match is as good as the found_aligned case above.)
+                     */
+                    head = file->alignment - head;	/* actual head size */
+
+                    if (!found_aligned && cur->size > head && cur->size-head >= size &&
+                            (!best || cur->size < best->size))
+                        best = cur;
+                }
+            } else {
+                /* !need_aligned */
+                if (cur->size == size) {
+                    /* exact match */
+                    ret_value = cur->addr;
+
+                    /*
+                     * Make certain we don't hand out a block of raw data
+                     * from the free list which overlaps with the metadata
+                     * aggregation buffer (if it's turned on)
+                     */
+                    if (type == H5FD_MEM_DRAW &&
+                            (file->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) &&
+                            H5F_addr_overlap(ret_value, size, file->accum_loc,
+                                             file->accum_size)) {
+                        ret_value = HADDR_UNDEF;
+                    } else {
+                        if (prev)
+                            prev->next = cur->next;
+                        else
+                            file->fl[mapped_type] = cur->next;
+
+                        H5FL_FREE(H5FD_free_t, cur);
+
+                        if (size == file->maxsize)
+                            file->maxsize = 0;  /*unknown*/
+
+                        HGOTO_DONE(ret_value)
+                    }
+                } else {
+                    if (cur->size > size && (!best || cur->size < best->size))
+                        best = cur;
+                }
+            }
+
+            prev = cur;
+            cur = cur->next;
+        }
+
+        /* Couldn't find exact match, use best fitting piece found */
+        if (best) {
+            if (best->size == file->maxsize)
+                file->maxsize = 0;  /*unknown*/
+
+            if (!need_aligned || found_aligned) {
+                /* free only tail */
+                ret_value = best->addr;
+
+                /*
+                 * Make certain we don't hand out a block of raw data
+                 * from the free list which overlaps with the metadata
+                 * aggregation buffer (if it's turned on)
+                 */
+                if (type == H5FD_MEM_DRAW &&
+                        (file->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) &&
+                        H5F_addr_overlap(ret_value, size, file->accum_loc,
+                                         file->accum_size)) {
+                    ret_value = HADDR_UNDEF;
+                } else {
+                    best->addr += size;     /* Reduce size of block on free list */
+                    best->size -= size;
+                    HGOTO_DONE(ret_value)
+                }
+            } else {
+                /*
+                 * Split into 3 pieces. Keep the the head and tail in the
+                 * freelist.
+                 */
+                H5FD_free_t *tmp = NULL;
+
+                head = file->alignment - (best->addr % file->alignment);
+                ret_value = best->addr + head;
+
+                /*
+                 * Make certain we don't hand out a block of raw data
+                 * from the free list which overlaps with the metadata
+                 * aggregation buffer (if it's turned on)
+                 */
+                if (type == H5FD_MEM_DRAW &&
+                        (file->feature_flags & H5FD_FEAT_ACCUMULATE_METADATA) &&
+                        H5F_addr_overlap(ret_value, size, file->accum_loc, file->accum_size)) {
+                    ret_value = HADDR_UNDEF;
+                } else {
+                    /* Attempt to allocate memory for temporary node */
+                    if((tmp = H5FL_MALLOC(H5FD_free_t))==NULL)
+                        HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, HADDR_UNDEF, "free block allocation failed")
+
+                    if ((tmp->size = (best->size - (head + size)))!=0) {
+                        tmp->addr = best->addr + (head + size);
+                        tmp->next = best->next;
+                        best->next = tmp;
+                    } else {
+                        /* no tail piece */
+                        H5FL_FREE(H5FD_free_t,tmp);
+                    }
+
+                    best->size = head;
+                    HGOTO_DONE(ret_value)
+                } /* end else */
+            } /* end else */
+        } /* end if */
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_alloc_metadata
+ * Purpose:     Try to allocate SIZE bytes of memory from the metadata
+ *              block if possible.
+ *
+ *              This is split from H5FD_alloc().
+ * Return:      Success:    The format address of the new file memory.
+ *              Failure:    The undefined address HADDR_UNDEF
+ * Programmer:  Bill Wendling
+ *              2. December, 2002
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_alloc_metadata(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
+{
+    haddr_t ret_value = HADDR_UNDEF;
+
+    FUNC_ENTER_NOAPI(H5FD_alloc_metadata, HADDR_UNDEF)
+
+    /* check args */
+    assert(file);
+    assert(type >= H5FD_MEM_DEFAULT && type < H5FD_MEM_NTYPES);
+    assert(size > 0);
+
+    /*
+     * If the metadata aggregation feature is enabled for this VFL
+     * driver, allocate "generic" metadata space and sub-allocate out of
+     * that, if possible. Otherwise just allocate through
+     * H5FD_real_alloc()
+     */
+
+    /*
+     * Allocate all types of metadata out of the metadata block
+     */
+    if (file->feature_flags & H5FD_FEAT_AGGREGATE_METADATA) {
+        /*
+         * Check if the space requested is larger than the space left in
+         * the block
+         */
+        if (size > file->cur_meta_block_size) {
+            haddr_t new_meta;   /* Address for new metadata */
+
+            /*
+             * Check if the block asked for is too large for a metadata
+             * block
+             */
+            if (size >= file->def_meta_block_size) {
+                /* Allocate more room for this new block the regular way */
+                new_meta = H5FD_real_alloc(file, type, dxpl_id, size);
+
+                /*
+                 * Check if the new metadata is at the end of the current
+                 * metadata block
+                 */
+                if (file->eoma + file->cur_meta_block_size == new_meta) {
+                    /*
+                     * Treat the allocation request as if the current
+                     * metadata block grew by the amount allocated and
+                     * just update the eoma address. Don't bother
+                     * updating the cur_meta_block_size since it will
+                     * just grow and shrink by the same amount.
+                     */
+                    ret_value = file->eoma;
+                    file->eoma += size;
+                } else {
+                    /* Use the new metadata block for the space allocated */
+                    ret_value = new_meta;
+                }
+            } else {
+                /* Allocate another metadata block */
+                new_meta = H5FD_real_alloc(file, H5FD_MEM_DEFAULT, dxpl_id,
+                                           file->def_meta_block_size);
+
+                /*
+                 * Check if the new metadata is at the end of the current
+                 * metadata block
+                 */
+                if (file->eoma + file->cur_meta_block_size == new_meta) {
+                    file->cur_meta_block_size += file->def_meta_block_size;
+                } else {
+                    /*
+                     * Return the unused portion of the metadata block to
+                     * a free list
+                     */
+                    if (file->eoma != 0)
+                        if (H5FD_free(file, H5FD_MEM_DEFAULT, dxpl_id, file->eoma,
+                                      file->cur_meta_block_size) < 0)
+                            HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, HADDR_UNDEF, "can't free metadata block")
+
+                    /* Point the metadata block at the newly allocated block */
+                    file->eoma = new_meta;
+                    file->cur_meta_block_size = file->def_meta_block_size;
+                }
+
+                /* Allocate space out of the metadata block */
+                ret_value = file->eoma;
+                file->cur_meta_block_size -= size;
+                file->eoma += size;
+            }
+        } else {
+            /* Allocate space out of the metadata block */
+            ret_value = file->eoma;
+            file->cur_meta_block_size -= size;
+            file->eoma += size;
+        }
+    } else {
+        /* Allocate data the regular way */
+        ret_value = H5FD_real_alloc(file, type, dxpl_id, size);
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_alloc_raw
+ * Purpose:     Try to allocate SIZE bytes of raw data.
+ *
+ *              This is split from H5FD_alloc().
+ * Return:      Success:    The format address of the new file memory.
+ *              Failure:    The undefined address HADDR_UNDEF
+ * Programmer:  Bill Wendling
+ *              2. December, 2002
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_alloc_raw(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
+{
+    haddr_t ret_value = HADDR_UNDEF;
+
+    FUNC_ENTER_NOAPI(H5FD_alloc_raw, HADDR_UNDEF)
+
+    /* check args */
+    assert(file);
+    assert(type >= H5FD_MEM_DEFAULT && type < H5FD_MEM_NTYPES);
+    assert(size > 0);
+
+    /*
+     * If the "small data" aggregation feature is enabled for this VFL driver,
+     * allocate "small data" space and sub-allocate out of that, if
+     * possible. Otherwise just allocate through H5FD_real_alloc()
+     */
+    if (file->feature_flags & H5FD_FEAT_AGGREGATE_SMALLDATA) {
+        /*
+         * Check if the space requested is larger than the space left in
+         * the block
+         */
+        if (size > file->cur_sdata_block_size) {
+            haddr_t new_data;       /* Address for new raw data block */
+
+            /* Check if the block asked for is too large for the "small data" block */
+            if (size >= file->def_sdata_block_size) {
+                /* Allocate more room for this new block the regular way */
+                new_data = H5FD_real_alloc(file, type, dxpl_id, size);
+
+                /*
+                 * Check if the new raw data is at the end of the current
+                 * "small data" block
+                 */
+                if (file->eosda + file->cur_sdata_block_size == new_data) {
+                    /*
+                     * Treat the allocation request as if the current
+                     * "small data" block grew by the amount allocated
+                     * and just update the eosda address. Don't bother
+                     * updating the cur_sdata_block_size since it will
+                     * just grow and shrink by the same amount.
+                     */
+                    ret_value = file->eosda;
+                    file->eosda += size;
+                } else {
+                    /* Use the new "small data" block for the space allocated */
+                    ret_value = new_data;
+                }
+            } else {
+                /* Allocate another "small data" block */
+                new_data = H5FD_real_alloc(file, type, dxpl_id,
+                                           file->def_sdata_block_size);
+
+                /*
+                 * Check if the new raw data is at the end of the current
+                 * "small data" block
+                 */
+                if (file->eosda + file->cur_sdata_block_size == new_data) {
+                    file->cur_sdata_block_size += file->def_sdata_block_size;
+                } else {
+                    /*
+                     * Return the unused portion of the "small data"
+                     * block to a free list
+                     */
+                    if (file->eosda != 0)
+                        if (H5FD_free(file, H5FD_MEM_DRAW, dxpl_id, file->eosda,
+                                      file->cur_sdata_block_size) < 0)
+                            HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, HADDR_UNDEF, "can't free 'small data' block")
+
+                    /*
+                     * Point the "small data" block at the newly
+                     * allocated block
+                     */
+                    file->eosda = new_data;
+                    file->cur_sdata_block_size = file->def_sdata_block_size;
+                }
+
+                /* Allocate space out of the "small data" block */
+                ret_value = file->eosda;
+                file->cur_sdata_block_size -= size;
+                file->eosda += size;
+            }
+        } else {
+            /* Allocate space out of the "small data" block */
+            ret_value = file->eosda;
+            file->cur_sdata_block_size -= size;
+            file->eosda += size;
+        }
+    } else {
+        /* Allocate data the regular way */
+        ret_value = H5FD_real_alloc(file, type, dxpl_id, size);
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_real_alloc
+ *
+ * Purpose:	Double private version of H5FDalloc() :-)
+ *
+ * Return:	Success:	The format address of the new file memory.
+ *
+ *		Failure:	The undefined address HADDR_UNDEF
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, August 25, 2000
+ *
+ * Modifications:
+ *	Albert Cheng, 2001/05/01
+ *	Implement the allocation by alignment/threshold.
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_real_alloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
+{
+    haddr_t ret_value = HADDR_UNDEF;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5FD_real_alloc)
+
+    /* check args */
+    assert(file);
+    assert(file->cls);
+    assert(type >= H5FD_MEM_DEFAULT && type < H5FD_MEM_NTYPES);
+    assert(size > 0);
+
+    /*
+     * Dispatch to driver `alloc' callback or extend the end-of-address
+     * marker
+     */
+    if (file->cls->alloc) {
+        if ((ret_value = (file->cls->alloc)(file, type, dxpl_id, size)) == HADDR_UNDEF)
+            HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, HADDR_UNDEF, "driver allocation request failed")
+    } else {
+        if ((ret_value = H5FD_update_eoa(file, type, dxpl_id, size)) == HADDR_UNDEF)
+            HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, HADDR_UNDEF, "driver eoa update request failed")
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_real_alloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_update_eoa
+ * Purpose:     Update the EOA field of the file's memory.
+ *
+ *              This was split off from the H5FD_real_alloc function to
+ *              make life easier for all.
+ * Return:      Success:    The format address of the new file memory.
+ *              Failure:    The undefined address HADDR_UNDEF
+ * Programmer:  Bill Wendling
+ *              Wednesday, 04. December, 2002
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_update_eoa(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
+{
+    haddr_t eoa, oldeoa = 0;
+    hsize_t wasted;
+    haddr_t ret_value = HADDR_UNDEF;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5FD_update_eoa)
+
+    /* check args */
+    assert(file);
+    assert(file->cls);
+    assert(type >= H5FD_MEM_DEFAULT && type < H5FD_MEM_NTYPES);
+    assert(size > 0);
+
+    eoa = file->cls->get_eoa(file);
+
+#ifdef H5F_DEBUG
+    if (file->alignment * file->threshold != 1 && H5DEBUG(F))
+        HDfprintf(H5DEBUG(F),
+                  "%s: alignment=%Hd, threshold=%Hd, size=%Hd, Begin eoa=%a\n",
+                  FUNC, file->alignment, file->threshold, size, eoa);
+#endif  /* H5F_DEBUG */
+
+    /*
+     * Wasted is 0 if not exceeding threshold or eoa happens to be
+     * aligned
+     */
+    wasted = (size >= file->threshold) ? (eoa % file->alignment) : 0;
+
+    if (wasted) {
+        wasted = file->alignment - wasted;      /* actual waste                 */
+        oldeoa = eoa;                           /* save it for later freeing    */
+
+	    /* Advance eoa to the next alignment by allocating the wasted */
+        if (H5F_addr_overflow(eoa, size) || eoa + wasted > file->maxaddr)
+            HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, HADDR_UNDEF, "file allocation request failed")
+
+        eoa += wasted;
+
+        if (file->cls->set_eoa(file, eoa) < 0)
+            HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, HADDR_UNDEF, "file allocation request failed")
+    }
+
+    /* allocate the aligned memory */
+    if (H5F_addr_overflow(eoa, size) || eoa + size > file->maxaddr)
+        HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, HADDR_UNDEF, "file allocation request failed")
+
+    ret_value = eoa;
+    eoa += size;
+
+    if (file->cls->set_eoa(file, eoa) < 0)
+        HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, HADDR_UNDEF, "file allocation request failed")
+
+    /* Free the wasted memory */
+    if (wasted) {
+        if(H5FD_free(file, type, dxpl_id, oldeoa, wasted)<0)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, HADDR_UNDEF, "file deallocation request failed")
+    } /* end if */
+
+#ifdef H5F_DEBUG
+    if (file->alignment * file->threshold != 1 && H5DEBUG(F))
+        HDfprintf(H5DEBUG(F),
+                  "%s: ret_value=%a, wasted=%Hd, Ended eoa=%a\n",
+                  FUNC, ret_value, wasted, eoa);
+#endif  /* H5F_DEBUG */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDfree
+ *
+ * Purpose:	Frees format addresses starting with ADDR and continuing for
+ *		SIZE bytes in the file FILE. The type of space being freed is
+ *		specified by TYPE, which is mapped to a free list as
+ *		described for the H5FDalloc() function above.  If the request
+ *		doesn't map to a free list then either the application `free'
+ *		callback is invoked (if defined) or the memory is leaked.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, July 28, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FDfree(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5FDfree, FAIL)
+    H5TRACE5("e","xMtiah",file,type,dxpl_id,addr,size);
+
+    /* Check args */
+    if (!file || !file->cls)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file pointer")
+    if (type<H5FD_MEM_DEFAULT || type>=H5FD_MEM_NTYPES)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid request type")
+    if (H5P_DEFAULT == dxpl_id)
+        dxpl_id= H5P_DATASET_XFER_DEFAULT;
+    else
+        if (TRUE!=H5P_isa_class(dxpl_id,H5P_DATASET_XFER))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data transfer property list")
+
+    /* Do the real work */
+    if (H5FD_free(file, type, dxpl_id, addr, size)<0)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, FAIL, "file deallocation request failed")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_free
+ *
+ * Purpose:     Private version of H5FDfree()
+ *
+ * Return:      Success:        Non-negative
+ *
+ *              Failure:        Negative
+ *
+ * Programmer:  Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *          Bill Wendling, February 20, 2003
+ *          Added support for Flexible PHDF5. If the process is the
+ *          Set-Aside-Process, then we execute this function. Clients
+ *          don't.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_free(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
+{
+    H5FD_mem_t		mapped_type;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_free, FAIL)
+
+    /* Check args */
+    assert(file);
+    assert(file->cls);
+    assert(type >= H5FD_MEM_DEFAULT && type < H5FD_MEM_NTYPES);
+
+    if (!H5F_addr_defined(addr) || addr>file->maxaddr ||
+            H5F_addr_overflow(addr, size) || addr+size>file->maxaddr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid region")
+
+    /* Allow 0-sized free's to occur without penalty */
+    if(0==size)
+        HGOTO_DONE(SUCCEED)
+
+    /* Map request type to free list */
+    if (H5FD_MEM_DEFAULT==file->cls->fl_map[type]) {
+        mapped_type = type;
+    } else {
+        mapped_type = file->cls->fl_map[type];
+    }
+
+    /*
+     * If the request maps to a free list then add memory to the free list
+     * without ever telling the driver that it was freed.  Otherwise let the
+     * driver deallocate the memory.
+     */
+    if (mapped_type>=H5FD_MEM_DEFAULT) {
+        H5FD_free_t *last;          /* Last merged node */
+        H5FD_free_t *last_prev=NULL;/* Pointer to node before merged node */
+        H5FD_free_t *curr;          /* Current free block being inspected */
+        H5FD_free_t *prev;          /* Previous free block being inspected */
+
+        /* Adjust the metadata accumulator to remove the freed block, if it overlaps */
+        if((file->feature_flags&H5FD_FEAT_ACCUMULATE_METADATA)
+                && H5F_addr_overlap(addr,size,file->accum_loc,file->accum_size)) {
+            size_t overlap_size;        /* Size of overlap with accumulator */
+
+            /* Check for overlapping the beginning of the accumulator */
+            if(H5F_addr_le(addr,file->accum_loc)) {
+                /* Check for completely overlapping the accumulator */
+                if(H5F_addr_ge(addr+size,file->accum_loc+file->accum_size)) {
+                    /* Reset the entire accumulator */
+                    file->accum_loc=HADDR_UNDEF;
+                    file->accum_size=FALSE;
+                    file->accum_dirty=FALSE;
+                } /* end if */
+                /* Block to free must end within the accumulator */
+                else {
+                    size_t new_accum_size;      /* Size of new accumulator buffer */
+
+                    /* Calculate the size of the overlap with the accumulator, etc. */
+                    H5_ASSIGN_OVERFLOW(overlap_size,(addr+size)-file->accum_loc,haddr_t,size_t);
+                    new_accum_size=file->accum_size-overlap_size;
+
+                    /* Move the accumulator buffer information to eliminate the freed block */
+                    HDmemmove(file->meta_accum,file->meta_accum+overlap_size,new_accum_size);
+
+                    /* Adjust the accumulator information */
+                    file->accum_loc+=overlap_size;
+                    file->accum_size=new_accum_size;
+                } /* end else */
+            } /* end if */
+            /* Block to free must start within the accumulator */
+            else {
+                /* Calculate the size of the overlap with the accumulator */
+                H5_ASSIGN_OVERFLOW(overlap_size,(file->accum_loc+file->accum_size)-addr,haddr_t,size_t);
+
+                /* Block to free is in the middle of the accumulator */
+                if(H5F_addr_lt(addr,file->accum_loc+file->accum_size)) {
+                    haddr_t tail_addr;
+                    size_t tail_size;
+
+                    /* Calculate the address & size of the tail to write */
+                    tail_addr=addr+size;
+                    H5_ASSIGN_OVERFLOW(tail_size,(file->accum_loc+file->accum_size)-tail_addr,haddr_t,size_t);
+
+                    /* Write out the part of the accumulator after the block to free */
+                    /* (Use the driver's write call directly - to avoid looping back and writing to metadata accumulator) */
+                    if ((file->cls->write)(file, H5FD_MEM_DEFAULT, dxpl_id, tail_addr, tail_size, file->meta_accum+(tail_addr-file->accum_loc))<0)
+                        HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "file write request failed")
+                } /* end if */
+
+                /* Adjust the accumulator information */
+                file->accum_size=file->accum_size-overlap_size;
+            } /* end else */
+        } /* end if */
+
+        /* Scan through the existing blocks for the mapped type to see if we can extend one */
+        curr=file->fl[mapped_type];
+        last=prev=NULL;
+        while(curr!=NULL) {
+            /* Check if the block to free adjoins the start of the current block */
+            if((addr+size)==curr->addr) {
+                /* If we previously found & merged a node, eliminate it from the list & free it */
+                if(last!=NULL) {
+                    /* Check if there was a previous block in the list */
+                    if(last_prev!=NULL)
+                        /* Eliminate the merged block from the list */
+                        last_prev->next=last->next;
+                    /* No previous block, this must be the head of the list */
+                    else
+                        /* Eliminate the merged block from the list */
+                        file->fl[mapped_type] = last->next;
+
+                    /* Check for eliminating the block before the 'current' one */
+                    if(last==prev)
+                        prev=last_prev;
+
+                    /* Free the memory for the merged block */
+                    H5FL_FREE(H5FD_free_t,last);
+                } /* end if */
+
+                /* Adjust the address and size of the block found */
+                curr->addr=addr;
+                curr->size+=size;
+
+                /* Adjust the information about to memory block to include the merged block */
+                addr=curr->addr;
+                size=curr->size;
+
+                /* Update the information about the merged node */
+                last=curr;
+                last_prev=prev;
+            } /* end if */
+            else {
+                /* Check if the block to free adjoins the end of the current block */
+                if((curr->addr+curr->size)==addr) {
+                    /* If we previously found & merged a node, eliminate it from the list & free it */
+                    if(last!=NULL) {
+                        /* Check if there was a previous block in the list */
+                        if(last_prev!=NULL)
+                            /* Eliminate the merged block from the list */
+                            last_prev->next=last->next;
+                        /* No previous block, this must be the head of the list */
+                        else
+                            /* Eliminate the merged block from the list */
+                            file->fl[mapped_type] = last->next;
+
+                        /* Check for eliminating the block before the 'current' one */
+                        if(last==prev)
+                            prev=last_prev;
+
+                        /* Free the memory for the merged block */
+                        H5FL_FREE(H5FD_free_t,last);
+                    } /* end if */
+
+                    /* Adjust the size of the block found */
+                    curr->size+=size;
+
+                    /* Adjust the information about to memory block to include the merged block */
+                    addr=curr->addr;
+                    size=curr->size;
+
+                    /* Update the information about the merged node */
+                    last=curr;
+                    last_prev=prev;
+                } /* end if */
+            } /* end else */
+
+            /* Advance to next node in list */
+            prev=curr;
+            curr=curr->next;
+        } /* end while */
+
+        /* Check if we adjusted an existing block */
+        if(last!=NULL) {
+            /* Move the node found to the front, if it wasn't already there */
+            if(last_prev!=NULL) {
+                last_prev->next=last->next;
+                last->next = file->fl[mapped_type];
+                file->fl[mapped_type] = last;
+            } /* end if */
+        } /* end if */
+        else {
+            /* Allocate a new node to hold the free block's information */
+            if(NULL==(last = H5FL_MALLOC(H5FD_free_t)))
+                HGOTO_ERROR(H5E_FILE, H5E_NOSPACE, FAIL, "can't allocate node for free space info")
+
+            last->addr = addr;
+            last->size = size;
+            last->next = file->fl[mapped_type];
+            file->fl[mapped_type] = last;
+        } /* end else */
+
+        /* Check if we increased the size of the largest block on the list */
+        file->maxsize = MAX(file->maxsize, last->size);
+
+        /* Check if this free block is at the end of file allocated space.
+         * Truncate it if this is true. */
+        if(file->cls->get_eoa) {
+            haddr_t     eoa;
+
+            eoa = file->cls->get_eoa(file);
+            if(eoa == (last->addr+last->size)) {
+                if(file->cls->set_eoa(file, last->addr) < 0)
+                    HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "set end of space allocation request failed")
+
+                /* Remove this free block from the list */
+                file->fl[mapped_type] = last->next;
+                if(file->maxsize==last->size)
+                    file->maxsize=0; /*unknown*/
+                H5FL_FREE(H5FD_free_t, last);
+            }
+        }
+    } else if (file->cls->free) {
+        if ((file->cls->free)(file, type, dxpl_id, addr, size)<0)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver free request failed")
+    } else {
+        /* leak memory */
+#ifdef H5F_DEBUG
+HDfprintf(stderr, "%s: LEAKED MEMORY!!!!!!\n", FUNC);
+#endif /* H5F_DEBUG */
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDrealloc
+ *
+ * Purpose:	Changes the size of an allocated chunk of memory, possibly
+ *		also changing its location in the file.
+ *
+ * Return:	Success:	New address of the block of memory, not
+ *				necessarily the same as the original address.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, August  3, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5FDrealloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t old_addr, hsize_t old_size,
+	    hsize_t new_size)
+{
+    haddr_t	ret_value=HADDR_UNDEF;
+
+    FUNC_ENTER_API(H5FDrealloc, HADDR_UNDEF)
+    H5TRACE6("a","xMtiahh",file,type,dxpl_id,old_addr,old_size,new_size);
+
+    /* Check args */
+    if (H5P_DEFAULT == dxpl_id)
+        dxpl_id= H5P_DATASET_XFER_DEFAULT;
+    else
+        if (TRUE!=H5P_isa_class(dxpl_id,H5P_DATASET_XFER))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, HADDR_UNDEF, "not a data transfer property list")
+
+    if (HADDR_UNDEF==(ret_value=H5FD_realloc(file, type, dxpl_id, old_addr, old_size, new_size)))
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, HADDR_UNDEF, "file reallocation request failed")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_realloc
+ *
+ * Purpose:	Private version of H5FDrealloc()
+ *
+ * Return:	Success:	New address of the block of memory, not
+ *				necessarily the same as the original address.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5FD_realloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t old_addr, hsize_t old_size,
+	     hsize_t new_size)
+{
+    haddr_t	new_addr=old_addr;
+    uint8_t	_buf[8192];
+    uint8_t	*buf=_buf;
+    haddr_t      ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_realloc, HADDR_UNDEF)
+
+    if (new_size==old_size) {
+        /*nothing to do*/
+
+    } else if (0==old_size) {
+        /* allocate memory */
+        assert(!H5F_addr_defined(old_addr));
+        if (HADDR_UNDEF==(new_addr=H5FD_alloc(file, type, dxpl_id, new_size)))
+            HGOTO_ERROR(H5E_FILE, H5E_NOSPACE, HADDR_UNDEF, "file allocation failed")
+    } else if (0==new_size) {
+        /* free memory */
+        assert(H5F_addr_defined(old_addr));
+        if(H5FD_free(file, type, dxpl_id, old_addr, old_size)<0)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, HADDR_UNDEF, "file deallocation request failed")
+        new_addr = HADDR_UNDEF;
+
+    } else if (new_size<old_size) {
+        /* free the end of the block */
+        if(H5FD_free(file, type, dxpl_id, old_addr+old_size, old_size-new_size)<0)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, HADDR_UNDEF, "file deallocation request failed")
+    } else {
+        /* move memory to new location */
+        /* Note!  This may fail if sizeof(hsize_t)>sizeof(size_t) and the
+         * object on disk is too large to read into a memory buffer all at one
+         * time.  This chunk of code would have to be re-written using a loop
+         * to move pieces of the realloced data through a fixed size buffer, etc.
+         * -QAK, 6/20/01
+         */
+        if (HADDR_UNDEF==(new_addr=H5FD_alloc(file, type, dxpl_id, new_size)))
+            HGOTO_ERROR(H5E_FILE, H5E_NOSPACE, HADDR_UNDEF, "file allocation failed")
+        H5_CHECK_OVERFLOW(old_size,hsize_t,size_t);
+        if (old_size>sizeof(_buf) && NULL==(buf=H5MM_malloc((size_t)old_size))) {
+            (void)H5FD_free(file, type, dxpl_id, new_addr, new_size);
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "memory allocation failed")
+        }
+        if (H5FD_read(file, type, dxpl_id, old_addr, (size_t)old_size, buf)<0 ||
+                H5FD_write(file, type, dxpl_id, new_addr, (size_t)old_size, buf)<0) {
+            (void)H5FD_free(file, type, dxpl_id, new_addr, new_size);
+            if (buf!=_buf)
+                H5MM_xfree(buf);
+            HGOTO_ERROR(H5E_FILE, H5E_READERROR, HADDR_UNDEF, "unable to move file block")
+        }
+
+        if (buf!=_buf)
+            H5MM_xfree(buf);
+        if(H5FD_free(file, type, dxpl_id, old_addr, old_size)<0)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTFREE, HADDR_UNDEF, "file deallocation request failed")
+    }
+
+    /* Set return value */
+    ret_value=new_addr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_can_extend
+ *
+ * Purpose:	Check if a block in the file can be extended.
+ *
+ *		This is a simple check currently, which only checks for the
+ *              block being at the end of the file.  A more sophisticated check
+ *              would also use the free space list to see if there is a block
+ *              appropriately placed to accomodate the space requested.
+ *
+ * Return:	Success:	TRUE(1)/FALSE(0)
+ *
+ * 		Failure:	FAIL
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, June 11, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5FD_can_extend(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size, hsize_t UNUSED extra_requested)
+{
+    haddr_t     eoa;                    /* End of address space in the file */
+    htri_t      ret_value=FALSE;        /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_can_extend, FAIL)
+
+    /* Retrieve the end of the address space */
+    if (HADDR_UNDEF==(eoa=H5FD_get_eoa(file)))
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver get_eoa request failed")
+
+    /* Check if the block is exactly at the end of the file */
+    if((addr+size)==eoa)
+        HGOTO_DONE(TRUE)
+    /* Check if block is inside the metadata or small data accumulator */
+    else {
+        if(type!=H5FD_MEM_DRAW) {
+            if (file->feature_flags & H5FD_FEAT_AGGREGATE_METADATA) {
+                /* If the metadata block is at the end of the file, and
+                 * the block to test adjoins the beginning of the metadata
+                 * block, then it's extendable
+                 */
+                if (file->eoma + file->cur_meta_block_size == eoa &&
+                        (addr+size)==file->eoma)
+                    HGOTO_DONE(TRUE)
+            } /* end if */
+        } /* end if */
+        else {
+            if (file->feature_flags & H5FD_FEAT_AGGREGATE_SMALLDATA) {
+                /* If the small data block is at the end of the file, and
+                 * the block to test adjoins the beginning of the small data
+                 * block, then it's extendable
+                 */
+                if (file->eosda + file->cur_sdata_block_size == eoa &&
+                        (addr+size)==file->eosda)
+                    HGOTO_DONE(TRUE)
+            } /* end if */
+        } /* end else */
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_can_extend() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_extend
+ *
+ * Purpose:	Extend a block in the file.
+ *
+ *		This is simple code currently, which only checks for the
+ *              block being at the end of the file.  A more sophisticated check
+ *              would also use the free space list to see if there is a block
+ *              appropriately placed to accomodate the space requested.
+ *
+ * Return:	Success:	TRUE(1)/FALSE(0)
+ *
+ * 		Failure:	FAIL
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, June 12, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_extend(H5FD_t *file, H5FD_mem_t type, haddr_t addr, hsize_t size, hsize_t extra_requested)
+{
+    haddr_t     eoa;                    /* End of address space in the file */
+    hbool_t     update_eoma=FALSE;      /* Whether we need to update the eoma */
+    hbool_t     update_eosda=FALSE;     /* Whether we need to update the eosda */
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_extend, FAIL)
+
+    /* Retrieve the end of the address space */
+    if (HADDR_UNDEF==(eoa=H5FD_get_eoa(file)))
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver get_eoa request failed")
+
+    /* Check if the block is exactly at the end of the file */
+    /* (Check if block is inside the metadata or small data accumulator) */
+    if((addr+size)!=eoa) {
+        if(type!=H5FD_MEM_DRAW) {
+            if (file->feature_flags & H5FD_FEAT_AGGREGATE_METADATA) {
+                /* If the metadata block is at the end of the file, and
+                 * the block to test adjoins the beginning of the metadata
+                 * block, then it's extendable
+                 */
+                if (file->eoma + file->cur_meta_block_size == eoa &&
+                        (addr+size)==file->eoma)
+                    update_eoma=TRUE;
+                else
+                    HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, FAIL, "can't extend block")
+            } /* end if */
+            else
+                HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, FAIL, "can't extend block")
+        } /* end if */
+        else {
+            if (file->feature_flags & H5FD_FEAT_AGGREGATE_SMALLDATA) {
+                /* If the small data block is at the end of the file, and
+                 * the block to test adjoins the beginning of the small data
+                 * block, then it's extendable
+                 */
+                if (file->eosda + file->cur_sdata_block_size == eoa &&
+                        (addr+size)==file->eosda)
+                    update_eosda=TRUE;
+                else
+                    HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, FAIL, "can't extend block")
+            } /* end if */
+            else
+                HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, FAIL, "can't extend block")
+        } /* end else */
+    } /* end else */
+
+    /* Check for overflowing the file */
+    if (H5F_addr_overflow(eoa, extra_requested) || eoa + extra_requested > file->maxaddr)
+        HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, FAIL, "file allocation request failed")
+
+    /* Extend the file */
+    eoa += extra_requested;
+    if (file->cls->set_eoa(file, eoa) < 0)
+        HGOTO_ERROR(H5E_VFL, H5E_NOSPACE, FAIL, "file allocation request failed")
+
+    /* Update the metadata and/or small data block */
+    assert(!(update_eoma && update_eosda));
+    if(update_eoma)
+        file->eoma+=extra_requested;
+    if(update_eosda)
+        file->eosda+=extra_requested;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_extend() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDget_eoa
+ *
+ * Purpose:	Returns the address of the first byte after the last
+ *		allocated memory in the file.
+ *
+ * Return:	Success:	First byte after allocated memory.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, July 30, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5FDget_eoa(H5FD_t *file)
+{
+    haddr_t	ret_value;
+
+    FUNC_ENTER_API(H5FDget_eoa, HADDR_UNDEF)
+    H5TRACE1("a","x",file);
+
+    /* Check args */
+    if (!file || !file->cls)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, HADDR_UNDEF, "invalid file pointer")
+
+    /* The real work */
+    if (HADDR_UNDEF==(ret_value=H5FD_get_eoa(file)))
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, HADDR_UNDEF, "file get eoa request failed")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_get_eoa
+ *
+ * Purpose:	Private version of H5FDget_eoa()
+ *
+ * Return:	Success:	First byte after allocated memory.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5FD_get_eoa(H5FD_t *file)
+{
+    haddr_t	ret_value;
+
+    FUNC_ENTER_NOAPI(H5FD_get_eoa, HADDR_UNDEF)
+    assert(file && file->cls);
+
+    /* Dispatch to driver */
+    if (HADDR_UNDEF==(ret_value=(file->cls->get_eoa)(file)))
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, HADDR_UNDEF, "driver get_eoa request failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDset_eoa
+ *
+ * Purpose:	Set the end-of-address marker for the file. The ADDR is the
+ *		address of the first byte past the last allocated byte of the
+ *		file. This function is called from two places:
+ *
+ *		    It is called after an existing file is opened in order to
+ *		    "allocate" enough space to read the superblock and then
+ *		    to "allocate" the entire hdf5 file based on the contents
+ *		    of the superblock.
+ *
+ *		    It is called during file memory allocation if the
+ *		    allocation request cannot be satisfied from the free list
+ *		    and the driver didn't supply an allocation callback.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative, no side effect
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, July 30, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FDset_eoa(H5FD_t *file, haddr_t addr)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5FDset_eoa, FAIL)
+    H5TRACE2("e","xa",file,addr);
+
+    /* Check args */
+    if (!file || !file->cls)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file pointer")
+    if (!H5F_addr_defined(addr) || addr>file->maxaddr)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid end-of-address value")
+
+    /* The real work */
+    if (H5FD_set_eoa(file, addr)<0)
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "file set eoa request failed")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_set_eoa
+ *
+ * Purpose:	Private version of H5FDset_eoa()
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative, no side effect
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_set_eoa(H5FD_t *file, haddr_t addr)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_set_eoa, FAIL)
+
+    assert(file && file->cls);
+    assert(H5F_addr_defined(addr) && addr<=file->maxaddr);
+
+    /* Dispatch to driver */
+    if ((file->cls->set_eoa)(file, addr)<0)
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver set_eoa request failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDget_eof
+ *
+ * Purpose:	Returns the end-of-file address, which is the greater of the
+ *		end-of-format address and the actual EOF marker. This
+ *		function is called after an existing file is opened in order
+ *		for the library to learn the true size of the underlying file
+ *		and to determine whether the hdf5 data has been truncated.
+ *
+ *		It is also used when a file is first opened to learn whether
+ *		the file is empty or not.
+ *
+ * 		It is permissible for the driver to return the maximum address
+ *		for the file size if the file is not empty.
+ *
+ * Return:	Success:	The EOF address.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5FDget_eof(H5FD_t *file)
+{
+    haddr_t	ret_value;
+
+    FUNC_ENTER_API(H5FDget_eof, HADDR_UNDEF)
+    H5TRACE1("a","x",file);
+
+    /* Check arguments */
+    if (!file || !file->cls)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, HADDR_UNDEF, "invalid file pointer")
+
+    /* The real work */
+    if (HADDR_UNDEF==(ret_value=H5FD_get_eof(file)))
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, HADDR_UNDEF, "file get eof request failed")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_get_eof
+ *
+ * Purpose:	Private version of H5FDget_eof()
+ *
+ * Return:	Success:	The EOF address.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5FD_get_eof(H5FD_t *file)
+{
+    haddr_t	ret_value;
+
+    FUNC_ENTER_NOAPI(H5FD_get_eof, HADDR_UNDEF)
+
+    assert(file && file->cls);
+
+    /* Dispatch to driver */
+    if (file->cls->get_eof) {
+	if (HADDR_UNDEF==(ret_value=(file->cls->get_eof)(file)))
+	    HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, HADDR_UNDEF, "driver get_eof request failed")
+    } else {
+	ret_value = file->maxaddr;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDread
+ *
+ * Purpose:	Reads SIZE bytes from FILE beginning at address ADDR
+ *		according to the data transfer property list DXPL_ID (which may
+ *		be the constant H5P_DEFAULT). The result is written into the
+ *		buffer BUF.
+ *
+ * Return:	Success:	Non-negative. The read result is written into
+ *				the BUF buffer which should be allocated by
+ *				the caller.
+ *
+ *		Failure:	Negative. The contents of BUF is undefined.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FDread(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
+	 void *buf/*out*/)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5FDread, FAIL)
+    H5TRACE6("e","xMtiazx",file,type,dxpl_id,addr,size,buf);
+
+    /* Check args */
+    if (!file || !file->cls)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file pointer")
+
+    /* Get the default dataset transfer property list if the user didn't provide one */
+    if (H5P_DEFAULT == dxpl_id)
+        dxpl_id= H5P_DATASET_XFER_DEFAULT;
+    else
+        if (TRUE!=H5P_isa_class(dxpl_id,H5P_DATASET_XFER))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data transfer property list")
+    if (!buf)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null result buffer")
+
+    /* Do the real work */
+    if (H5FD_read(file, type, dxpl_id, addr, size, buf)<0)
+	HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "file read request failed")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_read
+ *
+ * Purpose:	Private version of H5FDread()
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *	Albert Cheng, 2000-11-21
+ *	Disable the code that does early return when size==0 for
+ *	Parallel mode since a collective call would require the process
+ *	to continue on with "nothing" to transfer.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_read(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
+	  void *buf/*out*/)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_read, FAIL)
+
+    assert(file && file->cls);
+    assert(H5I_GENPROP_LST==H5I_get_type(dxpl_id));
+    assert(TRUE==H5P_isa_class(dxpl_id,H5P_DATASET_XFER));
+    assert(buf);
+
+#ifndef H5_HAVE_PARALLEL
+    /* Do not return early for Parallel mode since the I/O could be a */
+    /* collective transfer. */
+    /* The no-op case */
+    if (0==size)
+        HGOTO_DONE(SUCCEED)
+#endif /* H5_HAVE_PARALLEL */
+
+    /* Check if this information is in the metadata accumulator */
+    if((file->feature_flags&H5FD_FEAT_ACCUMULATE_METADATA) && type!=H5FD_MEM_DRAW) {
+        /* Current read overlaps with metadata accumulator */
+        if(H5F_addr_overlap(addr,size,file->accum_loc,file->accum_size)) {
+            unsigned char *read_buf=(unsigned char *)buf; /* Pointer to the buffer being read in */
+            size_t amount_read;         /* Amount to read at a time */
+#ifndef NDEBUG
+            hsize_t tempamount_read;         /* Amount to read at a time */
+#endif /* NDEBUG */
+            hsize_t read_off;           /* Offset to read from */
+
+            /* Double check that we aren't reading raw data */
+            assert(type!=H5FD_MEM_DRAW);
+
+            /* Read the part before the metadata accumulator */
+            if(addr<file->accum_loc) {
+                /* Set the amount to read */
+                H5_ASSIGN_OVERFLOW(amount_read,file->accum_loc-addr,hsize_t,size_t);
+
+                /* Dispatch to driver */
+                if ((file->cls->read)(file, type, dxpl_id, addr, amount_read, read_buf)<0)
+                    HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "driver read request failed")
+
+                /* Adjust the buffer, address & size */
+                read_buf+=amount_read;
+                addr+=amount_read;
+                size-=amount_read;
+            } /* end if */
+
+            /* Copy the part overlapping the metadata accumulator */
+            if(size>0 && (addr>=file->accum_loc && addr<(file->accum_loc+file->accum_size))) {
+                /* Set the offset to "read" from */
+                read_off=addr-file->accum_loc;
+
+                /* Set the amount to "read" */
+#ifndef NDEBUG
+                tempamount_read = file->accum_size-read_off;
+                H5_CHECK_OVERFLOW(tempamount_read,hsize_t,size_t);
+                amount_read = MIN(size, (size_t)tempamount_read);
+#else /* NDEBUG */
+                amount_read = MIN(size, (size_t)(file->accum_size-read_off));
+#endif /* NDEBUG */
+
+                /* Copy the data out of the buffer */
+                HDmemcpy(read_buf,file->meta_accum+read_off,amount_read);
+
+                /* Adjust the buffer, address & size */
+                read_buf+=amount_read;
+                addr+=amount_read;
+                size-=amount_read;
+            } /* end if */
+
+            /* Read the part after the metadata accumulator */
+            if(size>0 && addr>=(file->accum_loc+file->accum_size)) {
+                /* Dispatch to driver */
+                if ((file->cls->read)(file, type, dxpl_id, addr, size, read_buf)<0)
+                    HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "driver read request failed")
+
+                /* Adjust the buffer, address & size */
+                read_buf+=size;
+                addr+=size;
+                size-=size;
+            } /* end if */
+
+            /* Make certain we've read it all */
+            assert(size==0);
+        } /* end if */
+        /* Current read doesn't overlap with metadata accumulator, read it into accumulator */
+        else {
+            /* Only update the metadata accumulator if it is not dirty or if
+             * we are allowed to write the accumulator out during reads (when
+             * it is dirty)
+             */
+            if(file->feature_flags&H5FD_FEAT_ACCUMULATE_METADATA_READ || !file->accum_dirty) {
+                /* Flush current contents, if dirty */
+                if(file->accum_dirty) {
+                    if ((file->cls->write)(file, H5FD_MEM_DEFAULT, dxpl_id, file->accum_loc, file->accum_size, file->meta_accum)<0)
+                        HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "driver write request failed")
+
+                    /* Reset accumulator dirty flag */
+                    file->accum_dirty=FALSE;
+                } /* end if */
+
+                /* Cache the new piece of metadata */
+                /* Check if we need to resize the buffer */
+                if(size>file->accum_buf_size) {
+                    /* Grow the metadata accumulator buffer */
+                    if ((file->meta_accum=H5FL_BLK_REALLOC(meta_accum,file->meta_accum,size))==NULL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer")
+
+                    /* Note the new buffer size */
+                    file->accum_buf_size=size;
+                } /* end if */
+                else {
+                    /* Check if we should shrink the accumulator buffer */
+                    if(size<(file->accum_buf_size/H5FD_ACCUM_THROTTLE) &&
+                            file->accum_buf_size>H5FD_ACCUM_THRESHOLD) {
+                        size_t new_size=(file->accum_buf_size/H5FD_ACCUM_THROTTLE); /* New size of accumulator buffer */
+
+                        /* Shrink the accumulator buffer */
+                        if ((file->meta_accum=H5FL_BLK_REALLOC(meta_accum,file->meta_accum,new_size))==NULL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer")
+
+                        /* Note the new buffer size */
+                        file->accum_buf_size=new_size;
+                    } /* end if */
+                } /* end else */
+
+                /* Update accumulator information */
+                file->accum_loc=addr;
+                file->accum_size=size;
+                file->accum_dirty=FALSE;
+
+                /* Read into accumulator */
+                if ((file->cls->read)(file, H5FD_MEM_DEFAULT, dxpl_id, file->accum_loc, file->accum_size, file->meta_accum)<0)
+                    HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "driver read request failed")
+
+                /* Copy into buffer */
+                HDmemcpy(buf,file->meta_accum,size);
+            } /* end if */
+            else {
+                /* Dispatch to driver */
+                if ((file->cls->read)(file, type, dxpl_id, addr, size, buf)<0)
+                    HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "driver read request failed")
+            } /* end else */
+        } /* end else */
+    } /* end if */
+    else {
+        /* Dispatch to driver */
+        if ((file->cls->read)(file, type, dxpl_id, addr, size, buf)<0)
+            HGOTO_ERROR(H5E_VFL, H5E_READERROR, FAIL, "driver read request failed")
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDwrite
+ *
+ * Purpose:	Writes SIZE bytes to FILE beginning at address ADDR according
+ *		to the data transfer property list DXPL_ID (which may be the
+ *		constant H5P_DEFAULT). The bytes to be written come from the
+ *		buffer BUF.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FDwrite(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
+	  const void *buf)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5FDwrite, FAIL)
+    H5TRACE6("e","xMtiazx",file,type,dxpl_id,addr,size,buf);
+
+    /* Check args */
+    if (!file || !file->cls)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file pointer")
+    /* Get the default dataset transfer property list if the user didn't provide one */
+    if (H5P_DEFAULT == dxpl_id)
+        dxpl_id= H5P_DATASET_XFER_DEFAULT;
+    else
+        if (TRUE!=H5P_isa_class(dxpl_id,H5P_DATASET_XFER))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data transfer property list")
+    if (!buf)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null buffer")
+
+    /* The real work */
+    if (H5FD_write(file, type, dxpl_id, addr, size, buf)<0)
+	HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "file write request failed")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_write
+ *
+ * Purpose:	Private version of H5FDwrite()
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *	Albert Cheng, 2000-11-21
+ *	Disable the code that does early return when size==0 for
+ *	Parallel mode since a collective call would require the process
+ *	to continue on with "nothing" to transfer.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_write(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
+	   const void *buf)
+{
+    size_t new_size;    /* New size of the accumulator buffer */
+    size_t old_offset;  /* Offset of old data within the accumulator buffer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_write, FAIL)
+
+    assert(file && file->cls);
+    assert(H5I_GENPROP_LST==H5I_get_type(dxpl_id));
+    assert(TRUE==H5P_isa_class(dxpl_id,H5P_DATASET_XFER));
+    assert(buf);
+
+#ifndef H5_HAVE_PARALLEL
+    /* Do not return early for Parallel mode since the I/O could be a */
+    /* collective transfer. */
+    /* The no-op case */
+    if (0==size)
+        HGOTO_DONE(SUCCEED)
+#endif /* H5_HAVE_PARALLEL */
+
+    /* Check for accumulating metadata */
+    if((file->feature_flags&H5FD_FEAT_ACCUMULATE_METADATA) && type!=H5FD_MEM_DRAW) {
+        /* Check if there is already metadata in the accumulator */
+        if(file->accum_size>0) {
+            /* Check if the piece of metadata being written adjoins or is inside the metadata accumulator */
+            if((addr>=file->accum_loc && addr<=(file->accum_loc+file->accum_size))
+                || ((addr+size)>file->accum_loc && (addr+size)<=(file->accum_loc+file->accum_size))
+                || (addr<file->accum_loc && (addr+size)>=file->accum_loc)) {
+
+                /* Check if the new metadata adjoins the beginning of the current accumulator */
+                if((addr+size)==file->accum_loc) {
+                    /* Check if we need more buffer space */
+                    if((size+file->accum_size)>file->accum_buf_size) {
+                        /* Adjust the buffer size, by doubling it */
+                        file->accum_buf_size = MAX(file->accum_buf_size*2,size+file->accum_size);
+
+                        /* Reallocate the metadata accumulator buffer */
+                        if ((file->meta_accum=H5FL_BLK_REALLOC(meta_accum,file->meta_accum,file->accum_buf_size))==NULL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer")
+#ifdef H5_USING_PURIFY
+HDmemset(file->meta_accum+file->accum_size,0,(file->accum_buf_size-file->accum_size));
+#endif /* H5_USING_PURIFY */
+                    } /* end if */
+
+                    /* Move the existing metadata to the proper location */
+                    HDmemmove(file->meta_accum+size,file->meta_accum,file->accum_size);
+
+                    /* Copy the new metadata at the front */
+                    HDmemcpy(file->meta_accum,buf,size);
+
+                    /* Set the new size & location of the metadata accumulator */
+                    file->accum_loc=addr;
+                    file->accum_size=file->accum_size+size;
+
+                    /* Mark it as written to */
+                    file->accum_dirty=TRUE;
+                } /* end if */
+                /* Check if the new metadata adjoins the end of the current accumulator */
+                else if(addr==(file->accum_loc+file->accum_size)) {
+                    /* Check if we need more buffer space */
+                    if((size+file->accum_size)>file->accum_buf_size) {
+                        /* Adjust the buffer size, by doubling it */
+                        file->accum_buf_size = MAX(file->accum_buf_size*2,size+file->accum_size);
+
+                        /* Reallocate the metadata accumulator buffer */
+                        if ((file->meta_accum=H5FL_BLK_REALLOC(meta_accum,file->meta_accum,file->accum_buf_size))==NULL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer")
+#ifdef H5_USING_PURIFY
+HDmemset(file->meta_accum+file->accum_size,0,(file->accum_buf_size-file->accum_size));
+#endif /* H5_USING_PURIFY */
+                    } /* end if */
+
+                    /* Copy the new metadata to the end */
+                    HDmemcpy(file->meta_accum+file->accum_size,buf,size);
+
+                    /* Set the new size of the metadata accumulator */
+                    file->accum_size=file->accum_size+size;
+
+                    /* Mark it as written to */
+                    file->accum_dirty=TRUE;
+                } /* end if */
+                /* Check if the new metadata is entirely within the current accumulator */
+                else if(addr>=file->accum_loc && (addr+size)<=(file->accum_loc+file->accum_size)) {
+                    /* Copy the new metadata to the proper location within the accumulator */
+                    HDmemcpy(file->meta_accum+(addr-file->accum_loc),buf,size);
+
+                    /* Mark it as written to */
+                    file->accum_dirty=TRUE;
+                } /* end if */
+                /* Check if the new metadata overlaps the beginning of the current accumulator */
+                else if(addr<file->accum_loc && (addr+size)<=(file->accum_loc+file->accum_size)) {
+                    /* Calculate the new accumulator size, based on the amount of overlap */
+                    H5_ASSIGN_OVERFLOW(new_size,(file->accum_loc-addr)+file->accum_size,hsize_t,size_t);
+
+                    /* Check if we need more buffer space */
+                    if(new_size>file->accum_buf_size) {
+                        /* Adjust the buffer size, by doubling it */
+                        file->accum_buf_size = MAX(file->accum_buf_size*2,new_size);
+
+                        /* Reallocate the metadata accumulator buffer */
+                        if ((file->meta_accum=H5FL_BLK_REALLOC(meta_accum,file->meta_accum,file->accum_buf_size))==NULL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer")
+#ifdef H5_USING_PURIFY
+HDmemset(file->meta_accum+file->accum_size,0,(file->accum_buf_size-file->accum_size));
+#endif /* H5_USING_PURIFY */
+                    } /* end if */
+
+                    /* Calculate the proper offset of the existing metadata */
+                    H5_ASSIGN_OVERFLOW(old_offset,(addr+size)-file->accum_loc,hsize_t,size_t);
+
+                    /* Move the existing metadata to the proper location */
+                    HDmemmove(file->meta_accum+size,file->meta_accum+old_offset,(file->accum_size-old_offset));
+
+                    /* Copy the new metadata at the front */
+                    HDmemcpy(file->meta_accum,buf,size);
+
+                    /* Set the new size & location of the metadata accumulator */
+                    file->accum_loc=addr;
+                    file->accum_size=new_size;
+
+                    /* Mark it as written to */
+                    file->accum_dirty=TRUE;
+                } /* end if */
+                /* Check if the new metadata overlaps the end of the current accumulator */
+                else if(addr>=file->accum_loc && (addr+size)>(file->accum_loc+file->accum_size)) {
+                    /* Calculate the new accumulator size, based on the amount of overlap */
+                    H5_ASSIGN_OVERFLOW(new_size,(addr-file->accum_loc)+size,hsize_t,size_t);
+
+                    /* Check if we need more buffer space */
+                    if(new_size>file->accum_buf_size) {
+                        /* Adjust the buffer size, by doubling it */
+                        file->accum_buf_size = MAX(file->accum_buf_size*2,new_size);
+
+                        /* Reallocate the metadata accumulator buffer */
+                        if ((file->meta_accum=H5FL_BLK_REALLOC(meta_accum,file->meta_accum,file->accum_buf_size))==NULL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer")
+#ifdef H5_USING_PURIFY
+HDmemset(file->meta_accum+file->accum_size,0,(file->accum_buf_size-file->accum_size));
+#endif /* H5_USING_PURIFY */
+                    } /* end if */
+
+                    /* Copy the new metadata to the end */
+                    HDmemcpy(file->meta_accum+(addr-file->accum_loc),buf,size);
+
+                    /* Set the new size & location of the metadata accumulator */
+                    file->accum_size=new_size;
+
+                    /* Mark it as written to */
+                    file->accum_dirty=TRUE;
+                } /* end if */
+                else {
+                    assert(0 && "New metadata overlapped both beginning and end of existing metadata accumulator!");
+                } /* end else */
+            } /* end if */
+            /* New piece of metadata doesn't adjoin or overlap the existing accumulator */
+            else {
+                /* Write out the existing metadata accumulator, with dispatch to driver */
+                if(file->accum_dirty) {
+                    if ((file->cls->write)(file, H5FD_MEM_DEFAULT, dxpl_id, file->accum_loc, file->accum_size, file->meta_accum)<0)
+                        HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "driver write request failed")
+                    /* Reset accumulator dirty flag */
+                    file->accum_dirty=FALSE;
+                } /* end if */
+
+                /* Cache the new piece of metadata */
+                /* Check if we need to resize the buffer */
+                if(size>file->accum_buf_size) {
+                    /* Grow the metadata accumulator buffer */
+                    if ((file->meta_accum=H5FL_BLK_REALLOC(meta_accum,file->meta_accum,size))==NULL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer")
+
+                    /* Note the new buffer size */
+                    file->accum_buf_size=size;
+#ifdef H5_USING_PURIFY
+HDmemset(file->meta_accum+file->accum_size,0,(file->accum_buf_size-file->accum_size));
+#endif /* H5_USING_PURIFY */
+                } /* end if */
+                else {
+                    /* Check if we should shrink the accumulator buffer */
+                    if(size<(file->accum_buf_size/H5FD_ACCUM_THROTTLE) &&
+                            file->accum_buf_size>H5FD_ACCUM_THRESHOLD) {
+                        size_t tmp_size=(file->accum_buf_size/H5FD_ACCUM_THROTTLE); /* New size of accumulator buffer */
+
+                        /* Shrink the accumulator buffer */
+                        if ((file->meta_accum=H5FL_BLK_REALLOC(meta_accum,file->meta_accum,tmp_size))==NULL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer")
+
+                        /* Note the new buffer size */
+                        file->accum_buf_size=tmp_size;
+                    } /* end if */
+                } /* end else */
+
+                /* Update the metadata accumulator information */
+                file->accum_loc=addr;
+                file->accum_size=size;
+                file->accum_dirty=TRUE;
+
+                /* Store the piece of metadata in the accumulator */
+                HDmemcpy(file->meta_accum,buf,size);
+            } /* end else */
+        } /* end if */
+        /* No metadata in the accumulator, grab this piece and keep it */
+        else {
+            /* Check if we need to reallocate the buffer */
+            if(size>file->accum_buf_size) {
+                /* Reallocate the metadata accumulator buffer */
+                if ((file->meta_accum=H5FL_BLK_REALLOC(meta_accum,file->meta_accum,size))==NULL)
+                    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate metadata accumulator buffer")
+
+                /* Note the new buffer size */
+                file->accum_buf_size=size;
+            } /* end if */
+
+            /* Update the metadata accumulator information */
+            file->accum_loc=addr;
+            file->accum_size=size;
+            file->accum_dirty=TRUE;
+
+            /* Store the piece of metadata in the accumulator */
+            HDmemcpy(file->meta_accum,buf,size);
+        } /* end else */
+    } /* end if */
+    else {
+        /* Dispatch to driver */
+        if ((file->cls->write)(file, type, dxpl_id, addr, size, buf)<0)
+            HGOTO_ERROR(H5E_VFL, H5E_WRITEERROR, FAIL, "driver write request failed")
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FDflush
+ *
+ * Purpose:	Notify driver to flush all cached data.  If the driver has no
+ *		flush method then nothing happens.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *              Quincey Koziol, May 20, 2002
+ *              Added 'closing' parameter
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FDflush(H5FD_t *file, hid_t dxpl_id, unsigned closing)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5FDflush, FAIL)
+    H5TRACE3("e","xiIu",file,dxpl_id,closing);
+
+    /* Check args */
+    if (!file || !file->cls)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file pointer")
+    if (H5P_DEFAULT == dxpl_id)
+        dxpl_id= H5P_DATASET_XFER_DEFAULT;
+    else
+        if (TRUE!=H5P_isa_class(dxpl_id,H5P_DATASET_XFER))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data transfer property list")
+
+    /* Do the real work */
+    if (H5FD_flush(file,dxpl_id,closing)<0)
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "file flush request failed")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_flush
+ *
+ * Purpose:	Private version of H5FDflush()
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *              Quincey Koziol, May 20, 2002
+ *              Added 'closing' parameter
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_flush(H5FD_t *file, hid_t dxpl_id, unsigned closing)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_flush, FAIL)
+
+    assert(file && file->cls);
+
+    /* Check if we need to flush out the metadata accumulator */
+    if((file->feature_flags&H5FD_FEAT_ACCUMULATE_METADATA) && file->accum_dirty && file->accum_size>0) {
+        /* Flush the metadata contents */
+        /* Not certain if the type and dxpl should be the way they are... -QAK */
+        if ((file->cls->write)(file, H5FD_MEM_DEFAULT, dxpl_id, file->accum_loc, file->accum_size, file->meta_accum)<0)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver write request failed")
+
+        /* Reset the dirty flag */
+        file->accum_dirty=FALSE;
+    } /* end if */
+
+    if (file->cls->flush && (file->cls->flush)(file,dxpl_id,closing)<0)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, FAIL, "driver flush request failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_get_fileno
+ *
+ * Purpose:	Quick and dirty routine to retrieve the file's 'fileno' value
+ *          (Mainly added to stop non-file routines from poking about in the
+ *          H5FD_t data structure)
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *		March 27, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_get_fileno(const H5FD_t *file, unsigned long *filenum)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_get_fileno, FAIL)
+
+    assert(file);
+    assert(filenum);
+
+    /* Retrieve the file's serial number */
+    HDmemcpy(filenum,file->fileno,sizeof(file->fileno));
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_get_fileno() */
+
+
+/*--------------------------------------------------------------------------
+ * Function:    H5FDget_vfd_handle
+ *
+ * Purpose:     Returns a pointer to the file handle of low-level virtual
+ *              file driver.
+ *
+ * Return:      Non-negative if succeed; negative otherwise.
+ *
+ * Programmer:  Raymond Lu
+ *              Sep. 16, 2002
+ *
+ * Modifications:
+ *
+ *--------------------------------------------------------------------------
+ */
+herr_t H5FDget_vfd_handle(H5FD_t *file, hid_t fapl, void** file_handle)
+{
+    herr_t              ret_value;
+
+    FUNC_ENTER_API(H5FDget_vfd_handle, FAIL)
+
+    /* Check arguments */
+    assert(file);
+    assert(file_handle);
+    ret_value=H5FD_get_vfd_handle(file, fapl, file_handle);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*--------------------------------------------------------------------------
+ * Function:    H5FD_get_vfd_handle
+ *
+ * Purpose:     Retrieve the file handle for file driver.
+ *
+ * Return:      Non-negative if succeed; negative if fails.
+ *
+ * Programmer:  Raymond Lu
+ *              Sep. 16, 2002
+ *
+ * Modifications:
+ *
+ *--------------------------------------------------------------------------
+ */
+herr_t H5FD_get_vfd_handle(H5FD_t *file, hid_t fapl, void** file_handle)
+{
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_get_vfd_handle, FAIL)
+
+    assert(file_handle);
+    if(file->cls->get_handle && ((ret_value=file->cls->get_handle(file, fapl, file_handle)) < 0))
+        HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "can't get file handle for file driver")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_get_freespace
+ *
+ * Purpose:     Retrieve the amount of free space in a file.
+ *
+ * Return:      Success:        Amount of free space in file
+ *              Failure:        Negative
+ *
+ * Programmer:  Quincey Koziol
+ *              Monday, October  6, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hssize_t
+H5FD_get_freespace(const H5FD_t *file)
+{
+    H5FD_free_t *free_node;     /* Pointer to node on free list */
+    H5FD_mem_t type;            /* Type of memory */
+    hssize_t ret_value;         /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_get_freespace, FAIL)
+
+    /* check args */
+    assert(file);
+    assert(file->cls);
+
+    /* Initialize return value */
+    ret_value=0;
+
+    /* Iterate over all the types of memory, to retrieve amount of free space for each */
+    for (type=H5FD_MEM_DEFAULT; type<H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,type)) {
+        /* Iterate through the free list, accumulating the amount of free space for this type */
+        free_node = file->fl[type];
+        while(free_node) {
+            ret_value+=(hssize_t)free_node->size;
+            free_node=free_node->next;
+        } /* end while */
+    } /* end for */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_get_freespace() */
+

Added: packages/hdf5/branches/upstream/current/src/H5FDcore.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDcore.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDcore.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,845 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Tuesday, August 10, 1999
+ *
+ * Purpose:	A driver which stores the HDF5 data in main memory  using
+ *		only the HDF5 public API. This driver is useful for fast
+ *		access to small, temporary hdf5 files.
+ */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5FD_core_init_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FDcore.h"           /* Core file driver			*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"		/* Property lists			*/
+
+/* The driver identification number, initialized at runtime */
+static hid_t H5FD_CORE_g = 0;
+
+/*
+ * The description of a file belonging to this driver. The `eoa' and `eof'
+ * determine the amount of hdf5 address space in use and the high-water mark
+ * of the file (the current size of the underlying memory).
+ */
+typedef struct H5FD_core_t {
+    H5FD_t	pub;			/*public stuff, must be first	*/
+    char	*name;			/*for equivalence testing	*/
+    unsigned char *mem;			/*the underlying memory		*/
+    haddr_t	eoa;			/*end of allocated region	*/
+    haddr_t	eof;			/*current allocated size	*/
+    size_t	increment;		/*multiples for mem allocation	*/
+    int		fd;			/*backing store file descriptor	*/
+    hbool_t	dirty;			/*changes not saved?		*/
+} H5FD_core_t;
+
+/* Driver-specific file access properties */
+typedef struct H5FD_core_fapl_t {
+    size_t	increment;		/*how much to grow memory	*/
+    hbool_t	backing_store;		/*write to file name on flush	*/
+} H5FD_core_fapl_t;
+
+/* Allocate memory in multiples of this size by default */
+#define H5FD_CORE_INCREMENT		8192
+
+/*
+ * These macros check for overflow of various quantities.  These macros
+ * assume that file_offset_t is signed and haddr_t and size_t are unsigned.
+ *
+ * ADDR_OVERFLOW:	Checks whether a file address of type `haddr_t'
+ *			is too large to be represented by the second argument
+ *			of the file seek function.
+ *
+ * SIZE_OVERFLOW:	Checks whether a buffer size of type `hsize_t' is too
+ *			large to be represented by the `size_t' type.
+ *
+ * REGION_OVERFLOW:	Checks whether an address and size pair describe data
+ *			which can be addressed entirely in memory.
+ */
+#define MAXADDR 		((haddr_t)((~(size_t)0)-1))
+#define ADDR_OVERFLOW(A)	(HADDR_UNDEF==(A) || (A) > (haddr_t)MAXADDR)
+#define SIZE_OVERFLOW(Z)	((Z) > (hsize_t)MAXADDR)
+#define REGION_OVERFLOW(A,Z)	(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) ||      \
+                                 HADDR_UNDEF==(A)+(Z) ||		      \
+				 (size_t)((A)+(Z))<(size_t)(A))
+
+/* Prototypes */
+static void *H5FD_core_fapl_get(H5FD_t *_file);
+static H5FD_t *H5FD_core_open(const char *name, unsigned flags, hid_t fapl_id,
+			      haddr_t maxaddr);
+static herr_t H5FD_core_close(H5FD_t *_file);
+static int H5FD_core_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
+static haddr_t H5FD_core_get_eoa(H5FD_t *_file);
+static herr_t H5FD_core_set_eoa(H5FD_t *_file, haddr_t addr);
+static haddr_t H5FD_core_get_eof(H5FD_t *_file);
+static herr_t  H5FD_core_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
+static herr_t H5FD_core_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
+			     size_t size, void *buf);
+static herr_t H5FD_core_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
+			      size_t size, const void *buf);
+static herr_t H5FD_core_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
+
+static const H5FD_class_t H5FD_core_g = {
+    "core",					/*name			*/
+    MAXADDR,					/*maxaddr		*/
+    H5F_CLOSE_WEAK,				/*fc_degree		*/
+    NULL,					/*sb_size		*/
+    NULL,					/*sb_encode		*/
+    NULL,					/*sb_decode		*/
+    sizeof(H5FD_core_fapl_t),			/*fapl_size		*/
+    H5FD_core_fapl_get,				/*fapl_get		*/
+    NULL,					/*fapl_copy		*/
+    NULL, 					/*fapl_free		*/
+    0,						/*dxpl_size		*/
+    NULL,					/*dxpl_copy		*/
+    NULL,					/*dxpl_free		*/
+    H5FD_core_open,				/*open			*/
+    H5FD_core_close,				/*close			*/
+    H5FD_core_cmp,				/*cmp			*/
+    NULL,				        /*query			*/
+    NULL,					/*alloc			*/
+    NULL,					/*free			*/
+    H5FD_core_get_eoa,				/*get_eoa		*/
+    H5FD_core_set_eoa, 				/*set_eoa		*/
+    H5FD_core_get_eof,				/*get_eof		*/
+    H5FD_core_get_handle,                       /*get_handle            */
+    H5FD_core_read,				/*read			*/
+    H5FD_core_write,				/*write			*/
+    H5FD_core_flush,				/*flush			*/
+    NULL,                                       /*lock                  */
+    NULL,                                       /*unlock                */
+    H5FD_FLMAP_SINGLE 				/*fl_map		*/
+};
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5FD_core_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5FD_core_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5FD_core_init currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5FD_core_init_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_core_init_interface)
+
+    FUNC_LEAVE_NOAPI(H5FD_core_init())
+} /* H5FD_core_init_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_core_init
+ *
+ * Purpose:	Initialize this driver by registering the driver with the
+ *		library.
+ *
+ * Return:	Success:	The driver ID for the core driver.
+ *
+ *		Failure:	Negative.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5FD_core_init(void)
+{
+    hid_t ret_value=H5FD_CORE_g;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_core_init, FAIL)
+
+    if (H5I_VFL!=H5Iget_type(H5FD_CORE_g))
+        H5FD_CORE_g = H5FD_register(&H5FD_core_g,sizeof(H5FD_class_t));
+
+    /* Set return value */
+    ret_value=H5FD_CORE_g;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*---------------------------------------------------------------------------
+ * Function:	H5FD_core_term
+ *
+ * Purpose:	Shut down the VFD
+ *
+ * Return:	<none>
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, Jan 30, 2004
+ *
+ * Modification:
+ *
+ *---------------------------------------------------------------------------
+ */
+void
+H5FD_core_term(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_core_term)
+
+    /* Reset VFL ID */
+    H5FD_CORE_g=0;
+
+    FUNC_LEAVE_NOAPI_VOID
+} /* end H5FD_core_term() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_fapl_core
+ *
+ * Purpose:	Modify the file access property list to use the H5FD_CORE
+ *		driver defined in this source file.  The INCREMENT specifies
+ *		how much to grow the memory each time we need more.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, February 19, 1998
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-10-19
+ *		Added the BACKING_STORE argument. If set then the entire file
+ *		contents are flushed to a file with the same name as this
+ *		core file.
+ *
+ *		Raymond Lu, 2001-10-25
+ *		Changed the file access list to the new generic list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fapl_core(hid_t fapl_id, size_t increment, hbool_t backing_store)
+{
+    H5FD_core_fapl_t	fa;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value;
+
+    FUNC_ENTER_API(H5Pset_fapl_core, FAIL)
+    H5TRACE3("e","izb",fapl_id,increment,backing_store);
+
+    /* Check argument */
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+
+    fa.increment = increment;
+    fa.backing_store = backing_store;
+
+    ret_value= H5P_set_driver(plist, H5FD_CORE, &fa);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_fapl_core
+ *
+ * Purpose:	Queries properties set by the H5Pset_fapl_core() function.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, August 10, 1999
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-10-19
+ *		Added the BACKING_STORE argument.
+ *
+ *		Raymond Lu
+ *		2001-10-25
+ *		Changed file access list to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_fapl_core(hid_t fapl_id, size_t *increment/*out*/,
+		 hbool_t *backing_store/*out*/)
+{
+    H5FD_core_fapl_t	*fa;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Pget_fapl_core, FAIL)
+    H5TRACE3("e","ixx",fapl_id,increment,backing_store);
+
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+    if (H5FD_CORE!=H5P_get_driver(plist))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "incorrect VFL driver")
+    if (NULL==(fa=H5P_get_driver_info(plist)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "bad VFL driver info")
+
+    if (increment)
+        *increment = fa->increment;
+    if (backing_store)
+        *backing_store = fa->backing_store;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_core_fapl_get
+ *
+ * Purpose:	Returns a copy of the file access properties.
+ *
+ * Return:	Success:	Ptr to new file access properties.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, August 13, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FD_core_fapl_get(H5FD_t *_file)
+{
+    H5FD_core_t		*file = (H5FD_core_t*)_file;
+    H5FD_core_fapl_t	*fa = NULL;
+    void      *ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_core_fapl_get, NULL)
+
+    if (NULL==(fa=H5MM_calloc(sizeof(H5FD_core_fapl_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    fa->increment = file->increment;
+    fa->backing_store = (file->fd>=0);
+
+    /* Set return value */
+    ret_value=fa;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_core_open
+ *
+ * Purpose:	Create memory as an HDF5 file.
+ *
+ * Return:	Success:	A pointer to a new file data structure. The
+ *				public fields will be initialized by the
+ *				caller, which is always H5FD_open().
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-10-19
+ *		The backing store file is created and opened if specified.
+ *-------------------------------------------------------------------------
+ */
+static H5FD_t *
+H5FD_core_open(const char *name, unsigned UNUSED flags, hid_t fapl_id,
+	       haddr_t maxaddr)
+{
+    H5FD_core_t		*file=NULL;
+    H5FD_core_fapl_t	*fa=NULL;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    int			fd=-1;
+    H5FD_t		*ret_value;
+
+    FUNC_ENTER_NOAPI(H5FD_core_open, NULL)
+
+    /* Check arguments */
+    if (!(H5F_ACC_CREAT & flags))
+        HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, NULL, "must create core files, not open them")
+    if (0==maxaddr || HADDR_UNDEF==maxaddr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr")
+    if (ADDR_OVERFLOW(maxaddr))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, NULL, "maxaddr overflow")
+    if (H5P_DEFAULT!=fapl_id) {
+        if(NULL == (plist = H5I_object(fapl_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+        fa = H5P_get_driver_info(plist);
+    } /* end if */
+
+    /* Open backing store */
+    if (fa && fa->backing_store && name &&
+            (fd=HDopen(name, (O_CREAT|O_TRUNC|O_RDWR), 0666))<0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open backing store")
+
+    /* Create the new file struct */
+    if (NULL==(file=H5MM_calloc(sizeof(H5FD_core_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "unable to allocate file struct")
+    file->fd = fd;
+    if (name && *name)
+        file->name = HDstrdup(name);
+
+    /*
+     * The increment comes from either the file access property list or the
+     * default value. But if the file access property list was zero then use
+     * the default value instead.
+     */
+    file->increment = (fa && fa->increment>0) ?  fa->increment : H5FD_CORE_INCREMENT;
+
+    /* Set return value */
+    ret_value=(H5FD_t *)file;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_core_close
+ *
+ * Purpose:	Closes the file.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-10-19
+ *		The contents of memory are written to the backing store if
+ *		one is open.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_core_close(H5FD_t *_file)
+{
+    H5FD_core_t	*file = (H5FD_core_t*)_file;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_core_close, FAIL)
+
+    /* Release resources */
+    if (file->fd>=0)
+        HDclose(file->fd);
+    if (file->name)
+        H5MM_xfree(file->name);
+    if (file->mem)
+        H5MM_xfree(file->mem);
+    HDmemset(file, 0, sizeof(H5FD_core_t));
+    H5MM_xfree(file);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_core_cmp
+ *
+ * Purpose:	Compares two files belonging to this driver by name. If one
+ *		file doesn't have a name then it is less than the other file.
+ *		If neither file has a name then the comparison is by file
+ *		address.
+ *
+ * Return:	Success:	A value like strcmp()
+ *
+ *		Failure:	never fails (arguments were checked by the
+ *				caller).
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5FD_core_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
+{
+    const H5FD_core_t	*f1 = (const H5FD_core_t*)_f1;
+    const H5FD_core_t	*f2 = (const H5FD_core_t*)_f2;
+    int			ret_value;
+
+    FUNC_ENTER_NOAPI(H5FD_core_cmp, FAIL)
+
+    if (NULL==f1->name && NULL==f2->name) {
+        if (f1<f2)
+            HGOTO_DONE(-1)
+        if (f1>f2)
+            HGOTO_DONE(1)
+        HGOTO_DONE(0)
+    }
+
+    if (NULL==f1->name)
+        HGOTO_DONE(-1)
+    if (NULL==f2->name)
+        HGOTO_DONE(1)
+
+    ret_value = HDstrcmp(f1->name, f2->name);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_core_get_eoa
+ *
+ * Purpose:	Gets the end-of-address marker for the file. The EOA marker
+ *		is the first address past the last byte allocated in the
+ *		format address space.
+ *
+ * Return:	Success:	The end-of-address marker.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August  2, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_core_get_eoa(H5FD_t *_file)
+{
+    haddr_t ret_value;   /* Return value */
+
+    H5FD_core_t	*file = (H5FD_core_t*)_file;
+
+    FUNC_ENTER_NOAPI(H5FD_core_get_eoa, HADDR_UNDEF)
+
+    /* Set return value */
+    ret_value=file->eoa;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_core_set_eoa
+ *
+ * Purpose:	Set the end-of-address marker for the file. This function is
+ *		called shortly after an existing HDF5 file is opened in order
+ *		to tell the driver where the end of the HDF5 data is located.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_core_set_eoa(H5FD_t *_file, haddr_t addr)
+{
+    H5FD_core_t	*file = (H5FD_core_t*)_file;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_core_set_eoa, FAIL)
+
+    if (ADDR_OVERFLOW(addr))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "address overflow")
+
+    file->eoa = addr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_core_get_eof
+ *
+ * Purpose:	Returns the end-of-file marker, which is the greater of
+ *		either the size of the underlying memory or the HDF5
+ *		end-of-address markers.
+ *
+ * Return:	Success:	End of file address, the first address past
+ *				the end of the "file", either the memory
+ *				or the HDF5 file.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_core_get_eof(H5FD_t *_file)
+{
+    haddr_t ret_value;   /* Return value */
+
+    H5FD_core_t	*file = (H5FD_core_t*)_file;
+
+    FUNC_ENTER_NOAPI(H5FD_core_get_eof, HADDR_UNDEF)
+
+    /* Set return value */
+    ret_value=MAX(file->eof, file->eoa);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5FD_core_get_handle
+ *
+ * Purpose:        Returns the file handle of CORE file driver.
+ *
+ * Returns:        Non-negative if succeed or negative if fails.
+ *
+ * Programmer:     Raymond Lu
+ *                 Sept. 16, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_core_get_handle(H5FD_t *_file, hid_t UNUSED fapl, void** file_handle)
+{
+    H5FD_core_t         *file = (H5FD_core_t *)_file;
+    herr_t              ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_core_get_handle, FAIL)
+
+    if(!file_handle)
+         HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file handle not valid")
+
+    *file_handle = &(file->mem);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_core_read
+ *
+ * Purpose:	Reads SIZE bytes of data from FILE beginning at address ADDR
+ *		into buffer BUF according to data transfer properties in
+ *		DXPL_ID.
+ *
+ * Return:	Success:	Zero. Result is stored in caller-supplied
+ *				buffer BUF.
+ *
+ *		Failure:	-1, Contents of buffer BUF are undefined.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_core_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
+	       size_t size, void *buf/*out*/)
+{
+    H5FD_core_t	*file = (H5FD_core_t*)_file;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_core_read, FAIL)
+
+    assert(file && file->pub.cls);
+    assert(buf);
+
+    /* Check for overflow conditions */
+    if (HADDR_UNDEF == addr)
+        HGOTO_ERROR(H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed")
+    if (REGION_OVERFLOW(addr, size))
+        HGOTO_ERROR(H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed")
+    if (addr + size > file->eoa)
+        HGOTO_ERROR(H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed")
+
+    /* Read the part which is before the EOF marker */
+    if (addr < file->eof) {
+        size_t nbytes;
+#ifndef NDEBUG
+        hsize_t temp_nbytes;
+
+        temp_nbytes = file->eof-addr;
+        H5_CHECK_OVERFLOW(temp_nbytes,hsize_t,size_t);
+        nbytes = MIN(size,(size_t)temp_nbytes);
+#else /* NDEBUG */
+        nbytes = MIN(size,(size_t)(file->eof-addr));
+#endif /* NDEBUG */
+
+        HDmemcpy(buf, file->mem + addr, nbytes);
+        size -= nbytes;
+        addr += nbytes;
+        buf = (char *)buf + nbytes;
+    }
+
+    /* Read zeros for the part which is after the EOF markers */
+    if (size > 0)
+        HDmemset(buf, 0, size);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_core_write
+ *
+ * Purpose:	Writes SIZE bytes of data to FILE beginning at address ADDR
+ *		from buffer BUF according to data transfer properties in
+ *		DXPL_ID.
+ *
+ * Return:	Success:	Zero
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_core_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
+		size_t size, const void *buf)
+{
+    H5FD_core_t		*file = (H5FD_core_t*)_file;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_core_write, FAIL)
+
+    assert(file && file->pub.cls);
+    assert(buf);
+
+    /* Check for overflow conditions */
+    if (REGION_OVERFLOW(addr, size))
+        HGOTO_ERROR(H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed")
+    if (addr+size>file->eoa)
+        HGOTO_ERROR(H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed")
+
+    /*
+     * Allocate more memory if necessary, careful of overflow. Also, if the
+     * allocation fails then the file should remain in a usable state.  Be
+     * careful of non-Posix realloc() that doesn't understand what to do when
+     * the first argument is null.
+     */
+    if (addr+size>file->eof) {
+        unsigned char *x;
+        size_t new_eof;
+
+        H5_ASSIGN_OVERFLOW(new_eof,file->increment*((addr+size)/file->increment),hsize_t,size_t);
+
+        if ((addr+size) % file->increment)
+            new_eof += file->increment;
+        if (NULL==file->mem)
+            x = H5MM_malloc(new_eof);
+        else
+            x = H5MM_realloc(file->mem, new_eof);
+        if (!x)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate memory block")
+        file->mem = x;
+        file->eof = new_eof;
+    }
+
+    /* Write from BUF to memory */
+    HDmemcpy(file->mem+addr, buf, size);
+    file->dirty = TRUE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_core_flush
+ *
+ * Purpose:	Flushes the file to backing store if there is any and if the
+ *		dirty flag is set.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, October 15, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_core_flush(H5FD_t *_file, hid_t UNUSED dxpl_id, unsigned UNUSED closing)
+{
+    H5FD_core_t	*file = (H5FD_core_t*)_file;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_core_flush, FAIL)
+
+    /* Write to backing store */
+    if (file->dirty && file->fd>=0) {
+        haddr_t size = file->eof;
+        unsigned char *ptr = file->mem;
+
+        if (0!=HDlseek(file->fd, (off_t)0, SEEK_SET))
+            HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "error seeking in backing store")
+
+        while (size) {
+            ssize_t n;
+
+            H5_CHECK_OVERFLOW(size,hsize_t,size_t);
+            n = HDwrite(file->fd, ptr, (size_t)size);
+            if (n<0 && EINTR==errno)
+                continue;
+            if (n<0)
+                HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "error writing backing store")
+            ptr += (size_t)n;
+            size -= (size_t)n;
+        }
+        file->dirty = FALSE;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}

Added: packages/hdf5/branches/upstream/current/src/H5FDcore.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDcore.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDcore.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,41 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the sec2 driver.
+ */
+#ifndef H5FDcore_H
+#define H5FDcore_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_CORE	(H5FD_core_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+H5_DLL hid_t H5FD_core_init(void);
+H5_DLL void H5FD_core_term(void);
+H5_DLL herr_t H5Pset_fapl_core(hid_t fapl_id, size_t increment,
+				hbool_t backing_store);
+H5_DLL herr_t H5Pget_fapl_core(hid_t fapl_id, size_t *increment/*out*/,
+				hbool_t *backing_store/*out*/);
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5FDfamily.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDfamily.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDfamily.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1239 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Robb Matzke <matzke at llnl.gov>
+ *		Monday, November 10, 1997
+ *
+ * Purpose:	Implements a family of files that acts as a single hdf5
+ *		file.  The purpose is to be able to split a huge file on a
+ *		64-bit platform, transfer all the <2GB members to a 32-bit
+ *		platform, and then access the entire huge file on the 32-bit
+ *		platform.
+ *
+ *		All family members are logically the same size although their
+ *		physical sizes may vary.  The logical member size is
+ *		determined by looking at the physical size of the first member
+ *		when the file is opened.  When creating a file family, the
+ *		first member is created with a predefined physical size
+ *		(actually, this happens when the file family is flushed, and
+ *		can be quite time consuming on file systems that don't
+ *		implement holes, like nfs).
+ *
+ */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5FD_family_init_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FDfamily.h"         /* Family file driver 			*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"		/* Property lists			*/
+
+#undef MAX
+#define MAX(X,Y)	((X)>(Y)?(X):(Y))
+#undef MIN
+#define MIN(X,Y)	((X)<(Y)?(X):(Y))
+
+/* The driver identification number, initialized at runtime */
+static hid_t H5FD_FAMILY_g = 0;
+
+/* The description of a file belonging to this driver. */
+typedef struct H5FD_family_t {
+    H5FD_t	pub;		/*public stuff, must be first		*/
+    hid_t	memb_fapl_id;	/*file access property list for members	*/
+    hsize_t	memb_size;	/*maximum size of each member file	*/
+    unsigned	nmembs;		/*number of family members		*/
+    unsigned	amembs;		/*number of member slots allocated	*/
+    H5FD_t	**memb;		/*dynamic array of member pointers	*/
+    haddr_t	eoa;		/*end of allocated addresses		*/
+    char	*name;		/*name generator printf format		*/
+    unsigned	flags;		/*flags for opening additional members	*/
+} H5FD_family_t;
+
+/* Driver-specific file access properties */
+typedef struct H5FD_family_fapl_t {
+    hsize_t	memb_size;	/*size of each member			*/
+    hid_t	memb_fapl_id;	/*file access property list of each memb*/
+} H5FD_family_fapl_t;
+
+/* Driver specific data transfer properties */
+typedef struct H5FD_family_dxpl_t {
+    hid_t	memb_dxpl_id;	/*data xfer property list of each memb	*/
+} H5FD_family_dxpl_t;
+
+/* Callback prototypes */
+static void *H5FD_family_fapl_get(H5FD_t *_file);
+static void *H5FD_family_fapl_copy(const void *_old_fa);
+static herr_t H5FD_family_fapl_free(void *_fa);
+static void *H5FD_family_dxpl_copy(const void *_old_dx);
+static herr_t H5FD_family_dxpl_free(void *_dx);
+static H5FD_t *H5FD_family_open(const char *name, unsigned flags,
+				hid_t fapl_id, haddr_t maxaddr);
+static herr_t H5FD_family_close(H5FD_t *_file);
+static int H5FD_family_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
+static herr_t H5FD_family_query(const H5FD_t *_f1, unsigned long *flags);
+static haddr_t H5FD_family_get_eoa(H5FD_t *_file);
+static herr_t H5FD_family_set_eoa(H5FD_t *_file, haddr_t eoa);
+static haddr_t H5FD_family_get_eof(H5FD_t *_file);
+static herr_t  H5FD_family_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
+static herr_t H5FD_family_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
+			       size_t size, void *_buf/*out*/);
+static herr_t H5FD_family_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
+				size_t size, const void *_buf);
+static herr_t H5FD_family_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
+
+/* The class struct */
+static const H5FD_class_t H5FD_family_g = {
+    "family",					/*name			*/
+    HADDR_MAX,					/*maxaddr		*/
+    H5F_CLOSE_WEAK,				/* fc_degree		*/
+    NULL,					/*sb_size		*/
+    NULL,					/*sb_encode		*/
+    NULL,					/*sb_decode		*/
+    sizeof(H5FD_family_fapl_t),			/*fapl_size		*/
+    H5FD_family_fapl_get,			/*fapl_get		*/
+    H5FD_family_fapl_copy,			/*fapl_copy		*/
+    H5FD_family_fapl_free,			/*fapl_free		*/
+    sizeof(H5FD_family_dxpl_t),			/*dxpl_size		*/
+    H5FD_family_dxpl_copy,			/*dxpl_copy		*/
+    H5FD_family_dxpl_free,			/*dxpl_free		*/
+    H5FD_family_open,				/*open			*/
+    H5FD_family_close,				/*close			*/
+    H5FD_family_cmp,				/*cmp			*/
+    H5FD_family_query,		                /*query			*/
+    NULL,					/*alloc			*/
+    NULL,					/*free			*/
+    H5FD_family_get_eoa,			/*get_eoa		*/
+    H5FD_family_set_eoa,			/*set_eoa		*/
+    H5FD_family_get_eof,			/*get_eof		*/
+    H5FD_family_get_handle,                     /*get_handle            */
+    H5FD_family_read,				/*read			*/
+    H5FD_family_write,				/*write			*/
+    H5FD_family_flush,				/*flush			*/
+    NULL,                                       /*lock                  */
+    NULL,                                       /*unlock                */
+    H5FD_FLMAP_SINGLE 				/*fl_map		*/
+};
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5FD_family_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5FD_family_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5FD_family_init currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5FD_family_init_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_family_init_interface)
+
+    FUNC_LEAVE_NOAPI(H5FD_family_init())
+} /* H5FD_family_init_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_init
+ *
+ * Purpose:	Initialize this driver by registering the driver with the
+ *		library.
+ *
+ * Return:	Success:	The driver ID for the family driver.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5FD_family_init(void)
+{
+    hid_t ret_value=H5FD_FAMILY_g;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_family_init, FAIL)
+
+    if (H5I_VFL!=H5Iget_type(H5FD_FAMILY_g))
+        H5FD_FAMILY_g = H5FD_register(&H5FD_family_g,sizeof(H5FD_class_t));
+
+    /* Set return value */
+    ret_value=H5FD_FAMILY_g;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*---------------------------------------------------------------------------
+ * Function:	H5FD_family_term
+ *
+ * Purpose:	Shut down the VFD
+ *
+ * Return:	<none>
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, Jan 30, 2004
+ *
+ * Modification:
+ *
+ *---------------------------------------------------------------------------
+ */
+void
+H5FD_family_term(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_family_term)
+
+    /* Reset VFL ID */
+    H5FD_FAMILY_g=0;
+
+    FUNC_LEAVE_NOAPI_VOID
+} /* end H5FD_family_term() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_fapl_family
+ *
+ * Purpose:	Sets the file access property list FAPL_ID to use the family
+ *		driver. The MEMB_SIZE is the size in bytes of each file
+ *		member (used only when creating a new file) and the
+ *		MEMB_FAPL_ID is a file access property list to be used for
+ *		each family member.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ * 		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fapl_family(hid_t fapl_id, hsize_t memb_size, hid_t memb_fapl_id)
+{
+    herr_t ret_value;
+    H5FD_family_fapl_t	fa;
+    H5P_genplist_t *plist;      /* Property list pointer */
+
+    FUNC_ENTER_API(H5Pset_fapl_family, FAIL)
+    H5TRACE3("e","ihi",fapl_id,memb_size,memb_fapl_id);
+
+    /* Check arguments */
+    if(TRUE != H5P_isa_class(fapl_id, H5P_FILE_ACCESS))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+    if(H5P_DEFAULT == memb_fapl_id)
+        memb_fapl_id = H5P_FILE_ACCESS_DEFAULT;
+    else
+        if(TRUE != H5P_isa_class(memb_fapl_id, H5P_FILE_ACCESS))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access list")
+
+    /*
+     * Initialize driver specific information. No need to copy it into the FA
+     * struct since all members will be copied by H5P_set_driver().
+     */
+    fa.memb_size = memb_size;
+    fa.memb_fapl_id = memb_fapl_id;
+
+    if(NULL == (plist = H5I_object(fapl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+    ret_value= H5P_set_driver(plist, H5FD_FAMILY, &fa);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_fapl_family
+ *
+ * Purpose:	Returns information about the family file access property
+ *		list though the function arguments.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ * 		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_fapl_family(hid_t fapl_id, hsize_t *memb_size/*out*/,
+		   hid_t *memb_fapl_id/*out*/)
+{
+    H5FD_family_fapl_t	*fa;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Pget_fapl_family, FAIL)
+    H5TRACE3("e","ixx",fapl_id,memb_size,memb_fapl_id);
+
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access list")
+    if (H5FD_FAMILY!=H5P_get_driver(plist))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "incorrect VFL driver")
+    if (NULL==(fa=H5P_get_driver_info(plist)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "bad VFL driver info")
+    if (memb_size)
+        *memb_size = fa->memb_size;
+    if (memb_fapl_id) {
+        if(NULL == (plist = H5I_object(fa->memb_fapl_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access list")
+        *memb_fapl_id = H5P_copy_plist(plist);
+    } /* end if */
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_fapl_get
+ *
+ * Purpose:	Gets a file access property list which could be used to
+ *		create an identical file.
+ *
+ * Return:	Success:	Ptr to new file access property list.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, August 13, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FD_family_fapl_get(H5FD_t *_file)
+{
+    H5FD_family_t	*file = (H5FD_family_t*)_file;
+    H5FD_family_fapl_t	*fa = NULL;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    void *ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_family_fapl_get, NULL)
+
+    if (NULL==(fa=H5MM_calloc(sizeof(H5FD_family_fapl_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    fa->memb_size = file->memb_size;
+    if(NULL == (plist = H5I_object(file->memb_fapl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+    fa->memb_fapl_id = H5P_copy_plist(plist);
+
+    /* Set return value */
+    ret_value=fa;
+
+done:
+    if(ret_value==NULL) {
+        if(fa!=NULL)
+            H5MM_xfree(fa);
+    } /* end if */
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_fapl_copy
+ *
+ * Purpose:	Copies the family-specific file access properties.
+ *
+ * Return:	Success:	Ptr to a new property list
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FD_family_fapl_copy(const void *_old_fa)
+{
+    const H5FD_family_fapl_t *old_fa = (const H5FD_family_fapl_t*)_old_fa;
+    H5FD_family_fapl_t *new_fa = NULL;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    void *ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_family_fapl_copy, NULL)
+
+    if (NULL==(new_fa=H5MM_malloc(sizeof(H5FD_family_fapl_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    /* Copy the fields of the structure */
+    memcpy(new_fa, old_fa, sizeof(H5FD_family_fapl_t));
+
+    /* Deep copy the property list objects in the structure */
+    if(old_fa->memb_fapl_id==H5P_FILE_ACCESS_DEFAULT) {
+        if(H5I_inc_ref(new_fa->memb_fapl_id)<0)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTINC, NULL, "unable to increment ref count on VFL driver")
+    } /* end if */
+    else {
+        if(NULL == (plist = H5I_object(old_fa->memb_fapl_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+        new_fa->memb_fapl_id = H5P_copy_plist(plist);
+    } /* end else */
+
+    /* Set return value */
+    ret_value=new_fa;
+
+done:
+    if(ret_value==NULL) {
+        if(new_fa!=NULL)
+            H5MM_xfree(new_fa);
+    } /* end if */
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_fapl_free
+ *
+ * Purpose:	Frees the family-specific file access properties.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_family_fapl_free(void *_fa)
+{
+    H5FD_family_fapl_t	*fa = (H5FD_family_fapl_t*)_fa;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_family_fapl_free, FAIL)
+
+    if(H5I_dec_ref(fa->memb_fapl_id)<0)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTDEC, FAIL, "can't close driver ID")
+    H5MM_xfree(fa);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_dxpl_copy
+ *
+ * Purpose:	Copes the family-specific data transfer properties.
+ *
+ * Return:	Success:	Ptr to new property list
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FD_family_dxpl_copy(const void *_old_dx)
+{
+    const H5FD_family_dxpl_t *old_dx = (const H5FD_family_dxpl_t*)_old_dx;
+    H5FD_family_dxpl_t *new_dx = NULL;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    void *ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_family_dxpl_copy, NULL)
+
+    if (NULL==(new_dx=H5MM_malloc(sizeof(H5FD_family_dxpl_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    memcpy(new_dx, old_dx, sizeof(H5FD_family_dxpl_t));
+
+    if(old_dx->memb_dxpl_id==H5P_DATASET_XFER_DEFAULT) {
+        if(H5I_inc_ref(new_dx->memb_dxpl_id)<0)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTINC, NULL, "unable to increment ref count on VFL driver")
+    } /* end if */
+    else {
+        if(NULL == (plist = H5I_object(old_dx->memb_dxpl_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+        new_dx->memb_dxpl_id = H5P_copy_plist(plist);
+    } /* end else */
+
+    /* Set return value */
+    ret_value=new_dx;
+
+done:
+    if(ret_value==NULL) {
+        if(new_dx!=NULL)
+            H5MM_xfree(new_dx);
+    } /* end if */
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_dxpl_free
+ *
+ * Purpose:	Frees the family-specific data transfer properties.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_family_dxpl_free(void *_dx)
+{
+    H5FD_family_dxpl_t	*dx = (H5FD_family_dxpl_t*)_dx;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_family_dxpl_free, FAIL)
+
+    if(H5I_dec_ref(dx->memb_dxpl_id)<0)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTDEC, FAIL, "can't close driver ID")
+    H5MM_xfree(dx);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_open
+ *
+ * Purpose:	Creates and/or opens a family of files as an HDF5 file.
+ *
+ * Return:	Success:	A pointer to a new file dat structure. The
+ *				public fields will be initialized by the
+ *				caller, which is always H5FD_open().
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *              Raymond Lu
+ *              Thursday, November 18, 2004
+ *              When file is re-opened, member size passed in from access property
+ *              is checked to see if it's reasonable.  If there is only 1 member
+ *              file, member size can't be smaller than current member size.
+ *              If there are at least 2 member files, member size can only be equal
+ *              the 1st member size.
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5FD_t *
+H5FD_family_open(const char *name, unsigned flags, hid_t fapl_id,
+		 haddr_t maxaddr)
+{
+    H5FD_family_t	*file=NULL;
+    H5FD_t     		*ret_value=NULL;
+    char		memb_name[4096], temp[4096];
+    hsize_t		eof1=HADDR_UNDEF, eof2=HADDR_UNDEF;
+    unsigned		t_flags = flags & ~H5F_ACC_CREAT;
+    H5P_genplist_t      *plist;      /* Property list pointer */
+
+    FUNC_ENTER_NOAPI(H5FD_family_open, NULL)
+
+    /* Check arguments */
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid file name")
+    if (0==maxaddr || HADDR_UNDEF==maxaddr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr")
+
+    /* Initialize file from file access properties */
+    if (NULL==(file=H5MM_calloc(sizeof(H5FD_family_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "unable to allocate file struct")
+    if (H5P_FILE_ACCESS_DEFAULT==fapl_id) {
+        file->memb_fapl_id = H5P_FILE_ACCESS_DEFAULT;
+        if(H5I_inc_ref(file->memb_fapl_id)<0)
+            HGOTO_ERROR(H5E_VFL, H5E_CANTINC, NULL, "unable to increment ref count on VFL driver")
+        file->memb_size = 1024*1024*1024; /*1GB*/
+    } else {
+        H5FD_family_fapl_t *fa;
+
+        if(NULL == (plist = H5I_object(fapl_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+        fa = H5P_get_driver_info(plist);
+        if(fa->memb_fapl_id==H5P_FILE_ACCESS_DEFAULT) {
+            if(H5I_inc_ref(fa->memb_fapl_id)<0)
+                HGOTO_ERROR(H5E_VFL, H5E_CANTINC, NULL, "unable to increment ref count on VFL driver")
+            file->memb_fapl_id = fa->memb_fapl_id;
+        } /* end if */
+        else {
+            if(NULL == (plist = H5I_object(fa->memb_fapl_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+            file->memb_fapl_id = H5P_copy_plist(plist);
+        } /* end else */
+        file->memb_size = fa->memb_size;
+    }
+    file->name = H5MM_strdup(name);
+    file->flags = flags;
+
+    /* Check that names are unique */
+    sprintf(memb_name, name, 0);
+    sprintf(temp, name, 1);
+    if (!strcmp(memb_name, temp))
+        HGOTO_ERROR(H5E_FILE, H5E_FILEEXISTS, NULL, "file names not unique")
+
+    /* Open all the family members */
+    while (1) {
+        sprintf(memb_name, name, file->nmembs);
+
+        /* Enlarge member array */
+        if (file->nmembs>=file->amembs) {
+            unsigned n = MAX(64, 2*file->amembs);
+            H5FD_t **x = H5MM_realloc(file->memb, n*sizeof(H5FD_t*));
+
+            if (!x)
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "unable to reallocate members")
+            file->amembs = n;
+            file->memb = x;
+        }
+
+        /*
+         * Attempt to open file. If the first file cannot be opened then fail;
+         * otherwise an open failure means that we've reached the last member.
+         * Allow H5F_ACC_CREAT only on the first family member.
+         */
+        H5E_BEGIN_TRY {
+            file->memb[file->nmembs] = H5FDopen(memb_name,
+                (0==file->nmembs ? flags : t_flags), file->memb_fapl_id, HADDR_UNDEF);
+        } H5E_END_TRY;
+        if (!file->memb[file->nmembs]) {
+            if (0==file->nmembs)
+                HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open member file")
+            H5Eclear();
+            break;
+        }
+        file->nmembs++;
+    }
+
+    /*
+     * Get file size of the first 2 member files if exist.  Check if user sets
+     * reasonable member size.
+     */
+    if(HADDR_UNDEF==(eof1 = H5FD_get_eof(file->memb[0])))
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, NULL, "file get eof1 request failed")
+    if(file->memb[1] && (HADDR_UNDEF==(eof2 = H5FD_get_eof(file->memb[1]))))
+	HGOTO_ERROR(H5E_VFL, H5E_CANTINIT, NULL, "file get eof2 request failed")
+
+    if(eof1 && (eof2==HADDR_UNDEF || !eof2)) {
+        /* If there is only 1 member file, new member size can't be smaller than
+         * current member size.
+         */
+        if(file->memb_size<eof1)
+            file->memb_size = eof1;
+    } else if(eof1 && eof2) {
+        /* If there are at least 2 member files, new member size can only be equal
+         * to the 1st member size
+         */
+        file->memb_size = eof1;
+    }
+
+    ret_value=(H5FD_t *)file;
+
+done:
+    /* Cleanup and fail */
+    if (ret_value==NULL && file!=NULL) {
+        unsigned nerrors=0;     /* Number of errors closing member files */
+        unsigned u;             /* Local index variable */
+
+        for (u=0; u<file->nmembs; u++)
+            if (file->memb[u])
+                if (H5FD_close(file->memb[u])<0)
+                    nerrors++;
+        if (nerrors)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, NULL, "unable to close member files")
+
+        if (file->memb)
+            H5MM_xfree(file->memb);
+        if(H5I_dec_ref(file->memb_fapl_id)<0)
+            HDONE_ERROR(H5E_VFL, H5E_CANTDEC, NULL, "can't close driver ID")
+        if (file->name)
+            H5MM_xfree(file->name);
+        H5MM_xfree(file);
+    }
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_close
+ *
+ * Purpose:	Closes a family of files.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative with as many members closed as
+ *				possible. The only subsequent operation
+ *				permitted on the file is a close operation.
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_family_close(H5FD_t *_file)
+{
+    H5FD_family_t	*file = (H5FD_family_t*)_file;
+    unsigned		nerrors=0;      /* Number of errors while closing member files */
+    unsigned		u;              /* Local index variable */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_family_close, FAIL)
+
+    /* Close as many members as possible */
+    for (u=0; u<file->nmembs; u++) {
+        if (file->memb[u]) {
+            if (H5FDclose(file->memb[u])<0)
+                nerrors++;
+            else
+                file->memb[u] = NULL;
+        }
+    }
+    if (nerrors)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "unable to close member files")
+
+    /* Clean up other stuff */
+    if(H5I_dec_ref(file->memb_fapl_id)<0)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTDEC, FAIL, "can't close driver ID")
+    if (file->memb)
+        H5MM_xfree(file->memb);
+    if (file->name)
+        H5MM_xfree(file->name);
+    H5MM_xfree(file);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_cmp
+ *
+ * Purpose:	Compares two file families to see if they are the same. It
+ *		does this by comparing the first member of the two families.
+ *
+ * Return:	Success:	like strcmp()
+ *
+ *		Failure:	never fails (arguments were checked by the
+ *				caller).
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5FD_family_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
+{
+    const H5FD_family_t	*f1 = (const H5FD_family_t*)_f1;
+    const H5FD_family_t	*f2 = (const H5FD_family_t*)_f2;
+    int ret_value=(H5FD_VFD_DEFAULT);
+
+    FUNC_ENTER_NOAPI(H5FD_family_cmp, H5FD_VFD_DEFAULT)
+
+    assert(f1->nmembs>=1 && f1->memb[0]);
+    assert(f2->nmembs>=1 && f2->memb[0]);
+
+    ret_value= H5FDcmp(f1->memb[0], f2->memb[0]);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_query
+ *
+ * Purpose:	Set the flags that this VFL driver is capable of supporting.
+ *              (listed in H5FDpublic.h)
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, August 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_family_query(const H5FD_t UNUSED * _f, unsigned long *flags /* out */)
+{
+    herr_t ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_family_query, FAIL)
+
+    /* Set the VFL feature flags that this driver supports */
+    if(flags) {
+        *flags=0;
+        *flags|=H5FD_FEAT_AGGREGATE_METADATA; /* OK to aggregate metadata allocations */
+        /**flags|=H5FD_FEAT_ACCUMULATE_METADATA;*/ /* OK to accumulate metadata for faster writes.
+                                                    * - Turn it off temporarily because there's a bug
+                                                    * when trying to flush metadata during closing. */
+        *flags|=H5FD_FEAT_DATA_SIEVE;       /* OK to perform data sieving for faster raw data reads & writes */
+        *flags|=H5FD_FEAT_AGGREGATE_SMALLDATA; /* OK to aggregate "small" raw data allocations */
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_get_eoa
+ *
+ * Purpose:	Returns the end-of-address marker for the file. The EOA
+ *		marker is the first address past the last byte allocated in
+ *		the format address space.
+ *
+ * Return:	Success:	The end-of-address-marker
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_family_get_eoa(H5FD_t *_file)
+{
+    H5FD_family_t	*file = (H5FD_family_t*)_file;
+    haddr_t ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_family_get_eoa, HADDR_UNDEF)
+
+    /* Set return value */
+    ret_value=file->eoa;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_set_eoa
+ *
+ * Purpose:	Set the end-of-address marker for the file.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_family_set_eoa(H5FD_t *_file, haddr_t eoa)
+{
+    H5FD_family_t	*file = (H5FD_family_t*)_file;
+    haddr_t		addr=eoa;
+    char		memb_name[4096];
+    unsigned		u;              /* Local index variable */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_family_set_eoa, FAIL)
+
+    for (u=0; addr || u<file->nmembs; u++) {
+
+        /* Enlarge member array */
+        if (u>=file->amembs) {
+            unsigned n = MAX(64, 2*file->amembs);
+            H5FD_t **x = H5MM_realloc(file->memb, n*sizeof(H5FD_t*));
+            if (!x)
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate memory block")
+            file->amembs = n;
+            file->memb = x;
+            file->nmembs = u;
+        }
+
+        /* Create another file if necessary */
+        if (u>=file->nmembs || !file->memb[u]) {
+            file->nmembs = MAX(file->nmembs, u+1);
+            sprintf(memb_name, file->name, u);
+            H5E_BEGIN_TRY {
+                H5_CHECK_OVERFLOW(file->memb_size,hsize_t,haddr_t);
+                file->memb[u] = H5FDopen(memb_name, file->flags|H5F_ACC_CREAT,
+                             file->memb_fapl_id, (haddr_t)file->memb_size);
+            } H5E_END_TRY;
+            if (NULL==file->memb[u])
+                HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to open member file")
+        }
+
+        /* Set the EOA marker for the member */
+        H5_CHECK_OVERFLOW(file->memb_size,hsize_t,haddr_t);
+        if (addr>(haddr_t)file->memb_size) {
+            if(H5FD_set_eoa(file->memb[u], (haddr_t)file->memb_size)<0)
+                HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to set file eoa")
+            addr -= file->memb_size;
+        } else {
+            if(H5FD_set_eoa(file->memb[u], addr)<0)
+                HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to set file eoa")
+            addr = 0;
+        }
+    }
+
+    file->eoa = eoa;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_get_eof
+ *
+ * Purpose:	Returns the end-of-file marker, which is the greater of
+ *		either the total family size or the current EOA marker.
+ *
+ * Return:	Success:	End of file address, the first address past
+ *				the end of the family of files or the current
+ *				EOA, whichever is larger.
+ *
+ *		Failure:      	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_family_get_eof(H5FD_t *_file)
+{
+    H5FD_family_t	*file = (H5FD_family_t*)_file;
+    haddr_t		eof=0;
+    int			i;      /* Local index variable */
+    haddr_t ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_family_get_eof, HADDR_UNDEF)
+
+    /*
+     * Find the last member that has a non-zero EOF and break out of the loop
+     * with `i' equal to that member. If all members have zero EOF then exit
+     * loop with i==0.
+     */
+    assert(file->nmembs>0);
+    for (i=(int)file->nmembs-1; i>=0; --i) {
+        if ((eof=H5FD_get_eof(file->memb[i]))!=0)
+            break;
+        if (0==i)
+            break;
+    }
+
+    /*
+     * The file size is the number of members before the i'th member plus the
+     * size of the i'th member.
+     */
+    eof += ((unsigned)i)*file->memb_size;
+
+    /* Set return value */
+    ret_value=MAX(eof, file->eoa);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5FD_family_get_handle
+ *
+ * Purpose:        Returns the file handle of FAMILY file driver.
+ *
+ * Returns:        Non-negative if succeed or negative if fails.
+ *
+ * Programmer:     Raymond Lu
+ *                 Sept. 16, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_family_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle)
+{
+    H5FD_family_t       *file = (H5FD_family_t *)_file;
+    H5P_genplist_t      *plist;
+    hsize_t             offset;
+    int                 memb;
+    herr_t              ret_value;
+
+    FUNC_ENTER_NOAPI(H5FD_family_get_handle, FAIL)
+
+    /* Get the plist structure and family offset */
+    if(NULL == (plist = H5P_object_verify(fapl, H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
+    if(H5P_get(plist, H5F_ACS_FAMILY_OFFSET_NAME, &offset) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get offset for family driver")
+
+    if(offset>(file->memb_size*file->nmembs))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "offset is bigger than file size")
+    memb = (int)(offset/file->memb_size);
+
+    ret_value = H5FD_get_vfd_handle(file->memb[memb], fapl, file_handle);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_read
+ *
+ * Purpose:	Reads SIZE bytes of data from FILE beginning at address ADDR
+ *		into buffer BUF according to data transfer properties in
+ *		DXPL_ID.
+ *
+ * Return:	Success:	Zero. Result is stored in caller-supplied
+ *				buffer BUF.
+ *
+ *		Failure:	-1, contents of buffer BUF are undefined.
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_family_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
+		 void *_buf/*out*/)
+{
+    H5FD_family_t	*file = (H5FD_family_t*)_file;
+    unsigned char	*buf = (unsigned char*)_buf;
+    hid_t		memb_dxpl_id = H5P_DATASET_XFER_DEFAULT;
+    haddr_t		sub;
+    size_t		req;
+    hsize_t             tempreq;
+    unsigned		u;              /* Local index variable */
+    H5P_genplist_t      *plist;      /* Property list pointer */
+    herr_t              ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_family_read, FAIL)
+
+    /*
+     * Get the member data transfer property list. If the transfer property
+     * list does not belong to this driver then assume defaults
+     */
+    if(NULL == (plist = H5I_object(dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+    if (H5P_DATASET_XFER_DEFAULT!=dxpl_id && H5FD_FAMILY==H5P_get_driver(plist)) {
+        H5FD_family_dxpl_t *dx = H5P_get_driver_info(plist);
+
+        assert(TRUE==H5P_isa_class(dxpl_id, H5P_DATASET_XFER));
+        assert(dx);
+        memb_dxpl_id = dx->memb_dxpl_id;
+    }
+
+    /* Read from each member */
+    while (size>0) {
+        H5_ASSIGN_OVERFLOW(u,addr /file->memb_size,hsize_t,unsigned);
+
+        sub = addr % file->memb_size;
+
+	/* This check is for mainly for IA32 architecture whose size_t's size
+	 * is 4 bytes, to prevent overflow when user application is trying to
+	 * write files bigger than 4GB. */
+        tempreq = file->memb_size-sub;
+  	if(tempreq > SIZET_MAX)
+	    tempreq = SIZET_MAX;
+        req = MIN(size, (size_t)tempreq);
+
+        assert(u<file->nmembs);
+
+        if (H5FDread(file->memb[u], type, memb_dxpl_id, sub, req, buf)<0)
+            HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "member file read failed")
+
+        addr += req;
+        buf += req;
+        size -= req;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_write
+ *
+ * Purpose:	Writes SIZE bytes of data to FILE beginning at address ADDR
+ *		from buffer BUF according to data transfer properties in
+ *		DXPL_ID.
+ *
+ * Return:	Success:	Zero
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_family_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
+		  const void *_buf)
+{
+    H5FD_family_t	*file = (H5FD_family_t*)_file;
+    const unsigned char	*buf = (const unsigned char*)_buf;
+    hid_t		memb_dxpl_id = H5P_DATASET_XFER_DEFAULT;
+    haddr_t		sub;
+    size_t		req;
+    hsize_t             tempreq;
+    unsigned		u;      /* Local index variable */
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_family_write, FAIL)
+
+    /*
+     * Get the member data transfer property list. If the transfer property
+     * list does not belong to this driver then assume defaults.
+     */
+    if(NULL == (plist = H5I_object(dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+    if (H5P_DATASET_XFER_DEFAULT!=dxpl_id && H5FD_FAMILY==H5P_get_driver(plist)) {
+        H5FD_family_dxpl_t *dx = H5P_get_driver_info(plist);
+
+        assert(TRUE==H5P_isa_class(dxpl_id, H5P_DATASET_XFER));
+        assert(dx);
+        memb_dxpl_id = dx->memb_dxpl_id;
+    }
+
+    /* Write to each member */
+    while (size>0) {
+        H5_ASSIGN_OVERFLOW(u,addr /file->memb_size,hsize_t,unsigned);
+
+        sub = addr % file->memb_size;
+
+        /* This check is for mainly for IA32 architecture whose size_t's size
+         * is 4 bytes, to prevent overflow when user application is trying to
+         * write files bigger than 4GB. */
+        tempreq = file->memb_size-sub;
+	if(tempreq > SIZET_MAX)
+	    tempreq = SIZET_MAX;
+        req = MIN(size, (size_t)tempreq);
+
+        assert(u<file->nmembs);
+
+        if (H5FDwrite(file->memb[u], type, memb_dxpl_id, sub, req, buf)<0)
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "member file write failed")
+
+        addr += req;
+        buf += req;
+        size -= req;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_family_flush
+ *
+ * Purpose:	Flushes all family members.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1, as many files flushed as possible.
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_family_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing)
+{
+    H5FD_family_t	*file = (H5FD_family_t*)_file;
+    unsigned		u, nerrors=0;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_family_flush, FAIL)
+
+    for (u=0; u<file->nmembs; u++)
+        if (file->memb[u] && H5FD_flush(file->memb[u], dxpl_id, closing)<0)
+            nerrors++;
+
+    if (nerrors)
+        HGOTO_ERROR(H5E_IO, H5E_BADVALUE, FAIL, "unable to flush member files")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}

Added: packages/hdf5/branches/upstream/current/src/H5FDfamily.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDfamily.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDfamily.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Monday, August  4, 1999
+ *
+ * Purpose:	The public header file for the family driver.
+ */
+#ifndef H5FDfamily_H
+#define H5FDfamily_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_FAMILY	(H5FD_family_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_DLL hid_t H5FD_family_init(void);
+H5_DLL void H5FD_family_term(void);
+H5_DLL herr_t H5Pset_fapl_family(hid_t fapl_id, hsize_t memb_size,
+			  hid_t memb_fapl_id);
+H5_DLL herr_t H5Pget_fapl_family(hid_t fapl_id, hsize_t *memb_size/*out*/,
+			  hid_t *memb_fapl_id/*out*/);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5FDgass.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDgass.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDgass.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,867 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Saurabh Bagchi (bagchi at uiuc.edu)
+ *              Thursday, August 12 -Tuesday, August 17, 1999
+ *
+ * Purpose:	This is the GASS I/O driver.
+ *
+ */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5FD_gass_init_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"         /* Files access                         */
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FDgass.h"           /* GASS file driver			*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"		/* Property lists			*/
+
+#ifdef H5_HAVE_GASS
+
+/* The driver identification number, initialized at runtime */
+static hid_t H5FD_GASS_g = 0;
+
+/* File operations */
+#define OP_UNKNOWN	0
+#define OP_READ		1
+#define OP_WRITE	2
+
+/*
+ * The description of a file belonging to this driver. The `eoa' and `eof'
+ * determine the amount of hdf5 address space in use and the high-water mark
+ * of the file (the current size of the underlying Unix file). The `pos'
+ * value is used to eliminate file position updates when they would be a
+ * no-op. Unfortunately we've found systems that use separate file position
+ * indicators for reading and writing so the lseek can only be eliminated if
+ * the current operation is the same as the previous operation.  When opening
+ * a file the `eof' will be set to the current file size, `eoa' will be set
+ * to zero, `pos' will be set to H5F_ADDR_UNDEF (as it is when an error
+ * occurs), and `op' will be set to H5F_OP_UNKNOWN.
+ */
+typedef struct H5FD_gass_t {
+    H5FD_t	pub;			/*public stuff, must be first	*/
+    int		fd;			/*the unix file			*/
+    GASS_Info   info;                   /*file information */
+    haddr_t	eoa;			/*end of allocated region	*/
+    haddr_t	eof;			/*end of file; current file size*/
+    haddr_t	pos;			/*current file I/O position	*/
+    int		op;			/*last operation		*/
+
+
+} H5FD_gass_t;
+
+/*
+ * This driver supports systems that have the lseek64() function by defining
+ * some macros here so we don't have to have conditional compilations later
+ * throughout the code.
+ *
+ * file_offset_t:	The datatype for file offsets, the second argument of
+ *			the lseek() or lseek64() call.
+ *
+ * file_seek:		The function which adjusts the current file position,
+ *			either lseek() or lseek64().
+ */
+/* adding for windows NT file system support. */
+
+#ifdef H5_HAVE_LSEEK64
+#   define file_offset_t	off64_t
+#   define file_seek		lseek64
+#elif defined (WIN32)
+#   ifdef __MWERKS__
+#       define file_offset_t off_t
+#       define file_seek lseek
+#   else /*MSVC*/
+#       define file_offset_t __int64
+#       define file_seek _lseeki64
+#   endif
+#else
+#   define file_offset_t	off_t
+#   define file_seek		lseek
+#endif
+
+
+
+/*
+ * These macros check for overflow of various quantities.  These macros
+ * assume that file_offset_t is signed and haddr_t and size_t are unsigned.
+ *
+ * ADDR_OVERFLOW:	Checks whether a file address of type `haddr_t'
+ *			is too large to be represented by the second argument
+ *			of the file seek function.
+ *
+ * SIZE_OVERFLOW:	Checks whether a buffer size of type `hsize_t' is too
+ *			large to be represented by the `size_t' type.
+ *
+ * REGION_OVERFLOW:	Checks whether an address and size pair describe data
+ *			which can be addressed entirely by the second
+ *			argument of the file seek function.
+ */
+#define MAXADDR (((haddr_t)1<<(8*sizeof(file_offset_t)-1))-1)
+#define ADDR_OVERFLOW(A)	(HADDR_UNDEF==(A) ||			      \
+				 ((A) & ~(haddr_t)MAXADDR))
+#define SIZE_OVERFLOW(Z)	((Z) & ~(hsize_t)MAXADDR)
+#define REGION_OVERFLOW(A,Z)	(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) ||      \
+				 sizeof(file_offset_t)<sizeof(size_t) ||      \
+                                 HADDR_UNDEF==(A)+(Z) ||		      \
+				 (file_offset_t)((A)+(Z))<(file_offset_t)(A))
+
+/* Prototypes */
+static H5FD_t *H5FD_gass_open(const char *name, unsigned flags, hid_t fapl_id,
+			      haddr_t maxaddr);
+static herr_t H5FD_gass_close(H5FD_t *_file);
+static herr_t H5FD_gass_query(const H5FD_t *_f1, unsigned long *flags);
+static haddr_t H5FD_gass_get_eoa(H5FD_t *_file);
+static herr_t H5FD_gass_set_eoa(H5FD_t *_file, haddr_t addr);
+static haddr_t H5FD_gass_get_eof(H5FD_t *_file);
+static herr_t  H5FD_gass_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
+static herr_t H5FD_gass_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
+			     size_t size, void *buf);
+static herr_t H5FD_gass_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
+			      size_t size, const void *buf);
+
+/* GASS I/O-specific file access properties */
+typedef struct H5FD_gass_fapl_t {
+  GASS_Info            info;      /* access property parameters */
+} H5FD_gass_fapl_t;
+
+/* The GASS IO driver information */
+static const H5FD_class_t H5FD_gass_g = {
+    "gass",					/*name			*/
+    MAXADDR,					/*maxaddr		*/
+    H5F_CLOSE_WEAK,				/* fc_degree		*/
+    NULL,					/*sb_size		*/
+    NULL,					/*sb_encode		*/
+    NULL,					/*sb_decode		*/
+    sizeof(H5FD_gass_fapl_t), 			/*fapl_size		*/
+    NULL,					/*fapl_get		*/
+    NULL,					/*fapl_copy		*/
+    NULL, 					/*fapl_free		*/
+    0,						/*dxpl_size		*/
+    NULL,					/*dxpl_copy		*/
+    NULL,					/*dxpl_free		*/
+    H5FD_gass_open,				/*open			*/
+    H5FD_gass_close,				/*close			*/
+    NULL,				        /*cmp			*/
+    H5FD_gass_query,				/*query			*/
+    NULL,					/*alloc			*/
+    NULL,					/*free			*/
+    H5FD_gass_get_eoa,				/*get_eoa		*/
+    H5FD_gass_set_eoa, 				/*set_eoa		*/
+    H5FD_gass_get_eof,				/*get_eof		*/
+    H5FD_gass_get_handle,                       /*get_handle            */
+    H5FD_gass_read,				/*read			*/
+    H5FD_gass_write,				/*write			*/
+    NULL,				        /*flush			*/
+    NULL,                                       /*lock                  */
+    NULL,                                       /*unlock                */
+    H5FD_FLMAP_SINGLE 				/*fl_map		*/
+};
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5FD_gass_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5FD_gass_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5FD_gass_init currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5FD_gass_init_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_gass_init_interface)
+
+    FUNC_LEAVE_NOAPI(H5FD_gass_init())
+} /* H5FD_gass_init_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_gass_init
+ *
+ * Purpose:	Initialize this driver by registering the driver with the
+ *		library.
+ *
+ * Return:	Success:	The driver ID for the gass driver.
+ *
+ *		Failure:	Negative.
+ *
+ * Programmer:	Saurabh Bagchi
+ *              Friday, August 13, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5FD_gass_init(void)
+{
+    hid_t ret_value=H5FD_GASS_g;        /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_gass_init, FAIL)
+
+    if (!H5FD_GASS_g)
+        H5FD_GASS_g = H5FD_register(&H5FD_gass_g,sizeof(H5FD_class_t));
+
+    globus_module_activate (GLOBUS_COMMON_MODULE);
+    globus_module_activate (GLOBUS_GASS_FILE_MODULE);
+
+    /* Set return value */
+    ret_value=H5FD_GASS_g;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*---------------------------------------------------------------------------
+ * Function:	H5FD_gass_term
+ *
+ * Purpose:	Shut down the VFD
+ *
+ * Return:	<none>
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, Jan 30, 2004
+ *
+ * Modification:
+ *
+ *---------------------------------------------------------------------------
+ */
+void
+H5FD_gass_term(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_gass_term)
+
+    /* Reset VFL ID */
+    H5FD_GASS_g=0;
+
+    FUNC_LEAVE_NOAPI_VOID
+} /* end H5FD_gass_term() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_fapl_gass
+ *
+ * Purpose:	Store the user supplied GASS INFO in
+ *		the file access property list FAPL_ID which can then be used
+ *		to create and/or open the file.
+ *
+ *		GASS info object to be used for file open using GASS.
+ *              Any modification to info after
+ *		this function call returns may have undetermined effect
+ *		to the access property list.  Users should call this
+ *		function again to setup the property list.
+ *
+ *
+ * Return:	Success:	Non-negative
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:	Saurabh Bagchi
+ *		Friday, August 13, 1999
+ *
+ * Modifications:
+ *
+ *		Raymond Lu, 2001-10-25
+ *		Changed the file access list to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fapl_gass(hid_t fapl_id, GASS_Info info)
+{
+    H5FD_gass_fapl_t	fa;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value;
+
+    FUNC_ENTER_API(H5Pset_fapl_gass, FAIL)
+    /*NO TRACE*/
+
+    /* Check arguments */
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
+
+#ifdef LATER
+#warning "We need to verify that INFO contain sensible information."
+#endif
+
+    /* Initialize driver specific properties */
+    fa.info = info;
+
+    ret_value= H5P_set_driver(plist, H5FD_GASS, &fa);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_fapl_gass
+ *
+ * Purpose:	If the file access property list is set to the H5FD_GASS
+ *		driver then this function returns the GASS info object
+ *		through the INFO pointer.
+ *
+ * Return:	Success:	Non-negative with the info object returned
+ *                              through the INFO arguments if non-null.
+ *				The information is copied and it is therefore
+ *				valid only until the file access property
+ *				list is modified or closed.
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:	Saurabh Bagchi
+ *		Friday, August 13, 1999
+ *
+ * Modifications:
+ *
+ *              Raymond Lu, 2001-10-25
+ *              Changed the file access list to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_fapl_gass(hid_t fapl_id, GASS_Info *info/*out*/)
+{
+    H5FD_gass_fapl_t	*fa;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Pget_fapl_gass, FAIL)
+    H5TRACE2("e","ix",fapl_id,info);
+
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+    if (H5FD_GASS!=H5P_get_driver(plist))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "incorrect VFL driver")
+    if (NULL==(fa=H5P_get_driver_info(plist)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "bad VFL driver info")
+
+    if (info)
+        *info = fa->info;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_gass_open
+ *
+ * Purpose:	Opens a file with name NAME.  The FLAGS are a bit field with
+ *		purpose similar to the second argument of open(2) and which
+ *		are defined in H5Fpublic.h. The file access property list
+ *		FAPL_ID contains the driver properties and MAXADDR
+ *		is the largest address which this file will be expected to
+ *		access.
+ *
+ * Return:	Success:	A pointer to a new file data structure. The
+ *				public fields will be initialized by the
+ *				caller, which is always H5FD_open().
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Saurabh Bagchi
+ *              Friday, August 13, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5FD_t *
+H5FD_gass_open(const char *name, unsigned flags, hid_t fapl_id,
+	       haddr_t maxaddr)
+{
+    int		fd;
+    H5FD_gass_t	*file=NULL;
+    const H5FD_gass_fapl_t	*fa=NULL;
+    H5FD_gass_fapl_t		_fa;
+    char *filename = (char *) H5MM_malloc(80 * sizeof(char));
+    H5P_genplist_t *plist;      /* Property list pointer */
+    h5_stat_t sb;
+    H5FD_t	*ret_value;
+
+    FUNC_ENTER_NOAPI(H5FD_gass_open, NULL)
+
+    /* fprintf(stdout, "Entering H5FD_gass_open name=%s flags=0x%x\n", name, flags); */
+
+    /* Check arguments */
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid file name")
+    if (0==maxaddr || HADDR_UNDEF==maxaddr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr")
+    if (ADDR_OVERFLOW(maxaddr))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr")
+
+    strcpy (filename, name);
+
+    /* Obtain a pointer to gass-specific file access properties */
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+    if (H5P_FILE_ACCESS_DEFAULT==fapl_id || H5FD_GASS!=H5P_get_driver(plist)) {
+        GASS_INFO_NULL (_fa.info);
+        /* _fa.info = GASS_INFO_NULL; */
+        /* _fa.info = {0,0}; */ /*default*/
+        fa = &_fa;
+    } else {
+        fa = H5P_get_driver_info(plist);
+        assert(fa);
+    }
+
+    /* When I come down here, the possible flag values and the correct
+       responses are given here :-
+
+       1. H5F_ACC_CREAT | H5F_ACC_RDWR | H5F_ACC_EXCL : The file is
+          a new one. Go ahead and open it in O_RDWR.
+
+       2. H5F_ACC_CREAT | H5F_ACC_RDWR | H5F_ACC_TRUNC : Use
+          O_RDWR | O_TRUNC with gass_open.
+
+       3. H5F_ACC_RDWR | H5F_ACC_TRUNC : File already exists. Truncate it.
+
+       4. H5F_ACC_RDWR : Use O_RDWR with gass_open
+
+       5. H5F_ACC_RDWR is not set : Use O_RDONLY with gass_open
+
+       One reason why we cannot simply pass on the flags to gass_open
+       is that gass_open does not support many of them (e.g., O_CREAT)
+    */
+
+
+    if ((flags & H5F_ACC_CREAT) && (flags & H5F_ACC_RDWR) && (flags & H5F_ACC_EXCL)) {
+        if ((fd = globus_gass_open (filename, O_RDWR|O_TRUNC)) < 0)
+            HGOTO_ERROR(H5E_IO, H5E_CANTOPENFILE, NULL, "open failed")
+    }
+    else if ((flags & H5F_ACC_CREAT) && (flags & H5F_ACC_RDWR) && (flags & H5F_ACC_TRUNC)) {
+        if ((fd = globus_gass_open (filename, O_RDWR|O_TRUNC)) < 0)
+            HGOTO_ERROR(H5E_IO, H5E_CANTOPENFILE, NULL, "open failed")
+
+    }
+    else if ((flags & H5F_ACC_RDWR) && (flags & H5F_ACC_TRUNC)) {
+        if ((fd = globus_gass_open (filename, O_RDWR|O_TRUNC)) < 0)
+            HGOTO_ERROR(H5E_IO, H5E_CANTOPENFILE, NULL, "open failed")
+
+    }
+    else if (flags & H5F_ACC_RDWR) {
+        if ((fd = globus_gass_open (filename, O_RDWR)) < 0)
+            HGOTO_ERROR(H5E_IO, H5E_CANTOPENFILE, NULL, "open failed")
+
+    }
+    else { /* This is case where H5F_ACC_RDWR is not set */
+        if ((fd = globus_gass_open (filename, O_RDONLY)) < 0)
+            HGOTO_ERROR(H5E_IO, H5E_CANTOPENFILE, NULL, "open failed")
+
+    }
+
+    if (HDfstat(fd, &sb)<0) {
+        close(fd);
+        HGOTO_ERROR(H5E_IO, H5E_BADFILE, NULL, "fstat failed")
+    }
+
+    /* Create the new file struct */
+    if (NULL==(file=H5MM_calloc(sizeof(H5FD_gass_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate file struct")
+    file->fd = fd;
+    file->eof = sb.st_size;
+    file->pos = HADDR_UNDEF;
+    file->op = OP_UNKNOWN;
+    file->info = fa->info;
+
+    /* Set return value */
+    ret_value=(H5FD_t*)file;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_gass_close
+ *
+ * Purpose:	Closes a GASS file.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1, file not closed.
+ *
+ * Programmer:	Saurabh Bagchi
+ *              Monday, August 16, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_gass_close (H5FD_t *_file)
+{
+    H5FD_gass_t *file = (H5FD_gass_t *)_file;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_gass_close, FAIL)
+
+    if (file == NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid file handle")
+
+    if (globus_gass_close (file->fd) < 0)
+        HGOTO_ERROR(H5E_IO, H5E_CANTCLOSEFILE, FAIL, "can't close GASS file")
+
+    H5MM_xfree(file);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_gass_query
+ *
+ * Purpose:	Set the flags that this VFL driver is capable of supporting.
+ *              (listed in H5FDpublic.h)
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, September 26, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_gass_query(const UNUSED H5FD_t *_f, unsigned long *flags /* out */)
+{
+    herr_t ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_gass_query, FAIL)
+
+    /* Set the VFL feature flags that this driver supports */
+    if(flags) {
+        *flags = 0;
+        *flags|=H5FD_FEAT_DATA_SIEVE;       /* OK to perform data sieving for faster raw data reads & writes */
+        *flags|=H5FD_FEAT_AGGREGATE_SMALLDATA; /* OK to aggregate "small" raw data allocations */
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_gass_get_eoa
+ *
+ * Purpose:	Gets the end-of-address marker for the file. The EOA marker
+ *              is the first address past the last byte allocated in the
+ *              format address space.
+ *
+ * Return:	Success:	The end-of-address marker.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:  Saurabh Bagchi
+ *              Monday, August 16, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_gass_get_eoa(H5FD_t *_file)
+{
+    H5FD_gass_t *file = (H5FD_gass_t *)_file;
+    haddr_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_gass_get_eoa, HADDR_UNDEF)
+
+    /* Set return value */
+    ret_value=file->eoa;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_gass_set_eoa
+ *
+ * Purpose:     Set the end-of-address marker for the file. This function is
+ *              called shortly after an existing HDF5 file is opened in order
+ *              to tell the driver where the end of the HDF5 data is located.
+ *
+ * Return:      Success:        0
+ *
+ * Programmer:  Saurabh Bagchi
+ *              Monday, August 16, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_gass_set_eoa(H5FD_t *_file, haddr_t addr)
+{
+    H5FD_gass_t *file = (H5FD_gass_t *)_file;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_gass_set_eoa, FAIL)
+
+    file->eoa = addr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_gass_get_eof
+ *
+ * Purpose:     Returns the end-of-file marker, which is the greater of
+ *              either the Unix end-of-file or the HDF5 end-of-address
+ *              markers.
+ *
+ * Return:      Success:        End of file address, the first address past
+ *                              the end of the "file", either the Unix file
+ *                              or the HDF5 file.
+ *
+ *              Failure:        HADDR_UNDEF
+ *
+ * Programmer:  Saurabh Bagchi
+ *              Monday, August 16, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_gass_get_eof(H5FD_t *_file)
+{
+    H5FD_gass_t *file = (H5FD_gass_t*)_file;
+    haddr_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_gass_get_eof, HADDR_UNDEF)
+
+    /* Set return value */
+    ret_value=MAX(file->eof, file->eoa);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5FD_gass_get_handle
+ *
+ * Purpose:        Returns the file handle of GASS file driver.
+ *
+ * Returns:        Non-negative if succeed or negative if fails.
+ *
+ * Programmer:     Raymond Lu
+ *                 Sept. 16, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_gass_get_handle(H5FD_t *_file, hid_t UNUSED fapl, void** file_handle)
+{
+    H5FD_gass_t         *file = (H5FD_gass_t *)_file;
+    herr_t              ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_gass_get_handle, FAIL)
+
+    if(!file_handle)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file handle not valid")
+
+    *file_handle = &(file->fd);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_gass_read
+ *
+ * Purpose:     Reads SIZE bytes of data from FILE beginning at address ADDR
+ *              into buffer BUF.
+ *
+ * Return:      Success:        Zero. Result is stored in caller-supplied
+ *                              buffer BUF.
+ *
+ *              Failure:        -1, Contents of buffer BUF are undefined.
+ *
+ * Programmer:  Saurabh Bagchi
+ *              Monday, August 16, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_gass_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t dxpl_id/*unused*/, haddr_t addr,
+               size_t size, void *buf/*out*/)
+{
+    H5FD_gass_t         *file = (H5FD_gass_t*)_file;
+    ssize_t             nbytes;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_gass_read, FAIL)
+
+    assert(file && file->pub.cls);
+    assert(buf);
+
+    /* Check for overflow conditions */
+    if (HADDR_UNDEF==addr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "addr undefined")
+    if (REGION_OVERFLOW(addr, size))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr too large")
+    if (addr+size>file->eoa)
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr too large")
+
+    /* Seek to the correct location */
+    if ((addr!=file->pos || OP_READ!=file->op) &&
+            file_seek(file->fd, (file_offset_t)addr, SEEK_SET)<0) {
+        file->pos = HADDR_UNDEF;
+        file->op = OP_UNKNOWN;
+        HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "gass file seek failed")
+    }
+
+    /*
+     * Read data, being careful of interrupted system calls, partial results,
+     * and the end of the file.
+     */
+    while (size>0) {
+        do
+            nbytes = read(file->fd, buf, size);
+        while (-1==nbytes && EINTR==errno);
+
+        if (-1==nbytes) {
+            /* error */
+            file->pos = HADDR_UNDEF;
+            file->op = OP_UNKNOWN;
+            HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "gass file read failed")
+        }
+        if (0==nbytes) {
+            /* end of file but not end of format address space */
+            memset(buf, 0, size);
+            size = 0;
+        }
+        assert(nbytes>=0);
+        assert(nbytes<=size);
+        size -= (hsize_t)nbytes;
+        addr += (haddr_t)nbytes;
+        buf = (char*)buf + nbytes;
+    }
+
+    /* Update current position */
+    file->pos = addr;
+    file->op = OP_READ;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_gass_write
+ *
+ * Purpose:     Writes SIZE bytes of data to FILE beginning at address ADDR
+ *              from buffer BUF.
+ *
+ * Return:      Success:        Zero
+ *
+ *              Failure:        -1
+ *
+ * Programmer:  Saurabh Bagchi
+ *              Tuesday, August 17, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_gass_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id/*unused*/, haddr_t addr,
+                size_t size, const void *buf)
+{
+    H5FD_gass_t         *file = (H5FD_gass_t*)_file;
+    ssize_t             nbytes;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_gass_write, FAIL)
+
+    assert(file && file->pub.cls);
+    assert(buf);
+
+    /* Check for overflow conditions */
+    if (HADDR_UNDEF==addr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "addr undefined")
+    if (REGION_OVERFLOW(addr, size))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr too large")
+    if (addr+size>file->eoa)
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr too large")
+
+    /* Seek to the correct location */
+    if ((addr!=file->pos || OP_WRITE!=file->op) &&
+            file_seek(file->fd, (file_offset_t)addr, SEEK_SET)<0) {
+        file->pos = HADDR_UNDEF;
+        file->op = OP_UNKNOWN;
+        HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "gass file seek failed")
+    }
+
+    /*
+     * Write the data, being careful of interrupted system calls and partial
+     * results
+     */
+    while (size>0) {
+        do
+            nbytes = write(file->fd, buf, size);
+        while (-1==nbytes && EINTR==errno);
+
+        if (-1==nbytes) {
+            /* error */
+            file->pos = HADDR_UNDEF;
+            file->op = OP_UNKNOWN;
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "gass file write failed")
+        }
+        assert(nbytes>0);
+        assert(nbytes<=size);
+        size -= (hsize_t)nbytes;
+        addr += (haddr_t)nbytes;
+        buf = (const char*)buf + nbytes;
+    }
+
+    /* Update current position and eof */
+    file->pos = addr;
+    file->op = OP_WRITE;
+    if (file->pos>file->eof)
+        file->eof = file->pos;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+#endif  /* H5_HAVE_GASS */

Added: packages/hdf5/branches/upstream/current/src/H5FDgass.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDgass.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDgass.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,69 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Saurabh Bagchi <bagchi at uiuc.edu>
+ *              Tuesday, August 17, 1999
+ *
+ * Purpose:	The public header file for the gass driver.
+ */
+#ifndef H5FDgass_H
+#define H5FDgass_H
+
+#include "H5FDpublic.h"
+#include "H5Ipublic.h"
+
+#include <string.h>
+
+#ifdef H5_HAVE_GASS
+#define H5FD_GASS        (H5FD_gass_init())
+#else
+#define H5FD_GASS        (-1)
+#endif
+
+#ifdef H5_HAVE_GASS
+/* Define the GASS info object. (Will be added to later as more GASS
+   functionality is sought to be exposed. */
+typedef struct GASS_Info {
+  unsigned long block_size;
+  unsigned long max_length;
+} GASS_Info;
+
+#define GASS_INFO_NULL(v) memset((void *)&v, 0, sizeof(GASS_Info));
+/*
+  GASS_Info zzGassInfo = {0L,0L};
+  #define GASS_INFO_NULL zzGassInfo
+*/
+#endif
+
+/* Function prototypes */
+#ifdef H5_HAVE_GASS
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+hid_t H5FD_gass_init(void);
+void H5FD_gass_term(void);
+herr_t H5Pset_fapl_gass(hid_t fapl_id, GASS_Info info);
+herr_t H5Pget_fapl_gass(hid_t fapl_id, GASS_Info *info/*out*/);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif /* H5FDgass_H */
+

Added: packages/hdf5/branches/upstream/current/src/H5FDlog.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDlog.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDlog.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1386 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Monday, April 17, 2000
+ *
+ * Purpose:	The POSIX unbuffered file driver using only the HDF5 public
+ *		API and with a few optimizations: the lseek() call is made
+ *		only when the current file position is unknown or needs to be
+ *		changed based on previous I/O through this driver (don't mix
+ *		I/O from this driver with I/O from other parts of the
+ *		application to the same file).
+ *          With custom modifications...
+ */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5FD_log_init_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FDlog.h"		/* Logging file driver			*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"		/* Property lists			*/
+
+#ifdef MAX
+#undef MAX
+#define MAX(X,Y)	((X)>(Y)?(X):(Y))
+#endif /* MAX */
+
+/* The driver identification number, initialized at runtime */
+static hid_t H5FD_LOG_g = 0;
+
+/* File operations */
+#define OP_UNKNOWN	0
+#define OP_READ		1
+#define OP_WRITE	2
+
+/* Driver-specific file access properties */
+typedef struct H5FD_log_fapl_t {
+    char *logfile;	        /* Allocated log file name */
+    unsigned flags;             /* Flags for logging behavior */
+    size_t buf_size;            /* Size of buffers for track flavor and number of times each byte is accessed */
+} H5FD_log_fapl_t;
+
+/* Define strings for the different file memory types */
+static const char *flavors[]={   /* These are defined in H5FDpublic.h */
+    "H5FD_MEM_DEFAULT",
+    "H5FD_MEM_SUPER",
+    "H5FD_MEM_BTREE",
+    "H5FD_MEM_DRAW",
+    "H5FD_MEM_GHEAP",
+    "H5FD_MEM_LHEAP",
+    "H5FD_MEM_OHDR",
+};
+
+/*
+ * The description of a file belonging to this driver. The `eoa' and `eof'
+ * determine the amount of hdf5 address space in use and the high-water mark
+ * of the file (the current size of the underlying Unix file). The `pos'
+ * value is used to eliminate file position updates when they would be a
+ * no-op. Unfortunately we've found systems that use separate file position
+ * indicators for reading and writing so the lseek can only be eliminated if
+ * the current operation is the same as the previous operation.  When opening
+ * a file the `eof' will be set to the current file size, `eoa' will be set
+ * to zero, `pos' will be set to H5F_ADDR_UNDEF (as it is when an error
+ * occurs), and `op' will be set to H5F_OP_UNKNOWN.
+ */
+typedef struct H5FD_log_t {
+    H5FD_t	pub;			/*public stuff, must be first	*/
+    int		fd;			/*the unix file			*/
+    haddr_t	eoa;			/*end of allocated region	*/
+    haddr_t	eof;			/*end of file; current file size*/
+    haddr_t	pos;			/*current file I/O position	*/
+    int		op;			    /*last operation		*/
+    unsigned char *nread;   /* Number of reads from a file location */
+    unsigned char *nwrite;  /* Number of write to a file location */
+    unsigned char *flavor;  /* Flavor of information written to file location */
+    size_t  iosize;         /* Size of I/O information buffers */
+    FILE   *logfp;          /* Log file pointer */
+    H5FD_log_fapl_t fa;	/*driver-specific file access properties*/
+#ifndef WIN32
+    /*
+     * On most systems the combination of device and i-node number uniquely
+     * identify a file.
+     */
+    dev_t	device;			/*file device number		*/
+    ino_t	inode;			/*file i-node number		*/
+#else
+    /*
+     * On WIN32 the low-order word of a unique identifier associated with the
+     * file and the volume serial number uniquely identify a file. This number
+     * (which, both? -rpm) may change when the system is restarted or when the
+     * file is opened. After a process opens a file, the identifier is
+     * constant until the file is closed. An application can use this
+     * identifier and the volume serial number to determine whether two
+     * handles refer to the same file.
+     */
+    DWORD fileindexlo;
+    DWORD fileindexhi;
+#endif
+} H5FD_log_t;
+
+
+/*
+ * This driver supports systems that have the lseek64() function by defining
+ * some macros here so we don't have to have conditional compilations later
+ * throughout the code.
+ *
+ * file_offset_t:	The datatype for file offsets, the second argument of
+ *			the lseek() or lseek64() call.
+ *
+ * file_seek:		The function which adjusts the current file position,
+ *			either lseek() or lseek64().
+ */
+/* adding for windows NT file system support. */
+
+#ifdef H5_HAVE_LSEEK64
+#   define file_offset_t	off64_t
+#   define file_seek		lseek64
+#elif defined (WIN32)
+#   ifdef __MWERKS__
+#       define file_offset_t off_t
+#       define file_seek lseek
+#   else /*MSVC*/
+#       define file_offset_t __int64
+#       define file_seek _lseeki64
+#   endif
+#else
+#   define file_offset_t	off_t
+#   define file_seek		lseek
+#endif
+
+
+/*
+ * These macros check for overflow of various quantities.  These macros
+ * assume that file_offset_t is signed and haddr_t and size_t are unsigned.
+ *
+ * ADDR_OVERFLOW:	Checks whether a file address of type `haddr_t'
+ *			is too large to be represented by the second argument
+ *			of the file seek function.
+ *
+ * SIZE_OVERFLOW:	Checks whether a buffer size of type `hsize_t' is too
+ *			large to be represented by the `size_t' type.
+ *
+ * REGION_OVERFLOW:	Checks whether an address and size pair describe data
+ *			which can be addressed entirely by the second
+ *			argument of the file seek function.
+ */
+#define MAXADDR (((haddr_t)1<<(8*sizeof(file_offset_t)-1))-1)
+#define ADDR_OVERFLOW(A)	(HADDR_UNDEF==(A) ||			      \
+				 ((A) & ~(haddr_t)MAXADDR))
+#define SIZE_OVERFLOW(Z)	((Z) & ~(hsize_t)MAXADDR)
+#define REGION_OVERFLOW(A,Z)	(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) ||      \
+				 sizeof(file_offset_t)<sizeof(size_t) ||      \
+                                 HADDR_UNDEF==(A)+(Z) ||		      \
+				 (file_offset_t)((A)+(Z))<(file_offset_t)(A))
+
+/* Prototypes */
+static void *H5FD_log_fapl_get(H5FD_t *file);
+static void *H5FD_log_fapl_copy(const void *_old_fa);
+static herr_t H5FD_log_fapl_free(void *_fa);
+static H5FD_t *H5FD_log_open(const char *name, unsigned flags, hid_t fapl_id,
+			      haddr_t maxaddr);
+static herr_t H5FD_log_close(H5FD_t *_file);
+static int H5FD_log_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
+static herr_t H5FD_log_query(const H5FD_t *_f1, unsigned long *flags);
+static haddr_t H5FD_log_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+static haddr_t H5FD_log_get_eoa(H5FD_t *_file);
+static herr_t H5FD_log_set_eoa(H5FD_t *_file, haddr_t addr);
+static haddr_t H5FD_log_get_eof(H5FD_t *_file);
+static herr_t  H5FD_log_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
+static herr_t H5FD_log_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
+			     size_t size, void *buf);
+static herr_t H5FD_log_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
+			      size_t size, const void *buf);
+static herr_t H5FD_log_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
+
+/*
+ * The free list map which causes each request type to use no free lists
+ */
+#define H5FD_FLMAP_NOLIST {						      \
+    H5FD_MEM_NOLIST,			/*default*/			      \
+    H5FD_MEM_NOLIST,			/*super*/			      \
+    H5FD_MEM_NOLIST,			/*btree*/			      \
+    H5FD_MEM_NOLIST,			/*draw*/			      \
+    H5FD_MEM_NOLIST,			/*gheap*/			      \
+    H5FD_MEM_NOLIST,			/*lheap*/			      \
+    H5FD_MEM_NOLIST			/*ohdr*/			      \
+}
+
+static const H5FD_class_t H5FD_log_g = {
+    "log",					/*name			*/
+    MAXADDR,					/*maxaddr		*/
+    H5F_CLOSE_WEAK,				/* fc_degree		*/
+    NULL,					/*sb_size		*/
+    NULL,					/*sb_encode		*/
+    NULL,					/*sb_decode		*/
+    sizeof(H5FD_log_fapl_t),                    /*fapl_size		*/
+    H5FD_log_fapl_get,		                /*fapl_get		*/
+    H5FD_log_fapl_copy,		                /*fapl_copy		*/
+    H5FD_log_fapl_free,		                /*fapl_free		*/
+    0,						/*dxpl_size		*/
+    NULL,					/*dxpl_copy		*/
+    NULL,					/*dxpl_free		*/
+    H5FD_log_open,				/*open			*/
+    H5FD_log_close,				/*close			*/
+    H5FD_log_cmp,				/*cmp			*/
+    H5FD_log_query,				/*query			*/
+    H5FD_log_alloc,				/*alloc			*/
+    NULL,					/*free			*/
+    H5FD_log_get_eoa,				/*get_eoa		*/
+    H5FD_log_set_eoa, 				/*set_eoa		*/
+    H5FD_log_get_eof,				/*get_eof		*/
+    H5FD_log_get_handle,                        /*get_handle            */
+    H5FD_log_read,				/*read			*/
+    H5FD_log_write,				/*write			*/
+    H5FD_log_flush,				/*flush			*/
+    NULL,                                       /*lock                  */
+    NULL,                                       /*unlock                */
+    H5FD_FLMAP_NOLIST 				/*fl_map		*/
+};
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5FD_log_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5FD_log_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5FD_log_init currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5FD_log_init_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_log_init_interface)
+
+    FUNC_LEAVE_NOAPI(H5FD_log_init())
+} /* H5FD_log_init_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_init
+ *
+ * Purpose:	Initialize this driver by registering the driver with the
+ *		library.
+ *
+ * Return:	Success:	The driver ID for the log driver.
+ *
+ *		Failure:	Negative.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5FD_log_init(void)
+{
+    hid_t ret_value;         /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_log_init, FAIL)
+
+    if (H5I_VFL!=H5Iget_type(H5FD_LOG_g))
+        H5FD_LOG_g = H5FD_register(&H5FD_log_g,sizeof(H5FD_class_t));
+
+    /* Set return value */
+    ret_value=H5FD_LOG_g;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*---------------------------------------------------------------------------
+ * Function:	H5FD_log_term
+ *
+ * Purpose:	Shut down the VFD
+ *
+ * Return:	<none>
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, Jan 30, 2004
+ *
+ * Modification:
+ *
+ *---------------------------------------------------------------------------
+ */
+void
+H5FD_log_term(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_log_term)
+
+    /* Reset VFL ID */
+    H5FD_LOG_g=0;
+
+    FUNC_LEAVE_NOAPI_VOID
+} /* end H5FD_log_term() */
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_fapl_log
+ *
+ * Purpose:	Modify the file access property list to use the H5FD_LOG
+ *		driver defined in this source file.  There are no driver
+ *		specific properties.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, February 19, 1998
+ *
+ * Modifications:
+ *              We copy the LOGFILE value into our own access properties.
+ *
+ * 		Raymond Lu, 2001-10-25
+ *		Changed the file access list to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fapl_log(hid_t fapl_id, const char *logfile, int verbosity)
+{
+    H5FD_log_fapl_t	fa;     /* File access property list information */
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value;
+
+    FUNC_ENTER_API(H5Pset_fapl_log, FAIL)
+    H5TRACE3("e","isIs",fapl_id,logfile,verbosity);
+
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+
+    fa.logfile=logfile;
+    if(verbosity>0) {
+        fa.flags=H5FD_LOG_LOC_IO|H5FD_LOG_FLAVOR;
+        if(verbosity>1)
+            fa.flags|=H5FD_LOG_FILE_IO;
+    } /* end if */
+    fa.buf_size=32*(1024*1024);
+    ret_value= H5P_set_driver(plist, H5FD_LOG, &fa);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+#else /* H5_WANT_H5_V1_4_COMPAT */
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_fapl_log
+ *
+ * Purpose:	Modify the file access property list to use the H5FD_LOG
+ *		driver defined in this source file.  There are no driver
+ *		specific properties.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, February 19, 1998
+ *
+ * Modifications:
+ *              We copy the LOGFILE value into our own access properties.
+ *
+ * 		Raymond Lu, 2001-10-25
+ *		Changed the file access list to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fapl_log(hid_t fapl_id, const char *logfile, unsigned flags, size_t buf_size)
+{
+    H5FD_log_fapl_t	fa;     /* File access property list information */
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value;
+
+    FUNC_ENTER_API(H5Pset_fapl_log, FAIL)
+    H5TRACE4("e","isIuz",fapl_id,logfile,flags,buf_size);
+
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+
+    fa.logfile=(char*)logfile;
+    fa.flags=flags;
+    fa.buf_size=buf_size;
+    ret_value= H5P_set_driver(plist, H5FD_LOG, &fa);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_fapl_get
+ *
+ * Purpose:	Returns a file access property list which indicates how the
+ *		specified file is being accessed. The return list could be
+ *		used to access another file the same way.
+ *
+ * Return:	Success:	Ptr to new file access property list with all
+ *				members copied from the file struct.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, April 20, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FD_log_fapl_get(H5FD_t *_file)
+{
+    H5FD_log_t	*file = (H5FD_log_t*)_file;
+    void *ret_value;    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_log_fapl_get, NULL)
+
+    /* Set return value */
+    ret_value= H5FD_log_fapl_copy(&(file->fa));
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_log_fapl_get() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_fapl_copy
+ *
+ * Purpose:	Copies the log-specific file access properties.
+ *
+ * Return:	Success:	Ptr to a new property list
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, April 20, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FD_log_fapl_copy(const void *_old_fa)
+{
+    const H5FD_log_fapl_t *old_fa = (const H5FD_log_fapl_t*)_old_fa;
+    H5FD_log_fapl_t *new_fa = H5MM_malloc(sizeof(H5FD_log_fapl_t));
+    void *ret_value;    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_log_fapl_copy, NULL)
+
+    assert(new_fa);
+
+    /* Copy the general information */
+    HDmemcpy(new_fa, old_fa, sizeof(H5FD_log_fapl_t));
+
+    /* Deep copy the log file name */
+    if(old_fa->logfile!=NULL)
+        if (NULL==(new_fa->logfile=HDstrdup(old_fa->logfile)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "unable to allocate log file name")
+
+    /* Set return value */
+    ret_value=new_fa;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_log_fapl_copy() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_fapl_free
+ *
+ * Purpose:	Frees the log-specific file access properties.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, April 20, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_log_fapl_free(void *_fa)
+{
+    H5FD_log_fapl_t	*fa = (H5FD_log_fapl_t*)_fa;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_log_fapl_free, FAIL)
+
+    /* Free the fapl information */
+    if(fa->logfile)
+        H5MM_xfree(fa->logfile);
+    H5MM_xfree(fa);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_log_fapl_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_open
+ *
+ * Purpose:	Create and/or opens a Unix file as an HDF5 file.
+ *
+ * Return:	Success:	A pointer to a new file data structure. The
+ *				public fields will be initialized by the
+ *				caller, which is always H5FD_open().
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5FD_t *
+H5FD_log_open(const char *name, unsigned flags, hid_t fapl_id,
+	       haddr_t maxaddr)
+{
+    int	    o_flags;
+    int		fd=(-1);
+    H5FD_log_t	*file=NULL;
+    H5FD_log_fapl_t	*fa;     /* File access property list information */
+#ifdef WIN32
+    HFILE filehandle;
+    struct _BY_HANDLE_FILE_INFORMATION fileinfo;
+#endif
+    h5_stat_t sb;
+    H5P_genplist_t *plist;      /* Property list */
+    H5FD_t	*ret_value;
+
+    FUNC_ENTER_NOAPI(H5FD_log_open, NULL)
+
+    /* Check arguments */
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid file name")
+    if (0==maxaddr || HADDR_UNDEF==maxaddr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr")
+    if (ADDR_OVERFLOW(maxaddr))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, NULL, "bogus maxaddr")
+
+    /* Build the open flags */
+    o_flags = (H5F_ACC_RDWR & flags) ? O_RDWR : O_RDONLY;
+    if (H5F_ACC_TRUNC & flags) o_flags |= O_TRUNC;
+    if (H5F_ACC_CREAT & flags) o_flags |= O_CREAT;
+    if (H5F_ACC_EXCL & flags) o_flags |= O_EXCL;
+
+    /* Open the file */
+    if ((fd=HDopen(name, o_flags, 0666))<0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file")
+    if (HDfstat(fd, &sb)<0)
+        HGOTO_ERROR(H5E_FILE, H5E_BADFILE, NULL, "unable to fstat file")
+
+    /* Create the new file struct */
+    if (NULL==(file=H5MM_calloc(sizeof(H5FD_log_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "unable to allocate file struct")
+
+    /* Get the driver specific information */
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+    fa = H5P_get_driver_info(plist);
+
+    file->fd = fd;
+    H5_ASSIGN_OVERFLOW(file->eof,sb.st_size,h5_stat_size_t,haddr_t);
+    file->pos = HADDR_UNDEF;
+    file->op = OP_UNKNOWN;
+#ifdef WIN32
+    filehandle = _get_osfhandle(fd);
+    (void)GetFileInformationByHandle((HANDLE)filehandle, &fileinfo);
+    file->fileindexhi = fileinfo.nFileIndexHigh;
+    file->fileindexlo = fileinfo.nFileIndexLow;
+#else
+    file->device = sb.st_dev;
+    file->inode = sb.st_ino;
+#endif
+
+    /* Get the flags for logging */
+    file->fa.flags=fa->flags;
+
+    /* Check if we are doing any logging at all */
+    if(file->fa.flags!=0) {
+        file->iosize=fa->buf_size;
+        if(file->fa.flags&H5FD_LOG_NUM_READ) {
+            file->nread=H5MM_calloc(file->iosize);
+            assert(file->nread);
+        } /* end if */
+        if(file->fa.flags&H5FD_LOG_NUM_WRITE) {
+            file->nwrite=H5MM_calloc(file->iosize);
+            assert(file->nwrite);
+        } /* end if */
+        if(file->fa.flags&H5FD_LOG_FLAVOR) {
+            file->flavor=H5MM_calloc(file->iosize);
+            assert(file->flavor);
+        } /* end if */
+        if(fa->logfile)
+            file->logfp=HDfopen(fa->logfile,"w");
+        else
+            file->logfp=stderr;
+    } /* end if */
+
+    /* Set return value */
+    ret_value=(H5FD_t*)file;
+
+done:
+    if(ret_value==NULL) {
+        if(fd>=0)
+            HDclose(fd);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_log_open() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_close
+ *
+ * Purpose:	Closes a Unix file.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1, file not closed.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_log_close(H5FD_t *_file)
+{
+    H5FD_log_t	*file = (H5FD_log_t*)_file;
+#ifdef H5_HAVE_GETTIMEOFDAY
+    struct timeval timeval_start,timeval_stop;
+    struct timeval timeval_diff;
+#endif /* H5_HAVE_GETTIMEOFDAY */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_log_close, FAIL)
+
+#ifdef H5_HAVE_GETTIMEOFDAY
+    if(file->fa.flags&H5FD_LOG_TIME_CLOSE)
+        HDgettimeofday(&timeval_start,NULL);
+#endif /* H5_HAVE_GETTIMEOFDAY */
+    if (close(file->fd)<0)
+        HGOTO_ERROR(H5E_IO, H5E_CANTCLOSEFILE, FAIL, "unable to close file")
+#ifdef H5_HAVE_GETTIMEOFDAY
+    if(file->fa.flags&H5FD_LOG_TIME_CLOSE)
+        HDgettimeofday(&timeval_stop,NULL);
+#endif /* H5_HAVE_GETTIMEOFDAY */
+
+    /* Dump I/O information */
+    if(file->fa.flags!=0) {
+        haddr_t addr;
+        haddr_t last_addr;
+        unsigned char last_val;
+
+#ifdef H5_HAVE_GETTIMEOFDAY
+        if(file->fa.flags&H5FD_LOG_TIME_CLOSE) {
+             /* Calculate the elapsed gettimeofday time */
+             timeval_diff.tv_usec=timeval_stop.tv_usec-timeval_start.tv_usec;
+             timeval_diff.tv_sec=timeval_stop.tv_sec-timeval_start.tv_sec;
+             if(timeval_diff.tv_usec<0) {
+                 timeval_diff.tv_usec+=1000000;
+                 timeval_diff.tv_sec--;
+             } /* end if */
+            HDfprintf(file->logfp,"Close took: (%f s)\n",(double)timeval_diff.tv_sec+((double)timeval_diff.tv_usec/(double)1000000.0));
+        } /* end if */
+#endif /* H5_HAVE_GETTIMEOFDAY */
+
+        /* Dump the write I/O information */
+        if(file->fa.flags&H5FD_LOG_FILE_WRITE) {
+            HDfprintf(file->logfp,"Dumping write I/O information:\n");
+            last_val=file->nwrite[0];
+            last_addr=0;
+            addr=1;
+            while(addr<file->eoa) {
+                if(file->nwrite[addr]!=last_val) {
+                    HDfprintf(file->logfp,"\tAddr %10a-%10a (%10lu bytes) written to %3d times\n",last_addr,(addr-1),(unsigned long)(addr-last_addr),(int)last_val);
+                    last_val=file->nwrite[addr];
+                    last_addr=addr;
+                } /* end if */
+                addr++;
+            } /* end while */
+            HDfprintf(file->logfp,"\tAddr %10a-%10a (%10lu bytes) written to %3d times\n",last_addr,(addr-1),(unsigned long)(addr-last_addr),(int)last_val);
+        } /* end if */
+
+        /* Dump the read I/O information */
+        if(file->fa.flags&H5FD_LOG_FILE_READ) {
+            HDfprintf(file->logfp,"Dumping read I/O information:\n");
+            last_val=file->nread[0];
+            last_addr=0;
+            addr=1;
+            while(addr<file->eoa) {
+                if(file->nread[addr]!=last_val) {
+                    HDfprintf(file->logfp,"\tAddr %10a-%10a (%10lu bytes) read from %3d times\n",last_addr,(addr-1),(unsigned long)(addr-last_addr),(int)last_val);
+                    last_val=file->nread[addr];
+                    last_addr=addr;
+                } /* end if */
+                addr++;
+            } /* end while */
+            HDfprintf(file->logfp,"\tAddr %10a-%10a (%10lu bytes) read from %3d times\n",last_addr,(addr-1),(unsigned long)(addr-last_addr),(int)last_val);
+        } /* end if */
+
+        /* Dump the I/O flavor information */
+        if(file->fa.flags&H5FD_LOG_FLAVOR) {
+            HDfprintf(file->logfp,"Dumping I/O flavor information:\n");
+            last_val=file->flavor[0];
+            last_addr=0;
+            addr=1;
+            while(addr<file->eoa) {
+                if(file->flavor[addr]!=last_val) {
+                    HDfprintf(file->logfp,"\tAddr %10a-%10a (%10lu bytes) flavor is %s\n",last_addr,(addr-1),(unsigned long)(addr-last_addr),flavors[last_val]);
+                    last_val=file->flavor[addr];
+                    last_addr=addr;
+                } /* end if */
+                addr++;
+            } /* end while */
+            HDfprintf(file->logfp,"\tAddr %10a-%10a (%10lu bytes) flavor is %s\n",last_addr,(addr-1),(unsigned long)(addr-last_addr),flavors[last_val]);
+        } /* end if */
+
+        /* Free the logging information */
+        if(file->fa.flags&H5FD_LOG_FILE_WRITE)
+            file->nwrite=H5MM_xfree(file->nwrite);
+        if(file->fa.flags&H5FD_LOG_FILE_READ)
+            file->nread=H5MM_xfree(file->nread);
+        if(file->fa.flags&H5FD_LOG_FLAVOR)
+            file->flavor=H5MM_xfree(file->flavor);
+        if(file->logfp!=stderr)
+            fclose(file->logfp);
+    } /* end if */
+
+    H5MM_xfree(file);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_cmp
+ *
+ * Purpose:	Compares two files belonging to this driver using an
+ *		arbitrary (but consistent) ordering.
+ *
+ * Return:	Success:	A value like strcmp()
+ *
+ *		Failure:	never fails (arguments were checked by the
+ *				caller).
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5FD_log_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
+{
+    const H5FD_log_t	*f1 = (const H5FD_log_t*)_f1;
+    const H5FD_log_t	*f2 = (const H5FD_log_t*)_f2;
+    int ret_value=0;
+
+    FUNC_ENTER_NOAPI(H5FD_log_cmp, H5FD_VFD_DEFAULT)
+
+#ifdef WIN32
+    if (f1->fileindexhi < f2->fileindexhi) HGOTO_DONE(-1)
+    if (f1->fileindexhi > f2->fileindexhi) HGOTO_DONE(1)
+
+    if (f1->fileindexlo < f2->fileindexlo) HGOTO_DONE(-1)
+    if (f1->fileindexlo > f2->fileindexlo) HGOTO_DONE(1)
+
+#else
+#ifdef H5_DEV_T_IS_SCALAR
+    if (f1->device < f2->device) HGOTO_DONE(-1)
+    if (f1->device > f2->device) HGOTO_DONE(1)
+#else /* H5_DEV_T_IS_SCALAR */
+    /* If dev_t isn't a scalar value on this system, just use memcmp to
+     * determine if the values are the same or not.  The actual return value
+     * shouldn't really matter...
+     */
+    if(HDmemcmp(&(f1->device),&(f2->device),sizeof(dev_t))<0) HGOTO_DONE(-1)
+    if(HDmemcmp(&(f1->device),&(f2->device),sizeof(dev_t))>0) HGOTO_DONE(1)
+#endif /* H5_DEV_T_IS_SCALAR */
+
+    if (f1->inode < f2->inode) HGOTO_DONE(-1)
+    if (f1->inode > f2->inode) HGOTO_DONE(1)
+#endif
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_query
+ *
+ * Purpose:	Set the flags that this VFL driver is capable of supporting.
+ *              (listed in H5FDpublic.h)
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, August 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_log_query(const H5FD_t UNUSED * _f, unsigned long *flags /* out */)
+{
+    herr_t ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_log_query, FAIL)
+
+    /* Set the VFL feature flags that this driver supports */
+    if(flags) {
+        *flags = 0;
+        *flags|=H5FD_FEAT_AGGREGATE_METADATA; /* OK to aggregate metadata allocations */
+        *flags|=H5FD_FEAT_ACCUMULATE_METADATA; /* OK to accumulate metadata for faster writes */
+        *flags|=H5FD_FEAT_DATA_SIEVE;       /* OK to perform data sieving for faster raw data reads & writes */
+        *flags|=H5FD_FEAT_AGGREGATE_SMALLDATA; /* OK to aggregate "small" raw data allocations */
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_alloc
+ *
+ * Purpose:	Allocate file memory.
+ *
+ * Return:	Success:	Address of new memory
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, April 17, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static haddr_t
+H5FD_log_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, hsize_t size)
+{
+    H5FD_log_t	*file = (H5FD_log_t*)_file;
+    haddr_t		addr;
+    haddr_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_log_alloc, HADDR_UNDEF)
+
+    /* Compute the address for the block to allocate */
+    addr = file->eoa;
+
+    /* Check if we need to align this block */
+    if(size>=file->pub.threshold) {
+        /* Check for an already aligned block */
+        if(addr%file->pub.alignment!=0)
+            addr=((addr/file->pub.alignment)+1)*file->pub.alignment;
+    } /* end if */
+
+    file->eoa = addr+size;
+
+    /* Retain the (first) flavor of the information written to the file */
+    if(file->fa.flags!=0) {
+        if(file->fa.flags&H5FD_LOG_FLAVOR) {
+            assert(addr<file->iosize);
+            H5_CHECK_OVERFLOW(size,hsize_t,size_t);
+            HDmemset(&file->flavor[addr],(int)type,(size_t)size);
+        } /* end if */
+
+        if(file->fa.flags&H5FD_LOG_ALLOC)
+            HDfprintf(file->logfp,"%10a-%10a (%10Hu bytes) Allocated, flavor=%s\n",addr,addr+size-1,size,flavors[type]);
+    } /* end if */
+
+    /* Set return value */
+    ret_value=addr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* H5FD_log_alloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_get_eoa
+ *
+ * Purpose:	Gets the end-of-address marker for the file. The EOA marker
+ *		is the first address past the last byte allocated in the
+ *		format address space.
+ *
+ * Return:	Success:	The end-of-address marker.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August  2, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_log_get_eoa(H5FD_t *_file)
+{
+    H5FD_log_t	*file = (H5FD_log_t*)_file;
+    haddr_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_log_get_eoa, HADDR_UNDEF)
+
+    /* Set return value */
+    ret_value=file->eoa;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_set_eoa
+ *
+ * Purpose:	Set the end-of-address marker for the file. This function is
+ *		called shortly after an existing HDF5 file is opened in order
+ *		to tell the driver where the end of the HDF5 data is located.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_log_set_eoa(H5FD_t *_file, haddr_t addr)
+{
+    H5FD_log_t	*file = (H5FD_log_t*)_file;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_log_set_eoa, FAIL)
+
+    file->eoa = addr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_get_eof
+ *
+ * Purpose:	Returns the end-of-file marker, which is the greater of
+ *		either the Unix end-of-file or the HDF5 end-of-address
+ *		markers.
+ *
+ * Return:	Success:	End of file address, the first address past
+ *				the end of the "file", either the Unix file
+ *				or the HDF5 file.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_log_get_eof(H5FD_t *_file)
+{
+    H5FD_log_t	*file = (H5FD_log_t*)_file;
+    haddr_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_log_get_eof, HADDR_UNDEF)
+
+    /* Set return value */
+    ret_value=MAX(file->eof, file->eoa);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5FD_log_get_handle
+ *
+ * Purpose:        Returns the file handle of LOG file driver.
+ *
+ * Returns:        Non-negative if succeed or negative if fails.
+ *
+ * Programmer:     Raymond Lu
+ *                 Sept. 16, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_log_get_handle(H5FD_t *_file, hid_t UNUSED fapl, void** file_handle)
+{
+    H5FD_log_t          *file = (H5FD_log_t *)_file;
+    herr_t              ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_log_get_handle, FAIL)
+
+    if(!file_handle)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file handle not valid")
+
+    *file_handle = &(file->fd);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_read
+ *
+ * Purpose:	Reads SIZE bytes of data from FILE beginning at address ADDR
+ *		into buffer BUF according to data transfer properties in
+ *		DXPL_ID.
+ *
+ * Return:	Success:	Zero. Result is stored in caller-supplied
+ *				buffer BUF.
+ *
+ *		Failure:	-1, Contents of buffer BUF are undefined.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_log_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
+	       size_t size, void *buf/*out*/)
+{
+    H5FD_log_t		*file = (H5FD_log_t*)_file;
+    ssize_t		nbytes;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_log_read, FAIL)
+
+    assert(file && file->pub.cls);
+    assert(buf);
+
+    /* Check for overflow conditions */
+    if (HADDR_UNDEF==addr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined")
+    if (REGION_OVERFLOW(addr, size))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
+    if (addr+size>file->eoa)
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
+
+    /* Log the I/O information about the read */
+    if(file->fa.flags!=0) {
+        size_t tmp_size=size;
+        haddr_t tmp_addr=addr;
+
+        /* Log information about the number of times these locations are read */
+        if(file->fa.flags&H5FD_LOG_FILE_READ) {
+            assert((addr+size)<file->iosize);
+            while(tmp_size-->0)
+                file->nread[tmp_addr++]++;
+        } /* end if */
+
+        /* Log information about the seek, if it's going to occur */
+        if(file->fa.flags&H5FD_LOG_LOC_SEEK) {
+            if(addr!=file->pos || OP_READ!=file->op)
+                HDfprintf(file->logfp,"Seek: From %10a To %10a\n",file->pos,addr);
+        } /* end if */
+
+        /* Log information about the read */
+        if(file->fa.flags&H5FD_LOG_LOC_READ) {
+            /* Output the flavor information, if we have it */
+            if(file->fa.flags&H5FD_LOG_FLAVOR)
+                HDfprintf(file->logfp,"%10a-%10a (%10Zu bytes) Read, flavor=%s\n",addr,addr+size-1,size,flavors[file->flavor[addr]]);
+            else
+                HDfprintf(file->logfp,"%10a-%10a (%10Zu bytes) Read\n",addr,addr+size-1,size);
+        } /* end if */
+    } /* end if */
+
+    /* Seek to the correct location */
+    if ((addr!=file->pos || OP_READ!=file->op) &&
+            file_seek(file->fd, (file_offset_t)addr, SEEK_SET)<0) {
+        file->pos = HADDR_UNDEF;
+        file->op = OP_UNKNOWN;
+        HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
+    }
+
+    /*
+     * Read data, being careful of interrupted system calls, partial results,
+     * and the end of the file.
+     */
+    while (size>0) {
+        do {
+            nbytes = HDread(file->fd, buf, size);
+        } while (-1==nbytes && EINTR==errno);
+        if (-1==nbytes) {
+            /* error */
+            file->pos = HADDR_UNDEF;
+            file->op = OP_UNKNOWN;
+            HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed")
+        }
+        if (0==nbytes) {
+            /* end of file but not end of format address space */
+            HDmemset(buf, 0, size);
+            size = 0;
+        }
+        assert(nbytes>=0);
+        assert((size_t)nbytes<=size);
+        H5_CHECK_OVERFLOW(nbytes,ssize_t,size_t);
+        size -= (size_t)nbytes;
+        H5_CHECK_OVERFLOW(nbytes,ssize_t,haddr_t);
+        addr += (haddr_t)nbytes;
+        buf = (char*)buf + nbytes;
+    }
+
+    /* Update current position */
+    file->pos = addr;
+    file->op = OP_READ;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_write
+ *
+ * Purpose:	Writes SIZE bytes of data to FILE beginning at address ADDR
+ *		from buffer BUF according to data transfer properties in
+ *		DXPL_ID.
+ *
+ * Return:	Success:	Zero
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_log_write(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, haddr_t addr,
+		size_t size, const void *buf)
+{
+    H5FD_log_t		*file = (H5FD_log_t*)_file;
+    ssize_t		nbytes;
+    size_t      orig_size=size; /* Save the original size for later */
+    haddr_t     orig_addr=addr;
+#ifdef H5_HAVE_GETTIMEOFDAY
+    struct timeval timeval_start,timeval_stop;
+    struct timeval timeval_diff;
+#endif /* H5_HAVE_GETTIMEOFDAY */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_log_write, FAIL)
+
+    assert(file && file->pub.cls);
+    assert(size>0);
+    assert(buf);
+
+    /* Verify that we are writing out the type of data we allocated in this location */
+    assert(type==H5FD_MEM_DEFAULT || type==(H5FD_mem_t)file->flavor[addr] || (H5FD_mem_t)file->flavor[addr]==H5FD_MEM_DEFAULT);
+    assert(type==H5FD_MEM_DEFAULT || type==(H5FD_mem_t)file->flavor[(addr+size)-1] || (H5FD_mem_t)file->flavor[(addr+size)-1]==H5FD_MEM_DEFAULT);
+
+    /* Check for overflow conditions */
+    if (HADDR_UNDEF==addr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined")
+    if (REGION_OVERFLOW(addr, size))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
+    if (addr+size>file->eoa)
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
+
+    /* Log the I/O information about the write */
+    if(file->fa.flags&H5FD_LOG_FILE_WRITE) {
+        size_t tmp_size=size;
+        haddr_t tmp_addr=addr;
+
+        assert((addr+size)<file->iosize);
+        while(tmp_size-->0)
+            file->nwrite[tmp_addr++]++;
+    } /* end if */
+
+    /* Seek to the correct location */
+    if (addr!=file->pos || OP_WRITE!=file->op) {
+#ifdef H5_HAVE_GETTIMEOFDAY
+        if(file->fa.flags&H5FD_LOG_TIME_SEEK)
+            HDgettimeofday(&timeval_start,NULL);
+#endif /* H5_HAVE_GETTIMEOFDAY */
+        if(file_seek(file->fd, (file_offset_t)addr, SEEK_SET)<0) {
+            file->pos = HADDR_UNDEF;
+            file->op = OP_UNKNOWN;
+            HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
+        } /* end if */
+#ifdef H5_HAVE_GETTIMEOFDAY
+        if(file->fa.flags&H5FD_LOG_TIME_SEEK)
+            HDgettimeofday(&timeval_stop,NULL);
+#endif /* H5_HAVE_GETTIMEOFDAY */
+
+        /* Log information about the seek */
+        if(file->fa.flags&H5FD_LOG_LOC_SEEK) {
+#ifdef H5_HAVE_GETTIMEOFDAY
+            HDfprintf(file->logfp,"Seek: From %10a To %10a",file->pos,addr);
+            if(file->fa.flags&H5FD_LOG_TIME_SEEK) {
+                 /* Calculate the elapsed gettimeofday time */
+                 timeval_diff.tv_usec=timeval_stop.tv_usec-timeval_start.tv_usec;
+                 timeval_diff.tv_sec=timeval_stop.tv_sec-timeval_start.tv_sec;
+                 if(timeval_diff.tv_usec<0) {
+                     timeval_diff.tv_usec+=1000000;
+                     timeval_diff.tv_sec--;
+                 } /* end if */
+                HDfprintf(file->logfp," (%f s)\n",(double)timeval_diff.tv_sec+((double)timeval_diff.tv_usec/(double)1000000.0));
+            } /* end if */
+            else
+                HDfprintf(file->logfp,"\n");
+#else /* H5_HAVE_GETTIMEOFDAY */
+            HDfprintf(file->logfp,"Seek: From %10a To %10a\n",file->pos,addr);
+#endif /* H5_HAVE_GETTIMEOFDAY */
+        } /* end if */
+    } /* end if */
+
+    /*
+     * Write the data, being careful of interrupted system calls and partial
+     * results
+     */
+#ifdef H5_HAVE_GETTIMEOFDAY
+    if(file->fa.flags&H5FD_LOG_TIME_WRITE)
+        HDgettimeofday(&timeval_start,NULL);
+#endif /* H5_HAVE_GETTIMEOFDAY */
+    while (size>0) {
+        do {
+            nbytes = HDwrite(file->fd, buf, size);
+        } while (-1==nbytes && EINTR==errno);
+        if (-1==nbytes) {
+            /* error */
+            file->pos = HADDR_UNDEF;
+            file->op = OP_UNKNOWN;
+            if(file->fa.flags&H5FD_LOG_LOC_WRITE)
+                HDfprintf(file->logfp,"Error! Writing: %10a-%10a (%10Zu bytes)\n",orig_addr,orig_addr+orig_size-1,orig_size);
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
+        }
+        assert(nbytes>0);
+        assert((size_t)nbytes<=size);
+        H5_CHECK_OVERFLOW(nbytes,ssize_t,size_t);
+        size -= (size_t)nbytes;
+        H5_CHECK_OVERFLOW(nbytes,ssize_t,haddr_t);
+        addr += (haddr_t)nbytes;
+        buf = (const char*)buf + nbytes;
+    }
+#ifdef H5_HAVE_GETTIMEOFDAY
+    if(file->fa.flags&H5FD_LOG_TIME_WRITE)
+        HDgettimeofday(&timeval_stop,NULL);
+#endif /* H5_HAVE_GETTIMEOFDAY */
+
+    /* Log information about the write */
+    if(file->fa.flags&H5FD_LOG_LOC_WRITE) {
+        /* Output the flavor information, if desired */
+        if(file->fa.flags&H5FD_LOG_FLAVOR)
+            HDfprintf(file->logfp,"%10a-%10a (%10Zu bytes) (%s) Written",orig_addr,orig_addr+orig_size-1,orig_size,flavors[file->flavor[orig_addr]]);
+        else
+            HDfprintf(file->logfp,"%10a-%10a (%10Zu bytes) Written",orig_addr,orig_addr+orig_size-1,orig_size);
+
+        /* Check if this is the first write into a "default" section, grabbed by the metadata agregation algorithm */
+        if(file->fa.flags&H5FD_LOG_FLAVOR) {
+            if((H5FD_mem_t)file->flavor[orig_addr]==H5FD_MEM_DEFAULT)
+                HDmemset(&file->flavor[orig_addr],(int)type,orig_size);
+        } /* end if */
+
+#ifdef H5_HAVE_GETTIMEOFDAY
+        if(file->fa.flags&H5FD_LOG_TIME_WRITE) {
+             /* Calculate the elapsed gettimeofday time */
+             timeval_diff.tv_usec=timeval_stop.tv_usec-timeval_start.tv_usec;
+             timeval_diff.tv_sec=timeval_stop.tv_sec-timeval_start.tv_sec;
+             if(timeval_diff.tv_usec<0) {
+                 timeval_diff.tv_usec+=1000000;
+                 timeval_diff.tv_sec--;
+             } /* end if */
+            HDfprintf(file->logfp," (%f s)\n",(double)timeval_diff.tv_sec+((double)timeval_diff.tv_usec/(double)1000000.0));
+        } /* end if */
+        else
+            HDfprintf(file->logfp,"\n");
+#else /* H5_HAVE_GETTIMEOFDAY */
+        HDfprintf(file->logfp,"\n");
+#endif /* H5_HAVE_GETTIMEOFDAY */
+    } /* end if */
+
+    /* Update current position and eof */
+    file->pos = addr;
+    file->op = OP_WRITE;
+    if (file->pos>file->eof)
+        file->eof = file->pos;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_log_flush
+ *
+ * Purpose:	Makes sure that the true file size is the same (or larger)
+ *		than the end-of-address.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_log_flush(H5FD_t *_file, hid_t UNUSED dxpl_id, unsigned UNUSED closing)
+{
+    H5FD_log_t	*file = (H5FD_log_t*)_file;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_log_flush, FAIL)
+
+    if (file->eoa>file->eof) {
+        if (-1==file_seek(file->fd, (file_offset_t)(file->eoa-1), SEEK_SET))
+            HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
+        if (write(file->fd, "", 1)!=1)
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
+        file->eof = file->eoa;
+        file->pos = file->eoa;
+        file->op = OP_WRITE;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}

Added: packages/hdf5/branches/upstream/current/src/H5FDlog.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDlog.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDlog.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,72 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Monday, April 17, 2000
+ *
+ * Purpose:	The public header file for the log driver.
+ */
+#ifndef H5FDlog_H
+#define H5FDlog_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_LOG	(H5FD_log_init())
+
+/* Flags for H5Pset_fapl_log() */
+/* Flags for tracking where reads/writes/seeks occur */
+#define H5FD_LOG_LOC_READ   0x0001
+#define H5FD_LOG_LOC_WRITE  0x0002
+#define H5FD_LOG_LOC_SEEK   0x0004
+#define H5FD_LOG_LOC_IO     (H5FD_LOG_LOC_READ|H5FD_LOG_LOC_WRITE|H5FD_LOG_LOC_SEEK)
+/* Flags for tracking number of times each byte is read/written */
+#define H5FD_LOG_FILE_READ  0x0008
+#define H5FD_LOG_FILE_WRITE 0x0010
+#define H5FD_LOG_FILE_IO    (H5FD_LOG_FILE_READ|H5FD_LOG_FILE_WRITE)
+/* Flag for tracking "flavor" (type) of information stored at each byte */
+#define H5FD_LOG_FLAVOR     0x0020
+/* Flags for tracking total number of reads/writes/seeks */
+#define H5FD_LOG_NUM_READ   0x0040
+#define H5FD_LOG_NUM_WRITE  0x0080
+#define H5FD_LOG_NUM_SEEK   0x0100
+#define H5FD_LOG_NUM_IO     (H5FD_LOG_NUM_READ|H5FD_LOG_NUM_WRITE|H5FD_LOG_NUM_SEEK)
+/* Flags for tracking time spent in open/read/write/seek/close */
+#define H5FD_LOG_TIME_OPEN  0x0200      /* Not implemented yet */
+#define H5FD_LOG_TIME_READ  0x0400      /* Not implemented yet */
+#define H5FD_LOG_TIME_WRITE 0x0800      /* Partially implemented (need to track total time) */
+#define H5FD_LOG_TIME_SEEK  0x1000      /* Partially implemented (need to track total time & track time for seeks during reading) */
+#define H5FD_LOG_TIME_CLOSE 0x2000      /* Fully implemented */
+#define H5FD_LOG_TIME_IO    (H5FD_LOG_TIME_OPEN|H5FD_LOG_TIME_READ|H5FD_LOG_TIME_WRITE|H5FD_LOG_TIME_SEEK|H5FD_LOG_TIME_CLOSE)
+/* Flag for tracking allocation of space in file */
+#define H5FD_LOG_ALLOC      0x4000
+#define H5FD_LOG_ALL        (H5FD_LOG_ALLOC|H5FD_LOG_TIME_IO|H5FD_LOG_NUM_IO|H5FD_LOG_FLAVOR|H5FD_LOG_FILE_IO|H5FD_LOG_LOC_IO)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_DLL hid_t H5FD_log_init(void);
+H5_DLL void H5FD_log_term(void);
+#ifdef H5_WANT_H5_V1_4_COMPAT
+H5_DLL herr_t H5Pset_fapl_log(hid_t fapl_id, const char *logfile, int verbosity);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+H5_DLL herr_t H5Pset_fapl_log(hid_t fapl_id, const char *logfile, unsigned flags, size_t buf_size);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5FDmpi.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDmpi.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDmpi.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,531 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Friday, January 30, 2004
+ *
+ * Purpose:	Common routines for all MPI-based VFL drivers.
+ *
+ */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FDmpi.h"            /* Common MPI file driver		*/
+#include "H5Pprivate.h"		/* Property lists			*/
+
+/*
+ * The view is set to this value
+ */
+char H5FD_mpi_native_g[] = "native";
+
+#ifdef H5_HAVE_PARALLEL
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpi_get_rank
+ *
+ * Purpose:	Retrieves the rank of an MPI process.
+ *
+ * Return:	Success:	The rank (non-negative)
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, January 30, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5FD_mpi_get_rank(const H5FD_t *file)
+{
+    const H5FD_class_mpi_t *cls=(const H5FD_class_mpi_t *)(file->cls);
+    int	ret_value;
+
+    FUNC_ENTER_NOAPI(H5FD_mpi_get_rank, FAIL)
+
+    assert(file && cls);
+    assert(cls->get_rank);        /* All MPI drivers must implement this */
+
+    /* Dispatch to driver */
+    if ((ret_value=(cls->get_rank)(file))<0)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTGET, FAIL, "driver get_rank request failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpi_get_rank() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpi_get_size
+ *
+ * Purpose:	Retrieves the size of the communicator used for the file
+ *
+ * Return:	Success:	The communicator size (non-negative)
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, January 30, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5FD_mpi_get_size(const H5FD_t *file)
+{
+    const H5FD_class_mpi_t *cls=(const H5FD_class_mpi_t *)(file->cls);
+    int	ret_value;
+
+    FUNC_ENTER_NOAPI(H5FD_mpi_get_size, FAIL)
+
+    assert(file && cls);
+    assert(cls->get_size);        /* All MPI drivers must implement this */
+
+    /* Dispatch to driver */
+    if ((ret_value=(cls->get_size)(file))<0)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTGET, FAIL, "driver get_size request failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpi_get_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpi_get_comm
+ *
+ * Purpose:	Retrieves the file's communicator
+ *
+ * Return:	Success:	The communicator (non-negative)
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, January 30, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+MPI_Comm
+H5FD_mpi_get_comm(const H5FD_t *file)
+{
+    const H5FD_class_mpi_t *cls=(const H5FD_class_mpi_t *)(file->cls);
+    MPI_Comm	ret_value;
+
+    FUNC_ENTER_NOAPI(H5FD_mpi_get_comm, MPI_COMM_NULL)
+
+    assert(file && cls);
+    assert(cls->get_comm);        /* All MPI drivers must implement this */
+
+    /* Dispatch to driver */
+    if ((ret_value=(cls->get_comm)(file))==MPI_COMM_NULL)
+        HGOTO_ERROR(H5E_VFL, H5E_CANTGET, MPI_COMM_NULL, "driver get_comm request failed")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpi_get_comm() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_mpi_MPIOff_to_haddr
+ *
+ * Purpose:     Convert an MPI_Offset value to haddr_t.
+ *
+ * Return:      Success:	The haddr_t equivalent of the MPI_OFF
+ *				argument.
+ *
+ *              Failure:	HADDR_UNDEF
+ *
+ * Programmer:  Unknown
+ *              January 30, 1998
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-04-23
+ *		An error is reported for address overflows. The ADDR output
+ *		argument is optional.
+ *
+ * 		Robb Matzke, 1999-08-06
+ *		Modified to work with the virtual file layer.
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5FD_mpi_MPIOff_to_haddr(MPI_Offset mpi_off)
+{
+    haddr_t ret_value=HADDR_UNDEF;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_mpi_MPIOff_to_haddr)
+
+    if (mpi_off != (MPI_Offset)(haddr_t)mpi_off)
+        ret_value=HADDR_UNDEF;
+    else
+        ret_value=(haddr_t)mpi_off;
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_mpi_haddr_to_MPIOff
+ *
+ * Purpose:     Convert an haddr_t value to MPI_Offset.
+ *
+ * Return:      Success:	Non-negative, the MPI_OFF argument contains
+ *				the converted value.
+ *
+ * 		Failure:	Negative, MPI_OFF is undefined.
+ *
+ * Programmer:  Unknown
+ *              January 30, 1998
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-04-23
+ *		An error is reported for address overflows. The ADDR output
+ *		argument is optional.
+ *
+ * 		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ * 		Robb Matzke, 1999-08-06
+ *		Modified to work with the virtual file layer.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_mpi_haddr_to_MPIOff(haddr_t addr, MPI_Offset *mpi_off/*out*/)
+{
+    herr_t ret_value=FAIL;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_mpi_haddr_to_MPIOff)
+
+    assert(mpi_off);
+
+    /* Convert the HDF5 address into an MPI offset */
+    *mpi_off = (MPI_Offset)addr;
+
+    if (addr != (haddr_t)((MPI_Offset)addr))
+        ret_value=FAIL;
+    else
+        ret_value=SUCCEED;
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_mpi_comm_info_dup
+ *
+ * Purpose:     Make duplicates of communicator and Info object.
+ * 		If the Info object is in fact MPI_INFO_NULL, no duplicate
+ * 		is made but the same value assigned to the new Info object
+ * 		handle.
+ *
+ * Return:      Success:	Non-negative.  The new communicator and Info
+ * 				object handles are returned via comm_new and
+ * 				info_new pointers.
+ *
+ * 		Failure:	Negative.
+ *
+ * Programmer:  Albert Cheng
+ *              Jan  8, 2003
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_mpi_comm_info_dup(MPI_Comm comm, MPI_Info info, MPI_Comm *comm_new, MPI_Info *info_new)
+{
+    herr_t	ret_value=SUCCEED;
+    MPI_Comm	comm_dup=MPI_COMM_NULL;
+    MPI_Info	info_dup=MPI_INFO_NULL;
+    int		mpi_code;
+
+    FUNC_ENTER_NOAPI(H5FD_mpi_comm_info_dup, FAIL)
+
+    /* Check arguments */
+    if (MPI_COMM_NULL == comm)
+	HGOTO_ERROR(H5E_INTERNAL, H5E_BADVALUE, FAIL, "not a valid argument")
+    if (!comm_new || !info_new)
+	HGOTO_ERROR(H5E_INTERNAL, H5E_BADVALUE, FAIL, "bad pointers")
+
+    /* Dup them.  Using temporary variables for error recovery cleanup. */
+    if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(comm, &comm_dup)))
+	HMPI_GOTO_ERROR(FAIL, "MPI_Comm_dup failed", mpi_code)
+    if (MPI_INFO_NULL != info){
+	if (MPI_SUCCESS != (mpi_code=MPI_Info_dup(info, &info_dup)))
+	    HMPI_GOTO_ERROR(FAIL, "MPI_Info_dup failed", mpi_code)
+    }else{
+	/* No dup, just copy it. */
+	info_dup = info;
+    }
+
+    /* copy them to the return arguments */
+    *comm_new = comm_dup;
+    *info_new = info_dup;
+
+done:
+    if (FAIL == ret_value){
+	/* need to free anything created here */
+	if (MPI_COMM_NULL != comm_dup)
+	    MPI_Comm_free(&comm_dup);
+	if (MPI_INFO_NULL != info_dup)
+	    MPI_Info_free(&info_dup);
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_mpi_comm_info_free
+ *
+ * Purpose:     Free the communicator and Info object.
+ * 		If comm or info is in fact MPI_COMM_NULL or MPI_INFO_NULL
+ * 		respectively, no action occurs to it.
+ *
+ * Return:      Success:	Non-negative.  The values the pointers refer
+ * 				to will be set to the corresponding NULL
+ * 				handles.
+ *
+ * 		Failure:	Negative.
+ *
+ * Programmer:  Albert Cheng
+ *              Jan  8, 2003
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_mpi_comm_info_free(MPI_Comm *comm, MPI_Info *info)
+{
+    herr_t      ret_value=SUCCEED;
+    FUNC_ENTER_NOAPI(H5FD_mpi_comm_info_free, FAIL)
+
+    /* Check arguments */
+    if (!comm || !info)
+	HGOTO_ERROR(H5E_INTERNAL, H5E_BADVALUE, FAIL, "not a valid argument")
+
+    if (MPI_COMM_NULL != *comm)
+	MPI_Comm_free(comm);
+    if (MPI_INFO_NULL != *info)
+	MPI_Info_free(info);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+#ifdef NOT_YET
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_wait_for_left_neighbor
+ *
+ * Purpose:	Blocks until (empty) msg is received from immediately
+ *		lower-rank neighbor. In conjunction with
+ *		H5FD_mpio_signal_right_neighbor, useful for enforcing
+ *		1-process-at-at-time access to critical regions to avoid race
+ *		conditions (though it is overkill to require that the
+ *		processes be allowed to proceed strictly in order of their
+ *		rank).
+ *
+ * Note:	This routine doesn't read or write any file, just performs
+ *		interprocess coordination. It really should reside in a
+ *		separate package of such routines.
+ *
+ * Return:	Success:	0
+ *		Failure:	-1
+ *
+ * Programmer:	rky
+ *              19981207
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-08-09
+ *		Modified to work with the virtual file layer.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_mpio_wait_for_left_neighbor(H5FD_t *_file)
+{
+    H5FD_mpio_t	*file = (H5FD_mpio_t*)_file;
+    char msgbuf[1];
+    MPI_Status rcvstat;
+    int		mpi_code;		/* mpi return code */
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_wait_for_left_neighbor, FAIL)
+
+    assert(file);
+    assert(H5FD_MPIO==file->pub.driver_id);
+
+    /* Portably initialize MPI status variable */
+    HDmemset(&rcvstat,0,sizeof(MPI_Status));
+
+    /* p0 has no left neighbor; all other procs wait for msg */
+    if (file->mpi_rank != 0) {
+        if (MPI_SUCCESS != (mpi_code=MPI_Recv( &msgbuf, 1, MPI_CHAR,
+			file->mpi_rank-1, MPI_ANY_TAG, file->comm, &rcvstat )))
+            HMPI_GOTO_ERROR(FAIL, "MPI_Recv failed", mpi_code)
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_signal_right_neighbor
+ *
+ * Purpose:	Blocks until (empty) msg is received from immediately
+ *		lower-rank neighbor. In conjunction with
+ *		H5FD_mpio_wait_for_left_neighbor, useful for enforcing
+ *		1-process-at-at-time access to critical regions to avoid race
+ *		conditions (though it is overkill to require that the
+ *		processes be allowed to proceed strictly in order of their
+ *		rank).
+ *
+ * Note: 	This routine doesn't read or write any file, just performs
+ *		interprocess coordination. It really should reside in a
+ *		separate package of such routines.
+ *
+ * Return:	Success:	0
+ *		Failure:	-1
+ *
+ * Programmer:	rky
+ *              19981207
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-08-09
+ *		Modified to work with the virtual file layer.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_mpio_signal_right_neighbor(H5FD_t *_file)
+{
+    H5FD_mpio_t	*file = (H5FD_mpio_t*)_file;
+    char msgbuf[1];
+    int		mpi_code;		/* mpi return code */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_signal_right_neighbor, FAIL)
+
+    assert(file);
+    assert(H5FD_MPIO==file->pub.driver_id);
+
+    if (file->mpi_rank != (file->mpi_size-1)) {
+        if (MPI_SUCCESS != (mpi_code=MPI_Send(&msgbuf, 0/*empty msg*/, MPI_CHAR,
+			file->mpi_rank+1, 0, file->comm)))
+            HMPI_GOTO_ERROR(FAIL, "MPI_Send failed", mpi_code)
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+#endif /* NOT_YET */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpi_setup_collective
+ *
+ * Purpose:	Set the buffer type BTYPE, file type FTYPE for a data
+ *		transfer. Also request a MPI type transfer.
+ *
+ * Return:	Success:	0
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August  9, 1999
+ *
+ * Modifications:
+ *
+ *              Quincey Koziol - 2002/06/17
+ *              Removed 'disp' parameter, read & write routines will use
+ *              the address of the dataset in MPI_File_set_view() calls, as
+ *              necessary.
+ *
+ *              Quincey Koziol - 2002/06/17
+ *              Changed to set temporary properties in a dxpl, instead of
+ *              flags in the file struct, which will make this more threadsafe.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_mpi_setup_collective(hid_t dxpl_id, MPI_Datatype btype, MPI_Datatype ftype)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpi_setup_collective, FAIL)
+
+    /* Check arguments */
+    if(NULL == (plist = H5P_object_verify(dxpl_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a dataset transfer list")
+
+    /* Set buffer MPI type */
+    if(H5P_insert(plist,H5FD_MPI_XFER_MEM_MPI_TYPE_NAME,H5FD_MPI_XFER_MEM_MPI_TYPE_SIZE,&btype,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert MPI-I/O property")
+
+    /* Set file MPI type */
+    if(H5P_insert(plist,H5FD_MPI_XFER_FILE_MPI_TYPE_NAME,H5FD_MPI_XFER_FILE_MPI_TYPE_SIZE,&ftype,NULL,NULL,NULL,NULL,NULL,NULL)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't insert MPI-I/O property")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpi_setup_collective() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpi_teardown_collective
+ *
+ * Purpose:	Remove the temporary MPI-I/O properties from dxpl.
+ *
+ * Return:	Success:        Non-negative
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, June 17, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FD_mpi_teardown_collective(hid_t dxpl_id)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpi_teardown_collective, FAIL)
+
+    /* Check arguments */
+    if(NULL == (plist = H5P_object_verify(dxpl_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a dataset transfer list")
+
+    /* Remove buffer MPI type */
+    if(H5P_remove(dxpl_id,plist,H5FD_MPI_XFER_MEM_MPI_TYPE_NAME)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTDELETE, FAIL, "can't remove MPI-I/O property")
+
+    /* Remove file MPI type */
+    if(H5P_remove(dxpl_id,plist,H5FD_MPI_XFER_FILE_MPI_TYPE_NAME)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTDELETE, FAIL, "can't remove MPI-I/O property")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpi_teardown_collective() */
+
+#endif /* H5_HAVE_PARALLEL */
+

Added: packages/hdf5/branches/upstream/current/src/H5FDmpi.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDmpi.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDmpi.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,93 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Friday, January 30, 2004
+ *
+ * Purpose:	The public header file for common items for all MPI VFL drivers
+ */
+#ifndef H5FDmpi_H
+#define H5FDmpi_H
+
+/* Type of I/O for data transfer properties */
+typedef enum H5FD_mpio_xfer_t {
+    H5FD_MPIO_INDEPENDENT = 0, 		/*zero is the default*/
+    H5FD_MPIO_COLLECTIVE
+} H5FD_mpio_xfer_t;
+
+#ifdef H5_HAVE_PARALLEL
+
+/* Sub-class the H5FD_class_t to add more specific functions for MPI-based VFDs */
+typedef struct H5FD_class_mpi_t {
+    H5FD_class_t        super;          /* Superclass information & methods */
+    int  (*get_rank)(const H5FD_t *file);     /* Get the MPI rank of a process */
+    int  (*get_size)(const H5FD_t *file);     /* Get the MPI size of a communicator */
+    MPI_Comm (*get_comm)(const H5FD_t *file); /* Get the communicator for a file */
+} H5FD_class_mpi_t;
+#endif /* H5_HAVE_PARALLEL */
+
+/* Include all the MPI VFL headers */
+#include "H5FDmpio.h"           /* MPI I/O file driver			*/
+#include "H5FDmpiposix.h"       /* MPI/posix I/O file driver            */
+
+/* Macros */
+
+/* Single macro to check for all file drivers that use MPI */
+#define IS_H5FD_MPI(file)  \
+        (IS_H5FD_MPIO(file) || IS_H5FD_MPIPOSIX(file))
+
+#ifdef H5_HAVE_PARALLEL
+/* ======== Temporary data transfer properties ======== */
+/* Definitions for memory MPI type property */
+#define H5FD_MPI_XFER_MEM_MPI_TYPE_NAME        "H5FD_mpi_mem_mpi_type"
+#define H5FD_MPI_XFER_MEM_MPI_TYPE_SIZE        sizeof(MPI_Datatype)
+/* Definitions for file MPI type property */
+#define H5FD_MPI_XFER_FILE_MPI_TYPE_NAME       "H5FD_mpi_file_mpi_type"
+#define H5FD_MPI_XFER_FILE_MPI_TYPE_SIZE       sizeof(MPI_Datatype)
+
+/*
+ * The view is set to this value
+ */
+H5_DLLVAR char H5FD_mpi_native_g[];
+
+/* Function prototypes */
+#ifdef __cplusplus
+extern "C" {
+#endif
+/* General routines */
+H5_DLL haddr_t H5FD_mpi_MPIOff_to_haddr(MPI_Offset mpi_off);
+H5_DLL herr_t H5FD_mpi_haddr_to_MPIOff(haddr_t addr, MPI_Offset *mpi_off/*out*/);
+H5_DLL herr_t H5FD_mpi_comm_info_dup(MPI_Comm comm, MPI_Info info,
+				MPI_Comm *comm_new, MPI_Info *info_new);
+H5_DLL herr_t H5FD_mpi_comm_info_free(MPI_Comm *comm, MPI_Info *info);
+#ifdef NOT_YET
+H5_DLL herr_t H5FD_mpio_wait_for_left_neighbor(H5FD_t *file);
+H5_DLL herr_t H5FD_mpio_signal_right_neighbor(H5FD_t *file);
+#endif /* NOT_YET */
+H5_DLL herr_t H5FD_mpi_setup_collective(hid_t dxpl_id, MPI_Datatype btype,
+    MPI_Datatype ftype);
+H5_DLL herr_t H5FD_mpi_teardown_collective(hid_t dxpl_id);
+
+/* Driver specific methods */
+H5_DLL int H5FD_mpi_get_rank(const H5FD_t *file);
+H5_DLL int H5FD_mpi_get_size(const H5FD_t *file);
+H5_DLL MPI_Comm H5FD_mpi_get_comm(const H5FD_t *_file);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H5_HAVE_PARALLEL */
+
+#endif /* H5FDmpi_H */

Added: packages/hdf5/branches/upstream/current/src/H5FDmpio.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDmpio.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDmpio.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1840 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Thursday, July 29, 1999
+ *
+ * Purpose:	This is the MPI-2 I/O driver.
+ *
+ */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5FD_mpio_init_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5Dprivate.h"		/* Dataset functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FDmpi.h"            /* MPI-based file drivers		*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"         /* Property lists                       */
+
+#ifdef H5_HAVE_PARALLEL
+
+/*
+ * The driver identification number, initialized at runtime if H5_HAVE_PARALLEL
+ * is defined. This allows applications to still have the H5FD_MPIO
+ * "constants" in their source code.
+ */
+static hid_t H5FD_MPIO_g = 0;
+
+/*
+ * The description of a file belonging to this driver.
+ * The EOF value is only used just after the file is opened in order for the
+ * library to determine whether the file is empty, truncated, or okay. The MPIO
+ * driver doesn't bother to keep it updated since it's an expensive operation.
+ */
+typedef struct H5FD_mpio_t {
+    H5FD_t	pub;		/*public stuff, must be first		*/
+    MPI_File	f;		/*MPIO file handle			*/
+    MPI_Comm	comm;		/*communicator				*/
+    MPI_Info	info;		/*file information			*/
+    int         mpi_rank;       /* This process's rank                  */
+    int         mpi_size;       /* Total number of processes            */
+    haddr_t	eof;		/*end-of-file marker			*/
+    haddr_t	eoa;		/*end-of-address marker			*/
+    haddr_t	last_eoa;	/* Last known end-of-address marker	*/
+} H5FD_mpio_t;
+
+/* Private Prototypes */
+
+/* Callbacks */
+static void *H5FD_mpio_fapl_get(H5FD_t *_file);
+static void *H5FD_mpio_fapl_copy(const void *_old_fa);
+static herr_t H5FD_mpio_fapl_free(void *_fa);
+static H5FD_t *H5FD_mpio_open(const char *name, unsigned flags, hid_t fapl_id,
+			      haddr_t maxaddr);
+static herr_t H5FD_mpio_close(H5FD_t *_file);
+static herr_t H5FD_mpio_query(const H5FD_t *_f1, unsigned long *flags);
+static haddr_t H5FD_mpio_get_eoa(H5FD_t *_file);
+static herr_t H5FD_mpio_set_eoa(H5FD_t *_file, haddr_t addr);
+static haddr_t H5FD_mpio_get_eof(H5FD_t *_file);
+static herr_t  H5FD_mpio_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
+static herr_t H5FD_mpio_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
+            size_t size, void *buf);
+static herr_t H5FD_mpio_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
+            size_t size, const void *buf);
+static herr_t H5FD_mpio_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
+static int H5FD_mpio_mpi_rank(const H5FD_t *_file);
+static int H5FD_mpio_mpi_size(const H5FD_t *_file);
+static MPI_Comm H5FD_mpio_communicator(const H5FD_t *_file);
+
+/* MPIO-specific file access properties */
+typedef struct H5FD_mpio_fapl_t {
+    MPI_Comm		comm;		/*communicator			*/
+    MPI_Info		info;		/*file information		*/
+} H5FD_mpio_fapl_t;
+
+/* The MPIO file driver information */
+static const H5FD_class_mpi_t H5FD_mpio_g = {
+    {   /* Start of superclass information */
+    "mpio",					/*name			*/
+    HADDR_MAX,					/*maxaddr		*/
+    H5F_CLOSE_SEMI,				/* fc_degree		*/
+    NULL,					/*sb_size		*/
+    NULL,					/*sb_encode		*/
+    NULL,					/*sb_decode		*/
+    sizeof(H5FD_mpio_fapl_t),			/*fapl_size		*/
+    H5FD_mpio_fapl_get,				/*fapl_get		*/
+    H5FD_mpio_fapl_copy,			/*fapl_copy		*/
+    H5FD_mpio_fapl_free, 			/*fapl_free		*/
+    0,		                		/*dxpl_size		*/
+    NULL,					/*dxpl_copy		*/
+    NULL,					/*dxpl_free		*/
+    H5FD_mpio_open,				/*open			*/
+    H5FD_mpio_close,				/*close			*/
+    NULL,					/*cmp			*/
+    H5FD_mpio_query,		                /*query			*/
+    NULL,					/*alloc			*/
+    NULL,					/*free			*/
+    H5FD_mpio_get_eoa,				/*get_eoa		*/
+    H5FD_mpio_set_eoa, 				/*set_eoa		*/
+    H5FD_mpio_get_eof,				/*get_eof		*/
+    H5FD_mpio_get_handle,                       /*get_handle            */
+    H5FD_mpio_read,				/*read			*/
+    H5FD_mpio_write,				/*write			*/
+    H5FD_mpio_flush,				/*flush			*/
+    NULL,                                       /*lock                  */
+    NULL,                                       /*unlock                */
+    H5FD_FLMAP_SINGLE                           /*fl_map                */
+    },  /* End of superclass information */
+    H5FD_mpio_mpi_rank,                         /*get_rank              */
+    H5FD_mpio_mpi_size,                         /*get_size              */
+    H5FD_mpio_communicator                      /*get_comm              */
+};
+
+#ifdef H5FDmpio_DEBUG
+/* Flags to control debug actions in H5Fmpio.
+ * Meant to be indexed by characters.
+ *
+ * 'c' show result of MPI_Get_count after read
+ * 'r' show read offset and size
+ * 't' trace function entry and exit
+ * 'w' show write offset and size
+ */
+static int H5FD_mpio_Debug[256] =
+        { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+          0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
+#endif
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5FD_mpio_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5FD_mpio_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5FD_mpio_init currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5FD_mpio_init_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_mpio_init_interface)
+
+    FUNC_LEAVE_NOAPI(H5FD_mpio_init())
+} /* H5FD_mpio_init_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_init
+ *
+ * Purpose:	Initialize this driver by registering the driver with the
+ *		library.
+ *
+ * Return:	Success:	The driver ID for the mpio driver.
+ *
+ *		Failure:	Negative.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, August 5, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5FD_mpio_init(void)
+{
+#ifdef H5FDmpio_DEBUG
+    static int H5FD_mpio_Debug_inited=0;
+#endif /* H5FDmpio_DEBUG */
+    hid_t ret_value;        	/* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_init, FAIL)
+
+    if (H5I_VFL!=H5I_get_type(H5FD_MPIO_g))
+        H5FD_MPIO_g = H5FD_register((const H5FD_class_t *)&H5FD_mpio_g,sizeof(H5FD_class_mpi_t));
+
+#ifdef H5FDmpio_DEBUG
+    if (!H5FD_mpio_Debug_inited)
+    {
+	/* set debug mask */
+	/* Should this be done in H5F global initialization instead of here? */
+        const char *s = HDgetenv ("H5FD_mpio_Debug");
+        if (s) {
+	    while (*s){
+		H5FD_mpio_Debug[(int)*s]++;
+		s++;
+	    }
+        }
+	H5FD_mpio_Debug_inited++;
+    }
+#endif /* H5FDmpio_DEBUG */
+
+    /* Set return value */
+    ret_value=H5FD_MPIO_g;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*---------------------------------------------------------------------------
+ * Function:	H5FD_mpio_term
+ *
+ * Purpose:	Shut down the VFD
+ *
+ * Return:	<none>
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, Jan 30, 2004
+ *
+ * Modification:
+ *
+ *---------------------------------------------------------------------------
+ */
+void
+H5FD_mpio_term(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_mpio_term)
+
+    /* Reset VFL ID */
+    H5FD_MPIO_g=0;
+
+    FUNC_LEAVE_NOAPI_VOID
+} /* end H5FD_mpio_term() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_fapl_mpio
+ *
+ * Purpose:	Store the user supplied MPIO communicator comm and info in
+ *		the file access property list FAPL_ID which can then be used
+ *		to create and/or open the file.  This function is available
+ *		only in the parallel HDF5 library and is not collective.
+ *
+ *		comm is the MPI communicator to be used for file open as
+ *		defined in MPI_FILE_OPEN of MPI-2. This function makes a
+ *		duplicate of comm. Any modification to comm after this function
+ *		call returns has no effect on the access property list.
+ *
+ *		info is the MPI Info object to be used for file open as
+ *		defined in MPI_FILE_OPEN of MPI-2. This function makes a
+ *		duplicate of info. Any modification to info after this
+ *		function call returns has no effect on the access property
+ *		list.
+ *
+ *              If fapl_id has previously set comm and info values, they
+ *              will be replaced and the old communicator and Info object
+ *              are freed.
+ *
+ * Return:	Success:	Non-negative
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:	Albert Cheng
+ *		Feb 3, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1998-02-18
+ *		Check all arguments before the property list is updated so we
+ *		don't leave the property list in a bad state if something
+ *		goes wrong.  Also, the property list data type changed to
+ *		allow more generality so all the mpi-related stuff is in the
+ *		`u.mpi' member.  The `access_mode' will contain only
+ * 		mpi-related flags defined in H5Fpublic.h.
+ *
+ *		Albert Cheng, 1998-04-16
+ *		Removed the ACCESS_MODE argument.  The access mode is changed
+ *		to be controlled by data transfer property list during data
+ *		read/write calls.
+ *
+ * 		Robb Matzke, 1999-08-06
+ *		Modified to work with the virtual file layer.
+ *
+ *		Raymond Lu, 2001-10-23
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *		Albert Cheng, 2003-04-17
+ *		Modified the description of the function that it now stores
+ *		a duplicate of the communicator and INFO object.  Free the
+ *		old duplicates if previously set.  (Work is actually done
+ *		by H5P_set_driver.)
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fapl_mpio(hid_t fapl_id, MPI_Comm comm, MPI_Info info)
+{
+    H5FD_mpio_fapl_t	fa;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value;
+
+    FUNC_ENTER_API(H5Pset_fapl_mpio, FAIL)
+    H5TRACE3("e","iMcMi",fapl_id,comm,info);
+
+    if(fapl_id==H5P_DEFAULT)
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "can't set values in default property list")
+
+    /* Check arguments */
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a file access list")
+    if (MPI_COMM_NULL == comm)
+	HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a valid communicator")
+
+    /* Initialize driver specific properties */
+    fa.comm = comm;
+    fa.info = info;
+
+    /* duplication is done during driver setting. */
+    ret_value= H5P_set_driver(plist, H5FD_MPIO, &fa);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_fapl_mpio
+ *
+ * Purpose:	If the file access property list is set to the H5FD_MPIO
+ *		driver then this function returns duplicates of the MPI
+ *		communicator and Info object stored through the comm and
+ *		info pointers.  It is the responsibility of the application
+ *		to free the returned communicator and Info object.
+ *
+ * Return:	Success:	Non-negative with the communicator and
+ *				Info object returned through the comm and
+ *				info arguments if non-null. Since they are
+ *				duplicates of the stored objects, future
+ *				modifications to the access property list do
+ *				not affect them and it is the responsibility
+ *				of the application to free them.
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, February 26, 1998
+ *
+ * Modifications:
+ *
+ *	        Albert Cheng, Apr 16, 1998
+ *	        Removed the access_mode argument.  The access_mode is changed
+ *	        to be controlled by data transfer property list during data
+ *	        read/write calls.
+ *
+ *		Raymond Lu, 2001-10-23
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *		Albert Cheng, 2003-04-17
+ *		Return duplicates of the stored communicator and Info object.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_fapl_mpio(hid_t fapl_id, MPI_Comm *comm/*out*/, MPI_Info *info/*out*/)
+{
+    H5FD_mpio_fapl_t	*fa;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    MPI_Comm	comm_tmp=MPI_COMM_NULL;
+    int		mpi_code;		/* mpi return code */
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_API(H5Pget_fapl_mpio, FAIL)
+    H5TRACE3("e","ixx",fapl_id,comm,info);
+
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a file access list")
+    if (H5FD_MPIO!=H5P_get_driver(plist))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "incorrect VFL driver")
+    if (NULL==(fa=H5P_get_driver_info(plist)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "bad VFL driver info")
+
+    /* Store the duplicated communicator in a temporary variable for error */
+    /* recovery in case the INFO duplication fails.  We cannot attempt to */
+    /* the value into *comm yet since if MPI_Comm_dup fails, we will end  */
+    /* up freeing whatever *comm holds and that could be invalid. */
+    if (comm){
+	if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(fa->comm, &comm_tmp)))
+	    HMPI_GOTO_ERROR(FAIL, "MPI_Comm_dup failed", mpi_code)
+    }
+
+    if (info){
+	if (MPI_INFO_NULL != fa->info){
+	    if (MPI_SUCCESS != (mpi_code=MPI_Info_dup(fa->info, info)))
+		HMPI_GOTO_ERROR(FAIL, "MPI_Info_dup failed", mpi_code)
+	}else{
+	    /* do not dup it */
+	    *info = MPI_INFO_NULL;
+	}
+    }
+
+    if (comm)
+        *comm = comm_tmp;
+
+done:
+    if (FAIL==ret_value){
+	/* need to free anything created here */
+	if (comm_tmp != MPI_COMM_NULL)
+	    MPI_Comm_free(&comm_tmp);
+    }
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_dxpl_mpio
+ *
+ * Purpose:	Set the data transfer property list DXPL_ID to use transfer
+ *		mode XFER_MODE. The property list can then be used to control
+ *		the I/O transfer mode during data I/O operations. The valid
+ *		transfer modes are:
+ *
+ * 		H5FD_MPIO_INDEPENDENT:
+ *			Use independent I/O access (the default).
+ *
+ * 		H5FD_MPIO_COLLECTIVE:
+ *			Use collective I/O access.
+ *
+ * Return:	Success:	Non-negative
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:	Albert Cheng
+ *		April 2, 1998
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-08-06
+ *		Modified to work with the virtual file layer.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_dxpl_mpio(hid_t dxpl_id, H5FD_mpio_xfer_t xfer_mode)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value;
+
+    FUNC_ENTER_API(H5Pset_dxpl_mpio, FAIL)
+    H5TRACE2("e","iDt",dxpl_id,xfer_mode);
+
+    if(dxpl_id==H5P_DEFAULT)
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "can't set values in default property list")
+
+    /* Check arguments */
+    if(NULL == (plist = H5P_object_verify(dxpl_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a dxpl")
+    if (H5FD_MPIO_INDEPENDENT!=xfer_mode && H5FD_MPIO_COLLECTIVE!=xfer_mode)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "incorrect xfer_mode")
+
+    /* Set the transfer mode */
+    if (H5P_set(plist,H5D_XFER_IO_XFER_MODE_NAME,&xfer_mode)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value")
+
+    /* Initialize driver-specific properties */
+    ret_value= H5P_set_driver(plist, H5FD_MPIO, NULL);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_dxpl_mpio
+ *
+ * Purpose:	Queries the transfer mode current set in the data transfer
+ *		property list DXPL_ID. This is not collective.
+ *
+ * Return:	Success:	Non-negative, with the transfer mode returned
+ *				through the XFER_MODE argument if it is
+ *				non-null.
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:	Albert Cheng
+ *		April 2, 1998
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-08-06
+ *		Modified to work with the virtual file layer.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_dxpl_mpio(hid_t dxpl_id, H5FD_mpio_xfer_t *xfer_mode/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Pget_dxpl_mpio, FAIL)
+    H5TRACE2("e","ix",dxpl_id,xfer_mode);
+
+    if(NULL == (plist = H5P_object_verify(dxpl_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a dxpl")
+    if (H5FD_MPIO!=H5P_get_driver(plist))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "incorrect VFL driver")
+
+    /* Get the transfer mode */
+    if (xfer_mode)
+        if (H5P_get(plist,H5D_XFER_IO_XFER_MODE_NAME,xfer_mode)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to get value")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_fapl_get
+ *
+ * Purpose:	Returns a file access property list which could be used to
+ *		create another file the same as this one.
+ *
+ * Return:	Success:	Ptr to new file access property list with all
+ *				fields copied from the file pointer.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, August 13, 1999
+ *
+ * Modifications:
+ * 		Albert Cheng, 2003-04-17
+ * 		Duplicate the communicator and Info object so that the new
+ * 		property list is insulated from the old one.
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FD_mpio_fapl_get(H5FD_t *_file)
+{
+    H5FD_mpio_t		*file = (H5FD_mpio_t*)_file;
+    H5FD_mpio_fapl_t	*fa = NULL;
+    void      *ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_fapl_get, NULL)
+
+    assert(file);
+    assert(H5FD_MPIO==file->pub.driver_id);
+
+    if (NULL==(fa=H5MM_calloc(sizeof(H5FD_mpio_fapl_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    /* Duplicate communicator and Info object. */
+    if (FAIL==H5FD_mpi_comm_info_dup(file->comm, file->info,
+					&fa->comm, &fa->info))
+	HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOPY, NULL, "Communicator/Info duplicate failed")
+
+    /* Set return value */
+    ret_value=fa;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_fapl_copy
+ *
+ * Purpose:	Copies the mpio-specific file access properties.
+ *
+ * Return:	Success:	Ptr to a new property list
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Albert Cheng
+ *              Jan  8, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FD_mpio_fapl_copy(const void *_old_fa)
+{
+    void		*ret_value = NULL;
+    const H5FD_mpio_fapl_t *old_fa = (const H5FD_mpio_fapl_t*)_old_fa;
+    H5FD_mpio_fapl_t	*new_fa = NULL;
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_fapl_copy, NULL)
+#ifdef H5FDmpio_DEBUG
+if (H5FD_mpio_Debug[(int)'t'])
+fprintf(stderr, "enter H5FD_mpio_fapl_copy\n");
+#endif
+
+    if (NULL==(new_fa=H5MM_malloc(sizeof(H5FD_mpio_fapl_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    /* Copy the general information */
+    HDmemcpy(new_fa, old_fa, sizeof(H5FD_mpio_fapl_t));
+
+    /* Duplicate communicator and Info object. */
+    if (FAIL==H5FD_mpi_comm_info_dup(old_fa->comm, old_fa->info,
+					&new_fa->comm, &new_fa->info))
+	HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOPY, NULL, "Communicator/Info duplicate failed")
+    ret_value = new_fa;
+
+done:
+    if (NULL == ret_value){
+	/* cleanup */
+	if (new_fa)
+	    H5MM_xfree(new_fa);
+    }
+
+#ifdef H5FDmpio_DEBUG
+if (H5FD_mpio_Debug[(int)'t'])
+fprintf(stderr, "leaving H5FD_mpio_fapl_copy\n");
+#endif
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpio_fapl_copy() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_fapl_free
+ *
+ * Purpose:	Frees the mpio-specific file access properties.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Albert Cheng
+ *              Jan  8, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpio_fapl_free(void *_fa)
+{
+    herr_t		ret_value = SUCCEED;
+    H5FD_mpio_fapl_t	*fa = (H5FD_mpio_fapl_t*)_fa;
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_fapl_free, FAIL)
+#ifdef H5FDmpio_DEBUG
+if (H5FD_mpio_Debug[(int)'t'])
+fprintf(stderr, "in H5FD_mpio_fapl_free\n");
+#endif
+    assert(fa);
+
+    /* Free the internal communicator and INFO object */
+    assert(MPI_COMM_NULL!=fa->comm);
+    H5FD_mpi_comm_info_free(&fa->comm, &fa->info);
+    H5MM_xfree(fa);
+
+done:
+#ifdef H5FDmpio_DEBUG
+if (H5FD_mpio_Debug[(int)'t'])
+fprintf(stderr, "leaving H5FD_mpio_fapl_free\n");
+#endif
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpio_fapl_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_mpio_open
+ *
+ * Purpose:     Opens a file with name NAME.  The FLAGS are a bit field with
+ *		purpose similar to the second argument of open(2) and which
+ *		are defined in H5Fpublic.h. The file access property list
+ *		FAPL_ID contains the properties driver properties and MAXADDR
+ *		is the largest address which this file will be expected to
+ *		access.  This is collective.
+ *
+ * Return:      Success:        A new file pointer.
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:
+ *              January 30, 1998
+ *
+ * Modifications:
+ * 		Robb Matzke, 1998-02-18
+ *		Added the ACCESS_PARMS argument.  Moved some error checking
+ *		here from elsewhere.
+ *
+ *      	rky, 1998-01-11
+ *      	Added H5FD_mpio_Debug debug flags controlled by MPI_Info.
+ *
+ *      	rky, 1998-08-28
+ *		Init flag controlling redundant metadata writes to disk.
+ *
+ *      	rky, 1998-12-07
+ *		Added barrier after MPI_File_set_size to prevent race
+ *		condition -- subsequent writes were being truncated, causing
+ *		holes in file.
+ *
+ * 		Robb Matzke, 1999-08-06
+ *		Modified to work with the virtual file layer.
+ *
+ *      	rky & ppw, 1999-11-07
+ *		Modified "H5FD_mpio_open" so that file-truncation is
+ *              avoided for brand-new files (with zero filesize).
+ *
+ * 		Albert Cheng, 2003-04-17
+ * 		Duplicate the communicator and Info object so that file is
+ * 		insulated from the old one.
+ *-------------------------------------------------------------------------
+ */
+static H5FD_t *
+H5FD_mpio_open(const char *name, unsigned flags, hid_t fapl_id,
+	       haddr_t UNUSED maxaddr)
+{
+    H5FD_mpio_t			*file=NULL;
+    MPI_File			fh;
+    unsigned                    file_opened=0;  /* Flag to indicate that the file was successfully opened */
+    int				mpi_amode;
+    int				mpi_rank;       /* MPI rank of this process */
+    int				mpi_size;       /* Total number of MPI processes */
+    int				mpi_code;	/* mpi return code */
+    MPI_Offset			size;
+    const H5FD_mpio_fapl_t	*fa=NULL;
+    H5FD_mpio_fapl_t		_fa;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    MPI_Comm                    comm_dup=MPI_COMM_NULL;
+    MPI_Info                    info_dup=MPI_INFO_NULL;
+    H5FD_t			*ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_open, NULL)
+
+#ifdef H5FDmpio_DEBUG
+    if (H5FD_mpio_Debug[(int)'t']) {
+    	fprintf(stdout, "Entering H5FD_mpio_open(name=\"%s\", flags=0x%x, "
+		"fapl_id=%d, maxaddr=%lu)\n", name, flags, (int)fapl_id, (unsigned long)maxaddr);
+    }
+#endif
+
+    /* Obtain a pointer to mpio-specific file access properties */
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+    if (H5P_FILE_ACCESS_DEFAULT==fapl_id || H5FD_MPIO!=H5P_get_driver(plist)) {
+	_fa.comm = MPI_COMM_SELF; /*default*/
+	_fa.info = MPI_INFO_NULL; /*default*/
+	fa = &_fa;
+    } else {
+	fa = H5P_get_driver_info(plist);
+	assert(fa);
+    }
+
+    /* Duplicate communicator and Info object for use by this file. */
+    if (FAIL==H5FD_mpi_comm_info_dup(fa->comm, fa->info, &comm_dup, &info_dup))
+	HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOPY, NULL, "Communicator/Info duplicate failed")
+
+    /* convert HDF5 flags to MPI-IO flags */
+    /* some combinations are illegal; let MPI-IO figure it out */
+    mpi_amode  = (flags&H5F_ACC_RDWR) ? MPI_MODE_RDWR : MPI_MODE_RDONLY;
+    if (flags&H5F_ACC_CREAT)	mpi_amode |= MPI_MODE_CREATE;
+    if (flags&H5F_ACC_EXCL)	mpi_amode |= MPI_MODE_EXCL;
+
+#ifdef H5FDmpio_DEBUG
+    /* Check for debug commands in the info parameter */
+    {
+	char debug_str[128];
+        int flag, i;
+        if (MPI_INFO_NULL != info_dup) {
+            /*OKAY: CAST DISCARDS CONST*/
+            MPI_Info_get(fa->info, (char *)H5F_MPIO_DEBUG_KEY, 127, debug_str, &flag);
+            if (flag) {
+                fprintf(stdout, "H5FD_mpio debug flags=%s\n", debug_str );
+                for (i=0;
+                     debug_str[i]/*end of string*/ && i<128/*just in case*/;
+                     ++i) {
+                    H5FD_mpio_Debug[(int)debug_str[i]] = 1;
+                }
+            }
+        }
+    }
+#endif
+
+    /*OKAY: CAST DISCARDS CONST*/
+    if (MPI_SUCCESS != (mpi_code=MPI_File_open(comm_dup, (char*)name, mpi_amode, info_dup, &fh)))
+        HMPI_GOTO_ERROR(NULL, "MPI_File_open failed", mpi_code)
+    file_opened=1;
+
+    /* Get the MPI rank of this process and the total number of processes */
+    if (MPI_SUCCESS != (mpi_code=MPI_Comm_rank (comm_dup, &mpi_rank)))
+        HMPI_GOTO_ERROR(NULL, "MPI_Comm_rank failed", mpi_code)
+    if (MPI_SUCCESS != (mpi_code=MPI_Comm_size (comm_dup, &mpi_size)))
+        HMPI_GOTO_ERROR(NULL, "MPI_Comm_size failed", mpi_code)
+
+    /* Build the return value and initialize it */
+    if (NULL==(file=H5MM_calloc(sizeof(H5FD_mpio_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+    file->f = fh;
+    file->comm = comm_dup;
+    file->info = info_dup;
+    file->mpi_rank = mpi_rank;
+    file->mpi_size = mpi_size;
+
+    /* Only processor p0 will get the filesize and broadcast it. */
+    if (mpi_rank == 0) {
+        /* Get current file size */
+        if (MPI_SUCCESS != (mpi_code=MPI_File_get_size(fh, &size)))
+            HMPI_GOTO_ERROR(NULL, "MPI_File_get_size failed", mpi_code)
+    } /* end if */
+
+    /* Broadcast file size */
+    if (MPI_SUCCESS != (mpi_code=MPI_Bcast(&size, sizeof(MPI_Offset), MPI_BYTE, 0, comm_dup)))
+        HMPI_GOTO_ERROR(NULL, "MPI_Bcast failed", mpi_code)
+
+    /* Determine if the file should be truncated */
+    if(size && (flags & H5F_ACC_TRUNC)) {
+        if (MPI_SUCCESS != (mpi_code=MPI_File_set_size(fh, (MPI_Offset)0)))
+            HMPI_GOTO_ERROR(NULL, "MPI_File_set_size failed", mpi_code)
+
+        /* Don't let any proc return until all have truncated the file. */
+        if (MPI_SUCCESS!= (mpi_code=MPI_Barrier(comm_dup)))
+            HMPI_GOTO_ERROR(NULL, "MPI_Barrier failed", mpi_code)
+
+        /* File is zero size now */
+        size = 0;
+    } /* end if */
+
+    /* Set the size of the file (from library's perspective) */
+    file->eof = H5FD_mpi_MPIOff_to_haddr(size);
+
+    /* Set return value */
+    ret_value=(H5FD_t*)file;
+
+done:
+    if(ret_value==NULL) {
+        if(file_opened)
+            MPI_File_close(&fh);
+	if (MPI_COMM_NULL != comm_dup)
+	    MPI_Comm_free(&comm_dup);
+	if (MPI_INFO_NULL != info_dup)
+	    MPI_Info_free(&info_dup);
+	if (file)
+	    H5MM_xfree(file);
+    } /* end if */
+
+#ifdef H5FDmpio_DEBUG
+    if (H5FD_mpio_Debug[(int)'t'])
+        fprintf(stdout, "Leaving H5FD_mpio_open\n" );
+#endif
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_mpio_close
+ *
+ * Purpose:     Closes a file.  This is collective.
+ *
+ * Return:      Success:	Non-negative
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:  Unknown
+ *              January 30, 1998
+ *
+ * Modifications:
+ * 		Robb Matzke, 1998-02-18
+ *		Added the ACCESS_PARMS argument.
+ *
+ * 		Robb Matzke, 1999-08-06
+ *		Modified to work with the virtual file layer.
+ *
+ * 		Albert Cheng, 2003-04-17
+ *		Free the communicator stored.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpio_close(H5FD_t *_file)
+{
+    H5FD_mpio_t	*file = (H5FD_mpio_t*)_file;
+    int		mpi_code;	        /* MPI return code */
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_close, FAIL)
+
+#ifdef H5FDmpio_DEBUG
+    if (H5FD_mpio_Debug[(int)'t'])
+    	fprintf(stdout, "Entering H5FD_mpio_close\n");
+#endif
+    assert(file);
+    assert(H5FD_MPIO==file->pub.driver_id);
+
+    /* MPI_File_close sets argument to MPI_FILE_NULL */
+    if (MPI_SUCCESS != (mpi_code=MPI_File_close(&(file->f)/*in,out*/)))
+        HMPI_GOTO_ERROR(FAIL, "MPI_File_close failed", mpi_code)
+
+    /* Clean up other stuff */
+    H5FD_mpi_comm_info_free(&file->comm, &file->info);
+    H5MM_xfree(file);
+
+done:
+#ifdef H5FDmpio_DEBUG
+    if (H5FD_mpio_Debug[(int)'t'])
+    	fprintf(stdout, "Leaving H5FD_mpio_close\n");
+#endif
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_query
+ *
+ * Purpose:	Set the flags that this VFL driver is capable of supporting.
+ *              (listed in H5FDpublic.h)
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, August 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpio_query(const H5FD_t UNUSED *_file, unsigned long *flags /* out */)
+{
+    herr_t ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_query, FAIL)
+
+    /* Set the VFL feature flags that this driver supports */
+    if(flags) {
+        *flags=0;
+        *flags|=H5FD_FEAT_AGGREGATE_METADATA; /* OK to aggregate metadata allocations */
+
+        /* Distinguish between updating the metadata accumulator on writes and
+         * reads.  This is particularly (perhaps only, even) important for MPI-I/O
+         * where we guarantee that writes are collective, but reads may not be.
+         * If we were to allow the metadata accumulator to be written during a
+         * read operation, the application would hang.
+         */
+        *flags|=H5FD_FEAT_ACCUMULATE_METADATA_WRITE; /* OK to accumulate metadata for faster writes */
+
+        *flags|=H5FD_FEAT_AGGREGATE_SMALLDATA; /* OK to aggregate "small" raw data allocations */
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_get_eoa
+ *
+ * Purpose:	Gets the end-of-address marker for the file. The EOA marker
+ *		is the first address past the last byte allocated in the
+ *		format address space.
+ *
+ * Return:	Success:	The end-of-address marker.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, August  6, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_mpio_get_eoa(H5FD_t *_file)
+{
+    H5FD_mpio_t	*file = (H5FD_mpio_t*)_file;
+    haddr_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_get_eoa, HADDR_UNDEF)
+
+    assert(file);
+    assert(H5FD_MPIO==file->pub.driver_id);
+
+    /* Set return value */
+    ret_value=file->eoa;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_set_eoa
+ *
+ * Purpose:	Set the end-of-address marker for the file. This function is
+ *		called shortly after an existing HDF5 file is opened in order
+ *		to tell the driver where the end of the HDF5 data is located.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, August 6, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpio_set_eoa(H5FD_t *_file, haddr_t addr)
+{
+    H5FD_mpio_t	*file = (H5FD_mpio_t*)_file;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_set_eoa, FAIL)
+
+    assert(file);
+    assert(H5FD_MPIO==file->pub.driver_id);
+
+    file->eoa = addr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_get_eof
+ *
+ * Purpose:	Gets the end-of-file marker for the file. The EOF marker
+ *		is the real size of the file.
+ *
+ *		The MPIO driver doesn't bother keeping this field updated
+ *		since that's a relatively expensive operation. Fortunately
+ *		the library only needs the EOF just after the file is opened
+ *		in order to determine whether the file is empty, truncated,
+ *		or okay.  Therefore, any MPIO I/O function will set its value
+ *		to HADDR_UNDEF which is the error return value of this
+ *		function.
+ *
+ *              Keeping the EOF updated (during write calls) is expensive
+ *              because any process may extend the physical end of the
+ *              file. -QAK
+ *
+ * Return:	Success:	The end-of-address marker.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, August  6, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_mpio_get_eof(H5FD_t *_file)
+{
+    H5FD_mpio_t	*file = (H5FD_mpio_t*)_file;
+    haddr_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_get_eof, HADDR_UNDEF)
+
+    assert(file);
+    assert(H5FD_MPIO==file->pub.driver_id);
+
+    /* Set return value */
+    ret_value=file->eof;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5FD_mpio_get_handle
+ *
+ * Purpose:        Returns the file handle of MPIO file driver.
+ *
+ * Returns:        Non-negative if succeed or negative if fails.
+ *
+ * Programmer:     Raymond Lu
+ *                 Sept. 16, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+*/
+static herr_t
+H5FD_mpio_get_handle(H5FD_t *_file, hid_t UNUSED fapl, void** file_handle)
+{
+    H5FD_mpio_t         *file = (H5FD_mpio_t *)_file;
+    herr_t              ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_get_handle, FAIL)
+
+    if(!file_handle)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file handle not valid")
+
+    *file_handle = &(file->f);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_read
+ *
+ * Purpose:	Reads SIZE bytes of data from FILE beginning at address ADDR
+ *		into buffer BUF according to data transfer properties in
+ *		DXPL_ID using potentially complex file and buffer types to
+ *		effect the transfer.
+ *
+ *		Reading past the end of the MPI file returns zeros instead of
+ *		failing.  MPI is able to coalesce requests from different
+ *		processes (collective or independent).
+ *
+ * Return:	Success:	Zero. Result is stored in caller-supplied
+ *				buffer BUF.
+ *
+ *		Failure:	-1, Contents of buffer BUF are undefined.
+ *
+ * Programmer:	rky, 1998-01-30
+ *
+ * Modifications:
+ * 		Robb Matzke, 1998-02-18
+ *		Added the ACCESS_PARMS argument.
+ *
+ * 		rky, 1998-04-10
+ *		Call independent or collective MPI read, based on
+ *		ACCESS_PARMS.
+ *
+ * 		Albert Cheng, 1998-06-01
+ *		Added XFER_MODE to control independent or collective MPI
+ *		read.
+ *
+ * 		rky, 1998-08-16
+ *		Use BTYPE, FTYPE, and DISP from access parms. The guts of
+ *		H5FD_mpio_read and H5FD_mpio_write should be replaced by a
+ *		single dual-purpose routine.
+ *
+ * 		Robb Matzke, 1999-04-21
+ *		Changed XFER_MODE to XFER_PARMS for all H5F_*_read()
+ *		callbacks.
+ *
+ * 		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ * 		Robb Matzke, 1999-08-06
+ *		Modified to work with the virtual file layer.
+ *
+ *		Quincey Koziol,  2002-05-14
+ *		Only call MPI_Get_count if we can use MPI_BYTE for the MPI type
+ *              for the I/O transfer.  Someday we might include code to decode
+ *              the MPI type used for more complicated transfers and call
+ *              MPI_Get_count all the time.
+ *
+ *              Quincey Koziol - 2002/06/17
+ *              Removed 'disp' parameter from H5FD_mpio_setup routine and use
+ *              the address of the dataset in MPI_File_set_view() calls, as
+ *              necessary.
+ *
+ *              Quincey Koziol - 2002/06/24
+ *              Removed "lazy" MPI_File_set_view() calls, since they would fail
+ *              if the first I/O was a collective I/O using MPI derived types
+ *              and the next I/O was an independent I/O.
+ *
+ *              Quincey Koziol - 2003/10/22-31
+ *              Restructured code massively, straightening out logic and finally
+ *              getting the bytes_read stuff working.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpio_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t dxpl_id, haddr_t addr, size_t size,
+	       void *buf/*out*/)
+{
+    H5FD_mpio_t			*file = (H5FD_mpio_t*)_file;
+    MPI_Offset			mpi_off;
+    MPI_Status  		mpi_stat;
+    int				mpi_code;	/* mpi return code */
+    MPI_Datatype		buf_type=MPI_BYTE;      /* MPI description of the selection in memory */
+    int         		size_i;         /* Integer copy of 'size' to read */
+    int         		bytes_read;     /* Number of bytes read in */
+    int         		n;
+    int                         type_size;      /* MPI datatype used for I/O's size */
+    int                         io_size;        /* Actual number of bytes requested */
+    unsigned			use_view_this_time=0;
+    herr_t              	ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_read, FAIL)
+
+#ifdef H5FDmpio_DEBUG
+    if (H5FD_mpio_Debug[(int)'t'])
+    	fprintf(stdout, "Entering H5FD_mpio_read\n" );
+#endif
+    assert(file);
+    assert(H5FD_MPIO==file->pub.driver_id);
+    /* Make certain we have the correct type of property list */
+    assert(H5I_GENPROP_LST==H5I_get_type(dxpl_id));
+    assert(TRUE==H5P_isa_class(dxpl_id,H5P_DATASET_XFER));
+    assert(buf);
+
+    /* Portably initialize MPI status variable */
+    HDmemset(&mpi_stat,0,sizeof(MPI_Status));
+
+    /* some numeric conversions */
+    if (H5FD_mpi_haddr_to_MPIOff(addr, &mpi_off/*out*/)<0)
+        HGOTO_ERROR(H5E_INTERNAL, H5E_BADRANGE, FAIL, "can't convert from haddr to MPI off")
+    size_i = (int)size;
+    if ((hsize_t)size_i != size)
+        HGOTO_ERROR(H5E_INTERNAL, H5E_BADRANGE, FAIL, "can't convert from size to size_i")
+
+#ifdef H5FDmpio_DEBUG
+    if (H5FD_mpio_Debug[(int)'r'])
+        fprintf(stdout, "in H5FD_mpio_read  mpi_off=%ld  size_i=%d\n",
+		(long)mpi_off, size_i );
+#endif
+
+    /* Only look for MPI views for raw data transfers */
+    if(type==H5FD_MEM_DRAW) {
+        H5P_genplist_t              *plist;      /* Property list pointer */
+        H5FD_mpio_xfer_t            xfer_mode;   /* I/O tranfer mode */
+
+        /* Obtain the data transfer properties */
+        if(NULL == (plist = H5I_object(dxpl_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+        xfer_mode=(H5FD_mpio_xfer_t)H5P_peek_unsigned(plist, H5D_XFER_IO_XFER_MODE_NAME);
+
+        /*
+         * Set up for a fancy xfer using complex types, or single byte block. We
+         * wouldn't need to rely on the use_view field if MPI semantics allowed
+         * us to test that btype=ftype=MPI_BYTE (or even MPI_TYPE_NULL, which
+         * could mean "use MPI_BYTE" by convention).
+         */
+        if(xfer_mode==H5FD_MPIO_COLLECTIVE) {
+            MPI_Datatype		file_type;
+
+            /* Remember that views are used */
+            use_view_this_time=TRUE;
+
+            /* prepare for a full-blown xfer using btype, ftype, and disp */
+            if(H5P_get(plist,H5FD_MPI_XFER_MEM_MPI_TYPE_NAME,&buf_type)<0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get MPI-I/O type property")
+            if(H5P_get(plist,H5FD_MPI_XFER_FILE_MPI_TYPE_NAME,&file_type)<0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get MPI-I/O type property")
+
+            /*
+             * Set the file view when we are using MPI derived types
+             */
+            /*OKAY: CAST DISCARDS CONST QUALIFIER*/
+            if (MPI_SUCCESS != (mpi_code=MPI_File_set_view(file->f, mpi_off, MPI_BYTE, file_type, H5FD_mpi_native_g,  file->info)))
+                HMPI_GOTO_ERROR(FAIL, "MPI_File_set_view failed", mpi_code)
+
+            /* When using types, use the address as the displacement for
+             * MPI_File_set_view and reset the address for the read to zero
+             */
+            mpi_off=0;
+        } /* end if */
+    } /* end if */
+
+    /* Read the data. */
+    if (use_view_this_time) {
+#ifdef H5FDmpio_DEBUG
+	if (H5FD_mpio_Debug[(int)'t'])
+	    fprintf(stdout, "H5FD_mpio_read: using MPIO collective mode\n");
+#endif
+        if (MPI_SUCCESS!= (mpi_code=MPI_File_read_at_all(file->f, mpi_off, buf, size_i, buf_type, &mpi_stat )))
+            HMPI_GOTO_ERROR(FAIL, "MPI_File_read_at_all failed", mpi_code)
+
+        /*
+         * Reset the file view when we used MPI derived types
+         */
+        /*OKAY: CAST DISCARDS CONST QUALIFIER*/
+        if (MPI_SUCCESS != (mpi_code=MPI_File_set_view(file->f, 0, MPI_BYTE, MPI_BYTE, H5FD_mpi_native_g,  file->info)))
+            HMPI_GOTO_ERROR(FAIL, "MPI_File_set_view failed", mpi_code)
+    } else {
+        if (MPI_SUCCESS!= (mpi_code=MPI_File_read_at(file->f, mpi_off, buf, size_i, buf_type, &mpi_stat)))
+            HMPI_GOTO_ERROR(FAIL, "MPI_File_read_at failed", mpi_code)
+    }
+
+    /* How many bytes were actually read? */
+    /* [This works because the "basic elements" we use for all our MPI derived
+     *  types are MPI_BYTE.  We should be using the 'buf_type' for the MPI
+     *  datatype in this call though... (We aren't because using it causes
+     *  the LANL "qsc" machine to dump core - 12/19/03) - QAK]
+     */
+    if (MPI_SUCCESS != (mpi_code=MPI_Get_elements(&mpi_stat, MPI_BYTE, &bytes_read)))
+        HMPI_GOTO_ERROR(FAIL, "MPI_Get_elements failed", mpi_code)
+
+    /* Get the type's size */
+    if (MPI_SUCCESS != (mpi_code=MPI_Type_size(buf_type,&type_size)))
+        HMPI_GOTO_ERROR(FAIL, "MPI_Type_size failed", mpi_code)
+
+    /* Compute the actual number of bytes requested */
+    io_size=type_size*size_i;
+
+    /* Check for read failure */
+    if (bytes_read<0 || bytes_read>io_size)
+        HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed")
+
+    /*
+     * This gives us zeroes beyond end of physical MPI file.
+     */
+    if ((n=(io_size-bytes_read)) > 0)
+        HDmemset((char*)buf+bytes_read, 0, (size_t)n);
+
+done:
+#ifdef H5FDmpio_DEBUG
+    if (H5FD_mpio_Debug[(int)'t'])
+    	fprintf(stdout, "Leaving H5FD_mpio_read\n" );
+#endif
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_write
+ *
+ * Purpose:	Writes SIZE bytes of data to FILE beginning at address ADDR
+ *		from buffer BUF according to data transfer properties in
+ *		DXPL_ID using potentially complex file and buffer types to
+ *		effect the transfer.
+ *
+ *		MPI is able to coalesce requests from different processes
+ *		(collective and independent).
+ *
+ * Return:	Success:	Zero. USE_TYPES and OLD_USE_TYPES in the
+ *				access params are altered.
+ *
+ *		Failure:	-1, USE_TYPES and OLD_USE_TYPES in the
+ *				access params may be altered.
+ *
+ * Programmer:	Unknown
+ *              January 30, 1998
+ *
+ * Modifications:
+ *		rky, 1998-08-28
+ *		If the file->allsame flag is set, we assume that all the
+ *		procs in the relevant MPI communicator will write identical
+ *		data at identical offsets in the file, so only proc 0 will
+ *		write, and all other procs will wait for p0 to finish. This
+ *		is useful for writing metadata, for example. Note that we
+ *		don't _check_ that the data is identical. Also, the mechanism
+ *		we use to eliminate the redundant writes is by requiring a
+ *		call to H5FD_mpio_tas_allsame before the write, which is
+ *		rather klugey. Would it be better to pass a parameter to
+ *		low-level writes like H5F_block_write and H5F_low_write,
+ *		instead?  Or...??? Also, when I created this mechanism I
+ *		wanted to minimize the difference in behavior between the old
+ *		way of doing things (i.e., all procs write) and the new way,
+ *		so the writes are eliminated at the very lowest level, here
+ *		in H5FD_mpio_write. It may be better to rethink that, and
+ *		short-circuit the writes at a higher level (e.g., at the
+ *		points in the code where H5FD_mpio_tas_allsame is called).
+ *
+ *
+ * 		Robb Matzke, 1998-02-18
+ *		Added the ACCESS_PARMS argument.
+ *
+ * 		rky, 1998-04-10
+ *		Call independent or collective MPI write, based on
+ *		ACCESS_PARMS.
+ *
+ * 		rky, 1998-04-24
+ *		Removed redundant write from H5FD_mpio_write.
+ *
+ * 		Albert Cheng, 1998-06-01
+ *		Added XFER_MODE to control independent or collective MPI
+ *		write.
+ *
+ * 		rky, 1998-08-16
+ *		Use BTYPE, FTYPE, and DISP from access parms. The guts of
+ *		H5FD_mpio_read and H5FD_mpio_write should be replaced by a
+ *		single dual-purpose routine.
+ *
+ * 		rky, 1998-08-28
+ *		Added ALLSAME parameter to make all but proc 0 skip the
+ *		actual write.
+ *
+ * 		Robb Matzke, 1999-04-21
+ *		Changed XFER_MODE to XFER_PARMS for all H5FD_*_write()
+ *		callbacks.
+ *
+ * 		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ * 		Robb Matzke, 1999-08-06
+ *		Modified to work with the virtual file layer.
+ *
+ *		Albert Cheng, 1999-12-19
+ *		When only-p0-write-allsame-data, p0 Bcasts the
+ *		ret_value to other processes.  This prevents
+ *		a racing condition (that other processes try to
+ *		read the file before p0 finishes writing) and also
+ *		allows all processes to report the same ret_value.
+ *
+ *		Kim Yates, Pat Weidhaas,  2000-09-26
+ *		Move block of coding where only p0 writes after the
+ *              MPI_File_set_view call.
+ *
+ *		Quincey Koziol,  2002-05-10
+ *		Instead of always writing metadata from process 0, spread the
+ *              burden among all the processes by using a round-robin rotation
+ *              scheme.
+ *
+ *		Quincey Koziol,  2002-05-10
+ *		Removed allsame code, keying off the type parameter instead.
+ *
+ *		Quincey Koziol,  2002-05-14
+ *		Only call MPI_Get_count if we can use MPI_BYTE for the MPI type
+ *              for the I/O transfer.  Someday we might include code to decode
+ *              the MPI type used for more complicated transfers and call
+ *              MPI_Get_count all the time.
+ *
+ *              Quincey Koziol - 2002/06/17
+ *              Removed 'disp' parameter from H5FD_mpio_setup routine and use
+ *              the address of the dataset in MPI_File_set_view() calls, as
+ *              necessary.
+ *
+ *              Quincey Koziol - 2002/06/24
+ *              Removed "lazy" MPI_File_set_view() calls, since they would fail
+ *              if the first I/O was a collective I/O using MPI derived types
+ *              and the next I/O was an independent I/O.
+ *
+ *              Quincey Koziol - 2002/07/18
+ *              Added "block_before_meta_write" dataset transfer flag, which
+ *              is set during writes from a metadata cache flush and indicates
+ *              that all the processes must sync up before (one of them)
+ *              writing metadata.
+ *
+ *              Quincey Koziol - 2003/10/22-31
+ *              Restructured code massively, straightening out logic and finally
+ *              getting the bytes_written stuff working.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpio_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
+		size_t size, const void *buf)
+{
+    H5FD_mpio_t			*file = (H5FD_mpio_t*)_file;
+    MPI_Offset 		 	mpi_off;
+    MPI_Status			mpi_stat;
+    MPI_Datatype		buf_type=MPI_BYTE;      /* MPI description of the selection in memory */
+    int			        mpi_code;	/* MPI return code */
+    int         		size_i, bytes_written;
+    int                         type_size;      /* MPI datatype used for I/O's size */
+    int                         io_size;        /* Actual number of bytes requested */
+    unsigned			use_view_this_time=0;
+    H5P_genplist_t              *plist;                 /* Property list pointer */
+    herr_t              	ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_write, FAIL)
+
+#ifdef H5FDmpio_DEBUG
+    if (H5FD_mpio_Debug[(int)'t'])
+    	fprintf(stdout, "Entering H5FD_mpio_write\n" );
+#endif
+    assert(file);
+    assert(H5FD_MPIO==file->pub.driver_id);
+    /* Make certain we have the correct type of property list */
+    assert(H5I_GENPROP_LST==H5I_get_type(dxpl_id));
+    assert(TRUE==H5P_isa_class(dxpl_id,H5P_DATASET_XFER));
+    assert(buf);
+
+    /* Portably initialize MPI status variable */
+    HDmemset(&mpi_stat,0,sizeof(MPI_Status));
+
+    /* some numeric conversions */
+    if (H5FD_mpi_haddr_to_MPIOff(addr, &mpi_off)<0)
+        HGOTO_ERROR(H5E_INTERNAL, H5E_BADRANGE, FAIL, "can't convert from haddr to MPI off")
+    size_i = (int)size;
+    if ((hsize_t)size_i != size)
+        HGOTO_ERROR(H5E_INTERNAL, H5E_BADRANGE, FAIL, "can't convert from size to size_i")
+
+#ifdef H5FDmpio_DEBUG
+    if (H5FD_mpio_Debug[(int)'w'])
+        fprintf(stdout, "in H5FD_mpio_write  mpi_off=%ld  size_i=%d\n",
+                (long)mpi_off, size_i);
+#endif
+
+    /* Obtain the data transfer properties */
+    if(NULL == (plist = H5I_object(dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+
+    if(type==H5FD_MEM_DRAW) {
+        H5FD_mpio_xfer_t            xfer_mode;   /* I/O tranfer mode */
+
+        /* Obtain the data transfer properties */
+        xfer_mode = (H5FD_mpio_xfer_t)H5P_peek_unsigned(plist, H5D_XFER_IO_XFER_MODE_NAME);
+
+        /*
+         * Set up for a fancy xfer using complex types, or single byte block. We
+         * wouldn't need to rely on the use_view field if MPI semantics allowed
+         * us to test that btype=ftype=MPI_BYTE (or even MPI_TYPE_NULL, which
+         * could mean "use MPI_BYTE" by convention).
+         */
+        if(xfer_mode==H5FD_MPIO_COLLECTIVE) {
+            MPI_Datatype		file_type;
+
+            /* Remember that views are used */
+            use_view_this_time=TRUE;
+
+            /* prepare for a full-blown xfer using btype, ftype, and disp */
+            if(H5P_get(plist,H5FD_MPI_XFER_MEM_MPI_TYPE_NAME,&buf_type)<0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get MPI-I/O type property")
+            if(H5P_get(plist,H5FD_MPI_XFER_FILE_MPI_TYPE_NAME,&file_type)<0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get MPI-I/O type property")
+
+            /*
+             * Set the file view when we are using MPI derived types
+             */
+            /*OKAY: CAST DISCARDS CONST QUALIFIER*/
+            if (MPI_SUCCESS != (mpi_code=MPI_File_set_view(file->f, mpi_off, MPI_BYTE, file_type, H5FD_mpi_native_g, file->info)))
+                HMPI_GOTO_ERROR(FAIL, "MPI_File_set_view failed", mpi_code)
+
+            /* When using types, use the address as the displacement for
+             * MPI_File_set_view and reset the address for the read to zero
+             */
+            mpi_off=0;
+        } /* end if */
+    } /* end if */
+    else {
+        unsigned		        block_before_meta_write=0;      /* Whether to block before a metadata write */
+
+        /* Check if we need to syncronize all processes before attempting metadata write
+         * (Prevents race condition where the process writing the metadata goes ahead
+         * and writes the metadata to the file before all the processes have
+         * read the data, "transmitting" data from the "future" to the reading
+         * process. -QAK )
+         *
+         * The only time we don't want to block before a metadata write is when
+         * we are flushing out a bunch of metadata.  Then, we block before the
+         * first write and don't block for further writes in the sequence.
+         */
+        if(H5P_exist_plist(plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME)>0)
+            if(H5P_get(plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,&block_before_meta_write)<0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get H5AC property")
+
+        if(block_before_meta_write)
+            if (MPI_SUCCESS!= (mpi_code=MPI_Barrier(file->comm)))
+                HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code)
+
+        /* Only one process will do the actual write if all procs in comm write same metadata */
+        if (file->mpi_rank != H5_PAR_META_WRITE) {
+#ifdef H5FDmpio_DEBUG
+            if (H5FD_mpio_Debug[(int)'w']) {
+                fprintf(stdout,
+                    "  proc %d: in H5FD_mpio_write (write omitted)\n",
+                    file->mpi_rank );
+            }
+#endif
+            HGOTO_DONE(SUCCEED) /* skip the actual write */
+        } /* end if */
+    } /* end if */
+
+    /* Write the data. */
+    if (use_view_this_time) {
+#ifdef H5FDmpio_DEBUG
+        if (H5FD_mpio_Debug[(int)'t'])
+            fprintf(stdout, "H5FD_mpio_write: using MPIO collective mode\n");
+#endif
+        /*OKAY: CAST DISCARDS CONST QUALIFIER*/
+        if (MPI_SUCCESS != (mpi_code=MPI_File_write_at_all(file->f, mpi_off, (void*)buf, size_i, buf_type, &mpi_stat)))
+            HMPI_GOTO_ERROR(FAIL, "MPI_File_write_at_all failed", mpi_code)
+
+        /*
+         * Reset the file view when we used MPI derived types
+         */
+        /*OKAY: CAST DISCARDS CONST QUALIFIER*/
+        if (MPI_SUCCESS != (mpi_code=MPI_File_set_view(file->f, 0, MPI_BYTE, MPI_BYTE, H5FD_mpi_native_g,  file->info)))
+            HMPI_GOTO_ERROR(FAIL, "MPI_File_set_view failed", mpi_code)
+    } else {
+        /*OKAY: CAST DISCARDS CONST QUALIFIER*/
+        if (MPI_SUCCESS != (mpi_code=MPI_File_write_at(file->f, mpi_off, (void*)buf, size_i, buf_type, &mpi_stat)))
+            HMPI_GOTO_ERROR(FAIL, "MPI_File_write_at failed", mpi_code)
+    }
+
+    /* How many bytes were actually written? */
+    /* [This works because the "basic elements" we use for all our MPI derived
+     *  types are MPI_BYTE.  We should be using the 'buf_type' for the MPI
+     *  datatype in this call though... (We aren't because using it causes
+     *  the LANL "qsc" machine to dump core - 12/19/03) - QAK]
+     */
+    if (MPI_SUCCESS != (mpi_code=MPI_Get_elements(&mpi_stat, MPI_BYTE, &bytes_written)))
+        HMPI_GOTO_ERROR(FAIL, "MPI_Get_elements failed", mpi_code)
+
+    /* Get the type's size */
+    if (MPI_SUCCESS != (mpi_code=MPI_Type_size(buf_type,&type_size)))
+        HMPI_GOTO_ERROR(FAIL, "MPI_Type_size failed", mpi_code)
+
+    /* Compute the actual number of bytes requested */
+    io_size=type_size*size_i;
+
+    /* Check for write failure */
+    if (bytes_written != io_size)
+        HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
+
+    /* Forget the EOF value (see H5FD_mpio_get_eof()) --rpm 1999-08-06 */
+    file->eof = HADDR_UNDEF;
+
+done:
+    /* if only one process writes, need to broadcast the ret_value to other processes */
+    if (type!=H5FD_MEM_DRAW) {
+	if (MPI_SUCCESS != (mpi_code=MPI_Bcast(&ret_value, sizeof(ret_value), MPI_BYTE, H5_PAR_META_WRITE, file->comm)))
+	    HMPI_DONE_ERROR(FAIL, "MPI_Bcast failed", mpi_code)
+    } /* end if */
+
+#ifdef H5FDmpio_DEBUG
+    if (H5FD_mpio_Debug[(int)'t'])
+    	fprintf(stdout, "proc %d: Leaving H5FD_mpio_write with ret_value=%d\n",
+	    file->mpi_rank, ret_value );
+#endif
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_mpio_flush
+ *
+ * Purpose:     Makes sure that all data is on disk.  This is collective.
+ *
+ * Return:      Success:	Non-negative
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:  Unknown
+ *              January 30, 1998
+ *
+ * Modifications:
+ * 		Robb Matzke, 1998-02-18
+ *		Added the ACCESS_PARMS argument.
+ *
+ * 		Robb Matzke, 1999-08-06
+ *		Modified to work with the virtual file layer.
+ *
+ *              Robb Matzke, 2000-12-29
+ *              Make sure file size is at least as large as the last
+ *              allocated byte.
+ *
+ *              Quincey Koziol, 2002-06-??
+ *              Changed file extension method to use MPI_File_set_size instead
+ *              read->write method.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpio_flush(H5FD_t *_file, hid_t UNUSED dxpl_id, unsigned closing)
+{
+    H5FD_mpio_t		*file = (H5FD_mpio_t*)_file;
+    int			mpi_code;	/* mpi return code */
+    MPI_Offset          mpi_off;
+    herr_t              ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_flush, FAIL)
+
+#ifdef H5FDmpio_DEBUG
+    if (H5FD_mpio_Debug[(int)'t'])
+    	fprintf(stdout, "Entering H5FD_mpio_flush\n" );
+#endif
+    assert(file);
+    assert(H5FD_MPIO==file->pub.driver_id);
+
+    /* Extend the file to make sure it's large enough, then sync.
+     * Unfortunately, keeping track of EOF is an expensive operation, so
+     * we can't just check whether EOF<EOA like with other drivers.
+     * Therefore we'll just read the byte at EOA-1 and then write it back. */
+    if(file->eoa>file->last_eoa) {
+#ifdef H5_MPI_FILE_SET_SIZE_BIG
+        if (H5FD_mpi_haddr_to_MPIOff(file->eoa, &mpi_off)<0)
+            HGOTO_ERROR(H5E_INTERNAL, H5E_BADRANGE, FAIL, "cannot convert from haddr_t to MPI_Offset")
+
+        /* Extend the file's size */
+        if (MPI_SUCCESS != (mpi_code=MPI_File_set_size(file->f, mpi_off)))
+            HMPI_GOTO_ERROR(FAIL, "MPI_File_set_size failed", mpi_code)
+#else /* H5_MPI_FILE_SET_SIZE_BIG */
+        if (0==file->mpi_rank) {
+            uint8_t             byte=0;
+            MPI_Status          mpi_stat;
+
+            /* Portably initialize MPI status variable */
+            HDmemset(&mpi_stat,0,sizeof(MPI_Status));
+
+            if (H5FD_mpi_haddr_to_MPIOff(file->eoa-1, &mpi_off)<0)
+                HGOTO_ERROR(H5E_INTERNAL, H5E_BADRANGE, FAIL, "cannot convert from haddr_t to MPI_Offset")
+            if (MPI_SUCCESS != (mpi_code=MPI_File_read_at(file->f, mpi_off, &byte, 1, MPI_BYTE, &mpi_stat)))
+                HMPI_GOTO_ERROR(FAIL, "MPI_File_read_at failed", mpi_code)
+            if (MPI_SUCCESS != (mpi_code=MPI_File_write_at(file->f, mpi_off, &byte, 1, MPI_BYTE, &mpi_stat)))
+                HMPI_GOTO_ERROR(FAIL, "MPI_File_write_at failed", mpi_code)
+        } /* end if */
+#endif /* H5_MPI_FILE_SET_SIZE_BIG */
+
+	/* Don't let any proc return until all have extended the file.
+         * (Prevents race condition where some processes go ahead and write
+         * more data to the file before all the processes have finished making
+         * it the shorter length, potentially truncating the file and dropping
+         * the new data written)
+         */
+        if (MPI_SUCCESS!= (mpi_code=MPI_Barrier(file->comm)))
+            HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code)
+
+        /* Update the 'last' eoa value */
+        file->last_eoa=file->eoa;
+    } /* end if */
+
+    /* Only sync the file if we are not going to immediately close it */
+    if(!closing) {
+        if (MPI_SUCCESS != (mpi_code=MPI_File_sync(file->f)))
+            HMPI_GOTO_ERROR(FAIL, "MPI_File_sync failed", mpi_code)
+    } /* end if */
+
+done:
+#ifdef H5FDmpio_DEBUG
+    if (H5FD_mpio_Debug[(int)'t'])
+    	fprintf(stdout, "Leaving H5FD_mpio_flush\n" );
+#endif
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_mpi_rank
+ *
+ * Purpose:	Returns the MPI rank for a process
+ *
+ * Return:	Success: non-negative
+ *		Failure: negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, May 16, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5FD_mpio_mpi_rank(const H5FD_t *_file)
+{
+    const H5FD_mpio_t	*file = (const H5FD_mpio_t*)_file;
+    int ret_value;              /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_mpi_rank, FAIL)
+
+    assert(file);
+    assert(H5FD_MPIO==file->pub.driver_id);
+
+    /* Set return value */
+    ret_value=file->mpi_rank;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpio_mpi_rank() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_mpi_size
+ *
+ * Purpose:	Returns the number of MPI processes
+ *
+ * Return:	Success: non-negative
+ *		Failure: negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, May 16, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5FD_mpio_mpi_size(const H5FD_t *_file)
+{
+    const H5FD_mpio_t	*file = (const H5FD_mpio_t*)_file;
+    int ret_value;              /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_mpi_size, FAIL)
+
+    assert(file);
+    assert(H5FD_MPIO==file->pub.driver_id);
+
+    /* Set return value */
+    ret_value=file->mpi_size;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpio_mpi_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpio_communicator
+ *
+ * Purpose:	Returns the MPI communicator for the file.
+ *
+ * Return:	Success:	The communicator
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August  9, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static MPI_Comm
+H5FD_mpio_communicator(const H5FD_t *_file)
+{
+    const H5FD_mpio_t	*file = (const H5FD_mpio_t*)_file;
+    MPI_Comm ret_value;         /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpio_communicator, MPI_COMM_NULL)
+
+    assert(file);
+    assert(H5FD_MPIO==file->pub.driver_id);
+
+    /* Set return value */
+    ret_value=file->comm;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+#endif /* H5_HAVE_PARALLEL */

Added: packages/hdf5/branches/upstream/current/src/H5FDmpio.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDmpio.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDmpio.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,60 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the mpio driver.
+ */
+#ifndef H5FDmpio_H
+#define H5FDmpio_H
+
+#ifdef H5_HAVE_PARALLEL
+#   define H5FD_MPIO	(H5FD_mpio_init())
+#else
+#   define H5FD_MPIO	(-1)
+#endif /* H5_HAVE_PARALLEL */
+
+/* Macros */
+
+#define IS_H5FD_MPIO(f)	/* (H5F_t *f) */				    \
+    (H5FD_MPIO==H5F_get_driver_id(f))
+
+#ifdef H5_HAVE_PARALLEL
+/*Turn on H5FDmpio_debug if H5F_DEBUG is on */
+#ifdef H5F_DEBUG
+#ifndef H5FDmpio_DEBUG
+#define H5FDmpio_DEBUG
+#endif
+#endif
+
+/* Function prototypes */
+#ifdef __cplusplus
+extern "C" {
+#endif
+H5_DLL hid_t H5FD_mpio_init(void);
+H5_DLL void H5FD_mpio_term(void);
+H5_DLL herr_t H5Pset_fapl_mpio(hid_t fapl_id, MPI_Comm comm, MPI_Info info);
+H5_DLL herr_t H5Pget_fapl_mpio(hid_t fapl_id, MPI_Comm *comm/*out*/,
+			MPI_Info *info/*out*/);
+H5_DLL herr_t H5Pset_dxpl_mpio(hid_t dxpl_id, H5FD_mpio_xfer_t xfer_mode);
+H5_DLL herr_t H5Pget_dxpl_mpio(hid_t dxpl_id, H5FD_mpio_xfer_t *xfer_mode/*out*/);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H5_HAVE_PARALLEL */
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5FDmpiposix.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDmpiposix.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDmpiposix.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1634 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol at ncsa.uiuc.ed>
+ *              Thursday, July 11, 2002
+ *
+ * Purpose:	This is a "combination" MPI-2 and posix I/O driver.
+ *              It uses MPI for coordinating the actions of several processes
+ *              and posix I/O calls to do the actual I/O to the disk.
+ *
+ *              This driver was derived from the H5FDmpio.c driver and may
+ *              share bugs/quirks/etc.
+ *
+ * Limitations:
+ *              There is no "collective" I/O mode with this driver.
+ *
+ *              This will almost certainly _not_ work correctly for files
+ *              accessed on distributed parallel systems with the file located
+ *              on a non-parallel filesystem.
+ *
+ */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5FD_mpiposix_init_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FDmpi.h"            /* MPI-based file drivers		*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"         /* Property lists                       */
+
+/* Features:
+ *   H5_HAVE_GPFS   -- issue gpfs_fcntl() calls to hopefully improve
+ *                     performance when accessing files on a GPFS
+ *                     file system.
+ *
+ *   REPORT_IO      -- if set then report all POSIX file calls to stderr.
+ *
+ */
+/* #define REPORT_IO */
+
+#ifdef H5_HAVE_GPFS
+#   include <gpfs_fcntl.h>
+#endif
+
+#ifdef H5_HAVE_PARALLEL
+
+/*
+ * The driver identification number, initialized at runtime if H5_HAVE_PARALLEL
+ * is defined. This allows applications to still have the H5FD_MPIPOSIX
+ * "constants" in their source code (it also makes this file strictly ANSI
+ * compliant when H5_HAVE_PARALLEL isn't defined)
+ */
+static hid_t H5FD_MPIPOSIX_g = 0;
+
+/* File operations */
+#define OP_UNKNOWN	0
+#define OP_READ		1
+#define OP_WRITE	2
+
+/*
+ * The description of a file belonging to this driver.
+ * The EOF value
+ * is only used just after the file is opened in order for the library to
+ * determine whether the file is empty, truncated, or okay. The MPIPOSIX driver
+ * doesn't bother to keep it updated since it's an expensive operation.
+ */
+typedef struct H5FD_mpiposix_t {
+    H5FD_t	pub;		/*public stuff, must be first		*/
+    int		fd;		/*the unix file handle		        */
+    MPI_Comm	comm;		/*communicator				*/
+    int         mpi_rank;       /* This process's rank                  */
+    int         mpi_size;       /* Total number of processes            */
+    haddr_t	eof;		/*end-of-file marker			*/
+    haddr_t	eoa;		/*end-of-address marker			*/
+    haddr_t	last_eoa;	/* Last known end-of-address marker	*/
+    haddr_t	pos;		/* Current file I/O position	        */
+    int		op;		/* Last file I/O operation		*/
+    hsize_t	naccess;	/* Number of (write) accesses to file   */
+    size_t      blksize;        /* Block size of file system            */
+    hbool_t     use_gpfs;       /* Use GPFS to write things             */
+#ifndef WIN32
+    /*
+     * On most systems the combination of device and i-node number uniquely
+     * identify a file.
+     */
+    dev_t	device;		/*file device number		*/
+    ino_t	inode;		/*file i-node number		*/
+#else
+    /*
+     * On WIN32 the low-order word of a unique identifier associated with the
+     * file and the volume serial number uniquely identify a file. This number
+     * (which, both? -rpm) may change when the system is restarted or when the
+     * file is opened. After a process opens a file, the identifier is
+     * constant until the file is closed. An application can use this
+     * identifier and the volume serial number to determine whether two
+     * handles refer to the same file.
+     */
+    int fileindexlo;
+    int fileindexhi;
+#endif
+} H5FD_mpiposix_t;
+
+/*
+ * This driver supports systems that have the lseek64() function by defining
+ * some macros here so we don't have to have conditional compilations later
+ * throughout the code.
+ *
+ * file_offset_t:	The datatype for file offsets, the second argument of
+ *			the lseek() or lseek64() call.
+ *
+ * file_seek:		The function which adjusts the current file position,
+ *			either lseek() or lseek64().
+ */
+/* adding for windows NT file system support. */
+/* pvn: added __MWERKS__ support. */
+
+#ifdef H5_HAVE_LSEEK64
+#   define file_offset_t	off64_t
+#   define file_seek		lseek64
+#   define file_truncate	ftruncate64
+#elif defined (WIN32) && !defined(__MWERKS__)
+# /*MSVC*/
+#   define file_offset_t __int64
+#   define file_seek _lseeki64
+#   define file_truncate	_ftruncatei64
+#else
+#   define file_offset_t	off_t
+#   define file_seek		HDlseek
+#   define file_truncate	HDftruncate
+#endif
+
+/*
+ * These macros check for overflow of various quantities.  These macros
+ * assume that file_offset_t is signed and haddr_t and size_t are unsigned.
+ *
+ * ADDR_OVERFLOW:	Checks whether a file address of type `haddr_t'
+ *			is too large to be represented by the second argument
+ *			of the file seek function.
+ *
+ * SIZE_OVERFLOW:	Checks whether a buffer size of type `hsize_t' is too
+ *			large to be represented by the `size_t' type.
+ *
+ * REGION_OVERFLOW:	Checks whether an address and size pair describe data
+ *			which can be addressed entirely by the second
+ *			argument of the file seek function.
+ */
+#define MAXADDR (((haddr_t)1<<(8*sizeof(file_offset_t)-1))-1)
+#define ADDR_OVERFLOW(A)	(HADDR_UNDEF==(A) ||			      \
+				 ((A) & ~(haddr_t)MAXADDR))
+#define SIZE_OVERFLOW(Z)	((Z) & ~(hsize_t)MAXADDR)
+#define REGION_OVERFLOW(A,Z)	(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) ||      \
+				 sizeof(file_offset_t)<sizeof(size_t) ||      \
+                                 HADDR_UNDEF==(A)+(Z) ||		      \
+				 (file_offset_t)((A)+(Z))<(file_offset_t)(A))
+
+/* Callbacks */
+static void *H5FD_mpiposix_fapl_get(H5FD_t *_file);
+static void *H5FD_mpiposix_fapl_copy(const void *_old_fa);
+static herr_t H5FD_mpiposix_fapl_free(void *_fa);
+static H5FD_t *H5FD_mpiposix_open(const char *name, unsigned flags, hid_t fapl_id,
+			      haddr_t maxaddr);
+static herr_t H5FD_mpiposix_close(H5FD_t *_file);
+static int H5FD_mpiposix_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
+static herr_t H5FD_mpiposix_query(const H5FD_t *_f1, unsigned long *flags);
+static haddr_t H5FD_mpiposix_get_eoa(H5FD_t *_file);
+static herr_t H5FD_mpiposix_set_eoa(H5FD_t *_file, haddr_t addr);
+static haddr_t H5FD_mpiposix_get_eof(H5FD_t *_file);
+static herr_t  H5FD_mpiposix_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
+static herr_t H5FD_mpiposix_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
+        size_t size, void *buf);
+static herr_t H5FD_mpiposix_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
+        size_t size, const void *buf);
+static herr_t H5FD_mpiposix_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
+static int H5FD_mpiposix_mpi_rank(const H5FD_t *_file);
+static int H5FD_mpiposix_mpi_size(const H5FD_t *_file);
+static MPI_Comm H5FD_mpiposix_communicator(const H5FD_t *_file);
+
+/* MPIPOSIX-specific file access properties */
+typedef struct H5FD_mpiposix_fapl_t {
+    hbool_t             use_gpfs;       /*use GPFS hints                */
+    MPI_Comm		comm;		/*communicator			*/
+} H5FD_mpiposix_fapl_t;
+
+/* The MPIPOSIX file driver information */
+static const H5FD_class_mpi_t H5FD_mpiposix_g = {
+    {   /* Start of superclass information */
+    "mpiposix",					/*name			*/
+    MAXADDR,					/*maxaddr		*/
+    H5F_CLOSE_SEMI,				/* fc_degree		*/
+    NULL,					/*sb_size		*/
+    NULL,					/*sb_encode		*/
+    NULL,					/*sb_decode		*/
+    sizeof(H5FD_mpiposix_fapl_t),		/*fapl_size		*/
+    H5FD_mpiposix_fapl_get,			/*fapl_get		*/
+    H5FD_mpiposix_fapl_copy,			/*fapl_copy		*/
+    H5FD_mpiposix_fapl_free, 			/*fapl_free		*/
+    0,						/*dxpl_size		*/
+    NULL,					/*dxpl_copy		*/
+    NULL,					/*dxpl_free		*/
+    H5FD_mpiposix_open,				/*open			*/
+    H5FD_mpiposix_close,			/*close			*/
+    H5FD_mpiposix_cmp,			        /*cmp			*/
+    H5FD_mpiposix_query,		        /*query			*/
+    NULL,					/*alloc			*/
+    NULL,					/*free			*/
+    H5FD_mpiposix_get_eoa,			/*get_eoa		*/
+    H5FD_mpiposix_set_eoa, 			/*set_eoa		*/
+    H5FD_mpiposix_get_eof,			/*get_eof		*/
+    H5FD_mpiposix_get_handle,                   /*get_handle            */
+    H5FD_mpiposix_read,				/*read			*/
+    H5FD_mpiposix_write,			/*write			*/
+    H5FD_mpiposix_flush,			/*flush			*/
+    NULL,                                       /*lock                  */
+    NULL,                                       /*unlock                */
+    H5FD_FLMAP_SINGLE 				/*fl_map		*/
+    },  /* End of superclass information */
+    H5FD_mpiposix_mpi_rank,                     /*get_rank              */
+    H5FD_mpiposix_mpi_size,                     /*get_size              */
+    H5FD_mpiposix_communicator                  /*get_comm              */
+};
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5FD_mpiposix_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5FD_mpiposix_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5FD_mpiposix_init currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5FD_mpiposix_init_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_mpiposix_init_interface)
+
+    FUNC_LEAVE_NOAPI(H5FD_mpiposix_init())
+} /* H5FD_mpiposix_init_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_init
+ *
+ * Purpose:	Initialize this driver by registering the driver with the
+ *		library.
+ *
+ * Return:	Success:	The driver ID for the mpiposix driver.
+ *
+ *		Failure:	Negative.
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5FD_mpiposix_init(void)
+{
+    hid_t ret_value=H5FD_MPIPOSIX_g;    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_init, FAIL)
+
+    if (H5I_VFL!=H5Iget_type(H5FD_MPIPOSIX_g))
+        H5FD_MPIPOSIX_g = H5FD_register((const H5FD_class_t *)&H5FD_mpiposix_g,sizeof(H5FD_class_mpi_t));
+
+    /* Set return value */
+    ret_value=H5FD_MPIPOSIX_g;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_init() */
+
+
+/*---------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_term
+ *
+ * Purpose:	Shut down the VFD
+ *
+ * Return:	<none>
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, Jan 30, 2004
+ *
+ * Modification:
+ *
+ *---------------------------------------------------------------------------
+ */
+void
+H5FD_mpiposix_term(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_mpiposix_term)
+
+    /* Reset VFL ID */
+    H5FD_MPIPOSIX_g=0;
+
+    FUNC_LEAVE_NOAPI_VOID
+} /* end H5FD_mpiposix_term() */
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_fapl_mpiposix
+ *
+ * Purpose:	Store the user supplied MPI communicator COMM in
+ *		the file access property list FAPL_ID which can then be used
+ *		to create and/or open the file.  This function is available
+ *		only in the parallel HDF5 library and is not collective.
+ *
+ *		comm is the MPI communicator to be used for file open as
+ *		defined in MPI_FILE_OPEN of MPI-2. This function makes a
+ *		duplicate of comm. Any modification to comm after this function
+ *		call returns has no effect on the access property list.
+ *
+ *              If fapl_id has previously set comm value, it will be replaced
+ *              and the old communicator is freed.
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, July 11, 2002
+ *
+ * Modifications:
+ *		Albert Cheng, 2003-04-24
+ *		Modified the description of the function that it now stores
+ *		a duplicate of the communicator.  Free the old duplicate if
+ *		previously set.  (Work is actually done by H5P_set_driver.)
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm)
+{
+    H5FD_mpiposix_fapl_t	fa;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value;
+
+    FUNC_ENTER_API(H5Pset_fapl_mpiposix, FAIL)
+    H5TRACE2("e","iMc",fapl_id,comm);
+
+    /* Check arguments */
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a file access list")
+    if (MPI_COMM_NULL == comm)
+	HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a valid communicator")
+
+    /* Initialize driver specific properties */
+    fa.comm = comm;
+    fa.use_gpfs = FALSE;
+
+    /* duplication is done during driver setting. */
+    ret_value= H5P_set_driver(plist, H5FD_MPIPOSIX, &fa);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Pset_fapl_mpiposix() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_fapl_mpiposix
+ *
+ * Purpose:	If the file access property list is set to the H5FD_MPIPOSIX
+ *		driver then this function returns a duplicate of the MPI
+ *		communicator through the comm pointer. It is the responsibility
+ *		of the application to free the returned communicator.
+ *
+ * Return:	Success:	Non-negative with the communicator and
+ *				information returned through the COMM
+ *				argument if non-null.  Since it is a duplicate
+ *				of the stored object, future modifications to
+ *				the access property list do not affect it and
+ *				it is the responsibility of the application to
+ *				free it.
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, July 11, 2002
+ *
+ * Modifications:
+ *		Albert Cheng, 2003-04-24
+ *		Return duplicate of the stored communicator.
+ *
+ *              Bill Wendling, 2003-05-01
+ *              Return the USE_GPFS flag.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/)
+{
+    H5FD_mpiposix_fapl_t	*fa;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    int		mpi_code;		/* mpi return code */
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_API(H5Pget_fapl_mpiposix, FAIL)
+    H5TRACE2("e","ix",fapl_id,comm);
+
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a file access list")
+    if (H5FD_MPIPOSIX!=H5P_get_driver(plist))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "incorrect VFL driver")
+    if (NULL==(fa=H5P_get_driver_info(plist)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "bad VFL driver info")
+
+    /* Get MPI Communicator */
+    if (comm){
+	if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(fa->comm, comm)))
+	    HMPI_GOTO_ERROR(FAIL, "MPI_Comm_dup failed", mpi_code)
+    }
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Pget_fapl_mpiposix() */
+#else /* H5_WANT_H5_V1_4_COMPAT */
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_fapl_mpiposix
+ *
+ * Purpose:	Store the user supplied MPI communicator COMM in
+ *		the file access property list FAPL_ID which can then be used
+ *		to create and/or open the file.  This function is available
+ *		only in the parallel HDF5 library and is not collective.
+ *
+ *		comm is the MPI communicator to be used for file open as
+ *		defined in MPI_FILE_OPEN of MPI-2. This function makes a
+ *		duplicate of comm. Any modification to comm after this function
+ *		call returns has no effect on the access property list.
+ *
+ *              If fapl_id has previously set comm value, it will be replaced
+ *              and the old communicator is freed.
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, July 11, 2002
+ *
+ * Modifications:
+ *		Albert Cheng, 2003-04-24
+ *		Modified the description of the function that it now stores
+ *		a duplicate of the communicator.  Free the old duplicate if
+ *		previously set.  (Work is actually done by H5P_set_driver.)
+ *
+ *		Bill Wendling, 2003-05-01
+ *		Modified to take an extra flag indicating that we should
+ *		use the GPFS hints (if available) for this file.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm, hbool_t use_gpfs)
+{
+    H5FD_mpiposix_fapl_t	fa;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value;
+
+    FUNC_ENTER_API(H5Pset_fapl_mpiposix, FAIL)
+    H5TRACE3("e","iMcb",fapl_id,comm,use_gpfs);
+
+    /* Check arguments */
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a file access list")
+    if (MPI_COMM_NULL == comm)
+	HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a valid communicator")
+
+    /* Initialize driver specific properties */
+    fa.comm = comm;
+    fa.use_gpfs = use_gpfs;
+
+    /* duplication is done during driver setting. */
+    ret_value= H5P_set_driver(plist, H5FD_MPIPOSIX, &fa);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Pset_fapl_mpiposix() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_fapl_mpiposix
+ *
+ * Purpose:	If the file access property list is set to the H5FD_MPIPOSIX
+ *		driver then this function returns a duplicate of the MPI
+ *		communicator through the comm pointer. It is the responsibility
+ *		of the application to free the returned communicator.
+ *
+ * Return:	Success:	Non-negative with the communicator and
+ *				information returned through the COMM
+ *				argument if non-null.  Since it is a duplicate
+ *				of the stored object, future modifications to
+ *				the access property list do not affect it and
+ *				it is the responsibility of the application to
+ *				free it.
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, July 11, 2002
+ *
+ * Modifications:
+ *		Albert Cheng, 2003-04-24
+ *		Return duplicate of the stored communicator.
+ *
+ *              Bill Wendling, 2003-05-01
+ *              Return the USE_GPFS flag.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/, hbool_t *use_gpfs/*out*/)
+{
+    H5FD_mpiposix_fapl_t	*fa;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    int		mpi_code;		/* mpi return code */
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_API(H5Pget_fapl_mpiposix, FAIL)
+    H5TRACE3("e","ixx",fapl_id,comm,use_gpfs);
+
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a file access list")
+    if (H5FD_MPIPOSIX!=H5P_get_driver(plist))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "incorrect VFL driver")
+    if (NULL==(fa=H5P_get_driver_info(plist)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "bad VFL driver info")
+
+    /* Get MPI Communicator */
+    if (comm){
+	if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(fa->comm, comm)))
+	    HMPI_GOTO_ERROR(FAIL, "MPI_Comm_dup failed", mpi_code)
+    }
+
+    if (use_gpfs)
+        *use_gpfs = fa->use_gpfs;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Pget_fapl_mpiposix() */
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_fapl_get
+ *
+ * Purpose:	Returns a file access property list which could be used to
+ *		create another file the same as this one.
+ *
+ * Return:	Success:	Ptr to new file access property list with all
+ *				fields copied from the file pointer.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ * 		Albert Cheng, 2003-04-24
+ * 		Duplicate the communicator object so that the new
+ * 		property list is insulated from the old one.
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FD_mpiposix_fapl_get(H5FD_t *_file)
+{
+    H5FD_mpiposix_t	*file = (H5FD_mpiposix_t*)_file;
+    H5FD_mpiposix_fapl_t *fa = NULL;
+    int		mpi_code;	/* MPI return code */
+    void        *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_fapl_get, NULL)
+
+    assert(file);
+    assert(H5FD_MPIPOSIX==file->pub.driver_id);
+
+    if (NULL==(fa=H5MM_calloc(sizeof(H5FD_mpiposix_fapl_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    /* Duplicate the communicator. */
+    if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(file->comm, &fa->comm)))
+	HMPI_GOTO_ERROR(NULL, "MPI_Comm_dup failed", mpi_code)
+
+    fa->use_gpfs = file->use_gpfs;
+
+    /* Set return value */
+    ret_value=fa;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_fapl_get() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_fapl_copy
+ *
+ * Purpose:	Copies the mpiposix-specific file access properties.
+ *
+ * Return:	Success:	Ptr to a new property list
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Albert Cheng
+ *              Apr 24, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FD_mpiposix_fapl_copy(const void *_old_fa)
+{
+    void		*ret_value = NULL;
+    const H5FD_mpiposix_fapl_t *old_fa = (const H5FD_mpiposix_fapl_t*)_old_fa;
+    H5FD_mpiposix_fapl_t	*new_fa = NULL;
+    int		mpi_code;	/* MPI return code */
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_fapl_copy, NULL)
+
+    if (NULL==(new_fa=H5MM_malloc(sizeof(H5FD_mpiposix_fapl_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    /* Copy the general information */
+    HDmemcpy(new_fa, old_fa, sizeof(H5FD_mpiposix_fapl_t));
+
+    /* Duplicate communicator. */
+    if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(old_fa->comm, &new_fa->comm)))
+	HMPI_GOTO_ERROR(NULL, "MPI_Comm_dup failed", mpi_code)
+
+    new_fa->use_gpfs = old_fa->use_gpfs;
+    ret_value = new_fa;
+
+done:
+    if (NULL == ret_value){
+	/* cleanup */
+	if (new_fa)
+	    H5MM_xfree(new_fa);
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_fapl_copy() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_fapl_free
+ *
+ * Purpose:	Frees the mpiposix-specific file access properties.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Albert Cheng
+ *              Apr 24, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpiposix_fapl_free(void *_fa)
+{
+    herr_t		ret_value = SUCCEED;
+    H5FD_mpiposix_fapl_t	*fa = (H5FD_mpiposix_fapl_t*)_fa;
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_fapl_free, FAIL)
+    assert(fa);
+
+    /* Free the internal communicator */
+    assert(MPI_COMM_NULL!=fa->comm);
+    MPI_Comm_free(&fa->comm);
+    H5MM_xfree(fa);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_fapl_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_mpiposix_open
+ *
+ * Purpose:     Opens a file with name NAME.  The FLAGS are a bit field with
+ *		purpose similar to the second argument of open(2) and which
+ *		are defined in H5Fpublic.h. The file access property list
+ *		FAPL_ID contains the properties driver properties and MAXADDR
+ *		is the largest address which this file will be expected to
+ *		access.  This is collective.
+ *
+ * Return:      Success:        A new file pointer.
+ *              Failure:        NULL
+ *
+ * Programmer:  Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ * 		Albert Cheng, 2003-04-24
+ * 		Duplicate the communicator so that file is insulated from the
+ * 		old one.
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5FD_t *
+H5FD_mpiposix_open(const char *name, unsigned flags, hid_t fapl_id,
+	       haddr_t maxaddr)
+{
+    H5FD_mpiposix_t		*file=NULL;     /* New MPIPOSIX file struct */
+    int                         o_flags;        /* Flags for file open call */
+    int			        fd=(-1);        /* File handle for file opened */
+    int				mpi_rank;       /* MPI rank of this process */
+    int				mpi_size;       /* Total number of MPI processes */
+    int				mpi_code;	/* mpi return code */
+    const H5FD_mpiposix_fapl_t	*fa=NULL;       /* MPIPOSIX file access property list information */
+    H5FD_mpiposix_fapl_t	_fa;            /* Private copy of default file access property list information */
+    H5P_genplist_t              *plist;         /* Property list pointer */
+    h5_stat_t                   sb;             /* Portable 'stat' struct */
+#ifdef WIN32
+    HFILE filehandle;
+    struct _BY_HANDLE_FILE_INFORMATION fileinfo;
+    int results;
+#endif
+    H5FD_t                     *ret_value=NULL; /* Return value */
+    MPI_Comm                    comm_dup=MPI_COMM_NULL;
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_open, NULL)
+
+    /* Check arguments */
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid file name")
+    if (0==maxaddr || HADDR_UNDEF==maxaddr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr")
+    if (ADDR_OVERFLOW(maxaddr))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, NULL, "bogus maxaddr")
+
+    /* Obtain a pointer to mpiposix-specific file access properties */
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+    if (H5P_FILE_ACCESS_DEFAULT==fapl_id || H5FD_MPIPOSIX!=H5P_get_driver(plist)) {
+	_fa.comm = MPI_COMM_SELF; /*default*/
+        _fa.use_gpfs = FALSE;
+	fa = &_fa;
+    } /* end if */
+    else {
+	fa = H5P_get_driver_info(plist);
+	assert(fa);
+    } /* end else */
+
+    /* Duplicate the communicator for use by this file. */
+    if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(fa->comm, &comm_dup)))
+	HMPI_GOTO_ERROR(NULL, "MPI_Comm_dup failed", mpi_code)
+
+    /* Get the MPI rank of this process and the total number of processes */
+    if (MPI_SUCCESS != (mpi_code=MPI_Comm_rank (comm_dup, &mpi_rank)))
+        HMPI_GOTO_ERROR(NULL, "MPI_Comm_rank failed", mpi_code)
+    if (MPI_SUCCESS != (mpi_code=MPI_Comm_size (comm_dup, &mpi_size)))
+        HMPI_GOTO_ERROR(NULL, "MPI_Comm_size failed", mpi_code)
+
+    /* Build the open flags */
+    o_flags = (H5F_ACC_RDWR & flags) ? O_RDWR : O_RDONLY;
+
+    /* Only set the creation flag(s) for process 0 */
+    if(mpi_rank==0) {
+        if (H5F_ACC_TRUNC & flags)
+            o_flags |= O_TRUNC;
+        if (H5F_ACC_CREAT & flags)
+            o_flags |= O_CREAT;
+        if (H5F_ACC_EXCL & flags)
+            o_flags |= O_EXCL;
+    } /* end if */
+
+    /* Process 0 opens (or creates) the file while the rest of the
+     * processes wait.  Then process 0 signals the other processes and they
+     * open (never create) the file and all processes proceed.
+     */
+    /* Process 0 opens (or creates) file and broadcasts result to other processes */
+    if(mpi_rank==0) {
+        /* Open the file */
+        fd=HDopen(name, o_flags, 0666);
+    } /* end if */
+
+    /* Broadcast the results of the open() from process 0 */
+    /* This is necessary because of the "tentative open" code in H5F_open()
+     * where the file is attempted to be opened with different flags from the
+     * user's, in order to check for the file's existence, etc.  Here, process 0
+     * gets different flags from the other processes (since it is in charge of
+     * creating the file, if necessary) and can fail in situations where the
+     * other process's file opens would succeed, so allow the other processes
+     * to check for that situation and bail out now also. - QAK
+     */
+    if (MPI_SUCCESS != (mpi_code= MPI_Bcast(&fd, sizeof(int), MPI_BYTE, 0, comm_dup)))
+        HMPI_GOTO_ERROR(NULL, "MPI_Bcast failed", mpi_code)
+
+    /* If the file open on process 0 failed, bail out on all processes now */
+    if(fd<0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file")
+
+    /* Other processes (non 0) wait for broadcast result from process 0 and then open file */
+    if(mpi_rank!=0) {
+        /* Open the file */
+        if ((fd=HDopen(name, o_flags, 0666))<0)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file")
+    } /* end if */
+
+    /* Process 0 fstat()s the file and broadcasts the results to the other processes */
+    if(mpi_rank==0) {
+        /* Get the stat information */
+        if (HDfstat(fd, &sb)<0)
+            HGOTO_ERROR(H5E_FILE, H5E_BADFILE, NULL, "unable to fstat file")
+    } /* end if */
+
+    /* Broadcast the results of the fstat() from process 0 */
+    if (MPI_SUCCESS != (mpi_code= MPI_Bcast(&sb, sizeof(h5_stat_t), MPI_BYTE, 0, comm_dup)))
+        HMPI_GOTO_ERROR(NULL, "MPI_Bcast failed", mpi_code)
+
+#ifdef H5_HAVE_GPFS
+    if (fa->use_gpfs) {
+        /*
+         * Free all byte range tokens. This is a good thing to do if raw data is aligned on 256kB boundaries (a GPFS page is
+         * 256kB). Care should be taken that there aren't too many sub-page writes, or the mmfsd may become overwhelmed.  This
+         * should probably eventually be passed down here as a property. The gpfs_fcntl() will most likely fail if `fd' isn't
+         * on a GPFS file system. */
+        struct {
+            gpfsFcntlHeader_t   hdr;
+            gpfsFreeRange_t     fr;
+        } hint;
+        HDmemset(&hint, 0, sizeof hint);
+        hint.hdr.totalLength = sizeof hint;
+        hint.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
+        hint.fr.structLen = sizeof hint.fr;
+        hint.fr.structType = GPFS_FREE_RANGE;
+        hint.fr.start = 0;
+        hint.fr.length = 0;
+
+        if (gpfs_fcntl(fd, &hint)<0)
+            HGOTO_ERROR(H5E_FILE, H5E_FCNTL, NULL, "failed to send hints to GPFS")
+    }
+#endif  /* H5_HAVE_GPFS */
+
+    /* Build the file struct and initialize it */
+    if (NULL==(file=H5MM_calloc(sizeof(H5FD_mpiposix_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+#ifdef REPORT_IO
+    HDfprintf(stderr, "open:  rank=%d name=%s file=0x%08lx\n", mpi_rank, name, (unsigned long)file);
+#endif
+
+    /* Set the general file information */
+    file->fd = fd;
+    file->eof = sb.st_size;
+    file->blksize = sb.st_blksize;
+
+    /* Set this field in the H5FD_mpiposix_t struct for later use */
+    file->use_gpfs = fa->use_gpfs;
+
+    /* Set the MPI information */
+    file->comm = comm_dup;
+    file->mpi_rank = mpi_rank;
+    file->mpi_size = mpi_size;
+
+    /* Reset the last file I/O operation */
+    file->pos = HADDR_UNDEF;
+    file->op = OP_UNKNOWN;
+
+    /* Set the information for the file's device and inode */
+#ifdef WIN32
+    filehandle = _get_osfhandle(fd);
+    results = GetFileInformationByHandle((HANDLE)filehandle, &fileinfo);
+    file->fileindexhi = fileinfo.nFileIndexHigh;
+    file->fileindexlo = fileinfo.nFileIndexLow;
+#else
+    file->device = sb.st_dev;
+    file->inode = sb.st_ino;
+#endif
+
+    /* Indicate success */
+    ret_value=(H5FD_t *)file;
+
+done:
+    /* Error cleanup */
+    if(ret_value==NULL) {
+        /* Close the file if it was left open */
+        if(fd!=(-1))
+            HDclose(fd);
+	if (MPI_COMM_NULL != comm_dup)
+	    MPI_Comm_free(&comm_dup);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_open() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_mpiposix_close
+ *
+ * Purpose:     Closes a file.
+ *
+ * Return:      Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:  Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ * 		Albert Cheng, 2003-04-24
+ *		Free the communicator stored.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpiposix_close(H5FD_t *_file)
+{
+    H5FD_mpiposix_t	*file = (H5FD_mpiposix_t*)_file;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_close, FAIL)
+
+    assert(file);
+    assert(H5FD_MPIPOSIX==file->pub.driver_id);
+
+    /* Close the unix file */
+    if (HDclose(file->fd)<0)
+        HGOTO_ERROR(H5E_IO, H5E_CANTCLOSEFILE, FAIL, "unable to close file")
+
+    /* make sure all processes have closed the file before returning. */
+    MPI_Barrier(file->comm);
+    /* Clean up other stuff */
+    MPI_Comm_free(&file->comm);
+    H5MM_xfree(file);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_close() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_cmp
+ *
+ * Purpose:	Compares two files belonging to this driver using an
+ *		arbitrary (but consistent) ordering.
+ *
+ * Return:	Success:	A value like strcmp()
+ *		Failure:	never fails (arguments were checked by the
+ *				caller).
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5FD_mpiposix_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
+{
+    const H5FD_mpiposix_t	*f1 = (const H5FD_mpiposix_t*)_f1;
+    const H5FD_mpiposix_t	*f2 = (const H5FD_mpiposix_t*)_f2;
+    int ret_value=0;
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_cmp, H5FD_VFD_DEFAULT)
+
+#ifdef WIN32
+    if (f1->fileindexhi < f2->fileindexhi) HGOTO_DONE(-1)
+    if (f1->fileindexhi > f2->fileindexhi) HGOTO_DONE(1)
+
+    if (f1->fileindexlo < f2->fileindexlo) HGOTO_DONE(-1)
+    if (f1->fileindexlo > f2->fileindexlo) HGOTO_DONE(1)
+
+#else
+#ifdef H5_DEV_T_IS_SCALAR
+    if (f1->device < f2->device) HGOTO_DONE(-1)
+    if (f1->device > f2->device) HGOTO_DONE(1)
+#else /* H5_DEV_T_IS_SCALAR */
+    /* If dev_t isn't a scalar value on this system, just use memcmp to
+     * determine if the values are the same or not.  The actual return value
+     * shouldn't really matter...
+     */
+    if(HDmemcmp(&(f1->device),&(f2->device),sizeof(dev_t))<0) HGOTO_DONE(-1)
+    if(HDmemcmp(&(f1->device),&(f2->device),sizeof(dev_t))>0) HGOTO_DONE(1)
+#endif /* H5_DEV_T_IS_SCALAR */
+
+    if (f1->inode < f2->inode) HGOTO_DONE(-1)
+    if (f1->inode > f2->inode) HGOTO_DONE(1)
+#endif
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_cmp() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_query
+ *
+ * Purpose:	Set the flags that this VFL driver is capable of supporting.
+ *              (listed in H5FDpublic.h)
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpiposix_query(const H5FD_t UNUSED *_file, unsigned long *flags /* out */)
+{
+    herr_t ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_query, FAIL)
+
+    /* Set the VFL feature flags that this driver supports */
+    if(flags) {
+        *flags=0;
+        *flags|=H5FD_FEAT_AGGREGATE_METADATA; /* OK to aggregate metadata allocations */
+
+        /* Distinguish between updating the metadata accumulator on writes and
+         * reads.  This is particularly (perhaps only, even) important for MPI-I/O
+         * where we guarantee that writes are collective, but reads may not be.
+         * If we were to allow the metadata accumulator to be written during a
+         * read operation, the application would hang.
+         */
+        *flags|=H5FD_FEAT_ACCUMULATE_METADATA_WRITE; /* OK to accumulate metadata for faster writes */
+
+        *flags|=H5FD_FEAT_AGGREGATE_SMALLDATA; /* OK to aggregate "small" raw data allocations */
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_query() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_get_eoa
+ *
+ * Purpose:	Gets the end-of-address marker for the file. The EOA marker
+ *		is the first address past the last byte allocated in the
+ *		format address space.
+ *
+ * Return:	Success:	The end-of-address marker.
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_mpiposix_get_eoa(H5FD_t *_file)
+{
+    H5FD_mpiposix_t *file = (H5FD_mpiposix_t*)_file;
+    haddr_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_get_eoa, HADDR_UNDEF)
+
+    assert(file);
+    assert(H5FD_MPIPOSIX==file->pub.driver_id);
+
+    /* Set return value */
+    ret_value=file->eoa;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_get_eoa() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_set_eoa
+ *
+ * Purpose:	Set the end-of-address marker for the file. This function is
+ *		called shortly after an existing HDF5 file is opened in order
+ *		to tell the driver where the end of the HDF5 data is located.
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpiposix_set_eoa(H5FD_t *_file, haddr_t addr)
+{
+    H5FD_mpiposix_t	*file = (H5FD_mpiposix_t*)_file;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_set_eoa, FAIL)
+
+    assert(file);
+    assert(H5FD_MPIPOSIX==file->pub.driver_id);
+
+    file->eoa = addr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpi_posix_set_eoa() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_get_eof
+ *
+ * Purpose:	Gets the end-of-file marker for the file. The EOF marker
+ *		is the real size of the file.
+ *
+ *		The MPIPOSIX driver doesn't bother keeping this field updated
+ *		since that's a relatively expensive operation. Fortunately
+ *		the library only needs the EOF just after the file is opened
+ *		in order to determine whether the file is empty, truncated,
+ *		or okay.
+ *
+ * Return:	Success:	The end-of-address marker.
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_mpiposix_get_eof(H5FD_t *_file)
+{
+    H5FD_mpiposix_t	*file = (H5FD_mpiposix_t*)_file;
+    haddr_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_get_eof, HADDR_UNDEF)
+
+    assert(file);
+    assert(H5FD_MPIPOSIX==file->pub.driver_id);
+
+    /* Set return value */
+    ret_value=MAX(file->eof,file->eoa);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_get_eof() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5FD_mpiposix_get_handle
+ *
+ * Purpose:        Returns the file handle of MPI-POSIX file driver.
+ *
+ * Returns:        Non-negative if succeed or negative if fails.
+ *
+ * Programmer:     Raymond Lu
+ *                 Sept. 16, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpiposix_get_handle(H5FD_t *_file, hid_t UNUSED fapl, void** file_handle)
+{
+    H5FD_mpiposix_t       *file = (H5FD_mpiposix_t *)_file;
+    herr_t                ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_get_handle, FAIL)
+
+    if(!file_handle)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file handle not valid")
+
+    *file_handle = &(file->fd);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_read
+ *
+ * Purpose:	Reads SIZE bytes of data from FILE beginning at address ADDR
+ *		into buffer BUF according to data transfer properties in
+ *		DXPL_ID using potentially complex file and buffer types to
+ *		effect the transfer.
+ *
+ *		Reading past the end of the file returns zeros instead of
+ *		failing.
+ *
+ * Return:	Success:	Non-negative. Result is stored in caller-supplied
+ *				buffer BUF.
+ *		Failure:	Negative, Contents of buffer BUF are undefined.
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpiposix_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr, size_t size,
+	       void *buf/*out*/)
+{
+    H5FD_mpiposix_t	*file = (H5FD_mpiposix_t*)_file;
+    ssize_t	        nbytes;         /* Number of bytes read each I/O call */
+    herr_t             	ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_read, FAIL)
+
+    assert(file);
+    assert(H5FD_MPIPOSIX==file->pub.driver_id);
+    assert(buf);
+
+    /* Check for overflow conditions */
+    if (HADDR_UNDEF==addr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined")
+    if (REGION_OVERFLOW(addr, size))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
+    if (addr+size>file->eoa)
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
+
+#ifdef REPORT_IO
+    {
+        int commrank;
+        MPI_Comm_rank(MPI_COMM_WORLD, &commrank);
+        HDfprintf(stderr, "read:  rank=%d file=0x%08lx type=%d, addr=%a size=%Zu\n",
+                commrank, (unsigned long)file, (int)type, addr, size);
+    }
+#endif
+
+    /* Seek to the correct location */
+    if ((addr!=file->pos || OP_READ!=file->op) &&
+            file_seek(file->fd, (file_offset_t)addr, SEEK_SET)<0)
+        HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
+
+    /*
+     * Read data, being careful of interrupted system calls, partial results,
+     * and the end of the file.
+     */
+    while (size>0) {
+        do {
+            nbytes = HDread(file->fd, buf, size);
+        } while (-1==nbytes && EINTR==errno);
+        if (-1==nbytes)
+            HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed")
+        if (0==nbytes) {
+            /* end of file but not end of format address space */
+            HDmemset(buf, 0, size);
+            break;
+        } /* end if */
+        assert(nbytes>=0);
+        assert((size_t)nbytes<=size);
+        size -= nbytes;
+        addr += (haddr_t)nbytes;
+        buf = (char*)buf + nbytes;
+    }
+
+    /* Update current position */
+    file->pos = addr;
+    file->op = OP_READ;
+
+done:
+    /* Check for error */
+    if(ret_value<0) {
+        /* Reset last file I/O information */
+        file->pos = HADDR_UNDEF;
+        file->op = OP_UNKNOWN;
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_read() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_write
+ *
+ * Purpose:	Writes SIZE bytes of data to FILE beginning at address ADDR
+ *		from buffer BUF according to data transfer properties in
+ *		DXPL_ID using potentially complex file and buffer types to
+ *		effect the transfer.
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ *
+ *              Quincey Koziol - 2002/07/18
+ *              Added "block_before_meta_write" dataset transfer flag, which
+ *              is set during writes from a metadata cache flush and indicates
+ *              that all the processes must sync up before (one of them)
+ *              writing metadata.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpiposix_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
+		size_t size, const void *buf)
+{
+    H5FD_mpiposix_t	*file = (H5FD_mpiposix_t*)_file;
+    int			mpi_code;	/* MPI return code */
+    ssize_t	        nbytes;         /* Number of bytes written each I/O call */
+    H5P_genplist_t      *plist;         /* Property list pointer */
+    herr_t             	ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_write, FAIL)
+
+    assert(file);
+    assert(H5FD_MPIPOSIX==file->pub.driver_id);
+    assert(H5I_GENPROP_LST==H5I_get_type(dxpl_id));
+    assert(TRUE==H5P_isa_class(dxpl_id,H5P_DATASET_XFER));
+    assert(buf);
+
+    /* Check for overflow conditions */
+    if (HADDR_UNDEF==addr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined")
+    if (REGION_OVERFLOW(addr, size))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
+    if (addr+size>file->eoa)
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
+
+    /* Obtain the data transfer properties */
+    if(NULL == (plist = H5I_object(dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+
+    /* Metadata specific actions */
+    if(type!=H5FD_MEM_DRAW) {
+        unsigned		block_before_meta_write=0;      /* Whether to block before a metadata write */
+
+        /* Check if we need to syncronize all processes before attempting metadata write
+         * (Prevents race condition where the process writing the metadata goes ahead
+         * and writes the metadata to the file before all the processes have
+         * read the data, "transmitting" data from the "future" to the reading
+         * process. -QAK )
+         *
+         * The only time we don't want to block before a metadata write is when
+         * we are flushing out a bunch of metadata.  Then, we block before the
+         * first write and don't block for further writes in the sequence.
+         */
+        if(H5P_exist_plist(plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME)>0)
+            if(H5P_get(plist,H5AC_BLOCK_BEFORE_META_WRITE_NAME,&block_before_meta_write)<0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get H5AC property")
+
+        if(block_before_meta_write)
+            if (MPI_SUCCESS!= (mpi_code=MPI_Barrier(file->comm)))
+                HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code)
+
+        /* Only one process will do the actual write if all procs in comm write same metadata */
+        if (file->mpi_rank != H5_PAR_META_WRITE)
+            HGOTO_DONE(SUCCEED) /* skip the actual write */
+    } /* end if */
+
+#ifdef REPORT_IO
+    {
+        int commrank;
+        MPI_Comm_rank(MPI_COMM_WORLD, &commrank);
+        HDfprintf(stderr, "write: rank=%d file=0x%08lx type=%d, addr=%a size=%Zu %s\n",
+                commrank, (unsigned long)file, (int)type, addr, size,
+                0==file->naccess?"(FIRST ACCESS)":"");
+    }
+#endif
+
+    if (0==file->naccess++) {
+        /* First write access to this file */
+#ifdef H5_HAVE_GPFS
+        if (file->use_gpfs) {
+            struct {
+                gpfsFcntlHeader_t           hdr;
+                gpfsMultipleAccessRange_t   mar;
+            } hint;
+            HDmemset(&hint, 0, sizeof hint);
+            hint.hdr.totalLength = sizeof hint;
+            hint.hdr.fcntlVersion = GPFS_FCNTL_CURRENT_VERSION;
+            hint.mar.structLen = sizeof hint.mar;
+            hint.mar.structType = GPFS_MULTIPLE_ACCESS_RANGE;
+            hint.mar.accRangeCnt = 1;
+            hint.mar.accRangeArray[0].blockNumber = addr / file->blksize;
+            hint.mar.accRangeArray[0].start = addr % file->blksize;
+            hint.mar.accRangeArray[0].length = MIN(file->blksize-hint.mar.accRangeArray[0].start, size);
+            hint.mar.accRangeArray[0].isWrite = 1;
+            if (gpfs_fcntl(file->fd, &hint)<0)
+                HGOTO_ERROR(H5E_FILE, H5E_FCNTL, NULL, "failed to send hints to GPFS")
+        }
+#endif  /* H5_HAVE_GPFS */
+    }
+
+    /* Seek to the correct location */
+    if ((addr!=file->pos || OP_WRITE!=file->op) &&
+            file_seek(file->fd, (file_offset_t)addr, SEEK_SET)<0)
+        HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
+
+    /*
+     * Write the data, being careful of interrupted system calls and partial
+     * results
+     */
+    while (size>0) {
+        do {
+            nbytes = HDwrite(file->fd, buf, size);
+        } while (-1==nbytes && EINTR==errno);
+        if (-1==nbytes)
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
+        assert(nbytes>0);
+        assert((size_t)nbytes<=size);
+        size -= nbytes;
+        addr += (haddr_t)nbytes;
+        buf = (const char*)buf + nbytes;
+    } /* end while */
+
+    /* Update current last file I/O information */
+    file->pos = addr;
+    file->op = OP_WRITE;
+
+done:
+    /* Check for error */
+    if(ret_value<0) {
+        /* Reset last file I/O information */
+        file->pos = HADDR_UNDEF;
+        file->op = OP_UNKNOWN;
+    } /* end if */
+    /* Guard against getting into metadata broadcast in failure cases */
+    else {
+        /* when only one process writes, need to broadcast the ret_value to other processes */
+        if (type!=H5FD_MEM_DRAW) {
+            if (MPI_SUCCESS != (mpi_code= MPI_Bcast(&ret_value, sizeof(ret_value), MPI_BYTE, H5_PAR_META_WRITE, file->comm)))
+                HMPI_GOTO_ERROR(FAIL, "MPI_Bcast failed", mpi_code)
+        } /* end if */
+    } /* end else */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_write() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_mpiposix_flush
+ *
+ * Purpose:     Makes sure that all data is on disk.  This is collective.
+ *
+ * Return:      Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:  Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_mpiposix_flush(H5FD_t *_file, hid_t UNUSED dxpl_id, unsigned UNUSED closing)
+{
+    H5FD_mpiposix_t	*file = (H5FD_mpiposix_t*)_file;
+#ifdef WIN32
+    HFILE filehandle;   /* Windows file handle */
+    LARGE_INTEGER li;   /* 64-bit integer for SetFilePointer() call */
+#endif /* WIN32 */
+    int			mpi_code;	/* MPI return code */
+    herr_t              ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_flush, FAIL)
+
+    assert(file);
+    assert(H5FD_MPIPOSIX==file->pub.driver_id);
+
+    /* Extend the file to make sure it's large enough */
+    if(file->eoa>file->last_eoa) {
+        /* Use the round-robin process to truncate (extend) the file */
+        if(file->mpi_rank == H5_PAR_META_WRITE) {
+#ifdef WIN32
+            /* Map the posix file handle to a Windows file handle */
+            filehandle = _get_osfhandle(fd);
+
+            /* Translate 64-bit integers into form Windows wants */
+            /* [This algorithm is from the Windows documentation for SetFilePointer()] */
+            li.QuadPart = file->eoa;
+            SetFilePointer((HANDLE)filehandle,li.LowPart,&li.HighPart,FILE_BEGIN);
+            if(SetEndOfFile((HANDLE)filehandle)==0)
+                HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
+#else /* WIN32 */
+            if(-1==file_truncate(file->fd, (file_offset_t)file->eoa))
+                HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
+#endif /* WIN32 */
+        } /* end if */
+
+        /* Don't let any proc return until all have extended the file.
+         * (Prevents race condition where some processes go ahead and write
+         * more data to the file before all the processes have finished making
+         * it the shorter length, potentially truncating the file and dropping
+         * the new data written)
+         */
+        if (MPI_SUCCESS!= (mpi_code=MPI_Barrier(file->comm)))
+            HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code)
+
+        /* Update the 'last' eoa and eof values */
+        file->last_eoa=file->eoa;
+        file->eof = file->eoa;
+
+        /* Reset last file I/O information */
+        file->pos = HADDR_UNDEF;
+        file->op = OP_UNKNOWN;
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_flush() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_mpi_rank
+ *
+ * Purpose:	Returns the MPI rank for a process
+ *
+ * Return:	Success: non-negative
+ *		Failure: negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5FD_mpiposix_mpi_rank(const H5FD_t *_file)
+{
+    const H5FD_mpiposix_t *file = (const H5FD_mpiposix_t*)_file;
+    int ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_mpi_rank, FAIL)
+
+    assert(file);
+    assert(H5FD_MPIPOSIX==file->pub.driver_id);
+
+    /* Set return value */
+    ret_value=file->mpi_rank;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_mpi_rank() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_mpi_size
+ *
+ * Purpose:	Returns the number of MPI processes
+ *
+ * Return:	Success: non-negative
+ *		Failure: negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5FD_mpiposix_mpi_size(const H5FD_t *_file)
+{
+    const H5FD_mpiposix_t *file = (const H5FD_mpiposix_t*)_file;
+    int ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_mpi_size, FAIL)
+
+    assert(file);
+    assert(H5FD_MPIPOSIX==file->pub.driver_id);
+
+    /* Set return value */
+    ret_value=file->mpi_size;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpiposix_mpi_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_mpiposix_communicator
+ *
+ * Purpose:	Returns the MPI communicator for the file.
+ *
+ * Return:	Success:	The communicator
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 11, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static MPI_Comm
+H5FD_mpiposix_communicator(const H5FD_t *_file)
+{
+    const H5FD_mpiposix_t *file = (const H5FD_mpiposix_t*)_file;
+    MPI_Comm ret_value;         /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_mpiposix_communicator, MPI_COMM_NULL)
+
+    assert(file);
+    assert(H5FD_MPIPOSIX==file->pub.driver_id);
+
+    /* Set return value */
+    ret_value=file->comm;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FD_mpi_posix_communicator() */
+
+#endif /*H5_HAVE_PARALLEL*/
+

Added: packages/hdf5/branches/upstream/current/src/H5FDmpiposix.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDmpiposix.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDmpiposix.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,61 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Thursday, July 11, 2002
+ *
+ * Purpose:	The public header file for the mpiposix driver.
+ */
+
+#ifndef __H5FDmpiposix_H
+#define __H5FDmpiposix_H
+
+#ifdef H5_HAVE_PARALLEL
+#   define H5FD_MPIPOSIX	(H5FD_mpiposix_init())
+#else
+#   define H5FD_MPIPOSIX	(-1)
+#endif
+
+/* Macros */
+
+#define IS_H5FD_MPIPOSIX(f)	/* (H5F_t *f) */				    \
+    (H5FD_MPIPOSIX==H5F_get_driver_id(f))
+
+#ifdef H5_HAVE_PARALLEL
+
+/* Function prototypes */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_DLL hid_t H5FD_mpiposix_init(void);
+H5_DLL void H5FD_mpiposix_term(void);
+#ifdef H5_WANT_H5_V1_4_COMPAT
+H5_DLL herr_t H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm);
+H5_DLL herr_t H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+H5_DLL herr_t H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm, hbool_t use_gpfs);
+H5_DLL herr_t H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/, hbool_t *use_gpfs/*out*/);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*H5_HAVE_PARALLEL*/
+
+#endif /* __H5FDmpiposix_H */
+
+

Added: packages/hdf5/branches/upstream/current/src/H5FDmulti.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDmulti.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDmulti.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1964 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Robb Matzke <matzke at llnl.gov>
+ *		Monday, November 10, 1997
+ *
+ * Purpose:	Implements a file driver which dispatches I/O requests to
+ *		other file drivers depending on the purpose of the address
+ *		region being accessed. For instance, all meta-data could be
+ *		place in one file while all raw data goes to some other file.
+ *		This also serves as an example of coding a complex file driver,
+ *		therefore, it should not use any non-public definitions.
+ */
+#include <assert.h>
+#include <stdlib.h>
+
+/* Disable certain warnings in PC-Lint: */
+/*lint --emacro( {534, 830}, H5P_DEFAULT, H5P_FILE_ACCESS, H5P_DATASET_XFER) */
+/*lint --emacro( {534, 830}, H5F_ACC_DEBUG, H5F_ACC_RDWR) */
+/*lint --emacro( {534, 830}, H5FD_MULTI) */
+/*lint -esym( 534, H5Eclear, H5Epush) */
+
+#include "hdf5.h"
+
+/*
+ * Define H5FD_MULTI_DEBUG if you want the ability to print debugging
+ * messages to the standard error stream. Messages are only printed if the
+ * file is opened with the H5F_ACC_DEBUG flag.
+ */
+#define H5FD_MULTI_DEBUG
+
+/* Our version of MAX */
+#undef MAX
+#define MAX(X,Y)	((X)>(Y)?(X):(Y))
+
+#ifndef FALSE
+#define FALSE		0
+#endif
+#ifndef TRUE
+#define TRUE		1
+#endif
+
+/* Loop through all mapped files */
+#define UNIQUE_MEMBERS(MAP,LOOPVAR) {					      \
+    H5FD_mem_t _unmapped, LOOPVAR;					      \
+    hbool_t _seen[H5FD_MEM_NTYPES];					      \
+									      \
+    memset(_seen, 0, sizeof _seen);					      \
+    for (_unmapped=H5FD_MEM_SUPER; _unmapped<H5FD_MEM_NTYPES; _unmapped=(H5FD_mem_t)(_unmapped+1)) {  \
+	LOOPVAR = MAP[_unmapped];					      \
+	if (H5FD_MEM_DEFAULT==LOOPVAR) LOOPVAR=_unmapped;		      \
+	assert(LOOPVAR>0 && LOOPVAR<H5FD_MEM_NTYPES);			      \
+	if (_seen[LOOPVAR]++) continue;
+
+#ifdef LATER
+#define MAPPED_MEMBERS(MAP,LOOPVAR) {					      \
+    H5FD_mem_t _unmapped, LOOPVAR;					      \
+									      \
+    for (_unmapped=H5FD_MEM_SUPER; _unmapped<H5FD_MEM_NTYPES; _unmapped=_unmapped+1) {  \
+	LOOPVAR = MAP[_unmapped];					      \
+	if (H5FD_MEM_DEFAULT==LOOPVAR) LOOPVAR=_unmapped;		      \
+	assert(LOOPVAR>0 && LOOPVAR<H5FD_MEM_NTYPES);
+#endif /* LATER */
+
+#define ALL_MEMBERS(LOOPVAR) {						      \
+    H5FD_mem_t LOOPVAR;							      \
+    for (LOOPVAR=H5FD_MEM_DEFAULT; LOOPVAR<H5FD_MEM_NTYPES; LOOPVAR=(H5FD_mem_t)(LOOPVAR+1)) {
+
+
+#define END_MEMBERS	}}
+
+
+/* The driver identification number, initialized at runtime */
+static hid_t H5FD_MULTI_g = 0;
+
+/* Driver-specific file access properties */
+typedef struct H5FD_multi_fapl_t {
+    H5FD_mem_t	memb_map[H5FD_MEM_NTYPES]; /*memory usage map		*/
+    hid_t	memb_fapl[H5FD_MEM_NTYPES];/*member access properties	*/
+    char	*memb_name[H5FD_MEM_NTYPES];/*name generators		*/
+    haddr_t	memb_addr[H5FD_MEM_NTYPES];/*starting addr per member	*/
+    hbool_t	relax;			/*less stringent error checking	*/
+} H5FD_multi_fapl_t;
+
+/*
+ * The description of a file belonging to this driver. The file access
+ * properties and member names do not have to be copied into this struct
+ * since they will be held open by the file access property list which is
+ * copied into the parent file struct in H5F_open().
+ */
+typedef struct H5FD_multi_t {
+    H5FD_t	pub;		/*public stuff, must be first		*/
+    H5FD_multi_fapl_t fa;	/*driver-specific file access properties*/
+    haddr_t	memb_next[H5FD_MEM_NTYPES];/*addr of next member	*/
+    H5FD_t	*memb[H5FD_MEM_NTYPES];	/*member pointers		*/
+    haddr_t	eoa;		/*end of allocated addresses		*/
+    unsigned	flags;		/*file open flags saved for debugging	*/
+    char	*name;		/*name passed to H5Fopen or H5Fcreate	*/
+} H5FD_multi_t;
+
+/* Driver specific data transfer properties */
+typedef struct H5FD_multi_dxpl_t {
+    hid_t	memb_dxpl[H5FD_MEM_NTYPES];/*member data xfer properties*/
+} H5FD_multi_dxpl_t;
+
+/* Private functions */
+static char *my_strdup(const char *s);
+static int compute_next(H5FD_multi_t *file);
+static int open_members(H5FD_multi_t *file);
+
+/* Callback prototypes */
+static hsize_t H5FD_multi_sb_size(H5FD_t *file);
+static herr_t H5FD_multi_sb_encode(H5FD_t *file, char *name/*out*/,
+				   unsigned char *buf/*out*/);
+static herr_t H5FD_multi_sb_decode(H5FD_t *file, const char *name,
+				   const unsigned char *buf);
+static void *H5FD_multi_fapl_get(H5FD_t *file);
+static void *H5FD_multi_fapl_copy(const void *_old_fa);
+static herr_t H5FD_multi_fapl_free(void *_fa);
+static void *H5FD_multi_dxpl_copy(const void *_old_dx);
+static herr_t H5FD_multi_dxpl_free(void *_dx);
+static H5FD_t *H5FD_multi_open(const char *name, unsigned flags,
+			       hid_t fapl_id, haddr_t maxaddr);
+static herr_t H5FD_multi_close(H5FD_t *_file);
+static int H5FD_multi_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
+static herr_t H5FD_multi_query(const H5FD_t *_f1, unsigned long *flags);
+static haddr_t H5FD_multi_get_eoa(H5FD_t *_file);
+static herr_t H5FD_multi_set_eoa(H5FD_t *_file, haddr_t eoa);
+static haddr_t H5FD_multi_get_eof(H5FD_t *_file);
+static herr_t  H5FD_multi_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
+static haddr_t H5FD_multi_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+static herr_t H5FD_multi_free(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
+			      hsize_t size);
+static herr_t H5FD_multi_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
+			      size_t size, void *_buf/*out*/);
+static herr_t H5FD_multi_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
+			       size_t size, const void *_buf);
+static herr_t H5FD_multi_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
+
+/* The class struct */
+static const H5FD_class_t H5FD_multi_g = {
+    "multi",					/*name			*/
+    HADDR_MAX,					/*maxaddr		*/
+    H5F_CLOSE_WEAK,				/* fc_degree		*/
+    H5FD_multi_sb_size,				/*sb_size		*/
+    H5FD_multi_sb_encode,			/*sb_encode		*/
+    H5FD_multi_sb_decode,			/*sb_decode		*/
+    sizeof(H5FD_multi_fapl_t),			/*fapl_size		*/
+    H5FD_multi_fapl_get,			/*fapl_get		*/
+    H5FD_multi_fapl_copy,			/*fapl_copy		*/
+    H5FD_multi_fapl_free,			/*fapl_free		*/
+    sizeof(H5FD_multi_dxpl_t),			/*dxpl_size		*/
+    H5FD_multi_dxpl_copy,			/*dxpl_copy		*/
+    H5FD_multi_dxpl_free,			/*dxpl_free		*/
+    H5FD_multi_open,				/*open			*/
+    H5FD_multi_close,				/*close			*/
+    H5FD_multi_cmp,				/*cmp			*/
+    H5FD_multi_query,				/*query			*/
+    H5FD_multi_alloc,				/*alloc			*/
+    H5FD_multi_free,				/*free			*/
+    H5FD_multi_get_eoa,				/*get_eoa		*/
+    H5FD_multi_set_eoa,				/*set_eoa		*/
+    H5FD_multi_get_eof,				/*get_eof		*/
+    H5FD_multi_get_handle,                      /*get_handle            */
+    H5FD_multi_read,				/*read			*/
+    H5FD_multi_write,				/*write			*/
+    H5FD_multi_flush,				/*flush			*/
+    NULL,                                       /*lock                  */
+    NULL,                                       /*unlock                */
+    H5FD_FLMAP_DEFAULT 				/*fl_map		*/
+};
+
+
+/*-------------------------------------------------------------------------
+ * Function:	my_strdup
+ *
+ * Purpose:	Private version of strdup()
+ *
+ * Return:	Success:	Ptr to new copy of string
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, August 13, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static char *
+my_strdup(const char *s)
+{
+    char *x;
+    if (!s) return NULL;
+    if (NULL==(x=malloc(strlen(s)+1))) return NULL;
+    strcpy(x, s);
+    return x;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_init
+ *
+ * Purpose:	Initialize this driver by registering the driver with the
+ *		library.
+ *
+ * Return:	Success:	The driver ID for the multi driver.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5FD_multi_init(void)
+{
+    /* Clear the error stack */
+    H5Eclear();
+
+    if (H5I_VFL!=H5Iget_type(H5FD_MULTI_g)) {
+	H5FD_MULTI_g = H5FDregister(&H5FD_multi_g);
+    }
+    return H5FD_MULTI_g;
+}
+
+
+/*---------------------------------------------------------------------------
+ * Function:	H5FD_multi_term
+ *
+ * Purpose:	Shut down the VFD
+ *
+ * Return:	<none>
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, Jan 30, 2004
+ *
+ * Modification:
+ *
+ *---------------------------------------------------------------------------
+ */
+void
+H5FD_multi_term(void)
+{
+    /* Reset VFL ID */
+    H5FD_MULTI_g=0;
+
+} /* end H5FD_multi_term() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_fapl_split
+ *
+ * Purpose:	Compatability function. Makes the multi driver act like the
+ *		old split driver which stored meta data in one file and raw
+ *		data in another file.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August 11, 1999
+ *
+ * Modifications:
+ *	Albert Cheng, Sep 17, 2001
+ *	Added feature that if the raw or meta extension string contains
+ *	a "%s", it will be substituted by the filename given for H5Fopen
+ *	or H5Fcreate.  This is same as the multi-file syntax.  If no %s
+ *	is found, one is inserted at the beginning.  This is the previous
+ *	behavior.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fapl_split(hid_t fapl, const char *meta_ext, hid_t meta_plist_id,
+		  const char *raw_ext, hid_t raw_plist_id)
+{
+    H5FD_mem_t		mt, memb_map[H5FD_MEM_NTYPES];
+    hid_t		memb_fapl[H5FD_MEM_NTYPES];
+    const char		*memb_name[H5FD_MEM_NTYPES];
+    char		meta_name[1024], raw_name[1024];
+    haddr_t		memb_addr[H5FD_MEM_NTYPES];
+
+    /*NO TRACE*/
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Initialize */
+    for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+	memb_map[mt] = (H5FD_MEM_DRAW==mt?mt:H5FD_MEM_SUPER);
+	memb_fapl[mt] = -1;
+	memb_name[mt] = NULL;
+	memb_addr[mt] = HADDR_UNDEF;
+    }
+
+    /* The file access properties */
+    memb_fapl[H5FD_MEM_SUPER] = meta_plist_id;
+    memb_fapl[H5FD_MEM_DRAW] = raw_plist_id;
+
+    /* The names */
+    /* process meta filename */
+    if (meta_ext){
+	if (strstr(meta_ext, "%s"))
+	    strcpy(meta_name, meta_ext);
+	else
+	    sprintf(meta_name, "%%s%s", meta_ext);
+    }
+    else
+	strcpy(meta_name, "%s.meta");
+    memb_name[H5FD_MEM_SUPER] = meta_name;
+
+    /* process raw filename */
+    if (raw_ext){
+	if (strstr(raw_ext, "%s"))
+	    strcpy(raw_name, raw_ext);
+	else
+	    sprintf(raw_name, "%%s%s", raw_ext);
+    }
+    else
+	strcpy(raw_name, "%s.raw");
+    memb_name[H5FD_MEM_DRAW] = raw_name;
+
+    /* The sizes */
+    memb_addr[H5FD_MEM_SUPER] = 0;
+    memb_addr[H5FD_MEM_DRAW] = HADDR_MAX/2;
+
+    return H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name, memb_addr, TRUE);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_fapl_multi
+ *
+ * Purpose:	Sets the file access property list FAPL_ID to use the multi
+ *		driver. The MEMB_MAP array maps memory usage types to other
+ *		memory usage types and is the mechanism which allows the
+ *		caller to specify how many files are created. The array
+ *		contains H5FD_MEM_NTYPES entries which are either the value
+ *		H5FD_MEM_DEFAULT or a memory usage type and the number of
+ *		unique values determines the number of files which are
+ *		opened.  For each memory usage type which will be associated
+ *		with a file the MEMB_FAPL array should have a property list
+ *		and the MEMB_NAME array should be a name generator (a
+ *		printf-style format with a %s which will be replaced with the
+ *		name passed to H5FDopen(), usually from H5Fcreate() or
+ *		H5Fopen()).
+ *
+ *		If RELAX is set then opening an existing file for read-only
+ *		access will not fail if some file members are missing.  This
+ *		allows a file to be accessed in a limited sense if just the
+ *		meta data is available.
+ *
+ * Defaults:	Default values for each of the optional arguments are:
+ *
+ *		memb_map:	The default member map has the value
+ *				H5FD_MEM_DEFAULT for each element.
+ *
+ * 		memb_fapl:	The value H5P_DEFAULT for each element.
+ *
+ *		memb_name:	The string `%s-X.h5' where `X' is one of the
+ *				letters `s' (H5FD_MEM_SUPER),
+ *				`b' (H5FD_MEM_BTREE), `r' (H5FD_MEM_DRAW),
+ * 				`g' (H5FD_MEM_GHEAP), 'l' (H5FD_MEM_LHEAP),
+ * 				`o' (H5FD_MEM_OHDR).
+ *
+ * 		memb_addr:	The value HADDR_UNDEF for each element.
+ *
+ *
+ * Example:	To set up a multi file access property list which partitions
+ *		data into meta and raw files each being 1/2 of the address
+ *		space one would say:
+ *
+ * 		    H5FD_mem_t mt, memb_map[H5FD_MEM_NTYPES];
+ *		    hid_t memb_fapl[H5FD_MEM_NTYPES];
+ *		    const char *memb[H5FD_MEM_NTYPES];
+ *		    haddr_t memb_addr[H5FD_MEM_NTYPES];
+ *
+ * 		    // The mapping...
+ * 		    for (mt=0; mt<H5FD_MEM_NTYPES; mt++) {
+ *		        memb_map[mt] = H5FD_MEM_SUPER;
+ *		    }
+ * 		    memb_map[H5FD_MEM_DRAW] = H5FD_MEM_DRAW;
+ *
+ * 		    // Member information
+ * 		    memb_fapl[H5FD_MEM_SUPER] = H5P_DEFAULT;
+ *		    memb_name[H5FD_MEM_SUPER] = "%s.meta";
+ *		    memb_addr[H5FD_MEM_SUPER] = 0;
+ *
+ *		    memb_fapl[H5FD_MEM_DRAW] = H5P_DEFAULT;
+ *		    memb_name[H5FD_MEM_DRAW] = "%s.raw";
+ *		    memb_addr[H5FD_MEM_DRAW] = HADDR_MAX/2;
+ *
+ * 		    hid_t fapl = H5Pcreate(H5P_FILE_ACCESS);
+ *		    H5Pset_fapl_multi(fapl, memb_map, memb_fapl,
+ *		                      memb_name, memb_addr, TRUE);
+ *
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *		Raymond Lu, 2001-10-25
+ *		Use new generic property list for argument checking.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fapl_multi(hid_t fapl_id, const H5FD_mem_t *memb_map,
+		  const hid_t *memb_fapl, const char * const *memb_name,
+		  const haddr_t *memb_addr, hbool_t relax)
+{
+    H5FD_multi_fapl_t	fa;
+    H5FD_mem_t		mt, mmt;
+    H5FD_mem_t		_memb_map[H5FD_MEM_NTYPES];
+    hid_t		_memb_fapl[H5FD_MEM_NTYPES];
+    char		_memb_name[H5FD_MEM_NTYPES][16];
+    const char		*_memb_name_ptrs[H5FD_MEM_NTYPES];
+    haddr_t		_memb_addr[H5FD_MEM_NTYPES];
+    static const char	*letters = "Xsbrglo";
+    static const char *func="H5FDset_fapl_multi";  /* Function Name for error reporting */
+
+    /*NO TRACE*/
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Check arguments and supply default values */
+    if(H5I_GENPROP_LST != H5Iget_type(fapl_id) ||
+            TRUE != H5Pisa_class(fapl_id, H5P_FILE_ACCESS))
+        H5Epush_ret(func, H5E_PLIST, H5E_BADVALUE, "not an access list", -1)
+    if (!memb_map) {
+	for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1))
+	    _memb_map[mt] = H5FD_MEM_DEFAULT;
+	memb_map = _memb_map;
+    }
+    if (!memb_fapl) {
+	for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1))
+	    _memb_fapl[mt] = H5Pcreate(H5P_FILE_ACCESS);
+	memb_fapl = _memb_fapl;
+    }
+    if (!memb_name) {
+	assert(strlen(letters)==H5FD_MEM_NTYPES);
+	for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+	    sprintf(_memb_name[mt], "%%s-%c.h5", letters[mt]);
+	    _memb_name_ptrs[mt] = _memb_name[mt];
+	}
+	memb_name = _memb_name_ptrs;
+    }
+    if (!memb_addr) {
+	for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1))
+	    _memb_addr[mt] = (mt?mt-1:0) * HADDR_MAX/H5FD_MEM_NTYPES;
+	memb_addr = _memb_addr;
+    }
+
+    for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+	/* Map usage type */
+	mmt = memb_map[mt];
+	if (mmt<0 || mmt>=H5FD_MEM_NTYPES)
+            H5Epush_ret(func, H5E_INTERNAL, H5E_BADRANGE, "file resource type out of range", -1)
+	if (H5FD_MEM_DEFAULT==mmt) mmt = mt;
+
+	/*
+	 * All members of MEMB_FAPL must be either defaults or actual file
+	 * access property lists.
+	 */
+	if (H5P_DEFAULT!=memb_fapl[mmt] && TRUE!=H5Pisa_class(memb_fapl[mmt], H5P_FILE_ACCESS))
+            H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "file resource type incorrect", -1)
+
+	/* All names must be defined */
+	if (!memb_name[mmt] || !memb_name[mmt][0])
+            H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "file resource type not set", -1)
+    }
+
+    /*
+     * Initialize driver specific information. No need to copy it into the FA
+     * struct since all members will be copied by H5Pset_driver().
+     */
+    memcpy(fa.memb_map, memb_map, H5FD_MEM_NTYPES*sizeof(H5FD_mem_t));
+    memcpy(fa.memb_fapl, memb_fapl, H5FD_MEM_NTYPES*sizeof(hid_t));
+    memcpy(fa.memb_name, memb_name, H5FD_MEM_NTYPES*sizeof(char*));
+    memcpy(fa.memb_addr, memb_addr, H5FD_MEM_NTYPES*sizeof(haddr_t));
+    fa.relax = relax;
+
+    /* Patch up H5P_DEFAULT property lists for members */
+    for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+        if(fa.memb_fapl[mt]==H5P_DEFAULT)
+            fa.memb_fapl[mt] = H5Pcreate(H5P_FILE_ACCESS);
+    }
+    return H5Pset_driver(fapl_id, H5FD_MULTI, &fa);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_fapl_multi
+ *
+ * Purpose:	Returns information about the multi file access property
+ *		list though the function arguments which are the same as for
+ *		H5Pset_fapl_multi() above.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *              Raymond Lu, 2001-10-25
+ *              Use new generic property list for argument checking.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_fapl_multi(hid_t fapl_id, H5FD_mem_t *memb_map/*out*/,
+		  hid_t *memb_fapl/*out*/, char **memb_name/*out*/,
+		  haddr_t *memb_addr/*out*/, hbool_t *relax)
+{
+    H5FD_multi_fapl_t	*fa;
+    H5FD_mem_t		mt;
+    static const char *func="H5FDget_fapl_multi";  /* Function Name for error reporting */
+
+    /*NO TRACE*/
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    if(H5I_GENPROP_LST != H5Iget_type(fapl_id) ||
+            TRUE != H5Pisa_class(fapl_id, H5P_FILE_ACCESS))
+        H5Epush_ret(func, H5E_PLIST, H5E_BADTYPE, "not an access list", -1)
+    if (H5FD_MULTI!=H5Pget_driver(fapl_id))
+        H5Epush_ret(func, H5E_PLIST, H5E_BADVALUE, "incorrect VFL driver", -1)
+    if (NULL==(fa=H5Pget_driver_info(fapl_id)))
+        H5Epush_ret(func, H5E_PLIST, H5E_BADVALUE, "bad VFL driver info", -1)
+
+    if (memb_map)
+        memcpy(memb_map, fa->memb_map, H5FD_MEM_NTYPES*sizeof(H5FD_mem_t));
+    if (memb_fapl) {
+	for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+	    if (fa->memb_fapl[mt]>=0)
+		memb_fapl[mt] = H5Pcopy(fa->memb_fapl[mt]);
+	    else
+		memb_fapl[mt] = fa->memb_fapl[mt]; /*default or bad ID*/
+	}
+    }
+    if (memb_name) {
+	for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+	    if (fa->memb_name[mt]) {
+		memb_name[mt] = malloc(strlen(fa->memb_name[mt])+1);
+		strcpy(memb_name[mt], fa->memb_name[mt]);
+	    } else
+		memb_name[mt] = NULL;
+	}
+    }
+    if (memb_addr)
+	memcpy(memb_addr, fa->memb_addr, H5FD_MEM_NTYPES*sizeof(haddr_t));
+    if (relax)
+	*relax = fa->relax;
+
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_dxpl_multi
+ *
+ * Purpose:	Set the data transfer property list DXPL_ID to use the multi
+ *		driver with the specified data transfer properties for each
+ *		memory usage type MEMB_DXPL[] (after the usage map is
+ *		applied).
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, August 10, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_dxpl_multi(hid_t dxpl_id, const hid_t *memb_dxpl)
+{
+    H5FD_multi_dxpl_t	dx;
+    H5FD_mem_t		mt;
+    static const char *func="H5FDset_dxpl_multi";  /* Function Name for error reporting */
+
+    /*NO TRACE*/
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Check arguments */
+    if (TRUE!=H5Pisa_class(dxpl_id,  H5P_DATASET_XFER))
+        H5Epush_ret(func, H5E_PLIST, H5E_BADTYPE, "not a data transfer property list", -1)
+    if (!memb_dxpl)
+        H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "invalid pointer", -1)
+    for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+        if (memb_dxpl[mt]!=H5P_DEFAULT && TRUE!=H5Pisa_class(memb_dxpl[mt], H5P_DATASET_XFER))
+            H5Epush_ret(func, H5E_PLIST, H5E_BADTYPE, "not a data transfer property list", -1)
+    }
+
+    /* Initialize the data transfer property list */
+    memcpy(dx.memb_dxpl, memb_dxpl, H5FD_MEM_NTYPES*sizeof(hid_t));
+
+    /* Convert "generic" default property lists into default dataset transfer property lists */
+    for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+        if (dx.memb_dxpl[mt]==H5P_DEFAULT)
+            dx.memb_dxpl[mt]=H5P_DATASET_XFER_DEFAULT;
+    }
+
+    return H5Pset_driver(dxpl_id, H5FD_MULTI, &dx);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_dxpl_multi
+ *
+ * Purpose:	Returns information which was set with H5Pset_dxpl_multi()
+ *		above.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, August 10, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_dxpl_multi(hid_t dxpl_id, hid_t *memb_dxpl/*out*/)
+{
+    H5FD_multi_dxpl_t	*dx;
+    H5FD_mem_t		mt;
+    static const char *func="H5FDget_dxpl_multi";  /* Function Name for error reporting */
+
+    /*NO TRACE*/
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    if (TRUE!=H5Pisa_class(dxpl_id, H5P_DATASET_XFER))
+        H5Epush_ret(func, H5E_PLIST, H5E_BADTYPE, "not a file access property list", -1)
+    if (H5FD_MULTI!=H5Pget_driver(dxpl_id))
+        H5Epush_ret(func, H5E_PLIST, H5E_BADVALUE, "incorrect VFL driver", -1)
+    if (NULL==(dx=H5Pget_driver_info(dxpl_id)))
+        H5Epush_ret(func, H5E_PLIST, H5E_BADVALUE, "bad VFL driver info", -1)
+
+    if (memb_dxpl) {
+	for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+	    if (dx->memb_dxpl[mt]>=0)
+		memb_dxpl[mt] = H5Pcopy(dx->memb_dxpl[mt]);
+	    else
+		memb_dxpl[mt] = dx->memb_dxpl[mt]; /*default or bad ID */
+	}
+    }
+
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_sb_size
+ *
+ * Purpose:	Returns the size of the private information to be stored in
+ *		the superblock.
+ *
+ * Return:	Success:	The super block driver data size.
+ *
+ *		Failure:	never fails
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August 16, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hsize_t
+H5FD_multi_sb_size(H5FD_t *_file)
+{
+    H5FD_multi_t	*file = (H5FD_multi_t*)_file;
+    int			nseen = 0;
+    hsize_t		nbytes = 8; /*size of header*/
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* How many unique files? */
+    UNIQUE_MEMBERS(file->fa.memb_map, mt) {
+	nseen++;
+    } END_MEMBERS;
+
+    /* Addresses and EOA markers */
+    nbytes += nseen * 2 * 8;
+
+    /* Name templates */
+    UNIQUE_MEMBERS(file->fa.memb_map, mt) {
+        size_t n = strlen(file->fa.memb_name[mt])+1;
+        nbytes += (n+7) & ~((size_t)0x0007);
+    } END_MEMBERS;
+
+    return nbytes;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_sb_encode
+ *
+ * Purpose:	Encode driver information for the superblock. The NAME
+ *		argument is a nine-byte buffer which will be initialized with
+ *		an eight-character name/version number and null termination.
+ *
+ *		The encoding is a six-byte member mapping followed two bytes
+ *		which are unused. For each unique file in usage-type order
+ *		encode all the starting addresses as unsigned 64-bit integers,
+ *		then all the EOA values as unsigned 64-bit integers, then all
+ *		the template names as null terminated strings which are
+ *		multiples of 8 characters.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August 16, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_multi_sb_encode(H5FD_t *_file, char *name/*out*/,
+		     unsigned char *buf/*out*/)
+{
+    H5FD_multi_t	*file = (H5FD_multi_t*)_file;
+    haddr_t		memb_eoa;
+    unsigned char	*p;
+    size_t		nseen;
+    size_t		i;
+    H5FD_mem_t		m;
+    static const char *func="H5FD_multi_sb_encode";  /* Function Name for error reporting */
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Name and version number */
+    strncpy(name, "NCSAmulti",8);
+    name[8] = '\0';
+
+    assert(7==H5FD_MEM_NTYPES);
+    for (m=H5FD_MEM_SUPER; m<H5FD_MEM_NTYPES; m=(H5FD_mem_t)(m+1))
+        buf[m-1] = (unsigned char)file->fa.memb_map[m];
+    buf[7] = 0;
+    buf[8] = 0;
+
+    /*
+     * Copy the starting addresses and EOA values into the buffer in order of
+     * usage type but only for types which map to something unique.
+     */
+
+    /* Encode all starting addresses and EOA values */
+    nseen = 0;
+    p = buf+8;
+    assert(sizeof(haddr_t)<=8);
+    UNIQUE_MEMBERS(file->fa.memb_map, mt) {
+        memb_eoa = H5FDget_eoa(file->memb[mt]);
+        memcpy(p, &(file->fa.memb_addr[mt]), sizeof(haddr_t));
+        p += sizeof(haddr_t);
+        memcpy(p, &memb_eoa, sizeof(haddr_t));
+        p += sizeof(haddr_t);
+        nseen++;
+    } END_MEMBERS;
+    if (H5Tconvert(H5T_NATIVE_HADDR, H5T_STD_U64LE, nseen*2, buf+8, NULL,
+		   H5P_DEFAULT)<0)
+        H5Epush_ret(func, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", -1)
+
+    /* Encode all name templates */
+    p = buf + 8 + nseen*2*8;
+    UNIQUE_MEMBERS(file->fa.memb_map, mt) {
+        size_t n = strlen(file->fa.memb_name[mt]) + 1;
+        strcpy((char *)p, file->fa.memb_name[mt]);
+        p += n;
+        for (i=n; i%8; i++) *p++ = '\0';
+    } END_MEMBERS;
+
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_sb_decode
+ *
+ * Purpose:	Decodes the superblock information for this driver. The NAME
+ *		argument is the eight-character (plus null termination) name
+ *		stored in the file.
+ *
+ *		The FILE argument is updated according to the information in
+ *		the superblock. This may mean that some member files are
+ *		closed and others are opened.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August 16, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_multi_sb_decode(H5FD_t *_file, const char *name, const unsigned char *buf)
+{
+    H5FD_multi_t	*file = (H5FD_multi_t*)_file;
+    char		x[2*H5FD_MEM_NTYPES*8];
+    H5FD_mem_t		map[H5FD_MEM_NTYPES];
+    int			i;
+    size_t		nseen=0;
+    hbool_t		map_changed=FALSE;
+    hbool_t		in_use[H5FD_MEM_NTYPES];
+    const char		*memb_name[H5FD_MEM_NTYPES];
+    haddr_t		memb_addr[H5FD_MEM_NTYPES];
+    haddr_t		memb_eoa[H5FD_MEM_NTYPES];
+    haddr_t		*ap;
+    static const char *func="H5FD_multi_sb_decode";  /* Function Name for error reporting */
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Make sure the name/version number is correct */
+    if (strcmp(name, "NCSAmult"))
+        H5Epush_ret(func, H5E_FILE, H5E_BADVALUE, "invalid multi superblock", -1)
+
+    /* Set default values */
+    ALL_MEMBERS(mt) {
+        memb_addr[mt] = HADDR_UNDEF;
+        memb_eoa[mt] = HADDR_UNDEF;
+        memb_name[mt] = NULL;
+    } END_MEMBERS;
+
+    /*
+     * Read the map and count the unique members.
+     */
+    memset(map, 0, sizeof map);
+    for (i=0; i<6; i++) {
+        map[i+1] = (H5FD_mem_t)buf[i];
+        if (file->fa.memb_map[i+1]!=map[i+1])
+            map_changed=TRUE;
+    }
+    UNIQUE_MEMBERS(map, mt) {
+        nseen++;
+    } END_MEMBERS;
+    buf += 8;
+
+    /* Decode Address and EOA values */
+    assert(sizeof(haddr_t)<=8);
+    memcpy(x, buf, (nseen*2*8));
+    buf += nseen*2*8;
+    if (H5Tconvert(H5T_STD_U64LE, H5T_NATIVE_HADDR, nseen*2, x, NULL, H5P_DEFAULT)<0)
+        H5Epush_ret(func, H5E_DATATYPE, H5E_CANTCONVERT, "can't convert superblock info", -1)
+    ap = (haddr_t*)x;
+    UNIQUE_MEMBERS(map, mt) {
+        memb_addr[_unmapped] = *ap++;
+        memb_eoa[_unmapped] = *ap++;
+    } END_MEMBERS;
+
+    /* Decode name templates */
+    UNIQUE_MEMBERS(map, mt) {
+        size_t n = strlen((const char *)buf)+1;
+        memb_name[_unmapped] = (const char *)buf;
+        buf += (n+7) & ~((unsigned)0x0007);
+    } END_MEMBERS;
+
+    /*
+     * Use the mapping saved in the superblock in preference to the one
+     * already set for the file. Since we may have opened files which are no
+     * longer needed we should close all those files. We'll open the new
+     * files at the end.
+     */
+    if (map_changed) {
+#ifdef H5FD_MULTI_DEBUG
+        if (file->flags & H5F_ACC_DEBUG) {
+            fprintf(stderr, "H5FD_MULTI: member map override\n");
+            fprintf(stderr, "    old value: ");
+            ALL_MEMBERS(mt) {
+                fprintf(stderr, "%s%d", mt?", ":"", (int)(file->fa.memb_map[mt]));
+            } END_MEMBERS;
+            fprintf(stderr, "\n    new value: ");
+            ALL_MEMBERS(mt) {
+                fprintf(stderr, "%s%d", mt?", ":"", (int)(map[mt]));
+            } END_MEMBERS;
+        }
+#endif
+        /* Commit map */
+        ALL_MEMBERS(mt) {
+            file->fa.memb_map[mt] = map[mt];
+        } END_MEMBERS;
+
+        /* Close files which are unused now */
+        memset(in_use, 0, sizeof in_use);
+        UNIQUE_MEMBERS(map, mt) {
+            in_use[mt] = TRUE;
+        } END_MEMBERS;
+        ALL_MEMBERS(mt) {
+            if (!in_use[mt] && file->memb[mt]) {
+#ifdef H5FD_MULTI_DEBUG
+                if (file->flags & H5F_ACC_DEBUG) {
+                    fprintf(stderr, "H5FD_MULTI: close member %d\n", (int)mt);
+                }
+#endif
+                (void)H5FDclose(file->memb[mt]);
+                file->memb[mt] = NULL;
+            }
+            file->fa.memb_map[mt] = map[mt];
+        } END_MEMBERS;
+    }
+
+    /* Commit member starting addresses and name templates */
+    ALL_MEMBERS(mt) {
+        file->fa.memb_addr[mt] = memb_addr[mt];
+        if (memb_name[mt]) {
+            if (file->fa.memb_name[mt])
+                free(file->fa.memb_name[mt]);
+            file->fa.memb_name[mt] = my_strdup(memb_name[mt]);
+        }
+    } END_MEMBERS;
+    if (compute_next(file)<0)
+        H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "compute_next() failed", -1)
+
+    /* Open all necessary files */
+    if (open_members(file)<0)
+        H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "open_members() failed", -1)
+
+    /* Set the EOA marker for all open files */
+    UNIQUE_MEMBERS(file->fa.memb_map, mt) {
+        if (file->memb[mt])
+            if(H5FDset_eoa(file->memb[mt], memb_eoa[mt])<0)
+                H5Epush_ret(func, H5E_INTERNAL, H5E_CANTSET, "set_eoa() failed", -1)
+    } END_MEMBERS;
+
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_fapl_get
+ *
+ * Purpose:	Returns a file access property list which indicates how the
+ *		specified file is being accessed. The return list could be
+ *		used to access another file the same way.
+ *
+ * Return:	Success:	Ptr to new file access property list with all
+ *				members copied from the file struct.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, August 13, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FD_multi_fapl_get(H5FD_t *_file)
+{
+    H5FD_multi_t	*file = (H5FD_multi_t*)_file;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    return H5FD_multi_fapl_copy(&(file->fa));
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_fapl_copy
+ *
+ * Purpose:	Copies the multi-specific file access properties.
+ *
+ * Return:	Success:	Ptr to a new property list
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FD_multi_fapl_copy(const void *_old_fa)
+{
+    const H5FD_multi_fapl_t *old_fa = (const H5FD_multi_fapl_t*)_old_fa;
+    H5FD_multi_fapl_t *new_fa = malloc(sizeof(H5FD_multi_fapl_t));
+    H5FD_mem_t mt;
+    int nerrors = 0;
+    static const char *func="H5FD_multi_fapl_copy";  /* Function Name for error reporting */
+
+    assert(new_fa);
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    memcpy(new_fa, old_fa, sizeof(H5FD_multi_fapl_t));
+    for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+	if (old_fa->memb_fapl[mt]>=0) {
+	    new_fa->memb_fapl[mt] = H5Pcopy(old_fa->memb_fapl[mt]);
+	    if (new_fa->memb_fapl[mt]<0) nerrors++;
+	}
+	if (old_fa->memb_name[mt]) {
+	    new_fa->memb_name[mt] = malloc(strlen(old_fa->memb_name[mt])+1);
+	    assert(new_fa->memb_name[mt]);
+	    strcpy(new_fa->memb_name[mt], old_fa->memb_name[mt]);
+	}
+    }
+
+    if (nerrors) {
+        for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+            if (new_fa->memb_fapl[mt]>=0) (void)H5Pclose(new_fa->memb_fapl[mt]);
+            if (new_fa->memb_name[mt]) free(new_fa->memb_name[mt]);
+        }
+        free(new_fa);
+        H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "invalid freespace objects", NULL)
+    }
+    return new_fa;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_fapl_free
+ *
+ * Purpose:	Frees the multi-specific file access properties.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_multi_fapl_free(void *_fa)
+{
+    H5FD_multi_fapl_t	*fa = (H5FD_multi_fapl_t*)_fa;
+    H5FD_mem_t		mt;
+    static const char *func="H5FD_multi_fapl_free";  /* Function Name for error reporting */
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+	if (fa->memb_fapl[mt]>=0)
+            if(H5Pclose(fa->memb_fapl[mt])<0)
+                H5Epush_ret(func, H5E_FILE, H5E_CANTCLOSEOBJ, "can't close property list", -1)
+	if (fa->memb_name[mt])
+            free(fa->memb_name[mt]);
+    }
+    free(fa);
+
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_dxpl_copy
+ *
+ * Purpose:	Copes the multi-specific data transfer properties.
+ *
+ * Return:	Success:	Ptr to new property list
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FD_multi_dxpl_copy(const void *_old_dx)
+{
+    const H5FD_multi_dxpl_t *old_dx = (const H5FD_multi_dxpl_t*)_old_dx;
+    H5FD_multi_dxpl_t *new_dx = malloc(sizeof(H5FD_multi_dxpl_t));
+    H5FD_mem_t mt;
+    int nerrors = 0;
+    static const char *func="H5FD_multi_dxpl_copy";  /* Function Name for error reporting */
+
+    assert(new_dx);
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    memcpy(new_dx, old_dx, sizeof(H5FD_multi_dxpl_t));
+    for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+	if (old_dx->memb_dxpl[mt]>=0) {
+	    new_dx->memb_dxpl[mt] = H5Pcopy(old_dx->memb_dxpl[mt]);
+	    if (new_dx->memb_dxpl[mt]<0) nerrors++;
+	}
+    }
+
+    if (nerrors) {
+        for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1))
+            (void)H5Pclose(new_dx->memb_dxpl[mt]);
+        free(new_dx);
+        H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "invalid freespace objects", NULL)
+    }
+    return new_dx;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_dxpl_free
+ *
+ * Purpose:	Frees the multi-specific data transfer properties.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_multi_dxpl_free(void *_dx)
+{
+    H5FD_multi_dxpl_t	*dx = (H5FD_multi_dxpl_t*)_dx;
+    H5FD_mem_t		mt;
+    static const char *func="H5FD_multi_dxpl_free";  /* Function Name for error reporting */
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1))
+        if (dx->memb_dxpl[mt]>=0)
+            if(H5Pclose(dx->memb_dxpl[mt])<0)
+                H5Epush_ret(func, H5E_FILE, H5E_CANTCLOSEOBJ, "can't close property list", -1)
+    free(dx);
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_open
+ *
+ * Purpose:	Creates and/or opens a multi HDF5 file.
+ *
+ * Return:	Success:	A pointer to a new file data structure. The
+ *				public fields will be initialized by the
+ *				caller, which is always H5FD_open().
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5FD_t *
+H5FD_multi_open(const char *name, unsigned flags, hid_t fapl_id,
+		haddr_t maxaddr)
+{
+    H5FD_multi_t	*file=NULL;
+    hid_t		close_fapl=-1;
+    H5FD_multi_fapl_t	*fa;
+    H5FD_mem_t		m;
+    static const char *func="H5FD_multi_open";  /* Function Name for error reporting */
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Check arguments */
+    if (!name || !*name)
+        H5Epush_ret(func, H5E_ARGS, H5E_BADVALUE, "invalid file name", NULL)
+    if (0==maxaddr || HADDR_UNDEF==maxaddr)
+        H5Epush_ret(func, H5E_ARGS, H5E_BADRANGE, "bogus maxaddr", NULL)
+
+    /*
+     * Initialize the file from the file access properties, using default
+     * values if necessary.
+     */
+    if (NULL==(file=calloc(1, sizeof(H5FD_multi_t))))
+        H5Epush_ret(func, H5E_RESOURCE, H5E_NOSPACE, "memory allocation failed", NULL)
+    if (H5P_FILE_ACCESS_DEFAULT==fapl_id || H5FD_MULTI!=H5Pget_driver(fapl_id)) {
+        close_fapl = fapl_id = H5Pcreate(H5P_FILE_ACCESS);
+        if(H5Pset_fapl_multi(fapl_id, NULL, NULL, NULL, NULL, TRUE)<0)
+            H5Epush_goto(func, H5E_FILE, H5E_CANTSET, "can't set property value", error)
+    }
+    fa = H5Pget_driver_info(fapl_id);
+    assert(fa);
+    ALL_MEMBERS(mt) {
+	file->fa.memb_map[mt] = fa->memb_map[mt];
+	file->fa.memb_addr[mt] = fa->memb_addr[mt];
+	if (fa->memb_fapl[mt]>=0)
+	    file->fa.memb_fapl[mt] = H5Pcopy(fa->memb_fapl[mt]);
+	else
+	    file->fa.memb_fapl[mt] = fa->memb_fapl[mt];
+	if (fa->memb_name[mt])
+	    file->fa.memb_name[mt] = my_strdup(fa->memb_name[mt]);
+	else
+	    file->fa.memb_name[mt] = NULL;
+    } END_MEMBERS;
+    file->fa.relax = fa->relax;
+    file->flags = flags;
+    file->name = my_strdup(name);
+    if (close_fapl>=0)
+        if(H5Pclose(close_fapl)<0)
+            H5Epush_goto(func, H5E_FILE, H5E_CANTCLOSEOBJ, "can't close property list", error)
+
+    /* Compute derived properties and open member files */
+    if (compute_next(file)<0)
+        H5Epush_goto(func, H5E_INTERNAL, H5E_BADVALUE, "compute_next() failed", error)
+    if (open_members(file)<0)
+        H5Epush_goto(func, H5E_INTERNAL, H5E_BADVALUE, "open_members() failed", error)
+
+    /* We must have opened at least the superblock file */
+    if (H5FD_MEM_DEFAULT==(m=file->fa.memb_map[H5FD_MEM_SUPER]))
+        m = H5FD_MEM_SUPER;
+    if (NULL==file->memb[m])
+        goto error;
+
+    return (H5FD_t*)file;
+
+error:
+    /* Cleanup and fail */
+    if (file) {
+	ALL_MEMBERS(mt) {
+	    if (file->memb[mt]) (void)H5FDclose(file->memb[mt]);
+	    if (file->fa.memb_fapl[mt]>=0) (void)H5Pclose(file->fa.memb_fapl[mt]);
+	    if (file->fa.memb_name[mt]) free(file->fa.memb_name[mt]);
+	} END_MEMBERS;
+	if (file->name) free(file->name);
+	free(file);
+    }
+    return NULL;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_close
+ *
+ * Purpose:	Closes a multi file.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative with as many members closed as
+ *				possible. The only subsequent operation
+ *				permitted on the file is a close operation.
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_multi_close(H5FD_t *_file)
+{
+    H5FD_multi_t	*file = (H5FD_multi_t*)_file;
+    int			nerrors=0;
+    static const char *func="H5FD_multi_close";  /* Function Name for error reporting */
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Close as many members as possible */
+    ALL_MEMBERS(mt) {
+	if (file->memb[mt]) {
+#ifdef H5FD_MULTI_DEBUG
+	    if (file->flags & H5F_ACC_DEBUG) {
+		fprintf(stderr, "H5FD_MULTI: closing member %d\n", (int)mt);
+	    }
+#endif
+	    if (H5FDclose(file->memb[mt])<0) {
+#ifdef H5FD_MULTI_DEBUG
+		if (file->flags & H5F_ACC_DEBUG) {
+		    fprintf(stderr, "H5FD_MULTI: close failed\n");
+		}
+#endif
+		nerrors++;
+	    } else {
+		file->memb[mt] = NULL;
+	    }
+	}
+    } END_MEMBERS;
+    if (nerrors)
+        H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "error closing member files", -1)
+
+    /* Clean up other stuff */
+    ALL_MEMBERS(mt) {
+	if (file->fa.memb_fapl[mt]>=0) (void)H5Pclose(file->fa.memb_fapl[mt]);
+	if (file->fa.memb_name[mt]) free(file->fa.memb_name[mt]);
+    } END_MEMBERS;
+    free(file->name);
+    free(file);
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_cmp
+ *
+ * Purpose:	Compares two file families to see if they are the same. It
+ *		does this by comparing the first common member of the two
+ *		families.  If the families have no members in common then the
+ *		file with the earliest member is smaller than the other file.
+ *		We abort if neither file has any members.
+ *
+ * Return:	Success:	like strcmp()
+ *
+ *		Failure:	never fails (arguments were checked by the
+ *				caller).
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5FD_multi_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
+{
+    const H5FD_multi_t	*f1 = (const H5FD_multi_t*)_f1;
+    const H5FD_multi_t	*f2 = (const H5FD_multi_t*)_f2;
+    H5FD_mem_t		mt;
+    int			cmp=0;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+	if (f1->memb[mt] && f2->memb[mt]) break;
+	if (!cmp) {
+	    if (f1->memb[mt]) cmp = -1;
+	    else if (f2->memb[mt]) cmp = 1;
+	}
+    }
+    assert(cmp || mt<H5FD_MEM_NTYPES);
+    if (mt>=H5FD_MEM_NTYPES) return cmp;
+
+    return H5FDcmp(f1->memb[mt], f2->memb[mt]);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_query
+ *
+ * Purpose:	Set the flags that this VFL driver is capable of supporting.
+ *              (listed in H5FDpublic.h)
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, September 26, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_multi_query(const H5FD_t *_f, unsigned long *flags /* out */)
+{
+    /* Shut compiler up */
+    _f=_f;
+
+    /* Set the VFL feature flags that this driver supports */
+    if(flags) {
+        *flags=0;
+        *flags|=H5FD_FEAT_DATA_SIEVE;       /* OK to perform data sieving for faster raw data reads & writes */
+        *flags|=H5FD_FEAT_AGGREGATE_SMALLDATA; /* OK to aggregate "small" raw data allocations */
+    }
+
+    return(0);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_get_eoa
+ *
+ * Purpose:	Returns the end-of-address marker for the file. The EOA
+ *		marker is the first address past the last byte allocated in
+ *		the format address space.
+ *
+ * Return:	Success:	The end-of-address-marker
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_multi_get_eoa(H5FD_t *_file)
+{
+    H5FD_multi_t	*file = (H5FD_multi_t*)_file;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    return file->eoa;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_set_eoa
+ *
+ * Purpose:	Set the end-of-address marker for the file by savig the new
+ *		EOA value in the file struct. Also set the EOA marker for the
+ *		subfile in which the new EOA value falls. We don't set the
+ *		EOA values of any other subfiles.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_multi_set_eoa(H5FD_t *_file, haddr_t eoa)
+{
+    H5FD_multi_t	*file = (H5FD_multi_t*)_file;
+    H5FD_mem_t		mt, mmt;
+    herr_t		status;
+    static const char *func="H5FD_multi_set_eoa";  /* Function Name for error reporting */
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Find the subfile in which the new EOA value falls */
+    for (mt=H5FD_MEM_SUPER; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+	mmt = file->fa.memb_map[mt];
+	if (H5FD_MEM_DEFAULT==mmt) mmt = mt;
+	assert(mmt>0 && mmt<H5FD_MEM_NTYPES);
+
+	if (eoa>=file->fa.memb_addr[mmt] && eoa<file->memb_next[mmt]) {
+	    break;
+	}
+    }
+    assert(mt<H5FD_MEM_NTYPES);
+
+    /* Set subfile eoa */
+    if (file->memb[mmt]) {
+	H5E_BEGIN_TRY {
+	    status = H5FDset_eoa(file->memb[mmt], eoa-file->fa.memb_addr[mmt]);
+	} H5E_END_TRY;
+	if (status<0)
+            H5Epush_ret(func, H5E_FILE, H5E_BADVALUE, "member H5FDset_eoa failed", -1)
+    }
+
+    /* Save new eoa for return later */
+    file->eoa = eoa;
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_get_eof
+ *
+ * Purpose:	Returns the end-of-file marker, which is the greater of
+ *		either the total multi size or the current EOA marker.
+ *
+ * Return:	Success:	End of file address, the first address past
+ *				the end of the multi of files or the current
+ *				EOA, whichever is larger.
+ *
+ *		Failure:      	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_multi_get_eof(H5FD_t *_file)
+{
+    H5FD_multi_t	*file = (H5FD_multi_t*)_file;
+    haddr_t		eof=0, tmp;
+    static const char *func="H5FD_multi_eof";  /* Function Name for error reporting */
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    UNIQUE_MEMBERS(file->fa.memb_map, mt) {
+	if (file->memb[mt]) {
+	    H5E_BEGIN_TRY {
+		tmp = H5FDget_eof(file->memb[mt]);
+	    } H5E_END_TRY;
+	    if (HADDR_UNDEF==tmp)
+                H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "member file has unknown eof", HADDR_UNDEF)
+	    if (tmp>0) tmp += file->fa.memb_addr[mt];
+
+	} else if (file->fa.relax) {
+	    /*
+	     * The member is not open yet (maybe it doesn't exist). Make the
+	     * best guess about the end-of-file.
+	     */
+	    tmp = file->memb_next[mt];
+	    assert(HADDR_UNDEF!=tmp);
+
+	} else {
+            H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "bad eof", HADDR_UNDEF)
+	}
+
+	if (tmp>eof) eof = tmp;
+    } END_MEMBERS;
+
+    return MAX(file->eoa, eof);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5FD_multi_get_handle
+ *
+ * Purpose:        Returns the file handle of MULTI file driver.
+ *
+ * Returns:        Non-negative if succeed or negative if fails.
+ *
+ * Programmer:     Raymond Lu
+ *                 Sept. 16, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_multi_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle)
+{
+    H5FD_multi_t        *file = (H5FD_multi_t *)_file;
+    H5FD_mem_t          type, mmt;
+    static const char   *func="H5FD_multi_get_handle";  /* Function Name for error reporting */
+
+    /* Get data type for multi driver */
+    if(H5Pget_multi_type(fapl, &type) < 0)
+        H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "can't get data type for multi driver", -1)
+    if(type<H5FD_MEM_DEFAULT || type>=H5FD_MEM_NTYPES)
+        H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "data type is out of range", -1)
+    mmt = file->fa.memb_map[type];
+    if(H5FD_MEM_DEFAULT==mmt) mmt = type;
+
+    return (H5FDget_vfd_handle(file->memb[mmt], fapl, file_handle));
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_alloc
+ *
+ * Purpose:	Allocate file memory.
+ *
+ * Return:	Success:	Address of new memory
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, August 12, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_multi_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
+{
+    H5FD_multi_t	*file = (H5FD_multi_t*)_file;
+    H5FD_mem_t		mmt;
+    haddr_t		addr;
+    static const char *func="H5FD_multi_alloc";  /* Function Name for error reporting */
+
+    mmt = file->fa.memb_map[type];
+    if (H5FD_MEM_DEFAULT==mmt) mmt = type;
+
+    if (HADDR_UNDEF==(addr=H5FDalloc(file->memb[mmt], type, dxpl_id, size)))
+        H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "member file can't alloc", HADDR_UNDEF)
+    addr += file->fa.memb_addr[mmt];
+    if (addr+size>file->eoa) file->eoa = addr+size;
+    return addr;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_free
+ *
+ * Purpose:	Frees memory
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, August 12, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_multi_free(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
+{
+    H5FD_multi_t	*file = (H5FD_multi_t*)_file;
+    H5FD_mem_t		mmt;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    mmt = file->fa.memb_map[type];
+    if (H5FD_MEM_DEFAULT==mmt) mmt = type;
+
+    assert(addr>=file->fa.memb_addr[mmt]);
+    assert(addr+size<=file->memb_next[mmt]);
+    return H5FDfree(file->memb[mmt], type, dxpl_id, addr-file->fa.memb_addr[mmt], size);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_read
+ *
+ * Purpose:	Reads SIZE bytes of data from FILE beginning at address ADDR
+ *		into buffer BUF according to data transfer properties in
+ *		DXPL_ID.
+ *
+ * Return:	Success:	Zero. Result is stored in caller-supplied
+ *				buffer BUF.
+ *
+ *		Failure:	-1, contents of buffer BUF are undefined.
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_multi_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
+		 void *_buf/*out*/)
+{
+    H5FD_multi_t	*file = (H5FD_multi_t*)_file;
+    H5FD_multi_dxpl_t	*dx=NULL;
+    H5FD_mem_t		mt, mmt, hi=H5FD_MEM_DEFAULT;
+    haddr_t		start_addr=0;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Get the data transfer properties */
+    if (H5P_FILE_ACCESS_DEFAULT!=dxpl_id && H5FD_MULTI==H5Pget_driver(dxpl_id)) {
+	dx = H5Pget_driver_info(dxpl_id);
+    }
+
+    /* Find the file to which this address belongs */
+    for (mt=H5FD_MEM_SUPER; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+	mmt = file->fa.memb_map[mt];
+	if (H5FD_MEM_DEFAULT==mmt) mmt = mt;
+	assert(mmt>0 && mmt<H5FD_MEM_NTYPES);
+
+	if (file->fa.memb_addr[mmt]>addr) continue;
+	if (file->fa.memb_addr[mmt]>=start_addr) {
+	    start_addr = file->fa.memb_addr[mmt];
+	    hi = mmt;
+	}
+    }
+    assert(hi>0);
+
+    /* Read from that member */
+    return H5FDread(file->memb[hi], type, dx?dx->memb_dxpl[hi]:H5P_DEFAULT,
+		    addr-start_addr, size, _buf);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_write
+ *
+ * Purpose:	Writes SIZE bytes of data to FILE beginning at address ADDR
+ *		from buffer BUF according to data transfer properties in
+ *		DXPL_ID.
+ *
+ * Return:	Success:	Zero
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_multi_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
+		  const void *_buf)
+{
+    H5FD_multi_t	*file = (H5FD_multi_t*)_file;
+    H5FD_multi_dxpl_t	*dx=NULL;
+    H5FD_mem_t		mt, mmt, hi=H5FD_MEM_DEFAULT;
+    haddr_t		start_addr=0;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Get the data transfer properties */
+    if (H5P_FILE_ACCESS_DEFAULT!=dxpl_id && H5FD_MULTI==H5Pget_driver(dxpl_id)) {
+	dx = H5Pget_driver_info(dxpl_id);
+    }
+
+    /* Find the file to which this address belongs */
+    for (mt=H5FD_MEM_SUPER; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+	mmt = file->fa.memb_map[mt];
+	if (H5FD_MEM_DEFAULT==mmt) mmt = mt;
+	assert(mmt>0 && mmt<H5FD_MEM_NTYPES);
+
+	if (file->fa.memb_addr[mmt]>addr) continue;
+	if (file->fa.memb_addr[mmt]>=start_addr) {
+	    start_addr = file->fa.memb_addr[mmt];
+	    hi = mmt;
+	}
+    }
+    assert(hi>0);
+
+    /* Write to that member */
+    return H5FDwrite(file->memb[hi], type, dx?dx->memb_dxpl[hi]:H5P_DEFAULT,
+		     addr-start_addr, size, _buf);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_multi_flush
+ *
+ * Purpose:	Flushes all multi members.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1, as many files flushed as possible.
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_multi_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing)
+{
+    H5FD_multi_t	*file = (H5FD_multi_t*)_file;
+    H5FD_mem_t		mt;
+    int			nerrors=0;
+    static const char *func="H5FD_multi_flush";  /* Function Name for error reporting */
+
+#if 0
+    H5FD_mem_t		mmt;
+
+    /* Debugging stuff... */
+    fprintf(stderr, "multifile access information:\n");
+
+    /* print the map */
+    fprintf(stderr, "    map=");
+    for (mt=1; mt<H5FD_MEM_NTYPES; mt++) {
+	mmt = file->memb_map[mt];
+	if (H5FD_MEM_DEFAULT==mmt) mmt = mt;
+	fprintf(stderr, "%s%d", 1==mt?"":",", (int)mmt);
+    }
+    fprintf(stderr, "\n");
+
+    /* print info about each file */
+    fprintf(stderr, "      File             Starting            Allocated                 Next Member\n");
+    fprintf(stderr, "    Number              Address                 Size              Address Name\n");
+    fprintf(stderr, "    ------ -------------------- -------------------- -------------------- ------------------------------\n");
+
+    for (mt=1; mt<H5FD_MEM_NTYPES; mt++) {
+	if (HADDR_UNDEF!=file->memb_addr[mt]) {
+	    haddr_t eoa = H5FDget_eoa(file->memb[mt]);
+	    fprintf(stderr, "    %6d %20llu %20llu %20llu %s\n",
+		    (int)mt, (unsigned long_long)(file->memb_addr[mt]),
+		    (unsigned long_long)eoa,
+		    (unsigned long_long)(file->memb_next[mt]),
+		    file->memb_name[mt]);
+	}
+    }
+#endif
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Flush each file */
+    for (mt=H5FD_MEM_SUPER; mt<H5FD_MEM_NTYPES; mt=(H5FD_mem_t)(mt+1)) {
+	if (file->memb[mt]) {
+	    H5E_BEGIN_TRY {
+		if (H5FDflush(file->memb[mt],dxpl_id,closing)<0) nerrors++;
+	    } H5E_END_TRY;
+	}
+    }
+    if (nerrors)
+        H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "error flushing member files", -1)
+
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	compute_next
+ *
+ * Purpose:	Compute the memb_next[] values of the file based on the
+ *		file's member map and the member starting addresses.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August 23, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+compute_next(H5FD_multi_t *file)
+{
+    /* Clear the error stack */
+    H5Eclear();
+
+    ALL_MEMBERS(mt) {
+	file->memb_next[mt] = HADDR_UNDEF;
+    } END_MEMBERS;
+
+    UNIQUE_MEMBERS(file->fa.memb_map, mt1) {
+	UNIQUE_MEMBERS(file->fa.memb_map, mt2) {
+	    if (file->fa.memb_addr[mt1]<file->fa.memb_addr[mt2] &&
+		(HADDR_UNDEF==file->memb_next[mt1] ||
+		 file->memb_next[mt1]>file->fa.memb_addr[mt2])) {
+		file->memb_next[mt1] = file->fa.memb_addr[mt2];
+	    }
+	} END_MEMBERS;
+	if (HADDR_UNDEF==file->memb_next[mt1]) {
+	    file->memb_next[mt1] = HADDR_MAX; /*last member*/
+	}
+    } END_MEMBERS;
+
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	open_members
+ *
+ * Purpose:	Opens all members which are not opened yet.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August 23, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+open_members(H5FD_multi_t *file)
+{
+    char	tmp[1024];
+    int		nerrors=0;
+    static const char *func="(H5FD_multi)open_members";  /* Function Name for error reporting */
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    UNIQUE_MEMBERS(file->fa.memb_map, mt) {
+	if (file->memb[mt]) continue; /*already open*/
+	assert(file->fa.memb_name[mt]);
+	sprintf(tmp, file->fa.memb_name[mt], file->name);
+
+#ifdef H5FD_MULTI_DEBUG
+	if (file->flags & H5F_ACC_DEBUG) {
+	    fprintf(stderr, "H5FD_MULTI: open member %d \"%s\"\n",
+		    (int)mt, tmp);
+	}
+#endif
+	H5E_BEGIN_TRY {
+	    file->memb[mt] = H5FDopen(tmp, file->flags, file->fa.memb_fapl[mt],
+				      HADDR_UNDEF);
+	} H5E_END_TRY;
+	if (!file->memb[mt]) {
+#ifdef H5FD_MULTI_DEBUG
+	    if (file->flags & H5F_ACC_DEBUG) {
+		fprintf(stderr, "H5FD_MULTI: open failed for member %d\n",
+			(int)mt);
+	    }
+#endif
+	    if (!file->fa.relax || (file->flags & H5F_ACC_RDWR)) {
+		nerrors++;
+	    }
+	}
+    } END_MEMBERS;
+    if (nerrors)
+        H5Epush_ret(func, H5E_INTERNAL, H5E_BADVALUE, "error opening member files", -1)
+
+    return 0;
+}
+
+
+#ifdef _H5private_H
+/*
+ * This is not related to the functionality of the driver code.
+ * It is added here to trigger warning if HDF5 private definitions are included
+ * by mistake.  The code should use only HDF5 public API and definitions.
+ */
+#error "Do not use HDF5 private definitions"
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5FDmulti.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDmulti.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDmulti.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the "multi" driver.
+ */
+#ifndef H5FDmulti_H
+#define H5FDmulti_H
+
+#include "H5Ipublic.h"
+#include "H5Ppublic.h"             /* Property lists */
+#include "H5Fpublic.h"
+
+#define H5FD_MULTI	(H5FD_multi_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+H5_DLL hid_t H5FD_multi_init(void);
+H5_DLL void H5FD_multi_term(void);
+H5_DLL herr_t H5Pset_fapl_multi(hid_t fapl_id, const H5FD_mem_t *memb_map,
+			 const hid_t *memb_fapl, const char * const *memb_name,
+			 const haddr_t *memb_addr, hbool_t relax);
+H5_DLL herr_t H5Pget_fapl_multi(hid_t fapl_id, H5FD_mem_t *memb_map/*out*/,
+			 hid_t *memb_fapl/*out*/, char **memb_name/*out*/,
+			 haddr_t *memb_addr/*out*/, hbool_t *relax/*out*/);
+H5_DLL herr_t H5Pset_dxpl_multi(hid_t dxpl_id, const hid_t *memb_dxpl);
+H5_DLL herr_t H5Pget_dxpl_multi(hid_t dxpl_id, hid_t *memb_dxpl/*out*/);
+
+H5_DLL herr_t H5Pset_fapl_split(hid_t fapl, const char *meta_ext,
+			 hid_t meta_plist_id, const char *raw_ext,
+			 hid_t raw_plist_id);
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5FDprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,78 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Monday, July 26, 1999
+ */
+#ifndef _H5FDprivate_H
+#define _H5FDprivate_H
+
+/* Include package's public header */
+#include "H5FDpublic.h"
+
+/* Private headers needed by this file */
+
+/*
+ * The MPI drivers are needed because there are
+ * places where we check for things that aren't handled by these drivers.
+ */
+#include "H5FDmpi.h"            /* MPI-based file drivers		*/
+
+/* Macros */
+
+/* Forward declarations for prototype arguments */
+struct H5P_genplist_t;
+
+/* Prototypes */
+H5_DLL int H5FD_term_interface(void);
+H5_DLL H5FD_class_t *H5FD_get_class(hid_t id);
+H5_DLL hsize_t H5FD_sb_size(H5FD_t *file);
+H5_DLL herr_t H5FD_sb_encode(H5FD_t *file, char *name/*out*/, uint8_t *buf);
+H5_DLL herr_t H5FD_sb_decode(H5FD_t *file, const char *name, const uint8_t *buf);
+H5_DLL void *H5FD_fapl_get(H5FD_t *file);
+H5_DLL herr_t H5FD_fapl_open(struct H5P_genplist_t *plist, hid_t driver_id, const void *driver_info);
+H5_DLL herr_t H5FD_fapl_copy(hid_t driver_id, const void *fapl, void **copied_fapl);
+H5_DLL herr_t H5FD_fapl_close(hid_t driver_id, void *fapl);
+H5_DLL herr_t H5FD_dxpl_open(struct H5P_genplist_t *plist, hid_t driver_id, const void *driver_info);
+H5_DLL herr_t H5FD_dxpl_copy(hid_t driver_id, const void *dxpl, void **copied_dxpl);
+H5_DLL herr_t H5FD_dxpl_close(hid_t driver_id, void *dxpl);
+H5_DLL hid_t H5FD_register(const void *cls, size_t size);
+H5_DLL H5FD_t *H5FD_open(const char *name, unsigned flags, hid_t fapl_id,
+		  haddr_t maxaddr);
+H5_DLL herr_t H5FD_close(H5FD_t *file);
+H5_DLL herr_t H5FD_free_freelist(H5FD_t *file);
+H5_DLL int H5FD_cmp(const H5FD_t *f1, const H5FD_t *f2);
+H5_DLL int H5FD_query(const H5FD_t *f, unsigned long *flags/*out*/);
+H5_DLL haddr_t H5FD_alloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+H5_DLL herr_t H5FD_free(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size);
+H5_DLL haddr_t H5FD_realloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t old_addr,
+		     hsize_t old_size, hsize_t new_size);
+H5_DLL haddr_t H5FD_get_eoa(H5FD_t *file);
+H5_DLL herr_t H5FD_set_eoa(H5FD_t *file, haddr_t addr);
+H5_DLL haddr_t H5FD_get_eof(H5FD_t *file);
+H5_DLL herr_t H5FD_read(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
+		 void *buf/*out*/);
+H5_DLL herr_t H5FD_write(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
+		  const void *buf);
+H5_DLL herr_t H5FD_flush(H5FD_t *file, hid_t dxpl_id, unsigned closing);
+H5_DLL herr_t H5FD_get_fileno(const H5FD_t *file, unsigned long *filenum);
+H5_DLL herr_t H5FD_get_vfd_handle(H5FD_t *file, hid_t fapl, void** file_handle);
+H5_DLL hssize_t H5FD_get_freespace(const H5FD_t *file);
+H5_DLL htri_t H5FD_can_extend(H5FD_t *file, H5FD_mem_t type, haddr_t addr,
+    hsize_t size, hsize_t extra_requested);
+H5_DLL herr_t H5FD_extend(H5FD_t *file, H5FD_mem_t type, haddr_t addr,
+    hsize_t size, hsize_t extra_requested);
+
+#endif /* !_H5FDprivate_H */

Added: packages/hdf5/branches/upstream/current/src/H5FDpublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDpublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDpublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,259 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Monday, July 26, 1999
+ */
+#ifndef _H5FDpublic_H
+#define _H5FDpublic_H
+
+#include "H5public.h"
+#include "H5Fpublic.h"		/*for H5F_close_degree_t */
+
+#define H5_HAVE_VFL 1 /*define a convenient app feature test*/
+#define H5FD_VFD_DEFAULT 0   /* Default VFL driver value */
+
+/*
+ * Types of allocation requests. The values larger than H5FD_MEM_DEFAULT
+ * should not change other than adding new types to the end. These numbers
+ * might appear in files.
+ */
+typedef enum H5FD_mem_t {
+    H5FD_MEM_NOLIST	= -1,			/*must be negative*/
+    H5FD_MEM_DEFAULT	= 0,			/*must be zero*/
+    H5FD_MEM_SUPER      = 1,
+    H5FD_MEM_BTREE      = 2,
+    H5FD_MEM_DRAW       = 3,
+    H5FD_MEM_GHEAP      = 4,
+    H5FD_MEM_LHEAP      = 5,
+    H5FD_MEM_OHDR       = 6,
+
+    H5FD_MEM_NTYPES				/*must be last*/
+} H5FD_mem_t;
+
+/*
+ * A free-list map which maps all types of allocation requests to a single
+ * free list.  This is useful for drivers that don't really care about
+ * keeping different requests segregated in the underlying file and which
+ * want to make most efficient reuse of freed memory.  The use of the
+ * H5FD_MEM_SUPER free list is arbitrary.
+ */
+#define H5FD_FLMAP_SINGLE {						      \
+    H5FD_MEM_SUPER,			/*default*/			      \
+    H5FD_MEM_SUPER,			/*super*/			      \
+    H5FD_MEM_SUPER,			/*btree*/			      \
+    H5FD_MEM_SUPER,			/*draw*/			      \
+    H5FD_MEM_SUPER,			/*gheap*/			      \
+    H5FD_MEM_SUPER,			/*lheap*/			      \
+    H5FD_MEM_SUPER			/*ohdr*/			      \
+}
+
+/*
+ * A free-list map which segregates requests into `raw' or `meta' data
+ * pools.
+ */
+#define H5FD_FLMAP_DICHOTOMY {						      \
+    H5FD_MEM_SUPER,			/*default*/			      \
+    H5FD_MEM_SUPER,			/*super*/			      \
+    H5FD_MEM_SUPER,			/*btree*/			      \
+    H5FD_MEM_DRAW,			/*draw*/			      \
+    H5FD_MEM_SUPER,			/*gheap*/			      \
+    H5FD_MEM_SUPER,			/*lheap*/			      \
+    H5FD_MEM_SUPER			/*ohdr*/			      \
+}
+
+/*
+ * The default free list map which causes each request type to use it's own
+ * free-list.
+ */
+#define H5FD_FLMAP_DEFAULT {						      \
+    H5FD_MEM_DEFAULT,			/*default*/			      \
+    H5FD_MEM_DEFAULT,			/*super*/			      \
+    H5FD_MEM_DEFAULT,			/*btree*/			      \
+    H5FD_MEM_DEFAULT,			/*draw*/			      \
+    H5FD_MEM_DEFAULT,			/*gheap*/			      \
+    H5FD_MEM_DEFAULT,			/*lheap*/			      \
+    H5FD_MEM_DEFAULT			/*ohdr*/			      \
+}
+
+
+/* Define VFL driver features that can be enabled on a per-driver basis */
+/* These are returned with the 'query' function pointer in H5FD_class_t */
+    /*
+     * Defining the H5FD_FEAT_AGGREGATE_METADATA for a VFL driver means that
+     * the library will attempt to allocate a larger block for metadata and
+     * then sub-allocate each metadata request from that larger block.
+     */
+#define H5FD_FEAT_AGGREGATE_METADATA    0x00000001
+    /*
+     * Defining the H5FD_FEAT_ACCUMULATE_METADATA for a VFL driver means that
+     * the library will attempt to cache metadata as it is written to the file
+     * and build up a larger block of metadata to eventually pass to the VFL
+     * 'write' routine.
+     *
+     * Distinguish between updating the metadata accumulator on writes and
+     * reads.  This is particularly (perhaps only, even) important for MPI-I/O
+     * where we guarantee that writes are collective, but reads may not be.
+     * If we were to allow the metadata accumulator to be written during a
+     * read operation, the application would hang.
+     */
+#define H5FD_FEAT_ACCUMULATE_METADATA_WRITE     0x00000002
+#define H5FD_FEAT_ACCUMULATE_METADATA_READ      0x00000004
+#define H5FD_FEAT_ACCUMULATE_METADATA   (H5FD_FEAT_ACCUMULATE_METADATA_WRITE|H5FD_FEAT_ACCUMULATE_METADATA_READ)
+    /*
+     * Defining the H5FD_FEAT_DATA_SIEVE for a VFL driver means that
+     * the library will attempt to cache raw data as it is read from/written to
+     * a file in a "data seive" buffer.  See Rajeev Thakur's papers:
+     *  http://www.mcs.anl.gov/~thakur/papers/romio-coll.ps.gz
+     *  http://www.mcs.anl.gov/~thakur/papers/mpio-high-perf.ps.gz
+     */
+#define H5FD_FEAT_DATA_SIEVE            0x00000008
+    /*
+     * Defining the H5FD_FEAT_AGGREGATE_SMALLDATA for a VFL driver means that
+     * the library will attempt to allocate a larger block for "small" raw data
+     * and then sub-allocate "small" raw data requests from that larger block.
+     */
+#define H5FD_FEAT_AGGREGATE_SMALLDATA   0x00000010
+
+
+/* Forward declaration */
+typedef struct H5FD_t H5FD_t;
+
+/* Class information for each file driver */
+typedef struct H5FD_class_t {
+    const char *name;
+    haddr_t maxaddr;
+    H5F_close_degree_t fc_degree;
+    hsize_t (*sb_size)(H5FD_t *file);
+    herr_t  (*sb_encode)(H5FD_t *file, char *name/*out*/,
+                         unsigned char *p/*out*/);
+    herr_t  (*sb_decode)(H5FD_t *f, const char *name, const unsigned char *p);
+    size_t  fapl_size;
+    void *  (*fapl_get)(H5FD_t *file);
+    void *  (*fapl_copy)(const void *fapl);
+    herr_t  (*fapl_free)(void *fapl);
+    size_t  dxpl_size;
+    void *  (*dxpl_copy)(const void *dxpl);
+    herr_t  (*dxpl_free)(void *dxpl);
+    H5FD_t *(*open)(const char *name, unsigned flags, hid_t fapl,
+                    haddr_t maxaddr);
+    herr_t  (*close)(H5FD_t *file);
+    int     (*cmp)(const H5FD_t *f1, const H5FD_t *f2);
+    herr_t  (*query)(const H5FD_t *f1, unsigned long *flags);
+    haddr_t (*alloc)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+    herr_t  (*free)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                    haddr_t addr, hsize_t size);
+    haddr_t (*get_eoa)(H5FD_t *file);
+    herr_t  (*set_eoa)(H5FD_t *file, haddr_t addr);
+    haddr_t (*get_eof)(H5FD_t *file);
+    herr_t  (*get_handle)(H5FD_t *file, hid_t fapl, void**file_handle);
+    herr_t  (*read)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl,
+                    haddr_t addr, size_t size, void *buffer);
+    herr_t  (*write)(H5FD_t *file, H5FD_mem_t type, hid_t dxpl,
+                     haddr_t addr, size_t size, const void *buffer);
+    herr_t  (*flush)(H5FD_t *file, hid_t dxpl_id, unsigned closing);
+    herr_t  (*lock)(H5FD_t *file, unsigned char *oid, unsigned lock_type, hbool_t last);
+    herr_t  (*unlock)(H5FD_t *file, unsigned char *oid, hbool_t last);
+    H5FD_mem_t fl_map[H5FD_MEM_NTYPES];
+} H5FD_class_t;
+
+/* A free list is a singly-linked list of address/size pairs. */
+typedef struct H5FD_free_t {
+    haddr_t		addr;
+    hsize_t		size;
+    struct H5FD_free_t	*next;
+} H5FD_free_t;
+
+/*
+ * The main datatype for each driver. Public fields common to all drivers
+ * are declared here and the driver appends private fields in memory.
+ */
+struct H5FD_t {
+    hid_t               driver_id;      /*driver ID for this file   */
+    const H5FD_class_t *cls;            /*constant class info       */
+    unsigned long       fileno[2];      /* File serial number       */
+    unsigned long       feature_flags;  /* VFL Driver feature Flags */
+    hsize_t             threshold;      /* Threshold for alignment  */
+    hsize_t             alignment;      /* Allocation alignment     */
+    hsize_t             reserved_alloc; /* Space reserved for later alloc calls */
+
+    /* Metadata aggregation fields */
+    hsize_t             def_meta_block_size;  /* Metadata allocation
+                                               * block size (if
+                                               * aggregating metadata) */
+    hsize_t             cur_meta_block_size;  /* Current size of metadata
+                                               * allocation region left */
+    haddr_t             eoma;                 /* End of metadata
+                                               * allocated region */
+
+    /* "Small data" aggregation fields */
+    hsize_t             def_sdata_block_size;   /* "Small data"
+                                                 * allocation block size
+                                                 * (if aggregating "small
+                                                 * data") */
+    hsize_t             cur_sdata_block_size;   /* Current size of "small
+                                                 * data" allocation
+                                                 * region left */
+    haddr_t             eosda;                  /* End of "small data"
+                                                 * allocated region */
+
+    /* Metadata accumulator fields */
+    unsigned char      *meta_accum;     /* Buffer to hold the accumulated metadata */
+    haddr_t             accum_loc;      /* File location (offset) of the
+                                         * accumulated metadata */
+    size_t              accum_size;     /* Size of the accumulated
+                                         * metadata buffer used (in
+                                         * bytes) */
+    size_t              accum_buf_size; /* Size of the accumulated
+                                         * metadata buffer allocated (in
+                                         * bytes) */
+    unsigned            accum_dirty;    /* Flag to indicate that the
+                                         * accumulated metadata is dirty */
+    haddr_t             maxaddr;        /* For this file, overrides class */
+    H5FD_free_t        *fl[H5FD_MEM_NTYPES]; /* Freelist per allocation type */
+    hsize_t             maxsize;        /* Largest object on FL, or zero */
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Function prototypes */
+H5_DLL hid_t H5FDregister(const H5FD_class_t *cls);
+H5_DLL herr_t H5FDunregister(hid_t driver_id);
+H5_DLL H5FD_t *H5FDopen(const char *name, unsigned flags, hid_t fapl_id,
+                        haddr_t maxaddr);
+H5_DLL herr_t H5FDclose(H5FD_t *file);
+H5_DLL int H5FDcmp(const H5FD_t *f1, const H5FD_t *f2);
+H5_DLL int H5FDquery(const H5FD_t *f, unsigned long *flags);
+H5_DLL haddr_t H5FDalloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+H5_DLL herr_t H5FDfree(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                       haddr_t addr, hsize_t size);
+H5_DLL haddr_t H5FDrealloc(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                           haddr_t addr, hsize_t old_size, hsize_t new_size);
+H5_DLL haddr_t H5FDget_eoa(H5FD_t *file);
+H5_DLL herr_t H5FDset_eoa(H5FD_t *file, haddr_t eof);
+H5_DLL haddr_t H5FDget_eof(H5FD_t *file);
+H5_DLL herr_t H5FDget_vfd_handle(H5FD_t *file, hid_t fapl, void**file_handle);
+H5_DLL herr_t H5FDread(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                       haddr_t addr, size_t size, void *buf/*out*/);
+H5_DLL herr_t H5FDwrite(H5FD_t *file, H5FD_mem_t type, hid_t dxpl_id,
+                        haddr_t addr, size_t size, const void *buf);
+H5_DLL herr_t H5FDflush(H5FD_t *file, hid_t dxpl_id, unsigned closing);
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5FDsec2.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDsec2.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDsec2.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,889 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Thursday, July 29, 1999
+ *
+ * Purpose:	The POSIX unbuffered file driver using only the HDF5 public
+ *		API and with a few optimizations: the lseek() call is made
+ *		only when the current file position is unknown or needs to be
+ *		changed based on previous I/O through this driver (don't mix
+ *		I/O from this driver with I/O from other parts of the
+ *		application to the same file).
+ */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5FD_sec2_init_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FDsec2.h"		/* Sec2 file driver			*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"		/* Property lists			*/
+
+/* The driver identification number, initialized at runtime */
+static hid_t H5FD_SEC2_g = 0;
+
+/* File operations */
+#define OP_UNKNOWN	0
+#define OP_READ		1
+#define OP_WRITE	2
+
+/*
+ * The description of a file belonging to this driver. The `eoa' and `eof'
+ * determine the amount of hdf5 address space in use and the high-water mark
+ * of the file (the current size of the underlying Unix file). The `pos'
+ * value is used to eliminate file position updates when they would be a
+ * no-op. Unfortunately we've found systems that use separate file position
+ * indicators for reading and writing so the lseek can only be eliminated if
+ * the current operation is the same as the previous operation.  When opening
+ * a file the `eof' will be set to the current file size, `eoa' will be set
+ * to zero, `pos' will be set to H5F_ADDR_UNDEF (as it is when an error
+ * occurs), and `op' will be set to H5F_OP_UNKNOWN.
+ */
+typedef struct H5FD_sec2_t {
+    H5FD_t	pub;			/*public stuff, must be first	*/
+    int		fd;			/*the unix file			*/
+    haddr_t	eoa;			/*end of allocated region	*/
+    haddr_t	eof;			/*end of file; current file size*/
+    haddr_t	pos;			/*current file I/O position	*/
+    int		op;			/*last operation		*/
+#ifndef WIN32
+    /*
+     * On most systems the combination of device and i-node number uniquely
+     * identify a file.
+     */
+    dev_t	device;			/*file device number		*/
+    ino_t	inode;			/*file i-node number		*/
+#else
+    /*
+     * On WIN32 the low-order word of a unique identifier associated with the
+     * file and the volume serial number uniquely identify a file. This number
+     * (which, both? -rpm) may change when the system is restarted or when the
+     * file is opened. After a process opens a file, the identifier is
+     * constant until the file is closed. An application can use this
+     * identifier and the volume serial number to determine whether two
+     * handles refer to the same file.
+     */
+    DWORD fileindexlo;
+    DWORD fileindexhi;
+#endif
+} H5FD_sec2_t;
+
+
+/*
+ * This driver supports systems that have the lseek64() function by defining
+ * some macros here so we don't have to have conditional compilations later
+ * throughout the code.
+ *
+ * file_offset_t:	The datatype for file offsets, the second argument of
+ *			the lseek() or lseek64() call.
+ *
+ * file_seek:		The function which adjusts the current file position,
+ *			either lseek() or lseek64().
+ */
+/* adding for windows NT file system support. */
+
+#ifdef H5_HAVE_LSEEK64
+#   define file_offset_t	off64_t
+#   define file_seek		lseek64
+#   define file_truncate	ftruncate64
+#elif defined (WIN32) && !defined(__MWERKS__)
+# /*MSVC*/
+#   define file_offset_t __int64
+#   define file_seek _lseeki64
+#   define file_truncate	_chsize
+#else
+#   define file_offset_t	off_t
+#   define file_seek		lseek
+#   define file_truncate	HDftruncate
+#endif
+
+/*
+ * These macros check for overflow of various quantities.  These macros
+ * assume that file_offset_t is signed and haddr_t and size_t are unsigned.
+ *
+ * ADDR_OVERFLOW:	Checks whether a file address of type `haddr_t'
+ *			is too large to be represented by the second argument
+ *			of the file seek function.
+ *
+ * SIZE_OVERFLOW:	Checks whether a buffer size of type `hsize_t' is too
+ *			large to be represented by the `size_t' type.
+ *
+ * REGION_OVERFLOW:	Checks whether an address and size pair describe data
+ *			which can be addressed entirely by the second
+ *			argument of the file seek function.
+ */
+#define MAXADDR (((haddr_t)1<<(8*sizeof(file_offset_t)-1))-1)
+#define ADDR_OVERFLOW(A)	(HADDR_UNDEF==(A) ||			      \
+				 ((A) & ~(haddr_t)MAXADDR))
+#define SIZE_OVERFLOW(Z)	((Z) & ~(hsize_t)MAXADDR)
+#define REGION_OVERFLOW(A,Z)	(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) ||      \
+                                 HADDR_UNDEF==(A)+(Z) ||		      \
+				 (file_offset_t)((A)+(Z))<(file_offset_t)(A))
+
+/* Prototypes */
+static H5FD_t *H5FD_sec2_open(const char *name, unsigned flags, hid_t fapl_id,
+			      haddr_t maxaddr);
+static herr_t H5FD_sec2_close(H5FD_t *_file);
+static int H5FD_sec2_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
+static herr_t H5FD_sec2_query(const H5FD_t *_f1, unsigned long *flags);
+static haddr_t H5FD_sec2_get_eoa(H5FD_t *_file);
+static herr_t H5FD_sec2_set_eoa(H5FD_t *_file, haddr_t addr);
+static haddr_t H5FD_sec2_get_eof(H5FD_t *_file);
+static herr_t  H5FD_sec2_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
+static herr_t H5FD_sec2_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
+			     size_t size, void *buf);
+static herr_t H5FD_sec2_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
+			      size_t size, const void *buf);
+static herr_t H5FD_sec2_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
+
+static const H5FD_class_t H5FD_sec2_g = {
+    "sec2",					/*name			*/
+    MAXADDR,					/*maxaddr		*/
+    H5F_CLOSE_WEAK,				/* fc_degree		*/
+    NULL,					/*sb_size		*/
+    NULL,					/*sb_encode		*/
+    NULL,					/*sb_decode		*/
+    0, 						/*fapl_size		*/
+    NULL,					/*fapl_get		*/
+    NULL,					/*fapl_copy		*/
+    NULL, 					/*fapl_free		*/
+    0,						/*dxpl_size		*/
+    NULL,					/*dxpl_copy		*/
+    NULL,					/*dxpl_free		*/
+    H5FD_sec2_open,			        /*open			*/
+    H5FD_sec2_close,		                /*close			*/
+    H5FD_sec2_cmp,			        /*cmp			*/
+    H5FD_sec2_query,		                /*query			*/
+    NULL,					/*alloc			*/
+    NULL,					/*free			*/
+    H5FD_sec2_get_eoa,				/*get_eoa		*/
+    H5FD_sec2_set_eoa, 				/*set_eoa		*/
+    H5FD_sec2_get_eof,				/*get_eof		*/
+    H5FD_sec2_get_handle,                       /*get_handle            */
+    H5FD_sec2_read,				/*read			*/
+    H5FD_sec2_write,				/*write			*/
+    H5FD_sec2_flush,				/*flush			*/
+    NULL,                                       /*lock                  */
+    NULL,                                       /*unlock                */
+    H5FD_FLMAP_SINGLE 				/*fl_map		*/
+};
+
+/* Declare a free list to manage the H5FD_sec2_t struct */
+H5FL_DEFINE_STATIC(H5FD_sec2_t);
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5FD_sec2_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5FD_sec2_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5FD_sec2_init currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5FD_sec2_init_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_sec2_init_interface)
+
+    FUNC_LEAVE_NOAPI(H5FD_sec2_init())
+} /* H5FD_sec2_init_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_sec2_init
+ *
+ * Purpose:	Initialize this driver by registering the driver with the
+ *		library.
+ *
+ * Return:	Success:	The driver ID for the sec2 driver.
+ *
+ *		Failure:	Negative.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5FD_sec2_init(void)
+{
+    hid_t ret_value;        /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_sec2_init, FAIL)
+
+    if (H5I_VFL!=H5I_get_type(H5FD_SEC2_g))
+        H5FD_SEC2_g = H5FD_register(&H5FD_sec2_g,sizeof(H5FD_class_t));
+
+    /* Set return value */
+    ret_value=H5FD_SEC2_g;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*---------------------------------------------------------------------------
+ * Function:	H5FD_sec2_term
+ *
+ * Purpose:	Shut down the VFD
+ *
+ * Return:	<none>
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, Jan 30, 2004
+ *
+ * Modification:
+ *
+ *---------------------------------------------------------------------------
+ */
+void
+H5FD_sec2_term(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_sec2_term)
+
+    /* Reset VFL ID */
+    H5FD_SEC2_g=0;
+
+    FUNC_LEAVE_NOAPI_VOID
+} /* end H5FD_sec2_term() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_fapl_sec2
+ *
+ * Purpose:	Modify the file access property list to use the H5FD_SEC2
+ *		driver defined in this source file.  There are no driver
+ *		specific properties.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, February 19, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fapl_sec2(hid_t fapl_id)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value;
+
+    FUNC_ENTER_API(H5Pset_fapl_sec2, FAIL)
+    H5TRACE1("e","i",fapl_id);
+
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+
+    ret_value= H5P_set_driver(plist, H5FD_SEC2, NULL);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_sec2_open
+ *
+ * Purpose:	Create and/or opens a Unix file as an HDF5 file.
+ *
+ * Return:	Success:	A pointer to a new file data structure. The
+ *				public fields will be initialized by the
+ *				caller, which is always H5FD_open().
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static H5FD_t *
+H5FD_sec2_open(const char *name, unsigned flags, hid_t UNUSED fapl_id,
+	       haddr_t maxaddr)
+{
+    int	o_flags;
+    int		fd=(-1);
+    H5FD_sec2_t	*file=NULL;
+#ifdef WIN32
+    HFILE filehandle;
+    struct _BY_HANDLE_FILE_INFORMATION fileinfo;
+#endif
+    h5_stat_t	sb;
+    H5FD_t	*ret_value;
+
+    FUNC_ENTER_NOAPI(H5FD_sec2_open, NULL)
+
+    /* Sanity check on file offsets */
+    assert(sizeof(file_offset_t)>=sizeof(size_t));
+
+    /* Check arguments */
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid file name")
+    if (0==maxaddr || HADDR_UNDEF==maxaddr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr")
+    if (ADDR_OVERFLOW(maxaddr))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, NULL, "bogus maxaddr")
+
+    /* Build the open flags */
+    o_flags = (H5F_ACC_RDWR & flags) ? O_RDWR : O_RDONLY;
+    if (H5F_ACC_TRUNC & flags) o_flags |= O_TRUNC;
+    if (H5F_ACC_CREAT & flags) o_flags |= O_CREAT;
+    if (H5F_ACC_EXCL & flags) o_flags |= O_EXCL;
+
+    /* Open the file */
+    if ((fd=HDopen(name, o_flags, 0666))<0)
+        HSYS_GOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file")
+    if (HDfstat(fd, &sb)<0)
+        HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, NULL, "unable to fstat file")
+
+    /* Create the new file struct */
+    if (NULL==(file=H5FL_CALLOC(H5FD_sec2_t)))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "unable to allocate file struct")
+
+    file->fd = fd;
+    H5_ASSIGN_OVERFLOW(file->eof,sb.st_size,h5_stat_size_t,haddr_t);
+    file->pos = HADDR_UNDEF;
+    file->op = OP_UNKNOWN;
+#ifdef WIN32
+    filehandle = _get_osfhandle(fd);
+    (void)GetFileInformationByHandle((HANDLE)filehandle, &fileinfo);
+    file->fileindexhi = fileinfo.nFileIndexHigh;
+    file->fileindexlo = fileinfo.nFileIndexLow;
+#else
+    file->device = sb.st_dev;
+    file->inode = sb.st_ino;
+#endif
+
+    /* Set return value */
+    ret_value=(H5FD_t*)file;
+
+done:
+    if(ret_value==NULL) {
+        if(fd>=0)
+            HDclose(fd);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_sec2_close
+ *
+ * Purpose:	Closes a Unix file.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1, file not closed.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_sec2_close(H5FD_t *_file)
+{
+    H5FD_sec2_t	*file = (H5FD_sec2_t*)_file;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_sec2_close, FAIL)
+
+    if (HDclose(file->fd)<0)
+        HSYS_GOTO_ERROR(H5E_IO, H5E_CANTCLOSEFILE, FAIL, "unable to close file")
+
+    H5FL_FREE(H5FD_sec2_t,file);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_sec2_cmp
+ *
+ * Purpose:	Compares two files belonging to this driver using an
+ *		arbitrary (but consistent) ordering.
+ *
+ * Return:	Success:	A value like strcmp()
+ *
+ *		Failure:	never fails (arguments were checked by the
+ *				caller).
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5FD_sec2_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
+{
+    const H5FD_sec2_t	*f1 = (const H5FD_sec2_t*)_f1;
+    const H5FD_sec2_t	*f2 = (const H5FD_sec2_t*)_f2;
+    int ret_value=0;
+
+    FUNC_ENTER_NOAPI(H5FD_sec2_cmp, H5FD_VFD_DEFAULT)
+
+#ifdef WIN32
+    if (f1->fileindexhi < f2->fileindexhi) HGOTO_DONE(-1)
+    if (f1->fileindexhi > f2->fileindexhi) HGOTO_DONE(1)
+
+    if (f1->fileindexlo < f2->fileindexlo) HGOTO_DONE(-1)
+    if (f1->fileindexlo > f2->fileindexlo) HGOTO_DONE(1)
+
+#else
+#ifdef H5_DEV_T_IS_SCALAR
+    if (f1->device < f2->device) HGOTO_DONE(-1)
+    if (f1->device > f2->device) HGOTO_DONE(1)
+#else /* H5_DEV_T_IS_SCALAR */
+    /* If dev_t isn't a scalar value on this system, just use memcmp to
+     * determine if the values are the same or not.  The actual return value
+     * shouldn't really matter...
+     */
+    if(HDmemcmp(&(f1->device),&(f2->device),sizeof(dev_t))<0) HGOTO_DONE(-1)
+    if(HDmemcmp(&(f1->device),&(f2->device),sizeof(dev_t))>0) HGOTO_DONE(1)
+#endif /* H5_DEV_T_IS_SCALAR */
+
+    if (f1->inode < f2->inode) HGOTO_DONE(-1)
+    if (f1->inode > f2->inode) HGOTO_DONE(1)
+#endif
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_sec2_query
+ *
+ * Purpose:	Set the flags that this VFL driver is capable of supporting.
+ *              (listed in H5FDpublic.h)
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, August 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_sec2_query(const H5FD_t UNUSED * _f, unsigned long *flags /* out */)
+{
+    herr_t ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_sec2_query, FAIL)
+
+    /* Set the VFL feature flags that this driver supports */
+    if(flags) {
+        *flags = 0;
+        *flags|=H5FD_FEAT_AGGREGATE_METADATA; /* OK to aggregate metadata allocations */
+        *flags|=H5FD_FEAT_ACCUMULATE_METADATA; /* OK to accumulate metadata for faster writes */
+        *flags|=H5FD_FEAT_DATA_SIEVE;       /* OK to perform data sieving for faster raw data reads & writes */
+        *flags|=H5FD_FEAT_AGGREGATE_SMALLDATA; /* OK to aggregate "small" raw data allocations */
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_sec2_get_eoa
+ *
+ * Purpose:	Gets the end-of-address marker for the file. The EOA marker
+ *		is the first address past the last byte allocated in the
+ *		format address space.
+ *
+ * Return:	Success:	The end-of-address marker.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August  2, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_sec2_get_eoa(H5FD_t *_file)
+{
+    H5FD_sec2_t	*file = (H5FD_sec2_t*)_file;
+    haddr_t ret_value;  /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_sec2_get_eoa, HADDR_UNDEF)
+
+    /* Set return value */
+    ret_value=file->eoa;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_sec2_set_eoa
+ *
+ * Purpose:	Set the end-of-address marker for the file. This function is
+ *		called shortly after an existing HDF5 file is opened in order
+ *		to tell the driver where the end of the HDF5 data is located.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_sec2_set_eoa(H5FD_t *_file, haddr_t addr)
+{
+    H5FD_sec2_t	*file = (H5FD_sec2_t*)_file;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_sec2_set_eoa, FAIL)
+
+    file->eoa = addr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_sec2_get_eof
+ *
+ * Purpose:	Returns the end-of-file marker, which is the greater of
+ *		either the Unix end-of-file or the HDF5 end-of-address
+ *		markers.
+ *
+ * Return:	Success:	End of file address, the first address past
+ *				the end of the "file", either the Unix file
+ *				or the HDF5 file.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_sec2_get_eof(H5FD_t *_file)
+{
+    H5FD_sec2_t	*file = (H5FD_sec2_t*)_file;
+    haddr_t ret_value;  /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_sec2_get_eof, HADDR_UNDEF)
+
+    /* Set return value */
+    ret_value=MAX(file->eof, file->eoa);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5FD_sec2_get_handle
+ *
+ * Purpose:        Returns the file handle of sec2 file driver.
+ *
+ * Returns:        Non-negative if succeed or negative if fails.
+ *
+ * Programmer:     Raymond Lu
+ *                 Sept. 16, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_sec2_get_handle(H5FD_t *_file, hid_t UNUSED fapl, void** file_handle)
+{
+    H5FD_sec2_t         *file = (H5FD_sec2_t *)_file;
+    herr_t              ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_sec2_get_handle, FAIL)
+
+    if(!file_handle)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file handle not valid")
+    *file_handle = &(file->fd);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_sec2_read
+ *
+ * Purpose:	Reads SIZE bytes of data from FILE beginning at address ADDR
+ *		into buffer BUF according to data transfer properties in
+ *		DXPL_ID.
+ *
+ * Return:	Success:	Zero. Result is stored in caller-supplied
+ *				buffer BUF.
+ *
+ *		Failure:	-1, Contents of buffer BUF are undefined.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_sec2_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
+	       size_t size, void *buf/*out*/)
+{
+    H5FD_sec2_t		*file = (H5FD_sec2_t*)_file;
+    ssize_t		nbytes;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_sec2_read, FAIL)
+
+    assert(file && file->pub.cls);
+    assert(buf);
+
+    /* Check for overflow conditions */
+    if (HADDR_UNDEF==addr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined")
+    if (REGION_OVERFLOW(addr, size))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
+    if (addr+size>file->eoa)
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
+
+    /* Seek to the correct location */
+    if ((addr!=file->pos || OP_READ!=file->op) &&
+            file_seek(file->fd, (file_offset_t)addr, SEEK_SET)<0)
+        HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
+
+    /*
+     * Read data, being careful of interrupted system calls, partial results,
+     * and the end of the file.
+     */
+    while (size>0) {
+        do {
+            nbytes = HDread(file->fd, buf, size);
+        } while (-1==nbytes && EINTR==errno);
+        if (-1==nbytes) /* error */
+            HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed")
+        if (0==nbytes) {
+            /* end of file but not end of format address space */
+            HDmemset(buf, 0, size);
+            break;
+        }
+        assert(nbytes>=0);
+        assert((size_t)nbytes<=size);
+        H5_CHECK_OVERFLOW(nbytes,ssize_t,size_t);
+        size -= (size_t)nbytes;
+        H5_CHECK_OVERFLOW(nbytes,ssize_t,haddr_t);
+        addr += (haddr_t)nbytes;
+        buf = (char*)buf + nbytes;
+    }
+
+    /* Update current position */
+    file->pos = addr;
+    file->op = OP_READ;
+
+done:
+    if(ret_value<0) {
+        /* Reset last file I/O information */
+        file->pos = HADDR_UNDEF;
+        file->op = OP_UNKNOWN;
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_sec2_write
+ *
+ * Purpose:	Writes SIZE bytes of data to FILE beginning at address ADDR
+ *		from buffer BUF according to data transfer properties in
+ *		DXPL_ID.
+ *
+ * Return:	Success:	Zero
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_sec2_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
+		size_t size, const void *buf)
+{
+    H5FD_sec2_t		*file = (H5FD_sec2_t*)_file;
+    ssize_t		nbytes;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_sec2_write, FAIL)
+
+    assert(file && file->pub.cls);
+    assert(buf);
+
+    /* Check for overflow conditions */
+    if (HADDR_UNDEF==addr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined")
+    if (REGION_OVERFLOW(addr, size))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
+    if (addr+size>file->eoa)
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
+
+    /* Seek to the correct location */
+    if ((addr!=file->pos || OP_WRITE!=file->op) &&
+            file_seek(file->fd, (file_offset_t)addr, SEEK_SET)<0)
+        HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
+
+    /*
+     * Write the data, being careful of interrupted system calls and partial
+     * results
+     */
+    while (size>0) {
+        do {
+            nbytes = HDwrite(file->fd, buf, size);
+        } while (-1==nbytes && EINTR==errno);
+        if (-1==nbytes) /* error */
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
+        assert(nbytes>0);
+        assert((size_t)nbytes<=size);
+        H5_CHECK_OVERFLOW(nbytes,ssize_t,size_t);
+        size -= (size_t)nbytes;
+        H5_CHECK_OVERFLOW(nbytes,ssize_t,haddr_t);
+        addr += (haddr_t)nbytes;
+        buf = (const char*)buf + nbytes;
+    }
+
+    /* Update current position and eof */
+    file->pos = addr;
+    file->op = OP_WRITE;
+    if (file->pos>file->eof)
+        file->eof = file->pos;
+
+done:
+    if(ret_value<0) {
+        /* Reset last file I/O information */
+        file->pos = HADDR_UNDEF;
+        file->op = OP_UNKNOWN;
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_sec2_flush
+ *
+ * Purpose:	Makes sure that the true file size is the same (or larger)
+ *		than the end-of-address.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5FD_sec2_flush(H5FD_t *_file, hid_t UNUSED dxpl_id, unsigned UNUSED closing)
+{
+    H5FD_sec2_t	*file = (H5FD_sec2_t*)_file;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_sec2_flush, FAIL)
+
+    assert(file);
+
+    /* Extend the file to make sure it's large enough */
+    if (file->eoa!=file->eof) {
+#ifdef WIN32
+        HFILE filehandle;   /* Windows file handle */
+        LARGE_INTEGER li;   /* 64-bit integer for SetFilePointer() call */
+
+        /* Map the posix file handle to a Windows file handle */
+        filehandle = _get_osfhandle(file->fd);
+
+        /* Translate 64-bit integers into form Windows wants */
+        /* [This algorithm is from the Windows documentation for SetFilePointer()] */
+        li.QuadPart = (LONGLONG)file->eoa;
+        (void)SetFilePointer((HANDLE)filehandle,li.LowPart,&li.HighPart,FILE_BEGIN);
+        if(SetEndOfFile((HANDLE)filehandle)==0)
+            HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
+#else /* WIN32 */
+        if (-1==file_truncate(file->fd, (file_offset_t)file->eoa))
+            HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
+#endif /* WIN32 */
+
+        /* Update the eof value */
+        file->eof = file->eoa;
+
+        /* Reset last file I/O information */
+        file->pos = HADDR_UNDEF;
+        file->op = OP_UNKNOWN;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}

Added: packages/hdf5/branches/upstream/current/src/H5FDsec2.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDsec2.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDsec2.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,40 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the sec2 driver.
+ */
+#ifndef H5FDsec2_H
+#define H5FDsec2_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_SEC2	(H5FD_sec2_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_DLL hid_t H5FD_sec2_init(void);
+H5_DLL void H5FD_sec2_term(void);
+H5_DLL herr_t H5Pset_fapl_sec2(hid_t fapl_id);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5FDsrb.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDsrb.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDsrb.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,843 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Raymond Lu <slu at ncsa.uiuc.edu>
+ *             Wednesday, April 12, 2000
+ *
+ * Purpose:    SRB I/O driver.
+ */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5FD_srb_init_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FDsrb.h"		/* SRB file driver			*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"		/* Property lists			*/
+
+
+#ifdef H5_HAVE_SRB
+
+/* The driver identification number, initialized at runtime */
+static hid_t H5FD_SRB_g = 0;
+
+/*
+ * This driver supports systems that have the lseek64() function by defining
+ * some macros here so we don't have to have conditional compilations later
+ * throughout the code.
+ *
+ * file_offset_t:	The datatype for file offsets, the second argument of
+ *			the lseek() or lseek64() call.
+ *
+ * file_seek:		The function which adjusts the current file position,
+ *			either lseek() or lseek64().
+ */
+/* adding for windows NT file system support. */
+
+#ifdef H5_HAVE_LSEEK64
+#   define file_offset_t	off64_t
+#   define file_seek		lseek64
+#elif defined (WIN32)
+#   ifdef __MWERKS__
+#       define file_offset_t off_t
+#       define file_seek lseek
+#   else /*MSVC*/
+#       define file_offset_t __int64
+#       define file_seek _lseeki64
+#   endif
+#else
+#   define file_offset_t	off_t
+#   define file_seek		lseek
+#endif
+
+
+/*
+ * These macros check for overflow of various quantities.  These macros
+ * assume that file_offset_t is signed and haddr_t and size_t are unsigned.
+ *
+ * ADDR_OVERFLOW:	Checks whether a file address of type `haddr_t'
+ *			is too large to be represented by the second argument
+ *			of the file seek function.
+ *
+ * SIZE_OVERFLOW:	Checks whether a buffer size of type `hsize_t' is too
+ *			large to be represented by the `size_t' type.
+ *
+ * REGION_OVERFLOW:	Checks whether an address and size pair describe data
+ *			which can be addressed entirely by the second
+ *			argument of the file seek function.
+ */
+#define MAXADDR (((haddr_t)1<<(8*sizeof(file_offset_t)-1))-1)
+#define ADDR_OVERFLOW(A)	(HADDR_UNDEF==(A) ||			      \
+				 ((A) & ~(haddr_t)MAXADDR))
+#define SIZE_OVERFLOW(Z)	((Z) & ~(hsize_t)MAXADDR)
+#define REGION_OVERFLOW(A,Z)	(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) ||      \
+				 sizeof(file_offset_t)<sizeof(size_t) ||      \
+                                 HADDR_UNDEF==(A)+(Z) ||		      \
+				 (file_offset_t)((A)+(Z))<(file_offset_t)(A))
+
+
+static H5FD_t *H5FD_srb_open(const char *name, unsigned flags, hid_t fapl_id,
+	       	             haddr_t maxaddr);
+static herr_t  H5FD_srb_close(H5FD_t *_file);
+static herr_t H5FD_srb_query(const H5FD_t *_f1, unsigned long *flags);
+static haddr_t H5FD_srb_get_eoa(H5FD_t *_file);
+static herr_t  H5FD_srb_set_eoa(H5FD_t *_file, haddr_t addr);
+static haddr_t H5FD_srb_get_eof(H5FD_t *_file);
+static herr_t  H5FD_srb_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
+static herr_t  H5FD_srb_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
+			     size_t size, void *buf);
+static herr_t  H5FD_srb_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
+			      size_t size, const void *buf);
+static herr_t  H5FD_srb_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
+
+/* The description of a file belonging to this driver. */
+typedef struct H5FD_srb_t {
+    H5FD_t	pub;			/*public stuff, must be first	*/
+    int		fd;			/*file descriptor    		*/
+    srbConn     *srb_conn;              /*SRB connection handler        */
+    SRB_Info    info;                   /*file information              */
+    haddr_t	eoa;			/*end of allocated region	*/
+    haddr_t	eof;			/*end of file; current file size*/
+    haddr_t	pos;			/*current file I/O position	*/
+} H5FD_srb_t;
+
+/* SRB-specific file access properties */
+typedef struct H5FD_srb_fapl_t {
+    srbConn       *srb_conn;            /*SRB connection handler        */
+    SRB_Info      info;                 /*file information              */
+} H5FD_srb_fapl_t;
+
+/* SRB file driver information */
+static const H5FD_class_t H5FD_srb_g = {
+    "srb",					/*name			*/
+    MAXADDR,					/*maxaddr		*/
+    H5F_CLOSE_WEAK,				/* fc_degree		*/
+    NULL,					/*sb_size		*/
+    NULL,					/*sb_encode		*/
+    NULL,					/*sb_decode		*/
+    sizeof(H5FD_srb_fapl_t), 			/*fapl_size		*/
+    NULL,					/*fapl_get		*/
+    NULL,					/*fapl_copy		*/
+    NULL, 					/*fapl_free		*/
+    0,						/*dxpl_size		*/
+    NULL,					/*dxpl_copy		*/
+    NULL,					/*dxpl_free		*/
+    H5FD_srb_open,         	 		/*open			*/
+    H5FD_srb_close,		        	/*close			*/
+    NULL,				        /*cmp			*/
+    H5FD_srb_query,				/*query			*/
+    NULL,					/*alloc			*/
+    NULL,					/*free			*/
+    H5FD_srb_get_eoa,           		/*get_eoa		*/
+    H5FD_srb_set_eoa, 		                /*set_eoa		*/
+    H5FD_srb_get_eof,				/*get_eof		*/
+    H5FD_srb_get_handle,                        /*get_handle            */
+    H5FD_srb_read,				/*read			*/
+    H5FD_srb_write,				/*write			*/
+    H5FD_srb_flush,				/*flush			*/
+    NULL,                                       /*lock                  */
+    NULL,                                       /*unlock                */
+    H5FD_FLMAP_SINGLE 				/*fl_map		*/
+};
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5FD_srb_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5FD_srb_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5FD_srb_init currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5FD_srb_init_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_srb_init_interface)
+
+    FUNC_LEAVE_NOAPI(H5FD_srb_init())
+} /* H5FD_srb_init_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_srb_init
+ *
+ * Purpose:     Initialize this driver by registering the driver with the
+ *              library.
+ *
+ * Return:      Success:        The driver ID for the srb driver.
+ *
+ *              Failure:        Negative.
+ *
+ * Programmer:  Raymond Lu
+ *              Wednesday, April 12, 2000
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5FD_srb_init(void)
+{
+    hid_t ret_value=H5FD_SRB_g; /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_srb_init, FAIL)
+
+    if(H5I_VFL != H5Iget_type(H5FD_SRB_g))
+        H5FD_SRB_g = H5FD_register(&H5FD_srb_g,sizeof(H5FD_class_t));
+
+    /* Set return value */
+    ret_value=H5FD_SRB_g;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*---------------------------------------------------------------------------
+ * Function:	H5FD_srb_term
+ *
+ * Purpose:	Shut down the VFD
+ *
+ * Return:	<none>
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, Jan 30, 2004
+ *
+ * Modification:
+ *
+ *---------------------------------------------------------------------------
+ */
+void
+H5FD_srb_term(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_srb_term)
+
+    /* Reset VFL ID */
+    H5FD_SRB_g=0;
+
+    FUNC_LEAVE_NOAPI_VOID
+} /* end H5FD_srb_term() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Pset_fapl_srb
+ *
+ * Purpose:     Store srb connection(client to server) handler SRB_CONN
+ *              after connected and user supplied INFO in the file access
+ *              property list FAPL_ID, which can be used to create or open
+ *              file.
+ *
+ * Return:      Success:        Non-negative
+ *
+ *              Failure:        Negative
+ *
+ * Programmer:  Raymond Lu
+ *              April 12, 2000
+ *
+ * Modifications:
+ *
+ *		Raymond Lu, 2001-10-25
+ *		Use the new generic property list for argument checking.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fapl_srb(hid_t fapl_id, SRB_Info info)
+{
+    H5FD_srb_fapl_t fa;
+    int srb_status;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value;
+
+    FUNC_ENTER_API(H5Pset_fapl_srb, FAIL)
+    /*NO TRACE*/
+
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+
+    /*connect to SRB server */
+    fa.srb_conn = clConnect(info.srbHost, info.srbPort, info.srbAuth);
+    if((srb_status = clStatus(fa.srb_conn)) != CLI_CONNECTION_OK) {
+        fprintf(stderr,"%s",clErrorMessage(fa.srb_conn));
+        clFinish(fa.srb_conn);
+
+        /*not sure about first 2 parameters. */
+        HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "Connection to srbMaster failed.")
+    }
+
+    fa.info = info;
+    ret_value = H5P_set_driver(plist, H5FD_SRB, &fa);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Pget_fapl_srb
+ *
+ * Purpose:     If the file access property list is set to the H5FD_SRB
+ *              driver then this function returns the srb file INFO.
+ *
+ * Return:      Success:        File INFO is returned.
+ *              Failure:        Negative
+ *
+ * Programmer:  Raymond Lu
+ *              April 12, 2000
+ *
+ * Modifications:
+ *
+ *		Raymond Lu, 2001-10-25
+ *		Use the new generic property list for checking property list
+ *		ID.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_fapl_srb(hid_t fapl_id, SRB_Info *info/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    H5FD_srb_fapl_t *fa;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Pget_fapl_srb, FAIL)
+    H5TRACE2("e","ix",fapl_id,info);
+
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
+    if(H5FD_SRB != H5P_get_driver(plist))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "incorrect VFL driver")
+    if(NULL==(fa=H5P_get_driver_info(plist)))
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "bad VFL driver info")
+
+    if(info)
+        *info = fa->info;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_srb_open
+ *
+ * Purpose:     Opens a file with name NAME.  The FLAGS are a bit field with
+ *              purpose similar to the second argument of open(2) and which
+ *              are defined in H5Fpublic.h. The file access property list
+ *              FAPL_ID contains the properties driver properties and MAXADDR
+ *              is the largest address which this file will be expected to
+ *              access.
+ *
+ * Return:      Success:        A new file pointer.
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  Raymond Lu
+ *              April 12, 2000
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static H5FD_t *
+H5FD_srb_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
+{
+    struct srbStat        srb_stat;
+    H5FD_srb_fapl_t       *fa=NULL;
+    H5FD_srb_fapl_t       _fa;
+    H5FD_srb_t            *file;
+    int srb_fid;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    H5FD_t            *ret_value;
+
+    FUNC_ENTER_NOAPI(H5FD_srb_open, FAIL)
+
+    /* Check arguments */
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid file name")
+    if (0==maxaddr || HADDR_UNDEF==maxaddr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr")
+    if (ADDR_OVERFLOW(maxaddr))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr")
+
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+    if(H5P_FILE_ACCESS_DEFAULT==fapl_id || H5FD_SRB!=H5P_get_driver(plist)) {
+        HDmemset((void*)&_fa, 0, sizeof(H5FD_srb_fapl_t));
+        fa = &_fa;
+    }
+    else {
+        fa = H5P_get_driver_info(plist);
+        assert(fa);
+    }
+
+    /* When I come down here, the possible flag values and the correct
+     * responses are given here :-
+     *
+     * 1. H5F_ACC_CREAT | H5F_ACC_RDWR | H5F_ACC_EXCL : The file is
+     *    a new one. Go ahead and open it with srbObjCreate.
+     * 2. H5F_ACC_CREAT | H5F_ACC_RDWR | H5F_ACC_TRUNC : how do I handle this?
+     *    srbObjCreate doesn't support truncate while srbObjOpen doesn't
+     *    support create.  Try to call both srbFileCreate and srbFileOpen!
+     * 3. H5F_ACC_RDWR | H5F_ACC_TRUNC : Use O_RDWR | O_TRUNC with srbObjOpen.
+     * 4. H5F_ACC_RDWR : Use O_RDWR with srbObjOpen.
+     * 5. Flag is not set : Use O_RDONLY with srbObjOpen.
+     *
+     * (In srbObjOpen, O_CREATE is not supported.  For file creation, use
+     *  srbObjCreate.)
+     */
+
+    if((flags & H5F_ACC_CREAT) && (flags & H5F_ACC_RDWR) &&
+       (flags & H5F_ACC_EXCL))
+        srb_fid = srbFileCreate(fa->srb_conn, fa->info.storSysType,
+            fa->info.srbHost, name, fa->info.mode, fa->info.size);
+    else if((flags & H5F_ACC_CREAT) && (flags & H5F_ACC_RDWR) &&
+	    (flags & H5F_ACC_TRUNC)) {
+        if( (srb_fid = srbFileCreate(fa->srb_conn, fa->info.storSysType,
+            fa->info.srbHost, name, fa->info.mode, fa->info.size)) < 0 ) {
+            srb_fid = srbFileOpen(fa->srb_conn, fa->info.storSysType,
+                 fa->info.srbHost, name, O_RDWR|O_TRUNC, fa->info.mode);
+	}
+    }
+    else if((flags & H5F_ACC_RDWR) && (flags & H5F_ACC_TRUNC))
+        srb_fid = srbFileOpen(fa->srb_conn, fa->info.storSysType,
+            fa->info.srbHost, name, O_RDWR|O_TRUNC, fa->info.mode);
+    else if(flags & H5F_ACC_RDWR)
+        srb_fid = srbFileOpen(fa->srb_conn, fa->info.storSysType,
+            fa->info.srbHost, name, O_RDWR, fa->info.mode);
+    else
+        srb_fid = srbFileOpen(fa->srb_conn, fa->info.storSysType,
+            fa->info.srbHost, name, O_RDONLY, fa->info.mode);
+
+
+    if(srb_fid < 0) {
+#ifdef OLD_WAY
+        fprintf(stderr, "cannot open file %s\n", name);
+        fprintf(stderr,"%s",clErrorMessage(fa->srb_conn));
+        clFinish(fa->srb_conn);
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, NULL, "cannot open file")
+#else /* OLD_WAY */
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, NULL, clErrorMessage(fa->srb_conn))
+#endif /* OLD_WAY */
+    }
+
+    if(srbFileStat(fa->srb_conn, fa->info.storSysType, fa->info.srbHost, name,
+            &srb_stat)!=0) {
+#ifdef OLD_WAY
+        srbFileClose(fa->srb_conn, srb_fid);
+        clFinish(fa->srb_conn);
+        HGOTO_ERROR(H5E_IO, H5E_BADFILE, NULL, "SRB file stat failed")
+#else /* OLD_WAY */
+        HGOTO_ERROR(H5E_IO, H5E_BADFILE, NULL, "SRB file stat failed")
+#endif /* OLD_WAY */
+    }
+
+    if (NULL==(file=H5MM_calloc(sizeof(H5FD_srb_t))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate file struct")
+
+    file->fd = srb_fid;
+    file->eof = srb_stat.st_size;
+    file->pos = HADDR_UNDEF;
+    file->srb_conn = fa->srb_conn;
+    file->info = fa->info;
+
+    /* Set return value */
+    ret_value=(H5FD_t*)file;
+
+done:
+    if(ret_value==NULL) {
+        if(fa!=NULL)
+            clFinish(fa->srb_conn);
+        if(srb_fid>=0)
+            srbFileClose(fa->srb_conn, srb_fid);
+    } /* end if */
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_srb_close
+ *
+ * Purpose:     Closes a file and srb connection.
+ *
+ * Return:      Success:        Non-negative
+ *
+ *              Failure:        Negative
+ *
+ * Programmer:  Raymond Lu
+ * Modification:
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_srb_close(H5FD_t *_file)
+{
+    H5FD_srb_t *file = (H5FD_srb_t *)_file;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_srb_close, FAIL)
+
+    srbFileClose(file->srb_conn, file->fd);
+    clFinish(file->srb_conn);
+
+    H5MM_xfree(file);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_srb_query
+ *
+ * Purpose:	Set the flags that this VFL driver is capable of supporting.
+ *              (listed in H5FDpublic.h)
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, September 26, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_srb_query(const UNUSED H5FD_t *_f, unsigned long *flags /* out */)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_srb_query, FAIL)
+
+    /* Set the VFL feature flags that this driver supports */
+    if(flags) {
+        *flags = 0;
+        *flags|=H5FD_FEAT_DATA_SIEVE;       /* OK to perform data sieving for faster raw data reads & writes */
+        *flags|=H5FD_FEAT_AGGREGATE_SMALLDATA; /* OK to aggregate "small" raw data allocations */
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_srb_get_eoa
+ *
+ * Purpose:     Gets the end-of-address marker for the file. The EOA marker
+ *              is the first address past the last byte allocated in the
+ *              format address space.
+ *
+ * Return:      Success:        The end-of-address marker.
+ *
+ *              Failure:        HADDR_UNDEF
+ *
+ * Programmer:  Raymond Lu
+ *              April 12, 2000
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_srb_get_eoa(H5FD_t *_file)
+{
+    H5FD_srb_t *file = (H5FD_srb_t *)_file;
+    haddr_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_srb_get_eoa, HADDR_UNDEF)
+
+    /* Set return value */
+    ret_value=file->eoa;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_srb_set_eoa
+ *
+ * Purpose:     Set the end-of-address marker for the file. This function is
+ *              called shortly after an existing HDF5 file is opened in order
+ *              to tell the driver where the end of the HDF5 data is located.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        -1
+ *
+ * Programmer:  Robb Matzke
+ *              Friday, August 6, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_srb_set_eoa(H5FD_t *_file, haddr_t addr)
+{
+    H5FD_srb_t *file = (H5FD_srb_t *)_file;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_srb_set_eoa, FAIL)
+
+    file->eoa = addr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_srb_get_eof
+ *
+ * Purpose:     Gets the end-of-file marker for the file. The EOF marker
+ *              is the real size of the file.
+ *
+ * Return:      Success:        The end-of-address marker.
+ *
+ *              Failure:        HADDR_UNDEF
+ *
+ * Programmer:  Raymond Lu
+ *              April 12, 2000
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_srb_get_eof(H5FD_t *_file)
+{
+    H5FD_srb_t *file = (H5FD_srb_t *)_file;
+    haddr_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_srb_get_eof, HADDR_UNDEF)
+
+    /* Set return value */
+    ret_value=file->eof;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5FD_srb_get_handle
+ *
+ * Purpose:        Returns the file handle of SRB file driver.
+ *
+ * Returns:        Non-negative if succeed or negative if fails.
+ *
+ * Programmer:     Raymond Lu
+ *                 Sept. 16, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_srb_get_handle(H5FD_t *_file, hid_t UNUSED fapl, void** file_handle)
+{
+    H5FD_srb_t          *file = (H5FD_srb_t *)_file;
+    herr_t              ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_srb_get_eof, FAIL)
+
+    if(!file_handle)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file handle not valid")
+
+    *file_handle = &(file->fd);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_srb_read
+ *
+ * Purpose:     Reads SIZE bytes of data from FILE beginning at address ADDR
+ *              into buffer BUF.
+ *
+ * Return:      Success:        Zero. Result is stored in caller-supplied
+ *                              buffer BUF.
+ *
+ *              Failure:        -1, Contents of buffer BUF are undefined.
+ *
+ * Programmer:  Raymond Lu
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_srb_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
+              size_t size, void *buf)
+{
+    H5FD_srb_t *file = (H5FD_srb_t*)_file;
+    ssize_t    nbytes;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_srb_read, FAIL)
+
+    /* Check for overflow conditions */
+    if (HADDR_UNDEF==addr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "addr undefined")
+    if (REGION_OVERFLOW(addr, size))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr too large")
+    if (addr+size>file->eoa)
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr too large")
+
+    if( addr!=file->pos &&
+            srbFileSeek(file->srb_conn, (int)file->fd, (int)addr, SEEK_SET)<0 )
+        HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "srb file seek failed")
+
+    /*
+     * Read data, being careful of interrupted system calls, partial results,
+     * and the end of the file.
+     */
+    while(size>0) {
+        if((nbytes=srbFileRead(file->srb_conn, (int)file->fd, (char*)buf, size))<0)
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "srb file write failed")
+
+        if (0==nbytes) {
+            /*end of file but not end of format address space*/
+            HDmemset(buf, 0, size);
+            size = 0;
+        }
+        size -= nbytes;
+        addr += (haddr_t)nbytes;
+        buf = (char*)buf + nbytes;
+    }
+
+    /* Update current position */
+    file->pos = addr;
+
+done:
+    if(ret_value<0) {
+        /* Reset file position */
+        file->pos = HADDR_UNDEF;
+
+        /* Close connection, etc. */
+        srbFileClose(file->srb_conn, file->fd);
+        clFinish(file->srb_conn);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_srb_write
+ *
+ * Purpose:     Writes SIZE bytes of data to FILE beginning at address ADDR
+ *              from buffer BUF.
+ *
+ * Return:      Success:        Zero.
+ *
+ *              Failure:        -1
+ *
+ * Programmer:  Raymond Lu
+ *              April 12, 2000
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_srb_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
+               size_t size, const void *buf)
+{
+    H5FD_srb_t *file = (H5FD_srb_t*)_file;
+    ssize_t    nbytes;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_srb_write, FAIL)
+
+    /* Check for overflow conditions */
+    if (HADDR_UNDEF==addr)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "addr undefined")
+    if (REGION_OVERFLOW(addr, size))
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr too large")
+    if (addr+size>file->eoa)
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr too large")
+
+    if( addr!=file->pos &&
+            srbFileSeek(file->srb_conn, (int)file->fd, (int)addr, SEEK_SET)<0 )
+        HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "srb file seek failed")
+
+    while(size>0) {
+        if( (nbytes=srbFileWrite(file->srb_conn, (int)file->fd, (char*)buf, size)) < 0 )
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "srb file write failed")
+
+        size -= nbytes;
+        addr += (haddr_t)nbytes;
+        buf  =  (const char*)buf + nbytes;
+    }
+
+    /* Update current position and eof */
+    file->pos = addr;
+    if(file->pos > file->eof)
+         file->eof = file->pos;
+
+done:
+    if(ret_value<0) {
+        /* Reset file position */
+        file->pos = HADDR_UNDEF;
+
+        /* Close connection, etc. */
+        srbFileClose(file->srb_conn, file->fd);
+        clFinish(file->srb_conn);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5FD_srb_flush
+ *
+ * Purpose:     Makes sure that all data is on disk.
+ *
+ * Return:      Success:        Non-negative
+ *
+ *              Failure:        Negative
+ *
+ * Programmer:  Raymond Lu
+ *              April 12, 2000
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_srb_flush(H5FD_t *_file, hid_t dxpl_id, unsigned UNUSED closing)
+{
+    H5FD_srb_t *file = (H5FD_srb_t*)_file;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_srb_flush, FAIL)
+
+    if(srbFileSync(file->srb_conn, file->fd) != 0)
+        HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "srb file sync failed")
+
+done:
+    if(ret_value<0) {
+        srbFileClose(file->srb_conn, file->fd);
+        clFinish(file->srb_conn);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+#endif  /* H5_HAVE_SRB */

Added: packages/hdf5/branches/upstream/current/src/H5FDsrb.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDsrb.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDsrb.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,57 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Raymond Lu <slu at ncsa.uiuc.edu>
+ *             Wednesday, April 12, 2000
+ * Purpose:    The public header file for the SRB driver.
+ */
+#ifndef H5FDsrb_H
+#define H5FDsrb_H
+
+#include "H5FDpublic.h"
+#include "H5Ipublic.h"
+
+#ifdef H5_HAVE_SRB
+
+#define H5FD_SRB   (H5FD_srb_init())
+
+typedef struct SRB_Info {    /* Define the SRB info object.                  */
+    char *srbHost;           /* SRB host address of server                   */
+    char *srbPort;           /* SRB host port number                         */
+    char *srbAuth;           /* SRB Authentication-password                  */
+    int  storSysType;        /* Storage Type: 0=Unix, 1=UniTree, 2=HPSS,
+                              *               3=FTP, 4=HTTP                  */
+    int  mode;               /* File mode-Unix access mode                   */
+    int  size;               /* File Size-Only valid for HPSS, -1 is default */
+} SRB_Info;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_DLL hid_t  H5FD_srb_init(void);
+H5_DLL void H5FD_srb_term(void);
+H5_DLL herr_t H5Pset_fapl_srb(hid_t fapl_id, SRB_Info info);
+H5_DLL herr_t H5Pget_fapl_srb(hid_t fapl_id, SRB_Info *info);
+
+#ifdef __cplusplus
+}
+#endif
+
+#else
+#define H5FD_SRB   (-1)
+#endif /* H5_HAVE_SRB */
+
+#endif /* H5FDsrb_H   */

Added: packages/hdf5/branches/upstream/current/src/H5FDstdio.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDstdio.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDstdio.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,927 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Robb Matzke <matzke at llnl.gov>
+ *	      	Wednesday, October 22, 1997
+ *
+ * Purpose:   	This is the Posix stdio.h I/O subclass of H5Flow.
+ *		It also serves as an example of coding a simple file driver,
+ *		therefore, it should not use any non-public definitions.
+ *
+ * Notes:  Ported to the new H5FD architecture on 10/18/99 - QAK
+ *
+ */
+#include <assert.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+
+/* Disable certain warnings in PC-Lint: */
+/*lint --emacro( {534, 830}, H5P_FILE_ACCESS) */
+/*lint --emacro( {534, 830}, H5F_ACC_RDWR, H5F_ACC_EXCL) */
+/*lint -esym( 534, H5Eclear, H5Epush) */
+
+#include "hdf5.h"
+
+#ifdef H5_HAVE_STDIO_H
+#include <stdio.h>
+#endif
+#ifdef H5_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#ifdef WIN32
+#include <windows.h>
+#include <io.h>
+
+/* This is not defined in the Windows header files */
+#ifndef F_OK
+#define F_OK 00
+#endif
+
+#endif
+
+
+#ifdef MAX
+#undef MAX
+#endif /* MAX */
+#define MAX(X,Y)	((X)>(Y)?(X):(Y))
+
+/* The driver identification number, initialized at runtime */
+static hid_t H5FD_STDIO_g = 0;
+
+/* File operations */
+typedef enum {
+    H5FD_STDIO_OP_UNKNOWN=0,
+    H5FD_STDIO_OP_READ=1,
+    H5FD_STDIO_OP_WRITE=2,
+    H5FD_STDIO_OP_SEEK=3
+} H5FD_stdio_file_op;
+
+/*
+ * The description of a file belonging to this driver. The `eoa' and `eof'
+ * determine the amount of hdf5 address space in use and the high-water mark
+ * of the file (the current size of the underlying Unix file). The `pos'
+ * value is used to eliminate file position updates when they would be a
+ * no-op. Unfortunately we've found systems that use separate file position
+ * indicators for reading and writing so the lseek can only be eliminated if
+ * the current operation is the same as the previous operation.  When opening
+ * a file the `eof' will be set to the current file size, `eoa' will be set
+ * to zero, `pos' will be set to H5F_ADDR_UNDEF (as it is when an error
+ * occurs), and `op' will be set to H5F_OP_UNKNOWN.
+ */
+typedef struct H5FD_stdio_t {
+    H5FD_t	pub;			/*public stuff, must be first	*/
+    FILE *	fp;			    /*the file handle */
+    haddr_t	eoa;			/*end of allocated region	*/
+    haddr_t	eof;			/*end of file; current file size*/
+    haddr_t	pos;			/*current file I/O position	*/
+    H5FD_stdio_file_op op;	/*last operation		*/
+    unsigned write_access;  /* Flag to indicate the file was opened with write access */
+#ifndef WIN32
+    /*
+     * On most systems the combination of device and i-node number uniquely
+     * identify a file.
+     */
+    dev_t	device;			/*file device number		*/
+    ino_t	inode;			/*file i-node number		*/
+#else
+    /*
+     * On WIN32 the low-order word of a unique identifier associated with the
+     * file and the volume serial number uniquely identify a file. This number
+     * (which, both? -rpm) may change when the system is restarted or when the
+     * file is opened. After a process opens a file, the identifier is
+     * constant until the file is closed. An application can use this
+     * identifier and the volume serial number to determine whether two
+     * handles refer to the same file.
+     */
+    DWORD fileindexlo;
+    DWORD fileindexhi;
+#endif
+} H5FD_stdio_t;
+
+/*
+ * These macros check for overflow of various quantities.  These macros
+ * assume that file_offset_t is signed and haddr_t and size_t are unsigned.
+ *
+ * ADDR_OVERFLOW:	Checks whether a file address of type `haddr_t'
+ *			is too large to be represented by the second argument
+ *			of the file seek function.
+ *
+ * SIZE_OVERFLOW:	Checks whether a buffer size of type `hsize_t' is too
+ *			large to be represented by the `size_t' type.
+ *
+ * REGION_OVERFLOW:	Checks whether an address and size pair describe data
+ *			which can be addressed entirely by the second
+ *			argument of the file seek function.
+ */
+/* adding for windows NT filesystem support. */
+#define MAXADDR (((haddr_t)1<<(8*sizeof(file_offset_t)-1))-1)
+#define ADDR_OVERFLOW(A)	(HADDR_UNDEF==(A) || ((A) & ~(haddr_t)MAXADDR))
+#define SIZE_OVERFLOW(Z)	((Z) & ~(hsize_t)MAXADDR)
+#define REGION_OVERFLOW(A,Z)	(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || \
+    HADDR_UNDEF==(A)+(Z) || (file_offset_t)((A)+(Z))<(file_offset_t)(A))
+
+#ifdef H5_HAVE_LSEEK64
+#   define file_offset_t	off64_t
+#   define file_truncate	ftruncate64
+#elif defined (WIN32) && !defined(__MWERKS__)
+# /*MSVC*/
+#   define file_offset_t __int64
+#   define file_truncate	_chsize
+#else
+#   define file_offset_t	off_t
+#   define file_truncate	ftruncate
+#endif
+
+/* Prototypes */
+static H5FD_t *H5FD_stdio_open(const char *name, unsigned flags,
+                 hid_t fapl_id, haddr_t maxaddr);
+static herr_t H5FD_stdio_close(H5FD_t *lf);
+static int H5FD_stdio_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
+static herr_t H5FD_stdio_query(const H5FD_t *_f1, unsigned long *flags);
+static haddr_t H5FD_stdio_get_eoa(H5FD_t *_file);
+static herr_t H5FD_stdio_set_eoa(H5FD_t *_file, haddr_t addr);
+static haddr_t H5FD_stdio_get_eof(H5FD_t *_file);
+static herr_t  H5FD_stdio_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
+static herr_t H5FD_stdio_read(H5FD_t *lf, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
+                size_t size, void *buf);
+static herr_t H5FD_stdio_write(H5FD_t *lf, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
+                size_t size, const void *buf);
+static herr_t H5FD_stdio_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
+
+static const H5FD_class_t H5FD_stdio_g = {
+    "stdio",				        /*name			*/
+    MAXADDR,				        /*maxaddr		*/
+    H5F_CLOSE_WEAK,				/* fc_degree		*/
+    NULL,					/*sb_size		*/
+    NULL,					/*sb_encode		*/
+    NULL,					/*sb_decode		*/
+    0, 						/*fapl_size		*/
+    NULL,					/*fapl_get		*/
+    NULL,					/*fapl_copy		*/
+    NULL, 					/*fapl_free		*/
+    0,						/*dxpl_size		*/
+    NULL,					/*dxpl_copy		*/
+    NULL,					/*dxpl_free		*/
+    H5FD_stdio_open,		                /*open			*/
+    H5FD_stdio_close,		                /*close			*/
+    H5FD_stdio_cmp,			        /*cmp			*/
+    H5FD_stdio_query,		                /*query			*/
+    NULL,					/*alloc			*/
+    NULL,					/*free			*/
+    H5FD_stdio_get_eoa,		                /*get_eoa		*/
+    H5FD_stdio_set_eoa, 	                /*set_eoa		*/
+    H5FD_stdio_get_eof,		                /*get_eof		*/
+    H5FD_stdio_get_handle,                      /*get_handle            */
+    H5FD_stdio_read,		                /*read			*/
+    H5FD_stdio_write,		                /*write			*/
+    H5FD_stdio_flush,		                /*flush			*/
+    NULL,                                       /*lock                  */
+    NULL,                                       /*unlock                */
+    H5FD_FLMAP_SINGLE 		                /*fl_map		*/
+};
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_stdio_init
+ *
+ * Purpose:	Initialize this driver by registering the driver with the
+ *		library.
+ *
+ * Return:	Success:	The driver ID for the stdio driver.
+ *
+ *		Failure:	Negative.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *      Stolen from the sec2 driver - QAK, 10/18/99
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5FD_stdio_init(void)
+{
+    /* Clear the error stack */
+    H5Eclear();
+
+    if (H5I_VFL!=H5Iget_type(H5FD_STDIO_g))
+        H5FD_STDIO_g = H5FDregister(&H5FD_stdio_g);
+    return(H5FD_STDIO_g);
+}
+
+
+/*---------------------------------------------------------------------------
+ * Function:	H5FD_stdio_term
+ *
+ * Purpose:	Shut down the VFD
+ *
+ * Return:	<none>
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, Jan 30, 2004
+ *
+ * Modification:
+ *
+ *---------------------------------------------------------------------------
+ */
+void
+H5FD_stdio_term(void)
+{
+    /* Reset VFL ID */
+    H5FD_STDIO_g=0;
+
+} /* end H5FD_stdio_term() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_fapl_stdio
+ *
+ * Purpose:	Modify the file access property list to use the H5FD_STDIO
+ *		driver defined in this source file.  There are no driver
+ *		specific properties.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, February 19, 1998
+ *
+ * Modifications:
+ *      Stolen from the sec2 driver - QAK, 10/18/99
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fapl_stdio(hid_t fapl_id)
+{
+    static const char *func="H5FDset_fapl_stdio";  /*for error reporting*/
+
+    /*NO TRACE*/
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    if(0 == H5Pisa_class(fapl_id, H5P_FILE_ACCESS))
+        H5Epush_ret(func, H5E_PLIST, H5E_BADTYPE, "not a file access property list", -1)
+
+    return H5Pset_driver(fapl_id, H5FD_STDIO, NULL);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_stdio_open
+ *
+ * Purpose:	Create and/or opens a Standard C file as an HDF5 file.
+ *
+ * Bugs:	H5F_ACC_EXCL has a race condition. (? -QAK)
+ *
+ * Errors:
+ *		IO	  CANTOPENFILE	File doesn't exist and CREAT wasn't
+ *					specified.
+ *		IO	  CANTOPENFILE	Fopen failed.
+ *		IO	  FILEEXISTS	File exists but CREAT and EXCL were
+ *					specified.
+ *
+ * Return:	Success:	A pointer to a new file data structure. The
+ *				public fields will be initialized by the
+ *				caller, which is always H5FD_open().
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, October 22, 1997
+ *
+ * Modifications:
+ *      Ported to VFL/H5FD layer - QAK, 10/18/99
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5FD_t *
+H5FD_stdio_open( const char *name, unsigned flags, hid_t fapl_id,
+    haddr_t maxaddr)
+{
+    FILE		   *f = NULL;
+    unsigned    write_access=0;     /* File opened with write access? */
+    H5FD_stdio_t	*file=NULL;
+    static const char *func="H5FD_stdio_open";  /* Function Name for error reporting */
+#ifdef WIN32
+	HFILE filehandle;
+	struct _BY_HANDLE_FILE_INFORMATION fileinfo;
+        int fd;
+#else /* WIN32 */
+    struct stat		    sb;
+#endif  /* WIN32 */
+
+    /* Sanity check on file offsets */
+    assert(sizeof(file_offset_t)>=sizeof(size_t));
+
+    /* Shut compiler up */
+    fapl_id=fapl_id;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Check arguments */
+    if (!name || !*name)
+        H5Epush_ret(func, H5E_ARGS, H5E_BADVALUE, "invalid file name", NULL)
+    if (0==maxaddr || HADDR_UNDEF==maxaddr)
+        H5Epush_ret(func, H5E_ARGS, H5E_BADRANGE, "bogus maxaddr", NULL)
+    if (ADDR_OVERFLOW(maxaddr))
+        H5Epush_ret(func, H5E_ARGS, H5E_OVERFLOW, "maxaddr too large", NULL)
+
+    if (access(name, F_OK) < 0) {
+        if ((flags & H5F_ACC_CREAT) && (flags & H5F_ACC_RDWR)) {
+            f = fopen(name, "wb+");
+            write_access=1;     /* Note the write access */
+        }
+        else
+            H5Epush_ret(func, H5E_IO, H5E_CANTOPENFILE, "file doesn't exist and CREAT wasn't specified", NULL)
+    } else if ((flags & H5F_ACC_CREAT) && (flags & H5F_ACC_EXCL)) {
+        H5Epush_ret(func, H5E_IO, H5E_FILEEXISTS, "file exists but CREAT and EXCL were specified", NULL)
+    } else if (flags & H5F_ACC_RDWR) {
+        if (flags & H5F_ACC_TRUNC)
+            f = fopen(name, "wb+");
+        else
+            f = fopen(name, "rb+");
+        write_access=1;     /* Note the write access */
+    } else {
+        f = fopen(name, "rb");
+    }
+    if (!f)
+        H5Epush_ret(func, H5E_IO, H5E_CANTOPENFILE, "fopen failed", NULL)
+
+    /* Build the return value */
+    if (NULL==(file = calloc(1,sizeof(H5FD_stdio_t))))
+        H5Epush_ret(func, H5E_RESOURCE, H5E_NOSPACE, "memory allocation failed", NULL)
+    file->fp = f;
+    file->op = H5FD_STDIO_OP_SEEK;
+    file->pos = HADDR_UNDEF;
+    file->write_access=write_access;    /* Note the write_access for later */
+    if (fseek(file->fp, 0, SEEK_END) < 0) {
+        file->op = H5FD_STDIO_OP_UNKNOWN;
+    } else {
+        long x = ftell (file->fp);
+        assert (x>=0);
+        file->eof = (haddr_t)x;
+    }
+
+    /* The unique key */
+#ifdef WIN32
+/*#error "Needs correct fileindexhi & fileindexlo, code below is from sec2 driver"*/
+    fd = _fileno(f);
+    filehandle = _get_osfhandle(fd);
+    (void)GetFileInformationByHandle((HANDLE)filehandle, &fileinfo);
+    file->fileindexhi = fileinfo.nFileIndexHigh;
+    file->fileindexlo = fileinfo.nFileIndexLow;
+#else
+    fstat(fileno(file->fp), &sb);
+    file->device = sb.st_dev;
+    file->inode = sb.st_ino;
+#endif
+    return((H5FD_t*)file);
+}   /* end H5FD_stdio_open() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_stdio_close
+ *
+ * Purpose:	Closes a file.
+ *
+ * Errors:
+ *		IO	  CLOSEERROR	Fclose failed.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, October 22, 1997
+ *
+ * Modifications:
+ *      Ported to VFL/H5FD layer - QAK, 10/18/99
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_stdio_close(H5FD_t *_file)
+{
+    H5FD_stdio_t	*file = (H5FD_stdio_t*)_file;
+    static const char *func="H5FD_stdio_close";  /* Function Name for error reporting */
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    if (fclose(file->fp) < 0)
+        H5Epush_ret(func, H5E_IO, H5E_CLOSEERROR, "fclose failed", -1)
+
+    free(file);
+
+    return(0);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_stdio_cmp
+ *
+ * Purpose:	Compares two files belonging to this driver using an
+ *		arbitrary (but consistent) ordering.
+ *
+ * Return:	Success:	A value like strcmp()
+ *
+ *		Failure:	never fails (arguments were checked by the
+ *				caller).
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *      Stolen from the sec2 driver - QAK, 10/18/99
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5FD_stdio_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
+{
+    const H5FD_stdio_t	*f1 = (const H5FD_stdio_t*)_f1;
+    const H5FD_stdio_t	*f2 = (const H5FD_stdio_t*)_f2;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+#ifdef WIN32
+    if (f1->fileindexhi < f2->fileindexhi) return -1;
+    if (f1->fileindexhi > f2->fileindexhi) return 1;
+
+    if (f1->fileindexlo < f2->fileindexlo) return -1;
+    if (f1->fileindexlo > f2->fileindexlo) return 1;
+
+#else
+#ifdef H5_DEV_T_IS_SCALAR
+    if (f1->device < f2->device) return -1;
+    if (f1->device > f2->device) return 1;
+#else /* H5_DEV_T_IS_SCALAR */
+    /* If dev_t isn't a scalar value on this system, just use memcmp to
+     * determine if the values are the same or not.  The actual return value
+     * shouldn't really matter...
+     */
+    if(memcmp(&(f1->device),&(f2->device),sizeof(dev_t))<0) return -1;
+    if(memcmp(&(f1->device),&(f2->device),sizeof(dev_t))>0) return 1;
+#endif /* H5_DEV_T_IS_SCALAR */
+
+    if (f1->inode < f2->inode) return -1;
+    if (f1->inode > f2->inode) return 1;
+#endif
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_stdio_query
+ *
+ * Purpose:	Set the flags that this VFL driver is capable of supporting.
+ *              (listed in H5FDpublic.h)
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, August 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_stdio_query(const H5FD_t *_f, unsigned long *flags /* out */)
+{
+    /* Shut compiler up */
+    _f=_f;
+
+    /* Set the VFL feature flags that this driver supports */
+    if(flags) {
+        *flags = 0;
+        *flags|=H5FD_FEAT_AGGREGATE_METADATA; /* OK to aggregate metadata allocations */
+        *flags|=H5FD_FEAT_ACCUMULATE_METADATA; /* OK to accumulate metadata for faster writes */
+        *flags|=H5FD_FEAT_DATA_SIEVE;       /* OK to perform data sieving for faster raw data reads & writes */
+        *flags|=H5FD_FEAT_AGGREGATE_SMALLDATA; /* OK to aggregate "small" raw data allocations */
+    }
+
+    return(0);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_stdio_get_eoa
+ *
+ * Purpose:	Gets the end-of-address marker for the file. The EOA marker
+ *		is the first address past the last byte allocated in the
+ *		format address space.
+ *
+ * Return:	Success:	The end-of-address marker.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August  2, 1999
+ *
+ * Modifications:
+ *      Stolen from the sec2 driver - QAK, 10/18/99
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_stdio_get_eoa(H5FD_t *_file)
+{
+    H5FD_stdio_t	*file = (H5FD_stdio_t*)_file;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    return(file->eoa);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_stdio_set_eoa
+ *
+ * Purpose:	Set the end-of-address marker for the file. This function is
+ *		called shortly after an existing HDF5 file is opened in order
+ *		to tell the driver where the end of the HDF5 data is located.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *      Stolen from the sec2 driver - QAK, 10/18/99
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_stdio_set_eoa(H5FD_t *_file, haddr_t addr)
+{
+    H5FD_stdio_t	*file = (H5FD_stdio_t*)_file;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    file->eoa = addr;
+
+    return(0);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FD_stdio_get_eof
+ *
+ * Purpose:	Returns the end-of-file marker, which is the greater of
+ *		either the Unix end-of-file or the HDF5 end-of-address
+ *		markers.
+ *
+ * Return:	Success:	End of file address, the first address past
+ *				the end of the "file", either the Unix file
+ *				or the HDF5 file.
+ *
+ *		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *      Stolen from the sec2 driver - QAK, 10/18/99
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_stdio_get_eof(H5FD_t *_file)
+{
+    H5FD_stdio_t	*file = (H5FD_stdio_t*)_file;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    return(MAX(file->eof, file->eoa));
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5FD_stdio_get_handle
+ *
+ * Purpose:        Returns the file handle of stdio file driver.
+ *
+ * Returns:        Non-negative if succeed or negative if fails.
+ *
+ * Programmer:     Raymond Lu
+ *                 Sept. 16, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_stdio_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle)
+{
+    H5FD_stdio_t       *file = (H5FD_stdio_t *)_file;
+    static const char  *func="H5FD_stdio_get_handle";  /* Function Name for error reporting */
+
+    /* Shut compiler up */
+    fapl=fapl;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    *file_handle = &(file->fp);
+    if(*file_handle==NULL)
+        H5Epush_ret(func, H5E_IO, H5E_WRITEERROR, "get handle failed", -1)
+    return(0);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_stdio_read
+ *
+ * Purpose:	Reads SIZE bytes beginning at address ADDR in file LF and
+ *		places them in buffer BUF.  Reading past the logical or
+ *		physical end of file returns zeros instead of failing.
+ *
+ * Errors:
+ *		IO	  READERROR	Fread failed.
+ *		IO	  SEEKERROR	Fseek failed.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, October 22, 1997
+ *
+ * Modifications:
+ *		June 2, 1998	Albert Cheng
+ *		Added xfer_mode argument
+ *
+ *      Ported to VFL/H5FD layer - QAK, 10/18/99
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_stdio_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
+    void *buf/*out*/)
+{
+    size_t		n;
+    H5FD_stdio_t		*file = (H5FD_stdio_t*)_file;
+    static const char *func="H5FD_stdio_read";  /* Function Name for error reporting */
+
+    /* Shut compiler up */
+    type=type;
+    dxpl_id=dxpl_id;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Check for overflow */
+    if (HADDR_UNDEF==addr)
+        H5Epush_ret (func, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1)
+    if (REGION_OVERFLOW(addr, size))
+        H5Epush_ret (func, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1)
+    if (addr+size>file->eoa)
+        H5Epush_ret (func, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1)
+
+    /* Check easy cases */
+    if (0 == size)
+        return(0);
+    if ((haddr_t)addr >= file->eof) {
+        memset(buf, 0, size);
+        return(0);
+    }
+
+    /*
+     * Seek to the correct file position.
+     */
+    if (!(file->op == H5FD_STDIO_OP_READ || file->op==H5FD_STDIO_OP_SEEK) ||
+            file->pos != addr) {
+        if (fseek(file->fp, (long)addr, SEEK_SET) < 0) {
+            file->op = H5FD_STDIO_OP_UNKNOWN;
+            file->pos = HADDR_UNDEF;
+            H5Epush_ret(func, H5E_IO, H5E_SEEKERROR, "fseek failed", -1)
+        }
+        file->pos = addr;
+    }
+
+    /*
+     * Read zeros past the logical end of file (physical is handled below)
+     */
+    if (addr + size > file->eof) {
+        size_t nbytes = (size_t) (addr + size - file->eof);
+        memset((unsigned char *)buf + size - nbytes, 0, nbytes);
+        size -= nbytes;
+    }
+
+    /*
+     * Read the data.  Since we're reading single-byte values, a partial read
+     * will advance the file position by N.  If N is zero or an error
+     * occurs then the file position is undefined.
+     */
+    n = fread(buf, 1, size, file->fp);
+    if (n == 0 && ferror(file->fp)) {
+        file->op = H5FD_STDIO_OP_UNKNOWN;
+        file->pos = HADDR_UNDEF;
+        H5Epush_ret(func, H5E_IO, H5E_READERROR, "fread failed", -1)
+    } else if (n < size) {
+        memset((unsigned char *)buf + n, 0, (size - n));
+    }
+
+    /*
+     * Update the file position data.
+     */
+    file->op = H5FD_STDIO_OP_READ;
+    file->pos = addr+n; /*checked for overflow above*/
+    return(0);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_stdio_write
+ *
+ * Purpose:	Writes SIZE bytes from the beginning of BUF into file LF at
+ *		file address ADDR.
+ *
+ * Errors:
+ *		IO	  SEEKERROR	Fseek failed.
+ *		IO	  WRITEERROR	Fwrite failed.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, October 22, 1997
+ *
+ * Modifications:
+ *		June 2, 1998	Albert Cheng
+ *		Added xfer_mode argument
+ *
+ *      Ported to VFL/H5FD layer - QAK, 10/18/99
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_stdio_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
+		size_t size, const void *buf)
+{
+    H5FD_stdio_t		*file = (H5FD_stdio_t*)_file;
+    static const char *func="H5FD_stdio_write";  /* Function Name for error reporting */
+
+    /* Shut compiler up */
+    dxpl_id=dxpl_id;
+    type=type;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Check for overflow conditions */
+    if (HADDR_UNDEF==addr)
+        H5Epush_ret (func, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1)
+    if (REGION_OVERFLOW(addr, size))
+        H5Epush_ret (func, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1)
+    if (addr+size>file->eoa)
+        H5Epush_ret (func, H5E_IO, H5E_OVERFLOW, "file address overflowed", -1)
+
+    /*
+     * Seek to the correct file position.
+     */
+    if ((file->op != H5FD_STDIO_OP_WRITE && file->op != H5FD_STDIO_OP_SEEK) ||
+                file->pos != addr) {
+        if (fseek(file->fp, (long)addr, SEEK_SET) < 0) {
+            file->op = H5FD_STDIO_OP_UNKNOWN;
+            file->pos = HADDR_UNDEF;
+            H5Epush_ret(func, H5E_IO, H5E_SEEKERROR, "fseek failed", -1)
+        }
+        file->pos = addr;
+    }
+
+    /*
+     * Write the buffer.  On successful return, the file position will be
+     * advanced by the number of bytes read.  Otherwise nobody knows where it
+     * is.
+     */
+    if (size != fwrite(buf, 1, size, file->fp)) {
+        file->op = H5FD_STDIO_OP_UNKNOWN;
+        file->pos = HADDR_UNDEF;
+        H5Epush_ret(func, H5E_IO, H5E_WRITEERROR, "fwrite failed", -1)
+    }
+
+    /*
+     * Update seek optimizing data.
+     */
+    file->op = H5FD_STDIO_OP_WRITE;
+    file->pos = addr + size;
+
+    /* Update EOF if necessary */
+    if (file->pos>file->eof)
+        file->eof = file->pos;
+
+    return(0);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_stdio_flush
+ *
+ * Purpose:	Makes sure that all data is on disk.
+ *
+ * Errors:
+ *		IO	  SEEKERROR     fseek failed.
+ *		IO	  WRITEERROR    fflush or fwrite failed.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, October 22, 1997
+ *
+ * Modifications:
+ *      Ported to VFL/H5FD layer - QAK, 10/18/99
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_stdio_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing)
+{
+    H5FD_stdio_t	*file = (H5FD_stdio_t*)_file;
+    static const char *func="H5FD_stdio_flush";  /* Function Name for error reporting */
+
+    /* Shut compiler up */
+    dxpl_id=dxpl_id;
+
+    /* Clear the error stack */
+    H5Eclear();
+
+    /* Only try to flush the file if we have write access */
+    if(file->write_access) {
+        /* Makes sure that the true file size is the same as the end-of-address. */
+        if (file->eoa!=file->eof) {
+#ifdef WIN32
+            int fd=_fileno(file->fp);     /* File descriptor for HDF5 file */
+            HFILE filehandle;   /* Windows file handle */
+            LARGE_INTEGER li;   /* 64-bit integer for SetFilePointer() call */
+
+            /* Map the posix file handle to a Windows file handle */
+            filehandle = _get_osfhandle(fd);
+
+            /* Translate 64-bit integers into form Windows wants */
+            /* [This algorithm is from the Windows documentation for SetFilePointer()] */
+            li.QuadPart = (LONGLONG)file->eoa;
+            (void)SetFilePointer((HANDLE)filehandle,li.LowPart,&li.HighPart,FILE_BEGIN);
+            if(SetEndOfFile((HANDLE)filehandle)==0)
+                H5Epush_ret(func, H5E_IO, H5E_SEEKERROR, "unable to extend file properly", -1)
+#else /* WIN32 */
+            int fd=fileno(file->fp);     /* File descriptor for HDF5 file */
+
+            if (-1==file_truncate(fd, (file_offset_t)file->eoa))
+                H5Epush_ret(func, H5E_IO, H5E_SEEKERROR, "unable to extend file properly", -1)
+#endif /* WIN32 */
+
+            /* Update the eof value */
+            file->eof = file->eoa;
+
+            /* Reset last file I/O information */
+            file->pos = HADDR_UNDEF;
+            file->op = H5FD_STDIO_OP_UNKNOWN;
+        } /* end if */
+
+        /*
+         * Flush
+         */
+        if(!closing) {
+            if (fflush(file->fp) < 0)
+                H5Epush_ret(func, H5E_IO, H5E_WRITEERROR, "fflush failed", -1)
+        } /* end if */
+    } /* end if */
+    else {
+        /* Double-check for problems */
+        if (file->eoa>file->eof)
+            H5Epush_ret(func, H5E_IO, H5E_TRUNCATED, "eoa>eof!", -1)
+      } /* end else */
+
+    return(0);
+}
+
+
+#ifdef _H5private_H
+/*
+ * This is not related to the functionality of the driver code.
+ * It is added here to trigger warning if HDF5 private definitions are included
+ * by mistake.  The code should use only HDF5 public API and definitions.
+ */
+#error "Do not use HDF5 private definitions"
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5FDstdio.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDstdio.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDstdio.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,40 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Monday, August  2, 1999
+ *
+ * Purpose:	The public header file for the sec2 driver.
+ */
+#ifndef H5FDstdio_H
+#define H5FDstdio_H
+
+#include "H5Ipublic.h"
+
+#define H5FD_STDIO	(H5FD_stdio_init())
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+H5_DLL hid_t H5FD_stdio_init(void);
+H5_DLL void H5FD_stdio_term(void);
+H5_DLL herr_t H5Pset_fapl_stdio(hid_t fapl_id);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5FDstream.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDstream.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDstream.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1153 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Copyright © 2000 The author.
+ * The author prefers this code not be used for military purposes.
+ *
+ *
+ * Author:  Thomas Radke <tradke at aei-potsdam.mpg.de>
+ *          Tuesday, September 12, 2000
+ *
+ * Purpose: This code provides the Stream Virtual File Driver.
+ *          It is very much based on the core VFD which keeps an
+ *          entire HDF5 data file to be processed in main memory.
+ *          In addition to that, the memory image of the file is
+ *          read from/written to a socket during an open/flush operation.
+ *
+ * Modifications:
+ *          Thomas Radke, Thursday, October 26, 2000
+ *          Added support for Windows.
+ *          Catch SIGPIPE on an open socket.
+ *
+ */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5FD_stream_init_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FDstream.h"		/* Stream file driver			*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"		/* Property lists			*/
+
+/* Only build this driver if it was configured with --with-Stream-VFD */
+#ifdef H5_HAVE_STREAM
+
+#ifdef H5FD_STREAM_HAVE_UNIX_SOCKETS
+#ifdef H5_HAVE_SYS_TYPES_H
+#include <sys/types.h>                /* socket stuff                        */
+#endif
+#ifdef H5_HAVE_SYS_SOCKET_H
+#include <sys/socket.h>               /* socket stuff                        */
+#endif
+#include <netdb.h>                    /* gethostbyname                       */
+#include <netinet/in.h>               /* socket stuff                        */
+#ifdef H5_HAVE_NETINET_TCP_H
+#include <netinet/tcp.h>              /* socket stuff                        */
+#endif
+#ifdef H5_HAVE_SYS_FILIO_H
+#include <sys/filio.h>                /* socket stuff                        */
+#endif
+#endif
+
+#ifndef H5_HAVE_SOCKLEN_T
+typedef int socklen_t;
+#endif
+
+/* Some useful macros */
+#ifdef  MIN
+#undef  MIN
+#endif
+#ifdef  MAX
+#undef  MAX
+#endif
+#define MIN(x,y)        ((x) < (y) ? (x) : (y))
+#define MAX(x,y)        ((x) > (y) ? (x) : (y))
+
+/* Uncomment this to switch on debugging output */
+/* #define DEBUG 1 */
+
+/* Define some socket stuff which is different for UNIX and Windows */
+#ifdef H5FD_STREAM_HAVE_UNIX_SOCKETS
+#define H5FD_STREAM_CLOSE_SOCKET(a)          close(a)
+#define H5FD_STREAM_IOCTL_SOCKET(a, b, c)    ioctl(a, b, c)
+#define H5FD_STREAM_ERROR_CHECK(rc)          ((rc) < 0)
+#else
+#define H5FD_STREAM_CLOSE_SOCKET(a)          closesocket (a)
+#define H5FD_STREAM_IOCTL_SOCKET(a, b, c)    ioctlsocket (a, b, (u_long *) (c))
+#define H5FD_STREAM_ERROR_CHECK(rc)          ((rc) == (SOCKET) (SOCKET_ERROR))
+#endif
+
+
+/* The driver identification number, initialized at runtime */
+static hid_t H5FD_STREAM_g = 0;
+
+/*
+ * The description of a file belonging to this driver. The `eoa' and `eof'
+ * determine the amount of hdf5 address space in use and the high-water mark
+ * of the file (the current size of the underlying memory).
+ */
+typedef struct H5FD_stream_t
+{
+  H5FD_t             pub;             /* public stuff, must be first         */
+  H5FD_stream_fapl_t fapl;            /* file access property list           */
+  unsigned char     *mem;             /* the underlying memory               */
+  haddr_t            eoa;             /* end of allocated region             */
+  haddr_t            eof;             /* current allocated size              */
+  H5FD_STREAM_SOCKET_TYPE socket;     /* socket to write / read from         */
+  hbool_t            dirty;           /* flag indicating unflushed data      */
+  hbool_t            internal_socket; /* flag indicating an internal socket  */
+} H5FD_stream_t;
+
+/* Allocate memory in multiples of this size (in bytes) by default */
+#define H5FD_STREAM_INCREMENT         8192
+
+/* default backlog argument for listen call */
+#define H5FD_STREAM_BACKLOG           1
+
+/* number of successive ports to hunt for until bind(2) succeeds
+   (default 0 means no port hunting - only try the one given in the filename) */
+#define H5FD_STREAM_MAXHUNT           0
+
+/* default file access property list */
+static const H5FD_stream_fapl_t default_fapl =
+{
+  H5FD_STREAM_INCREMENT,              /* address space allocation blocksize */
+  H5FD_STREAM_INVALID_SOCKET,         /* no external socket descriptor      */
+  TRUE,                               /* enable I/O on socket               */
+  H5FD_STREAM_BACKLOG,                /* default backlog for listen(2)      */
+  NULL,                               /* do not broadcast received files    */
+  NULL,                               /* argument to READ broadcast routine */
+  H5FD_STREAM_MAXHUNT,                /* default number of ports to hunt    */
+  0                                   /* unknown port for unbound socket    */
+};
+
+/*
+ * These macros check for overflow of various quantities.  These macros
+ * assume that file_offset_t is signed and haddr_t and size_t are unsigned.
+ *
+ * ADDR_OVERFLOW:        Checks whether a file address of type `haddr_t'
+ *                        is too large to be represented by the second argument
+ *                        of the file seek function.
+ *
+ * SIZE_OVERFLOW:        Checks whether a buffer size of type `hsize_t' is too
+ *                        large to be represented by the `size_t' type.
+ *
+ * REGION_OVERFLOW:      Checks whether an address and size pair describe data
+ *                        which can be addressed entirely in memory.
+ */
+#ifdef H5_HAVE_LSEEK64
+#   define file_offset_t        off64_t
+#else
+#   define file_offset_t        off_t
+#endif
+#define MAXADDR                 (((haddr_t)1<<(8*sizeof(file_offset_t)-1))-1)
+#define ADDR_OVERFLOW(A)        (HADDR_UNDEF==(A) ||                          \
+                                 ((A) & ~(haddr_t)MAXADDR))
+#define SIZE_OVERFLOW(Z)        ((Z) & ~(hsize_t)MAXADDR)
+#define REGION_OVERFLOW(A,Z)    (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) ||      \
+                                 HADDR_UNDEF==(A)+(Z) ||                      \
+                                 (size_t)((A)+(Z))<(size_t)(A))
+
+/* Function prototypes */
+static void   *H5FD_stream_fapl_get (H5FD_t *_stream);
+static H5FD_t *H5FD_stream_open (const char *name, unsigned flags,
+                                 hid_t fapl_id, haddr_t maxaddr);
+static herr_t  H5FD_stream_flush (H5FD_t *_stream, hid_t dxpl_id, unsigned closing);
+static herr_t  H5FD_stream_close (H5FD_t *_stream);
+static herr_t H5FD_stream_query(const H5FD_t *_f1, unsigned long *flags);
+static haddr_t H5FD_stream_get_eoa (H5FD_t *_stream);
+static herr_t  H5FD_stream_set_eoa (H5FD_t *_stream, haddr_t addr);
+static haddr_t H5FD_stream_get_eof (H5FD_t *_stream);
+static herr_t  H5FD_stream_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
+static herr_t  H5FD_stream_read (H5FD_t *_stream, H5FD_mem_t type,
+                                 hid_t fapl_id, haddr_t addr,
+                                 size_t size, void *buf);
+static herr_t  H5FD_stream_write (H5FD_t *_stream, H5FD_mem_t type,
+                                  hid_t fapl_id, haddr_t addr,
+                                  size_t size, const void *buf);
+
+/* The Stream VFD's class information structure */
+static const H5FD_class_t H5FD_stream_g = {
+    "stream",                                   /*name                  */
+    MAXADDR,                                    /*maxaddr               */
+    H5F_CLOSE_WEAK,                             /*fc_degree             */
+    NULL,                                       /*sb_size               */
+    NULL,                                       /*sb_encode             */
+    NULL,                                       /*sb_decode             */
+    sizeof (H5FD_stream_fapl_t),                /*fapl_size             */
+    H5FD_stream_fapl_get,                       /*fapl_get              */
+    NULL,                                       /*fapl_copy             */
+    NULL,                                       /*fapl_free             */
+    0,                                          /*dxpl_size             */
+    NULL,                                       /*dxpl_copy             */
+    NULL,                                       /*dxpl_free             */
+    H5FD_stream_open,                           /*open                  */
+    H5FD_stream_close,                          /*close                 */
+    NULL,                                       /*cmp                   */
+    H5FD_stream_query,                          /*query                 */
+    NULL,                                       /*alloc                 */
+    NULL,                                       /*free                  */
+    H5FD_stream_get_eoa,                        /*get_eoa               */
+    H5FD_stream_set_eoa,                        /*set_eoa               */
+    H5FD_stream_get_eof,                        /*get_eof               */
+    H5FD_stream_get_handle,                     /*get_handle            */
+    H5FD_stream_read,                           /*read                  */
+    H5FD_stream_write,                          /*write                 */
+    H5FD_stream_flush,                          /*flush                 */
+    NULL,                                       /*lock                  */
+    NULL,                                       /*unlock                */
+    H5FD_FLMAP_SINGLE                           /*fl_map                */
+};
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5FD_stream_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5FD_stream_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5FD_stream_init currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5FD_stream_init_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_stream_init_interface)
+
+    FUNC_LEAVE_NOAPI(H5FD_stream_init())
+} /* H5FD_stream_init_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:      H5FD_stream_init
+ *
+ * Purpose:       Initialize this driver by registering it with the library.
+ *
+ * Return:        Success:        The driver ID for the Stream driver.
+ *                Failure:        Negative.
+ *
+ * Programmer:    Thomas Radke
+ *                Tuesday, September 12, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t H5FD_stream_init (void)
+{
+  hid_t ret_value=H5FD_STREAM_g;        /* Return value */
+
+  FUNC_ENTER_NOAPI(H5FD_stream_init, FAIL)
+
+  if (H5I_VFL != H5Iget_type (H5FD_STREAM_g)) {
+    H5FD_STREAM_g = H5FD_register (&H5FD_stream_g,sizeof(H5FD_class_t));
+
+    /* set the process signal mask to ignore SIGPIPE signals */
+    /* NOTE: Windows doesn't know SIGPIPE signals that's why the #ifdef */
+#ifdef SIGPIPE
+    if (signal (SIGPIPE, SIG_IGN) == SIG_ERR)
+      fprintf (stderr, "Stream VFD warning: failed to set the process signal "
+                       "mask to ignore SIGPIPE signals\n");
+#endif
+  }
+
+    /* Set return value */
+    ret_value=H5FD_STREAM_g;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*---------------------------------------------------------------------------
+ * Function:	H5FD_stream_term
+ *
+ * Purpose:	Shut down the VFD
+ *
+ * Return:	<none>
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, Jan 30, 2004
+ *
+ * Modification:
+ *
+ *---------------------------------------------------------------------------
+ */
+void
+H5FD_stream_term(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_stream_term)
+
+    /* Reset VFL ID */
+    H5FD_STREAM_g=0;
+
+    FUNC_LEAVE_NOAPI_VOID
+} /* end H5FD_stream_term() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:      H5Pset_fapl_stream
+ *
+ * Purpose:       Modify the file access property list to use the Stream
+ *                driver defined in this source file.  The INCREMENT specifies
+ *                how much to grow the memory each time we need more.
+ *                If a valid socket argument is given this will be used
+ *                by the driver instead of parsing the 'hostname:port' filename
+ *                and opening a socket internally.
+ *
+ * Return:        Success:        Non-negative
+ *                Failure:        Negative
+ *
+ * Programmer:    Thomas Radke
+ *                Tuesday, September 12, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5Pset_fapl_stream (hid_t fapl_id, H5FD_stream_fapl_t *fapl)
+{
+  H5FD_stream_fapl_t user_fapl;
+  H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+  FUNC_ENTER_API(H5Pset_fapl_stream, FAIL)
+  H5TRACE2 ("e", "ix", fapl_id, fapl);
+
+  if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+    HGOTO_ERROR (H5E_PLIST, H5E_BADTYPE, FAIL, "not a fapl")
+
+  if (fapl) {
+    if (! fapl->do_socket_io && fapl->broadcast_fn == NULL)
+      HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "read broadcast function pointer is NULL")
+
+    user_fapl = *fapl;
+    if (fapl->increment == 0)
+      user_fapl.increment = H5FD_STREAM_INCREMENT;
+    user_fapl.port = 0;
+    ret_value = H5P_set_driver (plist, H5FD_STREAM, &user_fapl);
+  }
+  else
+    ret_value = H5P_set_driver (plist, H5FD_STREAM, &default_fapl);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:      H5Pget_fapl_stream
+ *
+ * Purpose:       Queries properties set by the H5Pset_fapl_stream() function.
+ *
+ * Return:        Success:        Non-negative
+ *                Failure:        Negative
+ *
+ * Programmer:    Thomas Radke
+ *                Tuesday, September 12, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5Pget_fapl_stream(hid_t fapl_id, H5FD_stream_fapl_t *fapl /* out */)
+{
+  H5FD_stream_fapl_t *this_fapl;
+  H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+  FUNC_ENTER_API(H5Pget_fapl_stream, FAIL)
+  H5TRACE2("e","ix",fapl_id,fapl);
+
+  if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+    HGOTO_ERROR (H5E_PLIST, H5E_BADTYPE, FAIL, "not a fapl")
+  if (H5FD_STREAM != H5P_get_driver (plist))
+    HGOTO_ERROR (H5E_PLIST, H5E_BADVALUE, FAIL, "incorrect VFL driver")
+  if (NULL == (this_fapl = H5P_get_driver_info (plist)))
+    HGOTO_ERROR (H5E_PLIST, H5E_BADVALUE, FAIL, "bad VFL driver info")
+
+  if (fapl)
+    *fapl = *this_fapl;
+
+done:
+  FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:      H5FD_stream_fapl_get
+ *
+ * Purpose:       Returns a copy of the file access properties
+ *
+ * Return:        Success:        Ptr to new file access properties
+ *                Failure:        NULL
+ *
+ * Programmer:    Thomas Radke
+ *                Tuesday, September 12, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FD_stream_fapl_get (H5FD_t *_stream)
+{
+  H5FD_stream_t      *stream = (H5FD_stream_t *) _stream;
+  H5FD_stream_fapl_t *fapl;
+  void      *ret_value;
+
+  FUNC_ENTER_NOAPI(H5FD_stream_fapl_get, NULL)
+
+  if ((fapl = H5MM_calloc (sizeof (H5FD_stream_fapl_t))) == NULL)
+    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+  *fapl = stream->fapl;
+
+    /* Set return value */
+    ret_value=fapl;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+static H5FD_STREAM_SOCKET_TYPE
+H5FD_stream_open_socket (const char *filename, int o_flags,
+                        H5FD_stream_fapl_t *fapl)
+{
+  struct sockaddr_in server;
+  struct hostent *he;
+  H5FD_STREAM_SOCKET_TYPE sock=H5FD_STREAM_INVALID_SOCKET;
+  char *hostname=NULL;
+  unsigned short int first_port;
+  const char *separator, *tmp;
+  int on = 1;
+  H5FD_STREAM_SOCKET_TYPE ret_value=H5FD_STREAM_INVALID_SOCKET;
+
+  FUNC_ENTER_NOAPI_NOINIT(H5FD_stream_open_socket)
+
+  /* Parse "hostname:port" from filename argument */
+  for (separator = filename; *separator != ':' && *separator; separator++)
+      ;
+  if (separator == filename || !*separator) {
+    HGOTO_ERROR(H5E_ARGS,H5E_BADVALUE,H5FD_STREAM_INVALID_SOCKET,"invalid host address")
+  } else {
+    tmp = separator;
+    if (! tmp[1])
+        HGOTO_ERROR(H5E_ARGS,H5E_BADVALUE,H5FD_STREAM_INVALID_SOCKET,"no port number")
+    while (*++tmp) {
+      if (! isdigit (*tmp))
+        HGOTO_ERROR(H5E_ARGS,H5E_BADVALUE,H5FD_STREAM_INVALID_SOCKET,"invalid port number")
+    }
+  }
+
+  hostname = (char *) H5MM_malloc ((size_t)(separator - filename + 1));
+
+  /* Return if out of memory */
+  if (hostname == NULL)
+    HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,H5FD_STREAM_INVALID_SOCKET,"memory allocation failed")
+
+  HDstrncpy (hostname, filename, (size_t)(separator - filename));
+  hostname[separator - filename] = 0;
+  fapl->port = atoi (separator + 1);
+
+  HDmemset (&server, 0, sizeof (server));
+  server.sin_family = AF_INET;
+  server.sin_port = htons (fapl->port);
+
+  if (! (he = gethostbyname (hostname))) {
+    HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,H5FD_STREAM_INVALID_SOCKET,"unable to get host address")
+  } else if (H5FD_STREAM_ERROR_CHECK (sock = socket (AF_INET, SOCK_STREAM, 0)))
+    HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,H5FD_STREAM_INVALID_SOCKET,"unable to open socket")
+
+    if (O_RDONLY == o_flags) {
+      HDmemcpy (&server.sin_addr, he->h_addr, (size_t)he->h_length);
+#ifdef DEBUG
+      fprintf (stderr, "Stream VFD: connecting to host '%s' port %d\n",
+               hostname, fapl->port);
+#endif
+      if (connect (sock, (struct sockaddr *) &server, sizeof (server)) < 0)
+        HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,H5FD_STREAM_INVALID_SOCKET,"unable to connect")
+    }
+    else {
+      server.sin_addr.s_addr = INADDR_ANY;
+      if (H5FD_STREAM_IOCTL_SOCKET (sock, FIONBIO, &on) < 0) {
+        HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,H5FD_STREAM_INVALID_SOCKET,"unable to set non-blocking mode for socket")
+      } else if (setsockopt (sock, IPPROTO_TCP, TCP_NODELAY, (const char *) &on,
+                           sizeof(on)) < 0) {
+        HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,H5FD_STREAM_INVALID_SOCKET,"unable to set socket option TCP_NODELAY")
+      } else if (setsockopt (sock, SOL_SOCKET, SO_REUSEADDR, (const char *) &on,
+                           sizeof(on)) < 0) {
+        HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,H5FD_STREAM_INVALID_SOCKET,"unable to set socket option SO_REUSEADDR")
+      } else {
+        /* Try to bind the socket to the given port.
+           If maxhunt is given try some successive ports also. */
+        first_port = fapl->port;
+        while (fapl->port <= first_port + fapl->maxhunt) {
+#ifdef DEBUG
+          fprintf (stderr, "Stream VFD: binding to port %d\n", fapl->port);
+#endif
+          server.sin_port = htons (fapl->port);
+          if (bind (sock, (struct sockaddr *) &server, sizeof (server)) < 0)
+            fapl->port++;
+          else
+            break;
+        }
+        if (fapl->port > first_port + fapl->maxhunt) {
+          fapl->port = 0;
+          HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,H5FD_STREAM_INVALID_SOCKET,"unable to bind socket")
+        }
+        else if (listen (sock, fapl->backlog) < 0)
+          HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,H5FD_STREAM_INVALID_SOCKET,"unable to listen on socket")
+      }
+    }
+
+    /* Set return value for success */
+    ret_value=sock;
+
+done:
+    /* Cleanup variables */
+    if(hostname!=NULL)
+        hostname=H5MM_xfree(hostname);
+
+    /* Clean up on error */
+    if(ret_value==H5FD_STREAM_INVALID_SOCKET) {
+        if (!H5FD_STREAM_ERROR_CHECK(sock))
+          H5FD_STREAM_CLOSE_SOCKET(sock);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+static herr_t
+H5FD_stream_read_from_socket (H5FD_stream_t *stream)
+{
+  int size;
+  size_t max_size = 0;
+  unsigned char *ptr=NULL;
+  herr_t ret_value=SUCCEED;
+
+  FUNC_ENTER_NOAPI_NOINIT(H5FD_stream_read_from_socket)
+
+  stream->eof = 0;
+  stream->mem = NULL;
+
+  while (1) {
+    if (max_size <= 0) {
+      /*
+       * Allocate initial buffer as increment + 1
+       * to prevent unnecessary reallocation
+       * if increment is exactly a multiple of the filesize
+       */
+      max_size = stream->fapl.increment;
+      if (! stream->mem)
+        max_size++;
+      ptr = H5MM_realloc (stream->mem, (size_t) (stream->eof + max_size));
+      if (! ptr)
+        HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,FAIL,"unable to allocate file space buffer")
+      stream->mem = ptr;
+      ptr += stream->eof;
+    }
+
+    /* now receive the next chunk of data */
+    size = recv (stream->socket, ptr, max_size, 0);
+
+    if (size < 0 && (EINTR == errno || EAGAIN == errno || EWOULDBLOCK))
+      continue;
+    if (size < 0)
+      HGOTO_ERROR(H5E_IO,H5E_READERROR,FAIL,"error reading from file from socket")
+    if (! size)
+      break;
+    max_size -= (size_t) size;
+    stream->eof += (haddr_t) size;
+    ptr += size;
+#ifdef DEBUG
+    fprintf (stderr, "Stream VFD: read %d bytes (%d total) from socket\n",
+             size, (int) stream->eof);
+#endif
+  }
+
+#ifdef DEBUG
+  fprintf (stderr, "Stream VFD: read total of %d bytes from socket\n",
+           (int) stream->eof);
+#endif
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:      H5FD_stream_open
+ *
+ * Purpose:       Opens an HDF5 file in memory.
+ *
+ * Return:        Success:        A pointer to a new file data structure. The
+ *                                public fields will be initialized by the
+ *                                caller, which is always H5FD_open().
+ *                Failure:        NULL
+ *
+ * Programmer:    Thomas Radke
+ *                Tuesday, September 12, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5FD_t *
+H5FD_stream_open (const char *filename,
+                     unsigned flags,
+                     hid_t fapl_id,
+                     haddr_t maxaddr)
+{
+  H5FD_stream_t             *stream=NULL;
+  const H5FD_stream_fapl_t *fapl;
+  int                       o_flags;
+#ifdef WIN32
+  WSADATA wsadata;
+#endif
+  H5P_genplist_t *plist=NULL;        /* Property list pointer */
+  H5FD_t *ret_value;       /* Function return value */
+
+  FUNC_ENTER_NOAPI(H5FD_stream_open, NULL)
+
+  /* Check arguments */
+  if (filename == NULL|| *filename == '\0')
+    HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, NULL,"invalid file name")
+  if (maxaddr == 0 || HADDR_UNDEF == maxaddr)
+    HGOTO_ERROR (H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr")
+  if (ADDR_OVERFLOW (maxaddr))
+    HGOTO_ERROR (H5E_ARGS, H5E_OVERFLOW, NULL, "maxaddr overflow")
+
+  /* Build the open flags */
+  o_flags = (H5F_ACC_RDWR & flags) ? O_RDWR : O_RDONLY;
+  if (H5F_ACC_TRUNC & flags) o_flags |= O_TRUNC;
+  if (H5F_ACC_CREAT & flags) o_flags |= O_CREAT;
+  if (H5F_ACC_EXCL & flags)  o_flags |= O_EXCL;
+
+  if ((O_RDWR & o_flags) && ! (O_CREAT & o_flags))
+    HGOTO_ERROR (H5E_ARGS, H5E_UNSUPPORTED, NULL, "open stream for read/write not supported")
+
+#ifdef WIN32
+  if (WSAStartup (MAKEWORD (2, 0), &wsadata))
+    HGOTO_ERROR (H5E_IO, H5E_CANTINIT, NULL, "Couldn't start Win32 socket layer")
+#endif
+
+  fapl = NULL;
+  if (H5P_FILE_ACCESS_DEFAULT != fapl_id) {
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
+    fapl = H5P_get_driver_info (plist);
+  }
+  if (fapl == NULL)
+    fapl = &default_fapl;
+
+    /* Create the new file struct */
+    stream = (H5FD_stream_t *) H5MM_calloc (sizeof (H5FD_stream_t));
+    if (stream == NULL)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "unable to allocate file struct")
+    stream->fapl = *fapl;
+    stream->socket = H5FD_STREAM_INVALID_SOCKET;
+
+  /* if an external socket is provided with the file access property list
+     we use that, otherwise the filename argument is parsed and a socket
+     is opened internally */
+  if (fapl->do_socket_io) {
+    if (! H5FD_STREAM_ERROR_CHECK (fapl->socket)) {
+      stream->internal_socket = FALSE;
+      stream->socket = fapl->socket;
+    }
+    else {
+      stream->internal_socket = TRUE;
+      stream->socket = H5FD_stream_open_socket (filename, o_flags, &stream->fapl);
+      if (stream->socket != H5FD_STREAM_INVALID_SOCKET) {
+        /* update the port ID in the file access property
+           so that it can be queried via H5P_get_fapl_stream() later on */
+        H5P_set_driver (plist, H5FD_STREAM, &stream->fapl);
+      }
+      else
+        HGOTO_ERROR(H5E_IO, H5E_CANTOPENFILE, NULL, "can't open internal socket")
+    }
+  }
+
+  /* read the data from socket into memory */
+  if (O_RDONLY == o_flags) {
+    if (fapl->do_socket_io) {
+#ifdef DEBUG
+      fprintf (stderr, "Stream VFD: reading file from socket\n");
+#endif
+      if(H5FD_stream_read_from_socket (stream)<0)
+        HGOTO_ERROR(H5E_IO, H5E_READERROR, NULL, "can't read file from socket")
+    }
+
+    /* Now call the user's broadcast routine if given */
+    if (fapl->broadcast_fn) {
+      if ((fapl->broadcast_fn) (&stream->mem, &stream->eof,
+                                fapl->broadcast_arg) < 0)
+        HGOTO_ERROR(H5E_IO, H5E_READERROR, NULL, "broadcast error")
+
+      /* check for filesize of zero bytes */
+      if (stream->eof == 0)
+        HGOTO_ERROR(H5E_IO, H5E_READERROR, NULL, "zero filesize")
+    }
+
+    /* For files which are read from a socket:
+       the opened socket is not needed anymore */
+      if (stream->internal_socket && ! H5FD_STREAM_ERROR_CHECK (stream->socket))
+        H5FD_STREAM_CLOSE_SOCKET (stream->socket);
+      stream->socket = H5FD_STREAM_INVALID_SOCKET;
+  }
+
+    /* Set return value on success */
+    ret_value=(H5FD_t*)stream;
+
+done:
+    if(ret_value==NULL) {
+        if(stream!=NULL) {
+            if (stream->mem)
+                H5MM_xfree (stream->mem);
+            if (stream->internal_socket && ! H5FD_STREAM_ERROR_CHECK (stream->socket))
+                H5FD_STREAM_CLOSE_SOCKET (stream->socket);
+            H5MM_xfree(stream);
+        } /* end if */
+    }
+
+  FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:      H5FD_stream_flush
+ *
+ * Purpose:       Flushes the file via sockets to any connected clients
+ *                if its dirty flag is set.
+ *
+ * Return:        Success:        0
+ *                Failure:        -1
+ *
+ * Programmer:    Thomas Radke
+ *                Tuesday, September 12, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_stream_flush (H5FD_t *_stream, hid_t UNUSED dxpl_id, unsigned UNUSED closing)
+{
+  H5FD_stream_t *stream = (H5FD_stream_t *) _stream;
+  size_t size;
+  ssize_t bytes_send;
+  int on = 1;
+  unsigned char *ptr;
+  struct sockaddr from;
+  socklen_t fromlen;
+  H5FD_STREAM_SOCKET_TYPE sock;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+  FUNC_ENTER_NOAPI(H5FD_stream_flush, FAIL)
+
+  /* Write to backing store */
+  if (stream->dirty && ! H5FD_STREAM_ERROR_CHECK (stream->socket)) {
+#ifdef DEBUG
+    fprintf (stderr, "Stream VFD: accepting client connections\n");
+#endif
+    fromlen = sizeof (from);
+    while (! H5FD_STREAM_ERROR_CHECK (sock = accept (stream->socket,
+                                                     &from, &fromlen))) {
+      if (H5FD_STREAM_IOCTL_SOCKET (sock, FIONBIO, &on) < 0) {
+        H5FD_STREAM_CLOSE_SOCKET (sock);
+        continue;           /* continue the loop for other clients to connect */
+      }
+
+      size = stream->eof;
+      ptr = stream->mem;
+
+      while (size) {
+        bytes_send = send (sock, ptr, size, 0);
+        if (bytes_send < 0) {
+          if (EINTR == errno || EAGAIN == errno || EWOULDBLOCK == errno)
+            continue;
+
+          /* continue the outermost loop for other clients to connect */
+          break;
+        }
+        ptr += bytes_send;
+        size -= bytes_send;
+#ifdef DEBUG
+        fprintf (stderr, "Stream VFD: wrote %d bytes to socket, %d in total, "
+                 "%d left\n", bytes_send, (int) (ptr - stream->mem), size);
+#endif
+      }
+      H5FD_STREAM_CLOSE_SOCKET (sock);
+    }
+    stream->dirty = FALSE;
+  }
+
+done:
+  FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:      H5FD_stream_close
+ *
+ * Purpose:       Closes the file.
+ *
+ * Return:        Success:        0
+ *                Failure:        -1
+ *
+ * Programmer:    Thomas Radke
+ *                Tuesday, September 12, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_stream_close (H5FD_t *_stream)
+{
+  H5FD_stream_t *stream = (H5FD_stream_t *) _stream;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+  FUNC_ENTER_NOAPI(H5FD_stream_close, FAIL)
+
+  /* Release resources */
+  if (! H5FD_STREAM_ERROR_CHECK (stream->socket) && stream->internal_socket)
+    H5FD_STREAM_CLOSE_SOCKET (stream->socket);
+  if (stream->mem)
+    H5MM_xfree (stream->mem);
+  HDmemset (stream, 0, sizeof (H5FD_stream_t));
+  H5MM_xfree (stream);
+
+done:
+  FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:      H5FD_stream_query
+ *
+ * Purpose:       Set the flags that this VFL driver is capable of supporting.
+ *                 (listed in H5FDpublic.h)
+ *
+ * Return:        Success:        non-negative
+ *
+ *                Failure:        negative
+ *
+ * Programmer:    Quincey Koziol
+ *                Tuesday, September 26, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_stream_query(const H5FD_t UNUSED * _f,
+                  unsigned long *flags/*out*/)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FD_stream_query, SUCCEED)
+
+    /* Set the VFL feature flags that this driver supports */
+    if (flags) {
+        *flags = 0;
+        /* OK to perform data sieving for faster raw data reads & writes */
+        *flags |= H5FD_FEAT_DATA_SIEVE;
+        *flags|=H5FD_FEAT_AGGREGATE_SMALLDATA; /* OK to aggregate "small" raw data allocations */
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:      H5FD_stream_get_eoa
+ *
+ * Purpose:       Gets the end-of-address marker for the file. The EOA marker
+ *                is the first address past the last byte allocated in the
+ *                format address space.
+ *
+ * Return:        Success:        The end-of-address marker.
+ *                Failure:        HADDR_UNDEF
+ *
+ * Programmer:    Thomas Radke
+ *                Tuesday, September 12, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_stream_get_eoa (H5FD_t *_stream)
+{
+  H5FD_stream_t *stream = (H5FD_stream_t *) _stream;
+  haddr_t ret_value;            /* Return value */
+
+  FUNC_ENTER_NOAPI(H5FD_stream_get_eoa, HADDR_UNDEF)
+
+    /* Set return value */
+    ret_value=stream->eoa;
+
+done:
+  FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:      H5FD_stream_set_eoa
+ *
+ * Purpose:       Set the end-of-address marker for the file. This function is
+ *                called shortly after an existing HDF5 file is opened in order
+ *                to tell the driver where the end of the HDF5 data is located.
+ *
+ * Return:        Success:        0
+ *                Failure:        -1
+ *
+ * Programmer:    Thomas Radke
+ *                Tuesday, September 12, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_stream_set_eoa (H5FD_t *_stream, haddr_t addr)
+{
+  H5FD_stream_t        *stream = (H5FD_stream_t *) _stream;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+  FUNC_ENTER_NOAPI(H5FD_stream_set_eoa, FAIL)
+
+  if (ADDR_OVERFLOW (addr))
+    HGOTO_ERROR (H5E_ARGS, H5E_OVERFLOW, FAIL, "address overflow")
+
+  stream->eoa = addr;
+
+done:
+  FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:      H5FD_stream_get_eof
+ *
+ * Purpose:       Returns the end-of-file marker, which is the greater of
+ *                either the size of the underlying memory or the HDF5
+ *                end-of-address markers.
+ *
+ * Return:        Success:        End of file address, the first address past
+ *                                the end of the "file", either the memory
+ *                                or the HDF5 file.
+ *                Failure:        HADDR_UNDEF
+ *
+ * Programmer:    Thomas Radke
+ *                Tuesday, September 12, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5FD_stream_get_eof (H5FD_t *_stream)
+{
+  H5FD_stream_t        *stream = (H5FD_stream_t *) _stream;
+  haddr_t ret_value;    /* Return value */
+
+  FUNC_ENTER_NOAPI(H5FD_stream_get_eof, HADDR_UNDEF)
+
+    /* Set return value */
+    ret_value= MAX (stream->eof, stream->eoa);
+
+done:
+  FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:       H5FD_stream_get_handle
+ *
+ * Purpose:        Returns the file handle of stream file driver.
+ *
+ * Returns:        Non-negative if succeed or negative if fails.
+ *
+ * Programmer:     Raymond Lu
+ *                 Sept. 16, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_stream_get_handle(H5FD_t *_file, hid_t UNUSED fapl, void** file_handle)
+{
+    H5FD_stream_t       *file = (H5FD_stream_t *)_file;
+    herr_t              ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FD_stream_get_handle, FAIL)
+
+    if(!file_handle)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file handle not valid")
+
+    *file_handle = &(file->socket);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:      H5FD_stream_read
+ *
+ * Purpose:       Reads SIZE bytes of data from FILE beginning at address ADDR
+ *                into buffer BUF according to data transfer properties in
+ *                DXPL_ID.
+ *
+ * Return:        Success:        0
+ *                                Result is stored in caller-supplied buffer BUF
+ *                Failure:        -1
+ *                                Contents of buffer BUF are undefined
+ *
+ * Programmer:    Thomas Radke
+ *                Tuesday, September 12, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_stream_read (H5FD_t *_stream,
+                    H5FD_mem_t UNUSED type,
+                    hid_t UNUSED dxpl_id,
+                    haddr_t addr,
+                    size_t size,
+                    void *buf /*out*/)
+{
+  H5FD_stream_t *stream = (H5FD_stream_t *) _stream;
+  size_t        nbytes;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+  FUNC_ENTER_NOAPI(H5FD_stream_read, FAIL)
+
+  assert (stream && stream->pub.cls);
+  assert (buf);
+
+  /* Check for overflow conditions */
+  if (HADDR_UNDEF == addr)
+    HGOTO_ERROR (H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed")
+  if (REGION_OVERFLOW (addr, size))
+    HGOTO_ERROR (H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed")
+  if (addr + size > stream->eoa)
+    HGOTO_ERROR (H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed")
+
+  /* Read the part which is before the EOF marker */
+  if (addr < stream->eof) {
+    nbytes = MIN (size, stream->eof - addr);
+    HDmemcpy (buf, stream->mem + addr, nbytes);
+    size -= nbytes;
+    addr += nbytes;
+    buf = (char *) buf + nbytes;
+  }
+
+  /* Read zeros for the part which is after the EOF markers */
+  if (size > 0)
+    HDmemset (buf, 0, size);
+
+done:
+  FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:      H5FD_stream_write
+ *
+ * Purpose:       Writes SIZE bytes of data to FILE beginning at address ADDR
+ *                from buffer BUF according to data transfer properties in
+ *                DXPL_ID.
+ *
+ * Return:        Success:        Zero
+ *                Failure:        -1
+ *
+ * Programmer:    Thomas Radke
+ *                Tuesday, September 12, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FD_stream_write (H5FD_t *_stream,
+                     H5FD_mem_t UNUSED type,
+                     hid_t UNUSED dxpl_id,
+                     haddr_t addr,
+                     size_t size,
+                     const void *buf)
+{
+  H5FD_stream_t                *stream = (H5FD_stream_t *) _stream;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+  FUNC_ENTER_NOAPI(H5FD_stream_write, FAIL)
+
+  assert (stream && stream->pub.cls);
+  assert (buf);
+
+  /* Check for overflow conditions */
+  if (REGION_OVERFLOW (addr, size))
+    HGOTO_ERROR (H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed")
+  if (addr + size > stream->eoa)
+    HGOTO_ERROR (H5E_IO, H5E_OVERFLOW, FAIL, "file address overflowed")
+
+  /*
+   * Allocate more memory if necessary, careful of overflow. Also, if the
+   * allocation fails then the file should remain in a usable state.  Be
+   * careful of non-Posix realloc() that doesn't understand what to do when
+   * the first argument is null.
+   */
+  if (addr + size > stream->eof) {
+    unsigned char *x;
+    haddr_t new_eof = stream->fapl.increment *
+                      ((addr+size) / stream->fapl.increment);
+
+    if ((addr+size) % stream->fapl.increment)
+      new_eof += stream->fapl.increment;
+    if (stream->mem == NULL)
+      x = H5MM_malloc ((size_t) new_eof);
+    else
+      x = H5MM_realloc (stream->mem, (size_t) new_eof);
+    if (x == NULL)
+      HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate memory block")
+    stream->mem = x;
+    stream->eof = new_eof;
+  }
+
+  /* Write from BUF to memory */
+  HDmemcpy (stream->mem + addr, buf, size);
+  stream->dirty = TRUE;
+
+done:
+  FUNC_LEAVE_NOAPI(ret_value)
+}
+
+#endif /* H5_HAVE_STREAM */

Added: packages/hdf5/branches/upstream/current/src/H5FDstream.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FDstream.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FDstream.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,100 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Copyright © 2000 The author.
+ * The author prefers this code not be used for military purposes.
+ *
+ *
+ * Author:  Thomas Radke <tradke at aei-potsdam.mpg.de>
+ *          Tuesday, September 12, 2000
+ *
+ * Purpose:	The public header file for the Stream Virtual File Driver.
+ *
+ * Modifications:
+ *          Thomas Radke, Thursday, October 26, 2000
+ *          Added support for Windows.
+ *
+ */
+#ifndef H5FDstream_H
+#define H5FDstream_H
+
+#ifdef H5_HAVE_STREAM
+#   define H5FD_STREAM  (H5FD_stream_init())
+#else
+#   define H5FD_STREAM (-1)
+#endif /*H5_HAVE_STREAM */
+
+#ifdef H5_HAVE_STREAM
+
+/* check what sockets type we have (Unix or Windows sockets)
+   Note that only MS compilers require to use Windows sockets
+   but gcc under Windows does not. */
+#if ! defined(H5_HAVE_WINSOCK_H) || defined(__GNUC__)
+#define H5FD_STREAM_HAVE_UNIX_SOCKETS  1
+#endif
+
+/* define the data type for socket descriptors
+   and the constant indicating an invalid descriptor */
+#ifdef H5FD_STREAM_HAVE_UNIX_SOCKETS
+
+#define H5FD_STREAM_SOCKET_TYPE            int
+#define H5FD_STREAM_INVALID_SOCKET         -1
+
+#else
+#include <winsock.h>
+
+#define H5FD_STREAM_SOCKET_TYPE            SOCKET
+#define H5FD_STREAM_INVALID_SOCKET         INVALID_SOCKET
+
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* prototype for read broadcast callback routine */
+typedef int (*H5FD_stream_broadcast_t) (unsigned char **file,
+                                        haddr_t *len,
+                                        void *arg);
+
+/* driver-specific file access properties */
+typedef struct H5FD_stream_fapl_t
+{
+  size_t       increment;            /* how much to grow memory in reallocs  */
+  H5FD_STREAM_SOCKET_TYPE socket;    /* externally provided socket descriptor*/
+  hbool_t      do_socket_io;         /* do I/O on socket                     */
+  int          backlog;              /* backlog argument for listen call     */
+  H5FD_stream_broadcast_t broadcast_fn; /* READ broadcast callback           */
+  void        *broadcast_arg;        /* READ broadcast callback user argument*/
+  unsigned int maxhunt;              /* how many more ports to try to bind to*/
+  unsigned short int port;           /* port a socket was bound/connected to */
+} H5FD_stream_fapl_t;
+
+
+/* prototypes of exported functions */
+H5_DLL hid_t  H5FD_stream_init (void);
+H5_DLL void H5FD_stream_term(void);
+H5_DLL herr_t H5Pset_fapl_stream (hid_t fapl_id,
+                                   H5FD_stream_fapl_t *fapl);
+H5_DLL herr_t H5Pget_fapl_stream (hid_t fapl_id,
+                                   H5FD_stream_fapl_t *fapl /*out*/ );
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* H5_HAVE_STREAM */
+
+#endif /* H5FDstream_H */

Added: packages/hdf5/branches/upstream/current/src/H5FL.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FL.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FL.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1905 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *	       Thursday, March 23, 2000
+ *
+ * Purpose: Manage priority queues of free-lists (of blocks of bytes).
+ *      These are used in various places in the library which allocate and
+ *      free differently blocks of bytes repeatedly.  Usually the same size
+ *      of block is allocated and freed repeatly in a loop, while writing out
+ *      chunked data for example, but the blocks may also be of different sizes
+ *      from different datasets and an attempt is made to optimize access to
+ *      the proper free list of blocks by using these priority queues to
+ *      move frequently accessed free lists to the head of the queue.
+ */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5FL_init_interface
+
+
+/* #define H5FL_DEBUG */
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5MMprivate.h"	/* Memory management			*/
+
+/*
+ * Private type definitions
+ */
+
+/*
+    Default limits on how much memory can accumulate on each free list before
+    it is garbage collected.
+ */
+static size_t H5FL_reg_glb_mem_lim=1*1024*1024; /* Default to 1MB limit on all regular free lists */
+static size_t H5FL_reg_lst_mem_lim=1*65536;     /* Default to 64KB limit on each regular free list */
+static size_t H5FL_arr_glb_mem_lim=4*1024*1024; /* Default to 4MB limit on all array free lists */
+static size_t H5FL_arr_lst_mem_lim=4*65536;     /* Default to 256KB limit on each array free list */
+static size_t H5FL_blk_glb_mem_lim=16*1024*1024; /* Default to 16MB limit on all block free lists */
+static size_t H5FL_blk_lst_mem_lim=1024*1024;   /* Default to 1024KB (1MB) limit on each block free list */
+
+/* A garbage collection node for regular free lists */
+typedef struct H5FL_reg_gc_node_t {
+    H5FL_reg_head_t *list;              /* Pointer to the head of the list to garbage collect */
+    struct H5FL_reg_gc_node_t *next;    /* Pointer to the next node in the list of things to garbage collect */
+} H5FL_reg_gc_node_t;
+
+/* The garbage collection head for regular free lists */
+typedef struct H5FL_reg_gc_list_t {
+    size_t mem_freed;               /* Amount of free memory on list */
+    struct H5FL_reg_gc_node_t *first;   /* Pointer to the first node in the list of things to garbage collect */
+} H5FL_reg_gc_list_t;
+
+/* The head of the list of things to garbage collect */
+static H5FL_reg_gc_list_t H5FL_reg_gc_head={0,NULL};
+
+/* A garbage collection node for array free lists */
+typedef struct H5FL_gc_arr_node_t {
+    H5FL_arr_head_t *list;              /* Pointer to the head of the list to garbage collect */
+    struct H5FL_gc_arr_node_t *next;    /* Pointer to the next node in the list of things to garbage collect */
+} H5FL_gc_arr_node_t;
+
+/* The garbage collection head for array free lists */
+typedef struct H5FL_gc_arr_list_t {
+    size_t mem_freed;                    /* Amount of free memory on list */
+    struct H5FL_gc_arr_node_t *first;    /* Pointer to the first node in the list of things to garbage collect */
+} H5FL_gc_arr_list_t;
+
+/* The head of the list of array things to garbage collect */
+static H5FL_gc_arr_list_t H5FL_arr_gc_head={0,NULL};
+
+/* A garbage collection node for blocks */
+typedef struct H5FL_blk_gc_node_t {
+    H5FL_blk_head_t *pq;                /* Pointer to the head of the PQ to garbage collect */
+    struct H5FL_blk_gc_node_t *next;    /* Pointer to the next node in the list of things to garbage collect */
+} H5FL_blk_gc_node_t;
+
+/* The garbage collection head for blocks */
+typedef struct H5FL_blk_gc_list_t {
+    size_t mem_freed;                   /* Amount of free memory on list */
+    struct H5FL_blk_gc_node_t *first;   /* Pointer to the first node in the list of things to garbage collect */
+} H5FL_blk_gc_list_t;
+
+/* The head of the list of PQs to garbage collect */
+static H5FL_blk_gc_list_t H5FL_blk_gc_head={0,NULL};
+
+/* Forward declarations of local static functions */
+static herr_t H5FL_reg_gc(void);
+static herr_t H5FL_reg_gc_list(H5FL_reg_head_t *head);
+static herr_t H5FL_arr_gc(void);
+static herr_t H5FL_arr_gc_list(H5FL_arr_head_t *head);
+static herr_t H5FL_blk_gc(void);
+static herr_t H5FL_blk_gc_list(H5FL_blk_head_t *head);
+
+/* Declare a free list to manage the H5FL_blk_node_t struct */
+H5FL_DEFINE(H5FL_blk_node_t);
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5FL_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5FL_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5FL_init_interface(void)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FL_init_interface)
+
+    /* Nothing currently... */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5FL_init_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_malloc
+ *
+ * Purpose:	Attempt to allocate space using malloc.  If malloc fails, garbage
+ *      collect and try again.  If malloc fails again, then return NULL.
+ *
+ * Return:	Success:	non-NULL
+ * 		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, August 1, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5FL_malloc(size_t mem_size)
+{
+    void *ret_value=NULL;   /* return value*/
+
+    FUNC_ENTER_NOAPI(H5FL_malloc, NULL)
+
+    /* Attempt to allocate the memory requested */
+    if(NULL==(ret_value=H5MM_malloc(mem_size))) {
+        /* If we can't allocate the memory now, try garbage collecting first */
+        if(H5FL_garbage_coll()<0)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, NULL, "garbage collection failed during allocation")
+
+        /* Now try allocating the memory again */
+        if(NULL==(ret_value=H5MM_malloc(mem_size)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for chunk")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_malloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_reg_init
+ *
+ * Purpose:	Initialize a free list for a certain type.  Right now, this just
+ *      adds the free list to the list of things to garbage collect.
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, March 24, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FL_reg_init(H5FL_reg_head_t *head)
+{
+    H5FL_reg_gc_node_t *new_node;   /* Pointer to the node for the new list to garbage collect */
+    herr_t ret_value=SUCCEED;   /* return value*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5FL_reg_init)
+
+    /* Allocate a new garbage collection node */
+    if (NULL==(new_node = H5MM_malloc(sizeof(H5FL_reg_gc_node_t))))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+    /* Initialize the new garbage collection node */
+    new_node->list=head;
+
+    /* Link in to the garbage collection list */
+    new_node->next=H5FL_reg_gc_head.first;
+    H5FL_reg_gc_head.first=new_node;
+
+    /* Indicate that the free list is initialized */
+    head->init=1;
+
+    /* Make certain that the space allocated is large enough to store a free list pointer (eventually) */
+    if(head->size<sizeof(void *))
+        head->size=sizeof(void *);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_reg_init() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_reg_free
+ *
+ * Purpose:	Release an object & put on free list
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, March 24, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_reg_free(H5FL_reg_head_t *head, void *obj)
+{
+    H5FL_reg_node_t *temp;      /* Temp. ptr to the new free list node allocated */
+    void *ret_value=NULL;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FL_reg_free, NULL)
+
+    /* Double check parameters */
+    assert(head);
+    assert(obj);
+
+#ifdef H5FL_DEBUG
+    HDmemset(obj,255,head->size);
+#endif /* H5FL_DEBUG */
+
+    /* Make certain that the free list is initialized */
+    assert(head->init);
+
+    /* Alias the pointer to the block to free into a H5FL_reg_node_t node */
+    temp=(H5FL_reg_node_t *)obj;
+
+    /* Link into the free list */
+    temp->next=head->list;
+
+    /* Point free list at the node freed */
+    head->list=temp;
+
+    /* Increment the number of blocks & memory on free list */
+    head->onlist++;
+    head->list_mem+=head->size;
+
+    /* Increment the amount of "regular" freed memory globally */
+    H5FL_reg_gc_head.mem_freed+=head->size;
+
+    /* Check for exceeding free list memory use limits */
+    /* First check this particular list */
+    if(head->list_mem>H5FL_reg_lst_mem_lim)
+        if(H5FL_reg_gc_list(head)<0)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, NULL, "garbage collection failed during free")
+
+    /* Then check the global amount memory on regular free lists */
+    if(H5FL_reg_gc_head.mem_freed>H5FL_reg_glb_mem_lim)
+        if(H5FL_reg_gc()<0)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, NULL, "garbage collection failed during free")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_reg_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_reg_malloc
+ *
+ * Purpose:	Allocate a block on a free list
+ *
+ * Return:	Success:	Pointer to a valid object
+ * 		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, March 24, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_reg_malloc(H5FL_reg_head_t *head)
+{
+    void *ret_value;        /* Pointer to object to return */
+
+    FUNC_ENTER_NOAPI(H5FL_reg_malloc, NULL)
+
+    /* Double check parameters */
+    assert(head);
+
+    /* Make certain the list is initialized first */
+    if(!head->init)
+        if(H5FL_reg_init(head)<0)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_CANTINIT, NULL, "can't initialize 'regular' blocks")
+
+    /* Check for nodes available on the free list first */
+    if(head->list!=NULL) {
+        /* Get a pointer to the block on the free list */
+        ret_value=(void *)(head->list);
+
+        /* Remove node from free list */
+        head->list=head->list->next;
+
+        /* Decrement the number of blocks & memory on free list */
+        head->onlist--;
+        head->list_mem-=head->size;
+
+        /* Decrement the amount of global "regular" free list memory in use */
+        H5FL_reg_gc_head.mem_freed-=(head->size);
+
+    } /* end if */
+    /* Otherwise allocate a node */
+    else {
+        if (NULL==(ret_value = H5FL_malloc(head->size)))
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+        /* Increment the number of blocks allocated in list */
+        head->allocated++;
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_reg_malloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_reg_calloc
+ *
+ * Purpose:	Allocate a block on a free list and clear it to zeros
+ *
+ * Return:	Success:	Pointer to a valid object
+ * 		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, December 23, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_reg_calloc(H5FL_reg_head_t *head)
+{
+    void *ret_value;        /* Pointer to object to return */
+
+    FUNC_ENTER_NOAPI(H5FL_reg_calloc, NULL)
+
+    /* Double check parameters */
+    assert(head);
+
+    /* Allocate the block */
+    if (NULL==(ret_value = H5FL_reg_malloc(head)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    /* Clear to zeros */
+    HDmemset(ret_value,0,head->size);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_reg_calloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_reg_gc_list
+ *
+ * Purpose:	Garbage collect on a particular object free list
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, July 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FL_reg_gc_list(H5FL_reg_head_t *head)
+{
+    H5FL_reg_node_t *free_list; /* Pointer to nodes in free list being garbage collected */
+    void *tmp;          /* Temporary node pointer */
+    size_t total_mem;   /* Total memory used on list */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FL_reg_gc_list)
+
+    /* Calculate the total memory used on this list */
+    total_mem=head->onlist*head->size;
+
+    /* For each free list being garbage collected, walk through the nodes and free them */
+    free_list=head->list;
+    while(free_list!=NULL) {
+        tmp=free_list->next;
+
+        /* Decrement the count of nodes allocated and free the node */
+        head->allocated--;
+
+        /* Decrement count of free memory on this list */
+        head->list_mem-=head->size;
+
+        H5MM_xfree(free_list);
+
+        free_list=tmp;
+    } /* end while */
+
+    /* Double check that all the memory on this list is recycled */
+    assert(head->list_mem==0);
+
+    /* Indicate no free nodes on the free list */
+    head->list=NULL;
+    head->onlist=0;
+
+    /* Decrement global count of free memory on "regular" lists */
+    H5FL_reg_gc_head.mem_freed-=total_mem;
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}   /* end H5FL_reg_gc_list() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_reg_gc
+ *
+ * Purpose:	Garbage collect on all the object free lists
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, March 24, 2000
+ *
+ * Modifications:
+ *  Broke into two parts, one for looping over all the free lists and
+ *      another for freeing each list - QAK 7/25/00
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FL_reg_gc(void)
+{
+    H5FL_reg_gc_node_t *gc_node;    /* Pointer into the list of things to garbage collect */
+    herr_t ret_value=SUCCEED;   /* return value*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5FL_reg_gc)
+
+    /* Walk through all the free lists, free()'ing the nodes */
+    gc_node=H5FL_reg_gc_head.first;
+    while(gc_node!=NULL) {
+        /* Release the free nodes on the list */
+        if(H5FL_reg_gc_list(gc_node->list)<0)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, FAIL, "garbage collection of list failed")
+
+        /* Go on to the next free list to garbage collect */
+        gc_node=gc_node->next;
+    } /* end while */
+
+    /* Double check that all the memory on the free lists is recycled */
+    assert(H5FL_reg_gc_head.mem_freed==0);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_reg_gc() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FL_reg_term
+ PURPOSE
+    Terminate various H5FL object free lists
+ USAGE
+    int H5FL_term()
+ RETURNS
+    Success:	Positive if any action might have caused a change in some
+                other interface; zero otherwise.
+   	Failure:	Negative
+ DESCRIPTION
+    Release any resources allocated.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+     Can't report errors...
+ EXAMPLES
+ REVISION LOG
+        Robb Matzke, 2000-04-25
+        If a list cannot be freed because something is using it then return
+        zero (failure to free a list doesn't affect any other part of the
+        library). If some other layer frees something during its termination
+        it will return non-zero, which will cause this function to get called
+        again to reclaim this layer's memory.
+--------------------------------------------------------------------------*/
+static int
+H5FL_reg_term(void)
+{
+    H5FL_reg_gc_node_t *left;   /* pointer to garbage collection lists with work left */
+    H5FL_reg_gc_node_t *tmp;    /* Temporary pointer to a garbage collection node */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FL_reg_term)
+
+    if (H5_interface_initialize_g) {
+        /* Free the nodes on the garbage collection list, keeping nodes with allocations outstanding */
+        left=NULL;
+        while(H5FL_reg_gc_head.first!=NULL) {
+            tmp=H5FL_reg_gc_head.first->next;
+
+#ifdef H5FL_DEBUG
+            printf("H5FL_reg_term: head->name=%s, head->allocated=%d\n", H5FL_reg_gc_head.first->list->name,(int)H5FL_reg_gc_head.first->list->allocated);
+#endif /* H5FL_DEBUG */
+            /* Check if the list has allocations outstanding */
+            if(H5FL_reg_gc_head.first->list->allocated>0) {
+                /* Add free list to the list of nodes with allocations open still */
+                H5FL_reg_gc_head.first->next=left;
+                left=H5FL_reg_gc_head.first;
+            } /* end if */
+            /* No allocations left open for list, get rid of it */
+            else {
+                /* Reset the "initialized" flag, in case we restart this list somehow (I don't know how..) */
+                H5FL_reg_gc_head.first->list->init=0;
+
+                /* Free the node from the garbage collection list */
+                H5MM_xfree(H5FL_reg_gc_head.first);
+            } /* end else */
+
+            H5FL_reg_gc_head.first=tmp;
+        } /* end while */
+
+        /* Point to the list of nodes left with allocations open, if any */
+        H5FL_reg_gc_head.first=left;
+        if (!left)
+            H5_interface_initialize_g = 0; /*this layer has reached its initial state*/
+    }
+
+    /* Terminating this layer never affects other layers; rather, other layers affect
+     * the termination of this layer. */
+    FUNC_LEAVE_NOAPI(0)
+}   /* end H5FL_reg_term() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_blk_find_list
+ *
+ * Purpose:	Finds the free list for blocks of a given size.  Also moves that
+ *      free list node to the head of the priority queue (if it isn't there
+ *      already).  This routine does not manage the actual free list, it just
+ *      works with the priority queue.
+ *
+ * Return:	Success:	valid pointer to the free list node
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, March  23, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5FL_blk_node_t *
+H5FL_blk_find_list(H5FL_blk_node_t **head, size_t size)
+{
+    H5FL_blk_node_t *temp;  /* Temp. pointer to node in the native list */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FL_blk_find_list)
+
+    /* Find the correct free list */
+    temp=*head;
+
+    /* Check if the node is at the head of the list */
+    if(temp && temp->size!=size) {
+        temp=temp->next;
+
+        while(temp!=NULL) {
+            /* Check if we found the correct node */
+            if(temp->size==size) {
+                /* Take the node found out of it's current position */
+                if(temp->next==NULL) {
+                    temp->prev->next=NULL;
+                } /* end if */
+                else {
+                    temp->prev->next=temp->next;
+                    temp->next->prev=temp->prev;
+                } /* end else */
+
+                /* Move the found node to the head of the list */
+                temp->prev=NULL;
+                temp->next=*head;
+                (*head)->prev=temp;
+                *head=temp;
+
+                /* Get out */
+                break;
+            } /* end if */
+
+            temp=temp->next;
+        } /* end while */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(temp)
+} /* end H5FL_blk_find_list() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_blk_create_list
+ *
+ * Purpose:	Creates a new free list for blocks of the given size at the
+ *      head of the priority queue.
+ *
+ * Return:	Success:	valid pointer to the free list node
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, March  23, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5FL_blk_node_t *
+H5FL_blk_create_list(H5FL_blk_node_t **head, size_t size)
+{
+    H5FL_blk_node_t *temp;  /* Temp. pointer to node in the list */
+    H5FL_blk_node_t *ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5FL_blk_create_list)
+
+    /* Allocate room for the new free list node */
+    if(NULL==(temp=H5FL_MALLOC(H5FL_blk_node_t)))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for chunk info")
+
+    /* Set the correct values for the new free list */
+    temp->size=size;
+    temp->list=NULL;
+
+    /* Attach to head of priority queue */
+    if(*head==NULL) {
+        *head=temp;
+        temp->next=temp->prev=NULL;
+    } /* end if */
+    else {
+        temp->next=*head;
+        (*head)->prev=temp;
+        temp->prev=NULL;
+        *head=temp;
+    } /* end else */
+
+    ret_value=temp;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FL_blk_create_list() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_blk_init
+ *
+ * Purpose:	Initialize a priority queue of a certain type.  Right now, this just
+ *      adds the PQ to the list of things to garbage collect.
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, March 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FL_blk_init(H5FL_blk_head_t *head)
+{
+    H5FL_blk_gc_node_t *new_node;   /* Pointer to the node for the new list to garbage collect */
+    herr_t ret_value=SUCCEED;       /* return value*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5FL_blk_init)
+
+    /* Allocate a new garbage collection node */
+    if (NULL==(new_node = H5MM_malloc(sizeof(H5FL_blk_gc_node_t))))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+    /* Initialize the new garbage collection node */
+    new_node->pq=head;
+
+    /* Link in to the garbage collection list */
+    new_node->next=H5FL_blk_gc_head.first;
+    H5FL_blk_gc_head.first=new_node;
+
+    /* Indicate that the PQ is initialized */
+    head->init=1;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_blk_init() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_blk_free_block_avail
+ *
+ * Purpose:	Checks if a free block of the appropriate size is available
+ *      for a given list.
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *		Monday, December 16, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5FL_blk_free_block_avail(H5FL_blk_head_t *head, size_t size)
+{
+    H5FL_blk_node_t *free_list;  /* The free list of nodes of correct size */
+    htri_t ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FL_blk_free_block_avail, FAIL)
+
+    /* Double check parameters */
+    assert(head);
+
+    /* check if there is a free list for blocks of this size */
+    /* and if there are any blocks available on the list */
+    if((free_list=H5FL_blk_find_list(&(head->head),size))!=NULL && free_list->list!=NULL)
+        ret_value=TRUE;
+    else
+        ret_value=FALSE;
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FL_blk_free_block_avail() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_blk_malloc
+ *
+ * Purpose:	Allocates memory for a block.  This routine is used
+ *      instead of malloc because the block can be kept on a free list so
+ *      they don't thrash malloc/free as much.
+ *
+ * Return:	Success:	valid pointer to the block
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, March  23, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_blk_malloc(H5FL_blk_head_t *head, size_t size)
+{
+    H5FL_blk_node_t *free_list;  /* The free list of nodes of correct size */
+    H5FL_blk_list_t *temp;  /* Temp. ptr to the new native list allocated */
+    void *ret_value;    /* Pointer to the block to return to the user */
+
+    FUNC_ENTER_NOAPI(H5FL_blk_malloc, NULL)
+
+    /* Double check parameters */
+    assert(head);
+    assert(size);
+
+    /* Make certain the list is initialized first */
+    if(!head->init)
+        if(H5FL_blk_init(head)<0)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_CANTINIT, NULL, "can't initialize 'block' list")
+
+    /* check if there is a free list for blocks of this size */
+    /* and if there are any blocks available on the list */
+    if((free_list=H5FL_blk_find_list(&(head->head),size))!=NULL && free_list->list!=NULL) {
+        /* Remove the first node from the free list */
+        temp=free_list->list;
+        free_list->list=free_list->list->next;
+
+        /* Restore the size of the block */
+        temp->size=size;        /* Overwrites the 'next' field */
+
+        /* Return the pointer to the data portion */
+        ret_value=((char *)temp)+sizeof(H5FL_blk_list_t);
+
+        /* Decrement the number of blocks & memory used on free list */
+        head->onlist--;
+        head->list_mem-=size;
+
+        /* Decrement the amount of global "block" free list memory in use */
+        H5FL_blk_gc_head.mem_freed-=size;
+
+    } /* end if */
+    /* No free list available, or there are no nodes on the list, allocate a new node to give to the user */
+    else {
+        /* Allocate new node, with room for the page info header and the actual page data */
+        if(NULL==(temp=H5FL_malloc(sizeof(H5FL_blk_list_t)+size)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for chunk")
+
+        /* Increment the number of blocks allocated */
+        head->allocated++;
+
+        /* Initialize the block allocated */
+        temp->size=size;
+
+        /* Set the return value to the block itself */
+        ret_value=((char *)temp)+sizeof(H5FL_blk_list_t);
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FL_blk_malloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_blk_calloc
+ *
+ * Purpose:	Allocates memory for a block and clear it to zeros.
+ *      This routine is used
+ *      instead of malloc because the block can be kept on a free list so
+ *      they don't thrash malloc/free as much.
+ *
+ * Return:	Success:	valid pointer to the block
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *		Monday, December 23, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_blk_calloc(H5FL_blk_head_t *head, size_t size)
+{
+    void *ret_value;    /* Pointer to the block to return to the user */
+
+    FUNC_ENTER_NOAPI(H5FL_blk_calloc, NULL)
+
+    /* Double check parameters */
+    assert(head);
+    assert(size);
+
+    /* Allocate the block */
+    if (NULL==(ret_value = H5FL_blk_malloc(head,size)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    /* Clear the block to zeros */
+    HDmemset(ret_value,0,size);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FL_blk_calloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_blk_free
+ *
+ * Purpose:	Releases memory for a block.  This routine is used
+ *      instead of free because the blocks can be kept on a free list so
+ *      they don't thrash malloc/free as much.
+ *
+ * Return:	Success:	NULL
+ *
+ *		Failure:	never fails
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, March  23, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_blk_free(H5FL_blk_head_t *head, void *block)
+{
+    H5FL_blk_node_t *free_list;      /* The free list of nodes of correct size */
+    H5FL_blk_list_t *temp;      /* Temp. ptr to the new free list node allocated */
+    size_t free_size;           /* Size of the block freed */
+    void *ret_value=NULL;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FL_blk_free, NULL)
+
+    /* Double check parameters */
+    assert(head);
+    assert(block);
+
+    /* Get the pointer to the native block info header in front of the native block to free */
+    temp=(H5FL_blk_list_t *)((unsigned char *)block-sizeof(H5FL_blk_list_t)); /*lint !e826 Pointer-to-pointer cast is appropriate here */
+
+    /* Save the block's size for later */
+    free_size=temp->size;
+
+    /* check if there is a free list for native blocks of this size */
+    if((free_list=H5FL_blk_find_list(&(head->head),temp->size))==NULL) {
+        /* No free list available, create a new list node and insert it to the queue */
+        free_list=H5FL_blk_create_list(&(head->head),temp->size);
+    } /* end if */
+
+    /* Prepend the free'd native block to the front of the free list */
+    if(free_list!=NULL) {
+        temp->next=free_list->list; /* Overwrites the size field in union */
+        free_list->list=temp;
+    } /* end if */
+
+    /* Increment the number of blocks on free list */
+    head->onlist++;
+    head->list_mem+=free_size;
+
+    /* Increment the amount of "block" freed memory globally */
+    H5FL_blk_gc_head.mem_freed+=free_size;
+
+    /* Check for exceeding free list memory use limits */
+    /* First check this particular list */
+    if(head->list_mem>H5FL_blk_lst_mem_lim)
+        if(H5FL_blk_gc_list(head)<0)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, NULL, "garbage collection failed during free")
+
+    /* Then check the global amount memory on block free lists */
+    if(H5FL_blk_gc_head.mem_freed>H5FL_blk_glb_mem_lim)
+        if(H5FL_blk_gc()<0)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, NULL, "garbage collection failed during free")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FL_blk_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_blk_realloc
+ *
+ * Purpose:	Resizes a block.  This does things the straightforward, simple way,
+ *      not actually using realloc.
+ *
+ * Return:	Success:	NULL
+ *
+ *		Failure:	never fails
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, March  23, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_blk_realloc(H5FL_blk_head_t *head, void *block, size_t new_size)
+{
+    void *ret_value=NULL;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FL_blk_realloc, NULL)
+
+    /* Double check parameters */
+    assert(head);
+    assert(new_size);
+
+    /* Check if we are actually re-allocating a block */
+    if(block!=NULL) {
+        H5FL_blk_list_t *temp;      /* Temp. ptr to the new block node allocated */
+
+        /* Get the pointer to the chunk info header in front of the chunk to free */
+        temp=(H5FL_blk_list_t *)((unsigned char *)block-sizeof(H5FL_blk_list_t)); /*lint !e826 Pointer-to-pointer cast is appropriate here */
+
+        /* check if we are actually changing the size of the buffer */
+        if(new_size!=temp->size) {
+            size_t blk_size;           /* Temporary block size */
+
+            if((ret_value=H5FL_blk_malloc(head,new_size))==NULL)
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for block")
+            blk_size=MIN(new_size,temp->size);
+            HDmemcpy(ret_value,block,blk_size);
+            H5FL_blk_free(head,block);
+        } /* end if */
+        else
+            ret_value=block;
+    } /* end if */
+    /* Not re-allocating, just allocate a fresh block */
+    else
+        ret_value=H5FL_blk_malloc(head,new_size);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FL_blk_realloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_blk_gc_list
+ *
+ * Purpose:	Garbage collect a priority queue
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, March 23, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FL_blk_gc_list(H5FL_blk_head_t *head)
+{
+    H5FL_blk_list_t *list; /* The free list of native nodes of a particular size */
+    void *next;     /* Temp. ptr to the free list list node */
+    void *temp;     /* Temp. ptr to the free list page node */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FL_blk_gc_list)
+
+    /* Loop through all the nodes in the block free list queue */
+    while(head->head!=NULL) {
+        temp=head->head->next;
+
+        /* Loop through all the blocks in the free list, freeing them */
+        list=head->head->list;
+        while(list!=NULL) {
+            next=list->next;
+
+            /* Decrement the number of blocks & memory allocated from this PQ */
+            head->allocated--;
+            head->list_mem-=head->head->size;
+
+            /* Decrement global count of free memory on "block" lists */
+            H5FL_blk_gc_head.mem_freed-=head->head->size;
+
+            /* Free the block */
+            H5MM_xfree(list);
+
+            list=next;
+        } /* end while */
+
+        /* Free the free list node */
+        H5FL_FREE(H5FL_blk_node_t,head->head);
+
+        /* Advance to the next free list */
+        head->head=temp;
+    } /* end while */
+
+    /* Indicate no free nodes on the free list */
+    head->head=NULL;
+    head->onlist=0;
+
+    /* Double check that all the memory on this list is recycled */
+    assert(head->list_mem==0);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}   /* end H5FL_blk_gc_list() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_blk_gc
+ *
+ * Purpose:	Garbage collect on all the priority queues
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, March 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FL_blk_gc(void)
+{
+    H5FL_blk_gc_node_t *gc_node;    /* Pointer into the list of things to garbage collect */
+    herr_t ret_value=SUCCEED;   /* return value*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5FL_blk_gc)
+
+    /* Walk through all the free lists, free()'ing the nodes */
+    gc_node=H5FL_blk_gc_head.first;
+    while(gc_node!=NULL) {
+        /* For each free list being garbage collected, walk through the nodes and free them */
+        if(H5FL_blk_gc_list(gc_node->pq)<0)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, FAIL, "garbage collection of list failed")
+
+        /* Go on to the next free list to garbage collect */
+        gc_node=gc_node->next;
+    } /* end while */
+
+    /* Double check that all the memory on the free lists are recycled */
+    assert(H5FL_blk_gc_head.mem_freed==0);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_blk_gc() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FL_blk_term
+ PURPOSE
+    Terminate various H5FL_blk objects
+ USAGE
+    void H5FL_blk_term()
+ RETURNS
+    Success:	Positive if any action might have caused a change in some
+                other interface; zero otherwise.
+   	Failure:	Negative
+ DESCRIPTION
+    Release any resources allocated.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+     Can't report errors...
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static int
+H5FL_blk_term(void)
+{
+    H5FL_blk_gc_node_t *left;   /* pointer to garbage collection lists with work left */
+    H5FL_blk_gc_node_t *tmp;    /* Temporary pointer to a garbage collection node */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FL_blk_term)
+
+    /* Free the nodes on the garbage collection list, keeping nodes with allocations outstanding */
+    left=NULL;
+    while(H5FL_blk_gc_head.first!=NULL) {
+        tmp=H5FL_blk_gc_head.first->next;
+
+#ifdef H5FL_DEBUG
+printf("H5FL_blk_term: head->name=%s, head->allocated=%d\n", H5FL_blk_gc_head.first->pq->name,(int)H5FL_blk_gc_head.first->pq->allocated);
+#endif /* H5FL_DEBUG */
+
+        /* Check if the list has allocations outstanding */
+        if(H5FL_blk_gc_head.first->pq->allocated>0) {
+            /* Add free list to the list of nodes with allocations open still */
+            H5FL_blk_gc_head.first->next=left;
+            left=H5FL_blk_gc_head.first;
+        } /* end if */
+        /* No allocations left open for list, get rid of it */
+        else {
+            /* Reset the "initialized" flag, in case we restart this list somehow (I don't know how..) */
+            H5FL_blk_gc_head.first->pq->init=0;
+
+            /* Free the node from the garbage collection list */
+            H5MM_xfree(H5FL_blk_gc_head.first);
+        } /* end else */
+
+        H5FL_blk_gc_head.first=tmp;
+    } /* end while */
+
+    /* Point to the list of nodes left with allocations open, if any */
+    H5FL_blk_gc_head.first=left;
+
+    FUNC_LEAVE_NOAPI(H5FL_blk_gc_head.first!=NULL ? 1 : 0)
+}   /* end H5FL_blk_term() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_arr_init
+ *
+ * Purpose:	Initialize a free list for a arrays of certain type.  Right now,
+ *      this just adds the free list to the list of things to garbage collect.
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, March 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FL_arr_init(H5FL_arr_head_t *head)
+{
+    H5FL_gc_arr_node_t *new_node;   /* Pointer to the node for the new list to garbage collect */
+    size_t u;                       /* Local index variable */
+    herr_t ret_value=SUCCEED;       /* return value*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5FL_arr_init)
+
+    /* Allocate a new garbage collection node */
+    if (NULL==(new_node = H5MM_malloc(sizeof(H5FL_gc_arr_node_t))))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+    /* Initialize the new garbage collection node */
+    new_node->list=head;
+
+    /* Link in to the garbage collection list */
+    new_node->next=H5FL_arr_gc_head.first;
+    H5FL_arr_gc_head.first=new_node;
+
+    /* Allocate room for the free lists */
+    if (NULL==(head->list_arr = H5MM_calloc((size_t)head->maxelem*sizeof(H5FL_arr_node_t))))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+    /* Initialize the size of each array */
+    for(u = 0; u<(size_t)head->maxelem; u++)
+        head->list_arr[u].size = head->base_size + (head->elem_size * u);
+
+    /* Indicate that the free list is initialized */
+    head->init=1;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_arr_init() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_arr_free
+ *
+ * Purpose:	Release an array of objects & put on free list
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, March 24, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_arr_free(H5FL_arr_head_t *head, void *obj)
+{
+    H5FL_arr_list_t *temp;  /* Temp. ptr to the new free list node allocated */
+    size_t mem_size;        /* Size of memory being freed */
+    size_t free_nelem;      /* Number of elements in node being free'd */
+    void *ret_value=NULL;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FL_arr_free, NULL)
+
+    /* The H5MM_xfree code allows obj to null */
+    if (!obj)
+        HGOTO_DONE (NULL)
+
+    /* Double check parameters */
+    assert(head);
+
+    /* Make certain that the free list is initialized */
+    assert(head->init);
+
+    /* Get the pointer to the info header in front of the block to free */
+    temp=(H5FL_arr_list_t *)((unsigned char *)obj-sizeof(H5FL_arr_list_t)); /*lint !e826 Pointer-to-pointer cast is appropriate here */
+
+    /* Get the number of elements */
+    free_nelem=temp->nelem;
+
+    /* Double-check that there is enough room for arrays of this size */
+    assert((int)free_nelem<=head->maxelem);
+
+    /* Link into the free list */
+    temp->next=head->list_arr[free_nelem].list;
+
+    /* Point free list at the node freed */
+    head->list_arr[free_nelem].list=temp;
+
+    /* Get the size of arrays with this many elements */
+    mem_size=head->list_arr[free_nelem].size;
+
+    /* Increment the number of blocks & memory used on free list */
+    head->list_arr[free_nelem].onlist++;
+    head->list_mem+=mem_size;
+
+    /* Increment the amount of "array" freed memory globally */
+    H5FL_arr_gc_head.mem_freed+=mem_size;
+
+    /* Check for exceeding free list memory use limits */
+    /* First check this particular list */
+    if(head->list_mem>H5FL_arr_lst_mem_lim)
+        if(H5FL_arr_gc_list(head)<0)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, NULL, "garbage collection failed during free")
+
+    /* Then check the global amount memory on array free lists */
+    if(H5FL_arr_gc_head.mem_freed>H5FL_arr_glb_mem_lim)
+        if(H5FL_arr_gc()<0)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, NULL, "garbage collection failed during free")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_arr_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_arr_malloc
+ *
+ * Purpose:	Allocate an array of objects
+ *
+ * Return:	Success:	Pointer to a valid array object
+ * 		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, March 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_arr_malloc(H5FL_arr_head_t *head, size_t elem)
+{
+    H5FL_arr_list_t *new_obj;   /* Pointer to the new free list node allocated */
+    void *ret_value;        /* Pointer to object to return */
+    size_t mem_size;        /* Size of memory block being recycled */
+
+    FUNC_ENTER_NOAPI(H5FL_arr_malloc, NULL)
+
+    /* Double check parameters */
+    assert(head);
+    assert(elem);
+
+    /* Make certain the list is initialized first */
+    if(!head->init)
+        if(H5FL_arr_init(head)<0)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_CANTINIT, NULL, "can't initialize 'array' blocks")
+
+    /* Get the set of the memory block */
+    mem_size=head->list_arr[elem].size;
+
+    /* Sanity check that the number of elements is supported */
+    assert((int)elem<=head->maxelem);
+
+    /* Check for nodes available on the free list first */
+    if(head->list_arr[elem].list!=NULL) {
+        /* Get a pointer to the block on the free list */
+        new_obj=head->list_arr[elem].list;
+
+        /* Remove node from free list */
+        head->list_arr[elem].list=head->list_arr[elem].list->next;
+
+        /* Decrement the number of blocks & memory used on free list */
+        head->list_arr[elem].onlist--;
+        head->list_mem-=mem_size;
+
+        /* Decrement the amount of global "array" free list memory in use */
+        H5FL_arr_gc_head.mem_freed-=mem_size;
+
+    } /* end if */
+    /* Otherwise allocate a node */
+    else {
+        if (NULL==(new_obj = H5FL_malloc(sizeof(H5FL_arr_list_t)+mem_size)))
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+        /* Increment the number of blocks allocated in list */
+        head->allocated++;
+    } /* end else */
+
+    /* Initialize the new object */
+    new_obj->nelem=elem;
+
+    /* Get a pointer to the new block */
+    ret_value=((char *)new_obj)+sizeof(H5FL_arr_list_t);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_arr_malloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_arr_calloc
+ *
+ * Purpose:	Allocate an array of objects and clear it to zeros
+ *
+ * Return:	Success:	Pointer to a valid array object
+ * 		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, December 23, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_arr_calloc(H5FL_arr_head_t *head, size_t elem)
+{
+    void *ret_value;        /* Pointer to object to return */
+
+    FUNC_ENTER_NOAPI(H5FL_arr_calloc, NULL)
+
+    /* Double check parameters */
+    assert(head);
+    assert(elem);
+
+    /* Allocate the array */
+    if (NULL==(ret_value = H5FL_arr_malloc(head,elem)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    /* Clear to zeros */
+    HDmemset(ret_value,0,head->list_arr[elem].size);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_arr_calloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_arr_realloc
+ *
+ * Purpose:	Reallocate an array of objects
+ *
+ * Return:	Success:	Pointer to a valid array object
+ * 		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, March 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_arr_realloc(H5FL_arr_head_t *head, void * obj, size_t new_elem)
+{
+    void *ret_value;        /* Pointer to object to return */
+
+    FUNC_ENTER_NOAPI(H5FL_arr_realloc, NULL)
+
+    /* Double check parameters */
+    assert(head);
+    assert(new_elem);
+
+    /* Check if we are really allocating the object */
+    if(obj==NULL)
+        ret_value=H5FL_arr_malloc(head,new_elem);
+    else {
+        H5FL_arr_list_t *temp;  /* Temp. ptr to the new free list node allocated */
+
+        /* Sanity check that the number of elements is supported */
+        assert((int)new_elem<=head->maxelem);
+
+        /* Get the pointer to the info header in front of the block to free */
+        temp=(H5FL_arr_list_t *)((unsigned char *)obj-sizeof(H5FL_arr_list_t)); /*lint !e826 Pointer-to-pointer cast is appropriate here */
+
+        /* Check if the size is really changing */
+        if(temp->nelem!=new_elem) {
+            size_t blk_size;       /* Size of block */
+
+            /* Get the new array of objects */
+            ret_value=H5FL_arr_malloc(head,new_elem);
+
+            /* Copy the appropriate amount of elements */
+            blk_size = head->list_arr[ MIN(temp->nelem, new_elem) ].size;
+            HDmemcpy(ret_value,obj,blk_size);
+
+            /* Free the old block */
+            H5FL_arr_free(head,obj);
+        } /* end if */
+        else
+            ret_value=obj;
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_arr_realloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_arr_gc_list
+ *
+ * Purpose:	Garbage collect on an array object free list
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, July 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FL_arr_gc_list(H5FL_arr_head_t *head)
+{
+    H5FL_arr_list_t *arr_free_list; /* Pointer to nodes in free list being garbage collected */
+    void *tmp;      /* Temporary node pointer */
+    unsigned u;     /* Counter for array of free lists */
+    size_t total_mem;   /* Total memory used on list */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FL_arr_gc_list)
+
+    /* Walk through the array of free lists */
+    for(u=0; u<(unsigned)head->maxelem; u++) {
+        if(head->list_arr[u].onlist>0) {
+            /* Calculate the total memory used on this list */
+            total_mem=head->list_arr[u].onlist*head->list_arr[u].size;
+
+            /* For each free list being garbage collected, walk through the nodes and free them */
+            arr_free_list=head->list_arr[u].list;
+            while(arr_free_list!=NULL) {
+                tmp=arr_free_list->next;
+
+                /* Decrement the count of nodes allocated and free the node */
+                head->allocated--;
+                H5MM_xfree(arr_free_list);
+
+                arr_free_list=tmp;
+            } /* end while */
+
+            /* Indicate no free nodes on the free list */
+            head->list_arr[u].list=NULL;
+            head->list_arr[u].onlist=0;
+
+            /* Decrement count of free memory on this "array" list */
+            head->list_mem-=total_mem;
+
+            /* Decrement global count of free memory on "array" lists */
+            H5FL_arr_gc_head.mem_freed-=total_mem;
+        } /* end if */
+    } /* end for */
+
+    /* Double check that all the memory on this list is recycled */
+    assert(head->list_mem==0);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}   /* end H5FL_arr_gc_list() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_arr_gc
+ *
+ * Purpose:	Garbage collect on all the array object free lists
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, March 25, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5FL_arr_gc(void)
+{
+    H5FL_gc_arr_node_t *gc_arr_node;    /* Pointer into the list of things to garbage collect */
+    herr_t ret_value=SUCCEED;   /* return value*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5FL_arr_gc)
+
+    /* Walk through all the free lists, free()'ing the nodes */
+    gc_arr_node=H5FL_arr_gc_head.first;
+    while(gc_arr_node!=NULL) {
+        /* Release the free nodes on the list */
+        if(H5FL_arr_gc_list(gc_arr_node->list)<0)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, FAIL, "garbage collection of list failed")
+
+        /* Go on to the next free list to garbage collect */
+        gc_arr_node=gc_arr_node->next;
+    } /* end while */
+
+    /* Double check that all the memory on the free lists are recycled */
+    assert(H5FL_arr_gc_head.mem_freed==0);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_arr_gc() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FL_arr_term
+ PURPOSE
+    Terminate various H5FL array object free lists
+ USAGE
+    int H5FL_arr_term()
+ RETURNS
+    Success:	Positive if any action might have caused a change in some
+                other interface; zero otherwise.
+   	Failure:	Negative
+ DESCRIPTION
+    Release any resources allocated.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+     Can't report errors...
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static int
+H5FL_arr_term(void)
+{
+    H5FL_gc_arr_node_t *left;   /* pointer to garbage collection lists with work left */
+    H5FL_gc_arr_node_t *tmp;    /* Temporary pointer to a garbage collection node */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FL_arr_term)
+
+    /* Free the nodes on the garbage collection list, keeping nodes with allocations outstanding */
+    left=NULL;
+    while(H5FL_arr_gc_head.first!=NULL) {
+        tmp=H5FL_arr_gc_head.first->next;
+
+        /* Check if the list has allocations outstanding */
+#ifdef H5FL_DEBUG
+printf("H5FL_arr_term: head->name=%s, head->allocated=%d\n", H5FL_arr_gc_head.first->list->name,(int)H5FL_arr_gc_head.first->list->allocated);
+#endif /* H5FL_DEBUG */
+        if(H5FL_arr_gc_head.first->list->allocated>0) {
+            /* Add free list to the list of nodes with allocations open still */
+            H5FL_arr_gc_head.first->next=left;
+            left=H5FL_arr_gc_head.first;
+        } /* end if */
+        /* No allocations left open for list, get rid of it */
+        else {
+            /* Free the array of free lists */
+            H5MM_xfree(H5FL_arr_gc_head.first->list->list_arr);
+
+            /* Reset the "initialized" flag, in case we restart this list somehow (I don't know how..) */
+            H5FL_arr_gc_head.first->list->init=0;
+
+            /* Free the node from the garbage collection list */
+            H5MM_xfree(H5FL_arr_gc_head.first);
+        } /* end else */
+
+        H5FL_arr_gc_head.first=tmp;
+    } /* end while */
+
+    /* Point to the list of nodes left with allocations open, if any */
+    H5FL_arr_gc_head.first=left;
+
+    FUNC_LEAVE_NOAPI(H5FL_arr_gc_head.first!=NULL ? 1 : 0)
+}   /* end H5FL_arr_term() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_seq_free
+ *
+ * Purpose:	Release a sequence of objects & put on free list
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, April 3, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_seq_free(H5FL_seq_head_t *head, void *obj)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FL_seq_free)
+
+    /* Double check parameters */
+    assert(head);
+    assert(obj);
+
+    /* Make certain that the free list is initialized */
+    assert(head->queue.init);
+
+    /* Use block routine */
+    H5FL_blk_free(&(head->queue),obj);
+
+    FUNC_LEAVE_NOAPI(NULL)
+}   /* end H5FL_seq_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_seq_malloc
+ *
+ * Purpose:	Allocate a sequence of objects
+ *
+ * Return:	Success:	Pointer to a valid sequence object
+ * 		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, April 3, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_seq_malloc(H5FL_seq_head_t *head, size_t elem)
+{
+    void *ret_value;        /* Pointer to object to return */
+
+    FUNC_ENTER_NOAPI(H5FL_seq_malloc, NULL)
+
+    /* Double check parameters */
+    assert(head);
+    assert(elem);
+
+    /* Use block routine */
+    ret_value=H5FL_blk_malloc(&(head->queue),head->size*elem);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_seq_malloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_seq_calloc
+ *
+ * Purpose:	Allocate a sequence of objects and clear it to zeros
+ *
+ * Return:	Success:	Pointer to a valid array object
+ * 		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, April 3, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_seq_calloc(H5FL_seq_head_t *head, size_t elem)
+{
+    void *ret_value;        /* Pointer to object to return */
+
+    FUNC_ENTER_NOAPI(H5FL_seq_calloc, NULL)
+
+    /* Double check parameters */
+    assert(head);
+    assert(elem);
+
+    /* Use block routine */
+    ret_value=H5FL_blk_calloc(&(head->queue),head->size*elem);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_seq_calloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_seq_realloc
+ *
+ * Purpose:	Reallocate a sequence of objects
+ *
+ * Return:	Success:	Pointer to a valid sequence object
+ * 		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, April 3, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5FL_seq_realloc(H5FL_seq_head_t *head, void * obj, size_t new_elem)
+{
+    void *ret_value;        /* Pointer to object to return */
+
+    FUNC_ENTER_NOAPI(H5FL_seq_realloc, NULL)
+
+    /* Double check parameters */
+    assert(head);
+    assert(new_elem);
+
+    /* Use block routine */
+    ret_value=H5FL_blk_realloc(&(head->queue),obj,head->size*new_elem);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_seq_realloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_garbage_coll
+ *
+ * Purpose:	Garbage collect on all the free lists
+ *
+ * Return:	Success:	Non-negative
+ * 		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, March 24, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FL_garbage_coll(void)
+{
+    herr_t                  ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5FL_garbage_coll)
+
+    /* Garbage collect the free lists for array objects */
+    if(H5FL_arr_gc()<0)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, FAIL, "can't garbage collect array objects")
+
+    /* Garbage collect free lists for blocks */
+    if(H5FL_blk_gc()<0)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, FAIL, "can't garbage collect block objects")
+
+    /* Garbage collect the free lists for regular objects */
+    if(H5FL_reg_gc()<0)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_CANTGC, FAIL, "can't garbage collect regular objects")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_garbage_coll() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FL_set_free_list_limits
+ *
+ * Purpose:	Sets limits on the different kinds of free lists.  Setting a value
+ *      of -1 for a limit means no limit of that type.  These limits are global
+ *      for the entire library.  Each "global" limit only applies to free lists
+ *      of that type, so if an application sets a limit of 1 MB on each of the
+ *      global lists, up to 3 MB of total storage might be allocated (1MB on
+ *      each of regular, array and block type lists).
+ *
+ * Parameters:
+ *  int reg_global_lim;  IN: The limit on all "regular" free list memory used
+ *  int reg_list_lim;    IN: The limit on memory used in each "regular" free list
+ *  int arr_global_lim;  IN: The limit on all "array" free list memory used
+ *  int arr_list_lim;    IN: The limit on memory used in each "array" free list
+ *  int blk_global_lim;  IN: The limit on all "block" free list memory used
+ *  int blk_list_lim;    IN: The limit on memory used in each "block" free list
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, August 2, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FL_set_free_list_limits(int reg_global_lim, int reg_list_lim, int arr_global_lim,
+    int arr_list_lim, int blk_global_lim, int blk_list_lim)
+{
+    herr_t                  ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5FL_set_free_list_limits, FAIL)
+
+    /* Set the limit variables */
+    /* limit on all regular free lists */
+    H5FL_reg_glb_mem_lim=(reg_global_lim==-1 ? UINT_MAX : (size_t)reg_global_lim);
+    /* limit on each regular free list */
+    H5FL_reg_lst_mem_lim=(reg_list_lim==-1 ? UINT_MAX : (size_t)reg_list_lim);
+    /* limit on all array free lists */
+    H5FL_arr_glb_mem_lim=(arr_global_lim==-1 ? UINT_MAX : (size_t)arr_global_lim);
+    /* limit on each array free list */
+    H5FL_arr_lst_mem_lim=(arr_list_lim==-1 ? UINT_MAX : (size_t)arr_list_lim);
+    /* limit on all block free lists */
+    H5FL_blk_glb_mem_lim=(blk_global_lim==-1 ? UINT_MAX : (size_t)blk_global_lim);
+    /* limit on each block free list */
+    H5FL_blk_lst_mem_lim=(blk_list_lim==-1 ? UINT_MAX : (size_t)blk_list_lim);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5FL_set_free_list_limits() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FL_term_interface
+ PURPOSE
+    Terminate various H5FL objects
+ USAGE
+    void H5FL_term_interface()
+ RETURNS
+    Success:	Positive if any action might have caused a change in some
+                other interface; zero otherwise.
+   	Failure:	Negative
+ DESCRIPTION
+    Release any resources allocated.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+     Can't report errors...
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+int
+H5FL_term_interface(void)
+{
+    int ret_value=0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FL_term_interface)
+
+    /* Garbage collect any nodes on the free lists */
+    (void)H5FL_garbage_coll();
+
+    ret_value=H5FL_reg_term()+H5FL_arr_term()+H5FL_blk_term();
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5FLprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FLprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FLprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,333 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:		H5FLprivate.h
+ *			Mar 23 2000
+ *			Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *
+ * Purpose:		Private non-prototype header.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5FLprivate_H
+#define _H5FLprivate_H
+
+/* Public headers needed by this file */
+#ifdef LATER
+#include "H5FLpublic.h"		/*API prototypes			     */
+#endif /* LATER */
+
+/* Private headers needed by this file */
+
+/* Macros for turning off free lists in the library */
+/* #define H5_NO_FREE_LISTS */
+#if defined H5_NO_FREE_LISTS || defined H5_USING_PURIFY
+#define H5_NO_REG_FREE_LISTS
+#define H5_NO_ARR_FREE_LISTS
+#define H5_NO_SEQ_FREE_LISTS
+#define H5_NO_BLK_FREE_LISTS
+#endif /* H5_NO_FREE_LISTS */
+
+/*
+ * Private datatypes.
+ */
+
+/* Data structure to store each block in free list */
+typedef struct H5FL_reg_node_t {
+    struct H5FL_reg_node_t *next;   /* Pointer to next block in free list */
+} H5FL_reg_node_t;
+
+/* Data structure for free list of blocks */
+typedef struct H5FL_reg_head_t {
+    unsigned init;         /* Whether the free list has been initialized */
+    unsigned allocated;    /* Number of blocks allocated */
+    unsigned onlist;       /* Number of blocks on free list */
+    size_t list_mem;    /* Amount of memory on free list */
+    const char *name;   /* Name of the type */
+    size_t size;        /* Size of the blocks in the list */
+    H5FL_reg_node_t *list;  /* List of free blocks */
+} H5FL_reg_head_t;
+
+/*
+ * Macros for defining & using free lists for a type
+ */
+#define H5FL_REG_NAME(t)        H5_##t##_reg_free_list
+#ifndef H5_NO_REG_FREE_LISTS
+/* Common macros for H5FL_DEFINE & H5FL_DEFINE_STATIC */
+#define H5FL_DEFINE_COMMON(t) H5FL_reg_head_t H5FL_REG_NAME(t)={0,0,0,0,#t,sizeof(t),NULL}
+
+/* Declare a free list to manage objects of type 't' */
+#define H5FL_DEFINE(t) H5_DLL H5FL_DEFINE_COMMON(t)
+
+/* Reference a free list for type 't' defined in another file */
+#define H5FL_EXTERN(t)  extern H5_DLL H5FL_reg_head_t H5FL_REG_NAME(t)
+
+/* Declare a static free list to manage objects of type 't' */
+#define H5FL_DEFINE_STATIC(t)  static H5FL_DEFINE_COMMON(t)
+
+/* Allocate an object of type 't' */
+#define H5FL_MALLOC(t) H5FL_reg_malloc(&(H5FL_REG_NAME(t)))
+
+/* Allocate an object of type 't' and clear it to all zeros */
+#define H5FL_CALLOC(t) H5FL_reg_calloc(&(H5FL_REG_NAME(t)))
+
+/* Free an object of type 't' */
+#define H5FL_FREE(t,obj) H5FL_reg_free(&(H5FL_REG_NAME(t)),obj)
+
+/* Re-allocating an object of type 't' is not defined, because these free-lists
+ * only support fixed sized types, like structs, etc..
+ */
+
+#else /* H5_NO_REG_FREE_LISTS */
+#include "H5MMprivate.h"
+/* Common macro for H5FL_DEFINE & H5FL_DEFINE_STATIC */
+#define H5FL_DEFINE_COMMON(t) int H5FL_REG_NAME(t)
+
+#define H5FL_DEFINE(t)  H5_DLL H5FL_DEFINE_COMMON(t)
+#define H5FL_EXTERN(t)  extern H5_DLL int H5FL_REG_NAME(t)
+#define H5FL_DEFINE_STATIC(t)  static H5FL_DEFINE_COMMON(t)
+#define H5FL_MALLOC(t) H5MM_malloc(sizeof(t))
+#define H5FL_CALLOC(t) H5MM_calloc(sizeof(t))
+#define H5FL_FREE(t,obj) H5MM_xfree(obj)
+#endif /* H5_NO_REG_FREE_LISTS */
+
+/* Data structure to store information about each block allocated */
+typedef union H5FL_blk_list_t {
+    size_t size;                /* Size of the page */
+    union H5FL_blk_list_t *next;   /* Pointer to next block in free list */
+    double unused1;         /* Unused normally, just here for aligment */
+    haddr_t unused2;        /* Unused normally, just here for aligment */
+} H5FL_blk_list_t;
+
+/* Data structure for priority queue node of block free lists */
+typedef struct H5FL_blk_node_t {
+    size_t size;                /* Size of the blocks in the list */
+    H5FL_blk_list_t *list;      /* List of free blocks */
+    struct H5FL_blk_node_t *next;    /* Pointer to next free list in queue */
+    struct H5FL_blk_node_t *prev;    /* Pointer to previous free list in queue */
+} H5FL_blk_node_t;
+
+/* Data structure for priority queue of native block free lists */
+typedef struct H5FL_blk_head_t {
+    unsigned init;         /* Whether the free list has been initialized */
+    unsigned allocated;    /* Number of blocks allocated */
+    unsigned onlist;       /* Number of blocks on free list */
+    size_t list_mem;    /* Amount of memory in block on free list */
+    const char *name;   /* Name of the type */
+    H5FL_blk_node_t *head;  /* Pointer to first free list in queue */
+} H5FL_blk_head_t;
+
+/*
+ * Macros for defining & using priority queues
+ */
+#define H5FL_BLK_NAME(t)        H5_##t##_blk_free_list
+#ifndef H5_NO_BLK_FREE_LISTS
+/* Common macro for H5FL_BLK_DEFINE & H5FL_BLK_DEFINE_STATIC */
+#define H5FL_BLK_DEFINE_COMMON(t) H5FL_blk_head_t H5FL_BLK_NAME(t)={0,0,0,0,#t"_blk",NULL}
+
+/* Declare a free list to manage objects of type 't' */
+#define H5FL_BLK_DEFINE(t)  H5_DLL H5FL_BLK_DEFINE_COMMON(t)
+
+/* Reference a free list for type 't' defined in another file */
+#define H5FL_BLK_EXTERN(t)  extern H5_DLL H5FL_blk_head_t H5FL_BLK_NAME(t)
+
+/* Declare a static free list to manage objects of type 't' */
+#define H5FL_BLK_DEFINE_STATIC(t)  static H5FL_BLK_DEFINE_COMMON(t)
+
+/* Allocate an block of type 't' */
+#define H5FL_BLK_MALLOC(t,size) H5FL_blk_malloc(&(H5FL_BLK_NAME(t)),size)
+
+/* Allocate an block of type 't' and clear it to zeros */
+#define H5FL_BLK_CALLOC(t,size) H5FL_blk_calloc(&(H5FL_BLK_NAME(t)),size)
+
+/* Free a block of type 't' */
+#define H5FL_BLK_FREE(t,blk) H5FL_blk_free(&(H5FL_BLK_NAME(t)),blk)
+
+/* Re-allocate a block of type 't' */
+#define H5FL_BLK_REALLOC(t,blk,new_size) H5FL_blk_realloc(&(H5FL_BLK_NAME(t)),blk,new_size)
+
+/* Check if there is a free block available to re-use */
+#define H5FL_BLK_AVAIL(t,size)  H5FL_blk_free_block_avail(&(H5FL_BLK_NAME(t)),size)
+
+#else /* H5_NO_BLK_FREE_LISTS */
+/* Common macro for H5FL_BLK_DEFINE & H5FL_BLK_DEFINE_STATIC */
+#define H5FL_BLK_DEFINE_COMMON(t) int H5FL_BLK_NAME(t)
+
+#define H5FL_BLK_DEFINE(t)      H5_DLL H5FL_BLK_DEFINE_COMMON(t)
+#define H5FL_BLK_EXTERN(t)      extern H5_DLL int H5FL_BLK_NAME(t)
+#define H5FL_BLK_DEFINE_STATIC(t)  static H5FL_BLK_DEFINE_COMMON(t)
+#define H5FL_BLK_MALLOC(t,size) H5MM_malloc(size)
+#define H5FL_BLK_CALLOC(t,size) H5MM_calloc(size)
+#define H5FL_BLK_FREE(t,blk) H5MM_xfree(blk)
+#define H5FL_BLK_REALLOC(t,blk,new_size) H5MM_realloc(blk,new_size)
+#define H5FL_BLK_AVAIL(t,size)  (FALSE)
+#endif /* H5_NO_BLK_FREE_LISTS */
+
+/* Data structure to store each array in free list */
+typedef union H5FL_arr_list_t {
+    union H5FL_arr_list_t *next;   /* Pointer to next block in free list */
+    size_t nelem;               /* Number of elements in this array */
+    double unused1;             /* Unused normally, just here for aligment */
+    haddr_t unused2;            /* Unused normally, just here for aligment */
+} H5FL_arr_list_t;
+
+/* Data structure for each size of array element */
+typedef struct H5FL_arr_node_t {
+    size_t size;                /* Size of the blocks in the list */
+    unsigned onlist;            /* Number of blocks on free list */
+    H5FL_arr_list_t *list;      /* List of free blocks */
+} H5FL_arr_node_t;
+
+/* Data structure for free list of array blocks */
+typedef struct H5FL_arr_head_t {
+    unsigned init;         /* Whether the free list has been initialized */
+    unsigned allocated;    /* Number of blocks allocated */
+    size_t list_mem;       /* Amount of memory in block on free list */
+    const char *name;      /* Name of the type */
+    int  maxelem;          /* Maximum number of elements in an array */
+    size_t base_size;      /* Size of the "base" object in the list */
+    size_t elem_size;      /* Size of the array elements in the list */
+    H5FL_arr_node_t *list_arr;  /* Array of lists of free blocks */
+} H5FL_arr_head_t;
+
+/*
+ * Macros for defining & using free lists for an array of a type
+ */
+#define H5FL_ARR_NAME(t)        H5_##t##_arr_free_list
+#ifndef H5_NO_ARR_FREE_LISTS
+/* Common macro for H5FL_BLK_DEFINE & H5FL_BLK_DEFINE_STATIC */
+#define H5FL_ARR_DEFINE_COMMON(b,t,m) H5FL_arr_head_t H5FL_ARR_NAME(t)={0,0,0,#t"_arr",m+1,b,sizeof(t),NULL}
+
+/* Declare a free list to manage arrays of type 't' */
+#define H5FL_ARR_DEFINE(t,m)  H5_DLL H5FL_ARR_DEFINE_COMMON(0,t,m)
+
+/* Declare a free list to manage base 'b' + arrays of type 't' */
+#define H5FL_BARR_DEFINE(b,t,m)  H5_DLL H5FL_ARR_DEFINE_COMMON(sizeof(b),t,m)
+
+/* Reference a free list for arrays of type 't' defined in another file */
+#define H5FL_ARR_EXTERN(t)  extern H5_DLL H5FL_arr_head_t H5FL_ARR_NAME(t)
+
+/* Declare a static free list to manage arrays of type 't' */
+#define H5FL_ARR_DEFINE_STATIC(t,m)  static H5FL_ARR_DEFINE_COMMON(0,t,m)
+
+/* Declare a static free list to manage base 'b' + arrays of type 't' */
+#define H5FL_BARR_DEFINE_STATIC(b,t,m)  static H5FL_ARR_DEFINE_COMMON(sizeof(b),t,m)
+
+/* Allocate an array of type 't' */
+#define H5FL_ARR_MALLOC(t,elem) H5FL_arr_malloc(&(H5FL_ARR_NAME(t)),elem)
+
+/* Allocate an array of type 't' and clear it to all zeros */
+#define H5FL_ARR_CALLOC(t,elem) H5FL_arr_calloc(&(H5FL_ARR_NAME(t)),elem)
+
+/* Free an array of type 't' */
+#define H5FL_ARR_FREE(t,obj) H5FL_arr_free(&(H5FL_ARR_NAME(t)),obj)
+
+/* Re-allocate an array of type 't' */
+#define H5FL_ARR_REALLOC(t,obj,new_elem) H5FL_arr_realloc(&(H5FL_ARR_NAME(t)),obj,new_elem)
+
+#else /* H5_NO_ARR_FREE_LISTS */
+/* Common macro for H5FL_ARR_DEFINE & H5FL_ARR_DEFINE_STATIC */
+#define H5FL_ARR_DEFINE_COMMON(t,m) size_t H5FL_ARR_NAME(t)
+
+#define H5FL_ARR_DEFINE(t,m)    H5_DLL H5FL_ARR_DEFINE_COMMON(t,m) = 0
+#define H5FL_BARR_DEFINE(b,t,m) H5_DLL H5FL_ARR_DEFINE_COMMON(t,m) = sizeof(b)
+#define H5FL_ARR_EXTERN(t)      extern H5_DLL H5FL_ARR_DEFINE_COMMON(t,m)
+#define H5FL_ARR_DEFINE_STATIC(t,m)  static H5FL_ARR_DEFINE_COMMON(t,m) = 0
+#define H5FL_BARR_DEFINE_STATIC(b,t,m)  static H5FL_ARR_DEFINE_COMMON(t,m) = sizeof(b)
+#define H5FL_ARR_MALLOC(t,elem) H5MM_malloc(H5FL_ARR_NAME(t) + ((elem)*sizeof(t)))
+#define H5FL_ARR_CALLOC(t,elem) H5MM_calloc(H5FL_ARR_NAME(t) + ((elem)*sizeof(t)))
+#define H5FL_ARR_FREE(t,obj) H5MM_xfree(obj)
+#define H5FL_ARR_REALLOC(t,obj,new_elem) H5MM_realloc(obj,H5FL_ARR_NAME(t) + ((new_elem)*sizeof(t)))
+#endif /* H5_NO_ARR_FREE_LISTS */
+
+/* Data structure for free list of sequence blocks */
+typedef struct H5FL_seq_head_t {
+    H5FL_blk_head_t queue;      /* Priority queue of sequence blocks */
+    size_t size;                /* Size of the sequence elements in the list */
+} H5FL_seq_head_t;
+
+/*
+ * Macros for defining & using free lists for a sequence of a type
+ *
+ * Sequences are like arrays, except they have no upper limit.
+ *
+ */
+#define H5FL_SEQ_NAME(t)        H5_##t##_seq_free_list
+#ifndef H5_NO_SEQ_FREE_LISTS
+/* Common macro for H5FL_SEQ_DEFINE & H5FL_SEQ_DEFINE_STATIC */
+#define H5FL_SEQ_DEFINE_COMMON(t) H5FL_seq_head_t H5FL_SEQ_NAME(t)={{0,0,0,0,#t"_seq",NULL},sizeof(t)}
+
+/* Declare a free list to manage sequences of type 't' */
+#define H5FL_SEQ_DEFINE(t)  H5_DLL H5FL_SEQ_DEFINE_COMMON(t)
+
+/* Reference a free list for sequences of type 't' defined in another file */
+#define H5FL_SEQ_EXTERN(t)  extern H5_DLL H5FL_seq_head_t H5FL_SEQ_NAME(t)
+
+/* Declare a static free list to manage sequences of type 't' */
+#define H5FL_SEQ_DEFINE_STATIC(t)  static H5FL_SEQ_DEFINE_COMMON(t)
+
+/* Allocate a sequence of type 't' */
+#define H5FL_SEQ_MALLOC(t,elem) H5FL_seq_malloc(&(H5FL_SEQ_NAME(t)),elem)
+
+/* Allocate a sequence of type 't' and clear it to all zeros */
+#define H5FL_SEQ_CALLOC(t,elem) H5FL_seq_calloc(&(H5FL_SEQ_NAME(t)),elem)
+
+/* Free a sequence of type 't' */
+#define H5FL_SEQ_FREE(t,obj) H5FL_seq_free(&(H5FL_SEQ_NAME(t)),obj)
+
+/* Re-allocate a sequence of type 't' */
+#define H5FL_SEQ_REALLOC(t,obj,new_elem) H5FL_seq_realloc(&(H5FL_SEQ_NAME(t)),obj,new_elem)
+
+#else /* H5_NO_SEQ_FREE_LISTS */
+/* Common macro for H5FL_BLK_DEFINE & H5FL_BLK_DEFINE_STATIC */
+#define H5FL_SEQ_DEFINE_COMMON(t) int H5FL_SEQ_NAME(t)
+
+#define H5FL_SEQ_DEFINE(t)      H5_DLL H5FL_SEQ_DEFINE_COMMON(t)
+#define H5FL_SEQ_EXTERN(t)      extern H5_DLL int H5FL_SEQ_NAME(t)
+#define H5FL_SEQ_DEFINE_STATIC(t)  static H5FL_SEQ_DEFINE_COMMON(t)
+#define H5FL_SEQ_MALLOC(t,elem) H5MM_malloc((elem)*sizeof(t))
+#define H5FL_SEQ_CALLOC(t,elem) H5MM_calloc((elem)*sizeof(t))
+#define H5FL_SEQ_FREE(t,obj) H5MM_xfree(obj)
+#define H5FL_SEQ_REALLOC(t,obj,new_elem) H5MM_realloc(obj,(new_elem)*sizeof(t))
+#endif /* H5_NO_SEQ_FREE_LISTS */
+
+/*
+ * Library prototypes.
+ */
+H5_DLL void * H5FL_blk_malloc(H5FL_blk_head_t *head, size_t size);
+H5_DLL void * H5FL_blk_calloc(H5FL_blk_head_t *head, size_t size);
+H5_DLL void * H5FL_blk_free(H5FL_blk_head_t *head, void *block);
+H5_DLL void * H5FL_blk_realloc(H5FL_blk_head_t *head, void *block, size_t new_size);
+H5_DLL htri_t H5FL_blk_free_block_avail(H5FL_blk_head_t *head, size_t size);
+H5_DLL void * H5FL_reg_malloc(H5FL_reg_head_t *head);
+H5_DLL void * H5FL_reg_calloc(H5FL_reg_head_t *head);
+H5_DLL void * H5FL_reg_free(H5FL_reg_head_t *head, void *obj);
+H5_DLL void * H5FL_arr_malloc(H5FL_arr_head_t *head, size_t elem);
+H5_DLL void * H5FL_arr_calloc(H5FL_arr_head_t *head, size_t elem);
+H5_DLL void * H5FL_arr_free(H5FL_arr_head_t *head, void *obj);
+H5_DLL void * H5FL_arr_realloc(H5FL_arr_head_t *head, void *obj, size_t new_elem);
+H5_DLL void * H5FL_seq_malloc(H5FL_seq_head_t *head, size_t elem);
+H5_DLL void * H5FL_seq_calloc(H5FL_seq_head_t *head, size_t elem);
+H5_DLL void * H5FL_seq_free(H5FL_seq_head_t *head, void *obj);
+H5_DLL void * H5FL_seq_realloc(H5FL_seq_head_t *head, void *obj, size_t new_elem);
+H5_DLL herr_t H5FL_garbage_coll(void);
+H5_DLL herr_t H5FL_set_free_list_limits(int reg_global_lim, int reg_list_lim,
+    int arr_global_lim, int arr_list_lim, int blk_global_lim, int blk_list_lim);
+H5_DLL int   H5FL_term_interface(void);
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5FO.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FO.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FO.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,603 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Open object info algorithms.
+ *
+ * These are used to track the objects currently open in a file, for various
+ * internal mechanisms which need to be aware of such things.
+ *
+ */
+
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"             /* File access                          */
+#include "H5FLprivate.h"	/* Free lists                           */
+#include "H5FOprivate.h"        /* File objects                         */
+#include "H5Oprivate.h"		/* Object headers		  	*/
+
+/* Private typedefs */
+
+/* Information about open objects in a file */
+typedef struct H5FO_open_obj_t {
+    haddr_t addr;                       /* Address of object header for object */
+    void *obj;                          /* Pointer to the object            */
+    hbool_t deleted;                    /* Flag to indicate that the object was deleted from the file */
+} H5FO_open_obj_t;
+
+/* Information about counted objects in a file */
+typedef struct H5FO_obj_count_t {
+    haddr_t addr;                       /* Address of object header for object */
+    hsize_t count;                      /* Number of times object is opened */
+} H5FO_obj_count_t;
+
+/* Declare a free list to manage the H5FO_open_obj_t struct */
+H5FL_DEFINE_STATIC(H5FO_open_obj_t);
+
+/* Declare a free list to manage the H5FO_obj_count_t struct */
+H5FL_DEFINE_STATIC(H5FO_obj_count_t);
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FO_create
+ PURPOSE
+    Create an open object info set
+ USAGE
+    herr_t H5FO_create(f)
+        H5F_t *f;       IN/OUT: File to create opened object info set for
+
+ RETURNS
+    Returns non-negative on success, negative on failure
+ DESCRIPTION
+    Create a new open object info set.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5FO_create(const H5F_t *f)
+{
+    herr_t ret_value=SUCCEED;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FO_create,FAIL)
+
+    /* Sanity check */
+    assert(f);
+    assert(f->shared);
+
+    /* Create container used to store open object info */
+    if((f->shared->open_objs=H5SL_create(H5SL_TYPE_HADDR,0.5,16))==NULL)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to create open object container")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FO_create() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FO_opened
+ PURPOSE
+    Checks if an object at an address is already open in the file.
+ USAGE
+    void * H5FO_opened(f,addr)
+        const H5F_t *f;         IN: File to check opened object info set
+        haddr_t addr;           IN: Address of object to check
+
+ RETURNS
+    Returns a pointer to the object on success, NULL on failure
+ DESCRIPTION
+    Check is an object at an address (the address of the object's object header)
+    is already open in the file and return the ID for that object if it is open.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+void *
+H5FO_opened(const H5F_t *f, haddr_t addr)
+{
+    H5FO_open_obj_t *open_obj;  /* Information about open object */
+    void *ret_value;            /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5FO_opened)
+
+    /* Sanity check */
+    assert(f);
+    assert(f->shared);
+    assert(f->shared->open_objs);
+    assert(H5F_addr_defined(addr));
+
+    /* Get the object node from the container */
+    if((open_obj=H5SL_search(f->shared->open_objs,&addr))!=NULL) {
+        ret_value=open_obj->obj;
+        assert(ret_value!=NULL);
+    } /* end if */
+    else
+        ret_value=NULL;
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FO_opened() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FO_insert
+ PURPOSE
+    Insert a newly opened object/pointer pair into the opened object info set
+ USAGE
+    herr_t H5FO_insert(f,addr,obj)
+        H5F_t *f;               IN/OUT: File's opened object info set
+        haddr_t addr;           IN: Address of object to insert
+        void *obj;              IN: Pointer to object to insert
+        int type;               IN: Type of object being inserted
+
+ RETURNS
+    Returns a non-negative on success, negative on failure
+ DESCRIPTION
+    Insert an object/ID pair into the opened object info set.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5FO_insert(const H5F_t *f, haddr_t addr, void *obj)
+{
+    H5FO_open_obj_t *open_obj;  /* Information about open object */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FO_insert,FAIL)
+
+    /* Sanity check */
+    assert(f);
+    assert(f->shared);
+    assert(f->shared->open_objs);
+    assert(H5F_addr_defined(addr));
+    assert(obj);
+
+    /* Allocate new opened object information structure */
+    if((open_obj=H5FL_MALLOC(H5FO_open_obj_t))==NULL)
+        HGOTO_ERROR(H5E_CACHE,H5E_NOSPACE,FAIL,"memory allocation failed")
+
+    /* Assign information */
+    open_obj->addr=addr;
+    open_obj->obj=obj;
+    open_obj->deleted=0;
+
+    /* Insert into container */
+    if(H5SL_insert(f->shared->open_objs,&open_obj->addr,open_obj)<0)
+        HGOTO_ERROR(H5E_CACHE,H5E_CANTINSERT,FAIL,"can't insert object into container")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FO_insert() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FO_delete
+ PURPOSE
+    Remove an opened object/ID pair from the opened object info set
+ USAGE
+    herr_t H5FO_delete(f,addr)
+        H5F_t *f;               IN/OUT: File's opened object info set
+        haddr_t addr;           IN: Address of object to remove
+
+ RETURNS
+    Returns a non-negative on success, negative on failure
+ DESCRIPTION
+    Remove an object/ID pair from the opened object info.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5FO_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr)
+{
+    H5FO_open_obj_t *open_obj;  /* Information about open object */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FO_delete,FAIL)
+
+    /* Sanity check */
+    assert(f);
+    assert(f->shared);
+    assert(f->shared->open_objs);
+    assert(H5F_addr_defined(addr));
+
+    /* Remove from container */
+    if((open_obj=H5SL_remove(f->shared->open_objs,&addr))==NULL)
+        HGOTO_ERROR(H5E_CACHE,H5E_CANTRELEASE,FAIL,"can't remove object from container")
+
+    /* Check if the object was deleted from the file */
+    if(open_obj->deleted) {
+        if(H5O_delete(f, dxpl_id, addr)<0)
+            HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, FAIL, "can't delete object from file")
+    } /* end if */
+
+    /* Release the object information */
+    H5FL_FREE(H5FO_open_obj_t,open_obj);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FO_delete() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FO_mark
+ PURPOSE
+    Mark an object to be deleted when it is closed
+ USAGE
+    herr_t H5FO_mark(f,addr)
+        const H5F_t *f;         IN: File opened object is in
+        haddr_t addr;           IN: Address of object to delete
+
+ RETURNS
+    Returns a non-negative ID for the object on success, negative on failure
+ DESCRIPTION
+    Mark an opened object for deletion from the file when it is closed.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5FO_mark(const H5F_t *f, haddr_t addr, hbool_t deleted)
+{
+    H5FO_open_obj_t *open_obj;  /* Information about open object */
+    herr_t ret_value=SUCCEED;            /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5FO_mark)
+
+    /* Sanity check */
+    assert(f);
+    assert(f->shared);
+    assert(f->shared->open_objs);
+    assert(H5F_addr_defined(addr));
+
+    /* Get the object node from the container */
+    if((open_obj=H5SL_search(f->shared->open_objs,&addr))!=NULL)
+        open_obj->deleted=deleted;
+    else
+        ret_value=FAIL;
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FO_mark() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FO_marked
+ PURPOSE
+    Check if an object is marked to be deleted when it is closed
+ USAGE
+    htri_t H5FO_mark(f,addr)
+        const H5F_t *f;         IN: File opened object is in
+        haddr_t addr;           IN: Address of object to delete
+
+ RETURNS
+    Returns a TRUE/FALSE on success, negative on failure
+ DESCRIPTION
+    Checks if the object is currently in the "opened objects" tree and
+    whether its marks for deletion from the file when it is closed.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5FO_marked(const H5F_t *f, haddr_t addr)
+{
+    H5FO_open_obj_t *open_obj;  /* Information about open object */
+    htri_t ret_value=FAIL;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5FO_marked)
+
+    /* Sanity check */
+    assert(f);
+    assert(f->shared);
+    assert(f->shared->open_objs);
+    assert(H5F_addr_defined(addr));
+
+    /* Get the object node from the container */
+    if((open_obj=H5SL_search(f->shared->open_objs,&addr))!=NULL)
+        ret_value=open_obj->deleted;
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FO_marked() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FO_dest
+ PURPOSE
+    Destroy an open object info set
+ USAGE
+    herr_t H5FO_dest(f)
+        H5F_t *f;               IN/OUT: File's opened object info set
+
+ RETURNS
+    Returns a non-negative on success, negative on failure
+ DESCRIPTION
+    Destroy an existing open object info set.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5FO_dest(const H5F_t *f)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FO_dest,FAIL)
+
+    /* Sanity check */
+    assert(f);
+    assert(f->shared);
+    assert(f->shared->open_objs);
+
+    /* Check if the object info set is empty */
+    if(H5SL_count(f->shared->open_objs)!=0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTRELEASE, FAIL, "objects still in open object info set")
+
+    /* Release the open object info set container */
+    if(H5SL_close(f->shared->open_objs)<0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTCLOSEOBJ, FAIL, "can't close open object info set")
+
+    f->shared->open_objs=NULL;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FO_dest() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FO_top_create
+ PURPOSE
+    Create the "top" open object count set
+ USAGE
+    herr_t H5FO_create(f)
+        H5F_t *f;       IN/OUT: File to create opened object count set for
+
+ RETURNS
+    Returns non-negative on success, negative on failure
+ DESCRIPTION
+    Create a new open object count set.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5FO_top_create(H5F_t *f)
+{
+    herr_t ret_value = SUCCEED;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FO_top_create, FAIL)
+
+    /* Sanity check */
+    HDassert(f);
+
+    /* Create container used to store open object info */
+    if((f->obj_count = H5SL_create(H5SL_TYPE_HADDR, 0.5, 16)) == NULL)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to create open object container")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FO_top_create() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FO_top_incr
+ PURPOSE
+    Increment the "top" reference count for an object in a file
+ USAGE
+    herr_t H5FO_top_incr(f, addr)
+        H5F_t *f;               IN/OUT: File's opened object info set
+        haddr_t addr;           IN: Address of object to increment
+
+ RETURNS
+    Returns a non-negative on success, negative on failure
+ DESCRIPTION
+    Increment the reference count for an object in the opened object count set.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5FO_top_incr(const H5F_t *f, haddr_t addr)
+{
+    H5FO_obj_count_t *obj_count;  /* Ref. count for object */
+    herr_t ret_value = SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FO_top_incr, FAIL)
+
+    /* Sanity check */
+    HDassert(f);
+    HDassert(f->obj_count);
+    HDassert(H5F_addr_defined(addr));
+
+    /* Get the object node from the container */
+    if((obj_count = H5SL_search(f->obj_count, &addr)) != NULL) {
+        (obj_count->count)++;
+    } /* end if */
+    else {
+        /* Allocate new opened object information structure */
+        if((obj_count = H5FL_MALLOC(H5FO_obj_count_t)) == NULL)
+            HGOTO_ERROR(H5E_CACHE,H5E_NOSPACE,FAIL,"memory allocation failed")
+
+        /* Assign information */
+        obj_count->addr = addr;
+        obj_count->count = 1;
+
+        /* Insert into container */
+        if(H5SL_insert(f->obj_count, &obj_count->addr, obj_count) < 0)
+            HGOTO_ERROR(H5E_CACHE,H5E_CANTINSERT,FAIL,"can't insert object into container")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FO_top_incr() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FO_top_decr
+ PURPOSE
+    Decrement the "top" reference count for an object in a file
+ USAGE
+    herr_t H5FO_top_decr(f, addr)
+        H5F_t *f;               IN/OUT: File's opened object info set
+        haddr_t addr;           IN: Address of object to decrement
+
+ RETURNS
+    Returns a non-negative on success, negative on failure
+ DESCRIPTION
+    Decrement the reference count for an object in the opened object count set.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5FO_top_decr(const H5F_t *f, haddr_t addr)
+{
+    H5FO_obj_count_t *obj_count;  /* Ref. count for object */
+    herr_t ret_value = SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FO_top_decr, FAIL)
+
+    /* Sanity check */
+    HDassert(f);
+    HDassert(f->obj_count);
+    HDassert(H5F_addr_defined(addr));
+
+    /* Get the object node from the container */
+    if((obj_count = H5SL_search(f->obj_count, &addr)) != NULL) {
+        /* Decrement the reference count for the object */
+        (obj_count->count)--;
+
+        if(obj_count->count == 0) {
+            /* Remove from container */
+            if((obj_count = H5SL_remove(f->obj_count, &addr)) == NULL)
+                HGOTO_ERROR(H5E_CACHE, H5E_CANTRELEASE, FAIL, "can't remove object from container")
+
+            /* Release the object information */
+            H5FL_FREE(H5FO_obj_count_t, obj_count);
+        } /* end if */
+    } /* end if */
+    else
+        HGOTO_ERROR(H5E_CACHE, H5E_NOTFOUND, FAIL, "can't decrement ref. count")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FO_top_decr() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FO_top_count
+ PURPOSE
+    Return the "top" reference count for an object in a file
+ USAGE
+    hsize_t H5FO_top_incr(f, addr)
+        H5F_t *f;               IN/OUT: File's opened object info set
+        haddr_t addr;           IN: Address of object to increment
+
+ RETURNS
+    Returns a non-negative on success, negative on failure
+ DESCRIPTION
+    Retrieves the reference count for an object in the opened object count set.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hsize_t
+H5FO_top_count(const H5F_t *f, haddr_t addr)
+{
+    H5FO_obj_count_t *obj_count;        /* Ref. count for object */
+    hsize_t ret_value;                  /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FO_top_count)
+
+    /* Sanity check */
+    HDassert(f);
+    HDassert(f->obj_count);
+    HDassert(H5F_addr_defined(addr));
+
+    /* Get the object node from the container */
+    if((obj_count = H5SL_search(f->obj_count, &addr)) != NULL)
+        ret_value = obj_count->count;
+    else
+        ret_value = 0;
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FO_top_count() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5FO_top_dest
+ PURPOSE
+    Destroy an open object info set
+ USAGE
+    herr_t H5FO_top_dest(f)
+        H5F_t *f;               IN/OUT: File's opened object info set
+
+ RETURNS
+    Returns a non-negative on success, negative on failure
+ DESCRIPTION
+    Destroy an existing open object info set.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5FO_top_dest(H5F_t *f)
+{
+    herr_t ret_value = SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5FO_top_dest, FAIL)
+
+    /* Sanity check */
+    HDassert(f);
+    HDassert(f->obj_count);
+
+    /* Check if the object count set is empty */
+    if(H5SL_count(f->obj_count) != 0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTRELEASE, FAIL, "objects still in open object info set")
+
+    /* Release the open object count set container */
+    if(H5SL_close(f->obj_count) < 0)
+        HGOTO_ERROR(H5E_CACHE, H5E_CANTCLOSEOBJ, FAIL, "can't close open object info set")
+
+    f->obj_count = NULL;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5FO_top_dest() */
+

Added: packages/hdf5/branches/upstream/current/src/H5FOprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FOprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FOprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,52 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains library private information about the H5FO module
+ */
+#ifndef _H5FOprivate_H
+#define _H5FOprivate_H
+
+#ifdef LATER
+#include "H5FOpublic.h"
+#endif /* LATER */
+
+/* Private headers needed by this file */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5SLprivate.h"	/* Skip lists				*/
+
+/* Typedefs */
+
+/* Typedef for open object cache */
+typedef H5SL_t H5FO_t;       /* Currently, all open objects are stored in skip list */
+
+/* Macros */
+
+/* Private routines */
+H5_DLL herr_t H5FO_create(const H5F_t *f);
+H5_DLL void  *H5FO_opened(const H5F_t *f, haddr_t addr);
+H5_DLL herr_t H5FO_insert(const H5F_t *f, haddr_t addr, void *obj);
+H5_DLL herr_t H5FO_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr);
+H5_DLL herr_t H5FO_mark(const H5F_t *f, haddr_t addr, hbool_t deleted);
+H5_DLL htri_t H5FO_marked(const H5F_t *f, haddr_t addr);
+H5_DLL herr_t H5FO_dest(const H5F_t *f);
+H5_DLL herr_t H5FO_top_create(H5F_t *f);
+H5_DLL herr_t H5FO_top_incr(const H5F_t *f, haddr_t addr);
+H5_DLL herr_t H5FO_top_decr(const H5F_t *f, haddr_t addr);
+H5_DLL hsize_t H5FO_top_count(const H5F_t *f, haddr_t addr);
+H5_DLL herr_t H5FO_top_dest(H5F_t *f);
+
+#endif /* _H5FOprivate_H */
+

Added: packages/hdf5/branches/upstream/current/src/H5FS.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FS.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FS.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,214 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Purpose:	Provides internal function tracing in the form of a stack.
+ *		The FUNC_ENTER() macro adds the function name to the function
+ *              stack whenever a function is entered.
+ *		As the functions return with FUNC_LEAVE,
+ *		entries are removed from the stack.
+ *
+ *		A function stack has a fixed maximum size.  If this size is
+ *		exceeded then the stack will be truncated and only the
+ *		first called functions will have entries on the stack. This is
+ *		expected to be a rare condition.
+ *
+ */
+
+
+#include "H5private.h"		/* Generic Functions			  */
+#include "H5FSprivate.h"	/* Private function stack routines	  */
+
+#ifdef H5_HAVE_FUNCSTACK
+
+#ifdef H5_HAVE_THREADSAFE
+/*
+ * The per-thread function stack. pthread_once() initializes a special
+ * key that will be used by all threads to create a stack specific to
+ * each thread individually. The association of stacks to threads will
+ * be handled by the pthread library.
+ *
+ * In order for this macro to work, H5FS_get_my_stack() must be preceeded
+ * by "H5FS_t *fstack =".
+ */
+static H5FS_t *H5FS_get_stack(void);
+#define H5FS_get_my_stack()  H5FS_get_stack()
+#else /* H5_HAVE_THREADSAFE */
+/*
+ * The function stack.  Eventually we'll have some sort of global table so each
+ * thread has it's own stack.  The stacks will be created on demand when the
+ * thread first calls H5FS_push().  */
+H5FS_t		H5FS_stack_g[1];
+#define H5FS_get_my_stack()	(H5FS_stack_g+0)
+#endif /* H5_HAVE_THREADSAFE */
+
+
+#ifdef H5_HAVE_THREADSAFE
+/*-------------------------------------------------------------------------
+ * Function:	H5FS_get_stack
+ *
+ * Purpose:	Support function for H5FS_get_my_stack() to initialize and
+ *              acquire per-thread function stack.
+ *
+ * Return:	Success:	function stack (H5FS_t *)
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              February 6, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5FS_t *
+H5FS_get_stack(void)
+{
+    H5FS_t *fstack;
+
+    FUNC_ENTER_NOAPI_NOFUNC_NOFS(H5FS_get_stack);
+
+    fstack = pthread_getspecific(H5TS_funcstk_key_g);
+    if (!fstack) {
+        /* no associated value with current thread - create one */
+        fstack = (H5FS_t *)HDmalloc(sizeof(H5FS_t));  /* Don't use H5MM_malloc() here, it causes infinite recursion */
+        pthread_setspecific(H5TS_funcstk_key_g, (void *)fstack);
+	fstack->nused=0;
+    }
+
+    FUNC_LEAVE_NOAPI_NOFS(fstack);
+} /* end H5FS_get_stack() */
+#endif  /* H5_HAVE_THREADSAFE */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FS_print
+ *
+ * Purpose:	Prints the function stack in some default way.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              THursday, February 6, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FS_print(FILE *stream)
+{
+    H5FS_t	*fstack = H5FS_get_my_stack (); /* Get the correct function stack */
+    const int	indent = 2;             /* Indention level */
+    int         i;                      /* Local index ariable */
+
+    /* Don't push this function on the function stack... :-) */
+    FUNC_ENTER_NOAPI_NOFUNC_NOFS(H5FS_print);
+
+    /* Sanity check */
+    assert(fstack);
+
+    /* Default to outputting information to stderr */
+    if (!stream)
+        stream = stderr;
+
+    HDfprintf (stream, "HDF5-DIAG: Function stack from %s ", H5_lib_vers_info_g);
+    /* try show the process or thread id in multiple processes cases*/
+#ifdef H5_HAVE_THREADSAFE
+    HDfprintf (stream, "thread %d.", (int)pthread_self());
+#else  /* H5_HAVE_THREADSAFE */
+    HDfprintf (stream, "thread 0.");
+#endif  /* H5_HAVE_THREADSAFE */
+    if (fstack && fstack->nused>0)
+        HDfprintf (stream, "  Back trace follows.");
+    HDfputc ('\n', stream);
+
+    for (i=fstack->nused-1; i>=0; --i)
+        HDfprintf(stream, "%*s#%03d: Routine: %s\n", indent, "", i, fstack->slot[i]);
+
+    FUNC_LEAVE_NOAPI_NOFS(SUCCEED);
+} /* end H5FS_print() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FS_push
+ *
+ * Purpose:	Pushes a new record onto function stack for the current
+ *		thread.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, February 6, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FS_push(const char *func_name)
+{
+    H5FS_t	*fstack = H5FS_get_my_stack ();
+
+    /* Don't push this function on the function stack... :-) */
+    FUNC_ENTER_NOAPI_NOFUNC_NOFS(H5FS_push);
+
+    /* Sanity check */
+    assert (fstack);
+    assert (func_name);
+
+    /*
+     * Push the function if there's room.  Otherwise just increment count
+     */
+    if (fstack->nused<H5FS_NSLOTS)
+	fstack->slot[fstack->nused] = func_name;
+    fstack->nused++;
+
+    FUNC_LEAVE_NOAPI_NOFS(SUCCEED);
+} /* end H5FS_push() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5FS_pop
+ *
+ * Purpose:	Pops a record off function stack for the current thread.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, February 6, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5FS_pop(void)
+{
+    H5FS_t	*fstack = H5FS_get_my_stack ();
+
+    /* Don't push this function on the function stack... :-) */
+    FUNC_ENTER_NOAPI_NOFUNC_NOFS(H5FS_pop);
+
+    /* Sanity check */
+    assert (fstack);
+    assert (fstack->nused>0);
+
+    /* Pop the function. */
+    fstack->nused--;
+
+    FUNC_LEAVE_NOAPI_NOFS(SUCCEED);
+} /* end H5FS_pop() */
+
+#endif /* H5_HAVE_FUNCSTACK */

Added: packages/hdf5/branches/upstream/current/src/H5FSprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5FSprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5FSprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,40 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  Header file for function stacks, etc.
+ */
+#ifndef _H5FSprivate_H
+#define _H5FSprivate_H
+
+#ifdef NOT_YET
+#include "H5FSpublic.h"
+#endif /* NOT_YET */
+
+/* Private headers needed by this file */
+#include "H5private.h"
+
+#define H5FS_NSLOTS	32	/*number of slots in an function stack	     */
+
+/* A function stack */
+typedef struct H5FS_t {
+    int	nused;			        /*num slots currently used in stack  */
+    const char *slot[H5FS_NSLOTS];	/*array of function records	     */
+} H5FS_t;
+
+H5_DLL herr_t H5FS_push (const char *func_name);
+H5_DLL herr_t H5FS_pop (void);
+H5_DLL herr_t H5FS_print (FILE *stream);
+
+#endif /* _H5FSprivate_H */

Added: packages/hdf5/branches/upstream/current/src/H5Fdbg.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Fdbg.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Fdbg.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,142 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Wednesday, July 9, 2003
+ *
+ * Purpose:	File object debugging functions.
+ */
+
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		        */
+#include "H5Fpkg.h"             /* File access				*/
+#include "H5Iprivate.h"		/* ID Functions		                */
+#include "H5Pprivate.h"		/* Property lists			*/
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_debug
+ *
+ * Purpose:	Prints a file header to the specified stream.  Each line
+ *		is indented and the field name occupies the specified width
+ *		number of characters.
+ *
+ * Errors:
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  1 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ *		Raymond Lu, 2001-10-14
+ * 		Changed to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_debug(H5F_t *f, hid_t dxpl_id, FILE * stream, int indent, int fwidth)
+{
+    hsize_t userblock_size;
+    int     super_vers, freespace_vers, obj_dir_vers, share_head_vers;
+    H5P_genplist_t *plist;              /* Property list */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5F_debug, FAIL)
+
+    /* check args */
+    assert(f);
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    /* Get property list */
+    if(NULL == (plist = H5I_object(f->shared->fcpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
+
+    if(H5P_get(plist, H5F_CRT_USER_BLOCK_NAME, &userblock_size)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get user block size")
+    if(H5P_get(plist, H5F_CRT_SUPER_VERS_NAME, &super_vers)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get super block version")
+    if(H5P_get(plist, H5F_CRT_FREESPACE_VERS_NAME, &freespace_vers)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get super block version")
+    if(H5P_get(plist, H5F_CRT_OBJ_DIR_VERS_NAME, &obj_dir_vers)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get object directory version")
+    if(H5P_get(plist, H5F_CRT_SHARE_HEAD_VERS_NAME, &share_head_vers)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get shared-header format version")
+
+    /* debug */
+    HDfprintf(stream, "%*sFile Super Block...\n", indent, "");
+
+    HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+	      "File name:",
+	      f->name);
+    HDfprintf(stream, "%*s%-*s 0x%08x\n", indent, "", fwidth,
+	      "File access flags",
+	      (unsigned) (f->shared->flags));
+    HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+	      "File open reference count:",
+	      (unsigned) (f->shared->nrefs));
+    HDfprintf(stream, "%*s%-*s %a (abs)\n", indent, "", fwidth,
+	      "Address of super block:", f->shared->super_addr);
+    HDfprintf(stream, "%*s%-*s %lu bytes\n", indent, "", fwidth,
+	      "Size of user block:", (unsigned long) userblock_size);
+
+    HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+	      "Super block version number:", (unsigned) super_vers);
+    HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+	      "Free list version number:", (unsigned) freespace_vers);
+    HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+	      "Root group symbol table entry version number:", (unsigned) obj_dir_vers);
+    HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+	      "Shared header version number:", (unsigned) share_head_vers);
+    HDfprintf(stream, "%*s%-*s %u bytes\n", indent, "", fwidth,
+	      "Size of file offsets (haddr_t type):", (unsigned) f->shared->sizeof_addr);
+    HDfprintf(stream, "%*s%-*s %u bytes\n", indent, "", fwidth,
+	      "Size of file lengths (hsize_t type):", (unsigned) f->shared->sizeof_size);
+    HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+	      "Symbol table leaf node 1/2 rank:", f->shared->sym_leaf_k);
+    HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+	      "Symbol table internal node 1/2 rank:",
+              f->shared->btree_k[H5B_SNODE_ID]);
+    HDfprintf(stream, "%*s%-*s 0x%08lx\n", indent, "", fwidth,
+	      "File consistency flags:",
+	      (unsigned long) (f->shared->consist_flags));
+    HDfprintf(stream, "%*s%-*s %a (abs)\n", indent, "", fwidth,
+	      "Base address:", f->shared->base_addr);
+    HDfprintf(stream, "%*s%-*s %a (rel)\n", indent, "", fwidth,
+	      "Free list address:", f->shared->freespace_addr);
+
+    HDfprintf(stream, "%*s%-*s %a (rel)\n", indent, "", fwidth,
+	      "Address of driver information block:", f->shared->driver_addr);
+
+    HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+	      "Root group symbol table entry:",
+	      f->shared->root_grp ? "" : "(none)");
+    if (f->shared->root_grp) {
+	H5G_ent_debug(f, dxpl_id, H5G_entof(f->shared->root_grp), stream,
+		      indent+3, MAX(0, fwidth-3), HADDR_UNDEF);
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Fmount.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Fmount.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Fmount.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,687 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5F_init_mount_interface
+
+
+/* Packages needed by this file... */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"             /* File access				*/
+#include "H5Gprivate.h"		/* Groups				*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Pprivate.h"		/* Property lists			*/
+#include "H5MMprivate.h"	/* Memory management			*/
+
+/* PRIVATE PROTOTYPES */
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5F_init_mount_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5F_init_mount_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5F_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5F_init_mount_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_init_mount_interface)
+
+    FUNC_LEAVE_NOAPI(H5F_init())
+} /* H5F_init_mount_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_close_mounts
+ *
+ * Purpose:	Close all mounts for a given file
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, July  2, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_close_mounts(H5F_t *f)
+{
+    unsigned u;                 /* Local index */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5F_close_mounts, FAIL)
+
+    HDassert(f);
+
+    /* Unmount all child files */
+    for (u = 0; u < f->mtab.nmounts; u++) {
+        /* Detach the child file from the parent file */
+        f->mtab.child[u].file->mtab.parent = NULL;
+
+        /* Close the internal group maintaining the mount point */
+        if(H5G_close(f->mtab.child[u].group) < 0)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEOBJ, FAIL, "can't close child group")
+
+        /* Close the child file */
+        if(H5F_try_close(f->mtab.child[u].file) < 0)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close child file")
+    } /* end if */
+    f->mtab.nmounts = 0;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_close_mounts() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_mount
+ *
+ * Purpose:	Mount file CHILD onto the group specified by LOC and NAME,
+ *		using mount properties in PLIST.  CHILD must not already be
+ *		mouted and must not be a mount ancestor of the mount-point.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, October  6, 1998
+ *
+ * Modifications:
+ *
+ * 	Robb Matzke, 1998-10-14
+ *	The reference count for the mounted H5F_t is incremented.
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5F_mount(H5G_entry_t *loc, const char *name, H5F_t *child,
+	  hid_t UNUSED plist_id, hid_t dxpl_id)
+{
+    H5G_t	*mount_point = NULL;	/*mount point group		*/
+    H5G_entry_t	*mp_ent = NULL;		/*mount point symbol table entry*/
+    H5F_t	*ancestor = NULL;	/*ancestor files		*/
+    H5F_t	*parent = NULL;		/*file containing mount point	*/
+    unsigned	lt, rt, md;		/*binary search indices		*/
+    int		cmp;			/*binary search comparison value*/
+    H5G_entry_t	*ent = NULL;		/*temporary symbol table entry	*/
+    H5G_entry_t  mp_open_ent;     /* entry of moint point to be opened */
+    H5RS_str_t  *name_r;                /* Ref-counted version of name */
+    herr_t	ret_value = SUCCEED;	/*return value			*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_mount)
+
+    assert(loc);
+    assert(name && *name);
+    assert(child);
+    assert(TRUE==H5P_isa_class(plist_id,H5P_MOUNT));
+
+    /*
+     * Check that the child isn't mounted, that the mount point exists, that
+     * the parent & child files have the same file close degree, and
+     * that the mount wouldn't introduce a cycle in the mount tree.
+     */
+    if (child->mtab.parent)
+        HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "file is already mounted")
+    if (H5G_find(loc, name, &mp_open_ent/*out*/, H5AC_dxpl_id) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "group not found")
+    if (NULL==(mount_point=H5G_open(&mp_open_ent, dxpl_id)))
+        HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "mount point not found")
+
+    parent = H5G_fileof(mount_point);
+    mp_ent = H5G_entof(mount_point);
+    for (ancestor=parent; ancestor; ancestor=ancestor->mtab.parent) {
+	if (ancestor==child)
+	    HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "mount would introduce a cycle")
+    }
+
+    if(parent->shared->fc_degree != child->shared->fc_degree)
+        HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "mounted file has different file close degree than parent")
+
+    /*
+     * Use a binary search to locate the position that the child should be
+     * inserted into the parent mount table.  At the end of this paragraph
+     * `md' will be the index where the child should be inserted.
+     */
+    lt = md = 0;
+    rt=parent->mtab.nmounts;
+    cmp = -1;
+    while (lt<rt && cmp) {
+	md = (lt+rt)/2;
+	ent = H5G_entof(parent->mtab.child[md].group);
+	cmp = H5F_addr_cmp(mp_ent->header, ent->header);
+	if (cmp<0) {
+	    rt = md;
+	} else if (cmp>0) {
+	    lt = md+1;
+	}
+    }
+    if (cmp>0)
+        md++;
+    if (!cmp)
+	HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "mount point is already in use")
+
+    /* Make room in the table */
+    if (parent->mtab.nmounts>=parent->mtab.nalloc) {
+	unsigned n = MAX(16, 2*parent->mtab.nalloc);
+	H5F_mount_t *x = H5MM_realloc(parent->mtab.child,
+				      n*sizeof(parent->mtab.child[0]));
+	if (!x)
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for mount table")
+	parent->mtab.child = x;
+	parent->mtab.nalloc = n;
+    }
+
+    /* Insert into table */
+    HDmemmove(parent->mtab.child+md+1, parent->mtab.child+md,
+        (parent->mtab.nmounts-md)*sizeof(parent->mtab.child[0]));
+    parent->mtab.nmounts++;
+    parent->mtab.child[md].group = mount_point;
+    parent->mtab.child[md].file = child;
+    child->mtab.parent = parent;
+
+    /* Set the group's mountpoint flag */
+    if(H5G_mount(parent->mtab.child[md].group)<0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEOBJ, FAIL, "unable to set group mounted flag")
+
+    /* Search the open IDs and replace names for mount operation */
+    /* We pass H5G_UNKNOWN as object type; search all IDs */
+    name_r=H5RS_wrap(name);
+    assert(name_r);
+    if (H5G_replace_name( H5G_UNKNOWN, loc, name_r, NULL, NULL, NULL, OP_MOUNT )<0)
+	HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "unable to replace name")
+    if(H5RS_decr(name_r)<0)
+	HGOTO_ERROR(H5E_FILE, H5E_CANTDEC, FAIL, "unable to decrement name string")
+
+done:
+    if (ret_value<0 && mount_point)
+	if(H5G_close(mount_point)<0)
+            HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEOBJ, FAIL, "unable to close mounted group")
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_unmount
+ *
+ * Purpose:	Unmount the child which is mounted at the group specified by
+ *		LOC and NAME or fail if nothing is mounted there.  Neither
+ *		file is closed.
+ *
+ *		Because the mount point is specified by name and opened as a
+ *		group, the H5G_namei() will resolve it to the root of the
+ *		mounted file, not the group where the file is mounted.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, October  6, 1998
+ *
+ * Modifications:
+ *
+ *      Robb Matzke, 1998-10-14
+ *      The ref count for the child is decremented by calling H5F_close().
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5F_unmount(H5G_entry_t *loc, const char *name, hid_t dxpl_id)
+{
+    H5G_t	*mounted = NULL;	/*mount point group		*/
+    H5G_t	*child_group = NULL;	/* Child's group in parent mtab	*/
+    H5F_t	*child_file = NULL;	/* Child's file in parent mtab	*/
+    H5G_entry_t	*mnt_ent = NULL;	/*mounted symbol table entry	*/
+    H5F_t	*child = NULL;		/*mounted file			*/
+    H5F_t	*parent = NULL;		/*file where mounted		*/
+    H5G_entry_t	*ent = NULL;		/*temporary symbol table entry	*/
+    H5G_entry_t mnt_open_ent;           /* entry used to open mount point*/
+    int         child_idx;              /* Index of child in parent's mtab */
+    herr_t	ret_value = SUCCEED;	/*return value			*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_unmount)
+
+    assert(loc);
+    assert(name && *name);
+
+    /*
+     * Get the mount point, or more precisely the root of the mounted file.
+     * If we get the root group and the file has a parent in the mount tree,
+     * then we must have found the mount point.
+     */
+    if (H5G_find(loc, name, &mnt_open_ent/*out*/, H5AC_dxpl_id) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "group not found")
+    if (NULL==(mounted=H5G_open(&mnt_open_ent, dxpl_id)))
+        HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "mount point not found")
+    child = H5G_fileof(mounted);
+    mnt_ent = H5G_entof(mounted);
+    ent = H5G_entof(child->shared->root_grp);
+    child_idx = -1;
+
+    if (child->mtab.parent && H5F_addr_eq(mnt_ent->header, ent->header)) {
+        unsigned	u;		/*counters			*/
+
+	/*
+	 * We've been given the root group of the child.  We do a reverse
+	 * lookup in the parent's mount table to find the correct entry.
+	 */
+	parent = child->mtab.parent;
+	for (u=0; u<parent->mtab.nmounts; u++) {
+	    if (parent->mtab.child[u].file==child) {
+                /* Found the correct index */
+                child_idx = u;
+                break;
+	    }
+	}
+    } else {
+        unsigned lt, rt, md=0;	        /*binary search indices		*/
+        int 	cmp;		        /*binary search comparison value*/
+
+	/*
+	 * We've been given the mount point in the parent.  We use a binary
+	 * search in the parent to locate the mounted file, if any.
+	 */
+	parent = child; /*we guessed wrong*/
+	lt = 0;
+        rt = parent->mtab.nmounts;
+	cmp = -1;
+	while (lt<rt && cmp) {
+	    md = (lt+rt)/2;
+	    ent = H5G_entof(parent->mtab.child[md].group);
+	    cmp = H5F_addr_cmp(mnt_ent->header, ent->header);
+	    if (cmp<0) {
+		rt = md;
+	    } else {
+		lt = md+1;
+	    }
+	}
+	if (cmp)
+	    HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "not a mount point")
+
+        /* Found the correct index */
+        child_idx = md;
+        mnt_ent = ent;
+    }
+
+    HDassert(child_idx >= 0);
+
+    /* Search the open IDs replace names to reflect unmount operation */
+    if (H5G_replace_name(H5G_UNKNOWN, mnt_ent, mnt_ent->user_path_r, NULL, NULL, NULL, OP_UNMOUNT )<0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to replace name ")
+
+    /* Save the information about the child from the mount table */
+    child_group = parent->mtab.child[child_idx].group;
+    child_file = parent->mtab.child[child_idx].file;
+
+    /* Eliminate the mount point from the table */
+    HDmemmove(parent->mtab.child+child_idx, parent->mtab.child+child_idx+1,
+        (parent->mtab.nmounts-child_idx)*sizeof(parent->mtab.child[0]));
+    parent->mtab.nmounts -= 1;
+
+    /* Unmount the child file from the parent file */
+    if(H5G_unmount(child_group)<0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEOBJ, FAIL, "unable to reset group mounted flag")
+    if(H5G_close(child_group)<0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEOBJ, FAIL, "unable to close unmounted group")
+
+    /* Detach child file from parent & see if it should close */
+    child_file->mtab.parent = NULL;
+    if(H5F_try_close(child_file)<0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "unable to close unmounted file")
+
+done:
+    if (mounted)
+        if(H5G_close(mounted)<0 && ret_value>=0)
+	    HDONE_ERROR(H5E_FILE, H5E_CANTCLOSEOBJ, FAIL, "can't close group")
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_mountpoint
+ *
+ * Purpose:	If ENT is a mount point then copy the entry for the root
+ *		group of the mounted file into ENT.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, October  6, 1998
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_mountpoint(H5G_entry_t *find/*in,out*/)
+{
+    H5F_t	*parent = find->file;
+    unsigned	lt, rt, md=0;
+    int cmp;
+    H5G_entry_t	*ent = NULL;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5F_mountpoint, FAIL)
+
+    assert(find);
+
+    /*
+     * The loop is necessary because we might have file1 mounted at the root
+     * of file2, which is mounted somewhere in file3.
+     */
+    do {
+	/*
+	 * Use a binary search to find the potential mount point in the mount
+	 * table for the parent
+	 */
+	lt = 0;
+	rt = parent->mtab.nmounts;
+	cmp = -1;
+	while (lt<rt && cmp) {
+	    md = (lt+rt)/2;
+	    ent = H5G_entof(parent->mtab.child[md].group);
+	    cmp = H5F_addr_cmp(find->header, ent->header);
+	    if (cmp<0) {
+		rt = md;
+	    } else {
+		lt = md+1;
+	    }
+	}
+
+	/* Copy root info over to ENT */
+	if (0==cmp) {
+            /* Get the entry for the root group in the child's file */
+	    ent = H5G_entof(parent->mtab.child[md].file->shared->root_grp);
+
+            /* Don't lose the user path of the group when we copy the root group's entry */
+            if(H5G_ent_copy(find,ent,H5G_COPY_LIMITED)<0)
+                HGOTO_ERROR(H5E_FILE, H5E_CANTCOPY, FAIL, "unable to copy group entry")
+
+            /* Switch to child's file */
+	    parent = ent->file;
+	}
+    } while (!cmp);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_has_mount
+ *
+ * Purpose:	Check if a file has mounted files within it.
+ *
+ * Return:	Success:	TRUE/FALSE
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, January  2, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5F_has_mount(const H5F_t *file)
+{
+    htri_t ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5F_has_mount, FAIL)
+
+    assert(file);
+
+    if(file->mtab.nmounts>0)
+        ret_value=TRUE;
+    else
+        ret_value=FALSE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_has_mount() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_is_mount
+ *
+ * Purpose:	Check if a file is mounted within another file.
+ *
+ * Return:	Success:	TRUE/FALSE
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, January  2, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5F_is_mount(const H5F_t *file)
+{
+    htri_t ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5F_is_mount, FAIL)
+
+    assert(file);
+
+    if(file->mtab.parent!=NULL)
+        ret_value=TRUE;
+    else
+        ret_value=FALSE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_is_mount() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Fmount
+ *
+ * Purpose:	Mount file CHILD_ID onto the group specified by LOC_ID and
+ *		NAME using mount properties PLIST_ID.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, October  6, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Fmount(hid_t loc_id, const char *name, hid_t child_id, hid_t plist_id)
+{
+    H5G_entry_t		*loc = NULL;
+    H5F_t		*child = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Fmount, FAIL)
+    H5TRACE4("e","isii",loc_id,name,child_id,plist_id);
+
+    /* Check arguments */
+    if (NULL==(loc=H5G_loc(loc_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
+    if (!name || !*name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
+    if (NULL==(child=H5I_object_verify(child_id,H5I_FILE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file")
+    if(H5P_DEFAULT == plist_id)
+        plist_id = H5P_MOUNT_DEFAULT;
+    else
+        if(TRUE != H5P_isa_class(plist_id, H5P_MOUNT))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not property list")
+
+    /* Do the mount */
+    if (H5F_mount(loc, name, child, plist_id, H5AC_dxpl_id)<0)
+	HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "unable to mount file")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Funmount
+ *
+ * Purpose:	Given a mount point, dissassociate the mount point's file
+ *		from the file mounted there.  Do not close either file.
+ *
+ *		The mount point can either be the group in the parent or the
+ *		root group of the mounted file (both groups have the same
+ *		name).  If the mount point was opened before the mount then
+ *		it's the group in the parent, but if it was opened after the
+ *		mount then it's the root group of the child.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, October  6, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Funmount(hid_t loc_id, const char *name)
+{
+    H5G_entry_t		*loc = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Funmount, FAIL)
+    H5TRACE2("e","is",loc_id,name);
+
+    /* Check args */
+    if (NULL==(loc=H5G_loc(loc_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
+    if (!name || !*name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
+
+    /* Unmount */
+    if (H5F_unmount(loc, name, H5AC_dxpl_id)<0)
+	HGOTO_ERROR(H5E_FILE, H5E_MOUNT, FAIL, "unable to unmount file")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_mount_count_ids_recurse
+ *
+ * Purpose:	Helper routine for counting number of open IDs in mount
+ *              hierarchy.
+ *
+ * Return:	<none>
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, July 19, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+H5F_mount_count_ids_recurse(H5F_t *f, unsigned *nopen_files, unsigned *nopen_objs)
+{
+    unsigned u;                         /* Local index value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_mount_count_ids_recurse)
+
+    /* Sanity check */
+    HDassert(f);
+    HDassert(nopen_files);
+    HDassert(nopen_objs);
+
+    /* If this file is still open, increment number of file IDs open */
+    if(f->file_id > 0)
+        *nopen_files += 1;
+
+    /* Increment number of open objects in file
+     * (Reduced by number of mounted files, we'll add back in the mount point's
+     *  groups later, if they are open)
+     */
+    *nopen_objs += (f->nopen_objs - f->mtab.nmounts);
+
+    /* Iterate over files mounted in this file and add in their open ID counts also */
+    for(u = 0; u < f->mtab.nmounts; u++) {
+        /* Increment the open object count if the mount point group has an open ID */
+        if(H5G_get_shared_count(f->mtab.child[u].group) > 1)
+            *nopen_objs += 1;
+
+        H5F_mount_count_ids_recurse(f->mtab.child[u].file, nopen_files, nopen_objs);
+    } /* end for */
+
+    FUNC_LEAVE_NOAPI_VOID
+} /* end H5F_mount_count_ids_recurse() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_mount_count_ids
+ *
+ * Purpose:	Count the number of open file & object IDs in a mount hierarchy
+ *
+ * Return:	SUCCEED/FAIL
+ *
+ * Programmer:	Quincey Koziol
+ *              Tues, July 19, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_mount_count_ids(H5F_t *f, unsigned *nopen_files, unsigned *nopen_objs)
+{
+    herr_t      ret_value = SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5F_mount_count_ids, FAIL)
+
+    /* Sanity check */
+    HDassert(f);
+    HDassert(nopen_files);
+    HDassert(nopen_objs);
+
+    /* Find the top file in the mounting hierarchy */
+    while(f->mtab.parent)
+        f = f->mtab.parent;
+
+    /* Count open IDs in the hierarchy */
+    H5F_mount_count_ids_recurse(f, nopen_files, nopen_objs);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_mount_count_ids() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Fpkg.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Fpkg.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Fpkg.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,183 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *		Thursday, September 28, 2000
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5F package.  Source files outside the H5F package should
+ *		include H5Fprivate.h instead.
+ */
+#ifndef H5F_PACKAGE
+#error "Do not include this file outside the H5F package!"
+#endif
+
+#ifndef _H5Fpkg_H
+#define _H5Fpkg_H
+
+/* Get package's private header */
+#include "H5Fprivate.h"
+
+/* Other public headers needed by this file */
+#include "H5Bpublic.h"          /* B-tree header, for H5B_NUM_BTREE_ID */
+
+/* Other private headers needed by this file */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5FOprivate.h"        /* File objects                         */
+#include "H5Gprivate.h"		/* Groups 			  	*/
+#include "H5RCprivate.h"	/* Reference counted object functions	*/
+
+/*
+ * Feature: Define this constant to be non-zero if you want to enable code
+ *	    that minimizes the number of calls to lseek().  This has a huge
+ *	    performance benefit on some systems.  Set this constant to zero
+ *	    on the compiler command line to disable that optimization.
+ */
+#ifndef H5F_OPT_SEEK
+#  define H5F_OPT_SEEK 1
+#endif
+
+/*
+ * Feature: Define this constant on the compiler command-line if you want to
+ *	    see some debugging messages on the debug stream.
+ */
+#ifdef NDEBUG
+#  undef H5F_DEBUG
+#endif
+
+/* Maximum size of super-block buffer */
+#define H5F_SUPERBLOCK_SIZE  256
+#define H5F_DRVINFOBLOCK_SIZE  1024
+
+/* Define the HDF5 file signature */
+#define H5F_SIGNATURE	  "\211HDF\r\n\032\n"
+#define H5F_SIGNATURE_LEN 8
+
+/*
+ * Private file open flags.
+ */
+#define H5F_ACC_PUBLIC_FLAGS 	0x00ffu
+
+/*
+ * Define the structure to store the file information for HDF5 files. One of
+ * these structures is allocated per file, not per H5Fopen(). That is, set of
+ * H5F_t structs can all point to the same H5F_file_t struct. The `nrefs'
+ * count in this struct indicates the number of H5F_t structs which are
+ * pointing to this struct.
+ */
+typedef struct H5F_file_t {
+    H5FD_t	*lf; 		/* Lower level file handle for I/O	*/
+    unsigned	nrefs;		/* Ref count for times file is opened	*/
+    uint32_t	consist_flags;	/* File Consistency Flags		*/
+    unsigned	flags;		/* Access Permissions for file		*/
+
+    /* Cached values from FCPL */
+    unsigned	sym_leaf_k;	/* Size of leaves in symbol tables      */
+    unsigned    btree_k[H5B_NUM_BTREE_ID];  /* B-tree key values for each type  */
+    size_t	sizeof_addr;	/* Size of addresses in file            */
+    size_t	sizeof_size;	/* Size of offsets in file              */
+    haddr_t	super_addr;	/* Absolute address of super block	*/
+    haddr_t	base_addr;	/* Absolute base address for rel.addrs. */
+    haddr_t	freespace_addr;	/* Relative address of free-space info	*/
+    haddr_t	driver_addr;	/* File driver information block address*/
+
+    unsigned	super_chksum;	/* Superblock checksum                  */
+    unsigned	drvr_chksum;	/* Driver info block checksum           */
+    H5AC_t      *cache;		/* The object cache			*/
+    int         mdc_nelmts;	/* Size of meta data cache (elements)	*/
+    hid_t       fcpl_id;	/* File creation property list ID 	*/
+    H5F_close_degree_t fc_degree;   /* File close behavior degree	*/
+    size_t	rdcc_nelmts;	/* Size of raw data chunk cache (elmts)	*/
+    size_t	rdcc_nbytes;	/* Size of raw data chunk cache	(bytes)	*/
+    double	rdcc_w0;	/* Preempt read chunks first? [0.0..1.0]*/
+    size_t      sieve_buf_size; /* Size of the data sieve buffer allocated (in bytes) */
+    hsize_t	threshold;	/* Threshold for alignment		*/
+    hsize_t	alignment;	/* Alignment				*/
+    unsigned	gc_ref;		/* Garbage-collect references?		*/
+    int	ncwfs;			/* Num entries on cwfs list		*/
+    struct H5HG_heap_t **cwfs;	/* Global heap cache			*/
+    struct H5G_t *root_grp;	/* Open root group			*/
+    H5FO_t *open_objs;          /* Open objects in file                 */
+    H5RC_t *grp_btree_shared;   /* Ref-counted group B-tree node info   */
+} H5F_file_t;
+
+/* A record of the mount table */
+typedef struct H5F_mount_t {
+    struct H5G_t	*group;	/* Mount point group held open		*/
+    struct H5F_t	*file;	/* File mounted at that point		*/
+} H5F_mount_t;
+
+/*
+ * The mount table describes what files are attached to (mounted on) the file
+ * to which this table belongs.
+ */
+typedef struct H5F_mtab_t {
+    struct H5F_t	*parent;/* Parent file				*/
+    unsigned		nmounts;/* Number of children which are mounted	*/
+    unsigned		nalloc;	/* Number of mount slots allocated	*/
+    H5F_mount_t		*child;	/* An array of mount records		*/
+} H5F_mtab_t;
+
+/*
+ * This is the top-level file descriptor.  One of these structures is
+ * allocated every time H5Fopen() is called although they may contain pointers
+ * to shared H5F_file_t structs. The reference count (nrefs) indicates the
+ * number of times the file has been opened (the application can only open a
+ * file once explicitly, but the library can open the file a second time to
+ * indicate that the file is mounted on some other file).
+ */
+struct H5F_t {
+    unsigned		intent;		/* The flags passed to H5F_open()*/
+    char		*name;		/* Name used to open file	*/
+    H5F_file_t		*shared;	/* The shared file info		*/
+    unsigned		nopen_objs;	/* Number of open object headers*/
+    H5FO_t              *obj_count;     /* # of time each object is opened through top file structure */
+    hid_t               file_id;        /* ID of this file              */
+    hbool_t             closing;        /* File is in the process of being closed */
+    H5F_mtab_t		mtab;		/* File mount table		*/
+};
+
+/* Forward declarations for prototype arguments */
+struct H5D_dxpl_cache_t;
+struct H5D_dcpl_cache_t;
+union H5D_storage_t;
+
+/* Private functions, not part of the publicly documented API */
+#ifdef NOT_YET
+H5_DLL void H5F_encode_length_unusual(const H5F_t *f, uint8_t **p, uint8_t *l);
+#endif /* NOT_YET */
+
+/* General routines */
+H5_DLL herr_t H5F_try_close(H5F_t *f);
+H5_DLL haddr_t H5F_locate_signature(H5FD_t *file, hid_t dxpl_id);
+
+/* File mount related routines */
+H5_DLL herr_t H5F_mountpoint(struct H5G_entry_t *find/*in,out*/);
+H5_DLL herr_t H5F_close_mounts(H5F_t *f);
+H5_DLL int H5F_term_unmount_cb(void *obj_ptr, hid_t obj_id, void *key);
+H5_DLL herr_t H5F_mount_count_ids(H5F_t *f, unsigned *nopen_files, unsigned *nopen_objs);
+
+/* Superblock related routines */
+H5_DLL herr_t H5F_init_superblock(const H5F_t *f, hid_t dxpl_id);
+H5_DLL herr_t H5F_write_superblock(H5F_t *f, hid_t dxpl_id);
+H5_DLL herr_t H5F_read_superblock(H5F_t *f, hid_t dxpl_id, H5G_entry_t *root_ent);
+
+/* Shared file list related routines */
+H5_DLL herr_t H5F_sfile_add(H5F_file_t *shared);
+H5_DLL H5F_file_t * H5F_sfile_search(H5FD_t *lf);
+H5_DLL herr_t H5F_sfile_remove(H5F_file_t *shared);
+
+#endif
+

Added: packages/hdf5/branches/upstream/current/src/H5Fprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Fprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Fprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,476 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains macros & information for file access
+ */
+
+#ifndef _H5Fprivate_H
+#define _H5Fprivate_H
+
+/* Include package's public header */
+#include "H5Fpublic.h"
+
+/* Public headers needed by this file */
+#include "H5FDpublic.h"		/* File drivers				*/
+
+/* Private headers needed by this file */
+
+/****************************/
+/* Library Private Typedefs */
+/****************************/
+
+/* Main file structure */
+typedef struct H5F_t H5F_t;
+
+/*===----------------------------------------------------------------------===
+ *                              Flush Flags
+ *===----------------------------------------------------------------------===
+ *
+ *  Flags passed into the flush routines which indicate what type of
+ *  flush we want to do. They can be ORed together.
+ */
+#define H5F_FLUSH_NONE       (0U)       /* No flags specified                       */
+#define H5F_FLUSH_INVALIDATE (1U << 0)  /* Invalidate cached data                   */
+#define H5F_FLUSH_CLOSING    (1U << 1)  /* Closing the file                         */
+#define H5F_FLUSH_CLEAR_ONLY (1U << 2)  /* Don't write, just clear dirty flags      */
+
+/*
+ * Encode and decode macros for file meta-data.
+ * Currently, all file meta-data is little-endian.
+ */
+
+#  define INT16ENCODE(p, i) {						      \
+   *(p) = (uint8_t)( (unsigned)(i)	 & 0xff); (p)++;		      \
+   *(p) = (uint8_t)(((unsigned)(i) >> 8) & 0xff); (p)++;		      \
+}
+
+#  define UINT16ENCODE(p, i) {						      \
+   *(p) = (uint8_t)( (unsigned)(i)	 & 0xff); (p)++;		      \
+   *(p) = (uint8_t)(((unsigned)(i) >> 8) & 0xff); (p)++;		      \
+}
+
+#  define INT32ENCODE(p, i) {						      \
+   *(p) = (uint8_t)( (uint32_t)(i)	  & 0xff); (p)++;		      \
+   *(p) = (uint8_t)(((uint32_t)(i) >>  8) & 0xff); (p)++;		      \
+   *(p) = (uint8_t)(((uint32_t)(i) >> 16) & 0xff); (p)++;		      \
+   *(p) = (uint8_t)(((uint32_t)(i) >> 24) & 0xff); (p)++;		      \
+}
+
+#  define UINT32ENCODE(p, i) {						      \
+   *(p) = (uint8_t)( (i)        & 0xff); (p)++;				      \
+   *(p) = (uint8_t)(((i) >>  8) & 0xff); (p)++;				      \
+   *(p) = (uint8_t)(((i) >> 16) & 0xff); (p)++;				      \
+   *(p) = (uint8_t)(((i) >> 24) & 0xff); (p)++;				      \
+}
+
+#  define INT64ENCODE(p, n) {						      \
+   int64_t _n = (n);							      \
+   size_t _i;								      \
+   uint8_t *_p = (uint8_t*)(p);						      \
+   for (_i=0; _i<sizeof(int64_t); _i++, _n>>=8) {			      \
+      *_p++ = (uint8_t)(_n & 0xff);					      \
+   }									      \
+   for (/*void*/; _i<8; _i++) {						      \
+      *_p++ = (n)<0 ? 0xff : 0;						      \
+   }									      \
+   (p) = (uint8_t*)(p)+8;						      \
+}
+
+#  define UINT64ENCODE(p, n) {						      \
+   uint64_t _n = (n);							      \
+   size_t _i;								      \
+   uint8_t *_p = (uint8_t*)(p);						      \
+   for (_i=0; _i<sizeof(uint64_t); _i++, _n>>=8) {			      \
+      *_p++ = (uint8_t)(_n & 0xff);					      \
+   }									      \
+   for (/*void*/; _i<8; _i++) {						      \
+      *_p++ = 0;							      \
+   }									      \
+   (p) = (uint8_t*)(p)+8;						      \
+}
+
+/* DECODE converts little endian bytes pointed by p to integer values and store
+ * it in i.  For signed values, need to do sign-extension when converting
+ * the last byte which carries the sign bit.
+ * The macros does not require i be of a certain byte sizes.  It just requires
+ * i be big enough to hold the intended value range.  E.g. INT16DECODE works
+ * correctly even if i is actually a 64bit int like in a Cray.
+ */
+
+#  define INT16DECODE(p, i) {						      \
+   (i)	= (int16_t)((*(p) & 0xff));      (p)++;				      \
+   (i) |= (int16_t)(((*(p) & 0xff) << 8) |                                    \
+                   ((*(p) & 0x80) ? ~0xffff : 0x0)); (p)++;		      \
+}
+
+#  define UINT16DECODE(p, i) {						      \
+   (i)	= (uint16_t) (*(p) & 0xff);	  (p)++;			      \
+   (i) |= (uint16_t)((*(p) & 0xff) << 8); (p)++;			      \
+}
+
+#  define INT32DECODE(p, i) {						      \
+   (i)	= (	     *(p) & 0xff);	  (p)++;			      \
+   (i) |= ((int32_t)(*(p) & 0xff) <<  8); (p)++;			      \
+   (i) |= ((int32_t)(*(p) & 0xff) << 16); (p)++;			      \
+   (i) |= ((int32_t)(((*(p) & 0xff) << 24) |                                  \
+                   ((*(p) & 0x80) ? ~0xffffffff : 0x0))); (p)++;	      \
+}
+
+#  define UINT32DECODE(p, i) {						      \
+   (i)	=  (uint32_t)(*(p) & 0xff);	   (p)++;			      \
+   (i) |= ((uint32_t)(*(p) & 0xff) <<  8); (p)++;			      \
+   (i) |= ((uint32_t)(*(p) & 0xff) << 16); (p)++;			      \
+   (i) |= ((uint32_t)(*(p) & 0xff) << 24); (p)++;			      \
+}
+
+#  define INT64DECODE(p, n) {						      \
+   /* WE DON'T CHECK FOR OVERFLOW! */					      \
+   size_t _i;								      \
+   n = 0;								      \
+   (p) += 8;								      \
+   for (_i=0; _i<sizeof(int64_t); _i++) {				      \
+      n = (n<<8) | *(--p);						      \
+   }									      \
+   (p) += 8;								      \
+}
+
+#  define UINT64DECODE(p, n) {						      \
+   /* WE DON'T CHECK FOR OVERFLOW! */					      \
+   size_t _i;								      \
+   n = 0;								      \
+   (p) += 8;								      \
+   for (_i=0; _i<sizeof(uint64_t); _i++) {				      \
+      n = (n<<8) | *(--p);						      \
+   }									      \
+   (p) += 8;								      \
+}
+
+#define NBYTEENCODE(d, s, n)    do { HDmemcpy(d,s,n); d += n; } while (0)
+
+/*
+ * Note:  the NBYTEDECODE macro is backwards from the memcpy() routine, in
+ *	  the spirit of the other DECODE macros.
+ */
+#define NBYTEDECODE(s, d, n)    do { HDmemcpy(d,s,n); s += n; } while (0)
+
+/* Address-related macros */
+#define H5F_addr_overflow(X,Z)	(HADDR_UNDEF==(X) ||			      \
+				 HADDR_UNDEF==(X)+(haddr_t)(Z) ||	      \
+				 (X)+(haddr_t)(Z)<(X))
+#define H5F_addr_hash(X,M)	((unsigned)((X)%(M)))
+#define H5F_addr_defined(X)	(X!=HADDR_UNDEF)
+/* The H5F_addr_eq() macro guarantees that Y is not HADDR_UNDEF by making
+ * certain that X is not HADDR_UNDEF and then checking that X equals Y
+ */
+#define H5F_addr_eq(X,Y)	((X)!=HADDR_UNDEF &&			      \
+				 (X)==(Y))
+#define H5F_addr_ne(X,Y)	(!H5F_addr_eq((X),(Y)))
+#define H5F_addr_lt(X,Y) 	((X)!=HADDR_UNDEF &&			      \
+				 (Y)!=HADDR_UNDEF &&			      \
+				 (X)<(Y))
+#define H5F_addr_le(X,Y)	((X)!=HADDR_UNDEF &&			      \
+				 (Y)!=HADDR_UNDEF &&			      \
+				 (X)<=(Y))
+#define H5F_addr_gt(X,Y)	((X)!=HADDR_UNDEF &&			      \
+				 (Y)!=HADDR_UNDEF &&			      \
+				 (X)>(Y))
+#define H5F_addr_ge(X,Y)	((X)!=HADDR_UNDEF &&			      \
+				 (Y)!=HADDR_UNDEF &&			      \
+				 (X)>=(Y))
+#define H5F_addr_cmp(X,Y)	(H5F_addr_eq(X,Y)?0:			      \
+				 (H5F_addr_lt(X, Y)?-1:1))
+#define H5F_addr_pow2(N)	((haddr_t)1<<(N))
+#define H5F_addr_overlap(O1,L1,O2,L2) ((O1<O2 && (O1+L1)>O2) ||               \
+                                 (O1>=O2 && O1<(O2+L2)))
+
+/* If the module using this macro is allowed access to the private variables, access them directly */
+#ifdef H5F_PACKAGE
+/* size of size_t and off_t as they exist on disk */
+#define H5F_SIZEOF_ADDR(F)      ((F)->shared->sizeof_addr)
+#define H5F_SIZEOF_SIZE(F)      ((F)->shared->sizeof_size)
+/* Size of symbol table leafs */
+#define H5F_SYM_LEAF_K(F)       ((F)->shared->sym_leaf_k)
+/* B-tree key value size */
+#define H5F_KVALUE(F,T)         ((F)->shared->btree_k[(T)->id])
+/* Raw data cache values */
+#define H5F_RDCC_NELMTS(F)      ((F)->shared->rdcc_nelmts)
+#define H5F_RDCC_NBYTES(F)      ((F)->shared->rdcc_nbytes)
+#define H5F_RDCC_W0(F)          ((F)->shared->rdcc_w0)
+/* Check for file driver feature enabled */
+#define H5F_HAS_FEATURE(F,FL)   ((F)->shared->lf->feature_flags&(FL))
+/* B-tree node raw page */
+#define H5F_GRP_BTREE_SHARED(F) ((F)->shared->grp_btree_shared)
+/* Base address of file */
+#define H5F_BASE_ADDR(F)        ((F)->shared->base_addr)
+/* Sieve buffer size for datasets */
+#define H5F_SIEVE_BUF_SIZE(F)   ((F)->shared->sieve_buf_size)
+#else /* H5F_PACKAGE */
+#define H5F_SIZEOF_ADDR(F)      (H5F_sizeof_addr(F))
+#define H5F_SIZEOF_SIZE(F)      (H5F_sizeof_size(F))
+#define H5F_SYM_LEAF_K(F)       (H5F_sym_leaf_k(F))
+#define H5F_KVALUE(F,T)         (H5F_Kvalue(F,T))
+#define H5F_RDCC_NELMTS(F)      (H5F_rdcc_nelmts(F))
+#define H5F_RDCC_NBYTES(F)      (H5F_rdcc_nbytes(F))
+#define H5F_RDCC_W0(F)          (H5F_rdcc_w0(F))
+#define H5F_HAS_FEATURE(F,FL)   (H5F_has_feature(F,FL))
+#define H5F_GRP_BTREE_SHARED(F) (H5F_grp_btree_shared(F))
+#define H5F_BASE_ADDR(F)        (H5F_get_base_addr(F))
+#define H5F_SIEVE_BUF_SIZE(F)   (H5F_sieve_buf_size(F))
+#endif /* H5F_PACKAGE */
+
+
+/* Macros to encode/decode offset/length's for storing in the file */
+#ifdef NOT_YET
+#define H5F_ENCODE_OFFSET(f,p,o) (H5F_SIZEOF_ADDR(f)==4 ? UINT32ENCODE(p,o) \
+    : H5F_SIZEOF_ADDR(f)==8 ? UINT64ENCODE(p,o) \
+    : H5F_SIZEOF_ADDR(f)==2 ? UINT16ENCODE(p,o) \
+    : H5FPencode_unusual_offset(f,&(p),(uint8_t*)&(o)))
+#else /* NOT_YET */
+#define H5F_ENCODE_OFFSET(f,p,o) switch(H5F_SIZEOF_ADDR(f)) {		      \
+    case 4: UINT32ENCODE(p,o); break;					      \
+    case 8: UINT64ENCODE(p,o); break;					      \
+    case 2: UINT16ENCODE(p,o); break;					      \
+}
+#endif /* NOT_YET */
+
+#define H5F_DECODE_OFFSET(f,p,o) switch (H5F_SIZEOF_ADDR (f)) {	\
+   case 4: UINT32DECODE (p, o);	break;							\
+   case 8: UINT64DECODE (p, o);	break;							\
+   case 2: UINT16DECODE (p, o);	break;							\
+}
+
+#define H5F_ENCODE_LENGTH(f,p,l) switch(H5F_SIZEOF_SIZE(f)) {   \
+   case 4: UINT32ENCODE(p,l); break;					      \
+   case 8: UINT64ENCODE(p,l); break;					      \
+   case 2: UINT16ENCODE(p,l); break;					      \
+}
+
+#define H5F_DECODE_LENGTH(f,p,l) switch(H5F_SIZEOF_SIZE(f)) {   \
+   case 4: UINT32DECODE(p,l); break;					      \
+   case 8: UINT64DECODE(p,l); break;					      \
+   case 2: UINT16DECODE(p,l); break;					      \
+}
+
+/*
+ * Macros that check for overflows.  These are somewhat dangerous to fiddle
+ * with.
+ */
+#if (H5_SIZEOF_SIZE_T >= H5_SIZEOF_OFF_T)
+#   define H5F_OVERFLOW_SIZET2OFFT(X)					      \
+    ((size_t)(X)>=(size_t)((size_t)1<<(8*sizeof(off_t)-1)))
+#else
+#   define H5F_OVERFLOW_SIZET2OFFT(X) 0
+#endif
+#if (H5_SIZEOF_HSIZE_T >= H5_SIZEOF_OFF_T)
+#   define H5F_OVERFLOW_HSIZET2OFFT(X)					      \
+    ((hsize_t)(X)>=(hsize_t)((hsize_t)1<<(8*sizeof(off_t)-1)))
+#else
+#   define H5F_OVERFLOW_HSIZET2OFFT(X) 0
+#endif
+
+/* ========= File Creation properties ============ */
+/* Definitions for the size of the file user block in bytes */
+#define H5F_CRT_USER_BLOCK_NAME      "block_size"
+#define H5F_CRT_USER_BLOCK_SIZE      sizeof(hsize_t)
+#define H5F_CRT_USER_BLOCK_DEF       0
+/* Definitions for the 1/2 rank for symbol table leaf nodes */
+#define H5F_CRT_SYM_LEAF_NAME        "symbol_leaf"
+#define H5F_CRT_SYM_LEAF_SIZE        sizeof(unsigned)
+#define H5F_CRT_SYM_LEAF_DEF         4
+/* Definitions for the 1/2 rank for btree internal nodes    */
+#define H5F_CRT_BTREE_RANK_NAME      "btree_rank"
+#define H5F_CRT_BTREE_RANK_SIZE      sizeof(unsigned[H5B_NUM_BTREE_ID])
+#define H5F_CRT_BTREE_RANK_DEF       {HDF5_BTREE_SNODE_IK_DEF,HDF5_BTREE_ISTORE_IK_DEF}
+/* Definitions for byte number in an address                */
+#define H5F_CRT_ADDR_BYTE_NUM_NAME   "addr_byte_num"
+#define H5F_CRT_ADDR_BYTE_NUM_SIZE   sizeof(size_t)
+#define H5F_CRT_ADDR_BYTE_NUM_DEF    sizeof(haddr_t)
+/* Definitions for byte number for object size              */
+#define H5F_CRT_OBJ_BYTE_NUM_NAME     "obj_byte_num"
+#define H5F_CRT_OBJ_BYTE_NUM_SIZE     sizeof(size_t)
+#define H5F_CRT_OBJ_BYTE_NUM_DEF      sizeof(hsize_t)
+/* Definitions for version number of the superblock         */
+#define H5F_CRT_SUPER_VERS_NAME       "super_version"
+#define H5F_CRT_SUPER_VERS_SIZE       sizeof(unsigned)
+#define H5F_CRT_SUPER_VERS_DEF        HDF5_SUPERBLOCK_VERSION_DEF
+/* Definitions for free-space version number                */
+#define H5F_CRT_FREESPACE_VERS_NAME   "free_space_version"
+#define H5F_CRT_FREESPACE_VERS_SIZE   sizeof(unsigned)
+#define H5F_CRT_FREESPACE_VERS_DEF    HDF5_FREESPACE_VERSION
+/* Definitions for object directory version number          */
+#define H5F_CRT_OBJ_DIR_VERS_NAME     "obj_dir_version"
+#define H5F_CRT_OBJ_DIR_VERS_SIZE     sizeof(unsigned)
+#define H5F_CRT_OBJ_DIR_VERS_DEF      HDF5_OBJECTDIR_VERSION
+/* Definitions for shared-header format version             */
+#define H5F_CRT_SHARE_HEAD_VERS_NAME  "share_head_version"
+#define H5F_CRT_SHARE_HEAD_VERS_SIZE  sizeof(unsigned)
+#define H5F_CRT_SHARE_HEAD_VERS_DEF   HDF5_SHAREDHEADER_VERSION
+
+/* ========= File Access properties ============ */
+/* Definitions for size of meta data cache(elements) */
+#define H5F_ACS_META_CACHE_SIZE_NAME            "mdc_nelmts"
+#define H5F_ACS_META_CACHE_SIZE_SIZE            sizeof(int)
+#define H5F_ACS_META_CACHE_SIZE_DEF             H5AC_NSLOTS
+
+/* Definitions for size of raw data chunk cache(elements) */
+#define H5F_ACS_DATA_CACHE_ELMT_SIZE_NAME       "rdcc_nelmts"
+#define H5F_ACS_DATA_CACHE_ELMT_SIZE_SIZE       sizeof(size_t)
+#define H5F_ACS_DATA_CACHE_ELMT_SIZE_DEF        521
+
+/* Definition for size of raw data chunk cache(bytes) */
+#define H5F_ACS_DATA_CACHE_BYTE_SIZE_NAME       "rdcc_nbytes"
+#define H5F_ACS_DATA_CACHE_BYTE_SIZE_SIZE       sizeof(size_t)
+#define H5F_ACS_DATA_CACHE_BYTE_SIZE_DEF        (1024*1024)
+
+/* Definition for preemption read chunks first */
+#define H5F_ACS_PREEMPT_READ_CHUNKS_NAME        "rdcc_w0"
+#define H5F_ACS_PREEMPT_READ_CHUNKS_SIZE        sizeof(double)
+#define H5F_ACS_PREEMPT_READ_CHUNKS_DEF         0.75
+
+/* Definition for threshold for alignment */
+#define H5F_ACS_ALIGN_THRHD_NAME                "threshold"
+#define H5F_ACS_ALIGN_THRHD_SIZE                sizeof(hsize_t)
+#define H5F_ACS_ALIGN_THRHD_DEF                 1
+
+/* Definition for alignment */
+#define H5F_ACS_ALIGN_NAME                      "align"
+#define H5F_ACS_ALIGN_SIZE                      sizeof(hsize_t)
+#define H5F_ACS_ALIGN_DEF                       1
+
+/* Definition for minimum metadata allocation block size (when
+   aggregating metadata allocations. */
+#define H5F_ACS_META_BLOCK_SIZE_NAME            "meta_block_size"
+#define H5F_ACS_META_BLOCK_SIZE_SIZE            sizeof(hsize_t)
+#define H5F_ACS_META_BLOCK_SIZE_DEF             2048
+
+/* Definition for maximum sieve buffer size (when data sieving
+   is allowed by file driver */
+#define H5F_ACS_SIEVE_BUF_SIZE_NAME             "sieve_buf_size"
+#define H5F_ACS_SIEVE_BUF_SIZE_SIZE             sizeof(size_t)
+#define H5F_ACS_SIEVE_BUF_SIZE_DEF              (64*1024)
+
+/* Definition for minimum "small data" allocation block size (when
+   aggregating "small" raw data allocations. */
+#define H5F_ACS_SDATA_BLOCK_SIZE_NAME           "sdata_block_size"
+#define H5F_ACS_SDATA_BLOCK_SIZE_SIZE           sizeof(hsize_t)
+#define H5F_ACS_SDATA_BLOCK_SIZE_DEF            2048
+
+/* Definition for garbage-collect references */
+#define H5F_ACS_GARBG_COLCT_REF_NAME            "gc_ref"
+#define H5F_ACS_GARBG_COLCT_REF_SIZE            sizeof(unsigned)
+#define H5F_ACS_GARBG_COLCT_REF_DEF             0
+
+/* Definition for file driver ID */
+#define H5F_ACS_FILE_DRV_ID_NAME                "driver_id"
+#define H5F_ACS_FILE_DRV_ID_SIZE                sizeof(hid_t)
+#define H5F_ACS_FILE_DRV_ID_DEF                 H5FD_SEC2
+
+/* Definition for file driver info */
+#define H5F_ACS_FILE_DRV_INFO_NAME              "driver_info"
+#define H5F_ACS_FILE_DRV_INFO_SIZE              sizeof(void*)
+#define H5F_ACS_FILE_DRV_INFO_DEF               NULL
+
+/* Definition for file close degree */
+#define H5F_CLOSE_DEGREE_NAME		        "close_degree"
+#define H5F_CLOSE_DEGREE_SIZE		        sizeof(H5F_close_degree_t)
+#define H5F_CLOSE_DEGREE_DEF		        H5F_CLOSE_DEFAULT
+
+/* Definition for offset position in file for family file driver */
+#define H5F_ACS_FAMILY_OFFSET_NAME              "family_offset"
+#define H5F_ACS_FAMILY_OFFSET_SIZE              sizeof(hsize_t)
+#define H5F_ACS_FAMILY_OFFSET_DEF               0
+
+/* Definition for data type in multi file driver */
+#define H5F_ACS_MULTI_TYPE_NAME                 "multi_type"
+#define H5F_ACS_MULTI_TYPE_SIZE                 sizeof(H5FD_mem_t)
+#define H5F_ACS_MULTI_TYPE_DEF                  H5FD_MEM_DEFAULT
+
+/* ======================== File Mount properties ====================*/
+/* Definition for whether absolute symlinks local to file. */
+#define H5F_MNT_SYM_LOCAL_NAME 		"local"
+#define H5F_MNT_SYM_LOCAL_SIZE		sizeof(hbool_t)
+#define H5F_MNT_SYM_LOCAL_DEF	 	FALSE
+
+#ifdef H5_HAVE_PARALLEL
+/* Which process writes metadata */
+#define H5_PAR_META_WRITE 0
+#endif /* H5_HAVE_PARALLEL */
+
+/* Forward declarations for prototype arguments */
+struct H5B_class_t;
+struct H5RC_t;
+
+/* Private functions, not part of the publicly documented API */
+H5_DLL herr_t H5F_init(void);
+#ifdef NOT_YET
+H5_DLL herr_t H5F_flush_all(hbool_t invalidate);
+#endif /* NOT_YET */
+
+/* Functions than retrieve values from the file struct */
+H5_DLL hid_t H5F_get_driver_id(const H5F_t *f);
+H5_DLL unsigned H5F_get_intent(const H5F_t *f);
+H5_DLL herr_t H5F_get_fileno(const H5F_t *f, unsigned long *filenum);
+H5_DLL hid_t H5F_get_id(H5F_t *file);
+H5_DLL unsigned H5F_get_obj_count(const H5F_t *f, unsigned types);
+H5_DLL unsigned H5F_get_obj_ids(const H5F_t *f, unsigned types, int max_objs, hid_t *obj_id_list);
+H5_DLL haddr_t H5F_get_base_addr(const H5F_t *f);
+H5_DLL haddr_t H5F_get_eoa(const H5F_t *f);
+#ifdef H5_HAVE_PARALLEL
+H5_DLL int H5F_mpi_get_rank(const H5F_t *f);
+H5_DLL MPI_Comm H5F_mpi_get_comm(const H5F_t *f);
+#endif /* H5_HAVE_PARALLEL */
+
+/* Functions than check file mounting information */
+H5_DLL htri_t H5F_is_mount(const H5F_t *file);
+H5_DLL htri_t H5F_has_mount(const H5F_t *file);
+
+/* Functions than retrieve values set from the FCPL */
+H5_DLL size_t H5F_sizeof_addr(const H5F_t *f);
+H5_DLL size_t H5F_sizeof_size(const H5F_t *f);
+H5_DLL unsigned H5F_sym_leaf_k(const H5F_t *f);
+H5_DLL unsigned H5F_Kvalue(const H5F_t *f, const struct H5B_class_t *type);
+H5_DLL hbool_t H5F_has_feature(const H5F_t *f, unsigned feature);
+H5_DLL size_t H5F_rdcc_nbytes(const H5F_t *f);
+H5_DLL size_t H5F_rdcc_nelmts(const H5F_t *f);
+H5_DLL double H5F_rdcc_w0(const H5F_t *f);
+H5_DLL struct H5RC_t *H5F_grp_btree_shared(const H5F_t *f);
+H5_DLL size_t H5F_sieve_buf_size(const H5F_t *f);
+
+/* Functions that operate on blocks of bytes wrt super block */
+H5_DLL herr_t H5F_block_read(const H5F_t *f, H5FD_mem_t type, haddr_t addr,
+                size_t size, hid_t dxpl_id, void *buf/*out*/);
+H5_DLL herr_t H5F_block_write(const H5F_t *f, H5FD_mem_t type, haddr_t addr,
+                size_t size, hid_t dxpl_id, const void *buf);
+
+/* Address-related functions */
+H5_DLL void H5F_addr_encode(const H5F_t *, uint8_t** /*in,out*/, haddr_t);
+H5_DLL void H5F_addr_decode(const H5F_t *, const uint8_t** /*in,out*/,
+			     haddr_t* /*out*/);
+H5_DLL herr_t H5F_addr_pack(H5F_t *f, haddr_t *addr_p /*out*/,
+			     const unsigned long objno[2]);
+
+/* Callback functions for file access class */
+H5_DLL herr_t H5F_acs_create(hid_t fapl_id, void *close_data);
+H5_DLL herr_t H5F_acs_close(hid_t fapl_id, void *close_data);
+H5_DLL herr_t H5F_acs_copy(hid_t new_fapl_id, hid_t old_fapl_id,
+                            void *close_data);
+
+/* Shared file list related routines */
+H5_DLL herr_t H5F_sfile_assert_num(unsigned n);
+
+/* Debugging functions */
+H5_DLL herr_t H5F_debug(H5F_t *f, hid_t dxpl_id, FILE * stream, int indent, int fwidth);
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Fpublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Fpublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Fpublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,125 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains public declarations for the H5F module.
+ */
+#ifndef _H5Fpublic_H
+#define _H5Fpublic_H
+
+/* Public header files needed by this file */
+#include "H5public.h"
+#include "H5Ipublic.h"
+
+/*
+ * These are the bits that can be passed to the `flags' argument of
+ * H5Fcreate() and H5Fopen(). Use the bit-wise OR operator (|) to combine
+ * them as needed.  As a side effect, they call H5check_version() to make sure
+ * that the application is compiled with a version of the hdf5 header files
+ * which are compatible with the library to which the application is linked.
+ * We're assuming that these constants are used rather early in the hdf5
+ * session.
+ *
+ * NOTE: When adding H5F_ACC_* macros, remember to redefine them in H5Fprivate.h
+ *
+ */
+
+/* When this header is included from a private header, don't make calls to H5check() */
+#undef H5CHECK
+#ifndef _H5private_H
+#define H5CHECK          H5check(),
+#else   /* _H5private_H */
+#define H5CHECK
+#endif  /* _H5private_H */
+
+#define H5F_ACC_RDONLY	(H5CHECK 0x0000u)	/*absence of rdwr => rd-only */
+#define H5F_ACC_RDWR	(H5CHECK 0x0001u)	/*open for read and write    */
+#define H5F_ACC_TRUNC	(H5CHECK 0x0002u)	/*overwrite existing files   */
+#define H5F_ACC_EXCL	(H5CHECK 0x0004u)	/*fail if file already exists*/
+#define H5F_ACC_DEBUG	(H5CHECK 0x0008u)	/*print debug info	     */
+#define H5F_ACC_CREAT	(H5CHECK 0x0010u)	/*create non-existing files  */
+
+/* Flags for H5Fget_obj_count() & H5Fget_obj_ids() calls */
+#define H5F_OBJ_FILE	(0x0001u)       /* File objects */
+#define H5F_OBJ_DATASET	(0x0002u)       /* Dataset objects */
+#define H5F_OBJ_GROUP	(0x0004u)       /* Group objects */
+#define H5F_OBJ_DATATYPE (0x0008u)      /* Named datatype objects */
+#define H5F_OBJ_ATTR    (0x0010u)       /* Attribute objects */
+#define H5F_OBJ_ALL 	(H5F_OBJ_FILE|H5F_OBJ_DATASET|H5F_OBJ_GROUP|H5F_OBJ_DATATYPE|H5F_OBJ_ATTR)
+#define H5F_OBJ_LOCAL   (0x0020u)       /* Restrict search to objects opened through current file ID */
+                                        /* (as opposed to objects opened through any file ID accessing this file) */
+
+#ifdef H5_HAVE_PARALLEL
+/*
+ * Use this constant string as the MPI_Info key to set H5Fmpio debug flags.
+ * To turn on H5Fmpio debug flags, set the MPI_Info value with this key to
+ * have the value of a string consisting of the characters that turn on the
+ * desired flags.
+ */
+#define H5F_MPIO_DEBUG_KEY "H5F_mpio_debug_key"
+#endif /* H5_HAVE_PARALLEL */
+
+/* The difference between a single file and a set of mounted files */
+typedef enum H5F_scope_t {
+    H5F_SCOPE_LOCAL	= 0,	/*specified file handle only		*/
+    H5F_SCOPE_GLOBAL	= 1,	/*entire virtual file			*/
+    H5F_SCOPE_DOWN      = 2	/*for internal use only			*/
+} H5F_scope_t;
+
+/* Unlimited file size for H5Pset_external() */
+#define H5F_UNLIMITED	((hsize_t)(-1L))
+
+/* How does file close behave?
+ * H5F_CLOSE_DEFAULT - Use the degree pre-defined by underlining VFL
+ * H5F_CLOSE_WEAK    - file closes only after all opened objects are closed
+ * H5F_CLOSE_SEMI    - if no opened objects, file is close; otherwise, file
+		       close fails
+ * H5F_CLOSE_STRONG  - if there are opened objects, close them first, then
+		       close file
+ */
+typedef enum H5F_close_degree_t {
+    H5F_CLOSE_DEFAULT   = 0,
+    H5F_CLOSE_WEAK      = 1,
+    H5F_CLOSE_SEMI      = 2,
+    H5F_CLOSE_STRONG    = 3
+} H5F_close_degree_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Functions in H5F.c */
+H5_DLL htri_t H5Fis_hdf5 (const char *filename);
+H5_DLL hid_t  H5Fcreate (const char *filename, unsigned flags,
+		  	  hid_t create_plist, hid_t access_plist);
+H5_DLL hid_t  H5Fopen (const char *filename, unsigned flags,
+		        hid_t access_plist);
+H5_DLL hid_t  H5Freopen(hid_t file_id);
+H5_DLL herr_t H5Fflush(hid_t object_id, H5F_scope_t scope);
+H5_DLL herr_t H5Fclose (hid_t file_id);
+H5_DLL hid_t  H5Fget_create_plist (hid_t file_id);
+H5_DLL hid_t  H5Fget_access_plist (hid_t file_id);
+H5_DLL int H5Fget_obj_count(hid_t file_id, unsigned types);
+H5_DLL int H5Fget_obj_ids(hid_t file_id, unsigned types, int max_objs, hid_t *obj_id_list);
+H5_DLL herr_t H5Fget_vfd_handle(hid_t file_id, hid_t fapl, void** file_handle);
+H5_DLL herr_t H5Fmount(hid_t loc, const char *name, hid_t child, hid_t plist);
+H5_DLL herr_t H5Funmount(hid_t loc, const char *name);
+H5_DLL hssize_t H5Fget_freespace(hid_t file_id);
+H5_DLL herr_t H5Fget_filesize(hid_t file_id, hsize_t *size);
+H5_DLL ssize_t H5Fget_name(hid_t obj_id, char *name, size_t size);
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Fsfile.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Fsfile.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Fsfile.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,226 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+/* Packages needed by this file... */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"             /* File access				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5FLprivate.h"	/* Free lists                           */
+
+/* PRIVATE TYPEDEFS */
+
+/* Struct for tracking "shared" file structs */
+typedef struct H5F_sfile_node_t {
+    H5F_file_t *shared;                 /* Pointer to "shared" file struct */
+    struct H5F_sfile_node_t *next;      /* Pointer to next node */
+} H5F_sfile_node_t;
+
+/* PRIVATE PROTOTYPES */
+
+/* PRIVATE VARIABLES */
+
+/* Declare a free list to manage the H5F_sfile_node_t struct */
+H5FL_DEFINE_STATIC(H5F_sfile_node_t);
+
+/* Declare a local variable to track the shared file information */
+H5F_sfile_node_t *H5F_sfile_head_g = NULL;
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_sfile_assert_empty
+ *
+ * Purpose:	Sanity checking that shared file list is empty
+ *
+ * Return:	SUCCEED/FAIL
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, July 25, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_sfile_assert_num(unsigned n)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_sfile_assert_num)
+
+    if(n == 0) {
+        /* Sanity checking */
+        HDassert(H5F_sfile_head_g == NULL);
+    } /* end if */
+    else {
+        unsigned count;                 /* Number of open shared files */
+        H5F_sfile_node_t *curr;         /* Current shared file node */
+
+        /* Iterate through low-level files for matching low-level file info */
+        curr = H5F_sfile_head_g;
+        count = 0;
+        while(curr) {
+            /* Increment # of open shared file structs */
+            count++;
+
+            /* Advance to next shared file node */
+            curr = curr->next;
+        } /* end while */
+
+        /* Sanity checking */
+        HDassert(count == n);
+    } /* end else */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* H5F_sfile_assert_num() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_sfile_add
+ *
+ * Purpose:	Add a "shared" file struct to the list of open files
+ *
+ * Return:	SUCCEED/FAIL
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, July 18, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_sfile_add(H5F_file_t *shared)
+{
+    H5F_sfile_node_t *new_shared;              /* New shared file node */
+    herr_t ret_value = SUCCEED;         /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_sfile_add)
+
+    /* Sanity check */
+    HDassert(shared);
+
+    /* Allocate new shared file node */
+    if (NULL == (new_shared = H5FL_CALLOC(H5F_sfile_node_t)))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+    /* Set shared file value */
+    new_shared->shared = shared;
+
+    /* Prepend to list of shared files open */
+    new_shared->next = H5F_sfile_head_g;
+    H5F_sfile_head_g = new_shared;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_sfile_add() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_sfile_search
+ *
+ * Purpose:	Search for a "shared" file with low-level file info that
+ *              matches
+ *
+ * Return:	Non-NULL on success / NULL on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, July 18, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5F_file_t *
+H5F_sfile_search(H5FD_t *lf)
+{
+    H5F_sfile_node_t *curr;             /* Current shared file node */
+    H5F_file_t *ret_value = NULL;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_sfile_search)
+
+    /* Sanity check */
+    HDassert(lf);
+
+    /* Iterate through low-level files for matching low-level file info */
+    curr = H5F_sfile_head_g;
+    while(curr) {
+        /* Check for match */
+        if(0==H5FD_cmp(curr->shared->lf, lf))
+            HGOTO_DONE(curr->shared)
+
+        /* Advance to next shared file node */
+        curr = curr->next;
+    } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_sfile_search() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_sfile_remove
+ *
+ * Purpose:	Remove a "shared" file struct from the list of open files
+ *
+ * Return:	SUCCEED/FAIL
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, July 18, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_sfile_remove(H5F_file_t *shared)
+{
+    H5F_sfile_node_t *curr;             /* Current shared file node */
+    H5F_sfile_node_t *last;             /* Last shared file node */
+    herr_t ret_value = SUCCEED;         /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5F_sfile_remove)
+
+    /* Sanity check */
+    HDassert(shared);
+
+    /* Locate shared file node with correct shared file */
+    last = NULL;
+    curr = H5F_sfile_head_g;
+    while(curr && curr->shared != shared) {
+        /* Advance to next node */
+        last = curr;
+        curr = curr->next;
+    } /* end while */
+
+    /* Indicate error if the node wasn't found */
+    if(curr == NULL)
+	HGOTO_ERROR(H5E_FILE, H5E_NOTFOUND, FAIL, "can't find shared file info")
+
+    /* Remove node found from list */
+    if(last != NULL)
+        /* Removing middle or tail node in list */
+        last->next = curr->next;
+    else
+        /* Removing head node in list */
+        H5F_sfile_head_g = curr->next;
+
+    /* Release the shared file node struct */
+    /* (the shared file info itself is freed elsewhere) */
+    H5FL_FREE(H5F_sfile_node_t, curr);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_sfile_remove() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Fsuper.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Fsuper.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Fsuper.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,583 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5F_init_super_interface
+
+
+/* Packages needed by this file... */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"             /* File access				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Pprivate.h"		/* Property lists			*/
+
+/* PRIVATE PROTOTYPES */
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5F_init_super_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_super_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5F_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5F_init_super_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_init_super_interface)
+
+    FUNC_LEAVE_NOAPI(H5F_init())
+} /* H5F_init_super_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5F_read_superblock
+ *
+ * Purpose:     Reads the superblock from the file or from the BUF. If
+ *              ADDR is a valid address, then it reads it from the file.
+ *              If not, then BUF must be non-NULL for it to read from the
+ *              BUF.
+ *
+ * Return:      Success:        SUCCEED
+ *              Failure:        FAIL
+ *
+ * Programmer:  Bill Wendling
+ *              wendling at ncsa.uiuc.edu
+ *              Sept 12, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_read_superblock(H5F_t *f, hid_t dxpl_id, H5G_entry_t *root_ent)
+{
+    haddr_t             stored_eoa;         /*relative end-of-addr in file  */
+    haddr_t             eof;                /*end of file address           */
+    uint8_t            *q;                  /*ptr into temp I/O buffer      */
+    size_t              sizeof_addr = 0;
+    size_t              sizeof_size = 0;
+    const size_t        fixed_size = 24;    /*fixed sizeof superblock       */
+    unsigned            sym_leaf_k = 0;
+    size_t              variable_size;      /*variable sizeof superblock    */
+    unsigned            btree_k[H5B_NUM_BTREE_ID];  /* B-tree internal node 'K' values */
+    H5F_file_t         *shared = NULL;      /* shared part of `file'        */
+    H5FD_t             *lf = NULL;          /* file driver part of `shared' */
+    uint8_t            *p;                  /* Temporary pointer into encoding buffers */
+    unsigned            i;                  /* Index variable               */
+    unsigned            chksum;             /* Checksum temporary variable  */
+    size_t              driver_size;        /* Size of driver info block, in bytes */
+    char                driver_name[9];     /* Name of driver, for driver info block */
+    unsigned            super_vers;         /* Super block version          */
+    unsigned            freespace_vers;     /* Freespace info version       */
+    unsigned            obj_dir_vers;       /* Object header info version   */
+    unsigned            share_head_vers;    /* Shared header info version   */
+    uint8_t             buf[H5F_SUPERBLOCK_SIZE];     /* Local buffer                 */
+    H5P_genplist_t     *c_plist;            /* File creation property list  */
+    herr_t              ret_value = SUCCEED;
+
+    /* Decoding */
+    FUNC_ENTER_NOAPI(H5F_read_superblock, FAIL)
+
+    /* Short cuts */
+    shared = f->shared;
+    lf = shared->lf;
+
+    /* Get the shared file creation property list */
+    if (NULL == (c_plist = H5I_object(shared->fcpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get property list")
+
+    /* Read the superblock if it hasn't been read before. */
+    if (HADDR_UNDEF == (shared->super_addr=H5F_locate_signature(lf,dxpl_id)))
+        HGOTO_ERROR(H5E_FILE, H5E_NOTHDF5, FAIL, "unable to find file signature")
+    if (H5FD_set_eoa(lf, shared->super_addr + fixed_size) < 0 ||
+            H5FD_read(lf, H5FD_MEM_SUPER, dxpl_id, shared->super_addr, fixed_size, buf) < 0)
+        HGOTO_ERROR(H5E_FILE, H5E_READERROR, FAIL, "unable to read superblock")
+
+    /* Signature, already checked */
+    p = buf + H5F_SIGNATURE_LEN;
+
+    /* Superblock version */
+    super_vers = *p++;
+    if (super_vers > HDF5_SUPERBLOCK_VERSION_MAX)
+        HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "bad superblock version number")
+    if (H5P_set(c_plist, H5F_CRT_SUPER_VERS_NAME, &super_vers) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set superblock version")
+
+    /* Freespace version */
+    freespace_vers = *p++;
+    if (HDF5_FREESPACE_VERSION != freespace_vers)
+        HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "bad free space version number")
+    if (H5P_set(c_plist, H5F_CRT_FREESPACE_VERS_NAME, &freespace_vers) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to free space version")
+
+    /* Root group version number */
+    obj_dir_vers = *p++;
+    if (HDF5_OBJECTDIR_VERSION != obj_dir_vers)
+        HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "bad object directory version number")
+    if (H5P_set(c_plist, H5F_CRT_OBJ_DIR_VERS_NAME, &obj_dir_vers) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set object directory version")
+
+    /* Skip over reserved byte */
+    p++;
+
+    /* Shared header version number */
+    share_head_vers = *p++;
+    if (HDF5_SHAREDHEADER_VERSION != share_head_vers)
+        HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "bad shared-header format version number")
+    if (H5P_set(c_plist, H5F_CRT_SHARE_HEAD_VERS_NAME, &share_head_vers) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set shared-header format version")
+
+    /* Size of file addresses */
+    sizeof_addr = *p++;
+    if (sizeof_addr != 2 && sizeof_addr != 4 &&
+            sizeof_addr != 8 && sizeof_addr != 16 && sizeof_addr != 32)
+        HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "bad byte number in an address")
+    if (H5P_set(c_plist, H5F_CRT_ADDR_BYTE_NUM_NAME,&sizeof_addr) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set byte number in an address")
+    shared->sizeof_addr = sizeof_addr;  /* Keep a local copy also */
+
+    /* Size of file sizes */
+    sizeof_size = *p++;
+    if (sizeof_size != 2 && sizeof_size != 4 &&
+            sizeof_size != 8 && sizeof_size != 16 && sizeof_size != 32)
+        HGOTO_ERROR(H5E_FILE, H5E_BADVALUE, FAIL, "bad byte number for object size")
+    if (H5P_set(c_plist, H5F_CRT_OBJ_BYTE_NUM_NAME, &sizeof_size) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set byte number for object size")
+    shared->sizeof_size = sizeof_size;  /* Keep a local copy also */
+
+    /* Skip over reserved byte */
+    p++;
+
+    /* Various B-tree sizes */
+    UINT16DECODE(p, sym_leaf_k);
+    if (sym_leaf_k == 0)
+        HGOTO_ERROR(H5E_FILE, H5E_BADRANGE, FAIL, "bad symbol table leaf node 1/2 rank")
+    if (H5P_set(c_plist, H5F_CRT_SYM_LEAF_NAME, &sym_leaf_k) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set rank for symbol table leaf nodes")
+    shared->sym_leaf_k = sym_leaf_k;    /* Keep a local copy also */
+
+    /* Need 'get' call to set other array values */
+    if (H5P_get(c_plist, H5F_CRT_BTREE_RANK_NAME, btree_k) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get rank for btree internal nodes")
+    UINT16DECODE(p, btree_k[H5B_SNODE_ID]);
+    if (btree_k[H5B_SNODE_ID] == 0)
+        HGOTO_ERROR(H5E_FILE, H5E_BADRANGE, FAIL, "bad 1/2 rank for btree internal nodes")
+    /*
+     * Delay setting the value in the property list until we've checked
+     * for the indexed storage B-tree internal 'K' value later.
+     */
+
+    /* File consistency flags. Not really used yet */
+    UINT32DECODE(p, shared->consist_flags);
+    assert(((size_t)(p - buf)) == fixed_size);
+
+    /* Decode the variable-length part of the superblock... */
+    variable_size = (super_vers>0 ? 4 : 0) +    /* Potential indexed storage B-tree internal 'K' value */
+                    H5F_SIZEOF_ADDR(f) +        /*base addr*/
+                    H5F_SIZEOF_ADDR(f) +        /*global free list*/
+                    H5F_SIZEOF_ADDR(f) +        /*end-of-address*/
+                    H5F_SIZEOF_ADDR(f) +        /*reserved address*/
+                    H5G_SIZEOF_ENTRY(f);        /*root group ptr*/
+    assert(fixed_size + variable_size <= sizeof(buf));
+    if (H5FD_set_eoa(lf, shared->super_addr + fixed_size+variable_size) < 0 ||
+            H5FD_read(lf, H5FD_MEM_SUPER, dxpl_id, shared->super_addr + fixed_size, variable_size, p) < 0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to read superblock")
+
+    /*
+     * If the superblock version # is greater than 0, read in the indexed
+     * storage B-tree internal 'K' value
+     */
+    if (super_vers > 0) {
+        UINT16DECODE(p, btree_k[H5B_ISTORE_ID]);
+        p += 2;   /* reserved */
+    }
+    else
+        btree_k[H5B_ISTORE_ID] = HDF5_BTREE_ISTORE_IK_DEF;
+
+    /* Set the B-tree internal node values, etc */
+    if (H5P_set(c_plist, H5F_CRT_BTREE_RANK_NAME, btree_k) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set rank for btree internal nodes")
+    HDmemcpy(shared->btree_k, btree_k, sizeof(unsigned) * (size_t)H5B_NUM_BTREE_ID);    /* Keep a local copy also */
+
+    H5F_addr_decode(f, (const uint8_t **)&p, &shared->base_addr/*out*/);
+    H5F_addr_decode(f, (const uint8_t **)&p, &shared->freespace_addr/*out*/);
+    H5F_addr_decode(f, (const uint8_t **)&p, &stored_eoa/*out*/);
+    H5F_addr_decode(f, (const uint8_t **)&p, &shared->driver_addr/*out*/);
+    if (H5G_ent_decode(f, (const uint8_t **)&p, root_ent/*out*/) < 0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to read root symbol entry")
+
+    /*
+     * Check if superblock address is different from base address and
+     * adjust base address and "end of address" address if so.
+     */
+    if (!H5F_addr_eq(shared->super_addr,shared->base_addr)) {
+        /* Check if the superblock moved earlier in the file */
+        if (H5F_addr_lt(shared->super_addr, shared->base_addr))
+            stored_eoa -= (shared->base_addr - shared->super_addr);
+        else
+            /* The superblock moved later in the file */
+            stored_eoa += (shared->super_addr - shared->base_addr);
+
+        shared->base_addr = shared->super_addr;
+    } /* end if */
+
+    /* Compute super block checksum */
+    assert(sizeof(chksum) == sizeof(shared->super_chksum));
+    for (q = (uint8_t *)&chksum, chksum = 0, i = 0; i < fixed_size + variable_size; ++i)
+        q[i % sizeof(shared->super_chksum)] ^= buf[i];
+
+    /* Set the super block checksum */
+    shared->super_chksum = chksum;
+
+    /* Decode the optional driver information block */
+    if (H5F_addr_defined(shared->driver_addr)) {
+        haddr_t drv_addr = shared->base_addr + shared->driver_addr;
+        uint8_t dbuf[H5F_DRVINFOBLOCK_SIZE];     /* Local buffer                 */
+
+        if (H5FD_set_eoa(lf, drv_addr + 16) < 0 ||
+                H5FD_read(lf, H5FD_MEM_SUPER, dxpl_id, drv_addr, (size_t)16, dbuf) < 0)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to read driver information block")
+        p = dbuf;
+
+        /* Version number */
+        if (HDF5_DRIVERINFO_VERSION != *p++)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "bad driver information block version number")
+
+        p += 3; /* reserved */
+
+        /* Driver info size */
+        UINT32DECODE(p, driver_size);
+
+        /* Driver name and/or version */
+        HDstrncpy(driver_name, (const char *)p, (size_t)8);
+        driver_name[8] = '\0';
+        p += 8; /* advance past name/version */
+
+        /* Read driver information and decode */
+        assert((driver_size + 16) <= sizeof(dbuf));
+        if (H5FD_set_eoa(lf, drv_addr + 16 + driver_size) < 0 ||
+                H5FD_read(lf, H5FD_MEM_SUPER, dxpl_id, drv_addr+16, driver_size, p) < 0)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to read file driver information")
+
+        if (H5FD_sb_decode(lf, driver_name, p) < 0)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to decode driver information")
+
+        /* Compute driver info block checksum */
+        assert(sizeof(chksum) == sizeof(shared->drvr_chksum));
+        for (q = (uint8_t *)&chksum, chksum = 0, i = 0; i < (driver_size + 16); ++i)
+            q[i % sizeof(shared->drvr_chksum)] ^= dbuf[i];
+
+        /* Set the driver info block checksum */
+        shared->drvr_chksum = chksum;
+    } /* end if */
+
+    /*
+     * The user-defined data is the area of the file before the base
+     * address.
+     */
+    if (H5P_set(c_plist, H5F_CRT_USER_BLOCK_NAME, &shared->base_addr) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set usr block size")
+
+    /*
+     * Make sure that the data is not truncated. One case where this is
+     * possible is if the first file of a family of files was opened
+     * individually.
+     */
+    if (HADDR_UNDEF == (eof = H5FD_get_eof(lf)))
+        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to determine file size")
+    if (eof < stored_eoa)
+        HGOTO_ERROR(H5E_FILE, H5E_TRUNCATED, FAIL, "truncated file")
+
+    /*
+     * Tell the file driver how much address space has already been
+     * allocated so that it knows how to allocate additional memory.
+     */
+    if (H5FD_set_eoa(lf, stored_eoa) < 0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to set end-of-address marker for file")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5F_init_superblock
+ *
+ * Purpose:     Allocates the superblock for the file and initializes
+ *              information about the superblock in memory.  Does not write
+ *              any superblock information to the file.
+ *
+ * Return:      Success:        SUCCEED
+ *              Failure:        FAIL
+ *
+ * Programmer:  Quincey Koziol
+ *              koziol at ncsa.uiuc.edu
+ *              Sept 15, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_init_superblock(const H5F_t *f, hid_t dxpl_id)
+{
+    hsize_t         userblock_size = 0;         /* Size of userblock, in bytes */
+    size_t          superblock_size;            /* Size of superblock, in bytes     */
+    size_t          driver_size;                /* Size of driver info block (bytes)*/
+    unsigned        super_vers;                 /* Super block version              */
+    haddr_t         addr;                       /* Address of superblock            */
+    H5P_genplist_t *plist;                      /* Property list                    */
+    herr_t          ret_value=SUCCEED;
+
+    /* Encoding */
+    FUNC_ENTER_NOAPI(H5F_init_superblock, FAIL)
+
+    /* Get the shared file creation property list */
+    if (NULL == (plist = H5I_object(f->shared->fcpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
+
+    /*
+     * The superblock starts immediately after the user-defined
+     * header, which we have already insured is a proper size. The
+     * base address is set to the same thing as the superblock for
+     * now.
+     */
+    if(H5P_get(plist, H5F_CRT_USER_BLOCK_NAME, &userblock_size) < 0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "unable to get user block size")
+    f->shared->super_addr = userblock_size;
+    f->shared->base_addr = f->shared->super_addr;
+    f->shared->consist_flags = 0x03;
+
+    /* Grab superblock version from property list */
+    if (H5P_get(plist, H5F_CRT_SUPER_VERS_NAME, &super_vers) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get super block version")
+
+    /* Compute the size of the superblock */
+    superblock_size=H5F_SIGNATURE_LEN   /* Signature length (8 bytes) */
+        + 16                            /* Length of required fixed-size portion */
+        + ((super_vers>0) ? 4 : 0)      /* Version specific fixed-size portion */
+        + 4 * H5F_sizeof_addr(f)        /* Variable-sized addresses */
+        + H5G_SIZEOF_ENTRY(f);          /* Size of root group symbol table entry */
+
+    /* Compute the size of the driver information block. */
+    H5_ASSIGN_OVERFLOW(driver_size, H5FD_sb_size(f->shared->lf), hsize_t, size_t);
+    if (driver_size > 0)
+	driver_size += 16; /* Driver block header */
+
+    /*
+     * Allocate space for the userblock, superblock, and driver info
+     * block. We do it with one allocation request because the
+     * userblock and superblock need to be at the beginning of the
+     * file and only the first allocation request is required to
+     * return memory at format address zero.
+     */
+
+    H5_CHECK_OVERFLOW(f->shared->base_addr, haddr_t, hsize_t);
+    addr = H5FD_alloc(f->shared->lf, H5FD_MEM_SUPER, dxpl_id,
+                      ((hsize_t)f->shared->base_addr + superblock_size + driver_size));
+
+    if (HADDR_UNDEF == addr)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL,
+                    "unable to allocate file space for userblock and/or superblock")
+
+    if (0 != addr)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL,
+                    "file driver failed to allocate userblock and/or superblock at address zero")
+
+    /*
+     * The file driver information block begins immediately after the
+     * superblock.
+     */
+    if (driver_size > 0)
+        f->shared->driver_addr = superblock_size;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_init_superblock() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5F_write_superblock
+ *
+ * Purpose:     Writes (and optionally allocates) the superblock for the file.
+ *              If BUF is non-NULL, then write the serialized superblock
+ *              information into it. It should be a buffer of size
+ *              H5F_SUPERBLOCK_SIZE + H5F_DRVINFOBLOCK_SIZE or larger.
+ *
+ * Return:      Success:        SUCCEED
+ *              Failure:        FAIL
+ *
+ * Programmer:  Bill Wendling
+ *              wendling at ncsa.uiuc.edu
+ *              Sept 12, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_write_superblock(H5F_t *f, hid_t dxpl_id)
+{
+    uint8_t         sbuf[H5F_SUPERBLOCK_SIZE];  /* Superblock encoding buffer       */
+    uint8_t         dbuf[H5F_DRVINFOBLOCK_SIZE];/* Driver info block encoding buffer*/
+    uint8_t        *p = NULL;                   /* Ptr into encoding buffers        */
+    unsigned        i;                          /* Index variable                   */
+    unsigned        chksum;                     /* Checksum temporary variable      */
+    size_t          superblock_size;            /* Size of superblock, in bytes     */
+    size_t          driver_size;                /* Size of driver info block (bytes)*/
+    char            driver_name[9];             /* Name of driver, for driver info block */
+    unsigned        super_vers;                 /* Super block version              */
+    unsigned        freespace_vers;             /* Freespace info version           */
+    unsigned        obj_dir_vers;               /* Object header info version       */
+    unsigned        share_head_vers;            /* Shared header info version       */
+    H5P_genplist_t *plist;                      /* Property list                    */
+    herr_t          ret_value = SUCCEED;
+
+    /* Encoding */
+    FUNC_ENTER_NOAPI(H5F_write_superblock, FAIL)
+
+    /* Get the shared file creation property list */
+    if (NULL == (plist = H5I_object(f->shared->fcpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list")
+
+    /* Grab values from property list */
+    if (H5P_get(plist, H5F_CRT_SUPER_VERS_NAME, &super_vers) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get super block version")
+    if (H5P_get(plist, H5F_CRT_FREESPACE_VERS_NAME, &freespace_vers) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get free space version")
+    if (H5P_get(plist, H5F_CRT_OBJ_DIR_VERS_NAME, &obj_dir_vers) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get object directory version")
+    if (H5P_get(plist, H5F_CRT_SHARE_HEAD_VERS_NAME, &share_head_vers) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get shared-header format version")
+
+    /* Encode the file super block */
+    p = sbuf;
+    HDmemcpy(p, H5F_SIGNATURE, (size_t)H5F_SIGNATURE_LEN);
+    p += H5F_SIGNATURE_LEN;
+    *p++ = (uint8_t)super_vers;
+    *p++ = (uint8_t)freespace_vers;
+    *p++ = (uint8_t)obj_dir_vers;
+    *p++ = 0;   /* reserved*/
+    *p++ = (uint8_t)share_head_vers;
+    assert (H5F_SIZEOF_ADDR(f) <= 255);
+    *p++ = (uint8_t)H5F_SIZEOF_ADDR(f);
+    assert (H5F_SIZEOF_SIZE(f) <= 255);
+    *p++ = (uint8_t)H5F_SIZEOF_SIZE(f);
+    *p++ = 0;   /* reserved */
+    UINT16ENCODE(p, f->shared->sym_leaf_k);
+    UINT16ENCODE(p, f->shared->btree_k[H5B_SNODE_ID]);
+    UINT32ENCODE(p, f->shared->consist_flags);
+
+    /*
+     * Versions of the superblock >0 have the indexed storage B-tree
+     * internal 'K' value stored
+     */
+    if (super_vers > 0) {
+        UINT16ENCODE(p, f->shared->btree_k[H5B_ISTORE_ID]);
+        *p++ = 0;   /*reserved */
+        *p++ = 0;   /*reserved */
+    }
+
+    H5F_addr_encode(f, &p, f->shared->base_addr);
+    H5F_addr_encode(f, &p, f->shared->freespace_addr);
+    H5F_addr_encode(f, &p, H5FD_get_eoa(f->shared->lf));
+    H5F_addr_encode(f, &p, f->shared->driver_addr);
+    if(H5G_ent_encode(f, &p, H5G_entof(f->shared->root_grp))<0)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to encode root group information")
+
+    H5_ASSIGN_OVERFLOW(superblock_size, p - sbuf, int, size_t);
+
+    /* Double check we didn't overrun the block (unlikely) */
+    assert(superblock_size <= sizeof(sbuf));
+
+    /* Encode the driver information block. */
+    H5_ASSIGN_OVERFLOW(driver_size, H5FD_sb_size(f->shared->lf), hsize_t, size_t);
+
+    if (driver_size > 0) {
+	driver_size += 16; /* Driver block header */
+
+        /* Double check we didn't overrun the block (unlikely) */
+	assert(driver_size <= sizeof(dbuf));
+
+        /* Encode the driver information block */
+	p = dbuf;
+
+	*p++ = HDF5_DRIVERINFO_VERSION; /* Version */
+	*p++ = 0; /* reserved */
+	*p++ = 0; /* reserved */
+	*p++ = 0; /* reserved */
+
+	/* Driver info size, excluding header */
+	UINT32ENCODE(p, driver_size - 16);
+
+	/* Encode driver-specific data */
+	if (H5FD_sb_encode(f->shared->lf, driver_name, dbuf + 16) < 0)
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, FAIL, "unable to encode driver information")
+
+	/* Driver name */
+	HDmemcpy(dbuf + 8, driver_name, (size_t)8);
+    } /* end if */
+
+    /* Compute super block checksum */
+    assert(sizeof(chksum) == sizeof(f->shared->super_chksum));
+
+    for (p = (uint8_t *)&chksum, chksum = 0, i = 0; i < superblock_size; ++i)
+        p[i % sizeof(f->shared->super_chksum)] ^= sbuf[i];
+
+    /* Compare with current checksums */
+    if (chksum != f->shared->super_chksum) {
+        /* Write superblock */
+        if (H5FD_write(f->shared->lf, H5FD_MEM_SUPER, dxpl_id,
+                       f->shared->super_addr, superblock_size, sbuf) < 0)
+            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write superblock")
+
+        /* Update checksum information if different */
+        f->shared->super_chksum = chksum;
+    } /* end if */
+
+    /* Check for driver info block */
+    if (HADDR_UNDEF != f->shared->driver_addr) {
+        /* Compute driver info block checksum */
+        assert(sizeof(chksum) == sizeof(f->shared->drvr_chksum));
+
+        for (p = (uint8_t *)&chksum, chksum = 0, i = 0; i < driver_size; ++i)
+            p[i % sizeof(f->shared->drvr_chksum)] ^= dbuf[i];
+
+        /* Compare with current checksums */
+        if (chksum != f->shared->drvr_chksum) {
+            /* Write driver information block */
+            if (H5FD_write(f->shared->lf, H5FD_MEM_SUPER, dxpl_id,
+                           f->shared->base_addr + f->shared->driver_addr, driver_size, dbuf) < 0)
+                HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to write driver information block")
+
+            /* Update checksum information if different */
+            f->shared->drvr_chksum = chksum;
+        } /* end if */
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5G.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5G.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5G.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,4042 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:	H5G.c
+ *		Jul 18 1997
+ *		Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:	Symbol table functions.	 The functions that begin with
+ *		`H5G_stab_' don't understand the naming system; they operate
+ * 		on a single symbol table at a time.
+ *
+ *		The functions that begin with `H5G_node_' operate on the leaf
+ *		nodes of a symbol table B-tree.  They should be defined in
+ *		the H5Gnode.c file.
+ *
+ *		The remaining functions know how to traverse the group
+ *		directed graph.
+ *
+ * Names:	Object names are a slash-separated list of components.  If
+ *		the name begins with a slash then it's absolute, otherwise
+ *		it's relative ("/foo/bar" is absolute while "foo/bar" is
+ *		relative).  Multiple consecutive slashes are treated as
+ *		single slashes and trailing slashes are ignored.  The special
+ *		case `/' is the root group.  Every file has a root group.
+ *
+ *		API functions that look up names take a location ID and a
+ *		name.  The location ID can be a file ID or a group ID and the
+ *		name can be relative or absolute.
+ *
+ *              +--------------+----------- +--------------------------------+
+ * 		| Location ID  | Name       | Meaning                        |
+ *              +--------------+------------+--------------------------------+
+ * 		| File ID      | "/foo/bar" | Find `foo' within `bar' within |
+ *		|              |            | the root group of the specified|
+ *		|              |            | file.                          |
+ *              +--------------+------------+--------------------------------+
+ * 		| File ID      | "foo/bar"  | Find `foo' within `bar' within |
+ *		|              |            | the current working group of   |
+ *		|              |            | the specified file.            |
+ *              +--------------+------------+--------------------------------+
+ * 		| File ID      | "/"        | The root group of the specified|
+ *		|              |            | file.                          |
+ *              +--------------+------------+--------------------------------+
+ * 		| File ID      | "."        | The current working group of   |
+ *		|              |            | the specified file.            |
+ *              +--------------+------------+--------------------------------+
+ * 		| Group ID     | "/foo/bar" | Find `foo' within `bar' within |
+ *		|              |            | the root group of the file     |
+ *		|              |            | containing the specified group.|
+ *              +--------------+------------+--------------------------------+
+ * 		| Group ID     | "foo/bar"  | File `foo' within `bar' within |
+ *		|              |            | the specified group.           |
+ *              +--------------+------------+--------------------------------+
+ * 		| Group ID     | "/"        | The root group of the file     |
+ *		|              |            | containing the specified group.|
+ *              +--------------+------------+--------------------------------+
+ * 		| Group ID     | "."        | The specified group.           |
+ *              +--------------+------------+--------------------------------+
+ *
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 5 Aug 1997
+ *	Added calls to H5E.
+ *
+ *	Robb Matzke, 30 Aug 1997
+ *	Added `Errors:' field to function prologues.
+ *
+ *      Pedro Vicente, 22 Aug 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define H5G_PACKAGE		/*suppress error about including H5Gpkg   */
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5G_init_interface
+
+
+/* Packages needed by this file... */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Aprivate.h"		/* Attributes				*/
+#include "H5Dprivate.h"		/* Datasets				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"		/* File access				*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5Gpkg.h"		/* Groups		  		*/
+#include "H5HLprivate.h"	/* Local Heaps				*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+
+/* Local macros */
+#define H5G_INIT_HEAP		8192
+#define H5G_RESERVED_ATOMS	0
+#define H5G_SIZE_HINT   256             /*default root grp size hint         */
+
+/*
+ * During name lookups (see H5G_namei()) we sometimes want information about
+ * a symbolic link or a mount point.  The normal operation is to follow the
+ * symbolic link or mount point and return information about its target.
+ */
+#define H5G_TARGET_NORMAL	0x0000
+#define H5G_TARGET_SLINK	0x0001
+#define H5G_TARGET_MOUNT	0x0002
+
+/* Local typedefs */
+
+/* Struct only used by change name callback function */
+typedef struct H5G_names_t {
+    H5G_entry_t	*loc;
+    H5RS_str_t *src_name;
+    H5G_entry_t	*src_loc;
+    H5RS_str_t *dst_name;
+    H5G_entry_t	*dst_loc;
+    H5G_names_op_t op;
+} H5G_names_t;
+
+/* Enum for H5G_namei actions */
+typedef enum {
+    H5G_NAMEI_TRAVERSE,         /* Just traverse groups */
+    H5G_NAMEI_INSERT            /* Insert entry in group */
+} H5G_namei_act_t ;
+
+/*
+ * This table contains a list of object types, descriptions, and the
+ * functions that determine if some object is a particular type.  The table
+ * is allocated dynamically.
+ */
+typedef struct H5G_typeinfo_t {
+    int 	type;			        /*one of the public H5G_* types	     */
+    htri_t	(*isa)(H5G_entry_t*, hid_t);	/*function to determine type	     */
+    char	*desc;			        /*description of object type	     */
+} H5G_typeinfo_t;
+
+/* Local variables */
+static H5G_typeinfo_t *H5G_type_g = NULL;	/*object typing info	*/
+static size_t H5G_ntypes_g = 0;			/*entries in type table	*/
+static size_t H5G_atypes_g = 0;			/*entries allocated	*/
+static char *H5G_comp_g = NULL;                 /*component buffer      */
+static size_t H5G_comp_alloc_g = 0;             /*sizeof component buffer */
+
+/* Declare a free list to manage the H5G_t struct */
+H5FL_DEFINE(H5G_t);
+H5FL_DEFINE(H5G_shared_t);
+
+/* Declare extern the PQ free list for the wrapped strings */
+H5FL_BLK_EXTERN(str_buf);
+
+/* Private prototypes */
+static herr_t H5G_register_type(int type, htri_t(*isa)(H5G_entry_t*, hid_t),
+				 const char *desc);
+static const char * H5G_component(const char *name, size_t *size_p);
+static const char * H5G_basename(const char *name, size_t *size_p);
+static char * H5G_normalize(const char *name);
+static herr_t H5G_namei(const H5G_entry_t *loc_ent, const char *name,
+    const char **rest/*out*/, H5G_entry_t *grp_ent/*out*/, H5G_entry_t *obj_ent/*out*/,
+    unsigned target, int *nlinks/*out*/, H5G_namei_act_t action,
+    H5G_entry_t *ent, hid_t dxpl_id);
+static herr_t H5G_traverse_slink(H5G_entry_t *grp_ent/*in,out*/,
+    H5G_entry_t *obj_ent/*in,out*/, int *nlinks/*in,out*/, hid_t dxpl_id);
+static H5G_t *H5G_create(H5G_entry_t *loc, const char *name, size_t size_hint, hid_t dxpl_id);
+static htri_t H5G_isa(H5G_entry_t *ent, hid_t dxpl_id);
+static htri_t H5G_link_isa(H5G_entry_t *ent, hid_t dxpl_id);
+static H5G_t * H5G_open_oid(H5G_entry_t *ent, hid_t dxpl_id);
+static H5G_t *H5G_rootof(H5F_t *f);
+static herr_t H5G_link(H5G_entry_t *cur_loc, const char *cur_name,
+    H5G_entry_t *new_loc, const char *new_name, H5G_link_t type,
+    unsigned namei_flags, hid_t dxpl_id);
+static herr_t H5G_get_num_objs(H5G_entry_t *grp, hsize_t *num_objs, hid_t dxpl_id);
+static ssize_t H5G_get_objname_by_idx(H5G_entry_t *loc, hsize_t idx, char* name, size_t size, hid_t dxpl_id);
+static int H5G_get_objtype_by_idx(H5G_entry_t *loc, hsize_t idx, hid_t dxpl_id);
+static herr_t H5G_linkval(H5G_entry_t *loc, const char *name, size_t size,
+    char *buf/*out*/, hid_t dxpl_id);
+static herr_t H5G_set_comment(H5G_entry_t *loc, const char *name,
+    const char *buf, hid_t dxpl_id);
+static int H5G_get_comment(H5G_entry_t *loc, const char *name,
+    size_t bufsize, char *buf, hid_t dxpl_id);
+static herr_t H5G_unlink(H5G_entry_t *loc, const char *name, hid_t dxpl_id);
+static herr_t H5G_move(H5G_entry_t *src_loc, const char *src_name,
+    H5G_entry_t *dst_loc, const char *dst_name, hid_t dxpl_id);
+static htri_t H5G_common_path(const H5RS_str_t *fullpath_r,
+    const H5RS_str_t *prefix_r);
+static H5RS_str_t *H5G_build_fullpath(const H5RS_str_t *prefix_r, const H5RS_str_t *name_r);
+static int H5G_replace_ent(void *obj_ptr, hid_t obj_id, void *key);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Gcreate
+ *
+ * Purpose:	Creates a new group relative to LOC_ID and gives it the
+ *		specified NAME.  The group is opened for write access
+ *		and it's object ID is returned.
+ *
+ *		The optional SIZE_HINT specifies how much file space to
+ *		reserve to store the names that will appear in this
+ *		group. If a non-positive value is supplied for the SIZE_HINT
+ *		then a default size is chosen.
+ *
+ * See also:	H5Gset(), H5Gpush(), H5Gpop()
+ *
+ * Errors:
+ *
+ * Return:	Success:	The object ID of a new, empty group open for
+ *				writing.  Call H5Gclose() when finished with
+ *				the group.
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, September 24, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Gcreate(hid_t loc_id, const char *name, size_t size_hint)
+{
+    H5G_entry_t		   *loc = NULL;
+    H5G_t		   *grp = NULL;
+    hid_t		    ret_value;
+
+    FUNC_ENTER_API(H5Gcreate, FAIL);
+    H5TRACE3("i","isz",loc_id,name,size_hint);
+
+    /* Check arguments */
+    if (NULL==(loc=H5G_loc (loc_id)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if (!name || !*name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name given");
+
+    /* Create the group */
+    if (NULL == (grp = H5G_create(loc, name, size_hint, H5AC_dxpl_id)))
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to create group");
+    if ((ret_value = H5I_register(H5I_GROUP, grp)) < 0)
+	HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register group");
+
+done:
+    if(ret_value<0) {
+        if(grp!=NULL)
+            H5G_close(grp);
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Gopen
+ *
+ * Purpose:	Opens an existing group for modification.  When finished,
+ *		call H5Gclose() to close it and release resources.
+ *
+ * Errors:
+ *
+ * Return:	Success:	Object ID of the group.
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, December 31, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Gopen(hid_t loc_id, const char *name)
+{
+    hid_t       ret_value = FAIL;
+    H5G_t       *grp = NULL;
+    H5G_entry_t	*loc = NULL;
+    H5G_entry_t	 ent;
+
+    FUNC_ENTER_API(H5Gopen, FAIL);
+    H5TRACE2("i","is",loc_id,name);
+
+    /* Check args */
+    if (NULL==(loc=H5G_loc(loc_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name");
+
+    /* Open the parent group, making sure it's a group */
+    if (H5G_find(loc, name, &ent/*out*/, H5AC_dxpl_id) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "group not found");
+
+    /* Open the group */
+    if ((grp = H5G_open(&ent, H5AC_dxpl_id))==NULL)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open group");
+
+    /* Register an atom for the group */
+    if ((ret_value = H5I_register(H5I_GROUP, grp)) < 0)
+        HGOTO_ERROR(H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register group");
+
+done:
+    if(ret_value<0) {
+        if(grp!=NULL)
+            H5G_close(grp);
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Gclose
+ *
+ * Purpose:	Closes the specified group.  The group ID will no longer be
+ *		valid for accessing the group.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, December 31, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Gclose(hid_t group_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Gclose, FAIL);
+    H5TRACE1("e","i",group_id);
+
+    /* Check args */
+    if (NULL == H5I_object_verify(group_id,H5I_GROUP))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a group");
+
+    /*
+     * Decrement the counter on the group atom.	 It will be freed if the count
+     * reaches zero.
+     */
+    if (H5I_dec_ref(group_id) < 0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to close group");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Giterate
+ *
+ * Purpose:	Iterates over the entries of a group.  The LOC_ID and NAME
+ *		identify the group over which to iterate and IDX indicates
+ *		where to start iterating (zero means at the beginning).	 The
+ *		OPERATOR is called for each member and the iteration
+ *		continues until the operator returns non-zero or all members
+ *		are processed. The operator is passed a group ID for the
+ *		group being iterated, a member name, and OP_DATA for each
+ *		member.
+ *
+ * Return:	Success:	The return value of the first operator that
+ *				returns non-zero, or zero if all members were
+ *				processed with no operator returning non-zero.
+ *
+ *		Failure:	Negative if something goes wrong within the
+ *				library, or the negative value returned by one
+ *				of the operators.
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, March 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Giterate(hid_t loc_id, const char *name, int *idx_p,
+	    H5G_iterate_t op, void *op_data)
+{
+    H5O_stab_t		stab;		/*info about B-tree	*/
+    int			idx;
+    H5G_bt_it_ud1_t	udata;
+    H5G_t		*grp = NULL;
+    herr_t		ret_value;
+
+    FUNC_ENTER_API(H5Giterate, FAIL);
+    H5TRACE5("e","is*Isxx",loc_id,name,idx_p,op,op_data);
+
+    /* Check args */
+    if (!name || !*name)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified");
+    idx = (idx_p == NULL ? 0 : *idx_p);
+    if (!idx_p)
+        idx_p = &idx;
+    if (idx<0)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid index specified");
+    if (!op)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no operator specified");
+
+    /*
+     * Open the group on which to operate.  We also create a group ID which
+     * we can pass to the application-defined operator.
+     */
+    if ((udata.group_id = H5Gopen (loc_id, name)) <0)
+        HGOTO_ERROR (H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open group");
+    if ((grp=H5I_object(udata.group_id))==NULL) {
+        H5Gclose(udata.group_id);
+        HGOTO_ERROR (H5E_ATOM, H5E_BADATOM, FAIL, "bad group atom");
+    }
+
+    /* Get the B-tree info */
+    if (NULL==H5O_read (&(grp->ent), H5O_STAB_ID, 0, &stab, H5AC_dxpl_id))
+	HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to determine local heap address")
+
+    /* Build udata to pass through H5B_iterate() to H5G_node_iterate() */
+    udata.skip = idx;
+    udata.heap_addr = stab.heap_addr;
+    udata.op = op;
+    udata.op_data = op_data;
+
+    /* Set the number of entries looked at to zero */
+    udata.final_ent = 0;
+
+    /* Iterate over the group members */
+    if ((ret_value = H5B_iterate (H5G_fileof(grp), H5AC_dxpl_id, H5B_SNODE,
+              H5G_node_iterate, stab.btree_addr, &udata))<0)
+        HERROR (H5E_SYM, H5E_CANTNEXT, "iteration operator failed");
+
+    H5I_dec_ref (udata.group_id); /*also closes 'grp'*/
+
+    /* Check for too high of a starting index (ex post facto :-) */
+    /* (Skipping exactly as many entries as are in the group is currently an error) */
+    if(idx>0 && idx>=udata.final_ent)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid index specified");
+
+    /* Set the index we stopped at */
+    *idx_p=udata.final_ent;
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Gget_num_objs
+ *
+ * Purpose:     Returns the number of objects in the group.  It iterates
+ *              all B-tree leaves and sum up total number of group members.
+ *
+ * Return:	Success:        Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Raymond Lu
+ *	        Nov 20, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Gget_num_objs(hid_t loc_id, hsize_t *num_objs)
+{
+    H5G_entry_t		*loc = NULL;    /* Pointer to symbol table entry */
+    herr_t		ret_value;
+
+    FUNC_ENTER_API(H5Gget_num_objs, FAIL);
+    H5TRACE2("e","i*h",loc_id,num_objs);
+
+    /* Check args */
+    if (NULL==(loc=H5G_loc (loc_id)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a location ID");
+    if(H5G_get_type(loc,H5AC_ind_dxpl_id)!=H5G_GROUP)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a group");
+    if (!num_objs)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "nil pointer");
+
+    /* Call private function. */
+    ret_value = H5G_get_num_objs(loc, num_objs, H5AC_ind_dxpl_id);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Gget_objname_by_idx
+ *
+ * Purpose:     Returns the name of objects in the group by giving index.
+ *              If `name' is non-NULL then write up to `size' bytes into that
+ *              buffer and always return the length of the entry name.
+ *              Otherwise `size' is ignored and the function does not store the name,
+ *              just returning the number of characters required to store the name.
+ *              If an error occurs then the buffer pointed to by `name' (NULL or non-NULL)
+ *              is unchanged and the function returns a negative value.
+ *              If a zero is returned for the name's length, then there is no name
+ *              associated with the ID.
+ *
+ * Return:	Success:        Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Raymond Lu
+ *	        Nov 20, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+ssize_t
+H5Gget_objname_by_idx(hid_t loc_id, hsize_t idx, char *name, size_t size)
+{
+    H5G_entry_t		*loc = NULL;    /* Pointer to symbol table entry */
+    ssize_t		ret_value = FAIL;
+
+    FUNC_ENTER_API(H5Gget_objname_by_idx, FAIL);
+    H5TRACE4("Zs","ihsz",loc_id,idx,name,size);
+
+    /* Check args */
+    if (NULL==(loc=H5G_loc (loc_id)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a location ID");
+    if(H5G_get_type(loc,H5AC_ind_dxpl_id)!=H5G_GROUP)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a group");
+
+    /*call private function*/
+    ret_value = H5G_get_objname_by_idx(loc, idx, name, size, H5AC_ind_dxpl_id);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Gget_objtype_by_idx
+ *
+ * Purpose:     Returns the type of objects in the group by giving index.
+ *
+ *
+ * Return:	Success:        H5G_GROUP(1), H5G_DATASET(2), H5G_TYPE(3)
+ *
+ *		Failure:	H5G_UNKNOWN
+ *
+ * Programmer:	Raymond Lu
+ *	        Nov 20, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+int
+H5Gget_objtype_by_idx(hid_t loc_id, hsize_t idx)
+{
+    H5G_entry_t		*loc = NULL;    /* Pointer to symbol table entry */
+    int 		ret_value;
+
+    FUNC_ENTER_API(H5Gget_objtype_by_idx, FAIL);
+    H5TRACE2("Is","ih",loc_id,idx);
+
+    /* Check args */
+    if (NULL==(loc=H5G_loc (loc_id)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a location ID");
+    if(H5G_get_type(loc,H5AC_ind_dxpl_id)!=H5G_GROUP)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a group");
+
+    /*call private function*/
+    ret_value = H5G_get_objtype_by_idx(loc, idx, H5AC_ind_dxpl_id);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+
+}
+
+#else /*H5_WANT_H5_V1_4_COMPAT*/
+H5G_obj_t
+H5Gget_objtype_by_idx(hid_t loc_id, hsize_t idx)
+{
+    H5G_entry_t		*loc = NULL;    /* Pointer to symbol table entry */
+    H5G_obj_t		ret_value;
+
+    FUNC_ENTER_API(H5Gget_objtype_by_idx, H5G_UNKNOWN);
+    H5TRACE2("Go","ih",loc_id,idx);
+
+    /* Check args */
+    if (NULL==(loc=H5G_loc (loc_id)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, H5G_UNKNOWN, "not a location ID");
+    if(H5G_get_type(loc,H5AC_ind_dxpl_id)!=H5G_GROUP)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, H5G_UNKNOWN, "not a group");
+
+    /*call private function*/
+    ret_value = (H5G_obj_t)H5G_get_objtype_by_idx(loc, idx, H5AC_ind_dxpl_id);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+
+}
+#endif /*H5_WANT_H5_V1_4_COMPAT*/
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Gmove2
+ *
+ * Purpose:	Renames an object within an HDF5 file.  The original name SRC
+ *		is unlinked from the group graph and the new name DST is
+ *		inserted as an atomic operation.  Both names are interpreted
+ *		relative to SRC_LOC_ID and DST_LOC_ID, which are either a file
+ *		ID or a group ID.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April  6, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ *		Thursday, April 18, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Gmove2(hid_t src_loc_id, const char *src_name, hid_t dst_loc_id,
+	 const char *dst_name)
+{
+    H5G_entry_t		*src_loc=NULL;
+    H5G_entry_t		*dst_loc=NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Gmove2, FAIL);
+    H5TRACE4("e","isis",src_loc_id,src_name,dst_loc_id,dst_name);
+
+    if (src_loc_id != H5G_SAME_LOC && NULL==(src_loc=H5G_loc(src_loc_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if (dst_loc_id != H5G_SAME_LOC && NULL==(dst_loc=H5G_loc(dst_loc_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if (!src_name || !*src_name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no current name specified");
+    if (!dst_name || !*dst_name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no new name specified");
+
+    if(src_loc_id == H5G_SAME_LOC && dst_loc_id == H5G_SAME_LOC) {
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "source and destination should not be both H5G_SAME_LOC");
+    } else if(src_loc_id == H5G_SAME_LOC) {
+	src_loc = dst_loc;
+    }
+    else if(dst_loc_id == H5G_SAME_LOC) {
+	dst_loc = src_loc;
+    }
+    else if(src_loc->file != dst_loc->file)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "source and destination should be in the same file.");
+
+    if (H5G_move(src_loc, src_name, dst_loc, dst_name, H5AC_dxpl_id)<0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to change object name");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Glink2
+ *
+ * Purpose:	Creates a link of the specified type from NEW_NAME to
+ *		CUR_NAME.
+ *
+ *		If TYPE is H5G_LINK_HARD then CUR_NAME must name an existing
+ *		object.  CUR_NAME and NEW_NAME are interpreted relative to
+ *		CUR_LOC_ID and NEW_LOC_ID, which is either a file ID or a
+ *		group ID.
+ *
+ * 		If TYPE is H5G_LINK_SOFT then CUR_NAME can be anything and is
+ *		interpreted at lookup time relative to the group which
+ *		contains the final component of NEW_NAME.  For instance, if
+ *		CUR_NAME is `./foo' and NEW_NAME is `./x/y/bar' and a request
+ *		is made for `./x/y/bar' then the actual object looked up is
+ *		`./x/y/./foo'.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April  6, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Glink2(hid_t cur_loc_id, const char *cur_name, H5G_link_t type,
+	 hid_t new_loc_id, const char *new_name)
+{
+    H5G_entry_t	*cur_loc = NULL;
+    H5G_entry_t *new_loc = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Glink2, FAIL);
+    H5TRACE5("e","isGlis",cur_loc_id,cur_name,type,new_loc_id,new_name);
+
+    /* Check arguments */
+    if (cur_loc_id != H5G_SAME_LOC && NULL==(cur_loc=H5G_loc(cur_loc_id)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if (new_loc_id != H5G_SAME_LOC && NULL==(new_loc=H5G_loc(new_loc_id)))
+        HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if (type!=H5G_LINK_HARD && type!=H5G_LINK_SOFT)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "unrecognized link type");
+    if (!cur_name || !*cur_name)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no current name specified");
+    if (!new_name || !*new_name)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no new name specified");
+
+    if(cur_loc_id == H5G_SAME_LOC && new_loc_id == H5G_SAME_LOC) {
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "source and destination should not be both H5G_SAME_LOC");
+    }
+    else if(cur_loc_id == H5G_SAME_LOC) {
+        cur_loc = new_loc;
+    }
+    else if(new_loc_id == H5G_SAME_LOC) {
+   	new_loc = cur_loc;
+    }
+    else if(cur_loc->file != new_loc->file)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "source and destination should be in the same file.");
+
+    if (H5G_link(cur_loc, cur_name, new_loc, new_name, type, H5G_TARGET_NORMAL, H5AC_dxpl_id) <0)
+	HGOTO_ERROR (H5E_SYM, H5E_LINK, FAIL, "unable to create link");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Gunlink
+ *
+ * Purpose:	Removes the specified NAME from the group graph and
+ *		decrements the link count for the object to which NAME
+ *		points.  If the link count reaches zero then all file-space
+ *		associated with the object will be reclaimed (but if the
+ *		object is open, then the reclamation of the file space is
+ *		delayed until all handles to the object are closed).
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April  6, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Gunlink(hid_t loc_id, const char *name)
+{
+    H5G_entry_t	*loc = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Gunlink, FAIL);
+    H5TRACE2("e","is",loc_id,name);
+
+    /* Check arguments */
+    if (NULL==(loc=H5G_loc(loc_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if (!name || !*name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name");
+
+    /* Unlink */
+    if (H5G_unlink(loc, name, H5AC_dxpl_id)<0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to unlink object");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Gget_objinfo
+ *
+ * Purpose:	Returns information about an object.  If FOLLOW_LINK is
+ *		non-zero then all symbolic links are followed; otherwise all
+ *		links except the last component of the name are followed.
+ *
+ * Return:	Non-negative on success, with the fields of STATBUF (if
+ *              non-null) initialized. Negative on failure.
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Gget_objinfo(hid_t loc_id, const char *name, hbool_t follow_link,
+	       H5G_stat_t *statbuf/*out*/)
+{
+    H5G_entry_t	*loc = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Gget_objinfo, FAIL);
+    H5TRACE4("e","isbx",loc_id,name,follow_link,statbuf);
+
+    /* Check arguments */
+    if (NULL==(loc=H5G_loc (loc_id)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if (!name || !*name)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified");
+
+    /* Get info */
+    if (H5G_get_objinfo (loc, name, follow_link, statbuf, H5AC_ind_dxpl_id)<0)
+	HGOTO_ERROR (H5E_ARGS, H5E_CANTINIT, FAIL, "cannot stat object");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Gget_linkval
+ *
+ * Purpose:	Returns the value of a symbolic link whose name is NAME.  At
+ *		most SIZE characters (counting the null terminator) are
+ *		copied to the BUF result buffer.
+ *
+ * Return:	Success:	Non-negative with the link value in BUF.
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Gget_linkval(hid_t loc_id, const char *name, size_t size, char *buf/*out*/)
+{
+    H5G_entry_t	*loc = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Gget_linkval, FAIL);
+    H5TRACE4("e","iszx",loc_id,name,size,buf);
+
+    /* Check arguments */
+    if (NULL==(loc=H5G_loc (loc_id)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if (!name || !*name)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified");
+
+    /* Get the link value */
+    if (H5G_linkval (loc, name, size, buf, H5AC_ind_dxpl_id)<0)
+	HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to get link value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Gset_comment
+ *
+ * Purpose:     Gives the specified object a comment.  The COMMENT string
+ *		should be a null terminated string.  An object can have only
+ *		one comment at a time.  Passing NULL for the COMMENT argument
+ *		will remove the comment property from the object.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, July 20, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Gset_comment(hid_t loc_id, const char *name, const char *comment)
+{
+    H5G_entry_t	*loc = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Gset_comment, FAIL);
+    H5TRACE3("e","iss",loc_id,name,comment);
+
+    if (NULL==(loc=H5G_loc(loc_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if (!name || !*name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified");
+
+    if (H5G_set_comment(loc, name, comment, H5AC_dxpl_id)<0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to set comment value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Gget_comment
+ *
+ * Purpose:	Return at most BUFSIZE characters of the comment for the
+ *		specified object.  If BUFSIZE is large enough to hold the
+ *		entire comment then the comment string will be null
+ *		terminated, otherwise it will not.  If the object does not
+ *		have a comment value then no bytes are copied to the BUF
+ *		buffer.
+ *
+ * Return:	Success:	Number of characters in the comment counting
+ *				the null terminator.  The value returned may
+ *				be larger than the BUFSIZE argument.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, July 20, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Gget_comment(hid_t loc_id, const char *name, size_t bufsize, char *buf)
+{
+    H5G_entry_t	*loc = NULL;
+    int	ret_value;
+
+    FUNC_ENTER_API(H5Gget_comment, FAIL);
+    H5TRACE4("Is","iszs",loc_id,name,bufsize,buf);
+
+    if (NULL==(loc=H5G_loc(loc_id)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if (!name || !*name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified");
+    if (bufsize>0 && !buf)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no buffer specified");
+
+    if ((ret_value=H5G_get_comment(loc, name, bufsize, buf, H5AC_ind_dxpl_id))<0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to get comment value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+/*
+ *-------------------------------------------------------------------------
+ *-------------------------------------------------------------------------
+ *   N O   A P I   F U N C T I O N S   B E Y O N D   T H I S   P O I N T
+ *-------------------------------------------------------------------------
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_init_interface
+ *
+ * Purpose:	Initializes the H5G interface.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, January	 5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_init_interface(void)
+{
+    herr_t          ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_init_interface);
+
+    /* Initialize the atom group for the group IDs */
+    if (H5I_init_group(H5I_GROUP, H5I_GROUPID_HASHSIZE, H5G_RESERVED_ATOMS,
+		       (H5I_free_t)H5G_close) < 0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to initialize interface");
+
+    /*
+     * Initialize the type info table.  Begin with the most general types and
+     * end with the most specific. For instance, any object that has a data
+     * type message is a datatype but only some of them are datasets.
+     */
+    H5G_register_type(H5G_TYPE,    H5T_isa,  "datatype");
+    H5G_register_type(H5G_GROUP,   H5G_isa,  "group");
+    H5G_register_type(H5G_DATASET, H5D_isa,  "dataset");
+    H5G_register_type(H5G_LINK,    H5G_link_isa,  "link");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_term_interface
+ *
+ * Purpose:	Terminates the H5G interface
+ *
+ * Return:	Success:	Positive if anything is done that might
+ *				affect other interfaces; zero otherwise.
+ *
+ * 		Failure:	Negative.
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, January	 5, 1998
+ *
+ * Modifications:
+ *              Robb Matzke, 2002-03-28
+ *              Free the global component buffer.
+ *-------------------------------------------------------------------------
+ */
+int
+H5G_term_interface(void)
+{
+    size_t	i;
+    int	n=0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_term_interface);
+
+    if (H5_interface_initialize_g) {
+	if ((n=H5I_nmembers(H5I_GROUP))) {
+	    H5I_clear_group(H5I_GROUP, FALSE);
+	} else {
+	    /* Empty the object type table */
+	    for (i=0; i<H5G_ntypes_g; i++)
+		H5MM_xfree(H5G_type_g[i].desc);
+	    H5G_ntypes_g = H5G_atypes_g = 0;
+	    H5G_type_g = H5MM_xfree(H5G_type_g);
+
+	    /* Destroy the group object id group */
+	    H5I_destroy_group(H5I_GROUP);
+
+            /* Free the global component buffer */
+            H5G_comp_g = H5MM_xfree(H5G_comp_g);
+            H5G_comp_alloc_g = 0;
+
+	    /* Mark closed */
+	    H5_interface_initialize_g = 0;
+	    n = 1; /*H5I*/
+	}
+    }
+
+    FUNC_LEAVE_NOAPI(n);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_register_type
+ *
+ * Purpose:	Register a new object type so H5G_get_type() can detect it.
+ *		One should always register a general type before a more
+ *		specific type.  For instance, any object that has a datatype
+ *		message is a datatype, but only some of those objects are
+ *		datasets.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, November  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_register_type(int type, htri_t(*isa)(H5G_entry_t*, hid_t), const char *_desc)
+{
+    char	*desc = NULL;
+    size_t	i;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_register_type);
+
+    assert(type>=0);
+    assert(isa);
+    assert(_desc);
+
+    /* Copy the description */
+    if (NULL==(desc=H5MM_strdup(_desc)))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for object type description");
+
+    /*
+     * If the type is already registered then just update its entry without
+     * moving it to the end
+     */
+    for (i=0; i<H5G_ntypes_g; i++) {
+	if (H5G_type_g[i].type==type) {
+	    H5G_type_g[i].isa = isa;
+	    H5MM_xfree(H5G_type_g[i].desc);
+	    H5G_type_g[i].desc = desc;
+            HGOTO_DONE(SUCCEED);
+	}
+    }
+
+    /* Increase table size */
+    if (H5G_ntypes_g>=H5G_atypes_g) {
+	size_t n = MAX(32, 2*H5G_atypes_g);
+	H5G_typeinfo_t *x = H5MM_realloc(H5G_type_g,
+					 n*sizeof(H5G_typeinfo_t));
+	if (!x)
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for objec type table");
+	H5G_atypes_g = n;
+	H5G_type_g = x;
+    }
+
+    /* Add a new entry */
+    H5G_type_g[H5G_ntypes_g].type = type;
+    H5G_type_g[H5G_ntypes_g].isa = isa;
+    H5G_type_g[H5G_ntypes_g].desc = desc; /*already copied*/
+    H5G_ntypes_g++;
+
+done:
+    if (ret_value<0)
+        H5MM_xfree(desc);
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_component
+ *
+ * Purpose:	Returns the pointer to the first component of the
+ *		specified name by skipping leading slashes.  Returns
+ *		the size in characters of the component through SIZE_P not
+ *		counting leading slashes or the null terminator.
+ *
+ * Errors:
+ *
+ * Return:	Success:	Ptr into NAME.
+ *
+ *		Failure:	Ptr to the null terminator of NAME.
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug 11 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static const char *
+H5G_component(const char *name, size_t *size_p)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_component);
+
+    assert(name);
+
+    while ('/' == *name)
+        name++;
+    if (size_p)
+        *size_p = HDstrcspn(name, "/");
+
+    FUNC_LEAVE_NOAPI(name);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_basename
+ *
+ * Purpose:	Returns a pointer to the last component of the specified
+ *		name. The length of the component is returned through SIZE_P.
+ *		The base name is followed by zero or more slashes and a null
+ *		terminator, but SIZE_P does not count the slashes or the null
+ *		terminator.
+ *
+ * Note:	The base name of the root directory is a single slash.
+ *
+ * Return:	Success:	Ptr to base name.
+ *
+ *		Failure:	Ptr to the null terminator.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, September 17, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static const char *
+H5G_basename(const char *name, size_t *size_p)
+{
+    size_t	i;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_basename);
+
+    /* Find the end of the base name */
+    i = HDstrlen(name);
+    while (i>0 && '/'==name[i-1])
+        --i;
+
+    /* Skip backward over base name */
+    while (i>0 && '/'!=name[i-1])
+        --i;
+
+    /* Watch out for root special case */
+    if ('/'==name[i] && size_p)
+        *size_p = 1;
+
+    FUNC_LEAVE_NOAPI(name+i);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_normalize
+ *
+ * Purpose:	Returns a pointer to a new string which has duplicate and
+ *              trailing slashes removed from it.
+ *
+ * Return:	Success:	Ptr to normalized name.
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, August 16, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static char *
+H5G_normalize(const char *name)
+{
+    char *norm;         /* Pointer to the normalized string */
+    size_t	s,d;    /* Positions within the strings */
+    unsigned    last_slash;     /* Flag to indicate last character was a slash */
+    char *ret_value;    /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_normalize);
+
+    /* Sanity check */
+    assert(name);
+
+    /* Duplicate the name, to return */
+    if (NULL==(norm=H5MM_strdup(name)))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for normalized string");
+
+    /* Walk through the characters, omitting duplicated '/'s */
+    s=d=0;
+    last_slash=0;
+    while(name[s]!='\0') {
+        if(name[s]=='/')
+            if(last_slash)
+                ;
+            else {
+                norm[d++]=name[s];
+                last_slash=1;
+            } /* end else */
+        else {
+            norm[d++]=name[s];
+            last_slash=0;
+        } /* end else */
+        s++;
+    } /* end while */
+
+    /* Terminate normalized string */
+    norm[d]='\0';
+
+    /* Check for final '/' on normalized name & eliminate it */
+    if(d>1 && last_slash)
+        norm[d-1]='\0';
+
+    /* Set return value */
+    ret_value=norm;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5G_normalize() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_namei
+ *
+ * Purpose:	Translates a name to a symbol table entry.
+ *
+ *		If the specified name can be fully resolved, then this
+ *		function returns the symbol table entry for the named object
+ *		through the OBJ_ENT argument. The symbol table entry for the
+ *		group containing the named object is returned through the
+ *		GRP_ENT argument if it is non-null.  However, if the name
+ *		refers to the root object then the GRP_ENT will be
+ *		initialized with an undefined object header address.  The
+ *		REST argument, if present, will point to the null terminator
+ *		of NAME.
+ *
+ *		If the specified name cannot be fully resolved, then OBJ_ENT
+ *		is initialized with the undefined object header address. The
+ *		REST argument will point into the NAME argument to the start
+ *		of the component that could not be located.  The GRP_ENT will
+ *		contain the entry for the symbol table that was being
+ *		searched at the time of the failure and will have an
+ *		undefined object header address if the search failed at the
+ *		root object. For instance, if NAME is `/foo/bar/baz' and the
+ *		root directory exists and contains an entry for `foo', and
+ *		foo is a group that contains an entry for bar, but bar is not
+ *		a group, then the results will be that REST points to `baz',
+ *		OBJ_ENT has an undefined object header address, and GRP_ENT
+ *		is the symbol table entry for `bar' in `/foo'.
+ *
+ *		Every file has a root group whose name is `/'.  Components of
+ *		a name are separated from one another by one or more slashes
+ *		(/).  Slashes at the end of a name are ignored.  If the name
+ *		begins with a slash then the search begins at the root group
+ *		of the file containing LOC_ENT. Otherwise it begins at
+ *		LOC_ENT.  The component `.' is a no-op, but `..' is not
+ *		understood by this function (unless it appears as an entry in
+ *		the symbol table).
+ *
+ *		Symbolic links are followed automatically, but if TARGET
+ *		includes the H5G_TARGET_SLINK bit and the last component of
+ *		the name is a symbolic link then that link is not followed.
+ *		The *NLINKS value is decremented each time a link is followed
+ *		and link traversal fails if the value would become negative.
+ *		If NLINKS is the null pointer then a default value is used.
+ *
+ *		Mounted files are handled by calling H5F_mountpoint() after
+ *		each step of the translation.  If the input argument to that
+ *		function is a mount point then the argument shall be replaced
+ *		with information about the root group of the mounted file.
+ *		But if TARGET includes the H5G_TARGET_MOUNT bit and the last
+ *		component of the name is a mount point then H5F_mountpoint()
+ *		is not called and information about the mount point itself is
+ *		returned.
+ *
+ * Errors:
+ *
+ * Return:	Success:	Non-negative if name can be fully resolved.
+ *				See above for values of REST, GRP_ENT, and
+ *				OBJ_ENT.  NLINKS has been decremented for
+ *				each symbolic link that was followed.
+ *
+ *		Failure:	Negative if the name could not be fully
+ *				resolved. See above for values of REST,
+ *				GRP_ENT, and OBJ_ENT.
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug 11 1997
+ *
+ * Modifications:
+ *      Robb Matzke, 2002-03-28
+ *      The component name buffer on the stack has been replaced by
+ *      a dynamically allocated buffer on the heap in order to
+ *      remove limitations on the length of a name component.
+ *      There are two reasons that the buffer pointer is global:
+ *        (1) We want to be able to reuse the buffer without
+ *            allocating and freeing it each time this function is
+ *            called.
+ *        (2) We need to be able to free it from H5G_term_interface()
+ *            when the library terminates.
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *      Modified to deep copies of symbol table entries
+ *      Added `id to name' support.
+ *
+ *      Quincey Koziol, 2003-01-06
+ *      Added "action" and "ent" parameters to allow different actions when
+ *      working on the last component of a name.  (Specifically, this allows
+ *      inserting an entry into a group, instead of trying to look it up)
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_namei(const H5G_entry_t *loc_ent, const char *name, const char **rest/*out*/,
+	  H5G_entry_t *grp_ent/*out*/, H5G_entry_t *obj_ent/*out*/,
+	  unsigned target, int *nlinks/*out*/, H5G_namei_act_t action,
+          H5G_entry_t *ent, hid_t dxpl_id)
+{
+    H5G_entry_t		  _grp_ent;     /*entry for current group	*/
+    H5G_entry_t		  _obj_ent;     /*entry found			*/
+    size_t		  nchars;	/*component name length		*/
+    int			  _nlinks = H5G_NLINKS;
+    const char		   *s = NULL;
+    unsigned null_obj;          /* Flag to indicate this function was called with obj_ent set to NULL */
+    unsigned null_grp;          /* Flag to indicate this function was called with grp_ent set to NULL */
+    unsigned obj_copy = 0;      /* Flag to indicate that the object entry is copied */
+    unsigned group_copy = 0;    /* Flag to indicate that the group entry is copied */
+    unsigned last_comp = 0;     /* Flag to indicate that a component is the last component in the name */
+    unsigned did_insert = 0;    /* Flag to indicate that H5G_stab_insert was called */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_namei);
+
+    /* Set up "out" parameters */
+    if (rest)
+        *rest = name;
+    if (!grp_ent) {
+        grp_ent = &_grp_ent;
+        null_grp = 1;
+    } /* end if */
+    else
+        null_grp = 0;
+    if (!obj_ent) {
+        obj_ent = &_obj_ent;
+        null_obj = 1;
+    } /* end if */
+    else
+        null_obj = 0;
+    if (!nlinks)
+        nlinks = &_nlinks;
+
+    /* Check args */
+    if (!name || !*name)
+        HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "no name given");
+    if (!loc_ent)
+        HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "no current working group");
+
+    /*
+     * Where does the searching start?  For absolute names it starts at the
+     * root of the file; for relative names it starts at CWG.
+     */
+    /* Check if we need to get the root group's entry */
+    if ('/' == *name) {
+        H5G_t *tmp_grp;         /* Temporary pointer to root group of file */
+
+        tmp_grp=H5G_rootof(loc_ent->file);
+        assert(tmp_grp);
+
+        /* Set the location entry to the root group's entry*/
+        loc_ent=&(tmp_grp->ent);
+    } /* end if */
+
+    /* Deep copy of the symbol table entry (duplicates strings) */
+    if (H5G_ent_copy(obj_ent, loc_ent,H5G_COPY_DEEP)<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTOPENOBJ, FAIL, "unable to copy entry");
+    obj_copy = 1;
+
+    H5G_ent_reset(grp_ent);
+
+    /* traverse the name */
+    while ((name = H5G_component(name, &nchars)) && *name) {
+        /* Update the "rest of name" pointer */
+	if (rest)
+            *rest = name;
+
+	/*
+	 * Copy the component name into a null-terminated buffer so
+	 * we can pass it down to the other symbol table functions.
+	 */
+        if (nchars+1 > H5G_comp_alloc_g) {
+            H5G_comp_alloc_g = MAX3(1024, 2*H5G_comp_alloc_g, nchars+1);
+            H5G_comp_g = H5MM_realloc(H5G_comp_g, H5G_comp_alloc_g);
+            if (!H5G_comp_g) {
+                H5G_comp_alloc_g = 0;
+                HGOTO_ERROR(H5E_SYM, H5E_NOSPACE, FAIL, "unable to allocate component buffer");
+            }
+        }
+	HDmemcpy(H5G_comp_g, name, nchars);
+	H5G_comp_g[nchars] = '\0';
+
+	/*
+	 * The special name `.' is a no-op.
+	 */
+	if ('.' == H5G_comp_g[0] && !H5G_comp_g[1]) {
+	    name += nchars;
+	    continue;
+	}
+
+	/*
+	 * Advance to the next component of the name.
+	 */
+        /* If we've already copied a new entry into the group entry,
+         * it needs to be freed before overwriting it with another entry
+         */
+	if(group_copy)
+            H5G_free_ent_name(grp_ent);
+
+        /* Transfer "ownership" of the entry's information to the group entry */
+        H5G_ent_copy(grp_ent,obj_ent,H5G_COPY_SHALLOW);
+        H5G_ent_reset(obj_ent);
+
+	/* Set flag that we've copied a new entry into the group entry */
+	group_copy =1;
+
+        /* Check if this is the last component of the name */
+        if(!((s=H5G_component(name+nchars, NULL)) && *s))
+            last_comp=1;
+
+        switch(action) {
+            case H5G_NAMEI_TRAVERSE:
+                if (H5G_stab_find(grp_ent, H5G_comp_g, obj_ent/*out*/, dxpl_id )<0) {
+                    /*
+                     * Component was not found in the current symbol table, possibly
+                     * because GRP_ENT isn't a symbol table.
+                     */
+                    HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "component not found");
+                }
+                break;
+
+            case H5G_NAMEI_INSERT:
+                if(!last_comp) {
+                    if (H5G_stab_find(grp_ent, H5G_comp_g, obj_ent/*out*/, dxpl_id )<0) {
+                        /*
+                         * Component was not found in the current symbol table, possibly
+                         * because GRP_ENT isn't a symbol table.
+                         */
+                        HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "component not found");
+                    }
+                } /* end if */
+                else {
+                    did_insert = 1;
+                    if (H5G_stab_insert(grp_ent, H5G_comp_g, ent, TRUE, dxpl_id) < 0)
+                        HGOTO_ERROR(H5E_SYM, H5E_CANTINSERT, FAIL, "unable to insert name");
+                    HGOTO_DONE(SUCCEED);
+                } /* end else */
+                break;
+        } /* end switch */
+
+	/*
+	 * If we found a symbolic link then we should follow it.  But if this
+	 * is the last component of the name and the H5G_TARGET_SLINK bit of
+	 * TARGET is set then we don't follow it.
+	 */
+	if(H5G_CACHED_SLINK==obj_ent->type &&
+                (0==(target & H5G_TARGET_SLINK) || !last_comp)) {
+	    if ((*nlinks)-- <= 0)
+		HGOTO_ERROR (H5E_SYM, H5E_SLINK, FAIL, "too many links");
+	    if (H5G_traverse_slink (grp_ent, obj_ent, nlinks, dxpl_id)<0)
+		HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "symbolic link traversal failed");
+	}
+
+	/*
+	 * Resolve mount points to the mounted group.  Do not do this step if
+	 * the H5G_TARGET_MOUNT bit of TARGET is set and this is the last
+	 * component of the name.
+	 */
+	if (0==(target & H5G_TARGET_MOUNT) || !last_comp)
+	    H5F_mountpoint(obj_ent/*in,out*/);
+
+	/* next component */
+	name += nchars;
+    } /* end while */
+
+    /* Update the "rest of name" pointer */
+    if (rest)
+        *rest = name; /*final null */
+
+    /* If this was an insert, make sure that the insert function was actually
+     * called (this catches no-op names like "." and "/") */
+     if(action == H5G_NAMEI_INSERT && !did_insert)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "group already exists");
+
+done:
+    /* If we started with a NULL obj_ent, free the entry information */
+    if(null_obj || (ret_value < 0 && obj_copy))
+        H5G_free_ent_name(obj_ent);
+    /* If we started with a NULL grp_ent and we copied something into it, free the entry information */
+    if(null_grp && group_copy)
+        H5G_free_ent_name(grp_ent);
+
+   FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_traverse_slink
+ *
+ * Purpose:	Traverses symbolic link.  The link head appears in the group
+ *		whose entry is GRP_ENT and the link head entry is OBJ_ENT.
+ *
+ * Return:	Success:	Non-negative, OBJ_ENT will contain information
+ *				about the object to which the link points and
+ *				GRP_ENT will contain the information about
+ *				the group in which the link tail appears.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, April 10, 1998
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_traverse_slink (H5G_entry_t *grp_ent/*in,out*/,
+		    H5G_entry_t *obj_ent/*in,out*/,
+		    int *nlinks/*in,out*/, hid_t dxpl_id)
+{
+    H5O_stab_t		stab_mesg;		/*info about local heap	*/
+    const char		*clv = NULL;		/*cached link value	*/
+    char		*linkval = NULL;	/*the copied link value	*/
+    H5G_entry_t         tmp_grp_ent;            /* Temporary copy of group entry */
+    H5RS_str_t          *tmp_user_path_r=NULL, *tmp_canon_path_r=NULL; /* Temporary pointer to object's user path & canonical path */
+    const H5HL_t        *heap;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_traverse_slink);
+
+    /* Portably initialize the temporary group entry */
+    H5G_ent_reset(&tmp_grp_ent);
+
+    /* Get the link value */
+    if (NULL==H5O_read (grp_ent, H5O_STAB_ID, 0, &stab_mesg, dxpl_id))
+	HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to determine local heap address");
+
+    if (NULL == (heap = H5HL_protect(grp_ent->file, dxpl_id, stab_mesg.heap_addr)))
+	HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to read protect link value")
+
+    clv = H5HL_offset_into(grp_ent->file, heap, obj_ent->cache.slink.lval_offset);
+
+    linkval = H5MM_xstrdup (clv);
+    assert(linkval);
+
+    if (H5HL_unprotect(grp_ent->file, dxpl_id, heap, stab_mesg.heap_addr) < 0)
+	HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to read unprotect link value")
+
+    /* Hold the entry's name (& old_name) to restore later */
+    tmp_user_path_r=obj_ent->user_path_r;
+    obj_ent->user_path_r=NULL;
+    tmp_canon_path_r=obj_ent->canon_path_r;
+    obj_ent->canon_path_r=NULL;
+
+    /* Free the names for the group entry */
+    H5G_free_ent_name(grp_ent);
+
+    /* Clone the group entry, so we can track the names properly */
+    H5G_ent_copy(&tmp_grp_ent,grp_ent,H5G_COPY_DEEP);
+
+    /* Traverse the link */
+    if (H5G_namei (&tmp_grp_ent, linkval, NULL, grp_ent, obj_ent, H5G_TARGET_NORMAL, nlinks, H5G_NAMEI_TRAVERSE, NULL, dxpl_id))
+	HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to follow symbolic link");
+
+    /* Free the entry's names, we will use the original name for the object */
+    H5G_free_ent_name(obj_ent);
+
+    /* Restore previous name for object */
+    obj_ent->user_path_r = tmp_user_path_r;
+    tmp_user_path_r=NULL;
+    obj_ent->canon_path_r = tmp_canon_path_r;
+    tmp_canon_path_r=NULL;
+
+done:
+    /* Error cleanup */
+    if(tmp_user_path_r)
+        H5RS_decr(tmp_user_path_r);
+    if(tmp_canon_path_r)
+        H5RS_decr(tmp_canon_path_r);
+
+    /* Release cloned copy of group entry */
+    H5G_free_ent_name(&tmp_grp_ent);
+
+    H5MM_xfree (linkval);
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_mkroot
+ *
+ * Purpose:	Creates a root group in an empty file and opens it.  If a
+ *		root group is already open then this function immediately
+ *		returns.   If ENT is non-null then it's the symbol table
+ *		entry for an existing group which will be opened as the root
+ *		group.  Otherwise a new root group is created and then
+ *		opened.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug 11 1997
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_mkroot (H5F_t *f, hid_t dxpl_id, H5G_entry_t *ent)
+{
+    H5G_entry_t	new_root;		/*new root object		*/
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_mkroot, FAIL);
+
+    /* check args */
+    assert(f);
+    if (f->shared->root_grp)
+        HGOTO_DONE(SUCCEED);
+
+    /* Create information needed for group nodes */
+    if(H5G_node_init(f)<0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to create group node info")
+
+    /*
+     * If there is no root object then create one. The root group always starts
+     * with a hard link count of one since it's pointed to by the boot block.
+     */
+    if (!ent) {
+	ent = &new_root;
+        H5G_ent_reset(ent);
+	if (H5G_stab_create (f, dxpl_id, (size_t)H5G_SIZE_HINT, ent/*out*/)<0)
+	    HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to create root group");
+	if (1 != H5O_link (ent, 1, dxpl_id))
+	    HGOTO_ERROR (H5E_SYM, H5E_LINK, FAIL, "internal error (wrong link count)");
+    } else {
+	/*
+	 * Open the root object as a group.
+	 */
+	if (H5O_open (ent)<0)
+	    HGOTO_ERROR (H5E_SYM, H5E_CANTOPENOBJ, FAIL, "unable to open root group");
+    }
+
+    /* Create the path names for the root group's entry */
+    ent->user_path_r=H5RS_create("/");
+    assert(ent->user_path_r);
+    ent->canon_path_r=H5RS_create("/");
+    assert(ent->canon_path_r);
+    ent->user_path_hidden=0;
+
+    /*
+     * Create the group pointer.  Also decrement the open object count so we
+     * don't count the root group as an open object.  The root group will
+     * never be closed.
+     */
+    if (NULL==(f->shared->root_grp = H5FL_CALLOC (H5G_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+    if (NULL==(f->shared->root_grp->shared = H5FL_CALLOC (H5G_shared_t))) {
+        H5FL_FREE(H5G_t, f->shared->root_grp);
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+    }
+    /* Shallow copy (take ownership) of the group entry object */
+    if(H5G_ent_copy(&(f->shared->root_grp->ent), ent, H5G_COPY_SHALLOW)<0)
+        HGOTO_ERROR (H5E_SYM, H5E_CANTCOPY, FAIL, "can't copy group entry")
+
+    f->shared->root_grp->shared->fo_count = 1;
+    assert (1==f->nopen_objs);
+    f->nopen_objs = 0;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_create
+ *
+ * Purpose:	Creates a new empty group with the specified name. The name
+ *		is either an absolute name or is relative to LOC.
+ *
+ * Errors:
+ *
+ * Return:	Success:	A handle for the group.	 The group is opened
+ *				and should eventually be close by calling
+ *				H5G_close().
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug 11 1997
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 18 Sep 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5G_t *
+H5G_create(H5G_entry_t *loc, const char *name, size_t size_hint, hid_t dxpl_id)
+{
+    H5G_t	*grp = NULL;	/*new group			*/
+    H5F_t       *file = NULL;   /* File new group will be in    */
+    unsigned    stab_init=0;    /* Flag to indicate that the symbol table was created successfully */
+    H5G_t	*ret_value;	/* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_create);
+
+    /* check args */
+    assert(loc);
+    assert(name && *name);
+
+    /* create an open group */
+    if (NULL==(grp = H5FL_CALLOC(H5G_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    if (NULL==(grp->shared = H5FL_CALLOC(H5G_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* What file is the group being added to? */
+    if (NULL==(file=H5G_insertion_file(loc, name, dxpl_id)))
+        HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, NULL, "unable to locate insertion point");
+
+    /* Create the group entry */
+    if (H5G_stab_create(file, dxpl_id, size_hint, &(grp->ent)/*out*/) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, NULL, "can't create grp");
+    stab_init=1;    /* Indicate that the symbol table information is valid */
+
+    /* insert child name into parent */
+    if(H5G_insert(loc,name,&(grp->ent), dxpl_id)<0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTINSERT, NULL, "can't insert group");
+
+    /* Add group to list of open objects in file */
+    if(H5FO_top_incr(grp->ent.file, grp->ent.header)<0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTINC, NULL, "can't incr object ref. count")
+    if(H5FO_insert(grp->ent.file, grp->ent.header, grp->shared)<0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTINSERT, NULL, "can't insert group into list of open objects")
+
+    grp->shared->fo_count = 1;
+
+    /* Set return value */
+    ret_value=grp;
+
+done:
+    if(ret_value==NULL) {
+        /* Check if we need to release the file-oriented symbol table info */
+        if(stab_init) {
+            if(H5O_close(&(grp->ent))<0)
+                HDONE_ERROR(H5E_SYM, H5E_CLOSEERROR, NULL, "unable to release object header");
+            if(H5O_delete(file, dxpl_id,grp->ent.header)<0)
+                HDONE_ERROR(H5E_SYM, H5E_CANTDELETE, NULL, "unable to delete object header");
+        } /* end if */
+        if(grp!=NULL) {
+            if(grp->shared != NULL)
+                H5FL_FREE(H5G_shared_t, grp->shared);
+            H5FL_FREE(H5G_t,grp);
+        }
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_isa
+ *
+ * Purpose:	Determines if an object has the requisite messages for being
+ *		a group.
+ *
+ * Return:	Success:	TRUE if the required group messages are
+ *				present; FALSE otherwise.
+ *
+ *		Failure:	FAIL if the existence of certain messages
+ *				cannot be determined.
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November  2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static htri_t
+H5G_isa(H5G_entry_t *ent, hid_t dxpl_id)
+{
+    htri_t	ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_isa);
+
+    assert(ent);
+
+    if ((ret_value=H5O_exists(ent, H5O_STAB_ID, 0, dxpl_id))<0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to read object header");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_link_isa
+ *
+ * Purpose:	Determines if an object has the requisite form for being
+ *		a soft link.
+ *
+ * Return:	Success:	TRUE if the symbol table entry is of type
+ *				H5G_LINK; FALSE otherwise.
+ *
+ *		Failure:	Shouldn't fail.
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, June 23, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static htri_t
+H5G_link_isa(H5G_entry_t *ent, hid_t UNUSED dxpl_id)
+{
+    htri_t	ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_link_isa);
+
+    assert(ent);
+
+    if(ent->type == H5G_CACHED_SLINK)
+        ret_value=TRUE;
+    else
+        ret_value=FALSE;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5G_link_isa() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_open
+ *
+ * Purpose:	Opens an existing group.  The group should eventually be
+ *		closed by calling H5G_close().
+ *
+ * Return:	Success:	Ptr to a new group.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, January	 5, 1998
+ *
+ * Modifications:
+ *      Modified to call H5G_open_oid - QAK - 3/17/99
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 18 Sep 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+H5G_t *
+H5G_open(H5G_entry_t *ent, hid_t dxpl_id)
+{
+    H5G_t           *grp = NULL;
+    H5G_shared_t    *shared_fo=NULL;
+    H5G_t           *ret_value=NULL;
+
+    FUNC_ENTER_NOAPI(H5G_open, NULL);
+
+    /* Check args */
+    assert(ent);
+
+    /* Check if group was already open */
+    if((shared_fo=H5FO_opened(ent->file, ent->header))==NULL) {
+
+        /* Clear any errors from H5FO_opened() */
+        H5E_clear();
+
+        /* Open the group object */
+        if ((grp=H5G_open_oid(ent, dxpl_id)) ==NULL)
+            HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, NULL, "not found");
+
+        /* Add group to list of open objects in file */
+        if(H5FO_insert(grp->ent.file, grp->ent.header, grp->shared)<0)
+        {
+            H5FL_FREE(H5G_shared_t, grp->shared);
+            HGOTO_ERROR(H5E_SYM, H5E_CANTINSERT, NULL, "can't insert group into list of open objects")
+        }
+
+        /* Increment object count for the object in the top file */
+        if(H5FO_top_incr(grp->ent.file, grp->ent.header) < 0)
+            HGOTO_ERROR(H5E_SYM, H5E_CANTINC, NULL, "can't increment object count")
+
+        /* Set open object count */
+        grp->shared->fo_count = 1;
+    }
+    else {
+        if(NULL == (grp = H5FL_CALLOC(H5G_t)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate space for group")
+
+        /* Shallow copy (take ownership) of the group entry object */
+        if(H5G_ent_copy(&(grp->ent), ent, H5G_COPY_SHALLOW)<0)
+            HGOTO_ERROR(H5E_SYM, H5E_CANTCOPY, NULL, "can't copy group entry")
+
+        /* Point to shared group info */
+        grp->shared = shared_fo;
+
+        /* Increment shared reference count */
+        shared_fo->fo_count++;
+
+        /* Check if the object has been opened through the top file yet */
+        if(H5FO_top_count(grp->ent.file, grp->ent.header) == 0) {
+            /* Open the object through this top file */
+            if(H5O_open(&(grp->ent)) < 0)
+                HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, NULL, "unable to open object header")
+        } /* end if */
+
+        /* Increment object count for the object in the top file */
+        if(H5FO_top_incr(grp->ent.file, grp->ent.header) < 0)
+            HGOTO_ERROR(H5E_SYM, H5E_CANTINC, NULL, "can't increment object count")
+    }
+
+    /* Set return value */
+    ret_value = grp;
+
+done:
+    if (!ret_value && grp)
+        H5FL_FREE(H5G_t,grp);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_open_oid
+ *
+ * Purpose:	Opens an existing group.  The group should eventually be
+ *		closed by calling H5G_close().
+ *
+ * Return:	Success:	Ptr to a new group.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *	    Wednesday, March	17, 1999
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *      Added a deep copy of the symbol table entry
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5G_t *
+H5G_open_oid(H5G_entry_t *ent, hid_t dxpl_id)
+{
+    H5G_t		*grp = NULL;
+    H5G_t		*ret_value = NULL;
+    hbool_t             ent_opened = FALSE;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_open_oid);
+
+    /* Check args */
+    assert(ent);
+
+    /* Open the object, making sure it's a group */
+    if (NULL==(grp = H5FL_CALLOC(H5G_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    if (NULL==(grp->shared = H5FL_CALLOC(H5G_shared_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* Copy over (take ownership) of the group entry object */
+    H5G_ent_copy(&(grp->ent),ent,H5G_COPY_SHALLOW);
+
+    /* Grab the object header */
+    if (H5O_open(&(grp->ent)) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, NULL, "unable to open group")
+    ent_opened = TRUE;
+
+    /* Check if this object has the right message(s) to be treated as a group */
+    if(H5O_exists(&(grp->ent), H5O_STAB_ID, 0, dxpl_id) <= 0)
+        HGOTO_ERROR (H5E_SYM, H5E_CANTOPENOBJ, NULL, "not a group")
+
+    /* Set return value */
+    ret_value = grp;
+
+done:
+    if(!ret_value) {
+        if(grp) {
+            if(ent_opened)
+                H5O_close(&(grp->ent));
+            if(grp->shared)
+                H5FL_FREE(H5G_shared_t, grp->shared);
+            H5FL_FREE(H5G_t,grp);
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_close
+ *
+ * Purpose:	Closes the specified group.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, January	 5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_close(H5G_t *grp)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_close, FAIL);
+
+    /* Check args */
+    assert(grp && grp->shared);
+    assert(grp->shared->fo_count > 0);
+
+    --grp->shared->fo_count;
+
+    if (0 == grp->shared->fo_count) {
+        assert (grp!=H5G_rootof(H5G_fileof(grp)));
+
+        /* Remove the group from the list of opened objects in the file */
+        if(H5FO_top_decr(grp->ent.file, grp->ent.header) < 0)
+            HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "can't decrement count for object")
+        if(H5FO_delete(grp->ent.file, H5AC_dxpl_id, grp->ent.header)<0)
+            HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "can't remove group from list of open objects")
+        if(H5O_close(&(grp->ent)) < 0)
+            HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to close")
+        H5FL_FREE (H5G_shared_t, grp->shared);
+    } else {
+        /* Decrement the ref. count for this object in the top file */
+        if(H5FO_top_decr(grp->ent.file, grp->ent.header) < 0)
+            HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "can't decrement count for object")
+
+        /* Check reference count for this object in the top file */
+        if(H5FO_top_count(grp->ent.file, grp->ent.header) == 0)
+            if(H5O_close(&(grp->ent)) < 0)
+                HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to close")
+
+        /* If this group is a mount point and the mount point is the last open
+         * reference to the group, then attempt to close down the file hierarchy
+         */
+        if(grp->shared->mounted && grp->shared->fo_count == 1) {
+            /* Attempt to close down the file hierarchy */
+            if(H5F_try_close(grp->ent.file) < 0)
+                HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "problem attempting file close")
+        } /* end if */
+
+        if(H5G_free_ent_name(&(grp->ent))<0)
+        {
+            H5FL_FREE (H5G_t,grp);
+            HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't free group entry name");
+        }
+    }
+
+    H5FL_FREE (H5G_t,grp);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5G_close() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5G_free
+ *
+ * Purpose:	Free memory used by an H5G_t struct (and its H5G_shared_t).
+ *          Does not close the group or decrement the reference count.
+ *          Used to free memory used by the root group.
+ *
+ * Return:  Success:    Non-negative
+ *	        Failure:    Negative
+ *
+ * Programmer:  James Laird
+ *              Tuesday, September 7, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_free(H5G_t *grp)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_free, FAIL);
+
+    assert(grp && grp->shared);
+
+    H5FL_FREE(H5G_shared_t, grp->shared);
+    H5FL_FREE(H5G_t, grp);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_rootof
+ *
+ * Purpose:	Return a pointer to the root group of the file.  If the file
+ *		is part of a virtual file then the root group of the virtual
+ *		file is returned.
+ *
+ * Return:	Success:	Ptr to the root group of the file.  Do not
+ *				free the pointer -- it points directly into
+ *				the file struct.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, October 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5G_t *
+H5G_rootof(H5F_t *f)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_rootof);
+
+    while (f->mtab.parent)
+        f = f->mtab.parent;
+
+    FUNC_LEAVE_NOAPI(f->shared->root_grp);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_insert
+ *
+ * Purpose:	Inserts a symbol table entry into the group graph.
+ *
+ * Errors:
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, September 19, 1997
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 18 Sep 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_insert(H5G_entry_t *loc, const char *name, H5G_entry_t *ent, hid_t dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_insert, FAIL);
+
+    /* Check args. */
+    assert (loc);
+    assert (name && *name);
+    assert (ent);
+
+    /*
+     * Lookup and insert the name -- it shouldn't exist yet.
+     */
+    if (H5G_namei(loc, name, NULL, NULL, NULL, H5G_TARGET_NORMAL, NULL, H5G_NAMEI_INSERT, ent, dxpl_id)<0)
+	HGOTO_ERROR(H5E_SYM, H5E_EXISTS, FAIL, "already exists");
+
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_find
+ *
+ * Purpose:	Finds an object with the specified NAME at location LOC.  On
+ *		successful return, GRP_ENT (if non-null) will be initialized
+ *		with the symbol table information for the group in which the
+ *		object appears (it will have an undefined object header
+ *		address if the object is the root object) and OBJ_ENT will be
+ *		initialized with the symbol table entry for the object
+ *		(OBJ_ENT is optional when the caller is interested only in
+ * 		the existence of the object).
+ *
+ * Errors:
+ *
+ * Return:	Success:	Non-negative, see above for values of GRP_ENT
+ *				and OBJ_ENT.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug 12 1997
+ *
+ * Modifications:
+ *              Removed the "H5G_entry_t *grp_ent" parameter, since it was unused
+ *              Quincey Koziol
+ *		Aug 29 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_find(H5G_entry_t *loc, const char *name,
+         H5G_entry_t *obj_ent/*out*/, hid_t dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_find, FAIL);
+
+    /* check args */
+    assert (loc);
+    assert (name && *name);
+
+    if (H5G_namei(loc, name, NULL, NULL, obj_ent, H5G_TARGET_NORMAL, NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)<0)
+	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_entof
+ *
+ * Purpose:	Returns a pointer to the entry for a group.
+ *
+ * Return:	Success:	Ptr to group entry
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, March 24, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5G_entry_t *
+H5G_entof (H5G_t *grp)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_entof);
+
+    FUNC_LEAVE_NOAPI(grp ? &(grp->ent) : NULL);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_fileof
+ *
+ * Purpose:	Returns the file to which the specified group belongs.
+ *
+ * Return:	Success:	File pointer.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, March 24, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5F_t *
+H5G_fileof (H5G_t *grp)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_fileof);
+
+    assert (grp);
+
+    FUNC_LEAVE_NOAPI(grp->ent.file);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_loc
+ *
+ * Purpose:	Given an object ID return a symbol table entry for the
+ *		object.
+ *
+ * Return:	Success:	Group pointer.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, March 24, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5G_entry_t *
+H5G_loc (hid_t loc_id)
+{
+    H5F_t	*f;
+    H5G_entry_t	*ret_value=NULL;
+    H5G_t	*group=NULL;
+    H5T_t	*dt=NULL;
+    H5D_t	*dset=NULL;
+    H5A_t	*attr=NULL;
+
+    FUNC_ENTER_NOAPI(H5G_loc, NULL);
+
+    switch (H5I_get_type(loc_id)) {
+        case H5I_FILE:
+            if (NULL==(f=H5I_object (loc_id)))
+                HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, NULL, "invalid file ID");
+            if (NULL==(ret_value=H5G_entof(H5G_rootof(f))))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "unable to get symbol table entry for root group");
+
+            /* Patch up root group's symbol table entry to reflect this file */
+            /* (Since the root group info is only stored once for files which
+             *  share an underlying low-level file)
+             */
+            /* (but only for non-mounted files) */
+            if(!f->mtab.parent)
+                ret_value->file = f;
+            break;
+
+        case H5I_GENPROP_CLS:
+        case H5I_GENPROP_LST:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "unable to get symbol table entry of property list");
+
+        case H5I_GROUP:
+            if (NULL==(group=H5I_object (loc_id)))
+                HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, NULL, "invalid group ID");
+            if (NULL==(ret_value=H5G_entof(group)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "unable to get symbol table entry of group");
+            break;
+
+        case H5I_DATATYPE:
+            if (NULL==(dt=H5I_object(loc_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid type ID");
+            if (NULL==(ret_value=H5T_entof(dt)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "unable to get symbol table entry of datatype");
+            break;
+
+        case H5I_DATASPACE:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "unable to get symbol table entry of dataspace");
+
+        case H5I_DATASET:
+            if (NULL==(dset=H5I_object(loc_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid data ID");
+            if (NULL==(ret_value=H5D_entof(dset)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "unable to get symbol table entry of dataset");
+            break;
+
+        case H5I_ATTR:
+            if (NULL==(attr=H5I_object(loc_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid attribute ID");
+            if (NULL==(ret_value=H5A_entof(attr)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "unable to get symbol table entry of attribute");
+            break;
+
+        case H5I_REFERENCE:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "unable to get symbol table entry of reference");
+
+        default:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid object ID");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_link
+ *
+ * Purpose:	Creates a link from NEW_NAME to CUR_NAME.  See H5Glink() for
+ *		full documentation.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April  6, 1998
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 18 Sep 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_link (H5G_entry_t *cur_loc, const char *cur_name, H5G_entry_t *new_loc,
+	  const char *new_name, H5G_link_t type, unsigned namei_flags, hid_t dxpl_id)
+{
+    H5G_entry_t		cur_obj;	/*entry for the link tail	*/
+    unsigned            cur_obj_init=0; /* Flag to indicate that the current object is initialized */
+    H5G_entry_t		grp_ent;	/*ent for grp containing link hd*/
+    H5O_stab_t		stab_mesg;	/*symbol table message		*/
+    const char		*rest = NULL;	/*last component of new name	*/
+    char		*norm_cur_name = NULL;	/* Pointer to normalized current name */
+    char		*norm_new_name = NULL;	/* Pointer to normalized current name */
+    size_t		nchars;		/*characters in component	*/
+    size_t		offset;		/*offset to sym-link value	*/
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_link);
+
+    /* Check args */
+    assert (cur_loc);
+    assert (new_loc);
+    assert (cur_name && *cur_name);
+    assert (new_name && *new_name);
+
+    /* Get normalized copies of the current and new names */
+    if((norm_cur_name=H5G_normalize(cur_name))==NULL)
+        HGOTO_ERROR (H5E_SYM, H5E_BADVALUE, FAIL, "can't normalize name");
+    if((norm_new_name=H5G_normalize(new_name))==NULL)
+        HGOTO_ERROR (H5E_SYM, H5E_BADVALUE, FAIL, "can't normalize name");
+
+    switch (type) {
+        case H5G_LINK_SOFT:
+            /*
+             * Lookup the the new_name so we can get the group which will contain
+             * the new entry.  The entry shouldn't exist yet.
+             */
+            if (H5G_namei(new_loc, norm_new_name, &rest, &grp_ent, NULL,
+                            H5G_TARGET_NORMAL, NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)>=0)
+                HGOTO_ERROR (H5E_SYM, H5E_EXISTS, FAIL, "already exists");
+            H5E_clear (); /*it's okay that we didn't find it*/
+            rest = H5G_component (rest, &nchars);
+
+            /*
+             * There should be one component left.  Make sure it's null
+             * terminated and that `rest' points to it.
+             */
+            assert(!rest[nchars]);
+
+            /*
+             * Add the link-value to the local heap for the symbol table which
+             * will contain the link.
+             */
+            if (NULL==H5O_read (&grp_ent, H5O_STAB_ID, 0, &stab_mesg, dxpl_id))
+                HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to determine local heap address");
+            if ((size_t)(-1)==(offset=H5HL_insert (grp_ent.file, dxpl_id,
+                   stab_mesg.heap_addr, HDstrlen(norm_cur_name)+1, norm_cur_name)))
+                HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to write link value to local heap");
+            H5O_reset (H5O_STAB_ID, &stab_mesg);
+
+            /*
+             * Create a symbol table entry for the link.  The object header is
+             * undefined and the cache contains the link-value offset.
+             */
+            H5G_ent_reset(&cur_obj);
+            cur_obj.file = grp_ent.file;
+            cur_obj.type = H5G_CACHED_SLINK;
+            cur_obj.cache.slink.lval_offset = offset;
+            cur_obj_init=1;     /* Indicate that the cur_obj struct is initialized */
+
+            /*
+             * Insert the link head in the symbol table.  This shouldn't ever
+             * fail because we've already checked that the link head doesn't
+             * exist and the file is writable (because the local heap is
+             * writable).  But if it does, the only side effect is that the local
+             * heap has some extra garbage in it.
+             *
+             * Note: We don't increment the link count of the destination object
+             */
+            if (H5G_stab_insert (&grp_ent, rest, &cur_obj, FALSE, dxpl_id)<0)
+                HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to create new name/link for object");
+            break;
+
+        case H5G_LINK_HARD:
+            if (H5G_namei(cur_loc, norm_cur_name, NULL, NULL, &cur_obj, namei_flags, NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)<0)
+                HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "source object not found");
+            cur_obj_init=1;     /* Indicate that the cur_obj struct is initialized */
+            if (H5G_insert (new_loc, norm_new_name, &cur_obj, dxpl_id)<0)
+                HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to create new name/link for object");
+            break;
+
+        default:
+            HGOTO_ERROR (H5E_SYM, H5E_BADVALUE, FAIL, "unrecognized link type");
+    }
+
+done:
+    /* Free the group's ID to name buffer, if creating a soft link */
+    if(type == H5G_LINK_SOFT)
+        H5G_free_ent_name(&grp_ent);
+
+    /* Free the ID to name buffer */
+    if(cur_obj_init)
+        H5G_free_ent_name(&cur_obj);
+
+    /* Free the normalized path names */
+    if(norm_cur_name)
+        H5MM_xfree(norm_cur_name);
+    if(norm_new_name)
+        H5MM_xfree(norm_new_name);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_get_type
+ *
+ * Purpose:	Returns the type of object pointed to by `ent'.
+ *
+ * Return:	Success:	An object type defined in H5Gpublic.h
+ *
+ *		Failure:	H5G_UNKNOWN
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, November  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5G_get_type(H5G_entry_t *ent, hid_t dxpl_id)
+{
+    htri_t	isa;
+    size_t	i;
+    int         ret_value=H5G_UNKNOWN;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_get_type, H5G_UNKNOWN);
+
+    for (i=H5G_ntypes_g; i>0; --i) {
+	if ((isa=(H5G_type_g[i-1].isa)(ent, dxpl_id))<0) {
+	    HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, H5G_UNKNOWN, "unable to determine object type");
+	} else if (isa) {
+	    HGOTO_DONE(H5G_type_g[i-1].type);
+	}
+    }
+
+    if (0==i)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, H5G_UNKNOWN, "unable to determine object type");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_get_objinfo
+ *
+ * Purpose:	Returns information about an object.
+ *
+ * Return:	Success:	Non-negative with info about the object
+ *				returned through STATBUF if it isn't the null
+ *				pointer.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April 13, 1998
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 18 Sep 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_get_objinfo (H5G_entry_t *loc, const char *name, hbool_t follow_link,
+		 H5G_stat_t *statbuf/*out*/, hid_t dxpl_id)
+{
+    H5G_entry_t		grp_ent, obj_ent;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_get_objinfo, FAIL);
+
+    assert (loc);
+    assert (name && *name);
+    if (statbuf) HDmemset (statbuf, 0, sizeof *statbuf);
+
+    /* Find the object's symbol table entry */
+    if (H5G_namei(loc, name, NULL, &grp_ent/*out*/, &obj_ent/*out*/,
+		   (unsigned)(follow_link?H5G_TARGET_NORMAL:H5G_TARGET_SLINK), NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)<0)
+	HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to stat object");
+
+    /*
+     * Initialize the stat buf.  Symbolic links aren't normal objects and
+     * therefore don't have much of the normal info.  However, the link value
+     * length is specific to symbolic links.
+     */
+    if (statbuf) {
+        /* Common code to retrieve the file's fileno */
+        if(H5F_get_fileno(obj_ent.file,statbuf->fileno)<0)
+            HGOTO_ERROR (H5E_FILE, H5E_BADVALUE, FAIL, "unable to read fileno");
+
+        /* Retrieve information specific to each type of entry */
+	if (H5G_CACHED_SLINK==obj_ent.type) {
+            H5O_stab_t	stab_mesg;      /* Symbol table message info */
+            const char	*s;             /* Pointer to link value */
+            const H5HL_t *heap;         /* Pointer to local heap for group */
+
+	    /* Named object is a symbolic link */
+	    if (NULL == H5O_read(&grp_ent, H5O_STAB_ID, 0, &stab_mesg, dxpl_id))
+		HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to read symbolic link value")
+
+            /* Lock the local heap */
+            if (NULL == (heap = H5HL_protect(grp_ent.file, dxpl_id, stab_mesg.heap_addr)))
+                HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to read protect link value")
+
+            s = H5HL_offset_into(grp_ent.file, heap, obj_ent.cache.slink.lval_offset);
+
+	    statbuf->linklen = HDstrlen(s) + 1; /*count the null terminator*/
+
+            /* Release the local heap */
+            if (H5HL_unprotect(grp_ent.file, dxpl_id, heap, stab_mesg.heap_addr) < 0)
+                HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to read unprotect link value")
+
+            /* Set object type */
+	    statbuf->type = H5G_LINK;
+	} else {
+	    /* Some other type of object */
+	    statbuf->objno[0] = (unsigned long)(obj_ent.header);
+#if H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG
+	    statbuf->objno[1] = (unsigned long)(obj_ent.header >>
+						8*sizeof(long));
+#else
+	    statbuf->objno[1] = 0;
+#endif
+	    statbuf->nlink = H5O_link (&obj_ent, 0, dxpl_id);
+	    if (NULL==H5O_read(&obj_ent, H5O_MTIME_ID, 0, &(statbuf->mtime), dxpl_id)) {
+		H5E_clear();
+                if (NULL==H5O_read(&obj_ent, H5O_MTIME_NEW_ID, 0, &(statbuf->mtime), dxpl_id)) {
+                    H5E_clear();
+                    statbuf->mtime = 0;
+                }
+	    }
+            /* Get object type */
+	    statbuf->type =
+#ifndef H5_WANT_H5_V1_4_COMPAT
+                (H5G_obj_t)
+#endif /*H5_WANT_H5_V1_4_COMPAT*/
+                H5G_get_type(&obj_ent, dxpl_id);
+	    H5E_clear(); /*clear errors resulting from checking type*/
+
+            /* Get object header information */
+            if(H5O_get_info(&obj_ent, &(statbuf->ohdr), dxpl_id)<0)
+                HGOTO_ERROR(H5E_SYM, H5E_CANTGET, FAIL, "unable to get object header information")
+	}
+    } /* end if */
+
+done:
+    /* Free the ID to name buffers */
+    H5G_free_ent_name(&grp_ent);
+    H5G_free_ent_name(&obj_ent);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_get_num_objs
+ *
+ * Purpose:     Private function for H5Gget_num_objs.  Returns the number
+ *              of objects in the group.  It iterates all B-tree leaves
+ *              and sum up total number of group members.
+ *
+ * Return:	Success:        Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Raymond Lu
+ *	        Nov 20, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_get_num_objs(H5G_entry_t *loc, hsize_t *num_objs, hid_t dxpl_id)
+{
+    H5O_stab_t		stab_mesg;		/*info about B-tree	*/
+    herr_t		ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_get_num_objs);
+
+    /* Sanity check */
+    assert(loc);
+    assert(num_objs);
+
+    /* Reset the number of objects in the group */
+    *num_objs = 0;
+
+    /* Get the B-tree info */
+    if (NULL==H5O_read (loc, H5O_STAB_ID, 0, &stab_mesg, dxpl_id))
+	HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to determine local heap address");
+
+    /* Iterate over the group members */
+    if ((ret_value = H5B_iterate (loc->file, dxpl_id, H5B_SNODE,
+              H5G_node_sumup, stab_mesg.btree_addr, num_objs))<0)
+        HERROR (H5E_SYM, H5E_CANTINIT, "iteration operator failed");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_get_objname_by_idx
+ *
+ * Purpose:     Private function for H5Gget_objname_by_idx.
+ *              Returns the name of objects in the group by giving index.
+ *
+ * Return:	Success:        Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Raymond Lu
+ *	        Nov 20, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static ssize_t
+H5G_get_objname_by_idx(H5G_entry_t *loc, hsize_t idx, char* name, size_t size, hid_t dxpl_id)
+{
+    H5O_stab_t		stab;		/*info about local heap	& B-tree */
+    H5G_bt_it_ud2_t	udata;          /* Iteration information */
+    ssize_t		ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_get_objname_by_idx);
+
+    /* Sanity check */
+    assert(loc);
+
+    /* Get the B-tree & local heap info */
+    if (NULL==H5O_read (loc, H5O_STAB_ID, 0, &stab, dxpl_id))
+	HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to determine local heap address");
+
+    /* Set iteration information */
+    udata.idx = idx;
+    udata.num_objs = 0;
+    udata.heap_addr = stab.heap_addr;
+    udata.name = NULL;
+
+    /* Iterate over the group members */
+    if ((ret_value = H5B_iterate (loc->file, dxpl_id, H5B_SNODE,
+              H5G_node_name, stab.btree_addr, &udata))<0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "iteration operator failed");
+
+    /* If we don't know the name now, we almost certainly went out of bounds */
+    if(udata.name==NULL)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "index out of bound");
+
+    /* Get the length of the name */
+    ret_value = (ssize_t)HDstrlen(udata.name);
+
+    /* Copy the name into the user's buffer, if given */
+    if(name) {
+        HDstrncpy(name, udata.name, MIN((size_t)(ret_value+1),size));
+        if((size_t)ret_value >= size)
+            name[size-1]='\0';
+    } /* end if */
+
+done:
+    /* Free the duplicated name */
+    if(udata.name!=NULL)
+        H5MM_xfree(udata.name);
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_get_objtype_by_idx
+ *
+ * Purpose:     Private function for H5Gget_objtype_by_idx.
+ *              Returns the type of objects in the group by giving index.
+ *
+ * Return:	Success:        H5G_GROUP(1), H5G_DATASET(2), H5G_TYPE(3)
+ *
+ *		Failure:	UNKNOWN
+ *
+ * Programmer:	Raymond Lu
+ *	        Nov 20, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5G_get_objtype_by_idx(H5G_entry_t *loc, hsize_t idx, hid_t dxpl_id)
+{
+    H5O_stab_t		stab_mesg;	/*info about local heap	& B-tree */
+    H5G_bt_it_ud3_t	udata;          /* User data for B-tree callback */
+    int	    ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_get_objtype_by_idx);
+
+    /* Sanity check */
+    assert(loc);
+
+    /* Get the B-tree & local heap info */
+    if (NULL==H5O_read (loc, H5O_STAB_ID, 0, &stab_mesg, dxpl_id))
+	HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to determine local heap address");
+
+    /* Set iteration information */
+    udata.idx = idx;
+    udata.num_objs = 0;
+    udata.type = H5G_UNKNOWN;
+
+    /* Iterate over the group members */
+    if (H5B_iterate (loc->file, dxpl_id, H5B_SNODE,
+              H5G_node_type, stab_mesg.btree_addr, &udata)<0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5G_UNKNOWN, "iteration operator failed");
+
+    /* If we don't know the type now, we almost certainly went out of bounds */
+    if(udata.type==H5G_UNKNOWN)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5G_UNKNOWN, "index out of bound");
+
+    ret_value = udata.type;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_linkval
+ *
+ * Purpose:	Returns the value of a symbolic link.
+ *
+ * Return:	Success:	Non-negative, with at most SIZE bytes of the
+ *				link value copied into the BUF buffer.  If the
+ *				link value is larger than SIZE characters
+ *				counting the null terminator then the BUF
+ *				result will not be null terminated.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April 13, 1998
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 18 Sep 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_linkval (H5G_entry_t *loc, const char *name, size_t size, char *buf/*out*/, hid_t dxpl_id)
+{
+    const char		*s = NULL;
+    H5G_entry_t		grp_ent, obj_ent;
+    H5O_stab_t		stab_mesg;
+    const H5HL_t        *heap;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_linkval);
+
+    /*
+     * Get the symbol table entry for the link head and the symbol table
+     * entry for the group in which the link head appears.
+     */
+    if (H5G_namei(loc, name, NULL, &grp_ent/*out*/, &obj_ent/*out*/,
+		   H5G_TARGET_SLINK, NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)<0)
+	HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "symbolic link was not found");
+    if (H5G_CACHED_SLINK!=obj_ent.type)
+	HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "object is not a symbolic link");
+
+    /*
+     * Get the address of the local heap for the link value and a pointer
+     * into that local heap.
+     */
+    if (NULL==H5O_read (&grp_ent, H5O_STAB_ID, 0, &stab_mesg, dxpl_id))
+	HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "unable to determine local heap address");
+
+    if (NULL == (heap = H5HL_protect(grp_ent.file, dxpl_id, stab_mesg.heap_addr)))
+        HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to read protect link value")
+
+    s = H5HL_offset_into(grp_ent.file, heap, obj_ent.cache.slink.lval_offset);
+
+    /* Copy to output buffer */
+    if (size>0 && buf)
+	HDstrncpy (buf, s, size);
+
+    if (H5HL_unprotect(grp_ent.file, dxpl_id, heap, stab_mesg.heap_addr) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to read unprotect link value")
+
+done:
+    /* Free the ID to name buffers */
+    H5G_free_ent_name(&grp_ent);
+    H5G_free_ent_name(&obj_ent);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_set_comment
+ *
+ * Purpose:	(Re)sets the comment for an object.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, July 20, 1998
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 18 Sep 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_set_comment(H5G_entry_t *loc, const char *name, const char *buf, hid_t dxpl_id)
+{
+    H5G_entry_t	obj_ent;
+    H5O_name_t	comment;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_set_comment);
+
+    /* Get the symbol table entry for the object */
+    if (H5G_find(loc, name, &obj_ent/*out*/, dxpl_id)<0)
+	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found");
+
+    /* Remove the previous comment message if any */
+    if (H5O_remove(&obj_ent, H5O_NAME_ID, 0, TRUE, dxpl_id)<0)
+        H5E_clear();
+
+    /* Add the new message */
+    if (buf && *buf) {
+	comment.s = H5MM_xstrdup(buf);
+	if (H5O_modify(&obj_ent, H5O_NAME_ID, H5O_NEW_MESG, 0, H5O_UPDATE_TIME, &comment, dxpl_id)<0)
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to set comment object header message");
+	H5O_reset(H5O_NAME_ID, &comment);
+    }
+
+done:
+    /* Free the ID to name buffer */
+    H5G_free_ent_name(&obj_ent);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_get_comment
+ *
+ * Purpose:	Get the comment value for an object.
+ *
+ * Return:	Success:	Number of bytes in the comment including the
+ *				null terminator.  Zero if the object has no
+ *				comment.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, July 20, 1998
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 18 Sep 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5G_get_comment(H5G_entry_t *loc, const char *name, size_t bufsize, char *buf, hid_t dxpl_id)
+{
+    H5O_name_t	comment;
+    H5G_entry_t	obj_ent;
+    int	ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_get_comment);
+
+    /* Get the symbol table entry for the object */
+    if (H5G_find(loc, name, &obj_ent/*out*/, dxpl_id)<0)
+	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found");
+
+    /* Get the message */
+    comment.s = NULL;
+    if (NULL==H5O_read(&obj_ent, H5O_NAME_ID, 0, &comment, dxpl_id)) {
+	if (buf && bufsize>0)
+            buf[0] = '\0';
+	ret_value = 0;
+    } else {
+        if(buf && bufsize)
+	   HDstrncpy(buf, comment.s, bufsize);
+	ret_value = (int)HDstrlen(comment.s);
+	H5O_reset(H5O_NAME_ID, &comment);
+    }
+
+done:
+    /* Free the ID to name buffer */
+    H5G_free_ent_name(&obj_ent);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_unlink
+ *
+ * Purpose:	Unlink a name from a group.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, September 17, 1998
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 18 Sep 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_unlink(H5G_entry_t *loc, const char *name, hid_t dxpl_id)
+{
+    H5G_entry_t		grp_ent, obj_ent;
+    const char		*base=NULL;
+    char		*norm_name = NULL;	/* Pointer to normalized name */
+    int                 obj_type;       /* Object type */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_unlink);
+
+    /* Sanity check */
+    assert(loc);
+    assert(name && *name);
+
+    /* Get normalized copy of the name */
+    if((norm_name=H5G_normalize(name))==NULL)
+        HGOTO_ERROR (H5E_SYM, H5E_BADVALUE, FAIL, "can't normalize name");
+
+    /* Reset the group entries to known values in a portable way */
+    H5G_ent_reset(&grp_ent);
+    H5G_ent_reset(&obj_ent);
+
+    /* Get the entry for the group that contains the object to be unlinked */
+    if (H5G_namei(loc, norm_name, NULL, &grp_ent, &obj_ent,
+		  H5G_TARGET_SLINK|H5G_TARGET_MOUNT, NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)<0)
+	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found");
+    if (!H5F_addr_defined(grp_ent.header))
+	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "no containing group specified");
+    if (NULL==(base=H5G_basename(norm_name, NULL)) || '/'==*base)
+	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "problems obtaining object base name");
+
+    /* Get object type before unlink */
+    if((obj_type = H5G_get_type(&obj_ent, dxpl_id)) < 0)
+	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "can't determine object type");
+
+    /* Remove the name from the symbol table */
+    if (H5G_stab_remove(&grp_ent, base, dxpl_id)<0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTDELETE, FAIL, "unable to unlink name from symbol table");
+
+    /* Search the open IDs and replace names for unlinked object */
+    if (H5G_replace_name(obj_type, &obj_ent, NULL, NULL, NULL, NULL, OP_UNLINK )<0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTDELETE, FAIL, "unable to replace name");
+
+done:
+    /* Free the ID to name buffers */
+    H5G_free_ent_name(&grp_ent);
+    H5G_free_ent_name(&obj_ent);
+
+    /* Free the normalized path name */
+    if(norm_name)
+        H5MM_xfree(norm_name);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_move
+ *
+ * Purpose:	Atomically rename an object.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, September 25, 1998
+ *
+ * Modifications:
+ *
+ *	Raymond Lu
+ *	Thursday, April 18, 2002
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_move(H5G_entry_t *src_loc, const char *src_name, H5G_entry_t *dst_loc,
+		const char *dst_name, hid_t dxpl_id)
+{
+    H5G_stat_t		sb;
+    char		*linkval=NULL;
+    size_t		lv_size=32;
+    H5G_entry_t         obj_ent;        /* Object entry for object being moved */
+    H5RS_str_t         *src_name_r;     /* Ref-counted version of src name */
+    H5RS_str_t         *dst_name_r;     /* Ref-counted version of dest name */
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_move);
+
+    /* Sanity check */
+    assert(src_loc);
+    assert(dst_loc);
+    assert(src_name && *src_name);
+    assert(dst_name && *dst_name);
+
+    if (H5G_get_objinfo(src_loc, src_name, FALSE, &sb, dxpl_id)<0)
+	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "object not found");
+    if (H5G_LINK==sb.type) {
+	/*
+	 * When renaming a symbolic link we rename the link but don't change
+	 * the value of the link.
+	 */
+	do {
+	    if (NULL==(linkval=H5MM_realloc(linkval, 2*lv_size)))
+		HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate space for symbolic link value");
+	    linkval[lv_size-1] = '\0';
+	    if (H5G_linkval(src_loc, src_name, lv_size, linkval, dxpl_id)<0)
+		HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to read symbolic link value");
+	} while (linkval[lv_size-1]);
+	if (H5G_link(src_loc, linkval, dst_loc, dst_name, H5G_LINK_SOFT,
+		     H5G_TARGET_NORMAL, dxpl_id)<0)
+	    HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to rename symbolic link");
+	H5MM_xfree(linkval);
+
+    } else {
+	/*
+	 * Rename the object.
+	 */
+	if (H5G_link(src_loc, src_name, dst_loc, dst_name, H5G_LINK_HARD,
+		     H5G_TARGET_MOUNT, dxpl_id)<0)
+	    HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to register new name for object");
+    }
+
+    /* Search the open ID list and replace names for the move operation
+     * This has to be done here because H5G_link and H5G_unlink have
+     * internal object entries, and do not modify the entries list
+    */
+    if (H5G_namei(src_loc, src_name, NULL, NULL, &obj_ent, H5G_TARGET_NORMAL|H5G_TARGET_SLINK, NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id))
+	HGOTO_ERROR (H5E_SYM, H5E_NOTFOUND, FAIL, "unable to follow symbolic link");
+    src_name_r=H5RS_wrap(src_name);
+    assert(src_name_r);
+    dst_name_r=H5RS_wrap(dst_name);
+    assert(dst_name_r);
+    if (H5G_replace_name(sb.type, &obj_ent, src_name_r, src_loc, dst_name_r, dst_loc, OP_MOVE )<0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to replace name ");
+    H5RS_decr(src_name_r);
+    H5RS_decr(dst_name_r);
+    H5G_free_ent_name(&obj_ent);
+
+    /* Remove the old name */
+    if (H5G_unlink(src_loc, src_name, dxpl_id)<0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to deregister old object name");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_insertion_file
+ *
+ * Purpose:	Given a location and name that specifies a not-yet-existing
+ *		object return the file into which the object is about to be
+ *		inserted.
+ *
+ * Return:	Success:	File pointer
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, October 14, 1998
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 18 Sep 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+H5F_t *
+H5G_insertion_file(H5G_entry_t *loc, const char *name, hid_t dxpl_id)
+{
+    H5F_t      *ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_insertion_file, NULL);
+
+    assert(loc);
+    assert(name && *name);
+
+    /* Check if the location the object will be inserted into is part of a
+     * file mounting chain (either a parent or a child) and perform a more
+     * rigorous determination of the location's file (which traverses into
+     * mounted files, etc.).
+     */
+    if(H5F_has_mount(loc->file) || H5F_is_mount(loc->file)) {
+        const char	*rest;
+        H5G_entry_t	grp_ent;
+        size_t	size;
+
+        /*
+         * Look up the name to get the containing group and to make sure the name
+         * doesn't already exist.
+         */
+        if (H5G_namei(loc, name, &rest, &grp_ent, NULL, H5G_TARGET_NORMAL, NULL, H5G_NAMEI_TRAVERSE, NULL, dxpl_id)>=0) {
+            H5G_free_ent_name(&grp_ent);
+            HGOTO_ERROR(H5E_SYM, H5E_EXISTS, NULL, "name already exists");
+        } /* end if */
+        H5E_clear();
+
+        /* Make sure only the last component wasn't resolved */
+        rest = H5G_component(rest, &size);
+        assert(*rest && size>0);
+        rest = H5G_component(rest+size, NULL);
+        if (*rest) {
+            H5G_free_ent_name(&grp_ent);
+            HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, NULL, "insertion point not found");
+        } /* end if */
+
+        /* Set return value */
+        ret_value=grp_ent.file;
+
+        /* Free the ID to name buffer */
+        H5G_free_ent_name(&grp_ent);
+    } /* end if */
+    else
+        /* Use the location's file */
+        ret_value=loc->file;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_free_grp_name
+ *
+ * Purpose:	Free the 'ID to name' buffers.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: August 22, 2002
+ *
+ * Comments: Used now only on the root group close, in H5F_close()
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_free_grp_name(H5G_t *grp)
+{
+    H5G_entry_t *ent;           /* Group object's entry */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_free_grp_name, FAIL);
+
+    /* Check args */
+    assert(grp && grp->shared);
+    assert(grp->shared->fo_count > 0);
+
+    /* Get the entry for the group */
+    if (NULL==( ent = H5G_entof(grp)))
+        HGOTO_ERROR (H5E_SYM, H5E_CANTINIT, FAIL, "cannot get entry");
+
+    /* Free the entry */
+    H5G_free_ent_name(ent);
+
+done:
+     FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_free_ent_name
+ *
+ * Purpose:	Free the 'ID to name' buffers.
+ *
+ * Return:	Success
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: August 22, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_free_ent_name(H5G_entry_t *ent)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_free_ent_name, FAIL);
+
+    /* Check args */
+    assert(ent);
+
+    if(ent->user_path_r) {
+        H5RS_decr(ent->user_path_r);
+        ent->user_path_r=NULL;
+    } /* end if */
+    if(ent->canon_path_r) {
+        H5RS_decr(ent->canon_path_r);
+        ent->canon_path_r=NULL;
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5G_replace_name
+ *
+ * Purpose: Search the list of open IDs and replace names according to a
+ *              particular operation.  The operation occured on the LOC
+ *              entry, which had SRC_NAME previously.  The new name (if there
+ *              is one) is DST_NAME.  Additional entry location information
+ *              (currently only needed for the 'move' operation) is passed
+ *              in SRC_LOC and DST_LOC.
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: June 11, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_replace_name(int type, H5G_entry_t *loc,
+    H5RS_str_t *src_name, H5G_entry_t *src_loc,
+    H5RS_str_t *dst_name, H5G_entry_t *dst_loc, H5G_names_op_t op )
+{
+    H5G_names_t names;          /* Structure to hold operation information for callback */
+    unsigned search_group=0;    /* Flag to indicate that groups are to be searched */
+    unsigned search_dataset=0;  /* Flag to indicate that datasets are to be searched */
+    unsigned search_datatype=0; /* Flag to indicate that datatypes are to be searched */
+    herr_t  ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5G_replace_name, FAIL);
+
+    /* Set up common information for callback */
+    names.src_name=src_name;
+    names.dst_name=dst_name;
+    names.loc=loc;
+    names.src_loc=src_loc;
+    names.dst_loc=dst_loc;
+    names.op=op;
+
+    /* Determine which types of IDs need to be operated on */
+    switch(type) {
+        /* Object is a group  */
+        case H5G_GROUP:
+            /* Search and replace names through group IDs */
+            search_group=1;
+            break;
+
+        /* Object is a dataset */
+        case H5G_DATASET:
+            /* Search and replace names through dataset IDs */
+            search_dataset=1;
+            break;
+
+        /* Object is a named datatype */
+        case H5G_TYPE:
+            /* Search and replace names through datatype IDs */
+            search_datatype=1;
+            break;
+
+        case H5G_UNKNOWN:   /* We pass H5G_UNKNOWN as object type when we need to search all IDs */
+        case H5G_LINK:      /* Symbolic links might resolve to any object, so we need to search all IDs */
+            /* Check if we will need to search groups */
+            if(H5I_nmembers(H5I_GROUP)>0)
+                search_group=1;
+
+            /* Check if we will need to search datasets */
+            if(H5I_nmembers(H5I_DATASET)>0)
+                search_dataset=1;
+
+            /* Check if we will need to search datatypes */
+            if(H5I_nmembers(H5I_DATATYPE)>0)
+                search_datatype=1;
+            break;
+
+        default:
+            HGOTO_ERROR (H5E_DATATYPE, H5E_BADTYPE, FAIL, "not valid object type");
+    } /* end switch */
+
+    /* Search through group IDs */
+    if(search_group)
+        H5I_search(H5I_GROUP, H5G_replace_ent, &names);
+
+    /* Search through dataset IDs */
+    if(search_dataset)
+        H5I_search(H5I_DATASET, H5G_replace_ent, &names);
+
+    /* Search through datatype IDs */
+    if(search_datatype)
+        H5I_search(H5I_DATATYPE, H5G_replace_ent, &names);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5G_common_path
+ *
+ * Purpose: Determine if one path is a valid prefix of another path
+ *
+ * Return: TRUE for valid prefix, FALSE for not a valid prefix, FAIL
+ *              on error
+ *
+ * Programmer: Quincey Koziol, koziol at ncsa.uiuc.edu
+ *
+ * Date: September 24, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static htri_t
+H5G_common_path(const H5RS_str_t *fullpath_r, const H5RS_str_t *prefix_r)
+{
+    const char *fullpath;       /* Pointer to actual fullpath string */
+    const char *prefix;         /* Pointer to actual prefix string */
+    size_t  nchars1,nchars2;    /* Number of characters in components */
+    htri_t ret_value=FALSE;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_common_path);
+
+    /* Get component of each name */
+    fullpath=H5RS_get_str(fullpath_r);
+    assert(fullpath);
+    fullpath=H5G_component(fullpath,&nchars1);
+    assert(fullpath);
+    prefix=H5RS_get_str(prefix_r);
+    assert(prefix);
+    prefix=H5G_component(prefix,&nchars2);
+    assert(prefix);
+
+    /* Check if we have a real string for each component */
+    while(*fullpath && *prefix) {
+        /* Check that the components we found are the same length */
+        if(nchars1==nchars2) {
+            /* Check that the two components are equal */
+            if(HDstrncmp(fullpath,prefix,nchars1)==0) {
+                /* Advance the pointers in the names */
+                fullpath+=nchars1;
+                prefix+=nchars2;
+
+                /* Get next component of each name */
+                fullpath=H5G_component(fullpath,&nchars1);
+                assert(fullpath);
+                prefix=H5G_component(prefix,&nchars2);
+                assert(prefix);
+            } /* end if */
+            else
+                HGOTO_DONE(FALSE);
+        } /* end if */
+        else
+            HGOTO_DONE(FALSE);
+    } /* end while */
+
+    /* If we reached the end of the prefix path to check, it must be a valid prefix */
+    if(*prefix=='\0')
+        ret_value=TRUE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5G_build_fullpath
+ *
+ * Purpose: Build a full path from a prefix & base pair of reference counted
+ *              strings
+ *
+ * Return: Pointer to reference counted string on success, NULL on error
+ *
+ * Programmer: Quincey Koziol, koziol at ncsa.uiuc.edu
+ *
+ * Date: August 19, 2005
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5RS_str_t *
+H5G_build_fullpath(const H5RS_str_t *prefix_r, const H5RS_str_t *name_r)
+{
+    const char *prefix;         /* Pointer to raw string of prefix */
+    const char *name;           /* Pointer to raw string of name */
+    char *full_path;            /* Full user path built */
+    size_t path_len;            /* Length of the path */
+    unsigned need_sep;          /* Flag to indicate if separator is needed */
+    H5RS_str_t *ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_build_fullpath)
+
+    /* Get the pointer to the prefix */
+    prefix=H5RS_get_str(prefix_r);
+
+    /* Get the length of the prefix */
+    path_len=HDstrlen(prefix);
+
+    /* Determine if there is a trailing separator in the name */
+    if(prefix[path_len-1]=='/')
+        need_sep=0;
+    else
+        need_sep=1;
+
+    /* Get the pointer to the raw src user path */
+    name=H5RS_get_str(name_r);
+
+    /* Add in the length needed for the '/' separator and the relative path */
+    path_len+=HDstrlen(name)+need_sep;
+
+    /* Allocate space for the path */
+    if(NULL==(full_path = H5FL_BLK_MALLOC(str_buf,path_len+1)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    /* Build full path */
+    HDstrcpy(full_path,prefix);
+    if(need_sep)
+        HDstrcat(full_path,"/");
+    HDstrcat(full_path,name);
+
+    /* Create reference counted string for path */
+    ret_value=H5RS_own(full_path);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5G_build_fullpath() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5G_replace_ent
+ *
+ * Purpose: H5I_search callback function to replace group entry names
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: June 5, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5G_replace_ent(void *obj_ptr, hid_t obj_id, void *key)
+{
+    const H5G_names_t *names = (const H5G_names_t *)key;        /* Get operation's information */
+    H5G_entry_t *ent = NULL;    /* Group entry for object that the ID refers to */
+    H5F_t *top_ent_file;        /* Top file in entry's mounted file chain */
+    H5F_t *top_loc_file;        /* Top file in location's mounted file chain */
+    herr_t      ret_value = SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_replace_ent);
+
+    assert(obj_ptr);
+
+    /* Get the symbol table entry */
+    switch(H5I_get_type(obj_id)) {
+        case H5I_GROUP:
+            ent = H5G_entof((H5G_t*)obj_ptr);
+            break;
+
+        case H5I_DATASET:
+            ent = H5D_entof((H5D_t*)obj_ptr);
+            break;
+
+        case H5I_DATATYPE:
+            /* Avoid non-named datatypes */
+            if(!H5T_is_named((H5T_t*)obj_ptr))
+                HGOTO_DONE(SUCCEED); /* Do not exit search over IDs */
+
+            ent = H5T_entof((H5T_t*)obj_ptr);
+            break;
+
+        default:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "unknown data object");
+    } /* end switch */
+    assert(ent);
+
+    switch(names->op) {
+        /*-------------------------------------------------------------------------
+        * OP_MOUNT
+        *-------------------------------------------------------------------------
+        */
+        case OP_MOUNT:
+	    if(ent->user_path_r) {
+		if(ent->file->mtab.parent && H5RS_cmp(ent->user_path_r,ent->canon_path_r)) {
+		    /* Find the "top" file in the chain of mounted files */
+		    top_ent_file=ent->file->mtab.parent;
+		    while(top_ent_file->mtab.parent!=NULL)
+			top_ent_file=top_ent_file->mtab.parent;
+		} /* end if */
+		else
+		    top_ent_file=ent->file;
+
+		/* Check for entry being in correct file (or mounted file) */
+		if(top_ent_file->shared == names->loc->file->shared) {
+		    /* Check if the source is along the entry's path */
+		    /* (But not actually the entry itself) */
+		    if(H5G_common_path(ent->user_path_r,names->src_name) &&
+			    H5RS_cmp(ent->user_path_r,names->src_name)!=0) {
+			/* Hide the user path */
+			ent->user_path_hidden++;
+		    } /* end if */
+		} /* end if */
+	    } /* end if */
+            break;
+
+        /*-------------------------------------------------------------------------
+        * OP_UNMOUNT
+        *-------------------------------------------------------------------------
+        */
+        case OP_UNMOUNT:
+	    if(ent->user_path_r) {
+		if(ent->file->mtab.parent) {
+		    /* Find the "top" file in the chain of mounted files for the entry */
+		    top_ent_file=ent->file->mtab.parent;
+		    while(top_ent_file->mtab.parent!=NULL)
+			top_ent_file=top_ent_file->mtab.parent;
+		} /* end if */
+		else
+		    top_ent_file=ent->file;
+
+		if(names->loc->file->mtab.parent) {
+		    /* Find the "top" file in the chain of mounted files for the location */
+		    top_loc_file=names->loc->file->mtab.parent;
+		    while(top_loc_file->mtab.parent!=NULL)
+			top_loc_file=top_loc_file->mtab.parent;
+		} /* end if */
+		else
+		    top_loc_file=names->loc->file;
+
+		/* If the ID's entry is not in the file we operated on, skip it */
+		if(top_ent_file->shared == top_loc_file->shared) {
+		    if(ent->user_path_hidden) {
+			if(H5G_common_path(ent->user_path_r,names->src_name)) {
+			    /* Un-hide the user path */
+			    ent->user_path_hidden--;
+			} /* end if */
+		    } /* end if */
+		    else {
+			if(H5G_common_path(ent->user_path_r,names->src_name)) {
+			    /* Free user path */
+			    H5RS_decr(ent->user_path_r);
+			    ent->user_path_r=NULL;
+			} /* end if */
+		    } /* end else */
+		} /* end if */
+	    } /* end if */
+            break;
+
+        /*-------------------------------------------------------------------------
+        * OP_UNLINK
+        *-------------------------------------------------------------------------
+        */
+        case OP_UNLINK:
+            /* If the ID's entry is not in the file we operated on, skip it */
+            if(ent->file->shared == names->loc->file->shared && 
+                    names->loc->canon_path_r && ent->canon_path_r && ent->user_path_r) {
+                /* Check if we are referring to the same object */
+                if(H5F_addr_eq(ent->header, names->loc->header)) {
+                    /* Check if the object was opened with the same canonical path as the one being moved */
+                    if(H5RS_cmp(ent->canon_path_r,names->loc->canon_path_r)==0) {
+                        /* Free user path */
+			H5RS_decr(ent->user_path_r);
+			ent->user_path_r=NULL;
+                    } /* end if */
+                } /* end if */
+                else {
+                    /* Check if the location being unlinked is in the canonical path for the current object */
+                    if(H5G_common_path(ent->canon_path_r,names->loc->canon_path_r)) {
+                        /* Free user path */
+			H5RS_decr(ent->user_path_r);
+			ent->user_path_r=NULL;
+                    } /* end if */
+                } /* end else */
+            } /* end if */
+            break;
+
+        /*-------------------------------------------------------------------------
+        * OP_MOVE
+        *-------------------------------------------------------------------------
+        */
+        case OP_MOVE: /* H5Gmove case, check for relative names case */
+            /* If the ID's entry is not in the file we operated on, skip it */
+            if(ent->file->shared == names->loc->file->shared) {
+		if(ent->user_path_r && names->loc->user_path_r &&
+			names->src_loc->user_path_r && names->dst_loc->user_path_r) {
+		    H5RS_str_t *src_path_r; /* Full user path of source name */
+		    H5RS_str_t *dst_path_r; /* Full user path of destination name */
+		    H5RS_str_t *canon_src_path_r;   /* Copy of canonical part of source path */
+		    H5RS_str_t *canon_dst_path_r;   /* Copy of canonical part of destination path */
+
+		    /* Sanity check */
+		    HDassert(names->src_name);
+		    HDassert(names->dst_name);
+
+		    /* Make certain that the source and destination names are full (not relative) paths */
+		    if(*(H5RS_get_str(names->src_name))!='/') {
+			/* Create reference counted string for full src path */
+			if((src_path_r = H5G_build_fullpath(names->src_loc->user_path_r, names->src_name)) == NULL)
+			    HGOTO_ERROR (H5E_SYM, H5E_PATH, FAIL, "can't build source path name")
+		    } /* end if */
+		    else
+                        src_path_r=H5RS_dup(names->src_name);
+		    if(*(H5RS_get_str(names->dst_name))!='/') {
+			/* Create reference counted string for full dst path */
+			if((dst_path_r = H5G_build_fullpath(names->dst_loc->user_path_r, names->dst_name)) == NULL)
+			    HGOTO_ERROR (H5E_SYM, H5E_PATH, FAIL, "can't build destination path name")
+		    } /* end if */
+		    else
+                        dst_path_r=H5RS_dup(names->dst_name);
+
+		    /* Get the canonical parts of the source and destination names */
+
+		    /* Check if the object being moved was accessed through a mounted file */
+		    if(H5RS_cmp(names->loc->user_path_r,names->loc->canon_path_r)!=0) {
+			size_t non_canon_name_len;   /* Length of non-canonical part of name */
+
+			/* Get current string lengths */
+			non_canon_name_len=H5RS_len(names->loc->user_path_r)-H5RS_len(names->loc->canon_path_r);
+
+			canon_src_path_r=H5RS_create(H5RS_get_str(src_path_r)+non_canon_name_len);
+			canon_dst_path_r=H5RS_create(H5RS_get_str(dst_path_r)+non_canon_name_len);
+		    } /* end if */
+		    else {
+			canon_src_path_r=H5RS_dup(src_path_r);
+			canon_dst_path_r=H5RS_dup(dst_path_r);
+		    } /* end else */
+
+		    /* Check if the link being changed in the file is along the canonical path for this object */
+		    if(H5G_common_path(ent->canon_path_r,canon_src_path_r)) {
+			size_t user_dst_len;    /* Length of destination user path */
+			size_t canon_dst_len;   /* Length of destination canonical path */
+			const char *old_user_path;    /* Pointer to previous user path */
+			char *new_user_path;    /* Pointer to new user path */
+			char *new_canon_path;   /* Pointer to new canonical path */
+			const char *tail_path;  /* Pointer to "tail" of path */
+			size_t tail_len;    /* Pointer to "tail" of path */
+			char *src_canon_prefix;     /* Pointer to source canonical path prefix of component which is moving */
+			size_t src_canon_prefix_len;/* Length of the source canonical path prefix */
+			char *dst_canon_prefix;     /* Pointer to destination canonical path prefix of component which is moving */
+			size_t dst_canon_prefix_len;/* Length of the destination canonical path prefix */
+			char *user_prefix;      /* Pointer to user path prefix of component which is moving */
+			size_t user_prefix_len; /* Length of the user path prefix */
+			char *src_comp;     /* The source name of the component which is actually changing */
+			char *dst_comp;     /* The destination name of the component which is actually changing */
+			const char *canon_src_path;   /* pointer to canonical part of source path */
+			const char *canon_dst_path;   /* pointer to canonical part of destination path */
+
+			/* Get the pointers to the raw strings */
+			canon_src_path=H5RS_get_str(canon_src_path_r);
+			canon_dst_path=H5RS_get_str(canon_dst_path_r);
+
+			/* Get the source & destination components */
+			src_comp=HDstrrchr(canon_src_path,'/');
+			assert(src_comp);
+			dst_comp=HDstrrchr(canon_dst_path,'/');
+			assert(dst_comp);
+
+			/* Find the canonical prefixes for the entry */
+			src_canon_prefix_len=HDstrlen(canon_src_path)-HDstrlen(src_comp);
+			if(NULL==(src_canon_prefix = H5MM_malloc(src_canon_prefix_len+1)))
+			    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+			HDstrncpy(src_canon_prefix,canon_src_path,src_canon_prefix_len);
+			src_canon_prefix[src_canon_prefix_len]='\0';
+
+			dst_canon_prefix_len=HDstrlen(canon_dst_path)-HDstrlen(dst_comp);
+			if(NULL==(dst_canon_prefix = H5MM_malloc(dst_canon_prefix_len+1)))
+			    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+			HDstrncpy(dst_canon_prefix,canon_dst_path,dst_canon_prefix_len);
+			dst_canon_prefix[dst_canon_prefix_len]='\0';
+
+			/* Hold this for later use */
+			old_user_path=H5RS_get_str(ent->user_path_r);
+
+			/* Find the user prefix for the entry */
+			user_prefix_len=HDstrlen(old_user_path)-H5RS_len(ent->canon_path_r);
+			if(NULL==(user_prefix = H5MM_malloc(user_prefix_len+1)))
+			    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+			HDstrncpy(user_prefix,old_user_path,user_prefix_len);
+			user_prefix[user_prefix_len]='\0';
+
+			/* Set the tail path info */
+			tail_path=old_user_path+user_prefix_len+src_canon_prefix_len+HDstrlen(src_comp);
+			tail_len=HDstrlen(tail_path);
+
+			/* Get the length of the destination paths */
+			user_dst_len=user_prefix_len+dst_canon_prefix_len+HDstrlen(dst_comp)+tail_len;
+			canon_dst_len=dst_canon_prefix_len+HDstrlen(dst_comp)+tail_len;
+
+			/* Allocate space for the new user path */
+			if(NULL==(new_user_path = H5FL_BLK_MALLOC(str_buf,user_dst_len+1)))
+			    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+			/* Allocate space for the new canonical path */
+			if(NULL==(new_canon_path = H5FL_BLK_MALLOC(str_buf,canon_dst_len+1)))
+			    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+			/* Create the new names */
+			HDstrcpy(new_user_path,user_prefix);
+			HDstrcat(new_user_path,dst_canon_prefix);
+			HDstrcat(new_user_path,dst_comp);
+			HDstrcat(new_user_path,tail_path);
+			HDstrcpy(new_canon_path,dst_canon_prefix);
+			HDstrcat(new_canon_path,dst_comp);
+			HDstrcat(new_canon_path,tail_path);
+
+			/* Release the old user & canonical paths */
+			H5RS_decr(ent->user_path_r);
+			H5RS_decr(ent->canon_path_r);
+
+			/* Take ownership of the new user & canonical paths */
+			ent->user_path_r=H5RS_own(new_user_path);
+			ent->canon_path_r=H5RS_own(new_canon_path);
+
+			/* Free the extra paths allocated */
+			H5MM_xfree(src_canon_prefix);
+			H5MM_xfree(dst_canon_prefix);
+			H5MM_xfree(user_prefix);
+		    } /* end if */
+
+
+		    /* Free the extra paths allocated */
+		    H5RS_decr(src_path_r);
+		    H5RS_decr(dst_path_r);
+		    H5RS_decr(canon_src_path_r);
+		    H5RS_decr(canon_dst_path_r);
+		} /* end if */
+		else {
+		    /* Release the old user path */
+		    if(ent->user_path_r) {
+			H5RS_decr(ent->user_path_r);
+			ent->user_path_r = NULL;
+		    } /* end if */
+		} /* end else */
+            } /* end if */
+            break;
+
+        default:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid call");
+    } /* end switch */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_get_shared_count
+ *
+ * Purpose:	Queries the group object's "shared count"
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Tuesday, July	 5, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_get_shared_count(H5G_t *grp)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_get_shared_count);
+
+    /* Check args */
+    HDassert(grp && grp->shared);
+
+    FUNC_LEAVE_NOAPI(grp->shared->fo_count);
+} /* end H5G_get_shared_count() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_mount
+ *
+ * Purpose:	Sets the 'mounted' flag for a group
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Tuesday, July 19, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_mount(H5G_t *grp)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_mount);
+
+    /* Check args */
+    HDassert(grp && grp->shared);
+    HDassert(grp->shared->mounted == FALSE);
+
+    /* Set the 'mounted' flag */
+    grp->shared->mounted = TRUE;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5G_mount() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_unmount
+ *
+ * Purpose:	Resets the 'mounted' flag for a group
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Tuesday, July 19, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_unmount(H5G_t *grp)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_unmount);
+
+    /* Check args */
+    HDassert(grp && grp->shared);
+    HDassert(grp->shared->mounted == TRUE);
+
+    /* Reset the 'mounted' flag */
+    grp->shared->mounted = FALSE;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5G_unmount() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Gent.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Gent.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Gent.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,666 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Robb Matzke <matzke at llnl.gov>
+ *             Friday, September 19, 1997
+ */
+#define H5G_PACKAGE		/*suppress error about including H5Gpkg	  */
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+
+/* Packages needed by this file... */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"             /* File access				*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5Gpkg.h"		/* Groups		  		*/
+#include "H5HLprivate.h"	/* Local Heaps				*/
+
+/* Private prototypes */
+#ifdef NOT_YET
+static herr_t H5G_ent_modified(H5G_entry_t *ent, H5G_type_t cache_type);
+#endif /* NOT_YET */
+
+/* Declare extern the PQ free list for the wrapped strings */
+H5FL_BLK_EXTERN(str_buf);
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5G_ent_cache
+ *
+ * Purpose:     Returns a pointer to the cache associated with the symbol
+ *              table entry.  You should modify the cache directly, then call
+ *              H5G_ent_modified() with the new cache type (even if the type is
+ *              still the same).
+ *
+ * Return:      Success:        Ptr to the cache in the symbol table entry.
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  Robb Matzke
+ *              Friday, September 19, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+const H5G_cache_t *
+H5G_ent_cache(const H5G_entry_t *ent, H5G_type_t *cache_type)
+{
+    const H5G_cache_t *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_ent_cache, NULL);
+
+    if (!ent)
+        HGOTO_ERROR(H5E_SYM, H5E_BADVALUE, NULL, "no entry");
+    if (cache_type)
+        *cache_type = ent->type;
+
+    /* Set return value */
+    ret_value=(const H5G_cache_t *)&(ent->cache);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5G_ent_modified
+ *
+ * Purpose:     This function should be called after you make any
+ *              modifications to a symbol table entry cache.  Supply the new
+ *              type for the cache.  If CACHE_TYPE is the constant
+ *              H5G_NO_CHANGE then the cache type isn't changed--just the
+ *              dirty bit is set.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              Friday, September 19, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifdef NOT_YET
+static herr_t
+H5G_ent_modified(H5G_entry_t *ent, H5G_type_t cache_type)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5G_ent_modified)
+
+    HDassert(ent);
+
+    /* Update cache type, if requested */
+    if (H5G_NO_CHANGE != cache_type)
+        ent->type = cache_type;
+    ent->dirty = TRUE;
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5G_ent_modified */
+#endif /* NOT_YET */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5G_ent_decode_vec
+ *
+ * Purpose:     Same as H5G_ent_decode() except it does it for an array of
+ *              symbol table entries.
+ *
+ * Errors:
+ *              SYM       CANTDECODE    Can't decode.
+ *
+ * Return:      Success:        Non-negative, with *pp pointing to the first byte
+ *                              after the last symbol.
+ *
+ *              Failure:        Negative
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Jul 18 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_ent_decode_vec(H5F_t *f, const uint8_t **pp, H5G_entry_t *ent, unsigned n)
+{
+    unsigned    u;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_ent_decode_vec, FAIL);
+
+    /* check arguments */
+    assert(f);
+    assert(pp);
+    assert(ent);
+
+    /* decode entries */
+    for (u = 0; u < n; u++)
+        if (H5G_ent_decode(f, pp, ent + u) < 0)
+            HGOTO_ERROR(H5E_SYM, H5E_CANTDECODE, FAIL, "can't decode")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5G_ent_decode
+ *
+ * Purpose:     Decodes a symbol table entry pointed to by `*pp'.
+ *
+ * Errors:
+ *
+ * Return:      Success:        Non-negative with *pp pointing to the first byte
+ *                              following the symbol table entry.
+ *
+ *              Failure:        Negative
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Jul 18 1997
+ *
+ * Modifications:
+ *	Robb Matzke, 17 Jul 1998
+ * 	Added a 4-byte padding field for alignment and future expansion.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_ent_decode(H5F_t *f, const uint8_t **pp, H5G_entry_t *ent)
+{
+    const uint8_t	*p_ret = *pp;
+    uint32_t		tmp;
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5G_ent_decode);
+
+    /* check arguments */
+    assert(f);
+    assert(pp);
+    assert(ent);
+
+    ent->file = f;
+
+    /* decode header */
+    H5F_DECODE_LENGTH(f, *pp, ent->name_off);
+    H5F_addr_decode(f, pp, &(ent->header));
+    UINT32DECODE(*pp, tmp);
+    *pp += 4; /*reserved*/
+    ent->type=(H5G_type_t)tmp;
+
+    /* decode scratch-pad */
+    switch (ent->type) {
+        case H5G_NOTHING_CACHED:
+            break;
+
+        case H5G_CACHED_STAB:
+            assert(2 * H5F_SIZEOF_ADDR(f) <= H5G_SIZEOF_SCRATCH);
+            H5F_addr_decode(f, pp, &(ent->cache.stab.btree_addr));
+            H5F_addr_decode(f, pp, &(ent->cache.stab.heap_addr));
+            break;
+
+        case H5G_CACHED_SLINK:
+            UINT32DECODE (*pp, ent->cache.slink.lval_offset);
+            break;
+
+        default:
+            HDabort();
+    }
+
+    *pp = p_ret + H5G_SIZEOF_ENTRY(f);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5G_ent_encode_vec
+ *
+ * Purpose:     Same as H5G_ent_encode() except it does it for an array of
+ *              symbol table entries.
+ *
+ * Errors:
+ *              SYM       CANTENCODE    Can't encode.
+ *
+ * Return:      Success:        Non-negative, with *pp pointing to the first byte
+ *                              after the last symbol.
+ *
+ *              Failure:        Negative
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Jul 18 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_ent_encode_vec(H5F_t *f, uint8_t **pp, const H5G_entry_t *ent, unsigned n)
+{
+    unsigned    u;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_ent_encode_vec, FAIL);
+
+    /* check arguments */
+    assert(f);
+    assert(pp);
+    assert(ent);
+
+    /* encode entries */
+    for (u = 0; u < n; u++)
+        if (H5G_ent_encode(f, pp, ent + u) < 0)
+            HGOTO_ERROR(H5E_SYM, H5E_CANTENCODE, FAIL, "can't encode");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5G_ent_encode
+ *
+ * Purpose:     Encodes the specified symbol table entry into the buffer
+ *              pointed to by *pp.
+ *
+ * Errors:
+ *
+ * Return:      Success:        Non-negative, with *pp pointing to the first byte
+ *                              after the symbol table entry.
+ *
+ *              Failure:        Negative
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Jul 18 1997
+ *
+ * Modifications:
+ *
+ *      Robb Matzke, 8 Aug 1997
+ *      Writes zeros for the bytes that aren't used so the file doesn't
+ *      contain junk.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_ent_encode(H5F_t *f, uint8_t **pp, const H5G_entry_t *ent)
+{
+    uint8_t		*p_ret = *pp + H5G_SIZEOF_ENTRY(f);
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5G_ent_encode);
+
+    /* check arguments */
+    assert(f);
+    assert(pp);
+
+    if (ent) {
+        /* encode header */
+        H5F_ENCODE_LENGTH(f, *pp, ent->name_off);
+        H5F_addr_encode(f, pp, ent->header);
+        UINT32ENCODE(*pp, ent->type);
+	UINT32ENCODE(*pp, 0); /*reserved*/
+
+        /* encode scratch-pad */
+        switch (ent->type) {
+            case H5G_NOTHING_CACHED:
+                break;
+
+            case H5G_CACHED_STAB:
+                assert(2 * H5F_SIZEOF_ADDR(f) <= H5G_SIZEOF_SCRATCH);
+                H5F_addr_encode(f, pp, ent->cache.stab.btree_addr);
+                H5F_addr_encode(f, pp, ent->cache.stab.heap_addr);
+                break;
+
+            case H5G_CACHED_SLINK:
+                UINT32ENCODE (*pp, ent->cache.slink.lval_offset);
+                break;
+
+            default:
+                HDabort();
+        }
+    } else {
+        H5F_ENCODE_LENGTH(f, *pp, 0);
+        H5F_addr_encode(f, pp, HADDR_UNDEF);
+        UINT32ENCODE(*pp, H5G_NOTHING_CACHED);
+	UINT32ENCODE(*pp, 0); /*reserved*/
+    }
+
+    /* fill with zero */
+    while (*pp < p_ret) *(*pp)++ = 0;
+    *pp = p_ret;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5G_ent_copy
+ *
+ * Purpose: Do a deep copy of symbol table entries
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: August 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *      Quincey Koziol, Sept. 25, 2002:
+ *          - Changed source & destination parameters to match the rest
+ *              of the functions in the library.
+ *          - Added 'depth' parameter to determine how much of the group
+ *              entry structure we want to copy.  The new depths are:
+ *                  H5G_COPY_NULL - Copy all the fields from the
+ *                      source to the destination, but set the destination's
+ *                      user path and canonical path to NULL.
+ *                  H5G_COPY_LIMITED - Copy all the fields from the
+ *                      source to the destination, except for the user path
+ *                      field, keeping it the same as its
+ *                      previous value in the destination.
+ *                  H5G_COPY_SHALLOW - Copy all the fields from the source
+ *                      to the destination, including the user path and
+ *                      canonical path. (Destination "takes ownership" of
+ *                      user and canonical paths)
+ *                  H5G_COPY_DEEP - Copy all the fields from the source to
+ *                      the destination, deep copying the user and canonical
+ *                      paths.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_ent_copy(H5G_entry_t *dst, const H5G_entry_t *src, H5G_ent_copy_depth_t depth)
+{
+    H5RS_str_t *tmp_user_path_r=NULL;   /* Temporary string pointer for entry's user path */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5G_ent_copy);
+
+    /* Check arguments */
+    assert(src);
+    assert(dst);
+
+    /* If the depth is "very shallow", keep the old entry's user path */
+    if(depth==H5G_COPY_LIMITED) {
+        tmp_user_path_r=dst->user_path_r;
+        if(dst->canon_path_r)
+            H5RS_decr(dst->canon_path_r);
+    } /* end if */
+
+    /* Copy the top level information */
+    HDmemcpy(dst,src,sizeof(H5G_entry_t));
+
+    /* Deep copy the names */
+    if(depth==H5G_COPY_DEEP) {
+        dst->user_path_r=H5RS_dup(src->user_path_r);
+        dst->canon_path_r=H5RS_dup(src->canon_path_r);
+    } else if(depth==H5G_COPY_LIMITED) {
+        dst->user_path_r=tmp_user_path_r;
+        dst->canon_path_r=H5RS_dup(src->canon_path_r);
+    } else if(depth==H5G_COPY_NULL) {
+        dst->user_path_r=NULL;
+        dst->canon_path_r=NULL;
+    } else if(depth==H5G_COPY_SHALLOW) {
+#ifndef NDEBUG
+        /* Discarding 'const' qualifier OK - QAK */
+        H5G_ent_reset((H5G_entry_t *)src);
+#endif /* NDEBUG */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5G_ent_reset
+ *
+ * Purpose: Reset a symbol table entry to an empty state
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Quincey Koziol, koziol at ncsa.uiuc.edu
+ *
+ * Date: August 2005
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_ent_reset(H5G_entry_t *ent)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5G_ent_reset);
+
+    /* Check arguments */
+    HDassert(ent);
+
+    /* Clear the symbol table entry to an empty state */
+    HDmemset(ent, 0, sizeof(H5G_entry_t));
+    ent->header = HADDR_UNDEF;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5G_ent_reset() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5G_ent_set_name
+ *
+ * Purpose: Set the name of a symbol entry OBJ, located at LOC
+ *
+ * Return: Success: 0, Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: August 22, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_ent_set_name(H5G_entry_t *loc, H5G_entry_t *obj, const char *name)
+{
+    size_t  name_len;           /* Length of name to append */
+    herr_t  ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5G_ent_set_name, FAIL)
+
+    assert(loc);
+    assert(obj);
+    assert(name);
+
+    /* Reset the object's previous names, if they exist */
+    if(obj->user_path_r) {
+        H5RS_decr(obj->user_path_r);
+        obj->user_path_r=NULL;
+    } /* end if */
+    if(obj->canon_path_r) {
+        H5RS_decr(obj->canon_path_r);
+        obj->canon_path_r=NULL;
+    } /* end if */
+    obj->user_path_hidden=0;
+
+    /* Get the length of the new name */
+    name_len = HDstrlen(name);
+
+    /* Modify the object's user path, if a user path exists in the location */
+    if(loc->user_path_r) {
+        const char *loc_user_path;      /* Pointer to raw string for user path */
+        size_t  user_path_len;      /* Length of location's user path name */
+        char *new_user_path;        /* Pointer to new user path */
+
+        /* Get the length of the strings involved */
+        user_path_len = H5RS_len(loc->user_path_r);
+
+        /* Modify the object's user path */
+
+        /* Get the raw string for the user path */
+        loc_user_path=H5RS_get_str(loc->user_path_r);
+        assert(loc_user_path);
+
+        /* The location's user path already ends in a '/' separator */
+        if ('/'==loc_user_path[user_path_len-1]) {
+            if (NULL==(new_user_path = H5FL_BLK_MALLOC(str_buf,user_path_len+name_len+1)))
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+            HDstrcpy(new_user_path, loc_user_path);
+        } /* end if */
+        /* The location's user path needs a separator */
+        else {
+            if (NULL==(new_user_path = H5FL_BLK_MALLOC(str_buf,user_path_len+1+name_len+1)))
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+            HDstrcpy(new_user_path, loc_user_path);
+            HDstrcat(new_user_path, "/");
+        } /* end else */
+
+        /* Append the component's name */
+        HDstrcat(new_user_path, name);
+
+        /* Give ownership of the user path to the entry */
+        obj->user_path_r=H5RS_own(new_user_path);
+        assert(obj->user_path_r);
+    } /* end if */
+
+    /* Modify the object's canonical path, if a canonical path exists in the location */
+    if(loc->canon_path_r) {
+        const char *loc_canon_path;     /* Pointer to raw string for canonical path */
+        size_t  canon_path_len;     /* Length of location's canonical path name */
+        char *new_canon_path;       /* Pointer to new canonical path */
+
+        /* Get the length of the strings involved */
+        canon_path_len = H5RS_len(loc->canon_path_r);
+
+        /* Modify the object's canonical path */
+
+        /* Get the raw string for the canonical path */
+        loc_canon_path=H5RS_get_str(loc->canon_path_r);
+        assert(loc_canon_path);
+
+        /* The location's canonical path already ends in a '/' separator */
+        if ('/'==loc_canon_path[canon_path_len-1]) {
+            if (NULL==(new_canon_path = H5FL_BLK_MALLOC(str_buf,canon_path_len+name_len+1)))
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+            HDstrcpy(new_canon_path, loc_canon_path);
+        } /* end if */
+        /* The location's canonical path needs a separator */
+        else {
+            if (NULL==(new_canon_path = H5FL_BLK_MALLOC(str_buf,canon_path_len+1+name_len+1)))
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+            HDstrcpy(new_canon_path, loc_canon_path);
+            HDstrcat(new_canon_path, "/");
+        } /* end else */
+
+        /* Append the component's name */
+        HDstrcat(new_canon_path, name);
+
+        /* Give ownership of the canonical path to the entry */
+        obj->canon_path_r=H5RS_own(new_canon_path);
+        assert(obj->canon_path_r);
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5G_ent_set_name() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5G_ent_debug
+ *
+ * Purpose:     Prints debugging information about a symbol table entry.
+ *
+ * Errors:
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug 29 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The HEAP argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_ent_debug(H5F_t UNUSED *f, hid_t dxpl_id, const H5G_entry_t *ent, FILE * stream,
+	      int indent, int fwidth, haddr_t heap)
+{
+    const char		*lval = NULL;
+    int nested_indent, nested_fwidth;
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5G_ent_debug);
+
+    /* Calculate the indent & field width values for nested information */
+    nested_indent=indent+3;
+    nested_fwidth=MAX(0,fwidth-3);
+
+    HDfprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
+	      "Name offset into private heap:",
+	      (unsigned long) (ent->name_off));
+
+    HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+	      "Object header address:", ent->header);
+
+    HDfprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+	      "Dirty:",
+	      ent->dirty ? "Yes" : "No");
+    HDfprintf(stream, "%*s%-*s ", indent, "", fwidth,
+	      "Cache info type:");
+    switch (ent->type) {
+        case H5G_NOTHING_CACHED:
+            HDfprintf(stream, "Nothing Cached\n");
+            break;
+
+        case H5G_CACHED_STAB:
+            HDfprintf(stream, "Symbol Table\n");
+
+            HDfprintf(stream, "%*s%-*s\n", indent, "", fwidth,
+                      "Cached entry information:");
+            HDfprintf(stream, "%*s%-*s %a\n", nested_indent, "", nested_fwidth,
+                      "B-tree address:", ent->cache.stab.btree_addr);
+
+            HDfprintf(stream, "%*s%-*s %a\n", nested_indent, "", nested_fwidth,
+                      "Heap address:", ent->cache.stab.heap_addr);
+            break;
+
+        case H5G_CACHED_SLINK:
+            HDfprintf (stream, "Symbolic Link\n");
+            HDfprintf(stream, "%*s%-*s\n", indent, "", fwidth,
+                      "Cached information:");
+            HDfprintf (stream, "%*s%-*s %lu\n", nested_indent, "", nested_fwidth,
+                       "Link value offset:",
+                       (unsigned long)(ent->cache.slink.lval_offset));
+            if (heap>0 && H5F_addr_defined(heap)) {
+                const H5HL_t *heap_ptr;
+
+                heap_ptr = H5HL_protect(ent->file, dxpl_id, heap);
+                lval = H5HL_offset_into(ent->file, heap_ptr, ent->cache.slink.lval_offset);
+                HDfprintf (stream, "%*s%-*s %s\n", nested_indent, "", nested_fwidth,
+                           "Link value:",
+                           lval);
+                H5HL_unprotect(ent->file, dxpl_id, heap_ptr, heap);
+            }
+            else
+                HDfprintf(stream, "%*s%-*s\n", nested_indent, "", nested_fwidth, "Warning: Invalid heap address given, name not displayed!");
+            break;
+
+        default:
+            HDfprintf(stream, "*** Unknown symbol type %d\n", ent->type);
+            break;
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Gnode.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Gnode.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Gnode.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1940 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:		H5Gnode.c
+ *			Jun 26 1997
+ *			Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:		Functions for handling symbol table nodes.  A
+ *			symbol table node is a small collection of symbol
+ *			table entries.	A B-tree usually points to the
+ *			symbol table nodes for any given symbol table.
+ *
+ *-------------------------------------------------------------------------
+ */
+#define H5G_PACKAGE		/*suppress error about including H5Gpkg   */
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+
+/* Packages needed by this file... */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"		/* File access				*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5Gpkg.h"		/* Groups		  		*/
+#include "H5HLprivate.h"	/* Local Heaps				*/
+#include "H5MFprivate.h"	/* File memory management		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+
+/* Private typedefs */
+
+/*
+ * Each key field of the B-link tree that points to symbol table
+ * nodes consists of this structure...
+ */
+typedef struct H5G_node_key_t {
+    size_t      offset;                 /*offset into heap for name          */
+} H5G_node_key_t;
+
+/* Private macros */
+#define H5G_NODE_VERS   1               /*symbol table node version number   */
+#define H5G_NODE_SIZEOF_HDR(F) (H5G_NODE_SIZEOF_MAGIC + 4)
+
+/* PRIVATE PROTOTYPES */
+static herr_t H5G_node_serialize(H5F_t *f, H5G_node_t *sym, size_t size, uint8_t *buf);
+static size_t H5G_node_size(const H5F_t *f);
+static herr_t H5G_node_shared_free(void *shared);
+
+/* Metadata cache callbacks */
+static H5G_node_t *H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_udata1,
+				 void *_udata2);
+static herr_t H5G_node_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
+			     H5G_node_t *sym);
+static herr_t H5G_node_dest(H5F_t *f, H5G_node_t *sym);
+static herr_t H5G_node_clear(H5F_t *f, H5G_node_t *sym, hbool_t destroy);
+static herr_t H5G_compute_size(const H5F_t *f, const H5G_node_t *sym, size_t *size_ptr);
+
+/* B-tree callbacks */
+static size_t H5G_node_sizeof_rkey(const H5F_t *f, const void *_udata);
+static H5RC_t *H5G_node_get_shared(const H5F_t *f, const void *_udata);
+static herr_t H5G_node_create(H5F_t *f, hid_t dxpl_id, H5B_ins_t op, void *_lt_key,
+			      void *_udata, void *_rt_key,
+			      haddr_t *addr_p/*out*/);
+static int H5G_node_cmp2(H5F_t *f, hid_t dxpl_id, void *_lt_key, void *_udata,
+			  void *_rt_key);
+static int H5G_node_cmp3(H5F_t *f, hid_t dxpl_id, void *_lt_key, void *_udata,
+			  void *_rt_key);
+static herr_t H5G_node_found(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_lt_key,
+			     void *_udata);
+static H5B_ins_t H5G_node_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key,
+				 hbool_t *lt_key_changed, void *_md_key,
+				 void *_udata, void *_rt_key,
+				 hbool_t *rt_key_changed,
+				 haddr_t *new_node_p/*out*/);
+static H5B_ins_t H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *lt_key,
+				 hbool_t *lt_key_changed, void *udata,
+				 void *rt_key, hbool_t *rt_key_changed);
+static herr_t H5G_node_decode_key(const H5F_t *f, const H5B_t *bt, const uint8_t *raw,
+				  void *_key);
+static herr_t H5G_node_encode_key(const H5F_t *f, const H5B_t *bt, uint8_t *raw,
+				  void *_key);
+static herr_t H5G_node_debug_key(FILE *stream, H5F_t *f, hid_t dxpl_id,
+                                    int indent, int fwidth, const void *key,
+                                    const void *udata);
+
+/* H5G inherits cache-like properties from H5AC */
+const H5AC_class_t H5AC_SNODE[1] = {{
+    H5AC_SNODE_ID,
+    (H5AC_load_func_t)H5G_node_load,
+    (H5AC_flush_func_t)H5G_node_flush,
+    (H5AC_dest_func_t)H5G_node_dest,
+    (H5AC_clear_func_t)H5G_node_clear,
+    (H5AC_size_func_t)H5G_compute_size,
+}};
+
+/* H5G inherits B-tree like properties from H5B */
+H5B_class_t H5B_SNODE[1] = {{
+    H5B_SNODE_ID,		/*id			*/
+    sizeof(H5G_node_key_t), 	/*sizeof_nkey		*/
+    H5G_node_sizeof_rkey,	/*get_sizeof_rkey	*/
+    H5G_node_get_shared,	/*get_shared		*/
+    H5G_node_create,		/*new			*/
+    H5G_node_cmp2,		/*cmp2			*/
+    H5G_node_cmp3,		/*cmp3			*/
+    H5G_node_found,		/*found			*/
+    H5G_node_insert,		/*insert		*/
+    TRUE,			/*follow min branch?	*/
+    TRUE,			/*follow max branch?	*/
+    H5G_node_remove,		/*remove		*/
+    H5G_node_decode_key,	/*decode		*/
+    H5G_node_encode_key,	/*encode		*/
+    H5G_node_debug_key,		/*debug			*/
+}};
+
+/* Declare a free list to manage the H5B_shared_t struct */
+H5FL_EXTERN(H5B_shared_t);
+
+/* Declare a free list to manage the H5G_node_t struct */
+H5FL_DEFINE_STATIC(H5G_node_t);
+
+/* Declare a free list to manage sequences of H5G_entry_t's */
+H5FL_SEQ_DEFINE_STATIC(H5G_entry_t);
+
+/* Declare a free list to manage blocks of symbol node data */
+H5FL_BLK_DEFINE_STATIC(symbol_node);
+
+/* Declare a free list to manage the native key offset sequence information */
+H5FL_SEQ_DEFINE_STATIC(size_t);
+
+/* Declare a free list to manage the raw page information */
+H5FL_BLK_DEFINE_STATIC(grp_page);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_sizeof_rkey
+ *
+ * Purpose:	Returns the size of a raw B-link tree key for the specified
+ *		file.
+ *
+ * Return:	Success:	Size of the key.
+ *
+ *		Failure:	never fails
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 14 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5G_node_sizeof_rkey(const H5F_t *f, const void UNUSED * udata)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_sizeof_rkey);
+
+    FUNC_LEAVE_NOAPI(H5F_SIZEOF_SIZE(f));	/*the name offset */
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_get_shared
+ *
+ * Purpose:	Returns the shared B-tree info for the specified UDATA.
+ *
+ * Return:	Success:	Pointer to the raw B-tree page for this
+                                file's groups
+ *
+ *		Failure:	Can't fail
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, October  8, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5RC_t *
+H5G_node_get_shared(const H5F_t *f, const void UNUSED *_udata)
+{
+    H5RC_t *rc;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_get_shared);
+
+    assert(f);
+
+    /* Increment reference count on shared B-tree node */
+    rc=H5F_GRP_BTREE_SHARED(f);
+    H5RC_INC(rc);
+
+    /* Return the pointer to the ref-count object */
+    FUNC_LEAVE_NOAPI(rc);
+} /* end H5G_node_get_shared() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_decode_key
+ *
+ * Purpose:	Decodes a raw key into a native key.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul  8 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_node_decode_key(const H5F_t *f, const H5B_t UNUSED *bt, const uint8_t *raw, void *_key)
+{
+    H5G_node_key_t	   *key = (H5G_node_key_t *) _key;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_decode_key);
+
+    assert(f);
+    assert(raw);
+    assert(key);
+
+    H5F_DECODE_LENGTH(f, raw, key->offset);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_encode_key
+ *
+ * Purpose:	Encodes a native key into a raw key.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul  8 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_node_encode_key(const H5F_t *f, const H5B_t UNUSED *bt, uint8_t *raw, void *_key)
+{
+    H5G_node_key_t	   *key = (H5G_node_key_t *) _key;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_encode_key);
+
+    assert(f);
+    assert(raw);
+    assert(key);
+
+    H5F_ENCODE_LENGTH(f, raw, key->offset);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_debug_key
+ *
+ * Purpose:	Prints a key.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, February 28, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_node_debug_key (FILE *stream, H5F_t *f, hid_t dxpl_id, int indent, int fwidth,
+		      const void *_key, const void *_udata)
+{
+    const H5G_node_key_t   *key = (const H5G_node_key_t *) _key;
+    const H5G_bt_ud0_t	   *udata = (const H5G_bt_ud0_t *) _udata;
+    const H5HL_t           *heap = NULL;
+    const char		   *s;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_node_debug_key);
+    assert (key);
+
+    HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth, "Heap offset:",
+        (unsigned)key->offset);
+
+    HDfprintf(stream, "%*s%-*s ", indent, "", fwidth, "Name:");
+
+    if (NULL == (heap = H5HL_protect(f, dxpl_id, udata->heap_addr)))
+	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to protect symbol name");
+
+    s = H5HL_offset_into(f, heap, key->offset);
+    HDfprintf (stream, "%s\n", s);
+
+    if (H5HL_unprotect(f, dxpl_id, heap, udata->heap_addr) < 0)
+	HGOTO_ERROR(H5E_SYM, H5E_PROTECT, FAIL, "unable to unprotect symbol name");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_size
+ *
+ * Purpose:	Returns the total size of a symbol table node.
+ *
+ * Return:	Success:	Total size of the node in bytes.
+ *
+ *		Failure:	Never fails.
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 23 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5G_node_size(const H5F_t *f)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_size);
+
+    FUNC_LEAVE_NOAPI(H5G_NODE_SIZEOF_HDR(f) +
+                     (2 * H5F_SYM_LEAF_K(f)) * H5G_SIZEOF_ENTRY(f));
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_load
+ *
+ * Purpose:	Loads a symbol table node from the file.
+ *
+ * Return:	Success:	Ptr to the new table.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 23 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ *	Quincey Koziol, 2002-7-180
+ *	Added dxpl parameter to allow more control over I/O from metadata
+ *      cache.
+ *-------------------------------------------------------------------------
+ */
+static H5G_node_t *
+H5G_node_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED  *_udata1,
+	      void UNUSED * _udata2)
+{
+    H5G_node_t		   *sym = NULL;
+    size_t		    size = 0;
+    uint8_t		   *buf = NULL;
+    const uint8_t	   *p = NULL;
+    H5G_node_t		   *ret_value;	/*for error handling */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_node_load);
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(!_udata1);
+    assert(NULL == _udata2);
+
+    /*
+     * Initialize variables.
+     */
+    size = H5G_node_size(f);
+    if ((buf=H5FL_BLK_MALLOC(symbol_node,size))==NULL)
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for symbol table node");
+    p=buf;
+    if (NULL==(sym = H5FL_CALLOC(H5G_node_t)) ||
+            NULL==(sym->entry=H5FL_SEQ_CALLOC(H5G_entry_t,(2*H5F_SYM_LEAF_K(f)))))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    if (H5F_block_read(f, H5FD_MEM_BTREE, addr, size, dxpl_id, buf) < 0)
+	HGOTO_ERROR(H5E_SYM, H5E_READERROR, NULL, "unable to read symbol table node");
+    /* magic */
+    if (HDmemcmp(p, H5G_NODE_MAGIC, H5G_NODE_SIZEOF_MAGIC))
+	HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "bad symbol table node signature");
+    p += 4;
+
+    /* version */
+    if (H5G_NODE_VERS != *p++)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "bad symbol table node version");
+    /* reserved */
+    p++;
+
+    /* number of symbols */
+    UINT16DECODE(p, sym->nsyms);
+
+    /* entries */
+    if (H5G_ent_decode_vec(f, &p, sym->entry, sym->nsyms) < 0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, NULL, "unable to decode symbol table entries");
+
+    /* Set return value */
+    ret_value = sym;
+
+done:
+    if (buf)
+        H5FL_BLK_FREE(symbol_node,buf);
+    if (!ret_value) {
+        if (sym)
+            if(H5G_node_dest(f, sym)<0)
+                HGOTO_ERROR(H5E_SYM, H5E_CANTFREE, NULL, "unable to destroy symbol table node");
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_flush
+ *
+ * Purpose:	Flush a symbol table node to disk.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 23 1997
+ *
+ * Modifications:
+ *              rky, 1998-08-28
+ *		Only p0 writes metadata to disk.
+ *
+ * 		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ *	Quincey Koziol, 2002-7-180
+ *	Added dxpl parameter to allow more control over I/O from metadata
+ *      cache.
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 18 Sep 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_node_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5G_node_t *sym)
+{
+    uint8_t	*buf = NULL;
+    size_t	size;
+    unsigned	u;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_node_flush);
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(sym);
+
+    /*
+     * Look for dirty entries and set the node dirty flag.
+     */
+    for (u = 0; u < sym->nsyms; u++)
+	if (sym->entry[u].dirty) {
+            /* Set the node's dirty flag */
+            sym->cache_info.is_dirty = TRUE;
+
+            /* Reset the entry's dirty flag */
+            sym->entry[u].dirty=FALSE;
+        } /* end if */
+
+    /*
+     * Write the symbol node to disk.
+     */
+    if (sym->cache_info.is_dirty) {
+        size = H5G_node_size(f);
+
+        /* Allocate temporary buffer */
+        if ((buf=H5FL_BLK_MALLOC(symbol_node,size))==NULL)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+        if (H5G_node_serialize(f, sym, size, buf) < 0)
+            HGOTO_ERROR(H5E_SYM, H5E_CANTSERIALIZE, FAIL, "node serialization failed");
+
+        if (H5F_block_write(f, H5FD_MEM_BTREE, addr, size, dxpl_id, buf) < 0)
+            HGOTO_ERROR(H5E_SYM, H5E_WRITEERROR, FAIL, "unable to write symbol table node to the file");
+        H5FL_BLK_FREE(symbol_node,buf);
+
+        /* Reset the node's dirty flag */
+        sym->cache_info.is_dirty = FALSE;
+    }
+
+    /*
+     * Destroy the symbol node?	 This might happen if the node is being
+     * preempted from the cache.
+     */
+    if (destroy) {
+        if(H5G_node_dest(f, sym)<0)
+	    HGOTO_ERROR(H5E_SYM, H5E_CANTFREE, FAIL, "unable to destroy symbol table node");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5G_node_serialize
+ *
+ * Purpose:     Serialize the symbol table node
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Bill Wendling
+ *              wendling at ncsa.uiuc.edu
+ *              Sept. 16, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_node_serialize(H5F_t *f, H5G_node_t *sym, size_t size, uint8_t *buf)
+{
+    uint8_t    *p;
+    herr_t      ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_node_serialize);
+
+    /* check args */
+    assert(f);
+    assert(sym);
+    assert(buf);
+
+    p = buf;
+
+    /* magic number */
+    HDmemcpy(p, H5G_NODE_MAGIC, H5G_NODE_SIZEOF_MAGIC);
+    p += 4;
+
+    /* version number */
+    *p++ = H5G_NODE_VERS;
+
+    /* reserved */
+    *p++ = 0;
+
+    /* number of symbols */
+    UINT16ENCODE(p, sym->nsyms);
+
+    /* entries */
+    if (H5G_ent_encode_vec(f, &p, sym->entry, sym->nsyms) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTENCODE, FAIL, "can't serialize")
+    HDmemset(p, 0, size - (p - buf));
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_dest
+ *
+ * Purpose:	Destroy a symbol table node in memory.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Jan 15 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_node_dest(H5F_t UNUSED *f, H5G_node_t *sym)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_dest);
+
+    /*
+     * Check arguments.
+     */
+    assert(sym);
+
+    /* Verify that node is clean */
+    assert (sym->cache_info.is_dirty==FALSE);
+
+    if(sym->entry)
+        sym->entry = H5FL_SEQ_FREE(H5G_entry_t,sym->entry);
+    H5FL_FREE(H5G_node_t,sym);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5G_node_dest() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_clear
+ *
+ * Purpose:	Mark a symbol table node in memory as non-dirty.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Mar 20 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_node_clear(H5F_t *f, H5G_node_t *sym, hbool_t destroy)
+{
+    unsigned u;              /* Local index variable */
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_node_clear);
+
+    /*
+     * Check arguments.
+     */
+    assert(sym);
+
+    /* Look for dirty entries and reset their dirty flag.  */
+    for(u = 0; u < sym->nsyms; u++)
+        sym->entry[u].dirty=FALSE;
+    sym->cache_info.is_dirty = FALSE;
+
+    /*
+     * Destroy the symbol node?	 This might happen if the node is being
+     * preempted from the cache.
+     */
+    if (destroy)
+        if (H5G_node_dest(f, sym) < 0)
+	    HGOTO_ERROR(H5E_SYM, H5E_CANTFREE, FAIL, "unable to destroy symbol table node");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5G_node_clear() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_compute_size
+ *
+ * Purpose:	Compute the size in bytes of the specified instance of
+ *		H5G_node_t on disk, and return it in *size_ptr.  On failure
+ *		the value of size_ptr is undefined.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	John Mainzer
+ *		5/13/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_compute_size(const H5F_t *f, const H5G_node_t UNUSED *sym, size_t *size_ptr)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_compute_size);
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(size_ptr);
+
+    *size_ptr = H5G_node_size(f);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* H5G_compute_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_create
+ *
+ * Purpose:	Creates a new empty symbol table node.	This function is
+ *		called by the B-tree insert function for an empty tree.	 It
+ *		is also called internally to split a symbol node with LT_KEY
+ *		and RT_KEY null pointers.
+ *
+ * Return:	Success:	Non-negative.  The address of symbol table
+ *				node is returned through the ADDR_P argument.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 23 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_node_create(H5F_t *f, hid_t dxpl_id, H5B_ins_t UNUSED op, void *_lt_key,
+		void UNUSED *_udata, void *_rt_key, haddr_t *addr_p/*out*/)
+{
+    H5G_node_key_t	   *lt_key = (H5G_node_key_t *) _lt_key;
+    H5G_node_key_t	   *rt_key = (H5G_node_key_t *) _rt_key;
+    H5G_node_t		   *sym = NULL;
+    hsize_t		    size = 0;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_node_create);
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(H5B_INS_FIRST == op);
+
+    if (NULL==(sym = H5FL_CALLOC(H5G_node_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+    size = H5G_node_size(f);
+    if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_BTREE, dxpl_id, size)))
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to allocate file space");
+    sym->cache_info.is_dirty = TRUE;
+    sym->entry = H5FL_SEQ_CALLOC(H5G_entry_t,(2*H5F_SYM_LEAF_K(f)));
+    if (NULL==sym->entry)
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+    if (H5AC_set(f, dxpl_id, H5AC_SNODE, *addr_p, sym) < 0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to cache symbol table leaf node");
+    /*
+     * The left and right symbols in an empty tree are both the
+     * empty string stored at offset zero by the H5G functions. This
+     * allows the comparison functions to work correctly without knowing
+     * that there are no symbols.
+     */
+    if (lt_key)
+        lt_key->offset = 0;
+    if (rt_key)
+        rt_key->offset = 0;
+
+done:
+    if(ret_value<0) {
+        if(sym!=NULL) {
+            if(sym->entry!=NULL)
+                H5FL_SEQ_FREE(H5G_entry_t,sym->entry);
+            H5FL_FREE(H5G_node_t,sym);
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_cmp2
+ *
+ * Purpose:	Compares two keys from a B-tree node (LT_KEY and RT_KEY).
+ *		The UDATA pointer supplies extra data not contained in the
+ *		keys (in this case, the heap address).
+ *
+ * Return:	Success:	negative if LT_KEY is less than RT_KEY.
+ *
+ *				positive if LT_KEY is greater than RT_KEY.
+ *
+ *				zero if LT_KEY and RT_KEY are equal.
+ *
+ *		Failure:	FAIL (same as LT_KEY<RT_KEY)
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 23 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5G_node_cmp2(H5F_t *f, hid_t dxpl_id, void *_lt_key, void *_udata, void *_rt_key)
+{
+    H5G_bt_ud0_t	   *udata = (H5G_bt_ud0_t *) _udata;
+    H5G_node_key_t	   *lt_key = (H5G_node_key_t *) _lt_key;
+    H5G_node_key_t	   *rt_key = (H5G_node_key_t *) _rt_key;
+    const H5HL_t           *heap = NULL;
+    const char		   *s1, *s2;
+    const char		   *base;           /* Base of heap */
+    int		    ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_node_cmp2);
+
+    assert(udata);
+    assert(lt_key);
+    assert(rt_key);
+
+    /* Get base address of heap */
+    if (NULL == (heap = H5HL_protect(f, dxpl_id, udata->heap_addr)))
+	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to protect symbol name");
+
+    base = H5HL_offset_into(f, heap, 0);
+
+    /* Get pointers to string names */
+    s1=base+lt_key->offset;
+    s2=base+rt_key->offset;
+
+    /* Set return value */
+    ret_value = HDstrcmp(s1, s2);
+
+done:
+    if (heap && H5HL_unprotect(f, dxpl_id, heap, udata->heap_addr) < 0)
+	HDONE_ERROR(H5E_SYM, H5E_PROTECT, FAIL, "unable to unprotect symbol name");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_cmp3
+ *
+ * Purpose:	Compares two keys from a B-tree node (LT_KEY and RT_KEY)
+ *		against another key (not necessarily the same type)
+ *		pointed to by UDATA.
+ *
+ * Return:	Success:	negative if the UDATA key is less than
+ *				or equal to the LT_KEY
+ *
+ *				positive if the UDATA key is greater
+ *				than the RT_KEY.
+ *
+ *				zero if the UDATA key falls between
+ *				the LT_KEY (exclusive) and the
+ *				RT_KEY (inclusive).
+ *
+ *		Failure:	FAIL (same as UDATA < LT_KEY)
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 23 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5G_node_cmp3(H5F_t *f, hid_t dxpl_id, void *_lt_key, void *_udata, void *_rt_key)
+{
+    H5G_bt_ud0_t	*udata = (H5G_bt_ud0_t *) _udata;
+    H5G_node_key_t	*lt_key = (H5G_node_key_t *) _lt_key;
+    H5G_node_key_t	*rt_key = (H5G_node_key_t *) _rt_key;
+    const H5HL_t        *heap = NULL;
+    const char		*s;
+    const char          *base;              /* Base of heap */
+    int                  ret_value=0;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_node_cmp3);
+
+    /* Get base address of heap */
+    if (NULL == (heap = H5HL_protect(f, dxpl_id, udata->heap_addr)))
+	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to protect symbol name");
+
+    base = H5HL_offset_into(f, heap, 0);
+
+    /* left side */
+    s=base+lt_key->offset;
+    if (HDstrcmp(udata->name, s) <= 0)
+	HGOTO_DONE(-1);
+
+    /* right side */
+    s=base+rt_key->offset;
+    if (HDstrcmp(udata->name, s) > 0)
+	HGOTO_DONE(1);
+
+done:
+    if (heap && H5HL_unprotect(f, dxpl_id, heap, udata->heap_addr) < 0)
+	HDONE_ERROR(H5E_SYM, H5E_PROTECT, FAIL, "unable to unprotect symbol name");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_found
+ *
+ * Purpose:	The B-tree search engine has found the symbol table node
+ *		which contains the requested symbol if the symbol exists.
+ *		This function should examine that node for the symbol and
+ *		return information about the symbol through the UDATA
+ *		structure which contains the symbol name on function
+ *		entry.
+ *
+ *		If the operation flag in UDATA is H5G_OPER_FIND, then
+ *		the entry is copied from the symbol table to the UDATA
+ *		entry field.  Otherwise the entry is copied from the
+ *		UDATA entry field to the symbol table.
+ *
+ * Return:	Success:	Non-negative if found and data returned through
+ *				the UDATA pointer.
+ *
+ *		Failure:	Negative if not found.
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 23 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_node_found(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED *_lt_key,
+	       void *_udata)
+{
+    H5G_bt_ud1_t	*udata = (H5G_bt_ud1_t *) _udata;
+    H5G_node_t		*sn = NULL;
+    const H5HL_t        *heap = NULL;
+    unsigned		lt = 0, idx = 0, rt;
+    int		        cmp = 1;
+    const char		*s;
+    const char          *base;           /* Base of heap */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_node_found);
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(udata);
+
+    /*
+     * Load the symbol table node for exclusive access.
+     */
+    if (NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_READ)))
+	HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, FAIL, "unable to protect symbol table node");
+
+    /* Get base address of heap */
+    if (NULL == (heap = H5HL_protect(f, dxpl_id, udata->common.heap_addr)))
+	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to protect symbol name");
+
+    base = H5HL_offset_into(f, heap, 0);
+
+    /*
+     * Binary search.
+     */
+    rt = sn->nsyms;
+    while (lt < rt && cmp) {
+	idx = (lt + rt) / 2;
+        s=base+sn->entry[idx].name_off;
+	cmp = HDstrcmp(udata->common.name, s);
+
+	if (cmp < 0)
+	    rt = idx;
+	else
+	    lt = idx + 1;
+    }
+
+    if (H5HL_unprotect(f, dxpl_id, heap, udata->common.heap_addr) < 0)
+	HGOTO_ERROR(H5E_SYM, H5E_PROTECT, FAIL, "unable to unprotect symbol name");
+    heap=NULL; base=NULL;
+
+    if (cmp)
+        HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "not found");
+
+    /*
+     * The caller is querying the symbol entry, copy it into the UDATA
+     * entry field.
+     *
+     * (do a NULL copy, since the entry's name will be constructed later)
+     */
+    if (H5G_ent_copy(udata->ent, &sn->entry[idx], H5G_COPY_NULL)<0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to copy entry");
+
+    /* Leave object in same file as lookup occurs in */
+    /* If a file is opened through different H5Fopen() calls, the symbol
+     * table entry from the B-tree lookup ("&sn->entry[idx]" above) will be
+     * in the "first" file, but the lookup might occur in the second file. - QAK
+     */
+    udata->ent->file = f;
+
+done:
+    if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) < 0)
+	HDONE_ERROR(H5E_SYM, H5E_PROTECT, FAIL, "unable to release symbol table node");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_insert
+ *
+ * Purpose:	The B-tree insertion engine has found the symbol table node
+ *		which should receive the new symbol/address pair.  This
+ *		function adds it to that node unless it already existed.
+ *
+ *		If the node has no room for the symbol then the node is
+ *		split into two nodes.  The original node contains the
+ *		low values and the new node contains the high values.
+ *		The new symbol table entry is added to either node as
+ *		appropriate.  When a split occurs, this function will
+ *		write the maximum key of the low node to the MID buffer
+ *		and return the address of the new node.
+ *
+ *		If the new key is larger than RIGHT then update RIGHT
+ *		with the new key.
+ *
+ * Return:	Success:	An insertion command for the caller, one of
+ *				the H5B_INS_* constants.  The address of the
+ *				new node, if any, is returned through the
+ *				NEW_NODE_P argument.  NEW_NODE_P might not be
+ *				initialized if the return value is
+ *				H5B_INS_NOOP.
+ *
+ *		Failure:	H5B_INS_ERROR, NEW_NODE_P might not be
+ *				initialized.
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 24 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+static H5B_ins_t
+H5G_node_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, void UNUSED *_lt_key,
+		hbool_t UNUSED *lt_key_changed, void *_md_key,
+		void *_udata, void *_rt_key, hbool_t *rt_key_changed,
+		haddr_t *new_node_p)
+{
+    H5G_node_key_t	*md_key = (H5G_node_key_t *) _md_key;
+    H5G_node_key_t	*rt_key = (H5G_node_key_t *) _rt_key;
+    H5G_bt_ud1_t	*udata = (H5G_bt_ud1_t *) _udata;
+
+    H5G_node_t		*sn = NULL, *snrt = NULL;
+    const H5HL_t        *heap = NULL;
+    size_t		offset;			/*offset of name in heap */
+    const char		*s;
+    const char          *base;                  /* Base of heap */
+    unsigned		lt = 0, rt;		/* Binary search cntrs	*/
+    int		        cmp = 1, idx = -1;
+    H5G_node_t		*insert_into = NULL;	/*node that gets new entry*/
+    H5B_ins_t		ret_value = H5B_INS_ERROR;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_node_insert);
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(md_key);
+    assert(rt_key);
+    assert(udata);
+    assert(new_node_p);
+
+    /*
+     * Load the symbol node.
+     */
+    if (NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_INS_ERROR, "unable to protect symbol table node");
+
+    /* Get base address of heap */
+    if (NULL == (heap = H5HL_protect(f, dxpl_id, udata->common.heap_addr)))
+	HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, H5B_INS_ERROR, "unable to protect symbol name");
+
+    base = H5HL_offset_into(f, heap, 0);
+
+    /*
+     * Where does the new symbol get inserted?	We use a binary search.
+     */
+    rt = sn->nsyms;
+    while (lt < rt) {
+	idx = (lt + rt) / 2;
+        s=base+sn->entry[idx].name_off;
+
+	if (0 == (cmp = HDstrcmp(udata->common.name, s))) /*already present */ {
+            HCOMMON_ERROR(H5E_SYM, H5E_CANTINSERT, "symbol is already present in symbol table");
+
+            if (H5HL_unprotect(f, dxpl_id, heap, udata->common.heap_addr) < 0)
+                HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to unprotect symbol name");
+            heap=NULL; base=NULL;
+
+	    HGOTO_DONE(H5B_INS_ERROR);
+        }
+
+	if (cmp < 0)
+	    rt = idx;
+	else
+	    lt = idx + 1;
+    }
+    idx += cmp > 0 ? 1 : 0;
+
+    if (H5HL_unprotect(f, dxpl_id, heap, udata->common.heap_addr) < 0)
+	HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to unprotect symbol name");
+    heap=NULL; base=NULL;
+
+    /*
+     * Add the new name to the heap.
+     */
+    offset = H5HL_insert(f, dxpl_id, udata->common.heap_addr, HDstrlen(udata->common.name)+1,
+			udata->common.name);
+    udata->ent->name_off = offset;
+    if (0==offset || (size_t)(-1)==offset)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINSERT, H5B_INS_ERROR, "unable to insert symbol name into heap");
+    if (sn->nsyms >= 2*H5F_SYM_LEAF_K(f)) {
+	/*
+	 * The node is full.  Split it into a left and right
+	 * node and return the address of the new right node (the
+	 * left node is at the same address as the original node).
+	 */
+	ret_value = H5B_INS_RIGHT;
+
+	/* The right node */
+	if (H5G_node_create(f, dxpl_id, H5B_INS_FIRST, NULL, NULL, NULL,
+			    new_node_p/*out*/)<0)
+	    HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, H5B_INS_ERROR, "unable to split symbol table node");
+
+	if (NULL == (snrt = H5AC_protect(f, dxpl_id, H5AC_SNODE, *new_node_p, NULL, NULL, H5AC_WRITE)))
+	    HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_INS_ERROR, "unable to split symbol table node");
+
+	HDmemcpy(snrt->entry, sn->entry + H5F_SYM_LEAF_K(f),
+		 H5F_SYM_LEAF_K(f) * sizeof(H5G_entry_t));
+	snrt->nsyms = H5F_SYM_LEAF_K(f);
+	snrt->cache_info.is_dirty = TRUE;
+
+	/* The left node */
+	HDmemset(sn->entry + H5F_SYM_LEAF_K(f), 0,
+		 H5F_SYM_LEAF_K(f) * sizeof(H5G_entry_t));
+	sn->nsyms = H5F_SYM_LEAF_K(f);
+	sn->cache_info.is_dirty = TRUE;
+
+	/* The middle key */
+	md_key->offset = sn->entry[sn->nsyms - 1].name_off;
+
+	/* Where to insert the new entry? */
+	if (idx <= (int)H5F_SYM_LEAF_K(f)) {
+	    insert_into = sn;
+	    if (idx == (int)H5F_SYM_LEAF_K(f))
+		md_key->offset = offset;
+	} else {
+	    idx -= H5F_SYM_LEAF_K(f);
+	    insert_into = snrt;
+	    if (idx == (int)H5F_SYM_LEAF_K (f)) {
+		rt_key->offset = offset;
+		*rt_key_changed = TRUE;
+	    }
+	}
+    } else {
+	/* Where to insert the new entry? */
+	ret_value = H5B_INS_NOOP;
+	sn->cache_info.is_dirty = TRUE;
+	insert_into = sn;
+	if (idx == (int)sn->nsyms) {
+	    rt_key->offset = offset;
+	    *rt_key_changed = TRUE;
+	}
+    }
+
+    /* Move entries down to make room for new entry */
+    HDmemmove(insert_into->entry + idx + 1,
+	      insert_into->entry + idx,
+	      (insert_into->nsyms - idx) * sizeof(H5G_entry_t));
+
+    /* Copy new entry into table */
+    /* (use H5G_COPY_NULL because we don't track the object names in the table) */
+    H5G_ent_copy(&(insert_into->entry[idx]), udata->ent, H5G_COPY_NULL);
+
+    /* Flag entry as dirty */
+    insert_into->entry[idx].dirty = TRUE;
+
+    /* Increment # of symbols in table */
+    insert_into->nsyms += 1;
+
+done:
+    if (snrt && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, *new_node_p, snrt, FALSE) < 0)
+	HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to release symbol table node");
+    if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) < 0)
+	HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to release symbol table node");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_remove
+ *
+ * Purpose:	The B-tree removal engine has found the symbol table node
+ *		which should contain the name which is being removed.  This
+ *		function removes the name from the symbol table and
+ *		decrements the link count on the object to which the name
+ *		points.
+ *
+ *              If the udata->name parameter is set to NULL, then remove
+ *              all entries in this symbol table node.  This only occurs
+ *              during the deletion of the entire group, so don't bother
+ *              freeing individual name entries in the local heap, the group's
+ *              symbol table removal code will just free the entire local
+ *              heap eventually.  Do reduce the link counts for each object
+ *              however.
+ *
+ * Return:	Success:	If all names are removed from the symbol
+ *				table node then H5B_INS_REMOVE is returned;
+ *				otherwise H5B_INS_NOOP is returned.
+ *
+ *		Failure:	H5B_INS_ERROR
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, September 24, 1998
+ *
+ * Modifications:
+ *	Robb Matzke, 1999-07-28
+ *	The ADDR argument is passed by value.
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 18 Sep 2002
+ *      Added `id to name' support.
+ *
+ *	Quincey Koziol, 2003-03-22
+ *	Added support for deleting all the entries at once.
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5B_ins_t
+H5G_node_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_lt_key/*in,out*/,
+		hbool_t UNUSED *lt_key_changed/*out*/,
+		void *_udata/*in,out*/, void *_rt_key/*in,out*/,
+		hbool_t *rt_key_changed/*out*/)
+{
+    H5G_node_key_t	*lt_key = (H5G_node_key_t *)_lt_key;
+    H5G_node_key_t	*rt_key = (H5G_node_key_t *)_rt_key;
+    H5G_bt_ud2_t	*udata = (H5G_bt_ud2_t *)_udata;
+    H5G_node_t		*sn = NULL;
+    const H5HL_t        *heap = NULL;
+    unsigned		lt=0, rt, idx=0;
+    int		        cmp=1;
+    const char		*s = NULL;
+    const char          *base;              /* Base of heap */
+    H5B_ins_t		ret_value = H5B_INS_ERROR;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5G_node_remove);
+
+    /* Check arguments */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(lt_key);
+    assert(rt_key);
+    assert(udata);
+
+    /* Load the symbol table */
+    if (NULL==(sn=H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_INS_ERROR, "unable to protect symbol table node");
+
+    /* "Normal" removal of a single entry from the symbol table node */
+    if(udata->common.name!=NULL) {
+        size_t len=0;
+        hbool_t found;     /* Indicate that the string was found */
+
+        /* Get base address of heap */
+        if (NULL == (heap = H5HL_protect(f, dxpl_id, udata->common.heap_addr)))
+            HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, H5B_INS_ERROR, "unable to protect symbol name");
+
+        base = H5HL_offset_into(f, heap, 0);
+
+        /* Find the name with a binary search */
+        rt = sn->nsyms;
+        while (lt<rt && cmp) {
+            idx = (lt+rt)/2;
+            s=base+sn->entry[idx].name_off;
+            cmp = HDstrcmp(udata->common.name, s);
+            if (cmp<0) {
+                rt = idx;
+            } else {
+                lt = idx+1;
+            }
+        }
+
+        if (H5HL_unprotect(f, dxpl_id, heap, udata->common.heap_addr) < 0)
+            HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to unprotect symbol name");
+        heap=NULL; base=NULL;
+
+        if (cmp)
+            HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, H5B_INS_ERROR, "not found");
+
+        if (H5G_CACHED_SLINK==sn->entry[idx].type) {
+            /* Remove the symbolic link value */
+            if (NULL == (heap = H5HL_protect(f, dxpl_id, udata->common.heap_addr)))
+                HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, H5B_INS_ERROR, "unable to protect symbol name");
+
+            s = H5HL_offset_into(f, heap, sn->entry[idx].cache.slink.lval_offset);
+            if (s) {
+                len=HDstrlen(s)+1;
+                found=1;
+            } /* end if */
+            else
+                found=0;
+
+            if (H5HL_unprotect(f, dxpl_id, heap, udata->common.heap_addr) < 0)
+                HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to unprotect symbol name");
+            heap=NULL; s=NULL;
+
+            if (found)
+                H5HL_remove(f, dxpl_id, udata->common.heap_addr, sn->entry[idx].cache.slink.lval_offset, len);
+
+            H5E_clear(); /* no big deal */
+        } else {
+            /* Decrement the reference count, if requested */
+            if(udata->adj_link) {
+                HDassert(H5F_addr_defined(sn->entry[idx].header));
+                if (H5O_link(sn->entry+idx, -1, dxpl_id)<0)
+                    HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, H5B_INS_ERROR, "unable to decrement object link count")
+            } /* end if */
+        }
+
+        /* Remove the name from the local heap */
+        if (NULL == (heap = H5HL_protect(f, dxpl_id, udata->common.heap_addr)))
+            HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, H5B_INS_ERROR, "unable to protect symbol name");
+
+        s = H5HL_offset_into(f, heap, sn->entry[idx].name_off);
+
+        if (s) {
+            len=HDstrlen(s)+1;
+            found=1;
+        } /* end if */
+        else
+            found=0;
+
+        if (H5HL_unprotect(f, dxpl_id, heap, udata->common.heap_addr) < 0)
+            HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to unprotect symbol name");
+        heap=NULL; s=NULL;
+
+        if (found)
+            H5HL_remove(f, dxpl_id, udata->common.heap_addr, sn->entry[idx].name_off, len);
+
+        H5E_clear(); /* no big deal */
+
+        /* Remove the entry from the symbol table node */
+        if(1==sn->nsyms) {
+            /*
+             * We are about to remove the only symbol in this node. Copy the left
+             * key to the right key and mark the right key as dirty.  Free this
+             * node and indicate that the pointer to this node in the B-tree
+             * should be removed also.
+             */
+            assert(0==idx);
+            *rt_key = *lt_key;
+            *rt_key_changed = TRUE;
+            sn->nsyms = 0;
+            sn->cache_info.is_dirty = TRUE;
+            if (H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, addr, (hsize_t)H5G_node_size(f))<0
+                    || H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, TRUE)<0) {
+                sn = NULL;
+                HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to free symbol table node");
+            }
+            sn = NULL;
+            ret_value = H5B_INS_REMOVE;
+
+        } else if (0==idx) {
+            /*
+             * We are about to remove the left-most entry from the symbol table
+             * node but there are other entries to the right.  No key values
+             * change.
+             */
+            sn->nsyms -= 1;
+            sn->cache_info.is_dirty = TRUE;
+            HDmemmove(sn->entry+idx, sn->entry+idx+1,
+                      (sn->nsyms-idx)*sizeof(H5G_entry_t));
+            ret_value = H5B_INS_NOOP;
+
+        } else if (idx+1==sn->nsyms) {
+            /*
+             * We are about to remove the right-most entry from the symbol table
+             * node but there are other entries to the left.  The right key
+             * should be changed to reflect the new right-most entry.
+             */
+            sn->nsyms -= 1;
+            sn->cache_info.is_dirty = TRUE;
+            rt_key->offset = sn->entry[sn->nsyms-1].name_off;
+            *rt_key_changed = TRUE;
+            ret_value = H5B_INS_NOOP;
+
+        } else {
+            /*
+             * We are about to remove an entry from the middle of a symbol table
+             * node.
+             */
+            sn->nsyms -= 1;
+            sn->cache_info.is_dirty = TRUE;
+            HDmemmove(sn->entry+idx, sn->entry+idx+1,
+                      (sn->nsyms-idx)*sizeof(H5G_entry_t));
+            ret_value = H5B_INS_NOOP;
+        }
+    } /* end if */
+    /* Remove all entries from node, during B-tree deletion */
+    else {
+        /* Reduce the link count for all entries in this node */
+        for(idx=0; idx<sn->nsyms; idx++) {
+            if (H5G_CACHED_SLINK!=sn->entry[idx].type) {
+                /* Decrement the reference count, if requested */
+                if(udata->adj_link) {
+                    HDassert(H5F_addr_defined(sn->entry[idx].header));
+                    if (H5O_link(sn->entry+idx, -1, dxpl_id)<0)
+                        HGOTO_ERROR(H5E_SYM, H5E_CANTDELETE, H5B_INS_ERROR, "unable to decrement object link count")
+                } /* end if */
+            } /* end if */
+        } /* end for */
+
+        /*
+         * We are about to remove all the symbols in this node. Copy the left
+         * key to the right key and mark the right key as dirty.  Free this
+         * node and indicate that the pointer to this node in the B-tree
+         * should be removed also.
+         */
+        *rt_key = *lt_key;
+        *rt_key_changed = TRUE;
+        sn->nsyms = 0;
+        sn->cache_info.is_dirty = TRUE;
+        if (H5MF_xfree(f, H5FD_MEM_BTREE, dxpl_id, addr, (hsize_t)H5G_node_size(f))<0
+                || H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, TRUE)<0) {
+            sn = NULL;
+            HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to free symbol table node");
+        }
+        sn = NULL;
+        ret_value = H5B_INS_REMOVE;
+    } /* end else */
+
+done:
+    if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE)<0)
+	HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_INS_ERROR, "unable to release symbol table node");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_iterate
+ *
+ * Purpose:	This function gets called during a group iterate operation.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 24 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ *		Quincey Koziol, 2002-04-22
+ *		Changed to callback from H5B_iterate
+ *-------------------------------------------------------------------------
+ */
+int
+H5G_node_iterate (H5F_t *f, hid_t dxpl_id, const void UNUSED *_lt_key, haddr_t addr,
+		  const void UNUSED *_rt_key, void *_udata)
+{
+    H5G_bt_it_ud1_t	*udata = (H5G_bt_it_ud1_t *)_udata;
+    H5G_node_t		*sn = NULL;
+    const H5HL_t        *heap = NULL;
+    unsigned		nsyms;                  /* # of symbols in node */
+    size_t		n, *name_off=NULL;
+    const char		*name;
+    char		buf[1024], *s;
+    unsigned		u;                      /* Local index variable */
+    int	                ret_value;
+
+    FUNC_ENTER_NOAPI(H5G_node_iterate, H5B_ITER_ERROR);
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(udata);
+
+    /*
+     * Save information about the symbol table node since we can't lock it
+     * because we're about to call an application function.
+     */
+    if (NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_READ)))
+	HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_ITER_ERROR, "unable to load symbol table node");
+    nsyms = sn->nsyms;
+    if (NULL==(name_off = H5FL_SEQ_MALLOC(size_t, (size_t)nsyms)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, H5B_ITER_ERROR, "memory allocation failed");
+    for(u = 0; u < nsyms; u++)
+        name_off[u] = sn->entry[u].name_off;
+
+    if (H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) != SUCCEED) {
+        sn = NULL;
+        HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to release object header");
+    }
+
+    sn=NULL;    /* Make certain future references will be caught */
+
+    /*
+     * Iterate over the symbol table node entries.
+     */
+    for(u = 0, ret_value = H5B_ITER_CONT; u < nsyms && !ret_value; u++) {
+        if (udata->skip>0) {
+            --udata->skip;
+        } else {
+            if (NULL == (heap = H5HL_protect(f, dxpl_id, udata->heap_addr)))
+                HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, H5B_ITER_ERROR, "unable to protect symbol name");
+
+            name = H5HL_offset_into(f, heap, name_off[u]);
+            assert (name);
+            n = HDstrlen (name);
+
+            if (n+1>sizeof(buf)) {
+                if (NULL==(s = H5MM_malloc (n+1)))
+                    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, H5B_ITER_ERROR, "memory allocation failed");
+            } else {
+                s = buf;
+            }
+            HDstrcpy (s, name);
+
+            if (H5HL_unprotect(f, dxpl_id, heap, udata->heap_addr) < 0)
+                HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to unprotect symbol name");
+            heap=NULL; name=NULL;
+
+            ret_value = (udata->op)(udata->group_id, s, udata->op_data);
+            if (s!=buf)
+                H5MM_xfree (s);
+        }
+
+        /* Increment the number of entries passed through */
+        /* (whether we skipped them or not) */
+        udata->final_ent++;
+    }
+    if (ret_value<0)
+        HERROR (H5E_SYM, H5E_CANTNEXT, "iteration operator failed");
+
+done:
+    if (heap && H5HL_unprotect(f, dxpl_id, heap, udata->heap_addr) < 0)
+        HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to unprotect symbol name");
+
+    if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) != SUCCEED)
+        HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to release object header");
+
+    if(name_off)
+        H5FL_SEQ_FREE(size_t,name_off);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_sumup
+ *
+ * Purpose:	This function gets called during a group iterate operation
+ *              to return total number of members in the group.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:  Raymond Lu
+ *              Nov 20, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5G_node_sumup(H5F_t *f, hid_t dxpl_id, const void UNUSED *_lt_key, haddr_t addr,
+		  const void UNUSED *_rt_key, void *_udata)
+{
+    hsize_t	        *num_objs = (hsize_t *)_udata;
+    H5G_node_t		*sn = NULL;
+    int                  ret_value = H5B_ITER_CONT;
+
+    FUNC_ENTER_NOAPI(H5G_node_sumup, H5B_ITER_ERROR);
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(num_objs);
+
+    /* Find the object node and add the number of symbol entries. */
+    if (NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_READ)))
+	HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_ITER_ERROR, "unable to load symbol table node");
+
+    *num_objs += sn->nsyms;
+
+done:
+    if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) != SUCCEED)
+        HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_name
+ *
+ * Purpose:	This function gets called during a group iterate operation
+ *              to return object name by giving idx.
+ *
+ * Return:	0 if object isn't found in this node; 1 if object is found;
+ *              Negative on failure
+ *
+ * Programmer:  Raymond Lu
+ *              Nov 20, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5G_node_name(H5F_t *f, hid_t dxpl_id, const void UNUSED *_lt_key, haddr_t addr,
+		  const void UNUSED *_rt_key, void *_udata)
+{
+    H5G_bt_it_ud2_t	*udata = (H5G_bt_it_ud2_t *)_udata;
+    const H5HL_t        *heap = NULL;
+    size_t		name_off;
+    hsize_t             loc_idx;
+    const char		*name;
+    H5G_node_t		*sn = NULL;
+    int                 ret_value = H5B_ITER_CONT;
+
+    FUNC_ENTER_NOAPI(H5G_node_name, H5B_ITER_ERROR);
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(udata);
+
+    if (NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_READ)))
+	HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_ITER_ERROR, "unable to load symbol table node");
+
+    /* Find the node, locate the object symbol table entry and retrieve the name */
+    if(udata->idx >= udata->num_objs && udata->idx < (udata->num_objs + sn->nsyms)) {
+        loc_idx = udata->idx - udata->num_objs;
+        name_off = sn->entry[loc_idx].name_off;
+
+        if (NULL == (heap = H5HL_protect(f, dxpl_id, udata->heap_addr)))
+            HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, H5B_ITER_ERROR, "unable to protect symbol name");
+
+        name = H5HL_offset_into(f, heap, name_off);
+        assert (name);
+        udata->name = H5MM_strdup (name);
+        assert(udata->name);
+
+        if (H5HL_unprotect(f, dxpl_id, heap, udata->heap_addr) < 0)
+            HGOTO_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to unprotect symbol name");
+        heap=NULL; name=NULL;
+
+        ret_value = H5B_ITER_STOP;
+    } else {
+        udata->num_objs += sn->nsyms;
+    }
+
+done:
+    if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) != SUCCEED)
+        HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_type
+ *
+ * Purpose:	This function gets called during a group iterate operation
+ *              to return object type by given idx.
+ *
+ * Return:	0 if object isn't found in this node; 1 if found;
+ *              Negative on failure
+ *
+ * Programmer:  Raymond Lu
+ *              Nov 20, 2002
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5G_node_type(H5F_t *f, hid_t dxpl_id, const void UNUSED *_lt_key, haddr_t addr,
+		  const void UNUSED *_rt_key, void *_udata)
+{
+    H5G_bt_it_ud3_t	*udata = (H5G_bt_it_ud3_t*)_udata;
+    hsize_t             loc_idx;
+    H5G_node_t		*sn = NULL;
+    int                 ret_value = H5B_ITER_CONT;
+
+    FUNC_ENTER_NOAPI(H5G_node_type, H5B_ITER_ERROR);
+
+    /* Check arguments. */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(udata);
+
+    /* Find the node, locate the object symbol table entry and retrieve the type */
+    if (NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_READ)))
+	HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, H5B_ITER_ERROR, "unable to load symbol table node");
+
+    if(udata->idx >= udata->num_objs && udata->idx < (udata->num_objs + sn->nsyms)) {
+        loc_idx = udata->idx - udata->num_objs;
+        udata->type = H5G_get_type(&(sn->entry[loc_idx]), dxpl_id);
+        ret_value = H5B_ITER_STOP;
+    } else {
+        udata->num_objs += sn->nsyms;
+    }
+
+done:
+    if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) != SUCCEED)
+        HDONE_ERROR(H5E_SYM, H5E_PROTECT, H5B_ITER_ERROR, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_init
+ *
+ * Purpose:	This function gets called during a file opening to initialize
+ *              global information about group B-tree nodes for file.
+ *
+ * Return:	Non-negative on success
+ *              Negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *              Jul  5, 2004
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_node_init(H5F_t *f)
+{
+    H5B_shared_t *shared;               /* Shared B-tree node info */
+    size_t	u;                      /* Local index variable */
+    herr_t      ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_node_init, FAIL);
+
+    /* Check arguments. */
+    assert(f);
+
+    /* Allocate space for the shared structure */
+    if(NULL==(shared=H5FL_MALLOC(H5B_shared_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for shared B-tree info")
+
+    /* Set up the "global" information for this file's groups */
+    shared->type= H5B_SNODE;
+    shared->two_k=2*H5F_KVALUE(f,H5B_SNODE);
+    shared->sizeof_rkey = H5G_node_sizeof_rkey(f, NULL);
+    assert(shared->sizeof_rkey);
+    shared->sizeof_rnode = H5B_nodesize(f, shared, &shared->sizeof_keys);
+    assert(shared->sizeof_rnode);
+    if(NULL==(shared->page=H5FL_BLK_MALLOC(grp_page,shared->sizeof_rnode)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree page")
+#ifdef H5_USING_PURIFY
+HDmemset(shared->page,0,shared->sizeof_rnode);
+#endif /* H5_USING_PURIFY */
+    if(NULL==(shared->nkey=H5FL_SEQ_MALLOC(size_t,(size_t)(2*H5F_KVALUE(f,H5B_SNODE)+1))))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for B-tree page")
+
+    /* Initialize the offsets into the native key buffer */
+    for(u=0; u<(2*H5F_KVALUE(f,H5B_SNODE)+1); u++)
+        shared->nkey[u]=u*H5B_SNODE->sizeof_nkey;
+
+    /* Make shared B-tree info reference counted */
+    if(NULL==(f->shared->grp_btree_shared=H5RC_create(shared,H5G_node_shared_free)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't create ref-count wrapper for shared B-tree info")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5G_node_init() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_close
+ *
+ * Purpose:	This function gets called during a file close to shutdown
+ *              global information about group B-tree nodes for file.
+ *
+ * Return:	Non-negative on success
+ *              Negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *              Jul  5, 2004
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_node_close(const H5F_t *f)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_close)
+
+    /* Check arguments. */
+    assert(f);
+
+    /* Free the raw B-tree node buffer */
+    if (H5F_GRP_BTREE_SHARED(f))
+        H5RC_DEC(H5F_GRP_BTREE_SHARED(f));
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5G_node_close */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_shared_free
+ *
+ * Purpose:	Free B-tree shared info
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July  8, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5G_node_shared_free (void *_shared)
+{
+    H5B_shared_t *shared = (H5B_shared_t *)_shared;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5G_node_shared_free)
+
+    /* Free the raw B-tree node buffer */
+    H5FL_BLK_FREE(grp_page,shared->page);
+
+    /* Free the B-tree native key offsets buffer */
+    H5FL_SEQ_FREE(size_t,shared->nkey);
+
+    /* Free the shared B-tree info */
+    H5FL_FREE(H5B_shared_t,shared);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5G_node_shared_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_node_debug
+ *
+ * Purpose:	Prints debugging information about a symbol table node
+ *		or a B-tree node for a symbol table B-tree.
+ *
+ * Return:	0(zero) on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  4 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR and HEAP arguments are passed by value.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_node_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
+	       int fwidth, haddr_t heap)
+{
+    H5G_node_t		   *sn = NULL;
+    const char		   *s;
+    const H5HL_t           *heap_ptr = NULL;
+    unsigned		    u;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_node_debug, FAIL);
+
+    /*
+     * Check arguments.
+     */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    /*
+     * If we couldn't load the symbol table node, then try loading the
+     * B-tree node.
+     */
+    if (NULL == (sn = H5AC_protect(f, dxpl_id, H5AC_SNODE, addr, NULL, NULL, H5AC_READ))) {
+        H5G_bt_ud0_t	udata;		/*data to pass through B-tree	*/
+
+	H5E_clear(); /*discard that error */
+        udata.heap_addr = heap;
+	if ( H5B_debug(f, dxpl_id, addr, stream, indent, fwidth, H5B_SNODE, &udata) < 0)
+	    HGOTO_ERROR(H5E_SYM, H5E_CANTLOAD, FAIL, "unable to debug B-tree node");
+	HGOTO_DONE(SUCCEED);
+    }
+    fprintf(stream, "%*sSymbol Table Node...\n", indent, "");
+    fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+	    "Dirty:",
+	    sn->cache_info.is_dirty ? "Yes" : "No");
+    fprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+	    "Size of Node (in bytes):", (unsigned)H5G_node_size(f));
+    fprintf(stream, "%*s%-*s %u of %u\n", indent, "", fwidth,
+	    "Number of Symbols:",
+	    sn->nsyms, (unsigned)(2 * H5F_SYM_LEAF_K(f)));
+
+    indent += 3;
+    fwidth = MAX(0, fwidth - 3);
+    for (u = 0; u < sn->nsyms; u++) {
+	fprintf(stream, "%*sSymbol %u:\n", indent - 3, "", u);
+
+	if (heap>0 && H5F_addr_defined(heap)) {
+            if (NULL == (heap_ptr = H5HL_protect(f, dxpl_id, heap)))
+                HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "unable to protect symbol name");
+
+            s = H5HL_offset_into(f, heap_ptr, sn->entry[u].name_off);
+
+            if (s)
+                fprintf(stream, "%*s%-*s `%s'\n", indent, "", fwidth, "Name:", s);
+
+            if (H5HL_unprotect(f, dxpl_id, heap_ptr, heap) < 0)
+                HGOTO_ERROR(H5E_SYM, H5E_PROTECT, FAIL, "unable to unprotect symbol name");
+            heap_ptr=NULL; s=NULL;
+	}
+        else
+            fprintf(stream, "%*s%-*s\n", indent, "", fwidth, "Warning: Invalid heap address given, name not displayed!");
+
+	H5G_ent_debug(f, dxpl_id, sn->entry + u, stream, indent, fwidth, heap);
+    }
+
+done:
+    if (sn && H5AC_unprotect(f, dxpl_id, H5AC_SNODE, addr, sn, FALSE) < 0)
+	HDONE_ERROR(H5E_SYM, H5E_PROTECT, FAIL, "unable to release symbol table node");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Gpkg.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Gpkg.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Gpkg.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,213 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Robb Matzke <matzke at llnl.gov>
+ *             Thursday, September 18, 1997
+ *
+ * Purpose:     This file contains declarations which are visible
+ *              only within the H5G package. Source files outside the
+ *              H5G package should include H5Gprivate.h instead.
+ */
+#ifndef H5G_PACKAGE
+#error "Do not include this file outside the H5G package!"
+#endif
+
+#ifndef _H5Gpkg_H
+#define _H5Gpkg_H
+
+/* Get package's private header */
+#include "H5Gprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5ACprivate.h"	/* Metadata cache			  */
+#include "H5Oprivate.h"		/* Object headers		  	*/
+
+/*
+ * A symbol table node is a collection of symbol table entries.  It can
+ * be thought of as the lowest level of the B-link tree that points to
+ * a collection of symbol table entries that belong to a specific symbol
+ * table or group.
+ */
+typedef struct H5G_node_t {
+    H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
+                            /* first field in structure */
+    unsigned nsyms;                     /*number of symbols                  */
+    H5G_entry_t *entry;                 /*array of symbol table entries      */
+} H5G_node_t;
+
+/*
+ * Shared information for all open group objects
+ */
+struct H5G_shared_t {
+    int fo_count;                   /* open file object count */
+    hbool_t mounted;                /* Group is mount point */
+};
+
+/*
+ * A group handle passed around through layers of the library within and
+ * above the H5G layer.
+ */
+struct H5G_t {
+    H5G_shared_t* shared;               /*shared file object data */
+    H5G_entry_t ent;                    /*info about the group    */
+};
+
+/*
+ * Common data exchange structure for symbol table nodes.  This structure is
+ * passed through the B-link tree layer to the methods for the objects
+ * to which the B-link tree points.
+ */
+typedef struct H5G_bt_ud_common_t {
+    /* downward */
+    const char  *name;                  /*points to temporary memory         */
+    haddr_t     heap_addr;              /*symbol table heap address          */
+} H5G_bt_ud_common_t;
+
+/*
+ * Data exchange structure for symbol table nodes.  This structure is
+ * passed through the B-link tree layer to the methods for the objects
+ * to which the B-link tree points for operations which require no
+ * additional information.
+ *
+ * (Just an alias for the "common" info).
+ */
+typedef H5G_bt_ud_common_t H5G_bt_ud0_t;
+
+/*
+ * Data exchange structure for symbol table nodes.  This structure is
+ * passed through the B-link tree layer to the methods for the objects
+ * to which the B-link tree points.
+ */
+typedef struct H5G_bt_ud1_t {
+    /* downward */
+    H5G_bt_ud_common_t common;          /* Common info for B-tree user data (must be first) */
+
+    /* downward for INSERT, upward for FIND */
+    H5G_entry_t *ent;                   /*entry to insert into table         */
+} H5G_bt_ud1_t;
+
+/*
+ * Data exchange structure for symbol table nodes.  This structure is
+ * passed through the B-link tree layer to the methods for the objects
+ * to which the B-link tree points.
+ */
+typedef struct H5G_bt_ud2_t {
+    /* downward */
+    H5G_bt_ud_common_t common;          /* Common info for B-tree user data (must be first) */
+    hbool_t adj_link;                   /* Whether to adjust the link count on objects */
+
+    /* upward */
+} H5G_bt_ud2_t;
+
+/*
+ * Data exchange structure to pass through the B-tree layer for the
+ * H5B_iterate function.
+ */
+typedef struct H5G_bt_it_ud1_t {
+    /* downward */
+    hid_t	group_id;	/*group id to pass to iteration operator     */
+    haddr_t     heap_addr;      /*symbol table heap address                  */
+    H5G_iterate_t op;		/*iteration operator			     */
+    void	*op_data;	/*user-defined operator data		     */
+    int		skip;		/*initial entries to skip		     */
+
+    /* upward */
+    int		final_ent;	/*final entry looked at                      */
+} H5G_bt_it_ud1_t;
+
+/*
+ * Data exchange structure to pass through the B-tree layer for the
+ * H5B_iterate function.
+ */
+typedef struct H5G_bt_it_ud2_t {
+    /* downward */
+    haddr_t     heap_addr;      /*symbol table heap address                  */
+    hsize_t     idx;            /*index of group member to be queried        */
+    hsize_t     num_objs;       /*the number of objects having been traversed*/
+
+    /* upward */
+    char         *name;         /*member name to be returned                 */
+} H5G_bt_it_ud2_t;
+
+/*
+ * Data exchange structure to pass through the B-tree layer for the
+ * H5B_iterate function.
+ */
+typedef struct H5G_bt_it_ud3_t {
+    /* downward */
+    hsize_t     idx;            /*index of group member to be queried        */
+    hsize_t     num_objs;       /*the number of objects having been traversed*/
+
+    /* upward */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int    type;                /*member type to be returned                 */
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    H5G_obj_t    type;          /*member type to be returned                 */
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+} H5G_bt_it_ud3_t;
+
+/*
+ * Data exchange structure to pass through the B-tree layer for the
+ * H5B_iterate function.
+ */
+typedef struct H5G_bt_it_ud4_t {
+    /* downward */
+    haddr_t     heap_addr;      /*symbol table heap address                  */
+    H5G_entry_t *grp_ent;       /*entry of group                             */
+
+    /* upward */
+} H5G_bt_it_ud4_t;
+
+/*
+ * This is the class identifier to give to the B-tree functions.
+ */
+H5_DLLVAR H5B_class_t H5B_SNODE[1];
+
+/* The cache subclass */
+H5_DLLVAR const H5AC_class_t H5AC_SNODE[1];
+
+/*
+ * Functions that understand symbol tables but not names.  The
+ * functions that understand names are exported to the rest of
+ * the library and appear in H5Gprivate.h.
+ */
+H5_DLL herr_t H5G_stab_create(H5F_t *f, hid_t dxpl_id, size_t size_hint,
+			       H5G_entry_t *ent/*out*/);
+H5_DLL herr_t H5G_stab_find(H5G_entry_t *grp_ent, const char *name,
+			     H5G_entry_t *obj_ent/*out*/, hid_t dxpl_id);
+H5_DLL herr_t H5G_stab_insert(H5G_entry_t *grp_ent, const char *name,
+			       H5G_entry_t *obj_ent, hbool_t inc_link, hid_t dxpl_id);
+H5_DLL herr_t H5G_stab_delete(H5F_t *f, hid_t dxpl_id, const H5O_stab_t *stab, hbool_t adj_link);
+H5_DLL herr_t H5G_stab_remove(H5G_entry_t *grp_ent, const char *name, hid_t dxpl_id);
+
+/*
+ * Functions that understand symbol table entries.
+ */
+H5_DLL herr_t H5G_ent_decode_vec(H5F_t *f, const uint8_t **pp,
+				  H5G_entry_t *ent, unsigned n);
+H5_DLL herr_t H5G_ent_encode_vec(H5F_t *f, uint8_t **pp,
+				  const H5G_entry_t *ent, unsigned n);
+H5_DLL herr_t H5G_ent_set_name(H5G_entry_t *loc, H5G_entry_t *obj, const char *name);
+
+/* Functions that understand symbol table nodes */
+H5_DLL int H5G_node_iterate (H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
+		     const void *_rt_key, void *_udata);
+H5_DLL int H5G_node_sumup(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
+		     const void *_rt_key, void *_udata);
+H5_DLL int H5G_node_name(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
+		     const void *_rt_key, void *_udata);
+H5_DLL int H5G_node_type(H5F_t *f, hid_t dxpl_id, const void *_lt_key, haddr_t addr,
+		     const void *_rt_key, void *_udata);
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Gprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Gprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Gprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,187 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Gprivate.h
+ *                      Jul 11 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             Library-visible declarations.
+ *
+ * Modifications:       Aug 22, 2002
+ *                      Pedro Vicente <pvn at ncsa.uiuc.edu>
+ *                      Added 'names' field to H5G_entry_t
+ *                      Added H5G_replace_name
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#ifndef _H5Gprivate_H
+#define _H5Gprivate_H
+
+/* Include package's public header */
+#include "H5Gpublic.h"
+
+/* Private headers needed by this file */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Bprivate.h"		/* B-trees				*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5RSprivate.h"        /* Reference-counted strings            */
+
+/*
+ * Define this to enable debugging.
+ */
+#ifdef NDEBUG
+#  undef H5G_DEBUG
+#endif
+
+#define H5G_NODE_MAGIC  "SNOD"          /*symbol table node magic number     */
+#define H5G_NODE_SIZEOF_MAGIC 4         /*sizeof symbol node magic number    */
+#define H5G_NO_CHANGE   (-1)            /*see H5G_ent_modified()             */
+#define H5G_NLINKS	16		/*max symlinks to follow per lookup  */
+
+/*
+ * The disk size for a symbol table entry...
+ */
+#define H5G_SIZEOF_SCRATCH      16
+#define H5G_SIZEOF_ENTRY(F)                                                   \
+   (H5F_SIZEOF_SIZE(F) +        /*offset of name into heap              */    \
+    H5F_SIZEOF_ADDR(F) +        /*address of object header              */    \
+    4 +                         /*entry type                            */    \
+    4 +				/*reserved				*/    \
+    H5G_SIZEOF_SCRATCH)         /*scratch pad space                     */
+
+/*
+ * Various types of object header information can be cached in a symbol
+ * table entry (it's normal home is the object header to which the entry
+ * points).  This datatype determines what (if anything) is cached in the
+ * symbol table entry.
+ */
+typedef enum H5G_type_t {
+    H5G_CACHED_ERROR	= -1, 	/*force enum to be signed		     */
+    H5G_NOTHING_CACHED  = 0,    /*nothing is cached, must be 0               */
+    H5G_CACHED_STAB     = 1,    /*symbol table, `stab'                       */
+    H5G_CACHED_SLINK	= 2, 	/*symbolic link				     */
+
+    H5G_NCACHED         = 3     /*THIS MUST BE LAST                          */
+} H5G_type_t;
+
+/*
+ * A symbol table entry caches these parameters from object header
+ * messages...  The values are entered into the symbol table when an object
+ * header is created (by hand) and are extracted from the symbol table with a
+ * callback function registered in H5O_init_interface().  Be sure to update
+ * H5G_ent_decode(), H5G_ent_encode(), and H5G_ent_debug() as well.
+ */
+typedef union H5G_cache_t {
+    struct {
+        haddr_t btree_addr;             /*file address of symbol table B-tree*/
+        haddr_t heap_addr;              /*file address of stab name heap     */
+    } stab;
+
+    struct {
+	size_t	lval_offset;		/*link value offset		     */
+    } slink;
+} H5G_cache_t;
+
+/*
+ * A symbol table entry.  The two important fields are `name_off' and
+ * `header'.  The remaining fields are used for caching information that
+ * also appears in the object header to which this symbol table entry
+ * points.
+ */
+typedef struct H5G_entry_t {
+    hbool_t     dirty;                  /*entry out-of-date?                 */
+    H5G_type_t  type;                   /*type of information cached         */
+    H5G_cache_t cache;                  /*cached data from object header     */
+    size_t      name_off;               /*offset of name within name heap    */
+    haddr_t     header;                 /*file address of object header      */
+    H5F_t       *file;                  /*file to which this obj hdr belongs */
+    H5RS_str_t  *user_path_r;           /* Path to object, as opened by user */
+    H5RS_str_t  *canon_path_r;          /* Path to object, as found in file  */
+    unsigned    user_path_hidden;       /* Whether the user's path is valid  */
+} H5G_entry_t;
+
+typedef struct H5G_t H5G_t;
+typedef struct H5G_shared_t H5G_shared_t;
+
+/* Type of operation being performed for call to H5G_replace_name() */
+typedef enum {
+    OP_MOVE = 0,        /* H5*move call    */
+    OP_UNLINK,          /* H5Gunlink call  */
+    OP_MOUNT,           /* H5Fmount call   */
+    OP_UNMOUNT          /* H5Funmount call */
+} H5G_names_op_t;
+
+/* Depth of group entry copy */
+typedef enum {
+    H5G_COPY_NULL,      /* Null destination names */
+    H5G_COPY_LIMITED,   /* Limited copy from source to destination, omitting name & old name fields */
+    H5G_COPY_SHALLOW,   /* Copy from source to destination, including name & old name fields */
+    H5G_COPY_DEEP       /* Deep copy from source to destination, including duplicating name & old name fields */
+} H5G_ent_copy_depth_t;
+
+/*
+ * Library prototypes...  These are the ones that other packages routinely
+ * call.
+ */
+H5_DLL H5G_entry_t *H5G_loc(hid_t loc_id);
+H5_DLL herr_t H5G_mkroot(H5F_t *f, hid_t dxpl_id, H5G_entry_t *root_entry);
+H5_DLL H5G_entry_t *H5G_entof(H5G_t *grp);
+H5_DLL H5F_t *H5G_fileof(H5G_t *grp);
+H5_DLL herr_t H5G_free(H5G_t *grp);
+H5_DLL H5G_t *H5G_open(H5G_entry_t *ent, hid_t dxpl_id);
+H5_DLL herr_t H5G_close(H5G_t *grp);
+H5_DLL int H5G_get_type(H5G_entry_t *ent, hid_t dxpl_id);
+H5_DLL herr_t H5G_get_objinfo(H5G_entry_t *loc, const char *name,
+			       hbool_t follow_link,
+			       H5G_stat_t *statbuf/*out*/, hid_t dxpl_id);
+H5_DLL herr_t H5G_insert(H5G_entry_t *loc, const char *name,
+			  H5G_entry_t *ent, hid_t dxpl_id);
+H5_DLL herr_t H5G_find(H5G_entry_t *loc, const char *name,
+                        H5G_entry_t *ent/*out*/, hid_t dxpl_id);
+H5_DLL H5F_t *H5G_insertion_file(H5G_entry_t *loc, const char *name, hid_t dxpl_id);
+H5_DLL  herr_t H5G_replace_name(int type, H5G_entry_t *loc,
+        H5RS_str_t *src_name, H5G_entry_t *src_loc,
+        H5RS_str_t *dst_name, H5G_entry_t *dst_loc, H5G_names_op_t op);
+H5_DLL  herr_t H5G_free_grp_name(H5G_t *grp);
+H5_DLL herr_t H5G_get_shared_count(H5G_t *grp);
+H5_DLL herr_t H5G_mount(H5G_t *grp);
+H5_DLL herr_t H5G_unmount(H5G_t *grp);
+
+/*
+ * These functions operate on symbol table nodes.
+ */
+H5_DLL herr_t H5G_node_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream,
+			      int indent, int fwidth, haddr_t heap);
+H5_DLL herr_t H5G_node_init(H5F_t *f);
+H5_DLL herr_t H5G_node_close(const H5F_t *f);
+
+/*
+ * These functions operate on symbol table entries.  They're used primarily
+ * in the H5O package where header messages are cached in symbol table
+ * entries.  The subclasses of H5O probably don't need them though.
+ */
+H5_DLL herr_t H5G_ent_encode(H5F_t *f, uint8_t **pp, const H5G_entry_t *ent);
+H5_DLL herr_t H5G_ent_decode(H5F_t *f, const uint8_t **pp,
+			      H5G_entry_t *ent/*out*/);
+H5_DLL const H5G_cache_t *H5G_ent_cache(const H5G_entry_t *ent, H5G_type_t *cache_type);
+H5_DLL herr_t H5G_ent_copy(H5G_entry_t *dst, const H5G_entry_t *src,
+            H5G_ent_copy_depth_t depth);
+H5_DLL herr_t H5G_ent_reset(H5G_entry_t *ent);
+H5_DLL herr_t H5G_free_ent_name(H5G_entry_t *ent);
+H5_DLL herr_t H5G_ent_debug(H5F_t *f, hid_t dxpl_id, const H5G_entry_t *ent, FILE * stream,
+			     int indent, int fwidth, haddr_t heap);
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Gpublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Gpublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Gpublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,138 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Gproto.h
+ *                      Jul 11 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             Public declarations for the H5G package (symbol
+ *                      tables).
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5Gpublic_H
+#define _H5Gpublic_H
+
+/* Public headers needed by this file */
+#include <sys/types.h>
+
+#include "H5public.h"
+#include "H5Ipublic.h"
+#include "H5Opublic.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Types of links */
+typedef enum H5G_link_t {
+    H5G_LINK_ERROR	= -1,
+    H5G_LINK_HARD	= 0,
+    H5G_LINK_SOFT	= 1
+} H5G_link_t;
+
+/*
+ * An object has a certain type. The first few numbers are reserved for use
+ * internally by HDF5. Users may add their own types with higher values.  The
+ * values are never stored in the file -- they only exist while an
+ * application is running.  An object may satisfy the `isa' function for more
+ * than one type.
+ */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+#define    H5G_UNKNOWN          -1		/* Unknown object type		*/
+#define    H5G_LINK             0		/* Object is a symbolic link	*/
+#define    H5G_GROUP            1		/* Object is a group		*/
+#define    H5G_DATASET          2		/* Object is a dataset		*/
+#define    H5G_TYPE             3		/* Object is a named data type	*/
+#define    H5G_RESERVED_4       4		/* Reserved for future use	*/
+#define    H5G_RESERVED_5       5		/* Reserved for future use	*/
+#define    H5G_RESERVED_6       6		/* Reserved for future use	*/
+#define    H5G_RESERVED_7       7		/* Reserved for future use	*/
+#else /*H5_WANT_H5_V1_4_COMPAT*/
+typedef enum H5G_obj_t {
+    H5G_UNKNOWN = -1,		/* Unknown object type		*/
+    H5G_LINK,		        /* Object is a symbolic link	*/
+    H5G_GROUP,		        /* Object is a group		*/
+    H5G_DATASET,		/* Object is a dataset		*/
+    H5G_TYPE,			/* Object is a named data type	*/
+    H5G_RESERVED_4,		/* Reserved for future use	*/
+    H5G_RESERVED_5,		/* Reserved for future use	*/
+    H5G_RESERVED_6,		/* Reserved for future use	*/
+    H5G_RESERVED_7		/* Reserved for future use	*/
+} H5G_obj_t;
+#endif /*H5_WANT_H5_V1_4_COMPAT*/
+
+#define H5G_NTYPES	256		/* Max possible number of types	*/
+#define H5G_NLIBTYPES	8		/* Number of internal types	*/
+#define H5G_NUSERTYPES	(H5G_NTYPES-H5G_NLIBTYPES)
+#define H5G_USERTYPE(X)	(8+(X))		/* User defined types		*/
+
+/* Information about an object */
+typedef struct H5G_stat_t {
+    unsigned long 	fileno[2];	/*file number			*/
+    unsigned long 	objno[2];	/*object number			*/
+    unsigned 		nlink;		/*number of hard links to object*/
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int 		type;		/*basic object type		*/
+#else /*H5_WANT_H5_V1_4_COMPAT*/
+    H5G_obj_t 		type;		/*basic object type		*/
+#endif /*H5_WANT_H5_V1_4_COMPAT*/
+    time_t		mtime;		/*modification time		*/
+    size_t		linklen;	/*symbolic link value length	*/
+    H5O_stat_t          ohdr;           /* Object header information    */
+} H5G_stat_t;
+
+#define H5G_SAME_LOC 0
+#define H5Glink(cur_loc_id, type, cur_name, new_name) \
+    H5Glink2(cur_loc_id, cur_name, type, H5G_SAME_LOC, new_name)
+#define H5Gmove(src_loc_id, src_name, dst_name) \
+    H5Gmove2(src_loc_id, src_name, H5G_SAME_LOC, dst_name)
+
+typedef herr_t (*H5G_iterate_t)(hid_t group, const char *name,
+				void *op_data);
+
+H5_DLL hid_t H5Gcreate(hid_t loc_id, const char *name, size_t size_hint);
+H5_DLL hid_t H5Gopen(hid_t loc_id, const char *name);
+H5_DLL herr_t H5Gclose(hid_t group_id);
+H5_DLL herr_t H5Giterate(hid_t loc_id, const char *name, int *idx,
+			  H5G_iterate_t op, void *op_data);
+H5_DLL herr_t H5Gget_num_objs(hid_t loc_id, hsize_t *num_objs);
+H5_DLL ssize_t H5Gget_objname_by_idx(hid_t loc_id, hsize_t idx, char* name, size_t size);
+#ifdef H5_WANT_H5_V1_4_COMPAT
+H5_DLL int H5Gget_objtype_by_idx(hid_t loc_id, hsize_t idx);
+#else /*H5_WANT_H5_V1_4_COMPAT*/
+H5_DLL H5G_obj_t H5Gget_objtype_by_idx(hid_t loc_id, hsize_t idx);
+#endif /*H5_WANT_H5_V1_4_COMPAT*/
+H5_DLL herr_t H5Gmove2(hid_t src_loc, const char *src, hid_t dst_loc,
+			const char *dst);
+H5_DLL herr_t H5Glink2(hid_t src_loc, const char *cur_name, H5G_link_t type,
+		        hid_t dst_loc, const char *new_name);
+H5_DLL herr_t H5Gunlink(hid_t loc_id, const char *name);
+H5_DLL herr_t H5Gget_objinfo(hid_t loc_id, const char *name,
+			      hbool_t follow_link, H5G_stat_t *statbuf/*out*/);
+H5_DLL herr_t H5Gget_linkval(hid_t loc_id, const char *name, size_t size,
+			      char *buf/*out*/);
+H5_DLL herr_t H5Gset_comment(hid_t loc_id, const char *name,
+			      const char *comment);
+H5_DLL int H5Gget_comment(hid_t loc_id, const char *name, size_t bufsize,
+			   char *buf);
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Gstab.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Gstab.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Gstab.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,317 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer: Robb Matzke <matzke at llnl.gov>
+ *	       Friday, September 19, 1997
+ *
+ */
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+#define H5G_PACKAGE		/*suppress error about including H5Gpkg	  */
+
+
+/* Packages needed by this file... */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"		/* File access				*/
+#include "H5Gpkg.h"		/* Groups		  		*/
+#include "H5HLprivate.h"	/* Local Heaps				*/
+#include "H5MMprivate.h"	/* Memory management			*/
+
+/* Private prototypes */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_stab_create
+ *
+ * Purpose:	Creates a new empty symbol table (object header, name heap,
+ *		and B-tree).  The caller can specify an initial size for the
+ *		name heap.  The object header of the group is opened for
+ *		write access.
+ *
+ *		In order for the B-tree to operate correctly, the first
+ *		item in the heap is the empty string, and must appear at
+ *		heap offset zero.
+ *
+ * Errors:
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  1 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_stab_create(H5F_t *f, hid_t dxpl_id, size_t init, H5G_entry_t *self/*out*/)
+{
+    size_t		    name;	/*offset of "" name	*/
+    H5O_stab_t		    stab;	/*symbol table message	*/
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_stab_create, FAIL)
+
+    /*
+     * Check arguments.
+     */
+    HDassert(f);
+    HDassert(self);
+    init = MAX(init, H5HL_SIZEOF_FREE(f) + 2);
+
+    /* Create symbol table private heap */
+    if (H5HL_create(f, dxpl_id, init, &(stab.heap_addr)/*out*/)<0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't create heap")
+    name = H5HL_insert(f, dxpl_id, stab.heap_addr, 1, "");
+    if ((size_t)(-1)==name)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't initialize heap")
+
+    /*
+     * B-tree's won't work if the first name isn't at the beginning
+     * of the heap.
+     */
+    assert(0 == name);
+
+    /* Create the B-tree */
+    if (H5B_create(f, dxpl_id, H5B_SNODE, NULL, &(stab.btree_addr)/*out*/) < 0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't create B-tree")
+
+    /*
+     * Create symbol table object header.  It has a zero link count
+     * since nothing refers to it yet.	The link count will be
+     * incremented if the object is added to the group directed graph.
+     */
+    if (H5O_create(f, dxpl_id, 4 + 2 * H5F_SIZEOF_ADDR(f), self/*out*/) < 0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't create header")
+
+    /*
+     * Insert the symbol table message into the object header and the symbol
+     * table entry.
+     */
+    if (H5O_modify(self, H5O_STAB_ID, H5O_NEW_MESG, H5O_FLAG_CONSTANT, H5O_UPDATE_TIME, &stab, dxpl_id)<0) {
+	H5O_close(self);
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't create message")
+    }
+    self->cache.stab.btree_addr = stab.btree_addr;
+    self->cache.stab.heap_addr = stab.heap_addr;
+    self->type = H5G_CACHED_STAB;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5G_stab_create() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_stab_find
+ *
+ * Purpose:	Finds a symbol named NAME in the symbol table whose
+ *		description is stored in GRP_ENT in file F and returns its
+ *		symbol table entry through OBJ_ENT (which is optional).
+ *
+ * Errors:
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  1 1997
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *      Added `id to name' support.
+ *      Added a deep copy of the symbol table entry
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_stab_find(H5G_entry_t *grp_ent, const char *name,
+	      H5G_entry_t *obj_ent/*out*/, hid_t dxpl_id)
+{
+    H5G_bt_ud1_t	udata;		/*data to pass through B-tree	*/
+    H5O_stab_t		stab;		/*symbol table message		*/
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_stab_find, FAIL)
+
+    /* Check arguments */
+    assert(grp_ent);
+    assert(grp_ent->file);
+    assert(obj_ent);
+    assert(name && *name);
+
+    /* set up the udata */
+    if (NULL == H5O_read(grp_ent, H5O_STAB_ID, 0, &stab, dxpl_id))
+	HGOTO_ERROR(H5E_SYM, H5E_BADMESG, FAIL, "can't read message")
+    udata.common.name = name;
+    udata.common.heap_addr = stab.heap_addr;
+    udata.ent = obj_ent;
+
+    /* search the B-tree */
+    if (H5B_find(grp_ent->file, dxpl_id, H5B_SNODE, stab.btree_addr, &udata) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "not found")
+
+    /* Set the name for the symbol entry OBJ_ENT */
+    if (H5G_ent_set_name( grp_ent, obj_ent, name ) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "cannot insert name")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5G_stab_find() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_stab_insert
+ *
+ * Purpose:	Insert a new symbol into the table described by GRP_ENT in
+ *		file F.	 The name of the new symbol is NAME and its symbol
+ *		table entry is OBJ_ENT.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  1 1997
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_stab_insert(H5G_entry_t *grp_ent, const char *name, H5G_entry_t *obj_ent,
+    hbool_t inc_link, hid_t dxpl_id)
+{
+    H5O_stab_t		stab;		/*symbol table message		*/
+    H5G_bt_ud1_t	udata;		/*data to pass through B-tree	*/
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_stab_insert, FAIL)
+
+    /* check arguments */
+    assert(grp_ent && grp_ent->file);
+    assert(name && *name);
+    assert(obj_ent && obj_ent->file);
+    if (grp_ent->file->shared != obj_ent->file->shared)
+	HGOTO_ERROR(H5E_SYM, H5E_LINK, FAIL, "interfile hard links are not allowed")
+
+    /* Set the name for the symbol entry OBJ_ENT */
+    if (H5G_ent_set_name( grp_ent, obj_ent, name ) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "cannot insert name")
+
+    /* initialize data to pass through B-tree */
+    if (NULL == H5O_read(grp_ent, H5O_STAB_ID, 0, &stab, dxpl_id))
+	HGOTO_ERROR(H5E_SYM, H5E_BADMESG, FAIL, "not a symbol table")
+
+    udata.common.name = name;
+    udata.common.heap_addr = stab.heap_addr;
+    udata.ent = obj_ent;
+
+    /* insert */
+    if (H5B_insert(grp_ent->file, dxpl_id, H5B_SNODE, stab.btree_addr, &udata) < 0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINSERT, FAIL, "unable to insert entry")
+
+    /* Increment link count on object, if appropriate */
+    if(inc_link)
+        if (H5O_link(obj_ent, 1, dxpl_id) < 0)
+            HGOTO_ERROR(H5E_SYM, H5E_LINK, FAIL, "unable to increment hard link count")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_stab_remove
+ *
+ * Purpose:	Remove NAME from a symbol table.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, September 17, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_stab_remove(H5G_entry_t *grp_ent, const char *name, hid_t dxpl_id)
+{
+    H5O_stab_t		stab;		/*symbol table message		*/
+    H5G_bt_ud2_t	udata;		/*data to pass through B-tree	*/
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5G_stab_remove, FAIL)
+
+    assert(grp_ent && grp_ent->file);
+    assert(name && *name);
+
+    /* initialize data to pass through B-tree */
+    if (NULL==H5O_read(grp_ent, H5O_STAB_ID, 0, &stab, dxpl_id))
+	HGOTO_ERROR(H5E_SYM, H5E_BADMESG, FAIL, "not a symbol table")
+    udata.common.name = name;
+    udata.common.heap_addr = stab.heap_addr;
+    udata.adj_link = TRUE;
+
+    /* remove */
+    if (H5B_remove(grp_ent->file, dxpl_id, H5B_SNODE, stab.btree_addr, &udata)<0)
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to remove entry")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5G_stab_delete
+ *
+ * Purpose:	Delete entire symbol table information from file
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, March 20, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5G_stab_delete(H5F_t *f, hid_t dxpl_id, const H5O_stab_t *stab, hbool_t adj_link)
+{
+    H5G_bt_ud2_t	udata;		/*data to pass through B-tree	*/
+    herr_t  ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5G_stab_delete, FAIL);
+
+    assert(f);
+    assert(stab);
+    assert(H5F_addr_defined(stab->btree_addr));
+    assert(H5F_addr_defined(stab->heap_addr));
+
+    /* Set up user data for B-tree deletion */
+    udata.common.name = NULL;
+    udata.common.heap_addr = stab->heap_addr;
+    udata.adj_link = adj_link;
+
+    /* Delete entire B-tree */
+    if(H5B_delete(f, dxpl_id, H5B_SNODE, stab->btree_addr, &udata)<0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTDELETE, FAIL, "unable to delete symbol table B-tree");
+
+    /* Delete local heap for names */
+    if(H5HL_delete(f, dxpl_id, stab->heap_addr)<0)
+        HGOTO_ERROR(H5E_SYM, H5E_CANTDELETE, FAIL, "unable to delete symbol table heap");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5G_stab_delete() */

Added: packages/hdf5/branches/upstream/current/src/H5HG.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5HG.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5HG.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1263 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Friday, March 27, 1998
+ *
+ * Purpose:	Operations on the global heap.  The global heap is the set of
+ *		all collections and each collection contains one or more
+ *		global heap objects.  An object belongs to exactly one
+ *		collection.  A collection is treated as an atomic entity for
+ *		the purposes of I/O and caching.
+ *
+ *		Each file has a small cache of global heap collections called
+ *		the CWFS list and recently accessed collections with free
+ *		space appear on this list.  As collections are accessed the
+ *		collection is moved toward the front of the list.  New
+ *		collections are added to the front of the list while old
+ *		collections are added to the end of the list.
+ *
+ *		The collection model reduces the overhead which would be
+ *		incurred if the global heap were a single object, and the
+ *		CWFS list allows the library to cheaply choose a collection
+ *		for a new object based on object size, amount of free space
+ *		in the collection, and temporal locality.
+ */
+
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+#define H5HG_PACKAGE		/*suppress error about including H5HGpkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"             /* File access				*/
+#include "H5FLprivate.h"	/* Free lists                           */
+#include "H5HGpkg.h"		/* Global heaps				*/
+#include "H5MFprivate.h"	/* File memory management		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+
+/* Private macros */
+
+/*
+ * Global heap collection version.
+ */
+#define H5HG_VERSION	1
+
+/*
+ * All global heap collections are at least this big.  This allows us to read
+ * most collections with a single read() since we don't have to read a few
+ * bytes of header to figure out the size.  If the heap is larger than this
+ * then a second read gets the rest after we've decoded the header.
+ */
+#define H5HG_MINSIZE	4096
+
+/*
+ * Limit global heap collections to the some reasonable size.  This is
+ * fairly arbitrary, but needs to be small enough that no more than H5HG_MAXIDX
+ * objects will be allocated from a single heap.
+ */
+#define H5HG_MAXSIZE	65536
+
+/*
+ * Maximum length of the CWFS list, the list of remembered collections that
+ * have free space.
+ */
+#define H5HG_NCWFS	16
+
+/*
+ * The maximum number of links allowed to a global heap object.
+ */
+#define H5HG_MAXLINK	65535
+
+/*
+ * The maximum number of indices allowed in a global heap object.
+ */
+#define H5HG_MAXIDX	65535
+
+/*
+ * The size of the collection header, always a multiple of the alignment so
+ * that the stuff that follows the header is aligned.
+ */
+#define H5HG_SIZEOF_HDR(f)						      \
+    H5HG_ALIGN(4 +			/*magic number		*/	      \
+	       1 +			/*version number	*/	      \
+	       3 +			/*reserved		*/	      \
+	       H5F_SIZEOF_SIZE(f))	/*collection size	*/
+
+/*
+ * The initial guess for the number of messages in a collection.  We assume
+ * that all objects in that collection are zero length, giving the maximum
+ * possible number of objects in the collection.  The collection itself has
+ * some overhead and each message has some overhead.  The `+2' accounts for
+ * rounding and for the free space object.
+ */
+#define H5HG_NOBJS(f,z) (int)((((z)-H5HG_SIZEOF_HDR(f))/		      \
+			       H5HG_SIZEOF_OBJHDR(f)+2))
+
+/*
+ * Makes a global heap object pointer undefined, or checks whether one is
+ * defined.
+ */
+#define H5HG_undef(HGP)	((HGP)->idx=0)
+#define H5HG_defined(HGP) ((HGP)->idx!=0)
+
+/* Private typedefs */
+
+/* PRIVATE PROTOTYPES */
+static haddr_t H5HG_create(H5F_t *f, hid_t dxpl_id, size_t size);
+#ifdef NOT_YET
+static void *H5HG_peek(H5F_t *f, hid_t dxpl_id, H5HG_t *hobj);
+#endif /* NOT_YET */
+
+/* Metadata cache callbacks */
+static H5HG_heap_t *H5HG_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *udata1,
+			      void *udata2);
+static herr_t H5HG_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr,
+			 H5HG_heap_t *heap);
+static herr_t H5HG_dest(H5F_t *f, H5HG_heap_t *heap);
+static herr_t H5HG_clear(H5F_t *f, H5HG_heap_t *heap, hbool_t destroy);
+static herr_t H5HG_compute_size(const H5F_t *f, const H5HG_heap_t *heap, size_t *size_ptr);
+
+/*
+ * H5HG inherits cache-like properties from H5AC
+ */
+const H5AC_class_t H5AC_GHEAP[1] = {{
+    H5AC_GHEAP_ID,
+    (H5AC_load_func_t)H5HG_load,
+    (H5AC_flush_func_t)H5HG_flush,
+    (H5AC_dest_func_t)H5HG_dest,
+    (H5AC_clear_func_t)H5HG_clear,
+    (H5AC_size_func_t)H5HG_compute_size,
+}};
+
+/* Declare a free list to manage the H5HG_t struct */
+H5FL_DEFINE_STATIC(H5HG_heap_t);
+
+/* Declare a free list to manage sequences of H5HG_obj_t's */
+H5FL_SEQ_DEFINE_STATIC(H5HG_obj_t);
+
+/* Declare a PQ free list to manage heap chunks */
+H5FL_BLK_DEFINE_STATIC(heap_chunk);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_create
+ *
+ * Purpose:	Creates a global heap collection of the specified size.  If
+ *		SIZE is less than some minimum it will be readjusted.  The
+ *		new collection is allocated in the file and added to the
+ *		beginning of the CWFS list.
+ *
+ * Return:	Success:	Ptr to a cached heap.  The pointer is valid
+ *				only until some other hdf5 library function
+ *				is called.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, March 27, 1998
+ *
+ * Modifications:
+ *
+ *		John Mainzer 5/26/04
+ *		Modified function to return the disk address of the new
+ *		global heap collection, or HADDR_UNDEF on failure.  This
+ *		is necessary, as in some cases (i.e. flexible parallel)
+ *		H5AC_set() will imediately flush and destroy the in memory
+ *		version of the new collection.  For the same reason, I
+ *		moved the code which places the new collection on the cwfs
+ *		list to just before the call to H5AC_set().
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+H5HG_create (H5F_t *f, hid_t dxpl_id, size_t size)
+{
+    H5HG_heap_t	*heap = NULL;
+    haddr_t	ret_value = HADDR_UNDEF;
+    uint8_t	*p = NULL;
+    haddr_t	addr;
+    size_t	n;
+
+    FUNC_ENTER_NOAPI(H5HG_create, HADDR_UNDEF);
+
+    /* Check args */
+    assert (f);
+    if (size<H5HG_MINSIZE)
+        size = H5HG_MINSIZE;
+    size = H5HG_ALIGN(size);
+
+    /* Create it */
+    H5_CHECK_OVERFLOW(size,size_t,hsize_t);
+    if ( HADDR_UNDEF==
+         (addr=H5MF_alloc(f, H5FD_MEM_GHEAP, dxpl_id, (hsize_t)size)))
+	HGOTO_ERROR (H5E_HEAP, H5E_CANTINIT, HADDR_UNDEF, \
+                     "unable to allocate file space for global heap");
+    if (NULL==(heap = H5FL_MALLOC (H5HG_heap_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, \
+                     "memory allocation failed");
+    heap->addr = addr;
+    heap->size = size;
+    heap->cache_info.is_dirty = TRUE;
+    if (NULL==(heap->chunk = H5FL_BLK_MALLOC (heap_chunk,size)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, \
+                     "memory allocation failed");
+#ifdef H5_USING_PURIFY
+HDmemset(heap->chunk,0,size);
+#endif /* H5_USING_PURIFY */
+    heap->nalloc = H5HG_NOBJS (f, size);
+    heap->nused = 1; /* account for index 0, which is used for the free object */
+    if (NULL==(heap->obj = H5FL_SEQ_MALLOC (H5HG_obj_t,heap->nalloc)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, \
+                     "memory allocation failed");
+
+    /* Initialize the header */
+    HDmemcpy (heap->chunk, H5HG_MAGIC, H5HG_SIZEOF_MAGIC);
+    p = heap->chunk + H5HG_SIZEOF_MAGIC;
+    *p++ = H5HG_VERSION;
+    *p++ = 0; /*reserved*/
+    *p++ = 0; /*reserved*/
+    *p++ = 0; /*reserved*/
+    H5F_ENCODE_LENGTH (f, p, size);
+
+    /*
+     * Padding so free space object is aligned. If malloc returned memory
+     * which was always at least H5HG_ALIGNMENT aligned then we could just
+     * align the pointer, but this might not be the case.
+     */
+    n = H5HG_ALIGN(p-heap->chunk) - (p-heap->chunk);
+#ifdef OLD_WAY
+/* Don't bother zeroing out the rest of the info in the heap -QAK */
+    HDmemset(p, 0, n);
+#endif /* OLD_WAY */
+    p += n;
+
+    /* The freespace object */
+    heap->obj[0].size = size - H5HG_SIZEOF_HDR(f);
+    assert(H5HG_ISALIGNED(heap->obj[0].size));
+    heap->obj[0].nrefs = 0;
+    heap->obj[0].begin = p;
+    UINT16ENCODE(p, 0);	/*object ID*/
+    UINT16ENCODE(p, 0);	/*reference count*/
+    UINT32ENCODE(p, 0); /*reserved*/
+    H5F_ENCODE_LENGTH (f, p, heap->obj[0].size);
+#ifdef OLD_WAY
+/* Don't bother zeroing out the rest of the info in the heap -QAK */
+    HDmemset (p, 0, (size_t)((heap->chunk+heap->size) - p));
+#endif /* OLD_WAY */
+
+    /* Add this heap to the beginning of the CWFS list */
+    if (NULL==f->shared->cwfs) {
+	f->shared->cwfs = H5MM_malloc (H5HG_NCWFS * sizeof(H5HG_heap_t*));
+	if (NULL==(f->shared->cwfs))
+	    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, \
+                         "memory allocation failed");
+	f->shared->cwfs[0] = heap;
+	f->shared->ncwfs = 1;
+    } else {
+	HDmemmove (f->shared->cwfs+1, f->shared->cwfs,
+                   MIN (f->shared->ncwfs, H5HG_NCWFS-1)*sizeof(H5HG_heap_t*));
+	f->shared->cwfs[0] = heap;
+	f->shared->ncwfs = MIN (H5HG_NCWFS, f->shared->ncwfs+1);
+    }
+
+    /* Add the heap to the cache */
+    if (H5AC_set (f, dxpl_id, H5AC_GHEAP, addr, heap)<0)
+	HGOTO_ERROR (H5E_HEAP, H5E_CANTINIT, HADDR_UNDEF, \
+                     "unable to cache global heap collection");
+
+    ret_value = addr;
+
+done:
+    if ( ! ( H5F_addr_defined(addr) ) && heap) {
+        if ( H5HG_dest(f,heap) < 0 )
+	    HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, HADDR_UNDEF, \
+                        "unable to destroy global heap collection");
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* H5HG_create() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_load
+ *
+ * Purpose:	Loads a global heap collection from disk.
+ *
+ * Return:	Success:	Ptr to a global heap collection.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, March 27, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ *	Quincey Koziol, 2002-7-180
+ *	Added dxpl parameter to allow more control over I/O from metadata
+ *      cache.
+ *-------------------------------------------------------------------------
+ */
+static H5HG_heap_t *
+H5HG_load (H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED * udata1,
+	   void UNUSED * udata2)
+{
+    H5HG_heap_t	*heap = NULL;
+    uint8_t	*p = NULL;
+    int	i;
+    size_t	nalloc, need;
+    size_t      max_idx=0;              /* The maximum index seen */
+    H5HG_heap_t	*ret_value = NULL;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HG_load, NULL);
+
+    /* check arguments */
+    assert (f);
+    assert (H5F_addr_defined (addr));
+    assert (!udata1);
+    assert (!udata2);
+
+    /* Read the initial 4k page */
+    if (NULL==(heap = H5FL_CALLOC (H5HG_heap_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    heap->addr = addr;
+    if (NULL==(heap->chunk = H5FL_BLK_MALLOC (heap_chunk,H5HG_MINSIZE)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    if (H5F_block_read(f, H5FD_MEM_GHEAP, addr, H5HG_MINSIZE, dxpl_id, heap->chunk)<0)
+	HGOTO_ERROR (H5E_HEAP, H5E_READERROR, NULL, "unable to read global heap collection");
+
+    /* Magic number */
+    if (HDmemcmp (heap->chunk, H5HG_MAGIC, H5HG_SIZEOF_MAGIC))
+	HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, NULL, "bad global heap collection signature");
+    p = heap->chunk + H5HG_SIZEOF_MAGIC;
+
+    /* Version */
+    if (H5HG_VERSION!=*p++)
+	HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, NULL, "wrong version number in global heap");
+
+    /* Reserved */
+    p += 3;
+
+    /* Size */
+    H5F_DECODE_LENGTH (f, p, heap->size);
+    assert (heap->size>=H5HG_MINSIZE);
+
+    /*
+     * If we didn't read enough in the first try, then read the rest of the
+     * collection now.
+     */
+    if (heap->size > H5HG_MINSIZE) {
+	haddr_t next_addr = addr + (hsize_t)H5HG_MINSIZE;
+	if (NULL==(heap->chunk = H5FL_BLK_REALLOC (heap_chunk, heap->chunk, heap->size)))
+	    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+	if (H5F_block_read (f, H5FD_MEM_GHEAP, next_addr, (heap->size-H5HG_MINSIZE), dxpl_id, heap->chunk+H5HG_MINSIZE)<0)
+	    HGOTO_ERROR (H5E_HEAP, H5E_READERROR, NULL, "unable to read global heap collection");
+    }
+
+    /* Decode each object */
+    p = heap->chunk + H5HG_SIZEOF_HDR (f);
+    nalloc = H5HG_NOBJS (f, heap->size);
+    if (NULL==(heap->obj = H5FL_SEQ_MALLOC (H5HG_obj_t,nalloc)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    heap->obj[0].size=heap->obj[0].nrefs=0;
+    heap->obj[0].begin=NULL;
+
+    heap->nalloc = nalloc;
+    while (p<heap->chunk+heap->size) {
+	if (p+H5HG_SIZEOF_OBJHDR(f)>heap->chunk+heap->size) {
+	    /*
+	     * The last bit of space is too tiny for an object header, so we
+	     * assume that it's free space.
+	     */
+	    assert (NULL==heap->obj[0].begin);
+	    heap->obj[0].size = (heap->chunk+heap->size) - p;
+	    heap->obj[0].begin = p;
+	    p += heap->obj[0].size;
+	} else {
+	    unsigned idx;
+	    uint8_t *begin = p;
+
+	    UINT16DECODE (p, idx);
+
+            /* Check if we need more room to store heap objects */
+            if(idx>=heap->nalloc) {
+                size_t new_alloc;       /* New allocation number */
+                H5HG_obj_t *new_obj;	/* New array of object descriptions */
+
+                /* Determine the new number of objects to index */
+                new_alloc=MAX(heap->nalloc*2,(idx+1));
+
+                /* Reallocate array of objects */
+                if (NULL==(new_obj = H5FL_SEQ_REALLOC (H5HG_obj_t, heap->obj, new_alloc)))
+                    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+                /* Update heap information */
+                heap->nalloc=new_alloc;
+                heap->obj=new_obj;
+            } /* end if */
+
+	    UINT16DECODE (p, heap->obj[idx].nrefs);
+	    p += 4; /*reserved*/
+	    H5F_DECODE_LENGTH (f, p, heap->obj[idx].size);
+	    heap->obj[idx].begin = begin;
+	    /*
+	     * The total storage size includes the size of the object header
+	     * and is zero padded so the next object header is properly
+	     * aligned. The last bit of space is the free space object whose
+	     * size is never padded and already includes the object header.
+	     */
+	    if (idx>0) {
+		need = H5HG_SIZEOF_OBJHDR(f) + H5HG_ALIGN(heap->obj[idx].size);
+
+                /* Check for "gap" in index numbers (caused by deletions) and fill in heap object values */
+                if(idx>(max_idx+1))
+                    HDmemset(&heap->obj[max_idx+1],0,sizeof(H5HG_obj_t)*(idx-(max_idx+1)));
+                max_idx=idx;
+	    } else {
+		need = heap->obj[idx].size;
+	    }
+	    p = begin + need;
+	}
+    }
+    assert(p==heap->chunk+heap->size);
+    assert(H5HG_ISALIGNED(heap->obj[0].size));
+
+    /* Set the next index value to use */
+    if(max_idx>0)
+        heap->nused=max_idx+1;
+    else
+        heap->nused=1;
+
+    /*
+     * Add the new heap to the CWFS list, removing some other entry if
+     * necessary to make room. We remove the right-most entry that has less
+     * free space than this heap.
+     */
+    if (heap->obj[0].size>0) {
+	if (!f->shared->cwfs) {
+	    f->shared->cwfs = H5MM_malloc (H5HG_NCWFS*sizeof(H5HG_heap_t*));
+	    if (NULL==f->shared->cwfs)
+		HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+	    f->shared->ncwfs = 1;
+	    f->shared->cwfs[0] = heap;
+	} else if (H5HG_NCWFS==f->shared->ncwfs) {
+	    for (i=H5HG_NCWFS-1; i>=0; --i) {
+		if (f->shared->cwfs[i]->obj[0].size < heap->obj[0].size) {
+		    HDmemmove (f->shared->cwfs+1, f->shared->cwfs, i * sizeof(H5HG_heap_t*));
+		    f->shared->cwfs[0] = heap;
+		    break;
+		}
+	    }
+	} else {
+	    HDmemmove (f->shared->cwfs+1, f->shared->cwfs, f->shared->ncwfs*sizeof(H5HG_heap_t*));
+	    f->shared->ncwfs += 1;
+	    f->shared->cwfs[0] = heap;
+	}
+    }
+
+    ret_value = heap;
+
+done:
+    if (!ret_value && heap) {
+        if(H5HG_dest(f,heap)<0)
+	    HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, NULL, "unable to destroy global heap collection");
+    }
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_flush
+ *
+ * Purpose:	Flushes a global heap collection from memory to disk if it's
+ *		dirty.  Optionally deletes teh heap from memory.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, March 27, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ *	Quincey Koziol, 2002-7-180
+ *	Added dxpl parameter to allow more control over I/O from metadata
+ *      cache.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HG_flush (H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5HG_heap_t *heap)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HG_flush, FAIL);
+
+    /* Check arguments */
+    assert (f);
+    assert (H5F_addr_defined (addr));
+    assert (H5F_addr_eq (addr, heap->addr));
+    assert (heap);
+
+    if (heap->cache_info.is_dirty) {
+	if (H5F_block_write (f, H5FD_MEM_GHEAP, addr, heap->size, dxpl_id, heap->chunk)<0)
+	    HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "unable to write global heap collection to file");
+	heap->cache_info.is_dirty = FALSE;
+    }
+
+    if (destroy) {
+        if(H5HG_dest(f,heap)<0)
+	    HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy global heap collection");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_dest
+ *
+ * Purpose:	Destroys a global heap collection in memory
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, January 15, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HG_dest (H5F_t *f, H5HG_heap_t *heap)
+{
+    int		i;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HG_dest);
+
+    /* Check arguments */
+    assert (heap);
+
+    /* Verify that node is clean */
+    assert (heap->cache_info.is_dirty==FALSE);
+
+    for (i=0; i<f->shared->ncwfs; i++) {
+        if (f->shared->cwfs[i]==heap) {
+            f->shared->ncwfs -= 1;
+            HDmemmove (f->shared->cwfs+i, f->shared->cwfs+i+1, (f->shared->ncwfs-i) * sizeof(H5HG_heap_t*));
+            break;
+        }
+    }
+    heap->chunk = H5FL_BLK_FREE(heap_chunk,heap->chunk);
+    heap->obj = H5FL_SEQ_FREE(H5HG_obj_t,heap->obj);
+    H5FL_FREE (H5HG_heap_t,heap);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* H5HG_dest() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_clear
+ *
+ * Purpose:	Mark a global heap in memory as non-dirty.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, March 20, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HG_clear(H5F_t *f, H5HG_heap_t *heap, hbool_t destroy)
+{
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5HG_clear);
+
+    /* Check arguments */
+    assert (heap);
+
+    /* Mark heap as clean */
+    heap->cache_info.is_dirty = FALSE;
+
+    if (destroy)
+        if (H5HG_dest(f, heap) < 0)
+	    HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy global heap collection");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* H5HG_clear() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_compute_size
+ *
+ * Purpose:	Compute the size in bytes of the specified instance of
+ *              H5HG_heap_t on disk, and return it in *len_ptr.  On failure,
+ *              the value of *len_ptr is undefined.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	John Mainzer
+ *              5/13/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HG_compute_size(const H5F_t UNUSED *f, const H5HG_heap_t *heap, size_t *size_ptr)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HG_compute_size);
+
+    /* Check arguments */
+    HDassert(heap);
+    HDassert(size_ptr);
+
+    *size_ptr = heap->size;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* H5HG_compute_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_alloc
+ *
+ * Purpose:	Given a heap with enough free space, this function will split
+ *		the free space to make a new empty heap object and initialize
+ *		the header.  SIZE is the exact size of the object data to be
+ *		stored. It will be increased to make room for the object
+ *		header and then rounded up for alignment.
+ *
+ * Return:	Success:	The heap object ID of the new object.
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, March 27, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5HG_alloc (H5F_t *f, H5HG_heap_t *heap, size_t size)
+{
+    size_t	idx;
+    uint8_t	*p = NULL;
+    size_t	need = H5HG_SIZEOF_OBJHDR(f) + H5HG_ALIGN(size);
+    size_t ret_value;         /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5HG_alloc);
+
+    /* Check args */
+    assert (heap);
+    assert (heap->obj[0].size>=need);
+
+    /*
+     * Find an ID for the new object. ID zero is reserved for the free space
+     * object.
+     */
+    if(heap->nused<H5HG_MAXIDX)
+        idx=heap->nused++;
+    else {
+        for (idx=1; idx<heap->nused; idx++)
+            if (NULL==heap->obj[idx].begin)
+                break;
+    } /* end else */
+
+    /* Check if we need more room to store heap objects */
+    if(idx>=heap->nalloc) {
+        size_t new_alloc;       /* New allocation number */
+        H5HG_obj_t *new_obj;	/* New array of object descriptions */
+
+        /* Determine the new number of objects to index */
+        new_alloc=MAX(heap->nalloc*2,(idx+1));
+        assert(new_alloc<=(H5HG_MAXIDX+1));
+
+        /* Reallocate array of objects */
+        if (NULL==(new_obj = H5FL_SEQ_REALLOC (H5HG_obj_t, heap->obj, new_alloc)))
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, 0, "memory allocation failed");
+
+        /* Update heap information */
+        heap->nalloc=new_alloc;
+        heap->obj=new_obj;
+        assert(heap->nalloc>heap->nused);
+    } /* end if */
+
+    /* Initialize the new object */
+    heap->obj[idx].nrefs = 0;
+    heap->obj[idx].size = size;
+    heap->obj[idx].begin = heap->obj[0].begin;
+    p = heap->obj[idx].begin;
+    UINT16ENCODE(p, idx);
+    UINT16ENCODE(p, 0); /*nrefs*/
+    UINT32ENCODE(p, 0); /*reserved*/
+    H5F_ENCODE_LENGTH (f, p, size);
+
+    /* Fix the free space object */
+    if (need==heap->obj[0].size) {
+	/*
+	 * All free space has been exhausted from this collection.
+	 */
+	heap->obj[0].size = 0;
+	heap->obj[0].begin = NULL;
+
+    } else if (heap->obj[0].size-need >= H5HG_SIZEOF_OBJHDR (f)) {
+	/*
+	 * Some free space remains and it's larger than a heap object header,
+	 * so write the new free heap object header to the heap.
+	 */
+	heap->obj[0].size -= need;
+	heap->obj[0].begin += need;
+	p = heap->obj[0].begin;
+	UINT16ENCODE(p, 0);	/*id*/
+	UINT16ENCODE(p, 0);	/*nrefs*/
+	UINT32ENCODE(p, 0);	/*reserved*/
+	H5F_ENCODE_LENGTH (f, p, heap->obj[0].size);
+	assert(H5HG_ISALIGNED(heap->obj[0].size));
+
+    } else {
+	/*
+	 * Some free space remains but it's smaller than a heap object header,
+	 * so we don't write the header.
+	 */
+	heap->obj[0].size -= need;
+	heap->obj[0].begin += need;
+	assert(H5HG_ISALIGNED(heap->obj[0].size));
+    }
+
+    /* Mark the heap as dirty */
+    heap->cache_info.is_dirty = TRUE;
+
+    /* Set the return value */
+    ret_value=idx;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_extend
+ *
+ * Purpose:	Extend a heap to hold an object of SIZE bytes.
+ *		SIZE is the exact size of the object data to be
+ *		stored. It will be increased to make room for the object
+ *		header and then rounded up for alignment.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, June 12, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HG_extend (H5F_t *f, H5HG_heap_t *heap, size_t size)
+{
+    size_t  need;                   /* Actual space needed to store object */
+    size_t  old_size;               /* Previous size of the heap's chunk */
+    uint8_t *new_chunk=NULL;        /* Pointer to new chunk information */
+    uint8_t *p = NULL;              /* Pointer to raw heap info */
+    unsigned u;                     /* Local index variable */
+    herr_t  ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5HG_extend);
+
+    /* Check args */
+    assert (f);
+    assert (heap);
+
+    /* Compute total space need to add to this heap */
+    need = H5HG_SIZEOF_OBJHDR(f) + H5HG_ALIGN(size);
+
+    /* Decrement the amount needed in the heap by the amount of free space available */
+    assert(need>heap->obj[0].size);
+    need -= heap->obj[0].size;
+
+    /* Don't do anything less than double the size of the heap */
+    need = MAX(heap->size,need);
+
+    /* Extend the space allocated for this heap on disk */
+    if(H5MF_extend(f,H5FD_MEM_GHEAP,heap->addr,(hsize_t)heap->size,(hsize_t)need)<0)
+	HGOTO_ERROR (H5E_HEAP, H5E_NOSPACE, FAIL, "can't extend heap on disk");
+
+    /* Re-allocate the heap information in memory */
+    if (NULL==(new_chunk = H5FL_BLK_REALLOC (heap_chunk, heap->chunk, heap->size+need)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "new heap allocation failed");
+#ifdef H5_USING_PURIFY
+HDmemset(new_chunk+heap->size,0,need);
+#endif /* H5_USING_PURIFY */
+
+    /* Adjust the size of the heap */
+    old_size=heap->size;
+    heap->size+=need;
+
+    /* Encode the new size of the heap */
+    p = new_chunk + H5HG_SIZEOF_MAGIC + 1 /* version */ + 3 /* reserved */;
+    H5F_ENCODE_LENGTH (f, p, heap->size);
+
+    /* Move the pointers to the existing objects to their new locations */
+    for (u=0; u<heap->nused; u++)
+        if(heap->obj[u].begin)
+            heap->obj[u].begin = new_chunk + (heap->obj[u].begin - heap->chunk);
+
+    /* Update the heap chunk pointer now */
+    heap->chunk=new_chunk;
+
+    /* Update the free space information for the heap  */
+    heap->obj[0].size+=need;
+    if(heap->obj[0].begin==NULL)
+        heap->obj[0].begin=heap->chunk+old_size;
+    p = heap->obj[0].begin;
+    UINT16ENCODE(p, 0);	/*id*/
+    UINT16ENCODE(p, 0);	/*nrefs*/
+    UINT32ENCODE(p, 0);	/*reserved*/
+    H5F_ENCODE_LENGTH (f, p, heap->obj[0].size);
+    assert(H5HG_ISALIGNED(heap->obj[0].size));
+
+    /* Mark the heap as dirty */
+    heap->cache_info.is_dirty = TRUE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5HG_extend() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_insert
+ *
+ * Purpose:	A new object is inserted into the global heap.  It will be
+ *		placed in the first collection on the CWFS list which has
+ *		enough free space and that collection will be advanced one
+ *		position in the list.  If no collection on the CWFS list has
+ *		enough space then  a new collection will be created.
+ *
+ *		It is legal to push a zero-byte object onto the heap to get
+ *		the reference count features of heap objects.
+ *
+ * Return:	Success:	Non-negative, and a heap object handle returned
+ *				through the HOBJ pointer.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, March 27, 1998
+ *
+ * Modifications:
+ *
+ *		John Mainzer -- 5/24/04
+ *		The function used to modify the heap without protecting
+ *		the relevant collection first.  I did a half assed job
+ *		of fixing the problem, which should hold until we try to
+ *		support multi-threading.  At that point it will have to
+ *		be done right.
+ *
+ *		See in line comment of this date for more details.
+ *
+ *		John Mainzer - 5/26/04
+ *		Modified H5HG_create() to return the disk address of the
+ *		new collection, instead of the address of its
+ *		representation in core.  This was necessary as in FP
+ *		mode, the cache will immediately flush and destroy any
+ *		entry inserted in it via H5AC_set().  I then modified
+ *		this function to account for the change in H5HG_create().
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5HG_insert (H5F_t *f, hid_t dxpl_id, size_t size, void *obj, H5HG_t *hobj/*out*/)
+{
+    size_t	need;		/*total space needed for object		*/
+    int	cwfsno;
+    size_t	idx;
+    haddr_t	addr = HADDR_UNDEF;
+    H5HG_heap_t	*heap = NULL;
+    hbool_t     found=0;        /* Flag to indicate a heap with enough space was found */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HG_insert, FAIL);
+
+    /* Check args */
+    assert (f);
+    assert (0==size || obj);
+    assert (hobj);
+
+    if (0==(f->intent & H5F_ACC_RDWR))
+	HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file");
+
+    /* Find a large enough collection on the CWFS list */
+    need = H5HG_SIZEOF_OBJHDR(f) + H5HG_ALIGN(size);
+
+    /* Note that we don't have metadata cache locks on the entries in
+     * f->shared->cwfs.
+     *
+     * In the current situation, this doesn't matter, as we are single
+     * threaded, and as best I can tell, entries are added to and deleted
+     * from f->shared->cwfs as they are added to and deleted from the
+     * metadata cache.
+     *
+     * To be proper, we should either lock each entry in f->shared->cwfs
+     * as we examine it, or lock the whole array.  However, at present
+     * I don't see the point as there will be significant overhead,
+     * and protecting and unprotecting all the collections in the global
+     * heap on a regular basis will skew the replacement policy.
+     *
+     * However, there is a bigger issue -- as best I can tell, we only look
+     * for free space in global heap chunks that are in cache.  If we can't
+     * find any, we allocate a new chunk.  This may be a problem in FP mode,
+     * as the metadata cache is disabled.  Do we allocate a new heap
+     * collection for every entry in this case?
+     *
+     * Note that all this comes from a cursory read of the source.  Don't
+     * take any of it as gospel.
+     *                                        JRM - 5/24/04
+     */
+
+    for (cwfsno=0; cwfsno<f->shared->ncwfs; cwfsno++) {
+	if (f->shared->cwfs[cwfsno]->obj[0].size>=need) {
+	    addr = f->shared->cwfs[cwfsno]->addr;
+            found=1;
+	    break;
+	} /* end if */
+    } /* end for */
+
+    /*
+     * If we didn't find any collection with enough free space the check if
+     * we can extend any of the collections to make enough room.
+     */
+    if (!found) {
+        size_t new_need;
+
+        for (cwfsno=0; cwfsno<f->shared->ncwfs; cwfsno++) {
+            new_need = need;
+            new_need -= f->shared->cwfs[cwfsno]->obj[0].size;
+            new_need = MAX(f->shared->cwfs[cwfsno]->size, new_need);
+
+            if((f->shared->cwfs[cwfsno]->size+new_need)<=H5HG_MAXSIZE && H5MF_can_extend(f,H5FD_MEM_GHEAP,f->shared->cwfs[cwfsno]->addr,(hsize_t)f->shared->cwfs[cwfsno]->size,(hsize_t)new_need)) {
+                if(H5HG_extend(f,f->shared->cwfs[cwfsno],size)<0)
+                    HGOTO_ERROR (H5E_HEAP, H5E_CANTINIT, FAIL, "unable to extend global heap collection");
+	        addr = f->shared->cwfs[cwfsno]->addr;
+                found=1;
+                break;
+            } /* end if */
+        } /* end for */
+    } /* end if */
+
+    /*
+     * If we didn't find any collection with enough free space then allocate a
+     * new collection large enough for the message plus the collection header.
+     */
+    if (!found) {
+
+        addr = H5HG_create(f, dxpl_id, need+H5HG_SIZEOF_HDR (f));
+
+        if ( ! H5F_addr_defined(addr) )
+	    HGOTO_ERROR (H5E_HEAP, H5E_CANTINIT, FAIL, \
+                         "unable to allocate a global heap collection");
+	cwfsno = 0;
+    } /* end if */
+    else {
+
+        /* Move the collection forward in the CWFS list, if it's not
+         * already at the front
+         */
+        if (cwfsno>0) {
+            H5HG_heap_t *tmp = f->shared->cwfs[cwfsno];
+            f->shared->cwfs[cwfsno] = f->shared->cwfs[cwfsno-1];
+            f->shared->cwfs[cwfsno-1] = tmp;
+            --cwfsno;
+        } /* end if */
+    } /* end else */
+
+    HDassert(H5F_addr_defined(addr));
+
+    if ( NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_GHEAP, addr, NULL, NULL, H5AC_WRITE)) )
+        HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap");
+
+    /* Split the free space to make room for the new object */
+    idx = H5HG_alloc (f, heap, size);
+
+    /* Copy data into the heap */
+    if(size>0) {
+        HDmemcpy(heap->obj[idx].begin+H5HG_SIZEOF_OBJHDR(f), obj, size);
+#ifdef OLD_WAY
+/* Don't bother zeroing out the rest of the info in the heap -QAK */
+        HDmemset(heap->obj[idx].begin+H5HG_SIZEOF_OBJHDR(f)+size, 0,
+                 need-(H5HG_SIZEOF_OBJHDR(f)+size));
+#endif /* OLD_WAY */
+    } /* end if */
+    heap->cache_info.is_dirty = TRUE;
+
+    /* Return value */
+    hobj->addr = heap->addr;
+    hobj->idx = idx;
+
+done:
+    if ( heap && H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, heap->addr, heap, FALSE) < 0 )
+        HDONE_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to unprotect heap.");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* H5HG_insert() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_read
+ *
+ * Purpose:	Reads the specified global heap object into the buffer OBJECT
+ *		supplied by the caller.  If the caller doesn't supply a
+ *		buffer then one will be allocated.  The buffer should be
+ *		large enough to hold the result.
+ *
+ * Return:	Success:	The buffer containing the result.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, March 30, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5HG_read (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj, void *object/*out*/)
+{
+    H5HG_heap_t	*heap = NULL;
+    int	i;
+    size_t	size;
+    uint8_t	*p = NULL;
+    void	*ret_value;
+
+    FUNC_ENTER_NOAPI(H5HG_read, NULL);
+
+    /* Check args */
+    assert (f);
+    assert (hobj);
+
+    /* Load the heap */
+    if (NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_GHEAP, hobj->addr, NULL, NULL, H5AC_READ)))
+	HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, NULL, "unable to load heap");
+
+    assert (hobj->idx<heap->nused);
+    assert (heap->obj[hobj->idx].begin);
+    size = heap->obj[hobj->idx].size;
+    p = heap->obj[hobj->idx].begin + H5HG_SIZEOF_OBJHDR (f);
+    if (!object && NULL==(object = H5MM_malloc (size)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    HDmemcpy (object, p, size);
+
+    /*
+     * Advance the heap in the CWFS list. We might have done this already
+     * with the H5AC_protect(), but it won't hurt to do it twice.
+     */
+    if (heap->obj[0].begin) {
+	for (i=0; i<f->shared->ncwfs; i++) {
+	    if (f->shared->cwfs[i]==heap) {
+		if (i) {
+		    f->shared->cwfs[i] = f->shared->cwfs[i-1];
+		    f->shared->cwfs[i-1] = heap;
+		}
+		break;
+	    }
+	}
+    }
+
+    /* Set return value */
+    ret_value=object;
+
+done:
+    if (heap && H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, hobj->addr, heap, FALSE)<0)
+        HDONE_ERROR(H5E_HEAP, H5E_PROTECT, NULL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_link
+ *
+ * Purpose:	Adjusts the link count for a global heap object by adding
+ *		ADJUST to the current value.  This function will fail if the
+ *		new link count would overflow.  Nothing special happens when
+ *		the link count reaches zero; in order for a heap object to be
+ *		removed one must call H5HG_remove().
+ *
+ * Return:	Success:	Number of links present after the adjustment.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, March 30, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5HG_link (H5F_t *f, hid_t dxpl_id, const H5HG_t *hobj, int adjust)
+{
+    H5HG_heap_t *heap = NULL;
+    int ret_value;              /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HG_link, FAIL);
+
+    /* Check args */
+    assert (f);
+    assert (hobj);
+    if (0==(f->intent & H5F_ACC_RDWR))
+	HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file");
+
+    if(adjust!=0) {
+        /* Load the heap */
+        if (NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_GHEAP, hobj->addr, NULL, NULL, H5AC_WRITE)))
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap");
+
+        assert (hobj->idx<heap->nused);
+        assert (heap->obj[hobj->idx].begin);
+        if (heap->obj[hobj->idx].nrefs+adjust<0)
+            HGOTO_ERROR (H5E_HEAP, H5E_BADRANGE, FAIL, "new link count would be out of range");
+        if (heap->obj[hobj->idx].nrefs+adjust>H5HG_MAXLINK)
+            HGOTO_ERROR (H5E_HEAP, H5E_BADVALUE, FAIL, "new link count would be out of range");
+        heap->obj[hobj->idx].nrefs += adjust;
+        heap->cache_info.is_dirty = TRUE;
+    } /* end if */
+
+    /* Set return value */
+    ret_value=heap->obj[hobj->idx].nrefs;
+
+done:
+    if (heap && H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, hobj->addr, heap, FALSE)<0)
+        HDONE_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_remove
+ *
+ * Purpose:	Removes the specified object from the global heap.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, March 30, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5HG_remove (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj)
+{
+    uint8_t	*p=NULL, *obj_start=NULL;
+    H5HG_heap_t	*heap = NULL;
+    size_t	need;
+    int	i;
+    unsigned	u;
+    hbool_t     deleted=FALSE;          /* Whether the heap gets deleted */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HG_remove, FAIL);
+
+    /* Check args */
+    assert (f);
+    assert (hobj);
+    if (0==(f->intent & H5F_ACC_RDWR))
+        HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file");
+
+    /* Load the heap */
+    if (NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_GHEAP, hobj->addr, NULL, NULL, H5AC_WRITE)))
+        HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap");
+
+    assert (hobj->idx<heap->nused);
+    assert (heap->obj[hobj->idx].begin);
+    obj_start = heap->obj[hobj->idx].begin;
+    /* Include object header size */
+    need = H5HG_ALIGN(heap->obj[hobj->idx].size)+H5HG_SIZEOF_OBJHDR(f);
+
+    /* Move the new free space to the end of the heap */
+    for (u=0; u<heap->nused; u++) {
+        if (heap->obj[u].begin > heap->obj[hobj->idx].begin)
+            heap->obj[u].begin -= need;
+    }
+    if (NULL==heap->obj[0].begin) {
+        heap->obj[0].begin = heap->chunk + (heap->size-need);
+        heap->obj[0].size = need;
+        heap->obj[0].nrefs = 0;
+    } else {
+        heap->obj[0].size += need;
+    }
+    HDmemmove (obj_start, obj_start+need,
+	       heap->size-((obj_start+need)-heap->chunk));
+    if (heap->obj[0].size>=H5HG_SIZEOF_OBJHDR (f)) {
+        p = heap->obj[0].begin;
+        UINT16ENCODE(p, 0); /*id*/
+        UINT16ENCODE(p, 0); /*nrefs*/
+        UINT32ENCODE(p, 0); /*reserved*/
+        H5F_ENCODE_LENGTH (f, p, heap->obj[0].size);
+    }
+    HDmemset (heap->obj+hobj->idx, 0, sizeof(H5HG_obj_t));
+    heap->cache_info.is_dirty = TRUE;
+
+    if (heap->obj[0].size+H5HG_SIZEOF_HDR(f)==heap->size) {
+        /*
+         * The collection is empty. Remove it from the CWFS list and return it
+         * to the file free list.
+         */
+        heap->cache_info.is_dirty = FALSE;
+        H5_CHECK_OVERFLOW(heap->size,size_t,hsize_t);
+        H5MF_xfree(f, H5FD_MEM_GHEAP, dxpl_id, heap->addr, (hsize_t)heap->size);
+        deleted=TRUE;   /* Indicate that the object was deleted, for the unprotect call */
+    } else {
+        /*
+         * If the heap is in the CWFS list then advance it one position.  The
+         * H5AC_protect() might have done that too, but that's okay.  If the
+         * heap isn't on the CWFS list then add it to the end.
+         */
+        for (i=0; i<f->shared->ncwfs; i++) {
+            if (f->shared->cwfs[i]==heap) {
+                if (i) {
+                    f->shared->cwfs[i] = f->shared->cwfs[i-1];
+                    f->shared->cwfs[i-1] = heap;
+                }
+                break;
+            }
+        }
+        if (i>=f->shared->ncwfs) {
+            f->shared->ncwfs = MIN (f->shared->ncwfs+1, H5HG_NCWFS);
+            f->shared->cwfs[f->shared->ncwfs-1] = heap;
+        }
+    }
+
+done:
+    if (heap && H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, hobj->addr, heap, deleted) != SUCCEED)
+        HDONE_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}

Added: packages/hdf5/branches/upstream/current/src/H5HGdbg.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5HGdbg.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5HGdbg.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,132 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Wednesday, July 9, 2003
+ *
+ * Purpose:	Global Heap object debugging functions.
+ */
+#define H5HG_PACKAGE		/*suppress error about including H5HGpkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5Eprivate.h"		/* Error handling		        */
+#include "H5HGpkg.h"		/* Global heaps				*/
+#include "H5Iprivate.h"		/* ID Functions		                */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_debug
+ *
+ * Purpose:	Prints debugging information about a global heap collection.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Mar 27, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ *              Robb Matzke, LLNL, 2003-06-05
+ *              The size does not include the object header, just the data.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5HG_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
+	  int fwidth)
+{
+    unsigned		u, nused, maxobj;
+    unsigned		j, k;
+    H5HG_heap_t		*h = NULL;
+    char		buf[64];
+    uint8_t		*p = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HG_debug, FAIL);
+
+    /* check arguments */
+    assert(f);
+    assert(H5F_addr_defined (addr));
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    if (NULL == (h = H5AC_protect(f, dxpl_id, H5AC_GHEAP, addr, NULL, NULL, H5AC_READ)))
+        HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load global heap collection");
+
+    fprintf(stream, "%*sGlobal Heap Collection...\n", indent, "");
+    fprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
+	    "Dirty:",
+	    (int)(h->cache_info.is_dirty));
+    fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
+	    "Total collection size in file:",
+	    (unsigned long)(h->size));
+
+    for (u=1, nused=0, maxobj=0; u<h->nused; u++) {
+	if (h->obj[u].begin) {
+	    nused++;
+	    if (u>maxobj) maxobj = u;
+	}
+    }
+    fprintf (stream, "%*s%-*s %u/%lu/", indent, "", fwidth,
+	     "Objects defined/allocated/max:",
+	     nused, (unsigned long)h->nalloc);
+    fprintf (stream, nused ? "%u\n": "NA\n", maxobj);
+
+    fprintf (stream, "%*s%-*s %lu\n", indent, "", fwidth,
+	     "Free space:",
+	     (unsigned long)(h->obj[0].size));
+
+    for (u=1; u<h->nused; u++) {
+	if (h->obj[u].begin) {
+	    sprintf (buf, "Object %u", u);
+	    fprintf (stream, "%*s%s\n", indent, "", buf);
+	    fprintf (stream, "%*s%-*s %d\n", indent+3, "", MIN(fwidth-3, 0),
+		     "Reference count:",
+		     h->obj[u].nrefs);
+	    fprintf (stream, "%*s%-*s %lu/%lu\n", indent+3, "",
+		     MIN(fwidth-3, 0),
+		     "Size of object body:",
+		     (unsigned long)(h->obj[u].size),
+		     (unsigned long)H5HG_ALIGN(h->obj[u].size));
+	    p = h->obj[u].begin + H5HG_SIZEOF_OBJHDR (f);
+	    for (j=0; j<h->obj[u].size; j+=16) {
+		fprintf (stream, "%*s%04d: ", indent+6, "", j);
+		for (k=0; k<16; k++) {
+		    if (8==k) fprintf (stream, " ");
+		    if (j+k<h->obj[u].size) {
+			fprintf (stream, "%02x ", p[j+k]);
+		    } else {
+			HDfputs("   ", stream);
+		    }
+		}
+		for (k=0; k<16 && j+k<h->obj[u].size; k++) {
+		    if (8==k) fprintf (stream, " ");
+		    HDfputc(p[j+k]>' ' && p[j+k]<='~' ? p[j+k] : '.', stream);
+		}
+		fprintf (stream, "\n");
+	    }
+	}
+    }
+
+done:
+    if (h && H5AC_unprotect(f, dxpl_id, H5AC_GHEAP, addr, h, FALSE) != SUCCEED)
+        HDONE_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}

Added: packages/hdf5/branches/upstream/current/src/H5HGpkg.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5HGpkg.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5HGpkg.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,96 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *             Wednesday, July 9, 2003
+ *
+ * Purpose:     This file contains declarations which are visible
+ *              only within the H5HG package. Source files outside the
+ *              H5HG package should include H5HGprivate.h instead.
+ */
+#ifndef H5HG_PACKAGE
+#error "Do not include this file outside the H5HG package!"
+#endif
+
+#ifndef _H5HGpkg_H
+#define _H5HGpkg_H
+
+/* Get package's private header */
+#include "H5HGprivate.h"
+
+/* Other private headers needed by this file */
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+/* The cache subclass */
+H5_DLLVAR const H5AC_class_t H5AC_GHEAP[1];
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/*
+ * Pad all global heap messages to a multiple of eight bytes so we can load
+ * the entire collection into memory and operate on it there.  Eight should
+ * be sufficient for machines that have alignment constraints because our
+ * largest data type is eight bytes.
+ */
+#define H5HG_ALIGNMENT	8
+#define H5HG_ALIGN(X)	(H5HG_ALIGNMENT*(((X)+H5HG_ALIGNMENT-1)/	      \
+					 H5HG_ALIGNMENT))
+#define H5HG_ISALIGNED(X) ((X)==H5HG_ALIGN(X))
+
+/*
+ * The overhead associated with each object in the heap, always a multiple of
+ * the alignment so that the stuff that follows the header is aligned.
+ */
+#define H5HG_SIZEOF_OBJHDR(f)						      \
+    H5HG_ALIGN(2 +			/*object id number	*/	      \
+	       2 +			/*reference count	*/	      \
+	       4 +			/*reserved		*/	      \
+	       H5F_SIZEOF_SIZE(f))	/*object data size	*/
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+typedef struct H5HG_obj_t {
+    int		nrefs;		/*reference count		*/
+    size_t		size;		/*total size of object		*/
+    uint8_t		*begin;		/*ptr to object into heap->chunk*/
+} H5HG_obj_t;
+
+struct H5HG_heap_t {
+    H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
+                            /* first field in structure */
+    haddr_t		addr;		/*collection address		*/
+    size_t		size;		/*total size of collection	*/
+    uint8_t		*chunk;		/*the collection, incl. header	*/
+    size_t		nalloc;		/*numb object slots allocated	*/
+    size_t		nused;		/*number of slots used		*/
+                                        /* If this value is >65535 then all indices */
+                                        /* have been used at some time and the */
+                                        /* correct new index should be searched for */
+    H5HG_obj_t	*obj;		/*array of object descriptions	*/
+};
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+#endif
+

Added: packages/hdf5/branches/upstream/current/src/H5HGprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5HGprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5HGprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,53 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Friday, March 27, 1998
+ */
+#ifndef _H5HGprivate_H
+#define _H5HGprivate_H
+
+/* Include package's public header */
+#include "H5HGpublic.h"
+
+/* Private headers needed by this file. */
+#include "H5Fprivate.h"		/* File access				*/
+
+/*
+ * Each collection has a magic number for some redundancy.
+ */
+#define H5HG_MAGIC	"GCOL"
+#define H5HG_SIZEOF_MAGIC 4
+
+/* Information to locate object in global heap */
+typedef struct H5HG_t {
+    haddr_t		addr;		/*address of collection		*/
+    size_t		idx;		/*object ID within collection	*/
+} H5HG_t;
+
+/* Typedef for heap in memory (defined in H5HGpkg.h) */
+typedef struct H5HG_heap_t H5HG_heap_t;
+
+H5_DLL herr_t H5HG_insert(H5F_t *f, hid_t dxpl_id, size_t size, void *obj,
+			   H5HG_t *hobj/*out*/);
+H5_DLL void *H5HG_read(H5F_t *f, hid_t dxpl_id, H5HG_t *hobj, void *object);
+H5_DLL int H5HG_link(H5F_t *f, hid_t dxpl_id, const H5HG_t *hobj, int adjust);
+H5_DLL herr_t H5HG_remove(H5F_t *f, hid_t dxpl_id, H5HG_t *hobj);
+
+/* Debugging functions */
+H5_DLL herr_t H5HG_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
+			  int fwidth);
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5HGpublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5HGpublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5HGpublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,32 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Friday, March 27, 1998
+ */
+#ifndef _H5HGpublic_H
+#define _H5HGpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5HL.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5HL.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5HL.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1372 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:		H5HL.c
+ *			Jul 16 1997
+ *			Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:		Heap functions for the local heaps used by symbol
+ *			tables to store names (among other things).
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 5 Aug 1997
+ *	Added calls to H5E.
+ *
+ *-------------------------------------------------------------------------
+ */
+#define H5F_PACKAGE		/* Suppress error about including H5Fpkg  */
+#define H5HL_PACKAGE		/* Suppress error about including H5HLpkg */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"             /* File access				*/
+#include "H5FLprivate.h"	/* Free lists                           */
+#include "H5HLpkg.h"		/* Local Heaps				*/
+#include "H5MFprivate.h"	/* File memory management		*/
+
+/* Private macros */
+#define H5HL_FREE_NULL	1		/*end of free list on disk	*/
+#define H5HL_MIN_HEAP   256             /* Minimum size to reduce heap buffer to */
+
+/*
+ * Local heap collection version.
+ */
+#define H5HL_VERSION	0
+
+/* Private typedefs */
+
+/* PRIVATE PROTOTYPES */
+#ifdef NOT_YET
+static void *H5HL_read(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset, size_t size,
+			void *buf);
+static herr_t H5HL_write(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset, size_t size,
+			  const void *buf);
+#endif /* NOT_YET */
+
+static herr_t H5HL_serialize(H5F_t *f, H5HL_t *heap, uint8_t *buf);
+static H5HL_free_t *H5HL_remove_free(H5HL_t *heap, H5HL_free_t *fl);
+static herr_t H5HL_minimize_heap_space(H5F_t *f, hid_t dxpl_id, H5HL_t *heap);
+
+/* Metadata cache callbacks */
+static H5HL_t *H5HL_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *udata1,
+			 void *udata2);
+static herr_t H5HL_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr, H5HL_t *heap);
+static herr_t H5HL_dest(H5F_t *f, H5HL_t *heap);
+static herr_t H5HL_clear(H5F_t *f, H5HL_t *heap, hbool_t destroy);
+static herr_t H5HL_compute_size(const H5F_t *f, const H5HL_t *heap, size_t *size_ptr);
+
+/*
+ * H5HL inherits cache-like properties from H5AC
+ */
+const H5AC_class_t H5AC_LHEAP[1] = {{
+    H5AC_LHEAP_ID,
+    (H5AC_load_func_t)H5HL_load,
+    (H5AC_flush_func_t)H5HL_flush,
+    (H5AC_dest_func_t)H5HL_dest,
+    (H5AC_clear_func_t)H5HL_clear,
+    (H5AC_size_func_t)H5HL_compute_size,
+}};
+
+/* Declare a free list to manage the H5HL_free_t struct */
+H5FL_DEFINE_STATIC(H5HL_free_t);
+
+/* Declare a free list to manage the H5HL_t struct */
+H5FL_DEFINE_STATIC(H5HL_t);
+
+/* Declare a PQ free list to manage the heap chunk information */
+H5FL_BLK_DEFINE_STATIC(heap_chunk);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HL_create
+ *
+ * Purpose:	Creates a new heap data structure on disk and caches it
+ *		in memory.  SIZE_HINT is a hint for the initial size of the
+ *		data area of the heap.	If size hint is invalid then a
+ *		reasonable (but probably not optimal) size will be chosen.
+ *		If the heap ever has to grow, then REALLOC_HINT is the
+ *		minimum amount by which the heap will grow.
+ *
+ * Return:	Success:	Non-negative. The file address of new heap is
+ *				returned through the ADDR argument.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 16 1997
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 5 Aug 1997
+ *	Takes a flag that determines the type of heap that is
+ *	created.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5HL_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, haddr_t *addr_p/*out*/)
+{
+    H5HL_t	*heap = NULL;
+    hsize_t	total_size;		/*total heap size on disk	*/
+    size_t      sizeof_hdr;             /* Cache H5HL header size for file */
+    herr_t	ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5HL_create, FAIL);
+
+    /* check arguments */
+    assert(f);
+    assert(addr_p);
+
+    if (size_hint && size_hint < H5HL_SIZEOF_FREE(f))
+	size_hint = H5HL_SIZEOF_FREE(f);
+    size_hint = H5HL_ALIGN(size_hint);
+
+    /* Cache this for later */
+    sizeof_hdr= H5HL_SIZEOF_HDR(f);
+
+    /* allocate file version */
+    total_size = sizeof_hdr + size_hint;
+    if (HADDR_UNDEF==(*addr_p=H5MF_alloc(f, H5FD_MEM_LHEAP, dxpl_id, total_size)))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate file memory");
+
+    /* allocate memory version */
+    if (NULL==(heap = H5FL_CALLOC(H5HL_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+    heap->addr = *addr_p + (hsize_t)sizeof_hdr;
+    heap->disk_alloc = size_hint;
+    heap->mem_alloc = size_hint;
+    heap->disk_resrv = 0;
+    if (NULL==(heap->chunk = H5FL_BLK_CALLOC(heap_chunk,(sizeof_hdr + size_hint))))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+    /* free list */
+    if (size_hint) {
+	if (NULL==(heap->freelist = H5FL_MALLOC(H5HL_free_t)))
+	    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+	heap->freelist->offset = 0;
+	heap->freelist->size = size_hint;
+	heap->freelist->prev = heap->freelist->next = NULL;
+    } else {
+	heap->freelist = NULL;
+    }
+
+    /* add to cache */
+    heap->cache_info.is_dirty = TRUE;
+    if (H5AC_set(f, dxpl_id, H5AC_LHEAP, *addr_p, heap) < 0)
+	HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "unable to cache heap");
+
+done:
+    if (ret_value<0) {
+	if (H5F_addr_defined(*addr_p))
+	    H5MF_xfree(f, H5FD_MEM_LHEAP, dxpl_id, *addr_p, total_size);
+	if (heap) {
+            if(H5HL_dest(f,heap)<0)
+                HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy local heap collection");
+	}
+    }
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HL_load
+ *
+ * Purpose:	Loads a heap from disk.
+ *
+ * Return:	Success:	Ptr to a local heap memory data structure.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 17 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *
+ *	Quincey Koziol, 2002-7-180
+ *	Added dxpl parameter to allow more control over I/O from metadata
+ *      cache.
+ *-------------------------------------------------------------------------
+ */
+static H5HL_t *
+H5HL_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED * udata1,
+	  void UNUSED * udata2)
+{
+    uint8_t		hdr[52];
+    size_t              sizeof_hdr;     /* Cache H5HL header size for file */
+    const uint8_t	*p = NULL;
+    H5HL_t		*heap = NULL;
+    H5HL_free_t		*fl = NULL, *tail = NULL;
+    size_t		free_block = H5HL_FREE_NULL;
+    H5HL_t		*ret_value;
+
+    FUNC_ENTER_NOAPI(H5HL_load, NULL);
+
+    /* check arguments */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(!udata1);
+    assert(!udata2);
+
+    /* Cache this for later */
+    sizeof_hdr= H5HL_SIZEOF_HDR(f);
+    assert(sizeof_hdr <= sizeof(hdr));
+
+    /* Get the local heap's header */
+    if (H5F_block_read(f, H5FD_MEM_LHEAP, addr, sizeof_hdr, dxpl_id, hdr) < 0)
+	HGOTO_ERROR(H5E_HEAP, H5E_READERROR, NULL, "unable to read heap header");
+    p = hdr;
+
+    /* Check magic number */
+    if (HDmemcmp(hdr, H5HL_MAGIC, H5HL_SIZEOF_MAGIC))
+	HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "bad heap signature");
+    p += H5HL_SIZEOF_MAGIC;
+
+    /* Version */
+    if (H5HL_VERSION!=*p++)
+	HGOTO_ERROR (H5E_HEAP, H5E_CANTLOAD, NULL, "wrong version number in global heap");
+
+    /* Reserved */
+    p += 3;
+
+    /* Allocate space in memory for the heap */
+    if (NULL==(heap = H5FL_CALLOC(H5HL_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* heap data size */
+    H5F_DECODE_LENGTH(f, p, heap->disk_alloc);
+    heap->mem_alloc = heap->disk_alloc;
+
+    /* free list head */
+    H5F_DECODE_LENGTH(f, p, free_block);
+    if (free_block != H5HL_FREE_NULL && free_block >= heap->disk_alloc)
+	HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "bad heap free list");
+
+    /* data */
+    H5F_addr_decode(f, &p, &(heap->addr));
+    if (NULL==(heap->chunk = H5FL_BLK_CALLOC(heap_chunk,(sizeof_hdr + heap->mem_alloc))))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    if (heap->disk_alloc &&
+            H5F_block_read(f, H5FD_MEM_LHEAP, heap->addr, heap->disk_alloc, dxpl_id, heap->chunk + sizeof_hdr) < 0)
+	HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "unable to read heap data");
+
+    /* Build free list */
+    while (H5HL_FREE_NULL != free_block) {
+	if (free_block >= heap->disk_alloc)
+	    HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "bad heap free list");
+	if (NULL==(fl = H5FL_MALLOC(H5HL_free_t)))
+	    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+	fl->offset = free_block;
+	fl->prev = tail;
+	fl->next = NULL;
+	if (tail) tail->next = fl;
+	tail = fl;
+	if (!heap->freelist) heap->freelist = fl;
+
+	p = heap->chunk + sizeof_hdr + free_block;
+	H5F_DECODE_LENGTH(f, p, free_block);
+	H5F_DECODE_LENGTH(f, p, fl->size);
+
+	if (fl->offset + fl->size > heap->disk_alloc)
+	    HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "bad heap free list");
+    }
+
+    /* Set return value */
+    ret_value = heap;
+
+done:
+    if (!ret_value && heap) {
+        if(H5HL_dest(f,heap)<0)
+	    HDONE_ERROR(H5E_HEAP, H5E_CANTFREE, NULL, "unable to destroy local heap collection");
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5HL_minimize_heap_space
+ *
+ * Purpose:     Go through the heap's freelist and determine if we can
+ *              eliminate the free blocks at the tail of the buffer.
+ *
+ * Return:      Success:        SUCCEED
+ *              Failure:        FAIL
+ *
+ * Programmer:  Bill Wendling
+ *              wendling at ncsa.uiuc.edu
+ *              Sept. 16, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HL_minimize_heap_space(H5F_t *f, hid_t dxpl_id, H5HL_t *heap)
+{
+    herr_t      ret_value = SUCCEED;
+    size_t      sizeof_hdr;
+
+    FUNC_ENTER_NOAPI(H5HL_minimize_heap_space, FAIL)
+
+    /* check args */
+    assert(f);
+    assert(heap);
+
+    sizeof_hdr = H5HL_SIZEOF_HDR(f);    /* cache H5HL header size for file */
+
+    /*
+     * When the heap is being flushed to disk, release the file space reserved
+     * for it.
+     */
+    H5MF_free_reserved(f, (hsize_t)heap->disk_resrv);
+    heap->disk_resrv = 0;
+
+    /*
+     * Check to see if we can reduce the size of the heap in memory by
+     * eliminating free blocks at the tail of the buffer before flushing the
+     * buffer out.
+     */
+    if (heap->freelist) {
+        H5HL_free_t    *tmp_fl;
+        H5HL_free_t    *last_fl = NULL;
+
+        /* Search for a free block at the end of the buffer */
+        for (tmp_fl = heap->freelist; tmp_fl; tmp_fl = tmp_fl->next)
+            /* Check if the end of this free block is at the end of the buffer */
+            if (tmp_fl->offset + tmp_fl->size == heap->mem_alloc) {
+                last_fl = tmp_fl;
+                break;
+            }
+
+        /*
+         * Found free block at the end of the buffer, decide what to do
+         * about it
+         */
+        if (last_fl) {
+            size_t  new_mem_size = heap->mem_alloc; /* New size of memory buffer */
+
+            /*
+             * If the last free block's size is more than half the memory
+             * buffer size (and the memory buffer is larger than the
+             * minimum size), reduce or eliminate it.
+             */
+            if (last_fl->size >= (heap->mem_alloc / 2) && heap->mem_alloc > H5HL_MIN_HEAP) {
+                /*
+                 * Reduce size of buffer until it's too small or would
+                 * eliminate the free block
+                 */
+                while (new_mem_size > H5HL_MIN_HEAP &&
+                        new_mem_size >= (last_fl->offset + H5HL_SIZEOF_FREE(f)))
+                    new_mem_size /= 2;
+
+                /*
+                 * Check if reducing the memory buffer size would
+                 * eliminate the free list
+                 */
+                if (new_mem_size < (last_fl->offset + H5HL_SIZEOF_FREE(f))) {
+                    /* Check if this is the only block on the free list */
+                    if (last_fl->prev == NULL && last_fl->next == NULL) {
+                        /* Double the new memory size */
+                        new_mem_size *= 2;
+
+                        /* Truncate the free block */
+                        last_fl->size = H5HL_ALIGN(new_mem_size - last_fl->offset);
+                        new_mem_size = last_fl->offset + last_fl->size;
+                        assert(last_fl->size >= H5HL_SIZEOF_FREE(f));
+                    } else {
+                        /*
+                         * Set the size of the memory buffer to the start
+                         * of the free list
+                         */
+                        new_mem_size = last_fl->offset;
+
+                        /* Eliminate the free block from the list */
+                        last_fl = H5HL_remove_free(heap, last_fl);
+                    }
+                } else {
+                    /* Truncate the free block */
+                    last_fl->size = H5HL_ALIGN(new_mem_size - last_fl->offset);
+                    new_mem_size = last_fl->offset + last_fl->size;
+                    assert(last_fl->size >= H5HL_SIZEOF_FREE(f));
+                    assert(last_fl->size == H5HL_ALIGN(last_fl->size));
+                }
+
+                /* Resize the memory buffer and reserved space in file */
+                if (new_mem_size != heap->mem_alloc) {
+
+                    heap->mem_alloc = new_mem_size;
+                    heap->chunk = H5FL_BLK_REALLOC(heap_chunk, heap->chunk, (sizeof_hdr + new_mem_size));
+
+                    if (!heap->chunk)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+                }
+            }
+        }
+    }
+
+    /*
+     * If the heap grew larger or smaller than disk storage then move the
+     * data segment of the heap to another contiguous block of disk
+     * storage.
+     */
+    if (heap->mem_alloc != heap->disk_alloc) {
+        haddr_t old_addr = heap->addr, new_addr;
+
+        /* Release old space on disk */
+        H5_CHECK_OVERFLOW(heap->disk_alloc, size_t, hsize_t);
+        H5MF_xfree(f, H5FD_MEM_LHEAP, dxpl_id, old_addr, (hsize_t)heap->disk_alloc);
+        H5E_clear();    /* don't really care if the free failed */
+
+        /* Allocate new space on disk */
+        H5_CHECK_OVERFLOW(heap->mem_alloc, size_t, hsize_t);
+
+        if (HADDR_UNDEF == (new_addr = H5MF_alloc(f, H5FD_MEM_LHEAP, dxpl_id, (hsize_t)heap->mem_alloc)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate file space for heap")
+
+        heap->addr = new_addr;
+
+        /* Set new size of block on disk */
+        heap->disk_alloc = heap->mem_alloc;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5HL_serialize
+ *
+ * Purpose:     Serialize the heap. This function will eliminate free
+ *              blocks at the tail of the heap and also split the block
+ *              if it needs to be split for the file. This is so that we
+ *              can serialize it correctly.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Bill Wendling
+ *              wendling at ncsa.uiuc.edu
+ *              Sept. 16, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HL_serialize(H5F_t *f, H5HL_t *heap, uint8_t *buf)
+{
+    H5HL_free_t	   *fl;
+    uint8_t        *p;
+    herr_t          ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HL_serialize)
+
+    /* check args */
+    assert(buf);
+    assert(heap);
+
+    /* serialize the header */
+    p = buf;
+    fl = heap->freelist;
+    HDmemcpy(p, H5HL_MAGIC, H5HL_SIZEOF_MAGIC);
+    p += H5HL_SIZEOF_MAGIC;
+    *p++ = H5HL_VERSION;
+    *p++ = 0;	/*reserved*/
+    *p++ = 0;	/*reserved*/
+    *p++ = 0;	/*reserved*/
+    H5F_ENCODE_LENGTH(f, p, heap->mem_alloc);
+    H5F_ENCODE_LENGTH(f, p, fl ? fl->offset : H5HL_FREE_NULL);
+    H5F_addr_encode(f, &p, heap->addr);
+
+    /* serialize the free list */
+    for (; fl; fl = fl->next) {
+        assert (fl->offset == H5HL_ALIGN (fl->offset));
+        p = heap->chunk + H5HL_SIZEOF_HDR(f) + fl->offset;
+
+        if (fl->next) {
+            H5F_ENCODE_LENGTH(f, p, fl->next->offset);
+        } else {
+            H5F_ENCODE_LENGTH(f, p, H5HL_FREE_NULL);
+        }
+
+        H5F_ENCODE_LENGTH(f, p, fl->size);
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HL_flush
+ *
+ * Purpose:	Flushes a heap from memory to disk if it's dirty.  Optionally
+ *		deletes the heap from memory.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 17 1997
+ *
+ * Modifications:
+ *      rky, 1998-08-28
+ *      Only p0 writes metadata to disk.
+ *
+ *      Robb Matzke, 1999-07-28
+ *      The ADDR argument is passed by value.
+ *
+ *	Quincey Koziol, 2002-7-180
+ *	Added dxpl parameter to allow more control over I/O from metadata
+ *      cache.
+ *
+ *      Bill Wendling, 2003-09-16
+ *      Separated out the bit that serializes the heap.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HL_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5HL_t *heap)
+{
+    herr_t  ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HL_flush, FAIL);
+
+    /* check arguments */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(heap);
+
+    if (heap->cache_info.is_dirty) {
+        haddr_t hdr_end_addr;
+        size_t  sizeof_hdr = H5HL_SIZEOF_HDR(f);    /* cache H5HL header size for file */
+
+        /* Minimize the heap space size if possible */
+        if (H5HL_minimize_heap_space(f, dxpl_id, heap) < 0)
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to minimize local heap space")
+
+	/* Write the header */
+        if (H5HL_serialize(f, heap, heap->chunk) < 0)
+            HGOTO_ERROR(H5E_BTREE, H5E_CANTSERIALIZE, FAIL, "unable to serialize local heap")
+
+	/* Copy buffer to disk */
+	hdr_end_addr = addr + (hsize_t)sizeof_hdr;
+
+	if (H5F_addr_eq(heap->addr, hdr_end_addr)) {
+	    /* The header and data are contiguous */
+	    if (H5F_block_write(f, H5FD_MEM_LHEAP, addr, (sizeof_hdr + heap->disk_alloc),
+				dxpl_id, heap->chunk) < 0)
+		HGOTO_ERROR(H5E_HEAP, H5E_WRITEERROR, FAIL, "unable to write heap header and data to file")
+	} else {
+	    if (H5F_block_write(f, H5FD_MEM_LHEAP, addr, sizeof_hdr, dxpl_id, heap->chunk) < 0)
+		HGOTO_ERROR(H5E_HEAP, H5E_WRITEERROR, FAIL, "unable to write heap header to file")
+
+	    if (H5F_block_write(f, H5FD_MEM_LHEAP, heap->addr, heap->disk_alloc,
+				dxpl_id, heap->chunk + sizeof_hdr) < 0)
+		HGOTO_ERROR(H5E_HEAP, H5E_WRITEERROR, FAIL, "unable to write heap data to file")
+	}
+
+	heap->cache_info.is_dirty = FALSE;
+    }
+
+    /* Should we destroy the memory version? */
+    if (destroy) {
+        if (H5HL_dest(f,heap) < 0)
+	    HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy local heap collection")
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HL_dest
+ *
+ * Purpose:	Destroys a heap in memory.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Jan 15 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HL_dest(H5F_t UNUSED *f, H5HL_t *heap)
+{
+    H5HL_free_t	*fl;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HL_dest);
+
+    /* check arguments */
+    assert(heap);
+
+    /* Verify that node is clean */
+    assert (heap->cache_info.is_dirty==FALSE);
+
+    if(heap->chunk)
+        heap->chunk = H5FL_BLK_FREE(heap_chunk,heap->chunk);
+    while (heap->freelist) {
+        fl = heap->freelist;
+        heap->freelist = fl->next;
+        H5FL_FREE(H5HL_free_t,fl);
+    }
+    H5FL_FREE(H5HL_t,heap);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5HL_dest() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HL_clear
+ *
+ * Purpose:	Mark a local heap in memory as non-dirty.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Mar 20 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HL_clear(H5F_t *f, H5HL_t *heap, hbool_t destroy)
+{
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5HL_clear);
+
+    /* check arguments */
+    assert(heap);
+
+    /* Mark heap as clean */
+    heap->cache_info.is_dirty = FALSE;
+
+    if (destroy)
+        if (H5HL_dest(f, heap) < 0)
+	    HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to destroy local heap collection");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5HL_clear() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HL_compute_size
+ *
+ * Purpose:	Compute the size in bytes of the specified instance of
+ *              H5HL_t on disk, and return it in *len_ptr.  On failure,
+ *              the value of *len_ptr is undefined.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	John Mainzer
+ *		5/13/04
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HL_compute_size(const H5F_t *f, const H5HL_t *heap, size_t *size_ptr)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HL_compute_size);
+
+    /* check arguments */
+    HDassert(f);
+    HDassert(heap);
+    HDassert(size_ptr);
+
+    *size_ptr = H5HL_SIZEOF_HDR(f) + heap->disk_alloc;
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5HL_compute_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HL_read
+ *
+ * Purpose:	Reads some object (or part of an object) from the heap
+ *		whose address is ADDR in file F.  OFFSET is the byte offset
+ *		from the beginning of the heap at which to begin reading
+ *		and SIZE is the number of bytes to read.
+ *
+ *		If BUF is the null pointer then a buffer is allocated by
+ *		this function.
+ *
+ *		Attempting to read past the end of an object may cause this
+ *		function to fail.
+ *
+ * Return:	Success:	BUF (or the allocated buffer)
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 16 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+#ifdef NOT_YET
+static void *
+H5HL_read(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset, size_t size, void *buf)
+{
+    H5HL_t	*heap = NULL;
+    void      *ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HL_read, NULL);
+
+    /* check arguments */
+    assert(f);
+    assert (H5F_addr_defined(addr));
+
+    if (NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL, H5AC_READ)))
+	HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "unable to load heap");
+
+    assert(offset < heap->mem_alloc);
+    assert(offset + size <= heap->mem_alloc);
+
+    if (!buf && NULL==(buf = H5MM_malloc(size)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    HDmemcpy(buf, heap->chunk + H5HL_SIZEOF_HDR(f) + offset, size);
+
+    /* Set return value */
+    ret_value=buf;
+
+done:
+    if (heap && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, FALSE) != SUCCEED)
+        HDONE_ERROR(H5E_HEAP, H5E_PROTECT, NULL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+#endif /* NOT_YET */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5HL_protect
+ *
+ * Purpose:     This function is a wrapper for the H5AC_protect call. The
+ *              old H5HL_peek call (which this once was) wasn't "safe"
+ *              for FPHDF5. (It'd get a read lock on an object but once
+ *              it got that object, it'd release it keeping the old
+ *              pointer value, which is no longer valid. This won't work
+ *              since the pointer into some metdata block can become
+ *              invalid.)
+ *
+ *              N.B.: This function is always called in conjunction with
+ *              the H5HL_offset_into function. The return from that
+ *              function is the proper pointer to the heap's object. This
+ *              is done so that the return from this function can be sent
+ *              to H5HL_unprotect.
+ *
+ * Return:      Success:    Ptr to the object. The pointer points to a
+ *                          chunk of memory large enough to hold the
+ *                          object from the specified offset (usually the
+ *                          beginning of the object) to the end of the
+ *                          object. Do not attempt to read past the end
+ *                          of the object.
+ *              Failure:    NULL
+ *
+ * Programmer:  Bill Wendling
+ *              wendling at ncsa.uiuc.edu
+ *              Sept. 17, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+const H5HL_t *
+H5HL_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr)
+{
+    H5HL_t *ret_value = NULL;
+
+    FUNC_ENTER_NOAPI(H5HL_protect, NULL);
+
+    /* check arguments */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+
+    if (NULL == (ret_value = H5AC_protect(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL, H5AC_READ)))
+        HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, NULL, "unable to load heap");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5HL_offset_into
+ *
+ * Purpose:     Called directly after the call to H5HL_protect so that
+ *              a pointer to the object in the heap can be got.
+ *
+ * Return:      Success:    Valid pointer.
+ *              Failure:    NULL
+ *
+ * Programmer:  Bill Wendling
+ *              wendling at ncsa.uiuc.edu
+ *              Sept. 17, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5HL_offset_into(H5F_t *f, const H5HL_t *heap, size_t offset)
+{
+    /*
+     * We need to have called some other function before this to get a
+     * valid heap pointer. So, this can remain "FUNC_ENTER_NOAPI_NOINIT"
+     */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HL_offset_into)
+    assert(f);
+    assert(heap);
+    assert(offset < heap->mem_alloc);
+    FUNC_LEAVE_NOAPI(heap->chunk + H5HL_SIZEOF_HDR(f) + offset)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5HL_unprotect
+ *
+ * Purpose:     Unprotect the data retrieved by the H5HL_protect call.
+ *
+ * Return:      Success:    SUCCEED
+ *              Failure:    FAIL
+ *
+ * Programmer:  Bill Wendling
+ *              wendling at ncsa.uiuc.edu
+ *              Sept. 17, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5HL_unprotect(H5F_t *f, hid_t dxpl_id, const H5HL_t *heap, haddr_t addr)
+{
+    herr_t  ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5HL_unprotect, FAIL);
+
+    /* check arguments */
+    assert(f);
+    assert(heap);
+    assert(H5F_addr_defined(addr));
+
+    if (H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, (void *)heap, FALSE) != SUCCEED)
+        HGOTO_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release object header");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HL_remove_free
+ *
+ * Purpose:	Removes free list element FL from the specified heap and
+ *		frees it.
+ *
+ * Return:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 17 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5HL_free_t *
+H5HL_remove_free(H5HL_t *heap, H5HL_free_t *fl)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HL_remove_free);
+
+    if (fl->prev) fl->prev->next = fl->next;
+    if (fl->next) fl->next->prev = fl->prev;
+
+    if (!fl->prev) heap->freelist = fl->next;
+
+    FUNC_LEAVE_NOAPI(H5FL_FREE(H5HL_free_t,fl));
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HL_insert
+ *
+ * Purpose:	Inserts a new item into the heap.
+ *
+ * Return:	Success:	Offset of new item within heap.
+ *
+ *		Failure:	(size_t)(-1)
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 17 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5HL_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t buf_size, const void *buf)
+{
+    H5HL_t	*heap = NULL;
+    H5HL_free_t	*fl = NULL, *max_fl = NULL;
+    size_t	offset = 0;
+    size_t	need_size, old_size, need_more;
+    hbool_t	found;
+    size_t	disk_resrv;	/* Amount of additional space to reserve in file */
+    size_t      sizeof_hdr;     /* Cache H5HL header size for file */
+    size_t	ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HL_insert, (size_t)(-1));
+
+    /* check arguments */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(buf_size > 0);
+    assert(buf);
+
+    if (0==(f->intent & H5F_ACC_RDWR))
+	HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, (size_t)(-1), "no write intent on file");
+
+    if (NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_HEAP, H5E_PROTECT, (size_t)(-1), "unable to load heap");
+
+    heap->cache_info.is_dirty=TRUE;
+
+    /* Cache this for later */
+    sizeof_hdr= H5HL_SIZEOF_HDR(f);
+
+    /*
+     * In order to keep the free list descriptors aligned on word boundaries,
+     * whatever that might mean, we round the size up to the next multiple of
+     * a word.
+     */
+    need_size = H5HL_ALIGN(buf_size);
+
+    /*
+     * Look for a free slot large enough for this object and which would
+     * leave zero or at least H5G_SIZEOF_FREE bytes left over.
+     */
+    for (fl=heap->freelist, found=FALSE; fl; fl=fl->next) {
+	if (fl->size > need_size &&
+	    fl->size - need_size >= H5HL_SIZEOF_FREE(f)) {
+	    /* a bigger free block was found */
+	    offset = fl->offset;
+	    fl->offset += need_size;
+	    fl->size -= need_size;
+	    assert (fl->offset==H5HL_ALIGN (fl->offset));
+	    assert (fl->size==H5HL_ALIGN (fl->size));
+	    found = TRUE;
+	    break;
+	} else if (fl->size == need_size) {
+	    /* free block of exact size found */
+	    offset = fl->offset;
+	    fl = H5HL_remove_free(heap, fl);
+	    found = TRUE;
+	    break;
+	} else if (!max_fl || max_fl->offset < fl->offset) {
+	    /* use worst fit */
+	    max_fl = fl;
+	}
+    }
+
+    /*
+     * If no free chunk was large enough, then allocate more space and
+     * add it to the free list.	 If the heap ends with a free chunk, we
+     * can extend that free chunk.  Otherwise we'll have to make another
+     * free chunk.  If the heap must expand, we double its size.
+     */
+    if (found==FALSE) {
+	need_more = MAX3(need_size, heap->mem_alloc, H5HL_SIZEOF_FREE(f));
+
+	/* Reserve space in the file to hold the increased heap size
+	 */
+	if( heap->disk_resrv == heap->mem_alloc)
+		disk_resrv = need_more;
+	else
+		disk_resrv = heap->mem_alloc + need_more - heap->disk_resrv;
+
+	if( H5MF_reserve(f, (hsize_t)disk_resrv) < 0 )
+		HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, (size_t)(-1), "unable to reserve space in file");
+
+	/* Update heap's record of how much space it has reserved */
+	heap->disk_resrv += disk_resrv;
+
+	if (max_fl && max_fl->offset + max_fl->size == heap->mem_alloc) {
+	    /*
+	     * Increase the size of the maximum free block.
+	     */
+	    offset = max_fl->offset;
+	    max_fl->offset += need_size;
+	    max_fl->size += need_more - need_size;
+	    assert (max_fl->offset==H5HL_ALIGN (max_fl->offset));
+	    assert (max_fl->size==H5HL_ALIGN (max_fl->size));
+
+	    if (max_fl->size < H5HL_SIZEOF_FREE(f)) {
+#ifdef H5HL_DEBUG
+		if (H5DEBUG(HL) && max_fl->size) {
+		    fprintf(H5DEBUG(HL), "H5HL: lost %lu bytes at line %d\n",
+			    (unsigned long)(max_fl->size), __LINE__);
+		}
+#endif
+		max_fl = H5HL_remove_free(heap, max_fl);
+	    }
+	} else {
+	    /*
+	     * Create a new free list element large enough that we can
+	     * take some space out of it right away.
+	     */
+	    offset = heap->mem_alloc;
+	    if (need_more - need_size >= H5HL_SIZEOF_FREE(f)) {
+		if (NULL==(fl = H5FL_MALLOC(H5HL_free_t)))
+		    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, (size_t)(-1), "memory allocation failed");
+		fl->offset = heap->mem_alloc + need_size;
+		fl->size = need_more - need_size;
+		assert (fl->offset==H5HL_ALIGN (fl->offset));
+		assert (fl->size==H5HL_ALIGN (fl->size));
+		fl->prev = NULL;
+		fl->next = heap->freelist;
+		if (heap->freelist) heap->freelist->prev = fl;
+		heap->freelist = fl;
+#ifdef H5HL_DEBUG
+	    } else if (H5DEBUG(HL) && need_more > need_size) {
+		fprintf(H5DEBUG(HL),
+			"H5HL_insert: lost %lu bytes at line %d\n",
+			(unsigned long)(need_more - need_size), __LINE__);
+#endif
+	    }
+	}
+
+#ifdef H5HL_DEBUG
+	if (H5DEBUG(HL)) {
+	    fprintf(H5DEBUG(HL),
+		    "H5HL: resize mem buf from %lu to %lu bytes\n",
+		    (unsigned long)(heap->mem_alloc),
+		    (unsigned long)(heap->mem_alloc + need_more));
+	}
+#endif
+	old_size = heap->mem_alloc;
+	heap->mem_alloc += need_more;
+	heap->chunk = H5FL_BLK_REALLOC(heap_chunk,heap->chunk,
+				   (sizeof_hdr + heap->mem_alloc));
+	if (NULL==heap->chunk)
+	    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, (size_t)(-1), "memory allocation failed");
+
+	/* clear new section so junk doesn't appear in the file */
+	HDmemset(heap->chunk + sizeof_hdr + old_size, 0, need_more);
+    }
+    /*
+     * Copy the data into the heap
+     */
+    HDmemcpy(heap->chunk + sizeof_hdr + offset, buf, buf_size);
+
+    /* Set return value */
+    ret_value=offset;
+
+done:
+    if (heap && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, FALSE) != SUCCEED)
+        HDONE_ERROR(H5E_HEAP, H5E_PROTECT, (size_t)(-1), "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+#ifdef NOT_YET
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HL_write
+ *
+ * Purpose:	Writes (overwrites) the object (or part of object) stored
+ *		in BUF to the heap at file address ADDR in file F.  The
+ *		writing begins at byte offset OFFSET from the beginning of
+ *		the heap and continues for SIZE bytes.
+ *
+ *		Do not partially write an object to create it;	the first
+ *		write for an object must be for the entire object.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 16 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HL_write(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset, size_t size, const void *buf)
+{
+    H5HL_t *heap = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HL_write, FAIL);
+
+    /* check arguments */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(buf);
+    assert (offset==H5HL_ALIGN (offset));
+
+    if (0==(f->intent & H5F_ACC_RDWR))
+	HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file");
+
+    if (NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to load heap");
+
+    assert(offset < heap->mem_alloc);
+    assert(offset + size <= heap->mem_alloc);
+
+    heap->cache_info.is_dirty=TRUE;
+    HDmemcpy(heap->chunk + H5HL_SIZEOF_HDR(f) + offset, buf, size);
+
+done:
+    if (heap && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, FALSE) != SUCCEED && ret_value != FAIL)
+        HDONE_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+#endif /* NOT_YET */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HL_remove
+ *
+ * Purpose:	Removes an object or part of an object from the heap at
+ *		address ADDR of file F.	 The object (or part) to remove
+ *		begins at byte OFFSET from the beginning of the heap and
+ *		continues for SIZE bytes.
+ *
+ *		Once part of an object is removed, one must not attempt
+ *		to access that part.  Removing the beginning of an object
+ *		results in the object OFFSET increasing by the amount
+ *		truncated.  Removing the end of an object results in
+ *		object truncation.  Removing the middle of an object results
+ *		in two separate objects, one at the original offset and
+ *		one at the first offset past the removed portion.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 16 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5HL_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset, size_t size)
+{
+    H5HL_t		*heap = NULL;
+    H5HL_free_t		*fl = NULL, *fl2 = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HL_remove, FAIL);
+
+    /* check arguments */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(size > 0);
+    assert (offset==H5HL_ALIGN (offset));
+
+    if (0==(f->intent & H5F_ACC_RDWR))
+	HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file");
+
+    size = H5HL_ALIGN (size);
+
+    if (NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to load heap");
+
+    assert(offset < heap->mem_alloc);
+    assert(offset + size <= heap->mem_alloc);
+
+    fl = heap->freelist;
+    heap->cache_info.is_dirty=TRUE;
+
+    /*
+     * Check if this chunk can be prepended or appended to an already
+     * free chunk.  It might also fall between two chunks in such a way
+     * that all three chunks can be combined into one.
+     */
+    while (fl) {
+	if (offset + size == fl->offset) {
+	    fl->offset = offset;
+	    fl->size += size;
+	    assert (fl->offset==H5HL_ALIGN (fl->offset));
+	    assert (fl->size==H5HL_ALIGN (fl->size));
+	    fl2 = fl->next;
+	    while (fl2) {
+		if (fl2->offset + fl2->size == fl->offset) {
+		    fl->offset = fl2->offset;
+		    fl->size += fl2->size;
+		    assert (fl->offset==H5HL_ALIGN (fl->offset));
+		    assert (fl->size==H5HL_ALIGN (fl->size));
+		    fl2 = H5HL_remove_free(heap, fl2);
+		    HGOTO_DONE(SUCCEED);
+		}
+		fl2 = fl2->next;
+	    }
+	    HGOTO_DONE(SUCCEED);
+
+	} else if (fl->offset + fl->size == offset) {
+	    fl->size += size;
+	    fl2 = fl->next;
+	    assert (fl->size==H5HL_ALIGN (fl->size));
+	    while (fl2) {
+		if (fl->offset + fl->size == fl2->offset) {
+		    fl->size += fl2->size;
+		    assert (fl->size==H5HL_ALIGN (fl->size));
+		    fl2 = H5HL_remove_free(heap, fl2);
+		    HGOTO_DONE(SUCCEED);
+		}
+		fl2 = fl2->next;
+	    }
+	    HGOTO_DONE(SUCCEED);
+	}
+	fl = fl->next;
+    }
+
+    /*
+     * The amount which is being removed must be large enough to
+     * hold the free list data.	 If not, the freed chunk is forever
+     * lost.
+     */
+    if (size < H5HL_SIZEOF_FREE(f)) {
+#ifdef H5HL_DEBUG
+	if (H5DEBUG(HL)) {
+	    fprintf(H5DEBUG(HL), "H5HL: lost %lu bytes\n",
+		    (unsigned long) size);
+	}
+#endif
+	HGOTO_DONE(SUCCEED);
+    }
+    /*
+     * Add an entry to the free list.
+     */
+    if (NULL==(fl = H5FL_MALLOC(H5HL_free_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+    fl->offset = offset;
+    fl->size = size;
+    assert (fl->offset==H5HL_ALIGN (fl->offset));
+    assert (fl->size==H5HL_ALIGN (fl->size));
+    fl->prev = NULL;
+    fl->next = heap->freelist;
+    if (heap->freelist)
+        heap->freelist->prev = fl;
+    heap->freelist = fl;
+
+done:
+    if (heap && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, FALSE) != SUCCEED)
+        HDONE_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HL_delete
+ *
+ * Purpose:	Deletes a local heap from disk, freeing disk space used.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Mar 22 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5HL_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr)
+{
+    H5HL_t	*heap = NULL;
+    size_t      sizeof_hdr;     /* Cache H5HL header size for file */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HL_delete, FAIL);
+
+    /* check arguments */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+
+    /* Check for write access */
+    if (0==(f->intent & H5F_ACC_RDWR))
+	HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file");
+
+    /* Cache this for later */
+    sizeof_hdr= H5HL_SIZEOF_HDR(f);
+
+    /* Get heap pointer */
+    if (NULL == (heap = H5AC_protect(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap");
+
+    /* Check if the heap is contiguous on disk */
+    assert(!H5F_addr_overflow(addr,sizeof_hdr));
+    if(H5F_addr_eq(heap->addr,addr+sizeof_hdr)) {
+        /* Free the contiguous local heap in one call */
+        H5_CHECK_OVERFLOW(sizeof_hdr+heap->disk_alloc,size_t,hsize_t);
+        if (H5MF_xfree(f, H5FD_MEM_LHEAP, dxpl_id, addr, (hsize_t)(sizeof_hdr+heap->disk_alloc))<0)
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to free contiguous local heap");
+    } /* end if */
+    else {
+        /* Free the local heap's header */
+        H5_CHECK_OVERFLOW(sizeof_hdr,size_t,hsize_t);
+        if (H5MF_xfree(f, H5FD_MEM_LHEAP, dxpl_id, addr, (hsize_t)sizeof_hdr)<0)
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to free local heap header");
+
+        /* Free the local heap's data */
+        H5_CHECK_OVERFLOW(heap->disk_alloc,size_t,hsize_t);
+        if (H5MF_xfree(f, H5FD_MEM_LHEAP, dxpl_id, heap->addr, (hsize_t)heap->disk_alloc)<0)
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTFREE, FAIL, "unable to free local heap data");
+    } /* end else */
+
+    /* Release the local heap metadata from the cache */
+    if (H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, TRUE)<0) {
+        heap = NULL;
+        HGOTO_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release local heap");
+    }
+    heap = NULL;
+
+done:
+    if (heap && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, heap, FALSE)<0)
+	HDONE_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release local heap");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5HL_delete() */
+

Added: packages/hdf5/branches/upstream/current/src/H5HLdbg.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5HLdbg.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5HLdbg.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,170 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Wednesday, July 9, 2003
+ *
+ * Purpose:	Local Heap object debugging functions.
+ */
+#define H5HL_PACKAGE		/* Suppress error about including H5HLpkg */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5Eprivate.h"		/* Error handling		        */
+#include "H5HLpkg.h"		/* Local heaps				*/
+#include "H5Iprivate.h"		/* ID Functions		                */
+#include "H5MMprivate.h"	/* Memory management			*/
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HL_debug
+ *
+ * Purpose:	Prints debugging information about a heap.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  1 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5HL_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent, int fwidth)
+{
+    H5HL_t		*h = NULL;
+    int			i, j, overlap, free_block;
+    uint8_t		c;
+    H5HL_free_t		*freelist = NULL;
+    uint8_t		*marker = NULL;
+    size_t		amount_free = 0;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HL_debug, FAIL);
+
+    /* check arguments */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    if (NULL == (h = H5AC_protect(f, dxpl_id, H5AC_LHEAP, addr, NULL, NULL, H5AC_READ)))
+        HGOTO_ERROR(H5E_HEAP, H5E_CANTLOAD, FAIL, "unable to load heap");
+
+    fprintf(stream, "%*sLocal Heap...\n", indent, "");
+    fprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
+	    "Dirty:",
+	    (int) (h->cache_info.is_dirty));
+    fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
+	    "Header size (in bytes):",
+	    (unsigned long) H5HL_SIZEOF_HDR(f));
+    HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+	      "Address of heap data:",
+	      h->addr);
+    HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+	    "Data bytes allocated on disk:",
+            h->disk_alloc);
+    HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+	    "Data bytes allocated in core:",
+            h->mem_alloc);
+
+    /*
+     * Traverse the free list and check that all free blocks fall within
+     * the heap and that no two free blocks point to the same region of
+     * the heap.  */
+    if (NULL==(marker = H5MM_calloc(h->mem_alloc)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+    fprintf(stream, "%*sFree Blocks (offset, size):\n", indent, "");
+
+    for (free_block=0, freelist = h->freelist; freelist; freelist = freelist->next, free_block++) {
+        char temp_str[32];
+
+        sprintf(temp_str,"Block #%d:",free_block);
+	HDfprintf(stream, "%*s%-*s %8Zu, %8Zu\n", indent+3, "", MAX(0,fwidth-9),
+		temp_str,
+		freelist->offset, freelist->size);
+	if (freelist->offset + freelist->size > h->mem_alloc) {
+	    fprintf(stream, "***THAT FREE BLOCK IS OUT OF BOUNDS!\n");
+	} else {
+	    for (i=overlap=0; i<(int)(freelist->size); i++) {
+		if (marker[freelist->offset + i])
+		    overlap++;
+		marker[freelist->offset + i] = 1;
+	    }
+	    if (overlap) {
+		fprintf(stream, "***THAT FREE BLOCK OVERLAPPED A PREVIOUS "
+			"ONE!\n");
+	    } else {
+		amount_free += freelist->size;
+	    }
+	}
+    }
+
+    if (h->mem_alloc) {
+	fprintf(stream, "%*s%-*s %.2f%%\n", indent, "", fwidth,
+		"Percent of heap used:",
+		(100.0 * (double)(h->mem_alloc - amount_free) / (double)h->mem_alloc));
+    }
+    /*
+     * Print the data in a VMS-style octal dump.
+     */
+    fprintf(stream, "%*sData follows (`__' indicates free region)...\n",
+	    indent, "");
+    for (i=0; i<(int)(h->disk_alloc); i+=16) {
+	fprintf(stream, "%*s %8d: ", indent, "", i);
+	for (j = 0; j < 16; j++) {
+	    if (i+j<(int)(h->disk_alloc)) {
+		if (marker[i + j]) {
+		    fprintf(stream, "__ ");
+		} else {
+		    c = h->chunk[H5HL_SIZEOF_HDR(f) + i + j];
+		    fprintf(stream, "%02x ", c);
+		}
+	    } else {
+		fprintf(stream, "   ");
+	    }
+	    if (7 == j)
+		HDfputc(' ', stream);
+	}
+
+	for (j = 0; j < 16; j++) {
+	    if (i+j < (int)(h->disk_alloc)) {
+		if (marker[i + j]) {
+		    HDfputc(' ', stream);
+		} else {
+		    c = h->chunk[H5HL_SIZEOF_HDR(f) + i + j];
+		    if (c > ' ' && c < '~')
+			HDfputc(c, stream);
+		    else
+			HDfputc('.', stream);
+		}
+	    }
+	}
+
+	HDfputc('\n', stream);
+    }
+
+done:
+    if (h && H5AC_unprotect(f, dxpl_id, H5AC_LHEAP, addr, h, FALSE) != SUCCEED)
+	HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
+    H5MM_xfree(marker);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}

Added: packages/hdf5/branches/upstream/current/src/H5HLpkg.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5HLpkg.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5HLpkg.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,81 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *             Wednesday, July 9, 2003
+ *
+ * Purpose:     This file contains declarations which are visible
+ *              only within the H5HL package. Source files outside the
+ *              H5HL package should include H5HLprivate.h instead.
+ */
+#ifndef H5HL_PACKAGE
+#error "Do not include this file outside the H5HL package!"
+#endif
+
+#ifndef _H5HLpkg_H
+#define _H5HLpkg_H
+
+/* Get package's private header */
+#include "H5HLprivate.h"
+
+/* Other private headers needed by this file */
+
+/*****************************/
+/* Package Private Variables */
+/*****************************/
+
+/* The cache subclass */
+H5_DLLVAR const H5AC_class_t H5AC_LHEAP[1];
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+#define H5HL_SIZEOF_HDR(F)						      \
+    H5HL_ALIGN(H5HL_SIZEOF_MAGIC +	/*heap signature		*/    \
+	       4 +			/*reserved			*/    \
+	       H5F_SIZEOF_SIZE (F) +	/*data size			*/    \
+	       H5F_SIZEOF_SIZE (F) +	/*free list head		*/    \
+	       H5F_SIZEOF_ADDR (F))	/*data address			*/
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+typedef struct H5HL_free_t {
+    size_t		offset;		/*offset of free block		*/
+    size_t		size;		/*size of free block		*/
+    struct H5HL_free_t	*prev;		/*previous entry in free list	*/
+    struct H5HL_free_t	*next;		/*next entry in free list	*/
+} H5HL_free_t;
+
+struct H5HL_t {
+    H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
+                            /* first field in structure */
+    haddr_t		    addr;	/*address of data		*/
+    size_t		    disk_alloc;	/*data bytes allocated on disk	*/
+    size_t		    mem_alloc;	/*data bytes allocated in mem	*/
+    size_t		    disk_resrv; /*data bytes "reserved" on disk */
+    uint8_t		   *chunk;	/*the chunk, including header	*/
+    H5HL_free_t		   *freelist;	/*the free list			*/
+};
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+#endif
+
+

Added: packages/hdf5/branches/upstream/current/src/H5HLprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5HLprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5HLprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,76 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:		H5HLprivate.h
+ *			Jul 16 1997
+ *			Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5HLprivate_H
+#define _H5HLprivate_H
+
+/* Include package's public header */
+#include "H5HLpublic.h"
+
+/* Private headers needed by this file. */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Fprivate.h"		/* File access				*/
+
+/*
+ * Feature: Define H5HL_DEBUG on the compiler command line if you want to
+ *	    diagnostic messages from this layer.
+ */
+#ifdef NDEBUG
+#  undef H5HL_DEBUG
+#endif
+
+#define H5HL_MAGIC	"HEAP"		/*heap magic number		     */
+#define H5HL_SIZEOF_MAGIC 4
+
+#define H5HL_ALIGN(X)	(((X)+7)&(unsigned)(~0x07)) /*align on 8-byte boundary	*/
+
+#define H5HL_SIZEOF_FREE(F)						      \
+    H5HL_ALIGN(H5F_SIZEOF_SIZE (F) +	/*ptr to next free block	*/    \
+	       H5F_SIZEOF_SIZE (F))	/*size of this free block	*/
+
+/****************************/
+/* Library Private Typedefs */
+/****************************/
+
+/* Typedef for local heap in memory (defined in H5HLpkg.h) */
+typedef struct H5HL_t H5HL_t;
+
+/*
+ * Library prototypes...
+ */
+H5_DLL herr_t H5HL_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, haddr_t *addr/*out*/);
+H5_DLL const H5HL_t *H5HL_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr);
+H5_DLL void *H5HL_offset_into(H5F_t *f, const H5HL_t *heap, size_t offset);
+H5_DLL herr_t H5HL_unprotect(H5F_t *f, hid_t dxpl_id, const H5HL_t *heap, haddr_t addr);
+H5_DLL size_t H5HL_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t size,
+			   const void *buf);
+H5_DLL herr_t H5HL_remove(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t offset, size_t size);
+H5_DLL herr_t H5HL_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr);
+
+/* Debugging functions */
+H5_DLL herr_t H5HL_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
+			  int fwidth);
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5HLpublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5HLpublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5HLpublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,40 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5HLpublic.h
+ *                      Jul 16 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             Public declarations for the H5HL (local heap) package.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5HLpublic_H
+#define _H5HLpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5HP.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5HP.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5HP.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,919 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Purpose:	Provides a heap abstract data type.
+ *
+ *              (See chapter 11 - "Priority Queues" of _Algorithms_, by
+ *              Sedgewick for additional information)
+ *
+ */
+
+
+/* Private headers needed */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5HPprivate.h"	/* Heap routines			*/
+#include "H5FLprivate.h"	/* Memory management functions		*/
+
+/* Local Macros */
+#define H5HP_START_SIZE 16      /* Initial number of entries for heaps */
+
+/* Private typedefs & structs */
+
+/* Data structure for entries in the internal heap array */
+typedef struct {
+    int val;            /* Value to be used for heap condition */
+    H5HP_info_t *obj;   /* Pointer to object stored in heap */
+}H5HP_ent_t;
+
+/* Main heap data structure */
+struct H5HP_t {
+    H5HP_type_t type;   /* Type of heap (minimum or maximum value at "top") */
+    size_t nobjs;       /* Number of active objects in heap array */
+    size_t nalloc;      /* Number of allocated locations in heap array */
+    H5HP_ent_t *heap;   /* Pointer to array containing heap entries */
+};
+
+/* Static functions */
+static herr_t H5HP_swim_max(H5HP_t *heap, size_t loc);
+static herr_t H5HP_swim_min(H5HP_t *heap, size_t loc);
+static herr_t H5HP_sink_max(H5HP_t *heap, size_t loc);
+static herr_t H5HP_sink_min(H5HP_t *heap, size_t loc);
+
+/* Declare a free list to manage the H5HP_t struct */
+H5FL_DEFINE_STATIC(H5HP_t);
+
+/* Declare a free list to manage sequences of H5HP_ent_t */
+H5FL_SEQ_DEFINE_STATIC(H5HP_ent_t);
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5HP_swim_max
+ PURPOSE
+    Restore heap condition by moving an object upward
+ USAGE
+    herr_t H5HP_swim_max(heap, loc)
+        H5HP_t *heap;           IN/OUT: Pointer to heap to modify
+        size_t loc;             IN: Location to start from
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Restore the heap condition for the heap's array by "swimming" the object
+    at a location upward.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine is for "maximum" value heaps.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5HP_swim_max(H5HP_t *heap, size_t loc)
+{
+    int val;                    /* Temporary copy value of object to move in heap */
+    H5HP_info_t *obj;           /* Temporary pointer to object to move in heap */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HP_swim_max);
+
+    /* Get copies of the information about the object to move in the heap */
+    val=heap->heap[loc].val;
+    obj=heap->heap[loc].obj;
+
+    /* Move object up in heap until it's reached the maximum location possible */
+    while(heap->heap[loc/2].val < val) {
+        /* Move object "above" current location in heap down */
+        heap->heap[loc].val=heap->heap[loc/2].val;
+        heap->heap[loc].obj=heap->heap[loc/2].obj;
+
+        /* Update heap location for object which moved */
+        heap->heap[loc].obj->heap_loc=loc;
+
+        /* Move to location "above" current location */
+        loc=loc/2;
+    } /* end while */
+
+    /* Put object into heap at correct location */
+    heap->heap[loc].val=val;
+    heap->heap[loc].obj=obj;
+
+    /* Update heap location for object */
+    heap->heap[loc].obj->heap_loc=loc;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5HP_swim_max() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5HP_swim_min
+ PURPOSE
+    Restore heap condition by moving an object upward
+ USAGE
+    herr_t H5HP_swim_min(heap, loc)
+        H5HP_t *heap;           IN/OUT: Pointer to heap to modify
+        size_t loc;             IN: Location to start from
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Restore the heap condition for the heap's array by "swimming" the object
+    at a location upward.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine is for "minimum" value heaps.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5HP_swim_min(H5HP_t *heap, size_t loc)
+{
+    int val;                    /* Temporary copy value of object to move in heap */
+    H5HP_info_t *obj;           /* Temporary pointer to object to move in heap */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HP_swim_min);
+
+    /* Get copies of the information about the object to move in the heap */
+    val=heap->heap[loc].val;
+    obj=heap->heap[loc].obj;
+
+    /* Move object up in heap until it's reached the minimum location possible */
+    while(heap->heap[loc/2].val > val) {
+        /* Move object "above" current location in heap down */
+        heap->heap[loc].val=heap->heap[loc/2].val;
+        heap->heap[loc].obj=heap->heap[loc/2].obj;
+
+        /* Update heap location for object which moved */
+        heap->heap[loc].obj->heap_loc=loc;
+
+        /* Move to location "above" current location */
+        loc=loc/2;
+    } /* end while */
+
+    /* Put object into heap at correct location */
+    heap->heap[loc].val=val;
+    heap->heap[loc].obj=obj;
+
+    /* Update heap location for object */
+    heap->heap[loc].obj->heap_loc=loc;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5HP_swim_min() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5HP_sink_max
+ PURPOSE
+    Restore heap condition by moving an object downward
+ USAGE
+    herr_t H5HP_sink_max(heap, loc)
+        H5HP_t *heap;           IN/OUT: Pointer to heap to modify
+        size_t loc;             IN: Location to start from
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Restore the heap condition for the heap's array by "sinking" the object
+    at a location downward.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine is for "maximum" value heaps.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5HP_sink_max(H5HP_t *heap, size_t loc)
+{
+    int val;                    /* Temporary copy value of object to move in heap */
+    void *obj;                  /* Temporary pointer to object to move in heap */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HP_sink_max);
+
+    /* Get copies of the information about the object to move in the heap */
+    val=heap->heap[loc].val;
+    obj=heap->heap[loc].obj;
+
+    /* Move object up in heap until it's reached the maximum location possible */
+    while((2*loc)<=heap->nobjs) {
+        size_t new_loc=loc*2;   /* New object's potential location area */
+
+        /* Get the greater of the two objects below the location in heap */
+        if(new_loc<heap->nobjs && (heap->heap[new_loc].val < heap->heap[new_loc+1].val))
+            new_loc++;
+
+        /* Check if the object is smaller than the larger of the objects below it */
+        /* If so, its in the correct location now, and we can get out */
+        if(val >= heap->heap[new_loc].val)
+            break;
+
+        /* Move the greater of the two objects below the current location up */
+        heap->heap[loc].val=heap->heap[new_loc].val;
+        heap->heap[loc].obj=heap->heap[new_loc].obj;
+
+        /* Update heap location for object which moved */
+        heap->heap[loc].obj->heap_loc=loc;
+
+        /* Move to location "below" current location */
+        loc=new_loc;
+    } /* end while */
+
+    /* Put object into heap at correct location */
+    heap->heap[loc].val=val;
+    heap->heap[loc].obj=obj;
+
+    /* Update heap location for object */
+    heap->heap[loc].obj->heap_loc=loc;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5HP_sink_max() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5HP_sink_min
+ PURPOSE
+    Restore heap condition by moving an object downward
+ USAGE
+    herr_t H5HP_sink_min(heap, loc)
+        H5HP_t *heap;           IN/OUT: Pointer to heap to modify
+        size_t loc;             IN: Location to start from
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Restore the heap condition for the heap's array by "sinking" the object
+    at a location downward.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine is for "minimum" value heaps.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5HP_sink_min(H5HP_t *heap, size_t loc)
+{
+    int val;                    /* Temporary copy value of object to move in heap */
+    void *obj;                  /* Temporary pointer to object to move in heap */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HP_sink_min);
+
+    /* Get copies of the information about the object to move in the heap */
+    val=heap->heap[loc].val;
+    obj=heap->heap[loc].obj;
+
+    /* Move object up in heap until it's reached the maximum location possible */
+    while((2*loc)<=heap->nobjs) {
+        size_t new_loc=loc*2;   /* New object's potential location area */
+
+        /* Get the lesser of the two objects below the location in heap */
+        if(new_loc<heap->nobjs && (heap->heap[new_loc].val > heap->heap[new_loc+1].val))
+            new_loc++;
+
+        /* Check if the object is greater than the larger of the objects below it */
+        /* If so, its in the correct location now, and we can get out */
+        if(val <= heap->heap[new_loc].val)
+            break;
+
+        /* Move the greater of the two objects below the current location up */
+        heap->heap[loc].val=heap->heap[new_loc].val;
+        heap->heap[loc].obj=heap->heap[new_loc].obj;
+
+        /* Update heap location for object which moved */
+        heap->heap[loc].obj->heap_loc=loc;
+
+        /* Move to location "below" current location */
+        loc=new_loc;
+    } /* end while */
+
+    /* Put object into heap at correct location */
+    heap->heap[loc].val=val;
+    heap->heap[loc].obj=obj;
+
+    /* Update heap location for object */
+    heap->heap[loc].obj->heap_loc=loc;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5HP_sink_min() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5HP_create
+ PURPOSE
+    Create a heap
+ USAGE
+    H5HP_t *H5HP_create(heap_type)
+        H5HP_type_t heap_type;          IN: Type of heap to create
+
+ RETURNS
+    Returns a pointer to a heap on success, NULL on failure.
+ DESCRIPTION
+    Create a priority queue.  The SIZE is used to set the initial number of
+    entries allocated.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5HP_t *
+H5HP_create(H5HP_type_t heap_type)
+{
+    H5HP_t *new_heap=NULL;      /* Pointer to new heap object created */
+    H5HP_t *ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HP_create,NULL);
+
+    /* Check args */
+    assert(heap_type==H5HP_MIN_HEAP || heap_type==H5HP_MAX_HEAP);
+
+    /* Allocate ref-counted string structure */
+    if((new_heap=H5FL_MALLOC(H5HP_t))==NULL)
+        HGOTO_ERROR(H5E_HEAP,H5E_NOSPACE,NULL,"memory allocation failed");
+
+    /* Allocate the array to store the heap entries */
+    if((new_heap->heap=H5FL_SEQ_MALLOC(H5HP_ent_t, H5HP_START_SIZE+1))==NULL)
+        HGOTO_ERROR(H5E_HEAP,H5E_NOSPACE,NULL,"memory allocation failed");
+
+    /* Set the internal fields */
+    new_heap->type=heap_type;
+    new_heap->nobjs=0;
+    new_heap->nalloc=H5HP_START_SIZE+1;
+
+    /* Set the information in the 0'th location based on the type of heap */
+    if(heap_type==H5HP_MIN_HEAP) {
+        /* Set the value in the '0' location to be the minimum value, to
+         * simplify the algorithms
+         */
+        new_heap->heap[0].val=INT_MIN;
+        new_heap->heap[0].obj=NULL;
+    } /* end if */
+    else {
+        /* Set the value in the '0' location to be the maximum value, to
+         * simplify the algorithms
+         */
+        new_heap->heap[0].val=INT_MAX;
+        new_heap->heap[0].obj=NULL;
+    } /* end else */
+
+    /* Set the return value */
+    ret_value=new_heap;
+
+done:
+    /* Error cleanup */
+    if(ret_value==NULL) {
+        if(new_heap!=NULL) {
+            if(new_heap->heap!=NULL)
+                H5FL_SEQ_FREE(H5HP_ent_t,new_heap->heap);
+            H5FL_FREE(H5HP_t,new_heap);
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5HP_create() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5HP_count
+ PURPOSE
+    Check the number of elements in a heap
+ USAGE
+    ssize_t H5HP_count(heap)
+        const H5HP_t *heap;     IN: Pointer to heap to query
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Checks the number of elements in heap
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+ssize_t
+H5HP_count(const H5HP_t *heap)
+{
+    ssize_t ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5HP_count);
+
+    /* Check args */
+    assert(heap);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+    assert(heap->nobjs<heap->nalloc);
+    assert(heap->heap);
+    assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) ||
+        (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN));
+    assert(heap->heap[0].obj==NULL);
+
+    /* Return the number of objects in the heap */
+    H5_CHECK_OVERFLOW(heap->nobjs,size_t,ssize_t);
+    ret_value=(ssize_t)heap->nobjs;
+
+    /* No post-condition check necessary, since heap is constant */
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5HP_count() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5HP_insert
+ PURPOSE
+    Insert an object into a heap, with an initial value
+ USAGE
+    herr_t H5HP_insert(heap, val, obj)
+        H5HP_t *heap;           IN/OUT: Pointer to heap to modify
+        int val;                IN: Initial value for object in heap
+        void *obj;              IN: Pointer to object to insert into heap
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Inserts a OBJ into a HEAP, with an initial VALue.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5HP_insert(H5HP_t *heap, int val, void *obj)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HP_insert,FAIL);
+
+    /* Check args */
+    assert(heap);
+    assert(obj);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+    assert(heap->nobjs<heap->nalloc);
+    assert(heap->heap);
+    assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) ||
+        (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN));
+    assert(heap->heap[0].obj==NULL);
+
+    /* Increment number of objects in heap */
+    heap->nobjs++;
+
+    /* Check if we need to allocate more room for heap array */
+    if(heap->nobjs>=heap->nalloc) {
+        size_t n = MAX(H5HP_START_SIZE, 2*(heap->nalloc-1)) + 1;
+        H5HP_ent_t *new_heap = H5FL_SEQ_REALLOC(H5HP_ent_t,heap->heap, n);
+
+        if (!new_heap)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to extend heap array");
+        heap->heap = new_heap;
+        heap->nalloc = n;
+    } /* end if */
+
+    /* Insert new object at end of heap */
+    heap->heap[heap->nobjs].val=val;
+    heap->heap[heap->nobjs].obj=obj;
+    heap->heap[heap->nobjs].obj->heap_loc=heap->nobjs;
+
+    /* Restore heap condition */
+    if(heap->type==H5HP_MAX_HEAP) {
+        if(H5HP_swim_max(heap,heap->nobjs)<0)
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTINSERT, FAIL, "unable to restore heap condition");
+    } /* end if */
+    else {
+        if(H5HP_swim_min(heap,heap->nobjs)<0)
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTINSERT, FAIL, "unable to restore heap condition");
+    } /* end else */
+
+done:
+
+    /* Check internal consistency */
+    /* (Post-condition) */
+    assert(heap->nobjs<heap->nalloc);
+    assert(heap->heap);
+    assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) ||
+        (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN));
+    assert(heap->heap[0].obj==NULL);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5HP_insert() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5HP_top
+ PURPOSE
+    Check the value of the top object in the heap
+ USAGE
+    herr_t H5HP_top(heap, val)
+        const H5HP_t *heap;     IN: Pointer to heap to modify
+        int val;                IN/OUT: Initial value for object in heap
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Checks the value of the top object in a heap
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5HP_top(const H5HP_t *heap, int *val)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5HP_top);
+
+    /* Check args */
+    assert(heap);
+    assert(val);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+    assert(heap->nobjs<heap->nalloc);
+    assert(heap->heap);
+    assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) ||
+        (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN));
+    assert(heap->heap[0].obj==NULL);
+
+    /* Get value of the top object in the heap */
+    *val=heap->heap[1].val;
+
+    /* No post-condition check necessary, since heap is constant */
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5HP_top() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5HP_remove
+ PURPOSE
+    Remove an object into a heap
+ USAGE
+    herr_t H5HP_remove(heap, val, obj)
+        H5HP_t *heap;           IN/OUT: Pointer to heap to modify
+        int *val;               OUT: Pointer to value of object removed from heap
+        void **obj;             OUT: Pointer to object removed from heap
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Removes the top object on a heap, returning its value and object pointer
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5HP_remove(H5HP_t *heap, int *val, void **obj)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HP_remove,FAIL);
+
+    /* Check args */
+    assert(heap);
+    assert(val);
+    assert(obj);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+    assert(heap->nobjs<heap->nalloc);
+    assert(heap->heap);
+    assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) ||
+        (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN));
+    assert(heap->heap[0].obj==NULL);
+
+    /* Check if there are any objects on the heap to remove */
+    if(heap->nobjs==0)
+        HGOTO_ERROR(H5E_HEAP, H5E_NOTFOUND, FAIL, "heap is empty");
+
+    /* Get the information for the top object on the heap */
+    assert(heap->heap[1].obj->heap_loc==1);
+    *val=heap->heap[1].val;
+    *obj=heap->heap[1].obj;
+
+    /* Move the last element in the heap to the top */
+    heap->heap[1].val=heap->heap[heap->nobjs].val;
+    heap->heap[1].obj=heap->heap[heap->nobjs].obj;
+    heap->heap[1].obj->heap_loc=1;
+
+    /* Decrement number of objects in heap */
+    heap->nobjs--;
+
+    /* Restore heap condition, if there are objects on the heap */
+    if(heap->nobjs>0) {
+        if(heap->type==H5HP_MAX_HEAP) {
+            if(H5HP_sink_max(heap,1)<0)
+                HGOTO_ERROR(H5E_HEAP, H5E_CANTDELETE, FAIL, "unable to restore heap condition");
+        } /* end if */
+        else {
+            if(H5HP_sink_min(heap,1)<0)
+                HGOTO_ERROR(H5E_HEAP, H5E_CANTDELETE, FAIL, "unable to restore heap condition");
+        } /* end else */
+    } /* end if */
+
+done:
+
+    /* Check internal consistency */
+    /* (Post-condition) */
+    assert(heap->nobjs<heap->nalloc);
+    assert(heap->heap);
+    assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) ||
+        (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN));
+    assert(heap->heap[0].obj==NULL);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5HP_remove() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5HP_change
+ PURPOSE
+    Change the priority of an object on a heap
+ USAGE
+    herr_t H5HP_change(heap, val, obj)
+        H5HP_t *heap;           IN/OUT: Pointer to heap to modify
+        int val;                IN: New priority value for object
+        void *obj;              IN: Pointer to object to modify
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Changes the priority of an object on a heap.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5HP_change(H5HP_t *heap, int val, void *_obj)
+{
+    H5HP_info_t *obj=(H5HP_info_t *)_obj;       /* Alias for object */
+    size_t obj_loc;             /* Location of object in heap */
+    int old_val;                /* Object's old priority value */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HP_change,FAIL);
+
+    /* Check args */
+    assert(heap);
+    assert(obj);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+    assert(heap->nobjs<heap->nalloc);
+    assert(heap->heap);
+    assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) ||
+        (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN));
+    assert(heap->heap[0].obj==NULL);
+
+    /* Get the location of the object in the heap */
+    obj_loc=obj->heap_loc;
+    assert(obj_loc>0 && obj_loc<=heap->nobjs);
+
+    /* Change the heap object's priority */
+    old_val=heap->heap[obj_loc].val;
+    heap->heap[obj_loc].val=val;
+
+    /* Restore heap condition */
+    if(val<old_val) {
+        if(heap->type==H5HP_MAX_HEAP) {
+            if(H5HP_sink_max(heap,obj_loc)<0)
+                HGOTO_ERROR(H5E_HEAP, H5E_CANTRESTORE, FAIL, "unable to restore heap condition");
+        } /* end if */
+        else {
+            if(H5HP_swim_min(heap,obj_loc)<0)
+                HGOTO_ERROR(H5E_HEAP, H5E_CANTRESTORE, FAIL, "unable to restore heap condition");
+        } /* end else */
+    } /* end if */
+    else {
+        if(heap->type==H5HP_MAX_HEAP) {
+            if(H5HP_swim_max(heap,obj_loc)<0)
+                HGOTO_ERROR(H5E_HEAP, H5E_CANTRESTORE, FAIL, "unable to restore heap condition");
+        } /* end if */
+        else {
+            if(H5HP_sink_min(heap,obj_loc)<0)
+                HGOTO_ERROR(H5E_HEAP, H5E_CANTRESTORE, FAIL, "unable to restore heap condition");
+        } /* end else */
+    } /* end else */
+
+done:
+
+    /* Check internal consistency */
+    /* (Post-condition) */
+    assert(heap->nobjs<heap->nalloc);
+    assert(heap->heap);
+    assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) ||
+        (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN));
+    assert(heap->heap[0].obj==NULL);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5HP_change() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5HP_incr
+ PURPOSE
+    Increment the priority of an object on a heap
+ USAGE
+    herr_t H5HP_incr(heap, amt, obj)
+        H5HP_t *heap;           IN/OUT: Pointer to heap to modify
+        unsigned amt;           IN: Amount to increase priority by
+        void *obj;              IN: Pointer to object to modify
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Increments the priority of an object on a heap by one.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5HP_incr(H5HP_t *heap, unsigned amt, void *_obj)
+{
+    H5HP_info_t *obj=(H5HP_info_t *)_obj;       /* Alias for object */
+    size_t obj_loc;             /* Location of object in heap */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HP_incr,FAIL);
+
+    /* Check args */
+    assert(heap);
+    assert(obj);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+    assert(heap->nobjs<heap->nalloc);
+    assert(heap->heap);
+    assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) ||
+        (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN));
+    assert(heap->heap[0].obj==NULL);
+
+    /* Get the location of the object in the heap */
+    obj_loc=obj->heap_loc;
+    assert(obj_loc>0 && obj_loc<=heap->nobjs);
+
+    /* Change the heap object's priority */
+    heap->heap[obj_loc].val+=amt;
+
+    /* Restore heap condition */
+    if(heap->type==H5HP_MAX_HEAP) {
+        if(H5HP_swim_max(heap,obj_loc)<0)
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTRESTORE, FAIL, "unable to restore heap condition");
+    } /* end if */
+    else {
+        if(H5HP_sink_min(heap,obj_loc)<0)
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTRESTORE, FAIL, "unable to restore heap condition");
+    } /* end else */
+
+done:
+
+    /* Check internal consistency */
+    /* (Post-condition) */
+    assert(heap->nobjs<heap->nalloc);
+    assert(heap->heap);
+    assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) ||
+        (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN));
+    assert(heap->heap[0].obj==NULL);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5HP_incr() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5HP_decr
+ PURPOSE
+    Decrement the priority of an object on a heap
+ USAGE
+    herr_t H5HP_dec(heap, amt, obj)
+        H5HP_t *heap;           IN/OUT: Pointer to heap to modify
+        unsigned amt;           IN: Amount to decrease priority by
+        void *obj;              IN: Pointer to object to modify
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Decrements the priority of an object on a heap by one.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5HP_decr(H5HP_t *heap, unsigned amt, void *_obj)
+{
+    H5HP_info_t *obj=(H5HP_info_t *)_obj;       /* Alias for object */
+    size_t obj_loc;             /* Location of object in heap */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5HP_decr,FAIL);
+
+    /* Check args */
+    assert(heap);
+    assert(obj);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+    assert(heap->nobjs<heap->nalloc);
+    assert(heap->heap);
+    assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) ||
+        (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN));
+    assert(heap->heap[0].obj==NULL);
+
+    /* Get the location of the object in the heap */
+    obj_loc=obj->heap_loc;
+    assert(obj_loc>0 && obj_loc<=heap->nobjs);
+
+    /* Change the heap object's priority */
+    heap->heap[obj_loc].val-=amt;
+
+    /* Restore heap condition */
+    if(heap->type==H5HP_MAX_HEAP) {
+        if(H5HP_sink_max(heap,obj_loc)<0)
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTRESTORE, FAIL, "unable to restore heap condition");
+    } /* end if */
+    else {
+        if(H5HP_swim_min(heap,obj_loc)<0)
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTRESTORE, FAIL, "unable to restore heap condition");
+    } /* end else */
+
+done:
+
+    /* Check internal consistency */
+    /* (Post-condition) */
+    assert(heap->nobjs<heap->nalloc);
+    assert(heap->heap);
+    assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) ||
+        (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN));
+    assert(heap->heap[0].obj==NULL);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5HP_decr() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5HP_close
+ PURPOSE
+    Close a heap, deallocating it.
+ USAGE
+    herr_t H5HP_close(heap)
+        H5HP_t *heap;            IN/OUT: Pointer to heap to close
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Close a heap, freeing all internal information.  Any objects left in
+    the heap are not deallocated.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5HP_close(H5HP_t *heap)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5HP_close);
+
+    /* Check args */
+    assert(heap);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+    assert(heap->nobjs<heap->nalloc);
+    assert(heap->heap);
+    assert((heap->type==H5HP_MAX_HEAP && heap->heap[0].val==INT_MAX) ||
+        (heap->type==H5HP_MIN_HEAP && heap->heap[0].val==INT_MIN));
+    assert(heap->heap[0].obj==NULL);
+
+    /* Free internal structures for heap */
+    H5FL_SEQ_FREE(H5HP_ent_t,heap->heap);
+
+    /* Free actual heap object */
+    H5FL_FREE(H5HP_t,heap);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5HP_close() */
+

Added: packages/hdf5/branches/upstream/current/src/H5HPprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5HPprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5HPprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,70 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains private information about the H5HP module
+ */
+#ifndef _H5HPprivate_H
+#define _H5HPprivate_H
+
+/**************************************/
+/* Public headers needed by this file */
+/**************************************/
+#ifdef LATER
+#include "H5HPpublic.h"
+#endif /* LATER */
+
+/***************************************/
+/* Private headers needed by this file */
+/***************************************/
+#include "H5private.h"
+
+/************/
+/* Typedefs */
+/************/
+
+/* Typedef for heap struct (defined in H5HP.c) */
+typedef struct H5HP_t H5HP_t;
+
+/* Typedef for objects which can be inserted into heaps */
+/* This _must_ be the first field in objects which can be inserted into heaps */
+typedef struct H5HP_info_t {
+    size_t heap_loc;                    /* Location of object in heap */
+}H5HP_info_t;
+
+/* Typedef for type of heap to create */
+typedef enum {
+    H5HP_MIN_HEAP,      /* Minimum values in heap are at the "top" */
+    H5HP_MAX_HEAP       /* Maximum values in heap are at the "top" */
+} H5HP_type_t;
+
+/**********/
+/* Macros */
+/**********/
+
+/********************/
+/* Private routines */
+/********************/
+H5_DLL H5HP_t *H5HP_create(H5HP_type_t heap_type);
+H5_DLL herr_t H5HP_insert(H5HP_t *heap, int val, void *obj);
+H5_DLL ssize_t H5HP_count(const H5HP_t *heap);
+H5_DLL herr_t H5HP_top(const H5HP_t *heap, int *val);
+H5_DLL herr_t H5HP_remove(H5HP_t *heap, int *val, void **ptr);
+H5_DLL herr_t H5HP_change(H5HP_t *heap, int val, void *obj);
+H5_DLL herr_t H5HP_incr(H5HP_t *heap, unsigned amt, void *obj);
+H5_DLL herr_t H5HP_decr(H5HP_t *heap, unsigned amt, void *obj);
+H5_DLL herr_t H5HP_close(H5HP_t *heap);
+
+#endif /* _H5HPprivate_H */
+

Added: packages/hdf5/branches/upstream/current/src/H5I.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5I.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5I.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1522 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * FILE:	H5I.c - Internal storage routines for handling "IDs"
+ *
+ * REMARKS:	ID's which allow objects (void *'s currently) to be bundled
+ *		into "groups" for more general storage.
+ *
+ * DESIGN:	The groups are stored in an array of pointers to store each
+ *		group in an element. Each "group" node contains a link to a
+ *		hash table to manage the IDs in each group.  The allowed
+ *		"groups" are stored in an enum (called group_t) in
+ *		H5Ipublic.h.
+ *
+ * AUTHOR:	Quincey Koziol
+ *
+ * MODIFICATIONS:
+ *	1/3/96	- Starting writing specs & coding prototype
+ *	1/7/96	- Finished coding prototype
+ *	6/10/97 - Moved into HDF5 library
+ */
+
+#define H5I_PACKAGE		/*suppress error about including H5Ipkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5I_init_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5Ipkg.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+
+/* Define this to compile in support for dumping ID information */
+/* #define H5I_DEBUG_OUTPUT */
+#ifndef H5I_DEBUG_OUTPUT
+#include "H5Gprivate.h"		/* Groups				*/
+#else /* H5I_DEBUG_OUTPUT */
+#define H5G_PACKAGE /*suppress error message about including H5Gpkg.h */
+#include "H5Gpkg.h"		/* Groups		  		*/
+#include "H5Dprivate.h"		/* Datasets				*/
+#include "H5Tprivate.h"		/* Datatypes				*/
+#endif /* H5I_DEBUG_OUTPUT */
+
+/* Local Macros */
+
+/*
+ * Define the following macro for fast hash calculations (but limited
+ * hash sizes)
+ */
+#define HASH_SIZE_POWER_2
+
+#ifdef HASH_SIZE_POWER_2
+/*
+ * Map an ID to a hash location (assumes s is a power of 2 and smaller
+ * than the ID_MASK constant).
+ */
+#  define H5I_LOC(a,s)		((hid_t)((size_t)(a)&((s)-1)))
+#  define POWER_OF_TWO(n)	((((n) - 1) & (n)) == 0 && (n) > 0)
+#else
+/*
+ * Map an ID to a hash location.
+ */
+#  define H5I_LOC(a,s)	(((hid_t)(a)&ID_MASK)%(s))
+#endif
+
+/* Combine a Group number and an atom index into an atom */
+#define H5I_MAKE(g,i)	((((hid_t)(g)&GROUP_MASK)<<ID_BITS)|	  \
+			     ((hid_t)(i)&ID_MASK))
+
+/* Local typedefs */
+
+/* Atom information structure used */
+typedef struct H5I_id_info_t {
+    hid_t	id;		/* ID for this info			    */
+    unsigned	count;		/* ref. count for this atom		    */
+    void	*obj_ptr;	/* pointer associated with the atom	    */
+    struct H5I_id_info_t *next;	/* link to next atom (in case of hash-clash)*/
+} H5I_id_info_t;
+
+/* ID group structure used */
+typedef struct {
+    unsigned	count;		/*# of times this group has been initialized*/
+    unsigned	reserved;	/*# of IDs to reserve for constant IDs	    */
+    unsigned	wrapped;	/*whether the id count has wrapped around   */
+    size_t	hash_size;	/*sizeof the hash table to store the IDs in */
+    unsigned	ids;		/*current number of IDs held		    */
+    unsigned	nextid;		/*ID to use for the next atom		    */
+    H5I_free_t	free_func;	/*release object method	    		    */
+    H5I_id_info_t **id_list;	/*pointer to an array of ptrs to IDs	    */
+} H5I_id_group_t;
+
+/*-------------------- Locally scoped variables -----------------------------*/
+
+/* Array of pointers to atomic groups */
+static H5I_id_group_t *H5I_id_group_list_g[H5I_NGROUPS];
+
+/* Declare a free list to manage the H5I_id_info_t struct */
+H5FL_DEFINE_STATIC(H5I_id_info_t);
+
+/*--------------------- Local function prototypes ---------------------------*/
+static H5I_id_info_t *H5I_find_id(hid_t id);
+static hid_t H5I_get_file_id(hid_t obj_id);
+#ifdef H5I_DEBUG_OUTPUT
+static herr_t H5I_debug(H5I_type_t grp);
+#endif /* H5I_DEBUG_OUTPUT */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_init_interface
+ *
+ * Purpose:	Initialize interface-specific information.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5I_init_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5I_init_interface);
+
+    /*
+     * Make certain the ID types don't overflow the number of bits allocated
+     * for them in an ID.
+     */
+    assert(H5I_NGROUPS<=(1<<GROUP_BITS));
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_term_interface
+ *
+ * Purpose:	Terminate the H5I interface: release all memory, reset all
+ *		global variables to initial values. This only happens if all
+ *		groups have been destroyed from other interfaces.
+ *
+ * Return:	Success:	Positive if any action was taken that might
+ *				affect some other interface; zero otherwise.
+ *
+ * 		Failure:	Negative.
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5I_term_interface(void)
+{
+    H5I_id_group_t	*grp_ptr;
+    H5I_type_t		grp;
+    int		n=0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5I_term_interface);
+
+    if (H5_interface_initialize_g) {
+        /* How many groups are still being used? */
+        for (grp=(H5I_type_t)0; grp<H5I_NGROUPS; H5_INC_ENUM(H5I_type_t,grp)) {
+            if ((grp_ptr=H5I_id_group_list_g[grp]) && grp_ptr->id_list)
+                n++;
+        }
+
+        /* If no groups are used then clean  up */
+        if (0==n) {
+            for (grp=(H5I_type_t)0; grp<H5I_NGROUPS; H5_INC_ENUM(H5I_type_t,grp)) {
+                grp_ptr = H5I_id_group_list_g[grp];
+                H5MM_xfree(grp_ptr);
+                H5I_id_group_list_g[grp] = NULL;
+            }
+        }
+
+        /* Mark interface closed */
+        H5_interface_initialize_g = 0;
+    }
+    FUNC_LEAVE_NOAPI(n);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_init_group
+ *
+ * Purpose:	Initialize an ID group whose ID number is specified by GRP,
+ *		If the group has already been initialized, this routine just
+ *		increments the count of number of initializations and returns
+ *		without trying to change the size of the hash table.  A
+ *		specific number (RESERVED) of group entries may be reserved
+ *		to enable "constant" values to be handed out which are valid
+ *		IDs in the group, but which do not map to any data structures
+ *		and are not allocated dynamicly later. HASH_SIZE is the
+ *		minimum hash table size to use for the group. FREE_FUNC is
+ *		called with an object pointer when the object is removed from
+ *		the group.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, February 19, 1999
+ *
+ * Modifications:
+ * 		Bill Wendling, 2000-05-05
+ * 		Instead of the ugly test of whether hash_size is a power of
+ * 		two, I placed it in a macro POWER_OF_TWO which uses the fact
+ * 		that a number that is a power of two has only 1 bit set.
+ *
+ * 		Bill Wendling, 2000-05-09
+ * 		Changed POWER_OF_TWO macro to allow 1 as a valid power of two.
+ * 		Changed test below accordingly.
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5I_init_group(H5I_type_t grp, size_t hash_size, unsigned reserved,
+	       H5I_free_t free_func)
+{
+    H5I_id_group_t	*grp_ptr = NULL;	/*ptr to the atomic group*/
+    int		ret_value = SUCCEED;	/*return value		*/
+
+    FUNC_ENTER_NOAPI(H5I_init_group, FAIL);
+
+    /* Check arguments */
+    if ((grp <= H5I_BADID || grp >= H5I_NGROUPS) && hash_size > 0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid group number");
+#ifdef HASH_SIZE_POWER_2
+    if (!POWER_OF_TWO(hash_size) || hash_size == 1)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid hash size");
+#endif /* HASH_SIZE_POWER_2 */
+
+    if (H5I_id_group_list_g[grp] == NULL) {
+	/* Allocate the group information for new group */
+	if (NULL==(grp_ptr = H5MM_calloc(sizeof(H5I_id_group_t))))
+	    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+	H5I_id_group_list_g[grp] = grp_ptr;
+    } else {
+	/* Get the pointer to the existing group */
+	grp_ptr = H5I_id_group_list_g[grp];
+    }
+
+    if (grp_ptr->count == 0) {
+	/* Initialize the ID group structure for new groups */
+	grp_ptr->hash_size = hash_size;
+	grp_ptr->reserved = reserved;
+	grp_ptr->wrapped = 0;
+	grp_ptr->ids = 0;
+	grp_ptr->nextid = reserved;
+	grp_ptr->free_func = free_func;
+	grp_ptr->id_list = H5MM_calloc(hash_size*sizeof(H5I_id_info_t *));
+	if (NULL==grp_ptr->id_list)
+	    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+    }
+
+    /* Increment the count of the times this group has been initialized */
+    grp_ptr->count++;
+
+done:
+    if (ret_value<0) {
+	/* Error condition cleanup */
+	if (grp_ptr != NULL) {
+	    H5MM_xfree(grp_ptr->id_list);
+	    H5MM_xfree(grp_ptr);
+	}
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_nmembers
+ *
+ * Purpose:	Returns the number of members in a group.
+ *
+ * Return:	Success:	Number of members; zero if the group is empty
+ *				or has been deleted.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, March 24, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5I_nmembers(H5I_type_t grp)
+{
+    H5I_id_group_t	*grp_ptr = NULL;
+    int		ret_value;
+
+    FUNC_ENTER_NOAPI(H5I_nmembers, FAIL);
+
+    if (grp<=H5I_BADID || grp>=H5I_NGROUPS)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid group number");
+    if (NULL==(grp_ptr=H5I_id_group_list_g[grp]) || grp_ptr->count<=0)
+	HGOTO_DONE(0);
+
+    /* Set return value */
+    H5_ASSIGN_OVERFLOW(ret_value, grp_ptr->ids, unsigned, int);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_clear_group
+ *
+ * Purpose:	Removes all objects from the group, calling the free
+ *		function for each object regardless of the reference count.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, March 24, 1999
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-04-27
+ *		If FORCE is zero then any item for which the free callback
+ *		failed is not removed.  This function returns failure if
+ *		items could not be removed.
+ *
+ * 		Robb Matzke, 1999-08-17
+ *		If the object reference count is larger than one then it must
+ *		be because the library is using the object internally. This
+ *		happens for instance for file driver ID's which are stored in
+ *		things like property lists, files, etc.  Objects that have a
+ *		reference count larger than one are not affected unless FORCE
+ *		is non-zero.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5I_clear_group(H5I_type_t grp, hbool_t force)
+{
+    H5I_id_group_t  *grp_ptr = NULL;    /* ptr to the atomic group */
+    H5I_id_info_t   *cur=NULL;          /* Current node being worked with */
+    H5I_id_info_t   *next=NULL;         /* Next node in list */
+    H5I_id_info_t   *last=NULL;         /* Last node seen */
+    H5I_id_info_t   *tmp=NULL;          /* Temporary node ptr */
+    int		ret_value = SUCCEED;
+    unsigned    delete_node;            /* Flag to indicate node should be removed from linked list */
+    unsigned	i;
+
+    FUNC_ENTER_NOAPI(H5I_clear_group, FAIL);
+
+    if (grp <= H5I_BADID || grp >= H5I_NGROUPS)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid group number");
+
+    grp_ptr = H5I_id_group_list_g[grp];
+    if (grp_ptr == NULL || grp_ptr->count <= 0)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADGROUP, FAIL, "invalid group");
+
+    /*
+     * Call free method for all objects in group regardless of their reference
+     * counts. Ignore the return value from from the free method and remove
+     * object from group regardless if FORCE is non-zero.
+     */
+    for (i=0; i<grp_ptr->hash_size; i++) {
+        for (cur=grp_ptr->id_list[i]; cur; cur=next) {
+            /*
+             * Do nothing to the object if the reference count is larger than
+             * one and forcing is off.
+             */
+            if (!force && cur->count>1) {
+                next=cur->next;
+                continue;
+            } /* end if */
+
+            /* Check for a 'free' function and call it, if it exists */
+            if (grp_ptr->free_func && (grp_ptr->free_func)(cur->obj_ptr)<0) {
+                if (force) {
+#ifdef H5I_DEBUG
+                    if (H5DEBUG(I)) {
+                        fprintf(H5DEBUG(I), "H5I: free grp=%d obj=0x%08lx "
+                            "failure ignored\n", (int)grp,
+                            (unsigned long)(cur->obj_ptr));
+                    } /* end if */
+#endif /*H5I_DEBUG*/
+
+                    /* Indicate node should be removed from list */
+                    delete_node=1;
+                } /* end if */
+                else {
+                    /* Indicate node should _NOT_ be remove from list */
+                    delete_node=0;
+                } /* end else */
+            } /* end if */
+            else {
+                /* Indicate node should be removed from list */
+                delete_node=1;
+            } /* end else */
+
+            /* Check if we should delete this node or not */
+            if(delete_node) {
+                /* Decrement the number of IDs in the group */
+                (grp_ptr->ids)--;
+
+                /* Advance to next node */
+                next = cur->next;
+
+                /* Re-scan the list of nodes and remove the node from the list */
+                /* (can't maintain static pointers to the previous node in the */
+                /*      list, because the node's 'free' callback could have */
+                /*      make an H5I call, which could potentially change the */
+                /*      order of the nodes on the list - QAK) */
+                last=NULL;
+                tmp=grp_ptr->id_list[i];
+                while(tmp!=cur) {
+                    assert(tmp!=NULL);
+                    last=tmp;
+                    tmp=tmp->next;
+                } /* end while */
+
+                /* Delete the node from the list */
+                if(last==NULL) {
+                    /* Node at head of list, just advance the list head to next node */
+                    assert(grp_ptr->id_list[i]==cur);
+                    grp_ptr->id_list[i] = next;
+                } /* end if */
+                else {
+                    /* Node in middle of list, jump over it */
+                    assert(last->next==cur);
+                    last->next=next;
+                } /* end else */
+
+                /* Free the node */
+                H5FL_FREE(H5I_id_info_t,cur);
+            } /* end if */
+            else {
+                /* Advance to next node */
+                next = cur->next;
+            } /* end else */
+        } /* end for */
+    } /* end for */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_destroy_group
+ *
+ * Purpose:	Decrements the reference count on an entire group of IDs.
+ *		If the group reference count becomes zero then the group is
+ *		destroyed along with all atoms in that group regardless of
+ *		their reference counts.	 Destroying IDs involves calling
+ *		the free-func for each ID's object and then adding the ID
+ *		struct to the ID free list.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Unknown
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 25 Feb 1998
+ *	IDs are freed when a group is destroyed.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5I_destroy_group(H5I_type_t grp)
+{
+    H5I_id_group_t	*grp_ptr = NULL;	/* ptr to the atomic group */
+    int		ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5I_destroy_group, FAIL);
+
+    if (grp <= H5I_BADID || grp >= H5I_NGROUPS)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid group number");
+
+    grp_ptr = H5I_id_group_list_g[grp];
+    if (grp_ptr == NULL || grp_ptr->count <= 0)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADGROUP, FAIL, "invalid group");
+
+    /*
+     * Decrement the number of users of the atomic group.  If this is the
+     * last user of the group then release all atoms from the group.  The
+     * free function is invoked for each atom being freed.
+     */
+    if (1==grp_ptr->count) {
+        H5I_clear_group(grp, TRUE);
+        H5E_clear(); /*don't care about errors*/
+        H5MM_xfree(grp_ptr->id_list);
+        HDmemset (grp_ptr, 0, sizeof(*grp_ptr));
+    } else {
+        --(grp_ptr->count);
+    }
+
+  done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_register
+ *
+ * Purpose:	Registers an OBJECT in a GROUP and returns an ID for it.
+ *		This routine does _not_ check for unique-ness of the objects,
+ *		if you register an object twice, you will get two different
+ *		IDs for it.  This routine does make certain that each ID in a
+ *		group is unique.  IDs are created by getting a unique number
+ *		for the group the ID is in and incorporating the group into
+ *		the ID which is returned to the user.
+ *
+ * Return:	Success:	New object id.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Unknown
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5I_register(H5I_type_t grp, void *object)
+{
+    H5I_id_group_t	*grp_ptr=NULL;	/*ptr to the group		*/
+    H5I_id_info_t	*id_ptr=NULL;	/*ptr to the new ID information */
+    hid_t		new_id;		/*new ID			*/
+    unsigned		hash_loc;	/*new item's hash table location*/
+    hid_t		next_id;	/*next ID to check		*/
+    hid_t		ret_value=SUCCEED; /*return value		*/
+    H5I_id_info_t	*curr_id;	/*ptr to the current atom	*/
+    unsigned		i;		/*counter			*/
+
+    FUNC_ENTER_NOAPI(H5I_register, FAIL);
+
+    /* Check arguments */
+    if (grp <= H5I_BADID || grp >= H5I_NGROUPS)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid group number");
+    grp_ptr = H5I_id_group_list_g[grp];
+    if (grp_ptr == NULL || grp_ptr->count <= 0)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADGROUP, FAIL, "invalid group");
+    if ((id_ptr = H5FL_MALLOC(H5I_id_info_t)) == NULL)
+        HGOTO_ERROR(H5E_ATOM, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+    /* Create the struct & it's ID */
+    new_id = H5I_MAKE(grp, grp_ptr->nextid);
+    id_ptr->id = new_id;
+    id_ptr->count = 1; /*initial reference count*/
+    id_ptr->obj_ptr = object;
+    id_ptr->next = NULL;
+
+    /* hash bucket already full, prepend to front of chain */
+    hash_loc = grp_ptr->nextid % (unsigned) grp_ptr->hash_size;
+    if (grp_ptr->id_list[hash_loc] != NULL)
+	id_ptr->next = grp_ptr->id_list[hash_loc];
+
+    /* Insert into the group */
+    grp_ptr->id_list[hash_loc] = id_ptr;
+    grp_ptr->ids++;
+    grp_ptr->nextid++;
+
+    /*
+     * This next section of code checks for the 'nextid' getting too large and
+     * wrapping around, thus necessitating checking for duplicate IDs being
+     * handed out.
+     */
+    if (grp_ptr->nextid > (unsigned)ID_MASK) {
+	grp_ptr->wrapped = 1;
+	grp_ptr->nextid = grp_ptr->reserved;
+    }
+
+    /*
+     * If we've wrapped around then we need to check for duplicate id's being
+     * handed out.
+     */
+    if (grp_ptr->wrapped) {
+	/*
+	 * Make sure we check all available ID's.  If we're about at the end
+	 * of the range then wrap around and check the beginning values.  If
+	 * we check all possible values and didn't find any free ones *then*
+	 * we can fail.
+	 */
+	for (i=grp_ptr->reserved; i<ID_MASK; i++) {
+	    /* Handle end of range by wrapping to beginning */
+	    if (grp_ptr->nextid>(unsigned)ID_MASK)
+		grp_ptr->nextid = grp_ptr->reserved;
+
+	    /* new ID to check for */
+	    next_id = H5I_MAKE(grp, grp_ptr->nextid);
+	    hash_loc = H5I_LOC (grp_ptr->nextid, grp_ptr->hash_size);
+	    curr_id = grp_ptr->id_list[hash_loc];
+	    if (curr_id == NULL)
+                break; /* Ha! this is not likely... */
+
+	    while (curr_id) {
+		if (curr_id->id == next_id)
+                    break;
+		curr_id = curr_id->next;
+	    }
+	    if (!curr_id)
+                break; /* must not have found a match */
+	    grp_ptr->nextid++;
+	}
+
+	if (i>=(unsigned)ID_MASK)
+	    /* All the IDs are gone! */
+            HGOTO_ERROR(H5E_ATOM, H5E_NOIDS, FAIL, "no IDs available in group");
+    }
+    ret_value = new_id;
+
+  done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_object
+ *
+ * Purpose:	Find an object pointer for the specified ID.
+ *
+ * Return:	Success:	Non-null object pointer associated with the
+ *				specified ID.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5I_object(hid_t id)
+{
+    H5I_id_info_t	*id_ptr = NULL;		/*ptr to the new atom	*/
+    void		*ret_value = NULL;	/*return value		*/
+
+    FUNC_ENTER_NOAPI(H5I_object, NULL);
+
+    /* General lookup of the ID */
+    if (NULL!=(id_ptr = H5I_find_id(id))) {
+        /* Get the object pointer to return */
+        ret_value = id_ptr->obj_ptr;
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_object_verify
+ *
+ * Purpose:	Find an object pointer for the specified ID, verifying that
+ *                  its in a particular group.
+ *
+ * Return:	Success:	Non-null object pointer associated with the
+ *				specified ID.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, July 31, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5I_object_verify(hid_t id, H5I_type_t id_type)
+{
+    H5I_id_info_t	*id_ptr = NULL;		/*ptr to the new atom	*/
+    void		*ret_value = NULL;	/*return value		*/
+
+    FUNC_ENTER_NOAPI(H5I_object_verify, NULL);
+
+    assert(id_type>=H5I_FILE && id_type<H5I_NGROUPS);
+
+    /* Verify that the group of the ID is correct & lookup the ID */
+    if(id_type == H5I_GROUP(id) && NULL!=(id_ptr = H5I_find_id(id))) {
+        /* Get the object pointer to return */
+        ret_value = id_ptr->obj_ptr;
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* H5I_object_verify() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_get_type
+ *
+ * Purpose:	Given an object ID return the group (type) to which it
+ *		belongs.  The ID need not be the ID of an object which
+ *		currently exists because the group number (type) is encoded
+ *		in the object ID.
+ *
+ * Return:	Success:	A valid group number (type)
+ *
+ *		Failure:	H5I_BADID, a negative value.
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, February 19, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5I_type_t
+H5I_get_type(hid_t id)
+{
+    H5I_type_t		ret_value = H5I_BADID;
+
+    FUNC_ENTER_NOAPI(H5I_get_type, H5I_BADID);
+
+    if (id>0)
+        ret_value = H5I_GROUP(id);
+
+    assert(ret_value>=H5I_BADID && ret_value<H5I_NGROUPS);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Iget_type
+ *
+ * Purpose:	The public version of H5I_get_type(), obtains a group number
+ *		(type) when given an ID.  The ID need not be the ID of an
+ *		object which currently exists because the group number is
+ *		encoded as part of the ID.
+ *
+ * Return:	Success:	Group number (type)
+ *
+ *		Failure:	H5I_BADID, a negative value
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-08-23
+ *		Also fails if the ID has a valid group but no longer exists
+ *		in the ID tables.
+ *-------------------------------------------------------------------------
+ */
+H5I_type_t
+H5Iget_type(hid_t id)
+{
+    H5I_type_t		ret_value = H5I_BADID;
+
+    FUNC_ENTER_API(H5Iget_type, H5I_BADID);
+    H5TRACE1("It","i",id);
+
+    ret_value = H5I_get_type(id);
+
+    if (ret_value <= H5I_BADID || ret_value >= H5I_NGROUPS || NULL==H5I_object(id))
+	HGOTO_DONE(H5I_BADID);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_remove
+ *
+ * Purpose:	Removes the specified ID from its group.
+ *
+ * Return:	Success:	A pointer to the object that was removed, the
+ *				same pointer which would have been found by
+ *				calling H5I_object().
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5I_remove(hid_t id)
+{
+    H5I_id_group_t	*grp_ptr = NULL;/*ptr to the atomic group	*/
+    H5I_id_info_t	*curr_id;	/*ptr to the current atom	*/
+    H5I_id_info_t	*last_id;	/*ptr to the last atom		*/
+    H5I_type_t		grp;		/*atom's atomic group		*/
+    unsigned		hash_loc;	/*atom's hash table location	*/
+    void *	      ret_value = NULL;	/*return value			*/
+
+    FUNC_ENTER_NOAPI(H5I_remove, NULL);
+
+    /* Check arguments */
+    grp = H5I_GROUP(id);
+    if (grp <= H5I_BADID || grp >= H5I_NGROUPS)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "invalid group number");
+    grp_ptr = H5I_id_group_list_g[grp];
+    if (grp_ptr == NULL || grp_ptr->count <= 0)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADGROUP, NULL, "invalid group");
+
+    /* Get the bucket in which the ID is located */
+    hash_loc = (unsigned) H5I_LOC(id, grp_ptr->hash_size);
+    curr_id = grp_ptr->id_list[hash_loc];
+    if (curr_id == NULL)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, NULL, "invalid ID");
+
+    last_id = NULL;
+    while (curr_id != NULL) {
+        if (curr_id->id == id)
+            break;
+        last_id = curr_id;
+        curr_id = curr_id->next;
+    }
+
+    if (curr_id != NULL) {
+        if (last_id == NULL) {
+            /* ID is the first in the chain */
+            grp_ptr->id_list[hash_loc] = curr_id->next;
+        } else {
+            last_id->next = curr_id->next;
+        }
+        ret_value = curr_id->obj_ptr;
+        H5FL_FREE(H5I_id_info_t,curr_id);
+    } else {
+        /* couldn't find the ID in the proper place */
+	HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, NULL, "invalid ID");
+    }
+
+    /* Decrement the number of IDs in the group */
+    (grp_ptr->ids)--;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Idec_ref
+ *
+ * Purpose:	Decrements the number of references outstanding for an ID.
+ *              If the reference count for an ID reaches zero, the object
+ *              will be closed.
+ *
+ * Return:	Success:	New reference count
+ *		Failure:	Negative
+ *
+ * Programmer:  Quincey Koziol
+ *              Dec  7, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Idec_ref(hid_t id)
+{
+    int ret_value;                      /* Return value */
+
+    FUNC_ENTER_API(H5Idec_ref, FAIL);
+    H5TRACE1("Is","i",id);
+
+    /* Check arguments */
+    if (id<0)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "invalid ID");
+
+    /* Do actual decrement operation */
+    if((ret_value = H5I_dec_ref(id))<0)
+        HGOTO_ERROR (H5E_ATOM, H5E_CANTDEC, FAIL, "can't decrement ID ref count");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Idec_ref() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_dec_ref
+ *
+ * Purpose:	Decrements the number of references outstanding for an ID.
+ *		This will fail if the group is not a reference counted group.
+ *		The ID group's 'free' function will be called for the ID
+ *		if the reference count for the ID reaches 0 and a free
+ *		function has been defined at group creation time.
+ *
+ * Return:	Success:	New reference count.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Unknown
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 19 Feb 1998
+ *	It is no longer an error when the reference count of an item reaches
+ *	zero and no `free' function has been defined.  The object is still
+ *	removed from the list.
+ *
+ *	Robb Matzke, 30 Dec 1998
+ *	Fixed a bug where the return value was always zero instead of the new
+ *	reference count.
+ *
+ *	Robb Matzke, 19 Feb 1999
+ *	If the free method is defined and fails then the object is not
+ *	removed from the group and its reference count is not decremented.
+ *	The group number is now passed to the free method.
+ *
+ *	Raymond, 11 Dec 2001
+ *	If the freeing function fails, return failure instead of reference
+ *	count 1.  This feature is needed by file close with H5F_CLOSE_SEMI
+ *	value.
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5I_dec_ref(hid_t id)
+{
+    H5I_type_t		grp;		/*group the object is in*/
+    H5I_id_group_t	*grp_ptr;	/*ptr to the group	*/
+    H5I_id_info_t	*id_ptr;	/*ptr to the new ID	*/
+    int ret_value;                      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5I_dec_ref, FAIL);
+
+    /* Sanity check */
+    assert(id>=0);
+
+    /* Check arguments */
+    grp = H5I_GROUP(id);
+    if (grp <= H5I_BADID || grp >= H5I_NGROUPS)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid group number");
+    grp_ptr = H5I_id_group_list_g[grp];
+    if (grp_ptr == NULL || grp_ptr->count <= 0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid group number");
+
+    /* General lookup of the ID */
+    if ((id_ptr=H5I_find_id(id))==NULL)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't locate ID");
+
+    /*
+     * If this is the last reference to the object then invoke the group's
+     * free method on the object. If the free method is undefined or
+     * successful then remove the object from the group; otherwise leave
+     * the object in the group without decrementing the reference
+     * count. If the reference count is more than one then decrement the
+     * reference count without calling the free method.
+     *
+     * Beware: the free method may call other H5I functions.
+     */
+    if (1==id_ptr->count) {
+        if (!grp_ptr->free_func || (grp_ptr->free_func)(id_ptr->obj_ptr)>=0) {
+            H5I_remove(id);
+            ret_value = 0;
+        } else {
+            ret_value = FAIL;
+        }
+    } else {
+        ret_value = --(id_ptr->count);
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Iinc_ref
+ *
+ * Purpose:	Increments the number of references outstanding for an ID.
+ *
+ * Return:	Success:	New reference count
+ *		Failure:	Negative
+ *
+ * Programmer:  Quincey Koziol
+ *              Dec  7, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Iinc_ref(hid_t id)
+{
+    int ret_value;                      /* Return value */
+
+    FUNC_ENTER_API(H5Iinc_ref, FAIL);
+    H5TRACE1("Is","i",id);
+
+    /* Check arguments */
+    if (id<0)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "invalid ID");
+
+    /* Do actual increment operation */
+    if((ret_value = H5I_inc_ref(id))<0)
+        HGOTO_ERROR (H5E_ATOM, H5E_CANTINC, FAIL, "can't increment ID ref count");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Iinc_ref() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_inc_ref
+ *
+ * Purpose:	Increment the reference count for an object.
+ *
+ * Return:	Success:	The new reference count.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 29, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5I_inc_ref(hid_t id)
+{
+    H5I_type_t		grp;		/*group the object is in*/
+    H5I_id_group_t	*grp_ptr;	/*ptr to the group	*/
+    H5I_id_info_t	*id_ptr;	/*ptr to the ID		*/
+    int ret_value;                      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5I_inc_ref, FAIL);
+
+    /* Sanity check */
+    assert(id>=0);
+
+    /* Check arguments */
+    grp = H5I_GROUP(id);
+    if (grp <= H5I_BADID || grp >= H5I_NGROUPS)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid group number");
+    grp_ptr = H5I_id_group_list_g[grp];
+    if (!grp_ptr || grp_ptr->count<=0)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADGROUP, FAIL, "invalid group");
+
+    /* General lookup of the ID */
+    if (NULL==(id_ptr=H5I_find_id(id)))
+	HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't locate ID");
+
+    /* Set return value */
+    ret_value=++(id_ptr->count);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Iget_ref
+ *
+ * Purpose:	Retrieves the number of references outstanding for an ID.
+ *
+ * Return:	Success:	Reference count
+ *		Failure:	Negative
+ *
+ * Programmer:  Quincey Koziol
+ *              Dec  7, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Iget_ref(hid_t id)
+{
+    int ret_value;                      /* Return value */
+
+    FUNC_ENTER_API(H5Iget_ref, FAIL);
+    H5TRACE1("Is","i",id);
+
+    /* Check arguments */
+    if (id<0)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "invalid ID");
+
+    /* Do actual retrieve operation */
+    if((ret_value = H5I_get_ref(id))<0)
+        HGOTO_ERROR (H5E_ATOM, H5E_CANTGET, FAIL, "can't get ID ref count");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Iget_ref() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_get_ref
+ *
+ * Purpose:	Retrieve the reference count for an object.
+ *
+ * Return:	Success:	The reference count.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, Decemeber  6, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5I_get_ref(hid_t id)
+{
+    H5I_type_t		grp;		/*group the object is in*/
+    H5I_id_group_t	*grp_ptr;	/*ptr to the group	*/
+    H5I_id_info_t	*id_ptr;	/*ptr to the ID		*/
+    int ret_value;                      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5I_get_ref, FAIL);
+
+    /* Sanity check */
+    assert(id>=0);
+
+    /* Check arguments */
+    grp = H5I_GROUP(id);
+    if (grp <= H5I_BADID || grp >= H5I_NGROUPS)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid group number");
+    grp_ptr = H5I_id_group_list_g[grp];
+    if (!grp_ptr || grp_ptr->count<=0)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADGROUP, FAIL, "invalid group");
+
+    /* General lookup of the ID */
+    if (NULL==(id_ptr=H5I_find_id(id)))
+	HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't locate ID");
+
+    /* Set return value */
+    ret_value=id_ptr->count;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5I_get_ref() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_search
+ *
+ * Purpose:	Apply function FUNC to each member of group GRP and return a
+ *		pointer to the first object for which FUNC returns non-zero.
+ *		The FUNC should take a pointer to the object and the KEY as
+ *		arguments and return non-zero to terminate the search (zero
+ *		to continue).
+ *
+ * Limitation:	Currently there is no way to start searching from where a
+ *		previous search left off.
+ *
+ * Return:	Success:	The first object in the group for which FUNC
+ *				returns non-zero. NULL if FUNC returned zero
+ *				for every object in the group.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, February 19, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5I_search(H5I_type_t grp, H5I_search_func_t func, void *key)
+{
+    H5I_id_group_t	*grp_ptr = NULL;	/*ptr to the group	*/
+    H5I_id_info_t	*id_ptr = NULL;		/*ptr to the new ID	*/
+    H5I_id_info_t	*next_id = NULL;	/*ptr to the next ID	*/
+    unsigned		i;			/*counter		*/
+    void		*ret_value = NULL;	/*return value		*/
+
+    FUNC_ENTER_NOAPI(H5I_search, NULL);
+
+    /* Check arguments */
+    if (grp <= H5I_BADID || grp >= H5I_NGROUPS)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "invalid group number");
+    grp_ptr = H5I_id_group_list_g[grp];
+    if (grp_ptr == NULL || grp_ptr->count <= 0)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADGROUP, NULL, "invalid group");
+
+    /* Only iterate through hash table if there are IDs in group */
+    if(grp_ptr->ids > 0) {
+        /* Start at the beginning of the array */
+        for (i=0; i<grp_ptr->hash_size; i++) {
+            id_ptr = grp_ptr->id_list[i];
+            while (id_ptr) {
+                next_id= id_ptr->next;      /* Protect against ID being deleted in callback */
+                if ((*func)(id_ptr->obj_ptr, id_ptr->id, key))
+                    HGOTO_DONE(id_ptr->obj_ptr);	/*found the item*/
+                id_ptr = next_id;
+            } /* end while */
+        } /* end for */
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5I_search() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_find_id
+ *
+ * Purpose:	Given an object ID find the info struct that describes the
+ *		object.
+ *
+ * Return:	Success:	Ptr to the object's info struct.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5I_id_info_t *
+H5I_find_id(hid_t id)
+{
+    H5I_id_group_t	*grp_ptr;		/*ptr to the group	*/
+    H5I_id_info_t	*last_id;		/*ptr to the last ID	*/
+    H5I_id_info_t	*id_ptr;		/*ptr to the new ID	*/
+    H5I_type_t		grp;			/*ID's group		*/
+    unsigned		hash_loc;		/*bucket pointer	*/
+    H5I_id_info_t	*ret_value = NULL;	/*return value		*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5I_find_id);
+
+    /* Check arguments */
+    grp = H5I_GROUP(id);
+    if (grp <= H5I_BADID || grp >= H5I_NGROUPS)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "invalid group number");
+    grp_ptr = H5I_id_group_list_g[grp];
+    if (grp_ptr == NULL || grp_ptr->count <= 0)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADGROUP, NULL, "invalid group");
+
+    /* Get the bucket in which the ID is located */
+    hash_loc = (unsigned)H5I_LOC(id, grp_ptr->hash_size);
+    id_ptr = grp_ptr->id_list[hash_loc];
+    if (id_ptr == NULL)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, NULL, "invalid ID");
+
+    /* Scan the bucket's linked list for a match */
+    last_id=NULL;
+    while (id_ptr) {
+	if (id_ptr->id == id)
+            break;
+        last_id=id_ptr;
+	id_ptr = id_ptr->next;
+    }
+
+    /* If we found an object, move it to the front of the list, if it isn't there already */
+    if(id_ptr!=NULL && last_id!=NULL) {
+        last_id->next=id_ptr->next;
+        id_ptr->next=grp_ptr->id_list[hash_loc];
+        grp_ptr->id_list[hash_loc]=id_ptr;
+    } /* end if */
+
+    /* Set the return value */
+    ret_value = id_ptr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5Iget_name
+ *
+ * Purpose: Gets a name of an object from its ID.
+ *
+ * Return: Success: The length of name.
+ *
+ *         Failure: -1
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: July 26, 2002
+ *
+ * Comments: Public function
+ *  If `name' is non-NULL then write up to `size' bytes into that
+ *  buffer and always return the length of the entry name.
+ *  Otherwise `size' is ignored and the function does not store the name,
+ *  just returning the number of characters required to store the name.
+ *  If an error occurs then the buffer pointed to by `name' (NULL or non-NULL)
+ *  is unchanged and the function returns a negative value.
+ *  If a zero is returned for the name's length, then there is no name
+ *  associated with the ID.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+ssize_t
+H5Iget_name(hid_t id, char *name/*out*/, size_t size)
+{
+    H5G_entry_t   *ent;       /*symbol table entry */
+    size_t        len=0;
+    ssize_t       ret_value;
+
+    FUNC_ENTER_API (H5Iget_name, FAIL);
+    H5TRACE3("Zs","ixz",id,name,size);
+
+    /* get symbol table entry */
+    if(NULL!=(ent = H5G_loc(id))) {
+        if (ent->user_path_r != NULL && ent->user_path_hidden==0) {
+            len = H5RS_len(ent->user_path_r);
+
+            if(name) {
+                HDstrncpy(name, H5RS_get_str(ent->user_path_r), MIN(len+1,size));
+                if(len >= size)
+                    name[size-1]='\0';
+            } /* end if */
+        } /* end if */
+    } /* end if */
+
+    /* Set return value */
+    ret_value=(ssize_t)len;
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5I_debug
+ *
+ * Purpose: Dump the contents of a group to stderr for debugging.
+ *
+ * Return: Success: Non-negative
+ *
+ *   Failure: Negative
+ *
+ * Programmer: Robb Matzke
+ *  Friday, February 19, 1999
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifdef H5I_DEBUG_OUTPUT
+static herr_t
+H5I_debug(H5I_type_t grp)
+{
+    H5I_id_group_t *grp_ptr;
+    H5I_id_info_t *cur;
+    H5G_entry_t *ent = NULL;
+    int   is, js;
+    unsigned int iu;
+    herr_t ret_value;  /* Return value */
+
+    FUNC_ENTER_NOAPI(H5I_debug, FAIL);
+
+    fprintf(stderr, "Dumping group %d\n", (int)grp);
+    grp_ptr = H5I_id_group_list_g[grp];
+
+    /* Header */
+    fprintf(stderr, "	 count	   = %u\n", grp_ptr->count);
+    fprintf(stderr, "	 reserved  = %u\n", grp_ptr->reserved);
+    fprintf(stderr, "	 wrapped   = %u\n", grp_ptr->wrapped);
+    fprintf(stderr, "	 hash_size = %lu\n", (unsigned long)grp_ptr->hash_size);
+    fprintf(stderr, "	 ids	   = %u\n", grp_ptr->ids);
+    fprintf(stderr, "	 nextid	   = %u\n", grp_ptr->nextid);
+
+    /* Cache */
+    fprintf(stderr, "	 Cache:\n");
+    for (is=0; is<ID_CACHE_SIZE; is++) {
+        if (H5I_cache_g[is] && H5I_GROUP(H5I_cache_g[is]->id)==grp) {
+            fprintf(stderr, "	     Entry-%d, ID=%lu\n",
+                    is, (unsigned long)(H5I_cache_g[is]->id));
+        }
+    }
+
+    /* List */
+    fprintf(stderr, "	 List:\n");
+    for (iu=0; iu<grp_ptr->hash_size; iu++) {
+        for (js=0, cur=grp_ptr->id_list[iu]; cur; cur=cur->next, js++) {
+            fprintf(stderr, "	     #%u.%d\n", iu, js);
+            fprintf(stderr, "		 id = %lu\n", (unsigned long)(cur->id));
+            fprintf(stderr, "		 count = %u\n", cur->count);
+            fprintf(stderr, "		 obj   = 0x%08lx\n", (unsigned long)(cur->obj_ptr));
+
+            /* Get the symbol table entry, so we get get the name */
+            switch(grp) {
+                case H5I_GROUP:
+                    ent = H5G_entof((H5G_t*)cur->obj_ptr);
+                    break;
+                case H5I_DATASET:
+                    ent = H5D_entof((H5D_t*)cur->obj_ptr);
+                    break;
+                case H5I_DATATYPE:
+                    ent = H5T_entof((H5T_t*)cur->obj_ptr);
+                    break;
+                default:
+                    continue;   /* Other types of IDs are not stored in files */
+            } /* end switch*/
+
+            if(ent) {
+                if(ent->name)
+                    fprintf(stderr, "                name = %s\n",ent->name);
+                if(ent->old_name)
+                    fprintf(stderr, "                old_name = %s\n",ent->old_name);
+            } /* end if */
+        } /* end for */
+    } /* end for */
+
+done:
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+#endif /* H5I_DEBUG_OUTPUT */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Iget_file_id
+ *
+ * Purpose:	The public version of H5I_get_file_id(), obtains the file
+ *              ID given an object ID.  User has to close this ID.
+ *
+ * Return:	Success:	file ID
+ *
+ *		Failure:	a negative value
+ *
+ * Programmer:  Raymond Lu
+ *              Oct 27, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Iget_file_id(hid_t obj_id)
+{
+    hid_t		ret_value;
+
+    FUNC_ENTER_API(H5Iget_file_id, FAIL);
+    H5TRACE1("i","i",obj_id);
+
+    if((ret_value = H5I_get_file_id(obj_id))<0)
+        HGOTO_ERROR (H5E_ATOM, H5E_CANTGET, FAIL, "can't retrieve file ID");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5I_get_file_id
+ *
+ * Purpose:	The private version of H5Iget_file_id(), obtains the file
+ *              ID given an object ID.
+ *
+ * Return:	Success:	file ID
+ *
+ *		Failure:	a negative value
+ *
+ * Programmer:  Raymond Lu
+ *              Oct 27, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hid_t
+H5I_get_file_id(hid_t obj_id)
+{
+    H5G_entry_t         *ent;
+    hid_t		ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5I_get_file_id);
+
+    /* Get object type */
+    switch(H5I_GROUP(obj_id)) {
+        case H5I_FILE:
+            ret_value = obj_id;
+
+            /* Increment reference count on atom. */
+            if (H5I_inc_ref(ret_value)<0)
+                HGOTO_ERROR (H5E_ATOM, H5E_CANTSET, FAIL, "incrementing file ID failed");
+
+            break;
+
+        case H5I_DATATYPE:
+            if((ent = H5G_loc(obj_id))==NULL)
+                HGOTO_ERROR (H5E_ATOM, H5E_CANTGET, FAIL, "not a named datatype");
+            ret_value = H5F_get_id(ent->file);
+            break;
+
+        case H5I_GROUP:
+        case H5I_DATASET:
+        case H5I_ATTR:
+            if((ent = H5G_loc(obj_id))==NULL)
+                HGOTO_ERROR (H5E_ATOM, H5E_CANTGET, FAIL, "can't get symbol table info");
+            ret_value = H5F_get_id(ent->file);
+            break;
+
+        default:
+	    HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "invalid object ID");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Ipkg.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Ipkg.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Ipkg.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,67 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *		Thursday, May 15, 2003
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5I package.  Source files outside the H5I package should
+ *		include H5Iprivate.h instead.
+ */
+#ifndef H5I_PACKAGE
+#error "Do not include this file outside the H5I package!"
+#endif
+
+#ifndef _H5Ipkg_H
+#define _H5Ipkg_H
+
+/* Get package's private header */
+#include "H5Iprivate.h"
+
+/* Other private headers needed by this file */
+
+/**************************/
+/* Package Private Macros */
+/**************************/
+
+/*
+ * Number of bits to use for Group ID in each atom. Increase if H5I_NGROUPS
+ * becomes too large (an assertion would fail in H5I_init_interface). This is
+ * the only number that must be changed since all other bit field sizes and
+ * masks are calculated from GROUP_BITS.
+ */
+#define GROUP_BITS	5
+#define GROUP_MASK	((1<<GROUP_BITS)-1)
+
+/*
+ * Number of bits to use for the Atom index in each atom (assumes 8-bit
+ * bytes). We don't use the sign bit.
+ */
+#define ID_BITS		((sizeof(hid_t)*8)-(GROUP_BITS+1))
+#define ID_MASK		((1<<ID_BITS)-1)
+
+/* Map an atom to a Group number */
+#define H5I_GROUP(a)	((H5I_type_t)(((hid_t)(a)>>ID_BITS) & GROUP_MASK))
+
+
+/****************************/
+/* Package Private Typedefs */
+/****************************/
+
+/******************************/
+/* Package Private Prototypes */
+/******************************/
+
+#endif /*_H5Ipkg_H*/

Added: packages/hdf5/branches/upstream/current/src/H5Iprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Iprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Iprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,72 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-----------------------------------------------------------------------------
+ * File:    H5Iprivate.h
+ * Purpose: header file for ID API
+ *---------------------------------------------------------------------------*/
+
+/* avoid re-inclusion */
+#ifndef _H5Iprivate_H
+#define _H5Iprivate_H
+
+/* Include package's public header */
+#include "H5Ipublic.h"
+
+/* Private headers needed by this file */
+#include "H5private.h"
+
+/* Default sizes of the hash-tables for various atom groups */
+#define H5I_ERRSTACK_HASHSIZE		64
+#define H5I_FILEID_HASHSIZE		64
+#define H5I_TEMPID_HASHSIZE		64
+#define H5I_DATATYPEID_HASHSIZE		64
+#define H5I_DATASPACEID_HASHSIZE	64
+#define H5I_DATASETID_HASHSIZE		64
+#define H5I_OID_HASHSIZE		64
+#define H5I_GROUPID_HASHSIZE		64
+#define H5I_ATTRID_HASHSIZE		64
+#define H5I_REFID_HASHSIZE		64
+#define H5I_VFL_HASHSIZE		64
+#define H5I_GENPROPCLS_HASHSIZE		64
+#define H5I_GENPROPOBJ_HASHSIZE		128
+
+/*
+ * Function for freeing objects. This function will be called with an object
+ * ID group number (object type) and a pointer to the object. The function
+ * should free the object and return non-negative to indicate that the object
+ * can be removed from the ID group. If the function returns negative
+ * (failure) then the object will remain in the ID group.
+ */
+typedef herr_t (*H5I_free_t)(void*);
+
+/* Type of the function to compare objects & keys */
+typedef int (*H5I_search_func_t)(void *obj, hid_t id, void *key);
+
+/* Private Functions in H5I.c */
+H5_DLL int H5I_init_group(H5I_type_t grp, size_t hash_size, unsigned reserved,
+			    H5I_free_t func);
+H5_DLL int H5I_nmembers(H5I_type_t grp);
+H5_DLL herr_t H5I_clear_group(H5I_type_t grp, hbool_t force);
+H5_DLL herr_t H5I_destroy_group(H5I_type_t grp);
+H5_DLL hid_t H5I_register(H5I_type_t grp, void *object);
+H5_DLL void *H5I_object(hid_t id);
+H5_DLL void *H5I_object_verify(hid_t id, H5I_type_t id_type);
+H5_DLL H5I_type_t H5I_get_type(hid_t id);
+H5_DLL void *H5I_remove(hid_t id);
+H5_DLL void *H5I_search(H5I_type_t grp, H5I_search_func_t func, void *key);
+H5_DLL int H5I_get_ref(hid_t id);
+H5_DLL int H5I_inc_ref(hid_t id);
+H5_DLL int H5I_dec_ref(hid_t id);
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Ipublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Ipublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Ipublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,72 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains function prototypes for each exported function in
+ * the H5I module.
+ */
+#ifndef _H5Ipublic_H
+#define _H5Ipublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+/*
+ * Group values allowed.  Start with `1' instead of `0' because it makes the
+ * tracing output look better when hid_t values are large numbers.  Change the
+ * GROUP_BITS in H5I.c if the MAXID gets larger than 32 (an assertion will
+ * fail otherwise).
+ *
+ * When adding groups here, add a section to the 'misc19' test in test/tmisc.c
+ * to verify that the H5I{inc|dec|get}_ref() routines work correctly with in.
+ *
+ */
+typedef enum {
+    H5I_BADID		= (-1),	/*invalid Group				    */
+    H5I_FILE		= 1,	/*group ID for File objects		    */
+    H5I_GROUP,		        /*group ID for Group objects		    */
+    H5I_DATATYPE,	        /*group ID for Datatype objects		    */
+    H5I_DATASPACE,	        /*group ID for Dataspace objects	    */
+    H5I_DATASET,	        /*group ID for Dataset objects		    */
+    H5I_ATTR,		        /*group ID for Attribute objects	    */
+    H5I_REFERENCE,	        /*group ID for Reference objects	    */
+    H5I_VFL,			/*group ID for virtual file layer	    */
+    H5I_GENPROP_CLS,            /*group ID for generic property list classes */
+    H5I_GENPROP_LST,            /*group ID for generic property lists       */
+
+    H5I_NGROUPS		        /*number of valid groups, MUST BE LAST!	    */
+} H5I_type_t;
+
+/* Type of atoms to return to users */
+typedef int hid_t;
+
+/* An invalid object ID. This is also negative for error return. */
+#define H5I_INVALID_HID         (-1)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Public API functions */
+H5_DLL H5I_type_t H5Iget_type(hid_t id);
+H5_DLL hid_t H5Iget_file_id(hid_t id);
+H5_DLL ssize_t H5Iget_name(hid_t id, char *name/*out*/, size_t size);
+H5_DLL int H5Iinc_ref(hid_t id);
+H5_DLL int H5Idec_ref(hid_t id);
+H5_DLL int H5Iget_ref(hid_t id);
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5MF.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5MF.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5MF.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,438 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5MF.c
+ *                      Jul 11 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             File memory management functions.
+ *
+ * Modifications:
+ *      Robb Matzke, 5 Aug 1997
+ *      Added calls to H5E.
+ *
+ * 	Robb Matzke, 8 Jun 1998
+ *	Implemented a very simple free list which is not persistent and which
+ *	is lossy.
+ *
+ *-------------------------------------------------------------------------
+ */
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+
+#include "H5private.h"
+#include "H5Eprivate.h"
+#include "H5Fpkg.h"
+#include "H5FDprivate.h"
+#include "H5MFprivate.h"
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5MF_alloc
+ *
+ * Purpose:     Allocate SIZE bytes of file memory and return the relative
+ *		address where that contiguous chunk of file memory exists.
+ *		The TYPE argument describes the purpose for which the storage
+ *		is being requested.
+ *
+ * Return:      Success:        The file address of new chunk.
+ *
+ *              Failure:        HADDR_UNDEF
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Jul 11 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-08-04
+ *		Modified to work with the virtual file layer.
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5MF_alloc(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, hsize_t size)
+{
+    haddr_t	ret_value;
+
+    FUNC_ENTER_NOAPI(H5MF_alloc, HADDR_UNDEF);
+
+    /* check arguments */
+    assert(f);
+    assert(size > 0);
+
+    /* Fail if we don't have write access */
+    if (0==(f->intent & H5F_ACC_RDWR))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, HADDR_UNDEF, "file is read-only");
+
+    /* Check that the file can address the new space */
+    if( H5MF_alloc_overflow(f, size) )
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "not enough address space in file");
+
+    /* Allocate space from the virtual file layer */
+    if (HADDR_UNDEF==(ret_value=H5FD_alloc(f->shared->lf, type, dxpl_id, size)))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "file allocation failed");
+
+    /* Convert absolute file address to relative file address */
+    assert(ret_value>=f->shared->base_addr);
+
+    /* Set return value */
+    ret_value -= f->shared->base_addr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5MF_xfree
+ *
+ * Purpose:     Frees part of a file, making that part of the file
+ *              available for reuse.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Jul 17 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value
+ *
+ * 		Robb Matzke, 1999-08-03
+ *		Modified to use the virtual file layer.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5MF_xfree(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, hsize_t size)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5MF_xfree);
+
+    /* check arguments */
+    assert(f);
+    if (!H5F_addr_defined(addr) || 0 == size)
+        HGOTO_DONE(SUCCEED);
+    assert(addr!=0);
+
+    /* Convert relative address to absolute address */
+    addr += f->shared->base_addr;
+
+    /* Allow virtual file layer to free block */
+    if (H5FD_free(f->shared->lf, type, dxpl_id, addr, size)<0) {
+#ifdef H5MF_DEBUG
+	if (H5DEBUG(MF)) {
+	    fprintf(H5DEBUG(MF),
+		    "H5MF_free: lost %lu bytes of file storage\n",
+		    (unsigned long)size);
+	}
+#endif
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5MF_realloc
+ *
+ * Purpose:	Changes the size of an allocated chunk, possibly moving it to
+ *		a new address.  The chunk to change is at address OLD_ADDR
+ *		and is exactly OLD_SIZE bytes (if these are H5F_ADDR_UNDEF
+ *		and zero then this function acts like H5MF_alloc).  The new
+ *		size will be NEW_SIZE and its address is the return value (if
+ *		NEW_SIZE is zero then this function acts like H5MF_free and
+ *		an undefined address is returned).
+ *
+ *		If the new size is less than the old size then the new
+ *		address will be the same as the old address (except for the
+ *		special case where the new size is zero).
+ *
+ *		If the new size is more than the old size then most likely a
+ *		new address will be returned.  However, under certain
+ *		circumstances the library may return the same address.
+ *
+ * Return:	Success:	The relative file address of the new block.
+ *
+ * 		Failure:	HADDR_UNDEF
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April 16, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ORIG_ADDR is passed by value. The name of NEW_ADDR has
+ *		been changed to NEW_ADDR_P
+ *
+ * 		Robb Matzke, 1999-08-04
+ *		Modified to work with the virtual file layer.
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5MF_realloc(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, haddr_t old_addr, hsize_t old_size,
+	     hsize_t new_size)
+{
+    haddr_t	ret_value;
+
+    FUNC_ENTER_NOAPI(H5MF_realloc, HADDR_UNDEF);
+
+    /* Convert old relative address to absolute address */
+    old_addr += f->shared->base_addr;
+
+    /* Check that the file can address the new space. */
+    /* In the worst case, this means adding new_size bytes to the end of the file. */
+    if( H5MF_alloc_overflow(f, new_size) )
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "not enough address space in file");
+
+    /* Reallocate memory from the virtual file layer */
+    ret_value = H5FD_realloc(f->shared->lf, type, dxpl_id, old_addr, old_size,
+			     new_size);
+    if (HADDR_UNDEF==ret_value)
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "unable to allocate new file memory");
+
+    /* Convert return value to relative address */
+    assert(ret_value>=f->shared->base_addr);
+
+    /* Set return value */
+    ret_value -= f->shared->base_addr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	H5MF_reserve
+ *
+ * Purpose:	Sets aside file space that has not yet been allocated, but will
+ *		be (or might be in the worst case).  This number is used to
+ *		ensure that there is room in the file when it is flushed to disk.
+ *
+ *		Nothing changes (and no error is generated) if the file is opened
+ *		as read-only.
+ *
+ * Return:	Success:	0
+ *
+ * 		Failure:	negative
+ *
+ * Programmer:	James Laird
+ *		Nat Furrer
+ *              Thursday, May 27, 2004
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5MF_reserve(H5F_t *f, hsize_t size)
+{
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5MF_reserve, FAIL);
+
+    /* Check arguments */
+    assert(f);
+
+    /* Check that there is room in the file to reserve this space */
+    if( H5MF_alloc_overflow( f, size ) )
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "not enough address space in file");
+
+    f->shared->lf->reserved_alloc += size;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	H5MF_free_reserved
+ *
+ * Purpose:	Releases the file space set aside by H5MF_reserve.  This should
+ *			be called immediately before allocating the file space for which
+ *			the space was reserved.
+ *
+ * Return:	None
+ *
+ * Programmer:	James Laird
+ *				Nat Furrer
+ *              Thursday, May 27, 2004
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5MF_free_reserved(H5F_t *f, hsize_t size)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5MF_free_reserved)
+
+    /* Check arguments */
+    assert(f);
+
+    /* If this assert breaks, it means that HDF5 is trying to free file space
+     * that was never reserved.
+     */
+    assert(size <= f->shared->lf->reserved_alloc);
+
+    f->shared->lf->reserved_alloc -= size;
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	H5MF_alloc_overflow
+ *
+ * Purpose:	Checks if an allocation of file space would cause an overflow.
+ *          F is the file whose space is being allocated, SIZE is the amount
+ *          of space needed.
+ *
+ * Return:	0 if no overflow would result
+ *          1 if overflow would result (the allocation should not be allowed)
+ *
+ * Programmer:	James Laird
+ *				Nat Furrer
+ *              Tuesday, June 1, 2004
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+hbool_t
+H5MF_alloc_overflow(H5F_t *f, hsize_t size)
+{
+    hsize_t space_needed;       /* Accumulator variable */
+    size_t c;                   /* Local index variable */
+    hbool_t ret_value;           /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5MF_alloc_overflow)
+
+    /* Start with the current end of the file's address. */
+    space_needed = (hsize_t)H5F_get_eoa(f);
+    HDassert(H5F_addr_defined(space_needed));
+
+    /* Subtract the file's base address to get the actual amount of
+     * space being used:
+     * (end of allocated space - beginning of allocated space)
+     */
+    HDassert(H5F_BASE_ADDR(f) < space_needed);
+    space_needed -= (hsize_t)H5F_BASE_ADDR(f);
+
+    /* Add the amount of space requested for this allocation */
+    space_needed += size;
+
+    /* Also add space that is "reserved" for data to be flushed
+     * to disk (e.g., for object headers and the heap).
+     * This is the total amount of file space that will be
+     * allocated.
+     */
+    space_needed += f->shared->lf->reserved_alloc;
+
+    /* Ensure that this final number is less than the file's
+     * address space.  We do this by shifting in multiples
+     * of 16 bits because some systems will do nothing if
+     * we shift by the size of a long long (64 bits) all at
+     * once (<cough> Linux <cough>).  Thus, we break one shift
+     * into several smaller shifts.
+     */
+    for(c=0; c < H5F_SIZEOF_ADDR(f); c += 2)
+        space_needed = space_needed >> 16;
+
+    if(space_needed != 0)
+        ret_value=TRUE;
+    else
+        ret_value=FALSE;
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5MF_can_extend
+ *
+ * Purpose:	Check if a block in the file can be extended.
+ *
+ *		This is a simple check currently, which only checks for the
+ *              block being at the end of the file.  A more sophisticated check
+ *              would also use the free space list to see if there is a block
+ *              appropriately placed to accomodate the space requested.
+ *
+ * Return:	Success:	TRUE(1)/FALSE(0)
+ *
+ * 		Failure:	FAIL
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, June 11, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5MF_can_extend(H5F_t *f, H5FD_mem_t type, haddr_t addr, hsize_t size, hsize_t extra_requested)
+{
+    htri_t	ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5MF_can_extend, FAIL);
+
+    /* Convert old relative address to absolute address */
+    addr += H5F_BASE_ADDR(f);
+
+    /* Pass the request down to the virtual file layer */
+    if((ret_value=H5FD_can_extend(f->shared->lf, type, addr, size, extra_requested))<0)
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate new file memory");
+
+    /* Make sure there is enough addressable space to satisfy the request */
+    if (ret_value == TRUE)
+        ret_value = !H5MF_alloc_overflow(f, extra_requested);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5MF_can_extend() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5MF_extend
+ *
+ * Purpose:	Extend a block in the file.
+ *
+ * Return:	Success:	TRUE(1)/FALSE(0)
+ *
+ * 		Failure:	FAIL
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, June 12, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5MF_extend(H5F_t *f, H5FD_mem_t type, haddr_t addr, hsize_t size, hsize_t extra_requested)
+{
+    htri_t	ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5MF_extend, FAIL);
+
+    /* Make sure there is enough addressable space to satisfy the request */
+    if ( H5MF_alloc_overflow(f, extra_requested) )
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate new file memory: out of address space");
+
+    /* Convert old relative address to absolute address */
+    addr += H5F_BASE_ADDR(f);
+
+    /* Pass the request down to the virtual file layer */
+    if((ret_value=H5FD_extend(f->shared->lf, type, addr, size, extra_requested))<0)
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate new file memory");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5MF_extend() */

Added: packages/hdf5/branches/upstream/current/src/H5MFprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5MFprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5MFprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,59 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5MFprivate.h
+ *                      Jul 11 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             Private header file for file memory management.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5MFprivate_H
+#define _H5MFprivate_H
+
+/* Private headers needed by this file */
+#include "H5private.h"
+#include "H5Fprivate.h"
+#include "H5FDprivate.h"	/*file driver				  */
+
+/*
+ * Feature: Define H5MF_DEBUG on the compiler command line if you want to
+ *	    see diagnostics from this layer.
+ */
+#ifdef NDEBUG
+#  undef H5MF_DEBUG
+#endif
+
+/*
+ * Library prototypes...
+ */
+H5_DLL haddr_t H5MF_alloc(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, hsize_t size);
+H5_DLL herr_t H5MF_xfree(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
+			  hsize_t size);
+H5_DLL haddr_t H5MF_realloc(H5F_t *f, H5FD_mem_t type, hid_t dxpl_id, haddr_t old_addr,
+			     hsize_t old_size, hsize_t new_size);
+H5_DLL herr_t H5MF_reserve(H5F_t *f, hsize_t size);
+H5_DLL herr_t H5MF_free_reserved(H5F_t *f, hsize_t size);
+H5_DLL hbool_t H5MF_alloc_overflow(H5F_t *f, hsize_t size);
+H5_DLL htri_t H5MF_can_extend(H5F_t *f, H5FD_mem_t type, haddr_t addr,
+    hsize_t size, hsize_t extra_requested);
+H5_DLL htri_t H5MF_extend(H5F_t *f, H5FD_mem_t type, haddr_t addr, hsize_t size,
+    hsize_t extra_requested);
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5MM.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5MM.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5MM.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,261 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:		H5MM.c
+ *			Jul 10 1997
+ *			Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:		Memory management functions.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+#include "H5private.h"
+#include "H5Eprivate.h"
+#include "H5MMprivate.h"
+
+#ifndef NDEBUG
+
+/*-------------------------------------------------------------------------
+ * Function:	H5MM_malloc
+ *
+ * Purpose:	Just like the POSIX version of malloc(3). This routine
+ *		specifically checks for allocations of 0 bytes and fails
+ *              in that case.  This routine is not called when NDEBUG is
+ *		defined.
+ *
+ * Return:	Success:	Ptr to new memory
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Nov  8 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5MM_malloc(size_t size)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5MM_malloc);
+
+    assert(size);
+
+    FUNC_LEAVE_NOAPI(HDmalloc(size));
+} /* end H5MM_malloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5MM_calloc
+ *
+ * Purpose:	Similar to the POSIX version of calloc(3), except this routine
+ *              just takes a 'size' parameter. This routine
+ *		specifically checks for allocations of 0 bytes and fails
+ *              in that case.  This routine is not called when NDEBUG is
+ *		defined.
+ *
+ * Return:	Success:	Ptr to new memory
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Nov  8 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5MM_calloc(size_t size)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5MM_calloc);
+
+    assert(size);
+
+    FUNC_LEAVE_NOAPI(HDcalloc(1,size));
+} /* end H5MM_calloc() */
+#endif /* NDEBUG */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5MM_realloc
+ *
+ * Purpose:	Just like the POSIX version of realloc(3). Specifically, the
+ *		following calls are equivalent
+ *
+ *		H5MM_realloc (NULL, size) <==> H5MM_malloc (size)
+ *		H5MM_realloc (ptr, 0)	  <==> H5MM_xfree (ptr)
+ *		H5MM_realloc (NULL, 0)	  <==> NULL
+ *
+ * Return:	Success:	Ptr to new memory or NULL if the memory
+ *				was freed.
+ *
+ *		Failure:	abort()
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 10 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5MM_realloc(void *mem, size_t size)
+{
+    void *ret_value;
+
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5MM_realloc);
+
+    if (!mem) {
+	if (0 == size)
+            HGOTO_DONE(NULL);
+	mem = H5MM_malloc(size);
+
+    } else if (0 == size) {
+	mem = H5MM_xfree(mem);
+
+    } else {
+	mem = HDrealloc(mem, size);
+	assert(mem);
+    }
+
+    /* Set return value */
+    ret_value=mem;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5MM_xstrdup
+ *
+ * Purpose:	Duplicates a string.  If the string to be duplicated is the
+ *		null pointer, then return null.	 If the string to be duplicated
+ *		is the empty string then return a new empty string.
+ *
+ * Return:	Success:	Ptr to a new string (or null if no string).
+ *
+ *		Failure:	abort()
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 10 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+char *
+H5MM_xstrdup(const char *s)
+{
+    char	*ret_value=NULL;
+
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5MM_xstrdup);
+
+    if (s) {
+        ret_value = H5MM_malloc(HDstrlen(s) + 1);
+        assert (ret_value);
+        HDstrcpy(ret_value, s);
+    } /* end if */
+
+#ifdef LATER
+done:
+#endif /* LATER */
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5MM_strdup
+ *
+ * Purpose:	Duplicates a string.  If the string to be duplicated is the
+ *		null pointer, then return null.	 If the string to be duplicated
+ *		is the empty string then return a new empty string.
+ *
+ * Return:	Success:	Ptr to a new string (or null if no string).
+ *
+ *		Failure:	abort()
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 10 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+char *
+H5MM_strdup(const char *s)
+{
+    char	*ret_value;
+
+    FUNC_ENTER_NOAPI(H5MM_strdup, NULL);
+
+    if (!s)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, NULL, "null string");
+    if (NULL==(ret_value = H5MM_malloc(HDstrlen(s) + 1)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    HDstrcpy(ret_value, s);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5MM_xfree
+ *
+ * Purpose:	Just like free(3) except null pointers are allowed as
+ *		arguments, and the return value (always NULL) can be
+ *		assigned to the pointer whose memory was just freed:
+ *
+ *			thing = H5MM_xfree (thing);
+ *
+ * Return:	Success:	NULL
+ *
+ *		Failure:	never fails
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 10 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5MM_xfree(void *mem)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5MM_xfree);
+
+    if (mem)
+        HDfree(mem);
+
+    FUNC_LEAVE_NOAPI(NULL);
+}

Added: packages/hdf5/branches/upstream/current/src/H5MMprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5MMprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5MMprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,53 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5MMprivate.h
+ *                      Jul 10 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             Private header for memory management.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5MMprivate_H
+#define _H5MMprivate_H
+
+#include "H5MMpublic.h"
+
+/* Private headers needed by this file */
+#include "H5private.h"
+
+#ifdef NDEBUG
+#define H5MM_malloc(Z)	HDmalloc(Z)
+#define H5MM_calloc(Z)	HDcalloc(1,Z)
+#endif /* NDEBUG */
+#define H5MM_free(Z)	HDfree(Z)
+
+/*
+ * Library prototypes...
+ */
+#ifndef NDEBUG
+H5_DLL void *H5MM_malloc(size_t size);
+H5_DLL void *H5MM_calloc(size_t size);
+#endif /* NDEBUG */
+H5_DLL void *H5MM_realloc(void *mem, size_t size);
+H5_DLL char *H5MM_xstrdup(const char *s);
+H5_DLL char *H5MM_strdup(const char *s);
+H5_DLL void *H5MM_xfree(void *mem);
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5MMpublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5MMpublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5MMpublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,45 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5MMproto.h
+ *                      Jul 10 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             Public declarations for the H5MM (memory management)
+ *                      package.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5MMpublic_H
+#define _H5MMpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+/* These typedefs are currently used for VL datatype allocation/freeing */
+typedef void *(* H5MM_allocate_t)(size_t size,void *info);
+typedef void (* H5MM_free_t)(void *mem, void *free_info);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5MPprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5MPprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5MPprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,403 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Header file for private definitions of the MPE instrumentation.
+ */
+#ifndef _H5MPprivate_H
+#define _H5MPprivate_H
+
+#ifdef H5_HAVE_MPE
+/*------------------------------------------------------------------------
+ * Purpose:    Begin to collect MPE log information for a function. It should
+ *             be ahead of the actual function's process.
+ *
+ * Programmer: Long Wang
+ *
+ *------------------------------------------------------------------------
+ */
+#include "mpe.h"
+/*
+ * #define eventa(func_name)   h5_mpe_ ## func_name ## _a
+ * #define eventb(func_name)   h5_mpe_ ## func_name ## _b
+ */
+#define eventa(func_name)   h5_mpe_eventa
+#define eventb(func_name)   h5_mpe_eventb
+#define COLOR(func_name)    color_ ## func_name
+#define MPE_LOG_VARS(func_name)                                               \
+    static int eventa(func_name) = -1;                                        \
+    static int eventb(func_name) = -1;                                        \
+    char* p_end_funcname = #func_name;                                        \
+    char* p_event_start = "start" #func_name;
+
+#define BEGIN_MPE_LOG(func_name)                                              \
+  if (H5_MPEinit_g){							      \
+    if (H5_MPEinit_g && eventa(func_name) == -1 && eventb(func_name) == -1) { \
+	char* p_color = COLOR(func_name);				      \
+         eventa(func_name)=MPE_Log_get_event_number();                        \
+         eventb(func_name)=MPE_Log_get_event_number();                        \
+         MPE_Describe_state(eventa(func_name), eventb(func_name), p_end_funcname,p_color); \
+    }                                                                         \
+    MPE_Log_event(eventa(func_name), 0, p_event_start); 	              \
+  }
+
+
+/*------------------------------------------------------------------------
+ * Purpose:   Finish the collection of MPE log information for a function.
+ *            It should be after the actual function's process.
+ *
+ * Programmer: Long Wang
+ */
+#define FINISH_MPE_LOG                                                       \
+    if (H5_MPEinit_g) {                                                      \
+        MPE_Log_event(eventb(func_name), 0, p_end_funcname);                 \
+    }
+
+
+
+/* color for each public HDF5 API function */
+#define color_H5_init_library "red"
+
+#define color_H5open "red"
+#define color_H5close "red"
+#define color_H5dont_atexit "red"
+#define color_H5garbage_collect "red"
+#define color_H5set_free_list_limits "red"
+#define color_H5get_libversion "red"
+#define color_H5check_version "red"
+
+#define color_H5Dcreate "red"
+#define color_H5Dopen "red"
+#define color_H5Dclose "red"
+#define color_H5Dget_space "red"
+#define color_H5Dget_space_status "red"
+#define color_H5Dget_type "red"
+#define color_H5Dget_create_plist "red"
+#define color_H5Dget_storage_size "red"
+#define color_H5Dread "red"
+#define color_H5Dwrite "red"
+#define color_H5Dextend "red"
+#define color_H5Diterate "red"
+#define color_H5Dvlen_reclaim "red"
+#define color_H5Dvlen_get_buf_size "red"
+#define color_H5Dfill "red"
+#define color_H5Ddebug "red"
+#define color_H5Dset_extent "red"
+#define color_H5Dget_offset "red"
+
+#define color_H5Eset_auto "red"
+#define color_H5Eget_auto "red"
+#define color_H5Eclear "red"
+#define color_H5Eprint "red"
+#define color_H5Ewalk "red"
+#define color_H5Eget_major "red"
+#define color_H5Eget_minor "red"
+#define color_H5Epush "red"
+
+#define color_H5Fis_hdf5 "red"
+#define color_H5Fcreate "red"
+#define color_H5Fopen "red"
+#define color_H5Freopen "red"
+#define color_H5Fflush "red"
+#define color_H5Fclose "red"
+#define color_H5Fget_create_plist "red"
+#define color_H5Fget_access_plist "red"
+#define color_H5Fget_obj_count "red"
+#define color_H5Fget_vfd_handle "red"
+#define color_H5Fget_obj_ids "red"
+#define color_H5Fmount "red"
+#define color_H5Funmount "red"
+#define color_H5Fget_freespace "red"
+#define color_H5Fget_filesize "red"
+#define color_H5Fget_name "red"
+
+#define color_H5Gcreate "red"
+#define color_H5Gopen "red"
+#define color_H5Gclose "red"
+#define color_H5Giterate "red"
+#define color_H5Gmove2 "red"
+#define color_H5Glink2 "red"
+#define color_H5Gunlink "red"
+#define color_H5Gget_objinfo "red"
+#define color_H5Gget_linkval "red"
+#define color_H5Gset_comment "red"
+#define color_H5Gget_comment "red"
+#define color_H5Gget_num_objs "red"
+#define color_H5Gget_objname_by_idx "red"
+#define color_H5Gget_objtype_by_idx "red"
+
+#define color_H5Idec_ref "red"
+#define color_H5Iget_file_id "red"
+#define color_H5Iget_name "red"
+#define color_H5Iget_ref "red"
+#define color_H5Iget_type "red"
+#define color_H5Iinc_ref "red"
+
+#define color_H5Rdereference "red"
+#define color_H5Rcreate "red"
+#define color_H5Rget_region "red"
+#define color_H5Rget_object_type "red"
+#define color_H5Rget_obj_type "red"
+
+#define color_H5Topen "red"
+#define color_H5Tcreate "red"
+#define color_H5Tcopy "red"
+#define color_H5Tclose "red"
+#define color_H5Tequal "red"
+#define color_H5Tlock "red"
+#define color_H5Tcommit "red"
+#define color_H5Tcommitted "red"
+#define color_H5Tinsert "red"
+#define color_H5Tpack "red"
+#define color_H5Tenum_create "red"
+#define color_H5Tenum_insert "red"
+#define color_H5Tenum_nameof "red"
+#define color_H5Tenum_valueof "red"
+#define color_H5Tvlen_create "red"
+#define color_H5Tarray_create "red"
+#define color_H5Tis_variable_str "red"
+#define color_H5Tget_array_dims "red"
+#define color_H5Tget_array_ndims "red"
+#define color_H5Tset_tag "red"
+#define color_H5Tget_tag "red"
+#define color_H5Tget_super "red"
+#define color_H5Tget_class "red"
+#define color_H5Tdetect_class "red"
+#define color_H5Tget_size "red"
+#define color_H5Tget_order "red"
+#define color_H5Tget_precision "red"
+#define color_H5Tget_offset "red"
+#define color_H5Tget_pad "red"
+#define color_H5Tget_sign "red"
+#define color_H5Tget_fields "red"
+#define color_H5Tget_ebias "red"
+#define color_H5Tget_norm "red"
+#define color_H5Tget_inpad "red"
+#define color_H5Tget_strpad "red"
+#define color_H5Tget_nmembers "red"
+#define color_H5Tget_num_members "red"
+#define color_H5Tget_member_name "red"
+#define color_H5Tget_member_index "red"
+#define color_H5Tget_member_offset "red"
+#define color_H5Tget_member_class "red"
+#define color_H5Tget_member_value "red"
+#define color_H5Tget_member_type "red"
+#define color_H5Tget_cset "red"
+#define color_H5Tset_size "red"
+#define color_H5Tset_order "red"
+#define color_H5Tset_precision "red"
+#define color_H5Tset_offset "red"
+#define color_H5Tset_pad "red"
+#define color_H5Tset_sign "red"
+#define color_H5Tset_fields "red"
+#define color_H5Tset_ebias "red"
+#define color_H5Tset_norm "red"
+#define color_H5Tset_inpad "red"
+#define color_H5Tset_cset "red"
+#define color_H5Tset_strpad "red"
+#define color_H5Tregister "red"
+#define color_H5Tunregister "red"
+#define color_H5Tfind "red"
+#define color_H5Tconvert "red"
+#define color_H5Tget_overflow "red"
+#define color_H5Tset_overflow "red"
+#define color_H5Tget_native_type "red"
+
+#define color_H5Acreate "red"
+#define color_H5Aopen_name "red"
+#define color_H5Aopen_idx "red"
+#define color_H5Awrite "red"
+#define color_H5Aread "red"
+#define color_H5Aclose "red"
+#define color_H5Aget_space "red"
+#define color_H5Aget_type "red"
+#define color_H5Aget_name "red"
+#define color_H5Aget_num_attrs "red"
+#define color_H5Aget_storage_size "red"
+#define color_H5Aiterate "red"
+#define color_H5Adelete "red"
+#define color_H5Arename "red"
+
+#define color_H5FDregister "red"
+#define color_H5FDunregister "red"
+#define color_H5FDopen "red"
+#define color_H5FDclose "red"
+#define color_H5FDcmp "red"
+#define color_H5FDquery "red"
+#define color_H5FDalloc "red"
+#define color_H5FDfree "red"
+#define color_H5FDrealloc "red"
+#define color_H5FDget_eoa "red"
+#define color_H5FDset_eoa "red"
+#define color_H5FDget_eof "red"
+#define color_H5FDget_vdf_handle "red"
+#define color_H5FDread "red"
+#define color_H5FDwrite "red"
+#define color_H5FDflush "red"
+#define color_H5FDget_vfd_handle "red"
+#define color_H5Pset_fapl_core "red"
+#define color_H5Pget_fapl_core "red"
+#define color_H5Pset_fapl_family "red"
+#define color_H5Pget_fapl_family "red"
+#define color_H5Pset_fapl_log "red"
+#define color_H5Pget_fapl_log "red"
+#define color_H5Pset_fapl_mpio "red"
+#define color_H5Pget_fapl_mpio "red"
+#define color_H5Pset_dxpl_mpio "red"
+#define color_H5Pget_dxpl_mpio "red"
+#define color_H5Pset_fapl_mpiposix "red"
+#define color_H5Pget_fapl_mpiposix "red"
+#define color_H5Pset_fapl_sec2 "red"
+#define color_H5Pget_fapl_sec2 "red"
+#define color_H5Pset_fapl_stream "red"
+#define color_H5Pget_fapl_stream "red"
+#define color_H5Pget_filter "red"
+#define color_H5Pset_btree_ratios "red"
+#define color_H5Pget_btree_ratios "red"
+#define color_H5Pset_shuffle "red"
+
+#define color_H5Pcreate_class "red"
+#define color_H5Pget_class_name "red"
+#define color_H5Pcreate "red"
+#define color_H5Pregister "red"
+#define color_H5Pinsert "red"
+#define color_H5Pset "red"
+#define color_H5Pexist "red"
+#define color_H5Pget_size "red"
+#define color_H5Pget_nprops "red"
+#define color_H5Pget_class "red"
+#define color_H5Pget_class_parent "red"
+#define color_H5Pget "red"
+#define color_H5Pequal "red"
+#define color_H5Pisa_class "red"
+#define color_H5Piterate "red"
+#define color_H5Pcopy_prop "red"
+#define color_H5Premove "red"
+#define color_H5Punregister "red"
+#define color_H5Pclose_class "red"
+#define color_H5Pclose "red"
+#define color_H5Pcopy "red"
+#define color_H5Pget_version "red"
+#define color_H5Pset_userblock "red"
+#define color_H5Pget_userblock "red"
+#define color_H5Pset_alignment "red"
+#define color_H5Pget_alignment "red"
+#define color_H5Pset_sizes "red"
+#define color_H5Pget_sizes "red"
+#define color_H5Pset_sym_k "red"
+#define color_H5Pget_sym_k "red"
+#define color_H5Pset_istore_k "red"
+#define color_H5Pget_istore_k "red"
+#define color_H5Pset_layout "red"
+#define color_H5Pget_layout "red"
+#define color_H5Pset_chunk "red"
+#define color_H5Pget_chunk "red"
+#define color_H5Pset_external "red"
+#define color_H5Pget_external_count "red"
+#define color_H5Pget_external "red"
+#define color_H5Pset_driver "red"
+#define color_H5Pget_driver "red"
+#define color_H5Pget_driver_info "red"
+#define color_H5Pset_family_offset "red"
+#define color_H5Pget_family_offset "red"
+#define color_H5Pset_multi_type "red"
+#define color_H5Pget_multi_type "red"
+#define color_H5Pset_buffer "red"
+#define color_H5Pget_buffer "red"
+#define color_H5Pset_preserve "red"
+#define color_H5Pget_preserve "red"
+#define color_H5Pall_filters_avail "red"
+#define color_H5Pset_filter "red"
+#define color_H5Pmodify_filter "red"
+#define color_H5Pget_nfilters "red"
+#define color_H5Pget_filter "red"
+#define color_H5Pget_filter_by_id "red"
+#define color_H5Premove_filter "red"
+#define color_H5Pset_deflate "red"
+#define color_H5Pset_fletcher32 "red"
+#define color_H5Pset_szip "red"
+#define color_H5Pset_cache "red"
+#define color_H5Pget_cache "red"
+#define color_H5Pset_hyper_cache "red"
+#define color_H5Pget_hyper_cache "red"
+#define color_H5Pset_htree_ratios "red"
+#define color_H5Pget_htree_ratios "red"
+#define color_H5Pset_fill_value "red"
+#define color_H5Pget_fill_value "red"
+#define color_H5Pfill_value_defined "red"
+#define color_H5Pset_alloc_time "red"
+#define color_H5Pget_alloc_time "red"
+#define color_H5Pset_fill_time "red"
+#define color_H5Pget_fill_time "red"
+#define color_H5Pset_gc_references "red"
+#define color_H5Pget_gc_references "red"
+#define color_H5Pset_fclose_degree "red"
+#define color_H5Pget_fclose_degree "red"
+#define color_H5Pset_vlen_mem_manager "red"
+#define color_H5Pget_vlen_mem_manager "red"
+#define color_H5Pset_meta_block_size "red"
+#define color_H5Pget_meta_block_size "red"
+#define color_H5Pset_sieve_buf_size "red"
+#define color_H5Pget_sieve_buf_size "red"
+#define color_H5Pset_hyper_vector_size "red"
+#define color_H5Pget_hyper_vector_size "red"
+#define color_H5Pset_small_data_block_size "red"
+#define color_H5Pget_small_data_block_size "red"
+#define color_H5Pset_edc_check "red"
+#define color_H5Pget_edc_check "red"
+#define color_H5Pset_filter_callback "red"
+
+#define color_H5Screate "red"
+#define color_H5Screate_simple "red"
+#define color_H5Sset_extent_simple "red"
+#define color_H5Scopy "red"
+#define color_H5Sclose "red"
+#define color_H5Sget_simple_extent_npoints "red"
+#define color_H5Sget_simple_extent_ndims "red"
+#define color_H5Sget_simple_extent_dims "red"
+#define color_H5Sis_simple "red"
+#define color_H5Sset_space "red"
+#define color_H5Sget_select_npoints "red"
+#define color_H5Sselect_hyperslab "red"
+#define color_H5Scombine_hyperslab "red"
+#define color_H5Sselect_select "red"
+#define color_H5Scombine_select "red"
+#define color_H5Sselect_elements "red"
+#define color_H5Sget_simple_extent_type "red"
+#define color_H5Sset_extent_none "red"
+#define color_H5Sextent_copy "red"
+#define color_H5Sselect_all "red"
+#define color_H5Sselect_none "red"
+#define color_H5Soffset_simple "red"
+#define color_H5Sselect_valid "red"
+#define color_H5Sget_select_hyper_nblocks "red"
+#define color_H5Sget_select_elem_npoints "red"
+#define color_H5Sget_select_hyper_blocklist "red"
+#define color_H5Sget_select_elem_pointlist "red"
+#define color_H5Sget_select_bounds "red"
+#define color_H5Sget_select_type "red"
+
+#define color_H5Zregister "red"
+#define color_H5Zfilter_avail "red"
+#define color_H5Zunregister "red"
+#define color_H5Zget_filter_info "red"
+
+#else
+#define MPE_LOG_VARS(func_name) /* void */
+#define BEGIN_MPE_LOG(func_name) /* void */
+#define FINISH_MPE_LOG   /* void */
+
+#endif
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5O.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5O.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5O.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,4011 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:		H5O.c
+ *			Aug  5 1997
+ *			Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:		Object header virtual functions.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+#define H5O_PACKAGE		/*suppress error about including H5Opkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5O_init_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5ACprivate.h"	/* Metadata cache			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"             /* File access				*/
+#include "H5FLprivate.h"	/* Free lists                           */
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MFprivate.h"	/* File memory management		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Opkg.h"             /* Object headers			*/
+#include "H5Pprivate.h"		/* Property lists			*/
+
+#ifdef H5_HAVE_GETTIMEOFDAY
+#include <sys/time.h>
+#endif /* H5_HAVE_GETTIMEOFDAY */
+
+/* Private typedefs */
+
+/* User data for iteration while removing a message */
+typedef struct {
+    H5F_t      *f;              /* Pointer to file for insertion */
+    hid_t dxpl_id;              /* DXPL during iteration */
+    int sequence;               /* Sequence # to search for */
+    unsigned nfailed;           /* # of failed message removals */
+    H5O_operator_t op;          /* Callback routine for removal operations */
+    void *op_data;              /* Callback data for removal operations */
+    hbool_t adj_link;           /* Whether to adjust links when removing messages */
+} H5O_iter_ud1_t;
+
+/* Typedef for "internal" iteration operations */
+typedef herr_t (*H5O_operator_int_t)(H5O_mesg_t *mesg/*in,out*/, unsigned idx,
+    unsigned * oh_flags_ptr, void *operator_data/*in,out*/);
+
+/* PRIVATE PROTOTYPES */
+static herr_t H5O_init(H5F_t *f, hid_t dxpl_id, size_t size_hint,
+                       H5G_entry_t *ent/*out*/, haddr_t header);
+static herr_t H5O_reset_real(const H5O_class_t *type, void *native);
+static herr_t H5O_free_mesg(H5O_mesg_t *mesg);
+static void * H5O_copy_real(const H5O_class_t *type, const void *mesg,
+        void *dst);
+static int H5O_count_real (H5G_entry_t *ent, const H5O_class_t *type,
+        hid_t dxpl_id);
+static htri_t H5O_exists_real(H5G_entry_t *ent, const H5O_class_t *type,
+        int sequence, hid_t dxpl_id);
+#ifdef NOT_YET
+static herr_t H5O_share(H5F_t *f, hid_t dxpl_id, const H5O_class_t *type, const void *mesg,
+			 H5HG_t *hobj/*out*/);
+#endif /* NOT_YET */
+static unsigned H5O_find_in_ohdr(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+                                 const H5O_class_t **type_p, int sequence);
+static int H5O_modify_real(H5G_entry_t *ent, const H5O_class_t *type,
+    int overwrite, unsigned flags, unsigned update_flags, const void *mesg,
+    hid_t dxpl_id);
+static int H5O_append_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh,
+    const H5O_class_t *type, unsigned flags, const void *mesg);
+static herr_t H5O_remove_real(H5G_entry_t *ent, const H5O_class_t *type,
+    int sequence, H5O_operator_t op, void *op_data, hbool_t adj_link, hid_t dxpl_id);
+static unsigned H5O_alloc(H5F_t *f, H5O_t *oh, const H5O_class_t *type,
+		      size_t size);
+static unsigned H5O_alloc_extend_chunk(H5F_t *f, H5O_t *oh, unsigned chunkno, size_t size);
+static unsigned H5O_alloc_new_chunk(H5F_t *f, H5O_t *oh, size_t size);
+static herr_t H5O_delete_oh(H5F_t *f, hid_t dxpl_id, H5O_t *oh);
+static herr_t H5O_delete_mesg(H5F_t *f, hid_t dxpl_id, H5O_mesg_t *mesg,
+    hbool_t adj_link);
+static unsigned H5O_new_mesg(H5F_t *f, H5O_t *oh, unsigned *flags,
+    const H5O_class_t *orig_type, const void *orig_mesg, H5O_shared_t *sh_mesg,
+    const H5O_class_t **new_type, const void **new_mesg, hid_t dxpl_id);
+static herr_t H5O_write_mesg(H5O_t *oh, unsigned idx, const H5O_class_t *type,
+    const void *mesg, unsigned flags, unsigned update_flags);
+static herr_t H5O_iterate_real(const H5G_entry_t *ent, const H5O_class_t *type,
+    H5AC_protect_t prot, hbool_t internal, void *op, void *op_data, hid_t dxpl_id);
+
+/* Metadata cache callbacks */
+static H5O_t *H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void *_udata1,
+		       void *_udata2);
+static herr_t H5O_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5O_t *oh);
+static herr_t H5O_dest(H5F_t *f, H5O_t *oh);
+static herr_t H5O_clear(H5F_t *f, H5O_t *oh, hbool_t destroy);
+static herr_t H5O_compute_size(const H5F_t *f, const H5O_t *oh, size_t *size_ptr);
+
+/* H5O inherits cache-like properties from H5AC */
+static const H5AC_class_t H5AC_OHDR[1] = {{
+    H5AC_OHDR_ID,
+    (H5AC_load_func_t)H5O_load,
+    (H5AC_flush_func_t)H5O_flush,
+    (H5AC_dest_func_t)H5O_dest,
+    (H5AC_clear_func_t)H5O_clear,
+    (H5AC_size_func_t)H5O_compute_size,
+}};
+
+/* ID to type mapping */
+static const H5O_class_t *const message_type_g[] = {
+    H5O_NULL,		/*0x0000 Null					*/
+    H5O_SDSPACE,	/*0x0001 Simple Dimensionality			*/
+    NULL,		/*0x0002 Data space (fiber bundle?)		*/
+    H5O_DTYPE,		/*0x0003 Data Type				*/
+    H5O_FILL,       	/*0x0004 Old data storage -- fill value         */
+    H5O_FILL_NEW,	/*0x0005 New Data storage -- fill value 	*/
+    NULL,		/*0x0006 Data storage -- compact object		*/
+    H5O_EFL,		/*0x0007 Data storage -- external data files	*/
+    H5O_LAYOUT,		/*0x0008 Data Layout				*/
+#ifdef H5O_ENABLE_BOGUS
+    H5O_BOGUS,		/*0x0009 "Bogus"				*/
+#else /* H5O_ENABLE_BOGUS */
+    NULL,		/*0x0009 "Bogus"				*/
+#endif /* H5O_ENABLE_BOGUS */
+    NULL,		/*0x000A Not assigned				*/
+    H5O_PLINE,		/*0x000B Data storage -- filter pipeline	*/
+    H5O_ATTR,		/*0x000C Attribute list				*/
+    H5O_NAME,		/*0x000D Object name				*/
+    H5O_MTIME,		/*0x000E Object modification date and time	*/
+    H5O_SHARED,		/*0x000F Shared header message			*/
+    H5O_CONT,		/*0x0010 Object header continuation		*/
+    H5O_STAB,		/*0x0011 Symbol table				*/
+    H5O_MTIME_NEW,	/*0x0012 New Object modification date and time  */
+};
+
+/*
+ * An array of functions indexed by symbol table entry cache type
+ * (H5G_type_t) that are called to retrieve constant messages cached in the
+ * symbol table entry.
+ */
+static void *(*H5O_fast_g[H5G_NCACHED]) (const H5G_cache_t *,
+					 const H5O_class_t *,
+					 void *);
+
+/* Declare a free list to manage the H5O_t struct */
+H5FL_DEFINE_STATIC(H5O_t);
+
+/* Declare a free list to manage the H5O_mesg_t sequence information */
+H5FL_SEQ_DEFINE_STATIC(H5O_mesg_t);
+
+/* Declare a free list to manage the H5O_chunk_t sequence information */
+H5FL_SEQ_DEFINE_STATIC(H5O_chunk_t);
+
+/* Declare a free list to manage the chunk image information */
+H5FL_BLK_DEFINE_STATIC(chunk_image);
+
+/* Declare external the free list for time_t's */
+H5FL_EXTERN(time_t);
+
+/* Declare extern the free list for H5O_cont_t's */
+H5FL_EXTERN(H5O_cont_t);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_init_interface
+ *
+ * Purpose:	Initialize the H5O interface.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, January  6, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_init_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_init_interface);
+
+    /*
+     * Initialize functions that decode messages from symbol table entries.
+     */
+    H5O_fast_g[H5G_CACHED_STAB] = H5O_stab_fast;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_create
+ *
+ * Purpose:	Creates a new object header. Allocates space for it and
+ *              then calls an initialization function. The object header
+ *              is opened for write access and should eventually be
+ *              closed by calling H5O_close().
+ *
+ * Return:	Success:	Non-negative, the ENT argument contains
+ *				information about the object header,
+ *				including its address.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  5 1997
+ *
+ * Modifications:
+ *
+ *      Bill Wendling, 1. November 2002
+ *      Separated the create function into two different functions. One
+ *      which allocates space and an initialization function which
+ *      does the rest of the work (initializes, caches, and opens the
+ *      object header).
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, H5G_entry_t *ent/*out*/)
+{
+    haddr_t	header;
+    herr_t      ret_value = SUCCEED;    /* return value */
+
+    FUNC_ENTER_NOAPI(H5O_create, FAIL);
+
+    /* check args */
+    assert(f);
+    assert(ent);
+
+    size_hint = H5O_ALIGN (MAX (H5O_MIN_SIZE, size_hint));
+
+    /* allocate disk space for header and first chunk */
+    if (HADDR_UNDEF == (header = H5MF_alloc(f, H5FD_MEM_OHDR, dxpl_id,
+                                            (hsize_t)H5O_SIZEOF_HDR(f) + size_hint)))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,
+                    "file allocation failed for object header header");
+
+    /* initialize the object header */
+    if (H5O_init(f, dxpl_id, size_hint, ent, header) != SUCCEED)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to initialize object header");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_init
+ *
+ * Purpose:	Initialize a new object header, sets the link count to 0,
+ *              and caches the header. The object header is opened for
+ *              write access and should eventually be closed by calling
+ *              H5O_close().
+ *
+ * Return:	Success:    SUCCEED, the ENT argument contains
+ *                          information about the object header,
+ *                          including its address.
+ *		Failure:    FAIL
+ *
+ * Programmer:	Bill Wendling
+ *		1, November 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_init(H5F_t *f, hid_t dxpl_id, size_t size_hint, H5G_entry_t *ent/*out*/, haddr_t header)
+{
+    H5O_t      *oh = NULL;
+    haddr_t     tmp_addr;
+    herr_t      ret_value = SUCCEED;    /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_init);
+
+    /* check args */
+    assert(f);
+    assert(ent);
+
+    size_hint = H5O_ALIGN(MAX(H5O_MIN_SIZE, size_hint));
+    ent->file = f;
+    ent->header = header;
+
+    /* allocate the object header and fill in header fields */
+    if (NULL == (oh = H5FL_MALLOC(H5O_t)))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+    oh->cache_info.is_dirty = TRUE;
+    oh->version = H5O_VERSION;
+    oh->nlink = 0;
+
+    /* create the chunk list and initialize the first chunk */
+    oh->nchunks = 1;
+    oh->alloc_nchunks = H5O_NCHUNKS;
+
+    if (NULL == (oh->chunk = H5FL_SEQ_MALLOC(H5O_chunk_t, (size_t)oh->alloc_nchunks)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+    tmp_addr = ent->header + (hsize_t)H5O_SIZEOF_HDR(f);
+    oh->chunk[0].dirty = TRUE;
+    oh->chunk[0].addr = tmp_addr;
+    oh->chunk[0].size = size_hint;
+
+    if (NULL == (oh->chunk[0].image = H5FL_BLK_CALLOC(chunk_image, size_hint)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+    /* create the message list and initialize the first message */
+    oh->nmesgs = 1;
+    oh->alloc_nmesgs = H5O_NMESGS;
+
+    if (NULL == (oh->mesg = H5FL_SEQ_CALLOC(H5O_mesg_t, (size_t)oh->alloc_nmesgs)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+    oh->mesg[0].type = H5O_NULL;
+    oh->mesg[0].dirty = TRUE;
+    oh->mesg[0].native = NULL;
+    oh->mesg[0].raw = oh->chunk[0].image + H5O_SIZEOF_MSGHDR(f);
+    oh->mesg[0].raw_size = size_hint - H5O_SIZEOF_MSGHDR(f);
+    oh->mesg[0].chunkno = 0;
+
+    /* cache it */
+    if (H5AC_set(f, dxpl_id, H5AC_OHDR, ent->header, oh) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to cache object header");
+
+    /* open it */
+    if (H5O_open(ent) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTOPENOBJ, FAIL, "unable to open object header");
+
+done:
+    if(ret_value<0 && oh) {
+        if(H5O_dest(f,oh)<0)
+	    HDONE_ERROR(H5E_OHDR, H5E_CANTFREE, FAIL, "unable to destroy object header data");
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_open
+ *
+ * Purpose:	Opens an object header which is described by the symbol table
+ *		entry OBJ_ENT.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, January	 5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_open(const H5G_entry_t *obj_ent)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_open, FAIL);
+
+    /* Check args */
+    assert(obj_ent);
+    assert(obj_ent->file);
+
+#ifdef H5O_DEBUG
+    if (H5DEBUG(O))
+	HDfprintf(H5DEBUG(O), "> %a\n", obj_ent->header);
+#endif
+
+    /* Increment open-lock counters */
+    obj_ent->file->nopen_objs++;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_close
+ *
+ * Purpose:	Closes an object header that was previously open.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, January	 5, 1998
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_close(H5G_entry_t *obj_ent)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_close, FAIL);
+
+    /* Check args */
+    assert(obj_ent);
+    assert(obj_ent->file);
+    assert(obj_ent->file->nopen_objs > 0);
+
+    /* Decrement open-lock counters */
+    --obj_ent->file->nopen_objs;
+
+#ifdef H5O_DEBUG
+    if (H5DEBUG(O)) {
+	if (obj_ent->file->file_id < 0 && 1==obj_ent->file->shared->nrefs) {
+	    HDfprintf(H5DEBUG(O), "< %a auto %lu remaining\n",
+		      obj_ent->header,
+		      (unsigned long)(obj_ent->file->nopen_objs));
+	} else {
+	    HDfprintf(H5DEBUG(O), "< %a\n", obj_ent->header);
+	}
+    }
+#endif
+
+    /*
+     * If the file open object count has reached the number of open mount points
+     * (each of which has a group open in the file) attempt to close the file.
+     */
+    if(obj_ent->file->nopen_objs == obj_ent->file->mtab.nmounts) {
+        /* Attempt to close down the file hierarchy */
+        if(H5F_try_close(obj_ent->file) < 0)
+            HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "problem attempting file close")
+    } /* end if */
+
+    /* Free the ID to name buffers */
+    H5G_free_ent_name(obj_ent);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_close() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_load
+ *
+ * Purpose:	Loads an object header from disk.
+ *
+ * Return:	Success:	Pointer to the new object header.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  5 1997
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 1997-08-30
+ *	Plugged memory leaks that occur during error handling.
+ *
+ *	Robb Matzke, 1998-01-07
+ *	Able to distinguish between constant and variable messages.
+ *
+ * 	Robb Matzke, 1999-07-28
+ *	The ADDR argument is passed by value.
+ *
+ *	Quincey Koziol, 2002-7-180
+ *	Added dxpl parameter to allow more control over I/O from metadata
+ *      cache.
+ *-------------------------------------------------------------------------
+ */
+static H5O_t *
+H5O_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, const void UNUSED * _udata1,
+	 void UNUSED * _udata2)
+{
+    H5O_t	*oh = NULL;
+    H5O_t	*ret_value;
+    uint8_t	buf[16], *p;
+    size_t	mesg_size;
+    size_t	hdr_size;
+    unsigned	id;
+    int	mesgno;
+    unsigned	curmesg = 0, nmesgs;
+    unsigned	chunkno;
+    haddr_t	chunk_addr;
+    size_t	chunk_size;
+    uint8_t	flags;
+
+    FUNC_ENTER_NOAPI(H5O_load, NULL);
+
+    /* check args */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(!_udata1);
+    assert(!_udata2);
+
+    /* allocate ohdr and init chunk list */
+    if (NULL==(oh = H5FL_CALLOC(H5O_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* read fixed-lenth part of object header */
+    hdr_size = H5O_SIZEOF_HDR(f);
+    assert(hdr_size<=sizeof(buf));
+    if (H5F_block_read(f, H5FD_MEM_OHDR, addr, hdr_size, dxpl_id, buf) < 0)
+	HGOTO_ERROR(H5E_OHDR, H5E_READERROR, NULL, "unable to read object header");
+    p = buf;
+
+    /* decode version */
+    oh->version = *p++;
+    if (H5O_VERSION != oh->version)
+	HGOTO_ERROR(H5E_OHDR, H5E_VERSION, NULL, "bad object header version number");
+
+    /* reserved */
+    p++;
+
+    /* decode number of messages */
+    UINT16DECODE(p, nmesgs);
+
+    /* decode link count */
+    UINT32DECODE(p, oh->nlink);
+
+    /* decode first chunk info */
+    chunk_addr = addr + (hsize_t)hdr_size;
+    UINT32DECODE(p, chunk_size);
+
+    /* build the message array */
+    oh->alloc_nmesgs = MAX(H5O_NMESGS, nmesgs);
+    if (NULL==(oh->mesg=H5FL_SEQ_CALLOC(H5O_mesg_t,(size_t)oh->alloc_nmesgs)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* read each chunk from disk */
+    while (H5F_addr_defined(chunk_addr)) {
+	/* increase chunk array size */
+	if (oh->nchunks >= oh->alloc_nchunks) {
+	    unsigned na = oh->alloc_nchunks + H5O_NCHUNKS;
+	    H5O_chunk_t *x = H5FL_SEQ_REALLOC (H5O_chunk_t, oh->chunk, (size_t)na);
+
+	    if (!x)
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+	    oh->alloc_nchunks = na;
+	    oh->chunk = x;
+	}
+
+	/* read the chunk raw data */
+	chunkno = oh->nchunks++;
+	oh->chunk[chunkno].dirty = FALSE;
+	oh->chunk[chunkno].addr = chunk_addr;
+	oh->chunk[chunkno].size = chunk_size;
+	if (NULL==(oh->chunk[chunkno].image = H5FL_BLK_MALLOC(chunk_image,chunk_size)))
+	    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+	if (H5F_block_read(f, H5FD_MEM_OHDR, chunk_addr, chunk_size, dxpl_id,
+			   oh->chunk[chunkno].image) < 0)
+	    HGOTO_ERROR(H5E_OHDR, H5E_READERROR, NULL, "unable to read object header data");
+
+	/* load messages from this chunk */
+	for (p = oh->chunk[chunkno].image; p < oh->chunk[chunkno].image + chunk_size; p += mesg_size) {
+	    UINT16DECODE(p, id);
+	    UINT16DECODE(p, mesg_size);
+	    assert (mesg_size==H5O_ALIGN (mesg_size));
+	    flags = *p++;
+	    p += 3; /*reserved*/
+
+            /* Try to detect invalidly formatted object header messages */
+	    if (p + mesg_size > oh->chunk[chunkno].image + chunk_size)
+		HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "corrupt object header");
+
+            /* Skip header messages we don't know about */
+            /* (Usually from future versions of the library */
+	    if (id >= NELMTS(message_type_g) || NULL == message_type_g[id])
+                continue;
+
+	    if (H5O_NULL_ID == id && oh->nmesgs > 0 &&
+		H5O_NULL_ID == oh->mesg[oh->nmesgs - 1].type->id &&
+		oh->mesg[oh->nmesgs - 1].chunkno == chunkno) {
+		/* combine adjacent null messages */
+		mesgno = oh->nmesgs - 1;
+		oh->mesg[mesgno].raw_size += H5O_SIZEOF_MSGHDR(f) + mesg_size;
+	    } else {
+		/* new message */
+		if (oh->nmesgs >= nmesgs)
+		    HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "corrupt object header");
+		mesgno = oh->nmesgs++;
+		oh->mesg[mesgno].type = message_type_g[id];
+		oh->mesg[mesgno].dirty = FALSE;
+		oh->mesg[mesgno].flags = flags;
+		oh->mesg[mesgno].native = NULL;
+		oh->mesg[mesgno].raw = p;
+		oh->mesg[mesgno].raw_size = mesg_size;
+		oh->mesg[mesgno].chunkno = chunkno;
+	    }
+	}
+
+        assert(p == oh->chunk[chunkno].image + chunk_size);
+
+        /* decode next object header continuation message */
+        for (chunk_addr = HADDR_UNDEF; !H5F_addr_defined(chunk_addr) && curmesg < oh->nmesgs; ++curmesg) {
+            if (H5O_CONT_ID == oh->mesg[curmesg].type->id) {
+                H5O_cont_t *cont;
+
+                cont = (H5O_CONT->decode) (f, dxpl_id, oh->mesg[curmesg].raw, NULL);
+                oh->mesg[curmesg].native = cont;
+                chunk_addr = cont->addr;
+                chunk_size = cont->size;
+                cont->chunkno = oh->nchunks;	/*the next chunk to allocate */
+            }
+        }
+    }
+
+    /* Set return value */
+    ret_value = oh;
+
+done:
+    if (!ret_value && oh) {
+        if(H5O_dest(f,oh)<0)
+	    HDONE_ERROR(H5E_OHDR, H5E_CANTFREE, NULL, "unable to destroy object header data");
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_flush
+ *
+ * Purpose:	Flushes (and destroys) an object header.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  5 1997
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 1998-01-07
+ *	Handles constant vs non-constant messages.
+ *
+ *      rky, 1998-08-28
+ *	Only p0 writes metadata to disk.
+ *
+ * 	Robb Matzke, 1999-07-28
+ *	The ADDR argument is passed by value.
+ *
+ *	Quincey Koziol, 2002-7-180
+ *	Added dxpl parameter to allow more control over I/O from metadata
+ *      cache.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5O_t *oh)
+{
+    uint8_t	buf[16], *p;
+    int	id;
+    unsigned	u;
+    H5O_mesg_t *curr_msg;       /* Pointer to current message being operated on */
+    H5O_cont_t	*cont = NULL;
+    herr_t	(*encode)(H5F_t*, uint8_t*, const void*) = NULL;
+    unsigned combine=0;        /* Whether to combine the object header prefix & the first chunk */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_flush, FAIL);
+
+    /* check args */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(oh);
+
+    /* flush */
+    if (oh->cache_info.is_dirty) {
+	p = buf;
+
+	/* encode version */
+	*p++ = oh->version;
+
+	/* reserved */
+	*p++ = 0;
+
+	/* encode number of messages */
+	UINT16ENCODE(p, oh->nmesgs);
+
+	/* encode link count */
+	UINT32ENCODE(p, oh->nlink);
+
+	/* encode body size */
+	UINT32ENCODE(p, oh->chunk[0].size);
+
+	/* zero to alignment */
+	HDmemset (p, 0, (size_t)(H5O_SIZEOF_HDR(f)-12));
+
+	/* write the object header prefix */
+
+        /* Check if we can combine the object header prefix & the first chunk into one I/O operation */
+        if(oh->chunk[0].dirty && (addr+H5O_SIZEOF_HDR(f))==oh->chunk[0].addr) {
+            combine=1;
+        } /* end if */
+        else {
+            if (H5F_block_write(f, H5FD_MEM_OHDR, addr, (size_t)H5O_SIZEOF_HDR(f),
+                        dxpl_id, buf) < 0)
+                HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to write object header hdr to disk");
+        } /* end else */
+
+	/* encode messages */
+	for (u = 0, curr_msg=&oh->mesg[0]; u < oh->nmesgs; u++,curr_msg++) {
+	    if (curr_msg->dirty) {
+                p = curr_msg->raw - H5O_SIZEOF_MSGHDR(f);
+
+                id = curr_msg->type->id;
+                UINT16ENCODE(p, id);
+                assert (curr_msg->raw_size<H5O_MAX_SIZE);
+                UINT16ENCODE(p, curr_msg->raw_size);
+                *p++ = curr_msg->flags;
+                *p++ = 0; /*reserved*/
+                *p++ = 0; /*reserved*/
+                *p++ = 0; /*reserved*/
+
+                if (curr_msg->native) {
+                    assert(curr_msg->type->encode);
+
+                    /* allocate file space for chunks that have none yet */
+                    if (H5O_CONT_ID == curr_msg->type->id &&
+                            !H5F_addr_defined(((H5O_cont_t *)(curr_msg->native))->addr)) {
+                        cont = (H5O_cont_t *) (curr_msg->native);
+                        assert(cont->chunkno < oh->nchunks);
+                        assert(!H5F_addr_defined(oh->chunk[cont->chunkno].addr));
+                        cont->size = oh->chunk[cont->chunkno].size;
+
+                        /* Free the space we'd reserved in the file to hold this chunk */
+                        H5MF_free_reserved(f, (hsize_t)cont->size);
+
+                        if (HADDR_UNDEF==(cont->addr=H5MF_alloc(f, H5FD_MEM_OHDR, dxpl_id, (hsize_t)cont->size)))
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate space for object header data");
+                        oh->chunk[cont->chunkno].addr = cont->addr;
+                    }
+
+                    /*
+                     * Encode the message.  If the message is shared then we
+                     * encode a Shared Object message instead of the object
+                     * which is being shared.
+                     */
+                    assert(curr_msg->raw >=
+                       oh->chunk[curr_msg->chunkno].image);
+                    assert (curr_msg->raw_size ==
+                        H5O_ALIGN (curr_msg->raw_size));
+                    assert(curr_msg->raw + curr_msg->raw_size <=
+                       oh->chunk[curr_msg->chunkno].image +
+                       oh->chunk[curr_msg->chunkno].size);
+                    if (curr_msg->flags & H5O_FLAG_SHARED) {
+                        encode = H5O_SHARED->encode;
+                    } else {
+                        encode = curr_msg->type->encode;
+                    }
+                    if ((encode)(f, curr_msg->raw, curr_msg->native)<0)
+                        HGOTO_ERROR(H5E_OHDR, H5E_CANTENCODE, FAIL, "unable to encode object header message");
+                }
+                curr_msg->dirty = FALSE;
+                oh->chunk[curr_msg->chunkno].dirty = TRUE;
+	    }
+	}
+
+	/* write each chunk to disk */
+	for (u = 0; u < oh->nchunks; u++) {
+	    if (oh->chunk[u].dirty) {
+                assert(H5F_addr_defined(oh->chunk[u].addr));
+                if(u==0 && combine) {
+                    /* Allocate space for the combined prefix and first chunk */
+                    if((p=H5FL_BLK_MALLOC(chunk_image,(H5O_SIZEOF_HDR(f)+oh->chunk[u].size)))==NULL)
+                        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+                    /* Copy in the prefix */
+                    HDmemcpy(p,buf,(size_t)H5O_SIZEOF_HDR(f));
+
+                    /* Copy in the first chunk */
+                    HDmemcpy(p+H5O_SIZEOF_HDR(f),oh->chunk[u].image,oh->chunk[u].size);
+
+                    /* Write the combined prefix/chunk out */
+                    if (H5F_block_write(f, H5FD_MEM_OHDR, addr,
+                                (H5O_SIZEOF_HDR(f)+oh->chunk[u].size),
+                                dxpl_id, p) < 0)
+                        HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to write object header data to disk");
+
+                    /* Release the memory for the combined prefix/chunk */
+                    p = H5FL_BLK_FREE(chunk_image,p);
+                } /* end if */
+                else {
+                    if (H5F_block_write(f, H5FD_MEM_OHDR, oh->chunk[u].addr,
+                                (oh->chunk[u].size),
+                                dxpl_id, oh->chunk[u].image) < 0)
+                        HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to write object header data to disk");
+                } /* end else */
+                oh->chunk[u].dirty = FALSE;
+	    } /* end if */
+	} /* end for */
+	oh->cache_info.is_dirty = FALSE;
+    }
+
+    if (destroy) {
+        if(H5O_dest(f,oh)<0)
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTFREE, FAIL, "unable to destroy object header data");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_dest
+ *
+ * Purpose:	Destroys an object header.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Jan 15 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_dest(H5F_t UNUSED *f, H5O_t *oh)
+{
+    unsigned	i;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_dest);
+
+    /* check args */
+    assert(oh);
+
+    /* Verify that node is clean */
+    assert (oh->cache_info.is_dirty==FALSE);
+
+    /* destroy chunks */
+    for (i = 0; i < oh->nchunks; i++) {
+        /* Verify that chunk is clean */
+        assert (oh->chunk[i].dirty==0);
+
+        oh->chunk[i].image = H5FL_BLK_FREE(chunk_image,oh->chunk[i].image);
+    }
+    if(oh->chunk)
+        oh->chunk = H5FL_SEQ_FREE(H5O_chunk_t,oh->chunk);
+
+    /* destroy messages */
+    for (i = 0; i < oh->nmesgs; i++) {
+        /* Verify that message is clean */
+        assert (oh->mesg[i].dirty==0);
+
+        H5O_free_mesg(&oh->mesg[i]);
+    }
+    if(oh->mesg)
+        oh->mesg = H5FL_SEQ_FREE(H5O_mesg_t,oh->mesg);
+
+    /* destroy object header */
+    H5FL_FREE(H5O_t,oh);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5O_dest() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_clear
+ *
+ * Purpose:	Mark a object header in memory as non-dirty.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Mar 20 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_clear(H5F_t *f, H5O_t *oh, hbool_t destroy)
+{
+    unsigned	u;      /* Local index variable */
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_clear);
+
+    /* check args */
+    assert(oh);
+
+    /* Mark chunks as clean */
+    for (u = 0; u < oh->nchunks; u++)
+        oh->chunk[u].dirty=FALSE;
+
+    /* Mark messages as clean */
+    for (u = 0; u < oh->nmesgs; u++)
+        oh->mesg[u].dirty=FALSE;
+
+    /* Mark whole header as clean */
+    oh->cache_info.is_dirty=FALSE;
+
+    if (destroy)
+        if (H5O_dest(f, oh) < 0)
+            HGOTO_ERROR(H5E_OHDR, H5E_CANTFREE, FAIL, "unable to destroy object header data");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_clear() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_compute_size
+ *
+ * Purpose:	Compute the size in bytes of the specified instance of
+ *              H5O_t on disk, and return it in *len_ptr.  On failure,
+ *              the value of *len_ptr is undefined.
+ *
+ *		The value returned will probably be low unless the object
+ *		has just been flushed, as we simply total up the size of
+ *		the header with the sizes of the chunks.  Thus any message
+ *		that has been added since the last flush will not be
+ *		reflected in the total.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	John Mainzer
+ *		5/13/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_compute_size(const H5F_t *f, const H5O_t *oh, size_t *size_ptr)
+{
+    unsigned	u;
+    size_t	size;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_compute_size);
+
+    /* check args */
+    HDassert(f);
+    HDassert(oh);
+    HDassert(size_ptr);
+
+    size = H5O_SIZEOF_HDR(f);
+
+    for (u = 0; u < oh->nchunks; u++)
+        size += oh->chunk[u].size;
+
+    HDassert(size >= H5O_SIZEOF_HDR(f));
+
+    *size_ptr = size;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* H5O_compute_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_reset
+ *
+ * Purpose:	Some message data structures have internal fields that
+ *		need to be freed.  This function does that if appropriate
+ *		but doesn't free NATIVE.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug 12 1997
+ *
+ * Modifications:
+ *              Changed to use IDs for types, instead of type objects, then
+ *              call "real" routine.
+ *              Quincey Koziol
+ *		Feb 14 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_reset(unsigned type_id, void *native)
+{
+    const H5O_class_t *type;            /* Actual H5O class type for the ID */
+    herr_t      ret_value;              /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_reset,FAIL);
+
+    /* check args */
+    assert(type_id<NELMTS(message_type_g));
+    type=message_type_g[type_id];    /* map the type ID to the actual type object */
+    assert(type);
+
+    /* Call the "real" reset routine */
+    if((ret_value=H5O_reset_real(type, native))<0)
+	HGOTO_ERROR(H5E_OHDR, H5E_READERROR, FAIL, "unable to reset object header");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_reset() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_reset_real
+ *
+ * Purpose:	Some message data structures have internal fields that
+ *		need to be freed.  This function does that if appropriate
+ *		but doesn't free NATIVE.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug 12 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_reset_real(const H5O_class_t *type, void *native)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_reset_real);
+
+    /* check args */
+    assert(type);
+
+    if (native) {
+	if (type->reset) {
+	    if ((type->reset) (native) < 0)
+		HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "reset method failed");
+	} else {
+	    HDmemset(native, 0, type->native_size);
+	}
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_reset_real() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_free
+ *
+ * Purpose:	Similar to H5O_reset() except it also frees the message
+ *		pointer.
+ *
+ * Return:	Success:	NULL
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 21, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5O_free (unsigned type_id, void *mesg)
+{
+    const H5O_class_t *type;            /* Actual H5O class type for the ID */
+    void * ret_value;                   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_free, NULL);
+
+    /* check args */
+    assert(type_id<NELMTS(message_type_g));
+    type=message_type_g[type_id];    /* map the type ID to the actual type object */
+    assert(type);
+
+    /* Call the "real" free routine */
+    ret_value=H5O_free_real(type, mesg);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_free_mesg
+ *
+ * Purpose:	Call H5O_free_real() on a message.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, Sep  6, 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_free_mesg(H5O_mesg_t *mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_free_mesg)
+
+    /* check args */
+    HDassert(mesg);
+
+    /* Free any native information */
+    if(mesg->flags & H5O_FLAG_SHARED)
+        mesg->native = H5O_free_real(H5O_SHARED, mesg->native);
+    else
+        mesg->native = H5O_free_real(mesg->type, mesg->native);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5O_free_mesg() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_free_real
+ *
+ * Purpose:	Similar to H5O_reset() except it also frees the message
+ *		pointer.
+ *
+ * Return:	Success:	NULL
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 21, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5O_free_real(const H5O_class_t *type, void *msg_native)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_free_real)
+
+    /* check args */
+    assert(type);
+
+    if (msg_native) {
+        H5O_reset_real(type, msg_native);
+        if (NULL!=(type->free))
+            (type->free)(msg_native);
+        else
+            H5MM_xfree (msg_native);
+    }
+
+    FUNC_LEAVE_NOAPI(NULL)
+} /* end H5O_free_real() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_copy
+ *
+ * Purpose:	Copies a message.  If MESG is is the null pointer then a null
+ *		pointer is returned with no error.
+ *
+ * Return:	Success:	Ptr to the new message
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 21, 1998
+ *
+ * Modifications:
+ *              Changed to use IDs for types, instead of type objects, then
+ *              call "real" routine.
+ *              Quincey Koziol
+ *		Feb 14 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5O_copy (unsigned type_id, const void *mesg, void *dst)
+{
+    const H5O_class_t *type;            /* Actual H5O class type for the ID */
+    void	*ret_value;             /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_copy, NULL);
+
+    /* check args */
+    assert(type_id<NELMTS(message_type_g));
+    type=message_type_g[type_id];    /* map the type ID to the actual type object */
+    assert(type);
+
+    /* Call the "real" copy routine */
+    if((ret_value=H5O_copy_real(type, mesg, dst))==NULL)
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "unable to copy object header message");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_copy() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_copy_real
+ *
+ * Purpose:	Copies a message.  If MESG is is the null pointer then a null
+ *		pointer is returned with no error.
+ *
+ * Return:	Success:	Ptr to the new message
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 21, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_copy_real (const H5O_class_t *type, const void *mesg, void *dst)
+{
+    void	*ret_value = NULL;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_copy_real);
+
+    /* check args */
+    assert (type);
+    assert (type->copy);
+
+    if (mesg) {
+	if (NULL==(ret_value=(type->copy)(mesg, dst, 0)))
+	    HGOTO_ERROR (H5E_OHDR, H5E_CANTINIT, NULL, "unable to copy object header message");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_copy_real() */
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_link
+ *
+ * Purpose:	Adjust the link count for an object header by adding
+ *		ADJUST to the link count.
+ *
+ * Return:	Success:	New link count
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  5 1997
+ *
+ * Modifications:
+ *
+ * 	Robb Matzke, 1998-08-27
+ *	This function can also be used to obtain the current number of links
+ *	if zero is passed for ADJUST.  If that's the case then we don't check
+ *	for write access on the file.
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5O_link(const H5G_entry_t *ent, int adjust, hid_t dxpl_id)
+{
+    H5O_t	*oh = NULL;
+    hbool_t deleted=FALSE;      /* Whether the object was deleted as a result of this action */
+    int	ret_value = FAIL;
+
+    FUNC_ENTER_NOAPI(H5O_link, FAIL);
+
+    /* check args */
+    assert(ent);
+    assert(ent->file);
+    assert(H5F_addr_defined(ent->header));
+    if (adjust!=0 && 0==(ent->file->intent & H5F_ACC_RDWR))
+	HGOTO_ERROR (H5E_OHDR, H5E_WRITEERROR, FAIL, "no write intent on file");
+
+    /* get header */
+    if (NULL == (oh = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header,
+				   NULL, NULL, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
+
+    /* adjust link count */
+    if (adjust<0) {
+	if (oh->nlink + adjust < 0)
+	    HGOTO_ERROR(H5E_OHDR, H5E_LINKCOUNT, FAIL, "link count would be negative");
+	oh->nlink += adjust;
+	oh->cache_info.is_dirty = TRUE;
+
+        /* Check if the object should be deleted */
+        if(oh->nlink==0) {
+            /* Check if the object is still open by the user */
+            if(H5FO_opened(ent->file,ent->header)!=NULL) {
+                /* Flag the object to be deleted when it's closed */
+                if(H5FO_mark(ent->file,ent->header,TRUE)<0)
+                    HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, FAIL, "can't mark object for deletion");
+            } /* end if */
+            else {
+                /* Delete object right now */
+                if(H5O_delete_oh(ent->file,dxpl_id,oh)<0)
+                    HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, FAIL, "can't delete object from file");
+
+                /* Mark the object header as deleted */
+                deleted=TRUE;
+            } /* end else */
+        } /* end if */
+    } else if (adjust>0) {
+        /* A new object, or one that will be deleted */
+        if(oh->nlink==0) {
+            /* Check if the object is current open, but marked for deletion */
+            if(H5FO_marked(ent->file,ent->header)>0) {
+                /* Remove "delete me" flag on the object */
+                if(H5FO_mark(ent->file,ent->header,FALSE)<0)
+                    HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, FAIL, "can't mark object for deletion");
+            } /* end if */
+        } /* end if */
+
+	oh->nlink += adjust;
+	oh->cache_info.is_dirty = TRUE;
+    }
+
+    /* Set return value */
+    ret_value = oh->nlink;
+
+done:
+    if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, deleted) < 0)
+	HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_count
+ *
+ * Purpose:	Counts the number of messages in an object header which are a
+ *		certain type.
+ *
+ * Return:	Success:	Number of messages of specified type.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, April 21, 1998
+ *
+ * Modifications:
+ *              Changed to use IDs for types, instead of type objects, then
+ *              call "real" routine.
+ *              Quincey Koziol
+ *		Feb 14 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5O_count (H5G_entry_t *ent, unsigned type_id, hid_t dxpl_id)
+{
+    const H5O_class_t *type;            /* Actual H5O class type for the ID */
+    int	ret_value;                      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_count, FAIL);
+
+    /* Check args */
+    assert (ent);
+    assert (ent->file);
+    assert (H5F_addr_defined(ent->header));
+    assert(type_id<NELMTS(message_type_g));
+    type=message_type_g[type_id];    /* map the type ID to the actual type object */
+    assert (type);
+
+    /* Call the "real" count routine */
+    if((ret_value=H5O_count_real(ent, type, dxpl_id))<0)
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTCOUNT, FAIL, "unable to count object header messages");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_count() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_count_real
+ *
+ * Purpose:	Counts the number of messages in an object header which are a
+ *		certain type.
+ *
+ * Return:	Success:	Number of messages of specified type.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, April 21, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5O_count_real (H5G_entry_t *ent, const H5O_class_t *type, hid_t dxpl_id)
+{
+    H5O_t	*oh = NULL;
+    int	acc;
+    unsigned	u;
+    int	ret_value;
+
+    FUNC_ENTER_NOAPI(H5O_count_real, FAIL);
+
+    /* Check args */
+    assert (ent);
+    assert (ent->file);
+    assert (H5F_addr_defined(ent->header));
+    assert (type);
+
+    /* Load the object header */
+    if (NULL == (oh = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL, H5AC_READ)))
+	HGOTO_ERROR (H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
+
+    /* Loop over all messages, counting the ones of the type looked for */
+    for (u=acc=0; u<oh->nmesgs; u++)
+	if (oh->mesg[u].type==type)
+            acc++;
+
+    /* Set return value */
+    ret_value=acc;
+
+done:
+    if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) != SUCCEED)
+	HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_count_real() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_exists
+ *
+ * Purpose:	Determines if a particular message exists in an object
+ *		header without trying to decode the message.
+ *
+ * Return:	Success:	FALSE if the message does not exist; TRUE if
+ *				th message exists.
+ *
+ *		Failure:	FAIL if the existence of the message could
+ *				not be determined due to some error such as
+ *				not being able to read the object header.
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November  2, 1998
+ *
+ * Modifications:
+ *              Changed to use IDs for types, instead of type objects, then
+ *              call "real" routine.
+ *              Quincey Koziol
+ *		Feb 14 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5O_exists(H5G_entry_t *ent, unsigned type_id, int sequence, hid_t dxpl_id)
+{
+    const H5O_class_t *type;            /* Actual H5O class type for the ID */
+    htri_t      ret_value;              /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_exists, FAIL);
+
+    assert(ent);
+    assert(ent->file);
+    assert(type_id<NELMTS(message_type_g));
+    type=message_type_g[type_id];    /* map the type ID to the actual type object */
+    assert(type);
+    assert(sequence>=0);
+
+    /* Call the "real" exists routine */
+    if((ret_value=H5O_exists_real(ent, type, sequence, dxpl_id))<0)
+	HGOTO_ERROR(H5E_OHDR, H5E_READERROR, FAIL, "unable to verify object header message");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_exists() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_exists_real
+ *
+ * Purpose:	Determines if a particular message exists in an object
+ *		header without trying to decode the message.
+ *
+ * Return:	Success:	FALSE if the message does not exist; TRUE if
+ *				th message exists.
+ *
+ *		Failure:	FAIL if the existence of the message could
+ *				not be determined due to some error such as
+ *				not being able to read the object header.
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November  2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static htri_t
+H5O_exists_real(H5G_entry_t *ent, const H5O_class_t *type, int sequence, hid_t dxpl_id)
+{
+    H5O_t	*oh=NULL;
+    unsigned	u;
+    htri_t      ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_exists_real);
+
+    assert(ent);
+    assert(ent->file);
+    assert(type);
+    assert(sequence>=0);
+
+    /* Load the object header */
+    if (NULL == (oh = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL, H5AC_READ)))
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
+
+    /* Scan through the messages looking for the right one */
+    for (u=0; u<oh->nmesgs; u++) {
+	if (type->id!=oh->mesg[u].type->id)
+            continue;
+	if (--sequence<0)
+            break;
+    }
+
+    /* Set return value */
+    ret_value=(sequence<0);
+
+done:
+    if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) != SUCCEED)
+	HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_exists_real() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_read
+ *
+ * Purpose:	Reads a message from an object header and returns a pointer
+ *		to it.	The caller will usually supply the memory through
+ *		MESG and the return value will be MESG.	 But if MESG is
+ *		the null pointer, then this function will malloc() memory
+ *		to hold the result and return its pointer instead.
+ *
+ * Return:	Success:	Ptr to message in native format.  The message
+ *				should be freed by calling H5O_reset().  If
+ *				MESG is a null pointer then the caller should
+ *				also call H5MM_xfree() on the return value
+ *				after calling H5O_reset().
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  6 1997
+ *
+ * Modifications:
+ *              Changed to use IDs for types, instead of type objects, then
+ *              call "real" routine.
+ *              Quincey Koziol
+ *		Feb 14 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5O_read(const H5G_entry_t *ent, unsigned type_id, int sequence, void *mesg, hid_t dxpl_id)
+{
+    const H5O_class_t *type;            /* Actual H5O class type for the ID */
+    void *ret_value;                    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_read, NULL);
+
+    /* check args */
+    assert(ent);
+    assert(ent->file);
+    assert(H5F_addr_defined(ent->header));
+    assert(type_id<NELMTS(message_type_g));
+    type=message_type_g[type_id];    /* map the type ID to the actual type object */
+    assert(type);
+    assert(sequence >= 0);
+
+    /* Call the "real" read routine */
+    if((ret_value=H5O_read_real(ent, type, sequence, mesg, dxpl_id))==NULL)
+	HGOTO_ERROR(H5E_OHDR, H5E_READERROR, NULL, "unable to load object header");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_read() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_read_real
+ *
+ * Purpose:	Reads a message from an object header and returns a pointer
+ *		to it.	The caller will usually supply the memory through
+ *		MESG and the return value will be MESG.	 But if MESG is
+ *		the null pointer, then this function will malloc() memory
+ *		to hold the result and return its pointer instead.
+ *
+ * Return:	Success:	Ptr to message in native format.  The message
+ *				should be freed by calling H5O_reset().  If
+ *				MESG is a null pointer then the caller should
+ *				also call H5MM_xfree() on the return value
+ *				after calling H5O_reset().
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  6 1997
+ *
+ * Modifications:
+ *      Bill Wendling, 2003-09-30
+ *      Protect the object header and pass it into the H5O_find_in_ohdr
+ *      function. This is done because the H5O_find_in_ohdr used to
+ *      protect the ohdr, find the message, and then unprotect it. This
+ *      saves time and also helps the FPHDF5 stuff, where unprotecting
+ *      actually destroys the object in the cache.
+ *-------------------------------------------------------------------------
+ */
+void *
+H5O_read_real(const H5G_entry_t *ent, const H5O_class_t *type, int sequence, void *mesg, hid_t dxpl_id)
+{
+    H5O_t          *oh = NULL;
+    int             idx;
+    const H5G_cache_t    *cache = NULL;
+    H5G_type_t      cache_type;
+    void           *ret_value = NULL;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_read_real);
+
+    /* check args */
+    assert(ent);
+    assert(ent->file);
+    assert(H5F_addr_defined(ent->header));
+    assert(type);
+    assert(sequence >= 0);
+
+    /* can we get it from the symbol table entry? */
+    cache = H5G_ent_cache(ent, &cache_type);
+
+    if (H5O_fast_g[cache_type]) {
+	ret_value = (H5O_fast_g[cache_type]) (cache, type, mesg);
+	if (ret_value)
+	    HGOTO_DONE(ret_value);
+	H5E_clear(); /*don't care, try reading from header */
+    }
+
+    /* copy the message to the user-supplied buffer */
+    if (NULL == (oh = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL, H5AC_READ)))
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "unable to load object header");
+
+    /* can we get it from the object header? */
+    if ((idx = H5O_find_in_ohdr(ent->file, dxpl_id, oh, &type, sequence)) < 0)
+	HGOTO_ERROR(H5E_OHDR, H5E_NOTFOUND, NULL, "unable to find message in object header");
+
+    if (oh->mesg[idx].flags & H5O_FLAG_SHARED) {
+	/*
+	 * If the message is shared then then the native pointer points to an
+	 * H5O_SHARED message.  We use that information to look up the real
+	 * message in the global heap or some other object header.
+	 */
+	H5O_shared_t *shared;
+
+	shared = (H5O_shared_t *)(oh->mesg[idx].native);
+        ret_value=H5O_shared_read(ent->file,dxpl_id,shared,type,mesg);
+    } else {
+	/*
+	 * The message is not shared, but rather exists in the object
+	 * header.  The object header caches the native message (along with
+	 * the raw message) so we must copy the native message before
+	 * returning.
+	 */
+	if (NULL==(ret_value = (type->copy) (oh->mesg[idx].native, mesg, 0)))
+	    HGOTO_ERROR (H5E_OHDR, H5E_CANTINIT, NULL, "unable to copy message to user space");
+    }
+
+done:
+    if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) < 0)
+	HDONE_ERROR(H5E_OHDR, H5E_PROTECT, NULL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_read_real() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_find_in_ohdr
+ *
+ * Purpose:     Find a message in the object header without consulting
+ *              a symbol table entry.
+ *
+ * Return:      Success:    Index number of message.
+ *              Failure:    Negative
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug  6 1997
+ *
+ * Modifications:
+ *      Robb Matzke, 1999-07-28
+ *      The ADDR argument is passed by value.
+ *
+ *      Bill Wendling, 2003-09-30
+ *      Modified so that the object header needs to be AC_protected
+ *      before calling this function.
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+H5O_find_in_ohdr(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_class_t **type_p, int sequence)
+{
+    unsigned		u;
+    const H5O_class_t	*type = NULL;
+    unsigned		ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_find_in_ohdr);
+
+    /* Check args */
+    assert(f);
+    assert(oh);
+    assert(type_p);
+
+    /* Scan through the messages looking for the right one */
+    for (u = 0; u < oh->nmesgs; u++) {
+	if (*type_p && (*type_p)->id != oh->mesg[u].type->id)
+            continue;
+	if (--sequence < 0)
+            break;
+    }
+
+    if (sequence >= 0)
+	HGOTO_ERROR(H5E_OHDR, H5E_NOTFOUND, UFAIL, "unable to find object header message");
+
+    /*
+     * Decode the message if necessary.  If the message is shared then decode
+     * a shared message, ignoring the message type.
+     */
+    if (oh->mesg[u].flags & H5O_FLAG_SHARED)
+	type = H5O_SHARED;
+    else
+	type = oh->mesg[u].type;
+
+    if (NULL == oh->mesg[u].native) {
+	assert(type->decode);
+	oh->mesg[u].native = (type->decode) (f, dxpl_id, oh->mesg[u].raw, NULL);
+	if (NULL == oh->mesg[u].native)
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, UFAIL, "unable to decode message");
+    }
+
+    /*
+     * Return the message type. If this is a shared message then return the
+     * pointed-to type.
+     */
+    *type_p = oh->mesg[u].type;
+
+    /* Set return value */
+    ret_value=u;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_modify
+ *
+ * Purpose:	Modifies an existing message or creates a new message.
+ *		The cache fields in that symbol table entry ENT are *not*
+ *		updated, you must do that separately because they often
+ *		depend on multiple object header messages.  Besides, we
+ *		don't know which messages will be constant and which will
+ *		not.
+ *
+ *		The OVERWRITE argument is either a sequence number of a
+ *		message to overwrite (usually zero) or the constant
+ *		H5O_NEW_MESG (-1) to indicate that a new message is to
+ *		be created.  If the message to overwrite doesn't exist then
+ *		it is created (but only if it can be inserted so its sequence
+ *		number is OVERWRITE; that is, you can create a message with
+ *		the sequence number 5 if there is no message with sequence
+ *		number 4).
+ *
+ *              The UPDATE_TIME argument is a boolean that allows the caller
+ *              to skip updating the modification time.  This is useful when
+ *              several calls to H5O_modify will be made in a sequence.
+ *
+ * Return:	Success:	The sequence number of the message that
+ *				was modified or created.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  6 1997
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 7 Jan 1998
+ *	Handles constant vs non-constant messages.  Once a message is made
+ *	constant it can never become non-constant.  Constant messages cannot
+ *	be modified.
+ *
+ *      Changed to use IDs for types, instead of type objects, then
+ *      call "real" routine.
+ *      Quincey Koziol
+ *	Feb 14 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5O_modify(H5G_entry_t *ent, unsigned type_id, int overwrite,
+   unsigned flags, unsigned update_flags, const void *mesg, hid_t dxpl_id)
+{
+    const H5O_class_t *type;            /* Actual H5O class type for the ID */
+    int	ret_value;              /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_modify, FAIL);
+
+    /* check args */
+    assert(ent);
+    assert(ent->file);
+    assert(H5F_addr_defined(ent->header));
+    assert(type_id<NELMTS(message_type_g));
+    type=message_type_g[type_id];    /* map the type ID to the actual type object */
+    assert(type);
+    assert(mesg);
+    assert (0==(flags & ~H5O_FLAG_BITS));
+
+    /* Call the "real" modify routine */
+    if((ret_value= H5O_modify_real(ent, type, overwrite, flags, update_flags, mesg, dxpl_id))<0)
+	HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to write object header");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_modify() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_modify_real
+ *
+ * Purpose:	Modifies an existing message or creates a new message.
+ *		The cache fields in that symbol table entry ENT are *not*
+ *		updated, you must do that separately because they often
+ *		depend on multiple object header messages.  Besides, we
+ *		don't know which messages will be constant and which will
+ *		not.
+ *
+ *		The OVERWRITE argument is either a sequence number of a
+ *		message to overwrite (usually zero) or the constant
+ *		H5O_NEW_MESG (-1) to indicate that a new message is to
+ *		be created.  If the message to overwrite doesn't exist then
+ *		it is created (but only if it can be inserted so its sequence
+ *		number is OVERWRITE; that is, you can create a message with
+ *		the sequence number 5 if there is no message with sequence
+ *		number 4).
+ *
+ *              The UPDATE_TIME argument is a boolean that allows the caller
+ *              to skip updating the modification time.  This is useful when
+ *              several calls to H5O_modify will be made in a sequence.
+ *
+ * Return:	Success:	The sequence number of the message that
+ *				was modified or created.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  6 1997
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 7 Jan 1998
+ *	Handles constant vs non-constant messages.  Once a message is made
+ *	constant it can never become non-constant.  Constant messages cannot
+ *	be modified.
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5O_modify_real(H5G_entry_t *ent, const H5O_class_t *type, int overwrite,
+   unsigned flags, unsigned update_flags, const void *mesg, hid_t dxpl_id)
+{
+    H5O_t		*oh=NULL;
+    int		        sequence;
+    unsigned		idx;            /* Index of message to modify */
+    H5O_mesg_t         *idx_msg;        /* Pointer to message to modify */
+    H5O_shared_t	sh_mesg;
+    int		        ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_modify_real)
+
+    /* check args */
+    assert(ent);
+    assert(ent->file);
+    assert(H5F_addr_defined(ent->header));
+    assert(type);
+    assert(mesg);
+    assert (0==(flags & ~H5O_FLAG_BITS));
+
+    if (0==(ent->file->intent & H5F_ACC_RDWR))
+	HGOTO_ERROR (H5E_OHDR, H5E_WRITEERROR, FAIL, "no write intent on file");
+
+    if (NULL == (oh = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
+
+    /* Count similar messages */
+    for (idx = 0, sequence = -1, idx_msg=&oh->mesg[0]; idx < oh->nmesgs; idx++, idx_msg++) {
+	if (type->id != idx_msg->type->id)
+            continue;
+	if (++sequence == overwrite)
+            break;
+    } /* end for */
+
+    /* Was the right message found? */
+    if (overwrite >= 0 && (idx >= oh->nmesgs || sequence != overwrite)) {
+	/* But can we insert a new one with this sequence number? */
+	if (overwrite == sequence + 1)
+	    overwrite = -1;
+	else
+	    HGOTO_ERROR(H5E_OHDR, H5E_NOTFOUND, FAIL, "message not found");
+    } /* end if */
+
+    /* Check for creating new message */
+    if (overwrite < 0) {
+        /* Create a new message */
+        if((idx=H5O_new_mesg(ent->file,oh,&flags,type,mesg,&sh_mesg,&type,&mesg,dxpl_id))==UFAIL)
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to create new message");
+
+        /* Set the correct sequence number for the message created */
+	sequence++;
+
+    } else if (oh->mesg[idx].flags & H5O_FLAG_CONSTANT) {
+	HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to modify constant message");
+    } else if (oh->mesg[idx].flags & H5O_FLAG_SHARED) {
+	HGOTO_ERROR (H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to modify shared (constant) message");
+    }
+
+    /* Write the information to the message */
+    if(H5O_write_mesg(oh,idx,type,mesg,flags,update_flags)<0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to write message");
+
+    /* Update the modification time message if any */
+    if(update_flags&H5O_UPDATE_TIME)
+        H5O_touch_oh(ent->file, oh, FALSE);
+
+    /* Set return value */
+    ret_value = sequence;
+
+done:
+    if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) < 0)
+	HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_modify_real() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_protect
+ *
+ * Purpose:	Wrapper around H5AC_protect for use during a H5O_protect->
+ *              H5O_append->...->H5O_append->H5O_unprotect sequence of calls
+ *              during an object's creation.
+ *
+ * Return:	Success:	Pointer to the object header structure for the
+ *                              object.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Dec 31 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5O_t *
+H5O_protect(H5G_entry_t *ent, hid_t dxpl_id)
+{
+    H5O_t	       *ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_protect, NULL);
+
+    /* check args */
+    assert(ent);
+    assert(ent->file);
+    assert(H5F_addr_defined(ent->header));
+
+    if (0==(ent->file->intent & H5F_ACC_RDWR))
+	HGOTO_ERROR (H5E_OHDR, H5E_WRITEERROR, NULL, "no write intent on file");
+
+    if (NULL == (ret_value = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "unable to load object header");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_protect() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_unprotect
+ *
+ * Purpose:	Wrapper around H5AC_unprotect for use during a H5O_protect->
+ *              H5O_append->...->H5O_append->H5O_unprotect sequence of calls
+ *              during an object's creation.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Dec 31 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_unprotect(H5G_entry_t *ent, H5O_t *oh, hid_t dxpl_id)
+{
+    herr_t ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_unprotect, FAIL);
+
+    /* check args */
+    assert(ent);
+    assert(ent->file);
+    assert(H5F_addr_defined(ent->header));
+    assert(oh);
+
+    if (H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) < 0)
+	HGOTO_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_unprotect() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_append
+ *
+ * Purpose:	Simplified version of H5O_modify, used when creating a new
+ *              object header message (usually during object creation)
+ *
+ * Return:	Success:	The sequence number of the message that
+ *				was created.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Dec 31 2002
+ *
+ * Modifications:
+ *              Changed to use IDs for types, instead of type objects, then
+ *              call "real" routine.
+ *              Quincey Koziol
+ *		Feb 14 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5O_append(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned type_id, unsigned flags,
+    const void *mesg)
+{
+    const H5O_class_t *type;            /* Actual H5O class type for the ID */
+    int	ret_value;                      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_append,FAIL);
+
+    /* check args */
+    assert(f);
+    assert(oh);
+    assert(type_id<NELMTS(message_type_g));
+    type=message_type_g[type_id];    /* map the type ID to the actual type object */
+    assert(type);
+    assert(0==(flags & ~H5O_FLAG_BITS));
+    assert(mesg);
+
+    /* Call the "real" append routine */
+    if((ret_value=H5O_append_real( f, dxpl_id, oh, type, flags, mesg))<0)
+	HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to append to object header");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_append() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_append_real
+ *
+ * Purpose:	Simplified version of H5O_modify, used when creating a new
+ *              object header message (usually during object creation)
+ *
+ * Return:	Success:	The sequence number of the message that
+ *				was created.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Dec 31 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5O_append_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_class_t *type,
+    unsigned flags, const void *mesg)
+{
+    unsigned		idx;            /* Index of message to modify */
+    H5O_shared_t	sh_mesg;
+    int		        ret_value = FAIL;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_append_real);
+
+    /* check args */
+    assert(f);
+    assert(oh);
+    assert(type);
+    assert(0==(flags & ~H5O_FLAG_BITS));
+    assert(mesg);
+
+    /* Create a new message */
+    if((idx=H5O_new_mesg(f,oh,&flags,type,mesg,&sh_mesg,&type,&mesg,dxpl_id))==UFAIL)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to create new message");
+
+    /* Write the information to the message */
+    if(H5O_write_mesg(oh,idx,type,mesg,flags,0)<0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to write message");
+
+    /* Set return value */
+    ret_value = idx;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_append_real () */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_new_mesg
+ *
+ * Purpose:	Create a new message in an object header
+ *
+ * Return:	Success:	Index of message
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, September  3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+H5O_new_mesg(H5F_t *f, H5O_t *oh, unsigned *flags, const H5O_class_t *orig_type,
+    const void *orig_mesg, H5O_shared_t *sh_mesg, const H5O_class_t **new_type,
+    const void **new_mesg, hid_t dxpl_id)
+{
+    size_t	size;                   /* Size of space allocated for object header */
+    unsigned    ret_value=UFAIL;        /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_new_mesg);
+
+    /* check args */
+    assert(f);
+    assert(oh);
+    assert(flags);
+    assert(orig_type);
+    assert(orig_mesg);
+    assert(sh_mesg);
+    assert(new_mesg);
+    assert(new_type);
+
+    /* Check for shared message */
+    if (*flags & H5O_FLAG_SHARED) {
+        HDmemset(sh_mesg,0,sizeof(H5O_shared_t));
+
+        if (NULL==orig_type->get_share)
+            HGOTO_ERROR (H5E_OHDR, H5E_UNSUPPORTED, UFAIL, "message class is not sharable");
+        if ((orig_type->get_share)(f, orig_mesg, sh_mesg/*out*/)<0) {
+            /*
+             * If the message isn't shared then turn off the shared bit
+             * and treat it as an unshared message.
+             */
+            H5E_clear ();
+            *flags &= ~H5O_FLAG_SHARED;
+        } else {
+            /* Change type & message to use shared information */
+            *new_type=H5O_SHARED;
+            *new_mesg=sh_mesg;
+        } /* end else */
+    } /* end if */
+    else {
+        *new_type=orig_type;
+        *new_mesg=orig_mesg;
+    } /* end else */
+
+    /* Compute the size needed to store the message on disk */
+    if ((size = ((*new_type)->raw_size) (f, *new_mesg)) >=H5O_MAX_SIZE)
+        HGOTO_ERROR (H5E_OHDR, H5E_CANTINIT, UFAIL, "object header message is too large (16k max)");
+
+    /* Allocate space in the object headed for the message */
+    if ((ret_value = H5O_alloc(f, oh, orig_type, size)) == UFAIL)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, UFAIL, "unable to allocate space for message");
+
+    /* Increment any links in message */
+    if((*new_type)->link && ((*new_type)->link)(f,dxpl_id,(*new_mesg))<0)
+        HGOTO_ERROR (H5E_OHDR, H5E_LINK, UFAIL, "unable to adjust shared object link count");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_new_mesg() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_write_mesg
+ *
+ * Purpose:	Write message to object header
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, September  3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_write_mesg(H5O_t *oh, unsigned idx, const H5O_class_t *type,
+    const void *mesg, unsigned flags, unsigned update_flags)
+{
+    H5O_mesg_t         *idx_msg;        /* Pointer to message to modify */
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_write_mesg);
+
+    /* check args */
+    assert(oh);
+    assert(type);
+    assert(mesg);
+
+    /* Set pointer to the correct message */
+    idx_msg=&oh->mesg[idx];
+
+    /* Reset existing native information */
+    if(!(update_flags&H5O_UPDATE_DATA_ONLY))
+        H5O_reset_real(type, idx_msg->native);
+
+    /* Copy the native value for the message */
+    if (NULL == (idx_msg->native = (type->copy) (mesg, idx_msg->native, update_flags)))
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to copy message to object header");
+
+    idx_msg->flags = flags;
+    idx_msg->dirty = TRUE;
+    oh->cache_info.is_dirty = TRUE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_write_mesg() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_touch_oh
+ *
+ * Purpose:	If FORCE is non-zero then create a modification time message
+ *		unless one already exists.  Then update any existing
+ *		modification time message with the current time.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, July 27, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_touch_oh(H5F_t *f, H5O_t *oh, hbool_t force)
+{
+    unsigned	idx;
+#ifdef H5_HAVE_GETTIMEOFDAY
+    struct timeval now_tv;
+#endif /* H5_HAVE_GETTIMEOFDAY */
+    time_t	now;
+    size_t	size;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_touch_oh);
+
+    assert(oh);
+
+    /* Look for existing message */
+    for (idx=0; idx<oh->nmesgs; idx++) {
+	if (H5O_MTIME==oh->mesg[idx].type || H5O_MTIME_NEW==oh->mesg[idx].type)
+            break;
+    }
+
+#ifdef H5_HAVE_GETTIMEOFDAY
+    HDgettimeofday(&now_tv,NULL);
+    now=now_tv.tv_sec;
+#else /* H5_HAVE_GETTIMEOFDAY */
+    now = HDtime(NULL);
+#endif /* H5_HAVE_GETTIMEOFDAY */
+
+    /* Create a new message */
+    if (idx==oh->nmesgs) {
+	if (!force)
+            HGOTO_DONE(SUCCEED); /*nothing to do*/
+	size = (H5O_MTIME_NEW->raw_size)(f, &now);
+	if ((idx=H5O_alloc(f, oh, H5O_MTIME_NEW, size))==UFAIL)
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to allocate space for modification time message");
+    }
+
+    /* Update the native part */
+    if (NULL==oh->mesg[idx].native) {
+	if (NULL==(oh->mesg[idx].native = H5FL_MALLOC(time_t)))
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "memory allocation failed for modification time message");
+    }
+    *((time_t*)(oh->mesg[idx].native)) = now;
+    oh->mesg[idx].dirty = TRUE;
+    oh->cache_info.is_dirty = TRUE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_touch
+ *
+ * Purpose:	Touch an object by setting the modification time to the
+ *		current time and marking the object as dirty.  Unless FORCE
+ *		is non-zero, nothing happens if there is no MTIME message in
+ *		the object header.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, July 27, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_touch(H5G_entry_t *ent, hbool_t force, hid_t dxpl_id)
+{
+    H5O_t	*oh = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_touch, FAIL);
+
+    /* check args */
+    assert(ent);
+    assert(ent->file);
+    assert(H5F_addr_defined(ent->header));
+    if (0==(ent->file->intent & H5F_ACC_RDWR))
+	HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "no write intent on file");
+
+    /* Get the object header */
+    if (NULL==(oh=H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
+
+    /* Create/Update the modification time message */
+    if (H5O_touch_oh(ent->file, oh, force)<0)
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to update object modificaton time");
+
+done:
+    if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE)<0)
+	HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+#ifdef H5O_ENABLE_BOGUS
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_bogus_oh
+ *
+ * Purpose:	Create a "bogus" message unless one already exists.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              <koziol at ncsa.uiuc.edu>
+ *              Tuesday, January 21, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_bogus_oh(H5F_t *f, H5O_t *oh)
+{
+    int	idx;
+    size_t	size;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER(H5O_bogus_oh, FAIL);
+
+    assert(f);
+    assert(oh);
+
+    /* Look for existing message */
+    for (idx=0; idx<oh->nmesgs; idx++)
+	if (H5O_BOGUS==oh->mesg[idx].type)
+            break;
+
+    /* Create a new message */
+    if (idx==oh->nmesgs) {
+	size = (H5O_BOGUS->raw_size)(f, NULL);
+	if ((idx=H5O_alloc(f, oh, H5O_BOGUS, size))<0)
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to allocate space for 'bogus' message");
+
+        /* Allocate the native message in memory */
+	if (NULL==(oh->mesg[idx].native = H5MM_malloc(sizeof(H5O_bogus_t))))
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "memory allocation failed for 'bogus' message");
+
+        /* Update the native part */
+        ((H5O_bogus_t *)(oh->mesg[idx].native))->u = H5O_BOGUS_VALUE;
+
+        /* Mark the message and object header as dirty */
+        oh->mesg[idx].dirty = TRUE;
+        oh->dirty = TRUE;
+    } /* end if */
+
+done:
+    FUNC_LEAVE(ret_value);
+} /* end H5O_bogus_oh() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_bogus
+ *
+ * Purpose:	Create a "bogus" message in an object.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              <koziol at ncsa.uiuc.edu>
+ *              Tuesday, January 21, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_bogus(H5G_entry_t *ent, hid_t dxpl_id)
+{
+    H5O_t	*oh = NULL;
+    herr_t	ret_value = SUCCEED;
+
+    FUNC_ENTER(H5O_bogus, FAIL);
+
+    /* check args */
+    assert(ent);
+    assert(ent->file);
+    assert(H5F_addr_defined(ent->header));
+
+    /* Verify write access to the file */
+    if (0==(ent->file->intent & H5F_ACC_RDWR))
+	HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "no write intent on file");
+
+    /* Get the object header */
+    if (NULL==(oh=H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
+
+    /* Create the "bogus" message */
+    if (H5O_bogus_oh(ent->file, oh)<0)
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to update object 'bogus' message");
+
+done:
+    if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE)<0)
+	HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
+
+    FUNC_LEAVE(ret_value);
+} /* end H5O_bogus() */
+#endif /* H5O_ENABLE_BOGUS */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_remove
+ *
+ * Purpose:	Removes the specified message from the object header.
+ *		If sequence is H5O_ALL (-1) then all messages of the
+ *		specified type are removed.  Removing a message causes
+ *		the sequence numbers to change for subsequent messages of
+ *		the same type.
+ *
+ *		No attempt is made to join adjacent free areas of the
+ *		object header into a single larger free area.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug 28 1997
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 7 Jan 1998
+ *	Does not remove constant messages.
+ *
+ *      Changed to use IDs for types, instead of type objects, then
+ *      call "real" routine.
+ *      Quincey Koziol
+ *	Feb 14 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_remove(H5G_entry_t *ent, unsigned type_id, int sequence, hbool_t adj_link, hid_t dxpl_id)
+{
+    const H5O_class_t *type;            /* Actual H5O class type for the ID */
+    herr_t      ret_value;              /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_remove, FAIL)
+
+    /* check args */
+    HDassert(ent);
+    HDassert(ent->file);
+    HDassert(H5F_addr_defined(ent->header));
+    HDassert(type_id < NELMTS(message_type_g));
+    type = message_type_g[type_id];    /* map the type ID to the actual type object */
+    HDassert(type);
+
+    /* Call the "real" remove routine */
+    if((ret_value = H5O_remove_real(ent, type, sequence, NULL, NULL, adj_link, dxpl_id))<0)
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, FAIL, "unable to remove object header message")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_remove() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_remove_op
+ *
+ * Purpose:	Removes messages from the object header that a callback
+ *              routine indicates should be removed.
+ *
+ *		No attempt is made to join adjacent free areas of the
+ *		object header into a single larger free area.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Sep  6 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_remove_op(H5G_entry_t *ent, unsigned type_id, 
+    H5O_operator_t op, void *op_data, hbool_t adj_link, hid_t dxpl_id)
+{
+    const H5O_class_t *type;            /* Actual H5O class type for the ID */
+    herr_t      ret_value;              /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_remove_op, FAIL)
+
+    /* check args */
+    HDassert(ent);
+    HDassert(ent->file);
+    HDassert(H5F_addr_defined(ent->header));
+    HDassert(type_id < NELMTS(message_type_g));
+    type = message_type_g[type_id];    /* map the type ID to the actual type object */
+    HDassert(type);
+
+    /* Call the "real" remove routine */
+    if((ret_value = H5O_remove_real(ent, type, H5O_ALL, op, op_data, adj_link, dxpl_id))<0)
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, FAIL, "unable to remove object header message")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_remove_op() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_remove_cb
+ *
+ * Purpose:	Object header iterator callback routine to remove messages
+ *              of a particular type that match a particular sequence number,
+ *              or all messages if the sequence number is H5O_ALL (-1).
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Sep  6 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_remove_cb(H5O_mesg_t *mesg/*in,out*/, unsigned idx, unsigned * oh_flags_ptr,
+    void *_udata/*in,out*/)
+{
+    H5O_iter_ud1_t *udata = (H5O_iter_ud1_t *)_udata;   /* Operator user data */
+    htri_t try_remove = FALSE;         /* Whether to try removing a message */
+    herr_t ret_value = H5O_ITER_CONT;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_remove_cb)
+
+    /* check args */
+    HDassert(mesg);
+
+    /* Check for callback routine */
+    if(udata->op) {
+        /* Call the iterator callback */
+        if((try_remove = (udata->op)(mesg->native, idx, udata->op_data)) < 0)
+            HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, H5O_ITER_ERROR, "unable to delete file space for object header message")
+    } /* end if */
+    else {
+        /* If there's no callback routine, does the sequence # match? */
+        if ((int)idx == udata->sequence || H5O_ALL == udata->sequence)
+            try_remove = TRUE;
+    } /* end else */
+
+    /* Try removing the message, if indicated */
+    if(try_remove) {
+        /*
+         * Keep track of how many times we failed trying to remove constant
+         * messages.
+         */
+        if (mesg->flags & H5O_FLAG_CONSTANT) {
+            udata->nfailed++;
+        } /* end if */
+        else {
+            /* Free any space referred to in the file from this message */
+            if(H5O_delete_mesg(udata->f, udata->dxpl_id, mesg, udata->adj_link)<0)
+                HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, H5O_ITER_ERROR, "unable to delete file space for object header message")
+
+            /* Free any native information */
+            H5O_free_mesg(mesg);
+
+            /* Change message type to nil and zero it */
+            mesg->type = H5O_NULL;
+            HDmemset(mesg->raw, 0, mesg->raw_size);
+
+            /* Indicate that the message was modified */
+            mesg->dirty = TRUE;
+
+            /* Indicate that the object header was modified */
+            *oh_flags_ptr = TRUE;
+        } /* end else */
+
+        /* Break out now, if we've found the correct message */
+        if(udata->sequence != H5O_ALL)
+            HGOTO_DONE(H5O_ITER_STOP)
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_remove_cb() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_remove_real
+ *
+ * Purpose:	Removes the specified message from the object header.
+ *		If sequence is H5O_ALL (-1) then all messages of the
+ *		specified type are removed.  Removing a message causes
+ *		the sequence numbers to change for subsequent messages of
+ *		the same type.
+ *
+ *		No attempt is made to join adjacent free areas of the
+ *		object header into a single larger free area.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug 28 1997
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 7 Jan 1998
+ *	Does not remove constant messages.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_remove_real(H5G_entry_t *ent, const H5O_class_t *type, int sequence,
+    H5O_operator_t op, void *op_data, hbool_t adj_link, hid_t dxpl_id)
+{
+    H5O_iter_ud1_t udata;               /* User data for iterator */
+    herr_t ret_value=SUCCEED;           /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_remove_real)
+
+    /* check args */
+    HDassert(ent);
+    HDassert(ent->file);
+    HDassert(type);
+
+    if (0==(ent->file->intent & H5F_ACC_RDWR))
+	HGOTO_ERROR (H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file")
+
+    /* Set up iterator operator data */
+    udata.f = ent->file;
+    udata.dxpl_id = dxpl_id;
+    udata.sequence = sequence;
+    udata.nfailed = 0;
+    udata.op = op;
+    udata.op_data = op_data;
+    udata.adj_link = adj_link;
+
+    /* Iterate over the messages, deleting appropriate one(s) */
+    if(H5O_iterate_real(ent, type, H5AC_WRITE, TRUE, (void *)H5O_remove_cb, &udata, dxpl_id) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "error iterating over messages")
+
+    /* Fail if we tried to remove any constant messages */
+    if (udata.nfailed)
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to remove constant message(s)")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_remove_real() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_alloc_extend_chunk
+ *
+ * Purpose:	Extends a chunk which hasn't been allocated on disk yet
+ *		to make the chunk large enough to contain a message whose
+ *		data size is exactly SIZE bytes (SIZE need not be aligned).
+ *
+ *		If the last message of the chunk is the null message, then
+ *		that message will be extended with the chunk.  Otherwise a
+ *		new null message is created.
+ *
+ *		F is the file in which the chunk will be written.  It is
+ *		included to ensure that there is enough space to extend
+ *		this chunk.
+ *
+ * Return:	Success:	Message index for null message which
+ *				is large enough to hold SIZE bytes.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  7 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-08-26
+ *		If new memory is allocated as a multiple of some alignment
+ *		then we're careful to initialize the part of the new memory
+ *		from the end of the expected message to the end of the new
+ *		memory.
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+H5O_alloc_extend_chunk(H5F_t *f, H5O_t *oh, unsigned chunkno, size_t size)
+{
+    unsigned	u;
+    unsigned	idx;
+    size_t	delta, old_size;
+    size_t	aligned_size = H5O_ALIGN(size);
+    uint8_t	*old_addr;
+    unsigned	ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_alloc_extend_chunk);
+
+    /* check args */
+    assert(oh);
+    assert(chunkno < oh->nchunks);
+    assert(size > 0);
+
+    if (H5F_addr_defined(oh->chunk[chunkno].addr))
+	HGOTO_ERROR(H5E_OHDR, H5E_NOSPACE, UFAIL, "chunk is on disk");
+
+    /* try to extend a null message */
+    for (idx=0; idx<oh->nmesgs; idx++) {
+	if (oh->mesg[idx].chunkno==chunkno) {
+            if (H5O_NULL_ID == oh->mesg[idx].type->id &&
+                    (oh->mesg[idx].raw + oh->mesg[idx].raw_size ==
+                     oh->chunk[chunkno].image + oh->chunk[chunkno].size)) {
+
+                delta = MAX (H5O_MIN_SIZE, aligned_size - oh->mesg[idx].raw_size);
+                assert (delta=H5O_ALIGN (delta));
+
+                /* Reserve space in the file to hold the increased chunk size */
+                if( H5MF_reserve(f, (hsize_t)delta) < 0 )
+                    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, UFAIL, "unable to reserve space in file");
+
+                oh->mesg[idx].dirty = TRUE;
+                oh->mesg[idx].raw_size += delta;
+
+                old_addr = oh->chunk[chunkno].image;
+
+                /* Be careful not to indroduce garbage */
+                oh->chunk[chunkno].image = H5FL_BLK_REALLOC(chunk_image,old_addr,
+                                                        (oh->chunk[chunkno].size + delta));
+                if (NULL==oh->chunk[chunkno].image)
+                    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, UFAIL, "memory allocation failed");
+                HDmemset(oh->chunk[chunkno].image + oh->chunk[chunkno].size,
+                         0, delta);
+                oh->chunk[chunkno].size += delta;
+
+                /* adjust raw addresses for messages of this chunk */
+                if (old_addr != oh->chunk[chunkno].image) {
+                    for (u = 0; u < oh->nmesgs; u++) {
+                        if (oh->mesg[u].chunkno == chunkno)
+                            oh->mesg[u].raw = oh->chunk[chunkno].image +
+                                              (oh->mesg[u].raw - old_addr);
+                    }
+                }
+                HGOTO_DONE(idx);
+            }
+        } /* end if */
+    }
+
+    /* Reserve space in the file */
+    delta = MAX(H5O_MIN_SIZE, aligned_size+H5O_SIZEOF_MSGHDR(f));
+    delta = H5O_ALIGN(delta);
+
+    if( H5MF_reserve(f, (hsize_t)delta) < 0 )
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, UFAIL, "unable to reserve space in file");
+
+    /* create a new null message */
+    if (oh->nmesgs >= oh->alloc_nmesgs) {
+        unsigned na = oh->alloc_nmesgs + H5O_NMESGS;
+        H5O_mesg_t *x = H5FL_SEQ_REALLOC (H5O_mesg_t, oh->mesg, (size_t)na);
+
+        if (NULL==x)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, UFAIL, "memory allocation failed");
+        oh->alloc_nmesgs = na;
+        oh->mesg = x;
+    }
+    idx = oh->nmesgs++;
+    oh->mesg[idx].type = H5O_NULL;
+    oh->mesg[idx].dirty = TRUE;
+    oh->mesg[idx].native = NULL;
+    oh->mesg[idx].raw = oh->chunk[chunkno].image +
+			oh->chunk[chunkno].size +
+			H5O_SIZEOF_MSGHDR(f);
+    oh->mesg[idx].raw_size = delta - H5O_SIZEOF_MSGHDR(f);
+    oh->mesg[idx].chunkno = chunkno;
+
+    old_addr = oh->chunk[chunkno].image;
+    old_size = oh->chunk[chunkno].size;
+    oh->chunk[chunkno].size += delta;
+    oh->chunk[chunkno].image = H5FL_BLK_REALLOC(chunk_image,old_addr,
+					    oh->chunk[chunkno].size);
+    if (NULL==oh->chunk[chunkno].image)
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, UFAIL, "memory allocation failed");
+    HDmemset(oh->chunk[chunkno].image+old_size, 0,
+	     oh->chunk[chunkno].size - old_size);
+
+    /* adjust raw addresses for messages of this chunk */
+    if (old_addr != oh->chunk[chunkno].image) {
+	for (u = 0; u < oh->nmesgs; u++) {
+	    if (oh->mesg[u].chunkno == chunkno)
+		oh->mesg[u].raw = oh->chunk[chunkno].image +
+		    (oh->mesg[u].raw - old_addr);
+	}
+    }
+
+    /* Set return value */
+    ret_value=idx;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_alloc_new_chunk
+ *
+ * Purpose:	Allocates a new chunk for the object header but doen't
+ *		give the new chunk a file address yet.	One of the other
+ *		chunks will get an object continuation message.	 If there
+ *		isn't room in any other chunk for the object continuation
+ *		message, then some message from another chunk is moved into
+ *		this chunk to make room.
+ *
+ * 		SIZE need not be aligned.
+ *
+ * Return:	Success:	Index number of the null message for the
+ *				new chunk.  The null message will be at
+ *				least SIZE bytes not counting the message
+ *				ID or size fields.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  7 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+H5O_alloc_new_chunk(H5F_t *f, H5O_t *oh, size_t size)
+{
+    size_t	cont_size;		/*continuation message size	*/
+    int	found_null = (-1);	/*best fit null message		*/
+    int	found_other = (-1);	/*best fit other message	*/
+    unsigned	idx;		        /*message number */
+    uint8_t	*p = NULL;		/*ptr into new chunk		*/
+    H5O_cont_t	*cont = NULL;		/*native continuation message	*/
+    int	chunkno;
+    unsigned	u;
+    unsigned	ret_value;		/*return value	*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_alloc_new_chunk);
+
+    /* check args */
+    assert (oh);
+    assert (size > 0);
+    size = H5O_ALIGN(size);
+
+    /*
+     * Find the smallest null message that will hold an object
+     * continuation message.  Failing that, find the smallest message
+     * that could be moved to make room for the continuation message.
+     * Don't ever move continuation message from one chunk to another.
+     */
+    cont_size = H5O_ALIGN (H5F_SIZEOF_ADDR(f) + H5F_SIZEOF_SIZE(f));
+    for (u=0; u<oh->nmesgs; u++) {
+	if (H5O_NULL_ID == oh->mesg[u].type->id) {
+	    if (cont_size == oh->mesg[u].raw_size) {
+		found_null = u;
+		break;
+	    } else if (oh->mesg[u].raw_size >= cont_size &&
+		       (found_null < 0 ||
+			(oh->mesg[u].raw_size <
+			 oh->mesg[found_null].raw_size))) {
+		found_null = u;
+	    }
+	} else if (H5O_CONT_ID == oh->mesg[u].type->id) {
+	    /*don't consider continuation messages */
+	} else if (oh->mesg[u].raw_size >= cont_size &&
+		   (found_other < 0 ||
+		    oh->mesg[u].raw_size < oh->mesg[found_other].raw_size)) {
+	    found_other = u;
+	}
+    }
+    assert(found_null >= 0 || found_other >= 0);
+
+    /*
+     * If we must move some other message to make room for the null
+     * message, then make sure the new chunk has enough room for that
+     * other message.
+     */
+    if (found_null < 0)
+	size += H5O_SIZEOF_MSGHDR(f) + oh->mesg[found_other].raw_size;
+
+    /*
+     * The total chunk size must include the requested space plus enough
+     * for the message header.	This must be at least some minimum and a
+     * multiple of the alignment size.
+     */
+    size = MAX(H5O_MIN_SIZE, size + H5O_SIZEOF_MSGHDR(f));
+    assert (size == H5O_ALIGN (size));
+
+    /* Reserve space in the file to hold the new chunk */
+    if( H5MF_reserve(f, (hsize_t)size) < 0 )
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, UFAIL, "unable to reserve space in file for new chunk");
+
+    /*
+     * Create the new chunk without giving it a file address.
+     */
+    if (oh->nchunks >= oh->alloc_nchunks) {
+        unsigned na = oh->alloc_nchunks + H5O_NCHUNKS;
+        H5O_chunk_t *x = H5FL_SEQ_REALLOC (H5O_chunk_t, oh->chunk, (size_t)na);
+
+        if (!x)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, UFAIL, "memory allocation failed");
+        oh->alloc_nchunks = na;
+        oh->chunk = x;
+    }
+    chunkno = oh->nchunks++;
+    oh->chunk[chunkno].dirty = TRUE;
+    oh->chunk[chunkno].addr = HADDR_UNDEF;
+    oh->chunk[chunkno].size = size;
+    if (NULL==(oh->chunk[chunkno].image = p = H5FL_BLK_CALLOC(chunk_image,size)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, UFAIL, "memory allocation failed");
+
+    /*
+     * Make sure we have enough space for all possible new messages
+     * that could be generated below.
+     */
+    if (oh->nmesgs + 3 > oh->alloc_nmesgs) {
+        int old_alloc=oh->alloc_nmesgs;
+        unsigned na = oh->alloc_nmesgs + MAX (H5O_NMESGS, 3);
+        H5O_mesg_t *x = H5FL_SEQ_REALLOC (H5O_mesg_t, oh->mesg, (size_t)na);
+
+        if (!x)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, UFAIL, "memory allocation failed");
+        oh->alloc_nmesgs = na;
+        oh->mesg = x;
+
+        /* Set new object header info to zeros */
+        HDmemset(&oh->mesg[old_alloc], 0,
+		 (oh->alloc_nmesgs-old_alloc)*sizeof(H5O_mesg_t));
+    }
+
+    /*
+     * Describe the messages of the new chunk.
+     */
+    if (found_null < 0) {
+	found_null = u = oh->nmesgs++;
+	oh->mesg[u].type = H5O_NULL;
+	oh->mesg[u].dirty = TRUE;
+	oh->mesg[u].native = NULL;
+	oh->mesg[u].raw = oh->mesg[found_other].raw;
+	oh->mesg[u].raw_size = oh->mesg[found_other].raw_size;
+	oh->mesg[u].chunkno = oh->mesg[found_other].chunkno;
+
+	oh->mesg[found_other].dirty = TRUE;
+        /* Copy the message to the new location */
+        HDmemcpy(p+H5O_SIZEOF_MSGHDR(f),oh->mesg[found_other].raw,oh->mesg[found_other].raw_size);
+	oh->mesg[found_other].raw = p + H5O_SIZEOF_MSGHDR(f);
+	oh->mesg[found_other].chunkno = chunkno;
+	p += H5O_SIZEOF_MSGHDR(f) + oh->mesg[found_other].raw_size;
+	size -= H5O_SIZEOF_MSGHDR(f) + oh->mesg[found_other].raw_size;
+    }
+    idx = oh->nmesgs++;
+    oh->mesg[idx].type = H5O_NULL;
+    oh->mesg[idx].dirty = TRUE;
+    oh->mesg[idx].native = NULL;
+    oh->mesg[idx].raw = p + H5O_SIZEOF_MSGHDR(f);
+    oh->mesg[idx].raw_size = size - H5O_SIZEOF_MSGHDR(f);
+    oh->mesg[idx].chunkno = chunkno;
+
+    /*
+     * If the null message that will receive the continuation message
+     * is larger than the continuation message, then split it into
+     * two null messages.
+     */
+    if (oh->mesg[found_null].raw_size > cont_size) {
+	u = oh->nmesgs++;
+	oh->mesg[u].type = H5O_NULL;
+	oh->mesg[u].dirty = TRUE;
+	oh->mesg[u].native = NULL;
+	oh->mesg[u].raw = oh->mesg[found_null].raw +
+			  cont_size +
+			  H5O_SIZEOF_MSGHDR(f);
+	oh->mesg[u].raw_size = oh->mesg[found_null].raw_size -
+			       (cont_size + H5O_SIZEOF_MSGHDR(f));
+	oh->mesg[u].chunkno = oh->mesg[found_null].chunkno;
+
+	oh->mesg[found_null].dirty = TRUE;
+	oh->mesg[found_null].raw_size = cont_size;
+    }
+
+    /*
+     * Initialize the continuation message.
+     */
+    oh->mesg[found_null].type = H5O_CONT;
+    oh->mesg[found_null].dirty = TRUE;
+    if (NULL==(cont = H5FL_MALLOC(H5O_cont_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, UFAIL, "memory allocation failed");
+    cont->addr = HADDR_UNDEF;
+    cont->size = 0;
+    cont->chunkno = chunkno;
+    oh->mesg[found_null].native = cont;
+
+    /* Set return value */
+    ret_value=idx;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_alloc
+ *
+ * Purpose:	Allocate enough space in the object header for this message.
+ *
+ * Return:	Success:	Index of message
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+H5O_alloc(H5F_t *f, H5O_t *oh, const H5O_class_t *type, size_t size)
+{
+    unsigned	idx;
+    H5O_mesg_t *msg;            /* Pointer to newly allocated message */
+    size_t	aligned_size = H5O_ALIGN(size);
+    unsigned	ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_alloc);
+
+    /* check args */
+    assert (oh);
+    assert (type);
+
+    /* look for a null message which is large enough */
+    for (idx = 0; idx < oh->nmesgs; idx++) {
+	if (H5O_NULL_ID == oh->mesg[idx].type->id &&
+                oh->mesg[idx].raw_size >= aligned_size)
+	    break;
+    }
+
+#ifdef LATER
+    /*
+     * Perhaps if we join adjacent null messages we could make one
+     * large enough... we leave this as an exercise for future
+     * programmers :-)	This isn't a high priority because when an
+     * object header is read from disk the null messages are combined
+     * anyway.
+     */
+#endif
+
+    /* if we didn't find one, then allocate more header space */
+    if (idx >= oh->nmesgs) {
+        unsigned	chunkno;
+
+	/*
+	 * Look for a chunk which hasn't had disk space allocated yet
+	 * since we can just increase the size of that chunk.
+	 */
+	for (chunkno = 0; chunkno < oh->nchunks; chunkno++) {
+	    if ((idx = H5O_alloc_extend_chunk(f, oh, chunkno, size)) != UFAIL) {
+		break;
+	    }
+	    H5E_clear();
+	}
+
+	/*
+	 * Create a new chunk
+	 */
+	if (idx == UFAIL) {
+	    if ((idx = H5O_alloc_new_chunk(f, oh, size)) == UFAIL)
+		HGOTO_ERROR(H5E_OHDR, H5E_NOSPACE, UFAIL, "unable to create a new object header data chunk");
+	}
+    }
+
+    /* Set pointer to newly allocated message */
+    msg=&oh->mesg[idx];
+
+    /* do we need to split the null message? */
+    if (msg->raw_size > aligned_size) {
+        H5O_mesg_t *null_msg;       /* Pointer to null message */
+        size_t	mesg_size = aligned_size+ H5O_SIZEOF_MSGHDR(f); /* Total size of newly allocated message */
+
+	assert(msg->raw_size - aligned_size >= H5O_SIZEOF_MSGHDR(f));
+
+	if (oh->nmesgs >= oh->alloc_nmesgs) {
+	    int old_alloc=oh->alloc_nmesgs;
+	    unsigned na = oh->alloc_nmesgs + H5O_NMESGS;
+	    H5O_mesg_t *x = H5FL_SEQ_REALLOC (H5O_mesg_t, oh->mesg, (size_t)na);
+
+	    if (!x)
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, UFAIL, "memory allocation failed");
+	    oh->alloc_nmesgs = na;
+	    oh->mesg = x;
+
+	    /* Set new object header info to zeros */
+	    HDmemset(&oh->mesg[old_alloc],0,
+		     (oh->alloc_nmesgs-old_alloc)*sizeof(H5O_mesg_t));
+
+            /* "Retarget" local 'msg' pointer into newly allocated array of messages */
+            msg=&oh->mesg[idx];
+	}
+        null_msg=&oh->mesg[oh->nmesgs++];
+	null_msg->type = H5O_NULL;
+	null_msg->dirty = TRUE;
+	null_msg->native = NULL;
+	null_msg->raw = msg->raw + mesg_size;
+	null_msg->raw_size = msg->raw_size - mesg_size;
+	null_msg->chunkno = msg->chunkno;
+	msg->raw_size = aligned_size;
+    }
+
+    /* initialize the new message */
+    msg->type = type;
+    msg->dirty = TRUE;
+    msg->native = NULL;
+
+    oh->cache_info.is_dirty = TRUE;
+
+    /* Set return value */
+    ret_value=idx;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+#ifdef NOT_YET
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_share
+ *
+ * Purpose:	Writes a message to the global heap.
+ *
+ * Return:	Success:	Non-negative, and HOBJ describes the global heap
+ *				object.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April  2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_share (H5F_t *f, hid_t dxpl_id, const H5O_class_t *type, const void *mesg,
+	   H5HG_t *hobj/*out*/)
+{
+    size_t	size;
+    void	*buf = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_share);
+
+    /* Check args */
+    assert (f);
+    assert (type);
+    assert (mesg);
+    assert (hobj);
+
+    /* Encode the message put it in the global heap */
+    if ((size = (type->raw_size)(f, mesg))>0) {
+	if (NULL==(buf = H5MM_malloc (size)))
+	    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+	if ((type->encode)(f, buf, mesg)<0)
+	    HGOTO_ERROR (H5E_OHDR, H5E_CANTENCODE, FAIL, "unable to encode message");
+	if (H5HG_insert (f, dxpl_id, size, buf, hobj)<0)
+	    HGOTO_ERROR (H5E_OHDR, H5E_CANTINIT, FAIL, "unable to store message in global heap");
+    }
+
+done:
+    if(buf)
+        H5MM_xfree (buf);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+#endif /* NOT_YET */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_raw_size
+ *
+ * Purpose:	Call the 'raw_size' method for a
+ *              particular class of object header.
+ *
+ * Return:	Size of message on success, 0 on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Feb 13 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5O_raw_size(unsigned type_id, const H5F_t *f, const void *mesg)
+{
+    const H5O_class_t *type;            /* Actual H5O class type for the ID */
+    size_t      ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_raw_size,0)
+
+    /* Check args */
+    HDassert(type_id<NELMTS(message_type_g));
+    type=message_type_g[type_id];    /* map the type ID to the actual type object */
+    HDassert(type);
+    HDassert(type->raw_size);
+    HDassert(f);
+    HDassert(mesg);
+
+    /* Compute the raw data size for the mesg */
+    if ((ret_value = (type->raw_size)(f, mesg))==0)
+        HGOTO_ERROR (H5E_OHDR, H5E_CANTCOUNT, 0, "unable to determine size of message")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_raw_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_mesg_size
+ *
+ * Purpose:	Calculate the final size of an encoded message in an object
+ *              header.
+ *
+ * Return:	Size of message on success, 0 on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Sep  6 2005
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5O_mesg_size(unsigned type_id, const H5F_t *f, const void *mesg)
+{
+    const H5O_class_t *type;            /* Actual H5O class type for the ID */
+    size_t      ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_mesg_size,0)
+
+    /* Check args */
+    HDassert(type_id<NELMTS(message_type_g));
+    type=message_type_g[type_id];    /* map the type ID to the actual type object */
+    HDassert(type);
+    HDassert(type->raw_size);
+    HDassert(f);
+    HDassert(mesg);
+
+    /* Compute the raw data size for the mesg */
+    if((ret_value = (type->raw_size)(f, mesg)) == 0)
+        HGOTO_ERROR (H5E_OHDR, H5E_CANTCOUNT, 0, "unable to determine size of message")
+
+    /* Adjust size for alignment, if necessary */
+    ret_value = H5O_ALIGN(ret_value);
+
+    /* Add space for message header */
+    ret_value += H5O_SIZEOF_MSGHDR(f);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_mesg_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_get_share
+ *
+ * Purpose:	Call the 'get_share' method for a
+ *              particular class of object header.
+ *
+ * Return:	Success:	Non-negative, and SHARE describes the shared
+ *				object.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Oct  2 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_get_share(unsigned type_id, H5F_t *f, const void *mesg, H5O_shared_t *share)
+{
+    const H5O_class_t *type;    /* Actual H5O class type for the ID */
+    herr_t ret_value;           /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_get_share,FAIL);
+
+    /* Check args */
+    assert(type_id<NELMTS(message_type_g));
+    type=message_type_g[type_id];    /* map the type ID to the actual type object */
+    assert (type);
+    assert (type->get_share);
+    assert (f);
+    assert (mesg);
+    assert (share);
+
+    /* Compute the raw data size for the mesg */
+    if ((ret_value = (type->get_share)(f, mesg, share))<0)
+        HGOTO_ERROR (H5E_OHDR, H5E_CANTGET, FAIL, "unable to retrieve shared message information");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_get_share() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_delete
+ *
+ * Purpose:	Delete an object header from a file.  This frees the file
+ *              space used for the object header (and it's continuation blocks)
+ *              and also walks through each header message and asks it to
+ *              remove all the pieces of the file referenced by the header.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Mar 19 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr)
+{
+    H5O_t *oh=NULL;             /* Object header information */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_delete,FAIL);
+
+    /* Check args */
+    assert (f);
+    assert(H5F_addr_defined(addr));
+
+    /* Get the object header information */
+    if (NULL == (oh = H5AC_protect(f, dxpl_id, H5AC_OHDR, addr, NULL, NULL, H5AC_WRITE)))
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
+
+    /* Delete object */
+    if(H5O_delete_oh(f,dxpl_id,oh)<0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, FAIL, "can't delete object from file");
+
+done:
+    if (oh && H5AC_unprotect(f, dxpl_id, H5AC_OHDR, addr, oh, TRUE)<0)
+	HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_delete() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_delete_oh
+ *
+ * Purpose:	Internal function to:
+ *              Delete an object header from a file.  This frees the file
+ *              space used for the object header (and it's continuation blocks)
+ *              and also walks through each header message and asks it to
+ *              remove all the pieces of the file referenced by the header.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Mar 19 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_delete_oh(H5F_t *f, hid_t dxpl_id, H5O_t *oh)
+{
+    H5O_mesg_t *curr_msg;       /* Pointer to current message being operated on */
+    H5O_chunk_t *curr_chk;      /* Pointer to current chunk being operated on */
+    unsigned	u;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_delete_oh);
+
+    /* Check args */
+    assert (f);
+    assert (oh);
+
+    /* Walk through the list of object header messages, asking each one to
+     * delete any file space used
+     */
+    for (u = 0, curr_msg=&oh->mesg[0]; u < oh->nmesgs; u++,curr_msg++) {
+        /* Free any space referred to in the file from this message */
+        if(H5O_delete_mesg(f, dxpl_id, curr_msg, TRUE)<0)
+            HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, FAIL, "unable to delete file space for object header message");
+    } /* end for */
+
+    /* Free all the chunks for the object header */
+    for (u = 0, curr_chk=&oh->chunk[0]; u < oh->nchunks; u++,curr_chk++) {
+        haddr_t     chk_addr;   /* Actual address of chunk */
+        hsize_t     chk_size;   /* Actual size of chunk */
+
+        if(u==0) {
+            chk_addr = curr_chk->addr - H5O_SIZEOF_HDR(f);
+            chk_size = curr_chk->size + H5O_SIZEOF_HDR(f);
+        } /* end if */
+        else {
+            chk_addr = curr_chk->addr;
+            chk_size = curr_chk->size;
+        } /* end else */
+
+        /* Free the file space for the chunk */
+	if (H5MF_xfree(f, H5FD_MEM_OHDR, dxpl_id, chk_addr, chk_size)<0)
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTFREE, FAIL, "unable to free object header");
+    } /* end for */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_delete_oh() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_delete_mesg
+ *
+ * Purpose:	Internal function to:
+ *              Delete an object header message from a file.  This frees the file
+ *              space used for anything referred to in the object header message.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		September 26 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_delete_mesg(H5F_t *f, hid_t dxpl_id, H5O_mesg_t *mesg, hbool_t adj_link)
+{
+    const H5O_class_t	*type;  /* Type of object to free */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_delete_mesg);
+
+    /* Check args */
+    assert (f);
+    assert (mesg);
+
+    /* Get the message to free's type */
+    if(mesg->flags & H5O_FLAG_SHARED)
+        type=H5O_SHARED;
+    else
+        type = mesg->type;
+
+    /* Check if there is a file space deletion callback for this type of message */
+    if(type->del) {
+        /*
+         * Decode the message if necessary.
+         */
+        if (NULL == mesg->native) {
+            assert(type->decode);
+            mesg->native = (type->decode) (f, dxpl_id, mesg->raw, NULL);
+            if (NULL == mesg->native)
+                HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, FAIL, "unable to decode message");
+        } /* end if */
+
+        if ((type->del)(f, dxpl_id, mesg->native, adj_link)<0)
+            HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, FAIL, "unable to delete file space for object header message");
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_delete_msg() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_get_info
+ *
+ * Purpose:	Retrieve information about an object header
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Oct  7 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_get_info(H5G_entry_t *ent, H5O_stat_t *ostat, hid_t dxpl_id)
+{
+    H5O_t *oh=NULL;             /* Object header information */
+    H5O_mesg_t *curr_msg;       /* Pointer to current message being operated on */
+    hsize_t total_size;         /* Total amount of space used in file */
+    hsize_t free_space;         /* Free space in object header */
+    unsigned u;                 /* Local index variable */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_get_info,FAIL);
+
+    /* Check args */
+    assert (ent);
+    assert (ostat);
+
+    /* Get the object header information */
+    if (NULL == (oh = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL, H5AC_READ)))
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
+
+    /* Iterate over all the messages, accumulating the total size & free space */
+    total_size=H5O_SIZEOF_HDR(ent->file);
+    free_space=0;
+    for (u = 0, curr_msg=&oh->mesg[0]; u < oh->nmesgs; u++,curr_msg++) {
+        /* Accumulate the size for this message */
+        total_size+= H5O_SIZEOF_MSGHDR(ent->file) + curr_msg->raw_size;
+
+        /* Check for this message being free space */
+	if (H5O_NULL_ID == curr_msg->type->id)
+            free_space+= H5O_SIZEOF_MSGHDR(ent->file) + curr_msg->raw_size;
+    } /* end for */
+
+    /* Set the information for this object header */
+    ostat->size=total_size;
+    ostat->free=free_space;
+    ostat->nmesgs=oh->nmesgs;
+    ostat->nchunks=oh->nchunks;
+
+done:
+    if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE)<0)
+	HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_get_info() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_iterate
+ *
+ * Purpose:	Iterate through object headers of a certain type.
+ *
+ * Return:	Returns a negative value if something is wrong, the return
+ *      value of the last operator if it was non-zero, or zero if all
+ *      object headers were processed.
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Nov 19 2004
+ *
+ * Description:
+ *      This function interates over the object headers of an object
+ *  specified with 'ent' of type 'type_id'.  For each object header of the
+ *  object, the 'op_data' and some additional information (specified below) are
+ *  passed to the 'op' function.
+ *      The operation receives a pointer to the object header message for the
+ *  object being iterated over ('mesg'), and the pointer to the operator data
+ *  passed in to H5O_iterate ('op_data').  The return values from an operator
+ *  are:
+ *      A. Zero causes the iterator to continue, returning zero when all
+ *          object headers of that type have been processed.
+ *      B. Positive causes the iterator to immediately return that positive
+ *          value, indicating short-circuit success.
+ *      C. Negative causes the iterator to immediately return that value,
+ *          indicating failure.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_iterate(const H5G_entry_t *ent, unsigned type_id, H5O_operator_t op,
+    void *op_data, hid_t dxpl_id)
+{
+    const H5O_class_t *type;            /* Actual H5O class type for the ID */
+    herr_t              ret_value=0;    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_iterate, FAIL)
+
+    /* check args */
+    HDassert(ent);
+    HDassert(ent->file);
+    HDassert(H5F_addr_defined(ent->header));
+    HDassert(type_id<NELMTS(message_type_g));
+    type=message_type_g[type_id];    /* map the type ID to the actual type object */
+    HDassert(type);
+
+    /* Call the "real" iterate routine */
+    if((ret_value=H5O_iterate_real(ent, type, H5AC_READ, FALSE, (void *)op, op_data, dxpl_id))<0)
+	HGOTO_ERROR(H5E_OHDR, H5E_BADITER, FAIL, "unable to iterate over object header messages")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_iterate() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_iterate_real
+ *
+ * Purpose:	Iterate through object headers of a certain type.
+ *
+ * Return:	Returns a negative value if something is wrong, the return
+ *      value of the last operator if it was non-zero, or zero if all
+ *      object headers were processed.
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Sep  6 2005
+ *
+ * Description:
+ *      This function interates over the object headers of an object
+ *  specified with 'ent' of type 'type_id'.  For each object header of the
+ *  object, the 'op_data' and some additional information (specified below) are
+ *  passed to the 'op' function.
+ *      The operation receives a pointer to the object header message for the
+ *  object being iterated over ('mesg'), and the pointer to the operator data
+ *  passed in to H5O_iterate ('op_data').  The return values from an operator
+ *  are:
+ *      A. Zero causes the iterator to continue, returning zero when all
+ *          object headers of that type have been processed.
+ *      B. Positive causes the iterator to immediately return that positive
+ *          value, indicating short-circuit success.
+ *      C. Negative causes the iterator to immediately return that value,
+ *          indicating failure.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_iterate_real(const H5G_entry_t *ent, const H5O_class_t *type, H5AC_protect_t prot,
+    hbool_t internal, void *op, void *op_data, hid_t dxpl_id)
+{
+    H5O_t		*oh=NULL;       /* Pointer to actual object header */
+    unsigned            oh_flags = FALSE;  /* Start iteration with no flags set on object header */
+    unsigned		idx;            /* Absolute index of current message in all messages */
+    unsigned		sequence;       /* Relative index of current message for messages of type */
+    H5O_mesg_t         *idx_msg;        /* Pointer to current message */
+    herr_t              ret_value=0;    /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_iterate_real)
+
+    /* check args */
+    HDassert(ent);
+    HDassert(ent->file);
+    HDassert(H5F_addr_defined(ent->header));
+    HDassert(type);
+    HDassert(op);
+
+    /* Protect the object header to iterate over */
+    if (NULL == (oh = H5AC_protect(ent->file, dxpl_id, H5AC_OHDR, ent->header, NULL, NULL, prot)))
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
+
+    /* Iterate over messages */
+    for (sequence = 0, idx = 0, idx_msg = &oh->mesg[0]; idx < oh->nmesgs; idx++, idx_msg++) {
+	if (type->id == idx_msg->type->id) {
+            /*
+             * Decode the message if necessary.  If the message is shared then decode
+             * a shared message, ignoring the message type.
+             */
+            if (NULL == idx_msg->native) {
+                const H5O_class_t	*decode_type;
+
+                if (idx_msg->flags & H5O_FLAG_SHARED)
+                    decode_type = H5O_SHARED;
+                else
+                    decode_type = type;
+
+                /* Decode the message if necessary */
+                HDassert(decode_type->decode);
+                if (NULL == (idx_msg->native = (decode_type->decode) (ent->file, dxpl_id, idx_msg->raw, NULL)))
+                    HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, FAIL, "unable to decode message")
+            } /* end if */
+
+            /* Check for making an "internal" (i.e. within the H5O package) callback */
+            if(internal) {
+                /* Call the "internal" iterator callback */
+                if((ret_value = ((H5O_operator_int_t)op)(idx_msg, sequence, &oh_flags, op_data)) != 0)
+                    break;
+            } /* end if */
+            else {
+                /* Call the iterator callback */
+                if((ret_value = ((H5O_operator_t)op)(idx_msg->native, sequence, op_data)) != 0)
+                    break;
+            } /* end else */
+
+            /* Increment sequence value for message type */
+            sequence++;
+        } /* end if */
+    } /* end for */
+
+    /* Check if object header was modified */
+    if(oh_flags) {
+        /* Shouldn't be able to modify object header if we don't have write access */
+        HDassert(prot == H5AC_WRITE);
+        oh->cache_info.is_dirty = TRUE;
+        H5O_touch_oh(ent->file, oh, FALSE);
+    } /* end if */
+
+done:
+    if (oh && H5AC_unprotect(ent->file, dxpl_id, H5AC_OHDR, ent->header, oh, FALSE) < 0)
+	HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header")
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_iterate_real() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_debug_id
+ *
+ * Purpose:	Act as a proxy for calling the 'debug' method for a
+ *              particular class of object header.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Feb 13 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_debug_id(hid_t type_id, H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream, int indent, int fwidth)
+{
+    const H5O_class_t *type;            /* Actual H5O class type for the ID */
+    herr_t      ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5O_debug_id,FAIL);
+
+    /* Check args */
+    assert(type_id>=0 && type_id<(hid_t)(sizeof(message_type_g)/sizeof(message_type_g[0])));
+    type=message_type_g[type_id];    /* map the type ID to the actual type object */
+    assert(type);
+    assert(type->debug);
+    assert(f);
+    assert(mesg);
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    /* Call the debug method in the class */
+    if ((ret_value = (type->debug)(f, dxpl_id, mesg, stream, indent, fwidth))<0)
+        HGOTO_ERROR (H5E_OHDR, H5E_BADTYPE, FAIL, "unable to debug message");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_debug_id() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_debug
+ *
+ * Purpose:	Prints debugging info about an object header.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Aug  6 1997
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-07-28
+ *		The ADDR argument is passed by value.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent, int fwidth)
+{
+    H5O_t	*oh = NULL;
+    unsigned	i, chunkno;
+    size_t	mesg_total = 0, chunk_total = 0;
+    int		*sequence;
+    haddr_t	tmp_addr;
+    herr_t	ret_value = SUCCEED;
+    void	*(*decode)(H5F_t*, hid_t, const uint8_t*, H5O_shared_t*);
+    herr_t      (*debug)(H5F_t*, hid_t, const void*, FILE*, int, int)=NULL;
+
+    FUNC_ENTER_NOAPI(H5O_debug, FAIL);
+
+    /* check args */
+    assert(f);
+    assert(H5F_addr_defined(addr));
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    if (NULL == (oh = H5AC_protect(f, dxpl_id, H5AC_OHDR, addr, NULL, NULL, H5AC_READ)))
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, FAIL, "unable to load object header");
+
+    /* debug */
+    HDfprintf(stream, "%*sObject Header...\n", indent, "");
+
+    HDfprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
+	      "Dirty:",
+	      (int) (oh->cache_info.is_dirty));
+    HDfprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
+	      "Version:",
+	      (int) (oh->version));
+    HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+	      "Header size (in bytes):",
+	      (unsigned) H5O_SIZEOF_HDR(f));
+    HDfprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
+	      "Number of links:",
+	      (int) (oh->nlink));
+    HDfprintf(stream, "%*s%-*s %u (%u)\n", indent, "", fwidth,
+	      "Number of messages (allocated):",
+	      (unsigned) (oh->nmesgs), (unsigned) (oh->alloc_nmesgs));
+    HDfprintf(stream, "%*s%-*s %u (%u)\n", indent, "", fwidth,
+	      "Number of chunks (allocated):",
+	      (unsigned) (oh->nchunks), (unsigned) (oh->alloc_nchunks));
+
+    /* debug each chunk */
+    for (i=0, chunk_total=0; i<oh->nchunks; i++) {
+	chunk_total += oh->chunk[i].size;
+	HDfprintf(stream, "%*sChunk %d...\n", indent, "", i);
+
+	HDfprintf(stream, "%*s%-*s %d\n", indent + 3, "", MAX(0, fwidth - 3),
+		  "Dirty:",
+		  (int) (oh->chunk[i].dirty));
+
+	HDfprintf(stream, "%*s%-*s %a\n", indent + 3, "", MAX(0, fwidth - 3),
+		  "Address:", oh->chunk[i].addr);
+
+	tmp_addr = addr + (hsize_t)H5O_SIZEOF_HDR(f);
+	if (0 == i && H5F_addr_ne(oh->chunk[i].addr, tmp_addr))
+	    HDfprintf(stream, "*** WRONG ADDRESS!\n");
+	HDfprintf(stream, "%*s%-*s %lu\n", indent + 3, "", MAX(0, fwidth - 3),
+		  "Size in bytes:",
+		  (unsigned long) (oh->chunk[i].size));
+    }
+
+    /* debug each message */
+    if (NULL==(sequence = H5MM_calloc(NELMTS(message_type_g)*sizeof(int))))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+    for (i=0, mesg_total=0; i<oh->nmesgs; i++) {
+	mesg_total += H5O_SIZEOF_MSGHDR(f) + oh->mesg[i].raw_size;
+	HDfprintf(stream, "%*sMessage %d...\n", indent, "", i);
+
+	/* check for bad message id */
+	if (oh->mesg[i].type->id < 0 ||
+	    oh->mesg[i].type->id >= (int)NELMTS(message_type_g)) {
+	    HDfprintf(stream, "*** BAD MESSAGE ID 0x%04x\n",
+		      oh->mesg[i].type->id);
+	    continue;
+	}
+
+	/* message name and size */
+	HDfprintf(stream, "%*s%-*s 0x%04x `%s' (%d)\n",
+		  indent + 3, "", MAX(0, fwidth - 3),
+		  "Message ID (sequence number):",
+		  (unsigned) (oh->mesg[i].type->id),
+		  oh->mesg[i].type->name,
+		  sequence[oh->mesg[i].type->id]++);
+	HDfprintf (stream, "%*s%-*s %s\n", indent+3, "", MAX (0, fwidth-3),
+		   "Shared:",
+		   (oh->mesg[i].flags & H5O_FLAG_SHARED) ? "Yes" : "No");
+	HDfprintf(stream, "%*s%-*s %s\n", indent + 3, "", MAX(0, fwidth - 3),
+		  "Constant:",
+		  (oh->mesg[i].flags & H5O_FLAG_CONSTANT) ? "Yes" : "No");
+	if (oh->mesg[i].flags & ~H5O_FLAG_BITS) {
+	    HDfprintf (stream, "%*s%-*s 0x%02x\n", indent+3,"",MAX(0,fwidth-3),
+		       "*** ADDITIONAL UNKNOWN FLAGS --->",
+		       oh->mesg[i].flags & ~H5O_FLAG_BITS);
+	}
+	HDfprintf(stream, "%*s%-*s %lu bytes\n", indent+3, "", MAX(0,fwidth-3),
+		  "Raw size in obj header:",
+		  (unsigned long) (oh->mesg[i].raw_size));
+	HDfprintf(stream, "%*s%-*s %d\n", indent + 3, "", MAX(0, fwidth - 3),
+		  "Chunk number:",
+		  (int) (oh->mesg[i].chunkno));
+	chunkno = oh->mesg[i].chunkno;
+	if (chunkno >= oh->nchunks)
+	    HDfprintf(stream, "*** BAD CHUNK NUMBER\n");
+
+	/* check the size */
+	if ((oh->mesg[i].raw + oh->mesg[i].raw_size >
+                 oh->chunk[chunkno].image + oh->chunk[chunkno].size) ||
+                (oh->mesg[i].raw < oh->chunk[chunkno].image)) {
+	    HDfprintf(stream, "*** BAD MESSAGE RAW ADDRESS\n");
+	}
+
+	/* decode the message */
+	if (oh->mesg[i].flags & H5O_FLAG_SHARED) {
+	    decode = H5O_SHARED->decode;
+	    debug = H5O_SHARED->debug;
+	} else {
+	    decode = oh->mesg[i].type->decode;
+	    debug = oh->mesg[i].type->debug;
+	}
+	if (NULL==oh->mesg[i].native && decode)
+	    oh->mesg[i].native = (decode)(f, dxpl_id, oh->mesg[i].raw, NULL);
+	if (NULL==oh->mesg[i].native)
+	    debug = NULL;
+
+	/* print the message */
+	HDfprintf(stream, "%*s%-*s\n", indent + 3, "", MAX(0, fwidth - 3),
+		  "Message Information:");
+	if (debug)
+	    (debug)(f, dxpl_id, oh->mesg[i].native, stream, indent+6, MAX(0, fwidth-6));
+	else
+	    HDfprintf(stream, "%*s<No info for this message>\n", indent + 6, "");
+
+	/* If the message is shared then also print the pointed-to message */
+	if (oh->mesg[i].flags & H5O_FLAG_SHARED) {
+	    H5O_shared_t *shared = (H5O_shared_t*)(oh->mesg[i].native);
+	    void *mesg = NULL;
+
+	    if (shared->in_gh) {
+		void *p = H5HG_read (f, dxpl_id, oh->mesg[i].native, NULL);
+		mesg = (oh->mesg[i].type->decode)(f, dxpl_id, p, oh->mesg[i].native);
+		H5MM_xfree (p);
+	    } else {
+		mesg = H5O_read_real(&(shared->u.ent), oh->mesg[i].type, 0, NULL, dxpl_id);
+	    }
+	    if (oh->mesg[i].type->debug) {
+		(oh->mesg[i].type->debug)(f, dxpl_id, mesg, stream, indent+3,
+					  MAX (0, fwidth-3));
+	    }
+	    H5O_free_real(oh->mesg[i].type, mesg);
+	}
+    }
+    sequence = H5MM_xfree(sequence);
+
+    if (mesg_total != chunk_total)
+	HDfprintf(stream, "*** TOTAL SIZE DOES NOT MATCH ALLOCATED SIZE!\n");
+
+done:
+    if (oh && H5AC_unprotect(f, dxpl_id, H5AC_OHDR, addr, oh, FALSE) < 0)
+	HDONE_ERROR(H5E_OHDR, H5E_PROTECT, FAIL, "unable to release object header");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Oattr.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Oattr.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Oattr.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,683 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5A_PACKAGE             /*prevent warning from including H5Apkg   */
+#define H5O_PACKAGE		/*suppress error about including H5Opkg	  */
+#define H5S_PACKAGE	        /*suppress error about including H5Spkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Apkg.h"		/* Attributes				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free Lists				*/
+#include "H5Gprivate.h"		/* Groups				*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Opkg.h"             /* Object headers			*/
+#include "H5Spkg.h"		/* Dataspaces				*/
+
+/* PRIVATE PROTOTYPES */
+static herr_t H5O_attr_encode (H5F_t *f, uint8_t *p, const void *mesg);
+static void *H5O_attr_decode (H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_attr_copy (const void *_mesg, void *_dest, unsigned update_flags);
+static size_t H5O_attr_size (const H5F_t *f, const void *_mesg);
+static herr_t H5O_attr_reset (void *_mesg);
+static herr_t H5O_attr_free (void *mesg);
+static herr_t H5O_attr_delete (H5F_t *f, hid_t dxpl_id, const void *_mesg, hbool_t adj_link);
+static herr_t H5O_attr_link(H5F_t *f, hid_t dxpl_id, const void *_mesg);
+static herr_t H5O_attr_debug (H5F_t *f, hid_t dxpl_id, const void *_mesg,
+			      FILE * stream, int indent, int fwidth);
+
+/* This message derives from H5O */
+const H5O_class_t H5O_ATTR[1] = {{
+    H5O_ATTR_ID,		/* message id number            */
+    "attribute",		/* message name for debugging   */
+    sizeof(H5A_t),		/* native message size          */
+    H5O_attr_decode,		/* decode message               */
+    H5O_attr_encode,		/* encode message               */
+    H5O_attr_copy,		/* copy the native value        */
+    H5O_attr_size,		/* size of raw message          */
+    H5O_attr_reset,		/* reset method                 */
+    H5O_attr_free,	        /* free method			*/
+    H5O_attr_delete,		/* file delete method		*/
+    H5O_attr_link,		/* link method			*/
+    NULL,			/* get share method		*/
+    NULL,			/* set share method		*/
+    H5O_attr_debug,		/* debug the message            */
+}};
+
+/* This is the initial version, which does not have support for shared datatypes */
+#define H5O_ATTR_VERSION	1
+
+/* This version allows support for shared datatypes */
+#define H5O_ATTR_VERSION_NEW	2
+
+/* Flags for attribute flag encoding */
+#define H5O_ATTR_FLAG_TYPE_SHARED       0x01
+
+/* Declare extern the free list for H5A_t's */
+H5FL_EXTERN(H5A_t);
+
+/* Declare extern the free list for attribute data buffers */
+H5FL_BLK_EXTERN(attr_buf);
+
+/* Declare external the free list for H5S_t's */
+H5FL_EXTERN(H5S_t);
+
+/* Declare external the free list for H5S_extent_t's */
+H5FL_EXTERN(H5S_extent_t);
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_attr_decode
+ PURPOSE
+    Decode a attribute message and return a pointer to a memory struct
+        with the decoded information
+ USAGE
+    void *H5O_attr_decode(f, raw_size, p)
+        H5F_t *f;               IN: pointer to the HDF5 file struct
+        size_t raw_size;        IN: size of the raw information buffer
+        const uint8_t *p;         IN: the raw information buffer
+ RETURNS
+    Pointer to the new message in native order on success, NULL on failure
+ DESCRIPTION
+        This function decodes the "raw" disk form of a attribute message
+    into a struct in memory native format.  The struct is allocated within this
+    function using malloc() and is returned to the caller.
+ *
+ * Modifications:
+ * 	Robb Matzke, 17 Jul 1998
+ *	Added padding for alignment.
+ *
+ * 	Robb Matzke, 20 Jul 1998
+ *	Added a version number at the beginning.
+ *
+ *	Raymond Lu, 8 April 2004
+ *	Changed Dataspace operation on H5S_simple_t to H5S_extent_t.
+ *
+--------------------------------------------------------------------------*/
+static void *
+H5O_attr_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
+{
+    H5A_t		*attr = NULL;
+    H5S_extent_t	*extent;	/*extent dimensionality information  */
+    size_t		name_len;   	/*attribute name length */
+    int		        version;	/*message version number*/
+    unsigned            flags=0;        /* Attribute flags */
+    H5A_t		*ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_attr_decode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+
+    if (NULL==(attr = H5FL_CALLOC(H5A_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* Version number */
+    version = *p++;
+    if (version!=H5O_ATTR_VERSION && version!=H5O_ATTR_VERSION_NEW)
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "bad version number for attribute message");
+
+    /* Get the flags byte if we have a later version of the attribute */
+    if(version>H5O_ATTR_VERSION)
+        flags = *p++;
+    else
+        p++;    /* Byte is unused when version<2 */
+
+    /*
+     * Decode the sizes of the parts of the attribute.  The sizes stored in
+     * the file are exact but the parts are aligned on 8-byte boundaries.
+     */
+    UINT16DECODE(p, name_len); /*including null*/
+    UINT16DECODE(p, attr->dt_size);
+    UINT16DECODE(p, attr->ds_size);
+
+    /* Decode and store the name */
+    if (NULL==(attr->name=H5MM_strdup((const char *)p)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    if(version < H5O_ATTR_VERSION_NEW)
+        p += H5O_ALIGN(name_len);    /* advance the memory pointer */
+    else
+        p += name_len;    /* advance the memory pointer */
+
+    /* decode the attribute datatype */
+    if (flags & H5O_ATTR_FLAG_TYPE_SHARED) {
+	H5O_shared_t *shared;   /* Shared information */
+
+        /* Get the shared information */
+	if (NULL == (shared = (H5O_SHARED->decode) (f, dxpl_id, p, NULL)))
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTDECODE, NULL, "unable to decode shared message");
+
+        /* Get the actual datatype information */
+        if((attr->dt= H5O_shared_read(f, dxpl_id, shared, H5O_DTYPE, NULL))==NULL)
+            HGOTO_ERROR(H5E_ATTR, H5E_CANTDECODE, NULL, "can't decode attribute datatype");
+
+        /* Free the shared information */
+        H5O_free_real(H5O_SHARED, shared);
+    } /* end if */
+    else {
+        if((attr->dt=(H5O_DTYPE->decode)(f,dxpl_id,p,NULL))==NULL)
+            HGOTO_ERROR(H5E_ATTR, H5E_CANTDECODE, NULL, "can't decode attribute datatype");
+    } /* end else */
+    if(version < H5O_ATTR_VERSION_NEW)
+        p += H5O_ALIGN(attr->dt_size);
+    else
+        p += attr->dt_size;
+
+    /* decode the attribute dataspace */
+    if (NULL==(attr->ds = H5FL_CALLOC(H5S_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    if((extent=(H5O_SDSPACE->decode)(f,dxpl_id,p,NULL))==NULL)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTDECODE, NULL, "can't decode attribute dataspace");
+
+    /* Copy the extent information */
+    HDmemcpy(&(attr->ds->extent),extent, sizeof(H5S_extent_t));
+
+    /* Release temporary extent information */
+    H5FL_FREE(H5S_extent_t,extent);
+
+    /* Default to entire dataspace being selected */
+    if(H5S_select_all(attr->ds,0)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTSET, NULL, "unable to set all selection");
+
+    if(version < H5O_ATTR_VERSION_NEW)
+        p += H5O_ALIGN(attr->ds_size);
+    else
+        p += attr->ds_size;
+
+    /* Compute the size of the data */
+    H5_ASSIGN_OVERFLOW(attr->data_size,H5S_GET_EXTENT_NPOINTS(attr->ds)*H5T_get_size(attr->dt),hsize_t,size_t);
+
+    /* Go get the data */
+    if(attr->data_size) {
+        if (NULL==(attr->data = H5FL_BLK_MALLOC(attr_buf, attr->data_size)))
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+        HDmemcpy(attr->data,p,attr->data_size);
+    }
+
+    /* Indicate that the fill values aren't to be written out */
+    attr->initialized=1;
+
+    /* Set return value */
+    ret_value=attr;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_attr_encode
+ PURPOSE
+    Encode a simple attribute message
+ USAGE
+    herr_t H5O_attr_encode(f, raw_size, p, mesg)
+        H5F_t *f;         IN: pointer to the HDF5 file struct
+        const uint8 *p;         IN: the raw information buffer
+        const void *mesg;       IN: Pointer to the simple datatype struct
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+        This function encodes the native memory form of the attribute
+    message in the "raw" disk form.
+ *
+ * Modifications:
+ * 	Robb Matzke, 17 Jul 1998
+ *	Added padding for alignment.
+ *
+ * 	Robb Matzke, 20 Jul 1998
+ *	Added a version number at the beginning.
+ *
+ *	Raymond Lu, 8 April 2004
+ *	For data space, changed the operation on H5S_simple_t to
+ *	H5S_extent_t
+ *
+--------------------------------------------------------------------------*/
+static herr_t
+H5O_attr_encode(H5F_t *f, uint8_t *p, const void *mesg)
+{
+    const H5A_t *attr = (const H5A_t *) mesg;
+    size_t      name_len;   /* Attribute name length */
+    unsigned    version;        /* Attribute version */
+    hbool_t     type_shared;    /* Flag to indicate that a shared datatype is used for this attribute */
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_attr_encode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert(attr);
+
+    /* Check whether datatype is shared */
+    if(H5T_committed(attr->dt))
+        type_shared = TRUE;
+    else
+        type_shared = FALSE;
+
+    /* Check which version to write out */
+    if(type_shared)
+        version = H5O_ATTR_VERSION_NEW;  /* Write out new version if shared datatype */
+    else
+        version = H5O_ATTR_VERSION;
+
+    /* Encode Version */
+    *p++ = version;
+
+    /* Set attribute flags if version >1 */
+    if(version>H5O_ATTR_VERSION)
+        *p++ = (type_shared ? H5O_ATTR_FLAG_TYPE_SHARED : 0 );    /* Set flags for attribute */
+    else
+        *p++ = 0; /* Reserved, for version <2 */
+
+    /*
+     * Encode the lengths of the various parts of the attribute message. The
+     * encoded lengths are exact but we pad each part except the data to be a
+     * multiple of eight bytes (in the first version).
+     */
+    name_len = HDstrlen(attr->name)+1;
+    UINT16ENCODE(p, name_len);
+    UINT16ENCODE(p, attr->dt_size);
+    UINT16ENCODE(p, attr->ds_size);
+
+    /*
+     * Write the name including null terminator padded to the correct number
+     * of bytes.
+     */
+    HDmemcpy(p, attr->name, name_len);
+    HDmemset(p+name_len, 0, H5O_ALIGN(name_len)-name_len);
+    if(version < H5O_ATTR_VERSION_NEW)
+        p += H5O_ALIGN(name_len);
+    else
+        p += name_len;
+
+    /* encode the attribute datatype */
+    if(type_shared) {
+        H5O_shared_t	sh_mesg;
+
+        /* Reset shared message information */
+        HDmemset(&sh_mesg,0,sizeof(H5O_shared_t));
+
+        /* Get shared message information from datatype */
+        if ((H5O_DTYPE->get_share)(f, attr->dt, &sh_mesg/*out*/)<0)
+            HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "can't encode shared attribute datatype");
+
+        /* Encode shared message information for datatype */
+        if((H5O_SHARED->encode)(f,p,&sh_mesg)<0)
+            HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "can't encode shared attribute datatype");
+    } /* end if */
+    else {
+        /* Encode datatype information */
+        if((H5O_DTYPE->encode)(f,p,attr->dt)<0)
+            HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "can't encode attribute datatype");
+    } /* end else */
+    if(version < H5O_ATTR_VERSION_NEW) {
+        HDmemset(p+attr->dt_size, 0, H5O_ALIGN(attr->dt_size)-attr->dt_size);
+        p += H5O_ALIGN(attr->dt_size);
+    } /* end if */
+    else
+        p += attr->dt_size;
+
+    /* encode the attribute dataspace */
+    if((H5O_SDSPACE->encode)(f,p,&(attr->ds->extent))<0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "can't encode attribute dataspace");
+    if(version < H5O_ATTR_VERSION_NEW) {
+        HDmemset(p+attr->ds_size, 0, H5O_ALIGN(attr->ds_size)-attr->ds_size);
+        p += H5O_ALIGN(attr->ds_size);
+    } /* end if */
+    else
+        p += attr->ds_size;
+
+    /* Store attribute data */
+    if(attr->data)
+        HDmemcpy(p,attr->data,attr->data_size);
+    else
+        HDmemset(p,0,attr->data_size);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_attr_copy
+ PURPOSE
+    Copies a message from MESG to DEST, allocating DEST if necessary.
+ USAGE
+    void *H5O_attr_copy(mesg, dest)
+        const void *mesg;       IN: Pointer to the source attribute struct
+        const void *dest;       IN: Pointer to the destination attribute struct
+ RETURNS
+    Pointer to DEST on success, NULL on failure
+ DESCRIPTION
+        This function copies a native (memory) attribute message,
+    allocating the destination structure if necessary.
+--------------------------------------------------------------------------*/
+static void *
+H5O_attr_copy(const void *_src, void *_dst, unsigned update_flags)
+{
+    const H5A_t            *src = (const H5A_t *) _src;
+    void                   *ret_value;  /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_attr_copy);
+
+    /* check args */
+    assert(src);
+
+    /* copy */
+    if (NULL == (ret_value = H5A_copy(_dst,src,update_flags)))
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, NULL, "can't copy attribute");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_attr_size
+ PURPOSE
+    Return the raw message size in bytes
+ USAGE
+    size_t H5O_attr_size(f, mesg)
+        H5F_t *f;         IN: pointer to the HDF5 file struct
+        const void *mesg;     IN: Pointer to the source attribute struct
+ RETURNS
+    Size of message on success, 0 on failure
+ DESCRIPTION
+        This function returns the size of the raw attribute message on
+    success.  (Not counting the message type or size fields, only the data
+    portion of the message).  It doesn't take into account alignment.
+ *
+ * Modified:
+ * 	Robb Matzke, 17 Jul 1998
+ *	Added padding between message parts for alignment.
+--------------------------------------------------------------------------*/
+static size_t
+H5O_attr_size(const H5F_t UNUSED *f, const void *_mesg)
+{
+    const H5A_t         *attr = (const H5A_t *)_mesg;
+    size_t		name_len;
+    unsigned            version;        /* Attribute version */
+    hbool_t             type_shared;    /* Flag to indicate that a shared datatype is used for this attribute */
+    size_t		ret_value = 0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_attr_size);
+
+    assert(attr);
+
+    name_len = HDstrlen(attr->name)+1;
+
+    /* Check whether datatype is shared */
+    if(H5T_committed(attr->dt))
+        type_shared = TRUE;
+    else
+        type_shared = FALSE;
+
+    /* Check which version to write out */
+    if(type_shared)
+        version = H5O_ATTR_VERSION_NEW;  /* Write out new version if shared datatype */
+    else
+        version = H5O_ATTR_VERSION;
+
+    if(version < H5O_ATTR_VERSION_NEW)
+        ret_value = 1 +				/*version               */
+                    1 +				/*reserved		*/
+                    2 +				/*name size inc. null	*/
+                    2 +				/*type size		*/
+                    2 +				/*space size		*/
+                    H5O_ALIGN(name_len)	+	/*attribute name	*/
+                    H5O_ALIGN(attr->dt_size) +	/*data type		*/
+                    H5O_ALIGN(attr->ds_size) +	/*data space		*/
+                    attr->data_size;		/*the data itself	*/
+    else
+        ret_value = 1 +				/*version               */
+                    1 +				/*flags			*/
+                    2 +				/*name size inc. null	*/
+                    2 +				/*type size		*/
+                    2 +				/*space size		*/
+                    name_len	+		/*attribute name	*/
+                    attr->dt_size +		/*data type		*/
+                    attr->ds_size +		/*data space		*/
+                    attr->data_size;		/*the data itself	*/
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_attr_reset
+ *
+ * Purpose:     Frees resources within a attribute message, but doesn't free
+ *              the message itself.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_attr_reset(void *_mesg)
+{
+    H5A_t                  *attr = (H5A_t *) _mesg;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_attr_reset);
+
+    if (attr)
+        H5A_free(attr);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_attr_free
+ *
+ * Purpose:	Free's the message
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, November 18, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_attr_free (void *mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_attr_free);
+
+    assert (mesg);
+
+    H5FL_FREE(H5A_t,mesg);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5O_attr_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_attr_delete
+ *
+ * Purpose:     Free file space referenced by message
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, September 26, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_attr_delete(H5F_t UNUSED *f, hid_t dxpl_id, const void *_mesg, hbool_t adj_link)
+{
+    const H5A_t            *attr = (const H5A_t *) _mesg;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_attr_delete);
+
+    /* check args */
+    assert(f);
+    assert(attr);
+
+    /* Check whether datatype is shared */
+    if(H5T_committed(attr->dt)) {
+        /* Decrement the reference count on the shared datatype, if requested */
+        if(adj_link)
+            if(H5T_link(attr->dt, -1, dxpl_id)<0)
+                HGOTO_ERROR (H5E_OHDR, H5E_LINK, FAIL, "unable to adjust shared datatype link count")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_attr_delete() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_attr_link
+ *
+ * Purpose:     Increment reference count on any objects referenced by
+ *              message
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, September 26, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_attr_link(H5F_t UNUSED *f, hid_t dxpl_id, const void *_mesg)
+{
+    const H5A_t            *attr = (const H5A_t *) _mesg;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_attr_link);
+
+    /* check args */
+    assert(f);
+    assert(attr);
+
+    /* Check whether datatype is shared */
+    if(H5T_committed(attr->dt)) {
+        /* Increment the reference count on the shared datatype */
+        if(H5T_link(attr->dt,1,dxpl_id)<0)
+            HGOTO_ERROR (H5E_OHDR, H5E_LINK, FAIL, "unable to adjust shared datatype link count");
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_attr_link() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_attr_debug
+ PURPOSE
+    Prints debugging information for an attribute message
+ USAGE
+    void *H5O_attr_debug(f, mesg, stream, indent, fwidth)
+        H5F_t *f;               IN: pointer to the HDF5 file struct
+        const void *mesg;       IN: Pointer to the source attribute struct
+        FILE *stream;           IN: Pointer to the stream for output data
+        int indent;            IN: Amount to indent information by
+        int fwidth;            IN: Field width (?)
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+        This function prints debugging output to the stream passed as a
+    parameter.
+--------------------------------------------------------------------------*/
+static herr_t
+H5O_attr_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE * stream, int indent,
+	       int fwidth)
+{
+    const H5A_t *mesg = (const H5A_t *)_mesg;
+    H5O_shared_t	sh_mesg;        /* Shared message information */
+    void *dt_mesg;                      /* Pointer to datatype message to dump */
+    herr_t      (*debug)(H5F_t*, hid_t, const void*, FILE*, int, int)=NULL;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_attr_debug);
+
+    /* check args */
+    assert(f);
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    fprintf(stream, "%*s%-*s \"%s\"\n", indent, "", fwidth,
+	    "Name:",
+	    mesg->name);
+    fprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+	    "Initialized:",
+	    (unsigned int)mesg->initialized);
+    fprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+	    "Opened:",
+	    (unsigned int)mesg->ent_opened);
+    fprintf(stream, "%*sSymbol table entry...\n", indent, "");
+    H5G_ent_debug(f, dxpl_id, &(mesg->ent), stream, indent+3, MAX(0, fwidth-3),
+		  HADDR_UNDEF);
+
+    fprintf(stream, "%*sData type...\n", indent, "");
+    fprintf(stream, "%*s%-*s %lu\n", indent+3, "", MAX(0,fwidth-3),
+	    "Size:",
+	    (unsigned long)(mesg->dt_size));
+    fprintf (stream, "%*s%-*s %s\n", indent+3, "", MAX(0,fwidth-3),
+               "Shared:",
+               (H5T_committed(mesg->dt) ? "Yes" : "No")
+               );
+    if(H5T_committed(mesg->dt)) {
+        /* Reset shared message information */
+        HDmemset(&sh_mesg,0,sizeof(H5O_shared_t));
+
+        /* Get shared message information from datatype */
+        if ((H5O_DTYPE->get_share)(f, mesg->dt, &sh_mesg/*out*/)<0)
+            HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "can't retrieve shared message information");
+
+        debug=H5O_SHARED->debug;
+        dt_mesg=&sh_mesg;
+    } /* end if */
+    else {
+        debug=H5O_DTYPE->debug;
+        dt_mesg=mesg->dt;
+    } /* end else */
+    if(debug)
+        (debug)(f, dxpl_id, dt_mesg, stream, indent+3, MAX(0, fwidth-3));
+    else
+        fprintf(stream, "%*s<No info for this message>\n", indent + 6, "");
+
+    fprintf(stream, "%*sData space...\n", indent, "");
+    fprintf(stream, "%*s%-*s %lu\n", indent+3, "", MAX(0,fwidth-3),
+	    "Size:",
+	    (unsigned long)(mesg->ds_size));
+    H5S_debug(f, dxpl_id, mesg->ds, stream, indent+3, MAX(0, fwidth-3));
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Obogus.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Obogus.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Obogus.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,222 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Obogus.c
+ *                      Jan 21 2003
+ *                      Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *
+ * Purpose:             "bogus" message.  This message is guaranteed to never
+ *                      be found in a valid HDF5 file and is only used to
+ *                      generate a test file which verifies the library's
+ *                      correct operation when parsing unknown object header
+ *                      messages.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define H5O_PACKAGE		/*suppress error about including H5Opkg	  */
+
+#include "H5private.h"
+#include "H5Eprivate.h"
+#include "H5MMprivate.h"
+#include "H5Opkg.h"             /* Object header functions                 */
+
+#ifdef H5O_ENABLE_BOGUS
+
+/* PRIVATE PROTOTYPES */
+static void *H5O_bogus_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
+static herr_t H5O_bogus_encode(H5F_t *f, uint8_t *p, const void *_mesg);
+static size_t H5O_bogus_size(const H5F_t *f, const void *_mesg);
+static herr_t H5O_bogus_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE * stream,
+			     int indent, int fwidth);
+
+/* This message derives from H5O */
+const H5O_class_t H5O_BOGUS[1] = {{
+    H5O_BOGUS_ID,            	/*message id number             */
+    "bogus",                 	/*message name for debugging    */
+    0,     	                /*native message size           */
+    H5O_bogus_decode,        	/*decode message                */
+    H5O_bogus_encode,        	/*encode message                */
+    NULL,          	        /*copy the native value         */
+    H5O_bogus_size,          	/*raw message size              */
+    NULL,         	        /*free internal memory          */
+    NULL,		        /*free method			*/
+    NULL,		        /* file delete method		*/
+    NULL,			/* link method			*/
+    NULL,		    	/*get share method		*/
+    NULL,			/*set share method		*/
+    H5O_bogus_debug,         	/*debug the message             */
+}};
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_bogus_decode
+ *
+ * Purpose:     Decode a "bogus" message and return a pointer to a new
+ *              native message struct.
+ *
+ * Return:      Success:        Ptr to new message in native struct.
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  Quincey Koziol
+ *              koziol at ncsa.uiuc.edu
+ *              Jan 21 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_bogus_decode(H5F_t UNUSED *f, hid_t dxpl_id, const uint8_t *p,
+		H5O_shared_t UNUSED *sh)
+{
+    H5O_bogus_t *mesg=NULL;
+    void *ret_value;            /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_bogus_decode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert(!sh);
+
+    /* Allocate the bogus message */
+    if (NULL==(mesg = H5MM_calloc(sizeof(H5O_bogus_t))))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* decode */
+    UINT32DECODE(p, mesg->u);
+
+    /* Validate the bogus info */
+    if(mesg->u!=H5O_BOGUS_VALUE)
+	HGOTO_ERROR (H5E_OHDR, H5E_BADVALUE, NULL, "invalid bogus value :-)");
+
+    /* Set return value */
+    ret_value=mesg;
+
+done:
+    if(ret_value==NULL && mesg!=NULL)
+        H5MM_xfree(mesg);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_bogus_decode() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_bogus_encode
+ *
+ * Purpose:     Encodes a "bogus" message.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *              koziol at ncsa.uiuc.edu
+ *              Jan 21 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_bogus_encode(H5F_t UNUSED *f, uint8_t *p, const void UNUSED *mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_bogus_encode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert(mesg);
+
+    /* encode */
+    UINT32ENCODE(p, H5O_BOGUS_VALUE);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5O_bogus_encode() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_bogus_size
+ *
+ * Purpose:     Returns the size of the raw message in bytes not
+ *              counting the message typ or size fields, but only the data
+ *              fields.  This function doesn't take into account
+ *              alignment.
+ *
+ * Return:      Success:        Message data size in bytes w/o alignment.
+ *
+ *              Failure:        Negative
+ *
+ * Programmer:  Quincey Koziol
+ *              koziol at ncsa.uiuc.edu
+ *              Jan 21 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5O_bogus_size(const H5F_t UNUSED *f, const void UNUSED *mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_bogus_size);
+
+    /* check args */
+    assert(f);
+
+    FUNC_LEAVE_NOAPI(4);
+} /* end H5O_bogus_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_bogus_debug
+ *
+ * Purpose:     Prints debugging info for the message.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *              koziol at ncsa.uiuc.edu
+ *              Jan 21 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_bogus_debug(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *_mesg, FILE *stream,
+	       int indent, int fwidth)
+{
+    const H5O_bogus_t	*mesg = (const H5O_bogus_t *)_mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_name_debug);
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    fprintf(stream, "%*s%-*s `%u'\n", indent, "", fwidth,
+            "Bogus Value:", mesg->u);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+#endif /* H5O_ENABLE_BOGUS */
+
+

Added: packages/hdf5/branches/upstream/current/src/H5Ocont.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Ocont.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Ocont.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,252 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Ocont.c
+ *                      Aug  6 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             The object header continuation message.  This
+ *                      message is only generated and read from within
+ *                      the H5O package.  Therefore, do not change
+ *                      any definitions in this file!
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define H5O_PACKAGE		/*suppress error about including H5Opkg	  */
+
+#include "H5private.h"
+#include "H5Eprivate.h"
+#include "H5FLprivate.h"	/* Free Lists				*/
+#include "H5MMprivate.h"
+#include "H5Opkg.h"             /* Object header functions                 */
+
+
+/* PRIVATE PROTOTYPES */
+static void *H5O_cont_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
+static herr_t H5O_cont_encode(H5F_t *f, uint8_t *p, const void *_mesg);
+static size_t H5O_cont_size(const H5F_t *f, const void *_mesg);
+static herr_t H5O_cont_free(void *mesg);
+static herr_t H5O_cont_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE * stream,
+			     int indent, int fwidth);
+
+/* This message derives from H5O */
+const H5O_class_t H5O_CONT[1] = {{
+    H5O_CONT_ID,            	/*message id number             */
+    "hdr continuation",     	/*message name for debugging    */
+    sizeof(H5O_cont_t),     	/*native message size           */
+    H5O_cont_decode,        	/*decode message                */
+    H5O_cont_encode,        	/*encode message                */
+    NULL,                   	/*no copy method                */
+    H5O_cont_size,          	/*size of header continuation   */
+    NULL,                   	/*reset method			*/
+    H5O_cont_free,	        /* free method			*/
+    NULL,		        /* file delete method		*/
+    NULL,			/* link method			*/
+    NULL, 		    	/*get share method		*/
+    NULL,		    	/*set share method		*/
+    H5O_cont_debug,         	/*debugging                     */
+}};
+
+/* Declare the free list for H5O_cont_t's */
+H5FL_DEFINE(H5O_cont_t);
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_cont_decode
+ *
+ * Purpose:     Decode the raw header continuation message.
+ *
+ * Return:      Success:        Ptr to the new native message
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug  6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_cont_decode(H5F_t *f, hid_t UNUSED dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
+{
+    H5O_cont_t             *cont = NULL;
+    void                   *ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_cont_decode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert (!sh);
+
+    /* decode */
+    if (NULL==(cont = H5FL_MALLOC(H5O_cont_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    H5F_addr_decode(f, &p, &(cont->addr));
+    H5F_DECODE_LENGTH(f, p, cont->size);
+    cont->chunkno=0;
+
+    /* Set return value */
+    ret_value=cont;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_cont_encode
+ *
+ * Purpose:     Encodes a continuation message.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug  7 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_cont_encode(H5F_t *f, uint8_t *p, const void *_mesg)
+{
+    const H5O_cont_t       *cont = (const H5O_cont_t *) _mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_cont_encode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert(cont);
+
+    /* encode */
+    H5F_addr_encode(f, &p, cont->addr);
+    H5F_ENCODE_LENGTH(f, p, cont->size);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_cont_size
+ *
+ * Purpose:     Returns the size of the raw message in bytes not counting
+ *              the message type or size fields, but only the data fields.
+ *              This function doesn't take into account alignment.
+ *
+ * Return:      Success:        Message data size in bytes without alignment.
+ *
+ *              Failure:        zero
+ *
+ * Programmer:  Quincey Koziol
+ *              koziol at ncsa.uiuc.edu
+ *              Sep  6 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5O_cont_size(const H5F_t *f, const void UNUSED *_mesg)
+{
+    size_t ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_cont_size)
+
+    /* Set return value */
+    ret_value = H5F_SIZEOF_ADDR(f) +    /* Continuation header address */
+                H5F_SIZEOF_SIZE(f);     /* Continuation header length */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_cont_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_cont_free
+ *
+ * Purpose:	Free's the message
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, November 15, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_cont_free (void *mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_cont_free);
+
+    assert (mesg);
+
+    H5FL_FREE(H5O_cont_t,mesg);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5O_cont_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_cont_debug
+ *
+ * Purpose:     Prints debugging info.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug  6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_cont_debug(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *_mesg, FILE * stream,
+	       int indent, int fwidth)
+{
+    const H5O_cont_t       *cont = (const H5O_cont_t *) _mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_cont_debug);
+
+    /* check args */
+    assert(f);
+    assert(cont);
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+	      "Continuation address:", cont->addr);
+
+    HDfprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
+	      "Continuation size in bytes:",
+	      (unsigned long) (cont->size));
+    HDfprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
+	      "Points to chunk number:",
+	      (int) (cont->chunkno));
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Odtype.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Odtype.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Odtype.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1478 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5O_PACKAGE		/*suppress error about including H5Opkg	  */
+#define H5T_PACKAGE		/*prevent warning from including H5Tpkg   */
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free Lists				*/
+#include "H5Gprivate.h"		/* Groups				*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Opkg.h"             /* Object headers			*/
+#include "H5Tpkg.h"		/* Datatypes				*/
+
+
+/* PRIVATE PROTOTYPES */
+static herr_t H5O_dtype_encode (H5F_t *f, uint8_t *p, const void *mesg);
+static void *H5O_dtype_decode (H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_dtype_copy (const void *_mesg, void *_dest, unsigned update_flags);
+static size_t H5O_dtype_size (const H5F_t *f, const void *_mesg);
+static herr_t H5O_dtype_reset (void *_mesg);
+static herr_t H5O_dtype_free (void *_mesg);
+static herr_t H5O_dtype_get_share (H5F_t *f, const void *_mesg,
+				   H5O_shared_t *sh);
+static herr_t H5O_dtype_set_share (H5F_t *f, void *_mesg,
+				   const H5O_shared_t *sh);
+static herr_t H5O_dtype_debug (H5F_t *f, hid_t dxpl_id, const void *_mesg,
+			       FILE * stream, int indent, int fwidth);
+
+/* This message derives from H5O */
+const H5O_class_t H5O_DTYPE[1] = {{
+    H5O_DTYPE_ID,		/* message id number		*/
+    "data_type",		/* message name for debugging	*/
+    sizeof(H5T_t),		/* native message size		*/
+    H5O_dtype_decode,		/* decode message		*/
+    H5O_dtype_encode,		/* encode message		*/
+    H5O_dtype_copy,		/* copy the native value	*/
+    H5O_dtype_size,		/* size of raw message		*/
+    H5O_dtype_reset,		/* reset method			*/
+    H5O_dtype_free,		/* free method			*/
+    NULL,		        /* file delete method		*/
+    NULL,			/* link method			*/
+    H5O_dtype_get_share,	/* get share method		*/
+    H5O_dtype_set_share,	/* set share method		*/
+    H5O_dtype_debug,		/* debug the message		*/
+}};
+
+/* This is the correct version to create all datatypes which don't contain
+ * array datatypes (atomic types, compound datatypes without array fields,
+ * vlen sequences of objects which aren't arrays, etc.) */
+#define H5O_DTYPE_VERSION_COMPAT	1
+
+/* This is the correct version to create all datatypes which contain H5T_ARRAY
+ * class objects (array definitely, potentially compound & vlen sequences also) */
+#define H5O_DTYPE_VERSION_UPDATED	2
+
+/* Declare external the free list for H5T_t's */
+H5FL_EXTERN(H5T_t);
+H5FL_EXTERN(H5T_shared_t);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_dtype_decode_helper
+ *
+ * Purpose:	Decodes a datatype
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, December  8, 1997
+ *
+ * Modifications:
+ *		Robb Matzke, Thursday, May 20, 1999
+ *		Added support for bitfields and opaque datatypes.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_dtype_decode_helper(H5F_t *f, const uint8_t **pp, H5T_t *dt)
+{
+    unsigned		flags, version;
+    unsigned		i, j;
+    size_t		z;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_dtype_decode_helper);
+
+    /* check args */
+    assert(pp && *pp);
+    assert(dt && dt->shared);
+
+    /* decode */
+    UINT32DECODE(*pp, flags);
+    version = (flags>>4) & 0x0f;
+    if (version!=H5O_DTYPE_VERSION_COMPAT && version!=H5O_DTYPE_VERSION_UPDATED)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTLOAD, FAIL, "bad version number for datatype message");
+    dt->shared->type = (H5T_class_t)(flags & 0x0f);
+    flags >>= 8;
+    UINT32DECODE(*pp, dt->shared->size);
+
+    switch (dt->shared->type) {
+        case H5T_INTEGER:
+            /*
+             * Integer types...
+             */
+            dt->shared->u.atomic.order = (flags & 0x1) ? H5T_ORDER_BE : H5T_ORDER_LE;
+            dt->shared->u.atomic.lsb_pad = (flags & 0x2) ? H5T_PAD_ONE : H5T_PAD_ZERO;
+            dt->shared->u.atomic.msb_pad = (flags & 0x4) ? H5T_PAD_ONE : H5T_PAD_ZERO;
+            dt->shared->u.atomic.u.i.sign = (flags & 0x8) ? H5T_SGN_2 : H5T_SGN_NONE;
+            UINT16DECODE(*pp, dt->shared->u.atomic.offset);
+            UINT16DECODE(*pp, dt->shared->u.atomic.prec);
+            break;
+
+        case H5T_BITFIELD:
+            /*
+             * Bit fields...
+             */
+            dt->shared->u.atomic.order = (flags & 0x1) ? H5T_ORDER_BE : H5T_ORDER_LE;
+            dt->shared->u.atomic.lsb_pad = (flags & 0x2) ? H5T_PAD_ONE : H5T_PAD_ZERO;
+            dt->shared->u.atomic.msb_pad = (flags & 0x4) ? H5T_PAD_ONE : H5T_PAD_ZERO;
+            UINT16DECODE(*pp, dt->shared->u.atomic.offset);
+            UINT16DECODE(*pp, dt->shared->u.atomic.prec);
+            break;
+
+        case H5T_OPAQUE:
+            /*
+             * Opaque types...
+             */
+            z = flags & (H5T_OPAQUE_TAG_MAX - 1);
+            assert(0==(z&0x7)); /*must be aligned*/
+            if (NULL==(dt->shared->u.opaque.tag=H5MM_malloc(z+1)))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+            HDmemcpy(dt->shared->u.opaque.tag, *pp, z);
+            dt->shared->u.opaque.tag[z] = '\0';
+            *pp += z;
+            break;
+
+        case H5T_FLOAT:
+            /*
+             * Floating-point types...
+             */
+            dt->shared->u.atomic.order = (flags & 0x1) ? H5T_ORDER_BE : H5T_ORDER_LE;
+            dt->shared->u.atomic.lsb_pad = (flags & 0x2) ? H5T_PAD_ONE : H5T_PAD_ZERO;
+            dt->shared->u.atomic.msb_pad = (flags & 0x4) ? H5T_PAD_ONE : H5T_PAD_ZERO;
+            dt->shared->u.atomic.u.f.pad = (flags & 0x8) ? H5T_PAD_ONE : H5T_PAD_ZERO;
+            switch ((flags >> 4) & 0x03) {
+                case 0:
+                    dt->shared->u.atomic.u.f.norm = H5T_NORM_NONE;
+                    break;
+                case 1:
+                    dt->shared->u.atomic.u.f.norm = H5T_NORM_MSBSET;
+                    break;
+                case 2:
+                    dt->shared->u.atomic.u.f.norm = H5T_NORM_IMPLIED;
+                    break;
+                default:
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown floating-point normalization");
+            }
+            dt->shared->u.atomic.u.f.sign = (flags >> 8) & 0xff;
+            UINT16DECODE(*pp, dt->shared->u.atomic.offset);
+            UINT16DECODE(*pp, dt->shared->u.atomic.prec);
+            dt->shared->u.atomic.u.f.epos = *(*pp)++;
+            dt->shared->u.atomic.u.f.esize = *(*pp)++;
+            assert(dt->shared->u.atomic.u.f.esize > 0);
+            dt->shared->u.atomic.u.f.mpos = *(*pp)++;
+            dt->shared->u.atomic.u.f.msize = *(*pp)++;
+            assert(dt->shared->u.atomic.u.f.msize > 0);
+            UINT32DECODE(*pp, dt->shared->u.atomic.u.f.ebias);
+            break;
+
+        case H5T_COMPOUND:
+            /*
+             * Compound datatypes...
+             */
+            dt->shared->u.compnd.nmembs = flags & 0xffff;
+            assert(dt->shared->u.compnd.nmembs > 0);
+            dt->shared->u.compnd.packed = TRUE; /* Start off packed */
+            dt->shared->u.compnd.nalloc = dt->shared->u.compnd.nmembs;
+            dt->shared->u.compnd.memb = H5MM_calloc(dt->shared->u.compnd.nalloc*
+                            sizeof(H5T_cmemb_t));
+            if (NULL==dt->shared->u.compnd.memb)
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+            for (i = 0; i < dt->shared->u.compnd.nmembs; i++) {
+                unsigned ndims=0;     /* Number of dimensions of the array field */
+                hsize_t dim[H5O_LAYOUT_NDIMS];  /* Dimensions of the array */
+                int perm[H5O_LAYOUT_NDIMS];     /* Dimension permutations */
+                unsigned perm_word=0;    /* Dimension permutation information */
+                H5T_t *array_dt;    /* Temporary pointer to the array datatype */
+                H5T_t *temp_type;   /* Temporary pointer to the field's datatype */
+
+                /* Decode the field name */
+                dt->shared->u.compnd.memb[i].name = H5MM_xstrdup((const char *)*pp);
+                /*multiple of 8 w/ null terminator */
+                *pp += ((HDstrlen((const char *)*pp) + 8) / 8) * 8;
+
+                /* Decode the field offset */
+                UINT32DECODE(*pp, dt->shared->u.compnd.memb[i].offset);
+
+                /* Older versions of the library allowed a field to have
+                 * intrinsic 'arrayness'.  Newer versions of the library
+                 * use the separate array datatypes. */
+                if(version==H5O_DTYPE_VERSION_COMPAT) {
+                    /* Decode the number of dimensions */
+                    ndims = *(*pp)++;
+                    assert(ndims <= 4);
+                    *pp += 3;		/*reserved bytes */
+
+                    /* Decode dimension permutation (unused currently) */
+                    UINT32DECODE(*pp, perm_word);
+
+                    /* Skip reserved bytes */
+                    *pp += 4;
+
+                    /* Decode array dimension sizes */
+                    for (j=0; j<4; j++)
+                        UINT32DECODE(*pp, dim[j]);
+                } /* end if */
+
+                /* Allocate space for the field's datatype */
+                if(NULL == (temp_type = H5T_alloc()))
+                    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+
+                /* Decode the field's datatype information */
+                if (H5O_dtype_decode_helper(f, pp, temp_type)<0) {
+                    for (j=0; j<=i; j++)
+                        H5MM_xfree(dt->shared->u.compnd.memb[j].name);
+                    H5MM_xfree(dt->shared->u.compnd.memb);
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode member type");
+                }
+
+                /* Go create the array datatype now, for older versions of the datatype message */
+                if(version==H5O_DTYPE_VERSION_COMPAT) {
+                    /* Check if this member is an array field */
+                    if(ndims>0) {
+                        /* Set up the permutation vector for the array create */
+                        for (j=0; j<ndims; j++)
+                            perm[j]=(perm_word>>(j*8))&0xff;
+
+                        /* Create the array datatype for the field */
+                        if ((array_dt=H5T_array_create(temp_type,(int)ndims,dim,perm))==NULL) {
+                            for (j=0; j<=i; j++)
+                                H5MM_xfree(dt->shared->u.compnd.memb[j].name);
+                            H5MM_xfree(dt->shared->u.compnd.memb);
+                            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to create array datatype");
+                        }
+
+                        /* Close the base type for the array */
+                        H5T_close(temp_type);
+
+                        /* Make the array type the type that is set for the field */
+                        temp_type=array_dt;
+                    } /* end if */
+                } /* end if */
+
+                /*
+                 * Set the "force conversion" flag if VL datatype fields exist in this
+                 * type or any component types
+                 */
+                if(temp_type->shared->force_conv==TRUE)
+                    dt->shared->force_conv=TRUE;
+
+                /* Member size */
+                dt->shared->u.compnd.memb[i].size = temp_type->shared->size;
+
+                /* Set the field datatype (finally :-) */
+                dt->shared->u.compnd.memb[i].type=temp_type;
+
+                /* Check if the datatype stayed packed */
+                if(dt->shared->u.compnd.packed) {
+                    /* Check if the member type is packed */
+                    if(H5T_is_packed(temp_type)>0) {
+                        if(i==0) {
+                            /* If the is the first member, the datatype is not packed
+                             * if the first member isn't at offset 0
+                             */
+                            if(dt->shared->u.compnd.memb[i].offset>0)
+                                dt->shared->u.compnd.packed=FALSE;
+                        } /* end if */
+                        else {
+                            /* If the is not the first member, the datatype is not
+                             * packed if the new member isn't adjoining the previous member
+                             */
+                            if(dt->shared->u.compnd.memb[i].offset!=(dt->shared->u.compnd.memb[i-1].offset+dt->shared->u.compnd.memb[i-1].size))
+                                dt->shared->u.compnd.packed=FALSE;
+                        } /* end else */
+                    } /* end if */
+                    else
+                        dt->shared->u.compnd.packed=FALSE;
+                } /* end if */
+            }
+            break;
+
+        case H5T_ENUM:
+            /*
+             * Enumeration datatypes...
+             */
+            dt->shared->u.enumer.nmembs = dt->shared->u.enumer.nalloc = flags & 0xffff;
+            if(NULL == (dt->shared->parent = H5T_alloc()))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+            if (H5O_dtype_decode_helper(f, pp, dt->shared->parent)<0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode parent datatype");
+            if (NULL==(dt->shared->u.enumer.name=H5MM_calloc(dt->shared->u.enumer.nalloc * sizeof(char*))) ||
+                    NULL==(dt->shared->u.enumer.value=H5MM_calloc(dt->shared->u.enumer.nalloc *
+                    dt->shared->parent->shared->size)))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+            /* Names, each a multiple of 8 with null termination */
+            for (i=0; i<dt->shared->u.enumer.nmembs; i++) {
+                dt->shared->u.enumer.name[i] = H5MM_xstrdup((const char*)*pp);
+                *pp += ((HDstrlen((const char*)*pp)+8)/8)*8;
+            }
+
+            /* Values */
+            HDmemcpy(dt->shared->u.enumer.value, *pp,
+                 dt->shared->u.enumer.nmembs * dt->shared->parent->shared->size);
+            *pp += dt->shared->u.enumer.nmembs * dt->shared->parent->shared->size;
+            break;
+
+        case H5T_REFERENCE: /* Reference datatypes...  */
+            dt->shared->u.atomic.order = H5T_ORDER_NONE;
+            dt->shared->u.atomic.prec = 8 * dt->shared->size;
+            dt->shared->u.atomic.offset = 0;
+            dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+            dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+
+            /* Set reference type */
+            dt->shared->u.atomic.u.r.rtype = (H5R_type_t)(flags & 0x0f);
+            break;
+
+        case H5T_STRING:
+            /*
+             * Character string types...
+             */
+            dt->shared->u.atomic.order = H5T_ORDER_NONE;
+            dt->shared->u.atomic.prec = 8 * dt->shared->size;
+            dt->shared->u.atomic.offset = 0;
+            dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;
+            dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;
+
+            dt->shared->u.atomic.u.s.pad = (H5T_str_t)(flags & 0x0f);
+            dt->shared->u.atomic.u.s.cset = (H5T_cset_t)((flags>>4) & 0x0f);
+            break;
+
+        case H5T_VLEN:  /* Variable length datatypes...  */
+            /* Set the type of VL information, either sequence or string */
+            dt->shared->u.vlen.type = (H5T_vlen_type_t)(flags & 0x0f);
+            if(dt->shared->u.vlen.type == H5T_VLEN_STRING) {
+                dt->shared->u.vlen.pad  = (H5T_str_t)((flags>>4) & 0x0f);
+                dt->shared->u.vlen.cset = (H5T_cset_t)((flags>>8) & 0x0f);
+            } /* end if */
+
+            /* Decode base type of VL information */
+            if(NULL == (dt->shared->parent = H5T_alloc()))
+                HGOTO_ERROR (H5E_DATATYPE, H5E_NOSPACE, FAIL, "memory allocation failed")
+            if (H5O_dtype_decode_helper(f, pp, dt->shared->parent)<0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode VL parent type");
+
+            dt->shared->force_conv=TRUE;
+            /* Mark this type as on disk */
+            if (H5T_vlen_mark(dt, f, H5T_VLEN_DISK)<0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location");
+            break;
+
+        case H5T_TIME:  /* Time datatypes */
+            dt->shared->u.atomic.order = (flags & 0x1) ? H5T_ORDER_BE : H5T_ORDER_LE;
+            UINT16DECODE(*pp, dt->shared->u.atomic.prec);
+            break;
+
+        case H5T_ARRAY:  /* Array datatypes...  */
+            /* Decode the number of dimensions */
+            dt->shared->u.array.ndims = *(*pp)++;
+
+            /* Double-check the number of dimensions */
+            assert(dt->shared->u.array.ndims <= H5S_MAX_RANK);
+
+            /* Skip reserved bytes */
+            *pp += 3;
+
+            /* Decode array dimension sizes & compute number of elements */
+            for (j=0, dt->shared->u.array.nelem=1; j<(unsigned)dt->shared->u.array.ndims; j++) {
+                UINT32DECODE(*pp, dt->shared->u.array.dim[j]);
+                dt->shared->u.array.nelem *= dt->shared->u.array.dim[j];
+            } /* end for */
+
+            /* Decode array dimension permutations (even though they are unused currently) */
+            for (j=0; j<(unsigned)dt->shared->u.array.ndims; j++)
+                UINT32DECODE(*pp, dt->shared->u.array.perm[j]);
+
+            /* Decode base type of array */
+            if(NULL == (dt->shared->parent = H5T_alloc()))
+                HGOTO_ERROR (H5E_DATATYPE, H5E_NOSPACE, FAIL, "memory allocation failed")
+            if (H5O_dtype_decode_helper(f, pp, dt->shared->parent)<0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, FAIL, "unable to decode VL parent type");
+
+            /*
+             * Set the "force conversion" flag if a VL base datatype is used or
+             * or if any components of the base datatype are VL types.
+             */
+            if(dt->shared->parent->shared->force_conv==TRUE)
+                dt->shared->force_conv=TRUE;
+            break;
+
+        default:
+            HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown datatype class found");
+    }
+
+done:
+    if(ret_value <0)
+    {
+        if(dt != NULL) {
+            if(dt->shared != NULL)
+                H5FL_FREE(H5T_shared_t, dt->shared);
+            H5FL_FREE(H5T_t, dt);
+        } /* end if */
+    }
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_dtype_encode_helper
+ *
+ * Purpose:	Encodes a datatype.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, December  8, 1997
+ *
+ * Modifications:
+ *		Robb Matzke, Thursday, May 20, 1999
+ *		Added support for bitfields and opaque types.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_dtype_encode_helper(uint8_t **pp, const H5T_t *dt)
+{
+    htri_t has_array=FALSE;       /* Whether a compound datatype has an array inside it */
+    unsigned		flags = 0;
+    char		*hdr = (char *)*pp;
+    unsigned		i, j;
+    size_t		n, z, aligned;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_dtype_encode_helper);
+
+    /* check args */
+    assert(pp && *pp);
+    assert(dt);
+
+    /* skip the type and class bit-field for now */
+    *pp += 4;
+    UINT32ENCODE(*pp, dt->shared->size);
+
+    switch (dt->shared->type) {
+        case H5T_INTEGER:
+            /*
+             * Integer datatypes...
+             */
+            switch (dt->shared->u.atomic.order) {
+                case H5T_ORDER_LE:
+                    break;		/*nothing */
+                case H5T_ORDER_BE:
+                    flags |= 0x01;
+                    break;
+                default:
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "byte order is not supported in file format yet");
+            }
+
+            switch (dt->shared->u.atomic.lsb_pad) {
+                case H5T_PAD_ZERO:
+                    break;		/*nothing */
+                case H5T_PAD_ONE:
+                    flags |= 0x02;
+                    break;
+                default:
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "bit padding is not supported in file format yet");
+            }
+
+            switch (dt->shared->u.atomic.msb_pad) {
+                case H5T_PAD_ZERO:
+                    break;		/*nothing */
+                case H5T_PAD_ONE:
+                    flags |= 0x04;
+                    break;
+                default:
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "bit padding is not supported in file format yet");
+            }
+
+            switch (dt->shared->u.atomic.u.i.sign) {
+                case H5T_SGN_NONE:
+                    break;		/*nothing */
+                case H5T_SGN_2:
+                    flags |= 0x08;
+                    break;
+                default:
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "sign scheme is not supported in file format yet");
+            }
+
+            UINT16ENCODE(*pp, dt->shared->u.atomic.offset);
+            UINT16ENCODE(*pp, dt->shared->u.atomic.prec);
+            break;
+
+        case H5T_BITFIELD:
+            /*
+             * Bitfield datatypes...
+             */
+            switch (dt->shared->u.atomic.order) {
+                case H5T_ORDER_LE:
+                    break;		/*nothing */
+                case H5T_ORDER_BE:
+                    flags |= 0x01;
+                    break;
+                default:
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "byte order is not supported in file format yet");
+            }
+
+            switch (dt->shared->u.atomic.lsb_pad) {
+                case H5T_PAD_ZERO:
+                    break;		/*nothing */
+                case H5T_PAD_ONE:
+                    flags |= 0x02;
+                    break;
+                default:
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "bit padding is not supported in file format yet");
+            }
+
+            switch (dt->shared->u.atomic.msb_pad) {
+                case H5T_PAD_ZERO:
+                    break;		/*nothing */
+                case H5T_PAD_ONE:
+                    flags |= 0x04;
+                    break;
+                default:
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "bit padding is not supported in file format yet");
+            }
+
+            UINT16ENCODE(*pp, dt->shared->u.atomic.offset);
+            UINT16ENCODE(*pp, dt->shared->u.atomic.prec);
+            break;
+
+        case H5T_OPAQUE:
+            /*
+             * Opaque datatypes...  The tag is stored in a field which is a
+             * multiple of eight characters and null padded (not necessarily
+             * null terminated).
+             */
+            z = HDstrlen(dt->shared->u.opaque.tag);
+            aligned = (z+7) & (H5T_OPAQUE_TAG_MAX - 8);
+            flags |= aligned;
+            HDmemcpy(*pp, dt->shared->u.opaque.tag, MIN(z,aligned));
+            for (n=MIN(z,aligned); n<aligned; n++) (*pp)[n] = 0;
+            *pp += aligned;
+            break;
+
+        case H5T_FLOAT:
+            /*
+             * Floating-point types...
+             */
+            switch (dt->shared->u.atomic.order) {
+                case H5T_ORDER_LE:
+                    break;		/*nothing */
+                case H5T_ORDER_BE:
+                    flags |= 0x01;
+                    break;
+                default:
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "byte order is not supported in file format yet");
+            }
+
+            switch (dt->shared->u.atomic.lsb_pad) {
+                case H5T_PAD_ZERO:
+                    break;		/*nothing */
+                case H5T_PAD_ONE:
+                    flags |= 0x02;
+                    break;
+                default:
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "bit padding is not supported in file format yet");
+            }
+
+            switch (dt->shared->u.atomic.msb_pad) {
+                case H5T_PAD_ZERO:
+                    break;		/*nothing */
+                case H5T_PAD_ONE:
+                    flags |= 0x04;
+                    break;
+                default:
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "bit padding is not supported in file format yet");
+            }
+
+            switch (dt->shared->u.atomic.u.f.pad) {
+                case H5T_PAD_ZERO:
+                    break;		/*nothing */
+                case H5T_PAD_ONE:
+                    flags |= 0x08;
+                    break;
+                default:
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "bit padding is not supported in file format yet");
+            }
+
+            switch (dt->shared->u.atomic.u.f.norm) {
+                case H5T_NORM_NONE:
+                    break;		/*nothing */
+                case H5T_NORM_MSBSET:
+                    flags |= 0x10;
+                    break;
+                case H5T_NORM_IMPLIED:
+                    flags |= 0x20;
+                    break;
+                default:
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "normalization scheme is not supported in file format yet");
+            }
+
+            flags |= (dt->shared->u.atomic.u.f.sign << 8) & 0xff00;
+            UINT16ENCODE(*pp, dt->shared->u.atomic.offset);
+            UINT16ENCODE(*pp, dt->shared->u.atomic.prec);
+            assert (dt->shared->u.atomic.u.f.epos<=255);
+            *(*pp)++ = (uint8_t)(dt->shared->u.atomic.u.f.epos);
+            assert (dt->shared->u.atomic.u.f.esize<=255);
+            *(*pp)++ = (uint8_t)(dt->shared->u.atomic.u.f.esize);
+            assert (dt->shared->u.atomic.u.f.mpos<=255);
+            *(*pp)++ = (uint8_t)(dt->shared->u.atomic.u.f.mpos);
+            assert (dt->shared->u.atomic.u.f.msize<=255);
+            *(*pp)++ = (uint8_t)(dt->shared->u.atomic.u.f.msize);
+            UINT32ENCODE(*pp, dt->shared->u.atomic.u.f.ebias);
+            break;
+
+        case H5T_COMPOUND:
+            /* Check for an array datatype somewhere within the compound type */
+            if((has_array=H5T_detect_class(dt,H5T_ARRAY))<0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "can't detect array class");
+
+            /*
+             * Compound datatypes...
+             */
+            flags = dt->shared->u.compnd.nmembs & 0xffff;
+            for (i=0; i<dt->shared->u.compnd.nmembs; i++) {
+
+                /* Name, multiple of eight bytes */
+                HDstrcpy((char*)(*pp), dt->shared->u.compnd.memb[i].name);
+                n = HDstrlen(dt->shared->u.compnd.memb[i].name);
+                for (z=n+1; z%8; z++)
+                    (*pp)[z] = '\0';
+                *pp += z;
+
+                /* Member offset */
+                UINT32ENCODE(*pp, dt->shared->u.compnd.memb[i].offset);
+
+                /* If we don't have any array fields, write out the old style
+                 * member information, for better backward compatibility
+                 * Write out all zeros for the array information, though...
+                 */
+                if(!has_array) {
+                    /* Dimensionality */
+                    *(*pp)++ = 0;
+
+                    /* Reserved */
+                    *(*pp)++ = 0;
+                    *(*pp)++ = 0;
+                    *(*pp)++ = 0;
+
+                    /* Dimension permutation */
+                    UINT32ENCODE(*pp, 0);
+
+                    /* Reserved */
+                    UINT32ENCODE(*pp, 0);
+
+                    /* Dimensions */
+                    for (j=0; j<4; j++)
+                        UINT32ENCODE(*pp, 0);
+                } /* end if */
+
+                /* Subtype */
+                if (H5O_dtype_encode_helper(pp, dt->shared->u.compnd.memb[i].type)<0)
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "unable to encode member type");
+            }
+            break;
+
+        case H5T_ENUM:
+            /*
+             * Enumeration datatypes...
+             */
+            flags = dt->shared->u.enumer.nmembs & 0xffff;
+
+            /* Parent type */
+            if (H5O_dtype_encode_helper(pp, dt->shared->parent)<0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "unable to encode parent datatype");
+
+            /* Names, each a multiple of eight bytes */
+            for (i=0; i<dt->shared->u.enumer.nmembs; i++) {
+                HDstrcpy((char*)(*pp), dt->shared->u.enumer.name[i]);
+                n = HDstrlen(dt->shared->u.enumer.name[i]);
+                for (z=n+1; z%8; z++)
+                    (*pp)[z] = '\0';
+                *pp += z;
+            }
+
+            /* Values */
+            HDmemcpy(*pp, dt->shared->u.enumer.value, dt->shared->u.enumer.nmembs * dt->shared->parent->shared->size);
+            *pp += dt->shared->u.enumer.nmembs * dt->shared->parent->shared->size;
+            break;
+
+        case H5T_REFERENCE:
+            flags |= (dt->shared->u.atomic.u.r.rtype & 0x0f);
+            break;
+
+        case H5T_STRING:
+            /*
+             * Character string types... (not fully implemented)
+             */
+            assert (dt->shared->u.atomic.order == H5T_ORDER_NONE);
+            assert (dt->shared->u.atomic.prec == 8 * dt->shared->size);
+            assert (dt->shared->u.atomic.offset == 0);
+            assert (dt->shared->u.atomic.lsb_pad == H5T_PAD_ZERO);
+            assert (dt->shared->u.atomic.msb_pad == H5T_PAD_ZERO);
+
+            flags |= (dt->shared->u.atomic.u.s.pad & 0x0f);
+            flags |= (dt->shared->u.atomic.u.s.cset & 0x0f) << 4;
+            break;
+
+        case H5T_VLEN:  /* Variable length datatypes...  */
+            flags |= (dt->shared->u.vlen.type & 0x0f);
+            if(dt->shared->u.vlen.type == H5T_VLEN_STRING) {
+                flags |= (dt->shared->u.vlen.pad   & 0x0f) << 4;
+                flags |= (dt->shared->u.vlen.cset  & 0x0f) << 8;
+            } /* end if */
+
+            /* Encode base type of VL information */
+            if (H5O_dtype_encode_helper(pp, dt->shared->parent)<0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "unable to encode VL parent type");
+            break;
+
+        case H5T_TIME:  /* Time datatypes...  */
+            switch (dt->shared->u.atomic.order) {
+                case H5T_ORDER_LE:
+                    break;		/*nothing */
+                case H5T_ORDER_BE:
+                    flags |= 0x01;
+                    break;
+                default:
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "byte order is not supported in file format yet");
+            }
+            UINT16ENCODE(*pp, dt->shared->u.atomic.prec);
+            break;
+
+        case H5T_ARRAY:  /* Array datatypes...  */
+            /* Double-check the number of dimensions */
+            assert(dt->shared->u.array.ndims <= H5S_MAX_RANK);
+
+            /* Encode the number of dimensions */
+            *(*pp)++ = dt->shared->u.array.ndims;
+
+            /* Reserved */
+            *(*pp)++ = '\0';
+            *(*pp)++ = '\0';
+            *(*pp)++ = '\0';
+
+            /* Encode array dimensions */
+            for (j=0; j<(unsigned)dt->shared->u.array.ndims; j++)
+                UINT32ENCODE(*pp, dt->shared->u.array.dim[j]);
+
+            /* Encode array dimension permutations */
+            for (j=0; j<(unsigned)dt->shared->u.array.ndims; j++)
+                UINT32ENCODE(*pp, dt->shared->u.array.perm[j]);
+
+            /* Encode base type of array's information */
+            if (H5O_dtype_encode_helper(pp, dt->shared->parent)<0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "unable to encode VL parent type");
+            break;
+
+        default:
+            /*nothing */
+            break;
+    }
+
+    /* Encode the type's class, version and bit field */
+    *hdr++ = ((unsigned)(dt->shared->type) & 0x0f) | (((dt->shared->type==H5T_COMPOUND && has_array) ? H5O_DTYPE_VERSION_UPDATED : H5O_DTYPE_VERSION_COMPAT )<<4);
+    *hdr++ = (flags >> 0) & 0xff;
+    *hdr++ = (flags >> 8) & 0xff;
+    *hdr++ = (flags >> 16) & 0xff;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_dtype_decode
+ PURPOSE
+    Decode a message and return a pointer to a memory struct
+	with the decoded information
+ USAGE
+    void *H5O_dtype_decode(f, raw_size, p)
+	H5F_t *f;		IN: pointer to the HDF5 file struct
+	size_t raw_size;	IN: size of the raw information buffer
+	const uint8 *p;		IN: the raw information buffer
+ RETURNS
+    Pointer to the new message in native order on success, NULL on failure
+ DESCRIPTION
+	This function decodes the "raw" disk form of a simple datatype message
+    into a struct in memory native format.  The struct is allocated within this
+    function using malloc() and is returned to the caller.
+--------------------------------------------------------------------------*/
+static void *
+H5O_dtype_decode(H5F_t *f, hid_t UNUSED dxpl_id, const uint8_t *p,
+		 H5O_shared_t UNUSED *sh)
+{
+    H5T_t		   *dt = NULL;
+    void                *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_dtype_decode);
+
+    /* check args */
+    assert(p);
+
+    if(NULL == (dt = H5T_alloc()))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    if (H5O_dtype_decode_helper(f, &p, dt) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDECODE, NULL, "can't decode type");
+
+    /* Set return value */
+    ret_value=dt;
+
+done:
+    if(ret_value==NULL) {
+        if(dt != NULL) {
+            if(dt->shared != NULL)
+                H5FL_FREE(H5T_shared_t, dt->shared);
+            H5FL_FREE(H5T_t, dt);
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_dtype_encode
+ PURPOSE
+    Encode a simple datatype message
+ USAGE
+    herr_t H5O_dtype_encode(f, raw_size, p, mesg)
+	H5F_t *f;	  IN: pointer to the HDF5 file struct
+	size_t raw_size;	IN: size of the raw information buffer
+	const uint8 *p;		IN: the raw information buffer
+	const void *mesg;	IN: Pointer to the simple datatype struct
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+	This function encodes the native memory form of the simple datatype
+    message in the "raw" disk form.
+--------------------------------------------------------------------------*/
+static herr_t
+H5O_dtype_encode(H5F_t UNUSED *f, uint8_t *p, const void *mesg)
+{
+    const H5T_t		   *dt = (const H5T_t *) mesg;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_dtype_encode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert(dt);
+
+    /* encode */
+    if (H5O_dtype_encode_helper(&p, dt) < 0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTENCODE, FAIL, "can't encode type");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_dtype_copy
+ PURPOSE
+    Copies a message from MESG to DEST, allocating DEST if necessary.
+ USAGE
+    void *H5O_dtype_copy(mesg, dest)
+	const void *mesg;	IN: Pointer to the source simple datatype
+				    struct
+	const void *dest;	IN: Pointer to the destination simple
+				    datatype struct
+ RETURNS
+    Pointer to DEST on success, NULL on failure
+ DESCRIPTION
+	This function copies a native (memory) simple datatype message,
+    allocating the destination structure if necessary.
+--------------------------------------------------------------------------*/
+static void *
+H5O_dtype_copy(const void *_src, void *_dst, unsigned UNUSED update_flags)
+{
+    const H5T_t		   *src = (const H5T_t *) _src;
+    H5T_t		   *dst = NULL;
+    void 		   *ret_value;  /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_dtype_copy);
+
+    /* check args */
+    assert(src);
+
+    /* copy */
+    if (NULL == (dst = H5T_copy(src, H5T_COPY_ALL)))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "can't copy type");
+
+    /* was result already allocated? */
+    if (_dst) {
+        *((H5T_t *) _dst) = *dst;
+        H5FL_FREE(H5T_t,dst);
+        dst = (H5T_t *) _dst;
+    }
+
+    /* Set return value */
+    ret_value=dst;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_dtype_size
+ PURPOSE
+    Return the raw message size in bytes
+ USAGE
+    void *H5O_dtype_size(f, mesg)
+	H5F_t *f;	  IN: pointer to the HDF5 file struct
+	const void *mesg;     IN: Pointer to the source simple datatype struct
+ RETURNS
+    Size of message on success, 0 on failure
+ DESCRIPTION
+	This function returns the size of the raw simple datatype message on
+    success.  (Not counting the message type or size fields, only the data
+    portion of the message).  It doesn't take into account alignment.
+ NOTES
+        All datatype messages have a common 8 byte header, plus a variable-
+    sized "properties" field.
+--------------------------------------------------------------------------*/
+static size_t
+H5O_dtype_size(const H5F_t *f, const void *mesg)
+{
+    unsigned		    i;
+    size_t		    ret_value = 8;
+    const H5T_t		   *dt = (const H5T_t *) mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_dtype_size);
+
+    assert(mesg);
+
+    /* Add in the property field length for each datatype class */
+    switch (dt->shared->type) {
+        case H5T_INTEGER:
+            ret_value += 4;
+            break;
+
+        case H5T_BITFIELD:
+            ret_value += 4;
+            break;
+
+        case H5T_OPAQUE:
+            ret_value += (HDstrlen(dt->shared->u.opaque.tag)+7) & (H5T_OPAQUE_TAG_MAX - 8);
+            break;
+
+        case H5T_FLOAT:
+            ret_value += 12;
+            break;
+
+        case H5T_COMPOUND:
+            for (i=0; i<dt->shared->u.compnd.nmembs; i++) {
+                ret_value += ((HDstrlen(dt->shared->u.compnd.memb[i].name) + 8) / 8) * 8;
+                ret_value += 4 +		/*member offset*/
+                     1 +		/*dimensionality*/
+                     3 +		/*reserved*/
+                     4 +		/*permutation*/
+                     4 +		/*reserved*/
+                     16;		/*dimensions*/
+                ret_value += H5O_dtype_size(f, dt->shared->u.compnd.memb[i].type);
+            }
+            break;
+
+        case H5T_ENUM:
+            ret_value += H5O_dtype_size(f, dt->shared->parent);
+            for (i=0; i<dt->shared->u.enumer.nmembs; i++)
+                ret_value += ((HDstrlen(dt->shared->u.enumer.name[i])+8)/8)*8;
+            ret_value += dt->shared->u.enumer.nmembs * dt->shared->parent->shared->size;
+            break;
+
+        case H5T_VLEN:
+            ret_value += H5O_dtype_size(f, dt->shared->parent);
+            break;
+
+        case H5T_TIME:
+            ret_value += 2;
+            break;
+
+        case H5T_ARRAY:
+            ret_value += 4; /* ndims & reserved bytes*/
+            ret_value += 4*dt->shared->u.array.ndims; /* dimensions */
+            ret_value += 4*dt->shared->u.array.ndims; /* dimension permutations */
+            ret_value += H5O_dtype_size(f, dt->shared->parent);
+            break;
+
+        default:
+            /*no properties */
+            break;
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_dtype_reset
+ *
+ * Purpose:	Frees resources within a message, but doesn't free
+ *		the message itself.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_dtype_reset(void *_mesg)
+{
+    H5T_t		   *dt = (H5T_t *) _mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_dtype_reset);
+
+    if (dt)
+        H5T_free(dt);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_dtype_free
+ *
+ * Purpose:	Free's the message
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, March 30, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_dtype_free (void *mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_dtype_free);
+
+    assert (mesg);
+
+    H5FL_FREE(H5T_shared_t, ((H5T_t *) mesg)->shared);
+    H5FL_FREE(H5T_t,mesg);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_dtype_get_share
+ *
+ * Purpose:	Returns information about where the shared message is located
+ *		by filling in the SH shared message struct.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, June  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_dtype_get_share(H5F_t UNUSED *f, const void *_mesg,
+		    H5O_shared_t *sh/*out*/)
+{
+    const H5T_t	*dt = (const H5T_t *)_mesg;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_dtype_get_share);
+
+    assert (dt);
+    assert (sh);
+
+    if (H5F_addr_defined (dt->ent.header)) {
+        /* If the address is defined, this had better be a named datatype */
+	HDassert (H5T_STATE_NAMED==dt->shared->state || H5T_STATE_OPEN==dt->shared->state);
+
+	sh->in_gh = FALSE;
+	sh->u.ent = dt->ent;
+    } else
+	HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "datatype is not sharable");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_dtype_set_share
+ *
+ * Purpose:	Copies sharing information from SH into the message.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, June	4, 1998
+ *
+ * Modifications:
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *      Added `id to name' support.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_dtype_set_share (H5F_t UNUSED *f, void *_mesg/*in,out*/,
+		     const H5O_shared_t *sh)
+{
+    H5T_t	*dt = (H5T_t *)_mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_dtype_set_share);
+
+    assert (dt);
+    assert (sh);
+    assert (!sh->in_gh);
+
+    /* NULL copy here, names not appropriate */
+    H5G_ent_copy(&(dt->ent),&(sh->u.ent),H5G_COPY_NULL);
+
+    /* Note that the datatype is a named datatype */
+    dt->shared->state = H5T_STATE_NAMED;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_dtype_debug
+ PURPOSE
+    Prints debugging information for a message
+ USAGE
+    void *H5O_dtype_debug(f, mesg, stream, indent, fwidth)
+	H5F_t *f;		IN: pointer to the HDF5 file struct
+	const void *mesg;	IN: Pointer to the source simple datatype
+				    struct
+	FILE *stream;		IN: Pointer to the stream for output data
+	int indent;		IN: Amount to indent information by
+	int fwidth;		IN: Field width (?)
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+	This function prints debugging output to the stream passed as a
+    parameter.
+--------------------------------------------------------------------------*/
+static herr_t
+H5O_dtype_debug(H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream,
+		int indent, int fwidth)
+{
+    const H5T_t		*dt = (const H5T_t*)mesg;
+    const char		*s;
+    char		buf[256];
+    unsigned		i;
+    size_t		k;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_dtype_debug);
+
+    /* check args */
+    assert(f);
+    assert(dt);
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    switch (dt->shared->type) {
+        case H5T_INTEGER:
+            s = "integer";
+            break;
+        case H5T_FLOAT:
+            s = "floating-point";
+            break;
+        case H5T_TIME:
+            s = "date and time";
+            break;
+        case H5T_STRING:
+            s = "text string";
+            break;
+        case H5T_BITFIELD:
+            s = "bit field";
+            break;
+        case H5T_OPAQUE:
+            s = "opaque";
+            break;
+        case H5T_COMPOUND:
+            s = "compound";
+            break;
+        case H5T_REFERENCE:
+            s = "reference";
+            break;
+        case H5T_ENUM:
+            s = "enum";
+            break;
+        case H5T_ARRAY:
+            s = "array";
+            break;
+        case H5T_VLEN:
+            s = "vlen";
+            break;
+        default:
+            sprintf(buf, "H5T_CLASS_%d", (int) (dt->shared->type));
+            s = buf;
+            break;
+    }
+    fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+	    "Type class:",
+	    s);
+
+    fprintf(stream, "%*s%-*s %lu byte%s\n", indent, "", fwidth,
+	    "Size:",
+	    (unsigned long)(dt->shared->size), 1==dt->shared->size?"":"s");
+
+    if (H5T_COMPOUND == dt->shared->type) {
+	fprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
+		"Number of members:",
+		dt->shared->u.compnd.nmembs);
+	for (i=0; i<dt->shared->u.compnd.nmembs; i++) {
+	    sprintf(buf, "Member %d:", i);
+	    fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+		    buf,
+		    dt->shared->u.compnd.memb[i].name);
+	    fprintf(stream, "%*s%-*s %lu\n", indent+3, "", MAX(0, fwidth-3),
+		    "Byte offset:",
+		    (unsigned long) (dt->shared->u.compnd.memb[i].offset));
+	    H5O_dtype_debug(f, dxpl_id, dt->shared->u.compnd.memb[i].type, stream,
+			    indent+3, MAX(0, fwidth - 3));
+	}
+    } else if (H5T_ENUM==dt->shared->type) {
+	fprintf(stream, "%*s%s\n", indent, "", "Base type:");
+	H5O_dtype_debug(f, dxpl_id, dt->shared->parent, stream, indent+3, MAX(0, fwidth-3));
+	fprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
+		"Number of members:",
+		dt->shared->u.enumer.nmembs);
+	for (i=0; i<dt->shared->u.enumer.nmembs; i++) {
+	    sprintf(buf, "Member %d:", i);
+	    fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+		    buf,
+		    dt->shared->u.enumer.name[i]);
+	    fprintf(stream, "%*s%-*s 0x", indent, "", fwidth,
+		    "Raw bytes of value:");
+	    for (k=0; k<dt->shared->parent->shared->size; k++) {
+		fprintf(stream, "%02x",
+			dt->shared->u.enumer.value[i*dt->shared->parent->shared->size+k]);
+	    }
+	    fprintf(stream, "\n");
+	}
+
+    } else if (H5T_OPAQUE==dt->shared->type) {
+	fprintf(stream, "%*s%-*s \"%s\"\n", indent, "", fwidth,
+		"Tag:", dt->shared->u.opaque.tag);
+    } else if (H5T_REFERENCE==dt->shared->type) {
+	fprintf(stream, "%*s%-*s\n", indent, "", fwidth,
+		"Fix dumping reference types!");
+    } else if (H5T_VLEN==dt->shared->type) {
+        switch (dt->shared->u.vlen.type) {
+            case H5T_VLEN_SEQUENCE:
+                s = "sequence";
+                break;
+            case H5T_VLEN_STRING:
+                s = "string";
+                break;
+            default:
+                sprintf(buf, "H5T_VLEN_%d", dt->shared->u.vlen.type);
+                s = buf;
+                break;
+        }
+        fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+                "Vlen type:", s);
+
+        switch (dt->shared->u.vlen.loc) {
+            case H5T_VLEN_MEMORY:
+                s = "memory";
+                break;
+            case H5T_VLEN_DISK:
+                s = "disk";
+                break;
+            default:
+                sprintf(buf, "H5T_VLEN_%d", dt->shared->u.vlen.loc);
+                s = buf;
+                break;
+        }
+        fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+                "Location:", s);
+    } else if (H5T_ARRAY==dt->shared->type) {
+	fprintf(stream, "%*s%-*s %d\n", indent, "", fwidth,
+		"Rank:",
+		dt->shared->u.array.ndims);
+    fprintf(stream, "%*s%-*s {", indent, "", fwidth, "Dim Size:");
+	for (i=0; i<(unsigned)dt->shared->u.array.ndims; i++) {
+        fprintf (stream, "%s%u", i?", ":"", (unsigned)dt->shared->u.array.dim[i]);
+    }
+    fprintf (stream, "}\n");
+    fprintf(stream, "%*s%-*s {", indent, "", fwidth, "Dim Permutation:");
+	for (i=0; i<(unsigned)dt->shared->u.array.ndims; i++) {
+        fprintf (stream, "%s%d", i?", ":"", dt->shared->u.array.perm[i]);
+    }
+    fprintf (stream, "}\n");
+	fprintf(stream, "%*s%s\n", indent, "", "Base type:");
+	H5O_dtype_debug(f, dxpl_id, dt->shared->parent, stream, indent+3, MAX(0, fwidth-3));
+    } else {
+	switch (dt->shared->u.atomic.order) {
+            case H5T_ORDER_LE:
+                s = "little endian";
+                break;
+            case H5T_ORDER_BE:
+                s = "big endian";
+                break;
+            case H5T_ORDER_VAX:
+                s = "VAX";
+                break;
+            case H5T_ORDER_NONE:
+                s = "none";
+                break;
+            default:
+                sprintf(buf, "H5T_ORDER_%d", dt->shared->u.atomic.order);
+                s = buf;
+                break;
+	}
+	fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+		"Byte order:",
+		s);
+
+	fprintf(stream, "%*s%-*s %lu bit%s\n", indent, "", fwidth,
+		"Precision:",
+		(unsigned long)(dt->shared->u.atomic.prec),
+		1==dt->shared->u.atomic.prec?"":"s");
+
+	fprintf(stream, "%*s%-*s %lu bit%s\n", indent, "", fwidth,
+		"Offset:",
+		(unsigned long)(dt->shared->u.atomic.offset),
+		1==dt->shared->u.atomic.offset?"":"s");
+
+	switch (dt->shared->u.atomic.lsb_pad) {
+            case H5T_PAD_ZERO:
+                s = "zero";
+                break;
+            case H5T_PAD_ONE:
+                s = "one";
+                break;
+            default:
+                s = "pad?";
+                break;
+	}
+	fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+		"Low pad type:", s);
+
+	switch (dt->shared->u.atomic.msb_pad) {
+            case H5T_PAD_ZERO:
+                s = "zero";
+                break;
+            case H5T_PAD_ONE:
+                s = "one";
+                break;
+            default:
+                s = "pad?";
+                break;
+	}
+	fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+		"High pad type:", s);
+
+	if (H5T_FLOAT == dt->shared->type) {
+	    switch (dt->shared->u.atomic.u.f.pad) {
+                case H5T_PAD_ZERO:
+                    s = "zero";
+                    break;
+                case H5T_PAD_ONE:
+                    s = "one";
+                    break;
+                default:
+                    if (dt->shared->u.atomic.u.f.pad < 0) {
+                        sprintf(buf, "H5T_PAD_%d", -(dt->shared->u.atomic.u.f.pad));
+                    } else {
+                        sprintf(buf, "bit-%d", dt->shared->u.atomic.u.f.pad);
+                    }
+                    s = buf;
+                    break;
+	    }
+	    fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+		    "Internal pad type:", s);
+
+	    switch (dt->shared->u.atomic.u.f.norm) {
+                case H5T_NORM_IMPLIED:
+                    s = "implied";
+                    break;
+                case H5T_NORM_MSBSET:
+                    s = "msb set";
+                    break;
+                case H5T_NORM_NONE:
+                    s = "none";
+                    break;
+                default:
+                    sprintf(buf, "H5T_NORM_%d", (int) (dt->shared->u.atomic.u.f.norm));
+                    s = buf;
+	    }
+	    fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+		    "Normalization:", s);
+
+	    fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
+		    "Sign bit location:",
+		    (unsigned long) (dt->shared->u.atomic.u.f.sign));
+
+	    fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
+		    "Exponent location:",
+		    (unsigned long) (dt->shared->u.atomic.u.f.epos));
+
+	    fprintf(stream, "%*s%-*s 0x%08lx\n", indent, "", fwidth,
+		    "Exponent bias:",
+		    (unsigned long) (dt->shared->u.atomic.u.f.ebias));
+
+	    fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
+		    "Exponent size:",
+		    (unsigned long) (dt->shared->u.atomic.u.f.esize));
+
+	    fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
+		    "Mantissa location:",
+		    (unsigned long) (dt->shared->u.atomic.u.f.mpos));
+
+	    fprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
+		    "Mantissa size:",
+		    (unsigned long) (dt->shared->u.atomic.u.f.msize));
+
+	} else if (H5T_INTEGER == dt->shared->type) {
+	    switch (dt->shared->u.atomic.u.i.sign) {
+                case H5T_SGN_NONE:
+                    s = "none";
+                    break;
+                case H5T_SGN_2:
+                    s = "2's comp";
+                    break;
+                default:
+                    sprintf(buf, "H5T_SGN_%d", (int) (dt->shared->u.atomic.u.i.sign));
+                    s = buf;
+                    break;
+	    }
+	    fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+		    "Sign scheme:", s);
+
+	}
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Oefl.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Oefl.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Oefl.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,477 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Robb Matzke <matzke at llnl.gov>
+ *	       Tuesday, November 25, 1997
+ */
+
+#define H5O_PACKAGE		/*suppress error about including H5Opkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5HLprivate.h"	/* Local Heaps				*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Opkg.h"             /* Object headers			*/
+
+/* PRIVATE PROTOTYPES */
+static void *H5O_efl_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
+static herr_t H5O_efl_encode(H5F_t *f, uint8_t *p, const void *_mesg);
+static void *H5O_efl_copy(const void *_mesg, void *_dest, unsigned update_flags);
+static size_t H5O_efl_size(const H5F_t *f, const void *_mesg);
+static herr_t H5O_efl_reset(void *_mesg);
+static herr_t H5O_efl_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE * stream,
+			    int indent, int fwidth);
+
+/* This message derives from H5O */
+const H5O_class_t H5O_EFL[1] = {{
+    H5O_EFL_ID,		    	/*message id number		*/
+    "external file list",   	/*message name for debugging    */
+    sizeof(H5O_efl_t),	    	/*native message size	    	*/
+    H5O_efl_decode,	    	/*decode message		*/
+    H5O_efl_encode,	    	/*encode message		*/
+    H5O_efl_copy,	    	/*copy native value		*/
+    H5O_efl_size,	    	/*size of message on disk	*/
+    H5O_efl_reset,	    	/*reset method		    	*/
+    NULL,		            /* free method			*/
+    NULL,		        /* file delete method		*/
+    NULL,			/* link method			*/
+    NULL,	  	    	/*get share method		*/
+    NULL,			/*set share method		*/
+    H5O_efl_debug,	    	/*debug the message		*/
+}};
+
+#define H5O_EFL_VERSION		1
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_efl_decode
+ *
+ * Purpose:	Decode an external file list message and return a pointer to
+ *		the message (and some other data).
+ *
+ * Return:	Success:	Ptr to a new message struct.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, November 25, 1997
+ *
+ * Modifications:
+ *	Robb Matzke, 1998-07-20
+ *	Rearranged the message to add a version number near the beginning.
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_efl_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
+{
+    H5O_efl_t		*mesg = NULL;
+    int			version;
+    const char		*s = NULL;
+    const H5HL_t        *heap;
+    size_t		u;      /* Local index variable */
+    void *ret_value;            /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_efl_decode);
+
+    /* Check args */
+    assert(f);
+    assert(p);
+    assert (!sh);
+
+    if (NULL==(mesg = H5MM_calloc(sizeof(H5O_efl_t))))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* Version */
+    version = *p++;
+    if (version!=H5O_EFL_VERSION)
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "bad version number for external file list message");
+
+    /* Reserved */
+    p += 3;
+
+    /* Number of slots */
+    UINT16DECODE(p, mesg->nalloc);
+    assert(mesg->nalloc>0);
+    UINT16DECODE(p, mesg->nused);
+    assert(mesg->nused <= mesg->nalloc);
+
+    /* Heap address */
+    H5F_addr_decode(f, &p, &(mesg->heap_addr));
+
+#ifndef NDEBUG
+    assert (H5F_addr_defined(mesg->heap_addr));
+
+    if (NULL == (heap = H5HL_protect(f, dxpl_id, mesg->heap_addr)))
+        HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, NULL, "unable to read protect link value")
+
+    s = H5HL_offset_into(f, heap, 0);
+
+    assert (s && !*s);
+
+    if (H5HL_unprotect(f, dxpl_id, heap, mesg->heap_addr) < 0)
+        HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, NULL, "unable to read unprotect link value")
+#endif
+
+    /* Decode the file list */
+    mesg->slot = H5MM_calloc(mesg->nalloc*sizeof(H5O_efl_entry_t));
+    if (NULL==mesg->slot)
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    for (u=0; u<mesg->nused; u++) {
+	/* Name */
+	H5F_DECODE_LENGTH (f, p, mesg->slot[u].name_offset);
+
+        if (NULL == (heap = H5HL_protect(f, dxpl_id, mesg->heap_addr)))
+            HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, NULL, "unable to read protect link value")
+
+        s = H5HL_offset_into(f, heap, mesg->slot[u].name_offset);
+	assert (s && *s);
+	mesg->slot[u].name = H5MM_xstrdup (s);
+        assert(mesg->slot[u].name);
+
+        if (H5HL_unprotect(f, dxpl_id, heap, mesg->heap_addr) < 0)
+            HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, NULL, "unable to read unprotect link value")
+
+	/* File offset */
+	H5F_DECODE_LENGTH (f, p, mesg->slot[u].offset);
+
+	/* Size */
+	H5F_DECODE_LENGTH (f, p, mesg->slot[u].size);
+	assert (mesg->slot[u].size>0);
+    }
+
+    /* Set return value */
+    ret_value=mesg;
+
+done:
+    if(ret_value==NULL) {
+        if(mesg!=NULL)
+            H5MM_xfree (mesg);
+    } /* end if */
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_efl_encode
+ *
+ * Purpose:	Encodes a message.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, November 25, 1997
+ *
+ * Modifications:
+ *	Robb Matzke, 1998-07-20
+ *	Rearranged the message to add a version number near the beginning.
+ *
+ * 	Robb Matzke, 1999-10-14
+ *	Entering the name into the local heap happens when the dataset is
+ *	created. Otherwise we could end up in infinite recursion if the heap
+ *	happens to hash to the same cache slot as the object header.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_efl_encode(H5F_t *f, uint8_t *p, const void *_mesg)
+{
+    const H5O_efl_t	*mesg = (const H5O_efl_t *)_mesg;
+    size_t		u;      /* Local index variable */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_efl_encode);
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+    assert(p);
+
+    /* Version */
+    *p++ = H5O_EFL_VERSION;
+
+    /* Reserved */
+    *p++ = 0;
+    *p++ = 0;
+    *p++ = 0;
+
+    /* Number of slots */
+    assert (mesg->nalloc>0);
+    UINT16ENCODE(p, mesg->nused); /*yes, twice*/
+    assert (mesg->nused>0 && mesg->nused<=mesg->nalloc);
+    UINT16ENCODE(p, mesg->nused);
+
+    /* Heap address */
+    assert (H5F_addr_defined(mesg->heap_addr));
+    H5F_addr_encode(f, &p, mesg->heap_addr);
+
+    /* Encode file list */
+    for (u=0; u<mesg->nused; u++) {
+	/*
+	 * The name should have been added to the heap when the dataset was
+	 * created.
+	 */
+	assert(mesg->slot[u].name_offset);
+	H5F_ENCODE_LENGTH (f, p, mesg->slot[u].name_offset);
+	H5F_ENCODE_LENGTH (f, p, mesg->slot[u].offset);
+	H5F_ENCODE_LENGTH (f, p, mesg->slot[u].size);
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_efl_copy
+ *
+ * Purpose:	Copies a message from _MESG to _DEST, allocating _DEST if
+ *		necessary.
+ *
+ * Return:	Success:	Ptr to _DEST
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, November 25, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_efl_copy(const void *_mesg, void *_dest, unsigned UNUSED update_flags)
+{
+    const H5O_efl_t	*mesg = (const H5O_efl_t *) _mesg;
+    H5O_efl_t		*dest = (H5O_efl_t *) _dest;
+    size_t		u;              /* Local index variable */
+    void                *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_efl_copy);
+
+    /* check args */
+    assert(mesg);
+    if (!dest) {
+	if (NULL==(dest = H5MM_calloc(sizeof(H5O_efl_t))) ||
+                NULL==(dest->slot=H5MM_malloc(mesg->nalloc* sizeof(H5O_efl_entry_t))))
+	    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    } else if (dest->nalloc<mesg->nalloc) {
+	H5MM_xfree(dest->slot);
+	if (NULL==(dest->slot = H5MM_malloc(mesg->nalloc*
+					    sizeof(H5O_efl_entry_t))))
+	    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    }
+    dest->heap_addr = mesg->heap_addr;
+    dest->nalloc = mesg->nalloc;
+    dest->nused = mesg->nused;
+
+    for (u = 0; u < mesg->nused; u++) {
+	dest->slot[u] = mesg->slot[u];
+	dest->slot[u].name = H5MM_xstrdup (mesg->slot[u].name);
+    }
+
+    /* Set return value */
+    ret_value=dest;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_efl_size
+ *
+ * Purpose:	Returns the size of the raw message in bytes not counting the
+ *		message type or size fields, but only the data fields.	This
+ *		function doesn't take into account message alignment. This
+ *		function doesn't count unused slots.
+ *
+ * Return:	Success:	Message data size in bytes.
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, November 25, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5O_efl_size(const H5F_t *f, const void *_mesg)
+{
+    const H5O_efl_t	*mesg = (const H5O_efl_t *) _mesg;
+    size_t		ret_value = 0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_efl_size);
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+
+    ret_value = H5F_SIZEOF_ADDR(f) +			/*heap address	*/
+		2 +					/*slots allocated*/
+		2 +					/*num slots used*/
+		4 +					/*reserved	*/
+		mesg->nused * (H5F_SIZEOF_SIZE(f) +	/*name offset	*/
+			       H5F_SIZEOF_SIZE(f) +	/*file offset	*/
+			       H5F_SIZEOF_SIZE(f));	/*file size	*/
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_efl_reset
+ *
+ * Purpose:	Frees internal pointers and resets the message to an
+ *		initialial state.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, November 25, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_efl_reset(void *_mesg)
+{
+    H5O_efl_t	*mesg = (H5O_efl_t *) _mesg;
+    size_t	u;              /* Local index variable */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_efl_reset);
+
+    /* check args */
+    assert(mesg);
+
+    /* reset */
+    for (u=0; u<mesg->nused; u++)
+	mesg->slot[u].name = H5MM_xfree (mesg->slot[u].name);
+    mesg->heap_addr = HADDR_UNDEF;
+    mesg->nused = mesg->nalloc = 0;
+    if(mesg->slot)
+        mesg->slot = H5MM_xfree(mesg->slot);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_efl_total_size
+ *
+ * Purpose:	Return the total size of the external file list by summing
+ *		the sizes of all of the files.
+ *
+ * Return:	Success:	Total reserved size for external data.
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, March  3, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t
+H5O_efl_total_size (H5O_efl_t *efl)
+{
+    hsize_t	ret_value = 0, tmp;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_efl_total_size);
+
+    if (efl->nused>0 &&
+	H5O_EFL_UNLIMITED==efl->slot[efl->nused-1].size) {
+	ret_value = H5O_EFL_UNLIMITED;
+    } else {
+        size_t		u;      /* Local index variable */
+
+	for (u=0; u<efl->nused; u++, ret_value=tmp) {
+	    tmp = ret_value + efl->slot[u].size;
+	    if (tmp<=ret_value)
+		HGOTO_ERROR (H5E_EFL, H5E_OVERFLOW, 0, "total external storage size overflowed");
+	}
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_efl_debug
+ *
+ * Purpose:	Prints debugging info for a message.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, November 25, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_efl_debug(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *_mesg, FILE * stream,
+	      int indent, int fwidth)
+{
+    const H5O_efl_t	   *mesg = (const H5O_efl_t *) _mesg;
+    char		    buf[64];
+    size_t		    u;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_efl_debug);
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+	      "Heap address:", mesg->heap_addr);
+
+    HDfprintf(stream, "%*s%-*s %u/%u\n", indent, "", fwidth,
+	      "Slots used/allocated:",
+	      mesg->nused, mesg->nalloc);
+
+    for (u = 0; u < mesg->nused; u++) {
+	sprintf (buf, "File %u", (unsigned)u);
+	HDfprintf (stream, "%*s%s:\n", indent, "", buf);
+
+	HDfprintf(stream, "%*s%-*s \"%s\"\n", indent+3, "", MAX (fwidth-3, 0),
+		  "Name:",
+		  mesg->slot[u].name);
+
+	HDfprintf(stream, "%*s%-*s %lu\n", indent+3, "", MAX (fwidth-3, 0),
+		  "Name offset:",
+		  (unsigned long)(mesg->slot[u].name_offset));
+
+	HDfprintf (stream, "%*s%-*s %lu\n", indent+3, "", MAX (fwidth-3, 0),
+		   "Offset of data in file:",
+		   (unsigned long)(mesg->slot[u].offset));
+
+	HDfprintf (stream, "%*s%-*s %lu\n", indent+3, "", MAX (fwidth-3, 0),
+		   "Bytes reserved for data:",
+		   (unsigned long)(mesg->slot[u].size));
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Ofill.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Ofill.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Ofill.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,886 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Wednesday, September 30, 1998
+ *
+ * Purpose:	The fill message indicates a bit pattern to use for
+ *		uninitialized data points of a dataset.
+ */
+
+#define H5O_PACKAGE		/*suppress error about including H5Opkg	  */
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free Lists				*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Opkg.h"             /* Object header functions                 */
+#include "H5Pprivate.h"		/* Property lists			*/
+
+
+static void  *H5O_fill_new_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
+static herr_t H5O_fill_new_encode(H5F_t *f, uint8_t *p, const void *_mesg);
+static void  *H5O_fill_new_copy(const void *_mesg, void *_dest, unsigned update_flags);
+static size_t H5O_fill_new_size(const H5F_t *f, const void *_mesg);
+static herr_t H5O_fill_new_reset(void *_mesg);
+static herr_t H5O_fill_new_free(void *_mesg);
+static herr_t H5O_fill_new_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
+			     int indent, int fwidth);
+
+static void  *H5O_fill_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
+static herr_t H5O_fill_encode(H5F_t *f, uint8_t *p, const void *_mesg);
+static void  *H5O_fill_copy(const void *_mesg, void *_dest, unsigned update_flags);
+static size_t H5O_fill_size(const H5F_t *f, const void *_mesg);
+static herr_t H5O_fill_reset(void *_mesg);
+static herr_t H5O_fill_free(void *_mesg);
+static herr_t H5O_fill_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
+			     int indent, int fwidth);
+
+/* This message derives from H5O, for old fill value before version 1.5 */
+const H5O_class_t H5O_FILL[1] = {{
+    H5O_FILL_ID,                /*message id number                     */
+    "fill",                     /*message name for debugging            */
+    sizeof(H5O_fill_t),         /*native message size                   */
+    H5O_fill_decode,            /*decode message                        */
+    H5O_fill_encode,            /*encode message                        */
+    H5O_fill_copy,              /*copy the native value                 */
+    H5O_fill_size,              /*raw message size                      */
+    H5O_fill_reset,             /*free internal memory                  */
+    H5O_fill_free,		/* free method			*/
+    NULL,		        /* file delete method		*/
+    NULL,			/* link method			*/
+    NULL,                       /*get share method                      */
+    NULL,                       /*set share method                      */
+    H5O_fill_debug,             /*debug the message                     */
+}};
+
+/* This message derives from H5O, for new fill value after version 1.4  */
+const H5O_class_t H5O_FILL_NEW[1] = {{
+    H5O_FILL_NEW_ID,		/*message id number			*/
+    "fill_new", 		/*message name for debugging		*/
+    sizeof(H5O_fill_new_t),	/*native message size			*/
+    H5O_fill_new_decode,	/*decode message			*/
+    H5O_fill_new_encode,	/*encode message			*/
+    H5O_fill_new_copy,		/*copy the native value			*/
+    H5O_fill_new_size,		/*raw message size			*/
+    H5O_fill_new_reset,		/*free internal memory			*/
+    H5O_fill_new_free,		/* free method			*/
+    NULL,		        /* file delete method		*/
+    NULL,			/* link method			*/
+    NULL,			/*get share method			*/
+    NULL,			/*set share method			*/
+    H5O_fill_new_debug,		/*debug the message			*/
+}};
+
+/* Initial version of the "old" fill value information */
+#define H5O_FILL_VERSION 	1
+/* Revised version of the "new" fill value information */
+#define H5O_FILL_VERSION_2 	2
+
+/* Declare a free list to manage the H5O_fill_new_t struct */
+H5FL_DEFINE(H5O_fill_new_t);
+
+/* Declare a free list to manage the H5O_fill_t struct */
+H5FL_DEFINE(H5O_fill_t);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_fill_new_decode
+ *
+ * Purpose:	Decode a new fill value message.  The new fill value
+ * 		message is fill value plus space allocation time and
+ * 		fill value writing time and whether fill value is defined.
+ *
+ * Return:	Success:	Ptr to new message in native struct.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:  Raymond Lu
+ *              Feb 26, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_fill_new_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const uint8_t *p,
+		H5O_shared_t UNUSED *sh)
+{
+    H5O_fill_new_t	*mesg=NULL;
+    int			version;
+    void		*ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_fill_new_decode);
+
+    assert(f);
+    assert(p);
+    assert(!sh);
+
+    if (NULL==(mesg=H5FL_CALLOC(H5O_fill_new_t)))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for fill value message");
+
+    /* Version */
+    version = *p++;
+    if( version != H5O_FILL_VERSION && version !=H5O_FILL_VERSION_2)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "bad version number for fill value message");
+
+    /* Space allocation time */
+    mesg->alloc_time = (H5D_alloc_time_t)*p++;
+
+    /* Fill value write time */
+    mesg->fill_time = (H5D_fill_time_t)*p++;
+
+    /* Whether fill value is defined */
+    mesg->fill_defined = *p++;
+
+    /* Only decode fill value information if one is defined */
+    if(mesg->fill_defined) {
+        INT32DECODE(p, mesg->size);
+        if (mesg->size>0) {
+            H5_CHECK_OVERFLOW(mesg->size,ssize_t,size_t);
+            if (NULL==(mesg->buf=H5MM_malloc((size_t)mesg->size)))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for fill value");
+            HDmemcpy(mesg->buf, p, (size_t)mesg->size);
+        }
+    } /* end if */
+    else
+        mesg->size=(-1);
+
+    /* Set return value */
+    ret_value = (void*)mesg;
+
+done:
+    if (!ret_value && mesg) {
+        if(mesg->buf)
+            H5MM_xfree(mesg->buf);
+	H5FL_FREE(H5O_fill_new_t,mesg);
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_fill_decode
+ *
+ * Purpose:     Decode a fill value message.
+ *
+ * Return:      Success:        Ptr to new message in native struct.
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  Robb Matzke
+ *              Wednesday, September 30, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_fill_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const uint8_t *p,
+                H5O_shared_t UNUSED *sh)
+{
+    H5O_fill_t  *mesg=NULL;
+    void        *ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_fill_decode);
+
+    assert(f);
+    assert(p);
+    assert(!sh);
+
+    if (NULL==(mesg=H5FL_CALLOC(H5O_fill_t)))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for fill value message");
+    UINT32DECODE(p, mesg->size);
+    if (mesg->size>0) {
+        if (NULL==(mesg->buf=H5MM_malloc(mesg->size)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for fill value");
+        HDmemcpy(mesg->buf, p, mesg->size);
+    }
+
+    /* Set return value */
+    ret_value = (void*)mesg;
+
+done:
+    if (!ret_value && mesg) {
+        if(mesg->buf)
+            H5MM_xfree(mesg->buf);
+	H5FL_FREE(H5O_fill_t,mesg);
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_fill_new_encode
+ *
+ * Purpose:	Encode a new fill value message.  The new fill value
+ *              message is fill value plus space allocation time and
+ *              fill value writing time and whether fill value is defined.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:  Raymond Lu
+ *              Feb 26, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_fill_new_encode(H5F_t UNUSED *f, uint8_t *p, const void *_mesg)
+{
+    const H5O_fill_new_t	*mesg = (const H5O_fill_new_t *)_mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_fill_new_encode);
+
+    assert(f);
+    assert(p);
+    assert(mesg && NULL==mesg->type);
+
+    /* Version */
+    *p++ = H5O_FILL_VERSION;
+    /* Space allocation time */
+    *p++ = mesg->alloc_time;
+    /* Fill value writing time */
+    *p++ = mesg->fill_time;
+    /* Whether fill value is defined */
+    *p++ = mesg->fill_defined;
+
+    /* Does it handle undefined fill value? */
+    INT32ENCODE(p, mesg->size);
+    if(mesg->size>0)
+        if(mesg->buf) {
+            H5_CHECK_OVERFLOW(mesg->size,ssize_t,size_t);
+            HDmemcpy(p, mesg->buf, (size_t)mesg->size);
+        } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_fill_encode
+ *
+ * Purpose:     Encode a fill value message.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_fill_encode(H5F_t UNUSED *f, uint8_t *p, const void *_mesg)
+{
+    const H5O_fill_t    *mesg = (const H5O_fill_t *)_mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_fill_encode);
+
+    assert(f);
+    assert(p);
+    assert(mesg && NULL==mesg->type);
+
+    UINT32ENCODE(p, mesg->size);
+    if(mesg->buf)
+        HDmemcpy(p, mesg->buf, mesg->size);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_fill_new_copy
+ *
+ * Purpose:	Copies a message from _MESG to _DEST, allocating _DEST if
+ *		necessary.  The new fill value message is fill value plus
+ *		space allocation time and fill value writing time and
+ *		whether fill value is defined.
+ *
+ * Return:	Success:	Ptr to _DEST
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:  Raymond Lu
+ *              Feb 26, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_fill_new_copy(const void *_mesg, void *_dest, unsigned UNUSED update_flags)
+{
+    const H5O_fill_new_t	*mesg = (const H5O_fill_new_t *)_mesg;
+    H5O_fill_new_t		*dest = (H5O_fill_new_t *)_dest;
+    void		*ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_fill_new_copy);
+
+    assert(mesg);
+
+    if (!dest && NULL==(dest=H5FL_MALLOC(H5O_fill_new_t)))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for fill message");
+
+    /* Copy data type of fill value */
+    if (mesg->type) {
+        if(NULL==(dest->type=H5T_copy(mesg->type, H5T_COPY_TRANSIENT)))
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to copy fill value data type");
+    } /* end if */
+    else
+        dest->type=NULL;
+
+    /* Copy fill value and its size */
+    if (mesg->buf) {
+        H5_CHECK_OVERFLOW(mesg->size,ssize_t,size_t);
+	if (NULL==(dest->buf=H5MM_malloc((size_t)mesg->size)))
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for fill value");
+	HDmemcpy(dest->buf, mesg->buf, (size_t)mesg->size);
+    } /* end if */
+    else
+        dest->buf=NULL;
+    dest->size = mesg->size;
+
+    /* Copy three fill value attributes */
+    dest->alloc_time   = mesg->alloc_time;
+    dest->fill_time    = mesg->fill_time;
+    dest->fill_defined = mesg->fill_defined;
+
+    /* Set return value */
+    ret_value = dest;
+
+done:
+    if (!ret_value && dest) {
+        if(dest->buf)
+            H5MM_xfree(dest->buf);
+	if (dest->type)
+            H5T_close(dest->type);
+	if (!_dest)
+            H5FL_FREE(H5O_fill_new_t,dest);
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_fill_copy
+ *
+ * Purpose:     Copies a message from _MESG to _DEST, allocating _DEST if
+ *              necessary.
+ *
+ * Return:      Success:        Ptr to _DEST
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_fill_copy(const void *_mesg, void *_dest, unsigned UNUSED update_flags)
+{
+    const H5O_fill_t    *mesg = (const H5O_fill_t *)_mesg;
+    H5O_fill_t          *dest = (H5O_fill_t *)_dest;
+    void                *ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_fill_copy);
+
+    assert(mesg);
+
+    if (!dest && NULL==(dest=H5FL_CALLOC(H5O_fill_t)))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for fill message");
+
+    if (mesg->type) {
+        if(NULL==(dest->type=H5T_copy(mesg->type, H5T_COPY_TRANSIENT)))
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to copy fill value data type");
+    } /* end if */
+    else
+        dest->type=NULL;
+
+    if (mesg->buf) {
+        if (NULL==(dest->buf=H5MM_malloc(mesg->size)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for fill value");
+        HDmemcpy(dest->buf, mesg->buf, mesg->size);
+    } /* end if */
+    else
+        dest->buf=NULL;
+    dest->size = mesg->size;
+
+    /* Set return value */
+    ret_value = dest;
+
+done:
+    if (!ret_value && dest) {
+        if(dest->buf)
+            H5MM_xfree(dest->buf);
+        if (dest->type)
+            H5T_close(dest->type);
+        if (!_dest)
+            H5FL_FREE(H5O_fill_t,dest);
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_fill_new_size
+ *
+ * Purpose:	Returns the size of the raw message in bytes not counting the
+ *		message type or size fields, but only the data fields.  This
+ *		function doesn't take into account alignment.  The new fill
+ *		value message is fill value plus space allocation time and
+ *              fill value writing time and whether fill value is defined.
+ *
+ * Return:	Success:	Message data size in bytes w/o alignment.
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5O_fill_new_size(const H5F_t UNUSED *f, const void *_mesg)
+{
+    const H5O_fill_new_t	*mesg = (const H5O_fill_new_t *)_mesg;
+    size_t			ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_fill_new_size);
+
+    assert(f);
+    assert(mesg);
+
+    ret_value = 1 + 		/* Version number        */
+		1 + 		/* Space allocation time */
+		1 + 		/* Fill value write time */
+		1 + 		/* Fill value defined    */
+		4 +		/* Fill value size	 */
+		(mesg->size>0 ? mesg->size : 0);	/* Size of fill value	 */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_fill_size
+ *
+ * Purpose:     Returns the size of the raw message in bytes not counting the
+ *              message type or size fields, but only the data fields.  This
+ *              function doesn't take into account alignment.
+ *
+ * Return:      Success:        Message data size in bytes w/o alignment.
+ *
+ *              Failure:        0
+ *
+ * Programmer:  Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5O_fill_size(const H5F_t UNUSED *f, const void *_mesg)
+{
+    const H5O_fill_t    *mesg = (const H5O_fill_t *)_mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_fill_size);
+
+    assert(f);
+    assert(mesg);
+
+    FUNC_LEAVE_NOAPI(4+mesg->size);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_fill_new_reset
+ *
+ * Purpose:	Resets a new message to an initial state.  The new fill value
+ *              message is fill value plus space allocation time and
+ *              fill value writing time and whether fill value is defined.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_fill_new_reset(void *_mesg)
+{
+    H5O_fill_new_t	*mesg = (H5O_fill_new_t *)_mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_fill_new_reset);
+
+    assert(mesg);
+
+    if(mesg->buf)
+        mesg->buf = H5MM_xfree(mesg->buf);
+    mesg->size = -1;
+    if (mesg->type) {
+	H5T_close(mesg->type);
+	mesg->type = NULL;
+    }
+    mesg->alloc_time   = (H5D_alloc_time_t)0;
+    mesg->fill_time    = (H5D_fill_time_t)0;
+    mesg->fill_defined = FALSE;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_fill_reset
+ *
+ * Purpose:     Resets a message to an initial state
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_fill_reset(void *_mesg)
+{
+    H5O_fill_t  *mesg = (H5O_fill_t *)_mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_fill_reset);
+
+    assert(mesg);
+
+    if(mesg->buf)
+        mesg->buf = H5MM_xfree(mesg->buf);
+    mesg->size = 0;
+    if (mesg->type) {
+        H5T_close(mesg->type);
+        mesg->type = NULL;
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_fill_new_free
+ *
+ * Purpose:	Free's the message
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, December 5, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_fill_new_free (void *mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_fill_new_free);
+
+    assert (mesg);
+
+    H5FL_FREE(H5O_fill_new_t,mesg);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_fill_free
+ *
+ * Purpose:	Free's the message
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, December 5, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_fill_free (void *mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_fill_free);
+
+    assert (mesg);
+
+    H5FL_FREE(H5O_fill_t,mesg);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_fill_new_debug
+ *
+ * Purpose:	Prints debugging info for the message.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_fill_new_debug(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *_mesg, FILE *stream,
+	       int indent, int fwidth)
+{
+    const H5O_fill_new_t	*mesg = (const H5O_fill_new_t *)_mesg;
+    H5D_fill_value_t fill_status;       /* Whether the fill value is defined */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_fill_new_debug);
+
+    assert(f);
+    assert(mesg);
+    assert(stream);
+    assert(indent>=0);
+    assert(fwidth>=0);
+
+    HDfprintf(stream, "%*s%-*s %u\n", indent, "", fwidth,
+	      "Version:", (unsigned)H5O_FILL_VERSION);
+    fprintf(stream, "%*s%-*s ", indent, "", fwidth, "Space Allocation Time:");
+    switch(mesg->alloc_time) {
+        case H5D_ALLOC_TIME_EARLY:
+            fprintf(stream,"Early\n");
+            break;
+
+        case H5D_ALLOC_TIME_LATE:
+            fprintf(stream,"Late\n");
+            break;
+
+        case H5D_ALLOC_TIME_INCR:
+            fprintf(stream,"Incremental\n");
+            break;
+
+        default:
+            fprintf(stream,"Unknown!\n");
+            break;
+
+    } /* end switch */
+    fprintf(stream, "%*s%-*s ", indent, "", fwidth, "Fill Time:");
+    switch(mesg->fill_time) {
+        case H5D_FILL_TIME_ALLOC:
+            fprintf(stream,"On Allocation\n");
+            break;
+
+        case H5D_FILL_TIME_NEVER:
+            fprintf(stream,"Never\n");
+            break;
+
+        case H5D_FILL_TIME_IFSET:
+            fprintf(stream,"If Set\n");
+            break;
+
+        default:
+            fprintf(stream,"Unknown!\n");
+            break;
+
+    } /* end switch */
+    fprintf(stream, "%*s%-*s ", indent, "", fwidth, "Fill Value Defined:");
+    H5P_is_fill_value_defined((const H5O_fill_t *)mesg, &fill_status);
+    switch(fill_status) {
+        case H5D_FILL_VALUE_UNDEFINED:
+            fprintf(stream,"Undefined\n");
+            break;
+
+        case H5D_FILL_VALUE_DEFAULT:
+            fprintf(stream,"Default\n");
+            break;
+
+        case H5D_FILL_VALUE_USER_DEFINED:
+            fprintf(stream,"User Defined\n");
+            break;
+
+        default:
+            fprintf(stream,"Unknown!\n");
+            break;
+
+    } /* end switch */
+    HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+	      "Size:", mesg->size);
+    fprintf(stream, "%*s%-*s ", indent, "", fwidth, "Data type:");
+    if (mesg->type) {
+	H5T_debug(mesg->type, stream);
+	fprintf(stream, "\n");
+    } else {
+	fprintf(stream, "<dataset type>\n");
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_fill_debug
+ *
+ * Purpose:	Prints debugging info for the message.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_fill_debug(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *_mesg, FILE *stream,
+	       int indent, int fwidth)
+{
+    const H5O_fill_t	*mesg = (const H5O_fill_t *)_mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_fill_debug);
+
+    assert(f);
+    assert(mesg);
+    assert(stream);
+    assert(indent>=0);
+    assert(fwidth>=0);
+
+    HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+	      "Bytes:", mesg->size);
+    fprintf(stream, "%*s%-*s ", indent, "", fwidth, "Data type:");
+    if (mesg->type) {
+	H5T_debug(mesg->type, stream);
+	fprintf(stream, "\n");
+    } else {
+	fprintf(stream, "<dataset type>\n");
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_fill_convert
+ *
+ * Purpose:	Convert a fill value from whatever data type it currently has
+ *		to the specified dataset type.  The `type' field of the fill
+ *		value struct will be set to NULL to indicate that it has the
+ *		same type as the dataset.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5O_fill_convert(void *_fill, H5T_t *dset_type, hid_t dxpl_id)
+{
+    H5O_fill_new_t	*fill = _fill;
+    H5T_path_t		*tpath=NULL;		/*type conversion info	*/
+    void		*buf=NULL, *bkg=NULL;	/*conversion buffers	*/
+    hid_t		src_id=-1, dst_id=-1;	/*datatype identifiers	*/
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_fill_convert);
+
+    assert(fill);
+    assert(dset_type);
+
+    /* No-op cases */
+    if (!fill->buf || !fill->type || 0==H5T_cmp(fill->type, dset_type, FALSE)) {
+	if (fill->type)
+            H5T_close(fill->type);
+	fill->type = NULL;
+	HGOTO_DONE(SUCCEED);
+    }
+
+    /*
+     * Can we convert between source and destination data types?
+     */
+    if (NULL==(tpath=H5T_path_find(fill->type, dset_type, NULL, NULL, dxpl_id)))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert between src and dst datatypes")
+
+    /* Don't bother doing anything if there will be no actual conversion */
+    if (!H5T_path_noop(tpath)) {
+        if ((src_id = H5I_register(H5I_DATATYPE,
+                                   H5T_copy(fill->type, H5T_COPY_ALL)))<0 ||
+                (dst_id = H5I_register(H5I_DATATYPE,
+                                   H5T_copy(dset_type, H5T_COPY_ALL)))<0)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to copy/register data type");
+
+        /*
+         * Datatype conversions are always done in place, so we need a buffer
+         * that is large enough for both source and destination.
+         */
+        if (H5T_get_size(fill->type)>=H5T_get_size(dset_type)) {
+            buf = fill->buf;
+        } else {
+            if (NULL==(buf=H5MM_malloc(H5T_get_size(dset_type))))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion");
+            HDmemcpy(buf, fill->buf, H5T_get_size(fill->type));
+        }
+        if (H5T_path_bkg(tpath) && NULL==(bkg=H5MM_malloc(H5T_get_size(dset_type))))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion");
+
+        /* Do the conversion */
+        if (H5T_convert(tpath, src_id, dst_id, 1, 0, 0, buf, bkg, dxpl_id)<0)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "datatype conversion failed");
+
+        /* Update the fill message */
+        if (buf!=fill->buf) {
+            H5MM_xfree(fill->buf);
+            fill->buf = buf;
+        }
+        H5T_close(fill->type);
+        fill->type = NULL;
+        H5_ASSIGN_OVERFLOW(fill->size,H5T_get_size(dset_type),size_t,ssize_t);
+    } /* end if */
+
+done:
+    if (src_id>=0)
+        H5I_dec_ref(src_id);
+    if (dst_id>=0)
+        H5I_dec_ref(dst_id);
+    if (buf!=fill->buf)
+        H5MM_xfree(buf);
+    if (bkg)
+        H5MM_xfree(bkg);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Olayout.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Olayout.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Olayout.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,730 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Wednesday, October  8, 1997
+ *
+ * Purpose:     Messages related to data layout.
+ */
+
+#define H5O_PACKAGE	/*suppress error about including H5Opkg	  */
+
+
+#include "H5private.h"
+#include "H5Dprivate.h"
+#include "H5Eprivate.h"
+#include "H5FLprivate.h"	/*Free Lists	  */
+#include "H5MFprivate.h"	/* File space management		*/
+#include "H5MMprivate.h"
+#include "H5Opkg.h"             /* Object header functions                  */
+
+/* PRIVATE PROTOTYPES */
+static void *H5O_layout_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
+static herr_t H5O_layout_encode(H5F_t *f, uint8_t *p, const void *_mesg);
+static void *H5O_layout_copy(const void *_mesg, void *_dest, unsigned update_flags);
+static size_t H5O_layout_size(const H5F_t *f, const void *_mesg);
+static herr_t H5O_layout_reset(void *_mesg);
+static herr_t H5O_layout_free(void *_mesg);
+static herr_t H5O_layout_delete(H5F_t *f, hid_t dxpl_id, const void *_mesg, hbool_t adj_link);
+static herr_t H5O_layout_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE * stream,
+			       int indent, int fwidth);
+
+/* This message derives from H5O */
+const H5O_class_t H5O_LAYOUT[1] = {{
+    H5O_LAYOUT_ID,          	/*message id number             */
+    "layout",               	/*message name for debugging    */
+    sizeof(H5O_layout_t),   	/*native message size           */
+    H5O_layout_decode,      	/*decode message                */
+    H5O_layout_encode,      	/*encode message                */
+    H5O_layout_copy,        	/*copy the native value         */
+    H5O_layout_size,        	/*size of message on disk       */
+    H5O_layout_reset,           /*reset method                  */
+    H5O_layout_free,        	/*free the struct		*/
+    H5O_layout_delete,	        /* file delete method		*/
+    NULL,			/* link method			*/
+    NULL,		    	/*get share method		*/
+    NULL,			/*set share method		*/
+    H5O_layout_debug,       	/*debug the message             */
+}};
+
+/* For forward and backward compatibility.  Version is 1 when space is
+ * allocated; 2 when space is delayed for allocation; 3
+ * is revised to just store information needed for each storage type. */
+#define H5O_LAYOUT_VERSION_1	1
+#define H5O_LAYOUT_VERSION_2	2
+#define H5O_LAYOUT_VERSION_3	3
+
+/* Declare a free list to manage the H5O_layout_t struct */
+H5FL_DEFINE(H5O_layout_t);
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_layout_decode
+ *
+ * Purpose:     Decode an data layout message and return a pointer to a
+ *              new one created with malloc().
+ *
+ * Return:      Success:        Ptr to new message in native order.
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  Robb Matzke
+ *              Wednesday, October  8, 1997
+ *
+ * Modifications:
+ * 	Robb Matzke, 1998-07-20
+ *	Rearranged the message to add a version number at the beginning.
+ *
+ *      Raymond Lu, 2002-2-26
+ *      Added version number 2 case depends on if space has been allocated
+ *      at the moment when layout header message is updated.
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_layout_decode(H5F_t *f, hid_t UNUSED dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
+{
+    H5O_layout_t           *mesg = NULL;
+    unsigned               u;
+    void                   *ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_layout_decode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert (!sh);
+
+    /* decode */
+    if (NULL==(mesg = H5FL_CALLOC(H5O_layout_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* Version. 1 when space allocated; 2 when space allocation is delayed */
+    mesg->version = *p++;
+    if (mesg->version<H5O_LAYOUT_VERSION_1 || mesg->version>H5O_LAYOUT_VERSION_3)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "bad version number for layout message");
+
+    if(mesg->version < H5O_LAYOUT_VERSION_3) {
+        unsigned	ndims;			/* Num dimensions in chunk           */
+
+        /* Dimensionality */
+        ndims = *p++;
+        if (ndims>H5O_LAYOUT_NDIMS)
+            HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "dimensionality is too large");
+
+        /* Layout class */
+        mesg->type = (H5D_layout_t)*p++;
+        assert(H5D_CONTIGUOUS == mesg->type || H5D_CHUNKED == mesg->type || H5D_COMPACT == mesg->type);
+
+        /* Reserved bytes */
+        p += 5;
+
+        /* Address */
+        if(mesg->type==H5D_CONTIGUOUS)
+            H5F_addr_decode(f, &p, &(mesg->u.contig.addr));
+        else if(mesg->type==H5D_CHUNKED)
+            H5F_addr_decode(f, &p, &(mesg->u.chunk.addr));
+
+        /* Read the size */
+        if(mesg->type!=H5D_CHUNKED) {
+	    mesg->unused.ndims=ndims;
+
+            for (u = 0; u < ndims; u++)
+                UINT32DECODE(p, mesg->unused.dim[u]);
+
+            /* Don't compute size of contiguous storage here, due to possible
+             * truncation of the dimension sizes when they were stored in this
+             * version of the layout message.  Compute the contiguous storage
+             * size in the dataset code, where we've got the dataspace
+             * information available also.  - QAK 5/26/04
+             */
+        } /* end if */
+        else {
+            mesg->u.chunk.ndims=ndims;
+            for (u = 0; u < ndims; u++)
+                UINT32DECODE(p, mesg->u.chunk.dim[u]);
+
+            /* Compute chunk size */
+            for (u=1, mesg->u.chunk.size=mesg->u.chunk.dim[0]; u<ndims; u++)
+                mesg->u.chunk.size *= mesg->u.chunk.dim[u];
+        } /* end if */
+
+        if(mesg->type == H5D_COMPACT) {
+            UINT32DECODE(p, mesg->u.compact.size);
+            if(mesg->u.compact.size > 0) {
+                if(NULL==(mesg->u.compact.buf=H5MM_malloc(mesg->u.compact.size)))
+                    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for compact data buffer");
+                HDmemcpy(mesg->u.compact.buf, p, mesg->u.compact.size);
+                p += mesg->u.compact.size;
+            }
+        }
+    } /* end if */
+    else {
+        /* Layout class */
+        mesg->type = (H5D_layout_t)*p++;
+
+        /* Interpret the rest of the message according to the layout class */
+        switch(mesg->type) {
+            case H5D_CONTIGUOUS:
+                H5F_addr_decode(f, &p, &(mesg->u.contig.addr));
+                H5F_DECODE_LENGTH(f, p, mesg->u.contig.size);
+                break;
+
+            case H5D_CHUNKED:
+                /* Dimensionality */
+                mesg->u.chunk.ndims = *p++;
+                if (mesg->u.chunk.ndims>H5O_LAYOUT_NDIMS)
+                    HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "dimensionality is too large");
+
+                /* B-tree address */
+                H5F_addr_decode(f, &p, &(mesg->u.chunk.addr));
+
+                /* Chunk dimensions */
+                for (u = 0; u < mesg->u.chunk.ndims; u++)
+                    UINT32DECODE(p, mesg->u.chunk.dim[u]);
+
+                /* Compute chunk size */
+                for (u=1, mesg->u.chunk.size=mesg->u.chunk.dim[0]; u<mesg->u.chunk.ndims; u++)
+                    mesg->u.chunk.size *= mesg->u.chunk.dim[u];
+                break;
+
+            case H5D_COMPACT:
+                UINT16DECODE(p, mesg->u.compact.size);
+                if(mesg->u.compact.size > 0) {
+                    if(NULL==(mesg->u.compact.buf=H5MM_malloc(mesg->u.compact.size)))
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for compact data buffer");
+                    HDmemcpy(mesg->u.compact.buf, p, mesg->u.compact.size);
+                    p += mesg->u.compact.size;
+                } /* end if */
+                break;
+
+            default:
+                HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "Invalid layout class");
+        } /* end switch */
+    } /* end else */
+
+    /* Set return value */
+    ret_value=mesg;
+
+done:
+    if(ret_value==NULL) {
+        if(mesg)
+            H5FL_FREE(H5O_layout_t,mesg);
+    } /* end if */
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_layout_encode
+ *
+ * Purpose:     Encodes a message.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              Wednesday, October  8, 1997
+ *
+ * Modifications:
+ * 	Robb Matzke, 1998-07-20
+ *	Rearranged the message to add a version number at the beginning.
+ *
+ *	Raymond Lu, 2002-2-26
+ *	Added version number 2 case depends on if space has been allocated
+ *	at the moment when layout header message is updated.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_layout_encode(H5F_t *f, uint8_t *p, const void *_mesg)
+{
+    const H5O_layout_t     *mesg = (const H5O_layout_t *) _mesg;
+    unsigned               u;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_layout_encode);
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+    assert(mesg->version>0);
+    assert(p);
+
+    /* Version */
+    *p++ = mesg->version;
+
+    /* Check for which information to write */
+    if(mesg->version<3) {
+        /* number of dimensions */
+        if(mesg->type!=H5D_CHUNKED) {
+            assert(mesg->unused.ndims > 0 && mesg->unused.ndims <= H5O_LAYOUT_NDIMS);
+            *p++ = mesg->unused.ndims;
+        } /* end if */
+        else {
+            assert(mesg->u.chunk.ndims > 0 && mesg->u.chunk.ndims <= H5O_LAYOUT_NDIMS);
+            *p++ = mesg->u.chunk.ndims;
+        } /* end else */
+
+        /* layout class */
+        *p++ = mesg->type;
+
+        /* reserved bytes should be zero */
+        for (u=0; u<5; u++)
+            *p++ = 0;
+
+        /* data or B-tree address */
+        if(mesg->type==H5D_CONTIGUOUS)
+            H5F_addr_encode(f, &p, mesg->u.contig.addr);
+        else if(mesg->type==H5D_CHUNKED)
+            H5F_addr_encode(f, &p, mesg->u.chunk.addr);
+
+        /* dimension size */
+        if(mesg->type!=H5D_CHUNKED)
+            for (u = 0; u < mesg->unused.ndims; u++)
+                UINT32ENCODE(p, mesg->unused.dim[u])
+        else
+            for (u = 0; u < mesg->u.chunk.ndims; u++)
+                UINT32ENCODE(p, mesg->u.chunk.dim[u]);
+
+        if(mesg->type==H5D_COMPACT) {
+            UINT32ENCODE(p, mesg->u.compact.size);
+            if(mesg->u.compact.size>0 && mesg->u.compact.buf) {
+                HDmemcpy(p, mesg->u.compact.buf, mesg->u.compact.size);
+                p += mesg->u.compact.size;
+            }
+        }
+    } /* end if */
+    else {
+        /* Layout class */
+        *p++ = mesg->type;
+
+        /* Write out layout class specific information */
+        switch(mesg->type) {
+            case H5D_CONTIGUOUS:
+                H5F_addr_encode(f, &p, mesg->u.contig.addr);
+                H5F_ENCODE_LENGTH(f, p, mesg->u.contig.size);
+                break;
+
+            case H5D_CHUNKED:
+                /* Number of dimensions */
+                assert(mesg->u.chunk.ndims > 0 && mesg->u.chunk.ndims <= H5O_LAYOUT_NDIMS);
+                *p++ = mesg->u.chunk.ndims;
+
+                /* B-tree address */
+                H5F_addr_encode(f, &p, mesg->u.chunk.addr);
+
+                /* Dimension sizes */
+                for (u = 0; u < mesg->u.chunk.ndims; u++)
+                    UINT32ENCODE(p, mesg->u.chunk.dim[u]);
+                break;
+
+            case H5D_COMPACT:
+                /* Size of raw data */
+                UINT16ENCODE(p, mesg->u.compact.size);
+
+                /* Raw data */
+                if(mesg->u.compact.size>0 && mesg->u.compact.buf) {
+                    HDmemcpy(p, mesg->u.compact.buf, mesg->u.compact.size);
+                    p += mesg->u.compact.size;
+                } /* end if */
+                break;
+
+            default:
+                HGOTO_ERROR(H5E_OHDR, H5E_CANTENCODE, FAIL, "Invalid layout class");
+        } /* end switch */
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_layout_copy
+ *
+ * Purpose:     Copies a message from _MESG to _DEST, allocating _DEST if
+ *              necessary.
+ *
+ * Return:      Success:        Ptr to _DEST
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  Robb Matzke
+ *              Wednesday, October  8, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_layout_copy(const void *_mesg, void *_dest, unsigned UNUSED update_flags)
+{
+    const H5O_layout_t     *mesg = (const H5O_layout_t *) _mesg;
+    H5O_layout_t           *dest = (H5O_layout_t *) _dest;
+    void                   *ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_layout_copy);
+
+    /* check args */
+    assert(mesg);
+    if (!dest && NULL==(dest=H5FL_MALLOC(H5O_layout_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* copy */
+    *dest = *mesg;
+
+    /* Deep copy the buffer for compact datasets also */
+    if(mesg->type==H5D_COMPACT) {
+        /* Allocate memory for the raw data */
+        if (NULL==(dest->u.compact.buf=H5MM_malloc(dest->u.compact.size)))
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "unable to allocate memory for compact dataset");
+
+        /* Copy over the raw data */
+        HDmemcpy(dest->u.compact.buf,mesg->u.compact.buf,dest->u.compact.size);
+    } /* end if */
+
+    /* Set return value */
+    ret_value=dest;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_layout_meta_size
+ *
+ * Purpose:     Returns the size of the raw message in bytes except raw data
+ *              part for compact dataset.  This function doesn't take into
+ *              account message alignment.
+ *
+ * Return:      Success:        Message data size in bytes(except raw data
+ *                              for compact dataset)
+ *              Failure:        0
+ *
+ * Programmer:  Raymond Lu
+ *              August 14, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5O_layout_meta_size(const H5F_t *f, const void *_mesg)
+{
+    /* Casting away const OK - QAK */
+    H5O_layout_t      *mesg = (H5O_layout_t *) _mesg;
+    size_t                  ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_layout_meta_size);
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+
+    /* Check version information for new datasets */
+    if(mesg->version==0) {
+        unsigned               u;
+
+        /* Check for dimension that would be truncated */
+        assert(mesg->unused.ndims > 0 && mesg->unused.ndims <= H5O_LAYOUT_NDIMS);
+        for (u = 0; u < mesg->unused.ndims; u++)
+            if(mesg->unused.dim[u]!=(0xffffffff&mesg->unused.dim[u])) {
+                /* Make certain the message is encoded with the new version */
+                mesg->version=3;
+                break;
+            } /* end if */
+
+        /* If the message doesn't _have_ to be encoded with the new version */
+        if(mesg->version==0) {
+            /* Version: 1 when space allocated; 2 when space allocation is delayed */
+            if(mesg->type==H5D_CONTIGUOUS) {
+                if(mesg->u.contig.addr==HADDR_UNDEF)
+                    mesg->version = H5O_LAYOUT_VERSION_2;
+                else
+                    mesg->version = H5O_LAYOUT_VERSION_1;
+            } else if(mesg->type==H5D_COMPACT) {
+                mesg->version = H5O_LAYOUT_VERSION_2;
+            } else
+                mesg->version = H5O_LAYOUT_VERSION_1;
+        } /* end if */
+    } /* end if */
+    assert(mesg->version>0);
+
+    if(mesg->version<H5O_LAYOUT_VERSION_3) {
+        ret_value = 1 +                     /* Version number                       */
+                    1 +                     /* layout class type                    */
+                    1 +                     /* dimensionality                       */
+                    5 +                     /* reserved bytes                       */
+                    mesg->unused.ndims * 4;        /* size of each dimension               */
+
+        if(mesg->type==H5D_COMPACT)
+            ret_value += 4;        /* size field for compact dataset       */
+        else
+            ret_value += H5F_SIZEOF_ADDR(f); /* file address of data or B-tree for chunked dataset */
+    } /* end if */
+    else {
+        ret_value = 1 +                     /* Version number                       */
+                    1;                      /* layout class type                    */
+
+        switch(mesg->type) {
+            case H5D_CONTIGUOUS:
+                ret_value += H5F_SIZEOF_ADDR(f);    /* Address of data */
+                ret_value += H5F_SIZEOF_SIZE(f);    /* Length of data */
+                break;
+
+            case H5D_CHUNKED:
+                /* Number of dimensions (1 byte) */
+                assert(mesg->u.chunk.ndims > 0 && mesg->u.chunk.ndims <= H5O_LAYOUT_NDIMS);
+                ret_value++;
+
+                /* B-tree address */
+                ret_value += H5F_SIZEOF_ADDR(f);    /* Address of data */
+
+                /* Dimension sizes */
+                ret_value += mesg->u.chunk.ndims*4;
+                break;
+
+            case H5D_COMPACT:
+                /* Size of raw data */
+                ret_value+=2;
+                break;
+
+            default:
+                HGOTO_ERROR(H5E_OHDR, H5E_CANTENCODE, 0, "Invalid layout class");
+        } /* end switch */
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_layout_size
+ *
+ * Purpose:     Returns the size of the raw message in bytes.  If it's
+ *              compact dataset, the data part is also included.
+ *              This function doesn't take into account message alignment.
+ *
+ * Return:      Success:        Message data size in bytes
+ *
+ *              Failure:        0
+ *
+ * Programmer:  Robb Matzke
+ *              Wednesday, October  8, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5O_layout_size(const H5F_t *f, const void *_mesg)
+{
+    const H5O_layout_t     *mesg = (const H5O_layout_t *) _mesg;
+    size_t                  ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_layout_size);
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+
+    ret_value = H5O_layout_meta_size(f, mesg);
+    if(mesg->type==H5D_COMPACT)
+        ret_value += mesg->u.compact.size;/* data for compact dataset             */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_layout_reset
+ *
+ * Purpose:	Frees resources within a data type message, but doesn't free
+ *		the message itself.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, September 13, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_layout_reset (void *_mesg)
+{
+    H5O_layout_t     *mesg = (H5O_layout_t *) _mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_layout_reset);
+
+    if(mesg) {
+        /* Free the compact storage buffer */
+        if(mesg->type==H5D_COMPACT)
+            mesg->u.compact.buf=H5MM_xfree(mesg->u.compact.buf);
+
+        /* Reset the message */
+        mesg->type=H5D_CONTIGUOUS;
+        mesg->version=0;
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_layout_free
+ *
+ * Purpose:	Free's the message
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, March 11, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_layout_free (void *_mesg)
+{
+    H5O_layout_t     *mesg = (H5O_layout_t *) _mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_layout_free);
+
+    assert (mesg);
+
+    /* Free the compact storage buffer */
+    if(mesg->type==H5D_COMPACT)
+        mesg->u.compact.buf=H5MM_xfree(mesg->u.compact.buf);
+
+    H5FL_FREE(H5O_layout_t,mesg);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_layout_delete
+ *
+ * Purpose:     Free file space referenced by message
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *              Wednesday, March 19, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_layout_delete(H5F_t *f, hid_t dxpl_id, const void *_mesg, hbool_t UNUSED adj_link)
+{
+    const H5O_layout_t     *mesg = (const H5O_layout_t *) _mesg;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_layout_delete);
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+
+    /* Perform different actions, depending on the type of storage */
+    switch(mesg->type) {
+        case H5D_COMPACT:       /* Compact data storage */
+            /* Nothing required */
+            break;
+
+        case H5D_CONTIGUOUS:    /* Contiguous block on disk */
+            /* Free the file space for the raw data */
+            if (H5D_contig_delete(f, dxpl_id, mesg)<0)
+                HGOTO_ERROR(H5E_OHDR, H5E_CANTFREE, FAIL, "unable to free raw data");
+            break;
+
+        case H5D_CHUNKED:       /* Chunked blocks on disk */
+            /* Free the file space for the raw data */
+            if (H5D_istore_delete(f, dxpl_id, mesg)<0)
+                HGOTO_ERROR(H5E_OHDR, H5E_CANTFREE, FAIL, "unable to free raw data");
+            break;
+
+        default:
+            HGOTO_ERROR (H5E_OHDR, H5E_BADTYPE, FAIL, "not valid storage type");
+    } /* end switch */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_layout_delete() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_layout_debug
+ *
+ * Purpose:     Prints debugging info for a message.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              Wednesday, October  8, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_layout_debug(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *_mesg, FILE * stream,
+		 int indent, int fwidth)
+{
+    const H5O_layout_t     *mesg = (const H5O_layout_t *) _mesg;
+    unsigned                    u;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_layout_debug);
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    if(mesg->type==H5D_CHUNKED) {
+        HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+                  "B-tree address:", mesg->u.chunk.addr);
+        HDfprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
+                  "Number of dimensions:",
+                  (unsigned long) (mesg->u.chunk.ndims));
+        /* Size */
+        HDfprintf(stream, "%*s%-*s {", indent, "", fwidth, "Size:");
+        for (u = 0; u < mesg->u.chunk.ndims; u++) {
+            HDfprintf(stream, "%s%lu", u ? ", " : "",
+                      (unsigned long) (mesg->u.chunk.dim[u]));
+        }
+        HDfprintf(stream, "}\n");
+    } /* end if */
+    else if(mesg->type==H5D_CONTIGUOUS) {
+        HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+                  "Data address:", mesg->u.contig.addr);
+        HDfprintf(stream, "%*s%-*s %Hu\n", indent, "", fwidth,
+                  "Data Size:", mesg->u.contig.size);
+    } /* end if */
+    else {
+        HDfprintf(stream, "%*s%-*s %Zu\n", indent, "", fwidth,
+                  "Data Size:", mesg->u.compact.size);
+    } /* end else */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Omtime.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Omtime.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Omtime.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,567 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:	Robb Matzke <matzke at llnl.gov>
+ *		Friday, July 24, 1998
+ *
+ * Purpose:	The object modification time message.
+ */
+
+#define H5O_PACKAGE	/*suppress error about including H5Opkg	  */
+
+#include "H5private.h"
+#include "H5Eprivate.h"
+#include "H5FLprivate.h"	/*Free Lists	  */
+#include "H5MMprivate.h"
+#include "H5Opkg.h"             /* Object header functions                  */
+
+#if defined (WIN32) && !defined (__MWERKS__)
+#include <sys/types.h>
+#include <sys/timeb.h>
+#endif
+
+
+static void *H5O_mtime_new_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
+static herr_t H5O_mtime_new_encode(H5F_t *f, uint8_t *p, const void *_mesg);
+static size_t H5O_mtime_new_size(const H5F_t *f, const void *_mesg);
+
+static void *H5O_mtime_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
+static herr_t H5O_mtime_encode(H5F_t *f, uint8_t *p, const void *_mesg);
+static void *H5O_mtime_copy(const void *_mesg, void *_dest, unsigned update_flags);
+static size_t H5O_mtime_size(const H5F_t *f, const void *_mesg);
+static herr_t H5O_mtime_reset(void *_mesg);
+static herr_t H5O_mtime_free(void *_mesg);
+static herr_t H5O_mtime_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
+			     int indent, int fwidth);
+
+/* This message derives from H5O */
+const H5O_class_t H5O_MTIME[1] = {{
+    H5O_MTIME_ID,		/*message id number		*/
+    "mtime",			/*message name for debugging	*/
+    sizeof(time_t),		/*native message size		*/
+    H5O_mtime_decode,		/*decode message		*/
+    H5O_mtime_encode,		/*encode message		*/
+    H5O_mtime_copy,		/*copy the native value		*/
+    H5O_mtime_size,		/*raw message size		*/
+    H5O_mtime_reset,		/* reset method			*/
+    H5O_mtime_free,		/* free method			*/
+    NULL,		        /* file delete method		*/
+    NULL,			/* link method			*/
+    NULL,			/*get share method		*/
+    NULL,			/*set share method		*/
+    H5O_mtime_debug,		/*debug the message		*/
+}};
+
+/* This message derives from H5O */
+/* (Only encode, decode & size routines are different from old mtime routines) */
+const H5O_class_t H5O_MTIME_NEW[1] = {{
+    H5O_MTIME_NEW_ID,		/*message id number		*/
+    "mtime_new",		/*message name for debugging	*/
+    sizeof(time_t),		/*native message size		*/
+    H5O_mtime_new_decode,	/*decode message		*/
+    H5O_mtime_new_encode,	/*encode message		*/
+    H5O_mtime_copy,		/*copy the native value		*/
+    H5O_mtime_new_size,		/*raw message size		*/
+    H5O_mtime_reset,		/* reset method			*/
+    H5O_mtime_free,		/* free method			*/
+    NULL,		        /* file delete method		*/
+    NULL,			/* link method			*/
+    NULL,			/*get share method		*/
+    NULL,			/*set share method		*/
+    H5O_mtime_debug,		/*debug the message		*/
+}};
+
+/* Current version of new mtime information */
+#define H5O_MTIME_VERSION 	1
+
+/* Track whether tzset routine was called */
+static int	ntzset=0;
+
+/* Declare a free list to manage the time_t struct */
+H5FL_DEFINE(time_t);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_mtime_new_decode
+ *
+ * Purpose:	Decode a new modification time message and return a pointer to a
+ *		new time_t value.
+ *
+ * Return:	Success:	Ptr to new message in native struct.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Jan  3 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_mtime_new_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const uint8_t *p,
+		 H5O_shared_t UNUSED *sh)
+{
+    time_t	*mesg;
+    uint32_t    tmp_time;       /* Temporary copy of the time */
+    void        *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_mtime_new_decode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert (!sh);
+
+    /* decode */
+    if(*p++ != H5O_MTIME_VERSION)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "bad version number for mtime message");
+
+    /* Skip reserved bytes */
+    p+=3;
+
+    /* Get the time_t from the file */
+    UINT32DECODE(p, tmp_time);
+
+    /* The return value */
+    if (NULL==(mesg = H5FL_MALLOC(time_t)))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    *mesg = (time_t)tmp_time;
+
+    /* Set return value */
+    ret_value=mesg;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_mtime_new_decode() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_mtime_decode
+ *
+ * Purpose:	Decode a modification time message and return a pointer to a
+ *		new time_t value.
+ *
+ * Return:	Success:	Ptr to new message in native struct.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 24 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_mtime_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const uint8_t *p,
+		 H5O_shared_t UNUSED *sh)
+{
+    time_t	*mesg, the_time;
+    int	i;
+    struct tm	tm;
+    void        *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_mtime_decode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert (!sh);
+
+    /* Initialize time zone information */
+    if (!ntzset) {
+        HDtzset();
+        ntzset=1;
+    } /* end if */
+
+    /* decode */
+    for (i=0; i<14; i++) {
+	if (!HDisdigit(p[i]))
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "badly formatted modification time message");
+    }
+
+    /*
+     * Convert YYYYMMDDhhmmss UTC to a time_t.  This is a little problematic
+     * because mktime() operates on local times.  We convert to local time
+     * and then figure out the adjustment based on the local time zone and
+     * daylight savings setting.
+     */
+    HDmemset(&tm, 0, sizeof tm);
+    tm.tm_year = (p[0]-'0')*1000 + (p[1]-'0')*100 +
+		 (p[2]-'0')*10 + (p[3]-'0') - 1900;
+    tm.tm_mon = (p[4]-'0')*10 + (p[5]-'0') - 1;
+    tm.tm_mday = (p[6]-'0')*10 + (p[7]-'0');
+    tm.tm_hour = (p[8]-'0')*10 + (p[9]-'0');
+    tm.tm_min = (p[10]-'0')*10 + (p[11]-'0');
+    tm.tm_sec = (p[12]-'0')*10 + (p[13]-'0');
+    tm.tm_isdst = -1; /*figure it out*/
+    if ((time_t)-1==(the_time=HDmktime(&tm)))
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "badly formatted modification time message");
+
+#if defined(H5_HAVE_TM_GMTOFF)
+    /* FreeBSD, OSF 4.0 */
+    the_time += tm.tm_gmtoff;
+#elif defined(H5_HAVE___TM_GMTOFF)
+    /* Linux libc-4 */
+    the_time += tm.__tm_gmtoff;
+#elif defined(H5_HAVE_TIMEZONE)
+    /* Linux libc-5 */
+    the_time -= timezone - (tm.tm_isdst?3600:0);
+#elif defined(H5_HAVE_BSDGETTIMEOFDAY) && defined(H5_HAVE_STRUCT_TIMEZONE)
+    /* Irix5.3 */
+    {
+        struct timezone tz;
+
+        if (HDBSDgettimeofday(NULL, &tz)<0)
+            HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to obtain local timezone information");
+        the_time -= tz.tz_minuteswest * 60 - (tm.tm_isdst ? 3600 : 0);
+    }
+#elif defined(H5_HAVE_GETTIMEOFDAY) && defined(H5_HAVE_STRUCT_TIMEZONE) && defined(H5_GETTIMEOFDAY_GIVES_TZ)
+    {
+	struct timezone tz;
+	struct timeval tv;  /* Used as a placebo; some systems don't like NULL */
+
+	if (HDgettimeofday(&tv, &tz) < 0)
+	    HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to obtain local timezone information");
+
+	the_time -= tz.tz_minuteswest * 60 - (tm.tm_isdst ? 3600 : 0);
+    }
+#elif defined (WIN32)
+  #if !defined (__MWERKS__) /* MSVC */
+    {
+     struct timeb timebuffer;
+     long  tz;
+
+     ftime(&timebuffer);
+     tz = timebuffer.timezone;
+     /* daylight is not handled properly. Currently we just hard-code
+     the problem. */
+     the_time -= tz * 60 - 3600;
+    }
+  #else  /*__MWERKS__*/
+
+    ;
+
+  #endif /*__MWERKS__*/
+#else /* WIN32 */
+    /*
+     * The catch-all.  If we can't convert a character string universal
+     * coordinated time to a time_t value reliably then we can't decode the
+     * modification time message. This really isn't as bad as it sounds -- the
+     * only way a user can get the modification time is from H5Gget_objinfo()
+     * and H5G_get_objinfo() can gracefully recover.
+     */
+
+    /* Irix64 */
+    HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to obtain local timezone information");
+#endif
+
+    /* The return value */
+    if (NULL==(mesg = H5FL_MALLOC(time_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    *mesg = the_time;
+
+    /* Set return value */
+    ret_value=mesg;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_mtime_new_encode
+ *
+ * Purpose:	Encodes a new modification time message.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Jan  3 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_mtime_new_encode(H5F_t UNUSED *f, uint8_t *p, const void *_mesg)
+{
+    const time_t	*mesg = (const time_t *) _mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_mtime_new_encode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert(mesg);
+
+    /* Version */
+    *p++ = H5O_MTIME_VERSION;
+
+    /* Reserved bytes */
+    *p++ = 0;
+    *p++ = 0;
+    *p++ = 0;
+
+    /* Encode time */
+    UINT32ENCODE(p, *mesg);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5O_mtime_new_encode() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_mtime_encode
+ *
+ * Purpose:	Encodes a modification time message.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 24 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_mtime_encode(H5F_t UNUSED *f, uint8_t *p, const void *_mesg)
+{
+    const time_t	*mesg = (const time_t *) _mesg;
+    struct tm		*tm;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_mtime_encode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert(mesg);
+
+    /* encode */
+    tm = HDgmtime(mesg);
+    sprintf((char*)p, "%04d%02d%02d%02d%02d%02d",
+	    1900+tm->tm_year, 1+tm->tm_mon, tm->tm_mday,
+	    tm->tm_hour, tm->tm_min, tm->tm_sec);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_mtime_copy
+ *
+ * Purpose:	Copies a message from _MESG to _DEST, allocating _DEST if
+ *		necessary.
+ *
+ * Return:	Success:	Ptr to _DEST
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 24 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_mtime_copy(const void *_mesg, void *_dest, unsigned UNUSED update_flags)
+{
+    const time_t	*mesg = (const time_t *) _mesg;
+    time_t		*dest = (time_t *) _dest;
+    void        *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_mtime_copy);
+
+    /* check args */
+    assert(mesg);
+    if (!dest && NULL==(dest = H5FL_MALLOC(time_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* copy */
+    *dest = *mesg;
+
+    /* Set return value */
+    ret_value=dest;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_mtime_new_size
+ *
+ * Purpose:	Returns the size of the raw message in bytes not
+ *		counting the message type or size fields, but only the data
+ *		fields.	 This function doesn't take into account
+ *		alignment.
+ *
+ * Return:	Success:	Message data size in bytes w/o alignment.
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Jan  3 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5O_mtime_new_size(const H5F_t UNUSED * f, const void UNUSED * mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_mtime_new_size);
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+
+    FUNC_LEAVE_NOAPI(8);
+} /* end H5O_mtime_new_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_mtime_size
+ *
+ * Purpose:	Returns the size of the raw message in bytes not
+ *		counting the message type or size fields, but only the data
+ *		fields.	 This function doesn't take into account
+ *		alignment.
+ *
+ * Return:	Success:	Message data size in bytes w/o alignment.
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 14 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5O_mtime_size(const H5F_t UNUSED * f, const void UNUSED * mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_mtime_size);
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+
+    FUNC_LEAVE_NOAPI(16);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_mtime_reset
+ *
+ * Purpose:	Frees resources within a modification time message, but doesn't free
+ *		the message itself.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Mondey, December 23, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_mtime_reset(void UNUSED *_mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_mtime_reset);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_mtime_free
+ *
+ * Purpose:	Free's the message
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, March 30, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_mtime_free (void *mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_mtime_free);
+
+    assert (mesg);
+
+    H5FL_FREE(time_t,mesg);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_mtime_debug
+ *
+ * Purpose:	Prints debugging info for the message.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jul 24 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_mtime_debug(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *_mesg, FILE *stream,
+		int indent, int fwidth)
+{
+    const time_t	*mesg = (const time_t *)_mesg;
+    struct tm		*tm;
+    char		buf[128];
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_mtime_debug);
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    /* debug */
+    tm = HDlocaltime(mesg);
+
+    HDstrftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", tm);
+    fprintf(stream, "%*s%-*s %s\n", indent, "", fwidth,
+	    "Time:", buf);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Oname.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Oname.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Oname.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,299 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Oname.c
+ *                      Aug 12 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             Object name message.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define H5O_PACKAGE	/*suppress error about including H5Opkg	  */
+
+#include "H5private.h"
+#include "H5Eprivate.h"
+#include "H5MMprivate.h"
+#include "H5Opkg.h"             /* Object header functions                  */
+
+/* PRIVATE PROTOTYPES */
+static void *H5O_name_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
+static herr_t H5O_name_encode(H5F_t *f, uint8_t *p, const void *_mesg);
+static void *H5O_name_copy(const void *_mesg, void *_dest, unsigned update_flags);
+static size_t H5O_name_size(const H5F_t *f, const void *_mesg);
+static herr_t H5O_name_reset(void *_mesg);
+static herr_t H5O_name_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE * stream,
+			     int indent, int fwidth);
+
+/* This message derives from H5O */
+const H5O_class_t H5O_NAME[1] = {{
+    H5O_NAME_ID,            	/*message id number             */
+    "name",                 	/*message name for debugging    */
+    sizeof(H5O_name_t),     	/*native message size           */
+    H5O_name_decode,        	/*decode message                */
+    H5O_name_encode,        	/*encode message                */
+    H5O_name_copy,          	/*copy the native value         */
+    H5O_name_size,          	/*raw message size              */
+    H5O_name_reset,         	/*free internal memory          */
+    NULL,		            /* free method			*/
+    NULL,		        /* file delete method		*/
+    NULL,			/* link method			*/
+    NULL,		    	/*get share method		*/
+    NULL,			/*set share method		*/
+    H5O_name_debug,         	/*debug the message             */
+}};
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_name_decode
+ *
+ * Purpose:     Decode a name message and return a pointer to a new
+ *              native message struct.
+ *
+ * Return:      Success:        Ptr to new message in native struct.
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug 12 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_name_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const uint8_t *p,
+		H5O_shared_t UNUSED *sh)
+{
+    H5O_name_t          *mesg;
+    void                *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_name_decode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert (!sh);
+
+    /* decode */
+    if (NULL==(mesg = H5MM_calloc(sizeof(H5O_name_t))) ||
+            NULL==(mesg->s = H5MM_malloc (HDstrlen((const char*)p)+1)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    HDstrcpy(mesg->s, (const char*)p);
+
+    /* Set return value */
+    ret_value=mesg;
+
+done:
+    if(ret_value==NULL) {
+        if(mesg)
+            H5MM_xfree (mesg);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_name_encode
+ *
+ * Purpose:     Encodes a name message.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug 12 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_name_encode(H5F_t UNUSED *f, uint8_t *p, const void *_mesg)
+{
+    const H5O_name_t       *mesg = (const H5O_name_t *) _mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_name_encode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert(mesg && mesg->s);
+
+    /* encode */
+    HDstrcpy((char*)p, mesg->s);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_name_copy
+ *
+ * Purpose:     Copies a message from _MESG to _DEST, allocating _DEST if
+ *              necessary.
+ *
+ * Return:      Success:        Ptr to _DEST
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug 12 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_name_copy(const void *_mesg, void *_dest, unsigned UNUSED update_flags)
+{
+    const H5O_name_t       *mesg = (const H5O_name_t *) _mesg;
+    H5O_name_t             *dest = (H5O_name_t *) _dest;
+    void                *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_name_copy);
+
+    /* check args */
+    assert(mesg);
+    if (!dest && NULL==(dest = H5MM_calloc(sizeof(H5O_name_t))))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* copy */
+    *dest = *mesg;
+    if((dest->s = H5MM_xstrdup(mesg->s))==NULL)
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* Set return value */
+    ret_value=dest;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_name_size
+ *
+ * Purpose:     Returns the size of the raw message in bytes not
+ *              counting the message typ or size fields, but only the data
+ *              fields.  This function doesn't take into account
+ *              alignment.
+ *
+ * Return:      Success:        Message data size in bytes w/o alignment.
+ *
+ *              Failure:        Negative
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug 12 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5O_name_size(const H5F_t UNUSED *f, const void *_mesg)
+{
+    const H5O_name_t       *mesg = (const H5O_name_t *) _mesg;
+    size_t                  ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_name_size);
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+
+    ret_value = mesg->s ? HDstrlen(mesg->s) + 1 : 0;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_name_reset
+ *
+ * Purpose:     Frees internal pointers and resets the message to an
+ *              initial state.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug 12 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_name_reset(void *_mesg)
+{
+    H5O_name_t             *mesg = (H5O_name_t *) _mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_name_reset);
+
+    /* check args */
+    assert(mesg);
+
+    /* reset */
+    mesg->s = H5MM_xfree(mesg->s);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_name_debug
+ *
+ * Purpose:     Prints debugging info for the message.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug 12 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_name_debug(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *_mesg, FILE *stream,
+	       int indent, int fwidth)
+{
+    const H5O_name_t	*mesg = (const H5O_name_t *)_mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_name_debug);
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    fprintf(stream, "%*s%-*s `%s'\n", indent, "", fwidth,
+            "Name:",
+            mesg->s);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Onull.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Onull.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Onull.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,49 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Onull.c
+ *                      Aug  6 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             The null message.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define H5O_PACKAGE	/*suppress error about including H5Opkg	  */
+
+#include "H5private.h"
+#include "H5Opkg.h"             /* Object header functions                  */
+
+/* This message derives from H5O */
+const H5O_class_t H5O_NULL[1] = {{
+    H5O_NULL_ID,            /*message id number             */
+    "null",                 /*message name for debugging    */
+    0,                      /*native message size           */
+    NULL,                   /*no decode method              */
+    NULL,                   /*no encode method              */
+    NULL,                   /*no copy method                */
+    NULL,                   /*no size method                */
+    NULL,                   /*no reset method               */
+    NULL,                   /*no free method                */
+    NULL,		    /*no file delete method         */
+    NULL,		    /*no link method		    */
+    NULL,		    /*no get share method	    */
+    NULL,	            /*no set share method	    */
+    NULL,                   /*no debug method               */
+}};

Added: packages/hdf5/branches/upstream/current/src/H5Opkg.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Opkg.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Opkg.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,213 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef H5O_PACKAGE
+#error "Do not include this file outside the H5O package!"
+#endif
+
+#ifndef _H5Opkg_H
+#define _H5Opkg_H
+
+/* Include private header file */
+#include "H5Oprivate.h"          /* Object header functions                */
+
+/*
+ * Align messages on 8-byte boundaries because we would like to copy the
+ * object header chunks directly into memory and operate on them there, even
+ * on 64-bit architectures.  This allows us to reduce the number of disk I/O
+ * requests with a minimum amount of mem-to-mem copies.
+ */
+#define H5O_ALIGN(X)		(8*(((X)+8-1)/8))
+
+/* Object header macros */
+#define H5O_NMESGS	32		/*initial number of messages	     */
+#define H5O_NCHUNKS	8		/*initial number of chunks	     */
+
+/* Version of object header structure */
+#define H5O_VERSION		1
+
+/*
+ * Size of object header header.
+ */
+#define H5O_SIZEOF_HDR(F)						      \
+    H5O_ALIGN(1 +		/*version number	*/		      \
+	      1 +		/*alignment		*/		      \
+	      2 +		/*number of messages	*/		      \
+	      4 +		/*reference count	*/		      \
+	      4)		/*header data size	*/
+
+/*
+ * Size of message header
+ */
+#define H5O_SIZEOF_MSGHDR(F)						      \
+     H5O_ALIGN(2 +	/*message type		*/			      \
+	       2 +	/*sizeof message data	*/			      \
+	       4)	/*reserved		*/
+
+typedef struct H5O_class_t {
+    int	id;				 /*message type ID on disk   */
+    const char	*name;				 /*for debugging             */
+    size_t	native_size;			 /*size of native message    */
+    void	*(*decode)(H5F_t*, hid_t, const uint8_t*, struct H5O_shared_t*);
+    herr_t	(*encode)(H5F_t*, uint8_t*, const void*);
+    void	*(*copy)(const void*, void*, unsigned);    /*copy native value         */
+    size_t	(*raw_size)(const H5F_t*, const void*);/*sizeof raw val	     */
+    herr_t	(*reset)(void *);		 /*free nested data structs  */
+    herr_t	(*free)(void *);		 /*free main data struct  */
+    herr_t	(*del)(H5F_t *, hid_t, const void *, hbool_t); /* Delete space in file referenced by this message */
+    herr_t	(*link)(H5F_t *, hid_t, const void *); /* Increment any links in file reference by this message */
+    herr_t	(*get_share)(H5F_t*, const void*, struct H5O_shared_t*);    /* Get shared information */
+    herr_t	(*set_share)(H5F_t*, void*, const struct H5O_shared_t*);    /* Set shared information */
+    herr_t	(*debug)(H5F_t*, hid_t, const void*, FILE*, int, int);
+} H5O_class_t;
+
+typedef struct H5O_mesg_t {
+    const H5O_class_t	*type;		/*type of message		     */
+    hbool_t		dirty;		/*raw out of date wrt native	     */
+    uint8_t		flags;		/*message flags			     */
+    unsigned		chunkno;	/*chunk number for this mesg	     */
+    void		*native;	/*native format message		     */
+    uint8_t		*raw;		/*ptr to raw data		     */
+    size_t		raw_size;	/*size with alignment		     */
+} H5O_mesg_t;
+
+typedef struct H5O_chunk_t {
+    hbool_t	dirty;			/*dirty flag			     */
+    haddr_t	addr;			/*chunk file address		     */
+    size_t	size;			/*chunk size			     */
+    uint8_t	*image;			/*image of file			     */
+} H5O_chunk_t;
+
+typedef struct H5O_t {
+    H5AC_info_t cache_info; /* Information for H5AC cache functions, _must_ be */
+                            /* first field in structure */
+    int		version;		/*version number		     */
+    int		nlink;			/*link count			     */
+    unsigned	nmesgs;			/*number of messages		     */
+    unsigned	alloc_nmesgs;		/*number of message slots	     */
+    H5O_mesg_t	*mesg;			/*array of messages		     */
+    unsigned	nchunks;		/*number of chunks		     */
+    unsigned	alloc_nchunks;		/*chunks allocated		     */
+    H5O_chunk_t *chunk;			/*array of chunks		     */
+} H5O_t;
+
+/*
+ * Null Message. (0x0000)
+ */
+H5_DLLVAR const H5O_class_t H5O_NULL[1];
+
+/*
+ * Simple Dataspace Message. (0x0001)
+ */
+H5_DLLVAR const H5O_class_t H5O_SDSPACE[1];
+
+/*
+ * Datatype Message. (0x0003)
+ */
+H5_DLLVAR const H5O_class_t H5O_DTYPE[1];
+
+/*
+ * Old Fill Value Message. (0x0004)
+ */
+H5_DLLVAR const H5O_class_t H5O_FILL[1];
+
+/*
+ * New Fill Value Message. (0x0005)
+ * 
+ * The new fill value message is fill value plus
+ * space allocation time and fill value writing time and whether fill
+ * value is defined.
+ */
+H5_DLLVAR const H5O_class_t H5O_FILL_NEW[1];
+
+/*
+ * External File List Message. (0x0007)
+ */
+H5_DLLVAR const H5O_class_t H5O_EFL[1];
+
+/*
+ * Data Layout Message. (0x0008)
+ */
+H5_DLLVAR const H5O_class_t H5O_LAYOUT[1];
+
+#ifdef H5O_ENABLE_BOGUS
+/*
+ * "Bogus" Message. (0x0009)
+ */
+H5_DLLVAR const H5O_class_t H5O_BOGUS[1];
+#endif /* H5O_ENABLE_BOGUS */
+
+/*
+ * Filter pipeline message. (0x000b)
+ */
+H5_DLLVAR const H5O_class_t H5O_PLINE[1];
+
+/*
+ * Attribute Message. (0x000c)
+ */
+H5_DLLVAR const H5O_class_t H5O_ATTR[1];
+
+/*
+ * Object name message. (0x000d)
+ */
+H5_DLLVAR const H5O_class_t H5O_NAME[1];
+
+/*
+ * Modification Time Message. (0x000e)
+ *
+ * The message is just a `time_t'.
+ * (See also the "new" modification time message)
+ */
+H5_DLLVAR const H5O_class_t H5O_MTIME[1];
+
+/*
+ * Shared Object Message. (0x000f)
+ * 
+ * This message ID never really appears in an object
+ * header.  Instead, bit 2 of the `Flags' field will be set and the ID field
+ * will be the ID of the pointed-to message.
+ */
+H5_DLLVAR const H5O_class_t H5O_SHARED[1];
+
+/*
+ * Object Header Continuation Message. (0x0010)
+ */
+H5_DLLVAR const H5O_class_t H5O_CONT[1];
+
+/*
+ * Symbol Table Message. (0x0011)
+ */
+H5_DLLVAR const H5O_class_t H5O_STAB[1];
+
+/*
+ * New Modification Time Message. (0x0012)
+ * 
+ * The message is just a `time_t'.
+ */
+H5_DLLVAR const H5O_class_t H5O_MTIME_NEW[1];
+
+/* Package-local function prototypes */
+H5_DLL void * H5O_read_real(const H5G_entry_t *ent, const H5O_class_t *type,
+        int sequence, void *mesg, hid_t dxpl_id);
+H5_DLL void * H5O_free_real(const H5O_class_t *type, void *mesg);
+
+/* Shared object operators */
+H5_DLL void * H5O_shared_read(H5F_t *f, hid_t dxpl_id, H5O_shared_t *shared,
+    const H5O_class_t *type, void *mesg);
+
+/* Symbol table operators */
+H5_DLL void *H5O_stab_fast(const H5G_cache_t *cache, const struct H5O_class_t *type,
+			    void *_mesg);
+
+#endif /* _H5Opkg_H */

Added: packages/hdf5/branches/upstream/current/src/H5Opline.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Opline.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Opline.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,492 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Robb Matzke <matzke at llnl.gov>
+ *		Wednesday, April 15, 1998
+ *
+ * Purpose:	Data filter pipeline message.
+ */
+
+#define H5O_PACKAGE	/*suppress error about including H5Opkg	  */
+
+#include "H5private.h"
+#include "H5Eprivate.h"
+#include "H5FLprivate.h"	/*Free Lists	  */
+#include "H5MMprivate.h"
+#include "H5Opkg.h"             /* Object header functions                  */
+
+
+#define H5O_PLINE_VERSION	1
+
+static herr_t H5O_pline_encode (H5F_t *f, uint8_t *p, const void *mesg);
+static void *H5O_pline_decode (H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
+static void *H5O_pline_copy (const void *_mesg, void *_dest, unsigned update_flags);
+static size_t H5O_pline_size (const H5F_t *f, const void *_mesg);
+static herr_t H5O_pline_reset (void *_mesg);
+static herr_t H5O_pline_free (void *_mesg);
+static herr_t H5O_pline_debug (H5F_t *f, hid_t dxpl_id, const void *_mesg,
+			       FILE * stream, int indent, int fwidth);
+
+/* This message derives from H5O */
+const H5O_class_t H5O_PLINE[1] = {{
+    H5O_PLINE_ID,		/* message id number		*/
+    "filter pipeline",		/* message name for debugging	*/
+    sizeof(H5O_pline_t),	/* native message size		*/
+    H5O_pline_decode,		/* decode message		*/
+    H5O_pline_encode,		/* encode message		*/
+    H5O_pline_copy,		/* copy the native value	*/
+    H5O_pline_size,		/* size of raw message		*/
+    H5O_pline_reset,		/* reset method			*/
+    H5O_pline_free,		/* free method			*/
+    NULL,		        /* file delete method		*/
+    NULL,			/* link method			*/
+    NULL,			/* get share method		*/
+    NULL, 			/* set share method		*/
+    H5O_pline_debug,		/* debug the message		*/
+}};
+
+
+/* Declare a free list to manage the H5O_pline_t struct */
+H5FL_DEFINE(H5O_pline_t);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_pline_decode
+ *
+ * Purpose:	Decodes a filter pipeline message.
+ *
+ * Return:	Success:	Ptr to the native message.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 15, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_pline_decode(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const uint8_t *p,
+		H5O_shared_t UNUSED *sh)
+{
+    H5O_pline_t		*pline = NULL;
+    void		*ret_value;
+    unsigned		version;
+    size_t		i, j, n, name_length;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_pline_decode);
+
+    /* check args */
+    assert(p);
+
+    /* Decode */
+    if (NULL==(pline = H5FL_CALLOC(H5O_pline_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    version = *p++;
+    if (version!=H5O_PLINE_VERSION)
+	HGOTO_ERROR(H5E_PLINE, H5E_CANTLOAD, NULL, "bad version number for filter pipeline message");
+    pline->nused = *p++;
+    if (pline->nused>H5Z_MAX_NFILTERS)
+	HGOTO_ERROR(H5E_PLINE, H5E_CANTLOAD, NULL, "filter pipeline message has too many filters");
+    p += 6;	/*reserved*/
+    pline->nalloc = pline->nused;
+    pline->filter = H5MM_calloc(pline->nalloc*sizeof(pline->filter[0]));
+    if (NULL==pline->filter)
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    for (i=0; i<pline->nused; i++) {
+	UINT16DECODE(p, pline->filter[i].id);
+	UINT16DECODE(p, name_length);
+	if (name_length % 8)
+	    HGOTO_ERROR(H5E_PLINE, H5E_CANTLOAD, NULL, "filter name length is not a multiple of eight");
+	UINT16DECODE(p, pline->filter[i].flags);
+	UINT16DECODE(p, pline->filter[i].cd_nelmts);
+	if (name_length) {
+	    /*
+	     * Get the name, allocating an extra byte for an extra null
+	     * terminator just in case there isn't one in the file (there
+	     * should be, but to be safe...)
+	     */
+	    pline->filter[i].name = H5MM_malloc(name_length+1);
+	    HDmemcpy(pline->filter[i].name, p, name_length);
+	    pline->filter[i].name[name_length] = '\0';
+	    p += name_length;
+	}
+	if ((n=pline->filter[i].cd_nelmts)) {
+	    /*
+	     * Read the client data values and the padding
+	     */
+	    pline->filter[i].cd_values = H5MM_malloc(n*sizeof(unsigned));
+	    if (NULL==pline->filter[i].cd_values)
+		HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for client data");
+	    for (j=0; j<pline->filter[i].cd_nelmts; j++)
+		UINT32DECODE(p, pline->filter[i].cd_values[j]);
+	    if (pline->filter[i].cd_nelmts % 2)
+		p += 4; /*padding*/
+	}
+    }
+
+    /* Set return value */
+    ret_value = pline;
+
+done:
+    if (NULL==ret_value && pline) {
+        if (pline->filter) {
+            for (i=0; i<pline->nused; i++) {
+                H5MM_xfree(pline->filter[i].name);
+                H5MM_xfree(pline->filter[i].cd_values);
+            }
+            H5MM_xfree(pline->filter);
+        }
+        H5FL_FREE(H5O_pline_t,pline);
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_pline_encode
+ *
+ * Purpose:	Encodes message MESG into buffer P.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 15, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_pline_encode (H5F_t UNUSED *f, uint8_t *p/*out*/, const void *mesg)
+{
+    const H5O_pline_t	*pline = (const H5O_pline_t*)mesg;
+    size_t		i, j, name_length;
+    const char		*name=NULL;
+    H5Z_class_t		*cls=NULL;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_pline_encode);
+
+    /* Check args */
+    assert (p);
+    assert (mesg);
+
+    *p++ = H5O_PLINE_VERSION;
+    *p++ = (uint8_t)(pline->nused);
+    *p++ = 0;	/*reserved 1*/
+    *p++ = 0;	/*reserved 2*/
+    *p++ = 0;	/*reserved 3*/
+    *p++ = 0;	/*reserved 4*/
+    *p++ = 0;	/*reserved 5*/
+    *p++ = 0;	/*reserved 6*/
+
+    for (i=0; i<pline->nused; i++) {
+	/*
+	 * Get the filter name.  If the pipeline message has a name in it then
+	 * use that one.  Otherwise try to look up the filter and get the name
+	 * as it was registered.
+	 */
+	if (NULL==(name=pline->filter[i].name) &&
+                (cls=H5Z_find(pline->filter[i].id)))
+	    name = cls->name;
+	name_length = name ? HDstrlen(name)+1 : 0;
+
+	/* Encode the filter */
+	UINT16ENCODE(p, pline->filter[i].id);
+	UINT16ENCODE(p, H5O_ALIGN(name_length));
+	UINT16ENCODE(p, pline->filter[i].flags);
+	UINT16ENCODE(p, pline->filter[i].cd_nelmts);
+	if (name_length>0) {
+	    HDmemcpy(p, name, name_length);
+	    p += name_length;
+	    while (name_length++ % 8)
+                *p++ = 0;
+	}
+	for (j=0; j<pline->filter[i].cd_nelmts; j++)
+	    UINT32ENCODE(p, pline->filter[i].cd_values[j]);
+	if (pline->filter[i].cd_nelmts % 2)
+	    UINT32ENCODE(p, 0);
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_pline_copy
+ *
+ * Purpose:	Copies a filter pipeline message from SRC to DST allocating
+ *		DST if necessary.  If DST is already allocated then we assume
+ *		that it isn't initialized.
+ *
+ * Return:	Success:	Ptr to DST or allocated result.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 15, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_pline_copy (const void *_src, void *_dst/*out*/, unsigned UNUSED update_flags)
+{
+    const H5O_pline_t	*src = (const H5O_pline_t *)_src;
+    H5O_pline_t		*dst = (H5O_pline_t *)_dst;
+    size_t		i;
+    H5O_pline_t		*ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_pline_copy);
+
+    if (!dst && NULL==(dst = H5FL_MALLOC (H5O_pline_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    *dst = *src;
+    dst->nalloc = dst->nused;
+    if (dst->nalloc>0) {
+	dst->filter = H5MM_calloc(dst->nalloc * sizeof(dst->filter[0]));
+	if (NULL==dst->filter)
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    } else {
+	dst->filter = NULL;
+    }
+
+    for (i=0; i<src->nused; i++) {
+	dst->filter[i] = src->filter[i];
+	if (src->filter[i].name) {
+	    dst->filter[i].name = H5MM_xstrdup(src->filter[i].name);
+	}
+	if (src->filter[i].cd_nelmts>0) {
+	    dst->filter[i].cd_values = H5MM_malloc(src->filter[i].cd_nelmts*
+						   sizeof(unsigned));
+	    if (NULL==dst->filter[i].cd_values)
+		HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+	    HDmemcpy (dst->filter[i].cd_values, src->filter[i].cd_values,
+		      src->filter[i].cd_nelmts * sizeof(unsigned));
+	}
+    }
+
+    /* Set return value */
+    ret_value = dst;
+
+done:
+    if (!ret_value && dst) {
+	if (dst->filter) {
+	    for (i=0; i<dst->nused; i++) {
+		H5MM_xfree(dst->filter[i].name);
+		H5MM_xfree(dst->filter[i].cd_values);
+	    }
+	    H5MM_xfree(dst->filter);
+	}
+	if (!_dst)
+            H5FL_FREE(H5O_pline_t,dst);
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_pline_size
+ *
+ * Purpose:	Determines the size of a raw filter pipeline message.
+ *
+ * Return:	Success:	Size of message.
+ *
+ *		Failure:	zero
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 15, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5O_pline_size (const H5F_t UNUSED *f, const void *mesg)
+{
+    const H5O_pline_t	*pline = (const H5O_pline_t*)mesg;
+    size_t		i, name_len;
+    const char		*name = NULL;
+    H5Z_class_t		*cls = NULL;
+    size_t ret_value;           /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_pline_size);
+
+    /* Message header */
+    ret_value = 1 +			/*version			*/
+	   1 +				/*number of filters		*/
+	   6;				/*reserved			*/
+
+    for (i=0; i<pline->nused; i++) {
+	/* Get the name of the filter, same as done with H5O_pline_encode() */
+	if (NULL==(name=pline->filter[i].name) &&
+                (cls=H5Z_find(pline->filter[i].id)))
+	    name = cls->name;
+	name_len = name ? HDstrlen(name)+1 : 0;
+
+
+	ret_value += 2 +		/*filter identification number	*/
+		2 +			/*name length			*/
+		2 +			/*flags				*/
+		2 +			/*number of client data values	*/
+		H5O_ALIGN(name_len);	/*length of the filter name	*/
+
+	ret_value += pline->filter[i].cd_nelmts * 4;
+	if (pline->filter[i].cd_nelmts % 2)
+            ret_value += 4;
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_pline_reset
+ *
+ * Purpose:	Resets a filter pipeline message by clearing all filters.
+ *		The MESG buffer is not freed.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 15, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_pline_reset (void *mesg)
+{
+    H5O_pline_t	*pline = (H5O_pline_t*)mesg;
+    size_t	i;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_pline_reset);
+
+    assert (pline);
+
+    for (i=0; i<pline->nused; i++) {
+        H5MM_xfree(pline->filter[i].name);
+        H5MM_xfree(pline->filter[i].cd_values);
+    }
+    if(pline->filter)
+        H5MM_xfree(pline->filter);
+    HDmemset(pline, 0, sizeof *pline);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_pline_free
+ *
+ * Purpose:	Free's the message
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, March 11, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_pline_free (void *mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_pline_free);
+
+    assert (mesg);
+
+    H5FL_FREE(H5O_pline_t,mesg);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_pline_debug
+ *
+ * Purpose:	Prints debugging information for filter pipeline message MESG
+ *		on output stream STREAM.  Each line is indented INDENT
+ *		characters and the field name takes up FWIDTH characters.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 15, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_pline_debug (H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *mesg, FILE *stream,
+		int indent, int fwidth)
+{
+    const H5O_pline_t	*pline = (const H5O_pline_t *)mesg;
+    size_t		i, j;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_pline_debug);
+
+    /* check args */
+    assert(f);
+    assert(pline);
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    fprintf(stream, "%*s%-*s %lu/%lu\n", indent, "", fwidth,
+	    "Number of filters:",
+	    (unsigned long)(pline->nused),
+	    (unsigned long)(pline->nalloc));
+
+    for (i=0; i<pline->nused; i++) {
+	char		name[32];
+	sprintf(name, "Filter at position %lu", (unsigned long)i);
+	fprintf(stream, "%*s%-*s\n", indent, "", fwidth, name);
+	fprintf(stream, "%*s%-*s 0x%04x\n", indent+3, "", MAX(0, fwidth-3),
+		"Filter identification:",
+		(unsigned)(pline->filter[i].id));
+	if (pline->filter[i].name) {
+	    fprintf(stream, "%*s%-*s \"%s\"\n", indent+3, "", MAX(0, fwidth-3),
+		    "Filter name:",
+		    pline->filter[i].name);
+	} else {
+	    fprintf(stream, "%*s%-*s NONE\n", indent+3, "", MAX(0, fwidth-3),
+		    "Filter name:");
+	}
+	fprintf(stream, "%*s%-*s 0x%04x\n", indent+3, "", MAX(0, fwidth-3),
+		"Flags:",
+		(unsigned)(pline->filter[i].flags));
+	fprintf(stream, "%*s%-*s %lu\n", indent+3, "", MAX(0, fwidth-3),
+		"Num CD values:",
+		(unsigned long)(pline->filter[i].cd_nelmts));
+	for (j=0; j<pline->filter[i].cd_nelmts; j++) {
+	    char	field_name[32];
+	    sprintf(field_name, "CD value %lu", (unsigned long)j);
+	    fprintf(stream, "%*s%-*s %lu\n", indent+6, "", MAX(0, fwidth-6),
+		    field_name,
+		    (unsigned long)(pline->filter[i].cd_values[j]));
+	}
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Oprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Oprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Oprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,295 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:		H5Oprivate.h
+ *			Aug  5 1997
+ *			Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:		Object header private include file.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5Oprivate_H
+#define _H5Oprivate_H
+
+/* Include the public header file for this API */
+#include "H5Opublic.h"          /* Object header functions                */
+
+/* Public headers needed by this file */
+#include "H5Dpublic.h"          /* Dataset functions                      */
+#include "H5Spublic.h"		/* Dataspace functions			  */
+
+/* Private headers needed by this file */
+#include "H5HGprivate.h"        /* Global heap functions                  */
+#include "H5Tprivate.h"		/* Datatype functions			  */
+#include "H5Zprivate.h"         /* I/O pipeline filters			  */
+
+/* Object header macros */
+#define H5O_MIN_SIZE	H5O_ALIGN(32)	/*min obj header data size	     */
+#define H5O_MAX_SIZE	65536	        /*max obj header data size	     */
+#define H5O_NEW_MESG	(-1)		/*new message			     */
+#define H5O_ALL		(-1)		/* Operate on all messages of type   */
+
+/* Flags which are part of a message */
+#define H5O_FLAG_CONSTANT	0x01u
+#define H5O_FLAG_SHARED		0x02u
+#define H5O_FLAG_BITS		(H5O_FLAG_CONSTANT|H5O_FLAG_SHARED)
+
+/* Flags for updating messages */
+#define H5O_UPDATE_TIME         0x01u
+#define H5O_UPDATE_DATA_ONLY    0x02u
+
+/* Header message IDs */
+#define H5O_NULL_ID	0x0000          /* Null Message.  */
+#define H5O_SDSPACE_ID	0x0001          /* Simple Dataspace Message.  */
+/* Complex dataspace is/was planned for message 0x0002 */
+#define H5O_DTYPE_ID	0x0003          /* Datatype Message.  */
+#define H5O_FILL_ID     0x0004          /* Fill Value Message. (Old)  */
+#define H5O_FILL_NEW_ID 0x0005          /* Fill Value Message. (New)  */
+/* Compact data storage is/was planned for message 0x0006 */
+#define H5O_EFL_ID	0x0007          /* External File List Message  */
+#define H5O_LAYOUT_ID	0x0008          /* Data Storage Layout Message.  */
+#define H5O_BOGUS_ID	0x0009          /* "Bogus" Message.  */
+/* message 0x000a appears unused... */
+#define H5O_PLINE_ID	0x000b          /* Filter pipeline message.  */
+#define H5O_ATTR_ID	0x000c          /* Attribute Message.  */
+#define H5O_NAME_ID	0x000d          /* Object name message.  */
+#define H5O_MTIME_ID	0x000e          /* Modification time message. (Old)  */
+#define H5O_SHARED_ID	0x000f          /* Shared object message.  */
+#define H5O_CONT_ID	0x0010          /* Object header continuation message.  */
+#define H5O_STAB_ID	0x0011          /* Symbol table message.  */
+#define H5O_MTIME_NEW_ID 0x0012         /* Modification time message. (New)  */
+
+/*
+ * Fill Value Message. (Old)
+ * (Data structure in memory)
+ */
+typedef struct H5O_fill_t {
+    H5T_t               *type;          /*type. Null implies same as dataset */
+    size_t              size;           /*number of bytes in the fill value  */
+    void                *buf;           /*the fill value                     */
+} H5O_fill_t;
+
+/*
+ * New Fill Value Message.  The new fill value message is fill value plus
+ * space allocation time and fill value writing time and whether fill
+ * value is defined.
+ */
+
+typedef struct H5O_fill_new_t {
+    H5T_t		*type;		/*type. Null implies same as dataset */
+    ssize_t		size;		/*number of bytes in the fill value  */
+    void		*buf;		/*the fill value		     */
+    H5D_alloc_time_t	alloc_time;	/* time to allocate space	     */
+    H5D_fill_time_t	fill_time;	/* time to write fill value	     */
+    hbool_t		fill_defined;   /* whether fill value is defined     */
+} H5O_fill_new_t;
+
+/*
+ * External File List Message
+ * (Data structure in memory)
+ */
+#define H5O_EFL_ALLOC		16	/*number of slots to alloc at once   */
+#define H5O_EFL_UNLIMITED	H5F_UNLIMITED /*max possible file size	     */
+
+typedef struct H5O_efl_entry_t {
+    size_t	name_offset;		/*offset of name within heap	     */
+    char	*name;			/*malloc'd name			     */
+    off_t	offset;			/*offset of data within file	     */
+    hsize_t	size;			/*size allocated within file	     */
+} H5O_efl_entry_t;
+
+typedef struct H5O_efl_t {
+    haddr_t	heap_addr;		/*address of name heap		     */
+    size_t	nalloc;			/*number of slots allocated	     */
+    size_t	nused;			/*number of slots used		     */
+    H5O_efl_entry_t *slot;		/*array of external file entries     */
+} H5O_efl_t;
+
+/*
+ * Data Layout Message.
+ * (Data structure in memory)
+ */
+#define H5O_LAYOUT_NDIMS	(H5S_MAX_RANK+1)
+
+typedef struct H5O_layout_contig_t {
+    haddr_t	addr;			/* File address of data              */
+    hsize_t     size;                   /* Size of data in bytes             */
+} H5O_layout_contig_t;
+
+typedef struct H5O_layout_chunk_t {
+    haddr_t	addr;			/* File address of B-tree            */
+    unsigned	ndims;			/* Num dimensions in chunk           */
+    size_t	dim[H5O_LAYOUT_NDIMS];	/* Size of chunk in elements         */
+    size_t      size;                   /* Size of chunk in bytes            */
+    H5RC_t     *btree_shared;           /* Ref-counted info for B-tree nodes */
+} H5O_layout_chunk_t;
+
+typedef struct H5O_layout_compact_t {
+    hbool_t     dirty;                  /* Dirty flag for compact dataset    */
+    size_t      size;                   /* Size of buffer in bytes           */
+    void        *buf;                   /* Buffer for compact dataset        */
+} H5O_layout_compact_t;
+
+typedef struct H5O_layout_t {
+    H5D_layout_t type;			/* Type of layout                    */
+    unsigned version;                   /* Version of message                */
+    /* Structure for "unused" dimension information */
+    struct {
+        unsigned ndims;			/*num dimensions in stored data	     */
+        hsize_t	dim[H5O_LAYOUT_NDIMS];	/*size of data or chunk in bytes     */
+    } unused;
+    union {
+        H5O_layout_contig_t contig;     /* Information for contiguous layout */
+        H5O_layout_chunk_t chunk;       /* Information for chunked layout    */
+        H5O_layout_compact_t compact;   /* Information for compact layout    */
+    } u;
+} H5O_layout_t;
+
+/* Enable reading/writing "bogus" messages */
+/* #define H5O_ENABLE_BOGUS */
+
+#ifdef H5O_ENABLE_BOGUS
+/*
+ * "Bogus" Message.
+ * (Data structure in memory)
+ */
+#define H5O_BOGUS_VALUE         0xdeadbeef
+typedef struct H5O_bogus_t {
+    unsigned u;                         /* Hold the bogus info */
+} H5O_bogus_t;
+#endif /* H5O_ENABLE_BOGUS */
+
+/*
+ * Filter pipeline message.
+ * (Data structure in memory)
+ */
+typedef struct H5O_pline_t {
+    size_t	nalloc;			/*num elements in `filter' array     */
+    size_t	nused;			/*num filters defined		     */
+    H5Z_filter_info_t *filter;		/*array of filters		     */
+} H5O_pline_t;
+
+/*
+ * Object name message.
+ * (Data structure in memory)
+ */
+
+typedef struct H5O_name_t {
+    char	*s;			/*ptr to malloc'd memory	     */
+} H5O_name_t;
+
+/*
+ * Shared object message.  This message ID never really appears in an object
+ * header.  Instead, bit 2 of the `Flags' field will be set and the ID field
+ * will be the ID of the pointed-to message.
+ */
+
+typedef struct H5O_shared_t {
+    hbool_t		in_gh;		/*shared by global heap?	     */
+    union {
+	H5HG_t		gh;		/*global heap info		     */
+	H5G_entry_t	ent;		/*symbol table entry info	     */
+    } u;
+} H5O_shared_t;
+
+/*
+ * Object header continuation message.
+ * (Data structure in memory)
+ */
+
+typedef struct H5O_cont_t {
+    haddr_t	addr;			/*address of continuation block	     */
+    size_t	size;			/*size of continuation block	     */
+
+    /* the following field(s) do not appear on disk */
+    unsigned	chunkno;		/*chunk this mesg refers to	     */
+} H5O_cont_t;
+
+/*
+ * Symbol table message.
+ * (Data structure in memory)
+ */
+typedef struct H5O_stab_t {
+    haddr_t	btree_addr;		/*address of B-tree		     */
+    haddr_t	heap_addr;		/*address of name heap		     */
+} H5O_stab_t;
+
+/* Define return values from operator callback function for H5O_iterate */
+/* (Actually, any postive value will cause the iterator to stop and pass back
+ *      that positive value to the function that called the iterator)
+ */
+#define H5O_ITER_ERROR  (-1)
+#define H5O_ITER_CONT   (0)
+#define H5O_ITER_STOP   (1)
+
+/* Typedef for iteration operations */
+typedef herr_t (*H5O_operator_t)(const void *mesg/*in*/, unsigned idx,
+    void *operator_data/*in,out*/);
+
+/* General message operators */
+H5_DLL herr_t H5O_create(H5F_t *f, hid_t dxpl_id, size_t size_hint,
+			  H5G_entry_t *ent/*out*/);
+H5_DLL herr_t H5O_open(const H5G_entry_t *ent);
+H5_DLL herr_t H5O_close(H5G_entry_t *ent);
+H5_DLL int H5O_link(const H5G_entry_t *ent, int adjust, hid_t dxpl_id);
+H5_DLL int H5O_count(H5G_entry_t *ent, unsigned type_id, hid_t dxpl_id);
+H5_DLL htri_t H5O_exists(H5G_entry_t *ent, unsigned type_id, int sequence,
+    hid_t dxpl_id);
+H5_DLL void *H5O_read(const H5G_entry_t *ent, unsigned type_id, int sequence,
+    void *mesg, hid_t dxpl_id);
+H5_DLL int H5O_modify(H5G_entry_t *ent, unsigned type_id,
+    int overwrite, unsigned flags, unsigned update_flags, const void *mesg, hid_t dxpl_id);
+H5_DLL struct H5O_t * H5O_protect(H5G_entry_t *ent, hid_t dxpl_id);
+H5_DLL herr_t H5O_unprotect(H5G_entry_t *ent, struct H5O_t *oh, hid_t dxpl_id);
+H5_DLL int H5O_append(H5F_t *f, hid_t dxpl_id, struct H5O_t *oh, unsigned type_id,
+    unsigned flags, const void *mesg);
+H5_DLL herr_t H5O_touch(H5G_entry_t *ent, hbool_t force, hid_t dxpl_id);
+H5_DLL herr_t H5O_touch_oh(H5F_t *f, struct H5O_t *oh, hbool_t force);
+#ifdef H5O_ENABLE_BOGUS
+H5_DLL herr_t H5O_bogus(H5G_entry_t *ent, hid_t dxpl_id);
+H5_DLL herr_t H5O_bogus_oh(H5F_t *f, struct H5O_t *oh);
+#endif /* H5O_ENABLE_BOGUS */
+H5_DLL herr_t H5O_remove(H5G_entry_t *ent, unsigned type_id, int sequence,
+    hbool_t adj_link, hid_t dxpl_id);
+H5_DLL herr_t H5O_remove_op(H5G_entry_t *ent, unsigned type_id,
+    H5O_operator_t op, void *op_data, hbool_t adj_link, hid_t dxpl_id);
+H5_DLL herr_t H5O_reset(unsigned type_id, void *native);
+H5_DLL void *H5O_free(unsigned type_id, void *mesg);
+H5_DLL void *H5O_copy(unsigned type_id, const void *mesg, void *dst);
+H5_DLL size_t H5O_raw_size(unsigned type_id, const H5F_t *f, const void *mesg);
+H5_DLL size_t H5O_mesg_size(unsigned type_id, const H5F_t *f, const void *mesg);
+H5_DLL herr_t H5O_get_share(unsigned type_id, H5F_t *f, const void *mesg, H5O_shared_t *share);
+H5_DLL herr_t H5O_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr);
+H5_DLL herr_t H5O_get_info(H5G_entry_t *ent, H5O_stat_t *ostat, hid_t dxpl_id);
+H5_DLL herr_t H5O_iterate(const H5G_entry_t *ent, unsigned type_id, H5O_operator_t op,
+    void *op_data, hid_t dxpl_id);
+H5_DLL herr_t H5O_debug_id(hid_t type_id, H5F_t *f, hid_t dxpl_id, const void *mesg, FILE *stream, int indent, int fwidth);
+H5_DLL herr_t H5O_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE * stream, int indent,
+			 int fwidth);
+
+/* Layout operators */
+H5_DLL size_t H5O_layout_meta_size(const H5F_t *f, const void *_mesg);
+
+/* EFL operators */
+H5_DLL hsize_t H5O_efl_total_size(H5O_efl_t *efl);
+
+/* Fill value operators */
+H5_DLL herr_t H5O_fill_convert(void *_fill, H5T_t *type, hid_t dxpl_id);
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Opublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Opublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Opublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,48 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Opublic.h
+ *                      Aug  5 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             Public declarations for the H5O (object header)
+ *                      package.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef _H5Opublic_H
+#define _H5Opublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+
+typedef struct H5O_stat_t {
+    hsize_t size;               /* Total size of object header in file */
+    hsize_t free;               /* Free space within object header */
+    unsigned nmesgs;            /* Number of object header messages */
+    unsigned nchunks;           /* Number of object header chunks */
+} H5O_stat_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Osdspace.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Osdspace.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Osdspace.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,430 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5O_PACKAGE	/*suppress error about including H5Opkg	  */
+#define H5S_PACKAGE		/*prevent warning from including H5Spkg.h */
+
+#include "H5private.h"
+#include "H5Eprivate.h"
+#include "H5FLprivate.h"	/*Free Lists	  */
+#include "H5Gprivate.h"
+#include "H5MMprivate.h"
+#include "H5Opkg.h"             /* Object header functions                  */
+#include "H5Spkg.h"
+
+
+/* PRIVATE PROTOTYPES */
+static void *H5O_sdspace_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
+static herr_t H5O_sdspace_encode(H5F_t *f, uint8_t *p, const void *_mesg);
+static void *H5O_sdspace_copy(const void *_mesg, void *_dest, unsigned update_flags);
+static size_t H5O_sdspace_size(const H5F_t *f, const void *_mesg);
+static herr_t H5O_sdspace_reset(void *_mesg);
+static herr_t H5O_sdspace_free (void *_mesg);
+static herr_t H5O_sdspace_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg,
+				FILE * stream, int indent, int fwidth);
+
+/* This message derives from H5O */
+const H5O_class_t H5O_SDSPACE[1] = {{
+    H5O_SDSPACE_ID,	    	/* message id number		    	*/
+    "simple_dspace",	    	/* message name for debugging	   	*/
+    sizeof(H5S_extent_t),   	/* native message size		    	*/
+    H5O_sdspace_decode,	    	/* decode message			*/
+    H5O_sdspace_encode,	    	/* encode message			*/
+    H5O_sdspace_copy,	    	/* copy the native value		*/
+    H5O_sdspace_size,	    	/* size of symbol table entry	    	*/
+    H5O_sdspace_reset,	    	/* default reset method		    	*/
+    H5O_sdspace_free,		/* free method				*/
+    NULL,		        /* file delete method		*/
+    NULL,			/* link method			*/
+    NULL,		    	/* get share method			*/
+    NULL, 			/* set share method			*/
+    H5O_sdspace_debug,	        /* debug the message		    	*/
+}};
+
+#define H5O_SDSPACE_VERSION	1
+
+/* Declare external the free list for H5S_extent_t's */
+H5FL_EXTERN(H5S_extent_t);
+
+/* Declare external the free list for hsize_t arrays */
+H5FL_ARR_EXTERN(hsize_t);
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_sdspace_decode
+ PURPOSE
+    Decode a simple dimensionality message and return a pointer to a memory
+	struct with the decoded information
+ USAGE
+    void *H5O_sdspace_decode(f, raw_size, p)
+	H5F_t *f;	  IN: pointer to the HDF5 file struct
+	size_t raw_size;	IN: size of the raw information buffer
+	const uint8 *p;		IN: the raw information buffer
+ RETURNS
+    Pointer to the new message in native order on success, NULL on failure
+ DESCRIPTION
+	This function decodes the "raw" disk form of a simple dimensionality
+    message into a struct in memory native format.  The struct is allocated
+    within this function using malloc() and is returned to the caller.
+
+ MODIFICATIONS
+	Robb Matzke, 1998-04-09
+	The current and maximum dimensions are now H5F_SIZEOF_SIZET bytes
+	instead of just four bytes.
+
+  	Robb Matzke, 1998-07-20
+        Added a version number and reformatted the message for aligment.
+--------------------------------------------------------------------------*/
+static void *
+H5O_sdspace_decode(H5F_t *f, hid_t UNUSED dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
+{
+    H5S_extent_t	*sdim = NULL;/* New extent dimensionality structure */
+    void		*ret_value;
+    unsigned		i;		/* local counting variable */
+    unsigned		flags, version;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_sdspace_decode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert (!sh);
+
+    /* decode */
+    if ((sdim = H5FL_CALLOC(H5S_extent_t)) != NULL) {
+        /* Check version */
+        version = *p++;
+        if (version!=H5O_SDSPACE_VERSION)
+            HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "wrong version number in data space message");
+
+        /* Get rank */
+        sdim->rank = *p++;
+        if (sdim->rank>H5S_MAX_RANK)
+            HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "simple data space dimensionality is too large");
+
+        /* Get dataspace flags for later */
+        flags = *p++;
+
+        /* Set the dataspace type to be simple or scalar as appropriate */
+        if(sdim->rank>0)
+            sdim->type = H5S_SIMPLE;
+        else
+            sdim->type = H5S_SCALAR;
+
+        p += 5; /*reserved*/
+
+        if (sdim->rank > 0) {
+            if (NULL==(sdim->size=H5FL_ARR_MALLOC(hsize_t,sdim->rank)))
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+            for (i = 0; i < sdim->rank; i++)
+                H5F_DECODE_LENGTH (f, p, sdim->size[i]);
+            if (flags & H5S_VALID_MAX) {
+                if (NULL==(sdim->max=H5FL_ARR_MALLOC(hsize_t,sdim->rank)))
+                    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+                for (i = 0; i < sdim->rank; i++)
+                    H5F_DECODE_LENGTH (f, p, sdim->max[i]);
+            }
+        }
+
+        /* Compute the number of elements in the extent */
+        for(i=0, sdim->nelem=1; i<sdim->rank; i++)
+            sdim->nelem*=sdim->size[i];
+    }
+
+    /* Set return value */
+    ret_value = (void*)sdim;	/*success*/
+
+done:
+    if (!ret_value && sdim) {
+        H5S_extent_release(sdim);
+        H5FL_FREE(H5S_extent_t,sdim);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_sdspace_encode
+ PURPOSE
+    Encode a simple dimensionality message
+ USAGE
+    herr_t H5O_sdspace_encode(f, raw_size, p, mesg)
+	H5F_t *f;	        IN: pointer to the HDF5 file struct
+	size_t raw_size;	IN: size of the raw information buffer
+	const uint8 *p;		IN: the raw information buffer
+	const void *mesg;	IN: Pointer to the extent dimensionality struct
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+	This function encodes the native memory form of the simple
+    dimensionality message in the "raw" disk form.
+
+ MODIFICATIONS
+	Robb Matzke, 1998-04-09
+	The current and maximum dimensions are now H5F_SIZEOF_SIZET bytes
+	instead of just four bytes.
+
+  	Robb Matzke, 1998-07-20
+        Added a version number and reformatted the message for aligment.
+--------------------------------------------------------------------------*/
+static herr_t
+H5O_sdspace_encode(H5F_t *f, uint8_t *p, const void *mesg)
+{
+    const H5S_extent_t	*sdim = (const H5S_extent_t *) mesg;
+    unsigned		u;  /* Local counting variable */
+    unsigned		flags = 0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_sdspace_encode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert(sdim);
+
+    /* set flags */
+    if (sdim->max)
+        flags |= H5S_VALID_MAX;
+
+    /* encode */
+    *p++ = H5O_SDSPACE_VERSION;
+    *p++ = sdim->rank;
+    *p++ = flags;
+    *p++ = 0; /*reserved*/
+    *p++ = 0; /*reserved*/
+    *p++ = 0; /*reserved*/
+    *p++ = 0; /*reserved*/
+    *p++ = 0; /*reserved*/
+
+    if (sdim->rank > 0) {
+        for (u = 0; u < sdim->rank; u++)
+            H5F_ENCODE_LENGTH (f, p, sdim->size[u]);
+        if (flags & H5S_VALID_MAX) {
+            for (u = 0; u < sdim->rank; u++)
+                H5F_ENCODE_LENGTH (f, p, sdim->max[u]);
+        }
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_sdspace_copy
+ PURPOSE
+    Copies a message from MESG to DEST, allocating DEST if necessary.
+ USAGE
+    void *H5O_sdspace_copy(mesg, dest)
+	const void *mesg;	IN: Pointer to the source extent dimensionality struct
+	const void *dest;	IN: Pointer to the destination extent dimensionality struct
+ RETURNS
+    Pointer to DEST on success, NULL on failure
+ DESCRIPTION
+	This function copies a native (memory) simple dimensionality message,
+    allocating the destination structure if necessary.
+ MODIFICATIONS
+    Raymond Lu
+    April 8, 2004
+    Changed operation on H5S_simple_t to H5S_extent_t.
+
+--------------------------------------------------------------------------*/
+static void *
+H5O_sdspace_copy(const void *mesg, void *dest, unsigned UNUSED update_flags)
+{
+    const H5S_extent_t	   *src = (const H5S_extent_t *) mesg;
+    H5S_extent_t	   *dst = (H5S_extent_t *) dest;
+    void                   *ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_sdspace_copy);
+
+    /* check args */
+    assert(src);
+    if (!dst && NULL==(dst = H5FL_MALLOC(H5S_extent_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* Copy extent information */
+    if(H5S_extent_copy(dst,src)<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOPY, NULL, "can't copy extent");
+
+    /* Set return value */
+    ret_value=dst;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_sdspace_size
+ PURPOSE
+    Return the raw message size in bytes
+ USAGE
+    void *H5O_sdspace_size(f, mesg)
+	H5F_t *f;	  IN: pointer to the HDF5 file struct
+	const void *mesg;	IN: Pointer to the source extent dimensionality struct
+ RETURNS
+    Size of message on success, zero on failure
+ DESCRIPTION
+	This function returns the size of the raw simple dimensionality message on
+    success.  (Not counting the message type or size fields, only the data
+    portion of the message).  It doesn't take into account alignment.
+
+ MODIFICATIONS
+	Robb Matzke, 1998-04-09
+	The current and maximum dimensions are now H5F_SIZEOF_SIZET bytes
+	instead of just four bytes.
+--------------------------------------------------------------------------*/
+static size_t
+H5O_sdspace_size(const H5F_t *f, const void *mesg)
+{
+    const H5S_extent_t	   *space = (const H5S_extent_t *) mesg;
+
+    /*
+     * All dimensionality messages are at least 8 bytes long.
+     */
+    size_t		    ret_value = 8;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_sdspace_size);
+
+    /* add in the dimension sizes */
+    ret_value += space->rank * H5F_SIZEOF_SIZE (f);
+
+    /* add in the space for the maximum dimensions, if they are present */
+    ret_value += space->max ? space->rank * H5F_SIZEOF_SIZE (f) : 0;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_sdspace_reset
+ *
+ * Purpose:	Frees the inside of a dataspace message and resets it to some
+ *		initial value.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April 30, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_sdspace_reset(void *_mesg)
+{
+    H5S_extent_t	*mesg = (H5S_extent_t*)_mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_sdspace_reset);
+
+    H5S_extent_release(mesg);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_sdsdpace_free
+ *
+ * Purpose:	Free's the message
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, March 30, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_sdspace_free (void *mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_sdspace_free);
+
+    assert (mesg);
+
+    H5FL_FREE(H5S_extent_t,mesg);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5O_sdspace_debug
+ PURPOSE
+    Prints debugging information for a simple dimensionality message
+ USAGE
+    void *H5O_sdspace_debug(f, mesg, stream, indent, fwidth)
+	H5F_t *f;	        IN: pointer to the HDF5 file struct
+	const void *mesg;	IN: Pointer to the source extent dimensionality struct
+	FILE *stream;		IN: Pointer to the stream for output data
+	int indent;		IN: Amount to indent information by
+	int fwidth;		IN: Field width (?)
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+	This function prints debugging output to the stream passed as a
+    parameter.
+--------------------------------------------------------------------------*/
+static herr_t
+H5O_sdspace_debug(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *mesg,
+		  FILE * stream, int indent, int fwidth)
+{
+    const H5S_extent_t	   *sdim = (const H5S_extent_t *) mesg;
+    unsigned		    u;	/* local counting variable */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_sdspace_debug);
+
+    /* check args */
+    assert(f);
+    assert(sdim);
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    HDfprintf(stream, "%*s%-*s %lu\n", indent, "", fwidth,
+	    "Rank:",
+	    (unsigned long) (sdim->rank));
+
+    if(sdim->rank>0) {
+        HDfprintf(stream, "%*s%-*s {", indent, "", fwidth, "Dim Size:");
+        for (u = 0; u < sdim->rank; u++)
+            HDfprintf (stream, "%s%Hu", u?", ":"", sdim->size[u]);
+        HDfprintf (stream, "}\n");
+
+        HDfprintf(stream, "%*s%-*s ", indent, "", fwidth, "Dim Max:");
+        if (sdim->max) {
+            HDfprintf (stream, "{");
+            for (u = 0; u < sdim->rank; u++) {
+                if (H5S_UNLIMITED==sdim->max[u]) {
+                    HDfprintf (stream, "%sINF", u?", ":"");
+                } else {
+                    HDfprintf (stream, "%s%Hu", u?", ":"", sdim->max[u]);
+                }
+            }
+            HDfprintf (stream, "}\n");
+        } else {
+            HDfprintf (stream, "CONSTANT\n");
+        }
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Oshared.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Oshared.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Oshared.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,522 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Robb Matzke <matzke at llnl.gov>
+ *		Wednesday, April  1, 1998
+ *
+ * Purpose:	Functions that operate on a shared message.  The shared
+ *		message doesn't ever actually appear in the object header as
+ *		a normal message.  Instead, if a message is shared, the
+ *		H5O_FLAG_SHARED bit is set and the message body is that
+ *		defined here for H5O_SHARED.  The message ID is the ID of the
+ *		pointed-to message and the pointed-to message is stored in
+ *		the global heap.
+ */
+
+#define H5F_PACKAGE	/*suppress error about including H5Fpkg	  */
+#define H5O_PACKAGE	/*suppress error about including H5Opkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"             /* File access				*/
+#include "H5Gprivate.h"		/* Groups				*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Opkg.h"             /* Object headers			*/
+
+static void *H5O_shared_decode (H5F_t*, hid_t dxpl_id, const uint8_t*, H5O_shared_t *sh);
+static herr_t H5O_shared_encode (H5F_t*, uint8_t*, const void*);
+static void *H5O_shared_copy(const void *_mesg, void *_dest, unsigned update_flags);
+static size_t H5O_shared_size (const H5F_t*, const void *_mesg);
+static herr_t H5O_shared_delete(H5F_t *f, hid_t dxpl_id, const void *_mesg, hbool_t adj_link);
+static herr_t H5O_shared_link(H5F_t *f, hid_t dxpl_id, const void *_mesg);
+static herr_t H5O_shared_debug (H5F_t*, hid_t dxpl_id, const void*, FILE*, int, int);
+
+/* This message derives from H5O */
+const H5O_class_t H5O_SHARED[1] = {{
+    H5O_SHARED_ID,	    	/*message id number			*/
+    "shared",		    	/*message name for debugging		*/
+    sizeof(H5O_shared_t), 	/*native message size			*/
+    H5O_shared_decode,	    	/*decode method				*/
+    H5O_shared_encode,	    	/*encode method				*/
+    H5O_shared_copy,		/*copy the native value			*/
+    H5O_shared_size,	    	/*size method				*/
+    NULL,		    	/*no reset method			*/
+    NULL,		        /*no free method			*/
+    H5O_shared_delete,		/*file delete method			*/
+    H5O_shared_link,		/*link method				*/
+    NULL,			/*get share method			*/
+    NULL, 			/*set share method			*/
+    H5O_shared_debug,	    	/*debug method				*/
+}};
+
+/* Old version, with full symbol table entry as link for object header sharing */
+#define H5O_SHARED_VERSION_1	1
+
+/* New version, with just address of object as link for object header sharing */
+#define H5O_SHARED_VERSION	2
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_shared_read
+ *
+ * Purpose:	Reads a message referred to by a shared message.
+ *
+ * Return:	Success:	Ptr to message in native format.  The message
+ *				should be freed by calling H5O_reset().  If
+ *				MESG is a null pointer then the caller should
+ *				also call H5MM_xfree() on the return value
+ *				after calling H5O_reset().
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Sep 24 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5O_shared_read(H5F_t *f, hid_t dxpl_id, H5O_shared_t *shared, const H5O_class_t *type, void *mesg)
+{
+    void *ret_value = NULL;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_shared_read);
+
+    /* check args */
+    assert(f);
+    assert(shared);
+    assert(type);
+
+    /* Get the shared message */
+    if (shared->in_gh) {
+        void *tmp_buf, *tmp_mesg;
+
+        if (NULL==(tmp_buf = H5HG_read (f, dxpl_id, &(shared->u.gh), NULL)))
+            HGOTO_ERROR (H5E_OHDR, H5E_CANTLOAD, NULL, "unable to read shared message from global heap");
+        tmp_mesg = (type->decode)(f, dxpl_id, tmp_buf, shared);
+        tmp_buf = H5MM_xfree (tmp_buf);
+        if (!tmp_mesg)
+            HGOTO_ERROR (H5E_OHDR, H5E_CANTLOAD, NULL, "unable to decode object header shared message");
+        if (mesg) {
+            HDmemcpy (mesg, tmp_mesg, type->native_size);
+            H5MM_xfree (tmp_mesg);
+        } /* end if */
+        else
+            ret_value = tmp_mesg;
+    } /* end if */
+    else {
+        ret_value = H5O_read_real(&(shared->u.ent), type, 0, mesg, dxpl_id);
+        if (type->set_share &&
+                (type->set_share)(f, ret_value, shared)<0)
+            HGOTO_ERROR (H5E_OHDR, H5E_CANTINIT, NULL, "unable to set sharing information");
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_shared_read() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_shared_link_adj
+ *
+ * Purpose:	Changes the link count for the object referenced by a shared
+ *              message.
+ *
+ * Return:	Success:	New link count
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Sep 26 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5O_shared_link_adj(H5F_t *f, hid_t dxpl_id, const H5O_shared_t *shared, int adjust)
+{
+    int ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_shared_link_adj);
+
+    /* check args */
+    assert(f);
+    assert(shared);
+
+    if (shared->in_gh) {
+        /*
+         * The shared message is stored in the global heap.
+         * Adjust the reference count on the global heap message.
+         */
+        if ((ret_value = H5HG_link (f, dxpl_id, &(shared->u.gh), adjust))<0)
+            HGOTO_ERROR (H5E_OHDR, H5E_LINK, FAIL, "unable to adjust shared object link count");
+    } /* end if */
+    else {
+        /*
+         * The shared message is stored in some other object header.
+         * The other object header must be in the same file as the
+         * new object header. Adjust the reference count on that
+         * object header.
+         */
+        if (shared->u.ent.file->shared != f->shared)
+            HGOTO_ERROR(H5E_OHDR, H5E_LINK, FAIL, "interfile hard links are not allowed");
+        if ((ret_value = H5O_link (&(shared->u.ent), adjust, dxpl_id))<0)
+            HGOTO_ERROR (H5E_OHDR, H5E_LINK, FAIL, "unable to adjust shared object link count");
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_shared_link_adj() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_shared_decode
+ *
+ * Purpose:	Decodes a shared object message and returns it.
+ *
+ * Return:	Success:	Ptr to a new shared object message.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April  2, 1998
+ *
+ * Modifications:
+ *	Robb Matzke, 1998-07-20
+ *	Added a version number to the beginning of the message.
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_shared_decode (H5F_t *f, hid_t UNUSED dxpl_id, const uint8_t *buf, H5O_shared_t UNUSED *sh)
+{
+    H5O_shared_t	*mesg=NULL;
+    unsigned		flags, version;
+    void                *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_shared_decode);
+
+    /* Check args */
+    assert (f);
+    assert (buf);
+    assert (!sh);
+
+    /* Decode */
+    if (NULL==(mesg = H5MM_calloc (sizeof(H5O_shared_t))))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* Version */
+    version = *buf++;
+    if (version!=H5O_SHARED_VERSION_1 && version!=H5O_SHARED_VERSION)
+	HGOTO_ERROR(H5E_OHDR, H5E_CANTLOAD, NULL, "bad version number for shared object message");
+
+    /* Get the shared information flags */
+    flags = *buf++;
+    mesg->in_gh = (flags & 0x01);
+
+    /* Skip reserved bytes (for version 1) */
+    if(version==H5O_SHARED_VERSION_1)
+        buf += 6;
+
+    /* Body */
+    if (mesg->in_gh) {
+        H5F_addr_decode (f, &buf, &(mesg->u.gh.addr));
+        INT32DECODE (buf, mesg->u.gh.idx);
+    } /* end if */
+    else {
+        if(version==H5O_SHARED_VERSION_1)
+            H5G_ent_decode (f, &buf, &(mesg->u.ent));
+        else {
+            assert(version==H5O_SHARED_VERSION);
+            H5F_addr_decode (f, &buf, &(mesg->u.ent.header));
+            mesg->u.ent.file=f;
+        } /* end else */
+    } /* end else */
+
+    /* Set return value */
+    ret_value=mesg;
+
+done:
+    if(ret_value==NULL) {
+        if(mesg!=NULL)
+            H5MM_xfree(mesg);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_shared_encode
+ *
+ * Purpose:	Encodes message _MESG into buffer BUF.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April  2, 1998
+ *
+ * Modifications:
+ *	Robb Matzke, 1998-07-20
+ *	Added a version number to the beginning of the message.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_shared_encode (H5F_t *f, uint8_t *buf/*out*/, const void *_mesg)
+{
+    const H5O_shared_t	*mesg = (const H5O_shared_t *)_mesg;
+    unsigned		flags;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_shared_encode);
+
+    /* Check args */
+    assert (f);
+    assert (buf);
+    assert (mesg);
+
+    /* Encode */
+    *buf++ = H5O_SHARED_VERSION;
+    flags = mesg->in_gh ? 0x01 : 0x00;
+    *buf++ = flags;
+#ifdef OLD_WAY
+    *buf++ = 0; /*reserved 1*/
+    *buf++ = 0; /*reserved 2*/
+    *buf++ = 0; /*reserved 3*/
+    *buf++ = 0; /*reserved 4*/
+    *buf++ = 0; /*reserved 5*/
+    *buf++ = 0; /*reserved 6*/
+
+    if (mesg->in_gh) {
+	H5F_addr_encode (f, &buf, mesg->u.gh.addr);
+	INT32ENCODE (buf, mesg->u.gh.idx);
+    } /* end if */
+    else
+	H5G_ent_encode (f, &buf, &(mesg->u.ent));
+#else /* OLD_WAY */
+    if (mesg->in_gh) {
+	H5F_addr_encode (f, &buf, mesg->u.gh.addr);
+	INT32ENCODE (buf, mesg->u.gh.idx);
+    } /* end if */
+    else
+        H5F_addr_encode (f, &buf, mesg->u.ent.header);
+#endif /* OLD_WAY */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_shared_copy
+ *
+ * Purpose:	Copies a message from _MESG to _DEST, allocating _DEST if
+ *		necessary.
+ *
+ * Return:	Success:	Ptr to _DEST
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *		koziol at ncsa.uiuc.edu
+ *		Sep 26 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_shared_copy(const void *_mesg, void *_dest, unsigned UNUSED update_flags)
+{
+    const H5O_shared_t  *mesg = (const H5O_shared_t *) _mesg;
+    H5O_shared_t	*dest = (H5O_shared_t *) _dest;
+    void        *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_shared_copy);
+
+    /* check args */
+    assert(mesg);
+    if (!dest && NULL==(dest = H5MM_malloc (sizeof(H5O_shared_t))))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* copy */
+    *dest = *mesg;
+
+    /* Set return value */
+    ret_value=dest;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_shared_copy() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_shared_size
+ *
+ * Purpose:	Returns the length of a shared object message.
+ *
+ * Return:	Success:	Length
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April  2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5O_shared_size (const H5F_t *f, const void *_mesg)
+{
+    const H5O_shared_t  *shared = (const H5O_shared_t *) _mesg;
+    size_t	ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_shared_size);
+
+    ret_value = 1 +			/*version			*/
+            1 +				/*the flags field		*/
+            (shared->in_gh ?
+               (H5F_SIZEOF_ADDR(f)+4) :	/*sharing via global heap	*/
+		H5F_SIZEOF_ADDR(f));	/*sharing by another obj hdr	*/
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_shared_delete
+ *
+ * Purpose:     Free file space referenced by message
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, September 26, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_shared_delete(H5F_t *f, hid_t dxpl_id, const void *_mesg, hbool_t adj_link)
+{
+    const H5O_shared_t       *shared = (const H5O_shared_t *) _mesg;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_shared_delete);
+
+    /* check args */
+    assert(f);
+    assert(shared);
+
+    /* Decrement the reference count on the shared object, if requested */
+    if(adj_link)
+        if(H5O_shared_link_adj(f, dxpl_id, shared, -1)<0)
+            HGOTO_ERROR (H5E_OHDR, H5E_LINK, FAIL, "unable to adjust shared object link count")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_shared_delete() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_shared_link
+ *
+ * Purpose:     Increment reference count on any objects referenced by
+ *              message
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, September 26, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_shared_link(H5F_t *f, hid_t dxpl_id, const void *_mesg)
+{
+    const H5O_shared_t       *shared = (const H5O_shared_t *) _mesg;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_shared_link);
+
+    /* check args */
+    assert(f);
+    assert(shared);
+
+    /* Decrement the reference count on the shared object */
+    if(H5O_shared_link_adj(f,dxpl_id,shared,1)<0)
+        HGOTO_ERROR (H5E_OHDR, H5E_LINK, FAIL, "unable to adjust shared object link count");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5O_shared_link() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_shared_debug
+ *
+ * Purpose:	Prints debugging info for the message
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April  2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_shared_debug (H5F_t UNUSED *f, hid_t dxpl_id, const void *_mesg,
+		  FILE *stream, int indent, int fwidth)
+{
+    const H5O_shared_t	*mesg = (const H5O_shared_t *)_mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_shared_debug);
+
+    /* Check args */
+    assert (f);
+    assert (mesg);
+    assert (stream);
+    assert (indent>=0);
+    assert (fwidth>=0);
+
+    if (mesg->in_gh) {
+	HDfprintf (stream, "%*s%-*s %s\n", indent, "", fwidth,
+		   "Sharing method",
+		   "Global heap");
+	HDfprintf (stream, "%*s%-*s %a\n", indent, "", fwidth,
+		   "Collection address:",
+		   mesg->u.gh.addr);
+	HDfprintf (stream, "%*s%-*s %d\n", indent, "", fwidth,
+		   "Object ID within collection:",
+		   mesg->u.gh.idx);
+    } else {
+	HDfprintf (stream, "%*s%-*s %s\n", indent, "", fwidth,
+		   "Sharing method",
+		   "Obj Hdr");
+	H5G_ent_debug (f, dxpl_id, &(mesg->u.ent), stream, indent, fwidth,
+		       HADDR_UNDEF);
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Ostab.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Ostab.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Ostab.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,376 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             H5Ostab.c
+ *                      Aug  6 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             Symbol table messages.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define H5O_PACKAGE	/*suppress error about including H5Opkg	  */
+#define H5G_PACKAGE	/*suppress error about including H5Gpkg	  */
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free lists                           */
+#include "H5Gpkg.h"		/* Groups				*/
+#include "H5Opkg.h"             /* Object headers			*/
+
+
+/* PRIVATE PROTOTYPES */
+static void *H5O_stab_decode(H5F_t *f, hid_t dxpl_id, const uint8_t *p, H5O_shared_t *sh);
+static herr_t H5O_stab_encode(H5F_t *f, uint8_t *p, const void *_mesg);
+static void *H5O_stab_copy(const void *_mesg, void *_dest, unsigned update_flags);
+static size_t H5O_stab_size(const H5F_t *f, const void *_mesg);
+static herr_t H5O_stab_free(void *_mesg);
+static herr_t H5O_stab_delete(H5F_t *f, hid_t dxpl_id, const void *_mesg, hbool_t adj_link);
+static herr_t H5O_stab_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg,
+			     FILE * stream, int indent, int fwidth);
+
+/* This message derives from H5O */
+const H5O_class_t H5O_STAB[1] = {{
+    H5O_STAB_ID,            	/*message id number             */
+    "stab",                 	/*message name for debugging    */
+    sizeof(H5O_stab_t),     	/*native message size           */
+    H5O_stab_decode,        	/*decode message                */
+    H5O_stab_encode,        	/*encode message                */
+    H5O_stab_copy,          	/*copy the native value         */
+    H5O_stab_size,          	/*size of symbol table entry    */
+    NULL,                   	/*default reset method          */
+    H5O_stab_free,	        /* free method			*/
+    H5O_stab_delete,	        /* file delete method		*/
+    NULL,			/* link method			*/
+    NULL,		    	/*get share method		*/
+    NULL, 			/*set share method		*/
+    H5O_stab_debug,         	/*debug the message             */
+}};
+
+/* Declare a free list to manage the H5O_stab_t struct */
+H5FL_DEFINE_STATIC(H5O_stab_t);
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_stab_decode
+ *
+ * Purpose:     Decode a symbol table message and return a pointer to
+ *              a newly allocated one.
+ *
+ * Return:      Success:        Ptr to new message in native order.
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug  6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_stab_decode(H5F_t *f, hid_t UNUSED dxpl_id, const uint8_t *p, H5O_shared_t UNUSED *sh)
+{
+    H5O_stab_t          *stab=NULL;
+    void                *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_stab_decode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert(!sh);
+
+    /* decode */
+    if (NULL==(stab = H5FL_CALLOC(H5O_stab_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    H5F_addr_decode(f, &p, &(stab->btree_addr));
+    H5F_addr_decode(f, &p, &(stab->heap_addr));
+
+    /* Set return value */
+    ret_value=stab;
+
+done:
+    if(ret_value==NULL) {
+        if(stab!=NULL)
+            H5FL_FREE(H5O_stab_t,stab);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_stab_encode
+ *
+ * Purpose:     Encodes a symbol table message.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug  6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_stab_encode(H5F_t *f, uint8_t *p, const void *_mesg)
+{
+    const H5O_stab_t       *stab = (const H5O_stab_t *) _mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_stab_encode);
+
+    /* check args */
+    assert(f);
+    assert(p);
+    assert(stab);
+
+    /* encode */
+    H5F_addr_encode(f, &p, stab->btree_addr);
+    H5F_addr_encode(f, &p, stab->heap_addr);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_stab_fast
+ *
+ * Purpose:     Initializes a new message struct with info from the cache of
+ *              a symbol table entry.
+ *
+ * Return:      Success:        Ptr to message struct, allocated if none
+ *                              supplied.
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug  6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5O_stab_fast(const H5G_cache_t *cache, const H5O_class_t *type, void *_mesg)
+{
+    H5O_stab_t          *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_stab_fast);
+
+    /* check args */
+    assert(cache);
+    assert(type);
+
+    if (H5O_STAB == type) {
+        if (_mesg) {
+	    ret_value = (H5O_stab_t *) _mesg;
+        } else if (NULL==(ret_value = H5FL_MALLOC(H5O_stab_t))) {
+	    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+	}
+        ret_value->btree_addr = cache->stab.btree_addr;
+        ret_value->heap_addr = cache->stab.heap_addr;
+    }
+    else
+        ret_value=NULL;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_stab_copy
+ *
+ * Purpose:     Copies a message from _MESG to _DEST, allocating _DEST if
+ *              necessary.
+ *
+ * Return:      Success:        Ptr to _DEST
+ *
+ *              Failure:        NULL
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug  6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5O_stab_copy(const void *_mesg, void *_dest, unsigned UNUSED update_flags)
+{
+    const H5O_stab_t       *stab = (const H5O_stab_t *) _mesg;
+    H5O_stab_t             *dest = (H5O_stab_t *) _dest;
+    void                *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_stab_copy);
+
+    /* check args */
+    assert(stab);
+    if (!dest && NULL==(dest = H5FL_MALLOC(H5O_stab_t)))
+	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* copy */
+    *dest = *stab;
+
+    /* Set return value */
+    ret_value=dest;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_stab_size
+ *
+ * Purpose:     Returns the size of the raw message in bytes not counting
+ *              the message type or size fields, but only the data fields.
+ *              This function doesn't take into account alignment.
+ *
+ * Return:      Success:        Message data size in bytes without alignment.
+ *
+ *              Failure:        zero
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug  6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5O_stab_size(const H5F_t *f, const void UNUSED *_mesg)
+{
+    size_t ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_stab_size);
+
+    /* Set return value */
+    ret_value=2 * H5F_SIZEOF_ADDR(f);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5O_stab_free
+ *
+ * Purpose:	Free's the message
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, March 30, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_stab_free (void *mesg)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_stab_free);
+
+    assert (mesg);
+
+    H5FL_FREE(H5O_stab_t,mesg);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_stab_delete
+ *
+ * Purpose:     Free file space referenced by message
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *              Thursday, March 20, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_stab_delete(H5F_t *f, hid_t dxpl_id, const void *mesg, hbool_t adj_link)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5O_stab_delete)
+
+    /* check args */
+    assert(f);
+    assert(mesg);
+
+    /* Free the file space for the symbol table */
+    if (H5G_stab_delete(f, dxpl_id, mesg, adj_link)<0)
+        HGOTO_ERROR(H5E_OHDR, H5E_CANTFREE, FAIL, "unable to free symbol table")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5O_stab_delete() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5O_stab_debug
+ *
+ * Purpose:     Prints debugging info for a symbol table message.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Aug  6 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5O_stab_debug(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const void *_mesg, FILE * stream,
+	       int indent, int fwidth)
+{
+    const H5O_stab_t       *stab = (const H5O_stab_t *) _mesg;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_stab_debug);
+
+    /* check args */
+    assert(f);
+    assert(stab);
+    assert(stream);
+    assert(indent >= 0);
+    assert(fwidth >= 0);
+
+    HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+	      "B-tree address:", stab->btree_addr);
+
+    HDfprintf(stream, "%*s%-*s %a\n", indent, "", fwidth,
+	      "Name heap address:", stab->heap_addr);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}

Added: packages/hdf5/branches/upstream/current/src/H5P.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5P.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5P.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5659 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *
+ * Purpose:	Generic Property Functions
+ */
+
+#define H5P_PACKAGE		/*suppress error about including H5Ppkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5P_init_interface
+
+
+/* Private header files */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dprivate.h"		/* Datasets				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* Files		  	        */
+#include "H5FLprivate.h"	/* Free lists                           */
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Ppkg.h"		/* Property lists		  	*/
+
+/* Local macros */
+#define H5P_DEFAULT_SKIPLIST_HEIGHT     8
+
+/* Local variables */
+
+/*
+ * Predefined property list classes. These are initialized at runtime by
+ * H5P_init_interface() in this source file.
+ */
+hid_t H5P_CLS_NO_CLASS_g            = FAIL;
+hid_t H5P_CLS_FILE_CREATE_g         = FAIL;
+hid_t H5P_CLS_FILE_ACCESS_g         = FAIL;
+hid_t H5P_CLS_DATASET_CREATE_g      = FAIL;
+hid_t H5P_CLS_DATASET_XFER_g        = FAIL;
+hid_t H5P_CLS_MOUNT_g               = FAIL;
+
+/*
+ * Predefined property lists for each predefined class. These are initialized
+ * at runtime by H5P_init_interface() in this source file.
+ */
+hid_t H5P_LST_NO_CLASS_g            = FAIL;
+hid_t H5P_LST_FILE_CREATE_g         = FAIL;
+hid_t H5P_LST_FILE_ACCESS_g         = FAIL;
+hid_t H5P_LST_DATASET_CREATE_g      = FAIL;
+hid_t H5P_LST_DATASET_XFER_g        = FAIL;
+hid_t H5P_LST_MOUNT_g               = FAIL;
+
+/* Track the revision count of a class, to make comparisons faster */
+static unsigned H5P_next_rev=0;
+#define H5P_GET_NEXT_REV        (H5P_next_rev++)
+
+/* Declare a free list to manage the H5P_genprop_t struct */
+H5FL_DEFINE(H5P_genprop_t);
+
+/* Declare a free list to manage the H5P_genplist_t struct */
+H5FL_DEFINE(H5P_genplist_t);
+
+/* Declare a free list to manage the H5P_genclass_t struct */
+H5FL_DEFINE_STATIC(H5P_genclass_t);
+
+/* Local typedefs */
+
+/* Typedef for checking for duplicate class names in parent class */
+typedef struct {
+    const H5P_genclass_t *parent;       /* Pointer to parent class */
+    const char *name;                   /* Pointer to name to check */
+} H5P_check_class_t;
+
+/* Local static functions */
+static H5P_genclass_t *H5P_create_class(H5P_genclass_t *par_class,
+     const char *name, unsigned internal,
+     H5P_cls_create_func_t cls_create, void *create_data,
+     H5P_cls_copy_func_t cls_copy, void *copy_data,
+     H5P_cls_close_func_t cls_close, void *close_data);
+static herr_t H5P_unregister(H5P_genclass_t *pclass, const char *name);
+static H5P_genprop_t *H5P_dup_prop(H5P_genprop_t *oprop, H5P_prop_within_t type);
+static herr_t H5P_free_prop(H5P_genprop_t *prop);
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_do_prop_cb1
+ PURPOSE
+    Internal routine to call a property list callback routine and update
+    the property list accordingly.
+ USAGE
+    herr_t H5P_do_prop_cb1(slist,prop,cb)
+        H5SL_t *slist;          IN/OUT: Skip list to hold changed properties
+        H5P_genprop_t *prop;    IN: Property to call callback for
+        H5P_prp_cb1_t *cb;      IN: Callback routine to call
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Calls the callback routine passed in.  If the callback routine changes
+    the property value, then the property is duplicated and added to skip list.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5P_do_prop_cb1(H5SL_t *slist, H5P_genprop_t *prop, H5P_prp_cb1_t cb)
+{
+    void *tmp_value=NULL;       /* Temporary value buffer */
+    H5P_genprop_t *pcopy=NULL;  /* Copy of property to insert into skip list */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_do_prop_cb1);
+
+    /* Allocate space for a temporary copy of the property value */
+    if (NULL==(tmp_value=H5MM_malloc(prop->size)))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for temporary property value");
+    HDmemcpy(tmp_value,prop->value,prop->size);
+
+    /* Call "type 1" callback ('create', 'copy' or 'close') */
+    if(cb(prop->name,prop->size,tmp_value)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, FAIL,"Property callback failed");
+
+    /* Check if the property value changed */
+    if(HDmemcmp(tmp_value,prop->value,prop->size)) {
+        /* Make a copy of the class's property */
+        if((pcopy=H5P_dup_prop(prop,H5P_PROP_WITHIN_LIST))==NULL)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTCOPY, FAIL,"Can't copy property");
+
+        /* Copy the changed value into the new property */
+        HDmemcpy(pcopy->value,tmp_value,prop->size);
+
+        /* Insert the changed property into the property list */
+        if(H5P_add_prop(slist,pcopy)<0)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTINSERT, FAIL,"Can't insert property into skip list");
+    } /* end if */
+
+done:
+    /* Release the temporary value buffer */
+    if(tmp_value!=NULL)
+        H5MM_xfree(tmp_value);
+
+    /* Cleanup on failure */
+    if(ret_value<0) {
+        if(pcopy!=NULL)
+            H5P_free_prop(pcopy);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5P_do_prop_cb1() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5P_init
+ *
+ * Purpose:	Initialize the interface from some other layer.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, March 4, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5P_init(void)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5P_init, FAIL);
+    /* FUNC_ENTER() does all the work */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5P_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5P_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5P_init_interface(void)
+{
+    H5P_genclass_t  *root_class;    /* Pointer to root property list class created */
+    H5P_genclass_t  *pclass;        /* Pointer to property list class to create */
+    herr_t      ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_init_interface);
+
+    /*
+     * Initialize the Generic Property class & object groups.
+     */
+    if (H5I_init_group(H5I_GENPROP_CLS, H5I_GENPROPCLS_HASHSIZE, 0, (H5I_free_t)H5P_close_class) < 0)
+        HGOTO_ERROR(H5E_ATOM, H5E_CANTINIT, FAIL, "unable to initialize atom group");
+    if (H5I_init_group(H5I_GENPROP_LST, H5I_GENPROPOBJ_HASHSIZE, 0, (H5I_free_t)H5P_close) < 0)
+        HGOTO_ERROR(H5E_ATOM, H5E_CANTINIT, FAIL, "unable to initialize atom group");
+
+    /* Create root property list class */
+
+    /* Allocate the root class */
+    assert(H5P_CLS_NO_CLASS_g==(-1));
+    if (NULL==(root_class = H5P_create_class (NULL,"root",1,NULL,NULL,NULL,NULL,NULL,NULL)))
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, FAIL, "class initialization failed");
+
+    /* Register the root class */
+    if ((H5P_CLS_NO_CLASS_g = H5I_register (H5I_GENPROP_CLS, root_class))<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't register property list class");
+
+    /* Register the file creation and file access property classes */
+
+    /* Allocate the file creation class */
+    assert(H5P_CLS_FILE_CREATE_g==(-1));
+    if (NULL==(pclass = H5P_create_class (root_class,"file create",1,NULL,NULL,NULL,NULL,NULL,NULL)))
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, FAIL, "class initialization failed");
+
+    /* Register the file creation class */
+    if ((H5P_CLS_FILE_CREATE_g = H5I_register (H5I_GENPROP_CLS, pclass))<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't register property list class");
+
+    /* Allocate the file access class */
+    assert(H5P_CLS_FILE_ACCESS_g==(-1));
+    if (NULL==(pclass = H5P_create_class (root_class,"file access",1,H5F_acs_create,NULL,H5F_acs_copy,NULL,H5F_acs_close,NULL)))
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, FAIL, "class initialization failed");
+
+    /* Register the file access class */
+    if ((H5P_CLS_FILE_ACCESS_g = H5I_register (H5I_GENPROP_CLS, pclass))<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't register property list class");
+
+    /* Register the dataset creation and data xfer property classes */
+
+    /* Allocate the dataset creation class */
+    assert(H5P_CLS_DATASET_CREATE_g==(-1));
+    if (NULL==(pclass = H5P_create_class (root_class,"dataset create",1,NULL,NULL,H5D_crt_copy,NULL,H5D_crt_close,NULL)))
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, FAIL, "class initialization failed");
+
+    /* Register the dataset creation class */
+    if ((H5P_CLS_DATASET_CREATE_g = H5I_register (H5I_GENPROP_CLS, pclass))<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't register property list class");
+
+    /* Allocate the data xfer class */
+    assert(H5P_CLS_DATASET_XFER_g==(-1));
+    if (NULL==(pclass = H5P_create_class (root_class,"data xfer",1,H5D_xfer_create,NULL,H5D_xfer_copy,NULL,H5D_xfer_close,NULL)))
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, FAIL, "class initialization failed");
+
+    /* Register the data xfer class */
+    if ((H5P_CLS_DATASET_XFER_g = H5I_register (H5I_GENPROP_CLS, pclass))<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't register property list class");
+
+    /* Allocate the mount class */
+    assert(H5P_CLS_MOUNT_g==(-1));
+    if (NULL==(pclass = H5P_create_class (root_class,"file mount",1,NULL,NULL,NULL,NULL,NULL,NULL)))
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, FAIL, "class initialization failed");
+
+    /* Register the mount class */
+    if ((H5P_CLS_MOUNT_g = H5I_register (H5I_GENPROP_CLS, pclass))<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTREGISTER, FAIL, "can't register property list class");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_term_interface
+ PURPOSE
+    Terminate various H5P objects
+ USAGE
+    void H5P_term_interface()
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Release the atom group and any other resources allocated.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+     Can't report errors...
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+int
+H5P_term_interface(void)
+{
+    int	nlist=0;
+    int	nclass=0;
+    int	n=0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_term_interface);
+
+    if (H5_interface_initialize_g) {
+        /* Destroy HDF5 library property classes & lists */
+
+        /* Check if there are any open property list classes or lists */
+        nclass = H5I_nmembers(H5I_GENPROP_CLS);
+        nlist = H5I_nmembers(H5I_GENPROP_LST);
+        n=nclass+nlist;
+
+        /* If there are any open classes or groups, attempt to get rid of them. */
+        if (n) {
+            /* Clear the lists */
+            if(nlist>0) {
+                H5I_clear_group(H5I_GENPROP_LST, FALSE);
+
+                /* Reset the default property lists, if they've been closed */
+                if(H5I_nmembers(H5I_GENPROP_LST)==0) {
+                    H5P_LST_NO_CLASS_g =
+                        H5P_LST_FILE_CREATE_g =
+                        H5P_LST_FILE_ACCESS_g =
+                        H5P_LST_DATASET_CREATE_g =
+                        H5P_LST_DATASET_XFER_g =
+                        H5P_LST_MOUNT_g = (-1);
+                } /* end if */
+            } /* end if */
+
+            /* Only attempt to close the classes after all the lists are closed */
+            if(nlist==0 && nclass>0) {
+                H5I_clear_group(H5I_GENPROP_CLS, FALSE);
+
+                /* Reset the default property lists, if they've been closed */
+                if(H5I_nmembers(H5I_GENPROP_CLS)==0) {
+                    H5P_CLS_NO_CLASS_g =
+                        H5P_CLS_FILE_CREATE_g =
+                        H5P_CLS_FILE_ACCESS_g =
+                        H5P_CLS_DATASET_CREATE_g =
+                        H5P_CLS_DATASET_XFER_g =
+                        H5P_CLS_MOUNT_g = (-1);
+                } /* end if */
+            } /* end if */
+        } else {
+            H5I_destroy_group(H5I_GENPROP_LST);
+            n++; /*H5I*/
+            H5I_destroy_group(H5I_GENPROP_CLS);
+            n++; /*H5I*/
+
+            H5_interface_initialize_g = 0;
+        }
+    }
+    FUNC_LEAVE_NOAPI(n);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_copy_pclass
+ PURPOSE
+    Internal routine to copy a generic property class
+ USAGE
+    hid_t H5P_copy_pclass(pclass)
+        H5P_genclass_t *pclass;      IN: Property class to copy
+ RETURNS
+    Success: valid property class ID on success (non-negative)
+    Failure: negative
+ DESCRIPTION
+    Copy a property class and return the ID.  This routine does not make
+    any callbacks.  (They are only make when operating on property lists).
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5P_genclass_t *
+H5P_copy_pclass(H5P_genclass_t *pclass)
+{
+    H5P_genclass_t *new_pclass = NULL;  /* Property list class copied */
+    H5P_genprop_t *pcopy;               /* Copy of property to insert into class */
+    H5P_genclass_t *ret_value=NULL;     /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_copy_pclass);
+
+    assert(pclass);
+
+    /*
+     * Create new property class object
+     */
+
+    /* Create the new property list class */
+    if (NULL==(new_pclass=H5P_create_class(pclass->parent, pclass->name, 0, pclass->create_func, pclass->create_data, pclass->copy_func, pclass->copy_data, pclass->close_func, pclass->close_data)))
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTCREATE, NULL, "unable to create property list class");
+
+    /* Copy the properties registered for this class */
+    if(pclass->nprops>0) {
+        H5SL_node_t *curr_node;   /* Current node in skip list */
+
+        /* Walk through the properties in the old class */
+        curr_node=H5SL_first(pclass->props);
+        while(curr_node!=NULL) {
+            /* Make a copy of the class's property */
+            if((pcopy=H5P_dup_prop(H5SL_item(curr_node),H5P_PROP_WITHIN_CLASS))==NULL)
+                HGOTO_ERROR (H5E_PLIST, H5E_CANTCOPY, NULL,"Can't copy property");
+
+            /* Insert the initialized property into the property list */
+            if(H5P_add_prop(new_pclass->props,pcopy)<0)
+                HGOTO_ERROR (H5E_PLIST, H5E_CANTINSERT, NULL,"Can't insert property into class");
+
+            /* Increment property count for class */
+            new_pclass->nprops++;
+
+            /* Get the next property node in the list */
+            curr_node=H5SL_next(curr_node);
+        } /* end while */
+    } /* end if */
+
+    /* Set the return value */
+    ret_value=new_pclass;
+
+done:
+    if (ret_value==NULL && new_pclass)
+        H5P_close_class(new_pclass);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_copy_pclass() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_copy_plist
+ PURPOSE
+    Internal routine to copy a generic property list
+ USAGE
+        hid_t H5P_copy_plist(old_plist_id)
+            hid_t old_plist_id;             IN: Property list ID to copy
+ RETURNS
+    Success: valid property list ID on success (non-negative)
+    Failure: negative
+ DESCRIPTION
+    Copy a property list and return the ID.  This routine calls the
+    class 'copy' callback after any property 'copy' callbacks are called
+    (assuming all property 'copy' callbacks return successfully).
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hid_t
+H5P_copy_plist(H5P_genplist_t *old_plist)
+{
+    H5P_genclass_t *tclass;     /* Temporary class pointer */
+    H5P_genplist_t *new_plist=NULL;  /* New property list generated from copy */
+    H5P_genprop_t *tmp;         /* Temporary pointer to properties */
+    H5P_genprop_t *new_prop;    /* New property created for copy */
+    hid_t new_plist_id;         /* Property list ID of new list created */
+    H5SL_node_t *curr_node;     /* Current node in skip list */
+    H5SL_t *seen=NULL;          /* Skip list containing properties already seen */
+    size_t nseen;               /* Number of items 'seen' */
+    hbool_t has_parent_class;   /* Flag to indicate that this property list's class has a parent */
+    hid_t ret_value=FAIL;       /* return value */
+
+    FUNC_ENTER_NOAPI(H5P_copy_plist, FAIL);
+
+    assert(old_plist);
+
+    /*
+     * Create new property list object
+     */
+
+    /* Allocate room for the property list */
+    if (NULL==(new_plist = H5FL_CALLOC(H5P_genplist_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL,"memory allocation failed");
+
+    /* Set class state */
+    new_plist->pclass = old_plist->pclass;
+    new_plist->nprops = 0;      /* Initially the plist has the same number of properties as the class */
+    new_plist->class_init = 0;  /* Initially, wait until the class callback finishes to set */
+
+    /* Initialize the skip list to hold the changed properties */
+    if((new_plist->props=H5SL_create(H5SL_TYPE_STR,0.5,H5P_DEFAULT_SKIPLIST_HEIGHT))==NULL)
+        HGOTO_ERROR(H5E_PLIST,H5E_CANTCREATE,FAIL,"can't create skip list for changed properties");
+
+    /* Create the skip list for deleted properties */
+    if((new_plist->del=H5SL_create(H5SL_TYPE_STR,0.5,H5P_DEFAULT_SKIPLIST_HEIGHT))==NULL)
+        HGOTO_ERROR(H5E_PLIST,H5E_CANTCREATE,FAIL,"can't create skip list for deleted properties");
+
+    /* Create the skip list to hold names of properties already seen
+     * (This prevents a property in the class hierarchy from having it's
+     * 'create' callback called, if a property in the class hierarchy has
+     * already been seen)
+     */
+    if((seen=H5SL_create(H5SL_TYPE_STR,0.5,H5P_DEFAULT_SKIPLIST_HEIGHT))==NULL)
+        HGOTO_ERROR(H5E_PLIST,H5E_CANTCREATE,FAIL,"can't create skip list for seen properties");
+    nseen=0;
+
+    /* Cycle through the deleted properties & copy them into the new list's deleted section */
+    if(H5SL_count(old_plist->del)>0) {
+        curr_node=H5SL_first(old_plist->del);
+        while(curr_node) {
+            char *new_name;   /* Pointer to new name */
+
+            /* Duplicate string for insertion into new deleted property skip list */
+            if((new_name=H5MM_xstrdup((char *)H5SL_item(curr_node)))==NULL)
+                HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,FAIL,"memory allocation failed");
+
+            /* Insert property name into deleted list */
+            if(H5SL_insert(new_plist->del,new_name,new_name)<0)
+                HGOTO_ERROR(H5E_PLIST,H5E_CANTINSERT,FAIL,"can't insert property into deleted skip list");
+
+            /* Add property name to "seen" list */
+            if(H5SL_insert(seen,new_name,new_name)<0)
+                HGOTO_ERROR(H5E_PLIST,H5E_CANTINSERT,FAIL,"can't insert property into seen skip list");
+            nseen++;
+
+            /* Get the next property node in the skip list */
+            curr_node=H5SL_next(curr_node);
+        } /* end while */
+    } /* end if */
+
+    /* Cycle through the properties and copy them also */
+    if(H5SL_count(old_plist->props)>0) {
+        curr_node=H5SL_first(old_plist->props);
+        while(curr_node) {
+            /* Get a pointer to the node's property */
+            tmp=H5SL_item(curr_node);
+
+            /* Make a copy of the list's property */
+            if((new_prop=H5P_dup_prop(tmp,H5P_PROP_WITHIN_LIST))==NULL)
+                HGOTO_ERROR (H5E_PLIST, H5E_CANTCOPY, FAIL,"Can't copy property");
+
+            /* Call property copy callback, if it exists */
+            if(new_prop->copy) {
+                if((new_prop->copy)(new_prop->name,new_prop->size,new_prop->value)<0) {
+                    H5P_free_prop(new_prop);
+                    HGOTO_ERROR (H5E_PLIST, H5E_CANTCOPY, FAIL,"Can't copy property");
+                } /* end if */
+            } /* end if */
+
+            /* Insert the initialized property into the property list */
+            if(H5P_add_prop(new_plist->props,new_prop)<0) {
+                H5P_free_prop(new_prop);
+                HGOTO_ERROR (H5E_PLIST, H5E_CANTINSERT, FAIL,"Can't insert property into list");
+            } /* end if */
+
+            /* Add property name to "seen" list */
+            if(H5SL_insert(seen,new_prop->name,new_prop->name)<0)
+                HGOTO_ERROR(H5E_PLIST,H5E_CANTINSERT,FAIL,"can't insert property into seen skip list");
+            nseen++;
+
+            /* Increment the number of properties in list */
+            new_plist->nprops++;
+
+            /* Get the next property node in the skip list */
+            curr_node=H5SL_next(curr_node);
+        } /* end while */
+    } /* end if */
+
+    /*
+     * Check for copying class properties (up through list of parent classes also),
+     * initialize each with default value & make property 'copy' callback.
+     */
+    tclass=old_plist->pclass;
+    has_parent_class=(tclass!=NULL && tclass->parent!=NULL && tclass->parent->nprops>0);
+    while(tclass!=NULL) {
+        if(tclass->nprops>0) {
+            /* Walk through the properties in the old class */
+            curr_node=H5SL_first(tclass->props);
+            while(curr_node!=NULL) {
+                /* Get pointer to property from node */
+                tmp=H5SL_item(curr_node);
+
+                /* Only "copy" properties we haven't seen before */
+                if(nseen==0 || H5SL_search(seen,tmp->name)==NULL) {
+                    /* Call property creation callback, if it exists */
+                    if(tmp->copy) {
+                        /* Call the callback & insert changed value into skip list (if necessary) */
+                        if(H5P_do_prop_cb1(new_plist->props,tmp,tmp->copy)<0)
+                            HGOTO_ERROR (H5E_PLIST, H5E_CANTCOPY, FAIL,"Can't create property");
+                    } /* end if */
+
+                    /* Add property name to "seen" list, if we have other classes to work on */
+                    if(has_parent_class) {
+                        if(H5SL_insert(seen,tmp->name,tmp->name)<0)
+                            HGOTO_ERROR(H5E_PLIST,H5E_CANTINSERT,FAIL,"can't insert property into seen skip list");
+                        nseen++;
+                    } /* end if */
+
+                    /* Increment the number of properties in list */
+                    new_plist->nprops++;
+                } /* end if */
+
+                /* Get the next property node in the skip list */
+                curr_node=H5SL_next(curr_node);
+            } /* end while */
+        } /* end if */
+
+        /* Go up to parent class */
+        tclass=tclass->parent;
+    } /* end while */
+
+    /* Increment the number of property lists derived from class */
+    if(H5P_access_class(new_plist->pclass,H5P_MOD_INC_LST)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, FAIL,"Can't increment class ref count");
+
+    /* Get an atom for the property list */
+    if ((new_plist_id = H5I_register(H5I_GENPROP_LST, new_plist))<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to atomize property list");
+
+    /* Save the property list ID in the property list struct, for use in the property class's 'close' callback */
+    new_plist->plist_id=new_plist_id;
+
+    /* Call the class callback (if it exists) now that we have the property list ID */
+    if(new_plist->pclass->copy_func!=NULL) {
+        if((new_plist->pclass->copy_func)(new_plist_id,old_plist->plist_id,old_plist->pclass->copy_data)<0) {
+            /* Delete ID, ignore return value */
+            H5I_remove(new_plist_id);
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, FAIL,"Can't initialize property");
+        } /* end if */
+    } /* end if */
+
+    /* Set the class initialization flag */
+    new_plist->class_init=1;
+
+    /* Set the return value */
+    ret_value=new_plist_id;
+
+done:
+    /* Release the list of 'seen' properties */
+    if(seen!=NULL)
+        H5SL_close(seen);
+
+    if (ret_value<0 && new_plist)
+        H5P_close(new_plist);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_copy_plist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pcopy
+ PURPOSE
+    Routine to copy a property list or class
+ USAGE
+    hid_t H5Pcopy(id)
+        hid_t id;           IN: Property list or class ID to copy
+ RETURNS
+    Success: valid property list ID on success (non-negative)
+    Failure: negative
+ DESCRIPTION
+    Copy a property list or class and return the ID.  This routine calls the
+    class 'copy' callback after any property 'copy' callbacks are called
+    (assuming all property 'copy' callbacks return successfully).
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hid_t
+H5Pcopy(hid_t id)
+{
+    void *obj;                 /* Property object to copy */
+    hid_t ret_value=FALSE;      /* return value */
+
+    FUNC_ENTER_API(H5Pcopy, FAIL);
+    H5TRACE1("i","i",id);
+
+    if (H5P_DEFAULT==id)
+        HGOTO_DONE(H5P_DEFAULT);
+
+    /* Check arguments. */
+    if (H5I_GENPROP_LST != H5I_get_type(id) && H5I_GENPROP_CLS != H5I_get_type(id))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not property object");
+    if(NULL == (obj = H5I_object(id)))
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, FAIL, "property object doesn't exist");
+
+    /* Compare property lists */
+    if(H5I_GENPROP_LST == H5I_get_type(id)) {
+        if((ret_value=H5P_copy_plist(obj))<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTCOPY, FAIL, "can't copy property list");
+    } /* end if */
+    /* Must be property classes */
+    else {
+        H5P_genclass_t *copy_class;      /* Copy of class */
+
+        /* Copy the class */
+        if((copy_class=H5P_copy_pclass(obj))==NULL)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTCOPY, FAIL, "can't copy property class");
+
+        /* Get an atom for the copied class */
+        if ((ret_value = H5I_register(H5I_GENPROP_CLS, copy_class))<0) {
+            H5P_close_class(copy_class);
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to atomize property list class");
+        } /* end if */
+    } /* end else */
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pcopy() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_dup_prop
+ PURPOSE
+    Internal routine to duplicate a property
+ USAGE
+    H5P_genprop_t *H5P_dup_prop(oprop)
+        H5P_genprop_t *oprop;   IN: Pointer to property to copy
+        H5P_prop_within_t type; IN: Type of object the property will be inserted into
+ RETURNS
+    Returns a pointer to the newly created duplicate of a property on success,
+        NULL on failure.
+ DESCRIPTION
+    Allocates memory and copies property information into a new property object.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5P_genprop_t *
+H5P_dup_prop(H5P_genprop_t *oprop, H5P_prop_within_t type)
+{
+    H5P_genprop_t *prop=NULL;        /* Pointer to new property copied */
+    H5P_genprop_t *ret_value;        /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_dup_prop);
+
+    assert(oprop);
+    assert(type!=H5P_PROP_WITHIN_UNKNOWN);
+
+    /* Allocate the new property */
+    if (NULL==(prop = H5FL_MALLOC (H5P_genprop_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* Copy basic property information */
+    HDmemcpy(prop,oprop,sizeof(H5P_genprop_t));
+
+    /* Check if we should duplicate the name or share it */
+
+    /* Duplicating property for a class */
+    if(type==H5P_PROP_WITHIN_CLASS) {
+        assert(oprop->type==H5P_PROP_WITHIN_CLASS);
+        assert(oprop->shared_name==0);
+
+        /* Duplicate name */
+        prop->name = H5MM_xstrdup(oprop->name);
+    } /* end if */
+    /* Duplicating property for a list */
+    else {
+        /* Check if we are duplicating a property from a list or a class */
+
+        /* Duplicating a property from a list */
+        if(oprop->type==H5P_PROP_WITHIN_LIST) {
+            /* If the old property's name wasn't shared, we have to copy it here also */
+            if(!oprop->shared_name)
+                prop->name = H5MM_xstrdup(oprop->name);
+        } /* end if */
+        /* Duplicating a property from a class */
+        else {
+            assert(oprop->type==H5P_PROP_WITHIN_CLASS);
+            assert(oprop->shared_name==0);
+
+            /* Share the name */
+            prop->shared_name=1;
+
+            /* Set the type */
+            prop->type=type;
+        } /* end else */
+    } /* end else */
+
+    /* Duplicate current value, if it exists */
+    if(oprop->value!=NULL) {
+        assert(prop->size>0);
+        if (NULL==(prop->value = H5MM_malloc (prop->size)))
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+        HDmemcpy(prop->value,oprop->value,prop->size);
+    } /* end if */
+
+    /* Set return value */
+    ret_value=prop;
+
+done:
+    /* Free any resources allocated */
+    if(ret_value==NULL) {
+        if(prop!=NULL) {
+            if(prop->name!=NULL)
+                H5MM_xfree(prop->name);
+            if(prop->value!=NULL)
+                H5MM_xfree(prop->value);
+            H5FL_FREE(H5P_genprop_t,prop);
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_dup_prop() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_create_prop
+ PURPOSE
+    Internal routine to create a new property
+ USAGE
+    H5P_genprop_t *H5P_create_prop(name,size,type,value,prp_create,prp_set,
+            prp_get,prp_delete,prp_close)
+        const char *name;       IN: Name of property to register
+        size_t size;            IN: Size of property in bytes
+        H5P_prop_within_t type; IN: Type of object the property will be inserted into
+        void *value;            IN: Pointer to buffer containing value for property
+        H5P_prp_create_func_t prp_create;   IN: Function pointer to property
+                                    creation callback
+        H5P_prp_set_func_t prp_set; IN: Function pointer to property set callback
+        H5P_prp_get_func_t prp_get; IN: Function pointer to property get callback
+        H5P_prp_delete_func_t prp_delete; IN: Function pointer to property delete callback
+        H5P_prp_copy_func_t prp_copy; IN: Function pointer to property copy callback
+        H5P_prp_compare_func_t prp_cmp; IN: Function pointer to property compare callback
+        H5P_prp_close_func_t prp_close; IN: Function pointer to property close
+                                    callback
+ RETURNS
+    Returns a pointer to the newly created property on success,
+        NULL on failure.
+ DESCRIPTION
+    Allocates memory and copies property information into a new property object.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5P_genprop_t *
+H5P_create_prop(const char *name, size_t size, H5P_prop_within_t type,
+    void *value,
+    H5P_prp_create_func_t prp_create, H5P_prp_set_func_t prp_set,
+    H5P_prp_get_func_t prp_get, H5P_prp_delete_func_t prp_delete,
+    H5P_prp_copy_func_t prp_copy, H5P_prp_compare_func_t prp_cmp,
+    H5P_prp_close_func_t prp_close)
+{
+    H5P_genprop_t *prop=NULL;        /* Pointer to new property copied */
+    H5P_genprop_t *ret_value;        /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_create_prop);
+
+    assert(name);
+    assert((size>0 && value!=NULL) || (size==0));
+    assert(type!=H5P_PROP_WITHIN_UNKNOWN);
+
+    /* Allocate the new property */
+    if (NULL==(prop = H5FL_MALLOC (H5P_genprop_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* Set the property initial values */
+    prop->name = H5MM_xstrdup(name); /* Duplicate name */
+    prop->shared_name=0;
+    prop->size=size;
+    prop->type=type;
+
+    /* Duplicate value, if it exists */
+    if(value!=NULL) {
+        if (NULL==(prop->value = H5MM_malloc (prop->size)))
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+        HDmemcpy(prop->value,value,prop->size);
+    } /* end if */
+    else
+        prop->value=NULL;
+
+    /* Set the function pointers */
+    prop->create=prp_create;
+    prop->set=prp_set;
+    prop->get=prp_get;
+    prop->del=prp_delete;
+    prop->copy=prp_copy;
+    /* Use custom comparison routine if available, otherwise default to memcmp() */
+    if(prp_cmp!=NULL)
+        prop->cmp=prp_cmp;
+    else
+        prop->cmp=&memcmp;
+    prop->close=prp_close;
+
+    /* Set return value */
+    ret_value=prop;
+
+done:
+    /* Free any resources allocated */
+    if(ret_value==NULL) {
+        if(prop!=NULL) {
+            if(prop->name!=NULL)
+                H5MM_xfree(prop->name);
+            if(prop->value!=NULL)
+                H5MM_xfree(prop->value);
+            H5FL_FREE(H5P_genprop_t,prop);
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_create_prop() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_add_prop
+ PURPOSE
+    Internal routine to insert a property into a property skip list
+ USAGE
+    herr_t H5P_add_prop(slist, prop)
+        H5SL_t *slist;          IN/OUT: Pointer to skip list of properties
+        H5P_genprop_t *prop;    IN: Pointer to property to insert
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Inserts a property into a skip list of properties.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5P_add_prop(H5SL_t *slist, H5P_genprop_t *prop)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5P_add_prop,FAIL);
+
+    assert(slist);
+    assert(prop);
+    assert(prop->type!=H5P_PROP_WITHIN_UNKNOWN);
+
+    /* Insert property into skip list */
+    if(H5SL_insert(slist,prop,prop->name)<0)
+        HGOTO_ERROR(H5E_PLIST,H5E_CANTINSERT,FAIL,"can't insert property into skip list");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_add_prop() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_find_prop_plist
+ PURPOSE
+    Internal routine to check for a property in a property list's skip list
+ USAGE
+    H5P_genprop_t *H5P_find_prop(plist, name)
+        H5P_genplist_t *plist;  IN: Pointer to property list to check
+        const char *name;       IN: Name of property to check for
+ RETURNS
+    Returns pointer to property on success, NULL on failure.
+ DESCRIPTION
+    Checks for a property in a property list's skip list of properties.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5P_genprop_t *
+H5P_find_prop_plist(H5P_genplist_t *plist, const char *name)
+{
+    H5P_genprop_t *ret_value;   /* Property pointer return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_find_prop_plist);
+
+    assert(plist);
+    assert(name);
+
+    /* Check if the property has been deleted from list */
+    if(H5SL_search(plist->del,name)!=NULL) {
+        HGOTO_ERROR(H5E_PLIST,H5E_NOTFOUND,NULL,"can't find property in skip list");
+    } /* end if */
+    else {
+        /* Get the property data from the skip list */
+        if((ret_value=H5SL_search(plist->props,name))==NULL) {
+            H5P_genclass_t *tclass;     /* Temporary class pointer */
+
+            /* Couldn't find property in list itself, start searching through class info */
+            tclass=plist->pclass;
+            while(tclass!=NULL) {
+                /* Find the property in the class */
+                if((ret_value=H5SL_search(tclass->props,name))!=NULL)
+                    /* Got pointer to property - leave now */
+                    break;
+
+                /* Go up to parent class */
+                tclass=tclass->parent;
+            } /* end while */
+
+            /* Check if we haven't found the property */
+            if(ret_value==NULL)
+                HGOTO_ERROR(H5E_PLIST,H5E_NOTFOUND,NULL,"can't find property in skip list");
+        } /* end else */
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_find_prop_plist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_find_prop_pclass
+ PURPOSE
+    Internal routine to check for a property in a class skip list
+ USAGE
+    H5P_genprop_t *H5P_find_prop_class(pclass, name)
+        H5P_genclass *pclass;   IN: Pointer generic property class to check
+        const char *name;       IN: Name of property to check for
+ RETURNS
+    Returns pointer to property on success, NULL on failure.
+ DESCRIPTION
+    Checks for a property in a class's skip list of properties.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5P_genprop_t *
+H5P_find_prop_pclass(H5P_genclass_t *pclass, const char *name)
+{
+    H5P_genprop_t *ret_value;   /* Property pointer return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_find_prop_pclass);
+
+    assert(pclass);
+    assert(name);
+
+    /* Get the property from the skip list */
+    if((ret_value=H5SL_search(pclass->props,name))==NULL)
+        HGOTO_ERROR(H5E_PLIST,H5E_NOTFOUND,NULL,"can't find property in skip list");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_find_prop_pclass() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_free_prop
+ PURPOSE
+    Internal routine to destroy a property node
+ USAGE
+    herr_t H5P_free_prop(prop)
+        H5P_genprop_t *prop;    IN: Pointer to property to destroy
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Releases all the memory for a property list.  Does _not_ call the
+    properties 'close' callback, that should already have been done.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5P_free_prop(H5P_genprop_t *prop)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_free_prop);
+
+    assert(prop);
+
+    /* Release the property value if it exists */
+    if(prop->value)
+        H5MM_xfree(prop->value);
+
+    /* Only free the name if we own it */
+    if(prop->shared_name==0)
+        H5MM_xfree(prop->name);
+
+    H5FL_FREE(H5P_genprop_t,prop);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5P_free_prop() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_free_prop_cb
+ PURPOSE
+    Internal routine to properties from a property skip list
+ USAGE
+    herr_t H5P_free_prop_cb(item, key, op_data)
+        void *item;             IN/OUT: Pointer to property
+        void *key;              IN/OUT: Pointer to property key
+        void *_make_cb;         IN: Whether to make property callbacks or not
+ RETURNS
+    Returns zero on success, negative on failure.
+ DESCRIPTION
+        Calls the property 'close' callback for a property & frees property
+    info.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5P_free_prop_cb(void *item, void UNUSED *key, void *op_data)
+{
+    H5P_genprop_t *tprop=(H5P_genprop_t *)item;       /* Temporary pointer to property */
+    unsigned make_cb=*(unsigned *)op_data;     /* Whether to make property 'close' callback */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_free_prop_cb);
+
+    assert(tprop);
+
+    /* Call the close callback and ignore the return value, there's nothing we can do about it */
+    if(make_cb && tprop->close!=NULL)
+        (tprop->close)(tprop->name,tprop->size,tprop->value);
+
+    /* Free the property, ignoring return value, nothing we can do */
+    H5P_free_prop(tprop);
+
+    FUNC_LEAVE_NOAPI(0);
+}   /* H5P_free_prop_cb() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_free_del_name_cb
+ PURPOSE
+    Internal routine to free 'deleted' property name
+ USAGE
+    herr_t H5P_free_del_name_cb(item, key, op_data)
+        void *item;             IN/OUT: Pointer to deleted name
+        void *key;              IN/OUT: Pointer to key
+        void *op_data;          IN: Operator callback data (unused)
+ RETURNS
+    Returns zero on success, negative on failure.
+ DESCRIPTION
+    Frees the deleted property name
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5P_free_del_name_cb(void *item, void UNUSED *key, void UNUSED *op_data)
+{
+    char *del_name=(char *)item;       /* Temporary pointer to deleted name */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_free_del_name_cb);
+
+    assert(del_name);
+
+    /* Free the name */
+    H5MM_xfree(del_name);
+
+    FUNC_LEAVE_NOAPI(0);
+}   /* H5P_free_del_name_cb() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_access_class
+ PURPOSE
+    Internal routine to increment or decrement list & class dependancies on a
+        property list class
+ USAGE
+    herr_t H5P_access_class(pclass,mod)
+        H5P_genclass_t *pclass;     IN: Pointer to class to modify
+        H5P_class_mod_t mod;        IN: Type of modification to class
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Increment/Decrement the class or list dependancies for a given class.
+    This routine is the final arbiter on decisions about actually releasing a
+    class in memory, such action is only taken when the reference counts for
+    both dependent classes & lists reach zero.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5P_access_class(H5P_genclass_t *pclass, H5P_class_mod_t mod)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_access_class);
+
+    assert(pclass);
+    assert(mod>H5P_MOD_ERR && mod<H5P_MOD_MAX);
+
+    switch(mod) {
+        case H5P_MOD_INC_CLS:        /* Increment the dependant class count*/
+            pclass->classes++;
+            break;
+
+        case H5P_MOD_DEC_CLS:        /* Decrement the dependant class count*/
+            pclass->classes--;
+            break;
+
+        case H5P_MOD_INC_LST:        /* Increment the dependant list count*/
+            pclass->plists++;
+            break;
+
+        case H5P_MOD_DEC_LST:        /* Decrement the dependant list count*/
+            pclass->plists--;
+            break;
+
+        case H5P_MOD_INC_REF:        /* Increment the ID reference count*/
+            /* Reset the deleted flag if incrementing the reference count */
+            if(pclass->deleted)
+                pclass->deleted=0;
+            pclass->ref_count++;
+            break;
+
+        case H5P_MOD_DEC_REF:        /* Decrement the ID reference count*/
+            pclass->ref_count--;
+
+            /* Mark the class object as deleted if reference count drops to zero */
+            if(pclass->ref_count==0)
+                pclass->deleted=1;
+            break;
+
+        case H5P_MOD_ERR:
+        case H5P_MOD_MAX:
+            assert(0 && "Invalid H5P class modification");
+    } /* end switch */
+
+    /* Check if we can release the class information now */
+    if(pclass->deleted && pclass->plists==0 && pclass->classes==0 ) {
+        H5P_genclass_t *par_class=pclass->parent;       /* Pointer to class's parent */
+
+        assert(pclass->name);
+        H5MM_xfree(pclass->name);
+
+        /* Free the class properties without making callbacks */
+        if(pclass->props) {
+            unsigned make_cb=0;
+
+            H5SL_destroy(pclass->props,H5P_free_prop_cb,&make_cb);
+        } /* end if */
+
+        H5FL_FREE(H5P_genclass_t,pclass);
+
+        /* Reduce the number of dependent classes on parent class also */
+        if(par_class!=NULL)
+            H5P_access_class(par_class, H5P_MOD_DEC_CLS);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5P_access_class() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_check_class
+ PURPOSE
+    Internal callback routine to check for duplicated names in parent class.
+ USAGE
+    int H5P_check_class(obj, id, key)
+        H5P_genclass_t *obj;    IN: Pointer to class
+        hid_t id;               IN: ID of object being looked at
+        const void *key;        IN: Pointer to information used to compare
+                                    classes.
+ RETURNS
+    Returns >0 on match, 0 on no match and <0 on failure.
+ DESCRIPTION
+    Checks whether a property list class has the same parent and name as a
+    new class being created.  This is a callback routine for H5I_search()
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static int
+H5P_check_class(void *_obj, hid_t UNUSED id, void *_key)
+{
+    H5P_genclass_t *obj=(H5P_genclass_t *)_obj; /* Pointer to the class for this ID */
+    const H5P_check_class_t *key=(const H5P_check_class_t *)_key; /* Pointer to key information for comparison */
+    int ret_value=0;    /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_check_class);
+
+    assert(obj);
+    assert(H5I_GENPROP_CLS==H5I_get_type(id));
+    assert(key);
+
+    /* Check if the class object has the same parent as the new class */
+    if(obj->parent==key->parent) {
+        /* Check if they have the same name */
+        if(HDstrcmp(obj->name,key->name)==0)
+            ret_value=1;        /* Indicate a match */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5P_check_class() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_create_class
+ PURPOSE
+    Internal routine to create a new property list class.
+ USAGE
+    H5P_genclass_t H5P_create_class(par_class, name, internal,
+                cls_create, create_data, cls_close, close_data)
+        H5P_genclass_t *par_class;  IN: Pointer to parent class
+        const char *name;       IN: Name of class we are creating
+        unsigned internal; IN: Whether this is an internal class or not
+        H5P_cls_create_func_t;  IN: The callback function to call when each
+                                    property list in this class is created.
+        void *create_data;      IN: Pointer to user data to pass along to class
+                                    creation callback.
+        H5P_cls_copy_func_t;    IN: The callback function to call when each
+                                    property list in this class is copied.
+        void *copy_data;        IN: Pointer to user data to pass along to class
+                                    copy callback.
+        H5P_cls_close_func_t;   IN: The callback function to call when each
+                                    property list in this class is closed.
+        void *close_data;       IN: Pointer to user data to pass along to class
+                                    close callback.
+ RETURNS
+    Returns a pointer to the newly created property list class on success,
+        NULL on failure.
+ DESCRIPTION
+    Allocates memory and attaches a class to the property list class hierarchy.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5P_genclass_t *
+H5P_create_class(H5P_genclass_t *par_class, const char *name, unsigned internal,
+    H5P_cls_create_func_t cls_create, void *create_data,
+    H5P_cls_copy_func_t cls_copy, void *copy_data,
+    H5P_cls_close_func_t cls_close, void *close_data
+    )
+{
+    H5P_genclass_t *pclass=NULL;   /* Property list class created */
+    H5P_genclass_t *ret_value;     /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_create_class);
+
+    assert(name);
+    /* Allow internal classes to break some rules */
+    /* (This allows the root of the tree to be created with this routine -QAK) */
+    if(!internal) {
+        assert(par_class);
+    }
+
+    /* Allocate room for the class */
+    if (NULL==(pclass = H5FL_CALLOC(H5P_genclass_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,"memory allocation failed");
+
+    /* Set class state */
+    pclass->parent = par_class;
+    pclass->name = H5MM_xstrdup(name);
+    pclass->nprops = 0;     /* Classes are created without properties initially */
+    pclass->plists = 0;     /* No properties lists of this class yet */
+    pclass->classes = 0;    /* No classes derived from this class yet */
+    pclass->ref_count = 1;  /* This is the first reference to the new class */
+    pclass->internal = internal;
+    pclass->deleted = 0;    /* Not deleted yet... :-) */
+    pclass->revision = H5P_GET_NEXT_REV;        /* Get a revision number for the class */
+
+    /* Create the skip list for properties */
+    if((pclass->props=H5SL_create(H5SL_TYPE_STR,0.5,H5P_DEFAULT_SKIPLIST_HEIGHT))==NULL)
+        HGOTO_ERROR(H5E_PLIST,H5E_CANTCREATE,NULL,"can't create skip list for properties");
+
+    /* Set callback functions and pass-along data */
+    pclass->create_func = cls_create;
+    pclass->create_data = create_data;
+    pclass->copy_func = cls_copy;
+    pclass->copy_data = copy_data;
+    pclass->close_func = cls_close;
+    pclass->close_data = close_data;
+
+    /* Increment parent class's derived class value */
+    if(par_class!=NULL) {
+        if(H5P_access_class(par_class,H5P_MOD_INC_CLS)<0)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, NULL,"Can't increment parent class ref count");
+    } /* end if */
+
+    /* Set return value */
+    ret_value=pclass;
+
+done:
+    /* Free any resources allocated */
+    if(ret_value==NULL) {
+        if(pclass!=NULL)
+            H5FL_FREE(H5P_genclass_t,pclass);
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_create_class() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pcreate_class
+ PURPOSE
+    Create a new property list class.
+ USAGE
+    hid_t H5Pcreate_class(parent, name, cls_create, create_data,
+                cls_close, close_data)
+        hid_t parent;       IN: Property list class ID of parent class
+        const char *name;   IN: Name of class we are creating
+        H5P_cls_create_func_t cls_create;   IN: The callback function to call
+                                    when each property list in this class is
+                                    created.
+        void *create_data;  IN: Pointer to user data to pass along to class
+                                    creation callback.
+        H5P_cls_copy_func_t cls_copy;   IN: The callback function to call
+                                    when each property list in this class is
+                                    copied.
+        void *copy_data;  IN: Pointer to user data to pass along to class
+                                    copy callback.
+        H5P_cls_close_func_t cls_close;     IN: The callback function to call
+                                    when each property list in this class is
+                                    closed.
+        void *close_data;   IN: Pointer to user data to pass along to class
+                                    close callback.
+ RETURNS
+    Returns a valid property list class ID on success, NULL on failure.
+ DESCRIPTION
+    Allocates memory and attaches a class to the property list class hierarchy.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hid_t
+H5Pcreate_class(hid_t parent, const char *name,
+    H5P_cls_create_func_t cls_create, void *create_data,
+    H5P_cls_copy_func_t cls_copy, void *copy_data,
+    H5P_cls_close_func_t cls_close, void *close_data
+    )
+{
+    H5P_genclass_t	*par_class = NULL;  /* Pointer to the parent class */
+    H5P_genclass_t	*pclass = NULL;     /* Property list class created */
+    hid_t	ret_value;                  /* Return value		   */
+
+    FUNC_ENTER_API(H5Pcreate_class, FAIL);
+    H5TRACE8("i","isxxxxxx",parent,name,cls_create,create_data,cls_copy,
+             copy_data,cls_close,close_data);
+
+    /* Check arguments. */
+    if (H5P_DEFAULT!=parent && (H5I_GENPROP_CLS!=H5I_get_type(parent)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list class");
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid class name");
+    if ((create_data!=NULL && cls_create==NULL)
+            || (copy_data!=NULL && cls_copy==NULL)
+            || (close_data!=NULL && cls_close==NULL))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "data specified, but no callback provided");
+
+    /* Get the pointer to the parent class */
+    if(parent==H5P_DEFAULT)
+        par_class=NULL;
+    else if (NULL == (par_class = H5I_object(parent)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't retrieve parent class");
+
+    /* Create the new property list class */
+    if (NULL==(pclass=H5P_create_class(par_class, name, 0, cls_create, create_data, cls_copy, copy_data, cls_close, close_data)))
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTCREATE, FAIL, "unable to create property list class");
+
+    /* Get an atom for the class */
+    if ((ret_value = H5I_register(H5I_GENPROP_CLS, pclass))<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to atomize property list class");
+
+done:
+    if (ret_value<0 && pclass)
+        H5P_close_class(pclass);
+
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pcreate_class() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_create
+ PURPOSE
+    Internal routine to create a new property list of a property list class.
+ USAGE
+    H5P_genplist_t *H5P_create(class)
+        H5P_genclass_t *class;  IN: Property list class create list from
+ RETURNS
+    Returns a pointer to the newly created property list on success,
+        NULL on failure.
+ DESCRIPTION
+        Creates a property list of a given class.  If a 'create' callback
+    exists for the property list class, it is called before the
+    property list is passed back to the user.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+        If this routine is called from a library routine other than
+    H5P_c, the calling routine is responsible for getting an ID for
+    the property list and calling the class 'create' callback (if one exists)
+    and also setting the "class_init" flag.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5P_genplist_t *
+H5P_create(H5P_genclass_t *pclass)
+{
+    H5P_genclass_t *tclass;         /* Temporary class pointer */
+    H5P_genplist_t *plist=NULL;     /* New property list created */
+    H5P_genprop_t *tmp;             /* Temporary pointer to parent class properties */
+    H5SL_t *seen=NULL;              /* Skip list to hold names of properties already seen */
+    H5P_genplist_t *ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_create);
+
+    assert(pclass);
+
+    /*
+     * Create new property list object
+     */
+
+    /* Allocate room for the property list */
+    if (NULL==(plist = H5FL_CALLOC(H5P_genplist_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL,"memory allocation failed");
+
+    /* Set class state */
+    plist->pclass = pclass;
+    plist->nprops = 0;      /* Initially the plist has the same number of properties as the class */
+    plist->class_init = 0;  /* Initially, wait until the class callback finishes to set */
+
+    /* Create the skip list for changed properties */
+    if((plist->props=H5SL_create(H5SL_TYPE_STR,0.5,H5P_DEFAULT_SKIPLIST_HEIGHT))==NULL)
+        HGOTO_ERROR(H5E_PLIST,H5E_CANTCREATE,NULL,"can't create skip list for changed properties");
+
+    /* Create the skip list for deleted properties */
+    if((plist->del=H5SL_create(H5SL_TYPE_STR,0.5,H5P_DEFAULT_SKIPLIST_HEIGHT))==NULL)
+        HGOTO_ERROR(H5E_PLIST,H5E_CANTCREATE,NULL,"can't create skip list for deleted properties");
+
+    /* Create the skip list to hold names of properties already seen
+     * (This prevents a property in the class hierarchy from having it's
+     * 'create' callback called, if a property in the class hierarchy has
+     * already been seen)
+     */
+    if((seen=H5SL_create(H5SL_TYPE_STR,0.5,H5P_DEFAULT_SKIPLIST_HEIGHT))==NULL)
+        HGOTO_ERROR(H5E_PLIST,H5E_CANTCREATE,NULL,"can't create skip list for seen properties");
+
+    /*
+     * Check if we should copy class properties (up through list of parent classes also),
+     * initialize each with default value & make property 'create' callback.
+     */
+    tclass=pclass;
+    while(tclass!=NULL) {
+        if(tclass->nprops>0) {
+            H5SL_node_t *curr_node;   /* Current node in skip list */
+
+            /* Walk through the properties in the old class */
+            curr_node=H5SL_first(tclass->props);
+            while(curr_node!=NULL) {
+                /* Get pointer to property from node */
+                tmp=H5SL_item(curr_node);
+
+                /* Only "create" properties we haven't seen before */
+                if(H5SL_search(seen,tmp->name)==NULL) {
+                    /* Call property creation callback, if it exists */
+                    if(tmp->create) {
+                        /* Call the callback & insert changed value into skip list (if necessary) */
+                        if(H5P_do_prop_cb1(plist->props,tmp,tmp->create)<0)
+                            HGOTO_ERROR (H5E_PLIST, H5E_CANTCOPY, NULL,"Can't create property");
+                    } /* end if */
+
+                    /* Add property name to "seen" list */
+                    if(H5SL_insert(seen,tmp->name,tmp->name)<0)
+                        HGOTO_ERROR(H5E_PLIST,H5E_CANTINSERT,NULL,"can't insert property into seen skip list");
+
+                    /* Increment the number of properties in list */
+                    plist->nprops++;
+                } /* end if */
+
+                /* Get the next property node in the skip list */
+                curr_node=H5SL_next(curr_node);
+            } /* end while */
+        } /* end if */
+
+        /* Go up to parent class */
+        tclass=tclass->parent;
+    } /* end while */
+
+    /* Increment the number of property lists derived from class */
+    if(H5P_access_class(plist->pclass,H5P_MOD_INC_LST)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, NULL,"Can't increment class ref count");
+
+    /* Set return value */
+    ret_value=plist;
+
+done:
+    /* Release the skip list of 'seen' properties */
+    if(seen!=NULL)
+        H5SL_close(seen);
+
+    /* Release resources allocated on failure */
+    if(ret_value==NULL) {
+        if(plist!=NULL) {
+            /* Close & free any changed properties */
+            if(plist->props) {
+                unsigned make_cb=1;
+
+                H5SL_destroy(plist->props,H5P_free_prop_cb,&make_cb);
+            } /* end if */
+
+            /* Close the deleted property skip list */
+            if(plist->del)
+                H5SL_close(plist->del);
+
+            /* Release the property list itself */
+            H5FL_FREE(H5P_genplist_t,plist);
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_create() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_create_id
+ PURPOSE
+    Internal routine to create a new property list of a property list class.
+ USAGE
+    hid_t H5P_create_id(pclass)
+        H5P_genclass_t *pclass;       IN: Property list class create list from
+ RETURNS
+    Returns a valid property list ID on success, FAIL on failure.
+ DESCRIPTION
+        Creates a property list of a given class.  If a 'create' callback
+    exists for the property list class, it is called before the
+    property list is passed back to the user.  If 'create' callbacks exist for
+    any individual properties in the property list, they are called before the
+    class 'create' callback.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hid_t
+H5P_create_id(H5P_genclass_t *pclass)
+{
+    H5P_genplist_t	*plist=NULL;    /* Property list created */
+    hid_t plist_id=FAIL;        /* Property list ID */
+    hid_t ret_value;            /* return value */
+
+    FUNC_ENTER_NOAPI(H5P_create_id, FAIL);
+
+    assert(pclass);
+
+    /* Create the new property list */
+    if ((plist=H5P_create(pclass))==NULL)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTCREATE, FAIL, "unable to create property list");
+
+    /* Get an atom for the property list */
+    if ((plist_id = H5I_register(H5I_GENPROP_LST, plist))<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to atomize property list");
+
+    /* Save the property list ID in the property list struct, for use in the property class's 'close' callback */
+    plist->plist_id=plist_id;
+
+    /* Call the class callback (if it exists) now that we have the property list ID */
+    if(plist->pclass->create_func!=NULL) {
+        if((plist->pclass->create_func)(plist_id,plist->pclass->create_data)<0) {
+            /* Delete ID, ignore return value */
+            H5I_remove(plist_id);
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, FAIL,"Can't initialize property");
+        } /* end if */
+    } /* end if */
+
+    /* Set the class initialization flag */
+    plist->class_init=1;
+
+    /* Set the return value */
+    ret_value=plist_id;
+
+done:
+    if (ret_value<0 && plist)
+        H5P_close(plist);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_create_id() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pcreate
+ PURPOSE
+    Routine to create a new property list of a property list class.
+ USAGE
+    hid_t H5Pcreate(cls_id)
+        hid_t cls_id;       IN: Property list class create list from
+ RETURNS
+    Returns a valid property list ID on success, FAIL on failure.
+ DESCRIPTION
+        Creates a property list of a given class.  If a 'create' callback
+    exists for the property list class, it is called before the
+    property list is passed back to the user.  If 'create' callbacks exist for
+    any individual properties in the property list, they are called before the
+    class 'create' callback.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hid_t
+H5Pcreate(hid_t cls_id)
+{
+    H5P_genclass_t	*pclass;   /* Property list class to modify */
+    hid_t ret_value;               /* return value */
+
+    FUNC_ENTER_API(H5Pcreate, FAIL);
+    H5TRACE1("i","i",cls_id);
+
+    /* Check arguments. */
+    if (NULL == (pclass = H5I_object_verify(cls_id, H5I_GENPROP_CLS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list class");
+
+    /* Create the new property list */
+    if((ret_value=H5P_create_id(pclass))<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTCREATE, FAIL, "unable to create property list");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pcreate() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_register
+ PURPOSE
+    Internal routine to register a new property in a property list class.
+ USAGE
+    herr_t H5P_register(class, name, size, default, prp_create, prp_set, prp_get, prp_close)
+        H5P_genclass_t *class;  IN: Property list class to close
+        const char *name;       IN: Name of property to register
+        size_t size;            IN: Size of property in bytes
+        void *def_value;        IN: Pointer to buffer containing default value
+                                    for property in newly created property lists
+        H5P_prp_create_func_t prp_create;   IN: Function pointer to property
+                                    creation callback
+        H5P_prp_set_func_t prp_set; IN: Function pointer to property set callback
+        H5P_prp_get_func_t prp_get; IN: Function pointer to property get callback
+        H5P_prp_delete_func_t prp_delete; IN: Function pointer to property delete callback
+        H5P_prp_copy_func_t prp_copy; IN: Function pointer to property copy callback
+        H5P_prp_compare_func_t prp_cmp; IN: Function pointer to property compare callback
+        H5P_prp_close_func_t prp_close; IN: Function pointer to property close
+                                    callback
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Registers a new property with a property list class.  The property will
+    exist in all property list objects of that class after this routine is
+    finished.  The name of the property must not already exist.  The default
+    property value must be provided and all new property lists created with this
+    property will have the property value set to the default provided.  Any of
+    the callback routines may be set to NULL if they are not needed.
+
+        Zero-sized properties are allowed and do not store any data in the
+    property list.  These may be used as flags to indicate the presence or
+    absence of a particular piece of information.  The 'default' pointer for a
+    zero-sized property may be set to NULL.  The property 'create' & 'close'
+    callbacks are called for zero-sized properties, but the 'set' and 'get'
+    callbacks are never called.
+
+        The 'create' callback is called when a new property list with this
+    property is being created.  H5P_prp_create_func_t is defined as:
+        typedef herr_t (*H5P_prp_create_func_t)(hid_t prop_id, const char *name,
+                size_t size, void *initial_value);
+    where the parameters to the callback function are:
+        hid_t prop_id;      IN: The ID of the property list being created.
+        const char *name;   IN: The name of the property being modified.
+        size_t size;        IN: The size of the property value
+        void *initial_value; IN/OUT: The initial value for the property being created.
+                                (The 'default' value passed to H5Pregister)
+    The 'create' routine may modify the value to be set and those changes will
+    be stored as the initial value of the property.  If the 'create' routine
+    returns a negative value, the new property value is not copied into the
+    property and the property list creation routine returns an error value.
+
+        The 'set' callback is called before a new value is copied into the
+    property.  H5P_prp_set_func_t is defined as:
+        typedef herr_t (*H5P_prp_set_func_t)(hid_t prop_id, const char *name,
+            size_t size, void *value);
+    where the parameters to the callback function are:
+        hid_t prop_id;      IN: The ID of the property list being modified.
+        const char *name;   IN: The name of the property being modified.
+        size_t size;        IN: The size of the property value
+        void *new_value;    IN/OUT: The value being set for the property.
+    The 'set' routine may modify the value to be set and those changes will be
+    stored as the value of the property.  If the 'set' routine returns a
+    negative value, the new property value is not copied into the property and
+    the property list set routine returns an error value.
+
+        The 'get' callback is called before a value is retrieved from the
+    property.  H5P_prp_get_func_t is defined as:
+        typedef herr_t (*H5P_prp_get_func_t)(hid_t prop_id, const char *name,
+            size_t size, void *value);
+    where the parameters to the callback function are:
+        hid_t prop_id;      IN: The ID of the property list being queried.
+        const char *name;   IN: The name of the property being queried.
+        size_t size;        IN: The size of the property value
+        void *value;        IN/OUT: The value being retrieved for the property.
+    The 'get' routine may modify the value to be retrieved and those changes
+    will be returned to the calling function.  If the 'get' routine returns a
+    negative value, the property value is returned and the property list get
+    routine returns an error value.
+
+        The 'delete' callback is called when a property is deleted from a
+    property list.  H5P_prp_del_func_t is defined as:
+        typedef herr_t (*H5P_prp_del_func_t)(hid_t prop_id, const char *name,
+            size_t size, void *value);
+    where the parameters to the callback function are:
+        hid_t prop_id;      IN: The ID of the property list the property is deleted from.
+        const char *name;   IN: The name of the property being deleted.
+        size_t size;        IN: The size of the property value
+        void *value;        IN/OUT: The value of the property being deleted.
+    The 'delete' routine may modify the value passed in, but the value is not
+    used by the library when the 'delete' routine returns.  If the
+    'delete' routine returns a negative value, the property list deletion
+    routine returns an error value but the property is still deleted.
+
+        The 'copy' callback is called when a property list with this
+    property is copied.  H5P_prp_copy_func_t is defined as:
+        typedef herr_t (*H5P_prp_copy_func_t)(const char *name, size_t size,
+            void *value);
+    where the parameters to the callback function are:
+        const char *name;   IN: The name of the property being copied.
+        size_t size;        IN: The size of the property value
+        void *value;        IN: The value of the property being copied.
+    The 'copy' routine may modify the value to be copied and those changes will be
+    stored as the value of the property.  If the 'copy' routine returns a
+    negative value, the new property value is not copied into the property and
+    the property list copy routine returns an error value.
+
+        The 'compare' callback is called when a property list with this
+    property is compared to another property list.  H5P_prp_compare_func_t is
+    defined as:
+        typedef int (*H5P_prp_compare_func_t)( void *value1, void *value2,
+            size_t size);
+    where the parameters to the callback function are:
+        const void *value1; IN: The value of the first property being compared.
+        const void *value2; IN: The value of the second property being compared.
+        size_t size;        IN: The size of the property value
+    The 'compare' routine may not modify the values to be compared.  The
+    'compare' routine should return a positive value if VALUE1 is greater than
+    VALUE2, a negative value if VALUE2 is greater than VALUE1 and zero if VALUE1
+    and VALUE2 are equal.
+
+        The 'close' callback is called when a property list with this
+    property is being destroyed.  H5P_prp_close_func_t is defined as:
+        typedef herr_t (*H5P_prp_close_func_t)(const char *name, size_t size,
+            void *value);
+    where the parameters to the callback function are:
+        const char *name;   IN: The name of the property being closed.
+        size_t size;        IN: The size of the property value
+        void *value;        IN: The value of the property being closed.
+    The 'close' routine may modify the value passed in, but the value is not
+    used by the library when the 'close' routine returns.  If the
+    'close' routine returns a negative value, the property list close
+    routine returns an error value but the property list is still closed.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+        The 'set' callback function may be useful to range check the value being
+    set for the property or may perform some tranformation/translation of the
+    value set.  The 'get' callback would then [probably] reverse the
+    transformation, etc.  A single 'get' or 'set' callback could handle
+    multiple properties by performing different actions based on the property
+    name or other properties in the property list.
+
+        I would like to say "the property list is not closed" when a 'close'
+    routine fails, but I don't think that's possible due to other properties in
+    the list being successfully closed & removed from the property list.  I
+    suppose that it would be possible to just remove the properties which have
+    successful 'close' callbacks, but I'm not happy with the ramifications
+    of a mangled, un-closable property list hanging around...  Any comments? -QAK
+
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5P_register(H5P_genclass_t *pclass, const char *name, size_t size,
+    void *def_value, H5P_prp_create_func_t prp_create, H5P_prp_set_func_t prp_set,
+    H5P_prp_get_func_t prp_get, H5P_prp_delete_func_t prp_delete,
+    H5P_prp_copy_func_t prp_copy, H5P_prp_compare_func_t prp_cmp,
+    H5P_prp_close_func_t prp_close)
+{
+    H5P_genclass_t *new_class; /* New class pointer */
+    H5P_genprop_t *new_prop=NULL;   /* Temporary property pointer */
+    H5P_genprop_t *pcopy;      /* Property copy */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5P_register, FAIL);
+
+    assert(pclass);
+    assert(name);
+    assert((size>0 && def_value!=NULL) || (size==0));
+
+    /* Check for duplicate named properties */
+    if(H5SL_search(pclass->props,name)!=NULL)
+        HGOTO_ERROR(H5E_PLIST, H5E_EXISTS, FAIL, "property already exists");
+
+    /* Check if class needs to be split because property lists or classes have
+     *  been created since the last modification was made to the class.
+     */
+    if(pclass->plists>0 || pclass->classes>0) {
+        if((new_class=H5P_create_class(pclass->parent,pclass->name,
+                pclass->internal,pclass->create_func,pclass->create_data,
+                pclass->copy_func,pclass->copy_data,
+                pclass->close_func,pclass->close_data))==NULL)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTCOPY, FAIL, "can't copy class");
+
+        /* Walk through the skip list of the old class and copy properties */
+        if(pclass->nprops>0) {
+            H5SL_node_t *curr_node;   /* Current node in skip list */
+
+            /* Walk through the properties in the old class */
+            curr_node=H5SL_first(pclass->props);
+            while(curr_node!=NULL) {
+                /* Make a copy of the class's property */
+                if((pcopy=H5P_dup_prop(H5SL_item(curr_node),H5P_PROP_WITHIN_CLASS))==NULL)
+                    HGOTO_ERROR (H5E_PLIST, H5E_CANTCOPY, FAIL,"Can't copy property");
+
+                /* Insert the initialized property into the property list */
+                if(H5P_add_prop(new_class->props,pcopy)<0)
+                    HGOTO_ERROR (H5E_PLIST, H5E_CANTINSERT, FAIL,"Can't insert property into class");
+
+                /* Increment property count for class */
+                new_class->nprops++;
+
+                /* Get the next property node in the skip list */
+                curr_node=H5SL_next(curr_node);
+            } /* end while */
+        } /* end if */
+
+        /* Use the new class instead of the old one */
+        pclass=new_class;
+    } /* end if */
+
+    /* Create property object from parameters */
+    if((new_prop=H5P_create_prop(name,size,H5P_PROP_WITHIN_CLASS,def_value,prp_create,prp_set,prp_get,prp_delete,prp_copy,prp_cmp,prp_close))==NULL)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTCREATE, FAIL,"Can't create property");
+
+    /* Insert property into property list class */
+    if(H5P_add_prop(pclass->props,new_prop)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTINSERT, FAIL,"Can't insert property into class");
+
+    /* Increment property count for class */
+    pclass->nprops++;
+
+    /* Update the revision for the class */
+    pclass->revision = H5P_GET_NEXT_REV;
+
+done:
+    if(ret_value==FAIL) {
+        if(new_prop!=NULL) {
+            if(new_prop->name!=NULL)
+                H5MM_xfree(new_prop->name);
+            if(new_prop->value!=NULL)
+                H5MM_xfree(new_prop->value);
+            H5FL_FREE(H5P_genprop_t,new_prop);
+        } /* end if */
+    }  /* end if */
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_register() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pregister
+ PURPOSE
+    Routine to register a new property in a property list class.
+ USAGE
+    herr_t H5Pregister(class, name, size, default, prp_create, prp_set, prp_get, prp_close)
+        hid_t class;            IN: Property list class to close
+        const char *name;       IN: Name of property to register
+        size_t size;            IN: Size of property in bytes
+        void *def_value;        IN: Pointer to buffer containing default value
+                                    for property in newly created property lists
+        H5P_prp_create_func_t prp_create;   IN: Function pointer to property
+                                    creation callback
+        H5P_prp_set_func_t prp_set; IN: Function pointer to property set callback
+        H5P_prp_get_func_t prp_get; IN: Function pointer to property get callback
+        H5P_prp_delete_func_t prp_delete; IN: Function pointer to property delete callback
+        H5P_prp_copy_func_t prp_copy; IN: Function pointer to property copy callback
+        H5P_prp_close_func_t prp_close; IN: Function pointer to property close
+                                    callback
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Registers a new property with a property list class.  The property will
+    exist in all property list objects of that class after this routine is
+    finished.  The name of the property must not already exist.  The default
+    property value must be provided and all new property lists created with this
+    property will have the property value set to the default provided.  Any of
+    the callback routines may be set to NULL if they are not needed.
+
+        Zero-sized properties are allowed and do not store any data in the
+    property list.  These may be used as flags to indicate the presence or
+    absence of a particular piece of information.  The 'default' pointer for a
+    zero-sized property may be set to NULL.  The property 'create' & 'close'
+    callbacks are called for zero-sized properties, but the 'set' and 'get'
+    callbacks are never called.
+
+        The 'create' callback is called when a new property list with this
+    property is being created.  H5P_prp_create_func_t is defined as:
+        typedef herr_t (*H5P_prp_create_func_t)(hid_t prop_id, const char *name,
+                size_t size, void *initial_value);
+    where the parameters to the callback function are:
+        hid_t prop_id;      IN: The ID of the property list being created.
+        const char *name;   IN: The name of the property being modified.
+        size_t size;        IN: The size of the property value
+        void *initial_value; IN/OUT: The initial value for the property being created.
+                                (The 'default' value passed to H5Pregister)
+    The 'create' routine may modify the value to be set and those changes will
+    be stored as the initial value of the property.  If the 'create' routine
+    returns a negative value, the new property value is not copied into the
+    property and the property list creation routine returns an error value.
+
+        The 'set' callback is called before a new value is copied into the
+    property.  H5P_prp_set_func_t is defined as:
+        typedef herr_t (*H5P_prp_set_func_t)(hid_t prop_id, const char *name,
+            size_t size, void *value);
+    where the parameters to the callback function are:
+        hid_t prop_id;      IN: The ID of the property list being modified.
+        const char *name;   IN: The name of the property being modified.
+        size_t size;        IN: The size of the property value
+        void *new_value;    IN/OUT: The value being set for the property.
+    The 'set' routine may modify the value to be set and those changes will be
+    stored as the value of the property.  If the 'set' routine returns a
+    negative value, the new property value is not copied into the property and
+    the property list set routine returns an error value.
+
+        The 'get' callback is called before a value is retrieved from the
+    property.  H5P_prp_get_func_t is defined as:
+        typedef herr_t (*H5P_prp_get_func_t)(hid_t prop_id, const char *name,
+            size_t size, void *value);
+    where the parameters to the callback function are:
+        hid_t prop_id;      IN: The ID of the property list being queried.
+        const char *name;   IN: The name of the property being queried.
+        size_t size;        IN: The size of the property value
+        void *value;        IN/OUT: The value being retrieved for the property.
+    The 'get' routine may modify the value to be retrieved and those changes
+    will be returned to the calling function.  If the 'get' routine returns a
+    negative value, the property value is returned and the property list get
+    routine returns an error value.
+
+        The 'delete' callback is called when a property is deleted from a
+    property list.  H5P_prp_del_func_t is defined as:
+        typedef herr_t (*H5P_prp_del_func_t)(hid_t prop_id, const char *name,
+            size_t size, void *value);
+    where the parameters to the callback function are:
+        hid_t prop_id;      IN: The ID of the property list the property is deleted from.
+        const char *name;   IN: The name of the property being deleted.
+        size_t size;        IN: The size of the property value
+        void *value;        IN/OUT: The value of the property being deleted.
+    The 'delete' routine may modify the value passed in, but the value is not
+    used by the library when the 'delete' routine returns.  If the
+    'delete' routine returns a negative value, the property list deletion
+    routine returns an error value but the property is still deleted.
+
+        The 'copy' callback is called when a property list with this
+    property is copied.  H5P_prp_copy_func_t is defined as:
+        typedef herr_t (*H5P_prp_copy_func_t)(const char *name, size_t size,
+            void *value);
+    where the parameters to the callback function are:
+        const char *name;   IN: The name of the property being copied.
+        size_t size;        IN: The size of the property value
+        void *value;        IN: The value of the property being copied.
+    The 'copy' routine may modify the value to be copied and those changes will be
+    stored as the value of the property.  If the 'copy' routine returns a
+    negative value, the new property value is not copied into the property and
+    the property list copy routine returns an error value.
+
+        The 'close' callback is called when a property list with this
+    property is being destroyed.  H5P_prp_close_func_t is defined as:
+        typedef herr_t (*H5P_prp_close_func_t)(const char *name, size_t size,
+            void *value);
+    where the parameters to the callback function are:
+        const char *name;   IN: The name of the property being closed.
+        size_t size;        IN: The size of the property value
+        void *value;        IN: The value of the property being closed.
+    The 'close' routine may modify the value passed in, but the value is not
+    used by the library when the 'close' routine returns.  If the
+    'close' routine returns a negative value, the property list close
+    routine returns an error value but the property list is still closed.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+        The 'set' callback function may be useful to range check the value being
+    set for the property or may perform some tranformation/translation of the
+    value set.  The 'get' callback would then [probably] reverse the
+    transformation, etc.  A single 'get' or 'set' callback could handle
+    multiple properties by performing different actions based on the property
+    name or other properties in the property list.
+
+        I would like to say "the property list is not closed" when a 'close'
+    routine fails, but I don't think that's possible due to other properties in
+    the list being successfully closed & removed from the property list.  I
+    suppose that it would be possible to just remove the properties which have
+    successful 'close' callbacks, but I'm not happy with the ramifications
+    of a mangled, un-closable property list hanging around...  Any comments? -QAK
+
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Pregister(hid_t cls_id, const char *name, size_t size, void *def_value,
+    H5P_prp_create_func_t prp_create, H5P_prp_set_func_t prp_set,
+    H5P_prp_get_func_t prp_get, H5P_prp_delete_func_t prp_delete,
+    H5P_prp_copy_func_t prp_copy, H5P_prp_close_func_t prp_close)
+{
+    H5P_genclass_t	*pclass;   /* Property list class to modify */
+    herr_t ret_value;     /* return value */
+
+    FUNC_ENTER_API(H5Pregister, FAIL);
+    H5TRACE10("e","iszxxxxxxx",cls_id,name,size,def_value,prp_create,prp_set,
+             prp_get,prp_delete,prp_copy,prp_close);
+
+    /* Check arguments. */
+    if (NULL == (pclass = H5I_object_verify(cls_id, H5I_GENPROP_CLS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list class");
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid class name");
+    if (size>0 && def_value==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "properties >0 size must have default");
+
+    /* Create the new property list class */
+    if ((ret_value=H5P_register(pclass,name,size,def_value,prp_create,prp_set,prp_get,prp_delete,prp_copy,NULL,prp_close))<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to register property in class");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pregister() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_insert
+ PURPOSE
+    Internal routine to insert a new property in a property list.
+ USAGE
+    herr_t H5P_insert(plist, name, size, value, prp_set, prp_get, prp_close)
+        H5P_genplist_t *plist;  IN: Property list to add property to
+        const char *name;       IN: Name of property to add
+        size_t size;            IN: Size of property in bytes
+        void *value;            IN: Pointer to the value for the property
+        H5P_prp_set_func_t prp_set; IN: Function pointer to property set callback
+        H5P_prp_get_func_t prp_get; IN: Function pointer to property get callback
+        H5P_prp_delete_func_t prp_delete; IN: Function pointer to property delete callback
+        H5P_prp_copy_func_t prp_copy; IN: Function pointer to property copy callback
+        H5P_prp_compare_func_t prp_cmp; IN: Function pointer to property compare callback
+        H5P_prp_close_func_t prp_close; IN: Function pointer to property close
+                                    callback
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Inserts a temporary property into a property list.  The property will
+    exist only in this property list object.  The name of the property must not
+    already exist.  The value must be provided unless the property is zero-
+    sized.  Any of the callback routines may be set to NULL if they are not
+    needed.
+
+        Zero-sized properties are allowed and do not store any data in the
+    property list.  These may be used as flags to indicate the presence or
+    absence of a particular piece of information.  The 'value' pointer for a
+    zero-sized property may be set to NULL.  The property 'close' callback is
+    called for zero-sized properties, but the 'set' and 'get' callbacks are
+    never called.
+
+        The 'set' callback is called before a new value is copied into the
+    property.  H5P_prp_set_func_t is defined as:
+        typedef herr_t (*H5P_prp_set_func_t)(hid_t prop_id, const char *name,
+            size_t size, void *value);
+    where the parameters to the callback function are:
+        hid_t prop_id;      IN: The ID of the property list being modified.
+        const char *name;   IN: The name of the property being modified.
+        size_t size;        IN: The size of the property value
+        void *new_value;    IN/OUT: The value being set for the property.
+    The 'set' routine may modify the value to be set and those changes will be
+    stored as the value of the property.  If the 'set' routine returns a
+    negative value, the new property value is not copied into the property and
+    the property list set routine returns an error value.
+
+        The 'get' callback is called before a value is retrieved from the
+    property.  H5P_prp_get_func_t is defined as:
+        typedef herr_t (*H5P_prp_get_func_t)(hid_t prop_id, const char *name,
+            size_t size, void *value);
+    where the parameters to the callback function are:
+        hid_t prop_id;      IN: The ID of the property list being queried.
+        const char *name;   IN: The name of the property being queried.
+        size_t size;        IN: The size of the property value
+        void *value;        IN/OUT: The value being retrieved for the property.
+    The 'get' routine may modify the value to be retrieved and those changes
+    will be returned to the calling function.  If the 'get' routine returns a
+    negative value, the property value is returned and the property list get
+    routine returns an error value.
+
+        The 'delete' callback is called when a property is deleted from a
+    property list.  H5P_prp_del_func_t is defined as:
+        typedef herr_t (*H5P_prp_del_func_t)(hid_t prop_id, const char *name,
+            size_t size, void *value);
+    where the parameters to the callback function are:
+        hid_t prop_id;      IN: The ID of the property list the property is deleted from.
+        const char *name;   IN: The name of the property being deleted.
+        size_t size;        IN: The size of the property value
+        void *value;        IN/OUT: The value of the property being deleted.
+    The 'delete' routine may modify the value passed in, but the value is not
+    used by the library when the 'delete' routine returns.  If the
+    'delete' routine returns a negative value, the property list deletion
+    routine returns an error value but the property is still deleted.
+
+        The 'copy' callback is called when a property list with this
+    property is copied.  H5P_prp_copy_func_t is defined as:
+        typedef herr_t (*H5P_prp_copy_func_t)(const char *name, size_t size,
+            void *value);
+    where the parameters to the callback function are:
+        const char *name;   IN: The name of the property being copied.
+        size_t size;        IN: The size of the property value
+        void *value;        IN: The value of the property being copied.
+    The 'copy' routine may modify the value to be copied and those changes will be
+    stored as the value of the property.  If the 'copy' routine returns a
+    negative value, the new property value is not copied into the property and
+    the property list copy routine returns an error value.
+
+        The 'compare' callback is called when a property list with this
+    property is compared to another property list.  H5P_prp_compare_func_t is
+    defined as:
+        typedef int (*H5P_prp_compare_func_t)( void *value1, void *value2,
+            size_t size);
+    where the parameters to the callback function are:
+        const void *value1; IN: The value of the first property being compared.
+        const void *value2; IN: The value of the second property being compared.
+        size_t size;        IN: The size of the property value
+    The 'compare' routine may not modify the values to be compared.  The
+    'compare' routine should return a positive value if VALUE1 is greater than
+    VALUE2, a negative value if VALUE2 is greater than VALUE1 and zero if VALUE1
+    and VALUE2 are equal.
+
+        The 'close' callback is called when a property list with this
+    property is being destroyed.  H5P_prp_close_func_t is defined as:
+        typedef herr_t (*H5P_prp_close_func_t)(const char *name, size_t size,
+            void *value);
+    where the parameters to the callback function are:
+        const char *name;   IN: The name of the property being closed.
+        size_t size;        IN: The size of the property value
+        void *value;        IN: The value of the property being closed.
+    The 'close' routine may modify the value passed in, but the value is not
+    used by the library when the 'close' routine returns.  If the
+    'close' routine returns a negative value, the property list close
+    routine returns an error value but the property list is still closed.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+        The 'set' callback function may be useful to range check the value being
+    set for the property or may perform some tranformation/translation of the
+    value set.  The 'get' callback would then [probably] reverse the
+    transformation, etc.  A single 'get' or 'set' callback could handle
+    multiple properties by performing different actions based on the property
+    name or other properties in the property list.
+
+        There is no 'create' callback routine for temporary property list
+    objects, the initial value is assumed to have any necessary setup already
+    performed on it.
+
+        I would like to say "the property list is not closed" when a 'close'
+    routine fails, but I don't think that's possible due to other properties in
+    the list being successfully closed & removed from the property list.  I
+    suppose that it would be possible to just remove the properties which have
+    successful 'close' callbacks, but I'm not happy with the ramifications
+    of a mangled, un-closable property list hanging around...  Any comments? -QAK
+
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5P_insert(H5P_genplist_t *plist, const char *name, size_t size,
+    void *value, H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
+    H5P_prp_delete_func_t prp_delete, H5P_prp_copy_func_t prp_copy,
+    H5P_prp_compare_func_t prp_cmp, H5P_prp_close_func_t prp_close)
+{
+    H5P_genprop_t *new_prop=NULL;       /* Temporary property pointer */
+    herr_t ret_value=SUCCEED;           /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_insert);
+
+    assert(plist);
+    assert(name);
+    assert((size>0 && value!=NULL) || (size==0));
+
+    /* Check for duplicate named properties */
+    if(H5SL_search(plist->props,name)!=NULL)
+        HGOTO_ERROR(H5E_PLIST, H5E_EXISTS, FAIL, "property already exists");
+
+    /* Check if the property has been deleted */
+    if(H5SL_search(plist->del,name)!=NULL) {
+        /* Remove the property name from the deleted property skip list */
+        if(H5SL_remove(plist->del,name)==NULL)
+            HGOTO_ERROR(H5E_PLIST,H5E_CANTDELETE,FAIL,"can't remove property from deleted skip list");
+
+        /* Fall through to add property to list */
+    } /* end if */
+    else {
+        H5P_genclass_t *tclass;     /* Temporary class pointer */
+
+        /* Check if the property is already in the class hierarchy */
+        tclass=plist->pclass;
+        while(tclass!=NULL) {
+            if(tclass->nprops>0) {
+                /* Find the property in the class */
+                if(H5SL_search(tclass->props,name)!=NULL)
+                    HGOTO_ERROR(H5E_PLIST, H5E_EXISTS, FAIL, "property already exists");
+            } /* end if */
+
+            /* Go up to parent class */
+            tclass=tclass->parent;
+        } /* end while */
+
+        /* Fall through to add property to list */
+    } /* end else */
+
+    /* Ok to add to property list */
+
+    /* Create property object from parameters */
+    if((new_prop=H5P_create_prop(name,size,H5P_PROP_WITHIN_LIST,value,NULL,prp_set,prp_get,prp_delete,prp_copy,prp_cmp,prp_close))==NULL)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTCREATE, FAIL,"Can't create property");
+
+    /* Insert property into property list class */
+    if(H5P_add_prop(plist->props,new_prop)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTINSERT, FAIL,"Can't insert property into class");
+
+    /* Increment property count for class */
+    plist->nprops++;
+
+done:
+    if(ret_value==FAIL) {
+        if(new_prop!=NULL) {
+            if(new_prop->name!=NULL)
+                H5MM_xfree(new_prop->name);
+            if(new_prop->value!=NULL)
+                H5MM_xfree(new_prop->value);
+            H5FL_FREE(H5P_genprop_t,new_prop);
+        } /* end if */
+    }  /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_insert() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pinsert
+ PURPOSE
+    Routine to insert a new property in a property list.
+ USAGE
+    herr_t H5Pinsert(plist, name, size, value, prp_set, prp_get, prp_close)
+        hid_t plist;            IN: Property list to add property to
+        const char *name;       IN: Name of property to add
+        size_t size;            IN: Size of property in bytes
+        void *value;            IN: Pointer to the value for the property
+        H5P_prp_set_func_t prp_set; IN: Function pointer to property set callback
+        H5P_prp_get_func_t prp_get; IN: Function pointer to property get callback
+        H5P_prp_delete_func_t prp_delete; IN: Function pointer to property delete callback
+        H5P_prp_copy_func_t prp_copy; IN: Function pointer to property copy callback
+        H5P_prp_close_func_t prp_close; IN: Function pointer to property close
+                                    callback
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Inserts a temporary property into a property list.  The property will
+    exist only in this property list object.  The name of the property must not
+    already exist.  The value must be provided unless the property is zero-
+    sized.  Any of the callback routines may be set to NULL if they are not
+    needed.
+
+        Zero-sized properties are allowed and do not store any data in the
+    property list.  These may be used as flags to indicate the presence or
+    absence of a particular piece of information.  The 'value' pointer for a
+    zero-sized property may be set to NULL.  The property 'close' callback is
+    called for zero-sized properties, but the 'set' and 'get' callbacks are
+    never called.
+
+        The 'set' callback is called before a new value is copied into the
+    property.  H5P_prp_set_func_t is defined as:
+        typedef herr_t (*H5P_prp_set_func_t)(hid_t prop_id, const char *name,
+            size_t size, void *value);
+    where the parameters to the callback function are:
+        hid_t prop_id;      IN: The ID of the property list being modified.
+        const char *name;   IN: The name of the property being modified.
+        size_t size;        IN: The size of the property value
+        void *new_value;    IN/OUT: The value being set for the property.
+    The 'set' routine may modify the value to be set and those changes will be
+    stored as the value of the property.  If the 'set' routine returns a
+    negative value, the new property value is not copied into the property and
+    the property list set routine returns an error value.
+
+        The 'get' callback is called before a value is retrieved from the
+    property.  H5P_prp_get_func_t is defined as:
+        typedef herr_t (*H5P_prp_get_func_t)(hid_t prop_id, const char *name,
+            size_t size, void *value);
+    where the parameters to the callback function are:
+        hid_t prop_id;      IN: The ID of the property list being queried.
+        const char *name;   IN: The name of the property being queried.
+        size_t size;        IN: The size of the property value
+        void *value;        IN/OUT: The value being retrieved for the property.
+    The 'get' routine may modify the value to be retrieved and those changes
+    will be returned to the calling function.  If the 'get' routine returns a
+    negative value, the property value is returned and the property list get
+    routine returns an error value.
+
+        The 'delete' callback is called when a property is deleted from a
+    property list.  H5P_prp_del_func_t is defined as:
+        typedef herr_t (*H5P_prp_del_func_t)(hid_t prop_id, const char *name,
+            size_t size, void *value);
+    where the parameters to the callback function are:
+        hid_t prop_id;      IN: The ID of the property list the property is deleted from.
+        const char *name;   IN: The name of the property being deleted.
+        size_t size;        IN: The size of the property value
+        void *value;        IN/OUT: The value of the property being deleted.
+    The 'delete' routine may modify the value passed in, but the value is not
+    used by the library when the 'delete' routine returns.  If the
+    'delete' routine returns a negative value, the property list deletion
+    routine returns an error value but the property is still deleted.
+
+        The 'copy' callback is called when a property list with this
+    property is copied.  H5P_prp_copy_func_t is defined as:
+        typedef herr_t (*H5P_prp_copy_func_t)(const char *name, size_t size,
+            void *value);
+    where the parameters to the callback function are:
+        const char *name;   IN: The name of the property being copied.
+        size_t size;        IN: The size of the property value
+        void *value;        IN: The value of the property being copied.
+    The 'copy' routine may modify the value to be copied and those changes will be
+    stored as the value of the property.  If the 'copy' routine returns a
+    negative value, the new property value is not copied into the property and
+    the property list copy routine returns an error value.
+
+        The 'close' callback is called when a property list with this
+    property is being destroyed.  H5P_prp_close_func_t is defined as:
+        typedef herr_t (*H5P_prp_close_func_t)(const char *name, size_t size,
+            void *value);
+    where the parameters to the callback function are:
+        const char *name;   IN: The name of the property being closed.
+        size_t size;        IN: The size of the property value
+        void *value;        IN: The value of the property being closed.
+    The 'close' routine may modify the value passed in, but the value is not
+    used by the library when the 'close' routine returns.  If the
+    'close' routine returns a negative value, the property list close
+    routine returns an error value but the property list is still closed.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+        The 'set' callback function may be useful to range check the value being
+    set for the property or may perform some tranformation/translation of the
+    value set.  The 'get' callback would then [probably] reverse the
+    transformation, etc.  A single 'get' or 'set' callback could handle
+    multiple properties by performing different actions based on the property
+    name or other properties in the property list.
+
+        There is no 'create' callback routine for temporary property list
+    objects, the initial value is assumed to have any necessary setup already
+    performed on it.
+
+        I would like to say "the property list is not closed" when a 'close'
+    routine fails, but I don't think that's possible due to other properties in
+    the list being successfully closed & removed from the property list.  I
+    suppose that it would be possible to just remove the properties which have
+    successful 'close' callbacks, but I'm not happy with the ramifications
+    of a mangled, un-closable property list hanging around...  Any comments? -QAK
+
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Pinsert(hid_t plist_id, const char *name, size_t size, void *value,
+    H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
+    H5P_prp_delete_func_t prp_delete, H5P_prp_copy_func_t prp_copy,
+    H5P_prp_close_func_t prp_close)
+{
+    H5P_genplist_t	*plist;    /* Property list to modify */
+    herr_t ret_value;           /* return value */
+
+    FUNC_ENTER_API(H5Pinsert, FAIL);
+    H5TRACE9("e","iszxxxxxx",plist_id,name,size,value,prp_set,prp_get,
+             prp_delete,prp_copy,prp_close);
+
+    /* Check arguments. */
+    if (NULL == (plist = H5I_object_verify(plist_id, H5I_GENPROP_LST)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid property name");
+    if (size>0 && value==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "properties >0 size must have default");
+
+    /* Create the new property list class */
+    if ((ret_value=H5P_insert(plist,name,size,value,prp_set,prp_get,prp_delete,prp_copy,NULL,prp_close))<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to register property in plist");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pinsert() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_set
+ PURPOSE
+    Internal routine to set a property's value in a property list.
+ USAGE
+    herr_t H5P_set(plist, name, value)
+        H5P_genplist_t *plist;  IN: Property list to find property in
+        const char *name;       IN: Name of property to set
+        void *value;            IN: Pointer to the value for the property
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Sets a new value for a property in a property list.  The property name
+    must exist or this routine will fail.  If there is a 'set' callback routine
+    registered for this property, the 'value' will be passed to that routine and
+    any changes to the 'value' will be used when setting the property value.
+    The information pointed at by the 'value' pointer (possibly modified by the
+    'set' callback) is copied into the property list value and may be changed
+    by the application making the H5Pset call without affecting the property
+    value.
+
+        If the 'set' callback routine returns an error, the property value will
+    not be modified.  This routine may not be called for zero-sized properties
+    and will return an error in that case.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5P_set(H5P_genplist_t *plist, const char *name, const void *value)
+{
+    H5P_genclass_t *tclass;     /* Temporary class pointer */
+    H5P_genprop_t *prop;        /* Temporary property pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5P_set, FAIL);
+
+    assert(plist);
+    assert(name);
+    assert(value);
+
+    /* Check if the property has been deleted */
+    if(H5SL_search(plist->del,name)!=NULL)
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, FAIL, "property doesn't exist");
+
+    /* Find property in changed list */
+    if((prop=H5SL_search(plist->props,name))!=NULL) {
+        /* Check for property size >0 */
+        if(prop->size==0)
+            HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "property has zero size");
+
+        /* Make a copy of the value and pass to 'set' callback */
+        if(prop->set!=NULL) {
+            void *tmp_value;            /* Temporary value for property */
+
+            /* Make a copy of the current value, in case the callback fails */
+            if (NULL==(tmp_value=H5MM_malloc(prop->size)))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed temporary property value");
+            HDmemcpy(tmp_value,value,prop->size);
+
+            /* Call user's callback */
+            if((*(prop->set))(plist->plist_id,name,prop->size,tmp_value)<0) {
+                H5MM_xfree(tmp_value);
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't set property value");
+            } /* end if */
+
+            /* Copy new [possibly unchanged] value into property value */
+            HDmemcpy(prop->value,tmp_value,prop->size);
+
+            /* Free the temporary value buffer */
+            H5MM_xfree(tmp_value);
+        } /* end if */
+        /* No 'set' callback, just copy value */
+        else
+            HDmemcpy(prop->value,value,prop->size);
+    } /* end if */
+    else {
+        /*
+         * Check if we should set class properties (up through list of parent classes also),
+         * & make property 'set' callback.
+         */
+        tclass=plist->pclass;
+        while(tclass!=NULL) {
+            if(tclass->nprops>0) {
+                /* Find the property in the class */
+                if((prop=H5SL_search(tclass->props,name))!=NULL) {
+                    H5P_genprop_t *pcopy;  /* Copy of property to insert into skip list */
+
+                    /* Check for property size >0 */
+                    if(prop->size==0)
+                        HGOTO_ERROR(H5E_PLIST,H5E_BADVALUE,FAIL,"property has zero size");
+
+                    /* Make a copy of the value and pass to 'set' callback */
+                    if(prop->set!=NULL) {
+                        void *tmp_value;            /* Temporary value for property */
+
+                        /* Make a copy of the current value, in case the callback fails */
+                        if (NULL==(tmp_value=H5MM_malloc(prop->size)))
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed temporary property value");
+                        HDmemcpy(tmp_value,value,prop->size);
+
+                        /* Call user's callback */
+                        if((*(prop->set))(plist->plist_id,name,prop->size,tmp_value)<0) {
+                            H5MM_xfree(tmp_value);
+                            HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't set property value");
+                        } /* end if */
+
+                        if(HDmemcmp(tmp_value,prop->value,prop->size)) {
+                            /* Make a copy of the class's property */
+                            if((pcopy=H5P_dup_prop(prop,H5P_PROP_WITHIN_LIST))==NULL)
+                                HGOTO_ERROR(H5E_PLIST,H5E_CANTCOPY,FAIL,"Can't copy property");
+
+                            /* Copy new value into property value */
+                            HDmemcpy(pcopy->value,tmp_value,pcopy->size);
+
+                            /* Insert the changed property into the property list */
+                            if(H5P_add_prop(plist->props,pcopy)<0)
+                                HGOTO_ERROR (H5E_PLIST, H5E_CANTINSERT, FAIL,"Can't insert changed property into skip list");
+                        } /* end if */
+
+                        /* Free the temporary value buffer */
+                        H5MM_xfree(tmp_value);
+                    } /* end if */
+                    /* No 'set' callback, just copy value */
+                    else {
+                        if(HDmemcmp(value,prop->value,prop->size)) {
+                            /* Make a copy of the class's property */
+                            if((pcopy=H5P_dup_prop(prop,H5P_PROP_WITHIN_LIST))==NULL)
+                                HGOTO_ERROR(H5E_PLIST,H5E_CANTCOPY,FAIL,"Can't copy property");
+
+                            HDmemcpy(pcopy->value,value,pcopy->size);
+
+                            /* Insert the changed property into the property list */
+                            if(H5P_add_prop(plist->props,pcopy)<0)
+                                HGOTO_ERROR (H5E_PLIST, H5E_CANTINSERT, FAIL,"Can't insert changed property into skip list");
+                        } /* end if */
+                    } /* end else */
+
+                    /* Leave */
+                    HGOTO_DONE(SUCCEED);
+                } /* end while */
+            } /* end if */
+
+            /* Go up to parent class */
+            tclass=tclass->parent;
+        } /* end while */
+
+        /* If we get this far, then it wasn't in the list of changed properties,
+         * nor in the properties in the class hierarchy, indicate an error
+         */
+        HGOTO_ERROR(H5E_PLIST,H5E_NOTFOUND,FAIL,"can't find property in skip list");
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_set() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pset
+ PURPOSE
+    Routine to set a property's value in a property list.
+ USAGE
+    herr_t H5P_set(plist_id, name, value)
+        hid_t plist_id;         IN: Property list to find property in
+        const char *name;       IN: Name of property to set
+        void *value;            IN: Pointer to the value for the property
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Sets a new value for a property in a property list.  The property name
+    must exist or this routine will fail.  If there is a 'set' callback routine
+    registered for this property, the 'value' will be passed to that routine and
+    any changes to the 'value' will be used when setting the property value.
+    The information pointed at by the 'value' pointer (possibly modified by the
+    'set' callback) is copied into the property list value and may be changed
+    by the application making the H5Pset call without affecting the property
+    value.
+
+        If the 'set' callback routine returns an error, the property value will
+    not be modified.  This routine may not be called for zero-sized properties
+    and will return an error in that case.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Pset(hid_t plist_id, const char *name, void *value)
+{
+    H5P_genplist_t *plist;      /* Property list to modify */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset, FAIL);
+    H5TRACE3("e","isx",plist_id,name,value);
+
+    /* Check arguments. */
+    if (NULL == (plist = H5I_object_verify(plist_id, H5I_GENPROP_LST)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid property name");
+    if (value==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalied property value");
+
+    /* Go set the value */
+    if(H5P_set(plist,name,value)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to set value in plist");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pset() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_exist_plist
+ PURPOSE
+    Internal routine to query the existance of a property in a property list.
+ USAGE
+    herr_t H5P_exist_plist(plist, name)
+        H5P_genplist_t *plist;  IN: Property list to check
+        const char *name;       IN: Name of property to check for
+ RETURNS
+    Success: Positive if the property exists in the property list, zero
+            if the property does not exist.
+    Failure: negative value
+ DESCRIPTION
+        This routine checks if a property exists within a property list.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5P_exist_plist(H5P_genplist_t *plist, const char *name)
+{
+    htri_t ret_value=FAIL;     /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_exist_plist);
+
+    assert(plist);
+    assert(name);
+
+    /* Check for property in deleted property list */
+    if(H5SL_search(plist->del,name)!=NULL)
+        ret_value=0;
+    else {
+        /* Check for property in changed property list */
+        if(H5SL_search(plist->props,name)!=NULL)
+            ret_value=1;
+        else {
+            H5P_genclass_t *tclass;     /* Temporary class pointer */
+
+            tclass=plist->pclass;
+            while(tclass!=NULL) {
+                if(H5SL_search(tclass->props,name)!=NULL)
+                    HGOTO_DONE(1);
+
+                /* Go up to parent class */
+                tclass=tclass->parent;
+            } /* end while */
+
+            /* If we've reached here, we couldn't find the property */
+            ret_value=0;
+        } /* end else */
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_exist_plist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_exist_pclass
+ PURPOSE
+    Internal routine to query the existance of a property in a property class.
+ USAGE
+    herr_t H5P_exist_pclass(pclass, name)
+        H5P_genclass_t *pclass;  IN: Property class to check
+        const char *name;       IN: Name of property to check for
+ RETURNS
+    Success: Positive if the property exists in the property list, zero
+            if the property does not exist.
+    Failure: negative value
+ DESCRIPTION
+        This routine checks if a property exists within a property list.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5P_exist_pclass(H5P_genclass_t *pclass, const char *name)
+{
+    htri_t ret_value=FAIL;     /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_exist_pclass);
+
+    assert(pclass);
+    assert(name);
+
+    /* Check for property in property list */
+    if(H5SL_search(pclass->props,name)==NULL)
+        ret_value=0;
+    else
+        ret_value=1;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_exist_pclass() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pexist
+ PURPOSE
+    Routine to query the existance of a property in a property object.
+ USAGE
+    htri_t H5P_exist(id, name)
+        hid_t id;           IN: Property object ID to check
+        const char *name;   IN: Name of property to check for
+ RETURNS
+    Success: Positive if the property exists in the property object, zero
+            if the property does not exist.
+    Failure: negative value
+ DESCRIPTION
+        This routine checks if a property exists within a property list or
+    class.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5Pexist(hid_t id, const char *name)
+{
+    H5P_genplist_t	*plist;    /* Property list to query */
+    H5P_genclass_t	*pclass;   /* Property class to query */
+    htri_t ret_value;           /* return value */
+
+    FUNC_ENTER_API(H5Pexist, FAIL);
+    H5TRACE2("t","is",id,name);
+
+    /* Check arguments. */
+    if (H5I_GENPROP_LST != H5I_get_type(id) && H5I_GENPROP_CLS != H5I_get_type(id))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property object");
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid property name");
+
+    /* Check for the existance of the property in the list or class */
+    if(H5I_GENPROP_LST == H5I_get_type(id)) {
+        if (NULL == (plist = H5I_object(id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+        if ((ret_value=H5P_exist_plist(plist,name))<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "property does not exist in list");
+    } /* end if */
+    else
+        if(H5I_GENPROP_CLS == H5I_get_type(id)) {
+            if (NULL == (pclass = H5I_object(id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property class");
+            if ((ret_value=H5P_exist_pclass(pclass,name))<0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "property does not exist in class");
+        } /* end if */
+        else
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property object");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pexist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_get_size_plist
+ PURPOSE
+    Internal routine to query the size of a property in a property list.
+ USAGE
+    herr_t H5P_get_size_plist(plist, name)
+        H5P_genplist_t *plist;  IN: Property list to check
+        const char *name;       IN: Name of property to query
+        size_t *size;           OUT: Size of property
+ RETURNS
+    Success: non-negative value
+    Failure: negative value
+ DESCRIPTION
+        This routine retrieves the size of a property's value in bytes.  Zero-
+    sized properties are allowed and return a value of 0.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5P_get_size_plist(H5P_genplist_t *plist, const char *name, size_t *size)
+{
+    H5P_genprop_t *prop;        /* Temporary property pointer */
+    herr_t ret_value=SUCCEED;      /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_get_size_plist);
+
+    assert(plist);
+    assert(name);
+    assert(size);
+
+    /* Find property */
+    if((prop=H5P_find_prop_plist(plist,name))==NULL)
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, FAIL, "property doesn't exist");
+
+    /* Get property size */
+    *size=prop->size;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_get_size_plist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_get_size_pclass
+ PURPOSE
+    Internal routine to query the size of a property in a property class.
+ USAGE
+    herr_t H5P_get_size_pclass(pclass, name)
+        H5P_genclass_t *pclass; IN: Property class to check
+        const char *name;       IN: Name of property to query
+        size_t *size;           OUT: Size of property
+ RETURNS
+    Success: non-negative value
+    Failure: negative value
+ DESCRIPTION
+        This routine retrieves the size of a property's value in bytes.  Zero-
+    sized properties are allowed and return a value of 0.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5P_get_size_pclass(H5P_genclass_t *pclass, const char *name, size_t *size)
+{
+    H5P_genprop_t *prop;        /* Temporary property pointer */
+    herr_t ret_value=SUCCEED;      /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_get_size_pclass);
+
+    assert(pclass);
+    assert(name);
+    assert(size);
+
+    /* Find property */
+    if((prop=H5P_find_prop_pclass(pclass,name))==NULL)
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, FAIL, "property doesn't exist");
+
+    /* Get property size */
+    *size=prop->size;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_get_size_pclass() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pget_size
+ PURPOSE
+    Routine to query the size of a property in a property list or class.
+ USAGE
+    herr_t H5Pget_size(id, name)
+        hid_t id;               IN: ID of property list or class to check
+        const char *name;       IN: Name of property to query
+        size_t *size;           OUT: Size of property
+ RETURNS
+    Success: non-negative value
+    Failure: negative value
+ DESCRIPTION
+        This routine retrieves the size of a property's value in bytes.  Zero-
+    sized properties are allowed and return a value of 0.  This function works
+    for both property lists and classes.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Pget_size(hid_t id, const char *name, size_t *size)
+{
+    H5P_genclass_t	*pclass;   /* Property class to query */
+    H5P_genplist_t	*plist;    /* Property list to query */
+    herr_t ret_value;           /* return value */
+
+    FUNC_ENTER_API(H5Pget_size, FAIL);
+    H5TRACE3("e","is*z",id,name,size);
+
+    /* Check arguments. */
+    if (H5I_GENPROP_LST != H5I_get_type(id) && H5I_GENPROP_CLS != H5I_get_type(id))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property object");
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid property name");
+    if (size==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid property size");
+
+    if (H5I_GENPROP_LST == H5I_get_type(id)) {
+        if (NULL == (plist = H5I_object(id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+
+        /* Check the property size */
+        if ((ret_value=H5P_get_size_plist(plist,name,size))<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to query size in plist");
+    } /* end if */
+    else
+        if (H5I_GENPROP_CLS == H5I_get_type(id)) {
+            if (NULL == (pclass = H5I_object(id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+
+            /* Check the property size */
+            if ((ret_value=H5P_get_size_pclass(pclass,name,size))<0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to query size in plist");
+        } /* end if */
+        else
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property object");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pget_size() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_get_class
+ PURPOSE
+    Internal routine to query the class of a generic property list
+ USAGE
+    H5P_genclass_t *H5P_get_class(plist)
+        H5P_genplist_t *plist;    IN: Property list to check
+ RETURNS
+    Success: Pointer to the class for a property list
+    Failure: NULL
+ DESCRIPTION
+    This routine retrieves a pointer to the class for a property list.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5P_genclass_t *
+H5P_get_class(H5P_genplist_t *plist)
+{
+    H5P_genclass_t *ret_value;      /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_get_class);
+
+    assert(plist);
+
+    /* Get property size */
+    ret_value=plist->pclass;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_get_class() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pget_class
+ PURPOSE
+    Routine to query the class of a generic property list
+ USAGE
+    hid_t H5Pget_class(plist_id)
+        hid_t plist_id;         IN: Property list to query
+ RETURNS
+    Success: ID of class object
+    Failure: negative
+ DESCRIPTION
+    This routine retrieves the class of a property list.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    Change the name of this function to H5Pget_class (and remove old H5Pget_class)
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hid_t
+H5Pget_class(hid_t plist_id)
+{
+    H5P_genplist_t	*plist;         /* Property list to query */
+    H5P_genclass_t	*pclass=NULL;   /* Property list class */
+    hid_t ret_value=FAIL;           /* return value */
+
+    FUNC_ENTER_API(H5Pget_class, FAIL);
+    H5TRACE1("i","i",plist_id);
+
+    /* Check arguments. */
+    if (NULL == (plist = H5I_object_verify(plist_id, H5I_GENPROP_LST)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+
+    /* Retrieve the property list class */
+    if ((pclass=H5P_get_class(plist))==NULL)
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, FAIL, "unable to query class of property list");
+
+    /* Increment the outstanding references to the class object */
+    if(H5P_access_class(pclass,H5P_MOD_INC_REF)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, FAIL,"Can't increment class ID ref count");
+
+    /* Get an atom for the class */
+    if ((ret_value = H5I_register(H5I_GENPROP_CLS, pclass))<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to atomize property list class");
+
+done:
+    if (ret_value<0 && pclass)
+        H5P_close_class(pclass);
+
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pget_class() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_get_nprops_plist
+ PURPOSE
+    Internal routine to query the number of properties in a property list
+ USAGE
+    herr_t H5P_get_nprops_plist(plist, nprops)
+        H5P_genplist_t *plist;  IN: Property list to check
+        size_t *nprops;         OUT: Number of properties in the property list
+ RETURNS
+    Success: non-negative value
+    Failure: negative value
+ DESCRIPTION
+        This routine retrieves the number of a properties in a property list.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5P_get_nprops_plist(H5P_genplist_t *plist, size_t *nprops)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_get_nprops_plist);
+
+    assert(plist);
+    assert(nprops);
+
+    /* Get property size */
+    *nprops=plist->nprops;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5P_get_nprops_plist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_get_nprops_pclass
+ PURPOSE
+    Internal routine to query the number of properties in a property class
+ USAGE
+    herr_t H5P_get_nprops_pclass(pclass, nprops)
+        H5P_genclass_t *pclass;  IN: Property class to check
+        size_t *nprops;         OUT: Number of properties in the property list
+ RETURNS
+    Success: non-negative value (can't fail)
+    Failure: negative value
+ DESCRIPTION
+    This routine retrieves the number of a properties in a property class.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5P_get_nprops_pclass(H5P_genclass_t *pclass, size_t *nprops)
+{
+    herr_t ret_value = SUCCEED;         /* Return value */
+
+    FUNC_ENTER_NOAPI(H5P_get_nprops_pclass, FAIL)
+
+    assert(pclass);
+    assert(nprops);
+
+    /* Get number of properties */
+    *nprops=pclass->nprops;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* H5P_get_nprops_pclass() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pget_nprops
+ PURPOSE
+    Routine to query the size of a property in a property list or class.
+ USAGE
+    herr_t H5Pget_nprops(id, nprops)
+        hid_t id;               IN: ID of Property list or class to check
+        size_t *nprops;         OUT: Number of properties in the property object
+ RETURNS
+    Success: non-negative value
+    Failure: negative value
+ DESCRIPTION
+        This routine retrieves the number of properties in a property list or
+    class.  If a property class ID is given, the number of registered properties
+    in the class is returned in NPROPS.  If a property list ID is given, the
+    current number of properties in the list is returned in NPROPS.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Pget_nprops(hid_t id, size_t *nprops)
+{
+    H5P_genplist_t	*plist;    /* Property list to query */
+    H5P_genclass_t	*pclass;   /* Property class to query */
+    herr_t ret_value=SUCCEED;      /* return value */
+
+    FUNC_ENTER_API(H5Pget_nprops, FAIL);
+    H5TRACE2("e","i*z",id,nprops);
+
+    /* Check arguments. */
+    if (H5I_GENPROP_LST != H5I_get_type(id) && H5I_GENPROP_CLS != H5I_get_type(id))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property object");
+    if (nprops==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid property nprops pointer");
+
+    if(H5I_GENPROP_LST == H5I_get_type(id)) {
+        if (NULL == (plist = H5I_object(id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+        if (H5P_get_nprops_plist(plist,nprops)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to query # of properties in plist");
+    } /* end if */
+    else
+        if(H5I_GENPROP_CLS == H5I_get_type(id)) {
+            if (NULL == (pclass = H5I_object(id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property class");
+            if (H5P_get_nprops_pclass(pclass,nprops)<0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to query # of properties in pclass");
+        } /* end if */
+        else
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property object");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pget_nprops() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_cmp_prop
+ PURPOSE
+    Internal routine to compare two generic properties
+ USAGE
+    int H5P_cmp_prop(prop1, prop2)
+        H5P_genprop_t *prop1;    IN: 1st property to compare
+        H5P_genprop_t *prop1;    IN: 2nd property to compare
+ RETURNS
+    Success: negative if prop1 "less" than prop2, positive if prop1 "greater"
+        than prop2, zero if prop1 is "equal" to prop2
+    Failure: can't fail
+ DESCRIPTION
+        This function compares two generic properties together to see if
+    they are the same property.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static int
+H5P_cmp_prop(H5P_genprop_t *prop1, H5P_genprop_t *prop2)
+{
+    int cmp_value;             /* Value from comparison */
+    int ret_value=0;         /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_cmp_prop);
+
+    assert(prop1);
+    assert(prop2);
+
+    /* Check the name */
+    if((cmp_value=HDstrcmp(prop1->name,prop2->name))!=0)
+        HGOTO_DONE(cmp_value);
+
+    /* Check the size of properties */
+    if(prop1->size < prop2->size) HGOTO_DONE(-1);
+    if(prop1->size > prop2->size) HGOTO_DONE(1);
+
+    /* Check if they both have the same 'create' callback */
+    if(prop1->create==NULL && prop2->create!=NULL) HGOTO_DONE(-1);
+    if(prop1->create!=NULL && prop2->create==NULL) HGOTO_DONE(1);
+    if(prop1->create!=prop2->create) HGOTO_DONE(-1);
+
+    /* Check if they both have the same 'set' callback */
+    if(prop1->set==NULL && prop2->set!=NULL) HGOTO_DONE(-1);
+    if(prop1->set!=NULL && prop2->set==NULL) HGOTO_DONE(1);
+    if(prop1->set!=prop2->set) HGOTO_DONE(-1);
+
+    /* Check if they both have the same 'get' callback */
+    if(prop1->get==NULL && prop2->get!=NULL) HGOTO_DONE(-1);
+    if(prop1->get!=NULL && prop2->get==NULL) HGOTO_DONE(1);
+    if(prop1->get!=prop2->get) HGOTO_DONE(-1);
+
+    /* Check if they both have the same 'delete' callback */
+    if(prop1->del==NULL && prop2->del!=NULL) HGOTO_DONE(-1);
+    if(prop1->del!=NULL && prop2->del==NULL) HGOTO_DONE(1);
+    if(prop1->del!=prop2->del) HGOTO_DONE(-1);
+
+    /* Check if they both have the same 'copy' callback */
+    if(prop1->copy==NULL && prop2->copy!=NULL) HGOTO_DONE(-1);
+    if(prop1->copy!=NULL && prop2->copy==NULL) HGOTO_DONE(1);
+    if(prop1->copy!=prop2->copy) HGOTO_DONE(-1);
+
+    /* Check if they both have the same 'compare' callback */
+    if(prop1->cmp==NULL && prop2->cmp!=NULL) HGOTO_DONE(-1);
+    if(prop1->cmp!=NULL && prop2->cmp==NULL) HGOTO_DONE(1);
+    if(prop1->cmp!=prop2->cmp) HGOTO_DONE(-1);
+
+    /* Check if they both have the same 'close' callback */
+    if(prop1->close==NULL && prop2->close!=NULL) HGOTO_DONE(-1);
+    if(prop1->close!=NULL && prop2->close==NULL) HGOTO_DONE(1);
+    if(prop1->close!=prop2->close) HGOTO_DONE(-1);
+
+    /* Check if they both have values allocated (or not allocated) */
+    if(prop1->value==NULL && prop2->value!=NULL) HGOTO_DONE(-1);
+    if(prop1->value!=NULL && prop2->value==NULL) HGOTO_DONE(1);
+    if(prop1->value!=NULL) {
+        /* Call comparison routine */
+        if((cmp_value=prop1->cmp(prop1->value,prop2->value,prop1->size))!=0)
+            HGOTO_DONE(cmp_value);
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_cmp_prop() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_cmp_class
+ PURPOSE
+    Internal routine to compare two generic property classes
+ USAGE
+    int H5P_cmp_class(pclass1, pclass2)
+        H5P_genclass_t *pclass1;    IN: 1st property class to compare
+        H5P_genclass_t *pclass2;    IN: 2nd property class to compare
+ RETURNS
+    Success: negative if class1 "less" than class2, positive if class1 "greater"
+        than class2, zero if class1 is "equal" to class2
+    Failure: can't fail
+ DESCRIPTION
+        This function compares two generic property classes together to see if
+    they are the same class.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static int
+H5P_cmp_class(H5P_genclass_t *pclass1, H5P_genclass_t *pclass2)
+{
+    H5SL_node_t *tnode1,*tnode2;    /* Temporary pointer to property nodes */
+    int cmp_value;                  /* Value from comparison */
+    int ret_value=0;                /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_cmp_class);
+
+    assert(pclass1);
+    assert(pclass2);
+
+    /* Use the revision number to quickly check for identical classes */
+    if(pclass1->revision==pclass2->revision)
+        HGOTO_DONE(0);
+
+    /* Check the name */
+    if((cmp_value=HDstrcmp(pclass1->name,pclass2->name))!=0)
+        HGOTO_DONE(cmp_value);
+
+    /* Check the number of properties */
+    if(pclass1->nprops < pclass2->nprops) HGOTO_DONE(-1);
+    if(pclass1->nprops > pclass2->nprops) HGOTO_DONE(1);
+
+    /* Check the number of property lists created from the class */
+    if(pclass1->plists < pclass2->plists) HGOTO_DONE(-1);
+    if(pclass1->plists > pclass2->plists) HGOTO_DONE(1);
+
+    /* Check the number of classes derived from the class */
+    if(pclass1->classes < pclass2->classes) HGOTO_DONE(-1);
+    if(pclass1->classes > pclass2->classes) HGOTO_DONE(1);
+
+    /* Check the number of ID references open on the class */
+    if(pclass1->ref_count < pclass2->ref_count) HGOTO_DONE(-1);
+    if(pclass1->ref_count > pclass2->ref_count) HGOTO_DONE(1);
+
+    /* Check whether they are internal or not */
+    if(pclass1->internal < pclass2->internal) HGOTO_DONE(-1);
+    if(pclass1->internal > pclass2->internal) HGOTO_DONE(1);
+
+    /* Check whether they are deleted or not */
+    if(pclass1->deleted < pclass2->deleted) HGOTO_DONE(-1);
+    if(pclass1->deleted > pclass2->deleted) HGOTO_DONE(1);
+
+    /* Check whether they have creation callback functions & data */
+    if(pclass1->create_func==NULL && pclass2->create_func!=NULL) HGOTO_DONE(-1);
+    if(pclass1->create_func!=NULL && pclass2->create_func==NULL) HGOTO_DONE(1);
+    if(pclass1->create_func!=pclass2->create_func) HGOTO_DONE(-1);
+    if(pclass1->create_data < pclass2->create_data) HGOTO_DONE(-1);
+    if(pclass1->create_data > pclass2->create_data) HGOTO_DONE(1);
+
+    /* Check whether they have close callback functions & data */
+    if(pclass1->close_func==NULL && pclass2->close_func!=NULL) HGOTO_DONE(-1);
+    if(pclass1->close_func!=NULL && pclass2->close_func==NULL) HGOTO_DONE(1);
+    if(pclass1->close_func!=pclass2->close_func) HGOTO_DONE(-1);
+    if(pclass1->close_data < pclass2->close_data) HGOTO_DONE(-1);
+    if(pclass1->close_data > pclass2->close_data) HGOTO_DONE(1);
+
+    /* Cycle through the properties and compare them also */
+    tnode1=H5SL_first(pclass1->props);
+    tnode2=H5SL_first(pclass2->props);
+    while(tnode1 || tnode2) {
+        H5P_genprop_t *prop1, *prop2;   /* Property for node */
+
+        /* Check if they both have properties in this skip list node */
+        if(tnode1==NULL && tnode2!=NULL) HGOTO_DONE(-1);
+        if(tnode1!=NULL && tnode2==NULL) HGOTO_DONE(1);
+
+        /* Compare the two properties */
+        prop1=H5SL_item(tnode1);
+        prop2=H5SL_item(tnode2);
+        if((cmp_value=H5P_cmp_prop(prop1,prop2))!=0)
+            HGOTO_DONE(cmp_value);
+
+        /* Advance the pointers */
+        tnode1=H5SL_next(tnode1);
+        tnode2=H5SL_next(tnode2);
+    } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_cmp_class() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_cmp_plist
+ PURPOSE
+    Internal routine to compare two generic property lists
+ USAGE
+    int H5P_cmp_plist(plist1, plist2)
+        H5P_genplist_t *plist1;    IN: 1st property list to compare
+        H5P_genplist_t *plist2;    IN: 2nd property list to compare
+ RETURNS
+    Success: negative if list1 "less" than list2, positive if list1 "greater"
+        than list2, zero if list1 is "equal" to list2
+    Failure: can't fail
+ DESCRIPTION
+        This function compares two generic property lists together to see if
+    they are the same list.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static int
+H5P_cmp_plist(H5P_genplist_t *plist1, H5P_genplist_t *plist2)
+{
+    H5SL_node_t *tnode1,*tnode2;    /* Temporary pointer to property nodes */
+    int cmp_value;              /* Value from comparison */
+    int ret_value=0;            /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_cmp_plist);
+
+    assert(plist1);
+    assert(plist2);
+
+    /* Check the number of properties */
+    if(plist1->nprops < plist2->nprops) HGOTO_DONE(-1);
+    if(plist1->nprops > plist2->nprops) HGOTO_DONE(1);
+
+    /* Check whether they've been initialized */
+    if(plist1->class_init < plist2->class_init) HGOTO_DONE(-1);
+    if(plist1->class_init > plist2->class_init) HGOTO_DONE(1);
+
+    /* Check for identical deleted properties */
+    if(H5SL_count(plist1->del)>0) {
+        /* Check for no deleted properties in plist2 */
+        if(H5SL_count(plist2->del)==0) HGOTO_DONE(1);
+
+        tnode1=H5SL_first(plist1->del);
+        tnode2=H5SL_first(plist2->del);
+        while(tnode1 || tnode2) {
+            const char *name1, *name2;   /* Name for node */
+
+            /* Check if they both have properties in this node */
+            if(tnode1==NULL && tnode2!=NULL) HGOTO_DONE(-1);
+            if(tnode1!=NULL && tnode2==NULL) HGOTO_DONE(1);
+
+            /* Compare the two deleted properties */
+            name1=H5SL_item(tnode1);
+            name2=H5SL_item(tnode2);
+            if((cmp_value=HDstrcmp(name1,name2))!=0)
+                HGOTO_DONE(cmp_value);
+
+            /* Advance the pointers */
+            tnode1=H5SL_next(tnode1);
+            tnode2=H5SL_next(tnode2);
+        } /* end while */
+    } /* end if */
+    else
+        if(H5SL_count(plist2->del)>0) HGOTO_DONE (-1);
+
+    /* Cycle through the changed properties and compare them also */
+    if(H5SL_count(plist1->props)>0) {
+        /* Check for no changed properties in plist2 */
+        if(H5SL_count(plist2->props)==0) HGOTO_DONE(1);
+
+        tnode1=H5SL_first(plist1->props);
+        tnode2=H5SL_first(plist2->props);
+        while(tnode1 || tnode2) {
+            H5P_genprop_t *prop1, *prop2;   /* Property for node */
+
+            /* Check if they both have properties in this node */
+            if(tnode1==NULL && tnode2!=NULL) HGOTO_DONE(-1);
+            if(tnode1!=NULL && tnode2==NULL) HGOTO_DONE(1);
+
+            /* Compare the two properties */
+            prop1=H5SL_item(tnode1);
+            prop2=H5SL_item(tnode2);
+            if((cmp_value=H5P_cmp_prop(prop1,prop2))!=0)
+                HGOTO_DONE(cmp_value);
+
+            /* Advance the pointers */
+            tnode1=H5SL_next(tnode1);
+            tnode2=H5SL_next(tnode2);
+        } /* end while */
+    } /* end if */
+    else
+        if(H5SL_count(plist2->props)>0) HGOTO_DONE (-1);
+
+    /* Check the parent classes */
+    if((cmp_value=H5P_cmp_class(plist1->pclass,plist2->pclass))!=0)
+        HGOTO_DONE(cmp_value);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_cmp_plist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pequal
+ PURPOSE
+    Routine to query whether two property lists or two property classes are equal
+ USAGE
+    htri_t H5Pequal(id1, id2)
+        hid_t id1;         IN: Property list or class ID to compare
+        hid_t id2;         IN: Property list or class ID to compare
+ RETURNS
+    Success: TRUE if equal, FALSE if unequal
+    Failure: negative
+ DESCRIPTION
+    Determines whether two property lists or two property classes are equal.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5Pequal(hid_t id1, hid_t id2)
+{
+    void *obj1, *obj2;          /* Property objects to compare */
+    htri_t ret_value=FALSE;     /* return value */
+
+    FUNC_ENTER_API(H5Pequal, FAIL);
+    H5TRACE2("t","ii",id1,id2);
+
+    /* Check arguments. */
+    if ((H5I_GENPROP_LST != H5I_get_type(id1) && H5I_GENPROP_CLS != H5I_get_type(id1))
+            || (H5I_GENPROP_LST != H5I_get_type(id2) && H5I_GENPROP_CLS != H5I_get_type(id2)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not property objects");
+    if (H5I_get_type(id1) != H5I_get_type(id2))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not the same kind of property objects");
+    if(NULL == (obj1 = H5I_object(id1)) || NULL == (obj2 = H5I_object(id2)))
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, FAIL, "property object doesn't exist");
+
+    /* Compare property lists */
+    if(H5I_GENPROP_LST == H5I_get_type(id1)) {
+        if(H5P_cmp_plist(obj1,obj2)==0)
+            ret_value=TRUE;
+    } /* end if */
+    /* Must be property classes */
+    else {
+        if(H5P_cmp_class(obj1,obj2)==0)
+            ret_value=TRUE;
+    } /* end else */
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pequal() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_isa_class_real
+ PURPOSE
+    Internal routine to query whether a property class is the same as another
+    class.
+ USAGE
+    htri_t H5P_isa_class_real(pclass1, pclass2)
+        H5P_genclass_t *pclass1;   IN: Property class to check
+        H5P_genclass_t *pclass2;   IN: Property class to compare with
+ RETURNS
+    Success: TRUE (1) or FALSE (0)
+    Failure: negative value
+ DESCRIPTION
+    This routine queries whether a property class is the same as another class,
+    and walks up the hierarchy of derived classes, checking if the first class
+    is derived from the second class also.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5P_isa_class_real(H5P_genclass_t *pclass1, H5P_genclass_t *pclass2)
+{
+    htri_t ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_isa_class_real);
+
+    assert(pclass1);
+    assert(pclass2);
+
+    /* Compare property classes */
+    if(H5P_cmp_class(pclass1,pclass2)==0) {
+        HGOTO_DONE(TRUE);
+    } else {
+        /* Check if the class is derived, and walk up the chain, if so */
+        if(pclass1->parent!=NULL)
+            ret_value=H5P_isa_class_real(pclass1->parent,pclass2);
+        else
+            HGOTO_DONE(FALSE);
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_isa_class_real() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_isa_class
+ PURPOSE
+    Internal routine to query whether a property list is a certain class
+ USAGE
+    hid_t H5P_isa_class(plist_id, pclass_id)
+        hid_t plist_id;         IN: Property list to query
+        hid_t pclass_id;        IN: Property class to query
+ RETURNS
+    Success: TRUE (1) or FALSE (0)
+    Failure: negative
+ DESCRIPTION
+    This routine queries whether a property list is a member of the property
+    list class.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This function is special in that it is an internal library function, but
+    accepts hid_t's as parameters.  Since it is used in basically the same way
+    as the H5I functions, this should be OK.  Don't make more library functions
+    which accept hid_t's without thorough discussion. -QAK
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5P_isa_class(hid_t plist_id, hid_t pclass_id)
+{
+    H5P_genplist_t	*plist;         /* Property list to query */
+    H5P_genclass_t	*pclass;        /* Property list class */
+    htri_t ret_value;                   /* return value */
+
+    FUNC_ENTER_NOAPI(H5P_isa_class, FAIL);
+
+    /* Check arguments. */
+    if (NULL == (plist = H5I_object_verify(plist_id, H5I_GENPROP_LST)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+    if (NULL == (pclass = H5I_object_verify(pclass_id, H5I_GENPROP_CLS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property class");
+
+    /* Compare the property list's class against the other class */
+    if ((ret_value = H5P_isa_class_real(plist->pclass, pclass))<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to compare property list classes");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_isa_class() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pisa_class
+ PURPOSE
+    Routine to query whether a property list is a certain class
+ USAGE
+    hid_t H5Pisa_class(plist_id, pclass_id)
+        hid_t plist_id;         IN: Property list to query
+        hid_t pclass_id;        IN: Property class to query
+ RETURNS
+    Success: TRUE (1) or FALSE (0)
+    Failure: negative
+ DESCRIPTION
+    This routine queries whether a property list is a member of the property
+    list class.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    What about returning a value indicating that the property class is further
+    up the class hierarchy?
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5Pisa_class(hid_t plist_id, hid_t pclass_id)
+{
+    htri_t ret_value;                   /* return value */
+
+    FUNC_ENTER_API(H5Pisa_class, FAIL);
+    H5TRACE2("t","ii",plist_id,pclass_id);
+
+    /* Check arguments. */
+    if (H5I_GENPROP_LST != H5I_get_type(plist_id))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+    if (H5I_GENPROP_CLS != H5I_get_type(pclass_id))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property class");
+
+    /* Compare the property list's class against the other class */
+    if ((ret_value = H5P_isa_class(plist_id, pclass_id))<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to compare property list classes");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pisa_class() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_object_verify
+ PURPOSE
+    Internal routine to query whether a property list is a certain class and
+        retrieve the property list object associated with it.
+ USAGE
+    void *H5P_object_verify(plist_id, pclass_id)
+        hid_t plist_id;         IN: Property list to query
+        hid_t pclass_id;        IN: Property class to query
+ RETURNS
+    Success: valid pointer to a property list object
+    Failure: NULL
+ DESCRIPTION
+    This routine queries whether a property list is member of a certain class
+    and retrieves the property list object associated with it.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This function is special in that it is an internal library function, but
+    accepts hid_t's as parameters.  Since it is used in basically the same way
+    as the H5I functions, this should be OK.  Don't make more library functions
+    which accept hid_t's without thorough discussion. -QAK
+
+    This function is similar (in spirit) to H5I_object_verify()
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+void *
+H5P_object_verify(hid_t plist_id, hid_t pclass_id)
+{
+    void *ret_value;                   /* return value */
+
+    FUNC_ENTER_NOAPI(H5P_object_verify, NULL);
+
+    /* Compare the property list's class against the other class */
+    if (H5P_isa_class(plist_id,pclass_id)!=TRUE)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, NULL, "property list is not a member of the class");
+
+    /* Get the plist structure */
+    if(NULL == (ret_value = H5I_object(plist_id)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, NULL, "can't find object for ID");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_object_verify() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_iterate_plist
+ PURPOSE
+    Internal routine to iterate over the properties in a property list
+ USAGE
+    herr_t H5P_iterate_plist(plist_id, idx, iter_func, iter_data)
+        hid_t plist_id;             IN: ID of property list to iterate over
+        int *idx;                   IN/OUT: Index of the property to begin with
+        H5P_iterate_t iter_func;    IN: Function pointer to function to be
+                                        called with each property iterated over.
+        void *iter_data;            IN/OUT: Pointer to iteration data from user
+ RETURNS
+    Success: Returns the return value of the last call to ITER_FUNC if it was
+                non-zero, or zero if all properties have been processed.
+    Failure: negative value
+ DESCRIPTION
+    This routine iterates over the properties in the property object specified
+with PLIST_ID.  For each property in the object, the ITER_DATA and some
+additional information, specified below, are passed to the ITER_FUNC function.
+The iteration begins with the IDX property in the object and the next element
+to be processed by the operator is returned in IDX.  If IDX is NULL, then the
+iterator starts at the first property; since no stopping point is returned in
+this case, the iterator cannot be restarted if one of the calls to its operator
+returns non-zero.
+
+The prototype for H5P_iterate_t is:
+    typedef herr_t (*H5P_iterate_t)(hid_t id, const char *name, void *iter_data);
+The operation receives the property list or class identifier for the object
+being iterated over, ID, the name of the current property within the object,
+NAME, and the pointer to the operator data passed in to H5Piterate, ITER_DATA.
+
+The return values from an operator are:
+    Zero causes the iterator to continue, returning zero when all properties
+        have been processed.
+    Positive causes the iterator to immediately return that positive value,
+        indicating short-circuit success. The iterator can be restarted at the
+        index of the next property.
+    Negative causes the iterator to immediately return that value, indicating
+        failure. The iterator can be restarted at the index of the next
+        property.
+
+H5Piterate assumes that the properties in the object identified by ID remains
+unchanged through the iteration.  If the membership changes during the
+iteration, the function's behavior is undefined.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static int
+H5P_iterate_plist(hid_t plist_id, int *idx, H5P_iterate_t iter_func, void *iter_data)
+{
+    H5P_genclass_t *tclass;     /* Temporary class pointer */
+    H5P_genplist_t *plist;      /* Property list pointer */
+    H5P_genprop_t *tmp;         /* Temporary pointer to properties */
+    H5SL_t *seen=NULL;          /* Skip list to hold names of properties already seen */
+    H5SL_node_t *curr_node;     /* Current node in skip list */
+    int curr_idx=0;             /* Current iteration index */
+    int ret_value=FAIL;         /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_iterate_plist);
+
+    assert(idx);
+    assert(iter_func);
+
+    /* Get the property list object */
+    if (NULL == (plist = H5I_object_verify(plist_id, H5I_GENPROP_LST)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+
+    /* Create the skip list to hold names of properties already seen */
+    if((seen=H5SL_create(H5SL_TYPE_STR,0.5,H5P_DEFAULT_SKIPLIST_HEIGHT))==NULL)
+        HGOTO_ERROR(H5E_PLIST,H5E_CANTCREATE,FAIL,"can't create skip list for seen properties");
+
+    /* Walk through the changed properties in the list */
+    if(H5SL_count(plist->props)>0) {
+        curr_node=H5SL_first(plist->props);
+        while(curr_node!=NULL) {
+            /* Get pointer to property from node */
+            tmp=H5SL_item(curr_node);
+
+            /* Check if we've found the correctly indexed property */
+            if(curr_idx>=*idx) {
+                /* Call the callback function */
+                ret_value=(*iter_func)(plist_id,tmp->name,iter_data);
+
+                if(ret_value!=0)
+                    HGOTO_DONE(ret_value);
+            } /* end if */
+
+            /* Increment the current index */
+            curr_idx++;
+
+            /* Add property name to "seen" list */
+            if(H5SL_insert(seen,tmp->name,tmp->name)<0)
+                HGOTO_ERROR(H5E_PLIST,H5E_CANTINSERT,FAIL,"can't insert property into seen skip list");
+
+            /* Get the next property node in the skip list */
+            curr_node=H5SL_next(curr_node);
+        } /* end while */
+    } /* end if */
+
+    /* Walk up the class hiearchy */
+    tclass=plist->pclass;
+    while(tclass!=NULL) {
+        if(tclass->nprops>0) {
+            /* Walk through the properties in the class */
+            curr_node=H5SL_first(tclass->props);
+            while(curr_node!=NULL) {
+                /* Get pointer to property from node */
+                tmp=H5SL_item(curr_node);
+
+                /* Only call iterator callback for properties we haven't seen
+                 * before and that haven't been deleted
+                 */
+                if(H5SL_search(seen,tmp->name)==NULL &&
+                        H5SL_search(plist->del,tmp->name)==NULL) {
+
+
+                    /* Check if we've found the correctly indexed property */
+                    if(curr_idx>=*idx) {
+                        /* Call the callback function */
+                        ret_value=(*iter_func)(plist_id,tmp->name,iter_data);
+
+                        if(ret_value!=0)
+                            HGOTO_DONE(ret_value);
+                    } /* end if */
+
+                    /* Increment the current index */
+                    curr_idx++;
+
+                    /* Add property name to "seen" list */
+                    if(H5SL_insert(seen,tmp->name,tmp->name)<0)
+                        HGOTO_ERROR(H5E_PLIST,H5E_CANTINSERT,FAIL,"can't insert property into seen skip list");
+                } /* end if */
+
+                /* Get the next property node in the skip list */
+                curr_node=H5SL_next(curr_node);
+            } /* end while */
+        } /* end if */
+
+        /* Go up to parent class */
+        tclass=tclass->parent;
+    } /* end while */
+
+done:
+    /* Set the index we stopped at */
+    *idx=curr_idx;
+
+    /* Release the skip list of 'seen' properties */
+    if(seen!=NULL)
+        H5SL_close(seen);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_iterate_plist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_iterate_pclass
+ PURPOSE
+    Internal routine to iterate over the properties in a property class
+ USAGE
+    herr_t H5P_iterate_pclass(pclass_id, idx, iter_func, iter_data)
+        hid_t pclass_id;            IN: ID of property class to iterate over
+        int *idx;                   IN/OUT: Index of the property to begin with
+        H5P_iterate_t iter_func;    IN: Function pointer to function to be
+                                        called with each property iterated over.
+        void *iter_data;            IN/OUT: Pointer to iteration data from user
+ RETURNS
+    Success: Returns the return value of the last call to ITER_FUNC if it was
+                non-zero, or zero if all properties have been processed.
+    Failure: negative value
+ DESCRIPTION
+    This routine iterates over the properties in the property object specified
+with PCLASS_ID.  For each property in the object, the ITER_DATA and some
+additional information, specified below, are passed to the ITER_FUNC function.
+The iteration begins with the IDX property in the object and the next element
+to be processed by the operator is returned in IDX.  If IDX is NULL, then the
+iterator starts at the first property; since no stopping point is returned in
+this case, the iterator cannot be restarted if one of the calls to its operator
+returns non-zero.
+
+The prototype for H5P_iterate_t is:
+    typedef herr_t (*H5P_iterate_t)(hid_t id, const char *name, void *iter_data);
+The operation receives the property list or class identifier for the object
+being iterated over, ID, the name of the current property within the object,
+NAME, and the pointer to the operator data passed in to H5Piterate, ITER_DATA.
+
+The return values from an operator are:
+    Zero causes the iterator to continue, returning zero when all properties
+        have been processed.
+    Positive causes the iterator to immediately return that positive value,
+        indicating short-circuit success. The iterator can be restarted at the
+        index of the next property.
+    Negative causes the iterator to immediately return that value, indicating
+        failure. The iterator can be restarted at the index of the next
+        property.
+
+H5Piterate assumes that the properties in the object identified by ID remains
+unchanged through the iteration.  If the membership changes during the
+iteration, the function's behavior is undefined.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static int
+H5P_iterate_pclass(hid_t pclass_id, int *idx, H5P_iterate_t iter_func, void *iter_data)
+{
+    H5P_genclass_t *pclass;     /* Property list pointer */
+    H5SL_node_t *curr_node;     /* Current node in skip list */
+    H5P_genprop_t *prop;        /* Temporary property pointer */
+    int curr_idx=0;             /* Current iteration index */
+    int ret_value=FAIL;         /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_iterate_pclass);
+
+    assert(idx);
+    assert(iter_func);
+
+    /* Get the property list object */
+    if (NULL == (pclass = H5I_object_verify(pclass_id, H5I_GENPROP_CLS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property class");
+
+    /* Cycle through the properties and call the callback */
+    curr_idx=0;
+    curr_node=H5SL_first(pclass->props);
+    while(curr_node!=NULL) {
+        if(curr_idx>=*idx) {
+            /* Get the property for the node */
+            prop=H5SL_item(curr_node);
+
+            /* Call the callback function */
+            ret_value=(*iter_func)(pclass_id,prop->name,iter_data);
+
+            /* Check if iteration function succeeded */
+            if(ret_value!=0)
+                HGOTO_DONE(ret_value);
+        } /* end if */
+
+        /* Increment the iteration index */
+        curr_idx++;
+
+        /* Get the next property node in the skip list */
+        curr_node=H5SL_next(curr_node);
+    } /* end while */
+
+done:
+    /* Set the index we stopped at */
+    *idx=curr_idx;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_iterate_pclass() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Piterate
+ PURPOSE
+    Routine to iterate over the properties in a property list or class
+ USAGE
+    int H5Piterate(pclass_id, idx, iter_func, iter_data)
+        hid_t id;                   IN: ID of property object to iterate over
+        int *idx;                   IN/OUT: Index of the property to begin with
+        H5P_iterate_t iter_func;    IN: Function pointer to function to be
+                                        called with each property iterated over.
+        void *iter_data;            IN/OUT: Pointer to iteration data from user
+ RETURNS
+    Success: Returns the return value of the last call to ITER_FUNC if it was
+                non-zero, or zero if all properties have been processed.
+    Failure: negative value
+ DESCRIPTION
+    This routine iterates over the properties in the property object specified
+with ID.  The properties in both property lists and classes may be iterated
+over with this function.  For each property in the object, the ITER_DATA and
+some additional information, specified below, are passed to the ITER_FUNC
+function.  The iteration begins with the IDX property in the object and the
+next element to be processed by the operator is returned in IDX.  If IDX is
+NULL, then the iterator starts at the first property; since no stopping point
+is returned in this case, the iterator cannot be restarted if one of the calls
+to its operator returns non-zero.  The IDX value is 0-based (ie. to start at
+the "first" property, the IDX value should be 0).
+
+The prototype for H5P_iterate_t is:
+    typedef herr_t (*H5P_iterate_t)(hid_t id, const char *name, void *iter_data);
+The operation receives the property list or class identifier for the object
+being iterated over, ID, the name of the current property within the object,
+NAME, and the pointer to the operator data passed in to H5Piterate, ITER_DATA.
+
+The return values from an operator are:
+    Zero causes the iterator to continue, returning zero when all properties
+        have been processed.
+    Positive causes the iterator to immediately return that positive value,
+        indicating short-circuit success. The iterator can be restarted at the
+        index of the next property.
+    Negative causes the iterator to immediately return that value, indicating
+        failure. The iterator can be restarted at the index of the next
+        property.
+
+H5Piterate assumes that the properties in the object identified by ID remains
+unchanged through the iteration.  If the membership changes during the
+iteration, the function's behavior is undefined.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+int
+H5Piterate(hid_t id, int *idx, H5P_iterate_t iter_func, void *iter_data)
+{
+    int fake_idx=0;         /* Index when user doesn't provide one */
+    int ret_value;          /* return value */
+
+    FUNC_ENTER_API(H5Piterate, FAIL);
+    H5TRACE4("Is","i*Isxx",id,idx,iter_func,iter_data);
+
+    /* Check arguments. */
+    if (H5I_GENPROP_LST != H5I_get_type(id) && H5I_GENPROP_CLS != H5I_get_type(id))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property object");
+    if (iter_func==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid iteration callback");
+
+    if (H5I_GENPROP_LST == H5I_get_type(id)) {
+        /* Iterate over a property list */
+        if ((ret_value=H5P_iterate_plist(id,(idx ? idx : &fake_idx),iter_func,iter_data))<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to iterate over list");
+    } /* end if */
+    else
+        if (H5I_GENPROP_CLS == H5I_get_type(id)) {
+            /* Iterate over a property class */
+            if ((ret_value=H5P_iterate_pclass(id,(idx ? idx : &fake_idx),iter_func,iter_data))<0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to iterate over class");
+        } /* end if */
+        else
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property object");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Piterate() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_peek_unsigned
+ PURPOSE
+    Internal routine to quickly retrieve the value of a property in a property list.
+ USAGE
+    int H5P_peek_unsigned(plist, name)
+        H5P_genplist_t *plist;  IN: Property list to check
+        const char *name;       IN: Name of property to query
+ RETURNS
+    Directly returns the value of the property in the list
+ DESCRIPTION
+        This function directly returns the value of a property in a property
+    list.  Because this function is only able to just copy a particular property
+    value to the return value, there is no way to check for errors.  We attempt
+    to make certain that bad things don't happen by validating that the size of
+    the property is the same as the size of the return type, but that can't
+    catch all errors.
+        This function does call the user's 'get' callback routine still.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    No error checking!
+    Use with caution!
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+unsigned
+H5P_peek_unsigned(H5P_genplist_t *plist, const char *name)
+{
+    unsigned ret_value;            /* return value */
+
+    FUNC_ENTER_NOAPI(H5P_peek_unsigned, UFAIL);
+
+    assert(plist);
+    assert(name);
+
+    /* Get the value to return, don't worry about the return value, we can't return it */
+    H5P_get(plist,name,&ret_value);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_peek_unsigned() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_peek_hid_t
+ PURPOSE
+    Internal routine to quickly retrieve the value of a property in a property list.
+ USAGE
+    hid_t H5P_peek_hid_t(plist, name)
+        H5P_genplist_t *plist;  IN: Property list to check
+        const char *name;       IN: Name of property to query
+ RETURNS
+    Directly returns the value of the property in the list
+ DESCRIPTION
+        This function directly returns the value of a property in a property
+    list.  Because this function is only able to just copy a particular property
+    value to the return value, there is no way to check for errors.  We attempt
+    to make certain that bad things don't happen by validating that the size of
+    the property is the same as the size of the return type, but that can't
+    catch all errors.
+        This function does call the user's 'get' callback routine still.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    No error checking!
+    Use with caution!
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hid_t
+H5P_peek_hid_t(H5P_genplist_t *plist, const char *name)
+{
+    hid_t ret_value;            /* return value */
+
+    FUNC_ENTER_NOAPI(H5P_peek_hid_t, FAIL);
+
+    assert(plist);
+    assert(name);
+
+    /* Get the value to return, don't worry about the return value, we can't return it */
+    H5P_get(plist,name,&ret_value);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_peek_hid_t() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_peek_voidp
+ PURPOSE
+    Internal routine to quickly retrieve the value of a property in a property list.
+ USAGE
+    void *H5P_peek_voidp(plist, name)
+        H5P_genplist_t *plist;  IN: Property list to check
+        const char *name;       IN: Name of property to query
+ RETURNS
+    Directly returns the value of the property in the list
+ DESCRIPTION
+        This function directly returns the value of a property in a property
+    list.  Because this function is only able to just copy a particular property
+    value to the return value, there is no way to check for errors.  We attempt
+    to make certain that bad things don't happen by validating that the size of
+    the property is the same as the size of the return type, but that can't
+    catch all errors.
+        This function does call the user's 'get' callback routine still.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    No error checking!
+    Use with caution!
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+void *
+H5P_peek_voidp(H5P_genplist_t *plist, const char *name)
+{
+    void * ret_value;            /* return value */
+
+    FUNC_ENTER_NOAPI(H5P_peek_voidp, NULL);
+
+    assert(plist);
+    assert(name);
+
+    /* Get the value to return, don't worry about the return value, we can't return it */
+    H5P_get(plist,name,&ret_value);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_peek_voidp() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_peek_size_t
+ PURPOSE
+    Internal routine to quickly retrieve the value of a property in a property list.
+ USAGE
+    hsize_t H5P_peek_size_t(plist, name)
+        H5P_genplist_t *plist;  IN: Property list to check
+        const char *name;       IN: Name of property to query
+ RETURNS
+    Directly returns the value of the property in the list
+ DESCRIPTION
+        This function directly returns the value of a property in a property
+    list.  Because this function is only able to just copy a particular property
+    value to the return value, there is no way to check for errors.  We attempt
+    to make certain that bad things don't happen by validating that the size of
+    the property is the same as the size of the return type, but that can't
+    catch all errors.
+        This function does call the user's 'get' callback routine still.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    No error checking!
+    Use with caution!
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+size_t
+H5P_peek_size_t(H5P_genplist_t *plist, const char *name)
+{
+    size_t ret_value;            /* return value */
+
+    FUNC_ENTER_NOAPI(H5P_peek_size_t, UFAIL);
+
+    assert(plist);
+    assert(name);
+
+    /* Get the value to return, don't worry about the return value, we can't return it */
+    H5P_get(plist,name,&ret_value);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_peek_size_t() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_get
+ PURPOSE
+    Internal routine to query the value of a property in a property list.
+ USAGE
+    herr_t H5P_get(plist, name, value)
+        H5P_genplist_t *plist;  IN: Property list to check
+        const char *name;       IN: Name of property to query
+        void *value;            OUT: Pointer to the buffer for the property value
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Retrieves a copy of the value for a property in a property list.  The
+    property name must exist or this routine will fail.  If there is a
+    'get' callback routine registered for this property, the copy of the
+    value of the property will first be passed to that routine and any changes
+    to the copy of the value will be used when returning the property value
+    from this routine.
+        If the 'get' callback routine returns an error, 'value' will not be
+    modified and this routine will return an error.  This routine may not be
+    called for zero-sized properties.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5P_get(H5P_genplist_t *plist, const char *name, void *value)
+{
+    H5P_genclass_t *tclass;     /* Temporary class pointer */
+    H5P_genprop_t *prop;        /* Temporary property pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5P_get, FAIL);
+
+    assert(plist);
+    assert(name);
+    assert(value);
+
+    /* Check if the property has been deleted */
+    if(H5SL_search(plist->del,name)!=NULL)
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, FAIL, "property doesn't exist");
+
+    /* Find property */
+    if((prop=H5SL_search(plist->props,name))!=NULL) {
+        /* Check for property size >0 */
+        if(prop->size==0)
+            HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "property has zero size");
+
+        /* Make a copy of the value and pass to 'get' callback */
+        if(prop->get!=NULL) {
+            void *tmp_value;            /* Temporary value for property */
+
+            /* Make a copy of the current value, in case the callback fails */
+            if (NULL==(tmp_value=H5MM_malloc(prop->size)))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed temporary property value");
+            HDmemcpy(tmp_value,prop->value,prop->size);
+
+            /* Call user's callback */
+            if((*(prop->get))(plist->plist_id,name,prop->size,tmp_value)<0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't get property value");
+
+            /* Copy new [possibly unchanged] value into return value */
+            HDmemcpy(value,tmp_value,prop->size);
+
+            /* Free the temporary value buffer */
+            H5MM_xfree(tmp_value);
+        } /* end if */
+        /* No 'get' callback, just copy value */
+        else
+            HDmemcpy(value,prop->value,prop->size);
+    } /* end if */
+    else {
+        /*
+         * Check if we should get class properties (up through list of parent classes also),
+         * & make property 'get' callback.
+         */
+        tclass=plist->pclass;
+        while(tclass!=NULL) {
+            if(tclass->nprops>0) {
+                /* Find the property in the class */
+                if((prop=H5SL_search(tclass->props,name))!=NULL) {
+                    /* Check for property size >0 */
+                    if(prop->size==0)
+                        HGOTO_ERROR(H5E_PLIST,H5E_BADVALUE,FAIL,"property has zero size");
+
+                    /* Call the 'get' callback, if there is one */
+                    if(prop->get!=NULL) {
+                        void *tmp_value;            /* Temporary value for property */
+
+                        /* Make a copy of the current value, in case the callback fails */
+                        if (NULL==(tmp_value=H5MM_malloc(prop->size)))
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed temporary property value");
+                        HDmemcpy(tmp_value,prop->value,prop->size);
+
+                        /* Call user's callback */
+                        if((*(prop->get))(plist->plist_id,name,prop->size,tmp_value)<0) {
+                            H5MM_xfree(tmp_value);
+                            HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't set property value");
+                        } /* end if */
+
+                        if(HDmemcmp(tmp_value,prop->value,prop->size)) {
+                            H5P_genprop_t *pcopy;  /* Copy of property to insert into skip list */
+
+                            /* Make a copy of the class's property */
+                            if((pcopy=H5P_dup_prop(prop,H5P_PROP_WITHIN_LIST))==NULL)
+                                HGOTO_ERROR(H5E_PLIST,H5E_CANTCOPY,FAIL,"Can't copy property");
+
+                            /* Copy new value into property value */
+                            HDmemcpy(pcopy->value,tmp_value,prop->size);
+
+                            /* Insert the changed property into the property list */
+                            if(H5P_add_prop(plist->props,pcopy)<0)
+                                HGOTO_ERROR (H5E_PLIST, H5E_CANTINSERT, FAIL,"Can't insert changed property into skip list");
+                        } /* end if */
+
+                        /* Copy new [possibly unchanged] value into return value */
+                        HDmemcpy(value,tmp_value,prop->size);
+
+                        /* Free the temporary value buffer */
+                        H5MM_xfree(tmp_value);
+                    } /* end if */
+                    /* No 'get' callback, just copy value */
+                    else
+                        HDmemcpy(value,prop->value,prop->size);
+
+                    /* Leave */
+                    HGOTO_DONE(SUCCEED);
+                } /* end while */
+            } /* end if */
+
+            /* Go up to parent class */
+            tclass=tclass->parent;
+        } /* end while */
+
+        /* If we get this far, then it wasn't in the list of changed properties,
+         * nor in the properties in the class hierarchy, indicate an error
+         */
+        HGOTO_ERROR(H5E_PLIST,H5E_NOTFOUND,FAIL,"can't find property in skip list");
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_get() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pget
+ PURPOSE
+    Routine to query the value of a property in a property list.
+ USAGE
+    herr_t H5Pget(plist_id, name, value)
+        hid_t plist_id;         IN: Property list to check
+        const char *name;       IN: Name of property to query
+        void *value;            OUT: Pointer to the buffer for the property value
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Retrieves a copy of the value for a property in a property list.  The
+    property name must exist or this routine will fail.  If there is a
+    'get' callback routine registered for this property, the copy of the
+    value of the property will first be passed to that routine and any changes
+    to the copy of the value will be used when returning the property value
+    from this routine.
+        If the 'get' callback routine returns an error, 'value' will not be
+    modified and this routine will return an error.  This routine may not be
+    called for zero-sized properties.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Pget(hid_t plist_id, const char *name, void *value)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget, FAIL);
+    H5TRACE3("e","isx",plist_id,name,value);
+
+    /* Check arguments. */
+    if(NULL == (plist = H5I_object_verify(plist_id, H5I_GENPROP_LST)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid property name");
+    if (value==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalied property value");
+
+    /* Go get the value */
+    if(H5P_get(plist,name,value)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to query property value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pget() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_remove
+ PURPOSE
+    Internal routine to remove a property from a property list.
+ USAGE
+    herr_t H5P_remove(plist, name)
+        H5P_genplist_t *plist;  IN: Property list to modify
+        const char *name;       IN: Name of property to remove
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Removes a property from a property list.  Both properties which were
+    in existance when the property list was created (i.e. properties registered
+    with H5Pregister) and properties added to the list after it was created
+    (i.e. added with H5Pinsert) may be removed from a property list.
+    Properties do not need to be removed a property list before the list itself
+    is closed, they will be released automatically when H5Pclose is called.
+    The 'close' callback for this property is called before the property is
+    release, if the callback exists.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5P_remove(hid_t plist_id, H5P_genplist_t *plist, const char *name)
+{
+    H5P_genclass_t *tclass;     /* Temporary class pointer */
+    H5P_genprop_t *prop;        /* Temporary property pointer */
+    char *del_name;             /* Pointer to deleted name */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5P_remove,FAIL);
+
+    assert(plist);
+    assert(name);
+
+    /* Indicate that the property isn't in the list if it has been deleted already */
+    if(H5SL_search(plist->del,name)!=NULL)
+        HGOTO_ERROR(H5E_PLIST,H5E_NOTFOUND,FAIL,"can't find property in skip list");
+
+    /* Get the property node from the changed property skip list */
+    if((prop=H5SL_search(plist->props,name))!=NULL) {
+        /* Pass value to 'close' callback, if it exists */
+        if(prop->del!=NULL) {
+            /* Call user's callback */
+            if((*(prop->del))(plist_id,name,prop->size,prop->value)<0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't close property value");
+        } /* end if */
+
+        /* Duplicate string for insertion into new deleted property skip list */
+        if((del_name=H5MM_xstrdup(name))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,FAIL,"memory allocation failed");
+
+        /* Insert property name into deleted list */
+        if(H5SL_insert(plist->del,del_name,del_name)<0)
+            HGOTO_ERROR(H5E_PLIST,H5E_CANTINSERT,FAIL,"can't insert property into deleted skip list");
+
+        /* Remove the property from the skip list */
+        if(H5SL_remove(plist->props,prop->name)==NULL)
+            HGOTO_ERROR(H5E_PLIST,H5E_CANTDELETE,FAIL,"can't remove property from skip list");
+
+        /* Free the property, ignoring return value, nothing we can do */
+        H5P_free_prop(prop);
+
+        /* Decrement the number of properties in list */
+        plist->nprops--;
+    } /* end if */
+    /* Walk through all the properties in the class hierarchy, looking for the property */
+    else {
+        /*
+         * Check if we should delete class properties (up through list of parent classes also),
+         * & make property 'delete' callback.
+         */
+        tclass=plist->pclass;
+        while(tclass!=NULL) {
+            if(tclass->nprops>0) {
+                /* Find the property in the class */
+                if((prop=H5P_find_prop_pclass(tclass,name))!=NULL) {
+                    /* Pass value to 'del' callback, if it exists */
+                    if(prop->del!=NULL) {
+                        void *tmp_value;       /* Temporary value buffer */
+
+                        /* Allocate space for a temporary copy of the property value */
+                        if (NULL==(tmp_value=H5MM_malloc(prop->size)))
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for temporary property value");
+                        HDmemcpy(tmp_value,prop->value,prop->size);
+
+                        /* Call user's callback */
+                        if((*(prop->del))(plist_id,name,prop->size,tmp_value)<0) {
+                            H5MM_xfree(tmp_value);
+                            HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't close property value");
+                        } /* end if */
+
+                        /* Release the temporary value buffer */
+                        H5MM_xfree(tmp_value);
+                    } /* end if */
+
+                    /* Duplicate string for insertion into new deleted property skip list */
+                    if((del_name=H5MM_xstrdup(name))==NULL)
+                        HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,FAIL,"memory allocation failed");
+
+                    /* Insert property name into deleted list */
+                    if(H5SL_insert(plist->del,del_name,del_name)<0)
+                        HGOTO_ERROR(H5E_PLIST,H5E_CANTINSERT,FAIL,"can't insert property into deleted skip list");
+
+                    /* Decrement the number of properties in list */
+                    plist->nprops--;
+
+                    /* Leave */
+                    HGOTO_DONE(SUCCEED);
+                } /* end while */
+            } /* end if */
+
+            /* Go up to parent class */
+            tclass=tclass->parent;
+        } /* end while */
+
+        /* If we get this far, then it wasn't in the list of changed properties,
+         * nor in the properties in the class hierarchy, indicate an error
+         */
+        HGOTO_ERROR(H5E_PLIST,H5E_NOTFOUND,FAIL,"can't find property in skip list");
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_remove() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Premove
+ PURPOSE
+    Routine to remove a property from a property list.
+ USAGE
+    herr_t H5Premove(plist_id, name)
+        hid_t plist_id;         IN: Property list to modify
+        const char *name;       IN: Name of property to remove
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Removes a property from a property list.  Both properties which were
+    in existance when the property list was created (i.e. properties registered
+    with H5Pregister) and properties added to the list after it was created
+    (i.e. added with H5Pinsert) may be removed from a property list.
+    Properties do not need to be removed a property list before the list itself
+    is closed, they will be released automatically when H5Pclose is called.
+    The 'close' callback for this property is called before the property is
+    release, if the callback exists.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Premove(hid_t plist_id, const char *name)
+{
+    H5P_genplist_t	*plist;    /* Property list to modify */
+    herr_t ret_value;           /* return value */
+
+    FUNC_ENTER_API(H5Premove, FAIL);
+    H5TRACE2("e","is",plist_id,name);
+
+    /* Check arguments. */
+    if (NULL == (plist = H5I_object_verify(plist_id, H5I_GENPROP_LST)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid property name");
+
+    /* Create the new property list class */
+    if ((ret_value=H5P_remove(plist_id,plist,name))<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTDELETE, FAIL, "unable to remove property");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Premove() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_copy_prop_plist
+ PURPOSE
+    Internal routine to copy a property from one list to another
+ USAGE
+    herr_t H5P_copy_prop_plist(dst_plist, src_plist, name)
+        hid_t dst_id;               IN: ID of destination property list or class
+        hid_t src_id;               IN: ID of source property list or class
+        const char *name;           IN: Name of property to copy
+ RETURNS
+    Success: non-negative value.
+    Failure: negative value.
+ DESCRIPTION
+    Copies a property from one property list to another.
+
+    If a property is copied from one list to another, the property will be
+    first deleted from the destination list (generating a call to the 'close'
+    callback for the property, if one exists) and then the property is copied
+    from the source list to the destination list (generating a call to the
+    'copy' callback for the property, if one exists).
+
+    If the property does not exist in the destination list, this call is
+    equivalent to calling H5Pinsert and the 'create' callback will be called
+    (if such a callback exists for the property).
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5P_copy_prop_plist(hid_t dst_id, hid_t src_id, const char *name)
+{
+    H5P_genplist_t *dst_plist;      /* Pointer to destination property list */
+    H5P_genplist_t *src_plist;      /* Pointer to source property list */
+    H5P_genprop_t *prop;            /* Temporary property pointer */
+    H5P_genprop_t *new_prop=NULL;   /* Pointer to new property */
+    herr_t ret_value=SUCCEED;       /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_copy_prop_plist);
+
+    assert(name);
+
+    /* Get the objects to operate on */
+    if(NULL == (src_plist = H5I_object(src_id)) || NULL == (dst_plist = H5I_object(dst_id)))
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, FAIL, "property object doesn't exist");
+
+    /* If the property exists in the destination alread */
+    if(H5P_find_prop_plist(dst_plist,name)!=NULL) {
+        /* Delete the property from the destination list, calling the 'close' callback if necessary */
+        if(H5P_remove(dst_id,dst_plist,name)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTDELETE, FAIL, "unable to remove property");
+
+        /* Get the pointer to the source property */
+        prop=H5P_find_prop_plist(src_plist,name);
+
+        /* Make a copy of the source property */
+        if((new_prop=H5P_dup_prop(prop,H5P_PROP_WITHIN_LIST))==NULL)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTCOPY, FAIL,"Can't copy property");
+
+        /* Call property copy callback, if it exists */
+        if(new_prop->copy) {
+            if((new_prop->copy)(new_prop->name,new_prop->size,new_prop->value)<0)
+                HGOTO_ERROR (H5E_PLIST, H5E_CANTCOPY, FAIL,"Can't copy property");
+        } /* end if */
+
+        /* Insert the initialized property into the property list */
+        if(H5P_add_prop(dst_plist->props,new_prop)<0)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTINSERT, FAIL,"Can't insert property into list");
+
+        /* Increment the number of properties in list */
+        dst_plist->nprops++;
+    } /* end if */
+    /* If not, get the information required to do an H5Pinsert with the property into the destination list */
+    else {
+        /* Get the pointer to the source property */
+        prop=H5P_find_prop_plist(src_plist,name);
+
+        /* Create property object from parameters */
+        if((new_prop=H5P_create_prop(prop->name,prop->size,H5P_PROP_WITHIN_LIST,prop->value,prop->create,prop->set,prop->get,prop->del,prop->copy,prop->cmp,prop->close))==NULL)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTCREATE, FAIL,"Can't create property");
+
+        /* Call property creation callback, if it exists */
+        if(new_prop->create) {
+            if((new_prop->create)(new_prop->name,new_prop->size,new_prop->value)<0)
+                HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, FAIL,"Can't initialize property");
+        } /* end if */
+
+        /* Insert property into property list class */
+        if(H5P_add_prop(dst_plist->props,new_prop)<0)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTINSERT, FAIL,"Can't insert property into class");
+
+        /* Increment property count for class */
+        dst_plist->nprops++;
+
+    } /* end else */
+
+done:
+    /* Cleanup, if necessary */
+    if(ret_value<0) {
+        if(new_prop!=NULL)
+            H5P_free_prop(new_prop);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_copy_prop_plist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_copy_prop_pclass
+ PURPOSE
+    Internal routine to copy a property from one class to another
+ USAGE
+    herr_t H5P_copy_prop_pclass(dst_pclass, src_pclass, name)
+        H5P_genclass_t	*dst_pclass;    IN: Pointer to destination class
+        H5P_genclass_t	*src_pclass;    IN: Pointer to source class
+        const char *name;               IN: Name of property to copy
+ RETURNS
+    Success: non-negative value.
+    Failure: negative value.
+ DESCRIPTION
+    Copies a property from one property class to another.
+
+    If a property is copied from one class to another, all the property
+    information will be first deleted from the destination class and then the
+    property information will be copied from the source class into the
+    destination class.
+
+    If the property does not exist in the destination class or list, this call
+    is equivalent to calling H5Pregister.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5P_copy_prop_pclass(H5P_genclass_t *dst_pclass, H5P_genclass_t *src_pclass, const char *name)
+{
+    H5P_genprop_t *prop;            /* Temporary property pointer */
+    herr_t ret_value=SUCCEED;       /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_copy_prop_pclass);
+
+    assert(dst_pclass);
+    assert(src_pclass);
+    assert(name);
+
+    /* If the property exists in the destination already */
+    if(H5P_exist_pclass(dst_pclass,name)) {
+        /* Delete the old property from the destination class */
+        if(H5P_unregister(dst_pclass,name)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTDELETE, FAIL, "unable to remove property");
+    } /* end if */
+
+    /* Get the property from the source */
+    if((prop=H5P_find_prop_pclass(src_pclass,name))==NULL)
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, FAIL, "unable to locate property");
+
+    /* Register the property into the destination */
+    if(H5P_register(dst_pclass,name,prop->size,prop->value,prop->create,prop->set,prop->get,prop->del,prop->copy,prop->cmp,prop->close)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTDELETE, FAIL, "unable to remove property");
+
+done:
+    /* Cleanup, if necessary */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_copy_prop_pclass() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pcopy_prop
+ PURPOSE
+    Routine to copy a property from one list or class to another
+ USAGE
+    herr_t H5Pcopy_prop(dst_id, src_id, name)
+        hid_t dst_id;               IN: ID of destination property list or class
+        hid_t src_id;               IN: ID of source property list or class
+        const char *name;           IN: Name of property to copy
+ RETURNS
+    Success: non-negative value.
+    Failure: negative value.
+ DESCRIPTION
+    Copies a property from one property list or class to another.
+
+    If a property is copied from one class to another, all the property
+    information will be first deleted from the destination class and then the
+    property information will be copied from the source class into the
+    destination class.
+
+    If a property is copied from one list to another, the property will be
+    first deleted from the destination list (generating a call to the 'close'
+    callback for the property, if one exists) and then the property is copied
+    from the source list to the destination list (generating a call to the
+    'copy' callback for the property, if one exists).
+
+    If the property does not exist in the destination class or list, this call
+    is equivalent to calling H5Pregister or H5Pinsert (for a class or list, as
+    appropriate) and the 'create' callback will be called in the case of the
+    property being copied into a list (if such a callback exists for the
+    property).
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Pcopy_prop(hid_t dst_id, hid_t src_id, const char *name)
+{
+    void *src_obj, *dst_obj;    /* Property objects to copy between */
+    herr_t ret_value=SUCCEED;      /* return value */
+
+    FUNC_ENTER_API(H5Pcopy_prop, FAIL);
+    H5TRACE3("e","iis",dst_id,src_id,name);
+
+    /* Check arguments. */
+    if ((H5I_GENPROP_LST != H5I_get_type(src_id) && H5I_GENPROP_CLS != H5I_get_type(src_id))
+            || (H5I_GENPROP_LST != H5I_get_type(dst_id) && H5I_GENPROP_CLS != H5I_get_type(dst_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not property objects");
+    if (H5I_get_type(src_id) != H5I_get_type(dst_id))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not the same kind of property objects");
+    if (!name || !*name)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no name given");
+    if(NULL == (src_obj = H5I_object(src_id)) || NULL == (dst_obj = H5I_object(dst_id)))
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, FAIL, "property object doesn't exist");
+
+    /* Compare property lists */
+    if(H5I_GENPROP_LST == H5I_get_type(src_id)) {
+        if(H5P_copy_prop_plist(dst_id,src_id,name)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTCOPY, FAIL, "can't copy property between lists");
+    } /* end if */
+    /* Must be property classes */
+    else {
+        if(H5P_copy_prop_pclass(dst_obj,src_obj,name)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTCOPY, FAIL, "can't copy property between classes");
+    } /* end else */
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pcopy_prop() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_unregister
+ PURPOSE
+    Internal routine to remove a property from a property list class.
+ USAGE
+    herr_t H5P_unregister(pclass, name)
+        H5P_genclass_t *pclass; IN: Property list class to modify
+        const char *name;       IN: Name of property to remove
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Removes a property from a property list class.  Future property lists
+    created of that class will not contain this property.  Existing property
+    lists containing this property are not affected.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5P_unregister(H5P_genclass_t *pclass, const char *name)
+{
+    H5P_genprop_t *prop;        /* Temporary property pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_unregister);
+
+    assert(pclass);
+    assert(name);
+
+    /* Get the property node from the skip list */
+    if((prop=H5SL_search(pclass->props,name))==NULL)
+        HGOTO_ERROR(H5E_PLIST,H5E_NOTFOUND,FAIL,"can't find property in skip list");
+
+    /* Remove the property from the skip list */
+    if(H5SL_remove(pclass->props,prop->name)==NULL)
+        HGOTO_ERROR(H5E_PLIST,H5E_CANTDELETE,FAIL,"can't remove property from skip list");
+
+    /* Free the property, ignoring return value, nothing we can do */
+    H5P_free_prop(prop);
+
+    /* Decrement the number of registered properties in class */
+    pclass->nprops--;
+
+    /* Update the revision for the class */
+    pclass->revision = H5P_GET_NEXT_REV;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_unregister() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Punregister
+ PURPOSE
+    Routine to remove a property from a property list class.
+ USAGE
+    herr_t H5Punregister(pclass_id, name)
+        hid_t pclass_id;         IN: Property list class to modify
+        const char *name;       IN: Name of property to remove
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Removes a property from a property list class.  Future property lists
+    created of that class will not contain this property.  Existing property
+    lists containing this property are not affected.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Punregister(hid_t pclass_id, const char *name)
+{
+    H5P_genclass_t	*pclass;   /* Property list class to modify */
+    herr_t ret_value;           /* return value */
+
+    FUNC_ENTER_API(H5Punregister, FAIL);
+    H5TRACE2("e","is",pclass_id,name);
+
+    /* Check arguments. */
+    if (NULL == (pclass = H5I_object_verify(pclass_id, H5I_GENPROP_CLS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list class");
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid property name");
+
+    /* Remove the property list from class */
+    if ((ret_value=H5P_unregister(pclass,name))<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to remove property from class");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Punregister() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_close
+ PURPOSE
+    Internal routine to close a property list.
+ USAGE
+    herr_t H5P_close(plist)
+        H5P_genplist_t *plist;  IN: Property list to close
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Closes a property list.  If a 'close' callback exists for the property
+    list class, it is called before the property list is destroyed.  If 'close'
+    callbacks exist for any individual properties in the property list, they are
+    called after the class 'close' callback.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+        The property list class 'close' callback routine is not called from
+    here, it must have been check for and called properly prior to this routine
+    being called
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5P_close(void *_plist)
+{
+    H5P_genclass_t *tclass;         /* Temporary class pointer */
+    H5P_genplist_t *plist=(H5P_genplist_t *)_plist;
+    H5SL_t *seen=NULL;              /* Skip list to hold names of properties already seen */
+    size_t nseen;                   /* Number of items 'seen' */
+    hbool_t has_parent_class;       /* Flag to indicate that this property list's class has a parent */
+    size_t ndel;                    /* Number of items deleted */
+    H5SL_node_t *curr_node;         /* Current node in skip list */
+    H5P_genprop_t *tmp;             /* Temporary pointer to properties */
+    unsigned make_cb=0;             /* Operator data for property free callback */
+    herr_t ret_value=SUCCEED;       /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_close);
+
+    assert(plist);
+
+    /* Make call to property list class close callback, if needed */
+    if(plist->class_init!=0 && plist->pclass->close_func!=NULL) {
+        /* Call user's "close" callback function, ignoring return value */
+        (plist->pclass->close_func)(plist->plist_id,plist->pclass->close_data);
+    } /* end if */
+
+    /* Create the skip list to hold names of properties already seen
+     * (This prevents a property in the class hierarchy from having it's
+     * 'close' callback called, if a property in the class hierarchy has
+     * already been seen)
+     */
+    if((seen=H5SL_create(H5SL_TYPE_STR,0.5,H5P_DEFAULT_SKIPLIST_HEIGHT))==NULL)
+        HGOTO_ERROR(H5E_PLIST,H5E_CANTCREATE,FAIL,"can't create skip list for seen properties");
+    nseen=0;
+
+    /* Walk through the changed properties in the list */
+    if(H5SL_count(plist->props)>0) {
+        curr_node=H5SL_first(plist->props);
+        while(curr_node!=NULL) {
+            /* Get pointer to property from node */
+            tmp=H5SL_item(curr_node);
+
+            /* Call property close callback, if it exists */
+            if(tmp->close) {
+                /* Call the 'close' callback */
+                (tmp->close)(tmp->name,tmp->size,tmp->value);
+            } /* end if */
+
+            /* Add property name to "seen" list */
+            if(H5SL_insert(seen,tmp->name,tmp->name)<0)
+                HGOTO_ERROR(H5E_PLIST,H5E_CANTINSERT,FAIL,"can't insert property into seen skip list");
+            nseen++;
+
+            /* Get the next property node in the skip list */
+            curr_node=H5SL_next(curr_node);
+        } /* end while */
+    } /* end if */
+
+    /* Determine number of deleted items from property list */
+    ndel=H5SL_count(plist->del);
+
+    /*
+     * Check if we should remove class properties (up through list of parent classes also),
+     * initialize each with default value & make property 'remove' callback.
+     */
+    tclass=plist->pclass;
+    has_parent_class=(tclass!=NULL && tclass->parent!=NULL && tclass->parent->nprops>0);
+    while(tclass!=NULL) {
+        if(tclass->nprops>0) {
+            /* Walk through the properties in the class */
+            curr_node=H5SL_first(tclass->props);
+            while(curr_node!=NULL) {
+                /* Get pointer to property from node */
+                tmp=H5SL_item(curr_node);
+
+                /* Only "delete" properties we haven't seen before
+                 * and that haven't already been deleted
+                 */
+                if((nseen==0 || H5SL_search(seen,tmp->name)==NULL) &&
+                        (ndel==0 || H5SL_search(plist->del,tmp->name)==NULL)) {
+
+                    /* Call property close callback, if it exists */
+                    if(tmp->close) {
+                        void *tmp_value;       /* Temporary value buffer */
+
+                        /* Allocate space for a temporary copy of the property value */
+                        if (NULL==(tmp_value=H5MM_malloc(tmp->size)))
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for temporary property value");
+                        HDmemcpy(tmp_value,tmp->value,tmp->size);
+
+                        /* Call the 'close' callback */
+                        (tmp->close)(tmp->name,tmp->size,tmp_value);
+
+                        /* Release the temporary value buffer */
+                        H5MM_xfree(tmp_value);
+                    } /* end if */
+
+                    /* Add property name to "seen" list, if we have other classes to work on */
+                    if(has_parent_class) {
+                        if(H5SL_insert(seen,tmp->name,tmp->name)<0)
+                            HGOTO_ERROR(H5E_PLIST,H5E_CANTINSERT,FAIL,"can't insert property into seen skip list");
+                        nseen++;
+                    } /* end if */
+                } /* end if */
+
+                /* Get the next property node in the skip list */
+                curr_node=H5SL_next(curr_node);
+            } /* end while */
+        } /* end if */
+
+        /* Go up to parent class */
+        tclass=tclass->parent;
+    } /* end while */
+
+    /* Decrement class's dependant property list value! */
+    if(H5P_access_class(plist->pclass,H5P_MOD_DEC_LST)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, FAIL, "Can't decrement class ref count");
+
+    /* Free the list of 'seen' properties */
+    H5SL_close(seen);
+    seen=NULL;
+
+    /* Free the list of deleted property names */
+    H5SL_destroy(plist->del,H5P_free_del_name_cb,NULL);
+
+    /* Free the properties */
+    H5SL_destroy(plist->props,H5P_free_prop_cb,&make_cb);
+
+    /* Destroy property list object */
+    H5FL_FREE(H5P_genplist_t,plist);
+
+done:
+    /* Release the skip list of 'seen' properties */
+    if(seen!=NULL)
+        H5SL_close(seen);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_close() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pclose
+ PURPOSE
+    Routine to close a property list.
+ USAGE
+    herr_t H5Pclose(plist_id)
+        hid_t plist_id;       IN: Property list to close
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+        Closes a property list.  If a 'close' callback exists for the property
+    list class, it is called before the property list is destroyed.  If 'close'
+    callbacks exist for any individual properties in the property list, they are
+    called after the class 'close' callback.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Pclose(hid_t plist_id)
+{
+    herr_t ret_value=SUCCEED;      /* return value */
+
+    FUNC_ENTER_API(H5Pclose, FAIL);
+    H5TRACE1("e","i",plist_id);
+
+    if (plist_id==H5P_DEFAULT)
+        HGOTO_DONE(SUCCEED);
+
+    /* Check arguments. */
+    if (H5I_GENPROP_LST != H5I_get_type(plist_id))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+
+    /* Close the property list */
+    if (H5I_dec_ref(plist_id) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTFREE, FAIL, "can't close");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pclose() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_get_class_name
+ PURPOSE
+    Internal routine to query the name of a generic property list class
+ USAGE
+    char *H5P_get_class_name(pclass)
+        H5P_genclass_t *pclass;    IN: Property list class to check
+ RETURNS
+    Success: Pointer to a malloc'ed string containing the class name
+    Failure: NULL
+ DESCRIPTION
+        This routine retrieves the name of a generic property list class.
+    The pointer to the name must be free'd by the user for successful calls.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+char *
+H5P_get_class_name(H5P_genclass_t *pclass)
+{
+    char *ret_value;      /* return value */
+
+    FUNC_ENTER_NOAPI(H5P_get_class_name, NULL);
+
+    assert(pclass);
+
+    /* Get class name */
+    ret_value=H5MM_xstrdup(pclass->name);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_get_class_name() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pget_class_name
+ PURPOSE
+    Routine to query the name of a generic property list class
+ USAGE
+    char *H5Pget_class_name(pclass_id)
+        hid_t pclass_id;         IN: Property class to query
+ RETURNS
+    Success: Pointer to a malloc'ed string containing the class name
+    Failure: NULL
+ DESCRIPTION
+        This routine retrieves the name of a generic property list class.
+    The pointer to the name must be free'd by the user for successful calls.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+char *
+H5Pget_class_name(hid_t pclass_id)
+{
+    H5P_genclass_t	*pclass;    /* Property class to query */
+    char *ret_value;       /* return value */
+
+    FUNC_ENTER_API(H5Pget_class_name, NULL);
+
+    /* Check arguments. */
+    if (NULL == (pclass = H5I_object_verify(pclass_id, H5I_GENPROP_CLS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a property class");
+
+    /* Get the property list class name */
+    if ((ret_value=H5P_get_class_name(pclass))==NULL)
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, NULL, "unable to query name of class");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pget_class_name() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_get_class_path
+ PURPOSE
+    Internal routine to query the full path of a generic property list class
+ USAGE
+    char *H5P_get_class_name(pclass)
+        H5P_genclass_t *pclass;    IN: Property list class to check
+ RETURNS
+    Success: Pointer to a malloc'ed string containing the full path of class
+    Failure: NULL
+ DESCRIPTION
+        This routine retrieves the full path name of a generic property list
+    class, starting with the root of the class hierarchy.
+    The pointer to the name must be free'd by the user for successful calls.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+char *
+H5P_get_class_path(H5P_genclass_t *pclass)
+{
+    char *par_path;     /* Parent class's full path */
+    size_t par_path_len;/* Parent class's full path's length */
+    size_t my_path_len; /* This class's name's length */
+    char *ret_value;    /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_get_class_path);
+
+    assert(pclass);
+
+    /* Recursively build the full path */
+    if(pclass->parent!=NULL) {
+        /* Get the parent class's path */
+        par_path=H5P_get_class_path(pclass->parent);
+        if(par_path!=NULL) {
+            /* Get the string lengths we need to allocate space */
+            par_path_len=HDstrlen(par_path);
+            my_path_len=HDstrlen(pclass->name);
+
+            /* Allocate enough space for the parent class's path, plus the '/'
+             * separator, this class's name and the string terminator
+             */
+            if(NULL==(ret_value=H5MM_malloc(par_path_len+1+my_path_len+1)))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for class name");
+
+            /* Build the full path for this class */
+            HDstrcpy(ret_value,par_path);
+            HDstrcat(ret_value,"/");
+            HDstrcat(ret_value,pclass->name);
+
+            /* Free the parent class's path */
+            H5MM_xfree(par_path);
+        } /* end if */
+        else
+            ret_value=H5MM_xstrdup(pclass->name);
+    } /* end if */
+    else
+        ret_value=H5MM_xstrdup(pclass->name);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_get_class_path() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_open_class_path
+ PURPOSE
+    Internal routine to open [a copy of] a class with its full path name
+ USAGE
+    H5P_genclass_t *H5P_open_class_path(path)
+        const char *path;       IN: Full path name of class to open [copy of]
+ RETURNS
+    Success: Pointer to a generic property class object
+    Failure: NULL
+ DESCRIPTION
+    This routine opens [a copy] of the class indicated by the full path.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5P_genclass_t *
+H5P_open_class_path(const char *path)
+{
+    char *tmp_path=NULL;        /* Temporary copy of the path */
+    char *curr_name;            /* Pointer to current component of path name */
+    char *delimit;              /* Pointer to path delimiter during traversal */
+    H5P_genclass_t *curr_class; /* Pointer to class during path traversal */
+    H5P_genclass_t *ret_value;  /* Return value */
+    H5P_check_class_t check_info;   /* Structure to hold the information for checking duplicate names */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_open_class_path);
+
+    assert(path);
+
+    /* Duplicate the path to use */
+    tmp_path=HDstrdup(path);
+    assert(tmp_path);
+
+    /* Find the generic property class with this full path */
+    curr_name=tmp_path;
+    curr_class=NULL;
+    while((delimit=HDstrchr(curr_name,'/'))!=NULL) {
+        /* Change the delimiter to terminate the string */
+        *delimit='\0';
+
+        /* Set up the search structure */
+        check_info.parent=curr_class;
+        check_info.name=curr_name;
+
+        /* Find the class with this name & parent by iterating over the open classes */
+        if((curr_class=H5I_search(H5I_GENPROP_CLS,H5P_check_class,&check_info))==NULL)
+            HGOTO_ERROR (H5E_PLIST, H5E_NOTFOUND, NULL, "can't locate class");
+
+        /* Advance the pointer in the path to the start of the next component */
+        curr_name=delimit+1;
+    } /* end while */
+
+    /* Should be pointing to the last component in the path name now... */
+
+    /* Set up the search structure */
+    check_info.parent=curr_class;
+    check_info.name=curr_name;
+
+    /* Find the class with this name & parent by iterating over the open classes */
+    if((curr_class=H5I_search(H5I_GENPROP_CLS,H5P_check_class,&check_info))==NULL)
+        HGOTO_ERROR (H5E_PLIST, H5E_NOTFOUND, NULL, "can't locate class");
+
+    /* Copy it */
+    if((ret_value=H5P_copy_pclass(curr_class))==NULL)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTCOPY, NULL, "can't copy property class");
+
+done:
+    /* Free the duplicated path */
+    H5MM_xfree(tmp_path);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_open_class_path() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_get_class_parent
+ PURPOSE
+    Internal routine to query the parent class of a generic property class
+ USAGE
+    H5P_genclass_t *H5P_get_class_parent(pclass)
+        H5P_genclass_t *pclass;    IN: Property class to check
+ RETURNS
+    Success: Pointer to the parent class of a property class
+    Failure: NULL
+ DESCRIPTION
+    This routine retrieves a pointer to the parent class for a property class.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5P_genclass_t *
+H5P_get_class_parent(H5P_genclass_t *pclass)
+{
+    H5P_genclass_t *ret_value;      /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5P_get_class_parent);
+
+    assert(pclass);
+
+    /* Get property size */
+    ret_value=pclass->parent;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_get_class_parent() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pget_class_parent
+ PURPOSE
+    routine to query the parent class of a generic property class
+ USAGE
+    hid_t H5Pget_class_parent(pclass_id)
+        hid_t pclass_id;         IN: Property class to query
+ RETURNS
+    Success: ID of parent class object
+    Failure: NULL
+ DESCRIPTION
+    This routine retrieves an ID for the parent class of a property class.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hid_t
+H5Pget_class_parent(hid_t pclass_id)
+{
+    H5P_genclass_t	*pclass;    /* Property class to query */
+    H5P_genclass_t	*parent=NULL;   /* Parent's property class */
+    hid_t ret_value;       /* return value */
+
+    FUNC_ENTER_API(H5Pget_class_parent, FAIL);
+    H5TRACE1("i","i",pclass_id);
+
+    /* Check arguments. */
+    if (NULL == (pclass = H5I_object_verify(pclass_id, H5I_GENPROP_CLS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property class");
+
+    /* Retrieve the property class's parent */
+    if ((parent=H5P_get_class_parent(pclass))==NULL)
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, FAIL, "unable to query class of property list");
+
+    /* Increment the outstanding references to the class object */
+    if(H5P_access_class(parent,H5P_MOD_INC_REF)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTINIT, FAIL,"Can't increment class ID ref count");
+
+    /* Get an atom for the class */
+    if ((ret_value = H5I_register(H5I_GENPROP_CLS, parent))<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to atomize property list class");
+
+done:
+    if (ret_value<0 && parent)
+        H5P_close_class(parent);
+
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pget_class_parent() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_close_class
+ PURPOSE
+    Internal routine to close a property list class.
+ USAGE
+    herr_t H5P_close_class(class)
+        H5P_genclass_t *class;  IN: Property list class to close
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Releases memory and de-attach a class from the property list class hierarchy.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5P_close_class(void *_pclass)
+{
+    H5P_genclass_t *pclass=(H5P_genclass_t *)_pclass;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_close_class);
+
+    assert(pclass);
+
+    /* Decrement the reference count & check if the object should go away */
+    if(H5P_access_class(pclass,H5P_MOD_DEC_REF)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_NOTFOUND, FAIL, "Can't decrement ID ref count");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_close_class() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Pclose_class
+ PURPOSE
+    Close a property list class.
+ USAGE
+    herr_t H5Pclose_class(cls_id)
+        hid_t cls_id;       IN: Property list class ID to class
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Releases memory and de-attach a class from the property list class hierarchy.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Pclose_class(hid_t cls_id)
+{
+    hid_t	ret_value = SUCCEED;    /* Return value			*/
+
+    FUNC_ENTER_API(H5Pclose_class, FAIL);
+    H5TRACE1("e","i",cls_id);
+
+    /* Check arguments */
+    if (H5I_GENPROP_CLS != H5I_get_type(cls_id))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list class");
+
+    /* Close the property list class */
+    if (H5I_dec_ref(cls_id) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTFREE, FAIL, "can't close");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Pclose_class() */

Added: packages/hdf5/branches/upstream/current/src/H5Pdcpl.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Pdcpl.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Pdcpl.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1724 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5P_PACKAGE		/*suppress error about including H5Ppkg	  */
+
+
+/* Private header files */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dprivate.h"		/* Datasets				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Ppkg.h"		/* Property lists		  	*/
+#include "H5Zprivate.h"		/* Data filters				*/
+
+#ifdef H5_HAVE_FILTER_SZIP
+#ifdef H5_HAVE_SZLIB_H
+#   include "szlib.h"
+#endif /* H5_HAVE_SZLIB_H */
+#endif /* H5_HAVE_FILTER_SZIP */
+
+/* Local datatypes */
+
+/* Static function prototypes */
+static herr_t H5P_set_layout(H5P_genplist_t *plist, H5D_layout_t layout);
+
+
+/*-------------------------------------------------------------------------
+ * Function:  H5P_set_layout
+ *
+ * Purpose:   Sets the layout of raw data in the file.
+ *
+ * Return:    Non-negative on success/Negative on failure
+ *
+ * Programmer:        Quincey Koziol
+ *            Tuesday, November 23, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5P_set_layout(H5P_genplist_t *plist, H5D_layout_t layout)
+{
+    unsigned alloc_time_state;  /* State of allocation time property */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5P_set_layout);
+
+    /* Get the allocation time state */
+    if(H5P_get(plist, H5D_CRT_ALLOC_TIME_STATE_NAME, &alloc_time_state) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set space allocation time");
+
+    /* If we still have the "default" allocation time, change it according to the new layout */
+    if(alloc_time_state) {
+        H5D_alloc_time_t alloc_time;    /* Space allocation time */
+
+        /* Set the default based on layout */
+        switch(layout) {
+            case H5D_COMPACT:
+                alloc_time=H5D_ALLOC_TIME_EARLY;
+                break;
+
+            case H5D_CONTIGUOUS:
+                alloc_time=H5D_ALLOC_TIME_LATE;
+                break;
+
+            case H5D_CHUNKED:
+                alloc_time=H5D_ALLOC_TIME_INCR;
+                break;
+
+            default:
+                HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unknown layou t type")
+        } /* end switch */
+
+        /* Set new allocation time */
+        if(H5P_set(plist, H5D_CRT_ALLOC_TIME_NAME, &alloc_time) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set space allocat ion time");
+    } /* end if */
+
+    /* Set layout value */
+    if(H5P_set(plist, H5D_CRT_LAYOUT_NAME, &layout) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't set layout");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5P_set_layout() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_layout
+ *
+ * Purpose:	Sets the layout of raw data in the file.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, January  6, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to check parameter and set property for
+ *              generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_layout(hid_t plist_id, H5D_layout_t layout)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_layout, FAIL);
+    H5TRACE2("e","iDl",plist_id,layout);
+
+    /* Check arguments */
+    if (layout < 0 || layout >= H5D_NLAYOUTS)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "raw data layout method is not valid");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set value */
+    if(H5P_set_layout (plist, layout) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't set layout");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_layout
+ *
+ * Purpose:	Retrieves layout type of a dataset creation property list.
+ *
+ * Return:	Success:	The layout type
+ *
+ *		Failure:	H5D_LAYOUT_ERROR (negative)
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to check parameter and get property for
+ *              generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+H5D_layout_t
+H5Pget_layout(hid_t plist_id)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    H5D_layout_t   ret_value=H5D_LAYOUT_ERROR;
+
+    FUNC_ENTER_API(H5Pget_layout, H5D_LAYOUT_ERROR);
+    H5TRACE1("Dl","i",plist_id);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, H5D_LAYOUT_ERROR, "can't find object for ID");
+
+    /* Get value */
+    if(H5P_get(plist, H5D_CRT_LAYOUT_NAME, &ret_value) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, H5D_LAYOUT_ERROR, "can't get layout");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_chunk
+ *
+ * Purpose:	Sets the number of dimensions and the size of each chunk to
+ *		the values specified.  The dimensionality of the chunk should
+ *		match the dimensionality of the data space.
+ *
+ *		As a side effect, the layout method is changed to
+ *		H5D_CHUNKED.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, January  6, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to check parameter and set property for
+ *              generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_chunk(hid_t plist_id, int ndims, const hsize_t dim[/*ndims*/])
+{
+    int			    i;
+    size_t real_dims[H5O_LAYOUT_NDIMS]; /* Full-sized array to hold chunk dims */
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_chunk, FAIL);
+    H5TRACE3("e","iIs*[a1]h",plist_id,ndims,dim);
+
+    /* Check arguments */
+    if (ndims <= 0)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "chunk dimensionality must be positive");
+    if (ndims > H5S_MAX_RANK)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "chunk dimensionality is too large");
+    if (!dim)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no chunk dimensions specified");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Initialize chunk dims to 0s */
+    HDmemset(real_dims,0,sizeof(real_dims));
+    for (i=0; i<ndims; i++) {
+        if (dim[i] == 0)
+            HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "all chunk dimensions must be positive");
+        if (dim[i] != (dim[i]&0xffffffff))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, FAIL, "all chunk dimensions must be less than 2^32");
+        real_dims[i]=(size_t)dim[i]; /* Store user's chunk dimensions */
+    } /* end for */
+
+    if(H5P_set_layout (plist, H5D_CHUNKED) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set layout");
+    if(H5P_set(plist, H5D_CRT_CHUNK_DIM_NAME, &ndims) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set chunk dimensionanlity");
+    if(H5P_set(plist, H5D_CRT_CHUNK_SIZE_NAME, real_dims) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set chunk size");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_chunk
+ *
+ * Purpose:	Retrieves the chunk size of chunked layout.  The chunk
+ *		dimensionality is returned and the chunk size in each
+ *		dimension is returned through the DIM argument.	 At most
+ *		MAX_NDIMS elements of DIM will be initialized.
+ *
+ * Return:	Success:	Positive Chunk dimensionality.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to check parameter and set property for
+ *              generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Pget_chunk(hid_t plist_id, int max_ndims, hsize_t dim[]/*out*/)
+{
+    int                 ndims;
+    H5D_layout_t        layout;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    int                 ret_value;
+
+    FUNC_ENTER_API(H5Pget_chunk, FAIL);
+    H5TRACE3("Is","iIsx",plist_id,max_ndims,dim);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    if(H5P_get(plist, H5D_CRT_LAYOUT_NAME, &layout) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "can't get layout");
+    if(H5D_CHUNKED != layout)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a chunked storage layout");
+
+    if(H5P_get(plist, H5D_CRT_CHUNK_DIM_NAME, &ndims) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get chunk dimensionality");
+
+    if(dim) {
+        int		i;
+        size_t          chunk_size[H5O_LAYOUT_NDIMS];
+
+        if(H5P_get(plist, H5D_CRT_CHUNK_SIZE_NAME, chunk_size) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get chunk size");
+
+        /* Get the dimension sizes */
+        for (i=0; i<ndims && i<max_ndims; i++)
+            dim[i] = chunk_size[i];
+    } /* end if */
+
+    /* Set the return value */
+    ret_value=ndims;
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_external
+ *
+ * Purpose:	Adds an external file to the list of external files. PLIST_ID
+ *		should be an object ID for a dataset creation property list.
+ *		NAME is the name of an external file, OFFSET is the location
+ *		where the data starts in that file, and SIZE is the number of
+ *		bytes reserved in the file for the data.
+ *
+ *		If a dataset is split across multiple files then the files
+ *		should be defined in order. The total size of the dataset is
+ *		the sum of the SIZE arguments for all the external files.  If
+ *		the total size is larger than the size of a dataset then the
+ *		dataset can be extended (provided the data space also allows
+ *		the extending).
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, March	3, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to check parameter and set property for
+ *              generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_external(hid_t plist_id, const char *name, off_t offset, hsize_t size)
+{
+    size_t		idx;
+    hsize_t		total, tmp;
+    H5O_efl_t           efl;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Pset_external, FAIL);
+    H5TRACE4("e","isoh",plist_id,name,offset,size);
+
+    /* Check arguments */
+    if (!name || !*name)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no name given");
+    if (offset<0)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "negative external file offset");
+    if (size<=0)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "zero size");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    if(H5P_get(plist, H5D_CRT_EXT_FILE_LIST_NAME, &efl) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get external file list");
+    if(efl.nused > 0 && H5O_EFL_UNLIMITED==efl.slot[efl.nused-1].size)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "previous file size is unlimited");
+
+    if (H5O_EFL_UNLIMITED!=size) {
+        for (idx=0, total=size; idx<efl.nused; idx++, total=tmp) {
+            tmp = total + efl.slot[idx].size;
+            if (tmp <= total)
+                HGOTO_ERROR (H5E_EFL, H5E_OVERFLOW, FAIL, "total external data size overflowed");
+        } /* end for */
+    } /* end if */
+
+
+    /* Add to the list */
+    if (efl.nused >= efl.nalloc) {
+        size_t na = efl.nalloc + H5O_EFL_ALLOC;
+        H5O_efl_entry_t *x = H5MM_realloc (efl.slot, na*sizeof(H5O_efl_entry_t));
+
+        if (!x)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+        efl.nalloc = na;
+        efl.slot = x;
+    }
+    idx = efl.nused;
+    efl.slot[idx].name_offset = 0; /*not entered into heap yet*/
+    efl.slot[idx].name = H5MM_xstrdup (name);
+    efl.slot[idx].offset = offset;
+    efl.slot[idx].size = size;
+    efl.nused++;
+
+    if(H5P_set(plist, H5D_CRT_EXT_FILE_LIST_NAME, &efl) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTINIT, FAIL, "can't set external file list");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_external_count
+ *
+ * Purpose:	Returns the number of external files for this dataset.
+ *
+ * Return:	Success:	Number of external files
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, March  3, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to check parameter and set property for
+ *              generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Pget_external_count(hid_t plist_id)
+{
+    H5O_efl_t           efl;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    int ret_value;              /* return value */
+
+    FUNC_ENTER_API(H5Pget_external_count, FAIL);
+    H5TRACE1("Is","i",plist_id);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get value */
+    if(H5P_get(plist, H5D_CRT_EXT_FILE_LIST_NAME, &efl) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get external file list");
+
+    /* Set return value */
+    ret_value=(int)efl.nused;
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_external
+ *
+ * Purpose:	Returns information about an external file.  External files
+ *		are numbered from zero to N-1 where N is the value returned
+ *		by H5Pget_external_count().  At most NAME_SIZE characters are
+ *		copied into the NAME array.  If the external file name is
+ *		longer than NAME_SIZE with the null terminator, then the
+ *		return value is not null terminated (similar to strncpy()).
+ *
+ *		If NAME_SIZE is zero or NAME is the null pointer then the
+ *		external file name is not returned.  If OFFSET or SIZE are
+ *		null pointers then the corresponding information is not
+ *		returned.
+ *
+ * See Also:	H5Pset_external()
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, March  3, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to check parameter and get property for
+ *              generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_external(hid_t plist_id, unsigned idx, size_t name_size, char *name/*out*/,
+		 off_t *offset/*out*/, hsize_t *size/*out*/)
+{
+    H5O_efl_t           efl;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_external, FAIL);
+    H5TRACE6("e","iIuzxxx",plist_id,idx,name_size,name,offset,size);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get value */
+    if(H5P_get(plist, H5D_CRT_EXT_FILE_LIST_NAME, &efl) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get external file list");
+
+    if (idx>=efl.nused)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADRANGE, FAIL, "external file index is out of range");
+
+    /* Return values */
+    if (name_size>0 && name)
+        HDstrncpy (name, efl.slot[idx].name, name_size);
+    if (offset)
+        *offset = efl.slot[idx].offset;
+    if (size)
+        *size = efl.slot[idx].size;
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pmodify_filter
+ *
+ * Purpose:	Modifies the specified FILTER in the
+ *		transient or permanent output filter pipeline
+ *		depending on whether PLIST is a dataset creation or dataset
+ *		transfer property list.  The FLAGS argument specifies certain
+ *		general properties of the filter and is documented below.
+ *		The CD_VALUES is an array of CD_NELMTS integers which are
+ *		auxiliary data for the filter.  The integer vlues will be
+ *		stored in the dataset object header as part of the filter
+ *		information.
+ *
+ * 		The FLAGS argument is a bit vector of the following fields:
+ *
+ * 		H5Z_FLAG_OPTIONAL(0x0001)
+ *		If this bit is set then the filter is optional.  If the
+ *		filter fails during an H5Dwrite() operation then the filter
+ *		is just excluded from the pipeline for the chunk for which it
+ *		failed; the filter will not participate in the pipeline
+ *		during an H5Dread() of the chunk.  If this bit is clear and
+ *		the filter fails then the entire I/O operation fails.
+ *      If this bit is set but encoding is disabled for a filter,
+ *      attempting to write will generate an error.
+ *
+ * Note:	This function currently supports only the permanent filter
+ *		pipeline.  That is, PLIST_ID must be a dataset creation
+ *		property list.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, April  5, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pmodify_filter(hid_t plist_id, H5Z_filter_t filter, unsigned int flags,
+	       size_t cd_nelmts, const unsigned int cd_values[/*cd_nelmts*/])
+{
+    H5O_pline_t         pline;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pmodify_filter, FAIL);
+    H5TRACE5("e","iZfIuz*[a3]Iu",plist_id,filter,flags,cd_nelmts,cd_values);
+
+    /* Check args */
+    if (filter<0 || filter>H5Z_FILTER_MAX)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid filter identifier");
+    if (flags & ~((unsigned)H5Z_FLAG_DEFMASK))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid flags");
+    if (cd_nelmts>0 && !cd_values)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no client data values supplied");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get the pipeline property to append to */
+    if(H5P_get(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get pipeline");
+
+    /* Modify the filter parameters of the I/O pipeline */
+    if(H5Z_modify(&pline, filter, flags, cd_nelmts, cd_values) < 0)
+        HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, FAIL, "unable to add filter to pipeline");
+
+    /* Put the I/O pipeline information back into the property list */
+    if(H5P_set(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set pipeline");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pmodify_filter() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_filter
+ *
+ * Purpose:	Adds the specified FILTER and corresponding properties to the
+ *		end of the transient or permanent output filter pipeline
+ *		depending on whether PLIST is a dataset creation or dataset
+ *		transfer property list.  The FLAGS argument specifies certain
+ *		general properties of the filter and is documented below.
+ *		The CD_VALUES is an array of CD_NELMTS integers which are
+ *		auxiliary data for the filter.  The integer vlues will be
+ *		stored in the dataset object header as part of the filter
+ *		information.
+ *
+ * 		The FLAGS argument is a bit vector of the following fields:
+ *
+ * 		H5Z_FLAG_OPTIONAL(0x0001)
+ *		If this bit is set then the filter is optional.  If the
+ *		filter fails during an H5Dwrite() operation then the filter
+ *		is just excluded from the pipeline for the chunk for which it
+ *		failed; the filter will not participate in the pipeline
+ *		during an H5Dread() of the chunk.  If this bit is clear and
+ *		the filter fails then the entire I/O operation fails.
+ *      If this bit is set but encoding is disabled for a filter,
+ *      attempting to write will generate an error.
+ *
+ * Note:	This function currently supports only the permanent filter
+ *		pipeline.  That is, PLIST_ID must be a dataset creation
+ *		property list.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 15, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to check parameter and set property for
+ *              generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_filter(hid_t plist_id, H5Z_filter_t filter, unsigned int flags,
+	       size_t cd_nelmts, const unsigned int cd_values[/*cd_nelmts*/])
+{
+    H5O_pline_t         pline;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_filter, FAIL);
+    H5TRACE5("e","iZfIuz*[a3]Iu",plist_id,filter,flags,cd_nelmts,cd_values);
+
+    /* Check args */
+    if (filter<0 || filter>H5Z_FILTER_MAX)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid filter identifier");
+    if (flags & ~((unsigned)H5Z_FLAG_DEFMASK))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid flags");
+    if (cd_nelmts>0 && !cd_values)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no client data values supplied");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get the pipeline property to append to */
+    if(H5P_get(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get pipeline");
+
+    /* Add the filter to the I/O pipeline */
+    if(H5Z_append(&pline, filter, flags, cd_nelmts, cd_values) < 0)
+        HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, FAIL, "unable to add filter to pipeline");
+
+    /* Put the I/O pipeline information back into the property list */
+    if(H5P_set(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set pipeline");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_nfilters
+ *
+ * Purpose:	Returns the number of filters in the permanent or transient
+ *		pipeline depending on whether PLIST_ID is a dataset creation
+ *		or dataset transfer property list.  In each pipeline the
+ *		filters are numbered from zero through N-1 where N is the
+ *		value returned by this function.  During output to the file
+ *		the filters of a pipeline are applied in increasing order
+ *		(the inverse is true for input).
+ *
+ * Note:	Only permanent filters are supported at this time.
+ *
+ * Return:	Success:	Number of filters or zero if there are none.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, August  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Pget_nfilters(hid_t plist_id)
+{
+    H5O_pline_t         pline;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    int ret_value;              /* return value */
+
+    FUNC_ENTER_API(H5Pget_nfilters, FAIL);
+    H5TRACE1("Is","i",plist_id);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get value */
+    if(H5P_get(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get pipeline");
+
+    /* Set return value */
+    ret_value=(int)(pline.nused);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_filter
+ *
+ * Purpose:	This is the query counterpart of H5Pset_filter() and returns
+ *		information about a particular filter number in a permanent
+ *		or transient pipeline depending on whether PLIST_ID is a
+ *		dataset creation or transfer property list.  On input,
+ *		CD_NELMTS indicates the number of entries in the CD_VALUES
+ *		array allocated by the caller while on exit it contains the
+ *		number of values defined by the filter.  The IDX should be a
+ *		value between zero and N-1 as described for H5Pget_nfilters()
+ *		and the function will return failure if the filter number is
+ *		out or range.
+ *
+ * Return:	Success:	Filter identification number.
+ *
+ *		Failure:	H5Z_FILTER_ERROR (Negative)
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 15, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to check paramter and set property for
+ *              generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+H5Z_filter_t
+H5Pget_filter(hid_t plist_id, unsigned idx, unsigned int *flags/*out*/,
+	       size_t *cd_nelmts/*in_out*/, unsigned cd_values[]/*out*/,
+	       size_t namelen, char name[]/*out*/)
+{
+    H5O_pline_t         pline;  /* Filter pipeline */
+    H5Z_filter_info_t *filter;  /* Pointer to filter information */
+    H5P_genplist_t *plist;      /* Property list pointer */
+    size_t		i;      /* Local index variable */
+    H5Z_filter_t ret_value;     /* return value */
+
+    FUNC_ENTER_API(H5Pget_filter, H5Z_FILTER_ERROR);
+    H5TRACE7("Zf","iIux*zxzx",plist_id,idx,flags,cd_nelmts,cd_values,namelen,
+             name);
+
+    /* Check args */
+    if (cd_nelmts || cd_values) {
+        if (cd_nelmts && *cd_nelmts>256)
+            /*
+             * It's likely that users forget to initialize this on input, so
+             * we'll check that it has a reasonable value.  The actual number
+             * is unimportant because the H5O layer will detect when a message
+             * is too large.
+             */
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5Z_FILTER_ERROR, "probable uninitialized *cd_nelmts argument");
+        if (cd_nelmts && *cd_nelmts>0 && !cd_values)
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5Z_FILTER_ERROR, "client data values not supplied");
+
+        /*
+         * If cd_nelmts is null but cd_values is non-null then just ignore
+         * cd_values
+         */
+        if (!cd_nelmts)
+            cd_values = NULL;
+    }
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, H5Z_FILTER_ERROR, "can't find object for ID");
+
+    /* Get pipeline info */
+    if(H5P_get(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, H5Z_FILTER_ERROR, "can't get pipeline");
+
+    /* Check more args */
+    if (idx>=pline.nused)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5Z_FILTER_ERROR, "filter number is invalid");
+
+    /* Set pointer to particular filter to query */
+    filter=&pline.filter[idx];
+
+    if (flags)
+        *flags = filter->flags;
+    if (cd_values) {
+        for (i=0; i<filter->cd_nelmts && i<*cd_nelmts; i++)
+            cd_values[i] = filter->cd_values[i];
+    }
+    if (cd_nelmts)
+        *cd_nelmts = filter->cd_nelmts;
+
+    if (namelen>0 && name) {
+        const char *s = filter->name;
+
+        if (!s) {
+            H5Z_class_t *cls = H5Z_find(filter->id);
+
+            if (cls)
+                s = cls->name;
+        }
+        if (s)
+            HDstrncpy(name, s, namelen);
+        else
+            name[0] = '\0';
+    }
+
+    /* Set return value */
+    ret_value=filter->id;
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_filter_by_id
+ *
+ * Purpose:	This is an additional query counterpart of H5Pset_filter() and
+ *              returns information about a particular filter in a permanent
+ *		or transient pipeline depending on whether PLIST_ID is a
+ *		dataset creation or transfer property list.  On input,
+ *		CD_NELMTS indicates the number of entries in the CD_VALUES
+ *		array allocated by the caller while on exit it contains the
+ *		number of values defined by the filter.  The ID should be the
+ *              filter ID to retrieve the parameters for.  If the filter is not
+ *              set for the property list, an error will be returned.
+ *
+ * Return:	Success:	Non-negative
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, April  5, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_filter_by_id(hid_t plist_id, H5Z_filter_t id, unsigned int *flags/*out*/,
+	       size_t *cd_nelmts/*in_out*/, unsigned cd_values[]/*out*/,
+	       size_t namelen, char name[]/*out*/)
+{
+    H5O_pline_t         pline;  /* Filter pipeline */
+    H5Z_filter_info_t *filter;  /* Pointer to filter information */
+    H5P_genplist_t *plist;      /* Property list pointer */
+    size_t		i;      /* Local index variable */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_API(H5Pget_filter_by_id, FAIL);
+    H5TRACE7("e","iZfx*zxzx",plist_id,id,flags,cd_nelmts,cd_values,namelen,
+             name);
+
+    /* Check args */
+    if (cd_nelmts || cd_values) {
+        if (cd_nelmts && *cd_nelmts>256)
+            /*
+             * It's likely that users forget to initialize this on input, so
+             * we'll check that it has a reasonable value.  The actual number
+             * is unimportant because the H5O layer will detect when a message
+             * is too large.
+             */
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "probable uninitialized *cd_nelmts argument");
+        if (cd_nelmts && *cd_nelmts>0 && !cd_values)
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "client data values not supplied");
+
+        /*
+         * If cd_nelmts is null but cd_values is non-null then just ignore
+         * cd_values
+         */
+        if (!cd_nelmts)
+            cd_values = NULL;
+    }
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get pipeline info */
+    if(H5P_get(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get pipeline");
+
+    /* Get pointer to filter in pipeline */
+    if ((filter=H5Z_filter_info(&pline,id))==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "filter ID is invalid");
+
+    /* Copy filter information into user's parameters */
+    if (flags)
+        *flags = filter->flags;
+    if (cd_values) {
+        for (i=0; i<filter->cd_nelmts && i<*cd_nelmts; i++)
+            cd_values[i] = filter->cd_values[i];
+    }
+    if (cd_nelmts)
+        *cd_nelmts = filter->cd_nelmts;
+    if (namelen>0 && name) {
+        const char *s = filter->name;
+
+        if (!s) {
+            H5Z_class_t *cls = H5Z_find(filter->id);
+
+            if (cls)
+                s = cls->name;
+        }
+        if (s)
+            HDstrncpy(name, s, namelen);
+        else
+            name[0] = '\0';
+    }
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pget_filter_by_id() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pall_filters_avail
+ *
+ * Purpose:	This is a query routine to verify that all the filters set
+ *              in the dataset creation property list are available currently.
+ *
+ * Return:	Success:	TRUE if all filters available, FALSE if one or
+ *                              more filters not currently available.
+ *		Failure:	FAIL on error
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, April  8, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5Pall_filters_avail(hid_t plist_id)
+{
+    H5O_pline_t         pline;  /* Filter pipeline */
+    H5P_genplist_t *plist;      /* Property list pointer */
+    hbool_t ret_value=TRUE;     /* return value */
+
+    FUNC_ENTER_API(H5Pall_filters_avail, UFAIL);
+    H5TRACE1("t","i",plist_id);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, UFAIL, "can't find object for ID");
+
+    /* Get pipeline info */
+    if(H5P_get(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, UFAIL, "can't get pipeline");
+
+    /* Set return value */
+    if((ret_value=H5Z_all_filters_avail(&pline))==UFAIL)
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, UFAIL, "can't check pipeline information");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pall_filters_avail() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_deflate
+ *
+ * Purpose:	Sets the compression method for a permanent or transient
+ *		filter pipeline (depending on whether PLIST_ID is a dataset
+ *		creation or transfer property list) to H5Z_FILTER_DEFLATE
+ *		and the compression level to LEVEL which should be a value
+ *		between zero and nine, inclusive.  Lower compression levels
+ *		are faster but result in less compression.  This is the same
+ *		algorithm as used by the GNU gzip program.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 15, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to check parameter and set property for
+ *              generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_deflate(hid_t plist_id, unsigned level)
+{
+    H5O_pline_t         pline;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_deflate, FAIL);
+    H5TRACE2("e","iIu",plist_id,level);
+
+    /* Check arguments */
+    if (level>9)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid deflate level");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Add the filter */
+    if(H5P_get(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get pipeline");
+    if(H5Z_append(&pline, H5Z_FILTER_DEFLATE, H5Z_FLAG_OPTIONAL, 1, &level)<0)
+        HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, FAIL, "unable to add deflate filter to pipeline");
+    if(H5P_set(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, FAIL, "unable to set pipeline");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pset_deflate() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_szip
+ *
+ * Purpose:	Sets the compression method for a permanent or transient
+ *		filter pipeline (depending on whether PLIST_ID is a dataset
+ *		creation or transfer property list) to H5Z_FILTER_SZIP
+ *		Szip is a special compression package that is said to be good
+ *              for scientific data.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Kent Yang
+ *              Tuesday, April 1, 2003
+ *
+ * Modifications:
+ *
+ *          Nat Furrer and James Laird
+ *          June 17, 2004
+ *          Now ensures that SZIP encoding is enabled
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_szip(hid_t plist_id, unsigned options_mask, unsigned pixels_per_block)
+{
+    H5O_pline_t         pline;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    unsigned cd_values[2];      /* Filter parameters */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_szip, FAIL);
+    H5TRACE3("e","iIuIu",plist_id,options_mask,pixels_per_block);
+
+    /* Check arguments */
+#ifdef H5_HAVE_FILTER_SZIP
+    if(SZ_encoder_enabled()<=0)
+        HGOTO_ERROR(H5E_PLINE, H5E_NOENCODER, FAIL, "Filter present but encoding is disabled.");
+#endif /* H5_HAVE_FILTER_SZIP */
+
+    if ((pixels_per_block%2)==1)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "pixels_per_block is not even");
+    if (pixels_per_block>H5_SZIP_MAX_PIXELS_PER_BLOCK)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "pixels_per_block is too large");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Always set K13 compression (and un-set CHIP compression) */
+    options_mask &= (~H5_SZIP_CHIP_OPTION_MASK);
+    options_mask |= H5_SZIP_ALLOW_K13_OPTION_MASK;
+
+    /* Always set "raw" (no szip header) flag for data */
+    options_mask |= H5_SZIP_RAW_OPTION_MASK;
+
+    /* Mask off the LSB and MSB options, if they were given */
+    /* (The HDF5 library sets them internally, as needed) */
+    options_mask &= ~(H5_SZIP_LSB_OPTION_MASK|H5_SZIP_MSB_OPTION_MASK);
+
+    /* Set the parameters for the filter */
+    cd_values[0]=options_mask;
+    cd_values[1]=pixels_per_block;
+
+    /* Add the filter */
+    if(H5P_get(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get pipeline");
+    if(H5Z_append(&pline, H5Z_FILTER_SZIP, H5Z_FLAG_OPTIONAL, 2, cd_values)<0)
+        HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, FAIL, "unable to add szip filter to pipeline");
+    if(H5P_set(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, FAIL, "unable to set pipeline");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pset_szip() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_shuffle
+ *
+ * Purpose:	Sets the shuffling method for a permanent
+ *		filter to H5Z_FILTER_SHUFFLE
+ *		and bytes of the datatype of the array to be shuffled
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Kent Yang
+ *              Wednesday, November 13, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_shuffle(hid_t plist_id)
+{
+    H5O_pline_t         pline;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_shuffle, FAIL);
+    H5TRACE1("e","i",plist_id);
+
+    /* Check arguments */
+    if(TRUE != H5P_isa_class(plist_id, H5P_DATASET_CREATE))
+        HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5I_object(plist_id)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Add the filter */
+    if(H5P_get(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get pipeline");
+    if(H5Z_append(&pline, H5Z_FILTER_SHUFFLE, H5Z_FLAG_OPTIONAL, 0, NULL)<0)
+        HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, FAIL, "unable to shuffle the data");
+    if(H5P_set(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, FAIL, "unable to set pipeline");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pset_shuffle() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_fletcher32
+ *
+ * Purpose:	Sets Fletcher32 checksum of EDC for a dataset creation
+ *              property list.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Raymond Lu
+ *              Dec 19, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fletcher32(hid_t plist_id)
+{
+    H5O_pline_t         pline;
+    H5P_genplist_t      *plist;      /* Property list pointer */
+    herr_t              ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_fletcher32, FAIL);
+    H5TRACE1("e","i",plist_id);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Add the Fletcher32 checksum as a filter */
+    if(H5P_get(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get pipeline");
+    if(H5Z_append(&pline, H5Z_FILTER_FLETCHER32, H5Z_FLAG_MANDATORY, 0, NULL)<0)
+        HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, FAIL, "unable to add deflate filter to pipeline");
+    if(H5P_set(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, FAIL, "unable to set pipeline");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pset_fletcher32() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_fill_value
+ *
+ * Purpose:	Set the fill value for a dataset creation property list. The
+ *		VALUE is interpretted as being of type TYPE, which need not
+ *		be the same type as the dataset but the library must be able
+ *		to convert VALUE to the dataset type when the dataset is
+ *		created.  If VALUE is NULL, it will be interpreted as
+ *		undefining fill value.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to check parameter and set property for
+ *              generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fill_value(hid_t plist_id, hid_t type_id, const void *value)
+{
+    H5O_fill_t	        fill;
+    H5T_t		*type = NULL;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_fill_value, FAIL);
+    H5TRACE3("e","iix",plist_id,type_id,value);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get the "basic" fill value structure */
+    if(H5P_get(plist, H5D_CRT_FILL_VALUE_NAME, &fill) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get fill value");
+
+    /* Reset the fill structure */
+    if(H5O_reset(H5O_FILL_ID, &fill)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't reset fill value");
+
+    if(value) {
+	if (NULL==(type=H5I_object_verify(type_id, H5I_DATATYPE)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+
+	/* Set the fill value */
+        if (NULL==(fill.type=H5T_copy(type, H5T_COPY_TRANSIENT)))
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to copy data type");
+        fill.size = H5T_get_size(type);
+        if (NULL==(fill.buf=H5MM_malloc(fill.size)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_CANTINIT, FAIL, "memory allocation failed for fill value");
+        HDmemcpy(fill.buf, value, fill.size);
+    } else {
+	fill.type = fill.buf = NULL;
+	fill.size = (size_t)-1;
+    }
+
+    if(H5P_set(plist, H5D_CRT_FILL_VALUE_NAME, &fill) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't set fill value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_fill_value
+ *
+ * Purpose:	Queries the fill value property of a dataset creation
+ *		property list.  The fill value is returned through the VALUE
+ *		pointer and the memory is allocated by the caller.  The fill
+ *		value will be converted from its current data type to the
+ *		specified TYPE.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Tuesday, October 2, 2001
+ *              Changed the way to check parameter and get property for
+ *              generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_fill_value(hid_t plist_id, hid_t type_id, void *value/*out*/)
+{
+    H5O_fill_t          fill;
+    H5T_t		*type = NULL;		/*data type		*/
+    H5T_path_t		*tpath = NULL;		/*type conversion info	*/
+    void		*buf = NULL;		/*conversion buffer	*/
+    void		*bkg = NULL;		/*conversion buffer	*/
+    hid_t		src_id = -1;		/*source data type id	*/
+    herr_t              ret_value=SUCCEED;      /* Return value */
+    H5P_genplist_t *plist;      /* Property list pointer */
+
+    FUNC_ENTER_API(H5Pget_fill_value, FAIL);
+    H5TRACE3("e","iix",plist_id,type_id,value);
+
+    /* Check arguments */
+    if (NULL==(type=H5I_object_verify(type_id, H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+    if (!value)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL,"no fill value output buffer");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /*
+     * If no fill value is defined then return an error.  We can't even
+     * return zero because we don't know the data type of the dataset and
+     * data type conversion might not have resulted in zero.  If fill value
+     * is undefined, also return error.
+     */
+    if(H5P_get(plist, H5D_CRT_FILL_VALUE_NAME, &fill) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get fill value");
+    if(fill.size == (size_t)-1)
+	HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "fill value is undefined");
+
+    if(fill.size == 0) {
+	HDmemset(value, 0, H5T_get_size(type));
+   	HGOTO_DONE(SUCCEED);
+    }
+     /*
+     * Can we convert between the source and destination data types?
+     */
+    if(NULL==(tpath=H5T_path_find(fill.type, type, NULL, NULL, H5AC_dxpl_id)))
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert between src and dst data types");
+    src_id = H5I_register(H5I_DATATYPE, H5T_copy (fill.type, H5T_COPY_TRANSIENT));
+    if (src_id<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to copy/register data type");
+
+    /*
+     * Data type conversions are always done in place, so we need a buffer
+     * other than the fill value buffer that is large enough for both source
+     * and destination.  The app-supplied buffer might do okay.
+     */
+    if (H5T_get_size(type)>=H5T_get_size(fill.type)) {
+        buf = value;
+        if (H5T_path_bkg(tpath) && NULL==(bkg=H5MM_malloc(H5T_get_size(type))))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion");
+    } else {
+        if (NULL==(buf=H5MM_malloc(H5T_get_size(fill.type))))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion");
+        if (H5T_path_bkg(tpath))
+            bkg = value;
+    }
+    HDmemcpy(buf, fill.buf, H5T_get_size(fill.type));
+
+    /* Do the conversion */
+    if (H5T_convert(tpath, src_id, type_id, 1, 0, 0, buf, bkg, H5AC_dxpl_id)<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "data type conversion failed");
+    if (buf!=value)
+        HDmemcpy(value, buf, H5T_get_size(type));
+
+done:
+    if (buf!=value)
+        H5MM_xfree(buf);
+    if (bkg!=value)
+        H5MM_xfree(bkg);
+    if (src_id>=0)
+        H5I_dec_ref(src_id);
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5P_is_fill_value_defined
+ *
+ * Purpose:	Check if fill value is defined.  Internal version of function
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:  Raymond Lu
+ *              Wednesday, January 16, 2002
+ *
+ * Modifications:
+ *              Extracted from H5P_fill_value_defined, QAK, Dec. 13, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5P_is_fill_value_defined(const struct H5O_fill_t *fill, H5D_fill_value_t *status)
+{
+    herr_t		ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5P_is_fill_value_defined, FAIL);
+
+    assert(fill);
+    assert(status);
+
+    /* Check if the fill value was never set */
+    if(fill->size == (size_t)-1 && !fill->buf)
+	*status = H5D_FILL_VALUE_UNDEFINED;
+    /* Check if the fill value was set to the default fill value by the library */
+    else if(fill->size == 0 && !fill->buf)
+	*status = H5D_FILL_VALUE_DEFAULT;
+    /* Check if the fill value was set by the application */
+    else if(fill->size > 0 && fill->buf)
+	*status = H5D_FILL_VALUE_USER_DEFINED;
+    else {
+	*status = H5D_FILL_VALUE_ERROR;
+        HGOTO_ERROR(H5E_PLIST, H5E_BADRANGE, FAIL, "invalid combination of fill-value info");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5P_is_fill_value_defined() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Pfill_value_defined
+ *
+ * Purpose:	Check if fill value is defined.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:  Raymond Lu
+ *              Wednesday, January 16, 2002
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pfill_value_defined(hid_t plist_id, H5D_fill_value_t *status)
+{
+    H5P_genplist_t 	*plist;
+    H5O_fill_t		fill;
+    herr_t		ret_value = SUCCEED;
+
+    FUNC_ENTER_API(H5Pfill_value_defined, FAIL);
+    H5TRACE2("e","i*DF",plist_id,status);
+
+    assert(status);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get the fill value struct */
+    if(H5P_get(plist, H5D_CRT_FILL_VALUE_NAME, &fill) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get fill value");
+
+    /* Get the fill-value status */
+    if(H5P_is_fill_value_defined(&fill, status) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_BADVALUE, FAIL, "can't check fill value status");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pfill_value_defined() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Pset_alloc_time
+ *
+ * Purpose:     Set space allocation time for dataset during creation.
+ *		Valid values are H5D_ALLOC_TIME_DEFAULT, H5D_ALLOC_TIME_EARLY,
+ *			H5D_ALLOC_TIME_LATE, H5D_ALLOC_TIME_INCR
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Raymond Lu
+ * 		Wednesday, January 16, 2002
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_alloc_time(hid_t plist_id, H5D_alloc_time_t alloc_time)
+{
+    H5P_genplist_t *plist; 	/* Property list pointer */
+    unsigned alloc_time_state;  /* State of allocation time property */
+    herr_t ret_value = SUCCEED; /* return value 	 */
+
+    FUNC_ENTER_API(H5Pset_alloc_time, FAIL);
+    H5TRACE2("e","iDa",plist_id,alloc_time);
+
+    /* Get the property list structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+	HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Check for resetting to default for layout type */
+    if(alloc_time==H5D_ALLOC_TIME_DEFAULT) {
+        H5D_layout_t layout;            /* Type of storage layout */
+
+        /* Retrieve the storage layout */
+        if(H5P_get(plist, H5D_CRT_LAYOUT_NAME, &layout) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get layout");
+
+        /* Set the default based on layout */
+        switch(layout) {
+            case H5D_COMPACT:
+                alloc_time=H5D_ALLOC_TIME_EARLY;
+                break;
+
+            case H5D_CONTIGUOUS:
+                alloc_time=H5D_ALLOC_TIME_LATE;
+                break;
+
+            case H5D_CHUNKED:
+                alloc_time=H5D_ALLOC_TIME_INCR;
+                break;
+
+            default:
+                HGOTO_ERROR(H5E_DATASET, H5E_UNSUPPORTED, FAIL, "unknown layout type")
+        } /* end switch */
+
+        /* Reset the "state" of the allocation time property back to the "default" */
+        alloc_time_state=1;
+    } /* end if */
+    else
+        /* Set the "state" of the allocation time property to indicate the user modified it */
+        alloc_time_state=0;
+
+    /* Set values */
+    if(H5P_set(plist, H5D_CRT_ALLOC_TIME_NAME, &alloc_time) < 0)
+	HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set space allocation time");
+    if(H5P_set(plist, H5D_CRT_ALLOC_TIME_STATE_NAME, &alloc_time_state) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set space allocation time");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Pget_alloc_time
+ *
+ * Purpose:     Get space allocation time for dataset creation.
+ *		Valid values are H5D_ALLOC_TIME_DEFAULT, H5D_ALLOC_TIME_EARLY,
+ *			H5D_ALLOC_TIME_LATE, H5D_ALLOC_TIME_INCR
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Raymond Lu
+ *              Wednesday, January 16, 2002
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_alloc_time(hid_t plist_id, H5D_alloc_time_t *alloc_time/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value = SUCCEED; /* return value          */
+
+    FUNC_ENTER_API(H5Pget_alloc_time, FAIL);
+    H5TRACE2("e","ix",plist_id,alloc_time);
+
+    /* Get the property list structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get values */
+    if(!alloc_time || H5P_get(plist, H5D_CRT_ALLOC_TIME_NAME, alloc_time) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get space allocation time");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Pset_fill_time
+ *
+ * Purpose:	Set fill value writing time for dataset.  Valid values are
+ *		H5D_FILL_TIME_ALLOC and H5D_FILL_TIME_NEVER.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Raymond Lu
+ *              Wednesday, January 16, 2002
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fill_time(hid_t plist_id, H5D_fill_time_t fill_time)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value = SUCCEED; /* return value          */
+
+    FUNC_ENTER_API(H5Pset_fill_time, FAIL);
+    H5TRACE2("e","iDf",plist_id,fill_time);
+
+    /* Check arguments */
+    if(fill_time<H5D_FILL_TIME_ALLOC || fill_time>H5D_FILL_TIME_IFSET)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid fill time setting");
+
+    /* Get the property list structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set values */
+    if(H5P_set(plist, H5D_CRT_FILL_TIME_NAME, &fill_time) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set space allocation time");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Pget_fill_time
+ *
+ * Purpose:	Get fill value writing time.  Valid values are H5D_NEVER
+ *		and H5D_ALLOC.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Raymond Lu
+ *              Wednesday, January 16, 2002
+ *
+ * Modifications:
+ *
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_fill_time(hid_t plist_id, H5D_fill_time_t *fill_time/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value = SUCCEED; /* return value          */
+
+    FUNC_ENTER_API(H5Pget_fill_time, FAIL);
+    H5TRACE2("e","ix",plist_id,fill_time);
+
+    /* Get the property list structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set values */
+    if(!fill_time || H5P_get(plist, H5D_CRT_FILL_TIME_NAME, fill_time) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set space allocation time");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5Premove_filter
+ *
+ * Purpose: Deletes a filter from the dataset creation property list;
+ *  deletes all filters if FILTER is H5Z_FILTER_NONE
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Pedro Vicente
+ *             January 26, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t
+H5Premove_filter(hid_t plist_id, H5Z_filter_t filter)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    H5O_pline_t pline;          /* Filter pipeline */
+    herr_t ret_value = SUCCEED; /* return value          */
+
+    FUNC_ENTER_API(H5Premove_filter, FAIL)
+    H5TRACE2("e","iZf",plist_id,filter);
+
+    /* Get the property list structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
+
+    /* Get pipeline info */
+    if(H5P_get(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, H5Z_FILTER_ERROR, "can't get pipeline")
+
+    /* Check if there are any filters */
+    if (pline.filter) {
+        /* Delete filter */
+        if(H5Z_delete(&pline, filter) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, H5Z_FILTER_ERROR, "can't delete filter")
+
+        /* Put the I/O pipeline information back into the property list */
+        if(H5P_set(plist, H5D_CRT_DATA_PIPELINE_NAME, &pline) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set pipeline")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Pdxpl.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Pdxpl.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Pdxpl.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,870 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5P_PACKAGE		/*suppress error about including H5Ppkg	  */
+
+
+/* Private header files */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dprivate.h"		/* Datasets				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Ppkg.h"		/* Property lists		  	*/
+
+/* Local datatypes */
+
+/* Static function prototypes */
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_buffer
+ *
+ * Purpose:	Given a dataset transfer property list, set the maximum size
+ *		for the type conversion buffer and background buffer and
+ *		optionally supply pointers to application-allocated buffers.
+ *		If the buffer size is smaller than the entire amount of data
+ *		being transfered between application and file, and a type
+ *		conversion buffer or background buffer is required then
+ *		strip mining will be used.
+ *
+ *		If TCONV and/or BKG are null pointers then buffers will be
+ *		allocated and freed during the data transfer.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, March 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_buffer(hid_t plist_id, hsize_t _size, void *tconv, void *bkg)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    size_t size=(size_t)_size;  /* Work around size difference */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_buffer, FAIL);
+    H5TRACE4("e","ihxx",plist_id,_size,tconv,bkg);
+
+    /* Check arguments */
+    if (size<=0)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "buffer size must not be zero");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Update property list */
+    if(H5P_set(plist, H5D_XFER_MAX_TEMP_BUF_NAME, &size)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTSET, FAIL, "Can't set transfer buffer size");
+    if(H5P_set(plist, H5D_XFER_TCONV_BUF_NAME, &tconv)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTSET, FAIL, "Can't set transfer type conversion buffer");
+    if(H5P_set(plist, H5D_XFER_BKGR_BUF_NAME, &bkg)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTSET, FAIL, "Can't set background type conversion buffer");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_buffer
+ *
+ * Purpose:	Reads values previously set with H5Pset_buffer().
+ *
+ * Return:	Success:	Buffer size.
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, March 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t
+H5Pget_buffer(hid_t plist_id, void **tconv/*out*/, void **bkg/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    size_t size;                /* Type conversion buffer size */
+    hsize_t ret_value;          /* Return value */
+
+    FUNC_ENTER_API(H5Pget_buffer, 0);
+    H5TRACE3("h","ixx",plist_id,tconv,bkg);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, 0, "can't find object for ID");
+
+    /* Return values */
+    if (tconv)
+        if(H5P_get(plist, H5D_XFER_TCONV_BUF_NAME, tconv)<0)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, 0, "Can't get transfer type conversion buffer");
+    if (bkg)
+        if(H5P_get(plist, H5D_XFER_BKGR_BUF_NAME, bkg)<0)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, 0, "Can't get background type conversion buffer");
+
+    /* Get the size */
+    if(H5P_get(plist, H5D_XFER_MAX_TEMP_BUF_NAME, &size)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTSET, 0, "Can't set transfer buffer size");
+
+    /* Set the return value */
+    ret_value=(hsize_t)size;
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+#else /* H5_WANT_H5_V1_4_COMPAT */
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_buffer
+ *
+ * Purpose:	Given a dataset transfer property list, set the maximum size
+ *		for the type conversion buffer and background buffer and
+ *		optionally supply pointers to application-allocated buffers.
+ *		If the buffer size is smaller than the entire amount of data
+ *		being transfered between application and file, and a type
+ *		conversion buffer or background buffer is required then
+ *		strip mining will be used.
+ *
+ *		If TCONV and/or BKG are null pointers then buffers will be
+ *		allocated and freed during the data transfer.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, March 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_buffer(hid_t plist_id, size_t size, void *tconv, void *bkg)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_buffer, FAIL);
+    H5TRACE4("e","izxx",plist_id,size,tconv,bkg);
+
+    /* Check arguments */
+    if (size<=0)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "buffer size must not be zero");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Update property list */
+    if(H5P_set(plist, H5D_XFER_MAX_TEMP_BUF_NAME, &size)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTSET, FAIL, "Can't set transfer buffer size");
+    if(H5P_set(plist, H5D_XFER_TCONV_BUF_NAME, &tconv)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTSET, FAIL, "Can't set transfer type conversion buffer");
+    if(H5P_set(plist, H5D_XFER_BKGR_BUF_NAME, &bkg)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTSET, FAIL, "Can't set background type conversion buffer");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_buffer
+ *
+ * Purpose:	Reads values previously set with H5Pset_buffer().
+ *
+ * Return:	Success:	Buffer size.
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, March 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5Pget_buffer(hid_t plist_id, void **tconv/*out*/, void **bkg/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    size_t size;                /* Type conversion buffer size */
+    size_t ret_value;           /* Return value */
+
+    FUNC_ENTER_API(H5Pget_buffer, 0);
+    H5TRACE3("z","ixx",plist_id,tconv,bkg);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, 0, "can't find object for ID");
+
+    /* Return values */
+    if (tconv)
+        if(H5P_get(plist, H5D_XFER_TCONV_BUF_NAME, tconv)<0)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, 0, "Can't get transfer type conversion buffer");
+    if (bkg)
+        if(H5P_get(plist, H5D_XFER_BKGR_BUF_NAME, bkg)<0)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, 0, "Can't get background type conversion buffer");
+
+    /* Get the size */
+    if(H5P_get(plist, H5D_XFER_MAX_TEMP_BUF_NAME, &size)<0)
+        HGOTO_ERROR (H5E_PLIST, H5E_CANTSET, 0, "Can't set transfer buffer size");
+
+    /* Set the return value */
+    ret_value=size;
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_hyper_cache
+ *
+ * Purpose:	Given a dataset transfer property list, indicate whether to
+ *		cache the hyperslab blocks during the I/O (which speeds
+ *		things up) and the maximum size of the hyperslab block to
+ *		cache.  If a block is smaller than to limit, it may still not
+ *		be cached if no memory is available. Setting the limit to 0
+ *		indicates no limitation on the size of block to attempt to
+ *		cache.
+ *
+ *		The default is to cache blocks with no limit on block size
+ *		for serial I/O and to not cache blocks for parallel I/O
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, September 21, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_hyper_cache(hid_t plist_id, unsigned cache, unsigned limit)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;
+
+    FUNC_ENTER_API(H5Pset_hyper_cache, FAIL);
+    H5TRACE3("e","iIuIu",plist_id,cache,limit);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Update property list */
+    cache = (cache>0) ? 1 : 0;
+    if (H5P_set(plist,H5D_XFER_HYPER_CACHE_NAME,&cache)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to set value");
+    if (H5P_set(plist,H5D_XFER_HYPER_CACHE_LIM_NAME,&limit)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to set value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_hyper_cache
+ *
+ * Purpose:	Reads values previously set with H5Pset_hyper_cache().
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, September 21, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_hyper_cache(hid_t plist_id, unsigned *cache/*out*/,
+		   unsigned *limit/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_hyper_cache, FAIL);
+    H5TRACE3("e","ixx",plist_id,cache,limit);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Return values */
+    if (cache)
+        if (H5P_get(plist,H5D_XFER_HYPER_CACHE_NAME,cache)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value");
+    if (limit)
+        if (H5P_get(plist,H5D_XFER_HYPER_CACHE_LIM_NAME,limit)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_preserve
+ *
+ * Purpose:	When reading or writing compound data types and the
+ *		destination is partially initialized and the read/write is
+ *		intended to initialize the other members, one must set this
+ *		property to TRUE.  Otherwise the I/O pipeline treats the
+ *		destination datapoints as completely uninitialized.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, March 17, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_preserve(hid_t plist_id, hbool_t status)
+{
+    H5T_bkg_t need_bkg;         /* Value for background buffer type */
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_preserve, FAIL);
+    H5TRACE2("e","ib",plist_id,status);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Update property list */
+    need_bkg = status ? H5T_BKG_YES : H5T_BKG_NO;
+    if (H5P_set(plist,H5D_XFER_BKGR_BUF_TYPE_NAME,&need_bkg)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_preserve
+ *
+ * Purpose:	The inverse of H5Pset_preserve()
+ *
+ * Return:	Success:	TRUE or FALSE
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, March 17, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Pget_preserve(hid_t plist_id)
+{
+    H5T_bkg_t need_bkg;         /* Background value */
+    H5P_genplist_t *plist;      /* Property list pointer */
+    int ret_value;              /* return value */
+
+    FUNC_ENTER_API(H5Pget_preserve, FAIL);
+    H5TRACE1("Is","i",plist_id);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get value */
+    if (H5P_get(plist,H5D_XFER_BKGR_BUF_NAME,&need_bkg)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value");
+
+    /* Set return value */
+    ret_value= need_bkg ? TRUE : FALSE;
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_edc_check
+ *
+ * Purpose:     Enable or disable error-detecting for a dataset reading
+ *              process.  This error-detecting algorithm is whichever
+ *              user chooses earlier.  This function cannot control
+ *              writing process.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Raymond Lu
+ *              Jan 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_edc_check(hid_t plist_id, H5Z_EDC_t check)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_edc_check, FAIL);
+    H5TRACE2("e","iZe",plist_id,check);
+
+    /* Check argument */
+    if (check != H5Z_ENABLE_EDC && check != H5Z_DISABLE_EDC)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "not a valid value");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Update property list */
+    if (H5P_set(plist,H5D_XFER_EDC_NAME,&check)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_edc_check
+ *
+ * Purpose:     Enable or disable error-detecting for a dataset reading
+ *              process.  This error-detecting algorithm is whichever
+ *              user chooses earlier.  This function cannot control
+ *              writing process.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Raymond Lu
+ *              Jan 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5Z_EDC_t
+H5Pget_edc_check(hid_t plist_id)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    H5Z_EDC_t      ret_value;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_edc_check, H5Z_ERROR_EDC);
+    H5TRACE1("Ze","i",plist_id);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, H5Z_ERROR_EDC, "can't find object for ID");
+
+    /* Update property list */
+    if (H5P_get(plist,H5D_XFER_EDC_NAME,&ret_value)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, H5Z_ERROR_EDC, "unable to set value");
+
+    /* check valid value */
+    if (ret_value != H5Z_ENABLE_EDC && ret_value != H5Z_DISABLE_EDC)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5Z_ERROR_EDC, "not a valid value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_filter_callback
+ *
+ * Purpose:     Sets user's callback function for dataset transfer property
+ *              list.  This callback function defines what user wants to do
+ *              if certain filter fails.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Raymond Lu
+ *              Jan 14, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_filter_callback(hid_t plist_id, H5Z_filter_func_t func, void *op_data)
+{
+    H5P_genplist_t      *plist;      /* Property list pointer */
+    herr_t              ret_value=SUCCEED;   /* return value */
+    H5Z_cb_t            cb_struct;
+
+    FUNC_ENTER_API(H5Pset_filter_callback, FAIL);
+    H5TRACE3("e","ixx",plist_id,func,op_data);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Update property list */
+    cb_struct.func = func;
+    cb_struct.op_data = op_data;
+
+    if (H5P_set(plist,H5D_XFER_FILTER_CB_NAME,&cb_struct)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_btree_ratios
+ *
+ * Purpose:	Queries B-tree split ratios.  See H5Pset_btree_ratios().
+ *
+ * Return:	Success:	Non-negative with split ratios returned through
+ *				the non-null arguments.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, September 28, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_btree_ratios(hid_t plist_id, double *left/*out*/, double *middle/*out*/,
+		    double *right/*out*/)
+{
+    double btree_split_ratio[3];        /* B-tree node split ratios */
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_btree_ratios, FAIL);
+    H5TRACE4("e","ixxx",plist_id,left,middle,right);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get the split ratios */
+    if (H5P_get(plist,H5D_XFER_BTREE_SPLIT_RATIO_NAME,&btree_split_ratio)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value");
+
+    /* Get values */
+    if (left)
+        *left = btree_split_ratio[0];
+    if (middle)
+        *middle = btree_split_ratio[1];
+    if (right)
+        *right = btree_split_ratio[2];
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_btree_ratios
+ *
+ * Purpose:	Sets B-tree split ratios for a dataset transfer property
+ *		list. The split ratios determine what percent of children go
+ *		in the first node when a node splits.  The LEFT ratio is
+ *		used when the splitting node is the left-most node at its
+ *		level in the tree; the RIGHT ratio is when the splitting node
+ *		is the right-most node at its level; and the MIDDLE ratio for
+ *		all other cases.  A node which is the only node at its level
+ *		in the tree uses the RIGHT ratio when it splits.  All ratios
+ *		are real numbers between 0 and 1, inclusive.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, September 28, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_btree_ratios(hid_t plist_id, double left, double middle,
+		    double right)
+{
+    double split_ratio[3];        /* B-tree node split ratios */
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_btree_ratios, FAIL);
+    H5TRACE4("e","iddd",plist_id,left,middle,right);
+
+    /* Check arguments */
+    if (left<0.0 || left>1.0 || middle<0.0 || middle>1.0 ||
+            right<0.0 || right>1.0)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "split ratio must satisfy 0.0<=X<=1.0");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set values */
+    split_ratio[0] = left;
+    split_ratio[1] = middle;
+    split_ratio[2] = right;
+
+    /* Set the split ratios */
+    if (H5P_set(plist,H5D_XFER_BTREE_SPLIT_RATIO_NAME,&split_ratio)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5P_set_vlen_mem_manager
+ *
+ * Purpose:	Sets the memory allocate/free pair for VL datatypes.  The
+ *		allocation routine is called when data is read into a new
+ *		array and the free routine is called when H5Dvlen_reclaim is
+ *		called.  The alloc_info and free_info are user parameters
+ *		which are passed to the allocation and freeing functions
+ *		respectively.  To reset the allocate/free functions to the
+ *		default setting of using the system's malloc/free functions,
+ *		call this routine with alloc_func and free_func set to NULL.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 1, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5P_set_vlen_mem_manager(H5P_genplist_t *plist, H5MM_allocate_t alloc_func,
+        void *alloc_info, H5MM_free_t free_func, void *free_info)
+{
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_NOAPI(H5P_set_vlen_mem_manager, FAIL);
+
+    assert(plist);
+
+    /* Update property list */
+    if (H5P_set(plist,H5D_XFER_VLEN_ALLOC_NAME,&alloc_func)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value");
+    if (H5P_set(plist,H5D_XFER_VLEN_ALLOC_INFO_NAME,&alloc_info)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value");
+    if (H5P_set(plist,H5D_XFER_VLEN_FREE_NAME,&free_func)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value");
+    if (H5P_set(plist,H5D_XFER_VLEN_FREE_INFO_NAME,&free_info)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5P_set_vlen_mem_manager() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_vlen_mem_manager
+ *
+ * Purpose:	Sets the memory allocate/free pair for VL datatypes.  The
+ *		allocation routine is called when data is read into a new
+ *		array and the free routine is called when H5Dvlen_reclaim is
+ *		called.  The alloc_info and free_info are user parameters
+ *		which are passed to the allocation and freeing functions
+ *		respectively.  To reset the allocate/free functions to the
+ *		default setting of using the system's malloc/free functions,
+ *		call this routine with alloc_func and free_func set to NULL.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 1, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_vlen_mem_manager(hid_t plist_id, H5MM_allocate_t alloc_func,
+        void *alloc_info, H5MM_free_t free_func, void *free_info)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_vlen_mem_manager, FAIL);
+    H5TRACE5("e","ixxxx",plist_id,alloc_func,alloc_info,free_func,free_info);
+
+    /* Check arguments */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list");
+
+    /* Update property list */
+    if (H5P_set_vlen_mem_manager(plist,alloc_func,alloc_info,free_func,free_info)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set values");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pset_vlen_mem_manager() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_vlen_mem_manager
+ *
+ * Purpose:	The inverse of H5Pset_vlen_mem_manager()
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 1, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_vlen_mem_manager(hid_t plist_id, H5MM_allocate_t *alloc_func/*out*/,
+			void **alloc_info/*out*/,
+			H5MM_free_t *free_func/*out*/,
+			void **free_info/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_vlen_mem_manager, FAIL);
+    H5TRACE5("e","ixxxx",plist_id,alloc_func,alloc_info,free_func,free_info);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    if(alloc_func!=NULL)
+        if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_NAME,alloc_func)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value");
+    if(alloc_info!=NULL)
+        if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_INFO_NAME,alloc_info)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value");
+    if(free_func!=NULL)
+        if (H5P_get(plist,H5D_XFER_VLEN_FREE_NAME,free_func)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value");
+    if(free_info!=NULL)
+        if (H5P_get(plist,H5D_XFER_VLEN_FREE_INFO_NAME,free_info)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_hyper_vector_size
+ *
+ * Purpose:	Given a dataset transfer property list, set the number of
+ *              "I/O vectors" (offset and length pairs) which are to be
+ *              accumulated in memory before being issued to the lower levels
+ *              of the library for reading or writing the actual data.
+ *              Increasing the number should give better performance, but use
+ *              more memory during hyperslab I/O.  The vector size must be
+ *              greater than 1.
+ *
+ *		The default is to use 1024 vectors for I/O during hyperslab
+ *              reading/writing.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, July 9, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_hyper_vector_size(hid_t plist_id, size_t vector_size)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_hyper_vector_size, FAIL);
+    H5TRACE2("e","iz",plist_id,vector_size);
+
+    /* Check arguments */
+    if (vector_size<1)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "vector size too small");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Update property list */
+    if (H5P_set(plist,H5D_XFER_HYPER_VECTOR_SIZE_NAME,&vector_size)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "unable to set value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pset_hyper_vector_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_hyper_vector_size
+ *
+ * Purpose:	Reads values previously set with H5Pset_hyper_vector_size().
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, July 9, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_hyper_vector_size(hid_t plist_id, size_t *vector_size/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_hyper_vector_size, FAIL);
+    H5TRACE2("e","ix",plist_id,vector_size);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Return values */
+    if (vector_size)
+        if (H5P_get(plist,H5D_XFER_HYPER_VECTOR_SIZE_NAME,vector_size)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pget_hyper_vector_size() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Pfapl.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Pfapl.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Pfapl.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1565 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5P_PACKAGE		/*suppress error about including H5Ppkg	  */
+
+
+/* Private header files */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dprivate.h"		/* Datasets				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* Files		  	*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Ppkg.h"		/* Property lists		  	*/
+
+/* Default file driver - see H5Pget_driver() */
+#include "H5FDsec2.h"		/* Posix unbuffered I/O	file driver	*/
+
+/* Local datatypes */
+
+/* Static function prototypes */
+static herr_t H5P_set_family_offset(H5P_genplist_t *plist, hsize_t offset);
+static herr_t H5P_get_family_offset(H5P_genplist_t *plist, hsize_t *offset);
+static herr_t H5P_set_multi_type(H5P_genplist_t *plist, H5FD_mem_t type);
+static herr_t H5P_get_multi_type(H5P_genplist_t *plist, H5FD_mem_t *type);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_alignment
+ *
+ * Purpose:	Sets the alignment properties of a file access property list
+ *		so that any file object >= THRESHOLD bytes will be aligned on
+ *		an address which is a multiple of ALIGNMENT.  The addresses
+ *		are relative to the end of the user block; the alignment is
+ *		calculated by subtracting the user block size from the
+ *		absolute file address and then adjusting the address to be a
+ *		multiple of ALIGNMENT.
+ *
+ *		Default values for THRESHOLD and ALIGNMENT are one, implying
+ *		no alignment.  Generally the default values will result in
+ *		the best performance for single-process access to the file.
+ *		For MPI-IO and other parallel systems, choose an alignment
+ *		which is a multiple of the disk block size.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, June  9, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ *		Tuesday, Oct 23, 2001
+ *		Changed file access property list mechanism to the new
+ *		generic property list.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_alignment(hid_t fapl_id, hsize_t threshold, hsize_t alignment)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_alignment, FAIL);
+    H5TRACE3("e","ihh",fapl_id,threshold,alignment);
+
+    /* Check args */
+    if (alignment<1)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "alignment must be positive");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set values */
+    if(H5P_set(plist, H5F_ACS_ALIGN_THRHD_NAME, &threshold) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set threshold");
+    if(H5P_set(plist, H5F_ACS_ALIGN_NAME, &alignment) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set alignment");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_alignment
+ *
+ * Purpose:	Returns the current settings for alignment properties from a
+ *		file access property list.  The THRESHOLD and/or ALIGNMENT
+ *		pointers may be null pointers.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, June  9, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ *		Tuesday, Oct 23, 2001
+ *		Changed the file access list design to the new generic
+ *		property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_alignment(hid_t fapl_id, hsize_t *threshold/*out*/,
+		  hsize_t *alignment/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Pget_alignment, FAIL);
+    H5TRACE3("e","ixx",fapl_id,threshold,alignment);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get values */
+    if (threshold)
+        if(H5P_get(plist, H5F_ACS_ALIGN_THRHD_NAME, threshold) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get threshold");
+    if (alignment)
+        if(H5P_get(plist, H5F_ACS_ALIGN_NAME, alignment) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get alignment");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5P_set_driver
+ *
+ * Purpose:	Set the file driver (DRIVER_ID) for a file access or data
+ *		transfer property list (PLIST_ID) and supply an optional
+ *		struct containing the driver-specific properites
+ *		(DRIVER_INFO).  The driver properties will be copied into the
+ *		property list and the reference count on the driver will be
+ *		incremented, allowing the caller to close the driver ID but
+ *		still use the property list.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, August  3, 1999
+ *
+ * Modifications:
+ *
+ * 		Raymond Lu
+ * 		Tuesday, Oct 23, 2001
+ *		Changed the file access list design to the new generic
+ *		property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5P_set_driver(H5P_genplist_t *plist, hid_t new_driver_id, const void *new_driver_info)
+{
+    hid_t driver_id;            /* VFL driver ID */
+    void *driver_info;          /* VFL driver info */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5P_set_driver, FAIL);
+
+    if (NULL==H5I_object_verify(new_driver_id, H5I_VFL))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file driver ID");
+
+    if( TRUE == H5P_isa_class(plist->plist_id, H5P_FILE_ACCESS) ) {
+        /* Get the current driver information */
+        if(H5P_get(plist, H5F_ACS_FILE_DRV_ID_NAME, &driver_id) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get driver ID");
+        if(H5P_get(plist, H5F_ACS_FILE_DRV_INFO_NAME, &driver_info) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET,FAIL,"can't get driver info");
+
+        /* Close the driver for the property list */
+        if(H5FD_fapl_close(driver_id, driver_info)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't reset driver")
+
+        /* Set the driver for the property list */
+        if(H5FD_fapl_open(plist, new_driver_id, new_driver_info)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set driver")
+    } else if( TRUE == H5P_isa_class(plist->plist_id, H5P_DATASET_XFER) ) {
+        /* Get the current driver information */
+        if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &driver_id)<0)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve VFL driver ID");
+        if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &driver_info)<0)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve VFL driver info");
+
+        /* Close the driver for the property list */
+        if(H5FD_dxpl_close(driver_id, driver_info)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't reset driver")
+
+        /* Set the driver for the property list */
+        if(H5FD_dxpl_open(plist, new_driver_id, new_driver_info)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set driver")
+    } else {
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access or data transfer property list");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5P_set_driver() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_driver
+ *
+ * Purpose:	Set the file driver (DRIVER_ID) for a file access or data
+ *		transfer property list (PLIST_ID) and supply an optional
+ *		struct containing the driver-specific properites
+ *		(DRIVER_INFO).  The driver properties will be copied into the
+ *		property list and the reference count on the driver will be
+ *		incremented, allowing the caller to close the driver ID but
+ *		still use the property list.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, August  3, 1999
+ *
+ * Modifications:
+ *
+ * 		Raymond Lu
+ * 		Tuesday, Oct 23, 2001
+ *		Changed the file access list design to the new generic
+ *		property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_driver(hid_t plist_id, hid_t new_driver_id, const void *new_driver_info)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_API(H5Pset_driver, FAIL);
+    H5TRACE3("e","iix",plist_id,new_driver_id,new_driver_info);
+
+    /* Check arguments */
+    if(NULL == (plist = H5I_object_verify(plist_id, H5I_GENPROP_LST)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+    if (NULL==H5I_object_verify(new_driver_id, H5I_VFL))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file driver ID");
+
+    /* Set the driver */
+    if(H5P_set_driver(plist,new_driver_id,new_driver_info)<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set driver info");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pset_driver() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5P_get_driver
+ *
+ * Purpose:	Return the ID of the low-level file driver.  PLIST_ID should
+ *		be a file access property list or data transfer propert list.
+ *
+ * Return:	Success:	A low-level driver ID which is the same ID
+ *				used when the driver was set for the property
+ *				list. The driver ID is only valid as long as
+ *				the file driver remains registered.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, February 26, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-08-03
+ *		Rewritten to use the virtual file layer.
+ *
+ * 		Robb Matzke, 1999-08-05
+ *		If the driver ID is H5FD_VFD_DEFAULT then substitute the
+ *              current value of H5FD_SEC2.
+ *
+ * 		Quincey Koziol 2000-11-28
+ *		Added internal function..
+ *
+ *		Raymond Lu, 2001-10-23
+ *		Changed the file access list design to the new generic
+ *		property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5P_get_driver(H5P_genplist_t *plist)
+{
+    hid_t	ret_value=FAIL;         /* Return value */
+
+    FUNC_ENTER_NOAPI(H5P_get_driver, FAIL);
+
+    /* Get the current driver ID */
+    if(TRUE == H5P_isa_class(plist->plist_id, H5P_FILE_ACCESS) ) {
+        if(H5P_get(plist, H5F_ACS_FILE_DRV_ID_NAME, &ret_value) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get driver ID");
+    } else if( TRUE == H5P_isa_class(plist->plist_id, H5P_DATASET_XFER) ) {
+        if(H5P_get(plist, H5D_XFER_VFL_ID_NAME, &ret_value)<0)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, FAIL, "Can't retrieve VFL driver ID");
+    } else {
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access or data transfer property list");
+    }
+
+    if (H5FD_VFD_DEFAULT==ret_value)
+        ret_value = H5FD_SEC2;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_driver
+ *
+ * Purpose:	Return the ID of the low-level file driver.  PLIST_ID should
+ *		be a file access property list or data transfer propert list.
+ *
+ * Return:	Success:	A low-level driver ID which is the same ID
+ *				used when the driver was set for the property
+ *				list. The driver ID is only valid as long as
+ *				the file driver remains registered.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, February 26, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-08-03
+ *		Rewritten to use the virtual file layer.
+ *
+ * 		Robb Matzke, 1999-08-05
+ *		If the driver ID is H5FD_VFD_DEFAULT then substitute the current value of
+ *		H5FD_SEC2.
+ *
+ * 		Quincey Koziol 2000-11-28
+ *		Added internal function..
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Pget_driver(hid_t plist_id)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    hid_t	ret_value;      /* Return value */
+
+    FUNC_ENTER_API(H5Pget_driver, FAIL);
+    H5TRACE1("i","i",plist_id);
+
+    if(NULL == (plist = H5I_object_verify(plist_id, H5I_GENPROP_LST)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a property list");
+
+    ret_value = H5P_get_driver(plist);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5P_get_driver_info
+ *
+ * Purpose:	Returns a pointer directly to the file driver-specific
+ *		information of a file access or data transfer property list.
+ *
+ * Return:	Success:	Ptr to *uncopied* driver specific data
+ *				structure if any.
+ *
+ *		Failure:	NULL. Null is also returned if the driver has
+ *				not registered any driver-specific properties
+ *				although no error is pushed on the stack in
+ *				this case.
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ *		Tuesday, Oct 23, 2001
+ *		Changed the file access list design to the new generic
+ *		property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5P_get_driver_info(H5P_genplist_t *plist)
+{
+    void	*ret_value=NULL;
+
+    FUNC_ENTER_NOAPI(H5P_get_driver_info, NULL);
+
+    /* Get the current driver info */
+    if( TRUE == H5P_isa_class(plist->plist_id, H5P_FILE_ACCESS) ) {
+        if(H5P_get(plist, H5F_ACS_FILE_DRV_INFO_NAME, &ret_value) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET,NULL,"can't get driver info");
+    } else if( TRUE == H5P_isa_class(plist->plist_id, H5P_DATASET_XFER) ) {
+        if(H5P_get(plist, H5D_XFER_VFL_INFO_NAME, &ret_value)<0)
+            HGOTO_ERROR (H5E_PLIST, H5E_CANTGET, NULL, "Can't retrieve VFL driver ID");
+    } else {
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access or data transfer property list");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5P_get_driver_info() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_driver_info
+ *
+ * Purpose:	Returns a pointer directly to the file driver-specific
+ *		information of a file access or data transfer property list.
+ *
+ * Return:	Success:	Ptr to *uncopied* driver specific data
+ *				structure if any.
+ *
+ *		Failure:	NULL. Null is also returned if the driver has
+ *				not registered any driver-specific properties
+ *				although no error is pushed on the stack in
+ *				this case.
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  4, 1999
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ *		Tuesday, Oct 23, 2001
+ *		Changed the file access list design to the new generic
+ *		property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+void *
+H5Pget_driver_info(hid_t plist_id)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    void	*ret_value;     /* Return value */
+
+    FUNC_ENTER_API(H5Pget_driver_info, NULL);
+
+    if(NULL == (plist = H5I_object_verify(plist_id, H5I_GENPROP_LST)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a property list");
+
+    if((ret_value=H5P_get_driver_info(plist))==NULL)
+        HGOTO_ERROR(H5E_PLIST,H5E_CANTGET,NULL,"can't get driver info");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pget_driver_info() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Pset_family_offset
+ *
+ * Purpose:     Set offset for family driver.  This file access property
+ *              list will be passed to H5Fget_vfd_handle or H5FDget_vfd_handle
+ *              to retrieve VFD file handle.
+ *
+ * Return:      Success:        Non-negative value.
+ *
+ *              Failure:        Negative value.
+ *
+ * Programmer:  Raymond Lu
+ *              Sep 17, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+*/
+herr_t
+H5Pset_family_offset(hid_t fapl_id, hsize_t offset)
+{
+    H5P_genplist_t      *plist;                 /* Property list pointer */
+    herr_t              ret_value=SUCCEED;      /* return value */
+
+    FUNC_ENTER_API(H5Pset_family_offset, FAIL);
+    H5TRACE2("e","ih",fapl_id,offset);
+
+    /* Get the plist structure */
+    if(H5P_DEFAULT == fapl_id)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "can't modify default property list");
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+         HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+    /* Set values */
+    if((ret_value=H5P_set_family_offset(plist, offset)) < 0)
+         HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set family offset");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5P_set_family_offset
+ *
+ * Purpose:     Set offset for family driver.  Private function for
+ *              H5Pset_family_offset
+ *
+ * Return:      Success:        Non-negative value.
+ *
+ *              Failure:        Negative value.
+ *
+ * Programmer:  Raymond Lu
+ *              Sep 17, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5P_set_family_offset(H5P_genplist_t *plist, hsize_t offset)
+{
+    herr_t      ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5P_set_family_offset, FAIL);
+
+    if( TRUE == H5P_isa_class(plist->plist_id, H5P_FILE_ACCESS) ) {
+         if(H5P_set(plist, H5F_ACS_FAMILY_OFFSET_NAME, &offset) < 0)
+              HGOTO_ERROR(H5E_PLIST, H5E_CANTSET,FAIL,"can't set offset for family file");
+    } else {
+         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access or data transfer property list");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Pget_family_offset
+ *
+ * Purpose:     Get offset for family driver.  This file access property
+ *              list will be passed to H5Fget_vfd_handle or H5FDget_vfd_handle
+ *              to retrieve VFD file handle.
+ *
+ * Return:      Success:        Non-negative value.
+ *
+ *              Failure:        Negative value.
+ *
+ * Programmer:  Raymond Lu
+ *              Sep 17, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_family_offset(hid_t fapl_id, hsize_t *offset)
+{
+    H5P_genplist_t      *plist;                 /* Property list pointer */
+    herr_t              ret_value=SUCCEED;      /* return value */
+
+    FUNC_ENTER_API(H5Pget_family_offset, FAIL);
+    H5TRACE2("e","i*h",fapl_id,offset);
+
+    /* Get the plist structure */
+    if(H5P_DEFAULT == fapl_id)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "can't modify default property list");
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+         HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+    /* Set values */
+    if((ret_value=H5P_get_family_offset(plist, offset)) < 0)
+         HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't get family offset");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5P_get_family_offset
+ *
+ * Purpose:     Get offset for family driver.  Private function for
+ *              H5Pget_family_offset
+ *
+ * Return:      Success:        Non-negative value.
+ *
+ *              Failure:        Negative value.
+ *
+ * Programmer:  Raymond Lu
+ *              Sep 17, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5P_get_family_offset(H5P_genplist_t *plist, hsize_t *offset)
+{
+    herr_t      ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5P_get_family_offset, FAIL);
+
+    if( TRUE == H5P_isa_class(plist->plist_id, H5P_FILE_ACCESS) ) {
+        if(H5P_get(plist, H5F_ACS_FAMILY_OFFSET_NAME, offset) < 0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTSET,FAIL,"can't set offset for family file");
+    } else {
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access or data transfer property list");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Pset_multi_type
+ *
+ * Purpose:     Set data type for multi driver.  This file access property
+ *              list will be passed to H5Fget_vfd_handle or H5FDget_vfd_handle
+ *              to retrieve VFD file handle.
+ *
+ * Return:      Success:        Non-negative value.
+ *
+ *              Failure:        Negative value.
+ *
+ * Programmer:  Raymond Lu
+ *              Sep 17, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_multi_type(hid_t fapl_id, H5FD_mem_t type)
+{
+    H5P_genplist_t      *plist;                 /* Property list pointer */
+    herr_t              ret_value=SUCCEED;      /* return value */
+
+    FUNC_ENTER_API(H5Pset_multi_type, FAIL);
+    H5TRACE2("e","iMt",fapl_id,type);
+
+    /* Get the plist structure */
+    if(H5P_DEFAULT == fapl_id)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "can't modify default property list");
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+         HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+    /* Set values */
+    if((ret_value=H5P_set_multi_type(plist, type)) < 0)
+         HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set data type for multi driver");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5P_set_multi_type
+ *
+ * Purpose:     Set data type for multi file driver.  Private function for
+ *              H5Pset_multi_type.
+ *
+ * Return:      Success:        Non-negative value.
+ *
+ *              Failure:        Negative value.
+ *
+ * Programmer:  Raymond Lu
+ *              Sep 17, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5P_set_multi_type(H5P_genplist_t *plist, H5FD_mem_t type)
+{
+    herr_t      ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5P_set_multi_type, FAIL);
+
+    if( TRUE == H5P_isa_class(plist->plist_id, H5P_FILE_ACCESS) ) {
+         if(H5P_set(plist, H5F_ACS_MULTI_TYPE_NAME, &type) < 0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTSET,FAIL,"can't set type for multi driver");
+    } else {
+         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access or data transfer property list");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Pget_multi_type
+ *
+ * Purpose:     Get data type for multi driver.  This file access property
+ *              list will be passed to H5Fget_vfd_handle or H5FDget_vfd_handle
+ *              to retrieve VFD file handle.
+ *
+ * Return:      Success:        Non-negative value.
+ *
+ *              Failure:        Negative value.
+ *
+ * Programmer:  Raymond Lu
+ *              Sep 17, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_multi_type(hid_t fapl_id, H5FD_mem_t *type)
+{
+    H5P_genplist_t      *plist;                 /* Property list pointer */
+    herr_t              ret_value=SUCCEED;      /* return value */
+
+    FUNC_ENTER_API(H5Pget_multi_type, FAIL);
+    H5TRACE2("e","i*Mt",fapl_id,type);
+
+    /* Get the plist structure */
+    if(H5P_DEFAULT == fapl_id)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "can't modify default property list");
+    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+         HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+    /* Set values */
+    if((ret_value=H5P_get_multi_type(plist, type)) < 0)
+         HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't get data type for multi driver");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5P_get_multi_type
+ *
+ * Purpose:     Get data type for multi file driver.  Private function for
+ *              H5Pget_multi_type.
+ *
+ * Return:      Success:        Non-negative value.
+ *
+ *              Failure:        Negative value.
+ *
+ * Programmer:  Raymond Lu
+ *              Sep 17, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5P_get_multi_type(H5P_genplist_t *plist, H5FD_mem_t *type)
+{
+    herr_t      ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5P_get_multi_type, FAIL);
+
+    if( TRUE == H5P_isa_class(plist->plist_id, H5P_FILE_ACCESS) ) {
+         if(H5P_get(plist, H5F_ACS_MULTI_TYPE_NAME, type) < 0)
+             HGOTO_ERROR(H5E_PLIST, H5E_CANTSET,FAIL,"can't get type for multi driver");
+    } else {
+         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_cache
+ *
+ * Purpose:	Set the number of objects in the meta data cache and the
+ *		maximum number of chunks and bytes in the raw data chunk
+ *		cache.
+ *
+ * 		The RDCC_W0 value should be between 0 and 1 inclusive and
+ *		indicates how much chunks that have been fully read or fully
+ *		written are favored for preemption.  A value of zero means
+ *		fully read or written chunks are treated no differently than
+ *		other chunks (the preemption is strictly LRU) while a value
+ *		of one means fully read chunks are always preempted before
+ *		other chunks.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, May 19, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ *		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_cache(hid_t plist_id, int mdc_nelmts,
+	     int _rdcc_nelmts, size_t rdcc_nbytes, double rdcc_w0)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    size_t rdcc_nelmts=(size_t)_rdcc_nelmts;    /* Work around variable changing size */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_cache, FAIL);
+    H5TRACE5("e","iIsIszd",plist_id,mdc_nelmts,_rdcc_nelmts,rdcc_nbytes,
+             rdcc_w0);
+
+    /* Check arguments */
+    if (mdc_nelmts<0)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "meta data cache size must be non-negative");
+    if (rdcc_w0<0.0 || rdcc_w0>1.0)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "raw data cache w0 value must be between 0.0 and 1.0 inclusive");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set sizes */
+    if(H5P_set(plist, H5F_ACS_META_CACHE_SIZE_NAME, &mdc_nelmts) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET,FAIL, "can't set meta data cache size");
+    if(H5P_set(plist, H5F_ACS_DATA_CACHE_ELMT_SIZE_NAME, &rdcc_nelmts) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET,FAIL, "can't set data cache element size");
+    if(H5P_set(plist, H5F_ACS_DATA_CACHE_BYTE_SIZE_NAME, &rdcc_nbytes) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET,FAIL, "can't set data cache byte size");
+    if(H5P_set(plist, H5F_ACS_PREEMPT_READ_CHUNKS_NAME, &rdcc_w0) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET,FAIL, "can't set preempt read chunks");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_cache
+ *
+ * Purpose:	Retrieves the maximum possible number of elements in the meta
+ *		data cache and the maximum possible number of elements and
+ *		bytes and the RDCC_W0 value in the raw data chunk cache.  Any
+ *		(or all) arguments may be null pointers in which case the
+ *		corresponding datum is not returned.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, May 19, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ *		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_cache(hid_t plist_id, int *mdc_nelmts,
+	     int *_rdcc_nelmts, size_t *rdcc_nbytes, double *rdcc_w0)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    size_t rdcc_nelmts;         /* Work around variable changing size */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_cache, FAIL);
+    H5TRACE5("e","i*Is*Is*z*d",plist_id,mdc_nelmts,_rdcc_nelmts,rdcc_nbytes,
+             rdcc_w0);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get sizes */
+    if (mdc_nelmts)
+        if(H5P_get(plist, H5F_ACS_META_CACHE_SIZE_NAME, mdc_nelmts) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET,FAIL, "can't get meta data cache size");
+    if (_rdcc_nelmts) {
+        if(H5P_get(plist, H5F_ACS_DATA_CACHE_ELMT_SIZE_NAME, &rdcc_nelmts) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET,FAIL, "can't get data cache element size");
+        *_rdcc_nelmts=rdcc_nelmts;
+    } /* end if */
+    if (rdcc_nbytes)
+        if(H5P_get(plist, H5F_ACS_DATA_CACHE_BYTE_SIZE_NAME, rdcc_nbytes) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET,FAIL, "can't get data cache byte size");
+    if (rdcc_w0)
+        if(H5P_get(plist, H5F_ACS_PREEMPT_READ_CHUNKS_NAME, rdcc_w0) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET,FAIL, "can't get preempt read chunks");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+#else /* H5_WANT_H5_V1_4_COMPAT */
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_cache
+ *
+ * Purpose:	Set the number of objects in the meta data cache and the
+ *		maximum number of chunks and bytes in the raw data chunk
+ *		cache.
+ *
+ * 		The RDCC_W0 value should be between 0 and 1 inclusive and
+ *		indicates how much chunks that have been fully read or fully
+ *		written are favored for preemption.  A value of zero means
+ *		fully read or written chunks are treated no differently than
+ *		other chunks (the preemption is strictly LRU) while a value
+ *		of one means fully read chunks are always preempted before
+ *		other chunks.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, May 19, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ *		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_cache(hid_t plist_id, int mdc_nelmts,
+	     size_t rdcc_nelmts, size_t rdcc_nbytes, double rdcc_w0)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_cache, FAIL);
+    H5TRACE5("e","iIszzd",plist_id,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0);
+
+    /* Check arguments */
+    if (mdc_nelmts<0)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "meta data cache size must be non-negative");
+    if (rdcc_w0<0.0 || rdcc_w0>1.0)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "raw data cache w0 value must be between 0.0 and 1.0 inclusive");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set sizes */
+    if(H5P_set(plist, H5F_ACS_META_CACHE_SIZE_NAME, &mdc_nelmts) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET,FAIL, "can't set meta data cache size");
+    if(H5P_set(plist, H5F_ACS_DATA_CACHE_ELMT_SIZE_NAME, &rdcc_nelmts) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET,FAIL, "can't set data cache element size");
+    if(H5P_set(plist, H5F_ACS_DATA_CACHE_BYTE_SIZE_NAME, &rdcc_nbytes) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET,FAIL, "can't set data cache byte size");
+    if(H5P_set(plist, H5F_ACS_PREEMPT_READ_CHUNKS_NAME, &rdcc_w0) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET,FAIL, "can't set preempt read chunks");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_cache
+ *
+ * Purpose:	Retrieves the maximum possible number of elements in the meta
+ *		data cache and the maximum possible number of elements and
+ *		bytes and the RDCC_W0 value in the raw data chunk cache.  Any
+ *		(or all) arguments may be null pointers in which case the
+ *		corresponding datum is not returned.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, May 19, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ *		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_cache(hid_t plist_id, int *mdc_nelmts,
+	     size_t *rdcc_nelmts, size_t *rdcc_nbytes, double *rdcc_w0)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_cache, FAIL);
+    H5TRACE5("e","i*Is*z*z*d",plist_id,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,
+             rdcc_w0);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get sizes */
+    if (mdc_nelmts)
+        if(H5P_get(plist, H5F_ACS_META_CACHE_SIZE_NAME, mdc_nelmts) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET,FAIL, "can't get meta data cache size");
+    if (rdcc_nelmts)
+        if(H5P_get(plist, H5F_ACS_DATA_CACHE_ELMT_SIZE_NAME, rdcc_nelmts) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET,FAIL, "can't get data cache element size");
+    if (rdcc_nbytes)
+        if(H5P_get(plist, H5F_ACS_DATA_CACHE_BYTE_SIZE_NAME, rdcc_nbytes) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET,FAIL, "can't get data cache byte size");
+    if (rdcc_w0)
+        if(H5P_get(plist, H5F_ACS_PREEMPT_READ_CHUNKS_NAME, rdcc_w0) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET,FAIL, "can't get preempt read chunks");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_gc_references
+ *
+ * Purpose:	Sets the flag for garbage collecting references for the file.
+ *		Dataset region references (and other reference types
+ *		probably) use space in the file heap.  If garbage collection
+ *		is on and the user passes in an uninitialized value in a
+ *		reference structure, the heap might get corrupted.  When
+ *		garbage collection is off however and the user re-uses a
+ *		reference, the previous heap block will be orphaned and not
+ *		returned to the free heap space.  When garbage collection is
+ *		on, the user must initialize the reference structures to 0 or
+ *		risk heap corruption.
+ *
+ *		Default value for garbage collecting references is off, just
+ *		to be on the safe side.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		June, 1999
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ * 		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_gc_references(hid_t plist_id, unsigned gc_ref)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_gc_references, FAIL);
+    H5TRACE2("e","iIu",plist_id,gc_ref);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set values */
+    if(H5P_set(plist, H5F_ACS_GARBG_COLCT_REF_NAME, &gc_ref) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set garbage collect reference");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_gc_references
+ *
+ * Purpose:	Returns the current setting for the garbage collection
+ *		references property from a file access property list.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              June, 1999
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ *		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_gc_references(hid_t plist_id, unsigned *gc_ref/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_gc_references, FAIL);
+    H5TRACE2("e","ix",plist_id,gc_ref);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get values */
+    if (gc_ref)
+        if(H5P_get(plist, H5F_ACS_GARBG_COLCT_REF_NAME, gc_ref) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get garbage collect reference");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Pset_fclose_degree
+ *
+ * Purpose:     Sets the degree for the file close behavior.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Raymond Lu
+ *              November, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_fclose_degree(hid_t plist_id, H5F_close_degree_t degree)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_fclose_degree, FAIL);
+    H5TRACE2("e","iFd",plist_id,degree);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set values */
+    if(H5P_set(plist, H5F_CLOSE_DEGREE_NAME, &degree) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set file close degree");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Pget_fclose_degree
+ *
+ * Purpose:     Returns the degree for the file close behavior.
+ *
+ * Return:      Non-negative on success/Negative on failure
+ *
+ * Programmer:  Raymond Lu
+ *              November, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5Pget_fclose_degree(hid_t plist_id, H5F_close_degree_t *degree)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_fclose_degree, FAIL);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    if( degree && (H5P_get(plist, H5F_CLOSE_DEGREE_NAME, degree) < 0) )
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get file close degree");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_meta_block_size
+ *
+ * Purpose:	Sets the minimum size of metadata block allocations when
+ *      the H5FD_FEAT_AGGREGATE_METADATA is set by a VFL driver.
+ *      Each "raw" metadata block is allocated to be this size and then
+ *      specific pieces of metadata (object headers, local heaps, B-trees, etc)
+ *      are sub-allocated from this block.
+ *
+ *		The default value is set to 2048 (bytes), indicating that metadata
+ *      will be attempted to be bunched together in (at least) 2K blocks in
+ *      the file.  Setting the value to 0 with this API function will
+ *      turn off the metadata aggregation, even if the VFL driver attempts to
+ *      use that strategy.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, August 25, 2000
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ *		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_meta_block_size(hid_t plist_id, hsize_t size)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_meta_block_size, FAIL);
+    H5TRACE2("e","ih",plist_id,size);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set values */
+    if(H5P_set(plist, H5F_ACS_META_BLOCK_SIZE_NAME, &size) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set meta data block size");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_meta_block_size
+ *
+ * Purpose:	Returns the current settings for the metadata block allocation
+ *      property from a file access property list.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, August 29, 2000
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ * 		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_meta_block_size(hid_t plist_id, hsize_t *size/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_meta_block_size, FAIL);
+    H5TRACE2("e","ix",plist_id,size);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get values */
+    if (size) {
+        if(H5P_get(plist, H5F_ACS_META_BLOCK_SIZE_NAME, size) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get meta data block size");
+    } /* end if */
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_sieve_buf_size
+ *
+ * Purpose:	Sets the maximum size of the data seive buffer used for file
+ *      drivers which are capable of using data sieving.  The data sieve
+ *      buffer is used when performing I/O on datasets in the file.  Using a
+ *      buffer which is large anough to hold several pieces of the dataset
+ *      being read in for hyperslab selections boosts performance by quite a
+ *      bit.
+ *
+ *		The default value is set to 64KB, indicating that file I/O for raw data
+ *      reads and writes will occur in at least 64KB blocks.
+ *      Setting the value to 0 with this API function will turn off the
+ *      data sieving, even if the VFL driver attempts to use that strategy.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, September 21, 2000
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ * 		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_sieve_buf_size(hid_t plist_id, hsize_t _size)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    size_t size=(size_t)_size;  /* Work around size difference */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_sieve_buf_size, FAIL);
+    H5TRACE2("e","ih",plist_id,_size);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set values */
+    if(H5P_set(plist, H5F_ACS_SIEVE_BUF_SIZE_NAME, &size) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set sieve buffer size");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pset_sieve_buf_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_sieve_buf_size
+ *
+ * Purpose:	Returns the current settings for the data sieve buffer size
+ *      property from a file access property list.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, September 21, 2000
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ * 		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_sieve_buf_size(hid_t plist_id, hsize_t *_size/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    size_t size;                /* Work around size difference */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_sieve_buf_size, FAIL);
+    H5TRACE2("e","ix",plist_id,_size);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get values */
+    if (_size) {
+        if(H5P_get(plist, H5F_ACS_SIEVE_BUF_SIZE_NAME, &size) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get sieve buffer size");
+        *_size=size;
+    } /* end if */
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pget_sieve_buf_size() */
+#else /* H5_WANT_H5_V1_4_COMPAT */
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_sieve_buf_size
+ *
+ * Purpose:	Sets the maximum size of the data seive buffer used for file
+ *      drivers which are capable of using data sieving.  The data sieve
+ *      buffer is used when performing I/O on datasets in the file.  Using a
+ *      buffer which is large anough to hold several pieces of the dataset
+ *      being read in for hyperslab selections boosts performance by quite a
+ *      bit.
+ *
+ *		The default value is set to 64KB, indicating that file I/O for raw data
+ *      reads and writes will occur in at least 64KB blocks.
+ *      Setting the value to 0 with this API function will turn off the
+ *      data sieving, even if the VFL driver attempts to use that strategy.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, September 21, 2000
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ * 		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_sieve_buf_size(hid_t plist_id, size_t size)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_sieve_buf_size, FAIL);
+    H5TRACE2("e","iz",plist_id,size);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set values */
+    if(H5P_set(plist, H5F_ACS_SIEVE_BUF_SIZE_NAME, &size) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set sieve buffer size");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pset_sieve_buf_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_sieve_buf_size
+ *
+ * Purpose:	Returns the current settings for the data sieve buffer size
+ *      property from a file access property list.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, September 21, 2000
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ * 		Tuesday, Oct 23, 2001
+ *		Changed the file access list to the new generic property
+ *		list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_sieve_buf_size(hid_t plist_id, size_t *size/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_sieve_buf_size, FAIL);
+    H5TRACE2("e","ix",plist_id,size);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get values */
+    if (size)
+        if(H5P_get(plist, H5F_ACS_SIEVE_BUF_SIZE_NAME, size) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get sieve buffer size");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pget_sieve_buf_size() */
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_small_data_block_size
+ *
+ * Purpose:	Sets the minimum size of "small" raw data block allocations
+ *      when the H5FD_FEAT_AGGREGATE_SMALLDATA is set by a VFL driver.
+ *      Each "small" raw data block is allocated to be this size and then
+ *      pieces of raw data which are small enough to fit are sub-allocated from
+ *      this block.
+ *
+ *	The default value is set to 2048 (bytes), indicating that raw data
+ *      smaller than this value will be attempted to be bunched together in (at
+ *      least) 2K blocks in the file.  Setting the value to 0 with this API
+ *      function will turn off the "small" raw data aggregation, even if the
+ *      VFL driver attempts to use that strategy.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, June 5, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_small_data_block_size(hid_t plist_id, hsize_t size)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_small_data_block_size, FAIL);
+    H5TRACE2("e","ih",plist_id,size);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set values */
+    if(H5P_set(plist, H5F_ACS_SDATA_BLOCK_SIZE_NAME, &size) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set 'small data' block size");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pset_small_data_block_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_small_data_block_size
+ *
+ * Purpose:	Returns the current settings for the "small" raw data block
+ *      allocation property from a file access property list.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, June 5, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_small_data_block_size(hid_t plist_id, hsize_t *size/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_small_data_block_size, FAIL);
+    H5TRACE2("e","ix",plist_id,size);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_ACCESS)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get values */
+    if (size) {
+        if(H5P_get(plist, H5F_ACS_META_BLOCK_SIZE_NAME, size) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get 'small data' block size");
+    } /* end if */
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Pget_small_data_block_size() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Pfcpl.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Pfcpl.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Pfcpl.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,601 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5P_PACKAGE		/*suppress error about including H5Ppkg	  */
+
+
+/* Private header files */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Bprivate.h"		/* B-tree subclass names	  	*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* Files		  	*/
+#include "H5Ppkg.h"		/* Property lists		  	*/
+
+/* Local datatypes */
+
+/* Static function prototypes */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_version
+ *
+ * Purpose:	Retrieves version information for various parts of a file.
+ *
+ *		SUPER:		The file super block.
+ *		HEAP:		The global heap.
+ *		FREELIST:	The global free list.
+ *		STAB:		The root symbol table entry.
+ *		SHHDR:		Shared object headers.
+ *
+ *		Any (or even all) of the output arguments can be null
+ *		pointers.
+ *
+ * Return:	Success:	Non-negative, version information is returned
+ *				through the arguments.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ * 		Raymond Lu, Oct 14, 2001
+ * 		Change to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_version(hid_t plist_id, unsigned *super/*out*/, unsigned *freelist/*out*/,
+	       unsigned *stab/*out*/, unsigned *shhdr/*out*/)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_API(H5Pget_version, FAIL);
+    H5TRACE5("e","ixxxx",plist_id,super,freelist,stab,shhdr);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get values */
+    if (super)
+        if(H5P_get(plist, H5F_CRT_SUPER_VERS_NAME, super) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get superblock version");
+    if (freelist)
+        if(H5P_get(plist, H5F_CRT_FREESPACE_VERS_NAME, freelist) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get free-space version");
+    if (stab)
+        if(H5P_get(plist, H5F_CRT_OBJ_DIR_VERS_NAME, stab) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get object directory version");
+    if (shhdr)
+        if(H5P_get(plist, H5F_CRT_SHARE_HEAD_VERS_NAME, shhdr) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get shared-header version");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_userblock
+ *
+ * Purpose:	Sets the userblock size field of a file creation property
+ *		list.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, January  6, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu, Oct 14, 2001
+ * 		Changed to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_userblock(hid_t plist_id, hsize_t size)
+{
+    unsigned		    i;
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_userblock, FAIL);
+    H5TRACE2("e","ih",plist_id,size);
+
+    /* Check that the userblock size is a power of two */
+    for (i=8; i<8*sizeof(hsize_t); i++) {
+        hsize_t p2 = 8==i ? 0 : ((hsize_t)1<<i);
+
+        if (size == p2)
+            break;
+    }
+    if (i>=8*sizeof(hsize_t))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "userblock size is not valid");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set value */
+    if(H5P_set(plist, H5F_CRT_USER_BLOCK_NAME, &size) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set user block");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_userblock
+ *
+ * Purpose:	Queries the size of a user block in a file creation property
+ *		list.
+ *
+ * Return:	Success:	Non-negative, size returned through SIZE argument.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu, Oct 14, 2001
+ *		Changed to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_userblock(hid_t plist_id, hsize_t *size)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_userblock, FAIL);
+    H5TRACE2("e","i*h",plist_id,size);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get value */
+    if (size)
+        if(H5P_get(plist, H5F_CRT_USER_BLOCK_NAME, size) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL,"can't get user block");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_sizes
+ *
+ * Purpose:	Sets file size-of addresses and sizes.	PLIST_ID should be a
+ *		file creation property list.  A value of zero causes the
+ *		property to not change.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, January  6, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_sizes(hid_t plist_id, size_t sizeof_addr, size_t sizeof_size)
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pset_sizes, FAIL);
+    H5TRACE3("e","izz",plist_id,sizeof_addr,sizeof_size);
+
+    /* Check arguments */
+    if (sizeof_addr) {
+        if (sizeof_addr != 2 && sizeof_addr != 4 &&
+                sizeof_addr != 8 && sizeof_addr != 16)
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file haddr_t size is not valid");
+    }
+    if (sizeof_size) {
+        if (sizeof_size != 2 && sizeof_size != 4 &&
+                sizeof_size != 8 && sizeof_size != 16)
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file size_t size is not valid");
+    }
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set value */
+    if (sizeof_addr)
+        if(H5P_set(plist, H5F_CRT_ADDR_BYTE_NUM_NAME, &sizeof_addr) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set byte number for an address");
+    if (sizeof_size)
+        if(H5P_set(plist, H5F_CRT_OBJ_BYTE_NUM_NAME, &sizeof_size) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set byte number for object ");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_sizes
+ *
+ * Purpose:	Returns the size of address and size quantities stored in a
+ *		file according to a file creation property list.  Either (or
+ *		even both) SIZEOF_ADDR and SIZEOF_SIZE may be null pointers.
+ *
+ * Return:	Success:	Non-negative, sizes returned through arguments.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_sizes(hid_t plist_id,
+	     size_t *sizeof_addr /*out */ , size_t *sizeof_size /*out */ )
+{
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_sizes, FAIL);
+    H5TRACE3("e","ixx",plist_id,sizeof_addr,sizeof_size);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get values */
+    if (sizeof_addr)
+        if(H5P_get(plist, H5F_CRT_ADDR_BYTE_NUM_NAME, sizeof_addr) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get byte number for an address");
+    if (sizeof_size)
+        if(H5P_get(plist, H5F_CRT_OBJ_BYTE_NUM_NAME, sizeof_size) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get byte number for object ");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_sym_k
+ *
+ * Purpose:	IK is one half the rank of a tree that stores a symbol
+ *		table for a group.  Internal nodes of the symbol table are on
+ *		average 75% full.  That is, the average rank of the tree is
+ *		1.5 times the value of IK.
+ *
+ *		LK is one half of the number of symbols that can be stored in
+ *		a symbol table node.  A symbol table node is the leaf of a
+ *		symbol table tree which is used to store a group.  When
+ *		symbols are inserted randomly into a group, the group's
+ *		symbol table nodes are 75% full on average.  That is, they
+ *		contain 1.5 times the number of symbols specified by LK.
+ *
+ *		Either (or even both) of IK and LK can be zero in which case
+ *		that value is left unchanged.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, January  6, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu, Oct 14, 2001
+ *         	Changed to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_sym_k(hid_t plist_id, int ik, int lk)
+{
+    int btree_k[H5B_NUM_BTREE_ID];
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Pset_sym_k, FAIL);
+    H5TRACE3("e","iIsIs",plist_id,ik,lk);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set values */
+    if (ik > 0) {
+        if(H5P_get(plist, H5F_CRT_BTREE_RANK_NAME, btree_k) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get rank for btree interanl nodes");
+        btree_k[H5B_SNODE_ID] = ik;
+        if(H5P_set(plist, H5F_CRT_BTREE_RANK_NAME, btree_k) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set rank for btree nodes");
+    }
+    if (lk > 0)
+        if(H5P_set(plist, H5F_CRT_SYM_LEAF_NAME, &lk) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set rank for symbol table leaf nodes");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_sym_k
+ *
+ * Purpose:	Retrieves the symbol table B-tree 1/2 rank (IK) and the
+ *		symbol table leaf node 1/2 size (LK).  See H5Pset_sym_k() for
+ *		details. Either (or even both) IK and LK may be null
+ *		pointers.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ *		Changed to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_sym_k(hid_t plist_id, int *ik /*out */ , int *lk /*out */ )
+{
+    int btree_k[H5B_NUM_BTREE_ID];
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Pget_sym_k, FAIL);
+    H5TRACE3("e","ixx",plist_id,ik,lk);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get values */
+    if (ik) {
+        if(H5P_get(plist, H5F_CRT_BTREE_RANK_NAME, btree_k) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get rank for btree nodes");
+        *ik = btree_k[H5B_SNODE_ID];
+    }
+    if (lk)
+        if(H5P_get(plist, H5F_CRT_SYM_LEAF_NAME, lk) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get rank for symbol table leaf nodes");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+#else /* H5_WANT_H5_V1_4_COMPAT */
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_sym_k
+ *
+ * Purpose:	IK is one half the rank of a tree that stores a symbol
+ *		table for a group.  Internal nodes of the symbol table are on
+ *		average 75% full.  That is, the average rank of the tree is
+ *		1.5 times the value of IK.
+ *
+ *		LK is one half of the number of symbols that can be stored in
+ *		a symbol table node.  A symbol table node is the leaf of a
+ *		symbol table tree which is used to store a group.  When
+ *		symbols are inserted randomly into a group, the group's
+ *		symbol table nodes are 75% full on average.  That is, they
+ *		contain 1.5 times the number of symbols specified by LK.
+ *
+ *		Either (or even both) of IK and LK can be zero in which case
+ *		that value is left unchanged.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, January  6, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu, Oct 14, 2001
+ *         	Changed to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_sym_k(hid_t plist_id, unsigned ik, unsigned lk)
+{
+    unsigned btree_k[H5B_NUM_BTREE_ID];
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Pset_sym_k, FAIL);
+    H5TRACE3("e","iIuIu",plist_id,ik,lk);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set values */
+    if (ik > 0) {
+        if(H5P_get(plist, H5F_CRT_BTREE_RANK_NAME, btree_k) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get rank for btree interanl nodes");
+        btree_k[H5B_SNODE_ID] = ik;
+        if(H5P_set(plist, H5F_CRT_BTREE_RANK_NAME, btree_k) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set rank for btree nodes");
+    }
+    if (lk > 0)
+        if(H5P_set(plist, H5F_CRT_SYM_LEAF_NAME, &lk) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set rank for symbol table leaf nodes");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_sym_k
+ *
+ * Purpose:	Retrieves the symbol table B-tree 1/2 rank (IK) and the
+ *		symbol table leaf node 1/2 size (LK).  See H5Pset_sym_k() for
+ *		details. Either (or even both) IK and LK may be null
+ *		pointers.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ *		Changed to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_sym_k(hid_t plist_id, unsigned *ik /*out */ , unsigned *lk /*out */ )
+{
+    unsigned btree_k[H5B_NUM_BTREE_ID];
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Pget_sym_k, FAIL);
+    H5TRACE3("e","ixx",plist_id,ik,lk);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get values */
+    if (ik) {
+        if(H5P_get(plist, H5F_CRT_BTREE_RANK_NAME, btree_k) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get rank for btree nodes");
+        *ik = btree_k[H5B_SNODE_ID];
+    }
+    if (lk)
+        if(H5P_get(plist, H5F_CRT_SYM_LEAF_NAME, lk) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get rank for symbol table leaf nodes");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pset_istore_k
+ *
+ * Purpose:	IK is one half the rank of a tree that stores chunked raw
+ *		data.  On average, such a tree will be 75% full, or have an
+ *		average rank of 1.5 times the value of IK.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, January  6, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu, Oct 14, 2001
+ *		Changed to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pset_istore_k(hid_t plist_id, unsigned ik)
+{
+    unsigned btree_k[H5B_NUM_BTREE_ID];
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Pset_istore_k, FAIL);
+    H5TRACE2("e","iIu",plist_id,ik);
+
+    /* Check arguments */
+    if (ik == 0)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "istore IK value must be positive");
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Set value */
+    if(H5P_get(plist, H5F_CRT_BTREE_RANK_NAME, btree_k) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get rank for btree interanl nodes");
+    btree_k[H5B_ISTORE_ID] = ik;
+    if(H5P_set(plist, H5F_CRT_BTREE_RANK_NAME, btree_k) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "can't set rank for btree interanl nodes");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_istore_k
+ *
+ * Purpose:	Queries the 1/2 rank of an indexed storage B-tree.  See
+ *		H5Pset_istore_k() for details.	The argument IK may be the
+ *		null pointer.
+ *
+ * Return:	Success:	Non-negative, size returned through IK
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ *		Raymond Lu, Oct 14, 2001
+ *		Changed to the new generic property list.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_istore_k(hid_t plist_id, unsigned *ik /*out */ )
+{
+    unsigned btree_k[H5B_NUM_BTREE_ID];
+    H5P_genplist_t *plist;      /* Property list pointer */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_API(H5Pget_istore_k, FAIL);
+    H5TRACE2("e","ix",plist_id,ik);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id,H5P_FILE_CREATE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID");
+
+    /* Get value */
+    if (ik) {
+        if(H5P_get(plist, H5F_CRT_BTREE_RANK_NAME, btree_k) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't get rank for btree interanl nodes");
+        *ik = btree_k[H5B_ISTORE_ID];
+    }
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Ppkg.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Ppkg.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Ppkg.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,128 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *		Friday, November 16, 2001
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5P package.  Source files outside the H5P package should
+ *		include H5Pprivate.h instead.
+ */
+#ifndef H5P_PACKAGE
+#error "Do not include this file outside the H5P package!"
+#endif
+
+#ifndef _H5Ppkg_H
+#define _H5Ppkg_H
+
+/*
+ * Define this to enable debugging.
+ */
+#ifdef NDEBUG
+#  undef H5P_DEBUG
+#endif
+
+/* Get package's private header */
+#include "H5Pprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5SLprivate.h"	/* Skip lists				*/
+
+/* Define enum for type of object that property is within */
+typedef enum {
+    H5P_PROP_WITHIN_UNKNOWN=0,  /* Property container is unknown */
+    H5P_PROP_WITHIN_LIST,       /* Property is within a list */
+    H5P_PROP_WITHIN_CLASS       /* Property is within a class */
+} H5P_prop_within_t;
+
+/* Define enum for modifications to class */
+typedef enum {
+    H5P_MOD_ERR=(-1),   /* Indicate an error */
+    H5P_MOD_INC_CLS,    /* Increment the dependant class count*/
+    H5P_MOD_DEC_CLS,    /* Decrement the dependant class count*/
+    H5P_MOD_INC_LST,    /* Increment the dependant list count*/
+    H5P_MOD_DEC_LST,    /* Decrement the dependant list count*/
+    H5P_MOD_INC_REF,    /* Increment the ID reference count*/
+    H5P_MOD_DEC_REF,    /* Decrement the ID reference count*/
+    H5P_MOD_MAX         /* Upper limit on class modifications */
+} H5P_class_mod_t;
+
+/* Define structure to hold property information */
+typedef struct H5P_genprop_t {
+    /* Values for this property */
+    char *name;         /* Name of property */
+    size_t size;        /* Size of property value */
+    void *value;        /* Pointer to property value */
+    H5P_prop_within_t type;     /* Type of object the property is within */
+    unsigned shared_name;       /* Boolean: whether the name is shared or not */
+
+    /* Callback function pointers & info */
+    H5P_prp_create_func_t create;   /* Function to call when a property is created */
+    H5P_prp_set_func_t set; /* Function to call when a property value is set */
+    H5P_prp_get_func_t get; /* Function to call when a property value is retrieved */
+    H5P_prp_delete_func_t del; /* Function to call when a property is deleted */
+    H5P_prp_copy_func_t copy;  /* Function to call when a property is copied */
+    H5P_prp_compare_func_t cmp; /* Function to call when a property is compared */
+    H5P_prp_close_func_t close; /* Function to call when a property is closed */
+} H5P_genprop_t;
+
+/* Define structure to hold class information */
+struct H5P_genclass_t {
+    struct H5P_genclass_t *parent;     /* Pointer to parent class */
+    char *name;         /* Name of property list class */
+    size_t  nprops;     /* Number of properties in class */
+    unsigned   plists;     /* Number of property lists that have been created since the last modification to the class */
+    unsigned   classes;    /* Number of classes that have been derived since the last modification to the class */
+    unsigned   ref_count;  /* Number of oustanding ID's open on this class object */
+    unsigned   internal;   /* Whether this class is internal to the library or not */
+    unsigned   deleted;    /* Whether this class has been deleted and is waiting for dependent classes & proplists to close */
+    unsigned   revision;   /* Revision number of a particular class (global) */
+    H5SL_t *props;      /* Skip list containing properties */
+
+    /* Callback function pointers & info */
+    H5P_cls_create_func_t create_func;  /* Function to call when a property list is created */
+    void *create_data;  /* Pointer to user data to pass along to create callback */
+    H5P_cls_copy_func_t copy_func;   /* Function to call when a property list is copied */
+    void *copy_data;    /* Pointer to user data to pass along to copy callback */
+    H5P_cls_close_func_t close_func;   /* Function to call when a property list is closed */
+    void *close_data;   /* Pointer to user data to pass along to close callback */
+};
+
+/* Define structure to hold property list information */
+struct H5P_genplist_t {
+    H5P_genclass_t *pclass; /* Pointer to class info */
+    hid_t   plist_id;       /* Copy of the property list ID (for use in close callback) */
+    size_t  nprops;         /* Number of properties in class */
+    unsigned   class_init:1;   /* Whether the class initialization callback finished successfully */
+    H5SL_t *del;        /* Skip list containing names of deleted properties */
+    H5SL_t *props;      /* Skip list containing properties */
+};
+
+/* Private functions, not part of the publicly documented API */
+H5_DLL herr_t H5P_add_prop(H5SL_t *props, H5P_genprop_t *prop);
+H5_DLL herr_t H5P_access_class(H5P_genclass_t *pclass, H5P_class_mod_t mod);
+H5_DLL char *H5P_get_class_path(H5P_genclass_t *pclass);
+H5_DLL H5P_genclass_t *H5P_open_class_path(const char *path);
+H5_DLL int H5P_tbbt_strcmp(const void *k1, const void *k2, int cmparg);
+H5_DLL herr_t H5P_close_class(void *_pclass);
+
+/* Testing functions */
+#ifdef H5P_TESTING
+H5_DLL char *H5P_get_class_path_test(hid_t pclass_id);
+H5_DLL hid_t H5P_open_class_path_test(const char *path);
+#endif /* H5P_TESTING */
+
+#endif /* _H5Ppkg_H */
+

Added: packages/hdf5/branches/upstream/current/src/H5Pprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Pprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Pprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,74 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains private information about the H5P module
+ */
+#ifndef _H5Pprivate_H
+#define _H5Pprivate_H
+
+/* Include package's public header */
+#include "H5Ppublic.h"
+
+/* Private headers needed by this file */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Oprivate.h"		/* Object headers		  	*/
+
+/* Forward declarations for anonymous H5P objects */
+typedef struct H5P_genplist_t H5P_genplist_t;
+typedef struct H5P_genclass_t H5P_genclass_t;
+
+/* Private functions, not part of the publicly documented API */
+H5_DLL herr_t H5P_init(void);
+
+/* Internal versions of API routines */
+H5_DLL herr_t H5P_close(void *_plist);
+H5_DLL hid_t H5P_create_id(H5P_genclass_t *pclass);
+H5_DLL hid_t H5P_copy_plist(H5P_genplist_t *old_plist);
+H5_DLL herr_t H5P_get(H5P_genplist_t *plist, const char *name, void *value);
+H5_DLL herr_t H5P_set(H5P_genplist_t *plist, const char *name, const void *value);
+H5_DLL herr_t H5P_insert(H5P_genplist_t *plist, const char *name, size_t size,
+    void *value, H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
+    H5P_prp_delete_func_t prp_delete, H5P_prp_copy_func_t prp_copy,
+    H5P_prp_compare_func_t prp_cmp, H5P_prp_close_func_t prp_close);
+H5_DLL herr_t H5P_remove(hid_t plist_id, H5P_genplist_t *plist, const char *name);
+H5_DLL htri_t H5P_exist_plist(H5P_genplist_t *plist, const char *name);
+H5_DLL char *H5P_get_class_name(H5P_genclass_t *pclass);
+H5_DLL herr_t H5P_get_nprops_pclass(H5P_genclass_t *pclass, size_t *nprops);
+H5_DLL herr_t H5P_register(H5P_genclass_t *pclass, const char *name, size_t size,
+            void *def_value, H5P_prp_create_func_t prp_create, H5P_prp_set_func_t prp_set,
+            H5P_prp_get_func_t prp_get, H5P_prp_delete_func_t prp_delete,
+            H5P_prp_copy_func_t prp_copy, H5P_prp_compare_func_t prp_cmp,
+            H5P_prp_close_func_t prp_close);
+H5_DLL hid_t H5P_get_driver(H5P_genplist_t *plist);
+H5_DLL void * H5P_get_driver_info(H5P_genplist_t *plist);
+H5_DLL herr_t H5P_set_driver(H5P_genplist_t *plist, hid_t new_driver_id,
+            const void *new_driver_info);
+H5_DLL herr_t H5P_set_vlen_mem_manager(H5P_genplist_t *plist,
+        H5MM_allocate_t alloc_func, void *alloc_info, H5MM_free_t free_func,
+        void *free_info);
+H5_DLL herr_t H5P_is_fill_value_defined(const struct H5O_fill_t *fill,
+        H5D_fill_value_t *status);
+
+/* *SPECIAL* Don't make more of these! -QAK */
+H5_DLL htri_t H5P_isa_class(hid_t plist_id, hid_t pclass_id);
+H5_DLL void *H5P_object_verify(hid_t plist_id, hid_t pclass_id);
+
+/* Private functions to "peek" at properties of a certain type */
+H5_DLL unsigned H5P_peek_unsigned(H5P_genplist_t *plist, const char *name);
+H5_DLL hid_t H5P_peek_hid_t(H5P_genplist_t *plist, const char *name);
+H5_DLL void *H5P_peek_voidp(H5P_genplist_t *plist, const char *name);
+H5_DLL size_t H5P_peek_size_t(H5P_genplist_t *plist, const char *name);
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Ppublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Ppublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Ppublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,308 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains function prototypes for each exported function in the
+ * H5P module.
+ */
+#ifndef _H5Ppublic_H
+#define _H5Ppublic_H
+
+/* Default Template for creation, access, etc. templates */
+#define H5P_DEFAULT     0
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Ipublic.h"
+#include "H5Dpublic.h"
+#include "H5Fpublic.h"
+#include "H5FDpublic.h"
+#include "H5MMpublic.h"
+#include "H5Zpublic.h"
+
+/* Metroworks <sys/types.h> doesn't define off_t. */
+#ifdef __MWERKS__
+typedef long off_t;
+/* Metroworks does not define EINTR in <errno.h> */
+# define EINTR 4
+#endif
+/*__MWERKS__*/
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+/* Backward compatibility typedef... */
+typedef hid_t H5P_class_t;      /* Alias H5P_class_t to hid_t */
+
+/* H5P_DATASET_XFER was the name from the beginning through 1.2.  It was
+ * changed to H5P_DATA_XFER on v1.3.0.  Then it was changed back to
+ * H5P_DATASET_XFER right before the release of v1.4.0-beta2.
+ * Define an alias here to help applications that had ported to v1.3.
+ * Should be removed in later version.
+ */
+#define H5P_DATA_XFER H5P_DATASET_XFER
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Define property list class callback function pointer types */
+typedef herr_t (*H5P_cls_create_func_t)(hid_t prop_id, void *create_data);
+typedef herr_t (*H5P_cls_copy_func_t)(hid_t new_prop_id, hid_t old_prop_id,
+                                      void *copy_data);
+typedef herr_t (*H5P_cls_close_func_t)(hid_t prop_id, void *close_data);
+
+/* Define property list callback function pointer types */
+typedef herr_t (*H5P_prp_cb1_t)(const char *name, size_t size, void *value);
+typedef herr_t (*H5P_prp_cb2_t)(hid_t prop_id, const char *name, size_t size, void *value);
+typedef H5P_prp_cb1_t H5P_prp_create_func_t;
+typedef H5P_prp_cb2_t H5P_prp_set_func_t;
+typedef H5P_prp_cb2_t H5P_prp_get_func_t;
+typedef H5P_prp_cb2_t H5P_prp_delete_func_t;
+typedef H5P_prp_cb1_t H5P_prp_copy_func_t;
+typedef int (*H5P_prp_compare_func_t)(const void *value1, const void *value2, size_t size);
+typedef H5P_prp_cb1_t H5P_prp_close_func_t;
+
+/* Define property list iteration function type */
+typedef herr_t (*H5P_iterate_t)(hid_t id, const char *name, void *iter_data);
+
+/*
+ * The library created property list classes
+ *
+ * NOTE: When adding H5P_* macros, remember to redefine them in H5Pprivate.h
+ *
+ */
+
+/* When this header is included from a private header, don't make calls to H5open() */
+#undef H5OPEN
+#ifndef _H5private_H
+#define H5OPEN        H5open(),
+#else   /* _H5private_H */
+#define H5OPEN
+#endif  /* _H5private_H */
+
+#define H5P_NO_CLASS		   	(H5OPEN H5P_CLS_NO_CLASS_g)
+#define H5P_FILE_CREATE 		(H5OPEN H5P_CLS_FILE_CREATE_g)
+#define H5P_FILE_ACCESS 		(H5OPEN H5P_CLS_FILE_ACCESS_g)
+#define H5P_DATASET_CREATE     		(H5OPEN H5P_CLS_DATASET_CREATE_g)
+#define H5P_DATASET_XFER       		(H5OPEN H5P_CLS_DATASET_XFER_g)
+#define H5P_MOUNT       		(H5OPEN H5P_CLS_MOUNT_g)
+H5_DLLVAR hid_t H5P_CLS_NO_CLASS_g;
+H5_DLLVAR hid_t H5P_CLS_FILE_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_FILE_ACCESS_g;
+H5_DLLVAR hid_t H5P_CLS_DATASET_CREATE_g;
+H5_DLLVAR hid_t H5P_CLS_DATASET_XFER_g;
+H5_DLLVAR hid_t H5P_CLS_MOUNT_g;
+
+/*
+ * The library created default property lists
+ *
+ * NOTE: When adding H5P_* macros, remember to redefine them in H5Pprivate.h
+ *
+ */
+#define H5P_NO_CLASS_DEFAULT   		(H5OPEN H5P_LST_NO_CLASS_g)
+#define H5P_FILE_CREATE_DEFAULT		(H5OPEN H5P_LST_FILE_CREATE_g)
+#define H5P_FILE_ACCESS_DEFAULT 	(H5OPEN H5P_LST_FILE_ACCESS_g)
+#define H5P_DATASET_CREATE_DEFAULT  	(H5OPEN H5P_LST_DATASET_CREATE_g)
+#define H5P_DATASET_XFER_DEFAULT   	(H5OPEN H5P_LST_DATASET_XFER_g)
+#define H5P_MOUNT_DEFAULT       	(H5OPEN H5P_LST_MOUNT_g)
+H5_DLLVAR hid_t H5P_LST_NO_CLASS_g;
+H5_DLLVAR hid_t H5P_LST_FILE_CREATE_g;
+H5_DLLVAR hid_t H5P_LST_FILE_ACCESS_g;
+H5_DLLVAR hid_t H5P_LST_DATASET_CREATE_g;
+H5_DLLVAR hid_t H5P_LST_DATASET_XFER_g;
+H5_DLLVAR hid_t H5P_LST_MOUNT_g;
+
+/* Public functions */
+H5_DLL hid_t H5Pcreate_class(hid_t parent, const char *name,
+            H5P_cls_create_func_t cls_create, void *create_data,
+            H5P_cls_copy_func_t cls_copy, void *copy_data,
+            H5P_cls_close_func_t cls_close, void *close_data);
+H5_DLL char *H5Pget_class_name(hid_t pclass_id);
+H5_DLL hid_t H5Pcreate(hid_t cls_id);
+H5_DLL herr_t H5Pregister(hid_t cls_id, const char *name, size_t size,
+            void *def_value, H5P_prp_create_func_t prp_create,
+            H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
+            H5P_prp_delete_func_t prp_del,
+            H5P_prp_copy_func_t prp_copy,
+            H5P_prp_close_func_t prp_close);
+H5_DLL herr_t H5Pinsert(hid_t plist_id, const char *name, size_t size,
+            void *value, H5P_prp_set_func_t prp_set, H5P_prp_get_func_t prp_get,
+            H5P_prp_delete_func_t prp_delete,
+            H5P_prp_copy_func_t prp_copy,
+            H5P_prp_close_func_t prp_close);
+H5_DLL herr_t H5Pset(hid_t plist_id, const char *name, void *value);
+H5_DLL htri_t H5Pexist(hid_t plist_id, const char *name);
+H5_DLL herr_t H5Pget_size(hid_t id, const char *name, size_t *size);
+H5_DLL herr_t H5Pget_nprops(hid_t id, size_t *nprops);
+H5_DLL hid_t H5Pget_class(hid_t plist_id);
+H5_DLL hid_t H5Pget_class_parent(hid_t pclass_id);
+H5_DLL herr_t H5Pget(hid_t plist_id, const char *name, void * value);
+H5_DLL htri_t H5Pequal(hid_t id1, hid_t id2);
+H5_DLL htri_t H5Pisa_class(hid_t plist_id, hid_t pclass_id);
+H5_DLL int H5Piterate(hid_t id, int *idx, H5P_iterate_t iter_func,
+            void *iter_data);
+H5_DLL herr_t H5Pcopy_prop(hid_t dst_id, hid_t src_id, const char *name);
+H5_DLL herr_t H5Premove(hid_t plist_id, const char *name);
+H5_DLL herr_t H5Punregister(hid_t pclass_id, const char *name);
+H5_DLL herr_t H5Pclose_class(hid_t plist_id);
+H5_DLL herr_t H5Pclose(hid_t plist_id);
+H5_DLL hid_t H5Pcopy(hid_t plist_id);
+
+H5_DLL herr_t H5Pget_version(hid_t plist_id, unsigned *boot/*out*/,
+         unsigned *freelist/*out*/, unsigned *stab/*out*/,
+         unsigned *shhdr/*out*/);
+H5_DLL herr_t H5Pset_userblock(hid_t plist_id, hsize_t size);
+H5_DLL herr_t H5Pget_userblock(hid_t plist_id, hsize_t *size);
+H5_DLL herr_t H5Pset_alignment(hid_t fapl_id, hsize_t threshold,
+    hsize_t alignment);
+H5_DLL herr_t H5Pget_alignment(hid_t fapl_id, hsize_t *threshold/*out*/,
+    hsize_t *alignment/*out*/);
+H5_DLL herr_t H5Pset_sizes(hid_t plist_id, size_t sizeof_addr,
+       size_t sizeof_size);
+H5_DLL herr_t H5Pget_sizes(hid_t plist_id, size_t *sizeof_addr/*out*/,
+       size_t *sizeof_size/*out*/);
+#ifdef H5_WANT_H5_V1_4_COMPAT
+H5_DLL herr_t H5Pset_sym_k(hid_t plist_id, int ik, int lk);
+H5_DLL herr_t H5Pget_sym_k(hid_t plist_id, int *ik/*out*/, int *lk/*out*/);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+H5_DLL herr_t H5Pset_sym_k(hid_t plist_id, unsigned ik, unsigned lk);
+H5_DLL herr_t H5Pget_sym_k(hid_t plist_id, unsigned *ik/*out*/, unsigned *lk/*out*/);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+H5_DLL herr_t H5Pset_istore_k(hid_t plist_id, unsigned ik);
+H5_DLL herr_t H5Pget_istore_k(hid_t plist_id, unsigned *ik/*out*/);
+H5_DLL herr_t H5Pset_layout(hid_t plist_id, H5D_layout_t layout);
+H5_DLL H5D_layout_t H5Pget_layout(hid_t plist_id);
+H5_DLL herr_t H5Pset_chunk(hid_t plist_id, int ndims, const hsize_t dim[]);
+H5_DLL int H5Pget_chunk(hid_t plist_id, int max_ndims, hsize_t dim[]/*out*/);
+H5_DLL herr_t H5Pset_external(hid_t plist_id, const char *name, off_t offset,
+          hsize_t size);
+H5_DLL int H5Pget_external_count(hid_t plist_id);
+H5_DLL herr_t H5Pget_external(hid_t plist_id, unsigned idx, size_t name_size,
+          char *name/*out*/, off_t *offset/*out*/,
+          hsize_t *size/*out*/);
+H5_DLL herr_t H5Pset_driver(hid_t plist_id, hid_t driver_id,
+        const void *driver_info);
+H5_DLL hid_t H5Pget_driver(hid_t plist_id);
+H5_DLL void *H5Pget_driver_info(hid_t plist_id);
+H5_DLL herr_t H5Pset_family_offset(hid_t fapl_id, hsize_t offset);
+H5_DLL herr_t H5Pget_family_offset(hid_t fapl_id, hsize_t *offset);
+H5_DLL herr_t H5Pset_multi_type(hid_t fapl_id, H5FD_mem_t type);
+H5_DLL herr_t H5Pget_multi_type(hid_t fapl_id, H5FD_mem_t *type);
+#ifdef H5_WANT_H5_V1_4_COMPAT
+H5_DLL herr_t H5Pset_buffer(hid_t plist_id, hsize_t size, void *tconv,
+        void *bkg);
+H5_DLL hsize_t H5Pget_buffer(hid_t plist_id, void **tconv/*out*/,
+        void **bkg/*out*/);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+H5_DLL herr_t H5Pset_buffer(hid_t plist_id, size_t size, void *tconv,
+        void *bkg);
+H5_DLL size_t H5Pget_buffer(hid_t plist_id, void **tconv/*out*/,
+        void **bkg/*out*/);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+H5_DLL herr_t H5Pset_preserve(hid_t plist_id, hbool_t status);
+H5_DLL int H5Pget_preserve(hid_t plist_id);
+H5_DLL herr_t H5Pmodify_filter(hid_t plist_id, H5Z_filter_t filter,
+        unsigned int flags, size_t cd_nelmts,
+        const unsigned int cd_values[/*cd_nelmts*/]);
+H5_DLL herr_t H5Pset_filter(hid_t plist_id, H5Z_filter_t filter,
+        unsigned int flags, size_t cd_nelmts,
+        const unsigned int c_values[]);
+H5_DLL int H5Pget_nfilters(hid_t plist_id);
+H5_DLL H5Z_filter_t H5Pget_filter(hid_t plist_id, unsigned filter,
+       unsigned int *flags/*out*/,
+       size_t *cd_nelmts/*out*/,
+       unsigned cd_values[]/*out*/,
+       size_t namelen, char name[]);
+H5_DLL H5Z_filter_t H5Pget_filter_by_id(hid_t plist_id, H5Z_filter_t id,
+       unsigned int *flags/*out*/,
+       size_t *cd_nelmts/*out*/,
+       unsigned cd_values[]/*out*/,
+       size_t namelen, char name[]);
+H5_DLL htri_t H5Pall_filters_avail(hid_t plist_id);
+H5_DLL herr_t H5Pset_deflate(hid_t plist_id, unsigned aggression);
+H5_DLL herr_t H5Pset_szip(hid_t plist_id, unsigned options_mask, unsigned pixels_per_block);
+H5_DLL herr_t H5Pset_shuffle(hid_t plist_id);
+H5_DLL herr_t H5Pset_fletcher32(hid_t plist_id);
+H5_DLL herr_t H5Pset_edc_check(hid_t plist_id, H5Z_EDC_t check);
+H5_DLL H5Z_EDC_t H5Pget_edc_check(hid_t plist_id);
+H5_DLL herr_t H5Pset_filter_callback(hid_t plist_id, H5Z_filter_func_t func,
+                                     void* op_data);
+#ifdef H5_WANT_H5_V1_4_COMPAT
+H5_DLL herr_t H5Pset_cache(hid_t plist_id, int mdc_nelmts, int rdcc_nelmts,
+       size_t rdcc_nbytes, double rdcc_w0);
+H5_DLL herr_t H5Pget_cache(hid_t plist_id, int *mdc_nelmts/*out*/,
+       int *rdcc_nelmts/*out*/,
+       size_t *rdcc_nbytes/*out*/, double *rdcc_w0);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+H5_DLL herr_t H5Pset_cache(hid_t plist_id, int mdc_nelmts, size_t rdcc_nelmts,
+       size_t rdcc_nbytes, double rdcc_w0);
+H5_DLL herr_t H5Pget_cache(hid_t plist_id, int *mdc_nelmts/*out*/,
+       size_t *rdcc_nelmts/*out*/,
+       size_t *rdcc_nbytes/*out*/, double *rdcc_w0);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+H5_DLL herr_t H5Pset_hyper_cache(hid_t plist_id, unsigned cache,
+      unsigned limit);
+H5_DLL herr_t H5Pget_hyper_cache(hid_t plist_id, unsigned *cache,
+      unsigned *limit);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+H5_DLL herr_t H5Pset_btree_ratios(hid_t plist_id, double left, double middle,
+       double right);
+H5_DLL herr_t H5Pget_btree_ratios(hid_t plist_id, double *left/*out*/,
+       double *middle/*out*/,
+       double *right/*out*/);
+H5_DLL herr_t H5Pset_fill_value(hid_t plist_id, hid_t type_id,
+     const void *value);
+H5_DLL herr_t H5Pget_fill_value(hid_t plist_id, hid_t type_id,
+     void *value/*out*/);
+H5_DLL herr_t H5Pfill_value_defined(hid_t plist, H5D_fill_value_t *status);
+H5_DLL herr_t H5Pset_alloc_time(hid_t plist_id, H5D_alloc_time_t
+	alloc_time);
+H5_DLL herr_t H5Pget_alloc_time(hid_t plist_id, H5D_alloc_time_t
+	*alloc_time/*out*/);
+H5_DLL herr_t H5Pset_fill_time(hid_t plist_id, H5D_fill_time_t fill_time);
+H5_DLL herr_t H5Pget_fill_time(hid_t plist_id, H5D_fill_time_t
+	*fill_time/*out*/);
+H5_DLL herr_t H5Pset_gc_references(hid_t fapl_id, unsigned gc_ref);
+H5_DLL herr_t H5Pget_gc_references(hid_t fapl_id, unsigned *gc_ref/*out*/);
+H5_DLL herr_t H5Pset_fclose_degree(hid_t fapl_id, H5F_close_degree_t degree);
+H5_DLL herr_t H5Pget_fclose_degree(hid_t fapl_id, H5F_close_degree_t *degree);
+H5_DLL herr_t H5Pset_vlen_mem_manager(hid_t plist_id,
+                                       H5MM_allocate_t alloc_func,
+                                       void *alloc_info, H5MM_free_t free_func,
+                                       void *free_info);
+H5_DLL herr_t H5Pget_vlen_mem_manager(hid_t plist_id,
+                                       H5MM_allocate_t *alloc_func,
+                                       void **alloc_info,
+                                       H5MM_free_t *free_func,
+                                       void **free_info);
+H5_DLL herr_t H5Pset_meta_block_size(hid_t fapl_id, hsize_t size);
+H5_DLL herr_t H5Pget_meta_block_size(hid_t fapl_id, hsize_t *size/*out*/);
+#ifdef H5_WANT_H5_V1_4_COMPAT
+H5_DLL herr_t H5Pset_sieve_buf_size(hid_t fapl_id, hsize_t size);
+H5_DLL herr_t H5Pget_sieve_buf_size(hid_t fapl_id, hsize_t *size/*out*/);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+H5_DLL herr_t H5Pset_sieve_buf_size(hid_t fapl_id, size_t size);
+H5_DLL herr_t H5Pget_sieve_buf_size(hid_t fapl_id, size_t *size/*out*/);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+H5_DLL herr_t H5Pset_hyper_vector_size(hid_t fapl_id, size_t size);
+H5_DLL herr_t H5Pget_hyper_vector_size(hid_t fapl_id, size_t *size/*out*/);
+H5_DLL herr_t H5Pset_small_data_block_size(hid_t fapl_id, hsize_t size);
+H5_DLL herr_t H5Pget_small_data_block_size(hid_t fapl_id, hsize_t *size/*out*/);
+H5_DLL herr_t H5Premove_filter(hid_t plist_id, H5Z_filter_t filter);
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Ptest.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Ptest.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Ptest.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,125 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Saturday May 31, 2003
+ *
+ * Purpose:	Generic Property Testing Functions
+ */
+
+#define H5P_PACKAGE		/*suppress error about including H5Ppkg	  */
+#define H5P_TESTING		/*suppress warning about H5P testing funcs*/
+
+
+/* Private header files */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Ppkg.h"		/* Property lists		  	*/
+
+/* Local variables */
+
+/* Local typedefs */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_get_class_path_test
+ PURPOSE
+    Routine to query the full path of a generic property list class
+ USAGE
+    char *H5P_get_class_name_test(pclass_id)
+        hid_t pclass_id;         IN: Property class to query
+ RETURNS
+    Success: Pointer to a malloc'ed string containing the full path of class
+    Failure: NULL
+ DESCRIPTION
+        This routine retrieves the full path name of a generic property list
+    class, starting with the root of the class hierarchy.
+    The pointer to the name must be free'd by the user for successful calls.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    DO NOT USE THIS FUNCTION FOR ANYTHING EXCEPT TESTING H5P_get_class_path()
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+char *
+H5P_get_class_path_test(hid_t pclass_id)
+{
+    H5P_genclass_t	*pclass;    /* Property class to query */
+    char *ret_value;       /* return value */
+
+    FUNC_ENTER_NOAPI(H5P_get_class_path_test, NULL);
+
+    /* Check arguments. */
+    if (NULL == (pclass = H5I_object_verify(pclass_id, H5I_GENPROP_CLS)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a property class");
+
+    /* Get the property list class path */
+    if ((ret_value=H5P_get_class_path(pclass))==NULL)
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, NULL, "unable to query full path of class");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_get_class_path_test() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5P_open_class_path_test
+ PURPOSE
+    Routine to open a [copy of] a class with its full path name
+ USAGE
+    hid_t H5P_open_class_name_test(path)
+        const char *path;       IN: Full path name of class to open [copy of]
+ RETURNS
+    Success: ID of generic property class
+    Failure: NULL
+ DESCRIPTION
+    This routine opens [a copy] of the class indicated by the full path.
+
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    DO NOT USE THIS FUNCTION FOR ANYTHING EXCEPT TESTING H5P_open_class_path()
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hid_t
+H5P_open_class_path_test(const char *path)
+{
+    H5P_genclass_t *pclass=NULL;/* Property class to query */
+    hid_t ret_value;            /* Return value */
+
+    FUNC_ENTER_NOAPI(H5P_open_class_path_test, FAIL);
+
+    /* Check arguments. */
+    if (NULL == path || *path=='\0')
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid class path");
+
+    /* Open the property list class */
+    if ((pclass=H5P_open_class_path(path))==NULL)
+        HGOTO_ERROR(H5E_PLIST, H5E_NOTFOUND, FAIL, "unable to find class with full path");
+
+    /* Get an atom for the class */
+    if ((ret_value=H5I_register(H5I_GENPROP_CLS, pclass))<0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTREGISTER, FAIL, "unable to atomize property list class");
+
+done:
+    if(ret_value<0 && pclass)
+        H5P_close_class(pclass);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5P_open_class_path_test() */
+

Added: packages/hdf5/branches/upstream/current/src/H5R.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5R.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5R.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,895 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5R_init_interface
+
+
+#include "H5private.h"		/* Generic Functions */
+#include "H5Iprivate.h"		/* ID Functions */
+#include "H5Dprivate.h"		/* Datasets */
+#include "H5Eprivate.h"		/* Error handling */
+#include "H5Fpkg.h"		/* Files */
+#include "H5Gprivate.h"		/* Groups */
+#include "H5HGprivate.h"    /* Global Heaps */
+#include "H5MMprivate.h"    /* Memory Management */
+#include "H5Rprivate.h"		/* References */
+#include "H5Sprivate.h"		/* Dataspace functions			*/
+#include "H5Tprivate.h"		/* Datatypes */
+
+/* Static functions */
+static herr_t H5R_create(void *ref, H5G_entry_t *loc, const char *name,
+        H5R_type_t ref_type, H5S_t *space, hid_t dxpl_id);
+static hid_t H5R_dereference(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref);
+static H5S_t * H5R_get_region(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref);
+static int H5R_get_obj_type(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref);
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5R_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5R_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5R_init_interface(void)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5R_init_interface);
+
+    /* Initialize the atom group for the file IDs */
+    if (H5I_init_group(H5I_REFERENCE, H5I_REFID_HASHSIZE, H5R_RESERVED_ATOMS,
+		       (H5I_free_t)NULL)<0)
+	HGOTO_ERROR (H5E_REFERENCE, H5E_CANTINIT, FAIL, "unable to initialize interface");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5R_term_interface
+ PURPOSE
+    Terminate various H5R objects
+ USAGE
+    void H5R_term_interface()
+ RETURNS
+    void
+ DESCRIPTION
+    Release the atom group and any other resources allocated.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+     Can't report errors...
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+int
+H5R_term_interface(void)
+{
+    int	n=0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5R_term_interface);
+
+    if (H5_interface_initialize_g) {
+	if ((n=H5I_nmembers(H5I_REFERENCE))) {
+	    H5I_clear_group(H5I_REFERENCE, FALSE);
+	} else {
+	    H5I_destroy_group(H5I_REFERENCE);
+	    H5_interface_initialize_g = 0;
+	    n = 1; /*H5I*/
+	}
+    }
+
+    FUNC_LEAVE_NOAPI(n);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5R_create
+ PURPOSE
+    Creates a particular kind of reference for the user
+ USAGE
+    herr_t H5R_create(ref, loc, name, ref_type, space)
+        void *ref;          OUT: Reference created
+        H5G_entry_t *loc;   IN: File location used to locate object pointed to
+        const char *name;   IN: Name of object at location LOC_ID of object
+                                    pointed to
+        H5R_type_t ref_type;    IN: Type of reference to create
+        H5S_t *space;       IN: Dataspace ID with selection, used for Dataset
+                                    Region references.
+
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Creates a particular type of reference specified with REF_TYPE, in the
+    space pointed to by REF.  The LOC_ID and NAME are used to locate the object
+    pointed to and the SPACE_ID is used to choose the region pointed to (for
+    Dataset Region references).
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5R_create(void *_ref, H5G_entry_t *loc, const char *name, H5R_type_t ref_type, H5S_t *space, hid_t dxpl_id)
+{
+    H5G_stat_t sb;              /* Stat buffer for retrieving OID */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5R_create);
+
+    assert(_ref);
+    assert(loc);
+    assert(name);
+    assert(ref_type>H5R_BADTYPE || ref_type<H5R_MAXTYPE);
+
+    if (H5G_get_objinfo (loc, name, 0, &sb, dxpl_id)<0)
+        HGOTO_ERROR (H5E_REFERENCE, H5E_NOTFOUND, FAIL, "unable to stat object");
+
+    switch(ref_type) {
+        case H5R_OBJECT:
+        {
+            haddr_t addr;
+            hobj_ref_t *ref=(hobj_ref_t *)_ref; /* Get pointer to correct type of reference struct */
+            uint8_t *p;       /* Pointer to OID to store */
+
+            /* Set information for reference */
+            p=(uint8_t *)ref;
+            H5F_addr_pack(loc->file,&addr,&sb.objno[0]);
+            H5F_addr_encode(loc->file,&p,addr);
+            break;
+        }
+
+        case H5R_DATASET_REGION:
+        {
+            haddr_t addr;
+            H5HG_t hobjid;      /* Heap object ID */
+            hdset_reg_ref_t *ref=(hdset_reg_ref_t *)_ref; /* Get pointer to correct type of reference struct */
+            hssize_t buf_size;  /* Size of buffer needed to serialize selection */
+            uint8_t *p;       /* Pointer to OID to store */
+            uint8_t *buf;     /* Buffer to store serialized selection in */
+            unsigned heapid_found;  /* Flag for non-zero heap ID found */
+            unsigned u;        /* local index */
+
+            /* Set up information for dataset region */
+
+            /* Return any previous heap block to the free list if we are garbage collecting */
+            if(loc->file->shared->gc_ref) {
+                /* Check for an existing heap ID in the reference */
+                for(u=0, heapid_found=0, p=(uint8_t *)ref; u<H5R_DSET_REG_REF_BUF_SIZE; u++)
+                    if(p[u]!=0) {
+                        heapid_found=1;
+                        break;
+                    } /* end if */
+
+                if(heapid_found!=0) {
+/* Return heap block to free list */
+                } /* end if */
+            } /* end if */
+
+            /* Zero the heap ID out, may leak heap space if user is re-using reference and doesn't have garbage collection on */
+            HDmemset(ref,H5R_DSET_REG_REF_BUF_SIZE,0);
+
+            /* Get the amount of space required to serialize the selection */
+            if ((buf_size = H5S_SELECT_SERIAL_SIZE(space)) < 0)
+                HGOTO_ERROR(H5E_REFERENCE, H5E_CANTINIT, FAIL, "Invalid amount of space for serializing selection");
+
+            /* Increase buffer size to allow for the dataset OID */
+            buf_size+=sizeof(haddr_t);
+
+            /* Allocate the space to store the serialized information */
+            H5_CHECK_OVERFLOW(buf_size,hssize_t,size_t);
+            if (NULL==(buf = H5MM_malloc((size_t)buf_size)))
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+            /* Serialize information for dataset OID */
+            p=(uint8_t *)buf;
+            H5F_addr_pack(loc->file,&addr,&sb.objno[0]);
+            H5F_addr_encode(loc->file,&p,addr);
+
+            /* Serialize the selection */
+            if (H5S_SELECT_SERIALIZE(space,p) < 0)
+                HGOTO_ERROR(H5E_REFERENCE, H5E_CANTCOPY, FAIL, "Unable to serialize selection");
+
+            /* Save the serialized buffer for later */
+            H5_CHECK_OVERFLOW(buf_size,hssize_t,size_t);
+            if(H5HG_insert(loc->file,dxpl_id,(size_t)buf_size,buf,&hobjid)<0)
+                HGOTO_ERROR(H5E_REFERENCE, H5E_WRITEERROR, FAIL, "Unable to serialize selection");
+
+            /* Serialize the heap ID and index for storage in the file */
+            p=(uint8_t *)ref;
+            H5F_addr_encode(loc->file,&p,hobjid.addr);
+            INT32ENCODE(p,hobjid.idx);
+
+            /* Free the buffer we serialized data in */
+            H5MM_xfree(buf);
+            break;
+        }
+
+        case H5R_INTERNAL:
+            HGOTO_ERROR(H5E_REFERENCE, H5E_UNSUPPORTED, FAIL, "Internal references are not yet supported");
+
+        case H5R_BADTYPE:
+        case H5R_MAXTYPE:
+        default:
+            assert("unknown reference type" && 0);
+            HGOTO_ERROR(H5E_REFERENCE, H5E_UNSUPPORTED, FAIL, "internal error (unknown reference type)");
+    } /* end switch */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5R_create() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Rcreate
+ PURPOSE
+    Creates a particular kind of reference for the user
+ USAGE
+    herr_t H5Rcreate(ref, loc_id, name, ref_type, space_id)
+        void *ref;          OUT: Reference created
+        hid_t loc_id;       IN: Location ID used to locate object pointed to
+        const char *name;   IN: Name of object at location LOC_ID of object
+                                    pointed to
+        H5R_type_t ref_type;    IN: Type of reference to create
+        hid_t space_id;     IN: Dataspace ID with selection, used for Dataset
+                                    Region references.
+
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Creates a particular type of reference specified with REF_TYPE, in the
+    space pointed to by REF.  The LOC_ID and NAME are used to locate the object
+    pointed to and the SPACE_ID is used to choose the region pointed to (for
+    Dataset Region references).
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Rcreate(void *ref, hid_t loc_id, const char *name, H5R_type_t ref_type, hid_t space_id)
+{
+    H5G_entry_t *loc = NULL;        /* File location */
+    H5S_t	*space = NULL;          /* Pointer to dataspace containing region */
+    herr_t      ret_value;       /* Return value */
+
+    FUNC_ENTER_API(H5Rcreate, FAIL);
+    H5TRACE5("e","xisRti",ref,loc_id,name,ref_type,space_id);
+
+    /* Check args */
+    if(ref==NULL)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid reference pointer");
+    if (NULL==(loc=H5G_loc (loc_id)))
+        HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if (!name || !*name)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name given");
+    if(ref_type<=H5R_BADTYPE || ref_type>=H5R_MAXTYPE)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid reference type");
+    if(ref_type!=H5R_OBJECT && ref_type!=H5R_DATASET_REGION)
+        HGOTO_ERROR (H5E_ARGS, H5E_UNSUPPORTED, FAIL, "reference type not supported");
+    if (space_id!=(-1) && (NULL==(space=H5I_object_verify(space_id,H5I_DATASPACE))))
+        HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace");
+
+    /* Create reference */
+    if ((ret_value=H5R_create(ref,loc,name,ref_type,space, H5AC_dxpl_id))<0)
+        HGOTO_ERROR (H5E_REFERENCE, H5E_CANTINIT, FAIL, "unable to create reference");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* end H5Rcreate() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5R_dereference
+ PURPOSE
+    Opens the HDF5 object referenced.
+ USAGE
+    hid_t H5R_dereference(ref)
+        H5F_t *file;        IN: File the object being dereferenced is within
+        H5R_type_t ref_type;    IN: Type of reference
+        void *ref;          IN: Reference to open.
+
+ RETURNS
+    Valid ID on success, Negative on failure
+ DESCRIPTION
+    Given a reference to some object, open that object and return an ID for
+    that object.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    Currently only set up to work with references to datasets
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static hid_t
+H5R_dereference(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref)
+{
+    H5D_t *dset;                /* Pointer to dataset to open */
+    H5T_t *type;                /* Pointer to datatype to open */
+    H5G_t *group;               /* Pointer to group to open */
+    H5G_entry_t ent;            /* Symbol table entry */
+    uint8_t *p;                 /* Pointer to OID to store */
+    int oid_type;               /* type of object being dereferenced */
+    hid_t ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5R_dereference);
+
+    assert(_ref);
+    assert(ref_type>H5R_BADTYPE || ref_type<H5R_MAXTYPE);
+    assert(file);
+
+    /* Initialize the symbol table entry */
+    H5G_ent_reset(&ent);
+    ent.type=H5G_NOTHING_CACHED;
+    ent.file=file;
+
+    switch(ref_type) {
+        case H5R_OBJECT:
+        {
+            hobj_ref_t *ref=(hobj_ref_t *)_ref; /* Only object references currently supported */
+            /*
+             * Switch on object type, when we implement that feature, always try to
+             *  open a dataset for now
+             */
+            /* Get the object oid */
+            p=(uint8_t *)ref;
+            H5F_addr_decode(ent.file,(const uint8_t **)&p,&(ent.header));
+        } /* end case */
+        break;
+
+        case H5R_DATASET_REGION:
+        {
+            hdset_reg_ref_t *ref=(hdset_reg_ref_t *)_ref; /* Get pointer to correct type of reference struct */
+            H5HG_t hobjid;  /* Heap object ID */
+            uint8_t *buf;   /* Buffer to store serialized selection in */
+
+            /* Get the heap ID for the dataset region */
+            p=(uint8_t *)ref;
+            H5F_addr_decode(ent.file,(const uint8_t **)&p,&(hobjid.addr));
+            INT32DECODE(p,hobjid.idx);
+
+            /* Get the dataset region from the heap (allocate inside routine) */
+            if((buf=H5HG_read(ent.file,dxpl_id,&hobjid,NULL))==NULL)
+                HGOTO_ERROR(H5E_REFERENCE, H5E_READERROR, FAIL, "Unable to read dataset region information");
+
+            /* Get the object oid for the dataset */
+            p=(uint8_t *)buf;
+            H5F_addr_decode(ent.file,(const uint8_t **)&p,&(ent.header));
+
+            /* Free the buffer allocated in H5HG_read() */
+            H5MM_xfree(buf);
+        } /* end case */
+        break;
+
+        case H5R_INTERNAL:
+            HGOTO_ERROR(H5E_REFERENCE, H5E_UNSUPPORTED, FAIL, "Internal references are not yet supported");
+
+        case H5R_BADTYPE:
+        case H5R_MAXTYPE:
+        default:
+            assert("unknown reference type" && 0);
+            HGOTO_ERROR(H5E_REFERENCE, H5E_UNSUPPORTED, FAIL, "internal error (unknown reference type)");
+    } /* end switch */
+
+    /* Check to make certain that this object hasn't been deleted since the reference was created */
+    if(H5O_link(&ent,0,dxpl_id)<=0)
+        HGOTO_ERROR(H5E_REFERENCE, H5E_LINKCOUNT, FAIL, "dereferencing deleted object");
+
+    /* Open the object */
+    oid_type=H5G_get_type(&ent,dxpl_id);
+    switch(oid_type) {
+        case H5G_GROUP:
+            if ((group=H5G_open(&ent,dxpl_id)) == NULL)
+                HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "not found");
+
+            /* Create an atom for the group */
+            if ((ret_value = H5I_register(H5I_GROUP, group)) < 0) {
+                H5G_close(group);
+                HGOTO_ERROR(H5E_SYM, H5E_CANTREGISTER, FAIL, "can't register group");
+            }
+            break;
+
+        case H5G_TYPE:
+            if ((type=H5T_open(&ent, dxpl_id)) == NULL)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, FAIL, "not found");
+
+            /* Create an atom for the datatype */
+            if ((ret_value = H5I_register(H5I_DATATYPE, type)) < 0) {
+                H5T_close(type);
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "can't register datatype");
+            }
+            break;
+
+        case H5G_DATASET:
+            /* Open the dataset */
+            if ((dset=H5D_open(&ent,dxpl_id))==NULL)
+                HGOTO_ERROR(H5E_DATASET, H5E_NOTFOUND, FAIL, "not found");
+
+            /* Create an atom for the dataset */
+            if ((ret_value = H5I_register(H5I_DATASET, dset)) < 0) {
+                H5D_close(dset);
+                HGOTO_ERROR(H5E_DATASET, H5E_CANTREGISTER, FAIL, "can't register dataset");
+            }
+            break;
+
+        default:
+            HGOTO_ERROR(H5E_REFERENCE, H5E_BADTYPE, FAIL, "can't identify type of object referenced");
+     } /* end switch */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5R_dereference() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Rdereference
+ PURPOSE
+    Opens the HDF5 object referenced.
+ USAGE
+    hid_t H5Rdereference(ref)
+        hid_t id;       IN: Dataset reference object is in or location ID of
+                            object that the dataset is located within.
+        H5R_type_t ref_type;    IN: Type of reference to create
+        void *ref;      IN: Reference to open.
+
+ RETURNS
+    Valid ID on success, Negative on failure
+ DESCRIPTION
+    Given a reference to some object, open that object and return an ID for
+    that object.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hid_t
+H5Rdereference(hid_t id, H5R_type_t ref_type, void *_ref)
+{
+    H5G_entry_t *loc = NULL;    /* Symbol table entry */
+    H5F_t *file=NULL;       /* File object */
+    hid_t ret_value;
+
+    FUNC_ENTER_API(H5Rdereference, FAIL);
+    H5TRACE3("i","iRtx",id,ref_type,_ref);
+
+    /* Check args */
+    if (NULL == (loc = H5G_loc(id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if(ref_type<=H5R_BADTYPE || ref_type>=H5R_MAXTYPE)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid reference type");
+    if(_ref==NULL)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid reference pointer");
+
+    /* Get the file pointer from the entry */
+    file=loc->file;
+
+    /* Create reference */
+    if ((ret_value=H5R_dereference(file, H5AC_dxpl_id, ref_type, _ref))<0)
+        HGOTO_ERROR (H5E_REFERENCE, H5E_CANTINIT, FAIL, "unable dereference object");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* end H5Rdereference() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5R_get_region
+ PURPOSE
+    Retrieves a dataspace with the region pointed to selected.
+ USAGE
+    H5S_t *H5R_get_region(file, ref_type, ref)
+        H5F_t *file;        IN: File the object being dereferenced is within
+        H5R_type_t ref_type;    UNUSED
+        void *ref;          IN: Reference to open.
+
+ RETURNS
+    Pointer to the dataspace on success, NULL on failure
+ DESCRIPTION
+    Given a reference to some object, creates a copy of the dataset pointed
+    to's dataspace and defines a selection in the copy which is the region
+    pointed to.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5S_t *
+H5R_get_region(H5F_t *file, hid_t dxpl_id, H5R_type_t UNUSED ref_type, void *_ref)
+{
+    H5G_entry_t ent;            /* Symbol table entry */
+    uint8_t *p;                 /* Pointer to OID to store */
+    hdset_reg_ref_t *ref=(hdset_reg_ref_t *)_ref; /* Get pointer to correct type of reference struct */
+    H5HG_t hobjid;  /* Heap object ID */
+    uint8_t *buf;   /* Buffer to store serialized selection in */
+    H5S_t *ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5R_get_region);
+
+    assert(_ref);
+    assert(ref_type==H5R_DATASET_REGION);
+    assert(file);
+
+    /* Initialize the symbol table entry */
+    H5G_ent_reset(&ent);
+    ent.type=H5G_NOTHING_CACHED;
+    ent.file=file;
+
+    /* Get the heap ID for the dataset region */
+    p=(uint8_t *)ref;
+    H5F_addr_decode(ent.file,(const uint8_t **)&p,&(hobjid.addr));
+    INT32DECODE(p,hobjid.idx);
+
+    /* Get the dataset region from the heap (allocate inside routine) */
+    if((buf=H5HG_read(ent.file,dxpl_id,&hobjid,NULL))==NULL)
+        HGOTO_ERROR(H5E_REFERENCE, H5E_READERROR, NULL, "Unable to read dataset region information");
+
+    /* Get the object oid for the dataset */
+    p=(uint8_t *)buf;
+    H5F_addr_decode(ent.file,(const uint8_t **)&p,&(ent.header));
+
+    /* Open and copy the dataset's dataspace */
+    if ((ret_value=H5S_read(&ent, dxpl_id)) == NULL)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_NOTFOUND, NULL, "not found");
+
+    /* Unserialize the selection */
+    if (H5S_select_deserialize(ret_value,p) < 0)
+        HGOTO_ERROR(H5E_REFERENCE, H5E_CANTDECODE, NULL, "can't deserialize selection");
+
+    /* Free the buffer allocated in H5HG_read() */
+    H5MM_xfree(buf);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5R_get_region() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Rget_region
+ PURPOSE
+    Retrieves a dataspace with the region pointed to selected.
+ USAGE
+    hid_t H5Rget_region(id, ref_type, ref)
+        hid_t id;       IN: Dataset reference object is in or location ID of
+                            object that the dataset is located within.
+        H5R_type_t ref_type;    IN: Type of reference to get region of
+        void *ref;        IN: Reference to open.
+
+ RETURNS
+    Valid ID on success, Negative on failure
+ DESCRIPTION
+    Given a reference to some object, creates a copy of the dataset pointed
+    to's dataspace and defines a selection in the copy which is the region
+    pointed to.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hid_t
+H5Rget_region(hid_t id, H5R_type_t ref_type, void *_ref)
+{
+    H5G_entry_t *loc = NULL;    /* Symbol table entry */
+    H5S_t *space = NULL;    /* dataspace object */
+    H5F_t *file=NULL;       /* File object */
+    hid_t ret_value;
+
+    FUNC_ENTER_API(H5Rget_region, FAIL);
+    H5TRACE3("i","iRtx",id,ref_type,_ref);
+
+    /* Check args */
+    if (NULL == (loc = H5G_loc(id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if(ref_type!=H5R_DATASET_REGION)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid reference type");
+    if(_ref==NULL)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid reference pointer");
+
+    /* Get the file pointer from the entry */
+    file=loc->file;
+
+    /* Get the dataspace with the correct region selected */
+    if ((space=H5R_get_region(file,H5AC_ind_dxpl_id,ref_type,_ref))==NULL)
+        HGOTO_ERROR (H5E_REFERENCE, H5E_CANTCREATE, FAIL, "unable to create dataspace");
+
+    /* Atomize */
+    if ((ret_value=H5I_register (H5I_DATASPACE, space))<0)
+        HGOTO_ERROR (H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register dataspace atom");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* end H5Rget_region() */
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5R_get_object_type
+ PURPOSE
+    Retrieves the type of object that an object reference points to
+ USAGE
+    int H5R_get_object_type(file, ref)
+        H5F_t *file;        IN: File the object being dereferenced is within
+        void *ref;          IN: Reference to query.
+
+ RETURNS
+    Success:	An object type defined in H5Gpublic.h
+    Failure:	H5G_UNKNOWN
+ DESCRIPTION
+    Given a reference to some object, this function returns the type of object
+    pointed to.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static int
+H5R_get_object_type(H5F_t *file, hid_t dxpl_id, void *_ref)
+{
+    H5G_entry_t ent;            /* Symbol table entry */
+    hobj_ref_t *ref=(hobj_ref_t *)_ref; /* Only object references currently supported */
+    uint8_t *p;                 /* Pointer to OID to store */
+    int ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5R_get_object_type);
+
+    assert(ref);
+    assert(file);
+
+    /* Initialize the symbol table entry */
+    H5G_ent_reset(&ent);
+    ent.type=H5G_NOTHING_CACHED;
+    ent.file=file;
+
+    /* Get the object oid */
+    p=(uint8_t *)ref;
+    H5F_addr_decode(ent.file,(const uint8_t **)&p,&(ent.header));
+
+    /* Get the OID type */
+    ret_value=H5G_get_type(&ent, dxpl_id);
+
+#ifdef LATER
+done:
+#endif /* LATER */
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5R_get_object_type() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Rget_object_type
+ PURPOSE
+    Retrieves the type of object that an object reference points to
+ USAGE
+    int H5Rget_object_type(id, ref)
+        hid_t id;       IN: Dataset reference object is in or location ID of
+                            object that the dataset is located within.
+        void *ref;          IN: Reference to query.
+
+ RETURNS
+    Success:	An object type defined in H5Gpublic.h
+    Failure:	H5G_UNKNOWN
+ DESCRIPTION
+    Given a reference to some object, this function returns the type of object
+    pointed to.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+int
+H5Rget_object_type(hid_t id, void *_ref)
+{
+    H5G_entry_t *loc = NULL;    /* Symbol table entry */
+    H5F_t *file=NULL;       /* File object */
+    hid_t ret_value;
+
+    FUNC_ENTER_API(H5Rget_object_type, H5G_UNKNOWN);
+    H5TRACE2("Is","ix",id,_ref);
+
+    /* Check args */
+    if (NULL == (loc = H5G_loc(id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if(_ref==NULL)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, H5G_UNKNOWN, "invalid reference pointer");
+
+    /* Get the file pointer from the entry */
+    file=loc->file;
+
+    /* Get the object information */
+    if ((ret_value=H5R_get_object_type(file,H5AC_ind_dxpl_id,_ref))<0)
+	HGOTO_ERROR(H5E_REFERENCE, H5E_CANTINIT, H5G_UNKNOWN, "unable to determine object type");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* end H5Rget_object_type() */
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5R_get_obj_type
+ PURPOSE
+    Retrieves the type of object that an object reference points to
+ USAGE
+    int H5R_get_obj_type(file, ref_type, ref)
+        H5F_t *file;        IN: File the object being dereferenced is within
+        H5R_type_t ref_type;    IN: Type of reference to query
+        void *ref;          IN: Reference to query.
+
+ RETURNS
+    Success:	An object type defined in H5Gpublic.h
+    Failure:	H5G_UNKNOWN
+ DESCRIPTION
+    Given a reference to some object, this function returns the type of object
+    pointed to.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static int
+H5R_get_obj_type(H5F_t *file, hid_t dxpl_id, H5R_type_t ref_type, void *_ref)
+{
+    H5G_entry_t ent;            /* Symbol table entry */
+    uint8_t *p;                 /* Pointer to OID to store */
+    int ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5R_get_obj_type);
+
+    assert(file);
+    assert(_ref);
+
+    /* Initialize the symbol table entry */
+    H5G_ent_reset(&ent);
+    ent.type=H5G_NOTHING_CACHED;
+    ent.file=file;
+
+    switch(ref_type) {
+        case H5R_OBJECT:
+        {
+            hobj_ref_t *ref=(hobj_ref_t *)_ref; /* Only object references currently supported */
+
+            /* Get the object oid */
+            p=(uint8_t *)ref;
+            H5F_addr_decode(ent.file,(const uint8_t **)&p,&(ent.header));
+        } /* end case */
+        break;
+
+        case H5R_DATASET_REGION:
+        {
+            hdset_reg_ref_t *ref=(hdset_reg_ref_t *)_ref; /* Get pointer to correct type of reference struct */
+            H5HG_t hobjid;  /* Heap object ID */
+            uint8_t *buf;   /* Buffer to store serialized selection in */
+
+            /* Get the heap ID for the dataset region */
+            p=(uint8_t *)ref;
+            H5F_addr_decode(ent.file,(const uint8_t **)&p,&(hobjid.addr));
+            INT32DECODE(p,hobjid.idx);
+
+            /* Get the dataset region from the heap (allocate inside routine) */
+            if((buf=H5HG_read(ent.file,dxpl_id,&hobjid,NULL))==NULL)
+                HGOTO_ERROR(H5E_REFERENCE, H5E_READERROR, H5G_UNKNOWN, "Unable to read dataset region information");
+
+            /* Get the object oid for the dataset */
+            p=(uint8_t *)buf;
+            H5F_addr_decode(ent.file,(const uint8_t **)&p,&(ent.header));
+
+            /* Free the buffer allocated in H5HG_read() */
+            H5MM_xfree(buf);
+        } /* end case */
+        break;
+
+        case H5R_INTERNAL:
+            HGOTO_ERROR(H5E_REFERENCE, H5E_UNSUPPORTED, H5G_UNKNOWN, "Internal references are not yet supported");
+
+        case H5R_BADTYPE:
+        case H5R_MAXTYPE:
+        default:
+            assert("unknown reference type" && 0);
+            HGOTO_ERROR(H5E_REFERENCE, H5E_UNSUPPORTED, H5G_UNKNOWN, "internal error (unknown reference type)");
+    } /* end switch */
+
+    /* Check to make certain that this object hasn't been deleted since the reference was created */
+    if(H5O_link(&ent,0,dxpl_id)<=0)
+        HGOTO_ERROR(H5E_REFERENCE, H5E_LINKCOUNT, H5G_UNKNOWN, "dereferencing deleted object");
+
+    /* Get the OID type */
+    ret_value=H5G_get_type(&ent,dxpl_id);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5R_get_obj_type() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Rget_obj_type
+ PURPOSE
+    Retrieves the type of object that an object reference points to
+ USAGE
+    int H5Rget_obj_type(id, ref_type, ref)
+        hid_t id;       IN: Dataset reference object is in or location ID of
+                            object that the dataset is located within.
+        H5R_type_t ref_type;    IN: Type of reference to query
+        void *ref;          IN: Reference to query.
+
+ RETURNS
+    Success:	An object type defined in H5Gpublic.h
+    Failure:	H5G_UNKNOWN
+ DESCRIPTION
+    Given a reference to some object, this function returns the type of object
+    pointed to.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+#ifdef H5_WANT_H5_V1_4_COMPAT
+int
+H5Rget_obj_type(hid_t id, H5R_type_t ref_type, void *_ref)
+#else /* H5_WANT_H5_V1_4_COMPAT */
+H5G_obj_t
+H5Rget_obj_type(hid_t id, H5R_type_t ref_type, void *_ref)
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+{
+    H5G_entry_t *loc = NULL;    /* Symbol table entry */
+    H5F_t *file=NULL;       /* File object */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int ret_value;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    H5G_obj_t ret_value;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+    FUNC_ENTER_API(H5Rget_obj_type, H5G_UNKNOWN);
+    H5TRACE3("Is","iRtx",id,ref_type,_ref);
+
+    /* Check args */
+    if (NULL == (loc = H5G_loc(id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5G_UNKNOWN, "not a location");
+    if(ref_type<=H5R_BADTYPE || ref_type>=H5R_MAXTYPE)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, H5G_UNKNOWN, "invalid reference type");
+    if(_ref==NULL)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, H5G_UNKNOWN, "invalid reference pointer");
+
+    /* Get the file pointer from the entry */
+    file=loc->file;
+
+    /* Get the object information */
+    if ((ret_value=
+#ifndef H5_WANT_H5_V1_4_COMPAT
+		(H5G_obj_t)
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+		H5R_get_obj_type(file,H5AC_ind_dxpl_id,ref_type,_ref))<0)
+	HGOTO_ERROR(H5E_REFERENCE, H5E_CANTINIT, H5G_UNKNOWN, "unable to determine object type");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* end H5Rget_obj_type() */
+

Added: packages/hdf5/branches/upstream/current/src/H5RC.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5RC.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5RC.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,126 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Reference counting buffer algorithms.
+ *
+ * These are used for various internal buffers which are shared.
+ *
+ */
+
+
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free lists                           */
+#include "H5RCprivate.h"        /* Reference-counted buffers            */
+
+/* Private typedefs & structs */
+
+/* Declare a free list to manage the H5RC_t struct */
+H5FL_DEFINE_STATIC(H5RC_t);
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5RC_create
+ PURPOSE
+    Create a reference counted object
+ USAGE
+    H5RC_t *H5RC_create(o,free)
+        const void *o;          IN: Object to initialize ref-counted object with
+        H5RC_free_func_t free;  IN: Function to call when ref-count drop to zero
+
+ RETURNS
+    Returns a pointer to a new ref-counted object on success, NULL on failure.
+ DESCRIPTION
+    Create a reference counted object.  The object is not duplicated, it is
+    assumed to be owned by the reference counted object now and will be freed
+    with the 'free' function when the reference count drops to zero.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5RC_t *
+H5RC_create(void *o, H5RC_free_func_t free_func)
+{
+    H5RC_t *ret_value=NULL;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5RC_create,NULL);
+
+    /* Sanity check */
+    HDassert(o);
+    HDassert(free_func);
+
+    /* Allocate ref-counted string structure */
+    if((ret_value=H5FL_MALLOC(H5RC_t))==NULL)
+        HGOTO_ERROR(H5E_RS,H5E_NOSPACE,NULL,"memory allocation failed");
+
+    /* Set the internal fields */
+    ret_value->o=o;
+    ret_value->n=1;
+    ret_value->free_func=free_func;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5RC_create() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5RC_decr
+ PURPOSE
+    Decrement the reference count for a ref-counted object
+ USAGE
+    herr_t H5RC_decr(rc)
+        H5RC_t *rc;             IN: Ref-counted object to decrement count for
+
+ RETURNS
+    SUCCEED/FAIL
+ DESCRIPTION
+    Decrements the reference count for a ref-counted object, calling the
+    object's free function if ref-count drops to zero.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5RC_decr(H5RC_t *rc)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5RC_decr,FAIL);
+
+    /* Sanity check */
+    HDassert(rc);
+    HDassert(rc->o);
+    HDassert(rc->n>0);
+    HDassert(rc->free_func);
+
+    /* Decrement reference count */
+    rc->n--;
+
+    /* Check if we should delete this object now */
+    if(rc->n==0) {
+        if((rc->free_func)(rc->o)<0) {
+            H5FL_FREE(H5RC_t,rc);
+            HGOTO_ERROR(H5E_RS,H5E_CANTFREE,FAIL,"memory release failed");
+        } /* end if */
+        H5FL_FREE(H5RC_t,rc);
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5RC_decr() */
+

Added: packages/hdf5/branches/upstream/current/src/H5RCprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5RCprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5RCprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,62 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains private information about the H5RC module
+ */
+#ifndef _H5RCprivate_H
+#define _H5RCprivate_H
+
+/**************************************/
+/* Public headers needed by this file */
+/**************************************/
+#ifdef LATER
+#include "H5RCpublic.h"
+#endif /* LATER */
+
+/***************************************/
+/* Private headers needed by this file */
+/***************************************/
+#include "H5private.h"
+
+/************/
+/* Typedefs */
+/************/
+
+/* Typedef for function to release object when reference count drops to zero */
+typedef herr_t (*H5RC_free_func_t)(void *o);
+
+/* Typedef for reference counted objects */
+typedef struct H5RC_t {
+    void *o;            /* Object to be reference counted */
+    size_t n;           /* Reference count of number of pointers sharing object */
+    H5RC_free_func_t free_func; /* Function to free object */
+} H5RC_t;
+
+/**********/
+/* Macros */
+/**********/
+#define H5RC_INC(rc)            ((rc)->n++)
+#define H5RC_DEC(rc)            (H5RC_decr(rc))
+#define H5RC_GET_OBJ(rc)        ((rc)->o)
+
+/********************/
+/* Private routines */
+/********************/
+H5_DLL H5RC_t *H5RC_create(void *s, H5RC_free_func_t free_func);
+H5_DLL herr_t H5RC_decr(H5RC_t *rc);
+
+#endif /* _H5RSprivate_H */
+
+

Added: packages/hdf5/branches/upstream/current/src/H5RS.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5RS.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5RS.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,448 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Reference counted string algorithms.
+ *
+ * These are used for various internal strings which get copied multiple times.
+ *
+ */
+
+
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free lists                           */
+#include "H5RSprivate.h"        /* Reference-counted strings            */
+
+/* Private typedefs & structs */
+struct H5RS_str_t {
+    char *s;            /* String to be reference counted */
+    unsigned wrapped;   /* Indicates that the string to be ref-counted is not copied */
+    unsigned n;         /* Reference count of number of pointers sharing string */
+};
+
+/* Declare a free list to manage the H5RS_str_t struct */
+H5FL_DEFINE_STATIC(H5RS_str_t);
+
+/* Declare the PQ free list for the wrapped strings */
+H5FL_BLK_DEFINE(str_buf);
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5RS_xstrdup
+ PURPOSE
+    Duplicate the string being reference counted
+ USAGE
+    char *H5RS_xstrdup(s)
+        const char *s;          IN: String to duplicate
+
+ RETURNS
+    Returns a pointer to a new string on success, NULL on failure.
+ DESCRIPTION
+    Duplicate a string buffer being reference counted.  Use this instead of
+    [H5MM_][x]strdup, in order to use the free-list memory routines.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static char *
+H5RS_xstrdup(const char *s)
+{
+    char *ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5RS_xstrdup);
+
+    if (s) {
+        ret_value = H5FL_BLK_MALLOC(str_buf,HDstrlen(s) + 1);
+        assert (ret_value);
+        HDstrcpy(ret_value, s);
+    } /* end if */
+    else
+        ret_value=NULL;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5RS_xstrdup() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5RS_create
+ PURPOSE
+    Create a reference counted string
+ USAGE
+    H5RS_str_t *H5RS_create(s)
+        const char *s;          IN: String to initialize ref-counted string with
+
+ RETURNS
+    Returns a pointer to a new ref-counted string on success, NULL on failure.
+ DESCRIPTION
+    Create a reference counted string.  The string passed in is copied into an
+    internal buffer.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5RS_str_t *
+H5RS_create(const char *s)
+{
+    H5RS_str_t *ret_value=NULL;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5RS_create,NULL);
+
+    /* Allocate ref-counted string structure */
+    if((ret_value=H5FL_MALLOC(H5RS_str_t))==NULL)
+        HGOTO_ERROR(H5E_RS,H5E_NOSPACE,NULL,"memory allocation failed");
+
+    /* Set the internal fields */
+    ret_value->s=H5RS_xstrdup(s);
+    ret_value->wrapped=0;
+    ret_value->n=1;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5RS_create() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5RS_wrap
+ PURPOSE
+    "Wrap" a reference counted string around an existing string
+ USAGE
+    H5RS_str_t *H5RS_wrap(s)
+        const char *s;          IN: String to wrap ref-counted string around
+
+ RETURNS
+    Returns a pointer to a new ref-counted string on success, NULL on failure.
+ DESCRIPTION
+    Wrap a reference counted string around an existing string, which is not
+    duplicated, unless its reference count gets incremented.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5RS_str_t *
+H5RS_wrap(const char *s)
+{
+    H5RS_str_t *ret_value=NULL;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5RS_wrap,NULL);
+
+    /* Allocate ref-counted string structure */
+    if((ret_value=H5FL_MALLOC(H5RS_str_t))==NULL)
+        HGOTO_ERROR(H5E_RS,H5E_NOSPACE,NULL,"memory allocation failed");
+
+    /* Set the internal fields */
+    ret_value->s=(char*)s;
+    ret_value->wrapped=1;
+    ret_value->n=1;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5RS_wrap() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5RS_own
+ PURPOSE
+    Transfer ownership of a regular string to  a reference counted string
+ USAGE
+    H5RS_str_t *H5RS_own(s)
+        const char *s;          IN: String to transfer ownership of
+
+ RETURNS
+    Returns a pointer to a new ref-counted string on success, NULL on failure.
+ DESCRIPTION
+    Transfer ownership of a dynamically allocated string to a reference counted
+    string.  The routine which passed in the string should not attempt to free
+    it, the reference counting string routines will do that when the reference
+    count drops to zero.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5RS_str_t *
+H5RS_own(char *s)
+{
+    H5RS_str_t *ret_value=NULL;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5RS_own,NULL);
+
+    /* Allocate ref-counted string structure */
+    if((ret_value=H5FL_MALLOC(H5RS_str_t))==NULL)
+        HGOTO_ERROR(H5E_RS,H5E_NOSPACE,NULL,"memory allocation failed");
+
+    /* Set the internal fields */
+    ret_value->s=s;
+    ret_value->wrapped=0;
+    ret_value->n=1;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5RS_own() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5RS_decr
+ PURPOSE
+    Decrement the reference count for a ref-counted string
+ USAGE
+    herr_t H5RS_decr(rs)
+        H5RS_str_t *rs;     IN/OUT: Ref-counted string to decrement count of
+
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Decrement the reference count for a reference counted string.  If the
+    reference count drops to zero, the reference counted string is deleted.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5RS_decr(H5RS_str_t *rs)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5RS_decr);
+
+    /* Sanity check */
+    assert(rs);
+    assert(rs->n > 0);
+
+    /* Decrement reference count for string */
+    if((--rs->n)==0) {
+        if(!rs->wrapped)
+            H5FL_BLK_FREE(str_buf,rs->s);
+        H5FL_FREE(H5RS_str_t,rs);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5RS_decr() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5RS_incr
+ PURPOSE
+    Increment the reference count for a ref-counted string
+ USAGE
+    herr_t H5RS_incr(rs)
+        H5RS_str_t *rs;     IN/OUT: Ref-counted string to increment count of
+
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Increment the reference count for a reference counted string.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5RS_incr(H5RS_str_t *rs)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5RS_incr);
+
+    /* Sanity check */
+    assert(rs);
+    assert(rs->n > 0);
+
+    /* If the ref-counted string started life as a wrapper around an existing
+     * string, duplicate the string now, so that the wrapped string can go out
+     * scope appropriately.
+     */
+    if(rs->wrapped) {
+        rs->s=H5RS_xstrdup(rs->s);
+        rs->wrapped=0;
+    } /* end if */
+
+    /* Increment reference count for string */
+    rs->n++;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5RS_incr() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5RS_dup
+ PURPOSE
+    "Duplicate" a ref-counted string
+ USAGE
+    H5RS_str_t H5RS_incr(rs)
+        H5RS_str_t *rs;     IN/OUT: Ref-counted string to "duplicate"
+
+ RETURNS
+    Returns a pointer to ref-counted string on success, NULL on failure.
+ DESCRIPTION
+    Increment the reference count for the reference counted string and return
+    a pointer to it.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5RS_str_t *
+H5RS_dup(H5RS_str_t *ret_value)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5RS_dup);
+
+    /* Check for valid reference counted string */
+    if(ret_value!=NULL)
+        /* Increment reference count for string */
+        ret_value->n++;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5RS_dup() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5RS_cmp
+ PURPOSE
+    Compare two ref-counted strings
+ USAGE
+    int H5RS_cmp(rs1,rs2)
+        const H5RS_str_t *rs1;  IN: First Ref-counted string to compare
+        const H5RS_str_t *rs2;  IN: Second Ref-counted string to compare
+
+ RETURNS
+    Returns positive, negative or 0 for comparison of two r-strings [same as
+    strcmp()]
+ DESCRIPTION
+    Compare two ref-counted strings and return a value indicating their sort
+    order [same as strcmp()]
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+int
+H5RS_cmp(const H5RS_str_t *rs1, const H5RS_str_t *rs2)
+{
+    /* Can't return invalid value from this function */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5RS_cmp);
+
+    /* Sanity check */
+    assert(rs1);
+    assert(rs1->s);
+    assert(rs2);
+    assert(rs2->s);
+
+    FUNC_LEAVE_NOAPI(HDstrcmp(rs1->s,rs2->s));
+} /* end H5RS_cmp() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5RS_len
+ PURPOSE
+    Compute the length of a ref-counted string
+ USAGE
+    ssize_t H5RS_cmp(rs)
+        const H5RS_str_t *rs;  IN: Ref-counted string to compute length of
+
+ RETURNS
+    Returns non-negative value on success, negative value on failure
+ DESCRIPTION
+    Compute the length of a ref-counted string.  [same as strlen()]
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+ssize_t
+H5RS_len(const H5RS_str_t *rs)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5RS_len);
+
+    /* Sanity check */
+    assert(rs);
+    assert(rs->s);
+
+    FUNC_LEAVE_NOAPI((ssize_t)HDstrlen(rs->s));
+} /* end H5RS_len() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5RS_get_str
+ PURPOSE
+    Get a pointer to the internal string contained in a ref-counted string
+ USAGE
+    char *H5RS_get_str(rs)
+        const H5RS_str_t *rs;   IN: Ref-counted string to get internal string from
+
+ RETURNS
+    Returns a pointer to the internal string being ref-counted on success,
+        NULL on failure.
+ DESCRIPTION
+    Gets a pointer to the internal string being reference counted.  This
+    pointer is volatile and might be invalid is further calls to the H5RS
+    API are made.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+char *
+H5RS_get_str(const H5RS_str_t *rs)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5RS_get_str);
+
+    /* Sanity check */
+    assert(rs);
+    assert(rs->s);
+
+    FUNC_LEAVE_NOAPI(rs->s);
+} /* end H5RS_get_str() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5RS_get_count
+ PURPOSE
+    Get the reference count for a ref-counted string
+ USAGE
+    unsigned H5RS_get_count(rs)
+        const H5RS_str_t *rs;   IN: Ref-counted string to get internal count from
+
+ RETURNS
+    Returns the number of references to the internal string being ref-counted on success,
+        0 on failure.
+ DESCRIPTION
+    Gets the count of references to the reference counted string.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+unsigned
+H5RS_get_count(const H5RS_str_t *rs)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5RS_get_count);
+
+    /* Sanity check */
+    assert(rs);
+    assert(rs->n>0);
+
+    FUNC_LEAVE_NOAPI(rs->n);
+} /* end H5RS_get_count() */
+

Added: packages/hdf5/branches/upstream/current/src/H5RSprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5RSprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5RSprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,59 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains private information about the H5RS module
+ */
+#ifndef _H5RSprivate_H
+#define _H5RSprivate_H
+
+/**************************************/
+/* Public headers needed by this file */
+/**************************************/
+#ifdef LATER
+#include "H5RSpublic.h"
+#endif /* LATER */
+
+/***************************************/
+/* Private headers needed by this file */
+/***************************************/
+#include "H5private.h"
+
+/************/
+/* Typedefs */
+/************/
+
+/* Typedef for reference counted string (defined in H5RS.c) */
+typedef struct H5RS_str_t H5RS_str_t;
+
+/**********/
+/* Macros */
+/**********/
+
+/********************/
+/* Private routines */
+/********************/
+H5_DLL H5RS_str_t *H5RS_create(const char *s);
+H5_DLL H5RS_str_t *H5RS_wrap(const char *s);
+H5_DLL H5RS_str_t *H5RS_own(char *s);
+H5_DLL herr_t H5RS_decr(H5RS_str_t *rs);
+H5_DLL herr_t H5RS_incr(H5RS_str_t *rs);
+H5_DLL H5RS_str_t *H5RS_dup(H5RS_str_t *s);
+H5_DLL int H5RS_cmp(const H5RS_str_t *rs1, const H5RS_str_t *rs2);
+H5_DLL ssize_t H5RS_len(const H5RS_str_t *rs);
+H5_DLL char *H5RS_get_str(const H5RS_str_t *rs);
+H5_DLL unsigned H5RS_get_count(const H5RS_str_t *rs);
+
+#endif /* _H5RSprivate_H */
+

Added: packages/hdf5/branches/upstream/current/src/H5Rprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Rprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Rprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,33 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains private information about the H5S module
+ */
+#ifndef _H5Rprivate_H
+#define _H5Rprivate_H
+
+#include "H5Rpublic.h"
+
+/* Private headers needed by this file */
+#include "H5private.h"
+
+#define H5R_RESERVED_ATOMS  0
+
+/* Internal data structures */
+
+
+/* Private functions */
+
+#endif  /* _H5Rprivate_H */

Added: packages/hdf5/branches/upstream/current/src/H5Rpublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Rpublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Rpublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,85 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains public declarations for the H5S module.
+ */
+#ifndef _H5Rpublic_H
+#define _H5Rpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Gpublic.h"
+#include "H5Ipublic.h"
+
+/*
+ * Reference types allowed.
+ */
+typedef enum {
+    H5R_BADTYPE     =   (-1),   /*invalid Reference Type                     */
+    H5R_OBJECT,                 /*Object reference                           */
+    H5R_DATASET_REGION,         /*Dataset Region Reference                   */
+    H5R_INTERNAL,               /*Internal Reference                         */
+    H5R_MAXTYPE                 /*highest type (Invalid as true type)	     */
+} H5R_type_t;
+
+#ifdef LATER
+/* Generic reference structure for user's code */
+typedef struct {
+    unsigned long oid[2];       /* OID of object referenced */
+    unsigned long region[2];    /* heap ID of region in object */
+    unsigned long file[2];      /* heap ID of external filename */
+} href_t;
+#endif /* LATER */
+
+/* Note! Be careful with the sizes of the references because they should really
+ * depend on the run-time values in the file.  Unfortunately, the arrays need
+ * to be defined at compile-time, so we have to go with the worst case sizes for
+ * them.  -QAK
+ */
+#define H5R_OBJ_REF_BUF_SIZE    sizeof(haddr_t)
+/* Object reference structure for user's code */
+typedef haddr_t hobj_ref_t; /* Needs to be large enough to store largest haddr_t in a worst case machine (ie. 8 bytes currently) */
+
+#define H5R_DSET_REG_REF_BUF_SIZE    (sizeof(haddr_t)+4)
+/* 4 is used instead of sizeof(int) to permit portability between
+   the Crays and other machines (the heap ID is always encoded as an int32 anyway)
+*/
+/* Dataset Region reference structure for user's code */
+typedef unsigned char hdset_reg_ref_t[H5R_DSET_REG_REF_BUF_SIZE];/* Buffer to store heap ID and index */
+/* Needs to be large enough to store largest haddr_t in a worst case machine (ie. 8 bytes currently) plus an int */
+
+/* Publicly visible datastructures */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Functions in H5R.c */
+H5_DLL herr_t H5Rcreate(void *ref, hid_t loc_id, const char *name,
+			 H5R_type_t ref_type, hid_t space_id);
+H5_DLL hid_t H5Rdereference(hid_t dataset, H5R_type_t ref_type, void *ref);
+H5_DLL hid_t H5Rget_region(hid_t dataset, H5R_type_t ref_type, void *ref);
+#ifdef H5_WANT_H5_V1_4_COMPAT
+H5_DLL int H5Rget_object_type(hid_t dataset, void *_ref);
+H5_DLL int H5Rget_obj_type(hid_t id, H5R_type_t ref_type, void *_ref);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+H5_DLL H5G_obj_t H5Rget_obj_type(hid_t id, H5R_type_t ref_type, void *_ref);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif  /* _H5Rpublic_H */

Added: packages/hdf5/branches/upstream/current/src/H5S.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5S.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5S.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1999 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5S_PACKAGE		/*suppress error about including H5Spkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5S_init_interface
+
+
+#define _H5S_IN_H5S_C
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free lists                           */
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Oprivate.h"		/* Object headers		  	*/
+#include "H5Spkg.h"		/* Dataspaces 				*/
+
+/* Local static function prototypes */
+static H5S_t * H5S_create(H5S_class_t type);
+static herr_t H5S_set_extent_simple (H5S_t *space, unsigned rank,
+    const hsize_t *dims, const hsize_t *max);
+static htri_t H5S_is_simple(const H5S_t *sdim);
+
+#ifdef H5S_DEBUG
+/* Names of the selection names, for debugging */
+static const char *H5S_sel_names[]={
+    "none", "point", "hyperslab", "all"
+};
+
+/* The path table, variable length */
+static H5S_iostats_t		**H5S_iostats_g = NULL;
+static size_t			H5S_aiostats_g = 0;	/*entries allocated*/
+static size_t			H5S_niostats_g = 0;	/*entries used*/
+#endif /* H5S_DEBUG */
+
+#ifdef H5_HAVE_PARALLEL
+/* Global vars whose value can be set from environment variable also */
+hbool_t H5S_mpi_opt_types_g = TRUE;
+#endif /* H5_HAVE_PARALLEL */
+
+/* Declare a free list to manage the H5S_extent_t struct */
+H5FL_DEFINE(H5S_extent_t);
+
+/* Declare a free list to manage the H5S_t struct */
+H5FL_DEFINE(H5S_t);
+
+/* Declare a free list to manage the array's of hsize_t's */
+H5FL_ARR_DEFINE(hsize_t,H5S_MAX_RANK);
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5S_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5S_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_init_interface(void)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_init_interface);
+
+    /* Initialize the atom group for the file IDs */
+    if (H5I_init_group(H5I_DATASPACE, H5I_DATASPACEID_HASHSIZE,
+		       H5S_RESERVED_ATOMS, (H5I_free_t)H5S_close)<0)
+	HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to initialize interface");
+
+#ifdef H5_HAVE_PARALLEL
+    {
+        /* Allow MPI buf-and-file-type optimizations? */
+        const char *s = HDgetenv ("HDF5_MPI_OPT_TYPES");
+        if (s && HDisdigit(*s))
+            H5S_mpi_opt_types_g = (int)HDstrtol (s, NULL, 0);
+    }
+#endif /* H5_HAVE_PARALLEL */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_term_interface
+ PURPOSE
+    Terminate various H5S objects
+ USAGE
+    void H5S_term_interface()
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Release the atom group and any other resources allocated.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+     Can't report errors...
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+int
+H5S_term_interface(void)
+{
+    int	n=0;
+#ifdef H5S_DEBUG
+    size_t	i;
+    int		j, nprints=0;
+    H5S_iostats_t	*path=NULL;
+    char	buf[256];
+#endif /* H5S_DEBUG */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_term_interface);
+
+    if (H5_interface_initialize_g) {
+	if ((n=H5I_nmembers(H5I_DATASPACE))) {
+	    H5I_clear_group(H5I_DATASPACE, FALSE);
+	} else {
+#ifdef H5S_DEBUG
+	    /*
+	     * Print statistics about each conversion path.
+	     */
+	    if (H5DEBUG(S)) {
+		for (i=0; i<H5S_niostats_g; i++) {
+		    path = H5S_iostats_g[i];
+		    for (j=0; j<2; j++) {
+			if (0==path->stats[j].gath_ncalls &&
+			    0==path->stats[j].scat_ncalls &&
+			    0==path->stats[j].bkg_ncalls &&
+			    0==path->stats[j].read_ncalls &&
+			    0==path->stats[j].write_ncalls) {
+			    continue;
+			}
+			if (0==nprints++) {
+			    fprintf(H5DEBUG(S), "H5S: data space conversion "
+				    "statistics:\n");
+			    fprintf(H5DEBUG(S),
+				    "   %-16s %10s %10s %8s %8s %8s %10s\n",
+				    "Memory <> File", "Bytes", "Calls",
+				    "User", "System", "Elapsed", "Bandwidth");
+			    fprintf(H5DEBUG(S),
+				    "   %-16s %10s %10s %8s %8s %8s %10s\n",
+				    "--------------", "-----", "-----",
+				    "----", "------", "-------", "---------");
+			}
+
+			/* Summary */
+			sprintf(buf, "%s %c %s",
+				H5S_sel_names[path->mtype], 0==j?'>':'<', H5S_sel_names[path->ftype]);
+			fprintf(H5DEBUG(S), "   %-16s\n", buf);
+
+			/* Gather */
+			if (path->stats[j].gath_ncalls) {
+			    H5_bandwidth(buf,
+					 (double)(path->stats[j].gath_nbytes),
+					 path->stats[j].gath_timer.etime);
+			    HDfprintf(H5DEBUG(S),
+				      "   %16s %10Hu %10Hu %8.2f %8.2f %8.2f "
+				      "%10s\n", "gather",
+				      path->stats[j].gath_nbytes,
+				      path->stats[j].gath_ncalls,
+				      path->stats[j].gath_timer.utime,
+				      path->stats[j].gath_timer.stime,
+				      path->stats[j].gath_timer.etime,
+				      buf);
+			}
+
+			/* Scatter */
+			if (path->stats[j].scat_ncalls) {
+			    H5_bandwidth(buf,
+					 (double)(path->stats[j].scat_nbytes),
+					 path->stats[j].scat_timer.etime);
+			    HDfprintf(H5DEBUG(S),
+				      "   %16s %10Hu %10Hu %8.2f %8.2f %8.2f "
+				      "%10s\n", "scatter",
+				      path->stats[j].scat_nbytes,
+				      path->stats[j].scat_ncalls,
+				      path->stats[j].scat_timer.utime,
+				      path->stats[j].scat_timer.stime,
+				      path->stats[j].scat_timer.etime,
+				      buf);
+			}
+
+			/* Background */
+			if (path->stats[j].bkg_ncalls) {
+			    H5_bandwidth(buf,
+					 (double)(path->stats[j].bkg_nbytes),
+					 path->stats[j].bkg_timer.etime);
+			    HDfprintf(H5DEBUG(S),
+				      "   %16s %10Hu %10Hu %8.2f %8.2f %8.2f "
+				      "%10s\n", "background",
+				      path->stats[j].bkg_nbytes,
+				      path->stats[j].bkg_ncalls,
+				      path->stats[j].bkg_timer.utime,
+				      path->stats[j].bkg_timer.stime,
+				      path->stats[j].bkg_timer.etime,
+				      buf);
+			}
+
+			/* Read */
+			if (path->stats[j].read_ncalls) {
+			    H5_bandwidth(buf,
+					 (double)(path->stats[j].read_nbytes),
+					 path->stats[j].read_timer.etime);
+			    HDfprintf(H5DEBUG(S),
+				      "   %16s %10Hu %10Hu %8.2f %8.2f %8.2f "
+				      "%10s\n", "read",
+				      path->stats[j].read_nbytes,
+				      path->stats[j].read_ncalls,
+				      path->stats[j].read_timer.utime,
+				      path->stats[j].read_timer.stime,
+				      path->stats[j].read_timer.etime,
+				      buf);
+			}
+
+			/* Write */
+			if (path->stats[j].write_ncalls) {
+			    H5_bandwidth(buf,
+					 (double)(path->stats[j].write_nbytes),
+					 path->stats[j].write_timer.etime);
+			    HDfprintf(H5DEBUG(S),
+				      "   %16s %10Hu %10Hu %8.2f %8.2f %8.2f "
+				      "%10s\n", "write",
+				      path->stats[j].write_nbytes,
+				      path->stats[j].write_ncalls,
+				      path->stats[j].write_timer.utime,
+				      path->stats[j].write_timer.stime,
+				      path->stats[j].write_timer.etime,
+				      buf);
+			}
+		    }
+		}
+	    }
+#endif /* H5S_DEBUG */
+
+	    /* Free data types */
+	    H5I_destroy_group(H5I_DATASPACE);
+
+#ifdef H5S_DEBUG
+	    /* Clear/free conversion table */
+	    for (i=0; i<H5S_niostats_g; i++)
+                H5MM_xfree(H5S_iostats_g[i]);
+	    H5S_iostats_g = H5MM_xfree(H5S_iostats_g);
+	    H5S_niostats_g = H5S_aiostats_g = 0;
+#endif /* H5S_DEBUG */
+
+	    /* Shut down interface */
+	    H5_interface_initialize_g = 0;
+	    n = 1; /*H5I*/
+	}
+    }
+
+    FUNC_LEAVE_NOAPI(n);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_create
+ PURPOSE
+    Create empty, typed dataspace
+ USAGE
+   H5S_t *H5S_create(type)
+    H5S_type_t  type;           IN: Dataspace type to create
+ RETURNS
+    Pointer to dataspace on success, NULL on failure
+ DESCRIPTION
+    Creates a new dataspace of a given type.  The extent is undefined and the
+    selection is set to the "all" selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5S_t *
+H5S_create(H5S_class_t type)
+{
+    H5S_t *ret_value;
+
+    FUNC_ENTER_NOAPI(H5S_create, NULL);
+
+    /* Create a new data space */
+    if((ret_value = H5FL_MALLOC(H5S_t))!=NULL) {
+        ret_value->extent.type = type;
+        ret_value->extent.rank = 0;
+        ret_value->extent.size = ret_value->extent.max = NULL;
+
+        switch(type) {
+            case H5S_SCALAR:
+                ret_value->extent.nelem = 1;
+                break;
+            case H5S_SIMPLE:
+                ret_value->extent.nelem = 0;
+                break;
+            default:
+                assert("unknown dataspace (extent) type" && 0);
+                break;
+        } /* end switch */
+
+        /* Start with "all" selection */
+        if(H5S_select_all(ret_value,0)<0)
+            HGOTO_ERROR (H5E_DATASPACE, H5E_CANTSET, NULL, "unable to set all selection");
+
+        /* Reset common selection info pointer */
+        ret_value->select.sel_info.hslab=NULL;
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_create() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Screate
+ PURPOSE
+    Create empty, typed dataspace
+ USAGE
+   hid_t  H5Screate(type)
+    H5S_type_t  type;           IN: Dataspace type to create
+ RETURNS
+    Valid dataspace ID on success, negative on failure
+ DESCRIPTION
+    Creates a new dataspace of a given type.  The extent & selection are
+    undefined
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hid_t
+H5Screate(H5S_class_t type)
+{
+    H5S_t *new_ds=NULL;         /* New dataspace structure */
+    hid_t ret_value;            /* Return value */
+
+    FUNC_ENTER_API(H5Screate, FAIL);
+    H5TRACE1("i","Sc",type);
+
+    /* Check args */
+    if(type<=H5S_NO_CLASS || type> H5S_SIMPLE)  /* don't allow complex dataspace yet */
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid dataspace type");
+
+    if (NULL==(new_ds=H5S_create(type)))
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTCREATE, FAIL, "unable to create dataspace");
+
+    /* Atomize */
+    if ((ret_value=H5I_register (H5I_DATASPACE, new_ds))<0)
+        HGOTO_ERROR (H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register data space atom");
+
+done:
+    if (ret_value < 0) {
+        if(new_ds!=NULL)
+            H5S_close(new_ds);
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Screate() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_extent_release
+ *
+ * Purpose:	Releases all memory associated with a dataspace extent.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, July 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_extent_release(H5S_extent_t *extent)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_extent_release, FAIL);
+
+    assert(extent);
+
+    /* Release extent */
+    if(extent->type==H5S_SIMPLE) {
+        if(extent->size)
+            H5FL_ARR_FREE(hsize_t,extent->size);
+        if(extent->max)
+            H5FL_ARR_FREE(hsize_t,extent->max);
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5S_extent_release() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_close
+ *
+ * Purpose:	Releases all memory associated with a data space.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_close(H5S_t *ds)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_close, FAIL);
+
+    assert(ds);
+
+    /* Release selection (this should come before the extent release) */
+    H5S_SELECT_RELEASE(ds);
+
+    /* Release extent */
+    H5S_extent_release(&ds->extent);
+
+    /* Release the main structure */
+    H5FL_FREE(H5S_t,ds);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Sclose
+ *
+ * Purpose:	Release access to a data space object.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Errors:
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Sclose(hid_t space_id)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_API(H5Sclose, FAIL);
+    H5TRACE1("e","i",space_id);
+
+    /* Check args */
+    if (NULL == H5I_object_verify(space_id,H5I_DATASPACE))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
+
+    /* When the reference count reaches zero the resources are freed */
+    if (H5I_dec_ref(space_id) < 0)
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "problem freeing id");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Scopy
+ *
+ * Purpose:	Copies a dataspace.
+ *
+ * Return:	Success:	ID of the new dataspace
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January 30, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Scopy(hid_t space_id)
+{
+    H5S_t	*src = NULL;
+    H5S_t	*dst = NULL;
+    hid_t	ret_value;
+
+    FUNC_ENTER_API(H5Scopy, FAIL);
+    H5TRACE1("i","i",space_id);
+
+    /* Check args */
+    if (NULL==(src=H5I_object_verify(space_id, H5I_DATASPACE)))
+        HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
+
+    /* Copy */
+    if (NULL==(dst=H5S_copy (src, FALSE)))
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to copy data space");
+
+    /* Atomize */
+    if ((ret_value=H5I_register (H5I_DATASPACE, dst))<0)
+        HGOTO_ERROR (H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register data space atom");
+
+done:
+    if(ret_value<0) {
+        if(dst!=NULL)
+            H5S_close(dst);
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Sextent_copy
+ *
+ * Purpose:	Copies a dataspace extent.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, July 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Sextent_copy(hid_t dst_id,hid_t src_id)
+{
+    H5S_t	*src = NULL;
+    H5S_t	*dst = NULL;
+    hid_t	ret_value = SUCCEED;
+
+    FUNC_ENTER_API(H5Sextent_copy, FAIL);
+    H5TRACE2("e","ii",dst_id,src_id);
+
+    /* Check args */
+    if (NULL==(src=H5I_object_verify(src_id, H5I_DATASPACE)))
+        HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
+    if (NULL==(dst=H5I_object_verify(dst_id, H5I_DATASPACE)))
+        HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
+
+    /* Copy */
+    if (H5S_extent_copy(&(dst->extent),&(src->extent))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOPY, FAIL, "can't copy extent");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_extent_copy
+ *
+ * Purpose:	Copies a dataspace extent
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, June  3, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_extent_copy(H5S_extent_t *dst, const H5S_extent_t *src)
+{
+    unsigned u;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_extent_copy, FAIL);
+
+    /* Copy the regular fields */
+    dst->type=src->type;
+    dst->nelem=src->nelem;
+    dst->rank=src->rank;
+
+    switch (src->type) {
+        case H5S_SCALAR:
+            dst->size=NULL;
+            dst->max=NULL;
+            break;
+
+        case H5S_SIMPLE:
+            if (src->size) {
+                dst->size = H5FL_ARR_MALLOC(hsize_t,src->rank);
+                for (u = 0; u < src->rank; u++)
+                    dst->size[u] = src->size[u];
+            }
+            else
+                dst->size=NULL;
+            if (src->max) {
+                dst->max = H5FL_ARR_MALLOC(hsize_t,src->rank);
+                for (u = 0; u < src->rank; u++)
+                    dst->max[u] = src->max[u];
+            }
+            else
+                dst->max=NULL;
+            break;
+
+        case H5S_COMPLEX:
+            /*void */
+            break;
+
+        default:
+            assert("unknown data space type" && 0);
+            break;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_copy
+ *
+ * Purpose:	Copies a data space, by copying the extent and selection through
+ *          H5S_extent_copy and H5S_select_copy.  If the SHARE_SELECTION flag
+ *          is set, then the selection can be shared between the source and
+ *          destination dataspaces.  (This should only occur in situations
+ *          where the destination dataspace will immediately change to a new
+ *          selection)
+ *
+ * Return:	Success:	A pointer to a new copy of SRC
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December  4, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5S_t *
+H5S_copy(const H5S_t *src, hbool_t share_selection)
+{
+    H5S_t		   *dst = NULL;
+    H5S_t		   *ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_copy, NULL);
+
+    if (NULL==(dst = H5FL_MALLOC(H5S_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* Copy the source dataspace's extent */
+    if (H5S_extent_copy(&(dst->extent),&(src->extent))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOPY, NULL, "can't copy extent");
+
+    /* Copy the source dataspace's selection */
+    if (H5S_select_copy(dst,src,share_selection)<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOPY, NULL, "can't copy select");
+
+    /* Set the return value */
+    ret_value=dst;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_get_simple_extent_npoints
+ *
+ * Purpose:	Determines how many data points a dataset extent has.
+ *
+ * Return:	Success:	Number of data points in the dataset extent.
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, December  9, 1997
+ *
+ * Note:        This routine participates in the "Inlining C function pointers"
+ *              pattern, don't call it directly, use the appropriate macro
+ *              defined in H5Sprivate.h.
+ *
+ * Modifications:
+ *  Changed Name - QAK 7/7/98
+ *
+ *-------------------------------------------------------------------------
+ */
+hssize_t
+H5S_get_simple_extent_npoints(const H5S_t *ds)
+{
+    hssize_t    ret_value;
+
+    FUNC_ENTER_NOAPI(H5S_get_simple_extent_npoints, -1);
+
+    /* check args */
+    assert(ds);
+
+    /* Get the number of elements in extent */
+    ret_value = ds->extent.nelem;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Sget_simple_extent_npoints
+ *
+ * Purpose:	Determines how many data points a dataset extent has.
+ *
+ * Return:	Success:	Number of data points in the dataset.
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *  Changed Name - QAK 7/7/98
+ *
+ *-------------------------------------------------------------------------
+ */
+hssize_t
+H5Sget_simple_extent_npoints(hid_t space_id)
+{
+    H5S_t		   *ds = NULL;
+    hssize_t		    ret_value;
+
+    FUNC_ENTER_API(H5Sget_simple_extent_npoints, FAIL);
+    H5TRACE1("Hs","i",space_id);
+
+    /* Check args */
+    if (NULL == (ds = H5I_object_verify(space_id, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
+
+    ret_value = H5S_GET_EXTENT_NPOINTS(ds);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_get_npoints_max
+ *
+ * Purpose:	Determines the maximum number of data points a data space may
+ *		have.  If the `max' array is null then the maximum number of
+ *		data points is the same as the current number of data points
+ *		without regard to the hyperslab.  If any element of the `max'
+ *		array is zero then the maximum possible size is returned.
+ *
+ * Return:	Success:	Maximum number of data points the data space
+ *				may have.
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t
+H5S_get_npoints_max(const H5S_t *ds)
+{
+    hsize_t	    ret_value;
+    unsigned	    u;
+
+    FUNC_ENTER_NOAPI(H5S_get_npoints_max, 0);
+
+    /* check args */
+    assert(ds);
+
+    switch (H5S_GET_EXTENT_TYPE(ds)) {
+        case H5S_SCALAR:
+            ret_value = 1;
+            break;
+
+        case H5S_SIMPLE:
+            if (ds->extent.max) {
+                for (ret_value=1, u=0; u<ds->extent.rank; u++) {
+                    if (H5S_UNLIMITED==ds->extent.max[u]) {
+                        ret_value = HSIZET_MAX;
+                        break;
+                    }
+                    else
+                        ret_value *= ds->extent.max[u];
+                }
+            }
+            else {
+                for (ret_value=1, u=0; u<ds->extent.rank; u++)
+                    ret_value *= ds->extent.size[u];
+            }
+            break;
+
+        case H5S_COMPLEX:
+            HGOTO_ERROR(H5E_DATASPACE, H5E_UNSUPPORTED, 0, "complex data spaces are not supported yet");
+
+        default:
+            assert("unknown data space class" && 0);
+            HGOTO_ERROR(H5E_DATASPACE, H5E_UNSUPPORTED, 0, "internal error (unknown data space class)");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Sget_simple_extent_ndims
+ *
+ * Purpose:	Determines the dimensionality of a data space.
+ *
+ * Return:	Success:	The number of dimensions in a data space.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December 11, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Sget_simple_extent_ndims(hid_t space_id)
+{
+    H5S_t		   *ds = NULL;
+    int		   ret_value;
+
+    FUNC_ENTER_API(H5Sget_simple_extent_ndims, FAIL);
+    H5TRACE1("Is","i",space_id);
+
+    /* Check args */
+    if (NULL == (ds = H5I_object_verify(space_id, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
+
+    ret_value = H5S_GET_EXTENT_NDIMS(ds);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_get_simple_extent_ndims
+ *
+ * Purpose:	Returns the number of dimensions in a data space.
+ *
+ * Return:	Success:	Non-negative number of dimensions.  Zero
+ *				implies a scalar.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December 11, 1997
+ *
+ * Note:        This routine participates in the "Inlining C function pointers"
+ *              pattern, don't call it directly, use the appropriate macro
+ *              defined in H5Sprivate.h.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5S_get_simple_extent_ndims(const H5S_t *ds)
+{
+    int		    ret_value;
+
+    FUNC_ENTER_NOAPI(H5S_get_simple_extent_ndims, FAIL);
+
+    /* check args */
+    assert(ds);
+
+    switch (H5S_GET_EXTENT_TYPE(ds)) {
+        case H5S_SCALAR:
+        case H5S_SIMPLE:
+            ret_value = ds->extent.rank;
+            break;
+
+        case H5S_COMPLEX:
+            HGOTO_ERROR(H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, "complex data spaces are not supported yet");
+
+        default:
+            assert("unknown data space class" && 0);
+            HGOTO_ERROR(H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, "internal error (unknown data space class)");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Sget_simple_extent_dims
+ *
+ * Purpose:	Returns the size and maximum sizes in each dimension of
+ *		a data space DS through	the DIMS and MAXDIMS arguments.
+ *
+ * Return:	Success:	Number of dimensions, the same value as
+ *				returned by H5Sget_simple_extent_ndims().
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December 11, 1997
+ *
+ * Modifications:
+ *		June 18, 1998	Albert Cheng
+ *		Added maxdims argument.  Removed dims argument check
+ *		since it can still return ndims even if both dims and
+ *		maxdims are NULLs.
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Sget_simple_extent_dims(hid_t space_id, hsize_t dims[]/*out*/,
+			  hsize_t maxdims[]/*out*/)
+{
+    H5S_t		   *ds = NULL;
+    int		   ret_value;
+
+    FUNC_ENTER_API(H5Sget_simple_extent_dims, FAIL);
+    H5TRACE3("Is","ixx",space_id,dims,maxdims);
+
+    /* Check args */
+    if (NULL == (ds = H5I_object_verify(space_id, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace");
+
+    ret_value = H5S_get_simple_extent_dims(ds, dims, maxdims);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_get_simple_extent_dims
+ *
+ * Purpose:	Returns the size in each dimension of a data space.  This
+ *		function may not be meaningful for all types of data spaces.
+ *
+ * Return:	Success:	Number of dimensions.  Zero implies scalar.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December 11, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5S_get_simple_extent_dims(const H5S_t *ds, hsize_t dims[], hsize_t max_dims[])
+{
+    int	ret_value;
+    int	i;
+
+    FUNC_ENTER_NOAPI(H5S_get_simple_extent_dims, FAIL);
+
+    /* check args */
+    assert(ds);
+
+    switch (H5S_GET_EXTENT_TYPE(ds)) {
+        case H5S_SCALAR:
+            ret_value = 0;
+            break;
+
+        case H5S_SIMPLE:
+            ret_value = ds->extent.rank;
+            for (i=0; i<ret_value; i++) {
+                if (dims)
+                    dims[i] = ds->extent.size[i];
+                if (max_dims) {
+                    if (ds->extent.max)
+                        max_dims[i] = ds->extent.max[i];
+                    else
+                        max_dims[i] = ds->extent.size[i];
+                }
+            }
+            break;
+
+        case H5S_COMPLEX:
+            HGOTO_ERROR(H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, "complex data spaces are not supported yet");
+
+        default:
+            assert("unknown data space class" && 0);
+            HGOTO_ERROR(H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, "internal error (unknown data space class)");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_modify
+ *
+ * Purpose:	Updates a data space by writing a message to an object
+ *		header.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_modify(H5G_entry_t *ent, const H5S_t *ds, hbool_t update_time, hid_t dxpl_id)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_modify, FAIL);
+
+    assert(ent);
+    assert(ds);
+
+    switch (H5S_GET_EXTENT_TYPE(ds)) {
+        case H5S_SCALAR:
+        case H5S_SIMPLE:
+            if (H5O_modify(ent, H5O_SDSPACE_ID, 0, 0, update_time, &(ds->extent), dxpl_id)<0)
+                HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, "can't update simple data space message");
+            break;
+
+        case H5S_COMPLEX:
+            HGOTO_ERROR(H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, "complex data spaces are not implemented yet");
+
+        default:
+            assert("unknown data space class" && 0);
+            break;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_append
+ *
+ * Purpose:	Updates a data space by adding a message to an object
+ *		header.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Tuesday, December 31, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_append(H5F_t *f, hid_t dxpl_id, struct H5O_t *oh, const H5S_t *ds)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_append, FAIL);
+
+    assert(f);
+    assert(oh);
+    assert(ds);
+
+    switch (H5S_GET_EXTENT_TYPE(ds)) {
+        case H5S_SCALAR:
+        case H5S_SIMPLE:
+            if (H5O_append(f, dxpl_id, oh, H5O_SDSPACE_ID, 0, &(ds->extent))<0)
+                HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, "can't update simple data space message");
+            break;
+
+        case H5S_COMPLEX:
+            HGOTO_ERROR(H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, "complex data spaces are not implemented yet");
+
+        default:
+            assert("unknown data space class" && 0);
+            break;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_append() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_read
+ *
+ * Purpose:	Reads the data space from an object header.
+ *
+ * Return:	Success:	Pointer to a new data space.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *	Robb Matzke, 9 Jun 1998
+ *	Removed the unused file argument since the file is now part of the
+ *	ENT argument.
+ *-------------------------------------------------------------------------
+ */
+H5S_t *
+H5S_read(const H5G_entry_t *ent, hid_t dxpl_id)
+{
+    H5S_t		   *ds = NULL;          /* Dataspace to return */
+    H5S_t		   *ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_read, NULL);
+
+    /* check args */
+    assert(ent);
+
+    if (NULL==(ds = H5FL_CALLOC(H5S_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    if (H5O_read(ent, H5O_SDSPACE_ID, 0, &(ds->extent), dxpl_id) == NULL)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, NULL, "unable to load dataspace info from dataset header");
+
+    /* Default to entire dataspace being selected */
+    if(H5S_select_all(ds,0)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTSET, NULL, "unable to set all selection");
+
+    /* Set the value for successful return */
+    ret_value=ds;
+
+done:
+    if(ret_value==NULL) {
+        if(ds!=NULL)
+            H5FL_FREE(H5S_t,ds);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_is_simple
+ PURPOSE
+    Check if a dataspace is simple (internal)
+ USAGE
+    htri_t H5S_is_simple(sdim)
+	H5S_t *sdim;		IN: Pointer to dataspace object to query
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+	This function determines the if a dataspace is "simple". ie. if it
+    has orthogonal, evenly spaced dimensions.
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_is_simple(const H5S_t *sdim)
+{
+    htri_t		    ret_value;
+
+    FUNC_ENTER_NOAPI(H5S_is_simple, FAIL);
+
+    /* Check args and all the boring stuff. */
+    assert(sdim);
+    ret_value = (H5S_GET_EXTENT_TYPE(sdim) == H5S_SIMPLE ||
+	  H5S_GET_EXTENT_TYPE(sdim) == H5S_SCALAR) ? TRUE : FALSE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sis_simple
+ PURPOSE
+    Check if a dataspace is simple
+ USAGE
+    htri_t H5Sis_simple(space_id)
+	hid_t space_id;	      IN: ID of dataspace object to query
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+	This function determines the if a dataspace is "simple". ie. if it
+    has orthogonal, evenly spaced dimensions.
+--------------------------------------------------------------------------*/
+htri_t
+H5Sis_simple(hid_t space_id)
+{
+    H5S_t		   *space = NULL;	/* dataspace to modify */
+    htri_t		    ret_value;
+
+    FUNC_ENTER_API(H5Sis_simple, FAIL);
+    H5TRACE1("t","i",space_id);
+
+    /* Check args and all the boring stuff. */
+    if ((space = H5I_object_verify(space_id,H5I_DATASPACE)) == NULL)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "not a data space");
+
+    ret_value = H5S_is_simple(space);
+
+  done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sset_extent_simple
+ PURPOSE
+    Sets the size of a simple dataspace
+ USAGE
+    herr_t H5Sset_extent_simple(space_id, rank, dims, max)
+        hid_t space_id;	      IN: Dataspace object to query
+        int rank;	      IN: # of dimensions for the dataspace
+        const size_t *dims;   IN: Size of each dimension for the dataspace
+ 	const size_t *max;    IN: Maximum size of each dimension for the
+ 				  dataspace
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    This function sets the number and size of each dimension in the
+    dataspace. Setting RANK to a value of zero converts the dataspace to a
+    scalar dataspace.  Dimensions are specified from slowest to fastest
+    changing in the DIMS array (i.e. 'C' order).  Setting the size of a
+    dimension in the MAX array to zero indicates that the dimension is of
+    unlimited size and should be allowed to expand.  If MAX is NULL, the
+    dimensions in the DIMS array are used as the maximum dimensions.
+    Currently, only the first dimension in the array (the slowest) may be
+    unlimited in size.
+--------------------------------------------------------------------------*/
+herr_t
+H5Sset_extent_simple(hid_t space_id, int rank, const hsize_t dims[/*rank*/],
+		      const hsize_t max[/*rank*/])
+{
+    H5S_t	*space = NULL;	/* dataspace to modify */
+    int	u;	/* local counting variable */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_API(H5Sset_extent_simple, FAIL);
+    H5TRACE4("e","iIs*[a1]h*[a1]h",space_id,rank,dims,max);
+
+    /* Check args */
+    if ((space = H5I_object_verify(space_id,H5I_DATASPACE)) == NULL)
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "not a data space");
+    if (rank > 0 && dims == NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no dimensions specified");
+    if (rank<0 || rank>H5S_MAX_RANK)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid rank");
+    if (dims) {
+        for (u=0; u<rank; u++) {
+            if (((max!=NULL && max[u]!=H5S_UNLIMITED) || max==NULL) && dims[u]==0)
+                HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid dimension size");
+        }
+    }
+    if (max!=NULL) {
+        if(dims==NULL)
+            HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "maximum dimension specified, but no current dimensions specified");
+        for (u=0; u<rank; u++) {
+            if (max[u]!=H5S_UNLIMITED && max[u]<dims[u])
+                HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid maximum dimension size");
+        }
+    }
+
+    /* Do it */
+    if (H5S_set_extent_simple(space, (unsigned)rank, dims, max)<0)
+	HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to set simple extent");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_set_extent_simple
+ *
+ * Purpose:	This is where the real work happens for
+ *		H5Sset_extent_simple().
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke (copied from H5Sset_extent_simple)
+ *              Wednesday, July  8, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_set_extent_simple (H5S_t *space, unsigned rank, const hsize_t *dims,
+		       const hsize_t *max)
+{
+    unsigned u;                 /* Local index variable */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_set_extent_simple, FAIL);
+
+    /* Check args */
+    assert(rank<=H5S_MAX_RANK);
+    assert(0==rank || dims);
+
+    /* shift out of the previous state to a "simple" dataspace.  */
+    if(H5S_extent_release(&space->extent)<0)
+        HGOTO_ERROR (H5E_RESOURCE, H5E_CANTFREE, FAIL, "failed to release previous dataspace extent");
+
+    if (rank == 0) {		/* scalar variable */
+        space->extent.type = H5S_SCALAR;
+        space->extent.nelem = 1;
+        space->extent.rank = 0;	/* set to scalar rank */
+    } else {
+        hsize_t nelem;  /* Number of elements in extent */
+
+        space->extent.type = H5S_SIMPLE;
+
+        /* Set the rank and allocate space for the dims */
+        space->extent.rank = rank;
+        space->extent.size = H5FL_ARR_MALLOC(hsize_t,rank);
+
+        /* Copy the dimensions & compute the number of elements in the extent */
+        for(u=0, nelem=1; u<space->extent.rank; u++) {
+            space->extent.size[u]=dims[u];
+            nelem*=dims[u];
+        } /* end for */
+        space->extent.nelem = nelem;
+
+        /* Copy the maximum dimensions if specified */
+        if(max!=NULL) {
+            space->extent.max = H5FL_ARR_MALLOC(hsize_t,rank);
+            HDmemcpy(space->extent.max, max, sizeof(hsize_t) * rank);
+        } /* end if */
+        else {
+            space->extent.max = NULL;
+        }
+    }
+
+    /* Selection related cleanup */
+
+    /* Set offset to zeros */
+    for(u=0; u<space->extent.rank; u++)
+        space->select.offset[u]=0;
+
+    /* If the selection is 'all', update the number of elements selected */
+    if(H5S_GET_SELECT_TYPE(space)==H5S_SEL_ALL)
+        if(H5S_select_all(space, FALSE)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't change selection");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+#ifdef H5S_DEBUG
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_find
+ *
+ * Purpose:	Given two data spaces (MEM_SPACE and FILE_SPACE) this
+ *		function returns a pointer to the conversion path information,
+ *		creating a new conversion path entry if necessary.
+ *
+ * Return:	Success:	Ptr to a conversion path entry
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January 21, 1998
+ *
+ * Modifications:
+ *
+ * 	Quincey Koziol
+ *	Instead of returning a point into the data space conversion table we
+ *	copy all the information into a user-supplied CONV buffer and return
+ *	non-negative on success or negative on failure.
+ *
+ * 	Robb Matzke, 11 Aug 1998
+ *	Returns a pointer into the conversion path table.  A path entry
+ *	contains pointers to the memory and file half of the conversion (the
+ *	pointers registered in the H5S_fconv_g[] and H5S_mconv_g[] tables)
+ *	along with other data whose scope is the conversion path (like path
+ *	statistics).
+ *
+ *	John Mainzer, 8/30/04
+ *	Modified code to check with all other processes that have the
+ *	file open before OKing collective I/O.
+ *
+ *-------------------------------------------------------------------------
+ */
+H5S_iostats_t *
+H5S_find (const H5S_t *mem_space, const H5S_t *file_space)
+{
+    H5S_iostats_t	*path=NULL;  /* Space conversion path */
+    size_t	u;      /* Index variable */
+    H5S_iostats_t *ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_find, NULL);
+
+    /* Check args */
+    assert (mem_space && (H5S_SIMPLE==H5S_GET_EXTENT_TYPE(mem_space) ||
+			  H5S_SCALAR==H5S_GET_EXTENT_TYPE(mem_space)));
+    assert (file_space && (H5S_SIMPLE==H5S_GET_EXTENT_TYPE(file_space) ||
+			   H5S_SCALAR==H5S_GET_EXTENT_TYPE(file_space)));
+
+    /*
+     * Is this path already present in the data space conversion path table?
+     * If so then return a pointer to that entry.
+     */
+    for (u=0; u<H5S_niostats_g; u++)
+        if (H5S_iostats_g[u]->ftype==H5S_GET_SELECT_TYPE(file_space) &&
+                H5S_iostats_g[u]->mtype==H5S_GET_SELECT_TYPE(mem_space))
+            HGOTO_DONE(H5S_iostats_g[u]);
+
+    /*
+     * The path wasn't found.  Create a new path.
+     */
+    if (NULL==(path = H5MM_calloc(sizeof(*path))))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for data space conversion path");
+
+    /* Initialize file & memory conversion functions */
+    path->ftype = H5S_GET_SELECT_TYPE(file_space);
+    path->mtype = H5S_GET_SELECT_TYPE(mem_space);
+
+    /*
+     * Add the new path to the table.
+     */
+    if (H5S_niostats_g>=H5S_aiostats_g) {
+        size_t n = MAX(10, 2*H5S_aiostats_g);
+        H5S_iostats_t **p = H5MM_realloc(H5S_iostats_g, n*sizeof(H5S_iostats_g[0]));
+
+        if (NULL==p)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for data space conversion path table");
+        H5S_aiostats_g = n;
+        H5S_iostats_g = p;
+    } /* end if */
+    H5S_iostats_g[H5S_niostats_g++] = path;
+
+    /* Set the return value */
+    ret_value=path;
+
+done:
+    if(ret_value==NULL) {
+        if(path!=NULL)
+            H5MM_xfree(path);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_find() */
+#endif /* H5S_DEBUG */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_extend
+ *
+ * Purpose:	Extend the dimensions of a data space.
+ *
+ * Return:	Success:	Number of dimensions whose size increased.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January 30, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5S_extend (H5S_t *space, const hsize_t *size)
+{
+    int	ret_value=0;
+    unsigned	u;
+
+    FUNC_ENTER_NOAPI(H5S_extend, FAIL);
+
+    /* Check args */
+    assert (space && H5S_SIMPLE==H5S_GET_EXTENT_TYPE(space));
+    assert (size);
+
+    /* Check through all the dimensions to see if modifying the dataspace is allowed */
+    for (u=0; u<space->extent.rank; u++) {
+        if (space->extent.size[u]<size[u]) {
+            if (space->extent.max &&
+                    H5S_UNLIMITED!=space->extent.max[u] &&
+                    space->extent.max[u]<size[u])
+                HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "dimension cannot be increased");
+            ret_value++;
+        }
+    }
+
+    /* Update */
+    if (ret_value) {
+        hsize_t nelem;  /* Number of elements in extent */
+
+        /* Change the dataspace size & re-compute the number of elements in the extent */
+        for (u=0, nelem=1; u<space->extent.rank; u++) {
+            if (space->extent.size[u]<size[u])
+                space->extent.size[u] = size[u];
+
+            nelem*=space->extent.size[u];
+        }
+        space->extent.nelem = nelem;
+
+        /* If the selection is 'all', update the number of elements selected */
+        if(H5S_GET_SELECT_TYPE(space)==H5S_SEL_ALL)
+            if(H5S_select_all(space, FALSE)<0)
+                HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't change selection");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Screate_simple
+ *
+ * Purpose:	Creates a new simple data space object and opens it for
+ *		access. The DIMS argument is the size of the simple dataset
+ *		and the MAXDIMS argument is the upper limit on the size of
+ *		the dataset.  MAXDIMS may be the null pointer in which case
+ *		the upper limit is the same as DIMS.  If an element of
+ *		MAXDIMS is H5S_UNLIMITED then the corresponding dimension is
+ *		unlimited, otherwise no element of MAXDIMS should be smaller
+ *		than the corresponding element of DIMS.
+ *
+ * Return:	Success:	The ID for the new simple data space object.
+ *
+ *		Failure:	Negative
+ *
+ * Errors:
+ *
+ * Programmer:	Quincey Koziol
+ *		Tuesday, January  27, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Screate_simple(int rank, const hsize_t dims[/*rank*/],
+		  const hsize_t maxdims[/*rank*/])
+{
+    hid_t	ret_value;
+    H5S_t	*space = NULL;
+    int		i;
+
+    FUNC_ENTER_API(H5Screate_simple, FAIL);
+    H5TRACE3("i","Is*[a0]h*[a0]h",rank,dims,maxdims);
+
+    /* Check arguments */
+    if (rank<0)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "dimensionality cannot be negative");
+    if (rank>H5S_MAX_RANK)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "dimensionality is too large");
+    if (!dims && dims!=0)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no dimensions specified");
+    /* Check whether the current dimensions are valid */
+    for (i=0; i<rank; i++) {
+        if (maxdims) {
+            if (H5S_UNLIMITED!=maxdims[i] && maxdims[i]<dims[i])
+                HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "maxdims is smaller than dims");
+            if (H5S_UNLIMITED!=maxdims[i] && dims[i]==0)
+                HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "zero sized dimension for non-unlimited dimension");
+        }
+        else {
+            if (dims[i]==0)
+                HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "zero sized dimension for non-unlimited dimension");
+        }
+    }
+
+    /* Create the space and set the extent */
+    if(NULL==(space=H5S_create_simple((unsigned)rank,dims,maxdims)))
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTCREATE, FAIL, "can't create simple dataspace");
+
+    /* Atomize */
+    if ((ret_value=H5I_register (H5I_DATASPACE, space))<0)
+        HGOTO_ERROR (H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register dataspace ID");
+
+done:
+    if (ret_value<0) {
+        if (space!=NULL)
+            H5S_close(space);
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_create_simple
+ *
+ * Purpose:	Internal function to create simple dataspace
+ *
+ * Return:	Success:	The ID for the new simple data space object.
+ *		Failure:	Negative
+ *
+ * Errors:
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, April  3, 2003
+ *
+ * Modifications:
+ *              Extracted from H5Screate_simple
+ *              Quincey Koziol, Thursday, April  3, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+H5S_t *
+H5S_create_simple(unsigned rank, const hsize_t dims[/*rank*/],
+		  const hsize_t maxdims[/*rank*/])
+{
+    H5S_t	*ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_create_simple, NULL);
+
+    /* Check arguments */
+    assert(rank <=H5S_MAX_RANK);
+
+    /* Create the space and set the extent */
+    if(NULL==(ret_value=H5S_create(H5S_SIMPLE)))
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTCREATE, NULL, "can't create simple dataspace");
+    if(H5S_set_extent_simple(ret_value,rank,dims,maxdims)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, NULL, "can't set dimensions");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_create_simple() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_raw_size
+ *
+ * Purpose:	Compute the 'raw' size of the extent, as stored on disk.
+ *
+ * Return:	Success:	non-zero
+ *		Failure:	zero
+ *
+ * Programmer:	Quincey Koziol
+ *              koziol at ncsa.uiuc.edu
+ *              October 14, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5S_raw_size(const H5F_t *f, const H5S_t *space)
+{
+    size_t      ret_value;
+
+    FUNC_ENTER_NOAPI(H5S_raw_size, 0);
+
+    /* Find out the size of buffer needed for extent */
+    ret_value=H5O_raw_size(H5O_SDSPACE_ID, f, &(space->extent));
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_raw_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_get_simple_extent_type
+ *
+ * Purpose:	Internal function for retrieving the type of extent for a dataspace object
+ *
+ * Return:	Success:	The class of the dataspace object
+ *
+ *		Failure:	N5S_NO_CLASS
+ *
+ * Errors:
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, September 28, 2000
+ *
+ * Note:        This routine participates in the "Inlining C function pointers"
+ *              pattern, don't call it directly, use the appropriate macro
+ *              defined in H5Sprivate.h.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5S_class_t
+H5S_get_simple_extent_type(const H5S_t *space)
+{
+    H5S_class_t	ret_value;
+
+    FUNC_ENTER_NOAPI(H5S_get_simple_extent_type, H5S_NO_CLASS);
+
+    assert(space);
+
+    ret_value=H5S_GET_EXTENT_TYPE(space);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Sget_simple_extent_type
+ *
+ * Purpose:	Retrieves the type of extent for a dataspace object
+ *
+ * Return:	Success:	The class of the dataspace object
+ *
+ *		Failure:	N5S_NO_CLASS
+ *
+ * Errors:
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, July 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5S_class_t
+H5Sget_simple_extent_type(hid_t sid)
+{
+    H5S_class_t	ret_value;
+    H5S_t	*space;
+
+    FUNC_ENTER_API(H5Sget_simple_extent_type, H5S_NO_CLASS);
+    H5TRACE1("Sc","i",sid);
+
+    /* Check arguments */
+    if (NULL == (space = H5I_object_verify(sid, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5S_NO_CLASS, "not a dataspace");
+
+    ret_value=H5S_GET_EXTENT_TYPE(space);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sset_extent_none
+ PURPOSE
+    Resets the extent of a dataspace back to "none"
+ USAGE
+    herr_t H5Sset_extent_none(space_id)
+        hid_t space_id;	      IN: Dataspace object to reset
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+	This function resets the type of a dataspace back to "none" with no
+    extent information stored for the dataspace.
+--------------------------------------------------------------------------*/
+herr_t
+H5Sset_extent_none(hid_t space_id)
+{
+    H5S_t		   *space = NULL;	/* dataspace to modify */
+    herr_t                  ret_value=SUCCEED;  /* Return value */
+
+    FUNC_ENTER_API(H5Sset_extent_none, FAIL);
+    H5TRACE1("e","i",space_id);
+
+    /* Check args */
+    if (NULL == (space = H5I_object_verify(space_id, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "not a data space");
+
+    /* Clear the previous extent from the dataspace */
+    if(H5S_extent_release(&space->extent)<0)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_CANTDELETE, FAIL, "can't release previous dataspace");
+
+    space->extent.type=H5S_NO_CLASS;
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* end H5Sset_extent_none() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Soffset_simple
+ PURPOSE
+    Changes the offset of a selection within a simple dataspace extent
+ USAGE
+    herr_t H5Soffset_simple(space_id, offset)
+        hid_t space_id;	        IN: Dataspace object to reset
+        const hssize_t *offset; IN: Offset to position the selection at
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+	This function creates an offset for the selection within an extent, allowing
+    the same shaped selection to be moved to different locations within a
+    dataspace without requiring it to be re-defined.
+--------------------------------------------------------------------------*/
+herr_t
+H5Soffset_simple(hid_t space_id, const hssize_t *offset)
+{
+    H5S_t		   *space = NULL;	/* dataspace to modify */
+    herr_t                  ret_value=SUCCEED;  /* Return value */
+
+    FUNC_ENTER_API(H5Soffset_simple, FAIL);
+    H5TRACE2("e","i*Hs",space_id,offset);
+
+    /* Check args */
+    if (NULL == (space = H5I_object_verify(space_id, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "not a data space");
+    if (space->extent.rank==0 || H5S_GET_EXTENT_TYPE(space)==H5S_SCALAR)
+        HGOTO_ERROR(H5E_ATOM, H5E_UNSUPPORTED, FAIL, "can't set offset on scalar dataspace");
+    if (offset == NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no offset specified");
+
+    /* Set the selection offset */
+    if(H5S_select_offset(space,offset)<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, "can't set offset");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* end H5Soffset_simple() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5S_set_extent
+ *
+ * Purpose: Modify the dimensions of a data space. Based on H5S_extend
+ *
+ * Return: Success: Non-negative
+ *
+ * Failure: Negative
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 13, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5S_set_extent( H5S_t *space, const hsize_t *size )
+{
+    unsigned u;
+    herr_t ret_value=0;
+
+    FUNC_ENTER_NOAPI( H5S_set_extent, FAIL );
+
+    /* Check args */
+    assert( space && H5S_SIMPLE==H5S_GET_EXTENT_TYPE(space) );
+    assert( size);
+
+    /* Verify that the dimensions being changed are allowed to change */
+    for ( u = 0; u < space->extent.rank; u++ ) {
+        if ( space->extent.max && H5S_UNLIMITED != space->extent.max[u] &&
+                 space->extent.max[u]!=size[u] )
+             HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL,"dimension cannot be modified");
+        ret_value++;
+    } /* end for */
+
+    /* Update */
+    if (ret_value)
+        H5S_set_extent_real(space,size);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5S_has_extent
+ *
+ * Purpose: Determines if a simple dataspace's extent has been set (e.g.,
+ *          by H5Sset_extent_simple() ).  Helps avoid write errors.
+ *
+ * Return: TRUE if dataspace has extent set
+ *         FALSE if dataspace's extent is uninitialized
+ *
+ * Programmer: James Laird
+ *
+ * Date: July 23, 2004
+ *
+ *-------------------------------------------------------------------------
+ */
+hbool_t
+H5S_has_extent(const H5S_t *ds)
+{
+    htri_t ret_value;
+    FUNC_ENTER_NOAPI(H5S_has_extent, FAIL)
+
+    assert(ds);
+
+    if(ds->extent.rank==0 && ds->extent.nelem == 0)
+        ret_value = FALSE;
+    else
+        ret_value = TRUE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5S_set_extent_real
+ *
+ * Purpose: Modify the dimensions of a data space. Based on H5S_extend
+ *
+ * Return: Success: Non-negative
+ *
+ * Failure: Negative
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 13, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_set_extent_real( H5S_t *space, const hsize_t *size )
+{
+    hsize_t nelem;      /* Number of elements in extent */
+    unsigned u;         /* Local index variable */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_set_extent_real, FAIL );
+
+    /* Check args */
+    assert(space && H5S_SIMPLE==H5S_GET_EXTENT_TYPE(space));
+    assert(size);
+
+    /* Change the dataspace size & re-compute the number of elements in the extent */
+    for (u=0, nelem=1; u < space->extent.rank; u++ ) {
+        space->extent.size[u] = size[u];
+        nelem*=space->extent.size[u];
+    } /* end for */
+    space->extent.nelem = nelem;
+
+    /* If the selection is 'all', update the number of elements selected */
+    if(H5S_GET_SELECT_TYPE(space)==H5S_SEL_ALL)
+        if(H5S_select_all(space, FALSE)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't change selection");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_set_extent_real() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_debug
+ *
+ * Purpose:	Prints debugging information about a data space.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, July 21, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE *stream, int indent, int fwidth)
+{
+    const H5S_t	*mesg = (const H5S_t*)_mesg;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_debug, FAIL);
+
+    switch (H5S_GET_EXTENT_TYPE(mesg)) {
+        case H5S_SCALAR:
+            fprintf(stream, "%*s%-*s H5S_SCALAR\n", indent, "", fwidth,
+                    "Space class:");
+            break;
+
+        case H5S_SIMPLE:
+            fprintf(stream, "%*s%-*s H5S_SIMPLE\n", indent, "", fwidth,
+                    "Space class:");
+            H5O_debug_id(H5O_SDSPACE_ID, f, dxpl_id, &(mesg->extent), stream,
+                                 indent+3, MAX(0, fwidth-3));
+            break;
+
+        default:
+            fprintf(stream, "%*s%-*s **UNKNOWN-%ld**\n", indent, "", fwidth,
+                    "Space class:", (long)(H5S_GET_EXTENT_TYPE(mesg)));
+            break;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5SL.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5SL.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5SL.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1439 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Purpose:	Provides a skip list abstract data type.
+ *
+ *              (See "Skip Lists: A Probabilistic Alternative to Balanced Trees"
+ *               by William Pugh for additional information)
+ *
+ *              (This implementation has the optimization for reducing key
+ *               key comparisons mentioned in section 3.5 of "A Skip List
+ *               Cookbook" by William Pugh)
+ *
+ *              (Also, this implementation has a couple of home-grown
+ *               optimizations, including setting the "update" vector to the
+ *               actual 'forward' pointer to update, instead of the node
+ *               containing the forward pointer -QAK)
+ *
+ *              (Note: This implementation does not have the information for
+ *               implementing the "Linear List Operations" (like insert/delete/
+ *               search by position) in section 3.4 of "A Skip List Cookbook",
+ *               but they shouldn't be that hard to add, if necessary)
+ *
+ *              (This implementation has an additional backward pointer, which
+ *               allows the list to be iterated in reverse)
+ *
+ *              (We should also look into "Deterministic Skip Lists" (see
+ *              paper by Munro, Papadakis & Sedgewick))
+ *
+ *              (There's also an article on "Alternating Skip Lists", which
+ *              are similar to deterministic skip lists, in the August 2000
+ *              issue of Dr. Dobb's Journal)
+ *
+ */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5SL_init_interface
+
+
+/* Private headers needed */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5SLprivate.h"	/* Skip list routines			*/
+
+/* Local Macros */
+
+/* Define the code template for insertions for the "OP" in the H5SL_LOCATE macro */
+#define H5SL_LOCATE_INSERT_FOUND(SLIST,X,UPDATE,I,ITEM)                   \
+        HGOTO_ERROR(H5E_SLIST,H5E_CANTINSERT,NULL,"can't insert duplicate key");
+
+/* Define the code template for removals for the "OP" in the H5SL_LOCATE macro */
+#define H5SL_LOCATE_REMOVE_FOUND(SLIST,X,UPDATE,I,ITEM)                   \
+        void *tmp;                                                      \
+                                                                        \
+        for(I=0; I<=(int)SLIST->curr_level; I++) {                      \
+            if(*UPDATE[I]!=X)                                           \
+                break;                                                  \
+            *UPDATE[I]=X->forward[I];                                   \
+        } /* end for */                                                 \
+        if(SLIST->last==X)                                              \
+            SLIST->last=X->backward;                                    \
+        else                                                            \
+            X->forward[0]->backward=X->backward;                        \
+        tmp=X->item;                                                    \
+        H5FL_ARR_FREE(H5SL_node_ptr_t,X);                               \
+        while(SLIST->curr_level>0 && SLIST->header->forward[SLIST->curr_level]==NULL) \
+            SLIST->curr_level--;                                        \
+        SLIST->nobjs--;                                                 \
+        HGOTO_DONE(tmp);
+
+/* Define the code template for searches for the "OP" in the H5SL_LOCATE macro */
+#define H5SL_LOCATE_SEARCH_FOUND(SLIST,X,UPDATE,I,ITEM)                 \
+        HGOTO_DONE(X->item);
+
+/* Define the code template for finds for the "OP" in the H5SL_LOCATE macro */
+#define H5SL_LOCATE_FIND_FOUND(SLIST,X,UPDATE,I,ITEM)                   \
+        HGOTO_DONE(X);
+
+/* Define a code template for updating the "update" vector for the "DOUPDATE" in the H5SL_LOCATE macro */
+#define H5SL_LOCATE_YES_UPDATE(X,UPDATE,I)                              \
+        UPDATE[I]=&X->forward[I];
+
+/* Define a code template for _NOT_ updating the "update" vector for the "DOUPDATE" in the H5SL_LOCATE macro */
+#define H5SL_LOCATE_NO_UPDATE(X,UPDATE,I)
+
+/* Define a code template for comparing scalar keys for the "CMP" in the H5SL_LOCATE macro */
+#define H5SL_LOCATE_SCALAR_CMP(TYPE,PKEY1,PKEY2)                        \
+        (*(TYPE *)PKEY1<*(TYPE *)PKEY2)
+
+/* Define a code template for comparing string keys for the "CMP" in the H5SL_LOCATE macro */
+#define H5SL_LOCATE_STRING_CMP(TYPE,PKEY1,PKEY2)                        \
+        (HDstrcmp(PKEY1,PKEY2)<0)
+
+/* Define a code template for comparing scalar keys for the "EQ" in the H5SL_LOCATE macro */
+#define H5SL_LOCATE_SCALAR_EQ(TYPE,PKEY1,PKEY2)                         \
+        (*(TYPE *)PKEY1==*(TYPE *)PKEY2)
+
+/* Define a code template for comparing string keys for the "EQ" in the H5SL_LOCATE macro */
+#define H5SL_LOCATE_STRING_EQ(TYPE,PKEY1,PKEY2)                         \
+        (HDstrcmp(PKEY1,PKEY2)==0)
+
+/* Macro used to find node for operation */
+#define H5SL_LOCATE(OP,DOUPDATE,CMP,SLIST,X,UPDATE,I,TYPE,ITEM,KEY,CHECKED) \
+    CHECKED=NULL;                                                       \
+    for(I=(int)SLIST->curr_level; I>=0; I--) {                          \
+        if(X->forward[I]!=CHECKED) {                                    \
+            while(X->forward[I] && H5_GLUE3(H5SL_LOCATE_,CMP,_CMP)(TYPE,X->forward[I]->key,KEY) ) \
+                X=X->forward[I];                                        \
+            CHECKED=X->forward[I];                                      \
+        } /* end if */                                                  \
+        H5_GLUE3(H5SL_LOCATE_,DOUPDATE,_UPDATE)(X,UPDATE,I)             \
+    } /* end for */                                                     \
+    X=X->forward[0];                                                    \
+    if(X!=NULL && H5_GLUE3(H5SL_LOCATE_,CMP,_EQ)(TYPE,X->key,KEY) ) {   \
+        /* What to do when a node is found */				\
+        H5_GLUE3(H5SL_LOCATE_,OP,_FOUND)(SLIST,X,UPDATE,I,ITEM)         \
+    } /* end if */
+
+/* Macro used to insert node */
+#define H5SL_INSERT(CMP,SLIST,X,UPDATE,I,TYPE,ITEM,KEY,CHECKED)         \
+    H5SL_LOCATE(INSERT,YES,CMP,SLIST,X,UPDATE,I,TYPE,ITEM,KEY,CHECKED)
+
+/* Macro used to remove node */
+#define H5SL_REMOVE(CMP,SLIST,X,UPDATE,I,TYPE,ITEM,KEY,CHECKED)         \
+    H5SL_LOCATE(REMOVE,YES,CMP,SLIST,X,UPDATE,I,TYPE,ITEM,KEY,CHECKED)
+
+/* Macro used to search for node */
+#define H5SL_SEARCH(CMP,SLIST,X,UPDATE,I,TYPE,ITEM,KEY,CHECKED)         \
+    H5SL_LOCATE(SEARCH,NO,CMP,SLIST,X,UPDATE,I,TYPE,ITEM,KEY,CHECKED)
+
+/* Macro used to find a node */
+#define H5SL_FIND(CMP,SLIST,X,UPDATE,I,TYPE,ITEM,KEY,CHECKED)           \
+    H5SL_LOCATE(FIND,NO,CMP,SLIST,X,UPDATE,I,TYPE,ITEM,KEY,CHECKED)
+
+
+/* Private typedefs & structs */
+
+/* Skip list node data structure */
+struct H5SL_node_t {
+    const void *key;                    /* Pointer to node's key */
+    void *item;                         /* Pointer to node's item */
+    size_t level;                       /* The level of this node */
+    struct H5SL_node_t **forward;       /* Array of forward pointers from this node */
+    struct H5SL_node_t *backward;       /* Backward pointer from this node */
+};
+
+/* Main skip list data structure */
+struct H5SL_t {
+    /* Static values for each list */
+    H5SL_type_t type;   /* Type of skip list */
+    double p;           /* Probability of using a higher level [0..1) */
+    int p1;             /* Probability converted into appropriate value for random # generator on this machine */
+    size_t max_level;   /* Maximum number of levels */
+
+    /* Dynamic values for each list */
+    int curr_level;             /* Current top level used in list */
+    size_t nobjs;               /* Number of active objects in skip list */
+    H5SL_node_t *header;        /* Header for nodes in skip list */
+    H5SL_node_t *last;          /* Pointer to last node in skip list */
+};
+
+/* Static functions */
+static size_t H5SL_random_level(int p1, size_t max_level);
+static H5SL_node_t * H5SL_new_node(size_t lvl, void *item, const void *key);
+static H5SL_node_t *H5SL_insert_common(H5SL_t *slist, void *item, const void *key);
+static herr_t H5SL_release_common(H5SL_t *slist, H5SL_operator_t op, void *op_data);
+static herr_t H5SL_close_common(H5SL_t *slist, H5SL_operator_t op, void *op_data);
+
+/* Declare a free list to manage the H5SL_t struct */
+H5FL_DEFINE_STATIC(H5SL_t);
+
+/* Declare a "base + array" list to manage the H5SL_node_t struct */
+typedef H5SL_node_t *H5SL_node_ptr_t;
+H5FL_BARR_DEFINE_STATIC(H5SL_node_t,H5SL_node_ptr_t,H5SL_LEVEL_MAX);
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_init_interface
+ PURPOSE
+    Initialize interface-specific information
+ USAGE
+    herr_t H5SL_init_interface()
+
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Initializes any interface-specific data or routines.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5SL_init_interface(void)
+{
+    time_t curr_time;   /* Current time, for seeding random number generator */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_init_interface)
+
+    /* Create randomized set of numbers */
+    curr_time=HDtime(NULL);
+    HDsrand((unsigned)curr_time);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5SL_init_interface() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_random_level
+ PURPOSE
+    Generate a random level
+ USAGE
+    size_t H5SL_random_level(p,max_level)
+        int p1;                 IN: probability distribution
+        size_t max_level;       IN: Maximum level for node height
+
+ RETURNS
+    Returns non-negative level value
+ DESCRIPTION
+    Count elements in a skip list.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    Do we really need a 'random' value, or is a series of nodes with the
+    correct heights "good enough".  We could track the state of the nodes
+    allocated for this list and issue node heights appropriately (i.e. 1,2,
+    1,4,1,2,1,8,...) (or would that be 1,1,2,1,1,2,4,... ?)
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static size_t
+H5SL_random_level(int p1, size_t max_level)
+{
+    size_t lvl;         /* Level generated */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_random_level);
+
+    /* Account for starting at zero offset */
+    max_level--;
+
+    lvl=0;
+    while(HDrand()<p1 && lvl < max_level)
+        lvl++;
+
+    FUNC_LEAVE_NOAPI(lvl);
+} /* end H5SL_random_level() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_new_node
+ PURPOSE
+    Create a new skip list node
+ USAGE
+    H5SL_node_t *H5SL_new_node(lvl,item,key)
+        size_t lvl;             IN: Level for node height
+        void *item;             IN: Pointer to item info for node
+        void *key;              IN: Pointer to key info for node
+
+ RETURNS
+    Returns a pointer to a skip list node on success, NULL on failure.
+ DESCRIPTION
+    Create a new skip list node of the specified height, setting the item
+    and key values internally.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine does _not_ initialize the 'forward' pointers
+
+    We should set up a custom free-list for allocating & freeing these sort
+    of nodes.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5SL_node_t *
+H5SL_new_node(size_t lvl, void *item, const void *key)
+{
+    H5SL_node_t *ret_value;      /* New skip list node */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5SL_new_node);
+
+    /* Allocate the node */
+    if((ret_value=H5FL_ARR_MALLOC(H5SL_node_ptr_t,(lvl+1)))==NULL)
+        HGOTO_ERROR(H5E_SLIST,H5E_NOSPACE,NULL,"memory allocation failed");
+
+    /* Initialize node */
+    ret_value->key=key;
+    ret_value->item=item;
+    ret_value->level=lvl;
+    ret_value->forward=(H5SL_node_t **)((unsigned char *)ret_value+sizeof(H5SL_node_t));
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5SL_new_node() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_insert_common
+ PURPOSE
+    Common code for inserting an object into a skip list
+ USAGE
+    H5SL_node_t *H5SL_insert_common(slist,item,key)
+        H5SL_t *slist;          IN/OUT: Pointer to skip list
+        void *item;             IN: Item to insert
+        void *key;              IN: Key for item to insert
+
+ RETURNS
+    Returns pointer to new node on success, NULL on failure.
+ DESCRIPTION
+    Common code for inserting an element into a skip list.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    Inserting an item with the same key as an existing object fails.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5SL_node_t *
+H5SL_insert_common(H5SL_t *slist, void *item, const void *key)
+{
+    H5SL_node_t **update[H5SL_LEVEL_MAX];       /* 'update' vector */
+    H5SL_node_t *checked;                       /* Pointer to last node checked */
+    H5SL_node_t *x;                             /* Current node to examine */
+    size_t lvl;                                 /* Level of new node */
+    int i;                                      /* Local index value */
+    H5SL_node_t *ret_value;                     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5SL_insert_common);
+
+    /* Check args */
+    assert(slist);
+    assert(key);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Insert item into skip list */
+
+    /* Work through the forward pointers for a node, finding the node at each
+     * level that is before the location to insert
+     */
+    x=slist->header;
+    switch(slist->type) {
+        case H5SL_TYPE_INT:
+            H5SL_INSERT(SCALAR,slist,x,update,i,const int,item,key,checked)
+            break;
+
+        case H5SL_TYPE_HADDR:
+            H5SL_INSERT(SCALAR,slist,x,update,i,const haddr_t,item,key,checked)
+            break;
+
+        case H5SL_TYPE_STR:
+            H5SL_INSERT(STRING,slist,x,update,i,char *,item,key,checked)
+            break;
+
+        case H5SL_TYPE_HSIZE:
+            H5SL_INSERT(SCALAR,slist,x,update,i,const hsize_t,item,key,checked)
+            break;
+
+        case H5SL_TYPE_UNSIGNED:
+            H5SL_INSERT(SCALAR,slist,x,update,i,const unsigned,item,key,checked)
+            break;
+    } /* end switch */
+
+    /* 'key' must not have been found in existing list, if we get here */
+
+    /* Generate level for new node */
+    lvl=H5SL_random_level(slist->p1,slist->max_level);
+    if((int)lvl>slist->curr_level) {
+        /* Cap the increase in the current level to just one greater */
+        lvl=slist->curr_level+1;
+
+        /* Set the update pointer correctly */
+        update[lvl]=&slist->header->forward[lvl];
+
+        /* Increase the maximum level of the list */
+        slist->curr_level=(int)lvl;
+    } /* end if */
+
+    /* Create new node of proper level */
+    if((x=H5SL_new_node(lvl,item,key))==NULL)
+        HGOTO_ERROR(H5E_SLIST,H5E_NOSPACE,NULL,"can't create new skip list node");
+
+    /* Update the backward links */
+    if(*update[0]!=NULL) {
+        x->backward=(*update[0])->backward;
+        (*update[0])->backward=x;
+    } /* end if */
+    else {
+        HDassert(slist->last);
+        x->backward=slist->last;
+        slist->last=x;
+    } /* end else */
+
+    /* Link the new node into the existing forward pointers */
+    for(i=0; i<=(int)lvl; i++) {
+        x->forward[i]=*update[i];
+        *update[i]=x;
+    } /* end for */
+
+    /* Increment the number of nodes in the skip list */
+    slist->nobjs++;
+
+    /* Set return value */
+    ret_value=x;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5SL_insert_common() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_release_common
+ PURPOSE
+    Release all nodes from a skip list, optionally calling a 'free' operator
+ USAGE
+    herr_t H5SL_release_common(slist)
+        H5SL_t *slist;            IN/OUT: Pointer to skip list to release nodes
+        H5SL_operator_t op;     IN: Callback function to free item & key
+        void *op_data;          IN/OUT: Pointer to application data for callback
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Release all the nodes in a skip list.  The 'op' routine is called for
+    each node in the list.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    The return value from the 'op' routine is ignored.
+
+    The skip list itself is still valid, it just has all its nodes removed.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5SL_release_common(H5SL_t *slist, H5SL_operator_t op, void *op_data)
+{
+    H5SL_node_t *node, *next_node;      /* Pointers to skip list nodes */
+    size_t u;                   /* Local index variable */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_release_common);
+
+    /* Check args */
+    assert(slist);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Free skip list nodes */
+    node=slist->header->forward[0];
+    while(node!=NULL) {
+        next_node=node->forward[0];
+
+        /* Call callback, if one is given */
+        if(op!=NULL)
+            (void)(op)(node->item,(void *)node->key,op_data);
+
+        H5FL_ARR_FREE(H5SL_node_ptr_t,node);
+        node=next_node;
+    } /* end while */
+
+    /* Reset the header pointers */
+    for(u=0; u<slist->max_level; u++)
+        slist->header->forward[u]=NULL;
+
+    /* Reset the last pointer */
+    slist->last=slist->header;
+
+    /* Reset the dynamic internal fields */
+    slist->curr_level=-1;
+    slist->nobjs=0;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5SL_release_common() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_close_common
+ PURPOSE
+    Close a skip list, deallocating it and potentially freeing all its nodes.
+ USAGE
+    herr_t H5SL_close_common(slist,op,opdata)
+        H5SL_t *slist;          IN/OUT: Pointer to skip list to close
+        H5SL_operator_t op;     IN: Callback function to free item & key
+        void *op_data;          IN/OUT: Pointer to application data for callback
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Close a skip list, freeing all internal information.  Any objects left in
+    the skip list have the 'op' routine called for each.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    If the 'op' routine returns non-zero, only the nodes up to that
+    point in the list are released and the list is still valid.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5SL_close_common(H5SL_t *slist, H5SL_operator_t op, void *op_data)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_close_common);
+
+    /* Check args */
+    assert(slist);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Free skip list nodes */
+    (void)H5SL_release_common(slist,op,op_data);      /* always succeeds */
+
+    /* Release header node */
+    H5FL_ARR_FREE(H5SL_node_ptr_t,slist->header);
+
+    /* Free skip list object */
+    H5FL_FREE(H5SL_t,slist);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5SL_close_common() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_create
+ PURPOSE
+    Create a skip list
+ USAGE
+    H5SL_t *H5SL_create(void)
+
+ RETURNS
+    Returns a pointer to a skip list on success, NULL on failure.
+ DESCRIPTION
+    Create a skip list.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5SL_t *
+H5SL_create(H5SL_type_t type, double p, size_t max_level)
+{
+    H5SL_t *new_slist=NULL;     /* Pointer to new skip list object created */
+    H5SL_node_t *header;        /* Pointer to skip list header node */
+    size_t u;                   /* Local index variable */
+    H5SL_t *ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI(H5SL_create,NULL);
+
+    /* Check args */
+    HDassert(p>0.0 && p<1.0);
+    HDassert(max_level>0 && max_level<=H5SL_LEVEL_MAX);
+    HDassert(type>=H5SL_TYPE_INT && type<=H5SL_TYPE_UNSIGNED);
+
+    /* Allocate skip list structure */
+    if((new_slist=H5FL_MALLOC(H5SL_t))==NULL)
+        HGOTO_ERROR(H5E_SLIST,H5E_NOSPACE,NULL,"memory allocation failed");
+
+    /* Set the static internal fields */
+    new_slist->type=type;
+    new_slist->p=p;
+    new_slist->p1=(int)(p*RAND_MAX);
+    new_slist->max_level=max_level;
+
+    /* Set the dynamic internal fields */
+    new_slist->curr_level=-1;
+    new_slist->nobjs=0;
+
+    /* Allocate the header node */
+    if((header=H5SL_new_node(max_level-1,NULL,NULL))==NULL)
+        HGOTO_ERROR(H5E_SLIST,H5E_NOSPACE,NULL,"memory allocation failed");
+
+    /* Initialize header node's forward pointers */
+    for(u=0; u<max_level; u++)
+        header->forward[u]=NULL;
+
+    /* Initialize header node's backward pointer */
+    header->backward=NULL;
+
+    /* Attach the header */
+    new_slist->header=header;
+    new_slist->last=header;
+
+    /* Set the return value */
+    ret_value=new_slist;
+
+done:
+    /* Error cleanup */
+    if(ret_value==NULL) {
+        if(new_slist!=NULL) {
+            H5FL_FREE(H5SL_t,new_slist);
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5SL_create() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_count
+ PURPOSE
+    Count the number of objects in a skip list
+ USAGE
+    size_t H5SL_count(slist)
+        H5SL_t *slist;            IN: Pointer to skip list to count
+
+ RETURNS
+    Returns number of objects on success, can't fail
+ DESCRIPTION
+    Count elements in a skip list.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+size_t
+H5SL_count(H5SL_t *slist)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_count);
+
+    /* Check args */
+    assert(slist);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    FUNC_LEAVE_NOAPI(slist->nobjs);
+} /* end H5SL_count() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_insert
+ PURPOSE
+    Insert an object into a skip list
+ USAGE
+    herr_t H5SL_insert(slist,item,key)
+        H5SL_t *slist;          IN/OUT: Pointer to skip list
+        void *item;             IN: Item to insert
+        void *key;              IN: Key for item to insert
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Insert element into a skip list.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    Inserting an item with the same key as an existing object fails.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5SL_insert(H5SL_t *slist, void *item, const void *key)
+{
+    herr_t ret_value=SUCCEED;                   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5SL_insert);
+
+    /* Check args */
+    assert(slist);
+    assert(key);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Insert item into skip list */
+    if(H5SL_insert_common(slist,item,key)==NULL)
+        HGOTO_ERROR(H5E_SLIST,H5E_CANTINSERT,FAIL,"can't create new skip list node")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5SL_insert() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_add
+ PURPOSE
+    Insert an object into a skip list
+ USAGE
+    H5SL_node_t *H5SL_add(slist,item,key)
+        H5SL_t *slist;          IN/OUT: Pointer to skip list
+        void *item;             IN: Item to insert
+        void *key;              IN: Key for item to insert
+
+ RETURNS
+    Returns pointer to new skip list node on success, NULL on failure.
+ DESCRIPTION
+    Insert element into a skip list and return the skip list node for the
+    new element in the list.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    Inserting an item with the same key as an existing object fails.
+
+    This routine is a useful starting point for next/prev calls
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5SL_node_t *
+H5SL_add(H5SL_t *slist, void *item, const void *key)
+{
+    H5SL_node_t *ret_value;                   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5SL_add);
+
+    /* Check args */
+    assert(slist);
+    assert(key);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Insert item into skip list */
+    if((ret_value=H5SL_insert_common(slist,item,key))==NULL)
+        HGOTO_ERROR(H5E_SLIST,H5E_CANTINSERT,NULL,"can't create new skip list node")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5SL_add() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_remove
+ PURPOSE
+    Removes an object from a skip list
+ USAGE
+    void *H5SL_remove(slist,key)
+        H5SL_t *slist;          IN/OUT: Pointer to skip list
+        void *key;              IN: Key for item to remove
+
+ RETURNS
+    Returns pointer to item removed on success, NULL on failure.
+ DESCRIPTION
+    Remove element from a skip list.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+void *
+H5SL_remove(H5SL_t *slist, const void *key)
+{
+    H5SL_node_t **update[H5SL_LEVEL_MAX];       /* 'update' vector */
+    H5SL_node_t *checked;                       /* Pointer to last node checked */
+    H5SL_node_t *x;                             /* Current node to examine */
+    int i;                                      /* Local index value */
+    void *ret_value=NULL;                       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_remove);
+
+    /* Check args */
+    assert(slist);
+    assert(key);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Remove item from skip list */
+
+    /* Work through the forward pointers for a node, finding the node at each
+     * level that is before the location to remove
+     */
+    x=slist->header;
+    switch(slist->type) {
+        case H5SL_TYPE_INT:
+            H5SL_REMOVE(SCALAR,slist,x,update,i,const int,-,key,checked)
+            break;
+
+        case H5SL_TYPE_HADDR:
+            H5SL_REMOVE(SCALAR,slist,x,update,i,const haddr_t,-,key,checked)
+            break;
+
+        case H5SL_TYPE_STR:
+            H5SL_REMOVE(STRING,slist,x,update,i,char *,-,key,checked)
+            break;
+
+        case H5SL_TYPE_HSIZE:
+            H5SL_REMOVE(SCALAR,slist,x,update,i,const hsize_t,-,key,checked)
+            break;
+
+        case H5SL_TYPE_UNSIGNED:
+            H5SL_REMOVE(SCALAR,slist,x,update,i,const unsigned,-,key,checked)
+            break;
+    } /* end switch */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5SL_remove() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_search
+ PURPOSE
+    Search for object in a skip list
+ USAGE
+    void *H5SL_search(slist,key)
+        H5SL_t *slist;          IN/OUT: Pointer to skip list
+        void *key;              IN: Key for item to search for
+
+ RETURNS
+    Returns pointer to item on success, NULL on failure
+ DESCRIPTION
+    Search for an object in a skip list, according to it's key
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+void *
+H5SL_search(H5SL_t *slist, const void *key)
+{
+    H5SL_node_t *checked;                       /* Pointer to last node checked */
+    H5SL_node_t *x;                             /* Current node to examine */
+    int i;                                      /* Local index value */
+    void *ret_value;                            /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_search);
+
+    /* Check args */
+    assert(slist);
+    assert(key);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Insert item into skip list */
+
+    /* Work through the forward pointers for a node, finding the node at each
+     * level that is before the location to insert
+     */
+    x=slist->header;
+    switch(slist->type) {
+        case H5SL_TYPE_INT:
+            H5SL_SEARCH(SCALAR,slist,x,-,i,const int,-,key,checked)
+            break;
+
+        case H5SL_TYPE_HADDR:
+            H5SL_SEARCH(SCALAR,slist,x,-,i,const haddr_t,-,key,checked)
+            break;
+
+        case H5SL_TYPE_STR:
+            H5SL_SEARCH(STRING,slist,x,-,i,char *,-,key,checked)
+            break;
+
+        case H5SL_TYPE_HSIZE:
+            H5SL_SEARCH(SCALAR,slist,x,-,i,const hsize_t,-,key,checked)
+            break;
+
+        case H5SL_TYPE_UNSIGNED:
+            H5SL_SEARCH(SCALAR,slist,x,-,i,const unsigned,-,key,checked)
+            break;
+    } /* end switch */
+
+    /* 'key' must not have been found in list, if we get here */
+    ret_value=NULL;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5SL_search() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_less
+ PURPOSE
+    Search for object in a skip list that is less than or equal to 'key'
+ USAGE
+    void *H5SL_less(slist,key)
+        H5SL_t *slist;          IN/OUT: Pointer to skip list
+        void *key;              IN: Key for item to search for
+
+ RETURNS
+    Returns pointer to item who key is less than or equal to 'key' on success,
+        NULL on failure
+ DESCRIPTION
+    Search for an object in a skip list, according to it's key, returning the
+    object itself (for an exact match), or the object with the next highest
+    key that is less than 'key'
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+void *
+H5SL_less(H5SL_t *slist, const void *key)
+{
+    H5SL_node_t *checked;                       /* Pointer to last node checked */
+    H5SL_node_t *x;                             /* Current node to examine */
+    int i;                                      /* Local index value */
+    void *ret_value;                            /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_less);
+
+    /* Check args */
+    assert(slist);
+    assert(key);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Insert item into skip list */
+
+    /* Work through the forward pointers for a node, finding the node at each
+     * level that is before the location to insert
+     */
+    x=slist->header;
+    switch(slist->type) {
+        case H5SL_TYPE_INT:
+            H5SL_SEARCH(SCALAR,slist,x,-,i,const int,-,key,checked)
+            break;
+
+        case H5SL_TYPE_HADDR:
+            H5SL_SEARCH(SCALAR,slist,x,-,i,const haddr_t,-,key,checked)
+            break;
+
+        case H5SL_TYPE_STR:
+            H5SL_SEARCH(STRING,slist,x,-,i,char *,-,key,checked)
+            break;
+
+        case H5SL_TYPE_HSIZE:
+            H5SL_SEARCH(SCALAR,slist,x,-,i,const hsize_t,-,key,checked)
+            break;
+
+        case H5SL_TYPE_UNSIGNED:
+            H5SL_SEARCH(SCALAR,slist,x,-,i,const unsigned,-,key,checked)
+            break;
+    } /* end switch */
+
+    /* An exact match for 'key' must not have been found in list, if we get here */
+    /* Check for a node with a key that is less than the given 'key' */
+    if(x==NULL) {
+        /* Check for walking off the list */
+        if(slist->last!=slist->header)
+            ret_value=slist->last->item;
+        else
+            ret_value=NULL;
+    } /* end if */
+    else {
+        if(x->backward!=slist->header)
+            ret_value=x->backward->item;
+        else
+            ret_value=NULL;
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5SL_less() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_find
+ PURPOSE
+    Search for _node_ in a skip list
+ USAGE
+    H5SL_node_t *H5SL_node(slist,key)
+        H5SL_t *slist;          IN/OUT: Pointer to skip list
+        void *key;              IN: Key for item to search for
+
+ RETURNS
+    Returns pointer to _node_ matching key on success, NULL on failure
+ DESCRIPTION
+    Search for an object in a skip list, according to it's key and returns
+    the node that the object is attached to
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine is a useful starting point for next/prev calls
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5SL_node_t *
+H5SL_find(H5SL_t *slist, const void *key)
+{
+    H5SL_node_t *checked;                       /* Pointer to last node checked */
+    H5SL_node_t *x;                             /* Current node to examine */
+    int i;                                      /* Local index value */
+    H5SL_node_t *ret_value;                     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_find);
+
+    /* Check args */
+    assert(slist);
+    assert(key);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Insert item into skip list */
+
+    /* Work through the forward pointers for a node, finding the node at each
+     * level that is before the location to insert
+     */
+    x=slist->header;
+    switch(slist->type) {
+        case H5SL_TYPE_INT:
+            H5SL_FIND(SCALAR,slist,x,-,i,const int,-,key,checked)
+            break;
+
+        case H5SL_TYPE_HADDR:
+            H5SL_FIND(SCALAR,slist,x,-,i,const haddr_t,-,key,checked)
+            break;
+
+        case H5SL_TYPE_STR:
+            H5SL_FIND(STRING,slist,x,-,i,char *,-,key,checked)
+            break;
+
+        case H5SL_TYPE_HSIZE:
+            H5SL_FIND(SCALAR,slist,x,-,i,const hsize_t,-,key,checked)
+            break;
+
+        case H5SL_TYPE_UNSIGNED:
+            H5SL_FIND(SCALAR,slist,x,-,i,const unsigned,-,key,checked)
+            break;
+    } /* end switch */
+
+    /* 'key' must not have been found in list, if we get here */
+    ret_value=NULL;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5SL_find() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_first
+ PURPOSE
+    Gets a pointer to the first node in a skip list
+ USAGE
+    H5SL_node_t *H5SL_first(slist)
+        H5SL_t *slist;          IN: Pointer to skip list
+
+ RETURNS
+    Returns pointer to first node in skip list on success, NULL on failure.
+ DESCRIPTION
+    Retrieves a pointer to the first node in a skip list, for iterating over
+    the list.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5SL_node_t *
+H5SL_first(H5SL_t *slist)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_first);
+
+    /* Check args */
+    assert(slist);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    FUNC_LEAVE_NOAPI(slist->header->forward[0]);
+} /* end H5SL_first() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_next
+ PURPOSE
+    Gets a pointer to the next node in a skip list
+ USAGE
+    H5SL_node_t *H5SL_next(slist_node)
+        H5SL_node_t *slist_node;          IN: Pointer to skip list node
+
+ RETURNS
+    Returns pointer to node after slist_node in skip list on success, NULL on failure.
+ DESCRIPTION
+    Retrieves a pointer to the next node in a skip list, for iterating over
+    the list.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5SL_node_t *
+H5SL_next(H5SL_node_t *slist_node)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_next);
+
+    /* Check args */
+    assert(slist_node);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    FUNC_LEAVE_NOAPI(slist_node->forward[0]);
+} /* end H5SL_next() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_prev
+ PURPOSE
+    Gets a pointer to the previos node in a skip list
+ USAGE
+    H5SL_node_t *H5SL_prev(slist_node)
+        H5SL_node_t *slist_node;          IN: Pointer to skip list node
+
+ RETURNS
+    Returns pointer to node before slist_node in skip list on success, NULL on failure.
+ DESCRIPTION
+    Retrieves a pointer to the previous node in a skip list, for iterating over
+    the list.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5SL_node_t *
+H5SL_prev(H5SL_node_t *slist_node)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_prev);
+
+    /* Check args */
+    assert(slist_node);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Walk backward, detecting the header node (which has it's key set to NULL) */
+    FUNC_LEAVE_NOAPI(slist_node->backward->key==NULL ? NULL : slist_node->backward);
+} /* end H5SL_prev() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_last
+ PURPOSE
+    Gets a pointer to the lsat node in a skip list
+ USAGE
+    H5SL_node_t *H5SL_last(slist)
+        H5SL_t *slist;          IN: Pointer to skip list
+
+ RETURNS
+    Returns pointer to last node in skip list on success, NULL on failure.
+ DESCRIPTION
+    Retrieves a pointer to the last node in a skip list, for iterating over
+    the list.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5SL_node_t *
+H5SL_last(H5SL_t *slist)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_last);
+
+    /* Check args */
+    assert(slist);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Find last node, avoiding the header node */
+    FUNC_LEAVE_NOAPI(slist->last==slist->header ? NULL : slist->last);
+} /* end H5SL_last() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_item
+ PURPOSE
+    Gets pointer to the 'item' for a skip list node
+ USAGE
+    void *H5SL_item(slist_node)
+        H5SL_node_t *slist_node;          IN: Pointer to skip list node
+
+ RETURNS
+    Returns pointer to node 'item' on success, NULL on failure.
+ DESCRIPTION
+    Retrieves a node's 'item'
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+void *
+H5SL_item(H5SL_node_t *slist_node)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_item);
+
+    /* Check args */
+    assert(slist_node);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    FUNC_LEAVE_NOAPI(slist_node->item);
+} /* end H5SL_item() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_iterate
+ PURPOSE
+    Iterate over all nodes in a skip list
+ USAGE
+    herr_t H5SL_iterate(slist, op, op_data)
+        H5SL_t *slist;          IN/OUT: Pointer to skip list to iterate over
+        H5SL_operator_t op;     IN: Callback function for iteration
+        void *op_data;          IN/OUT: Pointer to application data for callback
+
+ RETURNS
+    Returns a negative value if something is wrong, the return
+        value of the last operator if it was non-zero, or zero if all
+        nodes were processed.
+ DESCRIPTION
+    Iterate over all the nodes in a skip list, calling an application callback
+    with the item, key and any operator data.
+
+    The operator callback receives a pointer to the item and key for the list
+    being iterated over ('mesg'), and the pointer to the operator data passed
+    in to H5SL_iterate ('op_data').  The return values from an operator are:
+        A. Zero causes the iterator to continue, returning zero when all
+            nodes of that type have been processed.
+        B. Positive causes the iterator to immediately return that positive
+            value, indicating short-circuit success.
+        C. Negative causes the iterator to immediately return that value,
+            indicating failure.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5SL_iterate(H5SL_t *slist, H5SL_operator_t op, void *op_data)
+{
+    H5SL_node_t *node;  /* Pointers to skip list nodes */
+    herr_t ret_value=0; /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_iterate);
+
+    /* Check args */
+    assert(slist);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Free skip list nodes */
+    node=slist->header->forward[0];
+    while(node!=NULL) {
+        /* Call the iterator callback */
+        /* Casting away const OK -QAK */
+        if((ret_value=(op)(node->item,(void *)node->key,op_data))!=0)
+            break;
+
+        node=node->forward[0];
+    } /* end while */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5SL_iterate() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_release
+ PURPOSE
+    Release all nodes from a skip list
+ USAGE
+    herr_t H5SL_release(slist)
+        H5SL_t *slist;            IN/OUT: Pointer to skip list to release nodes
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Release all the nodes in a skip list.  Any objects left in the skip list
+    nodes are not deallocated.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    The skip list itself is still valid, it just has all its nodes removed.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5SL_release(H5SL_t *slist)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_release);
+
+    /* Check args */
+    assert(slist);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Free skip list nodes */
+    H5SL_release_common(slist,NULL,NULL); /* always succeeds */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5SL_release() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_free
+ PURPOSE
+    Release all nodes from a skip list, freeing all nodes
+ USAGE
+    herr_t H5SL_free(slist,op,op_data)
+        H5SL_t *slist;          IN/OUT: Pointer to skip list to release nodes
+        H5SL_operator_t op;     IN: Callback function to free item & key
+        void *op_data;          IN/OUT: Pointer to application data for callback
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Release all the nodes in a skip list.  Any objects left in
+    the skip list have the 'op' routine called for each.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    The skip list itself is still valid, it just has all its nodes removed.
+
+    The return value from the 'op' routine is ignored.
+
+    This routine is essentially a combination of iterating over all the nodes
+    (where the iterator callback is supposed to free the items and/or keys)
+    followed by a call to H5SL_release().
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5SL_free(H5SL_t *slist, H5SL_operator_t op, void *op_data)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_free);
+
+    /* Check args */
+    assert(slist);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Free skip list nodes */
+    H5SL_release_common(slist,op,op_data); /* always succeeds */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5SL_free() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_destroy
+ PURPOSE
+    Close a skip list, deallocating it and freeing all its nodes.
+ USAGE
+    herr_t H5SL_destroy(slist,op,opdata)
+        H5SL_t *slist;          IN/OUT: Pointer to skip list to close
+        H5SL_operator_t op;     IN: Callback function to free item & key
+        void *op_data;          IN/OUT: Pointer to application data for callback
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Close a skip list, freeing all internal information.  Any objects left in
+    the skip list have the 'op' routine called for each.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    The return value from the 'op' routine is ignored.
+
+    This routine is essentially a combination of iterating over all the nodes
+    (where the iterator callback is supposed to free the items and/or keys)
+    followed by a call to H5SL_close().
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5SL_destroy(H5SL_t *slist, H5SL_operator_t op, void *op_data)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_destroy);
+
+    /* Check args */
+    assert(slist);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Close skip list */
+    (void)H5SL_close_common(slist,op,op_data); /* always succeeds */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5SL_destroy() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5SL_close
+ PURPOSE
+    Close a skip list, deallocating it.
+ USAGE
+    herr_t H5SL_close(slist)
+        H5SL_t *slist;            IN/OUT: Pointer to skip list to close
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Close a skip list, freeing all internal information.  Any objects left in
+    the skip list are not deallocated.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5SL_close(H5SL_t *slist)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5SL_close);
+
+    /* Check args */
+    assert(slist);
+
+    /* Check internal consistency */
+    /* (Pre-condition) */
+
+    /* Close skip list */
+    (void)H5SL_close_common(slist,NULL,NULL); /* always succeeds */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5SL_close() */
+

Added: packages/hdf5/branches/upstream/current/src/H5SLprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5SLprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5SLprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,82 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains private information about the H5SL module
+ */
+#ifndef _H5SLprivate_H
+#define _H5SLprivate_H
+
+/**************************************/
+/* Public headers needed by this file */
+/**************************************/
+#ifdef LATER
+#include "H5SLpublic.h"
+#endif /* LATER */
+
+/***************************************/
+/* Private headers needed by this file */
+/***************************************/
+#include "H5private.h"
+
+/************/
+/* Typedefs */
+/************/
+
+/* Typedefs for skip list struct (defined in H5SL.c) */
+typedef struct H5SL_t H5SL_t;
+typedef struct H5SL_node_t H5SL_node_t;
+
+/* Typedef for kinds of skip lists supported */
+typedef enum {
+    H5SL_TYPE_INT,      /* Skip list keys are 'int's */
+    H5SL_TYPE_HADDR,    /* Skip list keys are 'haddr_t's */
+    H5SL_TYPE_STR,      /* Skip list keys are 'char *'s (ie. strings) */
+    H5SL_TYPE_HSIZE,    /* Skip list keys are 'hsize_t's */
+    H5SL_TYPE_UNSIGNED  /* Skip list keys are 'unsigned's */
+} H5SL_type_t;
+
+/**********/
+/* Macros */
+/**********/
+#define H5SL_LEVEL_MAX          32      /* (for now) */
+
+/* Typedef for iteration operations */
+typedef herr_t (*H5SL_operator_t)(void *item, void *key,
+    void *operator_data/*in,out*/);
+
+/********************/
+/* Private routines */
+/********************/
+H5_DLL H5SL_t *H5SL_create(H5SL_type_t type, double p, size_t max_level);
+H5_DLL size_t H5SL_count(H5SL_t *slist);
+H5_DLL herr_t H5SL_insert(H5SL_t *slist, void *item, const void *key);
+H5_DLL H5SL_node_t *H5SL_add(H5SL_t *slist, void *item, const void *key);
+H5_DLL void *H5SL_remove(H5SL_t *slist, const void *key);
+H5_DLL void *H5SL_search(H5SL_t *slist, const void *key);
+H5_DLL void *H5SL_less(H5SL_t *slist, const void *key);
+H5_DLL H5SL_node_t *H5SL_find(H5SL_t *slist, const void *key);
+H5_DLL H5SL_node_t *H5SL_first(H5SL_t *slist);
+H5_DLL H5SL_node_t *H5SL_next(H5SL_node_t *slist_node);
+H5_DLL H5SL_node_t *H5SL_prev(H5SL_node_t *slist_node);
+H5_DLL H5SL_node_t *H5SL_last(H5SL_t *slist);
+H5_DLL void *H5SL_item(H5SL_node_t *slist_node);
+H5_DLL herr_t H5SL_iterate(H5SL_t *slist, H5SL_operator_t op, void *op_data);
+H5_DLL herr_t H5SL_release(H5SL_t *slist);
+H5_DLL herr_t H5SL_free(H5SL_t *slist, H5SL_operator_t op, void *op_data);
+H5_DLL herr_t H5SL_close(H5SL_t *slist);
+H5_DLL herr_t H5SL_destroy(H5SL_t *slist, H5SL_operator_t op, void *op_data);
+
+#endif /* _H5SLprivate_H */
+

Added: packages/hdf5/branches/upstream/current/src/H5ST.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5ST.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5ST.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,790 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* TERNARY SEARCH TREE ALGS
+  This code is described in "Ternary Search Trees" by Jon
+Bentley and Robert Sedgewick in the April, 1998, Dr. Dobb's Journal.
+*/
+
+
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free lists                           */
+#include "H5STprivate.h"        /* Ternary search trees                 */
+
+/* Declare a free list to manage the H5ST_node_t struct */
+H5FL_DEFINE_STATIC(H5ST_node_t);
+
+/* Declare a free list to manage the H5ST_tree_t struct */
+H5FL_DEFINE_STATIC(H5ST_tree_t);
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_create
+ PURPOSE
+    Create a TST
+ USAGE
+    H5ST_ptr_t H5ST_create()
+
+ RETURNS
+    Returns a pointer to the new TST tree on success, NULL on failure.
+ DESCRIPTION
+    Create a TST.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5ST_tree_t *
+H5ST_create(void)
+{
+    H5ST_tree_t *ret_value=NULL;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5ST_create,NULL);
+
+    /* Allocate wrapper for TST */
+    if((ret_value=H5FL_MALLOC(H5ST_tree_t))==NULL)
+        HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,NULL,"memory allocation failed");
+
+    /* Set the internal fields */
+    ret_value->root=NULL;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5ST_create() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_close_internal
+ PURPOSE
+    Close a TST, deallocating it.
+ USAGE
+    herr_t H5ST_close(p)
+        H5ST_ptr_t p;        IN/OUT: Root of TST to free
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Close a TST, freeing all nodes.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5ST_close_internal(H5ST_ptr_t p)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5ST_close_internal);
+
+    /* Recursively free TST */
+    if(p) {
+        H5ST_close_internal(p->lokid);
+        if (p->splitchar)
+            H5ST_close_internal(p->eqkid);
+        H5ST_close_internal(p->hikid);
+        H5FL_FREE(H5ST_node_t,p);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5ST_close_internal() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_close
+ PURPOSE
+    Close a TST, deallocating it.
+ USAGE
+    herr_t H5ST_close(tree)
+        H5ST_tree_t *tree;        IN/OUT: TST tree to free
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Close a TST, freeing all nodes.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5ST_close(H5ST_tree_t *tree)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5ST_close,FAIL);
+
+    /* Check arguments */
+    if(tree==NULL)
+        HGOTO_ERROR(H5E_ARGS,H5E_BADVALUE,FAIL,"invalid TST");
+
+    /* Free the TST itself */
+    if(H5ST_close_internal(tree->root)<0)
+        HGOTO_ERROR(H5E_TST,H5E_CANTFREE,FAIL,"can't free TST");
+
+    /* Free root node itself */
+    H5FL_FREE(H5ST_tree_t,tree);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5ST_close() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_insert
+ PURPOSE
+    Insert a string/object pair into a TST
+ USAGE
+    herr_t H5ST_insert(tree,s,obj)
+        H5ST_tree_t *tree;      IN/OUT: TST to insert string into
+        const char *s;          IN: String to use as key for object
+        void *obj;              IN: Pointer to object to insert
+
+ RETURNS
+    Returns non-negative on success, negative on failure.
+ DESCRIPTION
+    Insert a key (string)/object pair into a TST
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5ST_insert(H5ST_tree_t *tree, const char *s, void *obj)
+{
+    int d;                      /* Comparison value */
+    H5ST_ptr_t pp, *p;          /* Pointer to current node and pointer to that */
+    H5ST_ptr_t parent=NULL;     /* Pointer to parent node */
+    H5ST_ptr_t up=NULL;         /* Pointer to up node */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5ST_insert,FAIL);
+
+    /* Find the correct location to insert object */
+    p = &tree->root;
+    while((pp = *p)) {
+        /* If this node matches the character in the key, then drop down to the lower tree */
+        if ((d = *s - pp->splitchar) == 0) {
+            if (*s++ == 0)
+                HGOTO_ERROR(H5E_TST,H5E_EXISTS,FAIL,"key already in tree");
+            up=pp;
+            p = &(pp->eqkid);
+        } /* end if */
+        else {
+            /* Walk through the current tree, searching for the matching character */
+            parent=pp;
+            if (d < 0)
+                p = &(pp->lokid);
+            else
+                p = &(pp->hikid);
+        } /* end else */
+    } /* end while */
+
+    /* Finish walking through the key string, adding nodes until the end */
+    for (;;) {
+        if((*p = H5FL_MALLOC(H5ST_node_t))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE,H5E_NOSPACE,FAIL,"memory allocation failed");
+        pp = *p;
+        pp->splitchar = *s;
+        pp->up = up;
+        pp->parent = parent;
+        pp->lokid = pp->eqkid = pp->hikid = NULL;
+
+        /* If this is the end of the key string, break out */
+        if (*s++ == 0) {
+            pp->eqkid = (H5ST_ptr_t) obj;
+            break;
+        } /* end if */
+
+        /* Continue to next character */
+        parent=NULL;
+        up=pp;
+        p = &(pp->eqkid);
+    } /* end for */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5ST_insert() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_search
+ PURPOSE
+    Determine if a key is in the TST
+ USAGE
+    hbool_t H5ST_search(tree,s)
+        H5ST_tree_t *tree;      IN: TST to find string in
+        const char *s;          IN: String to use as key to locate
+
+ RETURNS
+    Success: TRUE if key string in TST, FALSE if not
+    Failure: negative
+ DESCRIPTION
+    Locate a key (string) in a TST
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5ST_search(H5ST_tree_t *tree, const char *s)
+{
+    H5ST_ptr_t p;               /* Temporary pointer to TST node */
+    htri_t ret_value=FALSE;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5ST_search);
+
+    p = tree->root;
+    while (p) {
+        if (*s < p->splitchar)
+            p = p->lokid;
+        else if (*s == p->splitchar)  {
+            if (*s++ == 0)
+                HGOTO_DONE(TRUE);
+            p = p->eqkid;
+        } else
+            p = p->hikid;
+    } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5ST_search() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_find_internal
+ PURPOSE
+    Find the node matching a particular key string
+ USAGE
+    H5ST_ptr_t H5ST_find(p,s)
+        H5ST_ptr_t p;           IN: TST to find string in
+        const char *s;          IN: String to use as key to locate
+
+ RETURNS
+    Success: Non-NULL
+    Failure: NULL
+ DESCRIPTION
+    Locate a key (string) in a TST
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5ST_ptr_t
+H5ST_find_internal(H5ST_ptr_t p, const char *s)
+{
+    H5ST_ptr_t ret_value=NULL;  /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5ST_find_internal);
+
+    while (p) {
+        if (*s < p->splitchar)
+            p = p->lokid;
+        else if (*s == p->splitchar)  {
+            if (*s++ == 0)
+                HGOTO_DONE(p);
+            p = p->eqkid;
+        } else
+            p = p->hikid;
+    } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5ST_find_internal() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_find
+ PURPOSE
+    Find the node matching a particular key string
+ USAGE
+    H5ST_ptr_t H5ST_find(tree,s)
+        H5ST_tree_t *tree;      IN: TST to find string in
+        const char *s;          IN: String to use as key to locate
+
+ RETURNS
+    Success: Non-NULL
+    Failure: NULL
+ DESCRIPTION
+    Locate a key (string) in a TST
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5ST_ptr_t
+H5ST_find(H5ST_tree_t *tree, const char *s)
+{
+    H5ST_ptr_t ret_value=NULL;  /* Return value */
+
+    FUNC_ENTER_NOAPI(H5ST_find,NULL);
+
+    if((ret_value=H5ST_find_internal(tree->root,s))==NULL)
+        HGOTO_ERROR(H5E_TST,H5E_NOTFOUND,NULL,"key not found in TST");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5ST_find() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_locate
+ PURPOSE
+    Find an object in a TST
+ USAGE
+    void *H5ST_locate(tree,s)
+        H5ST_tree_t *tree;  IN: TST to locate object within
+        const char *s;      IN: String of key for object to locate
+ RETURNS
+    Success: Non-NULL, pointer to object stored for key
+    Failure: Negative
+ DESCRIPTION
+    Locate a node in a TST, returning the object from the node.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+void *
+H5ST_locate(H5ST_tree_t *tree, const char *s)
+{
+    H5ST_ptr_t node;    /* Pointer to node located */
+    void *ret_value;    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5ST_locate,NULL);
+
+    /* Locate the node to remove */
+    if((node=H5ST_find_internal(tree->root,s))==NULL)
+        HGOTO_ERROR(H5E_TST,H5E_NOTFOUND,NULL,"key not found in TST");
+
+    /* Get the pointer to the object to return */
+    ret_value=node->eqkid;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* H5ST_locate() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_findfirst_internal
+ PURPOSE
+    Find the first node in a TST
+ USAGE
+    H5ST_ptr_t H5ST_findfirst_internal(p)
+        H5ST_ptr_t p;      IN: TST to locate first node within
+ RETURNS
+    Success: Non-NULL
+    Failure: NULL
+ DESCRIPTION
+    Get the first (lexicographically) node in a TST
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5ST_ptr_t
+H5ST_findfirst_internal(H5ST_ptr_t p)
+{
+    H5ST_ptr_t ret_value=NULL;  /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5ST_findfirst_internal);
+
+    while(p) {
+        /* Find least node in current tree */
+        while(p->lokid)
+            p=p->lokid;
+
+        /* Is least node '\0'? */
+        if(p->splitchar=='\0') {
+            /* Return it */
+            HGOTO_DONE(p);
+        } /* end if */
+        else {
+            /* Go down to next level of tree */
+            p=p->eqkid;
+        } /* end else */
+    } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5ST_findfirst_internal() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_findfirst
+ PURPOSE
+    Find the first node in a TST
+ USAGE
+    H5ST_ptr_t H5ST_findfirst(tree)
+        H5ST_tree_t *tree;      IN: TST to locate first node within
+ RETURNS
+    Success: Non-NULL
+    Failure: NULL
+ DESCRIPTION
+    Get the first (lexicographically) node in a TST
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5ST_ptr_t
+H5ST_findfirst(H5ST_tree_t *tree)
+{
+    H5ST_ptr_t ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5ST_findfirst,NULL);
+
+    if((ret_value=H5ST_findfirst_internal(tree->root))==NULL)
+        HGOTO_ERROR(H5E_TST,H5E_NOTFOUND,NULL,"no nodes in TST");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5ST_findfirst() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_getnext
+ PURPOSE
+    Internal routine to find the next node in a given level of a TST
+ USAGE
+    H5ST_ptr_t H5ST_getnext(p)
+        H5ST_ptr_t *p;       IN: Pointer to node to find next node from
+ RETURNS
+    Success: Non-NULL
+    Failure: NULL
+ DESCRIPTION
+    Get the next (lexicographically) node in the current level of a TST
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5ST_ptr_t
+H5ST_getnext(H5ST_ptr_t p)
+{
+    H5ST_ptr_t ret_value=NULL;  /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5ST_getnext);
+
+    /* If the node to continue from has higher-valued nodes attached */
+    if(p->hikid) {
+        /* Go to first higher-valued node */
+        p=p->hikid;
+
+        /* Find least node from here */
+        while(p->lokid)
+            p=p->lokid;
+        HGOTO_DONE(p);
+    } /* end if */
+    else {
+        H5ST_ptr_t q;           /* Temporary TST node pointer */
+
+        /* Go up one level in current tree */
+        q=p->parent;
+        if(q==NULL)
+            HGOTO_DONE(NULL);
+
+        /* While the previous node was the higher-valued node, keep backing up the tree */
+        while(q->hikid==p) {
+            p=q;
+            q=p->parent;
+            if(q==NULL)
+                HGOTO_DONE(NULL);
+        } /* end while */
+        HGOTO_DONE(q);
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5ST_getnext() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_findnext
+ PURPOSE
+    Find the next node from a node in a TST
+ USAGE
+    H5ST_ptr_t H5ST_findnext(p)
+        H5ST_ptr_t p;       IN: Current node to continue from
+ RETURNS
+    Success: Non-NULL
+    Failure: NULL
+ DESCRIPTION
+    Get the next (lexicographically) node in a TST
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5ST_ptr_t
+H5ST_findnext(H5ST_ptr_t p)
+{
+    H5ST_ptr_t q;               /* Temporary pointer to TST node */
+    H5ST_ptr_t ret_value=NULL;  /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5ST_findnext);
+
+    /* Find the next node at the current level, or go back up the tree */
+    do {
+        q=H5ST_getnext(p);
+        if(q) {
+            HGOTO_DONE(H5ST_findfirst_internal(q->eqkid));
+        } /* end if */
+        else
+            p=p->up;
+    } while(p);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5ST_findnext() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_delete_internal
+ PURPOSE
+    Delete a node from a TST
+ USAGE
+    herr_t H5ST_delete_internal(root,p)
+        H5ST_ptr_t *root;       IN/OUT: Root of TST to delete node from
+        H5ST_ptr_t p;       IN: Node to delete
+ RETURNS
+    Success: Non-negative
+    Failure: Negative
+ DESCRIPTION
+    Delete a node from a TST.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This should be the final node for a string.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5ST_delete_internal(H5ST_ptr_t *root, H5ST_ptr_t p)
+{
+    H5ST_ptr_t q,               /* Temporary pointer to TST node */
+        newp;                   /* Pointer to node which will replace deleted node in tree */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5ST_delete_internal);
+
+    /* Find node to replace one being deleted */
+    if(p->lokid) {
+        /* If the deleted node has lo & hi kids, attach them together */
+        if(p->hikid) {
+            q=p->lokid;
+            while(q->hikid)
+                q=q->hikid;
+            q->hikid=p->hikid;
+            p->hikid->parent=q;
+        } /* end if */
+        newp=p->lokid;
+    } /* end if */
+    else if(p->hikid) {
+        newp=p->hikid;
+    } /* end if */
+    else {
+        newp=NULL;
+    } /* end else */
+
+    /* Deleted node is in middle of tree */
+    if(p->parent) {
+        /* Attach new node to correct side of parent */
+        if(p==p->parent->lokid)
+            p->parent->lokid=newp;
+        else
+            p->parent->hikid=newp;
+        if(newp)
+            newp->parent=p->parent;
+    } /* end if */
+    else {
+        if(newp)
+            newp->parent=p->parent;
+        if(p->up) {
+            p->up->eqkid=newp;
+            /* If we deleted the last node in the TST, delete the upper node also */
+            if(newp==NULL)
+                H5ST_delete_internal(root,p->up);
+        } /* end if */
+        else /* Deleted last node at top level of tree */
+            *root=newp;
+    } /* end else */
+
+    H5FL_FREE(H5ST_node_t,p);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5ST_delete_internal() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_delete
+ PURPOSE
+    Delete a node from a TST
+ USAGE
+    herr_t H5ST_delete(tree,p)
+        H5ST_tree_t *tree;  IN/OUT: TST to delete node from
+        H5ST_ptr_t p;       IN: Node to delete
+ RETURNS
+    Success: Non-negative
+    Failure: Negative
+ DESCRIPTION
+    Delete a node from a TST.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This should be the final node for a string.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5ST_delete(H5ST_tree_t *tree, H5ST_ptr_t p)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5ST_delete,FAIL);
+
+    if(H5ST_delete_internal(&tree->root,p)<0)
+        HGOTO_ERROR(H5E_TST,H5E_CANTDELETE,FAIL,"can't delete node from TST");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5ST_delete() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_remove
+ PURPOSE
+    Remove a node from a TST
+ USAGE
+    void *H5ST_remove(tree,s)
+        H5ST_tree_t *tree;  IN/OUT: TST to remove node from
+        const char *s;      IN: String of key for node to remove
+ RETURNS
+    Success: Non-NULL, pointer to object stored for key
+    Failure: Negative
+ DESCRIPTION
+    Remove a node from a TST, returning the object from the node.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+void *
+H5ST_remove(H5ST_tree_t *tree, const char *s)
+{
+    H5ST_ptr_t node;    /* Pointer to node to remove */
+    void *ret_value;    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5ST_remove,NULL);
+
+    /* Locate the node to remove */
+    if((node=H5ST_find_internal(tree->root,s))==NULL)
+        HGOTO_ERROR(H5E_TST,H5E_NOTFOUND,NULL,"key not found in TST");
+
+    /* Get the pointer to the object to return */
+    ret_value=node->eqkid;
+
+    /* Remove the node from the TST */
+    if(H5ST_delete_internal(&tree->root,node)<0)
+        HGOTO_ERROR(H5E_TST,H5E_CANTDELETE,NULL,"can't delete node from TST");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* H5ST_remove() */
+
+#ifdef H5ST_DEBUG
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_dump_internal
+ PURPOSE
+    Dump all the nodes of a TST
+ USAGE
+    herr_t H5ST_dump(p)
+        H5ST_ptr_t p;   IN: Root of TST to dump
+ RETURNS
+    Success: Non-negative
+    Failure: Negative
+ DESCRIPTION
+    Dump information for a TST.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5ST_dump_internal(H5ST_ptr_t p)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5ST_dump_internal);
+
+    if (p) {
+        printf("p=%p\n",p);
+        printf("\tp->up=%p\n",p->up);
+        printf("\tp->parent=%p\n",p->parent);
+        printf("\tp->lokid=%p\n",p->lokid);
+        printf("\tp->hikid=%p\n",p->hikid);
+        printf("\tp->eqkid=%p\n",p->eqkid);
+        printf("\tp->splitchar=%c\n",p->splitchar);
+
+        H5ST_dump_internal(p->lokid);
+        if (p->splitchar)
+            H5ST_dump_internal(p->eqkid);
+        else
+            printf("%s\n", (char *) p->eqkid);
+        H5ST_dump_internal(p->hikid);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5ST_dump_internal() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5ST_dump
+ PURPOSE
+    Dump all the nodes of a TST
+ USAGE
+    herr_t H5ST_dump(tree)
+        H5ST_tree_t *tree;      IN: TST to dump
+ RETURNS
+    Success: Non-negative
+    Failure: Negative
+ DESCRIPTION
+    Dump information for a TST.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5ST_dump(H5ST_tree_t *tree)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5ST_dump,NULL);
+
+    /* Dump the tree */
+    H5ST_dump_internal(tree->root);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5ST_dump() */
+#endif /* H5ST_DEBUG */

Added: packages/hdf5/branches/upstream/current/src/H5STprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5STprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5STprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,63 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains private information about the H5ST module
+ */
+#ifndef _H5STprivate_H
+#define _H5STprivate_H
+
+#ifdef LATER
+#include "H5STpublic.h"
+#endif /* LATER */
+
+/* Private headers needed by this file */
+#include "H5private.h"
+
+/* Typedefs */
+
+/* Internal nodes for TST */
+typedef struct H5ST_node *H5ST_ptr_t;
+typedef struct H5ST_node {
+    char splitchar;             /* Character represented at node */
+    H5ST_ptr_t up;              /* Pointer to the node in the tree above (before) this node */
+    H5ST_ptr_t parent;          /* Pointer to the next higher tree node in this tree */
+    H5ST_ptr_t lokid;           /* Pointer to the lower node from this one, in this tree */
+    H5ST_ptr_t eqkid;           /* Pointer to the parent node in the next tree down (after) this node */
+    H5ST_ptr_t hikid;           /* Pointer to the higher node from this one, in this tree */
+} H5ST_node_t;
+
+/* Wrapper about TST */
+typedef struct {
+    H5ST_ptr_t root;            /* Pointer to actual TST */
+} H5ST_tree_t;
+
+/* Macro to access "data" pointer in H5ST_node_t's returned from functions */
+#define H5ST_NODE_DATA(p)       ((void *)(p->eqkid))
+
+/* Private routines */
+H5_DLL H5ST_tree_t *H5ST_create(void);
+H5_DLL herr_t H5ST_close(H5ST_tree_t *p);
+H5_DLL herr_t H5ST_insert(H5ST_tree_t *root, const char *s, void *obj);
+H5_DLL htri_t H5ST_search(H5ST_tree_t *root, const char *s);
+H5_DLL H5ST_ptr_t H5ST_find(H5ST_tree_t *root, const char *s);
+H5_DLL void *H5ST_locate(H5ST_tree_t *root, const char *s);
+H5_DLL H5ST_ptr_t H5ST_findfirst(H5ST_tree_t *p);
+H5_DLL H5ST_ptr_t H5ST_findnext(H5ST_ptr_t p);
+H5_DLL void *H5ST_remove(H5ST_tree_t *root, const char *s);
+H5_DLL herr_t H5ST_delete(H5ST_tree_t *root, H5ST_ptr_t p);
+H5_DLL herr_t H5ST_dump(H5ST_ptr_t p);
+
+#endif /* _H5STprivate_H */
+

Added: packages/hdf5/branches/upstream/current/src/H5Sall.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Sall.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Sall.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,848 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Tuesday, June 16, 1998
+ *
+ * Purpose:	"All" selection data space I/O functions.
+ */
+
+#define H5S_PACKAGE		/*suppress error about including H5Spkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		        */
+#include "H5Iprivate.h"		/* ID Functions		                */
+#include "H5Spkg.h"		/* Dataspace functions			*/
+#include "H5Vprivate.h"         /* Vector functions                     */
+
+/* Static function prototypes */
+
+/* Selection callbacks */
+static herr_t H5S_all_copy(H5S_t *dst, const H5S_t *src, hbool_t share_selection);
+static herr_t H5S_all_get_seq_list(const H5S_t *space, unsigned flags,
+    H5S_sel_iter_t *iter, size_t maxseq, size_t maxbytes,
+    size_t *nseq, size_t *nbytes, hsize_t *off, size_t *len);
+static herr_t H5S_all_release(H5S_t *space);
+static htri_t H5S_all_is_valid(const H5S_t *space);
+static hssize_t H5S_all_serial_size(const H5S_t *space);
+static herr_t H5S_all_serialize(const H5S_t *space, uint8_t *buf);
+static herr_t H5S_all_deserialize(H5S_t *space, const uint8_t *buf);
+static herr_t H5S_all_bounds(const H5S_t *space, hsize_t *start, hsize_t *end);
+static htri_t H5S_all_is_contiguous(const H5S_t *space);
+static htri_t H5S_all_is_single(const H5S_t *space);
+static htri_t H5S_all_is_regular(const H5S_t *space);
+static herr_t H5S_all_iter_init(H5S_sel_iter_t *iter, const H5S_t *space);
+
+/* Selection iteration callbacks */
+static herr_t H5S_all_iter_coords(const H5S_sel_iter_t *iter, hsize_t *coords);
+static herr_t H5S_all_iter_block(const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end);
+static hsize_t H5S_all_iter_nelmts(const H5S_sel_iter_t *iter);
+static htri_t H5S_all_iter_has_next_block(const H5S_sel_iter_t *iter);
+static herr_t H5S_all_iter_next(H5S_sel_iter_t *sel_iter, size_t nelem);
+static herr_t H5S_all_iter_next_block(H5S_sel_iter_t *sel_iter);
+static herr_t H5S_all_iter_release(H5S_sel_iter_t *sel_iter);
+
+/* Selection properties for "all" selections */
+const H5S_select_class_t H5S_sel_all[1] = {{
+    H5S_SEL_ALL,
+
+    /* Methods on selection */
+    H5S_all_copy,
+    H5S_all_get_seq_list,
+    H5S_all_release,
+    H5S_all_is_valid,
+    H5S_all_serial_size,
+    H5S_all_serialize,
+    H5S_all_deserialize,
+    H5S_all_bounds,
+    H5S_all_is_contiguous,
+    H5S_all_is_single,
+    H5S_all_is_regular,
+    H5S_all_iter_init,
+}};
+
+/* Iteration properties for "all" selections */
+static const H5S_sel_iter_class_t H5S_sel_iter_all[1] = {{
+    H5S_SEL_ALL,
+
+    /* Methods on selection iterator */
+    H5S_all_iter_coords,
+    H5S_all_iter_block,
+    H5S_all_iter_nelmts,
+    H5S_all_iter_has_next_block,
+    H5S_all_iter_next,
+    H5S_all_iter_next_block,
+    H5S_all_iter_release,
+}};
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_all_iter_init
+ *
+ * Purpose:	Initializes iteration information for "all" selection.
+ *
+ * Return:	non-negative on success, negative on failure.
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, June 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_all_iter_init (H5S_sel_iter_t *iter, const H5S_t *space)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_all_iter_init);
+
+    /* Check args */
+    assert (space && H5S_SEL_ALL==H5S_GET_SELECT_TYPE(space));
+    assert (iter);
+
+    /* Initialize the number of elements to iterate over */
+    iter->elmt_left=H5S_GET_SELECT_NPOINTS(space);
+
+    /* Start at the upper left location */
+    iter->u.all.elmt_offset=0;
+    iter->u.all.byte_offset=0;
+
+    /* Initialize type of selection iterator */
+    iter->type=H5S_sel_iter_all;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_all_iter_init() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_all_iter_coords
+ *
+ * Purpose:	Retrieve the current coordinates of iterator for current
+ *              selection
+ *
+ * Return:	non-negative on success, negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, April 22, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_all_iter_coords (const H5S_sel_iter_t *iter, hsize_t *coords)
+{
+    herr_t ret_value=SUCCEED;        /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_all_iter_coords);
+
+    /* Check args */
+    assert (iter);
+    assert (coords);
+
+    /* Calculate the coordinates for the current iterator offset */
+    if(H5V_array_calc(iter->u.all.elmt_offset,iter->rank,iter->dims,coords)<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTGET, FAIL, "can't retrieve coordinates");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_all_iter_coords() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_all_iter_block
+ *
+ * Purpose:	Retrieve the current block of iterator for current
+ *              selection
+ *
+ * Return:	non-negative on success, negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, June 2, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_all_iter_block (const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end)
+{
+    unsigned u;                 /* Local index variable */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_all_iter_block);
+
+    /* Check args */
+    assert (iter);
+    assert (start);
+    assert (end);
+
+    for(u=0; u<iter->rank; u++) {
+        /* Set the start of the 'all' block */
+        /* (Always '0' coordinates for now) */
+        start[u]=0;
+
+        /* Compute the end of the 'all' block */
+        /* (Always size of the extent for now) */
+        end[u]=iter->dims[u]-1;
+    } /* end for */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_all_iter_coords() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_all_iter_nelmts
+ *
+ * Purpose:	Return number of elements left to process in iterator
+ *
+ * Return:	non-negative number of elements on success, zero on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, June 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hsize_t
+H5S_all_iter_nelmts (const H5S_sel_iter_t *iter)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_all_iter_nelmts);
+
+    /* Check args */
+    assert (iter);
+
+    FUNC_LEAVE_NOAPI(iter->elmt_left);
+}   /* H5S_all_iter_nelmts() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_iter_next
+ PURPOSE
+    Check if there is another block left in the current iterator
+ USAGE
+    htri_t H5S_all_iter_has_next_block(iter)
+        const H5S_sel_iter_t *iter;       IN: Pointer to selection iterator
+ RETURNS
+    Non-negative (TRUE/FALSE) on success/Negative on failure
+ DESCRIPTION
+    Check if there is another block available in the selection iterator.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_all_iter_has_next_block (const H5S_sel_iter_t UNUSED *iter)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_all_iter_has_next_block);
+
+    /* Check args */
+    assert (iter);
+
+    FUNC_LEAVE_NOAPI(FALSE);
+}   /* H5S_all_iter_has_next_block() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_iter_next
+ PURPOSE
+    Increment selection iterator
+ USAGE
+    herr_t H5S_all_iter_next(iter, nelem)
+        H5S_sel_iter_t *iter;       IN: Pointer to selection iterator
+        size_t nelem;               IN: Number of elements to advance by
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Advance selection iterator to the NELEM'th next element in the selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_all_iter_next(H5S_sel_iter_t *iter, size_t nelem)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_all_iter_next);
+
+    /* Check args */
+    assert (iter);
+    assert (nelem>0);
+
+    /* Increment the iterator */
+    iter->u.all.elmt_offset+=nelem;
+    iter->u.all.byte_offset+=(nelem*iter->elmt_size);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_all_iter_next() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_iter_next_block
+ PURPOSE
+    Increment selection iterator to next block
+ USAGE
+    herr_t H5S_all_iter_next_block(iter)
+        H5S_sel_iter_t *iter;       IN: Pointer to selection iterator
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Advance selection iterator to the next block in the selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_all_iter_next_block(H5S_sel_iter_t UNUSED *iter)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_all_iter_next_block);
+
+    /* Check args */
+    assert (iter);
+
+    FUNC_LEAVE_NOAPI(FAIL);
+}   /* H5S_all_iter_next_block() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_iter_release
+ PURPOSE
+    Release "all" selection iterator information for a dataspace
+ USAGE
+    herr_t H5S_all_iter_release(iter)
+        H5S_sel_iter_t *iter;       IN: Pointer to selection iterator
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Releases all information for a dataspace "all" selection iterator
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_all_iter_release (H5S_sel_iter_t UNUSED * iter)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_all_iter_release);
+
+    /* Check args */
+    assert (iter);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_all_iter_release() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_release
+ PURPOSE
+    Release all selection information for a dataspace
+ USAGE
+    herr_t H5S_all_release(space)
+        H5S_t *space;       IN: Pointer to dataspace
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Releases "all" selection information for a dataspace
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_all_release (H5S_t UNUSED * space)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_all_release);
+
+    /* Check args */
+    assert (space);
+
+    /* Reset the number of elements in the selection */
+    space->select.num_elem=0;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_all_release() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_copy
+ PURPOSE
+    Copy a selection from one dataspace to another
+ USAGE
+    herr_t H5S_all_copy(dst, src)
+        H5S_t *dst;  OUT: Pointer to the destination dataspace
+        H5S_t *src;  IN: Pointer to the source dataspace
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Copies the 'all' selection information from the source
+    dataspace to the destination dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_all_copy(H5S_t *dst, const H5S_t UNUSED *src, hbool_t UNUSED share_selection)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_all_copy);
+
+    assert(src);
+    assert(dst);
+
+    /* Set number of elements in selection */
+    dst->select.num_elem=(hsize_t)H5S_GET_EXTENT_NPOINTS(dst);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5S_all_copy() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_is_valid
+ PURPOSE
+    Check whether the selection fits within the extent, with the current
+    offset defined.
+ USAGE
+    htri_t H5S_all_is_valid(space);
+        H5S_t *space;             IN: Dataspace pointer to query
+ RETURNS
+    TRUE if the selection fits within the extent, FALSE if it does not and
+        Negative on an error.
+ DESCRIPTION
+    Determines if the current selection at the current offet fits within the
+    extent for the dataspace.  Offset is irrelevant for this type of selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_all_is_valid (const H5S_t UNUSED *space)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_all_is_valid);
+
+    assert(space);
+
+    FUNC_LEAVE_NOAPI(TRUE);
+} /* end H5S_all_is_valid() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_serial_size
+ PURPOSE
+    Determine the number of bytes needed to store the serialized "all"
+        selection information.
+ USAGE
+    hssize_t H5S_all_serial_size(space)
+        H5S_t *space;             IN: Dataspace pointer to query
+ RETURNS
+    The number of bytes required on success, negative on an error.
+ DESCRIPTION
+    Determines the number of bytes required to serialize an "all"
+    selection for storage on disk.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hssize_t
+H5S_all_serial_size (const H5S_t UNUSED *space)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_all_serial_size);
+
+    assert(space);
+
+    /* Basic number of bytes required to serialize point selection:
+     *  <type (4 bytes)> + <version (4 bytes)> + <padding (4 bytes)> +
+     *      <length (4 bytes)> = 16 bytes
+     */
+    FUNC_LEAVE_NOAPI(16);
+} /* end H5S_all_serial_size() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_serialize
+ PURPOSE
+    Serialize the current selection into a user-provided buffer.
+ USAGE
+    herr_t H5S_all_serialize(space, buf)
+        H5S_t *space;           IN: Dataspace pointer of selection to serialize
+        uint8 *buf;             OUT: Buffer to put serialized selection into
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Serializes the current element selection into a buffer.  (Primarily for
+    storing on disk).
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_all_serialize (const H5S_t *space, uint8_t *buf)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_all_serialize);
+
+    assert(space);
+
+    /* Store the preamble information */
+    UINT32ENCODE(buf, (uint32_t)H5S_GET_SELECT_TYPE(space));  /* Store the type of selection */
+    UINT32ENCODE(buf, (uint32_t)1);  /* Store the version number */
+    UINT32ENCODE(buf, (uint32_t)0);  /* Store the un-used padding */
+    UINT32ENCODE(buf, (uint32_t)0);  /* Store the additional information length */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_all_serialize() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_deserialize
+ PURPOSE
+    Deserialize the current selection from a user-provided buffer.
+ USAGE
+    herr_t H5S_all_deserialize(space, buf)
+        H5S_t *space;           IN/OUT: Dataspace pointer to place selection into
+        uint8 *buf;             IN: Buffer to retrieve serialized selection from
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Deserializes the current selection into a buffer.  (Primarily for retrieving
+    from disk).
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_all_deserialize (H5S_t *space, const uint8_t UNUSED *buf)
+{
+    herr_t ret_value;   /* return value */
+
+    FUNC_ENTER_NOAPI(H5S_all_deserialize, FAIL);
+
+    assert(space);
+
+    /* Change to "all" selection */
+    if((ret_value=H5S_select_all(space,1))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't change selection");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_all_deserialize() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_bounds
+ PURPOSE
+    Gets the bounding box containing the selection.
+ USAGE
+    herr_t H5S_all_bounds(space, start, end)
+        H5S_t *space;           IN: Dataspace pointer of selection to query
+        hsize_t *start;         OUT: Starting coordinate of bounding box
+        hsize_t *end;           OUT: Opposite coordinate of bounding box
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Retrieves the bounding box containing the current selection and places
+    it into the user's buffers.  The start and end buffers must be large
+    enough to hold the dataspace rank number of coordinates.  The bounding box
+    exactly contains the selection, ie. if a 2-D element selection is currently
+    defined with the following points: (4,5), (6,8) (10,7), the bounding box
+    with be (4, 5), (10, 8).  Calling this function on a "none" selection
+    returns fail.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_all_bounds(const H5S_t *space, hsize_t *start, hsize_t *end)
+{
+    int rank;                  /* Dataspace rank */
+    int i;                     /* index variable */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_all_bounds);
+
+    assert(space);
+    assert(start);
+    assert(end);
+
+    /* Get the dataspace extent rank */
+    rank=space->extent.rank;
+
+    /* Just copy over the complete extent */
+    for(i=0; i<rank; i++) {
+        start[i]=0;
+        end[i]=space->extent.size[i]-1;
+    } /* end for */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5Sget_all_bounds() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_is_contiguous
+ PURPOSE
+    Check if a "all" selection is contiguous within the dataspace extent.
+ USAGE
+    htri_t H5S_all_is_contiguous(space)
+        H5S_t *space;           IN: Dataspace pointer to check
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+    Checks to see if the current selection in the dataspace is contiguous.
+    This is primarily used for reading the entire selection in one swoop.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_all_is_contiguous(const H5S_t UNUSED *space)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_all_is_contiguous);
+
+    assert(space);
+
+    FUNC_LEAVE_NOAPI(TRUE);
+}   /* H5S_all_is_contiguous() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_is_single
+ PURPOSE
+    Check if a "all" selection is a single block within the dataspace extent.
+ USAGE
+    htri_t H5S_all_is_single(space)
+        H5S_t *space;           IN: Dataspace pointer to check
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+    Checks to see if the current selection in the dataspace is a single block.
+    This is primarily used for reading the entire selection in one swoop.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_all_is_single(const H5S_t UNUSED *space)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_all_is_single);
+
+    assert(space);
+
+    FUNC_LEAVE_NOAPI(TRUE);
+}   /* H5S_all_is_single() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_is_regular
+ PURPOSE
+    Check if a "all" selection is "regular"
+ USAGE
+    htri_t H5S_all_is_regular(space)
+        const H5S_t *space;     IN: Dataspace pointer to check
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+    Checks to see if the current selection in a dataspace is the a regular
+    pattern.
+    This is primarily used for reading the entire selection in one swoop.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_all_is_regular(const H5S_t UNUSED *space)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_all_is_regular);
+
+    /* Check args */
+    assert(space);
+
+    FUNC_LEAVE_NOAPI(TRUE);
+}   /* H5S_all_is_regular() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_all
+ PURPOSE
+    Specify the the entire extent is selected
+ USAGE
+    herr_t H5S_select_all(dsid)
+        hid_t dsid;             IN: Dataspace ID of selection to modify
+        unsigned rel_prev;      IN: Flag whether to release previous selection or not
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    This function selects the entire extent for a dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_select_all (H5S_t *space, unsigned rel_prev)
+{
+    herr_t ret_value=SUCCEED;  /* return value */
+
+    FUNC_ENTER_NOAPI(H5S_select_all, FAIL);
+
+    /* Check args */
+    assert(space);
+
+    /* Remove current selection first */
+    if(rel_prev)
+        if(H5S_SELECT_RELEASE(space)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't release selection");
+
+    /* Set number of elements in selection */
+    space->select.num_elem=(hsize_t)H5S_GET_EXTENT_NPOINTS(space);
+
+    /* Set selection type */
+    space->select.type=H5S_sel_all;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_all() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sselect_all
+ PURPOSE
+    Specify the the entire extent is selected
+ USAGE
+    herr_t H5Sselect_all(dsid)
+        hid_t dsid;             IN: Dataspace ID of selection to modify
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    This function selects the entire extent for a dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t H5Sselect_all (hid_t spaceid)
+{
+    H5S_t	*space = NULL;  /* Dataspace to modify selection of */
+    herr_t ret_value=SUCCEED;  /* return value */
+
+    FUNC_ENTER_API(H5Sselect_all, FAIL);
+
+    /* Check args */
+    if (NULL == (space=H5I_object_verify(spaceid, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
+
+    /* Call internal routine to do the work */
+    if((ret_value=H5S_select_all(space,1))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't change selection");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Sselect_all() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_all_get_seq_list
+ PURPOSE
+    Create a list of offsets & lengths for a selection
+ USAGE
+    herr_t H5S_all_get_seq_list(space,flags,iter,maxseq,maxelem,nseq,nelem,off,len)
+        H5S_t *space;           IN: Dataspace containing selection to use.
+        unsigned flags;         IN: Flags for extra information about operation
+        H5S_sel_iter_t *iter;   IN/OUT: Selection iterator describing last
+                                    position of interest in selection.
+        size_t maxseq;          IN: Maximum number of sequences to generate
+        size_t maxelem;         IN: Maximum number of elements to include in the
+                                    generated sequences
+        size_t *nseq;           OUT: Actual number of sequences generated
+        size_t *nelem;          OUT: Actual number of elements in sequences generated
+        hsize_t *off;           OUT: Array of offsets
+        size_t *len;            OUT: Array of lengths
+ RETURNS
+    Non-negative on success/Negative on failure.
+ DESCRIPTION
+    Use the selection in the dataspace to generate a list of byte offsets and
+    lengths for the region(s) selected.  Start/Restart from the position in the
+    ITER parameter.  The number of sequences generated is limited by the MAXSEQ
+    parameter and the number of sequences actually generated is stored in the
+    NSEQ parameter.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_all_get_seq_list(const H5S_t UNUSED *space, unsigned UNUSED flags, H5S_sel_iter_t *iter,
+    size_t UNUSED maxseq, size_t maxelem, size_t *nseq, size_t *nelem,
+    hsize_t *off, size_t *len)
+{
+    size_t elem_used;           /* The number of elements used */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_all_get_seq_list);
+
+    /* Check args */
+    assert(space);
+    assert(iter);
+    assert(maxseq>0);
+    assert(maxelem>0);
+    assert(nseq);
+    assert(nelem);
+    assert(off);
+    assert(len);
+
+    /* Determine the actual number of elements to use */
+    H5_CHECK_OVERFLOW(iter->elmt_left,hsize_t,size_t);
+    elem_used=MIN(maxelem,(size_t)iter->elmt_left);
+
+    /* Compute the offset in the dataset */
+    off[0]=iter->u.all.byte_offset;
+    len[0]=elem_used*iter->elmt_size;
+
+    /* Should only need one sequence for 'all' selections */
+    *nseq=1;
+
+    /* Set the number of elements used */
+    *nelem=elem_used;
+
+    /* Update the iterator */
+    iter->elmt_left-=elem_used;
+    iter->u.all.elmt_offset+=elem_used;
+    iter->u.all.byte_offset+=len[0];
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5S_all_get_seq_list() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Shyper.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Shyper.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Shyper.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,7031 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Thursday, June 18, 1998
+ *
+ * Purpose:	Hyperslab selection data space I/O functions.
+ */
+
+#define H5S_PACKAGE		/*suppress error about including H5Spkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			  */
+#include "H5Eprivate.h"		/* Error handling		  */
+#include "H5FLprivate.h"	/* Free Lists	  */
+#include "H5Iprivate.h"		/* ID Functions		  */
+#include "H5Spkg.h"		/* Dataspace functions			  */
+#include "H5Vprivate.h"         /* Vector functions */
+
+/* Local datatypes */
+
+/* Static function prototypes */
+static herr_t H5S_hyper_free_span_info (H5S_hyper_span_info_t *span_info);
+static herr_t H5S_hyper_free_span (H5S_hyper_span_t *span);
+static H5S_hyper_span_info_t *H5S_hyper_copy_span (H5S_hyper_span_info_t *spans);
+static herr_t H5S_hyper_span_scratch (H5S_hyper_span_info_t *spans, void *scr_value);
+static herr_t H5S_hyper_span_precompute (H5S_hyper_span_info_t *spans, size_t elmt_size);
+static herr_t H5S_generate_hyperslab (H5S_t *space, H5S_seloper_t op,
+    const hsize_t start[], const hsize_t stride[], const hsize_t count[], const hsize_t block[]);
+static herr_t H5S_hyper_generate_spans(H5S_t *space);
+
+/* Selection callbacks */
+static herr_t H5S_hyper_copy(H5S_t *dst, const H5S_t *src, hbool_t share_selection);
+static herr_t H5S_hyper_get_seq_list(const H5S_t *space, unsigned flags,
+    H5S_sel_iter_t *iter, size_t maxseq, size_t maxbytes,
+    size_t *nseq, size_t *nbytes, hsize_t *off, size_t *len);
+static herr_t H5S_hyper_release(H5S_t *space);
+static htri_t H5S_hyper_is_valid(const H5S_t *space);
+static hssize_t H5S_hyper_serial_size(const H5S_t *space);
+static herr_t H5S_hyper_serialize(const H5S_t *space, uint8_t *buf);
+static herr_t H5S_hyper_deserialize(H5S_t *space, const uint8_t *buf);
+static herr_t H5S_hyper_bounds(const H5S_t *space, hsize_t *start, hsize_t *end);
+static htri_t H5S_hyper_is_contiguous(const H5S_t *space);
+static htri_t H5S_hyper_is_single(const H5S_t *space);
+static htri_t H5S_hyper_is_regular(const H5S_t *space);
+static herr_t H5S_hyper_iter_init(H5S_sel_iter_t *iter, const H5S_t *space);
+
+/* Selection iteration callbacks */
+static herr_t H5S_hyper_iter_coords(const H5S_sel_iter_t *iter, hsize_t *coords);
+static herr_t H5S_hyper_iter_block(const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end);
+static hsize_t H5S_hyper_iter_nelmts(const H5S_sel_iter_t *iter);
+static htri_t H5S_hyper_iter_has_next_block(const H5S_sel_iter_t *sel_iter);
+static herr_t H5S_hyper_iter_next(H5S_sel_iter_t *sel_iter, size_t nelem);
+static herr_t H5S_hyper_iter_next_block(H5S_sel_iter_t *sel_iter);
+static herr_t H5S_hyper_iter_release(H5S_sel_iter_t *sel_iter);
+
+/* Selection properties for hyperslab selections */
+const H5S_select_class_t H5S_sel_hyper[1] = {{
+    H5S_SEL_HYPERSLABS,
+
+    /* Methods on selection */
+    H5S_hyper_copy,
+    H5S_hyper_get_seq_list,
+    H5S_hyper_release,
+    H5S_hyper_is_valid,
+    H5S_hyper_serial_size,
+    H5S_hyper_serialize,
+    H5S_hyper_deserialize,
+    H5S_hyper_bounds,
+    H5S_hyper_is_contiguous,
+    H5S_hyper_is_single,
+    H5S_hyper_is_regular,
+    H5S_hyper_iter_init,
+}};
+
+/* Iteration properties for hyperslab selections */
+static const H5S_sel_iter_class_t H5S_sel_iter_hyper[1] = {{
+    H5S_SEL_HYPERSLABS,
+
+    /* Methods on selection iterator */
+    H5S_hyper_iter_coords,
+    H5S_hyper_iter_block,
+    H5S_hyper_iter_nelmts,
+    H5S_hyper_iter_has_next_block,
+    H5S_hyper_iter_next,
+    H5S_hyper_iter_next_block,
+    H5S_hyper_iter_release,
+}};
+
+/* Static variables */
+
+/* Array for default stride, block, etc. */
+static const hsize_t _ones[H5O_LAYOUT_NDIMS]={
+    1,1,1,1, 1,1,1,1,
+    1,1,1,1, 1,1,1,1,
+    1,1,1,1, 1,1,1,1,
+    1,1,1,1, 1,1,1,1,1};
+
+/* Declare a free list to manage the H5S_hyper_sel_t struct */
+H5FL_DEFINE_STATIC(H5S_hyper_sel_t);
+
+/* Declare a free list to manage the H5S_hyper_span_t struct */
+H5FL_DEFINE_STATIC(H5S_hyper_span_t);
+
+/* Declare a free list to manage the H5S_hyper_span_info_t struct */
+H5FL_DEFINE_STATIC(H5S_hyper_span_info_t);
+
+/* #define H5S_HYPER_DEBUG */
+#ifdef H5S_HYPER_DEBUG
+static herr_t
+H5S_hyper_print_spans_helper(FILE *f, struct H5S_hyper_span_t *span,unsigned depth)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_print_spans_helper);
+
+    while(span) {
+        HDfprintf(f,"%s: depth=%u, span=%p, (%d, %d), nelem=%u, pstride=%u\n",FUNC,depth,span,(int)span->low,(int)span->high,(unsigned)span->nelem,(unsigned)span->pstride);
+        if(span->down && span->down->head) {
+            HDfprintf(f,"%s: spans=%p, count=%u, scratch=%p, head=%p\n",FUNC,span->down,span->down->count,span->down->scratch,span->down->head);
+            H5S_hyper_print_spans_helper(f,span->down->head,depth+1);
+        } /* end if */
+        span=span->next;
+    } /* end while */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+herr_t
+H5S_hyper_print_spans(FILE *f, const struct H5S_hyper_span_info_t *span_lst)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_print_spans);
+
+    if(span_lst!=NULL) {
+        HDfprintf(f,"%s: spans=%p, count=%u, scratch=%p, head=%p\n",FUNC,span_lst,span_lst->count,span_lst->scratch,span_lst->head);
+        H5S_hyper_print_spans_helper(f,span_lst->head,0);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+herr_t
+H5S_space_print_spans(FILE *f, const H5S_t *space)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_space_print_spans);
+
+    H5S_hyper_print_spans(f,space->select.sel_info.hslab->span_lst);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+static herr_t
+H5S_hyper_print_diminfo_helper(FILE *f, const char *field, unsigned ndims, const H5S_hyper_dim_t *dinfo)
+{
+    unsigned u;                 /* Local index variable */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_print_diminfo_helper);
+
+    if(dinfo!=NULL) {
+        HDfprintf(f,"%s: %s: start=[",FUNC,field);
+        for(u=0; u<ndims; u++)
+            HDfprintf(f,"%Hd%s",dinfo[u].start, (u<(ndims-1) ? ", " : "]\n"));
+        HDfprintf(f,"%s: %s: stride=[",FUNC,field);
+        for(u=0; u<ndims; u++)
+            HDfprintf(f,"%Hu%s",dinfo[u].stride, (u<(ndims-1) ? ", " : "]\n"));
+        HDfprintf(f,"%s: %s: count=[",FUNC,field);
+        for(u=0; u<ndims; u++)
+            HDfprintf(f,"%Hu%s",dinfo[u].count, (u<(ndims-1) ? ", " : "]\n"));
+        HDfprintf(f,"%s: %s: block=[",FUNC,field);
+        for(u=0; u<ndims; u++)
+            HDfprintf(f,"%Hu%s",dinfo[u].block, (u<(ndims-1) ? ", " : "]\n"));
+    } /* end if */
+    else
+        HDfprintf(f,"%s: %s==NULL\n",FUNC,field);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+herr_t
+H5S_hyper_print_diminfo(FILE *f, const H5S_t *space)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_print_diminfo);
+
+    H5S_hyper_print_diminfo_helper(f,"opt_diminfo",space->extent.rank,space->select.sel_info.hslab->opt_diminfo);
+    H5S_hyper_print_diminfo_helper(f,"app_diminfo",space->extent.rank,space->select.sel_info.hslab->app_diminfo);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+#endif /* H5S_HYPER_DEBUG */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_hyper_iter_init
+ *
+ * Purpose:	Initializes iteration information for hyperslab span tree selection.
+ *
+ * Return:	non-negative on success, negative on failure.
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, February 24, 2001
+ *
+ * Notes:       If the 'elmt_size' parameter is set to zero, the regular
+ *              hyperslab selection iterator will not be 'flattened'.  This
+ *              is used by the H5S_select_shape_same() code to avoid changing
+ *              the rank and appearance of the selection.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_hyper_iter_init(H5S_sel_iter_t *iter, const H5S_t *space)
+{
+    const H5S_hyper_dim_t *tdiminfo;    /* Temporary pointer to diminfo information */
+    H5S_hyper_span_info_t *spans;   /* Pointer to hyperslab span info node */
+    unsigned rank;                  /* Dataspace's dimension rank */
+    unsigned u;                     /* Index variable */
+    int i;                          /* Index variable */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_hyper_iter_init);
+
+    /* Check args */
+    assert(space && H5S_SEL_HYPERSLABS==H5S_GET_SELECT_TYPE(space));
+    assert(iter);
+
+    /* Initialize the number of points to iterate over */
+    iter->elmt_left=space->select.num_elem;
+    iter->u.hyp.iter_rank=0;
+
+    /* Get the rank of the dataspace */
+    rank=space->extent.rank;
+
+    /* Set the temporary pointer to the dimension information */
+    tdiminfo=space->select.sel_info.hslab->opt_diminfo;
+
+    /* Check for the special case of just one H5Sselect_hyperslab call made */
+    if(space->select.sel_info.hslab->diminfo_valid) {
+/* Initialize the information needed for regular hyperslab I/O */
+        const hsize_t *mem_size;    /* Temporary pointer to dataspace extent's dimension sizes */
+        hsize_t acc;                /* Accumulator for "flattened" dimension's sizes */
+        unsigned cont_dim=0;        /* # of contiguous dimensions */
+
+        /* Set the temporary pointer to the dataspace extent's dimension sizes */
+        mem_size=space->extent.size;
+
+        /*
+         * For a regular hyperslab to be contiguous up to some dimension, it
+         * must have only one block (i.e. count==1 in all dimensions up to that
+         * dimension) and the block size must be the same as the dataspace's
+         * extent in that dimension and all dimensions up to that dimension.
+         */
+
+        /* Don't flatten adjacent elements into contiguous block if the
+         * element size is 0.  This is for the H5S_select_shape_same() code.
+         */
+        if(iter->elmt_size>0) {
+            /* Check for any "contiguous" blocks that can be flattened */
+            for(u=rank-1; u>0; u--) {
+                if(tdiminfo[u].count==1 && tdiminfo[u].block==mem_size[u])
+                    cont_dim++;
+            } /* end for */
+        } /* end if */
+
+        /* Check if the regular selection can be "flattened" */
+        if(cont_dim>0) {
+            unsigned last_dim_flattened=1;      /* Flag to indicate that the last dimension was flattened */
+            unsigned flat_rank=rank-cont_dim;   /* Number of dimensions after flattening */
+            unsigned curr_dim;                  /* Current dimension */
+
+            /* Set the iterator's rank to the contiguous dimensions */
+            iter->u.hyp.iter_rank=flat_rank;
+
+            /* "Flatten" dataspace extent and selection information */
+            curr_dim=flat_rank-1;
+            for(i=rank-1, acc=1; i>=0; i--) {
+                if(tdiminfo[i].block==mem_size[i] && i>0) {
+                    /* "Flatten" this dimension */
+                    assert(tdiminfo[i].start==0);
+                    acc *= mem_size[i];
+
+                    /* Indicate that the dimension was flattened */
+                    last_dim_flattened=1;
+                } /* end if */
+                else {
+                    if(last_dim_flattened) {
+                        /* First dimension after flattened dimensions */
+                        iter->u.hyp.diminfo[curr_dim].start = tdiminfo[i].start*acc;
+                        /* Special case for single block regular selections */
+                        if(tdiminfo[i].count==1)
+                            iter->u.hyp.diminfo[curr_dim].stride = 1;
+                        else
+                            iter->u.hyp.diminfo[curr_dim].stride = tdiminfo[i].stride*acc;
+                        iter->u.hyp.diminfo[curr_dim].count = tdiminfo[i].count;
+                        iter->u.hyp.diminfo[curr_dim].block = tdiminfo[i].block*acc;
+                        iter->u.hyp.size[curr_dim] = mem_size[i]*acc;
+                        iter->u.hyp.sel_off[curr_dim] = space->select.offset[i]*acc;
+
+                        /* Reset the "last dim flattened" flag to avoid flattened any further dimensions */
+                        last_dim_flattened=0;
+
+                        /* Reset the "accumulator" for possible further dimension flattening */
+                        acc=1;
+                    } /* end if */
+                    else {
+                        /* All other dimensions */
+                        iter->u.hyp.diminfo[curr_dim].start = tdiminfo[i].start;
+                        iter->u.hyp.diminfo[curr_dim].stride = tdiminfo[i].stride;
+                        iter->u.hyp.diminfo[curr_dim].count = tdiminfo[i].count;
+                        iter->u.hyp.diminfo[curr_dim].block = tdiminfo[i].block;
+                        iter->u.hyp.size[curr_dim] = mem_size[i];
+                        iter->u.hyp.sel_off[curr_dim] = space->select.offset[i];
+                    } /* end else */
+
+                    /* Decrement "current" flattened dimension */
+                    curr_dim--;
+                } /* end if */
+            } /* end for */
+
+            /* Initialize "flattened" iterator offset to initial location and dataspace extent and selection information to correct values */
+            for(u=0; u<flat_rank; u++)
+                iter->u.hyp.off[u]=iter->u.hyp.diminfo[u].start;
+        } /* end if */
+        else {
+            /* Initialize position to initial location */
+            /* Also make local copy of the regular selection information */
+            for(u=0; u<rank; u++) {
+                /* Regular selection information */
+                iter->u.hyp.diminfo[u].start = tdiminfo[u].start;
+                iter->u.hyp.diminfo[u].stride = tdiminfo[u].stride;
+                iter->u.hyp.diminfo[u].count = tdiminfo[u].count;
+                iter->u.hyp.diminfo[u].block = tdiminfo[u].block;
+
+                /* Position information */
+                iter->u.hyp.off[u]=tdiminfo[u].start;
+            } /* end if */
+        } /* end else */
+
+        /* Flag the diminfo information as valid in the iterator */
+        iter->u.hyp.diminfo_valid=TRUE;
+
+        /* Initialize irregular region information also (for release) */
+        iter->u.hyp.spans=NULL;
+    } /* end if */
+    else {
+/* Initialize the information needed for non-regular hyperslab I/O */
+        assert(space->select.sel_info.hslab->span_lst);
+        /* Make a copy of the span tree to iterate over */
+        iter->u.hyp.spans=H5S_hyper_copy_span(space->select.sel_info.hslab->span_lst);
+
+        /* Set the nelem & pstride values according to the element size */
+        H5S_hyper_span_precompute(iter->u.hyp.spans,iter->elmt_size);
+
+        /* Initialize the starting span_info's and spans */
+        spans=iter->u.hyp.spans;
+        for(u=0; u<rank; u++) {
+            /* Set the pointers to the initial span in each dimension */
+            assert(spans);
+            assert(spans->head);
+
+            /* Set the pointer to the first span in the list for this node */
+            iter->u.hyp.span[u] = spans->head;
+
+            /* Set the initial offset to low bound of span */
+            iter->u.hyp.off[u]=iter->u.hyp.span[u]->low;
+
+            /* Get the pointer to the next level down */
+            spans=spans->head->down;
+        } /* end for */
+
+        /* Flag the diminfo information as not valid in the iterator */
+        iter->u.hyp.diminfo_valid=FALSE;
+
+    } /* end else */
+
+    /* Initialize type of selection iterator */
+    iter->type=H5S_sel_iter_hyper;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_hyper_iter_init() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_hyper_iter_coords
+ *
+ * Purpose:	Retrieve the current coordinates of iterator for current
+ *              selection
+ *
+ * Return:	non-negative on success, negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, April 22, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_hyper_iter_coords (const H5S_sel_iter_t *iter, hsize_t *coords)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_iter_coords);
+
+    /* Check args */
+    assert (iter);
+    assert (coords);
+
+    /* Copy the offset of the current point */
+
+    /* Check for a single "regular" hyperslab */
+    if(iter->u.hyp.diminfo_valid) {
+        /* Check if this is a "flattened" regular hyperslab selection */
+        if(iter->u.hyp.iter_rank!=0 && iter->u.hyp.iter_rank<iter->rank) {
+            unsigned flat_dim;  /* The rank of the flattened dimension */
+
+            /* Get the rank of the flattened dimension */
+            flat_dim=iter->u.hyp.iter_rank-1;
+
+            /* Copy the coordinates up to where things got flattened */
+            HDmemcpy(coords,iter->u.hyp.off,sizeof(hsize_t)*flat_dim);
+
+            /* Compute the coordinates for the flattened dimensions */
+            H5V_array_calc(iter->u.hyp.off[flat_dim],iter->rank-flat_dim,&(iter->dims[flat_dim]),&(coords[flat_dim]));
+        } /* end if */
+        else
+            HDmemcpy(coords,iter->u.hyp.off,sizeof(hsize_t)*iter->rank);
+    } /* end if */
+    else
+        HDmemcpy(coords,iter->u.hyp.off,sizeof(hsize_t)*iter->rank);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_hyper_iter_coords() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_hyper_iter_block
+ *
+ * Purpose:	Retrieve the current block of iterator for current
+ *              selection
+ *
+ * Return:	non-negative on success, negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, June 2, 2003
+ *
+ * Notes:       This routine assumes that the iterator is always located at
+ *              the beginning of a block.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_hyper_iter_block (const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end)
+{
+    unsigned u;                 /* Local index variable */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_iter_block);
+
+    /* Check args */
+    assert (iter);
+    assert (start);
+    assert (end);
+
+    /* Copy the offset of the current point */
+
+    /* Check for a single "regular" hyperslab */
+    if(iter->u.hyp.diminfo_valid) {
+        /* Compute the end of the block */
+        for(u=0; u<iter->rank; u++) {
+            start[u]=iter->u.hyp.off[u];
+            end[u]=(start[u]+iter->u.hyp.diminfo[u].block)-1;
+        } /* end for */
+    } /* end if */
+    else {
+        /* Copy the start of the block */
+        for(u=0; u<iter->rank; u++)
+            start[u]=iter->u.hyp.span[u]->low;
+
+        /* Copy the end of the block */
+        for(u=0; u<iter->rank; u++)
+            end[u]=iter->u.hyp.span[u]->high;
+    } /* end else */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_hyper_iter_block() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_hyper_iter_nelmts
+ *
+ * Purpose:	Return number of elements left to process in iterator
+ *
+ * Return:	non-negative number of elements on success, zero on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, June 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hsize_t
+H5S_hyper_iter_nelmts (const H5S_sel_iter_t *iter)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_iter_nelmts);
+
+    /* Check args */
+    assert (iter);
+
+    FUNC_LEAVE_NOAPI(iter->elmt_left);
+}   /* H5S_hyper_iter_nelmts() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_iter_has_next_block
+ PURPOSE
+    Check if there is another block left in the current iterator
+ USAGE
+    htri_t H5S_hyper_iter_has_next_block(iter)
+        const H5S_sel_iter_t *iter;       IN: Pointer to selection iterator
+ RETURNS
+    Non-negative (TRUE/FALSE) on success/Negative on failure
+ DESCRIPTION
+    Check if there is another block available in the selection iterator.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_hyper_iter_has_next_block(const H5S_sel_iter_t *iter)
+{
+    unsigned u;                 /* Local index variable */
+    herr_t ret_value=FALSE;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_iter_has_next_block);
+
+    /* Check args */
+    assert (iter);
+
+    /* Check for a single "regular" hyperslab */
+    if(iter->u.hyp.diminfo_valid) {
+        const H5S_hyper_dim_t *tdiminfo;    /* Temporary pointer to diminfo information */
+        const hsize_t *toff;               /* Temporary offset in selection */
+
+        /* Check if the offset of the iterator is at the last location in all dimensions */
+        tdiminfo=iter->u.hyp.diminfo;
+        toff=iter->u.hyp.off;
+        for(u=0; u<iter->rank; u++) {
+            /* If there is only one block, continue */
+            if(tdiminfo[u].count==1)
+                continue;
+            if(toff[u]!=(tdiminfo[u].start+((tdiminfo[u].count-1)*tdiminfo[u].stride)))
+                HGOTO_DONE(TRUE);
+        } /* end for */
+    } /* end if */
+    else {
+        /* Check for any levels of the tree with more sequences in them */
+        for(u=0; u<iter->rank; u++)
+            if(iter->u.hyp.span[u]->next!=NULL)
+                HGOTO_DONE(TRUE);
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_iter_has_next_block() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_hyper_iter_next
+ *
+ * Purpose:	Moves a hyperslab iterator to the beginning of the next sequence
+ *      of elements to read.  Handles walking off the end in all dimensions.
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, September 8, 2000
+ *
+ * Modifications:
+ *      Modified for both general and optimized hyperslab I/O
+ *      Quincey Koziol, April 17, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_hyper_iter_next(H5S_sel_iter_t *iter, size_t nelem)
+{
+    unsigned ndims;     /* Number of dimensions of dataset */
+    int fast_dim;       /* Rank of the fastest changing dimension for the dataspace */
+    unsigned i;         /* Counters */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_iter_next);
+
+    /* Check for the special case of just one H5Sselect_hyperslab call made */
+    /* (i.e. a regular hyperslab selection */
+    if(iter->u.hyp.diminfo_valid) {
+        const H5S_hyper_dim_t *tdiminfo;    /* Temporary pointer to diminfo information */
+        hsize_t iter_offset[H5O_LAYOUT_NDIMS];
+        hsize_t iter_count[H5O_LAYOUT_NDIMS];
+        int temp_dim;  /* Temporary rank holder */
+
+        /* Check if this is a "flattened" regular hyperslab selection */
+        if(iter->u.hyp.iter_rank!=0 && iter->u.hyp.iter_rank<iter->rank) {
+            /* Set the aliases for the dimension rank */
+            ndims=iter->u.hyp.iter_rank;
+        } /* end if */
+        else {
+            /* Set the aliases for the dimension rank */
+            ndims=iter->rank;
+        } /* end else */
+
+        /* Set the fastest dimension rank */
+        fast_dim=ndims-1;
+
+        /* Set the local copy of the diminfo pointer */
+        tdiminfo=iter->u.hyp.diminfo;
+
+        /* Calculate the offset and block count for each dimension */
+        for(i=0; i<ndims; i++) {
+            if(tdiminfo[i].count==1) {
+                iter_offset[i]=iter->u.hyp.off[i]-tdiminfo[i].start;
+                iter_count[i]=0;
+            } /* end if */
+            else {
+                iter_offset[i]=(iter->u.hyp.off[i]-tdiminfo[i].start)%tdiminfo[i].stride;
+                iter_count[i]=(iter->u.hyp.off[i]-tdiminfo[i].start)/tdiminfo[i].stride;
+            } /* end else */
+        } /* end for */
+
+        /* Loop through, advancing the offset & counts, until all the nelements are accounted for */
+        while(nelem>0) {
+            /* Start with the fastest changing dimension */
+            temp_dim=fast_dim;
+            while(temp_dim>=0) {
+                if(temp_dim==fast_dim) {
+                    size_t actual_elem;     /* Actual # of elements advanced on each iteration through loop */
+                    hsize_t block_elem;     /* Number of elements left in a block */
+
+                    /* Compute the number of elements left in block */
+                    block_elem=tdiminfo[temp_dim].block-iter_offset[temp_dim];
+
+                    /* Compute the number of actual elements to advance */
+                    actual_elem=(size_t)MIN(nelem,block_elem);
+
+                    /* Move the iterator over as many elements as possible */
+                    iter_offset[temp_dim]+=actual_elem;
+
+                    /* Decrement the number of elements advanced */
+                    nelem-=actual_elem;
+                } /* end if */
+                else {
+                    /* Move to the next row in the current dimension */
+                    iter_offset[temp_dim]++;
+                } /* end else */
+
+                /* If this block is still in the range of blocks to output for the dimension, break out of loop */
+                if(iter_offset[temp_dim]<tdiminfo[temp_dim].block)
+                    break;
+                else {
+                    /* Move to the next block in the current dimension */
+                    iter_offset[temp_dim]=0;
+                    iter_count[temp_dim]++;
+
+                    /* If this block is still in the range of blocks to output for the dimension, break out of loop */
+                    if(iter_count[temp_dim]<tdiminfo[temp_dim].count)
+                        break;
+                    else
+                        iter_count[temp_dim]=0; /* reset back to the beginning of the line */
+                } /* end else */
+
+                /* Decrement dimension count */
+                temp_dim--;
+            } /* end while */
+        } /* end while */
+
+        /* Translate current iter_offset and iter_count into iterator position */
+        for(i=0; i<ndims; i++)
+            iter->u.hyp.off[i]=tdiminfo[i].start+(tdiminfo[i].stride*iter_count[i])+iter_offset[i];
+    } /* end if */
+    /* Must be an irregular hyperslab selection */
+    else {
+        H5S_hyper_span_t *curr_span;    /* Current hyperslab span node */
+        H5S_hyper_span_t **ispan;       /* Iterator's hyperslab span nodes */
+        hsize_t *abs_arr;              /* Absolute hyperslab span position */
+        int curr_dim;                   /* Temporary rank holder */
+
+        /* Set the rank of the fastest changing dimension */
+        ndims=iter->rank;
+        fast_dim=(ndims-1);
+
+        /* Get the pointers to the current span info and span nodes */
+        abs_arr=iter->u.hyp.off;
+        ispan=iter->u.hyp.span;
+
+        /* Loop through, advancing the span information, until all the nelements are accounted for */
+        while(nelem>0) {
+            /* Start at the fastest dim */
+            curr_dim=fast_dim;
+
+            /* Work back up through the dimensions */
+            while(curr_dim>=0) {
+                /* Reset the current span */
+                curr_span=ispan[curr_dim];
+
+                /* Increment absolute position */
+                if(curr_dim==fast_dim) {
+                    size_t actual_elem;     /* Actual # of elements advanced on each iteration through loop */
+                    hsize_t span_elem;      /* Number of elements left in a span */
+
+                    /* Compute the number of elements left in block */
+                    span_elem=(curr_span->high-abs_arr[curr_dim])+1;
+
+                    /* Compute the number of actual elements to advance */
+                    actual_elem=(size_t)MIN(nelem,span_elem);
+
+                    /* Move the iterator over as many elements as possible */
+                    abs_arr[curr_dim]+=actual_elem;
+
+                    /* Decrement the number of elements advanced */
+                    nelem-=actual_elem;
+                } /* end if */
+                else {
+                    /* Move to the next row in the current dimension */
+                    abs_arr[curr_dim]++;
+                } /* end else */
+
+                /* Check if we are still within the span */
+                if(abs_arr[curr_dim]<=curr_span->high) {
+                    break;
+                } /* end if */
+                /* If we walked off that span, advance to the next span */
+                else {
+                    /* Advance span in this dimension */
+                    curr_span=curr_span->next;
+
+                    /* Check if we have a valid span in this dimension still */
+                    if(curr_span!=NULL) {
+                        /* Reset the span in the current dimension */
+                        ispan[curr_dim]=curr_span;
+
+                        /* Reset absolute position */
+                        abs_arr[curr_dim]=curr_span->low;
+
+                        break;
+                    } /* end if */
+                    else {
+                        /* If we finished the span list in this dimension, decrement the dimension worked on and loop again */
+                        curr_dim--;
+                    } /* end else */
+                } /* end else */
+            } /* end while */
+
+            /* Check if we are finished with the spans in the tree */
+            if(curr_dim>=0) {
+                /* Walk back down the iterator positions, reseting them */
+                while(curr_dim<fast_dim) {
+                    assert(curr_span);
+                    assert(curr_span->down);
+                    assert(curr_span->down->head);
+
+                    /* Increment current dimension */
+                    curr_dim++;
+
+                    /* Set the new span_info & span for this dimension */
+                    ispan[curr_dim]=curr_span->down->head;
+
+                    /* Advance span down the tree */
+                    curr_span=curr_span->down->head;
+
+                    /* Reset the absolute offset for the dim */
+                    abs_arr[curr_dim]=curr_span->low;
+                } /* end while */
+
+                /* Verify that the curr_span points to the fastest dim */
+                assert(curr_span==ispan[fast_dim]);
+            } /* end if */
+        } /* end while */
+    } /* end else */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* H5S_hyper_iter_next() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_hyper_iter_next_block
+ *
+ * Purpose:	Moves a hyperslab iterator to the beginning of the next sequence
+ *      of elements to read.  Handles walking off the end in all dimensions.
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, June 3, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_hyper_iter_next_block(H5S_sel_iter_t *iter)
+{
+    unsigned ndims;     /* Number of dimensions of dataset */
+    int fast_dim;       /* Rank of the fastest changing dimension for the dataspace */
+    unsigned u;         /* Counters */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_iter_next_block);
+
+    /* Check for the special case of just one H5Sselect_hyperslab call made */
+    /* (i.e. a regular hyperslab selection */
+    if(iter->u.hyp.diminfo_valid) {
+        const H5S_hyper_dim_t *tdiminfo;    /* Temporary pointer to diminfo information */
+        hsize_t iter_offset[H5O_LAYOUT_NDIMS];
+        hsize_t iter_count[H5O_LAYOUT_NDIMS];
+        int temp_dim;  /* Temporary rank holder */
+
+        /* Check if this is a "flattened" regular hyperslab selection */
+        if(iter->u.hyp.iter_rank!=0 && iter->u.hyp.iter_rank<iter->rank) {
+            /* Set the aliases for the dimension rank */
+            ndims=iter->u.hyp.iter_rank;
+        } /* end if */
+        else {
+            /* Set the aliases for the dimension rank */
+            ndims=iter->rank;
+        } /* end else */
+
+        /* Set the fastest dimension rank */
+        fast_dim=ndims-1;
+
+        /* Set the local copy of the diminfo pointer */
+        tdiminfo=iter->u.hyp.diminfo;
+
+        /* Calculate the offset and block count for each dimension */
+        for(u=0; u<ndims; u++) {
+            if(tdiminfo[u].count==1) {
+                iter_offset[u]=iter->u.hyp.off[u]-tdiminfo[u].start;
+                iter_count[u]=0;
+            } /* end if */
+            else {
+                iter_offset[u]=(iter->u.hyp.off[u]-tdiminfo[u].start)%tdiminfo[u].stride;
+                iter_count[u]=(iter->u.hyp.off[u]-tdiminfo[u].start)/tdiminfo[u].stride;
+            } /* end else */
+        } /* end for */
+
+        /* Advance one block */
+        temp_dim=fast_dim; /* Start with the fastest changing dimension */
+        while(temp_dim>=0) {
+            if(temp_dim==fast_dim) {
+                /* Move iterator over current block */
+                iter_offset[temp_dim]+=tdiminfo[temp_dim].block;
+            } /* end if */
+            else {
+                /* Move to the next row in the current dimension */
+                iter_offset[temp_dim]++;
+            } /* end else */
+
+            /* If this block is still in the range of blocks to output for the dimension, break out of loop */
+            if(iter_offset[temp_dim]<tdiminfo[temp_dim].block)
+                break;
+            else {
+                /* Move to the next block in the current dimension */
+                iter_offset[temp_dim]=0;
+                iter_count[temp_dim]++;
+
+                /* If this block is still in the range of blocks to output for the dimension, break out of loop */
+                if(iter_count[temp_dim]<tdiminfo[temp_dim].count)
+                    break;
+                else
+                    iter_count[temp_dim]=0; /* reset back to the beginning of the line */
+            } /* end else */
+
+            /* Decrement dimension count */
+            temp_dim--;
+        } /* end while */
+
+        /* Translate current iter_offset and iter_count into iterator position */
+        for(u=0; u<ndims; u++)
+            iter->u.hyp.off[u]=tdiminfo[u].start+(tdiminfo[u].stride*iter_count[u])+iter_offset[u];
+    } /* end if */
+    /* Must be an irregular hyperslab selection */
+    else {
+        H5S_hyper_span_t *curr_span;    /* Current hyperslab span node */
+        H5S_hyper_span_t **ispan;       /* Iterator's hyperslab span nodes */
+        hsize_t *abs_arr;              /* Absolute hyperslab span position */
+        int curr_dim;                   /* Temporary rank holder */
+
+        /* Set the rank of the fastest changing dimension */
+        ndims=iter->rank;
+        fast_dim=(ndims-1);
+
+        /* Get the pointers to the current span info and span nodes */
+        abs_arr=iter->u.hyp.off;
+        ispan=iter->u.hyp.span;
+
+        /* Loop through, advancing the span information, until all the nelements are accounted for */
+        curr_dim=fast_dim; /* Start at the fastest dim */
+
+        /* Work back up through the dimensions */
+        while(curr_dim>=0) {
+            /* Reset the current span */
+            curr_span=ispan[curr_dim];
+
+            /* Increment absolute position */
+            if(curr_dim==fast_dim) {
+                /* Move the iterator over rest of element in span */
+                abs_arr[curr_dim]=curr_span->high+1;
+            } /* end if */
+            else {
+                /* Move to the next row in the current dimension */
+                abs_arr[curr_dim]++;
+            } /* end else */
+
+            /* Check if we are still within the span */
+            if(abs_arr[curr_dim]<=curr_span->high) {
+                break;
+            } /* end if */
+            /* If we walked off that span, advance to the next span */
+            else {
+                /* Advance span in this dimension */
+                curr_span=curr_span->next;
+
+                /* Check if we have a valid span in this dimension still */
+                if(curr_span!=NULL) {
+                    /* Reset the span in the current dimension */
+                    ispan[curr_dim]=curr_span;
+
+                    /* Reset absolute position */
+                    abs_arr[curr_dim]=curr_span->low;
+
+                    break;
+                } /* end if */
+                else {
+                    /* If we finished the span list in this dimension, decrement the dimension worked on and loop again */
+                    curr_dim--;
+                } /* end else */
+            } /* end else */
+        } /* end while */
+
+        /* Check if we are finished with the spans in the tree */
+        if(curr_dim>=0) {
+            /* Walk back down the iterator positions, reseting them */
+            while(curr_dim<fast_dim) {
+                assert(curr_span);
+                assert(curr_span->down);
+                assert(curr_span->down->head);
+
+                /* Increment current dimension */
+                curr_dim++;
+
+                /* Set the new span_info & span for this dimension */
+                ispan[curr_dim]=curr_span->down->head;
+
+                /* Advance span down the tree */
+                curr_span=curr_span->down->head;
+
+                /* Reset the absolute offset for the dim */
+                abs_arr[curr_dim]=curr_span->low;
+            } /* end while */
+
+            /* Verify that the curr_span points to the fastest dim */
+            assert(curr_span==ispan[fast_dim]);
+        } /* end if */
+    } /* end else */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* H5S_hyper_iter_next() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_iter_release
+ PURPOSE
+    Release hyperslab selection iterator information for a dataspace
+ USAGE
+    herr_t H5S_hyper_iter_release(iter)
+        H5S_sel_iter_t *iter;       IN: Pointer to selection iterator
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Releases all information for a dataspace hyperslab selection iterator
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_iter_release (H5S_sel_iter_t *iter)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_iter_release);
+
+    /* Check args */
+    assert (iter);
+
+/* Release the information needed for non-regular hyperslab I/O */
+    /* Free the copy of the selections span tree */
+    if(iter->u.hyp.spans!=NULL)
+        H5S_hyper_free_span_info(iter->u.hyp.spans);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_hyper_iter_release() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_new_span
+ PURPOSE
+    Make a new hyperslab span node
+ USAGE
+    H5S_hyper_span_t *H5S_hyper_new_span(low, high, down, next)
+        hsize_t low, high;         IN: Low and high bounds for new span node
+        H5S_hyper_span_info_t *down;     IN: Down span tree for new node
+        H5S_hyper_span_t *next;     IN: Next span for new node
+ RETURNS
+    Pointer to next span node on success, NULL on failure
+ DESCRIPTION
+    Allocate and initialize a new hyperslab span node, filling in the low &
+    high bounds, the down span and next span pointers also.  Increment the
+    reference count of the 'down span' if applicable.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5S_hyper_span_t *
+H5S_hyper_new_span (hsize_t low, hsize_t high, H5S_hyper_span_info_t *down, H5S_hyper_span_t *next)
+{
+    H5S_hyper_span_t *ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_new_span);
+
+    /* Allocate a new span node */
+    if((ret_value = H5FL_MALLOC(H5S_hyper_span_t))==NULL)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+    /* Copy the span's basic information */
+    ret_value->low=low;
+    ret_value->high=high;
+    ret_value->nelem=(high-low)+1;
+    ret_value->pstride=0;
+    ret_value->down=down;
+    ret_value->next=next;
+
+    /* Increment the reference count of the 'down span' if there is one */
+    if(ret_value->down!=NULL)
+        ret_value->down->count++;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_new_span() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_span_precompute_helper
+ PURPOSE
+    Helper routine to precompute the nelem and pstrides in bytes.
+ USAGE
+    herr_t H5S_hyper_span_precompute_helper(span_info, elmt_size)
+        H5S_hyper_span_info_t *span_info;      IN/OUT: Span tree to work on
+        size_t elmt_size;                      IN: element size to work with
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Change the nelem and pstride values in the span tree from elements to
+    bytes using the elmt_size parameter.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_span_precompute_helper (H5S_hyper_span_info_t *spans, size_t elmt_size)
+{
+    H5S_hyper_span_t *span;     /* Hyperslab span */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_span_precompute_helper);
+
+    assert(spans);
+
+    /* Check if we've already set this down span tree */
+    if(spans->scratch!=(H5S_hyper_span_info_t *)~((size_t)NULL)) {
+        /* Set the tree's scratch pointer */
+        spans->scratch=(H5S_hyper_span_info_t *)~((size_t)NULL);
+
+        /* Set the scratch pointers in all the nodes */
+        span=spans->head;
+
+        /* Loop over all the spans for this down span tree */
+        while(span!=NULL) {
+            /* If there are down spans, set their scratch value also */
+            if(span->down!=NULL) {
+                if(H5S_hyper_span_precompute_helper(span->down,elmt_size)==FAIL)
+                    HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "can't reset hyperslab scratch pointer");
+            } /* end if */
+
+            /* Change the nelem & pstride values into bytes */
+            span->nelem *= elmt_size;
+            span->pstride *= elmt_size;
+
+            /* Advance to next span */
+            span=span->next;
+        } /* end while */
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_span_precompute_helper() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_span_precompute
+ PURPOSE
+    Precompute the nelem and pstrides in bytes.
+ USAGE
+    herr_t H5S_hyper_span_precompute(span_info, elmt_size)
+        H5S_hyper_span_info_t *span_info;      IN/OUT: Span tree to work on
+        size_t elmt_size;                      IN: element size to work with
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Change the nelem and pstride values in the span tree from elements to
+    bytes using the elmt_size parameter.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_span_precompute (H5S_hyper_span_info_t *spans, size_t elmt_size)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_span_precompute);
+
+    assert(spans);
+
+    /* Call the helper routine to actually do the work */
+    if(H5S_hyper_span_precompute_helper(spans,elmt_size)==FAIL)
+        HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "can't precompute span info");
+
+    /* Reset the scratch pointers for the next routine which needs them */
+    if(H5S_hyper_span_scratch(spans,NULL)==FAIL)
+        HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "can't reset hyperslab scratch pointer");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_span_precompute() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_span_scratch
+ PURPOSE
+    Set the scratch pointers on hyperslab span trees
+ USAGE
+    herr_t H5S_hyper_span_scratch(span_info)
+        H5S_hyper_span_info_t *span_info;      IN: Span tree to reset
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Set the scratch pointers on a hyperslab span tree.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_span_scratch (H5S_hyper_span_info_t *spans, void *scr_value)
+{
+    H5S_hyper_span_t *span;     /* Hyperslab span */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_span_scratch);
+
+    assert(spans);
+
+    /* Check if we've already set this down span tree */
+    if(spans->scratch!=scr_value) {
+        /* Set the tree's scratch pointer */
+        spans->scratch=scr_value;
+
+        /* Set the scratch pointers in all the nodes */
+        span=spans->head;
+        while(span!=NULL) {
+            /* If there are down spans, set their scratch value also */
+            if(span->down!=NULL) {
+                if(H5S_hyper_span_scratch(span->down,scr_value)==FAIL)
+                    HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "can't reset hyperslab scratch pointer");
+            } /* end if */
+
+            /* Advance to next span */
+            span=span->next;
+        } /* end while */
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_span_scratch() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_copy_span_helper
+ PURPOSE
+    Helper routine to copy a hyperslab span tree
+ USAGE
+    H5S_hyper_span_info_t * H5S_hyper_copy_span_helper(spans)
+        H5S_hyper_span_info_t *spans;      IN: Span tree to copy
+ RETURNS
+    Pointer to the copied span tree on success, NULL on failure
+ DESCRIPTION
+    Copy a hyperslab span tree, using reference counting as appropriate.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5S_hyper_span_info_t *
+H5S_hyper_copy_span_helper (H5S_hyper_span_info_t *spans)
+{
+    H5S_hyper_span_t *span;         /* Hyperslab span */
+    H5S_hyper_span_t *new_span;     /* Temporary hyperslab span */
+    H5S_hyper_span_t *prev_span;    /* Previous hyperslab span */
+    H5S_hyper_span_info_t *new_down;    /* New down span tree */
+    H5S_hyper_span_info_t *ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_copy_span_helper);
+
+    assert(spans);
+
+    /* Check if the span tree was already copied */
+    if(spans->scratch!=NULL && spans->scratch!=(H5S_hyper_span_info_t *)~((size_t)NULL)) {
+        /* Just return the value of the already copied span tree */
+        ret_value=spans->scratch;
+
+        /* Increment the reference count of the span tree */
+        ret_value->count++;
+    } /* end if */
+    else {
+        /* Allocate a new span_info node */
+        if((ret_value = H5FL_MALLOC(H5S_hyper_span_info_t))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+        /* Copy the span_info information */
+        ret_value->count=1;
+        ret_value->scratch=NULL;
+        ret_value->head=NULL;
+
+        /* Set the scratch pointer in the node being copied to the newly allocated node */
+        spans->scratch=ret_value;
+
+        /* Copy over the nodes in the span list */
+        span=spans->head;
+        prev_span=NULL;
+        while(span!=NULL) {
+            /* Allocate a new node */
+            if((new_span = H5S_hyper_new_span(span->low,span->high,NULL,NULL))==NULL)
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+            /* Append to list of spans */
+            if(prev_span==NULL)
+                ret_value->head=new_span;
+            else
+                prev_span->next=new_span;
+
+            /* Copy the pstride */
+            new_span->pstride=span->pstride;
+
+            /* Recurse to copy the 'down' spans, if there are any */
+            if(span->down!=NULL) {
+                if((new_down = H5S_hyper_copy_span_helper(span->down))==NULL)
+                    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+                new_span->down=new_down;
+            } /* end if */
+
+            /* Update the previous (new) span */
+            prev_span=new_span;
+
+            /* Advance to next span */
+            span=span->next;
+        } /* end while */
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_copy_span_helper() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_copy_span
+ PURPOSE
+    Copy a hyperslab span tree
+ USAGE
+    H5S_hyper_span_info_t * H5S_hyper_copy_span(span_info)
+        H5S_hyper_span_info_t *span_info;      IN: Span tree to copy
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Copy a hyperslab span tree, using reference counting as appropriate.
+    (Which means that just the nodes in the top span tree are duplicated and
+    the reference counts of their 'down spans' are just incremented)
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5S_hyper_span_info_t *
+H5S_hyper_copy_span (H5S_hyper_span_info_t *spans)
+{
+    H5S_hyper_span_info_t *ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_copy_span);
+
+    assert(spans);
+
+    /* Copy the hyperslab span tree */
+    ret_value=H5S_hyper_copy_span_helper(spans);
+
+    /* Reset the scratch pointers for the next routine which needs them */
+    if(H5S_hyper_span_scratch(spans,NULL)==FAIL)
+        HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, NULL, "can't reset span tree scratch pointers");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_copy_span() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_cmp_spans
+ PURPOSE
+    Check if two hyperslab slabs are the same
+ USAGE
+    htri_d H5S_hyper_cmp_spans(span1, span2)
+        H5S_hyper_span_t *span1;    IN: First span tree to compare
+        H5S_hyper_span_t *span2;    IN: Second span tree to compare
+ RETURNS
+    TRUE (1) or FALSE (0) on success, negative on failure
+ DESCRIPTION
+    Compare two hyperslab slabs to determine if they refer to the same
+    selection.  If span1 & span2 are both NULL, that counts as equal
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_hyper_cmp_spans (H5S_hyper_span_info_t *span_info1, H5S_hyper_span_info_t *span_info2)
+{
+    H5S_hyper_span_t *span1;
+    H5S_hyper_span_t *span2;
+    htri_t nest=FAIL;
+    htri_t ret_value=FAIL;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_cmp_spans);
+
+    /* Check for redundant comparison */
+    if(span_info1==span_info2)
+        ret_value=TRUE;
+    else {
+        /* Check for both spans being NULL */
+        if(span_info1==NULL && span_info2==NULL)
+            ret_value=TRUE;
+        else {
+            /* Check for one span being NULL */
+            if(span_info1==NULL || span_info2==NULL)
+                ret_value=FALSE;
+            else {
+                /* Get the pointers to the actual lists of spans */
+                span1=span_info1->head;
+                span2=span_info2->head;
+
+                /* Sanity checking */
+                assert(span1);
+                assert(span2);
+
+                /* infinite loop which must be broken out of */
+                while (1) {
+                    /* Check for both spans being NULL */
+                    if(span1==NULL && span2==NULL) {
+                        ret_value=TRUE;
+                        break;
+                    } /* end if */
+                    else {
+                        /* Check for one span being NULL */
+                        if(span1==NULL || span2==NULL) {
+                            ret_value=FALSE;
+                            break;
+                        } /* end if */
+                        else {
+                            /* Check if the actual low & high span information is the same */
+                            if(span1->low!=span2->low || span1->high!=span2->high) {
+                                ret_value=FALSE;
+                                break;
+                            } /* end if */
+                            else {
+                                if(span1->down!=NULL || span2!=NULL) {
+                                    if((nest=H5S_hyper_cmp_spans(span1->down,span2->down))==FAIL) {
+                                        ret_value=FAIL;
+                                        break;
+                                    } /* end if */
+                                    else {
+                                        if(nest==FALSE) {
+                                            ret_value=FALSE;
+                                            break;
+                                        } /* end if */
+                                        else {
+                                            /* Keep going... */
+                                        } /* end else */
+                                    } /* end else */
+                                } /* end if */
+                                else {
+                                    /* Keep going... */
+                                } /* end else */
+                            } /* end else */
+                        } /* end else */
+                    } /* end else */
+
+                    /* Advance to the next nodes in the span list */
+                    span1=span1->next;
+                    span2=span2->next;
+                } /* end while */
+            } /* end else */
+        } /* end else */
+    } /* end else */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_cmp_spans() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_free_span_info
+ PURPOSE
+    Free a hyperslab span info node
+ USAGE
+    herr_t H5S_hyper_free_span_info(span_info)
+        H5S_hyper_span_info_t *span_info;      IN: Span info node to free
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Free a hyperslab span info node, along with all the span nodes and the
+    'down spans' from the nodes, if reducing their reference count to zero
+    indicates it is appropriate to do so.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_free_span_info (H5S_hyper_span_info_t *span_info)
+{
+    H5S_hyper_span_t *span, *next_span;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_free_span_info);
+
+    assert(span_info);
+
+    /* Decrement the span tree's reference count */
+    span_info->count--;
+
+    /* Free the span tree if the reference count drops to zero */
+    if(span_info->count==0) {
+
+        /* Work through the list of spans pointed to by this 'info' node */
+        span=span_info->head;
+        while(span!=NULL) {
+            next_span=span->next;
+            if(H5S_hyper_free_span(span)<0)
+                HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "failed to release hyperslab span");
+            span=next_span;
+        } /* end while */
+
+        /* Free this span info */
+        H5FL_FREE(H5S_hyper_span_info_t,span_info);
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_free_span_info() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_free_span
+ PURPOSE
+    Free a hyperslab span node
+ USAGE
+    herr_t H5S_hyper_free_span(span)
+        H5S_hyper_span_t *span;      IN: Span node to free
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Free a hyperslab span node, along with the 'down spans' from the node,
+    if reducing their reference count to zero indicates it is appropriate to
+    do so.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_free_span (H5S_hyper_span_t *span)
+{
+    herr_t ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_free_span);
+
+    assert(span);
+
+    /* Decrement the reference count of the 'down spans', freeing them if appropriate */
+    if(span->down!=NULL) {
+        if(H5S_hyper_free_span_info(span->down)<0)
+            HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "failed to release hyperslab span tree");
+    } /* end if */
+
+    /* Free this span */
+    H5FL_FREE(H5S_hyper_span_t,span);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_free_span() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_copy
+ PURPOSE
+    Copy a selection from one dataspace to another
+ USAGE
+    herr_t H5S_hyper_copy(dst, src)
+        H5S_t *dst;  OUT: Pointer to the destination dataspace
+        H5S_t *src;  IN: Pointer to the source dataspace
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Copies all the hyperslab selection information from the source
+    dataspace to the destination dataspace.
+
+    If the SHARE_SELECTION flag is set, then the selection can be shared
+    between the source and destination dataspaces.  (This should only occur in
+    situations where the destination dataspace will immediately change to a new
+    selection)
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_hyper_copy (H5S_t *dst, const H5S_t *src, hbool_t share_selection)
+{
+    H5S_hyper_sel_t *dst_hslab;         /* Pointer to destination hyperslab info */
+    const H5S_hyper_sel_t *src_hslab;   /* Pointer to source hyperslab info */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_NOAPI(H5S_hyper_copy, FAIL);
+
+    assert(src);
+    assert(dst);
+
+    /* Allocate space for the hyperslab selection information */
+    if((dst->select.sel_info.hslab=H5FL_MALLOC(H5S_hyper_sel_t))==NULL)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab info");
+
+    /* Set temporary pointers */
+    dst_hslab=dst->select.sel_info.hslab;
+    src_hslab=src->select.sel_info.hslab;
+
+    /* Copy the hyperslab information */
+    dst_hslab->diminfo_valid=src_hslab->diminfo_valid;
+    if(src_hslab->diminfo_valid) {
+        size_t u;       /* Local index variable */
+
+        for(u=0; u<src->extent.rank; u++) {
+            dst_hslab->opt_diminfo[u]=src_hslab->opt_diminfo[u];
+            dst_hslab->app_diminfo[u]=src_hslab->app_diminfo[u];
+        } /* end for */
+    } /* end if */
+    dst->select.sel_info.hslab->span_lst=src->select.sel_info.hslab->span_lst;
+
+    /* Check if there is hyperslab span information to copy */
+    /* (Regular hyperslab information is copied with the selection structure) */
+    if(src->select.sel_info.hslab->span_lst!=NULL) {
+        if(share_selection) {
+            /* Share the source's span tree by incrementing the reference count on it */
+            dst->select.sel_info.hslab->span_lst->count++;
+        } /* end if */
+        else
+            /* Copy the hyperslab span information */
+            dst->select.sel_info.hslab->span_lst=H5S_hyper_copy_span(src->select.sel_info.hslab->span_lst);
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_hyper_copy() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_is_valid_helper
+ PURPOSE
+    Check whether the selection fits within the extent, with the current
+    offset defined.
+ USAGE
+    htri_t H5S_hyper_is_valid_helper(spans, offset, rank);
+        const H5S_hyper_span_info_t *spans; IN: Pointer to current hyperslab span tree
+        const hssize_t *offset;             IN: Pointer to offset array
+        const hsize_t *size;                IN: Pointer to size array
+        hsize_t rank;                       IN: Current rank looking at
+ RETURNS
+    TRUE if the selection fits within the extent, FALSE if it does not and
+        Negative on an error.
+ DESCRIPTION
+    Determines if the current selection at the current offet fits within the
+    extent for the dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_hyper_is_valid_helper (const H5S_hyper_span_info_t *spans, const hssize_t *offset, const hsize_t *size, hsize_t rank)
+{
+    H5S_hyper_span_t *curr;     /* Hyperslab information nodes */
+    htri_t tmp;                 /* temporary return value */
+    htri_t ret_value=TRUE;      /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_is_valid_helper);
+
+    assert(spans);
+    assert(offset);
+    assert(size);
+    assert(rank<H5O_LAYOUT_NDIMS);
+
+    /* Check each point to determine whether selection+offset is within extent */
+    curr=spans->head;
+    while(curr!=NULL && ret_value==TRUE) {
+        /* Check if an offset has been defined */
+        /* Bounds check the selected point + offset against the extent */
+        if((((hssize_t)curr->low+offset[rank])>=(hssize_t)size[rank])
+                || (((hssize_t)curr->low+offset[rank])<0)
+                || (((hssize_t)curr->high+offset[rank])>=(hssize_t)size[rank])
+                || (((hssize_t)curr->high+offset[rank])<0)) {
+            ret_value=FALSE;
+            break;
+        } /* end if */
+
+        /* Recurse if this node has down spans */
+        if(curr->down!=NULL) {
+            if((tmp=H5S_hyper_is_valid_helper(curr->down,offset,size,rank+1))!=TRUE) {
+                ret_value=tmp;
+                break;
+            } /* end if */
+        } /* end if */
+
+        /* Advance to next node */
+        curr=curr->next;
+    } /* end while */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_hyper_is_valid_helper() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_is_valid
+ PURPOSE
+    Check whether the selection fits within the extent, with the current
+    offset defined.
+ USAGE
+    htri_t H5S_hyper_is_valid(space);
+        H5S_t *space;             IN: Dataspace pointer to query
+ RETURNS
+    TRUE if the selection fits within the extent, FALSE if it does not and
+        Negative on an error.
+ DESCRIPTION
+    Determines if the current selection at the current offet fits within the
+    extent for the dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_hyper_is_valid (const H5S_t *space)
+{
+    unsigned u;                    /* Counter */
+    htri_t ret_value=TRUE;      /* return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_hyper_is_valid);
+
+    assert(space);
+
+    /* Check for a "regular" hyperslab selection */
+    if(space->select.sel_info.hslab->diminfo_valid) {
+        const H5S_hyper_dim_t *diminfo=space->select.sel_info.hslab->opt_diminfo; /* local alias for diminfo */
+        hssize_t end;      /* The high bound of a region in a dimension */
+
+        /* Check each dimension */
+        for(u=0; u<space->extent.rank; u++) {
+            /* if block or count is zero, then can skip the test since */
+            /* no data point is chosen */
+            if (diminfo[u].count && diminfo[u].block) {
+                /* Bounds check the start point in this dimension */
+                if(((hssize_t)diminfo[u].start+space->select.offset[u])<0 ||
+                        ((hssize_t)diminfo[u].start+space->select.offset[u])>=(hssize_t)space->extent.size[u])
+                    HGOTO_DONE(FALSE)
+
+                /* Compute the largest location in this dimension */
+                end=(hssize_t)(diminfo[u].start+diminfo[u].stride*(diminfo[u].count-1)+(diminfo[u].block-1))+space->select.offset[u];
+
+                /* Bounds check the end point in this dimension */
+                if(end<0 || end>=(hssize_t)space->extent.size[u])
+                    HGOTO_DONE(FALSE)
+            } /* end if */
+        } /* end for */
+    } /* end if */
+    else {
+        /* Call the recursive routine to validate the span tree */
+        ret_value=H5S_hyper_is_valid_helper(space->select.sel_info.hslab->span_lst,space->select.offset,space->extent.size,(hsize_t)0);
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_hyper_is_valid() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_span_nblocks
+ PURPOSE
+    Count the number of blocks in a span tree
+ USAGE
+    hssize_t H5S_hyper_span_nblocks(spans)
+        const H5S_hyper_span_info_t *spans; IN: Hyperslab span tree to count elements of
+ RETURNS
+    Number of blocks in span tree on success; negative on failure
+ DESCRIPTION
+    Counts the number of blocks described by the spans in a span tree.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static hssize_t
+H5S_hyper_span_nblocks (H5S_hyper_span_info_t *spans)
+{
+    H5S_hyper_span_t *span;     /* Hyperslab span */
+    hssize_t ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_span_nblocks);
+
+    /* Count the number of elements in the span tree */
+    if(spans==NULL)
+        ret_value=0;
+    else {
+        span=spans->head;
+        ret_value=0;
+        while(span!=NULL) {
+            /* If there are down spans, add the total down span blocks */
+            if(span->down!=NULL)
+                ret_value+=H5S_hyper_span_nblocks(span->down);
+            /* If there are no down spans, just count the block in this span */
+            else
+                ret_value++;
+
+            /* Advance to next span */
+            span=span->next;
+        } /* end while */
+    } /* end else */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_span_nblocks() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_get_select_hyper_nblocks
+ PURPOSE
+    Get the number of hyperslab blocks in current hyperslab selection
+ USAGE
+    hssize_t H5S_get_select_hyper_nblocks(space)
+        H5S_t *space;             IN: Dataspace ptr of selection to query
+ RETURNS
+    The number of hyperslab blocks in selection on success, negative on failure
+ DESCRIPTION
+    Returns the number of hyperslab blocks in current selection for dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static hssize_t
+H5S_get_select_hyper_nblocks(H5S_t *space)
+{
+    hssize_t ret_value;         /* return value */
+    unsigned u;                 /* Counter */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_get_select_hyper_nblocks);
+
+    assert(space);
+
+    /* Check for a "regular" hyperslab selection */
+    if(space->select.sel_info.hslab->diminfo_valid) {
+        /* Check each dimension */
+        for(ret_value=1,u=0; u<space->extent.rank; u++)
+            ret_value*=space->select.sel_info.hslab->app_diminfo[u].count;
+    } /* end if */
+    else
+        ret_value = H5S_hyper_span_nblocks(space->select.sel_info.hslab->span_lst);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_get_select_hyper_nblocks() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sget_select_hyper_nblocks
+ PURPOSE
+    Get the number of hyperslab blocks in current hyperslab selection
+ USAGE
+    hssize_t H5Sget_select_hyper_nblocks(dsid)
+        hid_t dsid;             IN: Dataspace ID of selection to query
+ RETURNS
+    The number of hyperslab blocks in selection on success, negative on failure
+ DESCRIPTION
+    Returns the number of hyperslab blocks in current selection for dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hssize_t
+H5Sget_select_hyper_nblocks(hid_t spaceid)
+{
+    H5S_t	*space = NULL;      /* Dataspace to modify selection of */
+    hssize_t ret_value;             /* return value */
+
+    FUNC_ENTER_API(H5Sget_select_hyper_nblocks, FAIL);
+    H5TRACE1("Hs","i",spaceid);
+
+    /* Check args */
+    if (NULL == (space=H5I_object_verify(spaceid, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
+    if(H5S_GET_SELECT_TYPE(space)!=H5S_SEL_HYPERSLABS)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a hyperslab selection");
+
+    ret_value = H5S_get_select_hyper_nblocks(space);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Sget_select_hyper_nblocks() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_serial_size
+ PURPOSE
+    Determine the number of bytes needed to store the serialized hyperslab
+        selection information.
+ USAGE
+    hssize_t H5S_hyper_serial_size(space)
+        H5S_t *space;             IN: Dataspace pointer to query
+ RETURNS
+    The number of bytes required on success, negative on an error.
+ DESCRIPTION
+    Determines the number of bytes required to serialize the current hyperslab
+    selection information for storage on disk.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hssize_t
+H5S_hyper_serial_size (const H5S_t *space)
+{
+    unsigned u;                 /* Counter */
+    hssize_t block_count;       /* block counter for regular hyperslabs */
+    hssize_t ret_value;         /* return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_hyper_serial_size);
+
+    assert(space);
+
+    /* Basic number of bytes required to serialize hyperslab selection:
+     *  <type (4 bytes)> + <version (4 bytes)> + <padding (4 bytes)> +
+     *      <length (4 bytes)> + <rank (4 bytes)> + <# of blocks (4 bytes)> = 24 bytes
+     */
+    ret_value=24;
+
+    /* Check for a "regular" hyperslab selection */
+    if(space->select.sel_info.hslab->diminfo_valid) {
+        /* Check each dimension */
+        for(block_count=1,u=0; u<space->extent.rank; u++)
+            block_count*=space->select.sel_info.hslab->opt_diminfo[u].count;
+        ret_value+=8*block_count*space->extent.rank;
+    } /* end if */
+    else {
+        /* Spin through hyperslab spans, adding 8 * rank bytes for each block */
+        block_count=H5S_hyper_span_nblocks(space->select.sel_info.hslab->span_lst);
+        ret_value+=8*space->extent.rank*block_count;
+    } /* end else */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_hyper_serial_size() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_serialize_helper
+ PURPOSE
+    Serialize the current selection into a user-provided buffer.
+ USAGE
+    herr_t H5S_hyper_serialize_helper(spans, start, end, rank, buf)
+        H5S_hyper_span_info_t *spans;   IN: Hyperslab span tree to serialize
+        hssize_t start[];       IN/OUT: Accumulated start points
+        hssize_t end[];         IN/OUT: Accumulated end points
+        hsize_t rank;           IN: Current rank looking at
+        uint8 *buf;             OUT: Buffer to put serialized selection into
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Serializes the current element selection into a buffer.  (Primarily for
+    storing on disk).
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_serialize_helper (const H5S_hyper_span_info_t *spans, hsize_t *start, hsize_t *end, hsize_t rank, uint8_t **buf)
+{
+    H5S_hyper_span_t *curr;     /* Pointer to current hyperslab span */
+    hsize_t u;                  /* Index variable */
+    herr_t ret_value=SUCCEED;  /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_serialize_helper);
+
+    /* Sanity checks */
+    assert(spans);
+    assert(start);
+    assert(end);
+    assert(rank<H5O_LAYOUT_NDIMS);
+    assert(buf && *buf);
+
+    /* Walk through the list of spans, recursing or outputing them */
+    curr=spans->head;
+    while(curr!=NULL) {
+        /* Recurse if this node has down spans */
+        if(curr->down!=NULL) {
+            /* Add the starting and ending points for this span to the list */
+            start[rank]=curr->low;
+            end[rank]=curr->high;
+
+            /* Recurse down to the next dimension */
+            if(H5S_hyper_serialize_helper(curr->down,start,end,rank+1,buf)<0)
+                HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "failed to release hyperslab spans");
+        } /* end if */
+        else {
+            /* Encode all the previous dimensions starting & ending points */
+
+            /* Encode previous starting points */
+            for(u=0; u<rank; u++)
+                UINT32ENCODE(*buf, (uint32_t)start[u]);
+
+            /* Encode starting point for this span */
+            UINT32ENCODE(*buf, (uint32_t)curr->low);
+
+            /* Encode previous ending points */
+            for(u=0; u<rank; u++)
+                UINT32ENCODE(*buf, (uint32_t)end[u]);
+
+            /* Encode starting point for this span */
+            UINT32ENCODE(*buf, (uint32_t)curr->high);
+        } /* end else */
+
+        /* Advance to next node */
+        curr=curr->next;
+    } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_serialize_helper() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_serialize
+ PURPOSE
+    Serialize the current selection into a user-provided buffer.
+ USAGE
+    herr_t H5S_hyper_serialize(space, buf)
+        H5S_t *space;           IN: Dataspace pointer of selection to serialize
+        uint8 *buf;             OUT: Buffer to put serialized selection into
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Serializes the current element selection into a buffer.  (Primarily for
+    storing on disk).
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_hyper_serialize (const H5S_t *space, uint8_t *buf)
+{
+    const H5S_hyper_dim_t *diminfo;         /* Alias for dataspace's diminfo information */
+    hsize_t tmp_count[H5O_LAYOUT_NDIMS];    /* Temporary hyperslab counts */
+    hsize_t offset[H5O_LAYOUT_NDIMS];      /* Offset of element in dataspace */
+    hsize_t start[H5O_LAYOUT_NDIMS];   /* Location of start of hyperslab */
+    hsize_t end[H5O_LAYOUT_NDIMS];     /* Location of end of hyperslab */
+    hsize_t temp_off;            /* Offset in a given dimension */
+    uint8_t *lenp;          /* pointer to length location for later storage */
+    uint32_t len=0;         /* number of bytes used */
+    int i;                 /* local counting variable */
+    hssize_t block_count;       /* block counter for regular hyperslabs */
+    int fast_dim;      /* Rank of the fastest changing dimension for the dataspace */
+    int temp_dim;      /* Temporary rank holder */
+    int ndims;         /* Rank of the dataspace */
+    int done;          /* Whether we are done with the iteration */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_hyper_serialize);
+
+    assert(space);
+
+    /* Store the preamble information */
+    UINT32ENCODE(buf, (uint32_t)H5S_GET_SELECT_TYPE(space));  /* Store the type of selection */
+    UINT32ENCODE(buf, (uint32_t)1);  /* Store the version number */
+    UINT32ENCODE(buf, (uint32_t)0);  /* Store the un-used padding */
+    lenp=buf;           /* keep the pointer to the length location for later */
+    buf+=4;             /* skip over space for length */
+
+    /* Encode number of dimensions */
+    UINT32ENCODE(buf, (uint32_t)space->extent.rank);
+    len+=4;
+
+    /* Check for a "regular" hyperslab selection */
+    if(space->select.sel_info.hslab->diminfo_valid) {
+        /* Set some convienence values */
+        ndims=space->extent.rank;
+        fast_dim=ndims-1;
+        diminfo=space->select.sel_info.hslab->opt_diminfo;
+
+        /* Check each dimension */
+        for(block_count=1,i=0; i<ndims; i++)
+            block_count*=diminfo[i].count;
+
+        /* Encode number of hyperslabs */
+        UINT32ENCODE(buf, (uint32_t)block_count);
+        len+=4;
+
+        /* Now serialize the information for the regular hyperslab */
+
+        /* Build the tables of count sizes as well as the initial offset */
+        for(i=0; i<ndims; i++) {
+            tmp_count[i]=diminfo[i].count;
+            offset[i]=diminfo[i].start;
+        } /* end for */
+
+        /* We're not done with the iteration */
+        done=0;
+
+        /* Go iterate over the hyperslabs */
+        while(done==0) {
+            /* Iterate over the blocks in the fastest dimension */
+            while(tmp_count[fast_dim]>0) {
+                /* Add 8 bytes times the rank for each hyperslab selected */
+                len+=8*ndims;
+
+                /* Encode hyperslab starting location */
+                for(i=0; i<ndims; i++)
+                    UINT32ENCODE(buf, (uint32_t)offset[i]);
+
+                /* Encode hyperslab ending location */
+                for(i=0; i<ndims; i++)
+                    UINT32ENCODE(buf, (uint32_t)(offset[i]+(diminfo[i].block-1)));
+
+                /* Move the offset to the next sequence to start */
+                offset[fast_dim]+=diminfo[fast_dim].stride;
+
+                /* Decrement the block count */
+                tmp_count[fast_dim]--;
+            } /* end while */
+
+            /* Work on other dimensions if necessary */
+            if(fast_dim>0) {
+                /* Reset the block counts */
+                tmp_count[fast_dim]=diminfo[fast_dim].count;
+
+                /* Bubble up the decrement to the slower changing dimensions */
+                temp_dim=fast_dim-1;
+                while(temp_dim>=0 && done==0) {
+                    /* Decrement the block count */
+                    tmp_count[temp_dim]--;
+
+                    /* Check if we have more blocks left */
+                    if(tmp_count[temp_dim]>0)
+                        break;
+
+                    /* Check for getting out of iterator */
+                    if(temp_dim==0)
+                        done=1;
+
+                    /* Reset the block count in this dimension */
+                    tmp_count[temp_dim]=diminfo[temp_dim].count;
+
+                    /* Wrapped a dimension, go up to next dimension */
+                    temp_dim--;
+                } /* end while */
+            } /* end if */
+            else
+                break;  /* Break out now, for 1-D selections */
+
+            /* Re-compute offset array */
+            for(i=0; i<ndims; i++) {
+                temp_off=diminfo[i].start
+                    +diminfo[i].stride*(diminfo[i].count-tmp_count[i]);
+                offset[i]=temp_off;
+            } /* end for */
+        } /* end while */
+    } /* end if */
+    else {
+        /* Encode number of hyperslabs */
+        block_count=H5S_hyper_span_nblocks(space->select.sel_info.hslab->span_lst);
+        UINT32ENCODE(buf, (uint32_t)block_count);
+        len+=4;
+
+        /* Add 8 bytes times the rank for each hyperslab selected */
+        H5_CHECK_OVERFLOW(block_count,hssize_t,hsize_t);
+        H5_CHECK_OVERFLOW((8*space->extent.rank*(hsize_t)block_count),hsize_t,size_t);
+        len+=(size_t)(8*space->extent.rank*block_count);
+
+        /* Encode each hyperslab in selection */
+        H5S_hyper_serialize_helper(space->select.sel_info.hslab->span_lst,start,end,(hsize_t)0,&buf);
+    } /* end else */
+
+    /* Encode length */
+    UINT32ENCODE(lenp, (uint32_t)len);  /* Store the length of the extra information */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_hyper_serialize() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_deserialize
+ PURPOSE
+    Deserialize the current selection from a user-provided buffer.
+ USAGE
+    herr_t H5S_hyper_deserialize(space, buf)
+        H5S_t *space;           IN/OUT: Dataspace pointer to place selection into
+        uint8 *buf;             IN: Buffer to retrieve serialized selection from
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Deserializes the current selection into a buffer.  (Primarily for retrieving
+    from disk).
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_hyper_deserialize (H5S_t *space, const uint8_t *buf)
+{
+    uint32_t rank;           	/* rank of points */
+    size_t num_elem=0;      	/* number of elements in selection */
+    hsize_t start[H5O_LAYOUT_NDIMS];	/* hyperslab start information */
+    hsize_t end[H5O_LAYOUT_NDIMS];	/* hyperslab end information */
+    hsize_t stride[H5O_LAYOUT_NDIMS];   /* hyperslab stride information */
+    hsize_t count[H5O_LAYOUT_NDIMS];    /* hyperslab count information */
+    hsize_t block[H5O_LAYOUT_NDIMS];    /* hyperslab block information */
+    hsize_t *tstart=NULL;	/* temporary hyperslab pointers */
+    hsize_t *tend=NULL;		/* temporary hyperslab pointers */
+    hsize_t *tstride=NULL;	/* temporary hyperslab pointers */
+    hsize_t *tcount=NULL;	/* temporary hyperslab pointers */
+    hsize_t *tblock=NULL;	/* temporary hyperslab pointers */
+    unsigned i,j;              	/* local counting variables */
+    herr_t ret_value=FAIL;  	/* return value */
+
+    FUNC_ENTER_NOAPI(H5S_hyper_deserialize, FAIL);
+
+    /* Check args */
+    assert(space);
+    assert(buf);
+
+    /* Deserialize slabs to select */
+    buf+=16;    /* Skip over selection header */
+    UINT32DECODE(buf,rank);  /* decode the rank of the point selection */
+    if(rank!=space->extent.rank)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "rank of pointer does not match dataspace");
+    UINT32DECODE(buf,num_elem);  /* decode the number of points */
+
+    /* Set the count & stride for all blocks */
+    for(tcount=count,tstride=stride,j=0; j<rank; j++,tstride++,tcount++) {
+        *tcount=1;
+        *tstride=1;
+    } /* end for */
+
+    /* Retrieve the coordinates from the buffer */
+    for(i=0; i<num_elem; i++) {
+        /* Decode the starting points */
+        for(tstart=start,j=0; j<rank; j++,tstart++)
+            UINT32DECODE(buf, *tstart);
+
+        /* Decode the ending points */
+        for(tend=end,j=0; j<rank; j++,tend++)
+            UINT32DECODE(buf, *tend);
+
+        /* Change the ending points into blocks */
+        for(tblock=block,tstart=start,tend=end,j=0; j<(unsigned)rank; j++,tstart++,tend++,tblock++)
+            *tblock=(*tend-*tstart)+1;
+
+        /* Select or add the hyperslab to the current selection */
+        if((ret_value=H5S_select_hyperslab(space,(i==0 ? H5S_SELECT_SET : H5S_SELECT_OR),start,stride,count,block))<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't change selection");
+    } /* end for */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_deserialize() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_span_blocklist
+ PURPOSE
+    Get a list of hyperslab blocks currently selected
+ USAGE
+    herr_t H5S_hyper_span_blocklist(spans, start, end, rank, startblock, numblocks, buf)
+        H5S_hyper_span_info_t *spans;   IN: Dataspace pointer of selection to query
+        hsize_t start[];       IN/OUT: Accumulated start points
+        hsize_t end[];         IN/OUT: Accumulated end points
+        hsize_t rank;           IN: Rank of dataspace
+        hsize_t *startblock;    IN/OUT: Hyperslab block to start with
+        hsize_t *numblocks;     IN/OUT: Number of hyperslab blocks to get
+        hsize_t **buf;          OUT: List of hyperslab blocks selected
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+        Puts a list of the hyperslab blocks into the user's buffer.  The blocks
+    start with the '*startblock'th block in the list of blocks and put
+    '*numblocks' number of blocks into the user's buffer (or until the end of
+    the list of blocks, whichever happens first)
+        The block coordinates have the same dimensionality (rank) as the
+    dataspace they are located within.  The list of blocks is formatted as
+    follows: <"start" coordinate> immediately followed by <"opposite" corner
+    coordinate>, followed by the next "start" and "opposite" coordinate, etc.
+    until all the block information requested has been put into the user's
+    buffer.
+        No guarantee of any order of the blocks is implied.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_span_blocklist(H5S_hyper_span_info_t *spans, hsize_t start[], hsize_t end[], hsize_t rank, hsize_t *startblock, hsize_t *numblocks, hsize_t **buf)
+{
+    H5S_hyper_span_t *curr;     /* Pointer to current hyperslab span */
+    hsize_t u;                  /* Index variable */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_span_blocklist);
+
+    /* Sanity checks */
+    assert(spans);
+    assert(rank<H5O_LAYOUT_NDIMS);
+    assert(start);
+    assert(end);
+    assert(startblock);
+    assert(numblocks && *numblocks>0);
+    assert(buf && *buf);
+
+    /* Walk through the list of spans, recursing or outputing them */
+    curr=spans->head;
+    while(curr!=NULL && *numblocks>0) {
+        /* Recurse if this node has down spans */
+        if(curr->down!=NULL) {
+            /* Add the starting and ending points for this span to the list */
+            start[rank]=curr->low;
+            end[rank]=curr->high;
+
+            /* Recurse down to the next dimension */
+            if(H5S_hyper_span_blocklist(curr->down,start,end,rank+1,startblock,numblocks,buf)<0)
+                HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "failed to release hyperslab spans");
+        } /* end if */
+        else {
+            /* Skip this block if we haven't skipped all the startblocks yet */
+            if(*startblock>0) {
+                /* Decrement the starting block */
+                (*startblock)--;
+            }
+            /* Process this block */
+            else {
+                /* Encode all the previous dimensions starting & ending points */
+
+                /* Copy previous starting points */
+                for(u=0; u<rank; u++, (*buf)++)
+                    HDmemcpy(*buf, &start[u], sizeof(hsize_t));
+
+                /* Copy starting point for this span */
+                HDmemcpy(*buf, &curr->low, sizeof(hsize_t));
+                (*buf)++;
+
+                /* Copy previous ending points */
+                for(u=0; u<rank; u++, (*buf)++)
+                    HDmemcpy(*buf, &end[u], sizeof(hsize_t));
+
+                /* Copy starting point for this span */
+                HDmemcpy(*buf, &curr->high, sizeof(hsize_t));
+                (*buf)++;
+
+                /* Decrement the number of blocks processed */
+                (*numblocks)--;
+            } /* end else */
+        } /* end else */
+
+        /* Advance to next node */
+        curr=curr->next;
+    } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_span_blocklist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_get_select_hyper_blocklist
+ PURPOSE
+    Get the list of hyperslab blocks currently selected
+ USAGE
+    herr_t H5S_get_select_hyper_blocklist(space, startblock, numblocks, buf)
+        H5S_t *space;           IN: Dataspace pointer of selection to query
+        hsize_t startblock;     IN: Hyperslab block to start with
+        hsize_t numblocks;      IN: Number of hyperslab blocks to get
+        hsize_t *buf;           OUT: List of hyperslab blocks selected
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+        Puts a list of the hyperslab blocks into the user's buffer.  The blocks
+    start with the 'startblock'th block in the list of blocks and put
+    'numblocks' number of blocks into the user's buffer (or until the end of
+    the list of blocks, whichever happens first)
+        The block coordinates have the same dimensionality (rank) as the
+    dataspace they are located within.  The list of blocks is formatted as
+    follows: <"start" coordinate> immediately followed by <"opposite" corner
+    coordinate>, followed by the next "start" and "opposite" coordinate, etc.
+    until all the block information requested has been put into the user's
+    buffer.
+        No guarantee of any order of the blocks is implied.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_get_select_hyper_blocklist(H5S_t *space, hbool_t internal, hsize_t startblock, hsize_t numblocks, hsize_t *buf)
+{
+    H5S_hyper_dim_t *diminfo;               /* Alias for dataspace's diminfo information */
+    hsize_t tmp_count[H5O_LAYOUT_NDIMS];    /* Temporary hyperslab counts */
+    hsize_t offset[H5O_LAYOUT_NDIMS];      /* Offset of element in dataspace */
+    hsize_t start[H5O_LAYOUT_NDIMS];   /* Location of start of hyperslab */
+    hsize_t end[H5O_LAYOUT_NDIMS];     /* Location of end of hyperslab */
+    hsize_t temp_off;            /* Offset in a given dimension */
+    int i;                     /* Counter */
+    int fast_dim;      /* Rank of the fastest changing dimension for the dataspace */
+    int temp_dim;      /* Temporary rank holder */
+    int ndims;         /* Rank of the dataspace */
+    int done;          /* Whether we are done with the iteration */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_get_select_hyper_blocklist);
+
+    assert(space);
+    assert(buf);
+
+    /* Check for a "regular" hyperslab selection */
+    if(space->select.sel_info.hslab->diminfo_valid) {
+        /* Set some convienence values */
+        ndims=space->extent.rank;
+        fast_dim=ndims-1;
+
+        /* Check which set of dimension information to use */
+        if(internal)
+            /*
+             * Use the "optimized dimension information" to pass back information
+             * on the blocks set, not the "application information".
+             */
+            diminfo=space->select.sel_info.hslab->opt_diminfo;
+        else
+            /*
+             * Use the "application dimension information" to pass back to the user
+             * the blocks they set, not the optimized, internal information.
+             */
+            diminfo=space->select.sel_info.hslab->app_diminfo;
+
+        /* Build the tables of count sizes as well as the initial offset */
+        for(i=0; i<ndims; i++) {
+            tmp_count[i]=diminfo[i].count;
+            offset[i]=diminfo[i].start;
+        } /* end for */
+
+        /* We're not done with the iteration */
+        done=0;
+
+        /* Go iterate over the hyperslabs */
+        while(done==0 && numblocks>0) {
+            /* Iterate over the blocks in the fastest dimension */
+            while(tmp_count[fast_dim]>0 && numblocks>0) {
+
+                /* Check if we should copy this block information */
+                if(startblock==0) {
+                    /* Copy the starting location */
+                    HDmemcpy(buf,offset,sizeof(hsize_t)*ndims);
+                    buf+=ndims;
+
+                    /* Compute the ending location */
+                    HDmemcpy(buf,offset,sizeof(hsize_t)*ndims);
+                    for(i=0; i<ndims; i++)
+                        buf[i]+=(diminfo[i].block-1);
+                    buf+=ndims;
+
+                    /* Decrement the number of blocks to retrieve */
+                    numblocks--;
+                } /* end if */
+                else
+                    startblock--;
+
+                /* Move the offset to the next sequence to start */
+                offset[fast_dim]+=diminfo[fast_dim].stride;
+
+                /* Decrement the block count */
+                tmp_count[fast_dim]--;
+            } /* end while */
+
+            /* Work on other dimensions if necessary */
+            if(fast_dim>0 && numblocks>0) {
+                /* Reset the block counts */
+                tmp_count[fast_dim]=diminfo[fast_dim].count;
+
+                /* Bubble up the decrement to the slower changing dimensions */
+                temp_dim=fast_dim-1;
+                while(temp_dim>=0 && done==0) {
+                    /* Decrement the block count */
+                    tmp_count[temp_dim]--;
+
+                    /* Check if we have more blocks left */
+                    if(tmp_count[temp_dim]>0)
+                        break;
+
+                    /* Check for getting out of iterator */
+                    if(temp_dim==0)
+                        done=1;
+
+                    /* Reset the block count in this dimension */
+                    tmp_count[temp_dim]=diminfo[temp_dim].count;
+
+                    /* Wrapped a dimension, go up to next dimension */
+                    temp_dim--;
+                } /* end while */
+            } /* end if */
+
+            /* Re-compute offset array */
+            for(i=0; i<ndims; i++) {
+                temp_off=diminfo[i].start+diminfo[i].stride*(diminfo[i].count-tmp_count[i]);
+                offset[i]=temp_off;
+            } /* end for */
+        } /* end while */
+    } /* end if */
+    else
+        ret_value=H5S_hyper_span_blocklist(space->select.sel_info.hslab->span_lst,start,end,(hsize_t)0,&startblock,&numblocks,&buf);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_get_select_hyper_blocklist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sget_select_hyper_blocklist
+ PURPOSE
+    Get the list of hyperslab blocks currently selected
+ USAGE
+    herr_t H5Sget_select_hyper_blocklist(dsid, startblock, numblocks, buf)
+        hid_t dsid;             IN: Dataspace ID of selection to query
+        hsize_t startblock;     IN: Hyperslab block to start with
+        hsize_t numblocks;      IN: Number of hyperslab blocks to get
+        hsize_t *buf;           OUT: List of hyperslab blocks selected
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+        Puts a list of the hyperslab blocks into the user's buffer.  The blocks
+    start with the 'startblock'th block in the list of blocks and put
+    'numblocks' number of blocks into the user's buffer (or until the end of
+    the list of blocks, whichever happen first)
+        The block coordinates have the same dimensionality (rank) as the
+    dataspace they are located within.  The list of blocks is formatted as
+    follows: <"start" coordinate> immediately followed by <"opposite" corner
+    coordinate>, followed by the next "start" and "opposite" coordinate, etc.
+    until all the block information requested has been put into the user's
+    buffer.
+        No guarantee of any order of the blocks is implied.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Sget_select_hyper_blocklist(hid_t spaceid, hsize_t startblock, hsize_t numblocks, hsize_t *buf)
+{
+    H5S_t	*space = NULL;      /* Dataspace to modify selection of */
+    herr_t ret_value;        /* return value */
+
+    FUNC_ENTER_API(H5Sget_select_hyper_blocklist, FAIL);
+    H5TRACE4("e","ihh*h",spaceid,startblock,numblocks,buf);
+
+    /* Check args */
+    if(buf==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid pointer");
+    if (NULL == (space=H5I_object_verify(spaceid, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
+    if(H5S_GET_SELECT_TYPE(space)!=H5S_SEL_HYPERSLABS)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a hyperslab selection");
+
+    /* Go get the correct number of blocks */
+    if(numblocks>0)
+        ret_value = H5S_get_select_hyper_blocklist(space,0,startblock,numblocks,buf);
+    else
+        ret_value=SUCCEED;      /* Successfully got 0 blocks... */
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Sget_select_hyper_blocklist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_bounds_helper
+ PURPOSE
+    Gets the bounding box containing the selection.
+ USAGE
+    htri_t H5S_hyper_bounds_helper(spans, offset, rank);
+        const H5S_hyper_span_info_t *spans; IN: Pointer to current hyperslab span tree
+        const hssize_t *offset;         IN: Pointer to offset array
+        hsize_t rank;                   IN: Current rank looking at
+        hsize_t *start;                 OUT: Start array bounds
+        hsize_t *end;                   OUT: End array bounds
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Retrieves the bounding box containing the current selection and places
+    it into the user's buffers.  The start and end buffers must be large
+    enough to hold the dataspace rank number of coordinates.  The bounding box
+    exactly contains the selection, ie. if a 2-D element selection is currently
+    defined with the following points: (4,5), (6,8) (10,7), the bounding box
+    with be (4, 5), (10, 8).
+        The bounding box calculations _does_ include the current offset of the
+    selection within the dataspace extent.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_bounds_helper (const H5S_hyper_span_info_t *spans, const hssize_t *offset, hsize_t rank, hsize_t *start, hsize_t *end)
+{
+    H5S_hyper_span_t *curr;     /* Hyperslab information nodes */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_bounds_helper)
+
+    assert(spans);
+    assert(offset);
+    assert(rank<H5O_LAYOUT_NDIMS);
+    assert(start);
+    assert(end);
+
+    /* Check each point to determine whether selection+offset is within extent */
+    curr=spans->head;
+    while(curr!=NULL) {
+        /* Check for offset moving selection negative */
+        if(((hssize_t)curr->low+offset[rank])<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "offset moves selection out of bounds")
+
+        /* Check if the current span extends the bounding box */
+        if((curr->low+offset[rank])<start[rank])
+            start[rank]=curr->low+offset[rank];
+        if((curr->high+offset[rank])>end[rank])
+            end[rank]=curr->high+offset[rank];
+
+        /* Recurse if this node has down spans */
+        if(curr->down!=NULL) {
+            if(H5S_hyper_bounds_helper(curr->down,offset,rank+1,start,end)<0)
+                HGOTO_ERROR(H5E_DATASPACE, H5E_BADSELECT, FAIL, "failure in lower dimension")
+        } /* end if */
+
+        /* Advance to next node */
+        curr=curr->next;
+    } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5S_hyper_bounds_helper() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_bounds
+ PURPOSE
+    Gets the bounding box containing the selection.
+ USAGE
+    herr_t H5S_hyper_bounds(space, hsize_t *start, hsize_t *end)
+        H5S_t *space;           IN: Dataspace pointer of selection to query
+        hsize_t *start;         OUT: Starting coordinate of bounding box
+        hsize_t *end;           OUT: Opposite coordinate of bounding box
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Retrieves the bounding box containing the current selection and places
+    it into the user's buffers.  The start and end buffers must be large
+    enough to hold the dataspace rank number of coordinates.  The bounding box
+    exactly contains the selection, ie. if a 2-D element selection is currently
+    defined with the following points: (4,5), (6,8) (10,7), the bounding box
+    with be (4, 5), (10, 8).
+        The bounding box calculations _does_ include the current offset of the
+    selection within the dataspace extent.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_hyper_bounds(const H5S_t *space, hsize_t *start, hsize_t *end)
+{
+    int rank;                   /* Dataspace rank */
+    int i;                      /* index variable */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_hyper_bounds,FAIL)
+
+    assert(space);
+    assert(start);
+    assert(end);
+
+    /* Set the start and end arrays up */
+    rank=space->extent.rank;
+    for(i=0; i<rank; i++) {
+        start[i]=HSIZET_MAX;
+        end[i]=0;
+    } /* end for */
+
+    /* Check for a "regular" hyperslab selection */
+    if(space->select.sel_info.hslab->diminfo_valid) {
+        const H5S_hyper_dim_t *diminfo=space->select.sel_info.hslab->opt_diminfo; /* local alias for diminfo */
+
+        /* Check each dimension */
+        for(i=0; i<rank; i++) {
+            /* Check for offset moving selection negative */
+            if((space->select.offset[i]+(hssize_t)diminfo[i].start)<0)
+                HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "offset moves selection out of bounds")
+
+            /* Compute the smallest location in this dimension */
+            start[i]=diminfo[i].start+space->select.offset[i];
+
+            /* Compute the largest location in this dimension */
+            end[i]=diminfo[i].start+diminfo[i].stride*(diminfo[i].count-1)+(diminfo[i].block-1)+space->select.offset[i];
+        } /* end for */
+    } /* end if */
+    else {
+        /* Call the recursive routine to get the bounds for the span tree */
+        ret_value=H5S_hyper_bounds_helper(space->select.sel_info.hslab->span_lst,space->select.offset,(hsize_t)0,start,end);
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* H5S_hyper_bounds() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_is_contiguous
+ PURPOSE
+    Check if a hyperslab selection is contiguous within the dataspace extent.
+ USAGE
+    htri_t H5S_hyper_is_contiguous(space)
+        H5S_t *space;           IN: Dataspace pointer to check
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+    Checks to see if the current selection in the dataspace is contiguous.
+    This is primarily used for reading the entire selection in one swoop.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_hyper_is_contiguous(const H5S_t *space)
+{
+    H5S_hyper_span_info_t *spans;   /* Hyperslab span info node */
+    H5S_hyper_span_t *span;         /* Hyperslab span node */
+    unsigned u;                     /* index variable */
+    unsigned small_contiguous,      /* Flag for small contiguous block */
+        large_contiguous;           /* Flag for large contiguous block */
+    htri_t ret_value=FALSE;         /* return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_hyper_is_contiguous);
+
+    assert(space);
+
+    /* Check for a "regular" hyperslab selection */
+    if(space->select.sel_info.hslab->diminfo_valid) {
+        const H5S_hyper_dim_t *diminfo=space->select.sel_info.hslab->opt_diminfo; /* local alias for diminfo */
+
+        /*
+         * For a regular hyperslab to be contiguous, it must have only one
+         * block (i.e. count==1 in all dimensions) and the block size must be
+         * the same as the dataspace extent's in all but the slowest changing
+         * dimension. (dubbed "large contiguous" block)
+         *
+         * OR
+         *
+         * The selection must have only one block (i.e. count==1) in all
+         * dimensions and the block size must be 1 in all but the fastest
+         * changing dimension. (dubbed "small contiguous" block)
+         */
+
+        /* Initialize flags */
+        large_contiguous=TRUE;	/* assume true and reset if the dimensions don't match */
+        small_contiguous=FALSE;	/* assume false initially */
+
+        /* Check for a "large contigous" block */
+        for(u=0; u<space->extent.rank; u++) {
+            if(diminfo[u].count>1) {
+                large_contiguous=FALSE;
+                break;
+            } /* end if */
+            if(u>0 && diminfo[u].block!=space->extent.size[u]) {
+                large_contiguous=FALSE;
+                break;
+            } /* end if */
+        } /* end for */
+
+        /* If we didn't find a large contiguous block, check for a small one */
+        if(large_contiguous==FALSE) {
+            small_contiguous=TRUE;
+            for(u=0; u<space->extent.rank; u++) {
+                if(diminfo[u].count>1) {
+                    small_contiguous=FALSE;
+                    break;
+                } /* end if */
+                if(u<(space->extent.rank-1) && diminfo[u].block!=1) {
+                    small_contiguous=FALSE;
+                    break;
+                } /* end if */
+            } /* end for */
+        } /* end if */
+
+        /* Indicate true if it's either a large or small contiguous block */
+        if(large_contiguous || small_contiguous)
+            ret_value=TRUE;
+    } /* end if */
+    else {
+        /*
+         * For a hyperslab to be contiguous, it must have only one block and
+         * (either it's size must be the same as the dataspace extent's in all
+         * but the slowest changing dimension
+         * OR
+         * block size must be 1 in all but the fastest changing dimension).
+         */
+        /* Initialize flags */
+        large_contiguous=TRUE;	/* assume true and reset if the dimensions don't match */
+        small_contiguous=FALSE;	/* assume false initially */
+
+        /* Get information for slowest changing information */
+        spans=space->select.sel_info.hslab->span_lst;
+        span=spans->head;
+
+        /* If there are multiple spans in the slowest changing dimension, the selection isn't contiguous */
+        if(span->next!=NULL)
+            large_contiguous=FALSE;
+        else {
+            /* Now check the rest of the dimensions */
+            if(span->down!=NULL) {
+                u=1;    /* Current dimension working on */
+
+                /* Get the span information for the next fastest dimension */
+                spans=span->down;
+
+                /* Cycle down the spans until we run out of down spans or find a non-contiguous span */
+                while(spans!=NULL) {
+                    span=spans->head;
+
+                    /* Check that this is the only span and it spans the entire dimension */
+                    if(span->next!=NULL) {
+                        large_contiguous=FALSE;
+                        break;
+                    } /* end if */
+                    else {
+                        /* If this span doesn't cover the entire dimension, then this selection isn't contiguous */
+                        if(((span->high-span->low)+1)!=space->extent.size[u]) {
+                            large_contiguous=FALSE;
+                            break;
+                        } /* end if */
+                        else {
+                            /* Walk down to the next span */
+                            spans=span->down;
+
+                            /* Increment dimension */
+                            u++;
+                        } /* end else */
+                    } /* end else */
+                } /* end while */
+            } /* end if */
+        } /* end else */
+
+        /* If we didn't find a large contiguous block, check for a small one */
+        if(large_contiguous==FALSE) {
+            small_contiguous=TRUE;
+
+            /* Get information for slowest changing information */
+            spans=space->select.sel_info.hslab->span_lst;
+            span=spans->head;
+
+            /* Current dimension working on */
+            u=0;
+
+            /* Cycle down the spans until we run out of down spans or find a non-contiguous span */
+            while(spans!=NULL) {
+                span=spans->head;
+
+                /* Check that this is the only span and it spans the entire dimension */
+                if(span->next!=NULL) {
+                    small_contiguous=FALSE;
+                    break;
+                } /* end if */
+                else {
+                    /* If this span doesn't cover the entire dimension, then this selection isn't contiguous */
+                    if(u<(space->extent.rank-1) && ((span->high-span->low)+1)!=1) {
+                        small_contiguous=FALSE;
+                        break;
+                    } /* end if */
+                    else {
+                        /* Walk down to the next span */
+                        spans=span->down;
+
+                        /* Increment dimension */
+                        u++;
+                    } /* end else */
+                } /* end else */
+            } /* end while */
+        } /* end if */
+
+        /* Indicate true if it's either a large or small contiguous block */
+        if(large_contiguous || small_contiguous)
+            ret_value=TRUE;
+    } /* end else */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_is_contiguous() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_is_single
+ PURPOSE
+    Check if a hyperslab selection is a single block within the dataspace extent.
+ USAGE
+    htri_t H5S_hyper_is_single(space)
+        H5S_t *space;           IN: Dataspace pointer to check
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+    Checks to see if the current selection in the dataspace is a single block.
+    This is primarily used for reading the entire selection in one swoop.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_hyper_is_single(const H5S_t *space)
+{
+    H5S_hyper_span_info_t *spans;   /* Hyperslab span info node */
+    H5S_hyper_span_t *span;         /* Hyperslab span node */
+    unsigned u;                     /* index variable */
+    htri_t ret_value=TRUE;         /* return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_hyper_is_single);
+
+    assert(space);
+
+    /* Check for a "single" hyperslab selection */
+    if(space->select.sel_info.hslab->diminfo_valid) {
+        /*
+         * For a regular hyperslab to be single, it must have only one
+         * block (i.e. count==1 in all dimensions)
+         */
+
+        /* Check for a single block */
+        for(u=0; u<space->extent.rank; u++) {
+            if(space->select.sel_info.hslab->opt_diminfo[u].count>1)
+                HGOTO_DONE(FALSE)
+        } /* end for */
+    } /* end if */
+    else {
+        /*
+         * For a region to be single, it must have only one block
+         */
+        /* Get information for slowest changing information */
+        spans=space->select.sel_info.hslab->span_lst;
+
+        /* Cycle down the spans until we run out of down spans or find a non-contiguous span */
+        while(spans!=NULL) {
+            span=spans->head;
+
+            /* Check that this is the only span and it spans the entire dimension */
+            if(span->next!=NULL)
+                HGOTO_DONE(FALSE)
+            else
+                /* Walk down to the next span */
+                spans=span->down;
+        } /* end while */
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_is_single() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_is_regular
+ PURPOSE
+    Check if a hyperslab selection is "regular"
+ USAGE
+    htri_t H5S_hyper_is_regular(space)
+        const H5S_t *space;     IN: Dataspace pointer to check
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+    Checks to see if the current selection in a dataspace is the a regular
+    pattern.
+    This is primarily used for reading the entire selection in one swoop.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    Doesn't check for "regular" hyperslab selections composed of spans
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_hyper_is_regular(const H5S_t *space)
+{
+    htri_t ret_value;  /* return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_hyper_is_regular);
+
+    /* Check args */
+    assert(space);
+
+    /* Only simple check for regular hyperslabs for now... */
+    if(space->select.sel_info.hslab->diminfo_valid)
+        ret_value=TRUE;
+    else
+        ret_value=FALSE;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_is_regular() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_release
+ PURPOSE
+    Release hyperslab selection information for a dataspace
+ USAGE
+    herr_t H5S_hyper_release(space)
+        H5S_t *space;       IN: Pointer to dataspace
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Releases all hyperslab selection information for a dataspace
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+ * 	Robb Matzke, 1998-08-25
+ *	The fields which are freed are set to NULL to prevent them from being
+ *	freed again later.  This fixes some allocation problems where
+ *	changing the hyperslab selection of one data space causes a core dump
+ *	when closing some other data space.
+--------------------------------------------------------------------------*/
+herr_t
+H5S_hyper_release (H5S_t *space)
+{
+    herr_t ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5S_hyper_release, FAIL);
+
+    /* Check args */
+    assert (space && H5S_SEL_HYPERSLABS==H5S_GET_SELECT_TYPE(space));
+
+    /* Reset the number of points selected */
+    space->select.num_elem=0;
+
+    /* Release irregular hyperslab information */
+    if(space->select.sel_info.hslab->span_lst!=NULL) {
+        if(H5S_hyper_free_span_info(space->select.sel_info.hslab->span_lst)<0)
+            HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "failed to release hyperslab spans");
+    } /* end if */
+
+    /* Release space for the hyperslab selection information */
+    H5FL_FREE(H5S_hyper_sel_t,space->select.sel_info.hslab);
+    space->select.sel_info.hslab=NULL;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_release() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_recover_span
+ PURPOSE
+    Recover a generated span, if appropriate
+ USAGE
+    herr_t H5S_hyper_recover_span(recover, curr_span, next_span)
+        unsigned *recover;                 IN/OUT: Pointer recover flag
+        H5S_hyper_span_t **curr_span;   IN/OUT: Pointer to current span in list
+        H5S_hyper_span_t *next_span;    IN: Pointer to next span
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Check if the current span needs to be recovered and free it if so.
+    Set the current span to the next span in any case.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_recover_span (unsigned *recover, H5S_hyper_span_t **curr_span, H5S_hyper_span_t *next_span)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_recover_span);
+
+    assert(recover);
+    assert(curr_span);
+
+    /* Check if the span should be recovered */
+    if(*recover) {
+        H5S_hyper_free_span(*curr_span);
+        *recover=0;
+    } /* end if */
+
+    /* Set the current span to next span */
+    *curr_span=next_span;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_hyper_recover_span() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_coord_to_span
+ PURPOSE
+    Create a span tree for a single element
+ USAGE
+    H5S_hyper_span_t *H5S_hyper_coord_to_span(rank, coords)
+        unsigned rank;                  IN: Number of dimensions of coordinate
+        hsize_t *coords;               IN: Location of element
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Create a span tree for a single element
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5S_hyper_span_t *
+H5S_hyper_coord_to_span(unsigned rank, hsize_t *coords)
+{
+    H5S_hyper_span_t *new_span;         /* Pointer to new span tree for coordinate */
+    H5S_hyper_span_info_t *down=NULL;   /* Pointer to new span tree for next level down */
+    H5S_hyper_span_t *ret_value=NULL;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_coord_to_span);
+
+    assert(rank>0);
+    assert(coords);
+
+    /* Search for location to insert new element in tree */
+    if(rank>1) {
+        /* Allocate a span info node */
+        if((down = H5FL_MALLOC(H5S_hyper_span_info_t))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+        /* Set the reference count */
+        down->count=0;
+
+        /* Reset the scratch pad space */
+        down->scratch=0;
+
+        /* Build span tree for coordinates below this one */
+        if((down->head=H5S_hyper_coord_to_span(rank-1,&coords[1]))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+    } /* end if */
+
+    /* Build span for this coordinate */
+    if((new_span = H5S_hyper_new_span(coords[0],coords[0],down,NULL))==NULL)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+    /* Set return value */
+    ret_value=new_span;
+
+done:
+    if(ret_value==NULL) {
+        if(down!=NULL)
+            H5S_hyper_free_span_info(down);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_coord_to_span() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_add_span_element_helper
+ PURPOSE
+    Add a single elment to a span tree
+ USAGE
+    herr_t H5S_hyper_add_span_element_helper(prev_span, span_tree, rank, coords)
+        H5S_hyper_span_info_t *span_tree;  IN/OUT: Pointer to span tree to append to
+        unsigned rank;                  IN: Number of dimensions of coordinates
+        hsize_t *coords;               IN: Location of element to add to span tree
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Add a single element to an existing span tree.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    Assumes that the element is not already covered by the span tree
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_add_span_element_helper(H5S_hyper_span_info_t *span_tree, unsigned rank, hsize_t *coords)
+{
+    H5S_hyper_span_info_t *tspan_info;  /* Temporary pointer to span info */
+    H5S_hyper_span_info_t *prev_span_info;  /* Pointer to span info for level above current position */
+    H5S_hyper_span_t *tmp_span;         /* Temporary pointer to a span */
+    H5S_hyper_span_t *tmp2_span;        /* Another temporary pointer to a span */
+    H5S_hyper_span_t *new_span;         /* New span created for element */
+    herr_t ret_value=SUCCEED;           /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_add_span_element_helper);
+
+    assert(span_tree);
+    assert(rank>0);
+    assert(coords);
+
+    /* Get pointer to last span in span tree */
+    tspan_info=span_tree;
+    if(span_tree->scratch)
+        tmp_span=(H5S_hyper_span_t *)span_tree->scratch;
+    else {
+        tmp_span=span_tree->head;
+        assert(tmp_span);
+        span_tree->scratch=(H5S_hyper_span_info_t *)tmp_span;
+    } /* end else */
+
+    /* Find last span tree which includes a portion of the coordinate */
+    prev_span_info=NULL;
+    while(coords[0]>=tmp_span->low && coords[0]<=tmp_span->high) {
+        /* Move rank & coordinate offset down a dimension */
+        rank--;
+        coords++;
+
+        /* Remember the span tree we are descending into */
+        prev_span_info=tspan_info;
+        tspan_info=tmp_span->down;
+
+        /* Get the last span in this span's 'down' tree */
+        if(tspan_info->scratch)
+            tmp_span=(H5S_hyper_span_t *)tspan_info->scratch;
+        else {
+            tmp_span=tspan_info->head;
+            assert(tmp_span);
+            tspan_info->scratch=(H5S_hyper_span_info_t *)tmp_span;
+        } /* end else */
+    } /* end while */
+
+    /* Check if we made it all the way to the bottom span in the tree */
+    if(rank>1) {
+        /* Before we create another span at this level in the tree, check if
+         * the last span's "down tree" was equal to any other spans in this
+         * list of spans in the span tree.
+         *
+         * If so, release last span information and make last span merge into
+         * previous span (if possible), or at least share their "down tree"
+         * information.
+         */
+        tmp2_span=tspan_info->head;
+        while(tmp2_span!=tmp_span) {
+            if(H5S_hyper_cmp_spans(tmp2_span->down,tmp_span->down)==TRUE) {
+                /* Check for merging into previous span */
+                if(tmp2_span->high+1==tmp_span->low) {
+                    /* Release last span created */
+                    H5S_hyper_free_span(tmp_span);
+
+                    /* Increase size of previous span */
+                    tmp2_span->high++;
+                    tmp2_span->nelem++;
+
+                    /* Reset the 'tmp_span' for the rest of this block's algorithm */
+                    tmp_span=tmp2_span;
+                } /* end if */
+                /* Span is disjoint, but has the same "down tree" selection */
+                else {
+                    /* Release "down tree" information */
+                    H5S_hyper_free_span_info(tmp_span->down);
+
+                    /* Point at earlier span's "down tree" */
+                    tmp_span->down=tmp2_span->down;
+
+                    /* Increment reference count on shared "down tree" */
+                    tmp_span->down->count++;
+                } /* end else */
+
+                /* Found span to merge into, break out now */
+                break;
+            } /* end if */
+
+            /* Advance to next span to check */
+            tmp2_span=tmp2_span->next;
+        } /* end while */
+
+        /* Make span tree for current coordinates */
+        if((new_span=H5S_hyper_coord_to_span(rank,coords))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+        /* Add new span tree as span */
+        assert(tmp_span);
+        tmp_span->next=new_span;
+
+        /* Make scratch pointer point to last span in list */
+        assert(tspan_info);
+        tspan_info->scratch=(H5S_hyper_span_info_t *)new_span;
+
+        /* Set the proper 'pstride' for new span */
+        new_span->pstride=new_span->low-tmp_span->low;
+    } /* end if */
+    else {
+        /* Does new node adjoin existing node? */
+        if(tmp_span->high+1==coords[0]) {
+            tmp_span->high++;
+            tmp_span->nelem++;
+
+            /* Check if this span tree should now be merged with a level higher in the tree */
+            if(prev_span_info!=NULL) {
+                /* Before we create another span at this level in the tree, check if
+                 * the last span's "down tree" was equal to any other spans in this
+                 * list of spans in the span tree.
+                 *
+                 * If so, release last span information and make last span merge into
+                 * previous span (if possible), or at least share their "down tree"
+                 * information.
+                 */
+                tmp2_span=prev_span_info->head;
+                tmp_span=(H5S_hyper_span_t *)prev_span_info->scratch;
+                while(tmp2_span!=tmp_span) {
+                    if(H5S_hyper_cmp_spans(tmp2_span->down,tmp_span->down)==TRUE) {
+                        /* Check for merging into previous span */
+                        if(tmp2_span->high+1==tmp_span->low) {
+                            /* Release last span created */
+                            H5S_hyper_free_span(tmp_span);
+
+                            /* Increase size of previous span */
+                            tmp2_span->high++;
+                            tmp2_span->nelem++;
+
+                            /* Update pointers */
+                            tmp2_span->next=NULL;
+                            prev_span_info->scratch=(H5S_hyper_span_info_t *)tmp2_span;
+                        } /* end if */
+                        /* Span is disjoint, but has the same "down tree" selection */
+                        else {
+                            /* Release "down tree" information */
+                            H5S_hyper_free_span_info(tmp_span->down);
+
+                            /* Point at earlier span's "down tree" */
+                            tmp_span->down=tmp2_span->down;
+
+                            /* Increment reference count on shared "down tree" */
+                            tmp_span->down->count++;
+                        } /* end else */
+
+                        /* Found span to merge into, break out now */
+                        break;
+                    } /* end if */
+
+                    /* Advance to next span to check */
+                    tmp2_span=tmp2_span->next;
+                } /* end while */
+            } /* end if */
+        } /* end if */
+        else {
+            if((new_span = H5S_hyper_new_span(coords[0],coords[0],NULL,NULL))==NULL)
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+            /* Add new span tree as span */
+            assert(tmp_span);
+            tmp_span->next=new_span;
+
+            /* Make scratch pointer point to last span in list */
+            tspan_info->scratch=(H5S_hyper_span_info_t *)new_span;
+
+            /* Set the proper 'pstride' for new span */
+            new_span->pstride=new_span->low-tmp_span->low;
+        } /* end else */
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_add_span_element_helper() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_add_span_element
+ PURPOSE
+    Add a single elment to a span tree
+ USAGE
+    herr_t H5S_hyper_add_span_element(space, span_tree, rank, coords)
+        H5S_t *space;           IN/OUT: Pointer to dataspace to add coordinate to
+        unsigned rank;          IN: Number of dimensions of coordinates
+        hsize_t *coords;       IN: Location of element to add to span tree
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Add a single element to an existing span tree.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    Assumes that the element is not already in the dataspace's selection
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_hyper_add_span_element(H5S_t *space, unsigned rank, hsize_t *coords)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_add_span_element);
+
+    assert(space);
+    assert(rank>0);
+    assert(coords);
+
+    /* Check if this is the first element in the selection */
+    if(space->select.sel_info.hslab==NULL) {
+        H5S_hyper_span_info_t *head;  /* Pointer to new head of span tree */
+
+        /* Allocate a span info node */
+        if((head = H5FL_MALLOC(H5S_hyper_span_info_t))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+        /* Set the reference count */
+        head->count=1;
+
+        /* Reset the scratch pad space */
+        head->scratch=0;
+
+        /* Build span tree for this coordinate */
+        if((head->head=H5S_hyper_coord_to_span(rank,coords))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+        /* Allocate selection info */
+        if((space->select.sel_info.hslab=H5FL_MALLOC(H5S_hyper_sel_t))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab info");
+
+        /* Set the selection to the new span tree */
+        space->select.sel_info.hslab->span_lst=head;
+
+        /* Set selection type */
+        space->select.type=H5S_sel_hyper;
+
+        /* Reset "regular" hyperslab flag */
+        space->select.sel_info.hslab->diminfo_valid=FALSE;
+
+        /* Set # of elements in selection */
+        space->select.num_elem=1;
+    } /* end if */
+    else {
+        if(H5S_hyper_add_span_element_helper(space->select.sel_info.hslab->span_lst,rank,coords)<0)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+        /* Increment # of elements in selection */
+        space->select.num_elem++;
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_add_span_element() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_reset_scratch
+ PURPOSE
+    Reset the scratch information for span tree
+ USAGE
+    herr_t H5S_hyper_reset_scratch(space)
+        H5S_t *space;           IN/OUT: Pointer to dataspace to reset scratch pointers
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Resets the "scratch" pointers used for various tasks in computing hyperslab
+    spans.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_hyper_reset_scratch(H5S_t *space)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_reset_scratch);
+
+    assert(space);
+
+    /* Check if there are spans in the span tree */
+    if(space->select.sel_info.hslab->span_lst!=NULL)
+        /* Reset the scratch pointers for the next routine which needs them */
+        if(H5S_hyper_span_scratch(space->select.sel_info.hslab->span_lst,NULL)==FAIL)
+            HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "can't reset span tree scratch pointers");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_reset_scratch() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_convert
+ PURPOSE
+    Convert a compatible selection to span tree form
+ USAGE
+    herr_t H5S_hyper_convert(space)
+        H5S_t *space;           IN/OUT: Pointer to dataspace to convert
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Converts a compatible selection (currently only "all" selections) to the
+    span-tree form of a hyperslab selection. (Point and "none" selection aren't
+    currently supported and hyperslab selection always have the span-tree form
+    available).
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_hyper_convert(H5S_t *space)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_convert);
+
+    assert(space);
+
+    /* Check the type of selection */
+    switch(H5S_GET_SELECT_TYPE(space)) {
+        case H5S_SEL_ALL:    /* All elements selected in dataspace */
+            /* Convert current "all" selection to "real" hyperslab selection */
+            {
+                hsize_t tmp_start[H5O_LAYOUT_NDIMS];   /* Temporary start information */
+                hsize_t tmp_stride[H5O_LAYOUT_NDIMS];   /* Temporary stride information */
+                hsize_t tmp_count[H5O_LAYOUT_NDIMS];    /* Temporary count information */
+                hsize_t tmp_block[H5O_LAYOUT_NDIMS];    /* Temporary block information */
+                unsigned u;                             /* Local index variable */
+
+                /* Fill in temporary information for the dimensions */
+                for(u=0; u<space->extent.rank; u++) {
+                    tmp_start[u]=0;
+                    tmp_stride[u]=1;
+                    tmp_count[u]=1;
+                    tmp_block[u]=space->extent.size[u];
+                } /* end for */
+
+                /* Convert to hyperslab selection */
+                if(H5S_select_hyperslab(space,H5S_SELECT_SET,tmp_start,tmp_stride,tmp_count,tmp_block)<0)
+                    HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't convert selection");
+            } /* end case */
+            break;
+
+        case H5S_SEL_HYPERSLABS:        /* Hyperslab selection */
+            break;
+
+        case H5S_SEL_NONE:   /* No elements selected in dataspace */
+        case H5S_SEL_POINTS: /* Point selection */
+        default:
+            HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "can't convert to span tree selection");
+    } /* end switch */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_convert() */
+
+#ifdef LATER
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_intersect_helper
+ PURPOSE
+    Helper routine to detect intersections in span trees
+ USAGE
+    htri_t H5S_hyper_intersect_helper(spans1, spans2)
+        H5S_hyper_span_info_t *spans1;     IN: First span tree to operate with
+        H5S_hyper_span_info_t *spans2;     IN: Second span tree to operate with
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Quickly detect intersections between two span trees
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_hyper_intersect_helper (H5S_hyper_span_info_t *spans1, H5S_hyper_span_info_t *spans2)
+{
+    H5S_hyper_span_t *curr1;    /* Pointer to current span in 1st span tree */
+    H5S_hyper_span_t *curr2;    /* Pointer to current span in 2nd span tree */
+    htri_t status;              /* Status from recursive call */
+    htri_t ret_value=FALSE;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_intersect_helper);
+
+    /* Sanity check */
+    assert((spans1 && spans2) || (spans1==NULL && spans2==NULL));
+
+    /* "NULL" span trees compare as overlapping */
+    if(spans1==NULL && spans2==NULL)
+        HGOTO_DONE(TRUE);
+
+    /* Get the span lists for each span in this tree */
+    curr1=spans1->head;
+    curr2=spans2->head;
+
+    /* Iterate over the spans in each tree */
+    while(curr1!=NULL && curr2!=NULL) {
+        /* Check for 1st span entirely before 2nd span */
+        if(curr1->high<curr2->low)
+            curr1=curr1->next;
+        /* Check for 2nd span entirely before 1st span */
+        else if(curr2->high<curr1->low)
+            curr2=curr2->next;
+        /* Spans must overlap */
+        else {
+            /* Recursively check spans in next dimension down */
+            if((status=H5S_hyper_intersect_helper(curr1->down,curr2->down))<0)
+                HGOTO_ERROR(H5E_DATASPACE, H5E_BADSELECT, FAIL, "can't perform hyperslab intersection check");
+
+            /* If there is a span intersection in the down dimensions, the span trees overlap */
+            if(status==TRUE)
+                HGOTO_DONE(TRUE);
+
+            /* No intersection in down dimensions, advance to next span */
+            if(curr1->high<curr2->high)
+                curr1=curr1->next;
+            else
+                curr2=curr2->next;
+        } /* end else */
+    } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_intersect_helper() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_intersect
+ PURPOSE
+    Detect intersections in span trees
+ USAGE
+    htri_t H5S_hyper_intersect(space1, space2)
+        H5S_t *space1;     IN: First dataspace to operate on span tree
+        H5S_t *space2;     IN: Second dataspace to operate on span tree
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Quickly detect intersections between two span trees
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_hyper_intersect (H5S_t *space1, H5S_t *space2)
+{
+    htri_t ret_value=FAIL;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_intersect);
+
+    /* Sanity check */
+    assert(space1);
+    assert(space2);
+
+    /* Check that the space selections both have span trees */
+    if(space1->select.sel_info.hslab->span_lst==NULL ||
+            space2->select.sel_info.hslab->span_lst==NULL)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_UNINITIALIZED, FAIL, "dataspace does not have span tree");
+
+    /* Check that the dataspaces are both the same rank */
+    if(space1->extent.rank!=space2->extent.rank)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "dataspace ranks don't match");
+
+    /* Perform the span-by-span intersection check */
+    if((ret_value=H5S_hyper_intersect_helper(space1->select.sel_info.hslab->span_lst,space2->select.sel_info.hslab->span_lst))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_BADSELECT, FAIL, "can't perform hyperslab intersection check");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_intersect() */
+#endif /* LATER */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_intersect_block_helper
+ PURPOSE
+    Helper routine to detect intersections in span trees
+ USAGE
+    htri_t H5S_hyper_intersect_block_helper(spans, start, end)
+        H5S_hyper_span_info_t *spans;     IN: First span tree to operate with
+        hssize_t *offset;   IN: Selection offset coordinate
+        hsize_t *start;    IN: Starting coordinate for block
+        hsize_t *end;      IN: Ending coordinate for block
+ RETURN
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Quickly detect intersections between span tree and block
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_hyper_intersect_block_helper (const H5S_hyper_span_info_t *spans, hsize_t *start, hsize_t *end)
+{
+    H5S_hyper_span_t *curr;     /* Pointer to current span in 1st span tree */
+    htri_t status;              /* Status from recursive call */
+    htri_t ret_value=FALSE;     /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_intersect_block_helper);
+
+    /* Sanity check */
+    assert(spans);
+    assert(start);
+    assert(end);
+
+    /* Get the span list for spans in this tree */
+    curr=spans->head;
+
+    /* Iterate over the spans in the tree */
+    while(curr!=NULL) {
+        /* Check for span entirely before block */
+        if(curr->high < *start)
+            /* Advance to next span in this dimension */
+            curr=curr->next;
+        /* If this span is past the end of the block, then we're done in this dimension */
+        else if(curr->low > *end)
+            HGOTO_DONE(FALSE)
+        /* block & span overlap */
+        else {
+            if(curr->down==NULL)
+                HGOTO_DONE(TRUE)
+            else {
+                /* Recursively check spans in next dimension down */
+                if((status=H5S_hyper_intersect_block_helper(curr->down,start+1,end+1))<0)
+                    HGOTO_ERROR(H5E_DATASPACE, H5E_BADSELECT, FAIL, "can't perform hyperslab intersection check");
+
+                /* If there is a span intersection in the down dimensions, the span trees overlap */
+                if(status==TRUE)
+                    HGOTO_DONE(TRUE);
+
+                /* No intersection in down dimensions, advance to next span */
+                curr=curr->next;
+            } /* end else */
+        } /* end else */
+    } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_intersect_block_helper() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_intersect_block
+ PURPOSE
+    Detect intersections in span trees
+ USAGE
+    htri_t H5S_hyper_intersect_block(space, start, end)
+        H5S_t *space;       IN: First dataspace to operate on span tree
+        hssize_t *start;    IN: Starting coordinate for block
+        hssize_t *end;      IN: Ending coordinate for block
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Quickly detect intersections between span tree and block
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_hyper_intersect_block (H5S_t *space, hsize_t *start, hsize_t *end)
+{
+    htri_t ret_value=FAIL;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_intersect_block);
+
+    /* Sanity check */
+    assert(space);
+    assert(start);
+    assert(end);
+
+    /* Check for 'all' selection, instead of a hyperslab selection */
+    /* (Technically, this shouldn't be in the "hyperslab" routines...) */
+    if(H5S_GET_SELECT_TYPE(space)==H5S_SEL_ALL)
+        HGOTO_DONE(TRUE);
+
+    /* Check that the space selection has a span tree */
+    if(space->select.sel_info.hslab->span_lst==NULL)
+        if(H5S_hyper_generate_spans(space)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_UNINITIALIZED, FAIL, "dataspace does not have span tree");
+
+    /* Perform the span-by-span intersection check */
+    if((ret_value=H5S_hyper_intersect_block_helper(space->select.sel_info.hslab->span_lst,start,end))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_BADSELECT, FAIL, "can't perform hyperslab intersection check");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_intersect_block() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_adjust_helper_u
+ PURPOSE
+    Helper routine to adjust offsets in span trees
+ USAGE
+    herr_t H5S_hyper_adjust_helper_u(spans, offset)
+        H5S_hyper_span_info_t *spans;   IN: Span tree to operate with
+        const hsize_t *offset;         IN: Offset to subtract
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Adjust the location of the spans in a span tree by subtracting an offset
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_adjust_helper_u (H5S_hyper_span_info_t *spans, const hsize_t *offset)
+{
+    H5S_hyper_span_t *span;     /* Pointer to current span in span tree */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_adjust_helper_u);
+
+    /* Sanity check */
+    assert(spans);
+    assert(offset);
+
+    /* Check if we've already set this down span tree */
+    if(spans->scratch!=(H5S_hyper_span_info_t *)~((size_t)NULL)) {
+        /* Set the tree's scratch pointer */
+        spans->scratch=(H5S_hyper_span_info_t *)~((size_t)NULL);
+
+        /* Get the span lists for each span in this tree */
+        span=spans->head;
+
+        /* Iterate over the spans in tree */
+        while(span!=NULL) {
+            /* Adjust span offset */
+            assert(span->low>=*offset);
+            span->low-=*offset;
+            span->high-=*offset;
+
+            /* Recursively adjust spans in next dimension down */
+            if(span->down!=NULL)
+                H5S_hyper_adjust_helper_u(span->down,offset+1);
+
+            /* Advance to next span in this dimension */
+            span=span->next;
+        } /* end while */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_hyper_adjust_helper_u() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_adjust_u
+ PURPOSE
+    Adjust a hyperslab selection by subtracting an offset
+ USAGE
+    herr_t H5S_hyper_adjust_u(space,offset)
+        H5S_t *space;           IN/OUT: Pointer to dataspace to adjust
+        const hsize_t *offset; IN: Offset to subtract
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Moves a hyperslab selection by subtracting an offset from it.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_hyper_adjust_u(H5S_t *space, const hsize_t *offset)
+{
+    unsigned u;                         /* Local index variable */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_adjust_u);
+
+    assert(space);
+    assert(offset);
+
+    /* Subtract the offset from the "regular" coordinates, if they exist */
+    if(space->select.sel_info.hslab->diminfo_valid) {
+        for(u=0; u<space->extent.rank; u++) {
+            assert(space->select.sel_info.hslab->opt_diminfo[u].start>=offset[u]);
+            space->select.sel_info.hslab->opt_diminfo[u].start-=offset[u];
+        } /* end for */
+    } /* end if */
+
+    /* Subtract the offset from the span tree coordinates, if they exist */
+    if(space->select.sel_info.hslab->span_lst) {
+        if(H5S_hyper_adjust_helper_u(space->select.sel_info.hslab->span_lst,offset)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_BADSELECT, FAIL, "can't perform hyperslab offset adjustment");
+
+        /* Reset the scratch pointers for the next routine which needs them */
+        if(H5S_hyper_span_scratch(space->select.sel_info.hslab->span_lst,NULL)==FAIL)
+            HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "can't reset hyperslab scratch pointer");
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_adjust_u() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_adjust_helper_s
+ PURPOSE
+    Helper routine to adjust offsets in span trees
+ USAGE
+    herr_t H5S_hyper_adjust_helper_s(spans, offset)
+        H5S_hyper_span_info_t *spans;   IN: Span tree to operate with
+        const hssize_t *offset;         IN: Offset to subtract
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Adjust the location of the spans in a span tree by subtracting an offset
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_adjust_helper_s (H5S_hyper_span_info_t *spans, const hssize_t *offset)
+{
+    H5S_hyper_span_t *span;     /* Pointer to current span in span tree */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_adjust_helper_s);
+
+    /* Sanity check */
+    assert(spans);
+    assert(offset);
+
+    /* Check if we've already set this down span tree */
+    if(spans->scratch!=(H5S_hyper_span_info_t *)~((size_t)NULL)) {
+        /* Set the tree's scratch pointer */
+        spans->scratch=(H5S_hyper_span_info_t *)~((size_t)NULL);
+
+        /* Get the span lists for each span in this tree */
+        span=spans->head;
+
+        /* Iterate over the spans in tree */
+        while(span!=NULL) {
+            /* Adjust span offset */
+            assert((hssize_t)span->low>=*offset);
+            span->low-=*offset;
+            span->high-=*offset;
+
+            /* Recursively adjust spans in next dimension down */
+            if(span->down!=NULL)
+                H5S_hyper_adjust_helper_s(span->down,offset+1);
+
+            /* Advance to next span in this dimension */
+            span=span->next;
+        } /* end while */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_hyper_adjust_helper_s() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_adjust_s
+ PURPOSE
+    Adjust a hyperslab selection by subtracting an offset
+ USAGE
+    herr_t H5S_hyper_adjust_s(space,offset)
+        H5S_t *space;           IN/OUT: Pointer to dataspace to adjust
+        const hssize_t *offset; IN: Offset to subtract
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Moves a hyperslab selection by subtracting an offset from it.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_hyper_adjust_s(H5S_t *space, const hssize_t *offset)
+{
+    unsigned u;                         /* Local index variable */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_adjust_s);
+
+    assert(space);
+    assert(offset);
+
+    /* Subtract the offset from the "regular" coordinates, if they exist */
+    if(space->select.sel_info.hslab->diminfo_valid) {
+        for(u=0; u<space->extent.rank; u++) {
+            assert((hssize_t)space->select.sel_info.hslab->opt_diminfo[u].start>=offset[u]);
+            space->select.sel_info.hslab->opt_diminfo[u].start-=offset[u];
+        } /* end for */
+    } /* end if */
+
+    /* Subtract the offset from the span tree coordinates, if they exist */
+    if(space->select.sel_info.hslab->span_lst) {
+        if(H5S_hyper_adjust_helper_s(space->select.sel_info.hslab->span_lst,offset)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_BADSELECT, FAIL, "can't perform hyperslab offset adjustment");
+
+        /* Reset the scratch pointers for the next routine which needs them */
+        if(H5S_hyper_span_scratch(space->select.sel_info.hslab->span_lst,NULL)==FAIL)
+            HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "can't reset hyperslab scratch pointer");
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_adjust_s() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_move_helper
+ PURPOSE
+    Helper routine to move offset in span trees
+ USAGE
+    herr_t H5S_hyper_move_helper(spans, offset)
+        H5S_hyper_span_info_t *spans;   IN: Span tree to operate with
+        const hssize_t *offset;         IN: Offset to move to
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Adjust the location of the spans in a span tree by moving selection to an
+    offset.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_move_helper (H5S_hyper_span_info_t *spans, const hssize_t *offset)
+{
+    H5S_hyper_span_t *span;     /* Pointer to current span in span tree */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_move_helper);
+
+    /* Sanity check */
+    assert(spans);
+    assert(offset);
+
+    /* Check if we've already set this down span tree */
+    if(spans->scratch!=(H5S_hyper_span_info_t *)~((size_t)NULL)) {
+        /* Set the tree's scratch pointer */
+        spans->scratch=(H5S_hyper_span_info_t *)~((size_t)NULL);
+
+        /* Get the span lists for each span in this tree */
+        span=spans->head;
+
+        /* Iterate over the spans in tree */
+        while(span!=NULL) {
+            /* Adjust span location */
+            assert(*offset>=0);
+            span->high=*offset+(span->high-span->low);
+            span->low=*offset;
+
+            /* Recursively move spans in next dimension down */
+            if(span->down!=NULL)
+                H5S_hyper_move_helper(span->down,offset+1);
+
+            /* Advance to next span in this dimension */
+            span=span->next;
+        } /* end while */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_hyper_move_helper() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_move
+ PURPOSE
+    Move a hyperslab selection by to an offset
+ USAGE
+    herr_t H5S_hyper_move(space,offset)
+        H5S_t *space;           IN/OUT: Pointer to dataspace to move
+        const hssize_t *offset; IN: Offset to move to
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Moves a hyperslab selection to a new offset.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_hyper_move(H5S_t *space, const hssize_t *offset)
+{
+    unsigned u;                         /* Local index variable */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_move);
+
+    assert(space);
+    assert(offset);
+
+    /* Move to the offset with the "regular" coordinates, if they exist */
+    if(space->select.sel_info.hslab->diminfo_valid) {
+        for(u=0; u<space->extent.rank; u++) {
+            assert(offset[u]>=0);
+            space->select.sel_info.hslab->opt_diminfo[u].start=offset[u];
+        } /* end for */
+    } /* end if */
+
+    /* Subtract the offset from the span tree coordinates, if they exist */
+    if(space->select.sel_info.hslab->span_lst) {
+        if(H5S_hyper_move_helper(space->select.sel_info.hslab->span_lst,offset)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_BADSELECT, FAIL, "can't perform hyperslab offset movement");
+
+        /* Reset the scratch pointers for the next routine which needs them */
+        if(H5S_hyper_span_scratch(space->select.sel_info.hslab->span_lst,NULL)==FAIL)
+            HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "can't reset hyperslab scratch pointer");
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_move() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_normalize_offset
+ PURPOSE
+    "Normalize" a hyperslab selection by adjusting it's coordinates by the
+    amount of the selection offset.
+ USAGE
+    herr_t H5S_hyper_normalize_offset(space, old_offset)
+        H5S_t *space;           IN/OUT: Pointer to dataspace to move
+        hssize_t *old_offset;   OUT: Pointer to space to store old offset
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Copies the current selection offset into the array provided, then
+    inverts the selection offset, subtracts the offset from the hyperslab
+    selection and resets the offset to zero.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_hyper_normalize_offset(H5S_t *space, hssize_t *old_offset)
+{
+    unsigned u;                         /* Local index variable */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_normalize_offset);
+
+    assert(space);
+
+    /* Check for 'all' selection, instead of a hyperslab selection */
+    /* (Technically, this check shouldn't be in the "hyperslab" routines...) */
+    if(H5S_GET_SELECT_TYPE(space)==H5S_SEL_HYPERSLABS) {
+        /* Copy & invert the selection offset */
+        for(u=0; u<space->extent.rank; u++) {
+            old_offset[u] = space->select.offset[u];
+            space->select.offset[u] = -space->select.offset[u];
+        } /* end for */
+
+        /* Call the existing 'adjust' routine */
+        if(H5S_hyper_adjust_s(space, space->select.offset)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_BADSELECT, FAIL, "can't perform hyperslab normalization");
+
+        /* Zero out the selection offset */
+        HDmemset(space->select.offset, 0, sizeof(hssize_t) * space->extent.rank);
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_normalize_offset() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_denormalize_offset
+ PURPOSE
+    "Denormalize" a hyperslab selection by reverse adjusting it's coordinates
+    by the amount of the former selection offset.
+ USAGE
+    herr_t H5S_hyper_normalize_offset(space, old_offset)
+        H5S_t *space;           IN/OUT: Pointer to dataspace to move
+        hssize_t *old_offset;   IN: Pointer to old offset array
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Subtracts the old offset from the current selection (canceling out the
+    effect of the "normalize" routine), then restores the old offset into
+    the dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_hyper_denormalize_offset(H5S_t *space, const hssize_t *old_offset)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_denormalize_offset);
+
+    assert(space);
+
+    /* Check for 'all' selection, instead of a hyperslab selection */
+    /* (Technically, this check shouldn't be in the "hyperslab" routines...) */
+    if(H5S_GET_SELECT_TYPE(space)==H5S_SEL_HYPERSLABS) {
+        /* Call the existing 'adjust' routine */
+        if(H5S_hyper_adjust_s(space, old_offset)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_BADSELECT, FAIL, "can't perform hyperslab normalization");
+
+        /* Copy the selection offset over */
+        HDmemcpy(space->select.offset, old_offset, sizeof(hssize_t) * space->extent.rank);
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_denormalize_offset() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_append_span
+ PURPOSE
+    Create a new span and append to span list
+ USAGE
+    herr_t H5S_hyper_append_span(prev_span, span_tree, low, high, down, next)
+        H5S_hyper_span_t **prev_span;    IN/OUT: Pointer to previous span in list
+        H5S_hyper_span_info_t **span_tree;  IN/OUT: Pointer to span tree to append to
+        hsize_t low, high;         IN: Low and high bounds for new span node
+        H5S_hyper_span_info_t *down;     IN: Down span tree for new node
+        H5S_hyper_span_t *next;     IN: Next span for new node
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Create a new span node and append to a span list.  Update the previous
+    span in the list also.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_append_span (H5S_hyper_span_t **prev_span, H5S_hyper_span_info_t ** span_tree, hsize_t low, hsize_t high, H5S_hyper_span_info_t *down, H5S_hyper_span_t *next)
+{
+    H5S_hyper_span_t *new_span;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_append_span);
+
+    assert(prev_span);
+    assert(span_tree);
+
+    /* Check for adding first node to merged spans */
+    if(*prev_span==NULL) {
+        /* Allocate new span node to append to list */
+        if((new_span = H5S_hyper_new_span(low,high,down,next))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+        /* Make first node in span list */
+
+        /* Check that we haven't already allocated a span tree */
+        assert(*span_tree==NULL);
+
+        /* Allocate a new span_info node */
+        if((*span_tree = H5FL_MALLOC(H5S_hyper_span_info_t))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+        /* Set the span tree's basic information */
+        (*span_tree)->count=1;
+        (*span_tree)->scratch=NULL;
+        (*span_tree)->head=new_span;
+
+        /* Update previous merged span */
+        *prev_span=new_span;
+    } /* end if */
+    /* Merge or append to existing merged spans list */
+    else {
+        /* Check if span can just extend the previous merged span */
+        if((((*prev_span)->high+1)==low) &&
+                H5S_hyper_cmp_spans(down,(*prev_span)->down)==TRUE) {
+            /* Extend previous merged span to include new high bound */
+            (*prev_span)->high=high;
+            (*prev_span)->nelem+=(high-low)+1;
+        } /* end if */
+        else {
+            /* Allocate new span node to append to list */
+            if((new_span = H5S_hyper_new_span(low,high,down,next))==NULL)
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+            /* Check if there is actually a down span */
+            if(new_span->down) {
+                /* Check if the down spans for the new span node are the same as the previous span node */
+                if(H5S_hyper_cmp_spans(new_span->down,(*prev_span)->down)==TRUE) {
+                    /* Release the down span for the new node */
+                    H5S_hyper_free_span_info(new_span->down);
+
+                    /* Point the new node's down span at the previous node's down span */
+                    new_span->down=(*prev_span)->down;
+
+                    /* Increment the reference count to the shared down span */
+                    new_span->down->count++;
+                } /* end if */
+            } /* end if */
+
+            /* Indicate elements from previous span */
+            new_span->pstride=low-(*prev_span)->low;
+
+            /* Append to end of merged spans list */
+            (*prev_span)->next=new_span;
+            *prev_span=new_span;
+        } /* end else */
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_append_span() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_clip_spans
+ PURPOSE
+    Clip a new span tree against the current spans in the hyperslab selection
+ USAGE
+    herr_t H5S_hyper_clip_spans(span_a, span_b, a_not_b, a_and_b, b_not_a)
+        H5S_hyper_span_t *a_spans;    IN: Span tree 'a' to clip with.
+        H5S_hyper_span_t *b_spans;    IN: Span tree 'b' to clip with.
+        H5S_hyper_span_t **a_not_b;  OUT: Span tree of 'a' hyperslab spans which
+                                            doesn't overlap with 'b' hyperslab
+                                            spans.
+        H5S_hyper_span_t **a_and_b;  OUT: Span tree of 'a' hyperslab spans which
+                                            overlaps with 'b' hyperslab spans.
+        H5S_hyper_span_t **b_not_a;  OUT: Span tree of 'b' hyperslab spans which
+                                            doesn't overlap with 'a' hyperslab
+                                            spans.
+ RETURNS
+    non-negative on success, negative on failure
+ DESCRIPTION
+    Clip one span tree ('a') against another span tree ('b').  Creates span
+    trees for the area defined by the 'a' span tree which does not overlap the
+    'b' span tree, the area defined by the overlap of the 'a' hyperslab span
+    tree and the 'b' span tree, and the area defined by the 'b' hyperslab span
+    tree which does not overlap the 'a' span tree.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_clip_spans (H5S_hyper_span_info_t *a_spans, H5S_hyper_span_info_t *b_spans,
+    H5S_hyper_span_info_t **a_not_b, H5S_hyper_span_info_t **a_and_b,
+    H5S_hyper_span_info_t **b_not_a)
+{
+    H5S_hyper_span_t *span_a;   /* Pointer to a node in span tree 'a' */
+    H5S_hyper_span_t *span_b;   /* Pointer to a node in span tree 'b' */
+    H5S_hyper_span_t *tmp_span; /* Temporary pointer to new span */
+    H5S_hyper_span_t *last_a_not_b;   /* Pointer to previous node in span tree 'a_not_b' */
+    H5S_hyper_span_t *last_a_and_b;   /* Pointer to previous node in span tree 'a_and_b' */
+    H5S_hyper_span_t *last_b_not_a;   /* Pointer to previous node in span tree 'b_not_a' */
+    H5S_hyper_span_info_t *down_a_not_b; /* Temporary pointer to a_not_b span tree of down spans for overlapping nodes */
+    H5S_hyper_span_info_t *down_a_and_b; /* Temporary pointer to a_and_b span tree of down spans for overlapping nodes */
+    H5S_hyper_span_info_t *down_b_not_a; /* Temporary pointer to b_and_a span tree of down spans for overlapping nodes */
+    unsigned recover_a, recover_b;         /* Flags to indicate when to recover temporary spans */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_clip_spans);
+
+    /* Check args */
+    assert (a_spans);
+    assert (b_spans);
+    assert (a_not_b);
+    assert (a_and_b);
+    assert (b_not_a);
+
+    /* Check if both span trees are not defined */
+    if(a_spans==NULL && b_spans==NULL) {
+        *a_not_b=NULL;
+        *a_and_b=NULL;
+        *b_not_a=NULL;
+    } /* end if */
+    /* If span 'a' is not defined, but 'b' is, copy 'b' and set the other return span trees to empty */
+    else if(a_spans==NULL) {
+        *a_not_b=NULL;
+        *a_and_b=NULL;
+        if((*b_not_a=H5S_hyper_copy_span(b_spans))==NULL)
+            HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOPY, FAIL, "can't copy hyperslab span tree");
+    } /* end if */
+    /* If span 'b' is not defined, but 'a' is, copy 'a' and set the other return span trees to empty */
+    else if(b_spans==NULL) {
+        if((*a_not_b=H5S_hyper_copy_span(a_spans))==NULL)
+            HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOPY, FAIL, "can't copy hyperslab span tree");
+        *a_and_b=NULL;
+        *b_not_a=NULL;
+    } /* end if */
+    /* If span 'a' and 'b' are both defined, calculate the proper span trees */
+    else {
+        /* Check if both span trees completely overlap */
+        if(H5S_hyper_cmp_spans(a_spans,b_spans)==TRUE) {
+            *a_not_b=NULL;
+            if((*a_and_b=H5S_hyper_copy_span(a_spans))==NULL)
+                HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOPY, FAIL, "can't copy hyperslab span tree");
+            *b_not_a=NULL;
+        } /* end if */
+        else {
+            /* Get the pointers to the new and old span lists */
+            span_a=a_spans->head;
+            span_b=b_spans->head;
+
+            /* Set the pointer to the previous spans */
+            last_a_not_b=NULL;
+            last_a_and_b=NULL;
+            last_b_not_a=NULL;
+
+            /* No spans to recover yet */
+            recover_a=recover_b=0;
+
+            /* Work through the list of spans in the new list */
+            while(span_a!=NULL && span_b!=NULL) {
+                /* Check if span 'a' is completely before span 'b' */
+                /*    AAAAAAA                            */
+                /* <-----------------------------------> */
+                /*             BBBBBBBBBB                */
+                if(span_a->high<span_b->low) {
+                    /* Copy span 'a' and add to a_not_b list */
+
+                    /* Merge/add span 'a' with/to a_not_b list */
+                    if(H5S_hyper_append_span(&last_a_not_b,a_not_b,span_a->low,span_a->high,span_a->down,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                    /* Advance span 'a', leave span 'b' */
+                    H5S_hyper_recover_span(&recover_a,&span_a,span_a->next);
+                } /* end if */
+                /* Check if span 'a' overlaps only the lower bound */
+                /*  of span 'b' , up to the upper bound of span 'b' */
+                /*    AAAAAAAAAAAA                       */
+                /* <-----------------------------------> */
+                /*             BBBBBBBBBB                */
+                else if(span_a->low<span_b->low && (span_a->high>=span_b->low && span_a->high<=span_b->high)) {
+                    /* Split span 'a' into two parts at the low bound of span 'b' */
+
+                    /* Merge/add lower part of span 'a' with/to a_not_b list */
+                    if(H5S_hyper_append_span(&last_a_not_b,a_not_b,span_a->low,span_b->low-1,span_a->down,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                    /* Check for overlaps between upper part of span 'a' and lower part of span 'b' */
+
+                    /* Make certain both spans either have a down span or both don't have one */
+                    assert((span_a->down!=NULL && span_b->down!=NULL) || (span_a->down==NULL && span_b->down==NULL));
+
+                    /* If there are no down spans, just add the overlapping area to the a_and_b list */
+                    if(span_a->down==NULL) {
+                        /* Merge/add overlapped part with/to a_and_b list */
+                        if(H5S_hyper_append_span(&last_a_and_b,a_and_b,span_b->low,span_a->high,NULL,NULL)==FAIL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+                    } /* end if */
+                    /* If there are down spans, check for the overlap in them and add to each appropriate list */
+                    else {
+                        /* NULL out the temporary pointers to clipped areas in down spans */
+                        down_a_not_b=NULL;
+                        down_a_and_b=NULL;
+                        down_b_not_a=NULL;
+
+                        /* Check for overlaps in the 'down spans' of span 'a' & 'b' */
+                        if(H5S_hyper_clip_spans(span_a->down,span_b->down,&down_a_not_b,&down_a_and_b,&down_b_not_a)<0)
+                            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCLIP, FAIL, "can't clip hyperslab information");
+
+                        /* Check for additions to the a_not_b list */
+                        if(down_a_not_b!=NULL) {
+                            /* Merge/add overlapped part with/to a_not_b list */
+                            if(H5S_hyper_append_span(&last_a_not_b,a_not_b,span_b->low,span_a->high,down_a_not_b,NULL)==FAIL)
+                                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                            /* Release the down span tree generated */
+                            H5S_hyper_free_span_info(down_a_not_b);
+                        } /* end if */
+
+                        /* Check for additions to the a_and_b list */
+                        if(down_a_and_b!=NULL) {
+                            /* Merge/add overlapped part with/to a_and_b list */
+                            if(H5S_hyper_append_span(&last_a_and_b,a_and_b,span_b->low,span_a->high,down_a_and_b,NULL)==FAIL)
+                                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                            /* Release the down span tree generated */
+                            H5S_hyper_free_span_info(down_a_and_b);
+                        } /* end if */
+
+                        /* Check for additions to the b_not_a list */
+                        if(down_b_not_a!=NULL) {
+                            /* Merge/add overlapped part with/to b_not_a list */
+                            if(H5S_hyper_append_span(&last_b_not_a,b_not_a,span_b->low,span_a->high,down_b_not_a,NULL)==FAIL)
+                                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                            /* Release the down span tree generated */
+                            H5S_hyper_free_span_info(down_b_not_a);
+                        } /* end if */
+                    } /* end else */
+
+                    /* Split off upper part of span 'b' at upper span of span 'a' */
+
+                    /* Check if there is actually an upper part of span 'b' to split off */
+                    if(span_a->high<span_b->high) {
+                        /* Allocate new span node for upper part of span 'b' */
+                        if((tmp_span = H5S_hyper_new_span(span_a->high+1,span_b->high,span_b->down,span_b->next))==NULL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                        /* Advance span 'a' */
+                        H5S_hyper_recover_span(&recover_a,&span_a,span_a->next);
+
+                        /* Make upper part of span 'b' into new span 'b' */
+                        H5S_hyper_recover_span(&recover_b,&span_b,tmp_span);
+                        recover_b=1;
+                    } /* end if */
+                    /* No upper part of span 'b' to split */
+                    else {
+                        /* Advance both 'a' and 'b' */
+                        H5S_hyper_recover_span(&recover_a,&span_a,span_a->next);
+                        H5S_hyper_recover_span(&recover_b,&span_b,span_b->next);
+                    } /* end else */
+                } /* end if */
+                /* Check if span 'a' overlaps the lower & upper bound */
+                /*  of span 'b' */
+                /*    AAAAAAAAAAAAAAAAAAAAA              */
+                /* <-----------------------------------> */
+                /*             BBBBBBBBBB                */
+                else if(span_a->low<span_b->low && span_a->high>span_b->high) {
+                    /* Split off lower part of span 'a' at lower span of span 'b' */
+
+                    /* Merge/add lower part of span 'a' with/to a_not_b list */
+                    if(H5S_hyper_append_span(&last_a_not_b,a_not_b,span_a->low,span_b->low-1,span_a->down,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                    /* Check for overlaps between middle part of span 'a' and span 'b' */
+
+                    /* Make certain both spans either have a down span or both don't have one */
+                    assert((span_a->down!=NULL && span_b->down!=NULL) || (span_a->down==NULL && span_b->down==NULL));
+
+                    /* If there are no down spans, just add the overlapping area to the a_and_b list */
+                    if(span_a->down==NULL) {
+                        /* Merge/add overlapped part with/to a_and_b list */
+                        if(H5S_hyper_append_span(&last_a_and_b,a_and_b,span_b->low,span_b->high,NULL,NULL)==FAIL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+                    } /* end if */
+                    /* If there are down spans, check for the overlap in them and add to each appropriate list */
+                    else {
+                        /* NULL out the temporary pointers to clipped areas in down spans */
+                        down_a_not_b=NULL;
+                        down_a_and_b=NULL;
+                        down_b_not_a=NULL;
+
+                        /* Check for overlaps in the 'down spans' of span 'a' & 'b' */
+                        if(H5S_hyper_clip_spans(span_a->down,span_b->down,&down_a_not_b,&down_a_and_b,&down_b_not_a)<0)
+                            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCLIP, FAIL, "can't clip hyperslab information");
+
+                        /* Check for additions to the a_not_b list */
+                        if(down_a_not_b!=NULL) {
+                            /* Merge/add overlapped part with/to a_not_b list */
+                            if(H5S_hyper_append_span(&last_a_not_b,a_not_b,span_b->low,span_b->high,down_a_not_b,NULL)==FAIL)
+                                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                            /* Release the down span tree generated */
+                            H5S_hyper_free_span_info(down_a_not_b);
+                        } /* end if */
+
+                        /* Check for additions to the a_and_b list */
+                        if(down_a_and_b!=NULL) {
+                            /* Merge/add overlapped part with/to a_and_b list */
+                            if(H5S_hyper_append_span(&last_a_and_b,a_and_b,span_b->low,span_b->high,down_a_and_b,NULL)==FAIL)
+                                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                            /* Release the down span tree generated */
+                            H5S_hyper_free_span_info(down_a_and_b);
+                        } /* end if */
+
+                        /* Check for additions to the b_not_a list */
+                        if(down_b_not_a!=NULL) {
+                            /* Merge/add overlapped part with/to b_not_a list */
+                            if(H5S_hyper_append_span(&last_b_not_a,b_not_a,span_b->low,span_b->high,down_b_not_a,NULL)==FAIL)
+                                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                            /* Release the down span tree generated */
+                            H5S_hyper_free_span_info(down_b_not_a);
+                        } /* end if */
+                    } /* end else */
+
+                    /* Split off upper part of span 'a' at upper span of span 'b' */
+
+                    /* Allocate new span node for upper part of span 'a' */
+                    if((tmp_span = H5S_hyper_new_span(span_b->high+1,span_a->high,span_a->down,span_a->next))==NULL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                    /* Make upper part of span 'a' the new span 'a' */
+                    H5S_hyper_recover_span(&recover_a,&span_a,tmp_span);
+                    recover_a=1;
+
+                    /* Advance span 'b' */
+                    H5S_hyper_recover_span(&recover_b,&span_b,span_b->next);
+                } /* end if */
+                /* Check if span 'a' is entirely within span 'b' */
+                /*                AAAAA                  */
+                /* <-----------------------------------> */
+                /*             BBBBBBBBBB                */
+                else if(span_a->low>=span_b->low && span_a->high<=span_b->high) {
+                    /* Split off lower part of span 'b' at lower span of span 'a' */
+
+                    /* Check if there is actually a lower part of span 'b' to split off */
+                    if(span_a->low>span_b->low) {
+                        /* Merge/add lower part of span 'b' with/to b_not_a list */
+                        if(H5S_hyper_append_span(&last_b_not_a,b_not_a,span_b->low,span_a->low-1,span_b->down,NULL)==FAIL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+                    } /* end if */
+                    else {
+                        /* Keep going, nothing to split off */
+                    } /* end else */
+
+                    /* Check for overlaps between span 'a' and midle of span 'b' */
+
+                    /* Make certain both spans either have a down span or both don't have one */
+                    assert((span_a->down!=NULL && span_b->down!=NULL) || (span_a->down==NULL && span_b->down==NULL));
+
+                    /* If there are no down spans, just add the overlapping area to the a_and_b list */
+                    if(span_a->down==NULL) {
+                        /* Merge/add overlapped part with/to a_and_b list */
+                        if(H5S_hyper_append_span(&last_a_and_b,a_and_b,span_a->low,span_a->high,NULL,NULL)==FAIL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+                    } /* end if */
+                    /* If there are down spans, check for the overlap in them and add to each appropriate list */
+                    else {
+                        /* NULL out the temporary pointers to clipped areas in down spans */
+                        down_a_not_b=NULL;
+                        down_a_and_b=NULL;
+                        down_b_not_a=NULL;
+
+                        /* Check for overlaps in the 'down spans' of span 'a' & 'b' */
+                        if(H5S_hyper_clip_spans(span_a->down,span_b->down,&down_a_not_b,&down_a_and_b,&down_b_not_a)<0)
+                            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCLIP, FAIL, "can't clip hyperslab information");
+
+                        /* Check for additions to the a_not_b list */
+                        if(down_a_not_b!=NULL) {
+                            /* Merge/add overlapped part with/to a_not_b list */
+                            if(H5S_hyper_append_span(&last_a_not_b,a_not_b,span_a->low,span_a->high,down_a_not_b,NULL)==FAIL)
+                                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                            /* Release the down span tree generated */
+                            H5S_hyper_free_span_info(down_a_not_b);
+                        } /* end if */
+
+                        /* Check for additions to the a_and_b list */
+                        if(down_a_and_b!=NULL) {
+                            /* Merge/add overlapped part with/to a_and_b list */
+                            if(H5S_hyper_append_span(&last_a_and_b,a_and_b,span_a->low,span_a->high,down_a_and_b,NULL)==FAIL)
+                                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                            /* Release the down span tree generated */
+                            H5S_hyper_free_span_info(down_a_and_b);
+                        } /* end if */
+
+                        /* Check for additions to the b_not_a list */
+                        if(down_b_not_a!=NULL) {
+                            /* Merge/add overlapped part with/to b_not_a list */
+                            if(H5S_hyper_append_span(&last_b_not_a,b_not_a,span_a->low,span_a->high,down_b_not_a,NULL)==FAIL)
+                                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                            /* Release the down span tree generated */
+                            H5S_hyper_free_span_info(down_b_not_a);
+                        } /* end if */
+                    } /* end else */
+
+                    /* Check if there is actually an upper part of span 'b' to split off */
+                    if(span_a->high<span_b->high) {
+                        /* Split off upper part of span 'b' at upper span of span 'a' */
+
+                        /* Allocate new span node for upper part of spans 'a' */
+                        if((tmp_span = H5S_hyper_new_span(span_a->high+1,span_b->high,span_b->down,span_b->next))==NULL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                        /* And advance span 'a' */
+                        H5S_hyper_recover_span(&recover_a,&span_a,span_a->next);
+
+                        /* Make upper part of span 'b' the new span 'b' */
+                        H5S_hyper_recover_span(&recover_b,&span_b,tmp_span);
+                        recover_b=1;
+                    } /* end if */
+                    else {
+                        /* Advance both span 'a' & span 'b' */
+                        H5S_hyper_recover_span(&recover_a,&span_a,span_a->next);
+                        H5S_hyper_recover_span(&recover_b,&span_b,span_b->next);
+                    } /* end else */
+                } /* end if */
+                /* Check if span 'a' overlaps only the upper bound */
+                /*  of span 'b' */
+                /*                AAAAAAAAAA             */
+                /* <-----------------------------------> */
+                /*             BBBBBBBBBB                */
+                else if((span_a->low>=span_b->low && span_a->low<=span_b->high) && span_a->high>span_b->high) {
+                    /* Check if there is actually a lower part of span 'b' to split off */
+                    if(span_a->low>span_b->low) {
+                        /* Split off lower part of span 'b' at lower span of span 'a' */
+
+                        /* Merge/add lower part of span 'b' with/to b_not_a list */
+                        if(H5S_hyper_append_span(&last_b_not_a,b_not_a,span_b->low,span_a->low-1,span_b->down,NULL)==FAIL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+                    } /* end if */
+                    else {
+                        /* Keep going, nothing to split off */
+                    } /* end else */
+
+                    /* Check for overlaps between lower part of span 'a' and upper part of span 'b' */
+
+                    /* Make certain both spans either have a down span or both don't have one */
+                    assert((span_a->down!=NULL && span_b->down!=NULL) || (span_a->down==NULL && span_b->down==NULL));
+
+                    /* If there are no down spans, just add the overlapping area to the a_and_b list */
+                    if(span_a->down==NULL) {
+                        /* Merge/add overlapped part with/to a_and_b list */
+                        if(H5S_hyper_append_span(&last_a_and_b,a_and_b,span_a->low,span_b->high,NULL,NULL)==FAIL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+                    } /* end if */
+                    /* If there are down spans, check for the overlap in them and add to each appropriate list */
+                    else {
+                        /* NULL out the temporary pointers to clipped areas in down spans */
+                        down_a_not_b=NULL;
+                        down_a_and_b=NULL;
+                        down_b_not_a=NULL;
+
+                        /* Check for overlaps in the 'down spans' of span 'a' & 'b' */
+                        if(H5S_hyper_clip_spans(span_a->down,span_b->down,&down_a_not_b,&down_a_and_b,&down_b_not_a)<0)
+                            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCLIP, FAIL, "can't clip hyperslab information");
+
+                        /* Check for additions to the a_not_b list */
+                        if(down_a_not_b!=NULL) {
+                            /* Merge/add overlapped part with/to a_not_b list */
+                            if(H5S_hyper_append_span(&last_a_not_b,a_not_b,span_a->low,span_b->high,down_a_not_b,NULL)==FAIL)
+                                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                            /* Release the down span tree generated */
+                            H5S_hyper_free_span_info(down_a_not_b);
+                        } /* end if */
+
+                        /* Check for additions to the a_and_b list */
+                        if(down_a_and_b!=NULL) {
+                            /* Merge/add overlapped part with/to a_and_b list */
+                            if(H5S_hyper_append_span(&last_a_and_b,a_and_b,span_a->low,span_b->high,down_a_and_b,NULL)==FAIL)
+                                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                            /* Release the down span tree generated */
+                            H5S_hyper_free_span_info(down_a_and_b);
+                        } /* end if */
+
+                        /* Check for additions to the b_not_a list */
+                        if(down_b_not_a!=NULL) {
+                            /* Merge/add overlapped part with/to b_not_a list */
+                            if(H5S_hyper_append_span(&last_b_not_a,b_not_a,span_a->low,span_b->high,down_b_not_a,NULL)==FAIL)
+                                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                            /* Release the down span tree generated */
+                            H5S_hyper_free_span_info(down_b_not_a);
+                        } /* end if */
+                    } /* end else */
+
+                    /* Split off upper part of span 'a' at upper span of span 'b' */
+
+                    /* Allocate new span node for upper part of span 'a' */
+                    if((tmp_span = H5S_hyper_new_span(span_b->high+1,span_a->high,span_a->down,span_a->next))==NULL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                    /* Make upper part of span 'a' into new span 'a' */
+                    H5S_hyper_recover_span(&recover_a,&span_a,tmp_span);
+                    recover_a=1;
+
+                    /* Advance span 'b' */
+                    H5S_hyper_recover_span(&recover_b,&span_b,span_b->next);
+                } /* end if */
+                /* span 'a' must be entirely above span 'b' */
+                /*                         AAAAA         */
+                /* <-----------------------------------> */
+                /*             BBBBBBBBBB                */
+                else {
+                    /* Copy span 'b' and add to b_not_a list */
+
+                    /* Merge/add span 'b' with/to b_not_a list */
+                    if(H5S_hyper_append_span(&last_b_not_a,b_not_a,span_b->low,span_b->high,span_b->down,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                    /* Advance span 'b', leave span 'a' */
+                    H5S_hyper_recover_span(&recover_b,&span_b,span_b->next);
+                } /* end else */
+            } /* end while */
+
+            /* Clean up 'a' spans which haven't been covered yet */
+            if(span_a!=NULL && span_b==NULL) {
+                while(span_a!=NULL) {
+                    /* Copy span 'a' and add to a_not_b list */
+
+                    /* Merge/add span 'a' with/to a_not_b list */
+                    if(H5S_hyper_append_span(&last_a_not_b,a_not_b,span_a->low,span_a->high,span_a->down,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                    /* Advance to the next 'a' span */
+                    H5S_hyper_recover_span(&recover_a,&span_a,span_a->next);
+                } /* end while */
+            } /* end if */
+            /* Clean up 'b' spans which haven't been covered yet */
+            else if(span_a==NULL && span_b!=NULL) {
+                while(span_b!=NULL) {
+                    /* Copy span 'b' and add to b_not_a list */
+
+                    /* Merge/add span 'b' with/to b_not_a list */
+                    if(H5S_hyper_append_span(&last_b_not_a,b_not_a,span_b->low,span_b->high,span_b->down,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+                    /* Advance to the next 'b' span */
+                    H5S_hyper_recover_span(&recover_b,&span_b,span_b->next);
+                } /* end while */
+            } /* end if */
+        } /* end else */
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_clip_spans() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_merge_spans_helper
+ PURPOSE
+    Merge two hyperslab span tree together
+ USAGE
+    H5S_hyper_span_info_t *H5S_hyper_merge_spans_helper(a_spans, b_spans)
+        H5S_hyper_span_info_t *a_spans; IN: First hyperslab spans to merge
+                                                together
+        H5S_hyper_span_info_t *b_spans; IN: Second hyperslab spans to merge
+                                                together
+ RETURNS
+    Pointer to span tree containing the merged spans on success, NULL on failure
+ DESCRIPTION
+    Merge two sets of hyperslab spans together and return the span tree from
+    the merged set.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5S_hyper_span_info_t *
+H5S_hyper_merge_spans_helper (H5S_hyper_span_info_t *a_spans, H5S_hyper_span_info_t *b_spans)
+{
+    H5S_hyper_span_info_t *merged_spans=NULL; /* Pointer to the merged span tree */
+    H5S_hyper_span_info_t *tmp_spans;   /* Pointer to temporary new span tree */
+    H5S_hyper_span_t *tmp_span;         /* Pointer to temporary new span */
+    H5S_hyper_span_t *span_a;           /* Pointer to current span 'a' working on */
+    H5S_hyper_span_t *span_b;           /* Pointer to current span 'b' working on */
+    H5S_hyper_span_t *prev_span_merge;  /* Pointer to previous merged span */
+    unsigned recover_a, recover_b;         /* Flags to indicate when to recover temporary spans */
+    H5S_hyper_span_info_t *ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_merge_spans_helper);
+
+    /* Make certain both 'a' & 'b' spans have down span trees or neither does */
+    assert((a_spans!=NULL && b_spans!=NULL) || (a_spans==NULL && b_spans==NULL));
+
+    /* Check if the span trees for the 'a' span and the 'b' span are the same */
+    if(H5S_hyper_cmp_spans(a_spans,b_spans)==TRUE) {
+        if(a_spans==NULL)
+            merged_spans=NULL;
+        else {
+            /* Copy one of the span trees to return */
+            if((merged_spans=H5S_hyper_copy_span(a_spans))==NULL)
+                HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOPY, NULL, "can't copy hyperslab span tree");
+        } /* end else */
+    } /* end if */
+    else {
+        /* Get the pointers to the 'a' and 'b' span lists */
+        span_a=a_spans->head;
+        span_b=b_spans->head;
+
+        /* Set the pointer to the previous spans */
+        prev_span_merge=NULL;
+
+        /* No spans to recover yet */
+        recover_a=recover_b=0;
+
+        /* Work through the list of spans in the new list */
+        while(span_a!=NULL && span_b!=NULL) {
+            /* Check if the 'a' span is completely before 'b' span */
+            /*    AAAAAAA                            */
+            /* <-----------------------------------> */
+            /*             BBBBBBBBBB                */
+            if(span_a->high<span_b->low) {
+                /* Merge/add span 'a' with/to the merged spans */
+                if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_a->low,span_a->high,span_a->down,NULL)==FAIL)
+                    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+                /* Advance span 'a' */
+                H5S_hyper_recover_span(&recover_a,&span_a,span_a->next);
+            } /* end if */
+            /* Check if span 'a' overlaps only the lower bound */
+            /*  of span 'b', up to the upper bound of span 'b' */
+            /*    AAAAAAAAAAAA                       */
+            /* <-----------------------------------> */
+            /*             BBBBBBBBBB                */
+            else if(span_a->low<span_b->low && (span_a->high>=span_b->low && span_a->high<=span_b->high)) {
+                /* Check if span 'a' and span 'b' down spans are equal */
+                if(H5S_hyper_cmp_spans(span_a->down,span_b->down)==TRUE) {
+                    /* Merge/add copy of span 'a' with/to merged spans */
+                    if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_a->low,span_a->high,span_a->down,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+                } /* end if */
+                else {
+                    /* Merge/add lower part of span 'a' with/to merged spans */
+                    if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_a->low,span_b->low-1,span_a->down,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+                    /* Get merged span tree for overlapped section */
+                    tmp_spans=H5S_hyper_merge_spans_helper(span_a->down,span_b->down);
+
+                    /* Merge/add overlapped section to merged spans */
+                    if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_b->low,span_a->high,tmp_spans,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+                    /* Release merged span tree for overlapped section */
+                    H5S_hyper_free_span_info(tmp_spans);
+                } /* end else */
+
+                /* Check if there is an upper part of span 'b' */
+                if(span_a->high<span_b->high) {
+                    /* Copy upper part of span 'b' as new span 'b' */
+
+                    /* Allocate new span node to append to list */
+                    if((tmp_span = H5S_hyper_new_span(span_a->high+1,span_b->high,span_b->down,span_b->next))==NULL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+                    /* Advance span 'a' */
+                    H5S_hyper_recover_span(&recover_a,&span_a,span_a->next);
+
+                    /* Set new span 'b' to tmp_span */
+                    H5S_hyper_recover_span(&recover_b,&span_b,tmp_span);
+                    recover_b=1;
+                } /* end if */
+                else {
+                    /* Advance both span 'a' & 'b' */
+                    H5S_hyper_recover_span(&recover_a,&span_a,span_a->next);
+                    H5S_hyper_recover_span(&recover_b,&span_b,span_b->next);
+                } /* end else */
+            } /* end if */
+            /* Check if span 'a' overlaps the lower & upper bound */
+            /*  of span 'b' */
+            /*    AAAAAAAAAAAAAAAAAAAAA              */
+            /* <-----------------------------------> */
+            /*             BBBBBBBBBB                */
+            else if(span_a->low<span_b->low && span_a->high>span_b->high) {
+                /* Check if span 'a' and span 'b' down spans are equal */
+                if(H5S_hyper_cmp_spans(span_a->down,span_b->down)==TRUE) {
+                    /* Merge/add copy of lower & middle parts of span 'a' to merged spans */
+                    if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_a->low,span_b->high,span_a->down,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+                } /* end if */
+                else {
+                    /* Merge/add lower part of span 'a' to merged spans */
+                    if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_a->low,span_b->low-1,span_a->down,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+                    /* Get merged span tree for overlapped section */
+                    tmp_spans=H5S_hyper_merge_spans_helper(span_a->down,span_b->down);
+
+                    /* Merge/add overlapped section to merged spans */
+                    if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_b->low,span_b->high,tmp_spans,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+                    /* Release merged span tree for overlapped section */
+                    H5S_hyper_free_span_info(tmp_spans);
+                } /* end else */
+
+                /* Copy upper part of span 'a' as new span 'a' (remember to free) */
+
+                /* Allocate new span node to append to list */
+                if((tmp_span = H5S_hyper_new_span(span_b->high+1,span_a->high,span_a->down,span_a->next))==NULL)
+                    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+                /* Set new span 'a' to tmp_span */
+                H5S_hyper_recover_span(&recover_a,&span_a,tmp_span);
+                recover_a=1;
+
+                /* Advance span 'b' */
+                H5S_hyper_recover_span(&recover_b,&span_b,span_b->next);
+            } /* end if */
+            /* Check if span 'a' is entirely within span 'b' */
+            /*                AAAAA                  */
+            /* <-----------------------------------> */
+            /*             BBBBBBBBBB                */
+            else if(span_a->low>=span_b->low && span_a->high<=span_b->high) {
+                /* Check if span 'a' and span 'b' down spans are equal */
+                if(H5S_hyper_cmp_spans(span_a->down,span_b->down)==TRUE) {
+                    /* Merge/add copy of lower & middle parts of span 'b' to merged spans */
+                    if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_b->low,span_a->high,span_a->down,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+                } /* end if */
+                else {
+                    /* Check if there is a lower part of span 'b' */
+                    if(span_a->low>span_b->low) {
+                        /* Merge/add lower part of span 'b' to merged spans */
+                        if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_b->low,span_a->low-1,span_b->down,NULL)==FAIL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+                    } /* end if */
+                    else {
+                        /* No lower part of span 'b' , keep going... */
+                    } /* end else */
+
+                    /* Get merged span tree for overlapped section */
+                    tmp_spans=H5S_hyper_merge_spans_helper(span_a->down,span_b->down);
+
+                    /* Merge/add overlapped section to merged spans */
+                    if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_a->low,span_a->high,tmp_spans,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+                    /* Release merged span tree for overlapped section */
+                    H5S_hyper_free_span_info(tmp_spans);
+                } /* end else */
+
+                /* Check if there is an upper part of span 'b' */
+                if(span_a->high<span_b->high) {
+                    /* Copy upper part of span 'b' as new span 'b' (remember to free) */
+
+                    /* Allocate new span node to append to list */
+                    if((tmp_span = H5S_hyper_new_span(span_a->high+1,span_b->high,span_b->down,span_b->next))==NULL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+                    /* Advance span 'a' */
+                    H5S_hyper_recover_span(&recover_a,&span_a,span_a->next);
+
+                    /* Set new span 'b' to tmp_span */
+                    H5S_hyper_recover_span(&recover_b,&span_b,tmp_span);
+                    recover_b=1;
+                } /* end if */
+                else {
+                    /* Advance both spans */
+                    H5S_hyper_recover_span(&recover_a,&span_a,span_a->next);
+                    H5S_hyper_recover_span(&recover_b,&span_b,span_b->next);
+                } /* end else */
+            } /* end if */
+            /* Check if span 'a' overlaps only the upper bound */
+            /*  of span 'b' */
+            /*                AAAAAAAAAA             */
+            /* <-----------------------------------> */
+            /*             BBBBBBBBBB                */
+            else if((span_a->low>=span_b->low && span_a->low<=span_b->high) && span_a->high>span_b->high) {
+                /* Check if span 'a' and span 'b' down spans are equal */
+                if(H5S_hyper_cmp_spans(span_a->down,span_b->down)==TRUE) {
+                    /* Merge/add copy of span 'b' to merged spans if so */
+                    if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_b->low,span_b->high,span_b->down,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+                } /* end if */
+                else {
+                    /* Check if there is a lower part of span 'b' */
+                    if(span_a->low>span_b->low) {
+                        /* Merge/add lower part of span 'b' to merged spans */
+                        if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_b->low,span_a->low-1,span_b->down,NULL)==FAIL)
+                            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+                    } /* end if */
+                    else {
+                        /* No lower part of span 'b' , keep going... */
+                    } /* end else */
+
+                    /* Get merged span tree for overlapped section */
+                    tmp_spans=H5S_hyper_merge_spans_helper(span_a->down,span_b->down);
+
+                    /* Merge/add overlapped section to merged spans */
+                    if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_a->low,span_b->high,tmp_spans,NULL)==FAIL)
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+                    /* Release merged span tree for overlapped section */
+                    H5S_hyper_free_span_info(tmp_spans);
+                } /* end else */
+
+                /* Copy upper part of span 'a' as new span 'a' */
+
+                /* Allocate new span node to append to list */
+                if((tmp_span = H5S_hyper_new_span(span_b->high+1,span_a->high,span_a->down,span_a->next))==NULL)
+                    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+                /* Set new span 'a' to tmp_span */
+                H5S_hyper_recover_span(&recover_a,&span_a,tmp_span);
+                recover_a=1;
+
+                /* Advance span 'b' */
+                H5S_hyper_recover_span(&recover_b,&span_b,span_b->next);
+            } /* end if */
+            /* Span 'a' must be entirely above span 'b' */
+            /*                         AAAAA         */
+            /* <-----------------------------------> */
+            /*             BBBBBBBBBB                */
+            else {
+                /* Merge/add span 'b' with the merged spans */
+                if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_b->low,span_b->high,span_b->down,NULL)==FAIL)
+                    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+                /* Advance span 'b' */
+                H5S_hyper_recover_span(&recover_b,&span_b,span_b->next);
+            } /* end else */
+        } /* end while */
+
+        /* Clean up 'a' spans which haven't been added to the list of merged spans */
+        if(span_a!=NULL && span_b==NULL) {
+            while(span_a!=NULL) {
+                /* Merge/add all 'a' spans into the merged spans */
+                if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_a->low,span_a->high,span_a->down,NULL)==FAIL)
+                    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+                /* Advance to next 'a' span, until all processed */
+                H5S_hyper_recover_span(&recover_a,&span_a,span_a->next);
+            } /* end while */
+        } /* end if */
+
+        /* Clean up 'b' spans which haven't been added to the list of merged spans */
+        if(span_a==NULL && span_b!=NULL) {
+            while(span_b!=NULL) {
+                /* Merge/add all 'b' spans into the merged spans */
+                if(H5S_hyper_append_span(&prev_span_merge,&merged_spans,span_b->low,span_b->high,span_b->down,NULL)==FAIL)
+                    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+                /* Advance to next 'b' span, until all processed */
+                H5S_hyper_recover_span(&recover_b,&span_b,span_b->next);
+            } /* end while */
+        } /* end if */
+    } /* end else */
+
+    /* Set return value */
+    ret_value=merged_spans;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_merge_spans_helper() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_merge_spans
+ PURPOSE
+    Merge new hyperslab spans to existing hyperslab selection
+ USAGE
+    herr_t H5S_hyper_merge_spans(space, new_spans, can_own)
+        H5S_t *space;             IN: Dataspace to add new spans to hyperslab
+                                        selection.
+        H5S_hyper_span_t *new_spans;    IN: Span tree of new spans to add to
+                                            hyperslab selection
+        hbool_t can_own;        IN: Flag to indicate that it is OK to point
+                                    directly to the new spans, instead of
+                                    copying them.
+ RETURNS
+    non-negative on success, negative on failure
+ DESCRIPTION
+    Add a set of hyperslab spans to an existing hyperslab selection.  The
+    new spans are required to be non-overlapping with the existing spans in
+    the dataspace's current hyperslab selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_merge_spans (H5S_t *space, H5S_hyper_span_info_t *new_spans, hbool_t can_own)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_merge_spans);
+
+    /* Check args */
+    assert (space);
+    assert (new_spans);
+
+    /* If this is the first span tree in the hyperslab selection, just use it */
+    if(space->select.sel_info.hslab->span_lst==NULL) {
+        if(can_own)
+            space->select.sel_info.hslab->span_lst=new_spans;
+        else
+            space->select.sel_info.hslab->span_lst=H5S_hyper_copy_span(new_spans);
+    } /* end if */
+    else {
+        H5S_hyper_span_info_t *merged_spans;
+
+        /* Get the merged spans */
+        merged_spans=H5S_hyper_merge_spans_helper(space->select.sel_info.hslab->span_lst, new_spans);
+
+        /* Sanity checking since we started with some spans, we should still have some after the merge */
+        assert(merged_spans);
+
+        /* Free the previous spans */
+        H5S_hyper_free_span_info(space->select.sel_info.hslab->span_lst);
+
+        /* Point to the new merged spans */
+        space->select.sel_info.hslab->span_lst=merged_spans;
+    } /* end else */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_hyper_merge_spans() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_spans_nelem
+ PURPOSE
+    Count the number of elements in a span tree
+ USAGE
+    hsize_t H5S_hyper_spans_nelem(spans)
+        const H5S_hyper_span_info_t *spans; IN: Hyperslan span tree to count elements of
+ RETURNS
+    Number of elements in span tree on success; negative on failure
+ DESCRIPTION
+    Counts the number of elements described by the spans in a span tree.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static hsize_t
+H5S_hyper_spans_nelem (H5S_hyper_span_info_t *spans)
+{
+    H5S_hyper_span_t *span;     /* Hyperslab span */
+    hsize_t ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_spans_nelem);
+
+    /* Count the number of elements in the span tree */
+    if(spans==NULL)
+        ret_value=0;
+    else {
+        span=spans->head;
+        ret_value=0;
+        while(span!=NULL) {
+            /* If there are down spans, multiply the size of this span by the total down span elements */
+            if(span->down!=NULL)
+                ret_value+=span->nelem*H5S_hyper_spans_nelem(span->down);
+            /* If there are no down spans, just count the elements in this span */
+            else
+                ret_value+=span->nelem;
+
+            /* Advance to next span */
+            span=span->next;
+        } /* end while */
+    } /* end else */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_spans_nelem() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_make_spans
+ PURPOSE
+    Create a span tree
+ USAGE
+    H5S_hyper_span_t *H5S_hyper_make_spans(rank, start, stride, count, block)
+        unsigned rank;               IN: # of dimensions of the space
+        const hsize_t *start;    IN: Starting location of the hyperslabs
+        const hsize_t *stride;    IN: Stride from the beginning of one block to
+                                        the next
+        const hsize_t *count;     IN: Number of blocks
+        const hsize_t *block;     IN: Size of hyperslab block
+ RETURNS
+    Pointer to new span tree on success, NULL on failure
+ DESCRIPTION
+    Generates a new span tree for the hyperslab parameters specified.
+    Each span tree has a list of the elements spanned in each dimension, with
+    each span node containing a pointer to the list of spans in the next
+    dimension down.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static H5S_hyper_span_info_t *
+H5S_hyper_make_spans (unsigned rank, const hsize_t *start, const hsize_t *stride,
+    const hsize_t *count, const hsize_t *block)
+{
+    H5S_hyper_span_info_t *down;/* Pointer to spans in next dimension down */
+    H5S_hyper_span_t *span;     /* New hyperslab span */
+    H5S_hyper_span_t *last_span;/* Current position in hyperslab span list */
+    H5S_hyper_span_t *head;     /* Head of new hyperslab span list */
+    hsize_t stride_iter;        /* Iterator over the stride values */
+    int i;                     /* Counters */
+    unsigned u;                    /* Counters */
+    H5S_hyper_span_info_t *ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_make_spans);
+
+    /* Check args */
+    assert (rank>0);
+    assert (start);
+    assert (stride);
+    assert (count);
+    assert (block);
+
+    /* Start creating spans in fastest changing dimension */
+    down=NULL;
+    for(i=(rank-1); i>=0; i--) {
+
+        /* Start a new list in this dimension */
+        head=last_span=NULL;
+
+        /* Generate all the spans segments for this dimension */
+        for(u=0, stride_iter=0; u<count[i]; u++,stride_iter+=stride[i]) {
+            /* Allocate a span node */
+            if((span = H5FL_MALLOC(H5S_hyper_span_t))==NULL)
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+            /* Set the span's basic information */
+            span->low=start[i]+stride_iter;
+            span->high=span->low+(block[i]-1);
+            span->nelem=block[i];
+            span->pstride=stride[i];
+            span->next=NULL;
+
+            /* Append to the list of spans in this dimension */
+            if(head==NULL)
+                head=span;
+            else
+                last_span->next=span;
+
+            /* Move current pointer */
+            last_span=span;
+
+            /* Set the information for the next dimension down's spans, if appropriate */
+            if(down!=NULL) {
+                span->down=down;
+                down->count++;  /* Increment reference count for shared span */
+            } /* end if */
+            else {
+                span->down=NULL;
+            } /* end else */
+        } /* end for */
+
+        /* Allocate a span info node */
+        if((down = H5FL_MALLOC(H5S_hyper_span_info_t))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate hyperslab span");
+
+        /* Set the reference count */
+        down->count=0;
+
+        /* Reset the scratch pad space */
+        down->scratch=0;
+
+        /* Keep the pointer to the next dimension down's completed list */
+        down->head=head;
+    } /* end for */
+
+    /* Indicate that there is a pointer to this tree */
+    down->count=1;
+
+    /* Success!  Return the head of the list in the slowest changing dimension */
+    ret_value=down;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_make_spans() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_can_rebuild
+ PURPOSE
+    Check if optimized hyperslab information can be recovered
+ USAGE
+    htri_t H5S_hyper_can_rebuild(space)
+        const H5S_t *space;     IN: Dataspace to check
+ RETURNS
+    TRUE/FALSE on success, <0 on failure
+ DESCRIPTION
+    Examine the span tree for a hyperslab selection and determine if it
+    can be used to rebuild the start/stride/count/block information for
+    the selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    To be able to recover the optimized information, the span tree must conform
+    to span tree able to be generated from a single H5S_SELECT_SET operation.
+
+    This routine doesn't currently detect strided block situations.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_hyper_can_rebuild (const H5S_t *space)
+{
+    H5S_hyper_span_t *span;     /* Current hyperslab span */
+    htri_t ret_value=TRUE;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_can_rebuild);
+
+    /* Check args */
+    assert (space);
+    assert (space->select.sel_info.hslab->span_lst);
+
+    /* For each level of the span tree check that there is only one span at
+     * that level.
+     */
+    span=space->select.sel_info.hslab->span_lst->head;
+    while(span!=NULL) {
+        if(span->next!=NULL)
+            HGOTO_DONE(FALSE);
+        if(span->down)
+            span=span->down->head;
+        else
+            break;
+    } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_can_rebuild() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_rebuild
+ PURPOSE
+    Recover optimized hyperslab information from span tree
+ USAGE
+    herr_t H5S_hyper_rebuild(space)
+        H5S_t *space;     IN: Dataspace to rebuild optimized selection within
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Use the span tree information to recover the optimized form of a hyperslab
+    selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    The recovered optimized information will be similar to that generated from
+    a single H5S_SELECT_SET operation.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_rebuild (H5S_t *space)
+{
+    H5S_hyper_dim_t *diminfo;   /* Per-dimension info for the selection */
+    H5S_hyper_dim_t *app_diminfo;   /* "Application view" per-dimension for the selection */
+    H5S_hyper_span_t *span;     /* Current hyperslab span */
+    unsigned curr_dim;          /* Current dimension being worked on */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_rebuild);
+
+    /* Check args */
+    assert (space);
+    assert (space->select.sel_info.hslab->span_lst);
+
+    /* Get head of span list */
+    span=space->select.sel_info.hslab->span_lst->head;
+
+    /* Protect against empty tree */
+    if(span!=NULL) {
+        /* Iterate down the span tree */
+        curr_dim=0;
+        diminfo=space->select.sel_info.hslab->opt_diminfo;
+        app_diminfo=space->select.sel_info.hslab->app_diminfo;
+        while(span!=NULL) {
+            /* Sanity check */
+            assert(curr_dim<space->extent.rank);
+
+            /* Recover the optimized dimension information */
+            app_diminfo[curr_dim].start = diminfo[curr_dim].start = span->low;
+            app_diminfo[curr_dim].stride = diminfo[curr_dim].stride = 1;
+            app_diminfo[curr_dim].count = diminfo[curr_dim].count = 1;
+            app_diminfo[curr_dim].block = diminfo[curr_dim].block = (span->high-span->low)+1;
+
+            /* Walk down the span tree */
+            if(span->down) {
+                span=span->down->head;
+                curr_dim++;
+            } /* end if */
+            else
+                break;
+        } /* end while */
+
+        /* Indicate that the diminfo is valid */
+        space->select.sel_info.hslab->diminfo_valid=TRUE;
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_hyper_rebuild() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_generate_spans
+ PURPOSE
+    Create span tree for a regular hyperslab selection
+ USAGE
+    herr_t H5S_hyper_generate_spans(space)
+        H5S_t *space;           IN/OUT: Pointer to dataspace
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Create a span tree representation of a regular hyperslab selection and
+    add it to the information for the hyperslab selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_generate_spans(H5S_t *space)
+{
+    hsize_t tmp_start[H5O_LAYOUT_NDIMS];   /* Temporary start information */
+    hsize_t tmp_stride[H5O_LAYOUT_NDIMS];   /* Temporary stride information */
+    hsize_t tmp_count[H5O_LAYOUT_NDIMS];    /* Temporary count information */
+    hsize_t tmp_block[H5O_LAYOUT_NDIMS];    /* Temporary block information */
+    unsigned u;                             /* Counter */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_hyper_generate_spans);
+
+    assert(space);
+    assert(H5S_GET_SELECT_TYPE(space)==H5S_SEL_HYPERSLABS);
+
+    /* Get the diminfo */
+    for(u=0; u<space->extent.rank; u++) {
+        tmp_start[u]=space->select.sel_info.hslab->opt_diminfo[u].start;
+        tmp_stride[u]=space->select.sel_info.hslab->opt_diminfo[u].stride;
+        tmp_count[u]=space->select.sel_info.hslab->opt_diminfo[u].count;
+        tmp_block[u]=space->select.sel_info.hslab->opt_diminfo[u].block;
+    } /* end for */
+
+    /* Build the hyperslab information also */
+    if(H5S_generate_hyperslab (space, H5S_SELECT_SET, tmp_start, tmp_stride, tmp_count, tmp_block)<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINSERT, FAIL, "can't generate hyperslabs");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_hyper_generate_spans() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_generate_hyperlab
+ *
+ * Purpose:	Generate hyperslab information from H5S_select_hyperslab()
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol (split from HS_select_hyperslab()).
+ *              Tuesday, September 12, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_generate_hyperslab (H5S_t *space, H5S_seloper_t op,
+		      const hsize_t start[],
+		      const hsize_t stride[],
+		      const hsize_t count[],
+		      const hsize_t block[])
+{
+    H5S_hyper_span_info_t *new_spans=NULL;  /* Span tree for new hyperslab */
+    H5S_hyper_span_info_t *a_not_b=NULL;    /* Span tree for hyperslab spans in old span tree and not in new span tree */
+    H5S_hyper_span_info_t *a_and_b=NULL;    /* Span tree for hyperslab spans in both old and new span trees */
+    H5S_hyper_span_info_t *b_not_a=NULL;    /* Span tree for hyperslab spans in new span tree and not in old span tree */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_generate_hyperslab);
+
+    /* Check args */
+    assert(space);
+    assert(op>H5S_SELECT_NOOP && op<H5S_SELECT_INVALID);
+    assert(start);
+    assert(stride);
+    assert(count);
+    assert(block);
+
+    /* Generate span tree for new hyperslab information */
+    if((new_spans=H5S_hyper_make_spans(space->extent.rank,start,stride,count,block))==NULL)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINSERT, FAIL, "can't create hyperslab information");
+
+    /* Generate list of blocks to add/remove based on selection operation */
+    if(op==H5S_SELECT_SET) {
+        /* Add new spans to current selection */
+        if(H5S_hyper_merge_spans(space,new_spans,TRUE)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINSERT, FAIL, "can't insert hyperslabs");
+
+        /* Set the number of elements in current selection */
+        space->select.num_elem=H5S_hyper_spans_nelem(new_spans);
+
+        /* Indicate that the new_spans are owned */
+        new_spans=NULL;
+    } /* end if */
+    else {
+        hbool_t updated_spans = FALSE;  /* Whether the spans in the selection were modified */
+
+        /* Generate lists of spans which overlap and don't overlap */
+        if(H5S_hyper_clip_spans(space->select.sel_info.hslab->span_lst,new_spans,&a_not_b,&a_and_b,&b_not_a)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCLIP, FAIL, "can't clip hyperslab information");
+
+        switch(op) {
+            case H5S_SELECT_OR:
+                /* Add any new spans from b_not_a to current selection */
+                if(b_not_a!=NULL) {
+                    if(H5S_hyper_merge_spans(space,b_not_a,FALSE)<0)
+                        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINSERT, FAIL, "can't insert hyperslabs");
+
+                    /* Update the number of elements in current selection */
+                    space->select.num_elem+=H5S_hyper_spans_nelem(b_not_a);
+
+                    /* Indicate that the spans were updated */
+                    updated_spans = TRUE;
+                } /* end if */
+                break;
+
+            case H5S_SELECT_AND:
+                /* Free the current selection */
+                if(H5S_hyper_free_span_info(space->select.sel_info.hslab->span_lst)<0)
+                    HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "failed to release hyperslab spans");
+                space->select.sel_info.hslab->span_lst=NULL;
+
+                /* Reset the number of items in selection */
+                space->select.num_elem=0;
+
+                /* Check if there are any overlapped selections */
+                if(a_and_b!=NULL) {
+                    if(H5S_hyper_merge_spans(space,a_and_b,TRUE)<0)
+                        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINSERT, FAIL, "can't insert hyperslabs");
+
+                    /* Update the number of elements in current selection */
+                    space->select.num_elem=H5S_hyper_spans_nelem(a_and_b);
+
+                    /* Indicate that the a_and_b spans are owned */
+                    a_and_b=NULL;
+
+                    /* Indicate that the spans were updated */
+                    updated_spans = TRUE;
+                } /* end if */
+                break;
+
+            case H5S_SELECT_XOR:
+                /* Free the current selection */
+                if(H5S_hyper_free_span_info(space->select.sel_info.hslab->span_lst)<0)
+                    HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "failed to release hyperslab spans");
+                space->select.sel_info.hslab->span_lst=NULL;
+
+                /* Reset the number of items in selection */
+                space->select.num_elem=0;
+
+                /* Check if there are any non-overlapped selections */
+                if(a_not_b!=NULL) {
+                    if(H5S_hyper_merge_spans(space,a_not_b,FALSE)<0)
+                        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINSERT, FAIL, "can't insert hyperslabs");
+
+                    /* Update the number of elements in current selection */
+                    space->select.num_elem=H5S_hyper_spans_nelem(a_not_b);
+
+                    /* Indicate that the spans were updated */
+                    updated_spans = TRUE;
+                } /* end if */
+                if(b_not_a!=NULL) {
+                    if(H5S_hyper_merge_spans(space,b_not_a,FALSE)<0)
+                        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINSERT, FAIL, "can't insert hyperslabs");
+
+                    /* Update the number of elements in current selection */
+                    space->select.num_elem+=H5S_hyper_spans_nelem(b_not_a);
+
+                    /* Indicate that the spans were updated */
+                    updated_spans = TRUE;
+                } /* end if */
+                break;
+
+            case H5S_SELECT_NOTB:
+                /* Free the current selection */
+                if(H5S_hyper_free_span_info(space->select.sel_info.hslab->span_lst)<0)
+                    HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "failed to release hyperslab spans");
+                space->select.sel_info.hslab->span_lst=NULL;
+
+                /* Reset the number of items in selection */
+                space->select.num_elem=0;
+
+                /* Check if there are any non-overlapped selections */
+                if(a_not_b!=NULL) {
+                    if(H5S_hyper_merge_spans(space,a_not_b,TRUE)<0)
+                        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINSERT, FAIL, "can't insert hyperslabs");
+
+                    /* Update the number of elements in current selection */
+                    space->select.num_elem=H5S_hyper_spans_nelem(a_not_b);
+
+                    /* Indicate that the a_not_b are owned */
+                    a_not_b=NULL;
+
+                    /* Indicate that the spans were updated */
+                    updated_spans = TRUE;
+                } /* end if */
+                break;
+
+            case H5S_SELECT_NOTA:
+                /* Free the current selection */
+                if(H5S_hyper_free_span_info(space->select.sel_info.hslab->span_lst)<0)
+                    HGOTO_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "failed to release hyperslab spans");
+                space->select.sel_info.hslab->span_lst=NULL;
+
+                /* Reset the number of items in selection */
+                space->select.num_elem=0;
+
+                /* Check if there are any non-overlapped selections */
+                if(b_not_a!=NULL) {
+                    if(H5S_hyper_merge_spans(space,b_not_a,TRUE)<0)
+                        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINSERT, FAIL, "can't insert hyperslabs");
+
+                    /* Update the number of elements in current selection */
+                    space->select.num_elem=H5S_hyper_spans_nelem(b_not_a);
+
+                    /* Indicate that the b_not_a are owned */
+                    b_not_a=NULL;
+
+                    /* Indicate that the spans were updated */
+                    updated_spans = TRUE;
+                } /* end if */
+                break;
+
+            default:
+                HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "invalid selection operation");
+        } /* end switch */
+
+        /* Free the hyperslab trees generated from the clipping algorithm */
+        if(a_not_b)
+            H5S_hyper_free_span_info(a_not_b);
+        if(a_and_b)
+            H5S_hyper_free_span_info(a_and_b);
+        if(b_not_a)
+            H5S_hyper_free_span_info(b_not_a);
+
+        /* Check if the resulting hyperslab span tree is empty */
+        if(space->select.sel_info.hslab->span_lst==NULL) {
+            H5S_hyper_span_info_t *spans;     /* Empty hyperslab span tree */
+
+            /* Sanity check */
+            assert(space->select.num_elem==0);
+
+            /* Allocate a span info node */
+            if((spans = H5FL_MALLOC(H5S_hyper_span_info_t))==NULL)
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab span");
+
+            /* Set the reference count */
+            spans->count=1;
+
+            /* Reset the scratch pad space */
+            spans->scratch=0;
+
+            /* Set to empty tree */
+            spans->head=NULL;
+
+            /* Set pointer to empty span tree */
+            space->select.sel_info.hslab->span_lst=spans;
+        } /* end if */
+        else {
+            /* Check if we updated the spans */
+            if(updated_spans) {
+                htri_t      status;         /* Status from internal calls */
+
+                /* Check if the resulting hyperslab span tree can be used to re-build
+                 * "optimized" start/stride/count/block information.
+                 */
+                status=H5S_hyper_can_rebuild(space);
+                if(status<0)
+                    HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOUNT, FAIL, "can't check for rebuilding hyperslab info");
+                if(status>0)
+                    if(H5S_hyper_rebuild(space)<0)
+                        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOUNT, FAIL, "can't rebuild hyperslab info");
+            } /* end if */
+        } /* end else */
+    } /* end else */
+
+done:
+    /* Free the new spans */
+    if(new_spans!=NULL)
+        if(H5S_hyper_free_span_info(new_spans)<0)
+            HDONE_ERROR(H5E_INTERNAL, H5E_CANTFREE, FAIL, "failed to release temporary hyperslab spans");
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_generate_hyperslab() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_select_hyperslab
+ *
+ * Purpose:	Internal version of H5Sselect_hyperslab().
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, January 10, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_select_hyperslab (H5S_t *space, H5S_seloper_t op,
+		      const hsize_t start[],
+		      const hsize_t *stride,
+		      const hsize_t count[],
+		      const hsize_t *block)
+{
+    hsize_t int_stride[H5O_LAYOUT_NDIMS];   /* Internal storage for stride information */
+    hsize_t int_count[H5O_LAYOUT_NDIMS];    /* Internal storage for count information */
+    hsize_t int_block[H5O_LAYOUT_NDIMS];    /* Internal storage for block information */
+    const hsize_t *opt_stride;      /* Optimized stride information */
+    const hsize_t *opt_count;       /* Optimized count information */
+    const hsize_t *opt_block;       /* Optimized block information */
+    unsigned u;                     /* Counters */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_select_hyperslab, FAIL);
+
+    /* Check args */
+    assert(space);
+    assert(start);
+    assert(count);
+    assert(op>H5S_SELECT_NOOP && op<H5S_SELECT_INVALID);
+
+    /* Point to the correct stride values */
+    if(stride==NULL)
+        stride = _ones;
+
+    /* Point to the correct block values */
+    if(block==NULL)
+        block = _ones;
+
+    /*
+     * Check new selection.
+     */
+    for(u=0; u<space->extent.rank; u++) {
+        /* Check for overlapping hyperslab blocks in new selection. */
+        if(count[u]>1 && stride[u]<block[u])
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "hyperslab blocks overlap");
+
+        /* Detect zero-sized hyperslabs in new selection */
+        if(count[u] == 0 || block[u] == 0) {
+            switch(op) {
+                case H5S_SELECT_SET:   /* Select "set" operation */
+                case H5S_SELECT_AND:   /* Binary "and" operation for hyperslabs */
+                case H5S_SELECT_NOTA:  /* Binary "B not A" operation for hyperslabs */
+                    /* Convert to "none" selection */
+                    if(H5S_select_none(space)<0)
+                        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't convert selection");
+                    HGOTO_DONE(SUCCEED);
+
+                case H5S_SELECT_OR:    /* Binary "or" operation for hyperslabs */
+                case H5S_SELECT_XOR:   /* Binary "xor" operation for hyperslabs */
+                case H5S_SELECT_NOTB:  /* Binary "A not B" operation for hyperslabs */
+                    HGOTO_DONE(SUCCEED);        /* Selection stays same */
+
+                default:
+                    HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "invalid selection operation");
+            } /* end switch */
+        } /* end if */
+    } /* end for */
+
+    /* Optimize hyperslab parameters to merge contiguous blocks, etc. */
+    if(stride == _ones && block == _ones) {
+        /* Point to existing arrays */
+        opt_stride = _ones;
+        opt_count = _ones;
+        opt_block = count;
+    } /* end if */
+    else {
+        /* Point to local arrays */
+        opt_stride = int_stride;
+        opt_count = int_count;
+        opt_block = int_block;
+        for(u=0; u<space->extent.rank; u++) {
+            /* contiguous hyperslabs have the block size equal to the stride */
+            if(stride[u]==block[u]) {
+                int_count[u]=1;
+                int_stride[u]=1;
+                if(block[u]==1)
+                    int_block[u]=count[u];
+                else
+                    int_block[u]=block[u]*count[u];
+            } /* end if */
+            else {
+                if(count[u]==1)
+                    int_stride[u]=1;
+                else {
+                    assert(stride[u]>block[u]);
+                    int_stride[u]=stride[u];
+                } /* end else */
+                int_count[u]=count[u];
+                int_block[u]=block[u];
+            } /* end else */
+        } /* end for */
+    } /* end else */
+
+    /* Fixup operation for non-hyperslab selections */
+    switch(H5S_GET_SELECT_TYPE(space)) {
+        case H5S_SEL_NONE:   /* No elements selected in dataspace */
+            switch(op) {
+                case H5S_SELECT_SET:   /* Select "set" operation */
+                    /* Change "none" selection to hyperslab selection */
+                    break;
+
+                case H5S_SELECT_OR:    /* Binary "or" operation for hyperslabs */
+                case H5S_SELECT_XOR:   /* Binary "xor" operation for hyperslabs */
+                case H5S_SELECT_NOTA:  /* Binary "B not A" operation for hyperslabs */
+                    op=H5S_SELECT_SET; /* Maps to "set" operation when applied to "none" selection */
+                    break;
+
+                case H5S_SELECT_AND:   /* Binary "and" operation for hyperslabs */
+                case H5S_SELECT_NOTB:  /* Binary "A not B" operation for hyperslabs */
+                    HGOTO_DONE(SUCCEED);        /* Selection stays "none" */
+
+                default:
+                    HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "invalid selection operation");
+            } /* end switch */
+            break;
+
+        case H5S_SEL_ALL:    /* All elements selected in dataspace */
+            switch(op) {
+                case H5S_SELECT_SET:   /* Select "set" operation */
+                    /* Change "all" selection to hyperslab selection */
+                    break;
+
+                case H5S_SELECT_OR:    /* Binary "or" operation for hyperslabs */
+                    HGOTO_DONE(SUCCEED);        /* Selection stays "all" */
+
+                case H5S_SELECT_AND:   /* Binary "and" operation for hyperslabs */
+                    op=H5S_SELECT_SET; /* Maps to "set" operation when applied to "none" selection */
+                    break;
+
+                case H5S_SELECT_XOR:   /* Binary "xor" operation for hyperslabs */
+                case H5S_SELECT_NOTB:  /* Binary "A not B" operation for hyperslabs */
+                    /* Convert current "all" selection to "real" hyperslab selection */
+                    /* Then allow operation to proceed */
+                    {
+                        hsize_t tmp_start[H5O_LAYOUT_NDIMS];   /* Temporary start information */
+                        hsize_t tmp_stride[H5O_LAYOUT_NDIMS];   /* Temporary stride information */
+                        hsize_t tmp_count[H5O_LAYOUT_NDIMS];    /* Temporary count information */
+                        hsize_t tmp_block[H5O_LAYOUT_NDIMS];    /* Temporary block information */
+
+                        /* Fill in temporary information for the dimensions */
+                        for(u=0; u<space->extent.rank; u++) {
+                            tmp_start[u]=0;
+                            tmp_stride[u]=1;
+                            tmp_count[u]=1;
+                            tmp_block[u]=space->extent.size[u];
+                        } /* end for */
+
+                        /* Convert to hyperslab selection */
+                        if(H5S_select_hyperslab(space,H5S_SELECT_SET,tmp_start,tmp_stride,tmp_count,tmp_block)<0)
+                            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't convert selection");
+                    } /* end case */
+                    break;
+
+                case H5S_SELECT_NOTA:  /* Binary "B not A" operation for hyperslabs */
+                    /* Convert to "none" selection */
+                    if(H5S_select_none(space)<0)
+                        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't convert selection");
+                    HGOTO_DONE(SUCCEED);
+
+                default:
+                    HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "invalid selection operation");
+            } /* end switch */
+            break;
+
+        case H5S_SEL_HYPERSLABS:
+            /* Hyperslab operation on hyperslab selection, OK */
+            break;
+
+        case H5S_SEL_POINTS: /* Can't combine hyperslab operations and point selections currently */
+            if(op==H5S_SELECT_SET)      /* Allow only "set" operation to proceed */
+                break;
+            /* Else fall through to error */
+
+        default:
+            HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "invalid selection operation");
+    } /* end switch */
+
+    if(op==H5S_SELECT_SET) {
+        /* If we are setting a new selection, remove current selection first */
+        if(H5S_SELECT_RELEASE(space)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't release hyperslab");
+
+        /* Allocate space for the hyperslab selection information */
+        if((space->select.sel_info.hslab=H5FL_MALLOC(H5S_hyper_sel_t))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate hyperslab info");
+
+        /* Save the diminfo */
+        space->select.num_elem=1;
+        for(u=0; u<space->extent.rank; u++) {
+            space->select.sel_info.hslab->app_diminfo[u].start = start[u];
+            space->select.sel_info.hslab->app_diminfo[u].stride = stride[u];
+            space->select.sel_info.hslab->app_diminfo[u].count = count[u];
+            space->select.sel_info.hslab->app_diminfo[u].block = block[u];
+
+            space->select.sel_info.hslab->opt_diminfo[u].start = start[u];
+            space->select.sel_info.hslab->opt_diminfo[u].stride = opt_stride[u];
+            space->select.sel_info.hslab->opt_diminfo[u].count = opt_count[u];
+            space->select.sel_info.hslab->opt_diminfo[u].block = opt_block[u];
+            space->select.num_elem*=(opt_count[u]*opt_block[u]);
+        } /* end for */
+
+        /* Indicate that the dimension information is valid */
+        space->select.sel_info.hslab->diminfo_valid=TRUE;
+
+        /* Indicate that there's no slab information */
+        space->select.sel_info.hslab->span_lst=NULL;
+    } /* end if */
+    else if(op>=H5S_SELECT_OR && op<=H5S_SELECT_NOTA) {
+        /* Sanity check */
+        assert(H5S_GET_SELECT_TYPE(space)==H5S_SEL_HYPERSLABS);
+
+        /* Check if there's no hyperslab span information currently */
+        if(space->select.sel_info.hslab->span_lst==NULL)
+            if(H5S_hyper_generate_spans(space)<0)
+                HGOTO_ERROR(H5E_DATASPACE, H5E_UNINITIALIZED, FAIL, "dataspace does not have span tree");
+
+        /* Indicate that the regular dimensions are no longer valid */
+        space->select.sel_info.hslab->diminfo_valid=FALSE;
+
+        /* Add in the new hyperslab information */
+        if(H5S_generate_hyperslab (space, op, start, opt_stride, opt_count, opt_block)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINSERT, FAIL, "can't generate hyperslabs");
+    } /* end if */
+    else
+        HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "invalid selection operation");
+
+    /* Set selection type */
+    space->select.type=H5S_sel_hyper;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5S_select_hyperslab() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sselect_hyperslab
+ PURPOSE
+    Specify a hyperslab to combine with the current hyperslab selection
+ USAGE
+    herr_t H5Sselect_hyperslab(dsid, op, start, stride, count, block)
+        hid_t dsid;             IN: Dataspace ID of selection to modify
+        H5S_seloper_t op;       IN: Operation to perform on current selection
+        const hsize_t *start;        IN: Offset of start of hyperslab
+        const hsize_t *stride;       IN: Hyperslab stride
+        const hsize_t *count;        IN: Number of blocks included in hyperslab
+        const hsize_t *block;        IN: Size of block in hyperslab
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Combines a hyperslab selection with the current selection for a dataspace.
+    If the current selection is not a hyperslab, it is freed and the hyperslab
+    parameters passed in are combined with the H5S_SEL_ALL hyperslab (ie. a
+    selection composing the entire current extent).  If STRIDE or BLOCK is
+    NULL, they are assumed to be set to all '1'.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Sselect_hyperslab(hid_t space_id, H5S_seloper_t op, const hsize_t start[],
+         const hsize_t stride[], const hsize_t count[], const hsize_t block[])
+{
+    H5S_t	*space = NULL;  /* Dataspace to modify selection of */
+    unsigned u;                 /* Local index variable */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Sselect_hyperslab, FAIL);
+    H5TRACE6("e","iSs*h*h*h*h",space_id,op,start,stride,count,block);
+
+    /* Check args */
+    if (NULL == (space=H5I_object_verify(space_id, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
+    if (H5S_SCALAR==H5S_GET_EXTENT_TYPE(space))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "hyperslab doesn't support H5S_SCALAR space");
+    if(start==NULL || count==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "hyperslab not specified");
+    if(!(op>H5S_SELECT_NOOP && op<H5S_SELECT_INVALID))
+        HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "invalid selection operation");
+    if(stride!=NULL) {
+        /* Check for 0-sized strides */
+        for(u=0; u<space->extent.rank; u++) {
+            if(stride[u]==0)
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid stride==0 value");
+        } /* end for */
+    } /* end if */
+
+    if (H5S_select_hyperslab(space, op, start, stride, count, block)<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to set hyperslab selection");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Sselect_hyperslab() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_get_seq_list_gen
+ PURPOSE
+    Create a list of offsets & lengths for a selection
+ USAGE
+    herr_t H5S_select_hyper_get_file_list_gen(space,iter,maxseq,maxelem,nseq,nelem,off,len)
+        H5S_t *space;           IN: Dataspace containing selection to use.
+        H5S_sel_iter_t *iter;   IN/OUT: Selection iterator describing last
+                                    position of interest in selection.
+        size_t maxseq;          IN: Maximum number of sequences to generate
+        size_t maxelem;         IN: Maximum number of elements to include in the
+                                    generated sequences
+        size_t *nseq;           OUT: Actual number of sequences generated
+        size_t *nelem;          OUT: Actual number of elements in sequences generated
+        hsize_t *off;           OUT: Array of offsets
+        size_t *len;            OUT: Array of lengths
+ RETURNS
+    Non-negative on success/Negative on failure.
+ DESCRIPTION
+    Use the selection in the dataspace to generate a list of byte offsets and
+    lengths for the region(s) selected.  Start/Restart from the position in the
+    ITER parameter.  The number of sequences generated is limited by the MAXSEQ
+    parameter and the number of sequences actually generated is stored in the
+    NSEQ parameter.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_get_seq_list_gen(const H5S_t *space,H5S_sel_iter_t *iter,
+    size_t maxseq, size_t maxelem, size_t *nseq, size_t *nelem,
+    hsize_t *off, size_t *len)
+{
+    H5S_hyper_span_t *curr_span;    /* Current hyperslab span node */
+    H5S_hyper_span_t **ispan;       /* Iterator's hyperslab span nodes */
+    hsize_t slab[H5O_LAYOUT_NDIMS]; /* Cumulative size of each dimension in bytes */
+    hsize_t acc;        /* Accumulator for computing cumulative sizes */
+    hsize_t loc_off;    /* Element offset in the dataspace */
+    hsize_t last_span_end=0; /* The offset of the end of the last span */
+    hsize_t *abs_arr;  /* Absolute hyperslab span position */
+    const hssize_t *off_arr;  /* Offset within the dataspace extent */
+    size_t span_size=0; /* Number of bytes in current span to actually process */
+    size_t io_left;     /* Number of elements left to process */
+    size_t io_bytes_left;   /* Number of bytes left to process */
+    size_t io_used;     /* Number of elements processed */
+    size_t curr_seq=0; /* Number of sequence/offsets stored in the arrays */
+    size_t elem_size;   /* Size of each element iterating over */
+    int ndims;         /* Number of dimensions of dataset */
+    int fast_dim;      /* Rank of the fastest changing dimension for the dataspace */
+    int curr_dim;      /* Current dimension being operated on */
+    int i;             /* Index variable */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_get_seq_list_gen);
+
+    /* Check args */
+    assert(space);
+    assert(iter);
+    assert(maxseq>0);
+    assert(maxelem>0);
+    assert(nseq);
+    assert(nelem);
+    assert(off);
+    assert(len);
+
+    /* Set the rank of the fastest changing dimension */
+    ndims=space->extent.rank;
+    fast_dim=(ndims-1);
+
+    /* Get the pointers to the current span info and span nodes */
+    curr_span=iter->u.hyp.span[fast_dim];
+    abs_arr=iter->u.hyp.off;
+    off_arr=space->select.offset;
+    ispan=iter->u.hyp.span;
+    elem_size=iter->elmt_size;
+
+    /* Set the amount of elements to perform I/O on, etc. */
+    H5_CHECK_OVERFLOW(iter->elmt_left,hsize_t,size_t);
+    io_left=MIN(maxelem,(size_t)iter->elmt_left);
+    io_bytes_left=io_left*elem_size;
+
+    /* Compute the cumulative size of dataspace dimensions */
+    for(i=fast_dim, acc=elem_size; i>=0; i--) {
+        slab[i]=acc;
+        acc*=space->extent.size[i];
+    } /* end for */
+
+    /* Set the offset of the first element iterated on */
+    for(i=0, loc_off=0; i<ndims; i++)
+        /* Compute the sequential element offset */
+        loc_off+=(abs_arr[i]+off_arr[i])*slab[i];
+
+    /* Range check against number of elements left in selection */
+    assert(io_bytes_left<=(iter->elmt_left*elem_size));
+
+    /* Take care of any partial spans leftover from previous I/Os */
+    if(abs_arr[fast_dim]!=curr_span->low) {
+
+        /* Finish the span in the fastest changing dimension */
+
+        /* Compute the number of bytes to attempt in this span */
+        H5_ASSIGN_OVERFLOW(span_size,((curr_span->high-abs_arr[fast_dim])+1)*elem_size,hsize_t,size_t);
+
+        /* Check number of bytes against upper bounds allowed */
+        if(span_size>io_bytes_left)
+            span_size=io_bytes_left;
+
+        /* Add the partial span to the list of sequences */
+        off[curr_seq]=loc_off;
+        len[curr_seq]=span_size;
+
+        /* Increment sequence count */
+        curr_seq++;
+
+        /* Set the location of the last span's end */
+        last_span_end=loc_off+span_size;
+
+        /* Decrement I/O left to perform */
+        io_bytes_left-=span_size;
+
+        /* Advance the hyperslab iterator */
+        /* Check if we are done */
+        if(io_bytes_left>0) {
+            /* Move to next span in fastest changing dimension */
+            curr_span=curr_span->next;
+
+            if(curr_span!=NULL) {
+                /* Move location offset of destination */
+                loc_off+=(curr_span->low-abs_arr[fast_dim])*elem_size;
+
+                /* Move iterator for fastest changing dimension */
+                abs_arr[fast_dim]=curr_span->low;
+            } /* end if */
+        } /* end if */
+        else {
+            abs_arr[fast_dim]+=span_size/elem_size;
+
+            /* Check if we are still within the span */
+            if(abs_arr[fast_dim]<=curr_span->high) {
+                iter->u.hyp.span[fast_dim]=curr_span;
+
+                goto partial_done;      /* finished with partial span */
+            } /* end if */
+            /* If we walked off that span, advance to the next span */
+            else {
+                /* Advance span in this dimension */
+                curr_span=curr_span->next;
+
+                /* Check if we have a valid span in this dimension still */
+                if(curr_span!=NULL) {
+                    /* Reset absolute position */
+                    abs_arr[fast_dim]=curr_span->low;
+                    iter->u.hyp.span[fast_dim]=curr_span;
+
+                    goto partial_done;      /* finished with partial span */
+                } /* end if */
+            } /* end else */
+        } /* end else */
+
+        /* Adjust iterator pointers */
+
+        if(curr_span==NULL) {
+/* Same as code in main loop */
+            /* Start at the next fastest dim */
+            curr_dim=fast_dim-1;
+
+            /* Work back up through the dimensions */
+            while(curr_dim>=0) {
+                /* Reset the current span */
+                curr_span=iter->u.hyp.span[curr_dim];
+
+                /* Increment absolute position */
+                abs_arr[curr_dim]++;
+
+                /* Check if we are still within the span */
+                if(abs_arr[curr_dim]<=curr_span->high) {
+                    break;
+                } /* end if */
+                /* If we walked off that span, advance to the next span */
+                else {
+                    /* Advance span in this dimension */
+                    curr_span=curr_span->next;
+
+                    /* Check if we have a valid span in this dimension still */
+                    if(curr_span!=NULL) {
+                        /* Reset the span in the current dimension */
+                        ispan[curr_dim]=curr_span;
+
+                        /* Reset absolute position */
+                        abs_arr[curr_dim]=curr_span->low;
+
+                        break;
+                    } /* end if */
+                    else {
+                        /* If we finished the span list in this dimension, decrement the dimension worked on and loop again */
+                        curr_dim--;
+                    } /* end else */
+                } /* end else */
+            } /* end while */
+
+            /* Check if we are finished with the spans in the tree */
+            if(curr_dim<0) {
+                /* We had better be done with I/O or bad things are going to happen... */
+                assert(io_bytes_left==0);
+
+                goto partial_done;      /* finished with partial span */
+            } /* end if */
+            else {
+                /* Walk back down the iterator positions, reseting them */
+                while(curr_dim<fast_dim) {
+                    assert(curr_span);
+                    assert(curr_span->down);
+                    assert(curr_span->down->head);
+
+                    /* Increment current dimension */
+                    curr_dim++;
+
+                    /* Set the new span_info & span for this dimension */
+                    iter->u.hyp.span[curr_dim]=curr_span->down->head;
+
+                    /* Advance span down the tree */
+                    curr_span=curr_span->down->head;
+
+                    /* Reset the absolute offset for the dim */
+                    abs_arr[curr_dim]=curr_span->low;
+                } /* end while */
+
+                /* Verify that the curr_span points to the fastest dim */
+                assert(curr_span==iter->u.hyp.span[fast_dim]);
+            } /* end else */
+
+            /* Reset the buffer offset */
+            for(i=0, loc_off=0; i<ndims; i++)
+                loc_off+=(abs_arr[i]+off_arr[i])*slab[i];
+        } /* end if */
+    } /* end if */
+
+partial_done:   /* Yes, goto's are evil, so sue me... :-) */
+
+    /* Perform the I/O on the elements, based on the position of the iterator */
+    while(io_bytes_left>0 && curr_seq<maxseq) {
+        /* Adjust location offset of destination to compensate for initial increment below */
+        loc_off-=curr_span->pstride;
+
+        /* Loop over all the spans in the fastest changing dimension */
+        while(curr_span!=NULL) {
+            /* Move location offset of destination */
+            loc_off+=curr_span->pstride;
+
+            /* Compute the number of elements to attempt in this span */
+            H5_ASSIGN_OVERFLOW(span_size,curr_span->nelem,hsize_t,size_t);
+
+            /* Check number of elements against upper bounds allowed */
+            if(span_size>=io_bytes_left) {
+                /* Trim the number of bytes to output */
+                span_size=io_bytes_left;
+                io_bytes_left=0;
+
+/* COMMON */
+                /* Store the I/O information for the span */
+
+                /* Check if this is appending onto previous sequence */
+                if(curr_seq>0 && last_span_end==loc_off)
+                    len[curr_seq-1]+=span_size;
+                else {
+                    off[curr_seq]=loc_off;
+                    len[curr_seq]=span_size;
+
+                    /* Increment the number of sequences in arrays */
+                    curr_seq++;
+                } /* end else */
+
+                /* Set the location of the last span's end */
+                last_span_end=loc_off+span_size;
+
+                /* If the sequence & offset arrays are full, do what? */
+                if(curr_seq>=maxseq) {
+                    /* Break out now, we are finished with sequences */
+                    break;
+
+                } /* end else */
+/* end COMMON */
+
+                /* Break out now, we are finished with I/O */
+                break;
+            } /* end if */
+            else {
+                /* Decrement I/O left to perform */
+                io_bytes_left-=span_size;
+
+/* COMMON */
+                /* Store the I/O information for the span */
+
+                /* Check if this is appending onto previous sequence */
+                if(curr_seq>0 && last_span_end==loc_off)
+                    len[curr_seq-1]+=span_size;
+                else {
+                    off[curr_seq]=loc_off;
+                    len[curr_seq]=span_size;
+
+                    /* Increment the number of sequences in arrays */
+                    curr_seq++;
+                } /* end else */
+
+                /* Set the location of the last span's end */
+                last_span_end=loc_off+span_size;
+
+                /* If the sequence & offset arrays are full, do what? */
+                if(curr_seq>=maxseq) {
+                    /* Break out now, we are finished with sequences */
+                    break;
+                } /* end else */
+/* end COMMON */
+            } /* end else */
+
+	    /* Move to next span in fastest changing dimension */
+	    curr_span=curr_span->next;
+        } /* end while */
+
+        /* Check if we are done */
+        if(io_bytes_left==0 || curr_seq>=maxseq) {
+            abs_arr[fast_dim]=curr_span->low+(span_size/elem_size);
+
+            /* Check if we are still within the span */
+            if(abs_arr[fast_dim]<=curr_span->high) {
+                iter->u.hyp.span[fast_dim]=curr_span;
+                break;
+            } /* end if */
+            /* If we walked off that span, advance to the next span */
+            else {
+                /* Advance span in this dimension */
+                curr_span=curr_span->next;
+
+                /* Check if we have a valid span in this dimension still */
+                if(curr_span!=NULL) {
+                    /* Reset absolute position */
+                    abs_arr[fast_dim]=curr_span->low;
+                    iter->u.hyp.span[fast_dim]=curr_span;
+                    break;
+                } /* end if */
+            } /* end else */
+        } /* end if */
+
+        /* Adjust iterator pointers */
+
+        /* Start at the next fastest dim */
+        curr_dim=fast_dim-1;
+
+        /* Work back up through the dimensions */
+        while(curr_dim>=0) {
+            /* Reset the current span */
+	    curr_span=iter->u.hyp.span[curr_dim];
+
+            /* Increment absolute position */
+            abs_arr[curr_dim]++;
+
+            /* Check if we are still within the span */
+            if(abs_arr[curr_dim]<=curr_span->high) {
+                break;
+            } /* end if */
+            /* If we walked off that span, advance to the next span */
+            else {
+                /* Advance span in this dimension */
+                curr_span=curr_span->next;
+
+                /* Check if we have a valid span in this dimension still */
+                if(curr_span!=NULL) {
+                    /* Reset the span in the current dimension */
+                    ispan[curr_dim]=curr_span;
+
+                    /* Reset absolute position */
+                    abs_arr[curr_dim]=curr_span->low;
+
+                    break;
+                } /* end if */
+                else {
+                    /* If we finished the span list in this dimension, decrement the dimension worked on and loop again */
+                    curr_dim--;
+                } /* end else */
+            } /* end else */
+        } /* end while */
+
+        /* Check if we are finished with the spans in the tree */
+        if(curr_dim<0) {
+            /* We had better be done with I/O or bad things are going to happen... */
+            assert(io_bytes_left==0);
+            break;
+        } /* end if */
+        else {
+            /* Walk back down the iterator positions, reseting them */
+            while(curr_dim<fast_dim) {
+                assert(curr_span);
+                assert(curr_span->down);
+                assert(curr_span->down->head);
+
+                /* Increment current dimension to the next dimension down */
+                curr_dim++;
+
+                /* Set the new span for the next dimension down */
+                iter->u.hyp.span[curr_dim]=curr_span->down->head;
+
+                /* Advance span down the tree */
+                curr_span=curr_span->down->head;
+
+                /* Reset the absolute offset for the dim */
+                abs_arr[curr_dim]=curr_span->low;
+            } /* end while */
+
+            /* Verify that the curr_span points to the fastest dim */
+            assert(curr_span==iter->u.hyp.span[fast_dim]);
+        } /* end else */
+
+        /* Reset the buffer offset */
+        for(i=0, loc_off=0; i<ndims; i++)
+            loc_off+=(abs_arr[i]+off_arr[i])*slab[i];
+    } /* end while */
+
+    /* Decrement number of elements left in iterator */
+    io_used=(io_left-(io_bytes_left/elem_size));
+    iter->elmt_left-=io_used;
+
+    /* Set the number of sequences generated */
+    *nseq=curr_seq;
+
+    /* Set the number of elements used */
+    *nelem=io_used;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5S_hyper_get_seq_list_gen() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_get_seq_list_opt
+ PURPOSE
+    Create a list of offsets & lengths for a selection
+ USAGE
+    herr_t H5S_select_hyper_get_file_list_opt(space,iter,maxseq,maxelem,nseq,nelem,off,len)
+        H5S_t *space;           IN: Dataspace containing selection to use.
+        H5S_sel_iter_t *iter;   IN/OUT: Selection iterator describing last
+                                    position of interest in selection.
+        size_t maxseq;          IN: Maximum number of sequences to generate
+        size_t maxelem;         IN: Maximum number of elements to include in the
+                                    generated sequences
+        size_t *nseq;           OUT: Actual number of sequences generated
+        size_t *nelem;          OUT: Actual number of elements in sequences generated
+        hsize_t *off;           OUT: Array of offsets
+        size_t *len;            OUT: Array of lengths
+ RETURNS
+    Non-negative on success/Negative on failure.
+ DESCRIPTION
+    Use the selection in the dataspace to generate a list of byte offsets and
+    lengths for the region(s) selected.  Start/Restart from the position in the
+    ITER parameter.  The number of sequences generated is limited by the MAXSEQ
+    parameter and the number of sequences actually generated is stored in the
+    NSEQ parameter.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_get_seq_list_opt(const H5S_t *space,H5S_sel_iter_t *iter,
+    size_t maxseq, size_t maxelem, size_t *nseq, size_t *nelem,
+    hsize_t *off, size_t *len)
+{
+    hsize_t *mem_size;                  /* Size of the source buffer */
+    hsize_t slab[H5O_LAYOUT_NDIMS];     /* Hyperslab size */
+    const hssize_t *sel_off;            /* Selection offset in dataspace */
+    hsize_t offset[H5O_LAYOUT_NDIMS];  /* Coordinate offset in dataspace */
+    hsize_t tmp_count[H5O_LAYOUT_NDIMS];/* Temporary block count */
+    hsize_t tmp_block[H5O_LAYOUT_NDIMS];/* Temporary block offset */
+    hsize_t wrap[H5O_LAYOUT_NDIMS];    /* Bytes to wrap around at the end of a row */
+    hsize_t skip[H5O_LAYOUT_NDIMS];     /* Bytes to skip between blocks */
+    const H5S_hyper_dim_t *tdiminfo;    /* Temporary pointer to diminfo information */
+    hsize_t fast_dim_start,    /* Local copies of fastest changing dimension info */
+        fast_dim_stride,
+        fast_dim_block,
+        fast_dim_offset;
+    size_t fast_dim_buf_off;    /* Local copy of amount to move fastest dimension buffer offset */
+    size_t fast_dim_count;      /* Number of blocks left in fastest changing dimension */
+    size_t tot_blk_count;       /* Total number of blocks left to output */
+    size_t act_blk_count;       /* Actual number of blocks to output */
+    size_t total_rows;          /* Total number of entire rows to output */
+    size_t curr_rows;           /* Current number of entire rows to output */
+    int fast_dim;       /* Rank of the fastest changing dimension for the dataspace */
+    int temp_dim;       /* Temporary rank holder */
+    int ndims;          /* Number of dimensions of dataset */
+    hsize_t acc;	/* Accumulator */
+    hsize_t loc;        /* Coordinate offset */
+    int i;              /* Local index variable */
+    size_t curr_seq=0;  /* Current sequence being operated on */
+    size_t actual_elem; /* The actual number of elements to count */
+    size_t actual_bytes;/* The actual number of bytes to copy */
+    size_t nelmts;      /* Starting number of elements */
+    size_t io_left;     /* The number of elements left in I/O operation */
+    size_t start_io_left; /* The initial number of elements left in I/O operation */
+    size_t elem_size;   /* Size of each element iterating over */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_get_seq_list_opt);
+
+    /* Check args */
+    assert(space);
+    assert(iter);
+    assert(maxseq>0);
+    assert(maxelem>0);
+    assert(nseq);
+    assert(nelem);
+    assert(off);
+    assert(len);
+
+    /* Set the local copy of the diminfo pointer */
+    tdiminfo=iter->u.hyp.diminfo;
+
+    /* Check if this is a "flattened" regular hyperslab selection */
+    if(iter->u.hyp.iter_rank!=0 && iter->u.hyp.iter_rank<space->extent.rank) {
+        /* Set the aliases for a few important dimension ranks */
+        ndims=iter->u.hyp.iter_rank;
+        fast_dim=ndims-1;
+
+        /* Set the local copy of the selection offset */
+        sel_off=iter->u.hyp.sel_off;
+
+        /* Set up the pointer to the size of the memory space */
+        mem_size=iter->u.hyp.size;
+    } /* end if */
+    else {
+        /* Set the aliases for a few important dimension ranks */
+        ndims=space->extent.rank;
+        fast_dim=ndims-1;
+
+        /* Set the local copy of the selection offset */
+        sel_off=space->select.offset;
+
+        /* Set up the pointer to the size of the memory space */
+        mem_size=space->extent.size;
+    } /* end else */
+
+    /* initialize row sizes for each dimension */
+    elem_size=iter->elmt_size;
+    for(i=(ndims-1),acc=elem_size; i>=0; i--) {
+        slab[i]=acc;
+        acc*=mem_size[i];
+    } /* end for */
+
+    /* Calculate the number of elements to sequence through */
+    H5_CHECK_OVERFLOW(iter->elmt_left,hsize_t,size_t);
+    start_io_left=io_left=MIN((size_t)iter->elmt_left,maxelem);
+
+    /* Check if we stopped in the middle of a sequence of elements */
+    if((iter->u.hyp.off[fast_dim]-tdiminfo[fast_dim].start)%tdiminfo[fast_dim].stride!=0 ||
+            ((iter->u.hyp.off[fast_dim]!=tdiminfo[fast_dim].start) && tdiminfo[fast_dim].count==1)) {
+        size_t leftover;  /* The number of elements left over from the last sequence */
+
+        /* Calculate the number of elements left in the sequence */
+        if(tdiminfo[fast_dim].count==1) {
+            H5_ASSIGN_OVERFLOW(leftover, tdiminfo[fast_dim].block-(iter->u.hyp.off[fast_dim]-tdiminfo[fast_dim].start) ,hsize_t,size_t);
+        } /* end if */
+        else {
+            H5_ASSIGN_OVERFLOW(leftover, tdiminfo[fast_dim].block-((iter->u.hyp.off[fast_dim]-tdiminfo[fast_dim].start)%tdiminfo[fast_dim].stride) ,hsize_t,size_t);
+        } /* end else */
+
+        /* Make certain that we don't write too many */
+        actual_elem=MIN(leftover,io_left);
+
+        /* Compute the initial buffer offset */
+        for(i=0,loc=0; i<ndims; i++)
+            loc+=(iter->u.hyp.off[i]+sel_off[i])*slab[i];
+
+        /* Add a new sequence */
+        off[curr_seq]=loc;
+        H5_ASSIGN_OVERFLOW(len[curr_seq],actual_elem*elem_size,hsize_t,size_t);
+
+        /* Increment sequence count */
+        curr_seq++;
+
+        /* Decrement the number of elements left */
+        io_left -= actual_elem;
+
+        /* Advance the hyperslab iterator */
+        H5S_hyper_iter_next(iter,actual_elem);
+
+        /* Decrement the number of elements left in selection */
+        iter->elmt_left-=actual_elem;
+    } /* end if */
+
+    /* Now that we've cleared the "remainder" of the previous fastest dimension
+     * sequence, we must be at the beginning of a sequence, so use the fancy
+     * algorithm to compute the offsets and run through as many as possible,
+     * until the buffer fills up.
+     */
+    if(io_left>0 && curr_seq<maxseq) { /* Just in case the "remainder" above filled the buffer */
+        /* Keep the number of elements we started with */
+        nelmts=io_left;
+
+        /* Compute the arrays to perform I/O on */
+
+        /* Copy the location of the point to get */
+        /* (Add in the selection offset) */
+        for(i=0; i<ndims; i++)
+            offset[i] = iter->u.hyp.off[i] + sel_off[i];
+
+        /* Compute the current "counts" for this location */
+        for(i=0; i<ndims; i++) {
+            if(tdiminfo[i].count==1) {
+                tmp_count[i] = 0;
+                tmp_block[i] = iter->u.hyp.off[i]-tdiminfo[i].start;
+            } /* end if */
+            else {
+                tmp_count[i] = (iter->u.hyp.off[i]-tdiminfo[i].start)/tdiminfo[i].stride;
+                tmp_block[i] = (iter->u.hyp.off[i]-tdiminfo[i].start)%tdiminfo[i].stride;
+            } /* end else */
+        } /* end for */
+
+        /* Compute the initial buffer offset */
+        for(i=0,loc=0; i<ndims; i++)
+            loc+=offset[i]*slab[i];
+
+        /* Set the number of elements to write each time */
+        H5_ASSIGN_OVERFLOW(actual_elem,tdiminfo[fast_dim].block,hsize_t,size_t);
+
+        /* Set the number of actual bytes */
+        actual_bytes=actual_elem*elem_size;
+
+        /* Set local copies of information for the fastest changing dimension */
+        fast_dim_start=tdiminfo[fast_dim].start;
+        fast_dim_stride=tdiminfo[fast_dim].stride;
+        fast_dim_block=tdiminfo[fast_dim].block;
+        H5_ASSIGN_OVERFLOW(fast_dim_buf_off,slab[fast_dim]*fast_dim_stride,hsize_t,size_t);
+        fast_dim_offset=fast_dim_start+sel_off[fast_dim];
+
+        /* Compute the number of blocks which would fit into the buffer */
+        H5_CHECK_OVERFLOW(io_left/fast_dim_block,hsize_t,size_t);
+        tot_blk_count=(size_t)(io_left/fast_dim_block);
+
+        /* Don't go over the maximum number of sequences allowed */
+        tot_blk_count=MIN(tot_blk_count,(maxseq-curr_seq));
+
+        /* Compute the amount to wrap at the end of each row */
+        for(i=0; i<ndims; i++)
+            wrap[i]=(mem_size[i]-(tdiminfo[i].stride*tdiminfo[i].count))*slab[i];
+
+        /* Compute the amount to skip between blocks */
+        for(i=0; i<ndims; i++)
+            skip[i]=(tdiminfo[i].stride-tdiminfo[i].block)*slab[i];
+
+        /* Check if there is a partial row left (with full blocks) */
+        if(tmp_count[fast_dim]>0) {
+            /* Get number of blocks in fastest dimension */
+            H5_ASSIGN_OVERFLOW(fast_dim_count,tdiminfo[fast_dim].count-tmp_count[fast_dim],hsize_t,size_t);
+
+            /* Make certain this entire row will fit into buffer */
+            fast_dim_count=MIN(fast_dim_count,tot_blk_count);
+
+            /* Number of blocks to sequence over */
+            act_blk_count=fast_dim_count;
+
+            /* Loop over all the blocks in the fastest changing dimension */
+            while(fast_dim_count>0) {
+                /* Store the sequence information */
+                off[curr_seq]=loc;
+                len[curr_seq]=actual_bytes;
+
+                /* Increment sequence count */
+                curr_seq++;
+
+                /* Increment information to reflect block just processed */
+                loc+=fast_dim_buf_off;
+
+                /* Decrement number of blocks */
+                fast_dim_count--;
+            } /* end while */
+
+            /* Decrement number of elements left */
+            io_left -= actual_elem*act_blk_count;
+
+            /* Decrement number of blocks left */
+            tot_blk_count -= act_blk_count;
+
+            /* Increment information to reflect block just processed */
+            tmp_count[fast_dim]+=act_blk_count;
+
+            /* Check if we finished the entire row of blocks */
+            if(tmp_count[fast_dim]>=tdiminfo[fast_dim].count) {
+                /* Increment offset in destination buffer */
+                loc += wrap[fast_dim];
+
+                /* Increment information to reflect block just processed */
+                offset[fast_dim]=fast_dim_offset;    /* reset the offset in the fastest dimension */
+                tmp_count[fast_dim]=0;
+
+                /* Increment the offset and count for the other dimensions */
+                temp_dim=fast_dim-1;
+                while(temp_dim>=0) {
+                    /* Move to the next row in the curent dimension */
+                    offset[temp_dim]++;
+                    tmp_block[temp_dim]++;
+
+                    /* If this block is still in the range of blocks to output for the dimension, break out of loop */
+                    if(tmp_block[temp_dim]<tdiminfo[temp_dim].block)
+                        break;
+                    else {
+                        /* Move to the next block in the current dimension */
+                        offset[temp_dim]+=(tdiminfo[temp_dim].stride-tdiminfo[temp_dim].block);
+                        loc += skip[temp_dim];
+                        tmp_block[temp_dim]=0;
+                        tmp_count[temp_dim]++;
+
+                        /* If this block is still in the range of blocks to output for the dimension, break out of loop */
+                        if(tmp_count[temp_dim]<tdiminfo[temp_dim].count)
+                            break;
+                        else {
+                            offset[temp_dim]=tdiminfo[temp_dim].start+sel_off[temp_dim];
+                            loc += wrap[temp_dim];
+                            tmp_count[temp_dim]=0; /* reset back to the beginning of the line */
+                            tmp_block[temp_dim]=0;
+                        } /* end else */
+                    } /* end else */
+
+                    /* Decrement dimension count */
+                    temp_dim--;
+                } /* end while */
+            } /* end if */
+            else {
+                /* Update the offset in the fastest dimension */
+                offset[fast_dim]+=(fast_dim_stride*act_blk_count);
+            } /* end else */
+        } /* end if */
+
+        /* Compute the number of entire rows to read in */
+        H5_CHECK_OVERFLOW( tot_blk_count/tdiminfo[fast_dim].count ,hsize_t,size_t);
+        curr_rows=total_rows=(size_t)(tot_blk_count/tdiminfo[fast_dim].count);
+
+        /* Reset copy of number of blocks in fastest dimension */
+        H5_ASSIGN_OVERFLOW(fast_dim_count,tdiminfo[fast_dim].count,hsize_t,size_t);
+
+        /* Read in data until an entire sequence can't be written out any longer */
+        while(curr_rows>0) {
+
+#define DUFF_GUTS							      \
+    /* Store the sequence information */				      \
+    off[curr_seq]=loc;							      \
+    len[curr_seq]=actual_bytes;						      \
+									      \
+    /* Increment sequence count */					      \
+    curr_seq++;								      \
+									      \
+    /* Increment information to reflect block just processed */		      \
+    loc+=fast_dim_buf_off;
+
+#ifdef NO_DUFFS_DEVICE
+            /* Loop over all the blocks in the fastest changing dimension */
+            while(fast_dim_count>0) {
+                DUFF_GUTS
+
+                /* Decrement number of blocks */
+                fast_dim_count--;
+            } /* end while */
+#else /* NO_DUFFS_DEVICE */
+            {
+                size_t duffs_index; /* Counting index for Duff's device */
+
+                duffs_index = (fast_dim_count + 7) / 8;
+                switch (fast_dim_count % 8) {
+                    case 0:
+                        do
+                          {
+                            DUFF_GUTS
+                    case 7:
+                            DUFF_GUTS
+                    case 6:
+                            DUFF_GUTS
+                    case 5:
+                            DUFF_GUTS
+                    case 4:
+                            DUFF_GUTS
+                    case 3:
+                            DUFF_GUTS
+                    case 2:
+                            DUFF_GUTS
+                    case 1:
+                            DUFF_GUTS
+                      } while (--duffs_index > 0);
+                } /* end switch */
+            }
+#endif /* NO_DUFFS_DEVICE */
+#undef DUFF_GUTS
+
+            /* Increment offset in destination buffer */
+            loc += wrap[fast_dim];
+
+            /* Increment the offset and count for the other dimensions */
+            temp_dim=fast_dim-1;
+            while(temp_dim>=0) {
+                /* Move to the next row in the curent dimension */
+                offset[temp_dim]++;
+                tmp_block[temp_dim]++;
+
+                /* If this block is still in the range of blocks to output for the dimension, break out of loop */
+                if(tmp_block[temp_dim]<tdiminfo[temp_dim].block)
+                    break;
+                else {
+                    /* Move to the next block in the current dimension */
+                    offset[temp_dim]+=(tdiminfo[temp_dim].stride-tdiminfo[temp_dim].block);
+                    loc += skip[temp_dim];
+                    tmp_block[temp_dim]=0;
+                    tmp_count[temp_dim]++;
+
+                    /* If this block is still in the range of blocks to output for the dimension, break out of loop */
+                    if(tmp_count[temp_dim]<tdiminfo[temp_dim].count)
+                        break;
+                    else {
+                        offset[temp_dim]=tdiminfo[temp_dim].start+sel_off[temp_dim];
+                        loc += wrap[temp_dim];
+                        tmp_count[temp_dim]=0; /* reset back to the beginning of the line */
+                        tmp_block[temp_dim]=0;
+                    } /* end else */
+                } /* end else */
+
+                /* Decrement dimension count */
+                temp_dim--;
+            } /* end while */
+
+            /* Decrement the number of rows left */
+            curr_rows--;
+        } /* end while */
+
+        /* Adjust the number of blocks & elements left to transfer */
+
+        /* Decrement number of elements left */
+        H5_CHECK_OVERFLOW( actual_elem*(total_rows*tdiminfo[fast_dim].count) ,hsize_t,size_t);
+        io_left -= (size_t)(actual_elem*(total_rows*tdiminfo[fast_dim].count));
+
+        /* Decrement number of blocks left */
+        H5_CHECK_OVERFLOW( (total_rows*tdiminfo[fast_dim].count) ,hsize_t,size_t);
+        tot_blk_count -= (size_t)(total_rows*tdiminfo[fast_dim].count);
+
+        /* Read in partial row of blocks */
+        if(io_left>0 && curr_seq<maxseq) {
+            /* Get remaining number of blocks left to output */
+            fast_dim_count=tot_blk_count;
+
+            /* Loop over all the blocks in the fastest changing dimension */
+            while(fast_dim_count>0) {
+                /* Store the sequence information */
+                off[curr_seq]=loc;
+                len[curr_seq]=actual_bytes;
+
+                /* Increment sequence count */
+                curr_seq++;
+
+                /* Increment information to reflect block just processed */
+                loc+=fast_dim_buf_off;
+
+                /* Decrement number of blocks */
+                fast_dim_count--;
+            } /* end while */
+
+            /* Decrement number of elements left */
+            io_left -= actual_elem*tot_blk_count;
+
+            /* Increment information to reflect block just processed */
+            offset[fast_dim]+=(fast_dim_stride*tot_blk_count);    /* move the offset in the fastest dimension */
+
+            /* Handle any leftover, partial blocks in this row */
+            if(io_left>0 && curr_seq<maxseq) {
+                actual_elem=io_left;
+                actual_bytes=actual_elem*elem_size;
+
+                /* Store the sequence information */
+                off[curr_seq]=loc;
+                len[curr_seq]=actual_bytes;
+
+                /* Increment sequence count */
+                curr_seq++;
+
+                /* Decrement the number of elements left */
+                io_left -= actual_elem;
+
+                /* Increment buffer correctly */
+                offset[fast_dim]+=actual_elem;
+            } /* end if */
+
+            /* don't bother checking slower dimensions */
+            assert(io_left==0 || curr_seq==maxseq);
+        } /* end if */
+
+        /* Update the iterator */
+
+        /* Update the iterator with the location we stopped */
+        /* (Subtract out the selection offset) */
+        for(i=0; i<ndims; i++)
+            iter->u.hyp.off[i] = offset[i] - sel_off[i];
+
+        /* Decrement the number of elements left in selection */
+        iter->elmt_left-=(nelmts-io_left);
+    } /* end if */
+
+    /* Set the number of sequences generated */
+    *nseq=curr_seq;
+
+    /* Set the number of bytes used */
+    *nelem=start_io_left-io_left;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5S_hyper_get_seq_list_opt() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_hyper_get_seq_list
+ PURPOSE
+    Create a list of offsets & lengths for a selection
+ USAGE
+    herr_t H5S_hyper_get_seq_list(space,flags,iter,maxseq,maxelem,nseq,nelem,off,len)
+        H5S_t *space;           IN: Dataspace containing selection to use.
+        unsigned flags;         IN: Flags for extra information about operation
+        H5S_sel_iter_t *iter;   IN/OUT: Selection iterator describing last
+                                    position of interest in selection.
+        size_t maxseq;          IN: Maximum number of sequences to generate
+        size_t maxelem;         IN: Maximum number of elements to include in the
+                                    generated sequences
+        size_t *nseq;           OUT: Actual number of sequences generated
+        size_t *nelem;          OUT: Actual number of elements in sequences generated
+        hsize_t *off;           OUT: Array of offsets
+        size_t *len;            OUT: Array of lengths
+ RETURNS
+    Non-negative on success/Negative on failure.
+ DESCRIPTION
+    Use the selection in the dataspace to generate a list of byte offsets and
+    lengths for the region(s) selected.  Start/Restart from the position in the
+    ITER parameter.  The number of sequences generated is limited by the MAXSEQ
+    parameter and the number of sequences actually generated is stored in the
+    NSEQ parameter.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_hyper_get_seq_list(const H5S_t *space, unsigned UNUSED flags, H5S_sel_iter_t *iter,
+    size_t maxseq, size_t maxelem, size_t *nseq, size_t *nelem,
+    hsize_t *off, size_t *len)
+{
+    herr_t ret_value;      /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_hyper_get_seq_list);
+
+    /* Check args */
+    assert(space);
+    assert(iter);
+    assert(maxseq>0);
+    assert(maxelem>0);
+    assert(nseq);
+    assert(nelem);
+    assert(off);
+    assert(len);
+
+    /* Check for the special case of just one H5Sselect_hyperslab call made */
+    if(space->select.sel_info.hslab->diminfo_valid)
+        /* Use optimized call to generate sequence list */
+        ret_value=H5S_hyper_get_seq_list_opt(space,iter,maxseq,maxelem,nseq,nelem,off,len);
+    else
+        /* Call the general sequence generator routine */
+        ret_value=H5S_hyper_get_seq_list_gen(space,iter,maxseq,maxelem,nseq,nelem,off,len);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_hyper_get_seq_list() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Smpio.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Smpio.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Smpio.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,830 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  rky 980813
+ *
+ * Purpose:	Functions to read/write directly between app buffer and file.
+ *
+ * 		Beware of the ifdef'ed print statements.
+ *		I didn't make them portable.
+ */
+
+#define H5S_PACKAGE		/*suppress error about including H5Spkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dprivate.h"		/* Datasets				*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5FDprivate.h"	/* File drivers				*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Oprivate.h"		/* Object headers		  	*/
+#include "H5Pprivate.h"         /* Property lists                       */
+#include "H5Spkg.h"		/* Dataspaces 				*/
+
+#ifdef H5_HAVE_PARALLEL
+
+static herr_t
+H5S_mpio_all_type( const H5S_t *space, size_t elmt_size,
+		     /* out: */
+		     MPI_Datatype *new_type,
+		     size_t *count,
+		     hsize_t *extra_offset,
+		     hbool_t *is_derived_type );
+static herr_t
+H5S_mpio_none_type( const H5S_t *space, size_t elmt_size,
+		     /* out: */
+		     MPI_Datatype *new_type,
+		     size_t *count,
+		     hsize_t *extra_offset,
+		     hbool_t *is_derived_type );
+static herr_t
+H5S_mpio_hyper_type( const H5S_t *space, size_t elmt_size,
+		     /* out: */
+		     MPI_Datatype *new_type,
+		     size_t *count,
+		     hsize_t *extra_offset,
+		     hbool_t *is_derived_type );
+
+static herr_t
+H5S_mpio_span_hyper_type( const H5S_t *space, size_t elmt_size,
+			  /* out: */
+			  MPI_Datatype *new_type,
+			  size_t *count,
+			  hsize_t *extra_offset,
+			  hbool_t *is_derived_type );
+
+static herr_t H5S_obtain_datatype(const hsize_t size[],
+                              H5S_hyper_span_t* span,MPI_Datatype *span_type,
+                              size_t elmt_size,int dimindex);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_mpio_all_type
+ *
+ * Purpose:	Translate an HDF5 "all" selection into an MPI type.
+ *
+ * Return:	non-negative on success, negative on failure.
+ *
+ * Outputs:	*new_type	  the MPI type corresponding to the selection
+ *		*count		  how many objects of the new_type in selection
+ *				  (useful if this is the buffer type for xfer)
+ *		*extra_offset     Number of bytes of offset within dataset
+ *		*is_derived_type  0 if MPI primitive type, 1 if derived
+ *
+ * Programmer:	rky 980813
+ *
+ * Modifications:
+ *
+ *      Quincey Koziol, June 18, 2002
+ *      Added 'extra_offset' parameter
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_mpio_all_type( const H5S_t *space, size_t elmt_size,
+		     /* out: */
+		     MPI_Datatype *new_type,
+		     size_t *count,
+		     hsize_t *extra_offset,
+		     hbool_t *is_derived_type )
+{
+    hsize_t	total_bytes;
+    hssize_t	snelmts;                /*total number of elmts	(signed) */
+    hsize_t	nelmts;                 /*total number of elmts	*/
+    herr_t		ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_mpio_all_type);
+
+    /* Check args */
+    assert (space);
+
+    /* Just treat the entire extent as a block of bytes */
+    if((snelmts = H5S_GET_EXTENT_NPOINTS(space))<0)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "src dataspace has invalid selection")
+    H5_ASSIGN_OVERFLOW(nelmts,snelmts,hssize_t,hsize_t);
+
+    total_bytes = (hsize_t)elmt_size*nelmts;
+
+    /* fill in the return values */
+    *new_type = MPI_BYTE;
+    H5_ASSIGN_OVERFLOW(*count, total_bytes, hsize_t, size_t);
+    *extra_offset = 0;
+    *is_derived_type = 0;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* H5S_mpio_all_type() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_mpio_none_type
+ *
+ * Purpose:	Translate an HDF5 "none" selection into an MPI type.
+ *
+ * Return:	non-negative on success, negative on failure.
+ *
+ * Outputs:	*new_type	  the MPI type corresponding to the selection
+ *		*count		  how many objects of the new_type in selection
+ *				  (useful if this is the buffer type for xfer)
+ *		*extra_offset     Number of bytes of offset within dataset
+ *		*is_derived_type  0 if MPI primitive type, 1 if derived
+ *
+ * Programmer:	Quincey Koziol, October 29, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_mpio_none_type( const H5S_t UNUSED *space, size_t UNUSED elmt_size,
+		     /* out: */
+		     MPI_Datatype *new_type,
+		     size_t *count,
+		     hsize_t *extra_offset,
+		     hbool_t *is_derived_type )
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_mpio_none_type);
+
+    /* fill in the return values */
+    *new_type = MPI_BYTE;
+    *count = 0;
+    *extra_offset = 0;
+    *is_derived_type = 0;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* H5S_mpio_none_type() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_mpio_hyper_type
+ *
+ * Purpose:	Translate an HDF5 hyperslab selection into an MPI type.
+ *
+ * Return:	non-negative on success, negative on failure.
+ *
+ * Outputs:	*new_type	  the MPI type corresponding to the selection
+ *		*count		  how many objects of the new_type in selection
+ *				  (useful if this is the buffer type for xfer)
+ *		*extra_offset     Number of bytes of offset within dataset
+ *		*is_derived_type  0 if MPI primitive type, 1 if derived
+ *
+ * Programmer:	rky 980813
+ *
+ * Modifications:  ppw 990401
+ *		rky, ppw 2000-09-26 Freed old type after creating struct type.
+ *		rky 2000-10-05 Changed displacements to be MPI_Aint.
+ *		rky 2000-10-06 Added code for cases of empty hyperslab.
+ *		akc, rky 2000-11-16 Replaced hard coded dimension size with
+ *		    H5S_MAX_RANK.
+ *
+ *      	Quincey Koziol, June 18, 2002
+ *      	Added 'extra_offset' parameter.  Also accomodate selection
+ *      	offset in MPI type built.
+ *
+ *      	Albert Cheng, August 4, 2004
+ *      	Reimplemented the algorithm of forming the outer_type by
+ *      	defining it as (start, vector, extent) in one call.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_mpio_hyper_type( const H5S_t *space, size_t elmt_size,
+		     /* out: */
+		     MPI_Datatype *new_type,
+		     size_t *count,
+		     hsize_t *extra_offset,
+		     hbool_t *is_derived_type )
+{
+    H5S_sel_iter_t sel_iter;    /* Selection iteration info */
+    hbool_t sel_iter_init=0;    /* Selection iteration info has been initialized */
+
+    struct dim {	/* less hassle than malloc/free & ilk */
+        hssize_t start;
+        hsize_t strid;
+        hsize_t block;
+        hsize_t xtent;
+        hsize_t count;
+    } d[H5S_MAX_RANK];
+
+    int			i;
+    int			offset[H5S_MAX_RANK];
+    int			max_xtent[H5S_MAX_RANK];
+    H5S_hyper_dim_t	*diminfo;		/* [rank] */
+    int		rank;
+    int			block_length[3];
+    MPI_Datatype	inner_type, outer_type, old_types[3];
+    MPI_Aint            extent_len, displacement[3];
+    int                 mpi_code;               /* MPI return code */
+    herr_t		ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_mpio_hyper_type);
+
+    /* Check args */
+    assert (space);
+    assert(sizeof(MPI_Aint) >= sizeof(elmt_size));
+    if (0==elmt_size)
+        goto empty;
+
+    /* Initialize selection iterator */
+    if (H5S_select_iter_init(&sel_iter, space, elmt_size)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to initialize selection iterator");
+    sel_iter_init=1;	/* Selection iteration info has been initialized */
+
+    /* Abbreviate args */
+    diminfo=sel_iter.u.hyp.diminfo;
+    assert (diminfo);
+
+    /* make a local copy of the dimension info so we can operate with them */
+
+    /* Check if this is a "flattened" regular hyperslab selection */
+    if(sel_iter.u.hyp.iter_rank!=0 && sel_iter.u.hyp.iter_rank<space->extent.rank) {
+        /* Flattened selection */
+        rank=sel_iter.u.hyp.iter_rank;
+        assert (rank >= 0 && rank<=H5S_MAX_RANK);	/* within array bounds */
+        if (0==rank)
+            goto empty;
+
+#ifdef H5Smpi_DEBUG
+            HDfprintf(stderr, "%s: Flattened selection\n",FUNC);
+#endif
+        for ( i=0; i<rank; ++i) {
+            d[i].start = diminfo[i].start+sel_iter.u.hyp.sel_off[i];
+            d[i].strid = diminfo[i].stride;
+            d[i].block = diminfo[i].block;
+            d[i].count = diminfo[i].count;
+            d[i].xtent = sel_iter.u.hyp.size[i];
+#ifdef H5Smpi_DEBUG
+            HDfprintf(stderr, "%s: start=%Hd  stride=%Hu  count=%Hu  block=%Hu  xtent=%Hu",
+                FUNC, d[i].start, d[i].strid, d[i].count, d[i].block, d[i].xtent );
+            if (i==0)
+                HDfprintf(stderr, "  rank=%d\n", rank );
+            else
+                HDfprintf(stderr, "\n" );
+#endif
+            if (0==d[i].block)
+                goto empty;
+            if (0==d[i].count)
+                goto empty;
+            if (0==d[i].xtent)
+                goto empty;
+        }
+    } /* end if */
+    else {
+        /* Non-flattened selection */
+        rank = space->extent.rank;
+        assert (rank >= 0 && rank<=H5S_MAX_RANK);	/* within array bounds */
+        if (0==rank)
+            goto empty;
+
+#ifdef H5Smpi_DEBUG
+            HDfprintf(stderr, "%s: Non-flattened selection\n",FUNC);
+#endif
+        for ( i=0; i<rank; ++i) {
+            d[i].start = diminfo[i].start+space->select.offset[i];
+            d[i].strid = diminfo[i].stride;
+            d[i].block = diminfo[i].block;
+            d[i].count = diminfo[i].count;
+            d[i].xtent = space->extent.size[i];
+#ifdef H5Smpi_DEBUG
+            HDfprintf(stderr, "%s: start=%Hd  stride=%Hu  count=%Hu  block=%Hu  xtent=%Hu",
+                FUNC, d[i].start, d[i].strid, d[i].count, d[i].block, d[i].xtent );
+            if (i==0)
+                HDfprintf(stderr, "  rank=%d\n", rank );
+            else
+                HDfprintf(stderr, "\n" );
+#endif
+            if (0==d[i].block)
+                goto empty;
+            if (0==d[i].count)
+                goto empty;
+            if (0==d[i].xtent)
+                goto empty;
+        }
+    } /* end else */
+
+/**********************************************************************
+    Compute array "offset[rank]" which gives the offsets for a multi-
+    dimensional array with dimensions "d[i].xtent" (i=0,1,...,rank-1).
+**********************************************************************/
+    offset[rank-1] = 1;
+    max_xtent[rank-1] = d[rank-1].xtent;
+#ifdef H5Smpi_DEBUG
+    i=rank-1;
+    HDfprintf(stderr, " offset[%2d]=%d; max_xtent[%2d]=%d\n",
+                          i, offset[i], i, max_xtent[i]);
+#endif
+    for (i=rank-2; i>=0; --i) {
+        offset[i] = offset[i+1]*d[i+1].xtent;
+        max_xtent[i] = max_xtent[i+1]*d[i].xtent;
+#ifdef H5Smpi_DEBUG
+        HDfprintf(stderr, " offset[%2d]=%d; max_xtent[%2d]=%d\n",
+                          i, offset[i], i, max_xtent[i]);
+#endif
+    }
+
+    /*  Create a type covering the selected hyperslab.
+     *  Multidimensional dataspaces are stored in row-major order.
+     *  The type is built from the inside out, going from the
+     *  fastest-changing (i.e., inner) dimension * to the slowest (outer). */
+
+/*******************************************************
+*  Construct contig type for inner contig dims:
+*******************************************************/
+#ifdef H5Smpi_DEBUG
+    HDfprintf(stderr, "%s: Making contig type %d MPI_BYTEs\n", FUNC,elmt_size );
+    for (i=rank-1; i>=0; --i)
+        HDfprintf(stderr, "d[%d].xtent=%Hu \n", i, d[i].xtent);
+#endif
+    if (MPI_SUCCESS != (mpi_code= MPI_Type_contiguous( (int)elmt_size, MPI_BYTE, &inner_type )))
+        HMPI_GOTO_ERROR(FAIL, "MPI_Type_contiguous failed", mpi_code);
+
+/*******************************************************
+*  Construct the type by walking the hyperslab dims
+*  from the inside out:
+*******************************************************/
+    for ( i=rank-1; i>=0; --i) {
+#ifdef H5Smpi_DEBUG
+        HDfprintf(stderr, "%s: Dimension i=%d \n"
+            "start=%Hd count=%Hu block=%Hu stride=%Hu, xtent=%Hu max_xtent=%d\n",
+            FUNC, i, d[i].start, d[i].count, d[i].block, d[i].strid, d[i].xtent, max_xtent[i]);
+#endif
+
+#ifdef H5Smpi_DEBUG
+        HDfprintf(stderr, "%s: i=%d  Making vector-type \n", FUNC,i);
+#endif
+       /****************************************
+       *  Build vector type of the selection.
+       ****************************************/
+	mpi_code =MPI_Type_vector((int)(d[i].count),        /* count */
+				  (int)(d[i].block),        /* blocklength */
+				  (int)(d[i].strid),   	    /* stride */
+				  inner_type,	            /* old type */
+				  &outer_type);            /* new type */
+
+        MPI_Type_free( &inner_type );
+        if (mpi_code!=MPI_SUCCESS)
+            HMPI_GOTO_ERROR(FAIL, "couldn't create MPI vector type", mpi_code);
+
+       /****************************************
+       *  Then build the dimension type as (start, vector type, xtent).
+       ****************************************/
+       /* calculate start and extent values of this dimension */
+	displacement[1] = d[i].start * offset[i] * elmt_size;
+        displacement[2] = (MPI_Aint)elmt_size * max_xtent[i];
+        if(MPI_SUCCESS != (mpi_code = MPI_Type_extent(outer_type, &extent_len)))
+            HMPI_GOTO_ERROR(FAIL, "MPI_Type_extent failed", mpi_code);
+
+       /*************************************************
+       *  Restructure this datatype ("outer_type")
+       *  so that it still starts at 0, but its extent
+       *  is the full extent in this dimension.
+       *************************************************/
+        if (displacement[1] > 0 || (int)extent_len < displacement[2]) {
+
+            block_length[0] = 1;
+            block_length[1] = 1;
+            block_length[2] = 1;
+
+            displacement[0] = 0;
+
+            old_types[0] = MPI_LB;
+            old_types[1] = outer_type;
+            old_types[2] = MPI_UB;
+#ifdef H5Smpi_DEBUG
+            HDfprintf(stderr, "%s: i=%d Extending struct type\n"
+                "***displacements: %d, %d, %d\n",
+		FUNC, i, displacement[0], displacement[1], displacement[2]);
+#endif
+
+            mpi_code = MPI_Type_struct ( 3,               /* count */
+                                    block_length,    /* blocklengths */
+                                    displacement,    /* displacements */
+                                    old_types,       /* old types */
+                                    &inner_type);    /* new type */
+
+            MPI_Type_free (&outer_type);
+    	    if (mpi_code!=MPI_SUCCESS)
+                HMPI_GOTO_ERROR(FAIL, "couldn't resize MPI vector type", mpi_code);
+        }
+        else {
+            inner_type = outer_type;
+        }
+    } /* end for */
+/***************************
+*  End of loop, walking
+*  thru dimensions.
+***************************/
+
+
+    /* At this point inner_type is actually the outermost type, even for 0-trip loop */
+
+    *new_type = inner_type;
+    if (MPI_SUCCESS != (mpi_code= MPI_Type_commit( new_type )))
+        HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code);
+
+    /* fill in the remaining return values */
+    *count = 1;			/* only have to move one of these suckers! */
+    *extra_offset = 0;
+    *is_derived_type = 1;
+    HGOTO_DONE(SUCCEED);
+
+empty:
+    /* special case: empty hyperslab */
+    *new_type = MPI_BYTE;
+    *count = 0;
+    *extra_offset = 0;
+    *is_derived_type = 0;
+
+done:
+    /* Release selection iterator */
+    if(sel_iter_init) {
+        if (H5S_SELECT_ITER_RELEASE(&sel_iter)<0)
+            HDONE_ERROR (H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release selection iterator");
+    } /* end if */
+
+#ifdef H5Smpi_DEBUG
+    HDfprintf(stderr, "Leave %s, count=%ld  is_derived_type=%d\n",
+		FUNC, *count, *is_derived_type );
+#endif
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_mpio_span_hyper_type
+ *
+ * Purpose:	Translate an HDF5 irregular hyperslab selection into an
+                MPI type.
+ *
+ * Return:	non-negative on success, negative on failure.
+ *
+ * Outputs:	*new_type	  the MPI type corresponding to the selection
+ *		*count		  how many objects of the new_type in selection
+ *				  (useful if this is the buffer type for xfer)
+ *		*extra_offset     Number of bytes of offset within dataset
+ *		*is_derived_type  0 if MPI primitive type, 1 if derived
+ *
+ * Programmer:  kyang
+ *
+ */
+static herr_t
+H5S_mpio_span_hyper_type( const           H5S_t *space,
+			  size_t          elmt_size,
+			  MPI_Datatype    *new_type,/* out: */
+			  size_t          *count,
+			  hsize_t         *extra_offset,
+			  hbool_t         *is_derived_type ){
+
+  MPI_Datatype          span_type;
+  H5S_hyper_span_t      *ospan;
+  H5S_hyper_span_info_t *odown;
+  hsize_t               *size;
+  int                   rank;
+  int                   mpi_code;
+  herr_t                ret_value = SUCCEED;
+  MPI_Aint              extent,lb;
+
+
+  FUNC_ENTER_NOAPI_NOINIT(H5S_mpio_span_hyper_type);
+
+  /* Check args */
+    assert (space);
+
+ /* assert(sizeof(MPI_Aint) >= sizeof(elmt_size)); not sure the reason*/
+
+
+    rank = space->extent.rank;
+
+    /*    size = HDcalloc((size_t)rank,sizeof(hsize_t));  */
+    if (0==elmt_size)
+        goto empty;
+    size = space->extent.size;
+    if(size == 0)
+        goto empty;
+
+    odown = space->select.sel_info.hslab->span_lst;
+    if(odown == NULL)
+      goto empty;
+    ospan = odown->head;
+    if(ospan == NULL)
+      goto empty;
+
+    /* obtain derived data type */
+    if(FAIL == H5S_obtain_datatype(space->extent.size,ospan,&span_type,elmt_size,rank))
+      HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't obtain  MPI derived data type");
+
+    if (MPI_SUCCESS != (mpi_code = MPI_Type_commit(&span_type)))
+        HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code);
+
+    *new_type = span_type;
+    /* fill in the remaining return values */
+    *count = 1;
+    *extra_offset = 0;
+    *is_derived_type = 1;
+
+    HGOTO_DONE(SUCCEED);
+
+empty:
+    /* special case: empty hyperslab */
+    *new_type        = MPI_BYTE;
+    *count           = 0;
+    *extra_offset    = 0;
+    *is_derived_type = 0;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+  }
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_obtain datatype
+ *
+ * Purpose:	Obtain an MPI derived datatype based on span-tree
+                implementation
+ *
+ * Return:	non-negative on success, negative on failure.
+ *
+ * Outputs:	*span_type	 the MPI type corresponding to the selection
+ *
+ * Programmer:  kyang
+ *
+ */
+static herr_t H5S_obtain_datatype(const hsize_t size[],
+			      H5S_hyper_span_t* span,
+			      MPI_Datatype *span_type,
+			      size_t elmt_size,
+			      int dimindex)
+{
+
+  int                   innercount,outercount;
+  MPI_Datatype          bas_type;
+  MPI_Datatype          temp_type;
+  MPI_Datatype          tempinner_type;
+  MPI_Datatype          *inner_type;
+  int                   *blocklen;
+  MPI_Aint              *disp;
+  MPI_Aint              stride;
+  MPI_Aint              extent,lb;
+  H5S_hyper_span_info_t *down;
+  H5S_hyper_span_t      *tspan;
+  int                   mpi_code;
+  herr_t                ret_value = SUCCEED;
+
+#ifdef H5_HAVE_MPI2
+  MPI_Aint              sizeaint,sizedtype;
+#endif /* H5_HAVE_MPI2 */
+  hsize_t               total_lowd,total_lowd1;
+  int                   i;
+  int                   ret;
+
+  FUNC_ENTER_NOAPI_NOINIT(H5S_obtain_datatype);
+  assert(span);
+
+  inner_type = NULL;
+  down       = NULL;
+  tspan      = NULL;
+  down       = span->down;
+  tspan      = span;
+
+  outercount = 0;
+
+/* obtain the number of span tree for this dimension */
+  while(tspan) {
+    tspan = tspan->next;
+    outercount ++;
+  }
+
+  if(outercount == 0) {
+    span_type = NULL;
+    return 0;
+  }
+
+/* MPI2 hasn't been widely acccepted, adding H5_HAVE_MPI2 for the future use */
+#ifdef H5_HAVE_MPI2
+
+  MPI_Type_extent(MPI_Aint,&sizeaint);
+  MPI_Type_extent(MPI_Datatype,&sizedtype);
+
+  blocklen  = (int *)HDcalloc((size_t)outercount,sizeof(int));
+  disp = (MPI_Aint *)HDcalloc((size_t)outercount,sizeaint);
+  inner_type   = (MPI_Datatype *)HDcalloc((size_t)outercount,sizedtype);
+
+#else
+
+  blocklen     = (int *)HDcalloc((size_t)outercount,sizeof(int));
+  disp         = (MPI_Aint *)HDcalloc((size_t)outercount,sizeof(MPI_Aint));
+  inner_type   = (MPI_Datatype *)HDcalloc((size_t)outercount,sizeof(MPI_Datatype));
+
+#endif
+
+
+  tspan      = span;
+  outercount = 0;
+
+  /* if this is the fastest changing dimension, it is the base case for derived datatype. */
+  if(down == NULL){
+
+    assert(dimindex <= 1);
+    if(MPI_SUCCESS != (mpi_code = MPI_Type_contiguous((int)elmt_size, MPI_BYTE,&bas_type)))
+          HMPI_GOTO_ERROR(FAIL, "MPI_Type_contiguous failed", mpi_code);
+
+    if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&bas_type)))
+          HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code);
+
+    while(tspan){
+
+      disp[outercount]      = (MPI_Aint)elmt_size * tspan->low;
+      blocklen[outercount]  = tspan->nelem;
+      tspan                 = tspan->next;
+      outercount ++;
+    }
+
+    if(MPI_SUCCESS != (mpi_code = MPI_Type_hindexed(outercount,blocklen,
+						    disp,bas_type,span_type)))
+          HMPI_GOTO_ERROR(FAIL, "MPI_Type_hindexed failed", mpi_code);
+
+  }
+  else {/* dimindex is the rank of the dimension */
+
+    assert(dimindex >1);
+    /* Calculate the total bytes of the lower dimension */
+    total_lowd  = 1;  /* one dimension down */
+    total_lowd1 = 1; /* two dimensions down */
+
+    for ( i = dimindex-1; i > 0; i--)
+         total_lowd = total_lowd * size[i];
+
+    for ( i = dimindex-1; i > 1; i--)
+          total_lowd1 = total_lowd1 * size[i];
+
+     while(tspan){
+
+       /* Displacement should be in byte and should have dimension information */
+       /* First using MPI Type vector to build derived data type for this span only */
+       /* Need to calculate the disp in byte for this dimension. */
+       /* Calculate the total bytes of the lower dimension */
+
+       disp[outercount]      = tspan->low*total_lowd*elmt_size;
+       blocklen[outercount]  = 1;
+
+       /* generating inner derived datatype by using MPI_Type_hvector */
+       if(FAIL == H5S_obtain_datatype(size,tspan->down->head,&temp_type,elmt_size,dimindex-1))
+          HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't obtain  MPI derived data type");
+
+       if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&temp_type)))
+          HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code);
+
+       /* building the inner vector datatype */
+       stride     = total_lowd*elmt_size;
+       innercount = tspan->nelem;
+
+       if(MPI_SUCCESS != (mpi_code = MPI_Type_hvector(innercount,1,stride,temp_type,&tempinner_type)))
+          HMPI_GOTO_ERROR(FAIL, "MPI_Type_hvector failed", mpi_code);
+
+       if(MPI_SUCCESS != (mpi_code = MPI_Type_commit(&tempinner_type)))
+          HMPI_GOTO_ERROR(FAIL, "MPI_Type_commit failed", mpi_code);
+
+       if(MPI_SUCCESS != (mpi_code =MPI_Type_free(&temp_type)))
+          HMPI_GOTO_ERROR(FAIL, "MPI_Type_free failed",mpi_code);
+       inner_type[outercount] = tempinner_type;
+       outercount ++;
+       tspan = tspan->next;
+
+     }
+
+    /* building the whole vector datatype */
+    if(MPI_SUCCESS != (mpi_code =
+		       MPI_Type_struct(outercount,blocklen,disp,inner_type,span_type)))
+          HMPI_GOTO_ERROR(FAIL, "MPI_Type_struct failed", mpi_code);
+
+  }
+
+  if(inner_type != NULL){
+    if(down != NULL) {
+        for(i=0;i<outercount;i++)
+             if(MPI_SUCCESS != (mpi_code = MPI_Type_free(&inner_type[i])))
+                HMPI_GOTO_ERROR(FAIL, "MPI_Type_free failed",mpi_code);
+    }
+  }
+
+  if(inner_type != NULL)
+    HDfree(inner_type);
+  if(blocklen != NULL)
+    HDfree(blocklen);
+  if(disp != NULL)
+    HDfree(disp);
+done:
+  FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_mpio_space_type
+ *
+ * Purpose:	Translate an HDF5 dataspace selection into an MPI type.
+ *		Currently handle only hyperslab and "all" selections.
+ *
+ * Return:	non-negative on success, negative on failure.
+ *
+ * Outputs:	*new_type	  the MPI type corresponding to the selection
+ *		*count		  how many objects of the new_type in selection
+ *				  (useful if this is the buffer type for xfer)
+ *		*extra_offset     Number of bytes of offset within dataset
+ *		*is_derived_type  0 if MPI primitive type, 1 if derived
+ *
+ * Programmer:	rky 980813
+ *
+ * Modifications:
+ *
+ *      Quincey Koziol, June 18, 2002
+ *      Added 'extra_offset' parameter
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_mpio_space_type( const H5S_t *space, size_t elmt_size,
+		     /* out: */
+		     MPI_Datatype *new_type,
+		     size_t *count,
+		     hsize_t *extra_offset,
+		     hbool_t *is_derived_type )
+{
+    herr_t	ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_mpio_space_type);
+
+    /* Check args */
+    assert (space);
+
+    /* Creat MPI type based on the kind of selection */
+    switch (H5S_GET_EXTENT_TYPE(space)) {
+        case H5S_SCALAR:
+        case H5S_SIMPLE:
+            switch(H5S_GET_SELECT_TYPE(space)) {
+                case H5S_SEL_NONE:
+                    if ( H5S_mpio_none_type( space, elmt_size,
+                        /* out: */ new_type, count, extra_offset, is_derived_type ) <0)
+                        HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't convert \"all\" selection to MPI type");
+                    break;
+
+                case H5S_SEL_ALL:
+                    if ( H5S_mpio_all_type( space, elmt_size,
+                        /* out: */ new_type, count, extra_offset, is_derived_type ) <0)
+                        HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't convert \"all\" selection to MPI type");
+                    break;
+
+                case H5S_SEL_POINTS:
+                    /* not yet implemented */
+                    ret_value = FAIL;
+                    break;
+
+                case H5S_SEL_HYPERSLABS:
+		  if((H5S_SELECT_IS_REGULAR(space) == TRUE)) {
+		    if(H5S_mpio_hyper_type( space, elmt_size,
+                            /* out: */ new_type, count, extra_offset, is_derived_type )<0)
+                        HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't convert \"all\" selection to MPI type");
+		    }
+		     else {
+		       if(H5S_mpio_span_hyper_type( space, elmt_size,
+                            /* out: */ new_type, count, extra_offset, is_derived_type )<0)
+                        HGOTO_ERROR(H5E_DATASPACE, H5E_BADTYPE, FAIL,"couldn't convert \"all\" selection to MPI type");
+		     }
+                    break;
+
+                default:
+                    assert("unknown selection type" && 0);
+                    break;
+            } /* end switch */
+            break;
+
+        case H5S_COMPLEX:
+            /* not yet implemented */
+            HGOTO_ERROR(H5E_DATASPACE, H5E_UNSUPPORTED, FAIL, "complex data spaces are not supported yet");
+
+        default:
+            assert("unknown data space type" && 0);
+            break;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+#endif  /* H5_HAVE_PARALLEL */

Added: packages/hdf5/branches/upstream/current/src/H5Snone.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Snone.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Snone.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,785 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Tuesday, November 10, 1998
+ *
+ * Purpose:	"None" selection data space I/O functions.
+ */
+
+#define H5S_PACKAGE		/*suppress error about including H5Spkg	  */
+
+
+#include "H5private.h"
+#include "H5Eprivate.h"
+#include "H5Iprivate.h"
+#include "H5Spkg.h"
+#include "H5Vprivate.h"
+#include "H5Dprivate.h"
+
+/* Static function prototypes */
+
+/* Selection callbacks */
+static herr_t H5S_none_copy(H5S_t *dst, const H5S_t *src, hbool_t share_selection);
+static herr_t H5S_none_get_seq_list(const H5S_t *space, unsigned flags,
+    H5S_sel_iter_t *iter, size_t maxseq, size_t maxbytes,
+    size_t *nseq, size_t *nbytes, hsize_t *off, size_t *len);
+static herr_t H5S_none_release(H5S_t *space);
+static htri_t H5S_none_is_valid(const H5S_t *space);
+static hssize_t H5S_none_serial_size(const H5S_t *space);
+static herr_t H5S_none_serialize(const H5S_t *space, uint8_t *buf);
+static herr_t H5S_none_deserialize(H5S_t *space, const uint8_t *buf);
+static herr_t H5S_none_bounds(const H5S_t *space, hsize_t *start, hsize_t *end);
+static htri_t H5S_none_is_contiguous(const H5S_t *space);
+static htri_t H5S_none_is_single(const H5S_t *space);
+static htri_t H5S_none_is_regular(const H5S_t *space);
+static herr_t H5S_none_iter_init(H5S_sel_iter_t *iter, const H5S_t *space);
+
+/* Selection iteration callbacks */
+static herr_t H5S_none_iter_coords(const H5S_sel_iter_t *iter, hsize_t *coords);
+static herr_t H5S_none_iter_block(const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end);
+static hsize_t H5S_none_iter_nelmts(const H5S_sel_iter_t *iter);
+static htri_t H5S_none_iter_has_next_block(const H5S_sel_iter_t *iter);
+static herr_t H5S_none_iter_next(H5S_sel_iter_t *sel_iter, size_t nelem);
+static herr_t H5S_none_iter_next_block(H5S_sel_iter_t *sel_iter);
+static herr_t H5S_none_iter_release(H5S_sel_iter_t *sel_iter);
+
+/* Selection properties for "none" selections */
+const H5S_select_class_t H5S_sel_none[1] = {{
+    H5S_SEL_NONE,
+
+    /* Methods on selection */
+    H5S_none_copy,
+    H5S_none_get_seq_list,
+    H5S_none_release,
+    H5S_none_is_valid,
+    H5S_none_serial_size,
+    H5S_none_serialize,
+    H5S_none_deserialize,
+    H5S_none_bounds,
+    H5S_none_is_contiguous,
+    H5S_none_is_single,
+    H5S_none_is_regular,
+    H5S_none_iter_init,
+}};
+
+/* Iteration properties for "none" selections */
+static const H5S_sel_iter_class_t H5S_sel_iter_none[1] = {{
+    H5S_SEL_NONE,
+
+    /* Methods on selection iterator */
+    H5S_none_iter_coords,
+    H5S_none_iter_block,
+    H5S_none_iter_nelmts,
+    H5S_none_iter_has_next_block,
+    H5S_none_iter_next,
+    H5S_none_iter_next_block,
+    H5S_none_iter_release,
+}};
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_none_iter_init
+ *
+ * Purpose:	Initializes iteration information for "none" selection.
+ *
+ * Return:	non-negative on success, negative on failure.
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, June 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_none_iter_init (H5S_sel_iter_t *iter, const H5S_t UNUSED *space)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_none_iter_init);
+
+    /* Check args */
+    assert (space && H5S_SEL_NONE==H5S_GET_SELECT_TYPE(space));
+    assert (iter);
+
+    /* Initialize type of selection iterator */
+    iter->type=H5S_sel_iter_none;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_none_iter_init() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_none_iter_coords
+ *
+ * Purpose:	Retrieve the current coordinates of iterator for current
+ *              selection
+ *
+ * Return:	non-negative on success, negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, April 22, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_none_iter_coords (const H5S_sel_iter_t UNUSED *iter, hsize_t UNUSED *coords)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_iter_coords);
+
+    /* Check args */
+    assert (iter);
+    assert (coords);
+
+    FUNC_LEAVE_NOAPI(FAIL);
+}   /* H5S_none_iter_coords() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_none_iter_block
+ *
+ * Purpose:	Retrieve the current block of iterator for current
+ *              selection
+ *
+ * Return:	non-negative on success, negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, June 2, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_none_iter_block (const H5S_sel_iter_t UNUSED *iter, hsize_t UNUSED *start, hsize_t UNUSED *end)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_iter_block);
+
+    /* Check args */
+    assert (iter);
+    assert (start);
+    assert (end);
+
+    FUNC_LEAVE_NOAPI(FAIL);
+}   /* H5S_none_iter_block() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_none_iter_nelmts
+ *
+ * Purpose:	Return number of elements left to process in iterator
+ *
+ * Return:	non-negative number of elements on success, zero on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, June 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hsize_t
+H5S_none_iter_nelmts (const H5S_sel_iter_t UNUSED *iter)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_iter_nelmts);
+
+    /* Check args */
+    assert (iter);
+
+    FUNC_LEAVE_NOAPI(0);
+}   /* H5S_none_iter_nelmts() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_iter_has_next_block
+ PURPOSE
+    Check if there is another block left in the current iterator
+ USAGE
+    htri_t H5S_none_iter_has_next_block(iter)
+        const H5S_sel_iter_t *iter;       IN: Pointer to selection iterator
+ RETURNS
+    Non-negative (TRUE/FALSE) on success/Negative on failure
+ DESCRIPTION
+    Check if there is another block available in the selection iterator.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_none_iter_has_next_block(const H5S_sel_iter_t UNUSED *iter)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_iter_has_next_block);
+
+    /* Check args */
+    assert (iter);
+
+    FUNC_LEAVE_NOAPI(FAIL);
+}   /* H5S_none_iter_has_next_block() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_iter_next
+ PURPOSE
+    Increment selection iterator
+ USAGE
+    herr_t H5S_none_iter_next(iter, nelem)
+        H5S_sel_iter_t *iter;       IN: Pointer to selection iterator
+        size_t nelem;               IN: Number of elements to advance by
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Advance selection iterator to the NELEM'th next element in the selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_none_iter_next(H5S_sel_iter_t UNUSED *iter, size_t UNUSED nelem)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_iter_next);
+
+    /* Check args */
+    assert (iter);
+    assert (nelem>0);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_none_iter_next() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_iter_next_block
+ PURPOSE
+    Increment selection iterator to next block
+ USAGE
+    herr_t H5S_none_iter_next(iter)
+        H5S_sel_iter_t *iter;       IN: Pointer to selection iterator
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Advance selection iterator to the next block in the selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_none_iter_next_block(H5S_sel_iter_t UNUSED *iter)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_iter_next);
+
+    /* Check args */
+    assert (iter);
+
+    FUNC_LEAVE_NOAPI(FAIL);
+}   /* H5S_none_iter_next_block() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_iter_release
+ PURPOSE
+    Release "none" selection iterator information for a dataspace
+ USAGE
+    herr_t H5S_none_iter_release(iter)
+        H5S_sel_iter_t *iter;       IN: Pointer to selection iterator
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Releases all information for a dataspace "none" selection iterator
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_none_iter_release (H5S_sel_iter_t UNUSED * iter)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_iter_release);
+
+    /* Check args */
+    assert (iter);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_none_iter_release() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_release
+ PURPOSE
+    Release none selection information for a dataspace
+ USAGE
+    herr_t H5S_none_release(space)
+        H5S_t *space;       IN: Pointer to dataspace
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Releases "none" selection information for a dataspace
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_none_release (H5S_t UNUSED * space)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_release);
+
+    /* Check args */
+    assert (space);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_none_release() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_copy
+ PURPOSE
+    Copy a selection from one dataspace to another
+ USAGE
+    herr_t H5S_none_copy(dst, src)
+        H5S_t *dst;  OUT: Pointer to the destination dataspace
+        H5S_t *src;  IN: Pointer to the source dataspace
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Copies the 'none' selection information from the source
+    dataspace to the destination dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_none_copy(H5S_t *dst, const H5S_t UNUSED *src, hbool_t UNUSED share_selection)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_copy);
+
+    assert(src);
+    assert(dst);
+
+    /* Set number of elements in selection */
+    dst->select.num_elem=0;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5S_none_copy() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_is_valid
+ PURPOSE
+    Check whether the selection fits within the extent, with the current
+    offset defined.
+ USAGE
+    htri_t H5S_none_is_valid(space);
+        H5S_t *space;             IN: Dataspace pointer to query
+ RETURNS
+    TRUE if the selection fits within the extent, FALSE if it does not and
+        Negative on an error.
+ DESCRIPTION
+    Determines if the current selection at the current offet fits within the
+    extent for the dataspace.  Offset is irrelevant for this type of selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_none_is_valid (const H5S_t UNUSED *space)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_is_valid);
+
+    assert(space);
+
+    FUNC_LEAVE_NOAPI(TRUE);
+} /* end H5S_none_is_valid() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_serial_size
+ PURPOSE
+    Determine the number of bytes needed to store the serialized "none"
+        selection information.
+ USAGE
+    hssize_t H5S_none_serial_size(space)
+        H5S_t *space;             IN: Dataspace pointer to query
+ RETURNS
+    The number of bytes required on success, negative on an error.
+ DESCRIPTION
+    Determines the number of bytes required to serialize an "none"
+    selection for storage on disk.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static hssize_t
+H5S_none_serial_size (const H5S_t UNUSED *space)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_serial_size);
+
+    assert(space);
+
+    /* Basic number of bytes required to serialize point selection:
+     *  <type (4 bytes)> + <version (4 bytes)> + <padding (4 bytes)> +
+     *      <length (4 bytes)> = 16 bytes
+     */
+    FUNC_LEAVE_NOAPI(16);
+} /* end H5S_none_serial_size() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_serialize
+ PURPOSE
+    Serialize the current selection into a user-provided buffer.
+ USAGE
+    herr_t H5S_none_serialize(space, buf)
+        H5S_t *space;           IN: Dataspace pointer of selection to serialize
+        uint8 *buf;             OUT: Buffer to put serialized selection into
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Serializes the current element selection into a buffer.  (Primarily for
+    storing on disk).
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_none_serialize (const H5S_t *space, uint8_t *buf)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_serialize);
+
+    assert(space);
+
+    /* Store the preamble information */
+    UINT32ENCODE(buf, (uint32_t)H5S_GET_SELECT_TYPE(space));  /* Store the type of selection */
+    UINT32ENCODE(buf, (uint32_t)1);  /* Store the version number */
+    UINT32ENCODE(buf, (uint32_t)0);  /* Store the un-used padding */
+    UINT32ENCODE(buf, (uint32_t)0);  /* Store the additional information length */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_none_serialize() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_deserialize
+ PURPOSE
+    Deserialize the current selection from a user-provided buffer.
+ USAGE
+    herr_t H5S_none_deserialize(space, buf)
+        H5S_t *space;           IN/OUT: Dataspace pointer to place selection into
+        uint8 *buf;             IN: Buffer to retrieve serialized selection from
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Deserializes the current selection into a buffer.  (Primarily for retrieving
+    from disk).
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_none_deserialize (H5S_t *space, const uint8_t UNUSED *buf)
+{
+    herr_t ret_value;  /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_none_deserialize);
+
+    assert(space);
+
+    /* Change to "none" selection */
+    if((ret_value=H5S_select_none(space))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't change selection");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_none_deserialize() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_bounds
+ PURPOSE
+    Gets the bounding box containing the selection.
+ USAGE
+    herr_t H5S_none_bounds(space, start, end)
+        H5S_t *space;           IN: Dataspace pointer of selection to query
+        hsize_t *start;         OUT: Starting coordinate of bounding box
+        hsize_t *end;           OUT: Opposite coordinate of bounding box
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Retrieves the bounding box containing the current selection and places
+    it into the user's buffers.  The start and end buffers must be large
+    enough to hold the dataspace rank number of coordinates.  The bounding box
+    exactly contains the selection, ie. if a 2-D element selection is currently
+    defined with the following points: (4,5), (6,8) (10,7), the bounding box
+    with be (4, 5), (10, 8).  Calling this function on a "none" selection
+    returns fail.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_none_bounds(const H5S_t UNUSED *space, hsize_t UNUSED *start, hsize_t UNUSED *end)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_bounds);
+
+    assert(space);
+    assert(start);
+    assert(end);
+
+    FUNC_LEAVE_NOAPI(FAIL);
+}   /* H5Sget_none_bounds() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_is_contiguous
+ PURPOSE
+    Check if a "none" selection is contiguous within the dataspace extent.
+ USAGE
+    htri_t H5S_all_is_contiguous(space)
+        H5S_t *space;           IN: Dataspace pointer to check
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+    Checks to see if the current selection in the dataspace is contiguous.
+    This is primarily used for reading the entire selection in one swoop.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_none_is_contiguous(const H5S_t UNUSED *space)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_is_contiguous);
+
+    assert(space);
+
+    FUNC_LEAVE_NOAPI(FALSE);
+}   /* H5S_none_is_contiguous() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_is_single
+ PURPOSE
+    Check if a "none" selection is a single block within the dataspace extent.
+ USAGE
+    htri_t H5S_none_is_single(space)
+        H5S_t *space;           IN: Dataspace pointer to check
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+    Checks to see if the current selection in the dataspace is a single block.
+    This is primarily used for reading the entire selection in one swoop.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_none_is_single(const H5S_t UNUSED *space)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_is_single);
+
+    assert(space);
+
+    FUNC_LEAVE_NOAPI(FALSE);
+}   /* H5S_none_is_single() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_is_regular
+ PURPOSE
+    Check if a "none" selection is "regular"
+ USAGE
+    htri_t H5S_none_is_regular(space)
+        const H5S_t *space;     IN: Dataspace pointer to check
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+    Checks to see if the current selection in a dataspace is the a regular
+    pattern.
+    This is primarily used for reading the entire selection in one swoop.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_none_is_regular(const H5S_t UNUSED *space)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_is_regular);
+
+    /* Check args */
+    assert(space);
+
+    FUNC_LEAVE_NOAPI(TRUE);
+}   /* H5S_none_is_regular() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_none
+ PURPOSE
+    Specify that nothing is selected in the extent
+ USAGE
+    herr_t H5S_select_none(dsid)
+        hid_t dsid;             IN: Dataspace ID of selection to modify
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    This function de-selects the entire extent for a dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t H5S_select_none (H5S_t *space)
+{
+    herr_t ret_value=SUCCEED;  /* return value */
+
+    FUNC_ENTER_NOAPI(H5S_select_none, FAIL);
+
+    /* Check args */
+    assert(space);
+
+    /* Remove current selection first */
+    if(H5S_SELECT_RELEASE(space)<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't release hyperslab");
+
+    /* Set number of elements in selection */
+    space->select.num_elem=0;
+
+    /* Set selection type */
+    space->select.type=H5S_sel_none;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_none() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sselect_none
+ PURPOSE
+    Specify that nothing is selected in the extent
+ USAGE
+    herr_t H5Sselect_none(dsid)
+        hid_t dsid;             IN: Dataspace ID of selection to modify
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    This function de-selects the entire extent for a dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t H5Sselect_none (hid_t spaceid)
+{
+    H5S_t	*space = NULL;  /* Dataspace to modify selection of */
+    herr_t ret_value;  /* return value */
+
+    FUNC_ENTER_API(H5Sselect_none, FAIL);
+
+    /* Check args */
+    if (NULL == (space=H5I_object_verify(spaceid, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
+
+    /* Change to "none" selection */
+    if((ret_value=H5S_select_none(space))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't change selection");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Sselect_none() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_none_get_seq_list
+ PURPOSE
+    Create a list of offsets & lengths for a selection
+ USAGE
+    herr_t H5S_all_get_seq_list(space,flags,iter,maxseq,maxelem,nseq,nelem,off,len)
+        H5S_t *space;           IN: Dataspace containing selection to use.
+        unsigned flags;         IN: Flags for extra information about operation
+        H5S_sel_iter_t *iter;   IN/OUT: Selection iterator describing last
+                                    position of interest in selection.
+        size_t maxseq;          IN: Maximum number of sequences to generate
+        size_t maxelem;         IN: Maximum number of elements to include in the
+                                    generated sequences
+        size_t *nseq;           OUT: Actual number of sequences generated
+        size_t *nelem;          OUT: Actual number of elements in sequences generated
+        hsize_t *off;           OUT: Array of offsets
+        size_t *len;            OUT: Array of lengths
+ RETURNS
+    Non-negative on success/Negative on failure.
+ DESCRIPTION
+    Use the selection in the dataspace to generate a list of byte offsets and
+    lengths for the region(s) selected.  Start/Restart from the position in the
+    ITER parameter.  The number of sequences generated is limited by the MAXSEQ
+    parameter and the number of sequences actually generated is stored in the
+    NSEQ parameter.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_none_get_seq_list(const H5S_t UNUSED *space, unsigned UNUSED flags, H5S_sel_iter_t UNUSED *iter,
+    size_t UNUSED maxseq, size_t UNUSED maxelem, size_t *nseq, size_t *nelem,
+    hsize_t UNUSED *off, size_t UNUSED *len)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_none_get_seq_list);
+
+    /* Check args */
+    assert(space);
+    assert(iter);
+    assert(maxseq>0);
+    assert(maxelem>0);
+    assert(nseq);
+    assert(nelem);
+    assert(off);
+    assert(len);
+
+    /* "none" selections don't generate sequences of bytes */
+    *nseq=0;
+
+    /* They don't use any elements, either */
+    *nelem=0;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+} /* end H5S_all_get_seq_list() */

Added: packages/hdf5/branches/upstream/current/src/H5Spkg.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Spkg.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Spkg.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,228 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *		Thursday, September 28, 2000
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5S package.  Source files outside the H5S package should
+ *		include H5Sprivate.h instead.
+ */
+#ifndef H5S_PACKAGE
+#error "Do not include this file outside the H5S package!"
+#endif
+
+#ifndef _H5Spkg_H
+#define _H5Spkg_H
+
+#include "H5Sprivate.h"
+
+/* Number of reserved IDs in ID group */
+#define H5S_RESERVED_ATOMS  2
+
+/* Flags to indicate special dataspace features are active */
+#define H5S_VALID_MAX	0x01
+#define H5S_VALID_PERM	0x02
+
+/*
+ * Dataspace extent information
+ */
+/* Extent container */
+typedef struct {
+    H5S_class_t	type;   /* Type of extent */
+    hsize_t nelem;      /* Number of elements in extent */
+
+    unsigned rank;      /* Number of dimensions */
+    hsize_t *size;      /* Current size of the dimensions */
+    hsize_t *max;       /* Maximum size of the dimensions */
+} H5S_extent_t;
+
+/*
+ * Dataspace selection information
+ */
+/* Node in point selection list (typedef'd in H5Sprivate.h) */
+struct H5S_pnt_node_t {
+    hsize_t *pnt;          /* Pointer to a selected point */
+    struct H5S_pnt_node_t *next;  /* pointer to next point in list */
+};
+
+/* Information about point selection list */
+typedef struct {
+    H5S_pnt_node_t *head;   /* Pointer to head of point list */
+} H5S_pnt_list_t;
+
+/* Information about new-style hyperslab spans */
+
+/* Information a particular hyperslab span */
+struct H5S_hyper_span_t {
+    hsize_t low, high;          /* Low & high bounds of span */
+    hsize_t nelem;              /* Number of elements in span (only needed during I/O) */
+    hsize_t pstride;            /* Pseudo-stride from start of previous span (only used during I/O) */
+    struct H5S_hyper_span_info_t *down;     /* Pointer to list of spans in next dimension down */
+    struct H5S_hyper_span_t *next;     /* Pointer to next span in list */
+};
+
+/* Information about a list of hyperslab spans */
+struct H5S_hyper_span_info_t {
+    unsigned count;                    /* Ref. count of number of spans which share this span */
+    struct H5S_hyper_span_info_t *scratch;  /* Scratch pointer
+                                             * (used during copies, as mark
+                                             * during precomputes for I/O &
+                                             * to point to the last span in a
+                                             * list during single element adds)
+                                             */
+    struct H5S_hyper_span_t *head;  /* Pointer to list of spans in next dimension down */
+};
+
+/* Information about new-style hyperslab selection */
+typedef struct {
+    hbool_t diminfo_valid;                      /* Whether the dataset has valid diminfo */
+    H5S_hyper_dim_t opt_diminfo[H5S_MAX_RANK];  /* per-dim selection info */
+    H5S_hyper_dim_t app_diminfo[H5S_MAX_RANK];  /* per-dim selection info */
+	/* 'opt_diminfo' points to a [potentially] optimized version of the user's
+         * hyperslab information.  'app_diminfo' points to the actual parameters
+         * that the application used for setting the hyperslab selection.  These
+         * are only used for re-gurgitating the original values used to set the
+         * hyperslab to the application when it queries the hyperslab selection
+         * information. */
+    H5S_hyper_span_info_t *span_lst; /* List of hyperslab span information */
+} H5S_hyper_sel_t;
+
+/* Selection information methods */
+/* Method to copy a selection */
+typedef herr_t (*H5S_sel_copy_func_t)(H5S_t *dst, const H5S_t *src, hbool_t share_selection);
+/* Method to retrieve a list of offset/length sequences for selection */
+typedef herr_t (*H5S_sel_get_seq_list_func_t)(const H5S_t *space, unsigned flags,
+    H5S_sel_iter_t *iter, size_t maxseq, size_t maxbytes,
+    size_t *nseq, size_t *nbytes, hsize_t *off, size_t *len);
+/* Method to release current selection */
+typedef herr_t (*H5S_sel_release_func_t)(H5S_t *space);
+/* Method to determine if current selection is valid for dataspace */
+typedef htri_t (*H5S_sel_is_valid_func_t)(const H5S_t *space);
+/* Method to determine number of bytes required to store current selection */
+typedef hssize_t (*H5S_sel_serial_size_func_t)(const H5S_t *space);
+/* Method to store current selection in "serialized" form (a byte sequence suitable for storing on disk) */
+typedef herr_t (*H5S_sel_serialize_func_t)(const H5S_t *space, uint8_t *buf);
+/* Method to store create selection from "serialized" form (a byte sequence suitable for storing on disk) */
+typedef herr_t (*H5S_sel_deserialize_func_t)(H5S_t *space, const uint8_t *buf);
+/* Method to determine to smallest n-D bounding box containing the current selection */
+typedef herr_t (*H5S_sel_bounds_func_t)(const H5S_t *space, hsize_t *start, hsize_t *end);
+/* Method to determine if current selection is contiguous */
+typedef htri_t (*H5S_sel_is_contiguous_func_t)(const H5S_t *space);
+/* Method to determine if current selection is a single block */
+typedef htri_t (*H5S_sel_is_single_func_t)(const H5S_t *space);
+/* Method to determine if current selection is "regular" */
+typedef htri_t (*H5S_sel_is_regular_func_t)(const H5S_t *space);
+/* Method to initialize iterator for current selection */
+typedef herr_t (*H5S_sel_iter_init_func_t)(H5S_sel_iter_t *sel_iter, const H5S_t *space);
+
+/* Selection class information */
+typedef struct {
+    H5S_sel_type type;                          /* Type of selection (all, none, points or hyperslab) */
+
+    /* Methods */
+    H5S_sel_copy_func_t copy;                   /* Method to make a copy of a selection */
+    H5S_sel_get_seq_list_func_t get_seq_list;   /* Method to retrieve a list of offset/length sequences for selection */
+    H5S_sel_release_func_t release;             /* Method to release current selection */
+    H5S_sel_is_valid_func_t is_valid;           /* Method to determine if current selection is valid for dataspace */
+    H5S_sel_serial_size_func_t serial_size;     /* Method to determine number of bytes required to store current selection */
+    H5S_sel_serialize_func_t serialize;         /* Method to store current selection in "serialized" form (a byte sequence suitable for storing on disk) */
+    H5S_sel_deserialize_func_t deserialize;     /* Method to store create selection from "serialized" form (a byte sequence suitable for storing on disk) */
+    H5S_sel_bounds_func_t bounds;               /* Method to determine to smallest n-D bounding box containing the current selection */
+    H5S_sel_is_contiguous_func_t is_contiguous; /* Method to determine if current selection is contiguous */
+    H5S_sel_is_single_func_t is_single;         /* Method to determine if current selection is a single block */
+    H5S_sel_is_regular_func_t is_regular;       /* Method to determine if current selection is "regular" */
+    H5S_sel_iter_init_func_t iter_init;         /* Method to initialize iterator for current selection */
+} H5S_select_class_t;
+
+/* Selection information object */
+typedef struct {
+    const H5S_select_class_t *type;     /* Pointer to selection's class info */
+    hssize_t offset[H5S_MAX_RANK];      /* Offset within the extent */
+    hsize_t num_elem;   /* Number of elements in selection */
+    union {
+        H5S_pnt_list_t *pnt_lst; /* List of selected points (order is important) */
+        H5S_hyper_sel_t *hslab;  /* Info about hyperslab selections */
+    } sel_info;
+} H5S_select_t;
+
+/* Main dataspace structure (typedef'd in H5Sprivate.h) */
+struct H5S_t {
+    H5S_extent_t extent;                /* Dataspace extent */
+    H5S_select_t select;		/* Dataspace selection */
+};
+
+/* Selection iteration methods */
+/* Method to retrieve the current coordinates of iterator for current selection */
+typedef herr_t (*H5S_sel_iter_coords_func_t)(const H5S_sel_iter_t *iter, hsize_t *coords);
+/* Method to retrieve the current block of iterator for current selection */
+typedef herr_t (*H5S_sel_iter_block_func_t)(const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end);
+/* Method to determine number of elements left in iterator for current selection */
+typedef hsize_t (*H5S_sel_iter_nelmts_func_t)(const H5S_sel_iter_t *iter);
+/* Method to determine if there are more blocks left in the current selection */
+typedef htri_t (*H5S_sel_iter_has_next_block_func_t)(const H5S_sel_iter_t *iter);
+/* Method to move selection iterator to the next element in the selection */
+typedef herr_t (*H5S_sel_iter_next_func_t)(H5S_sel_iter_t *iter, size_t nelem);
+/* Method to move selection iterator to the next block in the selection */
+typedef herr_t (*H5S_sel_iter_next_block_func_t)(H5S_sel_iter_t *iter);
+/* Method to release iterator for current selection */
+typedef herr_t (*H5S_sel_iter_release_func_t)(H5S_sel_iter_t *iter);
+
+/* Selection iteration class */
+typedef struct H5S_sel_iter_class_t {
+    H5S_sel_type type;                          /* Type of selection (all, none, points or hyperslab) */
+
+    /* Methods on selections */
+    H5S_sel_iter_coords_func_t iter_coords;     /* Method to retrieve the current coordinates of iterator for current selection */
+    H5S_sel_iter_block_func_t iter_block;       /* Method to retrieve the current block of iterator for current selection */
+    H5S_sel_iter_nelmts_func_t iter_nelmts;     /* Method to determine number of elements left in iterator for current selection */
+    H5S_sel_iter_has_next_block_func_t iter_has_next_block;         /* Method to query if there is another block left in the selection */
+    H5S_sel_iter_next_func_t iter_next;         /* Method to move selection iterator to the next element in the selection */
+    H5S_sel_iter_next_block_func_t iter_next_block;     /* Method to move selection iterator to the next block in the selection */
+    H5S_sel_iter_release_func_t iter_release;   /* Method to release iterator for current selection */
+} H5S_sel_iter_class_t;
+
+/*
+ * All selection class methods.
+ */
+H5_DLLVAR const H5S_select_class_t H5S_sel_all[1];
+
+/*
+ * Hyperslab selection class methods.
+ */
+H5_DLLVAR const H5S_select_class_t H5S_sel_hyper[1];
+
+/*
+ * None selection class methods.
+ */
+H5_DLLVAR const H5S_select_class_t H5S_sel_none[1];
+
+/*
+ * Pointer selection class methods.
+ */
+H5_DLLVAR const H5S_select_class_t H5S_sel_point[1];
+
+/* Extent functions */
+H5_DLL herr_t H5S_extent_release(H5S_extent_t *extent);
+H5_DLL herr_t H5S_extent_copy(H5S_extent_t *dst, const H5S_extent_t *src);
+
+/* Operations on selections */
+
+/* Testing functions */
+#ifdef H5S_TESTING
+H5_DLL htri_t H5S_select_shape_same_test(hid_t sid1, hid_t sid2);
+#endif /* H5S_TESTING */
+
+#endif /*_H5Spkg_H*/

Added: packages/hdf5/branches/upstream/current/src/H5Spoint.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Spoint.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Spoint.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1391 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Tuesday, June 16, 1998
+ *
+ * Purpose:	Point selection data space I/O functions.
+ */
+
+#define H5S_PACKAGE		/*suppress error about including H5Spkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			  */
+#include "H5Eprivate.h"		/* Error handling		  */
+#include "H5FLprivate.h"	/* Free Lists	  */
+#include "H5Iprivate.h"		/* ID Functions		  */
+#include "H5MMprivate.h"	/* Memory Management functions		  */
+#include "H5Spkg.h"		/* Dataspace functions			  */
+#include "H5Vprivate.h"         /* Vector functions */
+
+/* Static function prototypes */
+
+/* Selection callbacks */
+static herr_t H5S_point_copy(H5S_t *dst, const H5S_t *src, hbool_t share_selection);
+static herr_t H5S_point_get_seq_list(const H5S_t *space, unsigned flags,
+    H5S_sel_iter_t *iter, size_t maxseq, size_t maxbytes,
+    size_t *nseq, size_t *nbytes, hsize_t *off, size_t *len);
+static herr_t H5S_point_release(H5S_t *space);
+static htri_t H5S_point_is_valid(const H5S_t *space);
+static hssize_t H5S_point_serial_size(const H5S_t *space);
+static herr_t H5S_point_serialize(const H5S_t *space, uint8_t *buf);
+static herr_t H5S_point_deserialize(H5S_t *space, const uint8_t *buf);
+static herr_t H5S_point_bounds(const H5S_t *space, hsize_t *start, hsize_t *end);
+static htri_t H5S_point_is_contiguous(const H5S_t *space);
+static htri_t H5S_point_is_single(const H5S_t *space);
+static htri_t H5S_point_is_regular(const H5S_t *space);
+static herr_t H5S_point_iter_init(H5S_sel_iter_t *iter, const H5S_t *space);
+
+/* Selection iteration callbacks */
+static herr_t H5S_point_iter_coords(const H5S_sel_iter_t *iter, hsize_t *coords);
+static herr_t H5S_point_iter_block(const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end);
+static hsize_t H5S_point_iter_nelmts(const H5S_sel_iter_t *iter);
+static htri_t H5S_point_iter_has_next_block(const H5S_sel_iter_t *iter);
+static herr_t H5S_point_iter_next(H5S_sel_iter_t *sel_iter, size_t nelem);
+static herr_t H5S_point_iter_next_block(H5S_sel_iter_t *sel_iter);
+static herr_t H5S_point_iter_release(H5S_sel_iter_t *sel_iter);
+
+/* Selection properties for point selections */
+const H5S_select_class_t H5S_sel_point[1] = {{
+    H5S_SEL_POINTS,
+
+    /* Methods on selection */
+    H5S_point_copy,
+    H5S_point_get_seq_list,
+    H5S_point_release,
+    H5S_point_is_valid,
+    H5S_point_serial_size,
+    H5S_point_serialize,
+    H5S_point_deserialize,
+    H5S_point_bounds,
+    H5S_point_is_contiguous,
+    H5S_point_is_single,
+    H5S_point_is_regular,
+    H5S_point_iter_init,
+}};
+
+/* Iteration properties for point selections */
+static const H5S_sel_iter_class_t H5S_sel_iter_point[1] = {{
+    H5S_SEL_POINTS,
+
+    /* Methods on selection iterator */
+    H5S_point_iter_coords,
+    H5S_point_iter_block,
+    H5S_point_iter_nelmts,
+    H5S_point_iter_has_next_block,
+    H5S_point_iter_next,
+    H5S_point_iter_next_block,
+    H5S_point_iter_release,
+}};
+
+/* Declare a free list to manage the H5S_pnt_node_t struct */
+H5FL_DEFINE_STATIC(H5S_pnt_node_t);
+
+/* Declare a free list to manage the H5S_pnt_list_t struct */
+H5FL_DEFINE_STATIC(H5S_pnt_list_t);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_point_iter_init
+ *
+ * Purpose:	Initializes iteration information for point selection.
+ *
+ * Return:	non-negative on success, negative on failure.
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, June 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_point_iter_init(H5S_sel_iter_t *iter, const H5S_t *space)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_point_iter_init);
+
+    /* Check args */
+    assert (space && H5S_SEL_POINTS==H5S_GET_SELECT_TYPE(space));
+    assert (iter);
+
+    /* Initialize the number of points to iterate over */
+    iter->elmt_left=space->select.num_elem;
+
+    /* Start at the head of the list of points */
+    iter->u.pnt.curr=space->select.sel_info.pnt_lst->head;
+
+    /* Initialize type of selection iterator */
+    iter->type=H5S_sel_iter_point;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_point_iter_init() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_point_iter_coords
+ *
+ * Purpose:	Retrieve the current coordinates of iterator for current
+ *              selection
+ *
+ * Return:	non-negative on success, negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, April 22, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_point_iter_coords (const H5S_sel_iter_t *iter, hsize_t *coords)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_point_iter_coords);
+
+    /* Check args */
+    assert (iter);
+    assert (coords);
+
+    /* Copy the offset of the current point */
+    HDmemcpy(coords,iter->u.pnt.curr->pnt,sizeof(hsize_t)*iter->rank);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_point_iter_coords() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_point_iter_block
+ *
+ * Purpose:	Retrieve the current block of iterator for current
+ *              selection
+ *
+ * Return:	non-negative on success, negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, June 2, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5S_point_iter_block (const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_point_iter_block);
+
+    /* Check args */
+    assert (iter);
+    assert (start);
+    assert (end);
+
+    /* Copy the current point as a block */
+    HDmemcpy(start,iter->u.pnt.curr->pnt,sizeof(hsize_t)*iter->rank);
+    HDmemcpy(end,iter->u.pnt.curr->pnt,sizeof(hsize_t)*iter->rank);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_point_iter_block() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_point_iter_nelmts
+ *
+ * Purpose:	Return number of elements left to process in iterator
+ *
+ * Return:	non-negative number of elements on success, zero on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, June 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hsize_t
+H5S_point_iter_nelmts (const H5S_sel_iter_t *iter)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_point_iter_nelmts);
+
+    /* Check args */
+    assert (iter);
+
+    FUNC_LEAVE_NOAPI(iter->elmt_left);
+}   /* H5S_point_iter_nelmts() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_iter_has_next_block
+ PURPOSE
+    Check if there is another block left in the current iterator
+ USAGE
+    htri_t H5S_point_iter_has_next_block(iter)
+        const H5S_sel_iter_t *iter;       IN: Pointer to selection iterator
+ RETURNS
+    Non-negative (TRUE/FALSE) on success/Negative on failure
+ DESCRIPTION
+    Check if there is another block available in the selection iterator.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_point_iter_has_next_block(const H5S_sel_iter_t *iter)
+{
+    htri_t ret_value=TRUE;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_point_iter_has_next_block);
+
+    /* Check args */
+    assert (iter);
+
+    /* Check if there is another point in the list */
+    if(iter->u.pnt.curr->next==NULL)
+        HGOTO_DONE(FALSE);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_point_iter_has_next_block() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_iter_next
+ PURPOSE
+    Increment selection iterator
+ USAGE
+    herr_t H5S_point_iter_next(iter, nelem)
+        H5S_sel_iter_t *iter;       IN: Pointer to selection iterator
+        size_t nelem;               IN: Number of elements to advance by
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Advance selection iterator to the NELEM'th next element in the selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_point_iter_next(H5S_sel_iter_t *iter, size_t nelem)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_point_iter_next);
+
+    /* Check args */
+    assert (iter);
+    assert (nelem>0);
+
+    /* Increment the iterator */
+    while(nelem>0) {
+        iter->u.pnt.curr=iter->u.pnt.curr->next;
+        nelem--;
+    } /* end while */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_point_iter_next() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_iter_next_block
+ PURPOSE
+    Increment selection iterator to next block
+ USAGE
+    herr_t H5S_point_iter_next_block(iter)
+        H5S_sel_iter_t *iter;       IN: Pointer to selection iterator
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Advance selection iterator to the next block in the selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_point_iter_next_block(H5S_sel_iter_t *iter)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_point_iter_next_block);
+
+    /* Check args */
+    assert (iter);
+
+    /* Increment the iterator */
+    iter->u.pnt.curr=iter->u.pnt.curr->next;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_point_iter_next_block() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_iter_release
+ PURPOSE
+    Release point selection iterator information for a dataspace
+ USAGE
+    herr_t H5S_point_iter_release(iter)
+        H5S_sel_iter_t *iter;       IN: Pointer to selection iterator
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Releases all information for a dataspace point selection iterator
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_point_iter_release (H5S_sel_iter_t UNUSED * iter)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_point_iter_release);
+
+    /* Check args */
+    assert (iter);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_point_iter_release() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_add
+ PURPOSE
+    Add a series of elements to a point selection
+ USAGE
+    herr_t H5S_point_add(space, num_elem, coord)
+        H5S_t *space;           IN: Dataspace of selection to modify
+        size_t num_elem;        IN: Number of elements in COORD array.
+        const hsize_t *coord[];    IN: The location of each element selected
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    This function adds elements to the current point selection for a dataspace
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_point_add (H5S_t *space, H5S_seloper_t op, size_t num_elem, const hsize_t **_coord)
+{
+    H5S_pnt_node_t *top, *curr, *new_node; /* Point selection nodes */
+    const hsize_t *coord=(const hsize_t *)_coord;     /* Pointer to the actual coordinates */
+    unsigned i;                 /* Counter */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_point_add);
+
+    assert(space);
+    assert(num_elem>0);
+    assert(coord);
+    assert(op==H5S_SELECT_SET || op==H5S_SELECT_APPEND || op==H5S_SELECT_PREPEND);
+
+    top=curr=NULL;
+    for(i=0; i<num_elem; i++) {
+        /* Allocate space for the new node */
+        if((new_node = H5FL_MALLOC(H5S_pnt_node_t))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate point node");
+
+        if((new_node->pnt = H5MM_malloc(space->extent.rank*sizeof(hsize_t)))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate coordinate information");
+
+        /* Copy over the coordinates */
+        HDmemcpy(new_node->pnt,coord+(i*space->extent.rank),(space->extent.rank*sizeof(hsize_t)));
+
+        /* Link into list */
+        new_node->next=NULL;
+        if(top==NULL)
+            top=new_node;
+        else
+            curr->next=new_node;
+        curr=new_node;
+    } /* end for */
+
+    /* Insert the list of points selected in the proper place */
+    if(op==H5S_SELECT_SET || op==H5S_SELECT_PREPEND) {
+        /* Append current list, if there is one */
+        if(space->select.sel_info.pnt_lst->head!=NULL)
+            curr->next=space->select.sel_info.pnt_lst->head;
+
+        /* Put new list in point selection */
+        space->select.sel_info.pnt_lst->head=top;
+    } /* end if */
+    else {  /* op==H5S_SELECT_APPEND */
+        new_node=space->select.sel_info.pnt_lst->head;
+        if(new_node!=NULL) {
+            while(new_node->next!=NULL)
+                new_node=new_node->next;
+
+            /* Append new list to point selection */
+            new_node->next=top;
+        } /* end if */
+        else
+            space->select.sel_info.pnt_lst->head=top;
+    } /* end else */
+
+    /* Set the number of elements in the new selection */
+    if(op==H5S_SELECT_SET)
+        space->select.num_elem=num_elem;
+    else
+        space->select.num_elem+=num_elem;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_point_add() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_release
+ PURPOSE
+    Release point selection information for a dataspace
+ USAGE
+    herr_t H5S_point_release(space)
+        H5S_t *space;       IN: Pointer to dataspace
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Releases all point selection information for a dataspace
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_point_release (H5S_t *space)
+{
+    H5S_pnt_node_t *curr, *next;        /* Point selection nodes */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_point_release);
+
+    /* Check args */
+    assert (space);
+
+    /* Delete all the nodes from the list */
+    curr=space->select.sel_info.pnt_lst->head;
+    while(curr!=NULL) {
+        next=curr->next;
+        H5MM_xfree(curr->pnt);
+        H5FL_FREE(H5S_pnt_node_t,curr);
+        curr=next;
+    } /* end while */
+
+    /* Free & reset the point list header */
+    H5FL_FREE(H5S_pnt_list_t,space->select.sel_info.pnt_lst);
+    space->select.sel_info.pnt_lst=NULL;
+
+    /* Reset the number of elements in the selection */
+    space->select.num_elem=0;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_point_release() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_elements
+ PURPOSE
+    Specify a series of elements in the dataspace to select
+ USAGE
+    herr_t H5S_select_elements(dsid, op, num_elem, coord)
+        hid_t dsid;             IN: Dataspace ID of selection to modify
+        H5S_seloper_t op;       IN: Operation to perform on current selection
+        size_t num_elem;        IN: Number of elements in COORD array.
+        const hsize_t **coord; IN: The location of each element selected
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    This function selects array elements to be included in the selection for
+    the dataspace.  The COORD array is a 2-D array of size <dataspace rank>
+    by NUM_ELEM (ie. a list of coordinates in the dataspace).  The order of
+    the element coordinates in the COORD array specifies the order that the
+    array elements are iterated through when I/O is performed.  Duplicate
+    coordinates are not checked for.  The selection operator, OP, determines
+    how the new selection is to be combined with the existing selection for
+    the dataspace.  Currently, only H5S_SELECT_SET is supported, which replaces
+    the existing selection with the one defined in this call.  When operators
+    other than H5S_SELECT_SET are used to combine a new selection with an
+    existing selection, the selection ordering is reset to 'C' array ordering.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_select_elements (H5S_t *space, H5S_seloper_t op, size_t num_elem,
+    const hsize_t **coord)
+{
+    herr_t ret_value=SUCCEED;  /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_select_elements);
+
+    /* Check args */
+    assert(space);
+    assert(num_elem);
+    assert(coord);
+    assert(op==H5S_SELECT_SET || op==H5S_SELECT_APPEND || op==H5S_SELECT_PREPEND);
+
+    /* If we are setting a new selection, remove current selection first */
+    if(op==H5S_SELECT_SET || H5S_GET_SELECT_TYPE(space)!=H5S_SEL_POINTS) {
+        if(H5S_SELECT_RELEASE(space)<0)
+            HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't release point selection");
+    } /* end if */
+
+    /* Allocate space for the point selection information if necessary */
+    if(H5S_GET_SELECT_TYPE(space)!=H5S_SEL_POINTS || space->select.sel_info.pnt_lst==NULL) {
+        if((space->select.sel_info.pnt_lst = H5FL_CALLOC(H5S_pnt_list_t))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate element information");
+    } /* end if */
+
+    /* Add points to selection */
+    if(H5S_point_add(space,op,num_elem,coord)<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINSERT, FAIL, "can't insert elements");
+
+    /* Set selection type */
+    space->select.type=H5S_sel_point;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_elements() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_copy
+ PURPOSE
+    Copy a selection from one dataspace to another
+ USAGE
+    herr_t H5S_point_copy(dst, src)
+        H5S_t *dst;  OUT: Pointer to the destination dataspace
+        H5S_t *src;  IN: Pointer to the source dataspace
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Copies all the point selection information from the source
+    dataspace to the destination dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_point_copy(H5S_t *dst, const H5S_t *src, hbool_t UNUSED share_selection)
+{
+    H5S_pnt_node_t *curr, *new_node, *new_head;    /* Point information nodes */
+    herr_t ret_value=SUCCEED;  /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_point_copy);
+
+    assert(src);
+    assert(dst);
+
+    /* Allocate room for the head of the point list */
+    if((dst->select.sel_info.pnt_lst=H5FL_MALLOC(H5S_pnt_list_t))==NULL)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate point node");
+
+    curr=src->select.sel_info.pnt_lst->head;
+    new_head=NULL;
+    while(curr!=NULL) {
+        /* Create each point */
+        if((new_node=H5FL_MALLOC(H5S_pnt_node_t))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate point node");
+        if((new_node->pnt = H5MM_malloc(src->extent.rank*sizeof(hsize_t)))==NULL)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate coordinate information");
+        HDmemcpy(new_node->pnt,curr->pnt,(src->extent.rank*sizeof(hsize_t)));
+        new_node->next=NULL;
+
+        /* Keep the order the same when copying */
+        if(new_head==NULL)
+            new_head=dst->select.sel_info.pnt_lst->head=new_node;
+        else {
+            new_head->next=new_node;
+            new_head=new_node;
+        } /* end else */
+
+        curr=curr->next;
+    } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_point_copy() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_is_valid
+ PURPOSE
+    Check whether the selection fits within the extent, with the current
+    offset defined.
+ USAGE
+    htri_t H5S_point_is_valid(space);
+        H5S_t *space;             IN: Dataspace pointer to query
+ RETURNS
+    TRUE if the selection fits within the extent, FALSE if it does not and
+        Negative on an error.
+ DESCRIPTION
+    Determines if the current selection at the current offet fits within the
+    extent for the dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_point_is_valid (const H5S_t *space)
+{
+    H5S_pnt_node_t *curr;      /* Point information nodes */
+    unsigned u;                   /* Counter */
+    htri_t ret_value=TRUE;     /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_point_is_valid);
+
+    assert(space);
+
+    /* Check each point to determine whether selection+offset is within extent */
+    curr=space->select.sel_info.pnt_lst->head;
+    while(curr!=NULL) {
+        /* Check each dimension */
+        for(u=0; u<space->extent.rank; u++) {
+            /* Check if an offset has been defined */
+            /* Bounds check the selected point + offset against the extent */
+            if(((curr->pnt[u]+space->select.offset[u])>space->extent.size[u])
+                    || (((hssize_t)curr->pnt[u]+space->select.offset[u])<0))
+                HGOTO_DONE(FALSE)
+        } /* end for */
+
+        curr=curr->next;
+    } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_point_is_valid() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sget_select_elem_npoints
+ PURPOSE
+    Get the number of points in current element selection
+ USAGE
+    hssize_t H5Sget_select_elem_npoints(dsid)
+        hid_t dsid;             IN: Dataspace ID of selection to query
+ RETURNS
+    The number of element points in selection on success, negative on failure
+ DESCRIPTION
+    Returns the number of element points in current selection for dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hssize_t
+H5Sget_select_elem_npoints(hid_t spaceid)
+{
+    H5S_t	*space = NULL;      /* Dataspace to modify selection of */
+    hssize_t ret_value;        /* return value */
+
+    FUNC_ENTER_API(H5Sget_select_elem_npoints, FAIL);
+    H5TRACE1("Hs","i",spaceid);
+
+    /* Check args */
+    if (NULL == (space=H5I_object_verify(spaceid, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
+    if(H5S_GET_SELECT_TYPE(space)!=H5S_SEL_POINTS)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an element selection");
+
+    ret_value = H5S_GET_SELECT_NPOINTS(space);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Sget_select_elem_npoints() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_serial_size
+ PURPOSE
+    Determine the number of bytes needed to store the serialized point selection
+    information.
+ USAGE
+    hssize_t H5S_point_serial_size(space)
+        H5S_t *space;             IN: Dataspace pointer to query
+ RETURNS
+    The number of bytes required on success, negative on an error.
+ DESCRIPTION
+    Determines the number of bytes required to serialize the current point
+    selection information for storage on disk.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static hssize_t
+H5S_point_serial_size (const H5S_t *space)
+{
+    H5S_pnt_node_t *curr;       /* Point information nodes */
+    hssize_t ret_value;         /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_point_serial_size);
+
+    assert(space);
+
+    /* Basic number of bytes required to serialize point selection:
+     *  <type (4 bytes)> + <version (4 bytes)> + <padding (4 bytes)> +
+     *      <length (4 bytes)> + <rank (4 bytes)> + <# of points (4 bytes)> = 24 bytes
+     */
+    ret_value=24;
+
+    /* Count points in selection */
+    curr=space->select.sel_info.pnt_lst->head;
+    while(curr!=NULL) {
+        /* Add 4 bytes times the rank for each element selected */
+        ret_value+=4*space->extent.rank;
+        curr=curr->next;
+    } /* end while */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_point_serial_size() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_serialize
+ PURPOSE
+    Serialize the current selection into a user-provided buffer.
+ USAGE
+    herr_t H5S_point_serialize(space, buf)
+        H5S_t *space;           IN: Dataspace pointer of selection to serialize
+        uint8 *buf;             OUT: Buffer to put serialized selection into
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Serializes the current element selection into a buffer.  (Primarily for
+    storing on disk).
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_point_serialize (const H5S_t *space, uint8_t *buf)
+{
+    H5S_pnt_node_t *curr;   /* Point information nodes */
+    uint8_t *lenp;          /* pointer to length location for later storage */
+    uint32_t len=0;         /* number of bytes used */
+    unsigned u;                /* local counting variable */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_point_serialize);
+
+    assert(space);
+
+    /* Store the preamble information */
+    UINT32ENCODE(buf, (uint32_t)H5S_GET_SELECT_TYPE(space));  /* Store the type of selection */
+    UINT32ENCODE(buf, (uint32_t)1);  /* Store the version number */
+    UINT32ENCODE(buf, (uint32_t)0);  /* Store the un-used padding */
+    lenp=buf;           /* keep the pointer to the length location for later */
+    buf+=4;             /* skip over space for length */
+
+    /* Encode number of dimensions */
+    UINT32ENCODE(buf, (uint32_t)space->extent.rank);
+    len+=4;
+
+    /* Encode number of elements */
+    UINT32ENCODE(buf, (uint32_t)space->select.num_elem);
+    len+=4;
+
+    /* Encode each point in selection */
+    curr=space->select.sel_info.pnt_lst->head;
+    while(curr!=NULL) {
+        /* Add 4 bytes times the rank for each element selected */
+        len+=4*space->extent.rank;
+
+        /* Encode each point */
+        for(u=0; u<space->extent.rank; u++)
+            UINT32ENCODE(buf, (uint32_t)curr->pnt[u]);
+
+        curr=curr->next;
+    } /* end while */
+
+    /* Encode length */
+    UINT32ENCODE(lenp, (uint32_t)len);  /* Store the length of the extra information */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_point_serialize() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_deserialize
+ PURPOSE
+    Deserialize the current selection from a user-provided buffer.
+ USAGE
+    herr_t H5S_point_deserialize(space, buf)
+        H5S_t *space;           IN/OUT: Dataspace pointer to place selection into
+        uint8 *buf;             IN: Buffer to retrieve serialized selection from
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Deserializes the current selection into a buffer.  (Primarily for retrieving
+    from disk).
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_point_deserialize (H5S_t *space, const uint8_t *buf)
+{
+    H5S_seloper_t op=H5S_SELECT_SET;    /* Selection operation */
+    uint32_t rank;           /* Rank of points */
+    size_t num_elem=0;      /* Number of elements in selection */
+    hsize_t *coord=NULL, *tcoord;   /* Pointer to array of elements */
+    unsigned i,j;              /* local counting variables */
+    herr_t ret_value;          /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_point_deserialize);
+
+    /* Check args */
+    assert(space);
+    assert(buf);
+
+    /* Deserialize points to select */
+    buf+=16;    /* Skip over selection header */
+    UINT32DECODE(buf,rank);  /* decode the rank of the point selection */
+    if(rank!=space->extent.rank)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "rank of pointer does not match dataspace");
+    UINT32DECODE(buf,num_elem);  /* decode the number of points */
+
+    /* Allocate space for the coordinates */
+    if((coord = H5MM_malloc(num_elem*rank*sizeof(hsize_t)))==NULL)
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate coordinate information");
+
+    /* Retrieve the coordinates from the buffer */
+    for(tcoord=coord,i=0; i<num_elem; i++)
+        for(j=0; j<(unsigned)rank; j++,tcoord++)
+            UINT32DECODE(buf, *tcoord);
+
+    /* Select points */
+    if((ret_value=H5S_select_elements(space,op,num_elem,(const hsize_t **)coord))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't change selection");
+
+done:
+    /* Free the coordinate array if necessary */
+    if(coord!=NULL)
+        H5MM_xfree(coord);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_point_deserialize() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_get_select_elem_pointlist
+ PURPOSE
+    Get the list of element points currently selected
+ USAGE
+    herr_t H5S_get_select_elem_pointlist(space, hsize_t *buf)
+        H5S_t *space;           IN: Dataspace pointer of selection to query
+        hsize_t startpoint;     IN: Element point to start with
+        hsize_t numpoints;      IN: Number of element points to get
+        hsize_t *buf;           OUT: List of element points selected
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+        Puts a list of the element points into the user's buffer.  The points
+    start with the 'startpoint'th block in the list of points and put
+    'numpoints' number of points into the user's buffer (or until the end of
+    the list of points, whichever happen first)
+        The point coordinates have the same dimensionality (rank) as the
+    dataspace they are located within.  The list of points is formatted as
+    follows: <coordinate> followed by the next coordinate, etc. until all the
+    point information in the selection have been put into the user's buffer.
+        The points are returned in the order they will be interated through
+    when a selection is read/written from/to disk.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_get_select_elem_pointlist(H5S_t *space, hsize_t startpoint, hsize_t numpoints, hsize_t *buf)
+{
+    H5S_pnt_node_t *node;       /* Point node */
+    int rank;                  /* Dataspace rank */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_get_select_elem_pointlist);
+
+    assert(space);
+    assert(buf);
+
+    /* Get the dataspace extent rank */
+    rank=space->extent.rank;
+
+    /* Get the head of the point list */
+    node=space->select.sel_info.pnt_lst->head;
+
+    /* Iterate to the first point to return */
+    while(node!=NULL && startpoint>0) {
+        startpoint--;
+        node=node->next;
+      } /* end while */
+
+    /* Iterate through the node, copying each hyperslab's information */
+    while(node!=NULL && numpoints>0) {
+        HDmemcpy(buf,node->pnt,sizeof(hsize_t)*rank);
+        buf+=rank;
+        numpoints--;
+        node=node->next;
+      } /* end while */
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_get_select_elem_pointlist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sget_select_elem_pointlist
+ PURPOSE
+    Get the list of element points currently selected
+ USAGE
+    herr_t H5Sget_select_elem_pointlist(dsid, hsize_t *buf)
+        hid_t dsid;             IN: Dataspace ID of selection to query
+        hsize_t startpoint;     IN: Element point to start with
+        hsize_t numpoints;      IN: Number of element points to get
+        hsize_t *buf;           OUT: List of element points selected
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+        Puts a list of the element points into the user's buffer.  The points
+    start with the 'startpoint'th block in the list of points and put
+    'numpoints' number of points into the user's buffer (or until the end of
+    the list of points, whichever happen first)
+        The point coordinates have the same dimensionality (rank) as the
+    dataspace they are located within.  The list of points is formatted as
+    follows: <coordinate> followed by the next coordinate, etc. until all the
+    point information in the selection have been put into the user's buffer.
+        The points are returned in the order they will be interated through
+    when a selection is read/written from/to disk.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Sget_select_elem_pointlist(hid_t spaceid, hsize_t startpoint, hsize_t numpoints, hsize_t *buf)
+{
+    H5S_t	*space = NULL;      /* Dataspace to modify selection of */
+    herr_t ret_value;        /* return value */
+
+    FUNC_ENTER_API(H5Sget_select_elem_pointlist, FAIL);
+    H5TRACE4("e","ihh*h",spaceid,startpoint,numpoints,buf);
+
+    /* Check args */
+    if(buf==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid pointer");
+    if (NULL == (space=H5I_object_verify(spaceid, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data space");
+    if(H5S_GET_SELECT_TYPE(space)!=H5S_SEL_POINTS)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a point selection");
+
+    ret_value = H5S_get_select_elem_pointlist(space,startpoint,numpoints,buf);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Sget_select_elem_pointlist() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_bounds
+ PURPOSE
+    Gets the bounding box containing the selection.
+ USAGE
+    herr_t H5S_point_bounds(space, start, end)
+        H5S_t *space;           IN: Dataspace pointer of selection to query
+        hsize_t *start;         OUT: Starting coordinate of bounding box
+        hsize_t *end;           OUT: Opposite coordinate of bounding box
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Retrieves the bounding box containing the current selection and places
+    it into the user's buffers.  The start and end buffers must be large
+    enough to hold the dataspace rank number of coordinates.  The bounding box
+    exactly contains the selection, ie. if a 2-D element selection is currently
+    defined with the following points: (4,5), (6,8) (10,7), the bounding box
+    with be (4, 5), (10, 8).
+        The bounding box calculations _does_ include the current offset of the
+    selection within the dataspace extent.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_point_bounds(const H5S_t *space, hsize_t *start, hsize_t *end)
+{
+    H5S_pnt_node_t *node;       /* Point node */
+    int rank;                   /* Dataspace rank */
+    int i;                      /* index variable */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_point_bounds);
+
+    assert(space);
+    assert(start);
+    assert(end);
+
+    /* Get the dataspace extent rank */
+    rank=space->extent.rank;
+
+    /* Set the start and end arrays up */
+    for(i=0; i<rank; i++) {
+        start[i]=HSIZET_MAX;
+        end[i]=0;
+    } /* end for */
+
+    /* Iterate through the node, checking the bounds on each element */
+    node=space->select.sel_info.pnt_lst->head;
+    while(node!=NULL) {
+        for(i=0; i<rank; i++) {
+            /* Check for offset moving selection negative */
+            if(((hssize_t)node->pnt[i]+space->select.offset[i])<0)
+                HGOTO_ERROR(H5E_DATASPACE, H5E_BADRANGE, FAIL, "offset moves selection out of bounds")
+
+            if(start[i]>(node->pnt[i]+space->select.offset[i]))
+                start[i]=node->pnt[i]+space->select.offset[i];
+            if(end[i]<(node->pnt[i]+space->select.offset[i]))
+                end[i]=node->pnt[i]+space->select.offset[i];
+        } /* end for */
+        node=node->next;
+      } /* end while */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_point_bounds() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_is_contiguous
+ PURPOSE
+    Check if a point selection is contiguous within the dataspace extent.
+ USAGE
+    htri_t H5S_point_is_contiguous(space)
+        H5S_t *space;           IN: Dataspace pointer to check
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+    Checks to see if the current selection in the dataspace is contiguous.
+    This is primarily used for reading the entire selection in one swoop.
+    This code currently doesn't properly check for contiguousness when there is
+    more than one point, as that would take a lot of extra coding that we
+    don't need now.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_point_is_contiguous(const H5S_t *space)
+{
+    htri_t ret_value;  /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_point_is_contiguous);
+
+    assert(space);
+
+    /* One point is definitely contiguous */
+    if(space->select.num_elem==1)
+    	ret_value=TRUE;
+    else	/* More than one point might be contiguous, but it's complex to check and we don't need it right now */
+    	ret_value=FALSE;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_point_is_contiguous() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_is_single
+ PURPOSE
+    Check if a point selection is single within the dataspace extent.
+ USAGE
+    htri_t H5S_point_is_single(space)
+        H5S_t *space;           IN: Dataspace pointer to check
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+    Checks to see if the current selection in the dataspace is a single block.
+    This is primarily used for reading the entire selection in one swoop.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_point_is_single(const H5S_t *space)
+{
+    htri_t ret_value;  /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_point_is_single);
+
+    assert(space);
+
+    /* One point is definitely 'single' :-) */
+    if(space->select.num_elem==1)
+    	ret_value=TRUE;
+    else
+    	ret_value=FALSE;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_point_is_single() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_is_regular
+ PURPOSE
+    Check if a point selection is "regular"
+ USAGE
+    htri_t H5S_point_is_regular(space)
+        const H5S_t *space;     IN: Dataspace pointer to check
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+    Checks to see if the current selection in a dataspace is the a regular
+    pattern.
+    This is primarily used for reading the entire selection in one swoop.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    Doesn't check for points selected to be next to one another in a regular
+    pattern yet.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_point_is_regular(const H5S_t *space)
+{
+    htri_t ret_value;  /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_point_is_regular);
+
+    /* Check args */
+    assert(space);
+
+    /* Only simple check for regular points for now... */
+    if(space->select.num_elem==1)
+    	ret_value=TRUE;
+    else
+    	ret_value=FALSE;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_point_is_regular() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sselect_elements
+ PURPOSE
+    Specify a series of elements in the dataspace to select
+ USAGE
+    herr_t H5Sselect_elements(dsid, op, num_elem, coord)
+        hid_t dsid;             IN: Dataspace ID of selection to modify
+        H5S_seloper_t op;       IN: Operation to perform on current selection
+        size_t num_elem;        IN: Number of elements in COORD array.
+        const hsize_t **coord; IN: The location of each element selected
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    This function selects array elements to be included in the selection for
+    the dataspace.  The COORD array is a 2-D array of size <dataspace rank>
+    by NUM_ELEM (ie. a list of coordinates in the dataspace).  The order of
+    the element coordinates in the COORD array specifies the order that the
+    array elements are iterated through when I/O is performed.  Duplicate
+    coordinates are not checked for.  The selection operator, OP, determines
+    how the new selection is to be combined with the existing selection for
+    the dataspace.  Currently, only H5S_SELECT_SET is supported, which replaces
+    the existing selection with the one defined in this call.  When operators
+    other than H5S_SELECT_SET are used to combine a new selection with an
+    existing selection, the selection ordering is reset to 'C' array ordering.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Sselect_elements(hid_t spaceid, H5S_seloper_t op, size_t num_elem,
+    const hsize_t **coord)
+{
+    H5S_t	*space = NULL;  /* Dataspace to modify selection of */
+    herr_t ret_value;  /* return value */
+
+    FUNC_ENTER_API(H5Sselect_elements, FAIL);
+    H5TRACE4("e","iSsz**h",spaceid,op,num_elem,coord);
+
+    /* Check args */
+    if (NULL == (space=H5I_object_verify(spaceid, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace");
+    if (H5S_SCALAR==H5S_GET_EXTENT_TYPE(space))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "point doesn't support H5S_SCALAR space");
+    if(coord==NULL || num_elem==0)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "elements not specified");
+    if(!(op==H5S_SELECT_SET || op==H5S_SELECT_APPEND || op==H5S_SELECT_PREPEND))
+        HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "unsupported operation attempted");
+
+    /* Call the real element selection routine */
+    if((ret_value=H5S_select_elements(space,op,num_elem,coord))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTDELETE, FAIL, "can't select elements");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Sselect_elements() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_point_get_seq_list
+ PURPOSE
+    Create a list of offsets & lengths for a selection
+ USAGE
+    herr_t H5S_point_get_seq_list(space,flags,iter,maxseq,maxelem,nseq,nelem,off,len)
+        H5S_t *space;           IN: Dataspace containing selection to use.
+        unsigned flags;         IN: Flags for extra information about operation
+        H5S_sel_iter_t *iter;   IN/OUT: Selection iterator describing last
+                                    position of interest in selection.
+        size_t maxseq;          IN: Maximum number of sequences to generate
+        size_t maxelem;         IN: Maximum number of elements to include in the
+                                    generated sequences
+        size_t *nseq;           OUT: Actual number of sequences generated
+        size_t *nelem;          OUT: Actual number of elements in sequences generated
+        hsize_t *off;           OUT: Array of offsets
+        size_t *len;            OUT: Array of lengths
+ RETURNS
+    Non-negative on success/Negative on failure.
+ DESCRIPTION
+    Use the selection in the dataspace to generate a list of byte offsets and
+    lengths for the region(s) selected.  Start/Restart from the position in the
+    ITER parameter.  The number of sequences generated is limited by the MAXSEQ
+    parameter and the number of sequences actually generated is stored in the
+    NSEQ parameter.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_point_get_seq_list(const H5S_t *space, unsigned flags, H5S_sel_iter_t *iter,
+    size_t maxseq, size_t maxelem, size_t *nseq, size_t *nelem,
+    hsize_t *off, size_t *len)
+{
+    size_t io_left;             /* The number of bytes left in the selection */
+    size_t start_io_left;       /* The initial number of bytes left in the selection */
+    H5S_pnt_node_t *node;       /* Point node */
+    hsize_t dims[H5O_LAYOUT_NDIMS];     /* Total size of memory buf */
+    int	ndims;                  /* Dimensionality of space*/
+    hsize_t	acc;            /* Coordinate accumulator */
+    hsize_t	loc;            /* Coordinate offset */
+    size_t      curr_seq;       /* Current sequence being operated on */
+    int         i;              /* Local index variable */
+    herr_t ret_value=SUCCEED;      /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5S_point_get_seq_list);
+
+    /* Check args */
+    assert(space);
+    assert(iter);
+    assert(maxseq>0);
+    assert(maxelem>0);
+    assert(nseq);
+    assert(nelem);
+    assert(off);
+    assert(len);
+
+    /* Choose the minimum number of bytes to sequence through */
+    H5_CHECK_OVERFLOW(iter->elmt_left,hsize_t,size_t);
+    start_io_left=io_left=(size_t)MIN(iter->elmt_left,maxelem);
+
+    /* Get the dataspace dimensions */
+    if ((ndims=H5S_get_simple_extent_dims (space, dims, NULL))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to retrieve data space dimensions");
+
+    /* Walk through the points in the selection, starting at the current */
+    /*  location in the iterator */
+    node=iter->u.pnt.curr;
+    curr_seq=0;
+    while(node!=NULL) {
+        /* Compute the offset of each selected point in the buffer */
+        for(i=ndims-1,acc=iter->elmt_size,loc=0; i>=0; i--) {
+            loc+=(node->pnt[i]+space->select.offset[i])*acc;
+            acc*=dims[i];
+        } /* end for */
+
+        /* Check if this is a later point in the selection */
+        if(curr_seq>0) {
+            /* If a sorted sequence is requested, make certain we don't go backwards in the offset */
+            if((flags&H5S_GET_SEQ_LIST_SORTED) && loc<off[curr_seq-1])
+                break;
+
+            /* Check if this point extends the previous sequence */
+            /* (Unlikely, but possible) */
+            if(loc==(off[curr_seq-1]+len[curr_seq-1])) {
+                /* Extend the previous sequence */
+                len[curr_seq-1]+=iter->elmt_size;
+            } /* end if */
+            else {
+                /* Add a new sequence */
+                off[curr_seq]=loc;
+                len[curr_seq]=iter->elmt_size;
+
+                /* Increment sequence count */
+                curr_seq++;
+            } /* end else */
+        } /* end if */
+        else {
+            /* Add a new sequence */
+            off[curr_seq]=loc;
+            len[curr_seq]=iter->elmt_size;
+
+            /* Increment sequence count */
+            curr_seq++;
+        } /* end else */
+
+        /* Decrement number of elements left to process */
+        io_left--;
+
+        /* Move the iterator */
+        iter->u.pnt.curr=node->next;
+        iter->elmt_left--;
+
+        /* Check if we're finished with all sequences */
+        if(curr_seq==maxseq)
+            break;
+
+        /* Check if we're finished with all the elements available */
+        if(io_left==0)
+            break;
+
+        /* Advance to the next point */
+        node=node->next;
+      } /* end while */
+
+    /* Set the number of sequences generated */
+    *nseq=curr_seq;
+
+    /* Set the number of elements used */
+    *nelem=start_io_left-io_left;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5S_point_get_seq_list() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Sprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Sprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Sprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,296 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains private information about the H5S module
+ */
+#ifndef _H5Sprivate_H
+#define _H5Sprivate_H
+
+#include "H5Spublic.h"
+
+/* Private headers needed by this file */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dprivate.h"		/* Dataset functions			*/
+#include "H5Fprivate.h"		/* Files				*/
+#include "H5Gprivate.h"		/* Groups				*/
+#include "H5Oprivate.h"		/* Object headers		  	*/
+#include "H5Pprivate.h"		/* Property lists			*/
+
+/* Flags for H5S_find */
+#define H5S_CONV_PAR_IO_POSSIBLE        0x0001
+/* The storage options are mutually exclusive */
+/* (2-bits reserved for storage type currently) */
+#define H5S_CONV_STORAGE_COMPACT        0x0000  /* i.e. '0' */
+#define H5S_CONV_STORAGE_CONTIGUOUS     0x0002  /* i.e. '1' */
+#define H5S_CONV_STORAGE_CHUNKED        0x0004  /* i.e. '2' */
+#define H5S_CONV_STORAGE_MASK           0x0006
+
+/* Flags for "get_seq_list" methods */
+#define H5S_GET_SEQ_LIST_SORTED         0x0001
+
+/* Forward references of package typedefs */
+typedef struct H5S_t H5S_t;
+typedef struct H5S_pnt_node_t H5S_pnt_node_t;
+typedef struct H5S_hyper_span_t H5S_hyper_span_t;
+typedef struct H5S_hyper_span_info_t H5S_hyper_span_info_t;
+
+/* Information about one dimension in a hyperslab selection */
+typedef struct H5S_hyper_dim_t {
+    hsize_t start;
+    hsize_t  stride;
+    hsize_t  count;
+    hsize_t  block;
+} H5S_hyper_dim_t;
+
+/* Point selection iteration container */
+typedef struct {
+    H5S_pnt_node_t *curr;   /* Pointer to next node to output */
+} H5S_point_iter_t;
+
+/* Hyperslab selection iteration container */
+typedef struct {
+    /* Common fields for all hyperslab selections */
+    hsize_t off[H5S_MAX_RANK];          /* Offset in span node (used as position for regular hyperslabs) */
+    unsigned iter_rank;     /* Rank of iterator information */
+                            /* (This should always be the same as the dataspace
+                             * rank, except for regular hyperslab selections in
+                             * which there are contiguous regions in the lower
+                             * dimensions which have been "flattened" out
+                             */
+    hbool_t diminfo_valid;         /* Whether the dimension information is valid */
+
+    /* "Flattened" regular hyperslab selection fields */
+    H5S_hyper_dim_t diminfo[H5S_MAX_RANK];   /* "Flattened" regular selection information */
+    hsize_t size[H5S_MAX_RANK];          /* "Flattened" dataspace extent information */
+    hssize_t sel_off[H5S_MAX_RANK];      /* "Flattened" selection offset information */
+
+    /* Irregular hyperslab selection fields */
+    H5S_hyper_span_info_t *spans;  /* Pointer to copy of the span tree */
+    H5S_hyper_span_t *span[H5S_MAX_RANK];/* Array of pointers to span nodes */
+} H5S_hyper_iter_t;
+
+/* "All" selection iteration container */
+typedef struct {
+    hsize_t elmt_offset;         /* Next element to output */
+    hsize_t byte_offset;         /* Next byte to output */
+} H5S_all_iter_t;
+
+/* Forward declaration of selection iteration class */
+struct H5S_sel_iter_class_t;
+
+/* Selection iteration container */
+typedef struct H5S_sel_iter_t {
+    /* Selection class */
+    const struct H5S_sel_iter_class_t *type; /* Selection iteration class info */
+
+    /* Information common to all iterators */
+    unsigned rank;              /* Rank of dataspace the selection iterator is operating on */
+    hsize_t *dims;              /* Dimensions of dataspace the selection is operating on */
+    hsize_t elmt_left;          /* Number of elements left to iterate over */
+    size_t elmt_size;           /* Size of elements to iterate over */
+
+    /* Information specific to each type of iterator */
+    union {
+        H5S_point_iter_t pnt;   /* Point selection iteration information */
+        H5S_hyper_iter_t hyp;   /* New Hyperslab selection iteration information */
+        H5S_all_iter_t all;     /* "All" selection iteration information */
+    } u;
+} H5S_sel_iter_t;
+
+#ifdef H5S_DEBUG
+typedef struct H5S_iostats_t {
+    H5S_sel_type	ftype;
+    H5S_sel_type	mtype;
+
+    struct {
+	H5_timer_t	scat_timer;		/*time spent scattering	*/
+	hsize_t		scat_nbytes;		/*scatter throughput	*/
+	hsize_t		scat_ncalls;		/*number of calls	*/
+	H5_timer_t	gath_timer;		/*time spent gathering	*/
+	hsize_t		gath_nbytes;		/*gather throughput	*/
+	hsize_t		gath_ncalls;		/*number of calls	*/
+	H5_timer_t	bkg_timer;		/*time for background	*/
+	hsize_t		bkg_nbytes;		/*background throughput	*/
+	hsize_t		bkg_ncalls;		/*number of calls	*/
+	H5_timer_t	read_timer;		/*time for read calls	*/
+	hsize_t		read_nbytes;		/*total bytes read	*/
+	hsize_t		read_ncalls;		/*number of calls	*/
+	H5_timer_t	write_timer;		/*time for write calls	*/
+	hsize_t		write_nbytes;		/*total bytes written	*/
+	hsize_t		write_ncalls;		/*number of calls	*/
+    } stats[2];		/* 0=output, 1=input */
+} H5S_iostats_t;
+#endif
+
+/* If the module using this macro is allowed access to the private variables, access them directly */
+#ifdef H5S_PACKAGE
+#define H5S_GET_EXTENT_TYPE(S)          ((S)->extent.type)
+#define H5S_GET_EXTENT_NDIMS(S)         ((S)->extent.rank)
+#define H5S_GET_EXTENT_NPOINTS(S)       ((S)->extent.nelem)
+#define H5S_GET_SELECT_NPOINTS(S)       ((S)->select.num_elem)
+#define H5S_GET_SELECT_TYPE(S)          ((S)->select.type->type)
+#define H5S_SELECT_GET_SEQ_LIST(S,FLAGS,ITER,MAXSEQ,MAXBYTES,NSEQ,NBYTES,OFF,LEN)             ((*(S)->select.type->get_seq_list)(S,FLAGS,ITER,MAXSEQ,MAXBYTES,NSEQ,NBYTES,OFF,LEN))
+#define H5S_SELECT_VALID(S)             ((*(S)->select.type->is_valid)(S))
+#define H5S_SELECT_RELEASE(S)           ((*(S)->select.type->release)(S))
+#define H5S_SELECT_SERIAL_SIZE(S)       ((*(S)->select.type->serial_size)(S))
+#define H5S_SELECT_SERIALIZE(S,BUF)     ((*(S)->select.type->serialize)(S,BUF))
+#define H5S_SELECT_BOUNDS(S,START,END)  ((*(S)->select.type->bounds)(S,START,END))
+#define H5S_SELECT_IS_CONTIGUOUS(S)     ((*(S)->select.type->is_contiguous)(S))
+#define H5S_SELECT_IS_SINGLE(S)         ((*(S)->select.type->is_single)(S))
+#define H5S_SELECT_IS_REGULAR(S)        ((*(S)->select.type->is_regular)(S))
+#define H5S_SELECT_ITER_COORDS(ITER,COORDS)     ((*(ITER)->type->iter_coords)(ITER,COORDS))
+#define H5S_SELECT_ITER_BLOCK(ITER,START,END)   ((*(ITER)->type->iter_block)(ITER,START,END))
+#define H5S_SELECT_ITER_NELMTS(ITER)    ((*(ITER)->type->iter_nelmts)(ITER))
+#define H5S_SELECT_ITER_HAS_NEXT_BLOCK(ITER)    ((*(ITER)->type->iter_has_next_block)(ITER))
+#define H5S_SELECT_ITER_NEXT(ITER,NELEM)((*(ITER)->type->iter_next)(ITER,NELEM))
+#define H5S_SELECT_ITER_NEXT_BLOCK(ITER)        ((*(ITER)->type->iter_next_block)(ITER))
+#define H5S_SELECT_ITER_RELEASE(ITER)   ((*(ITER)->type->iter_release)(ITER))
+#else /* H5S_PACKAGE */
+#define H5S_GET_EXTENT_TYPE(S)          (H5S_get_simple_extent_type(S))
+#define H5S_GET_EXTENT_NDIMS(S)         (H5S_get_simple_extent_ndims(S))
+#define H5S_GET_EXTENT_NPOINTS(S)       (H5S_get_simple_extent_npoints(S))
+#define H5S_GET_SELECT_NPOINTS(S)       (H5S_get_select_npoints(S))
+#define H5S_GET_SELECT_TYPE(S)          (H5S_get_select_type(S))
+#define H5S_SELECT_GET_SEQ_LIST(S,FLAGS,ITER,MAXSEQ,MAXBYTES,NSEQ,NBYTES,OFF,LEN)       (H5S_select_get_seq_list(S,FLAGS,ITER,MAXSEQ,MAXBYTES,NSEQ,NBYTES,OFF,LEN))
+#define H5S_SELECT_VALID(S)             (H5S_select_valid(S))
+#define H5S_SELECT_RELEASE(S)           (H5S_select_release(S))
+#define H5S_SELECT_SERIAL_SIZE(S)       (H5S_select_serial_size(S))
+#define H5S_SELECT_SERIALIZE(S,BUF)     (H5S_select_serialize(S,BUF))
+#define H5S_SELECT_BOUNDS(S,START,END)  (H5S_get_select_bounds(S,START,END))
+#define H5S_SELECT_IS_CONTIGUOUS(S)     (H5S_select_is_contiguous(S))
+#define H5S_SELECT_IS_SINGLE(S)         (H5S_select_is_single(S))
+#define H5S_SELECT_IS_REGULAR(S)        (H5S_select_is_regular(S))
+#define H5S_SELECT_ITER_COORDS(ITER,COORDS)     (H5S_select_iter_coords(ITER,COORDS))
+#define H5S_SELECT_ITER_BLOCK(ITER,START,END)   (H5S_select_iter_block(ITER,START,END))
+#define H5S_SELECT_ITER_NELMTS(ITER)    (H5S_select_iter_nelmts(ITER))
+#define H5S_SELECT_ITER_HAS_NEXT_BLOCK(ITER)    (H5S_select_iter_has_next_block(ITER))
+#define H5S_SELECT_ITER_NEXT(ITER,NELEM)(H5S_select_iter_next(ITER,NELEM))
+#define H5S_SELECT_ITER_NEXT_BLOCK(ITER)        (H5S_select_iter_next_block(ITER))
+#define H5S_SELECT_ITER_RELEASE(ITER)   (H5S_select_iter_release(ITER))
+#endif /* H5S_PACKAGE */
+/* Handle these two callbacks in a special way, since they have prologs that need to be executed */
+#define H5S_SELECT_COPY(DST,SRC,SHARE)  (H5S_select_copy(DST,SRC,SHARE))
+#define H5S_SELECT_DESERIALIZE(S,BUF)   (H5S_select_deserialize(S,BUF))
+
+
+/* Operations on dataspaces */
+H5_DLL H5S_t *H5S_copy(const H5S_t *src, hbool_t share_selection);
+H5_DLL herr_t H5S_close(H5S_t *ds);
+#ifdef H5S_DEBUG
+H5_DLL H5S_iostats_t *H5S_find(const H5S_t *mem_space, const H5S_t *file_space);
+#endif /* H5S_DEBUG */
+H5_DLL H5S_class_t H5S_get_simple_extent_type(const H5S_t *ds);
+H5_DLL hssize_t H5S_get_simple_extent_npoints(const H5S_t *ds);
+H5_DLL hsize_t H5S_get_npoints_max(const H5S_t *ds);
+H5_DLL hbool_t H5S_has_extent(const H5S_t *ds);
+H5_DLL int H5S_get_simple_extent_ndims(const H5S_t *ds);
+H5_DLL int H5S_get_simple_extent_dims(const H5S_t *ds, hsize_t dims[]/*out*/,
+					hsize_t max_dims[]/*out*/);
+H5_DLL herr_t H5S_modify(struct H5G_entry_t *ent, const H5S_t *space,
+        hbool_t update_time, hid_t dxpl_id);
+H5_DLL herr_t H5S_append(H5F_t *f, hid_t dxpl_id, struct H5O_t *oh, const H5S_t *ds);
+H5_DLL size_t H5S_raw_size(const H5F_t *f, const H5S_t *space);
+H5_DLL H5S_t *H5S_read(const struct H5G_entry_t *ent, hid_t dxpl_id);
+H5_DLL int H5S_extend(H5S_t *space, const hsize_t *size);
+H5_DLL int H5S_set_extent(H5S_t *space, const hsize_t *size);
+H5_DLL herr_t H5S_set_extent_real(H5S_t *space, const hsize_t *size);
+H5_DLL H5S_t *H5S_create_simple(unsigned rank, const hsize_t dims[/*rank*/],
+		  const hsize_t maxdims[/*rank*/]);
+H5_DLL herr_t H5S_debug(H5F_t *f, hid_t dxpl_id, const void *_mesg, FILE *stream,
+			 int indent, int fwidth);
+
+/* Operations on selections */
+H5_DLL herr_t H5S_select_deserialize(H5S_t *space, const uint8_t *buf);
+H5_DLL H5S_sel_type H5S_get_select_type(const H5S_t *space);
+H5_DLL herr_t H5S_select_iterate(void *buf, hid_t type_id, const H5S_t *space,
+				H5D_operator_t op, void *operator_data);
+H5_DLL herr_t H5S_select_fill(void *fill, size_t fill_size,
+                                const H5S_t *space, void *buf);
+H5_DLL htri_t H5S_select_valid(const H5S_t *space);
+H5_DLL hssize_t H5S_get_select_npoints(const H5S_t *space);
+H5_DLL herr_t H5S_get_select_bounds(const H5S_t *space, hsize_t *start, hsize_t *end);
+H5_DLL herr_t H5S_select_offset(H5S_t *space, const hssize_t *offset);
+H5_DLL herr_t H5S_select_copy(H5S_t *dst, const H5S_t *src, hbool_t share_selection);
+H5_DLL htri_t H5S_select_shape_same(const H5S_t *space1, const H5S_t *space2);
+H5_DLL herr_t H5S_select_release(H5S_t *ds);
+H5_DLL herr_t H5S_select_get_seq_list(const H5S_t *space, unsigned flags,
+    H5S_sel_iter_t *iter, size_t maxseq, size_t maxbytes,
+    size_t *nseq, size_t *nbytes, hsize_t *off, size_t *len);
+H5_DLL hssize_t H5S_select_serial_size(const H5S_t *space);
+H5_DLL herr_t H5S_select_serialize(const H5S_t *space, uint8_t *buf);
+H5_DLL htri_t H5S_select_is_contiguous(const H5S_t *space);
+H5_DLL htri_t H5S_select_is_single(const H5S_t *space);
+H5_DLL htri_t H5S_select_is_regular(const H5S_t *space);
+
+/* Operations on all selections */
+H5_DLL herr_t H5S_select_all(H5S_t *space, unsigned rel_prev);
+
+/* Operations on none selections */
+H5_DLL herr_t H5S_select_none(H5S_t *space);
+
+/* Operations on point selections */
+H5_DLL herr_t H5S_select_elements (H5S_t *space, H5S_seloper_t op,
+    size_t num_elem, const hsize_t **coord);
+
+/* Operations on hyperslab selections */
+H5_DLL herr_t H5S_select_hyperslab (H5S_t *space, H5S_seloper_t op, const hsize_t start[],
+    const hsize_t *stride, const hsize_t count[], const hsize_t *block);
+H5_DLL herr_t H5S_hyper_add_span_element(H5S_t *space, unsigned rank,
+    hsize_t *coords);
+H5_DLL herr_t H5S_hyper_reset_scratch(H5S_t *space);
+H5_DLL herr_t H5S_hyper_convert(H5S_t *space);
+#ifdef LATER
+H5_DLL htri_t H5S_hyper_intersect (H5S_t *space1, H5S_t *space2);
+#endif /* LATER */
+H5_DLL htri_t H5S_hyper_intersect_block (H5S_t *space, hsize_t *start, hsize_t *end);
+H5_DLL herr_t H5S_hyper_adjust_u(H5S_t *space, const hsize_t *offset);
+H5_DLL herr_t H5S_hyper_adjust_s(H5S_t *space, const hssize_t *offset);
+H5_DLL herr_t H5S_hyper_move(H5S_t *space, const hssize_t *offset);
+H5_DLL herr_t H5S_hyper_normalize_offset(H5S_t *space, hssize_t *old_offset);
+H5_DLL herr_t H5S_hyper_denormalize_offset(H5S_t *space, const hssize_t *old_offset);
+
+/* Operations on selection iterators */
+H5_DLL herr_t H5S_select_iter_init(H5S_sel_iter_t *iter, const H5S_t *space, size_t elmt_size);
+H5_DLL herr_t H5S_select_iter_coords(const H5S_sel_iter_t *sel_iter, hsize_t *coords);
+H5_DLL hsize_t H5S_select_iter_nelmts(const H5S_sel_iter_t *sel_iter);
+H5_DLL herr_t H5S_select_iter_next(H5S_sel_iter_t *sel_iter, size_t nelem);
+H5_DLL herr_t H5S_select_iter_release(H5S_sel_iter_t *sel_iter);
+
+#ifdef H5_HAVE_PARALLEL
+#ifndef _H5S_IN_H5S_C
+/* Global vars whose value comes from environment variable */
+/* (Defined in H5S.c) */
+H5_DLLVAR hbool_t		H5S_mpi_opt_types_g;
+#endif /* _H5S_IN_H5S_C */
+
+H5_DLL herr_t
+H5S_mpio_space_type( const H5S_t *space, size_t elmt_size,
+     /* out: */
+     MPI_Datatype *new_type,
+     size_t *count,
+     hsize_t *extra_offset,
+     hbool_t *is_derived_type );
+
+H5_DLL herr_t
+H5S_mpio_space_span_type( const H5S_t *space, size_t elmt_size,
+     /* out: */
+     MPI_Datatype *new_type,
+     size_t *count,
+     hsize_t *extra_offset,
+     hbool_t *is_derived_type );
+
+#endif /* H5_HAVE_PARALLEL */
+
+#endif /* _H5Sprivate_H */

Added: packages/hdf5/branches/upstream/current/src/H5Spublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Spublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Spublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,134 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains public declarations for the H5S module.
+ */
+#ifndef _H5Spublic_H
+#define _H5Spublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Ipublic.h"
+
+/* Define atomic datatypes */
+#define H5S_ALL         0
+#define H5S_UNLIMITED	((hsize_t)(hssize_t)(-1))
+
+/* Define user-level maximum number of dimensions */
+#define H5S_MAX_RANK    32
+
+/* Different types of dataspaces */
+typedef enum H5S_class_t {
+    H5S_NO_CLASS         = -1,  /*error                                      */
+    H5S_SCALAR           = 0,   /*scalar variable                            */
+    H5S_SIMPLE           = 1,   /*simple data space                          */
+    H5S_COMPLEX          = 2    /*complex data space                         */
+} H5S_class_t;
+
+/* Different ways of combining selections */
+typedef enum H5S_seloper_t {
+    H5S_SELECT_NOOP      = -1,  /* error                                     */
+    H5S_SELECT_SET       = 0,   /* Select "set" operation 		     */
+    H5S_SELECT_OR,              /* Binary "or" operation for hyperslabs
+                                 * (add new selection to existing selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * A or B:           CCCCCCCCCCCCCCCC
+                                 */
+    H5S_SELECT_AND,             /* Binary "and" operation for hyperslabs
+                                 * (only leave overlapped regions in selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * A and B:                CCCC
+                                 */
+    H5S_SELECT_XOR,             /* Binary "xor" operation for hyperslabs
+                                 * (only leave non-overlapped regions in selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * A xor B:          CCCCCC    CCCCCC
+                                 */
+    H5S_SELECT_NOTB,            /* Binary "not" operation for hyperslabs
+                                 * (only leave non-overlapped regions in original selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * A not B:          CCCCCC
+                                 */
+    H5S_SELECT_NOTA,            /* Binary "not" operation for hyperslabs
+                                 * (only leave non-overlapped regions in new selection)
+                                 * Original region:  AAAAAAAAAA
+                                 * New region:             BBBBBBBBBB
+                                 * B not A:                    CCCCCC
+                                 */
+    H5S_SELECT_APPEND,          /* Append elements to end of point selection */
+    H5S_SELECT_PREPEND,         /* Prepend elements to beginning of point selection */
+    H5S_SELECT_INVALID          /* Invalid upper bound on selection operations */
+} H5S_seloper_t;
+
+/* Enumerated type for the type of selection */
+typedef enum {
+    H5S_SEL_ERROR	= -1, 	/* Error			*/
+    H5S_SEL_NONE	= 0,    /* Nothing selected 		*/
+    H5S_SEL_POINTS	= 1,    /* Sequence of points selected	*/
+    H5S_SEL_HYPERSLABS  = 2,    /* "New-style" hyperslab selection defined	*/
+    H5S_SEL_ALL		= 3,    /* Entire extent selected	*/
+    H5S_SEL_N		= 4	/*THIS MUST BE LAST		*/
+}H5S_sel_type;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Functions in H5S.c */
+H5_DLL hid_t H5Screate(H5S_class_t type);
+H5_DLL hid_t H5Screate_simple(int rank, const hsize_t dims[],
+			       const hsize_t maxdims[]);
+H5_DLL herr_t H5Sset_extent_simple(hid_t space_id, int rank,
+				    const hsize_t dims[],
+				    const hsize_t max[]);
+H5_DLL hid_t H5Scopy(hid_t space_id);
+H5_DLL herr_t H5Sclose(hid_t space_id);
+H5_DLL hssize_t H5Sget_simple_extent_npoints(hid_t space_id);
+H5_DLL int H5Sget_simple_extent_ndims(hid_t space_id);
+H5_DLL int H5Sget_simple_extent_dims(hid_t space_id, hsize_t dims[],
+				      hsize_t maxdims[]);
+H5_DLL htri_t H5Sis_simple(hid_t space_id);
+H5_DLL herr_t H5Sset_space(hid_t space_id, int rank, const hsize_t *dims);
+H5_DLL hssize_t H5Sget_select_npoints(hid_t spaceid);
+H5_DLL herr_t H5Sselect_hyperslab(hid_t space_id, H5S_seloper_t op,
+				   const hsize_t start[],
+				   const hsize_t _stride[],
+				   const hsize_t count[],
+				   const hsize_t _block[]);
+H5_DLL herr_t H5Sselect_elements(hid_t space_id, H5S_seloper_t op,
+				  size_t num_elemn,
+				  const hsize_t **coord);
+H5_DLL H5S_class_t H5Sget_simple_extent_type(hid_t space_id);
+H5_DLL herr_t H5Sset_extent_none(hid_t space_id);
+H5_DLL herr_t H5Sextent_copy(hid_t dst_id,hid_t src_id);
+H5_DLL herr_t H5Sselect_all(hid_t spaceid);
+H5_DLL herr_t H5Sselect_none(hid_t spaceid);
+H5_DLL herr_t H5Soffset_simple(hid_t space_id, const hssize_t *offset);
+H5_DLL htri_t H5Sselect_valid(hid_t spaceid);
+H5_DLL hssize_t H5Sget_select_hyper_nblocks(hid_t spaceid);
+H5_DLL hssize_t H5Sget_select_elem_npoints(hid_t spaceid);
+H5_DLL herr_t H5Sget_select_hyper_blocklist(hid_t spaceid, hsize_t startblock, hsize_t numblocks, hsize_t *buf);
+H5_DLL herr_t H5Sget_select_elem_pointlist(hid_t spaceid, hsize_t startpoint, hsize_t numpoints, hsize_t *buf);
+H5_DLL herr_t H5Sget_select_bounds(hid_t spaceid, hsize_t *start, hsize_t *end);
+H5_DLL H5S_sel_type H5Sget_select_type(hid_t spaceid);
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Sselect.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Sselect.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Sselect.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1506 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Quincey Koziol <koziol at ncsa.uiuc.ued>
+ *              Friday, May 29, 1998
+ *
+ * Purpose:	Dataspace selection functions.
+ */
+
+#define H5S_PACKAGE		/*suppress error about including H5Spkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Spkg.h"		/* Dataspaces 				*/
+#include "H5Vprivate.h"		/* Vector and array functions		*/
+
+/* Local functions */
+#ifdef LATER
+static herr_t H5S_select_iter_block (const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end);
+static htri_t H5S_select_iter_has_next_block (const H5S_sel_iter_t *iter);
+static herr_t H5S_select_iter_next_block(H5S_sel_iter_t *iter);
+#endif /* LATER */
+
+/* Declare a free list to manage blocks of single datatype element data */
+H5FL_BLK_EXTERN(type_elem);
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_offset
+ PURPOSE
+    Set the selection offset for a datapace
+ USAGE
+    herr_t H5S_select_offset(space, offset)
+        H5S_t *space;	        IN/OUT: Dataspace object to set selection offset
+        const hssize_t *offset; IN: Offset to position the selection at
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Sets the selection offset for the dataspace
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    Only works for simple dataspaces currently
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_select_offset(H5S_t *space, const hssize_t *offset)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_select_offset);
+
+    /* Check args */
+    assert(space);
+    assert(space->extent.rank);
+    assert(offset);
+
+    /* Copy the offset over */
+    HDmemcpy(space->select.offset,offset,sizeof(hssize_t)*space->extent.rank);
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}   /* H5S_select_offset() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_copy
+ PURPOSE
+    Copy a selection from one dataspace to another
+ USAGE
+    herr_t H5S_select_copy(dst, src)
+        H5S_t *dst;  OUT: Pointer to the destination dataspace
+        H5S_t *src;  IN: Pointer to the source dataspace
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Copies all the selection information (include offset) from the source
+    dataspace to the destination dataspace.
+
+    If the SHARE_SELECTION flag is set, then the selection can be shared
+    between the source and destination dataspaces.  (This should only occur in
+    situations where the destination dataspace will immediately change to a new
+    selection)
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_select_copy (H5S_t *dst, const H5S_t *src, hbool_t share_selection)
+{
+    herr_t ret_value;     /* return value */
+
+    FUNC_ENTER_NOAPI(H5S_select_copy, FAIL);
+
+    /* Check args */
+    assert(dst);
+    assert(src);
+
+    /* Copy regular fields */
+    dst->select=src->select;
+
+    /* Perform correct type of copy based on the type of selection */
+    if((ret_value=(*src->select.type->copy)(dst,src,share_selection))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOPY, FAIL, "can't copy selection specific information");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_copy() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_select_release
+ *
+ * Purpose:	Releases all memory associated with a dataspace selection.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Friday, May 30, 2003
+ *
+ * Note: This routine participates in the "Inlining C function pointers"
+ *      pattern, don't call it directly, use the appropriate macro
+ *      defined in H5Sprivate.h.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_select_release(H5S_t *ds)
+{
+    herr_t ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_select_release);
+
+    assert(ds);
+
+    /* Call the selection type's release function */
+    ret_value=(*ds->select.type->release)(ds);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5S_select_release() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_select_get_seq_list
+ *
+ * Purpose:	Retrieves the next sequence of offset/length pairs for an
+ *              iterator on a dataspace
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Tuesday, May 18, 2004
+ *
+ * Note: This routine participates in the "Inlining C function pointers"
+ *      pattern, don't call it directly, use the appropriate macro
+ *      defined in H5Sprivate.h.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5S_select_get_seq_list(const H5S_t *space, unsigned flags,
+    H5S_sel_iter_t *iter, size_t maxseq, size_t maxbytes,
+    size_t *nseq, size_t *nbytes, hsize_t *off, size_t *len)
+{
+    herr_t ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_select_get_seq_list);
+
+    assert(space);
+
+    /* Call the selection type's get_seq_list function */
+    ret_value=(*space->select.type->get_seq_list)(space,flags,iter,maxseq,maxbytes,nseq,nbytes,off,len);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5S_select_get_seq_list() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5S_select_serial_size
+ *
+ * Purpose:	Determines the number of bytes required to store the current
+ *              selection
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Tuesday, May 18, 2004
+ *
+ * Note: This routine participates in the "Inlining C function pointers"
+ *      pattern, don't call it directly, use the appropriate macro
+ *      defined in H5Sprivate.h.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hssize_t
+H5S_select_serial_size(const H5S_t *space)
+{
+    hssize_t ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_select_serial_size);
+
+    assert(space);
+
+    /* Call the selection type's serial_size function */
+    ret_value=(*space->select.type->serial_size)(space);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5S_select_serial_size() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_serialize
+ PURPOSE
+    Serialize the selection for a dataspace into a buffer
+ USAGE
+    herr_t H5S_select_serialize(space, buf)
+        const H5S_t *space;     IN: Dataspace with selection to serialize
+        uint8_t *buf;           OUT: Buffer to put serialized selection
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Calls the appropriate dataspace selection callback to serialize the
+    current selection into a buffer.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_select_serialize(const H5S_t *space, uint8_t *buf)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_select_serialize);
+
+    assert(space);
+    assert(buf);
+
+    /* Call the selection type's serialize function */
+    ret_value=(*space->select.type->serialize)(space,buf);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5S_select_serialize() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sget_select_npoints
+ PURPOSE
+    Get the number of elements in current selection
+ USAGE
+    hssize_t H5Sget_select_npoints(dsid)
+        hid_t dsid;             IN: Dataspace ID of selection to query
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Returns the number of elements in current selection for dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hssize_t
+H5Sget_select_npoints(hid_t spaceid)
+{
+    H5S_t	*space = NULL;      /* Dataspace to modify selection of */
+    hssize_t ret_value;         /* return value */
+
+    FUNC_ENTER_API(H5Sget_select_npoints, FAIL);
+    H5TRACE1("Hs","i",spaceid);
+
+    /* Check args */
+    if (NULL == (space=H5I_object_verify(spaceid, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace");
+
+    ret_value = H5S_GET_SELECT_NPOINTS(space);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Sget_select_npoints() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_get_select_npoints
+ PURPOSE
+    Get the number of elements in current selection
+ USAGE
+    hssize_t H5Sget_select_npoints(space)
+        H5S_t *space;             IN: Dataspace of selection to query
+ RETURNS
+    The number of elements in selection on success, 0 on failure
+ DESCRIPTION
+    Returns the number of elements in current selection for dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+     This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hssize_t
+H5S_get_select_npoints(const H5S_t *space)
+{
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_get_select_npoints);
+
+    /* Check args */
+    assert(space);
+
+    FUNC_LEAVE_NOAPI(space->select.num_elem);
+}   /* H5S_get_select_npoints() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sselect_valid
+ PURPOSE
+    Check whether the selection fits within the extent, with the current
+    offset defined.
+ USAGE
+    htri_t H5Sselect_void(dsid)
+        hid_t dsid;             IN: Dataspace ID to query
+ RETURNS
+    TRUE if the selection fits within the extent, FALSE if it does not and
+        Negative on an error.
+ DESCRIPTION
+    Determines if the current selection at the current offet fits within the
+    extent for the dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5Sselect_valid(hid_t spaceid)
+{
+    H5S_t	*space = NULL;      /* Dataspace to modify selection of */
+    htri_t ret_value;     /* return value */
+
+    FUNC_ENTER_API(H5Sselect_valid, 0);
+    H5TRACE1("t","i",spaceid);
+
+    /* Check args */
+    if (NULL == (space=H5I_object_verify(spaceid, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a dataspace");
+
+    ret_value = H5S_SELECT_VALID(space);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Sselect_valid() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_valid
+ PURPOSE
+    Check whether the selection fits within the extent, with the current
+    offset defined.
+ USAGE
+    htri_t H5S_select_void(space)
+        H5S_t *space;           IN: Dataspace to query
+ RETURNS
+    TRUE if the selection fits within the extent, FALSE if it does not and
+        Negative on an error.
+ DESCRIPTION
+    Determines if the current selection at the current offet fits within the
+    extent for the dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+     This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_select_valid(const H5S_t *space)
+{
+    htri_t ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_select_valid);
+
+    assert(space);
+
+    ret_value = (*space->select.type->is_valid)(space);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_valid() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_deserialize
+ PURPOSE
+    Deserialize the current selection from a user-provided buffer into a real
+        selection in the dataspace.
+ USAGE
+    herr_t H5S_select_deserialize(space, buf)
+        H5S_t *space;           IN/OUT: Dataspace pointer to place selection into
+        uint8 *buf;             IN: Buffer to retrieve serialized selection from
+ RETURNS
+    Non-negative on success/Negative on failure
+ DESCRIPTION
+    Deserializes the current selection into a buffer.  (Primarily for retrieving
+    from disk).  This routine just hands off to the appropriate routine for each
+    type of selection.  The format of the serialized information is shown in
+    the H5S_select_serialize() header.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_select_deserialize (H5S_t *space, const uint8_t *buf)
+{
+    const uint8_t *tbuf;    /* Temporary pointer to the selection type */
+    uint32_t sel_type;       /* Pointer to the selection type */
+    herr_t ret_value=FAIL;  /* return value */
+
+    FUNC_ENTER_NOAPI(H5S_select_deserialize, FAIL);
+
+    assert(space);
+
+    tbuf=buf;
+    UINT32DECODE(tbuf, sel_type);
+    switch(sel_type) {
+        case H5S_SEL_POINTS:         /* Sequence of points selected */
+            ret_value=(*H5S_sel_point->deserialize)(space,buf);
+            break;
+
+        case H5S_SEL_HYPERSLABS:     /* Hyperslab selection defined */
+            ret_value=(*H5S_sel_hyper->deserialize)(space,buf);
+            break;
+
+        case H5S_SEL_ALL:            /* Entire extent selected */
+            ret_value=(*H5S_sel_all->deserialize)(space,buf);
+            break;
+
+        case H5S_SEL_NONE:           /* Nothing selected */
+            ret_value=(*H5S_sel_none->deserialize)(space,buf);
+            break;
+
+        default:
+            break;
+    }
+    if(ret_value<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTLOAD, FAIL, "can't deserialize selection");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_deserialize() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sget_select_bounds
+ PURPOSE
+    Gets the bounding box containing the selection.
+ USAGE
+    herr_t H5S_get_select_bounds(space, start, end)
+        hid_t dsid;             IN: Dataspace ID of selection to query
+        hsize_t *start;         OUT: Starting coordinate of bounding box
+        hsize_t *end;           OUT: Opposite coordinate of bounding box
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Retrieves the bounding box containing the current selection and places
+    it into the user's buffers.  The start and end buffers must be large
+    enough to hold the dataspace rank number of coordinates.  The bounding box
+    exactly contains the selection, ie. if a 2-D element selection is currently
+    defined with the following points: (4,5), (6,8) (10,7), the bounding box
+    with be (4, 5), (10, 8).  Calling this function on a "none" selection
+    returns fail.
+        The bounding box calculations _does_ include the current offset of the
+    selection within the dataspace extent.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5Sget_select_bounds(hid_t spaceid, hsize_t *start, hsize_t *end)
+{
+    H5S_t	*space = NULL;      /* Dataspace to modify selection of */
+    herr_t ret_value;        /* return value */
+
+    FUNC_ENTER_API(H5Sget_select_bounds, FAIL);
+    H5TRACE3("e","i*h*h",spaceid,start,end);
+
+    /* Check args */
+    if(start==NULL || end==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid pointer");
+    if (NULL == (space=H5I_object_verify(spaceid, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace");
+
+    ret_value = H5S_SELECT_BOUNDS(space,start,end);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* H5Sget_select_bounds() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_get_select_bounds
+ PURPOSE
+    Gets the bounding box containing the selection.
+ USAGE
+    herr_t H5S_get_select_bounds(space, start, end)
+        H5S_t *space;           IN: Dataspace ID of selection to query
+        hsize_t *start;         OUT: Starting coordinate of bounding box
+        hsize_t *end;           OUT: Opposite coordinate of bounding box
+ RETURNS
+    Non-negative on success, negative on failure
+ DESCRIPTION
+    Retrieves the bounding box containing the current selection and places
+    it into the user's buffers.  The start and end buffers must be large
+    enough to hold the dataspace rank number of coordinates.  The bounding box
+    exactly contains the selection, ie. if a 2-D element selection is currently
+    defined with the following points: (4,5), (6,8) (10,7), the bounding box
+    with be (4, 5), (10, 8).  Calling this function on a "none" selection
+    returns fail.
+        The bounding box calculations _does_ include the current offset of the
+    selection within the dataspace extent.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_get_select_bounds(const H5S_t *space, hsize_t *start, hsize_t *end)
+{
+    herr_t ret_value;        /* return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_get_select_bounds);
+
+    /* Check args */
+    assert(space);
+    assert(start);
+    assert(end);
+
+    ret_value = (*space->select.type->bounds)(space,start,end);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_get_select_bounds() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_is_contiguous
+ PURPOSE
+    Determines if a selection is contiguous in the dataspace
+ USAGE
+    htri_t H5S_select_is_contiguous(space)
+        const H5S_t *space;             IN: Dataspace of selection to query
+ RETURNS
+    Non-negative (TRUE/FALSE) on success, negative on failure
+ DESCRIPTION
+    Checks the selection to determine if the points to iterated over will be
+    contiguous in the particular dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_select_is_contiguous(const H5S_t *space)
+{
+    herr_t ret_value;        /* return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_select_is_contiguous);
+
+    /* Check args */
+    assert(space);
+
+    ret_value = (*space->select.type->is_contiguous)(space);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_is_contiguous() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_is_single
+ PURPOSE
+    Determines if a selection is a single block in the dataspace
+ USAGE
+    htri_t H5S_select_is_single(space)
+        const H5S_t *space;             IN: Dataspace of selection to query
+ RETURNS
+    Non-negative (TRUE/FALSE) on success, negative on failure
+ DESCRIPTION
+    Checks the selection to determine if it occupies a single block in the
+    particular dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_select_is_single(const H5S_t *space)
+{
+    herr_t ret_value;        /* return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_select_is_single);
+
+    /* Check args */
+    assert(space);
+
+    ret_value = (*space->select.type->is_single)(space);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_is_single() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_is_regular
+ PURPOSE
+    Determines if a selection is "regular"  in the dataspace
+ USAGE
+    htri_t H5S_select_is_regular(space)
+        const H5S_t *space;             IN: Dataspace of selection to query
+ RETURNS
+    Non-negative (TRUE/FALSE) on success, negative on failure
+ DESCRIPTION
+    Checks the selection to determine if it is "regular" (i.e. a single
+    block or a strided pattern) in the particular dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_select_is_regular(const H5S_t *space)
+{
+    herr_t ret_value;        /* return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_select_is_regular);
+
+    /* Check args */
+    assert(space);
+
+    ret_value = (*space->select.type->is_regular)(space);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_is_regular() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_iter_init
+ PURPOSE
+    Initializes iteration information for a selection.
+ USAGE
+    herr_t H5S_select_iter_init(sel_iter, space, elmt_size)
+        H5S_sel_iter_t *sel_iter; OUT: Selection iterator to initialize.
+        H5S_t *space;           IN: Dataspace object containing selection to
+                                    iterate over
+        size_t elmt_size;       IN: Size of elements in the selection
+ RETURNS
+     Non-negative on success, negative on failure.
+ DESCRIPTION
+    Initialize the selection iterator object to point to the first element
+    in the dataspace's selection.
+--------------------------------------------------------------------------*/
+herr_t
+H5S_select_iter_init(H5S_sel_iter_t *sel_iter, const H5S_t *space, size_t elmt_size)
+{
+    herr_t ret_value;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_select_iter_init);
+
+    /* Check args */
+    assert(sel_iter);
+    assert(space);
+
+    /* Initialize common information */
+
+    /* Save the dataspace's rank */
+    sel_iter->rank=space->extent.rank;
+
+    if(sel_iter->rank>0) {
+        /* Point to the dataspace dimensions */
+        sel_iter->dims=space->extent.size;
+    } /* end if */
+    else
+        sel_iter->dims = NULL;
+
+    /* Save the element size */
+    sel_iter->elmt_size=elmt_size;
+
+    /* Call initialization routine for selection type */
+    ret_value= (*space->select.type->iter_init)(sel_iter, space);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_iter_init() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_iter_coords
+ PURPOSE
+    Get the coordinates of the current iterator position
+ USAGE
+    herr_t H5S_select_iter_coords(sel_iter,coords)
+        H5S_sel_iter_t *sel_iter; IN: Selection iterator to query
+        hsize_t *coords;         OUT: Array to place iterator coordinates in
+ RETURNS
+    Non-negative on success, negative on failure.
+ DESCRIPTION
+    The current location of the iterator within the selection is placed in
+    the COORDS array.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_select_iter_coords (const H5S_sel_iter_t *sel_iter, hsize_t *coords)
+{
+    herr_t ret_value;         /* return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_select_iter_coords);
+
+    /* Check args */
+    assert(sel_iter);
+    assert(coords);
+
+    /* Call iter_coords routine for selection type */
+    ret_value = (*sel_iter->type->iter_coords)(sel_iter,coords);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_iter_coords() */
+
+#ifdef LATER
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_iter_block
+ PURPOSE
+    Get the block of the current iterator position
+ USAGE
+    herr_t H5S_select_iter_block(sel_iter,start,end)
+        const H5S_sel_iter_t *sel_iter; IN: Selection iterator to query
+        hsize_t *start;    OUT: Array to place iterator start block coordinates
+        hsize_t *end;      OUT: Array to place iterator end block coordinates
+ RETURNS
+    Non-negative on success, negative on failure.
+ DESCRIPTION
+    The current location of the iterator within the selection is placed in
+    the COORDS array.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_select_iter_block (const H5S_sel_iter_t *iter, hsize_t *start, hsize_t *end)
+{
+    herr_t ret_value;         /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_select_iter_block);
+
+    /* Check args */
+    assert(iter);
+    assert(start);
+    assert(end);
+
+    /* Call iter_block routine for selection type */
+    ret_value = (*iter->type->iter_block)(iter,start,end);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_iter_block() */
+#endif /* LATER */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_iter_nelmts
+ PURPOSE
+    Get the number of elements left to iterate over in selection
+ USAGE
+    hssize_t H5S_select_iter_nelmts(sel_iter)
+        H5S_sel_iter_t *sel_iter; IN: Selection iterator to query
+ RETURNS
+    The number of elements in selection on success, 0 on failure
+ DESCRIPTION
+    Returns the number of elements in current selection for dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+hsize_t
+H5S_select_iter_nelmts (const H5S_sel_iter_t *sel_iter)
+{
+    hsize_t ret_value;         /* return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_select_iter_nelmts);
+
+    /* Check args */
+    assert(sel_iter);
+
+    /* Call iter_nelmts routine for selection type */
+    ret_value = (*sel_iter->type->iter_nelmts)(sel_iter);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_iter_nelmts() */
+
+#ifdef LATER
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_iter_has_next_block
+ PURPOSE
+    Check if there is another block available in the selection iterator
+ USAGE
+    htri_t H5S_select_iter_has_next_block(sel_iter)
+        const H5S_sel_iter_t *sel_iter; IN: Selection iterator to query
+ RETURNS
+    Non-negative on success, negative on failure.
+ DESCRIPTION
+    Check if there is another block available to advance to in the selection
+    iterator.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static htri_t
+H5S_select_iter_has_next_block (const H5S_sel_iter_t *iter)
+{
+    herr_t ret_value;         /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_select_iter_has_next_block);
+
+    /* Check args */
+    assert(iter);
+
+    /* Call iter_has_next_block routine for selection type */
+    ret_value = (*iter->type->iter_has_next_block)(iter);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_iter_has_next_block() */
+#endif /* LATER */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_iter_next
+ PURPOSE
+    Advance selection iterator to next element
+ USAGE
+    herr_t H5S_select_iter_next(iter, nelem)
+        H5S_sel_iter_t *iter;   IN/OUT: Selection iterator to change
+        size_t nelem;           IN: Number of elements to advance by
+ RETURNS
+    Non-negative on success, negative on failure.
+ DESCRIPTION
+    Move the current element for the selection iterator to the NELEM'th next
+    element in the selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_select_iter_next(H5S_sel_iter_t *iter, size_t nelem)
+{
+    herr_t ret_value;         /* return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_select_iter_next);
+
+    /* Check args */
+    assert(iter);
+    assert(nelem>0);
+
+    /* Call iter_next routine for selection type */
+    ret_value = (*iter->type->iter_next)(iter,nelem);
+
+    /* Decrement the number of elements left in selection */
+    iter->elmt_left-=nelem;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_iter_next() */
+
+#ifdef LATER
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_iter_next_block
+ PURPOSE
+    Advance selection iterator to next block
+ USAGE
+    herr_t H5S_select_iter_next_block(iter)
+        H5S_sel_iter_t *iter;   IN/OUT: Selection iterator to change
+ RETURNS
+    Non-negative on success, negative on failure.
+ DESCRIPTION
+    Move the current element for the selection iterator to the next
+    block in the selection.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    Doesn't maintain the 'elmt_left' field of the selection iterator.
+
+    This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5S_select_iter_next_block(H5S_sel_iter_t *iter)
+{
+    herr_t ret_value;         /* return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5S_select_iter_next_block);
+
+    /* Check args */
+    assert(iter);
+
+    /* Call iter_next_block routine for selection type */
+    ret_value = (*iter->type->iter_next_block)(iter);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_iter_next_block() */
+#endif /* LATER */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_iter_release
+ PURPOSE
+    Release a selection iterator's resources.
+ USAGE
+    hssize_t H5S_select_iter_release(sel_iter)
+        H5S_sel_iter_t *sel_iter; IN: Selection iterator to query
+ RETURNS
+    The number of elements in selection on success, 0 on failure
+ DESCRIPTION
+    Returns the number of elements in current selection for dataspace.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_select_iter_release(H5S_sel_iter_t *sel_iter)
+{
+    herr_t ret_value;         /* return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_select_iter_release);
+
+    /* Check args */
+    assert(sel_iter);
+
+    /* Call selection type-specific release routine */
+    ret_value = (*sel_iter->type->iter_release)(sel_iter);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_iter_release() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_iterate
+ PURPOSE
+    Iterate over the selected elements in a memory buffer.
+ USAGE
+    herr_t H5S_select_iterate(buf, type_id, space, operator, operator_data)
+        void *buf;      IN/OUT: Buffer containing elements to iterate over
+        hid_t type_id;  IN: Datatype ID of BUF array.
+        H5S_t *space;   IN: Dataspace object containing selection to iterate over
+        H5D_operator_t op; IN: Function pointer to the routine to be
+                                called for each element in BUF iterated over.
+        void *operator_data;    IN/OUT: Pointer to any user-defined data
+                                associated with the operation.
+ RETURNS
+    Returns the return value of the last operator if it was non-zero, or zero
+    if all elements were processed. Otherwise returns a negative value.
+ DESCRIPTION
+    Iterates over the selected elements in a memory buffer, calling the user's
+    callback function for each element.  The selection in the dataspace is
+    modified so that any elements already iterated over are removed from the
+    selection if the iteration is interrupted (by the H5D_operator_t function
+    returning non-zero) in the "middle" of the iteration and may be re-started
+    by the user where it left off.
+
+    NOTE: Until "subtracting" elements from a selection is implemented,
+        the selection is not modified.
+--------------------------------------------------------------------------*/
+herr_t
+H5S_select_iterate(void *buf, hid_t type_id, const H5S_t *space, H5D_operator_t op,
+        void *operator_data)
+{
+    H5T_t *dt;                  /* Datatype structure */
+    H5S_sel_iter_t iter;        /* Selection iteration info */
+    hbool_t iter_init=0;        /* Selection iteration info has been initialized */
+    uint8_t *loc;               /* Current element location in buffer */
+    hsize_t coords[H5O_LAYOUT_NDIMS];  /* Coordinates of element in dataspace */
+    hssize_t nelmts;            /* Number of elements in selection */
+    hsize_t space_size[H5O_LAYOUT_NDIMS]; /* Dataspace size */
+    hsize_t off[H5D_XFER_HYPER_VECTOR_SIZE_DEF];          /* Array to store sequence offsets */
+    hsize_t curr_off;           /* Current offset within sequence */
+    hsize_t tmp_off;            /* Temporary offset within sequence */
+    size_t len[H5D_XFER_HYPER_VECTOR_SIZE_DEF];           /* Array to store sequence lengths */
+    size_t curr_len;            /* Length of bytes left to process in sequence */
+    size_t nseq;                /* Number of sequences generated */
+    size_t curr_seq;            /* Current sequnce being worked on */
+    size_t nelem;               /* Number of elements used in sequences */
+    size_t max_elem;            /* Maximum number of elements allowed in sequences */
+    size_t elmt_size;           /* Datatype size */
+    unsigned ndims;             /* Number of dimensions in dataspace */
+    int	i;			/* Local Index variable */
+    herr_t user_ret=0;          /* User's return value */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5S_select_iterate, FAIL);
+
+    /* Check args */
+    assert(buf);
+    assert(H5I_DATATYPE == H5I_get_type(type_id));
+    assert(space);
+    assert(op);
+
+    /* Get the datatype size */
+    if (NULL==(dt=H5I_object_verify(type_id,H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an valid base datatype");
+    if((elmt_size=H5T_get_size(dt))==0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_BADSIZE, FAIL, "datatype size invalid");
+
+    /* Initialize iterator */
+    if (H5S_select_iter_init(&iter, space, elmt_size)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to initialize selection iterator");
+    iter_init=1;	/* Selection iteration info has been initialized */
+
+    /* Get the number of elements in selection */
+    if((nelmts = H5S_GET_SELECT_NPOINTS(space))<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTCOUNT, FAIL, "can't get number of elements selected");
+
+    /* Get the rank of the dataspace */
+    ndims=space->extent.rank;
+
+    if (ndims > 0){
+	/* Copy the size of the space */
+	assert(space->extent.size);
+	HDmemcpy(space_size, space->extent.size, ndims*sizeof(hsize_t));
+    }
+    space_size[ndims]=elmt_size;
+
+    /* Compute the maximum number of bytes required */
+    H5_ASSIGN_OVERFLOW(max_elem,nelmts,hssize_t,size_t);
+
+    /* Loop, while elements left in selection */
+    while(max_elem>0 && user_ret==0) {
+        /* Get the sequences of bytes */
+        if(H5S_SELECT_GET_SEQ_LIST(space,0,&iter,H5D_XFER_HYPER_VECTOR_SIZE_DEF,max_elem,&nseq,&nelem,off,len)<0)
+            HGOTO_ERROR (H5E_INTERNAL, H5E_UNSUPPORTED, FAIL, "sequence length generation failed");
+
+        /* Loop, while sequences left to process */
+        for(curr_seq=0; curr_seq<nseq && user_ret==0; curr_seq++) {
+            /* Get the current offset */
+            curr_off=off[curr_seq];
+
+            /* Get the number of bytes in sequence */
+            curr_len=len[curr_seq];
+
+            /* Loop, while bytes left in sequence */
+            while(curr_len>0 && user_ret==0) {
+                /* Compute the coordinate from the offset */
+                for(i=ndims, tmp_off=curr_off; i>=0; i--) {
+                    coords[i]=tmp_off%space_size[i];
+                    tmp_off/=space_size[i];
+                } /* end for */
+
+                /* Get the location within the user's buffer */
+                loc=(unsigned char *)buf+curr_off;
+
+                /* Call user's callback routine */
+                user_ret=(*op)(loc,type_id,ndims,coords,operator_data);
+
+                /* Increment offset in dataspace */
+                curr_off+=elmt_size;
+
+                /* Decrement number of bytes left in sequence */
+                curr_len-=elmt_size;
+            } /* end while */
+        } /* end for */
+
+        /* Decrement number of elements left to process */
+        max_elem-=nelem;
+    } /* end while */
+
+    /* Set return value */
+    ret_value=user_ret;
+
+done:
+    /* Release selection iterator */
+    if(iter_init) {
+        if (H5S_SELECT_ITER_RELEASE(&iter)<0)
+            HDONE_ERROR (H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release selection iterator");
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5S_select_iterate() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5Sget_select_type
+ PURPOSE
+    Retrieve the type of selection in a dataspace
+ USAGE
+    H5S_sel_type H5Sget_select_type(space_id)
+        hid_t space_id;	        IN: Dataspace object to query
+ RETURNS
+    Non-negative on success/Negative on failure.  Return value is from the
+    set of values in the H5S_sel_type enumerated type.
+ DESCRIPTION
+	This function retrieves the type of selection currently defined for
+    a dataspace.
+--------------------------------------------------------------------------*/
+H5S_sel_type
+H5Sget_select_type(hid_t space_id)
+{
+    H5S_t		   *space = NULL;	/* dataspace to modify */
+    H5S_sel_type        ret_value;       /* Return value */
+
+    FUNC_ENTER_API(H5Sget_select_type, H5S_SEL_ERROR);
+    H5TRACE1("St","i",space_id);
+
+    /* Check args */
+    if (NULL == (space = H5I_object_verify(space_id, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, H5S_SEL_ERROR, "not a dataspace");
+
+    /* Set return value */
+    ret_value=H5S_GET_SELECT_TYPE(space);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* end H5Sget_select_type() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_get_select_type
+ PURPOSE
+    Retrieve the type of selection in a dataspace
+ USAGE
+    H5S_sel_type H5Sget_select_type(space)
+        const H5S_t *space;	        IN: Dataspace object to query
+ RETURNS
+    Non-negative on success/Negative on failure.  Return value is from the
+    set of values in the H5S_sel_type enumerated type.
+ DESCRIPTION
+	This function retrieves the type of selection currently defined for
+    a dataspace.
+ COMMENTS
+     This routine participates in the "Inlining C function pointers"
+        pattern, don't call it directly, use the appropriate macro
+        defined in H5Sprivate.h.
+--------------------------------------------------------------------------*/
+H5S_sel_type
+H5S_get_select_type(const H5S_t *space)
+{
+    H5S_sel_type        ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5S_get_select_type);
+
+    /* Check args */
+    assert(space);
+
+    /* Set return value */
+    ret_value=H5S_GET_SELECT_TYPE(space);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5S_get_select_type() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_shape_same
+ PURPOSE
+    Check if two selections are the same shape
+ USAGE
+    htri_t H5S_select_shape_same(space1, space2)
+        const H5S_t *space1;         IN: 1st Dataspace pointer to compare
+        const H5S_t *space2;         IN: 2nd Dataspace pointer to compare
+ RETURNS
+    TRUE/FALSE/FAIL
+ DESCRIPTION
+    Checks to see if the current selection in the dataspaces are the same
+    dimensionality and shape.
+    This is primarily used for reading the entire selection in one swoop.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    Assumes that there is only a single "block" for hyperslab selections.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_select_shape_same(const H5S_t *space1, const H5S_t *space2)
+{
+    H5S_sel_iter_t iter1;                       /* Selection #1 iteration info */
+    H5S_sel_iter_t iter2;                       /* Selection #2 iteration info */
+    hbool_t iter1_init=0;                       /* Selection #1 iteration info has been initialized */
+    hbool_t iter2_init=0;                       /* Selection #2 iteration info has been initialized */
+    unsigned	u;                              /* Index variable */
+    htri_t ret_value=TRUE;  /* return value */
+
+    FUNC_ENTER_NOAPI(H5S_select_shape_same, FAIL);
+
+    /* Check args */
+    assert(space1);
+    assert(space2);
+
+    /* Check for different dimensionality */
+    if (space1->extent.rank!=space2->extent.rank)
+        HGOTO_DONE(FALSE);
+
+    /* Check for different number of elements selected */
+    if(H5S_GET_SELECT_NPOINTS(space1)!=H5S_GET_SELECT_NPOINTS(space2))
+        HGOTO_DONE(FALSE);
+
+    /* Check for "easy" cases before getting into generalized block iteration code */
+    if(H5S_GET_SELECT_TYPE(space1)==H5S_SEL_ALL && H5S_GET_SELECT_TYPE(space2)==H5S_SEL_ALL) {
+        hsize_t dims1[H5O_LAYOUT_NDIMS];             /* End point of selection block in dataspace #1 */
+        hsize_t dims2[H5O_LAYOUT_NDIMS];             /* End point of selection block in dataspace #2 */
+
+        if(H5S_get_simple_extent_dims(space1, dims1, NULL)<0)
+            HGOTO_ERROR (H5E_DATASPACE, H5E_CANTGET, FAIL, "unable to get dimensionality");
+        if(H5S_get_simple_extent_dims(space2, dims2, NULL)<0)
+            HGOTO_ERROR (H5E_DATASPACE, H5E_CANTGET, FAIL, "unable to get dimensionality");
+
+        /* Check that the sizes are the same */
+        for (u=0; u<space1->extent.rank; u++)
+            if(dims1[u]!=dims2[u])
+                HGOTO_DONE(FALSE);
+    } /* end if */
+    else if(H5S_GET_SELECT_TYPE(space1)==H5S_SEL_NONE || H5S_GET_SELECT_TYPE(space2)==H5S_SEL_NONE) {
+        HGOTO_DONE(TRUE);
+    } /* end if */
+    else if((H5S_GET_SELECT_TYPE(space1)==H5S_SEL_HYPERSLABS && space1->select.sel_info.hslab->diminfo_valid)
+            && (H5S_GET_SELECT_TYPE(space2)==H5S_SEL_HYPERSLABS && space2->select.sel_info.hslab->diminfo_valid)) {
+
+        /* Check that the shapes are the same */
+        for (u=0; u<space1->extent.rank; u++) {
+            if(space1->select.sel_info.hslab->opt_diminfo[u].stride!=space2->select.sel_info.hslab->opt_diminfo[u].stride)
+                HGOTO_DONE(FALSE);
+            if(space1->select.sel_info.hslab->opt_diminfo[u].count!=space2->select.sel_info.hslab->opt_diminfo[u].count)
+                HGOTO_DONE(FALSE);
+            if(space1->select.sel_info.hslab->opt_diminfo[u].block!=space2->select.sel_info.hslab->opt_diminfo[u].block)
+                HGOTO_DONE(FALSE);
+        } /* end for */
+    } /* end if */
+    /* Iterate through all the blocks in the selection */
+    else {
+        hsize_t start1[H5O_LAYOUT_NDIMS];      /* Start point of selection block in dataspace #1 */
+        hsize_t start2[H5O_LAYOUT_NDIMS];      /* Start point of selection block in dataspace #2 */
+        hsize_t end1[H5O_LAYOUT_NDIMS];        /* End point of selection block in dataspace #1 */
+        hsize_t end2[H5O_LAYOUT_NDIMS];        /* End point of selection block in dataspace #2 */
+        hsize_t off1[H5O_LAYOUT_NDIMS];        /* Offset of selection #1 blocks */
+        hsize_t off2[H5O_LAYOUT_NDIMS];        /* Offset of selection #2 blocks */
+        htri_t status1,status2;         /* Status from next block checks */
+        unsigned first_block=1;         /* Flag to indicate the first block */
+
+        /* Initialize iterator for each dataspace selection
+         * Use '0' for element size instead of actual element size to indicate
+         * that the selection iterator shouldn't be "flattened", since we
+         * aren't actually going to be doing I/O with the iterators.
+         */
+        if (H5S_select_iter_init(&iter1, space1, 0)<0)
+            HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to initialize selection iterator");
+        iter1_init=1;
+        if (H5S_select_iter_init(&iter2, space2, 0)<0)
+            HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to initialize selection iterator");
+        iter2_init=1;
+
+        /* Iterate over all the blocks in each selection */
+        while(1) {
+            /* Get the current block for each selection iterator */
+            if(H5S_SELECT_ITER_BLOCK(&iter1,start1,end1)<0)
+                HGOTO_ERROR (H5E_DATASPACE, H5E_CANTGET, FAIL, "unable to get iterator block");
+            if(H5S_SELECT_ITER_BLOCK(&iter2,start2,end2)<0)
+                HGOTO_ERROR (H5E_DATASPACE, H5E_CANTGET, FAIL, "unable to get iterator block");
+
+            /* The first block only compares the sizes and sets the relative offsets for later blocks */
+            if(first_block) {
+                /* If the block sizes from each selection doesn't match, get out */
+                for (u=0; u<space1->extent.rank; u++) {
+                    if((end1[u]-start1[u])!=(end2[u]-start2[u]))
+                        HGOTO_DONE(FALSE);
+
+                    /* Set the relative locations of the selections */
+                    off1[u]=start1[u];
+                    off2[u]=start2[u];
+                } /* end for */
+
+                /* Reset "first block" flag */
+                first_block=0;
+            } /* end if */
+            else {
+                /* Check over the blocks for each selection */
+                for (u=0; u<space1->extent.rank; u++) {
+                    /* Check if the blocks are in the same relative location */
+                    if((start1[u]-off1[u])!=(start2[u]-off2[u]))
+                        HGOTO_DONE(FALSE);
+
+                    /* If the block sizes from each selection doesn't match, get out */
+                    if((end1[u]-start1[u])!=(end2[u]-start2[u]))
+                        HGOTO_DONE(FALSE);
+                } /* end for */
+            } /* end else */
+
+            /* Check if we are able to advance to the next selection block */
+            if((status1=H5S_SELECT_ITER_HAS_NEXT_BLOCK(&iter1))<0)
+                HGOTO_ERROR (H5E_DATASPACE, H5E_CANTNEXT, FAIL, "unable to check iterator block");
+            if((status2=H5S_SELECT_ITER_HAS_NEXT_BLOCK(&iter2))<0)
+                HGOTO_ERROR (H5E_DATASPACE, H5E_CANTNEXT, FAIL, "unable to check iterator block");
+
+            /* Did we run out of blocks at the same time? */
+            if(status1==FALSE && status2==FALSE)
+                break;
+            else if(status1!=status2) {
+                HGOTO_DONE(FALSE);
+            } /* end if */
+            else {
+                /* Advance to next block in selection iterators */
+                if(H5S_SELECT_ITER_NEXT_BLOCK(&iter1)<0)
+                    HGOTO_ERROR (H5E_DATASPACE, H5E_CANTNEXT, FAIL, "unable to advance to next iterator block");
+                if(H5S_SELECT_ITER_NEXT_BLOCK(&iter2)<0)
+                    HGOTO_ERROR (H5E_DATASPACE, H5E_CANTNEXT, FAIL, "unable to advance to next iterator block");
+            } /* end else */
+        } /* end while */
+    } /* end else */
+
+done:
+    if(iter1_init) {
+        if (H5S_SELECT_ITER_RELEASE(&iter1)<0)
+            HDONE_ERROR (H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release selection iterator");
+    } /* end if */
+    if(iter2_init) {
+        if (H5S_SELECT_ITER_RELEASE(&iter2)<0)
+            HDONE_ERROR (H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release selection iterator");
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_shape_same() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_fill
+ PURPOSE
+    Fill a selection in memory with a value
+ USAGE
+    herr_t H5S_select_fill(fill,fill_size,space,buf)
+        const void *fill;       IN: Pointer to fill value to use
+        size_t fill_size;       IN: Size of elements in memory buffer & size of
+                                    fill value
+        H5S_t *space;           IN: Dataspace describing memory buffer &
+                                    containing selection to use.
+        void *buf;              IN/OUT: Memory buffer to fill selection in
+ RETURNS
+    Non-negative on success/Negative on failure.
+ DESCRIPTION
+    Use the selection in the dataspace to fill elements in a memory buffer.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    The memory buffer elements are assumed to have the same datatype as the
+    fill value being placed into them.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5S_select_fill(void *_fill, size_t fill_size, const H5S_t *space, void *_buf)
+{
+    H5S_sel_iter_t iter;        /* Selection iteration info */
+    hbool_t iter_init=0;        /* Selection iteration info has been initialized */
+    uint8_t *buf;               /* Current location in buffer */
+    void *fill=_fill;           /* Alias for fill-value buffer */
+    hssize_t nelmts;            /* Number of elements in selection */
+    hsize_t off[H5D_XFER_HYPER_VECTOR_SIZE_DEF];          /* Array to store sequence offsets */
+    size_t len[H5D_XFER_HYPER_VECTOR_SIZE_DEF];           /* Array to store sequence lengths */
+    size_t nseq;                /* Number of sequences generated */
+    size_t curr_seq;            /* Current sequnce being worked on */
+    size_t nelem;               /* Number of elements used in sequences */
+    size_t max_elem;            /* Total number of elements in selection */
+    herr_t ret_value=SUCCEED;   /* return value */
+
+    FUNC_ENTER_NOAPI(H5S_select_fill, FAIL);
+
+    /* Check args */
+    assert(fill_size>0);
+    assert(space);
+    assert(_buf);
+
+    /* Check if we need a temporary fill value buffer */
+    if(fill==NULL) {
+        if (NULL==(fill = H5FL_BLK_CALLOC(type_elem,fill_size)))
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "fill value buffer allocation failed");
+    } /* end if */
+
+    /* Initialize iterator */
+    if (H5S_select_iter_init(&iter, space, fill_size)<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTINIT, FAIL, "unable to initialize selection iterator");
+    iter_init=1;	/* Selection iteration info has been initialized */
+
+    /* Get the number of elements in selection */
+    if((nelmts = H5S_GET_SELECT_NPOINTS(space))<0)
+        HGOTO_ERROR (H5E_DATASPACE, H5E_CANTCOUNT, FAIL, "can't get number of elements selected");
+
+    /* Compute the number of bytes to process */
+    H5_ASSIGN_OVERFLOW(max_elem,nelmts,hssize_t,size_t);
+
+    /* Loop, while elements left in selection */
+    while(max_elem>0) {
+        /* Get the sequences of bytes */
+        if(H5S_SELECT_GET_SEQ_LIST(space,0,&iter,H5D_XFER_HYPER_VECTOR_SIZE_DEF,max_elem,&nseq,&nelem,off,len)<0)
+            HGOTO_ERROR (H5E_INTERNAL, H5E_UNSUPPORTED, FAIL, "sequence length generation failed");
+
+        /* Loop over sequences */
+        for(curr_seq=0; curr_seq<nseq; curr_seq++) {
+            /* Get offset in memory buffer */
+            buf=(uint8_t *)_buf+off[curr_seq];
+
+            /* Fill each sequence in memory with fill value */
+            assert((len[curr_seq]%fill_size)==0);
+            H5V_array_fill(buf, fill, fill_size, (len[curr_seq]/fill_size));
+        } /* end for */
+
+        /* Decrement number of elements left to process */
+        max_elem-=nelem;
+    } /* end while */
+
+done:
+    /* Release selection iterator */
+    if(iter_init) {
+        if (H5S_SELECT_ITER_RELEASE(&iter)<0)
+            HDONE_ERROR (H5E_DATASPACE, H5E_CANTRELEASE, FAIL, "unable to release selection iterator");
+    } /* end if */
+
+    /* Release fill value, if allocated */
+    if(_fill==NULL && fill)
+        H5FL_BLK_FREE(type_elem,fill);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_fill() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Stest.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Stest.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Stest.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,73 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Saturday, May 31, 2003
+ *
+ * Purpose:	Dataspace selection testing functions.
+ */
+
+#define H5S_PACKAGE		/*suppress error about including H5Spkg	  */
+#define H5S_TESTING		/*suppress warning about H5S testing funcs*/
+
+
+#include "H5private.h"		/* Generic Functions			  */
+#include "H5Eprivate.h"		/* Error handling		  */
+#include "H5Iprivate.h"		/* ID Functions		  */
+#include "H5Spkg.h"		/* Dataspace functions			  */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5S_select_shape_same_test
+ PURPOSE
+    Determine if two dataspace selections are the same shape
+ USAGE
+    htri_t H5S_select_shape_same_test(sid1, sid2)
+        hid_t sid1;          IN: 1st dataspace to compare
+        hid_t sid2;          IN: 2nd dataspace to compare
+ RETURNS
+    Non-negative TRUE/FALSE on success, negative on failure
+ DESCRIPTION
+    Checks to see if the current selection in the dataspaces are the same
+    dimensionality and shape.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    DO NOT USE THIS FUNCTION FOR ANYTHING EXCEPT TESTING H5P_get_class_path()
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5S_select_shape_same_test(hid_t sid1, hid_t sid2)
+{
+    H5S_t	*space1 = NULL;      /* Pointer to 1st dataspace */
+    H5S_t	*space2 = NULL;      /* Pointer to 2nd dataspace */
+    htri_t ret_value;        /* return value */
+
+    FUNC_ENTER_NOAPI(H5S_select_shape_same_test, FAIL);
+
+    /* Get dataspace structures */
+    if (NULL == (space1=H5I_object_verify(sid1, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace");
+    if (NULL == (space2=H5I_object_verify(sid2, H5I_DATASPACE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataspace");
+
+    /* Check if the dataspace selections are the same shape */
+    if ((ret_value=H5S_select_shape_same(space1,space2))<0)
+        HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCOMPARE, FAIL, "unable to compare dataspace selections");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* H5S_select_shape_same_test() */
+

Added: packages/hdf5/branches/upstream/current/src/H5T.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5T.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5T.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,4925 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains most of the "core" functionality of
+ *      the H5T interface, including the API initialization code, etc.
+ *      Many routines that are infrequently used, or are specialized for
+ *      one particular datatype class are in another module.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_interface
+
+
+#include "H5private.h"		/*generic functions			*/
+#include "H5Dprivate.h"		/*datasets (for H5Tcopy)		*/
+#include "H5Eprivate.h"		/*error handling			*/
+#include "H5FLprivate.h"	/* Free Lists				*/
+#include "H5FOprivate.h"	/* File objects				*/
+#include "H5Gprivate.h"		/*groups				  */
+#include "H5Iprivate.h"		/*ID functions		   		  */
+#include "H5MMprivate.h"	/*memory management			  */
+#include "H5Pprivate.h"		/* Property Lists			  */
+#include "H5Tpkg.h"		/*data-type functions			  */
+
+/* Check for header needed for SGI floating-point code */
+#ifdef H5_HAVE_SYS_FPU_H
+#include <sys/fpu.h>
+#endif /* H5_HAVE_SYS_FPU_H */
+
+/*
+ * Predefined data types. These are initialized at runtime in H5Tinit.c and
+ * by H5T_init_interface() in this source file.
+ *
+ * If more of these are added, the new ones must be added to the list of
+ * types to reset in H5T_term_interface().
+ */
+hid_t H5T_IEEE_F32BE_g			= FAIL;
+hid_t H5T_IEEE_F32LE_g			= FAIL;
+hid_t H5T_IEEE_F64BE_g			= FAIL;
+hid_t H5T_IEEE_F64LE_g			= FAIL;
+
+hid_t H5T_STD_I8BE_g			= FAIL;
+hid_t H5T_STD_I8LE_g			= FAIL;
+hid_t H5T_STD_I16BE_g			= FAIL;
+hid_t H5T_STD_I16LE_g			= FAIL;
+hid_t H5T_STD_I32BE_g			= FAIL;
+hid_t H5T_STD_I32LE_g			= FAIL;
+hid_t H5T_STD_I64BE_g			= FAIL;
+hid_t H5T_STD_I64LE_g			= FAIL;
+hid_t H5T_STD_U8BE_g			= FAIL;
+hid_t H5T_STD_U8LE_g			= FAIL;
+hid_t H5T_STD_U16BE_g			= FAIL;
+hid_t H5T_STD_U16LE_g			= FAIL;
+hid_t H5T_STD_U32BE_g			= FAIL;
+hid_t H5T_STD_U32LE_g			= FAIL;
+hid_t H5T_STD_U64BE_g			= FAIL;
+hid_t H5T_STD_U64LE_g			= FAIL;
+hid_t H5T_STD_B8BE_g			= FAIL;
+hid_t H5T_STD_B8LE_g			= FAIL;
+hid_t H5T_STD_B16BE_g			= FAIL;
+hid_t H5T_STD_B16LE_g			= FAIL;
+hid_t H5T_STD_B32BE_g			= FAIL;
+hid_t H5T_STD_B32LE_g			= FAIL;
+hid_t H5T_STD_B64BE_g			= FAIL;
+hid_t H5T_STD_B64LE_g 			= FAIL;
+hid_t H5T_STD_REF_OBJ_g 		= FAIL;
+hid_t H5T_STD_REF_DSETREG_g 		= FAIL;
+
+hid_t H5T_UNIX_D32BE_g			= FAIL;
+hid_t H5T_UNIX_D32LE_g			= FAIL;
+hid_t H5T_UNIX_D64BE_g			= FAIL;
+hid_t H5T_UNIX_D64LE_g 			= FAIL;
+
+hid_t H5T_C_S1_g			= FAIL;
+
+hid_t H5T_FORTRAN_S1_g			= FAIL;
+
+hid_t H5T_NATIVE_SCHAR_g		= FAIL;
+hid_t H5T_NATIVE_UCHAR_g		= FAIL;
+hid_t H5T_NATIVE_SHORT_g		= FAIL;
+hid_t H5T_NATIVE_USHORT_g		= FAIL;
+hid_t H5T_NATIVE_INT_g			= FAIL;
+hid_t H5T_NATIVE_UINT_g			= FAIL;
+hid_t H5T_NATIVE_LONG_g			= FAIL;
+hid_t H5T_NATIVE_ULONG_g		= FAIL;
+hid_t H5T_NATIVE_LLONG_g		= FAIL;
+hid_t H5T_NATIVE_ULLONG_g		= FAIL;
+hid_t H5T_NATIVE_FLOAT_g		= FAIL;
+hid_t H5T_NATIVE_DOUBLE_g		= FAIL;
+hid_t H5T_NATIVE_LDOUBLE_g		= FAIL;
+hid_t H5T_NATIVE_B8_g			= FAIL;
+hid_t H5T_NATIVE_B16_g			= FAIL;
+hid_t H5T_NATIVE_B32_g			= FAIL;
+hid_t H5T_NATIVE_B64_g			= FAIL;
+hid_t H5T_NATIVE_OPAQUE_g		= FAIL;
+hid_t H5T_NATIVE_HADDR_g		= FAIL;
+hid_t H5T_NATIVE_HSIZE_g		= FAIL;
+hid_t H5T_NATIVE_HSSIZE_g		= FAIL;
+hid_t H5T_NATIVE_HERR_g			= FAIL;
+hid_t H5T_NATIVE_HBOOL_g		= FAIL;
+
+hid_t H5T_NATIVE_INT8_g			= FAIL;
+hid_t H5T_NATIVE_UINT8_g		= FAIL;
+hid_t H5T_NATIVE_INT_LEAST8_g		= FAIL;
+hid_t H5T_NATIVE_UINT_LEAST8_g		= FAIL;
+hid_t H5T_NATIVE_INT_FAST8_g		= FAIL;
+hid_t H5T_NATIVE_UINT_FAST8_g		= FAIL;
+
+hid_t H5T_NATIVE_INT16_g		= FAIL;
+hid_t H5T_NATIVE_UINT16_g		= FAIL;
+hid_t H5T_NATIVE_INT_LEAST16_g		= FAIL;
+hid_t H5T_NATIVE_UINT_LEAST16_g		= FAIL;
+hid_t H5T_NATIVE_INT_FAST16_g		= FAIL;
+hid_t H5T_NATIVE_UINT_FAST16_g		= FAIL;
+
+hid_t H5T_NATIVE_INT32_g		= FAIL;
+hid_t H5T_NATIVE_UINT32_g		= FAIL;
+hid_t H5T_NATIVE_INT_LEAST32_g		= FAIL;
+hid_t H5T_NATIVE_UINT_LEAST32_g		= FAIL;
+hid_t H5T_NATIVE_INT_FAST32_g		= FAIL;
+hid_t H5T_NATIVE_UINT_FAST32_g		= FAIL;
+
+hid_t H5T_NATIVE_INT64_g		= FAIL;
+hid_t H5T_NATIVE_UINT64_g		= FAIL;
+hid_t H5T_NATIVE_INT_LEAST64_g		= FAIL;
+hid_t H5T_NATIVE_UINT_LEAST64_g		= FAIL;
+hid_t H5T_NATIVE_INT_FAST64_g		= FAIL;
+hid_t H5T_NATIVE_UINT_FAST64_g		= FAIL;
+
+/*
+ * Alignment constraints for native types. These are initialized at run time
+ * in H5Tinit.c.  These alignments are mainly for offsets in HDF5 compound
+ * datatype or C structures, which are different from the alignments for memory
+ * address below this group of variables.
+ */
+size_t H5T_NATIVE_SCHAR_COMP_ALIGN_g		= 0;
+size_t H5T_NATIVE_UCHAR_COMP_ALIGN_g		= 0;
+size_t H5T_NATIVE_SHORT_COMP_ALIGN_g		= 0;
+size_t H5T_NATIVE_USHORT_COMP_ALIGN_g   	= 0;
+size_t H5T_NATIVE_INT_COMP_ALIGN_g		= 0;
+size_t H5T_NATIVE_UINT_COMP_ALIGN_g		= 0;
+size_t H5T_NATIVE_LONG_COMP_ALIGN_g		= 0;
+size_t H5T_NATIVE_ULONG_COMP_ALIGN_g		= 0;
+size_t H5T_NATIVE_LLONG_COMP_ALIGN_g		= 0;
+size_t H5T_NATIVE_ULLONG_COMP_ALIGN_g	        = 0;
+size_t H5T_NATIVE_FLOAT_COMP_ALIGN_g		= 0;
+size_t H5T_NATIVE_DOUBLE_COMP_ALIGN_g	        = 0;
+size_t H5T_NATIVE_LDOUBLE_COMP_ALIGN_g	        = 0;
+
+size_t H5T_POINTER_COMP_ALIGN_g	                = 0;
+size_t H5T_HVL_COMP_ALIGN_g	                = 0;
+size_t H5T_HOBJREF_COMP_ALIGN_g	                = 0;
+size_t H5T_HDSETREGREF_COMP_ALIGN_g	        = 0;
+
+/*
+ * Alignment constraints for native types. These are initialized at run time
+ * in H5Tinit.c
+ */
+size_t H5T_NATIVE_SCHAR_ALIGN_g		= 0;
+size_t H5T_NATIVE_UCHAR_ALIGN_g		= 0;
+size_t H5T_NATIVE_SHORT_ALIGN_g		= 0;
+size_t H5T_NATIVE_USHORT_ALIGN_g	= 0;
+size_t H5T_NATIVE_INT_ALIGN_g		= 0;
+size_t H5T_NATIVE_UINT_ALIGN_g		= 0;
+size_t H5T_NATIVE_LONG_ALIGN_g		= 0;
+size_t H5T_NATIVE_ULONG_ALIGN_g		= 0;
+size_t H5T_NATIVE_LLONG_ALIGN_g		= 0;
+size_t H5T_NATIVE_ULLONG_ALIGN_g	= 0;
+size_t H5T_NATIVE_FLOAT_ALIGN_g		= 0;
+size_t H5T_NATIVE_DOUBLE_ALIGN_g	= 0;
+size_t H5T_NATIVE_LDOUBLE_ALIGN_g	= 0;
+
+/*
+ * Alignment constraints for C9x types. These are initialized at run time in
+ * H5Tinit.c if the types are provided by the system. Otherwise we set their
+ * values to 0 here (no alignment calculated).
+ */
+size_t H5T_NATIVE_INT8_ALIGN_g		= 0;
+size_t H5T_NATIVE_UINT8_ALIGN_g		= 0;
+size_t H5T_NATIVE_INT_LEAST8_ALIGN_g	= 0;
+size_t H5T_NATIVE_UINT_LEAST8_ALIGN_g	= 0;
+size_t H5T_NATIVE_INT_FAST8_ALIGN_g	= 0;
+size_t H5T_NATIVE_UINT_FAST8_ALIGN_g	= 0;
+
+size_t H5T_NATIVE_INT16_ALIGN_g		= 0;
+size_t H5T_NATIVE_UINT16_ALIGN_g	= 0;
+size_t H5T_NATIVE_INT_LEAST16_ALIGN_g	= 0;
+size_t H5T_NATIVE_UINT_LEAST16_ALIGN_g	= 0;
+size_t H5T_NATIVE_INT_FAST16_ALIGN_g	= 0;
+size_t H5T_NATIVE_UINT_FAST16_ALIGN_g	= 0;
+
+size_t H5T_NATIVE_INT32_ALIGN_g		= 0;
+size_t H5T_NATIVE_UINT32_ALIGN_g	= 0;
+size_t H5T_NATIVE_INT_LEAST32_ALIGN_g	= 0;
+size_t H5T_NATIVE_UINT_LEAST32_ALIGN_g	= 0;
+size_t H5T_NATIVE_INT_FAST32_ALIGN_g	= 0;
+size_t H5T_NATIVE_UINT_FAST32_ALIGN_g	= 0;
+
+size_t H5T_NATIVE_INT64_ALIGN_g		= 0;
+size_t H5T_NATIVE_UINT64_ALIGN_g	= 0;
+size_t H5T_NATIVE_INT_LEAST64_ALIGN_g	= 0;
+size_t H5T_NATIVE_UINT_LEAST64_ALIGN_g	= 0;
+size_t H5T_NATIVE_INT_FAST64_ALIGN_g	= 0;
+size_t H5T_NATIVE_UINT_FAST64_ALIGN_g	= 0;
+
+/* Useful floating-point values for conversion routines */
+/* (+/- Inf for all floating-point types) */
+float H5T_NATIVE_FLOAT_POS_INF_g        = 0.0;
+float H5T_NATIVE_FLOAT_NEG_INF_g        = 0.0;
+double H5T_NATIVE_DOUBLE_POS_INF_g      = 0.0;
+double H5T_NATIVE_DOUBLE_NEG_INF_g      = 0.0;
+
+
+/*
+ * The path database. Each path has a source and destination data type pair
+ * which is used as the key by which the `entries' array is sorted.
+ */
+static struct {
+    int	npaths;		/*number of paths defined		*/
+    int	apaths;		/*number of paths allocated		*/
+    H5T_path_t	**path;		/*sorted array of path pointers		*/
+    int	nsoft;		/*number of soft conversions defined	*/
+    int	asoft;		/*number of soft conversions allocated	*/
+    H5T_soft_t	*soft;		/*unsorted array of soft conversions	*/
+} H5T_g;
+
+/* The overflow handler */
+H5T_overflow_t H5T_overflow_g = NULL;
+
+/* The native endianess of the platform */
+H5T_order_t H5T_native_order_g = H5T_ORDER_ERROR;
+
+/* Declare the free list for H5T_t's and H5T_shared_t's */
+H5FL_DEFINE(H5T_t);
+H5FL_DEFINE(H5T_shared_t);
+
+/* Declare the free list for H5T_path_t's */
+H5FL_DEFINE(H5T_path_t);
+
+/* Static local functions */
+static H5T_t *H5T_open_oid(H5G_entry_t *ent, hid_t dxpl_id);
+static herr_t H5T_print_stats(H5T_path_t *path, int *nprint/*in,out*/);
+static herr_t H5T_unregister(H5T_pers_t pers, const char *name, H5T_t *src,
+                H5T_t *dst, H5T_conv_t func, hid_t dxpl_id);
+static herr_t H5T_register(H5T_pers_t pers, const char *name, H5T_t *src,
+        H5T_t *dst, H5T_conv_t func, hid_t dxpl_id);
+
+/*
+ * Type initialization macros
+ *
+ * These use the "template macro" technique to reduce the amount of gratuitous
+ * duplicated code when initializing the datatypes for the library.  The main
+ * template macro is the H5T_INIT_TYPE() macro below.
+ *
+ */
+
+/* Define the code template for types which need no extra initialization for the "GUTS" in the H5T_INIT_TYPE macro */
+#define H5T_INIT_TYPE_NONE_CORE {					      \
+}
+
+/* Define the code template for bitfields for the "GUTS" in the H5T_INIT_TYPE macro */
+#define H5T_INIT_TYPE_BITFIELD_CORE {					      \
+    dt->shared->type = H5T_BITFIELD;						      \
+}
+
+/* Define the code template for times for the "GUTS" in the H5T_INIT_TYPE macro */
+#define H5T_INIT_TYPE_TIME_CORE {					      \
+    dt->shared->type = H5T_TIME;						      \
+}
+
+/* Define the code template for types which reset the offset for the "GUTS" in the H5T_INIT_TYPE macro */
+#define H5T_INIT_TYPE_OFFSET_CORE {					      \
+    dt->shared->u.atomic.offset = 0;						      \
+}
+
+/* Define common code for all numeric types (floating-point & int, signed & unsigned) */
+#define H5T_INIT_TYPE_NUM_COMMON(ENDIANNESS) {				      \
+    dt->shared->u.atomic.order = ENDIANNESS;					      \
+    dt->shared->u.atomic.offset = 0;						      \
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;				      \
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;				      \
+}
+
+/* Define the code templates for standard floats for the "GUTS" in the H5T_INIT_TYPE macro */
+#define H5T_INIT_TYPE_FLOAT_COMMON(ENDIANNESS) {			      \
+    H5T_INIT_TYPE_NUM_COMMON(ENDIANNESS)				      \
+    dt->shared->u.atomic.u.f.sign = 31;						      \
+    dt->shared->u.atomic.u.f.epos = 23;						      \
+    dt->shared->u.atomic.u.f.esize = 8;						      \
+    dt->shared->u.atomic.u.f.ebias = 0x7f;					      \
+    dt->shared->u.atomic.u.f.mpos = 0;						      \
+    dt->shared->u.atomic.u.f.msize = 23;					      \
+    dt->shared->u.atomic.u.f.norm = H5T_NORM_IMPLIED;				      \
+    dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO;				      \
+}
+
+#define H5T_INIT_TYPE_FLOATLE_CORE {					      \
+    H5T_INIT_TYPE_FLOAT_COMMON(H5T_ORDER_LE)				      \
+}
+
+#define H5T_INIT_TYPE_FLOATBE_CORE {					      \
+    H5T_INIT_TYPE_FLOAT_COMMON(H5T_ORDER_BE)				      \
+}
+
+/* Define the code templates for standard doubles for the "GUTS" in the H5T_INIT_TYPE macro */
+#define H5T_INIT_TYPE_DOUBLE_COMMON(ENDIANNESS) {			      \
+    H5T_INIT_TYPE_NUM_COMMON(ENDIANNESS)				      \
+    dt->shared->u.atomic.u.f.sign = 63;						      \
+    dt->shared->u.atomic.u.f.epos = 52;						      \
+    dt->shared->u.atomic.u.f.esize = 11;					      \
+    dt->shared->u.atomic.u.f.ebias = 0x03ff;					      \
+    dt->shared->u.atomic.u.f.mpos = 0;						      \
+    dt->shared->u.atomic.u.f.msize = 52;					      \
+    dt->shared->u.atomic.u.f.norm = H5T_NORM_IMPLIED;				      \
+    dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO;				      \
+}
+
+#define H5T_INIT_TYPE_DOUBLELE_CORE {					      \
+    H5T_INIT_TYPE_DOUBLE_COMMON(H5T_ORDER_LE)				      \
+}
+
+#define H5T_INIT_TYPE_DOUBLEBE_CORE {					      \
+    H5T_INIT_TYPE_DOUBLE_COMMON(H5T_ORDER_BE)				      \
+}
+
+/* Define the code templates for standard signed integers for the "GUTS" in the H5T_INIT_TYPE macro */
+#define H5T_INIT_TYPE_SINT_COMMON(ENDIANNESS) {				      \
+    H5T_INIT_TYPE_NUM_COMMON(ENDIANNESS)				      \
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_2;					      \
+}
+
+#define H5T_INIT_TYPE_SINTLE_CORE {					      \
+    H5T_INIT_TYPE_SINT_COMMON(H5T_ORDER_LE)				      \
+}
+
+#define H5T_INIT_TYPE_SINTBE_CORE {					      \
+    H5T_INIT_TYPE_SINT_COMMON(H5T_ORDER_BE)				      \
+}
+
+/* Define the code templates for standard unsigned integers for the "GUTS" in the H5T_INIT_TYPE macro */
+#define H5T_INIT_TYPE_UINT_COMMON(ENDIANNESS) {				      \
+    H5T_INIT_TYPE_NUM_COMMON(ENDIANNESS)				      \
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_NONE;				      \
+}
+
+#define H5T_INIT_TYPE_UINTLE_CORE {					      \
+    H5T_INIT_TYPE_UINT_COMMON(H5T_ORDER_LE)				      \
+}
+
+#define H5T_INIT_TYPE_UINTBE_CORE {					      \
+    H5T_INIT_TYPE_UINT_COMMON(H5T_ORDER_BE)				      \
+}
+
+/* Define a macro for common code for all newly allocate datatypes */
+#define H5T_INIT_TYPE_ALLOC_COMMON(TYPE) {				      \
+    dt->ent.header = HADDR_UNDEF;					      \
+    dt->shared->type = TYPE;							      \
+}
+
+/* Define the code templates for opaque for the "GUTS" in the H5T_INIT_TYPE macro */
+#define H5T_INIT_TYPE_OPAQ_CORE {					      \
+    H5T_INIT_TYPE_ALLOC_COMMON(H5T_OPAQUE)				      \
+    dt->shared->u.opaque.tag = H5MM_strdup("");					      \
+}
+
+/* Define the code templates for strings for the "GUTS" in the H5T_INIT_TYPE macro */
+#define H5T_INIT_TYPE_STRING_COMMON {					      \
+    H5T_INIT_TYPE_ALLOC_COMMON(H5T_STRING)				      \
+    H5T_INIT_TYPE_NUM_COMMON(H5T_ORDER_NONE)				      \
+    dt->shared->u.atomic.u.s.cset = H5T_CSET_ASCII;				      \
+}
+
+#define H5T_INIT_TYPE_CSTRING_CORE {					      \
+    H5T_INIT_TYPE_STRING_COMMON						      \
+    dt->shared->u.atomic.u.s.pad = H5T_STR_NULLTERM;				      \
+}
+
+#define H5T_INIT_TYPE_FORSTRING_CORE {					      \
+    H5T_INIT_TYPE_STRING_COMMON						      \
+    dt->shared->u.atomic.u.s.pad = H5T_STR_SPACEPAD;				      \
+}
+
+/* Define the code templates for references for the "GUTS" in the H5T_INIT_TYPE macro */
+#define H5T_INIT_TYPE_REF_COMMON(RTYPE) {				      \
+    H5T_INIT_TYPE_ALLOC_COMMON(H5T_REFERENCE)				      \
+    H5T_INIT_TYPE_NUM_COMMON(H5T_ORDER_NONE)				      \
+    dt->shared->u.atomic.u.r.rtype = RTYPE;					      \
+}
+
+#define H5T_INIT_TYPE_OBJREF_CORE {					      \
+    H5T_INIT_TYPE_REF_COMMON(H5R_OBJECT)				      \
+}
+
+#define H5T_INIT_TYPE_REGREF_CORE {					      \
+    H5T_INIT_TYPE_REF_COMMON(H5R_DATASET_REGION)			      \
+}
+
+/* Define the code templates for the "SIZE_TMPL" in the H5T_INIT_TYPE macro */
+#define H5T_INIT_TYPE_SET_SIZE(SIZE) {					      \
+    dt->shared->size = SIZE;							      \
+    dt->shared->u.atomic.prec = 8*SIZE;						      \
+}
+
+#define H5T_INIT_TYPE_NOSET_SIZE(SIZE) {				      \
+}
+
+/* Define the code templates for the "CRT_TMPL" in the H5T_INIT_TYPE macro */
+#define H5T_INIT_TYPE_COPY_CREATE(BASE) {				      \
+    /* Base off of existing datatype */					      \
+    if(NULL==(dt = H5T_copy(BASE,H5T_COPY_TRANSIENT)))			      \
+        HGOTO_ERROR (H5E_RESOURCE, H5E_CANTCOPY, FAIL, "duplicating base type failed") \
+}
+
+#define H5T_INIT_TYPE_ALLOC_CREATE(BASE) {				      \
+    /* Allocate new datatype info */					      \
+    if (NULL==(dt = H5T_alloc()))				              \
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed") \
+}
+
+
+#define H5T_INIT_TYPE(GUTS,GLOBAL,CRT_TMPL,BASE,SIZE_TMPL,SIZE) {	      \
+    /* Get new datatype struct */					      \
+    H5_GLUE3(H5T_INIT_TYPE_,CRT_TMPL,_CREATE)(BASE)			      \
+									      \
+    /* Adjust information for all types */				      \
+    dt->shared->state = H5T_STATE_IMMUTABLE;					      \
+    H5_GLUE3(H5T_INIT_TYPE_,SIZE_TMPL,_SIZE)(SIZE)			      \
+									      \
+    /* Adjust information for this type */				      \
+    H5_GLUE3(H5T_INIT_TYPE_,GUTS,_CORE)					      \
+									      \
+    /* Atomize result */						      \
+    if ((GLOBAL = H5I_register(H5I_DATATYPE, dt)) < 0)			      \
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register datatype atom") \
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_init
+ *
+ * Purpose:	Initialize the interface from some other package.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, December 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_init(void)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_init, FAIL);
+    /* FUNC_ENTER() does all the work */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_init_inf
+ *
+ * Purpose:	Initialize the +/- Infinity floating-poing values for type
+ *              conversion.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, November 22, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T_init_inf(void)
+{
+    H5T_t	*dst_p;		/* Datatype type operate on */
+    H5T_atomic_t *dst;		/* Datatype's atomic info */
+    uint8_t	*d;             /* Pointer to value to set */
+    size_t	half_size;	/* Half the type size */
+    size_t      u;              /* Local index value */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_init_inf);
+
+    /* Get the float datatype */
+    if (NULL==(dst_p=H5I_object(H5T_NATIVE_FLOAT_g)))
+        HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype");
+    dst = &dst_p->shared->u.atomic;
+
+    /* Check that we can re-order the bytes correctly */
+    if (H5T_ORDER_LE!=H5T_native_order_g && H5T_ORDER_BE!=H5T_native_order_g)
+        HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order");
+
+    /* +Inf */
+    d=(uint8_t *)&H5T_NATIVE_FLOAT_POS_INF_g;
+    H5T_bit_set (d, dst->u.f.sign, (size_t)1, FALSE);
+    H5T_bit_set (d, dst->u.f.epos, dst->u.f.esize, TRUE);
+    H5T_bit_set (d, dst->u.f.mpos, dst->u.f.msize, FALSE);
+
+    /* Swap the bytes if the machine architecture is big-endian */
+    if (H5T_ORDER_BE==H5T_native_order_g) {
+        half_size = dst_p->shared->size/2;
+        for (u=0; u<half_size; u++) {
+            uint8_t tmp = d[dst_p->shared->size-(u+1)];
+            d[dst_p->shared->size-(u+1)] = d[u];
+            d[u] = tmp;
+        }
+    }
+
+    /* -Inf */
+    d=(uint8_t *)&H5T_NATIVE_FLOAT_NEG_INF_g;
+    H5T_bit_set (d, dst->u.f.sign, (size_t)1, TRUE);
+    H5T_bit_set (d, dst->u.f.epos, dst->u.f.esize, TRUE);
+    H5T_bit_set (d, dst->u.f.mpos, dst->u.f.msize, FALSE);
+
+    /* Swap the bytes if the machine architecture is big-endian */
+    if (H5T_ORDER_BE==H5T_native_order_g) {
+        half_size = dst_p->shared->size/2;
+        for (u=0; u<half_size; u++) {
+            uint8_t tmp = d[dst_p->shared->size-(u+1)];
+            d[dst_p->shared->size-(u+1)] = d[u];
+            d[u] = tmp;
+        }
+    }
+
+    /* Get the double datatype */
+    if (NULL==(dst_p=H5I_object(H5T_NATIVE_DOUBLE_g)))
+        HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype");
+    dst = &dst_p->shared->u.atomic;
+
+    /* Check that we can re-order the bytes correctly */
+    if (H5T_ORDER_LE!=H5T_native_order_g && H5T_ORDER_BE!=H5T_native_order_g)
+        HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order");
+
+    /* +Inf */
+    d=(uint8_t *)&H5T_NATIVE_DOUBLE_POS_INF_g;
+    H5T_bit_set (d, dst->u.f.sign, (size_t)1, FALSE);
+    H5T_bit_set (d, dst->u.f.epos, dst->u.f.esize, TRUE);
+    H5T_bit_set (d, dst->u.f.mpos, dst->u.f.msize, FALSE);
+
+    /* Swap the bytes if the machine architecture is big-endian */
+    if (H5T_ORDER_BE==H5T_native_order_g) {
+        half_size = dst_p->shared->size/2;
+        for (u=0; u<half_size; u++) {
+            uint8_t tmp = d[dst_p->shared->size-(u+1)];
+            d[dst_p->shared->size-(u+1)] = d[u];
+            d[u] = tmp;
+        }
+    }
+
+    /* -Inf */
+    d=(uint8_t *)&H5T_NATIVE_DOUBLE_NEG_INF_g;
+    H5T_bit_set (d, dst->u.f.sign, (size_t)1, TRUE);
+    H5T_bit_set (d, dst->u.f.epos, dst->u.f.esize, TRUE);
+    H5T_bit_set (d, dst->u.f.mpos, dst->u.f.msize, FALSE);
+
+    /* Swap the bytes if the machine architecture is big-endian */
+    if (H5T_ORDER_BE==H5T_native_order_g) {
+        half_size = dst_p->shared->size/2;
+        for (u=0; u<half_size; u++) {
+            uint8_t tmp = d[dst_p->shared->size-(u+1)];
+            d[dst_p->shared->size-(u+1)] = d[u];
+            d[u] = tmp;
+        }
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_init_hw
+ *
+ * Purpose:	Perform hardware specific [floating-point] initialization
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, November 24, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T_init_hw(void)
+{
+#ifdef H5_HAVE_GET_FPC_CSR
+    union fpc_csr csr;          /* Union to hold results of floating-point status register query */
+#endif /* H5_HAVE_GET_FPC_CSR */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_hw);
+
+#ifdef H5_HAVE_GET_FPC_CSR
+    /* [This code is specific to SGI machines] */
+
+    /* Get the floating-point status register */
+    csr.fc_word=get_fpc_csr();
+
+    /* If the "flush denormalized values to zero" flag is set, unset it */
+    if(csr.fc_struct.flush) {
+        csr.fc_struct.flush=0;
+        set_fpc_csr(csr.fc_word);
+    } /* end if */
+#endif /* H5_HAVE_GET_FPC_CSR */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.
+
+--------------------------------------------------------------------------*/
+herr_t
+H5T_init_interface(void)
+{
+    H5T_t       *native_schar=NULL;     /* Datatype structure for native signed char */
+    H5T_t       *native_uchar=NULL;     /* Datatype structure for native unsigned char */
+    H5T_t       *native_short=NULL;     /* Datatype structure for native short */
+    H5T_t       *native_ushort=NULL;    /* Datatype structure for native unsigned short */
+    H5T_t       *native_int=NULL;       /* Datatype structure for native int */
+    H5T_t       *native_uint=NULL;      /* Datatype structure for native unsigned int */
+    H5T_t       *native_long=NULL;      /* Datatype structure for native long */
+    H5T_t       *native_ulong=NULL;     /* Datatype structure for native unsigned long */
+    H5T_t       *native_llong=NULL;     /* Datatype structure for native llong */
+    H5T_t       *native_ullong=NULL;    /* Datatype structure for native unsigned llong */
+    H5T_t       *native_float=NULL;     /* Datatype structure for native float */
+    H5T_t       *native_double=NULL;    /* Datatype structure for native double */
+    H5T_t       *std_u8le=NULL;         /* Datatype structure for unsigned 8-bit little-endian integer */
+    H5T_t       *std_u8be=NULL;         /* Datatype structure for unsigned 8-bit big-endian integer */
+    H5T_t       *std_u16le=NULL;        /* Datatype structure for unsigned 16-bit little-endian integer */
+    H5T_t       *std_u16be=NULL;        /* Datatype structure for unsigned 16-bit big-endian integer */
+    H5T_t       *std_u32le=NULL;        /* Datatype structure for unsigned 32-bit little-endian integer */
+    H5T_t       *std_u32be=NULL;        /* Datatype structure for unsigned 32-bit big-endian integer */
+    H5T_t       *std_i32le=NULL;        /* Datatype structure for signed 32-bit little-endian integer */
+    H5T_t       *std_u64le=NULL;        /* Datatype structure for unsigned 64-bit little-endian integer */
+    H5T_t       *std_u64be=NULL;        /* Datatype structure for unsigned 64-bit big-endian integer */
+    H5T_t       *ieee_f64le=NULL;       /* Datatype structure for IEEE 64-bit little-endian floating-point */
+    H5T_t	*dt = NULL;
+    H5T_t	*fixedpt=NULL;          /* Datatype structure for native int */
+    H5T_t	*floatpt=NULL;          /* Datatype structure for native float */
+    H5T_t	*string=NULL;           /* Datatype structure for C string */
+    H5T_t	*bitfield=NULL;         /* Datatype structure for bitfield */
+    H5T_t	*compound=NULL;         /* Datatype structure for compound objects */
+    H5T_t	*enum_type=NULL;        /* Datatype structure for enum objects */
+    H5T_t	*vlen=NULL;             /* Datatype structure for vlen objects */
+    H5T_t	*array=NULL;            /* Datatype structure for array objects */
+    hsize_t     dim[1]={1};             /* Dimension info for array datatype */
+    herr_t	status;
+    unsigned    copied_dtype=1;         /* Flag to indicate whether datatype was copied or allocated (for error cleanup) */
+    herr_t	ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_init_interface);
+
+    /* Initialize the atom group for the file IDs */
+    if (H5I_init_group(H5I_DATATYPE, (size_t)H5I_DATATYPEID_HASHSIZE, H5T_RESERVED_ATOMS, (H5I_free_t)H5T_close)<0)
+	HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize interface");
+
+    /* Make certain there aren't too many classes of datatypes defined */
+    /* Only 16 (numbered 0-15) are supported in the current file format */
+    assert(H5T_NCLASSES<16);
+
+    /* Perform any necessary hardware initializations */
+    if(H5T_init_hw()<0)
+	HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize interface");
+
+    /*
+     * Initialize pre-defined native data types from code generated during
+     * the library configuration by H5detect.
+     */
+    if (H5TN_init_interface()<0)
+	HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize interface");
+
+    /* Get the atomic datatype structures needed by the initialization code below */
+    if (NULL==(native_schar=H5I_object(H5T_NATIVE_SCHAR_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+    if (NULL==(native_uchar=H5I_object(H5T_NATIVE_UCHAR_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+    if (NULL==(native_short=H5I_object(H5T_NATIVE_SHORT_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+    if (NULL==(native_ushort=H5I_object(H5T_NATIVE_USHORT_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+    if (NULL==(native_int=H5I_object(H5T_NATIVE_INT_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+    if (NULL==(native_uint=H5I_object(H5T_NATIVE_UINT_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+    if (NULL==(native_long=H5I_object(H5T_NATIVE_LONG_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+    if (NULL==(native_ulong=H5I_object(H5T_NATIVE_ULONG_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+    if (NULL==(native_llong=H5I_object(H5T_NATIVE_LLONG_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+    if (NULL==(native_ullong=H5I_object(H5T_NATIVE_ULLONG_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+    if (NULL==(native_float=H5I_object(H5T_NATIVE_FLOAT_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+    if (NULL==(native_double=H5I_object(H5T_NATIVE_DOUBLE_g)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+
+    /*------------------------------------------------------------
+     * Native types
+     *------------------------------------------------------------
+     */
+
+    /* 1-byte bit field */
+    H5T_INIT_TYPE(BITFIELD,H5T_NATIVE_B8_g,COPY,native_uint,SET,1)
+
+    /* 2-byte bit field */
+    H5T_INIT_TYPE(BITFIELD,H5T_NATIVE_B16_g,COPY,native_uint,SET,2)
+
+    /* 4-byte bit field */
+    H5T_INIT_TYPE(BITFIELD,H5T_NATIVE_B32_g,COPY,native_uint,SET,4)
+
+    /* 8-byte bit field */
+    H5T_INIT_TYPE(BITFIELD,H5T_NATIVE_B64_g,COPY,native_uint,SET,8)
+
+    /* haddr_t */
+    H5T_INIT_TYPE(OFFSET,H5T_NATIVE_HADDR_g,COPY,native_uint,SET,sizeof(haddr_t))
+
+    /* hsize_t */
+    H5T_INIT_TYPE(OFFSET,H5T_NATIVE_HSIZE_g,COPY,native_uint,SET,sizeof(hsize_t))
+
+    /* hssize_t */
+    H5T_INIT_TYPE(OFFSET,H5T_NATIVE_HSSIZE_g,COPY,native_int,SET,sizeof(hssize_t))
+
+    /* herr_t */
+    H5T_INIT_TYPE(OFFSET,H5T_NATIVE_HERR_g,COPY,native_int,SET,sizeof(herr_t))
+
+    /* hbool_t */
+    H5T_INIT_TYPE(OFFSET,H5T_NATIVE_HBOOL_g,COPY,native_int,SET,sizeof(hbool_t))
+
+    /*------------------------------------------------------------
+     * IEEE Types
+     *------------------------------------------------------------
+     */
+
+    /* IEEE 4-byte little-endian float */
+    H5T_INIT_TYPE(FLOATLE,H5T_IEEE_F32LE_g,COPY,native_double,SET,4)
+
+    /* IEEE 4-byte big-endian float */
+    H5T_INIT_TYPE(FLOATBE,H5T_IEEE_F32BE_g,COPY,native_double,SET,4)
+
+    /* IEEE 8-byte little-endian float */
+    H5T_INIT_TYPE(DOUBLELE,H5T_IEEE_F64LE_g,COPY,native_double,SET,8)
+    ieee_f64le=dt;    /* Keep type for later */
+
+    /* IEEE 8-byte big-endian float */
+    H5T_INIT_TYPE(DOUBLEBE,H5T_IEEE_F64BE_g,COPY,native_double,SET,8)
+
+    /*------------------------------------------------------------
+     * Other "standard" types
+     *------------------------------------------------------------
+     */
+
+    /* 1-byte little-endian (endianness is irrelevant) signed integer */
+    H5T_INIT_TYPE(SINTLE,H5T_STD_I8LE_g,COPY,native_int,SET,1)
+
+    /* 1-byte big-endian (endianness is irrelevant) signed integer */
+    H5T_INIT_TYPE(SINTBE,H5T_STD_I8BE_g,COPY,native_int,SET,1)
+
+    /* 2-byte little-endian signed integer */
+    H5T_INIT_TYPE(SINTLE,H5T_STD_I16LE_g,COPY,native_int,SET,2)
+
+    /* 2-byte big-endian signed integer */
+    H5T_INIT_TYPE(SINTBE,H5T_STD_I16BE_g,COPY,native_int,SET,2)
+
+    /* 4-byte little-endian signed integer */
+    H5T_INIT_TYPE(SINTLE,H5T_STD_I32LE_g,COPY,native_int,SET,4)
+    std_i32le=dt;    /* Keep type for later */
+
+    /* 4-byte big-endian signed integer */
+    H5T_INIT_TYPE(SINTBE,H5T_STD_I32BE_g,COPY,native_int,SET,4)
+
+    /* 8-byte little-endian signed integer */
+    H5T_INIT_TYPE(SINTLE,H5T_STD_I64LE_g,COPY,native_int,SET,8)
+
+    /* 8-byte big-endian signed integer */
+    H5T_INIT_TYPE(SINTBE,H5T_STD_I64BE_g,COPY,native_int,SET,8)
+
+    /* 1-byte little-endian (endianness is irrelevant) unsigned integer */
+    H5T_INIT_TYPE(UINTLE,H5T_STD_U8LE_g,COPY,native_uint,SET,1)
+    std_u8le=dt;    /* Keep type for later */
+
+    /* 1-byte big-endian (endianness is irrelevant) unsigned integer */
+    H5T_INIT_TYPE(UINTBE,H5T_STD_U8BE_g,COPY,native_uint,SET,1)
+    std_u8be=dt;    /* Keep type for later */
+
+    /* 2-byte little-endian unsigned integer */
+    H5T_INIT_TYPE(UINTLE,H5T_STD_U16LE_g,COPY,native_uint,SET,2)
+    std_u16le=dt;    /* Keep type for later */
+
+    /* 2-byte big-endian unsigned integer */
+    H5T_INIT_TYPE(UINTBE,H5T_STD_U16BE_g,COPY,native_uint,SET,2)
+    std_u16be=dt;    /* Keep type for later */
+
+    /* 4-byte little-endian unsigned integer */
+    H5T_INIT_TYPE(UINTLE,H5T_STD_U32LE_g,COPY,native_uint,SET,4)
+    std_u32le=dt;    /* Keep type for later */
+
+    /* 4-byte big-endian unsigned integer */
+    H5T_INIT_TYPE(UINTBE,H5T_STD_U32BE_g,COPY,native_uint,SET,4)
+    std_u32be=dt;    /* Keep type for later */
+
+    /* 8-byte little-endian unsigned integer */
+    H5T_INIT_TYPE(UINTLE,H5T_STD_U64LE_g,COPY,native_uint,SET,8)
+    std_u64le=dt;    /* Keep type for later */
+
+    /* 8-byte big-endian unsigned integer */
+    H5T_INIT_TYPE(UINTBE,H5T_STD_U64BE_g,COPY,native_uint,SET,8)
+    std_u64be=dt;    /* Keep type for later */
+
+    /*------------------------------------------------------------
+     * Little- & Big-endian bitfields
+     *------------------------------------------------------------
+     */
+
+    /* little-endian (order is irrelevant) 8-bit bitfield */
+    H5T_INIT_TYPE(BITFIELD,H5T_STD_B8LE_g,COPY,std_u8le,NOSET,-)
+    bitfield=dt;    /* Keep type for later */
+
+    /* big-endian (order is irrelevant) 8-bit bitfield */
+    H5T_INIT_TYPE(BITFIELD,H5T_STD_B8BE_g,COPY,std_u8be,NOSET,-)
+
+    /* Little-endian 16-bit bitfield */
+    H5T_INIT_TYPE(BITFIELD,H5T_STD_B16LE_g,COPY,std_u16le,NOSET,-)
+
+    /* Big-endian 16-bit bitfield */
+    H5T_INIT_TYPE(BITFIELD,H5T_STD_B16BE_g,COPY,std_u16be,NOSET,-)
+
+    /* Little-endian 32-bit bitfield */
+    H5T_INIT_TYPE(BITFIELD,H5T_STD_B32LE_g,COPY,std_u32le,NOSET,-)
+
+    /* Big-endian 32-bit bitfield */
+    H5T_INIT_TYPE(BITFIELD,H5T_STD_B32BE_g,COPY,std_u32be,NOSET,-)
+
+    /* Little-endian 64-bit bitfield */
+    H5T_INIT_TYPE(BITFIELD,H5T_STD_B64LE_g,COPY,std_u64le,NOSET,-)
+
+    /* Big-endian 64-bit bitfield */
+    H5T_INIT_TYPE(BITFIELD,H5T_STD_B64BE_g,COPY,std_u64be,NOSET,-)
+
+    /*------------------------------------------------------------
+     * The Unix architecture for dates and times.
+     *------------------------------------------------------------
+     */
+
+    /* Little-endian 32-bit UNIX time_t */
+    H5T_INIT_TYPE(TIME,H5T_UNIX_D32LE_g,COPY,std_u32le,NOSET,-)
+
+    /* Big-endian 32-bit UNIX time_t */
+    H5T_INIT_TYPE(TIME,H5T_UNIX_D32BE_g,COPY,std_u32be,NOSET,-)
+
+    /* Little-endian 64-bit UNIX time_t */
+    H5T_INIT_TYPE(TIME,H5T_UNIX_D64LE_g,COPY,std_u64le,NOSET,-)
+
+    /* Big-endian 64-bit UNIX time_t */
+    H5T_INIT_TYPE(TIME,H5T_UNIX_D64BE_g,COPY,std_u64be,NOSET,-)
+
+
+    /* Indicate that the types that are created from here down are allocated
+     * H5FL_ALLOC(), not copied with H5T_copy()
+     */
+     copied_dtype=0;
+
+    /* Opaque data */
+    H5T_INIT_TYPE(OPAQ,H5T_NATIVE_OPAQUE_g,ALLOC,-,SET,1)
+
+    /*------------------------------------------------------------
+     * The `C' architecture
+     *------------------------------------------------------------
+     */
+
+    /* One-byte character string */
+    H5T_INIT_TYPE(CSTRING,H5T_C_S1_g,ALLOC,-,SET,1)
+    string=dt;    /* Keep type for later */
+
+    /*------------------------------------------------------------
+     * The `Fortran' architecture
+     *------------------------------------------------------------
+     */
+
+    /* One-byte character string */
+    H5T_INIT_TYPE(FORSTRING,H5T_FORTRAN_S1_g,ALLOC,-,SET,1)
+
+    /*------------------------------------------------------------
+     * Pointer types
+     *------------------------------------------------------------
+     */
+
+    /* Object pointer (i.e. object header address in file) */
+    H5T_INIT_TYPE(OBJREF,H5T_STD_REF_OBJ_g,ALLOC,-,SET,H5R_OBJ_REF_BUF_SIZE)
+
+    /* Dataset Region pointer (i.e. selection inside a dataset) */
+    H5T_INIT_TYPE(REGREF,H5T_STD_REF_DSETREG_g,ALLOC,-,SET,H5R_DSET_REG_REF_BUF_SIZE)
+
+    /*
+     * Register conversion functions beginning with the most general and
+     * ending with the most specific.
+     */
+    fixedpt = native_int;
+    floatpt = native_float;
+    if (NULL == (compound = H5T_create(H5T_COMPOUND, (size_t)1)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype");
+    if (NULL == (enum_type = H5T_create(H5T_ENUM, (size_t)1)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype");
+    if (NULL == (vlen = H5T_vlen_create(native_int)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype");
+    if (NULL == (array = H5T_array_create(native_int,1,dim,NULL)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype");
+    status = 0;
+
+    status |= H5T_register(H5T_PERS_SOFT, "i_i", fixedpt, fixedpt, H5T_conv_i_i, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_SOFT, "f_f", floatpt, floatpt, H5T_conv_f_f, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_SOFT, "s_s", string, string, H5T_conv_s_s, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_SOFT, "b_b", bitfield, bitfield, H5T_conv_b_b, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_SOFT, "ibo", fixedpt, fixedpt, H5T_conv_order, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_SOFT, "ibo(opt)", fixedpt, fixedpt, H5T_conv_order_opt, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_SOFT, "fbo", floatpt, floatpt, H5T_conv_order, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_SOFT, "fbo(opt)", floatpt, floatpt, H5T_conv_order_opt, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_SOFT, "struct(no-opt)", compound, compound, H5T_conv_struct, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_SOFT, "struct(opt)", compound, compound, H5T_conv_struct_opt, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_SOFT, "enum", enum_type, enum_type, H5T_conv_enum, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_SOFT, "vlen", vlen, vlen, H5T_conv_vlen, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_SOFT, "array", array, array, H5T_conv_array, H5AC_dxpl_id);
+
+    /* Custom conversion for 32-bit ints to 64-bit floats (undocumented) */
+    status |= H5T_register(H5T_PERS_HARD, "u32le_f64le", std_u32le, ieee_f64le, H5T_conv_i32le_f64le, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "i32le_f64le", std_i32le, ieee_f64le, H5T_conv_i32le_f64le, H5AC_dxpl_id);
+
+    /*
+     * Native conversions should be listed last since we can use hardware to
+     * perform the conversion.  We list the odd types like `llong', `long',
+     * and `short' before the usual types like `int' and `char' so that when
+     * diagnostics are printed we favor the usual names over the odd names
+     * when two or more types are the same size.
+     */
+
+    /* floating point */
+    status |= H5T_register(H5T_PERS_HARD, "flt_dbl", native_float, native_double, H5T_conv_float_double, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "dbl_flt", native_double, native_float, H5T_conv_double_float, H5AC_dxpl_id);
+
+    /* from long_long */
+    status |= H5T_register(H5T_PERS_HARD, "llong_ullong", native_llong, native_ullong, H5T_conv_llong_ullong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_llong", native_ullong, native_llong, H5T_conv_ullong_llong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "llong_long", native_llong, native_long, H5T_conv_llong_long, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "llong_ulong", native_llong, native_ulong, H5T_conv_llong_ulong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_long", native_ullong, native_long, H5T_conv_ullong_long, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_ulong", native_ullong, native_ulong, H5T_conv_ullong_ulong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "llong_short", native_llong, native_short, H5T_conv_llong_short, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "llong_ushort", native_llong, native_ushort, H5T_conv_llong_ushort, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_short", native_ullong, native_short, H5T_conv_ullong_short, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_ushort", native_ullong, native_ushort, H5T_conv_ullong_ushort, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "llong_int", native_llong, native_int, H5T_conv_llong_int, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "llong_uint", native_llong, native_uint, H5T_conv_llong_uint, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_int", native_ullong, native_int, H5T_conv_ullong_int, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_uint", native_ullong, native_uint, H5T_conv_ullong_uint, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "llong_schar", native_llong, native_schar, H5T_conv_llong_schar, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "llong_uchar", native_llong, native_uchar, H5T_conv_llong_uchar, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_schar", native_ullong, native_schar, H5T_conv_ullong_schar, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ullong_uchar", native_ullong, native_uchar, H5T_conv_ullong_uchar, H5AC_dxpl_id);
+
+    /* From long */
+    status |= H5T_register(H5T_PERS_HARD, "long_llong", native_long, native_llong, H5T_conv_long_llong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "long_ullong", native_long, native_ullong, H5T_conv_long_ullong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_llong", native_ulong, native_llong, H5T_conv_ulong_llong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_ullong", native_ulong, native_ullong, H5T_conv_ulong_ullong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "long_ulong", native_long, native_ulong, H5T_conv_long_ulong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_long", native_ulong, native_long, H5T_conv_ulong_long, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "long_short", native_long, native_short, H5T_conv_long_short, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "long_ushort", native_long, native_ushort, H5T_conv_long_ushort, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_short", native_ulong, native_short, H5T_conv_ulong_short, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_ushort", native_ulong, native_ushort, H5T_conv_ulong_ushort, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "long_int", native_long, native_int, H5T_conv_long_int, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "long_uint", native_long, native_uint, H5T_conv_long_uint, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_int", native_ulong, native_int, H5T_conv_ulong_int, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_uint", native_ulong, native_uint, H5T_conv_ulong_uint, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "long_schar", native_long, native_schar, H5T_conv_long_schar, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "long_uchar", native_long, native_uchar, H5T_conv_long_uchar, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_schar", native_ulong, native_schar, H5T_conv_ulong_schar, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ulong_uchar", native_ulong, native_uchar, H5T_conv_ulong_uchar, H5AC_dxpl_id);
+
+    /* From short */
+    status |= H5T_register(H5T_PERS_HARD, "short_llong", native_short, native_llong, H5T_conv_short_llong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "short_ullong", native_short, native_ullong, H5T_conv_short_ullong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_llong", native_ushort, native_llong, H5T_conv_ushort_llong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_ullong", native_ushort, native_ullong, H5T_conv_ushort_ullong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "short_long", native_short, native_long, H5T_conv_short_long, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "short_ulong", native_short, native_ulong, H5T_conv_short_ulong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_long", native_ushort, native_long, H5T_conv_ushort_long, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_ulong", native_ushort, native_ulong, H5T_conv_ushort_ulong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "short_ushort", native_short, native_ushort, H5T_conv_short_ushort, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_short", native_ushort, native_short, H5T_conv_ushort_short, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "short_int", native_short, native_int, H5T_conv_short_int, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "short_uint", native_short, native_uint, H5T_conv_short_uint, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_int", native_ushort, native_int, H5T_conv_ushort_int, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_uint", native_ushort, native_uint, H5T_conv_ushort_uint, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "short_schar", native_short, native_schar, H5T_conv_short_schar, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "short_uchar", native_short, native_uchar, H5T_conv_short_uchar, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_schar", native_ushort, native_schar, H5T_conv_ushort_schar, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "ushort_uchar", native_ushort, native_uchar, H5T_conv_ushort_uchar, H5AC_dxpl_id);
+
+    /* From int */
+    status |= H5T_register(H5T_PERS_HARD, "int_llong", native_int, native_llong, H5T_conv_int_llong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "int_ullong", native_int, native_ullong, H5T_conv_int_ullong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uint_llong", native_uint, native_llong, H5T_conv_uint_llong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uint_ullong", native_uint, native_ullong, H5T_conv_uint_ullong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "int_long", native_int, native_long, H5T_conv_int_long, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "int_ulong", native_int, native_ulong, H5T_conv_int_ulong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uint_long", native_uint, native_long, H5T_conv_uint_long, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uint_ulong", native_uint, native_ulong, H5T_conv_uint_ulong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "int_short", native_int, native_short, H5T_conv_int_short, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "int_ushort", native_int, native_ushort, H5T_conv_int_ushort, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uint_short", native_uint, native_short, H5T_conv_uint_short, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uint_ushort", native_uint, native_ushort, H5T_conv_uint_ushort, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "int_uint", native_int, native_uint, H5T_conv_int_uint, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uint_int", native_uint, native_int, H5T_conv_uint_int, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "int_schar", native_int, native_schar, H5T_conv_int_schar, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "int_uchar", native_int, native_uchar, H5T_conv_int_uchar, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uint_schar", native_uint, native_schar, H5T_conv_uint_schar, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uint_uchar", native_uint, native_uchar, H5T_conv_uint_uchar, H5AC_dxpl_id);
+
+    /* From char */
+    status |= H5T_register(H5T_PERS_HARD, "schar_llong", native_schar, native_llong, H5T_conv_schar_llong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "schar_ullong", native_schar, native_ullong, H5T_conv_schar_ullong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_llong", native_uchar, native_llong, H5T_conv_uchar_llong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_ullong", native_uchar, native_ullong, H5T_conv_uchar_ullong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "schar_long", native_schar, native_long, H5T_conv_schar_long, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "schar_ulong", native_schar, native_ulong, H5T_conv_schar_ulong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_long", native_uchar, native_long, H5T_conv_uchar_long, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_ulong", native_uchar, native_ulong, H5T_conv_uchar_ulong, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "schar_short", native_schar, native_short, H5T_conv_schar_short, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "schar_ushort", native_schar, native_ushort, H5T_conv_schar_ushort, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_short", native_uchar, native_short, H5T_conv_uchar_short, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_ushort", native_uchar, native_ushort, H5T_conv_uchar_ushort, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "schar_int", native_schar, native_int, H5T_conv_schar_int, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "schar_uint", native_schar, native_uint, H5T_conv_schar_uint, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_int", native_uchar, native_int, H5T_conv_uchar_int, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_uint", native_uchar, native_uint, H5T_conv_uchar_uint, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "schar_uchar", native_schar, native_uchar, H5T_conv_schar_uchar, H5AC_dxpl_id);
+    status |= H5T_register(H5T_PERS_HARD, "uchar_schar", native_uchar, native_schar, H5T_conv_uchar_schar, H5AC_dxpl_id);
+
+    /*
+     * The special no-op conversion is the fastest, so we list it last. The
+     * data types we use are not important as long as the source and
+     * destination are equal.
+     */
+    status |= H5T_register(H5T_PERS_HARD, "no-op", native_int, native_int, H5T_conv_noop, H5AC_dxpl_id);
+
+    /* Initialize the +/- Infinity values for floating-point types */
+    status |= H5T_init_inf();
+
+    if (status<0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to register conversion function(s)");
+
+done:
+    /* General cleanup */
+    if (compound!=NULL)
+        H5T_close(compound);
+    if (enum_type!=NULL)
+        H5T_close(enum_type);
+    if (vlen!=NULL)
+        H5T_close(vlen);
+    if (array!=NULL)
+        H5T_close(array);
+
+    /* Error cleanup */
+    if(ret_value<0) {
+        if(dt!=NULL) {
+            /* Check if we should call H5T_close or H5FL_FREE */
+            if(copied_dtype)
+                H5T_close(dt);
+            else
+            {
+                H5FL_FREE(H5T_shared_t, dt->shared);
+                H5FL_FREE(H5T_t,dt);
+            }
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_unlock_cb
+ *
+ * Purpose:	Clear the immutable flag for a data type.  This function is
+ *		called when the library is closing in order to unlock all
+ *		registered data types and thus make them free-able.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April 27, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5T_unlock_cb (void *_dt, hid_t UNUSED id, void UNUSED *key)
+{
+    H5T_t	*dt = (H5T_t *)_dt;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_unlock_cb);
+
+    assert (dt);
+    if (H5T_STATE_IMMUTABLE==dt->shared->state)
+	dt->shared->state = H5T_STATE_RDONLY;
+
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_term_interface
+ *
+ * Purpose:	Close this interface.
+ *
+ * Return:	Success:	Positive if any action might have caused a
+ *				change in some other interface; zero
+ *				otherwise.
+ *
+ * 		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, November 20, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 1998-06-11
+ *	Statistics are only printed for conversion functions that were
+ *	called.
+ *-------------------------------------------------------------------------
+ */
+int
+H5T_term_interface(void)
+{
+    int	i, nprint=0, n=0;
+    H5T_path_t	*path = NULL;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_term_interface);
+
+    if (H5_interface_initialize_g) {
+	/* Unregister all conversion functions */
+	for (i=0; i<H5T_g.npaths; i++) {
+	    path = H5T_g.path[i];
+	    assert (path);
+	    if (path->func) {
+		H5T_print_stats(path, &nprint/*in,out*/);
+		path->cdata.command = H5T_CONV_FREE;
+		if ((path->func)(FAIL, FAIL, &(path->cdata),
+				 (size_t)0, (size_t)0, (size_t)0,
+                                 NULL, NULL,H5AC_dxpl_id)<0) {
+#ifdef H5T_DEBUG
+		    if (H5DEBUG(T)) {
+			fprintf (H5DEBUG(T), "H5T: conversion function "
+				 "0x%08lx failed to free private data for "
+				 "%s (ignored)\n",
+				 (unsigned long)(path->func), path->name);
+		    }
+#endif
+		    H5E_clear(); /*ignore the error*/
+		}
+	    }
+
+            if(path->src)
+                H5T_close (path->src);
+            if(path->dst)
+                H5T_close (path->dst);
+            H5FL_FREE(H5T_path_t,path);
+	    H5T_g.path[i] = NULL;
+	}
+
+	/* Clear conversion tables */
+	H5T_g.path = H5MM_xfree(H5T_g.path);
+	H5T_g.npaths = H5T_g.apaths = 0;
+	H5T_g.soft = H5MM_xfree(H5T_g.soft);
+	H5T_g.nsoft = H5T_g.asoft = 0;
+
+	/* Unlock all datatypes, then free them */
+	H5I_search (H5I_DATATYPE, H5T_unlock_cb, NULL);
+	H5I_destroy_group(H5I_DATATYPE);
+
+        /* Reset all the datatype IDs */
+        H5T_IEEE_F32BE_g			= FAIL;
+        H5T_IEEE_F32LE_g			= FAIL;
+        H5T_IEEE_F64BE_g			= FAIL;
+        H5T_IEEE_F64LE_g			= FAIL;
+
+        H5T_STD_I8BE_g			= FAIL;
+        H5T_STD_I8LE_g			= FAIL;
+        H5T_STD_I16BE_g			= FAIL;
+        H5T_STD_I16LE_g			= FAIL;
+        H5T_STD_I32BE_g			= FAIL;
+        H5T_STD_I32LE_g			= FAIL;
+        H5T_STD_I64BE_g			= FAIL;
+        H5T_STD_I64LE_g			= FAIL;
+        H5T_STD_U8BE_g			= FAIL;
+        H5T_STD_U8LE_g			= FAIL;
+        H5T_STD_U16BE_g			= FAIL;
+        H5T_STD_U16LE_g			= FAIL;
+        H5T_STD_U32BE_g			= FAIL;
+        H5T_STD_U32LE_g			= FAIL;
+        H5T_STD_U64BE_g			= FAIL;
+        H5T_STD_U64LE_g			= FAIL;
+        H5T_STD_B8BE_g			= FAIL;
+        H5T_STD_B8LE_g			= FAIL;
+        H5T_STD_B16BE_g			= FAIL;
+        H5T_STD_B16LE_g			= FAIL;
+        H5T_STD_B32BE_g			= FAIL;
+        H5T_STD_B32LE_g			= FAIL;
+        H5T_STD_B64BE_g			= FAIL;
+        H5T_STD_B64LE_g 			= FAIL;
+        H5T_STD_REF_OBJ_g 		= FAIL;
+        H5T_STD_REF_DSETREG_g 		= FAIL;
+
+        H5T_UNIX_D32BE_g			= FAIL;
+        H5T_UNIX_D32LE_g			= FAIL;
+        H5T_UNIX_D64BE_g			= FAIL;
+        H5T_UNIX_D64LE_g 			= FAIL;
+
+        H5T_C_S1_g			= FAIL;
+
+        H5T_FORTRAN_S1_g			= FAIL;
+
+        H5T_NATIVE_SCHAR_g		= FAIL;
+        H5T_NATIVE_UCHAR_g		= FAIL;
+        H5T_NATIVE_SHORT_g		= FAIL;
+        H5T_NATIVE_USHORT_g		= FAIL;
+        H5T_NATIVE_INT_g			= FAIL;
+        H5T_NATIVE_UINT_g			= FAIL;
+        H5T_NATIVE_LONG_g			= FAIL;
+        H5T_NATIVE_ULONG_g		= FAIL;
+        H5T_NATIVE_LLONG_g		= FAIL;
+        H5T_NATIVE_ULLONG_g		= FAIL;
+        H5T_NATIVE_FLOAT_g		= FAIL;
+        H5T_NATIVE_DOUBLE_g		= FAIL;
+        H5T_NATIVE_LDOUBLE_g		= FAIL;
+        H5T_NATIVE_B8_g			= FAIL;
+        H5T_NATIVE_B16_g			= FAIL;
+        H5T_NATIVE_B32_g			= FAIL;
+        H5T_NATIVE_B64_g			= FAIL;
+        H5T_NATIVE_OPAQUE_g		= FAIL;
+        H5T_NATIVE_HADDR_g		= FAIL;
+        H5T_NATIVE_HSIZE_g		= FAIL;
+        H5T_NATIVE_HSSIZE_g		= FAIL;
+        H5T_NATIVE_HERR_g			= FAIL;
+        H5T_NATIVE_HBOOL_g		= FAIL;
+
+        H5T_NATIVE_INT8_g			= FAIL;
+        H5T_NATIVE_UINT8_g		= FAIL;
+        H5T_NATIVE_INT_LEAST8_g		= FAIL;
+        H5T_NATIVE_UINT_LEAST8_g		= FAIL;
+        H5T_NATIVE_INT_FAST8_g		= FAIL;
+        H5T_NATIVE_UINT_FAST8_g		= FAIL;
+
+        H5T_NATIVE_INT16_g		= FAIL;
+        H5T_NATIVE_UINT16_g		= FAIL;
+        H5T_NATIVE_INT_LEAST16_g		= FAIL;
+        H5T_NATIVE_UINT_LEAST16_g		= FAIL;
+        H5T_NATIVE_INT_FAST16_g		= FAIL;
+        H5T_NATIVE_UINT_FAST16_g		= FAIL;
+
+        H5T_NATIVE_INT32_g		= FAIL;
+        H5T_NATIVE_UINT32_g		= FAIL;
+        H5T_NATIVE_INT_LEAST32_g		= FAIL;
+        H5T_NATIVE_UINT_LEAST32_g		= FAIL;
+        H5T_NATIVE_INT_FAST32_g		= FAIL;
+        H5T_NATIVE_UINT_FAST32_g		= FAIL;
+
+        H5T_NATIVE_INT64_g		= FAIL;
+        H5T_NATIVE_UINT64_g		= FAIL;
+        H5T_NATIVE_INT_LEAST64_g		= FAIL;
+        H5T_NATIVE_UINT_LEAST64_g		= FAIL;
+        H5T_NATIVE_INT_FAST64_g		= FAIL;
+        H5T_NATIVE_UINT_FAST64_g		= FAIL;
+
+	/* Mark interface as closed */
+	H5_interface_initialize_g = 0;
+	n = 1; /*H5I*/
+    }
+    FUNC_LEAVE_NOAPI(n);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tcreate
+ *
+ * Purpose:	Create a new type and initialize it to reasonable values.
+ *		The type is a member of type class TYPE and is SIZE bytes.
+ *
+ * Return:	Success:	A new type identifier.
+ *
+ *		Failure:	Negative
+ *
+ * Errors:
+ *		ARGS	  BADVALUE	Invalid size.
+ *		DATATYPE  CANTINIT	Can't create type.
+ *		DATATYPE  CANTREGISTER	Can't register data type atom.
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, December  5, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Tcreate(H5T_class_t type, size_t size)
+{
+    H5T_t	*dt = NULL;
+    hid_t	ret_value;
+
+    FUNC_ENTER_API(H5Tcreate, FAIL);
+    H5TRACE2("i","Ttz",type,size);
+
+    /* check args */
+    if (size == 0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid size");
+
+    /* create the type */
+    if (NULL == (dt = H5T_create(type, size)))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to create type");
+
+    /* Make it an atom */
+    if ((ret_value = H5I_register(H5I_DATATYPE, dt)) < 0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register data type atom");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Topen
+ *
+ * Purpose:	Opens a named data type.
+ *
+ * Return:	Success:	Object ID of the named data type.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, June  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Topen(hid_t loc_id, const char *name)
+{
+    H5T_t       *type = NULL;
+    H5G_entry_t	*loc = NULL;
+    H5G_entry_t  ent;
+    hbool_t      ent_found = FALSE;     /* Entry at 'name' found */
+    hid_t        dxpl_id = H5AC_dxpl_id; /* dxpl to use to open datatype */
+    hid_t        ret_value =FAIL;
+
+    FUNC_ENTER_API(H5Topen, FAIL);
+    H5TRACE2("i","is",loc_id,name);
+
+    /* Check args */
+    if (NULL==(loc=H5G_loc (loc_id)))
+        HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a location");
+    if (!name || !*name)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no name");
+
+    /*
+     * Find the named data type object header and read the data type message
+     * from it.
+     */
+    if (H5G_find (loc, name, &ent/*out*/, dxpl_id)<0)
+        HGOTO_ERROR (H5E_DATATYPE, H5E_NOTFOUND, FAIL, "not found");
+    ent_found = TRUE;
+
+    /* Check that the object found is the correct type */
+    if (H5G_get_type(&ent, dxpl_id) != H5G_TYPE)
+        HGOTO_ERROR(H5E_DATASET, H5E_BADTYPE, FAIL, "not a named datatype")
+
+    /* Open it */
+    if ((type=H5T_open (&ent, dxpl_id)) ==NULL)
+        HGOTO_ERROR (H5E_DATATYPE, H5E_CANTOPENOBJ, FAIL, "unable to open named data type");
+
+    /* Register the type and return the ID */
+    if ((ret_value=H5I_register (H5I_DATATYPE, type))<0)
+        HGOTO_ERROR (H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register named data type");
+
+done:
+    if(ret_value<0) {
+        if(type!=NULL)
+            H5T_close(type);
+        else {
+            if(ent_found && ent.header)
+                H5G_free_ent_name(&ent);
+        } /* end else */
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tcopy
+ *
+ * Purpose:	Copies a data type.  The resulting data type is not locked.
+ *		The data type should be closed when no longer needed by
+ *		calling H5Tclose().
+ *
+ * Return:	Success:	The ID of a new data type.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *
+ * 	Robb Matzke, 4 Jun 1998
+ *	The returned type is always transient and unlocked.  If the TYPE_ID
+ *	argument is a dataset instead of a data type then this function
+ *	returns a transient, modifiable data type which is a copy of the
+ *	dataset's data type.
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Tcopy(hid_t type_id)
+{
+    H5T_t	*dt = NULL;
+    H5T_t	*new_dt = NULL;
+    H5D_t	*dset = NULL;
+    hid_t	ret_value;
+
+    FUNC_ENTER_API(H5Tcopy, FAIL);
+    H5TRACE1("i","i",type_id);
+
+    switch (H5I_get_type (type_id)) {
+        case H5I_DATATYPE:
+            /* The argument is a data type handle */
+            if (NULL==(dt=H5I_object (type_id)))
+                HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+            break;
+
+        case H5I_DATASET:
+            /* The argument is a dataset handle */
+            if (NULL==(dset=H5I_object (type_id)))
+                HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset");
+            if (NULL==(dt=H5D_typeof (dset)))
+                HGOTO_ERROR (H5E_DATASET, H5E_CANTINIT, FAIL, "unable to get the dataset data type");
+            break;
+
+        default:
+            HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type or dataset");
+    } /* end switch */
+
+    /* Copy */
+    if (NULL == (new_dt = H5T_copy(dt, H5T_COPY_TRANSIENT)))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to copy");
+
+    /* Atomize result */
+    if ((ret_value = H5I_register(H5I_DATATYPE, new_dt)) < 0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register data type atom");
+
+done:
+    if(ret_value<0) {
+        if(new_dt!=NULL)
+            H5T_close(new_dt);
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Tcopy() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tclose
+ *
+ * Purpose:	Frees a data type and all associated memory.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tclose(hid_t type_id)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tclose, FAIL);
+    H5TRACE1("e","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+    if (H5T_STATE_IMMUTABLE==dt->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "immutable data type");
+
+    /* When the reference count reaches zero the resources are freed */
+    if (H5I_dec_ref(type_id) < 0)
+	HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "problem freeing id");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tequal
+ *
+ * Purpose:	Determines if two data types are equal.
+ *
+ * Return:	Success:	TRUE if equal, FALSE if unequal
+ *
+ *		Failure:	Negative
+ *
+ * Errors:
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, December 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5Tequal(hid_t type1_id, hid_t type2_id)
+{
+    const H5T_t		*dt1 = NULL;
+    const H5T_t		*dt2 = NULL;
+    htri_t		ret_value;
+
+    FUNC_ENTER_API(H5Tequal, FAIL);
+    H5TRACE2("t","ii",type1_id,type2_id);
+
+    /* check args */
+    if (NULL == (dt1 = H5I_object_verify(type1_id,H5I_DATATYPE)) ||
+            NULL == (dt2 = H5I_object_verify(type2_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+
+    ret_value = (0 == H5T_cmp(dt1, dt2, FALSE)) ? TRUE : FALSE;
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tlock
+ *
+ * Purpose:	Locks a type, making it read only and non-destructable.	 This
+ *		is normally done by the library for predefined data types so
+ *		the application doesn't inadvertently change or delete a
+ *		predefined type.
+ *
+ *		Once a data type is locked it can never be unlocked unless
+ *		the entire library is closed.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January	 9, 1998
+ *
+ * Modifications:
+ *
+ * 	Robb Matzke, 1 Jun 1998
+ *	It is illegal to lock a named data type since we must allow named
+ *	types to be closed (to release file resources) but locking a type
+ *	prevents that.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tlock(hid_t type_id)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tlock, FAIL);
+    H5TRACE1("e","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+    if (H5T_STATE_NAMED==dt->shared->state || H5T_STATE_OPEN==dt->shared->state)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "unable to lock named data type");
+
+    if (H5T_lock (dt, TRUE)<0)
+	HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to lock transient data type");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_class
+ *
+ * Purpose:	Returns the data type class identifier for data type TYPE_ID.
+ *
+ * Return:	Success:	One of the non-negative data type class
+ *				constants.
+ *
+ *		Failure:	H5T_NO_CLASS (Negative)
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, December  8, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_class_t
+H5Tget_class(hid_t type_id)
+{
+    H5T_t	*dt = NULL;
+    H5T_class_t ret_value;       /* Return value */
+
+    FUNC_ENTER_API(H5Tget_class, H5T_NO_CLASS);
+    H5TRACE1("Tt","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_NO_CLASS, "not a data type");
+
+    /* Set return value */
+    ret_value= H5T_get_class(dt, FALSE);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_get_class
+ *
+ * Purpose:	Returns the data type class identifier for a datatype ptr.
+ *
+ * Return:	Success:	One of the non-negative data type class
+ *				constants.
+ *
+ *		Failure:	H5T_NO_CLASS (Negative)
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, December  8, 1997
+ *
+ * Modifications:
+ *      Broke out from H5Tget_class - QAK - 6/4/99
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_class_t
+H5T_get_class(const H5T_t *dt, htri_t internal)
+{
+    H5T_class_t ret_value;
+
+    FUNC_ENTER_NOAPI(H5T_get_class, H5T_NO_CLASS);
+
+    assert(dt);
+
+    /* Externally, a VL string is a string; internally, a VL string is a VL. */
+    if(internal) {
+        ret_value=dt->shared->type;
+    } else {
+        if(H5T_IS_VL_STRING(dt->shared))
+            ret_value=H5T_STRING;
+        else
+            ret_value=dt->shared->type;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5T_get_class() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tdetect_class
+ *
+ * Purpose:	Check whether a datatype contains (or is) a certain type of
+ *		datatype.
+ *
+ * Return:	TRUE (1) or FALSE (0) on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, November 29, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5Tdetect_class(hid_t type, H5T_class_t cls)
+{
+    H5T_t	*dt = NULL;
+    htri_t      ret_value;      /* Return value */
+
+    FUNC_ENTER_API(H5Tdetect_class, FAIL);
+    H5TRACE2("t","iTt",type,cls);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type,H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_NO_CLASS, "not a data type");
+    if (!(cls>H5T_NO_CLASS && cls<H5T_NCLASSES))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_NO_CLASS, "not a data type class");
+
+    /* Set return value.  Consider VL string as a string for API, as a VL for
+     * internal use. */
+    if(H5T_IS_VL_STRING(dt->shared))
+        ret_value = (H5T_STRING==cls);
+    else
+        ret_value=H5T_detect_class(dt,cls);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_detect_class
+ *
+ * Purpose:	Check whether a datatype contains (or is) a certain type of
+ *		datatype.
+ *
+ * Return:	TRUE (1) or FALSE (0) on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, November 29, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5T_detect_class (const H5T_t *dt, H5T_class_t cls)
+{
+    unsigned	i;
+    htri_t      ret_value=FALSE;        /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_detect_class, FAIL);
+
+    assert(dt);
+    assert(cls>H5T_NO_CLASS && cls<H5T_NCLASSES);
+
+    /* Check if this type is the correct type */
+    if(dt->shared->type==cls)
+        HGOTO_DONE(TRUE);
+
+    /* check for types that might have the correct type as a component */
+    switch(dt->shared->type) {
+        case H5T_COMPOUND:
+            for (i=0; i<dt->shared->u.compnd.nmembs; i++) {
+                htri_t nested_ret;      /* Return value from nested call */
+
+                /* Check if this field's type is the correct type */
+                if(dt->shared->u.compnd.memb[i].type->shared->type==cls)
+                    HGOTO_DONE(TRUE);
+
+                /* Recurse if it's VL, compound, enum or array */
+                if(H5T_IS_COMPLEX(dt->shared->u.compnd.memb[i].type->shared->type))
+                    if((nested_ret=H5T_detect_class(dt->shared->u.compnd.memb[i].type,cls))!=FALSE)
+                        HGOTO_DONE(nested_ret);
+            } /* end for */
+            break;
+
+        case H5T_ARRAY:
+        case H5T_VLEN:
+        case H5T_ENUM:
+            HGOTO_DONE(H5T_detect_class(dt->shared->parent,cls));
+
+        default:
+            break;
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tis_variable_str
+ *
+ * Purpose:	Check whether a datatype is a variable-length string
+ *
+ * Return:	TRUE (1) or FALSE (0) on success/Negative on failure
+ *
+ * Programmer:	Raymond Lu
+ *		November 4, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5Tis_variable_str(hid_t dtype_id)
+{
+    H5T_t	*dt;            /* Datatype to query */
+    htri_t      ret_value;      /* Return value */
+
+    FUNC_ENTER_API(H5Tis_variable_str, FAIL);
+    H5TRACE1("t","i",dtype_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(dtype_id,H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+
+    /* Set return value */
+    ret_value=H5T_IS_VL_STRING(dt->shared);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_size
+ *
+ * Purpose:	Determines the total size of a datatype in bytes.
+ *
+ * Return:	Success:	Size of the datatype in bytes.	 The size of
+ *				datatype is the size of an instance of that
+ *				datatype.
+ *
+ *		Failure:	0 (valid datatypes are never zero size)
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, December  8, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5Tget_size(hid_t type_id)
+{
+    H5T_t	*dt = NULL;
+    size_t	ret_value;
+
+    FUNC_ENTER_API(H5Tget_size, 0);
+    H5TRACE1("z","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a datatype");
+
+    /* size */
+    ret_value = H5T_get_size(dt);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Tget_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tset_size
+ *
+ * Purpose:	Sets the total size in bytes for a datatype (this operation
+ *		is not permitted on reference datatypes).  If the size is
+ *		decreased so that the significant bits of the datatype
+ *		extend beyond the edge of the new size, then the `offset'
+ *		property is decreased toward zero.  If the `offset' becomes
+ *		zero and the significant bits of the datatype still hang
+ *		over the edge of the new size, then the number of significant
+ *		bits is decreased.
+ *
+ *		Adjusting the size of an H5T_STRING automatically sets the
+ *		precision to 8*size.
+ *
+ *		All data types have a positive size.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Moved the real work into a private function.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tset_size(hid_t type_id, size_t size)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tset_size, FAIL);
+    H5TRACE2("e","iz",type_id,size);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+    if (H5T_STATE_TRANSIENT!=dt->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only");
+    if (size <= 0 && size!=H5T_VARIABLE)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "size must be positive");
+    if (size == H5T_VARIABLE && dt->shared->type!=H5T_STRING)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "only strings may be variable length");
+    if (H5T_ENUM==dt->shared->type && dt->shared->u.enumer.nmembs>0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not allowed after members are defined");
+    if (H5T_REFERENCE==dt->shared->type)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not defined for this datatype");
+    if (size==0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't adjust size to 0");
+
+    /* Do the work */
+    if (H5T_set_size(dt, size)<0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to set size for data type");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_super
+ *
+ * Purpose:	Returns the type from which TYPE is derived. In the case of
+ *		an enumeration type the return value is an integer type.
+ *
+ * Return:	Success:	Type ID for base data type.
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, December 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Tget_super(hid_t type)
+{
+    H5T_t	*dt=NULL, *super=NULL;
+    hid_t	ret_value;
+
+    FUNC_ENTER_API(H5Tget_super, FAIL);
+    H5TRACE1("i","i",type);
+
+    if (NULL==(dt=H5I_object_verify(type,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+    if((super=H5T_get_super(dt))==NULL)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "not a data type");
+    if ((ret_value=H5I_register(H5I_DATATYPE, super))<0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register parent data type");
+
+done:
+    if(ret_value<0) {
+        if(super!=NULL)
+            H5T_close(super);
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_get_super
+ *
+ * Purpose:	Private function for H5Tget_super.  Returns the type from
+ *              which TYPE is derived. In the case of an enumeration type
+ *              the return value is an integer type.
+ *
+ * Return:	Success:	Data type for base data type.
+ *
+ *		Failure:        NULL
+ *
+ * Programmer:	Raymond Lu
+ *              October 9, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_t *
+H5T_get_super(H5T_t *dt)
+{
+    H5T_t	*ret_value=NULL;
+
+    FUNC_ENTER_NOAPI(H5T_get_super, NULL);
+
+    assert(dt);
+
+    if (!dt->shared->parent)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "not a derived data type");
+    if (NULL==(ret_value=H5T_copy(dt->shared->parent, H5T_COPY_ALL)))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to copy parent data type");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_register
+ *
+ * Purpose:	Register a hard or soft conversion function for a data type
+ *		conversion path.  The path is specified by the source and
+ *		destination data types SRC_ID and DST_ID (for soft functions
+ *		only the class of these types is important). If FUNC is a
+ *		hard function then it replaces any previous path; if it's a
+ *		soft function then it replaces all existing paths to which it
+ *		applies and is used for any new path to which it applies as
+ *		long as that path doesn't have a hard function.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January	 9, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T_register(H5T_pers_t pers, const char *name, H5T_t *src, H5T_t *dst,
+	    H5T_conv_t func, hid_t dxpl_id)
+{
+    hid_t	tmp_sid=-1, tmp_did=-1;/*temporary data type IDs	*/
+    H5T_path_t	*old_path=NULL;		/*existing conversion path	*/
+    H5T_path_t	*new_path=NULL;		/*new conversion path		*/
+    H5T_cdata_t	cdata;			/*temporary conversion data	*/
+    int	nprint=0;		/*number of paths shut down	*/
+    int	i;			/*counter			*/
+    herr_t	ret_value=SUCCEED;		/*return value			*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_register);
+
+    /* Check args */
+    assert(src);
+    assert(dst);
+    assert(func);
+    assert(H5T_PERS_HARD==pers || H5T_PERS_SOFT==pers);
+    assert(name && *name);
+
+    if (H5T_PERS_HARD==pers) {
+        /* Only bother to register the path if it's not a no-op path (for this machine) */
+        if(H5T_cmp(src, dst, FALSE)) {
+            /* Locate or create a new conversion path */
+            if (NULL==(new_path=H5T_path_find(src, dst, name, func, dxpl_id)))
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to locate/allocate conversion path");
+
+            /*
+             * Notify all other functions to recalculate private data since some
+             * functions might cache a list of conversion functions.  For
+             * instance, the compound type converter caches a list of conversion
+             * functions for the members, so adding a new function should cause
+             * the list to be recalculated to use the new function.
+             */
+            for (i=0; i<H5T_g.npaths; i++) {
+                if (new_path != H5T_g.path[i])
+                    H5T_g.path[i]->cdata.recalc = TRUE;
+            } /* end for */
+	} /* end if */
+    } else {
+        /* Add function to end of soft list */
+        if (H5T_g.nsoft>=H5T_g.asoft) {
+            size_t na = MAX(32, 2*H5T_g.asoft);
+            H5T_soft_t *x = H5MM_realloc(H5T_g.soft, na*sizeof(H5T_soft_t));
+
+            if (!x)
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+            H5T_g.asoft = (int)na;
+            H5T_g.soft = x;
+        } /* end if */
+        HDstrncpy (H5T_g.soft[H5T_g.nsoft].name, name, (size_t)H5T_NAMELEN);
+        H5T_g.soft[H5T_g.nsoft].name[H5T_NAMELEN-1] = '\0';
+        H5T_g.soft[H5T_g.nsoft].src = src->shared->type;
+        H5T_g.soft[H5T_g.nsoft].dst = dst->shared->type;
+        H5T_g.soft[H5T_g.nsoft].func = func;
+        H5T_g.nsoft++;
+
+        /*
+         * Any existing path (except the no-op path) to which this new soft
+         * conversion function applies should be replaced by a new path that
+         * uses this function.
+         */
+        for (i=1; i<H5T_g.npaths; i++) {
+            old_path = H5T_g.path[i];
+            assert(old_path);
+
+            /* Does the new soft conversion function apply to this path? */
+            if (old_path->is_hard ||
+                    old_path->src->shared->type!=src->shared->type ||
+                    old_path->dst->shared->type!=dst->shared->type) {
+                continue;
+            }
+            if ((tmp_sid = H5I_register(H5I_DATATYPE, H5T_copy(old_path->src, H5T_COPY_ALL)))<0 ||
+                    (tmp_did = H5I_register(H5I_DATATYPE, H5T_copy(old_path->dst, H5T_COPY_ALL)))<0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register data types for conv query");
+            HDmemset(&cdata, 0, sizeof cdata);
+            cdata.command = H5T_CONV_INIT;
+            if ((func)(tmp_sid, tmp_did, &cdata, (size_t)0, (size_t)0, (size_t)0,
+                    NULL, NULL, dxpl_id)<0) {
+                H5I_dec_ref(tmp_sid);
+                H5I_dec_ref(tmp_did);
+                tmp_sid = tmp_did = -1;
+                H5E_clear();
+                continue;
+            } /* end if */
+
+            /* Create a new conversion path */
+            if (NULL==(new_path=H5FL_CALLOC(H5T_path_t)))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+            HDstrncpy(new_path->name, name, (size_t)H5T_NAMELEN);
+            new_path->name[H5T_NAMELEN-1] = '\0';
+            if (NULL==(new_path->src=H5T_copy(old_path->src, H5T_COPY_ALL)) ||
+                    NULL==(new_path->dst=H5T_copy(old_path->dst, H5T_COPY_ALL)))
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to copy data types");
+            new_path->func = func;
+            new_path->is_hard = FALSE;
+            new_path->cdata = cdata;
+
+            /* Replace previous path */
+            H5T_g.path[i] = new_path;
+            new_path = NULL; /*so we don't free it on error*/
+
+            /* Free old path */
+            H5T_print_stats(old_path, &nprint);
+            old_path->cdata.command = H5T_CONV_FREE;
+            if ((old_path->func)(tmp_sid, tmp_did, &(old_path->cdata),
+                    (size_t)0, (size_t)0, (size_t)0, NULL, NULL, dxpl_id)<0) {
+#ifdef H5T_DEBUG
+		if (H5DEBUG(T)) {
+		    fprintf (H5DEBUG(T), "H5T: conversion function 0x%08lx "
+			     "failed to free private data for %s (ignored)\n",
+			     (unsigned long)(old_path->func), old_path->name);
+		}
+#endif
+            } /* end if */
+            H5T_close(old_path->src);
+            H5T_close(old_path->dst);
+            H5FL_FREE(H5T_path_t,old_path);
+
+            /* Release temporary atoms */
+            H5I_dec_ref(tmp_sid);
+            H5I_dec_ref(tmp_did);
+            tmp_sid = tmp_did = -1;
+
+            /* We don't care about any failures during the freeing process */
+            H5E_clear();
+        } /* end for */
+    } /* end else */
+
+done:
+    if (ret_value<0) {
+	if (new_path) {
+	    if (new_path->src)
+                H5T_close(new_path->src);
+	    if (new_path->dst)
+                H5T_close(new_path->dst);
+            H5FL_FREE(H5T_path_t,new_path);
+	} /* end if */
+	if (tmp_sid>=0)
+            H5I_dec_ref(tmp_sid);
+	if (tmp_did>=0)
+            H5I_dec_ref(tmp_did);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5T_register() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tregister
+ *
+ * Purpose:	Register a hard or soft conversion function for a data type
+ *		conversion path.  The path is specified by the source and
+ *		destination data types SRC_ID and DST_ID (for soft functions
+ *		only the class of these types is important). If FUNC is a
+ *		hard function then it replaces any previous path; if it's a
+ *		soft function then it replaces all existing paths to which it
+ *		applies and is used for any new path to which it applies as
+ *		long as that path doesn't have a hard function.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January	 9, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tregister(H5T_pers_t pers, const char *name, hid_t src_id, hid_t dst_id,
+	    H5T_conv_t func)
+{
+    H5T_t	*src;		        /*source data type descriptor	*/
+    H5T_t	*dst;		        /*destination data type desc	*/
+    herr_t	ret_value=SUCCEED;	/*return value			*/
+
+    FUNC_ENTER_API(H5Tregister, FAIL);
+    H5TRACE5("e","Tesiix",pers,name,src_id,dst_id,func);
+
+    /* Check args */
+    if (H5T_PERS_HARD!=pers && H5T_PERS_SOFT!=pers)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid function persistence");
+    if (!name || !*name)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "conversion must have a name for debugging");
+    if (NULL==(src=H5I_object_verify(src_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+    if (NULL==(dst=H5I_object_verify(dst_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+    if (!func)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no conversion function specified");
+
+    /* Go register the function */
+    if(H5T_register(pers,name,src,dst,func,H5AC_ind_dxpl_id)<0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't register conversion function");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+} /* end H5Tregister() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_unregister
+ *
+ * Purpose:	Removes conversion paths that match the specified criteria.
+ *		All arguments are optional. Missing arguments are wild cards.
+ *		The special no-op path cannot be removed.
+ *
+ * Return:	Succeess:	non-negative
+ *
+ * 		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, January 13, 1998
+ *
+ * Modifications:
+ *      Adapted to non-API function - QAK, 11/17/99
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T_unregister(H5T_pers_t pers, const char *name, H5T_t *src, H5T_t *dst,
+	      H5T_conv_t func, hid_t dxpl_id)
+{
+    H5T_path_t	*path = NULL;		/*conversion path		*/
+    H5T_soft_t	*soft = NULL;		/*soft conversion information	*/
+    int	nprint=0;		/*number of paths shut down	*/
+    int	i;			/*counter			*/
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_unregister, FAIL);
+
+    /* Remove matching entries from the soft list */
+    if (H5T_PERS_DONTCARE==pers || H5T_PERS_SOFT==pers) {
+        for (i=H5T_g.nsoft-1; i>=0; --i) {
+            soft = H5T_g.soft+i;
+            assert(soft);
+            if (name && *name && HDstrcmp(name, soft->name)) continue;
+            if (src && src->shared->type!=soft->src) continue;
+            if (dst && dst->shared->type!=soft->dst) continue;
+            if (func && func!=soft->func) continue;
+
+            HDmemmove(H5T_g.soft+i, H5T_g.soft+i+1,
+                  (H5T_g.nsoft-(i+1)) * sizeof(H5T_soft_t));
+            --H5T_g.nsoft;
+        }
+    }
+
+    /* Remove matching conversion paths, except no-op path */
+    for (i=H5T_g.npaths-1; i>0; --i) {
+        path = H5T_g.path[i];
+        assert(path);
+
+        /* Not a match */
+        if (((H5T_PERS_SOFT==pers && path->is_hard) ||
+                    (H5T_PERS_HARD==pers && !path->is_hard)) ||
+                (name && *name && HDstrcmp(name, path->name)) ||
+                (src && H5T_cmp(src, path->src, FALSE)) ||
+                (dst && H5T_cmp(dst, path->dst, FALSE)) ||
+                (func && func!=path->func)) {
+            /*
+             * Notify all other functions to recalculate private data since some
+             * functions might cache a list of conversion functions.  For
+             * instance, the compound type converter caches a list of conversion
+             * functions for the members, so removing a function should cause
+             * the list to be recalculated to avoid the removed function.
+             */
+            path->cdata.recalc = TRUE;
+        } /* end if */
+        else {
+            /* Remove from table */
+            HDmemmove(H5T_g.path+i, H5T_g.path+i+1,
+                  (H5T_g.npaths-(i+1))*sizeof(H5T_path_t*));
+            --H5T_g.npaths;
+
+            /* Shut down path */
+            H5T_print_stats(path, &nprint);
+            path->cdata.command = H5T_CONV_FREE;
+            if ((path->func)(FAIL, FAIL, &(path->cdata),
+                    (size_t)0, (size_t)0, (size_t)0, NULL, NULL, dxpl_id)<0) {
+#ifdef H5T_DEBUG
+                if (H5DEBUG(T)) {
+                    fprintf(H5DEBUG(T), "H5T: conversion function 0x%08lx failed "
+                            "to free private data for %s (ignored)\n",
+                            (unsigned long)(path->func), path->name);
+                }
+#endif
+            }
+            H5T_close(path->src);
+            H5T_close(path->dst);
+            H5FL_FREE(H5T_path_t,path);
+            H5E_clear(); /*ignore all shutdown errors*/
+        } /* end else */
+    } /* end for */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5T_unregister() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tunregister
+ *
+ * Purpose:	Removes conversion paths that match the specified criteria.
+ *		All arguments are optional. Missing arguments are wild cards.
+ *		The special no-op path cannot be removed.
+ *
+ * Return:	Succeess:	non-negative
+ *
+ * 		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, January 13, 1998
+ *
+ * Modifications:
+ *      Changed to use H5T_unregister wrapper function - QAK, 11/17/99
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tunregister(H5T_pers_t pers, const char *name, hid_t src_id, hid_t dst_id,
+	      H5T_conv_t func)
+{
+    H5T_t	*src=NULL, *dst=NULL;	/*data type descriptors		*/
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tunregister, FAIL);
+    H5TRACE5("e","Tesiix",pers,name,src_id,dst_id,func);
+
+    /* Check arguments */
+    if (src_id>0 && (NULL==(src=H5I_object_verify(src_id,H5I_DATATYPE))))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "src is not a data type");
+    if (dst_id>0 && (NULL==(dst=H5I_object_verify(dst_id,H5I_DATATYPE))))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "dst is not a data type");
+
+    if (H5T_unregister(pers,name,src,dst,func,H5AC_ind_dxpl_id)<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTDELETE, FAIL, "internal unregister function failed");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tfind
+ *
+ * Purpose:	Finds a conversion function that can handle a conversion from
+ *		type SRC_ID to type DST_ID.  The PCDATA argument is a pointer
+ *		to a pointer to type conversion data which was created and
+ *		initialized by the type conversion function of this path
+ *		when the conversion function was installed on the path.
+ *
+ * Return:	Success:	A pointer to a suitable conversion function.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, January 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_conv_t
+H5Tfind(hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata)
+{
+    H5T_conv_t	ret_value;
+    H5T_t	*src = NULL, *dst = NULL;
+    H5T_path_t	*path = NULL;
+
+    FUNC_ENTER_API(H5Tfind, NULL);
+    H5TRACE3("x","iix",src_id,dst_id,pcdata);
+
+    /* Check args */
+    if (NULL == (src = H5I_object_verify(src_id,H5I_DATATYPE)) ||
+            NULL == (dst = H5I_object_verify(dst_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a data type");
+    if (!pcdata)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, NULL, "no address to receive cdata pointer");
+
+    /* Find it */
+    if (NULL==(path=H5T_path_find(src, dst, NULL, NULL, H5AC_ind_dxpl_id)))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, NULL, "conversion function not found");
+
+    if (pcdata)
+        *pcdata = &(path->cdata);
+
+    /* Set return value */
+    ret_value = path->func;
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tconvert
+ *
+ * Purpose:	Convert NELMTS elements from type SRC_ID to type DST_ID.  The
+ *		source elements are packed in BUF and on return the
+ *		destination will be packed in BUF.  That is, the conversion
+ *		is performed in place.  The optional background buffer is an
+ *		array of NELMTS values of destination type which are merged
+ *		with the converted values to fill in cracks (for instance,
+ *		BACKGROUND might be an array of structs with the `a' and `b'
+ *		fields already initialized and the conversion of BUF supplies
+ *		the `c' and `d' field values).  The PLIST_ID a dataset transfer
+ *      property list which is passed to the conversion functions.  (It's
+ *      currently only used to pass along the VL datatype custom allocation
+ *      information -QAK 7/1/99)
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, June 10, 1998
+ *
+ * Modifications:
+ *              Added xfer_parms argument to pass VL datatype custom allocation
+ *              information down the chain.  - QAK, 7/1/99
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tconvert(hid_t src_id, hid_t dst_id, size_t nelmts, void *buf,
+	    void *background, hid_t dxpl_id)
+{
+    H5T_path_t		*tpath=NULL;		/*type conversion info	*/
+    H5T_t		*src=NULL, *dst=NULL;	/*unatomized types	*/
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tconvert, FAIL);
+    H5TRACE6("e","iizxxi",src_id,dst_id,nelmts,buf,background,dxpl_id);
+
+    /* Check args */
+    if (NULL==(src=H5I_object_verify(src_id,H5I_DATATYPE)) ||
+            NULL==(dst=H5I_object_verify(dst_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+    if(H5P_DEFAULT == dxpl_id)
+        dxpl_id = H5P_DATASET_XFER_DEFAULT;
+    else
+        if(TRUE != H5P_isa_class(dxpl_id, H5P_DATASET_XFER))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not dataset transfer property list");
+
+    /* Find the conversion function */
+    if (NULL==(tpath=H5T_path_find(src, dst, NULL, NULL, dxpl_id)))
+	HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert between src and dst data types");
+
+    if (H5T_convert(tpath, src_id, dst_id, nelmts, (size_t)0, (size_t)0, buf, background, dxpl_id)<0)
+        HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "data type conversion failed");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_overflow
+ *
+ * Purpose:	Returns a pointer to the current global overflow function.
+ *		This is an application-defined function that is called
+ *		whenever a data type conversion causes an overflow.
+ *
+ * Return:	Success:	Ptr to an application-defined function.
+ *
+ *		Failure:	NULL (this can happen if no overflow handling
+ *				function is registered).
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, July  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_overflow_t
+H5Tget_overflow(void)
+{
+    H5T_overflow_t      ret_value;       /* Return value */
+
+    FUNC_ENTER_API(H5Tget_overflow, NULL);
+    H5TRACE0("x","");
+
+    if (NULL==H5T_overflow_g)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_UNINITIALIZED, NULL, "no overflow handling function is registered");
+
+    /* Set return value */
+    ret_value=H5T_overflow_g;
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tset_overflow
+ *
+ * Purpose:	Sets the overflow handler to be the specified function.  FUNC
+ *		will be called for all data type conversions that result in
+ *		an overflow.  See the definition of `H5T_overflow_t' for
+ *		documentation of arguments and return values.  The NULL
+ *		pointer may be passed to remove the overflow handler.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, July  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tset_overflow(H5T_overflow_t func)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_API(H5Tset_overflow, FAIL);
+    H5TRACE1("e","x",func);
+
+    H5T_overflow_g = func;
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+
+/*-------------------------------------------------------------------------
+ * API functions are above; library-private functions are below...
+ *-------------------------------------------------------------------------
+ */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_create
+ *
+ * Purpose:	Creates a new data type and initializes it to reasonable
+ *		values.	 The new data type is SIZE bytes and an instance of
+ *		the class TYPE.
+ *
+ * Return:	Success:	Pointer to the new type.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, December  5, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_t *
+H5T_create(H5T_class_t type, size_t size)
+{
+    H5T_t	*dt = NULL;
+    hid_t	subtype;
+    H5T_t	*ret_value;
+
+    FUNC_ENTER_NOAPI(H5T_create, NULL);
+
+    switch (type) {
+        case H5T_INTEGER:
+        case H5T_FLOAT:
+        case H5T_TIME:
+        case H5T_STRING:
+        case H5T_BITFIELD:
+            HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, NULL, "type class is not appropriate - use H5Tcopy()");
+
+        case H5T_OPAQUE:
+        case H5T_COMPOUND:
+            if(NULL == (dt = H5T_alloc()))
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+            dt->shared->type = type;
+
+            if(type==H5T_COMPOUND)
+                dt->shared->u.compnd.packed=TRUE;       /* Start out packed */
+            else if(type==H5T_OPAQUE)
+                /* Initialize the tag in case it's not set later.  A null tag will
+                 * cause problems for later operations. */
+                dt->shared->u.opaque.tag = H5MM_strdup("");
+            break;
+
+        case H5T_ENUM:
+            if (sizeof(char)==size) {
+                subtype = H5T_NATIVE_SCHAR_g;
+            } else if (sizeof(short)==size) {
+                subtype = H5T_NATIVE_SHORT_g;
+            } else if (sizeof(int)==size) {
+                subtype = H5T_NATIVE_INT_g;
+            } else if (sizeof(long)==size) {
+                subtype = H5T_NATIVE_LONG_g;
+            } else if (sizeof(long_long)==size) {
+                subtype = H5T_NATIVE_LLONG_g;
+            } else {
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "no applicable native integer type");
+            }
+            if(NULL == (dt = H5T_alloc()))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+            dt->shared->type = type;
+            if (NULL==(dt->shared->parent=H5T_copy(H5I_object(subtype), H5T_COPY_ALL)))
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to copy base data type");
+            break;
+
+        case H5T_VLEN:  /* Variable length datatype */
+            HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, NULL, "base type required - use H5Tvlen_create()");
+
+        case H5T_ARRAY:  /* Array datatype */
+            HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, NULL, "base type required - use H5Tarray_create()");
+
+        default:
+            HGOTO_ERROR(H5E_INTERNAL, H5E_UNSUPPORTED, NULL, "unknown data type class");
+    }
+
+    dt->shared->size = size;
+
+    /* Set return value */
+    ret_value=dt;
+
+done:
+    if(ret_value==NULL) {
+        if(dt->shared != NULL)
+            H5FL_FREE(H5T_shared_t, dt->shared);
+        if(dt!=NULL)
+            H5FL_FREE(H5T_t,dt);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_isa
+ *
+ * Purpose:	Determines if an object has the requisite messages for being
+ *		a data type.
+ *
+ * Return:	Success:	TRUE if the required data type messages are
+ *				present; FALSE otherwise.
+ *
+ *		Failure:	FAIL if the existence of certain messages
+ *				cannot be determined.
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November  2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5T_isa(H5G_entry_t *ent, hid_t dxpl_id)
+{
+    htri_t	ret_value;
+
+    FUNC_ENTER_NOAPI(H5T_isa, FAIL);
+    assert(ent);
+
+    if ((ret_value=H5O_exists(ent, H5O_DTYPE_ID, 0, dxpl_id))<0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to read object header");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_open
+ *
+ * Purpose:	Open a named data type.
+ *
+ * Return:	Success:	Ptr to a new data type.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, June  1, 1998
+ *
+ * Modifications:
+ *      Changed to use H5T_open_oid - QAK - 3/17/99
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_t*
+H5T_open (H5G_entry_t *ent, hid_t dxpl_id)
+{
+    H5T_shared_t   *shared_fo=NULL;
+    H5T_t          *dt=NULL;
+    H5T_t          *ret_value;
+
+    FUNC_ENTER_NOAPI(H5T_open, NULL);
+
+    assert (ent);
+
+    /* Check if datatype was already open */
+    if((shared_fo=H5FO_opened(ent->file,ent->header))==NULL) {
+        /* Clear any errors from H5FO_opened() */
+        H5E_clear();
+
+        /* Open the datatype object */
+        if ((dt=H5T_open_oid(ent, dxpl_id)) ==NULL)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, NULL, "not found");
+
+        /* Add the datatype to the list of opened objects in the file */
+        if(H5FO_insert(dt->ent.file, dt->ent.header, dt->shared)<0)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINSERT, NULL, "can't insert datatype into list of open objects")
+
+        /* Increment object count for the object in the top file */
+        if(H5FO_top_incr(dt->ent.file, dt->ent.header) < 0)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINC, NULL, "can't increment object count")
+
+        /* Mark any datatypes as being in memory now */
+        if (H5T_vlen_mark(dt, NULL, H5T_VLEN_MEMORY)<0)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "invalid datatype location")
+
+        dt->shared->fo_count=1;
+    }
+    else
+    {
+        if(NULL == (dt = H5FL_MALLOC(H5T_t)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "can't allocate space for datatype")
+
+        /* Shallow copy (take ownership) of the group entry object */
+        if(H5G_ent_copy(&(dt->ent),ent,H5G_COPY_SHALLOW)<0)
+            HGOTO_ERROR (H5E_DATATYPE, H5E_CANTCOPY, NULL, "can't copy group entry")
+
+        dt->shared=shared_fo;
+
+        shared_fo->fo_count++;
+
+        /* Check if the object has been opened through the top file yet */
+        if(H5FO_top_count(dt->ent.file, dt->ent.header) == 0) {
+            /* Open the object through this top file */
+            if(H5O_open(&(dt->ent)) < 0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTOPENOBJ, NULL, "unable to open object header")
+        } /* end if */
+
+        /* Increment object count for the object in the top file */
+        if(H5FO_top_incr(dt->ent.file, dt->ent.header) < 0)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINC, NULL, "can't increment object count")
+    }
+
+    ret_value = dt;
+
+done:
+    if(ret_value==NULL) {
+        if(dt) {
+            if(shared_fo==NULL)   /* Need to free shared fo */
+                H5FL_FREE(H5T_shared_t, dt->shared);
+            H5FL_FREE(H5T_t, dt);
+        }
+        if(shared_fo)
+            shared_fo->fo_count--;
+    }
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_open_oid
+ *
+ * Purpose:	Open a named data type.
+ *
+ * Return:	Success:	Ptr to a new data type.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, March 17, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_t *
+H5T_open_oid (H5G_entry_t *ent, hid_t dxpl_id)
+{
+    H5T_t	*dt=NULL;
+    H5T_t	*ret_value;
+
+    FUNC_ENTER_NOAPI(H5T_open_oid, NULL);
+
+    assert (ent);
+
+    if (H5O_open (ent)<0)
+	HGOTO_ERROR (H5E_DATATYPE, H5E_CANTOPENOBJ, NULL, "unable to open named data type");
+    if (NULL==(dt=H5O_read (ent, H5O_DTYPE_ID, 0, NULL, dxpl_id)))
+	HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to load type message from object header");
+
+    /* Mark the type as named and open */
+    dt->shared->state = H5T_STATE_OPEN;
+
+    /* Shallow copy (take ownership) of the group entry object */
+    H5G_ent_copy(&(dt->ent),ent,H5G_COPY_SHALLOW);
+
+    /* Set return value */
+    ret_value=dt;
+
+done:
+    if(ret_value==NULL) {
+        if(dt==NULL)
+            H5O_close(ent);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_copy
+ *
+ * Purpose:	Copies datatype OLD_DT.	 The resulting data type is not
+ *		locked and is a transient type.
+ *
+ * Return:	Success:	Pointer to a new copy of the OLD_DT argument.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, December  4, 1997
+ *
+ * Modifications:
+ *
+ * 	Robb Matzke, 4 Jun 1998
+ *	Added the METHOD argument.  If it's H5T_COPY_TRANSIENT then the
+ *	result will be an unlocked transient type.  Otherwise if it's
+ *	H5T_COPY_ALL then the result is a named type if the original is a
+ *	named type, but the result is not opened.  Finally, if it's
+ *	H5T_COPY_REOPEN and the original type is a named type then the result
+ *	is a named type and the type object header is opened again.  The
+ *	H5T_COPY_REOPEN method is used when returning a named type to the
+ *	application.
+ *
+ * 	Robb Matzke, 22 Dec 1998
+ *	Now able to copy enumeration data types.
+ *
+ *      Robb Matzke, 20 May 1999
+ *	Now able to copy opaque types.
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 21 Sep 2002
+ *      Added a deep copy of the symbol table entry
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_t *
+H5T_copy(const H5T_t *old_dt, H5T_copy_t method)
+{
+    H5T_t	*new_dt=NULL, *tmp=NULL;
+    H5T_shared_t    *reopened_fo;
+    unsigned	i;
+    char	*s;
+    H5T_t	*ret_value;
+
+    FUNC_ENTER_NOAPI(H5T_copy, NULL);
+
+    /* check args */
+    assert(old_dt);
+
+    /* Allocate space */
+    if (NULL==(new_dt = H5FL_MALLOC(H5T_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    if (NULL==(new_dt->shared = H5FL_MALLOC(H5T_shared_t)))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+    /* Copy shared information (entry information is copied last) */
+    *(new_dt->shared) = *(old_dt->shared);
+
+    /* Copy parent information */
+    if (new_dt->shared->parent)
+        new_dt->shared->parent = H5T_copy(new_dt->shared->parent, method);
+
+    /* Check what sort of copy we are making */
+    switch (method) {
+        case H5T_COPY_TRANSIENT:
+            /*
+             * Return an unlocked transient type.
+             */
+            new_dt->shared->state = H5T_STATE_TRANSIENT;
+            break;
+
+        case H5T_COPY_ALL:
+            /*
+             * Return a transient type (locked or unlocked) or an unopened named
+             * type.  Immutable transient types are degraded to read-only.
+             */
+            if (H5T_STATE_OPEN==old_dt->shared->state) {
+                new_dt->shared->state = H5T_STATE_NAMED;
+            } else if (H5T_STATE_IMMUTABLE==old_dt->shared->state) {
+                new_dt->shared->state = H5T_STATE_RDONLY;
+            }
+            break;
+
+        case H5T_COPY_REOPEN:
+            /*
+             * Return a transient type (locked or unlocked) or an opened named
+             * type.  Immutable transient types are degraded to read-only.
+             */
+            if (H5F_addr_defined(old_dt->ent.header)) {
+                /* Check if the object is already open */
+                if((reopened_fo=H5FO_opened(old_dt->ent.file, old_dt->ent.header))==NULL) {
+                    /* Clear any errors from H5FO_opened() */
+                    H5E_clear();
+
+                    /* Open named datatype again */
+                    if (H5O_open (&(old_dt->ent))<0)
+                        HGOTO_ERROR (H5E_DATATYPE, H5E_CANTOPENOBJ, NULL, "unable to reopen named data type");
+
+                    /* Insert opened named datatype into opened object list for the file */
+                    if(H5FO_insert(old_dt->ent.file, old_dt->ent.header, new_dt->shared)<0)
+                        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINSERT, NULL, "can't insert datatype into list of open objects")
+
+                    /* Increment object count for the object in the top file */
+                    if(H5FO_top_incr(old_dt->ent.file, old_dt->ent.header) < 0)
+                        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINC, NULL, "can't increment object count")
+
+                    new_dt->shared->fo_count=1;
+                } else {
+                    /* The object is already open.  Free the H5T_shared_t struct
+                     * we had been using and use the one that already exists.
+                     * Not terribly efficient. */
+                    H5FL_FREE(H5T_shared_t, new_dt->shared);
+                    new_dt->shared = reopened_fo;
+
+                    reopened_fo->fo_count++;
+
+                    /* Check if the object has been opened through the top file yet */
+                    if(H5FO_top_count(old_dt->ent.file, old_dt->ent.header) == 0) {
+                        /* Open the object through this top file */
+                        if(H5O_open(&(old_dt->ent)) < 0)
+                            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTOPENOBJ, NULL, "unable to open object header")
+                    } /* end if */
+
+                    /* Increment object count for the object in the top file */
+                    if(H5FO_top_incr(old_dt->ent.file, old_dt->ent.header) < 0)
+                        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINC, NULL, "can't increment object count")
+                }
+                new_dt->shared->state = H5T_STATE_OPEN;
+            } else if (H5T_STATE_IMMUTABLE==old_dt->shared->state) {
+                new_dt->shared->state = H5T_STATE_RDONLY;
+            }
+            break;
+    } /* end switch */
+
+    switch(new_dt->shared->type) {
+        case H5T_COMPOUND:
+            {
+            int accum_change=0;    /* Amount of change in the offset of the fields */
+
+            /*
+             * Copy all member fields to new type, then overwrite the
+             * name and type fields of each new member with copied values.
+             * That is, H5T_copy() is a deep copy.
+             */
+            new_dt->shared->u.compnd.memb = H5MM_malloc(new_dt->shared->u.compnd.nalloc *
+                                sizeof(H5T_cmemb_t));
+            if (NULL==new_dt->shared->u.compnd.memb)
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+
+            HDmemcpy(new_dt->shared->u.compnd.memb, old_dt->shared->u.compnd.memb,
+                 new_dt->shared->u.compnd.nmembs * sizeof(H5T_cmemb_t));
+
+            for (i=0; i<new_dt->shared->u.compnd.nmembs; i++) {
+                unsigned	j;
+                int    old_match;
+
+                s = new_dt->shared->u.compnd.memb[i].name;
+                new_dt->shared->u.compnd.memb[i].name = H5MM_xstrdup(s);
+                tmp = H5T_copy (old_dt->shared->u.compnd.memb[i].type, method);
+                new_dt->shared->u.compnd.memb[i].type = tmp;
+
+                /* Apply the accumulated size change to the offset of the field */
+                new_dt->shared->u.compnd.memb[i].offset += accum_change;
+
+                if(old_dt->shared->u.compnd.sorted != H5T_SORT_VALUE) {
+                    for (old_match=-1, j=0; j<old_dt->shared->u.compnd.nmembs; j++) {
+                        if(!HDstrcmp(new_dt->shared->u.compnd.memb[i].name,old_dt->shared->u.compnd.memb[j].name)) {
+                            old_match=j;
+                            break;
+                        } /* end if */
+                    } /* end for */
+
+                    /* check if we couldn't find a match */
+                    if(old_match<0)
+                        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCOPY, NULL, "fields in datatype corrupted");
+                } /* end if */
+                else {
+                    old_match=i;
+                } /* end else */
+
+                /* If the field changed size, add that change to the accumulated size change */
+                if(new_dt->shared->u.compnd.memb[i].type->shared->size != old_dt->shared->u.compnd.memb[old_match].type->shared->size) {
+                    /* Adjust the size of the member */
+                    new_dt->shared->u.compnd.memb[i].size = (old_dt->shared->u.compnd.memb[old_match].size*tmp->shared->size)/old_dt->shared->u.compnd.memb[old_match].type->shared->size;
+
+                    accum_change += (new_dt->shared->u.compnd.memb[i].type->shared->size - old_dt->shared->u.compnd.memb[old_match].type->shared->size);
+                } /* end if */
+            } /* end for */
+
+            /* Apply the accumulated size change to the size of the compound struct */
+            new_dt->shared->size += accum_change;
+
+            }
+            break;
+
+        case H5T_ENUM:
+            /*
+             * Copy all member fields to new type, then overwrite the name fields
+             * of each new member with copied values. That is, H5T_copy() is a
+             * deep copy.
+             */
+            new_dt->shared->u.enumer.name = H5MM_malloc(new_dt->shared->u.enumer.nalloc *
+                                sizeof(char*));
+            new_dt->shared->u.enumer.value = H5MM_malloc(new_dt->shared->u.enumer.nalloc *
+                                 new_dt->shared->size);
+            if (NULL==new_dt->shared->u.enumer.value)
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+            HDmemcpy(new_dt->shared->u.enumer.value, old_dt->shared->u.enumer.value,
+                 new_dt->shared->u.enumer.nmembs * new_dt->shared->size);
+            for (i=0; i<new_dt->shared->u.enumer.nmembs; i++) {
+                s = old_dt->shared->u.enumer.name[i];
+                new_dt->shared->u.enumer.name[i] = H5MM_xstrdup(s);
+            }
+            break;
+
+        case H5T_VLEN:
+            if(method==H5T_COPY_TRANSIENT || method==H5T_COPY_REOPEN) {
+                /* H5T_copy converts any VL type into a memory VL type */
+                if (H5T_vlen_mark(new_dt, NULL, H5T_VLEN_MEMORY)<0)
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "invalid VL location");
+            }
+            break;
+
+        case H5T_OPAQUE:
+            /*
+             * Copy the tag name.
+             */
+            new_dt->shared->u.opaque.tag = HDstrdup(new_dt->shared->u.opaque.tag);
+            break;
+
+        case H5T_ARRAY:
+            /* Re-compute the array's size, in case it's base type changed size */
+            new_dt->shared->size=new_dt->shared->u.array.nelem*new_dt->shared->parent->shared->size;
+            break;
+
+        default:
+            break;
+    } /* end switch */
+
+    /* Deep copy of the symbol table entry, if there was one */
+    if ( new_dt->shared->state == H5T_STATE_NAMED || new_dt->shared->state == H5T_STATE_OPEN) {
+        if (!H5F_addr_defined(old_dt->ent.header))
+            HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, NULL, "named dataype with invalid address");
+        if (H5G_ent_copy(&(new_dt->ent), &(old_dt->ent),H5G_COPY_DEEP)<0)
+            HGOTO_ERROR(H5E_SYM, H5E_CANTOPENOBJ, NULL, "unable to copy entry");
+    } /* end if */
+    else {
+        HDmemset (&(new_dt->ent), 0, sizeof(new_dt->ent));
+        new_dt->ent.header = HADDR_UNDEF;
+    } /* end else */
+
+    /* Set return value */
+    ret_value=new_dt;
+
+done:
+    if(ret_value==NULL) {
+        if(new_dt->shared != NULL)
+            H5FL_FREE(H5T_shared_t, new_dt->shared);
+        if(new_dt!=NULL)
+            H5FL_FREE (H5T_t,new_dt);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_lock
+ *
+ * Purpose:	Lock a transient data type making it read-only.  If IMMUTABLE
+ *		is set then the type cannot be closed except when the library
+ *		itself closes.
+ *
+ *		This function is a no-op if the type is not transient or if
+ *		the type is already read-only or immutable.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, June  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_lock (H5T_t *dt, hbool_t immutable)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_lock, FAIL);
+    assert (dt);
+
+    switch (dt->shared->state) {
+        case H5T_STATE_TRANSIENT:
+            dt->shared->state = immutable ? H5T_STATE_IMMUTABLE : H5T_STATE_RDONLY;
+            break;
+        case H5T_STATE_RDONLY:
+            if (immutable) dt->shared->state = H5T_STATE_IMMUTABLE;
+            break;
+        case H5T_STATE_IMMUTABLE:
+        case H5T_STATE_NAMED:
+        case H5T_STATE_OPEN:
+            /*void*/
+            break;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_alloc
+ *
+ * Purpose:	Allocates a new H5T_t structure, initializing it correctly.
+ *
+ * Return:	Pointer to new H5T_t on success/NULL on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Monday, August 29, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_t *
+H5T_alloc(void)
+{
+    H5T_t *dt;                  /* Pointer to datatype allocated */
+    H5T_t *ret_value;           /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_alloc, NULL)
+
+    /* Allocate & initialize new datatype info */
+    if(NULL == (dt = H5FL_CALLOC(H5T_t)))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+    H5G_ent_reset(&(dt->ent));
+    if(NULL == (dt->shared = H5FL_CALLOC(H5T_shared_t)))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+    /* Assign return value */
+    ret_value = dt;
+
+done:
+    if(ret_value == NULL) {
+        if(dt != NULL) {
+            if(dt->shared != NULL)
+                H5FL_FREE(H5T_shared_t, dt->shared);
+            H5FL_FREE(H5T_t, dt);
+        } /* end if */
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5T_alloc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_free
+ *
+ * Purpose:	Frees all memory associated with a datatype, but does not
+ *              free the H5T_t or H5T_shared_t structures (which should
+ *              be done in H5T_close).
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Monday, January  6, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_free(H5T_t *dt)
+{
+    unsigned	i;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_free, FAIL);
+
+    assert(dt && dt->shared);
+
+    /*
+     * If a named type is being closed then close the object header and
+     * remove from the list of open objects in the file.
+     */
+    if (H5T_STATE_OPEN==dt->shared->state) {
+        assert (H5F_addr_defined(dt->ent.header));
+        /* Remove the datatype from the list of opened objects in the file */
+        if(H5FO_top_decr(dt->ent.file, dt->ent.header) < 0)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTRELEASE, FAIL, "can't decrement count for object")
+        if(H5FO_delete(dt->ent.file, H5AC_dxpl_id, dt->ent.header)<0)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTRELEASE, FAIL, "can't remove datatype from list of open objects")
+        if (H5O_close(&(dt->ent))<0)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to close data type object header");
+        dt->shared->state = H5T_STATE_NAMED;
+    }
+
+    /*
+     * Don't free locked datatypes.
+     */
+    if (H5T_STATE_IMMUTABLE==dt->shared->state)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CLOSEERROR, FAIL, "unable to close immutable datatype");
+
+    /* Close the datatype */
+    switch (dt->shared->type) {
+        case H5T_COMPOUND:
+            for (i=0; i<dt->shared->u.compnd.nmembs; i++) {
+                H5MM_xfree(dt->shared->u.compnd.memb[i].name);
+                H5T_close(dt->shared->u.compnd.memb[i].type);
+            }
+            H5MM_xfree(dt->shared->u.compnd.memb);
+            break;
+
+        case H5T_ENUM:
+            for (i=0; i<dt->shared->u.enumer.nmembs; i++)
+                H5MM_xfree(dt->shared->u.enumer.name[i]);
+            H5MM_xfree(dt->shared->u.enumer.name);
+            H5MM_xfree(dt->shared->u.enumer.value);
+            break;
+
+        case H5T_OPAQUE:
+            H5MM_xfree(dt->shared->u.opaque.tag);
+            break;
+
+        default:
+            break;
+    }
+
+    /* Free the ID to name info */
+    H5G_free_ent_name(&(dt->ent));
+
+    /* Close the parent */
+    if (dt->shared->parent && H5T_close(dt->shared->parent)<0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "unable to close parent data type");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5T_free() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_close
+ *
+ * Purpose:	Frees a data type and all associated memory.  If the data
+ *		type is locked then nothing happens.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, December  8, 1997
+ *
+ * Modifications:
+ *      Robb Matzke, 1999-04-27
+ *      This function fails if the datatype state is IMMUTABLE.
+ *
+ *      Robb Matzke, 1999-05-20
+ *      Closes opaque types also.
+ *
+ *      Pedro Vicente, <pvn at ncsa.uiuc.edu> 22 Aug 2002
+ *      Added "ID to name" support
+ *
+ *      Quincey Koziol, 2003-01-06
+ *      Moved "guts" of function to H5T_free()
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_close(H5T_t *dt)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_close, FAIL);
+
+    assert(dt && dt->shared);
+
+    dt->shared->fo_count--;
+
+    if(dt->shared->state != H5T_STATE_OPEN || dt->shared->fo_count == 0)
+    {
+        if(H5T_free(dt)<0)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTFREE, FAIL, "unable to free datatype");
+
+        H5FL_FREE(H5T_shared_t, dt->shared);
+    } else {
+        /*
+         * If a named type is being closed then close the object header and
+         * remove from the list of open objects in the file.
+         */
+        if(H5T_STATE_OPEN==dt->shared->state) {
+            /* Decrement the ref. count for this object in the top file */
+            if(H5FO_top_decr(dt->ent.file, dt->ent.header) < 0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTRELEASE, FAIL, "can't decrement count for object")
+
+            /* Check reference count for this object in the top file */
+            if(H5FO_top_count(dt->ent.file, dt->ent.header) == 0)
+                if(H5O_close(&(dt->ent)) < 0)
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to close")
+        } /* end if */
+
+        /* Free the ID to name info since we're not calling H5T_free*/
+        H5G_free_ent_name(&(dt->ent));
+    }
+
+    /* Free the datatype struct */
+    H5FL_FREE(H5T_t,dt);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_set_size
+ *
+ * Purpose:	Sets the total size in bytes for a data type (this operation
+ *		is not permitted on reference data types).  If the size is
+ *		decreased so that the significant bits of the data type
+ *		extend beyond the edge of the new size, then the `offset'
+ *		property is decreased toward zero.  If the `offset' becomes
+ *		zero and the significant bits of the data type still hang
+ *		over the edge of the new size, then the number of significant
+ *		bits is decreased.
+ *
+ *		Adjusting the size of an H5T_STRING automatically sets the
+ *		precision to 8*size.
+ *
+ *		All data types have a positive size.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	nagative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, December 22, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works with derived data types.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_set_size(H5T_t *dt, size_t size)
+{
+    size_t	prec, offset;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_set_size, FAIL);
+
+    /* Check args */
+    assert(dt);
+    assert(size!=0);
+    assert(H5T_REFERENCE!=dt->shared->type);
+    assert(!(H5T_ENUM==dt->shared->type && 0==dt->shared->u.enumer.nmembs));
+
+    if (dt->shared->parent) {
+        if (H5T_set_size(dt->shared->parent, size)<0)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to set size for parent data type");
+
+        /* Adjust size of datatype appropriately */
+        if(dt->shared->type==H5T_ARRAY)
+            dt->shared->size = dt->shared->parent->shared->size * dt->shared->u.array.nelem;
+        else if(dt->shared->type!=H5T_VLEN)
+            dt->shared->size = dt->shared->parent->shared->size;
+    } else {
+        if (H5T_IS_ATOMIC(dt->shared)) {
+            offset = dt->shared->u.atomic.offset;
+            prec = dt->shared->u.atomic.prec;
+
+            /* Decrement the offset and precision if necessary */
+            if (prec > 8*size)
+                offset = 0;
+            else
+                if (offset+prec > 8*size)
+                    offset = 8 * size - prec;
+            if (prec > 8*size)
+                prec = 8 * size;
+        } else {
+            prec = offset = 0;
+        }
+
+        switch (dt->shared->type) {
+            case H5T_INTEGER:
+            case H5T_TIME:
+            case H5T_BITFIELD:
+            case H5T_OPAQUE:
+                /* nothing to check */
+                break;
+
+            case H5T_COMPOUND:
+                /* If decreasing size, check the last member isn't being cut. */
+                if(size<dt->shared->size) {
+                    int         num_membs;
+                    unsigned    i, max_index=0;
+                    size_t      memb_offset, max_offset=0;
+                    size_t      max_size;
+
+                    if((num_membs = H5T_get_nmembers(dt))<0)
+                        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to get number of members");
+
+                    for(i=0; i<(unsigned)num_membs; i++) {
+                        memb_offset = H5T_get_member_offset(dt, i);
+                        if(memb_offset > max_offset) {
+                            max_offset = memb_offset;
+                            max_index = i;
+                        }
+                    }
+
+                    max_size = H5T_get_member_size(dt, max_index);
+
+                    if(size<(max_offset+max_size))
+                        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "size shrinking will cut off last member ");
+                }
+                break;
+
+            case H5T_STRING:
+                /* Convert string to variable-length datatype */
+                if(size==H5T_VARIABLE) {
+                    H5T_t	*base = NULL;		/* base data type */
+                    H5T_cset_t  tmp_cset;               /* Temp. cset info */
+                    H5T_str_t   tmp_strpad;             /* Temp. strpad info */
+
+                    /* Get a copy of unsigned char type as the base/parent type */
+                    if (NULL==(base=H5I_object(H5T_NATIVE_UCHAR)))
+                        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid base datatype");
+                    dt->shared->parent=H5T_copy(base,H5T_COPY_ALL);
+
+                    /* change this datatype into a VL string */
+                    dt->shared->type = H5T_VLEN;
+
+                    /*
+                     * Force conversions (i.e. memory to memory conversions
+		     * should duplicate data, not point to the same VL strings)
+                     */
+                    dt->shared->force_conv = TRUE;
+
+		    /* Before we mess with the info in the union, extract the
+		     * values we need */
+                    tmp_cset=dt->shared->u.atomic.u.s.cset;
+                    tmp_strpad=dt->shared->u.atomic.u.s.pad;
+
+                    /* This is a string, not a sequence */
+                    dt->shared->u.vlen.type = H5T_VLEN_STRING;
+
+                    /* Set character set and padding information */
+                    dt->shared->u.vlen.cset = tmp_cset;
+                    dt->shared->u.vlen.pad  = tmp_strpad;
+
+                    /* Set up VL information */
+                    if (H5T_vlen_mark(dt, NULL, H5T_VLEN_MEMORY)<0)
+                        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location");
+
+                } else {
+                    prec = 8 * size;
+                    offset = 0;
+                } /* end else */
+                break;
+
+            case H5T_FLOAT:
+                /*
+                 * The sign, mantissa, and exponent fields should be adjusted
+                 * first when decreasing the size of a floating point type.
+                 */
+                if (dt->shared->u.atomic.u.f.sign >= prec+offset ||
+                        dt->shared->u.atomic.u.f.epos + dt->shared->u.atomic.u.f.esize > prec+offset ||
+                        dt->shared->u.atomic.u.f.mpos + dt->shared->u.atomic.u.f.msize > prec+offset) {
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "adjust sign, mantissa, and exponent fields first");
+                }
+                break;
+
+            case H5T_ENUM:
+            case H5T_VLEN:
+            case H5T_ARRAY:
+                assert("can't happen" && 0);
+            case H5T_REFERENCE:
+                assert("invalid type" && 0);
+            default:
+                assert("not implemented yet" && 0);
+        }
+
+        /* Commit (if we didn't convert this type to a VL string) */
+        if(dt->shared->type!=H5T_VLEN) {
+            dt->shared->size = size;
+            if (H5T_IS_ATOMIC(dt->shared)) {
+                dt->shared->u.atomic.offset = offset;
+                dt->shared->u.atomic.prec = prec;
+            }
+        } /* end if */
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_get_size
+ *
+ * Purpose:	Determines the total size of a data type in bytes.
+ *
+ * Return:	Success:	Size of the data type in bytes.	 The size of
+ *				the data type is the size of an instance of
+ *				that data type.
+ *
+ *		Failure:	0 (valid data types are never zero size)
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5T_get_size(const H5T_t *dt)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_get_size);
+
+    /* check args */
+    assert(dt);
+
+    FUNC_LEAVE_NOAPI(dt->shared->size);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_cmp
+ *
+ * Purpose:	Compares two data types.
+ *
+ * Return:	Success:	0 if DT1 and DT2 are equal.
+ *				<0 if DT1 is less than DT2.
+ *				>0 if DT1 is greater than DT2.
+ *
+ *		Failure:	0, never fails
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, December 10, 1997
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Able to compare enumeration data types.
+ *
+ *	Robb Matzke, 20 May 1999
+ *	Compares bitfields and opaque types.
+ *
+ *	Quincey Koziol, 19 Mar 2005
+ *	Allow an enumerated datatypes to compare equal, if the "superset"
+ *      flag is set and dt2 has a superset of the enumerated values in dt1
+ *-------------------------------------------------------------------------
+ */
+int
+H5T_cmp(const H5T_t *dt1, const H5T_t *dt2, hbool_t superset)
+{
+    unsigned	*idx1 = NULL, *idx2 = NULL;
+    int	ret_value = 0;
+    int	i, j;
+    unsigned u;
+    int	tmp;
+    hbool_t	swapped;
+    size_t	base_size;
+
+    FUNC_ENTER_NOAPI(H5T_cmp, 0);
+
+    /* the easy case */
+    if (dt1 == dt2) HGOTO_DONE(0);
+    assert(dt1);
+    assert(dt2);
+
+    /* compare */
+    if (dt1->shared->type < dt2->shared->type) HGOTO_DONE(-1);
+    if (dt1->shared->type > dt2->shared->type) HGOTO_DONE(1);
+
+    if (dt1->shared->size < dt2->shared->size) HGOTO_DONE(-1);
+    if (dt1->shared->size > dt2->shared->size) HGOTO_DONE(1);
+
+    if (dt1->shared->parent && !dt2->shared->parent) HGOTO_DONE(-1);
+    if (!dt1->shared->parent && dt2->shared->parent) HGOTO_DONE(1);
+    if (dt1->shared->parent) {
+	tmp = H5T_cmp(dt1->shared->parent, dt2->shared->parent, superset);
+	if (tmp<0) HGOTO_DONE(-1);
+	if (tmp>0) HGOTO_DONE(1);
+    }
+
+    switch(dt1->shared->type) {
+        case H5T_COMPOUND:
+            /*
+             * Compound data types...
+             */
+            if (dt1->shared->u.compnd.nmembs < dt2->shared->u.compnd.nmembs)
+                HGOTO_DONE(-1);
+            if (dt1->shared->u.compnd.nmembs > dt2->shared->u.compnd.nmembs)
+                HGOTO_DONE(1);
+
+            /* Build an index for each type so the names are sorted */
+            if (NULL==(idx1 = H5MM_malloc(dt1->shared->u.compnd.nmembs * sizeof(unsigned))) ||
+                    NULL==(idx2 = H5MM_malloc(dt2->shared->u.compnd.nmembs * sizeof(unsigned))))
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, 0, "memory allocation failed");
+            for (u=0; u<dt1->shared->u.compnd.nmembs; u++)
+                idx1[u] = idx2[u] = u;
+            if(dt1->shared->u.enumer.nmembs > 1) {
+                for (i=dt1->shared->u.compnd.nmembs-1, swapped=TRUE; swapped && i>=0; --i)
+                    for (j=0, swapped=FALSE; j<i; j++)
+                        if (HDstrcmp(dt1->shared->u.compnd.memb[idx1[j]].name,
+                                 dt1->shared->u.compnd.memb[idx1[j+1]].name) > 0) {
+                            tmp = idx1[j];
+                            idx1[j] = idx1[j+1];
+                            idx1[j+1] = tmp;
+                            swapped = TRUE;
+                        }
+                for (i=dt2->shared->u.compnd.nmembs-1, swapped=TRUE; swapped && i>=0; --i)
+                    for (j=0, swapped=FALSE; j<i; j++)
+                        if (HDstrcmp(dt2->shared->u.compnd.memb[idx2[j]].name,
+                                 dt2->shared->u.compnd.memb[idx2[j+1]].name) > 0) {
+                            tmp = idx2[j];
+                            idx2[j] = idx2[j+1];
+                            idx2[j+1] = tmp;
+                            swapped = TRUE;
+                        }
+            } /* end if */
+
+#ifdef H5T_DEBUG
+            /* I don't quite trust the code above yet :-)  --RPM */
+            for (u=0; u<dt1->shared->u.compnd.nmembs-1; u++) {
+                assert(HDstrcmp(dt1->shared->u.compnd.memb[idx1[u]].name,
+                        dt1->shared->u.compnd.memb[idx1[u + 1]].name));
+                assert(HDstrcmp(dt2->shared->u.compnd.memb[idx2[u]].name,
+                        dt2->shared->u.compnd.memb[idx2[u + 1]].name));
+            }
+#endif
+
+            /* Compare the members */
+            for (u=0; u<dt1->shared->u.compnd.nmembs; u++) {
+                tmp = HDstrcmp(dt1->shared->u.compnd.memb[idx1[u]].name,
+                       dt2->shared->u.compnd.memb[idx2[u]].name);
+                if (tmp < 0)
+                    HGOTO_DONE(-1);
+                if (tmp > 0)
+                    HGOTO_DONE(1);
+
+                if (dt1->shared->u.compnd.memb[idx1[u]].offset < dt2->shared->u.compnd.memb[idx2[u]].offset) HGOTO_DONE(-1);
+                if (dt1->shared->u.compnd.memb[idx1[u]].offset > dt2->shared->u.compnd.memb[idx2[u]].offset) HGOTO_DONE(1);
+
+                if (dt1->shared->u.compnd.memb[idx1[u]].size < dt2->shared->u.compnd.memb[idx2[u]].size) HGOTO_DONE(-1);
+                if (dt1->shared->u.compnd.memb[idx1[u]].size > dt2->shared->u.compnd.memb[idx2[u]].size) HGOTO_DONE(1);
+
+                tmp = H5T_cmp(dt1->shared->u.compnd.memb[idx1[u]].type,
+                      dt2->shared->u.compnd.memb[idx2[u]].type, superset);
+                if (tmp < 0) HGOTO_DONE(-1);
+                if (tmp > 0) HGOTO_DONE(1);
+            }
+            break;
+
+        case H5T_ENUM:
+            /*
+             * Enumeration data types...
+             */
+
+            /* If we are doing a "superset" comparison, dt2 is allowed to have
+             * more members than dt1
+             */
+            if(superset) {
+                if (dt1->shared->u.enumer.nmembs > dt2->shared->u.enumer.nmembs)
+                    HGOTO_DONE(1);
+            } /* end if */
+            else {
+                if (dt1->shared->u.enumer.nmembs < dt2->shared->u.enumer.nmembs)
+                    HGOTO_DONE(-1);
+                if (dt1->shared->u.enumer.nmembs > dt2->shared->u.enumer.nmembs)
+                    HGOTO_DONE(1);
+            } /* end else */
+
+            /* Build an index for each type so the names are sorted */
+            if (NULL==(idx1 = H5MM_malloc(dt1->shared->u.enumer.nmembs * sizeof(unsigned))) ||
+                    NULL==(idx2 = H5MM_malloc(dt2->shared->u.enumer.nmembs * sizeof(unsigned))))
+                HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, 0, "memory allocation failed");
+            for (u=0; u<dt1->shared->u.enumer.nmembs; u++)
+                idx1[u] = u;
+            if(dt1->shared->u.enumer.nmembs > 1)
+                for (i=dt1->shared->u.enumer.nmembs-1, swapped=TRUE; swapped && i>=0; --i)
+                    for (j=0, swapped=FALSE; j<i; j++)
+                        if (HDstrcmp(dt1->shared->u.enumer.name[idx1[j]],
+                                 dt1->shared->u.enumer.name[idx1[j+1]]) > 0) {
+                            tmp = idx1[j];
+                            idx1[j] = idx1[j+1];
+                            idx1[j+1] = tmp;
+                            swapped = TRUE;
+                        }
+            for (u=0; u<dt2->shared->u.enumer.nmembs; u++)
+                idx2[u] = u;
+            if(dt2->shared->u.enumer.nmembs > 1)
+                for (i=dt2->shared->u.enumer.nmembs-1, swapped=TRUE; swapped && i>=0; --i)
+                    for (j=0, swapped=FALSE; j<i; j++)
+                        if (HDstrcmp(dt2->shared->u.enumer.name[idx2[j]],
+                                 dt2->shared->u.enumer.name[idx2[j+1]]) > 0) {
+                            tmp = idx2[j];
+                            idx2[j] = idx2[j+1];
+                            idx2[j+1] = tmp;
+                            swapped = TRUE;
+                        }
+
+#ifdef H5T_DEBUG
+            /* I don't quite trust the code above yet :-)  --RPM */
+            for (u=0; u<dt1->shared->u.enumer.nmembs-1; u++) {
+                assert(HDstrcmp(dt1->shared->u.enumer.name[idx1[u]],
+                        dt1->shared->u.enumer.name[idx1[u+1]]));
+                assert(HDstrcmp(dt2->shared->u.enumer.name[idx2[u]],
+                        dt2->shared->u.enumer.name[idx2[u+1]]));
+            }
+#endif
+
+            /* Compare the members */
+            base_size = dt1->shared->parent->shared->size;
+            for (u=0; u<dt1->shared->u.enumer.nmembs; u++) {
+                unsigned idx = 0;
+
+                if(superset) {
+                    unsigned    lt = 0, rt;        /* Final, left & right key indices */
+                    int	        cmp = 1;                /* Key comparison value */
+
+                    /* If a superset is allowed, dt2 may have more members
+                     * than dt1, so binary search for matching member name in
+                     * dt2
+                     */
+                    rt = dt2->shared->u.enumer.nmembs;
+
+                    while (lt < rt && cmp) {
+                        idx = (lt + rt) / 2;
+
+                        /* compare */
+                        if ((cmp = HDstrcmp(dt1->shared->u.enumer.name[idx1[u]],
+                                dt2->shared->u.enumer.name[idx2[idx]] ) ) < 0)
+                            rt = idx;
+                        else
+                            lt = idx+1;
+                    }
+                    /* Leave, if we couldn't find match */
+                    if (cmp)
+                        HGOTO_DONE(-1);
+                } /* end if */
+                else {
+                    /* Check for exact member name match when not doing
+                     * "superset" comparison
+                     */
+                    tmp = HDstrcmp(dt1->shared->u.enumer.name[idx1[u]],
+                           dt2->shared->u.enumer.name[idx2[u]]);
+                    if (tmp<0) HGOTO_DONE(-1);
+                    if (tmp>0) HGOTO_DONE(1);
+
+                    /* Set index value appropriately */
+                    idx = u;
+                } /* end else */
+
+                tmp = HDmemcmp(dt1->shared->u.enumer.value+idx1[u]*base_size,
+                       dt2->shared->u.enumer.value+idx2[idx]*base_size,
+                       base_size);
+                if (tmp<0) HGOTO_DONE(-1);
+                if (tmp>0) HGOTO_DONE(1);
+            }
+            break;
+
+        case H5T_VLEN:
+            assert(dt1->shared->u.vlen.type>H5T_VLEN_BADTYPE && dt1->shared->u.vlen.type<H5T_VLEN_MAXTYPE);
+            assert(dt2->shared->u.vlen.type>H5T_VLEN_BADTYPE && dt2->shared->u.vlen.type<H5T_VLEN_MAXTYPE);
+            assert(dt1->shared->u.vlen.loc>H5T_VLEN_BADLOC && dt1->shared->u.vlen.loc<H5T_VLEN_MAXLOC);
+            assert(dt2->shared->u.vlen.loc>H5T_VLEN_BADLOC && dt2->shared->u.vlen.loc<H5T_VLEN_MAXLOC);
+
+            /* Arbitrarily sort sequence VL datatypes before string VL datatypes */
+            if (dt1->shared->u.vlen.type==H5T_VLEN_SEQUENCE &&
+                    dt2->shared->u.vlen.type==H5T_VLEN_STRING) {
+                HGOTO_DONE(-1);
+            } else if (dt1->shared->u.vlen.type==H5T_VLEN_STRING &&
+                    dt2->shared->u.vlen.type==H5T_VLEN_SEQUENCE) {
+                HGOTO_DONE(1);
+            }
+            /* Arbitrarily sort VL datatypes in memory before disk */
+            if (dt1->shared->u.vlen.loc==H5T_VLEN_MEMORY &&
+                    dt2->shared->u.vlen.loc==H5T_VLEN_DISK) {
+                HGOTO_DONE(-1);
+            } else if (dt1->shared->u.vlen.loc==H5T_VLEN_DISK &&
+                    dt2->shared->u.vlen.loc==H5T_VLEN_MEMORY) {
+                HGOTO_DONE(1);
+            }
+            /* Don't allow VL types in different files to compare as equal */
+            if (dt1->shared->u.vlen.f < dt2->shared->u.vlen.f)
+                HGOTO_DONE(-1);
+            if (dt1->shared->u.vlen.f > dt2->shared->u.vlen.f)
+                HGOTO_DONE(1);
+            break;
+
+        case H5T_OPAQUE:
+            if(dt1->shared->u.opaque.tag && dt2->shared->u.opaque.tag)
+                HGOTO_DONE(HDstrcmp(dt1->shared->u.opaque.tag,dt2->shared->u.opaque.tag));
+            break;
+
+        case H5T_ARRAY:
+            if (dt1->shared->u.array.ndims < dt2->shared->u.array.ndims)
+                HGOTO_DONE(-1);
+            if (dt1->shared->u.array.ndims > dt2->shared->u.array.ndims)
+                HGOTO_DONE(1);
+
+            for (j=0; j<dt1->shared->u.array.ndims; j++) {
+                if (dt1->shared->u.array.dim[j] < dt2->shared->u.array.dim[j])
+                    HGOTO_DONE(-1);
+                if (dt1->shared->u.array.dim[j] > dt2->shared->u.array.dim[j])
+                    HGOTO_DONE(1);
+            }
+
+            for (j=0; j<dt1->shared->u.array.ndims; j++) {
+                if (dt1->shared->u.array.perm[j] < dt2->shared->u.array.perm[j])
+                    HGOTO_DONE(-1);
+                if (dt1->shared->u.array.perm[j] > dt2->shared->u.array.perm[j])
+                    HGOTO_DONE(1);
+            }
+
+            tmp = H5T_cmp(dt1->shared->parent, dt2->shared->parent, superset);
+            if (tmp < 0)
+                HGOTO_DONE(-1);
+            if (tmp > 0)
+                HGOTO_DONE(1);
+            break;
+
+        default:
+            /*
+             * Atomic datatypes...
+             */
+            if (dt1->shared->u.atomic.order < dt2->shared->u.atomic.order) HGOTO_DONE(-1);
+            if (dt1->shared->u.atomic.order > dt2->shared->u.atomic.order) HGOTO_DONE(1);
+
+            if (dt1->shared->u.atomic.prec < dt2->shared->u.atomic.prec) HGOTO_DONE(-1);
+            if (dt1->shared->u.atomic.prec > dt2->shared->u.atomic.prec) HGOTO_DONE(1);
+
+            if (dt1->shared->u.atomic.offset < dt2->shared->u.atomic.offset) HGOTO_DONE(-1);
+            if (dt1->shared->u.atomic.offset > dt2->shared->u.atomic.offset) HGOTO_DONE(1);
+
+            if (dt1->shared->u.atomic.lsb_pad < dt2->shared->u.atomic.lsb_pad) HGOTO_DONE(-1);
+            if (dt1->shared->u.atomic.lsb_pad > dt2->shared->u.atomic.lsb_pad) HGOTO_DONE(1);
+
+            if (dt1->shared->u.atomic.msb_pad < dt2->shared->u.atomic.msb_pad) HGOTO_DONE(-1);
+            if (dt1->shared->u.atomic.msb_pad > dt2->shared->u.atomic.msb_pad) HGOTO_DONE(1);
+
+            switch (dt1->shared->type) {
+                case H5T_INTEGER:
+                    if (dt1->shared->u.atomic.u.i.sign < dt2->shared->u.atomic.u.i.sign)
+                        HGOTO_DONE(-1);
+                    if (dt1->shared->u.atomic.u.i.sign > dt2->shared->u.atomic.u.i.sign)
+                        HGOTO_DONE(1);
+                    break;
+
+                case H5T_FLOAT:
+                    if (dt1->shared->u.atomic.u.f.sign < dt2->shared->u.atomic.u.f.sign)
+                        HGOTO_DONE(-1);
+                    if (dt1->shared->u.atomic.u.f.sign > dt2->shared->u.atomic.u.f.sign)
+                        HGOTO_DONE(1);
+
+                    if (dt1->shared->u.atomic.u.f.epos < dt2->shared->u.atomic.u.f.epos)
+                        HGOTO_DONE(-1);
+                    if (dt1->shared->u.atomic.u.f.epos > dt2->shared->u.atomic.u.f.epos)
+                        HGOTO_DONE(1);
+
+                    if (dt1->shared->u.atomic.u.f.esize < dt2->shared->u.atomic.u.f.esize) HGOTO_DONE(-1);
+                    if (dt1->shared->u.atomic.u.f.esize > dt2->shared->u.atomic.u.f.esize) HGOTO_DONE(1);
+
+                    if (dt1->shared->u.atomic.u.f.ebias < dt2->shared->u.atomic.u.f.ebias) HGOTO_DONE(-1);
+                    if (dt1->shared->u.atomic.u.f.ebias > dt2->shared->u.atomic.u.f.ebias) HGOTO_DONE(1);
+
+                    if (dt1->shared->u.atomic.u.f.mpos < dt2->shared->u.atomic.u.f.mpos)
+                        HGOTO_DONE(-1);
+                    if (dt1->shared->u.atomic.u.f.mpos > dt2->shared->u.atomic.u.f.mpos)
+                        HGOTO_DONE(1);
+
+                    if (dt1->shared->u.atomic.u.f.msize < dt2->shared->u.atomic.u.f.msize) HGOTO_DONE(-1);
+                    if (dt1->shared->u.atomic.u.f.msize > dt2->shared->u.atomic.u.f.msize) HGOTO_DONE(1);
+
+                    if (dt1->shared->u.atomic.u.f.norm < dt2->shared->u.atomic.u.f.norm)
+                        HGOTO_DONE(-1);
+                    if (dt1->shared->u.atomic.u.f.norm > dt2->shared->u.atomic.u.f.norm)
+                        HGOTO_DONE(1);
+
+                    if (dt1->shared->u.atomic.u.f.pad < dt2->shared->u.atomic.u.f.pad)
+                        HGOTO_DONE(-1);
+                    if (dt1->shared->u.atomic.u.f.pad > dt2->shared->u.atomic.u.f.pad)
+                        HGOTO_DONE(1);
+
+                    break;
+
+                case H5T_TIME:  /* order and precision are checked above */
+                    /*void */
+                    break;
+
+                case H5T_STRING:
+                    if (dt1->shared->u.atomic.u.s.cset < dt2->shared->u.atomic.u.s.cset)
+                        HGOTO_DONE(-1);
+                    if (dt1->shared->u.atomic.u.s.cset > dt2->shared->u.atomic.u.s.cset)
+                        HGOTO_DONE(1);
+
+                    if (dt1->shared->u.atomic.u.s.pad < dt2->shared->u.atomic.u.s.pad)
+                        HGOTO_DONE(-1);
+                    if (dt1->shared->u.atomic.u.s.pad > dt2->shared->u.atomic.u.s.pad)
+                        HGOTO_DONE(1);
+
+                    break;
+
+                case H5T_BITFIELD:
+                    /*void */
+                    break;
+
+                case H5T_REFERENCE:
+                    if (dt1->shared->u.atomic.u.r.rtype < dt2->shared->u.atomic.u.r.rtype)
+                        HGOTO_DONE(-1);
+                    if (dt1->shared->u.atomic.u.r.rtype > dt2->shared->u.atomic.u.r.rtype)
+                        HGOTO_DONE(1);
+
+                    switch(dt1->shared->u.atomic.u.r.rtype) {
+                        case H5R_OBJECT:
+                        case H5R_DATASET_REGION:
+                    /* Does this need more to distinguish it? -QAK 11/30/98 */
+                            /*void */
+                            break;
+
+                        default:
+                            assert("not implemented yet" && 0);
+                    }
+                    break;
+
+                default:
+                    assert("not implemented yet" && 0);
+            }
+        break;
+    } /* end switch */
+
+done:
+    if(idx1!=NULL)
+        H5MM_xfree(idx1);
+    if(idx2!=NULL)
+        H5MM_xfree(idx2);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_path_find
+ *
+ * Purpose:	Finds the path which converts type SRC_ID to type DST_ID,
+ *		creating a new path if necessary.  If FUNC is non-zero then
+ *		it is set as the hard conversion function for that path
+ *		regardless of whether the path previously existed. Changing
+ *		the conversion function of a path causes statistics to be
+ *		reset to zero after printing them.  The NAME is used only
+ *		when creating a new path and is just for debugging.
+ *
+ *		If SRC and DST are both null pointers then the special no-op
+ *		conversion path is used.  This path is always stored as the
+ *		first path in the path table.
+ *
+ * Return:	Success:	Pointer to the path, valid until the path
+ *				database is modified.
+ *
+ *		Failure:	NULL if the path does not exist and no
+ *				function can be found to apply to the new
+ *				path.
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, January 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_path_t *
+H5T_path_find(const H5T_t *src, const H5T_t *dst, const char *name,
+	      H5T_conv_t func, hid_t dxpl_id)
+{
+    int	lt, rt;			/*left and right edges		*/
+    int	md;			/*middle			*/
+    int	cmp;			/*comparison result		*/
+    int old_npaths;             /* Previous number of paths in table */
+    H5T_path_t	*table=NULL;		/*path existing in the table	*/
+    H5T_path_t	*path=NULL;		/*new path			*/
+    H5T_path_t	*ret_value;	/*return value			*/
+    hid_t	src_id=-1, dst_id=-1;	/*src and dst type identifiers	*/
+    int	i;			/*counter			*/
+    int	nprint=0;		/*lines of output printed	*/
+
+    FUNC_ENTER_NOAPI(H5T_path_find, NULL);
+
+    assert((!src && !dst) || (src && dst));
+
+    /*
+     * Make sure the first entry in the table is the no-op conversion path.
+     */
+    if (0==H5T_g.npaths) {
+	if (NULL==(H5T_g.path=H5MM_malloc(128*sizeof(H5T_path_t*))))
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for type conversion path table");
+	H5T_g.apaths = 128;
+	if (NULL==(H5T_g.path[0]=H5FL_CALLOC(H5T_path_t)))
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for no-op conversion path");
+	HDstrcpy(H5T_g.path[0]->name, "no-op");
+	H5T_g.path[0]->func = H5T_conv_noop;
+	H5T_g.path[0]->cdata.command = H5T_CONV_INIT;
+	if (H5T_conv_noop(FAIL, FAIL, &(H5T_g.path[0]->cdata),
+                (size_t)0, (size_t)0, (size_t)0, NULL, NULL, dxpl_id)<0) {
+#ifdef H5T_DEBUG
+	    if (H5DEBUG(T)) {
+		fprintf(H5DEBUG(T), "H5T: unable to initialize no-op "
+			"conversion function (ignored)\n");
+	    }
+#endif
+	    H5E_clear(); /*ignore the error*/
+	}
+	H5T_g.path[0]->is_noop = TRUE;
+	H5T_g.npaths = 1;
+    }
+
+    /*
+     * Find the conversion path.  If source and destination types are equal
+     * then use entry[0], otherwise do a binary search over the
+     * remaining entries.
+     *
+     * Quincey Koziol, 2 July, 1999
+     * Only allow the no-op conversion to occur if no "force conversion" flags
+     * are set
+     */
+    if (src->shared->force_conv==FALSE && dst->shared->force_conv==FALSE && 0==H5T_cmp(src, dst, TRUE)) {
+	table = H5T_g.path[0];
+	cmp = 0;
+	md = 0;
+    } else {
+	lt = md = 1;
+	rt = H5T_g.npaths;
+	cmp = -1;
+
+	while (cmp && lt<rt) {
+	    md = (lt+rt) / 2;
+	    assert(H5T_g.path[md]);
+	    cmp = H5T_cmp(src, H5T_g.path[md]->src, FALSE);
+	    if (0==cmp) cmp = H5T_cmp(dst, H5T_g.path[md]->dst, FALSE);
+	    if (cmp<0) {
+		rt = md;
+	    } else if (cmp>0) {
+		lt = md+1;
+	    } else {
+		table = H5T_g.path[md];
+	    }
+	}
+    }
+
+    /* Keep a record of the number of paths in the table, in case one of the
+     * initialization calls below (hard or soft) causes more entries to be
+     * added to the table - QAK, 1/26/02
+     */
+    old_npaths=H5T_g.npaths;
+
+    /*
+     * If we didn't find the path or if the caller is specifying a new hard
+     * conversion function then create a new path and add the new function to
+     * the path.
+     */
+    if (!table || func) {
+	if (NULL==(path=H5FL_CALLOC(H5T_path_t)))
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed for type conversion path");
+	if (name && *name) {
+	    HDstrncpy(path->name, name, (size_t)H5T_NAMELEN);
+	    path->name[H5T_NAMELEN-1] = '\0';
+	} else {
+	    HDstrcpy(path->name, "NONAME");
+	}
+	if ((src && NULL==(path->src=H5T_copy(src, H5T_COPY_ALL))) ||
+                (dst && NULL==(path->dst=H5T_copy(dst, H5T_COPY_ALL))))
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to copy data type for conversion path");
+    } else {
+	path = table;
+    }
+
+    /*
+     * If a hard conversion function is specified and none is defined for the
+     * path then add it to the path and initialize its conversion data.
+     */
+    if (func) {
+	assert(path!=table);
+	assert(NULL==path->func);
+	if (path->src && (src_id=H5I_register(H5I_DATATYPE,
+                  H5T_copy(path->src, H5T_COPY_ALL)))<0)
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, NULL, "unable to register source conversion type for query");
+	if (path->dst && (dst_id=H5I_register(H5I_DATATYPE,
+                  H5T_copy(path->dst, H5T_COPY_ALL)))<0)
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, NULL, "unable to register destination conversion type for query");
+	path->cdata.command = H5T_CONV_INIT;
+	if ((func)(src_id, dst_id, &(path->cdata), (size_t)0, (size_t)0, (size_t)0,
+                NULL, NULL, dxpl_id)<0)
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to initialize conversion function");
+	if (src_id>=0) H5I_dec_ref(src_id);
+	if (dst_id>=0) H5I_dec_ref(dst_id);
+	src_id = dst_id = -1;
+	path->func = func;
+	path->is_hard = TRUE;
+    }
+
+    /*
+     * If the path doesn't have a function by now (because it's a new path
+     * and the caller didn't supply a hard function) then scan the soft list
+     * for an applicable function and add it to the path.  This can't happen
+     * for the no-op conversion path.
+     */
+    assert(path->func || (src && dst));
+    for (i=H5T_g.nsoft-1; i>=0 && !path->func; --i) {
+	if (src->shared->type!=H5T_g.soft[i].src ||
+	    dst->shared->type!=H5T_g.soft[i].dst) {
+	    continue;
+	}
+	if ((src_id=H5I_register(H5I_DATATYPE,
+				 H5T_copy(path->src, H5T_COPY_ALL)))<0 ||
+                (dst_id=H5I_register(H5I_DATATYPE,
+				 H5T_copy(path->dst, H5T_COPY_ALL)))<0)
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, NULL, "unable to register conversion types for query");
+	path->cdata.command = H5T_CONV_INIT;
+	if ((H5T_g.soft[i].func) (src_id, dst_id, &(path->cdata),
+                  (size_t)0, (size_t)0, (size_t)0, NULL, NULL, dxpl_id)<0) {
+	    HDmemset (&(path->cdata), 0, sizeof(H5T_cdata_t));
+	    H5E_clear(); /*ignore the error*/
+	} else {
+	    HDstrcpy (path->name, H5T_g.soft[i].name);
+	    path->func = H5T_g.soft[i].func;
+	    path->is_hard = FALSE;
+	}
+	H5I_dec_ref(src_id);
+	H5I_dec_ref(dst_id);
+	src_id = dst_id = -1;
+    }
+    if (!path->func)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "no appropriate function for conversion path");
+
+    /* Check if paths were inserted into the table through a recursive call
+     * and re-compute the correct location for this path if so. - QAK, 1/26/02
+     */
+    if(old_npaths!=H5T_g.npaths) {
+        lt = md = 1;
+        rt = H5T_g.npaths;
+        cmp = -1;
+
+        while (cmp && lt<rt) {
+            md = (lt+rt) / 2;
+            assert(H5T_g.path[md]);
+            cmp = H5T_cmp(src, H5T_g.path[md]->src, FALSE);
+            if (0==cmp) cmp = H5T_cmp(dst, H5T_g.path[md]->dst, FALSE);
+            if (cmp<0) {
+                rt = md;
+            } else if (cmp>0) {
+                lt = md+1;
+            } else {
+                table = H5T_g.path[md];
+            }
+        }
+    } /* end if */
+
+    /* Replace an existing table entry or add a new entry */
+    if (table && path!=table) {
+	assert(table==H5T_g.path[md]);
+	H5T_print_stats(table, &nprint/*in,out*/);
+	table->cdata.command = H5T_CONV_FREE;
+	if ((table->func)(FAIL, FAIL, &(table->cdata), (size_t)0, (size_t)0, (size_t)0,
+                NULL, NULL, dxpl_id)<0) {
+#ifdef H5T_DEBUG
+	    if (H5DEBUG(T)) {
+		fprintf(H5DEBUG(T), "H5T: conversion function 0x%08lx free "
+			"failed for %s (ignored)\n",
+			(unsigned long)(path->func), path->name);
+	    }
+#endif
+	    H5E_clear(); /*ignore the failure*/
+	}
+	if (table->src) H5T_close(table->src);
+	if (table->dst) H5T_close(table->dst);
+        H5FL_FREE(H5T_path_t,table);
+	table = path;
+	H5T_g.path[md] = path;
+    } else if (path!=table) {
+	assert(cmp);
+        if (H5T_g.npaths >= H5T_g.apaths) {
+            size_t na = MAX(128, 2 * H5T_g.apaths);
+            H5T_path_t **x = H5MM_realloc (H5T_g.path,
+					   na*sizeof(H5T_path_t*));
+            if (!x)
+		HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+            H5T_g.apaths = (int)na;
+            H5T_g.path = x;
+        }
+        if (cmp>0) md++;
+        HDmemmove(H5T_g.path+md+1, H5T_g.path+md,
+		  (H5T_g.npaths-md) * sizeof(H5T_path_t*));
+        H5T_g.npaths++;
+	H5T_g.path[md] = path;
+	table = path;
+    }
+
+    /* Set return value */
+    ret_value = path;
+
+done:
+    if (!ret_value && path && path!=table) {
+	if (path->src) H5T_close(path->src);
+	if (path->dst) H5T_close(path->dst);
+        H5FL_FREE(H5T_path_t,path);
+    }
+    if (src_id>=0) H5I_dec_ref(src_id);
+    if (dst_id>=0) H5I_dec_ref(dst_id);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_path_noop
+ *
+ * Purpose:	Is the path the special no-op path? The no-op function can be
+ *              set by the application and there might be more than one no-op
+ *              path in a multi-threaded application if one thread is using
+ *              the no-op path when some other thread changes its definition.
+ *
+ * Return:	TRUE/FALSE (can't fail)
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, May  8, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hbool_t
+H5T_path_noop(const H5T_path_t *p)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_path_noop);
+
+    assert(p);
+
+    FUNC_LEAVE_NOAPI(p->is_noop || (p->is_hard && 0==H5T_cmp(p->src, p->dst, FALSE)));
+} /* end H5T_path_noop() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_path_bkg
+ *
+ * Purpose:	Get the "background" flag for the conversion path.
+ *
+ * Return:	Background flag (can't fail)
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, May  8, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_bkg_t
+H5T_path_bkg(const H5T_path_t *p)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_path_bkg);
+
+    assert(p);
+
+    FUNC_LEAVE_NOAPI(p->cdata.need_bkg);
+} /* end H5T_path_bkg() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_convert
+ *
+ * Purpose:	Call a conversion function to convert from source to
+ *		destination data type and accumulate timing statistics.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, December 15, 1998
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-06-16
+ *		The timers are updated only if H5T debugging is enabled at
+ *		runtime in addition to compile time.
+ *
+ *		Robb Matzke, 1999-06-16
+ *		Added support for non-zero strides. If BUF_STRIDE is non-zero
+ *		then convert one value at each memory location advancing
+ *		BUF_STRIDE bytes each time; otherwise assume both source and
+ *		destination values are packed.
+ *
+ *              Quincey Koziol, 1999-07-01
+ *              Added dataset transfer properties, to allow custom VL
+ *              datatype allocation function to be passed down to VL
+ *              conversion routine.
+ *
+ *              Robb Matzke, 2000-05-17
+ *              Added the BKG_STRIDE argument which gets passed to all the
+ *              conversion functions. If BUF_STRIDE is non-zero then each
+ *              data element is at a multiple of BUF_STRIDE bytes in BUF
+ *              (on both input and output). If BKG_STRIDE is also set then
+ *              the BKG buffer is used in such a way that temporary space
+ *              for each element is aligned on a BKG_STRIDE byte boundary.
+ *              If either BUF_STRIDE or BKG_STRIDE are zero then the BKG
+ *              buffer will be accessed as though it were a packed array
+ *              of destination datatype.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_convert(H5T_path_t *tpath, hid_t src_id, hid_t dst_id, size_t nelmts,
+	    size_t buf_stride, size_t bkg_stride, void *buf, void *bkg,
+            hid_t dset_xfer_plist)
+{
+#ifdef H5T_DEBUG
+    H5_timer_t		timer;
+#endif
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_convert, FAIL);
+
+#ifdef H5T_DEBUG
+    if (H5DEBUG(T)) H5_timer_begin(&timer);
+#endif
+    tpath->cdata.command = H5T_CONV_CONV;
+    if ((tpath->func)(src_id, dst_id, &(tpath->cdata), nelmts, buf_stride,
+                      bkg_stride, buf, bkg, dset_xfer_plist)<0)
+	HGOTO_ERROR(H5E_ATTR, H5E_CANTENCODE, FAIL, "data type conversion failed");
+#ifdef H5T_DEBUG
+    if (H5DEBUG(T)) {
+	H5_timer_end(&(tpath->stats.timer), &timer);
+	tpath->stats.ncalls++;
+	tpath->stats.nelmts += nelmts;
+    }
+#endif
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_entof
+ *
+ * Purpose:	Returns a pointer to the entry for a named data type.
+ *
+ * Return:	Success:	Ptr directly into named data type
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, June  5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5G_entry_t *
+H5T_entof (H5T_t *dt)
+{
+    H5G_entry_t		*ret_value = NULL;
+
+    FUNC_ENTER_NOAPI(H5T_entof, NULL);
+
+    assert (dt);
+
+    switch (dt->shared->state) {
+        case H5T_STATE_TRANSIENT:
+        case H5T_STATE_RDONLY:
+        case H5T_STATE_IMMUTABLE:
+            HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, NULL, "not a named data type");
+        case H5T_STATE_NAMED:
+        case H5T_STATE_OPEN:
+            ret_value = &(dt->ent);
+            break;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5T_is_immutable
+ *
+ * Purpose:     Check if a datatype is immutable.
+ *
+ * Return:      TRUE
+ *
+ *              FALSE
+ *
+ * Programmer:  Raymond Lu
+ *              Friday, Dec 7, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5T_is_immutable(const H5T_t *dt)
+{
+    htri_t ret_value = FALSE;
+
+    FUNC_ENTER_NOAPI(H5T_is_immutable, FAIL);
+
+    assert(dt);
+
+    if(dt->shared->state == H5T_STATE_IMMUTABLE)
+        ret_value = TRUE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5T_is_named
+ *
+ * Purpose:     Check if a datatype is named.
+ *
+ * Return:      TRUE
+ *
+ *              FALSE
+ *
+ * Programmer:  Pedro Vicente
+ *              Tuesday, Sep 3, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5T_is_named(const H5T_t *dt)
+{
+    htri_t ret_value = FALSE;
+
+    FUNC_ENTER_NOAPI(H5T_is_named, FAIL);
+
+    assert(dt);
+
+    if(dt->shared->state == H5T_STATE_OPEN || dt->shared->state == H5T_STATE_NAMED)
+        ret_value = TRUE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5T_get_ref_type
+ PURPOSE
+    Retrieves the type of reference for a datatype
+ USAGE
+    H5R_type_t H5Tget_ref_type(dt)
+        H5T_t *dt;  IN: datatype pointer for the reference datatype
+
+ RETURNS
+    Success:	A reference type defined in H5Rpublic.h
+    Failure:	H5R_BADTYPE
+ DESCRIPTION
+    Given a reference datatype object, this function returns the reference type
+        of the datatype.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+H5R_type_t
+H5T_get_ref_type(const H5T_t *dt)
+{
+    H5R_type_t ret_value = H5R_BADTYPE;
+
+    FUNC_ENTER_NOAPI(H5T_get_ref_type, H5R_BADTYPE);
+
+    assert(dt);
+
+    if(dt->shared->type==H5T_REFERENCE)
+        ret_value=dt->shared->u.atomic.u.r.rtype;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5T_get_ref_type() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_is_sensible
+ *
+ * Purpose:	Determines if a data type is sensible to store on disk
+ *              (i.e. not partially initialized)
+ *
+ * Return:	Success:	TRUE, FALSE
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *		Tuesday, June 11, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5T_is_sensible(const H5T_t *dt)
+{
+    htri_t	ret_value;
+
+    FUNC_ENTER_NOAPI(H5T_is_sensible, FAIL);
+
+    assert(dt);
+
+    switch(dt->shared->type) {
+        case H5T_COMPOUND:
+            /* Only allow compound datatypes with at least one member to be stored on disk */
+            if(dt->shared->u.compnd.nmembs > 0)
+                ret_value=TRUE;
+            else
+                ret_value=FALSE;
+            break;
+
+        case H5T_ENUM:
+            /* Only allow enum datatypes with at least one member to be stored on disk */
+            if(dt->shared->u.enumer.nmembs > 0)
+                ret_value=TRUE;
+            else
+                ret_value=FALSE;
+            break;
+
+        default:
+            /* Assume all other datatype are sensible to store on disk */
+            ret_value=TRUE;
+            break;
+    } /* end switch */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5T_is_relocatable
+ *
+ * Purpose:     Check if a datatype will change between disk and memory.
+ *
+ * Notes:       Currently, only variable-length and object references change
+ *              between disk & memory (see cases where things are changed in
+ *              the H5T_set_loc() code above).
+ *
+ * Return:
+ *  One of two values on success:
+ *      TRUE - If the location of any vlen types changed
+ *      FALSE - If the location of any vlen types is the same
+ *  <0 is returned on failure
+ *
+ * Programmer:  Quincey Koziol
+ *              Thursday, June 24, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5T_is_relocatable(const H5T_t *dt)
+{
+    htri_t ret_value = FALSE;
+
+    FUNC_ENTER_NOAPI(H5T_is_relocatable, FAIL);
+
+    assert(dt);
+
+    if(H5T_detect_class(dt, H5T_VLEN))
+        ret_value = TRUE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+} /* end H5T_is_relocatable() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_print_stats
+ *
+ * Purpose:	Print statistics about a conversion path.  Statistics are
+ *		printed only if all the following conditions are true:
+ *
+ * 		1. The library was compiled with H5T_DEBUG defined.
+ *		2. Data type debugging is turned on at run time.
+ *		3. The path was called at least one time.
+ *
+ *		The optional NPRINT argument keeps track of the number of
+ *		conversions paths for which statistics have been shown. If
+ *		its value is zero then table headers are printed before the
+ *		first line of output.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, December 14, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T_print_stats(H5T_path_t UNUSED * path, int UNUSED * nprint/*in,out*/)
+{
+#ifdef H5T_DEBUG
+    hsize_t	nbytes;
+    char	bandwidth[32];
+#endif
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_print_stats);
+
+#ifdef H5T_DEBUG
+    if (H5DEBUG(T) && path->stats.ncalls>0) {
+	if (nprint && 0==(*nprint)++) {
+	    HDfprintf (H5DEBUG(T), "H5T: type conversion statistics:\n");
+	    HDfprintf (H5DEBUG(T), "   %-16s %10s %10s %8s %8s %8s %10s\n",
+		       "Conversion", "Elmts", "Calls", "User",
+		       "System", "Elapsed", "Bandwidth");
+	    HDfprintf (H5DEBUG(T), "   %-16s %10s %10s %8s %8s %8s %10s\n",
+		       "----------", "-----", "-----", "----",
+		       "------", "-------", "---------");
+	}
+        if(path->src && path->dst)
+            nbytes = MAX (H5T_get_size (path->src),
+                          H5T_get_size (path->dst));
+        else if(path->src)
+            nbytes = H5T_get_size (path->src);
+        else if(path->dst)
+            nbytes = H5T_get_size (path->dst);
+        else
+            nbytes = 0;
+	nbytes *= path->stats.nelmts;
+	H5_bandwidth(bandwidth, (double)nbytes,
+		     path->stats.timer.etime);
+	HDfprintf (H5DEBUG(T), "   %-16s %10Hd %10d %8.2f %8.2f %8.2f %10s\n",
+		   path->name,
+		   path->stats.nelmts,
+		   path->stats.ncalls,
+		   path->stats.timer.utime,
+		   path->stats.timer.stime,
+		   path->stats.timer.etime,
+		   bandwidth);
+    }
+#endif
+    FUNC_LEAVE_NOAPI(SUCCEED);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_debug
+ *
+ * Purpose:	Prints information about a data type.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_debug(const H5T_t *dt, FILE *stream)
+{
+    const char	*s1="", *s2="";
+    unsigned	i;
+    size_t	k, base_size;
+    uint64_t	tmp;
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_debug, FAIL);
+
+    /* Check args */
+    assert(dt);
+    assert(stream);
+
+    switch (dt->shared->type) {
+        case H5T_INTEGER:
+            s1 = "int";
+            break;
+        case H5T_FLOAT:
+            s1 = "float";
+            break;
+        case H5T_TIME:
+            s1 = "time";
+            break;
+        case H5T_STRING:
+            s1 = "str";
+            break;
+        case H5T_BITFIELD:
+            s1 = "bits";
+            break;
+        case H5T_OPAQUE:
+            s1 = "opaque";
+            break;
+        case H5T_COMPOUND:
+            s1 = "struct";
+            break;
+        case H5T_ENUM:
+            s1 = "enum";
+            break;
+        default:
+            s1 = "";
+            break;
+    }
+
+    switch (dt->shared->state) {
+        case H5T_STATE_TRANSIENT:
+            s2 = "[transient]";
+            break;
+        case H5T_STATE_RDONLY:
+            s2 = "[constant]";
+            break;
+        case H5T_STATE_IMMUTABLE:
+            s2 = "[predefined]";
+            break;
+        case H5T_STATE_NAMED:
+            s2 = "[named,closed]";
+            break;
+        case H5T_STATE_OPEN:
+            s2 = "[named,open]";
+            break;
+    }
+
+    fprintf(stream, "%s%s {nbytes=%lu", s1, s2, (unsigned long)(dt->shared->size));
+
+    if (H5T_IS_ATOMIC(dt->shared)) {
+	switch (dt->shared->u.atomic.order) {
+            case H5T_ORDER_BE:
+                s1 = "BE";
+                break;
+            case H5T_ORDER_LE:
+                s1 = "LE";
+                break;
+            case H5T_ORDER_VAX:
+                s1 = "VAX";
+                break;
+            case H5T_ORDER_NONE:
+                s1 = "NONE";
+                break;
+            default:
+                s1 = "order?";
+                break;
+	}
+	fprintf(stream, ", %s", s1);
+
+	if (dt->shared->u.atomic.offset) {
+	    fprintf(stream, ", offset=%lu",
+		    (unsigned long) (dt->shared->u.atomic.offset));
+	}
+	if (dt->shared->u.atomic.prec != 8 * dt->shared->size) {
+	    fprintf(stream, ", prec=%lu",
+		    (unsigned long) (dt->shared->u.atomic.prec));
+	}
+	switch (dt->shared->type) {
+            case H5T_INTEGER:
+                switch (dt->shared->u.atomic.u.i.sign) {
+                    case H5T_SGN_NONE:
+                        s1 = "unsigned";
+                        break;
+                    case H5T_SGN_2:
+                        s1 = NULL;
+                        break;
+                    default:
+                        s1 = "sign?";
+                        break;
+                }
+                if (s1) fprintf(stream, ", %s", s1);
+                break;
+
+            case H5T_FLOAT:
+                switch (dt->shared->u.atomic.u.f.norm) {
+                    case H5T_NORM_IMPLIED:
+                        s1 = "implied";
+                        break;
+                    case H5T_NORM_MSBSET:
+                        s1 = "msbset";
+                        break;
+                    case H5T_NORM_NONE:
+                        s1 = "no-norm";
+                        break;
+                    default:
+                        s1 = "norm?";
+                        break;
+                }
+                fprintf(stream, ", sign=%lu+1",
+                        (unsigned long) (dt->shared->u.atomic.u.f.sign));
+                fprintf(stream, ", mant=%lu+%lu (%s)",
+                        (unsigned long) (dt->shared->u.atomic.u.f.mpos),
+                        (unsigned long) (dt->shared->u.atomic.u.f.msize), s1);
+                fprintf(stream, ", exp=%lu+%lu",
+                        (unsigned long) (dt->shared->u.atomic.u.f.epos),
+                        (unsigned long) (dt->shared->u.atomic.u.f.esize));
+                tmp = dt->shared->u.atomic.u.f.ebias >> 32;
+                if (tmp) {
+                    size_t hi=(size_t)tmp;
+                    size_t lo =(size_t)(dt->shared->u.atomic.u.f.ebias & 0xffffffff);
+                    fprintf(stream, " bias=0x%08lx%08lx",
+                            (unsigned long)hi, (unsigned long)lo);
+                } else {
+                    size_t lo = (size_t)(dt->shared->u.atomic.u.f.ebias & 0xffffffff);
+                    fprintf(stream, " bias=0x%08lx", (unsigned long)lo);
+                }
+                break;
+
+            default:
+                /* No additional info */
+                break;
+	}
+
+    } else if (H5T_COMPOUND==dt->shared->type) {
+	/* Compound data type */
+	for (i=0; i<dt->shared->u.compnd.nmembs; i++) {
+	    fprintf(stream, "\n\"%s\" @%lu",
+		    dt->shared->u.compnd.memb[i].name,
+		    (unsigned long) (dt->shared->u.compnd.memb[i].offset));
+#ifdef OLD_WAY
+	    if (dt->shared->u.compnd.memb[i].ndims) {
+		fprintf(stream, "[");
+		for (j = 0; j < dt->shared->u.compnd.memb[i].ndims; j++) {
+		    fprintf(stream, "%s%lu", j ? ", " : "",
+			    (unsigned long)(dt->shared->u.compnd.memb[i].dim[j]));
+		}
+		fprintf(stream, "]");
+	    }
+#endif /* OLD_WAY */
+	    fprintf(stream, " ");
+	    H5T_debug(dt->shared->u.compnd.memb[i].type, stream);
+	}
+	fprintf(stream, "\n");
+
+    } else if (H5T_ENUM==dt->shared->type) {
+	/* Enumeration data type */
+	fprintf(stream, " ");
+	H5T_debug(dt->shared->parent, stream);
+	base_size = dt->shared->parent->shared->size;
+	for (i=0; i<dt->shared->u.enumer.nmembs; i++) {
+	    fprintf(stream, "\n\"%s\" = 0x", dt->shared->u.enumer.name[i]);
+	    for (k=0; k<base_size; k++) {
+		fprintf(stream, "%02lx",
+			(unsigned long)(dt->shared->u.enumer.value+i*base_size+k));
+	    }
+	}
+	fprintf(stream, "\n");
+
+    } else if (H5T_OPAQUE==dt->shared->type) {
+	fprintf(stream, ", tag=\"%s\"", dt->shared->u.opaque.tag);
+
+    } else {
+	/* Unknown */
+	fprintf(stream, "unknown class %d\n", (int)(dt->shared->type));
+    }
+    fprintf(stream, "}");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5TS.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5TS.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5TS.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,348 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* private headers */
+#include "H5private.h"		/*library                 		*/
+#include "H5Eprivate.h"		/*error handling          		*/
+#include "H5MMprivate.h"	/*memory management functions		*/
+
+#ifdef H5_HAVE_THREADSAFE
+
+/* Module specific data structures */
+
+/* cancelability structure */
+typedef struct H5TS_cancel_struct {
+    int previous_state;
+    unsigned int cancel_count;
+} H5TS_cancel_t;
+
+/* Global variable definitions */
+pthread_once_t H5TS_first_init_g = PTHREAD_ONCE_INIT;
+pthread_key_t H5TS_errstk_key_g;
+pthread_key_t H5TS_funcstk_key_g;
+pthread_key_t H5TS_cancel_key_g;
+hbool_t H5TS_allow_concurrent_g = FALSE; /* concurrent APIs override this */
+
+/* Local function definitions */
+#ifdef NOT_USED
+static void H5TS_mutex_init(H5TS_mutex_t *mutex);
+#endif /* NOT_USED */
+
+
+/*--------------------------------------------------------------------------
+ * NAME
+ *    H5TS_key_destructor
+ *
+ * USAGE
+ *    H5TS_key_destructor()
+ *
+ * RETURNS
+ *
+ * DESCRIPTION
+ *   Frees the memory for a key.  Called by each thread as it exits.
+ *   Currently all the thread-specific information for all keys are simple
+ *   structures allocated with malloc, so we can free them all uniformly.
+ *
+ * PROGRAMMER: Quincey Koziol
+ *             February 7, 2003
+ *
+ * MODIFICATIONS:
+ *
+ *--------------------------------------------------------------------------
+ */
+static void
+H5TS_key_destructor(void *key_val)
+{
+    /* Use HDfree here instead of H5MM_xfree(), to avoid calling the H5FS routines */
+    if(key_val!=NULL)
+        HDfree(key_val);
+}
+
+/*--------------------------------------------------------------------------
+ * NAME
+ *    H5TS_first_thread_init
+ *
+ * USAGE
+ *    H5TS_first_thread_init()
+ *
+ * RETURNS
+ *
+ * DESCRIPTION
+ *   Initialization of global API lock, keys for per-thread error stacks and
+ *   cancallability information. Called by the first thread that enters the
+ *   library.
+ *
+ * PROGRAMMER: Chee Wai LEE
+ *             May 2, 2000
+ *
+ * MODIFICATIONS:
+ *
+ *--------------------------------------------------------------------------
+ */
+void
+H5TS_first_thread_init(void)
+{
+    H5_g.H5_libinit_g = FALSE;
+
+    /* set the two pthread_t objects to ``null'' */
+    H5_g.init_lock.owner_thread = NULL;
+
+    /* initialize global API mutex lock */
+    pthread_mutex_init(&H5_g.init_lock.atomic_lock, NULL);
+    pthread_cond_init(&H5_g.init_lock.cond_var, NULL);
+    H5_g.init_lock.lock_count = 0;
+
+    /* initialize key for thread-specific error stacks */
+    pthread_key_create(&H5TS_errstk_key_g, H5TS_key_destructor);
+
+    /* initialize key for thread-specific function stacks */
+    pthread_key_create(&H5TS_funcstk_key_g, H5TS_key_destructor);
+
+    /* initialize key for thread cancellability mechanism */
+    pthread_key_create(&H5TS_cancel_key_g, H5TS_key_destructor);
+}
+
+/*--------------------------------------------------------------------------
+ * NAME
+ *    H5TS_mutex_lock
+ *
+ * USAGE
+ *    H5TS_mutex_lock(&mutex_var)
+ *
+ * RETURNS
+ *    0 on success and non-zero on error.
+ *
+ * DESCRIPTION
+ *    Recursive lock semantics for HDF5 (locking) -
+ *    Multiple acquisition of a lock by a thread is permitted with a
+ *    corresponding unlock operation required.
+ *
+ * PROGRAMMER: Chee Wai LEE
+ *             May 2, 2000
+ *
+ * MODIFICATIONS:
+ *
+ *    19 May 2000, Bill Wendling
+ *    Changed (*foo). form of accessing structure members to the -> form.
+ *
+ *--------------------------------------------------------------------------
+ */
+herr_t
+H5TS_mutex_lock(H5TS_mutex_t *mutex)
+{
+    herr_t ret_value;
+
+    ret_value = pthread_mutex_lock(&mutex->atomic_lock);
+
+    if (ret_value)
+        return ret_value;
+
+    if (mutex->owner_thread && pthread_equal(pthread_self(), *mutex->owner_thread)) {
+        /* already owned by self - increment count */
+        mutex->lock_count++;
+    } else if (!mutex->owner_thread) {
+        /* no one else has locked it - set owner and grab lock */
+	mutex->owner_thread = H5MM_malloc(sizeof(pthread_t));
+
+	if (!mutex->owner_thread) {
+	    H5E_push(H5E_RESOURCE, H5E_NOSPACE, "H5TS_mutex_lock",
+		     __FILE__, __LINE__, "memory allocation failed");
+	    return FAIL;
+	}
+
+        *mutex->owner_thread = pthread_self();
+        mutex->lock_count = 1;
+    } else {
+        /* if already locked by someone else */
+        for (;;) {
+	    pthread_cond_wait(&mutex->cond_var, &mutex->atomic_lock);
+
+	    if (!mutex->owner_thread) {
+		mutex->owner_thread = H5MM_malloc(sizeof(pthread_t));
+
+		if (!mutex->owner_thread) {
+		    H5E_push(H5E_RESOURCE, H5E_NOSPACE, "H5TS_mutex_lock",
+			     __FILE__, __LINE__, "memory allocation failed");
+		    return FAIL;
+		}
+
+	        *mutex->owner_thread = pthread_self();
+	        mutex->lock_count = 1;
+	        break;
+	    }
+        }
+    }
+
+    return pthread_mutex_unlock(&mutex->atomic_lock);
+}
+
+/*--------------------------------------------------------------------------
+ * NAME
+ *    H5TS_mutex_unlock
+ *
+ * USAGE
+ *    H5TS_mutex_unlock(&mutex_var)
+ *
+ * RETURNS
+ *    0 on success and non-zero on error.
+ *
+ * DESCRIPTION
+ *    Recursive lock semantics for HDF5 (unlocking) -
+ *    Multiple acquisition of a lock by a thread is permitted with a
+ *    corresponding unlock operation required.
+ *
+ * PROGRAMMER: Chee Wai LEE
+ *             May 2, 2000
+ *
+ * MODIFICATIONS:
+ *
+ *    19 May 2000, Bill Wendling
+ *    Changed (*foo). form of accessing structure members to the -> form.
+ *    Also gave the function a return value.
+ *
+ *--------------------------------------------------------------------------
+ */
+herr_t
+H5TS_mutex_unlock(H5TS_mutex_t *mutex)
+{
+    herr_t ret_value;
+
+    ret_value = pthread_mutex_lock(&mutex->atomic_lock);
+
+    if (ret_value)
+	    return ret_value;
+
+    mutex->lock_count--;
+
+    if (mutex->lock_count == 0) {
+	H5MM_xfree(mutex->owner_thread);
+	mutex->owner_thread = NULL;
+        ret_value = pthread_cond_signal(&mutex->cond_var);
+
+	if (ret_value) {
+	    pthread_mutex_unlock(&mutex->atomic_lock);
+	    return ret_value;
+	}
+    }
+
+    return pthread_mutex_unlock(&mutex->atomic_lock);
+}
+
+/*--------------------------------------------------------------------------
+ * NAME
+ *    H5TS_cancel_count_inc
+ *
+ * USAGE
+ *    H5TS_cancel_count_inc()
+ *
+ * RETURNS
+ *    0 on success non-zero error code on error.
+ *
+ * DESCRIPTION
+ *    Creates a cancelation counter for a thread if it is the first time
+ *    the thread is entering the library.
+ *
+ *    if counter value is zero, then set cancelability type of the thread
+ *    to PTHREAD_CANCEL_DISABLE as thread is entering the library and store
+ *    the previous cancelability type into cancelation counter.
+ *    Increase the counter value by 1.
+ *
+ * PROGRAMMER: Chee Wai LEE
+ *            May 2, 2000
+ *
+ * MODIFICATIONS:
+ *
+ *    19 May 2000, Bill Wendling
+ *    Changed function to return a value. Also changed the malloc() call to
+ *    the H5MM_malloc() call and checked the returned pointer.
+ *
+ *--------------------------------------------------------------------------
+ */
+herr_t
+H5TS_cancel_count_inc(void)
+{
+    H5TS_cancel_t *cancel_counter;
+    herr_t ret_value = 0;
+
+    cancel_counter = pthread_getspecific(H5TS_cancel_key_g);
+
+    if (!cancel_counter) {
+        /*
+	 * First time thread calls library - create new counter and associate
+         * with key
+         */
+	cancel_counter = H5MM_calloc(sizeof(H5TS_cancel_t));
+
+	if (!cancel_counter) {
+	    H5E_push(H5E_RESOURCE, H5E_NOSPACE, "H5TS_cancel_count_inc",
+		     __FILE__, __LINE__, "memory allocation failed");
+	    return FAIL;
+	}
+
+        ret_value = pthread_setspecific(H5TS_cancel_key_g,
+					(void *)cancel_counter);
+    }
+
+    if (cancel_counter->cancel_count == 0)
+        /* thread entering library */
+        ret_value = pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,
+					   &cancel_counter->previous_state);
+
+    ++cancel_counter->cancel_count;
+    return ret_value;
+}
+
+/*--------------------------------------------------------------------------
+ * NAME
+ *    H5TS_cancel_count_dec
+ *
+ * USAGE
+ *    H5TS_cancel_count_dec()
+ *
+ * RETURNS
+ *    0 on success and a non-zero error code on error.
+ *
+ * DESCRIPTION
+ *    If counter value is one, then set cancelability type of the thread
+ *    to the previous cancelability type stored in the cancelation counter.
+ *    (the thread is leaving the library).
+ *
+ *    Decrement the counter value by 1.
+ *
+ * PROGRAMMER: Chee Wai LEE
+ *             May 2, 2000
+ *
+ * MODIFICATIONS:
+ *
+ *    19 May 2000, Bill Wendling
+ *    Changed so that function returns a value. May be of limited usefulness.
+ *
+ *--------------------------------------------------------------------------
+ */
+herr_t
+H5TS_cancel_count_dec(void)
+{
+    herr_t ret_value = 0;
+    register H5TS_cancel_t *cancel_counter;
+
+    cancel_counter = pthread_getspecific(H5TS_cancel_key_g);
+
+    if (cancel_counter->cancel_count == 1)
+        ret_value = pthread_setcancelstate(cancel_counter->previous_state, NULL);
+
+    --cancel_counter->cancel_count;
+    return ret_value;
+}
+
+#endif	/* H5_HAVE_THREADSAFE */

Added: packages/hdf5/branches/upstream/current/src/H5TSprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5TSprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5TSprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:		H5TSprivate.h
+ *			May 2 2000
+ *			Chee Wai LEE
+ *
+ * Purpose:		Private non-prototype header.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef H5TSprivate_H_
+#define H5TSprivate_H_
+
+/* Public headers needed by this file */
+#ifdef LATER
+#include "H5TSpublic.h"		/*Public API prototypes */
+#endif /* LATER */
+
+/* Library level data structures */
+
+typedef struct H5TS_mutex_struct {
+    pthread_t *owner_thread;		/* current lock owner */
+    pthread_mutex_t atomic_lock;	/* lock for atomicity of new mechanism */
+    pthread_cond_t cond_var;		/* condition variable */
+    unsigned int lock_count;
+} H5TS_mutex_t;
+
+/* Extern global variables */
+extern pthread_once_t H5TS_first_init_g;
+extern pthread_key_t H5TS_errstk_key_g;
+extern pthread_key_t H5TS_funcstk_key_g;
+
+#if defined c_plusplus || defined __cplusplus
+extern      "C"
+{
+#endif	/* c_plusplus || __cplusplus */
+
+H5_DLL void H5TS_first_thread_init(void);
+H5_DLL herr_t H5TS_mutex_lock(H5TS_mutex_t *mutex);
+H5_DLL herr_t H5TS_mutex_unlock(H5TS_mutex_t *mutex);
+H5_DLL herr_t H5TS_cancel_count_inc(void);
+H5_DLL herr_t H5TS_cancel_count_dec(void);
+
+#if defined c_plusplus || defined __cplusplus
+}
+#endif	/* c_plusplus || __cplusplus */
+
+#endif	/* H5TSprivate_H_ */

Added: packages/hdf5/branches/upstream/current/src/H5Tarray.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tarray.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tarray.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,341 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for array datatypes in
+ *      the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_array_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling			*/
+#include "H5FLprivate.h"	/* Free Lists				*/
+#include "H5Iprivate.h"		/* IDs					*/
+#include "H5Tpkg.h"		/* Datatypes				*/
+
+/* Declare extern the free list for H5T_t's */
+H5FL_EXTERN(H5T_t);
+H5FL_EXTERN(H5T_shared_t);
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_array_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_array_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_array_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_array_interface);
+
+    FUNC_LEAVE_NOAPI(H5T_init());
+} /* H5T_init_array_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tarray_create
+ *
+ * Purpose:	Create a new array data type based on the specified BASE_TYPE.
+ *		The type is an array with NDIMS dimensionality and the size of the
+ *      array is DIMS. The total member size should be relatively small.
+ *      PERM is currently unimplemented and unused, but is designed to contain
+ *      the dimension permutation from C order.
+ *      Array datatypes are currently limited to H5S_MAX_RANK number of
+ *      dimensions and must have the number of dimensions set greater than
+ *      0. (i.e. 0 > ndims <= H5S_MAX_RANK)  All dimensions sizes must be greater
+ *      than 0 also.
+ *
+ * Return:	Success:	ID of new array data type
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, Oct 26, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Tarray_create(hid_t base_id, int ndims, const hsize_t dim[/* ndims */],
+    const int perm[/* ndims */])
+{
+    H5T_t	*base = NULL;		/* base data type	*/
+    H5T_t	*dt = NULL;		    /* new array data type	*/
+    int    i;                  /* local index variable */
+    hid_t	ret_value;	/* return value			*/
+
+    FUNC_ENTER_API(H5Tarray_create, FAIL);
+    H5TRACE4("i","iIs*h*Is",base_id,ndims,dim,perm);
+
+    /* Check args */
+    if (ndims<1 || ndims>H5S_MAX_RANK)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid dimensionality");
+    if (ndims>0 && !dim)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no dimensions specified");
+    for(i=0; i<ndims; i++)
+        if(!(dim[i]>0))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "zero-sized dimension specified");
+    if (NULL==(base=H5I_object_verify(base_id,H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an valid base datatype");
+
+    /* Create the actual array datatype */
+    if ((dt=H5T_array_create(base,ndims,dim,perm))==NULL)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to create datatype");
+
+    /* Atomize the type */
+    if ((ret_value=H5I_register(H5I_DATATYPE, dt))<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register datatype");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* end H5Tarray_create */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_array_create
+ *
+ * Purpose:	Internal routine to create a new array data type based on the
+ *      specified BASE_TYPE.  The type is an array with NDIMS dimensionality
+ *      and the size of the array is DIMS.  PERM is currently unimplemented
+ *      and unused, but is designed to contain the dimension permutation from
+ *      C order.  Array datatypes are currently limited to H5S_MAX_RANK number
+ *      of *      dimensions.
+ *
+ * Return:	Success:	ID of new array data type
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, Oct 26, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_t *
+H5T_array_create(H5T_t *base, int ndims, const hsize_t dim[/* ndims */],
+    const int perm[/* ndims */])
+{
+    H5T_t	*ret_value = NULL;		/*new array data type	*/
+    int    i;                  /* local index variable */
+
+    FUNC_ENTER_NOAPI(H5T_array_create, NULL);
+
+    assert(base);
+    assert(ndims>0 && ndims<=H5S_MAX_RANK);
+    assert(dim);
+
+    /* Build new type */
+    if(NULL == (ret_value = H5T_alloc()))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+    ret_value->shared->type = H5T_ARRAY;
+
+    /* Copy the base type of the array */
+    ret_value->shared->parent = H5T_copy(base, H5T_COPY_ALL);
+
+    /* Set the array parameters */
+    ret_value->shared->u.array.ndims = ndims;
+
+    /* Copy the array dimensions & compute the # of elements in the array */
+    for(i=0, ret_value->shared->u.array.nelem=1; i<ndims; i++) {
+        H5_ASSIGN_OVERFLOW(ret_value->shared->u.array.dim[i],dim[i],hsize_t,size_t);
+        ret_value->shared->u.array.nelem *= (size_t)dim[i];
+    } /* end for */
+
+    /* Copy the dimension permutations */
+    for(i=0; i<ndims; i++)
+        ret_value->shared->u.array.perm[i] = perm ? perm[i] : i;
+
+    /* Set the array's size (number of elements * element datatype's size) */
+    ret_value->shared->size = ret_value->shared->parent->shared->size * ret_value->shared->u.array.nelem;
+
+    /*
+     * Set the "force conversion" flag if the base datatype indicates
+     */
+    if(base->shared->force_conv==TRUE)
+        ret_value->shared->force_conv=TRUE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5T_array_create */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_array_ndims
+ *
+ * Purpose:	Query the number of dimensions for an array datatype.
+ *
+ * Return:	Success:	Number of dimensions of the array datatype
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, November 6, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Tget_array_ndims(hid_t type_id)
+{
+    H5T_t	*dt = NULL;		    /* pointer to array data type	*/
+    int	ret_value;	    /* return value			*/
+
+    FUNC_ENTER_API(H5Tget_array_ndims, FAIL);
+    H5TRACE1("Is","i",type_id);
+
+    /* Check args */
+    if (NULL==(dt=H5I_object_verify(type_id,H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+    if(dt->shared->type!=H5T_ARRAY)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an array datatype");
+
+    /* Retrieve the number of dimensions */
+    ret_value = H5T_get_array_ndims(dt);
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* end H5Tget_array_ndims */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_get_array_ndims
+ *
+ * Purpose:	Private function for H5T_get_array_ndims.  Query the number
+ *              of dimensions for an array datatype.
+ *
+ * Return:	Success:	Number of dimensions of the array datatype
+ *		Failure:	Negative
+ *
+ * Programmer:	Raymond Lu
+ *              October 10, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5T_get_array_ndims(H5T_t *dt)
+{
+    int	ret_value;	    /* return value			*/
+
+    FUNC_ENTER_NOAPI(H5T_get_array_ndims, FAIL);
+
+    assert(dt);
+    assert(dt->shared->type==H5T_ARRAY);
+
+    /* Retrieve the number of dimensions */
+    ret_value=dt->shared->u.array.ndims;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5T_get_array_ndims */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_array_dims
+ *
+ * Purpose:	Query the sizes of dimensions for an array datatype.
+ *
+ * Return:	Success:	Number of dimensions of the array type
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, November 6, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Tget_array_dims(hid_t type_id, hsize_t dims[], int perm[])
+{
+    H5T_t	*dt = NULL;		    /* pointer to array data type	*/
+    int	ret_value;	/* return value			*/
+
+    FUNC_ENTER_API(H5Tget_array_dims, FAIL);
+    H5TRACE3("Is","i*h*Is",type_id,dims,perm);
+
+    /* Check args */
+    if (NULL==(dt=H5I_object_verify(type_id,H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype object");
+    if(dt->shared->type!=H5T_ARRAY)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an array datatype");
+
+    /* Retrieve the sizes of the dimensions */
+    if((ret_value=H5T_get_array_dims(dt, dims, perm))<0)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "unable to get dimension sizes");
+done:
+    FUNC_LEAVE_API(ret_value);
+}   /* end H5Tget_array_dims */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_get_array_dims
+ *
+ * Purpose:	Private function for H5T_get_array_dims.  Query the sizes
+ *              of dimensions for an array datatype.
+ *
+ * Return:	Success:	Number of dimensions of the array type
+ *		Failure:	Negative
+ *
+ * Programmer:  Raymond Lu
+ *              October 10, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5T_get_array_dims(H5T_t *dt, hsize_t dims[], int perm[])
+{
+    int	ret_value;	/* return value			*/
+    int    i;                  /* Local index variable */
+
+    FUNC_ENTER_NOAPI(H5T_get_array_dims, FAIL);
+
+    assert(dt);
+    assert(dt->shared->type==H5T_ARRAY);
+
+    /* Retrieve the sizes of the dimensions */
+    if(dims)
+        for(i=0; i<dt->shared->u.array.ndims; i++)
+            dims[i]=dt->shared->u.array.dim[i];
+
+    /* Retrieve the dimension permutations */
+    if(perm)
+        for(i=0; i<dt->shared->u.array.ndims; i++)
+            perm[i]=dt->shared->u.array.perm[i];
+
+    /* Pass along the array rank as the return value */
+    ret_value=dt->shared->u.array.ndims;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5T_get_array_dims */
+

Added: packages/hdf5/branches/upstream/current/src/H5Tbit.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tbit.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tbit.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,478 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info:	Operations on bit vectors.  A bit vector is an array of bytes
+ *		with the least-significant bits in the first byte.  That is,
+ *		the bytes are in little-endian order.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+
+#include "H5private.h"		/*generic functions			  */
+#include "H5Eprivate.h"		/*error handling			  */
+#include "H5Iprivate.h"		/*ID functions		   		  */
+#include "H5Tpkg.h"		/*data-type functions			  */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_bit_copy
+ *
+ * Purpose:	Copies bits from one vector to another.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, June 10, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+H5T_bit_copy (uint8_t *dst, size_t dst_offset, const uint8_t *src,
+	      size_t src_offset, size_t size)
+{
+    int	shift;
+    unsigned	mask_lo, mask_hi;
+    int	s_idx, d_idx;
+
+    /*
+     * Normalize the offset to be a byte number and a bit offset within that
+     * byte.
+     */
+    s_idx = (int)src_offset / 8;
+    d_idx = (int)dst_offset / 8;
+    src_offset %= 8;
+    dst_offset %= 8;
+
+    /*
+     * Get things rolling. This means copying bits until we're aligned on a
+     * source byte.  This the following example, five bits are copied to the
+     * destination.
+     *
+     *                      src[s_idx]
+     *   +---------------+---------------+
+     *   |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|
+     *   +---------------+---------------+
+     *      ... : : : : : | | | | |
+     *      ... v v v v v V V V V V
+     *      ...+---------------+---------------+
+     *      ...|7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|
+     *      ...+---------------+---------------+
+     *           dst[d_idx+1]      dst[d_idx]
+     */
+    while (src_offset && size>0) {
+	unsigned nbits = (unsigned)MIN3 (size, 8-dst_offset, 8-src_offset);
+	unsigned mask = (1<<nbits) - 1;
+
+	dst[d_idx] &= ~(mask<<dst_offset);
+	dst[d_idx] |= ((src[s_idx]>>src_offset)&mask) << dst_offset;
+
+	src_offset += nbits;
+	if (src_offset>=8) {
+	    s_idx++;
+	    src_offset %= 8;
+	}
+	dst_offset += nbits;
+	if (dst_offset>=8) {
+	    d_idx++;
+	    dst_offset %= 8;
+	}
+	size -= nbits;
+    }
+
+    /*
+     * The middle bits. We are aligned on a source byte which needs to be
+     * copied to two (or one in the degenerate case) destination bytes.
+     *
+     * 		      src[s_idx]
+     * 		   +---------------+
+     *  	   |7 6 5 4 3 2 1 0|
+     * 		   +---------------+
+     *              | | | | | | | |
+     * 		    V V V V V V V V
+     *   +---------------+---------------+
+     *   |7 6 5 4 3 2 1 0|7 6 5 4 3 2 1 0|
+     *   +---------------+---------------+
+     *     dst[d_idx+1]      dst[d_idx]
+     *
+     *
+     * Calculate shifts and masks.  See diagrams below.  MASK_LO in this
+     * example is 0x1f (the low five bits) and MASK_HI is 0xe0 (the high three
+     * bits). SHIFT is three since the source must be shifted right three bits
+     * to line up with the destination.
+     */
+    shift = (int)dst_offset;
+    mask_lo = (1<<(8-shift))-1;
+    mask_hi = (~mask_lo) & 0xff;
+
+    for (/*void*/; size>8; size-=8, d_idx++, s_idx++) {
+	if (shift) {
+	    dst[d_idx+0] &= ~(mask_lo<<shift);
+	    dst[d_idx+0] |= (src[s_idx] & mask_lo) << shift;
+	    dst[d_idx+1] &= ~(mask_hi>>(8-shift));
+	    dst[d_idx+1] |= (src[s_idx] & mask_hi) >> (8-shift);
+	} else {
+	    dst[d_idx] = src[s_idx];
+	}
+    }
+
+    /* Finish up */
+    while (size>0) {
+	unsigned nbits = (unsigned)MIN3 (size, 8-dst_offset, 8-src_offset);
+	unsigned mask = (1<<nbits) - 1;
+
+	dst[d_idx] &= ~(mask<<dst_offset);
+	dst[d_idx] |= ((src[s_idx]>>src_offset)&mask) << dst_offset;
+
+	src_offset += nbits;
+	if (src_offset>=8) {
+	    s_idx++;
+	    src_offset %= 8;
+	}
+	dst_offset += nbits;
+	if (dst_offset>=8) {
+	    d_idx++;
+	    dst_offset %= 8;
+	}
+	size -= nbits;
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_bit_get_d
+ *
+ * Purpose:	Return a small bit sequence as a number.  Bit vector starts
+ *              at OFFSET and is SIZE bits long.
+ *
+ * Return:	Success:	The bit sequence interpretted as an unsigned
+ *				integer.
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, June 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t
+H5T_bit_get_d (uint8_t *buf, size_t offset, size_t size)
+{
+    hsize_t	val=0;
+    size_t	i, hs;
+    hsize_t	ret_value;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5T_bit_get_d);
+
+    assert (8*sizeof(val)>=size);
+
+    H5T_bit_copy ((uint8_t*)&val, 0, buf, offset, size);
+    switch (H5T_native_order_g) {
+        case H5T_ORDER_LE:
+            break;
+
+        case H5T_ORDER_BE:
+            for (i=0, hs=sizeof(val)/2; i<hs; i++) {
+                uint8_t tmp = ((uint8_t*)&val)[i];
+                ((uint8_t*)&val)[i] = ((uint8_t*)&val)[sizeof(val)-(i+1)];
+                ((uint8_t*)&val)[sizeof(val)-(i+1)] = tmp;
+            }
+            break;
+
+        default:
+            HDabort ();
+    }
+
+    /* Set return value */
+    ret_value=val;
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_bit_set_d
+ *
+ * Purpose:	Sets part of a bit vector to the specified unsigned value.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, June 24, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+H5T_bit_set_d (uint8_t *buf, size_t offset, size_t size, hsize_t val)
+{
+    size_t	i, hs;
+
+    assert (8*sizeof(val)>=size);
+
+    switch (H5T_native_order_g) {
+        case H5T_ORDER_LE:
+            break;
+
+        case H5T_ORDER_BE:
+            for (i=0, hs=sizeof(val)/2; i<hs; i++) {
+                uint8_t tmp = ((uint8_t*)&val)[i];
+                ((uint8_t*)&val)[i] = ((uint8_t*)&val)[sizeof(val)-(i+1)];
+                ((uint8_t*)&val)[sizeof(val)-(i+1)] = tmp;
+            }
+            break;
+
+        default:
+            HDabort ();
+    }
+
+    H5T_bit_copy (buf, offset, (uint8_t*)&val, 0, size);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_bit_set
+ *
+ * Purpose:	Sets or clears bits in a contiguous region of a vector
+ *		beginning at bit OFFSET and continuing for SIZE bits.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, June 10, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+H5T_bit_set (uint8_t *buf, size_t offset, size_t size, hbool_t value)
+{
+    int	idx;
+
+    /* Normalize */
+    idx = (int)offset / 8;
+    offset %= 8;
+
+    /* The first partial byte */
+    if (size && offset%8) {
+	size_t nbits = MIN (size, 8-offset);
+	unsigned mask = (1<<nbits)-1;
+	if (value) {
+	    buf[idx++] |= mask << offset;
+	} else {
+	    buf[idx++] &= ~(mask << offset);
+	}
+	size -= nbits;
+    }
+
+    /* The middle bytes */
+    while (size>=8) {
+	buf[idx++] = value ? 0xff : 0x00;
+	size -= 8;
+    }
+
+    /* The last partial byte */
+    if (size) {
+	if (value) {
+	    buf[idx] |= (1<<size)-1;
+	} else {
+	    buf[idx] &= ~((1<<size)-1);
+	}
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_bit_find
+ *
+ * Purpose:	Finds the first bit with the specified VALUE within a region
+ *		of a bit vector.  The region begins at OFFSET and continues
+ *		for SIZE bits, but the region can be searched from the least
+ *		significat end toward the most significant end(H5T_BIT_LSB
+ *		as DIRECTION), or from the most significant end to the least
+ *		significant end(H5T_BIT_MSB as DIRECTION).
+ *
+ * Return:	Success:	The position of the bit found, relative to
+ *				the offset.
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, June 10, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+ssize_t
+H5T_bit_find (uint8_t *buf, size_t offset, size_t size, H5T_sdir_t direction,
+	      hbool_t value)
+{
+    ssize_t	base=(ssize_t)offset;
+    ssize_t	idx, i;
+    size_t	iu;
+    ssize_t     ret_value=(-1);         /* Return value */
+
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_bit_find);
+
+    /* Some functions call this with value=TRUE */
+    assert (TRUE==1);
+
+    switch (direction) {
+    case H5T_BIT_LSB:
+	/* Calculate index */
+	idx = (ssize_t)(offset / 8);
+	offset %= 8;
+
+	/* Beginning */
+	if (offset) {
+	    for (iu=offset; iu<8 && size>0; iu++, size--) {
+		if (value==(hbool_t)((buf[idx]>>iu) & 0x01))
+		    HGOTO_DONE(8*idx+(ssize_t)iu - base);
+	    }
+	    offset = 0;
+	    idx++;
+	}
+	/* Middle */
+	while (size>=8) {
+	    if ((value?0x00:0xff)!=buf[idx]) {
+		for (i=0; i<8; i++) {
+		    if (value==(hbool_t)((buf[idx]>>i) & 0x01))
+			HGOTO_DONE(8*idx+i - base);
+		}
+	    }
+	    size -= 8;
+	    idx++;
+	}
+	/* End */
+	for (i=0; i<(ssize_t)size; i++) {
+	    if (value==(hbool_t)((buf[idx]>>i) & 0x01))
+		HGOTO_DONE(8*idx+i - base);
+	}
+	break;
+
+    case H5T_BIT_MSB:
+	/* Calculate index */
+	idx = (ssize_t)((offset+size-1) / 8);
+	offset %= 8;
+
+	/* Beginning */
+	if (size>8-offset && (offset+size)%8) {
+	    for (iu=(offset+size)%8; iu>0; --iu, --size) {
+		if (value==(hbool_t)((buf[idx]>>(iu-1)) & 0x01))
+		    HGOTO_DONE(8*idx+(ssize_t)(iu-1) - base);
+	    }
+	    --idx;
+	}
+	/* Middle */
+	while (size>=8) {
+	    if ((value?0x00:0xff)!=buf[idx]) {
+		for (i=7; i>=0; --i) {
+		    if (value==(hbool_t)((buf[idx]>>i) & 0x01))
+			HGOTO_DONE(8*idx+i - base);
+		}
+	    }
+	    size -= 8;
+	    --idx;
+	}
+	/* End */
+	if (size>0) {
+	    for (iu=offset+size; iu>offset; --iu) {
+		if (value==(hbool_t)((buf[idx]>>(iu-1)) & 0x01))
+		    HGOTO_DONE(8*idx+(ssize_t)(iu-1) - base);
+	    }
+	}
+	break;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_bit_inc
+ *
+ * Purpose:	Increment part of a bit field by adding 1.  The bit field
+ *              starts with bit position START and is SIZE bits long.
+ *
+ * Return:	Success:        The carry-out value.  One if overflows,
+ *                              zero otherwise.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, June 26, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5T_bit_inc(uint8_t *buf, size_t start, size_t size)
+{
+    size_t	idx = start / 8;
+    unsigned	carry = 1;
+    unsigned	acc, mask;
+
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_bit_inc);
+
+    assert(buf);
+    start %= 8;
+
+    /* The first partial byte */
+    if (start) {
+	if (size+start<8) mask = (1<<size)-1;
+	else mask = (1<<(8-start))-1;
+	acc = (buf[idx]>>start) & mask;
+	acc += 1;
+	carry = acc & (1<<MIN(size, 8-start));
+	buf[idx] &= ~(mask<<start);
+	buf[idx] |= (acc & mask) << start;
+	size -= MIN(size, 8-start);
+	start=0;
+	idx++;
+    }
+
+    /* The middle */
+    while (carry && size>=8) {
+	acc = buf[idx];
+	acc += 1;
+	carry = acc & 0x100;
+	buf[idx] = acc & 0xff;
+	idx++;
+	size -= 8;
+    }
+
+    /* The last bits */
+    if (carry && size>0) {
+	mask = (1<<size)-1;
+	acc = buf[idx] & mask;
+	acc += 1;
+	carry = acc & (1<<size);
+	buf[idx] &= ~mask;
+	buf[idx] |= acc & mask;
+    }
+
+    FUNC_LEAVE_NOAPI(carry ? TRUE : FALSE);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Tcommit.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tcommit.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tcommit.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,292 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for committing datatypes
+ *      to a file for the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_commit_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling			*/
+#include "H5FOprivate.h"	/* File objects				*/
+#include "H5Iprivate.h"		/* IDs					*/
+#include "H5Oprivate.h"		/* Object headers			*/
+#include "H5Tpkg.h"		/* Datatypes				*/
+
+/* Static local functions */
+static herr_t H5T_commit(H5G_entry_t *loc, const char *name, H5T_t *type, hid_t dxpl_id);
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_commit_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_commit_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_commit_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_commit_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_commit_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tcommit
+ *
+ * Purpose:	Save a transient datatype to a file and turn the type handle
+ *		into a named, immutable type.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, June  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tcommit(hid_t loc_id, const char *name, hid_t type_id)
+{
+    H5G_entry_t	*loc = NULL;
+    H5T_t	*type = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tcommit, FAIL)
+    H5TRACE3("e","isi",loc_id,name,type_id);
+
+    /* Check arguments */
+    if (NULL==(loc=H5G_loc (loc_id)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a location")
+    if (!name || !*name)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
+    if (NULL==(type=H5I_object_verify(type_id, H5I_DATATYPE)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+
+    /* Commit the type */
+    if (H5T_commit(loc, name, type, H5AC_dxpl_id)<0)
+	HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to commit datatype")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_commit
+ *
+ * Purpose:	Commit a type, giving it a name and causing it to become
+ *		immutable.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, June  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T_commit (H5G_entry_t *loc, const char *name, H5T_t *type, hid_t dxpl_id)
+{
+    H5F_t	*file = NULL;
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_commit)
+
+    HDassert (loc);
+    HDassert (name && *name);
+    HDassert (type);
+
+    /*
+     * Check arguments.  We cannot commit an immutable type because H5Tclose()
+     * normally fails on such types (try H5Tclose(H5T_NATIVE_INT)) but closing
+     * a named type should always succeed.
+     */
+    if (H5T_STATE_NAMED==type->shared->state || H5T_STATE_OPEN==type->shared->state)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "datatype is already committed")
+    if (H5T_STATE_IMMUTABLE==type->shared->state)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "datatype is immutable")
+
+    /* Find the insertion file */
+    if (NULL==(file=H5G_insertion_file(loc, name, dxpl_id)))
+	HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "unable to find insertion point")
+
+    /* Check for a "sensible" datatype to store on disk */
+    if(H5T_is_sensible(type)<=0)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "datatype is not sensible")
+
+    /* Mark datatype as being on disk now.  This step changes the size of datatype as
+     * stored on disk. */
+    if(H5T_vlen_mark(type, file, H5T_VLEN_DISK)<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location");
+
+    /*
+     * Create the object header and open it for write access. Insert the data
+     * type message and then give the object header a name.
+     */
+    if (H5O_create (file, dxpl_id, 64, &(type->ent))<0)
+	HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to create datatype object header")
+    if (H5O_modify (&(type->ent), H5O_DTYPE_ID, 0, H5O_FLAG_CONSTANT, H5O_UPDATE_TIME, type, dxpl_id)<0)
+	HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to update type header message")
+
+    /*
+     * Give the datatype a name.  That is, create and add a new object to the
+     * group this datatype is being initially created in.
+     */
+    if (H5G_insert (loc, name, &(type->ent), dxpl_id)<0)
+	HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to name datatype")
+    type->shared->state = H5T_STATE_OPEN;
+    type->shared->fo_count=1;
+
+    /* Add datatype to the list of open objects in the file */
+    if(H5FO_top_incr(type->ent.file, type->ent.header)<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINC, NULL, "can't incr object ref. count")
+    if(H5FO_insert(type->ent.file, type->ent.header, type->shared)<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINSERT, FAIL, "can't insert datatype into list of open objects")
+
+    /* Mark datatype as being on memory now.  Since this datatype may still be used in memory
+     * after committed to disk, change its size back as in memory. */
+    if (H5T_vlen_mark(type, NULL, H5T_VLEN_MEMORY)<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "cannot mark datatype in memory")
+
+done:
+    if (ret_value<0) {
+	if ((type->shared->state==H5T_STATE_TRANSIENT || type->shared->state==H5T_STATE_RDONLY) && H5F_addr_defined(type->ent.header)) {
+	    if(H5O_close(&(type->ent))<0)
+                HDONE_ERROR(H5E_DATATYPE, H5E_CLOSEERROR, FAIL, "unable to release object header")
+            if(H5O_delete(file, dxpl_id,type->ent.header)<0)
+                HDONE_ERROR(H5E_DATATYPE, H5E_CANTDELETE, FAIL, "unable to delete object header")
+	    type->ent.header = HADDR_UNDEF;
+	}
+    }
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tcommitted
+ *
+ * Purpose:	Determines if a datatype is committed or not.
+ *
+ * Return:	Success:	TRUE if committed, FALSE otherwise.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, June  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5Tcommitted(hid_t type_id)
+{
+    H5T_t	*type = NULL;
+    htri_t      ret_value;       /* Return value */
+
+    FUNC_ENTER_API(H5Tcommitted, FAIL)
+    H5TRACE1("t","i",type_id);
+
+    /* Check arguments */
+    if (NULL==(type=H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+
+    /* Set return value */
+    ret_value= H5T_committed(type);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_committed
+ *
+ * Purpose:	Determines if a datatype is committed or not.
+ *
+ * Return:	Success:	TRUE if committed, FALSE otherwise.
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, September 24, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5T_committed(const H5T_t *type)
+{
+    /* Use no-init for efficiency */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_committed)
+
+    assert (type);
+
+    FUNC_LEAVE_NOAPI(H5T_STATE_OPEN==type->shared->state || H5T_STATE_NAMED==type->shared->state)
+} /* end H5T_committed() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_link
+ *
+ * Purpose:	Adjust the link count for an object header by adding
+ *		ADJUST to the link count.
+ *
+ * Return:	Success:	New link count
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, September 26, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5T_link(const H5T_t *type, int adjust, hid_t dxpl_id)
+{
+    int ret_value;      /* Return value */
+
+    /* Use no-init for efficiency */
+    FUNC_ENTER_NOAPI(H5T_link,FAIL)
+
+    assert (type);
+
+    /* Adjust the link count on the named datatype */
+    if((ret_value=H5O_link(&(type->ent),adjust,dxpl_id))<0)
+        HGOTO_ERROR (H5E_DATATYPE, H5E_LINK, FAIL, "unable to adjust named datatype link count")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5T_link() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Tcompound.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tcompound.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tcompound.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,615 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for compound datatypes
+ *      in the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_compound_interface
+
+
+#include "H5private.h"		/*generic functions			  */
+#include "H5Eprivate.h"		/*error handling			  */
+#include "H5Iprivate.h"		/*ID functions		   		  */
+#include "H5MMprivate.h"	/*memory management			  */
+#include "H5Tpkg.h"		/*data-type functions			  */
+
+/* Local macros */
+#define H5T_COMPND_INC	64	/*typical max numb of members per struct */
+
+/* Static local functions */
+static herr_t H5T_pack(const H5T_t *dt);
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_compound_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_compound_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_compound_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_compound_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_compound_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_member_offset
+ *
+ * Purpose:	Returns the byte offset of the beginning of a member with
+ *		respect to the beginning of the compound datatype datum.
+ *
+ * Return:	Success:	Byte offset.
+ *
+ *		Failure:	Zero. Zero is a valid offset, but this
+ *				function will fail only if a call to
+ *				H5Tget_member_dims() fails with the same
+ *				arguments.
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5Tget_member_offset(hid_t type_id, unsigned membno)
+{
+    H5T_t	*dt = NULL;
+    size_t	ret_value;
+
+    FUNC_ENTER_API(H5Tget_member_offset, 0)
+    H5TRACE2("z","iIu",type_id,membno);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)) || H5T_COMPOUND != dt->shared->type)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a compound datatype")
+    if (membno >= dt->shared->u.compnd.nmembs)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, 0, "invalid member number")
+
+    /* Value */
+    ret_value = H5T_get_member_offset(dt, membno);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_get_member_offset
+ *
+ * Purpose:	Private function for H5Tget_member_offset.  Returns the byte
+ *              offset of the beginning of a member with respect to the
+ *              beginning of the compound datatype datum.
+ *
+ * Return:	Success:	Byte offset.
+ *
+ *		Failure:	Zero. Zero is a valid offset, but this
+ *				function will fail only if a call to
+ *				H5Tget_member_dims() fails with the same
+ *				arguments.
+ *
+ * Programmer:	Raymond Lu
+ *		October 8, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5T_get_member_offset(const H5T_t *dt, unsigned membno)
+{
+    size_t	ret_value;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_get_member_offset)
+
+    assert(dt);
+    assert(membno < dt->shared->u.compnd.nmembs);
+
+    /* Value */
+    ret_value = dt->shared->u.compnd.memb[membno].offset;
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_member_class
+ *
+ * Purpose:	Returns the datatype class of a member of a compound datatype.
+ *
+ * Return:	Success: Non-negative
+ *
+ *		Failure: H5T_NO_CLASS
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, November  9, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_class_t
+H5Tget_member_class(hid_t type_id, unsigned membno)
+{
+    H5T_t	*dt = NULL;
+    H5T_class_t	ret_value;
+
+    FUNC_ENTER_API(H5Tget_member_class, H5T_NO_CLASS)
+    H5TRACE2("Tt","iIu",type_id,membno);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)) || H5T_COMPOUND != dt->shared->type)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_NO_CLASS, "not a compound datatype")
+    if (membno >= dt->shared->u.compnd.nmembs)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, H5T_NO_CLASS, "invalid member number")
+
+    /* Get the type's class.  We have to use this function to get type class
+     * because of the concern of variable-length string. */
+    ret_value = H5T_get_class(dt->shared->u.compnd.memb[membno].type, FALSE);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Tget_member_class() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_member_type
+ *
+ * Purpose:	Returns the datatype of the specified member.	The caller
+ *		should invoke H5Tclose() to release resources associated with
+ *		the type.
+ *
+ * Return:	Success:	An OID of a copy of the member datatype;
+ *				modifying the returned datatype does not
+ *				modify the member type.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ * 	Robb Matzke, 4 Jun 1998
+ *	If the member type is a named type then this function returns a
+ *	handle to the re-opened named type.
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Tget_member_type(hid_t type_id, unsigned membno)
+{
+    H5T_t	*dt = NULL, *memb_dt = NULL;
+    hid_t	ret_value;
+
+    FUNC_ENTER_API(H5Tget_member_type, FAIL)
+    H5TRACE2("i","iIu",type_id,membno);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)) || H5T_COMPOUND != dt->shared->type)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a compound datatype")
+    if (membno >= dt->shared->u.compnd.nmembs)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid member number")
+    if ((memb_dt=H5T_get_member_type(dt, membno))==NULL)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to retrieve member type")
+    if ((ret_value = H5I_register(H5I_DATATYPE, memb_dt)) < 0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable register datatype atom")
+
+done:
+    if(ret_value<0) {
+        if(memb_dt!=NULL)
+            if(H5T_close(memb_dt)<0)
+	        HDONE_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "can't close datatype")
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_get_member_type
+ *
+ * Purpose:	Private function for H5Tget_member_type.  Returns the data
+ *              type of the specified member.
+ *
+ * Return:	Success:	A copy of the member datatype;
+ *				modifying the returned datatype does not
+ *				modify the member type.
+ *
+ *		Failure:        NULL
+ *
+ * Programmer:	Raymond Lu
+ *	        October 8, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_t *
+H5T_get_member_type(const H5T_t *dt, unsigned membno)
+{
+    H5T_t	*ret_value = NULL;
+
+    FUNC_ENTER_NOAPI(H5T_get_member_type, NULL)
+
+    assert(dt);
+    assert(membno < dt->shared->u.compnd.nmembs);
+
+    /* Copy datatype into an atom */
+    if (NULL == (ret_value = H5T_copy(dt->shared->u.compnd.memb[membno].type, H5T_COPY_REOPEN)))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to copy member datatype")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_get_member_size
+ *
+ * Purpose:	Returns the size of the specified member.
+ *
+ * Return:	Success:	The size in bytes of the member's datatype.
+ *
+ *		Failure:        0
+ *
+ * Programmer:	Quincey Koziol
+ *	        October 4, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5T_get_member_size(const H5T_t *dt, unsigned membno)
+{
+    size_t	ret_value = 0;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_get_member_size)
+
+    assert(dt);
+    assert(membno < dt->shared->u.compnd.nmembs);
+
+    /* Value */
+    ret_value = dt->shared->u.compnd.memb[membno].type->shared->size;
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tinsert
+ *
+ * Purpose:	Adds another member to the compound datatype PARENT_ID.  The
+ *		new member has a NAME which must be unique within the
+ *		compound datatype. The OFFSET argument defines the start of
+ *		the member in an instance of the compound datatype, and
+ *		MEMBER_ID is the type of the new member.
+ *
+ * Return:	Success:	Non-negative, the PARENT_ID compound data
+ *				type is modified to include a copy of the
+ *				member type MEMBER_ID.
+ *
+ *		Failure:	Negative
+ *
+ * Errors:
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, December  8, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tinsert(hid_t parent_id, const char *name, size_t offset, hid_t member_id)
+{
+    H5T_t	*parent = NULL;		/*the compound parent datatype */
+    H5T_t	*member = NULL;		/*the atomic member type	*/
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tinsert, FAIL)
+    H5TRACE4("e","iszi",parent_id,name,offset,member_id);
+
+    /* Check args */
+    if (parent_id==member_id)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "can't insert compound datatype within itself")
+    if (NULL == (parent = H5I_object_verify(parent_id,H5I_DATATYPE)) || H5T_COMPOUND != parent->shared->type)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a compound datatype")
+    if (H5T_STATE_TRANSIENT!=parent->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "parent type read-only")
+    if (!name || !*name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no member name")
+    if (NULL == (member = H5I_object_verify(member_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+
+    /* Insert */
+    if (H5T_insert(parent, name, offset, member) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINSERT, FAIL, "unable to insert member")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tpack
+ *
+ * Purpose:	Recursively removes padding from within a compound datatype
+ *		to make it more efficient (space-wise) to store that data.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tpack(hid_t type_id)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tpack, FAIL)
+    H5TRACE1("e","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)) || H5T_detect_class(dt,H5T_COMPOUND)<=0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a compound datatype")
+
+    /* Pack */
+    if (H5T_pack(dt) < 0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to pack compound datatype")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_insert
+ *
+ * Purpose:	Adds a new MEMBER to the compound datatype PARENT.  The new
+ *		member will have a NAME that is unique within PARENT and an
+ *		instance of PARENT will have the member begin at byte offset
+ *		OFFSET from the beginning.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, December  8, 1997
+ *
+ * Modifications:
+ *  Took out arrayness parameters - QAK, 10/6/00
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_insert(const H5T_t *parent, const char *name, size_t offset, const H5T_t *member)
+{
+    unsigned	idx, i;
+    size_t	total_size;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_insert, FAIL)
+
+    /* check args */
+    assert(parent && H5T_COMPOUND == parent->shared->type);
+    assert(H5T_STATE_TRANSIENT==parent->shared->state);
+    assert(member);
+    assert(name && *name);
+
+    /* Does NAME already exist in PARENT? */
+    for (i=0; i<parent->shared->u.compnd.nmembs; i++) {
+	if (!HDstrcmp(parent->shared->u.compnd.memb[i].name, name))
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINSERT, FAIL, "member name is not unique")
+    }
+
+    /* Does the new member overlap any existing member ? */
+    total_size=member->shared->size;
+    for (i=0; i<parent->shared->u.compnd.nmembs; i++) {
+	if ((offset <= parent->shared->u.compnd.memb[i].offset &&
+                 offset + total_size > parent->shared->u.compnd.memb[i].offset) ||
+                (parent->shared->u.compnd.memb[i].offset <= offset &&
+                 parent->shared->u.compnd.memb[i].offset +
+                 parent->shared->u.compnd.memb[i].size > offset))
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINSERT, FAIL, "member overlaps with another member")
+    }
+
+    /* Does the new member overlap the end of the compound type? */
+    if(offset+total_size>parent->shared->size)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINSERT, FAIL, "member extends past end of compound type")
+
+    /* Increase member array if necessary */
+    if (parent->shared->u.compnd.nmembs >= parent->shared->u.compnd.nalloc) {
+        unsigned na = parent->shared->u.compnd.nalloc + H5T_COMPND_INC;
+        H5T_cmemb_t *x = H5MM_realloc (parent->shared->u.compnd.memb,
+                           na * sizeof(H5T_cmemb_t));
+
+        if (!x)
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+        parent->shared->u.compnd.nalloc = na;
+        parent->shared->u.compnd.memb = x;
+    }
+
+    /* Add member to end of member array */
+    idx = parent->shared->u.compnd.nmembs;
+    parent->shared->u.compnd.memb[idx].name = H5MM_xstrdup(name);
+    parent->shared->u.compnd.memb[idx].offset = offset;
+    parent->shared->u.compnd.memb[idx].size = total_size;
+    parent->shared->u.compnd.memb[idx].type = H5T_copy (member, H5T_COPY_ALL);
+
+    parent->shared->u.compnd.sorted = H5T_SORT_NONE;
+    parent->shared->u.compnd.nmembs++;
+
+    /* Determine if the compound datatype stayed packed */
+    if(parent->shared->u.compnd.packed) {
+        /* Check if the member type is packed */
+        if(H5T_is_packed(parent->shared->u.compnd.memb[idx].type)>0) {
+            if(idx==0) {
+                /* If the is the first member, the datatype is not packed
+                 * if the first member isn't at offset 0
+                 */
+                if(parent->shared->u.compnd.memb[idx].offset>0)
+                    parent->shared->u.compnd.packed=FALSE;
+            } /* end if */
+            else {
+                /* If the is not the first member, the datatype is not
+                 * packed if the new member isn't adjoining the previous member
+                 */
+                if(parent->shared->u.compnd.memb[idx].offset!=(parent->shared->u.compnd.memb[idx-1].offset+parent->shared->u.compnd.memb[idx-1].size))
+                    parent->shared->u.compnd.packed=FALSE;
+            } /* end else */
+        } /* end if */
+        else
+            parent->shared->u.compnd.packed=FALSE;
+    } /* end if */
+
+    /*
+     * Set the "force conversion" flag if the field's datatype indicates
+     */
+    if(member->shared->force_conv==TRUE)
+        parent->shared->force_conv=TRUE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_pack
+ *
+ * Purpose:	Recursively packs a compound datatype by removing padding
+ *		bytes. This is done in place (that is, destructively).
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T_pack(const H5T_t *dt)
+{
+    unsigned	i;
+    size_t	offset;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_pack)
+
+    assert(dt);
+
+    if(H5T_detect_class(dt,H5T_COMPOUND)>0) {
+        /* If datatype has been packed, skip packing it and indicate success */
+        if(H5T_is_packed(dt)== TRUE)
+            HGOTO_DONE(SUCCEED)
+
+        /* Check for packing unmodifiable datatype */
+        if (H5T_STATE_TRANSIENT!=dt->shared->state)
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "datatype is read-only")
+
+        if(dt->shared->parent) {
+            if (H5T_pack(dt->shared->parent) < 0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to pack parent of datatype")
+
+            /* Adjust size of datatype appropriately */
+            if(dt->shared->type==H5T_ARRAY)
+                dt->shared->size = dt->shared->parent->shared->size * dt->shared->u.array.nelem;
+            else if(dt->shared->type!=H5T_VLEN)
+                dt->shared->size = dt->shared->parent->shared->size;
+        } /* end if */
+        else if(dt->shared->type==H5T_COMPOUND) {
+            /* Recursively pack the members */
+            for (i=0; i<dt->shared->u.compnd.nmembs; i++)
+                if (H5T_pack(dt->shared->u.compnd.memb[i].type) < 0)
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to pack part of a compound datatype")
+
+            /* Remove padding between members */
+            if(H5T_sort_value(dt, NULL)<0)
+		HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOMPARE, FAIL, "value sort failed")
+            for (i=0, offset=0; i<dt->shared->u.compnd.nmembs; i++) {
+                dt->shared->u.compnd.memb[i].offset = offset;
+                offset += dt->shared->u.compnd.memb[i].size;
+            }
+
+            /* Change total size */
+            dt->shared->size = MAX(1, offset);
+
+            /* Mark the type as packed now */
+            dt->shared->u.compnd.packed=TRUE;
+        } /* end if */
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_is_packed
+ *
+ * Purpose:	Checks whether a datatype which is compound (or has compound
+ *              components) is packed.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, September 11, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5T_is_packed(const H5T_t *dt)
+{
+    htri_t      ret_value=TRUE;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_is_packed)
+
+    assert(dt);
+
+    /* Go up the chain as far as possible */
+    while(dt->shared->parent)
+        dt=dt->shared->parent;
+
+    /* If this is a compound datatype, check if it is packed */
+    if(dt->shared->type==H5T_COMPOUND)
+        ret_value=(htri_t)dt->shared->u.compnd.packed;
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5T_is_packed() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Tconv.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tconv.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tconv.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,7172 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info:	Data type conversions for the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	     */
+
+
+#include "H5private.h"		/*generic functions			  */
+#include "H5Eprivate.h"		/*error handling			  */
+#include "H5FLprivate.h"	/*Free Lists	                          */
+#include "H5Iprivate.h"		/*ID functions		   		  */
+#include "H5MMprivate.h"	/*memory management			  */
+#include "H5Pprivate.h"		/* Property Lists			  */
+#include "H5Tpkg.h"		/*data-type functions			  */
+
+/* Conversion data for H5T_conv_struct() */
+typedef struct H5T_conv_struct_t {
+    int	*src2dst;		/*mapping from src to dst member num */
+    hid_t	*src_memb_id;		/*source member type ID's	     */
+    hid_t	*dst_memb_id;		/*destination member type ID's	     */
+    H5T_path_t	**memb_path;		/*conversion path for each member    */
+} H5T_conv_struct_t;
+
+/* Conversion data for H5T_conv_enum() */
+typedef struct H5T_enum_struct_t {
+    int	base;			/*lowest `in' value		     */
+    int	length;			/*num elements in arrays	     */
+    int	*src2dst;		/*map from src to dst index	     */
+} H5T_enum_struct_t;
+
+/* Conversion data for the hardware conversion functions */
+typedef struct H5T_conv_hw_t {
+    size_t	s_aligned;		/*number source elements aligned     */
+    size_t	d_aligned;		/*number destination elements aligned*/
+} H5T_conv_hw_t;
+
+/* Declare a free list to manage pieces of vlen data */
+H5FL_BLK_DEFINE_STATIC(vlen_seq);
+
+/* Declare a free list to manage pieces of array data */
+H5FL_BLK_DEFINE_STATIC(array_seq);
+
+/*
+ * These macros are for the bodies of functions that convert buffers of one
+ * atomic type to another using hardware.
+ *
+ * They all start with `H5T_CONV_' and end with two letters that represent the
+ * source and destination types, respectively. The letters `s' and `S' refer to
+ * signed integers while the letters `u' and `U' refer to unsigned integers, and
+ * the letters `f' and `F' refer to floating-point values.
+ *
+ * The letter which is capitalized indicates that the corresponding type
+ * (source or destination) is at least as large as the other type.
+ *
+ * Certain conversions may experience overflow conditions which arise when the
+ * source value has a magnitude that cannot be represented by the destination
+ * type.
+ *
+ * Suffix	Description
+ * ------	-----------
+ * sS:		Signed integers to signed integers where the destination is
+ *		at least as wide as the source.	 This case cannot generate
+ *		overflows.
+ *
+ * sU:		Signed integers to unsigned integers where the destination is
+ *		at least as wide as the source.	 This case experiences
+ *		overflows when the source value is negative.
+ *
+ * uS:		Unsigned integers to signed integers where the destination is
+ *		at least as wide as the source.	 This case can experience
+ *		overflows when the source and destination are the same size.
+ *
+ * uU:		Unsigned integers to unsigned integers where the destination
+ *		is at least as wide as the source.  Overflows are not
+ *		possible in this case.
+ *
+ * Ss:		Signed integers to signed integers where the source is at
+ *		least as large as the destination.  Overflows can occur when
+ *		the destination is narrower than the source.
+ *
+ * Su:		Signed integers to unsigned integers where the source is at
+ *		least as large as the destination.  Overflows occur when the
+ *		source value is negative and can also occur if the
+ *		destination is narrower than the source.
+ *
+ * Us:		Unsigned integers to signed integers where the source is at
+ *		least as large as the destination.  Overflows can occur for
+ *		all sizes.
+ *
+ * Uu:		Unsigned integers to unsigned integers where the source is at
+ *		least as large as the destination. Overflows can occur if the
+ *		destination is narrower than the source.
+ *
+ * su:		Conversion from signed integers to unsigned integers where
+ *		the source and destination are the same size. Overflow occurs
+ *		when the source value is negative.
+ *
+ * us:		Conversion from unsigned integers to signed integers where
+ *		the source and destination are the same size.  Overflow
+ *		occurs when the source magnitude is too large for the
+ *		destination.
+ *
+ * fF:		Floating-point values to floating-point values where the
+ *              destination is at least as wide as the source.	 This case
+ *              cannot generate overflows.
+ *
+ * Ff:		Floating-point values to floating-point values the source is at
+ *		least as large as the destination.  Overflows can occur when
+ *		the destination is narrower than the source.
+ *
+ * The macros take a subset of these arguments in the order listed here:
+ *
+ * CDATA:	A pointer to the H5T_cdata_t structure that was passed to the
+ *		conversion function.
+ *
+ * STYPE:	The hid_t value for the source data type.
+ *
+ * DTYPE:	The hid_t value for the destination data type.
+ *
+ * BUF:		A pointer to the conversion buffer.
+ *
+ * NELMTS:	The number of values to be converted.
+ *
+ * ST:		The C name for source data type (e.g., int)
+ *
+ * DT:		The C name for the destination data type (e.g., signed char)
+ *
+ * D_MIN:	The minimum possible destination value.	 For unsigned
+ *		destination types this should be zero.	For signed
+ *		destination types it's a negative value with a magnitude that
+ *		is usually one greater than D_MAX.  Source values which are
+ *		smaller than D_MIN generate overflows.
+ *
+ * D_MAX:	The maximum possible destination value. Source values which
+ *		are larger than D_MAX generate overflows.
+ *
+ * The macros are implemented with a generic programming technique, similar
+ * to templates in C++.  The macro which defines the "core" part of the
+ * conversion (which actually moves the data from the source to the destination)
+ * is invoked inside the H5T_CONV "template" macro by "gluing" it together,
+ * which allows the core conversion macro to be invoked as necessary.
+ *
+ * "Core" macros come in two flavors: one which calls the exception handling
+ * routine and one which doesn't (the "_NOEX" variant).  The presence of the
+ * exception handling routine is detected before the loop over the values and
+ * the appropriate core routine loop is executed.
+ *
+ * The generic "core" macros are: (others are specific to particular conversion)
+ *
+ * Suffix	Description
+ * ------	-----------
+ * xX:		Generic Conversion where the destination is at least as
+ *              wide as the source.  This case cannot generate overflows.
+ *
+ * Xx:		Generic signed conversion where the source is at least as large
+ *              as the destination.  Overflows can occur when the destination is
+ *              narrower than the source.
+ *
+ * Ux:		Generic conversion for the `Us', `Uu' & `us' cases
+ *		Overflow occurs when the source magnitude is too large for the
+ *		destination.
+ *
+ */
+#define H5T_CONV_xX_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+#define H5T_CONV_xX_NOEX_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+
+/* Added a condition branch(else if (*((ST*)S) == (DT)(D_MAX))) which seems redundant.
+ * It handles a special situation when the source is "float" and assigned the value
+ * of "INT_MAX".  A compiler may do roundup making this value "INT_MAX+1".  However,
+ * when do comparison "if (*((ST*)S) > (DT)(D_MAX))", the compiler may consider them
+ * equal. In this case, do not return exception but make sure the maximum is assigned
+ * to the destination. SLU - 2005/06/29
+ */
+#define H5T_CONV_Xx_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    if (*((ST*)S) > (DT)(D_MAX)) {					      \
+        if ((H5T_overflow_g)(src_id, dst_id, S, D)<0)			      \
+            *((DT*)D) = (D_MAX);					      \
+    } else if (*((ST*)S) == (DT)(D_MAX)) {                                    \
+        *((DT*)D) = (D_MAX);			                              \
+    } else if (*((ST*)S) < (DT)(D_MIN)) {			              \
+        if ((H5T_overflow_g)(src_id, dst_id, S, D)<0)			      \
+            *((DT*)D) = (D_MIN);					      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+#define H5T_CONV_Xx_NOEX_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    if (*((ST*)S) > (DT)(D_MAX)) {					      \
+        *((DT*)D) = (D_MAX);						      \
+    } else if (*((ST*)S) == (DT)(D_MAX)) {                                    \
+        *((DT*)D) = (D_MAX);			                              \
+    } else if (*((ST*)S) < (DT)(D_MIN)) {			              \
+        *((DT*)D) = (D_MIN);						      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+
+#define H5T_CONV_Ux_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    if (*((ST*)S) > (DT)(D_MAX)) {				              \
+        if ((H5T_overflow_g)(src_id, dst_id, S, D)<0)			      \
+            *((DT*)D) = (D_MAX);					      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+#define H5T_CONV_Ux_NOEX_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    if (*((ST*)S) > (DT)(D_MAX)) {				              \
+        *((DT*)D) = (D_MAX);						      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+
+#define H5T_CONV_sS(STYPE,DTYPE,ST,DT,D_MIN,D_MAX) {			      \
+    assert(sizeof(ST)<=sizeof(DT));					      \
+    H5T_CONV(H5T_CONV_xX, long_long, STYPE, DTYPE, ST, DT, D_MIN, D_MAX)      \
+}
+
+#define H5T_CONV_sU_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    if (*((ST*)S)<0) {							      \
+        if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, S, D)<0)      \
+            *((DT*)D) = 0;						      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+#define H5T_CONV_sU_NOEX_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    if (*((ST*)S)<0) {							      \
+        *((DT*)D) = 0;							      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+
+#define H5T_CONV_sU(STYPE,DTYPE,ST,DT,D_MIN,D_MAX) {			      \
+    assert(sizeof(ST)<=sizeof(DT));					      \
+    H5T_CONV(H5T_CONV_sU, long_long, STYPE, DTYPE, ST, DT, D_MIN, D_MAX)      \
+}
+
+#define H5T_CONV_uS_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    if (sizeof(ST)==sizeof(DT) && *((ST*)S) > (DT)(D_MAX)) {		      \
+        if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, S, D)<0)      \
+            *((DT*)D) = (D_MAX);					      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+#define H5T_CONV_uS_NOEX_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    if (sizeof(ST)==sizeof(DT) && *((ST*)S) > (DT)(D_MAX)) {		      \
+        *((DT*)D) = (D_MAX);						      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+
+#define H5T_CONV_uS(STYPE,DTYPE,ST,DT,D_MIN,D_MAX) {			      \
+    assert(sizeof(ST)<=sizeof(DT));					      \
+    H5T_CONV(H5T_CONV_uS, long_long, STYPE, DTYPE, ST, DT, D_MIN, D_MAX)      \
+}
+
+#define H5T_CONV_uU(STYPE,DTYPE,ST,DT,D_MIN,D_MAX) {			      \
+    assert(sizeof(ST)<=sizeof(DT));					      \
+    H5T_CONV(H5T_CONV_xX, long_long, STYPE, DTYPE, ST, DT, D_MIN, D_MAX)      \
+}
+
+#define H5T_CONV_Ss(STYPE,DTYPE,ST,DT,D_MIN,D_MAX) {			      \
+    assert(sizeof(ST)>=sizeof(DT));					      \
+    H5T_CONV(H5T_CONV_Xx, long_long, STYPE, DTYPE, ST, DT, D_MIN, D_MAX)      \
+}
+
+#define H5T_CONV_Su_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    if (*((ST*)S) < 0) {						      \
+        if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, S, D)<0)      \
+            *((DT*)D) = 0;						      \
+    } else if (sizeof(ST)>sizeof(DT) && *((ST*)S)>(ST)(D_MAX)) {	      \
+        /*sign vs. unsign ok in previous line*/				      \
+        if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, S, D)<0)      \
+            *((DT*)D) = (D_MAX);					      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+#define H5T_CONV_Su_NOEX_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    if (*((ST*)S) < 0) {						      \
+        *((DT*)D) = 0;							      \
+    } else if (sizeof(ST)>sizeof(DT) && *((ST*)S)>(ST)(D_MAX)) {	      \
+        /*sign vs. unsign ok in previous line*/				      \
+        *((DT*)D) = (D_MAX);						      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+
+#define H5T_CONV_Su(STYPE,DTYPE,ST,DT,D_MIN,D_MAX) {			      \
+    assert(sizeof(ST)>=sizeof(DT));					      \
+    H5T_CONV(H5T_CONV_Su, long_long, STYPE, DTYPE, ST, DT, D_MIN, D_MAX)      \
+}
+
+#define H5T_CONV_Us(STYPE,DTYPE,ST,DT,D_MIN,D_MAX) {			      \
+    assert(sizeof(ST)>=sizeof(DT));					      \
+    H5T_CONV(H5T_CONV_Ux, long_long, STYPE, DTYPE, ST, DT, D_MIN, D_MAX)      \
+}
+
+#define H5T_CONV_Uu(STYPE,DTYPE,ST,DT,D_MIN,D_MAX) {			      \
+    assert(sizeof(ST)>=sizeof(DT));					      \
+    H5T_CONV(H5T_CONV_Ux, long_long, STYPE, DTYPE, ST, DT, D_MIN, D_MAX)      \
+}
+
+#define H5T_CONV_su_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    /* Assumes memory format of unsigned & signed integers is same */	      \
+    if (*((ST*)S)<0) {							      \
+        if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, S, D)<0)      \
+            *((DT*)D) = 0;						      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+#define H5T_CONV_su_NOEX_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    /* Assumes memory format of unsigned & signed integers is same */	      \
+    if (*((ST*)S)<0) {							      \
+        *((DT*)D) = 0;							      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+
+#define H5T_CONV_su(STYPE,DTYPE,ST,DT,D_MIN,D_MAX) {			      \
+    assert(sizeof(ST)==sizeof(DT));					      \
+    H5T_CONV(H5T_CONV_su, long_long, STYPE, DTYPE, ST, DT, D_MIN, D_MAX)      \
+}
+
+#define H5T_CONV_us_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    /* Assumes memory format of unsigned & signed integers is same */	      \
+    if (*((ST*)S) > (DT)(D_MAX)) {					      \
+        if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, S, D)<0)      \
+            *((DT*)D) = (D_MAX);					      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+#define H5T_CONV_us_NOEX_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    /* Assumes memory format of unsigned & signed integers is same */	      \
+    if (*((ST*)S) > (DT)(D_MAX)) {					      \
+        *((DT*)D) = (D_MAX);						      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+
+#define H5T_CONV_us(STYPE,DTYPE,ST,DT,D_MIN,D_MAX) {			      \
+    assert(sizeof(ST)==sizeof(DT));					      \
+    H5T_CONV(H5T_CONV_us, long_long, STYPE, DTYPE, ST, DT, D_MIN, D_MAX)      \
+}
+
+#define H5T_CONV_fF(STYPE,DTYPE,ST,DT,D_MIN,D_MAX) {			      \
+    assert(sizeof(ST)<=sizeof(DT));					      \
+    H5T_CONV(H5T_CONV_xX, double, STYPE, DTYPE, ST, DT, D_MIN, D_MAX)	      \
+}
+
+/* Same as H5T_CONV_Xx_CORE, except that instead of using D_MAX and D_MIN
+ * when an overflow occurs, use the 'float' infinity values.
+ */
+#define H5T_CONV_Ff_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    if (*((ST*)S) > (DT)(D_MAX)) {					      \
+        if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, S, D)<0)      \
+            *((DT*)D) = (H5T_NATIVE_FLOAT_POS_INF_g);			      \
+    } else if (*((ST*)S) < (DT)(D_MIN)) {				      \
+        if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, S, D)<0)      \
+            *((DT*)D) = (H5T_NATIVE_FLOAT_NEG_INF_g);			      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+#define H5T_CONV_Ff_NOEX_CORE(S,D,ST,DT,D_MIN,D_MAX) {			      \
+    if (*((ST*)S) > (DT)(D_MAX)) {					      \
+        *((DT*)D) = (H5T_NATIVE_FLOAT_POS_INF_g);			      \
+    } else if (*((ST*)S) < (DT)(D_MIN)) {				      \
+        *((DT*)D) = (H5T_NATIVE_FLOAT_NEG_INF_g);			      \
+    } else								      \
+        *((DT*)D) = (DT)(*((ST*)S));					      \
+}
+
+#define H5T_CONV_Ff(STYPE,DTYPE,ST,DT,D_MIN,D_MAX) {			      \
+    assert(sizeof(ST)>=sizeof(DT));					      \
+    H5T_CONV(H5T_CONV_Ff, double, STYPE, DTYPE, ST, DT, D_MIN, D_MAX)	      \
+}
+
+/* The main part of every integer hardware conversion macro */
+#define H5T_CONV(GUTS,ATYPE,STYPE,DTYPE,ST,DT,D_MIN,D_MAX) {		      \
+    size_t	elmtno;			/*element number		*/    \
+    uint8_t	*src, *s;		/*source buffer			*/    \
+    uint8_t	*dst, *d;		/*destination buffer		*/    \
+    H5T_t	*st, *dt;		/*data type descriptors		*/    \
+    ATYPE	aligned;		/*aligned type			*/    \
+    hbool_t	s_mv, d_mv;		/*move data to align it?	*/    \
+    ssize_t	s_stride, d_stride;	/*src and dst strides		*/    \
+    size_t      safe;                   /* How many elements are safe to process in each pass */ \
+									      \
+    switch (cdata->command) {						      \
+    case H5T_CONV_INIT:							      \
+	/* Sanity check and initialize statistics */			      \
+	cdata->need_bkg = H5T_BKG_NO;					      \
+	if (NULL==(st=H5I_object(src_id)) || NULL==(dt=H5I_object(dst_id)))   \
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,		      \
+			  "unable to dereference datatype object ID")	      \
+	if (st->shared->size!=sizeof(ST) || dt->shared->size!=sizeof(DT))     \
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL,		      \
+			  "disagreement about datatype size")		      \
+	CI_ALLOC_PRIV	                                                      \
+	break;								      \
+									      \
+    case H5T_CONV_FREE:							      \
+	/* Print and free statistics */					      \
+	CI_PRINT_STATS(STYPE,DTYPE);					      \
+	CI_FREE_PRIV	                                                      \
+	break;								      \
+									      \
+    case H5T_CONV_CONV:							      \
+	/* Initialize source & destination strides */			      \
+	if (buf_stride) {						      \
+            assert(buf_stride>=sizeof(ST));				      \
+            assert(buf_stride>=sizeof(DT));				      \
+            H5_CHECK_OVERFLOW(buf_stride,size_t,ssize_t);                     \
+	    s_stride = d_stride = (ssize_t)buf_stride;			      \
+	} else {							      \
+            s_stride = sizeof(ST);					      \
+            d_stride = sizeof(DT);					      \
+        }								      \
+									      \
+	/* Is alignment required for source or dest? */			      \
+	s_mv = H5T_NATIVE_##STYPE##_ALIGN_g>1 &&			      \
+               ((size_t)buf%H5T_NATIVE_##STYPE##_ALIGN_g ||		      \
+     /* Cray */ ((size_t)((ST*)buf)!=(size_t)buf) ||			      \
+		s_stride%H5T_NATIVE_##STYPE##_ALIGN_g);			      \
+	d_mv = H5T_NATIVE_##DTYPE##_ALIGN_g>1 &&			      \
+               ((size_t)buf%H5T_NATIVE_##DTYPE##_ALIGN_g ||		      \
+     /* Cray */ ((size_t)((DT*)buf)!=(size_t)buf) ||			      \
+                d_stride%H5T_NATIVE_##DTYPE##_ALIGN_g);			      \
+	CI_INC_SRC(s_mv)						      \
+	CI_INC_DST(d_mv)						      \
+									      \
+        /* The outer loop of the type conversion macro, controlling which */  \
+        /* direction the buffer is walked */				      \
+        while (nelmts>0) {						      \
+            /* Check if we need to go backwards through the buffer */	      \
+            if(d_stride>s_stride) {					      \
+                /* Compute the number of "safe" destination elements at */    \
+                /* the end of the buffer (Those which don't overlap with */   \
+                /* any source elements at the beginning of the buffer) */     \
+                safe=nelmts-(((nelmts*s_stride)+(d_stride-1))/d_stride);      \
+									      \
+                /* If we're down to the last few elements, just wrap up */    \
+                /* with a "real" reverse copy */			      \
+                if(safe<2) {						      \
+                    src = (uint8_t*)buf+(nelmts-1)*s_stride;		      \
+                    dst = (uint8_t*)buf+(nelmts-1)*d_stride;		      \
+                    s_stride = -s_stride;				      \
+                    d_stride = -d_stride;				      \
+									      \
+                    safe=nelmts;					      \
+                } /* end if */						      \
+                else {							      \
+                    src = (uint8_t*)buf+(nelmts-safe)*s_stride;		      \
+                    dst = (uint8_t*)buf+(nelmts-safe)*d_stride;		      \
+                } /* end else */					      \
+            } /* end if */						      \
+            else {							      \
+                /* Single forward pass over all data */			      \
+                src = dst = buf;					      \
+                safe=nelmts;						      \
+            } /* end else */						      \
+									      \
+            /* Perform loop over elements to convert */			      \
+            if (s_mv && d_mv) {						      \
+                /* Alignment is required for both source and dest */	      \
+                s = (uint8_t*)&aligned;					      \
+                H5T_CONV_LOOP_OUTER(PRE_SALIGN,PRE_DALIGN,POST_SALIGN,POST_DALIGN,GUTS,s,d,ST,DT,D_MIN,D_MAX) \
+            } else if(s_mv) {						      \
+                /* Alignment is required only for source */		      \
+                s = (uint8_t*)&aligned;					      \
+                H5T_CONV_LOOP_OUTER(PRE_SALIGN,PRE_DNOALIGN,POST_SALIGN,POST_DNOALIGN,GUTS,s,dst,ST,DT,D_MIN,D_MAX) \
+            } else if(d_mv) {						      \
+                /* Alignment is required only for destination */	      \
+                H5T_CONV_LOOP_OUTER(PRE_SNOALIGN,PRE_DALIGN,POST_SNOALIGN,POST_DALIGN,GUTS,src,d,ST,DT,D_MIN,D_MAX) \
+            } else {							      \
+                /* Alignment is not required for both source and destination */ \
+                H5T_CONV_LOOP_OUTER(PRE_SNOALIGN,PRE_DNOALIGN,POST_SNOALIGN,POST_DNOALIGN,GUTS,src,dst,ST,DT,D_MIN,D_MAX) \
+            }	 	 	 	 	 	 	 	      \
+									      \
+            /* Decrement number of elements left to convert */		      \
+            nelmts-=safe;						      \
+        } /* end while */						      \
+        break;								      \
+									      \
+    default:								      \
+	HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL,		      \
+		      "unknown conversion command");			      \
+    }									      \
+}
+
+/* Macro defining action on source data which needs to be aligned (before main action) */
+#define H5T_CONV_LOOP_PRE_SALIGN(ST) {					      \
+    HDmemcpy(&aligned, src, sizeof(ST));				      \
+}
+
+/* Macro defining action on source data which doesn't need to be aligned (before main action) */
+#define H5T_CONV_LOOP_PRE_SNOALIGN(ST) {				      \
+}
+
+/* Macro defining action on destination data which needs to be aligned (before main action) */
+#define H5T_CONV_LOOP_PRE_DALIGN(DT) {					      \
+    d = (uint8_t*)&aligned;						      \
+}
+
+/* Macro defining action on destination data which doesn't need to be aligned (before main action) */
+#define H5T_CONV_LOOP_PRE_DNOALIGN(DT) {				      \
+}
+
+/* Macro defining action on source data which needs to be aligned (after main action) */
+#define H5T_CONV_LOOP_POST_SALIGN(ST) {					      \
+}
+
+/* Macro defining action on source data which doesn't need to be aligned (after main action) */
+#define H5T_CONV_LOOP_POST_SNOALIGN(ST) {				      \
+}
+
+/* Macro defining action on destination data which needs to be aligned (after main action) */
+#define H5T_CONV_LOOP_POST_DALIGN(DT) {					      \
+    HDmemcpy(dst, &aligned, sizeof(DT));				      \
+}
+
+/* Macro defining action on destination data which doesn't need to be aligned (after main action) */
+#define H5T_CONV_LOOP_POST_DNOALIGN(DT) {				      \
+}
+
+/* The outer wrapper for the type conversion loop, to check for an exception handling routine */
+#define H5T_CONV_LOOP_OUTER(PRE_SALIGN_GUTS,PRE_DALIGN_GUTS,POST_SALIGN_GUTS,POST_DALIGN_GUTS,GUTS,S,D,ST,DT,D_MIN,D_MAX) \
+    if(H5T_overflow_g) {                                                      \
+        H5T_CONV_LOOP(PRE_SALIGN_GUTS,PRE_DALIGN_GUTS,POST_SALIGN_GUTS,POST_DALIGN_GUTS,GUTS,S,D,ST,DT,D_MIN,D_MAX) \
+    }                                                                         \
+    else {                                                                    \
+        H5T_CONV_LOOP(PRE_SALIGN_GUTS,PRE_DALIGN_GUTS,POST_SALIGN_GUTS,POST_DALIGN_GUTS,H5_GLUE(GUTS,_NOEX),S,D,ST,DT,D_MIN,D_MAX) \
+    }
+
+/* The inner loop of the type conversion macro, actually converting the elements */
+#define H5T_CONV_LOOP(PRE_SALIGN_GUTS,PRE_DALIGN_GUTS,POST_SALIGN_GUTS,POST_DALIGN_GUTS,GUTS,S,D,ST,DT,D_MIN,D_MAX) \
+    for (elmtno=0; elmtno<safe; elmtno++) {				      \
+        /* Handle source pre-alignment */				      \
+        H5_GLUE(H5T_CONV_LOOP_,PRE_SALIGN_GUTS)(ST)			      \
+									      \
+        /* Handle destination pre-alignment */				      \
+        H5_GLUE(H5T_CONV_LOOP_,PRE_DALIGN_GUTS)(DT)			      \
+									      \
+        /* ... user-defined stuff here -- the conversion ... */		      \
+        H5_GLUE(GUTS,_CORE)(S,D,ST,DT,D_MIN,D_MAX)			      \
+									      \
+        /* Handle source post-alignment */				      \
+        H5_GLUE(H5T_CONV_LOOP_,POST_SALIGN_GUTS)(ST)			      \
+									      \
+        /* Handle destination post-alignment */				      \
+        H5_GLUE(H5T_CONV_LOOP_,POST_DALIGN_GUTS)(DT)			      \
+									      \
+        /* Advance pointers */						      \
+        src += s_stride;						      \
+        dst += d_stride;						      \
+    }
+
+
+#ifdef H5T_DEBUG
+
+/* Print alignment statistics */
+#   define CI_PRINT_STATS(STYPE,DTYPE) {				      \
+    if (H5DEBUG(T) && ((H5T_conv_hw_t *)cdata->priv)->s_aligned) {				      \
+	HDfprintf(H5DEBUG(T),						      \
+		  "      %Hu src elements aligned on %lu-byte boundaries\n",  \
+		  ((H5T_conv_hw_t *)cdata->priv)->s_aligned,				\
+		  (unsigned long)H5T_NATIVE_##STYPE##_ALIGN_g);		      \
+    }									      \
+    if (H5DEBUG(T) && ((H5T_conv_hw_t *)cdata->priv)->d_aligned) {				      \
+	HDfprintf(H5DEBUG(T),						      \
+		  "      %Hu dst elements aligned on %lu-byte boundaries\n",  \
+		  ((H5T_conv_hw_t *)cdata->priv)->d_aligned,				\
+		  (unsigned long)H5T_NATIVE_##DTYPE##_ALIGN_g);		      \
+    }									      \
+}
+
+/* Allocate private alignment structure for atomic types */
+#   define CI_ALLOC_PRIV \
+	if (NULL==(cdata->priv=H5MM_calloc(sizeof(H5T_conv_hw_t)))) {	      \
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL,		      \
+			  "memory allocation failed");			      \
+	}
+
+/* Free private alignment structure for atomic types */
+#   define CI_FREE_PRIV                                 \
+    if(cdata->priv!=NULL)                               \
+        cdata->priv = H5MM_xfree(cdata->priv);
+
+/* Increment source alignment counter */
+#   define CI_INC_SRC(s)   if (s) ((H5T_conv_hw_t *)cdata->priv)->s_aligned += nelmts;
+
+/* Increment destination alignment counter */
+#   define CI_INC_DST(d)   if (d) ((H5T_conv_hw_t *)cdata->priv)->d_aligned += nelmts;
+#else /* H5T_DEBUG */
+#   define CI_PRINT_STATS(STYPE,DTYPE) /*void*/
+#   define CI_ALLOC_PRIV cdata->priv=NULL;
+#   define CI_FREE_PRIV  /* void */
+#   define CI_INC_SRC(s) /* void */
+#   define CI_INC_DST(d) /* void */
+#endif /* H5T_DEBUG */
+
+/* Swap two elements (I & J) of an array using a temporary variable */
+#define H5_SWAP_BYTES(ARRAY,I,J) {uint8_t _tmp; _tmp=ARRAY[I]; ARRAY[I]=ARRAY[J]; ARRAY[J]=_tmp;}
+
+/* Minimum size of variable-length conversion buffer */
+#define H5T_VLEN_MIN_CONF_BUF_SIZE      4096
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_noop
+ *
+ * Purpose:	The no-op conversion.  The library knows about this
+ *		conversion without it being registered.
+ *
+ * Return: 	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January 14, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_noop(hid_t UNUSED src_id, hid_t UNUSED dst_id, H5T_cdata_t *cdata,
+	      size_t UNUSED nelmts, size_t UNUSED buf_stride,
+              size_t UNUSED bkg_stride, void UNUSED *buf,
+	      void UNUSED *background, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_noop, FAIL);
+
+    switch (cdata->command) {
+        case H5T_CONV_INIT:
+            cdata->need_bkg = H5T_BKG_NO;
+            break;
+
+        case H5T_CONV_CONV:
+            /* Nothing to convert */
+            break;
+
+        case H5T_CONV_FREE:
+            break;
+
+        default:
+            HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_order_opt
+ *
+ * Purpose:	Convert one type to another when byte order is the only
+ *		difference. This is the optimized version of H5T_conv_order()
+ *              for a handful of different sizes.
+ *
+ * Note:	This is a soft conversion function.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January 25, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_order_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                   size_t nelmts, size_t buf_stride,
+                   size_t UNUSED bkg_stride, void *_buf,
+                   void UNUSED *background, hid_t UNUSED dxpl_id)
+{
+    uint8_t	*buf = (uint8_t*)_buf;
+    H5T_t	*src = NULL;
+    H5T_t	*dst = NULL;
+    size_t      i;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_order_opt, FAIL);
+
+    switch (cdata->command) {
+    case H5T_CONV_INIT:
+	/* Capability query */
+	if (NULL == (src = H5I_object(src_id)) ||
+                NULL == (dst = H5I_object(dst_id)))
+	    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+	if (src->shared->size != dst->shared->size ||
+                0 != src->shared->u.atomic.offset ||
+                0 != dst->shared->u.atomic.offset ||
+                !((H5T_ORDER_BE == src->shared->u.atomic.order &&
+                   H5T_ORDER_LE == dst->shared->u.atomic.order) ||
+                  (H5T_ORDER_LE == src->shared->u.atomic.order &&
+                   H5T_ORDER_BE == dst->shared->u.atomic.order)))
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported");
+        if (src->shared->size!=1 && src->shared->size!=2 && src->shared->size!=4 &&
+                src->shared->size!=8 && src->shared->size!=16)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported");
+	switch (src->shared->type) {
+            case H5T_INTEGER:
+            case H5T_BITFIELD:
+                /* nothing to check */
+                break;
+
+            case H5T_FLOAT:
+                if (src->shared->u.atomic.u.f.sign != dst->shared->u.atomic.u.f.sign ||
+                        src->shared->u.atomic.u.f.epos != dst->shared->u.atomic.u.f.epos ||
+                        src->shared->u.atomic.u.f.esize != dst->shared->u.atomic.u.f.esize ||
+                        src->shared->u.atomic.u.f.ebias != dst->shared->u.atomic.u.f.ebias ||
+                        src->shared->u.atomic.u.f.mpos != dst->shared->u.atomic.u.f.mpos ||
+                        src->shared->u.atomic.u.f.msize != dst->shared->u.atomic.u.f.msize ||
+                        src->shared->u.atomic.u.f.norm != dst->shared->u.atomic.u.f.norm ||
+                        src->shared->u.atomic.u.f.pad != dst->shared->u.atomic.u.f.pad)
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported");
+                break;
+
+            default:
+                HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported");
+	}
+	cdata->need_bkg = H5T_BKG_NO;
+	break;
+
+    case H5T_CONV_CONV:
+	/* The conversion */
+	if (NULL == (src = H5I_object(src_id)) ||
+                NULL == (dst = H5I_object(dst_id)))
+	    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+
+        buf_stride = buf_stride ? buf_stride : src->shared->size;
+        switch (src->shared->size) {
+        case 1:
+            /*no-op*/
+            break;
+        case 2:
+            for (/*void*/; nelmts>=20; nelmts-=20) {
+                H5_SWAP_BYTES(buf, 0,   1); /*  0 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /*  1 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /*  2 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /*  3 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /*  4 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /*  5 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /*  6 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /*  7 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /*  8 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /*  9 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /* 10 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /* 11 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /* 12 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /* 13 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /* 14 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /* 15 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /* 16 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /* 17 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /* 18 */
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf, 0,   1); /* 19 */
+                buf += buf_stride;
+            }
+            for (i=0; i<nelmts; i++, buf+=buf_stride) {
+                H5_SWAP_BYTES(buf, 0, 1);
+            }
+            break;
+        case 4:
+            for (/*void*/; nelmts>=20; nelmts-=20) {
+                H5_SWAP_BYTES(buf,  0,  3); /*  0 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /*  1 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /*  2 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /*  3 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /*  4 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /*  5 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /*  6 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /*  7 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /*  8 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /*  9 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /* 10 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /* 11 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /* 12 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /* 13 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /* 14 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /* 15 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /* 16 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /* 17 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /* 18 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  3); /* 19 */
+                H5_SWAP_BYTES(buf,  1,  2);
+                buf += buf_stride;
+            }
+            for (i=0; i<nelmts; i++, buf+=buf_stride) {
+                H5_SWAP_BYTES(buf, 0, 3);
+                H5_SWAP_BYTES(buf, 1, 2);
+            }
+            break;
+        case 8:
+            for (/*void*/; nelmts>=10; nelmts-=10) {
+                H5_SWAP_BYTES(buf,  0,  7); /*  0 */
+                H5_SWAP_BYTES(buf,  1,  6);
+                H5_SWAP_BYTES(buf,  2,  5);
+                H5_SWAP_BYTES(buf,  3,  4);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  7); /*  1 */
+                H5_SWAP_BYTES(buf,  1,  6);
+                H5_SWAP_BYTES(buf,  2,  5);
+                H5_SWAP_BYTES(buf,  3,  4);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  7); /*  2 */
+                H5_SWAP_BYTES(buf,  1,  6);
+                H5_SWAP_BYTES(buf,  2,  5);
+                H5_SWAP_BYTES(buf,  3,  4);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  7); /*  3 */
+                H5_SWAP_BYTES(buf,  1,  6);
+                H5_SWAP_BYTES(buf,  2,  5);
+                H5_SWAP_BYTES(buf,  3,  4);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  7); /*  4 */
+                H5_SWAP_BYTES(buf,  1,  6);
+                H5_SWAP_BYTES(buf,  2,  5);
+                H5_SWAP_BYTES(buf,  3,  4);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  7); /*  5 */
+                H5_SWAP_BYTES(buf,  1,  6);
+                H5_SWAP_BYTES(buf,  2,  5);
+                H5_SWAP_BYTES(buf,  3,  4);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  7); /*  6 */
+                H5_SWAP_BYTES(buf,  1,  6);
+                H5_SWAP_BYTES(buf,  2,  5);
+                H5_SWAP_BYTES(buf,  3,  4);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  7); /*  7 */
+                H5_SWAP_BYTES(buf,  1,  6);
+                H5_SWAP_BYTES(buf,  2,  5);
+                H5_SWAP_BYTES(buf,  3,  4);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  7); /*  8 */
+                H5_SWAP_BYTES(buf,  1,  6);
+                H5_SWAP_BYTES(buf,  2,  5);
+                H5_SWAP_BYTES(buf,  3,  4);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,  0,  7); /*  9 */
+                H5_SWAP_BYTES(buf,  1,  6);
+                H5_SWAP_BYTES(buf,  2,  5);
+                H5_SWAP_BYTES(buf,  3,  4);
+                buf += buf_stride;
+            }
+            for (i=0; i<nelmts; i++, buf+=buf_stride) {
+                H5_SWAP_BYTES(buf, 0, 7);
+                H5_SWAP_BYTES(buf, 1, 6);
+                H5_SWAP_BYTES(buf, 2, 5);
+                H5_SWAP_BYTES(buf, 3, 4);
+            }
+            break;
+        case 16:
+            for (/*void*/; nelmts>=10; nelmts-=10) {
+                H5_SWAP_BYTES(buf,   0,  15); /*  0 */
+                H5_SWAP_BYTES(buf,   1,  14);
+                H5_SWAP_BYTES(buf,   2,  13);
+                H5_SWAP_BYTES(buf,   3,  12);
+                H5_SWAP_BYTES(buf,   4,  11);
+                H5_SWAP_BYTES(buf,   5,  10);
+                H5_SWAP_BYTES(buf,   6,   9);
+                H5_SWAP_BYTES(buf,   7,   8);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,   0,  15); /*  1 */
+                H5_SWAP_BYTES(buf,   1,  14);
+                H5_SWAP_BYTES(buf,   2,  13);
+                H5_SWAP_BYTES(buf,   3,  12);
+                H5_SWAP_BYTES(buf,   4,  11);
+                H5_SWAP_BYTES(buf,   5,  10);
+                H5_SWAP_BYTES(buf,   6,   9);
+                H5_SWAP_BYTES(buf,   7,   8);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,   0,  15); /*  2 */
+                H5_SWAP_BYTES(buf,   1,  14);
+                H5_SWAP_BYTES(buf,   2,  13);
+                H5_SWAP_BYTES(buf,   3,  12);
+                H5_SWAP_BYTES(buf,   4,  11);
+                H5_SWAP_BYTES(buf,   5,  10);
+                H5_SWAP_BYTES(buf,   6,   9);
+                H5_SWAP_BYTES(buf,   7,   8);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,   0,  15); /*  3 */
+                H5_SWAP_BYTES(buf,   1,  14);
+                H5_SWAP_BYTES(buf,   2,  13);
+                H5_SWAP_BYTES(buf,   3,  12);
+                H5_SWAP_BYTES(buf,   4,  11);
+                H5_SWAP_BYTES(buf,   5,  10);
+                H5_SWAP_BYTES(buf,   6,   9);
+                H5_SWAP_BYTES(buf,   7,   8);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,   0,  15); /*  4 */
+                H5_SWAP_BYTES(buf,   1,  14);
+                H5_SWAP_BYTES(buf,   2,  13);
+                H5_SWAP_BYTES(buf,   3,  12);
+                H5_SWAP_BYTES(buf,   4,  11);
+                H5_SWAP_BYTES(buf,   5,  10);
+                H5_SWAP_BYTES(buf,   6,   9);
+                H5_SWAP_BYTES(buf,   7,   8);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,   0,  15); /*  5 */
+                H5_SWAP_BYTES(buf,   1,  14);
+                H5_SWAP_BYTES(buf,   2,  13);
+                H5_SWAP_BYTES(buf,   3,  12);
+                H5_SWAP_BYTES(buf,   4,  11);
+                H5_SWAP_BYTES(buf,   5,  10);
+                H5_SWAP_BYTES(buf,   6,   9);
+                H5_SWAP_BYTES(buf,   7,   8);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,   0,  15); /*  6 */
+                H5_SWAP_BYTES(buf,   1,  14);
+                H5_SWAP_BYTES(buf,   2,  13);
+                H5_SWAP_BYTES(buf,   3,  12);
+                H5_SWAP_BYTES(buf,   4,  11);
+                H5_SWAP_BYTES(buf,   5,  10);
+                H5_SWAP_BYTES(buf,   6,   9);
+                H5_SWAP_BYTES(buf,   7,   8);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,   0,  15); /*  7 */
+                H5_SWAP_BYTES(buf,   1,  14);
+                H5_SWAP_BYTES(buf,   2,  13);
+                H5_SWAP_BYTES(buf,   3,  12);
+                H5_SWAP_BYTES(buf,   4,  11);
+                H5_SWAP_BYTES(buf,   5,  10);
+                H5_SWAP_BYTES(buf,   6,   9);
+                H5_SWAP_BYTES(buf,   7,   8);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,   0,  15); /*  8 */
+                H5_SWAP_BYTES(buf,   1,  14);
+                H5_SWAP_BYTES(buf,   2,  13);
+                H5_SWAP_BYTES(buf,   3,  12);
+                H5_SWAP_BYTES(buf,   4,  11);
+                H5_SWAP_BYTES(buf,   5,  10);
+                H5_SWAP_BYTES(buf,   6,   9);
+                H5_SWAP_BYTES(buf,   7,   8);
+                buf += buf_stride;
+                H5_SWAP_BYTES(buf,   0,  15); /*  9 */
+                H5_SWAP_BYTES(buf,   1,  14);
+                H5_SWAP_BYTES(buf,   2,  13);
+                H5_SWAP_BYTES(buf,   3,  12);
+                H5_SWAP_BYTES(buf,   4,  11);
+                H5_SWAP_BYTES(buf,   5,  10);
+                H5_SWAP_BYTES(buf,   6,   9);
+                H5_SWAP_BYTES(buf,   7,   8);
+                buf += buf_stride;
+            }
+            for (i=0; i<nelmts; i++, buf+=buf_stride) {
+                H5_SWAP_BYTES(buf, 0, 15);
+                H5_SWAP_BYTES(buf, 1, 14);
+                H5_SWAP_BYTES(buf, 2, 13);
+                H5_SWAP_BYTES(buf, 3, 12);
+                H5_SWAP_BYTES(buf, 4, 11);
+                H5_SWAP_BYTES(buf, 5, 10);
+                H5_SWAP_BYTES(buf, 6,  9);
+                H5_SWAP_BYTES(buf, 7,  8);
+            }
+            break;
+        }
+        break;
+
+    case H5T_CONV_FREE:
+	/* Free private data */
+	break;
+
+    default:
+	HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_order
+ *
+ * Purpose:	Convert one type to another when byte order is the only
+ *		difference.
+ *
+ * Note:	This is a soft conversion function.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, January 13, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-06-16
+ *		Added the `stride' argument. If its value is non-zero then we
+ *		stride through memory converting one value at each location;
+ *		otherwise we assume that the values should be packed.
+ *
+ * 		Robb Matzke, 1999-06-16
+ *		Added support for bitfields.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_order(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
+	       size_t buf_stride, size_t UNUSED bkg_stride, void *_buf,
+               void UNUSED *background, hid_t UNUSED dxpl_id)
+{
+    uint8_t	*buf = (uint8_t*)_buf;
+    H5T_t	*src = NULL;
+    H5T_t	*dst = NULL;
+    size_t	i;
+    size_t	j, md;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_order, FAIL);
+
+    switch (cdata->command) {
+    case H5T_CONV_INIT:
+	/* Capability query */
+	if (NULL == (src = H5I_object(src_id)) ||
+                NULL == (dst = H5I_object(dst_id)))
+	    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+	if (src->shared->size != dst->shared->size || 0 != src->shared->u.atomic.offset ||
+                0 != dst->shared->u.atomic.offset ||
+                !((H5T_ORDER_BE == src->shared->u.atomic.order &&
+                   H5T_ORDER_LE == dst->shared->u.atomic.order) ||
+                  (H5T_ORDER_LE == src->shared->u.atomic.order &&
+                   H5T_ORDER_BE == dst->shared->u.atomic.order)))
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported");
+	switch (src->shared->type) {
+            case H5T_INTEGER:
+            case H5T_BITFIELD:
+                /* nothing to check */
+                break;
+
+            case H5T_FLOAT:
+                if (src->shared->u.atomic.u.f.sign != dst->shared->u.atomic.u.f.sign ||
+                        src->shared->u.atomic.u.f.epos != dst->shared->u.atomic.u.f.epos ||
+                        src->shared->u.atomic.u.f.esize != dst->shared->u.atomic.u.f.esize ||
+                        src->shared->u.atomic.u.f.ebias != dst->shared->u.atomic.u.f.ebias ||
+                        src->shared->u.atomic.u.f.mpos != dst->shared->u.atomic.u.f.mpos ||
+                        src->shared->u.atomic.u.f.msize != dst->shared->u.atomic.u.f.msize ||
+                        src->shared->u.atomic.u.f.norm != dst->shared->u.atomic.u.f.norm ||
+                        src->shared->u.atomic.u.f.pad != dst->shared->u.atomic.u.f.pad) {
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported");
+                }
+                break;
+
+            default:
+                HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "conversion not supported");
+	}
+	cdata->need_bkg = H5T_BKG_NO;
+	break;
+
+    case H5T_CONV_CONV:
+	/* The conversion */
+	if (NULL == (src = H5I_object(src_id)) ||
+                NULL == (dst = H5I_object(dst_id)))
+	    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+
+        buf_stride = buf_stride ? buf_stride : src->shared->size;
+        md = src->shared->size / 2;
+        for (i=0; i<nelmts; i++, buf+=buf_stride) {
+            for (j=0; j<md; j++)
+                H5_SWAP_BYTES(buf, j, src->shared->size-(j+1));
+        }
+        break;
+
+    case H5T_CONV_FREE:
+	/* Free private data */
+	break;
+
+    default:
+	HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_b_b
+ *
+ * Purpose:	Convert from one bitfield to any other bitfield.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, May 20, 1999
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-06-16
+ *		Added support for non-zero strides. If BUF_STRIDE is non-zero
+ *		then convert one value at each memory location advancing
+ *		BUF_STRIDE bytes each time; otherwise assume both source and
+ *		destination values are packed.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_b_b(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
+	     size_t buf_stride, size_t UNUSED bkg_stride, void *_buf,
+             void UNUSED *background, hid_t UNUSED dxpl_id)
+{
+    uint8_t	*buf = (uint8_t*)_buf;
+    H5T_t	*src=NULL, *dst=NULL;	/*source and dest data types	*/
+    int	direction;		/*direction of traversal	*/
+    size_t	elmtno;			/*element number		*/
+    size_t	olap;			/*num overlapping elements	*/
+    size_t	half_size;		/*1/2 of total size for swapping*/
+    uint8_t	*s, *sp, *d, *dp;	/*source and dest traversal ptrs*/
+    uint8_t	dbuf[256];		/*temp destination buffer	*/
+    size_t	msb_pad_offset;		/*offset for dest MSB padding	*/
+    size_t	i;
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_b_b, FAIL);
+
+    switch(cdata->command) {
+        case H5T_CONV_INIT:
+            /* Capability query */
+            if (NULL == (src = H5I_object(src_id)) ||
+                    NULL == (dst = H5I_object(dst_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+            if (H5T_ORDER_LE!=src->shared->u.atomic.order &&
+                    H5T_ORDER_BE!=src->shared->u.atomic.order)
+                HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order");
+            if (H5T_ORDER_LE!=dst->shared->u.atomic.order &&
+                    H5T_ORDER_BE!=dst->shared->u.atomic.order)
+                HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order");
+            cdata->need_bkg = H5T_BKG_NO;
+            break;
+
+        case H5T_CONV_FREE:
+            break;
+
+        case H5T_CONV_CONV:
+            /* Get the data types */
+            if (NULL==(src=H5I_object(src_id)) ||
+                    NULL==(dst=H5I_object(dst_id)))
+                HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+
+            /*
+             * Do we process the values from beginning to end or vice versa? Also,
+             * how many of the elements have the source and destination areas
+             * overlapping?
+             */
+            if (src->shared->size==dst->shared->size || buf_stride) {
+                sp = dp = (uint8_t*)buf;
+                direction = 1;
+                olap = nelmts;
+            } else if (src->shared->size>=dst->shared->size) {
+                double olap_d = HDceil((double)(dst->shared->size)/
+                                       (double)(src->shared->size-dst->shared->size));
+
+                olap = (size_t)olap_d;
+                sp = dp = (uint8_t*)buf;
+                direction = 1;
+            } else {
+                double olap_d = HDceil((double)(src->shared->size)/
+                                       (double)(dst->shared->size-src->shared->size));
+                olap = (size_t)olap_d;
+                sp = (uint8_t*)buf + (nelmts-1) * src->shared->size;
+                dp = (uint8_t*)buf + (nelmts-1) * dst->shared->size;
+                direction = -1;
+            }
+
+            /* The conversion loop */
+            for (elmtno=0; elmtno<nelmts; elmtno++) {
+
+                /*
+                 * If the source and destination buffers overlap then use a
+                 * temporary buffer for the destination.
+                 */
+                if (direction>0) {
+                    s = sp;
+                    d = elmtno<olap ? dbuf : dp;
+                } else {
+                    s = sp;
+                    d = elmtno+olap >= nelmts ? dbuf : dp;
+                }
+#ifndef NDEBUG
+                /* I don't quite trust the overlap calculations yet --rpm */
+                if (d==dbuf) {
+                    assert ((dp>=sp && dp<sp+src->shared->size) ||
+                            (sp>=dp && sp<dp+dst->shared->size));
+                } else {
+                    assert ((dp<sp && dp+dst->shared->size<=sp) ||
+                            (sp<dp && sp+src->shared->size<=dp));
+                }
+#endif
+
+                /*
+                 * Put the data in little endian order so our loops aren't so
+                 * complicated.  We'll do all the conversion stuff assuming
+                 * little endian and then we'll fix the order at the end.
+                 */
+                if (H5T_ORDER_BE==src->shared->u.atomic.order) {
+                    half_size = src->shared->size/2;
+                    for (i=0; i<half_size; i++) {
+                        uint8_t tmp = s[src->shared->size-(i+1)];
+                        s[src->shared->size-(i+1)] = s[i];
+                        s[i] = tmp;
+                    }
+                }
+
+                /*
+                 * Copy the significant part of the value. If the source is larger
+                 * than the destination then invoke the overflow function or copy
+                 * as many bits as possible. Zero extra bits in the destination.
+                 */
+                if (src->shared->u.atomic.prec>dst->shared->u.atomic.prec) {
+                    if (!H5T_overflow_g ||
+                        (H5T_overflow_g)(src_id, dst_id, s, d)<0) {
+                        H5T_bit_copy(d, dst->shared->u.atomic.offset,
+                                     s, src->shared->u.atomic.offset, dst->shared->u.atomic.prec);
+                    }
+                } else {
+                    H5T_bit_copy(d, dst->shared->u.atomic.offset,
+                                 s, src->shared->u.atomic.offset,
+                                 src->shared->u.atomic.prec);
+                    H5T_bit_set(d, dst->shared->u.atomic.offset+src->shared->u.atomic.prec,
+                                dst->shared->u.atomic.prec-src->shared->u.atomic.prec, FALSE);
+                }
+
+                /*
+                 * Fill the destination padding areas.
+                 */
+                switch (dst->shared->u.atomic.lsb_pad) {
+                    case H5T_PAD_ZERO:
+                        H5T_bit_set(d, 0, dst->shared->u.atomic.offset, FALSE);
+                        break;
+                    case H5T_PAD_ONE:
+                        H5T_bit_set(d, 0, dst->shared->u.atomic.offset, TRUE);
+                        break;
+                    default:
+                        HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported LSB padding");
+                }
+                msb_pad_offset = dst->shared->u.atomic.offset + dst->shared->u.atomic.prec;
+                switch (dst->shared->u.atomic.msb_pad) {
+                    case H5T_PAD_ZERO:
+                        H5T_bit_set(d, msb_pad_offset, 8*dst->shared->size-msb_pad_offset,
+                                    FALSE);
+                        break;
+                    case H5T_PAD_ONE:
+                        H5T_bit_set(d, msb_pad_offset, 8*dst->shared->size-msb_pad_offset,
+                                    TRUE);
+                        break;
+                    default:
+                        HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported MSB padding");
+                }
+
+                /*
+                 * Put the destination in the correct byte order.  See note at
+                 * beginning of loop.
+                 */
+                if (H5T_ORDER_BE==dst->shared->u.atomic.order) {
+                    half_size = dst->shared->size/2;
+                    for (i=0; i<half_size; i++) {
+                        uint8_t tmp = d[dst->shared->size-(i+1)];
+                        d[dst->shared->size-(i+1)] = d[i];
+                        d[i] = tmp;
+                    }
+                }
+
+                /*
+                 * If we had used a temporary buffer for the destination then we
+                 * should copy the value to the true destination buffer.
+                 */
+                if (d==dbuf) HDmemcpy (dp, d, dst->shared->size);
+                if (buf_stride) {
+                    sp += direction * buf_stride;
+                    dp += direction * buf_stride;
+                } else {
+                    sp += direction * src->shared->size;
+                    dp += direction * dst->shared->size;
+                }
+            }
+
+            break;
+
+        default:
+            HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_struct_init
+ *
+ * Purpose:	Initialize the `priv' field of `cdata' with conversion
+ *		information that is relatively constant.  If `priv' is
+ *		already initialized then the member conversion functions
+ *		are recalculated.
+ *
+ *		Priv fields are indexed by source member number or
+ *		destination member number depending on whether the field
+ *		contains information about the source data type or the
+ *		destination data type (fields that contains the same
+ *		information for both source and destination are indexed by
+ *		source member number).  The src2dst[] priv array maps source
+ *		member numbers to destination member numbers, but if the
+ *		source member doesn't have a corresponding destination member
+ *		then the src2dst[i]=-1.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, January 26, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T_conv_struct_init (H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata, hid_t dxpl_id)
+{
+    H5T_conv_struct_t	*priv = (H5T_conv_struct_t*)(cdata->priv);
+    int		*src2dst = NULL;
+    unsigned		i, j;
+    H5T_t		*type = NULL;
+    hid_t		tid;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_conv_struct_init);
+
+    if (!priv) {
+        /*
+         * Allocate private data structure and arrays.
+         */
+        if (NULL==(priv=cdata->priv=H5MM_calloc(sizeof(H5T_conv_struct_t))) ||
+                NULL==(priv->src2dst=H5MM_malloc(src->shared->u.compnd.nmembs *
+                                 sizeof(int))) ||
+                NULL==(priv->src_memb_id=H5MM_malloc(src->shared->u.compnd.nmembs *
+                                    sizeof(hid_t))) ||
+                NULL==(priv->dst_memb_id=H5MM_malloc(dst->shared->u.compnd.nmembs *
+                                    sizeof(hid_t))))
+            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+        src2dst = priv->src2dst;
+
+        /*
+         * Insure that members are sorted.
+         */
+        H5T_sort_value(src, NULL);
+        H5T_sort_value(dst, NULL);
+
+        /*
+         * Build a mapping from source member number to destination member
+         * number. If some source member is not a destination member then that
+         * mapping element will be negative.  Also create atoms for each
+         * source and destination member data type so we can look up the
+         * member data type conversion functions later.
+         */
+        for (i=0; i<src->shared->u.compnd.nmembs; i++) {
+            src2dst[i] = -1;
+            for (j=0; j<dst->shared->u.compnd.nmembs; j++) {
+                if (!HDstrcmp (src->shared->u.compnd.memb[i].name,
+                       dst->shared->u.compnd.memb[j].name)) {
+                    src2dst[i] = j;
+                    break;
+                }
+            }
+            if (src2dst[i]>=0) {
+                type = H5T_copy (src->shared->u.compnd.memb[i].type, H5T_COPY_ALL);
+                tid = H5I_register (H5I_DATATYPE, type);
+                assert (tid>=0);
+                priv->src_memb_id[i] = tid;
+
+                type = H5T_copy (dst->shared->u.compnd.memb[src2dst[i]].type,
+                     H5T_COPY_ALL);
+                tid = H5I_register (H5I_DATATYPE, type);
+                assert (tid>=0);
+                priv->dst_memb_id[src2dst[i]] = tid;
+            }
+        }
+    }
+    else {
+        /* Restore sorted conditions for the datatypes */
+        /* (Required for the src2dst array to be valid) */
+        H5T_sort_value(src, NULL);
+        H5T_sort_value(dst, NULL);
+    } /* end else */
+
+    /*
+     * (Re)build the cache of member conversion functions and pointers to
+     * their cdata entries.
+     */
+    src2dst = priv->src2dst;
+    H5MM_xfree(priv->memb_path);
+    if (NULL==(priv->memb_path=H5MM_malloc(src->shared->u.compnd.nmembs *
+					   sizeof(H5T_path_t*))))
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+
+    for (i=0; i<src->shared->u.compnd.nmembs; i++) {
+        if (src2dst[i]>=0) {
+            H5T_path_t *tpath = H5T_path_find(src->shared->u.compnd.memb[i].type,
+                      dst->shared->u.compnd.memb[src2dst[i]].type, NULL, NULL, dxpl_id);
+
+            if (NULL==(priv->memb_path[i] = tpath)) {
+                H5MM_xfree(priv->src2dst);
+                H5MM_xfree(priv->src_memb_id);
+                H5MM_xfree(priv->dst_memb_id);
+                H5MM_xfree(priv->memb_path);
+                cdata->priv = priv = H5MM_xfree (priv);
+                HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unable to convert member data type");
+            }
+        }
+    }
+
+    /* Check if we need a background buffer */
+    if (H5T_detect_class(src,H5T_COMPOUND)==TRUE || H5T_detect_class(dst,H5T_COMPOUND)==TRUE)
+        cdata->need_bkg = H5T_BKG_YES;
+
+    cdata->recalc = FALSE;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_struct
+ *
+ * Purpose:	Converts between compound data types.  This is a soft
+ *		conversion function.  The algorithm is basically:
+ *
+ * 		For each element do
+ *		  For I=1..NELMTS do
+ *		    If sizeof detination type <= sizeof source type then
+ *		      Convert member to destination type;
+ *		    Move member as far left as possible;
+ *
+ *		  For I=NELMTS..1 do
+ *		    If not destination type then
+ *		      Convert member to destination type;
+ *		    Move member to correct position in BKG
+ *
+ *		  Copy BKG to BUF
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, January 22, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-06-16
+ *              Added support for non-zero strides. If BUF_STRIDE is
+ *              non-zero then convert one value at each memory location
+ *              advancing BUF_STRIDE bytes each time; otherwise assume
+ *              both source and destination values are packed.
+ *
+ *              Robb Matzke, 2000-05-17
+ *              Added the BKG_STRIDE argument to fix a design bug. If
+ *              BUF_STRIDE and BKG_STRIDE are both non-zero then each
+ *              data element converted will be placed temporarily at a
+ *              multiple of BKG_STRIDE in the BKG buffer; otherwise the
+ *              BKG buffer is assumed to be a packed array of destination
+ *              datatype.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
+		size_t buf_stride, size_t bkg_stride, void *_buf, void *_bkg,
+                hid_t dxpl_id)
+{
+    uint8_t	*buf = (uint8_t *)_buf;	/*cast for pointer arithmetic	*/
+    uint8_t	*bkg = (uint8_t *)_bkg;	/*background pointer arithmetic	*/
+    uint8_t     *xbuf=buf, *xbkg=bkg;   /*temp pointers into buf and bkg*/
+    H5T_t	*src = NULL;		/*source data type		*/
+    H5T_t	*dst = NULL;		/*destination data type		*/
+    int	*src2dst = NULL;	/*maps src member to dst member	*/
+    H5T_cmemb_t	*src_memb = NULL;	/*source struct member descript.*/
+    H5T_cmemb_t	*dst_memb = NULL;	/*destination struct memb desc.	*/
+    size_t	offset;			/*byte offset wrt struct	*/
+    size_t	src_delta;	    /*source stride	*/
+    size_t	elmtno;
+    unsigned	u;		/*counters			*/
+    int	i;			/*counters			*/
+    H5T_conv_struct_t *priv = (H5T_conv_struct_t *)(cdata->priv);
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_struct, FAIL);
+
+    switch (cdata->command) {
+        case H5T_CONV_INIT:
+            /*
+             * First, determine if this conversion function applies to the
+             * conversion path SRC_ID-->DST_ID.  If not, return failure;
+             * otherwise initialize the `priv' field of `cdata' with information
+             * that remains (almost) constant for this conversion path.
+             */
+            if (NULL == (src = H5I_object(src_id)) ||
+                    NULL == (dst = H5I_object(dst_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+            assert (H5T_COMPOUND==src->shared->type);
+            assert (H5T_COMPOUND==dst->shared->type);
+
+            if (H5T_conv_struct_init (src, dst, cdata, dxpl_id)<0)
+                HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize conversion data");
+            break;
+
+        case H5T_CONV_FREE:
+            /*
+             * Free the private conversion data.
+             */
+            H5MM_xfree(priv->src2dst);
+            H5MM_xfree(priv->src_memb_id);
+            H5MM_xfree(priv->dst_memb_id);
+            H5MM_xfree(priv->memb_path);
+            cdata->priv = priv = H5MM_xfree (priv);
+            break;
+
+        case H5T_CONV_CONV:
+            /*
+             * Conversion.
+             */
+            if (NULL == (src = H5I_object(src_id)) ||
+                    NULL == (dst = H5I_object(dst_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+            assert (priv);
+            assert (bkg && cdata->need_bkg);
+
+            if (cdata->recalc && H5T_conv_struct_init (src, dst, cdata, dxpl_id)<0)
+                HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize conversion data");
+
+            /*
+             * Insure that members are sorted.
+             */
+            H5T_sort_value(src, NULL);
+            H5T_sort_value(dst, NULL);
+            src2dst = priv->src2dst;
+
+            /*
+             * Direction of conversion and striding through background.
+             */
+            if (buf_stride) {
+                src_delta = buf_stride;
+            if (!bkg_stride)
+                bkg_stride = dst->shared->size;
+            } else if (dst->shared->size <= src->shared->size) {
+                src_delta = src->shared->size;
+            bkg_stride = dst->shared->size;
+            } else {
+                src_delta = -(int)src->shared->size; /*overflow shouldn't be possible*/
+                bkg_stride = -(int)dst->shared->size; /*overflow shouldn't be possible*/
+                xbuf += (nelmts-1) * src->shared->size;
+                xbkg += (nelmts-1) * dst->shared->size;
+            }
+
+            /* Conversion loop... */
+            for (elmtno=0; elmtno<nelmts; elmtno++) {
+                /*
+                 * For each source member which will be present in the
+                 * destination, convert the member to the destination type unless
+                 * it is larger than the source type.  Then move the member to the
+                 * left-most unoccupied position in the buffer.  This makes the
+                 * data point as small as possible with all the free space on the
+                 * right side.
+                 */
+                for (u=0, offset=0; u<src->shared->u.compnd.nmembs; u++) {
+                    if (src2dst[u]<0) continue; /*subsetting*/
+                    src_memb = src->shared->u.compnd.memb + u;
+                    dst_memb = dst->shared->u.compnd.memb + src2dst[u];
+
+                    if (dst_memb->size <= src_memb->size) {
+                        if (H5T_convert(priv->memb_path[u], priv->src_memb_id[u],
+                                priv->dst_memb_id[src2dst[u]],
+                                1, 0, 0, /*no striding (packed array)*/
+                                xbuf+src_memb->offset, xbkg+dst_memb->offset,
+                                dxpl_id)<0)
+                            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert compound data type member");
+                        HDmemmove (xbuf+offset, xbuf+src_memb->offset,
+                                   dst_memb->size);
+                        offset += dst_memb->size;
+                    } else {
+                        HDmemmove (xbuf+offset, xbuf+src_memb->offset,
+                                   src_memb->size);
+                        offset += src_memb->size;
+                    }
+                }
+
+                /*
+                 * For each source member which will be present in the
+                 * destination, convert the member to the destination type if it
+                 * is larger than the source type (that is, has not been converted
+                 * yet).  Then copy the member to the destination offset in the
+                 * background buffer.
+                 */
+                for (i=src->shared->u.compnd.nmembs-1; i>=0; --i) {
+                    if (src2dst[i]<0) continue; /*subsetting*/
+                    src_memb = src->shared->u.compnd.memb + i;
+                    dst_memb = dst->shared->u.compnd.memb + src2dst[i];
+
+                    if (dst_memb->size > src_memb->size) {
+                        offset -= src_memb->size;
+                        if (H5T_convert(priv->memb_path[i],
+                                    priv->src_memb_id[i], priv->dst_memb_id[src2dst[i]],
+                                    1, 0, 0, /*no striding (packed array)*/
+                                    xbuf+offset, xbkg+dst_memb->offset,
+                                    dxpl_id)<0)
+                            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert compound data type member");
+                    } else {
+                        offset -= dst_memb->size;
+                    }
+                    HDmemmove (xbkg+dst_memb->offset, xbuf+offset, dst_memb->size);
+                }
+                assert (0==offset);
+
+                /*
+                 * Update pointers
+                 */
+                xbuf += src_delta;
+                xbkg += bkg_stride;
+            }
+
+        /* If the bkg_stride was set to -(dst->shared->size), make it positive now */
+        if(buf_stride==0 && dst->shared->size>src->shared->size)
+            bkg_stride=dst->shared->size;
+
+            /*
+             * Copy the background buffer back into the in-place conversion
+             * buffer.
+             */
+            for (xbuf=buf, xbkg=bkg, elmtno=0; elmtno<nelmts; elmtno++) {
+                HDmemmove(xbuf, xbkg, dst->shared->size);
+                xbuf += buf_stride ? buf_stride : dst->shared->size;
+                xbkg += bkg_stride;
+            }
+            break;
+
+        default:
+            /* Some other command we don't know about yet.*/
+            HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_struct_opt
+ *
+ * Purpose:	Converts between compound data types in a manner more
+ *		efficient than the general-purpose H5T_conv_struct()
+ *		function.  This function isn't applicable if the destination
+ *		is larger than the source type. This is a soft conversion
+ *		function.  The algorithm is basically:
+ *
+ * 		For each member of the struct
+ *		  If sizeof detination type <= sizeof source type then
+ *		    Convert member to destination type for all elements
+ *		    Move memb to BKG buffer for all elements
+ *		  Else
+ *		    Move member as far left as possible for all elements
+ *
+ *		For each member of the struct (in reverse order)
+ *		  If not destination type then
+ *		    Convert member to destination type for all elements
+ *		    Move member to correct position in BKG for all elements
+ *
+ *		Copy BKG to BUF for all elements
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, January 22, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-06-16
+ *              Added support for non-zero strides. If BUF_STRIDE is
+ *              non-zero then convert one value at each memory location
+ *              advancing BUF_STRIDE bytes each time; otherwise assume both
+ *              source and destination values are packed.
+ *
+ * 		Robb Matzke, 1999-06-16
+ *		If the source and destination data structs are the same size
+ *		then we can convert on a field-by-field basis instead of an
+ *		element by element basis. In other words, for all struct
+ *		elements being converted by this function call, first convert
+ *		all of the field1's, then all field2's, etc. This can
+ *		drastically reduce the number of calls to H5T_convert() and
+ *		thereby eliminate most of the conversion constant overhead.
+ *
+ *              Robb Matzke, 2000-05-17
+ *              Added the BKG_STRIDE argument to fix a design bug. If
+ *              BUF_STRIDE and BKG_STRIDE are both non-zero then each
+ *              data element converted will be placed temporarily at a
+ *              multiple of BKG_STRIDE in the BKG buffer; otherwise the
+ *              BKG buffer is assumed to be a packed array of destination
+ *              datatype.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_struct_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+    size_t nelmts, size_t buf_stride, size_t bkg_stride, void *_buf,
+    void *_bkg, hid_t dxpl_id)
+{
+    uint8_t	*buf = (uint8_t *)_buf;	/*cast for pointer arithmetic	*/
+    uint8_t	*bkg = (uint8_t *)_bkg;	/*background pointer arithmetic	*/
+    uint8_t	*xbuf = NULL;		/*temporary pointer into `buf'	*/
+    uint8_t	*xbkg = NULL;		/*temporary pointer into `bkg'	*/
+    H5T_t	*src = NULL;		/*source data type		*/
+    H5T_t	*dst = NULL;		/*destination data type		*/
+    int	*src2dst = NULL;	/*maps src member to dst member	*/
+    H5T_cmemb_t	*src_memb = NULL;	/*source struct member descript.*/
+    H5T_cmemb_t	*dst_memb = NULL;	/*destination struct memb desc.	*/
+    size_t	offset;			/*byte offset wrt struct	*/
+    size_t	elmtno;			/*element counter		*/
+    unsigned	u;			/*counters			*/
+    int	i;			    /*counters			*/
+    H5T_conv_struct_t *priv = NULL;	/*private data			*/
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_struct_opt, FAIL);
+
+    switch (cdata->command) {
+        case H5T_CONV_INIT:
+            /*
+             * First, determine if this conversion function applies to the
+             * conversion path SRC_ID-->DST_ID.  If not, return failure;
+             * otherwise initialize the `priv' field of `cdata' with information
+             * that remains (almost) constant for this conversion path.
+             */
+            if (NULL == (src = H5I_object(src_id)) ||
+                    NULL == (dst = H5I_object(dst_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+            assert (H5T_COMPOUND==src->shared->type);
+            assert (H5T_COMPOUND==dst->shared->type);
+
+            /* Initialize data which is relatively constant */
+            if (H5T_conv_struct_init (src, dst, cdata, dxpl_id)<0)
+                HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize conversion data");
+            priv = (H5T_conv_struct_t *)(cdata->priv);
+            src2dst = priv->src2dst;
+
+            /*
+             * If the destination type is not larger than the source type then
+             * this conversion function is guaranteed to work (provided all
+             * members can be converted also). Otherwise the determination is
+             * quite a bit more complicated. Essentially we have to make sure
+             * that there is always room in the source buffer to do the
+             * conversion of a member in place. This is basically the same pair
+             * of loops as in the actual conversion except it checks that there
+             * is room for each conversion instead of actually doing anything.
+             */
+            if (dst->shared->size > src->shared->size) {
+                for (u=0, offset=0; u<src->shared->u.compnd.nmembs; u++) {
+                    if (src2dst[u]<0)
+                        continue;
+                    src_memb = src->shared->u.compnd.memb + u;
+                    dst_memb = dst->shared->u.compnd.memb + src2dst[u];
+                    if (dst_memb->size > src_memb->size)
+                        offset += src_memb->size;
+                }
+                for (i=src->shared->u.compnd.nmembs-1; i>=0; --i) {
+                    if (src2dst[i]<0)
+                        continue;
+                    src_memb = src->shared->u.compnd.memb + i;
+                    dst_memb = dst->shared->u.compnd.memb + src2dst[i];
+                    if (dst_memb->size > src_memb->size) {
+                        offset -= src_memb->size;
+                        if (dst_memb->size > src->shared->size-offset) {
+                            H5MM_xfree(priv->src2dst);
+                            H5MM_xfree(priv->src_memb_id);
+                            H5MM_xfree(priv->dst_memb_id);
+                            H5MM_xfree(priv->memb_path);
+                            cdata->priv = priv = H5MM_xfree (priv);
+                            HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "convertion is unsupported by this function");
+                        }
+                    }
+                }
+            }
+            break;
+
+        case H5T_CONV_FREE:
+            /*
+             * Free the private conversion data.
+             */
+            priv = (H5T_conv_struct_t *)(cdata->priv);
+            H5MM_xfree(priv->src2dst);
+            H5MM_xfree(priv->src_memb_id);
+            H5MM_xfree(priv->dst_memb_id);
+            H5MM_xfree(priv->memb_path);
+            cdata->priv = priv = H5MM_xfree (priv);
+            break;
+
+        case H5T_CONV_CONV:
+            /*
+             * Conversion.
+             */
+            if (NULL == (src = H5I_object(src_id)) ||
+                    NULL == (dst = H5I_object(dst_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+
+            /* Update cached data if necessary */
+            if (cdata->recalc && H5T_conv_struct_init (src, dst, cdata, dxpl_id)<0)
+                HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize conversion data");
+            priv = (H5T_conv_struct_t *)(cdata->priv);
+            src2dst = priv->src2dst;
+            assert(priv);
+            assert(bkg && cdata->need_bkg);
+
+            /*
+             * Insure that members are sorted.
+             */
+            H5T_sort_value(src, NULL);
+            H5T_sort_value(dst, NULL);
+
+            /*
+             * Calculate strides. If BUF_STRIDE is non-zero then convert one
+             * data element at every BUF_STRIDE bytes through the main buffer
+             * (BUF), leaving the result of each conversion at the same
+             * location; otherwise assume the source and destination data are
+             * packed tightly based on src->shared->size and dst->shared->size.  Also, if
+             * BUF_STRIDE and BKG_STRIDE are both non-zero then place
+             * background data into the BKG buffer at multiples of BKG_STRIDE;
+             * otherwise assume BKG buffer is the packed destination datatype.
+             */
+            if (!buf_stride || !bkg_stride) bkg_stride = dst->shared->size;
+
+            /*
+             * For each member where the destination is not larger than the
+             * source, stride through all the elements converting only that member
+             * in each element and then copying the element to its final
+             * destination in the bkg buffer. Otherwise move the element as far
+             * left as possible in the buffer.
+             */
+            for (u=0, offset=0; u<src->shared->u.compnd.nmembs; u++) {
+                if (src2dst[u]<0) continue; /*subsetting*/
+                src_memb = src->shared->u.compnd.memb + u;
+                dst_memb = dst->shared->u.compnd.memb + src2dst[u];
+
+                if (dst_memb->size <= src_memb->size) {
+                    xbuf = buf + src_memb->offset;
+                    xbkg = bkg + dst_memb->offset;
+                    if (H5T_convert(priv->memb_path[u],
+                            priv->src_memb_id[u],
+                            priv->dst_memb_id[src2dst[u]], nelmts,
+                            buf_stride ? buf_stride : src->shared->size,
+                            bkg_stride, xbuf, xbkg,
+                            dxpl_id)<0)
+                        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert compound data type member");
+                    for (elmtno=0; elmtno<nelmts; elmtno++) {
+                        HDmemmove(xbkg, xbuf, dst_memb->size);
+                        xbuf += buf_stride ? buf_stride : src->shared->size;
+                        xbkg += bkg_stride;
+                    }
+                } else {
+                    for (xbuf=buf, elmtno=0; elmtno<nelmts; elmtno++) {
+                        HDmemmove(xbuf+offset, xbuf+src_memb->offset,
+                                              src_memb->size);
+                        xbuf += buf_stride ? buf_stride : src->shared->size;
+                    }
+                    offset += src_memb->size;
+                }
+            }
+
+            /*
+             * Work from right to left, converting those members that weren't
+             * converted in the previous loop (those members where the destination
+             * is larger than the source) and them to their final position in the
+             * bkg buffer.
+             */
+            for (i=src->shared->u.compnd.nmembs-1; i>=0; --i) {
+                if (src2dst[i]<0)
+                    continue;
+                src_memb = src->shared->u.compnd.memb + i;
+                dst_memb = dst->shared->u.compnd.memb + src2dst[i];
+
+                if (dst_memb->size > src_memb->size) {
+                    offset -= src_memb->size;
+                    xbuf = buf + offset;
+                    xbkg = bkg + dst_memb->offset;
+                    if (H5T_convert(priv->memb_path[i],
+                                    priv->src_memb_id[i],
+                                    priv->dst_memb_id[src2dst[i]], nelmts,
+                                    buf_stride ? buf_stride : src->shared->size,
+                                    bkg_stride, xbuf, xbkg,
+                                    dxpl_id)<0)
+                        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to convert compound data type member");
+                    for (elmtno=0; elmtno<nelmts; elmtno++) {
+                        HDmemmove(xbkg, xbuf, dst_memb->size);
+                        xbuf += buf_stride ? buf_stride : src->shared->size;
+                        xbkg += bkg_stride;
+                    }
+                }
+            }
+
+            /* Move background buffer into result buffer */
+            for (xbuf=buf, xbkg=bkg, elmtno=0; elmtno<nelmts; elmtno++) {
+                HDmemmove(xbuf, xbkg, dst->shared->size);
+                xbuf += buf_stride ? buf_stride : dst->shared->size;
+                xbkg += bkg_stride;
+            }
+            break;
+
+        default:
+            /* Some other command we don't know about yet.*/
+            HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_enum_init
+ *
+ * Purpose:	Initialize information for H5T_conv_enum().
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, January  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T_conv_enum_init(H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata)
+{
+    H5T_enum_struct_t	*priv=NULL;	/*private conversion data	*/
+    int		n;		/*src value cast as native int	*/
+    int		domain[2];	/*min and max source values	*/
+    int		*map=NULL;	/*map from src value to dst idx	*/
+    unsigned	length;		/*nelmts in map array		*/
+    unsigned	i, j;		/*counters			*/
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_conv_enum_init);
+
+    cdata->need_bkg = H5T_BKG_NO;
+    if (NULL==(priv=cdata->priv=H5MM_calloc(sizeof(*priv))))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+    if (0==src->shared->u.enumer.nmembs)
+	HGOTO_DONE(SUCCEED);
+
+    /*
+     * Check that the source symbol names are a subset of the destination
+     * symbol names and build a map from source member index to destination
+     * member index.
+     */
+    H5T_sort_name(src, NULL);
+    H5T_sort_name(dst, NULL);
+    if (NULL==(priv->src2dst=H5MM_malloc(src->shared->u.enumer.nmembs*sizeof(int))))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");;
+    for (i=0, j=0;
+             i<src->shared->u.enumer.nmembs && j<dst->shared->u.enumer.nmembs;
+             i++, j++) {
+	while (j<dst->shared->u.enumer.nmembs &&
+	       HDstrcmp(src->shared->u.enumer.name[i], dst->shared->u.enumer.name[j]))
+            j++;
+	if (j>=dst->shared->u.enumer.nmembs)
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "source type is not a subset of destination type");
+	priv->src2dst[i] = j;
+    }
+
+    /*
+     * The conversion function will use an O(log N) lookup method for each
+     * value converted. However, if all of the following constraints are met
+     * then we can build a perfect hash table and use an O(1) lookup method.
+     *
+     *	  A: The source data type size matches one of our native data type
+     *	     sizes.
+     *
+     *	  B: After casting the source value bit pattern to a native type
+     *	     the size of the range of values is less than 20% larger than
+     *	     the number of values.
+     *
+     * If this special case is met then we use the source bit pattern cast as
+     * a native integer type as an index into the `val2dst'. The values of
+     * that array are the index numbers in the destination type or negative
+     * if the entry is unused.
+     */
+    if (1==src->shared->size || sizeof(short)==src->shared->size || sizeof(int)==src->shared->size) {
+	for (i=0; i<src->shared->u.enumer.nmembs; i++) {
+	    if (1==src->shared->size) {
+		n = *((signed char*)(src->shared->u.enumer.value+i));
+	    } else if (sizeof(short)==src->shared->size) {
+		n = *((short*)(src->shared->u.enumer.value+i*src->shared->size));
+	    } else {
+		n = *((int*)(src->shared->u.enumer.value+i*src->shared->size));
+	    }
+	    if (0==i) {
+		domain[0] = domain[1] = n;
+	    } else {
+		domain[0] = MIN(domain[0], n);
+		domain[1] = MAX(domain[1], n);
+	    }
+	}
+
+	length = (domain[1]-domain[0])+1;
+	if (src->shared->u.enumer.nmembs<2 ||
+	    (double)length/src->shared->u.enumer.nmembs<1.2) {
+	    priv->base = domain[0];
+	    priv->length = length;
+	    if (NULL==(map=H5MM_malloc(length*sizeof(int))))
+		HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed");
+	    for (i=0; i<length; i++)
+                map[i] = -1; /*entry unused*/
+	    for (i=0; i<src->shared->u.enumer.nmembs; i++) {
+		if (1==src->shared->size) {
+		    n = *((signed char*)(src->shared->u.enumer.value+i));
+		} else if (sizeof(short)==src->shared->size) {
+		    n = *((short*)(src->shared->u.enumer.value+i*src->shared->size));
+		} else {
+		    n = *((int*)(src->shared->u.enumer.value+i*src->shared->size));
+		}
+		n -= priv->base;
+		assert(n>=0 && n<priv->length);
+		assert(map[n]<0);
+		map[n] = priv->src2dst[i];
+	    }
+
+	    /*
+	     * Replace original src2dst array with our new one. The original
+	     * was indexed by source member number while the new one is
+	     * indexed by source values.
+	     */
+	    H5MM_xfree(priv->src2dst);
+	    priv->src2dst = map;
+	    HGOTO_DONE(SUCCEED);
+	}
+    }
+
+    /* Sort source type by value and adjust src2dst[] appropriately */
+    H5T_sort_value(src, priv->src2dst);
+
+done:
+    if (ret_value<0 && priv) {
+	H5MM_xfree(priv->src2dst);
+	H5MM_xfree(priv);
+	cdata->priv = NULL;
+    }
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_enum
+ *
+ * Purpose:	Converts one type of enumerated data to another.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, January  4, 1999
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-06-16
+ *		Added support for non-zero strides. If BUF_STRIDE is non-zero
+ *		then convert one value at each memory location advancing
+ *		BUF_STRIDE bytes each time; otherwise assume both source and
+ *		destination values are packed.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
+	      size_t buf_stride, size_t UNUSED bkg_stride, void *_buf,
+              void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    uint8_t	*buf = (uint8_t*)_buf;	/*cast for pointer arithmetic	*/
+    H5T_t	*src=NULL, *dst=NULL;	/*src and dst data types	*/
+    uint8_t	*s=NULL, *d=NULL;	/*src and dst BUF pointers	*/
+    int	src_delta, dst_delta;	/*conversion strides		*/
+    int	n;			/*src value cast as native int	*/
+    size_t	i;			/*counters			*/
+    H5T_enum_struct_t *priv = (H5T_enum_struct_t*)(cdata->priv);
+    herr_t      ret_value=SUCCEED;      /* Return value                 */
+
+    FUNC_ENTER_NOAPI(H5T_conv_enum, FAIL);
+
+    switch (cdata->command) {
+        case H5T_CONV_INIT:
+            /*
+             * Determine if this conversion function applies to the conversion
+             * path SRC_ID->DST_ID.  If not return failure; otherwise initialize
+             * the `priv' field of `cdata' with information about the underlying
+             * integer conversion.
+             */
+            if (NULL == (src = H5I_object(src_id)) ||
+                    NULL == (dst = H5I_object(dst_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+            assert (H5T_ENUM==src->shared->type);
+            assert (H5T_ENUM==dst->shared->type);
+            if (H5T_conv_enum_init(src, dst, cdata)<0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to initialize private data");
+            break;
+
+        case H5T_CONV_FREE:
+#ifdef H5T_DEBUG
+            if (H5DEBUG(T)) {
+                fprintf(H5DEBUG(T), "      Using %s mapping function%s\n",
+                        priv->length?"O(1)":"O(log N)",
+                        priv->length?"":", where N is the number of enum members");
+            }
+#endif
+            if (priv) {
+                H5MM_xfree(priv->src2dst);
+                H5MM_xfree(priv);
+            }
+            cdata->priv = NULL;
+            break;
+
+        case H5T_CONV_CONV:
+            if (NULL == (src = H5I_object(src_id)) ||
+                    NULL == (dst = H5I_object(dst_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+            assert (H5T_ENUM==src->shared->type);
+            assert (H5T_ENUM==dst->shared->type);
+
+            /* priv->src2dst map was computed for certain sort keys. Make sure those same
+             * sort keys are used here during conversion. See H5T_conv_enum_init(). But
+             * we actually don't care about the source type's order when doing the O(1)
+             * conversion algorithm, which is turned on by non-zero priv->length */
+            H5T_sort_name(dst, NULL);
+            if (!priv->length) H5T_sort_value(src, NULL);
+
+            /*
+             * Direction of conversion.
+             */
+            if (buf_stride) {
+                src_delta = dst_delta = (int)buf_stride;
+                s = d = buf;
+            } else if (dst->shared->size <= src->shared->size) {
+                src_delta = (int)src->shared->size; /*overflow shouldn't be possible*/
+                dst_delta = (int)dst->shared->size; /*overflow shouldn't be possible*/
+                s = d = buf;
+            } else {
+                src_delta = -(int)src->shared->size; /*overflow shouldn't be possible*/
+                dst_delta = -(int)dst->shared->size; /*overflow shouldn't be possible*/
+                s = buf + (nelmts-1) * src->shared->size;
+                d = buf + (nelmts-1) * dst->shared->size;
+            }
+
+            for (i=0; i<nelmts; i++, s+=src_delta, d+=dst_delta) {
+                if (priv->length) {
+                    /* Use O(1) lookup */
+                    if (1==src->shared->size) {
+                        n = *((signed char*)s);
+                    } else if (sizeof(short)==src->shared->size) {
+                        n = *((short*)s);
+                    } else {
+                        n = *((int*)s);
+                    }
+                    n -= priv->base;
+                    if (n<0 || n>=priv->length || priv->src2dst[n]<0) {
+                        if (!H5T_overflow_g ||
+                            (H5T_overflow_g)(src_id, dst_id, s, d)<0) {
+                            HDmemset(d, 0xff, dst->shared->size);
+                        }
+                    } else {
+                        HDmemcpy(d,
+                                 dst->shared->u.enumer.value+priv->src2dst[n]*dst->shared->size,
+                                 dst->shared->size);
+                    }
+                } else {
+                    /* Use O(log N) lookup */
+                    int lt = 0;
+                    int rt = src->shared->u.enumer.nmembs;
+                    int md, cmp;
+                    while (lt<rt) {
+                        md = (lt+rt)/2;
+                        cmp = HDmemcmp(s, src->shared->u.enumer.value+md*src->shared->size,
+                                       src->shared->size);
+                        if (cmp<0) {
+                            rt = md;
+                        } else if (cmp>0) {
+                            lt = md+1;
+                        } else {
+                            break;
+                        }
+                    }
+                    if (lt>=rt) {
+                        if (!H5T_overflow_g ||
+                            (H5T_overflow_g)(src_id, dst_id, s, d)<0) {
+                            HDmemset(d, 0xff, dst->shared->size);
+                        }
+                    } else {
+                        HDmemcpy(d,
+                                 dst->shared->u.enumer.value+priv->src2dst[md]*dst->shared->size,
+                                 dst->shared->size);
+                    }
+                }
+            }
+            break;
+
+        default:
+            /* Some other command we don't know about yet.*/
+            HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_vlen
+ *
+ * Purpose:	Converts between VL data types in memory and on disk.
+ *		This is a soft conversion function.  The algorithm is
+ *		basically:
+ *
+ *      	For every VL struct in the main buffer:
+ *		  1. Allocate space for temporary dst VL data (reuse buffer
+ *		     if possible)
+ *                2. Copy VL data from src buffer into dst buffer
+ *                3. Convert VL data into dst representation
+ *                4. Allocate buffer in dst heap
+ *		  5. Free heap objects storing old data
+ *                6. Write dst VL data into dst heap
+ *                7. Store (heap ID or pointer) and length in main dst buffer
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, May 26, 1999
+ *
+ * Modifications:
+ *
+ *		Quincey Koziol, 2 July, 1999
+ *		Enabled support for non-zero strides. If BUF_STRIDE is non-zero
+ *		then convert one value at each memory location advancing
+ *		BUF_STRIDE bytes each time; otherwise assume both source and
+ *		destination values are packed.
+ *
+ *		Raymond Lu, 26 June, 2002
+ *		Background buffer is used for freeing heap objects storing
+ * 		old data.  At this moment, it only frees the first level of
+ *		VL datatype.  It doesn't handle nested VL datatypes.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
+	      size_t buf_stride, size_t bkg_stride, void *buf,
+              void *bkg, hid_t dxpl_id)
+{
+    H5T_vlen_alloc_info_t _vl_alloc_info;       /* VL allocation info buffer */
+    H5T_vlen_alloc_info_t *vl_alloc_info=&_vl_alloc_info;   /* VL allocation info */
+    H5T_path_t	*tpath;			/* Type conversion path		     */
+    hbool_t     noop_conv=FALSE;        /* Flag to indicate a noop conversion */
+    hbool_t     write_to_file=FALSE;    /* Flag to indicate writing to file */
+    hbool_t     parent_is_vlen;         /* Flag to indicate parent is vlen datatyp */
+    hid_t   	tsrc_id = -1, tdst_id = -1;/*temporary type atoms	     */
+    H5T_t	*src = NULL;		/*source data type		     */
+    H5T_t	*dst = NULL;		/*destination data type		     */
+    H5HG_t	bg_hobjid, parent_hobjid;
+    uint8_t	*s;		        /*source buffer			*/
+    uint8_t	*d;		        /*destination buffer		*/
+    uint8_t	*b;		        /*background buffer		*/
+    ssize_t	s_stride, d_stride;	/*src and dst strides		*/
+    ssize_t	b_stride;	        /*bkg stride			*/
+    size_t      safe;                   /*how many elements are safe to process in each pass */
+    ssize_t 	seq_len;                /*the number of elements in the current sequence*/
+    size_t	bg_seq_len=0;
+    size_t	src_base_size, dst_base_size;/*source & destination base size*/
+    void	*conv_buf=NULL;     	/*temporary conversion buffer 	     */
+    size_t	conv_buf_size=0;  	/*size of conversion buffer in bytes */
+    void	*tmp_buf=NULL;     	/*temporary background buffer 	     */
+    size_t	tmp_buf_size=0;	        /*size of temporary bkg buffer	     */
+    hbool_t     nested=FALSE;           /*flag of nested VL case             */
+    size_t	elmtno;			/*element number counter	     */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_vlen, FAIL);
+
+    switch (cdata->command) {
+        case H5T_CONV_INIT:
+            /*
+             * First, determine if this conversion function applies to the
+             * conversion path SRC_ID-->DST_ID.  If not, return failure;
+             * otherwise initialize the `priv' field of `cdata' with
+             * information that remains (almost) constant for this
+             * conversion path.
+             */
+            if (NULL == (src = H5I_object(src_id)) ||
+                    NULL == (dst = H5I_object(dst_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+            assert (H5T_VLEN==src->shared->type);
+            assert (H5T_VLEN==dst->shared->type);
+
+            /* Variable-length types don't need a background buffer */
+            cdata->need_bkg = H5T_BKG_NO;
+
+            break;
+
+        case H5T_CONV_FREE:
+            /* QAK - Nothing to do currently */
+            break;
+
+        case H5T_CONV_CONV:
+            /*
+             * Conversion.
+             */
+            if (NULL == (src = H5I_object(src_id)) ||
+                    NULL == (dst = H5I_object(dst_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+
+            /* Initialize source & destination strides */
+            if (buf_stride) {
+                assert(buf_stride>=src->shared->size);
+                assert(buf_stride>=dst->shared->size);
+                H5_CHECK_OVERFLOW(buf_stride,size_t,ssize_t);
+                s_stride = d_stride = (ssize_t)buf_stride;
+            } else {
+                H5_CHECK_OVERFLOW(src->shared->size,size_t,ssize_t);
+                H5_CHECK_OVERFLOW(dst->shared->size,size_t,ssize_t);
+                s_stride = (ssize_t)src->shared->size;
+                d_stride = (ssize_t)dst->shared->size;
+            }
+            if(bkg) {
+                if(bkg_stride) {
+                    H5_CHECK_OVERFLOW(bkg_stride,size_t,ssize_t);
+                    b_stride=(ssize_t)bkg_stride;
+                } /* end if */
+                else
+                    b_stride=d_stride;
+            } /* end if */
+            else
+                b_stride=0;
+
+            /* Get the size of the base types in src & dst */
+            src_base_size=H5T_get_size(src->shared->parent);
+            dst_base_size=H5T_get_size(dst->shared->parent);
+
+            /* Set up conversion path for base elements */
+            if (NULL==(tpath=H5T_path_find(src->shared->parent, dst->shared->parent, NULL, NULL, dxpl_id))) {
+                HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest datatypes");
+            } else if (!H5T_path_noop(tpath)) {
+                if ((tsrc_id = H5I_register(H5I_DATATYPE, H5T_copy(src->shared->parent, H5T_COPY_ALL)))<0 ||
+                        (tdst_id = H5I_register(H5I_DATATYPE, H5T_copy(dst->shared->parent, H5T_COPY_ALL)))<0)
+                    HGOTO_ERROR(H5E_DATASET, H5E_CANTREGISTER, FAIL, "unable to register types for conversion");
+            } else
+                noop_conv=TRUE;
+
+            /* Check if we need a temporary buffer for this conversion */
+            parent_is_vlen=H5T_detect_class(dst->shared->parent,H5T_VLEN);
+            if(tpath->cdata.need_bkg || parent_is_vlen) {
+                /* Set up initial background buffer */
+                tmp_buf_size=MAX(src_base_size,dst_base_size);
+                if ((tmp_buf=H5FL_BLK_MALLOC(vlen_seq,tmp_buf_size))==NULL)
+                    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion");
+            } /* end if */
+
+            /* Get the allocation info */
+            if(H5T_vlen_get_alloc_info(dxpl_id,&vl_alloc_info)<0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTGET, FAIL, "unable to retrieve VL allocation info");
+
+            /* Set flags to indicate we are writing to or reading from the file */
+            if(dst->shared->u.vlen.f!=NULL)
+                write_to_file=TRUE;
+
+            /* Set the flag for nested VL case */
+            if(write_to_file && parent_is_vlen && bkg!=NULL)
+                nested=1;
+
+            /* The outer loop of the type conversion macro, controlling which */
+            /* direction the buffer is walked */
+            while (nelmts>0) {
+                /* Check if we need to go backwards through the buffer */
+                if(d_stride>s_stride) {
+                    /* Compute the number of "safe" destination elements at */
+                    /* the end of the buffer (Those which don't overlap with */
+                    /* any source elements at the beginning of the buffer) */
+                    safe=nelmts-(((nelmts*s_stride)+(d_stride-1))/d_stride);
+
+                    /* If we're down to the last few elements, just wrap up */
+                    /* with a "real" reverse copy */
+                    if(safe<2) {
+                        s = (uint8_t*)buf+(nelmts-1)*s_stride;
+                        d = (uint8_t*)buf+(nelmts-1)*d_stride;
+                        b = (uint8_t*)bkg+(nelmts-1)*b_stride;
+                        s_stride = -s_stride;
+                        d_stride = -d_stride;
+                        b_stride = -b_stride;
+
+                        safe=nelmts;
+                    } /* end if */
+                    else {
+                        s = (uint8_t*)buf+(nelmts-safe)*s_stride;
+                        d = (uint8_t*)buf+(nelmts-safe)*d_stride;
+                        b = (uint8_t*)bkg+(nelmts-safe)*b_stride;
+                    } /* end else */
+                } /* end if */
+                else {
+                    /* Single forward pass over all data */
+                    s = d = buf;
+                    b = bkg;
+                    safe=nelmts;
+                } /* end else */
+
+                for (elmtno=0; elmtno<safe; elmtno++) {
+                    /* Check for "nil" source sequence */
+                    if((*(src->shared->u.vlen.isnull))(src->shared->u.vlen.f,s)) {
+                        /* Write "nil" sequence to destination location */
+                        if((*(dst->shared->u.vlen.setnull))(dst->shared->u.vlen.f,dxpl_id,d,b)<0)
+                            HGOTO_ERROR(H5E_DATATYPE, H5E_WRITEERROR, FAIL, "can't set VL data to 'nil'");
+                    } /* end if */
+                    else {
+                        /* Get length of element sequences */
+                        if((seq_len=(*(src->shared->u.vlen.getlen))(s))<0)
+                            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "incorrect length");
+
+                        /* If we are reading from memory and there is no conversion, just get the pointer to sequence */
+                        if(write_to_file && noop_conv) {
+                            /* Get direct pointer to sequence */
+                            if((conv_buf=(*(src->shared->u.vlen.getptr))(s))==NULL)
+                                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "invalid source pointer");
+                        } /* end if */
+                        else {
+                            size_t	src_size, dst_size;     /*source & destination total size in bytes*/
+
+                            src_size=seq_len*src_base_size;
+                            dst_size=seq_len*dst_base_size;
+
+                            /* Check if conversion buffer is large enough, resize if
+                             * necessary */
+                            if(conv_buf_size<MAX(src_size,dst_size)) {
+                                /* Only allocate conversion buffer in H5T_VLEN_MIN_CONF_BUF_SIZE increments */
+                                conv_buf_size=((MAX(src_size,dst_size)/H5T_VLEN_MIN_CONF_BUF_SIZE)+1)*H5T_VLEN_MIN_CONF_BUF_SIZE;
+                                if((conv_buf=H5FL_BLK_REALLOC(vlen_seq,conv_buf, conv_buf_size))==NULL)
+                                    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion");
+                            } /* end if */
+
+                            /* Read in VL sequence */
+                            if((*(src->shared->u.vlen.read))(src->shared->u.vlen.f,dxpl_id,s,conv_buf,src_size)<0)
+                                HGOTO_ERROR(H5E_DATATYPE, H5E_READERROR, FAIL, "can't read VL data");
+                        } /* end else */
+
+                        if(!noop_conv) {
+                            /* Check if temporary buffer is large enough, resize if necessary */
+                            /* (Chain off the conversion buffer size) */
+                            if(tmp_buf && tmp_buf_size<conv_buf_size) {
+                                /* Set up initial background buffer */
+                                tmp_buf_size=conv_buf_size;
+                                if((tmp_buf=H5FL_BLK_REALLOC(vlen_seq,tmp_buf,tmp_buf_size))==NULL)
+                                    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion");
+                            } /* end if */
+
+                            /* If we are writing and there is a nested VL type, read
+                             * the sequence into the background buffer */
+                            if(nested) {
+                                uint8_t *tmp=b;
+                                UINT32DECODE(tmp, bg_seq_len);
+
+                                if(bg_seq_len>0) {
+                                    if(tmp_buf_size<(bg_seq_len*MAX(src_base_size, dst_base_size))) {
+                                        tmp_buf_size=(bg_seq_len*MAX(src_base_size, dst_base_size));
+                                        if((tmp_buf=H5FL_BLK_REALLOC(vlen_seq,tmp_buf, tmp_buf_size))==NULL)
+                                            HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion");
+                                    }
+                                    H5F_addr_decode(dst->shared->u.vlen.f, (const uint8_t **)&tmp, &(bg_hobjid.addr));
+                                    INT32DECODE(tmp, bg_hobjid.idx);
+                                    if(H5HG_read(dst->shared->u.vlen.f,dxpl_id,&bg_hobjid,tmp_buf)==NULL)
+                                        HGOTO_ERROR (H5E_DATATYPE, H5E_READERROR, FAIL, "can't read VL sequence into background buffer");
+                                } /* end if */
+
+                                /* If the sequence gets shorter, pad out the original sequence with zeros */
+                                H5_CHECK_OVERFLOW(bg_seq_len,size_t,ssize_t);
+                                if((ssize_t)bg_seq_len<seq_len) {
+                                    HDmemset((uint8_t *)tmp_buf+dst_base_size*bg_seq_len,0,(seq_len-bg_seq_len)*dst_base_size);
+                                } /* end if */
+                            } /* end if */
+
+                            /* Convert VL sequence */
+                            H5_CHECK_OVERFLOW(seq_len,ssize_t,size_t);
+                            if (H5T_convert(tpath, tsrc_id, tdst_id, (size_t)seq_len, 0, 0, conv_buf, tmp_buf, dxpl_id)<0)
+                                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "datatype conversion failed");
+                        } /* end if */
+
+                        /* Write sequence to destination location */
+                        if((*(dst->shared->u.vlen.write))(dst->shared->u.vlen.f,dxpl_id,vl_alloc_info,d,conv_buf, b, (size_t)seq_len, dst_base_size)<0)
+                            HGOTO_ERROR(H5E_DATATYPE, H5E_WRITEERROR, FAIL, "can't write VL data");
+
+                        if(!noop_conv) {
+                            /* For nested VL case, free leftover heap objects from the deeper level if the length of new data elements is shorter than the old data elements.*/
+                            H5_CHECK_OVERFLOW(bg_seq_len,size_t,ssize_t);
+                            if(nested && seq_len<(ssize_t)bg_seq_len) {
+                                size_t parent_seq_len;
+                                size_t     u;
+
+                                uint8_t *tmp_p=tmp_buf;
+                                tmp_p += seq_len*dst_base_size;
+                                for(u=0; u<(bg_seq_len-seq_len); u++) {
+                                    UINT32DECODE(tmp_p, parent_seq_len);
+                                    if(parent_seq_len>0) {
+                                        H5F_addr_decode(dst->shared->u.vlen.f, (const uint8_t **)&tmp_p, &(parent_hobjid.addr));
+                                        INT32DECODE(tmp_p, parent_hobjid.idx);
+                                        if(H5HG_remove(dst->shared->u.vlen.f, dxpl_id,&parent_hobjid)<0)
+                                            HGOTO_ERROR(H5E_DATATYPE, H5E_WRITEERROR, FAIL, "Unable to remove heap object");
+                                    }
+                                }
+                            } /* end if */
+                        } /* end if */
+                    } /* end else */
+
+                    /* Advance pointers */
+                    s += s_stride;
+                    d += d_stride;
+                    b += b_stride;
+                } /* end for */
+
+                /* Decrement number of elements left to convert */
+                nelmts-=safe;
+            } /* end while */
+
+            /* Release the temporary datatype IDs used */
+            if (tsrc_id >= 0)
+                H5I_dec_ref(tsrc_id);
+            if (tdst_id >= 0)
+                H5I_dec_ref(tdst_id);
+            break;
+
+        default:    /* Some other command we don't know about yet.*/
+            HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command");
+    }   /* end switch */
+
+done:
+    /* If the conversion buffer doesn't need to be freed, reset its pointer */
+    if(write_to_file && noop_conv)
+        conv_buf=NULL;
+    /* Release the conversion buffer (always allocated, except on errors) */
+    if(conv_buf!=NULL)
+        H5FL_BLK_FREE(vlen_seq,conv_buf);
+    /* Release the background buffer, if we have one */
+    if(tmp_buf!=NULL)
+        H5FL_BLK_FREE(vlen_seq,tmp_buf);
+
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_array
+ *
+ * Purpose:	Converts between array data types in memory and on disk.
+ *		This is a soft conversion function.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Monday, November 6, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_array(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
+	      size_t buf_stride, size_t bkg_stride, void *_buf,
+              void UNUSED *_bkg, hid_t dxpl_id)
+{
+    H5T_path_t	*tpath;		        /* Type conversion path		     */
+    hid_t       tsrc_id = -1, tdst_id = -1;/*temporary type atoms	     */
+    H5T_t	*src = NULL;	        /*source data type		     */
+    H5T_t	*dst = NULL;	        /*destination data type		     */
+    uint8_t	*sp, *dp;	        /*source and dest traversal ptrs     */
+    size_t	src_delta, dst_delta;	/*source & destination stride	     */
+    int	        direction;		/*direction of traversal	     */
+    size_t	elmtno;			/*element number counter	     */
+    int         i;                      /* local index variable */
+    void	*bkg_buf=NULL;     	/*temporary background buffer 	     */
+    size_t	bkg_buf_size=0;	        /*size of background buffer in bytes */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_array, FAIL);
+
+    switch (cdata->command) {
+        case H5T_CONV_INIT:
+            /*
+             * First, determine if this conversion function applies to the
+             * conversion path SRC_ID-->DST_ID.  If not, return failure;
+             * otherwise initialize the `priv' field of `cdata' with
+             * information that remains (almost) constant for this
+             * conversion path.
+             */
+            if (NULL == (src = H5I_object(src_id)) ||
+                    NULL == (dst = H5I_object(dst_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+            assert (H5T_ARRAY==src->shared->type);
+            assert (H5T_ARRAY==dst->shared->type);
+
+            /* Check the number and sizes of the dimensions */
+            if(src->shared->u.array.ndims!=dst->shared->u.array.ndims)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "array datatypes do not have the same number of dimensions");
+            for(i=0; i<src->shared->u.array.ndims; i++)
+                if(src->shared->u.array.dim[i]!=dst->shared->u.array.dim[i])
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "array datatypes do not have the same sizes of dimensions");
+#ifdef LATER
+            for(i=0; i<src->shared->u.array.ndims; i++)
+                if(src->shared->u.array.perm[i]!=dst->shared->u.array.perm[i])
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "array datatypes do not have the same dimension permutations");
+#endif /* LATER */
+
+            /* Array datatypes don't need a background buffer */
+            cdata->need_bkg = H5T_BKG_NO;
+
+            break;
+
+        case H5T_CONV_FREE:
+            /* QAK - Nothing to do currently */
+            break;
+
+        case H5T_CONV_CONV:
+            /*
+             * Conversion.
+             */
+            if (NULL == (src = H5I_object(src_id)) ||
+                    NULL == (dst = H5I_object(dst_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+
+            /*
+             * Do we process the values from beginning to end or vice
+             * versa? Also, how many of the elements have the source and
+             * destination areas overlapping?
+             */
+            if (src->shared->size>=dst->shared->size || buf_stride>0) {
+                sp = dp = (uint8_t*)_buf;
+                direction = 1;
+            } else {
+                sp = (uint8_t*)_buf + (nelmts-1) *
+                     (buf_stride ? buf_stride : src->shared->size);
+                dp = (uint8_t*)_buf + (nelmts-1) *
+                     (buf_stride ? buf_stride : dst->shared->size);
+                direction = -1;
+            }
+
+            /*
+             * Direction & size of buffer traversal.
+             */
+            src_delta = direction * (buf_stride ? buf_stride : src->shared->size);
+            dst_delta = direction * (buf_stride ? buf_stride : dst->shared->size);
+
+            /* Set up conversion path for base elements */
+            if (NULL==(tpath=H5T_path_find(src->shared->parent, dst->shared->parent, NULL, NULL, dxpl_id))) {
+                HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unable to convert between src and dest datatypes");
+            } else if (!H5T_path_noop(tpath)) {
+                if ((tsrc_id = H5I_register(H5I_DATATYPE, H5T_copy(src->shared->parent, H5T_COPY_ALL)))<0 ||
+                        (tdst_id = H5I_register(H5I_DATATYPE, H5T_copy(dst->shared->parent, H5T_COPY_ALL)))<0)
+                    HGOTO_ERROR(H5E_DATASET, H5E_CANTREGISTER, FAIL, "unable to register types for conversion");
+            }
+
+            /* Check if we need a background buffer for this conversion */
+            if(tpath->cdata.need_bkg) {
+                /* Allocate background buffer */
+                bkg_buf_size=src->shared->u.array.nelem*MAX(src->shared->size,dst->shared->size);
+                if ((bkg_buf=H5FL_BLK_CALLOC(array_seq,bkg_buf_size))==NULL)
+                    HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for type conversion");
+            } /* end if */
+
+            /* Perform the actual conversion */
+            for (elmtno=0; elmtno<nelmts; elmtno++) {
+                /* Copy the source array into the correct location for the destination */
+                HDmemmove(dp, sp, src->shared->size);
+
+                /* Convert array */
+                if (H5T_convert(tpath, tsrc_id, tdst_id, src->shared->u.array.nelem, 0, bkg_stride, dp, bkg_buf, dxpl_id)<0)
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "datatype conversion failed");
+
+                /* Advance the source & destination pointers */
+                sp += src_delta;
+                dp += dst_delta;
+            }
+
+            /* Release the background buffer, if we have one */
+            if(bkg_buf!=NULL)
+                H5FL_BLK_FREE(array_seq,bkg_buf);
+
+            /* Release the temporary datatype IDs used */
+            if (tsrc_id >= 0)
+                H5I_dec_ref(tsrc_id);
+            if (tdst_id >= 0)
+                H5I_dec_ref(tdst_id);
+            break;
+
+        default:    /* Some other command we don't know about yet.*/
+            HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command");
+    }   /* end switch */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5T_conv_array() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_i_i
+ *
+ * Purpose:	Convert one integer type to another.  This is the catch-all
+ *		function for integer conversions and is probably not
+ *		particularly fast.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, June 10, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 7 Jul 1998
+ *		Added overflow handling.
+ *
+ *		Robb Matzke, 1999-06-16
+ *		Added support for non-zero strides. If BUF_STRIDE is non-zero
+ *		then convert one value at each memory location advancing
+ *		BUF_STRIDE bytes each time; otherwise assume both source and
+ *		destination values are packed.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_i_i (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
+	      size_t buf_stride, size_t UNUSED bkg_stride, void *buf,
+              void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    H5T_t	*src = NULL;		/*source data type		*/
+    H5T_t	*dst = NULL;		/*destination data type		*/
+    int		direction;		/*direction of traversal	*/
+    size_t	elmtno;			/*element number		*/
+    size_t	half_size;		/*half the type size		*/
+    size_t	olap;			/*num overlapping elements	*/
+    uint8_t	*s, *sp, *d, *dp;	/*source and dest traversal ptrs*/
+    uint8_t	dbuf[64];		/*temp destination buffer	*/
+    size_t	first;
+    ssize_t	sfirst;			/*a signed version of `first'	*/
+    size_t	i;                      /*Local index variables         */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_i_i, FAIL);
+
+    switch (cdata->command) {
+        case H5T_CONV_INIT:
+            if (NULL==(src=H5I_object(src_id)) ||
+                    NULL==(dst=H5I_object(dst_id)))
+                HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+            if (H5T_ORDER_LE!=src->shared->u.atomic.order &&
+                    H5T_ORDER_BE!=src->shared->u.atomic.order)
+                HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order");
+            if (H5T_ORDER_LE!=dst->shared->u.atomic.order &&
+                    H5T_ORDER_BE!=dst->shared->u.atomic.order)
+                HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order");
+            if (dst->shared->size>sizeof dbuf)
+                HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "destination size is too large");
+            cdata->need_bkg = H5T_BKG_NO;
+            break;
+
+        case H5T_CONV_FREE:
+            break;
+
+        case H5T_CONV_CONV:
+            /* Get the data types */
+            if (NULL==(src=H5I_object(src_id)) ||
+                    NULL==(dst=H5I_object(dst_id)))
+                HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+
+            /*
+             * Do we process the values from beginning to end or vice versa? Also,
+             * how many of the elements have the source and destination areas
+             * overlapping?
+             */
+            if (src->shared->size==dst->shared->size || buf_stride) {
+                sp = dp = (uint8_t*)buf;
+                direction = 1;
+                olap = nelmts;
+            } else if (src->shared->size>=dst->shared->size) {
+                double olap_d = HDceil((double)(dst->shared->size)/
+                                       (double)(src->shared->size-dst->shared->size));
+
+                olap = (size_t)olap_d;
+                sp = dp = (uint8_t*)buf;
+                direction = 1;
+            } else {
+                double olap_d = HDceil((double)(src->shared->size)/
+                                       (double)(dst->shared->size-src->shared->size));
+                olap = (size_t)olap_d;
+                sp = (uint8_t*)buf + (nelmts-1) * src->shared->size;
+                dp = (uint8_t*)buf + (nelmts-1) * dst->shared->size;
+                direction = -1;
+            }
+
+            /* The conversion loop */
+            for (elmtno=0; elmtno<nelmts; elmtno++) {
+
+                /*
+                 * If the source and destination buffers overlap then use a
+                 * temporary buffer for the destination.
+                 */
+                if (direction>0) {
+                    s = sp;
+                    d = elmtno<olap ? dbuf : dp;
+                } else {
+                    s = sp;
+                    d = elmtno+olap >= nelmts ? dbuf : dp;
+                }
+#ifndef NDEBUG
+                /* I don't quite trust the overlap calculations yet --rpm */
+                if (d==dbuf) {
+                    assert ((dp>=sp && dp<sp+src->shared->size) || (sp>=dp && sp<dp+dst->shared->size));
+                } else {
+                    assert ((dp<sp && dp+dst->shared->size<=sp) || (sp<dp && sp+src->shared->size<=dp));
+                }
+#endif
+
+                /*
+                 * Put the data in little endian order so our loops aren't so
+                 * complicated.  We'll do all the conversion stuff assuming
+                 * little endian and then we'll fix the order at the end.
+                 */
+                if (H5T_ORDER_BE==src->shared->u.atomic.order) {
+                    half_size = src->shared->size/2;
+                    for (i=0; i<half_size; i++) {
+                        uint8_t tmp = s[src->shared->size-(i+1)];
+                        s[src->shared->size-(i+1)] = s[i];
+                        s[i] = tmp;
+                    }
+                }
+
+                /*
+                 * What is the bit number for the msb bit of S which is set? The
+                 * bit number is relative to the significant part of the number.
+                 */
+                sfirst = H5T_bit_find (s, src->shared->u.atomic.offset, src->shared->u.atomic.prec,
+                                       H5T_BIT_MSB, TRUE);
+                first = (size_t)sfirst;
+
+                if (sfirst<0) {
+                    /*
+                     * The source has no bits set and must therefore be zero.
+                     * Set the destination to zero.
+                     */
+                    H5T_bit_set (d, dst->shared->u.atomic.offset, dst->shared->u.atomic.prec, FALSE);
+
+                } else if (H5T_SGN_NONE==src->shared->u.atomic.u.i.sign &&
+                           H5T_SGN_NONE==dst->shared->u.atomic.u.i.sign) {
+                    /*
+                     * Source and destination are both unsigned, but if the
+                     * source has more precision bits than the destination then
+                     * it's possible to overflow.  When overflow occurs the
+                     * destination will be set to the maximum possible value.
+                     */
+                    if (src->shared->u.atomic.prec <= dst->shared->u.atomic.prec) {
+                        H5T_bit_copy (d, dst->shared->u.atomic.offset, s, src->shared->u.atomic.offset,
+                              src->shared->u.atomic.prec);
+                        H5T_bit_set (d, dst->shared->u.atomic.offset+src->shared->u.atomic.prec,
+                             dst->shared->u.atomic.prec-src->shared->u.atomic.prec, FALSE);
+                    } else if (first>=dst->shared->u.atomic.prec) {
+                        /*overflow*/
+                        if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, s, d)<0) {
+                            H5T_bit_set (d, dst->shared->u.atomic.offset, dst->shared->u.atomic.prec, TRUE);
+                        }
+                    } else {
+                        H5T_bit_copy (d, dst->shared->u.atomic.offset, s, src->shared->u.atomic.offset,
+                              dst->shared->u.atomic.prec);
+                    }
+
+                } else if (H5T_SGN_2==src->shared->u.atomic.u.i.sign &&
+                           H5T_SGN_NONE==dst->shared->u.atomic.u.i.sign) {
+                    /*
+                     * If the source is signed and the destination isn't then we
+                     * can have overflow if the source contains more bits than
+                     * the destination (destination is set to the maximum
+                     * possible value) or overflow if the source is negative
+                     * (destination is set to zero).
+                     */
+                    if (first+1 == src->shared->u.atomic.prec) {
+                        /*overflow*/
+                        if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, s, d)<0) {
+                            H5T_bit_set (d, dst->shared->u.atomic.offset, dst->shared->u.atomic.prec, FALSE);
+                        }
+                    } else if (src->shared->u.atomic.prec < dst->shared->u.atomic.prec) {
+                        H5T_bit_copy (d, dst->shared->u.atomic.offset, s, src->shared->u.atomic.offset,
+                              src->shared->u.atomic.prec-1);
+                        H5T_bit_set (d, dst->shared->u.atomic.offset+src->shared->u.atomic.prec-1,
+                             (dst->shared->u.atomic.prec-src->shared->u.atomic.prec)+1, FALSE);
+                    } else if (first>=dst->shared->u.atomic.prec) {
+                        /*overflow*/
+                        if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, s, d)<0) {
+                            H5T_bit_set (d, dst->shared->u.atomic.offset, dst->shared->u.atomic.prec, TRUE);
+                        }
+                    } else {
+                        H5T_bit_copy (d, dst->shared->u.atomic.offset, s, src->shared->u.atomic.offset,
+                              dst->shared->u.atomic.prec);
+                    }
+
+                } else if (H5T_SGN_NONE==src->shared->u.atomic.u.i.sign &&
+                           H5T_SGN_2==dst->shared->u.atomic.u.i.sign) {
+                    /*
+                     * If the source is not signed but the destination is then
+                     * overflow can occur in which case the destination is set to
+                     * the largest possible value (all bits set except the msb).
+                     */
+                    if (first+1 >= dst->shared->u.atomic.prec) {
+                        /*overflow*/
+                        if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, s, d)<0) {
+                            H5T_bit_set (d, dst->shared->u.atomic.offset, dst->shared->u.atomic.prec-1, TRUE);
+                            H5T_bit_set (d, (dst->shared->u.atomic.offset + dst->shared->u.atomic.prec-1), 1, FALSE);
+                        }
+                    } else if (src->shared->u.atomic.prec<dst->shared->u.atomic.prec) {
+                        H5T_bit_copy (d, dst->shared->u.atomic.offset, s, src->shared->u.atomic.offset,
+                              src->shared->u.atomic.prec);
+                        H5T_bit_set (d, dst->shared->u.atomic.offset+src->shared->u.atomic.prec,
+                             dst->shared->u.atomic.prec-src->shared->u.atomic.prec, FALSE);
+                    } else {
+                        H5T_bit_copy (d, dst->shared->u.atomic.offset, s, src->shared->u.atomic.offset,
+                              dst->shared->u.atomic.prec);
+                    }
+                } else if (first+1 == src->shared->u.atomic.prec) {
+                    /*
+                     * Both the source and the destination are signed and the
+                     * source value is negative.  We could experience overflow
+                     * if the destination isn't wide enough in which case the
+                     * destination is set to a negative number with the largest
+                     * possible magnitude.
+                     */
+                    ssize_t sfz = H5T_bit_find (s, src->shared->u.atomic.offset,
+                                    src->shared->u.atomic.prec-1, H5T_BIT_MSB, FALSE);
+                    size_t fz = (size_t)sfz;
+
+                    if (sfz>=0 && fz+1>=dst->shared->u.atomic.prec) {
+                        /*overflow*/
+                        if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, s, d)<0) {
+                            H5T_bit_set (d, dst->shared->u.atomic.offset, dst->shared->u.atomic.prec-1, FALSE);
+                            H5T_bit_set (d, (dst->shared->u.atomic.offset + dst->shared->u.atomic.prec-1), 1, TRUE);
+                        }
+                    } else if (src->shared->u.atomic.prec<dst->shared->u.atomic.prec) {
+                        H5T_bit_copy (d, dst->shared->u.atomic.offset, s, src->shared->u.atomic.offset, src->shared->u.atomic.prec);
+                        H5T_bit_set (d, dst->shared->u.atomic.offset+src->shared->u.atomic.prec, dst->shared->u.atomic.prec-src->shared->u.atomic.prec, TRUE);
+                    } else {
+                        H5T_bit_copy (d, dst->shared->u.atomic.offset, s, src->shared->u.atomic.offset, dst->shared->u.atomic.prec);
+                    }
+
+                } else {
+                    /*
+                     * Source and destination are both signed but the source
+                     * value is positive.  We could have an overflow in which
+                     * case the destination is set to the largest possible
+                     * positive value.
+                     */
+                    if (first+1>=dst->shared->u.atomic.prec) {
+                        /*overflow*/
+                        if (!H5T_overflow_g || (H5T_overflow_g)(src_id, dst_id, s, d)<0) {
+                            H5T_bit_set (d, dst->shared->u.atomic.offset, dst->shared->u.atomic.prec-1, TRUE);
+                            H5T_bit_set (d, (dst->shared->u.atomic.offset + dst->shared->u.atomic.prec-1), 1, FALSE);
+                        }
+                    } else if (src->shared->u.atomic.prec<dst->shared->u.atomic.prec) {
+                        H5T_bit_copy (d, dst->shared->u.atomic.offset, s, src->shared->u.atomic.offset,
+                              src->shared->u.atomic.prec);
+                        H5T_bit_set (d, dst->shared->u.atomic.offset+src->shared->u.atomic.prec,
+                             dst->shared->u.atomic.prec-src->shared->u.atomic.prec, FALSE);
+                    } else {
+                        H5T_bit_copy (d, dst->shared->u.atomic.offset, s, src->shared->u.atomic.offset,
+                              dst->shared->u.atomic.prec);
+                    }
+                }
+
+                /*
+                 * Set padding areas in destination.
+                 */
+                if (dst->shared->u.atomic.offset>0) {
+                    assert (H5T_PAD_ZERO==dst->shared->u.atomic.lsb_pad || H5T_PAD_ONE==dst->shared->u.atomic.lsb_pad);
+                    H5T_bit_set (d, 0, dst->shared->u.atomic.offset, (hbool_t)(H5T_PAD_ONE==dst->shared->u.atomic.lsb_pad));
+                }
+                if (dst->shared->u.atomic.offset+dst->shared->u.atomic.prec!=8*dst->shared->size) {
+                    assert (H5T_PAD_ZERO==dst->shared->u.atomic.msb_pad || H5T_PAD_ONE==dst->shared->u.atomic.msb_pad);
+                    H5T_bit_set (d, dst->shared->u.atomic.offset+dst->shared->u.atomic.prec,
+                                 8*dst->shared->size - (dst->shared->u.atomic.offset+ dst->shared->u.atomic.prec),
+                                 (hbool_t)(H5T_PAD_ONE==dst->shared->u.atomic.msb_pad));
+                }
+
+                /*
+                 * Put the destination in the correct byte order.  See note at
+                 * beginning of loop.
+                 */
+                if (H5T_ORDER_BE==dst->shared->u.atomic.order) {
+                    half_size = dst->shared->size/2;
+                    for (i=0; i<half_size; i++) {
+                        uint8_t tmp = d[dst->shared->size-(i+1)];
+                        d[dst->shared->size-(i+1)] = d[i];
+                        d[i] = tmp;
+                    }
+                }
+
+                /*
+                 * If we had used a temporary buffer for the destination then we
+                 * should copy the value to the true destination buffer.
+                 */
+                if (d==dbuf)
+                    HDmemcpy (dp, d, dst->shared->size);
+                if (buf_stride) {
+                    sp += direction * buf_stride;
+                    dp += direction * buf_stride;
+                } else {
+                    sp += direction * src->shared->size;
+                    dp += direction * dst->shared->size;
+                }
+            }
+
+            break;
+
+        default:
+            HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_f_f
+ *
+ * Purpose:	Convert one floating point type to another.  This is a catch
+ *		all for floating point conversions and is probably not
+ *		particularly fast!
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, June 23, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 7 Jul 1998
+ *		Added overflow handling.
+ *
+ *		Robb Matzke, 1999-06-16
+ *		Added support for non-zero strides. If BUF_STRIDE is non-zero
+ *		then convert one value at each memory location advancing
+ *		BUF_STRIDE bytes each time; otherwise assume both source and
+ *		destination values are packed.
+ *
+ *              Robb Matzke, 2001-02-02
+ *              Oops, forgot to increment the exponent when rounding the
+ *              significand resulted in a carry. Thanks to Guillaume Colin
+ *              de Verdiere for finding this one!
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_f_f (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
+    size_t buf_stride, size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+    hid_t UNUSED dxpl_id)
+{
+    /* Traversal-related variables */
+    H5T_t	*src_p;			/*source data type		*/
+    H5T_t	*dst_p;			/*destination data type		*/
+    H5T_atomic_t src;			/*atomic source info		*/
+    H5T_atomic_t dst;			/*atomic destination info	*/
+    int	direction;		        /*forward or backward traversal	*/
+    hbool_t     denormalized=FALSE;     /*is either source or destination denormalized?*/
+    size_t	elmtno;			/*element number		*/
+    size_t	half_size;		/*half the type size		*/
+    size_t	olap;			/*num overlapping elements	*/
+    ssize_t	bitno=-1;		/*bit number			*/
+    uint8_t	*s, *sp, *d, *dp;	/*source and dest traversal ptrs*/
+    uint8_t	dbuf[64];		/*temp destination buffer	*/
+
+    /* Conversion-related variables */
+    hssize_t	expo;			/*exponent			*/
+    hssize_t	expo_max;		/*maximum possible dst exponent	*/
+    size_t	msize=0;		/*useful size of mantissa in src*/
+    size_t	mpos;			/*offset to useful mant is src	*/
+    size_t	mrsh;			/*amount to right shift mantissa*/
+    hbool_t	carry=0;		/*carry after rounding mantissa	*/
+    size_t	i;			/*miscellaneous counters	*/
+    size_t	implied;		/*destination implied bits	*/
+    herr_t      ret_value=SUCCEED;      /*return value                 */
+
+    FUNC_ENTER_NOAPI(H5T_conv_f_f, FAIL);
+
+    switch (cdata->command) {
+        case H5T_CONV_INIT:
+            if (NULL==(src_p=H5I_object(src_id)) ||
+                    NULL==(dst_p=H5I_object(dst_id)))
+                HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+            src = src_p->shared->u.atomic;
+            dst = dst_p->shared->u.atomic;
+            if (H5T_ORDER_LE!=src.order && H5T_ORDER_BE!=src.order)
+                HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order");
+            if (H5T_ORDER_LE!=dst.order && H5T_ORDER_BE!=dst.order)
+                HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported byte order");
+            if (dst_p->shared->size>sizeof(dbuf))
+                HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "destination size is too large");
+            if (8*sizeof(expo)-1<src.u.f.esize || 8*sizeof(expo)-1<dst.u.f.esize)
+                HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "exponent field is too large");
+            cdata->need_bkg = H5T_BKG_NO;
+            break;
+
+        case H5T_CONV_FREE:
+            break;
+
+        case H5T_CONV_CONV:
+            /* Get the data types */
+            if (NULL==(src_p=H5I_object(src_id)) ||
+                    NULL==(dst_p=H5I_object(dst_id)))
+                HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+            src = src_p->shared->u.atomic;
+            dst = dst_p->shared->u.atomic;
+            expo_max = ((hssize_t)1 << dst.u.f.esize) - 1;
+
+            /*
+             * Do we process the values from beginning to end or vice versa? Also,
+             * how many of the elements have the source and destination areas
+             * overlapping?
+             */
+            if (src_p->shared->size==dst_p->shared->size || buf_stride) {
+                sp = dp = (uint8_t*)buf;
+                direction = 1;
+                olap = nelmts;
+            } else if (src_p->shared->size>=dst_p->shared->size) {
+                double olap_d = HDceil((double)(dst_p->shared->size)/
+                                       (double)(src_p->shared->size-dst_p->shared->size));
+                olap = (size_t)olap_d;
+                sp = dp = (uint8_t*)buf;
+                direction = 1;
+            } else {
+                double olap_d = HDceil((double)(src_p->shared->size)/
+                                       (double)(dst_p->shared->size-src_p->shared->size));
+                olap = (size_t)olap_d;
+                sp = (uint8_t*)buf + (nelmts-1) * src_p->shared->size;
+                dp = (uint8_t*)buf + (nelmts-1) * dst_p->shared->size;
+                direction = -1;
+            }
+
+            /* The conversion loop */
+            for (elmtno=0; elmtno<nelmts; elmtno++) {
+                /*
+                 * If the source and destination buffers overlap then use a
+                 * temporary buffer for the destination.
+                 */
+                if (direction>0) {
+                    s = sp;
+                    d = elmtno<olap ? dbuf : dp;
+                } else {
+                    s = sp;
+                    d = elmtno+olap >= nelmts ? dbuf : dp;
+                }
+#ifndef NDEBUG
+                /* I don't quite trust the overlap calculations yet --rpm */
+                if (d==dbuf) {
+                    assert ((dp>=sp && dp<sp+src_p->shared->size) ||
+                            (sp>=dp && sp<dp+dst_p->shared->size));
+                } else {
+                    assert ((dp<sp && dp+dst_p->shared->size<=sp) ||
+                            (sp<dp && sp+src_p->shared->size<=dp));
+                }
+#endif
+
+                /*
+                 * Put the data in little endian order so our loops aren't so
+                 * complicated.  We'll do all the conversion stuff assuming
+                 * little endian and then we'll fix the order at the end.
+                 */
+                if (H5T_ORDER_BE==src.order) {
+                    half_size = src_p->shared->size/2;
+                    for (i=0; i<half_size; i++) {
+                        uint8_t tmp = s[src_p->shared->size-(i+1)];
+                        s[src_p->shared->size-(i+1)] = s[i];
+                        s[i] = tmp;
+                    }
+                }
+
+                /*
+                 * Check for special cases: +0, -0, +Inf, -Inf, NaN
+                 */
+                if (H5T_bit_find (s, src.u.f.mpos, src.u.f.msize,
+                                  H5T_BIT_LSB, TRUE)<0) {
+                    if (H5T_bit_find (s, src.u.f.epos, src.u.f.esize,
+                                      H5T_BIT_LSB, TRUE)<0) {
+                        /* +0 or -0 */
+                        H5T_bit_copy (d, dst.u.f.sign, s, src.u.f.sign, 1);
+                        H5T_bit_set (d, dst.u.f.epos, dst.u.f.esize, FALSE);
+                        H5T_bit_set (d, dst.u.f.mpos, dst.u.f.msize, FALSE);
+                        goto padding;
+                    } else if (H5T_bit_find (s, src.u.f.epos, src.u.f.esize,
+                                             H5T_BIT_LSB, FALSE)<0) {
+                        /* +Inf or -Inf */
+                        H5T_bit_copy (d, dst.u.f.sign, s, src.u.f.sign, 1);
+                        H5T_bit_set (d, dst.u.f.epos, dst.u.f.esize, TRUE);
+                        H5T_bit_set (d, dst.u.f.mpos, dst.u.f.msize, FALSE);
+                        /*If the destination no implied mantissa bit, we'll need to set
+                         *the 1st bit of mantissa to 1.  The Intel-Linux long double is
+                         *this case.*/
+                        if (H5T_NORM_NONE==dst.u.f.norm)
+                            H5T_bit_set (d, dst.u.f.mpos+dst.u.f.msize-1, 1, TRUE);
+                        goto padding;
+                    }
+                } else if (H5T_NORM_NONE==src.u.f.norm && H5T_bit_find (s, src.u.f.mpos, src.u.f.msize-1,
+                                  H5T_BIT_LSB, TRUE)<0 && H5T_bit_find (s, src.u.f.epos, src.u.f.esize,
+                                  H5T_BIT_LSB, FALSE)<0) {
+                    /*This is a special case for the source of no implied mantissa bit.
+                     *If the exponent bits are all 1s and only the 1st bit of mantissa
+                     *is set to 1.  It's infinity. The Intel-Linux "long double" is this case.*/
+                    /* +Inf or -Inf */
+                    H5T_bit_copy (d, dst.u.f.sign, s, src.u.f.sign, 1);
+                    H5T_bit_set (d, dst.u.f.epos, dst.u.f.esize, TRUE);
+                    H5T_bit_set (d, dst.u.f.mpos, dst.u.f.msize, FALSE);
+                    /*If the destination no implied mantissa bit, we'll need to set
+                     *the 1st bit of mantissa to 1.*/
+                    if (H5T_NORM_NONE==dst.u.f.norm)
+                        H5T_bit_set (d, dst.u.f.mpos+dst.u.f.msize-1, 1, TRUE);
+                    goto padding;
+                } else if (H5T_bit_find (s, src.u.f.epos, src.u.f.esize,
+                                         H5T_BIT_LSB, FALSE)<0) {
+                    /*
+                     * NaN. There are many NaN values, so we just set all bits of
+                     * the significand.
+                     */
+                    H5T_bit_copy (d, dst.u.f.sign, s, src.u.f.sign, 1);
+                    H5T_bit_set (d, dst.u.f.epos, dst.u.f.esize, TRUE);
+                    H5T_bit_set(d, dst.u.f.mpos, dst.u.f.msize, TRUE);
+                    goto padding;
+                }
+
+                /*
+                 * Get the exponent as an unsigned quantity from the section of
+                 * the source bit field where it's located.  Don't worry about
+                 * the exponent bias yet.
+                 */
+                expo = H5T_bit_get_d(s, src.u.f.epos, src.u.f.esize);
+
+                if(expo==0)
+                    denormalized=TRUE;
+
+                /*
+                 * Set markers for the source mantissa, excluding the leading `1'
+                 * (might be implied).
+                 */
+                implied = 1;
+                mpos = src.u.f.mpos;
+                mrsh = 0;
+                if (0==expo || H5T_NORM_NONE==src.u.f.norm) {
+                    if ((bitno=H5T_bit_find(s, src.u.f.mpos, src.u.f.msize,
+                                            H5T_BIT_MSB, TRUE))>0) {
+                        msize = bitno;
+                    } else if (0==bitno) {
+                        msize = 1;
+                        H5T_bit_set(s, src.u.f.mpos, 1, FALSE);
+                    }
+                } else if (H5T_NORM_IMPLIED==src.u.f.norm) {
+                    msize = src.u.f.msize;
+                } else {
+                    assert("normalization method not implemented yet" && 0);
+                    HDabort();
+                }
+
+                /*
+                 * The sign for the destination is the same as the sign for the
+                 * source in all cases.
+                 */
+                H5T_bit_copy (d, dst.u.f.sign, s, src.u.f.sign, 1);
+
+                /*
+                 * Calculate the true source exponent by adjusting according to
+                 * the source exponent bias.
+                 */
+                if (0==expo || H5T_NORM_NONE==src.u.f.norm) {
+                    assert(bitno>=0);
+                    expo -= (src.u.f.ebias-1) + (src.u.f.msize-bitno);
+                } else if (H5T_NORM_IMPLIED==src.u.f.norm) {
+                    expo -= src.u.f.ebias;
+                } else {
+                    assert("normalization method not implemented yet" && 0);
+                    HDabort();
+                }
+
+                /*
+                 * If the destination is not normalized then right shift the
+                 * mantissa by one.
+                 */
+                if (H5T_NORM_NONE==dst.u.f.norm)
+                    mrsh++;
+
+                /*
+                 * Calculate the destination exponent by adding the destination
+                 * bias and clipping by the minimum and maximum possible
+                 * destination exponent values.
+                 */
+                expo += dst.u.f.ebias;
+                if (expo < -(hssize_t)(dst.u.f.msize)) {
+                    /* The exponent is way too small.  Result is zero. */
+                    expo = 0;
+                    H5T_bit_set(d, dst.u.f.mpos, dst.u.f.msize, FALSE);
+                    msize = 0;
+                } else if (expo<=0) {
+                    /*
+                     * The exponent is too small to fit in the exponent field,
+                     * but by shifting the mantissa to the right we can
+                     * accomodate that value.  The mantissa of course is no
+                     * longer normalized.
+                     */
+                    H5_ASSIGN_OVERFLOW(mrsh,(mrsh+1-expo),hssize_t,size_t);
+                    expo = 0;
+                    denormalized=TRUE;
+                } else if (expo>=expo_max) {
+                    /*
+                     * The exponent is too large to fit in the available region
+                     * or it results in the maximum possible value.	 Use positive
+                     * or negative infinity instead unless the application
+                     * specifies something else.  Before calling the overflow
+                     * handler make sure the source buffer we hand it is in the
+                     * original byte order.
+                     */
+                    if (H5T_overflow_g) {
+                        uint8_t over_src[256];
+                        assert(src_p->shared->size<=sizeof over_src);
+                        if (H5T_ORDER_BE==src.order) {
+                            for (i=0; i<src_p->shared->size; i++) {
+                                over_src[src_p->shared->size-(i+1)] = s[i];
+                            }
+                        } else {
+                            for (i=0; i<src_p->shared->size; i++) {
+                                over_src[i] = s[i];
+                            }
+                        }
+                        if ((H5T_overflow_g)(src_id, dst_id, over_src, d)>=0) {
+                            goto next;
+                        }
+                    }
+                    expo = expo_max;
+                    H5T_bit_set(d, dst.u.f.mpos, dst.u.f.msize, FALSE);
+                    msize = 0;
+                }
+
+                /*
+                 * If the destination mantissa is smaller than the source
+                 * mantissa then round the source mantissa.	 Rounding may cause a
+                 * carry in which case the exponent has to be re-evaluated for
+                 * overflow.  That is, if `carry' is clear then the implied
+                 * mantissa bit is `1', else it is `10' binary.
+                 */
+                if (msize>0 && mrsh<=dst.u.f.msize && mrsh+msize>dst.u.f.msize) {
+                    bitno = (ssize_t)(mrsh+msize - dst.u.f.msize);
+                    assert(bitno>=0 && (size_t)bitno<=msize);
+                    /*If the 1st bit being cut off is set and source isn't denormalized.*/
+                    if(H5T_bit_get_d(s, mpos+bitno-1, 1) && !denormalized) {
+                        /*Don't do rounding if exponent is 111...110 and mantissa is 111...11.
+                         *To do rounding and increment exponent in this case will create an infinity value.*/
+                        if((H5T_bit_find(s, mpos+bitno, msize-bitno, H5T_BIT_LSB, FALSE)>=0 || expo<expo_max-1)) {
+                            carry = H5T_bit_inc(s, mpos+bitno-1, 1+msize-bitno);
+                            if (carry)
+                                implied = 2;
+                        }
+                    } else if(H5T_bit_get_d(s, mpos+bitno-1, 1) && denormalized)
+                        /*For either source or destination, denormalized value doesn't increment carry.*/
+                        H5T_bit_inc(s, mpos+bitno-1, 1+msize-bitno);
+                }
+                else
+                    carry=0;
+
+                /*
+                 * Write the mantissa to the destination
+                 */
+                if (mrsh>dst.u.f.msize+1) {
+                    H5T_bit_set(d, dst.u.f.mpos, dst.u.f.msize, FALSE);
+                } else if (mrsh==dst.u.f.msize+1) {
+                    H5T_bit_set(d, dst.u.f.mpos+1, dst.u.f.msize-1, FALSE);
+                    H5T_bit_set(d, dst.u.f.mpos, 1, TRUE);
+                } else if (mrsh==dst.u.f.msize) {
+                    H5T_bit_set(d, dst.u.f.mpos, dst.u.f.msize, FALSE);
+                    H5T_bit_set_d(d, dst.u.f.mpos, MIN(2, dst.u.f.msize), (hsize_t)implied);
+                } else {
+                    if (mrsh>0) {
+                        H5T_bit_set(d, dst.u.f.mpos+dst.u.f.msize-mrsh, mrsh,
+                                    FALSE);
+                        H5T_bit_set_d(d, dst.u.f.mpos+dst.u.f.msize-mrsh, 2,
+                                      (hsize_t)implied);
+                    }
+                    if (mrsh+msize>=dst.u.f.msize) {
+                        H5T_bit_copy(d, dst.u.f.mpos,
+                                     s, (mpos+msize+mrsh-dst.u.f.msize),
+                                     dst.u.f.msize-mrsh);
+                    } else {
+                        H5T_bit_copy(d, dst.u.f.mpos+dst.u.f.msize-(mrsh+msize),
+                                     s, mpos, msize);
+                        H5T_bit_set(d, dst.u.f.mpos, dst.u.f.msize-(mrsh+msize),
+                                    FALSE);
+                    }
+                }
+
+                /* Write the exponent */
+                if (carry) {
+                    expo++;
+                    if (expo>=expo_max) {
+                        /*
+                         * The exponent is too large to fit in the available
+                         * region or it results in the maximum possible value.
+                         * Use positive or negative infinity instead unless the
+                         * application specifies something else.  Before
+                         * calling the overflow handler make sure the source
+                         * buffer we hand it is in the original byte order.
+                         */
+                        if (H5T_overflow_g) {
+                            uint8_t over_src[256];
+                            assert(src_p->shared->size<=sizeof over_src);
+                            if (H5T_ORDER_BE==src.order) {
+                                for (i=0; i<src_p->shared->size; i++)
+                                    over_src[src_p->shared->size-(i+1)] = s[i];
+                            } else {
+                                for (i=0; i<src_p->shared->size; i++)
+                                    over_src[i] = s[i];
+                            }
+                            if ((H5T_overflow_g)(src_id, dst_id, over_src, d)>=0)
+                                goto next;
+                        }
+                        expo = expo_max;
+                        H5T_bit_set(d, dst.u.f.mpos, dst.u.f.msize, FALSE);
+                    }
+                }
+                /*reset CARRY*/
+                carry = 0;
+
+                H5_CHECK_OVERFLOW(expo,hssize_t,hsize_t);
+                H5T_bit_set_d(d, dst.u.f.epos, dst.u.f.esize, (hsize_t)expo);
+
+            padding:
+                /*
+                 * Set external padding areas
+                 */
+                if (dst.offset>0) {
+                    assert (H5T_PAD_ZERO==dst.lsb_pad || H5T_PAD_ONE==dst.lsb_pad);
+                    H5T_bit_set (d, 0, dst.offset, (hbool_t)(H5T_PAD_ONE==dst.lsb_pad));
+                }
+                if (dst.offset+dst.prec!=8*dst_p->shared->size) {
+                    assert (H5T_PAD_ZERO==dst.msb_pad || H5T_PAD_ONE==dst.msb_pad);
+                    H5T_bit_set (d, dst.offset+dst.prec, 8*dst_p->shared->size - (dst.offset+dst.prec),
+                         (hbool_t)(H5T_PAD_ONE==dst.msb_pad));
+                }
+
+                /*
+                 * Put the destination in the correct byte order.  See note at
+                 * beginning of loop.
+                 */
+                if (H5T_ORDER_BE==dst.order) {
+                    half_size = dst_p->shared->size/2;
+                    for (i=0; i<half_size; i++) {
+                        uint8_t tmp = d[dst_p->shared->size-(i+1)];
+                        d[dst_p->shared->size-(i+1)] = d[i];
+                        d[i] = tmp;
+                    }
+                }
+
+                /*
+                 * If we had used a temporary buffer for the destination then we
+                 * should copy the value to the true destination buffer.
+                 */
+            next:
+                if (d==dbuf)
+                    HDmemcpy (dp, d, dst_p->shared->size);
+                if (buf_stride) {
+                    sp += direction * buf_stride;
+                    dp += direction * buf_stride;
+                } else {
+                    sp += direction * src_p->shared->size;
+                    dp += direction * dst_p->shared->size;
+                }
+            }
+
+            break;
+
+        default:
+            HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_s_s
+ *
+ * Purpose:	Convert one fixed-length string type to another.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, August	7, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-06-16
+ *		Added support for non-zero strides. If BUF_STRIDE is non-zero
+ *		then convert one value at each memory location advancing
+ *		BUF_STRIDE bytes each time; otherwise assume both source and
+ *		destination values are packed.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_s_s (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
+	      size_t buf_stride, size_t UNUSED bkg_stride, void *buf,
+              void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    H5T_t	*src=NULL;		/*source data type		*/
+    H5T_t	*dst=NULL;		/*destination data type		*/
+    int	direction;		/*direction of traversal	*/
+    size_t	elmtno;			/*element number		*/
+    size_t	olap;			/*num overlapping elements	*/
+    size_t	nchars=0;		/*number of characters copied	*/
+    uint8_t	*s, *sp, *d, *dp;	/*src and dst traversal pointers*/
+    uint8_t	*dbuf=NULL;		/*temp buf for overlap convers.	*/
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_s_s, FAIL);
+
+    switch (cdata->command) {
+        case H5T_CONV_INIT:
+            if (NULL==(src=H5I_object(src_id)) ||
+                    NULL==(dst=H5I_object(dst_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+            if (8*src->shared->size != src->shared->u.atomic.prec || 8*dst->shared->size != dst->shared->u.atomic.prec)
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bad precision");
+            if (0 != src->shared->u.atomic.offset || 0 != dst->shared->u.atomic.offset)
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bad offset");
+            if (H5T_CSET_ASCII != src->shared->u.atomic.u.s.cset || H5T_CSET_ASCII != dst->shared->u.atomic.u.s.cset)
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bad character set");
+            if (src->shared->u.atomic.u.s.pad<0 || src->shared->u.atomic.u.s.pad>=H5T_NPAD ||
+                    dst->shared->u.atomic.u.s.pad<0 || dst->shared->u.atomic.u.s.pad>=H5T_NPAD)
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "bad character padding");
+            cdata->need_bkg = H5T_BKG_NO;
+            break;
+
+        case H5T_CONV_FREE:
+            break;
+
+        case H5T_CONV_CONV:
+            /* Get the data types */
+            if (NULL==(src=H5I_object(src_id)) ||
+                    NULL==(dst=H5I_object(dst_id)))
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+
+            /*
+             * Do we process the values from beginning to end or vice versa? Also,
+             * how many of the elements have the source and destination areas
+             * overlapping?
+             */
+            if (src->shared->size==dst->shared->size || buf_stride) {
+                /*
+                 * When the source and destination are the same size we can do
+                 * all the conversions in place.
+                 */
+                sp = dp = (uint8_t*)buf;
+                direction = 1;
+                olap = 0;
+            } else if (src->shared->size>=dst->shared->size) {
+                double olapd = HDceil((double)(dst->shared->size)/
+                          (double)(src->shared->size-dst->shared->size));
+                olap = (size_t)olapd;
+                sp = dp = (uint8_t*)buf;
+                direction = 1;
+            } else {
+                double olapd = HDceil((double)(src->shared->size)/
+                          (double)(dst->shared->size-src->shared->size));
+                olap = (size_t)olapd;
+                sp = (uint8_t*)buf + (nelmts-1) * src->shared->size;
+                dp = (uint8_t*)buf + (nelmts-1) * dst->shared->size;
+                direction = -1;
+            }
+
+            /* Allocate the overlap buffer */
+            if (NULL==(dbuf=H5MM_malloc(dst->shared->size)))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for string conversion");
+
+            /* The conversion loop. */
+            for (elmtno=0; elmtno<nelmts; elmtno++) {
+
+                /*
+                 * If the source and destination buffers overlap then use a
+                 * temporary buffer for the destination.
+                 */
+                if (direction>0) {
+                    s = sp;
+                    d = elmtno<olap ? dbuf : dp;
+                } else {
+                    s = sp;
+                    d = elmtno+olap >= nelmts ? dbuf : dp;
+                }
+#ifndef NDEBUG
+                /* I don't quite trust the overlap calculations yet --rpm */
+                if (src->shared->size==dst->shared->size || buf_stride) {
+                    assert(s==d);
+                } else if (d==dbuf) {
+                    assert((dp>=sp && dp<sp+src->shared->size) ||
+                       (sp>=dp && sp<dp+dst->shared->size));
+                } else {
+                    assert((dp<sp && dp+dst->shared->size<=sp) ||
+                       (sp<dp && sp+src->shared->size<=dp));
+                }
+#endif
+
+                /* Copy characters from source to destination */
+                switch (src->shared->u.atomic.u.s.pad) {
+                    case H5T_STR_NULLTERM:
+                        for (nchars=0;
+                             nchars<dst->shared->size && nchars<src->shared->size && s[nchars];
+                             nchars++) {
+                            d[nchars] = s[nchars];
+                        }
+                        break;
+
+                    case H5T_STR_NULLPAD:
+                        for (nchars=0;
+                             nchars<dst->shared->size && nchars<src->shared->size && s[nchars];
+                             nchars++) {
+                            d[nchars] = s[nchars];
+                        }
+                        break;
+
+                    case H5T_STR_SPACEPAD:
+                        nchars = src->shared->size;
+                        while (nchars>0 && ' '==s[nchars-1])
+                            --nchars;
+                        nchars = MIN(dst->shared->size, nchars);
+                        HDmemcpy(d, s, nchars);
+                        break;
+
+                    case H5T_STR_RESERVED_3:
+                    case H5T_STR_RESERVED_4:
+                    case H5T_STR_RESERVED_5:
+                    case H5T_STR_RESERVED_6:
+                    case H5T_STR_RESERVED_7:
+                    case H5T_STR_RESERVED_8:
+                    case H5T_STR_RESERVED_9:
+                    case H5T_STR_RESERVED_10:
+                    case H5T_STR_RESERVED_11:
+                    case H5T_STR_RESERVED_12:
+                    case H5T_STR_RESERVED_13:
+                    case H5T_STR_RESERVED_14:
+                    case H5T_STR_RESERVED_15:
+                    case H5T_STR_ERROR:
+                        HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "source string padding method not supported");
+                }
+
+                /* Terminate or pad the destination */
+                switch (dst->shared->u.atomic.u.s.pad) {
+                    case H5T_STR_NULLTERM:
+                        while (nchars<dst->shared->size)
+                            d[nchars++] = '\0';
+                        d[dst->shared->size-1] = '\0';
+                        break;
+
+                    case H5T_STR_NULLPAD:
+                        while (nchars<dst->shared->size)
+                            d[nchars++] = '\0';
+                        break;
+
+                    case H5T_STR_SPACEPAD:
+                        while (nchars<dst->shared->size)
+                            d[nchars++] = ' ';
+                        break;
+
+                    case H5T_STR_RESERVED_3:
+                    case H5T_STR_RESERVED_4:
+                    case H5T_STR_RESERVED_5:
+                    case H5T_STR_RESERVED_6:
+                    case H5T_STR_RESERVED_7:
+                    case H5T_STR_RESERVED_8:
+                    case H5T_STR_RESERVED_9:
+                    case H5T_STR_RESERVED_10:
+                    case H5T_STR_RESERVED_11:
+                    case H5T_STR_RESERVED_12:
+                    case H5T_STR_RESERVED_13:
+                    case H5T_STR_RESERVED_14:
+                    case H5T_STR_RESERVED_15:
+                    case H5T_STR_ERROR:
+                        HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "destination string padding method not supported");
+                }
+
+                /*
+                 * If we used a temporary buffer for the destination then we
+                 * should copy the value to the true destination buffer.
+                 */
+                if (d==dbuf)
+                    HDmemcpy(dp, d, dst->shared->size);
+                if (buf_stride) {
+                    sp += direction * buf_stride;
+                    dp += direction * buf_stride;
+                } else {
+                    sp += direction * src->shared->size;
+                    dp += direction * dst->shared->size;
+                }
+            }
+            break;
+
+        default:
+            HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown converson command");
+    }
+
+done:
+    H5MM_xfree(dbuf);
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_schar_uchar
+ *
+ * Purpose:	Converts `signed char' to `unsigned char'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, November 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_schar_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_schar_uchar, FAIL);
+
+    H5T_CONV_su(SCHAR, UCHAR, signed char, unsigned char, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uchar_schar
+ *
+ * Purpose:	Converts `unsigned char' to `signed char'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, November 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uchar_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uchar_schar, FAIL);
+
+    H5T_CONV_us(UCHAR, SCHAR, unsigned char, signed char, -, SCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_schar_short
+ *
+ * Purpose:	Converts `signed char' to `short'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_schar_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_schar_short, FAIL);
+
+    H5T_CONV_sS(SCHAR, SHORT, signed char, short, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_schar_ushort
+ *
+ * Purpose:	Converts `signed char' to `unsigned short'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_schar_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_schar_ushort, FAIL);
+
+    H5T_CONV_sU(SCHAR, USHORT, signed char, unsigned short, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uchar_short
+ *
+ * Purpose:	Converts `unsigned char' to `short'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uchar_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uchar_short, FAIL);
+
+    H5T_CONV_uS(UCHAR, SHORT, unsigned char, short, -, SHRT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uchar_ushort
+ *
+ * Purpose:	Converts `unsigned char' to `unsigned short'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uchar_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uchar_ushort, FAIL);
+
+    H5T_CONV_uU(UCHAR, USHORT, unsigned char, unsigned short, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_schar_int
+ *
+ * Purpose:	Converts `signed char' to `int'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_schar_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		   size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                   void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_schar_int, FAIL);
+
+    H5T_CONV_sS(SCHAR, INT, signed char, int, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_schar_uint
+ *
+ * Purpose:	Converts `signed char' to `unsigned int'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_schar_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_schar_uint, FAIL);
+
+    H5T_CONV_sU(SCHAR, UINT, signed char, unsigned, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uchar_int
+ *
+ * Purpose:	Converts `unsigned char' to `int'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uchar_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		   size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                   void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uchar_int, FAIL);
+
+    H5T_CONV_uS(UCHAR, INT, unsigned char, int, -, INT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uchar_uint
+ *
+ * Purpose:	Converts `unsigned char' to `unsigned int'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uchar_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uchar_uint, FAIL);
+
+    H5T_CONV_uU(UCHAR, UINT, unsigned char, unsigned, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_schar_long
+ *
+ * Purpose:	Converts `signed char' to `long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_schar_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_schar_long, FAIL);
+
+    H5T_CONV_sS(SCHAR, LONG, signed char, long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_schar_ulong
+ *
+ * Purpose:	Converts `signed char' to `unsigned long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_schar_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_schar_ulong, FAIL);
+
+    H5T_CONV_sU(SCHAR, ULONG, signed char, unsigned long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uchar_long
+ *
+ * Purpose:	Converts `unsigned char' to `long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uchar_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uchar_long, FAIL);
+
+    H5T_CONV_uS(UCHAR, LONG, unsigned char, long, -, LONG_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uchar_ulong
+ *
+ * Purpose:	Converts `unsigned char' to `unsigned long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uchar_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uchar_ulong, FAIL);
+
+    H5T_CONV_uU(UCHAR, ULONG, unsigned char, unsigned long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_schar_llong
+ *
+ * Purpose:	Converts `signed char' to `long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_schar_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_schar_llong, FAIL);
+
+    H5T_CONV_sS(SCHAR, LLONG, signed char, long_long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_schar_ullong
+ *
+ * Purpose:	Converts `signed char' to `unsigned long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_schar_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_schar_ullong, FAIL);
+
+    H5T_CONV_sU(SCHAR, ULLONG, signed char, unsigned long_long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uchar_llong
+ *
+ * Purpose:	Converts `unsigned char' to `long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uchar_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uchar_llong, FAIL);
+
+    H5T_CONV_uS(UCHAR, LLONG, unsigned char, long_long, -, LLONG_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uchar_ullong
+ *
+ * Purpose:	Converts `unsigned char' to `unsigned long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uchar_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uchar_ullong, FAIL);
+
+    H5T_CONV_uU(UCHAR, ULLONG, unsigned char, unsigned long_long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_short_schar
+ *
+ * Purpose:	Converts `short' to `signed char'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_short_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_short_schar, FAIL);
+
+    H5T_CONV_Ss(SHORT, SCHAR, short, signed char, SCHAR_MIN, SCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_short_uchar
+ *
+ * Purpose:	Converts `short' to `unsigned char'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_short_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_short_uchar, FAIL);
+
+    H5T_CONV_Su(SHORT, UCHAR, short, unsigned char, -, UCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ushort_schar
+ *
+ * Purpose:	Converts `unsigned short' to `signed char'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ushort_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ushort_schar, FAIL);
+
+    H5T_CONV_Us(USHORT, SCHAR, unsigned short, signed char, -, SCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ushort_uchar
+ *
+ * Purpose:	Converts `unsigned short' to `unsigned char'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ushort_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ushort_uchar, FAIL);
+
+    H5T_CONV_Uu(USHORT, UCHAR, unsigned short, unsigned char, -, UCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_short_ushort
+ *
+ * Purpose:	Converts `short' to `unsigned short'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, November 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_short_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_short_ushort, FAIL);
+
+    H5T_CONV_su(SHORT, USHORT, short, unsigned short, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ushort_short
+ *
+ * Purpose:	Converts `unsigned short' to `short'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, November 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ushort_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ushort_short, FAIL);
+
+    H5T_CONV_us(USHORT, SHORT, unsigned short, short, -, SHRT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_short_int
+ *
+ * Purpose:	Converts `short' to `int'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_short_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		   size_t nelmts, size_t buf_stride,
+                   size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		   hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_short_int, FAIL);
+
+    H5T_CONV_sS(SHORT, INT, short, int, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_short_uint
+ *
+ * Purpose:	Converts `short' to `unsigned int'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_short_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride,
+                    size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		    hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_short_uint, FAIL);
+
+    H5T_CONV_sU(SHORT, UINT, short, unsigned, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ushort_int
+ *
+ * Purpose:	Converts `unsigned short' to `int'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ushort_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride,
+                    size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		    hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ushort_int, FAIL);
+
+    H5T_CONV_uS(USHORT, INT, unsigned short, int, -, INT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ushort_uint
+ *
+ * Purpose:	Converts `unsigned short' to `unsigned int'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ushort_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ushort_uint, FAIL);
+
+    H5T_CONV_uU(USHORT, UINT, unsigned short, unsigned, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_short_long
+ *
+ * Purpose:	Converts `short' to `long'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_short_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride,
+                    size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		    hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_short_long, FAIL);
+
+    H5T_CONV_sS(SHORT, LONG, short, long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_short_ulong
+ *
+ * Purpose:	Converts `short' to `unsigned long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_short_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_short_ulong, FAIL);
+
+    H5T_CONV_sU(SHORT, ULONG, short, unsigned long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ushort_long
+ *
+ * Purpose:	Converts `unsigned short' to `long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ushort_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ushort_long, FAIL);
+
+    H5T_CONV_uS(USHORT, LONG, unsigned short, long, -, LONG_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ushort_ulong
+ *
+ * Purpose:	Converts `unsigned short' to `unsigned long'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ushort_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ushort_ulong, FAIL);
+
+    H5T_CONV_uU(USHORT, ULONG, unsigned short, unsigned long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_short_llong
+ *
+ * Purpose:	Converts `short' to `long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_short_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_short_llong, FAIL);
+
+    H5T_CONV_sS(SHORT, LLONG, short, long_long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_short_ullong
+ *
+ * Purpose:	Converts `short' to `unsigned long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_short_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_short_ullong, FAIL);
+
+    H5T_CONV_sU(SHORT, ULLONG, short, unsigned long_long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ushort_llong
+ *
+ * Purpose:	Converts `unsigned short' to `long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ushort_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ushort_llong, FAIL);
+
+    H5T_CONV_uS(USHORT, LLONG, unsigned short, long_long, -, LLONG_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ushort_ullong
+ *
+ * Purpose:	Converts `unsigned short' to `unsigned long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ushort_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		       size_t nelmts, size_t buf_stride,
+                       size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                       hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ushort_ullong, FAIL);
+
+    H5T_CONV_uU(USHORT, ULLONG, unsigned short, unsigned long_long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_int_schar
+ *
+ * Purpose:	Converts `int' to `signed char'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_int_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		   size_t nelmts, size_t buf_stride,
+                   size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		   hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_int_schar, FAIL);
+
+    H5T_CONV_Ss(INT, SCHAR, int, signed char, SCHAR_MIN, SCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_int_uchar
+ *
+ * Purpose:	Converts `int' to `unsigned char'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_int_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		   size_t nelmts, size_t buf_stride,
+                   size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		   hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_int_uchar, FAIL);
+
+    H5T_CONV_Su(INT, UCHAR, int, unsigned char, -, UCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uint_schar
+ *
+ * Purpose:	Converts `unsigned int' to `signed char'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uint_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride,
+                    size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		    hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uint_schar, FAIL);
+
+    H5T_CONV_Us(UINT, SCHAR, unsigned, signed char, -, SCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uint_uchar
+ *
+ * Purpose:	Converts `unsigned int' to `unsigned char'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uint_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride,
+                    size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		    hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uint_uchar, FAIL);
+
+    H5T_CONV_Uu(UINT, UCHAR, unsigned, unsigned char, -, UCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_int_short
+ *
+ * Purpose:	Converts `int' to `short'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_int_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		   size_t nelmts, size_t buf_stride,
+                   size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		   hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_int_short, FAIL);
+
+    H5T_CONV_Ss(INT, SHORT, int, short, SHRT_MIN, SHRT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_int_ushort
+ *
+ * Purpose:	Converts `int' to `unsigned short'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_int_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride,
+                    size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		    hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_int_ushort, FAIL);
+
+    H5T_CONV_Su(INT, USHORT, int, unsigned short, -, USHRT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uint_short
+ *
+ * Purpose:	Converts `unsigned int' to `short'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uint_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride,
+                    size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		    hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uint_short, FAIL);
+
+    H5T_CONV_Us(UINT, SHORT, unsigned, short, -, SHRT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uint_ushort
+ *
+ * Purpose:	Converts `unsigned int' to `unsigned short'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uint_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uint_ushort, FAIL);
+
+    H5T_CONV_Uu(UINT, USHORT, unsigned, unsigned short, -, USHRT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_int_uint
+ *
+ * Purpose:	Converts `int' to `unsigned int'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, November 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_int_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		  size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                  void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_int_uint, FAIL);
+
+    H5T_CONV_su(INT, UINT, int, unsigned, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uint_int
+ *
+ * Purpose:	Converts `unsigned int' to `int'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, November 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uint_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		  size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                  void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uint_int, FAIL);
+
+    H5T_CONV_us(UINT, INT, unsigned, int, -, INT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_int_long
+ *
+ * Purpose:	Converts `int' to `long'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_int_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		  size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                  void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_int_long, FAIL);
+
+    H5T_CONV_sS(INT, LONG, int, long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_int_ulong
+ *
+ * Purpose:	Converts `int' to `unsigned long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_int_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		   size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                   void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_int_ulong, FAIL);
+
+    H5T_CONV_sU(INT, LONG, int, unsigned long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uint_long
+ *
+ * Purpose:	Converts `unsigned int' to `long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uint_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		   size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                   void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uint_long, FAIL);
+
+    H5T_CONV_uS(UINT, LONG, unsigned, long, -, LONG_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uint_ulong
+ *
+ * Purpose:	Converts `unsigned int' to `unsigned long'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uint_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uint_ulong, FAIL);
+
+    H5T_CONV_uU(UINT, ULONG, unsigned, unsigned long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_int_llong
+ *
+ * Purpose:	Converts `int' to `long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_int_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		   size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                   void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_int_llong, FAIL);
+
+    H5T_CONV_sS(INT, LLONG, int, long_long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_int_ullong
+ *
+ * Purpose:	Converts `int' to `unsigned long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_int_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_int_ullong, FAIL);
+
+    H5T_CONV_sU(INT, ULLONG, int, unsigned long_long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uint_llong
+ *
+ * Purpose:	Converts `unsigned int' to `long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uint_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uint_llong, FAIL);
+
+    H5T_CONV_uS(UINT, LLONG, unsigned, long_long, -, LLONG_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_uint_ullong
+ *
+ * Purpose:	Converts `unsigned int' to `unsigned long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_uint_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_uint_ullong, FAIL);
+
+    H5T_CONV_uU(UINT, ULLONG, unsigned, unsigned long_long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_long_schar
+ *
+ * Purpose:	Converts `long' to `signed char'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_long_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_long_schar, FAIL);
+
+    H5T_CONV_Ss(LONG, SCHAR, long, signed char, SCHAR_MIN, SCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_long_uchar
+ *
+ * Purpose:	Converts `long' to `unsigned char'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_long_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_long_uchar, FAIL);
+
+    H5T_CONV_Su(LONG, UCHAR, long, unsigned char, -, UCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ulong_schar
+ *
+ * Purpose:	Converts `unsigned long' to `signed char'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ulong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ulong_schar, FAIL);
+
+    H5T_CONV_Us(ULONG, SCHAR, unsigned long, signed char, -, SCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ulong_uchar
+ *
+ * Purpose:	Converts `unsigned long' to `unsigned char'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ulong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ulong_uchar, FAIL);
+
+    H5T_CONV_Uu(ULONG, UCHAR, unsigned long, unsigned char, -, UCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_long_short
+ *
+ * Purpose:	Converts `long' to `short'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_long_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_long_short, FAIL);
+
+    H5T_CONV_Ss(LONG, SHORT, long, short, SHRT_MIN, SHRT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_long_ushort
+ *
+ * Purpose:	Converts `long' to `unsigned short'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_long_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_long_ushort, FAIL);
+
+    H5T_CONV_Su(LONG, USHORT, long, unsigned short, -, USHRT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ulong_short
+ *
+ * Purpose:	Converts `unsigned long' to `short'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ulong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                     void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ulong_short, FAIL);
+
+    H5T_CONV_Us(ULONG, SHORT, unsigned long, short, -, SHRT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ulong_ushort
+ *
+ * Purpose:	Converts `unsigned long' to `unsigned short'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ulong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ulong_ushort, FAIL);
+
+    H5T_CONV_Uu(ULONG, USHORT, unsigned long, unsigned short, -, USHRT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_long_int
+ *
+ * Purpose:	Converts `long' to `int'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_long_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		  size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                  void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_long_int, FAIL);
+
+    H5T_CONV_Ss(LONG, INT, long, int, INT_MIN, INT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_long_uint
+ *
+ * Purpose:	Converts `long' to `unsigned int'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_long_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		   size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                   void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_long_uint, FAIL);
+
+    H5T_CONV_Su(LONG, UINT, long, unsigned, -, UINT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ulong_int
+ *
+ * Purpose:	Converts `unsigned long' to `int'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ulong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		   size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                   void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ulong_int, FAIL);
+
+    H5T_CONV_Us(ULONG, INT, unsigned long, int, -, INT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ulong_uint
+ *
+ * Purpose:	Converts `unsigned long' to `unsigned int'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ulong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ulong_uint, FAIL);
+
+    H5T_CONV_Uu(ULONG, UINT, unsigned long, unsigned, -, UINT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_long_ulong
+ *
+ * Purpose:	Converts `long' to `unsigned long'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, November 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_long_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_long_ulong, FAIL);
+
+    H5T_CONV_su(LONG, ULONG, long, unsigned long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ulong_long
+ *
+ * Purpose:	Converts `unsigned long' to `long'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, November 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ulong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ulong_long, FAIL);
+
+    H5T_CONV_us(ULONG, LONG, unsigned long, long, -, LONG_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_long_llong
+ *
+ * Purpose:	Converts `long' to `long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_long_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_long_llong, FAIL);
+
+    H5T_CONV_sS(LONG, LLONG, long, long_long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_long_ullong
+ *
+ * Purpose:	Converts `long' to `unsigned long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_long_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_long_ullong, FAIL);
+
+    H5T_CONV_sU(LONG, ULLONG, long, unsigned long_long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ulong_llong
+ *
+ * Purpose:	Converts `unsigned long' to `long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ulong_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ulong_llong, FAIL);
+
+    H5T_CONV_uS(ULONG, LLONG, unsigned long, long_long, -, LLONG_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ulong_ullong
+ *
+ * Purpose:	Converts `unsigned long' to `unsigned long_long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ulong_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ulong_ullong, FAIL);
+
+    H5T_CONV_uU(ULONG, ULLONG, unsigned long, unsigned long_long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_llong_schar
+ *
+ * Purpose:	Converts `long_long' to `signed char'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_llong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_llong_schar, FAIL);
+
+    H5T_CONV_Ss(LLONG, SCHAR, long_long, signed char, SCHAR_MIN, SCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_llong_uchar
+ *
+ * Purpose:	Converts `long_long' to `unsigned char'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_llong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_llong_uchar, FAIL);
+
+    H5T_CONV_Su(LLONG, UCHAR, long_long, unsigned char, -, UCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ullong_schar
+ *
+ * Purpose:	Converts `unsigned long_long' to `signed char'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ullong_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ullong_schar, FAIL);
+
+    H5T_CONV_Us(ULLONG, SCHAR, unsigned long_long, signed char, -, SCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ullong_uchar
+ *
+ * Purpose:	Converts `unsigned long_long' to `unsigned char'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ullong_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ullong_uchar, FAIL);
+
+    H5T_CONV_Uu(ULLONG, UCHAR, unsigned long_long, unsigned char, -, UCHAR_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_llong_short
+ *
+ * Purpose:	Converts `long_long' to `short'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_llong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_llong_short, FAIL);
+
+    H5T_CONV_Ss(LLONG, SHORT, long_long, short, SHRT_MIN, SHRT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_llong_ushort
+ *
+ * Purpose:	Converts `long_long' to `unsigned short'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_llong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_llong_ushort, FAIL);
+
+    H5T_CONV_Su(LLONG, USHORT, long_long, unsigned short, -, USHRT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ullong_short
+ *
+ * Purpose:	Converts `unsigned long_long' to `short'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ullong_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ullong_short, FAIL);
+
+    H5T_CONV_Us(ULLONG, SHORT, unsigned long_long, short, -, SHRT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ullong_ushort
+ *
+ * Purpose:	Converts `unsigned long_long' to `unsigned short'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ullong_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		       size_t nelmts, size_t buf_stride,
+                       size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                       hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ullong_ushort, FAIL);
+
+    H5T_CONV_Uu(ULLONG, USHORT, unsigned long_long, unsigned short, -, USHRT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_llong_int
+ *
+ * Purpose:	Converts `long_long' to `int'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_llong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		   size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                   void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_llong_int, FAIL);
+
+    H5T_CONV_Ss(LLONG, INT, long_long, int, INT_MIN, INT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_llong_uint
+ *
+ * Purpose:	Converts `long_long' to `unsigned int'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_llong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_llong_uint, FAIL);
+
+    H5T_CONV_Su(LLONG, UINT, long_long, unsigned, -, UINT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ullong_int
+ *
+ * Purpose:	Converts `unsigned long_long' to `int'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ullong_int(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ullong_int, FAIL);
+
+    H5T_CONV_Us(ULLONG, INT, unsigned long_long, int, -, INT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ullong_uint
+ *
+ * Purpose:	Converts `unsigned long_long' to `unsigned int'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ullong_uint(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ullong_uint, FAIL);
+
+    H5T_CONV_Uu(ULLONG, UINT, unsigned long_long, unsigned, -, UINT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_llong_long
+ *
+ * Purpose:	Converts `long_long' to `long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_llong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		    size_t nelmts, size_t buf_stride, size_t UNUSED bkg_stride,
+                    void *buf, void UNUSED *bkg, hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_llong_long, FAIL);
+
+    H5T_CONV_Ss(LLONG, LONG, long_long, long, LONG_MIN, LONG_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_llong_ulong
+ *
+ * Purpose:	Converts `long_long' to `unsigned long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_llong_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_llong_ulong, FAIL);
+
+    H5T_CONV_Su(LLONG, ULONG, long_long, unsigned long, -, ULONG_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ullong_long
+ *
+ * Purpose:	Converts `unsigned long_long' to `long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ullong_long(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		     size_t nelmts, size_t buf_stride,
+                     size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+		     hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ullong_long, FAIL);
+
+    H5T_CONV_Us(ULLONG, LONG, unsigned long_long, long, -, LONG_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ullong_ulong
+ *
+ * Purpose:	Converts `unsigned long_long' to `unsigned long'
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, November 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ullong_ulong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ullong_ulong, FAIL);
+
+    H5T_CONV_Uu(ULLONG, ULONG, unsigned long_long, unsigned long, -, ULONG_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_llong_ullong
+ *
+ * Purpose:	Converts `long_long' to `unsigned long_long'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, November 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_llong_ullong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_llong_ullong, FAIL);
+
+    H5T_CONV_su(LLONG, ULLONG, long_long, unsigned long_long, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_ullong_llong
+ *
+ * Purpose:	Converts `unsigned long_long' to `long_long'
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, November 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_ullong_llong(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_ullong_llong, FAIL);
+
+    H5T_CONV_us(ULLONG, LLONG, unsigned long_long, long_long, -, LLONG_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_float_double
+ *
+ * Purpose:	Convert native `float' to native `double' using hardware.
+ *		This is a fast special case.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, June 23, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-06-16
+ *		Added support for non-zero strides. If BUF_STRIDE is non-zero
+ *		then convert one value at each memory location advancing
+ *		BUF_STRIDE bytes each time; otherwise assume both source and
+ *		destination values are packed.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_float_double (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		       size_t nelmts, size_t buf_stride,
+                       size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                       hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_float_double, FAIL);
+
+    H5T_CONV_fF(FLOAT, DOUBLE, float, double, -, -);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_double_float
+ *
+ * Purpose:	Convert native `double' to native `float' using hardware.
+ *		This is a fast special case.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, June 23, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 7 Jul 1998
+ *		Added overflow handling.
+ *
+ *		Robb Matzke, 1999-06-16
+ *		Added support for non-zero strides. If BUF_STRIDE is non-zero
+ *		then convert one value at each memory location advancing
+ *		BUF_STRIDE bytes each time; otherwise assume both source and
+ *		destination values are packed.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_double_float (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		       size_t nelmts, size_t buf_stride,
+                       size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                       hid_t UNUSED dxpl_id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_double_float, FAIL);
+
+    H5T_CONV_Ff(DOUBLE, FLOAT, double, float, -FLT_MAX, FLT_MAX);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_conv_i32le_f64le
+ *
+ * Purpose:	Converts 4-byte little-endian integers (signed or unsigned)
+ *		to 8-byte litte-endian IEEE floating point.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, June 10, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-06-16
+ *		Added support for non-zero strides. If BUF_STRIDE is non-zero
+ *		then convert one value at each memory location advancing
+ *		BUF_STRIDE bytes each time; otherwise assume both source and
+ *		destination values are packed.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_conv_i32le_f64le (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+		      size_t nelmts, size_t buf_stride,
+                      size_t UNUSED bkg_stride, void *buf, void UNUSED *bkg,
+                      hid_t UNUSED dxpl_id)
+{
+    uint8_t	*s=NULL, *d=NULL;	/*src and dst buf pointers	*/
+    uint8_t	tmp[8];			/*temporary destination buffer	*/
+    H5T_t	*src = NULL;		/*source data type		*/
+    size_t	elmtno;			/*element counter		*/
+    unsigned	sign;			/*sign bit			*/
+    unsigned	cin, cout;		/*carry in/out			*/
+    unsigned	mbits=0;		/*mantissa bits			*/
+    unsigned	exponent;		/*exponent			*/
+    int	i;			/*counter			*/
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_conv_i32le_f64le, FAIL);
+
+    switch (cdata->command) {
+        case H5T_CONV_INIT:
+            assert (sizeof(int)>=4);
+            cdata->need_bkg = H5T_BKG_NO;
+            break;
+
+        case H5T_CONV_FREE:
+            /* Free private data */
+            break;
+
+        case H5T_CONV_CONV:
+            /* The conversion */
+            if (NULL==(src=H5I_object(src_id)) ||
+                    NULL==H5I_object(dst_id))
+                HGOTO_ERROR (H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type");
+
+            s = (uint8_t*)buf + (buf_stride?buf_stride:4)*(nelmts-1);
+            d = (uint8_t*)buf + (buf_stride?buf_stride:8)*(nelmts-1);
+            for (elmtno=0; elmtno<nelmts; elmtno++) {
+
+                /*
+                 * If this is the last element to convert (that is, the first
+                 * element of the buffer) then the source and destination areas
+                 * overlap so we need to use a temp buf for the destination.
+                 */
+                if ((void*)s==buf)
+                    d = tmp;
+
+                /* Convert the integer to a sign and magnitude */
+                switch (src->shared->u.atomic.u.i.sign) {
+                    case H5T_SGN_NONE:
+                        sign = 0;
+                        break;
+
+                    case H5T_SGN_2:
+                        if (s[3] & 0x80) {
+                            sign = 1;
+                            for (i=0,cin=1; i<4; i++,cin=cout) {
+                                s[i] = ~s[i];
+                                cout = ((unsigned)(s[i])+cin > 0xff) ? 1 : 0;
+                                s[i] += cin;
+                            }
+                        } else {
+                            sign = 0;
+                        }
+                        break;
+
+                    default:
+                        HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unsupported integer sign method");
+                }
+
+                /*
+                 * Where is the most significant bit that is set?  We could do
+                 * this in a loop, but testing it this way might be faster.
+                 */
+                if (s[3]) {
+                    if (s[3] & 0x80) mbits = 32;
+                    else if (s[3] & 0x40) mbits = 31;
+                    else if (s[3] & 0x20) mbits = 30;
+                    else if (s[3] & 0x10) mbits = 29;
+                    else if (s[3] & 0x08) mbits = 28;
+                    else if (s[3] & 0x04) mbits = 27;
+                    else if (s[3] & 0x02) mbits = 26;
+                    else if (s[3] & 0x01) mbits = 25;
+                } else if (s[2]) {
+                    if (s[2] & 0x80) mbits = 24;
+                    else if (s[2] & 0x40) mbits = 23;
+                    else if (s[2] & 0x20) mbits = 22;
+                    else if (s[2] & 0x10) mbits = 21;
+                    else if (s[2] & 0x08) mbits = 20;
+                    else if (s[2] & 0x04) mbits = 19;
+                    else if (s[2] & 0x02) mbits = 18;
+                    else if (s[2] & 0x01) mbits = 17;
+                } else if (s[1]) {
+                    if (s[1] & 0x80) mbits = 16;
+                    else if (s[1] & 0x40) mbits = 15;
+                    else if (s[1] & 0x20) mbits = 14;
+                    else if (s[1] & 0x10) mbits = 13;
+                    else if (s[1] & 0x08) mbits = 12;
+                    else if (s[1] & 0x04) mbits = 11;
+                    else if (s[1] & 0x02) mbits = 10;
+                    else if (s[1] & 0x01) mbits =  9;
+                } else if (s[0]) {
+                    if (s[0] & 0x80) mbits = 8;
+                    else if (s[0] & 0x40) mbits =  7;
+                    else if (s[0] & 0x20) mbits =  6;
+                    else if (s[0] & 0x10) mbits =  5;
+                    else if (s[0] & 0x08) mbits =  4;
+                    else if (s[0] & 0x04) mbits =  3;
+                    else if (s[0] & 0x02) mbits =  2;
+                    else if (s[0] & 0x01) mbits =  1;
+                } else {
+                    /*zero*/
+                    d[7] = d[6] = d[5] = d[4] = d[3] = d[2] = d[1] = d[0] = 0;
+                    continue;
+                }
+
+                /*
+                 * The sign and exponent.
+                 */
+                exponent = (mbits - 1) + 1023;
+                d[7] = (sign<<7) | ((exponent>>4) & 0x7f);
+                d[6] = (exponent & 0x0f) << 4;
+
+                /*
+                 * The mantissa.
+                 */
+                switch (mbits) {
+                    case 32:
+                        d[5] = d[4] = d[3] = d[1] = d[0] = 0;
+                        break;
+
+                    case 31:
+                        d[6] |=	 0x0f	 & (s[3]>>2);
+                        d[5] = (s[3]<<6) | (s[2]>>2);
+                        d[4] = (s[2]<<6) | (s[1]>>2);
+                        d[3] = (s[1]<<6) | (s[0]>>2);
+                        d[2] = (s[0]<<6);
+                        d[1] = d[0] = 0;
+                        break;
+
+                    case 30:
+                        d[6] |=	 0x0f	 & (s[3]>>1);
+                        d[5] = (s[3]<<7) | (s[2]>>1);
+                        d[4] = (s[2]<<7) | (s[1]>>1);
+                        d[3] = (s[1]<<7) | (s[0]>>1);
+                        d[2] = (s[0]<<7);
+                        d[1] = d[0] = 0;
+                        break;
+
+                    case 29:
+                        d[6] |=	 0x0f	 & s[3];
+                        d[5] = s[2];
+                        d[4] = s[1];
+                        d[3] = s[0];
+                        d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 28:
+                        d[6] |= ((s[3]<<1) | (s[2]>>7)) & 0x0f;
+                        d[5] =	 (s[2]<<1) | (s[1]>>7);
+                        d[4] =	 (s[1]<<1) | (s[0]>>7);
+                        d[3] =	 (s[0]<<1);
+                        d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 27:
+                        d[6] |= ((s[3]<<2) | (s[2]>>6)) & 0x0f;
+                        d[5] =	 (s[2]<<2) | (s[1]>>6);
+                        d[4] =	 (s[1]<<2) | (s[0]>>6);
+                        d[3] =	 (s[0]<<2);
+                        d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 26:
+                        d[6] |= ((s[3]<<3) | (s[2]>>5)) & 0x0f;
+                        d[5] =	 (s[2]<<3) | (s[1]>>5);
+                        d[4] =	 (s[1]<<3) | (s[0]>>5);
+                        d[3] =	 (s[0]<<3);
+                        d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 25:
+                        d[6] |=	  0x0f	 & (s[2]>>4);
+                        d[5] = (s[2]<<4) | (s[1]>>4);
+                        d[4] = (s[1]<<4) | (s[0]>>4);
+                        d[3] = (s[0]<<4);
+                        d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 24:
+                        d[6] |=	  0x0f	 & (s[2]>>3);
+                        d[5] = (s[2]<<5) | (s[1]>>3);
+                        d[4] = (s[1]<<5) | (s[0]>>3);
+                        d[3] = (s[0]<<5);
+                        d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 23:
+                        d[6] |=	  0x0f	 & (s[2]>>2);
+                        d[5] = (s[2]<<6) | (s[1]>>2);
+                        d[4] = (s[1]<<6) | (s[0]>>2);
+                        d[3] = (s[0]<<6);
+                        d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 22:
+                        d[6] |=	  0x0f	 & (s[2]>>1);
+                        d[5] = (s[2]<<7) | (s[1]>>1);
+                        d[4] = (s[1]<<7) | (s[0]>>1);
+                        d[3] = (s[0]<<7);
+                        d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 21:
+                        d[6] |= 0x0f & s[2];
+                        d[5] = s[1];
+                        d[4] = s[0];
+                        d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 20:
+                        d[6] |= ((s[2]<<1) | (s[1]>>7)) & 0x0f;
+                        d[5] =	 (s[1]<<1) | (s[0]>>7);
+                        d[4] =	 (s[0]<<1);
+                        d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 19:
+                        d[6] |= ((s[2]<<2) | (s[1]>>6)) & 0x0f;
+                        d[5] =	 (s[1]<<2) | (s[0]>>6);
+                        d[4] =	 (s[0]<<2);
+                        d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 18:
+                        d[6] |= ((s[2]<<3) | (s[1]>>5)) & 0x0f;
+                        d[5] =	 (s[1]<<3) | (s[0]>>5);
+                        d[4] =	 (s[0]<<3);
+                        d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 17:
+                        d[6] |=	  0x0f	 & (s[1]>>4);
+                        d[5] = (s[1]<<4) | (s[0]>>4);
+                        d[4] = (s[0]<<4);
+                        d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 16:
+                        d[6] |=	  0x0f	 & (s[1]>>3);
+                        d[5] = (s[1]<<5) | (s[0]>>3);
+                        d[4] = (s[0]<<5);
+                        d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 15:
+                        d[6] |=	  0x0f	 & (s[1]>>2);
+                        d[5] = (s[1]<<6) | (s[0]>>2);
+                        d[4] = (s[0]<<6);
+                        d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 14:
+                        d[6] |=	  0x0f	 & (s[1]>>1);
+                        d[5] = (s[1]<<7) | (s[0]>>1);
+                        d[4] = (s[0]<<7);
+                        d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 13:
+                        d[6] |= 0x0f & s[1];
+                        d[5] = s[0];
+                        d[4] = d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 12:
+                        d[6] |= ((s[1]<<1) | (s[0]>>7)) & 0x0f;
+                        d[5] =	 (s[0]<<1);
+                        d[4] = d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 11:
+                        d[6] |= ((s[1]<<2) | (s[0]>>6)) & 0x0f;
+                        d[5] =	 (s[0]<<2);
+                        d[4] = d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 10:
+                        d[6] |= ((s[1]<<3) | (s[0]>>5)) & 0x0f;
+                        d[5] =	 (s[0]<<3);
+                        d[4] = d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 9:
+                        d[6] |=	  0x0f	 & (s[0]>>4);
+                        d[5] = (s[0]<<4);
+                        d[4] = d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 8:
+                        d[6] |=	  0x0f	 & (s[0]>>3);
+                        d[5] = (s[0]<<5);
+                        d[4] = d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 7:
+                        d[6] |=	  0x0f	 & (s[0]>>2);
+                        d[5] = (s[0]<<6);
+                        d[4] = d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 6:
+                        d[6] |=	  0x0f	 & (s[0]>>1);
+                        d[5] = (s[0]<<7);
+                        d[4] = d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 5:
+                        d[6] |= 0x0f & s[0];
+                        d[5] = d[4] = d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 4:
+                        d[6] |= (s[0]<<1) & 0x0f;
+                        d[5] = d[4] = d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 3:
+                        d[6] |= (s[0]<<2) & 0x0f;
+                        d[5] = d[4] = d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 2:
+                        d[6] |= (s[0]<<3) & 0x0f;
+                        d[5] = d[4] = d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+
+                    case 1:
+                        d[5] = d[4] = d[3] = d[2] = d[1] = d[0] = 0;
+                        break;
+                }
+
+                /*
+                 * Copy temp buffer to the destination.  This only happens for
+                 * the first value in the array, the last value processed. See
+                 * beginning of loop.
+                 */
+                if (d==tmp)
+                    HDmemcpy (s, d, 8);
+
+                /* Advance pointers */
+                if (buf_stride) {
+                    s -= buf_stride;
+                    d -= buf_stride;
+                } else {
+                    s -= 4;
+                    d -= 8;
+                }
+            }
+            break;
+
+        default:
+            /* Some other command we don't know about yet.*/
+            HGOTO_ERROR (H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "unknown conversion command");
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}

Added: packages/hdf5/branches/upstream/current/src/H5Tcset.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tcset.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tcset.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,150 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for setting & querying
+ *      the character set (cset) for the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_cset_interface
+
+
+#include "H5private.h"		/*generic functions			  */
+#include "H5Eprivate.h"		/*error handling			  */
+#include "H5Iprivate.h"		/*ID functions		   		  */
+#include "H5Tpkg.h"		/*data-type functions			  */
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_cset_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_cset_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_cset_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_cset_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_cset_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_cset
+ *
+ * Purpose:	HDF5 is able to distinguish between character sets of
+ *		different nationalities and to convert between them to the
+ *		extent possible.
+ *
+ * Return:	Success:	The character set of a string type.
+ *
+ *		Failure:	H5T_CSET_ERROR (Negative)
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January	 9, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works for derived data types.
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_cset_t
+H5Tget_cset(hid_t type_id)
+{
+    H5T_t	*dt = NULL;
+    H5T_cset_t	ret_value;
+
+    FUNC_ENTER_API(H5Tget_cset, H5T_CSET_ERROR)
+    H5TRACE1("Tc","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_CSET_ERROR, "not a data type")
+    while (dt->shared->parent && !H5T_IS_STRING(dt->shared))
+        dt = dt->shared->parent;  /*defer to parent*/
+    if (!H5T_IS_STRING(dt->shared))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, H5T_CSET_ERROR, "operation not defined for data type class")
+
+    /* result */
+    if(H5T_IS_FIXED_STRING(dt->shared))
+        ret_value = dt->shared->u.atomic.u.s.cset;
+    else
+        ret_value = dt->shared->u.vlen.cset;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tset_cset
+ *
+ * Purpose:	HDF5 is able to distinguish between character sets of
+ *		different nationalities and to convert between them to the
+ *		extent possible.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January	 9, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works with derived data types.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tset_cset(hid_t type_id, H5T_cset_t cset)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tset_cset, FAIL)
+    H5TRACE2("e","iTc",type_id,cset);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type")
+    if (H5T_STATE_TRANSIENT!=dt->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only")
+    if (cset < H5T_CSET_ASCII || cset >= H5T_NCSET)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "illegal character set type")
+    while (dt->shared->parent && !H5T_IS_STRING(dt->shared))
+        dt = dt->shared->parent;  /*defer to parent*/
+    if (!H5T_IS_STRING(dt->shared))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "operation not defined for data type class")
+
+    /* Commit */
+    if(H5T_IS_FIXED_STRING(dt->shared))
+        dt->shared->u.atomic.u.s.cset = cset;
+    else
+        dt->shared->u.vlen.cset = cset;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Tenum.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tenum.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tenum.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,603 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for enumerated datatypes
+ *      in the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_enum_interface
+
+
+#include "H5private.h"		/*generic functions			  */
+#include "H5Eprivate.h"		/*error handling			  */
+#include "H5FLprivate.h"	/*Free Lists				  */
+#include "H5Iprivate.h"		/*ID functions		   		  */
+#include "H5MMprivate.h"	/*memory management			  */
+#include "H5Tpkg.h"		/*data-type functions			  */
+
+/* Declare extern the free lists for H5T_t's and H5T_shared_t's */
+H5FL_EXTERN(H5T_t);
+H5FL_EXTERN(H5T_shared_t);
+
+/* Static local functions */
+static char *H5T_enum_nameof(const H5T_t *dt, const void *value, char *name/*out*/,
+			      size_t size);
+static herr_t H5T_enum_valueof(const H5T_t *dt, const char *name,
+				void *value/*out*/);
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_enum_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_enum_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_enum_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_enum_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_enum_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tenum_create
+ *
+ * Purpose:	Create a new enumeration data type based on the specified
+ *		TYPE, which must be an integer type.
+ *
+ * Return:	Success:	ID of new enumeration data type
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, December 22, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Tenum_create(hid_t parent_id)
+{
+    H5T_t	*parent = NULL;		/*base integer data type	*/
+    H5T_t	*dt = NULL;		/*new enumeration data type	*/
+    hid_t	ret_value;	        /*return value			*/
+
+    FUNC_ENTER_API(H5Tenum_create, FAIL)
+    H5TRACE1("i","i",parent_id);
+
+    /* Check args */
+    if (NULL==(parent=H5I_object_verify(parent_id,H5I_DATATYPE)) || H5T_INTEGER!=parent->shared->type)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an integer data type")
+
+    /* Build new type */
+    if((dt=H5T_enum_create(parent))==NULL)
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "cannot create enum type")
+    /* Atomize the type */
+    if ((ret_value=H5I_register(H5I_DATATYPE, dt))<0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register data type atom")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_enum_create
+ *
+ * Purpose:	Private function for H5Tenum_create.  Create a new
+ *              enumeration data type based on the specified
+ *		TYPE, which must be an integer type.
+ *
+ * Return:	Success:	new enumeration data type
+ *
+ *		Failure:        NULL
+ *
+ * Programmer:	Raymond Lu
+ *              October 9, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_t *
+H5T_enum_create(const H5T_t *parent)
+{
+    H5T_t	*ret_value;		/*new enumeration data type	*/
+
+    FUNC_ENTER_NOAPI(H5T_enum_create, NULL)
+
+    assert(parent);
+
+    /* Build new type */
+    if(NULL == (ret_value = H5T_alloc()))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+    ret_value->shared->type = H5T_ENUM;
+    ret_value->shared->parent = H5T_copy(parent, H5T_COPY_ALL);
+    assert(ret_value->shared->parent);
+    ret_value->shared->size = ret_value->shared->parent->shared->size;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tenum_insert
+ *
+ * Purpose:	Insert a new enumeration data type member into an enumeration
+ *		type. TYPE is the enumeration type, NAME is the name of the
+ *		new member, and VALUE points to the value of the new member.
+ *		The NAME and VALUE must both be unique within the TYPE. VALUE
+ *		points to data which is of the data type defined when the
+ *		enumeration type was created.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, December 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tenum_insert(hid_t type, const char *name, const void *value)
+{
+    H5T_t	*dt=NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tenum_insert, FAIL)
+    H5TRACE3("e","isx",type,name,value);
+
+    /* Check args */
+    if (NULL==(dt=H5I_object_verify(type,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type")
+    if (H5T_ENUM!=dt->shared->type)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an enumeration data type")
+    if (!name || !*name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name specified")
+    if (!value)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no value specified")
+
+    /* Do work */
+    if (H5T_enum_insert(dt, name, value)<0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to insert new enumeration member")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_enum_insert
+ *
+ * Purpose:	Insert a new member having a NAME and VALUE into an
+ *		enumeration data TYPE.  The NAME and VALUE must both be
+ *		unique. The VALUE points to data of the data type defined for
+ *		the enumeration base type.
+ *
+ * Return:	Success:	non-negative
+ *
+ *		Failure:	negative
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, December 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_enum_insert(const H5T_t *dt, const char *name, const void *value)
+{
+    unsigned	i;
+    char	**names=NULL;
+    uint8_t	*values=NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_enum_insert, FAIL)
+
+    assert(dt);
+    assert(name && *name);
+    assert(value);
+
+    /* The name and value had better not already exist */
+    for (i=0; i<dt->shared->u.enumer.nmembs; i++) {
+	if (!HDstrcmp(dt->shared->u.enumer.name[i], name))
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "name redefinition")
+	if (!HDmemcmp(dt->shared->u.enumer.value+i*dt->shared->size, value, dt->shared->size))
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "value redefinition")
+    }
+
+    /* Increase table sizes */
+    if (dt->shared->u.enumer.nmembs >= dt->shared->u.enumer.nalloc) {
+	unsigned n = MAX(32, 2*dt->shared->u.enumer.nalloc);
+	if (NULL==(names=H5MM_realloc(dt->shared->u.enumer.name, n*sizeof(char*))))
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+	dt->shared->u.enumer.name = names;
+
+	if (NULL==(values=H5MM_realloc(dt->shared->u.enumer.value, n*dt->shared->size)))
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
+	dt->shared->u.enumer.value = values;
+	dt->shared->u.enumer.nalloc = n;
+    }
+
+    /* Insert new member at end of member arrays */
+    dt->shared->u.enumer.sorted = H5T_SORT_NONE;
+    i = dt->shared->u.enumer.nmembs++;
+    dt->shared->u.enumer.name[i] = H5MM_xstrdup(name);
+    HDmemcpy(dt->shared->u.enumer.value+i*dt->shared->size, value, dt->shared->size);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_member_value
+ *
+ * Purpose:	Return the value for an enumeration data type member.
+ *
+ * Return:	Success:	non-negative with the member value copied
+ *				into the memory pointed to by VALUE.
+ *
+ *		Failure:	negative, VALUE memory is undefined.
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, December 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tget_member_value(hid_t type, unsigned membno, void *value/*out*/)
+{
+    H5T_t	*dt=NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tget_member_value, FAIL)
+    H5TRACE3("e","iIux",type,membno,value);
+
+    if (NULL==(dt=H5I_object_verify(type,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type")
+    if (H5T_ENUM!=dt->shared->type)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not defined for data type class")
+    if (membno>=dt->shared->u.enumer.nmembs)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid member number")
+    if (!value)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "null value buffer")
+
+    if (H5T_get_member_value(dt, membno, value)<0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "unable to get member value")
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_get_member_value
+ *
+ * Purpose:	Private function for H5T_get_member_value.  Return the
+ *              value for an enumeration data type member.
+ *
+ * Return:	Success:	non-negative with the member value copied
+ *				into the memory pointed to by VALUE.
+ *
+ *		Failure:	negative, VALUE memory is undefined.
+ *
+ * Programmer:	Raymond Lu
+ *              October 9, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_get_member_value(const H5T_t *dt, unsigned membno, void *value/*out*/)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_get_member_value, FAIL)
+
+    assert(dt);
+    assert(value);
+
+    HDmemcpy(value, dt->shared->u.enumer.value + membno*dt->shared->size, dt->shared->size);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tenum_nameof
+ *
+ * Purpose:	Finds the symbol name that corresponds to the specified VALUE
+ *		of an enumeration data type TYPE. At most SIZE characters of
+ *		the symbol name are copied into the NAME buffer. If the
+ *		entire symbol anem and null terminator do not fit in the NAME
+ *		buffer then as many characters as possible are copied (not
+ *		null terminated) and the function fails.
+ *
+ * Return:	Success:	Non-negative.
+ *
+ *		Failure:	Negative, first character of NAME is set to
+ *				null if SIZE allows it.
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, January  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tenum_nameof(hid_t type, const void *value, char *name/*out*/, size_t size)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tenum_nameof, FAIL)
+    H5TRACE4("e","ixxz",type,value,name,size);
+
+    /* Check args */
+    if (NULL==(dt=H5I_object_verify(type,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type")
+    if (H5T_ENUM!=dt->shared->type)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an enumeration data type")
+    if (!value)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no value supplied")
+    if (!name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name buffer supplied")
+
+    if (NULL==H5T_enum_nameof(dt, value, name, size))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "nameof query failed")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_enum_nameof
+ *
+ * Purpose:	Finds the symbol name that corresponds the the specified
+ *		VALUE of an enumeration data type DT. At most SIZE characters
+ *		of the symbol name are copied into the NAME buffer. If the
+ *		entire symbol name and null terminator do not fit in the NAME
+ *		buffer then as many characters as possible are copied and the
+ *		function returns failure.
+ *
+ *		If NAME is the null pointer and SIZE is zero then enough
+ *		space is allocated to hold the result and a pointer to that
+ *		memory is returned.
+ *
+ * Return:	Success:	Pointer to NAME
+ *
+ *		Failure:	NULL, name[0] is set to null.
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, January  4, 1999
+ *
+ * Modifications:
+ *              Raymond Lu
+ *              Wednesday, Febuary 9, 2005
+ *              Made a copy of original datatype and do sorting and search
+ *              on that copy, to protect the original order of members.
+ *-------------------------------------------------------------------------
+ */
+static char *
+H5T_enum_nameof(const H5T_t *dt, const void *value, char *name/*out*/, size_t size)
+{
+    unsigned	lt, md=0, rt;		/*indices for binary search	*/
+    int	cmp=(-1);		        /*comparison result		*/
+    H5T_t       *copied_dt = NULL;      /*do sorting in copied datatype */
+    char *ret_value;                    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_enum_nameof, NULL)
+
+    /* Check args */
+    assert(dt && H5T_ENUM==dt->shared->type);
+    assert(value);
+    assert(name || 0==size);
+    if (name && size>0) *name = '\0';
+
+    /* Sanity check */
+    if (dt->shared->u.enumer.nmembs == 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, NULL, "datatype has no members")
+
+    /* Do a binary search over the values to find the correct one.  Do sorting
+     * and search on the copied datatype to protect the original order. */
+    if (NULL==(copied_dt=H5T_copy(dt, H5T_COPY_ALL)))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to copy data type");
+    if(H5T_sort_value(copied_dt, NULL)<0)
+        HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOMPARE, NULL, "value sort failed")
+
+    lt = 0;
+    rt = copied_dt->shared->u.enumer.nmembs;
+
+    while (lt<rt) {
+	md = (lt+rt)/2;
+	cmp = HDmemcmp(value, copied_dt->shared->u.enumer.value+md*copied_dt->shared->size, copied_dt->shared->size);
+	if (cmp<0) {
+	    rt = md;
+	} else if (cmp>0) {
+	    lt = md+1;
+	} else {
+	    break;
+	}
+    }
+    /* Value was not yet defined. This fixes bug # 774, 2002/06/05 EIP */
+    if (cmp!=0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, NULL, "value is currently not defined")
+
+    /* Save result name */
+    if (!name && NULL==(name=H5MM_malloc(HDstrlen(copied_dt->shared->u.enumer.name[md])+1)))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed");
+    HDstrncpy(name, copied_dt->shared->u.enumer.name[md], size);
+    if (HDstrlen(copied_dt->shared->u.enumer.name[md])>=size)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_NOSPACE, NULL, "name has been truncated")
+
+    /* Set return value */
+    ret_value=name;
+
+    if (H5T_close(copied_dt)<0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, NULL, "unable to close data type");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tenum_valueof
+ *
+ * Purpose:	Finds the value that corresponds to the specified NAME f an
+ *		enumeration TYPE. The VALUE argument should be at least as
+ *		large as the value of H5Tget_size(type) in order to hold the
+ *		result.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, January  4, 1999
+ *
+ * Modifications:
+ *              Raymond Lu
+ *              Wednesday, Febuary 9, 2005
+ *              Made a copy of original datatype and do sorting and search
+ *              on that copy, to protect the original order of members.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tenum_valueof(hid_t type, const char *name, void *value/*out*/)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tenum_valueof, FAIL)
+    H5TRACE3("e","isx",type,name,value);
+
+    /* Check args */
+    if (NULL==(dt=H5I_object_verify(type,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type")
+    if (H5T_ENUM!=dt->shared->type)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an enumeration data type")
+    if (!name || !*name)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no name")
+    if (!value)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no value buffer")
+
+    if (H5T_enum_valueof(dt, name, value)<0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "valueof query failed")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_enum_valueof
+ *
+ * Purpose:	Finds the value that corresponds the the specified symbol
+ *		NAME of an enumeration data type DT and copy it to the VALUE
+ *		result buffer. The VALUE should be allocated by the caller to
+ *		be large enough for the result.
+ *
+ * Return:	Success:	Non-negative, value stored in VALUE.
+ *
+ *		Failure:	Negative, VALUE is undefined.
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, January  4, 1999
+ *
+ * Modifications:
+ *              Raymond Lu
+ *              Wednesday, Febuary 9, 2005
+ *              Made a copy of original datatype and do sorting and search
+ *              on that copy, to protect the original order of members.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T_enum_valueof(const H5T_t *dt, const char *name, void *value/*out*/)
+{
+    unsigned	lt, md=0, rt;		/*indices for binary search	*/
+    int	cmp=(-1);		        /*comparison result		*/
+    H5T_t       *copied_dt = NULL;      /*do sorting in copied datatype */
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_enum_valueof, FAIL)
+
+    /* Check args */
+    assert(dt && H5T_ENUM==dt->shared->type);
+    assert(name && *name);
+    assert(value);
+
+    /* Sanity check */
+    if (dt->shared->u.enumer.nmembs == 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, FAIL, "datatype has no members")
+
+    /* Do a binary search over the names to find the correct one.  Do sorting
+     * and search on the copied datatype to protect the original order. */
+    if (NULL==(copied_dt=H5T_copy(dt, H5T_COPY_ALL)))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to copy data type");
+    if(H5T_sort_name(copied_dt, NULL)<0)
+        HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOMPARE, FAIL, "value sort failed")
+
+    lt = 0;
+    rt = copied_dt->shared->u.enumer.nmembs;
+
+    while (lt<rt) {
+	md = (lt+rt)/2;
+	cmp = HDstrcmp(name, copied_dt->shared->u.enumer.name[md]);
+	if (cmp<0) {
+	    rt = md;
+	} else if (cmp>0) {
+	    lt = md+1;
+	} else {
+	    break;
+	}
+    }
+    /* Value was not yet defined. This fixes bug # 774, 2002/06/05 EIP */
+    if (cmp!=0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_NOTFOUND, FAIL, "string doesn't exist in the enumeration type")
+
+    HDmemcpy(value, copied_dt->shared->u.enumer.value+md*copied_dt->shared->size, copied_dt->shared->size);
+
+    if (H5T_close(copied_dt)<0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTCLOSEOBJ, FAIL, "unable to close data type");
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}

Added: packages/hdf5/branches/upstream/current/src/H5Tfields.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tfields.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tfields.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,500 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains commond functionality for fields in
+ *      enumerated & compound datatypes in the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_fields_interface
+
+
+#include "H5private.h"		/*generic functions			  */
+#include "H5Eprivate.h"		/*error handling			  */
+#include "H5Iprivate.h"		/*ID functions		   		  */
+#include "H5MMprivate.h"	/*memory management			  */
+#include "H5Tpkg.h"		/*data-type functions			  */
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_fields_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_fields_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_fields_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_fields_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_fields_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_nmembers
+ *
+ * Purpose:	Determines how many members TYPE_ID has.  The type must be
+ *		either a compound datatype or an enumeration datatype.
+ *
+ * Return:	Success:	Number of members defined in the datatype.
+ *
+ *		Failure:	Negative
+ *
+ * Errors:
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, December  8, 1997
+ *
+ * Modifications:
+ *	Robb Matzke, 22 Dec 1998
+ *	Also works with enumeration datatypes.
+ *-------------------------------------------------------------------------
+ */
+int
+H5Tget_nmembers(hid_t type_id)
+{
+    H5T_t	*dt = NULL;
+    int	ret_value;
+
+    FUNC_ENTER_API(H5Tget_nmembers, FAIL)
+    H5TRACE1("Is","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+
+    if((ret_value = H5T_get_nmembers(dt))<0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "cannot return member number")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_get_nmembers
+ *
+ * Purpose:	Private function for H5Tget_nmembers.  Determines how many
+ *              members DTYPE has.  The type must be either a compound data
+ *              type or an enumeration datatype.
+ *
+ * Return:	Success:	Number of members defined in the datatype.
+ *
+ *		Failure:	Negative
+ *
+ * Errors:
+ *
+ * Programmer:  Raymond Lu
+ *	        October 8, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5T_get_nmembers(const H5T_t *dt)
+{
+    int	ret_value;
+
+    FUNC_ENTER_NOAPI(H5T_get_nmembers, FAIL)
+
+    assert(dt);
+
+    if (H5T_COMPOUND==dt->shared->type)
+	ret_value = (int)dt->shared->u.compnd.nmembs;
+    else if (H5T_ENUM==dt->shared->type)
+	ret_value = (int)dt->shared->u.enumer.nmembs;
+    else
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "operation not supported for type class")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_member_name
+ *
+ * Purpose:	Returns the name of a member of a compound or enumeration
+ *		datatype. Members are stored in no particular order with
+ *		numbers 0 through N-1 where N is the value returned by
+ *		H5Tget_nmembers().
+ *
+ * Return:	Success:	Ptr to a string allocated with malloc().  The
+ *				caller is responsible for freeing the string.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *	Robb Matzke, 22 Dec 1998
+ *	Also works with enumeration datatypes.
+ *-------------------------------------------------------------------------
+ */
+char *
+H5Tget_member_name(hid_t type_id, unsigned membno)
+{
+    H5T_t	*dt = NULL;
+    char	*ret_value;
+
+    FUNC_ENTER_API(H5Tget_member_name, NULL)
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a datatype")
+
+    if((ret_value = H5T_get_member_name(dt, membno))==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "unable to get member name")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_get_member_name
+ *
+ * Purpose:	Private function for H5Tget_member_name.  Returns the name
+ *              of a member of a compound or enumeration datatype. Members
+ *              are stored in no particular order with numbers 0 through
+ *              N-1 where N is the value returned by H5Tget_nmembers().
+ *
+ * Return:	Success:	Ptr to a string allocated with malloc().  The
+ *				caller is responsible for freeing the string.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Raymond Lu
+ *              October 9, 2002
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+char *
+H5T_get_member_name(H5T_t const *dt, unsigned membno)
+{
+    char	*ret_value;
+
+    FUNC_ENTER_NOAPI(H5T_get_member_name, NULL)
+
+    assert(dt);
+
+    switch (dt->shared->type) {
+        case H5T_COMPOUND:
+            if (membno>=dt->shared->u.compnd.nmembs)
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid member number")
+            ret_value = H5MM_xstrdup(dt->shared->u.compnd.memb[membno].name);
+            break;
+
+        case H5T_ENUM:
+            if (membno>=dt->shared->u.enumer.nmembs)
+                HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid member number")
+            ret_value = H5MM_xstrdup(dt->shared->u.enumer.name[membno]);
+            break;
+
+        default:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "operation not supported for type class")
+    } /*lint !e788 All appropriate cases are covered */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Tget_member_index
+ *
+ * Purpose:     Returns the index of a member in a compound or enumeration
+ *              datatype by given name.Members are stored in no particular
+ *              order with numbers 0 through N-1 where N is the value
+ *              returned by H5Tget_nmembers().
+ *
+ * Return:      Success:        index of the member if exists.
+ *              Failure:        -1.
+ *
+ * Programmer:  Raymond Lu
+ *              Thursday, April 4, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Tget_member_index(hid_t type_id, const char *name)
+{
+    H5T_t       *dt = NULL;
+    int         ret_value=FAIL;
+    unsigned    i;
+
+    FUNC_ENTER_API(H5Tget_member_index, FAIL)
+    H5TRACE2("Is","is",type_id,name);
+
+    /* Check arguments */
+    assert(name);
+    if(NULL==(dt=H5I_object_verify(type_id,H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+
+    /* Locate member by name */
+    switch (dt->shared->type) {
+        case H5T_COMPOUND:
+            for(i=0; i< dt->shared->u.compnd.nmembs; i++) {
+                if(!HDstrcmp(dt->shared->u.compnd.memb[i].name, name))
+                    HGOTO_DONE((int)i)
+            }
+            break;
+        case H5T_ENUM:
+            for(i=0; i< dt->shared->u.enumer.nmembs; i++) {
+                if(!HDstrcmp(dt->shared->u.enumer.name[i], name))
+                    HGOTO_DONE((int)i)
+            }
+            break;
+        default:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "operation not supported for this type")
+    } /*lint !e788 All appropriate cases are covered */
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_sort_value
+ *
+ * Purpose:	Sorts the members of a compound datatype by their offsets;
+ *		sorts the members of an enum type by their values. This even
+ *		works for locked datatypes since it doesn't change the value
+ *		of the type.  MAP is an optional parallel integer array which
+ *		is also swapped along with members of DT.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_sort_value(const H5T_t *dt, int *map)
+{
+    unsigned	i, j, nmembs;
+    size_t	size;
+    hbool_t	swapped;
+    uint8_t	tbuf[32];
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_sort_value, FAIL)
+
+    /* Check args */
+    assert(dt);
+    assert(H5T_COMPOUND==dt->shared->type || H5T_ENUM==dt->shared->type);
+
+    /* Use a bubble sort because we can short circuit */
+    if (H5T_COMPOUND==dt->shared->type) {
+	if (H5T_SORT_VALUE!=dt->shared->u.compnd.sorted) {
+	    dt->shared->u.compnd.sorted = H5T_SORT_VALUE;
+	    nmembs = dt->shared->u.compnd.nmembs;
+	    for (i=nmembs-1, swapped=TRUE; i>0 && swapped; --i) {
+		for (j=0, swapped=FALSE; j<i; j++) {
+		    if (dt->shared->u.compnd.memb[j].offset >
+                            dt->shared->u.compnd.memb[j+1].offset) {
+                            H5T_cmemb_t tmp = dt->shared->u.compnd.memb[j];
+			dt->shared->u.compnd.memb[j] = dt->shared->u.compnd.memb[j+1];
+			dt->shared->u.compnd.memb[j+1] = tmp;
+			if (map) {
+			    int x = map[j];
+			    map[j] = map[j+1];
+			    map[j+1] = x;
+			}
+			swapped = TRUE;
+		    }
+		}
+	    }
+#ifndef NDEBUG
+	    /* I never trust a sort :-) -RPM */
+	    for (i=0; i<nmembs-1; i++) {
+		assert(dt->shared->u.compnd.memb[i].offset <
+		       dt->shared->u.compnd.memb[i+1].offset);
+	    }
+#endif
+	}
+    } else if (H5T_ENUM==dt->shared->type) {
+	if (H5T_SORT_VALUE!=dt->shared->u.enumer.sorted) {
+	    dt->shared->u.enumer.sorted = H5T_SORT_VALUE;
+	    nmembs = dt->shared->u.enumer.nmembs;
+	    size = dt->shared->size;
+	    assert(size<=sizeof(tbuf));
+	    for (i=nmembs-1, swapped=TRUE; i>0 && swapped; --i) {
+		for (j=0, swapped=FALSE; j<i; j++) {
+		    if (HDmemcmp(dt->shared->u.enumer.value+j*size,
+				 dt->shared->u.enumer.value+(j+1)*size,
+				 size)>0) {
+			/* Swap names */
+			char *tmp = dt->shared->u.enumer.name[j];
+			dt->shared->u.enumer.name[j] = dt->shared->u.enumer.name[j+1];
+			dt->shared->u.enumer.name[j+1] = tmp;
+
+			/* Swap values */
+			HDmemcpy(tbuf, dt->shared->u.enumer.value+j*size, size);
+			HDmemcpy(dt->shared->u.enumer.value+j*size,
+				 dt->shared->u.enumer.value+(j+1)*size, size);
+			HDmemcpy(dt->shared->u.enumer.value+(j+1)*size, tbuf, size);
+
+			/* Swap map */
+			if (map) {
+			    int x = map[j];
+			    map[j] = map[j+1];
+			    map[j+1] = x;
+			}
+
+			swapped = TRUE;
+		    }
+		}
+	    }
+#ifndef NDEBUG
+	    /* I never trust a sort :-) -RPM */
+	    for (i=0; i<nmembs-1; i++) {
+		assert(HDmemcmp(dt->shared->u.enumer.value+i*size,
+				dt->shared->u.enumer.value+(i+1)*size,
+				size)<0);
+	    }
+#endif
+	}
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_sort_name
+ *
+ * Purpose:	Sorts members of a compound or enumeration datatype by their
+ *		names. This even works for locked datatypes since it doesn't
+ *		change the value of the types.
+ *
+ * Return:	Success:	Non-negative
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, January  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_sort_name(const H5T_t *dt, int *map)
+{
+    unsigned	i, j, nmembs;
+    size_t	size;
+    hbool_t	swapped;
+    uint8_t	tbuf[32];
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_sort_name, FAIL)
+
+    /* Check args */
+    assert(dt);
+    assert(H5T_COMPOUND==dt->shared->type || H5T_ENUM==dt->shared->type);
+
+    /* Use a bubble sort because we can short circuit */
+    if (H5T_COMPOUND==dt->shared->type) {
+	if (H5T_SORT_NAME!=dt->shared->u.compnd.sorted) {
+	    dt->shared->u.compnd.sorted = H5T_SORT_NAME;
+	    nmembs = dt->shared->u.compnd.nmembs;
+	    for (i=nmembs-1, swapped=TRUE; i>0 && swapped; --i) {
+		for (j=0, swapped=FALSE; j<i; j++) {
+		    if (HDstrcmp(dt->shared->u.compnd.memb[j].name,
+				 dt->shared->u.compnd.memb[j+1].name)>0) {
+			H5T_cmemb_t tmp = dt->shared->u.compnd.memb[j];
+			dt->shared->u.compnd.memb[j] = dt->shared->u.compnd.memb[j+1];
+			dt->shared->u.compnd.memb[j+1] = tmp;
+			swapped = TRUE;
+			if (map) {
+			    int x = map[j];
+			    map[j] = map[j+1];
+			    map[j+1] = x;
+			}
+		    }
+		}
+	    }
+#ifndef NDEBUG
+	    /* I never trust a sort :-) -RPM */
+	    for (i=0; i<nmembs-1; i++) {
+		assert(HDstrcmp(dt->shared->u.compnd.memb[i].name,
+				dt->shared->u.compnd.memb[i+1].name)<0);
+	    }
+#endif
+	}
+    } else if (H5T_ENUM==dt->shared->type) {
+	if (H5T_SORT_NAME!=dt->shared->u.enumer.sorted) {
+	    dt->shared->u.enumer.sorted = H5T_SORT_NAME;
+	    nmembs = dt->shared->u.enumer.nmembs;
+	    size = dt->shared->size;
+	    assert(size<=sizeof(tbuf));
+	    for (i=nmembs-1, swapped=TRUE; i>0 && swapped; --i) {
+		for (j=0, swapped=FALSE; j<i; j++) {
+		    if (HDstrcmp(dt->shared->u.enumer.name[j],
+				 dt->shared->u.enumer.name[j+1])>0) {
+			/* Swap names */
+			char *tmp = dt->shared->u.enumer.name[j];
+			dt->shared->u.enumer.name[j] = dt->shared->u.enumer.name[j+1];
+			dt->shared->u.enumer.name[j+1] = tmp;
+
+			/* Swap values */
+			HDmemcpy(tbuf, dt->shared->u.enumer.value+j*size, size);
+			HDmemcpy(dt->shared->u.enumer.value+j*size,
+				 dt->shared->u.enumer.value+(j+1)*size, size);
+			HDmemcpy(dt->shared->u.enumer.value+(j+1)*size, tbuf, size);
+
+			/* Swap map */
+			if (map) {
+			    int x = map[j];
+			    map[j] = map[j+1];
+			    map[j+1] = x;
+			}
+
+			swapped = TRUE;
+		    }
+		}
+	    }
+#ifndef NDEBUG
+	    /* I never trust a sort :-) -RPM */
+	    for (i=0; i<nmembs-1; i++)
+		assert(HDstrcmp(dt->shared->u.enumer.name[i], dt->shared->u.enumer.name[i+1])<0);
+#endif
+	}
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Tfixed.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tfixed.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tfixed.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,179 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for fixed-point (i.e.
+ *      integer) datatypes in the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_fixed_interface
+
+
+#include "H5private.h"		/*generic functions			  */
+#include "H5Eprivate.h"		/*error handling			  */
+#include "H5Iprivate.h"		/*ID functions		   		  */
+#include "H5Tpkg.h"		/*data-type functions			  */
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_fixed_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_fixed_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_fixed_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_fixed_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_fixed_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_sign
+ *
+ * Purpose:	Retrieves the sign type for an integer type.
+ *
+ * Return:	Success:	The sign type.
+ *
+ *		Failure:	H5T_SGN_ERROR (Negative)
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *	Robb Matzke, 22 Dec 1998
+ *	Also works with derived datatypes.
+ *-------------------------------------------------------------------------
+ */
+H5T_sign_t
+H5Tget_sign(hid_t type_id)
+{
+    H5T_t		*dt = NULL;
+    H5T_sign_t		ret_value;
+
+    FUNC_ENTER_API(H5Tget_sign, H5T_SGN_ERROR)
+    H5TRACE1("Ts","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_SGN_ERROR, "not an integer datatype")
+
+    ret_value = H5T_get_sign(dt);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_get_sign
+ *
+ * Purpose:	Private function for H5Tget_sign.  Retrieves the sign type
+ *              for an integer type.
+ *
+ * Return:	Success:	The sign type.
+ *
+ *		Failure:	H5T_SGN_ERROR (Negative)
+ *
+ * Programmer:	Raymond Lu
+ *		October 8, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_sign_t
+H5T_get_sign(H5T_t const *dt)
+{
+    H5T_sign_t		ret_value;
+
+    FUNC_ENTER_NOAPI(H5T_get_sign, H5T_SGN_ERROR)
+
+    assert(dt);
+
+    /* Defer to parent */
+    while(dt->shared->parent)
+        dt = dt->shared->parent;
+
+    /* Check args */
+    if (H5T_INTEGER!=dt->shared->type)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, H5T_SGN_ERROR, "operation not defined for datatype class")
+
+    /* Sign */
+    ret_value = dt->shared->u.atomic.u.i.sign;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tset_sign
+ *
+ * Purpose:	Sets the sign property for an integer.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works with derived datatypes.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tset_sign(hid_t type_id, H5T_sign_t sign)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tset_sign, FAIL)
+    H5TRACE2("e","iTs",type_id,sign);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an integer datatype")
+    if (H5T_STATE_TRANSIENT!=dt->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "datatype is read-only")
+    if (sign < H5T_SGN_NONE || sign >= H5T_NSGN)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "illegal sign type")
+    if (H5T_ENUM==dt->shared->type && dt->shared->u.enumer.nmembs>0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not allowed after members are defined")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (H5T_INTEGER!=dt->shared->type)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not defined for datatype class")
+
+    /* Commit */
+    dt->shared->u.atomic.u.i.sign = sign;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Tfloat.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tfloat.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tfloat.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,444 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for floating-point
+ *      datatypes in the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_float_interface
+
+
+#include "H5private.h"		/*generic functions			  */
+#include "H5Eprivate.h"		/*error handling			  */
+#include "H5Iprivate.h"		/*ID functions		   		  */
+#include "H5Tpkg.h"		/*data-type functions			  */
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_float_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_float_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_float_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_float_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_float_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_fields
+ *
+ * Purpose:	Returns information about the locations of the various bit
+ *		fields of a floating point datatype.  The field positions
+ *		are bit positions in the significant region of the datatype.
+ *		Bits are numbered with the least significant bit number zero.
+ *
+ *		Any (or even all) of the arguments can be null pointers.
+ *
+ * Return:	Success:	Non-negative, field locations and sizes are
+ *				returned through the arguments.
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *	Robb Matzke, 22 Dec 1998
+ *	Also works with derived datatypes.
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tget_fields(hid_t type_id, size_t *spos/*out*/,
+	      size_t *epos/*out*/, size_t *esize/*out*/,
+	      size_t *mpos/*out*/, size_t *msize/*out*/)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tget_fields, FAIL)
+    H5TRACE6("e","ixxxxx",type_id,spos,epos,esize,mpos,msize);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (H5T_FLOAT != dt->shared->type)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not defined for datatype class")
+
+    /* Get values */
+    if (spos) *spos = dt->shared->u.atomic.u.f.sign;
+    if (epos) *epos = dt->shared->u.atomic.u.f.epos;
+    if (esize) *esize = dt->shared->u.atomic.u.f.esize;
+    if (mpos) *mpos = dt->shared->u.atomic.u.f.mpos;
+    if (msize) *msize = dt->shared->u.atomic.u.f.msize;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tset_fields
+ *
+ * Purpose:	Sets the locations and sizes of the various floating point
+ *		bit fields.  The field positions are bit positions in the
+ *		significant region of the datatype.  Bits are numbered with
+ *		the least significant bit number zero.
+ *
+ *		Fields are not allowed to extend beyond the number of bits of
+ *		precision, nor are they allowed to overlap with one another.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *	Robb Matzke, 22 Dec 1998
+ *	Also works for derived datatypes.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tset_fields(hid_t type_id, size_t spos, size_t epos, size_t esize,
+	      size_t mpos, size_t msize)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tset_fields, FAIL)
+    H5TRACE6("e","izzzzz",type_id,spos,epos,esize,mpos,msize);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+    if (H5T_STATE_TRANSIENT!=dt->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "datatype is read-only")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (H5T_FLOAT != dt->shared->type)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not defined for datatype class")
+    if (epos + esize > dt->shared->u.atomic.prec)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "exponent bit field size/location is invalid")
+    if (mpos + msize > dt->shared->u.atomic.prec)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "mantissa bit field size/location is invalid")
+    if (spos >= dt->shared->u.atomic.prec)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "sign location is not valid")
+
+    /* Check for overlap */
+    if (spos >= epos && spos < epos + esize)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "sign bit appears within exponent field")
+    if (spos >= mpos && spos < mpos + msize)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "sign bit appears within mantissa field")
+    if ((mpos < epos && mpos + msize > epos) ||
+            (epos < mpos && epos + esize > mpos))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "exponent and mantissa fields overlap")
+
+    /* Commit */
+    dt->shared->u.atomic.u.f.sign = spos;
+    dt->shared->u.atomic.u.f.epos = epos;
+    dt->shared->u.atomic.u.f.mpos = mpos;
+    dt->shared->u.atomic.u.f.esize = esize;
+    dt->shared->u.atomic.u.f.msize = msize;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_ebias
+ *
+ * Purpose:	Retrieves the exponent bias of a floating-point type.
+ *
+ * Return:	Success:	The bias
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *	Robb Matzke, 22 Dec 1998
+ *	Also works with derived datatypes.
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5Tget_ebias(hid_t type_id)
+{
+    H5T_t	*dt = NULL;
+    size_t	ret_value;
+
+    FUNC_ENTER_API(H5Tget_ebias, 0)
+    H5TRACE1("z","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a datatype")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (H5T_FLOAT != dt->shared->type)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, 0, "operation not defined for datatype class")
+
+    /* bias */
+    H5_ASSIGN_OVERFLOW(ret_value,dt->shared->u.atomic.u.f.ebias,uint64_t,size_t);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tset_ebias
+ *
+ * Purpose:	Sets the exponent bias of a floating-point type.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works with derived datatypes.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tset_ebias(hid_t type_id, size_t ebias)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tset_ebias, FAIL)
+    H5TRACE2("e","iz",type_id,ebias);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+    if (H5T_STATE_TRANSIENT!=dt->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "datatype is read-only")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (H5T_FLOAT != dt->shared->type)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not defined for datatype class")
+
+    /* Commit */
+    dt->shared->u.atomic.u.f.ebias = ebias;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_norm
+ *
+ * Purpose:	Returns the mantisssa normalization of a floating-point data
+ *		type.
+ *
+ * Return:	Success:	Normalization ID
+ *
+ *		Failure:	H5T_NORM_ERROR (Negative)
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works with derived datatypes.
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_norm_t
+H5Tget_norm(hid_t type_id)
+{
+    H5T_t	*dt = NULL;
+    H5T_norm_t	ret_value;
+
+    FUNC_ENTER_API(H5Tget_norm, H5T_NORM_ERROR)
+    H5TRACE1("Tn","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_NORM_ERROR, "not a datatype")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (H5T_FLOAT != dt->shared->type)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, H5T_NORM_ERROR, "operation not defined for datatype class")
+
+    /* norm */
+    ret_value = dt->shared->u.atomic.u.f.norm;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tset_norm
+ *
+ * Purpose:	Sets the mantissa normalization method for a floating point
+ *		datatype.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works for derived datatypes.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tset_norm(hid_t type_id, H5T_norm_t norm)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tset_norm, FAIL)
+    H5TRACE2("e","iTn",type_id,norm);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+    if (H5T_STATE_TRANSIENT!=dt->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "datatype is read-only")
+    if (norm < H5T_NORM_IMPLIED || norm > H5T_NORM_NONE)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "illegal normalization")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (H5T_FLOAT != dt->shared->type)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not defined for datatype class")
+
+    /* Commit */
+    dt->shared->u.atomic.u.f.norm = norm;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_inpad
+ *
+ * Purpose:	If any internal bits of a floating point type are unused
+ *		(that is, those significant bits which are not part of the
+ *		sign, exponent, or mantissa) then they will be filled
+ *		according to the value of this property.
+ *
+ * Return:	Success:	The internal padding type.
+ *
+ *		Failure:	H5T_PAD_ERROR (Negative)
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January	 9, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works for derived datatypes.
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_pad_t
+H5Tget_inpad(hid_t type_id)
+{
+    H5T_t	*dt = NULL;
+    H5T_pad_t	ret_value;
+
+    FUNC_ENTER_API(H5Tget_inpad, H5T_PAD_ERROR)
+    H5TRACE1("Tp","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_PAD_ERROR, "not a datatype")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (H5T_FLOAT != dt->shared->type)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, H5T_PAD_ERROR, "operation not defined for datatype class")
+
+    /* pad */
+    ret_value = dt->shared->u.atomic.u.f.pad;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tset_inpad
+ *
+ * Purpose:	If any internal bits of a floating point type are unused
+ *		(that is, those significant bits which are not part of the
+ *		sign, exponent, or mantissa) then they will be filled
+ *		according to the value of this property.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January	 9, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works for derived datatypes.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tset_inpad(hid_t type_id, H5T_pad_t pad)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tset_inpad, FAIL)
+    H5TRACE2("e","iTp",type_id,pad);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+    if (H5T_STATE_TRANSIENT!=dt->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "datatype is read-only")
+    if (pad < H5T_PAD_ZERO || pad >= H5T_NPAD)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "illegal internal pad type")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (H5T_FLOAT != dt->shared->type)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not defined for datatype class")
+
+    /* Commit */
+    dt->shared->u.atomic.u.f.pad = pad;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Tnative.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tnative.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tnative.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,831 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for querying
+ *      a "native" datatype for the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_native_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Pprivate.h"		/* Property lists			*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Tpkg.h"		/* Datatypes				*/
+
+/* Static local functions */
+static H5T_t *H5T_get_native_type(H5T_t *dt, H5T_direction_t direction,
+                                  size_t *struct_align, size_t *offset, size_t *comp_size);
+static H5T_t *H5T_get_native_integer(size_t prec, H5T_sign_t sign, H5T_direction_t direction,
+                                     size_t *struct_align, size_t *offset, size_t *comp_size);
+static H5T_t *H5T_get_native_float(size_t size, H5T_direction_t direction,
+                                   size_t *struct_align, size_t *offset, size_t *comp_size);
+static herr_t H5T_cmp_offset(size_t *comp_size, size_t *offset, size_t elem_size,
+                         size_t nelems, size_t align, size_t *struct_align);
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_native_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_native_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_native_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_native_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_native_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5Tget_native_type
+ *
+ * Purpose:     High-level API to return the native type of a datatype.
+ *              The native type is chosen by matching the size and class of
+ *              querried datatype from the following native premitive
+ *              datatypes:
+ *                      H5T_NATIVE_CHAR         H5T_NATIVE_UCHAR
+ *                      H5T_NATIVE_SHORT        H5T_NATIVE_USHORT
+ *                      H5T_NATIVE_INT          H5T_NATIVE_UINT
+ *                      H5T_NATIVE_LONG         H5T_NATIVE_ULONG
+ *                      H5T_NATIVE_LLONG        H5T_NATIVE_ULLONG
+ *
+ *                      H5T_NATIVE_FLOAT
+ *                      H5T_NATIVE_DOUBLE
+ *                      H5T_NATIVE_LDOUBLE
+ *
+ *              Compound, array, enum, and VL types all choose among these
+ *              types for theire members.  Time, Bifield, Opaque, Reference
+ *              types are only copy out.
+ *
+ * Return:      Success:        Returns the native data type if successful.
+ *
+ *              Failure:        negative
+ *
+ * Programmer:  Raymond Lu
+ *              Oct 3, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Tget_native_type(hid_t type_id, H5T_direction_t direction)
+{
+    H5T_t       *dt;                /* Datatype to create native datatype from */
+    H5T_t       *new_dt=NULL;       /* Datatype for native datatype created */
+    size_t      comp_size=0;        /* Compound datatype's size */
+    hid_t       ret_value;          /* Return value */
+
+    FUNC_ENTER_API(H5Tget_native_type, FAIL)
+    H5TRACE2("i","iTd",type_id,direction);
+
+    /* check argument */
+    if(NULL==(dt=H5I_object_verify(type_id, H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type")
+
+    if(direction!=H5T_DIR_DEFAULT && direction!=H5T_DIR_ASCEND
+            && direction!=H5T_DIR_DESCEND)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not valid direction value")
+
+    if((new_dt = H5T_get_native_type(dt, direction, NULL, NULL, &comp_size))==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "cannot retrieve native type")
+
+    if((ret_value=H5I_register(H5I_DATATYPE, new_dt)) < 0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register data type")
+
+done:
+    /* Error cleanup */
+    if(ret_value<0) {
+        if(new_dt)
+            if(H5T_close(new_dt)<0)
+                HDONE_ERROR(H5E_DATATYPE, H5E_CLOSEERROR, FAIL, "unable to release datatype")
+    } /* end if */
+
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5T_get_native_type
+ *
+ * Purpose:     Returns the native type of a datatype.
+ *
+ * Return:      Success:        Returns the native data type if successful.
+ *
+ *              Failure:        negative
+ *
+ * Programmer:  Raymond Lu
+ *              Oct 3, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5T_t*
+H5T_get_native_type(H5T_t *dtype, H5T_direction_t direction, size_t *struct_align, size_t *offset, size_t *comp_size)
+{
+    H5T_t       *dt;                /* Datatype to make native */
+    H5T_class_t h5_class;           /* Class of datatype to make native */
+    size_t      size;               /* Size of datatype to make native */
+    size_t      prec;               /* Precision of datatype to make native */
+    int         snmemb;             /* Number of members in compound & enum types */
+    unsigned    nmemb;              /* Number of members in compound & enum types */
+    H5T_t       *super_type;        /* Super type of VL, array and enum datatypes */
+    H5T_t       *nat_super_type;    /* Native form of VL, array & enum super datatype */
+    H5T_t       *new_type=NULL;     /* New native datatype */
+    unsigned    i;                  /* Local index variable */
+    H5T_t       *ret_value;         /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_get_native_type, NULL)
+
+    assert(dtype);
+
+    if((h5_class = H5T_get_class(dtype, FALSE))==H5T_NO_CLASS)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a valid class")
+
+    if((size =  H5T_get_size(dtype))==0)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a valid size")
+
+    switch(h5_class) {
+        case H5T_INTEGER:
+            {
+                H5T_sign_t  sign;       /* Signedness of integer type */
+
+                if((sign =  H5T_get_sign(dtype))==H5T_SGN_ERROR)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a valid signess")
+
+                prec =  dtype->shared->u.atomic.prec;
+
+                if((ret_value = H5T_get_native_integer(prec, sign, direction, struct_align, offset, comp_size))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot retrieve integer type")
+            }
+            break;
+
+        case H5T_FLOAT:
+            if((ret_value = H5T_get_native_float(size, direction, struct_align, offset, comp_size))==NULL)
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot retrieve float type")
+
+            break;
+
+        case H5T_STRING:
+            if((ret_value=H5T_copy(dtype, H5T_COPY_TRANSIENT))==NULL)
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot retrieve float type")
+
+            if(H5T_IS_VL_STRING(dtype->shared)) {
+                /* Update size, offset and compound alignment for parent. */
+                if(H5T_cmp_offset(comp_size, offset, sizeof(char *), 1, H5T_POINTER_COMP_ALIGN_g, struct_align)<0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot compute compound offset")
+            } else {
+                /* Update size, offset and compound alignment for parent. */
+                if(H5T_cmp_offset(comp_size, offset, sizeof(char), size, H5T_NATIVE_SCHAR_COMP_ALIGN_g, struct_align)<0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot compute compound offset")
+            }
+            break;
+
+        /* These 2 types will be supported in the future.  Simply return "not supported"
+         * message for now.*/
+        case H5T_TIME:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "time type is not supported yet")
+
+        case H5T_BITFIELD:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "bit field type is not supported yet")
+
+        case H5T_OPAQUE:
+            if((ret_value=H5T_copy(dtype, H5T_COPY_TRANSIENT))==NULL)
+                 HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot retrieve float type")
+
+            /* Update size, offset and compound alignment for parent. */
+            if(H5T_cmp_offset(comp_size, offset, sizeof(char), size, H5T_NATIVE_SCHAR_COMP_ALIGN_g, struct_align)<0)
+                HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot compute compound offset")
+            break;
+
+        case H5T_REFERENCE:
+            {
+                size_t align;
+                size_t ref_size;
+                int    not_equal;
+
+                if((ret_value=H5T_copy(dtype, H5T_COPY_TRANSIENT))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot retrieve float type")
+
+                /* Decide if the data type is object or dataset region reference. */
+                if(NULL==(dt=H5I_object(H5T_STD_REF_OBJ_g)))
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a data type")
+                not_equal = H5T_cmp(ret_value, dt, FALSE);
+
+                /* Update size, offset and compound alignment for parent. */
+                if(!not_equal) {
+                    align = H5T_HOBJREF_COMP_ALIGN_g;
+                    ref_size = sizeof(hobj_ref_t);
+                } else {
+                    align = H5T_HDSETREGREF_COMP_ALIGN_g;
+                    ref_size = sizeof(hdset_reg_ref_t);
+                }
+
+                if(H5T_cmp_offset(comp_size, offset, ref_size, 1, align, struct_align)<0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot compute compound offset")
+            }
+            break;
+
+        case H5T_COMPOUND:
+            {
+                H5T_t       *memb_type;     /* Datatype of member */
+                H5T_t       **memb_list;    /* List of compound member IDs */
+                size_t      *memb_offset;   /* List of member offsets in compound type, including member size and alignment */
+                size_t      children_size=0;/* Total size of compound members */
+                size_t      children_st_align=0;    /* The max alignment among compound members.  This'll be the compound alignment */
+                char        **comp_mname;   /* List of member names in compound type */
+
+                if((snmemb = H5T_get_nmembers(dtype))<=0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "compound data type doesn't have any member")
+                H5_ASSIGN_OVERFLOW(nmemb,snmemb,int,unsigned);
+
+                if((memb_list   = (H5T_t**)H5MM_malloc(nmemb*sizeof(H5T_t*)))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot allocate memory")
+                if((memb_offset = (size_t*)H5MM_calloc(nmemb*sizeof(size_t)))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot allocate memory")
+                if((comp_mname = (char**)H5MM_malloc(nmemb*sizeof(char*)))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot allocate memory")
+
+                /* Construct child compound type and retrieve a list of their IDs, offsets, total size, and alignment for compound type. */
+                for(i=0; i<nmemb; i++) {
+                    if((memb_type = H5T_get_member_type(dtype, i))==NULL)
+                        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "member type retrieval failed")
+
+                    if((comp_mname[i] = H5T_get_member_name(dtype, i))==NULL)
+                        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "member type retrieval failed")
+
+                    if((memb_list[i] = H5T_get_native_type(memb_type, direction, &children_st_align, &(memb_offset[i]), &children_size))==NULL)
+                        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "member identifier retrieval failed")
+
+                    if(H5T_close(memb_type)<0)
+                        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot close datatype")
+                }
+
+                /* The alignment for whole compound type */
+                if(children_st_align && children_size % children_st_align)
+                    children_size += children_st_align-(children_size % children_st_align);
+
+                /* Construct new compound type based on native type */
+                if((new_type=H5T_create(H5T_COMPOUND, children_size))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot create a compound type")
+
+                /* Insert members for the new compound type */
+                for(i=0; i<nmemb; i++) {
+                    if(H5T_insert(new_type, comp_mname[i], memb_offset[i], memb_list[i])<0)
+                        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot insert member to compound datatype")
+                }
+
+                /* Update size, offset and compound alignment for parent. */
+                if(offset)
+                    *offset = *comp_size;
+                if(struct_align && *struct_align < children_st_align)
+                    *struct_align = children_st_align;
+                *comp_size += children_size;
+
+                /* Close member data type */
+                for(i=0; i<nmemb; i++) {
+                    if(H5T_close(memb_list[i])<0)
+                        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot close datatype")
+
+                    /* Free member names in list */
+                    H5MM_xfree(comp_mname[i]);
+                }
+
+                /* Free lists for members */
+                H5MM_xfree(memb_list);
+                H5MM_xfree(memb_offset);
+                H5MM_xfree(comp_mname);
+
+                ret_value = new_type;
+            }
+            break;
+
+        case H5T_ENUM:
+            {
+                char        *memb_name;         /* Enum's member name */
+                void        *memb_value, *tmp_memb_value;        /* Enum's member value */
+                hid_t       super_type_id, nat_super_type_id;
+
+                /* Don't need to do anything special for alignment, offset since the ENUM type usually is integer. */
+
+                /* Retrieve base type for enumarate type */
+                if((super_type=H5T_get_super(dtype))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "unable to get base type for enumarate type")
+                if((nat_super_type = H5T_get_native_type(super_type, direction, struct_align, offset, comp_size))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "base native type retrieval failed")
+
+                if((super_type_id=H5I_register(H5I_DATATYPE, super_type))<0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot register datatype")
+                if((nat_super_type_id=H5I_register(H5I_DATATYPE, nat_super_type))<0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot register datatype")
+
+                /* Allocate room for the enum values */
+                if((tmp_memb_value = H5MM_calloc(H5T_get_size(super_type)))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot allocate memory")
+                if((memb_value = H5MM_calloc(H5T_get_size(nat_super_type)))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot allocate memory")
+
+                /* Construct new enum type based on native type */
+                if((new_type=H5T_enum_create(nat_super_type))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "unable to create enum type")
+
+                /* Retrieve member info and insert members into new enum type */
+                if((snmemb = H5T_get_nmembers(dtype))<=0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "enumarate data type doesn't have any member")
+                H5_ASSIGN_OVERFLOW(nmemb,snmemb,int,unsigned);
+                for(i=0; i<nmemb; i++) {
+                    if((memb_name=H5T_get_member_name(dtype, i))==NULL)
+                        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot get member name")
+                    if(H5T_get_member_value(dtype, i, tmp_memb_value)<0)
+                        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot get member value")
+                    HDmemcpy(memb_value, tmp_memb_value, H5T_get_size(super_type));
+
+                    if(H5Tconvert(super_type_id, nat_super_type_id, 1, memb_value, NULL, H5P_DEFAULT)<0)
+                        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot get member value")
+
+                    if(H5T_enum_insert(new_type, memb_name, memb_value)<0)
+                        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot insert member")
+                    H5MM_xfree(memb_name);
+                }
+                H5MM_xfree(memb_value);
+                H5MM_xfree(tmp_memb_value);
+
+                /* Close base type */
+                if(H5Tclose(nat_super_type_id)<0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot close datatype")
+                 /* Close super type */
+                if(H5Tclose(super_type_id)<0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot close datatype")
+
+                ret_value = new_type;
+            }
+            break;
+
+        case H5T_ARRAY:
+            {
+                int         sarray_rank;        /* Array's rank */
+                unsigned    array_rank;         /* Array's rank */
+                hsize_t     *dims = NULL;       /* Dimension sizes for array */
+                hsize_t     nelems = 1;
+                size_t      super_offset=0;
+                size_t      super_size=0;
+                size_t      super_align=0;
+
+                /* Retrieve dimension information for array data type */
+                if((sarray_rank=H5T_get_array_ndims(dtype))<=0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot get dimension rank")
+                H5_ASSIGN_OVERFLOW(array_rank,sarray_rank,int,unsigned);
+                if((dims = (hsize_t*)H5MM_malloc(array_rank*sizeof(hsize_t)))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot allocate memory")
+                if(H5T_get_array_dims(dtype, dims, NULL)<0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot get dimension size")
+
+                /* Retrieve base type for array type */
+                if((super_type=H5T_get_super(dtype))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "unable to get parent type for enumarate type")
+                if((nat_super_type = H5T_get_native_type(super_type, direction, &super_align,
+                                                         &super_offset, &super_size))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "parent native type retrieval failed")
+
+                /* Close super type */
+                if(H5T_close(super_type)<0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_CLOSEERROR, NULL, "cannot close datatype")
+
+                /* Create a new array type based on native type */
+                if((new_type=H5T_array_create(nat_super_type, sarray_rank, dims, NULL))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "unable to create array type")
+
+                /* Close base type */
+                if(H5T_close(nat_super_type)<0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_CLOSEERROR, NULL, "cannot close datatype")
+
+                for(i=0; i<array_rank; i++)
+                    nelems *= dims[i];
+                H5_CHECK_OVERFLOW(nelems,hsize_t,size_t);
+                if(H5T_cmp_offset(comp_size, offset, super_size, (size_t)nelems, super_align, struct_align)<0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot compute compound offset")
+
+                H5MM_xfree(dims);
+                ret_value = new_type;
+            }
+            break;
+
+        case H5T_VLEN:
+            {
+                size_t      vl_align = 0;
+                size_t      vl_size  = 0;
+                size_t      super_size=0;
+
+                /* Retrieve base type for array type */
+                if((super_type=H5T_get_super(dtype))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "unable to get parent type for enumarate type")
+                /* Don't need alignment, offset information if this VL isn't a field of compound type.  If it
+                 * is, go to a few steps below to compute the information directly. */
+                if((nat_super_type = H5T_get_native_type(super_type, direction, NULL, NULL, &super_size))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "parent native type retrieval failed")
+
+                /* Close super type */
+                if(H5T_close(super_type)<0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_CLOSEERROR, NULL, "cannot close datatype")
+
+                /* Create a new array type based on native type */
+                if((new_type=H5T_vlen_create(nat_super_type))==NULL)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "unable to create VL type")
+
+                /* Close base type */
+                if(H5T_close(nat_super_type)<0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_CLOSEERROR, NULL, "cannot close datatype")
+
+                /* Update size, offset and compound alignment for parent compound type directly. */
+                vl_align = H5T_HVL_COMP_ALIGN_g;
+                vl_size  = sizeof(hvl_t);
+
+                if(H5T_cmp_offset(comp_size, offset, vl_size, 1, vl_align, struct_align)<0)
+                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot compute compound offset")
+
+                ret_value = new_type;
+            }
+            break;
+
+        case H5T_NO_CLASS:
+        case H5T_NCLASSES:
+        default:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "data type doesn't match any native type")
+    }
+
+done:
+    /* Error cleanup */
+    if(ret_value==NULL) {
+        if(new_type)
+            if(H5T_close(new_type)<0)
+                HDONE_ERROR(H5E_DATATYPE, H5E_CLOSEERROR, NULL, "unable to release datatype")
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5T_get_native_integer
+ *
+ * Purpose:     Returns the native integer type of a datatype.
+ *
+ * Return:      Success:        Returns the native data type if successful.
+ *
+ *              Failure:        negative
+ *
+ * Programmer:  Raymond Lu
+ *              Oct 3, 2002
+ *
+ * Modifications: Pedro Vicente
+ *                Sep 4, 2004
+ * Choose the type based on the precision; this is to support cases
+ * like the Cray SV1, where the size of short is 8 but precision is 32
+ * (e.g an INT (size 8, prec 64) would be converted to a SHORT
+ * (size 8, prec 32) if the size was the deciding factor)
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5T_t*
+H5T_get_native_integer(size_t prec, H5T_sign_t sign, H5T_direction_t direction,
+                       size_t *struct_align, size_t *offset, size_t *comp_size)
+{
+    H5T_t       *dt;            /* Appropriate native datatype to copy */
+    hid_t       tid=(-1);       /* Datatype ID of appropriate native datatype */
+    size_t      align=0;        /* Alignment necessary for native datatype */
+    size_t  native_size=0;      /* Datatype size of the native type */
+    enum match_type {           /* The different kinds of integers we can match */
+        H5T_NATIVE_INT_MATCH_CHAR,
+        H5T_NATIVE_INT_MATCH_SHORT,
+        H5T_NATIVE_INT_MATCH_INT,
+        H5T_NATIVE_INT_MATCH_LONG,
+        H5T_NATIVE_INT_MATCH_LLONG,
+        H5T_NATIVE_INT_MATCH_UNKNOWN
+    } match=H5T_NATIVE_INT_MATCH_UNKNOWN;
+    H5T_t       *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_get_native_integer, NULL);
+
+    if(direction == H5T_DIR_DEFAULT || direction == H5T_DIR_ASCEND) {
+        if(prec<=H5Tget_precision(H5T_NATIVE_SCHAR)) {
+            match=H5T_NATIVE_INT_MATCH_CHAR;
+            native_size = sizeof(char);
+        } else if(prec<=H5Tget_precision(H5T_NATIVE_SHORT)) {
+            match=H5T_NATIVE_INT_MATCH_SHORT;
+            native_size = sizeof(short);
+        } else if(prec<=H5Tget_precision(H5T_NATIVE_INT)) {
+            match=H5T_NATIVE_INT_MATCH_INT;
+            native_size = sizeof(int);
+        } else if(prec<=H5Tget_precision(H5T_NATIVE_LONG)) {
+            match=H5T_NATIVE_INT_MATCH_LONG;
+            native_size = sizeof(long);
+        } else if(prec<=H5Tget_precision(H5T_NATIVE_LLONG)) {
+            match=H5T_NATIVE_INT_MATCH_LLONG;
+            native_size = sizeof(long_long);
+        } else {  /* If no native type matches the querried datatype, simply choose the type of biggest size. */
+            match=H5T_NATIVE_INT_MATCH_LLONG;
+            native_size = sizeof(long_long);
+        }
+    } else if(direction == H5T_DIR_DESCEND) {
+        if(prec>=H5Tget_precision(H5T_NATIVE_LLONG)) {
+            match=H5T_NATIVE_INT_MATCH_LLONG;
+            native_size = sizeof(long_long);
+        } else if(prec>=H5Tget_precision(H5T_NATIVE_LONG)) {
+            if(prec==H5Tget_precision(H5T_NATIVE_LONG)) {
+                match=H5T_NATIVE_INT_MATCH_LONG;
+                native_size = sizeof(long);
+            } else {
+                match=H5T_NATIVE_INT_MATCH_LLONG;
+                native_size = sizeof(long_long);
+            }
+        }
+        else if(prec>=H5Tget_precision(H5T_NATIVE_INT)) {
+            if(prec==H5Tget_precision(H5T_NATIVE_INT)) {
+                match=H5T_NATIVE_INT_MATCH_INT;
+                native_size = sizeof(int);
+            } else {
+                match=H5T_NATIVE_INT_MATCH_LONG;
+                native_size = sizeof(long);
+            }
+        }
+        else if(prec>=H5Tget_precision(H5T_NATIVE_SHORT)) {
+            if(prec==H5Tget_precision(H5T_NATIVE_SHORT)) {
+                match=H5T_NATIVE_INT_MATCH_SHORT;
+                native_size = sizeof(short);
+            } else {
+                match=H5T_NATIVE_INT_MATCH_INT;
+                native_size = sizeof(int);
+            }
+        }
+        else if(prec>=H5Tget_precision(H5T_NATIVE_SCHAR)) {
+            if(prec==H5Tget_precision(H5T_NATIVE_SCHAR)) {
+                match=H5T_NATIVE_INT_MATCH_CHAR;
+                native_size = sizeof(char);
+            } else {
+                match=H5T_NATIVE_INT_MATCH_SHORT;
+                native_size = sizeof(short);
+            }
+        }
+        else {  /* If no native type matches the queried datatype, simply choose the type of smallest size. */
+            match=H5T_NATIVE_INT_MATCH_CHAR;
+            native_size = sizeof(char);
+        }
+    }
+
+    /* Set the appropriate native datatype information */
+    switch(match) {
+        case H5T_NATIVE_INT_MATCH_CHAR:
+            if(sign==H5T_SGN_2)
+                tid = H5T_NATIVE_SCHAR;
+            else
+                tid = H5T_NATIVE_UCHAR;
+
+            align = H5T_NATIVE_SCHAR_COMP_ALIGN_g;
+            break;
+
+        case H5T_NATIVE_INT_MATCH_SHORT:
+            if(sign==H5T_SGN_2)
+                tid = H5T_NATIVE_SHORT;
+            else
+                tid = H5T_NATIVE_USHORT;
+            align = H5T_NATIVE_SHORT_COMP_ALIGN_g;
+            break;
+
+        case H5T_NATIVE_INT_MATCH_INT:
+            if(sign==H5T_SGN_2)
+                tid = H5T_NATIVE_INT;
+            else
+                tid = H5T_NATIVE_UINT;
+
+            align = H5T_NATIVE_INT_COMP_ALIGN_g;
+            break;
+
+        case H5T_NATIVE_INT_MATCH_LONG:
+            if(sign==H5T_SGN_2)
+                tid = H5T_NATIVE_LONG;
+            else
+                tid = H5T_NATIVE_ULONG;
+
+            align = H5T_NATIVE_LONG_COMP_ALIGN_g;
+            break;
+
+        case H5T_NATIVE_INT_MATCH_LLONG:
+            if(sign==H5T_SGN_2)
+                tid = H5T_NATIVE_LLONG;
+            else
+                tid = H5T_NATIVE_ULLONG;
+
+            align = H5T_NATIVE_LLONG_COMP_ALIGN_g;
+            break;
+
+        case H5T_NATIVE_INT_MATCH_UNKNOWN:
+        default:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "Unknown native integer match")
+    } /* end switch */
+
+    /* Create new native type */
+    assert(tid>=0);
+    if(NULL==(dt=H5I_object(tid)))
+         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a data type")
+
+    if((ret_value=H5T_copy(dt, H5T_COPY_TRANSIENT))==NULL)
+         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot copy type")
+
+    /* compute size and offset of compound type member. */
+    if(H5T_cmp_offset(comp_size, offset, native_size, 1, align, struct_align)<0)
+         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot compute compound offset")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5T_get_native_float
+ *
+ * Purpose:     Returns the native floatt type of a datatype.
+ *
+ * Return:      Success:        Returns the native data type if successful.
+ *
+ *              Failure:        negative
+ *
+ * Programmer:  Raymond Lu
+ *              Oct 3, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5T_t*
+H5T_get_native_float(size_t size, H5T_direction_t direction, size_t *struct_align, size_t *offset, size_t *comp_size)
+{
+    H5T_t       *dt=NULL;       /* Appropriate native datatype to copy */
+    hid_t       tid=(-1);       /* Datatype ID of appropriate native datatype */
+    size_t      align=0;        /* Alignment necessary for native datatype */
+    size_t 	native_size=0;  /* Datatype size of the native type */
+    enum match_type {           /* The different kinds of floating point types we can match */
+        H5T_NATIVE_FLOAT_MATCH_FLOAT,
+        H5T_NATIVE_FLOAT_MATCH_DOUBLE,
+        H5T_NATIVE_FLOAT_MATCH_LDOUBLE,
+        H5T_NATIVE_FLOAT_MATCH_UNKNOWN
+    } match=H5T_NATIVE_FLOAT_MATCH_UNKNOWN;
+    H5T_t       *ret_value;     /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_get_native_float, NULL)
+
+    assert(size>0);
+
+    if(direction == H5T_DIR_DEFAULT || direction == H5T_DIR_ASCEND) {
+        if(size<=sizeof(float)) {
+            match=H5T_NATIVE_FLOAT_MATCH_FLOAT;
+	    native_size = sizeof(float);
+        } else if(size<=sizeof(double)) {
+            match=H5T_NATIVE_FLOAT_MATCH_DOUBLE;
+	    native_size = sizeof(double);
+        } else if(size<=sizeof(long double)) {
+            match=H5T_NATIVE_FLOAT_MATCH_LDOUBLE;
+	    native_size = sizeof(long double);
+        } else {   /* If not match, return the biggest datatype */
+            match=H5T_NATIVE_FLOAT_MATCH_LDOUBLE;
+	    native_size = sizeof(long double);
+	}
+    } else {
+        if(size>=sizeof(long double)) {
+            match=H5T_NATIVE_FLOAT_MATCH_LDOUBLE;
+	    native_size = sizeof(long double);
+        } else if(size>=sizeof(double)) {
+            if(size==sizeof(double)) {
+                match=H5T_NATIVE_FLOAT_MATCH_DOUBLE;
+	    	native_size = sizeof(double);
+            } else {
+                match=H5T_NATIVE_FLOAT_MATCH_LDOUBLE;
+	    	native_size = sizeof(long double);
+	    }
+        }
+        else if(size>=sizeof(float)) {
+            if(size==sizeof(float)) {
+                match=H5T_NATIVE_FLOAT_MATCH_FLOAT;
+	    	native_size = sizeof(float);
+            } else {
+                match=H5T_NATIVE_FLOAT_MATCH_DOUBLE;
+	    	native_size = sizeof(double);
+	    }
+        }
+        else {
+            match=H5T_NATIVE_FLOAT_MATCH_FLOAT;
+	    native_size = sizeof(float);
+	}
+    }
+
+    /* Set the appropriate native floating point information */
+    switch(match) {
+        case H5T_NATIVE_FLOAT_MATCH_FLOAT:
+            tid = H5T_NATIVE_FLOAT;
+            align = H5T_NATIVE_FLOAT_COMP_ALIGN_g;
+            break;
+
+        case H5T_NATIVE_FLOAT_MATCH_DOUBLE:
+            tid = H5T_NATIVE_DOUBLE;
+            align = H5T_NATIVE_DOUBLE_COMP_ALIGN_g;
+            break;
+
+        case H5T_NATIVE_FLOAT_MATCH_LDOUBLE:
+            tid = H5T_NATIVE_LDOUBLE;
+            align = H5T_NATIVE_LDOUBLE_COMP_ALIGN_g;
+            break;
+
+        case H5T_NATIVE_FLOAT_MATCH_UNKNOWN:
+        default:
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "Unknown native floating-point match")
+    } /* end switch */
+
+    /* Create new native type */
+    assert(tid>=0);
+    if(NULL==(dt=H5I_object(tid)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a data type")
+    if((ret_value=H5T_copy(dt, H5T_COPY_TRANSIENT))==NULL)
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot retrieve float type")
+
+    /* compute offset of compound type member. */
+    if(H5T_cmp_offset(comp_size, offset, native_size, 1, align, struct_align)<0)
+         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "cannot compute compound offset")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_cmp_offset
+ *
+ * Purpose:	This function is only for convenience.  It computes the
+ *              compound type size, offset of the member being considered
+ *              and the alignment for the whole compound type.
+ *
+ * Return:	Success:        Non-negative value.
+ *
+ *		Failure:        Negative value.
+ *
+ * Programmer:	Raymond Lu
+ *		December  10, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T_cmp_offset(size_t *comp_size, size_t *offset, size_t elem_size,
+                      size_t nelems, size_t align, size_t *struct_align)
+{
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5T_cmp_offset, FAIL)
+
+    if(offset && comp_size) {
+        if(align>1 && *comp_size%align) {
+            /* Add alignment value */
+            *offset = *comp_size +  (align - *comp_size%align);
+            *comp_size += (align - *comp_size%align);
+        } else
+            *offset = *comp_size;
+
+        /* compute size of compound type member. */
+        *comp_size += nelems*elem_size;
+    }
+
+    if(struct_align && *struct_align < align)
+        *struct_align = align;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Toffset.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Toffset.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Toffset.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,257 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for setting & querying
+ *      the datatype offset for the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_offset_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Tpkg.h"		/* Datatypes				*/
+
+/* Static local functions */
+static herr_t H5T_set_offset(const H5T_t *dt, size_t offset);
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_offset_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_offset_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_offset_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_offset_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_offset_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_offset
+ *
+ * Purpose:	Retrieves the bit offset of the first significant bit.	The
+ *		signficant bits of an atomic datum can be offset from the
+ *		beginning of the memory for that datum by an amount of
+ *		padding. The `offset' property specifies the number of bits
+ *		of padding that appear to the "right of" the value.  That is,
+ *		if we have a 32-bit datum with 16-bits of precision having
+ *		the value 0x1122 then it will be layed out in memory as (from
+ *		small byte address toward larger byte addresses):
+ *
+ *		    Big	     Big       Little	Little
+ *		    Endian   Endian    Endian	Endian
+ *		    offset=0 offset=16 offset=0 offset=16
+ *
+ *		0:  [ pad]   [0x11]    [0x22]	[ pad]
+ *		1:  [ pad]   [0x22]    [0x11]	[ pad]
+ *		2:  [0x11]   [ pad]    [ pad]	[0x22]
+ *		3:  [0x22]   [ pad]    [ pad]	[0x11]
+ *
+ * Return:	Success:	The offset (non-negative)
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works for derived data types.
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Tget_offset(hid_t type_id)
+{
+    H5T_t	*dt = NULL;
+    int	ret_value;
+
+    FUNC_ENTER_API(H5Tget_offset, -1)
+    H5TRACE1("Is","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an atomic data type")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (!H5T_IS_ATOMIC(dt->shared))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "operation not defined for specified data type")
+
+    /* Offset */
+    ret_value = (int)dt->shared->u.atomic.offset;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tset_offset
+ *
+ * Purpose:	Sets the bit offset of the first significant bit.  The
+ *		signficant bits of an atomic datum can be offset from the
+ *		beginning of the memory for that datum by an amount of
+ *		padding. The `offset' property specifies the number of bits
+ *		of padding that appear to the "right of" the value.  That is,
+ *		if we have a 32-bit datum with 16-bits of precision having
+ *		the value 0x1122 then it will be layed out in memory as (from
+ *		small byte address toward larger byte addresses):
+ *
+ *		    Big	     Big       Little	Little
+ *		    Endian   Endian    Endian	Endian
+ *		    offset=0 offset=16 offset=0 offset=16
+ *
+ *		0:  [ pad]   [0x11]    [0x22]	[ pad]
+ *		1:  [ pad]   [0x22]    [0x11]	[ pad]
+ *		2:  [0x11]   [ pad]    [ pad]	[0x22]
+ *		3:  [0x22]   [ pad]    [ pad]	[0x11]
+ *
+ *		If the offset is incremented then the total size is
+ *		incremented also if necessary to prevent significant bits of
+ *		the value from hanging over the edge of the data type.
+ *
+ *		The offset of an H5T_STRING cannot be set to anything but
+ *		zero.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Moved real work to a private function.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tset_offset(hid_t type_id, size_t offset)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tset_offset, FAIL)
+    H5TRACE2("e","iz",type_id,offset);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an atomic data type")
+    if (H5T_STATE_TRANSIENT!=dt->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only")
+    if (H5T_STRING == dt->shared->type && offset != 0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "offset must be zero for this type")
+    if (H5T_ENUM==dt->shared->type && dt->shared->u.enumer.nmembs>0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not allowed after members are defined")
+    if (H5T_COMPOUND==dt->shared->type || H5T_REFERENCE==dt->shared->type || H5T_OPAQUE==dt->shared->type)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "operation not defined for this datatype")
+
+    /* Do the real work */
+    if (H5T_set_offset(dt, offset)<0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to set offset")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_set_offset
+ *
+ * Purpose:	Sets the bit offset of the first significant bit.  The
+ *		signficant bits of an atomic datum can be offset from the
+ *		beginning of the memory for that datum by an amount of
+ *		padding. The `offset' property specifies the number of bits
+ *		of padding that appear to the "right of" the value.  That is,
+ *		if we have a 32-bit datum with 16-bits of precision having
+ *		the value 0x1122 then it will be layed out in memory as (from
+ *		small byte address toward larger byte addresses):
+ *
+ *		    Big	     Big       Little	Little
+ *		    Endian   Endian    Endian	Endian
+ *		    offset=0 offset=16 offset=0 offset=16
+ *
+ *		0:  [ pad]   [0x11]    [0x22]	[ pad]
+ *		1:  [ pad]   [0x22]    [0x11]	[ pad]
+ *		2:  [0x11]   [ pad]    [ pad]	[0x22]
+ *		3:  [0x22]   [ pad]    [ pad]	[0x11]
+ *
+ *		If the offset is incremented then the total size is
+ *		incremented also if necessary to prevent significant bits of
+ *		the value from hanging over the edge of the data type.
+ *
+ *		The offset of an H5T_STRING cannot be set to anything but
+ *		zero.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works for derived data types.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T_set_offset(const H5T_t *dt, size_t offset)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_set_offset, FAIL)
+
+    /* Check args */
+    assert(dt);
+    assert(H5T_STRING!=dt->shared->type || 0==offset);
+    assert(H5T_REFERENCE!=dt->shared->type);
+    assert(H5T_OPAQUE!=dt->shared->type);
+    assert(H5T_COMPOUND!=dt->shared->type);
+    assert(!(H5T_ENUM==dt->shared->type && 0==dt->shared->u.enumer.nmembs));
+
+    if (dt->shared->parent) {
+	if (H5T_set_offset(dt->shared->parent, offset)<0)
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to set offset for base type")
+
+        /* Adjust size of datatype appropriately */
+        if(dt->shared->type==H5T_ARRAY)
+            dt->shared->size = dt->shared->parent->shared->size * dt->shared->u.array.nelem;
+        else if(dt->shared->type!=H5T_VLEN)
+            dt->shared->size = dt->shared->parent->shared->size;
+    } else {
+        if (offset+dt->shared->u.atomic.prec > 8*dt->shared->size)
+            dt->shared->size = (offset + dt->shared->u.atomic.prec + 7) / 8;
+        dt->shared->u.atomic.offset = offset;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Topaque.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Topaque.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Topaque.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,139 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for opaque
+ *      datatypes in the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_opaque_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Tpkg.h"		/* Datatypes				*/
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_opaque_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_opaque_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_opaque_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_opaque_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_opaque_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tset_tag
+ *
+ * Purpose:	Tag an opaque datatype with a unique ASCII identifier.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, May 20, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tset_tag(hid_t type_id, const char *tag)
+{
+    H5T_t	*dt=NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tset_tag, FAIL)
+    H5TRACE2("e","is",type_id,tag);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type")
+    if (H5T_STATE_TRANSIENT!=dt->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (H5T_OPAQUE!=dt->shared->type)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an opaque data type")
+    if (!tag)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no tag")
+    if (HDstrlen(tag) >= H5T_OPAQUE_TAG_MAX)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "tag too long")
+
+    /* Commit */
+    H5MM_xfree(dt->shared->u.opaque.tag);
+    dt->shared->u.opaque.tag = H5MM_strdup(tag);
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_tag
+ *
+ * Purpose:	Get tha tag associated with an opaque datatype.
+ *
+ * Return:	A pointer to an allocated string. The caller should free
+ *              the string. NULL is returned for errors.
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, May 20, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+char *
+H5Tget_tag(hid_t type_id)
+{
+    H5T_t	*dt=NULL;
+    char	*ret_value;
+
+    FUNC_ENTER_API(H5Tget_tag, NULL)
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a data type")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (H5T_OPAQUE != dt->shared->type)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "operation not defined for data type class")
+
+    /* result */
+    if (NULL==(ret_value=H5MM_strdup(dt->shared->u.opaque.tag)))
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Torder.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Torder.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Torder.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,142 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for setting & querying
+ *      the datatype byte order for the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_order_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Tpkg.h"		/* Datatypes				*/
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_order_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_order_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_order_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_order_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_order_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_order
+ *
+ * Purpose:	Returns the byte order of a data type.
+ *
+ * Return:	Success:	A byte order constant
+ *
+ *		Failure:	H5T_ORDER_ERROR (Negative)
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works for derived data types.
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_order_t
+H5Tget_order(hid_t type_id)
+{
+    H5T_t		*dt = NULL;
+    H5T_order_t		ret_value;
+
+    FUNC_ENTER_API(H5Tget_order, H5T_ORDER_ERROR)
+    H5TRACE1("To","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_ORDER_ERROR, "not a data type")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (!H5T_IS_ATOMIC(dt->shared))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, H5T_ORDER_ERROR, "operation not defined for specified data type")
+
+    /* Order */
+    ret_value = dt->shared->u.atomic.order;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tset_order
+ *
+ * Purpose:	Sets the byte order for a data type.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works for derived data types.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tset_order(hid_t type_id, H5T_order_t order)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tset_order, FAIL)
+    H5TRACE2("e","iTo",type_id,order);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type")
+    if (H5T_STATE_TRANSIENT!=dt->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only")
+    if (order < H5T_ORDER_LE || order > H5T_ORDER_NONE)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "illegal byte order")
+    if (H5T_ENUM==dt->shared->type && dt->shared->u.enumer.nmembs>0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not allowed after members are defined")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (!H5T_IS_ATOMIC(dt->shared))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "operation not defined for specified data type")
+
+    /* Commit */
+    dt->shared->u.atomic.order = order;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Tpad.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tpad.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tpad.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,146 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for setting & querying
+ *      the datatype padding for the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_pad_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Tpkg.h"		/* Datatypes				*/
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_pad_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_pad_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_pad_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_pad_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_pad_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_pad
+ *
+ * Purpose:	Gets the least significant pad type and the most significant
+ *		pad type and returns their values through the LSB and MSB
+ *		arguments, either of which may be the null pointer.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January	 9, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works with derived data types.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tget_pad(hid_t type_id, H5T_pad_t *lsb/*out*/, H5T_pad_t *msb/*out*/)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tget_pad, FAIL)
+    H5TRACE3("e","ixx",type_id,lsb,msb);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (!H5T_IS_ATOMIC(dt->shared))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "operation not defined for specified data type")
+
+    /* Get values */
+    if (lsb)
+        *lsb = dt->shared->u.atomic.lsb_pad;
+    if (msb)
+        *msb = dt->shared->u.atomic.msb_pad;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tset_pad
+ *
+ * Purpose:	Sets the LSB and MSB pad types.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January	 9, 1998
+ *
+ * Modifications:
+ *	Robb Matzke, 22 Dec 1998
+ *	Also works with derived data types.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tset_pad(hid_t type_id, H5T_pad_t lsb, H5T_pad_t msb)
+{
+    H5T_t *dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tset_pad, FAIL)
+    H5TRACE3("e","iTpTp",type_id,lsb,msb);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data type")
+    if (H5T_STATE_TRANSIENT!=dt->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "data type is read-only")
+    if (lsb < H5T_PAD_ZERO || lsb >= H5T_NPAD || msb < H5T_PAD_ZERO || msb >= H5T_NPAD)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid pad type")
+    if (H5T_ENUM==dt->shared->type && dt->shared->u.enumer.nmembs>0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not allowed after members are defined")
+    while (dt->shared->parent)
+        dt = dt->shared->parent; /*defer to parent*/
+    if (!H5T_IS_ATOMIC(dt->shared))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "operation not defined for specified data type")
+
+    /* Commit */
+    dt->shared->u.atomic.lsb_pad = lsb;
+    dt->shared->u.atomic.msb_pad = msb;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Tpkg.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tpkg.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tpkg.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,894 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Robb Matzke <matzke at llnl.gov>
+ *		Monday, December  8, 1997
+ *
+ * Purpose:	This file contains declarations which are visible only within
+ *		the H5T package.  Source files outside the H5T package should
+ *		include H5Tprivate.h instead.
+ */
+#ifndef H5T_PACKAGE
+#error "Do not include this file outside the H5T package!"
+#endif
+
+#ifndef _H5Tpkg_H
+#define _H5Tpkg_H
+
+/*
+ * Define this to enable debugging.
+ */
+#ifdef NDEBUG
+#  undef H5T_DEBUG
+#endif
+
+/* Get package's private header */
+#include "H5Tprivate.h"
+
+/* Other private headers needed by this file */
+#include "H5Fprivate.h"		/* Files				*/
+
+/* Other public headers needed by this file */
+#include "H5Spublic.h"		/* Dataspace functions			*/
+
+/* Number of reserved IDs in ID group */
+#define H5T_RESERVED_ATOMS 	8
+
+/* Length of debugging name buffer */
+#define H5T_NAMELEN		32
+
+/* Macro to ease detecting "complex" datatypes (i.e. those with base types or fields) */
+#define H5T_IS_COMPLEX(t)       ((t)==H5T_COMPOUND || (t)==H5T_ENUM || (t)==H5T_VLEN || (t)==H5T_ARRAY)
+
+/* Macro to ease detecting fixed "string" datatypes */
+#define H5T_IS_FIXED_STRING(dt)   (H5T_STRING == (dt)->type)
+
+/* Macro to ease detecting variable-length "string" datatypes */
+#define H5T_IS_VL_STRING(dt)    (H5T_VLEN == (dt)->type && H5T_VLEN_STRING == (dt)->u.vlen.type)
+
+/* Macro to ease detecting fixed or variable-length "string" datatypes */
+#define H5T_IS_STRING(dt)       (H5T_IS_FIXED_STRING(dt) || H5T_IS_VL_STRING(dt))
+
+/* Macro to ease detecting atomic datatypes */
+#define H5T_IS_ATOMIC(dt)       (!(H5T_IS_COMPLEX((dt)->type) || (dt)->type==H5T_OPAQUE))
+
+/* Statistics about a conversion function */
+struct H5T_stats_t {
+    unsigned	ncalls;			/*num calls to conversion function   */
+    hsize_t	nelmts;			/*total data points converted	     */
+    H5_timer_t	timer;			/*total time for conversion	     */
+};
+
+/* The datatype conversion database */
+struct H5T_path_t {
+    char	name[H5T_NAMELEN];	/*name for debugging only	     */
+    H5T_t	*src;			/*source datatype ID		     */
+    H5T_t	*dst;			/*destination datatype ID	     */
+    H5T_conv_t	func;			/*data conversion function	     */
+    hbool_t	is_hard;		/*is it a hard function?	     */
+    hbool_t	is_noop;		/*is it the noop conversion?	     */
+    H5T_stats_t	stats;			/*statistics for the conversion	     */
+    H5T_cdata_t	cdata;			/*data for this function	     */
+};
+
+typedef struct H5T_atomic_t {
+    H5T_order_t		order;	/*byte order				     */
+    size_t		prec;	/*precision in bits			     */
+    size_t		offset; /*bit position of lsb of value		     */
+    H5T_pad_t	        lsb_pad;/*type of lsb padding			     */
+    H5T_pad_t		msb_pad;/*type of msb padding			     */
+    union {
+	struct {
+	    H5T_sign_t	sign;	/*type of integer sign			     */
+	} i;			/*integer; integer types		     */
+
+	struct {
+	    size_t	sign;	/*bit position of sign bit		     */
+	    size_t	epos;	/*position of lsb of exponent		     */
+	    size_t	esize;	/*size of exponent in bits		     */
+	    uint64_t	ebias;	/*exponent bias				     */
+	    size_t	mpos;	/*position of lsb of mantissa		     */
+	    size_t	msize;	/*size of mantissa			     */
+	    H5T_norm_t	norm;	/*normalization				     */
+	    H5T_pad_t	pad;	/*type of padding for internal bits	     */
+	} f;			/*floating-point types			     */
+
+	struct {
+	    H5T_cset_t	cset;	/*character set				     */
+	    H5T_str_t	pad;	/*space or null padding of extra bytes	     */
+	} s;			/*string types				     */
+
+	struct {
+	    H5R_type_t	rtype;	/*type of reference stored		     */
+	} r;			/*reference types			     */
+    } u;
+} H5T_atomic_t;
+
+/* How members are sorted for compound or enum datatypes */
+typedef enum H5T_sort_t {
+    H5T_SORT_NONE	= 0,		/*not sorted			     */
+    H5T_SORT_NAME	= 1,		/*sorted by member name		     */
+    H5T_SORT_VALUE	= 2 		/*sorted by memb offset or enum value*/
+} H5T_sort_t;
+
+/* A compound datatype */
+typedef struct H5T_compnd_t {
+    unsigned	nalloc;		/*num entries allocated in MEMB array*/
+    unsigned	nmembs;		/*number of members defined in struct*/
+    H5T_sort_t	sorted;		/*how are members sorted?	     */
+    hbool_t     packed;		/*are members packed together?       */
+    struct H5T_cmemb_t	*memb;	/*array of struct members	     */
+} H5T_compnd_t;
+
+/* An enumeration datatype */
+typedef struct H5T_enum_t {
+    unsigned	nalloc;		/*num entries allocated		     */
+    unsigned	nmembs;		/*number of members defined in enum  */
+    H5T_sort_t	sorted;		/*how are members sorted?	     */
+    uint8_t	*value;		/*array of values		     */
+    char	**name;		/*array of symbol names		     */
+} H5T_enum_t;
+
+/* VL function pointers */
+typedef ssize_t (*H5T_vlen_getlenfunc_t)(const void *vl_addr);
+typedef void * (*H5T_vlen_getptrfunc_t)(void *vl_addr);
+typedef htri_t (*H5T_vlen_isnullfunc_t)(const H5F_t *f, void *vl_addr);
+typedef herr_t (*H5T_vlen_readfunc_t)(H5F_t *f, hid_t dxpl_id, void *_vl, void *buf, size_t len);
+typedef herr_t (*H5T_vlen_writefunc_t)(H5F_t *f, hid_t dxpl_id, const H5T_vlen_alloc_info_t *vl_alloc_info, void *_vl, void *buf, void *_bg, size_t seq_len, size_t base_size);
+typedef herr_t (*H5T_vlen_setnullfunc_t)(H5F_t *f, hid_t dxpl_id, void *_vl, void *_bg);
+
+/* VL types */
+typedef enum {
+    H5T_VLEN_BADTYPE =  -1, /* invalid VL Type */
+    H5T_VLEN_SEQUENCE=0,    /* VL sequence */
+    H5T_VLEN_STRING,        /* VL string */
+    H5T_VLEN_MAXTYPE        /* highest type (Invalid as true type) */
+} H5T_vlen_type_t;
+
+/* A VL datatype */
+typedef struct H5T_vlen_t {
+    H5T_vlen_type_t     type;   /* Type of VL data in buffer */
+    H5T_vlen_loc_t      loc;    /* Location of VL data in buffer */
+    H5T_cset_t          cset;   /* For VL string. character set */
+    H5T_str_t           pad;    /* For VL string.  space or null padding of
+                                 * extra bytes */
+    H5F_t *f;                   /* File ID (if VL data is on disk) */
+    H5T_vlen_getptrfunc_t getptr;   /* Function to get VL sequence pointer */
+    H5T_vlen_getlenfunc_t getlen;   /* Function to get VL sequence size (in element units, not bytes) */
+    H5T_vlen_isnullfunc_t isnull;   /* Function to check if VL value is NIL */
+    H5T_vlen_readfunc_t read;   /* Function to read VL sequence into buffer */
+    H5T_vlen_writefunc_t write; /* Function to write VL sequence from buffer */
+    H5T_vlen_setnullfunc_t setnull; /* Function to set a VL value to NIL */
+} H5T_vlen_t;
+
+/* An opaque datatype */
+typedef struct H5T_opaque_t {
+    char		*tag;		/*short type description string	     */
+} H5T_opaque_t;
+
+/* An array datatype */
+typedef struct H5T_array_t {
+    size_t	nelem;		/* total number of elements in array */
+    int		ndims;		/* member dimensionality        */
+    size_t	dim[H5S_MAX_RANK];  /* size in each dimension       */
+    int		perm[H5S_MAX_RANK]; /* index permutation            */
+} H5T_array_t;
+
+typedef enum H5T_state_t {
+    H5T_STATE_TRANSIENT, 		/*type is a modifiable transient     */
+    H5T_STATE_RDONLY,			/*transient, not modifiable, closable*/
+    H5T_STATE_IMMUTABLE,		/*constant, not closable	     */
+    H5T_STATE_NAMED,			/*named constant, not open	     */
+    H5T_STATE_OPEN			/*named constant, open object header */
+} H5T_state_t;
+
+    /* This struct is shared between all occurances of an open named type */
+typedef struct H5T_shared_t {
+    hsize_t		fo_count; /* number of references to this file object */
+    H5T_state_t		state;	/*current state of the type		     */
+    H5T_class_t		type;	/*which class of type is this?		     */
+    H5F_t		*sh_file;/*file pointer if this is a shared type     */
+    size_t		size;	/*total size of an instance of this type     */
+    hbool_t		force_conv;/* Set if this type always needs to be converted and H5T_conv_noop cannot be called */
+    struct H5T_t	*parent;/*parent type for derived datatypes	     */
+    union {
+        H5T_atomic_t	atomic; /* an atomic datatype              */
+        H5T_compnd_t	compnd; /* a compound datatype (struct)    */
+        H5T_enum_t	enumer; /* an enumeration type (enum)       */
+        H5T_vlen_t	vlen;   /* a variable-length datatype       */
+        H5T_opaque_t	opaque; /* an opaque datatype              */
+        H5T_array_t	array;  /* an array datatype                */
+    } u;
+} H5T_shared_t;
+
+struct H5T_t {
+    H5G_entry_t     ent;    /* entry information if the type is a named type */
+    H5T_shared_t   *shared; /* all other information */
+};
+
+/* A compound datatype member */
+typedef struct H5T_cmemb_t {
+    char		*name;		/*name of this member		     */
+    size_t		offset;		/*offset from beginning of struct    */
+    size_t		size;		/*total size: dims * type_size	     */
+    struct H5T_t	*type;		/*type of this member		     */
+} H5T_cmemb_t;
+
+/* The master list of soft conversion functions */
+typedef struct H5T_soft_t {
+    char	name[H5T_NAMELEN];	/*name for debugging only	     */
+    H5T_class_t src;			/*source datatype class	     */
+    H5T_class_t dst;			/*destination datatype class	     */
+    H5T_conv_t	func;			/*the conversion function	     */
+} H5T_soft_t;
+
+/* Bit search direction */
+typedef enum H5T_sdir_t {
+    H5T_BIT_LSB,			/*search lsb toward msb		     */
+    H5T_BIT_MSB				/*search msb toward lsb		     */
+} H5T_sdir_t;
+
+/* The overflow handler */
+H5_DLLVAR H5T_overflow_t H5T_overflow_g;
+
+/* The native endianess of the platform */
+H5_DLLVAR H5T_order_t H5T_native_order_g;
+
+/*
+ * Alignment information for native types. A value of N indicates that the
+ * data must be aligned on an address ADDR such that 0 == ADDR mod N. When
+ * N=1 no alignment is required; N=0 implies that alignment constraints were
+ * not calculated.  These alignment info is only for H5Tget_native_type.
+ * These values are used for structure alignment.
+ */
+H5_DLLVAR size_t	H5T_NATIVE_SCHAR_COMP_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_SHORT_COMP_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_COMP_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_LONG_COMP_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_LLONG_COMP_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_FLOAT_COMP_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_DOUBLE_COMP_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_LDOUBLE_COMP_ALIGN_g;
+
+H5_DLLVAR size_t H5T_POINTER_COMP_ALIGN_g;
+H5_DLLVAR size_t H5T_HVL_COMP_ALIGN_g;
+H5_DLLVAR size_t H5T_HOBJREF_COMP_ALIGN_g;
+H5_DLLVAR size_t H5T_HDSETREGREF_COMP_ALIGN_g;
+
+/*
+ * Alignment information for native types. A value of N indicates that the
+ * data must be aligned on an address ADDR such that 0 == ADDR mod N. When
+ * N=1 no alignment is required; N=0 implies that alignment constraints were
+ * not calculated.
+ */
+H5_DLLVAR size_t	H5T_NATIVE_SCHAR_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UCHAR_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_SHORT_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_USHORT_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_LONG_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_ULONG_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_LLONG_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_ULLONG_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_FLOAT_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_DOUBLE_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_LDOUBLE_ALIGN_g;
+
+/* C9x alignment constraints */
+H5_DLLVAR size_t	H5T_NATIVE_INT8_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT8_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_LEAST8_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_LEAST8_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_FAST8_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_FAST8_ALIGN_g;
+
+H5_DLLVAR size_t	H5T_NATIVE_INT16_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT16_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_LEAST16_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_LEAST16_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_FAST16_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_FAST16_ALIGN_g;
+
+H5_DLLVAR size_t	H5T_NATIVE_INT32_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT32_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_LEAST32_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_LEAST32_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_FAST32_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_FAST32_ALIGN_g;
+
+H5_DLLVAR size_t	H5T_NATIVE_INT64_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT64_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_LEAST64_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_LEAST64_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_INT_FAST64_ALIGN_g;
+H5_DLLVAR size_t	H5T_NATIVE_UINT_FAST64_ALIGN_g;
+
+/* Useful floating-point values for conversion routines */
+/* (+/- Inf for all floating-point types) */
+H5_DLLVAR float H5T_NATIVE_FLOAT_POS_INF_g;
+H5_DLLVAR float H5T_NATIVE_FLOAT_NEG_INF_g;
+H5_DLLVAR double H5T_NATIVE_DOUBLE_POS_INF_g;
+H5_DLLVAR double H5T_NATIVE_DOUBLE_NEG_INF_g;
+
+/* Common functions */
+H5_DLL H5T_t *H5T_create(H5T_class_t type, size_t size);
+H5_DLL H5T_t *H5T_alloc(void);
+H5_DLL herr_t H5T_free(H5T_t *dt);
+H5_DLL H5T_sign_t H5T_get_sign(H5T_t const *dt);
+H5_DLL H5T_t *H5T_get_super(H5T_t *dt);
+H5_DLL char  *H5T_get_member_name(H5T_t const *dt, unsigned membno);
+H5_DLL herr_t H5T_get_member_value(const H5T_t *dt, unsigned membno, void *value);
+H5_DLL int H5T_get_nmembers(const H5T_t *dt);
+H5_DLL herr_t H5T_insert(const H5T_t *parent, const char *name, size_t offset,
+        const H5T_t *member);
+H5_DLL H5T_t *H5T_enum_create(const H5T_t *parent);
+H5_DLL herr_t H5T_enum_insert(const H5T_t *dt, const char *name, const void *value);
+H5_DLL int    H5T_get_array_ndims(H5T_t *dt);
+H5_DLL int    H5T_get_array_dims(H5T_t *dt, hsize_t dims[], int perm[]);
+H5_DLL herr_t H5T_sort_value(const H5T_t *dt, int *map);
+H5_DLL herr_t H5T_sort_name(const H5T_t *dt, int *map);
+H5_DLL herr_t H5T_set_size(H5T_t *dt, size_t size);
+
+/* Conversion functions */
+H5_DLL herr_t H5T_conv_noop(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+
+H5_DLL herr_t H5T_conv_order(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_order_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_struct(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_struct_opt(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_vlen(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_array(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_i_i(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_f_f(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_f_i(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_i_f(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_s_s(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_b_b(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+			    size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *_buf, void *bkg,
+                            hid_t dset_xfer_plist);
+
+H5_DLL herr_t H5T_conv_schar_uchar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uchar_schar(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_schar_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_schar_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uchar_short(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uchar_ushort(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+                            size_t nelmts, size_t buf_stride,
+                            size_t bkg_stride, void *buf, void *bkg,
+                            hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_schar_int(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_schar_uint(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uchar_int(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uchar_uint(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_schar_long(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_schar_ulong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uchar_long(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uchar_ulong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_schar_llong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_schar_ullong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uchar_llong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uchar_ullong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+
+H5_DLL herr_t H5T_conv_short_schar(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_short_uchar(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ushort_schar(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ushort_uchar(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_short_ushort(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ushort_short(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_short_int(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_short_uint(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ushort_int(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ushort_uint(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_short_long(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_short_ulong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ushort_long(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ushort_ulong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_short_llong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_short_ullong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ushort_llong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ushort_ullong(hid_t src_id, hid_t dst_id,
+				      H5T_cdata_t *cdata, size_t nelmts,
+				      size_t buf_stride, size_t bkg_stride,
+                                      void *buf, void *bkg,
+                                      hid_t dset_xfer_plist);
+
+H5_DLL herr_t H5T_conv_int_schar(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_int_uchar(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uint_schar(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uint_uchar(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_int_short(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_int_ushort(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uint_short(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uint_ushort(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_int_uint(hid_t src_id, hid_t dst_id,
+				 H5T_cdata_t *cdata, size_t nelmts,
+				 size_t buf_stride, size_t bkg_stride,
+                                 void *buf, void *bkg,
+                                 hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uint_int(hid_t src_id, hid_t dst_id,
+				 H5T_cdata_t *cdata, size_t nelmts,
+				 size_t buf_stride, size_t bkg_stride,
+                                 void *buf, void *bkg,
+                                 hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_int_long(hid_t src_id, hid_t dst_id,
+				 H5T_cdata_t *cdata, size_t nelmts,
+				 size_t buf_stride, size_t bkg_stride,
+                                 void *buf, void *bkg,
+                                 hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_int_ulong(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uint_long(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uint_ulong(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_int_llong(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_int_ullong(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uint_llong(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_uint_ullong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+
+H5_DLL herr_t H5T_conv_long_schar(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_long_uchar(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ulong_schar(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ulong_uchar(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_long_short(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_long_ushort(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ulong_short(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ulong_ushort(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_long_int(hid_t src_id, hid_t dst_id,
+				 H5T_cdata_t *cdata, size_t nelmts,
+				 size_t buf_stride, size_t bkg_stride,
+                                 void *buf, void *bkg,
+                                 hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_long_uint(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ulong_int(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ulong_uint(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_long_ulong(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ulong_long(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_long_llong(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_long_ullong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ulong_llong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ulong_ullong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+
+H5_DLL herr_t H5T_conv_llong_schar(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_llong_uchar(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ullong_schar(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ullong_uchar(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_llong_short(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_llong_ushort(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ullong_short(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ullong_ushort(hid_t src_id, hid_t dst_id,
+				      H5T_cdata_t *cdata, size_t nelmts,
+				      size_t buf_stride, size_t bkg_stride,
+                                      void *buf, void *bkg,
+                                      hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_llong_int(hid_t src_id, hid_t dst_id,
+				  H5T_cdata_t *cdata, size_t nelmts,
+				  size_t buf_stride, size_t bkg_stride,
+                                  void *buf, void *bkg,
+                                  hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_llong_uint(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ullong_int(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ullong_uint(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_llong_long(hid_t src_id, hid_t dst_id,
+				   H5T_cdata_t *cdata, size_t nelmts,
+				   size_t buf_stride, size_t bkg_stride,
+                                   void *buf, void *bkg,
+                                   hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_llong_ulong(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ullong_long(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ullong_ulong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_llong_ullong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_ullong_llong(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+
+H5_DLL herr_t H5T_conv_float_double(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_double_float(hid_t src_id, hid_t dst_id,
+				     H5T_cdata_t *cdata, size_t nelmts,
+				     size_t buf_stride, size_t bkg_stride,
+                                     void *buf, void *bkg,
+                                     hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_conv_i32le_f64le(hid_t src_id, hid_t dst_id,
+				    H5T_cdata_t *cdata, size_t nelmts,
+				    size_t buf_stride, size_t bkg_stride,
+                                    void *_buf, void *bkg,
+                                    hid_t dset_xfer_plist);
+
+/* Bit twiddling functions */
+H5_DLL void H5T_bit_copy(uint8_t *dst, size_t dst_offset, const uint8_t *src,
+			  size_t src_offset, size_t size);
+H5_DLL void H5T_bit_set(uint8_t *buf, size_t offset, size_t size,
+			 hbool_t value);
+H5_DLL hsize_t H5T_bit_get_d(uint8_t *buf, size_t offset, size_t size);
+H5_DLL void H5T_bit_set_d(uint8_t *buf, size_t offset, size_t size,
+			   hsize_t val);
+H5_DLL ssize_t H5T_bit_find(uint8_t *buf, size_t offset, size_t size,
+			     H5T_sdir_t direction, hbool_t value);
+H5_DLL htri_t H5T_bit_inc(uint8_t *buf, size_t start, size_t size);
+
+/* VL functions */
+H5_DLL H5T_t * H5T_vlen_create(const H5T_t *base);
+
+/* Array functions */
+H5_DLL H5T_t * H5T_array_create(H5T_t *base, int ndims,
+        const hsize_t dim[/* ndims */], const int perm[/* ndims */]);
+
+/* Compound functions */
+H5_DLL H5T_t *H5T_get_member_type(const H5T_t *dt, unsigned membno);
+H5_DLL size_t H5T_get_member_offset(const H5T_t *dt, unsigned membno);
+H5_DLL size_t H5T_get_member_size(const H5T_t *dt, unsigned membno);
+H5_DLL htri_t H5T_is_packed(const H5T_t *dt);
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Tprecis.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tprecis.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tprecis.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,267 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for setting & querying
+ *      the datatype precision for the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_precis_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Tpkg.h"		/* Datatypes				*/
+
+/* Static local functions */
+static herr_t H5T_set_precision(const H5T_t *dt, size_t prec);
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_precis_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_precis_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_precis_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_precis_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_precis_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_precision
+ *
+ * Purpose:	Gets the precision of a datatype.  The precision is
+ *		the number of significant bits which, unless padding is
+ *		present, is 8 times larger than the value returned by
+ *		H5Tget_size().
+ *
+ * Return:	Success:	Number of significant bits
+ *
+ *		Failure:	0 (all atomic types have at least one
+ *				significant bit)
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works for derived datatypes.
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5Tget_precision(hid_t type_id)
+{
+    H5T_t	*dt = NULL;
+    size_t	ret_value;
+
+    FUNC_ENTER_API(H5Tget_precision, 0)
+    H5TRACE1("z","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, 0, "not a datatype")
+    while (dt->shared->parent)
+        dt = dt->shared->parent;	/*defer to parent*/
+    if (!H5T_IS_ATOMIC(dt->shared))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, 0, "operation not defined for specified datatype")
+
+    /* Precision */
+    ret_value = dt->shared->u.atomic.prec;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tset_precision
+ *
+ * Purpose:	Sets the precision of a datatype.  The precision is
+ *		the number of significant bits which, unless padding is
+ *		present, is 8 times larger than the value returned by
+ *		H5Tget_size().
+ *
+ *		If the precision is increased then the offset is decreased
+ *		and then the size is increased to insure that significant
+ *		bits do not "hang over" the edge of the datatype.
+ *
+ *		The precision property of strings is read-only.
+ *
+ *		When decreasing the precision of a floating point type, set
+ *		the locations and sizes of the sign, mantissa, and exponent
+ *		fields first.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Moved real work to a private function.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tset_precision(hid_t type_id, size_t prec)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tset_precision, FAIL)
+    H5TRACE2("e","iz",type_id,prec);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+    if (H5T_STATE_TRANSIENT!=dt->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_CANTSET, FAIL, "datatype is read-only")
+    if (prec == 0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "precision must be positive")
+    if (H5T_ENUM==dt->shared->type && dt->shared->u.enumer.nmembs>0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "operation not allowed after members are defined")
+    if (H5T_STRING==dt->shared->type)
+        HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "precision for this type is read-only")
+    if (H5T_COMPOUND==dt->shared->type || H5T_OPAQUE==dt->shared->type)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "operation not defined for specified datatype")
+
+    /* Do the work */
+    if (H5T_set_precision(dt, prec)<0)
+	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "unable to set precision")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_set_precision
+ *
+ * Purpose:	Sets the precision of a datatype.  The precision is
+ *		the number of significant bits which, unless padding is
+ *		present, is 8 times larger than the value returned by
+ *		H5Tget_size().
+ *
+ *		If the precision is increased then the offset is decreased
+ *		and then the size is increased to insure that significant
+ *		bits do not "hang over" the edge of the datatype.
+ *
+ *		The precision property of strings is read-only.
+ *
+ *		When decreasing the precision of a floating point type, set
+ *		the locations and sizes of the sign, mantissa, and exponent
+ *		fields first.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January  7, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works for derived datatypes.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T_set_precision(const H5T_t *dt, size_t prec)
+{
+    size_t	offset, size;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5T_set_precision, FAIL)
+
+    /* Check args */
+    assert(dt);
+    assert(prec>0);
+    assert(H5T_OPAQUE!=dt->shared->type);
+    assert(H5T_COMPOUND!=dt->shared->type);
+    assert(H5T_STRING!=dt->shared->type);
+    assert(!(H5T_ENUM==dt->shared->type && 0==dt->shared->u.enumer.nmembs));
+
+    if (dt->shared->parent) {
+	if (H5T_set_precision(dt->shared->parent, prec)<0)
+	    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTSET, FAIL, "unable to set precision for base type")
+
+        /* Adjust size of datatype appropriately */
+        if(dt->shared->type==H5T_ARRAY)
+            dt->shared->size = dt->shared->parent->shared->size * dt->shared->u.array.nelem;
+        else if(dt->shared->type!=H5T_VLEN)
+            dt->shared->size = dt->shared->parent->shared->size;
+    } else {
+        if (H5T_IS_ATOMIC(dt->shared)) {
+	    /* Adjust the offset and size */
+	    offset = dt->shared->u.atomic.offset;
+	    size = dt->shared->size;
+	    if (prec > 8*size)
+                offset = 0;
+	    else if (offset+prec > 8 * size)
+                offset = 8 * size - prec;
+	    if (prec > 8*size)
+                size = (prec+7) / 8;
+
+	    /* Check that things are still kosher */
+	    switch (dt->shared->type) {
+                case H5T_INTEGER:
+                case H5T_TIME:
+                case H5T_BITFIELD:
+                    /* nothing to check */
+                    break;
+
+                case H5T_FLOAT:
+                    /*
+                     * The sign, mantissa, and exponent fields should be adjusted
+                     * first when decreasing the precision of a floating point
+                     * type.
+                     */
+                    if (dt->shared->u.atomic.u.f.sign >= prec+offset ||
+                            dt->shared->u.atomic.u.f.epos + dt->shared->u.atomic.u.f.esize > prec+offset ||
+                            dt->shared->u.atomic.u.f.mpos + dt->shared->u.atomic.u.f.msize > prec+offset)
+                        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "adjust sign, mantissa, and exponent fields first")
+                    break;
+
+                default:
+                    HGOTO_ERROR(H5E_ARGS, H5E_UNSUPPORTED, FAIL, "operation not defined for datatype class")
+	    } /* end switch */ /*lint !e788 All appropriate cases are covered */
+
+	    /* Commit */
+	    dt->shared->size = size;
+            dt->shared->u.atomic.offset = offset;
+            dt->shared->u.atomic.prec = prec;
+	} /* end if */
+        else
+            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not defined for specified datatype")
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Tprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,94 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains private information about the H5T module
+ */
+#ifndef _H5Tprivate_H
+#define _H5Tprivate_H
+
+/* Get package's public header */
+#include "H5Tpublic.h"
+
+/* Other public headers needed by this file */
+#include "H5MMpublic.h"         /* Memory management                    */
+
+/* Private headers needed by this file */
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Gprivate.h"		/* Groups 			  	*/
+#include "H5Rprivate.h"		/* References				*/
+
+/* Forward references of package typedefs */
+typedef struct H5T_t H5T_t;
+typedef struct H5T_stats_t H5T_stats_t;
+typedef struct H5T_path_t H5T_path_t;
+
+/* How to copy a datatype */
+typedef enum H5T_copy_t {
+    H5T_COPY_TRANSIENT,
+    H5T_COPY_ALL,
+    H5T_COPY_REOPEN
+} H5T_copy_t;
+
+/* Location of VL information */
+typedef enum {
+    H5T_VLEN_BADLOC =   0,  /* invalid VL Type */
+    H5T_VLEN_MEMORY,        /* VL data stored in memory */
+    H5T_VLEN_DISK,          /* VL data stored on disk */
+    H5T_VLEN_MAXLOC         /* highest type (Invalid as true type) */
+} H5T_vlen_loc_t;
+
+/* VL allocation information */
+typedef struct {
+    H5MM_allocate_t alloc_func; /* Allocation function */
+    void *alloc_info;           /* Allocation information */
+    H5MM_free_t free_func;      /* Free function */
+    void *free_info;            /* Free information */
+} H5T_vlen_alloc_info_t;
+
+/* Private functions */
+H5_DLL herr_t H5TN_init_interface(void);
+H5_DLL herr_t H5T_init(void);
+H5_DLL htri_t H5T_isa(H5G_entry_t *ent, hid_t dxpl_id);
+H5_DLL H5T_t *H5T_open(H5G_entry_t *ent, hid_t dxpl_id);
+H5_DLL H5T_t *H5T_copy(const H5T_t *old_dt, H5T_copy_t method);
+H5_DLL herr_t H5T_lock(H5T_t *dt, hbool_t immutable);
+H5_DLL herr_t H5T_close(H5T_t *dt);
+H5_DLL H5T_class_t H5T_get_class(const H5T_t *dt, htri_t internal);
+H5_DLL htri_t H5T_detect_class (const H5T_t *dt, H5T_class_t cls);
+H5_DLL size_t H5T_get_size(const H5T_t *dt);
+H5_DLL int    H5T_cmp(const H5T_t *dt1, const H5T_t *dt2, hbool_t superset);
+H5_DLL herr_t H5T_debug(const H5T_t *dt, FILE * stream);
+H5_DLL H5G_entry_t *H5T_entof(H5T_t *dt);
+H5_DLL htri_t H5T_is_immutable(const H5T_t *dt);
+H5_DLL htri_t H5T_is_named(const H5T_t *dt);
+H5_DLL htri_t H5T_is_relocatable(const H5T_t *dt);
+H5_DLL H5T_path_t *H5T_path_find(const H5T_t *src, const H5T_t *dst,
+				  const char *name, H5T_conv_t func, hid_t dxpl_id);
+H5_DLL hbool_t H5T_path_noop(const H5T_path_t *p);
+H5_DLL H5T_bkg_t H5T_path_bkg(const H5T_path_t *p);
+H5_DLL herr_t H5T_convert(H5T_path_t *tpath, hid_t src_id, hid_t dst_id,
+			   size_t nelmts, size_t buf_stride, size_t bkg_stride,
+                           void *buf, void *bkg, hid_t dset_xfer_plist);
+H5_DLL herr_t H5T_vlen_reclaim(void *elem, hid_t type_id, unsigned ndim, const hsize_t *point, void *_op_data);
+H5_DLL herr_t H5T_vlen_get_alloc_info(hid_t dxpl_id, H5T_vlen_alloc_info_t **vl_alloc_info);
+H5_DLL htri_t H5T_vlen_mark(H5T_t *dt, H5F_t *f, H5T_vlen_loc_t loc);
+H5_DLL htri_t H5T_is_sensible(const H5T_t *dt);
+H5_DLL htri_t H5T_committed(const H5T_t *type);
+H5_DLL int H5T_link(const H5T_t *type, int adjust, hid_t dxpl_id);
+
+/* Reference specific functions */
+H5_DLL H5R_type_t H5T_get_ref_type(const H5T_t *dt);
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Tpublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tpublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tpublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,569 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains public declarations for the H5T module.
+ */
+#ifndef _H5Tpublic_H
+#define _H5Tpublic_H
+
+/* Public headers needed by this file */
+#include "H5public.h"
+#include "H5Ipublic.h"
+
+#define HOFFSET(S,M)    (offsetof(S,M))
+
+/* These are the various classes of datatypes */
+/* If this goes over 16 types (0-15), the file format will need to change) */
+typedef enum H5T_class_t {
+    H5T_NO_CLASS         = -1,  /*error                                      */
+    H5T_INTEGER          = 0,   /*integer types                              */
+    H5T_FLOAT            = 1,   /*floating-point types                       */
+    H5T_TIME             = 2,   /*date and time types                        */
+    H5T_STRING           = 3,   /*character string types                     */
+    H5T_BITFIELD         = 4,   /*bit field types                            */
+    H5T_OPAQUE           = 5,   /*opaque types                               */
+    H5T_COMPOUND         = 6,   /*compound types                             */
+    H5T_REFERENCE        = 7,   /*reference types                            */
+    H5T_ENUM		 = 8,	/*enumeration types                          */
+    H5T_VLEN		 = 9,	/*Variable-Length types                      */
+    H5T_ARRAY	         = 10,	/*Array types                                */
+
+    H5T_NCLASSES                /*this must be last                          */
+} H5T_class_t;
+
+/* Byte orders */
+typedef enum H5T_order_t {
+    H5T_ORDER_ERROR      = -1,  /*error                                      */
+    H5T_ORDER_LE         = 0,   /*little endian                              */
+    H5T_ORDER_BE         = 1,   /*bit endian                                 */
+    H5T_ORDER_VAX        = 2,   /*VAX mixed endian                           */
+    H5T_ORDER_NONE       = 3    /*no particular order (strings, bits,..)     */
+    /*H5T_ORDER_NONE must be last */
+} H5T_order_t;
+
+/* Types of integer sign schemes */
+typedef enum H5T_sign_t {
+    H5T_SGN_ERROR        = -1,  /*error                                      */
+    H5T_SGN_NONE         = 0,   /*this is an unsigned type                   */
+    H5T_SGN_2            = 1,   /*two's complement                           */
+
+    H5T_NSGN             = 2    /*this must be last!                         */
+} H5T_sign_t;
+
+/* Floating-point normalization schemes */
+typedef enum H5T_norm_t {
+    H5T_NORM_ERROR       = -1,  /*error                                      */
+    H5T_NORM_IMPLIED     = 0,   /*msb of mantissa isn't stored, always 1     */
+    H5T_NORM_MSBSET      = 1,   /*msb of mantissa is always 1                */
+    H5T_NORM_NONE        = 2    /*not normalized                             */
+    /*H5T_NORM_NONE must be last */
+} H5T_norm_t;
+
+/*
+ * Character set to use for text strings.  Do not change these values since
+ * they appear in HDF5 files!
+ */
+typedef enum H5T_cset_t {
+    H5T_CSET_ERROR       = -1,  /*error                                      */
+    H5T_CSET_ASCII       = 0,   /*US ASCII                                   */
+    H5T_CSET_RESERVED_1  = 1,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_2  = 2,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_3  = 3,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_4  = 4,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_5  = 5,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_6  = 6,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_7  = 7,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_8  = 8,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_9  = 9,   /*reserved for later use		     */
+    H5T_CSET_RESERVED_10 = 10,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_11 = 11,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_12 = 12,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_13 = 13,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_14 = 14,  /*reserved for later use		     */
+    H5T_CSET_RESERVED_15 = 15   /*reserved for later use		     */
+} H5T_cset_t;
+#define H5T_NCSET H5T_CSET_RESERVED_1    		/*Number of character sets actually defined  */
+
+/*
+ * Type of padding to use in character strings.  Do not change these values
+ * since they appear in HDF5 files!
+ */
+typedef enum H5T_str_t {
+    H5T_STR_ERROR        = -1,  /*error                                      */
+    H5T_STR_NULLTERM     = 0,   /*null terminate like in C                   */
+    H5T_STR_NULLPAD      = 1,   /*pad with nulls                             */
+    H5T_STR_SPACEPAD     = 2,   /*pad with spaces like in Fortran            */
+    H5T_STR_RESERVED_3   = 3,   /*reserved for later use		     */
+    H5T_STR_RESERVED_4   = 4,   /*reserved for later use		     */
+    H5T_STR_RESERVED_5   = 5,   /*reserved for later use		     */
+    H5T_STR_RESERVED_6   = 6,   /*reserved for later use		     */
+    H5T_STR_RESERVED_7   = 7,   /*reserved for later use		     */
+    H5T_STR_RESERVED_8   = 8,   /*reserved for later use		     */
+    H5T_STR_RESERVED_9   = 9,   /*reserved for later use		     */
+    H5T_STR_RESERVED_10  = 10,  /*reserved for later use		     */
+    H5T_STR_RESERVED_11  = 11,  /*reserved for later use		     */
+    H5T_STR_RESERVED_12  = 12,  /*reserved for later use		     */
+    H5T_STR_RESERVED_13  = 13,  /*reserved for later use		     */
+    H5T_STR_RESERVED_14  = 14,  /*reserved for later use		     */
+    H5T_STR_RESERVED_15  = 15   /*reserved for later use		     */
+} H5T_str_t;
+#define H5T_NSTR H5T_STR_RESERVED_3		/*num H5T_str_t types actually defined	     */
+
+/* Type of padding to use in other atomic types */
+typedef enum H5T_pad_t {
+    H5T_PAD_ERROR        = -1,  /*error                                      */
+    H5T_PAD_ZERO         = 0,   /*always set to zero                         */
+    H5T_PAD_ONE          = 1,   /*always set to one                          */
+    H5T_PAD_BACKGROUND   = 2,   /*set to background value                    */
+
+    H5T_NPAD             = 3    /*THIS MUST BE LAST                          */
+} H5T_pad_t;
+
+/* Commands sent to conversion functions */
+typedef enum H5T_cmd_t {
+    H5T_CONV_INIT	= 0,	/*query and/or initialize private data	     */
+    H5T_CONV_CONV	= 1, 	/*convert data from source to dest datatype */
+    H5T_CONV_FREE	= 2	/*function is being removed from path	     */
+} H5T_cmd_t;
+
+/* How is the `bkg' buffer used by the conversion function? */
+typedef enum H5T_bkg_t {
+    H5T_BKG_NO		= 0, 	/*background buffer is not needed, send NULL */
+    H5T_BKG_TEMP	= 1,	/*bkg buffer used as temp storage only       */
+    H5T_BKG_YES		= 2	/*init bkg buf with data before conversion   */
+} H5T_bkg_t;
+
+/* Type conversion client data */
+typedef struct H5T_cdata_t {
+    H5T_cmd_t		command;/*what should the conversion function do?    */
+    H5T_bkg_t		need_bkg;/*is the background buffer needed?	     */
+    hbool_t		recalc;	/*recalculate private data		     */
+    void		*priv;	/*private data				     */
+} H5T_cdata_t;
+
+/* Conversion function persistence */
+typedef enum H5T_pers_t {
+    H5T_PERS_DONTCARE	= -1, 	/*wild card				     */
+    H5T_PERS_HARD	= 0,	/*hard conversion function		     */
+    H5T_PERS_SOFT	= 1 	/*soft conversion function		     */
+} H5T_pers_t;
+
+/* The order to retrieve atomic native datatype */
+typedef enum H5T_direction_t {
+    H5T_DIR_DEFAULT     = 0,    /*default direction is inscendent            */
+    H5T_DIR_ASCEND      = 1,    /*in inscendent order                        */
+    H5T_DIR_DESCEND     = 2     /*in descendent order                        */
+} H5T_direction_t;
+
+/* Variable Length Datatype struct in memory */
+/* (This is only used for VL sequences, not VL strings, which are stored in char *'s) */
+typedef struct {
+    size_t len; /* Length of VL data (in base type units) */
+    void *p;    /* Pointer to VL data */
+} hvl_t;
+
+/* Variable Length String information */
+#define H5T_VARIABLE    ((size_t)(-1))  /* Indicate that a string is variable length (null-terminated in C, instead of fixed length) */
+
+/* Opaque information */
+#define H5T_OPAQUE_TAG_MAX      256     /* Maximum length of an opaque tag */
+                                        /* This could be raised without too much difficulty */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* All datatype conversion functions are... */
+typedef herr_t (*H5T_conv_t) (hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata,
+      size_t nelmts, size_t buf_stride, size_t bkg_stride, void *buf,
+      void *bkg, hid_t dset_xfer_plist);
+
+/*
+ * If an error occurs during a data type conversion then the function
+ * registered with H5Tset_overflow() is called.  It's arguments are the
+ * source and destination data types, a buffer which has the source value,
+ * and a buffer to receive an optional result for the overflow conversion.
+ * If the overflow handler chooses a value for the result it should return
+ * non-negative; otherwise the hdf5 library will choose an appropriate
+ * result.
+ */
+typedef herr_t (*H5T_overflow_t)(hid_t src_id, hid_t dst_id,
+				 void *src_buf, void *dst_buf);
+
+
+/* When this header is included from a private header, don't make calls to H5open() */
+#undef H5OPEN
+#ifndef _H5private_H
+#define H5OPEN          H5open(),
+#else   /* _H5private_H */
+#define H5OPEN
+#endif  /* _H5private_H */
+
+/*
+ * The IEEE floating point types in various byte orders.
+ */
+#define H5T_IEEE_F32BE		(H5OPEN H5T_IEEE_F32BE_g)
+#define H5T_IEEE_F32LE		(H5OPEN H5T_IEEE_F32LE_g)
+#define H5T_IEEE_F64BE		(H5OPEN H5T_IEEE_F64BE_g)
+#define H5T_IEEE_F64LE		(H5OPEN H5T_IEEE_F64LE_g)
+H5_DLLVAR hid_t H5T_IEEE_F32BE_g;
+H5_DLLVAR hid_t H5T_IEEE_F32LE_g;
+H5_DLLVAR hid_t H5T_IEEE_F64BE_g;
+H5_DLLVAR hid_t H5T_IEEE_F64LE_g;
+
+/*
+ * These are "standard" types.  For instance, signed (2's complement) and
+ * unsigned integers of various sizes and byte orders.
+ */
+#define H5T_STD_I8BE		(H5OPEN H5T_STD_I8BE_g)
+#define H5T_STD_I8LE		(H5OPEN H5T_STD_I8LE_g)
+#define H5T_STD_I16BE		(H5OPEN H5T_STD_I16BE_g)
+#define H5T_STD_I16LE		(H5OPEN H5T_STD_I16LE_g)
+#define H5T_STD_I32BE		(H5OPEN H5T_STD_I32BE_g)
+#define H5T_STD_I32LE		(H5OPEN H5T_STD_I32LE_g)
+#define H5T_STD_I64BE		(H5OPEN H5T_STD_I64BE_g)
+#define H5T_STD_I64LE		(H5OPEN H5T_STD_I64LE_g)
+#define H5T_STD_U8BE		(H5OPEN H5T_STD_U8BE_g)
+#define H5T_STD_U8LE		(H5OPEN H5T_STD_U8LE_g)
+#define H5T_STD_U16BE		(H5OPEN H5T_STD_U16BE_g)
+#define H5T_STD_U16LE		(H5OPEN H5T_STD_U16LE_g)
+#define H5T_STD_U32BE		(H5OPEN H5T_STD_U32BE_g)
+#define H5T_STD_U32LE		(H5OPEN H5T_STD_U32LE_g)
+#define H5T_STD_U64BE		(H5OPEN H5T_STD_U64BE_g)
+#define H5T_STD_U64LE		(H5OPEN H5T_STD_U64LE_g)
+#define H5T_STD_B8BE		(H5OPEN H5T_STD_B8BE_g)
+#define H5T_STD_B8LE		(H5OPEN H5T_STD_B8LE_g)
+#define H5T_STD_B16BE		(H5OPEN H5T_STD_B16BE_g)
+#define H5T_STD_B16LE		(H5OPEN H5T_STD_B16LE_g)
+#define H5T_STD_B32BE		(H5OPEN H5T_STD_B32BE_g)
+#define H5T_STD_B32LE		(H5OPEN H5T_STD_B32LE_g)
+#define H5T_STD_B64BE		(H5OPEN H5T_STD_B64BE_g)
+#define H5T_STD_B64LE		(H5OPEN H5T_STD_B64LE_g)
+#define H5T_STD_REF_OBJ	        (H5OPEN H5T_STD_REF_OBJ_g)
+#define H5T_STD_REF_DSETREG     (H5OPEN H5T_STD_REF_DSETREG_g)
+H5_DLLVAR hid_t H5T_STD_I8BE_g;
+H5_DLLVAR hid_t H5T_STD_I8LE_g;
+H5_DLLVAR hid_t H5T_STD_I16BE_g;
+H5_DLLVAR hid_t H5T_STD_I16LE_g;
+H5_DLLVAR hid_t H5T_STD_I32BE_g;
+H5_DLLVAR hid_t H5T_STD_I32LE_g;
+H5_DLLVAR hid_t H5T_STD_I64BE_g;
+H5_DLLVAR hid_t H5T_STD_I64LE_g;
+H5_DLLVAR hid_t H5T_STD_U8BE_g;
+H5_DLLVAR hid_t H5T_STD_U8LE_g;
+H5_DLLVAR hid_t H5T_STD_U16BE_g;
+H5_DLLVAR hid_t H5T_STD_U16LE_g;
+H5_DLLVAR hid_t H5T_STD_U32BE_g;
+H5_DLLVAR hid_t H5T_STD_U32LE_g;
+H5_DLLVAR hid_t H5T_STD_U64BE_g;
+H5_DLLVAR hid_t H5T_STD_U64LE_g;
+H5_DLLVAR hid_t H5T_STD_B8BE_g;
+H5_DLLVAR hid_t H5T_STD_B8LE_g;
+H5_DLLVAR hid_t H5T_STD_B16BE_g;
+H5_DLLVAR hid_t H5T_STD_B16LE_g;
+H5_DLLVAR hid_t H5T_STD_B32BE_g;
+H5_DLLVAR hid_t H5T_STD_B32LE_g;
+H5_DLLVAR hid_t H5T_STD_B64BE_g;
+H5_DLLVAR hid_t H5T_STD_B64LE_g;
+H5_DLLVAR hid_t H5T_STD_REF_OBJ_g;
+H5_DLLVAR hid_t H5T_STD_REF_DSETREG_g;
+
+/*
+ * Types which are particular to Unix.
+ */
+#define H5T_UNIX_D32BE		(H5OPEN H5T_UNIX_D32BE_g)
+#define H5T_UNIX_D32LE		(H5OPEN H5T_UNIX_D32LE_g)
+#define H5T_UNIX_D64BE		(H5OPEN H5T_UNIX_D64BE_g)
+#define H5T_UNIX_D64LE		(H5OPEN H5T_UNIX_D64LE_g)
+H5_DLLVAR hid_t H5T_UNIX_D32BE_g;
+H5_DLLVAR hid_t H5T_UNIX_D32LE_g;
+H5_DLLVAR hid_t H5T_UNIX_D64BE_g;
+H5_DLLVAR hid_t H5T_UNIX_D64LE_g;
+
+/*
+ * Types particular to the C language.  String types use `bytes' instead
+ * of `bits' as their size.
+ */
+#define H5T_C_S1		(H5OPEN H5T_C_S1_g)
+H5_DLLVAR hid_t H5T_C_S1_g;
+
+/*
+ * Types particular to Fortran.
+ */
+#define H5T_FORTRAN_S1		(H5OPEN H5T_FORTRAN_S1_g)
+H5_DLLVAR hid_t H5T_FORTRAN_S1_g;
+
+/*
+ * These types are for Intel CPU's.  They are little endian with IEEE
+ * floating point.
+ */
+#define H5T_INTEL_I8		H5T_STD_I8LE
+#define H5T_INTEL_I16		H5T_STD_I16LE
+#define H5T_INTEL_I32		H5T_STD_I32LE
+#define H5T_INTEL_I64		H5T_STD_I64LE
+#define H5T_INTEL_U8		H5T_STD_U8LE
+#define H5T_INTEL_U16		H5T_STD_U16LE
+#define H5T_INTEL_U32		H5T_STD_U32LE
+#define H5T_INTEL_U64		H5T_STD_U64LE
+#define H5T_INTEL_B8		H5T_STD_B8LE
+#define H5T_INTEL_B16		H5T_STD_B16LE
+#define H5T_INTEL_B32		H5T_STD_B32LE
+#define H5T_INTEL_B64		H5T_STD_B64LE
+#define H5T_INTEL_F32		H5T_IEEE_F32LE
+#define H5T_INTEL_F64		H5T_IEEE_F64LE
+
+/*
+ * These types are for DEC Alpha CPU's.  They are little endian with IEEE
+ * floating point.
+ */
+#define H5T_ALPHA_I8		H5T_STD_I8LE
+#define H5T_ALPHA_I16		H5T_STD_I16LE
+#define H5T_ALPHA_I32		H5T_STD_I32LE
+#define H5T_ALPHA_I64		H5T_STD_I64LE
+#define H5T_ALPHA_U8		H5T_STD_U8LE
+#define H5T_ALPHA_U16		H5T_STD_U16LE
+#define H5T_ALPHA_U32		H5T_STD_U32LE
+#define H5T_ALPHA_U64		H5T_STD_U64LE
+#define H5T_ALPHA_B8		H5T_STD_B8LE
+#define H5T_ALPHA_B16		H5T_STD_B16LE
+#define H5T_ALPHA_B32		H5T_STD_B32LE
+#define H5T_ALPHA_B64		H5T_STD_B64LE
+#define H5T_ALPHA_F32		H5T_IEEE_F32LE
+#define H5T_ALPHA_F64		H5T_IEEE_F64LE
+
+/*
+ * These types are for MIPS cpu's commonly used in SGI systems. They are big
+ * endian with IEEE floating point.
+ */
+#define H5T_MIPS_I8		H5T_STD_I8BE
+#define H5T_MIPS_I16		H5T_STD_I16BE
+#define H5T_MIPS_I32		H5T_STD_I32BE
+#define H5T_MIPS_I64		H5T_STD_I64BE
+#define H5T_MIPS_U8		H5T_STD_U8BE
+#define H5T_MIPS_U16		H5T_STD_U16BE
+#define H5T_MIPS_U32		H5T_STD_U32BE
+#define H5T_MIPS_U64		H5T_STD_U64BE
+#define H5T_MIPS_B8		H5T_STD_B8BE
+#define H5T_MIPS_B16		H5T_STD_B16BE
+#define H5T_MIPS_B32		H5T_STD_B32BE
+#define H5T_MIPS_B64		H5T_STD_B64BE
+#define H5T_MIPS_F32		H5T_IEEE_F32BE
+#define H5T_MIPS_F64		H5T_IEEE_F64BE
+
+/*
+ * The predefined native types. These are the types detected by H5detect and
+ * they violate the naming scheme a little.  Instead of a class name,
+ * precision and byte order as the last component, they have a C-like type
+ * name.  If the type begins with `U' then it is the unsigned version of the
+ * integer type; other integer types are signed.  The type LLONG corresponds
+ * to C's `long_long' and LDOUBLE is `long double' (these types might be the
+ * same as `LONG' and `DOUBLE' respectively.
+ */
+#define H5T_NATIVE_CHAR		(CHAR_MIN?H5T_NATIVE_SCHAR:H5T_NATIVE_UCHAR)
+#define H5T_NATIVE_SCHAR        (H5OPEN H5T_NATIVE_SCHAR_g)
+#define H5T_NATIVE_UCHAR        (H5OPEN H5T_NATIVE_UCHAR_g)
+#define H5T_NATIVE_SHORT        (H5OPEN H5T_NATIVE_SHORT_g)
+#define H5T_NATIVE_USHORT       (H5OPEN H5T_NATIVE_USHORT_g)
+#define H5T_NATIVE_INT          (H5OPEN H5T_NATIVE_INT_g)
+#define H5T_NATIVE_UINT         (H5OPEN H5T_NATIVE_UINT_g)
+#define H5T_NATIVE_LONG         (H5OPEN H5T_NATIVE_LONG_g)
+#define H5T_NATIVE_ULONG        (H5OPEN H5T_NATIVE_ULONG_g)
+#define H5T_NATIVE_LLONG        (H5OPEN H5T_NATIVE_LLONG_g)
+#define H5T_NATIVE_ULLONG       (H5OPEN H5T_NATIVE_ULLONG_g)
+#define H5T_NATIVE_FLOAT        (H5OPEN H5T_NATIVE_FLOAT_g)
+#define H5T_NATIVE_DOUBLE       (H5OPEN H5T_NATIVE_DOUBLE_g)
+#define H5T_NATIVE_LDOUBLE	(H5OPEN H5T_NATIVE_LDOUBLE_g)
+#define H5T_NATIVE_B8		(H5OPEN H5T_NATIVE_B8_g)
+#define H5T_NATIVE_B16		(H5OPEN H5T_NATIVE_B16_g)
+#define H5T_NATIVE_B32		(H5OPEN H5T_NATIVE_B32_g)
+#define H5T_NATIVE_B64		(H5OPEN H5T_NATIVE_B64_g)
+#define H5T_NATIVE_OPAQUE       (H5OPEN H5T_NATIVE_OPAQUE_g)
+#define H5T_NATIVE_HADDR	(H5OPEN H5T_NATIVE_HADDR_g)
+#define H5T_NATIVE_HSIZE	(H5OPEN H5T_NATIVE_HSIZE_g)
+#define H5T_NATIVE_HSSIZE	(H5OPEN H5T_NATIVE_HSSIZE_g)
+#define H5T_NATIVE_HERR		(H5OPEN H5T_NATIVE_HERR_g)
+#define H5T_NATIVE_HBOOL	(H5OPEN H5T_NATIVE_HBOOL_g)
+H5_DLLVAR hid_t H5T_NATIVE_SCHAR_g;
+H5_DLLVAR hid_t H5T_NATIVE_UCHAR_g;
+H5_DLLVAR hid_t H5T_NATIVE_SHORT_g;
+H5_DLLVAR hid_t H5T_NATIVE_USHORT_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_g;
+H5_DLLVAR hid_t H5T_NATIVE_LONG_g;
+H5_DLLVAR hid_t H5T_NATIVE_ULONG_g;
+H5_DLLVAR hid_t H5T_NATIVE_LLONG_g;
+H5_DLLVAR hid_t H5T_NATIVE_ULLONG_g;
+H5_DLLVAR hid_t H5T_NATIVE_FLOAT_g;
+H5_DLLVAR hid_t H5T_NATIVE_DOUBLE_g;
+H5_DLLVAR hid_t H5T_NATIVE_LDOUBLE_g;
+H5_DLLVAR hid_t H5T_NATIVE_B8_g;
+H5_DLLVAR hid_t H5T_NATIVE_B16_g;
+H5_DLLVAR hid_t H5T_NATIVE_B32_g;
+H5_DLLVAR hid_t H5T_NATIVE_B64_g;
+H5_DLLVAR hid_t H5T_NATIVE_OPAQUE_g;
+H5_DLLVAR hid_t H5T_NATIVE_HADDR_g;
+H5_DLLVAR hid_t H5T_NATIVE_HSIZE_g;
+H5_DLLVAR hid_t H5T_NATIVE_HSSIZE_g;
+H5_DLLVAR hid_t H5T_NATIVE_HERR_g;
+H5_DLLVAR hid_t H5T_NATIVE_HBOOL_g;
+
+/* C9x integer types */
+#define H5T_NATIVE_INT8			(H5OPEN H5T_NATIVE_INT8_g)
+#define H5T_NATIVE_UINT8		(H5OPEN H5T_NATIVE_UINT8_g)
+#define H5T_NATIVE_INT_LEAST8		(H5OPEN H5T_NATIVE_INT_LEAST8_g)
+#define H5T_NATIVE_UINT_LEAST8		(H5OPEN H5T_NATIVE_UINT_LEAST8_g)
+#define H5T_NATIVE_INT_FAST8 		(H5OPEN H5T_NATIVE_INT_FAST8_g)
+#define H5T_NATIVE_UINT_FAST8		(H5OPEN H5T_NATIVE_UINT_FAST8_g)
+H5_DLLVAR hid_t H5T_NATIVE_INT8_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT8_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST8_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST8_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_FAST8_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST8_g;
+
+#define H5T_NATIVE_INT16		(H5OPEN H5T_NATIVE_INT16_g)
+#define H5T_NATIVE_UINT16		(H5OPEN H5T_NATIVE_UINT16_g)
+#define H5T_NATIVE_INT_LEAST16		(H5OPEN H5T_NATIVE_INT_LEAST16_g)
+#define H5T_NATIVE_UINT_LEAST16		(H5OPEN H5T_NATIVE_UINT_LEAST16_g)
+#define H5T_NATIVE_INT_FAST16		(H5OPEN H5T_NATIVE_INT_FAST16_g)
+#define H5T_NATIVE_UINT_FAST16		(H5OPEN H5T_NATIVE_UINT_FAST16_g)
+H5_DLLVAR hid_t H5T_NATIVE_INT16_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT16_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST16_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST16_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_FAST16_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST16_g;
+
+#define H5T_NATIVE_INT32		(H5OPEN H5T_NATIVE_INT32_g)
+#define H5T_NATIVE_UINT32		(H5OPEN H5T_NATIVE_UINT32_g)
+#define H5T_NATIVE_INT_LEAST32		(H5OPEN H5T_NATIVE_INT_LEAST32_g)
+#define H5T_NATIVE_UINT_LEAST32		(H5OPEN H5T_NATIVE_UINT_LEAST32_g)
+#define H5T_NATIVE_INT_FAST32		(H5OPEN H5T_NATIVE_INT_FAST32_g)
+#define H5T_NATIVE_UINT_FAST32		(H5OPEN H5T_NATIVE_UINT_FAST32_g)
+H5_DLLVAR hid_t H5T_NATIVE_INT32_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT32_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST32_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST32_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_FAST32_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST32_g;
+
+#define H5T_NATIVE_INT64		(H5OPEN H5T_NATIVE_INT64_g)
+#define H5T_NATIVE_UINT64		(H5OPEN H5T_NATIVE_UINT64_g)
+#define H5T_NATIVE_INT_LEAST64		(H5OPEN H5T_NATIVE_INT_LEAST64_g)
+#define H5T_NATIVE_UINT_LEAST64 	(H5OPEN H5T_NATIVE_UINT_LEAST64_g)
+#define H5T_NATIVE_INT_FAST64		(H5OPEN H5T_NATIVE_INT_FAST64_g)
+#define H5T_NATIVE_UINT_FAST64		(H5OPEN H5T_NATIVE_UINT_FAST64_g)
+H5_DLLVAR hid_t H5T_NATIVE_INT64_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT64_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_LEAST64_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_LEAST64_g;
+H5_DLLVAR hid_t H5T_NATIVE_INT_FAST64_g;
+H5_DLLVAR hid_t H5T_NATIVE_UINT_FAST64_g;
+
+/* Operations defined on all datatypes */
+H5_DLL hid_t H5Topen(hid_t loc_id, const char *name);
+H5_DLL hid_t H5Tcreate(H5T_class_t type, size_t size);
+H5_DLL hid_t H5Tcopy(hid_t type_id);
+H5_DLL herr_t H5Tclose(hid_t type_id);
+H5_DLL htri_t H5Tequal(hid_t type1_id, hid_t type2_id);
+H5_DLL herr_t H5Tlock(hid_t type_id);
+H5_DLL herr_t H5Tcommit(hid_t loc_id, const char *name, hid_t type_id);
+H5_DLL htri_t H5Tcommitted(hid_t type_id);
+
+/* Operations defined on compound datatypes */
+H5_DLL herr_t H5Tinsert(hid_t parent_id, const char *name, size_t offset,
+			 hid_t member_id);
+H5_DLL herr_t H5Tpack(hid_t type_id);
+
+/* Operations defined on enumeration datatypes */
+H5_DLL hid_t H5Tenum_create(hid_t base_id);
+H5_DLL herr_t H5Tenum_insert(hid_t type, const char *name, const void *value);
+H5_DLL herr_t H5Tenum_nameof(hid_t type, const void *value, char *name/*out*/,
+			     size_t size);
+H5_DLL herr_t H5Tenum_valueof(hid_t type, const char *name,
+			      void *value/*out*/);
+
+/* Operations defined on variable-length datatypes */
+H5_DLL hid_t H5Tvlen_create(hid_t base_id);
+
+/* Operations defined on array datatypes */
+H5_DLL hid_t H5Tarray_create(hid_t base_id, int ndims,
+            const hsize_t dim[/* ndims */], const int perm[/* ndims */]);
+H5_DLL int H5Tget_array_ndims(hid_t type_id);
+H5_DLL int H5Tget_array_dims(hid_t type_id, hsize_t dims[], int perm[]);
+
+/* Operations defined on opaque datatypes */
+H5_DLL herr_t H5Tset_tag(hid_t type, const char *tag);
+H5_DLL char *H5Tget_tag(hid_t type);
+
+/* Querying property values */
+H5_DLL hid_t H5Tget_super(hid_t type);
+H5_DLL H5T_class_t H5Tget_class(hid_t type_id);
+H5_DLL htri_t H5Tdetect_class(hid_t type_id, H5T_class_t cls);
+H5_DLL size_t H5Tget_size(hid_t type_id);
+H5_DLL H5T_order_t H5Tget_order(hid_t type_id);
+H5_DLL size_t H5Tget_precision(hid_t type_id);
+H5_DLL int H5Tget_offset(hid_t type_id);
+H5_DLL herr_t H5Tget_pad(hid_t type_id, H5T_pad_t *lsb/*out*/,
+			  H5T_pad_t *msb/*out*/);
+H5_DLL H5T_sign_t H5Tget_sign(hid_t type_id);
+H5_DLL herr_t H5Tget_fields(hid_t type_id, size_t *spos/*out*/,
+			     size_t *epos/*out*/, size_t *esize/*out*/,
+			     size_t *mpos/*out*/, size_t *msize/*out*/);
+H5_DLL size_t H5Tget_ebias(hid_t type_id);
+H5_DLL H5T_norm_t H5Tget_norm(hid_t type_id);
+H5_DLL H5T_pad_t H5Tget_inpad(hid_t type_id);
+H5_DLL H5T_str_t H5Tget_strpad(hid_t type_id);
+H5_DLL int H5Tget_nmembers(hid_t type_id);
+H5_DLL char *H5Tget_member_name(hid_t type_id, unsigned membno);
+H5_DLL int H5Tget_member_index(hid_t type_id, const char *name);
+H5_DLL size_t H5Tget_member_offset(hid_t type_id, unsigned membno);
+H5_DLL H5T_class_t H5Tget_member_class(hid_t type_id, unsigned membno);
+H5_DLL hid_t H5Tget_member_type(hid_t type_id, unsigned membno);
+H5_DLL herr_t H5Tget_member_value(hid_t type_id, unsigned membno, void *value/*out*/);
+H5_DLL H5T_cset_t H5Tget_cset(hid_t type_id);
+H5_DLL htri_t H5Tis_variable_str(hid_t type_id);
+H5_DLL hid_t H5Tget_native_type(hid_t type_id, H5T_direction_t direction);
+
+/* Setting property values */
+H5_DLL herr_t H5Tset_size(hid_t type_id, size_t size);
+H5_DLL herr_t H5Tset_order(hid_t type_id, H5T_order_t order);
+H5_DLL herr_t H5Tset_precision(hid_t type_id, size_t prec);
+H5_DLL herr_t H5Tset_offset(hid_t type_id, size_t offset);
+H5_DLL herr_t H5Tset_pad(hid_t type_id, H5T_pad_t lsb, H5T_pad_t msb);
+H5_DLL herr_t H5Tset_sign(hid_t type_id, H5T_sign_t sign);
+H5_DLL herr_t H5Tset_fields(hid_t type_id, size_t spos, size_t epos,
+			     size_t esize, size_t mpos, size_t msize);
+H5_DLL herr_t H5Tset_ebias(hid_t type_id, size_t ebias);
+H5_DLL herr_t H5Tset_norm(hid_t type_id, H5T_norm_t norm);
+H5_DLL herr_t H5Tset_inpad(hid_t type_id, H5T_pad_t pad);
+H5_DLL herr_t H5Tset_cset(hid_t type_id, H5T_cset_t cset);
+H5_DLL herr_t H5Tset_strpad(hid_t type_id, H5T_str_t strpad);
+
+/* Type conversion database */
+H5_DLL herr_t H5Tregister(H5T_pers_t pers, const char *name, hid_t src_id,
+			   hid_t dst_id, H5T_conv_t func);
+H5_DLL herr_t H5Tunregister(H5T_pers_t pers, const char *name, hid_t src_id,
+			     hid_t dst_id, H5T_conv_t func);
+H5_DLL H5T_conv_t H5Tfind(hid_t src_id, hid_t dst_id, H5T_cdata_t **pcdata);
+H5_DLL herr_t H5Tconvert(hid_t src_id, hid_t dst_id, size_t nelmts,
+			  void *buf, void *background, hid_t plist_id);
+H5_DLL H5T_overflow_t H5Tget_overflow(void);
+H5_DLL herr_t H5Tset_overflow(H5T_overflow_t func);
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Tstrpad.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tstrpad.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tstrpad.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,162 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for setting & querying
+ *      the datatype string padding for the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_strpad_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5Tpkg.h"		/* Datatypes				*/
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_strpad_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_strpad_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_strpad_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_strpad_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_strpad_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tget_strpad
+ *
+ * Purpose:	The method used to store character strings differs with the
+ *		programming language: C usually null terminates strings while
+ *		Fortran left-justifies and space-pads strings.	This property
+ *		defines the storage mechanism for the string.
+ *
+ * Return:	Success:	The character set of a string type.
+ *
+ *		Failure:	H5T_STR_ERROR (Negative)
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January	 9, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works for derived datatypes.
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_str_t
+H5Tget_strpad(hid_t type_id)
+{
+    H5T_t	*dt = NULL;
+    H5T_str_t	ret_value;
+
+    FUNC_ENTER_API(H5Tget_strpad, H5T_STR_ERROR)
+    H5TRACE1("Tz","i",type_id);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, H5T_STR_ERROR, "not a datatype")
+    while (dt->shared->parent && !H5T_IS_STRING(dt->shared))
+        dt = dt->shared->parent;  /*defer to parent*/
+    if (!H5T_IS_STRING(dt->shared))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, H5T_STR_ERROR, "operation not defined for datatype class")
+
+    /* result */
+    if(H5T_IS_FIXED_STRING(dt->shared))
+        ret_value = dt->shared->u.atomic.u.s.pad;
+    else
+        ret_value = dt->shared->u.vlen.pad;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tset_strpad
+ *
+ * Purpose:	The method used to store character strings differs with the
+ *		programming language: C usually null terminates strings while
+ *		Fortran left-justifies and space-pads strings.	This property
+ *		defines the storage mechanism for the string.
+ *
+ *		When converting from a long string to a short string if the
+ *		short string is H5T_STR_NULLPAD or H5T_STR_SPACEPAD then the
+ *		string is simply truncated; otherwise if the short string is
+ *		H5T_STR_NULLTERM it will be truncated and a null terminator
+ *		is appended.
+ *
+ *		When converting from a short string to a long string, the
+ *		long string is padded on the end by appending nulls or
+ *		spaces.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, January	 9, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 22 Dec 1998
+ *	Also works for derived datatypes.
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Tset_strpad(hid_t type_id, H5T_str_t strpad)
+{
+    H5T_t	*dt = NULL;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Tset_strpad, FAIL)
+    H5TRACE2("e","iTz",type_id,strpad);
+
+    /* Check args */
+    if (NULL == (dt = H5I_object_verify(type_id,H5I_DATATYPE)))
+	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+    if (H5T_STATE_TRANSIENT!=dt->shared->state)
+	HGOTO_ERROR(H5E_ARGS, H5E_CANTINIT, FAIL, "datatype is read-only")
+    if (strpad < H5T_STR_NULLTERM || strpad >= H5T_NSTR)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "illegal string pad type")
+    while (dt->shared->parent && !H5T_IS_STRING(dt->shared))
+        dt = dt->shared->parent;  /*defer to parent*/
+    if (!H5T_IS_STRING(dt->shared))
+	HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, FAIL, "operation not defined for datatype class")
+
+    /* Commit */
+    if(H5T_IS_FIXED_STRING(dt->shared))
+        dt->shared->u.atomic.u.s.pad = strpad;
+    else
+        dt->shared->u.vlen.pad = strpad;
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Tvlen.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Tvlen.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Tvlen.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1318 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Module Info: This module contains the functionality for variable-length
+ *      datatypes in the H5T interface.
+ */
+
+#define H5T_PACKAGE		/*suppress error about including H5Tpkg	     */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5T_init_vlen_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dprivate.h"		/* Dataset functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5FLprivate.h"	/* Free Lists                           */
+#include "H5HGprivate.h"	/* Global Heaps				*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Pprivate.h"		/* Property lists			*/
+#include "H5Tpkg.h"		/* Datatypes				*/
+
+/* Local functions */
+static htri_t H5T_vlen_set_loc(const H5T_t *dt, H5F_t *f, H5T_vlen_loc_t loc);
+static herr_t H5T_vlen_reclaim_recurse(void *elem, const H5T_t *dt, H5MM_free_t free_func, void *free_info);
+static ssize_t H5T_vlen_seq_mem_getlen(const void *_vl);
+static void * H5T_vlen_seq_mem_getptr(void *_vl);
+static htri_t H5T_vlen_seq_mem_isnull(const H5F_t *f, void *_vl);
+static herr_t H5T_vlen_seq_mem_read(H5F_t *f, hid_t dxpl_id, void *_vl, void *_buf, size_t len);
+static herr_t H5T_vlen_seq_mem_write(H5F_t *f, hid_t dxpl_id, const H5T_vlen_alloc_info_t *vl_alloc_info, void *_vl, void *_buf, void *_bg, size_t seq_len, size_t base_size);
+static herr_t H5T_vlen_seq_mem_setnull(H5F_t *f, hid_t dxpl_id, void *_vl, void *_bg);
+static ssize_t H5T_vlen_str_mem_getlen(const void *_vl);
+static void * H5T_vlen_str_mem_getptr(void *_vl);
+static htri_t H5T_vlen_str_mem_isnull(const H5F_t *f, void *_vl);
+static herr_t H5T_vlen_str_mem_read(H5F_t *f, hid_t dxpl_id, void *_vl, void *_buf, size_t len);
+static herr_t H5T_vlen_str_mem_write(H5F_t *f, hid_t dxpl_id, const H5T_vlen_alloc_info_t *vl_alloc_info, void *_vl, void *_buf, void *_bg, size_t seq_len, size_t base_size);
+static herr_t H5T_vlen_str_mem_setnull(H5F_t *f, hid_t dxpl_id, void *_vl, void *_bg);
+static ssize_t H5T_vlen_disk_getlen(const void *_vl);
+static void * H5T_vlen_disk_getptr(void *_vl);
+static htri_t H5T_vlen_disk_isnull(const H5F_t *f, void *_vl);
+static herr_t H5T_vlen_disk_read(H5F_t *f, hid_t dxpl_id, void *_vl, void *_buf, size_t len);
+static herr_t H5T_vlen_disk_write(H5F_t *f, hid_t dxpl_id, const H5T_vlen_alloc_info_t *vl_alloc_info, void *_vl, void *_buf, void *_bg, size_t seq_len, size_t base_size);
+static herr_t H5T_vlen_disk_setnull(H5F_t *f, hid_t dxpl_id, void *_vl, void *_bg);
+
+/* Local variables */
+
+/* Default settings for variable-length allocation routines */
+static H5T_vlen_alloc_info_t H5T_vlen_def_vl_alloc_info ={
+    H5D_XFER_VLEN_ALLOC_DEF,
+    H5D_XFER_VLEN_ALLOC_INFO_DEF,
+    H5D_XFER_VLEN_FREE_DEF,
+    H5D_XFER_VLEN_FREE_INFO_DEF
+};
+
+/* Declare extern the free lists for H5T_t's and H5T_shared_t's */
+H5FL_EXTERN(H5T_t);
+H5FL_EXTERN(H5T_shared_t);
+
+
+/*--------------------------------------------------------------------------
+NAME
+   H5T_init_vlen_interface -- Initialize interface-specific information
+USAGE
+    herr_t H5T_init_vlen_interface()
+
+RETURNS
+    Non-negative on success/Negative on failure
+DESCRIPTION
+    Initializes any interface-specific data or routines.  (Just calls
+    H5T_init_iterface currently).
+
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_init_vlen_interface(void)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_init_vlen_interface)
+
+    FUNC_LEAVE_NOAPI(H5T_init())
+} /* H5T_init_vlen_interface() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Tvlen_create
+ *
+ * Purpose:	Create a new variable-length datatype based on the specified
+ *		BASE_TYPE.
+ *
+ * Return:	Success:	ID of new VL datatype
+ *
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, May 20, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5Tvlen_create(hid_t base_id)
+{
+    H5T_t	*base = NULL;		/*base datatype	*/
+    H5T_t	*dt = NULL;		/*new datatype	*/
+    hid_t	ret_value;	        /*return value			*/
+
+    FUNC_ENTER_API(H5Tvlen_create, FAIL)
+    H5TRACE1("i","i",base_id);
+
+    /* Check args */
+    if (NULL==(base=H5I_object_verify(base_id,H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an valid base datatype")
+
+    /* Create up VL datatype */
+    if ((dt=H5T_vlen_create(base))==NULL)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "invalid VL location")
+
+    /* Atomize the type */
+    if ((ret_value=H5I_register(H5I_DATATYPE, dt))<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register datatype")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_create
+ *
+ * Purpose:	Create a new variable-length datatype based on the specified
+ *		BASE_TYPE.
+ *
+ * Return:	Success:	new VL datatype
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, November 20, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5T_t *
+H5T_vlen_create(const H5T_t *base)
+{
+    H5T_t	*dt = NULL;		/*new VL datatype	*/
+    H5T_t	*ret_value;	/*return value			*/
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_vlen_create)
+
+    /* Check args */
+    assert(base);
+
+    /* Build new type */
+    if(NULL == (dt = H5T_alloc()))
+        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
+    dt->shared->type = H5T_VLEN;
+
+    /*
+     * Force conversions (i.e. memory to memory conversions should duplicate
+     * data, not point to the same VL sequences)
+     */
+    dt->shared->force_conv = TRUE;
+    dt->shared->parent = H5T_copy(base, H5T_COPY_ALL);
+
+    /* This is a sequence, not a string */
+    dt->shared->u.vlen.type = H5T_VLEN_SEQUENCE;
+
+    /* Set up VL information */
+    if (H5T_vlen_mark(dt, NULL, H5T_VLEN_MEMORY)<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "invalid VL location")
+
+    /* Set return value */
+    ret_value=dt;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5T_vlen_set_loc
+ *
+ * Purpose:	Sets the location of a VL datatype to be either on disk or in memory
+ *
+ * Return:
+ *  One of two values on success:
+ *      TRUE - If the location of any vlen types changed
+ *      FALSE - If the location of any vlen types is the same
+ *  <0 is returned on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Friday, June 4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static htri_t
+H5T_vlen_set_loc(const H5T_t *dt, H5F_t *f, H5T_vlen_loc_t loc)
+{
+    htri_t ret_value = 0;       /* Indicate that success, but no location change */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_vlen_set_loc)
+
+    /* check parameters */
+    assert(dt);
+    assert(loc>H5T_VLEN_BADLOC && loc<H5T_VLEN_MAXLOC);
+
+    /* Only change the location if it's different */
+    if(loc!=dt->shared->u.vlen.loc) {
+        /* Indicate that the location changed */
+        ret_value=TRUE;
+
+        switch(loc) {
+            case H5T_VLEN_MEMORY:   /* Memory based VL datatype */
+                assert(f==NULL);
+
+                /* Mark this type as being stored in memory */
+                dt->shared->u.vlen.loc=H5T_VLEN_MEMORY;
+
+                if(dt->shared->u.vlen.type==H5T_VLEN_SEQUENCE) {
+                    /* size in memory, disk size is different */
+                    dt->shared->size = sizeof(hvl_t);
+
+                    /* Set up the function pointers to access the VL sequence in memory */
+                    dt->shared->u.vlen.getlen=H5T_vlen_seq_mem_getlen;
+                    dt->shared->u.vlen.getptr=H5T_vlen_seq_mem_getptr;
+                    dt->shared->u.vlen.isnull=H5T_vlen_seq_mem_isnull;
+                    dt->shared->u.vlen.read=H5T_vlen_seq_mem_read;
+                    dt->shared->u.vlen.write=H5T_vlen_seq_mem_write;
+                    dt->shared->u.vlen.setnull=H5T_vlen_seq_mem_setnull;
+                } else if(dt->shared->u.vlen.type==H5T_VLEN_STRING) {
+                    /* size in memory, disk size is different */
+                    dt->shared->size = sizeof(char *);
+
+                    /* Set up the function pointers to access the VL string in memory */
+                    dt->shared->u.vlen.getlen=H5T_vlen_str_mem_getlen;
+                    dt->shared->u.vlen.getptr=H5T_vlen_str_mem_getptr;
+                    dt->shared->u.vlen.isnull=H5T_vlen_str_mem_isnull;
+                    dt->shared->u.vlen.read=H5T_vlen_str_mem_read;
+                    dt->shared->u.vlen.write=H5T_vlen_str_mem_write;
+                    dt->shared->u.vlen.setnull=H5T_vlen_str_mem_setnull;
+                } else {
+                    assert(0 && "Invalid VL type");
+                }
+
+                /* Reset file ID (since this VL is in memory) */
+                dt->shared->u.vlen.f=NULL;
+                break;
+
+            case H5T_VLEN_DISK:   /* Disk based VL datatype */
+                assert(f);
+
+                /* Mark this type as being stored on disk */
+                dt->shared->u.vlen.loc=H5T_VLEN_DISK;
+
+                /*
+                 * Size of element on disk is 4 bytes for the length, plus the size
+                 * of an address in this file, plus 4 bytes for the size of a heap
+                 * ID.  Memory size is different
+                 */
+                dt->shared->size = 4 + H5F_SIZEOF_ADDR(f) + 4;
+
+                /* Set up the function pointers to access the VL information on disk */
+                /* VL sequences and VL strings are stored identically on disk, so use the same functions */
+                dt->shared->u.vlen.getlen=H5T_vlen_disk_getlen;
+                dt->shared->u.vlen.getptr=H5T_vlen_disk_getptr;
+                dt->shared->u.vlen.isnull=H5T_vlen_disk_isnull;
+                dt->shared->u.vlen.read=H5T_vlen_disk_read;
+                dt->shared->u.vlen.write=H5T_vlen_disk_write;
+                dt->shared->u.vlen.setnull=H5T_vlen_disk_setnull;
+
+                /* Set file ID (since this VL is on disk) */
+                dt->shared->u.vlen.f=f;
+                break;
+
+            default:
+                HGOTO_ERROR (H5E_DATATYPE, H5E_BADRANGE, FAIL, "invalid VL datatype location")
+        } /* end switch */ /*lint !e788 All appropriate cases are covered */
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5T_vlen_set_loc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_seq_mem_getlen
+ *
+ * Purpose:	Retrieves the length of a memory based VL element.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, June 2, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static ssize_t
+H5T_vlen_seq_mem_getlen(const void *_vl)
+{
+    const hvl_t *vl=(const hvl_t *)_vl;   /* Pointer to the user's hvl_t information */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_vlen_seq_mem_getlen)
+
+    /* check parameters */
+    assert(vl);
+
+    FUNC_LEAVE_NOAPI((ssize_t)vl->len)
+}   /* end H5T_vlen_seq_mem_getlen() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_seq_mem_getptr
+ *
+ * Purpose:	Retrieves the pointer for a memory based VL element.
+ *
+ * Return:	Non-NULL on success/NULL on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Saturday, June 12, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5T_vlen_seq_mem_getptr(void *_vl)
+{
+    hvl_t *vl=(hvl_t *)_vl;   /* Pointer to the user's hvl_t information */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_vlen_seq_mem_getptr)
+
+    /* check parameters */
+    assert(vl);
+
+    FUNC_LEAVE_NOAPI(vl->p)
+}   /* end H5T_vlen_seq_mem_getptr() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_seq_mem_isnull
+ *
+ * Purpose:	Checks if a memory sequence is the "null" sequence
+ *
+ * Return:	TRUE/FALSE on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Saturday, November 8, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static htri_t
+H5T_vlen_seq_mem_isnull(const H5F_t UNUSED *f, void *_vl)
+{
+    hvl_t *vl=(hvl_t *)_vl;   /* Pointer to the user's hvl_t information */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_vlen_seq_mem_isnull)
+
+    /* check parameters */
+    assert(vl);
+
+    FUNC_LEAVE_NOAPI((vl->len==0 || vl->p==NULL) ? TRUE : FALSE)
+}   /* end H5T_vlen_seq_mem_isnull() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_seq_mem_read
+ *
+ * Purpose:	"Reads" the memory based VL sequence into a buffer
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, June 2, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5T_vlen_seq_mem_read(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, void *_vl, void *buf, size_t len)
+{
+    hvl_t *vl=(hvl_t *)_vl;   /* Pointer to the user's hvl_t information */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_vlen_seq_mem_read)
+
+    /* check parameters */
+    assert(vl && vl->p);
+    assert(buf);
+
+    HDmemcpy(buf,vl->p,len);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}   /* end H5T_vlen_seq_mem_read() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_seq_mem_write
+ *
+ * Purpose:	"Writes" the memory based VL sequence from a buffer
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, June 2, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5T_vlen_seq_mem_write(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const H5T_vlen_alloc_info_t *vl_alloc_info, void *_vl, void *buf, void UNUSED *_bg, size_t seq_len, size_t base_size)
+{
+    hvl_t vl;                       /* Temporary hvl_t to use during operation */
+    size_t len;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_vlen_seq_mem_write)
+
+    /* check parameters */
+    assert(_vl);
+    assert(buf);
+
+    if(seq_len!=0) {
+        len=seq_len*base_size;
+
+        /* Use the user's memory allocation routine is one is defined */
+        if(vl_alloc_info->alloc_func!=NULL) {
+            if(NULL==(vl.p=(vl_alloc_info->alloc_func)(len,vl_alloc_info->alloc_info)))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for VL data")
+          } /* end if */
+        else {  /* Default to system malloc */
+            if(NULL==(vl.p=H5MM_malloc(len)))
+                HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for VL data")
+          } /* end else */
+
+        /* Copy the data into the newly allocated buffer */
+        HDmemcpy(vl.p,buf,len);
+
+    } /* end if */
+    else
+        vl.p=NULL;
+
+    /* Set the sequence length */
+    vl.len=seq_len;
+
+    /* Set pointer in user's buffer with memcpy, to avoid alignment issues */
+    HDmemcpy(_vl,&vl,sizeof(hvl_t));
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5T_vlen_seq_mem_write() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_seq_mem_setnull
+ *
+ * Purpose:	Sets a VL info object in memory to the "nil" value
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Saturday, November 8, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5T_vlen_seq_mem_setnull(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, void *_vl, void UNUSED *_bg)
+{
+    hvl_t vl;                       /* Temporary hvl_t to use during operation */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_vlen_seq_mem_setnull)
+
+    /* check parameters */
+    assert(_vl);
+
+    /* Set the "nil" hvl_t */
+    vl.len=0;
+    vl.p=NULL;
+
+    /* Set pointer in user's buffer with memcpy, to avoid alignment issues */
+    HDmemcpy(_vl,&vl,sizeof(hvl_t));
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}   /* end H5T_vlen_seq_mem_setnull() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_str_mem_getlen
+ *
+ * Purpose:	Retrieves the length of a memory based VL string.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, June 2, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static ssize_t
+H5T_vlen_str_mem_getlen(const void *_vl)
+{
+    const char *s=*(const char * const *)_vl;   /* Pointer to the user's string information */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_vlen_str_mem_getlen)
+
+    /* check parameters */
+    assert(s);
+
+    FUNC_LEAVE_NOAPI((ssize_t)HDstrlen(s))
+}   /* end H5T_vlen_str_mem_getlen() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_str_mem_getptr
+ *
+ * Purpose:	Retrieves the pointer for a memory based VL string.
+ *
+ * Return:	Non-NULL on success/NULL on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Saturday, June 12, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void *
+H5T_vlen_str_mem_getptr(void *_vl)
+{
+    char *s=*(char **)_vl;   /* Pointer to the user's string information */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_vlen_str_mem_getptr)
+
+    /* check parameters */
+    assert(s);
+
+    FUNC_LEAVE_NOAPI(s)
+}   /* end H5T_vlen_str_mem_getptr() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_str_mem_isnull
+ *
+ * Purpose:	Checks if a memory string is a NULL pointer
+ *
+ * Return:	TRUE/FALSE on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Saturday, November 8, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static htri_t
+H5T_vlen_str_mem_isnull(const H5F_t UNUSED *f, void *_vl)
+{
+    char *s=*(char **)_vl;   /* Pointer to the user's string information */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_vlen_str_mem_isnull)
+
+    FUNC_LEAVE_NOAPI(s==NULL ? TRUE : FALSE)
+}   /* end H5T_vlen_str_mem_isnull() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_str_mem_read
+ *
+ * Purpose:	"Reads" the memory based VL string into a buffer
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, June 2, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5T_vlen_str_mem_read(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, void *_vl, void *buf, size_t len)
+{
+    char *s=*(char **)_vl;   /* Pointer to the user's hvl_t information */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_vlen_str_mem_read)
+
+    if(len>0) {
+        /* check parameters */
+        assert(s);
+        assert(buf);
+
+        HDmemcpy(buf,s,len);
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}   /* end H5T_vlen_str_mem_read() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_str_mem_write
+ *
+ * Purpose:	"Writes" the memory based VL string from a buffer
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, June 2, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5T_vlen_str_mem_write(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, const H5T_vlen_alloc_info_t *vl_alloc_info, void *_vl, void *buf, void UNUSED *_bg, size_t seq_len, size_t base_size)
+{
+    char *t;                        /* Pointer to temporary buffer allocated */
+    size_t len;                     /* Maximum length of the string to copy */
+    herr_t      ret_value=SUCCEED;  /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_vlen_str_mem_write)
+
+    /* check parameters */
+    assert(buf);
+
+    /* Use the user's memory allocation routine if one is defined */
+    if(vl_alloc_info->alloc_func!=NULL) {
+        if(NULL==(t=(vl_alloc_info->alloc_func)((seq_len+1)*base_size,vl_alloc_info->alloc_info)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for VL data")
+      } /* end if */
+    else {  /* Default to system malloc */
+        if(NULL==(t=H5MM_malloc((seq_len+1)*base_size)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for VL data")
+      } /* end else */
+
+    len=(seq_len*base_size);
+    HDmemcpy(t,buf,len);
+    t[len]='\0';
+
+    /* Set pointer in user's buffer with memcpy, to avoid alignment issues */
+    HDmemcpy(_vl,&t,sizeof(char *));
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value) /*lint !e429 The pointer in 't' has been copied */
+}   /* end H5T_vlen_str_mem_write() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_str_mem_setnull
+ *
+ * Purpose:	Sets a VL info object in memory to the "null" value
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Saturday, November 8, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5T_vlen_str_mem_setnull(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, void *_vl, void UNUSED *_bg)
+{
+    char *t=NULL;                   /* Pointer to temporary buffer allocated */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_vlen_str_mem_setnull)
+
+    /* Set pointer in user's buffer with memcpy, to avoid alignment issues */
+    HDmemcpy(_vl,&t,sizeof(char *));
+
+    FUNC_LEAVE_NOAPI(SUCCEED) /*lint !e429 The pointer in 't' has been copied */
+}   /* end H5T_vlen_str_mem_setnull() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_disk_getlen
+ *
+ * Purpose:	Retrieves the length of a disk based VL element.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, June 2, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static ssize_t
+H5T_vlen_disk_getlen(const void *_vl)
+{
+    const uint8_t *vl=(const uint8_t *)_vl; /* Pointer to the disk VL information */
+    size_t	seq_len;        /* Sequence length */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_vlen_disk_getlen)
+
+    /* check parameters */
+    assert(vl);
+
+    UINT32DECODE(vl, seq_len);
+
+    FUNC_LEAVE_NOAPI((ssize_t)seq_len)
+}   /* end H5T_vlen_disk_getlen() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_disk_getptr
+ *
+ * Purpose:	Retrieves the pointer to a disk based VL element.
+ *
+ * Return:	Non-NULL on success/NULL on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Saturday, June 12, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static void *
+H5T_vlen_disk_getptr(void UNUSED *vl)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_vlen_disk_getptr)
+
+    /* check parameters */
+    assert(vl);
+
+    FUNC_LEAVE_NOAPI(NULL)
+}   /* end H5T_vlen_disk_getptr() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_disk_isnull
+ *
+ * Purpose:	Checks if a disk VL info object is the "nil" object
+ *
+ * Return:	TRUE/FALSE on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Saturday, November 8, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static htri_t
+H5T_vlen_disk_isnull(const H5F_t *f, void *_vl)
+{
+    uint8_t *vl=(uint8_t *)_vl; /* Pointer to the disk VL information */
+    haddr_t addr;               /* Sequence's heap address */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5T_vlen_disk_isnull)
+
+    /* check parameters */
+    assert(vl);
+
+    /* Skip the sequence's length */
+    vl+=4;
+
+    /* Get the heap address */
+    H5F_addr_decode(f,(const uint8_t **)&vl,&addr);
+
+    FUNC_LEAVE_NOAPI(addr==0 ? TRUE : FALSE)
+}   /* end H5T_vlen_disk_isnull() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_disk_read
+ *
+ * Purpose:	Reads the disk based VL element into a buffer
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, June 2, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5T_vlen_disk_read(H5F_t *f, hid_t dxpl_id, void *_vl, void *buf, size_t UNUSED len)
+{
+    uint8_t *vl=(uint8_t *)_vl;   /* Pointer to the user's hvl_t information */
+    H5HG_t hobjid;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_vlen_disk_read)
+
+    /* check parameters */
+    assert(vl);
+    assert(buf);
+    assert(f);
+
+    /* Skip the length of the sequence */
+    vl += 4;
+
+    /* Get the heap information */
+    H5F_addr_decode(f,(const uint8_t **)&vl,&(hobjid.addr));
+    INT32DECODE(vl,hobjid.idx);
+
+    /* Check if this sequence actually has any data */
+    if(hobjid.addr>0) {
+        /* Read the VL information from disk */
+        if(H5HG_read(f,dxpl_id,&hobjid,buf)==NULL)
+            HGOTO_ERROR(H5E_DATATYPE, H5E_READERROR, FAIL, "Unable to read VL information")
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5T_vlen_disk_read() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_disk_write
+ *
+ * Purpose:	Writes the disk based VL element from a buffer
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, June 2, 1999
+ *
+ * Modifications:
+ *
+ *		Raymond Lu
+ *		Thursday, June 26, 2002
+ *		Free heap objects storing old data.
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5T_vlen_disk_write(H5F_t *f, hid_t dxpl_id, const H5T_vlen_alloc_info_t UNUSED *vl_alloc_info, void *_vl, void *buf, void *_bg, size_t seq_len, size_t base_size)
+{
+    uint8_t *vl=(uint8_t *)_vl; /*Pointer to the user's hvl_t information*/
+    uint8_t *bg=(uint8_t *)_bg; /*Pointer to the old data hvl_t          */
+    H5HG_t hobjid;              /* New VL sequence's heap ID */
+    size_t len;                 /* Size of new sequence on disk (in bytes) */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_vlen_disk_write)
+
+    /* check parameters */
+    assert(vl);
+    assert(seq_len==0 || buf);
+    assert(f);
+
+    /* Free heap object for old data.  */
+    if(bg!=NULL) {
+        H5HG_t bg_hobjid;       /* "Background" VL info sequence's ID info */
+
+        /* Skip the length of the sequence and heap object ID from background data. */
+        bg += 4;
+
+        /* Get heap information */
+        H5F_addr_decode(f, (const uint8_t **)&bg, &(bg_hobjid.addr));
+        INT32DECODE(bg, bg_hobjid.idx);
+
+        /* Free heap object for old data */
+        if(bg_hobjid.addr>0) {
+            /* Free heap object */
+            if(H5HG_remove(f, dxpl_id, &bg_hobjid)<0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_WRITEERROR, FAIL, "Unable to remove heap object")
+        } /* end if */
+    } /* end if */
+
+    /* Set the length of the sequence */
+    UINT32ENCODE(vl, seq_len);
+
+    /* Write the VL information to disk (allocates space also) */
+    len=(seq_len*base_size);
+    if(H5HG_insert(f,dxpl_id,len,buf,&hobjid)<0)
+        HGOTO_ERROR(H5E_DATATYPE, H5E_WRITEERROR, FAIL, "Unable to write VL information")
+
+    /* Encode the heap information */
+    H5F_addr_encode(f,&vl,hobjid.addr);
+    INT32ENCODE(vl,hobjid.idx);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5T_vlen_disk_write() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5T_vlen_disk_setnull
+ *
+ * Purpose:	Sets a VL info object on disk to the "nil" value
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Saturday, November 8, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5T_vlen_disk_setnull(H5F_t *f, hid_t dxpl_id, void *_vl, void *_bg)
+{
+    uint8_t *vl=(uint8_t *)_vl; /*Pointer to the user's hvl_t information*/
+    uint8_t *bg=(uint8_t *)_bg; /*Pointer to the old data hvl_t          */
+    uint32_t seq_len=0;         /* Sequence length */
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_vlen_disk_setnull)
+
+    /* check parameters */
+    assert(f);
+    assert(vl);
+
+    /* Free heap object for old data.  */
+    if(bg!=NULL) {
+        H5HG_t bg_hobjid;       /* "Background" VL info sequence's ID info */
+
+        /* Skip the length of the sequence and heap object ID from background data. */
+        bg += 4;
+
+        /* Get heap information */
+        H5F_addr_decode(f, (const uint8_t **)&bg, &(bg_hobjid.addr));
+        INT32DECODE(bg, bg_hobjid.idx);
+
+        /* Free heap object for old data */
+        if(bg_hobjid.addr>0) {
+            /* Free heap object */
+            if(H5HG_remove(f, dxpl_id, &bg_hobjid)<0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_WRITEERROR, FAIL, "Unable to remove heap object")
+         } /* end if */
+    } /* end if */
+
+    /* Set the length of the sequence */
+    UINT32ENCODE(vl, seq_len);
+
+    /* Encode the "nil" heap pointer information */
+    H5F_addr_encode(f,&vl,(haddr_t)0);
+    INT32ENCODE(vl,0);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5T_vlen_disk_setnull() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5T_vlen_reclaim_recurse
+ PURPOSE
+    Internal recursive routine to free VL datatypes
+ USAGE
+    herr_t H5T_vlen_reclaim(elem,dt)
+        void *elem;  IN/OUT: Pointer to the dataset element
+        H5T_t *dt;   IN: Datatype of dataset element
+
+ RETURNS
+    SUCCEED/FAIL
+ DESCRIPTION
+    Frees any dynamic memory used by VL datatypes in the current dataset
+    element.  Performs a recursive depth-first traversal of all compound
+    datatypes to free all VL datatype information allocated by any field.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+static herr_t
+H5T_vlen_reclaim_recurse(void *elem, const H5T_t *dt, H5MM_free_t free_func, void *free_info)
+{
+    unsigned i;     /* local index variable */
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI_NOINIT(H5T_vlen_reclaim_recurse)
+
+    assert(elem);
+    assert(dt);
+
+    /* Check the datatype of this element */
+    switch(dt->shared->type) {
+        case H5T_ARRAY:
+            /* Recurse on each element, if the array's base type is array, VL, enum or compound */
+            if(H5T_IS_COMPLEX(dt->shared->parent->shared->type)) {
+                void *off;     /* offset of field */
+
+                /* Calculate the offset member and recurse on it */
+                for(i=0; i<dt->shared->u.array.nelem; i++) {
+                    off=((uint8_t *)elem)+i*(dt->shared->parent->shared->size);
+                    if(H5T_vlen_reclaim_recurse(off,dt->shared->parent,free_func,free_info)<0)
+                        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTFREE, FAIL, "Unable to free array element")
+                } /* end for */
+            } /* end if */
+            break;
+
+        case H5T_COMPOUND:
+            /* Check each field and recurse on VL, compound, enum or array ones */
+            for (i=0; i<dt->shared->u.compnd.nmembs; i++) {
+                /* Recurse if it's VL, compound, enum or array */
+                if(H5T_IS_COMPLEX(dt->shared->u.compnd.memb[i].type->shared->type)) {
+                    void *off;     /* offset of field */
+
+                    /* Calculate the offset member and recurse on it */
+                    off=((uint8_t *)elem)+dt->shared->u.compnd.memb[i].offset;
+                    if(H5T_vlen_reclaim_recurse(off,dt->shared->u.compnd.memb[i].type,free_func,free_info)<0)
+                        HGOTO_ERROR(H5E_DATATYPE, H5E_CANTFREE, FAIL, "Unable to free compound field")
+                } /* end if */
+            } /* end for */
+            break;
+
+        case H5T_VLEN:
+            /* Recurse on the VL information if it's VL, compound, enum or array, then free VL sequence */
+            if(dt->shared->u.vlen.type==H5T_VLEN_SEQUENCE) {
+                hvl_t *vl=(hvl_t *)elem;    /* Temp. ptr to the vl info */
+
+                /* Check if there is anything actually in this sequence */
+                if(vl->len!=0) {
+                    /* Recurse if it's VL, array, enum or compound */
+                    if(H5T_IS_COMPLEX(dt->shared->parent->shared->type)) {
+                        void *off;     /* offset of field */
+
+                        /* Calculate the offset of each array element and recurse on it */
+                        while(vl->len>0) {
+                            off=((uint8_t *)vl->p)+(vl->len-1)*dt->shared->parent->shared->size;
+                            if(H5T_vlen_reclaim_recurse(off,dt->shared->parent,free_func,free_info)<0)
+                                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTFREE, FAIL, "Unable to free VL element")
+                            vl->len--;
+                        } /* end while */
+                    } /* end if */
+
+                    /* Free the VL sequence */
+                    if(free_func!=NULL)
+                        (*free_func)(vl->p,free_info);
+                    else
+                        H5MM_xfree(vl->p);
+                } /* end if */
+            } else if(dt->shared->u.vlen.type==H5T_VLEN_STRING) {
+                /* Free the VL string */
+                if(free_func!=NULL)
+                    (*free_func)(*(char **)elem,free_info);
+                else
+                    H5MM_xfree(*(char **)elem);
+            } else {
+                assert(0 && "Invalid VL type");
+            } /* end else */
+            break;
+
+        default:
+            break;
+    } /* end switch */ /*lint !e788 All appropriate cases are covered */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5T_vlen_reclaim_recurse() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5T_vlen_reclaim
+ PURPOSE
+    Default method to reclaim any VL data for a buffer element
+ USAGE
+    herr_t H5T_vlen_reclaim(elem,type_id,ndim,point,op_data)
+        void *elem;  IN/OUT: Pointer to the dataset element
+        hid_t type_id;   IN: Datatype of dataset element
+        unsigned ndim;    IN: Number of dimensions in dataspace
+        hsize_t *point; IN: Coordinate location of element in dataspace
+        void *op_data    IN: Operator data
+
+ RETURNS
+    SUCCEED/FAIL
+ DESCRIPTION
+    Frees any dynamic memory used by VL datatypes in the current dataset
+    element.  Recursively descends compound datatypes to free all VL datatype
+    information allocated by any field.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+/* ARGSUSED */
+herr_t
+H5T_vlen_reclaim(void *elem, hid_t type_id, unsigned UNUSED ndim, const hsize_t UNUSED *point, void *op_data)
+{
+    H5T_vlen_alloc_info_t *vl_alloc_info = (H5T_vlen_alloc_info_t *)op_data; /* VL allocation info from iterator */
+    H5T_t	*dt;
+    herr_t ret_value;
+
+    FUNC_ENTER_NOAPI(H5T_vlen_reclaim, FAIL)
+
+    assert(elem);
+    assert(vl_alloc_info);
+    assert(H5I_DATATYPE == H5I_get_type(type_id));
+
+    /* Check args */
+    if (NULL==(dt=H5I_object_verify(type_id,H5I_DATATYPE)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a datatype")
+
+    /* Pull the free function and free info pointer out of the op_data and call the recurse datatype free function */
+    ret_value=H5T_vlen_reclaim_recurse(elem,dt,vl_alloc_info->free_func,vl_alloc_info->free_info);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5T_vlen_reclaim() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5T_vlen_get_alloc_info
+ PURPOSE
+    Retrieve allocation info for VL datatypes
+ USAGE
+    herr_t H5T_vlen_get_alloc_info(dxpl_id,vl_alloc_info)
+        hid_t dxpl_id;   IN: Data transfer property list to query
+        H5T_vlen_alloc_info_t *vl_alloc_info;  IN/OUT: Pointer to VL allocation information to fill
+
+ RETURNS
+    SUCCEED/FAIL
+ DESCRIPTION
+    Retrieve the VL allocation functions and information from a dataset
+    transfer property list.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+    The VL_ALLOC_INFO pointer should point at already allocated memory to place
+    non-default property list info.  If a default property list is used, the
+    VL_ALLOC_INFO pointer will be changed to point at the default information.
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+herr_t
+H5T_vlen_get_alloc_info(hid_t dxpl_id, H5T_vlen_alloc_info_t **vl_alloc_info)
+{
+    H5P_genplist_t *plist;              /* DX property list */
+    herr_t ret_value=SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5T_vlen_get_alloc_info, FAIL)
+
+    assert(H5I_GENPROP_LST == H5I_get_type(dxpl_id));
+    assert(vl_alloc_info);
+
+    /* Check for the default DXPL */
+    if(dxpl_id==H5P_DATASET_XFER_DEFAULT)
+        *vl_alloc_info=&H5T_vlen_def_vl_alloc_info;
+    else {
+        /* Check args */
+        if(NULL == (plist = H5P_object_verify(dxpl_id,H5P_DATASET_XFER)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
+
+        /* Get the allocation functions & information */
+        if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_NAME,&(*vl_alloc_info)->alloc_func)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value")
+        if (H5P_get(plist,H5D_XFER_VLEN_ALLOC_INFO_NAME,&(*vl_alloc_info)->alloc_info)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value")
+        if (H5P_get(plist,H5D_XFER_VLEN_FREE_NAME,&(*vl_alloc_info)->free_func)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value")
+        if (H5P_get(plist,H5D_XFER_VLEN_FREE_INFO_NAME,&(*vl_alloc_info)->free_info)<0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value")
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}   /* end H5T_vlen_get_alloc_info() */
+
+
+/*--------------------------------------------------------------------------
+ NAME
+    H5T_vlen_mark
+ PURPOSE
+    Recursively mark any VL datatypes as on disk/in memory
+ USAGE
+    htri_t H5T_vlen_mark(dt,f,loc)
+        H5T_t *dt;              IN/OUT: Pointer to the datatype to mark
+        H5F_t *dt;              IN: Pointer to the file the datatype is in
+        H5T_vlen_type_t loc     IN: location of VL type
+
+ RETURNS
+    One of two values on success:
+        TRUE - If the location of any vlen types changed
+        FALSE - If the location of any vlen types is the same
+    <0 is returned on failure
+ DESCRIPTION
+    Recursively descends any VL or compound datatypes to mark all VL datatypes
+    as either on disk or in memory.
+ GLOBAL VARIABLES
+ COMMENTS, BUGS, ASSUMPTIONS
+ EXAMPLES
+ REVISION LOG
+--------------------------------------------------------------------------*/
+htri_t
+H5T_vlen_mark(H5T_t *dt, H5F_t *f, H5T_vlen_loc_t loc)
+{
+    htri_t vlen_changed;    /* Whether H5T_vlen_mark changed the type (even if the size didn't change) */
+    htri_t ret_value = 0;   /* Indicate that success, but no location change */
+    unsigned i;             /* Local index variable */
+    int accum_change=0;     /* Amount of change in the offset of the fields */
+    size_t old_size;        /* Previous size of a field */
+
+    FUNC_ENTER_NOAPI(H5T_vlen_mark, FAIL);
+
+    assert(dt);
+    assert(loc>H5T_VLEN_BADLOC && loc<H5T_VLEN_MAXLOC);
+
+    /* Check the datatype of this element */
+    switch(dt->shared->type) {
+        case H5T_ARRAY:  /* Recurse on VL, compound and array base element type */
+            /* Recurse if it's VL, compound or array */
+            /* (If the type is compound and the force_conv flag is _not_ set, the type cannot change in size, so don't recurse) */
+            if(dt->shared->parent->shared->force_conv && H5T_IS_COMPLEX(dt->shared->parent->shared->type)) {
+                /* Keep the old base element size for later */
+                old_size=dt->shared->parent->shared->size;
+
+                /* Mark the VL, compound or array type */
+                if((vlen_changed=H5T_vlen_mark(dt->shared->parent,f,loc))<0)
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "Unable to set VL location");
+                if(vlen_changed>0)
+                    ret_value=vlen_changed;
+
+                /* Check if the field changed size */
+                if(old_size != dt->shared->parent->shared->size) {
+                    /* Adjust the size of the array */
+                    dt->shared->size = dt->shared->u.array.nelem*dt->shared->parent->shared->size;
+                } /* end if */
+            } /* end if */
+            break;
+
+        case H5T_COMPOUND:  /* Check each field and recurse on VL, compound and array type */
+            /* Compound datatypes can't change in size if the force_conv flag is not set */
+            if(dt->shared->force_conv) {
+                /* Sort the fields based on offsets */
+                H5T_sort_value(dt,NULL);
+
+                for (i=0; i<dt->shared->u.compnd.nmembs; i++) {
+                    /* Apply the accumulated size change to the offset of the field */
+                    dt->shared->u.compnd.memb[i].offset += accum_change;
+
+                    /* Recurse if it's VL, compound, enum or array */
+                    /* (If the force_conv flag is _not_ set, the type cannot change in size, so don't recurse) */
+                    if(dt->shared->u.compnd.memb[i].type->shared->force_conv && H5T_IS_COMPLEX(dt->shared->u.compnd.memb[i].type->shared->type)) {
+                        /* Keep the old field size for later */
+                        old_size=dt->shared->u.compnd.memb[i].type->shared->size;
+
+                        /* Mark the VL, compound, enum or array type */
+                        if((vlen_changed=H5T_vlen_mark(dt->shared->u.compnd.memb[i].type,f,loc))<0)
+                            HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "Unable to set VL location");
+                        if(vlen_changed>0)
+                            ret_value=vlen_changed;
+
+                        /* Check if the field changed size */
+                        if(old_size != dt->shared->u.compnd.memb[i].type->shared->size) {
+                            /* Adjust the size of the member */
+                            dt->shared->u.compnd.memb[i].size = (dt->shared->u.compnd.memb[i].size*dt->shared->u.compnd.memb[i].type->shared->size)/old_size;
+
+                            /* Add that change to the accumulated size change */
+                            accum_change += (dt->shared->u.compnd.memb[i].type->shared->size - (int)old_size);
+                        } /* end if */
+                    } /* end if */
+                } /* end for */
+
+                /* Apply the accumulated size change to the datatype */
+                dt->shared->size += accum_change;
+            } /* end if */
+            break;
+
+        case H5T_VLEN: /* Recurse on the VL information if it's VL, compound or array, then free VL sequence */
+            /* Recurse if it's VL, compound or array */
+            /* (If the force_conv flag is _not_ set, the type cannot change in size, so don't recurse) */
+            if(dt->shared->parent->shared->force_conv && H5T_IS_COMPLEX(dt->shared->parent->shared->type)) {
+                if((vlen_changed=H5T_vlen_mark(dt->shared->parent,f,loc))<0)
+                    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "Unable to set VL location");
+                if(vlen_changed>0)
+                    ret_value=vlen_changed;
+            } /* end if */
+
+            /* Mark this VL sequence */
+            if((vlen_changed=H5T_vlen_set_loc(dt,f,loc))<0)
+                HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "Unable to set VL location");
+            if(vlen_changed>0)
+                ret_value=vlen_changed;
+            break;
+
+        default:
+            break;
+    } /* end switch */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value);
+}   /* end H5T_vlen_mark() */
+

Added: packages/hdf5/branches/upstream/current/src/H5V.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5V.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5V.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1343 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Robb Matzke <matzke at llnl.gov>
+ *	       Friday, October 10, 1997
+ */
+
+
+#include "H5private.h"
+#include "H5Eprivate.h"
+#include "H5Oprivate.h"
+#include "H5Vprivate.h"
+
+/* Local macros */
+#define H5V_HYPER_NDIMS H5O_LAYOUT_NDIMS
+
+/* Local prototypes */
+static void
+H5V_stride_optimize1(unsigned *np/*in,out*/, hsize_t *elmt_size/*in,out*/,
+		     const hsize_t *size, hsize_t *stride1);
+static void
+H5V_stride_optimize2(unsigned *np/*in,out*/, hsize_t *elmt_size/*in,out*/,
+		     const hsize_t *size, hsize_t *stride1, hsize_t *stride2);
+#ifdef LATER
+static void
+H5V_stride_copy2(hsize_t nelmts, hsize_t elmt_size,
+     unsigned dst_n, const hsize_t *dst_size, const ssize_t *dst_stride, void *_dst,
+     unsigned src_n, const hsize_t *src_size, const ssize_t *src_stride, const void *_src);
+#endif /* LATER */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_stride_optimize1
+ *
+ * Purpose:	Given a stride vector which references elements of the
+ *		specified size, optimize the dimensionality, the stride
+ *		vector, and the element size to minimize the dimensionality
+ *		and the number of memory accesses.
+ *
+ *		All arguments are passed by reference and their values may be
+ *		modified by this function.
+ *
+ * Return:	None
+ *
+ * Programmer:	Robb Matzke
+ *		Saturday, October 11, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+H5V_stride_optimize1(unsigned *np/*in,out*/, hsize_t *elmt_size/*in,out*/,
+		     const hsize_t *size, hsize_t *stride1)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5V_stride_optimize1);
+
+    /*
+     * This has to be true because if we optimize the dimensionality down to
+     * zero we still must make one reference.
+     */
+    assert(1 == H5V_vector_reduce_product(0, NULL));
+
+    /*
+     * Combine adjacent memory accesses
+     */
+    while (*np && stride1[*np-1]>0 &&
+           (hsize_t)(stride1[*np-1])==*elmt_size) {
+        *elmt_size *= size[*np-1];
+        if (--*np)
+            stride1[*np-1] += size[*np] * stride1[*np];
+    }
+
+    FUNC_LEAVE_NOAPI_VOID
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_stride_optimize2
+ *
+ * Purpose:	Given two stride vectors which reference elements of the
+ *		specified size, optimize the dimensionality, the stride
+ *		vectors, and the element size to minimize the dimensionality
+ *		and the number of memory accesses.
+ *
+ *		All arguments are passed by reference and their values may be
+ *		modified by this function.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Saturday, October 11, 1997
+ *
+ * Modifications:
+ *              Unrolled loops for common cases
+ *              Quincey Koziol
+ *		?, ? ?, 2001?
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+H5V_stride_optimize2(unsigned *np/*in,out*/, hsize_t *elmt_size/*in,out*/,
+		     const hsize_t *size, hsize_t *stride1, hsize_t *stride2)
+{
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5V_stride_optimize2)
+
+    /*
+     * This has to be true because if we optimize the dimensionality down to
+     * zero we still must make one reference.
+     */
+    assert(1 == H5V_vector_reduce_product(0, NULL));
+    assert (*elmt_size>0);
+
+    /*
+     * Combine adjacent memory accesses
+     */
+
+    /* Unroll loop for common cases */
+    switch(*np) {
+        case 1: /* For 0-D datasets (dunno if this ever gets used...) */
+            if(stride1[0] == *elmt_size && stride2[0] == *elmt_size) {
+                *elmt_size *= size[0];
+                --*np;  /* *np decrements to a value of 0 now */
+            } /* end if */
+            break;
+
+        case 2: /* For 1-D datasets */
+            if(stride1[1] == *elmt_size && stride2[1] == *elmt_size) {
+                *elmt_size *= size[1];
+                --*np;  /* *np decrements to a value of 1 now */
+                stride1[0] += size[1] * stride1[1];
+                stride2[0] += size[1] * stride2[1];
+
+                if(stride1[0] == *elmt_size && stride2[0] == *elmt_size) {
+                    *elmt_size *= size[0];
+                    --*np;  /* *np decrements to a value of 0 now */
+                } /* end if */
+            } /* end if */
+            break;
+
+        case 3: /* For 2-D datasets */
+            if(stride1[2] == *elmt_size && stride2[2] == *elmt_size) {
+                *elmt_size *= size[2];
+                --*np;  /* *np decrements to a value of 2 now */
+                stride1[1] += size[2] * stride1[2];
+                stride2[1] += size[2] * stride2[2];
+
+                if(stride1[1] == *elmt_size && stride2[1] == *elmt_size) {
+                    *elmt_size *= size[1];
+                    --*np;  /* *np decrements to a value of 1 now */
+                    stride1[0] += size[1] * stride1[1];
+                    stride2[0] += size[1] * stride2[1];
+
+                    if(stride1[0] == *elmt_size && stride2[0] == *elmt_size) {
+                        *elmt_size *= size[0];
+                        --*np;  /* *np decrements to a value of 0 now */
+                    } /* end if */
+                } /* end if */
+            } /* end if */
+            break;
+
+        case 4: /* For 3-D datasets */
+            if(stride1[3] == *elmt_size && stride2[3] == *elmt_size) {
+                *elmt_size *= size[3];
+                --*np;  /* *np decrements to a value of 3 now */
+                stride1[2] += size[3] * stride1[3];
+                stride2[2] += size[3] * stride2[3];
+
+                if(stride1[2] == *elmt_size && stride2[2] == *elmt_size) {
+                    *elmt_size *= size[2];
+                    --*np;  /* *np decrements to a value of 2 now */
+                    stride1[1] += size[2] * stride1[2];
+                    stride2[1] += size[2] * stride2[2];
+
+                    if(stride1[1] == *elmt_size && stride2[1] == *elmt_size) {
+                        *elmt_size *= size[1];
+                        --*np;  /* *np decrements to a value of 1 now */
+                        stride1[0] += size[1] * stride1[1];
+                        stride2[0] += size[1] * stride2[1];
+
+                        if(stride1[0] == *elmt_size && stride2[0] == *elmt_size) {
+                            *elmt_size *= size[0];
+                            --*np;  /* *np decrements to a value of 0 now */
+                        } /* end if */
+                    } /* end if */
+                } /* end if */
+            } /* end if */
+            break;
+
+        default:
+            while (*np &&
+                    stride1[*np-1] == *elmt_size &&
+                    stride2[*np-1] == *elmt_size) {
+                *elmt_size *= size[*np-1];
+                if (--*np) {
+                    stride1[*np-1] += size[*np] * stride1[*np];
+                    stride2[*np-1] += size[*np] * stride2[*np];
+                }
+            }
+            break;
+    } /* end switch */
+
+    FUNC_LEAVE_NOAPI_VOID
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_hyper_stride
+ *
+ * Purpose:	Given a description of a hyperslab, this function returns
+ *		(through STRIDE[]) the byte strides appropriate for accessing
+ *		all bytes of the hyperslab and the byte offset where the
+ *		striding will begin.  The SIZE can be passed to the various
+ *		stride functions.
+ *
+ *		The dimensionality of the whole array, the hyperslab, and the
+ *		returned stride array is N.  The whole array dimensions are
+ *		TOTAL_SIZE and the hyperslab is at offset OFFSET and has
+ *		dimensions SIZE.
+ *
+ *		The stride and starting point returned will cause the
+ *		hyperslab elements to be referenced in C order.
+ *
+ * Return:	Success:	Byte offset from beginning of array to start
+ *				of striding.
+ *
+ *		Failure:	abort() -- should never fail
+ *
+ * Programmer:	Robb Matzke
+ *		Saturday, October 11, 1997
+ *
+ * Modifications:
+ *              Unrolled loops for common cases
+ *              Quincey Koziol
+ *		?, ? ?, 2001?
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t
+H5V_hyper_stride(unsigned n, const hsize_t *size,
+		 const hsize_t *total_size, const hsize_t *offset,
+		 hsize_t *stride/*out*/)
+{
+    hsize_t	    skip;	/*starting point byte offset		*/
+    hsize_t	    acc;	/*accumulator				*/
+    int		i;		/*counter				*/
+    hsize_t	    ret_value;  /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5V_hyper_stride)
+
+    assert(n <= H5V_HYPER_NDIMS);
+    assert(size);
+    assert(total_size);
+    assert(stride);
+
+    /* init */
+    assert(n>0);
+    stride[n-1] = 1;
+    skip = offset ? offset[n-1] : 0;
+
+    switch(n) {
+        case 2: /* 1-D dataset */
+            assert (total_size[1]>=size[1]);
+            stride[0] = total_size[1]-size[1]; /*overflow checked*/
+            acc = total_size[1];
+            skip += acc * (offset ? offset[0] : 0);
+            break;
+
+        case 3: /* 2-D dataset */
+            assert (total_size[2]>=size[2]);
+            stride[1] = total_size[2]-size[2]; /*overflow checked*/
+            acc = total_size[2];
+            skip += acc * (offset ? (hsize_t)offset[1] : 0);
+
+            assert (total_size[1]>=size[1]);
+            stride[0] = acc * (total_size[1] - size[1]); /*overflow checked*/
+            acc *= total_size[1];
+            skip += acc * (offset ? (hsize_t)offset[0] : 0);
+            break;
+
+        case 4: /* 3-D dataset */
+            assert (total_size[3]>=size[3]);
+            stride[2] = total_size[3]-size[3]; /*overflow checked*/
+            acc = total_size[3];
+            skip += acc * (offset ? (hsize_t)offset[2] : 0);
+
+            assert (total_size[2]>=size[2]);
+            stride[1] = acc * (total_size[2] - size[2]); /*overflow checked*/
+            acc *= total_size[2];
+            skip += acc * (offset ? (hsize_t)offset[1] : 0);
+
+            assert (total_size[1]>=size[1]);
+            stride[0] = acc * (total_size[1] - size[1]); /*overflow checked*/
+            acc *= total_size[1];
+            skip += acc * (offset ? (hsize_t)offset[0] : 0);
+            break;
+
+        default:
+            /* others */
+            for (i=(int)(n-2), acc=1; i>=0; --i) {
+                assert (total_size[i+1]>=size[i+1]);
+                stride[i] = acc * (total_size[i+1] - size[i+1]); /*overflow checked*/
+                acc *= total_size[i+1];
+                skip += acc * (offset ? (hsize_t)offset[i] : 0);
+            }
+            break;
+    } /* end switch */
+
+    /* Set return value */
+    ret_value=skip;
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_hyper_eq
+ *
+ * Purpose:	Determines whether two hyperslabs are equal.  This function
+ *		assumes that both hyperslabs are relative to the same array,
+ *		for if not, they could not possibly be equal.
+ *
+ * Return:	Success:	TRUE if the hyperslabs are equal (that is,
+ *				both refer to exactly the same elements of an
+ *				array)
+ *
+ *				FALSE otherwise.
+ *
+ *		Failure:	TRUE the rank is zero or if both hyperslabs
+ *				are of zero size.
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, October 17, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5V_hyper_eq(unsigned n,
+	     const hsize_t *offset1, const hsize_t *size1,
+	     const hsize_t *offset2, const hsize_t *size2)
+{
+    hsize_t	nelmts1 = 1, nelmts2 = 1;
+    unsigned	i;
+    htri_t      ret_value=TRUE;         /* Return value */
+
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5V_hyper_eq)
+
+    if (n == 0) HGOTO_DONE(TRUE)
+
+    for (i=0; i<n; i++) {
+	if ((offset1 ? offset1[i] : 0) != (offset2 ? offset2[i] : 0))
+	    HGOTO_DONE(FALSE)
+	if ((size1 ? size1[i] : 0) != (size2 ? size2[i] : 0))
+	    HGOTO_DONE(FALSE)
+	if (0 == (nelmts1 *= (size1 ? size1[i] : 0)))
+            HGOTO_DONE(FALSE)
+	if (0 == (nelmts2 *= (size2 ? size2[i] : 0)))
+            HGOTO_DONE(FALSE)
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_hyper_disjointp
+ *
+ * Purpose:	Determines if two hyperslabs are disjoint.
+ *
+ * Return:	Success:	FALSE if they are not disjoint.
+ *				TRUE if they are disjoint.
+ *
+ *		Failure:	A hyperslab of zero size is disjoint from all
+ *				other hyperslabs.
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, October 16, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5V_hyper_disjointp(unsigned n,
+		    const hsize_t *offset1, const size_t *size1,
+		    const hsize_t *offset2, const size_t *size2)
+{
+    unsigned	u;
+    htri_t      ret_value=FALSE;        /* Return value */
+
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5V_hyper_disjointp)
+
+    if (!n || !size1 || !size2)	HGOTO_DONE(TRUE)
+
+    for (u=0; u<n; u++) {
+        assert (size1[u]<HSIZET_MAX);
+        assert (size2[u]<HSIZET_MAX);
+
+        if (0==size1[u] || 0==size2[u])
+            HGOTO_DONE(TRUE)
+        if (((offset1?offset1[u]:0) < (offset2?offset2[u]:0) &&
+             ((offset1?offset1[u]:0) + size1[u] <= (offset2?offset2[u]:0))) ||
+            ((offset2?offset2[u]:0) < (offset1?offset1[u]:0) &&
+             ((offset2?offset2[u]:0) + size2[u] <= (offset1?offset1[u]:0))))
+            HGOTO_DONE(TRUE)
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_hyper_fill
+ *
+ * Purpose:	Similar to memset() except it operates on hyperslabs...
+ *
+ *		Fills a hyperslab of array BUF with some value VAL.  BUF
+ *		is treated like a C-order array with N dimensions where the
+ *		size of each dimension is TOTAL_SIZE[].	 The hyperslab which
+ *		will be filled with VAL begins at byte offset OFFSET[] from
+ *		the minimum corner of BUF and continues for SIZE[] bytes in
+ *		each dimension.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, October 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5V_hyper_fill(unsigned n, const hsize_t *_size,
+	       const hsize_t *total_size, const hsize_t *offset, void *_dst,
+	       unsigned fill_value)
+{
+    uint8_t	*dst = (uint8_t*)_dst;	/*cast for ptr arithmetic	*/
+    hsize_t	size[H5V_HYPER_NDIMS];	/*a modifiable copy of _size	*/
+    hsize_t	dst_stride[H5V_HYPER_NDIMS]; /*destination stride info  */
+    hsize_t	dst_start;		/*byte offset to start of stride*/
+    hsize_t	elmt_size = 1;		/*bytes per element		*/
+    herr_t	ret_value;		/*function return status	*/
+#ifndef NDEBUG
+    unsigned	u;
+#endif
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5V_hyper_fill)
+
+    /* check args */
+    assert(n > 0 && n <= H5V_HYPER_NDIMS);
+    assert(_size);
+    assert(total_size);
+    assert(dst);
+#ifndef NDEBUG
+    for (u = 0; u < n; u++) {
+        assert(_size[u] > 0);
+        assert(total_size[u] > 0);
+    }
+#endif
+
+    /* Copy the size vector so we can modify it */
+    H5V_vector_cpy(n, size, _size);
+
+    /* Compute an optimal destination stride vector */
+    dst_start = H5V_hyper_stride(n, size, total_size, offset, dst_stride);
+    H5V_stride_optimize1(&n, &elmt_size, size, dst_stride);
+
+    /* Copy */
+    ret_value = H5V_stride_fill(n, elmt_size, size, dst_stride, dst+dst_start,
+			     fill_value);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_hyper_copy
+ *
+ * Purpose:	Copies a hyperslab from the source to the destination.
+ *
+ *		A hyperslab is a logically contiguous region of
+ *		multi-dimensional size SIZE of an array whose dimensionality
+ *		is N and whose total size is DST_TOTAL_SIZE or SRC_TOTAL_SIZE.
+ *		The minimum corner of the hyperslab begins at a
+ *		multi-dimensional offset from the minimum corner of the DST
+ *		(destination) or SRC (source) array.  The sizes and offsets
+ *		are assumed to be in C order, that is, the first size/offset
+ *		varies the slowest while the last varies the fastest in the
+ *		mapping from N-dimensional space to linear space.  This
+ *		function assumes that the array elements are single bytes (if
+ *		your array has multi-byte elements then add an additional
+ *		dimension whose size is that of your element).
+ *
+ *		The SRC and DST array may be the same array, but the results
+ *		are undefined if the source hyperslab overlaps the
+ *		destination hyperslab.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, October 10, 1997
+ *
+ * Modifications:
+ *              Unrolled loops for common cases
+ *              Quincey Koziol
+ *		?, ? ?, 2001?
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5V_hyper_copy(unsigned n, const hsize_t *_size,
+
+	       /*destination*/
+	       const hsize_t *dst_size, const hsize_t *dst_offset,
+	       void *_dst,
+
+	       /*source*/
+	       const hsize_t *src_size, const hsize_t *src_offset,
+	       const void *_src)
+{
+    const uint8_t *src = (const uint8_t*)_src;	/*cast for ptr arithmtc */
+    uint8_t	*dst = (uint8_t*) _dst;		/*cast for ptr arithmtc */
+    hsize_t	size[H5V_HYPER_NDIMS];		/*a modifiable _size	*/
+    hsize_t	src_stride[H5V_HYPER_NDIMS];	/*source stride info	*/
+    hsize_t	dst_stride[H5V_HYPER_NDIMS];	/*dest stride info	*/
+    hsize_t	dst_start, src_start;		/*offset to start at	*/
+    hsize_t	elmt_size = 1;			/*element size in bytes */
+    herr_t	ret_value;			/*return status		*/
+#ifndef NDEBUG
+    unsigned	u;
+#endif
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5V_hyper_copy)
+
+    /* check args */
+    assert(n > 0 && n <= H5V_HYPER_NDIMS);
+    assert(_size);
+    assert(dst_size);
+    assert(src_size);
+    assert(dst);
+    assert(src);
+#ifndef NDEBUG
+    for (u = 0; u < n; u++) {
+        assert(_size[u] > 0);
+        assert(dst_size[u] > 0);
+        assert(src_size[u] > 0);
+    }
+#endif
+
+    /* Copy the size vector so we can modify it */
+    H5V_vector_cpy(n, size, _size);
+
+    /* Compute stride vectors for source and destination */
+#ifdef NO_INLINED_CODE
+    dst_start = H5V_hyper_stride(n, size, dst_size, dst_offset, dst_stride);
+    src_start = H5V_hyper_stride(n, size, src_size, src_offset, src_stride);
+#else /* NO_INLINED_CODE */
+    /* in-line version of two calls to H5V_hyper_stride() */
+    {
+        hsize_t	    dst_acc;	/*accumulator				*/
+        hsize_t	    src_acc;	/*accumulator				*/
+        int        ii;		    /*counter				*/
+
+        /* init */
+        assert(n>0);
+        dst_stride[n-1] = 1;
+        src_stride[n-1] = 1;
+        dst_start = dst_offset ? dst_offset[n-1] : 0;
+        src_start = src_offset ? src_offset[n-1] : 0;
+
+        /* Unroll loop for common cases */
+        switch(n) {
+            case 2:
+                assert (dst_size[1]>=size[1]);
+                assert (src_size[1]>=size[1]);
+                dst_stride[0] = dst_size[1] - size[1]; /*overflow checked*/
+                src_stride[0] = src_size[1] - size[1]; /*overflow checked*/
+                dst_acc = dst_size[1];
+                src_acc = src_size[1];
+                dst_start += dst_acc * (dst_offset ? dst_offset[0] : 0);
+                src_start += src_acc * (src_offset ? src_offset[0] : 0);
+                break;
+
+            case 3:
+                assert (dst_size[2]>=size[2]);
+                assert (src_size[2]>=size[2]);
+                dst_stride[1] = dst_size[2] - size[2]; /*overflow checked*/
+                src_stride[1] = src_size[2] - size[2]; /*overflow checked*/
+                dst_acc = dst_size[2];
+                src_acc = src_size[2];
+                dst_start += dst_acc * (dst_offset ? dst_offset[1] : 0);
+                src_start += src_acc * (src_offset ? src_offset[1] : 0);
+
+                assert (dst_size[1]>=size[1]);
+                assert (src_size[1]>=size[1]);
+                dst_stride[0] = dst_acc * (dst_size[1] - size[1]); /*overflow checked*/
+                src_stride[0] = src_acc * (src_size[1] - size[1]); /*overflow checked*/
+                dst_acc *= dst_size[1];
+                src_acc *= src_size[1];
+                dst_start += dst_acc * (dst_offset ? dst_offset[0] : 0);
+                src_start += src_acc * (src_offset ? src_offset[0] : 0);
+                break;
+
+            case 4:
+                assert (dst_size[3]>=size[3]);
+                assert (src_size[3]>=size[3]);
+                dst_stride[2] = dst_size[3] - size[3]; /*overflow checked*/
+                src_stride[2] = src_size[3] - size[3]; /*overflow checked*/
+                dst_acc = dst_size[3];
+                src_acc = src_size[3];
+                dst_start += dst_acc * (dst_offset ? dst_offset[2] : 0);
+                src_start += src_acc * (src_offset ? src_offset[2] : 0);
+
+                assert (dst_size[2]>=size[2]);
+                assert (src_size[2]>=size[2]);
+                dst_stride[1] = dst_acc * (dst_size[2] - size[2]); /*overflow checked*/
+                src_stride[1] = src_acc * (src_size[2] - size[2]); /*overflow checked*/
+                dst_acc *= dst_size[2];
+                src_acc *= src_size[2];
+                dst_start += dst_acc * (dst_offset ? dst_offset[1] : 0);
+                src_start += src_acc * (src_offset ? src_offset[1] : 0);
+
+                assert (dst_size[1]>=size[1]);
+                assert (src_size[1]>=size[1]);
+                dst_stride[0] = dst_acc * (dst_size[1] - size[1]); /*overflow checked*/
+                src_stride[0] = src_acc * (src_size[1] - size[1]); /*overflow checked*/
+                dst_acc *= dst_size[1];
+                src_acc *= src_size[1];
+                dst_start += dst_acc * (dst_offset ? dst_offset[0] : 0);
+                src_start += src_acc * (src_offset ? src_offset[0] : 0);
+                break;
+
+            default:
+                /* others */
+                for (ii=(int)(n-2), dst_acc=1, src_acc=1; ii>=0; --ii) {
+                    assert (dst_size[ii+1]>=size[ii+1]);
+                    assert (src_size[ii+1]>=size[ii+1]);
+                    dst_stride[ii] = dst_acc * (dst_size[ii+1] - size[ii+1]); /*overflow checked*/
+                    src_stride[ii] = src_acc * (src_size[ii+1] - size[ii+1]); /*overflow checked*/
+                    dst_acc *= dst_size[ii+1];
+                    src_acc *= src_size[ii+1];
+                    dst_start += dst_acc * (dst_offset ? dst_offset[ii] : 0);
+                    src_start += src_acc * (src_offset ? src_offset[ii] : 0);
+                }
+                break;
+        } /* end switch */
+    }
+#endif /* NO_INLINED_CODE */
+
+    /* Optimize the strides as a pair */
+    H5V_stride_optimize2(&n, &elmt_size, size, dst_stride, src_stride);
+
+    /* Perform the copy in terms of stride */
+    ret_value = H5V_stride_copy(n, elmt_size, size,
+             dst_stride, dst+dst_start, src_stride, src+src_start);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_stride_fill
+ *
+ * Purpose:	Fills all bytes of a hyperslab with the same value using
+ *		memset().
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Saturday, October 11, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5V_stride_fill(unsigned n, hsize_t elmt_size, const hsize_t *size,
+		const hsize_t *stride, void *_dst, unsigned fill_value)
+{
+    uint8_t	*dst = (uint8_t*)_dst; 	/*cast for ptr arithmetic	*/
+    hsize_t	idx[H5V_HYPER_NDIMS]; 	/*1-origin indices		*/
+    hsize_t	nelmts;			/*number of elements to fill	*/
+    hsize_t	i;			/*counter			*/
+    int	j;			/*counter			*/
+    hbool_t	carry;			/*subtraction carray value	*/
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5V_stride_fill)
+    assert (elmt_size < SIZET_MAX);
+
+    H5V_vector_cpy(n, idx, size);
+    nelmts = H5V_vector_reduce_product(n, size);
+    for (i=0; i<nelmts; i++) {
+        /* Copy an element */
+        H5_CHECK_OVERFLOW(elmt_size,hsize_t,size_t);
+        HDmemset(dst, (int)fill_value, (size_t)elmt_size); /*lint !e671 The elmt_size will be OK */
+
+        /* Decrement indices and advance pointer */
+        for (j=(int)(n-1), carry=TRUE; j>=0 && carry; --j) {
+            dst += stride[j];
+
+            if (--idx[j])
+                carry = FALSE;
+            else {
+                assert(size);
+                idx[j] = size[j];
+            } /* end else */
+        }
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_stride_copy
+ *
+ * Purpose:	Uses DST_STRIDE and SRC_STRIDE to advance through the arrays
+ *		DST and SRC while copying bytes from SRC to DST.  This
+ *		function minimizes the number of calls to memcpy() by
+ *		combining various strides, but it will never touch memory
+ *		outside the hyperslab defined by the strides.
+ *
+ * Note:	If the src_stride is all zero and elmt_size is one, then it's
+ *		probably more efficient to use H5V_stride_fill() instead.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Saturday, October 11, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5V_stride_copy(unsigned n, hsize_t elmt_size, const hsize_t *size,
+		const hsize_t *dst_stride, void *_dst,
+		const hsize_t *src_stride, const void *_src)
+{
+    uint8_t	*dst = (uint8_t*)_dst;		/*cast for ptr arithmetic*/
+    const uint8_t *src = (const uint8_t*) _src;	/*cast for ptr arithmetic*/
+    hsize_t	idx[H5V_HYPER_NDIMS];		/*1-origin indices	*/
+    hsize_t	nelmts;				/*num elements to copy	*/
+    hsize_t	i;				/*counter		*/
+    int	j;				/*counters		*/
+    hbool_t	carry;				/*carray for subtraction*/
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5V_stride_copy)
+    assert (elmt_size<SIZET_MAX);
+
+    if (n) {
+        H5V_vector_cpy(n, idx, size);
+        nelmts = H5V_vector_reduce_product(n, size);
+        for (i=0; i<nelmts; i++) {
+
+            /* Copy an element */
+            H5_CHECK_OVERFLOW(elmt_size,hsize_t,size_t);
+            HDmemcpy(dst, src, (size_t)elmt_size); /*lint !e671 The elmt_size will be OK */
+
+            /* Decrement indices and advance pointers */
+            for (j=(int)(n-1), carry=TRUE; j>=0 && carry; --j) {
+                src += src_stride[j];
+                dst += dst_stride[j];
+
+                if (--idx[j])
+                    carry = FALSE;
+                else {
+                    assert(size);
+                    idx[j] = size[j];
+                }
+            }
+        }
+    } else {
+        H5_CHECK_OVERFLOW(elmt_size,hsize_t,size_t);
+        HDmemcpy (dst, src, (size_t)elmt_size); /*lint !e671 The elmt_size will be OK */
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_stride_copy_s
+ *
+ * Purpose:	Uses DST_STRIDE and SRC_STRIDE to advance through the arrays
+ *		DST and SRC while copying bytes from SRC to DST.  This
+ *		function minimizes the number of calls to memcpy() by
+ *		combining various strides, but it will never touch memory
+ *		outside the hyperslab defined by the strides.
+ *
+ * Note:	If the src_stride is all zero and elmt_size is one, then it's
+ *		probably more efficient to use H5V_stride_fill() instead.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *		Saturday, October 11, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5V_stride_copy_s(unsigned n, hsize_t elmt_size, const hsize_t *size,
+		const hssize_t *dst_stride, void *_dst,
+		const hssize_t *src_stride, const void *_src)
+{
+    uint8_t	*dst = (uint8_t*)_dst;		/*cast for ptr arithmetic*/
+    const uint8_t *src = (const uint8_t*) _src;	/*cast for ptr arithmetic*/
+    hsize_t	idx[H5V_HYPER_NDIMS];		/*1-origin indices	*/
+    hsize_t	nelmts;				/*num elements to copy	*/
+    hsize_t	i;				/*counter		*/
+    int	j;				/*counters		*/
+    hbool_t	carry;				/*carray for subtraction*/
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5V_stride_copy_s)
+    assert (elmt_size<SIZET_MAX);
+
+    if (n) {
+        H5V_vector_cpy(n, idx, size);
+        nelmts = H5V_vector_reduce_product(n, size);
+        for (i=0; i<nelmts; i++) {
+
+            /* Copy an element */
+            H5_CHECK_OVERFLOW(elmt_size,hsize_t,size_t);
+            HDmemcpy(dst, src, (size_t)elmt_size); /*lint !e671 The elmt_size will be OK */
+
+            /* Decrement indices and advance pointers */
+            for (j=(int)(n-1), carry=TRUE; j>=0 && carry; --j) {
+                src += src_stride[j];
+                dst += dst_stride[j];
+
+                if (--idx[j])
+                    carry = FALSE;
+                else {
+                    assert(size);
+                    idx[j] = size[j];
+                }
+            }
+        }
+    } else {
+        H5_CHECK_OVERFLOW(elmt_size,hsize_t,size_t);
+        HDmemcpy (dst, src, (size_t)elmt_size); /*lint !e671 The elmt_size will be OK */
+    }
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}
+
+#ifdef LATER
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_stride_copy2
+ *
+ * Purpose:	Similar to H5V_stride_copy() except the source and
+ *		destination each have their own dimensionality and size and
+ *		we copy exactly NELMTS elements each of size ELMT_SIZE.	 The
+ *		size counters wrap if NELMTS is more than a size counter.
+ *
+ * Return:	None
+ *
+ * Programmer:	Robb Matzke
+ *		Saturday, October 11, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+H5V_stride_copy2(hsize_t nelmts, hsize_t elmt_size,
+
+		 /* destination */
+		 unsigned dst_n, const hsize_t *dst_size,
+		 const hsize_t *dst_stride,
+		 void *_dst,
+
+		 /* source */
+		 unsigned src_n, const hsize_t *src_size,
+		 const hsize_t *src_stride,
+		 const void *_src)
+{
+    uint8_t	*dst = (uint8_t *) _dst;
+    const uint8_t *src = (const uint8_t *) _src;
+    hsize_t	dst_idx[H5V_HYPER_NDIMS];
+    hsize_t	src_idx[H5V_HYPER_NDIMS];
+    hsize_t	i;              /* Local index variable */
+    int		j;              /* Local index variable */
+    hbool_t	carry;
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5V_stride_copy2)
+
+    assert (elmt_size < SIZET_MAX);
+    assert(dst_n>0);
+    assert(src_n>0);
+
+    H5V_vector_cpy(dst_n, dst_idx, dst_size);
+    H5V_vector_cpy(src_n, src_idx, src_size);
+
+    for (i=0; i<nelmts; i++) {
+
+	/* Copy an element */
+        H5_CHECK_OVERFLOW(elmt_size,hsize_t,size_t);
+	HDmemcpy(dst, src, (size_t)elmt_size); /*lint !e671 The elmt_size will be OK */
+
+	/* Decrement indices and advance pointers */
+	for (j=(int)(dst_n-1), carry=TRUE; j>=0 && carry; --j) {
+	    dst += dst_stride[j];
+	    if (--dst_idx[j])
+                carry = FALSE;
+	    else {
+                assert(dst_size);
+                dst_idx[j] = dst_size[j];
+            } /* end else */
+	}
+	for (j=(int)(src_n-1), carry=TRUE; j>=0 && carry; --j) {
+	    src += src_stride[j];
+	    if (--src_idx[j])
+                carry = FALSE;
+	    else {
+                assert(src_size);
+                src_idx[j] = src_size[j];
+            } /* end else */
+	}
+    }
+
+    FUNC_LEAVE_NOAPI_VOID
+}
+#endif /* LATER */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_array_fill
+ *
+ * Purpose:	Fills all bytes of an array with the same value using
+ *		memset(). Increases amount copied by power of two until the
+ *		halfway point is crossed, then copies the rest in one swoop.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Thursday, June 18, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5V_array_fill(void *_dst, const void *src, size_t size, size_t count)
+{
+    size_t      copy_size;          /* size of the buffer to copy	*/
+    size_t      copy_items;         /* number of items currently copying*/
+    size_t      items_left;         /* number of items left to copy 	*/
+    uint8_t     *dst=(uint8_t*)_dst;/* alias for pointer arithmetic	*/
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5V_array_fill)
+
+    assert (dst);
+    assert (src);
+    assert (size < SIZET_MAX && size > 0);
+    assert (count < SIZET_MAX && count > 0);
+
+    HDmemcpy(dst, src, size);   /* copy first item */
+
+    /* Initialize counters, etc. while compensating for first element copied */
+    copy_size = size;
+    copy_items = 1;
+    items_left = count - 1;
+    dst += size;
+
+    /* copy until we've copied at least half of the items */
+    while (items_left >= copy_items)
+    {
+        HDmemcpy(dst, _dst, copy_size);   /* copy the current chunk */
+        dst += copy_size;     /* move the offset for the next chunk */
+        items_left -= copy_items;   /* decrement the number of items left */
+
+        copy_size *= 2;     /* increase the size of the chunk to copy */
+        copy_items *= 2;    /* increase the count of items we are copying */
+    }   /* end while */
+    if (items_left > 0)   /* if there are any items left to copy */
+        HDmemcpy(dst, _dst, items_left * size);
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+}   /* H5V_array_fill() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_array_down
+ *
+ * Purpose:	Given a set of dimension sizes, calculate the size of each
+ *              "down" slice.  This is the size of the dimensions for all the
+ *              dimensions below the current one, which is used for indexing
+ *              offsets in this dimension.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Monday, April 28, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5V_array_down(unsigned n, const hsize_t *total_size, hsize_t *down)
+{
+    hsize_t	acc;	                /*accumulator			*/
+    int	        i;		        /*counter			*/
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5V_array_down)
+
+    assert(n <= H5V_HYPER_NDIMS);
+    assert(total_size);
+    assert(down);
+
+    /* Build the sizes of each dimension in the array */
+    /* (From fastest to slowest) */
+    for(i=(int)(n-1),acc=1; i>=0; i--) {
+        down[i]=acc;
+        acc *= total_size[i];
+    } /* end for */
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5V_array_down() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_array_offset_pre
+ *
+ * Purpose:	Given a coordinate description of a location in an array, this
+ *      function returns the byte offset of the coordinate.
+ *
+ *		The dimensionality of the whole array, and the offset is N.
+ *              The whole array dimensions are TOTAL_SIZE and the coordinate
+ *              is at offset OFFSET.
+ *
+ * Return:	Success: Byte offset from beginning of array to element offset
+ *		Failure: abort() -- should never fail
+ *
+ * Programmer:	Quincey Koziol
+ *		Tuesday, June 22, 1999
+ *
+ * Modifications:
+ *              Use precomputed accumulator array
+ *              Quincey Koziol
+ *		Saturday, April 26, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t
+H5V_array_offset_pre(unsigned n, const hsize_t *acc, const hsize_t *offset)
+{
+    int             i;		/*counter				*/
+    hsize_t	    ret_value;  /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5V_array_offset_pre)
+
+    assert(n <= H5V_HYPER_NDIMS);
+    assert(acc);
+    assert(offset);
+
+    /* Compute offset in array */
+    for (i=(int)(n-1), ret_value=0; i>=0; --i)
+        ret_value += acc[i] * offset[i];
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5V_array_offset_pre() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_array_offset
+ *
+ * Purpose:	Given a coordinate description of a location in an array, this
+ *      function returns the byte offset of the coordinate.
+ *
+ *		The dimensionality of the whole array, and the offset is N.
+ *              The whole array dimensions are TOTAL_SIZE and the coordinate
+ *              is at offset OFFSET.
+ *
+ * Return:	Success: Byte offset from beginning of array to element offset
+ *		Failure: abort() -- should never fail
+ *
+ * Programmer:	Quincey Koziol
+ *		Tuesday, June 22, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t
+H5V_array_offset(unsigned n, const hsize_t *total_size, const hsize_t *offset)
+{
+    hsize_t	acc_arr[H5V_HYPER_NDIMS];	/* Accumulated size of down dimensions */
+    hsize_t	ret_value;  /* Return value */
+
+    FUNC_ENTER_NOAPI(H5V_array_offset, (HDabort(), 0)) /*lint !e527 Don't worry about unreachable statement */
+
+    assert(n <= H5V_HYPER_NDIMS);
+    assert(total_size);
+    assert(offset);
+
+    /* Build the sizes of each dimension in the array */
+    if(H5V_array_down(n,total_size,acc_arr)<0)
+        HGOTO_ERROR(H5E_INTERNAL, H5E_BADVALUE, UFAIL, "can't compute down sizes")
+
+    /* Set return value */
+    ret_value=H5V_array_offset_pre(n,acc_arr,offset);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5V_array_offset() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_array_calc
+ *
+ * Purpose:	Given a linear offset in an array and the dimensions of that
+ *              array, this function computes the coordinates of that offset
+ *              in the array.
+ *
+ *		The dimensionality of the whole array, and the coordinates is N.
+ *              The array dimensions are TOTAL_SIZE and the coordinates
+ *              are returned in COORD.  The linear offset is in OFFSET.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Wednesday, April 16, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5V_array_calc(hsize_t offset, unsigned n, const hsize_t *total_size, hsize_t *coords)
+{
+    hsize_t	idx[H5V_HYPER_NDIMS];	/* Size of each dimension in bytes */
+    hsize_t     acc;                    /* Size accumulator */
+    unsigned    u;                      /* Local index variable */
+    int         i;                      /* Local index variable */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5V_array_calc)
+
+    /* Sanity check */
+    assert(n <= H5V_HYPER_NDIMS);
+    assert(total_size);
+    assert(coords);
+
+    /* Build the sizes of each dimension in the array */
+    /* (From fastest to slowest) */
+    for(i=(int)(n-1),acc=1; i>=0; i--) {
+        idx[i]=acc;
+        acc *= total_size[i];
+    } /* end for */
+
+    /* Compute the coordinates from the offset */
+    for(u=0; u<n; u++) {
+        coords[u]=offset/idx[u];
+        offset %= idx[u];
+    } /* end for */
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5V_array_calc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_chunk_index
+ *
+ * Purpose:	Given a coordinate offset (COORD), the size of each chunk
+ *              (CHUNK), the number of chunks in each dimension (NCHUNKS)
+ *              and the number of dimensions of all of these (NDIMS), calculate
+ *              a "chunk index" for the chunk that the coordinate offset is
+ *              located in.
+ *
+ *              The chunk index starts at 0 and increases according to the
+ *              fastest changing dimension, then the next fastest, etc.
+ *
+ *              For example, with a 3x5 chunk size and 6 chunks in the fastest
+ *              changing dimension and 3 chunks in the slowest changing
+ *              dimension, the chunk indices are as follows:
+ *
+ *              +-----+-----+-----+-----+-----+-----+
+ *              |     |     |     |     |     |     |
+ *              |  0  |  1  |  2  |  3  |  4  |  5  |
+ *              |     |     |     |     |     |     |
+ *              +-----+-----+-----+-----+-----+-----+
+ *              |     |     |     |     |     |     |
+ *              |  6  |  7  |  8  |  9  | 10  | 11  |
+ *              |     |     |     |     |     |     |
+ *              +-----+-----+-----+-----+-----+-----+
+ *              |     |     |     |     |     |     |
+ *              | 12  | 13  | 14  | 15  | 16  | 17  |
+ *              |     |     |     |     |     |     |
+ *              +-----+-----+-----+-----+-----+-----+
+ *
+ *              The chunk index is placed in the CHUNK_IDX location for return
+ *              from this function
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Monday, April 21, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5V_chunk_index(unsigned ndims, const hsize_t *coord, const size_t *chunk,
+    const hsize_t *down_nchunks, hsize_t *chunk_idx)
+{
+    hsize_t	scaled_coord[H5V_HYPER_NDIMS];	/* Scaled, coordinates, in terms of chunks */
+    unsigned    u;                      /* Local index variable */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5V_chunk_index)
+
+    /* Sanity check */
+    assert(ndims <= H5V_HYPER_NDIMS);
+    assert(coord);
+    assert(chunk);
+    assert(chunk_idx);
+
+    /* Compute the scaled coordinates for actual coordinates */
+    for(u=0; u<ndims; u++)
+        scaled_coord[u]=coord[u]/chunk[u];
+
+    /* Compute the chunk index */
+    *chunk_idx=H5V_array_offset_pre(ndims,down_nchunks,scaled_coord); /*lint !e772 scaled_coord will always be initialized */
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* end H5V_chunk_index() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_memcpyvv
+ *
+ * Purpose:	Given source and destination buffers in memory (SRC & DST)
+ *              copy sequences of from the source buffer into the destination
+ *              buffer.  Each set of sequnces has an array of lengths, an
+ *              array of offsets, the maximum number of sequences and the
+ *              current sequence to start at in the sequence.
+ *
+ *              There may be different numbers of bytes in the source and
+ *              destination sequences, data copying stops when either the
+ *              source or destination buffer runs out of sequence information.
+ *
+ * Return:	Non-negative # of bytes copied on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *		Friday, May 2, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+ssize_t
+H5V_memcpyvv(void *_dst,
+    size_t dst_max_nseq, size_t *dst_curr_seq, size_t dst_len_arr[], hsize_t dst_off_arr[],
+    const void *_src,
+    size_t src_max_nseq, size_t *src_curr_seq, size_t src_len_arr[], hsize_t src_off_arr[])
+{
+    unsigned char *dst;         /* Destination buffer pointer */
+    const unsigned char *src;   /* Source buffer pointer */
+    size_t total_size=0;        /* Total size of sequence in bytes */
+    size_t size;                /* Size of sequence in bytes */
+    size_t u,v;                 /* Local index variables */
+    ssize_t ret_value;          /* Return value */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5V_memcpyvv)
+
+    /* Sanity check */
+    assert(_dst);
+    assert(dst_curr_seq);
+    assert(*dst_curr_seq<dst_max_nseq);
+    assert(dst_len_arr);
+    assert(dst_off_arr);
+    assert(_src);
+    assert(src_curr_seq);
+    assert(*src_curr_seq<src_max_nseq);
+    assert(src_len_arr);
+    assert(src_off_arr);
+
+    /* Work through all the sequences */
+    for(u=*dst_curr_seq, v=*src_curr_seq; u<dst_max_nseq && v<src_max_nseq; ) {
+        /* Choose smallest buffer to write */
+        if(src_len_arr[v]<dst_len_arr[u])
+            size=src_len_arr[v];
+        else
+            size=dst_len_arr[u];
+
+        /* Compute offset on disk */
+        dst=(unsigned char *)_dst+dst_off_arr[u];
+
+        /* Compute offset in memory */
+        src=(const unsigned char *)_src+src_off_arr[v];
+
+        /* Copy data */
+        HDmemcpy(dst,src,size);
+
+        /* Update source information */
+        src_len_arr[v]-=size;
+        src_off_arr[v]+=size;
+        if(src_len_arr[v]==0)
+            v++;
+
+        /* Update destination information */
+        dst_len_arr[u]-=size;
+        dst_off_arr[u]+=size;
+        if(dst_len_arr[u]==0)
+            u++;
+
+        /* Increment number of bytes copied */
+        total_size+=size;
+    } /* end for */
+
+    /* Update current sequence vectors */
+    *dst_curr_seq=u;
+    *src_curr_seq=v;
+
+    /* Set return value */
+    H5_ASSIGN_OVERFLOW(ret_value,total_size,size_t,ssize_t);
+
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5V_memcpyvv() */
+

Added: packages/hdf5/branches/upstream/current/src/H5Vprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Vprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Vprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,303 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Robb Matzke <matzke at llnl.gov>
+ *             Friday, October 10, 1997
+ */
+#ifndef H5Vprivate_H
+#define H5Vprivate_H
+
+#include "H5private.h"
+
+/* Vector comparison functions like Fortran66 comparison operators */
+#define H5V_vector_eq_s(N,V1,V2) (H5V_vector_cmp_s (N, V1, V2)==0)
+#define H5V_vector_lt_s(N,V1,V2) (H5V_vector_cmp_s (N, V1, V2)<0)
+#define H5V_vector_gt_s(N,V1,V2) (H5V_vector_cmp_s (N, V1, V2)>0)
+#define H5V_vector_le_s(N,V1,V2) (H5V_vector_cmp_s (N, V1, V2)<=0)
+#define H5V_vector_ge_s(N,V1,V2) (H5V_vector_cmp_s (N, V1, V2)>=0)
+#define H5V_vector_eq_u(N,V1,V2) (H5V_vector_cmp_u (N, V1, V2)==0)
+#define H5V_vector_lt_u(N,V1,V2) (H5V_vector_cmp_u (N, V1, V2)<0)
+#define H5V_vector_gt_u(N,V1,V2) (H5V_vector_cmp_u (N, V1, V2)>0)
+#define H5V_vector_le_u(N,V1,V2) (H5V_vector_cmp_u (N, V1, V2)<=0)
+#define H5V_vector_ge_u(N,V1,V2) (H5V_vector_cmp_u (N, V1, V2)>=0)
+
+/* Other functions */
+#define H5V_vector_cpy(N,DST,SRC) {                                           \
+    assert (sizeof(*(DST))==sizeof(*(SRC)));				                  \
+    if (SRC) HDmemcpy (DST, SRC, (N)*sizeof(*(DST)));                         \
+    else HDmemset (DST, 0, (N)*sizeof(*(DST)));                               \
+}
+
+#define H5V_vector_zero(N,DST) HDmemset(DST,0,(N)*sizeof(*(DST)))
+
+/* A null pointer is equivalent to a zero vector */
+#define H5V_ZERO        NULL
+
+H5_DLL hsize_t H5V_hyper_stride(unsigned n, const hsize_t *size,
+				 const hsize_t *total_size,
+				 const hsize_t *offset,
+				 hsize_t *stride);
+H5_DLL htri_t H5V_hyper_disjointp(unsigned n, const hsize_t *offset1,
+				   const size_t *size1,
+				   const hsize_t *offset2,
+				   const size_t *size2);
+H5_DLL htri_t H5V_hyper_eq(unsigned n, const hsize_t *offset1,
+			    const hsize_t *size1, const hsize_t *offset2,
+			    const hsize_t *size2);
+H5_DLL herr_t H5V_hyper_fill(unsigned n, const hsize_t *_size,
+			      const hsize_t *total_size,
+			      const hsize_t *offset, void *_dst,
+			      unsigned fill_value);
+H5_DLL herr_t H5V_hyper_copy(unsigned n, const hsize_t *size,
+			      const hsize_t *dst_total_size,
+			      const hsize_t *dst_offset, void *_dst,
+			      const hsize_t *src_total_size,
+			      const hsize_t *src_offset, const void *_src);
+H5_DLL herr_t H5V_stride_fill(unsigned n, hsize_t elmt_size, const hsize_t *size,
+			       const hsize_t *stride, void *_dst,
+			       unsigned fill_value);
+H5_DLL herr_t H5V_stride_copy(unsigned n, hsize_t elmt_size, const hsize_t *_size,
+			       const hsize_t *dst_stride, void *_dst,
+			       const hsize_t *src_stride, const void *_src);
+H5_DLL herr_t H5V_stride_copy_s(unsigned n, hsize_t elmt_size, const hsize_t *_size,
+			       const hssize_t *dst_stride, void *_dst,
+			       const hssize_t *src_stride, const void *_src);
+H5_DLL herr_t H5V_array_fill(void *_dst, const void *src, size_t size,
+			      size_t count);
+H5_DLL herr_t H5V_array_down(unsigned n, const hsize_t *total_size,
+    hsize_t *down);
+H5_DLL hsize_t H5V_array_offset_pre(unsigned n,
+    const hsize_t *acc, const hsize_t *offset);
+H5_DLL hsize_t H5V_array_offset(unsigned n, const hsize_t *total_size,
+    const hsize_t *offset);
+H5_DLL herr_t H5V_array_calc(hsize_t offset, unsigned n,
+    const hsize_t *total_size, hsize_t *coords);
+H5_DLL herr_t H5V_chunk_index(unsigned ndims, const hsize_t *coord,
+    const size_t *chunk, const hsize_t *down_nchunks, hsize_t *chunk_idx);
+H5_DLL ssize_t H5V_memcpyvv(void *_dst,
+    size_t dst_max_nseq, size_t *dst_curr_seq, size_t dst_len_arr[], hsize_t dst_off_arr[],
+    const void *_src,
+    size_t src_max_nseq, size_t *src_curr_seq, size_t src_len_arr[], hsize_t src_off_arr[]);
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5V_vector_reduce_product
+ *
+ * Purpose:     Product reduction of a vector.  Vector elements and return
+ *              value are size_t because we usually want the number of
+ *              elements in an array and array dimensions are always of type
+ *              size_t.
+ *
+ * Return:      Success:        Product of elements
+ *
+ *              Failure:        1 if N is zero
+ *
+ * Programmer:  Robb Matzke
+ *              Friday, October 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline hsize_t UNUSED
+H5V_vector_reduce_product(unsigned n, const hsize_t *v)
+{
+    hsize_t                  ret_value = 1;
+
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5V_vector_reduce_product)
+
+    if (n && !v) HGOTO_DONE(0)
+    while (n--) ret_value *= *v++;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    H5V_vector_zerop_u
+ *
+ * Purpose:     Determines if all elements of a vector are zero.
+ *
+ * Return:      Success:        TRUE if all elements are zero,
+ *                              FALSE otherwise
+ *
+ *              Failure:        TRUE if N is zero
+ *
+ * Programmer:  Robb Matzke
+ *              Friday, October 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline htri_t UNUSED
+H5V_vector_zerop_u(int n, const hsize_t *v)
+{
+    htri_t      ret_value=TRUE;       /* Return value */
+
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5V_vector_zerop_u)
+
+    if (!v)
+        HGOTO_DONE(TRUE)
+    while (n--)
+	if (*v++)
+            HGOTO_DONE(FALSE)
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    H5V_vector_zerop_s
+ *
+ * Purpose:     Determines if all elements of a vector are zero.
+ *
+ * Return:      Success:        TRUE if all elements are zero,
+ *                              FALSE otherwise
+ *
+ *              Failure:        TRUE if N is zero
+ *
+ * Programmer:  Robb Matzke
+ *              Friday, October 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline htri_t UNUSED
+H5V_vector_zerop_s(int n, const hssize_t *v)
+{
+    htri_t      ret_value=TRUE;       /* Return value */
+
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5V_vector_zerop_s)
+
+    if (!v)
+        HGOTO_DONE(TRUE)
+    while (n--)
+	if (*v++)
+            HGOTO_DONE(FALSE)
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    H5V_vector_cmp_u
+ *
+ * Purpose:     Compares two vectors of the same size and determines if V1 is
+ *              lexicographically less than, equal, or greater than V2.
+ *
+ * Return:      Success:        -1 if V1 is less than V2
+ *                              0 if they are equal
+ *                              1 if V1 is greater than V2
+ *
+ *              Failure:        0 if N is zero
+ *
+ * Programmer:  Robb Matzke
+ *              Friday, October 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline int UNUSED
+H5V_vector_cmp_u (unsigned n, const hsize_t *v1, const hsize_t *v2)
+{
+    int ret_value=0;    /* Return value */
+
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5V_vector_cmp_u)
+
+    if (v1 == v2) HGOTO_DONE(0)
+    if (v1 == NULL) HGOTO_DONE(-1)
+    if (v2 == NULL) HGOTO_DONE(1)
+    while (n--) {
+        if (*v1 < *v2) HGOTO_DONE(-1)
+        if (*v1 > *v2) HGOTO_DONE(1)
+        v1++;
+        v2++;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5V_vector_cmp_s
+ *
+ * Purpose:     Compares two vectors of the same size and determines if V1 is
+ *              lexicographically less than, equal, or greater than V2.
+ *
+ * Return:      Success:        -1 if V1 is less than V2
+ *                              0 if they are equal
+ *                              1 if V1 is greater than V2
+ *
+ *              Failure:        0 if N is zero
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April  8, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline int UNUSED
+H5V_vector_cmp_s (unsigned n, const hssize_t *v1, const hssize_t *v2)
+{
+    int ret_value=0;    /* Return value */
+
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5V_vector_cmp_s)
+
+    if (v1 == v2) HGOTO_DONE(0)
+    if (v1 == NULL) HGOTO_DONE(-1)
+    if (v2 == NULL) HGOTO_DONE(1)
+    while (n--) {
+        if (*v1 < *v2) HGOTO_DONE(-1)
+        if (*v1 > *v2) HGOTO_DONE(1)
+        v1++;
+        v2++;
+    }
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5V_vector_inc
+ *
+ * Purpose:     Increments V1 by V2
+ *
+ * Return:      void
+ *
+ * Programmer:  Robb Matzke
+ *              Monday, October 13, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5_inline void UNUSED
+H5V_vector_inc(int n, hsize_t *v1, const hsize_t *v2)
+{
+    while (n--) *v1++ += *v2++;
+}
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Z.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Z.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Z.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1258 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5Z_PACKAGE		/*suppress error about including H5Zpkg	  */
+
+/* Interface initialization */
+#define H5_INTERFACE_INIT_FUNC	H5Z_init_interface
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Dprivate.h"		/* Dataset functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Oprivate.h"		/* Object headers		  	*/
+#include "H5Pprivate.h"         /* Property lists                       */
+#include "H5Sprivate.h"		/* Dataspace functions			*/
+#include "H5Zpkg.h"		/* Data filters				*/
+
+#ifdef H5_HAVE_SZLIB_H
+#   include "szlib.h"
+#endif
+
+/* Local typedefs */
+#ifdef H5Z_DEBUG
+typedef struct H5Z_stats_t {
+    struct {
+	hsize_t	total;		/*total number of bytes processed	*/
+	hsize_t	errors;		/*bytes of total attributable to errors	*/
+	H5_timer_t timer;	/*execution time including errors	*/
+    } stats[2];			/*0=output, 1=input			*/
+} H5Z_stats_t;
+#endif /* H5Z_DEBUG */
+
+/* Enumerated type for dataset creation prelude callbacks */
+typedef enum {
+    H5Z_PRELUDE_CAN_APPLY,      /* Call "can apply" callback */
+    H5Z_PRELUDE_SET_LOCAL       /* Call "set local" callback */
+} H5Z_prelude_type_t;
+
+/* Local variables */
+static size_t		H5Z_table_alloc_g = 0;
+static size_t		H5Z_table_used_g = 0;
+static H5Z_class_t	*H5Z_table_g = NULL;
+#ifdef H5Z_DEBUG
+static H5Z_stats_t	*H5Z_stat_table_g = NULL;
+#endif /* H5Z_DEBUG */
+
+/* Local functions */
+static int H5Z_find_idx(H5Z_filter_t id);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_init_interface
+ *
+ * Purpose:	Initializes the data filter layer.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5Z_init_interface (void)
+{
+    herr_t	ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5Z_init_interface)
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+    if (H5Z_register (H5Z_DEFLATE)<0)
+	HGOTO_ERROR (H5E_PLINE, H5E_CANTINIT, FAIL, "unable to register deflate filter")
+#endif /* H5_HAVE_FILTER_DEFLATE */
+#ifdef H5_HAVE_FILTER_SHUFFLE
+    if (H5Z_register (H5Z_SHUFFLE)<0)
+	HGOTO_ERROR (H5E_PLINE, H5E_CANTINIT, FAIL, "unable to register shuffle filter")
+#endif /* H5_HAVE_FILTER_SHUFFLE */
+#ifdef H5_HAVE_FILTER_FLETCHER32
+    if (H5Z_register (H5Z_FLETCHER32)<0)
+	HGOTO_ERROR (H5E_PLINE, H5E_CANTINIT, FAIL, "unable to register fletcher32 filter")
+#endif /* H5_HAVE_FILTER_FLETCHER32 */
+#ifdef H5_HAVE_FILTER_SZIP
+    if (H5Z_register (H5Z_SZIP)<0)
+	HGOTO_ERROR (H5E_PLINE, H5E_CANTINIT, FAIL, "unable to register szip filter")
+#endif /* H5_HAVE_FILTER_SZIP */
+
+#if (defined H5_HAVE_FILTER_DEFLATE | defined H5_HAVE_FILTER_FLETCHER32 | defined H5_HAVE_FILTER_SHUFFLE | defined H5_HAVE_FILTER_SZIP)
+done:
+#endif /* (defined H5_HAVE_FILTER_DEFLATE | defined H5_HAVE_FILTER_FLETCHER32 | defined H5_HAVE_FILTER_SHUFFLE | defined H5_HAVE_FILTER_SZIP) */
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_term_interface
+ *
+ * Purpose:	Terminate the H5Z layer.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+H5Z_term_interface (void)
+{
+#ifdef H5Z_DEBUG
+    size_t	i;
+    int		dir, nprint=0;
+    char	comment[16], bandwidth[32];
+#endif
+
+    if (H5_interface_initialize_g) {
+#ifdef H5Z_DEBUG
+	if (H5DEBUG(Z)) {
+	    for (i=0; i<H5Z_table_used_g; i++) {
+		for (dir=0; dir<2; dir++) {
+		    if (0==H5Z_stat_table_g[i].stats[dir].total) continue;
+
+		    if (0==nprint++) {
+			/* Print column headers */
+			HDfprintf (H5DEBUG(Z), "H5Z: filter statistics "
+				   "accumulated over life of library:\n");
+			HDfprintf (H5DEBUG(Z),
+				   "   %-16s %10s %10s %8s %8s %8s %10s\n",
+				   "Filter", "Total", "Errors", "User",
+				   "System", "Elapsed", "Bandwidth");
+			HDfprintf (H5DEBUG(Z),
+				   "   %-16s %10s %10s %8s %8s %8s %10s\n",
+				   "------", "-----", "------", "----",
+				   "------", "-------", "---------");
+		    }
+
+		    /* Truncate the comment to fit in the field */
+		    HDstrncpy(comment, H5Z_table_g[i].name,
+			      sizeof comment);
+		    comment[sizeof(comment)-1] = '\0';
+
+		    /*
+		     * Format bandwidth to have four significant digits and
+		     * units of `B/s', `kB/s', `MB/s', `GB/s', or `TB/s' or
+		     * the word `Inf' if the elapsed time is zero.
+		     */
+		    H5_bandwidth(bandwidth,
+				 (double)(H5Z_stat_table_g[i].stats[dir].total),
+				 H5Z_stat_table_g[i].stats[dir].timer.etime);
+
+		    /* Print the statistics */
+		    HDfprintf (H5DEBUG(Z),
+			       "   %s%-15s %10Hd %10Hd %8.2f %8.2f %8.2f "
+			       "%10s\n", dir?"<":">", comment,
+			       H5Z_stat_table_g[i].stats[dir].total,
+			       H5Z_stat_table_g[i].stats[dir].errors,
+			       H5Z_stat_table_g[i].stats[dir].timer.utime,
+			       H5Z_stat_table_g[i].stats[dir].timer.stime,
+			       H5Z_stat_table_g[i].stats[dir].timer.etime,
+			       bandwidth);
+		}
+	    }
+	}
+#endif /* H5Z_DEBUG */
+	/* Free the table of filters */
+	H5Z_table_g = H5MM_xfree(H5Z_table_g);
+#ifdef H5Z_DEBUG
+	H5Z_stat_table_g = H5MM_xfree(H5Z_stat_table_g);
+#endif /* H5Z_DEBUG */
+	H5Z_table_used_g = H5Z_table_alloc_g = 0;
+	H5_interface_initialize_g = 0;
+    }
+    return 0;
+}
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Zregister
+ *
+ * Purpose:	This function registers new filter. The COMMENT argument is
+ *		used for debugging and may be the null pointer.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April 16, 1998
+ *
+ * Modifications:
+ *              Changed to pass H5Z_class_t struct to H5Z_register
+ *              Quincey Koziol, April  5, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Zregister(H5Z_filter_t id, const char *comment, H5Z_func_t func)
+{
+    H5Z_class_t cls;                    /* Filter class used to bundle parameters */
+    herr_t     ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Zregister, FAIL);
+    H5TRACE3("e","Zfsx",id,comment,func);
+
+    /* Check args */
+    if (id<0 || id>H5Z_FILTER_MAX)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid filter identification number");
+    if (id<H5Z_FILTER_RESERVED)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "unable to modify predefined filters");
+    if (!func)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no function specified");
+
+    /* Build class structure */
+    cls.id=id;
+    cls.name=comment;
+    cls.can_apply=cls.set_local=NULL;
+    cls.filter=func;
+
+    /* Do it */
+    if (H5Z_register (&cls)<0)
+	HGOTO_ERROR (H5E_PLINE, H5E_CANTINIT, FAIL, "unable to register filter");
+
+done:
+    FUNC_LEAVE_API(ret_value);
+}
+#else /* H5_WANT_H5_V1_4_COMPAT */
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Zregister
+ *
+ * Purpose:	This function registers new filter.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April 16, 1998
+ *
+ * Modifications:
+ *              Changed to pass in H5Z_class_t struct
+ *              Quincey Koziol, April  5, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Zregister(const H5Z_class_t *cls)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Zregister, FAIL)
+    H5TRACE1("e","Zc",cls);
+
+    /* Check args */
+    if (cls==NULL)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid filter class")
+    if (cls->id<0 || cls->id>H5Z_FILTER_MAX)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid filter identification number")
+    if (cls->id<H5Z_FILTER_RESERVED)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "unable to modify predefined filters")
+    if (cls->filter==NULL)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "no filter function specified")
+
+    /* Do it */
+    if (H5Z_register (cls)<0)
+	HGOTO_ERROR (H5E_PLINE, H5E_CANTINIT, FAIL, "unable to register filter")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_register
+ *
+ * Purpose:	Same as the public version except this one allows filters
+ *		to be set for predefined method numbers <H5Z_FILTER_RESERVED
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Z_register (const H5Z_class_t *cls)
+{
+    size_t		i;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_register, FAIL)
+
+    assert (cls);
+    assert (cls->id>=0 && cls->id<=H5Z_FILTER_MAX);
+
+    /* Is the filter already registered? */
+    for (i=0; i<H5Z_table_used_g; i++)
+	if (H5Z_table_g[i].id==cls->id)
+            break;
+
+    /* Filter not already registered */
+    if (i>=H5Z_table_used_g) {
+	if (H5Z_table_used_g>=H5Z_table_alloc_g) {
+	    size_t n = MAX(H5Z_MAX_NFILTERS, 2*H5Z_table_alloc_g);
+	    H5Z_class_t *table = H5MM_realloc(H5Z_table_g,
+					      n*sizeof(H5Z_class_t));
+#ifdef H5Z_DEBUG
+	    H5Z_stats_t *stat_table = H5MM_realloc(H5Z_stat_table_g,
+					      n*sizeof(H5Z_stats_t));
+#endif /* H5Z_DEBUG */
+	    if (!table)
+		HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to extend filter table")
+	    H5Z_table_g = table;
+#ifdef H5Z_DEBUG
+	    if (!stat_table)
+		HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to extend filter statistics table")
+	    H5Z_stat_table_g = stat_table;
+#endif /* H5Z_DEBUG */
+	    H5Z_table_alloc_g = n;
+	} /* end if */
+
+	/* Initialize */
+	i = H5Z_table_used_g++;
+	HDmemcpy(H5Z_table_g+i, cls, sizeof(H5Z_class_t));
+#ifdef H5Z_DEBUG
+	HDmemset(H5Z_stat_table_g+i, 0, sizeof(H5Z_stats_t));
+#endif /* H5Z_DEBUG */
+    } /* end if */
+    /* Filter already registered */
+    else {
+	/* Replace old contents */
+	HDmemcpy(H5Z_table_g+i, cls, sizeof(H5Z_class_t));
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Zunregister
+ *
+ * Purpose:	This function unregisters a filter.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, November 14, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Zunregister(H5Z_filter_t id)
+{
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_API(H5Zunregister, FAIL)
+    H5TRACE1("e","Zf",id);
+
+    /* Check args */
+    if (id<0 || id>H5Z_FILTER_MAX)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid filter identification number")
+    if (id<H5Z_FILTER_RESERVED)
+	HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "unable to modify predefined filters")
+
+    /* Do it */
+    if (H5Z_unregister (id)<0)
+	HGOTO_ERROR (H5E_PLINE, H5E_CANTINIT, FAIL, "unable to unregister filter")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Zunregister() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_unregister
+ *
+ * Purpose:	Same as the public version except this one allows filters
+ *		to be unset for predefined method numbers <H5Z_FILTER_RESERVED
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, November 14, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Z_unregister (H5Z_filter_t id)
+{
+    size_t i;                   /* Local index variable */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_unregister,FAIL)
+
+    assert (id>=0 && id<=H5Z_FILTER_MAX);
+
+    /* Is the filter already registered? */
+    for (i=0; i<H5Z_table_used_g; i++)
+	if (H5Z_table_g[i].id==id)
+            break;
+
+    /* Fail if filter not found */
+    if (i>=H5Z_table_used_g)
+        HGOTO_ERROR(H5E_PLINE, H5E_NOTFOUND, FAIL, "filter is not registered")
+
+    /* Remove filter from table */
+    /* Don't worry about shrinking table size (for now) */
+    HDmemmove(&H5Z_table_g[i],&H5Z_table_g[i+1],sizeof(H5Z_class_t)*((H5Z_table_used_g-1)-i));
+#ifdef H5Z_DEBUG
+    HDmemmove(&H5Z_stat_table_g[i],&H5Z_stat_table_g[i+1],sizeof(H5Z_stats_t)*((H5Z_table_used_g-1)-i));
+#endif /* H5Z_DEBUG */
+    H5Z_table_used_g--;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5Z_unregister() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Zfilter_avail
+ *
+ * Purpose:	Check if a filter is available
+ *
+ * Return:	Non-negative (TRUE/FALSE) on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, November 14, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5Zfilter_avail(H5Z_filter_t id)
+{
+    size_t i;                   /* Local index variable */
+    htri_t ret_value=FALSE;     /* Return value */
+
+    FUNC_ENTER_API(H5Zfilter_avail, FAIL)
+    H5TRACE1("t","Zf",id);
+
+    /* Check args */
+    if(id<0 || id>H5Z_FILTER_MAX)
+        HGOTO_ERROR (H5E_ARGS, H5E_BADVALUE, FAIL, "invalid filter identification number")
+
+    /* Is the filter already registered? */
+    for(i=0; i<H5Z_table_used_g; i++)
+	if(H5Z_table_g[i].id==id) {
+            ret_value=TRUE;
+            break;
+        } /* end if */
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Zfilter_avail() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_prelude_callback
+ *
+ * Purpose:	Makes a dataset creation "prelude" callback for the "can_apply"
+ *              or "set_local" routines.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, April 4, 2003
+ *
+ * Notes:
+ *              The chunk dimensions are used to create a dataspace, instead
+ *              of passing in the dataset's dataspace, since the chunk
+ *              dimensions are what the I/O filter will actually see
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5Z_prelude_callback(hid_t dcpl_id, hid_t type_id, H5Z_prelude_type_t prelude_type)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT(H5Z_prelude_callback)
+
+    assert (H5I_GENPROP_LST==H5I_get_type(dcpl_id));
+    assert (H5I_DATATYPE==H5I_get_type(type_id));
+
+    /* Check if the property list is non-default */
+    if(dcpl_id!=H5P_DATASET_CREATE_DEFAULT) {
+        H5P_genplist_t 	*dc_plist;      /* Dataset creation property list object */
+        H5D_layout_t    dcpl_layout;    /* Dataset's layout information */
+
+        /* Get dataset creation property list object */
+        if (NULL == (dc_plist = H5I_object(dcpl_id)))
+            HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "can't get dataset creation property list")
+
+        /* Get layout information */
+        if(H5P_get(dc_plist, H5D_CRT_LAYOUT_NAME, &dcpl_layout) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve layout")
+
+        /* Check if the dataset is chunked */
+        if(H5D_CHUNKED == dcpl_layout) {
+            H5O_pline_t     dcpl_pline;     /* Dataset's I/O pipeline information */
+
+            /* Get I/O pipeline information */
+            if(H5P_get(dc_plist, H5D_CRT_DATA_PIPELINE_NAME, &dcpl_pline) < 0)
+                HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve pipeline filter")
+
+            /* Check if the chunks have filters */
+            if(dcpl_pline.nused > 0) {
+                unsigned chunk_ndims;   /* # of chunk dimensions */
+                size_t chunk_size[H5O_LAYOUT_NDIMS];       /* Size of chunk dimensions */
+                hsize_t chunk_dims[H5O_LAYOUT_NDIMS];      /* Size of chunk dimensions */
+                H5S_t *space;           /* Dataspace describing chunk */
+                hid_t space_id;         /* ID for dataspace describing chunk */
+                size_t u;               /* Local index variable */
+
+                /* Get chunk information */
+                if(H5P_get(dc_plist, H5D_CRT_CHUNK_DIM_NAME, &chunk_ndims) < 0)
+                    HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve chunk dimensions")
+                if(H5P_get(dc_plist, H5D_CRT_CHUNK_SIZE_NAME, chunk_size) < 0)
+                    HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "can't retrieve chunk size")
+
+                /* Create a data space for a chunk & set the extent */
+                for(u=0; u<chunk_ndims; u++)
+                    chunk_dims[u]=chunk_size[u];
+                if(NULL == (space = H5S_create_simple(chunk_ndims,chunk_dims,NULL)))
+                    HGOTO_ERROR(H5E_DATASPACE, H5E_CANTCREATE, FAIL, "can't create simple dataspace")
+
+                /* Get ID for dataspace to pass to filter routines */
+                if ((space_id=H5I_register (H5I_DATASPACE, space))<0) {
+                    (void)H5S_close(space);
+                    HGOTO_ERROR (H5E_ATOM, H5E_CANTREGISTER, FAIL, "unable to register dataspace ID")
+                } /* end if */
+
+                /* Iterate over filters */
+                for (u=0; u<dcpl_pline.nused; u++) {
+                    H5Z_class_t	*fclass;        /* Individual filter information */
+
+                    /* Get filter information */
+                    if (NULL==(fclass=H5Z_find(dcpl_pline.filter[u].id))) {
+                        /* Ignore errors from optional filters */
+                        if (dcpl_pline.filter[u].flags & H5Z_FLAG_OPTIONAL)
+                            H5E_clear();
+                        else
+                            HGOTO_ERROR(H5E_PLINE, H5E_NOTFOUND, FAIL, "required filter was not located")
+                    } /* end if */
+                    else {
+                        /* Make correct callback */
+                        switch(prelude_type) {
+                            case H5Z_PRELUDE_CAN_APPLY:
+                                /* Check if there is a "can apply" callback */
+                                if(fclass->can_apply) {
+                                    herr_t status;
+
+                                    /* Make callback to filter's "can apply" function */
+                                    status=(fclass->can_apply)(dcpl_id, type_id, space_id);
+
+                                    /* Check return value */
+                                    if(status<=0) {
+                                        /* We're leaving, so close dataspace */
+                                        if(H5I_dec_ref(space_id)<0)
+                                            HGOTO_ERROR (H5E_PLINE, H5E_CANTRELEASE, FAIL, "unable to close dataspace")
+
+                                        /* Indicate filter can't apply to this combination of parameters */
+                                        if(status==0) {
+                                            HGOTO_ERROR(H5E_PLINE, H5E_CANAPPLY, FAIL, "filter parameters not appropriate")
+                                        } /* end if */
+                                        /* Indicate error during filter callback */
+                                        else {
+                                            HGOTO_ERROR(H5E_PLINE, H5E_CANAPPLY, FAIL, "error during user callback")
+                                        } /* end if */
+                                    } /* end if */
+                                } /* end if */
+                                break;
+
+                            case H5Z_PRELUDE_SET_LOCAL:
+                                /* Check if there is a "set local" callback */
+                                if(fclass->set_local) {
+                                    /* Make callback to filter's "set local" function */
+                                    if((fclass->set_local)(dcpl_id, type_id, space_id)<0) {
+                                        /* We're leaving, so close dataspace */
+                                        if(H5I_dec_ref(space_id)<0)
+                                            HGOTO_ERROR (H5E_PLINE, H5E_CANTRELEASE, FAIL, "unable to close dataspace")
+
+                                        /* Indicate error during filter callback */
+                                        HGOTO_ERROR(H5E_PLINE, H5E_SETLOCAL, FAIL, "error during user callback")
+                                    } /* end if */
+                                } /* end if */
+                                break;
+
+                            default:
+                                assert("invalid prelude type" && 0);
+                        } /* end switch */
+                    } /* end else */
+                } /* end for */
+
+                /* Close dataspace */
+                if(H5I_dec_ref(space_id)<0)
+                    HGOTO_ERROR (H5E_PLINE, H5E_CANTRELEASE, FAIL, "unable to close dataspace")
+            } /* end if */
+        } /* end if */
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5Z_prelude_callback() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_can_apply
+ *
+ * Purpose:	Checks if all the filters defined in the dataset creation
+ *              property list can be applied to a particular combination of
+ *              datatype and dataspace for a dataset.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, April 3, 2003
+ *
+ * Notes:
+ *              The chunk dimensions are used to create a dataspace, instead
+ *              of passing in the dataset's dataspace, since the chunk
+ *              dimensions are what the I/O filter will actually see
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Z_can_apply (hid_t dcpl_id, hid_t type_id)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_can_apply,FAIL)
+
+    assert (H5I_GENPROP_LST==H5I_get_type(dcpl_id));
+    assert (H5I_DATATYPE==H5I_get_type(type_id));
+
+    /* Make "can apply" callbacks for filters in pipeline */
+    if(H5Z_prelude_callback(dcpl_id, type_id, H5Z_PRELUDE_CAN_APPLY)<0)
+        HGOTO_ERROR(H5E_PLINE, H5E_CANAPPLY, FAIL, "unable to apply filter")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5Z_can_apply() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_set_local
+ *
+ * Purpose:	Makes callbacks to modify dataset creation list property
+ *              settings for filters on a new dataset, based on the datatype
+ *              and dataspace of that dataset (chunk).
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, April 4, 2003
+ *
+ * Notes:
+ *              The chunk dimensions are used to create a dataspace, instead
+ *              of passing in the dataset's dataspace, since the chunk
+ *              dimensions are what the I/O filter will actually see
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Z_set_local (hid_t dcpl_id, hid_t type_id)
+{
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_set_local,FAIL)
+
+    assert (H5I_GENPROP_LST==H5I_get_type(dcpl_id));
+    assert (H5I_DATATYPE==H5I_get_type(type_id));
+
+    /* Make "set local" callbacks for filters in pipeline */
+    if(H5Z_prelude_callback(dcpl_id, type_id, H5Z_PRELUDE_SET_LOCAL)<0)
+        HGOTO_ERROR(H5E_PLINE, H5E_SETLOCAL, FAIL, "local filter parameters not set")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5Z_set_local() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_modify
+ *
+ * Purpose:	Modify filter parameters for specified pipeline.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, April  5, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Z_modify(const H5O_pline_t *pline, H5Z_filter_t filter, unsigned flags,
+	   size_t cd_nelmts, const unsigned int cd_values[/*cd_nelmts*/])
+{
+    size_t	idx;                    /* Index of filter in pipeline */
+    size_t	i;                      /* Local index variable */
+    herr_t      ret_value=SUCCEED;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_modify, FAIL)
+
+    assert(pline);
+    assert(filter>=0 && filter<=H5Z_FILTER_MAX);
+    assert(0==(flags & ~((unsigned)H5Z_FLAG_DEFMASK)));
+    assert(0==cd_nelmts || cd_values);
+
+    /* Locate the filter in the pipeline */
+    for(idx=0; idx<pline->nused; idx++)
+        if(pline->filter[idx].id==filter)
+            break;
+
+    /* Check if the filter was not already in the pipeline */
+    if(idx>pline->nused)
+	HGOTO_ERROR(H5E_PLINE, H5E_NOTFOUND, FAIL, "filter not in pipeline")
+
+    /* Change parameters for filter */
+    pline->filter[idx].flags = flags;
+    pline->filter[idx].cd_nelmts = cd_nelmts;
+
+    /* Free any existing parameters */
+    if(pline->filter[idx].cd_values!=NULL)
+	H5MM_xfree(pline->filter[idx].cd_values);
+
+    /* Set parameters */
+    if (cd_nelmts>0) {
+	pline->filter[idx].cd_values = H5MM_malloc(cd_nelmts*sizeof(unsigned));
+	if (NULL==pline->filter[idx].cd_values)
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for filter parameters")
+	for (i=0; i<cd_nelmts; i++)
+	    pline->filter[idx].cd_values[i] = cd_values[i];
+    } /* end if */
+    else
+       pline->filter[idx].cd_values = NULL;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5Z_modify() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_append
+ *
+ * Purpose:	Append another filter to the specified pipeline.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, August  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Z_append(H5O_pline_t *pline, H5Z_filter_t filter, unsigned flags,
+	   size_t cd_nelmts, const unsigned int cd_values[/*cd_nelmts*/])
+{
+    size_t	idx, i;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_append, FAIL)
+
+    assert(pline);
+    assert(filter>=0 && filter<=H5Z_FILTER_MAX);
+    assert(0==(flags & ~((unsigned)H5Z_FLAG_DEFMASK)));
+    assert(0==cd_nelmts || cd_values);
+
+    /*
+     * Check filter limit.  We do it here for early warnings although we may
+     * decide to relax this restriction in the future.
+     */
+    if (pline->nused>=H5Z_MAX_NFILTERS)
+	HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, FAIL, "too many filters in pipeline")
+
+    /* Allocate additional space in the pipeline if it's full */
+    if (pline->nused>=pline->nalloc) {
+	H5O_pline_t x;
+	x.nalloc = MAX(H5Z_MAX_NFILTERS, 2*pline->nalloc);
+	x.filter = H5MM_realloc(pline->filter, x.nalloc*sizeof(x.filter[0]));
+	if (NULL==x.filter)
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for filter pipeline")
+	pline->nalloc = x.nalloc;
+	pline->filter = x.filter;
+    }
+
+    /* Add the new filter to the pipeline */
+    idx = pline->nused;
+    pline->filter[idx].id = filter;
+    pline->filter[idx].flags = flags;
+    pline->filter[idx].name = NULL; /*we'll pick it up later*/
+    pline->filter[idx].cd_nelmts = cd_nelmts;
+    if (cd_nelmts>0) {
+	pline->filter[idx].cd_values = H5MM_malloc(cd_nelmts*sizeof(unsigned));
+	if (NULL==pline->filter[idx].cd_values)
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed for filter")
+	for (i=0; i<cd_nelmts; i++)
+	    pline->filter[idx].cd_values[i] = cd_values[i];
+    } else {
+       pline->filter[idx].cd_values = NULL;
+    }
+    pline->nused++;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_find_idx
+ *
+ * Purpose:	Given a filter ID return the offset in the global array
+ *              that holds all the registered filters.
+ *
+ * Return:	Success:	Non-negative index of entry in global filter table.
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, April  5, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+H5Z_find_idx(H5Z_filter_t id)
+{
+    size_t i;                   /* Local index variable */
+    int ret_value=FAIL;         /* Return value */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5Z_find_idx)
+
+    for (i=0; i<H5Z_table_used_g; i++)
+	if (H5Z_table_g[i].id == id)
+	    HGOTO_DONE((int)i)
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5Z_find_idx() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_find
+ *
+ * Purpose:	Given a filter ID return a pointer to a global struct that
+ *		defines the filter.
+ *
+ * Return:	Success:	Ptr to entry in global filter table.
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, August  5, 1998
+ *
+ * Modifications:
+ *              Use H5Z_find_idx now
+ *              Quincey Koziol, April  5, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+H5Z_class_t *
+H5Z_find(H5Z_filter_t id)
+{
+    int	idx;                            /* Filter index in global table */
+    H5Z_class_t *ret_value=NULL;        /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_find, NULL)
+
+    /* Get the index in the global table */
+    if((idx=H5Z_find_idx(id))<0)
+        HGOTO_ERROR(H5E_PLINE, H5E_NOTFOUND, NULL, "required filter is not registered")
+
+    /* Set return value */
+    ret_value=H5Z_table_g+idx;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5Z_find() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_pipeline
+ *
+ * Purpose:	Process data through the filter pipeline.  The FLAGS argument
+ *		is the filter invocation flags (definition flags come from
+ *		the PLINE->filter[].flags).  The filters are processed in
+ *		definition order unless the H5Z_FLAG_REVERSE is set.  The
+ *		FILTER_MASK is a bit-mask to indicate which filters to skip
+ *		and on exit will indicate which filters failed.  Each
+ *		filter has an index number in the pipeline and that index
+ *		number is the filter's bit in the FILTER_MASK.  NBYTES is the
+ *		number of bytes of data to filter and on exit should be the
+ *		number of resulting bytes while BUF_SIZE holds the total
+ *		allocated size of the buffer, which is pointed to BUF.
+ *
+ *		If the buffer must grow during processing of the pipeline
+ *		then the pipeline function should free the original buffer
+ *		and return a fresh buffer, adjusting BUF_SIZE accordingly.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, August  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Z_pipeline(const H5O_pline_t *pline, unsigned flags,
+ 	     unsigned *filter_mask/*in,out*/, H5Z_EDC_t edc_read,
+             H5Z_cb_t cb_struct, size_t *nbytes/*in,out*/,
+             size_t *buf_size/*in,out*/, void **buf/*in,out*/)
+{
+    size_t	i, idx, new_nbytes;
+    int fclass_idx;             /* Index of filter class in global table */
+    H5Z_class_t	*fclass=NULL;   /* Filter class pointer */
+#ifdef H5Z_DEBUG
+    H5Z_stats_t	*fstats=NULL;   /* Filter stats pointer */
+    H5_timer_t	timer;
+#endif
+    unsigned	failed = 0;
+    unsigned	tmp_flags;
+    herr_t      ret_value=SUCCEED;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_pipeline, FAIL)
+
+    assert(0==(flags & ~((unsigned)H5Z_FLAG_INVMASK)));
+    assert(filter_mask);
+    assert(nbytes && *nbytes>0);
+    assert(buf_size && *buf_size>0);
+    assert(buf && *buf);
+    assert(!pline || pline->nused<H5Z_MAX_NFILTERS);
+
+    if (pline && (flags & H5Z_FLAG_REVERSE)) { /* Read */
+	for (i=pline->nused; i>0; --i) {
+	    idx = i-1;
+
+	    if (*filter_mask & ((unsigned)1<<idx)) {
+		failed |= (unsigned)1 << idx;
+		continue;/*filter excluded*/
+	    }
+	    if ((fclass_idx=H5Z_find_idx(pline->filter[idx].id))<0) {
+		HGOTO_ERROR(H5E_PLINE, H5E_READERROR, FAIL, "required filter is not registered")
+	    }
+            fclass=&H5Z_table_g[fclass_idx];
+#ifdef H5Z_DEBUG
+            fstats=&H5Z_stat_table_g[fclass_idx];
+	    H5_timer_begin(&timer);
+#endif
+            tmp_flags=flags|(pline->filter[idx].flags);
+            tmp_flags|=(edc_read== H5Z_DISABLE_EDC) ? H5Z_FLAG_SKIP_EDC : 0;
+	    new_nbytes = (fclass->filter)(tmp_flags, pline->filter[idx].cd_nelmts,
+                                        pline->filter[idx].cd_values, *nbytes, buf_size, buf);
+
+#ifdef H5Z_DEBUG
+	    H5_timer_end(&(fstats->stats[1].timer), &timer);
+	    fstats->stats[1].total += MAX(*nbytes, new_nbytes);
+	    if (0==new_nbytes) fstats->stats[1].errors += *nbytes;
+#endif
+
+            if(0==new_nbytes) {
+                if((cb_struct.func && (H5Z_CB_FAIL==cb_struct.func(pline->filter[idx].id, *buf, *buf_size, cb_struct.op_data)))
+                    || !cb_struct.func)
+		      HGOTO_ERROR(H5E_PLINE, H5E_READERROR, FAIL, "filter returned failure during read")
+
+                *nbytes = *buf_size;
+                failed |= (unsigned)1 << idx;
+                H5E_clear();
+            } else {
+                *nbytes = new_nbytes;
+            }
+	}
+    } else if (pline) { /* Write */
+	for (idx=0; idx<pline->nused; idx++) {
+	    if (*filter_mask & ((unsigned)1<<idx)) {
+		failed |= (unsigned)1 << idx;
+		continue; /*filter excluded*/
+	    }
+	    if ((fclass_idx=H5Z_find_idx(pline->filter[idx].id))<0) {
+                /* Check if filter is optional -- If it isn't, then error */
+		if ((pline->filter[idx].flags & H5Z_FLAG_OPTIONAL) == 0)
+		    HGOTO_ERROR(H5E_PLINE, H5E_WRITEERROR, FAIL, "required filter is not registered")
+
+		failed |= (unsigned)1 << idx;
+                H5E_clear();
+		continue; /*filter excluded*/
+	    }
+            fclass=&H5Z_table_g[fclass_idx];
+#ifdef H5Z_DEBUG
+            fstats=&H5Z_stat_table_g[fclass_idx];
+	    H5_timer_begin(&timer);
+#endif
+	    new_nbytes = (fclass->filter)(flags|(pline->filter[idx].flags), pline->filter[idx].cd_nelmts,
+					pline->filter[idx].cd_values, *nbytes, buf_size, buf);
+#ifdef H5Z_DEBUG
+	    H5_timer_end(&(fstats->stats[0].timer), &timer);
+	    fstats->stats[0].total += MAX(*nbytes, new_nbytes);
+	    if (0==new_nbytes) fstats->stats[0].errors += *nbytes;
+#endif
+            if(0==new_nbytes) {
+                if (0==(pline->filter[idx].flags & H5Z_FLAG_OPTIONAL)) {
+                    if((cb_struct.func && (H5Z_CB_FAIL==cb_struct.func(pline->filter[idx].id, *buf, *nbytes, cb_struct.op_data)))
+                            || !cb_struct.func)
+                        HGOTO_ERROR(H5E_PLINE, H5E_WRITEERROR, FAIL, "filter returned failure")
+
+                    *nbytes = *buf_size;
+                }
+
+                failed |= (unsigned)1 << idx;
+                H5E_clear();
+            } else {
+                *nbytes = new_nbytes;
+            }
+	}
+    }
+
+    *filter_mask = failed;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_filter_info
+ *
+ * Purpose:	Get pointer to filter info for pipeline
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, April  5, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+H5Z_filter_info_t *
+H5Z_filter_info(const H5O_pline_t *pline, H5Z_filter_t filter)
+{
+    size_t	idx;                    /* Index of filter in pipeline */
+    H5Z_filter_info_t *ret_value;       /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_filter_info, NULL)
+
+    assert(pline);
+    assert(filter>=0 && filter<=H5Z_FILTER_MAX);
+
+    /* Locate the filter in the pipeline */
+    for(idx=0; idx<pline->nused; idx++)
+        if(pline->filter[idx].id==filter)
+            break;
+
+    /* Check if the filter was not already in the pipeline */
+    if(idx>pline->nused)
+	HGOTO_ERROR(H5E_PLINE, H5E_NOTFOUND, NULL, "filter not in pipeline")
+
+    /* Set return value */
+    ret_value=&pline->filter[idx];
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5Z_filter_info() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_all_filters_avail
+ *
+ * Purpose:	Verify that all the filters in a pipeline are currently
+ *              available (i.e. registered)
+ *
+ * Return:	Non-negative (TRUE/FALSE) on success/Negative on failure
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, April  8, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+htri_t
+H5Z_all_filters_avail(const H5O_pline_t *pline)
+{
+    size_t i,j;                 /* Local index variable */
+    htri_t ret_value=TRUE;      /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_all_filters_avail, FAIL)
+
+    /* Check args */
+    assert(pline);
+
+    /* Iterate through all the filters in pipeline */
+    for(i=0; i<pline->nused; i++) {
+
+        /* Look for each filter in the list of registered filters */
+        for(j=0; j<H5Z_table_used_g; j++)
+            if(H5Z_table_g[j].id==pline->filter[i].id)
+                break;
+
+        /* Check if we didn't find the filter */
+        if(j==H5Z_table_used_g)
+            HGOTO_DONE(FALSE)
+    } /* end for */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5Z_all_filters_avail() */
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: H5Z_delete
+ *
+ * Purpose: Delete filter FILTER from pipeline PLINE;
+ *  deletes all filters if FILTER is H5Z_FILTER_NONE
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: Pedro Vicente
+ *              Monday, January 26, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Z_delete(H5O_pline_t *pline, H5Z_filter_t filter)
+{
+    herr_t ret_value=SUCCEED; /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_delete, FAIL)
+
+    /* Check args */
+    assert(pline);
+    assert(filter>=0 && filter<=H5Z_FILTER_MAX);
+
+    /* if the pipeline has no filters, just return */
+    if(pline->nused==0)
+        HGOTO_DONE(SUCCEED)
+
+    /* Delete all filters */
+    if (H5Z_FILTER_ALL==filter) {
+        if(H5O_reset(H5O_PLINE_ID, pline)<0)
+            HGOTO_ERROR(H5E_PLINE, H5E_CANTFREE, FAIL, "can't release pipeline info")
+    } /* end if */
+    /* Delete filter */
+    else {
+        size_t idx;             /* Index of filter in pipeline */
+        unsigned found=0;       /* Indicate filter was found in pipeline */
+
+        /* Locate the filter in the pipeline */
+        for(idx=0; idx<pline->nused; idx++)
+            if(pline->filter[idx].id==filter) {
+                found=1;
+                break;
+            }
+
+        /* filter was not found in the pipeline */
+        if (!found)
+            HGOTO_ERROR(H5E_PLINE, H5E_NOTFOUND, FAIL, "filter not in pipeline")
+
+        /* Free information for deleted filter */
+        H5MM_xfree(pline->filter[idx].name);
+        H5MM_xfree(pline->filter[idx].cd_values);
+
+        /* Remove filter from pipeline array */
+        if((idx+1)<pline->nused)
+            HDmemcpy(&pline->filter[idx], &pline->filter[idx+1],
+                sizeof (H5Z_filter_info_t)*(pline->nused-(idx+1)));
+
+        /* Decrement number of used filters */
+        pline->nused--;
+
+        /* Reset information for previous last filter in pipeline */
+        HDmemset(&pline->filter[pline->nused], 0, sizeof (H5Z_filter_info_t));
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+/*-------------------------------------------------------------------------
+ * Function: H5Zget_filter_info
+ *
+ * Purpose: Gets information about a pipeline data filter and stores it
+ *          in filter_config_flags.
+ *
+ * Return: zero on success / negative on failure
+ *
+ * Programmer: James Laird and Nat Furrer
+ *              Monday, June 7, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t H5Zget_filter_info(H5Z_filter_t filter, unsigned int *filter_config_flags)
+{
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_API(H5Zget_filter_info, FAIL)
+
+    if (filter_config_flags != NULL)
+    {
+        if (filter == H5Z_FILTER_SZIP)
+        {
+            *filter_config_flags = 0;
+#ifdef H5_HAVE_FILTER_SZIP
+            if(SZ_encoder_enabled()>0)
+                *filter_config_flags |= H5Z_FILTER_CONFIG_ENCODE_ENABLED;
+#endif /* H5_HAVE_FILTER_SZIP */
+            *filter_config_flags |= H5Z_FILTER_CONFIG_DECODE_ENABLED;
+        }
+        else
+            *filter_config_flags = H5Z_FILTER_CONFIG_DECODE_ENABLED | H5Z_FILTER_CONFIG_ENCODE_ENABLED;
+
+        /* Make sure the filter exists */
+        if (H5Z_find(filter) == NULL)
+            *filter_config_flags = 0;
+    }
+
+done:
+    FUNC_LEAVE_API(ret_value)
+}
+

Added: packages/hdf5/branches/upstream/current/src/H5Zdeflate.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Zdeflate.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Zdeflate.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,192 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Friday, August 27, 1999
+ */
+
+#define H5Z_PACKAGE		/*suppress error about including H5Zpkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Zpkg.h"		/* Data filters				*/
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+
+#ifdef H5_HAVE_ZLIB_H
+#   include "zlib.h"
+#endif
+
+/* Local function prototypes */
+static size_t H5Z_filter_deflate (unsigned flags, size_t cd_nelmts,
+    const unsigned cd_values[], size_t nbytes, size_t *buf_size, void **buf);
+
+/* This message derives from H5Z */
+const H5Z_class_t H5Z_DEFLATE[1] = {{
+    H5Z_FILTER_DEFLATE,		/* Filter id number		*/
+    "deflate",			/* Filter name for debugging	*/
+    NULL,                       /* The "can apply" callback     */
+    NULL,                       /* The "set local" callback     */
+    H5Z_filter_deflate,         /* The actual filter function	*/
+}};
+
+#define H5Z_DEFLATE_SIZE_ADJUST(s) (HDceil(((double)(s))*1.001)+12)
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_filter_deflate
+ *
+ * Purpose:	Implement an I/O filter around the 'deflate' algorithm in
+ *              libz
+ *
+ * Return:	Success: Size of buffer filtered
+ *		Failure: 0
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, April 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5Z_filter_deflate (unsigned flags, size_t cd_nelmts,
+		    const unsigned cd_values[], size_t nbytes,
+		    size_t *buf_size, void **buf)
+{
+    void	*outbuf = NULL;         /* Pointer to new buffer */
+    int		status;                 /* Status from zlib operation */
+    size_t	ret_value;              /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_filter_deflate, 0)
+
+    /* Check arguments */
+    if (cd_nelmts!=1 || cd_values[0]>9)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, 0, "invalid deflate aggression level")
+
+    if (flags & H5Z_FLAG_REVERSE) {
+	/* Input; uncompress */
+	z_stream	z_strm;                 /* zlib parameters */
+	size_t		nalloc = *buf_size;     /* Number of bytes for output (compressed) buffer */
+
+        /* Allocate space for the compressed buffer */
+	if (NULL==(outbuf = H5MM_malloc(nalloc)))
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "memory allocation failed for deflate uncompression")
+
+        /* Set the uncompression parameters */
+	HDmemset(&z_strm, 0, sizeof(z_strm));
+	z_strm.next_in = *buf;
+        H5_ASSIGN_OVERFLOW(z_strm.avail_in,nbytes,size_t,uInt);
+	z_strm.next_out = outbuf;
+        H5_ASSIGN_OVERFLOW(z_strm.avail_out,nalloc,size_t,uInt);
+
+        /* Initialize the uncompression routines */
+	if (Z_OK!=inflateInit(&z_strm))
+	    HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, 0, "inflateInit() failed")
+
+        /* Loop to uncompress the buffer */
+	do {
+            /* Uncompress some data */
+	    status = inflate(&z_strm, Z_SYNC_FLUSH);
+
+            /* Check if we are done uncompressing data */
+	    if (Z_STREAM_END==status)
+                break;	/*done*/
+
+            /* Check for error */
+	    if (Z_OK!=status) {
+		(void)inflateEnd(&z_strm);
+		HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, 0, "inflate() failed")
+	    }
+            else {
+                /* If we're not done and just ran out of buffer space, get more */
+                if (0==z_strm.avail_out) {
+                    /* Allocate a buffer twice as big */
+                    nalloc *= 2;
+                    if (NULL==(outbuf = H5MM_realloc(outbuf, nalloc))) {
+                        (void)inflateEnd(&z_strm);
+                        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "memory allocation failed for deflate uncompression")
+                    }
+
+                    /* Update pointers to buffer for next set of uncompressed data */
+                    z_strm.next_out = (unsigned char*)outbuf + z_strm.total_out;
+                    z_strm.avail_out = (uInt)(nalloc - z_strm.total_out);
+                }
+            } /* end else */
+	} while(status==Z_OK);
+
+        /* Free the input buffer */
+	H5MM_xfree(*buf);
+
+        /* Set return values */
+	*buf = outbuf;
+	outbuf = NULL;
+	*buf_size = nalloc;
+	ret_value = z_strm.total_out;
+
+        /* Finish uncompressing the stream */
+	(void)inflateEnd(&z_strm);
+    }
+    else {
+	/*
+	 * Output; compress but fail if the result would be larger than the
+	 * input.  The library doesn't provide in-place compression, so we
+	 * must allocate a separate buffer for the result.
+	 */
+	const Bytef *z_src = (const Bytef*)(*buf);
+	Bytef	    *z_dst;		/*destination buffer		*/
+	uLongf	     z_dst_nbytes = (uLongf)H5Z_DEFLATE_SIZE_ADJUST(nbytes);
+	uLong	     z_src_nbytes = (uLong)nbytes;
+        int          aggression;     /* Compression aggression setting */
+
+        /* Set the compression aggression level */
+        H5_ASSIGN_OVERFLOW(aggression,cd_values[0],unsigned,int);
+
+        /* Allocate output (compressed) buffer */
+	if (NULL==(z_dst=outbuf=H5MM_malloc(z_dst_nbytes)))
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "unable to allocate deflate destination buffer")
+
+        /* Perform compression from the source to the destination buffer */
+	status = compress2 (z_dst, &z_dst_nbytes, z_src, z_src_nbytes, aggression);
+
+        /* Check for various zlib errors */
+	if (Z_BUF_ERROR==status)
+	    HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, 0, "overflow")
+	else if (Z_MEM_ERROR==status)
+	    HGOTO_ERROR (H5E_PLINE, H5E_CANTINIT, 0, "deflate memory error")
+	else if (Z_OK!=status)
+	    HGOTO_ERROR (H5E_PLINE, H5E_CANTINIT, 0, "other deflate error")
+        /* Successfully uncompressed the buffer */
+        else {
+            /* Free the input buffer */
+	    H5MM_xfree(*buf);
+
+            /* Set return values */
+	    *buf = outbuf;
+	    outbuf = NULL;
+	    *buf_size = nbytes;
+	    ret_value = z_dst_nbytes;
+	}
+    }
+
+done:
+    if(outbuf)
+        H5MM_xfree(outbuf);
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+#endif /* H5_HAVE_FILTER_DEFLATE */
+

Added: packages/hdf5/branches/upstream/current/src/H5Zfletcher32.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Zfletcher32.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Zfletcher32.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,232 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Raymond Lu<slu at ncsa.uiuc.edu>
+ *              Jan 3, 2003
+ */
+
+#define H5Z_PACKAGE		/*suppress error about including H5Zpkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"         /* File access                          */
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Zpkg.h"		/* Data filters				*/
+
+#ifdef H5_HAVE_FILTER_FLETCHER32
+
+/* Local function prototypes */
+static size_t H5Z_filter_fletcher32 (unsigned flags, size_t cd_nelmts,
+    const unsigned cd_values[], size_t nbytes, size_t *buf_size, void **buf);
+
+/* This message derives from H5Z */
+const H5Z_class_t H5Z_FLETCHER32[1] = {{
+    H5Z_FILTER_FLETCHER32,	/* Filter id number		*/
+    "fletcher32",		/* Filter name for debugging	*/
+    NULL,                       /* The "can apply" callback     */
+    NULL,                       /* The "set local" callback     */
+    H5Z_filter_fletcher32,	/* The actual filter function	*/
+}};
+
+#define FLETCHER_LEN       4
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_filter_fletcher32_compute
+ *
+ * Purpose:	Implement an Fletcher32 Checksum using 1's complement.
+ *
+ * Return:	Success: Fletcher32 value
+ *
+ *		Failure: Can't fail
+ *
+ * Programmer:	Raymond Lu
+ *              Jan 3, 2003
+ *
+ * Modifications: Pedro Vicente, March 10, 2004
+ *   defined *SRC as unsigned char for all cases
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static uint32_t
+H5Z_filter_fletcher32_compute(void *_src, size_t len)
+{
+    unsigned char *src=(unsigned char *)_src;
+    /*To handle unusual platforms like Cray*/
+    unsigned short tmp_src;
+    size_t count = len;         /* Number of bytes left to checksum */
+    uint32_t s1 = 0, s2 = 0;    /* Temporary partial checksums */
+
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5Z_filter_fletcher32_compute)
+
+    /* Compute checksum */
+    while(count > 1) {
+
+        /*To handle unusual platforms like Cray*/
+        tmp_src = (((unsigned short)src[0])<<8) | ((unsigned short)src[1]);
+        src +=2;
+        s1 += tmp_src;
+
+        if(s1 & 0xFFFF0000) { /*Wrap around carry if occurred*/
+            s1 &= 0xFFFF;
+            s1++;
+        }
+        s2 += s1;
+        if(s2 & 0xFFFF0000) { /*Wrap around carry if occurred*/
+            s2 &= 0xFFFF;
+            s2++;
+        }
+        count -= 2;
+    }
+
+    if(count==1) {
+        s1 += *(unsigned char*)src;
+        if(s1 & 0xFFFF0000) { /*Wrap around carry if occurred*/
+            s1 &= 0xFFFF;
+            s1++;
+        }
+        s2 += s1;
+        if(s2 & 0xFFFF0000) { /*Wrap around carry if occurred*/
+            s2 &= 0xFFFF;
+            s2++;
+        }
+    }
+
+    FUNC_LEAVE_NOAPI((s2 << 16) + s1)
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_filter_fletcher32
+ *
+ * Purpose:	Implement an I/O filter of Fletcher32 Checksum
+ *
+ * Return:	Success: Size of buffer filtered
+ *		Failure: 0
+ *
+ * Programmer:	Raymond Lu
+ *              Jan 3, 2003
+ *
+ * Modifications:
+ *              Raymond Lu
+ *              July 8, 2005
+ *              There was a bug in the calculating code of the Fletcher32
+ *              checksum in the library before v1.6.3.  The checksum
+ *              value wasn't consistent between big-endian and little-endian
+ *              systems.  This bug was fixed in Release 1.6.3.  However,
+ *              after fixing the bug, the checksum value is no longer the
+ *              same as before on little-endian system.  We'll check both
+ *              the correct checksum and the wrong checksum to be consistent
+ *              with Release 1.6.2 and before.
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static size_t
+H5Z_filter_fletcher32 (unsigned flags, size_t UNUSED cd_nelmts, const unsigned UNUSED cd_values[],
+                     size_t nbytes, size_t *buf_size, void **buf)
+{
+    void    *outbuf = NULL;     /* Pointer to new buffer */
+    unsigned char *src = (unsigned char*)(*buf);
+    uint32_t fletcher;          /* Checksum value */
+    uint32_t reversed_fletcher; /* Possible wrong checksum value */
+    uint8_t  c[4];
+    uint8_t  tmp;
+    size_t   ret_value;         /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_filter_fletcher32, 0)
+
+    assert(sizeof(uint32_t)>=4);
+
+    if (flags & H5Z_FLAG_REVERSE) { /* Read */
+        /* Do checksum if it's enabled for read; otherwise skip it
+         * to save performance. */
+        if (!(flags & H5Z_FLAG_SKIP_EDC)) {
+            unsigned char *tmp_src;             /* Pointer to checksum in buffer */
+            size_t  src_nbytes = nbytes;        /* Original number of bytes */
+            uint32_t stored_fletcher;           /* Stored checksum value */
+
+            /* Get the stored checksum */
+            src_nbytes -= FLETCHER_LEN;
+            tmp_src=src+src_nbytes;
+            UINT32DECODE(tmp_src, stored_fletcher);
+
+            /* Compute checksum (can't fail) */
+            fletcher = H5Z_filter_fletcher32_compute(src,src_nbytes);
+
+            /* The reversed checksum.  There was a bug in the calculating code of
+             * the Fletcher32 checksum in the library before v1.6.3.  The checksum
+             * value wasn't consistent between big-endian and little-endian systems.
+             * This bug was fixed in Release 1.6.3.  However, after fixing the bug,
+             * the checksum value is no longer the same as before on little-endian
+             * system.  We'll check both the correct checksum and the wrong
+             * checksum to be consistent with Release 1.6.2 and before.
+             */
+            HDmemcpy(c, &fletcher, 4);
+
+            tmp  = c[1];
+            c[1] = c[0];
+            c[0] = tmp;
+
+            tmp  = c[3];
+            c[3] = c[2];
+            c[2] = tmp;
+
+            HDmemcpy(&reversed_fletcher, c, 4);
+
+            /* Verify computed checksum matches stored checksum */
+            if(stored_fletcher != fletcher && stored_fletcher != reversed_fletcher)
+	        HGOTO_ERROR(H5E_STORAGE, H5E_READERROR, 0, "data error detected by Fletcher32 checksum")
+        }
+
+        /* Set return values */
+        /* (Re-use the input buffer, just note that the size is smaller by the size of the checksum) */
+        ret_value = nbytes-FLETCHER_LEN;
+    } else { /* Write */
+        unsigned char *dst;     /* Temporary pointer to destination buffer */
+
+        /* Compute checksum (can't fail) */
+        fletcher = H5Z_filter_fletcher32_compute(src,nbytes);
+
+	if (NULL==(dst=outbuf=H5MM_malloc(nbytes+FLETCHER_LEN)))
+	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "unable to allocate Fletcher32 checksum destination buffer")
+
+        /* Copy raw data */
+        HDmemcpy((void*)dst, (void*)(*buf), nbytes);
+
+        /* Append checksum to raw data for storage */
+        dst += nbytes;
+        UINT32ENCODE(dst, fletcher);
+
+        /* Free input buffer */
+ 	H5MM_xfree(*buf);
+
+        /* Set return values */
+        *buf_size = nbytes + FLETCHER_LEN;
+	*buf = outbuf;
+	outbuf = NULL;
+	ret_value = *buf_size;
+    }
+
+done:
+    if(outbuf)
+        H5MM_xfree(outbuf);
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+#endif /* H5_HAVE_FILTER_FLETCHER32 */
+

Added: packages/hdf5/branches/upstream/current/src/H5Zpkg.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Zpkg.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Zpkg.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,56 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef H5Z_PACKAGE
+#error "Do not include this file outside the H5Z package!"
+#endif
+
+#ifndef _H5Zpkg_H
+#define _H5Zpkg_H
+
+/* Include private header file */
+#include "H5Zprivate.h"          /* Filter functions                */
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+/*
+ * Deflate filter
+ */
+H5_DLLVAR const H5Z_class_t H5Z_DEFLATE[1];
+#endif /* H5_HAVE_FILTER_DEFLATE */
+
+#ifdef H5_HAVE_FILTER_SHUFFLE
+/*
+ * Shuffle filter
+ */
+H5_DLLVAR const H5Z_class_t H5Z_SHUFFLE[1];
+#endif /* H5_HAVE_FILTER_SHUFFLE */
+
+#ifdef H5_HAVE_FILTER_FLETCHER32
+/*
+ * Fletcher32 filter
+ */
+H5_DLLVAR const H5Z_class_t H5Z_FLETCHER32[1];
+#endif /* H5_HAVE_FILTER_FLETCHER32 */
+
+#ifdef H5_HAVE_FILTER_SZIP
+/*
+ * szip filter
+ */
+H5_DLLVAR const H5Z_class_t H5Z_SZIP[1];
+#endif /* H5_HAVE_FILTER_SZIP */
+
+/* Package-local function prototypes */
+
+#endif /* _H5Zpkg_H */
+

Added: packages/hdf5/branches/upstream/current/src/H5Zprivate.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Zprivate.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Zprivate.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,64 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Thursday, April 16, 1998
+ */
+
+#ifndef _H5Zprivate_H
+#define _H5Zprivate_H
+
+/* Include package's public header */
+#include "H5Zpublic.h"
+
+/* Structure to store information about each filter's parameters */
+typedef struct {
+    H5Z_filter_t	id;		/*filter identification number	     */
+    unsigned		flags;		/*defn and invocation flags	     */
+    char		*name;		/*optional filter name		     */
+    size_t		cd_nelmts;	/*number of elements in cd_values[]  */
+    unsigned		*cd_values;	/*client data values		     */
+} H5Z_filter_info_t;
+
+/* Special parameters for szip compression */
+/* [These are aliases for the similar definitions in szlib.h, which we can't
+ * include directly due to the duplication of various symbols with the zlib.h
+ * header file] */
+#define H5_SZIP_LSB_OPTION_MASK         8
+#define H5_SZIP_MSB_OPTION_MASK         16
+#define H5_SZIP_RAW_OPTION_MASK         128
+
+struct H5O_pline_t; /*forward decl*/
+
+/* Internal API routines */
+H5_DLL herr_t H5Z_register(const H5Z_class_t *cls);
+H5_DLL herr_t H5Z_unregister(H5Z_filter_t id);
+H5_DLL herr_t H5Z_append(struct H5O_pline_t *pline, H5Z_filter_t filter,
+        unsigned flags, size_t cd_nelmts, const unsigned int cd_values[]);
+H5_DLL herr_t H5Z_modify(const struct H5O_pline_t *pline, H5Z_filter_t filter,
+        unsigned flags, size_t cd_nelmts, const unsigned int cd_values[]);
+H5_DLL herr_t H5Z_pipeline(const struct H5O_pline_t *pline,
+			    unsigned flags, unsigned *filter_mask/*in,out*/,
+ 			    H5Z_EDC_t edc_read, H5Z_cb_t cb_struct,
+			    size_t *nbytes/*in,out*/, size_t *buf_size/*in,out*/,
+                            void **buf/*in,out*/);
+H5_DLL H5Z_class_t *H5Z_find(H5Z_filter_t id);
+H5_DLL herr_t H5Z_can_apply(hid_t dcpl_id, hid_t type_id);
+H5_DLL herr_t H5Z_set_local(hid_t dcpl_id, hid_t type_id);
+H5_DLL H5Z_filter_info_t *H5Z_filter_info(const struct H5O_pline_t *pline,
+        H5Z_filter_t filter);
+H5_DLL htri_t H5Z_all_filters_avail(const struct H5O_pline_t *pline);
+H5_DLL herr_t H5Z_delete(struct H5O_pline_t *pline, H5Z_filter_t filter);
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/H5Zpublic.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Zpublic.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Zpublic.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,185 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Thursday, April 16, 1998
+ */
+
+#ifndef _H5Zpublic_H
+#define _H5Zpublic_H
+
+/*
+ * Filter identifiers.  Values 0 through 255 are for filters defined by the
+ * HDF5 library.  Values 256 through 511 are available for testing new
+ * filters. Subsequent values should be obtained from the HDF5 development
+ * team at hdf5dev at ncsa.uiuc.edu.  These values will never change because they
+ * appear in the HDF5 files.
+ */
+typedef int H5Z_filter_t;
+#define H5Z_FILTER_ERROR	(-1)	/*no filter			*/
+#define H5Z_FILTER_NONE		0	/*reserved indefinitely		*/
+#define H5Z_FILTER_ALL	 	0	/*symbol to remove all filters in H5Premove_filter		*/
+#define H5Z_FILTER_DEFLATE	1 	/*deflation like gzip	     	*/
+#define H5Z_FILTER_SHUFFLE      2       /*shuffle the data              */
+#define H5Z_FILTER_FLETCHER32   3       /*fletcher32 checksum of EDC       */
+#define H5Z_FILTER_SZIP         4       /*szip compression               */
+#define H5Z_FILTER_RESERVED     256	/*filter ids below this value are reserved */
+#define H5Z_FILTER_MAX		65535	/*maximum filter id		*/
+#define H5Z_MAX_NFILTERS        32      /* Maximum number of filters allowed in a pipeline (should probably be allowed to be an unlimited amount) */
+
+/* Flags for filter definition */
+#define H5Z_FLAG_DEFMASK	0x00ff	/*definition flag mask		*/
+#define H5Z_FLAG_MANDATORY      0x0000  /*filter is mandatory		*/
+#define H5Z_FLAG_OPTIONAL	0x0001	/*filter is optional		*/
+
+/* Additional flags for filter invocation */
+#define H5Z_FLAG_INVMASK	0xff00	/*invocation flag mask		*/
+#define H5Z_FLAG_REVERSE	0x0100	/*reverse direction; read	*/
+#define H5Z_FLAG_SKIP_EDC	0x0200	/*skip EDC filters for read	*/
+
+/* Special parameters for szip compression */
+/* [These are aliases for the similar definitions in szlib.h, which we can't
+ * include directly due to the duplication of various symbols with the zlib.h
+ * header file] */
+#define H5_SZIP_ALLOW_K13_OPTION_MASK   1
+#define H5_SZIP_CHIP_OPTION_MASK        2
+#define H5_SZIP_EC_OPTION_MASK          4
+#define H5_SZIP_NN_OPTION_MASK          32
+#define H5_SZIP_MAX_PIXELS_PER_BLOCK    32
+
+/* Values to decide if EDC is enabled for reading data */
+typedef enum H5Z_EDC_t {
+    H5Z_ERROR_EDC       = -1,   /* error value */
+    H5Z_DISABLE_EDC     = 0,
+    H5Z_ENABLE_EDC      = 1,
+    H5Z_NO_EDC          = 2     /* must be the last */
+} H5Z_EDC_t;
+
+/* Bit flags for H5Zget_filter_info */
+#define H5Z_FILTER_CONFIG_ENCODE_ENABLED (0x0001)
+#define H5Z_FILTER_CONFIG_DECODE_ENABLED (0x0002)
+
+/* Return values for filter callback function */
+typedef enum H5Z_cb_return_t {
+    H5Z_CB_ERROR  = -1,
+    H5Z_CB_FAIL   = 0,    /* I/O should fail if filter fails. */
+    H5Z_CB_CONT   = 1,    /* I/O continues if filter fails.   */
+    H5Z_CB_NO     = 2
+} H5Z_cb_return_t;
+
+/* Filter callback function definition */
+typedef H5Z_cb_return_t (*H5Z_filter_func_t)(H5Z_filter_t filter, void* buf,
+                                size_t buf_size, void* op_data);
+
+/* Structure for filter callback property */
+typedef struct H5Z_cb_t {
+    H5Z_filter_func_t func;
+    void*              op_data;
+} H5Z_cb_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Before a dataset gets created, the "can_apply" callbacks for any filters used
+ * in the dataset creation property list are called
+ * with the dataset's dataset creation property list, the dataset's datatype and
+ * a dataspace describing a chunk (for chunked dataset storage).
+ *
+ * The "can_apply" callback must determine if the combination of the dataset
+ * creation property list setting, the datatype and the dataspace represent a
+ * valid combination to apply this filter to.  For example, some cases of
+ * invalid combinations may involve the filter not operating correctly on
+ * certain datatypes (or certain datatype sizes), or certain sizes of the chunk
+ * dataspace.
+ *
+ * The "can_apply" callback can be the NULL pointer, in which case, the library
+ * will assume that it can apply to any combination of dataset creation
+ * property list values, datatypes and dataspaces.
+ *
+ * The "can_apply" callback returns positive a valid combination, zero for an
+ * invalid combination and negative for an error.
+ */
+typedef herr_t (*H5Z_can_apply_func_t)(hid_t dcpl_id, hid_t type_id, hid_t space_id);
+
+/*
+ * After the "can_apply" callbacks are checked for new datasets, the "set_local"
+ * callbacks for any filters used in the dataset creation property list are
+ * called.  These callbacks receive the dataset's private copy of the dataset
+ * creation property list passed in to H5Dcreate (i.e. not the actual property
+ * list passed in to H5Dcreate) and the datatype ID passed in to H5Dcreate
+ * (which is not copied and should not be modified) and a dataspace describing
+ * the chunk (for chunked dataset storage) (which should also not be modified).
+ *
+ * The "set_local" callback must set any parameters that are specific to this
+ * dataset, based on the combination of the dataset creation property list
+ * values, the datatype and the dataspace.  For example, some filters perform
+ * different actions based on different datatypes (or datatype sizes) or
+ * different number of dimensions or dataspace sizes.
+ *
+ * The "set_local" callback can be the NULL pointer, in which case, the library
+ * will assume that there are no dataset-specific settings for this filter.
+ *
+ * The "set_local" callback must return non-negative on success and negative
+ * for an error.
+ */
+typedef herr_t (*H5Z_set_local_func_t)(hid_t dcpl_id, hid_t type_id, hid_t space_id);
+
+/*
+ * A filter gets definition flags and invocation flags (defined above), the
+ * client data array and size defined when the filter was added to the
+ * pipeline, the size in bytes of the data on which to operate, and pointers
+ * to a buffer and its allocated size.
+ *
+ * The filter should store the result in the supplied buffer if possible,
+ * otherwise it can allocate a new buffer, freeing the original.  The
+ * allocated size of the new buffer should be returned through the BUF_SIZE
+ * pointer and the new buffer through the BUF pointer.
+ *
+ * The return value from the filter is the number of bytes in the output
+ * buffer. If an error occurs then the function should return zero and leave
+ * all pointer arguments unchanged.
+ */
+typedef size_t (*H5Z_func_t)(unsigned int flags, size_t cd_nelmts,
+			     const unsigned int cd_values[], size_t nbytes,
+			     size_t *buf_size, void **buf);
+
+/*
+ * The filter table maps filter identification numbers to structs that
+ * contain a pointers to the filter function and timing statistics.
+ */
+typedef struct H5Z_class_t {
+    H5Z_filter_t id;		/* Filter ID number			     */
+    const char	*name;		/* Comment for debugging		     */
+    H5Z_can_apply_func_t can_apply; /* The "can apply" callback for a filter */
+    H5Z_set_local_func_t set_local; /* The "set local" callback for a filter */
+    H5Z_func_t filter;		/* The actual filter function		     */
+} H5Z_class_t;
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+H5_DLL herr_t H5Zregister(H5Z_filter_t id, const char *comment,
+			   H5Z_func_t filter);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+H5_DLL herr_t H5Zregister(const H5Z_class_t *cls);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+H5_DLL herr_t H5Zunregister(H5Z_filter_t id);
+H5_DLL htri_t H5Zfilter_avail(H5Z_filter_t id);
+H5_DLL herr_t H5Zget_filter_info(H5Z_filter_t filter, unsigned int *filter_config_flags);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+

Added: packages/hdf5/branches/upstream/current/src/H5Zshuffle.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Zshuffle.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Zshuffle.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,276 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5Z_PACKAGE		/*suppress error about including H5Zpkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Ppublic.h"		/* Property lists			*/
+#include "H5Tpublic.h"		/* Datatype functions			*/
+#include "H5Zpkg.h"		/* Data filters				*/
+
+#ifdef H5_HAVE_FILTER_SHUFFLE
+
+/* Local function prototypes */
+static herr_t H5Z_set_local_shuffle(hid_t dcpl_id, hid_t type_id, hid_t space_id);
+static size_t H5Z_filter_shuffle(unsigned flags, size_t cd_nelmts,
+    const unsigned cd_values[], size_t nbytes, size_t *buf_size, void **buf);
+
+/* This message derives from H5Z */
+const H5Z_class_t H5Z_SHUFFLE[1] = {{
+    H5Z_FILTER_SHUFFLE,		/* Filter id number		*/
+    "shuffle",			/* Filter name for debugging	*/
+    NULL,                       /* The "can apply" callback     */
+    H5Z_set_local_shuffle,      /* The "set local" callback     */
+    H5Z_filter_shuffle,		/* The actual filter function	*/
+}};
+
+/* Local macros */
+#define H5Z_SHUFFLE_USER_NPARMS    0       /* Number of parameters that users can set */
+#define H5Z_SHUFFLE_TOTAL_NPARMS   1       /* Total number of parameters for filter */
+#define H5Z_SHUFFLE_PARM_SIZE      0       /* "Local" parameter for shuffling size */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_set_local_shuffle
+ *
+ * Purpose:	Set the "local" dataset parameter for data shuffling to be
+ *              the size of the datatype.
+ *
+ * Return:	Success: Non-negative
+ *		Failure: Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, April  7, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+/* ARGSUSED */
+static herr_t
+H5Z_set_local_shuffle(hid_t dcpl_id, hid_t type_id, hid_t UNUSED space_id)
+{
+    unsigned flags;         /* Filter flags */
+    size_t cd_nelmts=H5Z_SHUFFLE_USER_NPARMS;     /* Number of filter parameters */
+    unsigned cd_values[H5Z_SHUFFLE_TOTAL_NPARMS];  /* Filter parameters */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_set_local_shuffle, FAIL)
+
+    /* Get the filter's current parameters */
+    if(H5Pget_filter_by_id(dcpl_id,H5Z_FILTER_SHUFFLE,&flags,&cd_nelmts, cd_values,0,NULL)<0)
+	HGOTO_ERROR(H5E_PLINE, H5E_CANTGET, FAIL, "can't get shuffle parameters")
+
+    /* Set "local" parameter for this dataset */
+    if((cd_values[H5Z_SHUFFLE_PARM_SIZE]=(unsigned)H5Tget_size(type_id))==0)
+	HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "bad datatype size")
+
+    /* Modify the filter's parameters for this dataset */
+    if(H5Pmodify_filter(dcpl_id, H5Z_FILTER_SHUFFLE, flags, H5Z_SHUFFLE_TOTAL_NPARMS, cd_values)<0)
+	HGOTO_ERROR(H5E_PLINE, H5E_CANTSET, FAIL, "can't set local shuffle parameters")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5Z_set_local_shuffle() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_filter_shuffle
+ *
+ * Purpose:	Implement an I/O filter which "de-interlaces" a block of data
+ *              by putting all the bytes in a byte-position for each element
+ *              together in the block.  For example, for 4-byte elements stored
+ *              as: 012301230123, shuffling will store them as: 000111222333
+ *              Usually, the bytes in each byte position are more related to
+ *              each other and putting them together will increase compression.
+ *
+ * Return:	Success: Size of buffer filtered
+ *		Failure: 0
+ *
+ * Programmer:	Kent Yang
+ *              Wednesday, November 13, 2002
+ *
+ * Modifications:
+ *              Quincey Koziol, November 13, 2002
+ *              Cleaned up code.
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5Z_filter_shuffle(unsigned flags, size_t cd_nelmts, const unsigned cd_values[],
+                   size_t nbytes, size_t *buf_size, void **buf)
+{
+    void *dest = NULL;          /* Buffer to deposit [un]shuffled bytes into */
+    unsigned char *_src=NULL;   /* Alias for source buffer */
+    unsigned char *_dest=NULL;  /* Alias for destination buffer */
+    unsigned bytesoftype;       /* Number of bytes per element */
+    size_t numofelements;       /* Number of elements in buffer */
+    size_t i;                   /* Local index variables */
+#ifdef NO_DUFFS_DEVICE
+    size_t j;                   /* Local index variable */
+#endif /* NO_DUFFS_DEVICE */
+    size_t leftover;            /* Extra bytes at end of buffer */
+    size_t ret_value;           /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_filter_shuffle, 0)
+
+    /* Check arguments */
+    if (cd_nelmts!=H5Z_SHUFFLE_TOTAL_NPARMS || cd_values[H5Z_SHUFFLE_PARM_SIZE]==0)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, 0, "invalid shuffle parameters")
+
+    /* Get the number of bytes per element from the parameter block */
+    bytesoftype=cd_values[H5Z_SHUFFLE_PARM_SIZE];
+
+    /* Compute the number of elements in buffer */
+    numofelements=nbytes/bytesoftype;
+
+    /* Don't do anything for 1-byte elements, or "fractional" elements */
+    if(bytesoftype > 1 && numofelements > 1) {
+        /* Compute the leftover bytes if there are any */
+        leftover = nbytes%bytesoftype;
+
+        /* Allocate the destination buffer */
+        if (NULL==(dest = H5MM_malloc(nbytes)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "memory allocation failed for shuffle buffer")
+
+        if(flags & H5Z_FLAG_REVERSE) {
+            /* Get the pointer to the source buffer */
+            _src =(unsigned char *)(*buf);
+
+            /* Input; unshuffle */
+            for(i=0; i<bytesoftype; i++) {
+                _dest=((unsigned char *)dest)+i;
+#define DUFF_GUTS							    \
+    *_dest=*_src++;                             \
+    _dest+=bytesoftype;
+#ifdef NO_DUFFS_DEVICE
+                j = numofelements;
+                while(j > 0) {
+                    DUFF_GUTS;
+
+                    j--;
+                } /* end for */
+#else /* NO_DUFFS_DEVICE */
+            {
+                size_t duffs_index; /* Counting index for Duff's device */
+
+                duffs_index = (numofelements + 7) / 8;
+                switch (numofelements % 8) {
+                    case 0:
+                        do
+                          {
+                            DUFF_GUTS
+                    case 7:
+                            DUFF_GUTS
+                    case 6:
+                            DUFF_GUTS
+                    case 5:
+                            DUFF_GUTS
+                    case 4:
+                            DUFF_GUTS
+                    case 3:
+                            DUFF_GUTS
+                    case 2:
+                            DUFF_GUTS
+                    case 1:
+                            DUFF_GUTS
+                      } while (--duffs_index > 0);
+                } /* end switch */
+            }
+#endif /* NO_DUFFS_DEVICE */
+#undef DUFF_GUTS
+            } /* end for */
+
+            /* Add leftover to the end of data */
+            if(leftover>0) {
+                /* Adjust back to end of shuffled bytes */
+                _dest -= (bytesoftype - 1);     /*lint !e794 _dest is initialized */
+                HDmemcpy((void*)_dest, (void*)_src, leftover);
+            }
+        } /* end if */
+        else {
+            /* Get the pointer to the destination buffer */
+            _dest =(unsigned char *)dest;
+
+            /* Output; shuffle */
+            for(i=0; i<bytesoftype; i++) {
+                _src=((unsigned char *)(*buf))+i;
+#define DUFF_GUTS							    \
+    *_dest++=*_src;                             \
+    _src+=bytesoftype;
+#ifdef NO_DUFFS_DEVICE
+                j = numofelements;
+                while(j > 0) {
+                    DUFF_GUTS;
+
+                    j--;
+                } /* end for */
+#else /* NO_DUFFS_DEVICE */
+            {
+                size_t duffs_index; /* Counting index for Duff's device */
+
+                duffs_index = (numofelements + 7) / 8;
+                switch (numofelements % 8) {
+                    case 0:
+                        do
+                          {
+                            DUFF_GUTS
+                    case 7:
+                            DUFF_GUTS
+                    case 6:
+                            DUFF_GUTS
+                    case 5:
+                            DUFF_GUTS
+                    case 4:
+                            DUFF_GUTS
+                    case 3:
+                            DUFF_GUTS
+                    case 2:
+                            DUFF_GUTS
+                    case 1:
+                            DUFF_GUTS
+                      } while (--duffs_index > 0);
+                } /* end switch */
+            }
+#endif /* NO_DUFFS_DEVICE */
+#undef DUFF_GUTS
+            } /* end for */
+
+            /* Add leftover to the end of data */
+            if(leftover>0) {
+                /* Adjust back to end of shuffled bytes */
+                _src -= (bytesoftype - 1);      /*lint !e794 _src is initialized */
+                HDmemcpy((void*)_dest, (void*)_src, leftover);
+            }
+        } /* end else */
+
+        /* Free the input buffer */
+        H5MM_xfree(*buf);
+
+        /* Set the buffer information to return */
+        *buf = dest;
+        *buf_size=nbytes;
+    } /* end else */
+
+    /* Set the return value */
+    ret_value = nbytes;
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+#endif /*H5_HAVE_FILTER_SHUFFLE */
+

Added: packages/hdf5/branches/upstream/current/src/H5Zszip.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5Zszip.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5Zszip.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,360 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#define H5Z_PACKAGE		/*suppress error about including H5Zpkg	  */
+
+
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fprivate.h"         /* File access                          */
+#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5Oprivate.h"		/* Object headers		  	*/
+#include "H5Ppublic.h"		/* Property lists			*/
+#include "H5Tpublic.h"		/* Datatype functions			*/
+#include "H5Zpkg.h"		/* Data filters				*/
+
+#ifdef H5_HAVE_FILTER_SZIP
+
+#ifdef H5_HAVE_SZLIB_H
+#   include "szlib.h"
+#endif
+
+/* Local function prototypes */
+static herr_t H5Z_can_apply_szip(hid_t dcpl_id, hid_t type_id, hid_t space_id);
+static herr_t H5Z_set_local_szip(hid_t dcpl_id, hid_t type_id, hid_t space_id);
+static size_t H5Z_filter_szip (unsigned flags, size_t cd_nelmts,
+    const unsigned cd_values[], size_t nbytes, size_t *buf_size, void **buf);
+
+/* This message derives from H5Z */
+const H5Z_class_t H5Z_SZIP[1] = {{
+    H5Z_FILTER_SZIP,		/* Filter id number		*/
+    "szip",			/* Filter name for debugging	*/
+    H5Z_can_apply_szip,		/* The "can apply" callback     */
+    H5Z_set_local_szip,         /* The "set local" callback     */
+    H5Z_filter_szip,		/* The actual filter function	*/
+}};
+
+/* Local macros */
+#define H5Z_SZIP_USER_NPARMS    2       /* Number of parameters that users can set */
+#define H5Z_SZIP_TOTAL_NPARMS   4       /* Total number of parameters for filter */
+#define H5Z_SZIP_PARM_MASK      0       /* "User" parameter for option mask */
+#define H5Z_SZIP_PARM_PPB       1       /* "User" parameter for pixels-per-block */
+#define H5Z_SZIP_PARM_BPP       2       /* "Local" parameter for bits-per-pixel */
+#define H5Z_SZIP_PARM_PPS       3       /* "Local" parameter for pixels-per-scanline */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_can_apply_szip
+ *
+ * Purpose:	Check the parameters for szip compression for validity and
+ *              whether they fit a particular dataset.
+ *
+ * Note:        This function currently range-checks for datatypes with
+ *              8-bit boundaries (8, 16, 24, etc.).  It appears that the szip
+ *              library can actually handle 1-24, 32 & 64 bit samples.  If
+ *              this becomes important, we should make the checks below more
+ *              sophisticated and have them check for n-bit datatypes of the
+ *              correct size, etc. - QAK
+ *
+ * Return:	Success: Non-negative
+ *		Failure: Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, April  7, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5Z_can_apply_szip(hid_t UNUSED dcpl_id, hid_t type_id, hid_t UNUSED space_id)
+{
+    unsigned dtype_size;                /* Datatype's size (in bits) */
+    H5T_order_t dtype_order;            /* Datatype's endianness order */
+    herr_t ret_value=TRUE;              /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_can_apply_szip, FAIL)
+
+    /* If this is the Szip filter, make sure it can encode */
+    if (SZ_encoder_enabled()<=0)
+        HGOTO_ERROR(H5E_PLINE, H5E_NOENCODER, FAIL, "Filter present but encoding is disabled.");
+
+    /* Get datatype's size, for checking the "bits-per-pixel" */
+    if((dtype_size=(8*H5Tget_size(type_id)))==0)
+	HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "bad datatype size")
+
+    /* Range check datatype's size */
+    if(dtype_size>32 && dtype_size!=64)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FALSE, "invalid datatype size")
+
+    /* Get datatype's endianness order */
+    if((dtype_order=H5Tget_order(type_id))==H5T_ORDER_ERROR)
+	HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "can't retrieve datatype endianness order")
+
+    /* Range check datatype's endianness order */
+    /* (Note: this may not handle non-atomic datatypes well) */
+    if(dtype_order != H5T_ORDER_LE && dtype_order != H5T_ORDER_BE)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FALSE, "invalid datatype endianness order")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5Z_can_apply_szip() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_set_local_szip
+ *
+ * Purpose:	Set the "local" dataset parameters for szip compression.
+ *
+ * Return:	Success: Non-negative
+ *		Failure: Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, April  7, 2003
+ *
+ * Modifications: Used new logic to set the size of the scanline parameter.
+ *                Now SZIP compression can be applied to the chunk
+ *                of any shape and size with only one restriction: the number
+ *                of elements in the chunk has to be not less than number
+ *                of elements (pixels) in the block (cd_values[H5Z_SZIP_PARM_PPB]
+ *                parameter).
+ *                           Elena Pourmal, July 20, 2004
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5Z_set_local_szip(hid_t dcpl_id, hid_t type_id, hid_t space_id)
+{
+    unsigned flags;         /* Filter flags */
+    size_t cd_nelmts=H5Z_SZIP_USER_NPARMS;     /* Number of filter parameters */
+    unsigned cd_values[H5Z_SZIP_TOTAL_NPARMS];  /* Filter parameters */
+    hsize_t dims[H5O_LAYOUT_NDIMS];             /* Dataspace (i.e. chunk) dimensions */
+    int ndims;                  /* Number of (chunk) dimensions */
+    H5T_order_t dtype_order;    /* Datatype's endianness order */
+    int dtype_size;             /* Datatype's size (in bits) */
+    size_t dtype_precision;     /* Datatype's precision (in bits) */
+    size_t dtype_offset;        /* Datatype's offset (in bits) */
+    hsize_t scanline;           /* Size of dataspace's fastest changing dimension */
+    herr_t ret_value=SUCCEED;   /* Return value */
+
+    FUNC_ENTER_NOAPI(H5Z_set_local_szip, FAIL)
+
+    /* Get the filter's current parameters */
+    if(H5Pget_filter_by_id(dcpl_id,H5Z_FILTER_SZIP,&flags,&cd_nelmts, cd_values,0,NULL)<0)
+	HGOTO_ERROR(H5E_PLINE, H5E_CANTGET, FAIL, "can't get szip parameters");
+
+    /* Get datatype's size, for checking the "bits-per-pixel" */
+    if((dtype_size=(8*H5Tget_size(type_id)))==0)
+	HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "bad datatype size");
+
+    /* Get datatype's precision, in case is less than full bits  */
+    if((dtype_precision=H5Tget_precision(type_id))==0)
+	HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "bad datatype precision");
+
+    if(dtype_precision<dtype_size) {
+        dtype_offset=H5Tget_offset(type_id);
+        if(dtype_offset != 0) {
+            dtype_precision=dtype_size;
+        }
+    }
+    if (dtype_precision>24) {
+	if (dtype_precision <= 32) {
+		dtype_precision=32;
+	} else if ( dtype_precision <= 64) {
+		dtype_precision=64;
+	}
+    }
+
+    /* Set "local" parameter for this dataset's "bits-per-pixel" */
+    cd_values[H5Z_SZIP_PARM_BPP]=dtype_precision;
+
+    /* Get dimensions for dataspace */
+    if ((ndims=H5Sget_simple_extent_dims(space_id, dims, NULL))<0)
+        HGOTO_ERROR(H5E_PLINE, H5E_CANTGET, FAIL, "unable to get dataspace dimensions")
+
+    /* Set "local" parameter for this dataset's "pixels-per-scanline" */
+    /* (Use the chunk's fastest changing dimension size) */
+    assert(ndims>0);
+    scanline=dims[ndims-1];
+
+    /* Adjust scanline if it is smaller than number of pixels per block or
+       if it is bigger than maximum pixels per scanline, or there are more than
+       SZ_MAX_BLOCKS_PER_SCANLINE blocks per scanline  */
+
+    /* Check the pixels per block against the 'scanline' size */
+    if(scanline<cd_values[H5Z_SZIP_PARM_PPB]) {
+        hssize_t npoints;                   /* Number of points in the dataspace */
+
+        /* Get number of elements for the dataspace;  use
+           total number of elements in the chunk to define the new 'scanline' size */
+        if ((npoints=H5Sget_simple_extent_npoints(space_id))<0)
+            HGOTO_ERROR(H5E_PLINE, H5E_CANTGET, FAIL, "unable to get number of points in the dataspace")
+        if(npoints<cd_values[H5Z_SZIP_PARM_PPB])
+            HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "pixels per block greater than total number of elements in the chunk")
+        scanline = MIN((cd_values[H5Z_SZIP_PARM_PPB] * SZ_MAX_BLOCKS_PER_SCANLINE), npoints);
+    }
+    else {
+        if(scanline <= SZ_MAX_PIXELS_PER_SCANLINE)
+            scanline = MIN((cd_values[H5Z_SZIP_PARM_PPB] * SZ_MAX_BLOCKS_PER_SCANLINE), scanline);
+        else
+            scanline = cd_values[H5Z_SZIP_PARM_PPB] * SZ_MAX_BLOCKS_PER_SCANLINE;
+    } /* end else */
+
+    /* Assign the final value to the scanline */
+    H5_ASSIGN_OVERFLOW(cd_values[H5Z_SZIP_PARM_PPS],scanline,hsize_t,unsigned);
+
+    /* Get datatype's endianness order */
+    if((dtype_order=H5Tget_order(type_id))==H5T_ORDER_ERROR)
+	HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "bad datatype endianness order")
+
+    /* Set the correct endianness flag for szip */
+    /* (Note: this may not handle non-atomic datatypes well) */
+    cd_values[H5Z_SZIP_PARM_MASK] &= ~(SZ_LSB_OPTION_MASK|SZ_MSB_OPTION_MASK);
+    switch(dtype_order) {
+        case H5T_ORDER_LE:      /* Little-endian byte order */
+            cd_values[H5Z_SZIP_PARM_MASK] |= SZ_LSB_OPTION_MASK;
+            break;
+
+        case H5T_ORDER_BE:      /* Big-endian byte order */
+            cd_values[H5Z_SZIP_PARM_MASK] |= SZ_MSB_OPTION_MASK;
+            break;
+
+        default:
+            HGOTO_ERROR(H5E_PLINE, H5E_BADTYPE, FAIL, "bad datatype endianness order")
+    } /* end switch */
+
+    /* Modify the filter's parameters for this dataset */
+    if(H5Pmodify_filter(dcpl_id, H5Z_FILTER_SZIP, flags, H5Z_SZIP_TOTAL_NPARMS, cd_values)<0)
+	HGOTO_ERROR(H5E_PLINE, H5E_CANTSET, FAIL, "can't set local szip parameters")
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5Z_set_local_szip() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Z_filter_szip
+ *
+ * Purpose:	Implement an I/O filter around the 'rice' algorithm in
+ *              libsz
+ *
+ * Return:	Success: Size of buffer filtered
+ *		Failure: 0
+ *
+ * Programmer:	Kent Yang
+ *              Tuesday, April 1, 2003
+ *
+ * Modifications:
+ *              Quincey Koziol, April 2, 2003
+ *              Cleaned up code.
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+H5Z_filter_szip (unsigned flags, size_t cd_nelmts, const unsigned cd_values[],
+    size_t nbytes, size_t *buf_size, void **buf)
+{
+    size_t ret_value = 0;       /* Return value */
+    size_t size_out  = 0;       /* Size of output buffer */
+    unsigned char *outbuf = NULL;    /* Pointer to new output buffer */
+    unsigned char *newbuf = NULL;    /* Pointer to input buffer */
+    SZ_com_t sz_param;          /* szip parameter block */
+
+    FUNC_ENTER_NOAPI(H5Z_filter_szip, 0)
+
+    /* Sanity check to make certain that we haven't drifted out of date with
+     * the mask options from the szlib.h header */
+    assert(H5_SZIP_ALLOW_K13_OPTION_MASK==SZ_ALLOW_K13_OPTION_MASK);
+    assert(H5_SZIP_CHIP_OPTION_MASK==SZ_CHIP_OPTION_MASK);
+    assert(H5_SZIP_EC_OPTION_MASK==SZ_EC_OPTION_MASK);
+    assert(H5_SZIP_LSB_OPTION_MASK==SZ_LSB_OPTION_MASK);
+    assert(H5_SZIP_MSB_OPTION_MASK==SZ_MSB_OPTION_MASK);
+    assert(H5_SZIP_NN_OPTION_MASK==SZ_NN_OPTION_MASK);
+    assert(H5_SZIP_RAW_OPTION_MASK==SZ_RAW_OPTION_MASK);
+
+    /* Check arguments */
+    if (cd_nelmts!=4)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, 0, "invalid deflate aggression level")
+
+    /* Copy the filter parameters into the szip parameter block */
+    H5_ASSIGN_OVERFLOW(sz_param.options_mask,cd_values[H5Z_SZIP_PARM_MASK],unsigned,int);
+    H5_ASSIGN_OVERFLOW(sz_param.bits_per_pixel,cd_values[H5Z_SZIP_PARM_BPP],unsigned,int);
+    H5_ASSIGN_OVERFLOW(sz_param.pixels_per_block,cd_values[H5Z_SZIP_PARM_PPB],unsigned,int);
+    H5_ASSIGN_OVERFLOW(sz_param.pixels_per_scanline,cd_values[H5Z_SZIP_PARM_PPS],unsigned,int);
+
+    /* Input; uncompress */
+    if (flags & H5Z_FLAG_REVERSE) {
+        uint32_t stored_nalloc;  /* Number of bytes the compressed block will expand into */
+        size_t nalloc;  /* Number of bytes the compressed block will expand into */
+
+        /* Get the size of the uncompressed buffer */
+        newbuf = *buf;
+        UINT32DECODE(newbuf,stored_nalloc);
+        H5_ASSIGN_OVERFLOW(nalloc,stored_nalloc,uint32_t,size_t);
+
+        /* Allocate space for the uncompressed buffer */
+        if(NULL==(outbuf = H5MM_malloc(nalloc)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "memory allocation failed for szip decompression")
+
+        /* Decompress the buffer */
+        size_out=nalloc;
+        if(SZ_BufftoBuffDecompress(outbuf, &size_out, newbuf, nbytes-4, &sz_param) != SZ_OK)
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "szip_filter: decompression failed")
+        assert(size_out==nalloc);
+
+        /* Free the input buffer */
+        H5MM_xfree(*buf);
+
+        /* Set return values */
+        *buf = outbuf;
+        outbuf = NULL;
+        *buf_size = nalloc;
+        ret_value = nalloc;
+    }
+    /* Output; compress */
+    else {
+        unsigned char *dst = NULL;    /* Temporary pointer to new output buffer */
+
+        /* Allocate space for the compressed buffer & header (assume data won't get bigger) */
+        if(NULL==(dst=outbuf = H5MM_malloc(nbytes+4)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, 0, "unable to allocate szip destination buffer")
+
+        /* Encode the uncompressed length */
+        H5_CHECK_OVERFLOW(nbytes,size_t,uint32_t);
+        UINT32ENCODE(dst,nbytes);
+
+        /* Compress the buffer */
+        size_out = nbytes;
+        if(SZ_OK!= SZ_BufftoBuffCompress(dst, &size_out, *buf, nbytes, &sz_param))
+	    HGOTO_ERROR(H5E_PLINE, H5E_CANTINIT, 0, "overflow")
+        assert(size_out<=nbytes);
+
+        /* Free the input buffer */
+        H5MM_xfree(*buf);
+
+        /* Set return values */
+        *buf = outbuf;
+        outbuf = NULL;
+        *buf_size = size_out+4;
+        ret_value = size_out+4;
+    }
+
+done:
+    if(outbuf)
+        H5MM_xfree(outbuf);
+    FUNC_LEAVE_NOAPI(ret_value)
+}
+
+#endif /* H5_HAVE_FILTER_SZIP */
+

Added: packages/hdf5/branches/upstream/current/src/H5api_adpt.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5api_adpt.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5api_adpt.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,96 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * H5api_adpt.h
+ * Used for the HDF5 dll project
+ * Created by Patrick Lu on 1/12/99
+ */
+#ifndef H5API_ADPT_H
+#define H5API_ADPT_H
+
+#if defined(WIN32)
+
+#if defined(_HDF5DLL_)
+#pragma warning(disable: 4273)	/* Disable the dll linkage warnings */
+#define H5_DLL __declspec(dllexport)
+#define H5_DLLVAR extern __declspec(dllexport)
+#elif defined(_HDF5USEDLL_)
+#define H5_DLL __declspec(dllimport)
+#define H5_DLLVAR __declspec(dllimport)
+#else
+#define H5_DLL
+#define H5_DLLVAR extern
+#endif /* _HDF5DLL_ */
+
+#if defined(_HDF5TESTDLL_)
+#pragma warning(disable: 4273)	/* Disable the dll linkage warnings */
+#define H5TEST_DLL __declspec(dllexport)
+#define H5TEST_DLLVAR extern __declspec(dllexport)
+#elif defined(_HDF5TESTUSEDLL_)
+#define H5TEST_DLL __declspec(dllimport)
+#define H5TEST_DLLVAR __declspec(dllimport)
+#else
+#define H5TEST_DLL
+#define H5TEST_DLLVAR extern
+#endif /* _HDF5TESTDLL_ */
+
+#if defined(HDF5FORT_CSTUB_DLL_EXPORTS)
+#pragma warning(disable: 4273)	/* Disable the dll linkage warnings */
+#define H5_FCDLL __declspec(dllexport)
+#define H5_FCDLLVAR extern __declspec(dllexport)
+#elif defined(HDF5FORT_CSTUB_USEDLL)
+#define H5_FCDLL __declspec(dllimport)
+#define H5_FCDLLVAR __declspec(dllimport)
+#else
+#define H5_FCDLL
+#define H5_FCDLLVAR extern
+#endif /* _HDF5_FORTRANDLL_EXPORTS_ */
+
+#if defined(HDF5FORTTEST_CSTUB_DLL_EXPORTS)
+#pragma warning(disable: 4273)	/* Disable the dll linkage warnings */
+#define H5_FCTESTDLL __declspec(dllexport)
+#define H5_FCTESTDLLVAR extern __declspec(dllexport)
+#elif defined(HDF5FORTTEST_CSTUB_USEDLL)
+#define H5_FCTESTDLL __declspec(dllimport)
+#define H5_FCTESTDLLVAR __declspec(dllimport)
+#else
+#define H5_FCTESTDLL
+#define H5_FCTESTDLLVAR extern
+#endif /* _HDF5_FORTRANDLL_EXPORTS_ */
+
+
+
+/* Added to export or to import C++ APIs - BMR (02-15-2002) */
+#if defined(HDF5_CPPDLL_EXPORTS) /* this name is generated at creation */
+#define H5_DLLCPP __declspec(dllexport)
+#elif defined(HDF5CPP_USEDLL)
+#define H5_DLLCPP __declspec(dllimport)
+#else
+#define H5_DLLCPP
+#endif /* HDF5_CPPDLL_EXPORTS */
+
+#else /*WIN32*/
+#define H5_DLL
+#define H5_DLLVAR extern
+#define H5_DLLCPP
+#define H5TEST_DLL
+#define H5TEST_DLLVAR extern
+#define H5_FCDLL
+#define H5_FCDLLVAR extern
+#define H5_FCTESTDLL
+#define H5_FCTESTDLLVAR extern
+#endif
+
+#endif /* H5API_ADPT_H */

Added: packages/hdf5/branches/upstream/current/src/H5config.h.in
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5config.h.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5config.h.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,539 @@
+/* src/H5config.h.in.  Generated from configure.in by autoheader.  */
+
+/* Define if your system can handle converting denormalized floating-point
+   values. */
+#undef CONVERT_DENORMAL_FLOAT
+
+/* Define if `dev_t' is a scalar */
+#undef DEV_T_IS_SCALAR
+
+/* Define if gettimeofday() populates the tz pointer passed in */
+#undef GETTIMEOFDAY_GIVES_TZ
+
+/* Define to 1 if you have the `alarm' function. */
+#undef HAVE_ALARM
+
+/* Define if the __attribute__(()) extension is present */
+#undef HAVE_ATTRIBUTE
+
+/* Define to 1 if you have the `BSDgettimeofday' function. */
+#undef HAVE_BSDGETTIMEOFDAY
+
+/* Define to 1 if you have the `difftime' function. */
+#undef HAVE_DIFFTIME
+
+/* Define to 1 if you have the <dlfcn.h> header file. */
+#undef HAVE_DLFCN_H
+
+/* Define to 1 if you have the <dmalloc.h> header file. */
+#undef HAVE_DMALLOC_H
+
+/* Define to 1 if you have the <features.h> header file. */
+#undef HAVE_FEATURES_H
+
+/* Define if support for deflate filter is enabled */
+#undef HAVE_FILTER_DEFLATE
+
+/* Define if support for Fletcher32 checksum is enabled */
+#undef HAVE_FILTER_FLETCHER32
+
+/* Define if support for shuffle filter is enabled */
+#undef HAVE_FILTER_SHUFFLE
+
+/* Define if support for szip filter is enabled */
+#undef HAVE_FILTER_SZIP
+
+/* Define to 1 if you have the `fork' function. */
+#undef HAVE_FORK
+
+/* Define to 1 if you have the `frexpf' function. */
+#undef HAVE_FREXPF
+
+/* Define to 1 if you have the `frexpl' function. */
+#undef HAVE_FREXPL
+
+/* Define to 1 if you have the `fseek64' function. */
+#undef HAVE_FSEEK64
+
+/* Define if the function stack tracing code is to be compiled in */
+#undef HAVE_FUNCSTACK
+
+/* Define if the compiler understand the __FUNCTION__ keyword */
+#undef HAVE_FUNCTION
+
+/* Define if the Globus GASS is defined */
+#undef HAVE_GASS
+
+/* Define to 1 if you have the `GetConsoleScreenBufferInfo' function. */
+#undef HAVE_GETCONSOLESCREENBUFFERINFO
+
+/* Define to 1 if you have the `gethostname' function. */
+#undef HAVE_GETHOSTNAME
+
+/* Define to 1 if you have the `getpwuid' function. */
+#undef HAVE_GETPWUID
+
+/* Define to 1 if you have the `getrusage' function. */
+#undef HAVE_GETRUSAGE
+
+/* Define to 1 if you have the `gettextinfo' function. */
+#undef HAVE_GETTEXTINFO
+
+/* Define to 1 if you have the `gettimeofday' function. */
+#undef HAVE_GETTIMEOFDAY
+
+/* Define to 1 if you have the `get_fpc_csr' function. */
+#undef HAVE_GET_FPC_CSR
+
+/* Define to 1 if you have the <globus_common.h> header file. */
+#undef HAVE_GLOBUS_COMMON_H
+
+/* Define if we have GPFS support */
+#undef HAVE_GPFS
+
+/* Define to 1 if you have the <gpfs.h> header file. */
+#undef HAVE_GPFS_H
+
+/* Define if library will contain instrumentation to detect correct
+   optimization operation */
+#undef HAVE_INSTRUMENTED_LIBRARY
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define to 1 if you have the `ioctl' function. */
+#undef HAVE_IOCTL
+
+/* Define to 1 if you have the <io.h> header file. */
+#undef HAVE_IO_H
+
+/* Define if it's safe to use `long long' for hsize_t and hssize_t */
+#undef HAVE_LARGE_HSIZET
+
+/* Define to 1 if you have the `crypto' library (-lcrypto). */
+#undef HAVE_LIBCRYPTO
+
+/* Define to 1 if you have the `dmalloc' library (-ldmalloc). */
+#undef HAVE_LIBDMALLOC
+
+/* Define to 1 if you have the `elf' library (-lelf). */
+#undef HAVE_LIBELF
+
+/* Define to 1 if you have the `globus_common' library (-lglobus_common). */
+#undef HAVE_LIBGLOBUS_COMMON
+
+/* Define to 1 if you have the `globus_gaa' library (-lglobus_gaa). */
+#undef HAVE_LIBGLOBUS_GAA
+
+/* Define to 1 if you have the `globus_gass_cache' library
+   (-lglobus_gass_cache). */
+#undef HAVE_LIBGLOBUS_GASS_CACHE
+
+/* Define to 1 if you have the `globus_gass_file' library
+   (-lglobus_gass_file). */
+#undef HAVE_LIBGLOBUS_GASS_FILE
+
+/* Define to 1 if you have the `globus_gass_transfer' library
+   (-lglobus_gass_transfer). */
+#undef HAVE_LIBGLOBUS_GASS_TRANSFER
+
+/* Define to 1 if you have the `globus_gass_transfer_assist' library
+   (-lglobus_gass_transfer_assist). */
+#undef HAVE_LIBGLOBUS_GASS_TRANSFER_ASSIST
+
+/* Define to 1 if you have the `globus_gss' library (-lglobus_gss). */
+#undef HAVE_LIBGLOBUS_GSS
+
+/* Define to 1 if you have the `globus_gss_assist' library
+   (-lglobus_gss_assist). */
+#undef HAVE_LIBGLOBUS_GSS_ASSIST
+
+/* Define to 1 if you have the `globus_io' library (-lglobus_io). */
+#undef HAVE_LIBGLOBUS_IO
+
+/* Define to 1 if you have the `lmpe' library (-llmpe). */
+#undef HAVE_LIBLMPE
+
+/* Define to 1 if you have the `m' library (-lm). */
+#undef HAVE_LIBM
+
+/* Define to 1 if you have the `mpe' library (-lmpe). */
+#undef HAVE_LIBMPE
+
+/* Define to 1 if you have the `mpi' library (-lmpi). */
+#undef HAVE_LIBMPI
+
+/* Define to 1 if you have the `mpich' library (-lmpich). */
+#undef HAVE_LIBMPICH
+
+/* Define to 1 if you have the `mpio' library (-lmpio). */
+#undef HAVE_LIBMPIO
+
+/* Define to 1 if you have the `nsl' library (-lnsl). */
+#undef HAVE_LIBNSL
+
+/* Define to 1 if you have the `pthread' library (-lpthread). */
+#undef HAVE_LIBPTHREAD
+
+/* Define to 1 if you have the `socket' library (-lsocket). */
+#undef HAVE_LIBSOCKET
+
+/* Define to 1 if you have the `SrbClient' library (-lSrbClient). */
+#undef HAVE_LIBSRBCLIENT
+
+/* Define to 1 if you have the `ssl' library (-lssl). */
+#undef HAVE_LIBSSL
+
+/* Define to 1 if you have the `sz' library (-lsz). */
+#undef HAVE_LIBSZ
+
+/* Define to 1 if you have the `z' library (-lz). */
+#undef HAVE_LIBZ
+
+/* Define to 1 if you have the `longjmp' function. */
+#undef HAVE_LONGJMP
+
+/* Define to 1 if you have the `lseek64' function. */
+#undef HAVE_LSEEK64
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define if we have MPE support */
+#undef HAVE_MPE
+
+/* Define to 1 if you have the <mpe.h> header file. */
+#undef HAVE_MPE_H
+
+/* Define to 1 if you have the <netinet/in.h> header file. */
+#undef HAVE_NETINET_IN_H
+
+/* Define to 1 if you have the <netinet/tcp.h> header file. */
+#undef HAVE_NETINET_TCP_H
+
+/* Define if we have parallel support */
+#undef HAVE_PARALLEL
+
+/* Define to 1 if you have the <pthread.h> header file. */
+#undef HAVE_PTHREAD_H
+
+/* Define to 1 if you have the <setjmp.h> header file. */
+#undef HAVE_SETJMP_H
+
+/* Define to 1 if you have the `setsysinfo' function. */
+#undef HAVE_SETSYSINFO
+
+/* Define to 1 if you have the `sigaction' function. */
+#undef HAVE_SIGACTION
+
+/* Define to 1 if you have the `signal' function. */
+#undef HAVE_SIGNAL
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define if `socklen_t' is defined */
+#undef HAVE_SOCKLEN_T
+
+/* Define if the SRB is defined */
+#undef HAVE_SRB
+
+/* Define to 1 if you have the <srbClient.h> header file. */
+#undef HAVE_SRBCLIENT_H
+
+/* Define if `struct stat' has the `st_blocks' field */
+#undef HAVE_STAT_ST_BLOCKS
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define if the stream virtual file driver should be compiled */
+#undef HAVE_STREAM
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define if `struct text_info' is defined */
+#undef HAVE_STRUCT_TEXT_INFO
+
+/* Define if `struct timezone' is defined */
+#undef HAVE_STRUCT_TIMEZONE
+
+/* Define to 1 if `tm_zone' is member of `struct tm'. */
+#undef HAVE_STRUCT_TM_TM_ZONE
+
+/* Define if `struct videoconfig' is defined */
+#undef HAVE_STRUCT_VIDEOCONFIG
+
+/* Define to 1 if you have the `system' function. */
+#undef HAVE_SYSTEM
+
+/* Define to 1 if you have the <sys/filio.h> header file. */
+#undef HAVE_SYS_FILIO_H
+
+/* Define to 1 if you have the <sys/fpu.h> header file. */
+#undef HAVE_SYS_FPU_H
+
+/* Define to 1 if you have the <sys/ioctl.h> header file. */
+#undef HAVE_SYS_IOCTL_H
+
+/* Define to 1 if you have the <sys/proc.h> header file. */
+#undef HAVE_SYS_PROC_H
+
+/* Define to 1 if you have the <sys/resource.h> header file. */
+#undef HAVE_SYS_RESOURCE_H
+
+/* Define to 1 if you have the <sys/socket.h> header file. */
+#undef HAVE_SYS_SOCKET_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/sysinfo.h> header file. */
+#undef HAVE_SYS_SYSINFO_H
+
+/* Define to 1 if you have the <sys/timeb.h> header file. */
+#undef HAVE_SYS_TIMEB_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <szlib.h> header file. */
+#undef HAVE_SZLIB_H
+
+/* Define if we have thread safe support */
+#undef HAVE_THREADSAFE
+
+/* Define if `timezone' is a global variable */
+#undef HAVE_TIMEZONE
+
+/* Define if the ioctl TIOCGETD is defined */
+#undef HAVE_TIOCGETD
+
+/* Define if the ioctl TIOGWINSZ is defined */
+#undef HAVE_TIOCGWINSZ
+
+/* Define if `tm_gmtoff' is a member of `struct tm' */
+#undef HAVE_TM_GMTOFF
+
+/* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
+   `HAVE_STRUCT_TM_TM_ZONE' instead. */
+#undef HAVE_TM_ZONE
+
+/* Define to 1 if you don't have `tm_zone' but do have the external array
+   `tzname'. */
+#undef HAVE_TZNAME
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
+
+/* Define to 1 if you have the `waitpid' function. */
+#undef HAVE_WAITPID
+
+/* Define to 1 if you have the <winsock.h> header file. */
+#undef HAVE_WINSOCK_H
+
+/* Define to 1 if you have the <zlib.h> header file. */
+#undef HAVE_ZLIB_H
+
+/* Define to 1 if you have the `_getvideoconfig' function. */
+#undef HAVE__GETVIDEOCONFIG
+
+/* Define to 1 if you have the `_scrsize' function. */
+#undef HAVE__SCRSIZE
+
+/* Define if `__tm_gmtoff' is a member of `struct tm' */
+#undef HAVE___TM_GMTOFF
+
+/* Define if your system can handle complicated MPI derived datatype
+   correctly. */
+#undef MPI_COMPLEX_DERIVED_DATATYPE_WORKS
+
+/* Define if your system's `MPI_File_set_size' function works for files over
+   2GB. */
+#undef MPI_FILE_SET_SIZE_BIG
+
+/* Define if shared writing must be disabled (CodeWarrior only) */
+#undef NO_SHARED_WRITING
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Width for printf() for type `long long' or `__int64', use `ll' */
+#undef PRINTF_LL_WIDTH
+
+/* The size of a `char', as computed by sizeof. */
+#undef SIZEOF_CHAR
+
+/* The size of a `double', as computed by sizeof. */
+#undef SIZEOF_DOUBLE
+
+/* The size of a `float', as computed by sizeof. */
+#undef SIZEOF_FLOAT
+
+/* The size of a `int', as computed by sizeof. */
+#undef SIZEOF_INT
+
+/* The size of a `int16_t', as computed by sizeof. */
+#undef SIZEOF_INT16_T
+
+/* The size of a `int32_t', as computed by sizeof. */
+#undef SIZEOF_INT32_T
+
+/* The size of a `int64_t', as computed by sizeof. */
+#undef SIZEOF_INT64_T
+
+/* The size of a `int8_t', as computed by sizeof. */
+#undef SIZEOF_INT8_T
+
+/* The size of a `int_fast16_t', as computed by sizeof. */
+#undef SIZEOF_INT_FAST16_T
+
+/* The size of a `int_fast32_t', as computed by sizeof. */
+#undef SIZEOF_INT_FAST32_T
+
+/* The size of a `int_fast64_t', as computed by sizeof. */
+#undef SIZEOF_INT_FAST64_T
+
+/* The size of a `int_fast8_t', as computed by sizeof. */
+#undef SIZEOF_INT_FAST8_T
+
+/* The size of a `int_least16_t', as computed by sizeof. */
+#undef SIZEOF_INT_LEAST16_T
+
+/* The size of a `int_least32_t', as computed by sizeof. */
+#undef SIZEOF_INT_LEAST32_T
+
+/* The size of a `int_least64_t', as computed by sizeof. */
+#undef SIZEOF_INT_LEAST64_T
+
+/* The size of a `int_least8_t', as computed by sizeof. */
+#undef SIZEOF_INT_LEAST8_T
+
+/* The size of a `long', as computed by sizeof. */
+#undef SIZEOF_LONG
+
+/* The size of a `long double', as computed by sizeof. */
+#undef SIZEOF_LONG_DOUBLE
+
+/* The size of a `long long', as computed by sizeof. */
+#undef SIZEOF_LONG_LONG
+
+/* The size of a `off_t', as computed by sizeof. */
+#undef SIZEOF_OFF_T
+
+/* The size of a `short', as computed by sizeof. */
+#undef SIZEOF_SHORT
+
+/* The size of a `size_t', as computed by sizeof. */
+#undef SIZEOF_SIZE_T
+
+/* The size of a `ssize_t', as computed by sizeof. */
+#undef SIZEOF_SSIZE_T
+
+/* The size of a `uint16_t', as computed by sizeof. */
+#undef SIZEOF_UINT16_T
+
+/* The size of a `uint32_t', as computed by sizeof. */
+#undef SIZEOF_UINT32_T
+
+/* The size of a `uint64_t', as computed by sizeof. */
+#undef SIZEOF_UINT64_T
+
+/* The size of a `uint8_t', as computed by sizeof. */
+#undef SIZEOF_UINT8_T
+
+/* The size of a `uint_fast16_t', as computed by sizeof. */
+#undef SIZEOF_UINT_FAST16_T
+
+/* The size of a `uint_fast32_t', as computed by sizeof. */
+#undef SIZEOF_UINT_FAST32_T
+
+/* The size of a `uint_fast64_t', as computed by sizeof. */
+#undef SIZEOF_UINT_FAST64_T
+
+/* The size of a `uint_fast8_t', as computed by sizeof. */
+#undef SIZEOF_UINT_FAST8_T
+
+/* The size of a `uint_least16_t', as computed by sizeof. */
+#undef SIZEOF_UINT_LEAST16_T
+
+/* The size of a `uint_least32_t', as computed by sizeof. */
+#undef SIZEOF_UINT_LEAST32_T
+
+/* The size of a `uint_least64_t', as computed by sizeof. */
+#undef SIZEOF_UINT_LEAST64_T
+
+/* The size of a `uint_least8_t', as computed by sizeof. */
+#undef SIZEOF_UINT_LEAST8_T
+
+/* The size of a `__int64', as computed by sizeof. */
+#undef SIZEOF___INT64
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define if your system supports pthread_attr_setscope(&attribute,
+   PTHREAD_SCOPE_SYSTEM) call. */
+#undef SYSTEM_SCOPE_THREADS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+#undef TM_IN_SYS_TIME
+
+/* Define if the HDF5 v1.4 compatibility functions are to be compiled in */
+#undef WANT_H5_V1_4_COMPAT
+
+/* Define to 1 if your processor stores words with the most significant byte
+   first (like Motorola and SPARC, unlike Intel and VAX). */
+#undef WORDS_BIGENDIAN
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to `long' if <sys/types.h> does not define. */
+#undef off_t
+
+/* Define to `unsigned long' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to `long' if <sys/types.h> does not define. */
+#undef ssize_t

Added: packages/hdf5/branches/upstream/current/src/H5detect.c
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5detect.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5detect.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1474 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*keep this declaration near the top of this file -RPM*/
+static const char *FileHeader = "\n\
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\
+ * Copyright by the Board of Trustees of the University of Illinois.         *\n\
+ * All rights reserved.                                                      *\n\
+ *                                                                           *\n\
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *\n\
+ * terms governing use, modification, and redistribution, is contained in    *\n\
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *\n\
+ * of the source code distribution tree; Copyright.html can be found at the  *\n\
+ * root level of an installed copy of the electronic HDF5 document set and   *\n\
+ * is linked from the top-level documents page.  It can also be found at     *\n\
+ * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *\n\
+ * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *\n\
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *";
+/*
+ *
+ * Created:	H5detect.c
+ *		10 Aug 1997
+ *		Robb Matzke
+ *
+ * Purpose:	This code was borrowed heavily from the `detect.c'
+ *		program in the AIO distribution from Lawrence
+ *		Livermore National Laboratory.
+ *
+ *		Detects machine byte order and floating point
+ *		format and generates a C source file (native.c)
+ *		to describe those paramters.
+ *
+ * Assumptions: We have an ANSI compiler.  We're on a Unix like
+ *		system or configure has detected those Unix
+ *		features which aren't available.  We're not
+ *		running on a Vax or other machine with mixed
+ *		endianess.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#undef NDEBUG
+#include "H5private.h"
+#include "H5Tpublic.h"
+#include "H5Rpublic.h"
+
+#define MAXDETECT 64
+/*
+ * This structure holds information about a type that
+ * was detected.
+ */
+typedef struct detected_t {
+    const char		*varname;
+    int			size;		/*total byte size		*/
+    int			precision;	/*meaningful bits		*/
+    int			offset;		/*bit offset to meaningful bits	*/
+    int			perm[32];	/*byte order			*/
+    int			sign;		/*location of sign bit		*/
+    int			mpos, msize, imp;/*information about mantissa	*/
+    int			epos, esize;	/*information about exponent	*/
+    unsigned long	bias;		/*exponent bias for floating pt.*/
+    size_t		align;		/*required byte alignment	*/
+    size_t		comp_align;	/*alignment for structure       */
+} detected_t;
+
+/* This structure holds structure alignment for pointers, hvl_t, hobj_ref_t,
+ * hdset_reg_ref_t */
+typedef struct malign_t {
+    const char          *name;
+    size_t              comp_align;         /*alignment for structure   */
+} malign_t;
+
+/* global variables types detection code */
+static detected_t	d_g[MAXDETECT];
+static malign_t        m_g[MAXDETECT];
+static volatile int	nd_g = 0, na_g = 0;
+
+static void print_results(int nd, detected_t *d, int na, malign_t *m);
+static void iprint(detected_t *);
+static int byte_cmp(int, void *, void *);
+static int bit_cmp(int, int *, void *, void *);
+static void fix_order(int, int, int, int *, const char **);
+static int imp_bit(int, int *, void *, void *);
+static unsigned long find_bias(int, int, int *, void *);
+static void precision (detected_t*);
+static void print_header(void);
+static void detect_C89_integers(void);
+static void detect_C89_floats(void);
+static void detect_C99_integers(void);
+static void detect_C99_floats(void);
+static void detect_C99_integers8(void);
+static void detect_C99_integers16(void);
+static void detect_C99_integers32(void);
+static void detect_C99_integers64(void);
+static void detect_alignments(void);
+static size_t align_g[] = {1, 2, 4, 8, 16};
+static jmp_buf jbuf_g;
+
+
+/*-------------------------------------------------------------------------
+ * Function:	precision
+ *
+ * Purpose:	Determine the precision and offset.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, June 18, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+precision (detected_t *d)
+{
+    int		n;
+
+    if (0==d->msize) {
+	/*
+	 * An integer.	The permutation can have negative values at the
+	 * beginning or end which represent padding of bytes.  We must adjust
+	 * the precision and offset accordingly.
+	 */
+	if (d->perm[0] < 0) {
+	    /*
+	     * Lower addresses are padded.
+	     */
+	    for (n=0; n<d->size && d->perm[n]<0; n++) /*void*/;
+	    d->precision = 8*(d->size-n);
+	    d->offset = 0;
+	} else if (d->perm[d->size - 1] < 0) {
+	    /*
+	     * Higher addresses are padded.
+	     */
+	    for (n=0; n<d->size && d->perm[d->size-(n+1)]; n++) /*void*/;
+	    d->precision = 8*(d->size-n);
+	    d->offset = 8*n;
+	} else {
+	    /*
+	     * No padding.
+	     */
+	    d->precision = 8*d->size;
+	    d->offset = 0;
+	}
+    } else {
+	/* A floating point */
+	d->offset = MIN3 (d->mpos, d->epos, d->sign);
+	d->precision = d->msize + d->esize + 1;
+    }
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	DETECT_I
+ *
+ * Purpose:	This macro takes a type like `int' and a base name like
+ *		`nati' and detects the byte order.  The VAR is used to
+ *		construct the names of the C variables defined.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 12 1996
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 4 Nov 1996
+ *	The INFO.perm now contains `-1' for bytes that aren't used and
+ *	are always zero.  This happens on the Cray for `short' where
+ *	sizeof(short) is 8, but only the low-order 4 bytes are ever used.
+ *
+ *	Robb Matzke, 4 Nov 1996
+ *	Added a `padding' field to indicate how many zero bytes appear to
+ *	the left (N) or right (-N) of the value.
+ *
+ *	Robb Matzke, 5 Nov 1996
+ *	Removed HFILE and CFILE arguments.
+ *
+ *-------------------------------------------------------------------------
+ */
+#define DETECT_I(TYPE,VAR,INFO) {					      \
+   TYPE _v;								      \
+   int _int_v;                                                                \
+   int _i, _j;								      \
+   unsigned char *_x;							      \
+                                                                              \
+   memset (&INFO, 0, sizeof(INFO));					      \
+   INFO.varname = #VAR;							      \
+   INFO.size = sizeof(TYPE);						      \
+                                                                              \
+   if(sizeof(TYPE)!=1) {                                                      \
+       for (_i=sizeof(TYPE),_v=0; _i>0; --_i) _v = (_v<<8) + _i;	      \
+       for (_i=0,_x=(unsigned char *)&_v; _i<(signed)sizeof(TYPE); _i++) {    \
+          _j = (*_x++)-1;						      \
+          assert (_j<(signed)sizeof(TYPE));				      \
+          INFO.perm[_i] = _j;						      \
+       }								      \
+   } else { /*Not able to detect order if type size is 1 byte. Use native int \
+             *instead. No effect on data, just make it look correct. */       \
+       for (_i=sizeof(int),_int_v=0; _i>0; --_i) _int_v = (_int_v<<8) + _i;   \
+       for (_i=0,_x=(unsigned char *)&_int_v; _i<(signed)sizeof(int); _i++) { \
+          _j = (*_x++)-1;						      \
+          assert (_j<(signed)sizeof(int));				      \
+          INFO.perm[_i] = _j;						      \
+       }								      \
+   }                                                                          \
+                                                                              \
+   INFO.sign = ('U'!=*(#VAR));						      \
+   precision (&(INFO));							      \
+   ALIGNMENT(TYPE, INFO);						      \
+   if(!strcmp(INFO.varname, "SCHAR")  || !strcmp(INFO.varname, "SHORT") ||    \
+      !strcmp(INFO.varname, "INT")   || !strcmp(INFO.varname, "LONG")  ||     \
+      !strcmp(INFO.varname, "LLONG")) {                                       \
+      COMP_ALIGNMENT(TYPE,INFO.comp_align);                                   \
+   }                                                                          \
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	DETECT_F
+ *
+ * Purpose:	This macro takes a floating point type like `double' and
+ *		a base name like `natd' and detects byte order, mantissa
+ *		location, exponent location, sign bit location, presence or
+ *		absence of implicit mantissa bit, and exponent bias and
+ *		initializes a detected_t structure with those properties.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 12 1996
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 14 Aug 1996
+ *	The byte order detection has been changed because on the Cray
+ *	the last pass causes a rounding to occur that causes the least
+ *	significant mantissa byte to change unexpectedly.
+ *
+ *	Robb Matzke, 5 Nov 1996
+ *	Removed HFILE and CFILE arguments.
+ *-------------------------------------------------------------------------
+ */
+#define DETECT_F(TYPE,VAR,INFO) {					      \
+   TYPE _v1, _v2, _v3;							      \
+   int _i, _j, _first=(-1), _last=(-1);					      \
+   char *_mesg;								      \
+									      \
+   memset (&INFO, 0, sizeof(INFO));					      \
+   INFO.varname = #VAR;							      \
+   INFO.size = sizeof(TYPE);						      \
+									      \
+   /* Completely initialize temporary variables, in case the bits used in */  \
+   /* the type take less space than the number of bits used to store the type */  \
+   memset(&_v3,0,sizeof(TYPE));                                               \
+   memset(&_v2,0,sizeof(TYPE));                                               \
+   memset(&_v1,0,sizeof(TYPE));                                               \
+									      \
+   /* Byte Order */							      \
+   for (_i=0,_v1=0.0,_v2=1.0; _i<(signed)sizeof(TYPE); _i++) {		      \
+      _v3 = _v1; _v1 += _v2; _v2 /= 256.0;				      \
+      if ((_j=byte_cmp(sizeof(TYPE), &_v3, &_v1))>=0) {			      \
+	 if (0==_i || INFO.perm[_i-1]!=_j) {				      \
+	    INFO.perm[_i] = _j;						      \
+	    _last = _i;							      \
+	    if (_first<0) _first = _i;					      \
+	 }								      \
+      }									      \
+   }									      \
+   fix_order (sizeof(TYPE), _first, _last, INFO.perm, (const char**)&_mesg);  \
+									      \
+   /* Implicit mantissa bit */						      \
+   _v1 = 0.5;								      \
+   _v2 = 1.0;								      \
+   INFO.imp = imp_bit (sizeof(TYPE), INFO.perm, &_v1, &_v2);		      \
+									      \
+   /* Sign bit */							      \
+   _v1 = 1.0;								      \
+   _v2 = -1.0;								      \
+   INFO.sign = bit_cmp (sizeof(TYPE), INFO.perm, &_v1, &_v2);		      \
+									      \
+   /* Mantissa */							      \
+   INFO.mpos = 0;							      \
+									      \
+   _v1 = 1.0;								      \
+   _v2 = 1.5;								      \
+   INFO.msize = bit_cmp (sizeof(TYPE), INFO.perm, &_v1, &_v2);		      \
+   INFO.msize += 1 + (INFO.imp?0:1) - INFO.mpos;			      \
+									      \
+   /* Exponent */							      \
+   INFO.epos = INFO.mpos + INFO.msize;					      \
+									      \
+   INFO.esize = INFO.sign - INFO.epos;					      \
+									      \
+   _v1 = 1.0;								      \
+   INFO.bias = find_bias (INFO.epos, INFO.esize, INFO.perm, &_v1);	      \
+   precision (&(INFO));							      \
+   ALIGNMENT(TYPE, INFO);						      \
+   if(!strcmp(INFO.varname, "FLOAT") || !strcmp(INFO.varname, "DOUBLE") ||    \
+      !strcmp(INFO.varname, "LDOUBLE")) {                                     \
+      COMP_ALIGNMENT(TYPE,INFO.comp_align);                                   \
+   }                                                                          \
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	DETECT_M
+ *
+ * Purpose:	This macro takes only miscellaneous structures or pointer
+ *              (pointer, hvl_t, hobj_ref_t, hdset_reg_ref_t).  It
+ *		constructs the names and decides the alignment in structure.
+ *
+ * Return:	void
+ *
+ * Programmer:	Raymond Lu
+ *		slu at ncsa.uiuc.edu
+ *		Dec 9, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#define DETECT_M(TYPE,VAR,INFO) {					      \
+   INFO.name = #VAR;							      \
+   COMP_ALIGNMENT(TYPE, INFO.comp_align);				      \
+}
+
+/* Detect alignment for C structure */
+#define COMP_ALIGNMENT(TYPE,COMP_ALIGN) {			              \
+    struct {                                                                  \
+        char    c;                                                            \
+        TYPE    x;                                                            \
+    } s;                                                                      \
+                                                                              \
+    COMP_ALIGN = (size_t)((char*)(&(s.x)) - (char*)(&s));                     \
+}
+
+#if defined(H5_HAVE_LONGJMP) && defined(H5_HAVE_SIGNAL)
+#define ALIGNMENT(TYPE,INFO) {						      \
+    char		*volatile _buf=NULL;				      \
+    volatile TYPE	_val=1;						      \
+    volatile TYPE	_val2;						      \
+    volatile size_t	_ano=0;						      \
+    void		(*_handler)(int) = signal(SIGBUS, sigbus_handler);    \
+    void		(*_handler2)(int) = signal(SIGSEGV, sigsegv_handler);	\
+									      \
+    _buf = (char*)malloc(sizeof(TYPE)+align_g[NELMTS(align_g)-1]);		      \
+    if (setjmp(jbuf_g)) _ano++;						      \
+    if (_ano<NELMTS(align_g)) {						      \
+	*((TYPE*)(_buf+align_g[_ano])) = _val; /*possible SIGBUS or SEGSEGV*/	\
+	_val2 = *((TYPE*)(_buf+align_g[_ano]));	/*possible SIGBUS or SEGSEGV*/	\
+	/* Cray Check: This section helps detect alignment on Cray's */	      \
+        /*              vector machines (like the SV1) which mask off */      \
+	/*              pointer values when pointing to non-word aligned */   \
+	/*              locations with pointers that are supposed to be */    \
+	/*              word aligned. -QAK */                                 \
+	memset(_buf, 0xff, sizeof(TYPE)+align_g[NELMTS(align_g)-1]);	      \
+	if(INFO.perm[0]) /* Big-Endian */				      \
+	    memcpy(_buf+align_g[_ano]+(INFO.size-((INFO.offset+INFO.precision)/8)),((char *)&_val)+(INFO.size-((INFO.offset+INFO.precision)/8)),(size_t)(INFO.precision/8)); \
+	else /* Little-Endian */					      \
+	    memcpy(_buf+align_g[_ano]+(INFO.offset/8),((char *)&_val)+(INFO.offset/8),(size_t)(INFO.precision/8)); \
+	_val2 = *((TYPE*)(_buf+align_g[_ano]));				      \
+	if(_val!=_val2)							      \
+	    longjmp(jbuf_g, 1);						      \
+	/* End Cray Check */						      \
+	(INFO.align)=align_g[_ano];					      \
+    } else {								      \
+	(INFO.align)=0;							      \
+	fprintf(stderr, "unable to calculate alignment for %s\n", #TYPE);     \
+    }									      \
+    free(_buf);								      \
+    signal(SIGBUS, _handler); /*restore original handler*/		      \
+    signal(SIGSEGV, _handler2); /*restore original handler*/		      \
+}
+#else
+#define ALIGNMENT(TYPE,INFO) (INFO.align)=0
+#endif
+
+#if 0
+#if defined(H5_HAVE_FORK) && defined(H5_HAVE_WAITPID)
+#define ALIGNMENT(TYPE,INFO) {						      \
+    char	*_buf;							      \
+    TYPE	_val=0;							      \
+    size_t	_ano;							      \
+    pid_t	_child;							      \
+    int		_status;						      \
+									      \
+    srand((unsigned int)_val); /*suppress "set but unused" warning*/	      \
+    for (_ano=0; _ano<NELMTS(align_g); _ano++) {			      \
+	fflush(stdout);							      \
+	fflush(stderr);							      \
+	if (0==(_child=fork())) {					      \
+	    _buf = malloc(sizeof(TYPE)+align_g[NELMTS(align_g)-1]);	      \
+	    *((TYPE*)(_buf+align_g[_ano])) = _val;			      \
+	    _val = *((TYPE*)(_buf+align_g[_ano]));			      \
+	    free(_buf);							      \
+	    exit(0);							      \
+	} else if (_child<0) {						      \
+	    perror("fork");						      \
+	    exit(1);							      \
+	}								      \
+	if (waitpid(_child, &_status, 0)<0) {				      \
+	    perror("waitpid");						      \
+	    exit(1);							      \
+	}								      \
+	if (WIFEXITED(_status) && 0==WEXITSTATUS(_status)) {		      \
+	    INFO.align=align_g[_ano];					      \
+	    break;							      \
+	}								      \
+	if (WIFSIGNALED(_status) && SIGBUS==WTERMSIG(_status)) {	      \
+	    continue;							      \
+	}								      \
+	_ano=NELMTS(align_g);						      \
+	break;								      \
+    }									      \
+    if (_ano>=NELMTS(align_g)) {					      \
+	INFO.align=0;							      \
+	fprintf(stderr, "unable to calculate alignment for %s\n", #TYPE);     \
+    }									      \
+}
+#else
+#define ALIGNMENT(TYPE,INFO) (INFO.align)=0
+#endif
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * Function:	sigsegv_handler
+ *
+ * Purpose:	Handler for SIGSEGV. We use signal() instead of sigaction()
+ *		because it's more portable to non-Posix systems. Although
+ *		it's not nearly as nice to work with, it does the job for
+ *		this simple stuff.
+ *
+ * Return:	Returns via longjmp to jbuf_g.
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, March 18, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+sigsegv_handler(int UNUSED signo)
+{
+    signal(SIGSEGV, sigsegv_handler);
+    longjmp(jbuf_g, 1);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	sigbus_handler
+ *
+ * Purpose:	Handler for SIGBUS. We use signal() instead of sigaction()
+ *		because it's more portable to non-Posix systems. Although
+ *		it's not nearly as nice to work with, it does the job for
+ *		this simple stuff.
+ *
+ * Return:	Returns via longjmp to jbuf_g.
+ *
+ * Programmer:	Robb Matzke
+ *		Thursday, March 18, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+sigbus_handler(int UNUSED signo)
+{
+    signal(SIGBUS, sigbus_handler);
+    longjmp(jbuf_g, 1);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	print_results
+ *
+ * Purpose:	Prints information about the detected data types.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 14, 1996
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+print_results(int nd, detected_t *d, int na, malign_t *misc_align)
+{
+    int         byte_order=0;
+    int		i, j;
+
+    /* Include files */
+    printf("\
+#define H5T_PACKAGE /*suppress error about including H5Tpkg.h*/\n\
+\n\
+#include \"H5private.h\"\n\
+#include \"H5Iprivate.h\"\n\
+#include \"H5Eprivate.h\"\n\
+#include \"H5FLprivate.h\"\n\
+#include \"H5Tpkg.h\"\n\
+\n\
+/* Declare external the free lists for H5T_t's and H5T_shared_t's */\n\
+H5FL_EXTERN(H5T_t);\n\
+H5FL_EXTERN(H5T_shared_t);\n\
+\n\
+\n");
+
+    /* The interface initialization function */
+    printf("\n\
+herr_t\n\
+H5TN_init_interface(void)\n\
+{\n\
+    H5T_t	*dt = NULL;\n\
+    herr_t	ret_value = SUCCEED;\n\
+\n\
+    FUNC_ENTER_NOAPI(H5TN_init_interface, FAIL);\n");
+
+    for (i = 0; i < nd; i++) {
+        /* The native endianess of this machine */
+        /* The INFO.perm now contains `-1' for bytes that aren't used and
+         * are always zero.  This happens on the Cray for `short' where
+         * sizeof(short) is 8, but only the low-order 4 bytes are ever used.
+         */
+        for(j=0; j<32; j++) {
+            /*Find the 1st containing valid data*/
+            if(d[i].perm[j]>-1) {
+                byte_order=d[i].perm[j];
+                break;
+            }
+        }
+
+	/* Print a comment to describe this section of definitions. */
+	printf("\n   /*\n");
+	iprint(d+i);
+	printf("    */\n");
+
+	/* The part common to fixed and floating types */
+	printf("\
+    if(NULL == (dt = H5T_alloc()))\n\
+        HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL,\"memory allocation failed\")\n\
+    dt->shared->state = H5T_STATE_IMMUTABLE;\n\
+    dt->shared->type = H5T_%s;\n\
+    dt->shared->size = %d;\n\
+    dt->shared->u.atomic.order = H5T_ORDER_%s;\n\
+    dt->shared->u.atomic.offset = %d;\n\
+    dt->shared->u.atomic.prec = %d;\n\
+    dt->shared->u.atomic.lsb_pad = H5T_PAD_ZERO;\n\
+    dt->shared->u.atomic.msb_pad = H5T_PAD_ZERO;\n",
+	       d[i].msize ? "FLOAT" : "INTEGER",/*class			*/
+	       d[i].size,			/*size			*/
+	       byte_order ? "BE" : "LE",	/*byte order		*/
+	       d[i].offset,			/*offset		*/
+	       d[i].precision);			/*precision		*/
+    assert((d[i].perm[0]>0)==(byte_order>0));   /* Double-check that byte-order doesn't change */
+
+	if (0 == d[i].msize) {
+	    /* The part unique to fixed point types */
+	    printf("\
+    dt->shared->u.atomic.u.i.sign = H5T_SGN_%s;\n",
+		   d[i].sign ? "2" : "NONE");
+	} else {
+	    /* The part unique to floating point types */
+	    printf("\
+    dt->shared->u.atomic.u.f.sign = %d;\n\
+    dt->shared->u.atomic.u.f.epos = %d;\n\
+    dt->shared->u.atomic.u.f.esize = %d;\n\
+    dt->shared->u.atomic.u.f.ebias = 0x%08lx;\n\
+    dt->shared->u.atomic.u.f.mpos = %d;\n\
+    dt->shared->u.atomic.u.f.msize = %d;\n\
+    dt->shared->u.atomic.u.f.norm = H5T_NORM_%s;\n\
+    dt->shared->u.atomic.u.f.pad = H5T_PAD_ZERO;\n",
+		   d[i].sign,	/*sign location */
+		   d[i].epos,	/*exponent loc	*/
+		   d[i].esize,	/*exponent size */
+		   (unsigned long)(d[i].bias),	 /*exponent bias */
+		   d[i].mpos,	/*mantissa loc	*/
+		   d[i].msize,	/*mantissa size */
+		   d[i].imp ? "IMPLIED" : "NONE");	/*normalization */
+	}
+
+	/* Atomize the type */
+	printf("\
+    if ((H5T_NATIVE_%s_g = H5I_register (H5I_DATATYPE, dt))<0)\n\
+        HGOTO_ERROR (H5E_DATATYPE, H5E_CANTINIT, FAIL,\"can't initialize type system (atom registration failure\");\n",
+	       d[i].varname);
+	printf("    H5T_NATIVE_%s_ALIGN_g = %lu;\n",
+	       d[i].varname, (unsigned long)(d[i].align));
+
+        /* Variables for alignment of compound datatype */
+        if(!strcmp(d[i].varname, "SCHAR")  || !strcmp(d[i].varname, "SHORT") ||
+            !strcmp(d[i].varname, "INT")   || !strcmp(d[i].varname, "LONG")  ||
+            !strcmp(d[i].varname, "LLONG") || !strcmp(d[i].varname, "FLOAT") ||
+            !strcmp(d[i].varname, "DOUBLE") || !strcmp(d[i].varname, "LDOUBLE")) {
+            printf("    H5T_NATIVE_%s_COMP_ALIGN_g = %lu;\n",
+                    d[i].varname, (unsigned long)(d[i].comp_align));
+        }
+    }
+
+    printf("\n\
+    /* Set the native order for this machine */\n\
+    H5T_native_order_g = H5T_ORDER_%s;\n",
+	       byte_order ? "BE" : "LE");	/*byte order		*/
+
+    /* Structure alignment for pointers, hvl_t, hobj_ref_t, hdset_reg_ref_t */
+    printf("\n    /* Structure alignment for pointers, hvl_t, hobj_ref_t, hdset_reg_ref_t */\n");
+    for(j=0; j<na; j++)
+        printf("    H5T_%s_COMP_ALIGN_g = %lu;\n", misc_align[j].name, (unsigned long)(misc_align[j].comp_align));
+
+    printf("\
+\n\
+done:\n\
+    if(ret_value<0) {\n\
+        if(dt != NULL) {\n\
+            if(dt->shared != NULL)\n\
+                H5FL_FREE(H5T_shared_t, dt->shared);\n\
+            H5FL_FREE(H5T_t, dt);\n\
+        } /* end if */\n\
+    }\n\
+\n\
+    FUNC_LEAVE_NOAPI(ret_value);\n}\n");
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	iprint
+ *
+ * Purpose:	Prints information about the fields of a floating point
+ *		format.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 13, 1996
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+iprint(detected_t *d)
+{
+    int		i, j, k, pass;
+
+    for (pass=(d->size-1)/4; pass>=0; --pass) {
+	/*
+	 * Print the byte ordering above the bit fields.
+	 */
+	printf("    * ");
+	for (i=MIN(pass*4+3,d->size-1); i>=pass*4; --i) {
+	    printf ("%4d", d->perm[i]);
+	    if (i>pass*4) fputs ("     ", stdout);
+	}
+
+	/*
+	 * Print the bit fields
+	 */
+	printf("\n    * ");
+	for (i=MIN(pass*4+3,d->size-1),
+	     k=MIN(pass*32+31,8*d->size-1);
+	     i>=pass*4; --i) {
+	    for (j=7; j>=0; --j) {
+		if (k==d->sign && d->msize) {
+		    putchar('S');
+		} else if (k>=d->epos && k<d->epos+d->esize) {
+		    putchar('E');
+		} else if (k>=d->mpos && k<d->mpos+d->msize) {
+		    putchar('M');
+		} else if (d->msize) {
+		    putchar('?');   /*unknown floating point bit */
+		} else if (d->sign) {
+		    putchar('I');
+		} else {
+		    putchar('U');
+		}
+		--k;
+	    }
+	    if (i>pass*4) putchar(' ');
+	}
+	putchar('\n');
+    }
+
+    /*
+     * Is there an implicit bit in the mantissa.
+     */
+    if (d->msize) {
+	printf("    * Implicit bit? %s\n", d->imp ? "yes" : "no");
+    }
+
+    /*
+     * Alignment
+     */
+    if (0==d->align) {
+	printf("    * Alignment: NOT CALCULATED\n");
+    } else if (1==d->align) {
+	printf("    * Alignment: none\n");
+    } else {
+	printf("    * Alignment: %lu\n", (unsigned long)(d->align));
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	byte_cmp
+ *
+ * Purpose:	Compares two chunks of memory A and B and returns the
+ *		byte index into those arrays of the first byte that
+ *		differs between A and B.
+ *
+ * Return:	Success:	Index of differing byte.
+ *
+ *		Failure:	-1 if all bytes are the same.
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 12, 1996
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+byte_cmp(int n, void *_a, void *_b)
+{
+    register int	i;
+    unsigned char	*a = (unsigned char *) _a;
+    unsigned char	*b = (unsigned char *) _b;
+
+    for (i = 0; i < n; i++) if (a[i] != b[i]) return i;
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	bit_cmp
+ *
+ * Purpose:	Compares two bit vectors and returns the index for the
+ *		first bit that differs between the two vectors.	 The
+ *		size of the vector is NBYTES.  PERM is a mapping from
+ *		actual order to little endian.
+ *
+ * Return:	Success:	Index of first differing bit.
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 13, 1996
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+bit_cmp(int nbytes, int *perm, void *_a, void *_b)
+{
+    int			i, j;
+    unsigned char	*a = (unsigned char *) _a;
+    unsigned char	*b = (unsigned char *) _b;
+    unsigned char	aa, bb;
+
+    for (i = 0; i < nbytes; i++) {
+	assert(perm[i] < nbytes);
+	if ((aa = a[perm[i]]) != (bb = b[perm[i]])) {
+	    for (j = 0; j < 8; j++, aa >>= 1, bb >>= 1) {
+		if ((aa & 1) != (bb & 1)) return i * 8 + j;
+	    }
+	    assert("INTERNAL ERROR" && 0);
+	    abort();
+	}
+    }
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	fix_order
+ *
+ * Purpose:	Given an array PERM with elements FIRST through LAST
+ *		initialized with zero origin byte numbers, this function
+ *		creates a permutation vector that maps the actual order
+ *		of a floating point number to little-endian.
+ *
+ *		This function assumes that the mantissa byte ordering
+ *		implies the total ordering.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 13, 1996
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+fix_order(int n, int first, int last, int *perm, const char **mesg)
+{
+    int		i;
+
+    if (first + 1 < last) {
+	/*
+	 * We have at least three points to consider.
+	 */
+	if (perm[last] < perm[last - 1] && perm[last - 1] < perm[last - 2]) {
+	    /*
+	     * Little endian.
+	     */
+	    if (mesg) *mesg = "Little-endian";
+	    for (i = 0; i < n; i++) perm[i] = i;
+
+	} else if (perm[last] > perm[last-1] && perm[last-1] > perm[last-2]) {
+	    /*
+	     * Big endian.
+	     */
+	    if (mesg) *mesg = "Big-endian";
+	    for (i = 0; i < n; i++) perm[i] = (n - 1) - i;
+
+	} else {
+	    /*
+	     * Bi-endian machines like VAX.
+	     */
+	    assert(0 == n % 2);
+	    if (mesg) *mesg = "VAX";
+	    for (i = 0; i < n; i += 2) {
+		perm[i] = (n - 2) - i;
+		perm[i + 1] = (n - 1) - i;
+	    }
+	}
+    } else {
+	fprintf(stderr,
+	     "Failed to detect byte order of %d-byte floating point.\n", n);
+	exit(1);
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	imp_bit
+ *
+ * Purpose:	Looks for an implicit bit in the mantissa.  The value
+ *		of _A should be 1.0 and the value of _B should be 0.5.
+ *		Some floating-point formats discard the most significant
+ *		bit of the mantissa after normalizing since it will always
+ *		be a one (except for 0.0).  If this is true for the native
+ *		floating point values stored in _A and _B then the function
+ *		returns non-zero.
+ *
+ *		This function assumes that the exponent occupies higher
+ *		order bits than the mantissa and that the most significant
+ *		bit of the mantissa is next to the least signficant bit
+ *		of the exponent.
+ *
+ *
+ * Return:	Success:	Non-zero if the most significant bit
+ *				of the mantissa is discarded (ie, the
+ *				mantissa has an implicit `one' as the
+ *				most significant bit).	Otherwise,
+ *				returns zero.
+ *
+ *		Failure:	exit(1)
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 13, 1996
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 6 Nov 1996
+ *	Fixed a bug that occurs with non-implicit architectures.
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+imp_bit(int n, int *perm, void *_a, void *_b)
+{
+    unsigned char	*a = (unsigned char *) _a;
+    unsigned char	*b = (unsigned char *) _b;
+    int			changed, major, minor;
+    int			msmb;	/*most significant mantissa bit */
+
+    /*
+     * Look for the least significant bit that has changed between
+     * A and B.	 This is the least significant bit of the exponent.
+     */
+    changed = bit_cmp(n, perm, a, b);
+    assert(changed >= 0);
+
+    /*
+     * The bit to the right (less significant) of the changed bit should
+     * be the most significant bit of the mantissa.  If it is non-zero
+     * then the format does not remove the leading `1' of the mantissa.
+     */
+    msmb = changed - 1;
+    major = msmb / 8;
+    minor = msmb % 8;
+
+    return (a[perm[major]] >> minor) & 0x01 ? 0 : 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	find_bias
+ *
+ * Purpose:	Determines the bias of the exponent.  This function should
+ *		be called with _A having a value of `1'.
+ *
+ * Return:	Success:	The exponent bias.
+ *
+ *		Failure:
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 13, 1996
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 6 Nov 1996
+ *	Fixed a bug with non-implicit architectures returning the
+ *	wrong exponent bias.
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned long
+find_bias(int epos, int esize, int *perm, void *_a)
+{
+    unsigned char	*a = (unsigned char *) _a;
+    unsigned char	mask;
+    unsigned long	b, shift = 0, nbits, bias = 0;
+
+    while (esize > 0) {
+	nbits = MIN(esize, (8 - epos % 8));
+	mask = (1 << nbits) - 1;
+	b = (a[perm[epos / 8]] >> (epos % 8)) & mask;
+	bias |= b << shift;
+
+	shift += nbits;
+	esize -= nbits;
+	epos += nbits;
+    }
+    return bias;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	print_header
+ *
+ * Purpose:	Prints the C file header for the generated file.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Mar 12 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+print_header(void)
+{
+
+    time_t		now = time(NULL);
+    struct tm		*tm = localtime(&now);
+    char		real_name[30];
+    char		host_name[256];
+    int			i;
+    const char		*s;
+#ifdef H5_HAVE_GETPWUID
+    struct passwd	*pwd = NULL;
+#else
+    int			pwd = 1;
+#endif
+    static const char	*month_name[] =
+    {
+	"Jan", "Feb", "Mar", "Apr", "May", "Jun",
+	"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
+    static const char	*purpose = "\
+This machine-generated source code contains\n\
+information about the various integer and\n\
+floating point numeric formats found on this\n\
+architecture.  The parameters below should be\n\
+checked carefully and errors reported to the\n\
+HDF5 maintainer.\n\
+\n\
+Each of the numeric formats listed below are\n\
+printed from most significant bit to least\n\
+significant bit even though the actual bytes\n\
+might be stored in a different order in\n\
+memory.	 The integers above each binary byte\n\
+indicate the relative order of the bytes in\n\
+memory; little-endian machines have\n\
+decreasing numbers while big-endian machines\n\
+have increasing numbers.\n\
+\n\
+The fields of the numbers are printed as\n\
+letters with `S' for the mantissa sign bit,\n\
+`M' for the mantissa magnitude, and `E' for\n\
+the exponent.  The exponent has an associated\n\
+bias which can be subtracted to find the\n\
+true exponent.	The radix point is assumed\n\
+to be before the first `M' bit.	 Any bit\n\
+of a floating-point value not falling into one\n\
+of these categories is printed as a question\n\
+mark.  Bits of integer types are printed as\n\
+`I' for 2's complement and `U' for magnitude.\n\
+\n\
+If the most significant bit of the normalized\n\
+mantissa (always a `1' except for `0.0') is\n\
+not stored then an `implicit=yes' appears\n\
+under the field description.  In thie case,\n\
+the radix point is still assumed to be\n\
+before the first `M' but after the implicit\n\
+bit.\n";
+
+    /*
+     * The real name is the first item from the passwd gecos field.
+     */
+#ifdef H5_HAVE_GETPWUID
+    {
+	size_t n;
+	char *comma;
+	if ((pwd = getpwuid(getuid()))) {
+	    if ((comma = strchr(pwd->pw_gecos, ','))) {
+		n = MIN(sizeof(real_name)-1, (unsigned)(comma-pwd->pw_gecos));
+		strncpy(real_name, pwd->pw_gecos, n);
+		real_name[n] = '\0';
+	    } else {
+		strncpy(real_name, pwd->pw_gecos, sizeof(real_name));
+		real_name[sizeof(real_name) - 1] = '\0';
+	    }
+	} else {
+	    real_name[0] = '\0';
+	}
+    }
+#else
+    real_name[0] = '\0';
+#endif
+
+    /*
+     * The FQDM of this host or the empty string.
+     */
+#ifdef H5_HAVE_GETHOSTNAME
+#ifdef WIN32
+/* windows DLL cannot recognize gethostname, so turn off on windows for the time being!
+    KY, 2003-1-14 */
+    host_name[0] = '\0';
+#else
+    if (gethostname(host_name, sizeof(host_name)) < 0) {
+	host_name[0] = '\0';
+    }
+#endif
+#else
+    host_name[0] = '\0';
+#endif
+
+    /*
+     * The file header: warning, copyright notice, build information.
+     */
+    printf("/* Generated automatically by H5detect -- do not edit */\n\n\n");
+    puts(FileHeader);		/*the copyright notice--see top of this file */
+
+    printf(" *\n * Created:\t\t%s %2d, %4d\n",
+	   month_name[tm->tm_mon], tm->tm_mday, 1900 + tm->tm_year);
+    if (pwd || real_name[0] || host_name[0]) {
+	printf(" *\t\t\t");
+	if (real_name[0]) printf("%s <", real_name);
+#ifdef H5_HAVE_GETPWUID
+	if (pwd) fputs(pwd->pw_name, stdout);
+#endif
+	if (host_name[0]) printf("@%s", host_name);
+	if (real_name[0]) printf(">");
+	putchar('\n');
+    }
+    printf(" *\n * Purpose:\t\t");
+    for (s = purpose; *s; s++) {
+	putchar(*s);
+	if ('\n' == *s && s[1]) printf(" *\t\t\t");
+    }
+
+    printf(" *\n * Modifications:\n *\n");
+    printf(" *\tDO NOT MAKE MODIFICATIONS TO THIS FILE!\n");
+    printf(" *\tIt was generated by code in `H5detect.c'.\n");
+
+    printf(" *\n *");
+    for (i = 0; i < 73; i++) putchar('-');
+    printf("\n */\n\n");
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	detect_C89_integers
+ *
+ * Purpose:	Detect C89 integer types
+ *
+ * Return:	void
+ *
+ * Programmer:	Albert Cheng
+ *		2004/05/20
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+detect_C89_integers(void)
+{
+    DETECT_I(signed char,	  SCHAR,        d_g[nd_g]); nd_g++;
+    DETECT_I(unsigned char,	  UCHAR,        d_g[nd_g]); nd_g++;
+    DETECT_I(short,		  SHORT,        d_g[nd_g]); nd_g++;
+    DETECT_I(unsigned short,	  USHORT,       d_g[nd_g]); nd_g++;
+    DETECT_I(int,		  INT,	        d_g[nd_g]); nd_g++;
+    DETECT_I(unsigned int,	  UINT,	        d_g[nd_g]); nd_g++;
+    DETECT_I(long,		  LONG,	        d_g[nd_g]); nd_g++;
+    DETECT_I(unsigned long,	  ULONG,        d_g[nd_g]); nd_g++;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	detect_C89_floats
+ *
+ * Purpose:	Detect C89 floating point types
+ *
+ * Return:	void
+ *
+ * Programmer:	Albert Cheng
+ *		2004/05/20
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+detect_C89_floats(void)
+{
+    DETECT_F(float,		  FLOAT,        d_g[nd_g]); nd_g++;
+    DETECT_F(double,		  DOUBLE,       d_g[nd_g]); nd_g++;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	detect_C99_integers8
+ *
+ * Purpose:	Detect C99 8 bit integer types
+ *
+ * Return:	void
+ *
+ * Programmer:	Albert Cheng
+ *		2004/05/20
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+detect_C99_integers8(void)
+{
+#if H5_SIZEOF_INT8_T>0
+    DETECT_I(int8_t, 		  INT8,         d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_UINT8_T>0
+    DETECT_I(uint8_t, 		  UINT8,        d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_INT_LEAST8_T>0
+    DETECT_I(int_least8_t, 	  INT_LEAST8,   d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_UINT_LEAST8_T>0
+    DETECT_I(uint_least8_t, 	  UINT_LEAST8,  d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_INT_FAST8_T>0
+    DETECT_I(int_fast8_t, 	  INT_FAST8,    d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_UINT_FAST8_T>0
+    DETECT_I(uint_fast8_t, 	  UINT_FAST8,   d_g[nd_g]); nd_g++;
+#endif
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	detect_C99_integers16
+ *
+ * Purpose:	Detect C99 16 bit integer types
+ *
+ * Return:	void
+ *
+ * Programmer:	Albert Cheng
+ *		2004/05/20
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+detect_C99_integers16(void)
+{
+#if H5_SIZEOF_INT16_T>0
+    DETECT_I(int16_t, 		  INT16,        d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_UINT16_T>0
+    DETECT_I(uint16_t, 		  UINT16,       d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_INT_LEAST16_T>0
+    DETECT_I(int_least16_t, 	  INT_LEAST16,  d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_UINT_LEAST16_T>0
+    DETECT_I(uint_least16_t, 	  UINT_LEAST16, d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_INT_FAST16_T>0
+    DETECT_I(int_fast16_t, 	  INT_FAST16,   d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_UINT_FAST16_T>0
+    DETECT_I(uint_fast16_t, 	  UINT_FAST16,  d_g[nd_g]); nd_g++;
+#endif
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	detect_C99_integers32
+ *
+ * Purpose:	Detect C99 32 bit integer types
+ *
+ * Return:	void
+ *
+ * Programmer:	Albert Cheng
+ *		2004/05/20
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+detect_C99_integers32(void)
+{
+#if H5_SIZEOF_INT32_T>0
+    DETECT_I(int32_t, 		  INT32,        d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_UINT32_T>0
+    DETECT_I(uint32_t, 		  UINT32,       d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_INT_LEAST32_T>0
+    DETECT_I(int_least32_t, 	  INT_LEAST32,  d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_UINT_LEAST32_T>0
+    DETECT_I(uint_least32_t, 	  UINT_LEAST32, d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_INT_FAST32_T>0
+    DETECT_I(int_fast32_t, 	  INT_FAST32,   d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_UINT_FAST32_T>0
+    DETECT_I(uint_fast32_t, 	  UINT_FAST32,  d_g[nd_g]); nd_g++;
+#endif
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	detect_C99_integers64
+ *
+ * Purpose:	Detect C99 64 bit integer types
+ *
+ * Return:	void
+ *
+ * Programmer:	Albert Cheng
+ *		2004/05/20
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+detect_C99_integers64(void)
+{
+#if H5_SIZEOF_INT64_T>0
+    DETECT_I(int64_t, 		  INT64,        d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_UINT64_T>0
+    DETECT_I(uint64_t, 		  UINT64,       d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_INT_LEAST64_T>0
+    DETECT_I(int_least64_t, 	  INT_LEAST64,  d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_UINT_LEAST64_T>0
+    DETECT_I(uint_least64_t, 	  UINT_LEAST64, d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_INT_FAST64_T>0
+    DETECT_I(int_fast64_t, 	  INT_FAST64,   d_g[nd_g]); nd_g++;
+#endif
+#if H5_SIZEOF_UINT_FAST64_T>0
+    DETECT_I(uint_fast64_t, 	  UINT_FAST64,  d_g[nd_g]); nd_g++;
+#endif
+
+#if H5_SIZEOF_LONG_LONG>0
+    DETECT_I(long_long,		  LLONG,        d_g[nd_g]); nd_g++;
+    DETECT_I(unsigned long_long,  ULLONG,       d_g[nd_g]); nd_g++;
+#else
+    /*
+     * This architecture doesn't support an integer type larger than `long'
+     * so we'll just make H5T_NATIVE_LLONG the same as H5T_NATIVE_LONG since
+     * `long long' is probably equivalent to `long' here anyway.
+     */
+    DETECT_I(long,		  LLONG,        d_g[nd_g]); nd_g++;
+    DETECT_I(unsigned long,	  ULLONG,       d_g[nd_g]); nd_g++;
+#endif
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	detect_C99_integers
+ *
+ * Purpose:	Detect C99 integer types
+ *
+ * Return:	void
+ *
+ * Programmer:	Albert Cheng
+ *		2004/05/20
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+detect_C99_integers(void)
+{
+    /* break it down to more subroutines so that each module subroutine */
+    /* is smaller and takes less time to compile with optimization on.  */
+    detect_C99_integers8();
+    detect_C99_integers16();
+    detect_C99_integers32();
+    detect_C99_integers64();
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	detect_C99_floats
+ *
+ * Purpose:	Detect C99 floating point types
+ *
+ * Return:	void
+ *
+ * Programmer:	Albert Cheng
+ *		2004/05/20
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+detect_C99_floats(void)
+{
+#if H5_SIZEOF_DOUBLE == H5_SIZEOF_LONG_DOUBLE
+    /*
+     * If sizeof(double)==sizeof(long double) then assume that `long double'
+     * isn't supported and use `double' instead.  This suppresses warnings on
+     * some systems and `long double' is probably the same as `double' here
+     * anyway.
+     */
+    DETECT_F(double,		  LDOUBLE,      d_g[nd_g]); nd_g++;
+#elif H5_SIZEOF_LONG_DOUBLE !=0
+    DETECT_F(long double,	  LDOUBLE,      d_g[nd_g]); nd_g++;
+#endif
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	detect_alignments
+ *
+ * Purpose:	Detect structure alignments
+ *
+ * Return:	void
+ *
+ * Programmer:	Albert Cheng
+ *		2004/05/20
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+detect_alignments(void)
+{
+    /* Detect structure alignment for pointers, hvl_t, hobj_ref_t, hdset_reg_ref_t */
+    DETECT_M(void *,              POINTER,      m_g[na_g]); na_g++;
+    DETECT_M(hvl_t,               HVL,          m_g[na_g]); na_g++;
+    DETECT_M(hobj_ref_t,          HOBJREF,      m_g[na_g]); na_g++;
+    DETECT_M(hdset_reg_ref_t,     HDSETREGREF,  m_g[na_g]); na_g++;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Main entry point.
+ *
+ * Return:	Success:	exit(0)
+ *
+ *		Failure:	exit(1)
+ *
+ * Programmer:	Robb Matzke
+ *		matzke at llnl.gov
+ *		Jun 12, 1996
+ *
+ * Modifications:
+ *	Albert Cheng, 2004/05/20
+ *	Some compilers, e.g., Intel C v7.0, took a long time to compile
+ *      with optimization when a module routine contains many code lines.
+ *      Divide up all those types detections macros into subroutines, both
+ *      to avoid the compiler optimization error and cleaner codes.
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+
+#if defined(H5_HAVE_SETSYSINFO) && defined(SSI_NVPAIRS)
+#if defined(UAC_NOPRINT) && defined(UAC_SIGBUS)
+    /*
+     * Make sure unaligned access generates SIGBUS and doesn't print warning
+     * messages so that we can detect alignment constraints on the DEC Alpha.
+     */
+    int			nvpairs[2];
+    nvpairs[0] = SSIN_UACPROC;
+    nvpairs[1] = UAC_NOPRINT | UAC_SIGBUS;
+    if (setsysinfo(SSI_NVPAIRS, nvpairs, 1, 0, 0)<0) {
+	fprintf(stderr, "H5detect: unable to turn off UAC handling: %s\n",
+		strerror(errno));
+    }
+#endif
+#endif
+
+    print_header();
+
+    /* C89 integer types */
+    detect_C89_integers();
+
+    /* C99 integer types */
+    detect_C99_integers();
+
+    /* C89 floating point types */
+    detect_C89_floats();
+
+    /* C99 floating point types */
+    detect_C99_floats();
+
+    /* Detect structure alignment */
+    detect_alignments();
+
+    print_results (nd_g, d_g, na_g, m_g);
+
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/src/H5private.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5private.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5private.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1351 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:	Robb Matzke <matzke at llnl.gov>
+ *		Friday, October 30, 1998
+ *
+ * Purpose:	This file is included by all HDF5 library source files to
+ *		define common things which are not defined in the HDF5 API.
+ *		The configuration constants like H5_HAVE_UNISTD_H etc. are
+ *		defined in H5config.h which is included by H5public.h.
+ *
+ */
+
+#ifndef _H5private_H
+#define _H5private_H
+
+#include "H5public.h"		/* Include Public Definitions		*/
+
+/* include the pthread header */
+#ifdef H5_HAVE_THREADSAFE
+#include <pthread.h>
+#endif
+
+/*
+ * Include ANSI-C header files.
+ */
+#ifdef H5_STDC_HEADERS
+#   include <assert.h>
+#   include <ctype.h>
+#   include <errno.h>
+#   include <fcntl.h>
+#   include <float.h>
+#   include <limits.h>
+#   include <math.h>
+#   include <signal.h>
+#   include <stdarg.h>
+#   include <stdio.h>
+#   include <stdlib.h>
+#   include <string.h>
+#endif
+
+/*
+ * If _POSIX_VERSION is defined in unistd.h then this system is Posix.1
+ * compliant. Otherwise all bets are off.
+ */
+#ifdef H5_HAVE_UNISTD_H
+#   include <sys/types.h>
+#   include <unistd.h>
+#endif
+#ifdef _POSIX_VERSION
+#   include <sys/wait.h>
+#   include <pwd.h>
+#endif
+
+/*
+ * C9x integer types
+ */
+#ifndef __cplusplus
+#ifdef H5_HAVE_STDINT_H
+#   include <stdint.h>
+#endif
+#endif
+
+/*
+ * The `struct stat' data type for stat() and fstat(). This is a Posix file
+ * but often apears on non-Posix systems also.	The `struct stat' is required
+ * for hdf5 to compile, although only a few fields are actually used.
+ */
+#ifdef H5_HAVE_SYS_STAT_H
+#   include <sys/stat.h>
+#endif
+
+/*
+ * If a program may include both `time.h' and `sys/time.h' then
+ * TIME_WITH_SYS_TIME is defined (see AC_HEADER_TIME in configure.in).
+ * On some older systems, `sys/time.h' includes `time.h' but `time.h' is not
+ * protected against multiple inclusion, so programs should not explicitly
+ * include both files. This macro is useful in programs that use, for example,
+ * `struct timeval' or `struct timezone' as well as `struct tm'.  It is best
+ * used in conjunction with `HAVE_SYS_TIME_H', whose existence is checked
+ * by `AC_CHECK_HEADERS(sys/time.h)' in configure.in.
+ */
+#if defined(H5_TIME_WITH_SYS_TIME)
+#   include <sys/time.h>
+#   include <time.h>
+#elif defined(H5_HAVE_SYS_TIME_H)
+#   include <sys/time.h>
+#else
+#   include <time.h>
+#endif
+
+/*
+ * Longjumps are used to detect alignment constrants
+ */
+#ifdef H5_HAVE_SETJMP_H
+#   include <setjmp.h>
+#endif
+
+/*
+ * Resource usage is not Posix.1 but HDF5 uses it anyway for some performance
+ * and debugging code if available.
+ */
+#ifdef H5_HAVE_SYS_RESOURCE_H
+#   include <sys/resource.h>
+#endif
+
+/*
+ * Unix ioctls.	 These are used by h5ls (and perhaps others) to determine a
+ * resonable output width.
+ */
+#ifdef H5_HAVE_SYS_IOCTL_H
+#   include <sys/ioctl.h>
+#endif
+
+/*
+ * System information. These are needed on the DEC Alpha to turn off fixing
+ * of unaligned accesses by the operating system during detection of
+ * alignment constraints in H5detect.c:main().
+ */
+#ifdef H5_HAVE_SYS_SYSINFO_H
+#   include <sys/sysinfo.h>
+#endif
+#ifdef H5_HAVE_SYS_PROC_H
+#   include <sys/proc.h>
+#endif
+#ifdef H5_HAVE_IO_H
+#   include <io.h>
+#endif
+
+
+#ifdef WIN32
+
+#define VC_EXTRALEAN		/*Exclude rarely-used stuff from Windows headers */
+#include <windows.h>
+
+#endif /*WIN32*/
+
+/* H5_inline */
+#ifndef H5_inline
+#define H5_inline
+#endif /* H5_inline */
+
+
+#ifndef F_OK
+#   define F_OK	00
+#   define W_OK 02
+#   define R_OK 04
+#endif
+
+/*
+ * MPE Instrumentation support
+ * Do not #if the following header file because it contains
+ * the needed null definitions for the H5-MPE macros when MPE
+ * support is not configured.
+ *
+ */
+#include "H5MPprivate.h"
+
+/*
+ * dmalloc (debugging malloc) support
+ */
+#ifdef H5_HAVE_DMALLOC_H
+#include "dmalloc.h"
+#endif /* H5_HAVE_DMALLOC_H */
+
+/*
+ * NT doesn't define SIGBUS, but since NT only runs on processors
+ * that do not have alignment constraints a SIGBUS would never be
+ * raised, so we just replace it with SIGILL (which also should
+ * never be raised by the hdf5 library).
+ */
+#ifndef SIGBUS
+#	define SIGBUS SIGILL
+#endif
+
+/*
+ * Does the compiler support the __attribute__(()) syntax?  This is how gcc
+ * suppresses warnings about unused function arguments.	 It's no big deal if
+ * we don't.
+ */
+#ifdef __cplusplus
+#   define __attribute__(X)	/*void*/
+#   define UNUSED		/*void*/
+#else /* __cplusplus */
+#ifdef H5_HAVE_ATTRIBUTE
+#   define UNUSED		__attribute__((unused))
+#else
+#   define __attribute__(X)	/*void*/
+#   define UNUSED		/*void*/
+#endif
+#endif /* __cplusplus */
+
+/*
+ * Does the compiler expand __FUNCTION__ to be the name of the function
+ * currently being defined?  If not then define it to be some constant
+ * string.
+ */
+#ifndef H5_HAVE_FUNCTION
+#   define __FUNCTION__	 "NoFunctionName"
+#endif
+
+/* Version #'s of the major components of the file format */
+#define HDF5_SUPERBLOCK_VERSION_DEF	0	/* The default super block format	  */
+#define HDF5_SUPERBLOCK_VERSION_MAX	1	/* The maximum super block format	  */
+#define HDF5_FREESPACE_VERSION	0	/* of the Free-Space Info	  */
+#define HDF5_OBJECTDIR_VERSION	0	/* of the Object Directory format */
+#define HDF5_SHAREDHEADER_VERSION 0	/* of the Shared-Header Info	  */
+#define HDF5_DRIVERINFO_VERSION	0	/* of the Driver Information Block*/
+
+/* B-tree internal 'K' values */
+#define HDF5_BTREE_SNODE_IK_DEF         16
+#define HDF5_BTREE_ISTORE_IK_DEF        32      /* Note! this value is assumed
+                                                    to be 32 for older versions
+                                                    of the superblock (<1) and
+                                                    if it is changed, the code
+                                                    must compensate. -QAK
+                                                 */
+
+/*
+ * Status return values for the `herr_t' type.
+ * Since some unix/c routines use 0 and -1 (or more precisely, non-negative
+ * vs. negative) as their return code, and some assumption had been made in
+ * the code about that, it is important to keep these constants the same
+ * values.  When checking the success or failure of an integer-valued
+ * function, remember to compare against zero and not one of these two
+ * values.
+ */
+#define SUCCEED		0
+#define FAIL		(-1)
+#define UFAIL		(unsigned)(-1)
+
+/* number of members in an array */
+#ifndef NELMTS
+#    define NELMTS(X)		(sizeof(X)/sizeof(X[0]))
+#endif
+
+/* minimum of two, three, or four values */
+#undef MIN
+#define MIN(a,b)		(((a)<(b)) ? (a) : (b))
+#define MIN2(a,b)		MIN(a,b)
+#define MIN3(a,b,c)		MIN(a,MIN(b,c))
+#define MIN4(a,b,c,d)		MIN(MIN(a,b),MIN(c,d))
+
+/* maximum of two, three, or four values */
+#undef MAX
+#define MAX(a,b)		(((a)>(b)) ? (a) : (b))
+#define MAX2(a,b)		MAX(a,b)
+#define MAX3(a,b,c)		MAX(a,MAX(b,c))
+#define MAX4(a,b,c,d)		MAX(MAX(a,b),MAX(c,d))
+
+/* limit the middle value to be within a range (inclusive) */
+#define RANGE(LO,X,HI)		MAX(LO,MIN(X,HI))
+
+/* absolute value */
+#ifndef ABS
+#   define ABS(a)		(((a)>=0) ? (a) : -(a))
+#endif
+
+/* sign of argument */
+#ifndef SIGN
+#   define SIGN(a)		((a)>0 ? 1 : (a)<0 ? -1 : 0)
+#endif
+
+/*
+ * HDF Boolean type.
+ */
+#ifndef FALSE
+#   define FALSE 0
+#endif
+#ifndef TRUE
+#   define TRUE 1
+#endif
+
+/*
+ * Although `long long' is part of the revised ANSI-C some compilers don't
+ * support it yet.  We define `long_long' as the longest integral integer type
+ * supported by the compiler, usually 64 bits.	It must be legal to qualify
+ * `long_long' with `unsigned'.
+ */
+#if H5_SIZEOF_LONG_LONG>0
+#   define long_long	long long
+#elif H5_SIZEOF___INT64>0
+#   define long_long	__int64	/*Win32*/
+#   undef H5_SIZEOF_LONG_LONG
+#   define H5_SIZEOF_LONG_LONG H5_SIZEOF___INT64
+#else
+#   define long_long	long int
+#   undef H5_SIZEOF_LONG_LONG
+#   define H5_SIZEOF_LONG_LONG H5_SIZEOF_LONG
+#endif
+
+/*
+ * Numeric data types.	Some of these might be defined in Posix.1g, otherwise
+ * we define them with the closest available type which is at least as large
+ * as the number of bits indicated in the type name.  The `int8' types *must*
+ * be exactly one byte wide because we use it for pointer calculations to
+ * void* memory.
+ */
+#if H5_SIZEOF_INT8_T==0
+    typedef signed char int8_t;
+#   undef H5_SIZEOF_INT8_T
+#   define H5_SIZEOF_INT8_T H5_SIZEOF_CHAR
+#elif H5_SIZEOF_INT8_T==1
+#else
+#   error "the int8_t type must be 1 byte wide"
+#endif
+
+#if H5_SIZEOF_UINT8_T==0
+    typedef unsigned char uint8_t;
+#   undef H5_SIZEOF_UINT8_T
+#   define H5_SIZEOF_UINT8_T H5_SIZEOF_CHAR
+#elif H5_SIZEOF_UINT8_T==1
+#else
+#   error "the uint8_t type must be 1 byte wide"
+#endif
+
+#if H5_SIZEOF_INT16_T>=2
+#elif H5_SIZEOF_SHORT>=2
+    typedef short int16_t;
+#   undef H5_SIZEOF_INT16_T
+#   define H5_SIZEOF_INT16_T H5_SIZEOF_SHORT
+#elif H5_SIZEOF_INT>=2
+    typedef int int16_t;
+#   undef H5_SIZEOF_INT16_T
+#   define H5_SIZEOF_INT16_T H5_SIZEOF_INT
+#else
+#   error "nothing appropriate for int16_t"
+#endif
+
+#if H5_SIZEOF_UINT16_T>=2
+#elif H5_SIZEOF_SHORT>=2
+    typedef unsigned short uint16_t;
+#   undef H5_SIZEOF_UINT16_T
+#   define H5_SIZEOF_UINT16_T H5_SIZEOF_SHORT
+#elif H5_SIZEOF_INT>=2
+    typedef unsigned uint16_t;
+#   undef H5_SIZEOF_UINT16_T
+#   define H5_SIZEOF_UINT16_T H5_SIZEOF_INT
+#else
+#   error "nothing appropriate for uint16_t"
+#endif
+
+#if H5_SIZEOF_INT32_T>=4
+#elif H5_SIZEOF_SHORT>=4
+    typedef short int32_t;
+#   undef H5_SIZEOF_INT32_T
+#   define H5_SIZEOF_INT32_T H5_SIZEOF_SHORT
+#elif H5_SIZEOF_INT>=4
+    typedef int int32_t;
+#   undef H5_SIZEOF_INT32_T
+#   define H5_SIZEOF_INT32_T H5_SIZEOF_INT
+#elif H5_SIZEOF_LONG>=4
+    typedef long int32_t;
+#   undef H5_SIZEOF_INT32_T
+#   define H5_SIZEOF_INT32_T H5_SIZEOF_LONG
+#else
+#   error "nothing appropriate for int32_t"
+#endif
+
+#if H5_SIZEOF_UINT32_T>=4
+#elif H5_SIZEOF_SHORT>=4
+    typedef short uint32_t;
+#   undef H5_SIZEOF_UINT32_T
+#   define H5_SIZEOF_UINT32_T H5_SIZEOF_SHORT
+#elif H5_SIZEOF_INT>=4
+    typedef unsigned int uint32_t;
+#   undef H5_SIZEOF_UINT32_T
+#   define H5_SIZEOF_UINT32_T H5_SIZEOF_INT
+#elif H5_SIZEOF_LONG>=4
+    typedef unsigned long uint32_t;
+#   undef H5_SIZEOF_UINT32_T
+#   define H5_SIZEOF_UINT32_T H5_SIZEOF_LONG
+#else
+#   error "nothing appropriate for uint32_t"
+#endif
+
+#if H5_SIZEOF_INT64_T>=8
+#elif H5_SIZEOF_INT>=8
+    typedef int int64_t;
+#   undef H5_SIZEOF_INT64_T
+#   define H5_SIZEOF_INT64_T H5_SIZEOF_INT
+#elif H5_SIZEOF_LONG>=8
+    typedef long int64_t;
+#   undef H5_SIZEOF_INT64_T
+#   define H5_SIZEOF_INT64_T H5_SIZEOF_LONG
+#elif H5_SIZEOF_LONG_LONG>=8
+    typedef long_long int64_t;
+#   undef H5_SIZEOF_INT64_T
+#   define H5_SIZEOF_INT64_T H5_SIZEOF_LONG_LONG
+#else
+#   error "nothing appropriate for int64_t"
+#endif
+
+#if H5_SIZEOF_UINT64_T>=8
+#elif H5_SIZEOF_INT>=8
+    typedef unsigned uint64_t;
+#   undef H5_SIZEOF_UINT64_T
+#   define H5_SIZEOF_UINT64_T H5_SIZEOF_INT
+#elif H5_SIZEOF_LONG>=8
+    typedef unsigned long uint64_t;
+#   undef H5_SIZEOF_UINT64_T
+#   define H5_SIZEOF_UINT64_T H5_SIZEOF_LONG
+#elif H5_SIZEOF_LONG_LONG>=8
+    typedef unsigned long_long uint64_t;
+#   undef H5_SIZEOF_UINT64_T
+#   define H5_SIZEOF_UINT64_T H5_SIZEOF_LONG_LONG
+#else
+#   error "nothing appropriate for uint64_t"
+#endif
+
+/*
+ * Maximum and minimum values.	These should be defined in <limits.h> for the
+ * most part.
+ */
+#ifndef LLONG_MAX
+#   define LLONG_MAX	((long_long)(((unsigned long_long)1		      \
+				      <<(8*sizeof(long_long)-1))-1))
+#   define LLONG_MIN    ((long_long)(-LLONG_MAX)-1)
+#   define ULLONG_MAX	((unsigned long_long)((long_long)(-1)))
+#endif
+#ifndef SIZET_MAX
+#   define SIZET_MAX	((size_t)(ssize_t)(-1))
+#   define SSIZET_MAX	((ssize_t)(((size_t)1<<(8*sizeof(ssize_t)-1))-1))
+#endif
+#ifdef H5_HAVE_LARGE_HSIZET
+#define	HSIZET_MAX	((hsize_t)ULLONG_MAX)
+#define	HSSIZET_MAX	((hssize_t)LLONG_MAX)
+#else /* H5_HAVE_LARGE_HSIZET */
+#define HSIZET_MAX	((hsize_t)SIZET_MAX)
+#define HSSIZET_MAX	((hssize_t)SSIZET_MAX)
+#endif /* H5_HAVE_LARGE_HSIZET */
+#define HSSIZET_MIN	(~(HSSIZET_MAX))
+
+/*
+ * A macro to portably increment enumerated types.
+ */
+#ifndef H5_INC_ENUM
+#  define H5_INC_ENUM(TYPE,VAR) (VAR)=((TYPE)((VAR)+1))
+#endif
+
+/*
+ * A macro to portably decrement enumerated types.
+ */
+#ifndef H5_DEC_ENUM
+#  define H5_DEC_ENUM(TYPE,VAR) (VAR)=((TYPE)((VAR)-1))
+#endif
+
+/*
+ * A macro for detecting over/under-flow when casting between types
+ */
+#ifndef NDEBUG
+#define H5_CHECK_OVERFLOW(var,vartype,casttype) \
+{                                               \
+    casttype _tmp_overflow=(casttype)(var);     \
+    assert((var)==(vartype)_tmp_overflow);      \
+}
+#else /* NDEBUG */
+#define H5_CHECK_OVERFLOW(var,vartype,casttype)
+#endif /* NDEBUG */
+
+/*
+ * A macro for detecting over/under-flow when assigning between types
+ */
+#ifndef NDEBUG
+#define H5_ASSIGN_OVERFLOW(var,expr,exprtype,vartype)   \
+{                                                       \
+    exprtype _tmp_overflow=(exprtype)(expr);              \
+    vartype _tmp_overflow2=(vartype)(_tmp_overflow);  \
+    assert((vartype)_tmp_overflow==_tmp_overflow2);    \
+    (var)=_tmp_overflow2;                               \
+}
+#else /* NDEBUG */
+#define H5_ASSIGN_OVERFLOW(var,expr,exprtype,vartype)   \
+    (var)=(vartype)(expr);
+#endif /* NDEBUG */
+
+/*
+ * Data types and functions for timing certain parts of the library.
+ */
+typedef struct {
+    double	utime;		/*user time			*/
+    double	stime;		/*system time			*/
+    double	etime;		/*elapsed wall-clock time	*/
+} H5_timer_t;
+
+H5_DLL void H5_timer_reset (H5_timer_t *timer);
+H5_DLL void H5_timer_begin (H5_timer_t *timer);
+H5_DLL void H5_timer_end (H5_timer_t *sum/*in,out*/,
+			   H5_timer_t *timer/*in,out*/);
+H5_DLL void H5_bandwidth(char *buf/*out*/, double nbytes, double nseconds);
+
+/*
+ * Redefine all the POSIX functions.  We should never see a POSIX
+ * function (or any other non-HDF5 function) in the source!
+ */
+#define HDabort()		abort()
+#define HDabs(X)		abs(X)
+#define HDaccess(F,M)		access(F, M)
+#define HDacos(X)		acos(X)
+#ifdef H5_HAVE_ALARM
+#define HDalarm(N)              alarm(N)
+#else /* H5_HAVE_ALARM */
+#define HDalarm(N)              (0)
+#endif /* H5_HAVE_ALARM */
+#define HDasctime(T)		asctime(T)
+#define HDasin(X)		asin(X)
+#define HDassert(X)		assert(X)
+#define HDatan(X)		atan(X)
+#define HDatan2(X,Y)		atan2(X,Y)
+#define HDatexit(F)		atexit(F)
+#define HDatof(S)		atof(S)
+#define HDatoi(S)		atoi(S)
+#define HDatol(S)		atol(S)
+#define HDBSDgettimeofday(S,P)	BSDgettimeofday(S,P)
+#define HDbsearch(K,B,N,Z,F)	bsearch(K,B,N,Z,F)
+#define HDcalloc(N,Z)		calloc(N,Z)
+#define HDceil(X)		ceil(X)
+#define HDcfgetispeed(T)	cfgetispeed(T)
+#define HDcfgetospeed(T)	cfgetospeed(T)
+#define HDcfsetispeed(T,S)	cfsetispeed(T,S)
+#define HDcfsetospeed(T,S)	cfsetospeed(T,S)
+#define HDchdir(S)		chdir(S)
+#define HDchmod(S,M)		chmod(S,M)
+#define HDchown(S,O,G)		chown(S,O,G)
+#define HDclearerr(F)		clearerr(F)
+#define HDclock()		clock()
+#define HDclose(F)		close(F)
+#define HDclosedir(D)		closedir(D)
+#define HDcos(X)		cos(X)
+#define HDcosh(X)		cosh(X)
+#define HDcreat(S,M)		creat(S,M)
+#define HDctermid(S)		ctermid(S)
+#define HDctime(T)		ctime(T)
+#define HDcuserid(S)		cuserid(S)
+#ifdef H5_HAVE_DIFFTIME
+#define HDdifftime(X,Y)		difftime(X,Y)
+#else
+#define HDdifftime(X,Y)		((double)(X)-(double)(Y))
+#endif
+#define HDdiv(X,Y)		div(X,Y)
+#define HDdup(F)		dup(F)
+#define HDdup2(F,I)		dup2(F,I)
+/* execl() variable arguments */
+/* execle() variable arguments */
+/* execlp() variable arguments */
+#define HDexecv(S,AV)		execv(S,AV)
+#define HDexecve(S,AV,E)	execve(S,AV,E)
+#define HDexecvp(S,AV)		execvp(S,AV)
+#define HDexit(N)		exit(N)
+#if defined __MWERKS__
+#include <abort_exit.h>
+#define HD_exit(N)		__exit(N)
+#else /* __MWERKS __ */
+#define HD_exit(N)		_exit(N)
+#endif /* __MWERKS __ */
+#define HDexp(X)		exp(X)
+#define HDfabs(X)		fabs(X)
+/* use ABS() because fabsf() fabsl() are not common yet. */
+#define HDfabsf(X)		ABS(X)
+#define HDfabsl(X)		ABS(X)
+#define HDfclose(F)		fclose(F)
+/* fcntl() variable arguments */
+#define HDfdopen(N,S)		fdopen(N,S)
+#define HDfeof(F)		feof(F)
+#define HDferror(F)		ferror(F)
+#define HDfflush(F)		fflush(F)
+#define HDfgetc(F)		fgetc(F)
+#define HDfgetpos(F,P)		fgetpos(F,P)
+#define HDfgets(S,N,F)		fgets(S,N,F)
+#ifdef WIN32
+#define HDfileno(F)		_fileno(F)
+#else /* WIN32 */
+#define HDfileno(F)		fileno(F)
+#endif /* WIN32 */
+#define HDfloor(X)		floor(X)
+#define HDfmod(X,Y)		fmod(X,Y)
+#define HDfopen(S,M)		fopen(S,M)
+#define HDfork()		fork()
+#define HDfpathconf(F,N)	fpathconf(F,N)
+H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
+#define HDfputc(C,F)		fputc(C,F)
+#define HDfputs(S,F)		fputs(S,F)
+#define HDfread(M,Z,N,F)	fread(M,Z,N,F)
+#define HDfree(M)		free(M)
+#define HDfreopen(S,M,F)	freopen(S,M,F)
+#define HDfrexp(X,N)		frexp(X,N)
+/* Check for Cray-specific 'frexpf()' and 'frexpl()' routines */
+#ifdef H5_HAVE_FREXPF
+#define HDfrexpf(X,N)		frexpf(X,N)
+#else /* H5_HAVE_FREXPF */
+#define HDfrexpf(X,N)		frexp(X,N)
+#endif /* H5_HAVE_FREXPF */
+#ifdef H5_HAVE_FREXPL
+#define HDfrexpl(X,N)		frexpl(X,N)
+#else /* H5_HAVE_FREXPL */
+#define HDfrexpl(X,N)		frexp(X,N)
+#endif /* H5_HAVE_FREXPL */
+/* fscanf() variable arguments */
+#define HDfseek(F,O,W)		fseek(F,O,W)
+#define HDfsetpos(F,P)		fsetpos(F,P)
+/* definitions related to the file stat utilities */
+#ifdef WIN32
+     #ifdef __MWERKS__
+     #define HDfstat(F,B)               fstat(F,B)
+     typedef struct stat		h5_stat_t;
+     typedef off_t                      h5_stat_size_t;
+     #else /*MSVC*/
+     #define HDfstat(F,B)		_fstati64(F,B)
+     typedef struct _stati64		h5_stat_t;
+     typedef __int64                    h5_stat_size_t;
+     #endif
+#else
+#define HDfstat(F,B)            fstat(F,B)
+typedef struct stat		h5_stat_t;
+typedef off_t                   h5_stat_size_t;
+#endif
+
+#define HDftell(F)		ftell(F)
+#define HDftruncate(F,L)        ftruncate(F,L)
+#define HDfwrite(M,Z,N,F)	fwrite(M,Z,N,F)
+#define HDgetc(F)		getc(F)
+#define HDgetchar()		getchar()
+#define HDgetcwd(S,Z)		getcwd(S,Z)
+#define HDgetegid()		getegid()
+#define HDgetenv(S)		getenv(S)
+#define HDgeteuid()		geteuid()
+#define HDgetgid()		getgid()
+#define HDgetgrgid(G)		getgrgid(G)
+#define HDgetgrnam(S)		getgrnam(S)
+#define HDgetgroups(Z,G)	getgroups(Z,G)
+#define HDgetlogin()		getlogin()
+#define HDgetpgrp()		getpgrp()
+#define HDgetpid()		getpid()
+#define HDgetppid()		getppid()
+#define HDgetpwnam(S)		getpwnam(S)
+#define HDgetpwuid(U)		getpwuid(U)
+#define HDgetrusage(X,S)	getrusage(X,S)
+#define HDgets(S)		gets(S)
+#define HDgettimeofday(S,P)	gettimeofday(S,P)
+#define HDgetuid()		getuid()
+#define HDgmtime(T)		gmtime(T)
+#define HDisalnum(C)		isalnum((int)(C)) /*cast for solaris warning*/
+#define HDisalpha(C)		isalpha((int)(C)) /*cast for solaris warning*/
+#define HDisatty(F)		isatty(F)
+#define HDiscntrl(C)		iscntrl((int)(C)) /*cast for solaris warning*/
+#define HDisdigit(C)		isdigit((int)(C)) /*cast for solaris warning*/
+#define HDisgraph(C)		isgraph((int)(C)) /*cast for solaris warning*/
+#define HDislower(C)		islower((int)(C)) /*cast for solaris warning*/
+#define HDisprint(C)		isprint((int)(C)) /*cast for solaris warning*/
+#define HDispunct(C)		ispunct((int)(C)) /*cast for solaris warning*/
+#define HDisspace(C)		isspace((int)(C)) /*cast for solaris warning*/
+#define HDisupper(C)		isupper((int)(C)) /*cast for solaris warning*/
+#define HDisxdigit(C)		isxdigit((int)(C)) /*cast for solaris warning*/
+#define HDkill(P,S)		kill(P,S)
+#define HDlabs(X)		labs(X)
+#define HDldexp(X,N)		ldexp(X,N)
+#define HDldiv(X,Y)		ldiv(X,Y)
+#define HDlink(OLD,NEW)		link(OLD,NEW)
+#define HDlocaleconv()		localeconv()
+#define HDlocaltime(T)		localtime(T)
+#define HDlog(X)		log(X)
+#define HDlog10(X)		log10(X)
+#define HDlongjmp(J,N)		longjmp(J,N)
+#ifdef WIN32
+     #ifdef __MWERKS__
+        #define HDlseek(F,O,W)  lseek(F,O,W)
+     #else /*MSVS */
+        #define HDlseek(F,O,W)  _lseeki64(F,O,W)
+     #endif
+#else
+#define HDlseek(F,O,W)		lseek(F,O,W)
+#endif
+#define HDmalloc(Z)		malloc(Z)
+#define HDmblen(S,N)		mblen(S,N)
+#define HDmbstowcs(P,S,Z)	mbstowcs(P,S,Z)
+#define HDmbtowc(P,S,Z)		mbtowc(P,S,Z)
+#define HDmemchr(S,C,Z)		memchr(S,C,Z)
+#define HDmemcmp(X,Y,Z)		memcmp(X,Y,Z)
+/*
+ * The (char*) casts are required for the DEC when optimizations are turned
+ * on and the source and/or destination are not aligned.
+ */
+#define HDmemcpy(X,Y,Z)		memcpy((char*)(X),(const char*)(Y),Z)
+#define HDmemmove(X,Y,Z)	memmove((char*)(X),(const char*)(Y),Z)
+/*
+ * The (void*) cast just avoids a compiler warning in WIN32
+ */
+#ifdef WIN32
+#define HDmemset(X,C,Z)		memset((void*)(X),C,Z)
+#else /* WIN32 */
+#define HDmemset(X,C,Z)		memset(X,C,Z)
+#endif /* WIN32 */
+#ifdef WIN32
+#define HDmkdir(S,M)		_mkdir(S)
+#else /* WIN32 */
+#define HDmkdir(S,M)		mkdir(S,M)
+#endif /* WIN32 */
+#define HDmkfifo(S,M)		mkfifo(S,M)
+#define HDmktime(T)		mktime(T)
+#define HDmodf(X,Y)		modf(X,Y)
+#ifdef _O_BINARY
+#define HDopen(S,F,M)		open(S,F|_O_BINARY,M)
+#else
+#define HDopen(S,F,M)		open(S,F,M)
+#endif
+#define HDopendir(S)		opendir(S)
+#define HDpathconf(S,N)		pathconf(S,N)
+#define HDpause()		pause()
+#define HDperror(S)		perror(S)
+#define HDpipe(F)		pipe(F)
+#define HDpow(X,Y)		pow(X,Y)
+/* printf() variable arguments */
+#define HDputc(C,F)		putc(C,F)
+#define HDputchar(C)		putchar(C)
+#define HDputs(S)		puts(S)
+#define HDqsort(M,N,Z,F)	qsort(M,N,Z,F)
+#define HDraise(N)		raise(N)
+#define HDrand()		rand()
+#ifdef  WIN32
+#define HDrandom()		rand()
+#else
+#define HDrandom()              random()
+#endif
+#define HDread(F,M,Z)		read(F,M,Z)
+#define HDreaddir(D)		readdir(D)
+#define HDrealloc(M,Z)		realloc(M,Z)
+#define HDremove(S)		remove(S)
+#define HDrename(OLD,NEW)	rename(OLD,NEW)
+#define HDrewind(F)		rewind(F)
+#define HDrewinddir(D)		rewinddir(D)
+#define HDrmdir(S)		rmdir(S)
+/* scanf() variable arguments */
+#define HDsetbuf(F,S)		setbuf(F,S)
+#define HDsetgid(G)		setgid(G)
+#define HDsetjmp(J)		setjmp(J)
+#define HDsetlocale(N,S)	setlocale(N,S)
+#define HDsetpgid(P,PG)		setpgid(P,PG)
+#define HDsetsid()		setsid()
+#define HDsetuid(U)		setuid(U)
+#define HDsetvbuf(F,S,M,Z)	setvbuf(F,S,M,Z)
+#define HDsigaction(N,A)	sigaction(N,A)
+#define HDsigaddset(S,N)	sigaddset(S,N)
+#define HDsigdelset(S,N)	sigdelset(S,N)
+#define HDsigemptyset(S)	sigemptyset(S)
+#define HDsigfillset(S)		sigfillset(S)
+#define HDsigismember(S,N)	sigismember(S,N)
+#define HDsiglongjmp(J,N)	siglongjmp(J,N)
+#define HDsignal(N,F)		signal(N,F)
+#define HDsigpending(S)		sigpending(S)
+#define HDsigprocmask(H,S,O)	sigprocmask(H,S,O)
+#define HDsigsetjmp(J,N)	sigsetjmp(J,N)
+#define HDsigsuspend(S)		sigsuspend(S)
+#define HDsin(X)		sin(X)
+#define HDsinh(X)		sinh(X)
+#define HDsleep(N)		sleep(N)
+#ifdef H5_HAVE_SNPRINTF
+#   define HDsnprintf		snprintf /*varargs*/
+#endif
+/* sprintf() variable arguments */
+#define HDsqrt(X)		sqrt(X)
+#define HDsrand(N)		srand(N)
+#ifdef WIN32
+#define HDsrandom(N)            srand(N)
+#else
+#define HDsrandom(N)		srandom(N)
+#endif
+/* sscanf() variable arguments */
+
+
+#ifdef WIN32
+     #ifdef __MWERKS__
+     #define HDstat(S,B)   stat(S,B)
+     #else /*MSVC*/
+     #define HDstat(S,B)		_stati64(S,B)
+     #endif
+#else
+#define HDstat(S,B)  stat(S,B)
+#endif
+
+#define HDstrcat(X,Y)		strcat(X,Y)
+#define HDstrchr(S,C)		strchr(S,C)
+#define HDstrcmp(X,Y)		strcmp(X,Y)
+#define HDstrcoll(X,Y)		strcoll(X,Y)
+#define HDstrcpy(X,Y)		strcpy(X,Y)
+#define HDstrcspn(X,Y)		strcspn(X,Y)
+#define HDstrerror(N)		strerror(N)
+#define HDstrftime(S,Z,F,T)	strftime(S,Z,F,T)
+#define HDstrlen(S)		strlen(S)
+#define HDstrncat(X,Y,Z)	strncat(X,Y,Z)
+#define HDstrncmp(X,Y,Z)	strncmp(X,Y,Z)
+#define HDstrncpy(X,Y,Z)	strncpy(X,Y,Z)
+#define HDstrpbrk(X,Y)		strpbrk(X,Y)
+#define HDstrrchr(S,C)		strrchr(S,C)
+#define HDstrspn(X,Y)		strspn(X,Y)
+#define HDstrstr(X,Y)		strstr(X,Y)
+#define HDstrtod(S,R)		strtod(S,R)
+#define HDstrtok(X,Y)		strtok(X,Y)
+#define HDstrtol(S,R,N)		strtol(S,R,N)
+H5_DLL int64_t HDstrtoll (const char *s, const char **rest, int base);
+#define HDstrtoul(S,R,N)	strtoul(S,R,N)
+#define HDstrxfrm(X,Y,Z)	strxfrm(X,Y,Z)
+#define HDsysconf(N)		sysconf(N)
+#define HDsystem(S)		system(S)
+#define HDtan(X)		tan(X)
+#define HDtanh(X)		tanh(X)
+#define HDtcdrain(F)		tcdrain(F)
+#define HDtcflow(F,A)		tcflow(F,A)
+#define HDtcflush(F,N)		tcflush(F,N)
+#define HDtcgetattr(F,T)	tcgetattr(F,T)
+#define HDtcgetpgrp(F)		tcgetpgrp(F)
+#define HDtcsendbreak(F,N)	tcsendbreak(F,N)
+#define HDtcsetattr(F,O,T)	tcsetattr(F,O,T)
+#define HDtcsetpgrp(F,N)	tcsetpgrp(F,N)
+#define HDtime(T)		time(T)
+#define HDtimes(T)		times(T)
+#define HDtmpfile()		tmpfile()
+#define HDtmpnam(S)		tmpnam(S)
+#define HDtolower(C)		tolower(C)
+#define HDtoupper(C)		toupper(C)
+#define HDttyname(F)		ttyname(F)
+#define HDtzset()		tzset()
+#define HDumask(N)		umask(N)
+#define HDuname(S)		uname(S)
+#define HDungetc(C,F)		ungetc(C,F)
+#ifdef WIN32
+#define HDunlink(S)             _unlink(S)
+#else
+#define HDunlink(S)		unlink(S)
+#endif
+#define HDutime(S,T)		utime(S,T)
+#define HDva_arg(A,T)		va_arg(A,T)
+#define HDva_end(A)		va_end(A)
+#define HDva_start(A,P)		va_start(A,P)
+#define HDvfprintf(F,FMT,A)	vfprintf(F,FMT,A)
+#define HDvprintf(FMT,A)	vprintf(FMT,A)
+#define HDvsprintf(S,FMT,A)	vsprintf(S,FMT,A)
+#ifdef H5_HAVE_VSNPRINTF
+#   define HDvsnprintf(S,N,FMT,A) vsnprintf(S,N,FMT,A)
+#endif
+#define HDwait(W)		wait(W)
+#define HDwaitpid(P,W,O)	waitpid(P,W,O)
+#define HDwcstombs(S,P,Z)	wcstombs(S,P,Z)
+#define HDwctomb(S,C)		wctomb(S,C)
+
+#if defined (__MWERKS__)
+/* workaround for a bug in the Metrowerks version 6.0 header file for write
+ which is not defined as const void*
+ */
+#define HDwrite(F,M,Z)		write(F,(void*)M,Z)
+#else
+#define HDwrite(F,M,Z)		write(F,M,Z)
+#endif
+
+/*
+ * And now for a couple non-Posix functions...  Watch out for systems that
+ * define these in terms of macros.
+ */
+#ifdef WIN32
+#define HDstrdup(S)    _strdup(S)
+#else /* WIN32 */
+
+#if !defined strdup && !defined H5_HAVE_STRDUP
+extern char *strdup(const char *s);
+#endif
+
+#define HDstrdup(S)     strdup(S)
+
+#endif /* WIN32 */
+
+
+#ifndef H5_HAVE_SNPRINTF
+H5_DLL int HDsnprintf(char *buf, size_t size, const char *fmt, ...);
+#endif
+#ifndef H5_HAVE_VSNPRINTF
+H5_DLL int HDvsnprintf(char *buf, size_t size, const char *fmt, va_list ap);
+#endif
+
+/*
+ * These macros check whether debugging has been requested for a certain
+ * package at run-time.	 Code for debugging is conditionally compiled by
+ * defining constants like `H5X_DEBUG'.	 In order to see the output though
+ * the code must be enabled at run-time with an environment variable
+ * HDF5_DEBUG which is a list of packages to debug.
+ *
+ * Note:  If you add/remove items from this enum then be sure to update the
+ *	  information about the package in H5_init_library().
+ */
+typedef enum {
+    H5_PKG_A,				/*Attributes			*/
+    H5_PKG_AC,				/*Meta data cache		*/
+    H5_PKG_B,				/*B-trees			*/
+    H5_PKG_D,				/*Datasets			*/
+    H5_PKG_E,				/*Error handling		*/
+    H5_PKG_F,				/*Files				*/
+    H5_PKG_G,				/*Groups			*/
+    H5_PKG_HG,				/*Global heap			*/
+    H5_PKG_HL,				/*Local heap			*/
+    H5_PKG_I,				/*Interface			*/
+    H5_PKG_MF,				/*File memory management	*/
+    H5_PKG_MM,				/*Core memory management	*/
+    H5_PKG_O,				/*Object headers		*/
+    H5_PKG_P,				/*Property lists		*/
+    H5_PKG_S,				/*Data spaces			*/
+    H5_PKG_T,				/*Data types			*/
+    H5_PKG_V,				/*Vector functions		*/
+    H5_PKG_Z,				/*Raw data filters		*/
+    H5_NPKGS				/*Must be last			*/
+} H5_pkg_t;
+
+typedef struct H5_debug_t {
+    FILE		*trace;		/*API trace output stream	*/
+    hbool_t             ttop;           /*Show only top-level calls?    */
+    hbool_t             ttimes;         /*Show trace event times?       */
+    struct {
+	const char	*name;		/*package name			*/
+	FILE		*stream;	/*output stream	or NULL		*/
+    } pkg[H5_NPKGS];
+} H5_debug_t;
+
+extern H5_debug_t		H5_debug_g;
+#define H5DEBUG(X)		(H5_debug_g.pkg[H5_PKG_##X].stream)
+
+/*-------------------------------------------------------------------------
+ * Purpose:	These macros are inserted automatically just after the
+ *		FUNC_ENTER() macro of API functions and are used to trace
+ *		application program execution. Unless H5_DEBUG_API has been
+ *		defined they are no-ops.
+ *
+ * Arguments:	R	- Return type encoded as a string
+ *		T	- Argument types encoded as a string
+ *		A0-An	- Arguments.  The number at the end of the macro name
+ *			  indicates the number of arguments.
+ *
+ * Programmer:	Robb Matzke
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+#ifdef H5_DEBUG_API
+#define H5TRACE_DECL			   const char *RTYPE=NULL;                                      \
+                                           double CALLTIME;
+#define H5TRACE0(R,T)			   RTYPE=R;                                                     \
+					   CALLTIME=H5_trace(NULL,FUNC,T)
+#define H5TRACE1(R,T,A0)		   RTYPE=R;			                                \
+					   CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0)
+#define H5TRACE2(R,T,A0,A1)		   RTYPE=R;                                                     \
+					   CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1)
+#define H5TRACE3(R,T,A0,A1,A2)		   RTYPE=R;			                                \
+					   CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2)
+#define H5TRACE4(R,T,A0,A1,A2,A3)	   RTYPE=R;                                                     \
+					   CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3)
+#define H5TRACE5(R,T,A0,A1,A2,A3,A4)	   RTYPE=R;                                                     \
+					   CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
+                                                             #A4,A4)
+#define H5TRACE6(R,T,A0,A1,A2,A3,A4,A5)	   RTYPE=R;                                                     \
+					   CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
+                                                             #A4,A4,#A5,A5)
+#define H5TRACE7(R,T,A0,A1,A2,A3,A4,A5,A6) RTYPE=R;                                                     \
+					   CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
+                                                             #A4,A4,#A5,A5,#A6,A6)
+#define H5TRACE8(R,T,A0,A1,A2,A3,A4,A5,A6,A7) RTYPE=R;                                                  \
+                                           CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
+                                                             #A4,A4,#A5,A5,#A6,A6,#A7,A7)
+#define H5TRACE9(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8) RTYPE=R;                                               \
+                                           CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
+                                                             #A4,A4,#A5,A5,#A6,A6,#A7,A7,#A8,A8)
+#define H5TRACE10(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9) RTYPE=R;                                           \
+                                           CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
+                                                             #A4,A4,#A5,A5,#A6,A6,#A7,A7,#A8,A8,#A9,A9)
+#define H5TRACE11(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) RTYPE=R;                                       \
+                                           CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
+                                                             #A4,A4,#A5,A5,#A6,A6,#A7,A7,#A8,A8,#A9,A9, \
+                                                             #A10,A10)
+#define H5TRACE_RETURN(V)		   if (RTYPE) {                                                 \
+					      H5_trace(&CALLTIME,FUNC,RTYPE,NULL,V);                    \
+					      RTYPE=NULL;                                               \
+					   }
+#else
+#define H5TRACE_DECL			                /*void*/
+#define H5TRACE0(R,T)			                /*void*/
+#define H5TRACE1(R,T,A0)		                /*void*/
+#define H5TRACE2(R,T,A0,A1)		                /*void*/
+#define H5TRACE3(R,T,A0,A1,A2)		                /*void*/
+#define H5TRACE4(R,T,A0,A1,A2,A3)	                /*void*/
+#define H5TRACE5(R,T,A0,A1,A2,A3,A4)	                /*void*/
+#define H5TRACE6(R,T,A0,A1,A2,A3,A4,A5)	                /*void*/
+#define H5TRACE7(R,T,A0,A1,A2,A3,A4,A5,A6)              /*void*/
+#define H5TRACE8(R,T,A0,A1,A2,A3,A4,A5,A6,A7)           /*void*/
+#define H5TRACE9(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8)        /*void*/
+#define H5TRACE10(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9)    /*void*/
+#define H5TRACE11(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) /*void*/
+#define H5TRACE_RETURN(V)		                /*void*/
+#endif
+
+H5_DLL double H5_trace(const double *calltime, const char *func, const char *type, ...);
+
+
+/*-------------------------------------------------------------------------
+ * Purpose:	Register function entry for library initialization and code
+ *		profiling.
+ *
+ * Notes:	Every file must have a file-scope variable called
+ *		`initialize_interface_g' of type hbool_t which is initialized
+ *		to FALSE.
+ *
+ *		Don't use local variable initializers which contain
+ *		calls to other library functions since the initializer
+ *		would happen before the FUNC_ENTER() gets called.  Don't
+ *		use initializers that require special cleanup code to
+ *		execute if FUNC_ENTER() fails since a failing FUNC_ENTER()
+ *		returns immediately without branching to the `done' label.
+ *
+ * Programmer:	Quincey Koziol
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+/* `S' is the name of a function which is being tested to check if its */
+/*      an API function */
+#define H5_IS_API(S) ('_'!=S[2] && '_'!=S[3] && (!S[4] || '_'!=S[4]))
+
+/* global library version information string */
+extern char	H5_lib_vers_info_g[];
+
+/* Lock headers */
+#ifdef H5_HAVE_THREADSAFE
+
+/* Include required thread-safety header */
+#include "H5TSprivate.h"
+
+/* replacement structure for original global variable */
+typedef struct H5_api_struct {
+    H5TS_mutex_t init_lock;  /* API entrance mutex */
+    hbool_t H5_libinit_g;    /* Has the library been initialized? */
+} H5_api_t;
+
+/* Macros for accessing the global variables */
+#define H5_INIT_GLOBAL H5_g.H5_libinit_g
+
+/* Macro for first thread initialization */
+#define H5_FIRST_THREAD_INIT                                                  \
+   pthread_once(&H5TS_first_init_g, H5TS_first_thread_init);
+
+/* Macros for threadsafe HDF-5 Phase I locks */
+#define H5_API_LOCK                                                           \
+     H5TS_mutex_lock(&H5_g.init_lock);
+#define H5_API_UNLOCK                                                         \
+     H5TS_mutex_unlock(&H5_g.init_lock);
+
+/* Macros for thread cancellation-safe mechanism */
+#define H5_API_UNSET_CANCEL                                                   \
+    H5TS_cancel_count_inc();
+
+#define H5_API_SET_CANCEL                                                     \
+    H5TS_cancel_count_dec();
+
+extern H5_api_t H5_g;
+
+#else /* H5_HAVE_THREADSAFE */
+
+/* disable any first thread init mechanism */
+#define H5_FIRST_THREAD_INIT
+
+/* disable locks (sequential version) */
+#define H5_API_LOCK
+#define H5_API_UNLOCK
+
+/* disable cancelability (sequential version) */
+#define H5_API_UNSET_CANCEL
+#define H5_API_SET_CANCEL
+
+/* extern global variables */
+extern hbool_t H5_libinit_g;    /* Has the library been initialized? */
+
+/* Macros for accessing the global variables */
+#define H5_INIT_GLOBAL H5_libinit_g
+
+#endif /* H5_HAVE_THREADSAFE */
+
+#ifdef H5_HAVE_FUNCSTACK
+
+/* Include required function stack header */
+#include "H5FSprivate.h"
+
+#define H5_PUSH_FUNC(func_name) H5FS_push(#func_name)
+#define H5_POP_FUNC             H5FS_pop()
+#else /* H5_HAVE_FUNCSTACK */
+#define H5_PUSH_FUNC(func_name) /* void */
+#define H5_POP_FUNC             /* void */
+#endif /* H5_HAVE_FUNCSTACK */
+
+#ifdef H5_HAVE_MPE
+extern hbool_t H5_MPEinit_g;   /* Has the MPE Library been initialized? */
+#endif
+
+/* Check if the function name is correct (if the compiler supports __FUNCTION__) */
+#ifdef H5_HAVE_FUNCTION
+#define H5_CHECK_FUNCNAME(func_name) \
+    assert(!HDstrcmp(#func_name, __FUNCTION__))
+#else /* H5_HAVE_FUNCTION */
+#define H5_CHECK_FUNCNAME(func_name) \
+    assert(func_name)
+#endif /* H5_HAVE_FUNCTION */
+
+/* Macros for defining interface initialization routines */
+#ifdef H5_INTERFACE_INIT_FUNC
+static int		H5_interface_initialize_g = 0;
+static herr_t		H5_INTERFACE_INIT_FUNC(void);
+#define H5_INTERFACE_INIT(err)						      \
+   /* Initialize this interface or bust */				      \
+   if (!H5_interface_initialize_g) {					      \
+      H5_interface_initialize_g = 1;					      \
+      if (H5_INTERFACE_INIT_FUNC()<0) {					      \
+         H5_interface_initialize_g = 0;				              \
+         HGOTO_ERROR (H5E_FUNC, H5E_CANTINIT, err,		              \
+            "interface initialization failed")		                      \
+      }								              \
+   }
+#else /* H5_INTERFACE_INIT_FUNC */
+#define H5_INTERFACE_INIT(err)
+#endif /* H5_INTERFACE_INIT_FUNC */
+
+
+#define FUNC_ENTER_COMMON_NOFUNC(func_name,asrt)                              \
+   /* Check API status */               				      \
+   assert(asrt);				                              \
+									      \
+   /* Check function name */               				      \
+   H5_CHECK_FUNCNAME(func_name);
+
+#define FUNC_ENTER_COMMON(func_name,asrt)                                     \
+    static const char FUNC[]=#func_name;                                      \
+    FUNC_ENTER_COMMON_NOFUNC(func_name,asrt);
+
+/* Threadsafety initialization code for API routines */
+#define FUNC_ENTER_API_THREADSAFE                                             \
+   /* Initialize the thread-safe code */				      \
+   H5_FIRST_THREAD_INIT                                                       \
+									      \
+   /* Grab the mutex for the library */ 				      \
+   H5_API_UNSET_CANCEL                                                        \
+   H5_API_LOCK
+
+/* Threadsafety termination code for API routines */
+#define FUNC_LEAVE_API_THREADSAFE                                             \
+    H5_API_UNLOCK                                                             \
+    H5_API_SET_CANCEL
+
+/* Local variables for API routines */
+#define FUNC_ENTER_API_VARS(func_name)                                        \
+    MPE_LOG_VARS(func_name)                                                   \
+    H5TRACE_DECL
+
+/* Use this macro for all "normal" API functions */
+#define FUNC_ENTER_API(func_name,err) {{                                      \
+    FUNC_ENTER_API_VARS(func_name)                                            \
+    FUNC_ENTER_COMMON(func_name,H5_IS_API(#func_name));                       \
+    FUNC_ENTER_API_THREADSAFE;                                                \
+    FUNC_ENTER_API_COMMON(func_name,err);		                      \
+    /* Clear thread error stack entering public functions */		      \
+    H5E_clear();						              \
+    {
+
+/*
+ * Use this macro for API functions that shouldn't clear the error stack
+ *      like H5Eprint and H5Ewalk.
+ */
+#define FUNC_ENTER_API_NOCLEAR(func_name,err) {{                              \
+    FUNC_ENTER_API_VARS(func_name)                                            \
+    FUNC_ENTER_COMMON(func_name,H5_IS_API(#func_name));                       \
+    FUNC_ENTER_API_THREADSAFE;                                                \
+    FUNC_ENTER_API_COMMON(func_name,err);		                      \
+    {
+
+/*
+ * Use this macro for API functions that shouldn't perform _any_ initialization
+ *      of the library or an interface, just perform tracing, etc.  Examples
+ *      are: H5close, H5check_version, H5Eget_major, H5Eget_minor.
+ *
+ */
+#define FUNC_ENTER_API_NOINIT(func_name) {{                                   \
+    FUNC_ENTER_API_VARS(func_name)                                            \
+    FUNC_ENTER_COMMON(func_name,H5_IS_API(#func_name));                       \
+    FUNC_ENTER_API_THREADSAFE;                                                \
+    H5_PUSH_FUNC(func_name);                                                  \
+    BEGIN_MPE_LOG(func_name);                                                 \
+    {
+
+/* Use this macro for all "normal" non-API functions */
+#define FUNC_ENTER_NOAPI(func_name,err) {                                     \
+    FUNC_ENTER_COMMON(func_name,!H5_IS_API(#func_name));                      \
+    FUNC_ENTER_NOAPI_INIT(func_name,err)		                      \
+    {
+
+/* Use this macro for all non-API functions which don't issue errors */
+#define FUNC_ENTER_NOAPI_NOFUNC(func_name) {                                  \
+    FUNC_ENTER_COMMON_NOFUNC(func_name,!H5_IS_API(#func_name));               \
+    FUNC_ENTER_NOAPI_INIT(func_name,err)		                      \
+    {
+
+/*
+ * Use this macro for non-API functions which fall into these categories:
+ *      - static functions, since they must be called from a function in the
+ *              interface, the library and interface must already be
+ *              initialized.
+ *      - functions which are called during library shutdown, since we don't
+ *              want to re-initialize the library.
+ */
+#define FUNC_ENTER_NOAPI_NOINIT(func_name) {                                        \
+    FUNC_ENTER_COMMON(func_name,!H5_IS_API(#func_name));                      \
+    H5_PUSH_FUNC(func_name);                                                  \
+    {
+
+/*
+ * Use this macro for non-API functions which fall into these categories:
+ *      - static functions, since they must be called from a function in the
+ *              interface, the library and interface must already be
+ *              initialized.
+ *      - functions which are called during library shutdown, since we don't
+ *              want to re-initialize the library.
+ *
+ * This macro is used for functions which fit the above categories _and_
+ * also don't use the 'FUNC' variable (i.e. don't push errors on the error stack)
+ *
+ */
+#define FUNC_ENTER_NOAPI_NOINIT_NOFUNC(func_name) {                           \
+    FUNC_ENTER_COMMON_NOFUNC(func_name,!H5_IS_API(#func_name));               \
+    H5_PUSH_FUNC(func_name);                                                  \
+    {
+
+/*
+ * Use this macro for non-API functions which fall into these categories:
+ *      - functions which shouldn't push their name on the function stack
+ *              (so far, just the H5FS routines themselves)
+ *
+ * This macro is used for functions which fit the above categories _and_
+ * also don't use the 'FUNC' variable (i.e. don't push errors on the error stack)
+ *
+ */
+#define FUNC_ENTER_NOAPI_NOFUNC_NOFS(func_name) {                             \
+    FUNC_ENTER_COMMON_NOFUNC(func_name,!H5_IS_API(#func_name));               \
+    {
+
+#define FUNC_ENTER_API_COMMON(func_name,err)			       	      \
+   /* Initialize the library */           				      \
+   if (!(H5_INIT_GLOBAL)) {                                                   \
+       H5_INIT_GLOBAL = TRUE;                                                 \
+       if (H5_init_library()<0)  					      \
+          HGOTO_ERROR (H5E_FUNC, H5E_CANTINIT, err,		              \
+            "library initialization failed")		                      \
+   }								              \
+                                                                              \
+   /* Initialize the interface, if appropriate */		              \
+   H5_INTERFACE_INIT(err)						      \
+                                                                              \
+   /* Push the name of this function on the function stack */                 \
+   H5_PUSH_FUNC(func_name);                                                   \
+                                                                              \
+   BEGIN_MPE_LOG(func_name)
+
+#define FUNC_ENTER_NOAPI_INIT(func_name,err)			       	      \
+   /* Initialize the interface, if appropriate */		              \
+   H5_INTERFACE_INIT(err)						      \
+                                                                              \
+   /* Push the name of this function on the function stack */                 \
+   H5_PUSH_FUNC(func_name);
+
+/*-------------------------------------------------------------------------
+ * Purpose:	Register function exit for code profiling.  This should be
+ *		the last statement executed by a function.
+ *
+ * Programmer:	Quincey Koziol
+ *
+ * Modifications:
+ *
+ *	Robb Matzke, 4 Aug 1997
+ *	The pablo mask comes from the constant PABLO_MASK defined on a
+ *	per-file basis.	 The pablo_func_id comes from an auto variable
+ *	defined by FUNC_ENTER.
+ *      PABLO was removed on January 20, 2005 EIP
+ *
+ *-------------------------------------------------------------------------
+ */
+#define FUNC_LEAVE_API(ret_value)                                             \
+        FINISH_MPE_LOG;                                                       \
+        H5TRACE_RETURN(ret_value);					      \
+        H5_POP_FUNC;                                                          \
+        FUNC_LEAVE_API_THREADSAFE                                             \
+        return (ret_value);						      \
+    } /*end scope from end of FUNC_ENTER*/                                    \
+}} /*end scope from beginning of FUNC_ENTER*/
+
+#define FUNC_LEAVE_NOAPI(ret_value)                                           \
+        H5_POP_FUNC;                                                          \
+        return (ret_value);						      \
+    } /*end scope from end of FUNC_ENTER*/                                    \
+} /*end scope from beginning of FUNC_ENTER*/
+
+#define FUNC_LEAVE_NOAPI_VOID                                                 \
+        H5_POP_FUNC;                                                          \
+        return;						                      \
+    } /*end scope from end of FUNC_ENTER*/                                    \
+} /*end scope from beginning of FUNC_ENTER*/
+
+/*
+ * Use this macro for non-API functions which fall into these categories:
+ *      - functions which didn't push their name on the function stack
+ *              (so far, just the H5FS routines themselves)
+ */
+#define FUNC_LEAVE_NOAPI_NOFS(ret_value)                                      \
+        return (ret_value);						      \
+    } /*end scope from end of FUNC_ENTER*/                                    \
+} /*end scope from beginning of FUNC_ENTER*/
+
+
+/* Macro for "glueing" together items, for re-scanning macros */
+#define H5_GLUE(x,y)       x##y
+#define H5_GLUE3(x,y,z)    x##y##z
+
+/* Private functions, not part of the publicly documented API */
+H5_DLL herr_t H5_init_library(void);
+H5_DLL void H5_term_library(void);
+
+/* Functions to terminate interfaces */
+H5_DLL int H5A_term_interface(void);
+H5_DLL int H5AC_term_interface(void);
+H5_DLL int H5D_term_interface(void);
+H5_DLL int H5F_term_interface(void);
+H5_DLL int H5G_term_interface(void);
+H5_DLL int H5I_term_interface(void);
+H5_DLL int H5P_term_interface(void);
+H5_DLL int H5R_term_interface(void);
+H5_DLL int H5S_term_interface(void);
+H5_DLL int H5T_term_interface(void);
+H5_DLL int H5Z_term_interface(void);
+
+#endif
+

Added: packages/hdf5/branches/upstream/current/src/H5public.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/H5public.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/H5public.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,229 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains public declarations for the HDF5 module.
+ */
+#ifndef _H5public_H
+#define _H5public_H
+
+/* Include files for public use... */
+/*
+ * Since H5pubconf.h is a generated header file, it is messy to try
+ * to put a #ifndef _H5pubconf_H ... #endif guard in it.
+ * HDF5 has set an internal rule that it is being included here.
+ * Source files should NOT include H5pubconf.h directly but include
+ * it via H5public.h.  The #ifndef _H5public_H guard above would
+ * prevent repeated include.
+ */
+#include "H5pubconf.h"		/*from configure                             */
+
+#ifdef H5_HAVE_FEATURES_H
+#include <features.h>           /*for setting POSIX, BSD, etc. compatibility */
+#endif
+#ifdef H5_HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef H5_STDC_HEADERS
+#   include <limits.h>		/*for H5T_NATIVE_CHAR defn in H5Tpublic.h    */
+#endif
+#ifndef __cplusplus
+#ifdef H5_HAVE_STDINT_H
+#   include <stdint.h>		/*for C9x types				     */
+#endif
+#endif
+#ifdef H5_HAVE_INTTYPES_H
+#   include <inttypes.h>        /* For uint64_t on some platforms            */
+#endif
+#ifdef H5_HAVE_STDDEF_H
+#   include <stddef.h>
+#endif
+#ifdef H5_HAVE_PARALLEL
+#   include <mpi.h>
+#ifndef MPI_FILE_NULL		/*MPIO may be defined in mpi.h already       */
+#   include <mpio.h>
+#endif
+#endif
+
+#ifdef H5_HAVE_GASS             /*for Globus GASS I/O                        */
+#include "globus_common.h"
+#include "globus_gass_file.h"
+#endif
+
+#ifdef H5_HAVE_SRB              /*for SRB I/O                                */
+#include <srbClient.h>
+#endif
+
+#include "H5api_adpt.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Version numbers */
+#define H5_VERS_MAJOR	1	/* For major interface/format changes  	     */
+#define H5_VERS_MINOR	6	/* For minor interface/format changes  	     */
+#define H5_VERS_RELEASE	5	/* For tweaks, bug-fixes, or development     */
+#define H5_VERS_SUBRELEASE ""	/* For pre-releases like snap0       */
+				/* Empty string for real releases.           */
+#define H5_VERS_INFO    "HDF5 library version: 1.6.5"      /* Full version string */
+
+#define H5check()	H5check_version(H5_VERS_MAJOR,H5_VERS_MINOR,	      \
+				        H5_VERS_RELEASE)
+
+/*
+ * Status return values.  Failed integer functions in HDF5 result almost
+ * always in a negative value (unsigned failing functions sometimes return
+ * zero for failure) while successfull return is non-negative (often zero).
+ * The negative failure value is most commonly -1, but don't bet on it.  The
+ * proper way to detect failure is something like:
+ *
+ * 	if ((dset = H5Dopen (file, name))<0) {
+ *	    fprintf (stderr, "unable to open the requested dataset\n");
+ *	}
+ */
+typedef int herr_t;
+
+
+/*
+ * Boolean type.  Successful return values are zero (false) or positive
+ * (true). The typical true value is 1 but don't bet on it.  Boolean
+ * functions cannot fail.  Functions that return `htri_t' however return zero
+ * (false), positive (true), or negative (failure). The proper way to test
+ * for truth from a htri_t function is:
+ *
+ * 	if ((retval = H5Tcommitted(type))>0) {
+ *	    printf("data type is committed\n");
+ *	} else if (!retval) {
+ * 	    printf("data type is not committed\n");
+ *	} else {
+ * 	    printf("error determining whether data type is committed\n");
+ *	}
+ */
+typedef unsigned int hbool_t;
+typedef int htri_t;
+
+/* Define the ssize_t type if it not is defined */
+#if H5_SIZEOF_SSIZE_T==0
+/* Undefine this size, we will re-define it in one of the sections below */
+#undef H5_SIZEOF_SSIZE_T
+#if H5_SIZEOF_SIZE_T==H5_SIZEOF_INT
+typedef int ssize_t;
+#       define H5_SIZEOF_SSIZE_T H5_SIZEOF_INT
+#elif H5_SIZEOF_SIZE_T==H5_SIZEOF_LONG
+typedef long ssize_t;
+#       define H5_SIZEOF_SSIZE_T H5_SIZEOF_LONG
+#elif H5_SIZEOF_SIZE_T==H5_SIZEOF_LONG_LONG
+typedef long long ssize_t;
+#       define H5_SIZEOF_SSIZE_T H5_SIZEOF_LONG_LONG
+#elif H5_SIZEOF_SIZE_T==H5_SIZEOF___INT64
+typedef __int64 ssize_t;
+#       define H5_SIZEOF_SSIZE_T H5_SIZEOF___INT64
+#else /* Can't find matching type for ssize_t */
+#   error "nothing appropriate for ssize_t"
+#endif
+#endif
+
+/*
+ * The sizes of file objects have their own types defined here.  If large
+ * sizes are enabled then use a 64-bit data type, otherwise use the size of
+ * memory objects.
+ */
+#ifdef H5_HAVE_LARGE_HSIZET
+#   if H5_SIZEOF_LONG_LONG>=8
+typedef unsigned long long 	hsize_t;
+typedef signed long long	hssize_t;
+#       define H5_SIZEOF_HSIZE_T H5_SIZEOF_LONG_LONG
+#   elif H5_SIZEOF___INT64>=8
+typedef unsigned __int64	hsize_t;
+typedef signed __int64		hssize_t;
+#       define H5_SIZEOF_HSIZE_T H5_SIZEOF___INT64
+#   endif
+#else /* H5_HAVE_LARGE_HSIZET */
+typedef size_t			hsize_t;
+typedef ssize_t			hssize_t;
+#       define H5_SIZEOF_HSIZE_T H5_SIZEOF_SIZE_T
+#endif /* H5_HAVE_LARGE_HSIZET */
+
+/*
+ * File addresses have there own types.
+ */
+#if H5_SIZEOF_INT64_T>=8
+    typedef uint64_t                haddr_t;
+#   define HADDR_UNDEF              ((haddr_t)(int64_t)(-1))
+#   define H5_SIZEOF_HADDR_T        H5_SIZEOF_INT64_T
+#   ifdef H5_HAVE_PARALLEL
+#       define HADDR_AS_MPI_TYPE    MPI_LONG_LONG_INT
+#   endif  /* H5_HAVE_PARALLEL */
+#elif H5_SIZEOF_INT>=8
+    typedef unsigned                haddr_t;
+#   define HADDR_UNDEF              ((haddr_t)(-1))
+#   define H5_SIZEOF_HADDR_T        H5_SIZEOF_INT
+#   ifdef H5_HAVE_PARALLEL
+#       define HADDR_AS_MPI_TYPE    MPI_UNSIGNED
+#   endif  /* H5_HAVE_PARALLEL */
+#elif H5_SIZEOF_LONG>=8
+    typedef unsigned long           haddr_t;
+#   define HADDR_UNDEF              ((haddr_t)(long)(-1))
+#   define H5_SIZEOF_HADDR_T        H5_SIZEOF_LONG
+#   ifdef H5_HAVE_PARALLEL
+#       define HADDR_AS_MPI_TYPE    MPI_UNSIGNED_LONG
+#   endif  /* H5_HAVE_PARALLEL */
+#elif H5_SIZEOF_LONG_LONG>=8
+    typedef unsigned long long      haddr_t;
+#   define HADDR_UNDEF              ((haddr_t)(long long)(-1))
+#   define H5_SIZEOF_HADDR_T        H5_SIZEOF_LONG_LONG
+#   ifdef H5_HAVE_PARALLEL
+#       define HADDR_AS_MPI_TYPE    MPI_LONG_LONG_INT
+#   endif  /* H5_HAVE_PARALLEL */
+#elif H5_SIZEOF___INT64>=8
+    typedef unsigned __int64        haddr_t;
+#   define HADDR_UNDEF              ((haddr_t)(__int64)(-1))
+#   define H5_SIZEOF_HADDR_T        H5_SIZEOF___INT64
+#   ifdef H5_HAVE_PARALLEL
+#       define HADDR_AS_MPI_TYPE    MPI_LONG_LONG_INT
+#   endif  /* H5_HAVE_PARALLEL */
+#else
+#   error "nothing appropriate for haddr_t"
+#endif
+#if H5_SIZEOF_HADDR_T ==H5_SIZEOF_INT
+#   define H5_PRINTF_HADDR_FMT  "%u"
+#elif H5_SIZEOF_HADDR_T ==H5_SIZEOF_LONG
+#   define H5_PRINTF_HADDR_FMT  "%lu"
+#elif H5_SIZEOF_HADDR_T ==H5_SIZEOF_LONG_LONG
+#   define H5_PRINTF_HADDR_FMT  "%"H5_PRINTF_LL_WIDTH"u"
+#elif H5_SIZEOF_HADDR_T ==H5_SIZEOF___INT64
+#   define H5_PRINTF_HADDR_FMT  "%"H5_PRINTF_LL_WIDTH"u"
+#else
+#   error "nothing appropriate for H5_PRINTF_HADDR_FMT"
+#endif
+#define HADDR_MAX		(HADDR_UNDEF-1)
+
+/* Functions in H5.c */
+H5_DLL herr_t H5open(void);
+H5_DLL herr_t H5close(void);
+H5_DLL herr_t H5dont_atexit(void);
+H5_DLL herr_t H5garbage_collect(void);
+H5_DLL herr_t H5set_free_list_limits (int reg_global_lim, int reg_list_lim,
+                int arr_global_lim, int arr_list_lim, int blk_global_lim,
+                int blk_list_lim);
+H5_DLL herr_t H5get_libversion(unsigned *majnum, unsigned *minnum,
+				unsigned *relnum);
+H5_DLL herr_t H5check_version(unsigned majnum, unsigned minnum,
+			       unsigned relnum);
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/src/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/src/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,101 @@
+##
+## 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.
+##
+## HDF5 Library Makefile(.in)
+##
+top_srcdir=@top_srcdir@
+top_builddir=..
+srcdir=@srcdir@
+ at COMMENCE@
+
+TRACE=perl $(top_srcdir)/bin/trace
+
+## Add `-I.' to the C preprocessor flags.
+CPPFLAGS=-I. -I at srcdir@ @CPPFLAGS@
+
+## This is our main target, but also remove the settings file when cleaning.
+LIB=libhdf5.la
+
+## libhdf5.settings is generated during configure. Remove it when distclean.
+DISTCLEAN=libhdf5.settings
+
+## Source and object files for the library (lexicographically)...
+LIB_SRC=H5.c H5A.c H5AC.c H5B.c H5C.c H5D.c H5Dcontig.c H5Dcompact.c H5Defl.c \
+        H5Dio.c H5Distore.c H5Dmpio.c H5Dselect.c H5Dtest.c H5E.c H5F.c       \
+        H5Fdbg.c H5Fmount.c H5Fsfile.c H5Fsuper.c H5FD.c \
+        H5FDcore.c H5FDfamily.c H5FDgass.c H5FDlog.c H5FDmpi.c H5FDmpio.c     \
+        H5FDmpiposix.c H5FDmulti.c H5FDsec2.c H5FDsrb.c H5FDstdio.c           \
+        H5FDstream.c H5FL.c H5FO.c H5FS.c H5G.c H5Gent.c H5Gnode.c H5Gstab.c  \
+        H5HG.c H5HGdbg.c H5HL.c H5HLdbg.c H5HP.c H5I.c H5MF.c H5MM.c H5O.c    \
+        H5Oattr.c H5Obogus.c \
+        H5Ocont.c H5Odtype.c H5Oefl.c H5Ofill.c H5Olayout.c H5Omtime.c        \
+        H5Oname.c H5Onull.c H5Opline.c H5Osdspace.c H5Oshared.c H5Ostab.c     \
+        H5P.c H5Pdcpl.c H5Pdxpl.c H5Pfapl.c H5Pfcpl.c H5Ptest.c H5R.c H5RC.c  \
+        H5RS.c H5S.c H5Sall.c H5Shyper.c H5Smpio.c H5Snone.c H5Spoint.c       \
+        H5Sselect.c H5Stest.c H5SL.c H5ST.c H5T.c H5Tarray.c H5Tbit.c         \
+        H5Tcommit.c \
+        H5Tcompound.c H5Tconv.c H5Tcset.c H5Tenum.c H5Tfields.c H5Tfixed.c    \
+        H5Tfloat.c H5Tinit.c H5Tnative.c H5Toffset.c H5Topaque.c H5Torder.c   \
+        H5Tpad.c H5Tprecis.c H5Tstrpad.c H5Tvlen.c H5TS.c H5V.c H5Z.c         \
+        H5Zdeflate.c H5Zfletcher32.c H5Zshuffle.c H5Zszip.c
+
+LIB_OBJ=$(LIB_SRC:.c=.lo)
+
+## Temporary files
+MOSTLYCLEAN=H5detect.o H5detect.lo H5detect H5Tinit.o H5Tinit.lo H5Tinit.c
+
+## Public header files (to be installed)...
+PUB_HDR=H5public.h H5Apublic.h H5ACpublic.h H5Bpublic.h H5Cpublic.h           \
+        H5Dpublic.h \
+        H5Epublic.h H5Fpublic.h H5FDpublic.h H5FDcore.h H5FDfamily.h          \
+        H5FDgass.h H5FDlog.h H5FDmpi.h H5FDmpio.h H5FDmpiposix.h              \
+        H5FDmulti.h H5FDsec2.h H5FDsrb.h H5FDstdio.h H5FDstream.h             \
+        H5Gpublic.h H5HGpublic.h H5HLpublic.h H5Ipublic.h                     \
+        H5MMpublic.h H5Opublic.h H5Ppublic.h H5Rpublic.h H5Spublic.h          \
+        H5Tpublic.h H5Zpublic.h H5pubconf.h hdf5.h H5api_adpt.h
+
+## Other header files (not to be installed)...
+PRIVATE_HDR=H5private.h H5Aprivate.h H5Apkg.h H5ACprivate.h H5Bprivate.h      \
+        H5Cprivate.h \
+        H5Dprivate.h H5Eprivate.h H5Fprivate.h H5FDprivate.h H5FLprivate.h    \
+        H5FOprivate.h H5FSprivate.h H5Gprivate.h H5Gpkg.h                     \
+        H5HGprivate.h H5HLprivate.h H5HPprivate.h H5Iprivate.h H5MFprivate.h  \
+        H5MMprivate.h H5Oprivate.h H5Opkg.h H5Pprivate.h H5Ppkg.h             \
+        H5Rprivate.h H5RCprivate.h H5RSprivate.h H5Sprivate.h H5SLprivate.h   \
+        H5STprivate.h \
+        H5Tprivate.h \
+        H5Tpkg.h H5TSprivate.h H5Vprivate.h        \
+        H5Zprivate.h H5Zpkg.h H5config.h
+
+## Number format detection
+## The LD_LIBRARY_PATH setting is a klutch.
+## Things should have been all set during H5detect making.
+## Remove the generated .c file if errors occur unless HDF5_Make_Ignore
+## is set to ignore the error.
+H5Tinit.c: H5detect
+	LD_LIBRARY_PATH="$$LD_LIBRARY_PATH`echo $(LDFLAGS) |                  \
+		sed -e 's/-L/:/g' -e 's/ //g'`"                  	      \
+	$(RUNSERIAL) ./H5detect > H5Tinit.c  ||                               \
+	    (test $$HDF5_Make_Ignore && echo "*** Error ignored") ||          \
+	    ($(RM) $@ ; exit 1)
+
+## no $(LIB) in the action below since that's being made now.
+## Use -g to force no optimization since many compilers (e.g., Intel) takes
+## a long time to compile it with any optimization on.  H5detect is used
+## to generate H5Tinit.c once. So, optimization is not critical.
+H5detect: $(srcdir)/H5detect.c
+	$(CC) $(CFLAGS) $(CPPFLAGS) $(srcdir)/H5detect.c \
+	    $(LDFLAGS) $(LIBS) -o $@
+
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/src/hdf5.h
===================================================================
--- packages/hdf5/branches/upstream/current/src/hdf5.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/hdf5.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,55 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 is the main public HDF5 include file.  Put further information in
+ * a particular header file and include that here, don't fill this file with
+ * lots of gunk...
+ */
+#ifndef _HDF5_H
+#define _HDF5_H
+
+#include "H5public.h"
+#include "H5Apublic.h"		/* Attributes				*/
+#include "H5ACpublic.h"		/* Metadata cache			*/
+#include "H5Bpublic.h"		/* B-trees				*/
+#include "H5Dpublic.h"		/* Datasets				*/
+#include "H5Epublic.h"		/* Errors				*/
+#include "H5Fpublic.h"		/* Files				*/
+#include "H5FDpublic.h"		/* File drivers				*/
+#include "H5Gpublic.h"		/* Groups				*/
+#include "H5HGpublic.h"		/* Global heaps				*/
+#include "H5HLpublic.h"		/* Local heaps				*/
+#include "H5Ipublic.h"		/* ID management			*/
+#include "H5MMpublic.h"		/* Memory management			*/
+#include "H5Opublic.h"		/* Object headers			*/
+#include "H5Ppublic.h"		/* Property lists			*/
+#include "H5Rpublic.h"		/* References				*/
+#include "H5Spublic.h"		/* Dataspaces				*/
+#include "H5Tpublic.h"		/* Datatypes				*/
+#include "H5Zpublic.h"		/* Data filters				*/
+
+/* Predefined file drivers */
+#include "H5FDcore.h"		/* Files stored entirely in memory	*/
+#include "H5FDfamily.h"		/* File families 			*/
+#include "H5FDgass.h"		/* Remote files using GASS I/O		*/
+#include "H5FDlog.h"        	/* sec2 driver with I/O logging (for debugging) */
+#include "H5FDmpi.h"            /* MPI-based file drivers		*/
+#include "H5FDmulti.h"		/* Usage-partitioned file family	*/
+#include "H5FDsec2.h"		/* POSIX unbuffered file I/O		*/
+#include "H5FDsrb.h"        	/* Remote access using SRB              */
+#include "H5FDstdio.h"		/* Standard C buffered I/O		*/
+#include "H5FDstream.h"     	/* In-memory files streamed via sockets */
+
+#endif

Added: packages/hdf5/branches/upstream/current/src/libhdf5.settings.in
===================================================================
--- packages/hdf5/branches/upstream/current/src/libhdf5.settings.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/src/libhdf5.settings.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,20 @@
+SUMMARY OF THE HDF5 CONFIGURATION
+=================================
+
+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@
+Byte sex:		@BYTESEX@
+Libraries:		@STATIC_SHARED@
+Parallel support:	@PARALLEL@
+Installation point:	@prefix@
+Compiler:		@CC_VERSION@
+Compiler switches:	@CFLAGS@ @CPPFLAGS@
+Extra libraries:	@LDFLAGS@ @LIBS@
+Archiver:		@AR@
+Ranlib:			@RANLIB@
+Debugged Packages:	@DEBUG_PKG@
+API Tracing:		@TRACE_API@
+File addresses:		@HSIZET@

Added: packages/hdf5/branches/upstream/current/test/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/test/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2697 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+h5test.lo: \
+   $(srcdir)/h5test.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+testframe.lo: \
+   $(srcdir)/testframe.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+big.lo: \
+   $(srcdir)/big.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+bittests.lo: \
+   $(srcdir)/bittests.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Tpkg.h \
+   $(top_srcdir)/src/H5Tprivate.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h \
+   $(top_srcdir)/src/H5Rprivate.h
+cache.lo: \
+   $(srcdir)/cache.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Iprivate.h \
+   $(top_srcdir)/src/H5SLprivate.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5Fprivate.h
+cmpd_dset.lo: \
+   $(srcdir)/cmpd_dset.c \
+   $(top_srcdir)/src/H5Tpkg.h \
+   $(top_srcdir)/src/H5Tprivate.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h \
+   $(top_srcdir)/src/H5Rprivate.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+dsets.lo: \
+   $(srcdir)/dsets.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Zpkg.h \
+   $(top_srcdir)/src/H5Zprivate.h
+dtypes.lo: \
+   $(srcdir)/dtypes.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Tpkg.h \
+   $(top_srcdir)/src/H5Tprivate.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h \
+   $(top_srcdir)/src/H5Rprivate.h
+extend.lo: \
+   $(srcdir)/extend.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+external.lo: \
+   $(srcdir)/external.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+fillval.lo: \
+   $(srcdir)/fillval.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+flush1.lo: \
+   $(srcdir)/flush1.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+flush2.lo: \
+   $(srcdir)/flush2.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+gheap.lo: \
+   $(srcdir)/gheap.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h \
+   $(top_srcdir)/src/H5HGprivate.h \
+   $(top_srcdir)/src/H5Iprivate.h \
+   $(top_srcdir)/src/H5Pprivate.h \
+   $(top_srcdir)/src/H5Oprivate.h \
+   $(top_srcdir)/src/H5Tprivate.h \
+   $(top_srcdir)/src/H5Rprivate.h \
+   $(top_srcdir)/src/H5Zprivate.h
+hyperslab.lo: \
+   $(srcdir)/hyperslab.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Vprivate.h
+istore.lo: \
+   $(srcdir)/istore.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Dprivate.h \
+   $(top_srcdir)/src/H5FDprivate.h \
+   $(top_srcdir)/src/H5Oprivate.h \
+   $(top_srcdir)/src/H5HGprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Tprivate.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h \
+   $(top_srcdir)/src/H5Rprivate.h \
+   $(top_srcdir)/src/H5Zprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Iprivate.h \
+   $(top_srcdir)/src/H5Pprivate.h \
+   $(top_srcdir)/src/H5Fpkg.h \
+   $(top_srcdir)/src/H5FOprivate.h \
+   $(top_srcdir)/src/H5SLprivate.h \
+   $(top_srcdir)/src/H5Vprivate.h
+lheap.lo: \
+   $(srcdir)/lheap.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5HLprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Iprivate.h
+links.lo: \
+   $(srcdir)/links.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h
+mount.lo: \
+   $(srcdir)/mount.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Iprivate.h
+mtime.lo: \
+   $(srcdir)/mtime.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+ohdr.lo: \
+   $(srcdir)/ohdr.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Iprivate.h \
+   $(top_srcdir)/src/H5Opkg.h \
+   $(top_srcdir)/src/H5Oprivate.h \
+   $(top_srcdir)/src/H5HGprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Tprivate.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h \
+   $(top_srcdir)/src/H5Rprivate.h \
+   $(top_srcdir)/src/H5Zprivate.h \
+   $(top_srcdir)/src/H5Gpkg.h
+stab.lo: \
+   $(srcdir)/stab.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Gpkg.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h \
+   $(top_srcdir)/src/H5Oprivate.h \
+   $(top_srcdir)/src/H5HGprivate.h \
+   $(top_srcdir)/src/H5Tprivate.h \
+   $(top_srcdir)/src/H5Rprivate.h \
+   $(top_srcdir)/src/H5Zprivate.h
+tarray.lo: \
+   $(srcdir)/tarray.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+tattr.lo: \
+   $(srcdir)/tattr.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+tconfig.lo: \
+   $(srcdir)/tconfig.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(srcdir)/h5test.h
+testhdf5.lo: \
+   $(srcdir)/testhdf5.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+testmeta.lo: \
+   $(srcdir)/testmeta.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+tfile.lo: \
+   $(srcdir)/tfile.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5Pprivate.h \
+   $(top_srcdir)/src/H5Oprivate.h \
+   $(top_srcdir)/src/H5HGprivate.h \
+   $(top_srcdir)/src/H5Tprivate.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h \
+   $(top_srcdir)/src/H5Rprivate.h \
+   $(top_srcdir)/src/H5Zprivate.h
+tgenprop.lo: \
+   $(srcdir)/tgenprop.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5Dprivate.h \
+   $(top_srcdir)/src/H5FDprivate.h \
+   $(top_srcdir)/src/H5Oprivate.h \
+   $(top_srcdir)/src/H5HGprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Tprivate.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h \
+   $(top_srcdir)/src/H5Rprivate.h \
+   $(top_srcdir)/src/H5Zprivate.h \
+   $(top_srcdir)/src/H5Ppkg.h \
+   $(top_srcdir)/src/H5Pprivate.h \
+   $(top_srcdir)/src/H5SLprivate.h
+th5s.lo: \
+   $(srcdir)/th5s.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5Sprivate.h \
+   $(top_srcdir)/src/H5Dprivate.h \
+   $(top_srcdir)/src/H5FDprivate.h \
+   $(top_srcdir)/src/H5Oprivate.h \
+   $(top_srcdir)/src/H5HGprivate.h \
+   $(top_srcdir)/src/H5Tprivate.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h \
+   $(top_srcdir)/src/H5Rprivate.h \
+   $(top_srcdir)/src/H5Zprivate.h \
+   $(top_srcdir)/src/H5Pprivate.h
+theap.lo: \
+   $(srcdir)/theap.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5HPprivate.h
+titerate.lo: \
+   $(srcdir)/titerate.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+tmeta.lo: \
+   $(srcdir)/tmeta.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5Fprivate.h
+tmisc.lo: \
+   $(srcdir)/tmisc.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/H5Dpkg.h \
+   $(top_srcdir)/src/H5Dprivate.h \
+   $(top_srcdir)/src/H5FDprivate.h \
+   $(top_srcdir)/src/H5Oprivate.h \
+   $(top_srcdir)/src/H5HGprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Tprivate.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h \
+   $(top_srcdir)/src/H5Rprivate.h \
+   $(top_srcdir)/src/H5Zprivate.h \
+   $(top_srcdir)/src/H5Sprivate.h \
+   $(top_srcdir)/src/H5Pprivate.h
+trefer.lo: \
+   $(srcdir)/trefer.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+trefstr.lo: \
+   $(srcdir)/trefstr.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5FLprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h
+tselect.lo: \
+   $(srcdir)/tselect.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5Spkg.h \
+   $(top_srcdir)/src/H5Sprivate.h \
+   $(top_srcdir)/src/H5Dprivate.h \
+   $(top_srcdir)/src/H5FDprivate.h \
+   $(top_srcdir)/src/H5Oprivate.h \
+   $(top_srcdir)/src/H5HGprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Tprivate.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h \
+   $(top_srcdir)/src/H5Rprivate.h \
+   $(top_srcdir)/src/H5Zprivate.h \
+   $(top_srcdir)/src/H5Pprivate.h
+tskiplist.lo: \
+   $(srcdir)/tskiplist.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5SLprivate.h
+ttime.lo: \
+   $(srcdir)/ttime.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+ttst.lo: \
+   $(srcdir)/ttst.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5STprivate.h
+tvltypes.lo: \
+   $(srcdir)/tvltypes.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+tvlstr.lo: \
+   $(srcdir)/tvlstr.c \
+   $(srcdir)/testhdf5.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+unlink.lo: \
+   $(srcdir)/unlink.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+enum.lo: \
+   $(srcdir)/enum.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+ttsafe.lo: \
+   $(srcdir)/ttsafe.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(srcdir)/ttsafe.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(srcdir)/testhdf5.h
+ttsafe_dcreate.lo: \
+   $(srcdir)/ttsafe_dcreate.c \
+   $(srcdir)/ttsafe.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(srcdir)/testhdf5.h \
+   $(srcdir)/h5test.h
+ttsafe_error.lo: \
+   $(srcdir)/ttsafe_error.c \
+   $(srcdir)/ttsafe.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(srcdir)/testhdf5.h \
+   $(srcdir)/h5test.h
+ttsafe_cancel.lo: \
+   $(srcdir)/ttsafe_cancel.c \
+   $(srcdir)/ttsafe.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(srcdir)/testhdf5.h \
+   $(srcdir)/h5test.h
+ttsafe_acreate.lo: \
+   $(srcdir)/ttsafe_acreate.c \
+   $(srcdir)/ttsafe.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Eprivate.h \
+   $(srcdir)/testhdf5.h \
+   $(srcdir)/h5test.h
+gass_write.lo: \
+   $(srcdir)/gass_write.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+gass_read.lo: \
+   $(srcdir)/gass_read.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+gass_append.lo: \
+   $(srcdir)/gass_append.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+srb_read.lo: \
+   $(srcdir)/srb_read.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+srb_write.lo: \
+   $(srcdir)/srb_write.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+srb_append.lo: \
+   $(srcdir)/srb_append.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+stream_test.lo: \
+   $(srcdir)/stream_test.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+set_extent.lo: \
+   $(srcdir)/set_extent.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+getname.lo: \
+   $(srcdir)/getname.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+file_handle.lo: \
+   $(srcdir)/file_handle.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+ntypes.lo: \
+   $(srcdir)/ntypes.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+dangle.lo: \
+   $(srcdir)/dangle.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+reserved.lo: \
+   $(srcdir)/reserved.c \
+   $(srcdir)/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h

Added: packages/hdf5/branches/upstream/current/test/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/test/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,230 @@
+##
+## 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.
+##
+## HDF5 Library Test Makefile(.in)
+##
+top_srcdir=@top_srcdir@
+top_builddir=..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Add include directory to the C preprocessor flags and the h5test and hdf5
+## libraries to the library list.
+CPPFLAGS=-I. -I$(srcdir) -I../src -I$(top_srcdir)/src @CPPFLAGS@
+
+## These are our main targets. They should be listed in the order to be
+## executed, generally most specific tests to least specific tests.
+TEST_PROGS=testhdf5 lheap ohdr stab gheap cache hyperslab istore bittests    \
+    dtypes dsets cmpd_dset extend external links unlink big mtime fillval    \
+    mount flush1 flush2 enum gass_write gass_read gass_append set_extent     \
+    srb_write srb_append srb_read ttsafe stream_test getname file_handle     \
+    ntypes dangle reserved
+
+TIMINGS=testmeta
+
+## The libh5test.a library provides common support code for the tests. We link
+## this library statically because some systems can only link executables to
+## a single shared library and libhdf5 is much bigger than libh5test.
+LIBHDF5=../src/libhdf5.la
+LIB=libh5test.la
+LIB_SRC=h5test.c testframe.c
+LIB_OBJ=$(LIB_SRC:.c=.lo)
+PUB_LIB=
+
+## Temporary files.  These files are the ones created by setting the
+## HDF5_NOCLEANUP environment variable and running `make test' without
+## specifying a file prefix or low-level driver.  Changing the file
+## prefix or low-level driver with environment variables will influence 
+## the temporary file name in ways that the makefile is not aware of.
+MOSTLYCLEAN=cmpd_dset.h5 compact_dataset.h5 dataset.h5 extend.h5 istore.h5   \
+            tfile[1-3].h5 th5s1.h5 th5s3.h5 lheap.h5 ohdr.h5 stab[1-2].h5 \
+            extern_[1-3].h5 extern_[1-4][ab].raw gheap[0-4].h5      \
+            links.h5 links[1-3].h5 big.data big[0-9][0-9][0-9][0-9][0-9].h5  \
+            dtypes[1-7].h5 tattr.h5          \
+            tselect.h5 mtime.h5 unlink.h5 fillval_[0-9].h5 fillval.raw       \
+            mount_[0-9].h5 testmeta.h5 ttime.h5 trefer[1-3].h5 tvltypes.h5   \
+            tvlstr.h5 tvlstr2.h5 flush.h5 enum1.h5 titerate.h5 ttsafe.h5     \
+            tarray1.h5 tgenprop.h5 tmisc1.h5 tmisc2a.h5 tmisc2b.h5 tmisc3.h5 \
+            tmisc4a.h5 tmisc4b.h5 tmisc5.h5 tmisc6.h5 tmisc7.h5 tmisc8.h5    \
+            tmisc9.h5 tmisc10.h5 tmisc11.h5 tmisc12.h5 tmisc13a.h5           \
+            tmisc13b.h5 tmisc14.h5 set_extent_read.h5 set_extent_create.h5   \
+            getname.h5 getname1.h5 getname2.h5 getname3.h5 sec2_file.h5      \
+            family_file000[0-3][0-9].h5 multi_file-[rs].h5 core_file         \
+            new_move_[ab].h5 ntypes.h5 dangle.h5 test_filters.h5 	     \
+	    tstint[1-2].h5 unlink_chunked.h5
+
+CLEAN=$(TIMINGS)
+
+## Source and object files for programs...  The TEST_SRC list contains all the
+## source files and is used for things like dependencies, archiving, etc.  The
+## other source lists are for the individual tests, the files of which may
+## overlap with other tests.
+
+TEST_SRC=big.c bittests.c cache.c cmpd_dset.c dsets.c dtypes.c extend.c      \
+    external.c fillval.c flush1.c flush2.c gheap.c h5test.c hyperslab.c      \
+    istore.c lheap.c links.c mount.c mtime.c ohdr.c stab.c tarray.c          \
+    tattr.c tconfig.c testhdf5.c testmeta.c tfile.c                          \
+    tgenprop.c th5s.c theap.c titerate.c tmeta.c tmisc.c trefer.c trefstr.c  \
+    tselect.c tskiplist.c ttime.c ttst.c tvltypes.c tvlstr.c                 \
+    unlink.c enum.c ttsafe.c ttsafe_dcreate.c ttsafe_error.c                 \
+    ttsafe_cancel.c ttsafe_acreate.c gass_write.c gass_read.c                \
+    gass_append.c srb_read.c srb_write.c srb_append.c stream_test.c          \
+    set_extent.c getname.c file_handle.c ntypes.c dangle.c reserved.c
+
+TEST_OBJ=$(TEST_SRC:.c=.lo)
+
+VFD_LIST=sec2 stdio core split multi family
+
+## Private header files (not to be installed)...
+PRIVATE_HDR=testhdf5.h ttsafe.h
+
+## Additional targets
+.PHONY: timings _timings
+timings _timings: $(TIMINGS)
+	@for timing in $(TIMINGS) dummy; do				      \
+	   if test $$timing != dummy; then				      \
+	      echo "Running $$timing $(TEST_FLAGS)"; 			      \
+	      $(RUNTEST) ./$$timing $(TEST_FLAGS) || exit 1; 		      \
+	   fi;								      \
+	done;
+
+## Programs have to be built before they can be tested!
+##
+check test _test: $(TEST_PROGS)
+
+## How to build the tests...  They all depend on the test and hdf5 libraries.
+$(TEST_PROGS): $(LIB) $(LIBHDF5)
+
+TESTHDF5_OBJ=testhdf5.lo tarray.lo tattr.lo tconfig.lo tfile.lo               \
+    tgenprop.lo th5s.lo theap.lo titerate.lo tmeta.lo tmisc.lo                \
+    trefer.lo trefstr.lo tselect.lo tskiplist.lo ttime.lo ttst.lo             \
+    tvltypes.lo tvlstr.lo
+
+TTS_OBJ=ttsafe.lo ttsafe_dcreate.lo ttsafe_error.lo             \
+    ttsafe_cancel.lo ttsafe_acreate.lo
+
+testhdf5: $(TESTHDF5_OBJ)
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(TESTHDF5_OBJ) $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+lheap: lheap.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ lheap.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+cache: cache.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ cache.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+ohdr: ohdr.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ ohdr.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+stab: stab.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ stab.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+gheap: gheap.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ gheap.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+dsets: dsets.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ dsets.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+bittests: bittests.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ bittests.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+dtypes: dtypes.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ dtypes.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+hyperslab: hyperslab.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ hyperslab.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+istore: istore.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ istore.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+cmpd_dset: cmpd_dset.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ cmpd_dset.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+extend: extend.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ extend.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+external: external.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ external.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+big: big.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ big.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+links: links.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ links.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+mtime: mtime.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ mtime.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+unlink: unlink.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ unlink.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+fillval: fillval.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ fillval.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+mount: mount.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ mount.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+flush1: flush1.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ flush1.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+flush2: flush2.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ flush2.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+enum: enum.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ enum.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+ttsafe: $(TTS_OBJ)
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(TTS_OBJ) $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+gass_write: gass_write.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ gass_write.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+gass_read: gass_read.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ gass_read.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+gass_append: gass_append.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ gass_append.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+set_extent: set_extent.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ set_extent.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+srb_read: srb_read.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ srb_read.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+srb_write: srb_write.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ srb_write.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+srb_append: srb_append.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ srb_append.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+stream_test: stream_test.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ stream_test.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+testmeta: testmeta.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ testmeta.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+getname: getname.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ getname.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+file_handle: file_handle.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ file_handle.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+ntypes: ntypes.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ ntypes.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+dangle: dangle.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ dangle.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+reserved: reserved.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ reserved.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/test/big.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/big.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/big.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,559 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Wednesday, April  8, 1998
+ */
+#include "h5test.h"
+
+const char *FILENAME[] = {
+    "big",
+    NULL
+};
+
+#define DNAME		"big.data"
+
+#define WRT_N		50
+#define WRT_SIZE	4*1024
+#define FAMILY_SIZE	1024*1024*1024
+
+#define MAX_TRIES       100
+
+#if H5_SIZEOF_LONG_LONG >= 8
+#   define GB8LL	((unsigned long_long)8*1024*1024*1024)
+#else
+#   define GB8LL	0	/*cannot do the test*/
+#endif
+
+/* Protocols */
+static void usage(void);
+
+static hsize_t values_used[WRT_N];
+
+/*-------------------------------------------------------------------------
+ * Function:	randll
+ *
+ * Purpose:	Create a random long_long value.
+ *
+ * Return:	Success:	Random value
+ *
+ *		Failure:	never fails
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, November 24, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hsize_t
+randll(hsize_t limit, int current_index)
+{
+    hsize_t     acc;
+    int         overlap = 1;
+    int         i;
+    int         tries = 0;
+
+    /* Generate up to MAX_TRIES random numbers until one of them */
+    /* does not overlap with any previous writes */
+    while(overlap != 0 && tries < MAX_TRIES)
+    {
+        acc = rand ();
+        acc *= rand ();
+        acc = acc % limit;
+        overlap = 0;
+
+        for(i = 0; i < current_index; i++)
+        {
+            if((acc >= values_used[i]) && (acc < values_used[i]+WRT_SIZE))
+                overlap = 1;
+            if((acc+WRT_SIZE >= values_used[i]) && (acc+WRT_SIZE < values_used[i
+]+WRT_SIZE))
+                overlap = 1;
+        }
+        tries++;
+    }
+
+    values_used[current_index]=acc;
+
+    return acc;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	is_sparse
+ *
+ * Purpose:	Determines if the file system of the current working
+ *		directory supports holes.
+ *
+ * Return:	Success:	Non-zero if holes are supported; zero
+ *				otherwise.
+ *
+ *		Failure:	zero
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, July 15, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+is_sparse(void)
+{
+    int		fd;
+    h5_stat_t	sb;
+
+    if ((fd=HDopen("x.h5", O_RDWR|O_TRUNC|O_CREAT, 0666))<0) return 0;
+    if (HDlseek(fd, (off_t)(1024*1024), SEEK_SET)!=1024*1024) return 0;
+    if (5!=HDwrite(fd, "hello", 5)) return 0;
+    if (HDclose(fd)<0) return 0;
+    if (HDstat("x.h5", &sb)<0) return 0;
+    if (HDunlink("x.h5")<0) return 0;
+#ifdef H5_HAVE_STAT_ST_BLOCKS
+    return ((unsigned long)sb.st_blocks*512 < (unsigned long)sb.st_size);
+#else
+    return (0);
+#endif
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	enough_room
+ *
+ * Purpose:	Tries to create a bunch of sparse files to see if quotas will
+ *		get in the way.  Some systems also have problems opening
+ *		enough files and we'll check that too.
+ *
+ * Return:	Success:	Non-zero
+ *
+ *		Failure:	zero
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, August  6, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+enough_room(hid_t fapl)
+{
+    int		ret_value=0;
+    int		fd[68];
+    size_t	i, size = (size_t)1 << 30;
+    char	filename[1024], name[1024];
+
+    /* Initialize file descriptors */
+    for (i=0; i<NELMTS(fd); i++) fd[i] = -1;
+
+    /* Get file name template */
+    assert(H5FD_FAMILY==H5Pget_driver(fapl));
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+
+    /* Create files */
+    for (i=0; i<NELMTS(fd); i++) {
+	HDsnprintf(name, sizeof name, filename, i);
+	if ((fd[i]=HDopen(name, O_RDWR|O_CREAT|O_TRUNC, 0666))<0) {
+	    goto done;
+	}
+	if ((off_t)size != HDlseek(fd[i], (off_t)size, SEEK_SET)) {
+	    goto done;
+	}
+	if (1!=HDwrite(fd[i], "X", 1)) {
+	    goto done;
+	}
+    }
+    ret_value = 1;
+
+ done:
+    for (i=0; i<NELMTS(fd) && fd[i]>=0; i++) {
+	HDsnprintf(name, sizeof name, filename, i);
+	if(HDclose(fd[i])<0)
+            ret_value=0;
+	HDunlink(name);
+    }
+
+    return ret_value;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	writer
+ *
+ * Purpose:	Creates a *big* dataset.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	>0
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April  8, 1998
+ *
+ * Modifications:
+ * 	Robb Matzke, 15 Jul 1998
+ *	Addresses are written to the file DNAME instead of stdout.
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+writer (hid_t fapl, int wrt_n)
+{
+    hsize_t	size1[4] = {8, 1024, 1024, 1024};
+    hsize_t	size2[1] = {GB8LL};
+    hsize_t	hs_start[1];
+    hsize_t	hs_size[1];
+    hid_t	file=-1, space1=-1, space2=-1, mem_space=-1, d1=-1, d2=-1;
+    int		*buf = malloc (sizeof(int) * WRT_SIZE);
+    int		i, j;
+    FILE	*out = fopen(DNAME, "w");
+    char	filename[1024];
+    hid_t       dcpl;
+
+    TESTING("large dataset write");
+
+    /*
+     * We might be on a machine that has 32-bit files, so create an HDF5 file
+     * which is a family of files.  Each member of the family will be 1GB
+     */
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) {
+	goto error;
+    }
+
+    /* Create simple data spaces according to the size specified above. */
+    if ((space1 = H5Screate_simple (4, size1, size1))<0 ||
+	(space2 = H5Screate_simple (1, size2, size2))<0) {
+	goto error;
+    }
+
+    /* Create the datasets */
+/*
+ *  The fix below is provided for bug#921
+ *  H5Dcreate with H5P_DEFAULT creation properties
+ *  will create a set of solid 1GB files; test will crash if quotas are enforced
+ *  or it will take some time to write a file.
+ *  We should create a dataset allocating space late and never writing fill values.
+ *  EIP 4/8/03
+
+    if ((d1=H5Dcreate (file, "d1", H5T_NATIVE_INT, space1, H5P_DEFAULT))<0 ||
+	(d2=H5Dcreate (file, "d2", H5T_NATIVE_INT, space2, H5P_DEFAULT))<0) {
+	goto error;
+    }
+*/
+    dcpl = H5Pcreate(H5P_DATASET_CREATE);
+    H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_LATE);
+    H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER);
+    if ((d1=H5Dcreate (file, "d1", H5T_NATIVE_INT, space1, dcpl))<0 ||
+	(d2=H5Dcreate (file, "d2", H5T_NATIVE_INT, space2, dcpl))<0) {
+	goto error;
+    }
+
+
+    /* Write some things to them randomly */
+    hs_size[0] = WRT_SIZE;
+    if ((mem_space = H5Screate_simple (1, hs_size, hs_size))<0) goto error;
+    for (i=0; i<wrt_n; i++) {
+	hs_start[0] = randll (size2[0], i);
+	HDfprintf (out, "#%03d 0x%016Hx\n", i, hs_start[0]);
+	if (H5Sselect_hyperslab (space2, H5S_SELECT_SET, hs_start, NULL,
+				 hs_size, NULL)<0) goto error;
+	for (j=0; j<WRT_SIZE; j++) {
+	    buf[j] = i+1;
+	}
+	if (H5Dwrite (d2, H5T_NATIVE_INT, mem_space, space2,
+		      H5P_DEFAULT, buf)<0) goto error;
+    }
+
+    if (H5Dclose (d1)<0) goto error;
+    if (H5Dclose (d2)<0) goto error;
+    if (H5Sclose (mem_space)<0) goto error;
+    if (H5Sclose (space1)<0) goto error;
+    if (H5Sclose (space2)<0) goto error;
+    if (H5Fclose (file)<0) goto error;
+    free (buf);
+    fclose(out);
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Dclose(d1);
+	H5Dclose(d2);
+	H5Sclose(space1);
+	H5Sclose(space2);
+	H5Sclose(mem_space);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    if (buf) free(buf);
+    if (out) fclose(out);
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	reader
+ *
+ * Purpose:	Reads some data from random locations in the dataset.
+ *
+ * Return:	Success:	0
+ *
+ * 		Failure:	>0
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, April 10, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+reader (hid_t fapl)
+{
+    FILE	*script = NULL;
+    hid_t	file=-1, mspace=-1, fspace=-1, d2=-1;
+    char	ln[128], *s;
+    hsize_t	hs_offset[1];
+    hsize_t	hs_size[1] = {WRT_SIZE};
+    int		*buf = malloc (sizeof(int) * WRT_SIZE);
+    int		i, j, zero, wrong, nerrors=0;
+    char	filename[1024];
+
+    /* Open script file */
+    script = fopen (DNAME, "r");
+
+    /* Open HDF5 file */
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) goto error;
+
+    /* Open the dataset */
+    if ((d2 = H5Dopen (file, "d2"))<0) goto error;
+    if ((fspace = H5Dget_space (d2))<0) goto error;
+
+    /* Describe `buf' */
+    if ((mspace = H5Screate_simple (1, hs_size, hs_size))<0) goto error;
+
+    /* Read each region */
+    while (fgets (ln, sizeof(ln), script)) {
+	if ('#'!=ln[0]) break;
+	i = (int)strtol (ln+1, &s, 10);
+	hs_offset[0] = HDstrtoll (s, NULL, 0);
+	HDfprintf (stdout, "#%03d 0x%016Hx%47s", i, hs_offset[0], "");
+	fflush (stdout);
+
+	if (H5Sselect_hyperslab (fspace, H5S_SELECT_SET, hs_offset, NULL,
+				 hs_size, NULL)<0) goto error;
+	if (H5Dread (d2, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT, buf)<0) {
+	    goto error;
+	}
+
+	/* Check */
+	for (j=zero=wrong=0; j<WRT_SIZE; j++) {
+	    if (0==buf[j]) zero++;
+	    else if (buf[j]!=i+1) wrong++;
+	}
+	if (zero) {
+	    H5_FAILED();
+	    printf("    %d zero%s\n", zero, 1==zero?"":"s");
+	} else if (wrong) {
+	    SKIPPED();
+	    puts("    Possible overlap with another region.");
+	    nerrors++;
+	} else {
+	    PASSED();
+	}
+    }
+
+    if (H5Dclose (d2)<0) goto error;
+    if (H5Sclose (mspace)<0) goto error;
+    if (H5Sclose (fspace)<0) goto error;
+    if (H5Fclose (file)<0) goto error;
+    free (buf);
+    fclose (script);
+    return nerrors;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Dclose(d2);
+	H5Sclose(mspace);
+	H5Sclose(fspace);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    if (buf) free(buf);
+    if (script) fclose(script);
+    return 1;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	usage
+ *
+ * Purpose:	Print command usage
+ *
+ * Return:	void
+ *
+ * Programmer:	Albert Chent
+ *              Mar 28, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+usage(void)
+{
+    HDfprintf(stdout,
+	"Usage: big [-h] [-c] [-fsize <fsize>}\n"
+	"\t-h\tPrint the help page\n"
+	"\t-c\tFile system Checking skipped.  Caution: this test generates\n"
+	"\t\tmany big files and may fill up the file system.\n"
+	"\t-fsize\tChange family size default to <fsize> where <fsize> is\n"
+	"\t\ta positive float point number.  Default value is %Hu.\n"
+	"Examples:\n"
+	"\tbig -fsize 2.1e9 \t# test with file size just under 2GB\n"
+	"\tbig -fsize 2.2e9 \t# test with file size just above 2GB\n"
+	"\tBe sure the file system can support the file size requested\n"
+	, (hsize_t)FAMILY_SIZE);
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:
+ *
+ * Return:	Success:
+ *
+ *		Failure:
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, April 10, 1998
+ *
+ * Modifications:
+ *		Albert Cheng, 2002/03/28
+ *		Added command option -fsize.
+ *		Albert Cheng, 2002/04/19
+ *		Added command option -c.
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main (int ac, char **av)
+{
+    hid_t	fapl=-1;
+    hsize_t	family_size;
+    hsize_t	family_size_def;	/* default family file size */
+    double	family_size_def_dbl;	/* default family file size */
+    int		cflag=1;		/* check file system before test */
+
+    /* parameters setup */
+    family_size_def = FAMILY_SIZE;
+
+    while (--ac > 0){
+	av++;
+	if (strcmp("-fsize", *av)==0){
+	    /* specify a different family file size */
+	    ac--; av++;
+	    if (ac > 0){
+		family_size_def_dbl = atof(*av);
+                H5_ASSIGN_OVERFLOW(family_size_def,family_size_def_dbl,double,hsize_t);
+		if (family_size_def <= 0)
+		    family_size_def = (hsize_t)FAMILY_SIZE;
+	    }
+	    else{
+		printf("***Missing fsize value***\n");
+		usage();
+		return 1;
+	    }
+	}
+	else if (strcmp("-c", *av)==0){
+	    /* turn off file system check before test */
+	    cflag=0;
+	}
+	else if (strcmp("-h", *av)==0){
+	    usage();
+	    return 0;
+	}else{
+	    usage();
+	    return 1;
+	}
+    }
+
+    /* Reset library */
+    h5_reset();
+    fapl = h5_fileaccess();
+
+    /* The file driver must be the family driver */
+    if (H5FD_FAMILY!=H5Pget_driver(fapl)) {
+	HDfprintf(stdout,
+	   "Changing file drivers to the family driver, %Hu bytes each\n",
+	   family_size_def);
+	if (H5Pset_fapl_family(fapl, family_size_def, H5P_DEFAULT)<0) goto error;
+    } else if (H5Pget_fapl_family(fapl, &family_size, NULL)<0) {
+	goto error;
+    } else if (family_size!=family_size_def) {
+	HDfprintf(stdout, "Changing family member size from %Hu to %Hu\n",
+	       family_size, family_size_def);
+	if (H5Pset_fapl_family(fapl, family_size_def, H5P_DEFAULT)<0)
+	    goto error;
+    }
+
+    if (cflag){
+	/*
+	 * We shouldn't run this test if the file system doesn't support holes
+	 * because we would generate multi-gigabyte files.
+	 */
+	puts("Checking if file system is adequate for this test...");
+	if (sizeof(long_long)<8 || 0==GB8LL) {
+	    puts("Test skipped because sizeof(long_long) is too small. This");
+	    puts("hardware apparently doesn't support 64-bit integer types.");
+	    usage();
+	    goto quit;
+	}
+	if (!is_sparse()) {
+	    puts("Test skipped because file system does not support holes.");
+	    usage();
+	    goto quit;
+	}
+	if (!enough_room(fapl)) {
+	    puts("Test skipped because of quota (file size or num open files).");
+	    usage();
+	    goto quit;
+	}
+	if (sizeof(hsize_t)<=4) {
+	    puts("Test skipped because the hdf5 library was configured with the");
+	    puts("--disable-hsizet flag in order to work around a compiler bug.");
+	    usage();
+	    goto quit;
+	}
+    }
+
+    /* Do the test */
+    if (writer(fapl, WRT_N)) goto error;
+    if (reader(fapl)) goto error;
+    puts("All big tests passed.");
+
+quit:
+    /* End with normal exit code */
+    if (h5_cleanup(FILENAME, fapl)) remove(DNAME);
+    return 0;
+
+error:
+    if (fapl>=0) H5Pclose(fapl);
+    puts("*** TEST FAILED ***");
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/test/bittests.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/bittests.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/bittests.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,551 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Tuesday, June 16, 1998
+ *
+ * Purpose:	Tests functions in H5Tbit.c
+ */
+#include "h5test.h"
+
+#define H5T_PACKAGE
+#include "H5Tpkg.h"
+
+#define NTESTS	100000
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_find
+ *
+ * Purpose:	Test bit find operations.  This is just the basic stuff; more
+ *		rigorous testing will be performed by the other test
+ *		functions.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, June 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_find (void)
+{
+    uint8_t	v1[8];
+    int	i;
+    ssize_t	n;
+
+    TESTING("bit search operations");
+
+    /* The zero length buffer */
+    memset (v1, 0xaa, sizeof v1);
+    n = H5T_bit_find (v1, 0, 0, H5T_BIT_LSB, TRUE);
+    if (-1!=n) {
+	H5_FAILED();
+	puts ("    Zero length test failed (lsb)!");
+	goto failed;
+    }
+    n = H5T_bit_find (v1, 0, 0, H5T_BIT_MSB, TRUE);
+    if (-1!=n) {
+	H5_FAILED();
+	puts ("    Zero length test failed (msb)!");
+	goto failed;
+    }
+
+
+    /* The zero buffer */
+    memset (v1, 0, sizeof v1);
+    n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_LSB, TRUE);
+    if (-1!=n) {
+	H5_FAILED();
+	puts ("    Zero buffer test failed (lsb)!");
+	goto failed;
+    }
+    n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_MSB, TRUE);
+    if (-1!=n) {
+	H5_FAILED();
+	puts ("    Zero buffer test failed (msb)!");
+	goto failed;
+    }
+
+    /* Try all combinations of one byte */
+    for (i=0; i<8*(int)sizeof(v1); i++) {
+	memset (v1, 0, sizeof v1);
+	v1[i/8] = 1<<(i%8);
+	n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_LSB, TRUE);
+	if ((ssize_t)i!=n) {
+	    H5_FAILED();
+	    printf ("    Test for set bit %d failed (lsb)!\n", i);
+	    goto failed;
+	}
+	n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_MSB, TRUE);
+	if ((ssize_t)i!=n) {
+	    H5_FAILED();
+	    printf ("    Test for set bit %d failed (msb)!\n", i);
+	    goto failed;
+	}
+    }
+
+    /* The one buffer */
+    memset (v1, 0xff, sizeof v1);
+    n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_LSB, FALSE);
+    if (-1!=n) {
+	H5_FAILED();
+	puts ("    One buffer test failed (lsb)!");
+	goto failed;
+    }
+    n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_MSB, FALSE);
+    if (-1!=n) {
+	H5_FAILED();
+	puts ("    One buffer test failed (msb)!");
+	goto failed;
+    }
+
+    /* Try all combinations of one byte */
+    for (i=0; i<8*(int)sizeof(v1); i++) {
+	memset (v1, 0xff, sizeof v1);
+	v1[i/8] &= ~(1<<(i%8));
+	n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_LSB, FALSE);
+	if ((ssize_t)i!=n) {
+	    H5_FAILED();
+	    printf ("    Test for clear bit %d failed (lsb)!\n", i);
+	    goto failed;
+	}
+	n = H5T_bit_find (v1, 0, 8*sizeof(v1), H5T_BIT_MSB, FALSE);
+	if ((ssize_t)i!=n) {
+	    H5_FAILED();
+	    printf ("    Test for clear bit %d failed (lsb)!\n", i);
+	    goto failed;
+	}
+    }
+
+
+    PASSED();
+    return 0;
+
+ failed:
+    printf ("    v = 0x");
+    for (i=0; i<(int)sizeof(v1); i++) printf ("%02x", v1[i]);
+    printf ("\n");
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_copy
+ *
+ * Purpose:	Test bit copy operations.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, June 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_copy (void)
+{
+    uint8_t	v1[8], v2[8];
+    size_t	s_offset, d_offset, size;
+    int	i, j;
+    ssize_t	n;
+
+    TESTING("bit copy operations");
+
+    for (i=0; i<NTESTS; i++) {
+	s_offset = HDrand() % (8*sizeof v1);
+	d_offset = HDrand() % (8*sizeof v2);
+	size = (unsigned)HDrand() % MIN (8*sizeof(v1), 8*sizeof(v2));
+	size = MIN3 (size, 8*sizeof(v1)-s_offset, 8*sizeof(v2)-d_offset);
+	memset (v1, 0xff, sizeof v1);
+	memset (v2, 0x00, sizeof v2);
+
+	/* Copy some bits to v2 and make sure something was copied */
+	H5T_bit_copy (v2, d_offset, v1, s_offset, size);
+	for (j=0; j<(int)sizeof(v2); j++) if (v2[j]) break;
+	if (size>0 && j>=(int)sizeof(v2)) {
+	    H5_FAILED();
+	    puts ("    Unabled to find copied region in destination");
+	    goto failed;
+	}
+	if (0==size && j<(int)sizeof(v2)) {
+	    H5_FAILED();
+	    puts ("    Found copied bits when we shouldn't have");
+	    goto failed;
+	}
+
+
+	/* Look for the zeros and ones */
+	n = H5T_bit_find (v2, 0, 8*sizeof(v2), H5T_BIT_LSB, 1);
+	if (size>0 && n!=(ssize_t)d_offset) {
+	    H5_FAILED();
+	    printf ("    Unable to find first copied bit in destination "
+		    "(n=%d)\n", (int)n);
+	    goto failed;
+	}
+	if (0==size && n>=0) {
+	    H5_FAILED();
+	    puts ("    Found copied bits and shouldn't have!");
+	    goto failed;
+	}
+	n = H5T_bit_find (v2, d_offset, 8*sizeof(v2)-d_offset, H5T_BIT_LSB, 0);
+	if (d_offset+size<8*sizeof(v2) && n!=(ssize_t)size) {
+	    H5_FAILED();
+	    printf ("    Unable to find last copied bit in destination "
+		    "(n=%d)\n", (int)n);
+	    goto failed;
+	}
+	if (d_offset+size==8*sizeof(v2) && n>=0) {
+	    H5_FAILED();
+	    puts ("    High-order zeros are present and shouldn't be!");
+	    goto failed;
+	}
+
+	/*
+	 * Look for zeros and ones in reverse order.  This is only to test
+	 * that reverse searches work as expected.
+	 */
+	n = H5T_bit_find (v2, 0, 8*sizeof(v2), H5T_BIT_MSB, 1);
+	if (size>0 && (size_t)(n+1)!=d_offset+size) {
+	    H5_FAILED();
+	    printf ("    Unable to find last copied bit in destination "
+		    "(reverse, n=%d)\n", (int)n);
+	    goto failed;
+	}
+	if (0==size && n>=0) {
+	    H5_FAILED();
+	    puts ("    Found copied bits but shouldn't have (reverse)!");
+	    goto failed;
+	}
+	n = H5T_bit_find (v2, 0, d_offset+size, H5T_BIT_MSB, 0);
+	if (d_offset>0 && n+1!=(ssize_t)d_offset) {
+	    H5_FAILED();
+	    printf ("    Unable to find beginning of copied data "
+		    "(reverse, n=%d)\n", (int)n);
+	    goto failed;
+	}
+	if (0==d_offset && n>=0) {
+	    H5_FAILED();
+	    puts ("    Found leading original data but shouldn't have!");
+	    goto failed;
+	}
+
+    }
+
+    PASSED();
+    return 0;
+
+ failed:
+    printf ("    i=%d, s_offset=%lu, d_offset=%lu, size=%lu\n",
+	    i, (unsigned long)s_offset, (unsigned long)d_offset,
+	    (unsigned long)size);
+    printf ("    s = 0x");
+    for (j=sizeof(v1)-1; j>=0; --j) printf ("%02x", v1[j]);
+    printf ("\n    d = 0x");
+    for (j=sizeof(v2)-1; j>=0; --j) printf ("%02x", v2[j]);
+    printf ("\n");
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_set
+ *
+ * Purpose:	Test bit set operations
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, June 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_set (void)
+{
+    uint8_t	v2[8];
+    size_t	d_offset, size;
+    int	i, j;
+    ssize_t	n;
+
+    TESTING("bit set operations");
+
+    for (i=0; i<NTESTS; i++) {
+	d_offset = HDrand() % (8*sizeof v2);
+	size = (unsigned)HDrand() % (8*sizeof(v2));
+	size = MIN (size, 8*sizeof(v2)-d_offset);
+	memset (v2, 0x00, sizeof v2);
+
+	/* Set some bits in v2 */
+	H5T_bit_set (v2, d_offset, size, TRUE);
+	for (j=0; j<(int)sizeof(v2); j++) if (v2[j]) break;
+	if (size>0 && j>=(int)sizeof(v2)) {
+	    H5_FAILED();
+	    puts ("    Unabled to find set region in buffer");
+	    goto failed;
+	}
+	if (0==size && j<(int)sizeof(v2)) {
+	    H5_FAILED();
+	    puts ("    Found set bits when we shouldn't have");
+	    goto failed;
+	}
+
+
+	/* Look for the zeros and ones */
+	n = H5T_bit_find (v2, 0, 8*sizeof(v2), H5T_BIT_LSB, 1);
+	if (size>0 && n!=(ssize_t)d_offset) {
+	    H5_FAILED();
+	    printf ("    Unable to find first set bit in destination "
+		    "(n=%d)\n", (int)n);
+	    goto failed;
+	}
+	if (0==size && n>=0) {
+	    H5_FAILED();
+	    puts ("    Found set bits and shouldn't have!");
+	    goto failed;
+	}
+	n = H5T_bit_find (v2, d_offset, 8*sizeof(v2)-d_offset, H5T_BIT_LSB, 0);
+	if (d_offset+size<8*sizeof(v2) && n!=(ssize_t)size) {
+	    H5_FAILED();
+	    printf ("    Unable to find last set bit in destination "
+		    "(n=%d)\n", (int)n);
+	    goto failed;
+	}
+	if (d_offset+size==8*sizeof(v2) && n>=0) {
+	    H5_FAILED();
+	    puts ("    High-order zeros are present and shouldn't be!");
+	    goto failed;
+	}
+
+	/*
+	 * Look for zeros and ones in reverse order.  This is only to test
+	 * that reverse searches work as expected.
+	 */
+	n = H5T_bit_find (v2, 0, 8*sizeof(v2), H5T_BIT_MSB, 1);
+	if (size>0 && (size_t)(n+1)!=d_offset+size) {
+	    H5_FAILED();
+	    printf ("    Unable to find last set bit in destination "
+		    "(reverse, n=%d)\n", (int)n);
+	    goto failed;
+	}
+	if (0==size && n>=0) {
+	    H5_FAILED();
+	    puts ("    Found set bits but shouldn't have (reverse)!");
+	    goto failed;
+	}
+	n = H5T_bit_find (v2, 0, d_offset+size, H5T_BIT_MSB, 0);
+	if (d_offset>0 && n+1!=(ssize_t)d_offset) {
+	    H5_FAILED();
+	    printf ("    Unable to find beginning of set bit region "
+		    "(reverse, n=%d)\n", (int)n);
+	    goto failed;
+	}
+	if (0==d_offset && n>=0) {
+	    H5_FAILED();
+	    puts ("    Found leading zeros but shouldn't have!");
+	    goto failed;
+	}
+
+    }
+
+    PASSED();
+    return 0;
+
+ failed:
+    printf ("    i=%d, d_offset=%lu, size=%lu\n",
+	    i, (unsigned long)d_offset, (unsigned long)size);
+    printf ("    d = 0x");
+    for (j=sizeof(v2)-1; j>=0; --j) printf ("%02x", v2[j]);
+    printf ("\n");
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_clear
+ *
+ * Purpose:	Test bit clear operations
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, June 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_clear (void)
+{
+    uint8_t	v2[8];
+    size_t	d_offset, size;
+    int	i, j;
+    ssize_t	n;
+
+    TESTING("bit clear operations");
+
+    for (i=0; i<NTESTS; i++) {
+	d_offset = HDrand() % (8*sizeof v2);
+	size = (unsigned)HDrand() % (8*sizeof(v2));
+	size = MIN (size, 8*sizeof(v2)-d_offset);
+	memset (v2, 0xff, sizeof v2);
+
+	/* Clear some bits in v2 */
+	H5T_bit_set (v2, d_offset, size, FALSE);
+	for (j=0; j<(int)sizeof(v2); j++) if (0xff!=v2[j]) break;
+	if (size>0 && j>=(int)sizeof(v2)) {
+	    H5_FAILED();
+	    puts ("    Unabled to find cleared region in buffer");
+	    goto failed;
+	}
+	if (0==size && j<(int)sizeof(v2)) {
+	    H5_FAILED();
+	    puts ("    Found cleared bits when we shouldn't have");
+	    goto failed;
+	}
+
+
+	/* Look for the zeros and ones */
+	n = H5T_bit_find (v2, 0, 8*sizeof(v2), H5T_BIT_LSB, 0);
+	if (size>0 && n!=(ssize_t)d_offset) {
+	    H5_FAILED();
+	    printf ("    Unable to find first cleared bit in destination "
+		    "(n=%d)\n", (int)n);
+	    goto failed;
+	}
+	if (0==size && n>=0) {
+	    H5_FAILED();
+	    puts ("    Found cleared bits and shouldn't have!");
+	    goto failed;
+	}
+	n = H5T_bit_find (v2, d_offset, 8*sizeof(v2)-d_offset, H5T_BIT_LSB, 1);
+	if (d_offset+size<8*sizeof(v2) && n!=(ssize_t)size) {
+	    H5_FAILED();
+	    printf ("    Unable to find last cleared bit in destination "
+		    "(n=%d)\n", (int)n);
+	    goto failed;
+	}
+	if (d_offset+size==8*sizeof(v2) && n>=0) {
+	    H5_FAILED();
+	    puts ("    High-order ones are present and shouldn't be!");
+	    goto failed;
+	}
+
+	/*
+	 * Look for zeros and ones in reverse order.  This is only to test
+	 * that reverse searches work as expected.
+	 */
+	n = H5T_bit_find (v2, 0, 8*sizeof(v2), H5T_BIT_MSB, 0);
+	if (size>0 && (size_t)(n+1)!=d_offset+size) {
+	    H5_FAILED();
+	    printf ("    Unable to find last cleared bit in destination "
+		    "(reverse, n=%d)\n", (int)n);
+	    goto failed;
+	}
+	if (0==size && n>=0) {
+	    H5_FAILED();
+	    puts ("    Found cleared bits but shouldn't have (reverse)!");
+	    goto failed;
+	}
+	n = H5T_bit_find (v2, 0, d_offset+size, H5T_BIT_MSB, 1);
+	if (d_offset>0 && n+1!=(ssize_t)d_offset) {
+	    H5_FAILED();
+	    printf ("    Unable to find beginning of cleared bit region "
+		    "(reverse, n=%d)\n", (int)n);
+	    goto failed;
+	}
+	if (0==d_offset && n>=0) {
+	    H5_FAILED();
+	    puts ("    Found leading ones but shouldn't have!");
+	    goto failed;
+	}
+
+    }
+
+    PASSED();
+    return 0;
+
+ failed:
+    printf ("    i=%d, d_offset=%lu, size=%lu\n",
+	    i, (unsigned long)d_offset, (unsigned long)size);
+    printf ("    d = 0x");
+    for (j=sizeof(v2)-1; j>=0; --j) printf ("%02x", v2[j]);
+    printf ("\n");
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:
+ *
+ * Return:	Success:
+ *
+ *		Failure:
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, June 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main (void)
+{
+    int	nerrors=0;
+
+    /*
+     * Open the library explicitly for thread-safe builds, so per-thread
+     * things are initialized correctly.
+     */
+#ifdef H5_HAVE_THREADSAFE
+    H5open();
+#endif  /* H5_HAVE_THREADSAFE */
+
+    nerrors += test_find ()<0?1:0;
+    nerrors += test_set  ()<0?1:0;
+    nerrors += test_clear()<0?1:0;
+    nerrors += test_copy ()<0?1:0;
+
+    if (nerrors) {
+        printf("***** %u FAILURE%s! *****\n",
+               nerrors, 1==nerrors?"":"S");
+        exit(1);
+    }
+    printf("All bit tests passed.\n");
+
+#ifdef H5_HAVE_THREADSAFE
+    H5close();
+#endif  /* H5_HAVE_THREADSAFE */
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/test/cache.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/cache.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/cache.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,4160 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  John Mainzer
+ *              6/9/04
+ *
+ *		This file contains tests for the cache implemented in
+ *		H5C.c
+ */
+#include "h5test.h"
+#include "H5Iprivate.h"
+
+const char *FILENAME[] = {
+    "cache",
+    NULL
+};
+
+#include "H5SLprivate.h"
+#include "H5Cprivate.h"
+
+/* with apologies for the abuse of terminology... */
+
+#define PICO_ENTRY_TYPE		0
+#define NANO_ENTRY_TYPE		1
+#define MICRO_ENTRY_TYPE	2
+#define TINY_ENTRY_TYPE		3
+#define SMALL_ENTRY_TYPE	4
+#define MEDIUM_ENTRY_TYPE	5
+#define LARGE_ENTRY_TYPE	6
+#define HUGE_ENTRY_TYPE		7
+#define MONSTER_ENTRY_TYPE	8
+
+#define NUMBER_OF_ENTRY_TYPES	9
+
+#define PICO_ENTRY_SIZE		(size_t)1
+#define NANO_ENTRY_SIZE		(size_t)4
+#define MICRO_ENTRY_SIZE	(size_t)16
+#define TINY_ENTRY_SIZE		(size_t)64
+#define SMALL_ENTRY_SIZE	(size_t)256
+#define MEDIUM_ENTRY_SIZE	(size_t)1024
+#define LARGE_ENTRY_SIZE	(size_t)(4 * 1024)
+#define HUGE_ENTRY_SIZE		(size_t)(16 * 1024)
+#define MONSTER_ENTRY_SIZE	(size_t)(64 * 1024)
+
+#define NUM_PICO_ENTRIES	(10 * 1024)
+#define NUM_NANO_ENTRIES	(10 * 1024)
+#define NUM_MICRO_ENTRIES	(10 * 1024)
+#define NUM_TINY_ENTRIES	(10 * 1024)
+#define NUM_SMALL_ENTRIES	(10 * 1024)
+#define NUM_MEDIUM_ENTRIES	(10 * 1024)
+#define NUM_LARGE_ENTRIES	(10 * 1024)
+#define NUM_HUGE_ENTRIES	(10 * 1024)
+#define NUM_MONSTER_ENTRIES	(10 * 1024)
+
+#define MAX_ENTRIES		(10 * 1024)
+
+#define PICO_BASE_ADDR		(haddr_t)0
+#define NANO_BASE_ADDR		(haddr_t)(PICO_BASE_ADDR + \
+                                      (PICO_ENTRY_SIZE * NUM_PICO_ENTRIES))
+#define MICRO_BASE_ADDR		(haddr_t)(NANO_BASE_ADDR + \
+                                      (NANO_ENTRY_SIZE * NUM_NANO_ENTRIES))
+#define TINY_BASE_ADDR		(haddr_t)(MICRO_BASE_ADDR + \
+			              (MICRO_ENTRY_SIZE * NUM_MICRO_ENTRIES))
+#define SMALL_BASE_ADDR		(haddr_t)(TINY_BASE_ADDR + \
+                                      (TINY_ENTRY_SIZE * NUM_TINY_ENTRIES))
+#define MEDIUM_BASE_ADDR	(haddr_t)(SMALL_BASE_ADDR + \
+                                      (SMALL_ENTRY_SIZE * NUM_SMALL_ENTRIES))
+#define LARGE_BASE_ADDR		(haddr_t)(MEDIUM_BASE_ADDR + \
+                                      (MEDIUM_ENTRY_SIZE * NUM_MEDIUM_ENTRIES))
+#define HUGE_BASE_ADDR		(haddr_t)(LARGE_BASE_ADDR + \
+                                      (LARGE_ENTRY_SIZE * NUM_LARGE_ENTRIES))
+#define MONSTER_BASE_ADDR	(haddr_t)(HUGE_BASE_ADDR + \
+                                      (HUGE_ENTRY_SIZE * NUM_HUGE_ENTRIES))
+
+#define PICO_ALT_BASE_ADDR	(haddr_t)(MONSTER_BASE_ADDR + \
+				     (MONSTER_ENTRY_SIZE * NUM_MONSTER_ENTRIES))
+#define NANO_ALT_BASE_ADDR	(haddr_t)(PICO_ALT_BASE_ADDR + \
+                                      (PICO_ENTRY_SIZE * NUM_PICO_ENTRIES))
+#define MICRO_ALT_BASE_ADDR	(haddr_t)(NANO_ALT_BASE_ADDR + \
+                                      (NANO_ENTRY_SIZE * NUM_NANO_ENTRIES))
+#define TINY_ALT_BASE_ADDR	(haddr_t)(MICRO_ALT_BASE_ADDR + \
+			              (MICRO_ENTRY_SIZE * NUM_MICRO_ENTRIES))
+#define SMALL_ALT_BASE_ADDR	(haddr_t)(TINY_ALT_BASE_ADDR + \
+                                      (TINY_ENTRY_SIZE * NUM_TINY_ENTRIES))
+#define MEDIUM_ALT_BASE_ADDR	(haddr_t)(SMALL_ALT_BASE_ADDR + \
+                                      (SMALL_ENTRY_SIZE * NUM_SMALL_ENTRIES))
+#define LARGE_ALT_BASE_ADDR	(haddr_t)(MEDIUM_ALT_BASE_ADDR + \
+                                      (MEDIUM_ENTRY_SIZE * NUM_MEDIUM_ENTRIES))
+#define HUGE_ALT_BASE_ADDR	(haddr_t)(LARGE_ALT_BASE_ADDR + \
+                                      (LARGE_ENTRY_SIZE * NUM_LARGE_ENTRIES))
+#define MONSTER_ALT_BASE_ADDR	(haddr_t)(HUGE_ALT_BASE_ADDR + \
+                                      (HUGE_ENTRY_SIZE * NUM_HUGE_ENTRIES))
+
+typedef struct test_entry_t
+{
+    H5C_cache_entry_t	  header;	/* entry data used by the cache
+					 * -- must be first
+                               		 */
+    struct test_entry_t * self; 	/* pointer to this entry -- used for
+					 * sanity checking.
+                                         */
+    haddr_t		  addr;         /* where the cache thinks this entry
+                                         * is located
+                                         */
+    hbool_t		  at_main_addr;	/* boolean flag indicating whether
+					 * the entry is supposed to be at
+					 * either its main or alternate
+					 * address.
+     					 */
+    haddr_t		  main_addr;    /* initial location of the entry
+                                         */
+    haddr_t		  alt_addr;	/* location to which the entry
+					 * can be relocated or "renamed"
+                                         */
+    size_t		  size;         /* how big the cache thinks this
+                                         * entry is
+                                         */
+    int32_t		  type;		/* indicates which entry array this
+					 * entry is in
+                                         */
+    int32_t		  index;	/* index in its entry array
+                                         */
+    int32_t		  reads;	/* number of times this entry has
+					 * been loaded.
+                                         */
+    int32_t		  writes;	/* number of times this entry has
+                                         * been written
+                                         */
+    hbool_t		  is_dirty;	/* entry has been modified since
+                                         * last write
+                                         */
+    hbool_t		  is_protected;	/* entry should currently be on
+					 * the cache's protected list.
+                                         */
+} test_entry_t;
+
+/* The following is a cut down copy of the hash table manipulation
+ * macros from H5C.c, which have been further modified to avoid references
+ * to the error reporting macros.  Needless to say, these macros must be
+ * updated as necessary.
+ */
+
+#define H5C__HASH_TABLE_LEN     (32 * 1024) /* must be a power of 2 */
+#define H5C__HASH_MASK          ((size_t)(H5C__HASH_TABLE_LEN - 1) << 3)
+#define H5C__HASH_FCN(x)        (int)(((x) & H5C__HASH_MASK) >> 3)
+
+#define H5C__PRE_HT_SEARCH_SC(cache_ptr, Addr)          \
+if ( ( (cache_ptr) == NULL ) ||                         \
+     ( (cache_ptr)->magic != H5C__H5C_T_MAGIC ) ||      \
+     ( ! H5F_addr_defined(Addr) ) ||                    \
+     ( H5C__HASH_FCN(Addr) < 0 ) ||                     \
+     ( H5C__HASH_FCN(Addr) >= H5C__HASH_TABLE_LEN ) ) { \
+    HDfprintf(stdout, "Pre HT search SC failed.\n");    \
+}
+
+#define H5C__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k) \
+if ( ( (cache_ptr) == NULL ) ||                                   \
+     ( (cache_ptr)->magic != H5C__H5C_T_MAGIC ) ||                \
+     ( (cache_ptr)->index_len < 1 ) ||                            \
+     ( (entry_ptr) == NULL ) ||                                   \
+     ( (cache_ptr)->index_size < (entry_ptr)->size ) ||           \
+     ( H5F_addr_ne((entry_ptr)->addr, (Addr)) ) ||                \
+     ( (entry_ptr)->size <= 0 ) ||                                \
+     ( ((cache_ptr)->index)[k] == NULL ) ||                       \
+     ( ( ((cache_ptr)->index)[k] != (entry_ptr) ) &&              \
+       ( (entry_ptr)->ht_prev == NULL ) ) ||                      \
+     ( ( ((cache_ptr)->index)[k] == (entry_ptr) ) &&              \
+       ( (entry_ptr)->ht_prev != NULL ) ) ||                      \
+     ( ( (entry_ptr)->ht_prev != NULL ) &&                        \
+       ( (entry_ptr)->ht_prev->ht_next != (entry_ptr) ) ) ||      \
+     ( ( (entry_ptr)->ht_next != NULL ) &&                        \
+       ( (entry_ptr)->ht_next->ht_prev != (entry_ptr) ) ) ) {     \
+    HDfprintf(stdout, "Post successful HT search SC failed.\n");  \
+}
+
+
+#define H5C__SEARCH_INDEX(cache_ptr, Addr, entry_ptr)                   \
+{                                                                       \
+    int k;                                                              \
+    int depth = 0;                                                      \
+    H5C__PRE_HT_SEARCH_SC(cache_ptr, Addr)                              \
+    k = H5C__HASH_FCN(Addr);                                            \
+    entry_ptr = ((cache_ptr)->index)[k];                                \
+    while ( ( entry_ptr ) && ( H5F_addr_ne(Addr, (entry_ptr)->addr) ) ) \
+    {                                                                   \
+        (entry_ptr) = (entry_ptr)->ht_next;                             \
+        (depth)++;                                                      \
+    }                                                                   \
+    if ( entry_ptr )                                                    \
+    {                                                                   \
+        H5C__POST_SUC_HT_SEARCH_SC(cache_ptr, entry_ptr, Addr, k)       \
+        if ( entry_ptr != ((cache_ptr)->index)[k] )                     \
+        {                                                               \
+            if ( (entry_ptr)->ht_next )                                 \
+            {                                                           \
+                (entry_ptr)->ht_next->ht_prev = (entry_ptr)->ht_prev;   \
+            }                                                           \
+            HDassert( (entry_ptr)->ht_prev != NULL );                   \
+            (entry_ptr)->ht_prev->ht_next = (entry_ptr)->ht_next;       \
+            ((cache_ptr)->index)[k]->ht_prev = (entry_ptr);             \
+            (entry_ptr)->ht_next = ((cache_ptr)->index)[k];             \
+            (entry_ptr)->ht_prev = NULL;                                \
+            ((cache_ptr)->index)[k] = (entry_ptr);                      \
+        }                                                               \
+    }                                                                   \
+}
+
+
+/* The following is a local copy of the H5C_t structure -- any changes in
+ * that structure must be reproduced here.  The typedef is used to allow
+ * local access to the cache's private data.
+ */
+
+#define H5C__H5C_T_MAGIC                0x005CAC0E
+#define H5C__MAX_NUM_TYPE_IDS           9
+
+typedef struct local_H5C_t
+{
+    uint32_t                    magic;
+
+    int32_t                     max_type_id;
+    const char *                (* type_name_table_ptr);
+
+    size_t                      max_cache_size;
+    size_t                      min_clean_size;
+
+    H5C_write_permitted_func_t  check_write_permitted;
+
+    int32_t                     index_len;
+    size_t                      index_size;
+    H5C_cache_entry_t *         (index[H5C__HASH_TABLE_LEN]);
+
+
+    int32_t                     slist_len;
+    size_t                      slist_size;
+    H5SL_t *                    slist_ptr;
+
+    int32_t                     pl_len;
+    size_t                      pl_size;
+    H5C_cache_entry_t *         pl_head_ptr;
+    H5C_cache_entry_t *         pl_tail_ptr;
+
+    int32_t                     LRU_list_len;
+    size_t                      LRU_list_size;
+    H5C_cache_entry_t *         LRU_head_ptr;
+    H5C_cache_entry_t *         LRU_tail_ptr;
+
+    int32_t                     cLRU_list_len;
+    size_t                      cLRU_list_size;
+    H5C_cache_entry_t *         cLRU_head_ptr;
+    H5C_cache_entry_t *         cLRU_tail_ptr;
+
+    int32_t                     dLRU_list_len;
+    size_t                      dLRU_list_size;
+    H5C_cache_entry_t *         dLRU_head_ptr;
+    H5C_cache_entry_t *         dLRU_tail_ptr;
+
+#if H5C_COLLECT_CACHE_STATS
+
+    /* stats fields */
+    int64_t                     hits[H5C__MAX_NUM_TYPE_IDS];
+    int64_t                     misses[H5C__MAX_NUM_TYPE_IDS];
+    int64_t                     insertions[H5C__MAX_NUM_TYPE_IDS];
+    int64_t                     clears[H5C__MAX_NUM_TYPE_IDS];
+    int64_t                     flushes[H5C__MAX_NUM_TYPE_IDS];
+    int64_t                     evictions[H5C__MAX_NUM_TYPE_IDS];
+    int64_t                     renames[H5C__MAX_NUM_TYPE_IDS];
+
+    int64_t                     total_ht_insertions;
+    int64_t                     total_ht_deletions;
+    int64_t                     successful_ht_searches;
+    int64_t                     total_successful_ht_search_depth;
+    int64_t                     failed_ht_searches;
+    int64_t                     total_failed_ht_search_depth;
+
+    int32_t                     max_index_len;
+    size_t                      max_index_size;
+
+    int32_t                     max_tree_len;
+    size_t                      max_tree_size;
+
+    int32_t                     max_pl_len;
+    size_t                      max_pl_size;
+
+#if H5C_COLLECT_CACHE_ENTRY_STATS
+
+    int32_t                     max_accesses[H5C__MAX_NUM_TYPE_IDS];
+    int32_t                     min_accesses[H5C__MAX_NUM_TYPE_IDS];
+    int32_t                     max_clears[H5C__MAX_NUM_TYPE_IDS];
+    int32_t                     max_flushes[H5C__MAX_NUM_TYPE_IDS];
+    size_t                      max_size[H5C__MAX_NUM_TYPE_IDS];
+
+#endif /* H5C_COLLECT_CACHE_ENTRY_STATS */
+
+#endif /* H5C_COLLECT_CACHE_STATS */
+
+    hbool_t                     skip_file_checks;
+    hbool_t                     skip_dxpl_id_checks;
+
+} local_H5C_t;
+
+
+/* global variable declarations: */
+
+static hbool_t write_permitted = TRUE;
+static hbool_t pass = TRUE; /* set to false on error */
+const char *failure_mssg = NULL;
+
+test_entry_t pico_entries[NUM_PICO_ENTRIES];
+test_entry_t nano_entries[NUM_NANO_ENTRIES];
+test_entry_t micro_entries[NUM_MICRO_ENTRIES];
+test_entry_t tiny_entries[NUM_TINY_ENTRIES];
+test_entry_t small_entries[NUM_SMALL_ENTRIES];
+test_entry_t medium_entries[NUM_MEDIUM_ENTRIES];
+test_entry_t large_entries[NUM_LARGE_ENTRIES];
+test_entry_t huge_entries[NUM_HUGE_ENTRIES];
+test_entry_t monster_entries[NUM_MONSTER_ENTRIES];
+
+test_entry_t * entries[NUMBER_OF_ENTRY_TYPES] =
+{
+    pico_entries,
+    nano_entries,
+    micro_entries,
+    tiny_entries,
+    small_entries,
+    medium_entries,
+    large_entries,
+    huge_entries,
+    monster_entries
+};
+
+const int32_t max_indices[NUMBER_OF_ENTRY_TYPES] =
+{
+    NUM_PICO_ENTRIES - 1,
+    NUM_NANO_ENTRIES - 1,
+    NUM_MICRO_ENTRIES - 1,
+    NUM_TINY_ENTRIES - 1,
+    NUM_SMALL_ENTRIES - 1,
+    NUM_MEDIUM_ENTRIES - 1,
+    NUM_LARGE_ENTRIES - 1,
+    NUM_HUGE_ENTRIES - 1,
+    NUM_MONSTER_ENTRIES - 1
+};
+
+const size_t entry_sizes[NUMBER_OF_ENTRY_TYPES] =
+{
+    PICO_ENTRY_SIZE,
+    NANO_ENTRY_SIZE,
+    MICRO_ENTRY_SIZE,
+    TINY_ENTRY_SIZE,
+    SMALL_ENTRY_SIZE,
+    MEDIUM_ENTRY_SIZE,
+    LARGE_ENTRY_SIZE,
+    HUGE_ENTRY_SIZE,
+    MONSTER_ENTRY_SIZE
+};
+
+const haddr_t base_addrs[NUMBER_OF_ENTRY_TYPES] =
+{
+    PICO_BASE_ADDR,
+    NANO_BASE_ADDR,
+    MICRO_BASE_ADDR,
+    TINY_BASE_ADDR,
+    SMALL_BASE_ADDR,
+    MEDIUM_BASE_ADDR,
+    LARGE_BASE_ADDR,
+    HUGE_BASE_ADDR,
+    MONSTER_BASE_ADDR
+};
+
+const haddr_t alt_base_addrs[NUMBER_OF_ENTRY_TYPES] =
+{
+    PICO_ALT_BASE_ADDR,
+    NANO_ALT_BASE_ADDR,
+    MICRO_ALT_BASE_ADDR,
+    TINY_ALT_BASE_ADDR,
+    SMALL_ALT_BASE_ADDR,
+    MEDIUM_ALT_BASE_ADDR,
+    LARGE_ALT_BASE_ADDR,
+    HUGE_ALT_BASE_ADDR,
+    MONSTER_ALT_BASE_ADDR
+};
+
+const char * entry_type_names[NUMBER_OF_ENTRY_TYPES] =
+{
+    "pico entries -- 1 B",
+    "nano entries -- 4 B",
+    "micro entries -- 16 B",
+    "tiny entries -- 64 B",
+    "small entries -- 256 B",
+    "medium entries -- 1 KB",
+    "large entries -- 4 KB",
+    "huge entries -- 16 KB",
+    "monster entries -- 64 KB"
+};
+
+
+/* call back function declarations: */
+
+static herr_t check_write_permitted(const H5F_t UNUSED * f,
+                                    hid_t UNUSED dxpl_id,
+                                    hbool_t * write_permitted_ptr);
+
+static herr_t clear(H5F_t * f, void * thing, hbool_t dest);
+
+herr_t pico_clear(H5F_t * f, void *  thing, hbool_t dest);
+herr_t nano_clear(H5F_t * f, void *  thing, hbool_t dest);
+herr_t micro_clear(H5F_t * f, void *  thing, hbool_t dest);
+herr_t tiny_clear(H5F_t * f, void *  thing, hbool_t dest);
+herr_t small_clear(H5F_t * f, void *  thing, hbool_t dest);
+herr_t medium_clear(H5F_t * f, void *  thing, hbool_t dest);
+herr_t large_clear(H5F_t * f, void *  thing, hbool_t dest);
+herr_t huge_clear(H5F_t * f, void *  thing, hbool_t dest);
+herr_t monster_clear(H5F_t * f, void *  thing, hbool_t dest);
+
+
+static herr_t destroy(H5F_t UNUSED * f, void * thing);
+
+herr_t pico_dest(H5F_t * f, void * thing);
+herr_t nano_dest(H5F_t * f, void * thing);
+herr_t micro_dest(H5F_t * f, void * thing);
+herr_t tiny_dest(H5F_t * f, void * thing);
+herr_t small_dest(H5F_t * f, void * thing);
+herr_t medium_dest(H5F_t * f, void * thing);
+herr_t large_dest(H5F_t * f, void * thing);
+herr_t huge_dest(H5F_t * f, void *  thing);
+herr_t monster_dest(H5F_t * f, void *  thing);
+
+
+static herr_t flush(H5F_t *f, hid_t UNUSED dxpl_id, hbool_t dest,
+                    haddr_t addr, void *thing);
+
+herr_t pico_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
+                  haddr_t addr, void *thing);
+herr_t nano_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
+                  haddr_t addr, void *thing);
+herr_t micro_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
+                   haddr_t addr, void *thing);
+herr_t tiny_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
+                  haddr_t addr, void *thing);
+herr_t small_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
+                   haddr_t addr, void *thing);
+herr_t medium_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
+                    haddr_t addr, void *thing);
+herr_t large_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
+                   haddr_t addr, void *thing);
+herr_t huge_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
+                  haddr_t addr, void *thing);
+herr_t monster_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest,
+                     haddr_t addr, void *thing);
+
+
+static void * load(H5F_t UNUSED *f, hid_t UNUSED dxpl_id, haddr_t addr,
+                   const void UNUSED *udata1, void UNUSED *udata2);
+
+void * pico_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+                 const void *udata1, void *udata2);
+void * nano_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+                 const void *udata1, void *udata2);
+void * micro_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+                  const void *udata1, void *udata2);
+void * tiny_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+                 const void *udata1, void *udata2);
+void * small_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+                  const void *udata1, void *udata2);
+void * medium_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+                   const void *udata1, void *udata2);
+void * large_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+                  const void *udata1, void *udata2);
+void * huge_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+                 const void *udata1, void *udata2);
+void * monster_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+                    const void *udata1, void *udata2);
+
+
+static herr_t size(H5F_t UNUSED * f, void * thing, size_t * size_ptr);
+
+herr_t pico_size(H5F_t * f, void * thing, size_t * size_ptr);
+herr_t nano_size(H5F_t * f, void * thing, size_t * size_ptr);
+herr_t micro_size(H5F_t * f, void * thing, size_t * size_ptr);
+herr_t tiny_size(H5F_t * f, void * thing, size_t * size_ptr);
+herr_t small_size(H5F_t * f, void * thing, size_t * size_ptr);
+herr_t medium_size(H5F_t * f, void * thing, size_t * size_ptr);
+herr_t large_size(H5F_t * f, void * thing, size_t * size_ptr);
+herr_t huge_size(H5F_t * f, void * thing, size_t * size_ptr);
+herr_t monster_size(H5F_t * f, void * thing, size_t * size_ptr);
+
+
+/* callback table declaration */
+
+static const H5C_class_t types[NUMBER_OF_ENTRY_TYPES] =
+{
+  {
+    PICO_ENTRY_TYPE,
+    (H5C_load_func_t)pico_load,
+    (H5C_flush_func_t)pico_flush,
+    (H5C_dest_func_t)pico_dest,
+    (H5C_clear_func_t)pico_clear,
+    (H5C_size_func_t)pico_size
+  },
+  {
+    NANO_ENTRY_TYPE,
+    (H5C_load_func_t)nano_load,
+    (H5C_flush_func_t)nano_flush,
+    (H5C_dest_func_t)nano_dest,
+    (H5C_clear_func_t)nano_clear,
+    (H5C_size_func_t)nano_size
+  },
+  {
+    MICRO_ENTRY_TYPE,
+    (H5C_load_func_t)micro_load,
+    (H5C_flush_func_t)micro_flush,
+    (H5C_dest_func_t)micro_dest,
+    (H5C_clear_func_t)micro_clear,
+    (H5C_size_func_t)micro_size
+  },
+  {
+    TINY_ENTRY_TYPE,
+    (H5C_load_func_t)tiny_load,
+    (H5C_flush_func_t)tiny_flush,
+    (H5C_dest_func_t)tiny_dest,
+    (H5C_clear_func_t)tiny_clear,
+    (H5C_size_func_t)tiny_size
+  },
+  {
+    SMALL_ENTRY_TYPE,
+    (H5C_load_func_t)small_load,
+    (H5C_flush_func_t)small_flush,
+    (H5C_dest_func_t)small_dest,
+    (H5C_clear_func_t)small_clear,
+    (H5C_size_func_t)small_size
+  },
+  {
+    MEDIUM_ENTRY_TYPE,
+    (H5C_load_func_t)medium_load,
+    (H5C_flush_func_t)medium_flush,
+    (H5C_dest_func_t)medium_dest,
+    (H5C_clear_func_t)medium_clear,
+    (H5C_size_func_t)medium_size
+  },
+  {
+    LARGE_ENTRY_TYPE,
+    (H5C_load_func_t)large_load,
+    (H5C_flush_func_t)large_flush,
+    (H5C_dest_func_t)large_dest,
+    (H5C_clear_func_t)large_clear,
+    (H5C_size_func_t)large_size
+  },
+  {
+    HUGE_ENTRY_TYPE,
+    (H5C_load_func_t)huge_load,
+    (H5C_flush_func_t)huge_flush,
+    (H5C_dest_func_t)huge_dest,
+    (H5C_clear_func_t)huge_clear,
+    (H5C_size_func_t)huge_size
+  },
+  {
+    MONSTER_ENTRY_TYPE,
+    (H5C_load_func_t)monster_load,
+    (H5C_flush_func_t)monster_flush,
+    (H5C_dest_func_t)monster_dest,
+    (H5C_clear_func_t)monster_clear,
+    (H5C_size_func_t)monster_size
+  }
+};
+
+
+/* private function declarations: */
+
+static void addr_to_type_and_index(haddr_t addr,
+                                   int32_t * type_ptr,
+                                   int32_t * index_ptr);
+
+#if 0 /* keep this for a while -- it may be useful */
+static haddr_t type_and_index_to_addr(int32_t type,
+                                      int32_t idx);
+#endif
+
+static void insert_entry(H5C_t * cache_ptr,
+                         int32_t type,
+                         int32_t idx,
+                         hbool_t dirty);
+
+static void rename_entry(H5C_t * cache_ptr,
+                         int32_t type,
+                         int32_t idx,
+                         hbool_t main_addr);
+
+static void protect_entry(H5C_t * cache_ptr,
+                          int32_t type,
+                          int32_t idx);
+
+hbool_t entry_in_cache(H5C_t * cache_ptr,
+                       int32_t type,
+                       int32_t idx);
+
+static void reset_entries(void);
+
+static H5C_t * setup_cache(size_t max_cache_size, size_t min_clean_size);
+
+static void row_major_scan_forward(H5C_t * cache_ptr,
+                                   int32_t lag,
+                                   hbool_t verbose,
+                                   hbool_t reset_stats,
+                                   hbool_t display_stats,
+                                   hbool_t display_detailed_stats,
+                                   hbool_t do_inserts,
+                                   hbool_t dirty_inserts,
+                                   hbool_t do_renames,
+                                   hbool_t rename_to_main_addr,
+                                   hbool_t do_destroys,
+                                   int dirty_destroys,
+                                   int dirty_unprotects);
+
+static void row_major_scan_backward(H5C_t * cache_ptr,
+                                    int32_t lag,
+                                    hbool_t verbose,
+                                    hbool_t reset_stats,
+                                    hbool_t display_stats,
+                                    hbool_t display_detailed_stats,
+                                    hbool_t do_inserts,
+                                    hbool_t dirty_inserts,
+                                    hbool_t do_renames,
+                                    hbool_t rename_to_main_addr,
+                                    hbool_t do_destroys,
+                                    int dirty_destroys,
+                                    int dirty_unprotects);
+
+static void col_major_scan_forward(H5C_t * cache_ptr,
+                                   int32_t lag,
+                                   hbool_t verbose,
+                                   hbool_t reset_stats,
+                                   hbool_t display_stats,
+                                   hbool_t display_detailed_stats,
+                                   hbool_t do_inserts,
+                                   hbool_t dirty_inserts,
+                                   int dirty_unprotects);
+
+static void col_major_scan_backward(H5C_t * cache_ptr,
+                                    int32_t lag,
+                                    hbool_t verbose,
+                                    hbool_t reset_stats,
+                                    hbool_t display_stats,
+                                    hbool_t display_detailed_stats,
+                                    hbool_t do_inserts,
+                                    hbool_t dirty_inserts,
+                                    int dirty_unprotects);
+
+static void smoke_check_1(void);
+static void smoke_check_2(void);
+static void smoke_check_3(void);
+static void smoke_check_4(void);
+static void write_permitted_check(void);
+static void check_flush_protected_err(void);
+static void check_destroy_protected_err(void);
+static void check_duplicate_insert_err(void);
+static void check_rename_err(void);
+static void check_double_protect_err(void);
+static void check_double_unprotect_err(void);
+
+static void takedown_cache(H5C_t * cache_ptr,
+                           hbool_t dump_stats,
+                           hbool_t dump_detailed_stats);
+
+static void flush_cache(H5C_t * cache_ptr,
+                        hbool_t destroy_entries,
+                        hbool_t dump_stats,
+                        hbool_t dump_detailed_stats);
+
+static void unprotect_entry(H5C_t * cache_ptr,
+                            int32_t type,
+                            int32_t idx,
+                            int dirty,
+                            hbool_t deleted);
+
+static void verify_clean(void);
+
+static void verify_unprotected(void);
+
+
+
+/* address translation funtions: */
+
+/*-------------------------------------------------------------------------
+ * Function:	addr_to_type_and_index
+ *
+ * Purpose:	Given an address, compute the type and index of the
+ *		associated entry.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/10/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+addr_to_type_and_index(haddr_t addr,
+                       int32_t * type_ptr,
+                       int32_t * index_ptr)
+{
+    int i;
+    int32_t type;
+    int32_t idx;
+
+    HDassert( type_ptr );
+    HDassert( index_ptr );
+
+    /* we only have a small number of entry types, so just do a
+     * linear search.  If NUMBER_OF_ENTRY_TYPES grows, we may want
+     * to do a binary search instead.
+     */
+    i = 1;
+    if ( addr >= PICO_ALT_BASE_ADDR ) {
+
+        while ( ( i < NUMBER_OF_ENTRY_TYPES ) &&
+                ( addr >= alt_base_addrs[i] ) )
+        {
+            i++;
+        }
+
+    } else {
+
+        while ( ( i < NUMBER_OF_ENTRY_TYPES ) &&
+                ( addr >= base_addrs[i] ) )
+        {
+            i++;
+        }
+    }
+
+    type = i - 1;
+
+    HDassert( ( type >= 0 ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
+
+    if ( addr >= PICO_ALT_BASE_ADDR ) {
+
+        idx = (addr - alt_base_addrs[type]) / entry_sizes[type];
+        HDassert( !((entries[type])[idx].at_main_addr) );
+        HDassert( addr == (entries[type])[idx].alt_addr );
+
+    } else {
+
+        idx = (addr - base_addrs[type]) / entry_sizes[type];
+        HDassert( (entries[type])[idx].at_main_addr );
+        HDassert( addr == (entries[type])[idx].main_addr );
+    }
+
+    HDassert( ( idx >= 0 ) && ( idx <= max_indices[type] ) );
+
+    HDassert( addr == (entries[type])[idx].addr );
+
+    *type_ptr = type;
+    *index_ptr = idx;
+
+    return;
+
+} /* addr_to_type_and_index() */
+
+
+#if 0 /* This function has never been used, but we may want it
+       * some time.  Lets keep it for now.
+       */
+/*-------------------------------------------------------------------------
+ * Function:	type_and_index_to_addr
+ *
+ * Purpose:	Given a type and index of an entry, compute the associated
+ *		addr and return that value.
+ *
+ * Return:	computed addr
+ *
+ * Programmer:	John Mainzer
+ *              6/10/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static haddr_t
+type_and_index_to_addr(int32_t type,
+                       int32_t idx)
+{
+    haddr_t addr;
+
+    HDassert( ( type >= 0 ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
+    HDassert( ( idx >= 0 ) && ( idx <= max_indices[type] ) );
+
+    addr = base_addrs[type] + (((haddr_t)idx) * entry_sizes[type]);
+
+    HDassert( addr == (entries[type])[idx].addr );
+
+    if ( (entries[type])[idx].at_main_addr ) {
+
+        HDassert( addr == (entries[type])[idx].main_addr );
+
+    } else {
+
+        HDassert( addr == (entries[type])[idx].alt_addr );
+    }
+
+    return(addr);
+
+} /* type_and_index_to_addr() */
+
+#endif
+
+
+/* Call back functions: */
+
+/*-------------------------------------------------------------------------
+ *
+ * Function:    H5AC_check_if_write_permitted
+ *
+ * Purpose:     Determine if a write is permitted under the current
+ *              circumstances, and set *write_permitted_ptr accordingly.
+ *              As a general rule it is, but when we are running in parallel
+ *              mode with collective I/O, we must ensure that a read cannot
+ *              cause a write.
+ *
+ *              In the event of failure, the value of *write_permitted_ptr
+ *              is undefined.
+ *
+ * Return:      Non-negative on success/Negative on failure.
+ *
+ * Programmer:  John Mainzer, 5/15/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static herr_t
+check_write_permitted(const H5F_t UNUSED * f,
+                      hid_t UNUSED dxpl_id,
+                      hbool_t * write_permitted_ptr)
+{
+
+    HDassert( write_permitted_ptr );
+    *write_permitted_ptr = write_permitted;
+
+    return(SUCCEED);
+
+} /* check_write_permitted() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	clear & friends
+ *
+ * Purpose:	clear the entry.  The helper functions verify that the
+ *		correct version of clear is being called, and then call
+ *		clear proper.
+ *
+ * Return:	SUCCEED
+ *
+ * Programmer:	John Mainzer
+ *              6/10/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static herr_t
+clear(H5F_t * f,
+      void *  thing,
+      hbool_t dest)
+{
+    test_entry_t * entry_ptr;
+    test_entry_t * base_addr;
+
+    HDassert( thing );
+
+    entry_ptr = (test_entry_t *)thing;
+    base_addr = entries[entry_ptr->type];
+
+    HDassert( entry_ptr->index >= 0 );
+    HDassert( entry_ptr->index <= max_indices[entry_ptr->type] );
+    HDassert( entry_ptr == &(base_addr[entry_ptr->index]) );
+    HDassert( entry_ptr == entry_ptr->self );
+    HDassert( entry_ptr->header.addr == entry_ptr->addr );
+    HDassert( entry_ptr->header.size == entry_ptr->size );
+    HDassert( entry_ptr->size == entry_sizes[entry_ptr->type] );
+
+    entry_ptr->header.is_dirty = FALSE;
+    entry_ptr->is_dirty = FALSE;
+
+    if ( dest ) {
+
+        destroy(f, thing);
+
+    }
+
+    return(SUCCEED);
+
+} /* clear() */
+
+herr_t
+pico_clear(H5F_t * f, void *  thing, hbool_t dest)
+{
+    HDassert ( ((test_entry_t *)thing)->type == PICO_ENTRY_TYPE );
+    return(clear(f, thing, dest));
+}
+
+herr_t
+nano_clear(H5F_t * f, void *  thing, hbool_t dest)
+{
+    HDassert ( ((test_entry_t *)thing)->type == NANO_ENTRY_TYPE );
+    return(clear(f, thing, dest));
+}
+
+herr_t
+micro_clear(H5F_t * f, void *  thing, hbool_t dest)
+{
+    HDassert ( ((test_entry_t *)thing)->type == MICRO_ENTRY_TYPE );
+    return(clear(f, thing, dest));
+}
+
+herr_t
+tiny_clear(H5F_t * f, void *  thing, hbool_t dest)
+{
+    HDassert ( ((test_entry_t *)thing)->type == TINY_ENTRY_TYPE );
+    return(clear(f, thing, dest));
+}
+
+herr_t
+small_clear(H5F_t * f, void *  thing, hbool_t dest)
+{
+    HDassert ( ((test_entry_t *)thing)->type == SMALL_ENTRY_TYPE );
+    return(clear(f, thing, dest));
+}
+
+herr_t
+medium_clear(H5F_t * f, void *  thing, hbool_t dest)
+{
+    HDassert ( ((test_entry_t *)thing)->type == MEDIUM_ENTRY_TYPE );
+    return(clear(f, thing, dest));
+}
+
+herr_t
+large_clear(H5F_t * f, void *  thing, hbool_t dest)
+{
+    HDassert ( ((test_entry_t *)thing)->type == LARGE_ENTRY_TYPE );
+    return(clear(f, thing, dest));
+}
+
+herr_t
+huge_clear(H5F_t * f, void *  thing, hbool_t dest)
+{
+    HDassert ( ((test_entry_t *)thing)->type == HUGE_ENTRY_TYPE );
+    return(clear(f, thing, dest));
+}
+
+herr_t
+monster_clear(H5F_t * f, void *  thing, hbool_t dest)
+{
+    HDassert ( ((test_entry_t *)thing)->type == MONSTER_ENTRY_TYPE );
+    return(clear(f, thing, dest));
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	dest & friends
+ *
+ * Purpose:	Destroy the entry.  The helper functions verify that the
+ *		correct version of dest is being called, and then call
+ *		dest proper.
+ *
+ * Return:	SUCCEED
+ *
+ * Programmer:	John Mainzer
+ *              6/10/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static herr_t
+destroy(H5F_t UNUSED * f,
+        void *         thing)
+{
+    test_entry_t * entry_ptr;
+    test_entry_t * base_addr;
+
+    HDassert( thing );
+
+    entry_ptr = (test_entry_t *)thing;
+    base_addr = entries[entry_ptr->type];
+
+    HDassert ( entry_ptr->index >= 0 );
+    HDassert ( entry_ptr->index <= max_indices[entry_ptr->type] );
+    HDassert( entry_ptr == &(base_addr[entry_ptr->index]) );
+    HDassert( entry_ptr == entry_ptr->self );
+    HDassert( entry_ptr->header.addr == entry_ptr->addr );
+    HDassert( entry_ptr->header.size == entry_ptr->size );
+    HDassert( entry_ptr->size == entry_sizes[entry_ptr->type] );
+
+    HDassert( !(entry_ptr->is_dirty) );
+    HDassert( !(entry_ptr->header.is_dirty) );
+
+    return(SUCCEED);
+
+} /* dest() */
+
+herr_t
+pico_dest(H5F_t * f, void * thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == PICO_ENTRY_TYPE );
+    return(destroy(f, thing));
+}
+
+herr_t
+nano_dest(H5F_t * f, void * thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == NANO_ENTRY_TYPE );
+    return(destroy(f, thing));
+}
+
+herr_t
+micro_dest(H5F_t * f, void * thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == MICRO_ENTRY_TYPE );
+    return(destroy(f, thing));
+}
+
+herr_t
+tiny_dest(H5F_t * f, void * thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == TINY_ENTRY_TYPE );
+    return(destroy(f, thing));
+}
+
+herr_t
+small_dest(H5F_t * f, void * thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == SMALL_ENTRY_TYPE );
+    return(destroy(f, thing));
+}
+
+herr_t
+medium_dest(H5F_t * f, void * thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == MEDIUM_ENTRY_TYPE );
+    return(destroy(f, thing));
+}
+
+herr_t
+large_dest(H5F_t * f, void * thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == LARGE_ENTRY_TYPE );
+    return(destroy(f, thing));
+}
+
+herr_t
+huge_dest(H5F_t * f, void *  thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == HUGE_ENTRY_TYPE );
+    return(destroy(f, thing));
+}
+
+herr_t
+monster_dest(H5F_t * f, void *  thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == MONSTER_ENTRY_TYPE );
+    return(destroy(f, thing));
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	flush & friends
+ *
+ * Purpose:	flush the entry and mark it as clean.  The helper functions
+ *              verify that the correct version of flush is being called,
+ *		and then call flush proper.
+ *
+ * Return:	SUCCEED
+ *
+ * Programmer:	John Mainzer
+ *              6/10/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static herr_t
+flush(H5F_t *f,
+      hid_t UNUSED dxpl_id,
+      hbool_t dest,
+      haddr_t addr,
+      void *thing)
+{
+    test_entry_t * entry_ptr;
+    test_entry_t * base_addr;
+
+    HDassert( thing );
+
+    entry_ptr = (test_entry_t *)thing;
+    base_addr = entries[entry_ptr->type];
+
+    HDassert( entry_ptr->index >= 0 );
+    HDassert( entry_ptr->index <= max_indices[entry_ptr->type] );
+    HDassert( entry_ptr == &(base_addr[entry_ptr->index]) );
+    HDassert( entry_ptr == entry_ptr->self );
+    HDassert( entry_ptr->header.addr == entry_ptr->addr );
+    HDassert( entry_ptr->addr == addr );
+    HDassert( entry_ptr->header.size == entry_ptr->size );
+    HDassert( entry_ptr->size == entry_sizes[entry_ptr->type] );
+
+    if ( ( ! write_permitted ) && ( entry_ptr->is_dirty ) ) {
+
+        pass = FALSE;
+        failure_mssg = "called flush when write_permitted is FALSE.";
+    }
+
+    if ( entry_ptr->is_dirty ) {
+
+        (entry_ptr->writes)++;
+        entry_ptr->is_dirty = FALSE;
+        entry_ptr->header.is_dirty = FALSE;
+    }
+
+    if ( dest ) {
+
+        destroy(f, thing);
+
+    }
+
+    return(SUCCEED);
+
+} /* flush() */
+
+herr_t
+pico_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr, void *thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == PICO_ENTRY_TYPE );
+    return(flush(f, dxpl_id, dest, addr, thing));
+}
+
+herr_t
+nano_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr, void *thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == NANO_ENTRY_TYPE );
+    return(flush(f, dxpl_id, dest, addr, thing));
+}
+
+herr_t
+micro_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr, void *thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == MICRO_ENTRY_TYPE );
+    return(flush(f, dxpl_id, dest, addr, thing));
+}
+
+herr_t
+tiny_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr, void *thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == TINY_ENTRY_TYPE );
+    return(flush(f, dxpl_id, dest, addr, thing));
+}
+
+herr_t
+small_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr, void *thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == SMALL_ENTRY_TYPE );
+    return(flush(f, dxpl_id, dest, addr, thing));
+}
+
+herr_t
+medium_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr, void *thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == MEDIUM_ENTRY_TYPE );
+    return(flush(f, dxpl_id, dest, addr, thing));
+}
+
+herr_t
+large_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr, void *thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == LARGE_ENTRY_TYPE );
+    return(flush(f, dxpl_id, dest, addr, thing));
+}
+
+herr_t
+huge_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr, void *thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == HUGE_ENTRY_TYPE );
+    return(flush(f, dxpl_id, dest, addr, thing));
+}
+
+herr_t
+monster_flush(H5F_t *f, hid_t dxpl_id, hbool_t dest, haddr_t addr, void *thing)
+{
+    HDassert ( ((test_entry_t *)thing)->type == MONSTER_ENTRY_TYPE );
+    return(flush(f, dxpl_id, dest, addr, thing));
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	load & friends
+ *
+ * Purpose:	"load" the requested entry and mark it as clean.  The
+ *		helper functions verify that the correct version of load
+ *		 is being called, and then call load proper.
+ *
+ * Return:	SUCCEED
+ *
+ * Programmer:	John Mainzer
+ *              6/10/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void *
+load(H5F_t UNUSED *f,
+     hid_t UNUSED dxpl_id,
+     haddr_t addr,
+     const void UNUSED *udata1,
+     void UNUSED *udata2)
+{
+    int32_t type;
+    int32_t idx;
+    test_entry_t * entry_ptr;
+    test_entry_t * base_addr;
+
+    addr_to_type_and_index(addr, &type, &idx);
+
+    base_addr = entries[type];
+    entry_ptr = &(base_addr[idx]);
+
+    HDassert( entry_ptr->type == type );
+    HDassert( entry_ptr->type >= 0 );
+    HDassert( entry_ptr->type < NUMBER_OF_ENTRY_TYPES );
+    HDassert( entry_ptr->index == idx );
+    HDassert( entry_ptr->index >= 0 );
+    HDassert( entry_ptr->index <= max_indices[type] );
+    HDassert( entry_ptr == entry_ptr->self );
+    HDassert( entry_ptr->addr == addr );
+    HDassert( entry_ptr->size == entry_sizes[type] );
+
+    entry_ptr->is_dirty = FALSE;
+
+    (entry_ptr->reads)++;
+
+    return(entry_ptr);
+
+} /* load() */
+
+void *
+pico_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+          const void *udata1, void *udata2)
+{
+    return(load(f, dxpl_id, addr, udata1, udata2));
+}
+
+void *
+nano_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+          const void *udata1, void *udata2)
+{
+    return(load(f, dxpl_id, addr, udata1, udata2));
+}
+
+void *
+micro_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+           const void *udata1, void *udata2)
+{
+    return(load(f, dxpl_id, addr, udata1, udata2));
+}
+
+void *
+tiny_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+          const void *udata1, void *udata2)
+{
+    return(load(f, dxpl_id, addr, udata1, udata2));
+}
+
+void *
+small_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+           const void *udata1, void *udata2)
+{
+    return(load(f, dxpl_id, addr, udata1, udata2));
+}
+
+void *
+medium_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+            const void *udata1, void *udata2)
+{
+    return(load(f, dxpl_id, addr, udata1, udata2));
+}
+
+void *
+large_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+           const void *udata1, void *udata2)
+{
+    return(load(f, dxpl_id, addr, udata1, udata2));
+}
+
+void *
+huge_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+          const void *udata1, void *udata2)
+{
+    return(load(f, dxpl_id, addr, udata1, udata2));
+}
+
+void *
+monster_load(H5F_t *f, hid_t dxpl_id, haddr_t addr,
+             const void *udata1, void *udata2)
+{
+    return(load(f, dxpl_id, addr, udata1, udata2));
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	size & friends
+ *
+ * Purpose:	Get the size of the specified entry.  The helper functions
+ *		verify that the correct version of size is being called,
+ *		and then call size proper.
+ *
+ * Return:	SUCCEED
+ *
+ * Programmer:	John Mainzer
+ *              6/10/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static herr_t
+size(H5F_t UNUSED *  f,
+     void *   thing,
+     size_t * size_ptr)
+{
+    test_entry_t * entry_ptr;
+    test_entry_t * base_addr;
+
+    HDassert( size_ptr );
+    HDassert( thing );
+
+    entry_ptr = (test_entry_t *)thing;
+    base_addr = entries[entry_ptr->type];
+
+    HDassert( entry_ptr->index >= 0 );
+    HDassert( entry_ptr->index <= max_indices[entry_ptr->type] );
+    HDassert( entry_ptr == &(base_addr[entry_ptr->index]) );
+    HDassert( entry_ptr == entry_ptr->self );
+    HDassert( entry_ptr->header.addr == entry_ptr->addr );
+    HDassert( entry_ptr->size == entry_sizes[entry_ptr->type] );
+
+    *size_ptr = entry_ptr->size;
+
+    return(SUCCEED);
+
+} /* size() */
+
+herr_t
+pico_size(H5F_t * f, void * thing, size_t * size_ptr)
+{
+    HDassert ( ((test_entry_t *)thing)->type == PICO_ENTRY_TYPE );
+    return(size(f, thing, size_ptr));
+}
+
+herr_t
+nano_size(H5F_t * f, void * thing, size_t * size_ptr)
+{
+    HDassert ( ((test_entry_t *)thing)->type == NANO_ENTRY_TYPE );
+    return(size(f, thing, size_ptr));
+}
+
+herr_t
+micro_size(H5F_t * f, void * thing, size_t * size_ptr)
+{
+    HDassert ( ((test_entry_t *)thing)->type == MICRO_ENTRY_TYPE );
+    return(size(f, thing, size_ptr));
+}
+
+herr_t
+tiny_size(H5F_t * f, void * thing, size_t * size_ptr)
+{
+    HDassert ( ((test_entry_t *)thing)->type == TINY_ENTRY_TYPE );
+    return(size(f, thing, size_ptr));
+}
+
+herr_t
+small_size(H5F_t * f, void * thing, size_t * size_ptr)
+{
+    HDassert ( ((test_entry_t *)thing)->type == SMALL_ENTRY_TYPE );
+    return(size(f, thing, size_ptr));
+}
+
+herr_t
+medium_size(H5F_t * f, void * thing, size_t * size_ptr)
+{
+    HDassert ( ((test_entry_t *)thing)->type == MEDIUM_ENTRY_TYPE );
+    return(size(f, thing, size_ptr));
+}
+
+herr_t
+large_size(H5F_t * f, void * thing, size_t * size_ptr)
+{
+    HDassert ( ((test_entry_t *)thing)->type == LARGE_ENTRY_TYPE );
+    return(size(f, thing, size_ptr));
+}
+
+herr_t
+huge_size(H5F_t * f, void * thing, size_t * size_ptr)
+{
+    HDassert ( ((test_entry_t *)thing)->type == HUGE_ENTRY_TYPE );
+    return(size(f, thing, size_ptr));
+}
+
+herr_t
+monster_size(H5F_t * f, void * thing, size_t * size_ptr)
+{
+    HDassert ( ((test_entry_t *)thing)->type == MONSTER_ENTRY_TYPE );
+    return(size(f, thing, size_ptr));
+}
+
+
+/**************************************************************************/
+/**************************************************************************/
+/************************** test utility functions: ***********************/
+/**************************************************************************/
+/**************************************************************************/
+
+/*-------------------------------------------------------------------------
+ * Function:	entry_in_cache
+ *
+ * Purpose:	Given a pointer to a cache, an entry type, and an index,
+ *		determine if the entry is currently in the cache.
+ *
+ * Return:	TRUE if the entry is in the cache, and FALSE otherwise.
+ *
+ * Programmer:	John Mainzer
+ *              6/10/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+hbool_t
+entry_in_cache(H5C_t * cache_ptr,
+               int32_t type,
+               int32_t idx)
+{
+    hbool_t in_cache = FALSE; /* will set to TRUE if necessary */
+    test_entry_t * base_addr;
+    test_entry_t * entry_ptr;
+    H5C_cache_entry_t * test_ptr = NULL;
+
+    HDassert( cache_ptr );
+    HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
+    HDassert( ( 0 <= idx ) && ( idx <= max_indices[type] ) );
+
+    base_addr = entries[type];
+    entry_ptr = &(base_addr[idx]);
+
+    HDassert( entry_ptr->index == idx );
+    HDassert( entry_ptr->type == type );
+    HDassert( entry_ptr == entry_ptr->self );
+
+    H5C__SEARCH_INDEX(((local_H5C_t *)cache_ptr), entry_ptr->addr, test_ptr)
+
+    if ( test_ptr != NULL ) {
+
+        in_cache = TRUE;
+        HDassert( test_ptr == (H5C_cache_entry_t *)entry_ptr );
+        HDassert( entry_ptr->addr == entry_ptr->header.addr );
+    }
+
+    return(in_cache);
+
+} /* entry_in_cache() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	reset_entries
+ *
+ * Purpose:	reset the contents of the entries arrays to know values.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/10/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+reset_entries(void)
+
+{
+    int i;
+    int j;
+    int32_t max_index;
+    haddr_t addr = 0;
+    haddr_t alt_addr = PICO_ALT_BASE_ADDR;
+    size_t entry_size;
+    test_entry_t * base_addr;
+
+    for ( i = 0; i < NUMBER_OF_ENTRY_TYPES; i++ )
+    {
+        entry_size = entry_sizes[i];
+        max_index = max_indices[i];
+        base_addr = entries[i];
+
+        HDassert( base_addr );
+
+        for ( j = 0; j <= max_index; j++ )
+        {
+            /* one can argue that we should fill the header with garbage.
+             * If this is desired, we can simply comment out the header
+             * initialization - the headers will be full of garbage soon
+             * enough.
+             */
+
+            base_addr[j].header.addr = (haddr_t)0;
+            base_addr[j].header.size = (size_t)0;
+            base_addr[j].header.type = NULL;
+            base_addr[j].header.is_dirty = FALSE;
+            base_addr[j].header.is_protected = FALSE;
+            base_addr[j].header.next = NULL;
+            base_addr[j].header.prev = NULL;
+            base_addr[j].header.aux_next = NULL;
+            base_addr[j].header.aux_prev = NULL;
+
+            base_addr[j].self = &(base_addr[j]);
+            base_addr[j].addr = addr;
+            base_addr[j].at_main_addr = TRUE;
+            base_addr[j].main_addr = addr;
+            base_addr[j].alt_addr = alt_addr;
+            base_addr[j].size = entry_size;
+            base_addr[j].type = i;
+            base_addr[j].index = j;
+            base_addr[j].reads = 0;
+            base_addr[j].writes = 0;
+            base_addr[j].is_dirty = FALSE;
+            base_addr[j].is_protected = FALSE;
+
+            addr += (haddr_t)entry_size;
+            alt_addr += (haddr_t)entry_size;
+        }
+    }
+
+    return;
+
+} /* reset_entries() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	verify_clean
+ *
+ * Purpose:	Verify that all cache entries are marked as clean.  If any
+ *		are not, set pass to FALSE.
+ *
+ *		Do nothing if pass is FALSE on entry.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/10/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+verify_clean(void)
+
+{
+    int i;
+    int j;
+    int dirty_count = 0;
+    int32_t max_index;
+    test_entry_t * base_addr;
+
+    if ( pass ) {
+
+        for ( i = 0; i < NUMBER_OF_ENTRY_TYPES; i++ )
+        {
+            max_index = max_indices[i];
+            base_addr = entries[i];
+
+            HDassert( base_addr );
+
+            for ( j = 0; j <= max_index; j++ )
+            {
+                if ( ( base_addr[j].header.is_dirty ) || ( base_addr[j].is_dirty ) ) {
+
+                    dirty_count++;
+                }
+            }
+        }
+
+        if ( dirty_count > 0 ) {
+
+            pass = FALSE;
+            failure_mssg = "verify_clean() found dirty entry(s).";
+        }
+    }
+
+    return;
+
+} /* verify_clean() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	verify_unprotected
+ *
+ * Purpose:	Verify that no cache entries are marked as protected.  If
+ *		any are, set pass to FALSE.
+ *
+ *		Do nothing if pass is FALSE on entry.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/10/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+verify_unprotected(void)
+
+{
+    int i;
+    int j;
+    int protected_count = 0;
+    int32_t max_index;
+    test_entry_t * base_addr;
+
+    if ( pass ) {
+
+        for ( i = 0; i < NUMBER_OF_ENTRY_TYPES; i++ )
+        {
+            max_index = max_indices[i];
+            base_addr = entries[i];
+
+            HDassert( base_addr );
+
+            for ( j = 0; j <= max_index; j++ )
+            {
+                HDassert( base_addr[j].header.is_protected ==
+                          base_addr[j].is_protected );
+
+                if ( ( base_addr[j].header.is_protected ) ||
+                     ( base_addr[j].is_protected ) ) {
+
+                    protected_count++;
+                }
+            }
+        }
+
+        if ( protected_count > 0 ) {
+
+            pass = FALSE;
+            failure_mssg = "verify_unprotected() found protected entry(s).";
+        }
+    }
+
+    return;
+
+} /* verify_unprotected() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	setup_cache()
+ *
+ * Purpose:	Allocate a cache of the desired size and configure it for
+ *		use in the test bed.  Return a pointer to the new cache
+ *		structure.
+ *
+ * Return:	Pointer to new cache, or NULL on failure.
+ *
+ * Programmer:	John Mainzer
+ *              6/11/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static H5C_t *
+setup_cache(size_t max_cache_size,
+            size_t min_clean_size)
+{
+    H5C_t * cache_ptr = NULL;
+
+    cache_ptr = H5C_create(max_cache_size,
+                           min_clean_size,
+                           (NUMBER_OF_ENTRY_TYPES - 1),
+			   (const char **)entry_type_names,
+                           check_write_permitted);
+
+    if ( cache_ptr == NULL ) {
+
+        pass = FALSE;
+        failure_mssg = "H5C_create() returned NULL.";
+
+    } else {
+
+        H5C_set_skip_flags(cache_ptr, TRUE, TRUE);
+    }
+
+    return(cache_ptr);
+
+} /* setup_cache() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	takedown_cache()
+ *
+ * Purpose:	Flush the specified cache and disable it.  If requested,
+ *		dump stats first.  If pass is FALSE, do nothing.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/11/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+takedown_cache(H5C_t * cache_ptr,
+               hbool_t dump_stats,
+               hbool_t dump_detailed_stats)
+{
+    HDassert(cache_ptr);
+
+    if ( pass ) {
+
+        if ( dump_stats ) {
+
+            H5C_stats(cache_ptr, "test cache", dump_detailed_stats);
+        }
+
+        H5C_dest(NULL, -1, -1, cache_ptr);
+    }
+
+    return;
+
+} /* takedown_cache() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	flush_cache()
+ *
+ * Purpose:	Flush the specified cache, destroying all entries if
+                requested.  If requested, dump stats first.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/23/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+flush_cache(H5C_t * cache_ptr,
+            hbool_t destroy_entries,
+            hbool_t dump_stats,
+            hbool_t dump_detailed_stats)
+{
+    herr_t result = 0;
+
+    HDassert(cache_ptr);
+
+    verify_unprotected();
+
+    if ( pass ) {
+
+        if ( destroy_entries ) {
+
+            result = H5C_flush_cache(NULL, -1, -1, cache_ptr,
+                                     H5F_FLUSH_INVALIDATE);
+
+        } else {
+
+            result = H5C_flush_cache(NULL, -1, -1, cache_ptr, 0);
+        }
+    }
+
+    if ( dump_stats ) {
+
+        H5C_stats(cache_ptr, "test cache", dump_detailed_stats);
+    }
+
+    if ( result < 0 ) {
+
+        pass = FALSE;
+        failure_mssg = "error in H5C_flush_cache().";
+    }
+
+    return;
+
+} /* flush_cache() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	insert_entry()
+ *
+ * Purpose:	Insert the entry indicated by the type and index.  Mark
+ *		it clean or dirty as indicated.
+ *
+ *		Note that I don't see much practical use for inserting
+ *		a clean entry, but the interface permits it so we should
+ *		test it.
+ *
+ *		Do nothing if pass is false.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/16/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+insert_entry(H5C_t * cache_ptr,
+             int32_t type,
+             int32_t idx,
+             hbool_t dirty)
+{
+    herr_t result;
+    test_entry_t * base_addr;
+    test_entry_t * entry_ptr;
+
+    if ( pass ) {
+
+        HDassert( cache_ptr );
+        HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
+        HDassert( ( 0 <= idx ) && ( idx <= max_indices[type] ) );
+
+        base_addr = entries[type];
+        entry_ptr = &(base_addr[idx]);
+
+        HDassert( entry_ptr->index == idx );
+        HDassert( entry_ptr->type == type );
+        HDassert( entry_ptr == entry_ptr->self );
+        HDassert( !(entry_ptr->is_protected) );
+
+        if ( dirty ) {
+
+            (entry_ptr->header).is_dirty = dirty;
+            entry_ptr->is_dirty = dirty;
+        }
+
+        result = H5C_insert_entry(NULL, -1, -1, cache_ptr, &(types[type]),
+                                  entry_ptr->addr, (void *)entry_ptr);
+
+        if ( ( result < 0 ) ||
+             ( entry_ptr->header.is_protected ) ||
+             ( entry_ptr->header.type != &(types[type]) ) ||
+             ( entry_ptr->size != entry_ptr->header.size ) ||
+             ( entry_ptr->addr != entry_ptr->header.addr ) ) {
+
+            pass = FALSE;
+            failure_mssg = "error in H5C_insert().";
+        }
+
+        HDassert( ((entry_ptr->header).type)->id == type );
+    }
+
+    return;
+
+} /* insert_entry() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	rename_entry()
+ *
+ * Purpose:	Rename the entry indicated by the type and index to its
+ *		main or alternate address as indicated.  If the entry is
+ *		already at the desired entry, do nothing.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/21/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+rename_entry(H5C_t * cache_ptr,
+             int32_t type,
+             int32_t idx,
+             hbool_t main_addr)
+{
+    herr_t         result;
+    hbool_t	   done = TRUE; /* will set to FALSE if we have work to do */
+    haddr_t        old_addr = HADDR_UNDEF;
+    haddr_t        new_addr = HADDR_UNDEF;
+    test_entry_t * base_addr;
+    test_entry_t * entry_ptr;
+
+    HDassert( cache_ptr );
+    HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
+    HDassert( ( 0 <= idx ) && ( idx <= max_indices[type] ) );
+
+    base_addr = entries[type];
+    entry_ptr = &(base_addr[idx]);
+
+    HDassert( entry_ptr->index == idx );
+    HDassert( entry_ptr->type == type );
+    HDassert( entry_ptr == entry_ptr->self );
+    HDassert( !(entry_ptr->is_protected) );
+    HDassert( !(entry_ptr->header.is_protected) );
+
+    if ( entry_ptr->at_main_addr && !main_addr ) {
+
+        /* rename to alt addr */
+
+        HDassert( entry_ptr->addr == entry_ptr->main_addr );
+
+        done = FALSE;
+        old_addr = entry_ptr->addr;
+        new_addr = entry_ptr->alt_addr;
+
+    } else if ( !(entry_ptr->at_main_addr) && main_addr ) {
+
+        /* rename to main addr */
+
+        HDassert( entry_ptr->addr == entry_ptr->alt_addr );
+
+        done = FALSE;
+        old_addr = entry_ptr->addr;
+        new_addr = entry_ptr->main_addr;
+    }
+
+    if ( ! done ) {
+
+        result = H5C_rename_entry(cache_ptr, &(types[type]),
+                                  old_addr, new_addr);
+    }
+
+    if ( ! done ) {
+
+        if ( ( result < 0 ) || ( entry_ptr->header.addr != new_addr ) ) {
+
+            pass = FALSE;
+            failure_mssg = "error in H5C_rename_entry().";
+
+        } else {
+
+            entry_ptr->addr = new_addr;
+            entry_ptr->at_main_addr = main_addr;
+        }
+    }
+
+    HDassert( ((entry_ptr->header).type)->id == type );
+
+    return;
+
+} /* insert_entry() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	protect_entry()
+ *
+ * Purpose:	Protect the entry indicated by the type and index.
+ *
+ *		Do nothing if pass is FALSE on entry.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/11/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+protect_entry(H5C_t * cache_ptr,
+              int32_t type,
+              int32_t idx)
+{
+    /* const char * fcn_name = "protect_entry()"; */
+    test_entry_t * base_addr;
+    test_entry_t * entry_ptr;
+    H5C_cache_entry_t * cache_entry_ptr;
+
+    if ( pass ) {
+
+        HDassert( cache_ptr );
+        HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
+        HDassert( ( 0 <= idx ) && ( idx <= max_indices[type] ) );
+
+        base_addr = entries[type];
+        entry_ptr = &(base_addr[idx]);
+
+        HDassert( entry_ptr->index == idx );
+        HDassert( entry_ptr->type == type );
+        HDassert( entry_ptr == entry_ptr->self );
+        HDassert( !(entry_ptr->is_protected) );
+
+        cache_entry_ptr = H5C_protect(NULL, -1, -1, cache_ptr, &(types[type]),
+                                      entry_ptr->addr, NULL, NULL);
+
+        if ( ( cache_entry_ptr != (void *)entry_ptr ) ||
+             ( !(entry_ptr->header.is_protected) ) ||
+             ( entry_ptr->header.type != &(types[type]) ) ||
+             ( entry_ptr->size != entry_ptr->header.size ) ||
+             ( entry_ptr->addr != entry_ptr->header.addr ) ) {
+
+            pass = FALSE;
+            failure_mssg = "error in H5C_protect().";
+
+        } else {
+
+            entry_ptr->is_protected = TRUE;
+
+        }
+
+        HDassert( ((entry_ptr->header).type)->id == type );
+    }
+
+    return;
+
+} /* protect_entry() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	unprotect_entry()
+ *
+ * Purpose:	Unprotect the entry indicated by the type and index.
+ *
+ *		Do nothing if pass is FALSE on entry.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/12/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define NO_CHANGE	-1
+
+static void
+unprotect_entry(H5C_t * cache_ptr,
+                int32_t type,
+                int32_t idx,
+                int dirty,
+                hbool_t deleted)
+{
+    /* const char * fcn_name = "unprotect_entry()"; */
+    herr_t result;
+    test_entry_t * base_addr;
+    test_entry_t * entry_ptr;
+
+    if ( pass ) {
+
+        HDassert( cache_ptr );
+        HDassert( ( 0 <= type ) && ( type < NUMBER_OF_ENTRY_TYPES ) );
+        HDassert( ( 0 <= idx ) && ( idx <= max_indices[type] ) );
+
+        base_addr = entries[type];
+        entry_ptr = &(base_addr[idx]);
+
+        HDassert( entry_ptr->index == idx );
+        HDassert( entry_ptr->type == type );
+        HDassert( entry_ptr == entry_ptr->self );
+        HDassert( entry_ptr->header.is_protected );
+        HDassert( entry_ptr->is_protected );
+
+        if ( ( dirty == TRUE ) || ( dirty == FALSE ) ) {
+
+            entry_ptr->header.is_dirty = dirty;
+            entry_ptr->is_dirty = dirty;
+        }
+
+        result = H5C_unprotect(NULL, -1, -1, cache_ptr, &(types[type]),
+                               entry_ptr->addr, (void *)entry_ptr, deleted);
+
+        if ( ( result < 0 ) ||
+             ( entry_ptr->header.is_protected ) ||
+             ( entry_ptr->header.type != &(types[type]) ) ||
+             ( entry_ptr->size != entry_ptr->header.size ) ||
+             ( entry_ptr->addr != entry_ptr->header.addr ) ) {
+
+            pass = FALSE;
+            failure_mssg = "error in H5C_unprotect().";
+
+        }
+        else
+        {
+            entry_ptr->is_protected = FALSE;
+        }
+
+        HDassert( ((entry_ptr->header).type)->id == type );
+    }
+
+    return;
+
+} /* unprotect_entry() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	row_major_scan_forward()
+ *
+ * Purpose:	Do a sequence of inserts, protects, unprotects, renames,
+ *		destroys while scanning through the set of entries.  If
+ *		pass is false on entry, do nothing.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/12/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+row_major_scan_forward(H5C_t * cache_ptr,
+                       int32_t lag,
+                       hbool_t verbose,
+                       hbool_t reset_stats,
+                       hbool_t display_stats,
+                       hbool_t display_detailed_stats,
+                       hbool_t do_inserts,
+                       hbool_t dirty_inserts,
+                       hbool_t do_renames,
+                       hbool_t rename_to_main_addr,
+                       hbool_t do_destroys,
+                       int dirty_destroys,
+                       int dirty_unprotects)
+{
+    const char * fcn_name = "row_major_scan_forward";
+    int32_t type;
+    int32_t idx;
+
+    if ( verbose )
+        HDfprintf(stdout, "%s(): entering.\n", fcn_name);
+
+    HDassert( lag > 5 );
+
+    type = 0;
+
+    if ( ( pass ) && ( reset_stats ) ) {
+
+        H5C_stats__reset(cache_ptr);
+    }
+
+    while ( ( pass ) && ( type < NUMBER_OF_ENTRY_TYPES ) )
+    {
+        idx = -lag;
+
+        while ( ( pass ) && ( idx <= (max_indices[type] + lag) ) )
+        {
+            if ( ( pass ) && ( do_inserts ) && ( (idx + lag) >= 0 ) &&
+                 ( (idx + lag) <= max_indices[type] ) &&
+                 ( ((idx + lag) % 2) == 0 ) &&
+                 ( ! entry_in_cache(cache_ptr, type, (idx + lag)) ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(i, %d, %d) ", type, (idx + lag));
+
+                insert_entry(cache_ptr, type, (idx + lag), dirty_inserts);
+            }
+
+
+            if ( ( pass ) && ( (idx + lag - 1) >= 0 ) &&
+                 ( (idx + lag - 1) <= max_indices[type] ) &&
+                 ( ( (idx + lag - 1) % 3 ) == 0 ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(p, %d, %d) ", type, (idx + lag - 1));
+
+                protect_entry(cache_ptr, type, (idx + lag - 1));
+            }
+
+            if ( ( pass ) && ( (idx + lag - 2) >= 0 ) &&
+                 ( (idx + lag - 2) <= max_indices[type] ) &&
+                 ( ( (idx + lag - 2) % 3 ) == 0 ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(u, %d, %d) ", type, (idx + lag - 2));
+
+                unprotect_entry(cache_ptr, type, idx+lag-2, NO_CHANGE, FALSE);
+            }
+
+
+            if ( ( pass ) && ( do_renames ) && ( (idx + lag - 2) >= 0 ) &&
+                 ( (idx + lag - 2) <= max_indices[type] ) &&
+                 ( ( (idx + lag - 2) % 3 ) == 0 ) ) {
+
+                rename_entry(cache_ptr, type, (idx + lag - 2),
+                             rename_to_main_addr);
+            }
+
+
+            if ( ( pass ) && ( (idx + lag - 3) >= 0 ) &&
+                 ( (idx + lag - 3) <= max_indices[type] ) &&
+                 ( ( (idx + lag - 3) % 5 ) == 0 ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(p, %d, %d) ", type, (idx + lag - 3));
+
+                protect_entry(cache_ptr, type, (idx + lag - 3));
+            }
+
+            if ( ( pass ) && ( (idx + lag - 5) >= 0 ) &&
+                 ( (idx + lag - 5) <= max_indices[type] ) &&
+                 ( ( (idx + lag - 5) % 5 ) == 0 ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(u, %d, %d) ", type, (idx + lag - 5));
+
+                unprotect_entry(cache_ptr, type, idx+lag-5, NO_CHANGE, FALSE);
+            }
+
+            if ( ( pass ) && ( idx >= 0 ) && ( idx <= max_indices[type] ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(p, %d, %d) ", type, idx);
+
+                protect_entry(cache_ptr, type, idx);
+            }
+
+
+            if ( ( pass ) && ( (idx - lag + 2) >= 0 ) &&
+                 ( (idx - lag + 2) <= max_indices[type] ) &&
+                 ( ( (idx - lag + 2) % 7 ) == 0 ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(u, %d, %d) ", type, (idx - lag + 2));
+
+                unprotect_entry(cache_ptr, type, idx-lag+2, NO_CHANGE, FALSE);
+            }
+
+            if ( ( pass ) && ( (idx - lag + 1) >= 0 ) &&
+                 ( (idx - lag + 1) <= max_indices[type] ) &&
+                 ( ( (idx - lag + 1) % 7 ) == 0 ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(p, %d, %d) ", type, (idx - lag + 1));
+
+                protect_entry(cache_ptr, type, (idx - lag + 1));
+            }
+
+
+            if ( do_destroys ) {
+
+                if ( ( pass ) && ( (idx - lag) >= 0 ) &&
+                     ( ( idx - lag) <= max_indices[type] ) ) {
+
+                    switch ( (idx - lag) %4 ) {
+
+                        case 0: /* we just did an insert */
+                            unprotect_entry(cache_ptr, type, idx - lag,
+                                            NO_CHANGE, FALSE);
+                            break;
+
+                        case 1:
+                            if ( (entries[type])[idx-lag].is_dirty ) {
+
+                                unprotect_entry(cache_ptr, type, idx - lag,
+                                                NO_CHANGE, FALSE);
+                            } else {
+
+                                unprotect_entry(cache_ptr, type, idx - lag,
+                                                dirty_unprotects, FALSE);
+                            }
+                            break;
+
+                        case 2: /* we just did an insrt */
+                            unprotect_entry(cache_ptr, type, idx - lag,
+                                            NO_CHANGE, TRUE);
+                            break;
+
+                        case 3:
+                            if ( (entries[type])[idx-lag].is_dirty ) {
+
+                                unprotect_entry(cache_ptr, type, idx - lag,
+                                                NO_CHANGE, TRUE);
+                            } else {
+
+                                unprotect_entry(cache_ptr, type, idx - lag,
+                                                dirty_destroys, TRUE);
+                            }
+                            break;
+
+                        default:
+                            HDassert(0); /* this can't happen... */
+                            break;
+                    }
+                }
+
+            } else {
+
+                if ( ( pass ) && ( (idx - lag) >= 0 ) &&
+                     ( ( idx - lag) <= max_indices[type] ) ) {
+
+                    if ( verbose )
+                        HDfprintf(stdout, "(u, %d, %d) ", type, (idx - lag));
+
+                    unprotect_entry(cache_ptr, type, idx - lag,
+                                    dirty_unprotects, FALSE);
+                }
+            }
+
+            if ( verbose )
+                HDfprintf(stdout, "\n");
+
+            idx++;
+        }
+        type++;
+    }
+
+    if ( ( pass ) && ( display_stats ) ) {
+
+        H5C_stats(cache_ptr, "test cache", display_detailed_stats);
+    }
+
+    return;
+
+} /* row_major_scan_forward() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	row_major_scan_backward()
+ *
+ * Purpose:	Do a sequence of inserts, protects, unprotects, renames,
+ *		destroys while scanning backwards through the set of
+ *		entries.  If pass is false on entry, do nothing.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/12/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+row_major_scan_backward(H5C_t * cache_ptr,
+                        int32_t lag,
+                        hbool_t verbose,
+                        hbool_t reset_stats,
+                        hbool_t display_stats,
+                        hbool_t display_detailed_stats,
+                        hbool_t do_inserts,
+                        hbool_t dirty_inserts,
+                        hbool_t do_renames,
+                        hbool_t rename_to_main_addr,
+                        hbool_t do_destroys,
+                        int dirty_destroys,
+                        int dirty_unprotects)
+{
+    const char * fcn_name = "row_major_scan_backward";
+    int32_t type;
+    int32_t idx;
+
+    if ( verbose )
+        HDfprintf(stdout, "%s(): Entering.\n", fcn_name);
+
+    HDassert( lag > 5 );
+
+    type = NUMBER_OF_ENTRY_TYPES - 1;
+
+    if ( ( pass ) && ( reset_stats ) ) {
+
+        H5C_stats__reset(cache_ptr);
+    }
+
+    while ( ( pass ) && ( type >= 0 ) )
+    {
+        idx = max_indices[type] + lag;
+
+        while ( ( pass ) && ( idx >= -lag ) )
+        {
+            if ( ( pass ) && ( do_inserts ) && ( (idx - lag) >= 0 ) &&
+                 ( (idx - lag) <= max_indices[type] ) &&
+                 ( ((idx - lag) % 2) == 1 ) &&
+                 ( ! entry_in_cache(cache_ptr, type, (idx - lag)) ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(i, %d, %d) ", type, (idx - lag));
+
+                insert_entry(cache_ptr, type, (idx - lag), dirty_inserts);
+            }
+
+
+            if ( ( pass ) && ( (idx - lag + 1) >= 0 ) &&
+                 ( (idx - lag + 1) <= max_indices[type] ) &&
+                 ( ( (idx - lag + 1) % 3 ) == 0 ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(p, %d, %d) ", type, (idx - lag + 1));
+
+                protect_entry(cache_ptr, type, (idx - lag + 1));
+            }
+
+            if ( ( pass ) && ( (idx - lag + 2) >= 0 ) &&
+                 ( (idx - lag + 2) <= max_indices[type] ) &&
+                 ( ( (idx - lag + 2) % 3 ) == 0 ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(u, %d, %d) ", type, (idx - lag + 2));
+
+                unprotect_entry(cache_ptr, type, idx-lag+2, NO_CHANGE, FALSE);
+            }
+
+
+            if ( ( pass ) && ( do_renames ) && ( (idx - lag + 2) >= 0 ) &&
+                 ( (idx - lag + 2) <= max_indices[type] ) &&
+                 ( ( (idx - lag + 2) % 3 ) == 0 ) ) {
+
+                rename_entry(cache_ptr, type, (idx - lag + 2),
+                             rename_to_main_addr);
+            }
+
+
+            if ( ( pass ) && ( (idx - lag + 3) >= 0 ) &&
+                 ( (idx - lag + 3) <= max_indices[type] ) &&
+                 ( ( (idx - lag + 3) % 5 ) == 0 ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(p, %d, %d) ", type, (idx - lag + 3));
+
+                protect_entry(cache_ptr, type, (idx - lag + 3));
+            }
+
+            if ( ( pass ) && ( (idx - lag + 5) >= 0 ) &&
+                 ( (idx - lag + 5) <= max_indices[type] ) &&
+                 ( ( (idx - lag + 5) % 5 ) == 0 ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(u, %d, %d) ", type, (idx - lag + 5));
+
+                unprotect_entry(cache_ptr, type, idx-lag+5, NO_CHANGE, FALSE);
+            }
+
+            if ( ( pass ) && ( idx >= 0 ) && ( idx <= max_indices[type] ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(p, %d, %d) ", type, idx);
+
+                protect_entry(cache_ptr, type, idx);
+            }
+
+
+            if ( ( pass ) && ( (idx + lag - 2) >= 0 ) &&
+                 ( (idx + lag - 2) <= max_indices[type] ) &&
+                 ( ( (idx + lag - 2) % 7 ) == 0 ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(u, %d, %d) ", type, (idx + lag - 2));
+
+                unprotect_entry(cache_ptr, type, idx+lag-2, NO_CHANGE, FALSE);
+            }
+
+            if ( ( pass ) && ( (idx + lag - 1) >= 0 ) &&
+                 ( (idx + lag - 1) <= max_indices[type] ) &&
+                 ( ( (idx + lag - 1) % 7 ) == 0 ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(p, %d, %d) ", type, (idx + lag - 1));
+
+                protect_entry(cache_ptr, type, (idx + lag - 1));
+            }
+
+
+            if ( do_destroys ) {
+
+                if ( ( pass ) && ( (idx + lag) >= 0 ) &&
+                     ( ( idx + lag) <= max_indices[type] ) ) {
+
+                    switch ( (idx + lag) %4 ) {
+
+                        case 0:
+                            if ( (entries[type])[idx+lag].is_dirty ) {
+
+                                unprotect_entry(cache_ptr, type, idx + lag,
+                                                NO_CHANGE, FALSE);
+                            } else {
+
+                                unprotect_entry(cache_ptr, type, idx + lag,
+                                                dirty_unprotects, FALSE);
+                            }
+                            break;
+
+                        case 1: /* we just did an insert */
+                            unprotect_entry(cache_ptr, type, idx + lag,
+                                            NO_CHANGE, FALSE);
+                            break;
+
+                        case 2:
+                            if ( (entries[type])[idx + lag].is_dirty ) {
+
+                                unprotect_entry(cache_ptr, type, idx + lag,
+                                                NO_CHANGE, TRUE);
+                            } else {
+
+                                unprotect_entry(cache_ptr, type, idx + lag,
+                                                dirty_destroys, TRUE);
+                            }
+                            break;
+
+                        case 3: /* we just did an insrt */
+                            unprotect_entry(cache_ptr, type, idx + lag,
+                                            NO_CHANGE, TRUE);
+                            break;
+
+                        default:
+                            HDassert(0); /* this can't happen... */
+                            break;
+                    }
+                }
+            } else {
+
+                if ( ( pass ) && ( (idx + lag) >= 0 ) &&
+                     ( ( idx + lag) <= max_indices[type] ) ) {
+
+                    if ( verbose )
+                        HDfprintf(stdout, "(u, %d, %d) ", type, (idx - lag));
+
+                    unprotect_entry(cache_ptr, type, idx + lag,
+                                    dirty_unprotects, FALSE);
+                }
+            }
+
+            if ( verbose )
+                HDfprintf(stdout, "\n");
+
+            idx--;
+        }
+        type--;
+    }
+
+    if ( ( pass ) && ( display_stats ) ) {
+
+        H5C_stats(cache_ptr, "test cache", display_detailed_stats);
+    }
+
+    return;
+
+} /* row_major_scan_backward() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	col_major_scan_forward()
+ *
+ * Purpose:	Do a sequence of inserts, protects, and unprotects
+ *		while scanning through the set of entries.  If
+ *		pass is false on entry, do nothing.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/23/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+col_major_scan_forward(H5C_t * cache_ptr,
+                       int32_t lag,
+                       hbool_t verbose,
+                       hbool_t reset_stats,
+                       hbool_t display_stats,
+                       hbool_t display_detailed_stats,
+                       hbool_t do_inserts,
+                       hbool_t dirty_inserts,
+                       int dirty_unprotects)
+{
+    const char * fcn_name = "col_major_scan_forward()";
+    int32_t type;
+    int32_t idx;
+
+    if ( verbose )
+        HDfprintf(stdout, "%s: entering.\n", fcn_name);
+
+    HDassert( lag > 5 );
+
+    type = 0;
+
+    if ( ( pass ) && ( reset_stats ) ) {
+
+        H5C_stats__reset(cache_ptr);
+    }
+
+    idx = -lag;
+
+    while ( ( pass ) && ( (idx - lag) <= MAX_ENTRIES ) )
+    {
+        type = 0;
+
+        while ( ( pass ) && ( type < NUMBER_OF_ENTRY_TYPES ) )
+        {
+            if ( ( pass ) && ( do_inserts ) && ( (idx + lag) >= 0 ) &&
+                 ( (idx + lag) <= max_indices[type] ) &&
+                 ( ((idx + lag) % 3) == 0 ) &&
+                 ( ! entry_in_cache(cache_ptr, type, (idx + lag)) ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(i, %d, %d) ", type, (idx + lag));
+
+                insert_entry(cache_ptr, type, (idx + lag), dirty_inserts);
+            }
+
+            if ( ( pass ) && ( idx >= 0 ) && ( idx <= max_indices[type] ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(p, %d, %d) ", type, idx);
+
+                protect_entry(cache_ptr, type, idx);
+            }
+
+            if ( ( pass ) && ( (idx - lag) >= 0 ) &&
+                 ( (idx - lag) <= max_indices[type] ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(u, %d, %d) ", type, (idx - lag));
+
+                unprotect_entry(cache_ptr, type, idx - lag,
+                                dirty_unprotects, FALSE);
+            }
+
+            if ( verbose )
+                HDfprintf(stdout, "\n");
+
+            type++;
+        }
+
+        idx++;
+    }
+
+    if ( ( pass ) && ( display_stats ) ) {
+
+        H5C_stats(cache_ptr, "test cache", display_detailed_stats);
+    }
+
+    return;
+
+} /* col_major_scan_forward() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	col_major_scan_backward()
+ *
+ * Purpose:	Do a sequence of inserts, protects, and unprotects
+ *		while scanning backwards through the set of
+ *		entries.  If pass is false on entry, do nothing.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/23/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+col_major_scan_backward(H5C_t * cache_ptr,
+                        int32_t lag,
+                        hbool_t verbose,
+                        hbool_t reset_stats,
+                        hbool_t display_stats,
+                        hbool_t display_detailed_stats,
+                        hbool_t do_inserts,
+                        hbool_t dirty_inserts,
+                        int dirty_unprotects)
+{
+    const char * fcn_name = "col_major_scan_backward()";
+    int mile_stone = 1;
+    int32_t type;
+    int32_t idx;
+
+    if ( verbose )
+        HDfprintf(stdout, "%s: entering.\n", fcn_name);
+
+    HDassert( lag > 5 );
+
+    if ( ( pass ) && ( reset_stats ) ) {
+
+        H5C_stats__reset(cache_ptr);
+    }
+
+    idx = MAX_ENTRIES + lag;
+
+    if ( verbose ) /* 1 */
+        HDfprintf(stdout, "%s: point %d.\n", fcn_name, mile_stone++);
+
+
+    while ( ( pass ) && ( (idx + lag) >= 0 ) )
+    {
+        type = NUMBER_OF_ENTRY_TYPES - 1;
+
+        while ( ( pass ) && ( type >= 0 ) )
+        {
+            if ( ( pass ) && ( do_inserts) && ( (idx - lag) >= 0 ) &&
+                 ( (idx - lag) <= max_indices[type] ) &&
+                 ( ((idx - lag) % 3) == 0 ) &&
+                 ( ! entry_in_cache(cache_ptr, type, (idx - lag)) ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(i, %d, %d) ", type, (idx - lag));
+
+                insert_entry(cache_ptr, type, (idx - lag), dirty_inserts);
+            }
+
+            if ( ( pass ) && ( idx >= 0 ) && ( idx <= max_indices[type] ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(p, %d, %d) ", type, idx);
+
+                protect_entry(cache_ptr, type, idx);
+            }
+
+            if ( ( pass ) && ( (idx + lag) >= 0 ) &&
+                 ( (idx + lag) <= max_indices[type] ) ) {
+
+                if ( verbose )
+                    HDfprintf(stdout, "(u, %d, %d) ", type, (idx + lag));
+
+                unprotect_entry(cache_ptr, type, idx + lag,
+                                dirty_unprotects, FALSE);
+            }
+
+            if ( verbose )
+                HDfprintf(stdout, "\n");
+
+            type--;
+        }
+
+        idx--;
+    }
+
+    if ( verbose ) /* 2 */
+        HDfprintf(stdout, "%s: point %d.\n", fcn_name, mile_stone++);
+
+    if ( ( pass ) && ( display_stats ) ) {
+
+        H5C_stats(cache_ptr, "test cache", display_detailed_stats);
+    }
+
+    if ( verbose )
+        HDfprintf(stdout, "%s: exiting.\n", fcn_name);
+
+    return;
+
+} /* col_major_scan_backward() */
+
+
+/**************************************************************************/
+/**************************************************************************/
+/********************************* tests: *********************************/
+/**************************************************************************/
+/**************************************************************************/
+
+/*-------------------------------------------------------------------------
+ * Function:	smoke_check_1()
+ *
+ * Purpose:	A basic functional test, inserts, destroys, and renames in
+ *              the mix, along with repeated protects and unprotects.
+ *		All entries are marked as clean.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/16/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+smoke_check_1(void)
+{
+    const char * fcn_name = "smoke_check_1";
+    hbool_t show_progress = FALSE;
+    hbool_t dirty_inserts = FALSE;
+    int dirty_unprotects = FALSE;
+    int dirty_destroys = FALSE;
+    hbool_t display_stats = FALSE;
+    int32_t lag = 10;
+    int mile_stone = 1;
+    H5C_t * cache_ptr = NULL;
+
+    TESTING("smoke check #1 -- all clean, ins, dest, ren, 4/2 MB cache");
+
+    pass = TRUE;
+
+    if ( show_progress ) /* 1 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    reset_entries();
+
+    if ( show_progress ) /* 2 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    cache_ptr = setup_cache((size_t)(4 * 1024 * 1024),
+                            (size_t)(2 * 1024 * 1024));
+
+    if ( show_progress ) /* 3 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    row_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ dirty_inserts,
+                           /* do_renames             */ TRUE,
+                           /* rename_to_main_addr    */ FALSE,
+                           /* do_destroys            */ TRUE,
+                           /* dirty_destroys         */ dirty_destroys,
+                           /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 4 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    row_major_scan_backward(/* cache_ptr              */ cache_ptr,
+                            /* lag                    */ lag,
+                            /* verbose                */ FALSE,
+                            /* reset_stats            */ TRUE,
+                            /* display_stats          */ display_stats,
+                            /* display_detailed_stats */ TRUE,
+                            /* do_inserts             */ FALSE,
+                            /* dirty_inserts          */ dirty_inserts,
+                            /* do_renames             */ TRUE,
+                            /* rename_to_main_addr    */ TRUE,
+                            /* do_destroys            */ FALSE,
+                            /* dirty_destroys         */ dirty_destroys,
+                            /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 5 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    row_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ dirty_inserts,
+                           /* do_renames             */ TRUE,
+                           /* rename_to_main_addr    */ FALSE,
+                           /* do_destroys            */ FALSE,
+                           /* dirty_destroys         */ dirty_destroys,
+                           /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 6 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    /* flush and destroy all entries in the cache: */
+
+    flush_cache(/* cache_ptr           */ cache_ptr,
+                /* destroy_entries     */ TRUE,
+                /* dump_stats          */ FALSE,
+                /* dump_detailed_stats */ FALSE);
+
+    if ( show_progress ) /* 7 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    col_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ dirty_inserts,
+                           /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 8 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    /* flush all entries in the cache: */
+
+    flush_cache(/* cache_ptr           */ cache_ptr,
+                /* destroy_entries     */ FALSE,
+                /* dump_stats          */ FALSE,
+                /* dump_detailed_stats */ FALSE);
+
+    if ( show_progress ) /* 9 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    col_major_scan_backward(/* cache_ptr              */ cache_ptr,
+                            /* lag                    */ lag,
+                            /* verbose                */ FALSE,
+                            /* reset_stats            */ TRUE,
+                            /* display_stats          */ display_stats,
+                            /* display_detailed_stats */ TRUE,
+                            /* do_inserts             */ TRUE,
+                            /* dirty_inserts          */ dirty_inserts,
+                            /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 10 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    takedown_cache(cache_ptr, display_stats, TRUE);
+
+    if ( show_progress ) /* 11 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    verify_clean();
+    verify_unprotected();
+
+    if ( pass ) { PASSED(); } else { H5_FAILED(); }
+
+    if ( ! pass )
+        HDfprintf(stdout, "%s(): failure_mssg = \"%s\".\n",
+                  fcn_name, failure_mssg);
+
+} /* smoke_check_1() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	smoke_check_2()
+ *
+ * Purpose:	A basic functional test, with inserts, destroys, and
+ *		renames in the mix, along with some repeated protects
+ *		and unprotects.  About half the entries are marked as
+ *		dirty.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/24/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+smoke_check_2(void)
+{
+    const char * fcn_name = "smoke_check_2";
+    hbool_t show_progress = FALSE;
+    hbool_t dirty_inserts = TRUE;
+    int dirty_unprotects = TRUE;
+    int dirty_destroys = TRUE;
+    hbool_t display_stats = FALSE;
+    int32_t lag = 10;
+    int mile_stone = 1;
+    H5C_t * cache_ptr = NULL;
+
+    TESTING("smoke check #2 -- ~1/2 dirty, ins, dest, ren, 4/2 MB cache");
+
+    pass = TRUE;
+
+    if ( show_progress ) /* 1 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    reset_entries();
+
+    if ( show_progress ) /* 2 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    cache_ptr = setup_cache((size_t)(4 * 1024 * 1024),
+                            (size_t)(2 * 1024 * 1024));
+
+    if ( show_progress ) /* 3 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    row_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ dirty_inserts,
+                           /* do_renames             */ TRUE,
+                           /* rename_to_main_addr    */ FALSE,
+                           /* do_destroys            */ TRUE,
+                           /* dirty_destroys         */ dirty_destroys,
+                           /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 4 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    row_major_scan_backward(/* cache_ptr              */ cache_ptr,
+                            /* lag                    */ lag,
+                            /* verbose                */ FALSE,
+                            /* reset_stats            */ TRUE,
+                            /* display_stats          */ display_stats,
+                            /* display_detailed_stats */ TRUE,
+                            /* do_inserts             */ FALSE,
+                            /* dirty_inserts          */ dirty_inserts,
+                            /* do_renames             */ TRUE,
+                            /* rename_to_main_addr    */ TRUE,
+                            /* do_destroys            */ FALSE,
+                            /* dirty_destroys         */ dirty_destroys,
+                            /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 5 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    row_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ dirty_inserts,
+                           /* do_renames             */ TRUE,
+                           /* rename_to_main_addr    */ FALSE,
+                           /* do_destroys            */ FALSE,
+                           /* dirty_destroys         */ dirty_destroys,
+                           /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 6 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    /* flush and destroy all entries in the cache: */
+
+    flush_cache(/* cache_ptr           */ cache_ptr,
+                /* destroy_entries     */ TRUE,
+                /* dump_stats          */ FALSE,
+                /* dump_detailed_stats */ FALSE);
+
+    if ( show_progress ) /* 7 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    col_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ dirty_inserts,
+                           /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 8 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    /* flush all entries in the cache: */
+
+    flush_cache(/* cache_ptr           */ cache_ptr,
+                /* destroy_entries     */ FALSE,
+                /* dump_stats          */ FALSE,
+                /* dump_detailed_stats */ FALSE);
+
+    if ( show_progress ) /* 9 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    col_major_scan_backward(/* cache_ptr              */ cache_ptr,
+                            /* lag                    */ lag,
+                            /* verbose                */ FALSE,
+                            /* reset_stats            */ TRUE,
+                            /* display_stats          */ display_stats,
+                            /* display_detailed_stats */ TRUE,
+                            /* do_inserts             */ TRUE,
+                            /* dirty_inserts          */ dirty_inserts,
+                            /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 10 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    takedown_cache(cache_ptr, display_stats, TRUE);
+
+    if ( show_progress ) /* 11 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    verify_clean();
+    verify_unprotected();
+
+    if ( pass ) { PASSED(); } else { H5_FAILED(); }
+
+    if ( ! pass )
+        HDfprintf(stdout, "%s(): failure_mssg = \"%s\".\n",
+                  fcn_name, failure_mssg);
+
+} /* smoke_check_2() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	smoke_check_3()
+ *
+ * Purpose:	A basic functional test on a tiny cache, with inserts,
+ *		destroys, and renames in the mix, along with repeated
+ *		protects and unprotects.  All entries are marked as clean.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/16/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+smoke_check_3(void)
+{
+    const char * fcn_name = "smoke_check_3";
+    hbool_t show_progress = FALSE;
+    hbool_t dirty_inserts = FALSE;
+    int dirty_unprotects = FALSE;
+    int dirty_destroys = FALSE;
+    hbool_t display_stats = FALSE;
+    int32_t lag = 10;
+    int mile_stone = 1;
+    H5C_t * cache_ptr = NULL;
+
+    TESTING("smoke check #3 -- all clean, ins, dest, ren, 2/1 KB cache");
+
+    pass = TRUE;
+
+    if ( show_progress ) /* 1 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    reset_entries();
+
+    if ( show_progress ) /* 2 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    cache_ptr = setup_cache((size_t)(2 * 1024),
+                            (size_t)(1 * 1024));
+
+    if ( show_progress ) /* 3 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    row_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ dirty_inserts,
+                           /* do_renames             */ TRUE,
+                           /* rename_to_main_addr    */ FALSE,
+                           /* do_destroys            */ TRUE,
+                           /* dirty_destroys         */ dirty_destroys,
+                           /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 4 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    row_major_scan_backward(/* cache_ptr              */ cache_ptr,
+                            /* lag                    */ lag,
+                            /* verbose                */ FALSE,
+                            /* reset_stats            */ TRUE,
+                            /* display_stats          */ display_stats,
+                            /* display_detailed_stats */ TRUE,
+                            /* do_inserts             */ FALSE,
+                            /* dirty_inserts          */ dirty_inserts,
+                            /* do_renames             */ TRUE,
+                            /* rename_to_main_addr    */ TRUE,
+                            /* do_destroys            */ FALSE,
+                            /* dirty_destroys         */ dirty_destroys,
+                            /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 5 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    row_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ dirty_inserts,
+                           /* do_renames             */ TRUE,
+                           /* rename_to_main_addr    */ FALSE,
+                           /* do_destroys            */ FALSE,
+                           /* dirty_destroys         */ dirty_destroys,
+                           /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 6 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    /* flush and destroy all entries in the cache: */
+
+    flush_cache(/* cache_ptr           */ cache_ptr,
+                /* destroy_entries     */ TRUE,
+                /* dump_stats          */ FALSE,
+                /* dump_detailed_stats */ FALSE);
+
+    if ( show_progress ) /* 7 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    col_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ dirty_inserts,
+                           /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 8 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    /* flush all entries in the cache: */
+
+    flush_cache(/* cache_ptr           */ cache_ptr,
+                /* destroy_entries     */ FALSE,
+                /* dump_stats          */ FALSE,
+                /* dump_detailed_stats */ FALSE);
+
+    if ( show_progress ) /* 9 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    col_major_scan_backward(/* cache_ptr              */ cache_ptr,
+                            /* lag                    */ lag,
+                            /* verbose                */ FALSE,
+                            /* reset_stats            */ TRUE,
+                            /* display_stats          */ display_stats,
+                            /* display_detailed_stats */ TRUE,
+                            /* do_inserts             */ TRUE,
+                            /* dirty_inserts          */ dirty_inserts,
+                            /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 10 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    takedown_cache(cache_ptr, display_stats, TRUE);
+
+    if ( show_progress ) /* 11 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    verify_clean();
+    verify_unprotected();
+
+    if ( pass ) { PASSED(); } else { H5_FAILED(); }
+
+    if ( ! pass )
+        HDfprintf(stdout, "%s(): failure_mssg = \"%s\".\n",
+                  fcn_name, failure_mssg);
+
+} /* smoke_check_3() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	smoke_check_4()
+ *
+ * Purpose:	A basic functional test on a tiny cache, with inserts,
+ *	 	destroys, and renames in the mix, along with repeated
+ *		protects and unprotects.  About half the entries are
+ *		marked as dirty.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/24/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+smoke_check_4(void)
+{
+    const char * fcn_name = "smoke_check_4";
+    hbool_t show_progress = FALSE;
+    hbool_t dirty_inserts = TRUE;
+    int dirty_unprotects = TRUE;
+    int dirty_destroys = TRUE;
+    hbool_t display_stats = FALSE;
+    int32_t lag = 10;
+    int mile_stone = 1;
+    H5C_t * cache_ptr = NULL;
+
+    TESTING("smoke check #4 -- ~1/2 dirty, ins, dest, ren, 2/1 KB cache");
+
+    pass = TRUE;
+
+    if ( show_progress ) /* 1 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    reset_entries();
+
+    if ( show_progress ) /* 2 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    cache_ptr = setup_cache((size_t)(2 * 1024),
+                            (size_t)(1 * 1024));
+
+    if ( show_progress ) /* 3 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    row_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ dirty_inserts,
+                           /* do_renames             */ TRUE,
+                           /* rename_to_main_addr    */ FALSE,
+                           /* do_destroys            */ TRUE,
+                           /* dirty_destroys         */ dirty_destroys,
+                           /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 4 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    row_major_scan_backward(/* cache_ptr              */ cache_ptr,
+                            /* lag                    */ lag,
+                            /* verbose                */ FALSE,
+                            /* reset_stats            */ TRUE,
+                            /* display_stats          */ display_stats,
+                            /* display_detailed_stats */ TRUE,
+                            /* do_inserts             */ FALSE,
+                            /* dirty_inserts          */ dirty_inserts,
+                            /* do_renames             */ TRUE,
+                            /* rename_to_main_addr    */ TRUE,
+                            /* do_destroys            */ FALSE,
+                            /* dirty_destroys         */ dirty_destroys,
+                            /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 5 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    row_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ dirty_inserts,
+                           /* do_renames             */ TRUE,
+                           /* rename_to_main_addr    */ FALSE,
+                           /* do_destroys            */ FALSE,
+                           /* dirty_destroys         */ dirty_destroys,
+                           /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 6 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    /* flush and destroy all entries in the cache: */
+
+    flush_cache(/* cache_ptr           */ cache_ptr,
+                /* destroy_entries     */ TRUE,
+                /* dump_stats          */ FALSE,
+                /* dump_detailed_stats */ FALSE);
+
+    if ( show_progress ) /* 7 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    col_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ dirty_inserts,
+                           /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 8 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    /* flush all entries in the cache: */
+
+    flush_cache(/* cache_ptr           */ cache_ptr,
+                /* destroy_entries     */ FALSE,
+                /* dump_stats          */ FALSE,
+                /* dump_detailed_stats */ FALSE);
+
+    if ( show_progress ) /* 9 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    col_major_scan_backward(/* cache_ptr              */ cache_ptr,
+                            /* lag                    */ lag,
+                            /* verbose                */ FALSE,
+                            /* reset_stats            */ TRUE,
+                            /* display_stats          */ display_stats,
+                            /* display_detailed_stats */ TRUE,
+                            /* do_inserts             */ TRUE,
+                            /* dirty_inserts          */ dirty_inserts,
+                            /* dirty_unprotects       */ dirty_unprotects);
+
+    if ( show_progress ) /* 10 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    takedown_cache(cache_ptr, display_stats, TRUE);
+
+    if ( show_progress ) /* 11 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    verify_clean();
+    verify_unprotected();
+
+    if ( pass ) { PASSED(); } else { H5_FAILED(); }
+
+    if ( ! pass )
+        HDfprintf(stdout, "%s(): failure_mssg = \"%s\".\n",
+                  fcn_name, failure_mssg);
+
+} /* smoke_check_4() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	write_permitted_check()
+ *
+ * Purpose:	A basic test of the write permitted function.  In essence,
+ *		we load the cache up with dirty entryies, set
+ *		write_permitted to FALSE, and then protect a bunch of
+ *		entries.  If there are any writes while write_permitted is
+ *		FALSE, the test will fail.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/24/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+write_permitted_check(void)
+{
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+    const char * fcn_name = "write_permitted_check";
+    hbool_t show_progress = FALSE;
+    hbool_t display_stats = FALSE;
+    int32_t lag = 10;
+    int mile_stone = 1;
+    H5C_t * cache_ptr = NULL;
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+    TESTING("write permitted check -- 1/0 MB cache");
+
+#if H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS
+
+    pass = TRUE;
+
+    if ( show_progress ) /* 1 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    reset_entries();
+
+    if ( show_progress ) /* 2 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    cache_ptr = setup_cache((size_t)(1 * 1024 * 1024),
+                            (size_t)(0));
+
+    if ( show_progress ) /* 3 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    row_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ TRUE,
+                           /* do_renames             */ TRUE,
+                           /* rename_to_main_addr    */ FALSE,
+                           /* do_destroys            */ TRUE,
+                           /* dirty_destroys         */ TRUE,
+                           /* dirty_unprotects       */ TRUE);
+
+    if ( show_progress ) /* 4 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    write_permitted = FALSE;
+
+    row_major_scan_backward(/* cache_ptr              */ cache_ptr,
+                            /* lag                    */ lag,
+                            /* verbose                */ FALSE,
+                            /* reset_stats            */ TRUE,
+                            /* display_stats          */ display_stats,
+                            /* display_detailed_stats */ TRUE,
+                            /* do_inserts             */ FALSE,
+                            /* dirty_inserts          */ FALSE,
+                            /* do_renames             */ TRUE,
+                            /* rename_to_main_addr    */ TRUE,
+                            /* do_destroys            */ FALSE,
+                            /* dirty_destroys         */ FALSE,
+                            /* dirty_unprotects       */ NO_CHANGE);
+
+    if ( show_progress ) /* 5 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    write_permitted = TRUE;
+
+    row_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ TRUE,
+                           /* do_renames             */ TRUE,
+                           /* rename_to_main_addr    */ FALSE,
+                           /* do_destroys            */ FALSE,
+                           /* dirty_destroys         */ TRUE,
+                           /* dirty_unprotects       */ TRUE);
+
+    if ( show_progress ) /* 6 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    /* flush and destroy all entries in the cache: */
+
+    flush_cache(/* cache_ptr           */ cache_ptr,
+                /* destroy_entries     */ TRUE,
+                /* dump_stats          */ FALSE,
+                /* dump_detailed_stats */ FALSE);
+
+    if ( show_progress ) /* 7 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    col_major_scan_forward(/* cache_ptr              */ cache_ptr,
+                           /* lag                    */ lag,
+                           /* verbose                */ FALSE,
+                           /* reset_stats            */ TRUE,
+                           /* display_stats          */ display_stats,
+                           /* display_detailed_stats */ TRUE,
+                           /* do_inserts             */ TRUE,
+                           /* dirty_inserts          */ TRUE,
+                           /* dirty_unprotects       */ TRUE);
+
+    if ( show_progress ) /* 8 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    write_permitted = FALSE;
+
+    col_major_scan_backward(/* cache_ptr              */ cache_ptr,
+                            /* lag                    */ lag,
+                            /* verbose                */ FALSE,
+                            /* reset_stats            */ TRUE,
+                            /* display_stats          */ display_stats,
+                            /* display_detailed_stats */ TRUE,
+                            /* do_inserts             */ FALSE,
+                            /* dirty_inserts          */ FALSE,
+                            /* dirty_unprotects       */ NO_CHANGE);
+
+    write_permitted = TRUE;
+
+    if ( show_progress ) /* 9 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    takedown_cache(cache_ptr, display_stats, TRUE);
+
+    if ( show_progress ) /* 10 */
+        HDfprintf(stdout, "%s() - %0d -- pass = %d\n",
+                  fcn_name, mile_stone++, (int)pass);
+
+    verify_clean();
+    verify_unprotected();
+
+    if ( pass ) { PASSED(); } else { H5_FAILED(); }
+
+    if ( ! pass )
+        HDfprintf(stdout, "%s(): failure_mssg = \"%s\".\n",
+                  fcn_name, failure_mssg);
+
+#else /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+    SKIPPED();
+
+    HDfprintf(stdout, "	Clean and dirty LRU lists disabled.\n");
+
+#endif /* H5C_MAINTAIN_CLEAN_AND_DIRTY_LRU_LISTS */
+
+} /* write_permitted_check() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	check_flush_protected_err()
+ *
+ * Purpose:	Verify that an attempt to flush the cache when it contains
+ *		a protected entry will generate an error.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/24/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+check_flush_protected_err(void)
+{
+    const char * fcn_name = "check_flush_protected_err";
+    H5C_t * cache_ptr = NULL;
+
+    TESTING("flush cache with protected entry error");
+
+    pass = TRUE;
+
+    /* allocate a cache, protect an entry, and try to flush.  This
+     * should fail.  Unprotect the entry and flush again -- should
+     * succeed.
+     */
+
+    if ( pass ) {
+
+        reset_entries();
+
+        cache_ptr = setup_cache((size_t)(2 * 1024),
+                                (size_t)(1 * 1024));
+
+        protect_entry(cache_ptr, 0, 0);
+
+        if ( H5C_flush_cache(NULL, -1, -1, cache_ptr, 0) >= 0 ) {
+
+            pass = FALSE;
+            failure_mssg = "flush succeeded on cache with protected entry.\n";
+
+        } else {
+
+            unprotect_entry(cache_ptr, 0, 0, TRUE, FALSE);
+
+            if ( H5C_flush_cache(NULL, -1, -1, cache_ptr, 0) < 0 ) {
+
+                pass = FALSE;
+                failure_mssg = "flush failed after unprotect.\n";
+
+            } else {
+
+                takedown_cache(cache_ptr, FALSE, FALSE);
+            }
+        }
+    }
+
+    if ( pass ) { PASSED(); } else { H5_FAILED(); }
+
+    if ( ! pass )
+        HDfprintf(stdout, "%s(): failure_mssg = \"%s\".\n",
+                  fcn_name, failure_mssg);
+
+} /* check_flush_protected_err() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	check_destroy_protected_err()
+ *
+ * Purpose:	Verify that an attempt to destroy the cache when it contains
+ *		a protected entry will generate an error.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/24/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+check_destroy_protected_err(void)
+{
+    const char * fcn_name = "check_destroy_protected_err";
+    H5C_t * cache_ptr = NULL;
+
+    TESTING("destroy cache with protected entry error");
+
+    pass = TRUE;
+
+    /* allocate a cache, protect an entry, and try to flush.  This
+     * should fail.  Unprotect the entry and flush again -- should
+     * succeed.
+     */
+
+    if ( pass ) {
+
+        reset_entries();
+
+        cache_ptr = setup_cache((size_t)(2 * 1024),
+                                (size_t)(1 * 1024));
+
+        protect_entry(cache_ptr, 0, 0);
+
+        if ( H5C_dest(NULL, -1, -1, cache_ptr) >= 0 ) {
+
+            pass = FALSE;
+            failure_mssg = "destroy succeeded on cache with protected entry.\n";
+
+        } else {
+
+            unprotect_entry(cache_ptr, 0, 0, TRUE, FALSE);
+
+            if ( H5C_dest(NULL, -1, -1, cache_ptr) < 0 ) {
+
+                pass = FALSE;
+                failure_mssg = "destroy failed after unprotect.\n";
+
+            }
+        }
+    }
+
+    if ( pass ) { PASSED(); } else { H5_FAILED(); }
+
+    if ( ! pass )
+        HDfprintf(stdout, "%s(): failure_mssg = \"%s\".\n",
+                  fcn_name, failure_mssg);
+
+} /* check_destroy_protected_err() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	check_duplicate_insert_err()
+ *
+ * Purpose:	Verify that an attempt to insert and entry that is
+ *		alread in the cache will generate an error.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/24/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+check_duplicate_insert_err(void)
+{
+    const char * fcn_name = "check_duplicate_insert_err";
+    herr_t result;
+    H5C_t * cache_ptr = NULL;
+    test_entry_t * base_addr;
+    test_entry_t * entry_ptr;
+
+    TESTING("duplicate entry insertion error");
+
+    pass = TRUE;
+
+    /* allocate a cache, protect an entry, and then try to insert
+     * the entry again.  This should fail.  Unprotect the entry and
+     * destroy the cache -- should succeed.
+     */
+
+    if ( pass ) {
+
+        reset_entries();
+
+        cache_ptr = setup_cache((size_t)(2 * 1024),
+                                (size_t)(1 * 1024));
+
+        protect_entry(cache_ptr, 0, 0);
+
+        if ( pass ) {
+
+            base_addr = entries[0];
+            entry_ptr = &(base_addr[0]);
+
+            result = H5C_insert_entry(NULL, -1, -1, cache_ptr,
+                                      &(types[0]), entry_ptr->addr,
+                                      (void *)entry_ptr);
+
+            if ( result >= 0 ) {
+
+                pass = FALSE;
+                failure_mssg = "insert of duplicate entry succeeded.\n";
+
+            } else {
+
+                unprotect_entry(cache_ptr, 0, 0, TRUE, FALSE);
+
+                takedown_cache(cache_ptr, FALSE, FALSE);
+            }
+        }
+    }
+
+    if ( pass ) { PASSED(); } else { H5_FAILED(); }
+
+    if ( ! pass )
+        HDfprintf(stdout, "%s(): failure_mssg = \"%s\".\n",
+                  fcn_name, failure_mssg);
+
+} /* check_duplicate_insert_err() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	check_rename_err()
+ *
+ * Purpose:	Verify that an attempt to rename an entry to the address
+ *		of an existing entry will generate an error.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/24/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+check_rename_err(void)
+{
+    const char * fcn_name = "check_rename_err()";
+    herr_t result;
+    H5C_t * cache_ptr = NULL;
+    test_entry_t * entry_0_0_ptr;
+    test_entry_t * entry_0_1_ptr;
+    test_entry_t * entry_1_0_ptr;
+
+    TESTING("rename to existing entry errors");
+
+    pass = TRUE;
+
+    /* allocate a cache, and insert several entries.  Try to rename
+     * entries to other entries resident in the cache.  This should
+     * fail.  Destroy the cache -- should succeed.
+     */
+
+    if ( pass ) {
+
+        reset_entries();
+
+        cache_ptr = setup_cache((size_t)(2 * 1024),
+                                (size_t)(1 * 1024));
+
+        insert_entry(cache_ptr, 0, 0, TRUE);
+        insert_entry(cache_ptr, 0, 1, TRUE);
+        insert_entry(cache_ptr, 1, 0, TRUE);
+
+        entry_0_0_ptr = &((entries[0])[0]);
+        entry_0_1_ptr = &((entries[0])[1]);
+        entry_1_0_ptr = &((entries[1])[0]);
+    }
+
+    if ( pass ) {
+
+        result = H5C_rename_entry(cache_ptr, &(types[0]),
+                                  entry_0_0_ptr->addr, entry_0_1_ptr->addr);
+
+        if ( result >= 0 ) {
+
+            pass = FALSE;
+            failure_mssg = "rename to addr of same type succeeded.\n";
+        }
+    }
+
+    if ( pass ) {
+
+        result = H5C_rename_entry(cache_ptr, &(types[0]),
+                                  entry_0_0_ptr->addr, entry_1_0_ptr->addr);
+
+        if ( result >= 0 ) {
+
+            pass = FALSE;
+            failure_mssg = "rename to addr of different type succeeded.\n";
+        }
+    }
+
+    if ( pass ) {
+
+        takedown_cache(cache_ptr, FALSE, FALSE);
+    }
+
+    if ( pass ) { PASSED(); } else { H5_FAILED(); }
+
+    if ( ! pass )
+        HDfprintf(stdout, "%s: failure_mssg = \"%s\".\n",
+                  fcn_name, failure_mssg);
+
+} /* check_rename_err() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	check_double_protect_err()
+ *
+ * Purpose:	Verify that an attempt to protect an entry that is already
+ *		protected will generate an error.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/24/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+check_double_protect_err(void)
+{
+    const char * fcn_name = "check_double_protect_err()";
+    H5C_t * cache_ptr = NULL;
+    test_entry_t * entry_ptr;
+    H5C_cache_entry_t * cache_entry_ptr;
+
+    TESTING("protect a protected entry error");
+
+    pass = TRUE;
+
+    /* allocate a cache, protect an entry, and then try to protect
+     * the entry again.  This should fail.  Unprotect the entry and
+     * destroy the cache -- should succeed.
+     */
+
+    if ( pass ) {
+
+        reset_entries();
+
+        cache_ptr = setup_cache((size_t)(2 * 1024),
+                                (size_t)(1 * 1024));
+
+        protect_entry(cache_ptr, 0, 0);
+
+        entry_ptr = &((entries[0])[0]);
+    }
+
+    if ( pass ) {
+
+        cache_entry_ptr = H5C_protect(NULL, -1, -1, cache_ptr, &(types[0]),
+                                      entry_ptr->addr, NULL, NULL);
+
+        if ( cache_entry_ptr != NULL ) {
+
+            pass = FALSE;
+            failure_mssg = "attempt to protect a protected entry succeeded.\n";
+        }
+    }
+
+    if ( pass ) {
+
+        unprotect_entry(cache_ptr, 0, 0, FALSE, FALSE);
+    }
+
+    if ( pass ) {
+
+        takedown_cache(cache_ptr, FALSE, FALSE);
+    }
+
+    if ( pass ) { PASSED(); } else { H5_FAILED(); }
+
+    if ( ! pass )
+        HDfprintf(stdout, "%s: failure_mssg = \"%s\".\n",
+                  fcn_name, failure_mssg);
+
+} /* check_double_protect_err() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	check_double_unprotect_err()
+ *
+ * Purpose:	Verify that an attempt to unprotect an entry that is already
+ *		unprotected will generate an error.
+ *
+ * Return:	void
+ *
+ * Programmer:	John Mainzer
+ *              6/24/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+check_double_unprotect_err(void)
+{
+    const char * fcn_name = "check_double_unprotect_err()";
+    herr_t result;
+    H5C_t * cache_ptr = NULL;
+    test_entry_t * entry_ptr;
+
+    TESTING("unprotect an unprotected entry error");
+
+    pass = TRUE;
+
+    /* allocate a cache, protect an entry, unprotect it, and then try to
+     * unprotect the entry again.  This should fail.  Destroy the cache
+     * -- should succeed.
+     */
+
+    if ( pass ) {
+
+        reset_entries();
+
+        cache_ptr = setup_cache((size_t)(2 * 1024),
+                                (size_t)(1 * 1024));
+
+        protect_entry(cache_ptr, 0, 0);
+
+        unprotect_entry(cache_ptr, 0, 0, FALSE, FALSE);
+
+        entry_ptr = &((entries[0])[0]);
+    }
+
+    if ( pass ) {
+
+        result = H5C_unprotect(NULL, -1, -1, cache_ptr, &(types[0]),
+                               entry_ptr->addr, (void *)entry_ptr, FALSE);
+
+        if ( result > 0 ) {
+
+            pass = FALSE;
+            failure_mssg =
+                "attempt to unprotect an unprotected entry succeeded.\n";
+        }
+    }
+
+    if ( pass ) {
+
+        takedown_cache(cache_ptr, FALSE, FALSE);
+    }
+
+    if ( pass ) { PASSED(); } else { H5_FAILED(); }
+
+    if ( ! pass )
+        HDfprintf(stdout, "%s: failure_mssg = \"%s\".\n",
+                  fcn_name, failure_mssg);
+
+} /* check_double_unprotect_err() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Run tests on the cache code contained in H5C.c
+ *
+ * Return:	Success:
+ *
+ *		Failure:
+ *
+ * Programmer:	John Mainzer
+ *              6/24/04
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    H5open();
+
+    smoke_check_1();
+    smoke_check_2();
+    smoke_check_3();
+    smoke_check_4();
+    write_permitted_check();
+    check_flush_protected_err();
+    check_destroy_protected_err();
+    check_duplicate_insert_err();
+    check_rename_err();
+    check_double_protect_err();
+    check_double_unprotect_err();
+
+    return(0);
+
+} /* main() */

Added: packages/hdf5/branches/upstream/current/test/cmpd_dset.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/cmpd_dset.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/cmpd_dset.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,733 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Friday, January 23, 1998
+ */
+
+/* See H5private.h for how to include headers */
+#undef NDEBUG
+
+#define H5T_PACKAGE
+#include "H5Tpkg.h"		/*to turn off hardware conversions*/
+
+#include "h5test.h"
+
+const char *FILENAME[] = {
+    "cmpd_dset",
+    NULL
+};
+
+/* The first dataset */
+typedef struct s1_t {
+    unsigned int a;
+    unsigned int b;
+    unsigned int c[4];
+    unsigned int d;
+    unsigned int e;
+} s1_t;
+
+/* The second dataset (same as first) */
+typedef s1_t s2_t;
+
+/* The third dataset (reversed fields of s1) */
+typedef struct s3_t {
+    unsigned int e;
+    unsigned int d;
+    unsigned int c[4];
+    unsigned int b;
+    unsigned int a;
+} s3_t;
+
+/* The fourth dataset (a subset of s1) */
+typedef struct s4_t {
+    unsigned int b;
+    unsigned int d;
+} s4_t;
+
+/* The fifth dataset (a superset of s1) */
+typedef struct s5_t {
+    unsigned int pre;
+    unsigned int a;
+    unsigned int b;
+    unsigned int mid1;
+    unsigned int c[4];
+    unsigned int mid2;
+    unsigned int d;
+    unsigned int e;
+    unsigned int post;
+} s5_t;
+
+
+#if 1
+#  define NX	100u
+#  define NY	2000u
+#else
+#  define NX	12u
+#  define NY    9u
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Creates a simple dataset of a compound type and then reads
+ *		it back.  The dataset is read back in various ways to
+ *		exercise the I/O pipeline and compound type conversion.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	1
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, January 23, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-06-23
+ *		If the command line switch `--noopt' is present then the fast
+ *		compound datatype conversion is turned off.
+ *-------------------------------------------------------------------------
+ */
+int
+main (int argc, char *argv[])
+{
+    /* First dataset */
+    static s1_t		s1[NX*NY];
+    hid_t		s1_tid;
+
+    /* Second dataset */
+    static s2_t		s2[NX*NY];
+    hid_t		s2_tid;
+
+    /* Third dataset */
+    static s3_t		s3[NX*NY];
+    hid_t		s3_tid;
+
+    /* Fourth dataset */
+    static s4_t		s4[NX*NY];
+    hid_t		s4_tid;
+
+    /* Fifth dataset */
+    static s5_t		s5[NX*NY];
+    hid_t		s5_tid;
+
+    /* Sixth dataset */
+
+    /* Seventh dataset */
+    hid_t		s7_sid;
+
+    /* Eighth dataset */
+    s1_t		*s8 = NULL;
+    hid_t		s8_f_sid;	/*file data space		*/
+    hid_t		s8_m_sid;	/*memory data space		*/
+
+    /* Ninth dataset */
+
+    /* Tenth dataset */
+
+    /* Eleventh dataset */
+    s4_t		*s11 = NULL;
+
+    /* Other variables */
+    unsigned int	i, j;
+    hid_t		file, dataset, space, PRESERVE, fapl;
+    hid_t       array_dt;
+    static hsize_t	dim[] = {NX, NY};
+    hsize_t 		f_offset[2];	/*offset of hyperslab in file	*/
+    hsize_t 		h_size[2];	/*size of hyperslab		*/
+    hsize_t		memb_size[1] = {4};
+    char		filename[256];
+
+    h5_reset();
+
+    /* Turn off optimized compound converter? */
+    if (argc>1) {
+	if (argc>2 || strcmp("--noopt", argv[1])) {
+	    fprintf(stderr, "usage: %s [--noopt]\n", argv[0]);
+	    exit(1);
+	}
+	H5Tunregister(H5T_PERS_DONTCARE, NULL, -1, -1, H5T_conv_struct_opt);
+    }
+
+    /* Create the file */
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
+    if ((file = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) {
+	goto error;
+    }
+
+    /* Create the data space */
+    if ((space = H5Screate_simple (2, dim, NULL))<0) goto error;
+
+    /* Create xfer properties to preserve initialized data */
+    if ((PRESERVE = H5Pcreate (H5P_DATASET_XFER))<0) goto error;
+    if (H5Pset_preserve (PRESERVE, 1)<0) goto error;
+
+    /*
+     *######################################################################
+     * STEP 1: Save the original dataset natively.
+     */
+    TESTING("basic compound write");
+
+    /* Initialize the dataset */
+    for (i=0; i<NX*NY; i++) {
+	s1[i].a = 8*i+0;
+	s1[i].b = 2000+2*i;
+	s1[i].c[0] = 8*i+2;
+	s1[i].c[1] = 8*i+3;
+	s1[i].c[2] = 8*i+4;
+	s1[i].c[3] = 8*i+5;
+	s1[i].d = 2001+2*i;
+	s1[i].e = 8*i+7;
+    }
+
+    /* Create the memory data type */
+    if ((s1_tid = H5Tcreate (H5T_COMPOUND, sizeof(s1_t)))<0)
+        goto error;
+    array_dt=H5Tarray_create(H5T_NATIVE_INT, 1, memb_size, NULL);
+    if (H5Tinsert (s1_tid, "a", HOFFSET(s1_t,a), H5T_NATIVE_INT)<0 ||
+            H5Tinsert (s1_tid, "b", HOFFSET(s1_t,b), H5T_NATIVE_INT)<0 ||
+            H5Tinsert (s1_tid, "c", HOFFSET(s1_t,c), array_dt)<0 ||
+            H5Tinsert (s1_tid, "d", HOFFSET(s1_t,d), H5T_NATIVE_INT)<0 ||
+            H5Tinsert (s1_tid, "e", HOFFSET(s1_t,e), H5T_NATIVE_INT)<0)
+        goto error;
+    H5Tclose(array_dt);
+
+    /* Create the dataset */
+    if ((dataset = H5Dcreate (file, "s1", s1_tid, space, H5P_DEFAULT))<0) {
+	goto error;
+    }
+
+    /* Write the data */
+    if (H5Dwrite (dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1)<0) {
+	goto error;
+    }
+    PASSED();
+
+    /*
+     *######################################################################
+     * STEP 2: We create a new type ID for the second dataset even though
+     * 	       it's the same as the first just to test things better, but
+     *	       in fact, we could have used s1_tid.
+     */
+    TESTING("basic compound read");
+
+    /* Create a data type for s2 */
+    if ((s2_tid = H5Tcreate (H5T_COMPOUND, sizeof(s2_t)))<0)
+        goto error;
+    array_dt=H5Tarray_create(H5T_NATIVE_INT, 1, memb_size, NULL);
+    if (H5Tinsert (s2_tid, "a", HOFFSET(s2_t,a), H5T_NATIVE_INT)<0 ||
+            H5Tinsert (s2_tid, "b", HOFFSET(s2_t,b), H5T_NATIVE_INT)<0 ||
+            H5Tinsert (s2_tid, "c", HOFFSET(s2_t,c), array_dt)<0 ||
+            H5Tinsert (s2_tid, "d", HOFFSET(s2_t,d), H5T_NATIVE_INT)<0 ||
+            H5Tinsert (s2_tid, "e", HOFFSET(s2_t,e), H5T_NATIVE_INT)<0)
+        goto error;
+    H5Tclose(array_dt);
+
+    /* Read the data */
+    if (H5Dread (dataset, s2_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s2)<0) {
+	goto error;
+    }
+
+    /* Compare s2 with s1.  They should be the same */
+    for (i=0; i<NX*NY; i++) {
+	if (s1[i].a!=s2[i].a ||
+	    s1[i].b!=s2[i].b ||
+	    s1[i].c[0]!=s2[i].c[0] ||
+	    s1[i].c[1]!=s2[i].c[1] ||
+	    s1[i].c[2]!=s2[i].c[2] ||
+	    s1[i].c[3]!=s2[i].c[3] ||
+	    s1[i].d!=s2[i].d ||
+	    s1[i].e!=s2[i].e) {
+	    H5_FAILED();
+	    puts("    Incorrect values read from the file");
+	    goto error;
+	}
+    }
+    PASSED();
+
+    /*
+     *######################################################################
+     * STEP 3: Read the dataset back into a third memory buffer. This buffer
+     * 	       has the same data space but the data type is different: the
+     *	       data type is a struct whose members are in the opposite order.
+     */
+    TESTING("reversal of struct members");
+
+    /* Create a data type for s3 */
+    if ((s3_tid = H5Tcreate (H5T_COMPOUND, sizeof(s3_t)))<0)
+        goto error;
+    array_dt=H5Tarray_create(H5T_NATIVE_INT, 1, memb_size, NULL);
+    if (H5Tinsert (s3_tid, "a", HOFFSET(s3_t,a), H5T_NATIVE_INT)<0 ||
+            H5Tinsert (s3_tid, "b", HOFFSET(s3_t,b), H5T_NATIVE_INT)<0 ||
+            H5Tinsert (s3_tid, "c", HOFFSET(s3_t,c), array_dt)<0 ||
+            H5Tinsert (s3_tid, "d", HOFFSET(s3_t,d), H5T_NATIVE_INT)<0 ||
+            H5Tinsert (s3_tid, "e", HOFFSET(s3_t,e), H5T_NATIVE_INT)<0)
+        goto error;
+    H5Tclose(array_dt);
+
+    /* Read the data */
+    if (H5Dread (dataset, s3_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s3)<0) {
+	goto error;
+    }
+
+    /* Compare s3 with s1.  They should be the same */
+    for (i=0; i<NX*NY; i++) {
+	if (s1[i].a!=s3[i].a ||
+	    s1[i].b!=s3[i].b ||
+	    s1[i].c[0]!=s3[i].c[0] ||
+	    s1[i].c[1]!=s3[i].c[1] ||
+	    s1[i].c[2]!=s3[i].c[2] ||
+	    s1[i].c[3]!=s3[i].c[3] ||
+	    s1[i].d!=s3[i].d ||
+	    s1[i].e!=s3[i].e) {
+	    H5_FAILED();
+	    puts("    Incorrect values read from the file");
+	    goto error;
+	}
+    }
+    PASSED();
+
+    /*
+     *######################################################################
+     * STEP 4: Read a subset of the members.  Of the <a,b,c,d,e> members
+     *         stored on disk we'll read <b,d>.
+     */
+    TESTING("subset struct read");
+
+    /* Create a datatype for s4 */
+    if ((s4_tid = H5Tcreate (H5T_COMPOUND, sizeof(s4_t)))<0) goto error;
+    if (H5Tinsert (s4_tid, "b", HOFFSET(s4_t,b), H5T_NATIVE_INT)<0) goto error;
+    if (H5Tinsert (s4_tid, "d", HOFFSET(s4_t,d), H5T_NATIVE_INT)<0) goto error;
+
+    /* Read the data */
+    if (H5Dread (dataset, s4_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s4)<0) {
+	goto error;
+    }
+
+    /* Compare s4 with s1 */
+    for (i=0; i<NX*NY; i++) {
+	if (s1[i].b!=s4[i].b ||
+	    s1[i].d!=s4[i].d) {
+	    H5_FAILED();
+	    puts("    Incorrect values read from the file");
+	    goto error;
+	}
+    }
+    PASSED();
+
+    /*
+     *######################################################################
+     * STEP 5: Read all the members into a struct which has other members
+     * 	       which have already been initialized.
+     */
+    TESTING("partially initialized superset read");
+
+    /* Initialize some members */
+    for (i=0; i<NX*NY; i++) {
+	s5[i].pre =  1000+4*i;
+	s5[i].mid1 = 1001+4*i;
+	s5[i].mid2 = 1002+4*i;
+	s5[i].post = 1003+4*i;
+    }
+
+    /* Create a data type for s5 */
+    if ((s5_tid = H5Tcreate (H5T_COMPOUND, sizeof(s5_t)))<0)
+        goto error;
+    array_dt=H5Tarray_create(H5T_NATIVE_INT, 1, memb_size, NULL);
+    if (H5Tinsert (s5_tid, "a", HOFFSET(s5_t,a), H5T_NATIVE_INT)<0 ||
+            H5Tinsert (s5_tid, "b", HOFFSET(s5_t,b), H5T_NATIVE_INT)<0 ||
+            H5Tinsert (s5_tid, "c", HOFFSET(s5_t,c), array_dt)<0 ||
+            H5Tinsert (s5_tid, "d", HOFFSET(s5_t,d), H5T_NATIVE_INT)<0 ||
+            H5Tinsert (s5_tid, "e", HOFFSET(s5_t,e), H5T_NATIVE_INT))
+        goto error;
+    H5Tclose(array_dt);
+
+    /* Read the data */
+    if (H5Dread (dataset, s5_tid, H5S_ALL, H5S_ALL, PRESERVE, s5)<0) {
+	goto error;
+    }
+
+    /* Check that the data was read properly */
+    for (i=0; i<NX*NY; i++) {
+	if (s1[i].a!=s5[i].a ||
+	    s1[i].b!=s5[i].b ||
+	    s1[i].c[0]!=s5[i].c[0] ||
+	    s1[i].c[1]!=s5[i].c[1] ||
+	    s1[i].c[2]!=s5[i].c[2] ||
+	    s1[i].c[3]!=s5[i].c[3] ||
+	    s1[i].d!=s5[i].d ||
+	    s1[i].e!=s5[i].e) {
+	    H5_FAILED();
+	    puts("    Incorrect values read from the file");
+	    goto error;
+	}
+    }
+
+    /* Check that no previous values were clobbered */
+    for (i=0; i<NX*NY; i++) {
+	if (s5[i].pre  != 1000+4*i ||
+	    s5[i].mid1 != 1001+4*i ||
+	    s5[i].mid2 != 1002+4*i ||
+	    s5[i].post != 1003+4*i) {
+	    H5_FAILED();
+	    puts("    Memory values were clobbered");
+	    goto error;
+	}
+    }
+    PASSED();
+
+    /*
+     *######################################################################
+     * STEP 6: Update fields `b' and `d' on the file leaving the other
+     *         fields unchanged.  This tests member alignment and background
+     *	       buffers.
+     */
+    TESTING("partially initialized superset write");
+
+    /* Initialize `s4' with new values */
+    for (i=0; i<NX*NY; i++) {
+	s4[i].b = 8*i+1;
+	s4[i].d = 8*i+6;
+    }
+
+    /* Write the data to file */
+    if (H5Dwrite (dataset, s4_tid, H5S_ALL, H5S_ALL, PRESERVE, s4)<0) {
+	goto error;
+    }
+
+    /* Read the data back */
+    if (H5Dread (dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1)<0) {
+	goto error;
+    }
+
+    /* Compare */
+    for (i=0; i<NX*NY; i++) {
+	if (s1[i].a != 8*i+0 ||
+	    s1[i].b != 8*i+1 ||
+	    s1[i].c[0] != 8*i+2 ||
+	    s1[i].c[1] != 8*i+3 ||
+	    s1[i].c[2] != 8*i+4 ||
+	    s1[i].c[3] != 8*i+5 ||
+	    s1[i].d != 8*i+6 ||
+	    s1[i].e != 8*i+7) {
+	    H5_FAILED();
+	    printf("    i==%u, row=%u, col=%u\n", i, i/NY, i%NY);
+	    printf("    got: {%7d,%7d,[%7d,%7d,%7d,%7d],%7d,%7d}\n",
+		   s1[i].a, s1[i].b, s1[i].c[0], s1[i].c[1], s1[i].c[2],
+		   s1[i].c[3], s1[i].d, s1[i].e);
+	    printf("    ans: {%7d,%7d,[%7d,%7d,%7d,%7d],%7d,%7d}\n",
+		   8*i+0, 8*i+1, 8*i+2, 8*i+3, 8*i+4, 8*i+5, 8*i+6, 8*i+7);
+	    goto error;
+	}
+    }
+    PASSED();
+
+    /*
+     *######################################################################
+     * STEP 7. Read the original dataset with an explicit data space.  Even
+     * though these data spaces are equal it tests a different part of the
+     * library.
+     */
+    TESTING("explicit data space");
+
+    /* Create the data space */
+    if ((s7_sid = H5Screate_simple (2, dim, NULL))<0) goto error;
+
+    /* Read the dataset */
+    if (H5Dread (dataset, s2_tid, s7_sid, H5S_ALL, H5P_DEFAULT, s2)<0) {
+	goto error;
+    }
+
+    /* Compare */
+    for (i=0; i<NX*NY; i++) {
+	if (s2[i].a != s1[i].a ||
+	    s2[i].b != s1[i].b ||
+	    s2[i].c[0] != s1[i].c[0] ||
+	    s2[i].c[1] != s1[i].c[1] ||
+	    s2[i].c[2] != s1[i].c[2] ||
+	    s2[i].c[3] != s1[i].c[3] ||
+	    s2[i].d != s1[i].d ||
+	    s2[i].e != s1[i].e) {
+	    H5_FAILED();
+	    puts("    Incorrect values read from file");
+	    goto error;
+	}
+    }
+    PASSED();
+
+
+    /*
+     *######################################################################
+     * STEP 8. Read a hyperslab of the file into a complete array in memory.
+     * The hyperslab is the middle third of the array.
+     */
+    TESTING("hyperslab partial read to array");
+
+    /* Create the file data space */
+    if ((s8_f_sid = H5Dget_space (dataset))<0) goto error;
+    f_offset[0] = NX/3;
+    f_offset[1] = NY/3;
+    h_size[0] = 2*NX/3 - f_offset[0];
+    h_size[1] = 2*NY/3 - f_offset[1];
+    if (H5Sselect_hyperslab (s8_f_sid, H5S_SELECT_SET, f_offset, NULL,
+			     h_size, NULL)<0) goto error;
+
+    /* Create memory data space */
+    if ((s8_m_sid = H5Screate_simple (2, h_size, NULL))<0) goto error;
+
+    /* Read the dataset */
+    s8 = calloc ((size_t)(h_size[0]*h_size[1]), sizeof(s1_t));
+    assert (s8);
+    if (H5Dread (dataset, s1_tid, s8_m_sid, s8_f_sid, H5P_DEFAULT, s8)<0) {
+	goto error;
+    }
+
+    /* Compare */
+    for (i=0; i<h_size[0]; i++) {
+	for (j=0; j<h_size[1]; j++) {
+	    s1_t *ps1 = s1 + (f_offset[0]+i)*NY + f_offset[1] + j;
+	    s1_t *ps8 = s8 + i*h_size[1] + j;
+
+	    if (ps8->a != ps1->a ||
+		ps8->b != ps1->b ||
+		ps8->c[0] != ps1->c[0] ||
+		ps8->c[1] != ps1->c[1] ||
+		ps8->c[2] != ps1->c[2] ||
+		ps8->c[3] != ps1->c[3] ||
+		ps8->d != ps1->d ||
+		ps8->e != ps1->e) {
+		H5_FAILED();
+		puts("    Incorrect values read from file");
+		goto error;
+	    }
+	}
+    }
+
+    free (s8);
+    s8 = NULL;
+    PASSED();
+
+
+    /*
+     *######################################################################
+     * STEP 9.  Read a hyperslab of the file into a hyperslab of memory.  The
+     * part of memory not read is already initialized and must not change.
+     */
+    TESTING("hyperslab partial read to another hyperslab");
+
+    /* Initialize */
+    for (i=0; i<NX*NY; i++) {
+	s2[i].a = s2[i].b = s2[i].d = s2[i].e = (unsigned)(-1);
+	s2[i].c[0] = s2[i].c[1] = s2[i].c[2] = s2[i].c[3] = (unsigned)(-1);
+    }
+
+    /* Read the hyperslab */
+    if (H5Dread (dataset, s2_tid, s8_f_sid, s8_f_sid, H5P_DEFAULT, s2)<0) {
+	goto error;
+    }
+
+    /* Compare */
+    for (i=0; i<NX; i++) {
+	for (j=0; j<NY; j++) {
+	    s1_t *ps1 = s1 + i*NY + j;
+	    s2_t *ps2 = s2 + i*NY + j;
+	    if (i>=f_offset[0] &&
+		i<f_offset[0]+h_size[0] &&
+		j>=f_offset[1] &&
+		j<f_offset[1]+h_size[1]) {
+		if (ps2->a != ps1->a ||
+		    ps2->b != ps1->b ||
+		    ps2->c[0] != ps1->c[0] ||
+		    ps2->c[1] != ps1->c[1] ||
+		    ps2->c[2] != ps1->c[2] ||
+		    ps2->c[3] != ps1->c[3] ||
+		    ps2->d != ps1->d ||
+		    ps2->e != ps1->e) {
+		    H5_FAILED();
+		    puts("    Memory values clobbered");
+		    goto error;
+		}
+	    } else {
+		if (ps2->a != (unsigned)(-1) ||
+		    ps2->b != (unsigned)(-1) ||
+		    ps2->c[0] != (unsigned)(-1) ||
+		    ps2->c[1] != (unsigned)(-1) ||
+		    ps2->c[2] != (unsigned)(-1) ||
+		    ps2->c[3] != (unsigned)(-1) ||
+		    ps2->d != (unsigned)(-1) ||
+		    ps2->e != (unsigned)(-1)) {
+		    H5_FAILED();
+		    puts("    Incorrect values read from file");
+		    goto error;
+		}
+	    }
+	}
+    }
+    PASSED();
+
+    /*
+     *######################################################################
+     * STEP 10. Same as step 9 except the memory array contains some members
+     * which are already initialized, like step 5.
+     */
+    TESTING("hyperslab to hyperslab part initialized read");
+
+    /* Initialize */
+    for (i=0; i<NX*NY; i++) {
+	s5[i].a = s5[i].b = s5[i].d = s5[i].e = (unsigned)(-1);
+	s5[i].c[0] = s5[i].c[1] = s5[i].c[2] = s5[i].c[3] = (unsigned)(-1);
+	s5[i].pre = s5[i].mid1 = s5[i].mid2 = s5[i].post = (unsigned)(-1);
+    }
+
+    /* Read the hyperslab */
+    if (H5Dread (dataset, s5_tid, s8_f_sid, s8_f_sid, PRESERVE, s5)<0) {
+	goto error;
+    }
+
+    /* Compare */
+    for (i=0; i<NX; i++) {
+	for (j=0; j<NY; j++) {
+	    s1_t *ps1 = s1 + i*NY + j;
+	    s5_t *ps5 = s5 + i*NY + j;
+	    if (i>=f_offset[0] &&
+		i<f_offset[0]+h_size[0] &&
+		j>=f_offset[1] &&
+		j<f_offset[1]+h_size[1]) {
+		if (ps5->pre != (unsigned)(-1) ||
+		    ps5->a != ps1->a ||
+		    ps5->b != ps1->b ||
+		    ps5->mid1 != (unsigned)(-1) ||
+		    ps5->c[0] != ps1->c[0] ||
+		    ps5->c[1] != ps1->c[1] ||
+		    ps5->c[2] != ps1->c[2] ||
+		    ps5->c[3] != ps1->c[3] ||
+		    ps5->mid2 != (unsigned)(-1) ||
+		    ps5->d != ps1->d ||
+		    ps5->e != ps1->e ||
+		    ps5->post != (unsigned)(-1)) {
+		    H5_FAILED();
+		    puts("    Memory values clobbered");
+		    goto error;
+		}
+	    } else {
+		if (ps5->pre != (unsigned)(-1) ||
+		    ps5->a != (unsigned)(-1) ||
+		    ps5->b != (unsigned)(-1) ||
+		    ps5->mid1 != (unsigned)(-1) ||
+		    ps5->c[0] != (unsigned)(-1) ||
+		    ps5->c[1] != (unsigned)(-1) ||
+		    ps5->c[2] != (unsigned)(-1) ||
+		    ps5->c[3] != (unsigned)(-1) ||
+		    ps5->mid2 != (unsigned)(-1) ||
+		    ps5->d != (unsigned)(-1) ||
+		    ps5->e != (unsigned)(-1) ||
+		    ps5->post != (unsigned)(-1)) {
+		    H5_FAILED();
+		    puts("    Incorrect values read from file");
+		    goto error;
+		}
+	    }
+	}
+    }
+    PASSED();
+
+    /*
+     *######################################################################
+     * Step 11: Write an array into the middle third of the dataset
+     * initializeing only members `b' and `d' to -1.
+     */
+    TESTING("hyperslab part initialized write");
+
+    /* Create the memory array and initialize all fields to zero */
+    f_offset[0] = NX/3;
+    f_offset[1] = NY/3;
+    h_size[0] = 2*NX/3 - f_offset[0];
+    h_size[1] = 2*NY/3 - f_offset[1];
+    s11 = malloc ((size_t)h_size[0]*(size_t)h_size[1]*sizeof(s4_t));
+    assert (s11);
+
+    /* Initialize */
+    for (i=0; i<h_size[0]*h_size[1]; i++) {
+	s11[i].b = s11[i].d = (unsigned)(-1);
+    }
+
+    /* Write to disk */
+    if (H5Dwrite (dataset, s4_tid, s8_m_sid, s8_f_sid, PRESERVE, s11)<0) {
+	goto error;
+    }
+    free (s11);
+    s11=NULL;
+
+    /* Read the whole thing */
+    if (H5Dread (dataset, s1_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1)<0) {
+	goto error;
+    }
+
+    /* Compare */
+    for (i=0; i<NX; i++) {
+	for (j=0; j<NY; j++) {
+	    s1_t *ps1 = s1 + i*NY + j;
+
+	    if (ps1->a != 8*(i*NY+j)+0 ||
+		ps1->c[0] != 8*(i*NY+j)+2 ||
+		ps1->c[1] != 8*(i*NY+j)+3 ||
+		ps1->c[2] != 8*(i*NY+j)+4 ||
+		ps1->c[3] != 8*(i*NY+j)+5 ||
+		ps1->e != 8*(i*NY+j)+7) {
+		H5_FAILED();
+		puts("    Write clobbered values");
+		goto error;
+	    }
+
+	    if (i>=f_offset[0] &&
+		i<f_offset[0]+h_size[0] &&
+		j>=f_offset[1] &&
+		j<f_offset[1]+h_size[1]) {
+		if (ps1->b != (unsigned)(-1) ||
+		    ps1->d != (unsigned)(-1)) {
+		    H5_FAILED();
+		    puts("    Wrong values written or read");
+		    goto error;
+		}
+	    } else {
+		if (ps1->b != 8*(i*NY+j)+1 ||
+		    ps1->d != 8*(i*NY+j)+6) {
+		    H5_FAILED();
+		    puts("    Write clobbered values");
+		    goto error;
+		}
+	    }
+	}
+    }
+    PASSED();
+
+
+    /*
+     * Release resources.
+     */
+    H5Pclose (PRESERVE);
+    H5Dclose (dataset);
+    H5Fclose (file);
+
+    h5_cleanup(FILENAME, fapl);
+    puts("All compound dataset tests passed.");
+    return 0;
+
+error:
+    puts("Remaining tests have been skipped.");
+    puts("*** DATASET TESTS FAILED ***");
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/test/dangle.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/dangle.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/dangle.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,574 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Tuesday, May 13, 2003
+ *
+ * Purpose:	Test dangling IDs
+ */
+#include "h5test.h"
+#include "H5private.h"
+
+const char *FILENAME[] = {
+    "dangle",
+    NULL
+};
+
+#define MAX_DANGLE      1000
+
+#define DSETNAME        "Dataset"
+#define GROUPNAME       "Group"
+#define TYPENAME        "Type"
+#define ATTRNAME        "Attribute"
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_dangle_dataset
+ *
+ * Purpose:	Check for dangling dataset IDs causing problems on library
+ *              shutdown
+ *
+ * Return:	Success:	zero
+ *		Failure:	non-zero
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, May 13, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_dangle_dataset(H5F_close_degree_t degree)
+{
+    char	filename[1024];
+    hid_t fid;  /* File ID */
+    hid_t fapl; /* File access property list */
+    hid_t dsid; /* Dataset ID */
+    hid_t sid;  /* Dataspace ID */
+    unsigned u; /* Local index variable */
+
+    TESTING("    dangling dataset IDs");
+
+    if(H5open()<0)
+        TEST_ERROR;
+
+    /* Create file access property list */
+    if((fapl=H5Pcreate(H5P_FILE_ACCESS))<0)
+        TEST_ERROR;
+
+    /* Set file close degree */
+    if(H5Pset_fclose_degree(fapl,degree)<0)
+        TEST_ERROR;
+
+    h5_fixname(FILENAME[0], H5P_DEFAULT, filename, sizeof filename);
+    if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+        TEST_ERROR;
+
+    if((sid = H5Screate (H5S_SCALAR))<0)
+        TEST_ERROR;
+
+    if((dsid = H5Dcreate (fid, DSETNAME, H5T_NATIVE_INT, sid, H5P_DEFAULT))<0)
+        TEST_ERROR;
+
+    if(H5Dclose(dsid)<0)
+        TEST_ERROR;
+
+    /* Try creating duplicate dataset */
+    H5E_BEGIN_TRY {
+        if((dsid = H5Dcreate (fid, DSETNAME, H5T_NATIVE_INT, sid, H5P_DEFAULT))>=0)
+            TEST_ERROR;
+    } H5E_END_TRY;
+
+    if(H5Sclose(sid)<0)
+        TEST_ERROR;
+
+    /* Leave open a _lot_ of objects */
+    for(u=0; u<MAX_DANGLE; u++) {
+        if((dsid = H5Dopen (fid, DSETNAME))<0)
+            TEST_ERROR;
+    } /* end for */
+
+    if(degree==H5F_CLOSE_SEMI) {
+        H5E_BEGIN_TRY {
+            if(H5Fclose(fid)>=0)
+                TEST_ERROR;
+        } H5E_END_TRY;
+    } /* end if */
+    else
+        if(H5Fclose(fid)<0)
+            TEST_ERROR;
+
+    if(H5Pclose(fapl)<0)
+        TEST_ERROR;
+
+    if(H5close()<0)
+        TEST_ERROR;
+
+    if(h5_get_file_size(filename)==0)
+        TEST_ERROR;
+
+    /* Clean up temporary file */
+    HDremove(filename);
+
+    PASSED();
+    return 0;
+
+error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_dangle_group
+ *
+ * Purpose:	Check for dangling group IDs causing problems on library
+ *              shutdown
+ *
+ * Return:	Success:	zero
+ *		Failure:	non-zero
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, May 13, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_dangle_group(H5F_close_degree_t degree)
+{
+    char	filename[1024];
+    hid_t fid;  /* File ID */
+    hid_t fapl; /* File access property list */
+    hid_t gid;  /* Group ID */
+    unsigned u; /* Local index variable */
+
+    TESTING("    dangling group IDs");
+
+    if(H5open()<0)
+        TEST_ERROR;
+
+    /* Create file access property list */
+    if((fapl=H5Pcreate(H5P_FILE_ACCESS))<0)
+        TEST_ERROR;
+
+    /* Set file close degree */
+    if(H5Pset_fclose_degree(fapl,degree)<0)
+        TEST_ERROR;
+
+    h5_fixname(FILENAME[0], H5P_DEFAULT, filename, sizeof filename);
+    if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+        TEST_ERROR;
+
+    if((gid = H5Gcreate (fid, GROUPNAME, 0))<0)
+        TEST_ERROR;
+
+    if(H5Gclose(gid)<0)
+        TEST_ERROR;
+
+    /* Try creating duplicate group */
+    H5E_BEGIN_TRY {
+        if((gid = H5Gcreate (fid, GROUPNAME, 0))>=0)
+            TEST_ERROR;
+    } H5E_END_TRY;
+
+    /* Leave open a _lot_ of objects */
+    for(u=0; u<MAX_DANGLE; u++) {
+        if((gid = H5Gopen (fid, GROUPNAME))<0)
+            TEST_ERROR;
+    } /* end for */
+
+    if((gid = H5Gopen (fid, GROUPNAME))<0)
+        TEST_ERROR;
+
+    if(degree==H5F_CLOSE_SEMI) {
+        H5E_BEGIN_TRY {
+            if(H5Fclose(fid)>=0)
+                TEST_ERROR;
+        } H5E_END_TRY;
+    } /* end if */
+    else
+        if(H5Fclose(fid)<0)
+            TEST_ERROR;
+
+    if(H5Pclose(fapl)<0)
+        TEST_ERROR;
+
+    if(H5close()<0)
+        TEST_ERROR;
+
+    if(h5_get_file_size(filename)==0)
+        TEST_ERROR;
+
+    /* Clean up temporary file */
+    HDremove(filename);
+
+    PASSED();
+    return 0;
+
+error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_dangle_datatype1
+ *
+ * Purpose:	Check for dangling datatype IDs causing problems on library
+ *              shutdown
+ *
+ * Return:	Success:	zero
+ *		Failure:	non-zero
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, May 13, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_dangle_datatype1(H5F_close_degree_t degree)
+{
+    char	filename[1024];
+    hid_t fid;  /* File ID */
+    hid_t fapl; /* File access property list */
+    hid_t tid;  /* Datatype ID */
+    unsigned u; /* Local index variable */
+
+    TESTING("    dangling named datatype IDs");
+
+    if(H5open()<0)
+        TEST_ERROR;
+
+    /* Create file access property list */
+    if((fapl=H5Pcreate(H5P_FILE_ACCESS))<0)
+        TEST_ERROR;
+
+    /* Set file close degree */
+    if(H5Pset_fclose_degree(fapl,degree)<0)
+        TEST_ERROR;
+
+    h5_fixname(FILENAME[0], H5P_DEFAULT, filename, sizeof filename);
+    if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+        TEST_ERROR;
+
+    if((tid = H5Tcopy (H5T_NATIVE_INT))<0)
+        TEST_ERROR;
+
+    if(H5Tcommit(fid,TYPENAME,tid)<0)
+        TEST_ERROR;
+
+    if(H5Tclose(tid)<0)
+        TEST_ERROR;
+
+    /* Try creating duplicate named datatype */
+    if((tid = H5Tcopy (H5T_NATIVE_INT))<0)
+        TEST_ERROR;
+    H5E_BEGIN_TRY {
+        if(H5Tcommit(fid,TYPENAME,tid)>=0)
+            TEST_ERROR;
+    } H5E_END_TRY;
+    if(H5Tclose(tid)<0)
+        TEST_ERROR;
+
+    /* Leave open a _lot_ of objects */
+    for(u=0; u<MAX_DANGLE; u++) {
+        if((tid = H5Topen (fid, TYPENAME))<0)
+            TEST_ERROR;
+    } /* end for */
+
+    if(degree==H5F_CLOSE_SEMI) {
+        H5E_BEGIN_TRY {
+            if(H5Fclose(fid)>=0)
+                TEST_ERROR;
+        } H5E_END_TRY;
+    } /* end if */
+    else
+        if(H5Fclose(fid)<0)
+            TEST_ERROR;
+
+    if(H5Pclose(fapl)<0)
+        TEST_ERROR;
+
+    if(H5close()<0)
+        TEST_ERROR;
+
+    if(h5_get_file_size(filename)==0)
+        TEST_ERROR;
+
+    /* Clean up temporary file */
+    HDremove(filename);
+
+    PASSED();
+    return 0;
+
+error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_dangle_datatype2
+ *
+ * Purpose:	Check for dangling datatype IDs causing problems on library
+ *              shutdown
+ *
+ * Return:	Success:	zero
+ *		Failure:	non-zero
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, August 25, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_dangle_datatype2(H5F_close_degree_t degree)
+{
+    char	filename[1024];
+    hid_t fid;  /* File ID */
+    hid_t fapl; /* File access property list */
+    hid_t did;  /* Dataset ID */
+    hid_t sid;  /* Dataspace ID */
+    hid_t tid;  /* Datatype ID */
+
+    TESTING("    dangling named datatype ID used by dataset");
+
+    if(H5open()<0)
+        TEST_ERROR;
+
+    /* Create file access property list */
+    if((fapl=H5Pcreate(H5P_FILE_ACCESS))<0)
+        TEST_ERROR;
+
+    /* Set file close degree */
+    if(H5Pset_fclose_degree(fapl,degree)<0)
+        TEST_ERROR;
+
+    h5_fixname(FILENAME[0], H5P_DEFAULT, filename, sizeof filename);
+    if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+        TEST_ERROR;
+
+    if((tid = H5Tcopy (H5T_NATIVE_INT))<0)
+        TEST_ERROR;
+
+    if(H5Tcommit(fid,TYPENAME,tid)<0)
+        TEST_ERROR;
+
+    /* Create a dataset that uses the named datatype & leave it open */
+    if((sid = H5Screate(H5S_SCALAR)) < 0)
+        TEST_ERROR;
+    if((did = H5Dcreate(fid, DSETNAME, tid, sid, H5P_DEFAULT)) < 0)
+        TEST_ERROR;
+    if(H5Sclose(sid)<0)
+        TEST_ERROR;
+
+    if(degree==H5F_CLOSE_SEMI) {
+        H5E_BEGIN_TRY {
+            if(H5Fclose(fid)>=0)
+                TEST_ERROR;
+        } H5E_END_TRY;
+    } /* end if */
+    else
+        if(H5Fclose(fid)<0)
+            TEST_ERROR;
+
+    if(H5Pclose(fapl)<0)
+        TEST_ERROR;
+
+    if(H5close()<0)
+        TEST_ERROR;
+
+    if(h5_get_file_size(filename)==0)
+        TEST_ERROR;
+
+    /* Clean up temporary file */
+    HDremove(filename);
+
+    PASSED();
+    return 0;
+
+error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_dangle_attribute
+ *
+ * Purpose:	Check for dangling attribute IDs causing problems on library
+ *              shutdown
+ *
+ * Return:	Success:	zero
+ *		Failure:	non-zero
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, June 18, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_dangle_attribute(H5F_close_degree_t degree)
+{
+    char	filename[1024];
+    hid_t fid;  /* File ID */
+    hid_t fapl; /* File access property list */
+    hid_t dsid; /* Dataset ID */
+    hid_t sid;  /* Dataspace ID */
+    hid_t aid;  /* Attribute ID */
+    unsigned u; /* Local index variable */
+
+    TESTING("    dangling attribute IDs");
+
+    if(H5open()<0)
+        TEST_ERROR;
+
+    /* Create file access property list */
+    if((fapl=H5Pcreate(H5P_FILE_ACCESS))<0)
+        TEST_ERROR;
+
+    /* Set file close degree */
+    if(H5Pset_fclose_degree(fapl,degree)<0)
+        TEST_ERROR;
+
+    h5_fixname(FILENAME[0], H5P_DEFAULT, filename, sizeof filename);
+    if((fid = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+        TEST_ERROR;
+
+    if((sid = H5Screate (H5S_SCALAR))<0)
+        TEST_ERROR;
+
+    if((dsid = H5Dcreate (fid, DSETNAME, H5T_NATIVE_INT, sid, H5P_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Create an attribute on the dataset */
+    if((aid = H5Acreate (dsid, ATTRNAME, H5T_NATIVE_INT, sid, H5P_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Don't worry about writing the attribute - it will have a fill value */
+
+    /* Close the attribute on the dataset */
+    if(H5Aclose (aid)<0)
+        TEST_ERROR;
+
+    /* Try creating duplicate attribute */
+    H5E_BEGIN_TRY {
+        if((aid = H5Acreate (dsid, ATTRNAME, H5T_NATIVE_INT, sid, H5P_DEFAULT))>=0)
+            TEST_ERROR;
+    } H5E_END_TRY;
+
+    if(H5Sclose(sid)<0)
+        TEST_ERROR;
+
+    /* Leave open a _lot_ of objects */
+    for(u=0; u<MAX_DANGLE; u++) {
+        if((aid = H5Aopen_name (dsid, ATTRNAME))<0)
+            TEST_ERROR;
+    } /* end for */
+
+    if(H5Dclose(dsid)<0)
+        TEST_ERROR;
+
+    if(degree==H5F_CLOSE_SEMI) {
+        H5E_BEGIN_TRY {
+            if(H5Fclose(fid)>=0)
+                TEST_ERROR;
+        } H5E_END_TRY;
+    } /* end if */
+    else
+        if(H5Fclose(fid)<0)
+            TEST_ERROR;
+
+    if(H5Pclose(fapl)<0)
+        TEST_ERROR;
+
+    if(H5close()<0)
+        TEST_ERROR;
+
+    if(h5_get_file_size(filename)==0)
+        TEST_ERROR;
+
+    /* Clean up temporary file */
+    HDremove(filename);
+
+    PASSED();
+    return 0;
+
+error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Executes dangling ID tests
+ *
+ * Return:	Success:	zero
+ *		Failure:	non-zero
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, May 13, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    int		nerrors=0;
+
+    /* Run tests w/weak file close */
+    puts("Testing dangling objects with weak file close:");
+    nerrors += test_dangle_dataset(H5F_CLOSE_WEAK);
+    nerrors += test_dangle_group(H5F_CLOSE_WEAK);
+    nerrors += test_dangle_datatype1(H5F_CLOSE_WEAK);
+    nerrors += test_dangle_datatype2(H5F_CLOSE_WEAK);
+    nerrors += test_dangle_attribute(H5F_CLOSE_WEAK);
+
+    /* Run tests w/semi file close */
+    puts("Testing dangling objects with semi file close:");
+    nerrors += test_dangle_dataset(H5F_CLOSE_SEMI);
+    nerrors += test_dangle_group(H5F_CLOSE_SEMI);
+    nerrors += test_dangle_datatype1(H5F_CLOSE_SEMI);
+    nerrors += test_dangle_datatype2(H5F_CLOSE_SEMI);
+    nerrors += test_dangle_attribute(H5F_CLOSE_SEMI);
+
+    /* Run tests w/strong file close */
+    puts("Testing dangling objects with strong file close:");
+    nerrors += test_dangle_dataset(H5F_CLOSE_STRONG);
+    nerrors += test_dangle_group(H5F_CLOSE_STRONG);
+    nerrors += test_dangle_datatype1(H5F_CLOSE_STRONG);
+    nerrors += test_dangle_datatype2(H5F_CLOSE_STRONG);
+    nerrors += test_dangle_attribute(H5F_CLOSE_STRONG);
+
+    /* Check for errors */
+    if (nerrors)
+        goto error;
+    puts("All dangling ID tests passed.");
+
+    return 0;
+
+error:
+    puts("***** DANGLING ID TESTS FAILED *****");
+    return 1;
+}
+

Added: packages/hdf5/branches/upstream/current/test/deflate.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/deflate.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/dsets.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/dsets.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/dsets.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3962 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Robb Matzke <matzke at llnl.gov>
+ *		Tuesday, December  9, 1997
+ *
+ * Purpose:	Tests the dataset interface (H5D)
+ */
+
+#include <stdlib.h>
+#include <time.h>
+
+#include "h5test.h"
+#ifdef H5_HAVE_SZLIB_H
+#   include "szlib.h"
+#endif
+
+/*
+ * This file needs to access private datatypes from the H5Z package.
+ */
+#define H5Z_PACKAGE
+#include "H5Zpkg.h"
+
+const char *FILENAME[] = {
+    "dataset",
+    "compact_dataset",
+    "dset_offset",
+    "max_compact_dataset",
+    "simple",
+    "set_local",
+    NULL
+};
+
+#define FILE_DEFLATE_NAME       "deflate.h5"
+
+/* Dataset names for testing filters */
+#define DSET_DEFAULT_NAME	"default"
+#define DSET_CHUNKED_NAME	"chunked"
+#define DSET_COMPACT_NAME       "compact"
+#define DSET_SIMPLE_IO_NAME	"simple_io"
+#define DSET_USERBLOCK_IO_NAME	"userblock_io"
+#define DSET_COMPACT_IO_NAME    "compact_io"
+#define DSET_COMPACT_MAX_NAME   "max_compact"
+#define DSET_COMPACT_MAX2_NAME   "max_compact_2"
+#define DSET_CONV_BUF_NAME	"conv_buf"
+#define DSET_TCONV_NAME		"tconv"
+#define DSET_DEFLATE_NAME	"deflate"
+#define DSET_SZIP_NAME          "szip"
+#define DSET_SHUFFLE_NAME	"shuffle"
+#define DSET_FLETCHER32_NAME	"fletcher32"
+#define DSET_FLETCHER32_NAME_2	"fletcher32_2"
+#define DSET_FLETCHER32_NAME_3	"fletcher32_3"
+#define DSET_SHUF_DEF_FLET_NAME	"shuffle+deflate+fletcher32"
+#define DSET_SHUF_DEF_FLET_NAME_2	"shuffle+deflate+fletcher32_2"
+#define DSET_SHUF_SZIP_FLET_NAME	"shuffle+szip+fletcher32"
+#define DSET_SHUF_SZIP_FLET_NAME_2	"shuffle+szip+fletcher32_2"
+
+#define DSET_BOGUS_NAME		"bogus"
+#define DSET_MISSING_NAME	"missing"
+#define DSET_CAN_APPLY_NAME	"can_apply"
+#define DSET_CAN_APPLY_SZIP_NAME	"can_apply_szip"
+#define DSET_SET_LOCAL_NAME	"set_local"
+#define DSET_SET_LOCAL_NAME_2	"set_local_2"
+#define DSET_ONEBYTE_SHUF_NAME   "onebyte_shuffle"
+#define DSET_COMPARE_DCPL_NAME	"compare_dcpl"
+#define DSET_COMPARE_DCPL_NAME_2	"compare_dcpl_2"
+
+#define USER_BLOCK              1024
+#define SIXTY_FOUR_KB           65536
+
+/* Temporary filter IDs used for testing */
+#define H5Z_FILTER_BOGUS	305
+#define H5Z_FILTER_CORRUPT	306
+#define H5Z_FILTER_BOGUS2	307
+
+/* Flags for testing filters */
+#define DISABLE_FLETCHER32      0
+#define ENABLE_FLETCHER32       1
+#define DATA_CORRUPTED          1
+#define DATA_NOT_CORRUPTED      0
+
+/* Parameters for the "set local" test */
+#define BOGUS2_PERM_NPARMS      2       /* Number of "permanent" parameters */
+#define BOGUS2_PARAM_1          13      /* (No particular meaning, just for checking value) */
+#define BOGUS2_PARAM_2          35      /* (No particular meaning, just for checking value) */
+#define BOGUS2_ALL_NPARMS       4       /* Total number of parameter = permanent + "local" parameters */
+
+/* Dimensionality for conversion buffer test */
+#define DIM1          100  /* Dim. Size of data member # 1 */
+#define DIM2         5000  /* Dim. Size of data member # 2 */
+#define DIM3           10  /* Dim. Size of data member # 3 */
+
+/* Parameters for internal filter test */
+#define FILTER_CHUNK_DIM1       2
+#define FILTER_CHUNK_DIM2       25
+#define FILTER_HS_OFFSET1       7
+#define FILTER_HS_OFFSET2       30
+#define FILTER_HS_SIZE1         4
+#define FILTER_HS_SIZE2         50
+
+/* Names for noencoder test */
+#define NOENCODER_FILENAME "noencoder.h5"
+#define NOENCODER_TEST_DATASET "noencoder_tdset.h5"
+#define NOENCODER_SZIP_DATASET "noencoder_szip_dset.h5"
+#define NOENCODER_SZIP_SHUFF_FLETCH_DATASET "noencoder_szip_shuffle_fletcher_dset.h5"
+
+/* Names for zero-dim test */
+#define ZERODIM_DATASET "zerodim"
+
+/* Parameters for zero-dim test */
+#define MISSING_CHUNK_DATASET   "missing_chunk"
+#define MISSING_CHUNK_DIM       100
+
+/* Shared global arrays */
+#define DSET_DIM1       100
+#define DSET_DIM2       200
+int	points[DSET_DIM1][DSET_DIM2], check[DSET_DIM1][DSET_DIM2];
+double	points_dbl[DSET_DIM1][DSET_DIM2], check_dbl[DSET_DIM1][DSET_DIM2];
+
+/* Local prototypes for filter functions */
+static size_t filter_bogus(unsigned int flags, size_t cd_nelmts,
+    const unsigned int *cd_values, size_t nbytes, size_t *buf_size, void **buf);
+#ifndef H5_WANT_H5_V1_4_COMPAT
+static herr_t can_apply_bogus(hid_t dcpl_id, hid_t type_id, hid_t space_id);
+static herr_t set_local_bogus2(hid_t dcpl_id, hid_t type_id, hid_t space_id);
+static size_t filter_bogus2(unsigned int flags, size_t cd_nelmts,
+    const unsigned int *cd_values, size_t nbytes, size_t *buf_size, void **buf);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+static size_t filter_corrupt(unsigned int flags, size_t cd_nelmts,
+    const unsigned int *cd_values, size_t nbytes, size_t *buf_size, void **buf);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_create
+ *
+ * Purpose:	Attempts to create a dataset.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *              Added test for compact dataset creation.
+ *              Raymond Lu
+ *              August 8, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_create(hid_t file)
+{
+    hid_t	dataset, space, small_space, create_parms;
+    hsize_t	dims[2], small_dims[2];
+    herr_t	status;
+    hsize_t	csize[2];
+
+    TESTING("create, open, close");
+
+    /* Create the data space */
+    dims[0] = 256;
+    dims[1] = 512;
+    space = H5Screate_simple(2, dims, NULL);
+    assert(space>=0);
+
+    /* Create a small data space for compact dataset */
+    small_dims[0] = 16;
+    small_dims[1] = 8;
+    small_space = H5Screate_simple(2, small_dims, NULL);
+    assert(space>=0);
+
+    /*
+     * Create a dataset using the default dataset creation properties.	We're
+     * not sure what they are, so we won't check.
+     */
+    dataset = H5Dcreate(file, DSET_DEFAULT_NAME, H5T_NATIVE_DOUBLE, space,
+			H5P_DEFAULT);
+    if (dataset<0) goto error;
+
+    /* Close the dataset */
+    if (H5Dclose(dataset) < 0) goto error;
+
+    /* Add a comment to the dataset */
+    status = H5Gset_comment(file, DSET_DEFAULT_NAME, "This is a dataset");
+    if (status<0) goto error;
+
+    /*
+     * Try creating a dataset that already exists.  This should fail since a
+     * dataset can only be created once.  Temporarily turn off error
+     * reporting.
+     */
+    H5E_BEGIN_TRY {
+	dataset = H5Dcreate(file, DSET_DEFAULT_NAME, H5T_NATIVE_DOUBLE, space,
+			    H5P_DEFAULT);
+    } H5E_END_TRY;
+    if (dataset >= 0) {
+	H5_FAILED();
+	puts("    Library allowed overwrite of existing dataset.");
+	goto error;
+    }
+
+    /*
+     * Open the dataset we created above and then close it.  This is how
+     * existing datasets are accessed.
+     */
+    if (H5Fflush(file, H5F_SCOPE_GLOBAL) < 0) goto error;
+    if ((dataset = H5Dopen(file, DSET_DEFAULT_NAME))<0) goto error;
+    if (H5Dclose(dataset) < 0) goto error;
+
+    /*
+     * Try opening a non-existent dataset. This should fail since new datasets
+     * cannot be created with this function.  Temporarily turn off error
+     * reporting.
+     */
+    H5E_BEGIN_TRY {
+	dataset = H5Dopen(file, "does_not_exist");
+    } H5E_END_TRY;
+    if (dataset >= 0) {
+	H5_FAILED();
+	puts("    Opened a non-existent dataset.");
+	goto error;
+    }
+
+    /*
+     * Create a new dataset that uses chunked storage instead of the default
+     * layout.
+     */
+    create_parms = H5Pcreate(H5P_DATASET_CREATE);
+    assert(create_parms >= 0);
+
+    /* Attempt to create a dataset with invalid chunk sizes */
+    csize[0] = dims[0]*2;
+    csize[1] = dims[1]*2;
+    status = H5Pset_chunk(create_parms, 2, csize);
+    assert(status >= 0);
+    H5E_BEGIN_TRY {
+        dataset = H5Dcreate(file, DSET_CHUNKED_NAME, H5T_NATIVE_DOUBLE, space,
+			create_parms);
+    } H5E_END_TRY;
+    if (dataset >= 0) {
+	H5_FAILED();
+	puts("    Opened a dataset with incorrect chunking parameters.");
+	goto error;
+    }
+
+    csize[0] = 5;
+    csize[1] = 100;
+    status = H5Pset_chunk(create_parms, 2, csize);
+    assert(status >= 0);
+
+    dataset = H5Dcreate(file, DSET_CHUNKED_NAME, H5T_NATIVE_DOUBLE, space,
+			create_parms);
+    if (dataset < 0) goto error;
+    H5Pclose (create_parms);
+
+    /* Test dataset address.  Should be undefined. */
+    if(H5Dget_offset(dataset)!=HADDR_UNDEF) goto error;
+
+    /*
+     * Close the chunked dataset.
+     */
+    if (H5Dclose(dataset) < 0) goto error;
+
+    /*
+     * Create a compact dataset, then close it.
+     */
+    create_parms = H5Pcreate(H5P_DATASET_CREATE);
+    assert(create_parms >= 0);
+    status = H5Pset_layout(create_parms, H5D_COMPACT);
+    assert(status >= 0);
+    status = H5Pset_alloc_time(create_parms, H5D_ALLOC_TIME_EARLY);
+    assert(status >= 0);
+
+    dataset = H5Dcreate(file, DSET_COMPACT_NAME, H5T_NATIVE_DOUBLE,
+                        small_space, create_parms);
+    if(dataset < 0) goto error;
+    H5Pclose(create_parms);
+    if(H5Dclose(dataset) <0) goto error;
+
+    PASSED();
+    return 0;
+
+ error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_simple_io
+ *
+ * Purpose:	Tests simple I/O.  That is, reading and writing a complete
+ *		multi-dimensional array without data type or data space
+ *		conversions, without compression, and stored contiguously.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, December 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_simple_io(hid_t fapl)
+{
+    char                filename[32];
+    hid_t		file, dataset, space, xfer;
+    int			i, j, n;
+    hsize_t		dims[2];
+    void		*tconv_buf = NULL;
+    int                 f;
+    haddr_t             offset;
+    int                 rdata[DSET_DIM1][DSET_DIM2];
+
+    TESTING("simple I/O");
+
+    h5_fixname(FILENAME[4], fapl, filename, sizeof filename);
+
+    /* Initialize the dataset */
+    for (i = n = 0; i < DSET_DIM1; i++)
+	for (j = 0; j < DSET_DIM2; j++)
+	    points[i][j] = n++;
+
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	goto error;
+
+    /* Create the data space */
+    dims[0] = DSET_DIM1;
+    dims[1] = DSET_DIM2;
+    if ((space = H5Screate_simple(2, dims, NULL))<0) goto error;
+
+    /* Create a small conversion buffer to test strip mining */
+    tconv_buf = malloc (1000);
+    xfer = H5Pcreate (H5P_DATASET_XFER);
+    assert (xfer>=0);
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    if (H5Pset_buffer (xfer, (hsize_t)1000, tconv_buf, NULL)<0) goto error;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    if (H5Pset_buffer (xfer, (size_t)1000, tconv_buf, NULL)<0) goto error;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+    /* Create the dataset */
+    if ((dataset = H5Dcreate(file, DSET_SIMPLE_IO_NAME, H5T_NATIVE_INT, space,
+			     H5P_DEFAULT))<0) goto error;
+
+    /* Test dataset address.  Should be undefined. */
+    if(H5Dget_offset(dataset)!=HADDR_UNDEF) goto error;
+
+    /* Write the data to the dataset */
+    if (H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, xfer, points)<0)
+	goto error;
+
+    /* Test dataset address in file. Open the same file as a C file, seek
+     * the data position as H5Dget_offset points to, read the dataset, and
+     * compare it with the data written in.*/
+    if((offset=H5Dget_offset(dataset))==HADDR_UNDEF) goto error;
+
+    /* Read the dataset back */
+    if (H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, xfer, check)<0)
+	goto error;
+
+    /* Check that the values read are the same as the values written */
+    for (i = 0; i < DSET_DIM1; i++) {
+	for (j = 0; j < DSET_DIM2; j++) {
+	    if (points[i][j] != check[i][j]) {
+		H5_FAILED();
+		printf("    Read different values than written.\n");
+		printf("    At index %d,%d\n", i, j);
+		goto error;
+	    }
+	}
+    }
+
+    if(H5Pclose (xfer)<0) goto error;
+    if(H5Dclose(dataset)<0) goto error;
+    if(H5Fclose(file)<0) goto error;
+
+    f = HDopen(filename, O_RDONLY, 0);
+    HDlseek(f, (off_t)offset, SEEK_SET);
+    HDread(f, rdata, sizeof(int)*DSET_DIM1*DSET_DIM2);
+
+    /* Check that the values read are the same as the values written */
+    for (i = 0; i < DSET_DIM1; i++) {
+	for (j = 0; j < DSET_DIM2; j++) {
+	    if (points[i][j] != rdata[i][j]) {
+		H5_FAILED();
+		printf("    Read different values than written.\n");
+		printf("    At index %d,%d\n", i, j);
+		goto error;
+	    }
+	}
+    }
+
+    HDclose(f);
+
+    free (tconv_buf);
+    PASSED();
+    return 0;
+
+error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_userblock_offset
+ *
+ * Purpose:	Tests H5Dget_offset when user block exists.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		Wednesday, November 27, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_userblock_offset(hid_t fapl)
+{
+    char                filename[32];
+    hid_t		file, fcpl, dataset, space;
+    int			i, j;
+    hsize_t		dims[2];
+    int                   f;
+    haddr_t             offset;
+    int                 rdata[DSET_DIM1][DSET_DIM2];
+
+    TESTING("dataset offset with user block");
+
+    h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
+
+    if((fcpl=H5Pcreate(H5P_FILE_CREATE))<0) goto error;
+    if(H5Pset_userblock(fcpl, (hsize_t)USER_BLOCK)<0) goto error;
+
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl))<0)
+	goto error;
+
+    /* Create the data space */
+    dims[0] = DSET_DIM1;
+    dims[1] = DSET_DIM2;
+    if ((space = H5Screate_simple(2, dims, NULL))<0) goto error;
+
+    /* Create the dataset */
+    if ((dataset = H5Dcreate(file, DSET_USERBLOCK_IO_NAME, H5T_NATIVE_INT, space,
+			     H5P_DEFAULT))<0) goto error;
+
+    /* Write the data to the dataset */
+    if (H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, points)<0)
+	goto error;
+
+    /* Test dataset address in file. Open the same file as a C file, seek
+     * the data position as H5Dget_offset points to, read the dataset, and
+     * compare it with the data written in.*/
+    if((offset=H5Dget_offset(dataset))==HADDR_UNDEF) goto error;
+
+    if(H5Dclose(dataset)<0) goto error;
+    if(H5Fclose(file)<0) goto error;
+
+    f = HDopen(filename, O_RDONLY, 0);
+    HDlseek(f, (off_t)offset, SEEK_SET);
+    HDread(f, rdata, sizeof(int)*DSET_DIM1*DSET_DIM2);
+
+    /* Check that the values read are the same as the values written */
+    for (i = 0; i < DSET_DIM1; i++) {
+	for (j = 0; j < DSET_DIM2; j++) {
+	    if (points[i][j] != rdata[i][j]) {
+		H5_FAILED();
+		printf("    Read different values than written.\n");
+		printf("    At index %d,%d\n", i, j);
+		goto error;
+	    }
+	}
+    }
+
+    HDclose(f);
+
+    PASSED();
+    return 0;
+
+error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_compact_io
+ *
+ * Purpose:     Tests compact dataset I/O.  That is, reading and writing a
+ *              complete multi-dimensional array without data type or data
+ *              space conversions, without compression, and store in
+ *              compact dataset.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        -1
+ *
+ * Programmer:  Raymond Lu
+ *              August 8, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_compact_io(hid_t fapl)
+{
+    hid_t       file, dataset, space, plist;
+    hsize_t     dims[2];
+    herr_t      status;
+    int         wbuf[16][8], rbuf[16][8];
+    char	filename[1024];
+    int         i, j, n;
+
+    TESTING("compact dataset I/O");
+
+    /* Initialize data */
+    n=0;
+    for(i=0; i<16; i++) {
+        for(j=0; j<8; j++) {
+            wbuf[i][j] = n++;
+        }
+    }
+
+    /* Create a small data space for compact dataset */
+    dims[0] = 16;
+    dims[1] = 8;
+    space = H5Screate_simple(2, dims, NULL);
+    assert(space>=0);
+
+    /* Create a file */
+    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+    if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+        goto error;
+
+    /* Create property list for compact dataset creation */
+    plist = H5Pcreate(H5P_DATASET_CREATE);
+    assert(plist >= 0);
+    status = H5Pset_layout(plist, H5D_COMPACT);
+    assert(status >= 0);
+    status = H5Pset_alloc_time(plist, H5D_ALLOC_TIME_EARLY);
+    assert(status >= 0);
+
+    /* Create and write to a compact dataset */
+    if((dataset = H5Dcreate(file, DSET_COMPACT_IO_NAME, H5T_NATIVE_INT, space,
+                        plist))<0)
+        goto error;
+
+    /* Test dataset address.  Should be undefined. */
+    if(H5Dget_offset(dataset)!=HADDR_UNDEF) goto error;
+
+    if(H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf)<0)
+        goto error;
+
+    /* Test dataset address.  Should be undefined. */
+    if(H5Dget_offset(dataset)!=HADDR_UNDEF) goto error;
+
+    /* Close file */
+    H5Sclose(space);
+    H5Pclose(plist);
+    H5Dclose(dataset);
+    H5Fclose(file);
+
+    /*
+     * Open the file and check data
+     */
+    if((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0)
+        goto error;
+    if((dataset = H5Dopen(file, DSET_COMPACT_IO_NAME))<0)
+        goto error;
+    if(H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rbuf)<0)
+        goto error;
+
+     /* Check that the values read are the same as the values written */
+     for (i = 0; i < 16; i++) {
+         for (j = 0; j < 8; j++) {
+             if (rbuf[i][j] != wbuf[i][j]) {
+                 H5_FAILED();
+                 printf("    Read different values than written.\n");
+                 printf("    At index %d,%d\n", i, j);
+                 printf("    wbuf[%d][%d]=%d\n", i, j, wbuf[i][j]);
+                 printf("    rbuf[%d][%d]=%d\n", i, j, rbuf[i][j]);
+                 goto error;
+             }
+         }
+     }
+
+     H5Dclose(dataset);
+     H5Fclose(file);
+     PASSED();
+     return 0;
+
+ error:
+     return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_max_compact
+ *
+ * Purpose:     Tests compact dataset of maximal size.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        -1
+ *
+ * Programmer:  Raymond Lu
+ *              August 8, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_max_compact(hid_t fapl)
+{
+    hid_t       file, dataset, space, plist;
+    hsize_t     dims[1];
+    hsize_t     compact_size;
+    herr_t      status;
+    int         *wbuf, *rbuf;
+    char	filename[1024];
+    int         i,  n;
+
+    TESTING("compact dataset of maximal size");
+
+    /* Test compact dataset of size 64KB-64 */
+
+    /* Initialize data */
+    compact_size = (SIXTY_FOUR_KB-64)/sizeof(int);
+
+    wbuf = (int*)HDmalloc(sizeof(int)*(size_t)compact_size);
+    rbuf = (int*)HDmalloc(sizeof(int)*(size_t)compact_size);
+
+    n=0;
+    for(i=0; i<(int)compact_size; i++)
+            wbuf[i] = n++;
+
+    /* Create a small data space for compact dataset */
+    dims[0] = compact_size;
+    space = H5Screate_simple(1, dims, NULL);
+    assert(space>=0);
+
+    /* Create a file */
+    h5_fixname(FILENAME[3], fapl, filename, sizeof filename);
+    if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+        goto error;
+
+    /* Create property list for compact dataset creation */
+    plist = H5Pcreate(H5P_DATASET_CREATE);
+    assert(plist >= 0);
+    status = H5Pset_layout(plist, H5D_COMPACT);
+    assert(status >= 0);
+
+    /* Create and write to a compact dataset */
+    if((dataset = H5Dcreate(file, DSET_COMPACT_MAX_NAME, H5T_NATIVE_INT, space,
+                        plist))<0)
+        goto error;
+
+    if(H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf)<0)
+        goto error;
+
+    /* Close file */
+    H5Sclose(space);
+    H5Pclose(plist);
+    H5Dclose(dataset);
+    H5Fclose(file);
+
+    /*
+     * Open the file and check data
+     */
+    if((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0)
+        goto error;
+    if((dataset = H5Dopen(file, DSET_COMPACT_MAX_NAME))<0)
+        goto error;
+    if(H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rbuf)<0)
+        goto error;
+
+     /* Check that the values read are the same as the values written */
+     for (i = 0; i < (int)compact_size; i++) {
+        if (rbuf[i] != wbuf[i]) {
+            H5_FAILED();
+            printf("    Read different values than written.\n");
+            printf("    At index %d\n", i);
+            goto error;
+        }
+     }
+
+     H5Dclose(dataset);
+     H5Fclose(file);
+     HDfree(wbuf);
+     HDfree(rbuf);
+
+
+     /* Test compact dataset of size 64KB */
+
+     /* Create a data space for compact dataset */
+     compact_size = SIXTY_FOUR_KB/sizeof(int);
+     dims[0] = compact_size;
+     space = H5Screate_simple(1, dims, NULL);
+     assert(space>=0);
+
+     /* Open file */
+     if((file=H5Fopen(filename, H5F_ACC_RDWR, fapl))<0)
+         goto error;
+
+     /* Create property list for compact dataset creation */
+     plist = H5Pcreate(H5P_DATASET_CREATE);
+     assert(plist >= 0);
+     status = H5Pset_layout(plist, H5D_COMPACT);
+     assert(status >= 0);
+
+     /* Create and write to a compact dataset */
+     H5E_BEGIN_TRY {
+         H5Dcreate(file, DSET_COMPACT_MAX2_NAME, H5T_NATIVE_INT, space, plist);
+     } H5E_END_TRY;
+
+     /* Close file */
+     H5Sclose(space);
+     H5Pclose(plist);
+     H5Fclose(file);
+
+     PASSED();
+     return 0;
+
+error:
+     return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_conv_buffer
+ *
+ * Purpose:	Test size of data type conversion buffer.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		Monday, May 12, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_conv_buffer(hid_t fid)
+{
+    typedef struct
+    {
+        int      a[DIM1][DIM2][DIM3];
+        float    b[DIM2];
+        double   c[DIM3];
+    } CmpField;
+
+    typedef struct
+    {
+        float    b[DIM2];
+        double   c[DIM3];
+    } CmpFieldR;
+
+    herr_t       status = -1;
+    int          j, k, l;
+
+    CmpField     *cf;
+    CmpFieldR    *cfrR;
+
+    hid_t       dataset = -1; /* dataset ID             */
+    hid_t       space   = -1; /* data space ID          */
+    hid_t       ctype1, ctype2; /* data type ID           */
+    hid_t       arr_type1, arr_type2, arr_type3, arr_type4, arr_type5;
+    hsize_t     dimsa[3];
+    hsize_t     dimsb[1];
+    hsize_t     dimsc[1];
+    hid_t       xfer_list;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    hsize_t      size;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    size_t      size;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+    TESTING("data type conversion buffer size");
+
+    cf = (CmpField *)calloc(1, sizeof(CmpField));
+
+    /* Populate the data members */
+    for (j = 0; j < DIM1; j++)
+	for (k = 0; k < DIM2; k++)
+	    for (l = 0; l < DIM3; l++)
+		cf->a[j][k][l] = 10*(j+1) + l + k;
+
+    for (j = 0; j < DIM2; j++)
+	cf->b[j] = (float)(100.*(j+1) + 0.01*j);
+
+    for (j = 0; j < DIM3; j++)
+	cf->c[j] = 100.*(j+1) + 0.02*j;
+
+
+  /* Create data space */
+  if((space=H5Screate(H5S_SCALAR))<0) goto error;
+
+  /* Add  members to the compound data type */
+  dimsa[0] = DIM1;
+  dimsa[1] = DIM2;
+  dimsa[2] = DIM3;
+  dimsb[0] = DIM2;
+  dimsc[0] = DIM3;
+
+  /* Create the memory data type */
+  if((ctype1 = H5Tcreate(H5T_COMPOUND, sizeof (CmpField)))<0) goto error;
+
+  if((arr_type1 = H5Tarray_create(H5T_NATIVE_INT, 3, dimsa, NULL))<0) goto error;
+  if((arr_type2 = H5Tarray_create(H5T_NATIVE_FLOAT, 1, dimsb, NULL))<0) goto error;
+  if((arr_type3 = H5Tarray_create(H5T_NATIVE_DOUBLE, 1, dimsc, NULL))<0) goto error;
+
+  if(H5Tinsert(ctype1, "A", HOFFSET(CmpField, a), arr_type1)<0) goto error;
+  if(H5Tinsert (ctype1, "B", HOFFSET(CmpField, b), arr_type2)<0) goto error;
+  if(H5Tinsert (ctype1, "C", HOFFSET(CmpField, c), arr_type3)<0) goto error;
+
+  /* Create the dataset */
+  if((dataset = H5Dcreate(fid, DSET_CONV_BUF_NAME, ctype1, space, H5P_DEFAULT))<0) goto error;
+  if(H5Dwrite(dataset, ctype1, H5S_ALL, H5S_ALL, H5P_DEFAULT, cf)<0) goto error;
+
+  if((ctype2 = H5Tcreate(H5T_COMPOUND, sizeof (CmpFieldR)))<0) goto error;
+
+  if((arr_type4 = H5Tarray_create(H5T_NATIVE_FLOAT, 1, dimsb, NULL))<0) goto error;
+  if((arr_type5 = H5Tarray_create(H5T_NATIVE_DOUBLE, 1, dimsc, NULL))<0) goto error;
+
+  if(H5Tinsert (ctype2, "B", HOFFSET(CmpFieldR, b), arr_type4)<0) goto error;
+  if(H5Tinsert (ctype2, "C", HOFFSET(CmpFieldR, c), arr_type5)<0) goto error;
+
+  /* Read should succeed since library will set conversion buffer big enough */
+  cfrR = (CmpFieldR *)calloc(1, sizeof(CmpFieldR));
+  if(H5Dread(dataset, ctype2, H5S_ALL, H5S_ALL, H5P_DEFAULT, cfrR)<0) goto error;
+
+  /* Read should fail since conversion buffer isn't big enough */
+  xfer_list = H5Pcreate (H5P_DATASET_XFER);
+  size = (DIM2*DIM3*(sizeof(int))+ DIM2*(sizeof(float))+
+         DIM3*(sizeof(double)));
+  if(H5Pset_buffer (xfer_list, size, NULL, NULL)<0) goto error;
+
+  H5E_BEGIN_TRY {
+    status = H5Dread(dataset, ctype2, H5S_ALL, H5S_ALL, xfer_list, cfrR);
+  } H5E_END_TRY;
+  if (status >= 0) {
+      H5_FAILED();
+      puts("    Library shouldn't allow conversion buffer too small");
+      goto error;
+  }
+
+  /* Read will succeed since conversion buffer is big enough */
+  size = (DIM1*DIM2*DIM3*(sizeof(int))+ DIM2*(sizeof(float))+
+         DIM3*(sizeof(double)));
+  if(H5Pset_buffer (xfer_list, size, NULL, NULL)<0) goto error;
+
+  if(H5Dread(dataset, ctype2, H5S_ALL, H5S_ALL, xfer_list, cfrR)<0) goto error;
+
+
+  if(H5Pclose(xfer_list)<0) goto error;
+  if(H5Sclose(space)<0) goto error;
+  if(H5Tclose(arr_type1)<0) goto error;
+  if(H5Tclose(arr_type2)<0) goto error;
+  if(H5Tclose(arr_type3)<0) goto error;
+  if(H5Tclose(ctype1)<0) goto error;
+  if(H5Tclose(ctype2)<0) goto error;
+  if(H5Tclose(arr_type4)<0) goto error;
+  if(H5Tclose(arr_type5)<0) goto error;
+  if(H5Dclose(dataset)<0) goto error;
+
+  if(cf)
+    HDfree(cf);
+  if(cfrR)
+    HDfree(cfrR);
+  puts(" PASSED");
+  return(0);
+
+error:
+  return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_tconv
+ *
+ * Purpose:	Test some simple data type conversion stuff.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, January 14, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_tconv(hid_t file)
+{
+    char	*out=NULL, *in=NULL;
+    int		i;
+    hsize_t	dims[1];
+    hid_t	space, dataset;
+
+    out = malloc (4*1000000);
+    assert (out);
+    in = malloc (4*1000000);
+    assert (in);
+
+    TESTING("data type conversion");
+
+    /* Initialize the dataset */
+    for (i = 0; i < 1000000; i++) {
+	out[i*4+0] = 0x11;
+	out[i*4+1] = 0x22;
+	out[i*4+2] = 0x33;
+	out[i*4+3] = 0x44;
+    }
+
+    /* Create the data space */
+    dims[0] = 1000000;
+    if ((space = H5Screate_simple (1, dims, NULL))<0) goto error;
+
+    /* Create the data set */
+    if ((dataset = H5Dcreate(file, DSET_TCONV_NAME, H5T_STD_I32LE, space,
+			     H5P_DEFAULT))<0) goto error;
+
+    /* Write the data to the dataset */
+    if (H5Dwrite(dataset, H5T_STD_I32LE, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+		 out)<0) goto error;
+
+    /* Read data with byte order conversion */
+    if (H5Dread(dataset, H5T_STD_I32BE, H5S_ALL, H5S_ALL, H5P_DEFAULT, in)<0)
+	goto error;
+
+    /* Check */
+    for (i = 0; i < 1000000; i++) {
+	if (in[4*i+0]!=out[4*i+3] ||
+	    in[4*i+1]!=out[4*i+2] ||
+	    in[4*i+2]!=out[4*i+1] ||
+	    in[4*i+3]!=out[4*i+0]) {
+	    H5_FAILED();
+	    puts("    Read with byte order conversion failed.");
+	    goto error;
+	}
+    }
+
+    if (H5Dclose(dataset)<0) goto error;
+    free (out);
+    free (in);
+    puts(" PASSED");
+    return 0;
+
+ error:
+    return -1;
+}
+
+/* This message derives from H5Z */
+const H5Z_class_t H5Z_BOGUS[1] = {{
+    H5Z_FILTER_BOGUS,		/* Filter id number		*/
+    "bogus",			/* Filter name for debugging	*/
+    NULL,                       /* The "can apply" callback     */
+    NULL,                       /* The "set local" callback     */
+    filter_bogus,		/* The actual filter function	*/
+}};
+
+#ifndef H5_WANT_H5_V1_4_COMPAT
+
+/*-------------------------------------------------------------------------
+ * Function:	can_apply_bogus
+ *
+ * Purpose:	A bogus 'can apply' callback that returns 0 for H5T_NATIVE_DOUBLE
+ *              dataype, but returns 1 for all other datatypes
+ *
+ * Return:	Success:	Described above
+ *		Failure:	0
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, April  5, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+can_apply_bogus(hid_t UNUSED dcpl_id, hid_t type_id, hid_t UNUSED space_id)
+{
+    if(H5Tequal(type_id,H5T_NATIVE_DOUBLE))
+        return 0;
+    else
+        return 1;
+}
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	filter_bogus
+ *
+ * Purpose:	A bogus compression method that doesn't do anything.
+ *
+ * Return:	Success:	Data chunk size
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, April 21, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+filter_bogus(unsigned int UNUSED flags, size_t UNUSED cd_nelmts,
+      const unsigned int UNUSED *cd_values, size_t nbytes,
+      size_t UNUSED *buf_size, void UNUSED **buf)
+{
+    return nbytes;
+}
+
+#ifndef H5_WANT_H5_V1_4_COMPAT
+
+/*-------------------------------------------------------------------------
+ * Function:	set_local_bogus2
+ *
+ * Purpose:	A 'set local' callback that stores the size of the datatype
+ *              and adds it to all the H5T_NATIVE_INT values during
+ *              filter operation.
+ *
+ * Return:	Success:	non-negative
+ *		Failure:	negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, April  5, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+set_local_bogus2(hid_t dcpl_id, hid_t type_id, hid_t UNUSED space_id)
+{
+    unsigned add_on=0;      /* Value to add to data going through */
+    unsigned flags;         /* Filter flags */
+    size_t cd_nelmts=BOGUS2_PERM_NPARMS;        /* Number of filter parameters */
+    unsigned cd_values[4];  /* Filter parameters */
+
+    /* Check for native integer datatype and set private property */
+    if(H5Tequal(type_id,H5T_NATIVE_INT)>0)
+        add_on=(unsigned)H5Tget_size(type_id);
+
+    /* Get the filter's current parameters */
+    if(H5Pget_filter_by_id(dcpl_id,H5Z_FILTER_BOGUS2,&flags,&cd_nelmts,
+            cd_values,0,NULL)<0)
+        return(FAIL);
+
+    /* Check that the parameter values were passed along correctly */
+    if(cd_values[0]!=BOGUS2_PARAM_1)
+        return(FAIL);
+    if(cd_values[1]!=BOGUS2_PARAM_2)
+        return(FAIL);
+
+    /* Set "local" parameters for this dataset */
+    cd_values[2]=(add_on>0);    /* Flag to indicate data is modified */
+    cd_values[3]=add_on;        /* Amount the data was modified by */
+
+    /* Modify the filter's parameters for this dataset */
+    if(H5Pmodify_filter(dcpl_id, H5Z_FILTER_BOGUS2, flags, BOGUS2_ALL_NPARMS,
+            cd_values)<0)
+        return(FAIL);
+
+    return(SUCCEED);
+} /* end set_local_bogus2() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	filter_bogus2
+ *
+ * Purpose:	A filter method that adds a value to data values on writing
+ *              (if the parameter is set), but does not modify data values on
+ *              reading (so that correct operation of the filter can be
+ *              checked).
+ *
+ * Return:	Success:	Data chunk size
+ *		Failure:	0
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, April  7, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+filter_bogus2(unsigned int flags, size_t cd_nelmts,
+      const unsigned int *cd_values, size_t nbytes,
+      size_t *buf_size, void **buf)
+{
+    /* Check for the correct number of parameters */
+    if(cd_nelmts!=BOGUS2_ALL_NPARMS)
+        return(0);
+
+    /* Check that permanent parameters are set correctly */
+    if(cd_values[0]!=BOGUS2_PARAM_1)
+        return(0);
+    if(cd_values[1]!=BOGUS2_PARAM_2)
+        return(0);
+
+    /* Check if this filter is supposed to do something */
+    if(cd_values[2]>0) {
+        /* Check whether we are "uncompressing" */
+        if (flags & H5Z_FLAG_REVERSE) {
+            /* Do nothing */
+        } /* end if */
+        /* "Compressing" */
+        else {
+            unsigned add_on=cd_values[3];   /* Get "add on" value */
+            int *int_ptr=*buf;          /* Pointer to the data values */
+            size_t buf_left=*buf_size;  /* Amount of data buffer left to process */
+
+            /* Add the "add on" value to all the data values */
+            while(buf_left>0) {
+                *int_ptr++ += add_on;
+                buf_left -= sizeof(int);
+            } /* end while */
+        } /* end else */
+
+        return(nbytes);
+    } /* end if */
+    /* Filter is "no op" */
+    else
+        return(nbytes);
+}
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+/* This message derives from H5Z */
+const H5Z_class_t H5Z_CORRUPT[1] = {{
+    H5Z_FILTER_CORRUPT,		/* Filter id number		*/
+    "corrupt",			/* Filter name for debugging	*/
+    NULL,                       /* The "can apply" callback     */
+    NULL,                       /* The "set local" callback     */
+    filter_corrupt,		/* The actual filter function	*/
+}};
+
+
+/*-------------------------------------------------------------------------
+ * Function:    filter_corrupt
+ *
+ * Purpose:     For testing Fletcher32 checksum.  modify data slightly during
+ *              writing so that when data is read back, the checksum should
+ *              fail.
+ *
+ * Return:	Success:	Data chunk size
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Raymond Lu
+ *              Jan 14, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+filter_corrupt(unsigned int flags, size_t cd_nelmts,
+      const unsigned int *cd_values, size_t nbytes,
+      size_t *buf_size, void **buf)
+{
+    size_t         ret_value = 0;
+    unsigned char  *dst = (unsigned char*)(*buf);
+    unsigned int   offset;
+    unsigned int   length;
+    unsigned int   value;
+    void  *data;
+
+    if (cd_nelmts!=3 || !cd_values)
+        return 0;
+    offset = cd_values[0];
+    length = cd_values[1];
+    value  = cd_values[2];
+    if(offset>nbytes || (offset+length)>nbytes || length<sizeof(unsigned int))
+        return 0;
+
+    data = HDmalloc(length);
+    HDmemset(data, (int)value, length);
+
+    if (flags & H5Z_FLAG_REVERSE) { /* Varify data is actually corrupted during read */
+        dst += offset;
+        if(HDmemcmp(data, dst, length)!=0) return 0;
+        *buf_size = nbytes;
+        ret_value = nbytes;
+    } else { /* Write corrupted data */
+        dst += offset;
+        HDmemcpy(dst, data, length);
+        *buf_size = nbytes;
+	ret_value = *buf_size;
+    }
+
+    if(data)
+        HDfree(data);
+
+    return ret_value;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    filter_cb_cont
+ *
+ * Purpose:     Callback function to handle checksum failure.  Let it continue.
+ *
+ * Return:      continue
+ *
+ * Programmer:	Raymond Lu
+ *              Jan 14, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5Z_cb_return_t
+filter_cb_cont(H5Z_filter_t filter, void UNUSED *buf, size_t UNUSED buf_size,
+           void UNUSED *op_data)
+{
+    if(H5Z_FILTER_FLETCHER32==filter)
+       return H5Z_CB_CONT;
+    else
+        return H5Z_CB_FAIL;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    filter_cb_fail
+ *
+ * Purpose:     Callback function to handle checksum failure.  Let it fail.
+ *
+ * Return:      fail
+ *
+ * Programmer:	Raymond Lu
+ *              Jan 14, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static H5Z_cb_return_t
+filter_cb_fail(H5Z_filter_t filter, void UNUSED *buf, size_t UNUSED buf_size,
+           void UNUSED *op_data)
+{
+    if(H5Z_FILTER_FLETCHER32==filter)
+       return H5Z_CB_FAIL;
+    else
+       return H5Z_CB_CONT;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_filter_internal
+ *
+ * Purpose:	Tests dataset compression. If compression is requested when
+ *		it hasn't been compiled into the library (such as when
+ *		updating an existing compressed dataset) then data is sent to
+ *		the file uncompressed but no errors are returned.
+ *
+ * Return:	Success:	0
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 15, 1998
+ *
+ * Modifications:
+ *              Moved out of main test_compression routine
+ *              Quincey Koziol, November 14, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_filter_internal(hid_t fid, const char *name, hid_t dcpl, int if_fletcher32,
+                     int corrupted, hsize_t *dset_size)
+{
+    hid_t		dataset;        /* Dataset ID */
+    hid_t		dxpl;           /* Dataset xfer property list ID */
+    hid_t		write_dxpl;     /* Dataset xfer property list ID for writing */
+    hid_t		sid;            /* Dataspace ID */
+    const hsize_t	size[2] = {DSET_DIM1, DSET_DIM2};           /* Dataspace dimensions */
+    const hsize_t	hs_offset[2] = {FILTER_HS_OFFSET1, FILTER_HS_OFFSET2}; /* Hyperslab offset */
+    const hsize_t	hs_size[2] = {FILTER_HS_SIZE1, FILTER_HS_SIZE2};   /* Hyperslab size */
+    void		*tconv_buf = NULL;      /* Temporary conversion buffer */
+    int			i, j, n;        /* Local index variables */
+    herr_t              status;         /* Error status */
+
+    /* Create the data space */
+    if ((sid = H5Screate_simple(2, size, NULL))<0) goto error;
+
+    /*
+     * Create a small conversion buffer to test strip mining. We
+     * might as well test all we can!
+     */
+    if ((dxpl = H5Pcreate (H5P_DATASET_XFER))<0) goto error;
+    tconv_buf = malloc (1000);
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    if (H5Pset_buffer (dxpl, (hsize_t)1000, tconv_buf, NULL)<0) goto error;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    if (H5Pset_buffer (dxpl, (size_t)1000, tconv_buf, NULL)<0) goto error;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    if ((write_dxpl = H5Pcopy (dxpl))<0) TEST_ERROR;
+
+    if (if_fletcher32==DISABLE_FLETCHER32) {
+        if(H5Pset_edc_check(dxpl, H5Z_DISABLE_EDC)<0)
+            goto error;
+        if(H5Z_DISABLE_EDC != H5Pget_edc_check(dxpl))
+            goto error;
+    }
+
+    TESTING("    filters (setup)");
+
+    /* Check if all the filters are available */
+    if(H5Pall_filters_avail(dcpl)!=TRUE) {
+        H5_FAILED();
+        printf("    Line %d: Incorrect filter availability\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Create the dataset */
+    if ((dataset = H5Dcreate(fid, name, H5T_NATIVE_INT, sid,
+			     dcpl))<0) goto error;
+    PASSED();
+
+    /*----------------------------------------------------------------------
+     * STEP 1: Read uninitialized data.  It should be zero.
+     *----------------------------------------------------------------------
+     */
+    TESTING("    filters (uninitialized read)");
+
+    if (H5Dread (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, dxpl, check)<0)
+	goto error;
+
+    for (i=0; i<size[0]; i++) {
+	for (j=0; j<size[1]; j++) {
+	    if (0!=check[i][j]) {
+		H5_FAILED();
+		printf("    Read a non-zero value.\n");
+		printf("    At index %lu,%lu\n",
+		       (unsigned long)i, (unsigned long)j);
+		goto error;
+	    }
+	}
+    }
+    PASSED();
+
+    /*----------------------------------------------------------------------
+     * STEP 2: Test filters by setting up a chunked dataset and writing
+     * to it.
+     *----------------------------------------------------------------------
+     */
+    TESTING("    filters (write)");
+
+    for (i=n=0; i<size[0]; i++) {
+	for (j=0; j<size[1]; j++) {
+	    points[i][j] = (int)(n++);
+	}
+    }
+
+    if (H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, write_dxpl, points)<0)
+	TEST_ERROR;
+
+    if((*dset_size=H5Dget_storage_size(dataset))==0) TEST_ERROR;
+
+    PASSED();
+
+    /*----------------------------------------------------------------------
+     * STEP 3: Try to read the data we just wrote.
+     *----------------------------------------------------------------------
+     */
+    TESTING("    filters (read)");
+
+    /* Read the dataset back */
+    if(corrupted) {
+        /* Default behavior is failure when data is corrupted. */
+        /* (Use the "write" DXPL in order to make certain corruption is seen) */
+        H5E_BEGIN_TRY {
+            status=H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, write_dxpl, check);
+        } H5E_END_TRY;
+        if(status>=0) TEST_ERROR;
+
+        /* Callback decides to continue inspite data is corrupted. */
+        if(H5Pset_filter_callback(dxpl, filter_cb_cont, NULL)<0) TEST_ERROR;
+        if(H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, dxpl, check)<0)
+            TEST_ERROR;
+
+        /* Callback decides to fail when data is corrupted. */
+        if(H5Pset_filter_callback(write_dxpl, filter_cb_fail, NULL)<0) TEST_ERROR;
+        /* (Use the "write" DXPL in order to make certain corruption is seen) */
+        H5E_BEGIN_TRY {
+            status=H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, write_dxpl, check);
+        } H5E_END_TRY;
+        if(status>=0) TEST_ERROR;
+    } else {
+        if (H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, dxpl, check)<0)
+	   TEST_ERROR;
+
+        /* Check that the values read are the same as the values written */
+        for (i=0; i<size[0]; i++) {
+	   for (j=0; j<size[1]; j++) {
+	       if (points[i][j] != check[i][j]) {
+		  H5_FAILED();
+		  fprintf(stderr,"    Read different values than written.\n");
+		  fprintf(stderr,"    At index %lu,%lu\n", (unsigned long)i, (unsigned long)j);
+		  fprintf(stderr,"    At original: %d\n", (int)points[i][j]);
+		  fprintf(stderr,"    At returned: %d\n", (int)check[i][j]);
+		  goto error;
+	       }
+	   }
+        }
+    }
+
+    PASSED();
+
+    /*----------------------------------------------------------------------
+     * STEP 4: Write new data over the top of the old data.  The new data is
+     * random thus not very compressible, and will cause the chunks to move
+     * around as they grow.  We only change values for the left half of the
+     * dataset although we rewrite the whole thing.
+     *----------------------------------------------------------------------
+     */
+    TESTING("    filters (modify)");
+
+    for (i=0; i<size[0]; i++) {
+	for (j=0; j<size[1]/2; j++) {
+	    points[i][j] = (int)HDrandom ();
+	}
+    }
+    if (H5Dwrite (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, write_dxpl, points)<0)
+	TEST_ERROR;
+
+    if(corrupted) {
+        /* Default behavior is failure when data is corrupted. */
+        /* (Use the "write" DXPL in order to make certain corruption is seen) */
+        H5E_BEGIN_TRY {
+            status=H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, write_dxpl, check);
+        } H5E_END_TRY;
+        if(status>=0) TEST_ERROR;
+
+        /* Callback decides to continue inspite data is corrupted. */
+        if(H5Pset_filter_callback(dxpl, filter_cb_cont, NULL)<0) TEST_ERROR;
+        if(H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, dxpl, check)<0)
+            TEST_ERROR;
+
+        /* Callback decides to fail when data is corrupted. */
+        if(H5Pset_filter_callback(write_dxpl, filter_cb_fail, NULL)<0) TEST_ERROR;
+        /* (Use the "write" DXPL in order to make certain corruption is seen) */
+        H5E_BEGIN_TRY {
+            status=H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, write_dxpl, check);
+        } H5E_END_TRY;
+        if(status>=0) TEST_ERROR;
+    } else {
+        /* Read the dataset back and check it */
+        if (H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, dxpl, check)<0)
+	   TEST_ERROR;
+
+        /* Check that the values read are the same as the values written */
+        for (i=0; i<size[0]; i++) {
+	   for (j=0; j<size[1]; j++) {
+	       if (points[i][j] != check[i][j]) {
+		  H5_FAILED();
+		  printf("    Read different values than written.\n");
+		  printf("    At index %lu,%lu\n",
+		           (unsigned long)i, (unsigned long)j);
+		  goto error;
+	       }
+	   }
+        }
+    }
+
+    if((*dset_size=H5Dget_storage_size(dataset))==0) TEST_ERROR;
+    PASSED();
+
+    /*----------------------------------------------------------------------
+     * STEP 5: Close the dataset and then open it and read it again.  This
+     * insures that the filters message is picked up properly from the
+     * object header.
+     *----------------------------------------------------------------------
+     */
+    TESTING("    filters (re-open)");
+
+    if (H5Dclose (dataset)<0) TEST_ERROR;
+    if ((dataset = H5Dopen (fid, name))<0) TEST_ERROR;
+
+    if(corrupted) {
+        /* Default behavior is failure when data is corrupted. */
+        /* (Use the "write" DXPL in order to make certain corruption is seen) */
+        H5E_BEGIN_TRY {
+            status=H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, write_dxpl, check);
+        } H5E_END_TRY;
+        if(status>=0) TEST_ERROR;
+
+        /* Callback decides to continue inspite data is corrupted. */
+        if(H5Pset_filter_callback(dxpl, filter_cb_cont, NULL)<0) TEST_ERROR;
+        if(H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, dxpl, check)<0)
+            TEST_ERROR;
+
+        /* Callback decides to fail when data is corrupted. */
+        if(H5Pset_filter_callback(write_dxpl, filter_cb_fail, NULL)<0) TEST_ERROR;
+        /* (Use the "write" DXPL in order to make certain corruption is seen) */
+        H5E_BEGIN_TRY {
+            status=H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, write_dxpl, check);
+        } H5E_END_TRY;
+        if(status>=0) TEST_ERROR;
+    } else {
+        if (H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, dxpl, check)<0)
+	   TEST_ERROR;
+
+        /* Check that the values read are the same as the values written */
+        for (i=0; i<size[0]; i++) {
+	   for (j=0; j<size[1]; j++) {
+	       if (points[i][j] != check[i][j]) {
+		  H5_FAILED();
+		  printf("    Read different values than written.\n");
+		  printf("    At index %lu,%lu\n",
+		        (unsigned long)i, (unsigned long)j);
+		  goto error;
+	       }
+	   }
+        }
+    }
+
+    PASSED();
+
+
+    /*----------------------------------------------------------------------
+     * STEP 6: Test partial I/O by writing to and then reading from a
+     * hyperslab of the dataset.  The hyperslab does not line up on chunk
+     * boundaries (we know that case already works from above tests).
+     *----------------------------------------------------------------------
+     */
+    TESTING("    filters (partial I/O)");
+
+    for (i=0; i<hs_size[0]; i++) {
+	for (j=0; j<hs_size[1]; j++) {
+	    points[hs_offset[0]+i][hs_offset[1]+j] = (int)HDrandom();
+	}
+    }
+    if (H5Sselect_hyperslab(sid, H5S_SELECT_SET, hs_offset, NULL, hs_size,
+			    NULL)<0) TEST_ERROR;
+    /* (Use the "read" DXPL because partial I/O on corrupted data test needs to ignore errors during writing) */
+    if (H5Dwrite (dataset, H5T_NATIVE_INT, sid, sid, dxpl, points)<0)
+	TEST_ERROR;
+
+    if(corrupted) {
+        /* Default behavior is failure when data is corrupted. */
+        /* (Use the "write" DXPL in order to make certain corruption is seen) */
+        H5E_BEGIN_TRY {
+            status=H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, write_dxpl, check);
+        } H5E_END_TRY;
+        if(status>=0) TEST_ERROR;
+
+        /* Callback decides to continue inspite data is corrupted. */
+        if(H5Pset_filter_callback(dxpl, filter_cb_cont, NULL)<0) TEST_ERROR;
+        if(H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, dxpl, check)<0)
+            TEST_ERROR;
+
+        /* Callback decides to fail when data is corrupted. */
+        if(H5Pset_filter_callback(write_dxpl, filter_cb_fail, NULL)<0) TEST_ERROR;
+        /* (Use the "write" DXPL in order to make certain corruption is seen) */
+        H5E_BEGIN_TRY {
+            status=H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, write_dxpl, check);
+        } H5E_END_TRY;
+        if(status>=0) TEST_ERROR;
+    } else {
+        if (H5Dread (dataset, H5T_NATIVE_INT, sid, sid, dxpl, check)<0)
+	   TEST_ERROR;
+
+        /* Check that the values read are the same as the values written */
+        for (i=0; i<hs_size[0]; i++) {
+	   for (j=0; j<hs_size[1]; j++) {
+	       if (points[hs_offset[0]+i][hs_offset[1]+j] !=
+                      check[hs_offset[0]+i][hs_offset[1]+j]) {
+		  H5_FAILED();
+		  fprintf(stderr,"    Read different values than written.\n");
+		  fprintf(stderr,"    At index %lu,%lu\n",
+		         (unsigned long)(hs_offset[0]+i),
+		         (unsigned long)(hs_offset[1]+j));
+		  fprintf(stderr,"    At original: %d\n",
+		         (int)points[hs_offset[0]+i][hs_offset[1]+j]);
+		  fprintf(stderr,"    At returned: %d\n",
+		         (int)check[hs_offset[0]+i][hs_offset[1]+j]);
+		  goto error;
+	       }
+	   }
+        }
+    }
+
+    PASSED();
+
+    /* Get the storage size of the dataset */
+    if((*dset_size=H5Dget_storage_size(dataset))==0) goto error;
+    /* Clean up objects used for this test */
+    if (H5Dclose (dataset)<0) goto error;
+    if (H5Sclose (sid)<0) goto error;
+    if (H5Pclose (dxpl)<0) goto error;
+    free (tconv_buf);
+
+    return(0);
+
+error:
+    if(tconv_buf)
+        free (tconv_buf);
+    return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	test_filter_noencoder
+ *
+ * Purpose:	Tests filters with no encoder present.  Ensures that data
+ *			can still be decoded correctly and that errors are thrown
+ *			when the application tries to write.
+ *
+ * Return:	Success:	0
+ *		Failure:	-1
+ *
+ * Programmer:	Nat Furrer and James Laird
+ *              Monday, June 7, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifdef H5_HAVE_FILTER_SZIP
+static herr_t
+test_filter_noencoder(const char *dset_name)
+{
+    hid_t file_id = -1;
+    hid_t dset_id = -1;
+    hid_t test_dset_id = -1;
+    hid_t dcpl_id = -1;
+    hid_t space_id = -1;
+    hsize_t dims = 10;
+    herr_t err;
+    int test_ints[10] = { 12 };
+    int read_buf[10];
+    int i;
+    char * srcdir = HDgetenv("srcdir"); /* The source directory */
+    char testfile[512]="";	/* Buffer to hold name of test file */
+
+    /*
+     * Create the name of the file to open (in case we are using the --srcdir
+     * option and the file is in a different directory from this test).
+     */
+    if (srcdir && ((HDstrlen(srcdir) + HDstrlen(NOENCODER_FILENAME) + 1) < sizeof(testfile)) )
+    {
+        HDstrcpy(testfile, srcdir);
+        HDstrcat(testfile, "/");
+    }
+    HDstrcat(testfile, NOENCODER_FILENAME);
+
+    file_id = H5Fopen(testfile, H5F_ACC_RDWR, H5P_DEFAULT);
+    if (file_id < 0) goto error;
+
+    dset_id = H5Dopen(file_id, dset_name);
+    if (dset_id < 0) goto error;
+
+    space_id = H5Screate_simple(1, &dims, NULL);
+    if (space_id < 0) goto error;
+
+    TESTING("    decoding without encoder");
+
+    /* Read the dataset and make sure the decoder is working correctly */
+    err = H5Dread(dset_id, H5T_NATIVE_INT, space_id, space_id, H5P_DEFAULT, read_buf);
+    if (err < 0) goto error;
+
+    for(i = 0; i < 10; i++)
+            if ( read_buf[i] != i ) goto error;
+
+    H5Sclose(space_id);
+
+    PASSED();
+
+    /* Attempt to copy the DCPL and use it to create a new dataset.
+     * Since the filter does not have an encoder, the creation
+     * should fail.
+     */
+    TESTING("    trying to write without encoder");
+
+    dcpl_id = H5Dget_create_plist(dset_id);
+    if (dcpl_id < 0) goto error;
+
+    space_id = H5Screate_simple(1, &dims, NULL);
+    if (space_id < 0) goto error;
+
+    H5E_BEGIN_TRY{
+    test_dset_id = H5Dcreate(file_id, NOENCODER_TEST_DATASET, H5T_NATIVE_INT, space_id , dcpl_id);
+    }H5E_END_TRY
+
+    if (test_dset_id >= 0) goto error;
+
+    /* Attempt to extend the dataset.  This should fail because
+     * the dataset has a fill value and is instructed to fill on
+     * allocation.
+     */
+    dims = 20; /* Dataset is originally of size 10 */
+    H5E_BEGIN_TRY{
+    err = H5Dextend(dset_id, &dims);
+    }H5E_END_TRY
+
+    if (err >= 0) goto error;
+
+    /* Attempt to write to the dataset.  This should fail because
+     * the filter does not have an encoder.
+     */
+    H5E_BEGIN_TRY{
+    err = H5Dwrite(dset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, test_ints);
+    }H5E_END_TRY
+
+    if (err >= 0) goto error;
+
+    H5Fclose(file_id);
+    H5Dclose(dset_id);
+    H5Sclose(space_id);
+    H5Pclose(dcpl_id);
+
+    PASSED();
+
+    return 0;
+
+error:
+    H5_FAILED();
+    if (dset_id != -1)
+            H5Dclose(dset_id);
+    if (test_dset_id != -1)
+            H5Dclose(test_dset_id);
+    if (space_id != -1)
+            H5Sclose(space_id);
+    if (dcpl_id != -1)
+            H5Pclose(dcpl_id);
+    if (file_id != -1)
+            H5Fclose(file_id);
+    return -1;
+}
+#endif /* H5_HAVE_FILTER_SZIP */
+
+/*-------------------------------------------------------------------------
+ * Function:    test_get_filter_info
+ *
+ * Purpose:     Tests the H5Zget_filter_info function.
+ *
+ * Return:      Success:        0
+ *              Failure:        -1
+ *
+ * Programmer:  Nat Furrer and James Laird
+ *              Thursday, June 10, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_get_filter_info(void)
+{
+  unsigned int flags;  /* flags returned from H5Zget_filter_info */
+  herr_t err;
+
+  TESTING("H5Zget_filter_info");
+
+  /* Verify that each filter is reported as having the right combination
+   * of encoder and decoder.
+   */
+#ifdef H5_HAVE_FILTER_FLETCHER32
+  if(H5Zget_filter_info(H5Z_FILTER_FLETCHER32, &flags) < 0) TEST_ERROR
+
+  if(((flags & H5Z_FILTER_CONFIG_ENCODE_ENABLED) == 0) ||
+     ((flags & H5Z_FILTER_CONFIG_DECODE_ENABLED) == 0))
+      TEST_ERROR
+#endif
+
+#ifdef H5_HAVE_FILTER_SHUFFLE
+  if(H5Zget_filter_info(H5Z_FILTER_SHUFFLE, &flags) < 0) TEST_ERROR
+
+  if(((flags & H5Z_FILTER_CONFIG_ENCODE_ENABLED) == 0) ||
+     ((flags & H5Z_FILTER_CONFIG_DECODE_ENABLED) == 0))
+      TEST_ERROR
+#endif
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+  if(H5Zget_filter_info(H5Z_FILTER_DEFLATE, &flags) < 0) TEST_ERROR
+
+  if(((flags & H5Z_FILTER_CONFIG_ENCODE_ENABLED) == 0) ||
+     ((flags & H5Z_FILTER_CONFIG_DECODE_ENABLED) == 0))
+      TEST_ERROR
+#endif
+
+#ifdef H5_HAVE_FILTER_SZIP
+    if(H5Zget_filter_info(H5Z_FILTER_SZIP, &flags) < 0) TEST_ERROR
+
+    if(SZ_encoder_enabled()) {
+        if(((flags & H5Z_FILTER_CONFIG_ENCODE_ENABLED) == 0) ||
+                ((flags & H5Z_FILTER_CONFIG_DECODE_ENABLED) == 0))
+            TEST_ERROR
+    } /* end if */
+    else {
+        if(((flags & H5Z_FILTER_CONFIG_ENCODE_ENABLED) != 0) ||
+                ((flags & H5Z_FILTER_CONFIG_DECODE_ENABLED) == 0))
+            TEST_ERROR
+    } /* end else */
+#endif /* H5_HAVE_FILTER_SZIP */
+
+  /* Verify that get_filter_info doesn't throw an error when given a bad filter */
+  /* (Different default behavior in post-1.6 code) */
+  if (H5Zget_filter_info(-1, &flags) < 0) TEST_ERROR
+  if (flags != 0) TEST_ERROR
+
+  PASSED();
+  return 0;
+
+error:
+  return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	test_filters
+ *
+ * Purpose:	Tests dataset filter.
+ *
+ * Return:	Success:	0
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, April 15, 1998
+ *
+ * Modifications:
+ *              Moved guts of filter testing out of main routine.
+ *              Tests shuffle, deflate, fletcher32 checksum filters.
+ *              Quincey Koziol, November 14, 2002
+ *
+ *              Added Fletcher32 filter testing
+ *              Raymond Lu, Jan 22, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_filters(hid_t file)
+{
+    hid_t	dc;                 /* Dataset creation property list ID */
+    const hsize_t chunk_size[2] = {FILTER_CHUNK_DIM1, FILTER_CHUNK_DIM2};  /* Chunk dimensions */
+    hsize_t     null_size;          /* Size of dataset with null filter */
+
+#ifdef H5_HAVE_FILTER_FLETCHER32
+    hsize_t     fletcher32_size;       /* Size of dataset with Fletcher32 checksum */
+    unsigned    data_corrupt[3];     /* position and length of data to be corrupted */
+#endif /* H5_HAVE_FILTER_FLETCHER32 */
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+    hsize_t     deflate_size;       /* Size of dataset with deflate filter */
+#endif /* H5_HAVE_FILTER_DEFLATE */
+
+#ifdef H5_HAVE_FILTER_SZIP
+    hsize_t     szip_size;       /* Size of dataset with szip filter */
+    unsigned szip_options_mask=H5_SZIP_NN_OPTION_MASK;
+    unsigned szip_pixels_per_block=4;
+#endif /* H5_HAVE_FILTER_SZIP */
+
+#ifdef H5_HAVE_FILTER_SHUFFLE
+    hsize_t     shuffle_size;       /* Size of dataset with shuffle filter */
+#endif /* H5_HAVE_FILTER_SHUFFLE */
+
+#if (defined H5_HAVE_FILTER_DEFLATE | defined H5_HAVE_FILTER_SZIP) && defined H5_HAVE_FILTER_SHUFFLE && defined H5_HAVE_FILTER_FLETCHER32
+    hsize_t     combo_size;     /* Size of dataset with shuffle+deflate filter */
+#endif /* H5_HAVE_FILTER_DEFLATE && H5_HAVE_FILTER_SHUFFLE && H5_HAVE_FILTER_FLETCHER32 */
+
+    /* test the H5Zget_filter_info function */
+    if(test_get_filter_info() < 0) goto error;
+
+    /*----------------------------------------------------------
+     * STEP 0: Test null I/O filter by itself.
+     *----------------------------------------------------------
+     */
+    puts("Testing 'null' filter");
+    if((dc = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_chunk (dc, 2, chunk_size)<0) goto error;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    if (H5Zregister (H5Z_FILTER_BOGUS, "bogus", filter_bogus)<0) goto error;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    if (H5Zregister (H5Z_BOGUS)<0) goto error;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    if (H5Pset_filter (dc, H5Z_FILTER_BOGUS, 0, 0, NULL)<0) goto error;
+
+    if(test_filter_internal(file,DSET_BOGUS_NAME,dc,DISABLE_FLETCHER32,DATA_NOT_CORRUPTED,&null_size)<0) goto error;
+
+    /* Clean up objects used for this test */
+    if (H5Pclose (dc)<0) goto error;
+
+    /*----------------------------------------------------------
+     * STEP 1: Test Fletcher32 Checksum by itself.
+     *----------------------------------------------------------
+     */
+#ifdef H5_HAVE_FILTER_FLETCHER32
+    puts("Testing Fletcher32 checksum(enabled for read)");
+    if((dc = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_chunk (dc, 2, chunk_size)<0) goto error;
+    if (H5Pset_filter (dc,H5Z_FILTER_FLETCHER32,0,0,NULL)<0) goto error;
+
+    /* Enable checksum during read */
+    if(test_filter_internal(file,DSET_FLETCHER32_NAME,dc,ENABLE_FLETCHER32,DATA_NOT_CORRUPTED,&fletcher32_size)<0) goto error;
+    if(fletcher32_size<=null_size) {
+        H5_FAILED();
+        puts("    Size after checksumming is incorrect.");
+        goto error;
+    } /* end if */
+
+    /* Disable checksum during read */
+    puts("Testing Fletcher32 checksum(disabled for read)");
+    if(test_filter_internal(file,DSET_FLETCHER32_NAME_2,dc,DISABLE_FLETCHER32,DATA_NOT_CORRUPTED,&fletcher32_size)<0) goto error;
+    if(fletcher32_size<=null_size) {
+        H5_FAILED();
+        puts("    Size after checksumming is incorrect.");
+        goto error;
+    } /* end if */
+
+    /* Try to corrupt data and see if checksum fails */
+    puts("Testing Fletcher32 checksum(when data is corrupted)");
+    data_corrupt[0] = 52;
+    data_corrupt[1] = 33;
+    data_corrupt[2] = 27;
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    if (H5Zregister (H5Z_FILTER_CORRUPT, "corrupt", filter_corrupt)<0) goto error;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    if (H5Zregister (H5Z_CORRUPT)<0) goto error;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    if (H5Pset_filter (dc, H5Z_FILTER_CORRUPT, 0, 3, data_corrupt)<0) goto error;
+    if(test_filter_internal(file,DSET_FLETCHER32_NAME_3,dc,DISABLE_FLETCHER32,DATA_CORRUPTED,&fletcher32_size)<0) goto error;
+    if(fletcher32_size<=null_size) {
+        H5_FAILED();
+        puts("    Size after checksumming is incorrect.");
+        goto error;
+    } /* end if */
+
+    /* Clean up objects used for this test */
+    if (H5Pclose (dc)<0) goto error;
+#else /* H5_HAVE_FILTER_FLETCHER32 */
+    TESTING("fletcher32 checksum");
+    SKIPPED();
+    puts("    Fletcher32 checksum not enabled");
+#endif /* H5_HAVE_FILTER_FLETCHER32 */
+
+    /*----------------------------------------------------------
+     * STEP 2: Test deflation by itself.
+     *----------------------------------------------------------
+     */
+#ifdef H5_HAVE_FILTER_DEFLATE
+    puts("Testing deflate filter");
+    if((dc = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_chunk (dc, 2, chunk_size)<0) goto error;
+    if (H5Pset_deflate (dc, 6)<0) goto error;
+
+    if(test_filter_internal(file,DSET_DEFLATE_NAME,dc,DISABLE_FLETCHER32,DATA_NOT_CORRUPTED,&deflate_size)<0) goto error;
+    /* Clean up objects used for this test */
+    if (H5Pclose (dc)<0) goto error;
+#else /* H5_HAVE_FILTER_DEFLATE */
+    TESTING("deflate filter");
+    SKIPPED();
+    puts("    Deflate filter not enabled");
+#endif /* H5_HAVE_FILTER_DEFLATE */
+
+    /*----------------------------------------------------------
+     * STEP 3: Test szip compression by itself.
+     *----------------------------------------------------------
+     */
+#ifdef H5_HAVE_FILTER_SZIP
+    TESTING("szip filter (with encoder)");
+    if ( h5_szip_can_encode() == 1) {
+        if((dc = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+        if (H5Pset_chunk (dc, 2, chunk_size)<0) goto error;
+
+	puts("");
+	if (H5Pset_szip(dc, szip_options_mask, szip_pixels_per_block)<0) goto error;
+	if(test_filter_internal(file,DSET_SZIP_NAME,dc,DISABLE_FLETCHER32,DATA_NOT_CORRUPTED,&szip_size)<0) goto error;
+        if (H5Pclose (dc)<0) goto error;
+    } else {
+	SKIPPED();
+    }
+
+    TESTING("szip filter (without encoder)");
+
+    if ( h5_szip_can_encode() != 1) {
+	puts("");
+	if(test_filter_noencoder(NOENCODER_SZIP_DATASET) < 0) goto error;
+    } else {
+	SKIPPED();
+    }
+
+#else /* H5_HAVE_FILTER_SZIP */
+    TESTING("szip filter");
+    SKIPPED();
+    puts("    Szip filter not enabled");
+#endif /* H5_HAVE_FILTER_SZIP */
+
+    /*----------------------------------------------------------
+     * STEP 4: Test shuffling by itself.
+     *----------------------------------------------------------
+     */
+#ifdef H5_HAVE_FILTER_SHUFFLE
+    puts("Testing shuffle filter");
+    if((dc = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_chunk (dc, 2, chunk_size)<0) goto error;
+    if (H5Pset_shuffle (dc)<0) goto error;
+
+    if(test_filter_internal(file,DSET_SHUFFLE_NAME,dc,DISABLE_FLETCHER32,DATA_NOT_CORRUPTED,&shuffle_size)<0) goto error;
+    if(shuffle_size!=null_size) {
+        H5_FAILED();
+        puts("    Shuffled size not the same as uncompressed size.");
+        goto error;
+    } /* end if */
+
+    /* Clean up objects used for this test */
+    if (H5Pclose (dc)<0) goto error;
+#else /* H5_HAVE_FILTER_SHUFFLE */
+    TESTING("shuffle filter");
+    SKIPPED();
+    puts("    Shuffle filter not enabled");
+#endif /* H5_HAVE_FILTER_SHUFFLE */
+
+    /*----------------------------------------------------------
+     * STEP 5: Test shuffle + deflate + checksum in any order.
+     *----------------------------------------------------------
+     */
+#if defined H5_HAVE_FILTER_DEFLATE && defined H5_HAVE_FILTER_SHUFFLE && defined H5_HAVE_FILTER_FLETCHER32
+    puts("Testing shuffle+deflate+checksum filters(checksum first)");
+    if((dc = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_chunk (dc, 2, chunk_size)<0) goto error;
+    if (H5Pset_fletcher32 (dc)<0) goto error;
+    if (H5Pset_shuffle (dc)<0) goto error;
+    if (H5Pset_deflate (dc, 6)<0) goto error;
+
+    if(test_filter_internal(file,DSET_SHUF_DEF_FLET_NAME,dc,ENABLE_FLETCHER32,DATA_NOT_CORRUPTED,&combo_size)<0) goto error;
+
+    /* Clean up objects used for this test */
+    if (H5Pclose (dc)<0) goto error;
+
+    puts("Testing shuffle+deflate+checksum filters(checksum last)");
+    if((dc = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_chunk (dc, 2, chunk_size)<0) goto error;
+    if (H5Pset_shuffle (dc)<0) goto error;
+    if (H5Pset_deflate (dc, 6)<0) goto error;
+    if (H5Pset_fletcher32 (dc)<0) goto error;
+
+    if(test_filter_internal(file,DSET_SHUF_DEF_FLET_NAME_2,dc,ENABLE_FLETCHER32,DATA_NOT_CORRUPTED,&combo_size)<0) goto error;
+
+    /* Clean up objects used for this test */
+    if (H5Pclose (dc)<0) goto error;
+#else /* H5_HAVE_FILTER_DEFLATE && H5_HAVE_FILTER_SHUFFLE && H5_HAVE_FILTER_FLETCHER32 */
+    TESTING("shuffle+deflate+fletcher32 filters");
+    SKIPPED();
+    puts("    Deflate, shuffle, or fletcher32 checksum filter not enabled");
+#endif /* H5_HAVE_FILTER_DEFLATE && H5_HAVE_FILTER_SHUFFLE && H5_HAVE_FILTER_FLETCHER32 */
+
+    /*----------------------------------------------------------
+     * STEP 6: Test shuffle + szip + checksum in any order.
+     *----------------------------------------------------------
+     */
+#if defined H5_HAVE_FILTER_SZIP && defined H5_HAVE_FILTER_SHUFFLE && defined H5_HAVE_FILTER_FLETCHER32
+
+    TESTING("shuffle+szip+checksum filters(checksum first, with encoder)");
+    if((dc = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_chunk (dc, 2, chunk_size)<0) goto error;
+    if (H5Pset_fletcher32 (dc)<0) goto error;
+    if (H5Pset_shuffle (dc)<0) goto error;
+
+	/* Make sure encoding is enabled */
+    if ( h5_szip_can_encode() == 1) {
+	puts("");
+	if (H5Pset_szip(dc, szip_options_mask, szip_pixels_per_block)<0) goto error;
+	if(test_filter_internal(file,DSET_SHUF_SZIP_FLET_NAME,dc,ENABLE_FLETCHER32,DATA_NOT_CORRUPTED,&combo_size)<0) goto error;
+    } else {
+		SKIPPED();
+    }
+
+    TESTING("shuffle+szip+checksum filters(checksum first, without encoder)");
+
+    if ( h5_szip_can_encode() != 1) {
+	puts("");
+	if (test_filter_noencoder(NOENCODER_SZIP_SHUFF_FLETCH_DATASET) < 0) goto error;
+    } else {
+		SKIPPED();
+    }
+
+    /* Clean up objects used for this test */
+    if (H5Pclose (dc)<0) goto error;
+
+    TESTING("shuffle+szip+checksum filters(checksum last, with encoder)");
+
+    /* Make sure encoding is enabled */
+    if ( h5_szip_can_encode() == 1) {
+	puts("");
+	if((dc = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+	if (H5Pset_chunk (dc, 2, chunk_size)<0) goto error;
+	if (H5Pset_shuffle (dc)<0) goto error;
+	if (H5Pset_szip(dc, szip_options_mask, szip_pixels_per_block)<0) goto error;
+	if (H5Pset_fletcher32 (dc)<0) goto error;
+
+	if(test_filter_internal(file,DSET_SHUF_SZIP_FLET_NAME_2,dc,ENABLE_FLETCHER32,DATA_NOT_CORRUPTED,&combo_size)<0) goto error;
+
+	/* Clean up objects used for this test */
+	if (H5Pclose (dc)<0) goto error;
+
+    } else {
+	SKIPPED();
+    }
+
+#else /* H5_HAVE_FILTER_SZIP && H5_HAVE_FILTER_SHUFFLE && H5_HAVE_FILTER_FLETCHER32 */
+    TESTING("shuffle+szip+fletcher32 filters");
+    SKIPPED();
+    puts("    Szip, shuffle, or fletcher32 checksum filter not enabled");
+#endif /* H5_HAVE_FILTER_SZIP && H5_HAVE_FILTER_SHUFFLE && H5_HAVE_FILTER_FLETCHER32 */
+    return 0;
+
+error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_missing_filter
+ *
+ * Purpose:	Tests library behavior when filter is missing
+ *
+ * Return:	Success:	0
+ *		Failure:	-1
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, November 14, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_missing_filter(hid_t file)
+{
+    hid_t       fid;            /* File ID */
+    hid_t       dsid;           /* Dataset ID */
+    hid_t       sid;            /* Dataspace ID */
+    hid_t       dcpl;           /* Dataspace creation property list ID */
+    const hsize_t dims[2] = {DSET_DIM1, DSET_DIM2};         /* Dataspace dimensions */
+    const hsize_t chunk_dims[2] = {2, 25};      /* Chunk dimensions */
+    hsize_t     dset_size;      /* Dataset size */
+    int	        i,j;            /* Local index variables */
+    herr_t      ret;            /* Generic return value */
+    char testfile[512]="";      /* Buffer to hold name of existing test file */
+    char *srcdir = HDgetenv("srcdir");    /* The source directory, if we are using the --srcdir configure option */
+
+    TESTING("dataset access with missing filter");
+
+    /* Unregister the deflate filter */
+#ifdef H5_HAVE_FILTER_DEFLATE
+        /* Verify deflate filter is registered currently */
+        if(H5Zfilter_avail(H5Z_FILTER_DEFLATE)!=TRUE) {
+            H5_FAILED();
+            printf("    Line %d: Deflate filter not available\n",__LINE__);
+            goto error;
+        } /* end if */
+
+        /* Unregister deflate filter (use internal function) */
+        if (H5Z_unregister(H5Z_FILTER_DEFLATE)<0) {
+            H5_FAILED();
+            printf("    Line %d: Can't unregister deflate filter\n",__LINE__);
+            goto error;
+        } /* end if */
+#endif /* H5_HAVE_FILTER_DEFLATE */
+        /* Verify deflate filter is not registered currently */
+        if(H5Zfilter_avail(H5Z_FILTER_DEFLATE)!=FALSE) {
+            H5_FAILED();
+            printf("    Line %d: Deflate filter available\n",__LINE__);
+            goto error;
+        } /* end if */
+
+    /* Create dcpl with deflate filter */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't create dcpl\n",__LINE__);
+        goto error;
+    } /* end if */
+    if(H5Pset_chunk(dcpl, 2, chunk_dims)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't set chunk sizes\n",__LINE__);
+        goto error;
+    } /* end if */
+    if(H5Pset_deflate(dcpl, 9)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't set deflate filter\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Check if all the filters are available */
+    ret=H5Pall_filters_avail(dcpl);
+    if(ret<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't check filter availability\n",__LINE__);
+        goto error;
+    } /* end if */
+    if(ret!=FALSE) {
+        H5_FAILED();
+        printf("    Line %d: Filter shouldn't be available\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Create the data space */
+    if ((sid = H5Screate_simple(2, dims, NULL))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't open dataspace\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Create new dataset */
+    if ((dsid = H5Dcreate(file, DSET_MISSING_NAME, H5T_NATIVE_INT, sid, dcpl))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't create dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Write data */
+    if (H5Dwrite(dsid, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, points)<0) {
+        H5_FAILED();
+        printf("    Line %d: Error writing dataset data\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Flush the file (to clear the cache) */
+    if (H5Fflush(file, H5F_SCOPE_GLOBAL)<0) {
+        H5_FAILED();
+        printf("    Line %d: Error flushing file\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Query the dataset's size on disk */
+    if((dset_size=H5Dget_storage_size(dsid))==0) {
+        H5_FAILED();
+        printf("    Line %d: Error querying dataset size, dset_size=%lu\n",__LINE__,(unsigned long)dset_size);
+        goto error;
+    } /* end if */
+
+    /* Verify that the size indicates data is uncompressed */
+    /* (i.e. the deflation filter we asked for was silently ignored) */
+    if((H5Tget_size(H5T_NATIVE_INT)*DSET_DIM1*DSET_DIM2)!=dset_size) {
+        H5_FAILED();
+        printf("    Line %d: Incorrect dataset size: %lu\n",__LINE__,(unsigned long)dset_size);
+        goto error;
+    } /* end if */
+
+    /* Read data */
+    if (H5Dread(dsid, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, check)<0) {
+        H5_FAILED();
+        printf("    Line %d: Error reading dataset data\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Compare data */
+    /* Check that the values read are the same as the values written */
+    for (i=0; i<dims[0]; i++) {
+	for (j=0; j<dims[1]; j++) {
+	    if (points[i][j] != check[i][j]) {
+		H5_FAILED();
+		printf("    Line %d: Read different values than written.\n",__LINE__);
+		printf("    At index %lu,%lu\n", (unsigned long)(i), (unsigned long)(j));
+		printf("    At original: %d\n",points[i][j]);
+		printf("    At returned: %d\n",check[i][j]);
+		goto error;
+	    } /* end if */
+	} /* end for */
+    } /* end for */
+
+    /* Close dataset */
+    if(H5Dclose(dsid)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close dataspace */
+    if(H5Sclose(sid)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dataspace\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close dataset creation property list */
+    if(H5Pclose(dcpl)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dcpl\n",__LINE__);
+        goto error;
+    } /* end if */
+
+
+    /* Try reading existing dataset with deflate filter */
+
+    /* Compose the name of the file to open, using the srcdir, if appropriate */
+    if (srcdir && ((HDstrlen(srcdir) + HDstrlen(FILE_DEFLATE_NAME) + 1) < sizeof(testfile))){
+	HDstrcpy(testfile, srcdir);
+	HDstrcat(testfile, "/");
+    }
+    HDstrcat(testfile, FILE_DEFLATE_NAME);
+
+    /* Open existing file */
+    if((fid=H5Fopen(testfile, H5F_ACC_RDONLY, H5P_DEFAULT))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't open existing deflated file\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Open dataset */
+    if ((dsid = H5Dopen(fid, "Dataset1"))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't open dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Read data (should fail, since deflate filter is missing) */
+    H5E_BEGIN_TRY {
+        ret=H5Dread(dsid, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, check);
+    } H5E_END_TRY;
+    if (ret>=0) {
+        H5_FAILED();
+        printf("    Line %d: Should not be able to read dataset data\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close dataset */
+    if(H5Dclose(dsid)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close existing file */
+    if(H5Fclose(fid)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close file\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Re-register the deflate filter */
+        /* Verify deflate filter is not registered currently */
+        if(H5Zfilter_avail(H5Z_FILTER_DEFLATE)!=FALSE) {
+            H5_FAILED();
+            printf("    Line %d: Deflate filter available\n",__LINE__);
+            goto error;
+        } /* end if */
+#ifdef H5_HAVE_FILTER_DEFLATE
+        /* Register deflate filter (use internal function to avoid range checks) */
+        if(H5Z_register(H5Z_DEFLATE)<0) {
+            H5_FAILED();
+            printf("    Line %d: Can't unregister deflate filter\n",__LINE__);
+            goto error;
+        } /* end if */
+
+        /* Verify deflate filter is registered currently */
+        if(H5Zfilter_avail(H5Z_FILTER_DEFLATE)!=TRUE) {
+            H5_FAILED();
+            printf("    Line %d: Deflate filter not available\n",__LINE__);
+            goto error;
+        } /* end if */
+#endif /* H5_HAVE_FILTER_DEFLATE */
+
+    PASSED();
+    return 0;
+
+error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_onebyte_shuffle
+ *
+ * Purpose:	Tests the 8-bit array with shuffling algorithm.
+ *              The shuffled array  should be the same result as
+ *              that before the shuffling.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Kent Yang
+ *              Wednesday, Nov. 13th, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_onebyte_shuffle(hid_t file)
+{
+#ifdef H5_HAVE_FILTER_SHUFFLE
+    hid_t		dataset, space,dc;
+    const hsize_t	size[2] = {10, 20};
+    const hsize_t       chunk_size[2] = {10, 20};
+    unsigned char       orig_data[10][20];
+    unsigned char       new_data[10][20];
+    int	   		i, j;
+#else /* H5_HAVE_FILTER_SHUFFLE */
+    const char		*not_supported= "    Data shuffling is not enabled.";
+#endif /* H5_HAVE_FILTER_SHUFFLE */
+
+    TESTING("8-bit shuffling (setup)");
+
+#ifdef H5_HAVE_FILTER_SHUFFLE
+    /* Create the data space */
+    if ((space = H5Screate_simple(2, size, NULL))<0) goto error;
+
+    /* Use shuffling algorithm with 8-bit  */
+    if((dc = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_chunk (dc, 2, chunk_size)<0) goto error;
+    if (H5Pset_shuffle (dc)<0) goto error;
+
+    /* Create the dataset */
+    if ((dataset = H5Dcreate(file, DSET_ONEBYTE_SHUF_NAME, H5T_NATIVE_UCHAR,
+			     space,dc))<0) goto error;
+
+    for (i= 0;i< 10; i++)
+      for (j = 0; j < 20; j++)
+	orig_data[i][j] = (unsigned char)HDrandom();
+
+    PASSED();
+#else
+    SKIPPED();
+    puts(not_supported);
+#endif
+
+    /*----------------------------------------------------------------------
+     * STEP 1: Test shuffling by setting up a chunked dataset and writing
+     * to it.
+     *----------------------------------------------------------------------
+     */
+    TESTING("8-bit shuffling (write)");
+
+#ifdef H5_HAVE_FILTER_SHUFFLE
+    if (H5Dwrite(dataset, H5T_NATIVE_UCHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+		 orig_data)<0)
+	goto error;
+
+    PASSED();
+#else
+    SKIPPED();
+    puts(not_supported);
+#endif
+
+    /*----------------------------------------------------------------------
+     * STEP 2: Try to read the data we just wrote.
+     *----------------------------------------------------------------------
+     */
+    TESTING("8-bit shuffling (read)");
+
+#ifdef H5_HAVE_FILTER_SHUFFLE
+    /* Read the dataset back */
+    if (H5Dread(dataset, H5T_NATIVE_UCHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+		new_data)<0)
+	goto error;
+
+    /* Check that the values read are the same as the values written */
+    for (i=0; i<size[0]; i++) {
+	for (j=0; j<size[1]; j++) {
+	    if (new_data[i][j] != orig_data[i][j]) {
+		H5_FAILED();
+		printf("    Read different values than written.\n");
+		printf("    At index %lu,%lu\n",
+		       (unsigned long)i, (unsigned long)j);
+		goto error;
+	    }
+	}
+    }
+
+    /*----------------------------------------------------------------------
+     * Cleanup
+     *----------------------------------------------------------------------
+     */
+    if (H5Pclose (dc)<0) goto error;
+    if (H5Dclose(dataset)<0) goto error;
+
+    PASSED();
+#else
+    SKIPPED();
+    puts(not_supported);
+#endif
+
+    return 0;
+
+error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_multiopen
+ *
+ * Purpose:	Tests that a bug no longer exists.  If a dataset is opened
+ *		twice and one of the handles is used to extend the dataset,
+ *		then the other handle should return the new size when
+ *		queried.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, June  9, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_multiopen (hid_t file)
+{
+    hid_t		dcpl=-1, space=-1, dset1=-1, dset2=-1;
+    hsize_t		cur_size[1] = {10};
+    static hsize_t	max_size[1] = {H5S_UNLIMITED};
+    hsize_t		tmp_size[1];
+
+    TESTING("multi-open with extending");
+
+    /* Create the dataset and open it twice */
+    if((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_chunk (dcpl, 1, cur_size)<0) goto error;
+    if ((space=H5Screate_simple (1, cur_size, max_size))<0) goto error;
+    if ((dset1=H5Dcreate (file, "multiopen", H5T_NATIVE_INT, space,
+			  dcpl))<0) goto error;
+    if ((dset2=H5Dopen (dset1, "."))<0) goto error;
+    if (H5Sclose (space)<0) goto error;
+
+    /* Extend with the first handle */
+    cur_size[0] = 20;
+    if (H5Dextend (dset1, cur_size)<0) goto error;
+
+    /* Get the size from the second handle */
+    if ((space = H5Dget_space (dset2))<0) goto error;
+    if (H5Sget_simple_extent_dims (space, tmp_size, NULL)<0) goto error;
+    if (cur_size[0]!=tmp_size[0]) {
+	H5_FAILED();
+	printf ("    Got %d instead of %d!\n",
+		(int)tmp_size[0], (int)cur_size[0]);
+	goto error;
+    }
+
+    if (H5Dclose (dset1)<0) goto error;
+    if (H5Dclose (dset2)<0) goto error;
+    if (H5Sclose (space)<0) goto error;
+    if (H5Pclose (dcpl)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Dclose (dset1);
+	H5Dclose (dset2);
+	H5Sclose (space);
+	H5Pclose (dcpl);
+    } H5E_END_TRY;
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_types
+ *
+ * Purpose:	Make some datasets with various types so we can test h5ls.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, June  7, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_types(hid_t file)
+{
+    hid_t		grp=-1, type=-1, space=-1, dset=-1;
+    size_t		i;
+    hsize_t		nelmts;
+    unsigned char	buf[32];
+
+    TESTING("various datatypes");
+    if ((grp=H5Gcreate(file, "typetests", 0))<0) goto error;
+
+    /* bitfield_1 */
+    nelmts = sizeof(buf);
+    if ((type=H5Tcopy(H5T_STD_B8LE))<0 ||
+	(space=H5Screate_simple(1, &nelmts, NULL))<0 ||
+	(dset=H5Dcreate(grp, "bitfield_1", type, space, H5P_DEFAULT))<0)
+	goto error;
+    for (i=0; i<sizeof buf; i++) buf[i] = (unsigned char)0xff ^ (unsigned char)i;
+    if (H5Dwrite(dset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf)<0)
+	goto error;
+
+    if (H5Sclose(space)<0) goto error;
+    if (H5Tclose(type)<0) goto error;
+    if (H5Dclose(dset)<0) goto error;
+
+    /* bitfield_2 */
+    nelmts = sizeof(buf)/2;
+    if ((type=H5Tcopy(H5T_STD_B16LE))<0 ||
+	(space=H5Screate_simple(1, &nelmts, NULL))<0 ||
+	(dset=H5Dcreate(grp, "bitfield_2", type, space, H5P_DEFAULT))<0)
+	goto error;
+    for (i=0; i<sizeof buf; i++) buf[i] = (unsigned char)0xff ^ (unsigned char)i;
+    if (H5Dwrite(dset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf)<0)
+	goto error;
+    if (H5Sclose(space)<0) goto error;
+    if (H5Tclose(type)<0) goto error;
+    if (H5Dclose(dset)<0) goto error;
+
+    /* opaque_1 */
+    nelmts = sizeof(buf);
+    if ((type=H5Tcreate(H5T_OPAQUE, 1))<0 ||
+	H5Tset_tag(type, "testing 1-byte opaque type")<0 ||
+	(space=H5Screate_simple(1, &nelmts, NULL))<0 ||
+	(dset=H5Dcreate(grp, "opaque_1", type, space, H5P_DEFAULT))<0)
+	goto error;
+    for (i=0; i<sizeof buf; i++) buf[i] = (unsigned char)0xff ^ (unsigned char)i;
+    if (H5Dwrite(dset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf)<0)
+	goto error;
+    if (H5Sclose(space)<0) goto error;
+    if (H5Tclose(type)<0) goto error;
+    if (H5Dclose(dset)<0) goto error;
+
+    /* opaque_2 */
+    nelmts = sizeof(buf)/4;
+    if ((type=H5Tcreate(H5T_OPAQUE, 4))<0 ||
+	H5Tset_tag(type, "testing 4-byte opaque type")<0 ||
+	(space=H5Screate_simple(1, &nelmts, NULL))<0 ||
+	(dset=H5Dcreate(grp, "opaque_2", type, space, H5P_DEFAULT))<0)
+	goto error;
+    for (i=0; i<sizeof buf; i++) buf[i] = (unsigned char)0xff ^ (unsigned char)i;
+    if (H5Dwrite(dset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf)<0)
+	goto error;
+    if (H5Sclose(space)<0) goto error;
+    if (H5Tclose(type)<0) goto error;
+    if (H5Dclose(dset)<0) goto error;
+
+    /* Cleanup */
+    if (H5Gclose(grp)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Gclose(grp);
+	H5Tclose(type);
+	H5Sclose(space);
+	H5Dclose(dset);
+    } H5E_END_TRY;
+    return -1;
+}
+
+#ifndef H5_WANT_H5_V1_4_COMPAT
+/* This message derives from H5Z */
+const H5Z_class_t H5Z_CAN_APPLY[1] = {{
+    H5Z_FILTER_BOGUS,		/* Filter id number		*/
+    "bogus",			/* Filter name for debugging	*/
+    can_apply_bogus,            /* The "can apply" callback     */
+    NULL,                       /* The "set local" callback     */
+    filter_bogus,		/* The actual filter function	*/
+}};
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_can_apply
+ *
+ * Purpose:	Tests library behavior when filter indicates it can't
+ *              apply to certain combinations of creation parameters
+ *
+ * Return:	Success:	0
+ *		Failure:	-1
+ *
+ * Programmer:	Quincey Koziol
+ *              Friday, April  5, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_can_apply(hid_t file)
+{
+    hid_t       dsid;           /* Dataset ID */
+    hid_t       sid;            /* Dataspace ID */
+    hid_t       dcpl;           /* Dataspace creation property list ID */
+    const hsize_t dims[2] = {DSET_DIM1, DSET_DIM2};         /* Dataspace dimensions */
+    const hsize_t chunk_dims[2] = {2, 25};      /* Chunk dimensions */
+    hsize_t     dset_size;      /* Dataset size */
+    int	        i,j;            /* Local index variables */
+
+    TESTING("dataset filter 'can apply' callback");
+
+    /* Create dcpl with special filter */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't create dcpl\n",__LINE__);
+        goto error;
+    } /* end if */
+    if(H5Pset_chunk(dcpl, 2, chunk_dims)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't set chunk sizes\n",__LINE__);
+        goto error;
+    } /* end if */
+    if(H5Zregister (H5Z_CAN_APPLY)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't register 'can apply' filter\n",__LINE__);
+        goto error;
+    }
+    if(H5Pset_filter (dcpl, H5Z_FILTER_BOGUS, 0, 0, NULL)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't set bogus filter\n",__LINE__);
+        goto error;
+    }
+
+    /* Create the data space */
+    if ((sid = H5Screate_simple(2, dims, NULL))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't open dataspace\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Create new dataset */
+    /* (Should fail because the 'can apply' filter should indicate inappropriate combination) */
+    H5E_BEGIN_TRY {
+        dsid = H5Dcreate(file, DSET_CAN_APPLY_NAME, H5T_NATIVE_DOUBLE, sid, dcpl);
+    } H5E_END_TRY;
+    if (dsid >=0) {
+        H5_FAILED();
+        printf("    Line %d: Shouldn't have created dataset!\n",__LINE__);
+        H5Dclose(dsid);
+        goto error;
+    } /* end if */
+
+    /* Create new dataset */
+    if ((dsid = H5Dcreate(file, DSET_CAN_APPLY_NAME, H5T_NATIVE_INT, sid, dcpl))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't create dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Write data */
+    if (H5Dwrite(dsid, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, points)<0) {
+        H5_FAILED();
+        printf("    Line %d: Error writing dataset data\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Flush the file (to clear the cache) */
+    if (H5Fflush(file, H5F_SCOPE_GLOBAL)<0) {
+        H5_FAILED();
+        printf("    Line %d: Error flushing file\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Query the dataset's size on disk */
+    if((dset_size=H5Dget_storage_size(dsid))==0) {
+        H5_FAILED();
+        printf("    Line %d: Error querying dataset size\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Verify that the size indicates data is uncompressed */
+    if((H5Tget_size(H5T_NATIVE_INT)*dims[0]*dims[1])!=dset_size) {
+        H5_FAILED();
+        printf("    Line %d: Incorrect dataset size: %lu\n",__LINE__,(unsigned long)dset_size);
+        goto error;
+    } /* end if */
+
+    /* Read data */
+    if (H5Dread(dsid, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, check)<0) {
+        H5_FAILED();
+        printf("    Line %d: Error reading dataset data\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Compare data */
+    /* Check that the values read are the same as the values written */
+    for (i=0; i<dims[0]; i++) {
+	for (j=0; j<dims[1]; j++) {
+	    if (points[i][j] != check[i][j]) {
+		H5_FAILED();
+		printf("    Line %d: Read different values than written.\n",__LINE__);
+		printf("    At index %lu,%lu\n", (unsigned long)(i), (unsigned long)(j));
+		printf("    At original: %d\n",points[i][j]);
+		printf("    At returned: %d\n",check[i][j]);
+		goto error;
+	    } /* end if */
+	} /* end for */
+    } /* end for */
+
+    /* Close dataset */
+    if(H5Dclose(dsid)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close dataspace */
+    if(H5Sclose(sid)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dataspace\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close dataset creation property list */
+    if(H5Pclose(dcpl)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dcpl\n",__LINE__);
+        goto error;
+    } /* end if */
+
+
+    PASSED();
+    return 0;
+
+error:
+    return -1;
+} /* end test_can_apply() */
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_can_apply_szip
+ *
+ * Purpose:	Tests library behavior when szip filter indicates it can't
+ *              apply to certain combinations of creation parameters
+ *
+ * Return:	Success:	0
+ *		Failure:	-1
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, April  7, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_can_apply_szip(hid_t
+#ifndef H5_HAVE_FILTER_SZIP
+UNUSED
+#endif /* H5_HAVE_FILTER_SZIP */
+file)
+{
+#ifdef H5_HAVE_FILTER_SZIP
+    hid_t       dsid;           /* Dataset ID */
+    hid_t       sid;            /* Dataspace ID */
+    hid_t       dcpl;           /* Dataspace creation property list ID */
+    unsigned szip_options_mask=H5_SZIP_NN_OPTION_MASK;
+    unsigned szip_pixels_per_block;
+    const hsize_t dims[2] = {500, 4096};        /* Dataspace dimensions */
+    const hsize_t dims2[2] = {4, 2};            /* Dataspace dimensions */
+    const hsize_t chunk_dims[2] = {250, 2048};  /* Chunk dimensions */
+    const hsize_t chunk_dims2[2] = {2, 1};      /* Chunk dimensions */
+    herr_t      ret;            /* Status value */
+#endif /* H5_HAVE_FILTER_SZIP */
+
+    TESTING("dataset szip filter 'can apply' callback");
+
+#ifdef H5_HAVE_FILTER_SZIP
+
+    if (h5_szip_can_encode() == 1) {
+    /* Create the data space */
+    if ((sid = H5Screate_simple(2, dims, NULL))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't open dataspace\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Create dcpl with special filter */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't create dcpl\n",__LINE__);
+        goto error;
+    } /* end if */
+    if(H5Pset_chunk(dcpl, 2, chunk_dims)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't set chunk sizes\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Set (invalid at property set time) szip parameters */
+    szip_pixels_per_block=3;
+    H5E_BEGIN_TRY {
+        ret=H5Pset_szip (dcpl, szip_options_mask, szip_pixels_per_block);
+    } H5E_END_TRY;
+    if(ret>=0) {
+        H5_FAILED();
+        printf("    Line %d: Shouldn't be able to set szip filter\n",__LINE__);
+        goto error;
+    }
+
+    /* Set (invalid at property set time) szip parameters */
+    szip_pixels_per_block=512;
+    H5E_BEGIN_TRY {
+        ret=H5Pset_szip (dcpl, szip_options_mask, szip_pixels_per_block);
+    } H5E_END_TRY;
+    if(ret>=0) {
+        H5_FAILED();
+        printf("    Line %d: Shouldn't be able to set szip filter\n",__LINE__);
+        goto error;
+    }
+
+    /* Set (invalid at dataset creation time) szip parameters */
+    szip_pixels_per_block=2;
+    if(H5Pset_szip (dcpl, szip_options_mask, szip_pixels_per_block)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't set szip filter\n",__LINE__);
+        goto error;
+    }
+
+    /* Create new dataset */
+    /* (Should succeed; according to the new algorithm, scanline should be reset
+        to 2*128 satisfying 'maximum blocks per scanline' condition) */
+    H5E_BEGIN_TRY {
+        dsid = H5Dcreate(file, DSET_CAN_APPLY_SZIP_NAME, H5T_NATIVE_INT, sid, dcpl);
+    } H5E_END_TRY;
+    if (dsid <=0) {
+        H5_FAILED();
+        printf("    Line %d: Should have created dataset!\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close dataset */
+    if(H5Dclose(dsid)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close dataspace */
+    if(H5Sclose(sid)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dataspace\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close dataset creation property list */
+    if(H5Pclose(dcpl)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dcpl\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Create another data space */
+    if ((sid = H5Screate_simple(2, dims2, NULL))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't open dataspace\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Create dcpl with special filter */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't create dcpl\n",__LINE__);
+        goto error;
+    } /* end if */
+    if(H5Pset_chunk(dcpl, 2, chunk_dims2)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't set chunk sizes\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Set (invalid at dataset creation time) szip parameters */
+    szip_pixels_per_block=32;
+    if(H5Pset_szip (dcpl, szip_options_mask, szip_pixels_per_block)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't set szip filter\n",__LINE__);
+        goto error;
+    }
+
+    /* Create new dataset */
+    /* (Should fail because the 'can apply' filter should indicate inappropriate combination) */
+    H5E_BEGIN_TRY {
+        dsid = H5Dcreate(file, DSET_CAN_APPLY_SZIP_NAME, H5T_NATIVE_INT, sid, dcpl);
+    } H5E_END_TRY;
+    if (dsid >=0) {
+        H5_FAILED();
+        printf("    Line %d: Shouldn't have created dataset!\n",__LINE__);
+        H5Dclose(dsid);
+        goto error;
+    } /* end if */
+
+    /* Close dataspace */
+    if(H5Sclose(sid)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dataspace\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close dataset creation property list */
+    if(H5Pclose(dcpl)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dcpl\n",__LINE__);
+        goto error;
+    } /* end if */
+
+
+    PASSED();
+} else {
+    SKIPPED();
+    puts("    Szip encoding is not enabled.");
+}
+#else /* H5_HAVE_FILTER_SZIP */
+    SKIPPED();
+    puts("    Szip filter is not enabled.");
+#endif /* H5_HAVE_FILTER_SZIP */
+    return 0;
+
+#ifdef H5_HAVE_FILTER_SZIP
+error:
+    return -1;
+#endif /* H5_HAVE_FILTER_SZIP */
+} /* end test_can_apply_szip() */
+
+#ifndef H5_WANT_H5_V1_4_COMPAT
+/* This message derives from H5Z */
+const H5Z_class_t H5Z_SET_LOCAL[1] = {{
+    H5Z_FILTER_BOGUS2,		/* Filter id number		*/
+    "bogus2",			/* Filter name for debugging	*/
+    NULL,                       /* The "can apply" callback     */
+    set_local_bogus2,           /* The "set local" callback     */
+    filter_bogus2,		/* The actual filter function	*/
+}};
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_set_local
+ *
+ * Purpose:	Tests library behavior for "set local" filter callback
+ *
+ * Return:	Success:	0
+ *		Failure:	-1
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, April  7, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_set_local(hid_t fapl)
+{
+    char        filename[32];
+    hid_t       file;           /* File ID */
+    hid_t       dsid;           /* Dataset ID */
+    hid_t       sid;            /* Dataspace ID */
+    hid_t       dcpl;           /* Dataspace creation property list ID */
+    const hsize_t dims[2] = {DSET_DIM1, DSET_DIM2};         /* Dataspace dimensions */
+    const hsize_t chunk_dims[2] = {2, 25};      /* Chunk dimensions */
+    hsize_t     dset_size;      /* Dataset size */
+    unsigned    cd_values[2]={BOGUS2_PARAM_1, BOGUS2_PARAM_2};   /* Parameters for Bogus2 filter */
+    int	        i,j;          /* Local index variables */
+    double      n;          /* Local index variables */
+
+    TESTING("dataset filter 'set local' callback");
+
+    h5_fixname(FILENAME[5], fapl, filename, sizeof filename);
+
+    /* Initialize the integer & floating-point dataset */
+    n=0.0;
+    for (i = 0; i < DSET_DIM1; i++)
+	for (j = 0; j < DSET_DIM2; j++) {
+	    points[i][j] = (int)n++;
+	    points_dbl[i][j] = (double)1.5*n++;
+	}
+
+    /* Open file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't open file\n",__LINE__);
+	goto error;
+    }
+
+    /* Create dcpl with special filter */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't create dcpl\n",__LINE__);
+        goto error;
+    } /* end if */
+    if(H5Pset_chunk(dcpl, 2, chunk_dims)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't set chunk sizes\n",__LINE__);
+        goto error;
+    } /* end if */
+    if(H5Zregister (H5Z_SET_LOCAL)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't register 'set local' filter\n",__LINE__);
+        goto error;
+    }
+    if(H5Pset_filter (dcpl, H5Z_FILTER_BOGUS2, 0, BOGUS2_PERM_NPARMS, cd_values)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't set bogus2 filter\n",__LINE__);
+        goto error;
+    }
+
+    /* Create the data space */
+    if ((sid = H5Screate_simple(2, dims, NULL))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't open dataspace\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Create new dataset */
+    if ((dsid = H5Dcreate(file, DSET_SET_LOCAL_NAME, H5T_NATIVE_INT, sid, dcpl))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't create dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Write data */
+    if (H5Dwrite(dsid, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, points)<0) {
+        H5_FAILED();
+        printf("    Line %d: Error writing dataset data\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close dataset */
+    if(H5Dclose(dsid)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Create new dataset */
+    /* (Shouldn't get modified by output filter) */
+    if ((dsid = H5Dcreate(file, DSET_SET_LOCAL_NAME_2, H5T_NATIVE_DOUBLE, sid, dcpl))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't create dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Write data */
+    if (H5Dwrite(dsid, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, points_dbl)<0) {
+        H5_FAILED();
+        printf("    Line %d: Error writing dataset data\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close dataset */
+    if(H5Dclose(dsid)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close dataspace */
+    if(H5Sclose(sid)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dataspace\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close dataset creation property list */
+    if(H5Pclose(dcpl)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dcpl\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close file (flushes & empties cache) */
+    if (H5Fclose(file)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close file\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Open file */
+    if ((file=H5Fopen(filename, H5F_ACC_RDWR, fapl))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't open file\n",__LINE__);
+        goto error;
+    }
+
+    /* Re-open dataset */
+    if ((dsid = H5Dopen(file, DSET_SET_LOCAL_NAME))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't open dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Query the dataset's size on disk */
+    if((dset_size=H5Dget_storage_size(dsid))==0) {
+        H5_FAILED();
+        printf("    Line %d: Error querying dataset size\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Verify that the size indicates data is uncompressed */
+    if((H5Tget_size(H5T_NATIVE_INT)*dims[0]*dims[1])!=dset_size) {
+        H5_FAILED();
+        printf("    Line %d: Incorrect dataset size: %lu\n",__LINE__,(unsigned long)dset_size);
+        goto error;
+    } /* end if */
+
+    /* Read data */
+    if (H5Dread(dsid, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, check)<0) {
+        H5_FAILED();
+        printf("    Line %d: Error reading dataset data\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Compare data */
+    /* Check that the values read are the modified version of what was written */
+    for (i=0; i<dims[0]; i++) {
+	for (j=0; j<dims[1]; j++) {
+	    if ((points[i][j]+(int)sizeof(int)) != check[i][j]) {
+		H5_FAILED();
+		printf("    Line %d: Read different values than written.\n",__LINE__);
+		printf("    At index %lu,%lu\n", (unsigned long)(i), (unsigned long)(j));
+		printf("    At original: %d\n",points[i][j]);
+		printf("    At returned: %d\n",check[i][j]);
+		goto error;
+	    } /* end if */
+	} /* end for */
+    } /* end for */
+
+    /* Close dataset */
+    if(H5Dclose(dsid)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Re-open second dataset */
+    if ((dsid = H5Dopen(file, DSET_SET_LOCAL_NAME_2))<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't open dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Query the dataset's size on disk */
+    if((dset_size=H5Dget_storage_size(dsid))==0) {
+        H5_FAILED();
+        printf("    Line %d: Error querying dataset size\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Verify that the size indicates data is uncompressed */
+    if((H5Tget_size(H5T_NATIVE_DOUBLE)*dims[0]*dims[1])!=dset_size) {
+        H5_FAILED();
+        printf("    Line %d: Incorrect dataset size: %lu\n",__LINE__,(unsigned long)dset_size);
+        goto error;
+    } /* end if */
+
+    /* Read data */
+    if (H5Dread(dsid, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, check_dbl)<0) {
+        H5_FAILED();
+        printf("    Line %d: Error reading dataset data\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Compare data */
+    /* Check that the values read are the modified version of what was written */
+    for (i=0; i<dims[0]; i++) {
+	for (j=0; j<dims[1]; j++) {
+	    if (points_dbl[i][j] != check_dbl[i][j]) {
+		H5_FAILED();
+		printf("    Line %d: Read different values than written.\n",__LINE__);
+		printf("    At index %lu,%lu\n", (unsigned long)(i), (unsigned long)(j));
+		printf("    At original: %f\n",points_dbl[i][j]);
+		printf("    At returned: %f\n",check_dbl[i][j]);
+		goto error;
+	    } /* end if */
+	} /* end for */
+    } /* end for */
+
+    /* Close dataset */
+    if(H5Dclose(dsid)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close dataset\n",__LINE__);
+        goto error;
+    } /* end if */
+
+    /* Close file */
+    if (H5Fclose(file)<0) {
+        H5_FAILED();
+        printf("    Line %d: Can't close file\n",__LINE__);
+        goto error;
+    } /* end if */
+
+
+    PASSED();
+    return 0;
+
+error:
+    return -1;
+} /* end test_set_local() */
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_compare_dcpl
+ *
+ * Purpose:	Verifies that if the same DCPL was used to create two
+ *              datasets, the DCPLs retrieved from each dataset should
+ *              compare equal.
+ *
+ * Return:	Success:	0
+ *		Failure:	-1
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, January  7, 2004
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_compare_dcpl(hid_t file)
+{
+    hid_t       dsid=(-1);      /* Dataset ID */
+    hid_t       sid=(-1);       /* Dataspace ID */
+    hid_t       dcpl=(-1);      /* Dataspace creation property list ID */
+    hid_t       dcpl1=(-1),dcpl2=(-1);          /* Dataspace creation property list IDs from datasets */
+    const hsize_t dims[2] = {500, 4096};        /* Dataspace dimensions */
+    const hsize_t chunk_dims[2] = {250, 2048};  /* Chunk dimensions */
+
+    TESTING("comparing dataset creation property lists");
+
+    /* Create the data space */
+    if ((sid = H5Screate_simple(2, dims, NULL))<0) TEST_ERROR
+
+    /* Create dcpl with special filter */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR
+    if(H5Pset_chunk(dcpl, 2, chunk_dims)<0) TEST_ERROR
+
+    /* Set gzip parameter (if available) */
+#ifdef H5_HAVE_FILTER_DEFLATE
+    if(H5Pset_deflate (dcpl, 9)<0) TEST_ERROR
+#endif /* H5_HAVE_FILTER_DEFLATE */
+
+    /* Create first dataset */
+    if ((dsid = H5Dcreate(file, DSET_COMPARE_DCPL_NAME, H5T_NATIVE_INT, sid, dcpl)) <0) TEST_ERROR
+
+    /* Get copy of dataset's dataset creation property list */
+    if ((dcpl1=H5Dget_create_plist(dsid))<0) TEST_ERROR
+
+    /* Close dataset */
+    if(H5Dclose (dsid)<0) TEST_ERROR
+
+    /* Create second dataset */
+    if ((dsid = H5Dcreate(file, DSET_COMPARE_DCPL_NAME_2, H5T_NATIVE_INT, sid, dcpl)) <0) TEST_ERROR
+
+    /* Get copy of dataset's dataset creation property list */
+    if ((dcpl2=H5Dget_create_plist(dsid))<0) TEST_ERROR
+
+    /* Close dataset */
+    if(H5Dclose (dsid)<0) TEST_ERROR
+
+    /* Close dataspace */
+    if(H5Sclose(sid)<0) TEST_ERROR
+
+    /* Compare dataset creation property lists */
+    if(H5Pequal(dcpl1,dcpl2)<=0) TEST_ERROR
+
+    /* Close dataset creation property lists */
+    if(H5Pclose(dcpl)<0) TEST_ERROR
+    if(H5Pclose(dcpl1)<0) TEST_ERROR
+    if(H5Pclose(dcpl2)<0) TEST_ERROR
+
+
+    PASSED();
+
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Dclose(dsid);
+        H5Sclose(sid);
+        H5Pclose(dcpl);
+        H5Pclose(dcpl1);
+        H5Pclose(dcpl2);
+    } H5E_END_TRY;
+    return -1;
+} /* end test_compare_dcpl() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_filter_delete
+ *
+ * Purpose: Tests deletion of filters from a dataset creation property list
+ *
+ * Return: Success: 0
+ *  Failure: -1
+ *
+ * Programmer: Pedro Vicente
+ *              Monday, January 26, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_filter_delete(hid_t file)
+{
+    H5Z_filter_t filtn;                 /* filter identification number */
+    hid_t        dsid=-1;                  /* dataset ID */
+    hid_t        sid=-1;                   /* dataspace ID */
+    hid_t        dcpl=-1;                  /* dataset creation property list ID */
+    hid_t        dcpl1=-1;                 /* dataset creation property list ID */
+    hsize_t      dims[2]={20,20};       /* dataspace dimensions */
+    hsize_t      chunk_dims[2]={10,10}; /* chunk dimensions */
+    int          nfilters;              /* number of filters in DCPL */
+    herr_t       ret;                   /* generic return value */
+    int          i;
+
+    TESTING("filter deletion");
+
+#if defined H5_HAVE_FILTER_DEFLATE && defined H5_HAVE_FILTER_SHUFFLE && defined H5_HAVE_FILTER_FLETCHER32
+    /* create the data space */
+    if ((sid = H5Screate_simple(2, dims, NULL))<0) goto error;
+
+    /* create dcpl  */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if(H5Pset_chunk(dcpl, 2, chunk_dims)<0) goto error;
+
+    if (H5Pset_fletcher32 (dcpl)<0) goto error;
+    if (H5Pset_deflate (dcpl, 6)<0) goto error;
+    if (H5Pset_shuffle (dcpl)<0) goto error;
+
+    /* create a dataset */
+    if ((dsid = H5Dcreate(file,"dsetdel", H5T_NATIVE_INT, sid, dcpl)) <0) goto error;
+
+    /* get copy of dataset's dataset creation property list */
+    if ((dcpl1=H5Dget_create_plist(dsid))<0) goto error;
+
+   /*----------------------------------------------------------------------
+    * delete the deflate filter
+    *----------------------------------------------------------------------
+    */
+    /* delete the deflate filter */
+    if (H5Premove_filter(dcpl1,H5Z_FILTER_DEFLATE)<0) goto error;
+
+    /* get information about filters */
+    if ((nfilters = H5Pget_nfilters(dcpl1))<0) goto error;
+
+    /* check if filter was deleted */
+    for (i=0; i<nfilters; i++) {
+        filtn = H5Pget_filter(dcpl1,(unsigned)i,0,0,0,0,0);
+        if (H5Z_FILTER_DEFLATE==filtn)
+            goto error;
+    }
+
+    /* try to delete the deflate filter again */
+    H5E_BEGIN_TRY {
+        ret=H5Premove_filter(dcpl1,H5Z_FILTER_DEFLATE);
+    } H5E_END_TRY;
+    if (ret >=0) {
+        H5_FAILED();
+        printf("    Line %d: Shouldn't have deleted filter!\n",__LINE__);
+        goto error;
+    } /* end if */
+
+   /*----------------------------------------------------------------------
+    * delete all filters
+    *----------------------------------------------------------------------
+    */
+    /* delete all filters */
+    if (H5Premove_filter(dcpl1,H5Z_FILTER_ALL)<0) goto error;
+
+    /* get information about filters */
+    if ((nfilters = H5Pget_nfilters(dcpl1))<0) goto error;
+
+    /* check if filters were deleted */
+    if (nfilters)goto error;
+
+   /*----------------------------------------------------------------------
+    * close
+    *----------------------------------------------------------------------
+    */
+
+    /* clean up objects used for this test */
+    if (H5Pclose (dcpl)<0) goto error;
+    if (H5Pclose (dcpl1)<0) goto error;
+    if (H5Dclose (dsid)<0) goto error;
+    if (H5Sclose (sid)<0) goto error;
+
+    PASSED();
+#else
+    SKIPPED();
+#endif
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Pclose(dcpl);
+        H5Pclose(dcpl1);
+        H5Dclose(dsid);
+        H5Sclose(sid);
+    } H5E_END_TRY;
+    return -1;
+} /* end test_filter_delete() */
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: auxread_fdata
+ *
+ * Purpose: reads a dataset "NAME" from FID
+ *
+ * Return: Success: 0
+ *  Failure: -1
+ *
+ * Programmer: Pedro Vicente
+ *              Monday, March 8, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+auxread_fdata(hid_t fid, const char *name)
+{
+ hid_t     dset_id=-1;           /* dataset ID */
+ hid_t     dcpl_id=-1;           /* dataset creation property list ID */
+ hid_t     space_id=-1;          /* space ID */
+ hid_t     ftype_id=-1;          /* file data type ID */
+ hid_t     mtype_id=-1;          /* memory data type ID */
+ size_t    msize;             /* memory size of memory type */
+ void      *buf=NULL;         /* data buffer */
+ hsize_t   nelmts;            /* number of elements in dataset */
+ int       rank;              /* rank of dataset */
+ hsize_t   dims[H5S_MAX_RANK];/* dimensions of dataset */
+ int       i;
+
+ if ((dset_id=H5Dopen(fid,name))<0)
+  goto error;
+ if ((space_id=H5Dget_space(dset_id))<0)
+  goto error;
+ if ((ftype_id=H5Dget_type (dset_id))<0)
+  goto error;
+ if ((dcpl_id=H5Dget_create_plist(dset_id))<0)
+  goto error;
+ if ( (rank=H5Sget_simple_extent_ndims(space_id))<0)
+  goto error;
+ HDmemset(dims, 0, sizeof dims);
+ if ( H5Sget_simple_extent_dims(space_id,dims,NULL)<0)
+  goto error;
+ nelmts=1;
+ for (i=0; i<rank; i++)
+  nelmts*=dims[i];
+ if ((mtype_id=H5Tget_native_type(ftype_id,H5T_DIR_DEFAULT))<0)
+  goto error;
+ if ((msize=H5Tget_size(mtype_id))==0)
+  goto error;
+
+ if (nelmts)
+ {
+  buf=(void *) HDmalloc((unsigned)(nelmts*msize));
+  if ( buf==NULL){
+   printf( "cannot read into memory\n" );
+   goto error;
+  }
+  if (H5Dread(dset_id,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0)
+   goto error;
+ }
+
+ if (H5Pclose(dcpl_id)<0)
+  goto error;
+ if (H5Sclose(space_id)<0)
+  goto error;
+ if (H5Dclose(dset_id)<0)
+  goto error;
+ if (buf)
+  free(buf);
+
+ return 0;
+
+error:
+ H5E_BEGIN_TRY {
+  H5Pclose(dcpl_id);
+  H5Sclose(space_id);
+  H5Dclose(dset_id);
+  H5Tclose(ftype_id);
+  H5Tclose(mtype_id);
+  if (buf)
+   free(buf);
+ } H5E_END_TRY;
+ return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_filters_endianess
+ *
+ * Purpose: Reads/writes data with filters (big-endian/little-endian data)
+ *
+ * Return: Success: 0
+ *  Failure: -1
+ *
+ * Programmer: Pedro Vicente
+ *              Monday, March 8, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_filters_endianess(void)
+{
+    hid_t     fid=-1;                   /* file ID */
+    hid_t     dsid=-1;                  /* dataset ID */
+    hid_t     sid=-1;                   /* dataspace ID */
+    hid_t     dcpl=-1;                  /* dataset creation property list ID */
+    hsize_t   dims[1]={2};           /* dataspace dimensions */
+    hsize_t   chunk_dims[1]={2};     /* chunk dimensions */
+    int       buf[2];
+    int       rank=1;
+    int       i;
+    char      *srcdir = getenv("srcdir"); /* the source directory */
+    char      data_file[512]="";          /* buffer to hold name of existing file */
+
+    for (i=0; i<2; i++){
+     buf[i]=1;
+    }
+
+    TESTING("filters with big-endian/little-endian data");
+
+#if defined H5_HAVE_FILTER_FLETCHER32
+   /*-------------------------------------------------------------------------
+    * step1: create a file
+    *-------------------------------------------------------------------------
+    */
+    /* create a file using default properties */
+    fid=H5Fcreate("test_filters.h5",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);
+
+    /* create a data space */
+    if ((sid = H5Screate_simple(rank,dims,NULL))<0) goto error;
+
+    /* create dcpl  */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if(H5Pset_chunk(dcpl,rank,chunk_dims)<0) goto error;
+
+    if (H5Pset_fletcher32 (dcpl)<0) goto error;
+
+    /* create a dataset */
+    if ((dsid = H5Dcreate(fid,"dset",H5T_NATIVE_INT,sid,dcpl)) <0) goto error;
+
+    if(H5Dwrite(dsid,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0)
+     goto error;
+
+    /* close */
+    if (H5Pclose (dcpl)<0) goto error;
+    if (H5Dclose (dsid)<0) goto error;
+    if (H5Sclose (sid)<0) goto error;
+    if (H5Fclose (fid)<0) goto error;
+
+   /*-------------------------------------------------------------------------
+    * step 2: open a file written on a little-endian machine in step 1
+    *-------------------------------------------------------------------------
+    */
+
+    /* compose the name of the file to open, using the srcdir, if appropriate */
+    strcpy(data_file, "");
+    if ( srcdir )
+    {
+     strcpy(data_file, srcdir);
+     strcat(data_file, "/");
+    }
+	   strcat( data_file, "test_filters_le.hdf5");
+
+    /* open */
+    if ((fid=H5Fopen(data_file,H5F_ACC_RDONLY,H5P_DEFAULT))<0)
+     goto error;
+
+    /* read */
+    if (auxread_fdata(fid,"dset")<0) goto error;
+
+    /* close */
+    if (H5Fclose(fid)<0) goto error;
+
+   /*-------------------------------------------------------------------------
+    * step 3: open a file written on a big-endian machine in step 1
+    *-------------------------------------------------------------------------
+    */
+
+    /* compose the name of the file to open, using the srcdir, if appropriate */
+    strcpy(data_file, "");
+    if ( srcdir )
+    {
+     strcpy(data_file, srcdir);
+     strcat(data_file, "/");
+    }
+	   strcat( data_file, "test_filters_be.hdf5");
+
+    /* open */
+    if ((fid=H5Fopen(data_file,H5F_ACC_RDONLY,H5P_DEFAULT))<0)
+     goto error;
+
+    /* read */
+    if (auxread_fdata(fid,"dset")<0) goto error;
+
+    /* close */
+    if (H5Fclose(fid)<0) goto error;
+
+    PASSED();
+#else
+    SKIPPED();
+#endif
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Pclose(dcpl);
+        H5Dclose(dsid);
+        H5Sclose(sid);
+        H5Fclose(fid);
+    } H5E_END_TRY;
+    return -1;
+} /* end test_filters_endianess() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_zero_dims
+ *
+ * Purpose: Tests read/writes to zero-sized extendible datasets
+ *
+ * Return: Success: 0
+ *  Failure: -1
+ *
+ * Programmer: Quincey Koziol
+ *              Tuesday, July 27, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_zero_dims(hid_t file)
+{
+    hid_t       s=-1, d=-1, dcpl=-1;
+    hsize_t     dsize=0, dmax=H5S_UNLIMITED, csize=5;
+
+    TESTING("I/O on datasets with zero-sized dims");
+
+    if((s = H5Screate_simple(1, &dsize, &dmax))<0) TEST_ERROR;
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR;
+    if(H5Pset_chunk(dcpl, 1, &csize)<0) TEST_ERROR;
+    if((d = H5Dcreate(file, ZERODIM_DATASET, H5T_NATIVE_INT, s, dcpl))<0) TEST_ERROR;
+
+    if(H5Dwrite(d, H5T_NATIVE_INT, s, s, H5P_DEFAULT, (void*)911)<0) TEST_ERROR;
+
+    if(H5Pclose(dcpl)<0) TEST_ERROR;
+    if(H5Sclose(s)<0) TEST_ERROR;
+    if(H5Dclose(d)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Pclose(dcpl);
+        H5Dclose(d);
+        H5Sclose(s);
+    } H5E_END_TRY;
+    return -1;
+} /* end test_zero_dims() */
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_missing_chunk
+ *
+ * Purpose: Tests that reads from chunked dataset with undefined fill value and
+ *              not all chunks written don't overwrite data in user's buffer
+ *              for missing chunks.
+ *
+ * Return: Success: 0
+ *  Failure: -1
+ *
+ * Programmer: Quincey Koziol
+ *              Tuesday, August 25, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_missing_chunk(hid_t file)
+{
+    hid_t       s=-1, d=-1, dcpl=-1;
+    hsize_t	hs_start[1];
+    hsize_t	hs_stride[1],
+                hs_count[1],
+                hs_block[1];
+    int         wdata[MISSING_CHUNK_DIM],
+                rdata[MISSING_CHUNK_DIM];
+    hsize_t     dsize=100, dmax=H5S_UNLIMITED, csize=5;
+    size_t      u;
+
+    TESTING("Read dataset with unwritten chunk & undefined fill value");
+
+    /* Initialize data */
+    for(u=0; u<MISSING_CHUNK_DIM; u++) {
+        wdata[u]=u;
+        rdata[u]=911;
+    } /* end for */
+
+    /* Create dataspace */
+    if((s = H5Screate_simple(1, &dsize, &dmax))<0) TEST_ERROR;
+
+    /* Create dataset creation property list */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR;
+
+    /* Set to chunked */
+    if(H5Pset_chunk(dcpl, 1, &csize)<0) TEST_ERROR;
+
+    /* Undefine fill value */
+    if(H5Pset_fill_value(dcpl, H5T_NATIVE_INT, NULL)<0) TEST_ERROR;
+
+    /* Create dataset */
+    if((d = H5Dcreate(file, MISSING_CHUNK_DATASET, H5T_NATIVE_INT, s, dcpl))<0) TEST_ERROR;
+
+    /* Select elements in every other chunk */
+    hs_start[0]=0;
+    hs_stride[0]=10;
+    hs_count[0]=10;
+    hs_block[0]=5;
+    if (H5Sselect_hyperslab(s, H5S_SELECT_SET, hs_start, hs_stride, hs_count,
+			    hs_block)<0) TEST_ERROR;
+
+    /* Write selected data */
+    if(H5Dwrite(d, H5T_NATIVE_INT, s, s, H5P_DEFAULT, wdata)<0) TEST_ERROR;
+
+    /* Read all data */
+    if(H5Dread(d, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata)<0) TEST_ERROR;
+
+    /* Validata values read */
+    for(u=0; u<MISSING_CHUNK_DIM; u++) {
+        if((u%10)>=5) {
+            if(rdata[u]!=911) {
+                printf("    Line %d: Incorrect value, rdata[%u]=%d\n",__LINE__,(unsigned)u,rdata[u]);
+                TEST_ERROR;
+            } /* end if */
+        } /* end if */
+        else {
+            if(rdata[u]!=wdata[u]) {
+                printf("    Line %d: Incorrect value, wdata[%u]=%d, rdata[%u]=%d\n",__LINE__,(unsigned)u,wdata[u],(unsigned)u,rdata[u]);
+                TEST_ERROR;
+            } /* end if */
+        } /* end else */
+    } /* end for */
+
+    /* Close everything */
+    if(H5Pclose(dcpl)<0) TEST_ERROR;
+    if(H5Sclose(s)<0) TEST_ERROR;
+    if(H5Dclose(d)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Pclose(dcpl);
+        H5Dclose(d);
+        H5Sclose(s);
+    } H5E_END_TRY;
+    return -1;
+} /* end test_zero_dims() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Tests the dataset interface (H5D)
+ *
+ * Return:	Success:	exit(0)
+ *
+ *		Failure:	exit(1)
+ *
+ * Programmer:	Robb Matzke
+ *		Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    hid_t		file, grp, fapl;
+    int mdc_nelmts;
+    size_t rdcc_nelmts;
+    size_t rdcc_nbytes;
+    double rdcc_w0;
+    int			nerrors=0;
+    char		filename[1024];
+
+    h5_reset();
+    fapl = h5_fileaccess();
+
+    /* Set the random # seed */
+    HDsrandom((unsigned long)HDtime(NULL));
+
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+
+    /* Turn off the chunk cache, so all the chunks are immediately written to disk */
+    if(H5Pget_cache(fapl, &mdc_nelmts, &rdcc_nelmts, &rdcc_nbytes, &rdcc_w0)<0) goto error;
+    rdcc_nbytes=0;
+    if(H5Pset_cache(fapl, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, rdcc_w0)<0) goto error;
+
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) {
+	goto error;
+    }
+
+    /* Cause the library to emit initial messages */
+    if ((grp = H5Gcreate (file, "emit diagnostics", 0))<0) goto error;
+    if (H5Gset_comment(grp, ".", "Causes diagnostic messages to be emitted")<0)
+	goto error;
+    if (H5Gclose (grp)<0) goto error;
+
+    nerrors += test_create(file)<0 	?1:0;
+    nerrors += test_simple_io(fapl)<0	?1:0;
+    nerrors += test_compact_io(fapl)<0  ?1:0;
+    nerrors += test_max_compact(fapl)<0  ?1:0;
+    nerrors += test_conv_buffer(file)<0	?1:0;
+    nerrors += test_tconv(file)<0	?1:0;
+    nerrors += test_filters(file)<0	?1:0;
+    nerrors += test_onebyte_shuffle(file)<0 ?1:0;
+    nerrors += test_multiopen (file)<0	?1:0;
+    nerrors += test_types(file)<0       ?1:0;
+    nerrors += test_userblock_offset(fapl)<0     ?1:0;
+    nerrors += test_missing_filter(file)<0	?1:0;
+#ifndef H5_WANT_H5_V1_4_COMPAT
+    nerrors += test_can_apply(file)<0	?1:0;
+    nerrors += test_set_local(fapl)<0	?1:0;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    nerrors += test_can_apply_szip(file)<0	?1:0;
+    nerrors += test_compare_dcpl(file)<0	?1:0;
+    nerrors += test_filter_delete(file)<0	?1:0;
+    nerrors += test_filters_endianess()<0	?1:0;
+    nerrors += test_zero_dims(file)<0	?1:0;
+    nerrors += test_missing_chunk(file)<0	?1:0;
+
+    if (H5Fclose(file)<0) goto error;
+    if (nerrors) goto error;
+    printf("All dataset tests passed.\n");
+    h5_cleanup(FILENAME, fapl);
+    return 0;
+
+ error:
+    nerrors = MAX(1, nerrors);
+    printf("***** %d DATASET TEST%s FAILED! *****\n",
+	   nerrors, 1 == nerrors ? "" : "S");
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/test/dtypes.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/dtypes.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/dtypes.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,6243 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Tuesday, December  9, 1997
+ *
+ * Purpose:     Tests the data type interface (H5T)
+ */
+
+#include <math.h>
+#include <time.h>
+#include "h5test.h"
+
+/* Number of times to run each test */
+#define NTESTS	1
+
+/* Number of elements in each test */
+#define NTESTELEM	100000
+
+/* For test_compound_10 */
+#define ARRAY_DIM       4
+
+/* Define if you want to see a count of overflows */
+#undef SHOW_OVERFLOWS
+
+/* Epsilon for floating-point comparisons */
+#define FP_EPSILON 0.000001
+
+/*
+ * Offset from alinged memory returned by malloc().  This can be used to test
+ * that type conversions handle non-aligned buffers correctly.
+ */
+#define ALIGNMENT	1
+
+/*
+ * Define if you want to test alignment code on a machine that doesn't
+ * normally require alignment. When set, all native data types must be aligned
+ * on a byte boundary equal to the data size.
+ */
+#define TEST_ALIGNMENT
+
+/* Alignment test stuff */
+#ifdef TEST_ALIGNMENT
+#define H5T_PACKAGE
+#include "H5Tpkg.h"
+#endif
+#define SET_ALIGNMENT(TYPE,VAL) \
+    H5T_NATIVE_##TYPE##_ALIGN_g=MAX(H5T_NATIVE_##TYPE##_ALIGN_g, VAL)
+
+const char *FILENAME[] = {
+    "dtypes1",
+    "dtypes2",
+    "dtypes3",
+    "dtypes4",
+    "dtypes5",
+    "dtypes6",
+    "dtypes7",
+    NULL
+};
+
+typedef struct complex_t {
+    double                  re;
+    double                  im;
+} complex_t;
+
+/*
+ * Count up or down depending on whether the machine is big endian or little
+ * endian.  If local variable `endian' is H5T_ORDER_BE then the result will
+ * be I, otherwise the result will be Z-(I+1).
+ */
+#define ENDIAN(Z,I)	(H5T_ORDER_BE==endian?(I):(Z)-((I)+1))
+
+
+typedef enum flt_t {
+    FLT_FLOAT, FLT_DOUBLE, FLT_LDOUBLE, FLT_OTHER
+} flt_t;
+
+typedef enum int_t {
+    INT_CHAR, INT_UCHAR, INT_SHORT, INT_USHORT, INT_INT, INT_UINT,
+    INT_LONG, INT_ULONG, INT_LLONG, INT_ULLONG, INT_OTHER
+} int_t;
+
+/* Count the number of overflows */
+#ifdef SHOW_OVERFLOWS
+static int noverflows_g = 0;
+#endif
+
+/* Skip overflow tests if non-zero */
+static int skip_overflow_tests_g = 0;
+
+/* Don't use hardware conversions if set */
+static int without_hardware_g = 0;
+
+/* Count opaque conversions */
+static int num_opaque_conversions_g = 0;
+
+/*
+ * Although we check whether a floating point overflow generates a SIGFPE and
+ * turn off overflow tests in that case, it might still be possible for an
+ * overflow condition to occur.  Once a SIGFPE is raised the program cannot
+ * be allowed to continue (cf. Posix signals) so in order to recover from a
+ * SIGFPE we run tests that might generate one in a child process.
+ */
+#if defined(H5_HAVE_FORK) && defined(H5_HAVE_WAITPID)
+#   define HANDLE_SIGFPE
+#endif
+
+/* Allocates memory aligned on a certain boundary. */
+#define aligned_malloc(Z)	((void*)((char*)HDmalloc(ALIGNMENT+Z)+ALIGNMENT))
+#define aligned_free(M)		HDfree((char*)(M)-ALIGNMENT)
+
+void some_dummy_func(float x);
+static int my_isnan(flt_t type, void *val);
+static int opaque_check(int tag_it);
+static herr_t convert_opaque(hid_t UNUSED st, hid_t UNUSED dt,
+               H5T_cdata_t *cdata,
+	       size_t UNUSED nelmts, size_t UNUSED buf_stride,
+               size_t UNUSED bkg_stride, void UNUSED *_buf,
+	       void UNUSED *bkg, hid_t UNUSED dset_xfer_plid);
+static int opaque_long(void);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	fpe_handler
+ *
+ * Purpose:	Exit with 255
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, July  6, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+fpe_handler(int UNUSED signo)
+{
+    SKIPPED();
+    HDputs("    Test skipped due to SIGFPE.");
+#ifndef HANDLE_SIGFPE
+    HDputs("    Remaining tests could not be run.");
+    HDputs("    Please turn off SIGFPE on overflows and try again.");
+#endif
+    HDexit(255);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	overflow_handler
+ *
+ * Purpose:	Gets called for all data type conversion overflows.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, July  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifdef SHOW_OVERFLOWS
+static herr_t
+overflow_handler(hid_t UNUSED src_id, hid_t UNUSED dst_id,
+		 void UNUSED *src_buf, void UNUSED *dst_buf)
+{
+    noverflows_g++;
+    return -1;
+}
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * Function:	some_dummy_func
+ *
+ * Purpose:	A dummy function to help check for overflow.
+ *
+ * Note:	DO NOT DECLARE THIS FUNCTION STATIC OR THE COMPILER MIGHT
+ *		PROMOTE ARGUMENT `x' TO DOUBLE AND DEFEAT THE OVERFLOW
+ *		CHECKING.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, July 21, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+some_dummy_func(float x)
+{
+    char	s[128];
+    sprintf(s, "%g", x);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	generates_sigfpe
+ *
+ * Purpose:	Determines if SIGFPE is generated from overflows.  We must be
+ *		able to fork() and waitpid() in order for this test to work
+ *		properly.  Sets skip_overflow_tests_g to non-zero if they
+ *		would generate SIGBUS, zero otherwise.
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, July 21, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+generates_sigfpe(void)
+{
+#if defined(H5_HAVE_FORK) && defined(H5_HAVE_WAITPID)
+    pid_t	pid;
+    int		status;
+    size_t	i, j;
+    double	d;
+    unsigned char *dp = (unsigned char*)&d;
+    float	f;
+
+    HDfflush(stdout);
+    HDfflush(stderr);
+    if ((pid=fork())<0) {
+	HDperror("fork");
+	HDexit(1);
+    } else if (0==pid) {
+	for (i=0; i<2000; i++) {
+	    for (j=0; j<sizeof(double); j++) dp[j] = HDrand();
+	    f = (float)d;
+	    some_dummy_func((float)f);
+	}
+	HDexit(0);
+    }
+
+    while (pid!=waitpid(pid, &status, 0))
+        /*void*/;
+    if (WIFEXITED(status) && 0==WEXITSTATUS(status)) {
+	HDputs("Floating-point overflow cases will be tested.");
+	skip_overflow_tests_g = FALSE;
+    } else if (WIFSIGNALED(status) && SIGFPE==WTERMSIG(status)) {
+	HDputs("Floating-point overflow cases cannot be safely tested.");
+	skip_overflow_tests_g = TRUE;
+	/* delete the core dump file that SIGFPE may have created */
+	HDunlink("core");
+    }
+#else
+    HDputs("Cannot determine if floating-point overflows generate a SIGFPE;");
+    HDputs("assuming yes.");
+    HDputs("Overflow cases will not be tested.");
+    skip_overflow_tests_g = TRUE;
+#endif
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	reset_hdf5
+ *
+ * Purpose:	Reset the hdf5 library.  This causes statistics to be printed
+ *		and counters to be reset.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+reset_hdf5(void)
+{
+    h5_reset();
+#ifdef SHOW_OVERFLOWS
+    H5Tset_overflow(overflow_handler);
+#endif
+    if (without_hardware_g) h5_no_hwconv();
+#ifdef TEST_ALIGNMENT
+    SET_ALIGNMENT(SCHAR,   H5_SIZEOF_CHAR);
+    SET_ALIGNMENT(UCHAR,   H5_SIZEOF_CHAR);
+    SET_ALIGNMENT(SHORT,   H5_SIZEOF_SHORT);
+    SET_ALIGNMENT(USHORT,  H5_SIZEOF_SHORT);
+    SET_ALIGNMENT(INT,     H5_SIZEOF_INT);
+    SET_ALIGNMENT(UINT,    H5_SIZEOF_INT);
+    SET_ALIGNMENT(LONG,    H5_SIZEOF_LONG);
+    SET_ALIGNMENT(ULONG,   H5_SIZEOF_LONG);
+    SET_ALIGNMENT(LLONG,   H5_SIZEOF_LONG_LONG);
+    SET_ALIGNMENT(ULLONG,  H5_SIZEOF_LONG_LONG);
+    SET_ALIGNMENT(FLOAT,   H5_SIZEOF_FLOAT);
+    SET_ALIGNMENT(DOUBLE,  H5_SIZEOF_DOUBLE);
+    SET_ALIGNMENT(LDOUBLE, H5_SIZEOF_LONG_DOUBLE);
+#endif
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_classes
+ *
+ * Purpose:     Test type classes
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Robb Matzke
+ *              Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_classes(void)
+{
+    struct complex {    /* Struct with complex fields */
+        hvl_t vl_c;
+        hvl_t vl_s;
+    };
+    hid_t cmpd_id;      /* Compound datatype */
+    hid_t vlc_id;       /* VL type of char   */
+    hid_t vls_id;       /* VL string         */
+    hid_t memb_id;      /* Compound member datatype */
+    H5T_class_t         memb_cls;
+    H5T_class_t         tcls;
+    unsigned int        nmembs, i;
+
+    TESTING("H5Tget_class()");
+
+    /*-------------------------------------------------------------
+     *  Check class of some atomic types.
+     *-----------------------------------------------------------*/
+    if ((tcls=H5Tget_class(H5T_NATIVE_INT))<0) TEST_ERROR
+    if (H5T_INTEGER!=tcls) TEST_ERROR
+
+    if ((tcls=H5Tget_class(H5T_NATIVE_DOUBLE))<0) TEST_ERROR
+    if (H5T_FLOAT!=tcls) TEST_ERROR
+
+    /* Create a VL datatype of char.  It should be a VL, not a string class. */
+    if((vlc_id=H5Tvlen_create(H5T_NATIVE_CHAR))<0) TEST_ERROR
+
+    /* Make certain that the correct classes can be detected */
+    if ((tcls=H5Tget_class(vlc_id))<0) TEST_ERROR
+    if (H5T_VLEN!=tcls) TEST_ERROR
+
+    /* Make certain that an incorrect class is not detected */
+    if (H5T_STRING==tcls) TEST_ERROR
+
+    /* Create a VL string.  It should be a string, not a VL class. */
+    if((vls_id=H5Tcopy(H5T_C_S1))<0) TEST_ERROR
+    if(H5Tset_size(vls_id, H5T_VARIABLE)<0) TEST_ERROR;
+
+    /* Make certain that the correct classes can be detected */
+    if ((tcls=H5Tget_class(vls_id))<0) TEST_ERROR
+    if (H5T_STRING!=tcls) TEST_ERROR
+
+    /* Make certain that an incorrect class is not detected */
+    if (H5T_VLEN==tcls) TEST_ERROR
+
+    /*-------------------------------------------------------------
+     *  Check class for member types of compound type.
+     *-----------------------------------------------------------*/
+    /* Create a compound datatype and insert some complex types */
+    if ((cmpd_id = H5Tcreate(H5T_COMPOUND, sizeof(struct complex)))<0) TEST_ERROR
+    if (H5Tinsert(cmpd_id, "vl_c", HOFFSET(struct complex, vl_c), vlc_id)<0) TEST_ERROR
+    if (H5Tinsert(cmpd_id, "vl_s", HOFFSET(struct complex, vl_s), vls_id)<0) TEST_ERROR
+
+    nmembs = H5Tget_nmembers(cmpd_id);
+
+    for (i=0;i<nmembs;i++)
+    {
+        /* Get member type ID */
+        if((memb_id = H5Tget_member_type(cmpd_id, i))<0) TEST_ERROR
+
+        /* Get member type class */
+        if((memb_cls = H5Tget_member_class (cmpd_id, i))<0) TEST_ERROR
+
+        /* Verify member class */
+        if(H5Tdetect_class (memb_id, memb_cls)<0) TEST_ERROR
+
+        /* Close member type ID */
+        if(H5Tclose(memb_id)<0) TEST_ERROR
+    }
+
+    /* Close datatypes */
+    if(H5Tclose(cmpd_id)<0) TEST_ERROR
+    if(H5Tclose(vlc_id)<0) TEST_ERROR
+    if(H5Tclose(vls_id)<0) TEST_ERROR
+
+    PASSED();
+    return 0;
+
+  error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_copy
+ *
+ * Purpose:     Are we able to copy a data type?
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Robb Matzke
+ *              Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_copy(void)
+{
+    hid_t               a_copy;
+    herr_t		status;
+
+    TESTING("H5Tcopy()");
+
+    if ((a_copy = H5Tcopy(H5T_NATIVE_SHORT)) < 0) goto error;
+    if (H5Tclose(a_copy) < 0) goto error;
+
+    /* We should not be able to close a built-in byte */
+    H5E_BEGIN_TRY {
+	status = H5Tclose (H5T_NATIVE_SCHAR);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	HDputs ("    Should not be able to close a predefined type!");
+	goto error;
+    }
+
+    PASSED();
+    return 0;
+
+  error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_detect
+ *
+ * Purpose:     Are we able to detect datatype classes correctly?  (Especially
+ *              in nested types)
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Quincey Koziol
+ *              Saturday, August 30, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_detect(void)
+{
+    struct atomic {     /* Struct with atomic fields */
+        int i;
+        float f;
+        char c;
+        double d;
+        short s;
+    };
+    struct complex {    /* Struct with complex fields */
+        hobj_ref_t arr_r[3][3];
+        int i;
+        hvl_t vl_f;
+        char c;
+        short s;
+    };
+    hid_t atom_cmpd_id; /* Atomic Compound datatype */
+    hid_t atom_arr_id;  /* Atomic Array datatype */
+    hid_t atom_vlf_id;  /* Atomic VL datatype of float */
+    hid_t atom_vlc_id;  /* Atomic VL datatype of char */
+    hid_t atom_vls_id;       /* Atomic VL string datatype */
+    hid_t cplx_cmpd_id; /* Complex Compound datatype */
+    int rank=2;         /* Rank for array datatype */
+    hsize_t dims[2]={3,3};      /* Dimensions for array datatype */
+
+    TESTING("H5Tdetect_class()");
+
+    /*--------------------------------------------------------------------------------
+     *  Test class of some atomic types.
+     *------------------------------------------------------------------------------*/
+    /* Native integers should be in the integer class */
+    if(H5Tdetect_class(H5T_NATIVE_INT,H5T_INTEGER)!=TRUE) TEST_ERROR
+
+    /* Native integers should _not_ be in other classes */
+    if(H5Tdetect_class(H5T_NATIVE_INT,H5T_FLOAT)!=FALSE) TEST_ERROR
+    if(H5Tdetect_class(H5T_NATIVE_INT,H5T_ARRAY)!=FALSE) TEST_ERROR
+    if(H5Tdetect_class(H5T_NATIVE_INT,H5T_ENUM)!=FALSE) TEST_ERROR
+
+    /*--------------------------------------------------------------------------------
+     *  Test class of a compound type with some atomic types as fields.
+     *------------------------------------------------------------------------------*/
+    /* Create a compound datatype and insert some atomic types */
+    if ((atom_cmpd_id = H5Tcreate(H5T_COMPOUND, sizeof(struct atomic)))<0) TEST_ERROR
+    if (H5Tinsert(atom_cmpd_id, "i", HOFFSET(struct atomic, i), H5T_NATIVE_INT)<0) TEST_ERROR
+    if (H5Tinsert(atom_cmpd_id, "f", HOFFSET(struct atomic, f), H5T_NATIVE_FLOAT)<0) TEST_ERROR
+    if (H5Tinsert(atom_cmpd_id, "c", HOFFSET(struct atomic, c), H5T_NATIVE_CHAR)<0) TEST_ERROR
+    if (H5Tinsert(atom_cmpd_id, "d", HOFFSET(struct atomic, d), H5T_NATIVE_DOUBLE)<0) TEST_ERROR
+    if (H5Tinsert(atom_cmpd_id, "s", HOFFSET(struct atomic, s), H5T_NATIVE_SHORT)<0) TEST_ERROR
+
+    /* Make certain that the correct classes can be detected */
+    if(H5Tdetect_class(atom_cmpd_id,H5T_COMPOUND)!=TRUE) TEST_ERROR
+    if(H5Tdetect_class(atom_cmpd_id,H5T_INTEGER)!=TRUE) TEST_ERROR
+    if(H5Tdetect_class(atom_cmpd_id,H5T_FLOAT)!=TRUE) TEST_ERROR
+
+    /* Make certain that an incorrect class is not detected */
+    if(H5Tdetect_class(atom_cmpd_id,H5T_VLEN)!=FALSE) TEST_ERROR
+
+    /*--------------------------------------------------------------------------------
+     *  Test class of some complex types.
+     *------------------------------------------------------------------------------*/
+    /* Create an array datatype with an atomic base type */
+    if((atom_arr_id=H5Tarray_create(H5T_STD_REF_OBJ, rank, dims, NULL))<0) TEST_ERROR
+
+    /* Make certain that the correct classes can be detected */
+    if(H5Tdetect_class(atom_arr_id,H5T_ARRAY)!=TRUE) TEST_ERROR
+    if(H5Tdetect_class(atom_arr_id,H5T_REFERENCE)!=TRUE) TEST_ERROR
+
+    /* Make certain that an incorrect class is not detected */
+    if(H5Tdetect_class(atom_arr_id,H5T_VLEN)!=FALSE) TEST_ERROR
+    if(H5Tdetect_class(atom_arr_id,H5T_FLOAT)!=FALSE) TEST_ERROR
+    if(H5Tdetect_class(atom_arr_id,H5T_INTEGER)!=FALSE) TEST_ERROR
+
+    /* Create a VL datatype with an atomic base type of float*/
+    if((atom_vlf_id=H5Tvlen_create(H5T_NATIVE_FLOAT))<0) TEST_ERROR
+
+    /* Make certain that the correct classes can be detected */
+    if(H5Tdetect_class(atom_vlf_id,H5T_VLEN)!=TRUE) TEST_ERROR
+    if(H5Tdetect_class(atom_vlf_id,H5T_FLOAT)!=TRUE) TEST_ERROR
+
+    /* Make certain that an incorrect class is not detected */
+    if(H5Tdetect_class(atom_vlf_id,H5T_COMPOUND)!=FALSE) TEST_ERROR
+    if(H5Tdetect_class(atom_vlf_id,H5T_INTEGER)!=FALSE) TEST_ERROR
+
+    /* Create a VL datatype with an atomic base type of char.  It should be a VL
+     * but not a string class. */
+    if((atom_vlc_id=H5Tvlen_create(H5T_NATIVE_CHAR))<0) TEST_ERROR
+
+    /* Make certain that the correct classes can be detected */
+    if(H5Tdetect_class(atom_vlc_id,H5T_VLEN)!=TRUE) TEST_ERROR
+    if(H5Tdetect_class(atom_vlc_id,H5T_INTEGER)!=TRUE) TEST_ERROR
+
+    /* Make certain that an incorrect class is not detected */
+    if(H5Tdetect_class(atom_vlc_id,H5T_STRING)!=FALSE) TEST_ERROR
+
+    /* Create a VL string.  It should be a string, not a VL class. */
+    if((atom_vls_id=H5Tcopy(H5T_C_S1))<0) TEST_ERROR
+    if(H5Tset_size(atom_vls_id, H5T_VARIABLE)<0) TEST_ERROR;
+
+    /* Make certain that the correct classes can be detected */
+    if(H5Tdetect_class(atom_vls_id,H5T_STRING)!=TRUE) TEST_ERROR
+
+    /* Make certain that an incorrect class is not detected */
+    if(H5Tdetect_class(atom_vls_id,H5T_VLEN)!=FALSE) TEST_ERROR
+
+    /*--------------------------------------------------------------------------------
+     *  Test class of a compound type with some complex types as fields.
+     *------------------------------------------------------------------------------*/
+    /* Create a compound datatype and insert some complex types */
+    if ((cplx_cmpd_id = H5Tcreate(H5T_COMPOUND, sizeof(struct complex)))<0) TEST_ERROR
+    if (H5Tinsert(cplx_cmpd_id, "arr_r", HOFFSET(struct complex, arr_r), atom_arr_id)<0) TEST_ERROR
+    if (H5Tinsert(cplx_cmpd_id, "i", HOFFSET(struct complex, i), H5T_NATIVE_INT)<0) TEST_ERROR
+    if (H5Tinsert(cplx_cmpd_id, "vl_f", HOFFSET(struct complex, vl_f), atom_vlf_id)<0) TEST_ERROR
+    if (H5Tinsert(cplx_cmpd_id, "c", HOFFSET(struct complex, c), H5T_NATIVE_CHAR)<0) TEST_ERROR
+    if (H5Tinsert(cplx_cmpd_id, "s", HOFFSET(struct complex, s), H5T_NATIVE_SHORT)<0) TEST_ERROR
+
+    /* Make certain that the correct classes can be detected */
+    if(H5Tdetect_class(cplx_cmpd_id,H5T_COMPOUND)!=TRUE) TEST_ERROR
+    if(H5Tdetect_class(cplx_cmpd_id,H5T_ARRAY)!=TRUE) TEST_ERROR
+    if(H5Tdetect_class(cplx_cmpd_id,H5T_REFERENCE)!=TRUE) TEST_ERROR
+    if(H5Tdetect_class(cplx_cmpd_id,H5T_INTEGER)!=TRUE) TEST_ERROR
+    if(H5Tdetect_class(cplx_cmpd_id,H5T_FLOAT)!=TRUE) TEST_ERROR
+    if(H5Tdetect_class(cplx_cmpd_id,H5T_VLEN)!=TRUE) TEST_ERROR
+
+    /* Make certain that an incorrect class is not detected */
+    if(H5Tdetect_class(cplx_cmpd_id,H5T_TIME)!=FALSE) TEST_ERROR
+    if(H5Tdetect_class(cplx_cmpd_id,H5T_ENUM)!=FALSE) TEST_ERROR
+    if(H5Tdetect_class(cplx_cmpd_id,H5T_STRING)!=FALSE) TEST_ERROR
+
+    /* Close complex compound datatype */
+    if(H5Tclose(cplx_cmpd_id)<0) TEST_ERROR
+
+    /* Close atomic VL datatype of float */
+    if(H5Tclose(atom_vlf_id)<0) TEST_ERROR
+
+    /* Close atomic VL datatype of char */
+    if(H5Tclose(atom_vlc_id)<0) TEST_ERROR
+
+    /* Close atomic VL string datatype  */
+    if(H5Tclose(atom_vls_id)<0) TEST_ERROR
+
+    /* Close atomic array datatype */
+    if(H5Tclose(atom_arr_id)<0) TEST_ERROR
+
+    /* Close atomic compound datatype */
+    if(H5Tclose(atom_cmpd_id)<0) TEST_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_compound_1
+ *
+ * Purpose:     Tests various things about compound data types.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Robb Matzke
+ *              Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_1(void)
+{
+    complex_t               tmp;
+    hid_t                   complex_id;
+    herr_t ret;
+
+    TESTING("compound data types");
+
+    /* Create the empty type */
+    if ((complex_id = H5Tcreate(H5T_COMPOUND, sizeof tmp))<0) goto error;
+
+    /* Attempt to add the new compound datatype as a field within itself */
+    H5E_BEGIN_TRY {
+        ret=H5Tinsert(complex_id, "compound", 0, complex_id);
+    } H5E_END_TRY;
+    if (ret>=0) {
+        H5_FAILED();
+        printf("Inserted compound datatype into itself?\n");
+        goto error;
+    } /* end if */
+
+    /* Add a couple fields */
+    if (H5Tinsert(complex_id, "real", HOFFSET(complex_t, re),
+		  H5T_NATIVE_DOUBLE)<0) goto error;
+    if (H5Tinsert(complex_id, "imaginary", HOFFSET(complex_t, im),
+		  H5T_NATIVE_DOUBLE)<0) goto error;
+
+    if (H5Tclose (complex_id)<0) goto error;
+    PASSED();
+    return 0;
+
+  error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_compound_2
+ *
+ * Purpose:	Tests a compound type conversion where the source and
+ *		destination are the same except for the order of the
+ *		elements.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, June 17, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_2(void)
+{
+    struct st {
+	int a, b, c[4], d, e;
+    } *s_ptr;
+    struct dt {
+	int e, d, c[4], b, a;
+    } *d_ptr;
+
+    const size_t	nelmts = NTESTELEM;
+    const hsize_t	four = 4;
+    unsigned char	*buf=NULL, *orig=NULL, *bkg=NULL;
+    hid_t		st=-1, dt=-1;
+    hid_t       array_dt;
+    int			i;
+
+    TESTING("compound element reordering");
+
+    /* Sizes should be the same, but be careful just in case */
+    buf = (unsigned char*)malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
+    bkg = (unsigned char*)malloc(nelmts * sizeof(struct dt));
+    orig = (unsigned char*)malloc(nelmts * sizeof(struct st));
+    for (i=0; i<(int)nelmts; i++) {
+	s_ptr = ((struct st*)orig) + i;
+	s_ptr->a    = i*8+0;
+	s_ptr->b    = i*8+1;
+	s_ptr->c[0] = i*8+2;
+	s_ptr->c[1] = i*8+3;
+	s_ptr->c[2] = i*8+4;
+	s_ptr->c[3] = i*8+5;
+	s_ptr->d    = i*8+6;
+	s_ptr->e    = i*8+7;
+    }
+    HDmemcpy(buf, orig, nelmts*sizeof(struct st));
+
+    /* Build hdf5 datatypes */
+    array_dt=H5Tarray_create(H5T_NATIVE_INT,1, &four, NULL);
+    if ((st=H5Tcreate(H5T_COMPOUND, sizeof(struct st)))<0 ||
+            H5Tinsert(st, "a", HOFFSET(struct st, a), H5T_NATIVE_INT)<0 ||
+            H5Tinsert(st, "b", HOFFSET(struct st, b), H5T_NATIVE_INT)<0 ||
+            H5Tinsert(st, "c", HOFFSET(struct st, c), array_dt)<0 ||
+            H5Tinsert(st, "d", HOFFSET(struct st, d), H5T_NATIVE_INT)<0 ||
+            H5Tinsert(st, "e", HOFFSET(struct st, e), H5T_NATIVE_INT)<0)
+        goto error;
+    H5Tclose(array_dt);
+
+    array_dt=H5Tarray_create(H5T_NATIVE_INT,1, &four, NULL);
+    if ((dt=H5Tcreate(H5T_COMPOUND, sizeof(struct dt)))<0 ||
+            H5Tinsert(dt, "a", HOFFSET(struct dt, a), H5T_NATIVE_INT)<0 ||
+            H5Tinsert(dt, "b", HOFFSET(struct dt, b), H5T_NATIVE_INT)<0 ||
+            H5Tinsert(dt, "c", HOFFSET(struct dt, c), array_dt)<0 ||
+            H5Tinsert(dt, "d", HOFFSET(struct dt, d), H5T_NATIVE_INT)<0 ||
+            H5Tinsert(dt, "e", HOFFSET(struct dt, e), H5T_NATIVE_INT)<0)
+        goto error;
+    H5Tclose(array_dt);
+
+    /* Perform the conversion */
+    if (H5Tconvert(st, dt, nelmts, buf, bkg, H5P_DEFAULT)<0) goto error;
+
+    /* Compare results */
+    for (i=0; i<(int)nelmts; i++) {
+	s_ptr = ((struct st*)orig) + i;
+	d_ptr = ((struct dt*)buf)  + i;
+	if (s_ptr->a    != d_ptr->a    ||
+	    s_ptr->b    != d_ptr->b    ||
+	    s_ptr->c[0] != d_ptr->c[0] ||
+	    s_ptr->c[1] != d_ptr->c[1] ||
+	    s_ptr->c[2] != d_ptr->c[2] ||
+	    s_ptr->c[3] != d_ptr->c[3] ||
+	    s_ptr->d    != d_ptr->d    ||
+	    s_ptr->e    != d_ptr->e) {
+	    H5_FAILED();
+	    printf("    i=%d\n", i);
+	    printf("    src={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n",
+		   s_ptr->a, s_ptr->b, s_ptr->c[0], s_ptr->c[1], s_ptr->c[2],
+		   s_ptr->c[3], s_ptr->d, s_ptr->e);
+	    printf("    dst={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n",
+		   d_ptr->a, d_ptr->b, d_ptr->c[0], d_ptr->c[1], d_ptr->c[2],
+		   d_ptr->c[3], d_ptr->d, d_ptr->e);
+	    goto error;
+	}
+    }
+
+    /* Release resources */
+    free(buf);
+    free(bkg);
+    free(orig);
+    if (H5Tclose(st)<0 || H5Tclose(dt)<0) goto error;
+
+    PASSED();
+    reset_hdf5();
+    return 0;
+
+ error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_compound_3
+ *
+ * Purpose:	Tests compound conversions where the source and destination
+ *		are the same except the destination is missing a couple
+ *		members which appear in the source.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, June 17, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_3(void)
+{
+    struct st {
+	int a, b, c[4], d, e;
+    } *s_ptr;
+    struct dt {
+	int a,    c[4],    e;
+    } *d_ptr;
+
+    const size_t	nelmts = NTESTELEM;
+    const hsize_t	four = 4;
+    unsigned char	*buf=NULL, *orig=NULL, *bkg=NULL;
+    hid_t		st=-1, dt=-1;
+    hid_t       array_dt;
+    int			i;
+
+    TESTING("compound subset conversions");
+
+    /* Initialize */
+    buf = (unsigned char*)malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
+    bkg = (unsigned char*)malloc(nelmts * sizeof(struct dt));
+    orig = (unsigned char*)malloc(nelmts * sizeof(struct st));
+    for (i=0; i<(int)nelmts; i++) {
+        s_ptr = ((struct st*)orig) + i;
+        s_ptr->a    = i*8+0;
+        s_ptr->b    = i*8+1;
+        s_ptr->c[0] = i*8+2;
+        s_ptr->c[1] = i*8+3;
+        s_ptr->c[2] = i*8+4;
+        s_ptr->c[3] = i*8+5;
+        s_ptr->d    = i*8+6;
+        s_ptr->e    = i*8+7;
+    }
+    HDmemcpy(buf, orig, nelmts*sizeof(struct st));
+
+    /* Build hdf5 datatypes */
+    array_dt=H5Tarray_create(H5T_NATIVE_INT, 1, &four, NULL);
+    if ((st=H5Tcreate(H5T_COMPOUND, sizeof(struct st)))<0 ||
+            H5Tinsert(st, "a", HOFFSET(struct st, a), H5T_NATIVE_INT)<0 ||
+            H5Tinsert(st, "b", HOFFSET(struct st, b), H5T_NATIVE_INT)<0 ||
+            H5Tinsert(st, "c", HOFFSET(struct st, c), array_dt)<0 ||
+            H5Tinsert(st, "d", HOFFSET(struct st, d), H5T_NATIVE_INT)<0 ||
+            H5Tinsert(st, "e", HOFFSET(struct st, e), H5T_NATIVE_INT)<0)
+        goto error;
+    H5Tclose(array_dt);
+
+    array_dt=H5Tarray_create(H5T_NATIVE_INT, 1, &four, NULL);
+    if ((dt=H5Tcreate(H5T_COMPOUND, sizeof(struct dt)))<0 ||
+            H5Tinsert(dt, "a", HOFFSET(struct dt, a), H5T_NATIVE_INT)<0 ||
+            H5Tinsert(dt, "c", HOFFSET(struct dt, c), array_dt)<0 ||
+            H5Tinsert(dt, "e", HOFFSET(struct dt, e), H5T_NATIVE_INT)<0)
+        goto error;
+    H5Tclose(array_dt);
+
+    /* Perform the conversion */
+    if (H5Tconvert(st, dt, nelmts, buf, bkg, H5P_DEFAULT)<0)
+        goto error;
+
+    /* Compare results */
+    for (i=0; i<(int)nelmts; i++) {
+	s_ptr = ((struct st*)orig) + i;
+	d_ptr = ((struct dt*)buf)  + i;
+	if (s_ptr->a    != d_ptr->a    ||
+	    s_ptr->c[0] != d_ptr->c[0] ||
+	    s_ptr->c[1] != d_ptr->c[1] ||
+	    s_ptr->c[2] != d_ptr->c[2] ||
+	    s_ptr->c[3] != d_ptr->c[3] ||
+	    s_ptr->e    != d_ptr->e) {
+	    H5_FAILED();
+	    printf("    i=%d\n", i);
+	    printf("    src={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n",
+		   s_ptr->a, s_ptr->b, s_ptr->c[0], s_ptr->c[1], s_ptr->c[2],
+		   s_ptr->c[3], s_ptr->d, s_ptr->e);
+	    printf("    dst={a=%d, c=[%d,%d,%d,%d], e=%d\n",
+		   d_ptr->a, d_ptr->c[0], d_ptr->c[1], d_ptr->c[2],
+		   d_ptr->c[3], d_ptr->e);
+	    goto error;
+	}
+    }
+
+    /* Release resources */
+    free(buf);
+    free(bkg);
+    free(orig);
+    if (H5Tclose(st)<0 || H5Tclose(dt)<0) goto error;
+
+    PASSED();
+    reset_hdf5();
+    return 0;
+
+ error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_compound_4
+ *
+ * Purpose:	Tests compound conversions when the destination has the same
+ *		fields as the source but one or more of the fields are
+ *		smaller.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, June 17, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_4(void)
+{
+
+    struct st {
+	int a, b, c[4], d, e;
+    } *s_ptr;
+    struct dt {
+	short b;
+	int a, c[4];
+	short d;
+	int e;
+    } *d_ptr;
+
+    const size_t	nelmts = NTESTELEM;
+    const hsize_t	four = 4;
+    unsigned char	*buf=NULL, *orig=NULL, *bkg=NULL;
+    hid_t		st=-1, dt=-1;
+    hid_t       array_dt;
+    int			i;
+
+    TESTING("compound element shrinking & reordering");
+
+    /* Sizes should be the same, but be careful just in case */
+    buf = (unsigned char*)malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
+    bkg = (unsigned char*)malloc(nelmts * sizeof(struct dt));
+    orig = (unsigned char*)malloc(nelmts * sizeof(struct st));
+    for (i=0; i<(int)nelmts; i++) {
+        s_ptr = ((struct st*)orig) + i;
+        s_ptr->a    = i*8+0;
+        s_ptr->b    = (i*8+1) & 0x7fff;
+        s_ptr->c[0] = i*8+2;
+        s_ptr->c[1] = i*8+3;
+        s_ptr->c[2] = i*8+4;
+        s_ptr->c[3] = i*8+5;
+        s_ptr->d    = (i*8+6) & 0x7fff;
+        s_ptr->e    = i*8+7;
+    }
+    HDmemcpy(buf, orig, nelmts*sizeof(struct st));
+
+    /* Build hdf5 datatypes */
+    array_dt=H5Tarray_create(H5T_NATIVE_INT, 1, &four, NULL);
+    if ((st=H5Tcreate(H5T_COMPOUND, sizeof(struct st)))<0 ||
+            H5Tinsert(st, "a", HOFFSET(struct st, a), H5T_NATIVE_INT)<0 ||
+            H5Tinsert(st, "b", HOFFSET(struct st, b), H5T_NATIVE_INT)<0 ||
+            H5Tinsert(st, "c", HOFFSET(struct st, c), array_dt)<0 ||
+            H5Tinsert(st, "d", HOFFSET(struct st, d), H5T_NATIVE_INT)<0 ||
+            H5Tinsert(st, "e", HOFFSET(struct st, e), H5T_NATIVE_INT)<0)
+        goto error;
+    H5Tclose(array_dt);
+
+    array_dt=H5Tarray_create(H5T_NATIVE_INT, 1, &four, NULL);
+    if ((dt=H5Tcreate(H5T_COMPOUND, sizeof(struct dt)))<0 ||
+            H5Tinsert(dt, "a", HOFFSET(struct dt, a), H5T_NATIVE_INT)<0 ||
+            H5Tinsert(dt, "b", HOFFSET(struct dt, b), H5T_NATIVE_SHORT)<0 ||
+            H5Tinsert(dt, "c", HOFFSET(struct dt, c), array_dt)<0 ||
+            H5Tinsert(dt, "d", HOFFSET(struct dt, d), H5T_NATIVE_SHORT)<0 ||
+            H5Tinsert(dt, "e", HOFFSET(struct dt, e), H5T_NATIVE_INT)<0)
+        goto error;
+    H5Tclose(array_dt);
+
+    /* Perform the conversion */
+    if (H5Tconvert(st, dt, nelmts, buf, bkg, H5P_DEFAULT)<0)
+        goto error;
+
+    /* Compare results */
+    for (i=0; i<(int)nelmts; i++) {
+	s_ptr = ((struct st*)orig) + i;
+	d_ptr = ((struct dt*)buf)  + i;
+	if (s_ptr->a    != d_ptr->a    ||
+	    s_ptr->b    != d_ptr->b    ||
+	    s_ptr->c[0] != d_ptr->c[0] ||
+	    s_ptr->c[1] != d_ptr->c[1] ||
+	    s_ptr->c[2] != d_ptr->c[2] ||
+	    s_ptr->c[3] != d_ptr->c[3] ||
+	    s_ptr->d    != d_ptr->d    ||
+	    s_ptr->e    != d_ptr->e) {
+	    H5_FAILED();
+	    printf("    i=%d\n", i);
+	    printf("    src={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n",
+		   s_ptr->a, s_ptr->b, s_ptr->c[0], s_ptr->c[1], s_ptr->c[2],
+		   s_ptr->c[3], s_ptr->d, s_ptr->e);
+	    printf("    dst={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n",
+		   d_ptr->a, d_ptr->b, d_ptr->c[0], d_ptr->c[1], d_ptr->c[2],
+		   d_ptr->c[3], d_ptr->d, d_ptr->e);
+	    goto error;
+	}
+    }
+
+    /* Release resources */
+    free(buf);
+    free(bkg);
+    free(orig);
+    if (H5Tclose(st)<0 || H5Tclose(dt)<0) goto error;
+
+    PASSED();
+    reset_hdf5();
+    return 0;
+
+ error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_compound_5
+ *
+ * Purpose:	Many versions of HDF5 have a bug in the optimized compound
+ *              datatype conversion function, H5T_conv_struct_opt(), which
+ *              is triggered when the top-level type contains a struct
+ *              which must undergo a conversion.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, June 17, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_5(void)
+{
+    typedef struct {
+        char    name[16];
+        short   tdim;
+        short   coll_ids[4];
+    } src_type_t;
+
+    typedef struct {
+        char    name[16];
+        short   tdim;
+        int     coll_ids[4];
+    } dst_type_t;
+
+    hsize_t      dims[1] = {4};
+    hid_t       src_type, dst_type, short_array, int_array, string;
+    hid_t       array_dt;
+    src_type_t  src[2] = {{"one", 102, {104, 105, 106, 107}},
+                          {"two", 202, {204, 205, 206, 207}}};
+
+    dst_type_t  *dst;
+    void        *buf = calloc(2, sizeof(dst_type_t));
+    void        *bkg = calloc(2, sizeof(dst_type_t));
+
+#if 1
+    TESTING("optimized struct converter");
+#else
+    /* Turn off optimized compound conversion function to work around
+     * the problem. */
+    TESTING("optimized struct converter bug workaround");
+    H5Tunregister(H5T_PERS_DONTCARE, "struct(opt)", -1, -1, NULL);
+#endif
+
+    /* Build datatypes */
+    short_array = H5Tcreate(H5T_COMPOUND, 4*sizeof(short));
+    array_dt=H5Tarray_create(H5T_NATIVE_SHORT, 1, dims, NULL);
+    H5Tinsert(short_array, "_", 0, array_dt);
+    H5Tclose(array_dt);
+
+    int_array   = H5Tcreate(H5T_COMPOUND, 4*sizeof(int));
+    array_dt=H5Tarray_create(H5T_NATIVE_INT, 1, dims, NULL);
+    H5Tinsert(int_array, "_", 0, array_dt);
+    H5Tclose(array_dt);
+
+    string = H5Tcopy(H5T_C_S1);
+    H5Tset_size(string, 16);
+
+    src_type = H5Tcreate(H5T_COMPOUND, sizeof(src_type_t));
+    H5Tinsert(src_type, "name",     HOFFSET(src_type_t, name),             string          );
+    H5Tinsert(src_type, "tdim",     HOFFSET(src_type_t, tdim),             H5T_NATIVE_SHORT);
+    H5Tinsert(src_type, "coll_ids", HOFFSET(src_type_t, coll_ids),         short_array     );
+
+    dst_type = H5Tcreate(H5T_COMPOUND, sizeof(dst_type_t));
+    H5Tinsert(dst_type, "name",     HOFFSET(dst_type_t, name),             string          );
+    H5Tinsert(dst_type, "tdim",     HOFFSET(dst_type_t, tdim),             H5T_NATIVE_SHORT);
+    H5Tinsert(dst_type, "coll_ids", HOFFSET(dst_type_t, coll_ids),         int_array       );
+
+    /* Convert data */
+    HDmemcpy(buf, src, sizeof(src));
+    H5Tconvert(src_type, dst_type, 2, buf, bkg, H5P_DEFAULT);
+    dst = (dst_type_t*)buf;
+
+    /* Cleanup */
+    H5Tclose(src_type);
+    H5Tclose(dst_type);
+    H5Tclose(string);
+    H5Tclose(short_array);
+    H5Tclose(int_array);
+
+
+
+    /* Check results */
+    if (HDmemcmp(src[1].name, dst[1].name, sizeof(src[1].name)) ||
+        src[1].tdim!=dst[1].tdim ||
+        src[1].coll_ids[0]!=dst[1].coll_ids[0] ||
+        src[1].coll_ids[1]!=dst[1].coll_ids[1] ||
+        src[1].coll_ids[2]!=dst[1].coll_ids[2] ||
+        src[1].coll_ids[3]!=dst[1].coll_ids[3]) {
+        H5_FAILED();
+        return 1;
+    }
+
+    /* Free memory buffers */
+    free(buf);
+    free(bkg);
+    PASSED();
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_compound_6
+ *
+ * Purpose:	Tests compound conversions when the destination has the same
+ *		fields as the source but one or more of the fields are
+ *		larger.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, December 13, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_6(void)
+{
+
+    struct st {
+        short b;
+        short d;
+    } *s_ptr;
+    struct dt {
+        long b;
+        long d;
+    } *d_ptr;
+
+    const size_t	nelmts = NTESTELEM;
+    unsigned char	*buf=NULL, *orig=NULL, *bkg=NULL;
+    hid_t		st=-1, dt=-1;
+    int			i;
+
+    TESTING("compound element growing");
+
+    /* Sizes should be the same, but be careful just in case */
+    buf = (unsigned char*)malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt)));
+    bkg = (unsigned char*)malloc(nelmts * sizeof(struct dt));
+    orig = (unsigned char*)malloc(nelmts * sizeof(struct st));
+    for (i=0; i<(int)nelmts; i++) {
+        s_ptr = ((struct st*)orig) + i;
+        s_ptr->b    = (i*8+1) & 0x7fff;
+        s_ptr->d    = (i*8+6) & 0x7fff;
+    }
+    HDmemcpy(buf, orig, nelmts*sizeof(struct st));
+
+    /* Build hdf5 datatypes */
+    if ((st=H5Tcreate(H5T_COMPOUND, sizeof(struct st)))<0 ||
+            H5Tinsert(st, "b", HOFFSET(struct st, b), H5T_NATIVE_SHORT)<0 ||
+            H5Tinsert(st, "d", HOFFSET(struct st, d), H5T_NATIVE_SHORT)<0) {
+        H5_FAILED();
+        goto error;
+    }
+
+    if ((dt=H5Tcreate(H5T_COMPOUND, sizeof(struct dt)))<0 ||
+            H5Tinsert(dt, "b", HOFFSET(struct dt, b), H5T_NATIVE_LONG)<0 ||
+            H5Tinsert(dt, "d", HOFFSET(struct dt, d), H5T_NATIVE_LONG)<0) {
+        H5_FAILED();
+        goto error;
+    }
+
+    /* Perform the conversion */
+    if (H5Tconvert(st, dt, nelmts, buf, bkg, H5P_DEFAULT)<0) {
+        H5_FAILED();
+        goto error;
+    }
+
+    /* Compare results */
+    for (i=0; i<(int)nelmts; i++) {
+	s_ptr = ((struct st*)orig) + i;
+	d_ptr = ((struct dt*)buf)  + i;
+	if (s_ptr->b    != d_ptr->b    ||
+	    s_ptr->d    != d_ptr->d) {
+	    H5_FAILED();
+	    printf("    i=%d\n", i);
+	    printf("    src={b=%d, d=%d\n",
+           (int)s_ptr->b, (int)s_ptr->d);
+	    printf("    dst={b=%ld, d=%ld\n",
+           d_ptr->b, d_ptr->d);
+	    goto error;
+	}
+    }
+
+    /* Release resources */
+    free(buf);
+    free(bkg);
+    free(orig);
+    if (H5Tclose(st)<0 || H5Tclose(dt)<0) {
+        H5_FAILED();
+        goto error;
+    }
+
+    PASSED();
+    reset_hdf5();
+    return 0;
+
+ error:
+    return 1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	test_compound_7
+ *
+ * Purpose:	Tests inserting fields into compound datatypes when the field
+ *              overlaps the end of the compound datatype.  Also, tests
+ *              increasing compound type size.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, December 18, 2001
+ *
+ * Modifications:
+ *              The size of compound datatype can be expanded now.
+ *              Raymond Lu
+ *              Wednesday, September 10, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_7(void)
+{
+    struct s1 {
+        int a;
+        float b;
+        long c;
+    };
+
+    struct s2 {
+        int a;
+        float b;
+        long c;
+        double d;
+    };
+
+    hid_t tid1,tid2;
+    herr_t ret;
+
+    TESTING("compound element insertion");
+
+    if((tid1= H5Tcreate( H5T_COMPOUND, sizeof(struct s1)))<0) {
+        H5_FAILED();
+        printf("Can't create datatype!\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tinsert(tid1,"a",HOFFSET(struct s1,a),H5T_NATIVE_INT)<0) {
+        H5_FAILED();
+        printf("Can't insert field 'a'\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tinsert(tid1,"b",HOFFSET(struct s1,b),H5T_NATIVE_FLOAT)<0) {
+        H5_FAILED();
+        printf("Can't insert field 'b'\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tinsert(tid1,"c",HOFFSET(struct s1,c),H5T_NATIVE_LONG)<0) {
+        H5_FAILED();
+        printf("Can't insert field 'c'\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tget_size(tid1)!=sizeof(struct s1)) {
+        H5_FAILED();
+        printf("Incorrect size for struct 1\n");
+        goto error;
+    } /* end if */
+
+    if((tid2= H5Tcopy(tid1))<0) {
+        H5_FAILED();
+        printf("Can't copy datatype\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tget_size(tid2)==sizeof(struct s2)) {
+        H5_FAILED();
+        printf("Incorrect size for struct 2\n");
+        goto error;
+    } /* end if */
+
+    /* Should not be able to insert field past end of compound datatype */
+    H5E_BEGIN_TRY {
+        ret=H5Tinsert(tid2,"d",HOFFSET(struct s2,d),H5T_NATIVE_DOUBLE);
+    } H5E_END_TRY;
+    if(ret>=0) {
+        H5_FAILED();
+        printf("Inserted field 'd'?\n");
+        goto error;
+    } /* end if */
+
+    /* Should not be able to shrink size of compound datatype */
+    H5E_BEGIN_TRY {
+        ret=H5Tset_size(tid2, sizeof(struct s1)/2);
+    } H5E_END_TRY;
+    if(ret>=0) {
+        H5_FAILED();
+        printf("Shrunk compound type?\n");
+        goto error;
+    } /* end if */
+
+    /* Increase compound type size and try inserting field again */
+    if(H5Tset_size(tid2, sizeof(struct s2))<0) {
+        H5_FAILED();
+        printf("Can't increase size for compound type\n");
+        goto error;
+    } /* end if */
+
+    if( H5Tinsert(tid2,"d",HOFFSET(struct s2,d),H5T_NATIVE_DOUBLE)<0) {
+        H5_FAILED();
+        printf("Can't expand compound datatype\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tget_size(tid2)!=sizeof(struct s2)) {
+        H5_FAILED();
+        printf("Incorrect size for struct 2\n");
+        goto error;
+    } /* end if */
+
+    /* Release resources */
+    if (H5Tclose(tid1)<0 || H5Tclose(tid2)<0) {
+        H5_FAILED();
+        printf("Can't close datatypes\n");
+        goto error;
+    } /* end if */
+
+    PASSED();
+    reset_hdf5();
+    return 0;
+
+ error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_compound_8
+ *
+ * Purpose:     Tests H5Tpack for compound data types.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Robb Matzke
+ *              Wednesday, January  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_8(void)
+{
+    typedef struct s1 {
+        char    a;
+        int     b;
+    } s1;
+
+    typedef struct s2 {
+        char    c;
+        s1      d;
+    } s2;
+
+    hid_t  tid1, tid2, tid3;
+    herr_t ret;
+
+    TESTING("packing compound data types");
+
+    /* Create first compound datatype */
+    if((tid1 = H5Tcreate( H5T_COMPOUND, sizeof(struct s1)))<0) {
+        H5_FAILED(); AT();
+        printf("Can't create datatype!\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tinsert(tid1,"a",HOFFSET(struct s1,a),H5T_NATIVE_CHAR)<0) {
+        H5_FAILED(); AT();
+        printf("Can't insert field 'a'\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tinsert(tid1,"b",HOFFSET(struct s1,b),H5T_NATIVE_INT)<0) {
+        H5_FAILED(); AT();
+        printf("Can't insert field 'b'\n");
+        goto error;
+    } /* end if */
+
+    /* Test H5Tpack for the first compound type */
+    if(H5Tpack(tid1)<0) {
+        H5_FAILED(); AT();
+        printf("Can't pack the compound data type\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tlock(tid1)<0) {
+        H5_FAILED(); AT();
+        printf("Can't lock the compound data type\n");
+        goto error;
+    } /* end if */
+
+    /* If the type is already packed, packing a locked type is OK */
+    if(H5Tpack(tid1)<0) {
+        H5_FAILED(); AT();
+        printf("Can't pack the compound data type for second time\n");
+        goto error;
+    } /* end if */
+
+
+    /* Create second compound datatype */
+    if((tid2 = H5Tcreate( H5T_COMPOUND, sizeof(struct s2)))<0) {
+        H5_FAILED(); AT();
+        printf("Can't create datatype!\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tinsert(tid2,"c",HOFFSET(struct s2,c),H5T_NATIVE_CHAR)<0) {
+        H5_FAILED(); AT();
+        printf("Can't insert field 'c'\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tinsert(tid2,"d",HOFFSET(struct s2,d),tid1)<0) {
+        H5_FAILED(); AT();
+        printf("Can't insert field 'd'\n");
+        goto error;
+    } /* end if */
+
+    /* Make a copy of the type for later */
+    if((tid3=H5Tcopy(tid2))<0) {
+        H5_FAILED(); AT();
+        printf("Can't copy type #2\n");
+        goto error;
+    } /* end if */
+
+    /* Test H5Tpack for the second compound type */
+    if(H5Tpack(tid2)<0) {
+        H5_FAILED(); AT();
+        printf("Can't pack the compound data type\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tlock(tid2)<0) {
+        H5_FAILED(); AT();
+        printf("Can't lock the compound data type\n");
+        goto error;
+    } /* end if */
+
+    /* If the type is already packed, packing a locked type is OK */
+    if(H5Tpack(tid2)<0) {
+        H5_FAILED(); AT();
+        printf("Can't pack the compound data type for second time\n");
+        goto error;
+    } /* end if */
+
+    /* Lock unpacked type */
+    if(H5Tlock(tid3)<0) {
+        H5_FAILED(); AT();
+        printf("Can't lock the compound data type\n");
+        goto error;
+    } /* end if */
+
+    /* If the type is not packed, packing a locked type shouldn't work */
+    H5E_BEGIN_TRY {
+        ret=H5Tpack(tid3);
+    } H5E_END_TRY;
+    if(ret>=0) {
+        H5_FAILED(); AT();
+        printf("Packing locked datatype worked?\n");
+        goto error;
+    } /* end if */
+
+    /* Can't release resources - they are locked */
+
+    PASSED();
+    return 0;
+
+  error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_compound_9
+ *
+ * Purpose:     Tests compound data type with VL string as field.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Raymond Lu
+ *              Wednesday, June 9, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_9(void)
+{
+    typedef struct cmpd_struct {
+       int    i1;
+       char*  str;
+       int    i2;
+    } cmpd_struct;
+
+    cmpd_struct wdata = {11, "variable-length string", 22};
+    cmpd_struct rdata;
+    hid_t       file;
+    hid_t       cmpd_tid, str_id, dup_tid;
+    hid_t       space_id;
+    hid_t       dset_id;
+    hsize_t     dim1[1];
+    char        filename[1024];
+
+    TESTING("compound data type with VL string");
+
+    /* Create File */
+    h5_fixname(FILENAME[3], H5P_DEFAULT, filename, sizeof filename);
+    if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) {
+        H5_FAILED(); AT();
+        printf("Can't create file!\n");
+        goto error;
+    } /* end if */
+
+    /* Create first compound datatype */
+    if((cmpd_tid = H5Tcreate( H5T_COMPOUND, sizeof(struct cmpd_struct)))<0) {
+        H5_FAILED(); AT();
+        printf("Can't create datatype!\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tinsert(cmpd_tid,"i1",HOFFSET(struct cmpd_struct,i1),H5T_NATIVE_INT)<0) {
+        H5_FAILED(); AT();
+        printf("Can't insert field 'i1'\n");
+        goto error;
+    } /* end if */
+
+    str_id = H5Tcopy(H5T_C_S1);
+    if(H5Tset_size(str_id,H5T_VARIABLE)<0) {
+        H5_FAILED(); AT();
+        printf("Can't set size for VL string\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tinsert(cmpd_tid,"vl_string",HOFFSET(cmpd_struct,str),str_id)<0) {
+        H5_FAILED(); AT();
+        printf("Can't insert field 'i1'\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tinsert(cmpd_tid,"i2",HOFFSET(struct cmpd_struct,i2),H5T_NATIVE_INT)<0) {
+        H5_FAILED(); AT();
+        printf("Can't insert field 'i2'\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tcommit(file,"compound",cmpd_tid)<0) {
+        H5_FAILED(); AT();
+        printf("Can't commit datatype\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tclose(cmpd_tid)<0) {
+        H5_FAILED(); AT();
+        printf("Can't close datatype\n");
+        goto error;
+    } /* end if */
+
+    if((cmpd_tid = H5Topen(file, "compound"))<0) {
+        H5_FAILED(); AT();
+        printf("Can't open datatype\n");
+        goto error;
+    } /* end if */
+
+    if((dup_tid = H5Tcopy(cmpd_tid))<0) {
+        H5_FAILED(); AT();
+        printf("Can't copy datatype\n");
+        goto error;
+    } /* end if */
+
+    dim1[0] = 1;
+    if((space_id=H5Screate_simple(1,dim1,NULL))<0) {
+        H5_FAILED(); AT();
+        printf("Can't create space\n");
+        goto error;
+    } /* end if */
+
+    if((dset_id = H5Dcreate(file,"Dataset",dup_tid,space_id,H5P_DEFAULT))<0) {
+        H5_FAILED(); AT();
+        printf("Can't create dataset\n");
+        goto error;
+    } /* end if */
+
+    if(H5Dwrite(dset_id,dup_tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,&wdata)<0) {
+        H5_FAILED(); AT();
+        printf("Can't write data\n");
+        goto error;
+    } /* end if */
+
+    if(H5Dread(dset_id,dup_tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,&rdata)<0) {
+        H5_FAILED(); AT();
+        printf("Can't read data\n");
+        goto error;
+    } /* end if */
+
+    if(rdata.i1!=wdata.i1 || rdata.i2!=wdata.i2 || HDstrcmp(rdata.str, wdata.str)) {
+        H5_FAILED(); AT();
+        printf("incorrect read data\n");
+        goto error;
+    } /* end if */
+
+    if(H5Dclose(dset_id)<0)
+        goto error;
+    if(H5Tclose(cmpd_tid)<0)
+        goto error;
+    if(H5Tclose(dup_tid)<0)
+        goto error;
+    if(H5Tclose(str_id)<0)
+        goto error;
+    if(H5Sclose(space_id)<0)
+        goto error;
+    if(H5Fclose(file)<0)
+        goto error;
+
+
+    if((file=H5Fopen(filename, H5F_ACC_RDONLY, H5P_DEFAULT))<0) {
+        H5_FAILED(); AT();
+        printf("cannot open file\n");
+        goto error;
+    } /* end if */
+
+    if((dset_id = H5Dopen(file, "Dataset"))<0) {
+        H5_FAILED(); AT();
+        printf("cannot open dataset\n");
+        goto error;
+    } /* end if */
+
+    if((cmpd_tid = H5Dget_type(dset_id))<0) {
+         H5_FAILED(); AT();
+        printf("cannot open dataset\n");
+        goto error;
+    } /* end if */
+
+    if((dup_tid = H5Tcopy(cmpd_tid))<0) {
+        H5_FAILED(); AT();
+        printf("Can't copy datatype\n");
+        goto error;
+    } /* end if */
+
+    rdata.i1 = rdata.i2 = 0;
+    if(rdata.str) free(rdata.str);
+
+    if(H5Dread(dset_id,dup_tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,&rdata)<0) {
+        H5_FAILED(); AT();
+        printf("Can't read data\n");
+        goto error;
+    } /* end if */
+
+    if(rdata.i1!=wdata.i1 || rdata.i2!=wdata.i2 || strcmp(rdata.str, wdata.str)) {
+        H5_FAILED(); AT();
+        printf("incorrect read data\n");
+        goto error;
+    } /* end if */
+
+    if(rdata.str) free(rdata.str);
+
+    if(H5Dclose(dset_id)<0)
+        goto error;
+    if(H5Tclose(cmpd_tid)<0)
+        goto error;
+    if(H5Tclose(dup_tid)<0)
+        goto error;
+    if(H5Fclose(file)<0)
+        goto error;
+
+    PASSED();
+    return 0;
+
+ error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_compound_10
+ *
+ * Purpose:     Tests array data type of compound type with VL string as field.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Raymond Lu
+ *              Tuesday, June 15, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_10(void)
+{
+    typedef struct cmpd_struct {
+       int          i1;
+       char*        str;
+       hvl_t        text;
+       int          i2;
+    } cmpd_struct;
+
+    cmpd_struct wdata[ARRAY_DIM];
+    cmpd_struct rdata[ARRAY_DIM];
+    hid_t       file;
+    hid_t       arr_tid, cmpd_tid, cstr_id, vlstr_id;
+    hid_t       space_id;
+    hid_t       dset_id;
+    hsize_t     arr_dim[1] = {ARRAY_DIM};  /* Array dimensions */
+    hsize_t     dim1[1];
+    void        *t1, *t2;
+    char        filename[1024];
+    int         len;
+    int         i;
+
+    TESTING("array data type of compound type with VL string");
+
+    for(i=0; i<ARRAY_DIM; i++) {
+        wdata[i].i1 = i*10+i;
+        wdata[i].str = strdup("C string A");
+        wdata[i].str[9] += i;
+        wdata[i].i2 = i*1000+i*10;
+
+        wdata[i].text.p   = (void*)strdup("variable-length text A\0");
+        len = wdata[i].text.len = strlen((char*)wdata[i].text.p)+1;
+        ((char*)(wdata[i].text.p))[len-2] += i;
+        ((char*)(wdata[i].text.p))[len-1] = '\0';
+    }
+
+    /* Create File */
+    h5_fixname(FILENAME[4], H5P_DEFAULT, filename, sizeof filename);
+    if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) {
+        H5_FAILED(); AT();
+        printf("Can't create file!\n");
+        goto error;
+    } /* end if */
+
+    /* Create first compound datatype */
+    if((cmpd_tid = H5Tcreate( H5T_COMPOUND, sizeof(struct cmpd_struct)))<0) {
+        H5_FAILED(); AT();
+        printf("Can't create datatype!\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tinsert(cmpd_tid,"i1",HOFFSET(struct cmpd_struct,i1),H5T_NATIVE_INT)<0) {
+        H5_FAILED(); AT();
+        printf("Can't insert field 'i1'\n");
+        goto error;
+    } /* end if */
+
+    cstr_id = H5Tcopy(H5T_C_S1);
+    if(H5Tset_size(cstr_id,H5T_VARIABLE)<0) {
+        H5_FAILED(); AT();
+        printf("Can't set size for C string\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tinsert(cmpd_tid,"c_string",HOFFSET(cmpd_struct,str),cstr_id)<0) {
+        H5_FAILED(); AT();
+        printf("Can't insert field 'str'\n");
+        goto error;
+    } /* end if */
+
+    /* Create vl-string data type */
+    if((vlstr_id =  H5Tvlen_create(H5T_NATIVE_CHAR))<0) {
+        H5_FAILED(); AT();
+        printf("Can't create VL string\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tinsert(cmpd_tid, "vl_string",HOFFSET(cmpd_struct, text), vlstr_id)<0) {
+        H5_FAILED(); AT();
+        printf("Can't insert field 'text'\n");
+        goto error;
+    } /* end if */
+
+    if(H5Tinsert(cmpd_tid,"i2",HOFFSET(struct cmpd_struct,i2),H5T_NATIVE_INT)<0) {
+        H5_FAILED(); AT();
+        printf("Can't insert field 'i2'\n");
+        goto error;
+    } /* end if */
+
+    /* Create the array data type for c_string data */
+    if((arr_tid = H5Tarray_create(cmpd_tid,1,arr_dim, NULL))<0) {
+        H5_FAILED(); AT();
+        printf("Can't create array type\n");
+        goto error;
+    } /* end if */
+
+    dim1[0] = 1;
+    if((space_id=H5Screate_simple(1,dim1,NULL))<0) {
+        H5_FAILED(); AT();
+        printf("Can't create space\n");
+        goto error;
+    } /* end if */
+
+    if((dset_id = H5Dcreate(file,"Dataset",arr_tid,space_id,H5P_DEFAULT))<0) {
+        H5_FAILED(); AT();
+        printf("Can't create dataset\n");
+        goto error;
+    } /* end if */
+
+    if(H5Dwrite(dset_id,arr_tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,&wdata)<0) {
+        H5_FAILED(); AT();
+        printf("Can't write data\n");
+        goto error;
+    } /* end if */
+
+    if(H5Dread(dset_id,arr_tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,&rdata)<0) {
+        H5_FAILED(); AT();
+        printf("Can't read data\n");
+        goto error;
+    } /* end if */
+
+    for(i=0; i<ARRAY_DIM; i++) {
+        if(rdata[i].i1!=wdata[i].i1 || rdata[i].i2!=wdata[i].i2 ||
+            strcmp(rdata[i].str, wdata[i].str)) {
+            H5_FAILED(); AT();
+            printf("incorrect read data\n");
+            goto error;
+        } /* end if */
+
+        if(rdata[i].text.len!=wdata[i].text.len) {
+            H5_FAILED(); AT();
+            printf("incorrect VL length\n");
+            goto error;
+        } /* end if */
+
+        t1 = rdata[i].text.p;
+        t2 = wdata[i].text.p;
+        if(strcmp((char*)t1, (char*)t2)) {
+            H5_FAILED(); AT();
+            printf("incorrect VL read data\n");
+            goto error;
+        }
+
+        free(t1);
+        free(t2);
+        free(wdata[i].str);
+        free(rdata[i].str);
+    } /* end for */
+
+    if(H5Dclose(dset_id)<0)
+        goto error;
+    if(H5Tclose(cmpd_tid)<0)
+        goto error;
+    if(H5Tclose(arr_tid)<0)
+        goto error;
+    if(H5Tclose(cstr_id)<0)
+        goto error;
+    if(H5Tclose(vlstr_id)<0)
+        goto error;
+    if(H5Sclose(space_id)<0)
+        goto error;
+    if(H5Fclose(file)<0)
+        goto error;
+
+    PASSED();
+    return 0;
+
+ error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_compound_11
+ *
+ * Purpose:     Tests whether registering/unregistering a type conversion
+ *              function correctly causes compound datatypes to recalculate
+ *              their cached field conversion information
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Quincey Koziol
+ *              Saturday, August 7, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_11(void)
+{
+    typedef struct {
+        double d1;
+        int i1;
+        char *s1;
+        int i2;
+        double d2;
+        double d3;
+    } big_t;
+
+    typedef struct {
+        double d1;
+        int i1;
+        char *s1;
+    } little_t;
+
+    hid_t var_string_tid;  /* Datatype IDs for type conversion */
+    hid_t big_tid, little_tid;  /* Datatype IDs for type conversion */
+    hid_t big_tid2, little_tid2;  /* Datatype IDs for type conversion */
+    hid_t opaq_src_tid, opaq_dst_tid;  /* Datatype IDs for type conversion */
+    void *buf,          /* Conversion buffer */
+        *buf_orig,      /* Copy of original conversion buffer */
+        *bkg;           /* Background buffer */
+    size_t u;           /* Local index variable */
+
+    TESTING("registering type conversion routine with compound conversions");
+
+    /* Create variable string type for use in both structs */
+    if((var_string_tid=H5Tcopy(H5T_C_S1))<0) TEST_ERROR
+    if(H5Tset_size(var_string_tid,H5T_VARIABLE)<0) TEST_ERROR
+
+    /* Create type for 'big' struct */
+    if((big_tid = H5Tcreate(H5T_COMPOUND, sizeof(big_t)))<0) TEST_ERROR
+
+    if(H5Tinsert(big_tid, "d1", HOFFSET(big_t, d1), H5T_NATIVE_DOUBLE)<0) TEST_ERROR
+    if(H5Tinsert(big_tid, "i1", HOFFSET(big_t, i1), H5T_NATIVE_INT)<0) TEST_ERROR
+    if(H5Tinsert(big_tid, "s1", HOFFSET(big_t, s1), var_string_tid)<0) TEST_ERROR
+    if(H5Tinsert(big_tid, "i2", HOFFSET(big_t, i2), H5T_NATIVE_INT)<0) TEST_ERROR
+    if(H5Tinsert(big_tid, "d2", HOFFSET(big_t, d2), H5T_NATIVE_DOUBLE)<0) TEST_ERROR
+    if(H5Tinsert(big_tid, "d3", HOFFSET(big_t, d3), H5T_NATIVE_DOUBLE)<0) TEST_ERROR
+
+    /* Create type for 'little' struct (with "out of order" inserts) */
+    if((little_tid = H5Tcreate(H5T_COMPOUND, sizeof(little_t)))<0) TEST_ERROR
+
+    if(H5Tinsert(little_tid, "d1", HOFFSET(little_t, d1), H5T_NATIVE_DOUBLE)<0) TEST_ERROR
+    if(H5Tinsert(little_tid, "s1", HOFFSET(little_t, s1), var_string_tid)<0) TEST_ERROR
+    if(H5Tinsert(little_tid, "i1", HOFFSET(little_t, i1), H5T_NATIVE_INT)<0) TEST_ERROR
+
+    /* Allocate buffers */
+    if((buf=HDmalloc(sizeof(big_t)*NTESTELEM))==NULL) TEST_ERROR
+    if((buf_orig=HDmalloc(sizeof(big_t)*NTESTELEM))==NULL) TEST_ERROR
+    if((bkg=HDmalloc(sizeof(big_t)*NTESTELEM))==NULL) TEST_ERROR
+
+    /* Initialize buffer */
+    for(u=0; u<NTESTELEM; u++) {
+        ((big_t *)buf)[u].d1=(double)u*(double)1.5;
+        ((big_t *)buf)[u].d2=(double)u*(double)2.5;
+        ((big_t *)buf)[u].d2=(double)u*(double)3.5;
+        ((big_t *)buf)[u].i1=u*3;
+        ((big_t *)buf)[u].i2=u*5;
+        ((big_t *)buf)[u].s1=HDmalloc(32);
+        sprintf(((big_t *)buf)[u].s1,"%u",(unsigned)u);
+    } /* end for */
+
+    /* Make copy of buffer before conversion */
+    HDmemcpy(buf_orig,buf,sizeof(big_t)*NTESTELEM);
+
+    /* Make copies of the 'big' and 'little' datatypes, so the type
+     * conversion routine doesn't use the same ones this time and next time
+     */
+    if((big_tid2=H5Tcopy(big_tid))<0) TEST_ERROR
+    if((little_tid2=H5Tcopy(little_tid))<0) TEST_ERROR
+
+    /* Convert buffer from 'big' to 'little' struct */
+    if(H5Tconvert(big_tid2,little_tid2,NTESTELEM,buf,bkg,H5P_DEFAULT)<0) TEST_ERROR
+
+    /* Verify converted buffer is correct */
+    for(u=0; u<NTESTELEM; u++) {
+        if(((big_t *)buf_orig)[u].d1!=((little_t *)buf)[u].d1) {
+            printf("Error, line #%d: buf_orig[%u].d1=%f, buf[%u].d1=%f\n",__LINE__,
+                    (unsigned)u,((big_t *)buf_orig)[u].d1,(unsigned)u,((little_t *)buf)[u].d1);
+            TEST_ERROR
+        } /* end if */
+        if(((big_t *)buf_orig)[u].i1!=((little_t *)buf)[u].i1) {
+            printf("Error, line #%d: buf_orig[%u].i1=%d, buf[%u].i1=%d\n",__LINE__,
+                    (unsigned)u,((big_t *)buf_orig)[u].i1,(unsigned)u,((little_t *)buf)[u].i1);
+            TEST_ERROR
+        } /* end if */
+        if(((big_t *)buf_orig)[u].s1==NULL || ((little_t *)buf)[u].s1==NULL) {
+            printf("Error, line #%d: buf_orig[%u].s1=%p, buf[%u].s1=%p\n",__LINE__,
+                    (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1);
+            TEST_ERROR
+        } /* end if */
+        else if(HDstrcmp(((big_t *)buf_orig)[u].s1,((little_t *)buf)[u].s1)) {
+            printf("Error, line #%d: buf_orig[%u].s1=%s, buf[%u].s1=%s\n",__LINE__,
+                    (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1);
+            TEST_ERROR
+        } /* end if */
+        HDfree(((little_t *)buf)[u].s1);
+    } /* end for */
+
+    /* Build source and destination types for conversion routine */
+    if((opaq_src_tid=H5Tcreate(H5T_OPAQUE, 4))<0) TEST_ERROR
+    if(H5Tset_tag(opaq_src_tid, "opaque source type")<0) TEST_ERROR
+    if((opaq_dst_tid=H5Tcreate(H5T_OPAQUE, 4))<0) TEST_ERROR
+    if(H5Tset_tag(opaq_dst_tid, "opaque destination type")<0) TEST_ERROR
+
+    /* Register new type conversion routine */
+    if(H5Tregister(H5T_PERS_HARD, "opaq_test", opaq_src_tid, opaq_dst_tid, convert_opaque)<0) TEST_ERROR
+
+    /* Recover the original buffer information */
+    HDmemcpy(buf,buf_orig,sizeof(big_t)*NTESTELEM);
+
+    /* Convert buffer from 'big' to 'little' struct */
+    if(H5Tconvert(big_tid,little_tid,NTESTELEM,buf,bkg,H5P_DEFAULT)<0) TEST_ERROR
+
+    /* Verify converted buffer is correct */
+    for(u=0; u<NTESTELEM; u++) {
+        if(((big_t *)buf_orig)[u].d1!=((little_t *)buf)[u].d1) {
+            printf("Error, line #%d: buf_orig[%u].d1=%f, buf[%u].d1=%f\n",__LINE__,
+                    (unsigned)u,((big_t *)buf_orig)[u].d1,(unsigned)u,((little_t *)buf)[u].d1);
+            TEST_ERROR
+        } /* end if */
+        if(((big_t *)buf_orig)[u].i1!=((little_t *)buf)[u].i1) {
+            printf("Error, line #%d: buf_orig[%u].i1=%d, buf[%u].i1=%d\n",__LINE__,
+                    (unsigned)u,((big_t *)buf_orig)[u].i1,(unsigned)u,((little_t *)buf)[u].i1);
+            TEST_ERROR
+        } /* end if */
+        if(((big_t *)buf_orig)[u].s1==NULL || ((little_t *)buf)[u].s1==NULL) {
+            printf("Error, line #%d: buf_orig[%u].s1=%p, buf[%u].s1=%p\n",__LINE__,
+                    (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1);
+            TEST_ERROR
+        } /* end if */
+        else if(HDstrcmp(((big_t *)buf_orig)[u].s1,((little_t *)buf)[u].s1)) {
+            printf("Error, line #%d: buf_orig[%u].s1=%s, buf[%u].s1=%s\n",__LINE__,
+                    (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1);
+            TEST_ERROR
+        } /* end if */
+        HDfree(((little_t *)buf)[u].s1);
+    } /* end for */
+
+    /* Unregister the conversion routine */
+    if(H5Tunregister(H5T_PERS_HARD, "opaq_test", opaq_src_tid, opaq_dst_tid, convert_opaque)<0) TEST_ERROR
+
+    /* Recover the original buffer information */
+    HDmemcpy(buf,buf_orig,sizeof(big_t)*NTESTELEM);
+
+    /* Convert buffer from 'big' to 'little' struct */
+    if(H5Tconvert(big_tid,little_tid,NTESTELEM,buf,bkg,H5P_DEFAULT)<0) TEST_ERROR
+
+    /* Verify converted buffer is correct */
+    for(u=0; u<NTESTELEM; u++) {
+        if(((big_t *)buf_orig)[u].d1!=((little_t *)buf)[u].d1) {
+            printf("Error, line #%d: buf_orig[%u].d1=%f, buf[%u].d1=%f\n",__LINE__,
+                    (unsigned)u,((big_t *)buf_orig)[u].d1,(unsigned)u,((little_t *)buf)[u].d1);
+            TEST_ERROR
+        } /* end if */
+        if(((big_t *)buf_orig)[u].i1!=((little_t *)buf)[u].i1) {
+            printf("Error, line #%d: buf_orig[%u].i1=%d, buf[%u].i1=%d\n",__LINE__,
+                    (unsigned)u,((big_t *)buf_orig)[u].i1,(unsigned)u,((little_t *)buf)[u].i1);
+            TEST_ERROR
+        } /* end if */
+        if(((big_t *)buf_orig)[u].s1==NULL || ((little_t *)buf)[u].s1==NULL) {
+            printf("Error, line #%d: buf_orig[%u].s1=%p, buf[%u].s1=%p\n",__LINE__,
+                    (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1);
+            TEST_ERROR
+        } /* end if */
+        else if(HDstrcmp(((big_t *)buf_orig)[u].s1,((little_t *)buf)[u].s1)) {
+            printf("Error, line #%d: buf_orig[%u].s1=%s, buf[%u].s1=%s\n",__LINE__,
+                    (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1);
+            TEST_ERROR
+        } /* end if */
+        HDfree(((little_t *)buf)[u].s1);
+    } /* end for */
+
+    /* Free everything */
+    for(u=0; u<NTESTELEM; u++)
+        HDfree(((big_t *)buf_orig)[u].s1);
+    if(H5Tclose(opaq_dst_tid)<0) TEST_ERROR
+    if(H5Tclose(opaq_src_tid)<0) TEST_ERROR
+    if(H5Tclose(little_tid2)<0) TEST_ERROR
+    if(H5Tclose(big_tid2)<0) TEST_ERROR
+    HDfree(bkg);
+    HDfree(buf_orig);
+    HDfree(buf);
+    if(H5Tclose(little_tid)<0) TEST_ERROR
+    if(H5Tclose(big_tid)<0) TEST_ERROR
+    if(H5Tclose(var_string_tid)<0) TEST_ERROR
+
+    PASSED();
+    return 0;
+
+ error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_compound_12
+ *
+ * Purpose:     Tests size adjustment of compound data types.  Start with
+ *              no member and 0 size, increase the size as inserting
+ *              members.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Raymond Lu
+ *              Wednesday, September 29, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compound_12(void)
+{
+    hid_t                   complex_id;
+    size_t                  size = 0;
+    size_t                  offset, new_size, tmp_size;
+    herr_t ret;
+
+    TESTING("adjust size of compound data types");
+
+    /* Create a compound type of minimal size */
+    if ((complex_id = H5Tcreate(H5T_COMPOUND, 1))<0) goto error;
+
+    /* Verify the size */
+    if((new_size=H5Tget_size(complex_id))==0) goto error;
+    if(new_size!=1) goto error;
+
+    /* Add a couple fields and adjust the size */
+    offset = size;
+    if((tmp_size=H5Tget_size(H5T_NATIVE_DOUBLE))==0) goto error;
+    size+=tmp_size;
+    if (H5Tset_size(complex_id, size)<0) goto error;
+    if (H5Tinsert(complex_id, "real", offset,
+		  H5T_NATIVE_DOUBLE)<0) goto error;
+
+    offset = size;
+    if((tmp_size=H5Tget_size(H5T_NATIVE_DOUBLE))==0) goto error;
+    size+=tmp_size;
+    if (H5Tset_size(complex_id, size)<0) goto error;
+    if (H5Tinsert(complex_id, "imaginary", offset,
+		  H5T_NATIVE_DOUBLE)<0) goto error;
+
+    /* Increase and decrease the size. */
+    if((tmp_size=H5Tget_size(H5T_NATIVE_DOUBLE))==0) goto error;
+    size+=tmp_size;
+    if (H5Tset_size(complex_id, size)<0) goto error;
+
+    if((tmp_size=H5Tget_size(H5T_NATIVE_DOUBLE))==0) goto error;
+    size-=tmp_size;
+    if (H5Tset_size(complex_id, size)<0) goto error;
+
+    /* Verify the size */
+    if((new_size=H5Tget_size(complex_id))==0) goto error;
+    if(new_size!=size) goto error;
+
+    /* Tries to cut last member.  Supposed to fail. */
+    size--;
+    H5E_BEGIN_TRY {
+        ret = H5Tset_size(complex_id, size);
+    } H5E_END_TRY;
+    if(ret>=0) {
+        H5_FAILED();
+        puts("  Tries to cut off the last member. Should have failed.");
+        goto error;
+    }
+
+    if (H5Tclose (complex_id)<0) goto error;
+    PASSED();
+    return 0;
+
+  error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_query
+ *
+ * Purpose:     Tests query functions of compound and enumeration types.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Raymond Lu
+ *              Thursday, April 4, 2002
+ *
+ * Modifications:
+ *              Raymond Lu
+ *              Wednesday, Febuary 9, 2005
+ *              Added test for H5Tenum_valueof, H5Tenum_nameof, and
+ *              H5Tget_member_value.
+ *-------------------------------------------------------------------------
+ */
+static int
+test_query(void)
+{
+    struct s1 {
+        int    a;
+        float  b;
+        long   c;
+        double d;
+    };
+    hid_t       file=-1, tid1=-1, tid2=-1;
+    char        filename[1024];
+    char        compnd_type[]="Compound_type", enum_type[]="Enum_type";
+    short       enum_val;
+    char        enum_name[16];
+
+    TESTING("query functions of compound and enumeration types");
+
+    /* Create File */
+    h5_fixname(FILENAME[2], H5P_DEFAULT, filename, sizeof filename);
+    if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0)
+        goto error;
+
+    /* Create a compound datatype */
+    if((tid1=H5Tcreate(H5T_COMPOUND, sizeof(struct s1)))<0) {
+        H5_FAILED();
+        printf("Can't create datatype!\n");
+        goto error;
+    } /* end if */
+    if(H5Tinsert(tid1, "a", HOFFSET(struct s1, a), H5T_NATIVE_INT)<0) {
+        H5_FAILED();
+        printf("Can't insert field 'a'\n");
+        goto error;
+    } /* end if */
+    if(H5Tinsert(tid1, "b", HOFFSET(struct s1, b), H5T_NATIVE_FLOAT)<0) {
+        H5_FAILED();
+        printf("Can't insert field 'b'\n");
+        goto error;
+    } /* end if */
+    if(H5Tinsert(tid1, "c", HOFFSET(struct s1, c), H5T_NATIVE_LONG)<0) {
+        H5_FAILED();
+        printf("Can't insert field 'c'\n");
+        goto error;
+    } /* end if */
+    if(H5Tinsert(tid1, "d", HOFFSET(struct s1, d), H5T_NATIVE_DOUBLE)<0) {
+        H5_FAILED();
+        printf("Can't insert field 'd'\n");
+        goto error;
+    } /* end if */
+
+    /* Create a enumerate datatype */
+    if((tid2=H5Tcreate(H5T_ENUM, sizeof(short)))<0) {
+        H5_FAILED();
+        printf("Can't create enumerate type\n");
+        goto error;
+    } /* end if */
+    if(H5Tenum_insert(tid2, "RED", (enum_val=10,&enum_val))<0) {
+        H5_FAILED();
+        printf("Can't insert field into enumeration type\n");
+        goto error;
+    } /* end if */
+    if(H5Tenum_insert(tid2, "GREEN", (enum_val=11,&enum_val))<0) {
+        H5_FAILED();
+        printf("Can't insert field into enumeration type\n");
+        goto error;
+    } /* end if */
+    if(H5Tenum_insert(tid2, "BLUE", (enum_val=12,&enum_val))<0) {
+        H5_FAILED();
+        printf("Can't insert field into enumeration type\n");
+        goto error;
+    } /* end if */
+    if(H5Tenum_insert(tid2, "ORANGE", (enum_val=13,&enum_val))<0) {
+        H5_FAILED();
+        printf("Can't insert field into enumeration type\n");
+        goto error;
+    } /* end if */
+    if(H5Tenum_insert(tid2, "YELLOW", (enum_val=14,&enum_val))<0) {
+        H5_FAILED();
+        printf("Can't insert field into enumeration type\n");
+        goto error;
+    } /* end if */
+
+    /* Query member number and member index by name, for compound type. */
+    if(H5Tget_nmembers(tid1)!=4) {
+        H5_FAILED();
+        printf("Can't get member number\n");
+        goto error;
+    } /* end if */
+    if(H5Tget_member_index(tid1, "c")!=2) {
+        H5_FAILED();
+        printf("Can't get correct index number\n");
+        goto error;
+    } /* end if */
+
+    /* Query member number and member index by member name, for enumeration type. */
+    if(H5Tget_nmembers(tid2)!=5) {
+        H5_FAILED();
+        printf("Can't get member number\n");
+        goto error;
+    } /* end if */
+    if(H5Tget_member_index(tid2, "ORANGE")!=3) {
+        H5_FAILED();
+        printf("Can't get correct index number\n");
+        goto error;
+    } /* end if */
+
+    /* Commit compound datatype and close it */
+    if(H5Tcommit(file, compnd_type, tid1)<0) {
+        H5_FAILED();
+        printf("Can't commit compound datatype\n");
+        goto error;
+    } /* end if */
+    if(H5Tclose(tid1)<0) {
+        H5_FAILED();
+        printf("Can't close datatype\n");
+        goto error;
+    } /* end if */
+
+    /* Commit enumeration datatype and close it */
+    if(H5Tcommit(file, enum_type, tid2)<0) {
+        H5_FAILED();
+        printf("Can't commit compound datatype\n");
+        goto error;
+    } /* end if */
+    if(H5Tclose(tid2)<0) {
+        H5_FAILED();
+        printf("Can't close datatype\n");
+        goto error;
+    } /* end if */
+
+    /* Open the dataytpe for query */
+    if((tid1=H5Topen(file, compnd_type))<0) {
+        H5_FAILED();
+        printf("Can't open datatype\n");
+        goto error;
+    } /* end if */
+    if((tid2=H5Topen(file, enum_type))<0) {
+        H5_FAILED();
+        printf("Can't open datatype\n");
+        goto error;
+    } /* end if */
+
+    /* Query member number and member index by name, for compound type */
+    if(H5Tget_nmembers(tid1)!=4) {
+        H5_FAILED();
+        printf("Can't get member number\n");
+        goto error;
+    } /* end if */
+    if(H5Tget_member_index(tid1, "c")!=2) {
+        H5_FAILED();
+        printf("Can't get correct index number\n");
+        goto error;
+    } /* end if */
+
+    /* Query member number and member index by member name, for enumeration type */
+    if(H5Tget_nmembers(tid2)!=5) {
+        H5_FAILED();
+        printf("Can't get member number\n");
+        goto error;
+    } /* end if */
+    if(H5Tget_member_index(tid2, "ORANGE")!=3) {
+        H5_FAILED();
+        printf("Can't get correct index number\n");
+        goto error;
+    } /* end if */
+
+    /* Query member value by member name, for enumeration type */
+    if(H5Tenum_valueof (tid2, "ORANGE", &enum_val)<0) {
+        H5_FAILED();
+        printf("Can't get value for enumerate member\n");
+        goto error;
+    } /* end if */
+    if(enum_val!=13) {
+        H5_FAILED();
+        printf("Incorrect value for enum member\n");
+        goto error;
+    } /* end if */
+
+    /* Query member value by member index, for enumeration type */
+    if(H5Tget_member_value (tid2, 2, &enum_val)<0) {
+        H5_FAILED();
+        printf("Can't get value for enum member\n");
+        goto error;
+    } /* end if */
+    if(enum_val!=12) {
+        H5_FAILED();
+        printf("Incorrect value for enum member\n");
+        goto error;
+    } /* end if */
+
+    /* Query member name by member value, for enumeration type */
+    enum_val = 14;
+    if(H5Tenum_nameof(tid2, &enum_val, enum_name, 16)<0) {
+        H5_FAILED();
+        printf("Can't get name for enum member\n");
+        goto error;
+    } /* end if */
+    if(strcmp("YELLOW", enum_name)) {
+        H5_FAILED();
+        printf("Incorrect name for enum member\n");
+        goto error;
+    } /* end if */
+
+    /* Close data type and file */
+    if(H5Tclose(tid1)<0) {
+        H5_FAILED();
+        printf("Can't close datatype\n");
+        goto error;
+    } /* end if */
+    if(H5Tclose(tid2)<0) {
+        H5_FAILED();
+        printf("Can't close datatype\n");
+        goto error;
+    } /* end if */
+
+    if(H5Fclose(file)<0) {
+        H5_FAILED();
+        printf("Can't close file\n");
+        goto error;
+    } /* end if */
+
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+        H5Tclose (tid1);
+        H5Tclose (tid2);
+        H5Fclose (file);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_derived_flt
+ *
+ * Purpose:     Tests user-define and query functions of floating-point types.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Raymond Lu
+ *              Thursday, Jan 6, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_derived_flt(void)
+{
+    hid_t       file=-1, tid1=-1, tid2=-1;
+    hid_t       dxpl_id=-1;
+    char        filename[1024];
+    size_t      precision, spos, epos, esize, mpos, msize, size, ebias;
+    int         offset;
+    size_t      src_size, dst_size;
+    unsigned char        *buf=NULL, *saved_buf=NULL;
+    int         *aligned=NULL;
+    int		endian;			/*endianess	        */
+    size_t      nelmts = NTESTELEM;
+    unsigned int        fails_this_test = 0;
+    const size_t	max_fails=40;	/*max number of failures*/
+    char	str[256];		/*message string	*/
+    unsigned int         i, j;
+
+    TESTING("user-define and query functions of floating-point types");
+
+    /* Create File */
+    h5_fixname(FILENAME[5], H5P_DEFAULT, filename, sizeof filename);
+    if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) {
+        H5_FAILED();
+        printf("Can't create file\n");
+        goto error;
+    }
+
+    if((dxpl_id = H5Pcreate(H5P_DATASET_XFER))<0) {
+        H5_FAILED();
+        printf("Can't create data transfer property list\n");
+        goto error;
+    }
+
+    if((tid1 = H5Tcopy(H5T_IEEE_F64LE))<0) {
+        H5_FAILED();
+        printf("Can't copy data type\n");
+        goto error;
+    }
+
+    if((tid2 = H5Tcopy(H5T_IEEE_F32LE))<0) {
+        H5_FAILED();
+        printf("Can't copy data type\n");
+        goto error;
+    }
+
+    /*------------------------------------------------------------------------
+     *                   1st floating-point type
+     * size=7 byte, precision=42 bits, offset=3 bits, mantissa size=31 bits,
+     * mantissa position=3, exponent size=10 bits, exponent position=34,
+     * exponent bias=511.  It can be illustrated in little-endian order as
+     *
+     *          6       5       4       3       2       1       0
+     *    ???????? ???SEEEE EEEEEEMM MMMMMMMM MMMMMMMM MMMMMMMM MMMMM???
+     *
+     * To create a new floating-point type, the following properties must be
+     * set in the order of
+     *   set fields -> set offset -> set precision -> set size.
+     * All these properties must be set before the type can function. Other
+     * properties can be set anytime.  Derived type size cannot be expanded
+     * bigger than original size but can be decreased.  There should be no
+     * holes among the significant bits.  Exponent bias usually is set
+     * 2^(n-1)-1, where n is the exponent size.
+     *-----------------------------------------------------------------------*/
+    if(H5Tset_fields(tid1, 44, 34, 10, 3, 31)<0) {
+        H5_FAILED();
+        printf("Can't set fields\n");
+        goto error;
+    }
+    if(H5Tset_offset(tid1, 3)<0) {
+        H5_FAILED();
+        printf("Can't set offset\n");
+        goto error;
+    }
+    if(H5Tset_precision(tid1, 42)<0) {
+        H5_FAILED();
+        printf("Can't set precision\n");
+        goto error;
+    }
+    if(H5Tset_size(tid1, 7)<0) {
+        H5_FAILED();
+        printf("Can't set size\n");
+        goto error;
+    }
+    if(H5Tset_ebias(tid1, 511)<0) {
+        H5_FAILED();
+        printf("Can't set exponent bias\n");
+        goto error;
+    }
+    if(H5Tset_pad(tid1, H5T_PAD_ZERO, H5T_PAD_ZERO)<0) {
+        H5_FAILED();
+        printf("Can't set padding\n");
+        goto error;
+    }
+
+    if(H5Tcommit(file, "new float type 1", tid1)<0) {
+        H5_FAILED();
+        printf("Can't set inpad\n");
+        goto error;
+    }
+    if(H5Tclose(tid1)<0) {
+        H5_FAILED();
+        printf("Can't close datatype\n");
+        goto error;
+    }
+
+    if((tid1 = H5Topen(file, "new float type 1"))<0) {
+        H5_FAILED();
+        printf("Can't open datatype\n");
+        goto error;
+    }
+    if(H5Tget_fields(tid1, &spos, &epos, &esize, &mpos, &msize)<0) {
+        H5_FAILED();
+        printf("Can't get fields\n");
+        goto error;
+    }
+    if(spos!=44 || epos!=34 || esize!=10 || mpos!=3 || msize!=31) {
+        H5_FAILED();
+        printf("Wrong field values\n");
+        goto error;
+    }
+
+    if((precision = H5Tget_precision(tid1))!=42) {
+        H5_FAILED();
+        printf("Can't get precision or wrong precision\n");
+        goto error;
+    }
+    if((offset = H5Tget_offset(tid1))!=3) {
+        H5_FAILED();
+        printf("Can't get offset or wrong offset\n");
+        goto error;
+    }
+    if((size = H5Tget_size(tid1))!=7) {
+        H5_FAILED();
+        printf("Can't get size or wrong size\n");
+        goto error;
+    }
+    if((ebias = H5Tget_ebias(tid1))!=511) {
+        H5_FAILED();
+        printf("Can't get exponent bias or wrong bias\n");
+        goto error;
+    }
+
+    /*--------------------------------------------------------------------------
+     *                   2nd floating-point type
+     * size=3 byte, precision=24 bits, offset=0 bits, mantissa size=16 bits,
+     * mantissa position=0, exponent size=7 bits, exponent position=16, exponent
+     * bias=63. It can be illustrated in little-endian order as
+     *
+     *          2       1       0
+     *    SEEEEEEE MMMMMMMM MMMMMMMM
+     *--------------------------------------------------------------------------*/
+    if(H5Tset_fields(tid2, 23, 16, 7, 0, 16)<0) {
+        H5_FAILED();
+        printf("Can't set fields\n");
+        goto error;
+    }
+    if(H5Tset_offset(tid2, 0)<0) {
+        H5_FAILED();
+        printf("Can't set offset\n");
+        goto error;
+    }
+    if(H5Tset_precision(tid2, 24)<0) {
+        H5_FAILED();
+        printf("Can't set precision\n");
+        goto error;
+    }
+    if(H5Tset_size(tid2, 3)<0) {
+        H5_FAILED();
+        printf("Can't set size\n");
+        goto error;
+    }
+    if(H5Tset_ebias(tid2, 63)<0) {
+        H5_FAILED();
+        printf("Can't set size\n");
+        goto error;
+    }
+    if(H5Tset_pad(tid2, H5T_PAD_ZERO, H5T_PAD_ZERO)<0) {
+        H5_FAILED();
+        printf("Can't set padding\n");
+        goto error;
+    }
+
+    if(H5Tcommit(file, "new float type 2", tid2)<0) {
+        H5_FAILED();
+        printf("Can't set inpad\n");
+        goto error;
+    }
+    if(H5Tclose(tid2)<0) {
+        H5_FAILED();
+        printf("Can't close datatype\n");
+        goto error;
+    }
+
+    if((tid2 = H5Topen(file, "new float type 2"))<0) {
+        H5_FAILED();
+        printf("Can't open datatype\n");
+        goto error;
+    }
+    if(H5Tget_fields(tid2, &spos, &epos, &esize, &mpos, &msize)<0) {
+        H5_FAILED();
+        printf("Can't get fields\n");
+        goto error;
+    }
+    if(spos!=23 || epos!=16 || esize!=7 || mpos!=0 || msize!=16) {
+        H5_FAILED();
+        printf("Wrong field values\n");
+        goto error;
+    }
+
+    if((precision = H5Tget_precision(tid2))!=24) {
+        H5_FAILED();
+        printf("Can't get precision or wrong precision\n");
+        goto error;
+    }
+    if((offset = H5Tget_offset(tid2))!=0) {
+        H5_FAILED();
+        printf("Can't get offset or wrong offset\n");
+        goto error;
+    }
+    if((size = H5Tget_size(tid2))!=3) {
+        H5_FAILED();
+        printf("Can't get size or wrong size\n");
+        goto error;
+    }
+    if((ebias = H5Tget_ebias(tid2))!=63) {
+        H5_FAILED();
+        printf("Can't get exponent bias or wrong bias\n");
+        goto error;
+    }
+
+    /* Convert data from the 2nd to the 1st derived floating-point type.
+     * Then convert data from the 1st type back to the 2nd type.
+     * Compare the final data with the original data.
+     */
+    src_size = H5Tget_size(tid2);
+    dst_size = H5Tget_size(tid1);
+    endian = H5Tget_order(tid2);
+    buf = (unsigned char*)malloc(nelmts*(MAX(src_size, dst_size)));
+    saved_buf = (unsigned char*)malloc(nelmts*src_size);
+
+    for(i=0; i<nelmts*src_size; i++)
+        buf[i] = saved_buf[i] = HDrand();
+
+    /* Convert data from the 2nd to the 1st derived floating-point type.
+     * The mantissa and exponent of the 2nd type are big enough to retain
+     * the precision and exponent power. */
+    if(H5Tconvert(tid2, tid1, nelmts, buf, NULL, dxpl_id)<0) {
+        H5_FAILED();
+        printf("Can't convert data\n");
+        goto error;
+    }
+    /* Convert data from the 1st back to the 2nd derived floating-point type. */
+    if(H5Tconvert(tid1, tid2, nelmts, buf, NULL, dxpl_id)<0) {
+        H5_FAILED();
+        printf("Can't convert data\n");
+        goto error;
+    }
+
+    /* Are the values still the same?*/
+    for(i=0; i<nelmts; i++) {
+        for(j=0; j<src_size; j++)
+            if(buf[i*src_size+j]!=saved_buf[i*src_size+j])
+               break;
+        if(j==src_size)
+           continue; /*no error*/
+
+        /* If original value is NaN(exponent bits are all ones, 11..11),
+         * the library simply sets all mantissa bits to ones.  So don't
+         * compare values in this case.
+         */
+        if((buf[i*src_size+2]==0x7f && saved_buf[i*src_size+2]==0x7f) ||
+            (buf[i*src_size+2]==0xff && saved_buf[i*src_size+2]==0xff))
+            continue;
+
+        /* Print errors */
+        if (0==fails_this_test++) {
+	    sprintf(str, "\nTesting random sw derived floating-point -> derived floating-point conversions");
+	    printf("%-70s", str);
+	    HDfflush(stdout);
+            H5_FAILED();
+        }
+        printf("    test %u elmt %u: \n", 1, (unsigned)i);
+
+        printf("        src = ");
+        for (j=0; j<src_size; j++)
+            printf(" %02x", saved_buf[i*src_size+ENDIAN(src_size, j)]);
+        printf("\n");
+
+        printf("        dst = ");
+        for (j=0; j<src_size; j++)
+            printf(" %02x", buf[i*src_size+ENDIAN(src_size, j)]);
+        printf("\n");
+
+        if (fails_this_test>=max_fails) {
+            HDputs("    maximum failures reached, aborting test...");
+            goto error;
+        }
+    }
+
+    if (buf) free(buf);
+    if (saved_buf) free(saved_buf);
+
+    if(H5Tclose(tid1)<0) {
+        H5_FAILED();
+        printf("Can't close datatype\n");
+        goto error;
+    }
+
+    if(H5Tclose(tid2)<0) {
+        H5_FAILED();
+        printf("Can't close datatype\n");
+        goto error;
+    }
+
+    if(H5Pclose(dxpl_id)<0) {
+        H5_FAILED();
+        printf("Can't close property list\n");
+        goto error;
+    }
+
+    if(H5Fclose(file)<0) {
+        H5_FAILED();
+        printf("Can't close file\n");
+        goto error;
+    } /* end if */
+
+    PASSED();
+    reset_hdf5();	/*print statistics*/
+
+    return 0;
+
+ error:
+    if (buf) free(buf);
+    if (saved_buf) free(saved_buf);
+    if (aligned) free(aligned);
+    HDfflush(stdout);
+    H5E_BEGIN_TRY {
+        H5Tclose (tid1);
+        H5Tclose (tid2);
+        H5Pclose (dxpl_id);
+        H5Fclose (file);
+    } H5E_END_TRY;
+    reset_hdf5(); /*print statistics*/
+    return MAX((int)fails_this_test, 1);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_derived_integer
+ *
+ * Purpose:     Tests user-define and query functions of integer types.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Raymond Lu
+ *              Saturday, Jan 29, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_derived_integer(void)
+{
+    hid_t       file=-1, tid1=-1, tid2=-1;
+    hid_t       dxpl_id=-1;
+    char        filename[1024];
+    size_t      precision, spos, epos, esize, mpos, msize, size, ebias;
+    int         offset;
+    H5T_order_t order;
+    H5T_sign_t  sign;
+    size_t      src_size, dst_size;
+    unsigned char        *buf=NULL, *saved_buf=NULL;
+    int         *aligned=NULL;
+    int		endian;			/*endianess	        */
+    size_t      nelmts = NTESTELEM;
+    unsigned int        fails_this_test = 0;
+    const size_t	max_fails=40;	/*max number of failures*/
+    char	str[256];		/*message string	*/
+    unsigned int         i, j;
+
+    TESTING("user-define and query functions of integer types");
+
+    /* Create File */
+    h5_fixname(FILENAME[6], H5P_DEFAULT, filename, sizeof filename);
+    if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) {
+        H5_FAILED();
+        printf("Can't create file\n");
+        goto error;
+    }
+
+    if((dxpl_id = H5Pcreate(H5P_DATASET_XFER))<0) {
+        H5_FAILED();
+        printf("Can't create data transfer property list\n");
+        goto error;
+    }
+
+    if((tid1 = H5Tcopy(H5T_STD_I32LE))<0) {
+        H5_FAILED();
+        printf("Can't copy data type\n");
+        goto error;
+    }
+
+    if((tid2 = H5Tcopy(H5T_STD_U64LE))<0) {
+        H5_FAILED();
+        printf("Can't copy data type\n");
+        goto error;
+    }
+
+    /*--------------------------------------------------------------------------
+     *                   1st integer type
+     * size=3 byte, precision=24 bits, offset=0 bits, order=big endian.
+     * It can be illustrated in big-endian order as
+     *
+     *          0       1       2
+     *    SIIIIIII IIIIIIII IIIIIIII
+     *
+     * There's no specific order for these functions to define the attributes
+     * of a new integer type, H5Tset_precision, H5Tset_offset, H5Tset_size,
+     * H5Tset_order, H5Tset_pad, H5Tset_sign.
+     *--------------------------------------------------------------------------*/
+    if(H5Tset_offset(tid1,0)<0) {
+        H5_FAILED();
+        printf("Can't set offset\n");
+        goto error;
+    }
+
+    if(H5Tset_size(tid1, 3)<0) {
+        H5_FAILED();
+        printf("Can't set size\n");
+        goto error;
+    }
+
+    if(H5Tset_precision(tid1,24)<0) {
+        H5_FAILED();
+        printf("Can't set precision\n");
+        goto error;
+    }
+
+    if(H5Tset_order(tid1, H5T_ORDER_BE)<0) {
+        H5_FAILED();
+        printf("Can't set order\n");
+        goto error;
+    }
+
+    if(H5Tcommit(file, "new integer type 1", tid1)<0) {
+        H5_FAILED();
+        printf("Can't commit data type\n");
+        goto error;
+    }
+
+    if(H5Tclose(tid1)<0) {
+        H5_FAILED();
+        printf("Can't close datatype\n");
+        goto error;
+    }
+
+    if((tid1 = H5Topen(file, "new integer type 1"))<0) {
+        H5_FAILED();
+        printf("Can't open datatype\n");
+        goto error;
+    }
+
+    if((precision = H5Tget_precision(tid1))!=24) {
+        H5_FAILED();
+        printf("Can't get precision or wrong precision\n");
+        goto error;
+    }
+    if((offset = H5Tget_offset(tid1))!=0) {
+        H5_FAILED();
+        printf("Can't get offset or wrong offset\n");
+        goto error;
+    }
+    if((size = H5Tget_size(tid1))!=3) {
+        H5_FAILED();
+        printf("Can't get size or wrong size\n");
+        goto error;
+    }
+    if((order = H5Tget_order(tid1))!=H5T_ORDER_BE) {
+        H5_FAILED();
+        printf("Can't get order or wrong order\n");
+        goto error;
+    }
+
+    /*--------------------------------------------------------------------------
+     *                   2nd integer type
+     * size=8 byte, precision=48 bits, offset=10 bits, order=little endian.
+     * It can be illustrated in little-endian order as
+     *
+     *          7       6       5       4       3       2       1       0
+     *   ??????SI IIIIIIII IIIIIIII IIIIIIII IIIIIIII IIIIIIII IIIIII?? ????????
+     *--------------------------------------------------------------------------*/
+    if(H5Tset_precision(tid2,48)<0) {
+        H5_FAILED();
+        printf("Can't set precision\n");
+        goto error;
+    }
+
+    if(H5Tset_offset(tid2,10)<0) {
+        H5_FAILED();
+        printf("Can't set offset\n");
+        goto error;
+    }
+
+    if(H5Tset_sign(tid2,H5T_SGN_2)<0) {
+        H5_FAILED();
+        printf("Can't set offset\n");
+        goto error;
+    }
+
+    if(H5Tcommit(file, "new integer type 2", tid2)<0) {
+        H5_FAILED();
+        printf("Can't commit data type\n");
+        goto error;
+    }
+
+    if(H5Tclose(tid2)<0) {
+        H5_FAILED();
+        printf("Can't close datatype\n");
+        goto error;
+    }
+
+    if((tid2 = H5Topen(file, "new integer type 2"))<0) {
+        H5_FAILED();
+        printf("Can't open datatype\n");
+        goto error;
+    }
+
+    if((precision = H5Tget_precision(tid2))!=48) {
+        H5_FAILED();
+        printf("Can't get precision or wrong precision\n");
+        goto error;
+    }
+    if((offset = H5Tget_offset(tid2))!=10) {
+        H5_FAILED();
+        printf("Can't get offset or wrong offset\n");
+        goto error;
+    }
+    if((size = H5Tget_size(tid2))!=8) {
+        H5_FAILED();
+        printf("Can't get size or wrong size\n");
+        goto error;
+    }
+    if((sign = H5Tget_sign(tid2))!=H5T_SGN_2) {
+        H5_FAILED();
+        printf("Can't get sign or wrong sign\n");
+        goto error;
+    }
+
+    /* Convert data from the 1st to the 2nd derived integer type.
+     * Then convert data from the 2nd type back to the 1st type.
+     * Compare the final data with the original data.
+     */
+    src_size = H5Tget_size(tid1);
+    dst_size = H5Tget_size(tid2);
+    endian = H5Tget_order(tid1);
+    buf = (unsigned char*)malloc(nelmts*(MAX(src_size, dst_size)));
+    saved_buf = (unsigned char*)malloc(nelmts*src_size);
+
+    for(i=0; i<nelmts*src_size; i++)
+        buf[i] = saved_buf[i] = HDrand();
+
+    /* Convert data from the 1st to the 2nd derived integer type.
+     * The precision of the 2nd type are big enough to retain
+     * the 1st type's precision. */
+    if(H5Tconvert(tid1, tid2, nelmts, buf, NULL, dxpl_id)<0) {
+        H5_FAILED();
+        printf("Can't convert data\n");
+        goto error;
+    }
+    /* Convert data from the 2nd back to the 1st derived integer type. */
+    if(H5Tconvert(tid2, tid1, nelmts, buf, NULL, dxpl_id)<0) {
+        H5_FAILED();
+        printf("Can't convert data\n");
+        goto error;
+    }
+
+    /* Are the values still the same?*/
+    for(i=0; i<nelmts; i++) {
+        for(j=0; j<src_size; j++)
+            if(buf[i*src_size+j]!=saved_buf[i*src_size+j])
+               break;
+        if(j==src_size)
+           continue; /*no error*/
+
+        /* Print errors */
+        if (0==fails_this_test++) {
+	    sprintf(str, "\nTesting random sw derived integer -> derived integer conversions");
+	    printf("%-70s", str);
+	    HDfflush(stdout);
+            H5_FAILED();
+        }
+        printf("    test %u elmt %u: \n", 1, (unsigned)i);
+
+        printf("        src = ");
+        for (j=0; j<src_size; j++)
+            printf(" %02x", saved_buf[i*src_size+ENDIAN(src_size, j)]);
+        printf("\n");
+
+        printf("        dst = ");
+        for (j=0; j<src_size; j++)
+            printf(" %02x", buf[i*src_size+ENDIAN(src_size, j)]);
+        printf("\n");
+
+        if (fails_this_test>=max_fails) {
+            HDputs("    maximum failures reached, aborting test...");
+            goto error;
+        }
+    }
+
+    if(H5Tclose(tid1)<0) {
+        H5_FAILED();
+        printf("Can't close datatype\n");
+        goto error;
+    }
+
+    if(H5Tclose(tid2)<0) {
+        H5_FAILED();
+        printf("Can't close datatype\n");
+        goto error;
+    }
+
+    if(H5Pclose(dxpl_id)<0) {
+        H5_FAILED();
+        printf("Can't close property list\n");
+        goto error;
+    }
+
+    if(H5Fclose(file)<0) {
+        H5_FAILED();
+        printf("Can't close file\n");
+        goto error;
+    } /* end if */
+
+    PASSED();
+    reset_hdf5();	/*print statistics*/
+
+    return 0;
+
+ error:
+    if (buf) free(buf);
+    if (saved_buf) free(saved_buf);
+    if (aligned) free(aligned);
+    HDfflush(stdout);
+    H5E_BEGIN_TRY {
+        H5Tclose (tid1);
+        H5Tclose (tid2);
+        H5Pclose (dxpl_id);
+        H5Fclose (file);
+    } H5E_END_TRY;
+    reset_hdf5(); /*print statistics*/
+    return MAX((int)fails_this_test, 1);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_transient
+ *
+ * Purpose:	Tests transient data types.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, June  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_transient (hid_t fapl)
+{
+    static hsize_t	ds_size[2] = {10, 20};
+    hid_t		file=-1, type=-1, space=-1, dset=-1, t2=-1;
+    char		filename[1024];
+    herr_t		status;
+
+    TESTING("transient data types");
+
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) {
+	goto error;
+    }
+    if ((space = H5Screate_simple (2, ds_size, ds_size))<0) goto error;
+
+    /* Predefined types cannot be modified or closed */
+    H5E_BEGIN_TRY {
+	status = H5Tset_precision (H5T_NATIVE_INT, 256);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	HDputs ("    Predefined types should not be modifiable!");
+	goto error;
+    }
+    H5E_BEGIN_TRY {
+	status = H5Tclose (H5T_NATIVE_INT);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	HDputs ("    Predefined types should not be closable!");
+	goto error;
+    }
+
+    /* Copying a predefined type results in a modifiable copy */
+    if ((type=H5Tcopy (H5T_NATIVE_INT))<0) goto error;
+    if (H5Tset_precision (type, 256)<0) goto error;
+
+    /* It should not be possible to create an attribute for a transient type */
+    H5E_BEGIN_TRY {
+	status = H5Acreate (type, "attr1", H5T_NATIVE_INT, space, H5P_DEFAULT);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	HDputs ("    Attributes should not be allowed for transient types!");
+	goto error;
+    }
+
+    /* Create a dataset from a transient data type */
+    if (H5Tclose (type)<0) goto error;
+    if ((type = H5Tcopy (H5T_NATIVE_INT))<0) goto error;
+    if ((dset=H5Dcreate (file, "dset1", type, space, H5P_DEFAULT))<0)
+	goto error;
+
+    /* The type returned from a dataset should not be modifiable */
+    if ((t2 = H5Dget_type (dset))<0) goto error;
+    H5E_BEGIN_TRY {
+	status = H5Tset_precision (t2, 256);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	HDputs ("    Dataset data types should not be modifiable!");
+	goto error;
+    }
+    if (H5Tclose (t2)<0) goto error;
+
+    /*
+     * Close the dataset and reopen it, testing that it's type is still
+     * read-only.
+     */
+    if (H5Dclose (dset)<0) goto error;
+    if ((dset=H5Dopen (file, "dset1"))<0) goto error;
+    if ((t2 = H5Dget_type (dset))<0) goto error;
+    H5E_BEGIN_TRY {
+	status = H5Tset_precision (t2, 256);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	HDputs ("    Dataset data types should not be modifiable!");
+	goto error;
+    }
+    if (H5Tclose (t2)<0) goto error;
+
+    /*
+     * Get the dataset data type by applying H5Tcopy() to the dataset. The
+     * result should be modifiable.
+     */
+    if ((t2=H5Tcopy (dset))<0) goto error;
+    if (H5Tset_precision (t2, 256)<0) goto error;
+    if (H5Tclose (t2)<0) goto error;
+
+
+    H5Dclose (dset);
+    H5Fclose (file);
+    H5Tclose (type);
+    H5Sclose (space);
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Tclose (t2);
+	H5Tclose (type);
+	H5Sclose (space);
+	H5Dclose (dset);
+	H5Fclose (file);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_named
+ *
+ * Purpose:	Tests named data types.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, June  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_named (hid_t fapl)
+{
+    hid_t		file=-1, type=-1, space=-1, dset=-1, t2=-1, t3=-1, attr1=-1;
+    herr_t		status;
+    static hsize_t	ds_size[2] = {10, 20};
+    hsize_t		i,j;
+    unsigned 		attr_data[10][20];
+    char		filename[1024];
+
+    TESTING("named data types");
+
+    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) {
+	goto error;
+    }
+    if ((space = H5Screate_simple (2, ds_size, ds_size))<0) goto error;
+
+    /* Predefined types cannot be committed */
+    H5E_BEGIN_TRY {
+	status = H5Tcommit (file, "test_named_1 (should not exist)",
+			    H5T_NATIVE_INT);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	HDputs ("    Predefined types should not be committable!");
+	goto error;
+    }
+
+    /* Copy a predefined data type and commit the copy */
+    if ((type = H5Tcopy (H5T_NATIVE_INT))<0) goto error;
+    if (H5Tcommit (file, "native-int", type)<0) goto error;
+    if ((status=H5Tcommitted (type))<0) goto error;
+    if (0==status) {
+	H5_FAILED();
+	HDputs ("    H5Tcommitted() returned false!");
+	goto error;
+    }
+
+    /* We should not be able to modify a type after it has been committed. */
+    H5E_BEGIN_TRY {
+	status = H5Tset_precision (type, 256);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	HDputs ("    Committed type is not constant!");
+	goto error;
+    }
+
+    /* We should not be able to re-commit a committed type */
+    H5E_BEGIN_TRY {
+	status = H5Tcommit(file, "test_named_2 (should not exist)", type);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	HDputs ("    Committed types should not be recommitted!");
+	goto error;
+    }
+
+    /* It should be possible to define an attribute for the named type */
+    if ((attr1=H5Acreate (type, "attr1", H5T_NATIVE_UCHAR, space,
+			  H5P_DEFAULT))<0) goto error;
+    for (i=0; i<ds_size[0]; i++)
+        for (j=0; j<ds_size[1]; j++)
+            attr_data[i][j] = (int)(i*ds_size[1]+j);
+    if (H5Awrite(attr1, H5T_NATIVE_UINT, attr_data)<0) goto error;
+    if (H5Aclose (attr1)<0) goto error;
+
+    /*
+     * Copying a committed type should result in a transient type which is
+     * not locked.
+     */
+    if ((t2 = H5Tcopy (type))<0) goto error;
+    if ((status=H5Tcommitted (t2))<0) goto error;
+    if (status) {
+	H5_FAILED();
+	HDputs ("    Copying a named type should result in a transient type!");
+	goto error;
+    }
+    if (H5Tset_precision (t2, 256)<0) goto error;
+    if (H5Tclose (t2)<0) goto error;
+
+    /*
+     * Close the committed type and reopen it.  It should return a named type.
+     */
+    if (H5Tclose (type)<0) goto error;
+    if ((type=H5Topen (file, "native-int"))<0) goto error;
+    if ((status=H5Tcommitted (type))<0) goto error;
+    if (!status) {
+	H5_FAILED();
+	HDputs ("    Opened named types should be named types!");
+	goto error;
+    }
+
+    /* Create a dataset that uses the named type */
+    if ((dset = H5Dcreate (file, "dset1", type, space, H5P_DEFAULT))<0) {
+	goto error;
+    }
+
+    /* Get the dataset's data type and make sure it's a named type */
+    if ((t2 = H5Dget_type (dset))<0) goto error;
+    if ((status=H5Tcommitted (t2))<0) goto error;
+    if (!status) {
+	H5_FAILED();
+	HDputs ("    Dataset type should be a named type!");
+	goto error;
+    }
+
+    /* Close the dataset, then close its type, then reopen the dataset */
+    if (H5Dclose (dset)<0) goto error;
+    if (H5Tclose (t2)<0) goto error;
+    if ((dset = H5Dopen (file, "dset1"))<0) goto error;
+
+    /* Get the dataset's type and make sure it's named */
+    if ((t2 = H5Dget_type (dset))<0) goto error;
+    if ((status=H5Tcommitted (t2))<0) goto error;
+    if (!status) {
+	H5_FAILED();
+	HDputs ("    Dataset type should be a named type!");
+	goto error;
+    }
+
+    /*
+     * Close the dataset and create another with the type returned from the
+     * first dataset.
+     */
+    if (H5Dclose (dset)<0) goto error;
+    if ((dset=H5Dcreate (file, "dset2", t2, space, H5P_DEFAULT))<0) goto error;
+
+    /* Reopen the second dataset and make sure the type is shared */
+    if (H5Tclose (t2)<0) goto error;
+    if (H5Dclose (dset)<0) goto error;
+    if ((dset = H5Dopen (file, "dset2"))<0) goto error;
+    if ((t2 = H5Dget_type (dset))<0) goto error;
+    if ((status=H5Tcommitted (t2))<0) goto error;
+    if (!status) {
+	H5_FAILED();
+	HDputs ("    Dataset type should be a named type!");
+	goto error;
+    }
+    if (H5Tclose (t2)<0) goto error;
+
+    /*
+     * Get the dataset data type by applying H5Tcopy() to the dataset. The
+     * result should be modifiable.
+     */
+    if ((t2=H5Tcopy (dset))<0) goto error;
+    if (H5Tset_precision (t2, 256)<0) goto error;
+    if (H5Tclose (t2)<0) goto error;
+    if (H5Dclose (dset)<0) goto error;
+
+    /*
+     * Copy of committed type used as dataset type should not be name type
+     */
+    if ((t2 = H5Tcopy (type))<0) goto error;
+    if ((status=H5Tcommitted (t2))<0) goto error;
+    if (status) {
+	H5_FAILED();
+	HDputs ("    Copied type should not be a named type!");
+	goto error;
+    }
+    if ((dset=H5Dcreate (file, "dset3", t2, space, H5P_DEFAULT))<0) goto error;
+    if ((t3 = H5Dget_type (dset))<0) goto error;
+    if ((status=H5Tcommitted (t3))<0) goto error;
+    if (status) {
+	H5_FAILED();
+	HDputs ("    Datatype from dataset using copied type should not be a named type!");
+	goto error;
+    }
+    if (H5Tclose (t3)<0) goto error;
+    if (H5Dclose (dset)<0) goto error;
+
+    /* Clean up */
+    if (H5Tclose (type)<0) goto error;
+    if (H5Sclose (space)<0) goto error;
+    if (H5Fclose (file)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Tclose (t3);
+	H5Tclose (t2);
+	H5Tclose (type);
+	H5Sclose (space);
+	H5Dclose (dset);
+	H5Fclose (file);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	mkstr
+ *
+ * Purpose:	Create a new string data type
+ *
+ * Return:	Success:	New type
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August 10, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hid_t
+mkstr(size_t len, H5T_str_t strpad)
+{
+    hid_t	t;
+
+    if ((t=H5Tcopy(H5T_C_S1))<0) return -1;
+    if (H5Tset_size(t, len)<0) return -1;
+    if (H5Tset_strpad(t, strpad)<0) return -1;
+    return t;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_conv_str_1
+ *
+ * Purpose:	Test string conversions
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August 10, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_conv_str_1(void)
+{
+    char	*buf=NULL;
+    hid_t	src_type, dst_type;
+
+    TESTING("string conversions");
+
+    /*
+     * Convert a null-terminated string to a shorter and longer null
+     * terminated string.
+     */
+    src_type = mkstr(10, H5T_STR_NULLTERM);
+    dst_type = mkstr(5, H5T_STR_NULLTERM);
+    buf = (char*)HDcalloc(2, 10);
+    HDmemcpy(buf, "abcdefghi\0abcdefghi\0", 20);
+    if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcd\0abcd\0abcdefghi\0", 20)) {
+	H5_FAILED();
+	HDputs("    Truncated C-string test failed");
+	goto error;
+    }
+    if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcd\0\0\0\0\0\0abcd\0\0\0\0\0\0", 20)) {
+	H5_FAILED();
+	HDputs("    Extended C-string test failed");
+	goto error;
+    }
+    HDfree(buf);
+    if (H5Tclose(src_type)<0) goto error;
+    if (H5Tclose(dst_type)<0) goto error;
+
+    /*
+     * Convert a null padded string to a shorter and then longer string.
+     */
+    src_type = mkstr(10, H5T_STR_NULLPAD);
+    dst_type = mkstr(5, H5T_STR_NULLPAD);
+    buf = (char*)HDcalloc(2, 10);
+    HDmemcpy(buf, "abcdefghijabcdefghij", 20);
+    if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcdeabcdeabcdefghij", 20)) {
+	H5_FAILED();
+	HDputs("    Truncated C buffer test failed");
+	goto error;
+    }
+    if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcde\0\0\0\0\0abcde\0\0\0\0\0", 20)) {
+	H5_FAILED();
+	HDputs("    Extended C buffer test failed");
+	goto error;
+    }
+    HDfree(buf);
+    if (H5Tclose(src_type)<0) goto error;
+    if (H5Tclose(dst_type)<0) goto error;
+
+    /*
+     * Convert a space-padded string to a shorter and then longer string.
+     */
+    src_type = mkstr(10, H5T_STR_SPACEPAD);
+    dst_type = mkstr(5, H5T_STR_SPACEPAD);
+    buf = (char*)HDcalloc(2, 10);
+    HDmemcpy(buf, "abcdefghijabcdefghij", 20);
+    if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcdeabcdeabcdefghij", 20)) {
+	H5_FAILED();
+	HDputs("    Truncated Fortran-string test failed");
+	goto error;
+    }
+    if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcde     abcde     ", 20)) {
+	H5_FAILED();
+	HDputs("    Extended Fortran-string test failed");
+	goto error;
+    }
+    HDfree(buf);
+    if (H5Tclose(src_type)<0) goto error;
+    if (H5Tclose(dst_type)<0) goto error;
+
+    /*
+     * What happens if a null-terminated string is not null terminated?  If
+     * the conversion is to an identical string then nothing happens but if
+     * the destination is a different size or type of string then the right
+     * thing should happen.
+     */
+    src_type = mkstr(10, H5T_STR_NULLTERM);
+    dst_type = mkstr(10, H5T_STR_NULLTERM);
+    buf = (char*)HDcalloc(2, 10);
+    HDmemcpy(buf, "abcdefghijabcdefghij", 20);
+    if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcdefghijabcdefghij", 20)) {
+	H5_FAILED();
+	HDputs("    Non-terminated string test 1");
+	goto error;
+    }
+    H5Tclose(dst_type);
+    dst_type = mkstr(5, H5T_STR_NULLTERM);
+    HDmemcpy(buf, "abcdefghijabcdefghij", 20);
+    if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcd\0abcd\0abcdefghij", 20)) {
+	H5_FAILED();
+	HDputs("    Non-terminated string test 2");
+	goto error;
+    }
+    HDmemcpy(buf, "abcdeabcdexxxxxxxxxx", 20);
+    if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcde\0\0\0\0\0abcde\0\0\0\0\0", 20)) {
+	H5_FAILED();
+	HDputs("    Non-terminated string test 2");
+	goto error;
+    }
+    HDfree(buf);
+    if (H5Tclose(src_type)<0) goto error;
+    if (H5Tclose(dst_type)<0) goto error;
+
+    /*
+     * Test C string to Fortran and vice versa.
+     */
+    src_type = mkstr(10, H5T_STR_NULLTERM);
+    dst_type = mkstr(10, H5T_STR_SPACEPAD);
+    buf = (char*)HDcalloc(2, 10);
+    HDmemcpy(buf, "abcdefghi\0abcdefghi\0", 20);
+    if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcdefghi abcdefghi ", 20)) {
+	H5_FAILED();
+	HDputs("    C string to Fortran test 1");
+	goto error;
+    }
+    if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcdefghi\0abcdefghi\0", 20)) {
+	H5_FAILED();
+	HDputs("    Fortran to C string test 1");
+	goto error;
+    }
+    if (H5Tclose(dst_type)<0) goto error;
+    dst_type = mkstr(5, H5T_STR_SPACEPAD);
+    HDmemcpy(buf, "abcdefgh\0\0abcdefgh\0\0", 20);
+    if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcdeabcdeabcdefgh\0\0", 20)) {
+	H5_FAILED();
+	HDputs("    C string to Fortran test 2");
+	goto error;
+    }
+    if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcde\0\0\0\0\0abcde\0\0\0\0\0", 20)) {
+	H5_FAILED();
+	HDputs("    Fortran to C string test 2");
+	goto error;
+    }
+    if (H5Tclose(src_type)<0) goto error;
+    if (H5Tclose(dst_type)<0) goto error;
+    src_type = mkstr(5, H5T_STR_NULLTERM);
+    dst_type = mkstr(10, H5T_STR_SPACEPAD);
+    HDmemcpy(buf, "abcd\0abcd\0xxxxxxxxxx", 20);
+    if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcd      abcd      ", 20)) {
+	H5_FAILED();
+	HDputs("    C string to Fortran test 3");
+	goto error;
+    }
+    if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcd\0abcd\0abcd      ", 20)) {
+	H5_FAILED();
+	HDputs("    Fortran to C string test 3");
+	goto error;
+    }
+    HDfree(buf);
+    if (H5Tclose(src_type)<0) goto error;
+    if (H5Tclose(dst_type)<0) goto error;
+
+    /*
+     * Test C buffer to Fortran and vice versa.
+     */
+    src_type = mkstr(10, H5T_STR_NULLPAD);
+    dst_type = mkstr(10, H5T_STR_SPACEPAD);
+    buf = (char*)HDcalloc(2, 10);
+    HDmemcpy(buf, "abcdefghijabcdefghij", 20);
+    if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcdefghijabcdefghij", 20)) {
+	H5_FAILED();
+	HDputs("    C buffer to Fortran test 1");
+	goto error;
+    }
+    if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcdefghijabcdefghij", 20)) {
+	H5_FAILED();
+	HDputs("    Fortran to C buffer test 1");
+	goto error;
+    }
+    if (H5Tclose(dst_type)<0) goto error;
+    dst_type = mkstr(5, H5T_STR_SPACEPAD);
+    HDmemcpy(buf, "abcdefgh\0\0abcdefgh\0\0", 20);
+    if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcdeabcdeabcdefgh\0\0", 20)) {
+	H5_FAILED();
+	HDputs("    C buffer to Fortran test 2");
+	goto error;
+    }
+    if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcde\0\0\0\0\0abcde\0\0\0\0\0", 20)) {
+	H5_FAILED();
+	HDputs("    Fortran to C buffer test 2");
+	goto error;
+    }
+    if (H5Tclose(src_type)<0) goto error;
+    if (H5Tclose(dst_type)<0) goto error;
+    src_type = mkstr(5, H5T_STR_NULLPAD);
+    dst_type = mkstr(10, H5T_STR_SPACEPAD);
+    HDmemcpy(buf, "abcd\0abcd\0xxxxxxxxxx", 20);
+    if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcd      abcd      ", 20)) {
+	H5_FAILED();
+	HDputs("    C buffer to Fortran test 3");
+	goto error;
+    }
+    if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (HDmemcmp(buf, "abcd\0abcd\0abcd      ", 20)) {
+	H5_FAILED();
+	HDputs("    Fortran to C buffer test 3");
+	goto error;
+    }
+    HDfree(buf);
+    if (H5Tclose(src_type)<0) goto error;
+    if (H5Tclose(dst_type)<0) goto error;
+
+    PASSED();
+    reset_hdf5();
+    return 0;
+
+ error:
+    reset_hdf5();
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_conv_str_2
+ *
+ * Purpose:	Tests C-to-Fortran and Fortran-to-C string conversion speed.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, August 10, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_conv_str_2(void)
+{
+    char		*buf=NULL, s[80];
+    hid_t		c_type, f_type;
+    const size_t	nelmts = NTESTELEM, ntests=NTESTS;
+    size_t		i, j, nchars;
+    int			ret_value = 1;
+
+    /*
+     * Initialize types and buffer.
+     */
+    c_type = mkstr(8, H5T_STR_NULLPAD);
+    f_type = mkstr(8, H5T_STR_SPACEPAD);
+    buf = (char*)HDcalloc(nelmts, 8);
+    for (i=0; i<nelmts; i++) {
+	nchars = HDrand() % 8;
+	for (j=0; j<nchars; j++)
+	    buf[i*8+j] = 'a' + HDrand()%26;
+	while (j<nchars)
+            buf[i*8+j++] = '\0';
+    }
+
+    /* Do the conversions */
+    for (i=0; i<ntests; i++) {
+	if (ntests>1) {
+	    sprintf(s, "Testing random string conversion speed (test %d/%d)",
+		    (int)(i+1), (int)ntests);
+	} else {
+	    sprintf(s, "Testing random string conversion speed");
+	}
+	printf("%-70s", s);
+	HDfflush(stdout);
+	if (H5Tconvert(c_type, f_type, nelmts, buf, NULL, H5P_DEFAULT)<0)
+            goto error;
+	if (H5Tconvert(f_type, c_type, nelmts, buf, NULL, H5P_DEFAULT)<0)
+            goto error;
+	PASSED();
+    }
+    ret_value = 0;
+
+ error:
+    if (buf) HDfree(buf);
+    reset_hdf5();
+    return ret_value;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_conv_enum_1
+ *
+ * Purpose:	Test conversion speed for enum data types
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, January  5, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_conv_enum_1(void)
+{
+    const size_t nelmts=NTESTELEM;
+    const int	ntests=NTESTS;
+    int		i, val, *buf=NULL;
+    hid_t	t1, t2;
+    char	s[80];
+    int		ret_value = 1;
+
+    /* Build the data types */
+    t1 = H5Tcreate(H5T_ENUM, sizeof(int));
+    t2 = H5Tenum_create(H5T_NATIVE_INT);
+    s[1] = '\0';
+    for (i=0; i<26; i++) {
+	s[0] = 'A'+i;
+	H5Tenum_insert(t1, s, &i);
+	H5Tenum_insert(t2, s, (val=i*1000+i, &val));
+    }
+
+    /* Initialize the buffer */
+    buf = (int*)HDmalloc(nelmts*MAX(H5Tget_size(t1), H5Tget_size(t2)));
+    for (i=0; i<(int)nelmts; i++)
+        buf[i] = HDrand() % 26;
+
+    /* Conversions */
+    for (i=0; i<ntests; i++) {
+	if (ntests>1) {
+	    sprintf(s, "Testing random enum conversion O(N) (test %d/%d)",
+		    i+1, ntests);
+	} else {
+	    sprintf(s, "Testing random enum conversion O(N)");
+	}
+	printf("%-70s", s);
+	HDfflush(stdout);
+	if (H5Tconvert(t1, t2, nelmts, buf, NULL, H5P_DEFAULT)<0) goto error;
+	PASSED();
+    }
+
+    for (i=0; i<ntests; i++) {
+	if (ntests>1) {
+	    sprintf(s, "Testing random enum conversion O(N log N) "
+		    "(test %d/%d)", i+1, ntests);
+	} else {
+	    sprintf(s, "Testing random enum conversion O(N log N)");
+	}
+	printf("%-70s", s);
+	HDfflush(stdout);
+	if (H5Tconvert(t2, t1, nelmts, buf, NULL, H5P_DEFAULT)<0) goto error;
+	PASSED();
+    }
+    ret_value = 0;
+
+ error:
+    H5Tclose(t1);
+    H5Tclose(t2);
+    if (buf) HDfree(buf);
+    reset_hdf5();
+    return ret_value;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_conv_enum_2
+ *
+ * Purpose:     Tests enumeration conversions where source isn't a native type.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Robb Matzke, LLNL, 2003-06-09
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static int
+test_conv_enum_2(void)
+{
+    hid_t       srctype=-1, dsttype=-1, oddsize=-1;
+    int         *data=NULL, i, nerrors=0;
+    const char  *mname[] = { "RED",
+                             "GREEN",
+                             "BLUE",
+                             "YELLOW",
+                             "PINK",
+                             "PURPLE",
+                             "ORANGE",
+                             "WHITE" };
+
+    TESTING("non-native enumeration type conversion");
+
+    /* Source enum type */
+    oddsize = H5Tcopy(H5T_STD_I32BE);
+    H5Tset_size(oddsize, 3); /*reduce to 24 bits, not corresponding to any native size*/
+    srctype = H5Tenum_create(oddsize);
+    for (i=7; i>=0; --i) {
+        char pattern[3];
+        pattern[2] = i;
+        pattern[0] = pattern[1] = 0;
+        H5Tenum_insert(srctype, mname[i], pattern);
+    }
+
+    /* Destination enum type */
+    dsttype = H5Tenum_create(H5T_NATIVE_INT);
+    assert(H5Tget_size(dsttype)>H5Tget_size(srctype));
+    for (i=0; i<8; i++)
+        H5Tenum_insert(dsttype, mname[i], &i);
+
+    /* Source data */
+    data = (int*)malloc(NTESTELEM*sizeof(int));
+    for (i=0; i<NTESTELEM; i++) {
+        ((char*)data)[i*3+2] = i % 8;
+        ((char*)data)[i*3+0] = 0;
+        ((char*)data)[i*3+1] = 0;
+    }
+
+    /* Convert to destination type */
+    H5Tconvert(srctype, dsttype, NTESTELEM, data, NULL, H5P_DEFAULT);
+
+    /* Check results */
+    for (i=0; i<NTESTELEM; i++) {
+        if (data[i] != i%8) {
+            if (!nerrors++) {
+                H5_FAILED();
+                printf("element %d is %d but should have been  %d\n",
+                       i, data[i], i%8);
+            }
+        }
+    }
+
+    /* Cleanup */
+    free(data);
+    H5Tclose(srctype);
+    H5Tclose(dsttype);
+    H5Tclose(oddsize);
+
+    /* Failure */
+    if (nerrors) {
+        printf("total of %d conversion errors out of %d elements for enums\n",
+               nerrors, NTESTELEM);
+        return 1;
+    }
+
+    PASSED();
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_conv_bitfield
+ *
+ * Purpose:	Test bitfield conversions.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 20, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_conv_bitfield(void)
+{
+    unsigned char	buf[4];
+    hid_t		st=-1, dt=-1;
+
+    TESTING("bitfield conversions");
+
+    /*
+     * First test a simple bitfield conversion:
+     *                   1010101010101010
+     *   ________________1010101010101010
+     */
+    st = H5Tcopy(H5T_STD_B16LE);
+    dt = H5Tcopy(H5T_STD_B32LE);
+    buf[0] = buf[1] = 0xAA;
+    buf[2] = buf[3] = 0x55; /*irrelevant*/
+    if (H5Tconvert(st, dt, 1, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (buf[0]!=0xAA || buf[1]!=0xAA || buf[2]!=0 || buf[3]!=0) {
+	H5_FAILED();
+	printf("    s=0xaaaa, d=0x%02x%02x%02x%02x (test 1)\n",
+	       buf[3], buf[2], buf[1], buf[0]);
+	goto error;
+    }
+
+    /*
+     * Test2: Offset a 12-byte value in the middle of a 16 and 32 byte
+     * field.
+     *              __10 1010 1010 10__
+     *    ____ ____ __10 1010 1010 10__ ____ ____
+     */
+    H5Tset_precision(st, 12);
+    H5Tset_offset(st, 2);
+    H5Tset_precision(dt, 12);
+    H5Tset_offset(dt, 10);
+    buf[0] = 0xA8; buf[1] = 0x2A; buf[2] = buf[3] = 0;
+    if (H5Tconvert(st, dt, 1, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (buf[0]!=0 || buf[1]!=0xA8 || buf[2]!=0x2A || buf[3]!=0) {
+	H5_FAILED();
+	printf("    s=0x2AA8 d=0x%02x%02x%02x%02x (test 2)\n",
+	       buf[3], buf[2], buf[1], buf[0]);
+	goto error;
+    }
+
+    /*
+     * Same as previous test except unused bits of the destination will
+     * be filled with ones.
+     */
+    H5Tset_pad(dt, H5T_PAD_ONE, H5T_PAD_ONE);
+    buf[0] = 0xA8; buf[1] = 0x2A; buf[2] = buf[3] = 0;
+    if (H5Tconvert(st, dt, 1, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (buf[0]!=0xff || buf[1]!=0xAB || buf[2]!=0xEA || buf[3]!=0xff) {
+	H5_FAILED();
+	printf("    s=0x2AA8 d=0x%02x%02x%02x%02x (test 3)\n",
+	       buf[3], buf[2], buf[1], buf[0]);
+	goto error;
+    }
+
+    H5Tclose(st);
+    H5Tclose(dt);
+    PASSED();
+    reset_hdf5();
+    return 0;
+
+ error:
+    H5Tclose(st);
+    H5Tclose(dt);
+    reset_hdf5();
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	convert_opaque
+ *
+ * Purpose:	A fake opaque conversion functions
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, June  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+convert_opaque(hid_t UNUSED st, hid_t UNUSED dt, H5T_cdata_t *cdata,
+	       size_t UNUSED nelmts, size_t UNUSED buf_stride,
+               size_t UNUSED bkg_stride, void UNUSED *_buf,
+	       void UNUSED *bkg, hid_t UNUSED dset_xfer_plid)
+{
+    if (H5T_CONV_CONV==cdata->command) num_opaque_conversions_g++;
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_opaque
+ *
+ * Purpose:	Driver function to test opaque datatypes
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Raymond Lu
+ *              June 2, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_opaque(void)
+{
+    int num_errors = 0;
+
+    TESTING("opaque datatypes");
+
+    /* Test opaque types with tags */
+    num_errors += opaque_check(0);
+    /* Test opaque types without tag */
+    num_errors += opaque_check(1);
+    /* Test named opaque types with very long tag */
+    num_errors += opaque_long();
+
+    if(num_errors)
+        goto error;
+
+    PASSED();
+    return 0;
+
+ error:
+    H5_FAILED();
+    return num_errors;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	opaque_check
+ *
+ * Purpose:	Test opaque datatypes
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, May 20, 1999
+ *
+ * Modifications:
+ *              Raymond Lu
+ *              June 2, 2004
+ *              Made tag for one opaque type optional.
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+opaque_check(int tag_it)
+{
+#define OPAQUE_NELMTS 1000
+    hid_t	st=-1, dt=-1;
+    herr_t	status;
+    char	buf[1]; /*not really used*/
+    int		saved;
+
+    saved = num_opaque_conversions_g = 0;
+
+    /* Build source and destination types */
+    if ((st=H5Tcreate(H5T_OPAQUE, 4))<0) goto error;
+    if (H5Tset_tag(st, "opaque source type")<0) goto error;
+
+    if ((dt=H5Tcreate(H5T_OPAQUE, 4))<0) goto error;
+    if (tag_it) {
+        if (H5Tset_tag(dt, "opaque destination type")<0)
+            goto error;
+    }
+
+    /* Make sure that we can't convert between the types yet */
+    H5E_BEGIN_TRY {
+	status = H5Tconvert(st, dt, OPAQUE_NELMTS, buf, NULL, H5P_DEFAULT);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	printf("    opaque conversion should have failed but succeeded\n");
+	goto error;
+    }
+
+    /* Register a conversion function */
+    if (H5Tregister(H5T_PERS_HARD, "o_test", st, dt, convert_opaque)<0)
+	goto error;
+
+    /* Try the conversion again, this time it should work */
+    if (H5Tconvert(st, dt, OPAQUE_NELMTS, buf, NULL, H5P_DEFAULT)<0) goto error;
+    if (saved+1 != num_opaque_conversions_g) {
+	H5_FAILED();
+	printf("    unexpected number of opaque conversions\n");
+	goto error;
+    }
+
+    /* Unregister conversion function */
+    if (H5Tunregister(H5T_PERS_HARD, "o_test", st, dt, convert_opaque)<0)
+	goto error;
+
+    H5Tclose(st);
+    H5Tclose(dt);
+    return 0;
+
+ error:
+    if (st>0) H5Tclose(st);
+    if (dt>0) H5Tclose(dt);
+    H5_FAILED();
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	opaque_long
+ *
+ * Purpose:	Test named (committed) opaque datatypes w/very long tags
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, June 14, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+opaque_long(void)
+{
+    char 	*long_tag = NULL;
+    hid_t	dt = -1;
+    herr_t      ret;
+
+    /* Build opaque type */
+    if ((dt=H5Tcreate(H5T_OPAQUE, 4))<0) TEST_ERROR
+
+    /* Create long tag */
+    long_tag = HDmalloc(16384+1);
+    HDmemset(long_tag, 'a', 16384);
+    long_tag[16384] = '\0';
+
+    /* Set opaque type's tag */
+    H5E_BEGIN_TRY {
+	ret = H5Tset_tag(dt, long_tag);
+    } H5E_END_TRY;
+    if(ret!=FAIL) TEST_ERROR
+
+    /* Close datatype */
+    if(H5Tclose(dt) < 0) TEST_ERROR
+
+    /* Release memory for tag */
+    HDfree(long_tag);
+
+    return 0;
+
+ error:
+    if (dt>0) H5Tclose(dt);
+    if (long_tag != NULL) HDfree(long_tag);
+    H5_FAILED();
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_conv_int
+ *
+ * Purpose:	Test atomic number conversions.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, June 10, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_conv_int (void)
+{
+    unsigned char	byte[4];
+
+    /*---------------------------------------------------------------------
+     * Test some specific overflow/underflow cases.
+     *---------------------------------------------------------------------
+     */
+    TESTING("integer overflow conversions");
+
+    /* (unsigned)0x80000000 -> (unsigned)0xffff */
+    byte[0] = byte[1] = byte[2] = 0;
+    byte[3] = 0x80;
+    if (H5Tconvert (H5T_STD_U32LE, H5T_STD_U16LE, 1, byte, NULL, H5P_DEFAULT)<0) {
+	goto error;
+    }
+    if (byte[0]!=0xff || byte[1]!=0xff) {
+	H5_FAILED();
+	printf("    src: 0x80000000 unsigned\n");
+	printf("    dst: 0x%02x%02x     unsigned\n", byte[1], byte[0]);
+	printf("    ans: 0xffff     unsigned\n");
+	goto error;
+    }
+
+    /* (unsigned)0xffffffff -> (signed)0x7fff */
+    byte[0] = byte[1] = byte[2] = byte[3] = 0xff;
+    if (H5Tconvert (H5T_STD_U32LE, H5T_STD_I16LE, 1, byte, NULL, H5P_DEFAULT)<0) {
+	goto error;
+    }
+    if (byte[0]!=0xff || byte[1]!=0x7f) {
+	H5_FAILED();
+	printf("    src: 0xffffffff unsigned\n");
+	printf("    dst: 0x%02x%02x     signed\n", byte[1], byte[0]);
+	printf("    ans: 0x7fff     signed\n");
+	goto error;
+    }
+
+    /* (signed)0xffffffff -> (unsigned)0x0000 */
+    byte[0] = byte[1] = byte[2] = byte[3] = 0xff;
+    if (H5Tconvert (H5T_STD_I32LE, H5T_STD_U16LE, 1, byte, NULL, H5P_DEFAULT)<0) {
+	goto error;
+    }
+    if (byte[0]!=0x00 || byte[1]!=0x00) {
+	H5_FAILED();
+	printf("    src: 0xffffffff signed\n");
+	printf("    dst: 0x%02x%02x     unsigned\n", byte[1], byte[0]);
+	printf("    ans: 0x0000     unsigned\n");
+	goto error;
+    }
+
+    /* (signed)0x7fffffff -> (unsigned)0xffff */
+    byte[0] = byte[1] = byte[2] = 0xff;
+    byte[3] = 0x7f;
+    if (H5Tconvert (H5T_STD_I32LE, H5T_STD_U16LE, 1, byte, NULL, H5P_DEFAULT)<0) {
+	goto error;
+    }
+    if (byte[0]!=0xff || byte[1]!=0xff) {
+	H5_FAILED();
+	printf("    src: 0x7fffffff signed\n");
+	printf("    dst: 0x%02x%02x     unsigned\n", byte[1], byte[0]);
+	printf("    ans: 0xffff     unsigned\n");
+	goto error;
+    }
+
+    /* (signed)0x7fffffff -> (signed)0x7fff */
+    byte[0] = byte[1] = byte[2] = 0xff;
+    byte[3] = 0x7f;
+    if (H5Tconvert (H5T_STD_I32LE, H5T_STD_I16LE, 1, byte, NULL, H5P_DEFAULT)<0) {
+	goto error;
+    }
+    if (byte[0]!=0xff || byte[1]!=0x7f) {
+	H5_FAILED();
+	printf("    src: 0x7fffffff signed\n");
+	printf("    dst: 0x%02x%02x     signed\n", byte[1], byte[0]);
+	printf("    ans: 0x7fff     signed\n");
+	goto error;
+    }
+
+    /* (signed)0xbfffffff -> (signed)0x8000 */
+    byte[0] = byte[1] = byte[2] = 0xff;
+    byte[3] = 0xbf;
+    if (H5Tconvert (H5T_STD_I32LE, H5T_STD_I16LE, 1, byte, NULL, H5P_DEFAULT)<0) {
+	goto error;
+    }
+    if (byte[0]!=0x00 || byte[1]!=0x80) {
+	H5_FAILED();
+	printf("    src: 0xbfffffff signed\n");
+	printf("    dst: 0x%02x%02x     signed\n", byte[1], byte[0]);
+	printf("    ans: 0x8000     signed\n");
+	goto error;
+    }
+
+    PASSED();
+    reset_hdf5();
+    return 0;
+
+ error:
+    reset_hdf5();
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_conv_int_1
+ *
+ * Purpose:	Test conversion of random integer values from SRC to DST.
+ *		These types should be any combination of:
+ *
+ * 			H5T_NATIVE_SCHAR	H5T_NATIVE_UCHAR
+ *			H5T_NATIVE_SHORT	H5T_NATIVE_USHORT
+ *			H5T_NATIVE_INT		H5T_NATIVE_UINT
+ *			H5T_NATIVE_LONG		H5T_NATIVE_ULONG
+ *			H5T_NATIVE_LLONG	H5T_NATIVE_ULLONG
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_conv_int_1(const char *name, hid_t src, hid_t dst)
+{
+    const size_t	ntests=NTESTS;		/*number of tests	*/
+    const size_t	nelmts=NTESTELEM;		/*num values per test	*/
+    const size_t	max_fails=8;		/*max number of failures*/
+    size_t		fails_all_tests=0;	/*number of failures	*/
+    size_t		fails_this_test;	/*fails for this test	*/
+    char		str[256];		/*hello string		*/
+    int_t		src_type, dst_type;	/*data types		*/
+    const char		*src_type_name=NULL;	/*source type name	*/
+    const char		*dst_type_name=NULL;	/*destination type name	*/
+    int			endian;			/*machine endianess	*/
+    size_t		src_size, dst_size;	/*type sizes		*/
+    unsigned char	*buf=NULL;		/*buffer for conversion	*/
+    unsigned char	*saved=NULL;		/*original values	*/
+    size_t		i, j, k;		/*counters		*/
+    unsigned char	*hw=NULL;		/*hardware conv result	*/
+    unsigned char	src_bits[32];		/*src value in LE order	*/
+    unsigned char	dst_bits[32];		/*dest value in LE order*/
+    size_t		src_nbits;		/*source length in bits	*/
+    size_t		dst_nbits;		/*dst length in bits	*/
+    H5T_sign_t          src_sign;               /*source sign type      */
+    H5T_sign_t          dst_sign;               /*dst sign type         */
+    void		*aligned=NULL;		/*aligned temp buffer	*/
+    signed char		hw_char;
+    unsigned char	hw_uchar;
+    short		hw_short;
+    unsigned short	hw_ushort;
+    int			hw_int;
+    unsigned		hw_uint;
+    long		hw_long;
+    unsigned long	hw_ulong;
+    long_long		hw_llong;
+    unsigned long_long	hw_ullong;
+
+
+
+    /* What are the names of the source and destination types */
+    if (H5Tequal(src, H5T_NATIVE_SCHAR)) {
+	src_type_name = "signed char";
+	src_type = INT_CHAR;
+    } else if (H5Tequal(src, H5T_NATIVE_UCHAR)) {
+	src_type_name = "unsigned char";
+	src_type = INT_UCHAR;
+    } else if (H5Tequal(src, H5T_NATIVE_SHORT)) {
+	src_type_name = "short";
+	src_type = INT_SHORT;
+    } else if (H5Tequal(src, H5T_NATIVE_USHORT)) {
+	src_type_name = "unsigned short";
+	src_type = INT_USHORT;
+    } else if (H5Tequal(src, H5T_NATIVE_INT)) {
+	src_type_name = "int";
+	src_type = INT_INT;
+    } else if (H5Tequal(src, H5T_NATIVE_UINT)) {
+	src_type_name = "unsigned int";
+	src_type = INT_UINT;
+    } else if (H5Tequal(src, H5T_NATIVE_LONG)) {
+	src_type_name = "long";
+	src_type = INT_LONG;
+    } else if (H5Tequal(src, H5T_NATIVE_ULONG)) {
+	src_type_name = "unsigned long";
+	src_type = INT_ULONG;
+    } else if (H5Tequal(src, H5T_NATIVE_LLONG)) {
+	src_type_name = "long long";
+	src_type = INT_LLONG;
+    } else if (H5Tequal(src, H5T_NATIVE_ULLONG)) {
+	src_type_name = "unsigned long long";
+	src_type = INT_ULLONG;
+    } else {
+	src_type_name = "UNKNOWN";
+	src_type = INT_OTHER;
+    }
+
+    if (H5Tequal(dst, H5T_NATIVE_SCHAR)) {
+	dst_type_name = "signed char";
+	dst_type = INT_CHAR;
+    } else if (H5Tequal(dst, H5T_NATIVE_UCHAR)) {
+	dst_type_name = "unsigned char";
+	dst_type = INT_UCHAR;
+    } else if (H5Tequal(dst, H5T_NATIVE_SHORT)) {
+	dst_type_name = "short";
+	dst_type = INT_SHORT;
+    } else if (H5Tequal(dst, H5T_NATIVE_USHORT)) {
+	dst_type_name = "unsigned short";
+	dst_type = INT_USHORT;
+    } else if (H5Tequal(dst, H5T_NATIVE_INT)) {
+	dst_type_name = "int";
+	dst_type = INT_INT;
+    } else if (H5Tequal(dst, H5T_NATIVE_UINT)) {
+	dst_type_name = "unsigned int";
+	dst_type = INT_UINT;
+    } else if (H5Tequal(dst, H5T_NATIVE_LONG)) {
+	dst_type_name = "long";
+	dst_type = INT_LONG;
+    } else if (H5Tequal(dst, H5T_NATIVE_ULONG)) {
+	dst_type_name = "unsigned long";
+	dst_type = INT_ULONG;
+    } else if (H5Tequal(dst, H5T_NATIVE_LLONG)) {
+	dst_type_name = "long long";
+	dst_type = INT_LLONG;
+    } else if (H5Tequal(dst, H5T_NATIVE_ULLONG)) {
+	dst_type_name = "unsigned long long";
+	dst_type = INT_ULLONG;
+    } else {
+	dst_type_name = "UNKNOWN";
+	dst_type = INT_OTHER;
+    }
+
+    /* Sanity checks */
+    if (INT_OTHER==src_type || INT_OTHER==dst_type) {
+	sprintf(str, "Testing random %s %s -> %s conversions",
+		name, src_type_name, dst_type_name);
+	printf("%-70s", str);
+	H5_FAILED();
+	HDputs("    Unknown data type.");
+	goto error;
+    }
+
+    /* Allocate buffers */
+    endian = H5Tget_order(H5T_NATIVE_INT);
+    src_size = H5Tget_size(src);
+    dst_size = H5Tget_size(dst);
+    src_nbits = H5Tget_precision(src); /* not 8*src_size, esp on J90 - QAK */
+    dst_nbits = H5Tget_precision(dst); /* not 8*dst_size, esp on J90 - QAK */
+    src_sign = H5Tget_sign(src);
+    dst_sign = H5Tget_sign(dst);
+    buf = aligned_malloc(nelmts*MAX(src_size, dst_size));
+    saved = aligned_malloc(nelmts*MAX(src_size, dst_size));
+    aligned = HDmalloc(sizeof(long_long));
+#ifdef SHOW_OVERFLOWS
+    noverflows_g = 0;
+#endif
+
+    /* The tests */
+    for (i=0; i<ntests; i++) {
+	if (ntests>1) {
+	    sprintf(str, "Testing random %s %s -> %s conversions (test %d/%d)",
+		    name, src_type_name, dst_type_name, (int)i+1, (int)ntests);
+	} else {
+	    sprintf(str, "Testing random %s %s -> %s conversions",
+		    name, src_type_name, dst_type_name);
+	}
+	printf("%-70s", str);
+	HDfflush(stdout);
+	fails_this_test=0;
+
+	/*
+	 * Initialize the source buffers to random bits.  The `buf' buffer
+	 * will be used for the conversion while the `saved' buffer will be
+	 * sed for the comparison later.
+	 */
+	for (j=0; j<nelmts*src_size; j++)
+            buf[j] = saved[j] = HDrand();
+
+	/* Perform the conversion */
+	if (H5Tconvert(src, dst, nelmts, buf, NULL, H5P_DEFAULT)<0)
+            goto error;
+
+	/* Check the results from the library against hardware */
+	for (j=0; j<nelmts; j++) {
+	    if (INT_CHAR==dst_type) {
+		hw = (unsigned char*)&hw_char;
+		switch (src_type) {
+		case INT_CHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(char), sizeof(char));
+		    hw_char = (char)(*((char*)aligned));
+		    break;
+		case INT_UCHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned char), sizeof(unsigned char));
+		    hw_char = (char)(*((unsigned char*)aligned));
+		    break;
+		case INT_SHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(short), sizeof(short));
+		    hw_char = (char)(*((short*)aligned));
+		    break;
+		case INT_USHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned short), sizeof(unsigned short));
+		    hw_char = (char)(*((unsigned short*)aligned));
+		    break;
+		case INT_INT:
+		    HDmemcpy(aligned, saved+j*sizeof(int), sizeof(int));
+		    hw_char = (char)(*((int*)aligned));
+		    break;
+		case INT_UINT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned), sizeof(unsigned));
+		    hw_char = (char)(*((unsigned*)aligned));
+		    break;
+		case INT_LONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long), sizeof(long));
+		    hw_char = (char)(*((long*)aligned));
+		    break;
+		case INT_ULONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long), sizeof(unsigned long));
+		    hw_char = (char)(*((unsigned long*)aligned));
+		    break;
+		case INT_LLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long_long), sizeof(long_long));
+		    hw_char = (char)(*((long_long*)aligned));
+		    break;
+		case INT_ULLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long_long), sizeof(unsigned long_long));
+		    hw_char = (char)(*((unsigned long_long*)aligned));
+		    break;
+		case INT_OTHER:
+		    break;
+		}
+	    } else if (INT_UCHAR==dst_type) {
+		hw = (unsigned char*)&hw_uchar;
+		switch (src_type) {
+		case INT_CHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(char), sizeof(char));
+		    hw_uchar = (unsigned char)(*((char*)aligned));
+		    break;
+		case INT_UCHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned char), sizeof(unsigned char));
+		    hw_uchar = (unsigned char)(*((unsigned char*)aligned));
+		    break;
+		case INT_SHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(short), sizeof(short));
+		    hw_uchar = (unsigned char)(*((short*)aligned));
+		    break;
+		case INT_USHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned short), sizeof(unsigned short));
+		    hw_uchar = (unsigned char)(*((unsigned short*)aligned));
+		    break;
+		case INT_INT:
+		    HDmemcpy(aligned, saved+j*sizeof(int), sizeof(int));
+		    hw_uchar = (unsigned char)(*((int*)aligned));
+		    break;
+		case INT_UINT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned), sizeof(unsigned));
+		    hw_uchar = (unsigned char)(*((unsigned*)aligned));
+		    break;
+		case INT_LONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long), sizeof(long));
+		    hw_uchar = (unsigned char)(*((long*)aligned));
+		    break;
+		case INT_ULONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long), sizeof(unsigned long));
+		    hw_uchar = (unsigned char)(*((unsigned long*)aligned));
+		    break;
+		case INT_LLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long_long), sizeof(long_long));
+		    hw_uchar = (unsigned char)(*((long_long*)aligned));
+		    break;
+		case INT_ULLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long_long), sizeof(unsigned long_long));
+		    hw_uchar = (unsigned char)(*((unsigned long_long*)aligned));
+		    break;
+		case INT_OTHER:
+		    break;
+		}
+	    } else if (INT_SHORT==dst_type) {
+		hw = (unsigned char*)&hw_short;
+		switch (src_type) {
+		case INT_CHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(char), sizeof(char));
+		    hw_short = (short)(*((char*)aligned));
+		    break;
+		case INT_UCHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned char), sizeof(unsigned char));
+		    hw_short = (short)(*((unsigned char*)aligned));
+		    break;
+		case INT_SHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(short), sizeof(short));
+		    hw_short = (short)(*((short*)aligned));
+		    break;
+		case INT_USHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned short), sizeof(unsigned short));
+		    hw_short = (short)(*((unsigned short*)aligned));
+		    break;
+		case INT_INT:
+		    HDmemcpy(aligned, saved+j*sizeof(int), sizeof(int));
+		    hw_short = (short)(*((int*)aligned));
+		    break;
+		case INT_UINT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned), sizeof(unsigned));
+		    hw_short = (short)(*((unsigned*)aligned));
+		    break;
+		case INT_LONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long), sizeof(long));
+		    hw_short = (short)(*((long*)aligned));
+		    break;
+		case INT_ULONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long), sizeof(unsigned long));
+		    hw_short = (short)(*((unsigned long*)aligned));
+		    break;
+		case INT_LLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long_long), sizeof(long_long));
+		    hw_short = (short)(*((long_long*)aligned));
+		    break;
+		case INT_ULLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long_long), sizeof(unsigned long_long));
+		    hw_short = (short)(*((unsigned long_long*)aligned));
+		    break;
+		case INT_OTHER:
+		    break;
+		}
+	    } else if (INT_USHORT==dst_type) {
+		hw = (unsigned char*)&hw_ushort;
+		switch (src_type) {
+		case INT_CHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(char), sizeof(char));
+		    hw_ushort = (unsigned short)(*((char*)aligned));
+		    break;
+		case INT_UCHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned char), sizeof(unsigned char));
+		    hw_ushort = (unsigned short)(*((unsigned char*)aligned));
+		    break;
+		case INT_SHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(short), sizeof(short));
+		    hw_ushort = (unsigned short)(*((short*)aligned));
+		    break;
+		case INT_USHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned short), sizeof(unsigned short));
+		    hw_ushort = (unsigned short)(*((unsigned short*)aligned));
+		    break;
+		case INT_INT:
+		    HDmemcpy(aligned, saved+j*sizeof(int), sizeof(int));
+		    hw_ushort = (unsigned short)(*((int*)aligned));
+		    break;
+		case INT_UINT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned), sizeof(unsigned));
+		    hw_ushort = (unsigned short)(*((unsigned*)aligned));
+		    break;
+		case INT_LONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long), sizeof(long));
+		    hw_ushort = (unsigned short)(*((long*)aligned));
+		    break;
+		case INT_ULONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long), sizeof(unsigned long));
+		    hw_ushort = (unsigned short)(*((unsigned long*)aligned));
+		    break;
+		case INT_LLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long_long), sizeof(long_long));
+		    hw_ushort = (unsigned short)(*((long_long*)aligned));
+		    break;
+		case INT_ULLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long_long), sizeof(unsigned long_long));
+		    hw_ushort = (unsigned short)(*((unsigned long_long*)aligned));
+		    break;
+		case INT_OTHER:
+		    break;
+		}
+	    } else if (INT_INT==dst_type) {
+		hw = (unsigned char*)&hw_int;
+		switch (src_type) {
+		case INT_CHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(char), sizeof(char));
+		    hw_int = (int)(*((char*)aligned));
+		    break;
+		case INT_UCHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned char), sizeof(unsigned char));
+		    hw_int = (int)(*((unsigned char*)aligned));
+		    break;
+		case INT_SHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(short), sizeof(short));
+		    hw_int = (int)(*((short*)aligned));
+		    break;
+		case INT_USHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned short), sizeof(unsigned short));
+		    hw_int = (int)(*((unsigned short*)aligned));
+		    break;
+		case INT_INT:
+		    HDmemcpy(aligned, saved+j*sizeof(int), sizeof(int));
+		    hw_int = (int)(*((int*)aligned));
+		    break;
+		case INT_UINT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned), sizeof(unsigned));
+		    hw_int = (int)(*((unsigned*)aligned));
+		    break;
+		case INT_LONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long), sizeof(long));
+		    hw_int = (int)(*((long*)aligned));
+		    break;
+		case INT_ULONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long), sizeof(unsigned long));
+		    hw_int = (int)(*((unsigned long*)aligned));
+		    break;
+		case INT_LLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long_long), sizeof(long_long));
+		    hw_int = (int)(*((long_long*)aligned));
+		    break;
+		case INT_ULLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long_long), sizeof(unsigned long_long));
+		    hw_int = (int)(*((unsigned long_long*)aligned));
+		    break;
+		case INT_OTHER:
+		    break;
+		}
+	    } else if (INT_UINT==dst_type) {
+		hw = (unsigned char*)&hw_uint;
+		switch (src_type) {
+		case INT_CHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(char), sizeof(char));
+		    hw_uint = (unsigned int)(*((char*)aligned));
+		    break;
+		case INT_UCHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned char), sizeof(unsigned char));
+		    hw_uint = (unsigned int)(*((unsigned char*)aligned));
+		    break;
+		case INT_SHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(short), sizeof(short));
+		    hw_uint = (unsigned int)(*((short*)aligned));
+		    break;
+		case INT_USHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned short), sizeof(unsigned short));
+		    hw_uint = (unsigned int)(*((unsigned short*)aligned));
+		    break;
+		case INT_INT:
+		    HDmemcpy(aligned, saved+j*sizeof(int), sizeof(int));
+		    hw_uint = (unsigned int)(*((int*)aligned));
+		    break;
+		case INT_UINT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned), sizeof(unsigned));
+		    hw_uint = (unsigned int)(*((unsigned*)aligned));
+		    break;
+		case INT_LONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long), sizeof(long));
+		    hw_uint = (unsigned int)(*((long*)aligned));
+		    break;
+		case INT_ULONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long), sizeof(unsigned long));
+		    hw_uint = (unsigned int)(*((unsigned long*)aligned));
+		    break;
+		case INT_LLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long_long), sizeof(long_long));
+		    hw_uint = (unsigned int)(*((long_long*)aligned));
+		    break;
+		case INT_ULLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long_long), sizeof(unsigned long_long));
+		    hw_uint = (unsigned int)(*((unsigned long_long*)aligned));
+		    break;
+		case INT_OTHER:
+		    break;
+		}
+	    } else if (INT_LONG==dst_type) {
+		hw = (unsigned char*)&hw_long;
+		switch (src_type) {
+		case INT_CHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(char), sizeof(char));
+		    hw_long = (long int)(*((char*)aligned));
+		    break;
+		case INT_UCHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned char), sizeof(unsigned char));
+		    hw_long = (long int)(*((unsigned char*)aligned));
+		    break;
+		case INT_SHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(short), sizeof(short));
+		    hw_long = (long int)(*((short*)aligned));
+		    break;
+		case INT_USHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned short), sizeof(unsigned short));
+		    hw_long = (long int)(*((unsigned short*)aligned));
+		    break;
+		case INT_INT:
+		    HDmemcpy(aligned, saved+j*sizeof(int), sizeof(int));
+		    hw_long = (long int)(*((int*)aligned));
+		    break;
+		case INT_UINT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned), sizeof(unsigned));
+		    hw_long = (long int)(*((unsigned*)aligned));
+		    break;
+		case INT_LONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long), sizeof(long));
+		    hw_long = (long int)(*((long*)aligned));
+		    break;
+		case INT_ULONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long), sizeof(unsigned long));
+		    hw_long = (long int)(*((unsigned long*)aligned));
+		    break;
+		case INT_LLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long_long), sizeof(long_long));
+		    hw_long = (long int)(*((long_long*)aligned));
+		    break;
+		case INT_ULLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long_long), sizeof(unsigned long_long));
+		    hw_long = (long int)(*((unsigned long_long*)aligned));
+		    break;
+		case INT_OTHER:
+		    break;
+		}
+	    } else if (INT_ULONG==dst_type) {
+		hw = (unsigned char*)&hw_ulong;
+		switch (src_type) {
+		case INT_CHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(char), sizeof(char));
+		    hw_ulong = (unsigned long)(*((char*)aligned));
+		    break;
+		case INT_UCHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned char), sizeof(unsigned char));
+		    hw_ulong = (unsigned long)(*((unsigned char*)aligned));
+		    break;
+		case INT_SHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(short), sizeof(short));
+		    hw_ulong = (unsigned long)(*((short*)aligned));
+		    break;
+		case INT_USHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned short), sizeof(unsigned short));
+		    hw_ulong = (unsigned long)(*((unsigned short*)aligned));
+		    break;
+		case INT_INT:
+		    HDmemcpy(aligned, saved+j*sizeof(int), sizeof(int));
+		    hw_ulong = (unsigned long)(*((int*)aligned));
+		    break;
+		case INT_UINT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned), sizeof(unsigned));
+		    hw_ulong = (unsigned long)(*((unsigned*)aligned));
+		    break;
+		case INT_LONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long), sizeof(long));
+		    hw_ulong = (unsigned long)(*((long*)aligned));
+		    break;
+		case INT_ULONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long), sizeof(unsigned long));
+		    hw_ulong = (unsigned long)(*((unsigned long*)aligned));
+		    break;
+		case INT_LLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long_long), sizeof(long_long));
+		    hw_ulong = (unsigned long)(*((long_long*)aligned));
+		    break;
+		case INT_ULLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long_long), sizeof(unsigned long_long));
+		    hw_ulong = (unsigned long)(*((unsigned long_long*)aligned));
+		    break;
+		case INT_OTHER:
+		    break;
+		}
+	    } else if (INT_LLONG==dst_type) {
+		hw = (unsigned char*)&hw_llong;
+		switch (src_type) {
+		case INT_CHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(char), sizeof(char));
+		    hw_llong = (long_long)(*((char*)aligned));
+		    break;
+		case INT_UCHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned char), sizeof(unsigned char));
+		    hw_llong = (long_long)(*((unsigned char*)aligned));
+		    break;
+		case INT_SHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(short), sizeof(short));
+		    hw_llong = (long_long)(*((short*)aligned));
+		    break;
+		case INT_USHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned short), sizeof(unsigned short));
+		    hw_llong = (long_long)(*((unsigned short*)aligned));
+		    break;
+		case INT_INT:
+		    HDmemcpy(aligned, saved+j*sizeof(int), sizeof(int));
+		    hw_llong = (long_long)(*((int*)aligned));
+		    break;
+		case INT_UINT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned), sizeof(unsigned));
+		    hw_llong = (long_long)(*((unsigned*)aligned));
+		    break;
+		case INT_LONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long), sizeof(long));
+		    hw_llong = (long_long)(*((long*)aligned));
+		    break;
+		case INT_ULONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long), sizeof(unsigned long));
+		    hw_llong = (long_long)(*((unsigned long*)aligned));
+		    break;
+		case INT_LLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long_long), sizeof(long_long));
+		    hw_llong = (long_long)(*((long_long*)aligned));
+		    break;
+		case INT_ULLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long_long), sizeof(unsigned long_long));
+		    hw_llong = (long_long)(*((unsigned long_long*)aligned));
+		    break;
+		case INT_OTHER:
+		    break;
+		}
+	    } else if (INT_ULLONG==dst_type) {
+		hw = (unsigned char*)&hw_ullong;
+		switch (src_type) {
+		case INT_CHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(signed char), sizeof(signed char));
+		    hw_ullong = (unsigned long_long)(*((signed char*)aligned));
+		    break;
+		case INT_UCHAR:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned char), sizeof(unsigned char));
+		    hw_ullong = (unsigned long_long)(*((unsigned char*)aligned));
+		    break;
+		case INT_SHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(short), sizeof(short));
+		    hw_ullong = (unsigned long_long)(*((short*)aligned));
+		    break;
+		case INT_USHORT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned short), sizeof(unsigned short));
+		    hw_ullong = (unsigned long_long)(*((unsigned short*)aligned));
+		    break;
+		case INT_INT:
+		    HDmemcpy(aligned, saved+j*sizeof(int), sizeof(int));
+		    hw_ullong = (unsigned long_long)(*((int*)aligned));
+		    break;
+		case INT_UINT:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned), sizeof(unsigned));
+		    hw_ullong = (unsigned long_long)(*((unsigned*)aligned));
+		    break;
+		case INT_LONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long), sizeof(long));
+		    hw_ullong = (unsigned long_long)(*((long*)aligned));
+		    break;
+		case INT_ULONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long), sizeof(unsigned long));
+		    hw_ullong = (unsigned long_long)(*((unsigned long*)aligned));
+		    break;
+		case INT_LLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(long_long), sizeof(long_long));
+		    hw_ullong = (unsigned long_long)(*((long_long*)aligned));
+		    break;
+		case INT_ULLONG:
+		    HDmemcpy(aligned, saved+j*sizeof(unsigned long_long), sizeof(unsigned long_long));
+		    hw_ullong = (unsigned long_long)(*((unsigned long_long*)aligned));
+		    break;
+		case INT_OTHER:
+		    break;
+		}
+	    }
+
+            /* Make certain that there isn't some weird number of destination bits */
+            assert(dst_nbits%8==0);
+
+            /* Are the two results the same? */
+            for (k=(dst_size-(dst_nbits/8)); k<dst_size; k++)
+                if (buf[j*dst_size+k]!=hw[k])
+                    break;
+	    if (k==dst_size)
+                continue; /*no error*/
+
+	    /*
+	     * Convert the source and destination values to little endian
+	     * order so we can use the HDF5 bit vector operations to test
+	     * certain things.  These routines have already been tested by
+	     * the `bittests' program.
+	     */
+	    for (k=0; k<src_size; k++)
+		src_bits[src_size-(k+1)] = saved[j*src_size+ENDIAN(src_size, k)];
+
+	    for (k=0; k<dst_size; k++)
+		dst_bits[dst_size-(k+1)] = buf[j*dst_size+ENDIAN(dst_size, k)];
+
+	    /*
+	     * Hardware usually doesn't handle overflows too gracefully. The
+	     * hardware conversion result during overflows is usually garbage
+	     * so we must handle those cases differetly when checking results.
+	     */
+	    if (H5T_SGN_2==src_sign && H5T_SGN_2==dst_sign) {
+                if (src_nbits>dst_nbits) {
+                    if(0==H5T_bit_get_d(src_bits, src_nbits-1, 1) &&
+                            H5T_bit_find(src_bits, dst_nbits-1, (src_nbits-dst_nbits),
+                                H5T_BIT_MSB, 1)>=0) {
+                        /*
+                         * Source is positive and the magnitude is too large for
+                         * the destination.  The destination should be set to the
+                         * maximum possible value: 0x7f...f
+                         */
+                        if (0==H5T_bit_get_d(dst_bits, dst_nbits-1, 1) &&
+                                H5T_bit_find(dst_bits, 0, dst_nbits-1, H5T_BIT_LSB, 0)<0)
+                            continue; /*no error*/
+                    } else if (1==H5T_bit_get_d(src_bits, src_nbits-1, 1) &&
+                           H5T_bit_find(src_bits, 0, src_nbits-1, H5T_BIT_MSB,
+                                0)+1>=(ssize_t)dst_nbits) {
+                        /*
+                         * Source is negative but the magnitude is too large for
+                         * the destination. The destination should be set to the
+                         * smallest possible value: 0x80...0
+                         */
+                        if (1==H5T_bit_get_d(dst_bits, dst_nbits-1, 1) &&
+                                H5T_bit_find(dst_bits, 0, dst_nbits-1, H5T_BIT_LSB, 1)<0)
+                            continue; /*no error*/
+                    }
+                } else if(src_nbits<dst_nbits) {
+                    /* Source is smaller than the destination */
+                    if(0==H5T_bit_get_d(src_bits, src_nbits-1, 1)) {
+                        /*
+                         * Source is positive, so the excess bits in the
+                         * destination should be set to 0's.
+                         */
+                        if (0==H5T_bit_get_d(dst_bits, src_nbits-1, 1) &&
+                                H5T_bit_find(dst_bits, src_nbits, dst_nbits-src_nbits, H5T_BIT_LSB, 1)<0)
+                            continue; /*no error*/
+                    } else {
+                        /*
+                         * Source is negative, so the excess bits in the
+                         * destination should be set to 1's.
+                         */
+                        if (1==H5T_bit_get_d(dst_bits, src_nbits-1, 1) &&
+                                H5T_bit_find(dst_bits, src_nbits, dst_nbits-src_nbits, H5T_BIT_LSB, 0)<0)
+                            continue; /*no error*/
+                    }
+                }
+	    } else if (H5T_SGN_2==src_sign && H5T_SGN_NONE==dst_sign) {
+                if (H5T_bit_get_d(src_bits, src_nbits-1, 1)) {
+                    /*
+                     * The source is negative so the result should be zero.
+                     * The source is negative if the most significant bit is
+                     * set.  The destination is zero if all bits are zero.
+                     */
+                    if (H5T_bit_find(dst_bits, 0, dst_nbits, H5T_BIT_LSB, 1)<0)
+                        continue; /*no error*/
+                } else if (src_nbits>dst_nbits &&
+                       H5T_bit_find(src_bits, dst_nbits-1,
+                            src_nbits-dst_nbits, H5T_BIT_LSB, 1)>=0) {
+                    /*
+                     * The source is a value with a magnitude too large for
+                     * the destination.  The destination should be the
+                     * largest possible value: 0xff...f
+                     */
+                    if (H5T_bit_find(dst_bits, 0, dst_nbits, H5T_BIT_LSB, 0)<0)
+                        continue; /*no error*/
+                }
+	    } else if (H5T_SGN_NONE==src_sign && H5T_SGN_2==dst_sign) {
+                if (src_nbits>=dst_nbits &&
+                        H5T_bit_find(src_bits, dst_nbits-1, (src_nbits-dst_nbits)+1,
+                            H5T_BIT_LSB, 1)>=0) {
+                    /*
+                     * The source value has a magnitude that is larger than
+                     * the destination can handle.  The destination should be
+                     * set to the largest possible positive value: 0x7f...f
+                     */
+                    if (0==H5T_bit_get_d(dst_bits, dst_nbits-1, 1) &&
+                            H5T_bit_find(dst_bits, 0, dst_nbits-1, H5T_BIT_LSB, 0)<0)
+                        continue; /*no error*/
+                }
+	    } else {
+                if (src_nbits>dst_nbits &&
+                        H5T_bit_find(src_bits, dst_nbits, src_nbits-dst_nbits,
+                             H5T_BIT_LSB, 1)>=0) {
+                    /*
+                     * The unsigned source has a value which is too large for
+                     * the unsigned destination.  The destination should be
+                     * set to the largest possible value: 0xff...f
+                     */
+                    if (H5T_bit_find(dst_bits, 0, dst_nbits, H5T_BIT_LSB, 0)<0)
+                        continue; /*no error*/
+                }
+	    }
+
+	    /* Print errors */
+	    if (0==fails_this_test++)
+                H5_FAILED();
+	    printf("    test %u elmt %u\n", (unsigned)i+1, (unsigned)j);
+
+	    printf("        src = ");
+	    for (k=0; k<src_size; k++)
+		printf(" %02x", saved[j*src_size+ENDIAN(src_size, k)]);
+	    printf("%*s", (int)(3*MAX(0, (ssize_t)dst_size-(ssize_t)src_size)), "");
+	    switch (src_type) {
+                case INT_CHAR:
+                    HDmemcpy(aligned, saved+j*sizeof(char), sizeof(char));
+                    printf(" %29d\n", (int)*((char*)aligned));
+                    break;
+                case INT_UCHAR:
+                    HDmemcpy(aligned, saved+j*sizeof(unsigned char), sizeof(unsigned char));
+                    printf(" %29u\n", (unsigned)*((unsigned char*)aligned));
+                    break;
+                case INT_SHORT:
+                    HDmemcpy(aligned, saved+j*sizeof(short), sizeof(short));
+                    printf(" %29hd\n", *((short*)aligned));
+                    break;
+                case INT_USHORT:
+                    HDmemcpy(aligned, saved+j*sizeof(unsigned short), sizeof(unsigned short));
+                    printf(" %29hu\n", *((unsigned short*)aligned));
+                    break;
+                case INT_INT:
+                    HDmemcpy(aligned, saved+j*sizeof(int), sizeof(int));
+                    printf(" %29d\n", *((int*)aligned));
+                    break;
+                case INT_UINT:
+                    HDmemcpy(aligned, saved+j*sizeof(unsigned), sizeof(unsigned));
+                    printf(" %29u\n", *((unsigned*)aligned));
+                    break;
+                case INT_LONG:
+                    HDmemcpy(aligned, saved+j*sizeof(long), sizeof(long));
+                    printf(" %29ld\n", *((long*)aligned));
+                    break;
+                case INT_ULONG:
+                    HDmemcpy(aligned, saved+j*sizeof(unsigned long), sizeof(unsigned long));
+                    printf(" %29lu\n", *((unsigned long*)aligned));
+                    break;
+                case INT_LLONG:
+                    HDmemcpy(aligned, saved+j*sizeof(long_long), sizeof(long_long));
+                    HDfprintf(stdout," %29"H5_PRINTF_LL_WIDTH"d\n", *((long_long*)aligned));
+                    break;
+                case INT_ULLONG:
+                    HDmemcpy(aligned, saved+j*sizeof(unsigned long_long), sizeof(unsigned long_long));
+                    HDfprintf(stdout," %29"H5_PRINTF_LL_WIDTH"u\n", *((unsigned long_long*)aligned));
+                    break;
+                case INT_OTHER:
+                    break;
+	    }
+
+	    printf("        dst = ");
+	    for (k=0; k<dst_size; k++)
+		printf(" %02x", buf[j*dst_size+ENDIAN(dst_size, k)]);
+	    printf("%*s", (int)(3*MAX(0, (ssize_t)src_size-(ssize_t)dst_size)), "");
+	    switch (dst_type) {
+                case INT_CHAR:
+                    HDmemcpy(aligned, buf+j*sizeof(char), sizeof(char));
+                    printf(" %29d\n", (int)*((char*)aligned));
+                    break;
+                case INT_UCHAR:
+                    HDmemcpy(aligned, buf+j*sizeof(unsigned char), sizeof(unsigned char));
+                    printf(" %29u\n", (unsigned)*((unsigned char*)aligned));
+                    break;
+                case INT_SHORT:
+                    HDmemcpy(aligned, buf+j*sizeof(short), sizeof(short));
+                    printf(" %29hd\n", *((short*)aligned));
+                    break;
+                case INT_USHORT:
+                    HDmemcpy(aligned, buf+j*sizeof(unsigned short), sizeof(unsigned short));
+                    printf(" %29hu\n", *((unsigned short*)aligned));
+                    break;
+                case INT_INT:
+                    HDmemcpy(aligned, buf+j*sizeof(int), sizeof(int));
+                    printf(" %29d\n", *((int*)aligned));
+                    break;
+                case INT_UINT:
+                    HDmemcpy(aligned, buf+j*sizeof(unsigned), sizeof(unsigned));
+                    printf(" %29u\n", *((unsigned*)aligned));
+                    break;
+                case INT_LONG:
+                    HDmemcpy(aligned, buf+j*sizeof(long), sizeof(long));
+                    printf(" %29ld\n", *((long*)aligned));
+                    break;
+                case INT_ULONG:
+                    HDmemcpy(aligned, buf+j*sizeof(unsigned long), sizeof(unsigned long));
+                    printf(" %29lu\n", *((unsigned long*)aligned));
+                    break;
+                case INT_LLONG:
+                    HDmemcpy(aligned, buf+j*sizeof(long_long), sizeof(long_long));
+                    HDfprintf(stdout," %29"H5_PRINTF_LL_WIDTH"d\n", *((long_long*)aligned));
+                    break;
+                case INT_ULLONG:
+                    HDmemcpy(aligned, buf+j*sizeof(long_long), sizeof(unsigned long_long));
+                    HDfprintf(stdout," %29"H5_PRINTF_LL_WIDTH"u\n", *((unsigned long_long*)aligned));
+                    break;
+                case INT_OTHER:
+                    break;
+	    }
+
+	    printf("        ans = ");
+	    for (k=0; k<dst_size; k++)
+		printf(" %02x", hw[ENDIAN(dst_size, k)]);
+	    printf("%*s", (int)(3*MAX(0, (ssize_t)src_size-(ssize_t)dst_size)), "");
+	    switch (dst_type) {
+                case INT_CHAR:
+                    printf(" %29d\n", (int)*((char*)hw));
+                    break;
+                case INT_UCHAR:
+                    printf(" %29u\n", (unsigned)*((unsigned char*)hw));
+                    break;
+                case INT_SHORT:
+                    printf(" %29hd\n", *((short*)hw));
+                    break;
+                case INT_USHORT:
+                    printf(" %29hu\n", *((unsigned short*)hw));
+                    break;
+                case INT_INT:
+                    printf(" %29d\n", *((int*)hw));
+                    break;
+                case INT_UINT:
+                    printf(" %29u\n", *((unsigned*)hw));
+                    break;
+                case INT_LONG:
+                    printf(" %29ld\n", *((long*)hw));
+                    break;
+                case INT_ULONG:
+                    printf(" %29lu\n", *((unsigned long*)hw));
+                    break;
+                case INT_LLONG:
+                    HDfprintf(stdout," %29"H5_PRINTF_LL_WIDTH"d\n", *((long_long*)hw));
+                    break;
+                case INT_ULLONG:
+                    HDfprintf(stdout," %29"H5_PRINTF_LL_WIDTH"u\n", *((unsigned long_long*)hw));
+                    break;
+                case INT_OTHER:
+                    break;
+	    }
+
+	    if (++fails_all_tests>=max_fails) {
+		HDputs("    maximum failures reached, aborting test...");
+		goto done;
+	    }
+	}
+	PASSED();
+    }
+#ifdef SHOW_OVERFLOWS
+    if (noverflows_g>0) {
+	printf("    %d overflow%s in previous test\n",
+	       noverflows_g, 1==noverflows_g?"":"s");
+    }
+#endif
+
+done:
+    if (buf) aligned_free(buf);
+    if (saved) aligned_free(saved);
+    if (aligned) HDfree(aligned);
+    HDfflush(stdout);
+    reset_hdf5();	/*print statistics*/
+    return (int)fails_all_tests;
+
+error:
+    if (buf) aligned_free(buf);
+    if (saved) aligned_free(saved);
+    if (aligned) HDfree(aligned);
+    HDfflush(stdout);
+    reset_hdf5();	/*print statistics*/
+    return MAX((int)fails_all_tests, 1);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_conv_int_2
+ *
+ * Purpose:	Tests overlap calculates in H5T_conv_i_i(), which should be
+ *		the same as for H5T_conv_f_f() and H5T_conv_s_s().
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, April 30, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_conv_int_2(void)
+{
+    int		i, j;
+    hid_t	src_type, dst_type;
+    char	buf[32*100];
+
+    printf("%-70s", "Testing overlap calculations");
+    HDfflush(stdout);
+
+    HDmemset(buf, 0, sizeof buf);
+    for (i=1; i<=32; i++) {
+	for (j=1; j<=32; j++) {
+
+	    /* Source type */
+	    src_type = H5Tcopy(H5T_NATIVE_CHAR);
+	    H5Tset_size(src_type, (size_t)i);
+
+	    /* Destination type */
+	    dst_type = H5Tcopy(H5T_NATIVE_CHAR);
+	    H5Tset_size(dst_type, (size_t)j);
+
+	    /*
+	     * Conversion. If overlap calculations aren't right then an
+	     * assertion will fail in H5T_conv_i_i()
+	     */
+	    H5Tconvert(src_type, dst_type, 100, buf, NULL, H5P_DEFAULT);
+	    H5Tclose(src_type);
+	    H5Tclose(dst_type);
+	}
+    }
+    PASSED();
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	my_isnan
+ *
+ * Purpose:	Determines whether VAL points to NaN.
+ *
+ * Return:	TRUE or FALSE
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, July  6, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+my_isnan(flt_t type, void *val)
+{
+    int retval;
+    char s[256];
+
+    if (FLT_FLOAT==type) {
+	float x;
+	HDmemcpy(&x, val, sizeof(float));
+	retval = (x!=x);
+    } else if (FLT_DOUBLE==type) {
+	double x;
+	HDmemcpy(&x, val, sizeof(double));
+	retval = (x!=x);
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+    } else if (FLT_LDOUBLE==type) {
+	long double x;
+	HDmemcpy(&x, val, sizeof(long double));
+	retval = (x!=x);
+#endif
+    } else {
+	return 0;
+    }
+
+    /*
+     * Sometimes NaN==NaN (e.g., DEC Alpha) so we try to print it and see if
+     * the result contains a NaN string.
+     */
+    if (!retval) {
+	if (FLT_FLOAT==type) {
+	    float x;
+	    HDmemcpy(&x, val, sizeof(float));
+	    sprintf(s, "%g", x);
+	} else if (FLT_DOUBLE==type) {
+	    double x;
+	    HDmemcpy(&x, val, sizeof(double));
+	    sprintf(s, "%g", x);
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+	} else if (FLT_LDOUBLE==type) {
+	    long double x;
+	    HDmemcpy(&x, val, sizeof(long double));
+	    sprintf(s, "%Lg", x);
+#endif
+	} else {
+	    return 0;
+	}
+	 if (HDstrstr(s, "NaN") || HDstrstr(s, "NAN") || HDstrstr(s, "nan"))
+	    retval = 1;
+    }
+
+    return retval;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_conv_flt_1
+ *
+ * Purpose:	Test conversion of random floating point values from SRC to
+ *		DST.  These types should be H5T_NATIVE_FLOAT,
+ *		H5T_NATIVE_DOUBLE, or H5T_NATIVE_LDOUBLE.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, June 23, 1998
+ *
+ * Modifications:
+ *	     Albert Cheng, Apr 16, 2004
+ *	     Check for underflow condition. If the src number is
+ *	     smaller than the dst MIN float number, consider it okay
+ *	     if the converted sw and hw dst are both less than or
+ *	     equal to the dst MIN float number.
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_conv_flt_1 (const char *name, hid_t src, hid_t dst)
+{
+    flt_t		src_type, dst_type;	/*data types		*/
+    const size_t	ntests=NTESTS;		/*number of tests	*/
+    const size_t	nelmts=NTESTELEM;		/*num values per test	*/
+    const size_t	max_fails=8;		/*max number of failures*/
+    size_t		fails_all_tests=0;	/*number of failures	*/
+    size_t		fails_this_test;	/*fails for this test	*/
+    const char		*src_type_name = NULL;	/*source type name	*/
+    const char		*dst_type_name = NULL;	/*destination type name	*/
+    size_t		src_size, dst_size;	/*type sizes		*/
+    unsigned char	*buf = NULL;		/*buffer for conversion	*/
+    unsigned char	*saved = NULL;		/*original values	*/
+    char		str[256];		/*hello string		*/
+    float		hw_f;			/*hardware-converted 	*/
+    double		hw_d;			/*hardware-converted	*/
+    void		*aligned=NULL;		/*aligned buffer	*/
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+    long double		hw_ld;			/*hardware-converted	*/
+#endif
+    unsigned char	*hw=NULL;		/*ptr to hardware-conv'd*/
+    int			underflow;		/*underflow occurred	*/
+    int 		uflow=0;		/*underflow debug counters*/
+    size_t		i, j, k;		/*counters		*/
+    int			endian;			/*machine endianess	*/
+    size_t		dst_ebias;		/* Destination type's exponent bias */
+    size_t		src_epos;		/* Source type's exponent position */
+    size_t		src_esize;		/* Source type's exponent size */
+    size_t		dst_epos;		/* Destination type's exponent position */
+    size_t		dst_esize;		/* Destination type's exponent size */
+    size_t		dst_msize;		/* Destination type's mantissa size */
+
+#ifdef HANDLE_SIGFPE
+    pid_t		child_pid;		/*process ID of child	*/
+    int			status;			/*child exit status	*/
+
+    /*
+     * Some systems generage SIGFPE during floating point overflow and we
+     * cannot assume that we can continue from such a signal.  Therefore, we
+     * fork here and let the child run the test and return the number of
+     * failures with the exit status.
+     */
+    HDfflush(stdout);
+    HDfflush(stderr);
+    if ((child_pid=fork())<0) {
+	HDperror("fork");
+	return 1;
+    } else if (child_pid>0) {
+	while (child_pid!=waitpid(child_pid, &status, 0)) /*void*/;
+	if (WIFEXITED(status) && 255==WEXITSTATUS(status)) {
+	    return 0; /*child exit after catching SIGFPE*/
+	} else if (WIFEXITED(status)) {
+	    return WEXITSTATUS(status);
+	} else {
+	    HDputs("   Child didn't exit normally.");
+	    return 1;
+	}
+    }
+#endif
+
+    /*
+     * The remainder of this function is executed only by the child if
+     * HANDLE_SIGFPE is defined.
+     */
+    HDsignal(SIGFPE,fpe_handler);
+
+    /* What are the names of the source and destination types */
+    if (H5Tequal(src, H5T_NATIVE_FLOAT)) {
+	src_type_name = "float";
+	src_type = FLT_FLOAT;
+    } else if (H5Tequal(src, H5T_NATIVE_DOUBLE)) {
+	src_type_name = "double";
+	src_type = FLT_DOUBLE;
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+    } else if (H5Tequal(src, H5T_NATIVE_LDOUBLE)) {
+	src_type_name = "long double";
+	src_type = FLT_LDOUBLE;
+#endif
+    } else {
+	src_type_name = "UNKNOWN";
+	src_type = FLT_OTHER;
+    }
+
+    if (H5Tequal(dst, H5T_NATIVE_FLOAT)) {
+	dst_type_name = "float";
+	dst_type = FLT_FLOAT;
+    } else if (H5Tequal(dst, H5T_NATIVE_DOUBLE)) {
+	dst_type_name = "double";
+	dst_type = FLT_DOUBLE;
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+    } else if (H5Tequal(dst, H5T_NATIVE_LDOUBLE)) {
+	dst_type_name = "long double";
+	dst_type = FLT_LDOUBLE;
+#endif
+    } else {
+	dst_type_name = "UNKNOWN";
+	dst_type = FLT_OTHER;
+    }
+
+    /* Sanity checks */
+    if(sizeof(float)==sizeof(double))
+        HDputs("Sizeof(float)==sizeof(double) - some tests may not be sensible.");
+    if (FLT_OTHER==src_type || FLT_OTHER==dst_type) {
+	sprintf(str, "Testing random %s %s -> %s conversions",
+		name, src_type_name, dst_type_name);
+	printf("%-70s", str);
+	H5_FAILED();
+	HDputs("    Unknown data type.");
+	goto error;
+    }
+
+    /* Get "interesting" values */
+    src_size = H5Tget_size(src);
+    dst_size = H5Tget_size(dst);
+    dst_ebias=H5Tget_ebias(dst);
+    H5Tget_fields(src,NULL,&src_epos,&src_esize,NULL,NULL);
+    H5Tget_fields(dst,NULL,&dst_epos,&dst_esize,NULL,&dst_msize);
+
+    /* Allocate buffers */
+    endian = H5Tget_order(H5T_NATIVE_FLOAT);
+    buf   = aligned_malloc(nelmts*MAX(src_size, dst_size));
+    saved = aligned_malloc(nelmts*MAX(src_size, dst_size));
+    aligned = HDmalloc(32); /*should be big enough for any type*/
+#ifdef SHOW_OVERFLOWS
+    noverflows_g = 0;
+#endif
+
+    for (i=0; i<ntests; i++) {
+
+	/*
+	 * If it looks like it might take a long time then print a progress
+	 * report between each test.
+	 */
+	if (ntests>1) {
+	    sprintf(str, "Testing random %s %s -> %s conversions (test %d/%d)",
+		    name, src_type_name, dst_type_name, (int)i+1, (int)ntests);
+	} else {
+	    sprintf(str, "Testing random %s %s -> %s conversions",
+		    name, src_type_name, dst_type_name);
+	}
+	printf("%-70s", str);
+	HDfflush(stdout);
+	fails_this_test = 0;
+
+	/*
+	 * Initialize the source buffers to random bits.  The `buf' buffer
+	 * will be used for the conversion while the `saved' buffer will be
+	 * used for the comparison later.
+	 */
+	if (!skip_overflow_tests_g) {
+	    for (j=0; j<nelmts*src_size; j++)
+                buf[j] = saved[j] = HDrand();
+	} else {
+	    for (j=0; j<nelmts; j++) {
+		/* Do it this way for alignment reasons */
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+		long double temp[1];
+#else
+		double temp[1];
+#endif
+		if (src_size<=dst_size) {
+		    for (k=0; k<dst_size; k++) buf[j*src_size+k] = HDrand();
+		} else {
+		    for (k=0; k<dst_size; k++)
+			((unsigned char*)temp)[k] = HDrand();
+		    if (FLT_DOUBLE==src_type && FLT_FLOAT==dst_type) {
+			hw_d = *((float*)temp);
+			HDmemcpy(buf+j*src_size, &hw_d, src_size);
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+		    } else if (FLT_LDOUBLE==src_type && FLT_FLOAT==dst_type) {
+			hw_ld = *((float*)temp);
+			HDmemcpy(buf+j*src_size, &hw_ld, src_size);
+		    } else if (FLT_LDOUBLE==src_type && FLT_DOUBLE==dst_type) {
+			hw_ld = *((double*)temp);
+			HDmemcpy(buf+j*src_size, &hw_ld, src_size);
+#endif
+		    }
+		}
+		HDmemcpy(saved+j*src_size, buf+j*src_size, src_size);
+	    }
+	}
+
+	/* Perform the conversion in software */
+	if (H5Tconvert(src, dst, nelmts, buf, NULL, H5P_DEFAULT)<0)
+            goto error;
+
+	/* Check the software results against the hardware */
+	for (j=0; j<nelmts; j++) {
+	    underflow = 0;
+	    hw_f = 911.0;
+	    hw_d = 911.0;
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+	    hw_ld = 911.0;
+#endif
+
+	    /* The hardware conversion */
+	    /* Check for underflow when src is a "larger" float than dst.*/
+	    if (FLT_FLOAT==src_type) {
+		HDmemcpy(aligned, saved+j*sizeof(float), sizeof(float));
+		if (FLT_FLOAT==dst_type) {
+		    hw_f = *((float*)aligned);
+		    hw = (unsigned char*)&hw_f;
+		} else if (FLT_DOUBLE==dst_type) {
+		    hw_d = *((float*)aligned);
+		    hw = (unsigned char*)&hw_d;
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+		} else {
+		    hw_ld = *((float*)aligned);
+		    hw = (unsigned char*)&hw_ld;
+#endif
+		}
+	    } else if (FLT_DOUBLE==src_type) {
+		HDmemcpy(aligned, saved+j*sizeof(double), sizeof(double));
+		if (FLT_FLOAT==dst_type) {
+		    hw_f = (float)(*((double*)aligned));
+		    hw = (unsigned char*)&hw_f;
+		    underflow = HDfabs(*((double*)aligned)) < FLT_MIN;
+		} else if (FLT_DOUBLE==dst_type) {
+		    hw_d = *((double*)aligned);
+		    hw = (unsigned char*)&hw_d;
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+		} else {
+		    hw_ld = *((double*)aligned);
+		    hw = (unsigned char*)&hw_ld;
+#endif
+		}
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+	    } else {
+		HDmemcpy(aligned, saved+j*sizeof(long double), sizeof(long double));
+		if (FLT_FLOAT==dst_type) {
+		    hw_f = *((long double*)aligned);
+		    hw = (unsigned char*)&hw_f;
+		    underflow = HDfabsl(*((long double*)aligned)) < FLT_MIN;
+		} else if (FLT_DOUBLE==dst_type) {
+		    hw_d = *((long double*)aligned);
+		    hw = (unsigned char*)&hw_d;
+		    underflow = HDfabsl(*((long double*)aligned)) < DBL_MIN;
+		} else {
+		    hw_ld = *((long double*)aligned);
+		    hw = (unsigned char*)&hw_ld;
+		}
+#endif
+	    }
+	    if (underflow){
+		uflow++;
+	    }
+
+	    /* Are the two results the same? */
+	    for (k=0; k<dst_size; k++)
+		if (buf[j*dst_size+k]!=hw[k])
+                    break;
+	    if (k==dst_size)
+                continue; /*no error*/
+
+	    /*
+	     * Assume same if both results are NaN.  There are many NaN bit
+	     * patterns and the software doesn't attemt to emulate the
+	     * hardware in this regard.  Instead, software uses a single bit
+	     * pattern for NaN by setting the significand to all ones.
+	     */
+	    if (FLT_FLOAT==dst_type &&
+                    my_isnan(dst_type, buf+j*sizeof(float)) &&
+                    my_isnan(dst_type, hw)) {
+		continue;
+	    } else if (FLT_DOUBLE==dst_type &&
+                    my_isnan(dst_type, buf+j*sizeof(double)) &&
+                    my_isnan(dst_type, hw)) {
+		continue;
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+	    } else if (FLT_LDOUBLE==dst_type &&
+                    my_isnan(dst_type, buf+j*sizeof(long double)) &&
+                    my_isnan(dst_type, hw)) {
+		continue;
+#endif
+	    }
+
+	    /*
+	     * Assume same if hardware result is NaN.  This is because the
+	     * hardware conversions on some machines return NaN instead of
+	     * overflowing to +Inf or -Inf or underflowing to +0 or -0.
+	     */
+	    if (my_isnan(dst_type, hw))
+                continue;
+
+	    /*
+	     * Instead of matching down to the bit, just make sure the
+	     * exponents are the same and the mantissa is the same to a
+	     * certain precision.  This is needed on machines that don't
+	     * round as expected.
+	     * If the src number is smaller than the dst MIN float number,
+	     * consider it okay if the converted sw and hw dst are both
+	     * less than or equal to the dst MIN float number.
+	     */
+	    {
+		double		check_mant[2];
+		int		check_expo[2];
+
+		if (FLT_FLOAT==dst_type) {
+		    float x;
+		    HDmemcpy(&x, &buf[j*dst_size], sizeof(float));
+		    if (underflow &&
+			    HDfabsf(x) <= FLT_MIN && HDfabsf(hw_f) <= FLT_MIN)
+			continue;	/* all underflowed, no error */
+		    check_mant[0] = HDfrexpf(x, check_expo+0);
+		    check_mant[1] = HDfrexpf(hw_f, check_expo+1);
+		} else if (FLT_DOUBLE==dst_type) {
+		    double x;
+		    HDmemcpy(&x, &buf[j*dst_size], sizeof(double));
+		    if (underflow &&
+			    HDfabs(x) <= DBL_MIN && HDfabs(hw_d) <= DBL_MIN)
+			continue;	/* all underflowed, no error */
+		    check_mant[0] = HDfrexp(x, check_expo+0);
+		    check_mant[1] = HDfrexp(hw_d, check_expo+1);
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+		} else {
+		    long double x;
+		    HDmemcpy(&x, &buf[j*dst_size], sizeof(long double));
+		    /* dst is largest float, no need to check underflow. */
+		    check_mant[0] = HDfrexpl(x, check_expo+0);
+		    check_mant[1] = HDfrexpl(hw_ld, check_expo+1);
+#endif
+		}
+#ifdef H5_CONVERT_DENORMAL_FLOAT
+		/* Special check for denormalized values */
+		if(check_expo[0]<(-(int)dst_ebias) || check_expo[1]<(-(int)dst_ebias)) {
+		    int expo_diff=check_expo[0]-check_expo[1];
+		    int valid_bits=(int)((dst_ebias+dst_msize)+MIN(check_expo[0],check_expo[1]))-1;
+		    double epsilon=1.0;
+
+		    /* Re-scale the mantissas based on any exponent difference */
+		    if(expo_diff!=0)
+		        check_mant[0] = HDldexp(check_mant[0],expo_diff);
+
+		    /* Compute the proper epsilon */
+		    epsilon=HDldexp(epsilon,-valid_bits);
+
+		    /* Check for "close enough" fit with scaled epsilon value */
+		    if (HDfabs(check_mant[0]-check_mant[1])<=epsilon)
+		        continue;
+		} /* end if */
+		else {
+		    if (check_expo[0]==check_expo[1] &&
+                            HDfabs(check_mant[0]-check_mant[1])<FP_EPSILON)
+		        continue;
+		} /* end else */
+#else /* H5_CONVERT_DENORMAL_FLOAT */
+                {
+                hssize_t	expo;			/*exponent			*/
+                uint8_t tmp[32];
+
+                assert(src_size<=sizeof(tmp));
+                if(endian==H5T_ORDER_LE)
+                    HDmemcpy(tmp,&saved[j*src_size],src_size);
+                else
+                    for (k=0; k<src_size; k++)
+                        tmp[k]=saved[j*src_size+(src_size-(k+1))];
+                expo = H5T_bit_get_d(tmp, src_epos, src_esize);
+                if(expo==0)
+                    continue;   /* Denormalized floating-point value detected */
+                else {
+                    assert(dst_size<=sizeof(tmp));
+                    if(endian==H5T_ORDER_LE)
+                        HDmemcpy(tmp,&buf[j*dst_size],dst_size);
+                    else
+                        for (k=0; k<dst_size; k++)
+                            tmp[k]=buf[j*dst_size+(dst_size-(k+1))];
+                    expo = H5T_bit_get_d(tmp, dst_epos, dst_esize);
+                    if(expo==0)
+                        continue;   /* Denormalized floating-point value detected */
+                    else {
+                        if (check_expo[0]==check_expo[1] &&
+                                HDfabs(check_mant[0]-check_mant[1])<FP_EPSILON)
+                            continue;
+                    } /* end else */
+                } /* end else */
+                }
+#endif /* H5_CONVERT_DENORMAL_FLOAT */
+	    }
+
+	    if (0==fails_this_test++)
+                H5_FAILED();
+	    printf("    test %u, elmt %u\n", (unsigned)i+1, (unsigned)j);
+
+	    printf("        src =");
+	    for (k=0; k<src_size; k++)
+		printf(" %02x", saved[j*src_size+ENDIAN(src_size,k)]);
+	    printf("%*s", (int)(3*MAX(0, (ssize_t)dst_size-(ssize_t)src_size)), "");
+	    if (FLT_FLOAT==src_type) {
+		float x;
+		HDmemcpy(&x, &saved[j*dst_size], sizeof(float));
+		printf(" %29.20e\n", x);
+	    } else if (FLT_DOUBLE==src_type) {
+		double x;
+		HDmemcpy(&x, &saved[j*dst_size], sizeof(double));
+		printf(" %29.20e\n", x);
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+	    } else {
+		long double x;
+		HDmemcpy(&x, &saved[j*src_size], sizeof(long double));
+		HDfprintf(stdout," %29.20Le\n", x);
+#endif
+	    }
+
+	    printf("        dst =");
+	    for (k=0; k<dst_size; k++)
+		printf(" %02x", buf[j*dst_size+ENDIAN(dst_size,k)]);
+	    printf("%*s", (int)(3*MAX(0, (ssize_t)src_size-(ssize_t)dst_size)), "");
+	    if (FLT_FLOAT==dst_type) {
+		float x;
+		HDmemcpy(&x, &buf[j*dst_size], sizeof(float));
+		printf(" %29.20e\n", x);
+	    } else if (FLT_DOUBLE==dst_type) {
+		double x;
+		HDmemcpy(&x, &buf[j*dst_size], sizeof(double));
+		printf(" %29.20e\n", x);
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+	    } else {
+		long double x;
+		HDmemcpy(&x, &buf[j*dst_size], sizeof(long double));
+		HDfprintf(stdout," %29.20Le\n", x);
+#endif
+	    }
+
+	    printf("        ans =");
+	    for (k=0; k<dst_size; k++)
+		printf(" %02x", hw[ENDIAN(dst_size,k)]);
+	    printf("%*s", (int)(3*MAX(0, (ssize_t)src_size-(ssize_t)dst_size)), "");
+	    if (FLT_FLOAT==dst_type)
+		printf(" %29.20e\n", hw_f);
+	    else if (FLT_DOUBLE==dst_type)
+		printf(" %29.20e\n", hw_d);
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+	    else
+		HDfprintf(stdout," %29.20Le\n", hw_ld);
+#endif
+
+	    if (++fails_all_tests>=max_fails) {
+		HDputs("    maximum failures reached, aborting test...");
+		goto done;
+	    }
+	}
+	PASSED();
+    }
+#ifdef SHOW_OVERFLOWS
+    if (noverflows_g>0)
+	printf("   %d overflow%s in previous test\n",
+	       noverflows_g, 1==noverflows_g?"":"s");
+#endif
+
+ done:
+#ifdef AKCDEBUG
+     printf("uflow=%d, fails_all_tests=%d\n", uflow, fails_all_tests);
+#endif
+    if (buf) aligned_free(buf);
+    if (saved) aligned_free(saved);
+    if (aligned) HDfree(aligned);
+    HDfflush(stdout);
+#ifdef HANDLE_SIGFPE
+    HDexit(MIN((int)fails_all_tests, 254));
+#else
+    reset_hdf5();
+    return (int)fails_all_tests;
+#endif
+
+ error:
+    if (buf) aligned_free(buf);
+    if (saved) aligned_free(saved);
+    if (aligned) HDfree(aligned);
+    HDfflush(stdout);
+#ifdef HANDLE_SIGFPE
+    HDexit(MIN(MAX((int)fails_all_tests, 1), 254));
+#else
+    reset_hdf5();
+    return MAX((int)fails_all_tests, 1);
+#endif
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	run_integer_tests
+ *
+ * Purpose:	Runs all integer tests.
+ *
+ * Return:	Number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, November 24, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+run_integer_tests(const char *name)
+{
+    int		nerrors = 0;
+
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SCHAR, H5T_NATIVE_UCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SCHAR, H5T_NATIVE_SHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SCHAR, H5T_NATIVE_USHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SCHAR, H5T_NATIVE_INT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SCHAR, H5T_NATIVE_UINT);
+#if H5_SIZEOF_LONG!=H5_SIZEOF_INT
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SCHAR, H5T_NATIVE_LONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SCHAR, H5T_NATIVE_ULONG);
+#endif
+#if H5_SIZEOF_LONG_LONG!=H5_SIZEOF_LONG
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SCHAR, H5T_NATIVE_LLONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SCHAR, H5T_NATIVE_ULLONG);
+#endif
+
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_SCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_SHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_USHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_INT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_UINT);
+#if H5_SIZEOF_LONG!=H5_SIZEOF_INT
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_LONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_ULONG);
+#endif
+#if H5_SIZEOF_LONG_LONG!=H5_SIZEOF_LONG
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_LLONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UCHAR, H5T_NATIVE_ULLONG);
+#endif
+
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_SCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_UCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_USHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_INT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_UINT);
+#if H5_SIZEOF_LONG!=H5_SIZEOF_INT
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_LONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_ULONG);
+#endif
+#if H5_SIZEOF_LONG_LONG!=H5_SIZEOF_LONG
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_LLONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_SHORT, H5T_NATIVE_ULLONG);
+#endif
+
+    nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_SCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_UCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_SHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_INT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_UINT);
+#if H5_SIZEOF_LONG!=H5_SIZEOF_INT
+    nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_LONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_ULONG);
+#endif
+#if H5_SIZEOF_LONG_LONG!=H5_SIZEOF_LONG
+    nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_LLONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_USHORT, H5T_NATIVE_ULLONG);
+#endif
+
+    nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_SCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_UCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_SHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_USHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_UINT);
+#if H5_SIZEOF_LONG!=H5_SIZEOF_INT
+    nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_LONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_ULONG);
+#endif
+#if H5_SIZEOF_LONG_LONG!=H5_SIZEOF_LONG
+    nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_LLONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_INT, H5T_NATIVE_ULLONG);
+#endif
+
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_SCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_UCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_SHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_USHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_INT);
+#if H5_SIZEOF_LONG!=H5_SIZEOF_INT
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_LONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_ULONG);
+#endif
+#if H5_SIZEOF_LONG_LONG!=H5_SIZEOF_LONG
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_LLONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_UINT, H5T_NATIVE_ULLONG);
+#endif
+
+#if H5_SIZEOF_LONG!=H5_SIZEOF_INT
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_SCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_UCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_SHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_USHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_INT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_UINT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_ULONG);
+#if H5_SIZEOF_LONG_LONG!=H5_SIZEOF_LONG
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_LLONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LONG, H5T_NATIVE_ULLONG);
+#endif
+#endif
+
+#if H5_SIZEOF_LONG!=H5_SIZEOF_INT
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_SCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_UCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_SHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_USHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_INT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_UINT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_LONG);
+#if H5_SIZEOF_LONG_LONG!=H5_SIZEOF_LONG
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_LLONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULONG, H5T_NATIVE_ULLONG);
+#endif
+#endif
+
+#if H5_SIZEOF_LONG_LONG!=H5_SIZEOF_LONG
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_SCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_UCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_SHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_USHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_INT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_UINT);
+#if H5_SIZEOF_LONG!=H5_SIZEOF_INT
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_LONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_ULONG);
+#endif
+    nerrors += test_conv_int_1(name, H5T_NATIVE_LLONG, H5T_NATIVE_ULLONG);
+#endif
+
+#if H5_SIZEOF_LONG_LONG!=H5_SIZEOF_LONG
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_SCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_UCHAR);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_SHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_USHORT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_INT);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_UINT);
+#if H5_SIZEOF_LONG!=H5_SIZEOF_INT
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_LONG);
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_ULONG);
+#endif
+    nerrors += test_conv_int_1(name, H5T_NATIVE_ULLONG, H5T_NATIVE_LLONG);
+#endif
+
+    return nerrors;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    main
+ *
+ * Purpose:     Test the data type interface.
+ *
+ * Return:      Success:
+ *
+ *              Failure:
+ *
+ * Programmer:  Robb Matzke
+ *              Tuesday, December  9, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    unsigned long	nerrors = 0;
+    hid_t		fapl=-1;
+
+    /* Set the random # seed */
+    HDsrandom((unsigned long)HDtime(NULL));
+
+    reset_hdf5();
+    fapl = h5_fileaccess();
+
+    if (ALIGNMENT)
+	printf("Testing non-aligned conversions (ALIGNMENT=%d)....\n", ALIGNMENT);
+
+    /* Do the tests */
+    nerrors += test_classes();
+    nerrors += test_copy();
+    nerrors += test_detect();
+    nerrors += test_compound_1();
+    nerrors += test_query();
+    nerrors += test_transient (fapl);
+    nerrors += test_named (fapl);
+    h5_cleanup(FILENAME, fapl); /*must happen before first reset*/
+    reset_hdf5();
+
+    nerrors += test_conv_str_1();
+    nerrors += test_conv_str_2();
+    nerrors += test_compound_2();
+    nerrors += test_compound_3();
+    nerrors += test_compound_4();
+    nerrors += test_compound_5();
+    nerrors += test_compound_6();
+    nerrors += test_compound_7();
+    nerrors += test_compound_8();
+    nerrors += test_compound_9();
+    nerrors += test_compound_10();
+    nerrors += test_compound_11();
+    nerrors += test_compound_12();
+    nerrors += test_conv_int ();
+    nerrors += test_conv_enum_1();
+    nerrors += test_conv_enum_2();
+    nerrors += test_conv_bitfield();
+    nerrors += test_opaque();
+
+    /* Test user-define, query functions and software conversion
+     * for user-defined floating-point types */
+    nerrors += test_derived_flt();
+
+    /* Test user-define, query functions and software conversion
+     * for user-defined integer types */
+    nerrors += test_derived_integer();
+
+    /* Does floating point overflow generate a SIGFPE? */
+    generates_sigfpe();
+
+    /* Test degenerate cases */
+    nerrors += test_conv_flt_1("noop", H5T_NATIVE_FLOAT, H5T_NATIVE_FLOAT);
+    nerrors += test_conv_flt_1("noop", H5T_NATIVE_DOUBLE, H5T_NATIVE_DOUBLE);
+
+    /* Test hardware integer conversion functions */
+    nerrors += run_integer_tests("hw");
+
+    /* Test hardware floating-point conversion functions */
+    nerrors += test_conv_flt_1("hw", H5T_NATIVE_FLOAT, H5T_NATIVE_DOUBLE);
+    nerrors += test_conv_flt_1("hw", H5T_NATIVE_DOUBLE, H5T_NATIVE_FLOAT);
+
+    /*----------------------------------------------------------------------
+     * Software tests
+     *----------------------------------------------------------------------
+     */
+    without_hardware_g = TRUE;
+    reset_hdf5();
+
+    /* Test software integer conversion functions */
+    nerrors += test_conv_int_2();
+    nerrors += run_integer_tests("sw");
+
+    /* Test software floating-point conversion functions */
+    nerrors += test_conv_flt_1("sw", H5T_NATIVE_FLOAT, H5T_NATIVE_DOUBLE);
+    nerrors += test_conv_flt_1("sw", H5T_NATIVE_DOUBLE, H5T_NATIVE_FLOAT);
+#if H5_SIZEOF_LONG_DOUBLE!=H5_SIZEOF_DOUBLE
+    nerrors += test_conv_flt_1("sw", H5T_NATIVE_FLOAT, H5T_NATIVE_LDOUBLE);
+    nerrors += test_conv_flt_1("sw", H5T_NATIVE_DOUBLE, H5T_NATIVE_LDOUBLE);
+    nerrors += test_conv_flt_1("sw", H5T_NATIVE_LDOUBLE, H5T_NATIVE_FLOAT);
+    nerrors += test_conv_flt_1("sw", H5T_NATIVE_LDOUBLE, H5T_NATIVE_DOUBLE);
+#endif
+
+    if (nerrors) {
+        printf("***** %lu FAILURE%s! *****\n",
+               nerrors, 1==nerrors?"":"S");
+        HDexit(1);
+    }
+    printf("All data type tests passed.\n");
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/test/enum.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/enum.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/enum.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,474 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Tuesday, December 22, 1998
+ */
+#include "h5test.h"
+#define CPTR(VAR,CONST)	((VAR)=(CONST),&(VAR))
+
+const char *FILENAME[] = {
+    "enum1",
+    NULL
+};
+
+typedef enum {
+    E1_RED,
+    E1_GREEN,
+    E1_BLUE,
+    E1_WHITE,
+    E1_BLACK
+} c_e1;
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_named
+ *
+ * Purpose:	Create an enumeration data type and store it in the file.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, December 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_named(hid_t file)
+{
+    hid_t	type=-1, cwg=-1;
+    c_e1	val;
+    signed char	val8;
+
+    TESTING("named enumeration types");
+    if ((cwg=H5Gcreate(file, "test_named", 0))<0) goto error;
+
+    /* A native integer */
+    if ((type = H5Tcreate(H5T_ENUM, sizeof(c_e1)))<0) goto error;
+    if (H5Tenum_insert(type, "RED",   CPTR(val, E1_RED  ))<0) goto error;
+    if (H5Tenum_insert(type, "GREEN", CPTR(val, E1_GREEN))<0) goto error;
+    if (H5Tenum_insert(type, "BLUE",  CPTR(val, E1_BLUE ))<0) goto error;
+    if (H5Tenum_insert(type, "WHITE", CPTR(val, E1_WHITE))<0) goto error;
+    if (H5Tenum_insert(type, "BLACK", CPTR(val, E1_BLACK))<0) goto error;
+    if (H5Tcommit(cwg, "e1_a", type)<0) goto error;
+    if (H5Tclose(type)<0) goto error;
+
+    /* A smaller type */
+    if ((type = H5Tcreate(H5T_ENUM, 1))<0) goto error;
+    if (H5Tenum_insert(type, "RED",   CPTR(val8, E1_RED  ))<0) goto error;
+    if (H5Tenum_insert(type, "GREEN", CPTR(val8, E1_GREEN))<0) goto error;
+    if (H5Tenum_insert(type, "BLUE",  CPTR(val8, E1_BLUE ))<0) goto error;
+    if (H5Tenum_insert(type, "WHITE", CPTR(val8, E1_WHITE))<0) goto error;
+    if (H5Tenum_insert(type, "BLACK", CPTR(val8, E1_BLACK))<0) goto error;
+    if (H5Tcommit(cwg, "e1_b", type)<0) goto error;
+    if (H5Tclose(type)<0) goto error;
+
+    /* A non-native type */
+    if (H5T_ORDER_BE==H5Tget_order(H5T_NATIVE_INT)) {
+	if ((type = H5Tenum_create(H5T_STD_U8LE))<0) goto error;
+    } else {
+	if ((type = H5Tenum_create(H5T_STD_U8BE))<0) goto error;
+    }
+    if (H5Tenum_insert(type, "RED",   CPTR(val8, E1_RED  ))<0) goto error;
+    if (H5Tenum_insert(type, "GREEN", CPTR(val8, E1_GREEN))<0) goto error;
+    if (H5Tenum_insert(type, "BLUE",  CPTR(val8, E1_BLUE ))<0) goto error;
+    if (H5Tenum_insert(type, "WHITE", CPTR(val8, E1_WHITE))<0) goto error;
+    if (H5Tenum_insert(type, "BLACK", CPTR(val8, E1_BLACK))<0) goto error;
+    if (H5Tcommit(cwg, "e1_c", type)<0) goto error;
+    if (H5Tclose(type)<0) goto error;
+
+    if (H5Gclose(cwg)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Tclose(type);
+	H5Gclose(cwg);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_noconv
+ *
+ * Purpose:	Tests creation of datasets when no conversion is present.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, January  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_noconv(hid_t file)
+{
+    hid_t	cwg=-1, type=-1, space=-1, dset=-1;
+    c_e1	val;
+    static c_e1	data1[]={E1_RED,   E1_GREEN, E1_BLUE,  E1_GREEN, E1_WHITE,
+			 E1_WHITE, E1_BLACK, E1_GREEN, E1_BLUE,  E1_RED,
+			 E1_RED,   E1_BLUE,  E1_GREEN, E1_BLACK, E1_WHITE,
+			 E1_RED,   E1_WHITE, E1_GREEN, E1_GREEN, E1_BLUE};
+    c_e1	data2[NELMTS(data1)];
+    hsize_t	i, ds_size[1]={NELMTS(data1)};
+
+    TESTING("no-conversion datasets");
+    if ((cwg=H5Gcreate(file, "test_noconv", 0))<0) goto error;
+
+    if ((type = H5Tcreate(H5T_ENUM, sizeof(c_e1)))<0) goto error;
+    if (H5Tenum_insert(type, "RED",   CPTR(val, E1_RED  ))<0) goto error;
+    if (H5Tenum_insert(type, "GREEN", CPTR(val, E1_GREEN))<0) goto error;
+    if (H5Tenum_insert(type, "BLUE",  CPTR(val, E1_BLUE ))<0) goto error;
+    if (H5Tenum_insert(type, "WHITE", CPTR(val, E1_WHITE))<0) goto error;
+    if (H5Tenum_insert(type, "BLACK", CPTR(val, E1_BLACK))<0) goto error;
+
+    if ((space=H5Screate_simple(1, ds_size, NULL))<0) goto error;
+    if ((dset=H5Dcreate(cwg, "color_table", type, space, H5P_DEFAULT))<0)
+	goto error;
+    if (H5Dwrite(dset, type, space, space, H5P_DEFAULT, data1)<0) goto error;
+    if (H5Dread(dset, type, space, space, H5P_DEFAULT, data2)<0) goto error;
+
+    for (i=0; i<ds_size[0]; i++) {
+	if (data1[i]!=data2[i]) {
+	    H5_FAILED();
+	    printf("    data1[%lu]=%d, data2[%lu]=%d (should be same)\n",
+		   (unsigned long)i, (int)(data1[i]),
+		   (unsigned long)i, (int)(data2[i]));
+	    goto error;
+	}
+    }
+
+    if (H5Dclose(dset)<0) goto error;
+    if (H5Sclose(space)<0) goto error;
+    if (H5Tclose(type)<0) goto error;
+    if (H5Gclose(cwg)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Dclose(dset);
+	H5Sclose(space);
+	H5Tclose(type);
+	H5Gclose(cwg);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_tr1
+ *
+ * Purpose:	Writes enumerated data to a dataset which requires
+ *		translation. Both memory and file data types use native
+ *		integers but the file type has a different mapping between
+ *		the integers and symbols.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, January  4, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_tr1(hid_t file)
+{
+    hid_t	cwg=-1, m_type=-1, f_type=-1, space=-1, dset=-1;
+    hsize_t	i, ds_size[1]={10};
+    c_e1	eval;
+    int		ival;
+    static c_e1	data1[10]={E1_RED,   E1_GREEN, E1_BLUE,  E1_GREEN, E1_WHITE,
+			   E1_WHITE, E1_BLACK, E1_GREEN, E1_BLUE,  E1_RED};
+    c_e1	data2[10];
+
+    TESTING("O(1) conversions");
+    if ((cwg=H5Gcreate(file, "test_tr1", 0))<0) goto error;
+
+    if ((m_type = H5Tcreate(H5T_ENUM, sizeof(c_e1)))<0) goto error;
+    if (H5Tenum_insert(m_type, "RED",   CPTR(eval, E1_RED  ))<0) goto error;
+    if (H5Tenum_insert(m_type, "GREEN", CPTR(eval, E1_GREEN))<0) goto error;
+    if (H5Tenum_insert(m_type, "BLUE",  CPTR(eval, E1_BLUE ))<0) goto error;
+    if (H5Tenum_insert(m_type, "WHITE", CPTR(eval, E1_WHITE))<0) goto error;
+    if (H5Tenum_insert(m_type, "BLACK", CPTR(eval, E1_BLACK))<0) goto error;
+
+
+    if ((f_type = H5Tcreate(H5T_ENUM, sizeof(c_e1)))<0) goto error;
+    if (H5Tenum_insert(f_type, "RED",   CPTR(ival, 105))<0) goto error;
+    if (H5Tenum_insert(f_type, "GREEN", CPTR(ival, 104))<0) goto error;
+    if (H5Tenum_insert(f_type, "BLUE",  CPTR(ival, 103))<0) goto error;
+    if (H5Tenum_insert(f_type, "WHITE", CPTR(ival, 102))<0) goto error;
+    if (H5Tenum_insert(f_type, "BLACK", CPTR(ival, 101))<0) goto error;
+
+    if ((space=H5Screate_simple(1, ds_size, NULL))<0) goto error;
+    if ((dset=H5Dcreate(cwg, "color_table", f_type, space, H5P_DEFAULT))<0)
+	goto error;
+    if (H5Dwrite(dset, m_type, space, space, H5P_DEFAULT, data1)<0) goto error;
+    if (H5Dread(dset, m_type, space, space, H5P_DEFAULT, data2)<0) goto error;
+
+    for (i=0; i<ds_size[0]; i++) {
+	if (data1[i]!=data2[i]) {
+	    H5_FAILED();
+	    printf("    data1[%lu]=%d, data2[%lu]=%d (should be same)\n",
+		   (unsigned long)i, (int)(data1[i]),
+		   (unsigned long)i, (int)(data2[i]));
+	    goto error;
+	}
+    }
+
+    if (H5Dclose(dset)<0) goto error;
+    if (H5Sclose(space)<0) goto error;
+    if (H5Tclose(m_type)<0) goto error;
+    if (H5Tclose(f_type)<0) goto error;
+    if (H5Gclose(cwg)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Dclose(dset);
+	H5Sclose(space);
+	H5Tclose(m_type);
+	H5Tclose(f_type);
+	H5Gclose(cwg);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_tr2
+ *
+ * Purpose:	Tests conversions that use the O(log N) lookup function.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, January  5, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_tr2(hid_t file)
+{
+    hid_t	cwg=-1, m_type=-1, f_type=-1, space=-1, dset=-1;
+    hsize_t	i, ds_size[1]={10};
+    c_e1	val1;
+    int		val2;
+    static c_e1	data1[10]={E1_RED,   E1_GREEN, E1_BLUE,  E1_GREEN, E1_WHITE,
+			   E1_WHITE, E1_BLACK, E1_GREEN, E1_BLUE,  E1_RED};
+    c_e1	data2[10];
+
+    TESTING("O(log N) converions");
+    if ((cwg=H5Gcreate(file, "test_tr2", 0))<0) goto error;
+
+    if ((m_type = H5Tcreate(H5T_ENUM, sizeof(c_e1)))<0) goto error;
+    if (H5Tenum_insert(m_type, "RED",   CPTR(val1, E1_RED  ))<0) goto error;
+    if (H5Tenum_insert(m_type, "GREEN", CPTR(val1, E1_GREEN))<0) goto error;
+    if (H5Tenum_insert(m_type, "BLUE",  CPTR(val1, E1_BLUE ))<0) goto error;
+    if (H5Tenum_insert(m_type, "WHITE", CPTR(val1, E1_WHITE))<0) goto error;
+    if (H5Tenum_insert(m_type, "BLACK", CPTR(val1, E1_BLACK))<0) goto error;
+
+    if ((f_type = H5Tcreate(H5T_ENUM, sizeof(int)))<0) goto error;
+    if (H5Tenum_insert(f_type, "RED",   CPTR(val2, 1050))<0) goto error;
+    if (H5Tenum_insert(f_type, "GREEN", CPTR(val2, 1040))<0) goto error;
+    if (H5Tenum_insert(f_type, "BLUE",  CPTR(val2, 1030))<0) goto error;
+    if (H5Tenum_insert(f_type, "WHITE", CPTR(val2, 1020))<0) goto error;
+    if (H5Tenum_insert(f_type, "BLACK", CPTR(val2, 1010))<0) goto error;
+
+    if ((space=H5Screate_simple(1, ds_size, NULL))<0) goto error;
+    if ((dset=H5Dcreate(cwg, "color_table", f_type, space, H5P_DEFAULT))<0)
+	goto error;
+    if (H5Dwrite(dset, m_type, space, space, H5P_DEFAULT, data1)<0) goto error;
+    if (H5Dread(dset, m_type, space, space, H5P_DEFAULT, data2)<0) goto error;
+
+    for (i=0; i<ds_size[0]; i++) {
+	if (data1[i]!=data2[i]) {
+	    H5_FAILED();
+	    printf("    data1[%lu]=%d, data2[%lu]=%d (should be same)\n",
+		   (unsigned long)i, (int)(data1[i]),
+		   (unsigned long)i, (int)(data2[i]));
+	    goto error;
+	}
+    }
+
+    if (H5Dclose(dset)<0) goto error;
+    if (H5Sclose(space)<0) goto error;
+    if (H5Tclose(m_type)<0) goto error;
+    if (H5Tclose(f_type)<0) goto error;
+    if (H5Gclose(cwg)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Dclose(dset);
+	H5Sclose(space);
+	H5Tclose(m_type);
+	H5Tclose(f_type);
+	H5Gclose(cwg);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_value_dsnt_exist
+ *
+ * Purpose:	Create an enumeration datatype with "gaps in values"
+ *              and then request a name of non-existing value within
+ *              an existing range by calling H5Tenum_nameof function.
+ *              Function should fail instead of succeeding and returning
+ *              a name of one of the existing values.
+ *              Request a value by supplying non-existing name by calling
+ *              H5Tenum_nameof function. Function should fail.
+ *
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Elena Pourmal
+ *              Wednesday, June 7, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_value_dsnt_exist(void)
+{
+
+    hid_t       datatype_id=(-1);  /* identifiers */
+    int val;
+    char nam[100];
+    size_t size = 100;
+    TESTING("for non-existing name and value");
+    /* Turn off error reporting since we expect failure in this test */
+
+    if (H5Eset_auto(NULL, NULL) < 0) goto error;
+    if ((datatype_id = H5Tenum_create(H5T_NATIVE_INT))< 0) goto error;
+
+    /* These calls should fail, since no memebrs exist yet */
+    if (H5Tenum_valueof(datatype_id, "SAX", &val) >= 0) goto error;
+    val = 3;
+    if (H5Tenum_nameof(datatype_id, &val, nam, size) >= 0) goto error;
+
+    val = 2;
+    if (H5Tenum_insert(datatype_id, "TWO", (int *)&val) < 0) goto error;
+    val = 6;
+    if (H5Tenum_insert(datatype_id, "SIX", (int *)&val) < 0) goto error;
+    val = 10;
+    if (H5Tenum_insert(datatype_id, "TEN", (int *)&val) < 0) goto error;
+
+    /* This call should fail since we did not create a member with value = 3*/
+    val = 3;
+    if (H5Tenum_nameof(datatype_id, &val, nam, size) >= 0) goto error;
+
+    /* This call should fail since we did not create a member with value = 11*/
+    val = 11;
+    if (H5Tenum_nameof(datatype_id, &val, nam, size) >= 0) goto error;
+
+    /* This call should fail since we did not create a member with value = 0*/
+    val = 0;
+    if (H5Tenum_nameof(datatype_id, &val, nam, size) >= 0) goto error;
+
+    /* This call should fail since we do not have SAX name in the type */
+    if (H5Tenum_valueof(datatype_id, "SAX", &val) >= 0) goto error;
+
+    /* This call should fail since we do not have TEEN name in the type */
+    if (H5Tenum_valueof(datatype_id, "TEEN", &val) >= 0) goto error;
+
+    /* This call should fail since we do not have A name in the type */
+    if (H5Tenum_valueof(datatype_id, "A", &val) >= 0) goto error;
+
+    if (H5Tclose(datatype_id) < 0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Tclose(datatype_id);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:
+ *
+ * Return:	Success:
+ *
+ *		Failure:
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, December 22, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    hid_t	fapl=-1, file=-1;
+    char	name[1024];
+    int		nerrors=0;
+
+    h5_reset();
+    fapl = h5_fileaccess();
+
+    /* Create the file */
+    h5_fixname(FILENAME[0], fapl, name, sizeof name);
+    if ((file=H5Fcreate(name, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) goto error;
+
+    /* Tests */
+    nerrors += test_named(file);
+    nerrors += test_noconv(file);
+    nerrors += test_tr1(file);
+    nerrors += test_tr2(file);
+    nerrors += test_value_dsnt_exist();
+
+  	H5Fclose(file);
+
+    if (nerrors) goto error;
+    puts("All enum tests passed.");
+    h5_cleanup(FILENAME, fapl);
+    return 0;
+
+ error:
+    puts("*** ENUM TESTS FAILED ***");
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/test/extend.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/extend.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/extend.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,202 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Friday, January 30, 1998
+ *
+ * Purpose:	Tests extendible datasets.
+ */
+
+#include "h5test.h"
+
+const char *FILENAME[] = {
+    "extend",
+    NULL
+};
+
+#define NX	100		/* USE AN EVEN NUMBER!*/
+#define NY	100		/* USE AN EVEN NUMBER!*/
+
+/* Data buffers */
+static int			buf1[NY][NX], buf2[NX/2][NY/2];
+
+
+/*-------------------------------------------------------------------------
+ * Function:	write_data
+ *
+ * Purpose:	Create extendible dataset and test extend/write/read
+ *
+ * Return:	Success:	0
+ *		Failure:	-1
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, June 10, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+write_data(const char *msg, hid_t file, const char *name, hid_t cparms, hid_t mem_space)
+{
+    hid_t			dataset, file_space, half_space;
+    static const hsize_t 	dims[2] = {NX, NY};
+    static const hsize_t 	half_dims[2] = {NX/2, NY/2};
+    static hsize_t		size[2];
+    hsize_t			offset[2];
+    int				i, j, k, m;
+
+    TESTING(msg);
+
+    if ((dataset = H5Dcreate (file, name, H5T_NATIVE_INT, mem_space,
+			      cparms))<0) TEST_ERROR;
+    /* Write the data */
+    for (i=0; i<5; i++) {
+	for (j=0; j<5; j++) {
+
+	    /* Extend the dataset */
+	    offset[0] = i * NX;
+	    offset[1] = j * NY;
+	    size[0] = offset[0] + NX;
+	    size[1] = offset[1] + NY;
+	    if (H5Dextend (dataset, size)<0) TEST_ERROR;
+
+	    /* Select a hyperslab */
+            if ((file_space = H5Dget_space (dataset))<0) TEST_ERROR;
+	    if (H5Sselect_hyperslab (file_space, H5S_SELECT_SET, offset,
+				     NULL, dims, NULL)<0) TEST_ERROR;
+
+	    /* Write to the hyperslab */
+	    if (H5Dwrite (dataset, H5T_NATIVE_INT, mem_space, file_space,
+			  H5P_DEFAULT, buf1)<0) TEST_ERROR;
+            if (H5Sclose (file_space)<0) TEST_ERROR;
+	}
+    }
+
+    /* Read the data */
+    if ((half_space = H5Screate_simple (2, half_dims, NULL))<0) TEST_ERROR;
+    if ((file_space = H5Dget_space (dataset))<0) TEST_ERROR;
+    for (i=0; i<10; i++) {
+	for (j=0; j<10; j++) {
+
+	    /* Select a hyperslab */
+	    offset[0] = i * NX/2;
+	    offset[1] = j * NY/2;
+	    if (H5Sselect_hyperslab (file_space, H5S_SELECT_SET, offset,
+				     NULL, half_dims, NULL)<0) TEST_ERROR;
+
+	    /* Read */
+	    if (H5Dread (dataset, H5T_NATIVE_INT, half_space, file_space,
+			 H5P_DEFAULT, buf2)<0) TEST_ERROR;
+
+	    /* Compare */
+	    for (k=0; k<NX/2; k++) {
+		for (m=0; m<NY/2; m++) {
+		    if (buf2[k][m]!=buf1[(i%2)*NX/2+k][(j%2)*NY/2+m]) {
+			printf("    i=%d, j=%d, k=%d, m=%d\n", i, j, k, m);
+			printf("    buf2[%d][%d]=%d\n",k,m,buf2[k][m]);
+			printf("    buf1[%d][%d]=%d\n",(i%2)*NX/2+k,(j%2)*NY/2+m,buf1[(i%2)*NX/2+k][(j%2)*NY/2+m]);
+			TEST_ERROR;
+		    }
+		}
+	    }
+	}
+    }
+
+
+    /* Cleanup */
+    if (H5Dclose (dataset)<0) TEST_ERROR;
+    if (H5Sclose (file_space)<0) TEST_ERROR;
+    if (H5Sclose (half_space)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Tests extendible datasets
+ *
+ * Return:	Success:	exit(0)
+ *
+ *		Failure:	exit(non-zero)
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, January 30, 1998
+ *
+ * Modifications:
+ *              Took main data code out into write_data() routine, to allow
+ *              different dataset creation property list settings to be tested.
+ *              Quincey Koziol
+ *              Tuesday, June 10, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main (void)
+{
+    hid_t			file, mem_space, cparms;
+    hid_t			fapl;
+    int		nerrors = 0;
+    static const hsize_t	dims[2] = {NX, NY};
+    static const hsize_t 	chunk_dims[2] = {NX/2, NY/2};
+    static hsize_t		maxdims[2] = {H5S_UNLIMITED, H5S_UNLIMITED};
+    char			filename[1024];
+    int				i, j;
+
+    h5_reset();
+    fapl = h5_fileaccess();
+
+    /* Initialize buffer and space */
+    for (i=0; i<NX; i++) {
+	for (j=0; j<NY; j++) {
+	    buf1[i][j] = i*NY+j;
+	}
+    }
+    if ((mem_space = H5Screate_simple (2, dims, maxdims))<0) TEST_ERROR;
+
+    /* Create the file */
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create the dataset which is originally NX by NY */
+    if((cparms = H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR;
+    if (H5Pset_chunk (cparms, 2, chunk_dims)<0) TEST_ERROR;
+    nerrors += write_data("extendible dataset with incremental allocation",file,"dataset1",cparms,mem_space)<0 	?1:0;
+    if(H5Pset_alloc_time(cparms, H5D_ALLOC_TIME_EARLY)<0) TEST_ERROR;
+    nerrors += write_data("extendible dataset with early allocation",file,"dataset2",cparms,mem_space)<0 	?1:0;
+
+    if (H5Pclose (cparms)<0) TEST_ERROR;
+    if (H5Sclose (mem_space)<0) TEST_ERROR;
+
+    if (H5Fclose (file)<0) TEST_ERROR;
+    if (nerrors) {
+	printf("***** %d FAILURE%s! *****\n", nerrors, 1==nerrors?"":"S");
+	exit(1);
+    }
+    printf("All extend tests passed.\n");
+    h5_cleanup(FILENAME, fapl);
+    return 0;
+
+ error:
+    printf("*** One or more extend tests failed ***\n");
+    return 1;
+}
+

Added: packages/hdf5/branches/upstream/current/test/external.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/external.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/external.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,880 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Tuesday, March  3, 1998
+ *
+ * Purpose:	Tests datasets stored in external raw files.
+ */
+#include "h5test.h"
+
+const char *FILENAME[] = {
+    "extern_1",
+    "extern_2",
+    "extern_3",
+    NULL
+};
+
+
+/*-------------------------------------------------------------------------
+ * Function:	same_contents
+ *
+ * Purpose:	Determines whether two files are exactly the same.
+ *
+ * Return:	Success:	nonzero if same, zero if different.
+ *
+ *		Failure:	zero
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, March  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+same_contents (const char *name1, const char *name2)
+{
+    int		fd1, fd2;
+    ssize_t	n1, n2;
+    char	buf1[1024], buf2[1024];
+
+    fd1 = open (name1, O_RDONLY);
+    fd2 = open (name2, O_RDONLY);
+    assert (fd1>=0 && fd2>=0);
+
+    while (1) {
+	n1 = read (fd1, buf1, sizeof(buf1));
+	n2 = read (fd2, buf2, sizeof(buf2));
+	assert (n1>=0 && (size_t)n1<=sizeof(buf1));
+	assert (n2>=0 && (size_t)n2<=sizeof(buf2));
+	assert (n1==n2);
+
+	if (n1<=0 && n2<=0) break;
+	if (memcmp (buf1, buf2, (size_t)n1)) {
+	    close (fd1);
+	    close (fd2);
+	    return 0;
+	}
+    }
+    close (fd1);
+    close (fd2);
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_1a
+ *
+ * Purpose:	Tests a non-extendible dataset with a single external file.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_1a(hid_t file)
+{
+    hid_t	dcpl=-1;		/*dataset creation properties	*/
+    hid_t	space=-1;		/*data space			*/
+    hid_t	dset=-1;		/*dataset			*/
+    hsize_t	cur_size[1];		/*data space current size	*/
+    hsize_t	max_size[1];		/*data space maximum size	*/
+    int		n;			/*number of external files	*/
+    char	name[256];		/*external file name		*/
+    off_t	file_offset;		/*external file offset		*/
+    hsize_t	file_size;		/*sizeof external file segment	*/
+
+    TESTING("fixed-size data space, exact storage");
+
+    /* Create the dataset */
+    if((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    cur_size[0] = max_size[0] = 100;
+    if (H5Pset_external(dcpl, "ext1.data", (off_t)0,
+	(hsize_t)(max_size[0]*sizeof(int)))<0) goto error;
+    if ((space = H5Screate_simple (1, cur_size, max_size))<0) goto error;
+    if ((dset = H5Dcreate (file, "dset1", H5T_NATIVE_INT, space, dcpl))<0)
+	goto error;
+    if (H5Dclose (dset)<0) goto error;
+    if (H5Sclose (space)<0) goto error;
+    if (H5Pclose (dcpl)<0) goto error;
+
+    /* Read dataset creation information */
+    if ((dset = H5Dopen (file, "dset1"))<0) goto error;
+
+    /* Test dataset address.  Should be undefined. */
+    if (H5Dget_offset(dset)!=HADDR_UNDEF) goto error;
+
+    if ((dcpl = H5Dget_create_plist (dset))<0) goto error;
+    if ((n=H5Pget_external_count (dcpl))<0) goto error;
+    if (1!=n) {
+	H5_FAILED();
+	puts("    Returned external count is wrong.");
+	printf("   got: %d\n    ans: 1\n", n);
+	goto error;
+    }
+    strcpy (name+sizeof(name)-4, "...");
+    if (H5Pget_external (dcpl, 0, sizeof(name)-4, name, &file_offset,
+			 &file_size)<0) goto error;
+    if (file_offset!=0) {
+	H5_FAILED();
+	puts("    Wrong file offset.");
+	printf("    got: %lu\n    ans: 0\n", (unsigned long)file_offset);
+	goto error;
+    }
+    if (file_size!=(max_size[0]*sizeof(int))) {
+	H5_FAILED();
+	puts("    Wrong file size.");
+	printf("    got: %lu\n    ans: %lu\n", (unsigned long)file_size,
+		(unsigned long)max_size[0]*sizeof(int));
+	goto error;
+    }
+    if (H5Pclose (dcpl)<0) goto error;
+    if (H5Dclose (dset)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Pclose(dcpl);
+	H5Sclose(space);
+	H5Dclose(dset);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_1b
+ *
+ * Purpose:	Test a single external file which is too small to represent
+ *		all the data.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_1b(hid_t file)
+{
+    hid_t	dcpl=-1;		/*dataset creation properties	*/
+    hid_t	space=-1;		/*data space			*/
+    hid_t	dset=-1;		/*dataset			*/
+    hsize_t	cur_size[1];		/*current data space size	*/
+    hsize_t	max_size[1];		/*maximum data space size	*/
+
+    TESTING("external storage is too small");
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    cur_size[0] = max_size[0] = 100;
+    if (H5Pset_external(dcpl, "ext1.data", (off_t)0,
+	(hsize_t)(max_size[0]*sizeof(int)-1))<0) goto error;
+    if ((space = H5Screate_simple (1, cur_size, max_size))<0) goto error;
+    H5E_BEGIN_TRY {
+	dset = H5Dcreate (file, "dset2", H5T_NATIVE_INT, space, dcpl);
+    } H5E_END_TRY;
+    if (dset>=0) {
+	H5_FAILED();
+	puts("    Small external file succeeded instead of failing.");
+	goto error;
+    }
+    if (H5Sclose (space)<0) goto error;
+    if (H5Pclose (dcpl)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Sclose(space);
+	H5Pclose(dcpl);
+	H5Dclose(dset);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_1c
+ *
+ * Purpose:	Test a single external file which is large enough to
+ *		represent the current data and large enough to represent the
+ *		eventual size of the data.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_1c(hid_t file)
+{
+    hid_t	dcpl=-1;		/*dataset creation properties	*/
+    hid_t	space=-1;		/*data space			*/
+    hid_t	dset=-1;		/*dataset			*/
+    hsize_t	cur_size[1];		/*current data space size       */
+    hsize_t	max_size[1];		/*maximum data space size	*/
+
+    TESTING("extendible dataspace, exact external size");
+    if((dcpl=H5Pcreate (H5P_DATASET_CREATE))<0) goto error;
+    cur_size[0] = 100;
+    max_size[0] = 200;
+    if (H5Pset_external(dcpl, "ext1.data", (off_t)0,
+	(hsize_t)(max_size[0]*sizeof(int)))<0) goto error;
+    if ((space = H5Screate_simple (1, cur_size, max_size))<0) goto error;
+    if ((dset = H5Dcreate (file, "dset3", H5T_NATIVE_INT, space, dcpl))<0)
+	goto error;
+    if (H5Dclose (dset)<0) goto error;
+    if (H5Sclose (space)<0) goto error;
+    if (H5Pclose (dcpl)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Dclose(dset);
+	H5Pclose(dcpl);
+	H5Sclose(space);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_1d
+ *
+ * Purpose:	Test a single external file which is large enough for the
+ *		current data size but not large enough for the eventual size.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_1d(hid_t file)
+{
+    hid_t	dcpl=-1;		/*dataset creation properties	*/
+    hid_t	space=-1;		/*data space			*/
+    hid_t	dset=-1;		/*dataset			*/
+    hsize_t	cur_size[1];		/*current data space size       */
+    hsize_t	max_size[1];		/*maximum data space size	*/
+
+    TESTING("extendible dataspace, external storage is too small");
+    if((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    cur_size[0] = 100;
+    max_size[0] = 200;
+    if (H5Pset_external(dcpl, "ext1.data", (off_t)0,
+	(hsize_t)(max_size[0]*sizeof(int)-1))<0) goto error;
+    if ((space=H5Screate_simple(1, cur_size, max_size))<0) goto error;
+    H5E_BEGIN_TRY {
+	dset = H5Dcreate (file, "dset4", H5T_NATIVE_INT, space, dcpl);
+    } H5E_END_TRY;
+    if (dset>=0) {
+	H5_FAILED();
+	puts("    Small external file succeeded instead of failing.");
+	goto error;
+    }
+    if (H5Sclose (space)<0) goto error;
+    if (H5Pclose (dcpl)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Dclose(dset);
+	H5Pclose(dcpl);
+	H5Sclose(space);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_1e
+ *
+ * Purpose:	Test a single external file of unlimited size and an
+ *		unlimited data space.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_1e(hid_t file)
+{
+    hid_t	dcpl=-1;		/*dataset creation properties	*/
+    hid_t	space=-1;		/*data space			*/
+    hid_t	dset=-1;		/*dataset			*/
+    hsize_t	cur_size[1];		/*data space current size	*/
+    hsize_t	max_size[1];		/*data space maximum size	*/
+    int		n;			/*number of external files	*/
+    char	name[256];		/*external file name		*/
+    off_t	file_offset;		/*external file offset		*/
+    hsize_t	file_size;		/*sizeof external file segment	*/
+
+    TESTING("unlimited dataspace, unlimited external storage");
+
+    /* Create dataset */
+    if((dcpl=H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
+    if (H5Pset_external(dcpl, "ext1.data", (off_t)0, H5F_UNLIMITED)<0) goto error;
+    cur_size[0] = 100;
+    max_size[0] = H5S_UNLIMITED;
+    if ((space=H5Screate_simple(1, cur_size, max_size))<0) goto error;
+    if ((dset=H5Dcreate(file, "dset5", H5T_NATIVE_INT, space, dcpl))<0)
+	goto error;
+    if (H5Dclose (dset)<0) goto error;
+    if (H5Sclose (space)<0) goto error;
+    if (H5Pclose (dcpl)<0) goto error;
+
+    /* Read dataset creation information */
+    if ((dset = H5Dopen (file, "dset5"))<0) goto error;
+    if ((dcpl = H5Dget_create_plist (dset))<0) goto error;
+    if ((n = H5Pget_external_count (dcpl))<0) goto error;
+    if (1!=n) {
+	H5_FAILED();
+	puts("    Returned external count is wrong.");
+	printf("    got: %d\n    ans: 1\n", n);
+	goto error;
+    }
+    strcpy (name+sizeof(name)-4, "...");
+    if (H5Pget_external (dcpl, 0, sizeof(name)-4, name, &file_offset,
+			 &file_size)<0) goto error;
+    if (file_offset!=0) {
+	H5_FAILED();
+	puts("    Wrong file offset.");
+	printf("    got: %lu\n    ans: 0\n", (unsigned long)file_offset);
+	goto error;
+    }
+    if (H5F_UNLIMITED!=file_size) {
+	H5_FAILED();
+	puts("    Wrong file size.");
+	printf("    got: %lu\n    ans: INF\n", (unsigned long)file_size);
+	goto error;
+    }
+    if (H5Pclose (dcpl)<0) goto error;
+    if (H5Dclose (dset)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Dclose(dset);
+	H5Pclose(dcpl);
+	H5Sclose(space);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_1f
+ *
+ * Purpose:	Test multiple external files for a dataset.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_1f(hid_t file)
+{
+    hid_t	dcpl=-1;		/*dataset creation properties	*/
+    hid_t	space=-1;		/*data space			*/
+    hid_t	dset=-1;		/*dataset			*/
+    hsize_t	cur_size[1];		/*data space current size	*/
+    hsize_t	max_size[1];		/*data space maximum size	*/
+
+    TESTING("multiple external files");
+    if((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    cur_size[0] = max_size[0] = 100;
+    if (H5Pset_external(dcpl, "ext1.data", (off_t)0,
+	(hsize_t)(max_size[0]*sizeof(int)/4))<0) goto error;
+    if (H5Pset_external(dcpl, "ext2.data", (off_t)0,
+	(hsize_t)(max_size[0]*sizeof(int)/4))<0) goto error;
+    if (H5Pset_external(dcpl, "ext3.data", (off_t)0,
+	(hsize_t)(max_size[0]*sizeof(int)/4))<0) goto error;
+    if (H5Pset_external(dcpl, "ext4.data", (off_t)0,
+	(hsize_t)(max_size[0]*sizeof(int)/4))<0) goto error;
+    if ((space=H5Screate_simple(1, cur_size, max_size))<0) goto error;
+    if ((dset=H5Dcreate(file, "dset6", H5T_NATIVE_INT, space, dcpl))<0)
+	goto error;
+    if (H5Dclose(dset)<0) goto error;
+    if (H5Sclose(space)<0) goto error;
+    if (H5Pclose(dcpl)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Dclose(dset);
+	H5Pclose(dcpl);
+	H5Sclose(space);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_1g
+ *
+ * Purpose:	It should be impossible to define an unlimited external file
+ *		and then follow it with another external file.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_1g(void)
+{
+    hid_t	dcpl=-1;		/*dataset creation properties	*/
+    herr_t	status;			/*function return status	*/
+    int		n;			/*number of external files	*/
+
+    TESTING("external file following unlimited file");
+    if ((dcpl=H5Pcreate (H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_external(dcpl, "ext1.data", (off_t)0, H5F_UNLIMITED)<0) goto error;
+    H5E_BEGIN_TRY {
+	status = H5Pset_external(dcpl, "ext2.data", (off_t)0, (hsize_t)100);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	puts ("    H5Pset_external() succeeded when it should have failed.");
+	goto error;
+    }
+    if ((n = H5Pget_external_count(dcpl))<0) goto error;
+    if (1!=n) {
+	H5_FAILED();
+	puts("    Wrong external file count returned.");
+	goto error;
+    }
+    if (H5Pclose(dcpl)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Pclose(dcpl);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_1h
+ *
+ * Purpose:	It should be impossible to create a set of external files
+ *		whose total size overflows a size_t integer.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, November 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_1h(void)
+{
+    hid_t	dcpl=-1;		/*dataset creation properties	*/
+    herr_t	status;			/*return status			*/
+
+    TESTING("address overflow in external files");
+    if((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_external(dcpl, "ext1.data", (off_t)0, H5F_UNLIMITED-1)<0) goto error;
+    H5E_BEGIN_TRY {
+	status = H5Pset_external(dcpl, "ext2.data", (off_t)0, (hsize_t)100);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	puts("    H5Pset_external() succeeded when it should have failed.");
+	goto error;
+    }
+    if (H5Pclose(dcpl)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Pclose(dcpl);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_2
+ *
+ * Purpose:	Tests reading from an external file set.
+ *
+ * Return:	Success:	0
+ *
+ * 		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, March  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_2 (hid_t fapl)
+{
+    hid_t	file=-1;		/*file to write to		*/
+    hid_t	dcpl=-1;		/*dataset creation properties	*/
+    hid_t	space=-1;		/*data space			*/
+    hid_t	dset=-1;		/*dataset			*/
+    hid_t	grp=-1;			/*group to emit diagnostics	*/
+    int		fd;			/*external file descriptors	*/
+    hsize_t	i, j;			/*miscellaneous counters	*/
+    hssize_t	n;			/*bytes of I/O			*/
+    char	filename[1024];		/*file names			*/
+    int		part[25], whole[100];	/*raw data buffers		*/
+    hsize_t	cur_size;		/*current data space size	*/
+    hid_t	hs_space;		/*hyperslab data space		*/
+    hsize_t	hs_start = 30;		/*hyperslab starting offset	*/
+    hsize_t	hs_count = 25;		/*hyperslab size		*/
+	int temparray[10] = {0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f};
+
+    TESTING("read external dataset");
+
+    /* Write the data to external files directly */
+    for (i=0; i<4; i++) {
+	for (j=0; j<25; j++) {
+	    part[j] = (int)(i*25+j);
+	}
+	sprintf (filename, "extern_%lua.raw", (unsigned long)i+1);
+	fd = HDopen (filename, O_RDWR|O_CREAT|O_TRUNC, 0666);
+	assert (fd>=0);
+/*	n = lseek (fd, (off_t)(i*10), SEEK_SET);
+*/
+	n = write(fd,temparray,(size_t)i*10);
+	assert (n>=0 && (size_t)n==i*10);
+	n = write (fd, part, sizeof(part));
+	assert (n==sizeof(part));
+	close (fd);
+    }
+
+    /*
+     * Create the file and an initial group.  This causes messages about
+     * debugging to be emitted before we start playing games with what the
+     * output looks like.
+     */
+    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) {
+	goto error;
+    }
+    if ((grp=H5Gcreate(file, "emit-diagnostics", 8))<0) goto error;
+    if (H5Gclose(grp)<0) goto error;
+
+    /* Create the dataset */
+    if((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_external (dcpl, "extern_1a.raw",  (off_t)0, (hsize_t)sizeof part)<0 ||
+	H5Pset_external (dcpl, "extern_2a.raw", (off_t)10, (hsize_t)sizeof part)<0 ||
+	H5Pset_external (dcpl, "extern_3a.raw", (off_t)20, (hsize_t)sizeof part)<0 ||
+	H5Pset_external (dcpl, "extern_4a.raw", (off_t)30, (hsize_t)sizeof part)<0)
+	goto error;
+    cur_size = 100;
+    if ((space=H5Screate_simple (1, &cur_size, NULL))<0) goto error;
+    if ((dset=H5Dcreate(file, "dset1", H5T_NATIVE_INT, space, dcpl))<0)
+	goto error;
+
+    /*
+     * Read the entire dataset and compare with the original
+     */
+    memset (whole, 0, sizeof(whole));
+    if (H5Dread(dset, H5T_NATIVE_INT, space, space, H5P_DEFAULT, whole)<0)
+	goto error;
+    for (i=0; i<100; i++) {
+	if (whole[i]!=(signed)i) {
+	    H5_FAILED();
+	    puts("    Incorrect value(s) read.");
+	    goto error;
+	}
+    }
+
+    /*
+     * Read the middle of the dataset
+     */
+    if ((hs_space=H5Scopy(space))<0) goto error;
+    if (H5Sselect_hyperslab(hs_space, H5S_SELECT_SET, &hs_start, NULL,
+			    &hs_count, NULL)<0) goto error;
+    memset(whole, 0, sizeof(whole));
+    if (H5Dread (dset, H5T_NATIVE_INT, hs_space, hs_space, H5P_DEFAULT,
+		 whole)<0) goto error;
+    if (H5Sclose (hs_space)<0) goto error;
+    for (i=hs_start; i<hs_start+hs_count; i++) {
+	if (whole[i]!=(signed)i) {
+	    H5_FAILED();
+	    puts("    Incorrect value(s) read.");
+	    goto error;
+	}
+    }
+
+    if (H5Dclose(dset)<0) goto error;
+    if (H5Pclose(dcpl)<0) goto error;
+    if (H5Sclose(space)<0) goto error;
+    if (H5Fclose(file)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Dclose(dset);
+	H5Pclose(dcpl);
+	H5Sclose(space);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_3
+ *
+ * Purpose:	Tests writing to an external file set.
+ *
+ * Return:	Success:	0
+ *
+ * 		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, March  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_3 (hid_t fapl)
+{
+    hid_t	file=-1;		/*file to which to write	*/
+    hid_t	dcpl=-1;		/*dataset creation properties	*/
+    hid_t	mem_space=-1;		/*memory data space		*/
+    hid_t	file_space=-1;		/*file data space		*/
+    hid_t	dset=-1;		/*dataset			*/
+    unsigned	i;			/*miscellaneous counters	*/
+    int		fd;			/*external file descriptor	*/
+    int	    part[25],whole[100];	/*raw data buffers		*/
+    hsize_t	cur_size=100;		/*current data space size	*/
+    hsize_t	max_size=200;		/*maximum data space size	*/
+    hsize_t	hs_start=100;		/*hyperslab starting offset	*/
+    hsize_t	hs_count=100;		/*hyperslab size		*/
+    char	filename[1024];		/*file name			*/
+	int temparray[10] = {0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f,0x0f0f0f0f};
+
+    TESTING("write external dataset");
+
+    /* Create another file */
+    h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) {
+	goto error;
+    }
+
+    /* Create the external file list */
+    if((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_external(dcpl, "extern_1b.raw", (off_t)0, (hsize_t)sizeof part)<0 ||
+	H5Pset_external(dcpl, "extern_2b.raw", (off_t)10, (hsize_t)sizeof part)<0 ||
+	H5Pset_external(dcpl, "extern_3b.raw", (off_t)20, (hsize_t)sizeof part)<0 ||
+	H5Pset_external(dcpl, "extern_4b.raw", (off_t)30, H5F_UNLIMITED)<0)
+	goto error;
+
+    /* Make sure the output files are fresh*/
+    for (i=1; i<=4; i++) {
+	sprintf(filename, "extern_%db.raw", i);
+	if ((fd= open(filename, O_RDWR|O_CREAT|O_TRUNC, 0666))<0) {
+	    H5_FAILED();
+	    printf("    cannot open %s: %s\n", filename, strerror(errno));
+	    goto error;
+	}
+
+	write(fd, temparray, (i-1)*10);
+	close (fd);
+    }
+
+    /* Create the dataset */
+    if ((mem_space=H5Screate_simple(1, &cur_size, &max_size))<0) goto error;
+    if ((file_space=H5Scopy(mem_space))<0) goto error;
+    if ((dset=H5Dcreate(file, "dset1", H5T_NATIVE_INT, file_space, dcpl))<0)
+	goto error;
+
+    /* Write the entire dataset and compare with the original */
+    for (i=0; i<cur_size; i++) whole[i] = i;
+    if (H5Dwrite(dset, H5T_NATIVE_INT, mem_space, file_space, H5P_DEFAULT,
+		 whole)<0) goto error;
+    for (i=0; i<4; i++) {
+	char name1[64], name2[64];
+	sprintf (name1, "extern_%da.raw", i+1);
+	sprintf (name2, "extern_%db.raw", i+1);
+	if (!same_contents (name1, name2)) {
+	    H5_FAILED();
+	    puts ("   Output differs from expected value.");
+	    goto error;
+	}
+    }
+
+    /* Extend the dataset by another 100 elements */
+    if (H5Dextend(dset, &max_size)<0) goto error;
+    if (H5Sclose(file_space)<0) goto error;
+    if ((file_space=H5Dget_space(dset))<0) goto error;
+
+    /* Write second half of dataset */
+    for (i=0; i<hs_count; i++) whole[i] = 100+i;
+    if (H5Sselect_hyperslab(file_space, H5S_SELECT_SET, &hs_start, NULL,
+			    &hs_count, NULL)<0) goto error;
+    if (H5Dwrite(dset, H5T_NATIVE_INT, mem_space, file_space, H5P_DEFAULT,
+		 whole)<0) goto error;
+
+
+    if (H5Dclose (dset)<0) goto error;
+    if (H5Pclose (dcpl)<0) goto error;
+    if (H5Sclose (mem_space)<0) goto error;
+    if (H5Sclose (file_space)<0) goto error;
+    if (H5Fclose (file)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Dclose(dset);
+	H5Pclose(dcpl);
+	H5Sclose(mem_space);
+	H5Sclose(file_space);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Runs external dataset tests.
+ *
+ * Return:	Success:	exit(0)
+ *
+ *		Failure:	exit(non-zero)
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, March  3, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main (void)
+{
+    hid_t	fapl=-1;		/*file access properties	*/
+    hid_t	file=-1;		/*file for test_1* functions	*/
+    char	filename[1024];		/*file name for test_1* funcs	*/
+    hid_t	grp=-1;			/*group to emit diagnostics	*/
+    int		nerrors=0;		/*number of errors		*/
+
+    h5_reset();
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) {
+	goto error;
+    }
+    if ((grp=H5Gcreate(file, "emit-diagnostics", 8))<0) goto error;
+    if (H5Gclose (grp)<0) goto error;
+
+    nerrors += test_1a(file);
+    nerrors += test_1b(file);
+    nerrors += test_1c(file);
+    nerrors += test_1d(file);
+    nerrors += test_1e(file);
+    nerrors += test_1f(file);
+    nerrors += test_1g();
+    nerrors += test_1h();
+    nerrors += test_2(fapl);
+    nerrors += test_3(fapl);
+    if (nerrors>0) goto error;
+
+    if (H5Fclose(file)<0) goto error;
+    puts("All external storage tests passed.");
+    if (h5_cleanup(FILENAME, fapl)) {
+	remove("extern_1a.raw");
+	remove("extern_1b.raw");
+	remove("extern_2a.raw");
+	remove("extern_2b.raw");
+	remove("extern_3a.raw");
+	remove("extern_3b.raw");
+	remove("extern_4a.raw");
+	remove("extern_4b.raw");
+    }
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Fclose(file);
+	H5Pclose(fapl);
+    } H5E_END_TRY;
+    nerrors = MAX(1, nerrors);
+    printf ("%d TEST%s FAILED.\n", nerrors, 1==nerrors?"":"s");
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/test/family_v1.7_00000.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/family_v1.7_00000.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/family_v1.7_00001.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/family_v1.7_00001.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/family_v1.7_00002.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/family_v1.7_00002.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/family_v1.7_00003.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/family_v1.7_00003.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/file_handle.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/file_handle.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/file_handle.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,597 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Raymond Lu<slu at ncsa.uiuc.edu>
+ *              Tuesday, Sept 24, 2002
+ *
+ * Purpose:     Tests the file handle interface
+ */
+
+#include "h5test.h"
+
+#define KB              1024
+#define FAMILY_NUMBER   4
+#define FAMILY_SIZE     (1*KB)
+#define FAMILY_SIZE2    (5*KB)
+#define MULTI_SIZE      128
+#define CORE_INCREMENT  (4*KB)
+
+const char *FILENAME[] = {
+    "sec2_file",
+    "core_file",
+    "family_file",
+    "multi_file",
+    NULL
+};
+
+#define COMPAT_BASENAME "family_v1.7_"
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_sec2
+ *
+ * Purpose:     Tests the file handle interface for SEC2 driver
+ *
+ * Return:      Success:        exit(0)
+ *
+ *              Failure:        exit(1)
+ *
+ * Programmer:  Raymond Lu
+ *              Tuesday, Sept 24, 2002
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Wednesday, June 23, 2004
+ *              Added test for H5Fget_filesize.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_sec2(void)
+{
+    hid_t       file=(-1), fapl, access_fapl = -1;
+    char        filename[1024];
+    int         *fhandle=NULL;
+    hsize_t     file_size;
+
+    TESTING("SEC2 file driver");
+
+    /* Set property list and file name for SEC2 driver. */
+    fapl = h5_fileaccess();
+    if(H5Pset_fapl_sec2(fapl)<0)
+        goto error;
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+
+    if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+        goto error;
+
+    /* Retrieve the access property list... */
+    if ((access_fapl = H5Fget_access_plist(file)) < 0)
+        goto error;
+
+    /* ...and close the property list */
+    if (H5Pclose(access_fapl) < 0)
+        goto error;
+
+    /* Check file handle API */
+    if(H5Fget_vfd_handle(file, H5P_DEFAULT, (void **)&fhandle)<0)
+        goto error;
+    if(*fhandle<0)
+        goto error;
+
+    /* Check file size API */
+    if(H5Fget_filesize(file, &file_size) < 0)
+        goto error;
+
+    /* There is no garantee the size of metadata in file is constant.
+     * Just try to check if it's reasonable.  It's 2KB right now.
+     */
+    if(file_size<1*KB || file_size>4*KB)
+        goto error;
+
+    if(H5Fclose(file)<0)
+        goto error;
+    h5_cleanup(FILENAME, fapl);
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Pclose (fapl);
+        H5Fclose(file);
+    } H5E_END_TRY;
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_core
+ *
+ * Purpose:     Tests the file handle interface for CORE driver
+ *
+ * Return:      Success:        exit(0)
+ *
+ *              Failure:        exit(1)
+ *
+ * Programmer:  Raymond Lu
+ *              Tuesday, Sept 24, 2002
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Wednesday, June 23, 2004
+ *              Added test for H5Fget_filesize.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_core(void)
+{
+    hid_t       file=(-1), fapl, access_fapl = -1;
+    char        filename[1024];
+    void        *fhandle=NULL;
+    hsize_t     file_size;
+
+    TESTING("CORE file driver");
+
+    /* Set property list and file name for CORE driver */
+    fapl = h5_fileaccess();
+    if(H5Pset_fapl_core(fapl, CORE_INCREMENT, TRUE)<0)
+        goto error;
+    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+
+    if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+        goto error;
+
+    /* Retrieve the access property list... */
+    if ((access_fapl = H5Fget_access_plist(file)) < 0)
+        goto error;
+
+    /* ...and close the property list */
+    if (H5Pclose(access_fapl) < 0)
+        goto error;
+
+    if(H5Fget_vfd_handle(file, H5P_DEFAULT, &fhandle)<0)
+        goto error;
+    if(fhandle==NULL)
+    {
+        printf("fhandle==NULL\n");
+               goto error;
+    }
+
+    /* Check file size API */
+    if(H5Fget_filesize(file, &file_size) < 0)
+        goto error;
+
+    /* There is no garantee the size of metadata in file is constant.
+     * Just try to check if it's reasonable.  Why is this 4KB?
+     */
+    if(file_size<2*KB || file_size>6*KB)
+        goto error;
+
+    if(H5Fclose(file)<0)
+        goto error;
+    h5_cleanup(FILENAME, fapl);
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Pclose (fapl);
+        H5Fclose(file);
+    } H5E_END_TRY;
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_family
+ *
+ * Purpose:     Tests the file handle interface for FAMILY driver
+ *
+ * Return:      Success:        exit(0)
+ *
+ *              Failure:        exit(1)
+ *
+ * Programmer:  Raymond Lu
+ *              Tuesday, Sept 24, 2002
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Wednesday, June 23, 2004
+ *              Added test for H5Fget_filesize.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_family(void)
+{
+    hid_t       file=(-1), fapl, fapl2=(-1), space=(-1), dset=(-1);
+    hid_t       access_fapl = -1;
+    char        filename[1024];
+    char        dname[]="dataset";
+    int         i, j;
+    int         *fhandle=NULL, *fhandle2=NULL;
+    int         buf[FAMILY_NUMBER][FAMILY_SIZE];
+    hsize_t     dims[2]={FAMILY_NUMBER, FAMILY_SIZE};
+    hsize_t     file_size;
+
+    TESTING("FAMILY file driver");
+
+    /* Set property list and file name for FAMILY driver */
+    fapl = h5_fileaccess();
+    if(H5Pset_fapl_family(fapl, (hsize_t)FAMILY_SIZE, H5P_DEFAULT)<0)
+        goto error;
+    h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
+
+    if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+        goto error;
+
+    if(H5Fclose(file)<0)
+        goto error;
+
+    /* Tries to reopen the file with member file size smaller than
+     * actual 1st member file size(976 bytes).  The library is
+     * supposed to adjust the member size to 976 bytes. */
+    if(H5Pset_fapl_family(fapl, (hsize_t)512, H5P_DEFAULT)<0)
+        goto error;
+
+    if((file=H5Fopen(filename, H5F_ACC_RDWR, fapl))<0)
+        goto error;
+
+    /* Check file size API */
+    if(H5Fget_filesize(file, &file_size) < 0)
+        goto error;
+
+    /* The file size is supposed to be 976 bytes right now. */
+    if(file_size<KB/2 || file_size>4*KB)
+        goto error;
+
+    /* Create and write dataset */
+    if((space=H5Screate_simple(2, dims, NULL))<0)
+        goto error;
+
+    /* Retrieve the access property list... */
+    if ((access_fapl = H5Fget_access_plist(file)) < 0)
+        goto error;
+
+    /* ...and close the property list */
+    if (H5Pclose(access_fapl) < 0)
+        goto error;
+
+    if((dset=H5Dcreate(file, dname, H5T_NATIVE_INT, space, H5P_DEFAULT))<0)
+        goto error;
+
+    for(i=0; i<FAMILY_NUMBER; i++)
+        for(j=0; j<FAMILY_SIZE; j++)
+            buf[i][j] = i*10000+j;
+    if(H5Dwrite(dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf)<0)
+        goto error;
+
+    /* check file handle API */
+    if((fapl2=H5Pcreate(H5P_FILE_ACCESS))<0)
+        goto error;
+    if(H5Pset_family_offset(fapl2, (hsize_t)0)<0)
+        goto error;
+
+    if(H5Fget_vfd_handle(file, fapl2, (void **)&fhandle)<0)
+        goto error;
+    if(*fhandle<0)
+        goto error;
+
+    if(H5Pset_family_offset(fapl2, (hsize_t)(FAMILY_SIZE*2))<0)
+        goto error;
+    if(H5Fget_vfd_handle(file, fapl2, (void **)&fhandle2)<0)
+        goto error;
+    if(*fhandle2<0)
+        goto error;
+
+    /* Check file size API */
+    if(H5Fget_filesize(file, &file_size) < 0)
+        goto error;
+
+    /* Some data has been written.  The file size should be bigger(18KB+976 bytes if int size is 4 bytes) now. */
+    if(sizeof(int)<=4) {
+        if(file_size<18*KB || file_size>20*KB)
+            goto error;
+    } else if(sizeof(int)>=8) {
+        if(file_size<32*KB || file_size>40*KB)
+            goto error;
+    }
+
+    if(H5Sclose(space)<0)
+        goto error;
+    if(H5Dclose(dset)<0)
+        goto error;
+    if(H5Pclose(fapl2)<0)
+        goto error;
+    if(H5Fclose(file)<0)
+        goto error;
+    h5_cleanup(FILENAME, fapl);
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Sclose(space);
+        H5Dclose(dset);
+        H5Pclose (fapl2);
+        H5Pclose (fapl2);
+        H5Fclose(file);
+    } H5E_END_TRY;
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_family_compat
+ *
+ * Purpose:     Tests the forward compatibility for FAMILY driver.
+ *              See if we can open files created with v1.7 library.
+ *              The source file was created by the test/file_handle.c
+ *              of the v1.7 library.  Then tools/misc/h5repart.c was
+ *              used to concantenated.  The command was "h5repart -m 5k
+ *              family_file%05d.h5 family_v1.7_%05d.h5".
+ *
+ * Return:      Success:        exit(0)
+ *
+ *              Failure:        exit(1)
+ *
+ * Programmer:  Raymond Lu
+ *              June 3, 2005
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_family_compat(void)
+{
+    hid_t       file=(-1), fapl;
+    char        filename[1024];
+    char        pathname[1024];
+    char       *srcdir = getenv("srcdir"); /*where the src code is located*/
+
+    TESTING("FAMILY file driver forward compatibility");
+
+    /* Set property list and file name for FAMILY driver */
+    fapl = h5_fileaccess();
+
+    if(H5Pset_fapl_family(fapl, (hsize_t)FAMILY_SIZE2, H5P_DEFAULT)<0)
+        goto error;
+
+    h5_fixname(COMPAT_BASENAME, fapl, filename, sizeof filename);
+    pathname[0] = '\0';
+
+    /* Generate correct name for test file by prepending the source path */
+    if(srcdir && ((strlen(srcdir) + strlen(filename) + 1) < sizeof(pathname))) {
+        strcpy(pathname, srcdir);
+        strcat(pathname, "/");
+    }
+    strcat(pathname, filename);
+
+    if((file=H5Fopen(pathname, H5F_ACC_RDONLY, fapl))<0)
+        goto error;
+
+    if(H5Fclose(file)<0)
+        goto error;
+
+    h5_cleanup(FILENAME, fapl);
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Fclose(file);
+    } H5E_END_TRY;
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_multi
+ *
+ * Purpose:     Tests the file handle interface for MUTLI driver
+ *
+ * Return:      Success:        exit(0)
+ *
+ *              Failure:        exit(1)
+ *
+ * Programmer:  Raymond Lu
+ *              Tuesday, Sept 24, 2002
+ *
+ * Modifications:
+ *
+ *              Raymond Lu
+ *              Wednesday, June 23, 2004
+ *              Added test for H5Fget_filesize.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_multi(void)
+{
+    hid_t       file=(-1), fapl, fapl2=(-1), dset=(-1), space=(-1);
+    hid_t       access_fapl = -1;
+    char        filename[1024];
+    int         *fhandle2=NULL, *fhandle=NULL;
+    hsize_t     file_size;
+    H5FD_mem_t  mt, memb_map[H5FD_MEM_NTYPES];
+    hid_t       memb_fapl[H5FD_MEM_NTYPES];
+    haddr_t     memb_addr[H5FD_MEM_NTYPES];
+    const char  *memb_name[H5FD_MEM_NTYPES];
+    char        sv[H5FD_MEM_NTYPES][32];
+    hsize_t     dims[2]={MULTI_SIZE, MULTI_SIZE};
+    char        dname[]="dataset";
+    int         i, j;
+    int         buf[MULTI_SIZE][MULTI_SIZE];
+
+    TESTING("MULTI file driver");
+    /* Set file access property list for MULTI driver */
+    fapl = h5_fileaccess();
+
+    HDmemset(memb_map, 0,  sizeof memb_map);
+    HDmemset(memb_fapl, 0, sizeof memb_fapl);
+    HDmemset(memb_name, 0, sizeof memb_name);
+    HDmemset(memb_addr, 0, sizeof memb_addr);
+    HDmemset(sv, 0, sizeof sv);
+
+    for(mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,mt))
+        memb_map[mt] = H5FD_MEM_SUPER;
+    memb_map[H5FD_MEM_DRAW] = H5FD_MEM_DRAW;
+
+    memb_fapl[H5FD_MEM_SUPER] = H5P_DEFAULT;
+    sprintf(sv[H5FD_MEM_SUPER], "%%s-%c.h5", 's');
+    memb_name[H5FD_MEM_SUPER] = sv[H5FD_MEM_SUPER];
+    memb_addr[H5FD_MEM_SUPER] = 0;
+
+    memb_fapl[H5FD_MEM_DRAW] = H5P_DEFAULT;
+    sprintf(sv[H5FD_MEM_DRAW], "%%s-%c.h5", 'r');
+    memb_name[H5FD_MEM_DRAW] = sv[H5FD_MEM_DRAW];
+    memb_addr[H5FD_MEM_DRAW] = HADDR_MAX/2;
+
+    if(H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name, memb_addr, TRUE)<0)
+        goto error;
+    h5_fixname(FILENAME[3], fapl, filename, sizeof filename);
+
+    if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+        goto error;
+
+    /* Create and write data set */
+    if((space=H5Screate_simple(2, dims, NULL))<0)
+        goto error;
+
+    /* Retrieve the access property list... */
+    if ((access_fapl = H5Fget_access_plist(file)) < 0)
+        goto error;
+
+    /* ...and close the property list */
+    if (H5Pclose(access_fapl) < 0)
+        goto error;
+
+    /* Check file size API */
+    if(H5Fget_filesize(file, &file_size) < 0)
+        goto error;
+
+    /* Before any data is written, the raw data file is empty.  So
+     * the file size is only the size of metadata file.  It's supposed
+     * to be 2KB.
+     */
+    if(file_size<1*KB || file_size>4*KB)
+        goto error;
+
+    if((dset=H5Dcreate(file, dname, H5T_NATIVE_INT, space, H5P_DEFAULT))<0)
+        goto error;
+
+    for(i=0; i<MULTI_SIZE; i++)
+        for(j=0; j<MULTI_SIZE; j++)
+            buf[i][j] = i*10000+j;
+    if(H5Dwrite(dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf)<0)
+        goto error;
+
+    if((fapl2=H5Pcreate(H5P_FILE_ACCESS))<0)
+        goto error;
+    if(H5Pset_multi_type(fapl2, H5FD_MEM_SUPER)<0)
+        goto error;
+    if(H5Fget_vfd_handle(file, fapl2, (void **)&fhandle)<0)
+        goto error;
+    if(*fhandle<0)
+        goto error;
+
+    if(H5Pset_multi_type(fapl2, H5FD_MEM_DRAW)<0)
+        goto error;
+    if(H5Fget_vfd_handle(file, fapl2, (void **)&fhandle2)<0)
+        goto error;
+    if(*fhandle2<0)
+        goto error;
+
+    /* Check file size API */
+    if(H5Fget_filesize(file, &file_size) < 0)
+        goto error;
+
+    /* After the data is written, the file size is huge because the
+     * beginning of raw data file is set at HADDR_MAX/2.  It's supposed
+     * to be (HADDR_MAX/2 + 128*128*4)
+     */
+    if(file_size < HADDR_MAX/2 || file_size > HADDR_MAX)
+        goto error;
+
+    if(H5Sclose(space)<0)
+        goto error;
+    if(H5Dclose(dset)<0)
+        goto error;
+    if(H5Pclose(fapl2)<0)
+        goto error;
+    if(H5Fclose(file)<0)
+        goto error;
+
+    h5_cleanup(FILENAME, fapl);
+    PASSED();
+
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Sclose(space);
+        H5Dclose(dset);
+        H5Pclose(fapl);
+        H5Pclose(fapl2);
+        H5Fclose(file);
+    } H5E_END_TRY;
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    main
+ *
+ * Purpose:     Tests the file handle interface(H5Fget_vfd_handle and
+ *              H5FDget_vfd_handle)
+ *
+ * Return:      Success:        exit(0)
+ *
+ *              Failure:        exit(1)
+ *
+ * Programmer:  Raymond Lu
+ *              Tuesday, Sept 24, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    int                 nerrors=0;
+
+    h5_reset();
+
+    nerrors += test_sec2()<0      ?1:0;
+    nerrors += test_core()<0      ?1:0;
+    nerrors += test_family()<0    ?1:0;
+    nerrors += test_family_compat()<0    ?1:0;
+    nerrors += test_multi()<0     ?1:0;
+
+    if (nerrors) goto error;
+       printf("All file handle tests passed.\n");
+    return 0;
+
+error:
+    nerrors = MAX(1, nerrors);
+    printf("***** %d FILE HANDLE TEST%s FAILED! *****\n",
+            nerrors, 1 == nerrors ? "" : "S");
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/test/fill_old.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/fill_old.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/fillval.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/fillval.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/fillval.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1465 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <robb at arborea.spizella.com>
+ *              Thursday, October  1, 1998
+ *
+ * Purpose:	Tests dataset fill values.
+ */
+#include "h5test.h"
+
+/*
+ * Define NO_FILLING if you want to compare how this test works when there is
+ * no fill value (that is, when the fill value is zero).
+ */
+/* #define NO_FILLING */
+
+const char *FILENAME[] = {
+    "fillval_1",
+    "fillval_2",
+    "fillval_3",
+    "fillval_4",
+    "fillval_5",
+    "fillval_6",
+    "fillval_7",
+    "fillval_8",
+    NULL
+};
+
+typedef struct {
+    float  a;
+    int    x;
+    double y;
+    char   z;
+} comp_datatype;
+
+/* The fill_old.h5 is generated from gen_old_fill.c in HDF5 'test' directory
+ * for version 1.4(after 1.4.3).  To get this data file, simply compile
+ * gen_old_fill.c with HDF5 library (before v1.5) and run it. */
+#define FILE_COMPATIBLE "fill_old.h5"
+#define FILE_NAME_RAW	"fillval.raw"
+
+
+/*-------------------------------------------------------------------------
+ * Function:    create_compound_type
+ *
+ * Purpose:     create a compound datatype
+ *
+ * Return:      Success:        datatype ID
+ *
+ *              Failure:        -1
+ *
+ * Programmer:  Raymond Lu
+ *              Monday, Jan 26, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hid_t create_compound_type(void)
+{
+    hid_t ret_value=-1;
+
+    if((ret_value = H5Tcreate(H5T_COMPOUND, sizeof(comp_datatype)))<0)
+        goto error;
+    if(H5Tinsert(ret_value, "a", HOFFSET(comp_datatype,a), H5T_NATIVE_FLOAT)<0)
+        goto error;
+    if(H5Tinsert(ret_value, "x", HOFFSET(comp_datatype,x), H5T_NATIVE_INT)<0)
+        goto error;
+    if(H5Tinsert(ret_value, "y", HOFFSET(comp_datatype,y),
+        H5T_NATIVE_DOUBLE)<0) goto error;
+    if(H5Tinsert(ret_value, "z", HOFFSET(comp_datatype,z), H5T_NATIVE_CHAR)<0)
+	goto error;
+
+    return ret_value;
+
+ error:
+    H5E_BEGIN_TRY {
+        H5Tclose(ret_value);
+    } H5E_END_TRY;
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_getset
+ *
+ * Purpose:	Tests the H5Pget_fill_value() and H5Pset_fill_value()
+ *		functions.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_getset(void)
+{
+    hid_t	dcpl=-1;
+    int		fill_i;
+    hid_t	type_ss=-1, type_si=-1;
+    struct fill_si {
+	int 	v1, v2;
+    }		fill_si;
+    struct fill_ss {
+	short	v1, v2;
+    }		fill_ss, fill_ss_rd;
+
+    TESTING("property lists");
+
+    /*
+     * Create the dataset creation property list and the data types that will
+     * be used during this test.
+     */
+    if ((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if ((type_ss=H5Tcreate(H5T_COMPOUND, sizeof fill_ss))<0 ||
+	H5Tinsert(type_ss, "v1", HOFFSET(struct fill_ss, v1),
+		  H5T_NATIVE_SHORT)<0 ||
+	H5Tinsert(type_ss, "v2", HOFFSET(struct fill_ss, v2),
+		  H5T_NATIVE_SHORT)<0) {
+	goto error;
+    }
+    if ((type_si=H5Tcreate(H5T_COMPOUND, sizeof fill_si))<0 ||
+	H5Tinsert(type_si, "v1", HOFFSET(struct fill_si, v1),
+		  H5T_NATIVE_INT)<0 ||
+	H5Tinsert(type_si, "v2", HOFFSET(struct fill_si, v2),
+		  H5T_NATIVE_INT)<0) {
+	goto error;
+    }
+
+    /*
+     * Reading the fill value from a dataset creation property list that has
+     * no fill value should result in a failure.
+     */
+    H5E_BEGIN_TRY {
+	H5Pget_fill_value(dcpl, H5T_NATIVE_INT, &fill_i);
+    } H5E_END_TRY;
+    if (fill_i != 0) {
+	H5_FAILED();
+	puts("    H5Pget_fill_value() should return default 0");
+	goto error;
+    }
+
+    /*
+     * Set the fill value using a struct as the data type.
+     */
+    fill_ss.v1 = 1111;
+    fill_ss.v2 = 2222;
+    if (H5Pset_fill_value(dcpl, type_ss, &fill_ss)<0) goto error;
+
+    /*
+     * Get the fill value using the same data type that was used to set it.
+     */
+    if (H5Pget_fill_value(dcpl, type_ss, &fill_ss_rd)<0) goto error;
+    if (fill_ss.v1!=fill_ss_rd.v1 || fill_ss.v2!=fill_ss_rd.v2) {
+	H5_FAILED();
+	puts("    Failed to get fill value using same data type that was ");
+	puts("    used to set the fill value.");
+	goto error;
+    }
+
+    /*
+     * Get the fill value using some other data type.
+     */
+    if (H5Pget_fill_value(dcpl, type_si, &fill_si)<0) goto error;
+    if (fill_ss.v1!=fill_si.v1 || fill_ss.v2!=fill_si.v2) {
+	H5_FAILED();
+	puts("    Failed to get fill value using a data type other than what");
+	puts("    was used to set the fill value.");
+	goto error;
+    }
+
+    /*
+     * Reset the fill value
+     */
+    if (H5Pset_fill_value(dcpl, type_si, &fill_si)<0) goto error;
+    if (H5Pget_fill_value(dcpl, type_ss, &fill_ss)<0) goto error;
+    if (fill_si.v1!=fill_ss.v1 || fill_si.v2!=fill_ss.v2) {
+	H5_FAILED();
+	puts("    Resetting the fill value was unsuccessful.");
+	goto error;
+    }
+
+    /* Success */
+    if (H5Pclose(dcpl)<0) goto error;
+    if (H5Tclose(type_si)<0) goto error;
+    if (H5Tclose(type_ss)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Pclose(dcpl);
+	H5Tclose(type_si);
+	H5Tclose(type_ss);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_create
+ *
+ * Purpose:	Tests creating datasets that have fill values.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *		Many new cases have been added to this test since
+ *		the fill value design has been modified.
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_create(hid_t fapl, const char *base_name, H5D_layout_t layout)
+{
+    hid_t	file=-1, space=-1, dcpl=-1, comp_type_id=-1;
+    hid_t	dset1=-1, dset2=-1, dset3=-1, dset4=-1, dset5=-1,
+		dset6=-1, /* dset7=-1, */ dset8=-1, dset9=-1;
+    hsize_t     cur_size[5] = {2, 8, 8, 4, 2};
+    hsize_t	ch_size[5] = {1, 1, 1, 4, 1};
+    short	rd_s, fill_s = 0x1234;
+    long	rd_l, fill_l = 0x4321;
+    char	filename[1024];
+    H5D_space_status_t	allocation;
+    H5D_alloc_time_t    alloc_time;
+    H5D_fill_time_t	fill_time;
+    comp_datatype       rd_c, fill_ctype;
+
+    if (H5D_CHUNKED==layout) {
+	TESTING("chunked dataset creation");
+    } else if (H5D_COMPACT==layout) {
+        TESTING("compact dataset creation");
+    } else {
+	TESTING("contiguous dataset creation");
+    }
+
+    /*
+     * Create a file.
+     */
+    h5_fixname(base_name, fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	goto error;
+    if ((space=H5Screate_simple(5, cur_size, cur_size))<0) goto error;
+    if ((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5D_CHUNKED==layout) {
+	if (H5Pset_chunk(dcpl, 5, ch_size)<0) goto error;
+    } else if (H5D_COMPACT==layout) {
+        if (H5Pset_layout(dcpl, H5D_COMPACT)<0) goto error;
+    }
+
+    /* Create a compound datatype */
+    if((comp_type_id = create_compound_type())<0) goto error;
+
+    /* I. Test cases for late space allocation except compact dataset */
+
+    if(H5D_COMPACT!=layout) {
+        if(H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_LATE) < 0) goto error;
+        if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) goto error;
+
+        /* 1. Compound datatype test */
+        if(H5Pget_fill_value(dcpl, comp_type_id, &fill_ctype)<0) goto error;
+        fill_ctype.y = 4444;
+        if(H5Pset_fill_value(dcpl, comp_type_id, &fill_ctype)<0) goto error;
+        if((dset9 = H5Dcreate(file, "dset9", comp_type_id, space, dcpl))<0)
+            goto error;
+
+        /* The three datasets test three fill
+         * conversion paths: small to large, large to small, and no conversion.
+         * They depend on `short' being smaller than `long'.
+         */
+        /* 2. Small to large fill conversion */
+#ifndef NO_FILLING
+        if (H5Pset_fill_value(dcpl, H5T_NATIVE_SHORT, &fill_s)<0) goto error;
+#endif
+        if ((dset1=H5Dcreate(file, "dset1", H5T_NATIVE_LONG, space, dcpl))<0)
+	   goto error;
+
+        /* 3. Large to small fill conversion */
+#ifndef NO_FILLING
+        if (H5Pset_fill_value(dcpl, H5T_NATIVE_LONG, &fill_l)<0) goto error;
+#endif
+        if ((dset2=H5Dcreate(file, "dset2", H5T_NATIVE_SHORT, space, dcpl))<0)
+	   goto error;
+
+        /* 4. No conversion */
+#ifndef NO_FILLING
+        if (H5Pset_fill_value(dcpl, H5T_NATIVE_LONG, &fill_l)<0) goto error;
+#endif
+        if ((dset3=H5Dcreate(file, "dset3", H5T_NATIVE_LONG, space, dcpl))<0)
+	   goto error;
+
+        /* 5. late space allocation and never write fill value */
+        if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) goto error;
+        if ((dset4=H5Dcreate(file, "dset4", H5T_NATIVE_LONG, space, dcpl))<0)
+            goto error;
+
+        /* 6. fill value is undefined while fill write time is H5D_FILL_TIME_ALLOC.
+         * Supposed to fail. */
+        if(H5Pset_fill_value(dcpl, -1, NULL)<0) goto error;
+        if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) goto error;
+        H5E_BEGIN_TRY {
+            if(H5Dcreate(file, "dset7", H5T_NATIVE_LONG, space, dcpl)!=FAIL)
+                goto error;
+        } H5E_END_TRY;
+    }
+
+    /* II. Test early space allocation cases */
+
+    if (H5Pclose(dcpl)<0)  goto error;
+    if ((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5D_CHUNKED==layout) {
+        if (H5Pset_chunk(dcpl, 5, ch_size)<0) goto error;
+    } else if (H5D_COMPACT==layout) {
+        if (H5Pset_layout(dcpl, H5D_COMPACT)<0) goto error;
+    }
+    if(H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_EARLY) < 0) goto error;
+
+    /* 1. Compound datatype test */
+    if(H5Pget_fill_value(dcpl, comp_type_id, &fill_ctype)<0) goto error;
+    fill_ctype.y = 4444;
+    if(H5Pset_fill_value(dcpl, comp_type_id, &fill_ctype)<0) goto error;
+    if((dset8 = H5Dcreate(file, "dset8", comp_type_id, space, dcpl))<0)
+        goto error;
+
+
+    if(H5Pset_fill_value(dcpl, H5T_NATIVE_LONG, &fill_l)<0) goto error;
+
+    /* 2. Never write fill value */
+    if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) goto error;
+    if((dset5 = H5Dcreate(file, "dset5", H5T_NATIVE_INT, space, dcpl))<0)
+        goto error;
+
+    /* 3. Write fill value at space allocation time */
+    if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) goto error;
+    if((dset6 = H5Dcreate(file, "dset6", H5T_NATIVE_LONG, space, dcpl))<0)
+	goto error;
+
+    /* 4. fill value is undefined while fill write time is H5D_FILL_TIME_ALLOC.
+     * Supposed to fail. */
+    if(H5Pset_fill_value(dcpl, -1, NULL)<0) goto error;
+    H5E_BEGIN_TRY {
+        if(H5Dcreate(file, "dset7", H5T_NATIVE_LONG, space, dcpl)!=FAIL)
+            goto error;
+    } H5E_END_TRY;
+
+    /* Close everything */
+    if(H5D_COMPACT != layout) {
+        if (H5Dclose(dset1)<0) goto error;
+        if (H5Dclose(dset2)<0) goto error;
+        if (H5Dclose(dset3)<0) goto error;
+        if (H5Dclose(dset4)<0) goto error;
+        if (H5Dclose(dset9)<0) goto error;
+    }
+    if (H5Dclose(dset5)<0) goto error;
+    if (H5Dclose(dset6)<0) goto error;
+    if (H5Dclose(dset8)<0) goto error;
+    if (H5Sclose(space)<0) goto error;
+    if (H5Pclose(dcpl)<0)  goto error;
+    if (H5Fclose(file)<0)  goto error;
+
+    /* Open the file and get the dataset fill value from each dataset */
+    if ((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0)
+	goto error;
+
+    /* I. Check cases for late space allocation except compact dataset */
+    if(H5D_COMPACT != layout) {
+        /* 1. Large to small conversion */
+        if ((dset1=H5Dopen(file, "dset1"))<0) goto error;
+        if ((dcpl=H5Dget_create_plist(dset1))<0) goto error;
+#ifndef NO_FILLING
+        if (H5Pget_fill_value(dcpl, H5T_NATIVE_SHORT, &rd_s)<0) goto error;
+        if (rd_s!=fill_s) {
+	   H5_FAILED();
+	   printf("    %d: Got a different fill value than what was set.",__LINE__);
+	   printf("    Got %d, set %d\n", rd_s, fill_s);
+	   goto error;
+        }
+#endif
+        if (H5Dclose(dset1)<0) goto error;
+        if (H5Pclose(dcpl)<0) goto error;
+
+        /* 2. Small to large conversion */
+        if ((dset2=H5Dopen(file, "dset2"))<0) goto error;
+        if ((dcpl=H5Dget_create_plist(dset2))<0) goto error;
+#ifndef NO_FILLING
+        if (H5Pget_fill_value(dcpl, H5T_NATIVE_LONG, &rd_l)<0) goto error;
+        if (rd_l!=fill_l) {
+	   H5_FAILED();
+	   printf("    %d: Got a different fill value than what was set.",__LINE__);
+	   printf("    Got %ld, set %ld\n", rd_l, fill_l);
+	   goto error;
+        }
+#endif
+        if (H5Dclose(dset2)<0) goto error;
+        if (H5Pclose(dcpl)<0) goto error;
+
+        /* 3. No conversion */
+        if ((dset3=H5Dopen(file, "dset3"))<0) goto error;
+        if ((dcpl=H5Dget_create_plist(dset3))<0) goto error;
+#ifndef NO_FILLING
+        if (H5Pget_fill_value(dcpl, H5T_NATIVE_LONG, &rd_l)<0) goto error;
+        if (rd_l!=fill_l) {
+	   H5_FAILED();
+	   printf("    %d: Got a different fill value than what was set.",__LINE__);
+	   printf("    Got %ld, set %ld\n", rd_l, fill_l);
+	   goto error;
+        }
+#endif
+        if(H5Pget_alloc_time(dcpl, &alloc_time)<0) goto error;
+        if(H5Pget_fill_time(dcpl, &fill_time)<0) goto error;
+        if(alloc_time != H5D_ALLOC_TIME_LATE) {
+            H5_FAILED();
+            puts("    Got non-H5D_ALLOC_TIME_LATE space allocation time.");
+            printf("    Got %d\n", alloc_time);
+        }
+        if(fill_time != H5D_FILL_TIME_ALLOC) {
+            H5_FAILED();
+            puts("    Got non-H5D_FILL_TIME_ALLOC fill value write time.");
+            printf("    Got %d\n", fill_time);
+        }
+        if (H5Dclose(dset3)<0) goto error;
+        if (H5Pclose(dcpl)<0) goto error;
+
+        /* 4. late space allocation and never write fill value */
+        if ((dset4=H5Dopen(file, "dset4"))<0) goto error;
+        if (H5Dget_space_status(dset4, &allocation)<0) goto error;
+        if (layout == H5D_CONTIGUOUS && allocation != H5D_SPACE_STATUS_NOT_ALLOCATED) {
+            H5_FAILED();
+            puts("    Got allocated space instead of unallocated.");
+            printf("    Got %d\n", allocation);
+            goto error;
+        }
+        if ((dcpl=H5Dget_create_plist(dset4))<0) goto error;
+        if(H5Pget_alloc_time(dcpl, &alloc_time)<0) goto error;
+        if(H5Pget_fill_time(dcpl, &fill_time)<0) goto error;
+        if(alloc_time != H5D_ALLOC_TIME_LATE) {
+	   H5_FAILED();
+	   puts("    Got non-H5D_ALLOC_TIME_LATE space allocation time.");
+	   printf("    Got %d\n", alloc_time);
+        }
+        if(fill_time != H5D_FILL_TIME_NEVER) {
+	   H5_FAILED();
+	   puts("    Got non-H5D_FILL_TIME_NEVER fill value write time.");
+    	   printf("    Got %d\n", fill_time);
+        }
+        if (H5Dclose(dset4)<0) goto error;
+        if (H5Pclose(dcpl)<0) goto error;
+
+        /* 5. Compound datatype test */
+        if ((dset9=H5Dopen(file, "dset9"))<0) goto error;
+        if ((dcpl=H5Dget_create_plist(dset9))<0) goto error;
+        if (H5Pget_fill_value(dcpl, comp_type_id, &rd_c)<0) goto error;
+        if( rd_c.a!=0 || rd_c.y != fill_ctype.y || rd_c.x != 0 || rd_c.z != '\0') {
+           H5_FAILED();
+           puts("    Got wrong fill value");
+           printf("    Got rd_c.a=%f, rd_c.y=%f and rd_c.x=%d, rd_c.z=%c\n",
+                  rd_c.a, rd_c.y, rd_c.x, rd_c.z);
+        }
+        if (H5Dclose(dset9)<0) goto error;
+        if (H5Pclose(dcpl)<0) goto error;
+    }
+
+    /* II. Check early space allocation cases */
+
+    /* 1. Never write fill value */
+    if ((dset5=H5Dopen(file, "dset5"))<0) goto error;
+    if ((dcpl=H5Dget_create_plist(dset5))<0) goto error;
+    if (H5Dget_space_status(dset5, &allocation)<0) goto error;
+    if (layout == H5D_CONTIGUOUS && allocation != H5D_SPACE_STATUS_ALLOCATED) {
+        H5_FAILED();
+        printf("    %d: Got unallocated space instead of allocated.\n",__LINE__);
+        printf("    Got %d\n", allocation);
+        goto error;
+    }
+    if(H5Pget_alloc_time(dcpl, &alloc_time)<0) goto error;
+    if(alloc_time != H5D_ALLOC_TIME_EARLY) {
+        H5_FAILED();
+        puts("    Got non-H5D_ALLOC_TIME_EARLY space allocation time.");
+        printf("    Got %d\n", alloc_time);
+    }
+    if(H5Pget_fill_time(dcpl, &fill_time)<0) goto error;
+    if(fill_time != H5D_FILL_TIME_NEVER) {
+        H5_FAILED();
+        puts("    Got non-H5D_FILL_TIME_NEVER fill value write time.");
+        printf("    Got %d\n", fill_time);
+    }
+    if (H5Dclose(dset5)<0) goto error;
+    if (H5Pclose(dcpl)<0) goto error;
+
+    /* 2. test writing fill value at space allocation time */
+    if ((dset6=H5Dopen(file, "dset6"))<0) goto error;
+    if ((dcpl=H5Dget_create_plist(dset6))<0) goto error;
+    if (H5Dget_space_status(dset6, &allocation)<0) goto error;
+    if (layout == H5D_CONTIGUOUS && allocation != H5D_SPACE_STATUS_ALLOCATED) {
+        H5_FAILED();
+        printf("    %d: Got unallocated space instead of allocated.\n",__LINE__);
+        printf("    Got %d\n", allocation);
+        goto error;
+    }
+    if (H5Pget_fill_value(dcpl, H5T_NATIVE_LONG, &rd_l)<0) goto error;
+    if (rd_l!=fill_l) {
+        H5_FAILED();
+	printf("    %d: Got a different fill value than what was set.",__LINE__);
+        printf("    Got %ld, set %ld\n", rd_l, fill_l);
+        goto error;
+    }
+    if(H5Pget_alloc_time(dcpl, &alloc_time)<0) goto error;
+    if(alloc_time != H5D_ALLOC_TIME_EARLY) {
+        H5_FAILED();
+        puts("    Got non-H5D_ALLOC_TIME_EARLY space allocation time.");
+        printf("    Got %d\n", alloc_time);
+    }
+    if(H5Pget_fill_time(dcpl, &fill_time)<0) goto error;
+    if(fill_time != H5D_FILL_TIME_ALLOC) {
+        H5_FAILED();
+        puts("    Got non-H5D_FILL_TIME_ALLOC fill value write time.");
+        printf("    Got %d\n", fill_time);
+    }
+    if (H5Dclose(dset6)<0) goto error;
+    if (H5Pclose(dcpl)<0) goto error;
+
+    /* 3. Compound datatype test */
+    if ((dset8=H5Dopen(file, "dset8"))<0) goto error;
+    if ((dcpl=H5Dget_create_plist(dset8))<0) goto error;
+    if (H5Pget_fill_value(dcpl, comp_type_id, &rd_c)<0) goto error;
+    if( rd_c.a != 0 || rd_c.y != fill_ctype.y || rd_c.x != 0 || rd_c.z!='\0') {
+        H5_FAILED();
+        puts("    Got wrong fill value");
+        printf("    Got rd_c.a=%f, rd_c.y=%f and rd_c.x=%d, rd_c.z=%c\n",
+		rd_c.a, rd_c.y, rd_c.x, rd_c.z);
+    }
+    if (H5Dclose(dset8)<0) goto error;
+    if (H5Pclose(dcpl)<0) goto error;
+
+    if (H5Fclose(file)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Pclose(dcpl);
+	H5Sclose(space);
+        if(H5D_COMPACT != layout) {
+	   H5Dclose(dset1);
+	   H5Dclose(dset2);
+	   H5Dclose(dset3);
+           H5Dclose(dset4);
+           H5Dclose(dset9);
+        }
+        H5Dclose(dset5);
+        H5Dclose(dset6);
+	H5Dclose(dset8);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	test_rdwr_cases
+ *
+ * Purpose:	Tests fill values read and write for datasets.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	1
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ * 		This function is called by test_rdwr to write and read
+ *		dataset for different cases.
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_rdwr_cases(hid_t file, hid_t dcpl, const char *dname, void *_fillval,
+		H5D_fill_time_t fill_time, H5D_layout_t layout,
+		H5T_class_t datatype, hid_t ctype_id)
+{
+    hid_t	fspace=-1, mspace=-1, dset1=-1, dset2=-1;
+    hsize_t	cur_size[5] = {2, 8, 8, 4, 2};
+    hsize_t	one[5] = {1, 1, 1, 1, 1};
+    hsize_t	hs_size[5], hs_stride[5];
+    hsize_t	hs_offset[5], nelmts;
+    int		fillval=(-1), val_rd, should_be;
+    int		i, j, *buf=NULL, odd;
+    unsigned    u;
+    comp_datatype       rd_c, fill_c, should_be_c;
+    comp_datatype	*buf_c=NULL;
+    H5D_space_status_t  allocation;
+
+    if (datatype==H5T_INTEGER)
+        fillval = *(int*)_fillval;
+    else if(datatype==H5T_COMPOUND) {
+	fill_c.a=((comp_datatype*)_fillval)->a;
+        fill_c.x=((comp_datatype*)_fillval)->x;
+        fill_c.y=((comp_datatype*)_fillval)->y;
+        fill_c.z=((comp_datatype*)_fillval)->z;
+    } else {
+        puts("Invalid type for test");
+        goto error;
+    }
+
+    /* Create dataset */
+    if ((fspace=H5Screate_simple(5, cur_size, cur_size))<0) goto error;
+    if (datatype==H5T_INTEGER && (dset1=H5Dcreate(file, dname, H5T_NATIVE_INT,
+	fspace, dcpl))<0) goto error;
+    if (datatype==H5T_COMPOUND && (dset2=H5Dcreate(file, dname, ctype_id,
+        fspace, dcpl))<0) goto error;
+
+    /* Read some data and make sure it's the fill value */
+    if ((mspace=H5Screate_simple(5, one, NULL))<0) goto error;
+    for (i=0; i<1000; i++) {
+	for (j=0; j<5; j++) {
+	    hs_offset[j] = rand() % cur_size[j];
+	}
+	if (H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, NULL,
+				one, NULL)<0) goto error;
+   	/* case for atomic datatype */
+	if (datatype==H5T_INTEGER) {
+            if(H5Dread(dset1, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT,
+		&val_rd)<0) goto error;
+	    if (fill_time!=H5D_FILL_TIME_NEVER && val_rd!=fillval) {
+	        H5_FAILED();
+	        puts("    Value read was not a fill value.");
+	        HDfprintf(stdout,"    Elmt={%Hu,%Hu,%Hu,%Hu,%Hu}, read: %u, "
+		       "Fill value: %u\n",
+		       hs_offset[0], hs_offset[1],
+		       hs_offset[2], hs_offset[3],
+		       hs_offset[4], val_rd, fillval);
+	        goto error;
+	    }
+	/* case for compound datatype */
+	} else if(datatype==H5T_COMPOUND) {
+            if(H5Dread(dset2, ctype_id, mspace, fspace, H5P_DEFAULT,
+                &rd_c)<0) goto error;
+            if (fill_time!=H5D_FILL_TIME_NEVER && (rd_c.a!=fill_c.a ||
+		rd_c.x!=fill_c.x || rd_c.y!=fill_c.y ||
+		rd_c.z!=fill_c.z)) {
+                H5_FAILED();
+                puts("    Value read was not a fill value.");
+                HDfprintf(stdout,"    Elmt={%Hu,%Hu,%Hu,%Hu,%Hu}, read: %f, %d, %f, %c"
+                       "Fill value: %f, %d, %f, %c\n",
+                       hs_offset[0], hs_offset[1],
+                       hs_offset[2], hs_offset[3],
+                       hs_offset[4], rd_c.a, rd_c.x, rd_c.y, rd_c.z,
+			fill_c.a, fill_c.x, fill_c.y, fill_c.z);
+                goto error;
+            }
+        }
+    }
+    if (H5Sclose(mspace)<0) goto error;
+
+    /* Write to all odd data locations */
+    for (i=0, nelmts=1; i<5; i++) {
+	hs_size[i] = cur_size[i]/2;
+	hs_offset[i] = 0;
+	hs_stride[i] = 2;
+	nelmts *= hs_size[i];
+    }
+    if ((mspace=H5Screate_simple(5, hs_size, hs_size))<0) goto error;
+    if (H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, hs_stride,
+                            hs_size, NULL)<0) goto error;
+
+    /* case for atomic datatype */
+    if(datatype==H5T_INTEGER) {
+        /*check for overflow*/
+        assert((nelmts*sizeof(int))==(hsize_t)((size_t)(nelmts*sizeof(int))));
+        buf = malloc((size_t)(nelmts*sizeof(int)));
+        for (u=0; u<nelmts; u++) buf[u] = 9999;
+        if (H5Dwrite(dset1, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT,
+	    buf)<0) goto error;
+    }
+    /* case for compound datatype */
+    else if(datatype==H5T_COMPOUND) {
+        assert((nelmts*sizeof(comp_datatype))==
+	    (hsize_t)((size_t)(nelmts*sizeof(comp_datatype))));
+	buf_c = (comp_datatype*)calloc((size_t)nelmts,sizeof(comp_datatype));
+        for (u=0; u<nelmts; u++) {
+	    buf_c[u].a = (float)1111.11;
+ 	    buf_c[u].x = 2222;
+	    buf_c[u].y = 3333.3333;
+	    buf_c[u].z = 'd';
+	}
+        if (H5Dwrite(dset2, ctype_id, mspace, fspace, H5P_DEFAULT,
+            buf_c)<0) goto error;
+    }
+
+    /* Check if space is allocated */
+    if (datatype==H5T_INTEGER && H5Dget_space_status(dset1, &allocation)<0)
+	goto error;
+    if (datatype==H5T_COMPOUND && H5Dget_space_status(dset2, &allocation)<0)
+        goto error;
+    if (layout == H5D_CONTIGUOUS && allocation != H5D_SPACE_STATUS_ALLOCATED) {
+        H5_FAILED();
+        printf("    %d: Got unallocated space instead of allocated.\n",__LINE__);
+        printf("    Got %d\n", allocation);
+        goto error;
+    }
+    free(buf);
+    buf = NULL;
+    H5Sclose(mspace);
+
+    /* Read some data and make sure it's the right value */
+    if ((mspace=H5Screate_simple(5, one, NULL))<0) goto error;
+    for (i=0; i<1000; i++) {
+	for (j=0, odd=0; j<5; j++) {
+	    hs_offset[j] = rand() % cur_size[j];
+	    odd += (int)(hs_offset[j]%2);
+	}
+	if (H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, NULL,
+				one, NULL)<0) goto error;
+
+	/* case for atomic datatype */
+        if (datatype==H5T_INTEGER) {
+	    if (H5Dread(dset1, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT,
+		    &val_rd)<0) goto error;
+            if(fill_time == H5D_FILL_TIME_ALLOC) {
+                should_be = odd ? fillval : 9999;
+                if (val_rd!=should_be) {
+                    H5_FAILED();
+                    puts("    Value read was not correct.");
+                    printf("    Elmt={%ld,%ld,%ld,%ld,%ld}, read: %u, "
+                           "should be: %u\n",
+                           (long)hs_offset[0], (long)hs_offset[1],
+                           (long)hs_offset[2], (long)hs_offset[3],
+                           (long)hs_offset[4], val_rd, should_be);
+                    goto error;
+                }
+	    }
+	    else if(fill_time == H5D_FILL_TIME_NEVER && !odd) {
+	        should_be = 9999;
+	        if (val_rd!=should_be) {
+	            H5_FAILED();
+	            puts("    Value read was not correct.");
+	            printf("    Elmt={%ld,%ld,%ld,%ld,%ld}, read: %u, "
+		           "should be: %u\n",
+		           (long)hs_offset[0], (long)hs_offset[1],
+		           (long)hs_offset[2], (long)hs_offset[3],
+		           (long)hs_offset[4], val_rd, should_be);
+	            goto error;
+	        }
+	    } else if(fill_time == H5D_FILL_TIME_NEVER && odd) {
+ 	        /*Trash data. Don't compare*/
+	    }
+	} /* end for datatype==H5T_INTEGER */
+	/* case for compound datatype */
+	else if (datatype==H5T_COMPOUND) {
+            if (H5Dread(dset2, ctype_id, mspace, fspace, H5P_DEFAULT,
+                    &rd_c)<0) goto error;
+            if(fill_time == H5D_FILL_TIME_ALLOC) {
+		if(odd) {
+		    should_be_c.a=fill_c.a;
+		    should_be_c.x=fill_c.x;
+		    should_be_c.y=fill_c.y;
+		    should_be_c.z=fill_c.z;
+		} else {
+		    should_be_c.a=buf_c[0].a;
+		    should_be_c.x=buf_c[0].x;
+		    should_be_c.y=buf_c[0].y;
+		    should_be_c.z=buf_c[0].z;
+		}
+		if( rd_c.a!=should_be_c.a || rd_c.x!=should_be_c.x ||
+		    rd_c.y!=should_be_c.y || rd_c.z!=should_be_c.z)  {
+                    H5_FAILED();
+                    puts("    Value read was not correct.");
+                    printf("    Elmt={%ld,%ld,%ld,%ld,%ld}, read: %f,%d,%f,%c "
+                           "should be: %f,%d,%f,%c\n",
+                           (long)hs_offset[0], (long)hs_offset[1],
+                           (long)hs_offset[2], (long)hs_offset[3],
+                           (long)hs_offset[4],
+			   rd_c.a, rd_c.x, rd_c.y, rd_c.z, should_be_c.a,
+		           should_be_c.x,should_be_c.y,should_be_c.z);
+                    goto error;
+ 		}
+	    } /* end for fill_time == H5D_FILL_TIME_ALLOC */
+	    else if(fill_time == H5D_FILL_TIME_NEVER && !odd) {
+                should_be_c.a=buf_c[0].a;
+                should_be_c.x=buf_c[0].x;
+                should_be_c.y=buf_c[0].y;
+                should_be_c.z=buf_c[0].z;
+                if( rd_c.a!=should_be_c.a || rd_c.x!=should_be_c.x ||
+                    rd_c.y!=should_be_c.y || rd_c.z!=should_be_c.z)  {
+                    H5_FAILED();
+                    puts("    Value read was not correct.");
+                    printf("    Elmt={%ld,%ld,%ld,%ld,%ld}, read: %f,%d,%f,%c "
+                           "should be: %f,%d,%f,%c\n",
+                           (long)hs_offset[0], (long)hs_offset[1],
+                           (long)hs_offset[2], (long)hs_offset[3],
+                           (long)hs_offset[4],
+                           rd_c.a, rd_c.x, rd_c.y, rd_c.z, should_be_c.a,
+                           should_be_c.x,should_be_c.y,should_be_c.z);
+                    goto error;
+                }
+	    } /* end for fill_time == H5D_FILL_TIME_NEVER */
+            else if(fill_time == H5D_FILL_TIME_NEVER && odd) {
+                /*Trash data. Don't compare*/
+            }
+	} /* end for datatype==H5T_COMPOUND */
+    }
+
+    if (H5Sclose(mspace)<0) goto error;
+    if (datatype==H5T_INTEGER && H5Dclose(dset1)<0) goto error;
+    if (datatype==H5T_COMPOUND && H5Dclose(dset2)<0) goto error;
+    if (H5Sclose(fspace)<0) goto error;
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	if(datatype==H5T_INTEGER) H5Dclose(dset1);
+	if(datatype==H5T_COMPOUND) H5Dclose(dset2);
+	H5Sclose(fspace);
+	H5Sclose(mspace);
+    } H5E_END_TRY;
+
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_rdwr
+ *
+ * Purpose:     Tests fill values for datasets.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *		Many new cases have been added to this test since the
+ *		fill value design is modified.
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_rdwr(hid_t fapl, const char *base_name, H5D_layout_t layout)
+{
+    char        filename[1024];
+    hid_t 	file=-1, dcpl=-1, ctype_id=-1;
+    hsize_t     ch_size[5] = {2, 8, 8, 4, 2};
+    int		nerrors=0;
+    int         fillval = 0x4c70f1cd;
+    comp_datatype       fill_ctype={0,0,0,0};
+
+    if (H5D_CHUNKED==layout) {
+        TESTING("chunked dataset I/O");
+    } else if (H5D_COMPACT==layout) {
+        TESTING("compact dataset I/O");
+    } else {
+        TESTING("contiguous dataset I/O");
+    }
+
+    h5_fixname(base_name, fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+        goto error;
+
+    if ((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5D_CHUNKED==layout) {
+        if (H5Pset_chunk(dcpl, 5, ch_size)<0) goto error;
+    } else if (H5D_COMPACT==layout) {
+        if (H5Pset_layout(dcpl, H5D_COMPACT)<0) goto error;
+    }
+    if ((ctype_id=create_compound_type())<0) goto error;
+
+
+    /* I. Test H5D_ALLOC_TIME_LATE space allocation cases */
+    if(H5D_COMPACT != layout) {
+        if(H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_LATE) < 0) goto error;
+
+        /* case for H5D_FILL_TIME_ALLOC as fill write time and fill value to be default */
+        if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) goto error;
+        fillval = 0;
+        nerrors += test_rdwr_cases(file, dcpl, "dset1", &fillval, H5D_FILL_TIME_ALLOC,
+	           			layout, H5T_INTEGER, -1);
+
+        /* case for H5D_FILL_TIME_NEVER as fill write time and fill value to be default */
+        if (H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) goto error;
+        nerrors += test_rdwr_cases(file, dcpl, "dset2", &fillval, H5D_FILL_TIME_NEVER,
+				layout, H5T_INTEGER, -1);
+
+        /* case for H5D_FILL_TIME_ALLOC as fill write time and fill value is user-defined */
+        if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) goto error;
+        fillval = 0x4c70f1cd;
+        if (H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval)<0) goto error;
+        nerrors += test_rdwr_cases(file, dcpl, "dset3", &fillval, H5D_FILL_TIME_ALLOC,
+				layout, H5T_INTEGER, -1);
+
+        /* case for H5D_FILL_TIME_NEVER as fill write time and fill value is user-defined */
+        if (H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) goto error;
+        if (H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval)<0) goto error;
+        nerrors += test_rdwr_cases(file, dcpl, "dset4", &fillval, H5D_FILL_TIME_NEVER,
+				layout, H5T_INTEGER, -1);
+
+        /* case for H5D_FILL_TIME_ALLOC as fill write time and fill value is undefined */
+        /* This case has been tested in test_create() function */
+
+        /* case for H5D_FILL_TIME_NEVER as fill write time and fill value is undefined */
+        if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) goto error;
+        if (H5Pset_fill_value(dcpl, -1, NULL)<0) goto error;
+        nerrors += test_rdwr_cases(file, dcpl, "dset5", &fillval, H5D_FILL_TIME_NEVER,
+				layout, H5T_INTEGER, -1);
+
+        /* case for H5D_FILL_TIME_ALLOC as fill write time and fill value is user-defined
+         * as compound type */
+        if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) goto error;
+        fill_ctype.y = 4444.4444;
+        if(H5Pset_fill_value(dcpl, ctype_id, &fill_ctype)<0) goto error;
+        nerrors += test_rdwr_cases(file, dcpl, "dset11", &fill_ctype, H5D_FILL_TIME_ALLOC,
+				layout, H5T_COMPOUND, ctype_id);
+
+        if (H5Pclose(dcpl)<0) goto error;
+        if ((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+        if (H5D_CHUNKED==layout) {
+            if (H5Pset_chunk(dcpl, 5, ch_size)<0) goto error;
+        }
+    }
+
+
+    /* II.  Test H5D_ALLOC_TIME_EARLY space allocation cases */
+    if(H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_EARLY) < 0) goto error;
+
+    /* case for H5D_FILL_TIME_ALLOC as fill write time and fill value to be default */
+    if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) goto error;
+    fillval = 0;
+    nerrors += test_rdwr_cases(file, dcpl, "dset6", &fillval, H5D_FILL_TIME_ALLOC,
+				layout, H5T_INTEGER, -1);
+
+    /* case for H5D_FILL_TIME_NEVER as fill write time and fill value to be default */
+    if (H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) goto error;
+    nerrors += test_rdwr_cases(file, dcpl, "dset7", &fillval, H5D_FILL_TIME_NEVER, layout,
+        			H5T_INTEGER, -1);
+
+    /* case for H5D_FILL_TIME_ALLOC as fill write time and fill value is user-defined */
+    if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) goto error;
+    fillval = 0x4c70f1cd;
+    if (H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval)<0) goto error;
+    nerrors += test_rdwr_cases(file, dcpl, "dset8", &fillval, H5D_FILL_TIME_ALLOC,
+				layout, H5T_INTEGER, -1);
+
+    /* case for H5D_FILL_TIME_NEVER as fill write time and fill value is user-defined */
+    if (H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) goto error;
+    if (H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval)<0) goto error;
+    nerrors += test_rdwr_cases(file, dcpl, "dset9", &fillval, H5D_FILL_TIME_NEVER,
+				layout, H5T_INTEGER, -1);
+
+    /* case for H5D_FILL_TIME_ALLOC as fill write time and fill value is undefined */
+    /* This case has been tested in test_create() function */
+
+    /* case for H5D_FILL_TIME_NEVER as fill write time and fill value is undefined */
+    if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER) < 0) goto error;
+    if (H5Pset_fill_value(dcpl, -1, NULL)<0) goto error;
+    nerrors += test_rdwr_cases(file, dcpl, "dset10", &fillval, H5D_FILL_TIME_NEVER,
+				layout, H5T_INTEGER, -1);
+
+    /* case for H5D_FILL_TIME_ALLOC as fill write time and fill value is user-defined
+     * as compound type */
+    if(H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC) < 0) goto error;
+    fill_ctype.y = 4444.4444;
+    if(H5Pset_fill_value(dcpl, ctype_id, &fill_ctype)<0) goto error;
+    nerrors += test_rdwr_cases(file, dcpl, "dset12", &fill_ctype, H5D_FILL_TIME_ALLOC,
+                                layout, H5T_COMPOUND, ctype_id);
+
+
+    if(nerrors)
+	goto error;
+    if (H5Pclose(dcpl)<0) goto error;
+    if (H5Tclose(ctype_id)<0) goto error;
+    if (H5Fclose(file)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+        H5Pclose(dcpl);
+	H5Tclose(ctype_id);
+        H5Fclose(file);
+    } H5E_END_TRY;
+    return nerrors;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_extend
+ *
+ * Purpose:	Test that filling works okay when a dataset is extended.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, October  5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_extend(hid_t fapl, const char *base_name, H5D_layout_t layout)
+{
+    hid_t	file=-1, fspace=-1, mspace=-1, dcpl=-1, dset=-1;
+    hsize_t	cur_size[5] = {32, 16, 8, 4, 2};
+    hsize_t	max_size[5] = {128, 64, 32, 16, 8};
+    hsize_t	ch_size[5] = {1, 16, 8, 4, 2};
+    hsize_t	one[5] = {1, 1, 1, 1, 1};
+    hsize_t	hs_size[5], hs_stride[5];
+    hsize_t	hs_offset[5], nelmts;
+#ifdef NO_FILLING
+    int		fillval = 0;
+#else
+    int		fillval = 0x4c70f1cd;
+#endif
+    int		val_rd, should_be;
+    int		i, j, *buf=NULL, odd, fd;
+    unsigned    u;
+    char	filename[1024];
+
+    if (H5D_CHUNKED==layout) {
+	TESTING("chunked dataset extend");
+    } else {
+	TESTING("contiguous dataset extend");
+    }
+
+    if ((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5D_CHUNKED==layout) {
+	if (H5Pset_chunk(dcpl, 5, ch_size)<0) goto error;
+    }
+#ifndef NO_FILLING
+    if (H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval)<0) goto error;
+#endif
+
+#if 1
+    /*
+     * Remove this once contiguous datasets can support extensions in other
+     * than the slowest varying dimension.  The purpose of this block is to
+     * make only the slowest varying dimension extendible and yet have the
+     * same total number of elements as originally.
+     *
+     * If this is removed prematurely then you will get an error `only the
+     * first dimension can be extendible' as long as the test isn't skipped
+     * below.
+     */
+    if (H5D_CONTIGUOUS==layout) {
+	max_size[0] = (max_size[0]*max_size[1]*max_size[2]*
+		       max_size[3]*max_size[4]) /
+		      (cur_size[1]*cur_size[2]*cur_size[3]*cur_size[4]);
+	max_size[1] = cur_size[1];
+	max_size[2] = cur_size[2];
+	max_size[3] = cur_size[3];
+	max_size[4] = cur_size[4];
+    }
+#endif
+
+#if 1
+    /*
+     * Remove this once internal contiguous datasets can support
+     * extending. If it's removed prematurely you will get an error
+     * `extendible contiguous non-external dataset' as long as the test isn't
+     * skipped below.
+     */
+    if (H5D_CONTIGUOUS==layout) {
+	nelmts = max_size[0]*max_size[1]*max_size[2]*max_size[3]*max_size[4];
+	if ((fd=open(FILE_NAME_RAW, O_RDWR|O_CREAT|O_TRUNC, 0666))<0 ||
+	    close(fd)<0) goto error;
+	if (H5Pset_external(dcpl, FILE_NAME_RAW, (off_t)0, (hsize_t)nelmts*sizeof(int))<0)
+	    goto error;
+    }
+#endif
+
+#if 1
+    /*
+     * Remove this when contiguous datasets can be exended to some
+     * predetermined fininte size, even if it's just in the slowest varying
+     * dimension.  If it's removed prematurely then you'll get one of the
+     * errors described above or `unable to select fill value region'.
+     */
+    if (H5D_CONTIGUOUS==layout) {
+	SKIPPED();
+	puts("    Not implemented yet -- needs H5S_SELECT_DIFF operator");
+	goto skip;
+    }
+#endif
+
+    /* Create a file and dataset */
+    h5_fixname(base_name, fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	goto error;
+    if ((fspace=H5Screate_simple(5, cur_size, max_size))<0) goto error;
+    if ((dset=H5Dcreate(file, "dset", H5T_NATIVE_INT, fspace, dcpl))<0)
+	goto error;
+
+    /* Read some data and make sure it's the fill value */
+    if ((mspace=H5Screate_simple(5, one, NULL))<0) goto error;
+    for (i=0; i<1000; i++) {
+	for (j=0; j<5; j++) {
+	    hs_offset[j] = rand() % cur_size[j];
+	}
+	if (H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, NULL,
+				one, NULL)<0) goto error;
+	if (H5Dread(dset, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT,
+		    &val_rd)<0) goto error;
+	if (val_rd!=fillval) {
+	    H5_FAILED();
+	    puts("    Value read was not a fill value.");
+	    HDfprintf(stdout,"    Elmt={%Hu,%Hu,%Hu,%Hu,%Hu}, read: %u, "
+		   "Fill value: %u\n",
+		   hs_offset[0], hs_offset[1],
+		   hs_offset[2], hs_offset[3],
+		   hs_offset[4], val_rd, fillval);
+	    goto error;
+	}
+    }
+    if (H5Sclose(mspace)<0) goto error;
+
+    /* Write to all odd data locations */
+    for (i=0, nelmts=1; i<5; i++) {
+	hs_size[i] = cur_size[i]/2;
+	hs_offset[i] = 0;
+	hs_stride[i] = 2;
+	nelmts *= hs_size[i];
+    }
+    if ((mspace=H5Screate_simple(5, hs_size, hs_size))<0) goto error;
+    assert((nelmts*sizeof(int))==(hsize_t)((size_t)(nelmts*sizeof(int)))); /*check for overflow*/
+    buf = malloc((size_t)(nelmts*sizeof(int)));
+    for (u=0; u<nelmts; u++) buf[u] = 9999;
+    if (H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, hs_stride,
+			    hs_size, NULL)<0) goto error;
+    if (H5Dwrite(dset, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT,
+		 buf)<0) goto error;
+    free(buf);
+    buf = NULL;
+    H5Sclose(mspace);
+
+    /* Read some data and make sure it's the right value */
+    if ((mspace=H5Screate_simple(5, one, NULL))<0) goto error;
+    for (i=0; i<1000; i++) {
+	for (j=0, odd=0; j<5; j++) {
+	    hs_offset[j] = rand() % cur_size[j];
+	    odd += (int)(hs_offset[j]%2);
+	}
+	should_be = odd ? fillval : 9999;
+	if (H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, NULL,
+				one, NULL)<0) goto error;
+	if (H5Dread(dset, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT,
+		    &val_rd)<0) goto error;
+
+	if (val_rd!=should_be) {
+	    H5_FAILED();
+	    puts("    Value read was not correct.");
+	    HDfprintf(stdout,"    Elmt={%Hu,%Hu,%Hu,%Hu,%Hu}, read: %u, "
+		   "should be: %u\n",
+		   hs_offset[0], hs_offset[1],
+		   hs_offset[2], hs_offset[3],
+		   hs_offset[4], val_rd, should_be);
+	    goto error;
+	}
+    }
+    if (H5Sclose(mspace)<0) goto error;
+
+    /* Extend the dataset */
+    if (H5Dextend(dset, max_size)<0) goto error;
+    if (H5Sclose(fspace)<0) goto error;
+    if ((fspace=H5Dget_space(dset))<0) goto error;
+
+    /* Read some data and make sure it's the right value */
+    if ((mspace=H5Screate_simple(5, one, NULL))<0) goto error;
+    for (i=0; i<1000; i++) {
+	for (j=0, odd=0; j<5; j++) {
+	    hs_offset[j] = rand() % max_size[j];
+	    if ((hsize_t)hs_offset[j]>=cur_size[j]) {
+		odd = 1;
+	    } else {
+  		odd += (int)(hs_offset[j]%2);
+	    }
+	}
+
+	should_be = odd ? fillval : 9999;
+	if (H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, NULL,
+				one, NULL)<0) goto error;
+	if (H5Dread(dset, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT,
+		    &val_rd)<0) goto error;
+
+	if (val_rd!=should_be) {
+	    H5_FAILED();
+	    puts("    Value read was not correct.");
+	    HDfprintf(stdout,"    Elmt={%Hu,%Hu,%Hu,%Hu,%Hu}, read: %u, "
+		   "should be: %u\n",
+		   hs_offset[0], hs_offset[1],
+		   hs_offset[2], hs_offset[3],
+		   hs_offset[4], val_rd, should_be);
+	    goto error;
+	}
+    }
+    if (H5Sclose(mspace)<0) goto error;
+
+    if (H5Dclose(dset)<0) goto error;
+    if (H5Sclose(fspace)<0) goto error;
+    if (H5Pclose(dcpl)<0) goto error;
+    if (H5Fclose(file)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Dclose(dset);
+	H5Sclose(fspace);
+	H5Sclose(mspace);
+	H5Pclose(dcpl);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+
+ skip:
+    H5E_BEGIN_TRY {
+	H5Dclose(dset);
+	H5Sclose(fspace);
+	H5Sclose(mspace);
+	H5Pclose(dcpl);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 0;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    test_compatible
+ *
+ * Purpose:     Tests fill value and dataspace for datasets created by v1.4
+ *              library.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Raymond Lu
+ *              Feb 27, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_compatible(void)
+{
+  hid_t      file=-1, dset1=-1, dset2=-1;
+  hid_t      dcpl1=-1, dcpl2=-1, fspace=-1, mspace=-1;
+  int        rd_fill=0, fill_val=4444, val_rd=0;
+  hsize_t    dims[2], one[2]={1,1};
+  hsize_t   hs_offset[2]={3,4};
+  H5D_fill_value_t status;
+  char       *srcdir = getenv("srcdir"); /*where the src code is located*/
+  char       testfile[512]="";  /* test file name */
+
+  TESTING("contiguous dataset compatibility with v. 1.4");
+
+  /* Generate correct name for test file by prepending the source path */
+  if(srcdir && ((strlen(srcdir) + strlen(FILE_COMPATIBLE) + 1) <
+     sizeof(testfile))) {
+     strcpy(testfile, srcdir);
+     strcat(testfile, "/");
+  }
+  strcat(testfile, FILE_COMPATIBLE);
+
+  if ((file=H5Fopen(testfile, H5F_ACC_RDONLY, H5P_DEFAULT))<0) {
+      printf("    Could not open file %s. Try set $srcdir to point at the "
+	      "source directory of test\n", testfile);
+      goto error;
+  }
+
+  if((dset1=H5Dopen(file, "dset1"))<0) goto error;
+  if ((dcpl1=H5Dget_create_plist(dset1))<0) goto error;
+  if (H5Pfill_value_defined(dcpl1, &status)<0) goto error;
+  if(status != H5D_FILL_VALUE_UNDEFINED) {
+      H5_FAILED();
+      printf("    %d: Got a different fill value than what was set.",__LINE__);
+      printf("    Got status=%ld, suppose to be H5D_FILL_VALUE_UNDEFINED\n",
+	    (long)status);
+      goto error;
+  }
+  if((fspace = H5Dget_space(dset1))<0) goto error;
+  if(H5Sget_simple_extent_dims(fspace, dims, NULL)<0) goto error;
+  if(dims[0] != 8 || dims[1] != 8) {
+      H5_FAILED();
+      puts("    Got a different dimension size than what was set.");
+      printf("    Got dims[0]=%ld, dims[1]=%ld, set 8x8\n", (long)dims[0], (long)dims[1]);
+      goto error;
+  }
+  if((mspace=H5Screate_simple(2, one, NULL))<0) goto error;
+  if(H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, NULL, one, NULL)<0)
+      goto error;
+  if(H5Dread(dset1, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT, &val_rd)<0)
+      goto error;
+  if (val_rd != 0) {
+      H5_FAILED();
+      puts("    Got a different value than what was set.");
+      printf("    Got %ld, set 0\n", (long)val_rd);
+      goto error;
+  }
+  if(H5Pclose(dcpl1)<0) goto error;
+  if(H5Sclose(fspace)<0) goto error;
+  if(H5Sclose(mspace)<0) goto error;
+  if(H5Dclose(dset1)<0) goto error;
+
+
+  if((dset2=H5Dopen(file, "dset2"))<0) goto error;
+  if ((dcpl2=H5Dget_create_plist(dset2))<0) goto error;
+  if (H5Pfill_value_defined(dcpl2, &status)<0) goto error;
+  if(status != H5D_FILL_VALUE_USER_DEFINED) {
+      H5_FAILED();
+      printf("    %d: Got a different fill value than what was set.",__LINE__);
+      printf("    Got status=%ld, suppose to be H5D_FILL_VALUE_USER_DEFINED\n",
+            (long)status);
+      goto error;
+  }
+  if (H5Pget_fill_value(dcpl2, H5T_NATIVE_INT, &rd_fill)<0) goto error;
+  if (rd_fill != fill_val) {
+      H5_FAILED();
+      printf("    %d: Got a different fill value than what was set.",__LINE__);
+      printf("    Got %ld, set %ld\n", (long)rd_fill, (long)fill_val);
+      goto error;
+  }
+  fspace = -1;
+  if((fspace = H5Dget_space(dset2))<0) goto error;
+  dims[0] = dims[1] = (hsize_t)-1;
+  if(H5Sget_simple_extent_dims(fspace, dims, NULL)<0) goto error;
+  if(dims[0] != 8 || dims[1] != 8) {
+      H5_FAILED();
+      puts("    Got a different dimension size than what was set.");
+      printf("    Got dims[0]=%ld, dims[1]=%ld, set 8x8\n", (long)dims[0], (long)dims[1]);
+      goto error;
+  }
+  if((mspace=H5Screate_simple(2, one, NULL))<0) goto error;
+  if(H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_offset, NULL, one, NULL)<0)
+      goto error;
+  if(H5Dread(dset2, H5T_NATIVE_INT, mspace, fspace, H5P_DEFAULT, &val_rd)<0)
+      goto error;
+  if (val_rd != fill_val) {
+      H5_FAILED();
+      puts("    Got a different value than what was set.");
+      printf("    Got %ld, set %ld\n", (long)val_rd, (long)fill_val);
+      goto error;
+  }
+  if(H5Pclose(dcpl2)<0) goto error;
+  if(H5Sclose(fspace)<0) goto error;
+  if(H5Sclose(mspace)<0) goto error;
+  if(H5Dclose(dset2)<0) goto error;
+
+  if(H5Fclose(file)<0) goto error;
+  PASSED();
+  return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Pclose(dcpl1);
+        H5Sclose(fspace);
+        H5Sclose(mspace);
+        H5Dclose(dset1);
+        H5Pclose(dcpl2);
+        H5Sclose(fspace);
+        H5Dclose(dset2);
+        H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Tests fill values
+ *
+ * Return:	Success:
+ *
+ *		Failure:
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, October  1, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(int argc, char *argv[])
+{
+    int		nerrors=0, argno, test_contig=1, test_chunk=1, test_compact=1;
+    hid_t	fapl=-1;
+
+    if (argc>=2) {
+	test_contig = test_chunk = test_compact = 0;
+	for (argno=1; argno<argc; argno++) {
+	    if (!strcmp(argv[argno], "contiguous")) {
+		test_contig = 1;
+	    } else if (!strcmp(argv[argno], "chunked")) {
+		test_chunk = 1;
+	    } else if (!strcmp(argv[argno], "compact")) {
+                test_compact =1;
+            } else {
+		fprintf(stderr, "usage: %s [contiguous] [chunked] [compact]\n", argv[0]);
+		exit(1);
+	    }
+	}
+    }
+
+    h5_reset();
+    fapl = h5_fileaccess();
+
+    nerrors += test_getset();
+
+    /* Chunked storage layout tests */
+    if (test_chunk) {
+	nerrors += test_create(fapl, FILENAME[0], H5D_CHUNKED);
+	nerrors += test_rdwr  (fapl, FILENAME[2], H5D_CHUNKED);
+	nerrors += test_extend(fapl, FILENAME[4], H5D_CHUNKED);
+    }
+
+    /* Contiguous storage layout tests */
+    if (test_contig) {
+	nerrors += test_create(fapl, FILENAME[1], H5D_CONTIGUOUS);
+	nerrors += test_rdwr  (fapl, FILENAME[3], H5D_CONTIGUOUS);
+	nerrors += test_extend(fapl, FILENAME[5], H5D_CONTIGUOUS);
+	nerrors += test_compatible();
+    }
+
+    /* Compact dataset storage tests */
+    if (test_compact) {
+        nerrors += test_create(fapl, FILENAME[6], H5D_COMPACT);
+        nerrors += test_rdwr  (fapl, FILENAME[7], H5D_COMPACT);
+    }
+
+    if (nerrors) goto error;
+    puts("All fill value tests passed.");
+    if (h5_cleanup(FILENAME, fapl)) remove(FILE_NAME_RAW);
+    return 0;
+
+ error:
+    puts("***** FILL VALUE TESTS FAILED *****");
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/test/flush1.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/flush1.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/flush1.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,109 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Friday, October 23, 1998
+ *
+ * Purpose:	This is the first half of a two-part test that makes sure
+ *		that a file can be read after an application crashes as long
+ *		as the file was flushed first.  We simulate a crash by
+ *		calling _exit(0) since this doesn't flush HDF5 caches but
+ *		still exits with success.
+ */
+#include "h5test.h"
+
+const char *FILENAME[] = {
+    "flush",
+    NULL
+};
+
+static double	the_data[100][100];
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Part 1 of a two-part H5Fflush() test.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	1
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, October 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    hid_t	fapl, file, dcpl, space, dset, groups, grp;
+    hsize_t	ds_size[2] = {100, 100};
+    hsize_t	ch_size[2] = {5, 5};
+    hsize_t	i, j;
+    char	name[1024];
+
+    h5_reset();
+    fapl = h5_fileaccess();
+
+    TESTING("H5Fflush (part1)");
+
+    /* Create the file */
+    h5_fixname(FILENAME[0], fapl, name, sizeof name);
+    if ((file=H5Fcreate(name, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) goto error;
+
+    /* Create a chunked dataset */
+    if ((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+    if (H5Pset_chunk(dcpl, 2, ch_size)<0) goto error;
+    if ((space=H5Screate_simple(2, ds_size, NULL))<0) goto error;
+    if ((dset=H5Dcreate(file, "dset", H5T_NATIVE_FLOAT, space, H5P_DEFAULT))<0)
+	goto error;
+
+    /* Write some data */
+    for (i=0; i<ds_size[0]; i++) {
+	/*
+	 * The extra cast in the following statement is a bug workaround
+	 * for the Win32 version 5.0 compiler.
+	 * 1998-11-06 ptl
+	 */
+	for (j=0; j<ds_size[1]; j++) {
+	    the_data[i][j] = (double)(hssize_t)i/(hssize_t)(j+1);
+	}
+    }
+    if (H5Dwrite(dset, H5T_NATIVE_DOUBLE, space, space, H5P_DEFAULT,
+		 the_data)<0) goto error;
+
+    /* Create some groups */
+    if ((groups=H5Gcreate(file, "some_groups", 0))<0) goto error;
+    for (i=0; i<100; i++) {
+	sprintf(name, "grp%02u", (unsigned)i);
+	if ((grp=H5Gcreate(groups, name, 0))<0) goto error;
+	if (H5Gclose(grp)<0) goto error;
+    }
+
+    /* Flush and exit without closing the library */
+    if (H5Fflush(file, H5F_SCOPE_GLOBAL)<0) goto error;
+    PASSED();
+    fflush(stdout);
+    fflush(stderr);
+    HD_exit(0);
+    return 0;
+
+ error:
+    HD_exit(1);
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/test/flush2.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/flush2.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/flush2.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,116 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Friday, October 23, 1998
+ *
+ * Purpose:	This is the second half of a two-part test that makes sure
+ *		that a file can be read after an application crashes as long
+ *		as the file was flushed first.  This half tries to read the
+ *		file created by the first half.
+ */
+#include "h5test.h"
+
+const char *FILENAME[] = {
+    "flush",
+    NULL
+};
+
+static double	the_data[100][100];
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Part 1 of a two-part H5Fflush() test.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	1
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, October 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    hid_t	fapl, file, space, dset, groups, grp;
+    hsize_t	ds_size[2];
+    double	error;
+    hsize_t	i, j;
+    char	name[1024];
+
+    h5_reset();
+    fapl = h5_fileaccess();
+    TESTING("H5Fflush (part2)");
+
+    /* Open the file */
+    h5_fixname(FILENAME[0], fapl, name, sizeof name);
+    if ((file=H5Fopen(name, H5F_ACC_RDONLY, fapl))<0) goto error;
+
+    /* Open the dataset */
+    if ((dset=H5Dopen(file, "dset"))<0) goto error;
+    if ((space=H5Dget_space(dset))<0) goto error;
+    if (H5Sget_simple_extent_dims(space, ds_size, NULL)<0) goto error;
+    assert(100==ds_size[0] && 100==ds_size[1]);
+
+    /* Read some data */
+    if (H5Dread(dset, H5T_NATIVE_DOUBLE, space, space, H5P_DEFAULT,
+		the_data)<0) goto error;
+    for (i=0; i<ds_size[0]; i++) {
+	for (j=0; j<ds_size[1]; j++) {
+	    /*
+	     * The extra cast in the following statement is a bug workaround
+	     * for the Win32 version 5.0 compiler.
+	     * 1998-11-06 ptl
+	     */
+	    error = fabs(the_data[i][j]-(double)(hssize_t)i/((hssize_t)j+1));
+	    if (error>0.0001) {
+		H5_FAILED();
+		printf("    dset[%lu][%lu] = %g\n",
+		       (unsigned long)i, (unsigned long)j, the_data[i][j]);
+		printf("    should be %g\n",
+		       (double)(hssize_t)i/(hssize_t)(j+1));
+		goto error;
+	    }
+	}
+    }
+
+    /* Open some groups */
+    if ((groups=H5Gopen(file, "some_groups"))<0) goto error;
+    for (i=0; i<100; i++) {
+	sprintf(name, "grp%02u", (unsigned)i);
+	if ((grp=H5Gopen(groups, name))<0) goto error;
+	if (H5Gclose(grp)<0) goto error;
+    }
+
+    if (H5Gclose(groups)<0) goto error;
+    if (H5Dclose(dset)<0) goto error;
+    if (H5Fclose(file)<0) goto error;
+    PASSED();
+    h5_cleanup(FILENAME, fapl);
+    return 0;
+
+ error:
+    return 1;
+}
+
+
+
+

Added: packages/hdf5/branches/upstream/current/test/gass_append.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/gass_append.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/gass_append.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,169 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Saurabh Bagchi (bagchi at uiuc.edu)
+ *              Wednesday, August 11, 1999.
+ *
+ * Modifications: Saurabh Bagchi (Aug 17, 1999)
+ *                Modified to work with VFL (HDF51.3).
+ */
+
+/* Test the following functionality of the GASS driver.
+   1. Open a remote file for append.
+   2. Create a new dataset within the file.
+   3. Create a local memory buffer to hold the data.
+   4. Write the local data to the remote dataset.
+*/
+#include "h5test.h"
+
+#ifndef H5_HAVE_GASS
+int main(void)
+{
+    printf("Test skipped because GASS driver not available\n");
+    return 0;
+}
+#else
+
+#ifdef hide
+
+#define URL    "ftp://gass:gass12@which/tmp/gass/junk.w"
+#define DATASETNAME "Int1Array"
+#define NX     5                      /* dataset dimensions */
+#define NY     6
+#define RANK   2
+
+int main (void)
+{
+
+  hid_t         fapl =-1, file;
+  hid_t         dataspace, datatype, dataset;
+  hsize_t       dimsf[2];
+
+  herr_t        status = 0;
+  int           data[NX][NY];          /* data to write */
+  int           i, j;
+  GASS_Info     ginf;
+
+  /*
+   * Data  and output buffer initialization.
+   */
+  for (j = 0; j < NX; j++) {
+    for (i = 0; i < NY; i++)
+      data[j][i] = i*i + j*j;
+  }
+  /*
+   *  0   1  4  9 16 25
+   *  1   2  5 10 17 26
+   *  4   5  8 13 20 29
+   *  9  10 13 18 25 34
+   * 16  17 20 25 32 41
+   */
+
+  /* Create access property list and set the driver to GASS */
+  fapl = H5Pcreate (H5P_FILE_ACCESS);
+  if (fapl < 0) {
+    printf (" H5Pcreate failed. \n");
+    return -1;
+  }
+
+  ginf.block_size = 0;
+  ginf.max_length =0;
+  /* ginf = GASS_INFO_NULL; */
+
+  status = H5Pset_fapl_gass (fapl, ginf);
+  if (status < 0) {
+    printf ("H5Pset_fapl_gass failed. \n");
+    return -1;
+  }
+
+  /*
+   * Open an existing file using H5F_ACC_RDWR access,
+   * and gass file access properties.
+   */
+  file = H5Fopen(URL, H5F_ACC_RDWR, fapl);
+  if (file < 0) {
+    printf ("H5Fopen failed. \n");
+    return -1;
+  }
+
+  /*
+   * Describe the size of the array and create the data space for fixed
+   * size dataset.
+   */
+  dimsf[0] = NX;
+  dimsf[1] = NY;
+    dataspace = H5Screate_simple(RANK, dimsf, NULL);
+    if (dataspace < 0) {
+      printf ("H5Screate failed. \n");
+      return -1;
+    }
+
+    /*
+     * Define datatype for the data in the file.
+     * We will store little endian INT numbers.
+     */
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    if (datatype < 0) {
+      printf ("H5Tcopy failed. \n");
+      return -1;
+    }
+
+    status = H5Tset_order(datatype, H5T_ORDER_LE);
+    if (status < 0) {
+      printf ("H5Tset_order failed. \n");
+      return -1;
+    }
+
+    /*
+     * Create a new dataset within the file using defined dataspace and
+     * datatype and default dataset creation properties.
+     */
+    dataset = H5Dcreate(file, DATASETNAME, datatype, dataspace,
+			H5P_DEFAULT);
+    if (dataset < 0) {
+      printf ("H5Dcreate failed. \n");
+      return -1;
+    }
+
+    /*
+     * Write the data to the dataset using default transfer properties.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+		      H5P_DEFAULT, data);
+    if (status < 0) {
+      printf ("H5Dwrite failed. \n");
+      return -1;
+    }
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Fclose(file);
+    H5Pclose(fapl);
+
+    return 0;
+}
+
+#else
+int main(void)
+{
+    printf("Test skipped because append depends on web server!\n");
+    return 0;
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/test/gass_read.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/gass_read.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/gass_read.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Saurabh Bagchi (bagchi at uiuc.edu)
+ *              Wednesday, August 11, 1999.
+ *
+ * Modifications: Saurabh Bagchi (Aug 17, 1999)
+ *                Modified to work with VFL (HDF51.3).
+ */
+
+/* Test the following functionality of the GASS driver.
+   1. Open a remote file for read (the dataset was written using gass_write.c).
+   2. Create a memory buffer to hold the dataset.
+   3. Read the dataset into the memory buffer.
+   4. Get some information about the dataset from the file.
+*/
+#include "h5test.h"
+#include <string.h>
+
+#ifndef H5_HAVE_GASS
+int main(void)
+{
+    printf("Test skipped because GASS driver not available\n");
+    return 0;
+}
+#else
+
+/*#define URL    "ftp://gass:gass12@which/tmp/gass/junk.w"*/
+/*#define URL    "http://paz.ncsa.uiuc.edu:8080/test/a.h5"*/
+#define URL    "http://hdf.ncsa.uiuc.edu/GLOBUS/a.h5"
+/* #define DATASETNAME "Int1Array"  */
+#define NX_SUB  3           /* hyperslab dimensions */
+#define NY_SUB  4
+#define NX 7           /* output buffer dimensions */
+#define NY 7
+#define NZ  3
+#define RANK         2
+#define RANK_OUT     3
+
+int
+main (int argc, char **argv)
+{
+    hid_t       fapl =  -1, file, dataset;         /* handles */
+    char        DATASETNAME[32];
+    hid_t       datatype, dataspace;
+    hid_t       memspace;
+    H5T_class_t class;                 /* data type class */
+    H5T_order_t order;                 /* data order */
+    size_t      size;                  /*
+				        * size of the data element
+				        * stored in file
+				        */
+    hsize_t     dimsm[3];              /* memory space dimensions */
+    hsize_t     dims_out[2];           /* dataset dimensions */
+    herr_t      status;
+
+    int         data_out[NX][NY][NZ ]; /* output buffer */
+
+    hsize_t      count[2];              /* size of the hyperslab in the file */
+    hssize_t     offset[2];             /* hyperslab offset in the file */
+    hsize_t      count_out[3];          /* size of the hyperslab in memory */
+    hssize_t     offset_out[3];         /* hyperslab offset in memory */
+    int          i, j, k, status_n, rank;
+    GASS_Info    ginf;
+
+    if (argc > 2) {
+      printf ("Incorrect command line. \n");
+      printf ("Correct command line: %s [DATASET NAME] \n", argv[0]);
+      printf ("The two datasets present in the file are: \"IntArray\" and "
+	      "\"Int1Array\"\n");
+      exit(1);
+    }
+
+    printf ("Correct command line: %s [DATASET NAME] \n", argv[0]);
+    printf ("The two datasets present in the file are: \"IntArray\" and "
+	    "\"Int1Array\"\n");
+    printf ("Default dataset is IntArray. \n");
+
+    if (argc == 1)
+      strcpy (DATASETNAME, "IntArray");
+    else if (!strcmp(argv[1],"IntArray") || !strcmp(argv[1],"Int1Array"))
+      strcpy (DATASETNAME, argv[1]);
+    else
+      strcpy (DATASETNAME, "IntArray");
+    printf ("\n Reading dataset %s \n\n", DATASETNAME);
+
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++) {
+	    for (k = 0; k < NZ ; k++)
+		data_out[j][i][k] = 0;
+	}
+    }
+
+     /* Create access property list and set the driver to GASS */
+    fapl = H5Pcreate (H5P_FILE_ACCESS);
+    if (fapl < 0) {
+      printf (" H5Pcreate failed. \n");
+      return -1;
+    }
+
+
+    ginf.block_size = 0;
+    ginf.max_length =0;
+
+    /* ginf = GASS_INFO_NULL; */
+
+    status = H5Pset_fapl_gass (fapl, ginf);
+    if (status < 0) {
+      printf ("H5Pset_fapl_gass failed. \n");
+      return -1;
+    }
+
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen(URL, H5F_ACC_RDONLY, fapl);
+    dataset = H5Dopen(file, DATASETNAME);
+
+    /*
+     * Get datatype and dataspace handles and then query
+     * dataset class, order, size, rank and dimensions.
+     */
+    datatype  = H5Dget_type(dataset);     /* datatype handle */
+    class     = H5Tget_class(datatype);
+    if (class == H5T_INTEGER) printf("Data set has INTEGER type \n");
+    order     = H5Tget_order(datatype);
+    if (order == H5T_ORDER_LE) printf("Little endian order \n");
+
+    size  = H5Tget_size(datatype);
+    printf(" Data size is %d \n", size);
+
+    dataspace = H5Dget_space(dataset);    /* dataspace handle */
+    rank      = H5Sget_simple_extent_ndims(dataspace);
+    status_n  = H5Sget_simple_extent_dims(dataspace, dims_out, NULL);
+    printf("rank %d, dimensions %lu x %lu \n", rank,
+	   (unsigned long)(dims_out[0]), (unsigned long)(dims_out[1]));
+
+    /*
+     * Define hyperslab in the dataset.
+     */
+    offset[0] = 1;
+    offset[1] = 2;
+    count[0]  = NX_SUB;
+    count[1]  = NY_SUB;
+    status = H5Sselect_hyperslab(dataspace, H5S_SELECT_SET, offset, NULL,
+				 count, NULL);
+
+    /*
+     * Define the memory dataspace.
+     */
+    dimsm[0] = NX;
+    dimsm[1] = NY;
+    dimsm[2] = NZ ;
+    memspace = H5Screate_simple(RANK_OUT,dimsm,NULL);
+
+    /*
+     * Define memory hyperslab.
+     */
+    offset_out[0] = 3;
+    offset_out[1] = 0;
+    offset_out[2] = 0;
+    count_out[0]  = NX_SUB;
+    count_out[1]  = NY_SUB;
+    count_out[2]  = 1;
+    status = H5Sselect_hyperslab(memspace, H5S_SELECT_SET, offset_out, NULL,
+				 count_out, NULL);
+
+    /*
+     * Read data from hyperslab in the file into the hyperslab in
+     * memory and display.
+     */
+    status = H5Dread(dataset, H5T_NATIVE_INT, memspace, dataspace,
+		     H5P_DEFAULT, data_out);
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++) printf("%d ", data_out[j][i][0]);
+	printf("\n");
+    }
+    /*
+     * 0 0 0 0 0 0 0
+     * 0 0 0 0 0 0 0
+     * 0 0 0 0 0 0 0
+     * 3 4 5 6 0 0 0
+     * 4 5 6 7 0 0 0
+     * 5 6 7 8 0 0 0
+     * 0 0 0 0 0 0 0
+     */
+
+    /*
+     * Close/release resources.
+     */
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Sclose(dataspace);
+    H5Sclose(memspace);
+    H5Fclose(file);
+    H5Pclose(fapl);
+
+    return 0;
+}
+#endif

Added: packages/hdf5/branches/upstream/current/test/gass_write.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/gass_write.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/gass_write.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,179 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Saurabh Bagchi (bagchi at uiuc.edu)
+ *              Friday, August 6, 1999.
+ *
+ * Modifications: Saurabh Bagchi (Aug 17, 1999)
+ *                Modified to work with VFL (HDF51.3).
+ */
+
+/* Test the following functionality of the GASS driver.
+   1. Open a remote file for write.
+   2. Create a new dataset within the file.
+   3. Create a local memory buffer to hold the data.
+   4. Write the local data to the remote dataset.
+*/
+#include "h5test.h"
+
+#ifndef H5_HAVE_GASS
+int main(void)
+{
+    printf("Test skipped because GASS driver not available\n");
+    return 0;
+}
+#else
+
+#ifdef hide
+
+/*#define URL    "ftp://gass:gass12@which/tmp/gass/junk.w"*/
+#define URL    "http://paz.ncsa.uiuc.edu:8080/test/put/test/b.h5"
+
+#define DATASETNAME "IntArray"
+#define NX     5                      /* dataset dimensions */
+#define NY     6
+#define RANK   2
+
+int main (void)
+{
+
+  hid_t         fapl =-1, file;
+  hid_t         dataspace, datatype, dataset;
+  hsize_t       dimsf[2];
+
+  herr_t        status = 0;
+  int           data[NX][NY];          /* data to write */
+  int           i, j;
+  GASS_Info     ginf;
+
+  /*
+   * Data  and output buffer initialization.
+   */
+  for (j = 0; j < NX; j++) {
+    for (i = 0; i < NY; i++)
+      data[j][i] = i + j;
+  }
+  /*
+   * 0 1 2 3 4 5
+   * 1 2 3 4 5 6
+   * 2 3 4 5 6 7
+   * 3 4 5 6 7 8
+   * 4 5 6 7 8 9
+   */
+
+  /* Create access property list and set the driver to GASS */
+  fapl = H5Pcreate (H5P_FILE_ACCESS);
+  if (fapl < 0) {
+    printf (" H5Pcreate failed. \n");
+    return -1;
+  }
+
+  ginf.block_size = 0;
+  ginf.max_length =0;
+  /* ginf = GASS_INFO_NULL;*/
+
+  status = H5Pset_fapl_gass (fapl, ginf);
+  if (status < 0) {
+    printf ("H5Pset_fapl_gass failed. \n");
+    return -1;
+  }
+
+  /*
+   * Create a new file using H5F_ACC_TRUNC access,
+   * default file creation properties, and gass file
+   * access properties.
+   */
+  /*
+  // file = H5Fcreate(URL, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+  // Works. Truncates existing files.
+  // file = H5Fcreate(URL, H5F_ACC_EXCL, H5P_DEFAULT, fapl);
+  // Works. Croaks if existing file, else creates.
+  // Any other flag has no effect as long as one and exactly one of TRUNC/
+  // EXCL is there */
+  /* printf ("I'm here just before H5Fcreate. \n");*/
+  file = H5Fcreate(URL, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+  if (file < 0) {
+    printf ("H5Fcreate failed. \n");
+    return -1;
+  }
+
+  /*
+     * Describe the size of the array and create the data space for fixed
+     * size dataset.
+     */
+    dimsf[0] = NX;
+    dimsf[1] = NY;
+    dataspace = H5Screate_simple(RANK, dimsf, NULL);
+    if (dataspace < 0) {
+      printf ("H5Screate failed. \n");
+      return -1;
+    }
+
+    /*
+     * Define datatype for the data in the file.
+     * We will store little endian INT numbers.
+     */
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    if (datatype < 0) {
+      printf ("H5Tcopy failed. \n");
+      return -1;
+    }
+
+    status = H5Tset_order(datatype, H5T_ORDER_LE);
+    if (status < 0) {
+      printf ("H5Tset_order failed. \n");
+      return -1;
+    }
+
+    /*
+     * Create a new dataset within the file using defined dataspace and
+     * datatype and default dataset creation properties.
+     */
+    dataset = H5Dcreate(file, DATASETNAME, datatype, dataspace,
+			H5P_DEFAULT);
+    if (dataset < 0) {
+      printf ("H5Dcreate failed. \n");
+      return -1;
+    }
+
+    /*
+     * Write the data to the dataset using default transfer properties.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+		      H5P_DEFAULT, data);
+    if (status < 0) {
+      printf ("H5Dwrite failed. \n");
+      return -1;
+    }
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Fclose(file);
+    H5Pclose(fapl);
+
+    return 0;
+}
+#else
+int main(void)
+{
+    printf("Test skipped because writing depends on web server!\n");
+    return 0;
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/test/getname.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/getname.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/getname.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3000 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Pedro Vicente <pvn at ncsa.uiuc.edu>
+ *              April 12, 2002
+ *
+ * Purpose:     Tests the "ID to name" functionality
+ */
+
+#include "hdf5.h"
+#include "h5test.h"
+
+
+/* Compound datatype */
+typedef struct s1_t {
+    unsigned int a;
+    unsigned int b;
+    float c;
+} s1_t;
+
+const char *FILENAME[] = {
+    "getname",
+    "getname1",
+    "getname2",
+    "getname3",
+    NULL
+};
+
+#define RANK 2
+#define NX 4
+#define NY 5
+
+static int check_name( char *name, const char* check )
+{
+
+ int ret = HDstrcmp( name, check );
+ HDstrcpy( name, "" );
+ return ret;
+
+}
+
+#define NAME_BUF_SIZE   40
+#define SMALL_NAME_BUF_SIZE   2
+
+int main( void )
+{
+ char filename0[1024];
+ char filename1[1024];
+ char filename2[1024];
+ char filename3[1024];
+ hid_t   fapl;
+ hid_t   file_id, file1_id, file2_id, file3_id;
+ hid_t   group_id, group2_id, group3_id, group4_id, group5_id, group6_id, group7_id;
+ hid_t   dataset_id, dataset2_id;
+ hid_t   space_id;
+ hid_t   type_id, type2_id;
+ hsize_t dims[1] = { 5 };
+
+ /*buffer to hold name and its size */
+ char    name[NAME_BUF_SIZE];
+ size_t  size=NAME_BUF_SIZE;
+
+ /*small buffer to hold name and its size */
+ char    name2[SMALL_NAME_BUF_SIZE];
+ size_t  size2=SMALL_NAME_BUF_SIZE;
+
+ /*dynamic buffer to hold name and its size */
+ char    *name3 = NULL;
+ size_t  name_len;
+
+ /* Reset the library and get the file access property list */
+ h5_reset();
+ fapl = h5_fileaccess();
+
+ /* Initialize the file names */
+ h5_fixname(FILENAME[0], fapl, filename0, sizeof filename0);
+ h5_fixname(FILENAME[1], fapl, filename1, sizeof filename1);
+ h5_fixname(FILENAME[2], fapl, filename2, sizeof filename2);
+ h5_fixname(FILENAME[3], fapl, filename3, sizeof filename3);
+
+ /* Create a new file_id using default properties. */
+ if ((file_id = H5Fcreate( filename0, H5F_ACC_TRUNC, H5P_DEFAULT, fapl ))<0) goto out;
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Gcreate, one group
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Gcreate, one group");
+
+ /* Create group "g0" in the root group using absolute name */
+ if ((group_id = H5Gcreate( file_id, "/g0", 0 ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g0" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+
+ PASSED();
+
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Gcreate, more than one group
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Gcreate, more than one group");
+
+ /* Create group "g1" in the root group using absolute name */
+ if ((group_id = H5Gcreate( file_id, "/g1", 0 ))<0) goto out;
+
+ /* Create group "g2" in group "g1" using absolute name */
+ if ((group2_id = H5Gcreate( file_id, "/g1/g2", 0 ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1" )!=0)
+  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1/g2" )!=0)
+  goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Gopen
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Gopen");
+
+ /* Reopen the group */
+ if ((group_id = H5Gopen( file_id, "/g1" ))<0) goto out;
+
+ /* Reopen the group */
+ if ((group2_id = H5Gopen( file_id, "/g1/g2" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1" )!=0)
+  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1/g2" )!=0)
+  goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+
+ PASSED();
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Dcreate
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Dcreate");
+
+ /* Create the data space  */
+ if ((space_id = H5Screate_simple( 1, dims, NULL ))<0) goto out;
+
+ /* Create a new dataset */
+ if ((dataset_id = H5Dcreate( file_id , "d1", H5T_NATIVE_INT, space_id,
+  H5P_DEFAULT ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( dataset_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/d1" )!=0)
+  goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+
+ /* Reopen the group */
+ if ((group_id = H5Gopen( file_id, "g1" ))<0) goto out;
+
+ /* Create a new dataset inside "g1" */
+ if ((dataset_id = H5Dcreate( group_id , "d1", H5T_NATIVE_INT, space_id,
+  H5P_DEFAULT ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( dataset_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1/d1" )!=0)
+  goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Dclose( dataset_id );
+ H5Sclose( space_id );
+
+ PASSED();
+
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Dopen
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Dopen");
+
+ /* Reopen the dataset */
+ if ((dataset_id = H5Dopen( file_id, "d1"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( dataset_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/d1" )!=0)
+  goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+
+
+ /* Reopen the group */
+ if ((group_id = H5Gopen( file_id, "g1" ))<0) goto out;
+
+ /* Reopen the dataset */
+ if ((dataset_id = H5Dopen( group_id, "d1"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( dataset_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1/d1" )!=0)
+  goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+ H5Gclose( group_id );
+
+ PASSED();
+
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with a long path
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with a long path");
+
+ /* Create group "g2/bar/baz" */
+ if ((group_id = H5Gcreate( file_id, "g2", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "g2/bar", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file_id, "g2/bar/baz", 0 ))<0) goto out;
+
+ /* Create a dataset */
+ if ((space_id = H5Screate_simple( 1, dims, NULL ))<0) goto out;
+ if ((dataset_id = H5Dcreate( group3_id , "d1", H5T_NATIVE_INT, space_id,
+  H5P_DEFAULT ))<0) goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+ H5Sclose( space_id );
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Reopen the dataset */
+ if ((dataset_id = H5Dopen( file_id, "/g2/bar/baz/d1"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( dataset_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g2/bar/baz/d1" )!=0)
+  goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Tcommit
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Tcommit");
+
+ /* Create a datatype */
+ if ((type_id = H5Tcreate (H5T_COMPOUND, sizeof(s1_t)))<0) goto out;
+
+ /* Insert fields */
+ if (H5Tinsert (type_id, "a", HOFFSET(s1_t,a), H5T_NATIVE_INT)<0) goto out;
+ if (H5Tinsert (type_id, "b", HOFFSET(s1_t,b), H5T_NATIVE_INT)<0) goto out;
+ if (H5Tinsert (type_id, "c", HOFFSET(s1_t,c), H5T_NATIVE_FLOAT)<0) goto out;
+
+ /* Save datatype for later */
+ if (H5Tcommit (file_id, "t1", type_id)<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( type_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/t1" )!=0)
+  goto out;
+
+ /* Close datatype */
+ H5Tclose(type_id);
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Topen
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Topen");
+
+ /* Open the named datatype */
+ if((type_id=H5Topen(file_id, "t1"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( type_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/t1" )!=0)
+  goto out;
+
+
+ /* Close datatype */
+ H5Tclose(type_id);
+
+ PASSED();
+
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Gmove and H5Gopen
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Gmove and H5Gopen");
+
+ /* Reopen the group */
+ if ((group_id = H5Gopen( file_id, "/g1" ))<0) goto out;
+
+ /* Rename group */
+ if (H5Gmove( file_id, "/g1", "/g1a" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1a" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+
+ PASSED();
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Gmove and H5Dopen
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Gmove and H5Dopen");
+
+  /* Reopen the dataset */
+ if ((dataset_id = H5Dopen( file_id, "/d1"))<0) goto out;
+
+ /* Rename dataset */
+ if (H5Gmove( file_id, "/d1", "/d1a" )<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( dataset_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/d1a" )!=0)
+  goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+
+ PASSED();
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Gmove and H5Topen
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Gmove and H5Topen");
+
+ /* Open the named datatype */
+ if((type_id=H5Topen(file_id, "/t1"))<0) goto out;
+
+ /* Rename datatype */
+ if (H5Gmove( file_id, "/t1", "/t1a" )<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( type_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/t1a" )!=0)
+  goto out;
+
+
+ /* Close datatype */
+ H5Tclose(type_id);
+
+ PASSED();
+
+ /*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Gmove and relative names
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Gmove and relative names");
+
+ /* Create group "/g3" */
+ if ((group_id = H5Gcreate( file_id, "/g3", 0 ))<0) goto out;
+
+ /* Create group "/g3/foo" using absolute name */
+ if ((group2_id = H5Gcreate( file_id, "/g3/foo1", 0 ))<0) goto out;
+
+ /* Open group "/g3/foo" again */
+ if ((group3_id = H5Gopen( file_id, "/g3/foo1"))<0) goto out;
+
+ /* Rename group */
+ if (H5Gmove( group_id, "foo1", "foo2" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/foo2" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/foo2" )!=0) goto out;
+
+ /* Rename group again */
+ if (H5Gmove( file_id, "g3/foo2", "g3/foo1" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/foo1" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/foo1" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+
+ PASSED();
+
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Gmove and a long path
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Gmove and a long path");
+
+ /* Create group "g4/A/B" */
+ if ((group_id = H5Gcreate( file_id, "g4", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "g4/A", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file_id, "g4/A/B", 0 ))<0) goto out;
+
+ /* Create group "g5/C" */
+ if ((group4_id = H5Gcreate( file_id, "g5", 0 ))<0) goto out;
+ if ((group5_id = H5Gcreate( file_id, "g5/C", 0 ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g4/A/B" )!=0)
+  goto out;
+
+ /* Move group "B" to "D"*/
+ if (H5Gmove( file_id, "/g4/A/B", "/g5/C/D" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g5/C/D" )!=0) goto out;
+
+ /* Move group "/g5/C/D" back to "/g4/A/B" using relative name */
+ if (H5Gmove2( group5_id, "D", group2_id, "B" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g4/A/B" )!=0) goto out;
+
+ /* Move group "/g4/A/B" to "/g4/F/B" using relative name */
+ if (H5Gmove2( group_id, "A", group_id, "F")<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g4/F/B" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g4/F" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+ H5Gclose( group4_id );
+ H5Gclose( group5_id );
+
+ PASSED();
+
+
+ /*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Gmove and a long path #2
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Gmove and a long path #2");
+
+ /* Create group "g6/A/B" and "g7" */
+ if ((group_id = H5Gcreate( file_id, "g6", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "g6/A", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file_id, "g6/A/B", 0 ))<0) goto out;
+ if ((group4_id = H5Gcreate( file_id, "g7", 0 ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g6/A/B" )!=0)
+  goto out;
+
+ /* Move group "A" to "C"*/
+ if (H5Gmove( file_id, "/g6/A", "/g7/C" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g7/C" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g7/C/B" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+ H5Gclose( group4_id );
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Gunlink
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Gunlink");
+
+  /* Create a new group. */
+ if ((group_id = H5Gcreate( file_id, "/g8", 0 ))<0) goto out;
+
+ /* Delete */
+ if (H5Gunlink( file_id, "/g8")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Gunlink and a long path
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Gunlink and a long path");
+
+ /* Create group "g9/a/b" */
+ if ((group_id = H5Gcreate( file_id, "g9", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "g9/a", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file_id, "g9/a/b", 0 ))<0) goto out;
+
+ /* Delete */
+ if (H5Gunlink( file_id, "/g9/a")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Recreate groups */
+ if ((group2_id = H5Gcreate( group_id, "a", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( group_id, "a/b", 0 ))<0) goto out;
+
+ /* Delete, using relative path */
+ if (H5Gunlink( group_id, "a")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Close */
+ H5Gclose( group_id );
+
+ /* Create group "g10/a/b" */
+ if ((group_id = H5Gcreate( file_id, "g10", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "g10/a", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file_id, "g10/a/b", 0 ))<0) goto out;
+
+ /* Delete */
+ if (H5Gunlink( file_id, "/g10/a/b")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group3_id );
+
+ /* Recreate group */
+ if ((group3_id = H5Gcreate( group_id, "a/b", 0 ))<0) goto out;
+
+ /* Delete, using relative path */
+ if (H5Gunlink( group_id, "a/b")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group3_id );
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Gunlink, same names
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Gunlink, same names");
+
+
+  /* Create group "g11/g" */
+ if ((group_id = H5Gcreate( file_id, "g11", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "g11/g", 0 ))<0) goto out;
+
+ /* Create two datasets "g11/d" and "g11/g/d"*/
+ if ((space_id = H5Screate_simple( 1, dims, NULL ))<0) goto out;
+ if ((dataset_id = H5Dcreate( group_id , "d", H5T_NATIVE_INT, space_id, H5P_DEFAULT ))<0) goto out;
+ if ((dataset2_id = H5Dcreate( group2_id , "d", H5T_NATIVE_INT, space_id, H5P_DEFAULT ))<0) goto out;
+
+ /* Delete */
+ if (H5Gunlink( file_id, "/g11/d")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( dataset_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( dataset2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g11/g/d" )!=0) goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+ H5Dclose( dataset2_id );
+ H5Sclose( space_id );
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Fmount; with IDs on the list
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Fmount; with IDs on the list");
+
+ /* Create a group "g12" in the first file */
+ if ((group_id = H5Gcreate( file_id, "/g12", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+
+ /* Create second file and dataset "d" in it */
+ file1_id = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ /* Create a data space  */
+ if ((space_id = H5Screate_simple( 1, dims, NULL ))<0) goto out;
+
+ /* Create the dataset */
+ if ((dataset_id = H5Dcreate( file1_id , "d", H5T_NATIVE_INT, space_id, H5P_DEFAULT ))<0) goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+
+ /* Mount second file under "g12" in the first file */
+ if (H5Fmount(file_id, "/g12", file1_id, H5P_DEFAULT)<0) goto out;
+
+ /* Access dataset D in the first file under "/G/D" name */
+ if ((dataset_id = H5Dopen( file_id, "/g12/d"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( dataset_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g12/d" )!=0) goto out;
+
+ if (H5Funmount(file_id, "/g12")<0) goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+ H5Fclose( file1_id );
+ H5Sclose( space_id );
+
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Fmount; long name
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Fmount; long name");
+
+ /* Create a group "g13/g1/g2" in the first file */
+ if ((group_id = H5Gcreate( file_id, "/g13", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "/g13/g1", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file_id, "/g13/g1/g2", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Create second file and group "g" in it */
+ file1_id = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file1_id, "/g14", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file1_id, "/g14/g3", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file1_id, "/g14/g3/g4", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Mount second file under "/g13/g1" in the first file */
+ if (H5Fmount(file_id, "/g13/g1", file1_id, H5P_DEFAULT)<0) goto out;
+
+ /* Access group in the first file */
+ if ((group_id = H5Gopen( file_id, "/g13/g1/g14/g3/g4"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g13/g1/g14/g3/g4" )!=0) goto out;
+
+ if (H5Funmount(file_id, "/g13/g1")<0) goto out;
+
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+
+ /* Mount second file under "/g13/g1" in the first file (again) */
+ if (H5Fmount(file_id, "/g13/g1", file1_id, H5P_DEFAULT)<0) goto out;
+
+ /* Get a group ID for the parent of the newly mounted group */
+ if ((group2_id = H5Gopen( file_id, "/g13"))<0) goto out;
+
+ /* Access group in the first file */
+ if ((group_id = H5Gopen( file_id, "/g13/g1/g14/g3/g4"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g13/g1/g14/g3/g4" )!=0) goto out;
+
+ if (H5Funmount(group2_id, "g1")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+
+ /* Mount second file under "/g13/g1" in the first file (again) */
+ if (H5Fmount(file_id, "/g13/g1", file1_id, H5P_DEFAULT)<0) goto out;
+
+ /* Get a group ID for the newly mounted group */
+ if ((group2_id = H5Gopen( file_id, "/g13/g1"))<0) goto out;
+
+ /* Access group in the first file */
+ if ((group_id = H5Gopen( file_id, "/g13/g1/g14/g3/g4"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g13/g1/g14/g3/g4" )!=0) goto out;
+
+ if (H5Funmount(group2_id, ".")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+
+ /* Mount second file under "/g13/g1" in the first file, using relative path */
+
+ if ((group3_id = H5Gopen( file_id, "/g13"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g13" )!=0) goto out;
+
+ if (H5Fmount(group3_id, "g1", file1_id, H5P_DEFAULT)<0) goto out;
+
+ /* Get a group ID for the newly mounted group */
+ if ((group2_id = H5Gopen( file_id, "/g13/g1"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g13/g1" )!=0) goto out;
+
+ /* Access group in the first file */
+ if ((group_id = H5Gopen( file_id, "/g13/g1/g14/g3/g4"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g13/g1/g14/g3/g4" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+
+ /* Access group in the first file, with relative path */
+ if ((group_id = H5Gopen( group2_id, "g14/g3/g4"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g13/g1/g14/g3/g4" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+
+ if (H5Funmount(group2_id, ".")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Mount second file under "/g13/g1" in the first file, using relative path */
+
+ if ((group3_id = H5Gopen( file_id, "/g13/g1"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g13/g1" )!=0) goto out;
+
+ if (H5Fmount(group3_id, ".", file1_id, H5P_DEFAULT)<0) goto out;
+
+ /* Get a group ID for the newly mounted group */
+ if ((group2_id = H5Gopen( file_id, "/g13/g1"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g13/g1" )!=0) goto out;
+
+ /* Access group in the first file */
+ if ((group_id = H5Gopen( file_id, "/g13/g1/g14/g3/g4"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g13/g1/g14/g3/g4" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+
+ /* Access group in the first file, with relative path */
+ if ((group_id = H5Gopen( group2_id, "g14/g3/g4"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g13/g1/g14/g3/g4" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+
+ if (H5Funmount(group2_id, ".")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ H5Fclose( file1_id );
+
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Funmount
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Funmount");
+
+ /* Create a group "g15/g1/g2" in the first file */
+ if ((group_id = H5Gcreate( file_id, "/g15", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "/g15/g1", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file_id, "/g15/g1/g2", 0 ))<0) goto out;
+ if ((group4_id = H5Gcreate( file_id, "/g15/g1/g2/g3", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+ H5Gclose( group4_id );
+
+ /* Create second file and group "g" in it */
+ file1_id = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file1_id, "/g16", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file1_id, "/g16/g4", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file1_id, "/g16/g4/g5", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Access group in the first file */
+ if ((group_id = H5Gopen( file_id, "/g15/g1/g2/g3"))<0) goto out;
+
+ /* Mount second file under "/g13/g1" in the first file */
+ if (H5Fmount(file_id, "/g15/g1", file1_id, H5P_DEFAULT)<0) goto out;
+
+ /* Access group in the second file */
+ if ((group2_id = H5Gopen( file_id, "/g15/g1/g16/g4/g5"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0)
+  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g15/g1/g16/g4/g5" )!=0)
+  goto out;
+
+ if (H5Funmount(file_id, "/g15/g1")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g15/g1/g2/g3" )!=0)
+  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0)
+  goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Fclose( file1_id );
+
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with a defined type dataset
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with a defined type dataset");
+
+ /* Create a datatype */
+ if ((type_id = H5Tcreate (H5T_COMPOUND, sizeof(s1_t)))<0) goto out;
+
+ /* Insert fields */
+ if (H5Tinsert (type_id, "a", HOFFSET(s1_t,a), H5T_NATIVE_INT)<0) goto out;
+ if (H5Tinsert (type_id, "b", HOFFSET(s1_t,b), H5T_NATIVE_INT)<0) goto out;
+ if (H5Tinsert (type_id, "c", HOFFSET(s1_t,c), H5T_NATIVE_FLOAT)<0) goto out;
+
+  /* Create group "g17" */
+ if ((group_id = H5Gcreate( file_id, "g17", 0 ))<0) goto out;
+
+ /* Save datatype for later */
+ if (H5Tcommit (group_id, "t", type_id)<0) goto out;
+
+ /* Create a data space  */
+ if ((space_id = H5Screate_simple( 1, dims, NULL ))<0) goto out;
+
+ /* Create a new dataset */
+ if ((dataset_id = H5Dcreate( group_id , "d", type_id, space_id,
+  H5P_DEFAULT ))<0) goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+ H5Tclose( type_id );
+ H5Sclose( space_id );
+ H5Gclose( group_id );
+
+ /* Open the named datatype */
+ if((type_id=H5Topen(file_id, "/g17/t"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( type_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g17/t" )!=0)
+  goto out;
+
+ /* Close datatype */
+ H5Tclose(type_id);
+
+ /* Reopen the dataset */
+ if ((dataset_id = H5Dopen( file_id, "/g17/d"))<0) goto out;
+
+ /* Get datatype*/
+ if((type_id=H5Dget_type(dataset_id))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( type_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0)
+  goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+ H5Tclose( type_id );
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with objects that have two names
+ *-------------------------------------------------------------------------
+ */
+
+TESTING("H5Iget_name with datasets that have two names");
+
+/* Open dataset named "d"*/
+if ((dataset_id = H5Dopen( file_id, "/g17/d"))<0) goto out;
+
+/* Create link to dataset named "link" */
+if (H5Glink2(dataset_id,".",H5G_LINK_HARD,file_id,"/g17/link")<0) goto out;
+if ((dataset2_id = H5Dopen( file_id, "/g17/link"))<0) goto out;
+
+/* Make sure that the two IDs use two different names */
+if(H5Iget_name(dataset_id, name, size)<0) goto out;
+if(check_name(name, "/g17/d")!=0) goto out;
+
+if(H5Iget_name(dataset2_id, name, size)<0) goto out;
+if(check_name(name, "/g17/link")!=0) goto out;
+
+if(H5Dclose(dataset_id)<0) goto out;
+if(H5Dclose(dataset2_id)<0) goto out;
+
+PASSED();
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with different files, test1
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with different files");
+
+ /* Create a new file using default properties. */
+ if ((file2_id = H5Fcreate( filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl ))<0) goto out;
+
+/* Create a new file using default properties. */
+ if ((file3_id = H5Fcreate( filename3, H5F_ACC_TRUNC, H5P_DEFAULT, fapl ))<0) goto out;
+
+  /* Create the data space  */
+ if ((space_id = H5Screate_simple( 1, dims, NULL ))<0) goto out;
+
+ /* Create a new dataset */
+ if ((dataset_id = H5Dcreate( file2_id , "d", H5T_NATIVE_INT, space_id, H5P_DEFAULT ))<0) goto out;
+
+ /* Create a new dataset */
+ if ((dataset2_id = H5Dcreate( file3_id , "d", H5T_NATIVE_INT, space_id, H5P_DEFAULT ))<0) goto out;
+
+ /* Delete */
+ if (H5Gunlink( file2_id, "/d")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( dataset_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( dataset2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/d" )!=0) goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+ H5Dclose( dataset2_id );
+ H5Sclose( space_id );
+ H5Fclose( file2_id );
+ H5Fclose( file3_id );
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with different files, test2
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with different files #2");
+
+ /* Create a new file using default properties. */
+ if ((file2_id = H5Fcreate( filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl ))<0) goto out;
+
+/* Create a new file using default properties. */
+ if ((file3_id = H5Fcreate( filename3, H5F_ACC_TRUNC, H5P_DEFAULT, fapl ))<0) goto out;
+
+  /* Create the data space  */
+ if ((space_id = H5Screate_simple( 1, dims, NULL ))<0) goto out;
+
+ /* Create a new dataset */
+ if ((dataset_id = H5Dcreate( file2_id , "d", H5T_NATIVE_INT, space_id, H5P_DEFAULT ))<0) goto out;
+
+ /* Create a new dataset */
+ if ((dataset2_id = H5Dcreate( file3_id , "d", H5T_NATIVE_INT, space_id, H5P_DEFAULT ))<0) goto out;
+
+ /* Delete */
+ if (H5Gunlink( file3_id, "/d")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( dataset_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/d"  )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( dataset2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+ H5Dclose( dataset2_id );
+ H5Sclose( space_id );
+ H5Fclose( file2_id );
+ H5Fclose( file3_id );
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with a small buffer for name
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with a small buffer for name");
+
+ /* Reopen the group */
+ if ((group_id = H5Gopen( file_id, "/g17" ))<0) goto out;
+
+ /* Get name */
+ name_len=H5Iget_name( group_id, name2, size2 );
+
+ if ( name_len > size2 )
+  /* Get name with a larger buffer */
+  name_len=H5Iget_name( group_id, name, size );
+
+ /* Verify */
+ if (check_name( name, "/g17" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+
+ PASSED();
+
+
+ /*-------------------------------------------------------------------------
+ * Test H5Iget_name with a dynamic buffer for name
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with a dynamic buffer for name");
+
+ /* Reopen the group */
+ if ((group_id = H5Gopen( file_id, "/g17" ))<0) goto out;
+
+ /* Get name */
+ name_len=H5Iget_name( group_id, NULL, size );
+
+ /* Include the extra null character */
+ name3 = malloc(name_len+1);
+
+ /* Get name */
+ if (H5Iget_name( group_id, name3, name_len+1 )<0) goto out;
+
+ /* Verify */
+ if (check_name( name3, "/g17"  )!=0)
+  goto out;
+
+  /* Get name */
+ if (H5Iget_name( group_id, name3, 3 )<0) goto out;
+
+ /* Verify */
+ if (check_name( name3, "/g"  )!=0)
+  goto out;
+
+ if ( name3 )
+  free(name3);
+
+ /* Close */
+ H5Gclose( group_id );
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with invalid IDs
+ *-------------------------------------------------------------------------
+ */
+
+
+ TESTING("H5Iget_name with invalid IDs");
+
+ /* Create a data space  */
+ if ((space_id = H5Screate_simple( 1, dims, NULL ))<0) goto out;
+
+ /* Define a datatype */
+ if ((type_id = H5Tcopy(H5T_NATIVE_INT))<0) goto out;
+
+ /* Create a new dataset */
+ if ((dataset_id = H5Dcreate( file_id , "d2", type_id, space_id,
+  H5P_DEFAULT ))<0) goto out;
+
+ /* Get name for non commited datatype, it should fail */
+ if (H5Iget_name( type_id, name, size ) >0) goto out;
+
+ /* Get name for data space, it should fail */
+ if (H5Iget_name( space_id, name, size ) >0) goto out;
+
+ /* Close */
+ H5Dclose( dataset_id );
+ H5Sclose( space_id );
+ H5Tclose( type_id );
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with added names with mounting
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with added names with mounting");
+
+ /* Create a group "g18/g2" in the first file */
+ if ((group_id = H5Gcreate( file_id, "/g18", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "/g18/g2", 0 ))<0) goto out;
+
+ /* Also create a dataset and a datatype */
+ if ((space_id = H5Screate_simple( 1, dims, NULL ))<0) goto out;
+ if ((type_id = H5Tcopy(H5T_NATIVE_INT))<0) goto out;
+ if ((dataset_id = H5Dcreate( file_id, "g18/d2", type_id, space_id,
+  H5P_DEFAULT ))<0) goto out;
+
+ if (H5Tcommit(file_id, "g18/t2", type_id) <0) goto out;
+
+ /* Create second file and group "/g3/g4/g5" in it */
+ file1_id = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+ if ((group3_id = H5Gcreate( file1_id, "/g3", 0 ))<0) goto out;
+ if ((group4_id = H5Gcreate( file1_id, "/g3/g4", 0 ))<0) goto out;
+ if ((group5_id = H5Gcreate( file1_id, "/g3/g4/g5", 0 ))<0) goto out;
+
+ /* Mount first file at "g3/g4" in the second file */
+ if (H5Fmount(file1_id, "/g3/g4", file_id, H5P_DEFAULT)<0) goto out;
+
+ /* Get name for the group ID in the first file, should be "/g18/g2" still */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+ if (check_name( name, "/g18/g2" )!=0) goto out;
+
+ /* Get name for the dataset ID in the first file, should be "/g18/g2/d2" still */
+ if (H5Iget_name( dataset_id, name, size )<0) goto out;
+ if (check_name( name, "/g18/d2" )!=0) goto out;
+
+ /* Get name for the datatype ID in the first file, should be "/g18/g2/t2" still */
+ if (H5Iget_name( type_id, name, size )<0) goto out;
+ if (check_name( name, "/g18/t2" )!=0) goto out;
+
+ /* Open the mounted group, dataset, and datatype through their new names */
+ if ((group6_id = H5Gopen( file1_id, "/g3/g4/g18/g2" ))<0) goto out;
+ if ((dataset2_id = H5Dopen( file1_id, "/g3/g4/g18/d2" ))<0) goto out;
+ if ((type2_id = H5Topen( file1_id, "/g3/g4/g18/t2" ))<0) goto out;
+
+ /* Verify names */
+ if (H5Iget_name( group6_id, name, size )<0) goto out;
+ if (check_name( name, "/g3/g4/g18/g2" )!=0) goto out;
+
+ if (H5Iget_name( dataset2_id, name, size )<0) goto out;
+ if (check_name( name, "/g3/g4/g18/d2" )!=0) goto out;
+
+ if (H5Iget_name( type2_id, name, size )<0) goto out;
+ if (check_name( name, "/g3/g4/g18/t2" )!=0) goto out;
+
+ /* Verify that old IDs still refer to objects by their old names */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+ if (check_name( name, "/g18/g2" )!=0) goto out;
+
+ if (H5Iget_name( dataset_id, name, size )<0) goto out;
+ if (check_name( name, "/g18/d2" )!=0) goto out;
+
+ if (H5Iget_name( type_id, name, size )<0) goto out;
+ if (check_name( name, "/g18/t2" )!=0) goto out;
+
+ /* Unmount */
+ if (H5Funmount(file1_id, "/g3/g4")<0) goto out;
+
+ /* Get name for the IDs of the first file, should be unchanged */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+ if (check_name( name, "/g18/g2" )!=0) goto out;
+
+ if (H5Iget_name( dataset_id, name, size )<0) goto out;
+ if (check_name( name, "/g18/d2" )!=0) goto out;
+
+ if (H5Iget_name( type_id, name, size )<0) goto out;
+ if (check_name( name, "/g18/t2" )!=0) goto out;
+
+ /* Get name for the IDs of the second file, should be "" */
+ if (H5Iget_name( group6_id, name, size )<0) goto out;
+ if (check_name( name, "" )!=0) goto out;
+
+ if (H5Iget_name( dataset2_id, name, size )<0) goto out;
+ if (check_name( name, "" )!=0) goto out;
+
+ if (H5Iget_name( type2_id, name, size )<0) goto out;
+ if (check_name( name, "" )!=0) goto out;
+
+ H5Tclose( type_id );
+ H5Tclose( type2_id );
+ H5Dclose( dataset_id );
+ H5Dclose( dataset2_id );
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+ H5Gclose( group4_id );
+ H5Gclose( group5_id );
+ H5Gclose( group6_id );
+ H5Fclose( file1_id );
+
+PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Fclose
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Fclose");
+
+ /* Create a file and group "/g1/g2" in it */
+ file1_id = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+ if ((group_id = H5Gcreate( file1_id, "/g1", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file1_id, "/g1/g2", 0 ))<0) goto out;
+
+ /* Get name for the ID */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1/g2" )!=0)
+  goto out;
+
+ /* Close file */
+ H5Fclose( file1_id );
+
+  /* Get name for the ID */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1/g2" )!=0)
+  goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Fmount and H5Gunlink
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Fmount and H5Gunlink");
+
+ /* Create a file and group "/g1/g2" in it */
+ file1_id = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+ if ((group_id = H5Gcreate( file1_id, "/g1", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file1_id, "/g1/g2", 0 ))<0) goto out;
+
+ /* Create a new file and group "/g3/g4" in it */
+ if ((file2_id = H5Fcreate( filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl ))<0) goto out;
+ if ((group3_id = H5Gcreate( file2_id, "/g3", 0 ))<0) goto out;
+ if ((group4_id = H5Gcreate( file2_id, "/g3/g4", 0 ))<0) goto out;
+
+ /* Mount first file at "/g3/g4" in the second file */
+ if(H5Fmount(file2_id, "/g3/g4", file1_id, H5P_DEFAULT)<0) goto out;
+
+ /* Open the mounted group */
+ if ((group5_id = H5Gopen( file2_id, "/g3/g4/g1/g2" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group5_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/g4/g1/g2" )!=0) goto out;
+
+ /* Delete */
+ if (H5Gunlink( file1_id, "/g3/g4/g1/g2")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group5_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+ H5Gclose( group4_id );
+ H5Gclose( group5_id );
+ H5Fclose( file1_id );
+ H5Fclose( file2_id );
+
+ PASSED();
+
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Fmount and H5Gmove
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Fmount and H5Gmove");
+
+ /* Create a file and group "/g1/g2" in it */
+ file1_id = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+ if ((group_id = H5Gcreate( file1_id, "/g1", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file1_id, "/g1/g2", 0 ))<0) goto out;
+
+ /* Create a new file and group "/g3/g4" in it */
+ if ((file2_id = H5Fcreate( filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl ))<0) goto out;
+ if ((group3_id = H5Gcreate( file2_id, "/g3", 0 ))<0) goto out;
+ if ((group4_id = H5Gcreate( file2_id, "/g3/g4", 0 ))<0) goto out;
+
+ /* Mount first file at "g3/g4" in the second file */
+ if(H5Fmount(file2_id, "/g3/g4", file1_id, H5P_DEFAULT)<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/g4" )!=0) goto out;
+
+ /* Open the mounted group */
+ if ((group5_id = H5Gopen( file2_id, "/g3/g4/g1/g2" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group5_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/g4/g1/g2" )!=0) goto out;
+
+ /* Open another mounted group, in the middle of the path */
+ if ((group6_id = H5Gopen( file2_id, "/g3/g4/g1" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group6_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/g4/g1" )!=0) goto out;
+
+ /* Rename group */
+ if (H5Gmove( file2_id, "/g3/g4/g1/g2", "/g3/g4/g1/g5" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group5_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/g4/g1/g5" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1/g5" )!=0) goto out;
+
+ /* Rename group */
+ if (H5Gmove( file2_id, "/g3/g4/g1", "/g3/g4/g1a" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group5_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/g4/g1a/g5" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1a/g5" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group6_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/g4/g1a" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1a" )!=0) goto out;
+
+ /* Rename middle group back, using relative path */
+ if (H5Gmove( group3_id, "g4/g1a", "g4/g1" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group5_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/g4/g1/g5" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1/g5" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group6_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/g4/g1" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1" )!=0) goto out;
+
+ /* Rename end group back, using relative path */
+ if (H5Gmove( group3_id, "g4/g1/g5", "g4/g1/g2" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group5_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/g4/g1/g2" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1/g2" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group6_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g3/g4/g1" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g1" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+ H5Gclose( group4_id );
+ H5Gclose( group5_id );
+ H5Gclose( group6_id );
+ H5Fclose( file1_id );
+ H5Fclose( file2_id );
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Glink hard
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Glink hard");
+
+ /* Create group "g19/g1" */
+ if ((group_id = H5Gcreate( file_id, "/g19", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "/g19/g1", 0 ))<0) goto out;
+
+  /* Create hard link to "g19/g1/ group */
+ if (H5Glink(file_id, H5G_LINK_HARD, "/g19/g1", "/g19/g2")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g19/g1" )!=0) goto out;
+
+ /* Open the group */
+ if ((group3_id = H5Gopen( file_id, "/g19/g2" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g19/g2" )!=0) goto out;
+
+ /* Rename original group */
+ if (H5Gmove( file_id, "/g19/g1", "/g19/g3" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g19/g3" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g19/g2" )!=0) goto out;
+
+ /* Rename original group back, using relative path */
+ if (H5Gmove( group_id, "g3", "g1" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g19/g1" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g19/g2" )!=0) goto out;
+
+  /* Create another hard link to "/g19/g1" group */
+ if (H5Glink(file_id, H5G_LINK_HARD, "/g19/g1", "/g19/g3")<0) goto out;
+
+ /* Open the group */
+ if ((group4_id = H5Gopen( file_id, "/g19/g3" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g19/g3" )!=0) goto out;
+
+ /* Delete group */
+ if (H5Gunlink( file_id, "/g19/g3")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g19/g1" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g19/g2" )!=0) goto out;
+
+ /* Close the unlinked group */
+ H5Gclose( group4_id );
+
+  /* Create another hard link to "/g19/g1" group */
+ if (H5Glink(file_id, H5G_LINK_HARD, "/g19/g1", "/g19/g3")<0) goto out;
+
+ /* Open the group */
+ if ((group4_id = H5Gopen( file_id, "/g19/g3" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g19/g3" )!=0) goto out;
+
+ /* Delete group, using relative path */
+ if (H5Gunlink( group_id, "g3")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g19/g1" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g19/g2" )!=0) goto out;
+
+ /* Close the unlinked group */
+ H5Gclose( group4_id );
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ PASSED();
+
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Glink symbolic
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Glink symbolic");
+
+ /* Create group "g20/g1" */
+ if ((group_id = H5Gcreate( file_id, "/g20", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "/g20/g1", 0 ))<0) goto out;
+
+  /* Create symbolic link to "g20/g1/ group */
+ if (H5Glink(file_id, H5G_LINK_SOFT, "/g20/g1", "/g20/g2")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g20/g1" )!=0) goto out;
+
+ /* Open the group */
+ if ((group3_id = H5Gopen( file_id, "/g20/g2" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g20/g2" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Glink symbolic and move target
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Glink symbolic and move target");
+
+ /* Create group "g21/g1" */
+ if ((group_id = H5Gcreate( file_id, "/g21", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "/g21/g1", 0 ))<0) goto out;
+
+ /* Create symbolic link to "g21/g1/ group */
+ if (H5Glink(file_id, H5G_LINK_SOFT, "/g21/g1", "/g21/g2")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g21/g1" )!=0) goto out;
+
+ /* Open the group */
+ if ((group3_id = H5Gopen( file_id, "/g21/g2" ))<0) goto out;
+
+ /* Rename group */
+ if (H5Gmove( file_id, "/g21/g1", "/g21/g3" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g21/g3" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g21/g2" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Glink symbolic and move source
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Glink symbolic and move source");
+
+ /* Create group "g22/g1" */
+ if ((group_id = H5Gcreate( file_id, "/g22", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "/g22/g1", 0 ))<0) goto out;
+
+ /* Create symbolic link to "g22/g1/ group */
+ if (H5Glink(file_id, H5G_LINK_SOFT, "/g22/g1", "/g22/g2")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g22/g1" )!=0) goto out;
+
+ /* Open the group */
+ if ((group3_id = H5Gopen( file_id, "/g22/g2" ))<0) goto out;
+
+ /* Rename soft link */
+ if (H5Gmove( file_id, "/g22/g2", "/g22/g3" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g22/g1" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g22/g3" )!=0) goto out;
+
+ /* Rename soft link, using relative paths */
+ if (H5Gmove( group_id, "g3", "g2" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g22/g1" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g22/g2" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ PASSED();
+
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Glink symbolic and unlink target
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Glink symbolic and unlink target");
+
+ /* Create group "g23/g1" */
+ if ((group_id = H5Gcreate( file_id, "/g23", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "/g23/g1", 0 ))<0) goto out;
+
+ /* Create symbolic link to "g23/g1/ group */
+ if (H5Glink(file_id, H5G_LINK_SOFT, "/g23/g1", "/g23/g2")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g23/g1" )!=0) goto out;
+
+ /* Open the group */
+ if ((group3_id = H5Gopen( file_id, "/g23/g2" ))<0) goto out;
+
+ /* Delete group */
+ if (H5Gunlink( file_id, "/g23/g1")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g23/g2" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with H5Glink symbolic and unlink source
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with H5Glink symbolic and unlink source");
+
+ /* Create group "g24/g1" */
+ if ((group_id = H5Gcreate( file_id, "/g24", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "/g24/g1", 0 ))<0) goto out;
+
+ /* Create symbolic link to "g24/g1/ group */
+ if (H5Glink(file_id, H5G_LINK_SOFT, "/g24/g1", "/g24/g2")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g24/g1" )!=0) goto out;
+
+ /* Open the group */
+ if ((group3_id = H5Gopen( file_id, "/g24/g2" ))<0) goto out;
+
+ /* Delete group */
+ if (H5Gunlink( file_id, "/g24/g2")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with several nested mounted files
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with several nested mounted files");
+
+ /* Create a group "g25/g1/g2" in the first file */
+ if ((group_id = H5Gcreate( file_id, "/g25", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "/g25/g1", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file_id, "/g25/g1/g2", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Create second file and group "/g26/g3/g4" in it */
+ file1_id = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file1_id, "/g26", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file1_id, "/g26/g3", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file1_id, "/g26/g3/g4", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Create third file and group "/g27/g5/g6" in it */
+ file2_id = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file2_id, "/g27", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file2_id, "/g27/g5", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file2_id, "/g27/g5/g6", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Create fourth file and group "/g28/g5/g6" in it */
+ file3_id = H5Fcreate(filename3, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file3_id, "/g28", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file3_id, "/g28/g7", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file3_id, "/g28/g7/g8", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Access group which will be hidden in the first file */
+ if ((group_id = H5Gopen( file_id, "/g25/g1/g2"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g25/g1/g2" )!=0) goto out;
+
+ /* Mount second file under "/g25/g1" in the first file */
+ if (H5Fmount(file_id, "/g25/g1", file1_id, H5P_DEFAULT)<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Access group which will be hidden in the second file */
+ if ((group2_id = H5Gopen( file_id, "/g25/g1/g26/g3/g4"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g25/g1/g26/g3/g4" )!=0) goto out;
+
+ /* Mount third file under "/g25/g1/g26/g3" in the first file */
+ if (H5Fmount(file_id, "/g25/g1/g26/g3", file2_id, H5P_DEFAULT)<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Access group in the third file */
+ if ((group3_id = H5Gopen( file_id, "/g25/g1/g26/g3/g27/g5/g6"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g25/g1/g26/g3/g27/g5/g6" )!=0) goto out;
+
+ /* Mount fourth file under "/g25/g1/g26/g3/g27/g5" in the first file */
+ if (H5Fmount(file_id, "/g25/g1/g26/g3/g27/g5", file3_id, H5P_DEFAULT)<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Access group in the fourth file */
+ if ((group4_id = H5Gopen( file_id, "/g25/g1/g26/g3/g27/g5/g28/g7/g8"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g25/g1/g26/g3/g27/g5/g28/g7/g8" )!=0) goto out;
+
+ if (H5Funmount(file_id, "/g25/g1/g26/g3/g27/g5")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g25/g1/g26/g3/g27/g5/g6" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group4_id );
+ H5Fclose( file3_id );
+
+ if (H5Funmount(file_id, "/g25/g1/g26/g3")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g25/g1/g26/g3/g4" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group3_id );
+ H5Fclose( file2_id );
+
+ if (H5Funmount(file_id, "/g25/g1")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g25/g1/g2" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Fclose( file1_id );
+
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name and H5Gmove with repeated path components
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name and H5Gmove with repeated path components");
+
+ /* Create a group "g29/g1/g2/g1/g2" in a file */
+ if ((group_id = H5Gcreate( file_id, "/g29", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "/g29/g1", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file_id, "/g29/g1/g2", 0 ))<0) goto out;
+ if ((group4_id = H5Gcreate( file_id, "/g29/g1/g2/g1", 0 ))<0) goto out;
+ if ((group5_id = H5Gcreate( file_id, "/g29/g1/g2/g1/g2", 0 ))<0) goto out;
+
+ /* Rename group */
+ if (H5Gmove( file_id, "/g29/g1/g2/g1/g2", "/g29/g1/g2/g1/g3" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group5_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g29/g1/g2/g1/g3" )!=0) goto out;
+
+ /* Rename group in middle of path, keeping within the same group */
+ if (H5Gmove( file_id, "/g29/g1/g2/g1", "/g29/g1/g2/g3" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g29/g1/g2/g3" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group5_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g29/g1/g2/g3/g3" )!=0) goto out;
+
+ /* Rename group in middle of path, moving to another group in file */
+ if (H5Gmove( file_id, "/g29/g1/g2/g3", "/g29/g3" )<0)  goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g29/g3" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group5_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g29/g3/g3" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+ H5Gclose( group4_id );
+ H5Gclose( group5_id );
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with higher mounted file
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with higher mounted file");
+
+ /* Create a group "/g30/g1/g2" in the first file */
+ if ((group_id = H5Gcreate( file_id, "/g30", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "/g30/g1", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file_id, "/g30/g1/g2", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Create second file and group "/g31/g3/g4" in it */
+ file1_id = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file1_id, "/g31", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file1_id, "/g31/g3", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file1_id, "/g31/g3/g4", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Create third file and group "/g32/g5/g6" in it */
+ file2_id = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file2_id, "/g32", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file2_id, "/g32/g5", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file2_id, "/g32/g5/g6", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Create fourth file and group "/g33/g5/g6" in it */
+ file3_id = H5Fcreate(filename3, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file3_id, "/g33", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file3_id, "/g33/g7", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file3_id, "/g33/g7/g8", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Access group which will be hidden in the first file */
+ if ((group_id = H5Gopen( file_id, "/g30/g1/g2"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g30/g1/g2" )!=0) goto out;
+
+ /* Mount second file under "/g30/g1" in the first file */
+ if (H5Fmount(file_id, "/g30/g1", file1_id, H5P_DEFAULT)<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Access group which will be hidden in the second file */
+ if ((group2_id = H5Gopen( file_id, "/g30/g1/g31/g3/g4"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g30/g1/g31/g3/g4" )!=0) goto out;
+
+ /* Mount third file under "/g30/g1/g31/g3" in the first file */
+ if (H5Fmount(file_id, "/g30/g1/g31/g3", file2_id, H5P_DEFAULT)<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Access group which will be hidden in the third file */
+ if ((group3_id = H5Gopen( file_id, "/g30/g1/g31/g3/g32/g5/g6"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g30/g1/g31/g3/g32/g5/g6" )!=0) goto out;
+
+ /* Mount fourth file under "/g30" in the first file, hiding the files below it */
+ if (H5Fmount(file_id, "/g30", file3_id, H5P_DEFAULT)<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Access group which will be in the fourth file */
+ if ((group4_id = H5Gopen( file_id, "/g30/g33/g7/g8"))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g30/g33/g7/g8" )!=0) goto out;
+
+ /* Unmount fourth file */
+ if (H5Funmount(file_id, "/g30")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g30/g1/g31/g3/g32/g5/g6" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Unmount third file */
+ if (H5Funmount(file_id, "/g30/g1/g31/g3")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g30/g1/g31/g3/g4" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Unmount second file */
+ if (H5Funmount(file_id, "/g30/g1")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )< 0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g30/g1/g2" )!=0) goto out;
+
+ /* Close groups */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+ H5Gclose( group4_id );
+
+ /* Close files */
+ H5Fclose( file1_id );
+ H5Fclose( file2_id );
+ H5Fclose( file3_id );
+
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with multiple hard links and mounted files
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with multiple hard links and mounted files");
+
+ /* Create second file and group "/g35/g3/g4" in it */
+ file1_id = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file1_id, "/g35", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file1_id, "/g35/g3", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file1_id, "/g35/g3/g4", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Create group "/g34/g1/g2" in first file */
+ if ((group_id = H5Gcreate( file_id, "/g34", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "/g34/g1", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file_id, "/g34/g1/g2", 0 ))<0) goto out;
+
+  /* Create hard link to "/g34/g1/g2 group */
+ if (H5Glink(file_id, H5G_LINK_HARD, "/g34/g1/g2", "/g34/g2a")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g34/g1/g2" )!=0) goto out;
+
+ /* Open the link to the group */
+ if ((group4_id = H5Gopen( file_id, "/g34/g2a" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g34/g2a" )!=0) goto out;
+
+ /* Mount second file under "/g34/g1" in the first file */
+ if (H5Fmount(file_id, "/g34/g1", file1_id, H5P_DEFAULT)<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g34/g2a" )!=0) goto out;
+
+ /* Unmount second file */
+ if (H5Funmount(file_id, "/g34/g1")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g34/g1/g2" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g34/g2a" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+ H5Gclose( group4_id );
+ H5Fclose( file1_id );
+
+ PASSED();
+
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with mounted files and unlinking
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with mounted files and unlinking");
+
+ /* Create group "/g36/g1/g2" in first file */
+ if ((group_id = H5Gcreate( file_id, "/g36", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file_id, "/g36/g1", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file_id, "/g36/g1/g2", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Create second file and group "/g37/g4" in it */
+ file1_id = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file1_id, "/g37", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file1_id, "/g37/g4", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file1_id, "/g37/g4/g5a", 0 ))<0) goto out;
+ if ((group4_id = H5Gcreate( file1_id, "/g37/g4/g5b", 0 ))<0) goto out;
+
+ /* Mount second file under "/g36/g1" in the first file */
+ if (H5Fmount(file_id, "/g36/g1", file1_id, H5P_DEFAULT)<0) goto out;
+
+ /* Open group in mounted file */
+ if ((group5_id = H5Gopen( file_id, "/g36/g1/g37/" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group5_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g36/g1/g37" )!=0) goto out;
+
+ /* Open group to delete in mounted file */
+ if ((group6_id = H5Gopen( file_id, "/g36/g1/g37/g4/g5a" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group6_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g36/g1/g37/g4/g5a" )!=0) goto out;
+
+ /* Delete end group in mounted file, using relative paths */
+ if (H5Gunlink( group5_id, "g4/g5a")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group6_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group3_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close deleted group */
+ H5Gclose( group6_id );
+
+ /* Open groups to delete in mounted file */
+ if ((group6_id = H5Gopen( file_id, "/g36/g1/g37/g4" ))<0) goto out;
+ if ((group7_id = H5Gopen( file_id, "/g36/g1/g37/g4/g5b" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group6_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g36/g1/g37/g4" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group7_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g36/g1/g37/g4/g5b" )!=0) goto out;
+
+ /* Delete middle group in mounted file, using relative paths */
+ if (H5Gunlink( group5_id, "g4")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group6_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group7_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group4_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close deleted groups */
+ H5Gclose( group6_id );
+ H5Gclose( group7_id );
+
+ /* Close group in mounted file */
+ H5Gclose( group5_id );
+
+ if (H5Funmount(file_id, "/g36/g1")<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+ H5Gclose( group4_id );
+ H5Fclose( file1_id );
+
+ PASSED();
+
+
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with mounting already mounted files
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with mounting already mounted files");
+
+ /* Create file and group "/g38/g1/g2" in it */
+ file1_id = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file1_id, "/g38", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file1_id, "/g38/g1", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file1_id, "/g38/g1/g2", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Create second file and group "/g39/g1/g2" in it */
+ file2_id = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file2_id, "/g39", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file2_id, "/g39/g3", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file2_id, "/g39/g3/g4", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Create third file and group "/g40/g5/g6" in it */
+ file3_id = H5Fcreate(filename3, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file3_id, "/g40", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file3_id, "/g40/g5", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file3_id, "/g40/g5/g6", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Mount second file under "/g38/g1" in the first file */
+ if (H5Fmount(file1_id, "/g38/g1", file2_id, H5P_DEFAULT)<0) goto out;
+
+ if ((group_id = H5Gopen( file1_id, "/g38/g1/g39/g3/g4" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g38/g1/g39/g3/g4" )!=0) goto out;
+
+ /* Mount first file under "/g40/g5" in the third file */
+ if (H5Fmount(file3_id, "/g40/g5", file1_id, H5P_DEFAULT)<0) goto out;
+
+ if ((group2_id = H5Gopen( file3_id, "/g40/g5/g38/g1/g39/g3/g4" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g40/g5/g38/g1/g39/g3/g4" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g38/g1/g39/g3/g4" )!=0) goto out;
+
+ /* Unmount first file */
+ if (H5Funmount(file3_id, "/g40/g5")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g38/g1/g39/g3/g4" )!=0) goto out;
+
+ /* Unmount second file */
+ if (H5Funmount(file1_id, "/g38/g1")<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Fclose( file1_id );
+ H5Fclose( file2_id );
+ H5Fclose( file3_id );
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * Test H5Iget_name with opening object in unmounted file
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("H5Iget_name with opening object in unmounted file");
+
+ /* Create file and group "/g39/g1/g2" in it */
+ file1_id = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file1_id, "/g41", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file1_id, "/g41/g1", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file1_id, "/g41/g1/g2", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Create second file and group "/g42/g1/g2" in it */
+ file2_id = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+ if ((group_id = H5Gcreate( file2_id, "/g42", 0 ))<0) goto out;
+ if ((group2_id = H5Gcreate( file2_id, "/g42/g3", 0 ))<0) goto out;
+ if ((group3_id = H5Gcreate( file2_id, "/g42/g3/g4", 0 ))<0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Gclose( group3_id );
+
+ /* Mount second file under "/g41/g1" in the first file */
+ if (H5Fmount(file1_id, "/g41/g1", file2_id, H5P_DEFAULT)<0) goto out;
+
+ if ((group_id = H5Gopen( file1_id, "/g41/g1/g42/g3" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "/g41/g1/g42/g3" )!=0) goto out;
+
+ /* Unmount file */
+ if (H5Funmount(file1_id, "/g41/g1")<0) goto out;
+
+ if ((group2_id = H5Gopen( group_id, "g4" ))<0) goto out;
+
+ /* Get name */
+ if (H5Iget_name( group2_id, name, size )<0) goto out;
+
+ /* Verify */
+ if (check_name( name, "" )!=0) goto out;
+
+ /* Close */
+ H5Gclose( group_id );
+ H5Gclose( group2_id );
+ H5Fclose( file1_id );
+ H5Fclose( file2_id );
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * end tests
+ *-------------------------------------------------------------------------
+ */
+
+
+ /* Close file */
+ H5Fclose( file_id );
+ puts("All getname tests passed.");
+ h5_cleanup(FILENAME, fapl);
+ return 0;
+
+out:
+ H5Fclose( file_id );
+ H5_FAILED();
+ return 1;
+}
+

Added: packages/hdf5/branches/upstream/current/test/gheap.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/gheap.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/gheap.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,424 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Tuesday, March 31, 1998
+ *
+ * Purpose:	Tests the global heap.  The global heap is the set of all
+ *		collections but the collections are not related to one
+ *		another by anything that appears in the file format.
+ */
+#include "h5test.h"
+#include "H5private.h"
+#include "H5Eprivate.h"
+#include "H5Fprivate.h"
+#include "H5Gprivate.h"
+#include "H5HGprivate.h"
+#include "H5Iprivate.h"
+#include "H5Pprivate.h"
+
+const char *FILENAME[] = {
+    "gheap1",
+    "gheap2",
+    "gheap3",
+    "gheap4",
+    NULL
+};
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_1
+ *
+ * Purpose:	Writes a sequence of objects to the global heap where each
+ *		object is larger than the one before.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, March 31, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_1 (hid_t fapl)
+{
+    hid_t	file=-1;
+    H5F_t 	*f=NULL;
+    H5HG_t	obj[1024];
+    uint8_t	out[1024];
+    uint8_t	in[1024];
+    int		i;
+    size_t	size;
+    herr_t	status;
+    int		nerrors=0;
+    char	filename[1024];
+
+    TESTING("monotonically increasing lengths");
+
+    /* Open a clean file */
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	goto error;
+    if (NULL==(f=H5I_object(file))) {
+	H5_FAILED();
+	puts("    Unable to create file");
+	goto error;
+    }
+
+    /*
+     * Write the objects, monotonically increasing in length.  Since this is
+     * a clean file, the addresses allocated for the collections should also
+     * be monotonically increasing.
+     */
+    for (i=0; i<1024; i++) {
+	size = i+1;
+	memset (out, 'A'+i%26, size);
+	H5Eclear ();
+	status = H5HG_insert (f, H5P_DATASET_XFER_DEFAULT, size, out, obj+i);
+	if (status<0) {
+	    H5_FAILED();
+	    puts("    Unable to insert object into global heap");
+	    nerrors++;
+	} else if (i && H5F_addr_gt (obj[i-1].addr, obj[i].addr)) {
+	    H5_FAILED();
+	    puts("    Collection addresses are not monotonically increasing");
+	    nerrors++;
+	}
+    }
+
+    /*
+     * Now try to read each object back.
+     */
+    for (i=0; i<1024; i++) {
+	size = i+1;
+	memset (out, 'A'+i%26, size);
+	H5Eclear ();
+	if (NULL==H5HG_read (f, H5P_DATASET_XFER_DEFAULT, obj+i, in)) {
+	    H5_FAILED();
+	    puts("    Unable to read object");
+	    nerrors++;
+	} else if (memcmp (in, out, size)) {
+	    H5_FAILED();
+	    puts("    Value read doesn't match value written");
+	    nerrors++;
+	}
+    }
+
+    if (H5Fclose(file)<0) goto error;
+    if (nerrors) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return MAX(1, nerrors);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_2
+ *
+ * Purpose:	Writes a sequence of objects to the global heap where each
+ *		object is smaller than the one before.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:        number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, March 31, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_2 (hid_t fapl)
+{
+    hid_t	file=-1;
+    H5F_t 	*f=NULL;
+    H5HG_t	obj[1024];
+    uint8_t	out[1024];
+    uint8_t	in[1024];
+    int		i;
+    size_t	size;
+    int		nerrors=0;
+    char	filename[1024];
+
+    TESTING("monotonically decreasing lengths");
+
+    /* Open a clean file */
+    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	goto error;
+    if (NULL==(f=H5I_object(file))) {
+	H5_FAILED();
+	puts("    Unable to create file");
+	goto error;
+    }
+
+    /*
+     * Write the objects, monotonically decreasing in length.
+     */
+    for (i=0; i<1024; i++) {
+	size = 1024-i;
+	memset (out, 'A'+i%26, size);
+	H5Eclear ();
+	if (H5HG_insert (f, H5P_DATASET_XFER_DEFAULT, size, out, obj+i)<0) {
+	    H5_FAILED();
+	    puts("    Unable to insert object into global heap");
+	    nerrors++;
+	}
+    }
+
+    /*
+     * Now try to read each object back.
+     */
+    for (i=0; i<1024; i++) {
+	size = 1024-i;
+	memset (out, 'A'+i%26, size);
+	H5Eclear ();
+	if (NULL==H5HG_read (f, H5P_DATASET_XFER_DEFAULT, obj+i, in)) {
+	    H5_FAILED();
+	    puts("    Unable to read object");
+	    nerrors++;
+	} else if (memcmp (in, out, size)) {
+	    H5_FAILED();
+	    puts("    Value read doesn't match value written");
+	    nerrors++;
+	}
+    }
+
+    if (H5Fclose(file)<0) goto error;
+    if (nerrors) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return MAX(1, nerrors);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_3
+ *
+ * Purpose:	Creates a few global heap objects and then removes them all.
+ *		The collection should also be removed.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, March 31, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_3 (hid_t fapl)
+{
+    hid_t	file=-1;
+    H5F_t 	*f=NULL;
+    H5HG_t	obj[1024];
+    uint8_t	out[1024];
+    int		i;
+    size_t	size;
+    herr_t	status;
+    int		nerrors=0;
+    char	filename[1024];
+
+    TESTING("complete object removal");
+
+    /* Open a clean file */
+    h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	goto error;
+    if (NULL==(f=H5I_object(file))) {
+	H5_FAILED();
+	puts("    Unable to create file");
+	goto error;
+    }
+
+    /* Create some stuff */
+    for (i=0; i<1024; i++) {
+	size = i%30+100;
+	memset (out, 'A'+i%26, size);
+	H5Eclear ();
+	status = H5HG_insert (f, H5P_DATASET_XFER_DEFAULT, size, out, obj+i);
+	if (status<0) {
+	    H5_FAILED();
+	    puts("    Unable to insert object into global heap");
+	    nerrors++;
+	}
+    }
+
+    /* Remove everything */
+    for (i=0; i<1024; i++) {
+	status = H5HG_remove (f, H5P_DATASET_XFER_DEFAULT, obj+i);
+	if (status<0) {
+	    H5_FAILED();
+	    puts("    Unable to remove object");
+	    nerrors++;
+	}
+    }
+
+    if (H5Fclose(file)<0) goto error;
+    if (nerrors) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return MAX(1, nerrors);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_4
+ *
+ * Purpose:	Tests the H5HG_remove() feature by writing lots of objects
+ *		and occassionally removing some.  When we're done they're all
+ *		removed.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, March 31, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_4 (hid_t fapl)
+{
+    hid_t	file=-1;
+    H5F_t 	*f=NULL;
+    H5HG_t	obj[1024];
+    uint8_t	out[1024];
+    int		i;
+    size_t	size;
+    herr_t	status;
+    int		nerrors=0;
+    char	filename[1024];
+
+    TESTING("partial object removal");
+
+    /* Open a clean file */
+    h5_fixname(FILENAME[3], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	goto error;
+    if (NULL==(f=H5I_object(file))) {
+	H5_FAILED();
+	puts("    Unable to create file");
+	goto error;
+    }
+
+    for (i=0; i<1024; i++) {
+	/* Insert */
+	size = i%30+100;
+	memset (out, 'A'+i%26, size);
+	H5Eclear ();
+	status = H5HG_insert (f, H5P_DATASET_XFER_DEFAULT, size, out, obj+i);
+	if (status<0) {
+	    H5_FAILED();
+	    puts("    Unable to insert object into global heap");
+	    nerrors++;
+	}
+
+	/*
+	 * Remove every third one beginning with the second, but after the
+	 * next one has already been inserted.  That is, insert A, B, C;
+	 * remove B, insert D, E, F; remove E; etc.
+	 */
+	if (1==i%3) {
+	    H5Eclear ();
+	    status = H5HG_remove (f, H5P_DATASET_XFER_DEFAULT, obj+i-1);
+	    if (status<0) {
+		H5_FAILED();
+		puts("    Unable to remove object");
+		nerrors++;
+	    }
+	    memset (obj+i-1, 0, sizeof *obj);
+	}
+    }
+
+    if (H5Fclose(file)<0) goto error;
+    if (nerrors) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return MAX(1, nerrors);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Tests global heap.
+ *
+ * Return:	Success:	zero
+ *
+ *		Failure:	non-zero
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, March 31, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main (void)
+{
+    int		nerrors=0;
+    hid_t	fapl;
+
+    h5_reset();
+    fapl = h5_fileaccess();
+
+    nerrors += test_1(fapl);
+    nerrors += test_2(fapl);
+    nerrors += test_3(fapl);
+    nerrors += test_4(fapl);
+    if (nerrors) goto error;
+
+    puts("All global heap tests passed.");
+    h5_cleanup(FILENAME, fapl);
+    return 0;
+
+ error:
+    puts("*** TESTS FAILED ***");
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/test/h5test.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/h5test.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/h5test.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,946 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Thursday, November 19, 1998
+ *
+ * Purpose:	Provides support functions for most of the hdf5 tests cases.
+ *
+ */
+
+#undef NDEBUG			/*override -DNDEBUG			*/
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "h5test.h"
+
+#ifdef WIN32
+#include <process.h>
+#include <direct.h>
+#include <winsock.h>
+#endif  /* WIN32 */
+
+/*
+ * Define these environment variables or constants to influence functions in
+ * this test support library.  The environment variable is used in preference
+ * to the cpp constant.  If neither is defined then use some default value.
+ *
+ * HDF5_DRIVER:		This string describes what low level file driver to
+ *			use for HDF5 file access.  The first word in the
+ *			value is the name of the driver and subsequent data
+ *			is interpreted according to the driver.  See
+ *			h5_fileaccess() for details.
+ *
+ * HDF5_PREFIX:		A string to add to the beginning of all serial test
+ *			file names.  This can be used to run tests in a
+ *			different file system (e.g., "/tmp" or "/tmp/myname").
+ *			The prefix will be separated from the base file name
+ *			by a slash. See h5_fixname() for details.
+ *
+ * HDF5_PARAPREFIX:	A string to add to the beginning of all parallel test
+ *			file names.  This can be used to tell MPIO what driver
+ *			to use (e.g., "gfs:", "ufs:", or "nfs:") or to use a
+ *			different file system (e.g., "/tmp" or "/tmp/myname").
+ *			The prefix will be separated from the base file name
+ *			by a slash. See h5_fixname() for details.
+ *
+ */
+/*
+ * In a parallel machine, the filesystem suitable for compiling is
+ * unlikely a parallel file system that is suitable for parallel I/O.
+ * There is no standard pathname for the parallel file system.  /tmp
+ * is about the best guess.
+ */
+#ifndef HDF5_PARAPREFIX
+#ifdef __PUMAGON__
+/* For the PFS of TFLOPS */
+#define HDF5_PARAPREFIX "pfs:/pfs_grande/multi/tmp_1"
+#else
+#define HDF5_PARAPREFIX ""
+#endif
+#endif
+char	*paraprefix = NULL;	/* for command line option para-prefix */
+#ifdef H5_HAVE_PARALLEL
+MPI_Info    h5_io_info_g=MPI_INFO_NULL;/* MPI INFO object for IO */
+#endif
+
+/*
+ * These are the letters that are appended to the file name when generating
+ * names for the split and multi drivers. They are:
+ *
+ * 	m: All meta data when using the split driver.
+ *	s: The userblock, superblock, and driver info block
+ *	b: B-tree nodes
+ *	r: Dataset raw data
+ *	g: Global heap
+ *	l: local heap (object names)
+ *	o: object headers
+ */
+static const char *multi_letters = "msbrglo";
+
+static herr_t h5_errors(void *client_data);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	h5_errors
+ *
+ * Purpose:	Displays the error stack after printing "*FAILED*".
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, March  4, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+h5_errors(void UNUSED *client_data)
+{
+    H5_FAILED();
+    H5Eprint(stdout);
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	h5_cleanup
+ *
+ * Purpose:	Cleanup temporary test files.
+ *		base_name contains the list of test file names.
+ *		The file access property list is also closed.
+ *
+ * Return:	Non-zero if cleanup actions were performed; zero otherwise.
+ *
+ * Programmer:	Albert Cheng
+ *              May 28, 1998
+ *
+ * Modifications:
+ *		Albert Cheng, 2000-09-09
+ *		Added the explicite base_name argument to replace the
+ *		global variable FILENAME.
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+h5_cleanup(const char *base_name[], hid_t fapl)
+{
+    char	filename[1024];
+    char	temp[2048];
+    int		i, j;
+    int		retval=0;
+    hid_t	driver;
+
+    if (!HDgetenv("HDF5_NOCLEANUP")) {
+	for (i = 0; base_name[i]; i++) {
+	    if (h5_fixname(base_name[i], fapl, filename, sizeof(filename)) == NULL)
+		continue;
+
+            driver = H5Pget_driver(fapl);
+
+	    if (driver == H5FD_FAMILY) {
+		for (j = 0; /*void*/; j++) {
+		    HDsnprintf(temp, sizeof temp, filename, j);
+
+		    if (HDaccess(temp, F_OK) < 0)
+                        break;
+
+		    HDremove(temp);
+		}
+	    } else if (driver == H5FD_CORE) {
+                hbool_t backing;        /* Whether the core file has backing store */
+
+                H5Pget_fapl_core(fapl,NULL,&backing);
+
+                /* If the file was stored to disk with bacing store, remove it */
+                if(backing)
+                    HDremove(filename);
+
+	    } else if (driver == H5FD_MULTI) {
+		H5FD_mem_t mt;
+		assert(HDstrlen(multi_letters)==H5FD_MEM_NTYPES);
+
+		for (mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,mt)) {
+		    HDsnprintf(temp, sizeof temp, "%s-%c.h5",
+			       filename, multi_letters[mt]);
+		    HDremove(temp); /*don't care if it fails*/
+		}
+	    } else {
+		HDremove(filename);
+	    }
+	}
+
+	retval = 1;
+    }
+
+    H5Pclose(fapl);
+    return retval;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	h5_reset
+ *
+ * Purpose:	Reset the library by closing it.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, November 20, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+h5_reset(void)
+{
+    char	filename[1024];
+
+    HDfflush(stdout);
+    HDfflush(stderr);
+    H5close();
+    H5Eset_auto(h5_errors, NULL);
+
+    /*
+     * Cause the library to emit some diagnostics early so they don't
+     * interfere with other formatted output.
+     */
+    sprintf(filename, "/tmp/h5emit-%05d.h5", HDgetpid());
+    H5E_BEGIN_TRY {
+	hid_t file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT,
+			       H5P_DEFAULT);
+	hid_t grp = H5Gcreate(file, "emit", 0);
+	H5Gclose(grp);
+	H5Fclose(file);
+	HDunlink(filename);
+    } H5E_END_TRY;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	h5_fixname
+ *
+ * Purpose:	Create a file name from a file base name like `test' and
+ *		return it through the FULLNAME (at most SIZE characters
+ *		counting the null terminator). The full name is created by
+ *		prepending the contents of HDF5_PREFIX (separated from the
+ *		base name by a slash) and appending a file extension based on
+ *		the driver supplied, resulting in something like
+ *		`ufs:/u/matzke/test.h5'.
+ *
+ * Return:	Success:	The FULLNAME pointer.
+ *
+ *		Failure:	NULL if BASENAME or FULLNAME is the null
+ *				pointer or if FULLNAME isn't large enough for
+ *				the result.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, November 19, 1998
+ *
+ * Modifications:
+ *		Robb Matzke, 1999-08-03
+ *		Modified to use the virtual file layer.
+ *
+ *		Albert Cheng, 2000-01-25
+ *		Added prefix for parallel test files.
+ *
+ * 		Albert Cheng, 2003-05-08
+ *		Changed the default parallel prefix back to NULL but added
+ *              an explanation remark of $HDF5_PARAPREFIX.
+ *-------------------------------------------------------------------------
+ */
+char *
+h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size)
+{
+    const char     *prefix = NULL;
+    const char     *suffix = ".h5";     /* suffix has default */
+    char           *ptr, last = '\0';
+    size_t          i, j;
+    hid_t           driver = -1;
+
+    if (!base_name || !fullname || size < 1)
+        return NULL;
+
+    memset(fullname, 0, size);
+
+    /* figure out the suffix */
+    if (H5P_DEFAULT != fapl) {
+	if ((driver = H5Pget_driver(fapl)) < 0)
+            return NULL;
+
+	if (H5FD_FAMILY == driver)
+	    suffix = "%05d.h5";
+	else if (H5FD_CORE == driver || H5FD_MULTI == driver)
+	    suffix = NULL;
+    }
+
+    /* Use different ones depending on parallel or serial driver used. */
+    if (H5P_DEFAULT != fapl && H5FD_MPIO == driver){
+#ifdef H5_HAVE_PARALLEL
+	/*
+         * For parallel:
+         *      First use command line option, then the environment
+         *      variable, then try the constant
+	 */
+        static int explained = 0;
+
+	prefix = (paraprefix ? paraprefix : getenv_all(MPI_COMM_WORLD, 0, "HDF5_PARAPREFIX"));
+
+	if (!prefix && !explained) {
+	    /* print hint by process 0 once. */
+	    int mpi_rank;
+
+	    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
+	    if (mpi_rank == 0)
+		printf("*** Hint ***\n"
+		   "You can use environment variable HDF5_PARAPREFIX to "
+		   "run parallel test files in a\n"
+		   "different directory or to add file type prefix. E.g.,\n"
+		   "   HDF5_PARAPREFIX=pfs:/PFS/user/me\n"
+		   "   export HDF5_PARAPREFIX\n"
+		   "*** End of Hint ***\n");
+
+	    explained = TRUE;
+#ifdef HDF5_PARAPREFIX
+            prefix = HDF5_PARAPREFIX;
+#endif  /* HDF5_PARAPREFIX */
+	}
+#endif  /* H5_HAVE_PARALLEL */
+    } else {
+	/*
+         * For serial:
+         *      First use the environment variable, then try the constant
+	 */
+	prefix = HDgetenv("HDF5_PREFIX");
+
+#ifdef HDF5_PREFIX
+	if (!prefix)
+            prefix = HDF5_PREFIX;
+#endif  /* HDF5_PREFIX */
+    }
+
+    /* Prepend the prefix value to the base name */
+    if (prefix && *prefix) {
+        if (H5P_DEFAULT != fapl && H5FD_MPIO == driver) {
+            /* This is a parallel system */
+            char *subdir;
+
+            if (!HDstrcmp(prefix, HDF5_PARAPREFIX)) {
+                /*
+                 * If the prefix specifies the HDF5_PARAPREFIX directory, then
+                 * default to using the "/tmp/$USER" or "/tmp/$LOGIN"
+                 * directory instead.
+                 */
+                char *user, *login;
+
+                user = HDgetenv("USER");
+                login = HDgetenv("LOGIN");
+                subdir = (user ? user : login);
+
+                if (subdir) {
+                    for (i = 0; i < size && prefix[i]; i++)
+                        fullname[i] = prefix[i];
+
+                    fullname[i++] = '/';
+
+                    for (j = 0; i < size && subdir[j]; ++i, ++j)
+                        fullname[i] = subdir[j];
+                }
+            }
+
+            if (!fullname[0])
+                /* We didn't append the prefix yet */
+                HDstrncpy(fullname, prefix, MIN(strlen(prefix), size));
+
+            if (HDstrlen(fullname) + HDstrlen(base_name) + 1 < size) {
+                /*
+                 * Append the base_name with a slash first. Multiple
+                 * slashes are handled below.
+                 */
+                h5_stat_t buf;
+
+                if (HDstat(fullname, &buf) < 0)
+                    /* The directory doesn't exist just yet */
+                    if (HDmkdir(fullname, (mode_t)0755) < 0 && errno != EEXIST)
+                        /*
+                         * We couldn't make the "/tmp/${USER,LOGIN}"
+                         * subdirectory.  Default to PREFIX's original
+                         * prefix value.
+                         */
+                        HDstrcpy(fullname, prefix);
+
+                HDstrcat(fullname, "/");
+                HDstrcat(fullname, base_name);
+            } else {
+                /* Buffer is too small */
+                return NULL;
+            }
+        } else {
+            if (HDsnprintf(fullname, size, "%s/%s", prefix, base_name) == (int)size)
+                /* Buffer is too small */
+                return NULL;
+        }
+    } else if (HDstrlen(base_name) >= size) {
+	/* Buffer is too small */
+	return NULL;
+    } else {
+	HDstrcpy(fullname, base_name);
+   }
+
+    /* Append a suffix */
+    if (suffix) {
+	if (HDstrlen(fullname) + HDstrlen(suffix) >= size)
+            return NULL;
+
+	HDstrcat(fullname, suffix);
+    }
+
+    /* Remove any double slashes in the filename */
+    for (ptr = fullname, i = j = 0; ptr && i < size; i++, ptr++) {
+        if (*ptr != '/' || last != '/')
+            fullname[j++] = *ptr;
+
+        last = *ptr;
+    }
+
+    return fullname;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	h5_fileaccess
+ *
+ * Purpose:	Returns a file access template which is the default template
+ *		but with a file driver set according to the constant or
+ *		environment variable HDF5_DRIVER
+ *
+ * Return:	Success:	A file access property list
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, November 19, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+h5_fileaccess(void)
+{
+    const char	*val = NULL;
+    const char	*name;
+    char s[1024];
+    hid_t fapl = -1;
+
+    /* First use the environment variable, then the constant */
+    val = HDgetenv("HDF5_DRIVER");
+#ifdef HDF5_DRIVER
+    if (!val) val = HDF5_DRIVER;
+#endif
+
+    if ((fapl=H5Pcreate(H5P_FILE_ACCESS))<0) return -1;
+    if (!val || !*val) return fapl; /*use default*/
+
+    HDstrncpy(s, val, sizeof s);
+    s[sizeof(s)-1] = '\0';
+    if (NULL==(name=HDstrtok(s, " \t\n\r"))) return fapl;
+
+    if (!HDstrcmp(name, "sec2")) {
+	/* Unix read() and write() system calls */
+	if (H5Pset_fapl_sec2(fapl)<0) return -1;
+    } else if (!HDstrcmp(name, "stdio")) {
+	/* Standard C fread() and fwrite() system calls */
+	if (H5Pset_fapl_stdio(fapl)<0) return -1;
+    } else if (!HDstrcmp(name, "core")) {
+	/* In-core temporary file with 1MB increment */
+	if (H5Pset_fapl_core(fapl, 1024*1024, FALSE)<0) return -1;
+    } else if (!HDstrcmp(name, "split")) {
+	/* Split meta data and raw data each using default driver */
+	if (H5Pset_fapl_split(fapl,
+			      "-m.h5", H5P_DEFAULT,
+			      "-r.h5", H5P_DEFAULT)<0)
+	    return -1;
+    } else if (!HDstrcmp(name, "multi")) {
+	/* Multi-file driver, general case of the split driver */
+	H5FD_mem_t memb_map[H5FD_MEM_NTYPES];
+	hid_t memb_fapl[H5FD_MEM_NTYPES];
+	const char *memb_name[H5FD_MEM_NTYPES];
+	char sv[H5FD_MEM_NTYPES][1024];
+	haddr_t memb_addr[H5FD_MEM_NTYPES];
+        H5FD_mem_t	mt;
+
+	HDmemset(memb_map, 0, sizeof memb_map);
+	HDmemset(memb_fapl, 0, sizeof memb_fapl);
+	HDmemset(memb_name, 0, sizeof memb_name);
+	HDmemset(memb_addr, 0, sizeof memb_addr);
+
+	assert(HDstrlen(multi_letters)==H5FD_MEM_NTYPES);
+	for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,mt)) {
+	    memb_fapl[mt] = H5P_DEFAULT;
+	    sprintf(sv[mt], "%%s-%c.h5", multi_letters[mt]);
+	    memb_name[mt] = sv[mt];
+	    memb_addr[mt] = MAX(mt-1,0)*(HADDR_MAX/10);
+	}
+
+	if (H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name,
+			      memb_addr, FALSE)<0) {
+	    return -1;
+	}
+    } else if (!HDstrcmp(name, "family")) {
+        hsize_t fam_size = 100*1024*1024; /*100 MB*/
+
+	/* Family of files, each 1MB and using the default driver */
+	if ((val=HDstrtok(NULL, " \t\n\r")))
+	    fam_size = (hsize_t)(HDstrtod(val, NULL) * 1024*1024);
+	if (H5Pset_fapl_family(fapl, fam_size, H5P_DEFAULT)<0)
+            return -1;
+    } else if (!HDstrcmp(name, "log")) {
+#ifdef H5_WANT_H5_V1_4_COMPAT
+        long verbosity = 1;
+
+        /* Log file access */
+        if ((val = strtok(NULL, " \t\n\r")))
+            verbosity = strtol(val, NULL, 0);
+
+        if (H5Pset_fapl_log(fapl, NULL, (int)verbosity) < 0)
+	    return -1;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+        unsigned log_flags = H5FD_LOG_LOC_IO;
+
+        /* Log file access */
+        if ((val = HDstrtok(NULL, " \t\n\r")))
+            log_flags = (unsigned)HDstrtol(val, NULL, 0);
+
+        if (H5Pset_fapl_log(fapl, NULL, log_flags, 0) < 0)
+	    return -1;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    } else {
+	/* Unknown driver */
+	return -1;
+    }
+
+    return fapl;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	h5_no_hwconv
+ *
+ * Purpose:	Turn off hardware data type conversions.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, November 20, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+h5_no_hwconv(void)
+{
+    H5Tunregister(H5T_PERS_HARD, NULL, -1, -1, NULL);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	h5_show_hostname
+ *
+ * Purpose:	Show hostname.  Show process ID if in MPI environment.
+ *
+ * Return:	void
+ *
+ * Programmer:	Albert Cheng
+ *              2002/04/22
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+h5_show_hostname(void)
+{
+    char	hostname[80];
+#ifdef WIN32
+     WSADATA wsaData;
+     int err;
+#endif
+
+    /* try show the process or thread id in multiple processes cases*/
+#ifdef H5_HAVE_PARALLEL
+    {
+	int mpi_rank, mpi_initialized;
+
+	MPI_Initialized(&mpi_initialized);
+	if (mpi_initialized){
+	    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+	    printf("MPI-process %d.", mpi_rank);
+	}else
+	    printf("thread 0.");
+    }
+#elif defined(H5_HAVE_THREADSAFE)
+#ifdef WIN32
+    printf("some thread: no way to know the thread number from pthread on windows.");
+#else
+    printf("thread %d.", (int)pthread_self());
+#endif
+
+#else
+    printf("thread 0.");
+#endif
+#ifdef WIN32
+
+   err = WSAStartup( MAKEWORD(2,2), &wsaData );
+   if ( err != 0 ) {
+    /* could not find a usable WinSock DLL */
+    return;
+   }
+
+/* Confirm that the WinSock DLL supports 2.2.*/
+/* Note that if the DLL supports versions greater    */
+/* than 2.2 in addition to 2.2, it will still return */
+/* 2.2 in wVersion since that is the version we      */
+/* requested.                                        */
+
+   if ( LOBYTE( wsaData.wVersion ) != 2 ||
+        HIBYTE( wsaData.wVersion ) != 2 ) {
+    /* could not find a usable WinSock DLL */
+     WSACleanup( );
+     return;
+   }
+
+#endif
+#ifdef H5_HAVE_GETHOSTNAME
+    if (gethostname(hostname, 80) < 0){
+	printf(" gethostname failed\n");
+    }
+    else
+	printf(" hostname=%s\n", hostname);
+#else
+    printf(" gethostname not supported\n");
+#endif
+#ifdef WIN32
+    WSACleanup();
+#endif
+}
+
+
+#ifdef H5_HAVE_PARALLEL
+/*
+ * Function:    h5_set_info_object
+ * Purpose:     Process environment variables setting to set up MPI Info
+ *              object.
+ * Return:      0 if all is fine; otherwise non-zero.
+ * Programmer:  Albert Cheng, 2002/05/21.
+ * Modifications:
+ *          Bill Wendling, 2002/05/31
+ *          Modified so that the HDF5_MPI_INFO environment variable can
+ *          be a semicolon separated list of "key=value" pairings. Most
+ *          of the code is to remove any whitespaces which might be
+ *          surrounding the "key=value" pairs.
+ */
+int
+h5_set_info_object(void)
+{
+    char	*envp;			/* environment pointer */
+    int		ret_value=0;
+
+    /* handle any MPI INFO hints via $HDF5_MPI_INFO */
+    if ((envp = getenv("HDF5_MPI_INFO")) != NULL){
+        char *next, *valp;
+
+        valp = envp = next = HDstrdup(envp);
+
+        /* create an INFO object if not created yet */
+        if (h5_io_info_g == MPI_INFO_NULL)
+            MPI_Info_create(&h5_io_info_g);
+
+        do {
+            size_t len;
+            char *key_val, *endp, *namep;
+
+            if (*valp == ';')
+                valp++;
+
+            /* copy key/value pair into temporary buffer */
+            len = strcspn(valp, ";");
+            next = &valp[len];
+            key_val = calloc(1, len + 1);
+
+            /* increment the next pointer past the terminating semicolon */
+            if (*next == ';')
+                ++next;
+
+            namep = HDstrncpy(key_val, valp, len);
+
+            /* pass up any beginning whitespaces */
+            while (*namep && (*namep == ' ' || *namep == '\t'))
+                namep++;
+
+            /* eat up any ending white spaces */
+            endp = &namep[strlen(namep) - 1];
+
+            while (endp && (*endp == ' ' || *endp == '\t'))
+                *endp-- = '\0';
+
+            /* find the '=' */
+            valp = HDstrchr(namep, '=');
+
+            if (valp != NULL) {     /* it's a valid key/value pairing */
+                char *tmp_val = valp + 1;
+
+                /* change '=' to \0, move valp down one */
+                *valp-- = '\0';
+
+                /* eat up ending whitespace on the "key" part */
+                while (*valp == ' ' || *valp == '\t')
+                    *valp-- = '\0';
+
+                valp = tmp_val;
+
+                /* eat up beginning whitespace on the "value" part */
+                while (*valp == ' ' || *valp == '\t')
+                    *valp++ = '\0';
+
+                /* actually set the darned thing */
+                if (MPI_SUCCESS != MPI_Info_set(h5_io_info_g, namep, valp)) {
+                    printf("MPI_Info_set failed\n");
+                    ret_value = -1;
+                }
+            }
+
+            valp = next;
+            HDfree(key_val);
+        } while (next && *next);
+
+        HDfree(envp);
+    }
+
+    return ret_value;
+}
+
+
+/*
+ * Function:    h5_dump_info_object
+ * Purpose:     Display content of an MPI Info object
+ * Return:      void
+ * Programmer:  Albert Cheng 2002/05/21
+ * Modifications:
+ */
+void
+h5_dump_info_object(MPI_Info info)
+{
+    char	key[MPI_MAX_INFO_KEY+1];
+    char	value[MPI_MAX_INFO_VAL+1];
+    int  	flag;
+    int		i, nkeys;
+
+    printf("Dumping MPI Info Object(%d) (up to %d bytes per item):\n", (int)info,
+	MPI_MAX_INFO_VAL);
+    if (info==MPI_INFO_NULL){
+	printf("object is MPI_INFO_NULL\n");
+    }
+    else {
+	MPI_Info_get_nkeys(info, &nkeys);
+	printf("object has %d items\n", nkeys);
+	for (i=0; i<nkeys; i++){
+	    MPI_Info_get_nthkey(info, i, key);
+	    MPI_Info_get(info, key, MPI_MAX_INFO_VAL, value, &flag);
+	    printf("%s=%s\n", key, value);
+	}
+
+    }
+}
+#endif	/* H5_HAVE_PARALLEL */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	h5_get_file_size
+ *
+ * Purpose:	Get the current size of a file (in bytes)
+ *
+ * Return:	Success:	Size of file in bytes (could be 0)
+ *		Failure:	0
+ *
+ * Programmer:	Quincey Koziol
+ *              Saturday, March 22, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+off_t
+h5_get_file_size(const char *filename)
+{
+    h5_stat_t	sb;
+
+    /* Get the file's statistics */
+    if (HDstat(filename, &sb)>=0)
+        return((off_t)sb.st_size);
+
+    return(0);
+} /* end get_file_size() */
+
+/*
+ * This routine is designed to provide equivalent functionality to 'printf'
+ * and allow easy replacement for environments which don't have stdin/stdout
+ * available. (i.e. Windows & the Mac)
+ */
+int
+print_func(const char *format, ...)
+{
+	va_list arglist;
+	int ret_value;
+
+	va_start(arglist, format);
+	ret_value = vprintf(format, arglist);
+	va_end(arglist);
+	return ret_value;
+}
+
+#ifdef H5_HAVE_FILTER_SZIP
+
+
+/*-------------------------------------------------------------------------
+ * Function:	h5_szip_can_encode
+ *
+ * Purpose:	Retrieve the filter config flags for szip, tell if
+ *              encoder is available.
+ *
+ * Return:	1:  decode+encode is enabled
+ *		0:  only decode is enabled
+ *              -1: other
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int h5_szip_can_encode(void )
+{
+
+ herr_t       status;
+ unsigned int filter_config_flags;
+
+   status =H5Zget_filter_info(H5Z_FILTER_SZIP, &filter_config_flags);
+   if ((filter_config_flags &
+          (H5Z_FILTER_CONFIG_ENCODE_ENABLED|H5Z_FILTER_CONFIG_DECODE_ENABLED)) == 0) {
+    /* filter present but neither encode nor decode is supported (???) */
+    return -1;
+   } else if ((filter_config_flags &
+          (H5Z_FILTER_CONFIG_ENCODE_ENABLED|H5Z_FILTER_CONFIG_DECODE_ENABLED)) ==
+    H5Z_FILTER_CONFIG_DECODE_ENABLED) {
+     /* decoder only: read but not write */
+    return 0;
+   } else if ((filter_config_flags &
+          (H5Z_FILTER_CONFIG_ENCODE_ENABLED|H5Z_FILTER_CONFIG_DECODE_ENABLED)) ==
+    H5Z_FILTER_CONFIG_ENCODE_ENABLED) {
+     /* encoder only: write but not read (???) */
+     return -1;
+   } else if ((filter_config_flags &
+          (H5Z_FILTER_CONFIG_ENCODE_ENABLED|H5Z_FILTER_CONFIG_DECODE_ENABLED)) ==
+          (H5Z_FILTER_CONFIG_ENCODE_ENABLED|H5Z_FILTER_CONFIG_DECODE_ENABLED)) {
+    return 1;
+   }
+   return(-1);
+}
+#endif /* H5_HAVE_FILTER_SZIP */
+
+#ifdef H5_HAVE_PARALLEL
+/*-------------------------------------------------------------------------
+ * Function:	getenv_all
+ *
+ * Purpose:	Used to get the environment that the root MPI task has.
+ * 		name specifies which environment variable to look for
+ * 		val is the string to which the value of that environment
+ * 		variable will be copied.
+ *
+ * 		NOTE: The pointer returned by this function is only
+ * 		valid until the next call to getenv_all and the data
+ * 		stored there must be copied somewhere else before any
+ * 		further calls to getenv_all take place.
+ *
+ * Return:	pointer to a string containing the value of the environment variable
+ * 		NULL if the varialbe doesn't exist in task 'root's environment.
+ *
+ * Programmer:	Leon Arber
+ *              4/4/05
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+char* getenv_all(MPI_Comm comm, int root, const char* name)
+{
+    int nID;
+    int len = -1;
+    static char* env = NULL;
+    MPI_Status Status;
+
+    assert(name);
+
+    MPI_Comm_rank(comm, &nID);
+
+    /* The root task does the getenv call
+     * and sends the result to the other tasks */
+    if(nID == root)
+    {
+	env = HDgetenv(name);
+	if(env)
+	{
+	    len = HDstrlen(env);
+	    MPI_Bcast(&len, 1, MPI_INT, root, comm);
+	    MPI_Bcast(env, len, MPI_CHAR, root, comm);
+	}
+	/* len -1 indicates that the variable was not in the environment */
+	else
+	    MPI_Bcast(&len, 1, MPI_INT, root, comm);
+    }
+    else
+    {
+	MPI_Bcast(&len, 1, MPI_INT, root, comm);
+	if(len >= 0)
+	{
+	    if(env == NULL)
+		env = (char*) HDmalloc(len+1);
+	    else if(strlen(env) < len)
+		env = (char*) HDrealloc(env, len+1);
+
+	    MPI_Bcast(env, len, MPI_CHAR, root, comm);
+	    env[len] = '\0';
+	}
+	else
+	{
+	    if(env)
+		HDfree(env);
+	    env = NULL;
+	}
+    }
+
+    MPI_Barrier(comm);
+
+    return env;
+}
+
+#endif
+

Added: packages/hdf5/branches/upstream/current/test/h5test.h
===================================================================
--- packages/hdf5/branches/upstream/current/test/h5test.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/h5test.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,166 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Friday, November 20, 1998
+ *
+ * Purpose:     Test support stuff.
+ */
+#ifndef _H5TEST_H
+#define _H5TEST_H
+
+#include "hdf5.h"
+#include "H5private.h"
+
+#ifdef H5_STDC_HEADERS
+#   include <signal.h>
+#   include <stdarg.h>
+#endif
+
+/*
+ * Predefined test verbosity levels.
+ *
+ * Convention:
+ *
+ * The higher the verbosity value, the more information printed.
+ * So, output for higher verbosity also include output of all lower
+ * verbosity.
+ *
+ *  Value     Description
+ *  0         None:   No informational message.
+ *  1                 "All tests passed"
+ *  2                 Header of overall test
+ *  3         Default: header and results of individual test
+ *  4
+ *  5         Low:    Major category of tests.
+ *  6
+ *  7         Medium: Minor category of tests such as functions called.
+ *  8
+ *  9         High:   Highest level.  All information.
+ */
+#define VERBO_NONE 0     /* None    */
+#define VERBO_DEF  3     /* Default */
+#define VERBO_LO   5     /* Low     */
+#define VERBO_MED  7     /* Medium  */
+#define VERBO_HI   9     /* High    */
+
+/*
+ * Verbose queries
+ * Only None needs an exact match.  The rest are at least as much.
+ */
+#define VERBOSE_NONE	(GetTestVerbosity()==VERBO_NONE)
+#define VERBOSE_DEF	(GetTestVerbosity()>=VERBO_DEF)
+#define VERBOSE_LO	(GetTestVerbosity()>=VERBO_LO)
+#define VERBOSE_MED	(GetTestVerbosity()>=VERBO_MED)
+#define VERBOSE_HI	(GetTestVerbosity()>=VERBO_HI)
+
+/*
+ * Test controls definitions.
+ */
+#define SKIPTEST	1	/* Skip this test */
+#define ONLYTEST	2	/* Do only this test */
+#define BEGINTEST	3	/* Skip all tests before this test */
+
+/*
+ * This contains the filename prefix specificied as command line option for
+ * the parallel test files.
+ */
+extern char *paraprefix;
+#ifdef H5_HAVE_PARALLEL
+extern MPI_Info h5_io_info_g;         /* MPI INFO object for IO */
+#endif
+
+/*
+ * Print the current location on the standard output stream.
+ */
+#define AT() 		printf ("	 at %s:%d in %s()...\n",	      \
+				__FILE__, __LINE__, __FUNCTION__);
+
+/*
+ * The name of the test is printed by saying TESTING("something") which will
+ * result in the string `Testing something' being flushed to standard output.
+ * If a test passes, fails, or is skipped then the PASSED(), H5_FAILED(), or
+ * SKIPPED() macro should be called.  After H5_FAILED() or SKIPPED() the caller
+ * should print additional information to stdout indented by at least four
+ * spaces.  If the h5_errors() is used for automatic error handling then
+ * the H5_FAILED() macro is invoked automatically when an API function fails.
+ */
+#define TESTING(WHAT)	{printf("Testing %-62s",WHAT); fflush(stdout);}
+#define PASSED()	{puts(" PASSED");fflush(stdout);}
+#define H5_FAILED()	{puts("*FAILED*");fflush(stdout);}
+#define SKIPPED()	{puts(" -SKIP-");fflush(stdout);}
+#define TEST_ERROR      {H5_FAILED(); AT(); goto error;}
+
+/*
+ * Alarm definitions to wait up (terminate) a test that runs too long.
+ */
+#define alarm_seconds	1200	/* default is 20 minutes */
+#define ALARM_ON	HDalarm(alarm_seconds)
+#define ALARM_OFF	HDalarm(0)
+/* set alarms to N seconds if N > 0, else use default alarm_seconds. */
+#define ALARM_SET(N)	HDalarm((N)>0 ? N : alarm_seconds)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Generally useful testing routines */
+H5TEST_DLL int h5_cleanup(const char *base_name[], hid_t fapl);
+H5TEST_DLL char *h5_fixname(const char *base_name, hid_t fapl, char *fullname,
+		 size_t size);
+H5TEST_DLL hid_t h5_fileaccess(void);
+H5TEST_DLL void h5_no_hwconv(void);
+H5TEST_DLL void h5_reset(void);
+H5TEST_DLL void h5_show_hostname(void);
+H5TEST_DLL off_t h5_get_file_size(const char *filename);
+H5TEST_DLL int print_func(const char *format, ...);
+
+/* Routines for operating on the list of tests (for the "all in one" tests) */
+H5TEST_DLL void TestUsage(void);
+H5TEST_DLL void AddTest(const char *TheName, void (*TheCall) (void),
+	     void (*Cleanup) (void), const char *TheDescr,
+	     const void *Parameters);
+H5TEST_DLL void TestInfo(const char *ProgName);
+H5TEST_DLL void TestParseCmdLine(int argc, char *argv[]);
+H5TEST_DLL void PerformTests(void);
+H5TEST_DLL void TestSummary(void);
+H5TEST_DLL void TestCleanup(void);
+H5TEST_DLL void TestInit(const char *ProgName, void (*private_usage)(void), int (*private_parser)(int ac, char *av[]));
+H5TEST_DLL int  GetTestVerbosity(void);
+H5TEST_DLL int  SetTestVerbosity(int newval);
+H5TEST_DLL int  GetTestSummary(void);
+H5TEST_DLL int  GetTestCleanup(void);
+H5TEST_DLL void ParseTestVerbosity(char *argv);
+H5TEST_DLL int  GetTestNumErrs(void);
+H5TEST_DLL void  IncTestNumErrs(void);
+H5TEST_DLL const void *GetTestParameters(void);
+H5TEST_DLL int  TestErrPrintf(const char *format, ...);
+H5TEST_DLL void SetTest(const char *testname, int action);
+
+
+#ifdef H5_HAVE_FILTER_SZIP
+H5TEST_DLL int h5_szip_can_encode(void);
+#endif /* H5_HAVE_FILTER_SZIP */
+
+#ifdef H5_HAVE_PARALLEL
+H5TEST_DLL int h5_set_info_object(void);
+H5TEST_DLL void h5_dump_info_object(MPI_Info info);
+H5TEST_DLL char* getenv_all(MPI_Comm comm, int root, const char* name);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif

Added: packages/hdf5/branches/upstream/current/test/hyperslab.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/hyperslab.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/hyperslab.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1417 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:	Robb Matzke <matzke at llnl.gov>
+ *		Friday, October 10, 1997
+ *
+ * Purpose:	Hyperslab operations are rather complex, so this file
+ *		attempts to test them extensively so we can be relatively
+ *		sure they really work.	We only test 1d, 2d, and 3d cases
+ *		because testing general dimensionalities would require us to
+ *		rewrite much of the hyperslab stuff.
+ */
+#include "h5test.h"
+#include "H5private.h"
+#include "H5Eprivate.h"
+#include "H5Vprivate.h"
+
+#define TEST_SMALL	0x0001
+#define TEST_MEDIUM	0x0002
+
+#define VARIABLE_SRC	0
+#define VARIABLE_DST	1
+#define VARIABLE_BOTH	2
+
+#define ARRAY_FILL_SIZE 4
+#define ARRAY_OFFSET_NDIMS 3
+
+
+/*-------------------------------------------------------------------------
+ * Function:	init_full
+ *
+ * Purpose:	Initialize full array.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, October 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static unsigned
+init_full(uint8_t *array, size_t nx, size_t ny, size_t nz)
+{
+    size_t		    i, j, k;
+    uint8_t		    acc = 128;
+    unsigned		    total = 0;
+
+    for (i=0; i<nx; i++) {
+	for (j=0; j<ny; j++) {
+	    for (k=0; k<nz; k++) {
+		total += acc;
+		*array++ = acc++;
+	    }
+	}
+    }
+    return total;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	print_array
+ *
+ * Purpose:	Prints the values in an array
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, October 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+print_array(uint8_t *array, size_t nx, size_t ny, size_t nz)
+{
+    size_t	i, j, k;
+
+    for (i=0; i<nx; i++) {
+	if (nz>1) {
+	    printf("i=%lu:\n", (unsigned long)i);
+	} else {
+	    printf("%03lu:", (unsigned long)i);
+	}
+
+	for (j=0; j<ny; j++) {
+	    if (nz>1)
+		printf("%03lu:", (unsigned long)j);
+	    for (k=0; k<nz; k++) {
+		printf(" %3d", *array++);
+	    }
+	    if (nz>1)
+		printf("\n");
+	}
+	printf("\n");
+    }
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	print_ref
+ *
+ * Purpose:	Prints the reference value
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, October 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+print_ref(size_t nx, size_t ny, size_t nz)
+{
+    uint8_t		   *array;
+
+    array = HDcalloc(nx*ny*nz,sizeof(uint8_t));
+
+    printf("Reference array:\n");
+    init_full(array, nx, ny, nz);
+    print_array(array, nx, ny, nz);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	test_fill
+ *
+ * Purpose:	Tests the H5V_hyper_fill() function.
+ *
+ * Return:	Success:	SUCCEED
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *		Saturday, October 11, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_fill(size_t nx, size_t ny, size_t nz,
+	  size_t di, size_t dj, size_t dk,
+	  size_t ddx, size_t ddy, size_t ddz)
+{
+    uint8_t	*dst = NULL;		/*destination array		*/
+    hsize_t	hs_size[3];	    	/*hyperslab size		*/
+    hsize_t	dst_size[3];	    	/*destination total size	*/
+    hsize_t	dst_offset[3];	    	/*offset of hyperslab in dest   */
+    unsigned	ref_value;  		/*reference value		*/
+    unsigned	acc;	    		/*accumulator		    	*/
+    size_t	i, j, k, dx, dy, dz;	/*counters		   	*/
+    size_t	u, v, w;
+    unsigned		ndims;			/*hyperslab dimensionality	*/
+    char	dim[64], s[256];    	/*temp string		    	*/
+    unsigned	fill_value;	    	/*fill value		    	*/
+
+    /*
+     * Dimensionality.
+     */
+    if (0 == nz) {
+	if (0 == ny) {
+	    ndims = 1;
+	    ny = nz = 1;
+	    sprintf(dim, "%lu", (unsigned long) nx);
+	} else {
+	    ndims = 2;
+	    nz = 1;
+	    sprintf(dim, "%lux%lu", (unsigned long) nx, (unsigned long) ny);
+	}
+    } else {
+	ndims = 3;
+	sprintf(dim, "%lux%lux%lu",
+		(unsigned long) nx, (unsigned long) ny, (unsigned long) nz);
+    }
+    sprintf(s, "Testing hyperslab fill %-11s variable hyperslab", dim);
+    printf("%-70s", s);
+    fflush(stdout);
+
+    /* Allocate array */
+    dst = HDcalloc(1,nx*ny*nz);
+    init_full(dst, nx, ny, nz);
+
+    for (i = 0; i < nx; i += di) {
+	for (j = 0; j < ny; j += dj) {
+	    for (k = 0; k < nz; k += dk) {
+		for (dx = 1; dx <= nx - i; dx += ddx) {
+		    for (dy = 1; dy <= ny - j; dy += ddy) {
+			for (dz = 1; dz <= nz - k; dz += ddz) {
+
+			    /* Describe the hyperslab */
+			    dst_size[0] = nx;
+			    dst_size[1] = ny;
+			    dst_size[2] = nz;
+			    dst_offset[0] = i;
+			    dst_offset[1] = j;
+			    dst_offset[2] = k;
+			    hs_size[0] = dx;
+			    hs_size[1] = dy;
+			    hs_size[2] = dz;
+
+			    for (fill_value=0;
+				 fill_value<256;
+				 fill_value+=64) {
+				/*
+				 * Initialize the full array, then subtract the
+				 * original * fill values and add the new ones.
+				 */
+				ref_value = init_full(dst, nx, ny, nz);
+				for (u=(size_t)dst_offset[0];
+				     u<dst_offset[0]+dx;
+				     u++) {
+				    for (v = (size_t)dst_offset[1];
+					 v < dst_offset[1] + dy;
+					 v++) {
+					for (w = (size_t)dst_offset[2];
+					     w < dst_offset[2] + dz;
+					     w++) {
+					    ref_value -= dst[u*ny*nz+v*nz+w];
+					}
+				    }
+				}
+				ref_value += fill_value * dx * dy * dz;
+
+				/* Fill the hyperslab with some value */
+				H5V_hyper_fill(ndims, hs_size, dst_size,
+					       dst_offset, dst, fill_value);
+
+				/*
+				 * Sum the array and compare it to the
+				 * reference value.
+				 */
+				acc = 0;
+				for (u = 0; u < nx; u++) {
+				    for (v = 0; v < ny; v++) {
+					for (w = 0; w < nz; w++) {
+					    acc += dst[u*ny*nz + v*nz + w];
+					}
+				    }
+				}
+
+				if (acc != ref_value) {
+				    puts("*FAILED*");
+				    if (!isatty(1)) {
+					/*
+					 * Print debugging info unless output
+					 * is going directly to a terminal.
+					 */
+					AT();
+					printf("   acc != ref_value\n");
+					printf("   i=%lu, j=%lu, k=%lu, "
+					       "dx=%lu, dy=%lu, dz=%lu, "
+					       "fill=%d\n",
+					       (unsigned long)i,
+					       (unsigned long)j,
+					       (unsigned long)k,
+					       (unsigned long)dx,
+					       (unsigned long)dy,
+					       (unsigned long)dz,
+					       fill_value);
+					print_ref(nx, ny, nz);
+					printf("\n   Result is:\n");
+					print_array(dst, nx, ny, nz);
+				    }
+				    goto error;
+				}
+			    }
+			}
+		    }
+		}
+	    }
+	}
+    }
+    puts(" PASSED");
+    HDfree(dst);
+    return SUCCEED;
+
+  error:
+    HDfree(dst);
+    return FAIL;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	test_copy
+ *
+ * Purpose:	Tests H5V_hyper_copy().
+ *
+ *		The NX, NY, and NZ arguments are the size for the source and
+ *		destination arrays.  You may pass zero for NZ or for NY and
+ *		NZ to test the 2-d and 1-d cases respectively.
+ *
+ *		A hyperslab is copied from/to (depending on MODE) various
+ *		places in SRC and DST beginning at 0,0,0 and increasing
+ *		location by DI,DJ,DK in the x, y, and z directions.
+ *
+ *		For each hyperslab location, various sizes of hyperslabs are
+ *		tried beginning with 1x1x1 and increasing the size in each
+ *		dimension by DDX,DDY,DDZ.
+ *
+ * Return:	Success:	SUCCEED
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, October 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_copy(int mode,
+	  size_t nx, size_t ny, size_t nz,
+	  size_t di, size_t dj, size_t dk,
+	  size_t ddx, size_t ddy, size_t ddz)
+{
+    uint8_t	*src = NULL;		/*source array			*/
+    uint8_t	*dst = NULL;		/*destination array		*/
+    hsize_t	hs_size[3];		/*hyperslab size		*/
+    hsize_t	dst_size[3];		/*destination total size	*/
+    hsize_t	src_size[3];		/*source total size		*/
+    hsize_t	dst_offset[3];		/*offset of hyperslab in dest	*/
+    hsize_t	src_offset[3];		/*offset of hyperslab in source */
+    unsigned	ref_value;		/*reference value		*/
+    unsigned	acc;			/*accumulator			*/
+    hsize_t	i, j, k, dx, dy, dz;	/*counters		     	*/
+    hsize_t	u, v, w;
+    unsigned		ndims;			/*hyperslab dimensionality	*/
+    char	dim[64], s[256];	/*temp string			*/
+    const char	*sub;
+
+    /*
+     * Dimensionality.
+     */
+    if (0 == nz) {
+	if (0 == ny) {
+	    ndims = 1;
+	    ny = nz = 1;
+	    sprintf(dim, "%lu", (unsigned long) nx);
+	} else {
+	    ndims = 2;
+	    nz = 1;
+	    sprintf(dim, "%lux%lu", (unsigned long) nx, (unsigned long) ny);
+	}
+    } else {
+	ndims = 3;
+	sprintf(dim, "%lux%lux%lu",
+		(unsigned long) nx, (unsigned long) ny, (unsigned long) nz);
+    }
+
+    switch (mode) {
+    case VARIABLE_SRC:
+	/*
+	 * The hyperslab "travels" through the source array but the
+	 * destination hyperslab is always at the origin of the destination
+	 * array.
+	 */
+	sub = "variable source";
+	break;
+    case VARIABLE_DST:
+	/*
+	 * We always read a hyperslab from the origin of the source and copy it
+	 * to a hyperslab at various locations in the destination.
+	 */
+	sub = "variable destination";
+	break;
+    case VARIABLE_BOTH:
+	/*
+	 * We read the hyperslab from various locations in the source and copy
+	 * it to the same location in the destination.
+	 */
+	sub = "sync source & dest  ";
+	break;
+    default:
+	abort();
+    }
+
+    sprintf(s, "Testing hyperslab copy %-11s %s", dim, sub);
+    printf("%-70s", s);
+    fflush(stdout);
+
+    /*
+     * Allocate arrays
+     */
+    src = HDcalloc(1,nx*ny*nz);
+    dst = HDcalloc(1,nx*ny*nz);
+    init_full(src, nx, ny, nz);
+
+    for (i=0; i<nx; i+=di) {
+	for (j=0; j<ny; j+=dj) {
+	    for (k=0; k<nz; k+=dk) {
+		for (dx=1; dx<=nx-i; dx+=ddx) {
+		    for (dy=1; dy<=ny-j; dy+=ddy) {
+			for (dz=1; dz<=nz-k; dz+=ddz) {
+
+			    /*
+			     * Describe the source and destination hyperslabs
+			     * and the arrays to which they belong.
+			     */
+			    hs_size[0] = dx;
+			    hs_size[1] = dy;
+			    hs_size[2] = dz;
+			    dst_size[0] = src_size[0] = nx;
+			    dst_size[1] = src_size[1] = ny;
+			    dst_size[2] = src_size[2] = nz;
+			    switch (mode) {
+			    case VARIABLE_SRC:
+				dst_offset[0] = 0;
+				dst_offset[1] = 0;
+				dst_offset[2] = 0;
+				src_offset[0] = i;
+				src_offset[1] = j;
+				src_offset[2] = k;
+				break;
+			    case VARIABLE_DST:
+				dst_offset[0] = i;
+				dst_offset[1] = j;
+				dst_offset[2] = k;
+				src_offset[0] = 0;
+				src_offset[1] = 0;
+				src_offset[2] = 0;
+				break;
+			    case VARIABLE_BOTH:
+				dst_offset[0] = i;
+				dst_offset[1] = j;
+				dst_offset[2] = k;
+				src_offset[0] = i;
+				src_offset[1] = j;
+				src_offset[2] = k;
+				break;
+			    default:
+				abort();
+			    }
+
+			    /*
+			     * Sum the main array directly to get a reference
+			     * value to compare against later.
+			     */
+			    ref_value = 0;
+			    for (u=src_offset[0]; u<src_offset[0]+dx; u++) {
+				for (v=src_offset[1];
+				     v<src_offset[1]+dy;
+				     v++) {
+				    for (w=src_offset[2];
+					 w<src_offset[2]+dz;
+					 w++) {
+					ref_value += src[u*ny*nz + v*nz + w];
+				    }
+				}
+			    }
+
+			    /*
+			     * Set all loc values to 1 so we can detect writing
+			     * outside the hyperslab.
+			     */
+			    for (u=0; u<nx; u++) {
+				for (v=0; v<ny; v++) {
+				    for (w=0; w<nz; w++) {
+					dst[u*ny*nz + v*nz + w] = 1;
+				    }
+				}
+			    }
+
+			    /*
+			     * Copy a hyperslab from the global array to the
+			     * local array.
+			     */
+			    H5V_hyper_copy(ndims, hs_size,
+					   dst_size, dst_offset, dst,
+					   src_size, src_offset, src);
+
+			    /*
+			     * Sum the destination hyperslab.  It should be
+			     * the same as the reference value.
+			     */
+			    acc = 0;
+			    for (u=dst_offset[0]; u<dst_offset[0]+dx; u++) {
+				for (v=dst_offset[1];
+				     v<dst_offset[1]+dy;
+				     v++) {
+				    for (w=dst_offset[2];
+					 w<dst_offset[2]+dz;
+					 w++) {
+					acc += dst[u*ny*nz + v*nz + w];
+				    }
+				}
+			    }
+			    if (acc != ref_value) {
+				puts("*FAILED*");
+				if (!isatty(1)) {
+				    /*
+				     * Print debugging info unless output is
+				     * going directly to a terminal.
+				     */
+				    AT();
+				    printf("   acc != ref_value\n");
+				    printf("   i=%lu, j=%lu, k=%lu, "
+					   "dx=%lu, dy=%lu, dz=%lu\n",
+					   (unsigned long)i,
+					   (unsigned long)j,
+					   (unsigned long)k,
+					   (unsigned long)dx,
+					   (unsigned long)dy,
+					   (unsigned long)dz);
+				    print_ref(nx, ny, nz);
+				    printf("\n	 Destination array is:\n");
+				    print_array(dst, nx, ny, nz);
+				}
+				goto error;
+			    }
+			    /*
+			     * Sum the entire array. It should be a fixed
+			     * amount larger than the reference value since
+			     * we added the border of 1's to the hyperslab.
+			     */
+			    acc = 0;
+			    for (u=0; u<nx; u++) {
+				for (v=0; v<ny; v++) {
+				    for (w=0; w<nz; w++) {
+					acc += dst[u*ny*nz + v*nz + w];
+				    }
+				}
+			    }
+
+			    /*
+			     * The following casts are to work around an
+			     * optimization bug in the Mongoose 7.20 Irix64
+			     * compiler.
+			     */
+			    if (acc+(unsigned)dx*(unsigned)dy*(unsigned)dz !=
+				ref_value + nx*ny*nz) {
+				puts("*FAILED*");
+				if (!isatty(1)) {
+				    /*
+				     * Print debugging info unless output is
+				     * going directly to a terminal.
+				     */
+				    AT();
+				    printf("   acc != ref_value + nx*ny*nz - "
+					   "dx*dy*dz\n");
+				    printf("   i=%lu, j=%lu, k=%lu, "
+					   "dx=%lu, dy=%lu, dz=%lu\n",
+					   (unsigned long)i,
+					   (unsigned long)j,
+					   (unsigned long)k,
+					   (unsigned long)dx,
+					   (unsigned long)dy,
+					   (unsigned long)dz);
+				    print_ref(nx, ny, nz);
+				    printf("\n	 Destination array is:\n");
+				    print_array(dst, nx, ny, nz);
+				}
+				goto error;
+			    }
+			}
+		    }
+		}
+	    }
+	}
+    }
+    puts(" PASSED");
+    HDfree(src);
+    HDfree(dst);
+    return SUCCEED;
+
+  error:
+    HDfree(src);
+    HDfree(dst);
+    return FAIL;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	test_multifill
+ *
+ * Purpose:	Tests the H5V_stride_copy() function by using it to fill a
+ *		hyperslab by replicating a multi-byte sequence.	 This might
+ *		be useful to initialize an array of structs with a default
+ *		struct value, or to initialize an array of floating-point
+ *		values with a default bit-pattern.
+ *
+ * Return:	Success:	SUCCEED
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *		Saturday, October 11, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_multifill(size_t nx)
+{
+    hsize_t		    i, j;
+    hsize_t		    size;
+    hsize_t		    src_stride;
+    hsize_t		    dst_stride;
+    char		    s[64];
+
+    struct a_struct {
+	int			left;
+	double			mid;
+	int			right;
+    } fill		   , *src = NULL, *dst = NULL;
+
+    printf("%-70s", "Testing multi-byte fill value");
+    fflush(stdout);
+
+    /* Initialize the source and destination */
+    src = HDmalloc(nx * sizeof(*src));
+    dst = HDmalloc(nx * sizeof(*dst));
+    for (i = 0; i < nx; i++) {
+	src[i].left = 1111111;
+	src[i].mid = 12345.6789;
+	src[i].right = 2222222;
+	dst[i].left = 3333333;
+	dst[i].mid = 98765.4321;
+	dst[i].right = 4444444;
+    }
+
+    /*
+     * Describe the fill value.	 The zero stride says to read the same thing
+     * over and over again.
+     */
+    fill.left = 55555555;
+    fill.mid = 3.1415927;
+    fill.right = 66666666;
+    src_stride = 0;
+
+    /*
+     * The destination stride says to fill in one value per array element
+     */
+    dst_stride = sizeof(fill);
+
+    /*
+     * Copy the fill value into each element
+     */
+    size = nx;
+    H5V_stride_copy(1, (hsize_t)sizeof(double), &size,
+		    &dst_stride, &(dst[0].mid), &src_stride, &(fill.mid));
+
+    /*
+     * Check
+     */
+    s[0] = '\0';
+    for (i = 0; i < nx; i++) {
+	if (dst[i].left != 3333333) {
+	    sprintf(s, "bad dst[%lu].left", (unsigned long)i);
+	} else if (dst[i].mid != fill.mid) {
+	    sprintf(s, "bad dst[%lu].mid", (unsigned long)i);
+	} else if (dst[i].right != 4444444) {
+	    sprintf(s, "bad dst[%lu].right", (unsigned long)i);
+	}
+	if (s[0]) {
+	    puts("*FAILED*");
+	    if (!isatty(1)) {
+		AT();
+		printf("   fill={%d,%g,%d}\n   ",
+		       fill.left, fill.mid, fill.right);
+		for (j = 0; j < sizeof(fill); j++) {
+		    printf(" %02x", ((uint8_t *) &fill)[j]);
+		}
+		printf("\n   dst[%lu]={%d,%g,%d}\n   ",
+		       (unsigned long)i,
+		       dst[i].left, dst[i].mid, dst[i].right);
+		for (j = 0; j < sizeof(dst[i]); j++) {
+		    printf(" %02x", ((uint8_t *) (dst + i))[j]);
+		}
+		printf("\n");
+	    }
+	    goto error;
+	}
+    }
+
+    puts(" PASSED");
+    HDfree(src);
+    HDfree(dst);
+    return SUCCEED;
+
+  error:
+    HDfree(src);
+    HDfree(dst);
+    return FAIL;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	test_endian
+ *
+ * Purpose:	Tests the H5V_stride_copy() function by using it to copy an
+ *		array of integers and swap the byte ordering from little
+ *		endian to big endian or vice versa depending on the hardware.
+ *
+ * Return:	Success:	SUCCEED
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *		Saturday, October 11, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_endian(size_t nx)
+{
+    uint8_t	*src = NULL;		/*source array			*/
+    uint8_t	*dst = NULL;		/*destination array		*/
+    hssize_t	src_stride[2];		/*source strides		*/
+    hssize_t	dst_stride[2];		/*destination strides		*/
+    hsize_t	size[2];		/*size vector			*/
+    hsize_t	i, j;
+
+    printf("%-70s", "Testing endian conversion by stride");
+    fflush(stdout);
+
+    /* Initialize arrays */
+    src = HDmalloc(nx * 4);
+    init_full(src, nx, 4, 1);
+    dst = HDcalloc(nx , 4);
+
+    /* Initialize strides */
+    src_stride[0] = 0;
+    src_stride[1] = 1;
+    dst_stride[0] = 8;
+    dst_stride[1] = -1;
+    size[0] = nx;
+    size[1] = 4;
+
+    /* Copy the array */
+    H5V_stride_copy_s(2, (hsize_t)1, size, dst_stride, dst + 3, src_stride, src);
+
+    /* Compare */
+    for (i = 0; i < nx; i++) {
+	for (j = 0; j < 4; j++) {
+	    if (src[i * 4 + j] != dst[i * 4 + 3 - j]) {
+		puts("*FAILED*");
+		if (!isatty(1)) {
+		    /*
+		     * Print debugging info unless output is going directly
+		     * to a terminal.
+		     */
+		    AT();
+		    printf("   i=%lu, j=%lu\n",
+			   (unsigned long)i, (unsigned long)j);
+		    printf("   Source array is:\n");
+		    print_array(src, nx, 4, 1);
+		    printf("\n	 Result is:\n");
+		    print_array(dst, nx, 4, 1);
+		}
+		goto error;
+	    }
+	}
+    }
+
+    puts(" PASSED");
+    HDfree(src);
+    HDfree(dst);
+    return SUCCEED;
+
+  error:
+    HDfree(src);
+    HDfree(dst);
+    return FAIL;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	test_transpose
+ *
+ * Purpose:	Copy a 2d array from here to there and transpose the elements
+ *		as it's copied.
+ *
+ * Return:	Success:	SUCCEED
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *		Saturday, October 11, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_transpose(size_t nx, size_t ny)
+{
+    int	*src = NULL;
+    int	*dst = NULL;
+    hsize_t	i, j;
+    hsize_t	src_stride[2], dst_stride[2];
+    hsize_t	size[2];
+    char	s[256];
+
+    sprintf(s, "Testing 2d transpose by stride %4lux%-lud",
+	    (unsigned long) nx, (unsigned long) ny);
+    printf("%-70s", s);
+    fflush(stdout);
+
+    /* Initialize */
+    src = HDmalloc(nx * ny * sizeof(*src));
+    for (i = 0; i < nx; i++) {
+	for (j = 0; j < ny; j++) {
+	    src[i * ny + j] = (int)(i * ny + j);
+	}
+    }
+    dst = HDcalloc(nx*ny,sizeof(*dst));
+
+    /* Build stride info */
+    size[0] = nx;
+    size[1] = ny;
+    src_stride[0] = 0;
+    src_stride[1] = sizeof(*src);
+    dst_stride[0] = (ssize_t)((1 - nx * ny) * sizeof(*src));
+    dst_stride[1] = (ssize_t)(nx * sizeof(*src));
+
+    /* Copy and transpose */
+    if (nx == ny) {
+	H5V_stride_copy(2, (hsize_t)sizeof(*src), size,
+			dst_stride, dst,
+			src_stride, src);
+    } else {
+	H5V_stride_copy(2, (hsize_t)sizeof(*src), size,
+			dst_stride, dst,
+			src_stride, src);
+    }
+
+    /* Check */
+    for (i = 0; i < nx; i++) {
+	for (j = 0; j < ny; j++) {
+	    if (src[i * ny + j] != dst[j * nx + i]) {
+		puts("*FAILED*");
+		if (!isatty(1)) {
+		    AT();
+		    printf("   diff at i=%lu, j=%lu\n",
+			   (unsigned long)i, (unsigned long)j);
+		    printf("   Source is:\n");
+		    for (i = 0; i < nx; i++) {
+			printf("%3lu:", (unsigned long)i);
+			for (j = 0; j < ny; j++) {
+			    printf(" %6d", src[i * ny + j]);
+			}
+			printf("\n");
+		    }
+		    printf("\n	 Destination is:\n");
+		    for (i = 0; i < ny; i++) {
+			printf("%3lu:", (unsigned long)i);
+			for (j = 0; j < nx; j++) {
+			    printf(" %6d", dst[i * nx + j]);
+			}
+			printf("\n");
+		    }
+		}
+		goto error;
+	    }
+	}
+    }
+
+    puts(" PASSED");
+    HDfree(src);
+    HDfree(dst);
+    return SUCCEED;
+
+  error:
+    HDfree(src);
+    HDfree(dst);
+    return FAIL;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	test_sub_super
+ *
+ * Purpose:	Tests H5V_stride_copy() to reduce the resolution of an image
+ *		by copying half the pixels in the X and Y directions.  Then
+ *		we use the small image and duplicate every pixel to result in
+ *		a 2x2 square.
+ *
+ * Return:	Success:	SUCCEED
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *		Monday, October 13, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_sub_super(size_t nx, size_t ny)
+{
+    uint8_t	*full = NULL;	/*original image		*/
+    uint8_t	*half = NULL;	/*image at 1/2 resolution	*/
+    uint8_t	*twice = NULL;	/*2x2 pixels			*/
+    hsize_t	src_stride[4];	/*source stride info		*/
+    hsize_t	dst_stride[4];	/*destination stride info	*/
+    hsize_t	size[4];	/*number of sample points	*/
+    hsize_t	i, j;
+    char	s[256];
+
+    sprintf(s, "Testing image sampling %4lux%-4lu to %4lux%-4lu ",
+	    (unsigned long) (2 * nx), (unsigned long) (2 * ny),
+	    (unsigned long) nx, (unsigned long) ny);
+    printf("%-70s", s);
+    fflush(stdout);
+
+    /* Initialize */
+    full = HDmalloc(4 * nx * ny);
+    init_full(full, 2 * nx, 2 * ny, 1);
+    half = HDcalloc(1,nx*ny);
+    twice = HDcalloc(4,nx*ny);
+
+    /* Setup */
+    size[0] = nx;
+    size[1] = ny;
+    src_stride[0] = (ssize_t)(2 * ny);
+    src_stride[1] = 2;
+    dst_stride[0] = 0;
+    dst_stride[1] = 1;
+
+    /* Copy */
+    H5V_stride_copy(2, (hsize_t)sizeof(uint8_t), size,
+		    dst_stride, half, src_stride, full);
+
+    /* Check */
+    for (i = 0; i < nx; i++) {
+	for (j = 0; j < ny; j++) {
+	    if (full[4 * i * ny + 2 * j] != half[i * ny + j]) {
+		puts("*FAILED*");
+		if (!isatty(1)) {
+		    AT();
+		    printf("   full[%lu][%lu] != half[%lu][%lu]\n",
+			   (unsigned long)i*2,
+			   (unsigned long)j*2,
+			   (unsigned long)i,
+			   (unsigned long)j);
+		    printf("   full is:\n");
+		    print_array(full, 2 * nx, 2 * ny, 1);
+		    printf("\n	 half is:\n");
+		    print_array(half, nx, ny, 1);
+		}
+		goto error;
+	    }
+	}
+    }
+    puts(" PASSED");
+
+    /*
+     * Test replicating pixels to produce an image twice as large in each
+     * dimension.
+     */
+    sprintf(s, "Testing image sampling %4lux%-4lu to %4lux%-4lu ",
+	    (unsigned long) nx, (unsigned long) ny,
+	    (unsigned long) (2 * nx), (unsigned long) (2 * ny));
+    printf("%-70s", s);
+    fflush(stdout);
+
+    /* Setup stride */
+    size[0] = nx;
+    size[1] = ny;
+    size[2] = 2;
+    size[3] = 2;
+    src_stride[0] = 0;
+    src_stride[1] = 1;
+    src_stride[2] = 0;
+    src_stride[3] = 0;
+    dst_stride[0] = (ssize_t)(2 * ny);
+    dst_stride[1] = (ssize_t)(2 * sizeof(uint8_t) - 4 * ny);
+    dst_stride[2] = (ssize_t)(2 * ny - 2 * sizeof(uint8_t));
+    dst_stride[3] = sizeof(uint8_t);
+
+    /* Copy */
+    H5V_stride_copy(4, (hsize_t)sizeof(uint8_t), size,
+		    dst_stride, twice, src_stride, half);
+
+    /* Check */
+    s[0] = '\0';
+    for (i = 0; i < nx; i++) {
+	for (j = 0; j < ny; j++) {
+	    if (half[i*ny+j] != twice[4*i*ny + 2*j]) {
+		sprintf(s, "half[%lu][%lu] != twice[%lu][%lu]",
+			(unsigned long)i,
+			(unsigned long)j,
+			(unsigned long)i*2,
+			(unsigned long)j*2);
+	    } else if (half[i*ny + j] != twice[4*i*ny + 2*j + 1]) {
+		sprintf(s, "half[%lu][%lu] != twice[%lu][%lu]",
+			(unsigned long)i,
+			(unsigned long)j,
+			(unsigned long)i*2,
+			(unsigned long)j*2+1);
+	    } else if (half[i*ny + j] != twice[(2*i +1)*2*ny + 2*j]) {
+		sprintf(s, "half[%lu][%lu] != twice[%lu][%lu]",
+			(unsigned long)i,
+			(unsigned long)j,
+			(unsigned long)i*2+1,
+			(unsigned long)j*2);
+	    } else if (half[i*ny + j] != twice[(2*i+1)*2*ny + 2*j+1]) {
+		sprintf(s, "half[%lu][%lu] != twice[%lu][%lu]",
+			(unsigned long)i,
+			(unsigned long)j,
+			(unsigned long)i*2+1,
+			(unsigned long)j*2+1);
+	    }
+	    if (s[0]) {
+		puts("*FAILED*");
+		if (!isatty(1)) {
+		    AT();
+		    printf("   %s\n   Half is:\n", s);
+		    print_array(half, nx, ny, 1);
+		    printf("\n	 Twice is:\n");
+		    print_array(twice, 2 * nx, 2 * ny, 1);
+		}
+		goto error;
+	    }
+	}
+    }
+    puts(" PASSED");
+
+    HDfree(full);
+    HDfree(half);
+    HDfree(twice);
+    return SUCCEED;
+
+  error:
+    HDfree(full);
+    HDfree(half);
+    HDfree(twice);
+    return FAIL;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	test_array_fill
+ *
+ * Purpose:	Tests H5V_array_fill routine by copying a multibyte value
+ *              (an array of ints, in our case) into all the elements of an
+ *              array.
+ *
+ * Return:	Success:	SUCCEED
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Quincey Koziol
+ *		Monday, April 21, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_array_fill(size_t lo, size_t hi)
+{
+    int         *dst;           /* Destination                  */
+    int         src[ARRAY_FILL_SIZE]; /* Source to duplicate    */
+    size_t	u, v, w;        /* Local index variables        */
+    char	s[256];
+
+    sprintf(s, "array filling %4lu-%-4lu elements", (unsigned long)lo,(unsigned long)hi);
+    TESTING(s);
+
+    /* Initialize */
+    dst = HDcalloc(sizeof(int),ARRAY_FILL_SIZE * hi);
+
+    /* Setup */
+    for(u=0; u<ARRAY_FILL_SIZE; u++)
+        src[u]=(char)u;
+
+    /* Fill */
+    for(w=lo; w<=hi; w++) {
+        H5V_array_fill(dst,src,sizeof(src),w);
+
+        /* Check */
+        for(u=0; u<w; u++)
+            for(v=0; v<ARRAY_FILL_SIZE; v++)
+                if(dst[(u*ARRAY_FILL_SIZE)+v]!=src[v]) TEST_ERROR;
+
+        HDmemset(dst,0,sizeof(int)*ARRAY_FILL_SIZE*w);
+    } /* end for */
+    PASSED();
+
+    HDfree(dst);
+    return SUCCEED;
+
+  error:
+    HDfree(dst);
+    return FAIL;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	test_array_offset_n_calc
+ *
+ * Purpose:	Tests H5V_array_offset and H5V_array_calc routines by comparing
+ *              computed array offsets against calculated ones and then going
+ *              back to the coordinates from the offset and checking those.
+ *
+ * Return:	Success:	SUCCEED
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Quincey Koziol
+ *		Monday, April 21, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_array_offset_n_calc(size_t n, size_t x, size_t y, size_t z)
+{
+    hsize_t     *a, *temp_a;    /* Array for stored calculated offsets */
+    hsize_t     off;            /* Offset in array */
+    size_t	u, v, w;        /* Local index variables        */
+    hsize_t     dims[ARRAY_OFFSET_NDIMS];        /* X, Y & X coordinates of array to check */
+    hsize_t     coords[ARRAY_OFFSET_NDIMS];      /* X, Y & X coordinates to check offset of */
+    hsize_t     new_coords[ARRAY_OFFSET_NDIMS];  /* X, Y & X coordinates of offset */
+    char	s[256];
+
+    sprintf(s, "array offset %4lux%4lux%4lu elements", (unsigned long)z,(unsigned long)y,(unsigned long)x);
+    TESTING(s);
+
+    /* Initialize */
+    a = HDmalloc(sizeof(hsize_t) * x * y *z);
+    dims[0]=z;
+    dims[1]=y;
+    dims[2]=x;
+
+    /* Setup */
+    for(u=0, temp_a=a, off=0; u<z; u++)
+        for(v=0; v<y; v++)
+            for(w=0; w<x; w++)
+                *temp_a++ = off++;
+
+    /* Check offsets */
+    for(u=0; u<n; u++) {
+        /* Get random coordinate */
+        coords[0] = (hssize_t)(HDrandom() % z);
+        coords[1] = (hssize_t)(HDrandom() % y);
+        coords[2] = (hssize_t)(HDrandom() % x);
+
+        /* Get offset of coordinate */
+        off=H5V_array_offset(ARRAY_OFFSET_NDIMS,dims,coords);
+
+        /* Check offset of coordinate */
+        if(a[off]!=off) TEST_ERROR;
+
+        /* Get coordinates of offset */
+        if(H5V_array_calc(off,ARRAY_OFFSET_NDIMS,dims,new_coords)<0) TEST_ERROR;
+
+        /* Check computed coordinates */
+        for(v=0; v<ARRAY_OFFSET_NDIMS; v++)
+            if(coords[v]!=new_coords[v]) {
+                HDfprintf(stderr,"coords[%u]=%Hu, new_coords[%u]=%Hu\n",(unsigned)v,coords[v],(unsigned)v,new_coords[v]);
+                TEST_ERROR;
+            }
+    } /* end for */
+
+    PASSED();
+
+    HDfree(a);
+    return SUCCEED;
+
+  error:
+    HDfree(a);
+    return FAIL;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Test various hyperslab operations.  Give the words
+ *		`small' and/or `medium' on the command line or only `small'
+ *		is assumed.
+ *
+ * Return:	Success:	exit(0)
+ *
+ *		Failure:	exit(non-zero)
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, October 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(int argc, char *argv[])
+{
+    herr_t		    status;
+    int			    nerrors = 0;
+    unsigned		    size_of_test;
+
+    /* Parse arguments or assume `small' & `medium' */
+    if (1 == argc) {
+	size_of_test = TEST_SMALL | TEST_MEDIUM;
+    } else {
+	int			i;
+	for (i = 1, size_of_test = 0; i < argc; i++) {
+	    if (!strcmp(argv[i], "small")) {
+		size_of_test |= TEST_SMALL;
+	    } else if (!strcmp(argv[i], "medium")) {
+		size_of_test |= TEST_MEDIUM;
+	    } else {
+		printf("unrecognized argument: %s\n", argv[i]);
+		exit(1);
+	    }
+	}
+    }
+    printf("Test sizes: ");
+    if (size_of_test & TEST_SMALL)
+	printf(" SMALL");
+    if (size_of_test & TEST_MEDIUM)
+	printf(" MEDIUM");
+    printf("\n");
+
+    /* Set the random # seed */
+    HDsrandom((unsigned long)HDtime(NULL));
+
+    /*
+     * Open the library explicitly for thread-safe builds, so per-thread
+     * things are initialized correctly.
+     */
+#ifdef H5_HAVE_THREADSAFE
+    H5open();
+#endif  /* H5_HAVE_THREADSAFE */
+
+    /*
+     *------------------------------
+     * TEST HYPERSLAB FILL OPERATION
+     *------------------------------
+     */
+    if (size_of_test & TEST_SMALL) {
+	status = test_fill(11, 0, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_fill(11, 10, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_fill(3, 5, 5, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    if (size_of_test & TEST_MEDIUM) {
+	status = test_fill(113, 0, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_fill(15, 11, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_fill(5, 7, 7, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+    }
+   /*------------------------------
+    * TEST HYPERSLAB COPY OPERATION
+    *------------------------------
+    */
+
+    /* exhaustive, one-dimensional test */
+    if (size_of_test & TEST_SMALL) {
+	status = test_copy(VARIABLE_SRC, 11, 0, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_copy(VARIABLE_DST, 11, 0, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_copy(VARIABLE_BOTH, 11, 0, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    if (size_of_test & TEST_MEDIUM) {
+	status = test_copy(VARIABLE_SRC, 179, 0, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_copy(VARIABLE_DST, 179, 0, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_copy(VARIABLE_BOTH, 179, 0, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    /* exhaustive, two-dimensional test */
+    if (size_of_test & TEST_SMALL) {
+	status = test_copy(VARIABLE_SRC, 11, 10, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_copy(VARIABLE_DST, 11, 10, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_copy(VARIABLE_BOTH, 11, 10, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    if (size_of_test & TEST_MEDIUM) {
+	status = test_copy(VARIABLE_SRC, 13, 19, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_copy(VARIABLE_DST, 13, 19, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_copy(VARIABLE_BOTH, 13, 19, 0, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    /* sparse, two-dimensional test */
+    if (size_of_test & TEST_MEDIUM) {
+	status = test_copy(VARIABLE_SRC, 73, 67, 0, 7, 11, 1, 13, 11, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_copy(VARIABLE_DST, 73, 67, 0, 7, 11, 1, 13, 11, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_copy(VARIABLE_BOTH, 73, 67, 0, 7, 11, 1, 13, 11, 1);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    /* exhaustive, three-dimensional test */
+    if (size_of_test & TEST_SMALL) {
+	status = test_copy(VARIABLE_SRC, 3, 5, 5, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_copy(VARIABLE_DST, 3, 5, 5, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_copy(VARIABLE_BOTH, 3, 5, 5, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    if (size_of_test & TEST_MEDIUM) {
+	status = test_copy(VARIABLE_SRC, 7, 9, 5, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_copy(VARIABLE_DST, 7, 9, 5, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_copy(VARIABLE_BOTH, 7, 9, 5, 1, 1, 1, 1, 1, 1);
+	nerrors += status < 0 ? 1 : 0;
+    }
+   /*---------------------
+    * TEST MULTI-BYTE FILL
+    *---------------------
+    */
+
+    if (size_of_test & TEST_SMALL) {
+	status = test_multifill(10);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    if (size_of_test & TEST_MEDIUM) {
+	status = test_multifill(500000);
+	nerrors += status < 0 ? 1 : 0;
+    }
+   /*---------------------------
+    * TEST TRANSLATION OPERATORS
+    *---------------------------
+    */
+
+    if (size_of_test & TEST_SMALL) {
+	status = test_endian(10);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_transpose(9, 9);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_transpose(3, 11);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    if (size_of_test & TEST_MEDIUM) {
+	status = test_endian(800000);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_transpose(1200, 1200);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_transpose(800, 1800);
+	nerrors += status < 0 ? 1 : 0;
+    }
+   /*-------------------------
+    * TEST SAMPLING OPERATIONS
+    *-------------------------
+    */
+
+    if (size_of_test & TEST_SMALL) {
+	status = test_sub_super(5, 10);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    if (size_of_test & TEST_MEDIUM) {
+	status = test_sub_super(480, 640);
+	nerrors += status < 0 ? 1 : 0;
+    }
+   /*-------------------------
+    * TEST ARRAY FILL OPERATIONS
+    *-------------------------
+    */
+
+    if (size_of_test & TEST_SMALL) {
+	status = test_array_fill(1,9);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    if (size_of_test & TEST_MEDIUM) {
+	status = test_array_fill(9,257);
+	nerrors += status < 0 ? 1 : 0;
+    }
+   /*-------------------------
+    * TEST ARRAY OFFSET OPERATIONS
+    *-------------------------
+    */
+
+    if (size_of_test & TEST_SMALL) {
+	status = test_array_offset_n_calc(20,7,11,13);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    if (size_of_test & TEST_MEDIUM) {
+	status = test_array_offset_n_calc(500,71,193,347);
+	nerrors += status < 0 ? 1 : 0;
+    }
+
+    /*--- END OF TESTS ---*/
+
+    if (nerrors) {
+	printf("***** %d HYPERSLAB TEST%s FAILED! *****\n",
+	       nerrors, 1 == nerrors ? "" : "S");
+	if (isatty(1)) {
+	    printf("(Redirect output to a pager or a file to see "
+		   "debug output)\n");
+	}
+	exit(1);
+    }
+    printf("All hyperslab tests passed.\n");
+
+#ifdef H5_HAVE_THREADSAFE
+    H5close();
+#endif  /* H5_HAVE_THREADSAFE */
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/test/istore.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/istore.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/istore.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,695 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:	Robb Matzke <matzke at llnl.gov>
+ *		Wednesday, October 15, 1997
+ *
+ * Purpose:	Tests various aspects of indexed raw data storage.
+ */
+
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+#include "h5test.h"
+#include "H5private.h"
+#include "H5Dprivate.h"
+#include "H5Eprivate.h"
+#include "H5Iprivate.h"
+#include "H5Pprivate.h"
+#include "H5Fpkg.h"
+#include "H5Gprivate.h"
+#include "H5Oprivate.h"
+#include "H5Pprivate.h"
+#include "H5Vprivate.h"
+
+const char *FILENAME[] = {
+    "istore",
+    NULL
+};
+
+
+#define TEST_SMALL	0x0001
+#define TEST_MEDIUM	0x0002
+#define TEST_LARGE	0x0004
+
+/* The datatype of the dataset operated on by this test */
+#define TEST_DATATYPE   H5T_NATIVE_UCHAR
+
+#define TEST_CHUNK_SIZE 50
+#ifdef H5_HAVE_LARGE_HSIZET
+#define TEST_SPARSE_SIZE 1000000
+#else /* H5_HAVE_LARGE_HSIZET */
+#define TEST_SPARSE_SIZE 1200
+#endif /* H5_HAVE_LARGE_HSIZET */
+
+hsize_t chunk_dims[H5O_LAYOUT_NDIMS];
+hsize_t zero[H5O_LAYOUT_NDIMS];
+
+
+/*-------------------------------------------------------------------------
+ * Function:	print_array
+ *
+ * Purpose:	Prints the values in an array
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *		Friday, October 10, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+print_array(uint8_t *array, size_t nx, size_t ny, size_t nz)
+{
+    size_t	i, j, k;
+
+    for (i = 0; i < nx; i++) {
+	if (nz > 1) {
+	    fprintf(stderr,"i=%lu:\n", (unsigned long)i);
+	} else {
+	    fprintf(stderr,"%03lu:", (unsigned long)i);
+	}
+
+	for (j = 0; j < ny; j++) {
+	    if (nz > 1)
+		fprintf(stderr,"%03lu:", (unsigned long)j);
+	    for (k = 0; k < nz; k++) {
+		fprintf(stderr," %3d", *array++);
+	    }
+	    if (nz > 1)
+		fprintf(stderr,"\n");
+	}
+	fprintf(stderr,"\n");
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	new_object
+ *
+ * Purpose:	Creates a new object that refers to a indexed storage of raw
+ *		data.  No raw data is stored.
+ *
+ * Return:	Success:	ID of dataset
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, October 15, 1997
+ *
+ * Modifications:
+ *              Converted to use datasets instead of directly messing with
+ *              the istore routines, etc. since the new raw data architecture
+ *              performs hyperslab operations at a higher level than the
+ *              istore routines did and the new istore routines can't handle
+ *              I/O on more than one chunk at a time. QAK - 2003/04/16
+ *
+ *-------------------------------------------------------------------------
+ */
+static hid_t
+new_object(hid_t f, const char *name, int ndims, hsize_t dims[], hsize_t cdims[])
+{
+    hid_t dataset;      /* Dataset ID */
+    hid_t space;        /* Dataspace ID */
+    hid_t dcpl;         /* Dataset creation property list ID */
+
+    /* Create the dataset creation property list */
+    if ((dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR;
+
+    /* Set the chunk dimensions */
+    if(H5Pset_chunk(dcpl, ndims, cdims) < 0) TEST_ERROR;
+
+    /* Create the dataspace */
+    if((space = H5Screate_simple(ndims, dims, NULL))<0) TEST_ERROR;
+
+    /* Create the dataset */
+    if((dataset = H5Dcreate (f, name, TEST_DATATYPE, space, dcpl))<0) TEST_ERROR;
+
+    /* Clean up */
+
+    /* Close property lists */
+    if(H5Pclose(dcpl)<0) TEST_ERROR;
+
+    /* Close dataspace */
+    if(H5Sclose(space)<0) TEST_ERROR;
+
+    return dataset;
+
+error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_create
+ *
+ * Purpose:	Creates a named object that refers to indexed storage of raw
+ *		data.  No raw data is stored.
+ *
+ * Return:	Success:	SUCCEED
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, October 15, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_create(hid_t f, const char *prefix)
+{
+    hid_t       dataset;        /* Dataset ID */
+    hsize_t     dims[H5O_LAYOUT_NDIMS+1]; /* Dimensions of dataset */
+    char        name[256];      /* Dataset name */
+    unsigned    u;              /* Local index variable */
+
+    TESTING("istore create");
+
+    dims[0]=TEST_CHUNK_SIZE;
+    for (u = 1; u <= H5S_MAX_RANK; u++) {
+        /* Initialize the dimension size in this new dimension */
+        dims[u]=TEST_CHUNK_SIZE;
+
+        /* Create chunked dataset of this dimensionality */
+	HDsnprintf(name, sizeof name, "%s_%02u", prefix, u);
+	if ((dataset=new_object(f, name, (int)u, dims, chunk_dims)) < 0)
+	    return FAIL;
+
+        /* Close dataset created */
+        if(H5Dclose(dataset)<0)
+            return FAIL;
+    }
+
+    PASSED();
+    return SUCCEED;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_extend
+ *
+ * Purpose:	Creates an empty object and then writes to it in such a way
+ *		as to always extend the object's domain without creating
+ *		holes and without causing the object to become concave.
+ *
+ * Return:	Success:	SUCCEED
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, October 15, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_extend(hid_t f, const char *prefix,
+	    size_t nx, size_t ny, size_t nz)
+{
+    hid_t               dataset;        /* Dataset ID */
+    hid_t               fspace;         /* Dataset's file dataspace */
+    hid_t               mspace;         /* Dataset's memory dataspace */
+    hsize_t		i, j, k, ctr;
+    int			ndims;
+    uint8_t		*buf = NULL, *check = NULL, *whole = NULL;
+    char		dims[64], s[256], name[256];
+    hsize_t		offset[3];
+    hsize_t		max_corner[3];
+    hsize_t		size[3];
+    hsize_t		whole_size[3];
+    hsize_t		nelmts;
+
+    if (!nz) {
+	if (!ny) {
+	    ndims = 1;
+	    ny = nz = 1;
+	    sprintf(dims, "%lu", (unsigned long) nx);
+	} else {
+	    ndims = 2;
+	    nz = 1;
+	    sprintf(dims, "%lux%lu", (unsigned long) nx, (unsigned long) ny);
+	}
+    } else {
+	ndims = 3;
+	sprintf(dims, "%lux%lux%lu",
+		(unsigned long) nx, (unsigned long) ny, (unsigned long) nz);
+    }
+
+    sprintf(s, "istore extend: %s", dims);
+    TESTING(s);
+    buf = HDmalloc(nx * ny * nz);
+    check = HDmalloc(nx * ny * nz);
+    whole = HDcalloc(1,nx*ny*nz);
+
+    whole_size[0] = nx;
+    whole_size[1] = ny;
+    whole_size[2] = nz;
+    max_corner[0] = 0;
+    max_corner[1] = 0;
+    max_corner[2] = 0;
+
+    /* Build the new empty object */
+    sprintf(name, "%s_%s", prefix, dims);
+    if ((dataset=new_object(f, name, ndims, whole_size, whole_size)) < 0) {
+	fprintf(stderr,"    Cannot create %u-d object `%s'\n", ndims, name);
+	goto error;
+    }
+
+    /* Get dataset's dataspace */
+    if((fspace=H5Dget_space(dataset))<0) TEST_ERROR;
+
+    for (ctr = 0;
+	 H5V_vector_lt_u((unsigned)ndims, max_corner, whole_size);
+	 ctr++) {
+
+	/* Size and location */
+	if (0 == ctr) {
+	    offset[0] = offset[1] = offset[2] = 0;
+	    size[0] = size[1] = size[2] = 1;
+	    nelmts = 1;
+	} else {
+	    for (i=0, nelmts=1; i<(size_t)ndims; i++) {
+		if (ctr % ndims == i) {
+		    offset[i] = max_corner[i];
+		    size[i] = MIN(1, whole_size[i] - offset[i]);
+		} else {
+		    offset[i] = 0;
+		    size[i] = max_corner[i];
+		}
+		nelmts *= size[i];
+	    }
+	}
+
+#if 0
+	if (0 == ctr)
+	    fprintf(stderr,"\n");
+	fprintf(stderr,"    Insert: ctr=%lu, corner=(%ld", (unsigned long)ctr, (long)offset[0]);
+	if (ndims > 1)
+	    fprintf(stderr,",%ld", (long)offset[1]);
+	if (ndims > 2)
+	    fprintf(stderr,",%ld", (long)offset[2]);
+	fprintf(stderr,"), size=(%lu", (unsigned long)size[0]);
+	if (ndims > 1)
+	    fprintf(stderr,",%lu", (unsigned long)size[1]);
+	if (ndims > 2)
+	    fprintf(stderr,",%lu", (unsigned long)size[2]);
+	fprintf(stderr,"), %lu element%s", (unsigned long)nelmts, 1 == nelmts ? "" : "s");
+	if (0 == nelmts)
+	    fprintf(stderr," *SKIPPED*");
+	fprintf(stderr,"\n");
+#endif
+
+	/* Fill the source array */
+	if (0 == nelmts) continue;
+	HDmemset(buf, (signed)(128+ctr), (size_t)nelmts);
+
+        /* Create dataspace for selection in memory */
+        if((mspace=H5Screate_simple(1,&nelmts,NULL))<0) TEST_ERROR;
+
+        /* Select region in file dataspace */
+        if(H5Sselect_hyperslab(fspace,H5S_SELECT_SET,offset,NULL,size,NULL)<0) TEST_ERROR;
+
+	/* Write to disk */
+	if (H5Dwrite(dataset, TEST_DATATYPE, mspace, fspace, H5P_DEFAULT, buf)<0) {
+	    H5_FAILED();
+	    fprintf(stderr,"    Write failed: ctr=%lu\n", (unsigned long)ctr);
+	    goto error;
+	}
+
+	/* Read from disk */
+	HDmemset(check, 0xff, (size_t)nelmts);
+	if (H5Dread(dataset, TEST_DATATYPE, mspace, fspace, H5P_DEFAULT, check)<0) {
+	    H5_FAILED();
+	    fprintf(stderr,"    Read failed: ctr=%lu\n", (unsigned long)ctr);
+	    goto error;
+	}
+	if (HDmemcmp(buf, check, (size_t)nelmts)) {
+	    H5_FAILED();
+	    fprintf(stderr,"    Read check failed: ctr=%lu\n", (unsigned long)ctr);
+	    fprintf(stderr,"    Wrote:\n");
+	    print_array(buf, (size_t)size[0], (size_t)size[1],
+			(size_t)size[2]);
+	    fprintf(stderr,"    Read:\n");
+	    print_array(check, (size_t)size[0], (size_t)size[1],
+			(size_t)size[2]);
+	    goto error;
+	}
+
+        /* Close memory dataspace */
+        if(H5Sclose(mspace)<0) TEST_ERROR;
+
+	/* Write to `whole' buffer for later checking */
+	H5V_hyper_copy((unsigned)ndims, size,
+		       whole_size, offset, whole,	/*dst*/
+		       size, H5V_ZERO, buf);		/*src*/
+
+	/* Update max corner */
+	for (i=0; i<(size_t)ndims; i++)
+	    max_corner[i] = MAX(max_corner[i], offset[i]+size[i]);
+    }
+
+    /* Now read the entire array back out and check it */
+    HDmemset(buf, 0xff, nx * ny * nz);
+    if (H5Dread(dataset, TEST_DATATYPE, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf)<0) {
+	H5_FAILED();
+	fprintf(stderr,"    Read failed for whole array.\n");
+	goto error;
+    }
+    for (i=0; i<nx; i++) {
+	for (j=0; j<ny; j++) {
+	    for (k=0; k<nz; k++) {
+		if (whole[i*ny*nz + j*nz + k] != buf[i*ny*nz + j*nz + k]) {
+		    H5_FAILED();
+		    fprintf(stderr,"    Check failed at i=%lu", (unsigned long)i);
+		    if (ndims > 1) {
+			fprintf(stderr,", j=%lu", (unsigned long)j);
+		    }
+		    if (ndims > 2) {
+			fprintf(stderr,", k=%lu", (unsigned long)k);
+		    }
+		    fprintf(stderr,"\n    Check array is:\n");
+		    print_array(whole, nx, ny, nz);
+		    fprintf(stderr,"    Value read is:\n");
+		    print_array(buf, nx, ny, nz);
+		    goto error;
+		}
+	    }
+	}
+    }
+
+    /* Close dataset's dataspace */
+    if(H5Sclose(fspace)<0) TEST_ERROR;
+
+    /* Close dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Free memory used */
+    HDfree(buf);
+    HDfree(check);
+    HDfree(whole);
+
+    PASSED();
+    return SUCCEED;
+
+error:
+    HDfree(buf);
+    HDfree(check);
+    HDfree(whole);
+    return FAIL;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_sparse
+ *
+ * Purpose:	Creates a sparse matrix consisting of NBLOCKS randomly placed
+ *		blocks each of size NX,NY,NZ.
+ *
+ * Return:	Success:	SUCCEED
+ *
+ *		Failure:	FAIL
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, October 22, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_sparse(hid_t f, const char *prefix, size_t nblocks,
+	    size_t nx, size_t ny, size_t nz)
+{
+    hid_t               dataset;        /* Dataset ID */
+    hid_t               fspace;         /* Dataset's file dataspace */
+    hid_t               mspace;         /* Dataset's memory dataspace */
+    int			ndims;
+    hsize_t		ctr;
+    char		dims[64], s[256], name[256];
+    hsize_t		offset[3];
+    hsize_t		size[3], total = 0;
+    uint8_t		*buf = NULL;
+    hsize_t		whole_size[3];  /* Size of dataset's dataspace */
+    size_t              u;              /* Local index variable */
+
+    if (!nz) {
+	if (!ny) {
+	    ndims = 1;
+	    ny = nz = 1;
+	    sprintf(dims, "%lu", (unsigned long) nx);
+	} else {
+	    ndims = 2;
+	    nz = 1;
+	    sprintf(dims, "%lux%lu", (unsigned long) nx, (unsigned long) ny);
+	}
+    } else {
+	ndims = 3;
+	sprintf(dims, "%lux%lux%lu",
+		(unsigned long) nx, (unsigned long) ny, (unsigned long) nz);
+    }
+
+    sprintf(s, "istore sparse: %s", dims);
+    TESTING(s);
+    buf = HDmalloc(nx * ny * nz);
+    HDmemset(buf, 128, nx * ny * nz);
+
+    /* Set dimensions of dataset */
+    for (u=0; u<(size_t)ndims; u++)
+        whole_size[u]=TEST_SPARSE_SIZE;
+
+    /* Set dimensions of selection */
+    size[0] = nx;
+    size[1] = ny;
+    size[2] = nz;
+
+    /* Build the new empty object */
+    sprintf(name, "%s_%s", prefix, dims);
+    if ((dataset=new_object(f, name, ndims, whole_size, chunk_dims)) < 0) {
+	printf("    Cannot create %u-d object `%s'\n", ndims, name);
+	goto error;
+    }
+
+    /* Get dataset's dataspace */
+    if((fspace=H5Dget_space(dataset))<0) TEST_ERROR;
+
+    /* Create dataspace for memory buffer */
+    if((mspace=H5Screate_simple(ndims,size,NULL))<0) TEST_ERROR;
+
+    for (ctr=0; ctr<nblocks; ctr++) {
+	offset[0] = (hsize_t)(HDrandom() % (TEST_SPARSE_SIZE-nx));
+	offset[1] = (hsize_t)(HDrandom() % (TEST_SPARSE_SIZE-ny));
+	offset[2] = (hsize_t)(HDrandom() % (TEST_SPARSE_SIZE-nz));
+
+        /* Select region in file dataspace */
+        if(H5Sselect_hyperslab(fspace,H5S_SELECT_SET,offset,NULL,size,NULL)<0) TEST_ERROR;
+
+	/* write to disk */
+	if (H5Dwrite(dataset, TEST_DATATYPE, mspace, fspace, H5P_DEFAULT, buf)<0) {
+	    H5_FAILED();
+	    printf("    Write failed: ctr=%lu\n", (unsigned long)ctr);
+	    printf("    offset=(%lu", (unsigned long) (offset[0]));
+	    if (ndims > 1)
+		printf(",%lu", (unsigned long) (offset[1]));
+	    if (ndims > 2)
+		printf(",%lu", (unsigned long) (offset[2]));
+	    printf("), size=(%lu", (unsigned long) (size[0]));
+	    if (ndims > 1)
+		printf(",%lu", (unsigned long) (size[1]));
+	    if (ndims > 2)
+		printf(",%lu", (unsigned long) (size[2]));
+	    printf(")\n");
+	    goto error;
+	}
+	total += nx * ny * nz;
+#if 0
+	HDfprintf(stderr,"ctr: ctr=%Zu, total=%Zu\n", ctr, total);
+#endif
+
+	/* We don't test reading yet.... */
+    }
+
+    /* Close memory dataspace */
+    if(H5Sclose(mspace)<0) TEST_ERROR;
+
+    /* Close dataset's dataspace */
+    if(H5Sclose(fspace)<0) TEST_ERROR;
+
+    /* Close dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    HDfree(buf);
+    PASSED();
+    return SUCCEED;
+
+error:
+    HDfree(buf);
+    return FAIL;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Tests indexed storage stuff.
+ *
+ * Return:	Success:	exit(0)
+ *
+ *		Failure:	exit(non-zero)
+ *
+ * Programmer:	Robb Matzke
+ *		Wednesday, October 15, 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(int argc, char *argv[])
+{
+    hid_t		fapl=-1, file=-1, fcpl=-1;
+    herr_t		status;
+    int			nerrors = 0;
+    unsigned		size_of_test;
+    unsigned            u;              /* Local index variable */
+    char		filename[1024];
+
+    /* Parse arguments or assume these tests (`small', `medium' ) */
+    if (1 == argc) {
+	size_of_test = TEST_SMALL;
+    } else {
+	int			i;
+	for (i = 1, size_of_test = 0; i < argc; i++) {
+	    if (!strcmp(argv[i], "small")) {
+		size_of_test |= TEST_SMALL;
+	    } else if (!strcmp(argv[i], "medium")) {
+		size_of_test |= TEST_MEDIUM;
+	    } else if (!strcmp(argv[i], "large")) {
+		size_of_test |= TEST_LARGE;
+	    } else {
+		printf("unrecognized argument: %s\n", argv[i]);
+#if 0
+		exit(1);
+#endif
+	    }
+	}
+    }
+    printf("Test sizes: ");
+    if (size_of_test & TEST_SMALL)
+	printf(" SMALL");
+    if (size_of_test & TEST_MEDIUM)
+	printf(" MEDIUM");
+    if (size_of_test & TEST_LARGE)
+	printf(" LARGE");
+    printf("\n");
+
+    /* Set the random # seed */
+    HDsrandom((unsigned long)HDtime(NULL));
+
+    /* Reset library */
+    h5_reset();
+    fapl = h5_fileaccess();
+
+    /* Use larger file addresses... */
+    fcpl = H5Pcreate(H5P_FILE_CREATE);
+    H5Pset_sizes(fcpl, 8, 0);
+
+    /* Create the test file */
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl))<0) {
+	printf("Cannot create file %s; test aborted\n", filename);
+	exit(1);
+    }
+
+    /*
+     * For testing file families, fool the library into thinking it already
+     * allocated a whole bunch of data.
+     */
+    if (H5FD_FAMILY==H5Pget_driver(fapl)) {
+	haddr_t addr;
+        H5F_t		*f;
+
+	addr = 8 * ((uint64_t)1<<30);	/*8 GB */
+	f=H5I_object(file);
+	if (H5FDset_eoa(f->shared->lf, addr)<0) {
+	    printf("Cannot create large file family\n");
+	    exit(1);
+	}
+    }
+
+    /* Initialize chunk dimensions */
+    for (u = 0; u < H5O_LAYOUT_NDIMS; u++)
+        chunk_dims[u]=TEST_CHUNK_SIZE;
+
+    /*
+     * Creation test: Creates empty objects with various raw data sizes
+     * and alignments.
+     */
+    status = test_create(file, "create");
+    nerrors += status < 0 ? 1 : 0;
+
+    if (size_of_test & TEST_SMALL) {
+	status = test_extend(file, "extend", 10, 0, 0);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_extend(file, "extend", 10, 10, 0);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_extend(file, "extend", 10, 10, 10);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    if (size_of_test & TEST_MEDIUM) {
+	status = test_extend(file, "extend", 10000, 0, 0);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_extend(file, "extend", 2500, 10, 0);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_extend(file, "extend", 10, 400, 10);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    if (size_of_test & TEST_SMALL) {
+	status = test_sparse(file, "sparse", 100, 5, 0, 0);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_sparse(file, "sparse", 100, 3, 4, 0);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_sparse(file, "sparse", 100, 2, 3, 4);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    if (size_of_test & TEST_MEDIUM) {
+	status = test_sparse(file, "sparse", 1000, 30, 0, 0);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_sparse(file, "sparse", 2000, 7, 3, 0);
+	nerrors += status < 0 ? 1 : 0;
+	status = test_sparse(file, "sparse", 2000, 4, 2, 3);
+	nerrors += status < 0 ? 1 : 0;
+    }
+    if (size_of_test & TEST_LARGE) {
+	status = test_sparse(file, "sparse", 800, 50, 50, 50);
+	nerrors += status < 0 ? 1 : 0;
+    }
+
+    /* Close the test file and exit */
+    H5Pclose(fcpl);
+    H5Fclose(file);
+
+    if (nerrors) {
+	printf("***** %d I-STORE TEST%s FAILED! *****\n",
+	       nerrors, 1 == nerrors ? "" : "S");
+	exit(1);
+    }
+
+    printf("All i-store tests passed.\n");
+    h5_cleanup(FILENAME, fapl);
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/test/lheap.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/lheap.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/lheap.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,158 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Tuesday, November 24, 1998
+ *
+ * Purpose:	Test local heaps used by symbol tables (groups).
+ */
+#include "h5test.h"
+#include "H5HLprivate.h"
+#include "H5Iprivate.h"
+
+const char *FILENAME[] = {
+    "lheap",
+    NULL
+};
+
+#define NOBJS   40
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Create a file, create a local heap, write data into the local
+ *		heap, close the file, open the file, read data out of the
+ *		local heap, close the file.
+ *
+ * Return:	Success:	zero
+ *
+ *		Failure:	non-zero
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, November 24, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    hid_t	fapl=H5P_DEFAULT;	/*file access properties	*/
+    hid_t	file=-1;		/*hdf5 file 			*/
+    H5F_t	*f=NULL;		/*hdf5 file pointer		*/
+    char	filename[1024];		/*file name			*/
+    haddr_t	heap_addr;		/*local heap address		*/
+    size_t	obj[NOBJS];		/*offsets within the heap	*/
+    int		i, j;			/*miscellaneous counters	*/
+    char	buf[1024];		/*the value to store		*/
+    const char	*s;			/*value to read			*/
+
+    /* Reset library */
+    h5_reset();
+    fapl = h5_fileaccess();
+
+    /*
+     * Test writing to the heap...
+     */
+    TESTING("local heap write");
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	goto error;
+    if (NULL==(f=H5I_object(file))) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (H5HL_create(f, H5P_DATASET_XFER_DEFAULT, 0, &heap_addr/*out*/)<0) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    for (i = 0; i < NOBJS; i++) {
+        sprintf(buf, "%03d-", i);
+        for (j=4; j<i; j++) buf[j] = '0' + j%10;
+        if (j>4) buf[j] = '\0';
+
+        if ((size_t)(-1)==(obj[i]=H5HL_insert(f, H5P_DATASET_XFER_DEFAULT, heap_addr, strlen(buf)+1,
+					      buf))) {
+	    H5_FAILED();
+	    H5Eprint(stdout);
+	    goto error;
+	}
+    }
+    if (H5Fclose(file)<0) goto error;
+    PASSED();
+
+    /*
+     * Test reading from the heap...
+     */
+
+    TESTING("local heap read");
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) goto error;
+    if (NULL==(f=H5I_object(file))) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    for (i=0; i<NOBJS; i++) {
+        const H5HL_t *heap = NULL;
+
+	sprintf(buf, "%03d-", i);
+        for (j=4; j<i; j++) buf[j] = '0' + j%10;
+        if (j>4) buf[j] = '\0';
+
+        if (NULL == (heap = H5HL_protect(f, H5P_DATASET_XFER_DEFAULT, heap_addr))) {
+	    H5_FAILED();
+	    H5Eprint(stdout);
+	    goto error;
+	}
+
+        if (NULL == (s = H5HL_offset_into(f, heap, obj[i]))) {
+	    H5_FAILED();
+	H5Eprint(stdout);
+	    goto error;
+	}
+
+	if (strcmp(s, buf)) {
+	    H5_FAILED();
+	    printf("    i=%d, heap offset=%lu\n", i, (unsigned long)(obj[i]));
+	    printf("    got: \"%s\"\n", s);
+	    printf("    ans: \"%s\"\n", buf);
+	    goto error;
+	}
+
+        if (H5HL_unprotect(f, H5P_DATASET_XFER_DEFAULT, heap, heap_addr) < 0) {
+	    H5_FAILED();
+	    H5Eprint(stdout);
+	    goto error;
+	}
+    }
+    if (H5Fclose(file)<0) goto error;
+    PASSED();
+
+    puts("All local heap tests passed.");
+    h5_cleanup(FILENAME, fapl);
+    return 0;
+
+ error:
+    puts("*** TESTS FAILED ***");
+    H5E_BEGIN_TRY {
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/test/links.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/links.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/links.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,719 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Friday, April 10, 1998
+ *
+ * Purpose:	Tests hard and soft (symbolic) links.
+ */
+#include "h5test.h"
+#include "H5Gprivate.h"		/* Groups				*/
+
+const char *FILENAME[] = {
+    "links1",
+    "links2",
+    "links3",
+    NULL
+};
+
+#define LINK_BUF_SIZE   1024
+#define NAME_BUF_SIZE   1024
+#define MAX_NAME_LEN    ((64*1024)+1024)
+
+
+/*-------------------------------------------------------------------------
+ * Function:	mklinks
+ *
+ * Purpose:	Build a file with assorted links.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, August 14, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+mklinks(hid_t fapl)
+{
+    hid_t		file, scalar, grp, d1;
+    hsize_t	        size[1] = {1};
+    char		filename[NAME_BUF_SIZE];
+
+    TESTING("link creation");
+
+    /* Create a file */
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) {
+	goto error;
+    }
+    if ((scalar=H5Screate_simple (1, size, size))<0) goto error;
+
+    /* Create a group */
+    if ((grp=H5Gcreate (file, "grp1", (size_t)0))<0) goto error;
+    if (H5Gclose (grp)<0) goto error;
+
+    /* Create a dataset */
+    if ((d1=H5Dcreate (file, "d1", H5T_NATIVE_INT, scalar, H5P_DEFAULT))<0) {
+	goto error;
+    }
+    if (H5Dclose (d1)<0) goto error;
+
+    /* Create a hard link */
+    if (H5Glink (file, H5G_LINK_HARD, "d1", "grp1/hard")<0) goto error;
+
+    /* Create a symbolic link */
+    if (H5Glink (file, H5G_LINK_SOFT, "/d1", "grp1/soft")<0) goto error;
+
+    /* Create a symbolic link to something that doesn't exist */
+    if (H5Glink (file, H5G_LINK_SOFT, "foobar", "grp1/dangle")<0) goto error;
+
+    /* Create a recursive symbolic link */
+    if (H5Glink (file, H5G_LINK_SOFT, "/grp1/recursive",
+		 "/grp1/recursive")<0) {
+	goto error;
+    }
+
+    /* Close */
+    if (H5Sclose (scalar)<0) goto error;
+    if (H5Fclose (file)<0) goto error;
+
+    PASSED();
+    return 0;
+
+ error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    new_links
+ *
+ * Purpose:     Build a file with assorted links for different locations.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        -1
+ *
+ * Programmer:  Raymond Lu
+ *              Friday, April 19, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+new_links(hid_t fapl)
+{
+    hid_t		file_a, file_b=(-1);
+    hid_t		grp1_a=(-1), grp1_b=(-1), grp2_a=(-1), grp2_b=(-1);
+    hid_t		scalar=(-1);
+    hid_t		dset1=(-1), dset2=(-1);
+    char		filename[NAME_BUF_SIZE];
+    hsize_t             size[1] = {1};
+
+    TESTING("H5Glink2 function");
+
+    /* Create two files */
+    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+    if ((file_a=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) {
+        goto error;
+    }
+    h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
+    if ((file_b=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) {
+        goto error;
+    }
+    if ((scalar=H5Screate_simple (1, size, size))<0) goto error;
+
+    /* Create two groups in each file */
+    if ((grp1_a=H5Gcreate (file_a, "grp1", (size_t)0))<0) goto error;
+    if ((grp2_a=H5Gcreate (file_a, "grp2", (size_t)0))<0) goto error;
+    if ((grp1_b=H5Gcreate (file_b, "grp1", (size_t)0))<0) goto error;
+    if ((grp2_b=H5Gcreate (file_b, "grp2", (size_t)0))<0) goto error;
+
+    /* Create datasets */
+    if((dset1=H5Dcreate(file_a, "dataset1", H5T_NATIVE_INT, scalar,
+	H5P_DEFAULT))<0) {
+	goto error;
+    }
+    if((dset2=H5Dcreate(grp1_a, "dataset2", H5T_NATIVE_INT, scalar,
+        H5P_DEFAULT))<0) {
+        goto error;
+    }
+
+    /* Create links within a file.  Both of source and destination use
+     * H5G_SAME_LOC.  Both hard and soft links should fail. */
+    H5E_BEGIN_TRY {
+        if(H5Glink2(H5G_SAME_LOC, "dataset1", H5G_LINK_HARD , H5G_SAME_LOC,
+		"hard")!=FAIL) goto error;
+    } H5E_END_TRY;
+    H5E_BEGIN_TRY {
+        if(H5Glink2(H5G_SAME_LOC, "dataset1", H5G_LINK_SOFT , H5G_SAME_LOC,
+        	"soft")!=FAIL) goto error;
+    } H5E_END_TRY;
+
+    /* Create links across files.  Both hard and soft links should fail. */
+    H5E_BEGIN_TRY {
+        if(H5Glink2(file_a, "dataset1", H5G_LINK_HARD , file_b,
+        	"hard")!=FAIL) goto error;
+    } H5E_END_TRY;
+    H5E_BEGIN_TRY {
+        if(H5Glink2(file_a, "dataset1", H5G_LINK_SOFT, file_b, "soft")!=FAIL)
+            goto error;
+    } H5E_END_TRY;
+
+    /* Create links to test H5G_SAME_LOC, H5G_LINK_HARD, H5G_LINK_SOFT. */
+    if(H5Glink2(grp1_a, "dataset2", H5G_LINK_HARD , H5G_SAME_LOC,
+        "hard1")<0) {
+        goto error;
+    }
+    if(H5Glink2(H5G_SAME_LOC, "dataset2", H5G_LINK_SOFT , grp1_a,
+	"soft1")<0) {
+        goto error;
+    }
+
+    /* Create links to test H5G_LINK_HARD, H5G_LINK_SOFT across different
+     * locations. */
+    if(H5Glink2(grp1_a, "dataset2", H5G_LINK_HARD, grp2_a, "hard2")<0) {
+        goto error;
+    }
+    if(H5Glink2(grp1_a, "/grp1/dataset2", H5G_LINK_SOFT , grp2_a, "soft2")<0) {
+        goto error;
+    }
+
+    /* Close dataspace and files */
+    if (H5Sclose (scalar)<0) goto error;
+    if (H5Dclose(dset1)<0) goto error;
+    if (H5Dclose(dset2)<0) goto error;
+    if (H5Gclose (grp1_a)<0) goto error;
+    if (H5Gclose (grp2_a)<0) goto error;
+    if (H5Gclose (grp1_b)<0) goto error;
+    if (H5Gclose (grp2_b)<0) goto error;
+    if (H5Fclose (file_a)<0) goto error;
+    if (H5Fclose (file_b)<0) goto error;
+
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+    	H5Sclose (scalar);
+    	H5Dclose (dset1);
+    	H5Dclose (dset2);
+    	H5Gclose (grp1_a);
+    	H5Gclose (grp2_a);
+    	H5Gclose (grp1_b);
+    	H5Gclose (grp2_b);
+    	H5Fclose (file_a);
+    	H5Fclose (file_b);
+    } H5E_END_TRY;
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cklinks
+ *
+ * Purpose:	Open the file created in the first step and check that the
+ *		links look correct.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, August 14, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+cklinks(hid_t fapl)
+{
+    hid_t		file;
+    H5G_stat_t		sb1, sb2;
+    char		linkval[LINK_BUF_SIZE];
+    char		filename[NAME_BUF_SIZE];
+    herr_t		status;
+
+    TESTING("link queries");
+
+    /* Open the file */
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) {
+	goto error;
+    }
+
+    /* Hard link */
+    if (H5Gget_objinfo(file, "d1", TRUE, &sb1)<0) goto error;
+    if (H5Gget_objinfo(file, "grp1/hard", TRUE, &sb2)<0) goto error;
+    if (H5G_DATASET!=sb2.type) {
+	H5_FAILED();
+	puts("    Unexpected object type should have been a dataset");
+	goto error;
+    }
+    if (sb1.objno[0]!=sb2.objno[0] || sb1.objno[1]!=sb2.objno[1]) {
+	H5_FAILED();
+	puts("    Hard link test failed. Link seems not to point to the ");
+	puts("    expected file location.");
+	goto error;
+    }
+
+    /* Symbolic link */
+    if (H5Gget_objinfo(file, "grp1/soft", TRUE, &sb2)<0) goto error;
+    if (H5G_DATASET!=sb2.type) {
+	H5_FAILED();
+	puts("    Unexpected object type should have been a dataset");
+	goto error;
+    }
+    if (sb1.objno[0]!=sb2.objno[0] || sb1.objno[1]!=sb2.objno[1]) {
+	H5_FAILED();
+	puts("    Soft link test failed. Link seems not to point to the ");
+	puts("    expected file location.");
+	goto error;
+    }
+    if (H5Gget_linkval(file, "grp1/soft", sizeof linkval, linkval)<0) {
+	goto error;
+    }
+    if (HDstrcmp(linkval, "/d1")) {
+	H5_FAILED();
+	puts("    Soft link test failed. Wrong link value");
+	goto error;
+    }
+
+    /* Dangling link */
+    H5E_BEGIN_TRY {
+	status = H5Gget_objinfo(file, "grp1/dangle", TRUE, &sb2);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	puts("    H5Gget_objinfo() should have failed for a dangling link.");
+	goto error;
+    }
+    if (H5Gget_objinfo(file, "grp1/dangle", FALSE, &sb2)<0) goto error;
+    if (H5G_LINK!=sb2.type) {
+	H5_FAILED();
+	puts("    Unexpected object type should have been a symbolic link");
+	goto error;
+    }
+    if (H5Gget_linkval(file, "grp1/dangle", sizeof linkval, linkval)<0) {
+	goto error;
+    }
+    if (HDstrcmp(linkval, "foobar")) {
+	H5_FAILED();
+	puts("    Dangling link test failed. Wrong link value");
+	goto error;
+    }
+
+    /* Recursive link */
+    H5E_BEGIN_TRY {
+	status = H5Gget_objinfo(file, "grp1/recursive", TRUE, &sb2);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	puts("    H5Gget_objinfo() should have failed for a recursive link.");
+	goto error;
+    }
+    if (H5Gget_objinfo(file, "grp1/recursive", FALSE, &sb2)<0) goto error;
+    if (H5G_LINK!=sb2.type) {
+	H5_FAILED();
+	puts("    Unexpected object type should have been a symbolic link");
+	goto error;
+    }
+    if (H5Gget_linkval(file, "grp1/recursive", sizeof linkval, linkval)<0) {
+	goto error;
+    }
+    if (HDstrcmp(linkval, "/grp1/recursive")) {
+	H5_FAILED();
+	puts("   Recursive link test failed. Wrong link value");
+	goto error;
+    }
+
+    /* Cleanup */
+    if (H5Fclose(file)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    ck_new_links
+ *
+ * Purpose:     Open the file created in the first step and check that the
+ *              links look correct.
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        -1
+ *
+ * Programmer:  Raymond Lu
+ *              Thursday, April 25, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+ck_new_links(hid_t fapl)
+{
+    hid_t 		file;
+    H5G_stat_t		sb_dset, sb_hard1, sb_hard2, sb_soft1, sb_soft2;
+    char 		filename[NAME_BUF_SIZE];
+    char 		linkval[LINK_BUF_SIZE];
+
+    TESTING("new link queries");
+
+    /* Open the file */
+    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+    if ((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) {
+        goto error;
+    }
+
+    /* Get hard link info */
+    if(H5Gget_objinfo(file, "/grp1/dataset2", TRUE, &sb_dset)<0)
+	goto error;
+    if(H5Gget_objinfo(file, "/grp1/hard1", TRUE, &sb_hard1)<0)
+	goto error;
+    if(H5Gget_objinfo(file, "/grp2/hard2", TRUE, &sb_hard2)<0)
+	goto error;
+
+    /* Check hard links */
+    if(H5G_DATASET!=sb_hard1.type || H5G_DATASET!=sb_hard2.type) {
+	H5_FAILED();
+	puts("    Unexpected object type, should have been a dataset");
+	goto error;
+    }
+    if( sb_dset.objno[0]!=sb_hard1.objno[0] ||
+        sb_dset.objno[1]!=sb_hard1.objno[1] ||
+        sb_dset.objno[0]!=sb_hard2.objno[0] ||
+        sb_dset.objno[1]!=sb_hard2.objno[1] ) {
+	H5_FAILED();
+	puts("    Hard link test failed.  Link seems not to point to the ");
+	puts("    expected file location.");
+	goto error;
+    }
+
+    /* Get soft link info */
+    if(H5Gget_objinfo(file, "/grp1/soft1", TRUE, &sb_soft1)<0) goto error;
+    if(H5Gget_objinfo(file, "/grp2/soft2", TRUE, &sb_soft2)<0) goto error;
+
+    /* Check soft links */
+    if(H5G_DATASET!=sb_soft1.type || H5G_DATASET!=sb_soft2.type) {
+        H5_FAILED();
+        puts("    Unexpected object type, should have been a dataset");
+        goto error;
+    }
+
+    if( sb_dset.objno[0]!=sb_soft1.objno[0] ||
+        sb_dset.objno[1]!=sb_soft1.objno[1] ||
+        sb_dset.objno[0]!=sb_soft2.objno[0] ||
+        sb_dset.objno[1]!=sb_soft2.objno[1] ) {
+        H5_FAILED();
+        puts("    Soft link test failed.  Link seems not to point to the ");
+        puts("    expected file location.");
+        goto error;
+    }
+
+    if (H5Gget_linkval(file, "grp2/soft2", sizeof linkval, linkval)<0) {
+        goto error;
+    }
+    if (HDstrcmp(linkval, "/grp1/dataset2")) {
+        H5_FAILED();
+        puts("    Soft link test failed. Wrong link value");
+        goto error;
+    }
+
+    /* Cleanup */
+    if(H5Fclose(file)<0) goto error;
+    PASSED();
+    return 0;
+
+  error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    long_links
+ *
+ * Purpose:     Build a file with long names
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        -1
+ *
+ * Programmer:  Quincey Koziol
+ *              Saturday, April 16, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+long_links(hid_t fapl)
+{
+    hid_t		fid = (-1);     /* File ID */
+    hid_t		gid = (-1);     /* Group ID */
+    hid_t		gid2 = (-1);    /* Datatype ID */
+    char               *objname = NULL; /* Name of object [Long] */
+    size_t              u;              /* Local index variable */
+    char		filename[NAME_BUF_SIZE];
+
+    TESTING("long names for objects & links");
+
+    /* Create files */
+    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+    if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create group with short name in file (used as target for hard links) */
+    if((gid=H5Gcreate (fid, "grp1", (size_t)0))<0) TEST_ERROR;
+
+    /* Construct very long file name */
+    if((objname = HDmalloc((size_t)(MAX_NAME_LEN + 1))) == NULL) TEST_ERROR;
+    for(u = 0; u < MAX_NAME_LEN; u++)
+        objname[u] = 'a';
+    objname[MAX_NAME_LEN] = '\0';
+
+    /* Create hard link to existing object */
+    if(H5Glink2(fid, "grp1", H5G_LINK_HARD, fid, objname) < 0) TEST_ERROR;
+
+    /* Create soft link to existing object */
+    objname[0] = 'b';
+    if(H5Glink2(fid, "grp1", H5G_LINK_SOFT, fid, objname) < 0) TEST_ERROR;
+
+    /* Create group with long name in existing group */
+    if((gid2=H5Gcreate(gid, objname, (size_t)0))<0) TEST_ERROR;
+
+    /* Close objects */
+    if(H5Gclose(gid2)<0) TEST_ERROR;
+    if(H5Gclose(gid)<0) TEST_ERROR;
+    if(H5Fclose(fid)<0) TEST_ERROR;
+
+    /* Release memory */
+    HDfree(objname);
+
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+    	H5Gclose (gid2);
+    	H5Gclose (gid);
+    	H5Fclose (fid);
+    } H5E_END_TRY;
+    HDfree(objname);
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    toomany
+ *
+ * Purpose:     Build a file with too many symbolic links
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        -1
+ *
+ * Programmer:  Quincey Koziol
+ *              Tuesday, August 9, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+toomany(hid_t fapl)
+{
+    hid_t		fid = (-1);     /* File ID */
+    hid_t		gid = (-1);     /* Group ID */
+    hid_t		gid2 = (-1);    /* Datatype ID */
+    char                objname[NAME_BUF_SIZE];         /* Object name */
+    ssize_t             name_len;       /* Length of object name */
+    char		filename[NAME_BUF_SIZE]; 
+
+    TESTING("too many links");
+
+    /* Make certain test is valid */
+    /* XXX: should probably make a "generic" test that creates the proper
+     *          # of links based on this value - QAK
+     */
+    HDassert(H5G_NLINKS == 16);
+
+    /* Create files */
+    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+    if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create group with short name in file (used as target for hard links) */
+    if((gid=H5Gcreate (fid, "final", (size_t)0))<0) TEST_ERROR;
+
+    /* Create chain of hard links to existing object (no limit on #) */
+    if(H5Glink2(fid, "final", H5G_LINK_HARD, fid, "hard1") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard1", H5G_LINK_HARD, fid, "hard2") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard2", H5G_LINK_HARD, fid, "hard3") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard3", H5G_LINK_HARD, fid, "hard4") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard4", H5G_LINK_HARD, fid, "hard5") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard5", H5G_LINK_HARD, fid, "hard6") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard6", H5G_LINK_HARD, fid, "hard7") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard7", H5G_LINK_HARD, fid, "hard8") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard8", H5G_LINK_HARD, fid, "hard9") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard9", H5G_LINK_HARD, fid, "hard10") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard10", H5G_LINK_HARD, fid, "hard11") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard11", H5G_LINK_HARD, fid, "hard12") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard12", H5G_LINK_HARD, fid, "hard13") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard13", H5G_LINK_HARD, fid, "hard14") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard14", H5G_LINK_HARD, fid, "hard15") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard15", H5G_LINK_HARD, fid, "hard16") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard16", H5G_LINK_HARD, fid, "hard17") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard17", H5G_LINK_HARD, fid, "hard18") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard18", H5G_LINK_HARD, fid, "hard19") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard19", H5G_LINK_HARD, fid, "hard20") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "hard20", H5G_LINK_HARD, fid, "hard21") < 0) TEST_ERROR;
+
+    /* Create chain of soft links to existing object (limited) */
+    if(H5Glink2(fid, "final", H5G_LINK_SOFT, fid, "soft1") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft1", H5G_LINK_SOFT, fid, "soft2") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft2", H5G_LINK_SOFT, fid, "soft3") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft3", H5G_LINK_SOFT, fid, "soft4") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft4", H5G_LINK_SOFT, fid, "soft5") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft5", H5G_LINK_SOFT, fid, "soft6") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft6", H5G_LINK_SOFT, fid, "soft7") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft7", H5G_LINK_SOFT, fid, "soft8") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft8", H5G_LINK_SOFT, fid, "soft9") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft9", H5G_LINK_SOFT, fid, "soft10") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft10", H5G_LINK_SOFT, fid, "soft11") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft11", H5G_LINK_SOFT, fid, "soft12") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft12", H5G_LINK_SOFT, fid, "soft13") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft13", H5G_LINK_SOFT, fid, "soft14") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft14", H5G_LINK_SOFT, fid, "soft15") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft15", H5G_LINK_SOFT, fid, "soft16") < 0) TEST_ERROR;
+    if(H5Glink2(fid, "soft16", H5G_LINK_SOFT, fid, "soft17") < 0) TEST_ERROR;
+
+    /* Close objects */
+    if(H5Gclose(gid)<0) TEST_ERROR;
+    if(H5Fclose(fid)<0) TEST_ERROR;
+
+    /* Open file */
+    if((fid=H5Fopen(filename, H5F_ACC_RDWR, fapl))<0) TEST_ERROR;
+
+    /* Open object through last hard link */
+    if((gid = H5Gopen(fid, "hard21")) < 0) TEST_ERROR;
+
+    /* Check name */
+    if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR
+    if(HDstrcmp(objname, "/hard21")) TEST_ERROR
+
+    /* Create object in hard-linked group */
+    if((gid2 = H5Gcreate(gid, "new_hard", (size_t)0)) < 0) TEST_ERROR
+
+    /* Close group in hard-linked group */
+    if(H5Gclose(gid2) < 0) TEST_ERROR
+
+    /* Close hard-linked object */
+    if(H5Gclose(gid) < 0) TEST_ERROR;
+
+    /* Open object through too deep soft link */
+    H5E_BEGIN_TRY {
+        gid = H5Gopen(fid, "soft17");
+    } H5E_END_TRY;
+    if (gid >= 0) {
+	H5_FAILED();
+	puts("    Should have failed for sequence of too many nested links.");
+	goto error;
+    }
+
+    /* Open object through lesser soft link */
+    if((gid = H5Gopen(fid, "soft16")) < 0) TEST_ERROR;
+
+    /* Check name */
+    if((name_len = H5Iget_name( gid, objname, (size_t)NAME_BUF_SIZE )) < 0) TEST_ERROR
+    if(HDstrcmp(objname, "/soft16")) TEST_ERROR
+
+    /* Create object in external file */
+    if((gid2 = H5Gcreate(gid, "new_soft", (size_t)0)) < 0) TEST_ERROR
+
+    /* Close group in external file */
+    if(H5Gclose(gid2) < 0) TEST_ERROR
+
+    /* Close external object */
+    if(H5Gclose(gid) < 0) TEST_ERROR;
+
+    /* Close first file */
+    if(H5Fclose(fid)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+    	H5Gclose (gid2);
+    	H5Gclose (gid);
+    	H5Fclose (fid);
+    } H5E_END_TRY;
+    return -1;
+} /* end toomany() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Test links
+ *
+ * Return:	Success:	exit(0)
+ *
+ *		Failure:	exit(non-zero)
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, August 14, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    int		nerrors = 0;
+    hid_t	fapl;
+
+    h5_reset();
+    fapl = h5_fileaccess();
+
+    /* The tests... */
+    nerrors += mklinks(fapl) < 0 ? 1 : 0;
+    nerrors += cklinks(fapl) < 0 ? 1 : 0;
+    nerrors += new_links(fapl) < 0 ? 1 : 0;
+    nerrors += ck_new_links(fapl) < 0 ? 1 : 0;
+    nerrors += long_links(fapl) < 0 ? 1 : 0;
+    nerrors += toomany(fapl) < 0 ? 1 : 0;
+
+    /* Results */
+    if (nerrors) {
+	printf("***** %d LINK TEST%s FAILED! *****\n",
+	       nerrors, 1 == nerrors ? "" : "S");
+	exit(1);
+    }
+    printf("All link tests passed.\n");
+    h5_cleanup(FILENAME, fapl);
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/test/mount.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/mount.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/mount.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3861 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Wednesday, October  7, 1998
+ *
+ * Purpose:	Tests file mounting.
+ */
+#include "h5test.h"
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5Iprivate.h"		/* IDs			  		*/
+
+const char *FILENAME[] = {
+    "mount_1",
+    "mount_2",
+    "mount_3",
+    "mount_4",
+    "mount_5",
+    "mount_6",
+    "mount_7",
+    NULL
+};
+
+/* For "mount_after_close" test */
+#define RANK 2
+#define NX 4
+#define NY 5
+#define NAME_BUF_SIZE   40
+int bm[NX][NY], bm_out[NX][NY]; /* Data buffers */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	setup
+ *
+ * Purpose:	Create some files and populate them with a few groups.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, October  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+setup(hid_t fapl)
+{
+    hid_t	file=-1;
+    char	filename[1024];
+
+    /* file 1 */
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	goto error;
+    if (H5Gclose(H5Gcreate(file, "/mnt1", (size_t)0))<0) goto error;
+    if (H5Gclose(H5Gcreate(file, "/mnt1/file1", (size_t)0))<0) goto error;
+    if (H5Gclose(H5Gcreate(file, "/mnt_unlink", (size_t)0))<0) goto error;
+    if (H5Gclose(H5Gcreate(file, "/mnt_move_a", (size_t)0))<0) goto error;
+    if (H5Glink(file, H5G_LINK_HARD, "/mnt1/file1", "/file1")<0) goto error;
+    if (H5Glink(file, H5G_LINK_HARD, "/mnt1", "/mnt1_link")<0) goto error;
+    if (H5Fclose(file)<0) goto error;
+
+    /* file 2 */
+    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	goto error;
+    if (H5Gclose(H5Gcreate(file, "/file2", (size_t)0))<0) goto error;
+    if (H5Gclose(H5Gcreate(file, "/rename_a", (size_t)0))<0) goto error;
+    if (H5Gclose(H5Gcreate(file, "/rename_b", (size_t)0))<0) goto error;
+    if (H5Gclose(H5Gcreate(file, "/rename_a/x", (size_t)0))<0) goto error;
+    if (H5Fclose(file)<0) goto error;
+
+    /* file 3 */
+    h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	goto error;
+    if (H5Fclose(file)<0) goto error;
+
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_basic
+ *
+ * Purpose:	Mount file1 at file2:/mnt1 and try accessing an object in
+ *		file2.  Then unmount.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, October  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_basic(hid_t fapl)
+{
+    hid_t	file1=-1, file2=-1, grp=-1;
+    char	filename1[1024], filename2[1024];
+
+    TESTING("basic functionality");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    if ((file1 = H5Fopen(filename1, H5F_ACC_RDONLY, fapl)) < 0 ||
+            (file2 = H5Fopen(filename2, H5F_ACC_RDONLY, fapl)) < 0)
+        TEST_ERROR
+    if (H5Fmount(file1, "/mnt1", file2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+    if ((grp = H5Gopen(file1, "/mnt1/file2")) < 0)
+        TEST_ERROR
+    if (H5Gclose(grp) < 0)
+        TEST_ERROR
+    if (H5Funmount(file1, "/mnt1") < 0)
+        TEST_ERROR
+    if (H5Fclose(file1) < 0)
+        TEST_ERROR
+    if (H5Fclose(file2) < 0)
+        TEST_ERROR
+
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Fclose(file1);
+	H5Fclose(file2);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_illegal
+ *
+ * Purpose:	Test things that are illegal to do.  We should get a failure
+ *		from the library for each of them.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, October  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_illegal(hid_t fapl)
+{
+    hid_t	file1=-1, file2=-1, file3=-1, mnt=-1;
+    herr_t	status;
+    char	filename1[1024], filename2[1024], filename3[1024];
+
+    TESTING("illegal mount operations");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+    h5_fixname(FILENAME[2], fapl, filename3, sizeof filename3);
+
+
+    /* Open the files */
+    if ((file1=H5Fopen(filename1, H5F_ACC_RDONLY, fapl))<0 ||
+	(file2=H5Fopen(filename2, H5F_ACC_RDONLY, fapl))<0 ||
+	(file3=H5Fopen(filename3, H5F_ACC_RDONLY, fapl))<0)
+	goto error;
+
+    /* Try mounting a file on itself */
+    H5E_BEGIN_TRY {
+	status = H5Fmount(file1, "/mnt1", file1, H5P_DEFAULT);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	puts("    Mounting a file on itself should have failed.");
+	goto error;
+    }
+
+    /*
+     * Try mounting two files at the same place.  We have to open the mount
+     * point before we mount the first file or we'll end up mounting file3 at
+     * the root of file2 and the mount will succeed.
+     */
+    if ((mnt=H5Gopen(file1, "/mnt1"))<0) goto error;
+    if (H5Fmount(mnt, ".", file2, H5P_DEFAULT)<0) goto error;
+    H5E_BEGIN_TRY {
+	status = H5Fmount(mnt, ".", file3, H5P_DEFAULT);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	puts("    Mounting two files at one mount point should have failed.");
+	goto error;
+    }
+    if (H5Funmount(mnt, ".")<0) goto error;
+    if (H5Gclose(mnt)<0) goto error;
+
+
+    /* Close everything and return */
+    if (H5Fclose(file1)<0) goto error;
+    if (H5Fclose(file2)<0) goto error;
+    if (H5Fclose(file3)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Gclose(mnt);
+	H5Fclose(file1);
+	H5Fclose(file2);
+	H5Fclose(file3);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_hide
+ *
+ * Purpose:	The previous contents of the mount point is temporarily
+ *		hidden. If objects in that group had names from other groups
+ *		then the objects will still be visible by those other names.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, October  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_hide(hid_t fapl)
+{
+    hid_t	file1=-1, file2=-1, grp=-1;
+    H5G_stat_t	sb1, sb2;
+    char	filename1[1024], filename2[1024];
+
+    TESTING("name hiding under mount point");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    if ((file1=H5Fopen(filename1, H5F_ACC_RDONLY, fapl))<0 ||
+	(file2=H5Fopen(filename2, H5F_ACC_RDONLY, fapl))<0)
+	goto error;
+
+    /* Get information about file1:/mnt1/file1 for later */
+    if (H5Gget_objinfo(file1, "/mnt1/file1", TRUE, &sb1)<0) goto error;
+
+    /* Build the virtual file */
+    if (H5Fmount(file1, "/mnt1", file2, H5P_DEFAULT)<0) goto error;
+
+    /* Original names under file1:/mnt1 should not be accessible */
+    H5E_BEGIN_TRY {
+	grp = H5Gopen(file1, "/mnt1/file1");
+    } H5E_END_TRY;
+    if (grp>=0) {
+	H5_FAILED();
+	puts("    Name is still accessible under mount point.");
+	goto error;
+    }
+
+    /*
+     * The original objects under file1:/mnt1 are still accessible by their
+     * other names.  This is a rather stupid test but demonstrates a point.
+     */
+    if (H5Gget_objinfo(file1, "/file1", TRUE, &sb2)<0) goto error;
+    if (sb1.fileno[0]!=sb2.fileno[0] || sb1.fileno[1]!=sb2.fileno[1] ||
+	sb1.objno[0]!=sb2.objno[0] || sb1.objno[1]!=sb2.objno[1]) {
+	H5_FAILED();
+	puts("    Hard link failed for hidden object.");
+	goto error;
+    }
+
+    /* Unmount and close objects */
+    if (H5Funmount(file1, "/mnt1")<0) goto error;
+    H5Fclose(file1);
+    H5Fclose(file2);
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Gclose(grp);
+	H5Fclose(file1);
+	H5Fclose(file2);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_assoc
+ *
+ * Purpose:	Opening the mount point is the same as opening the root group
+ *		of the mounted file before the file was mounted.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, October 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_assoc(hid_t fapl)
+{
+    hid_t	file1=-1, file2=-1;
+    H5G_stat_t	sb1, sb2;
+    char	filename1[1024], filename2[1024];
+
+    TESTING("mount point open");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /* Open the files */
+    if ((file1=H5Fopen(filename1, H5F_ACC_RDONLY, fapl))<0 ||
+	(file2=H5Fopen(filename2, H5F_ACC_RDONLY, fapl))<0)
+	goto error;
+
+    /* Get information about the root of file2 */
+    if (H5Gget_objinfo(file2, "/", TRUE, &sb1)<0) goto error;
+
+    /* Create the virtual file */
+    if (H5Fmount(file1, "/mnt1", file2, H5P_DEFAULT)<0) goto error;
+
+    /*
+     * Get info about the mount point -- should be the same as the root group
+     * of file2.
+     */
+    if (H5Gget_objinfo(file1, "/mnt1", TRUE, &sb2)<0) goto error;
+    if (sb1.fileno[0]!=sb2.fileno[0] || sb1.fileno[1]!=sb2.fileno[1] ||
+	sb1.objno[0]!=sb2.objno[0] || sb1.objno[1]!=sb2.objno[1]) {
+	H5_FAILED();
+	puts("    Association failed.");
+	goto error;
+    }
+
+    /* Shut down */
+    if (H5Funmount(file1, "/mnt1_link")<0) goto error;
+    if (H5Fclose(file1)<0) goto error;
+    if (H5Fclose(file2)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Fclose(file2);
+	H5Fclose(file1);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_mntlnk
+ *
+ * Purpose:	The mount point is actually an OID (not a name) so if there
+ *		are other names for that group then the root group of the
+ *		child will be visible in all those names.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, October  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_mntlnk(hid_t fapl)
+{
+    hid_t	file1=-1, file2=-1, grp=-1;
+    char	filename1[1024], filename2[1024];
+
+    TESTING("multi-linked mount point");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+
+    /* Build the virtual file */
+    if ((file1=H5Fopen(filename1, H5F_ACC_RDONLY, fapl))<0 ||
+	(file2=H5Fopen(filename2, H5F_ACC_RDONLY, fapl))<0)
+	goto error;
+    if (H5Fmount(file1, "/mnt1", file2, H5P_DEFAULT)<0) goto error;
+
+    /*
+     * Can we see file2:/file2 as both file1:/mnt1/file2 and
+     * file1:/mnt1_link/file2?
+     */
+    if ((grp=H5Gopen(file1, "/mnt1/file2"))<0) goto error;
+    if (H5Gclose(grp)<0) goto error;
+    if ((grp=H5Gopen(file1, "/mnt1_link/file2"))<0) goto error;
+    if (H5Gclose(grp)<0) goto error;
+
+    /* Unlink using second name */
+    if (H5Funmount(file1, "/mnt1_link")<0) goto error;
+    if (H5Fclose(file1)<0) goto error;
+    if (H5Fclose(file2)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Gclose(grp);
+	H5Fclose(file1);
+	H5Fclose(file2);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_move
+ *
+ * Purpose:	An object cannot be moved or renamed with H5Gmove() in such a
+ *		way that the new location would be in a different file than
+ *		the original location.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, October  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_move(hid_t fapl)
+{
+    hid_t	file1=-1, file2=-1;
+    herr_t	status;
+    char	filename1[1024], filename2[1024];
+
+    TESTING("object renaming");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /* Build the virtual file */
+    if ((file1=H5Fopen(filename1, H5F_ACC_RDWR, fapl))<0 ||
+	(file2=H5Fopen(filename2, H5F_ACC_RDWR, fapl))<0)
+	goto error;
+    if (H5Fmount(file1, "/mnt1", file2, H5P_DEFAULT)<0) goto error;
+
+    /* First rename an object in the mounted file, then try it across files */
+    if (H5Gmove(file1, "/mnt1/rename_a/x", "/mnt1/rename_b/y")<0) goto error;
+    H5E_BEGIN_TRY {
+	status = H5Gmove(file1, "/mnt1/rename_b/y",  "/y");
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	puts("    Moving an object across files should't have been possible");
+	goto error;
+    }
+
+    /* Shut down */
+    if (H5Funmount(file1, "/mnt1")<0) goto error;
+    if (H5Fclose(file1)<0) goto error;
+    if (H5Fclose(file2)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Fclose(file1);
+	H5Fclose(file2);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_preopen
+ *
+ * Purpose:	Objects that are opened under the mount point before the
+ *		child is mounted will remain accessible.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, October  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_preopen(hid_t fapl)
+{
+    hid_t	file1=-1, file2=-1, grp=-1;
+    char	filename1[1024], filename2[1024];
+
+    TESTING("preopening objects under the mount point");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    if ((file1=H5Fopen(filename1, H5F_ACC_RDONLY, fapl))<0 ||
+	(file2=H5Fopen(filename2, H5F_ACC_RDONLY, fapl))<0)
+	goto error;
+
+    /* Open something under the mount point */
+    if ((grp=H5Gopen(file1, "/mnt1/file1"))<0) goto error;
+
+    /* Build the virtual file */
+    if (H5Fmount(file1, "/mnt1", file2, H5P_DEFAULT)<0) goto error;
+
+    /* Now access the thing we previously opened */
+    if (H5Gget_objinfo(grp, ".", TRUE, NULL)<0) goto error;
+
+    /* Shut down */
+    if (H5Funmount(file1, "/mnt1")<0) goto error;
+    if (H5Gclose(grp)<0) goto error;
+    if (H5Fclose(file1)<0) goto error;
+    if (H5Fclose(file2)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Gclose(grp);
+	H5Fclose(file2);
+	H5Fclose(file1);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_postopen
+ *
+ * Purpose:	Objects that are open in a mounted file remain accessible
+ *		after the file is unmounted.  Unmounting the file doesn't
+ *		close the file.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, October 14, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_postopen(hid_t fapl)
+{
+
+    hid_t	file1=-1, file2=-1, grp=-1;
+    char	filename1[1024], filename2[1024];
+
+    TESTING("open object access after unmount");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /* Create the virtual file */
+    if ((file1=H5Fopen(filename1, H5F_ACC_RDONLY, fapl))<0 ||
+	(file2=H5Fopen(filename2, H5F_ACC_RDONLY, fapl))<0)
+	goto error;
+    if (H5Fmount(file1, "/mnt1", file2, H5P_DEFAULT)<0) goto error;
+
+    /* Open some object in the mounted file */
+    if ((grp=H5Gopen(file1, "/mnt1/file2"))<0) goto error;
+
+    /* Unmount the file */
+    if (H5Funmount(file1, "/mnt1")<0) goto error;
+
+    /* Now access the thing we previously opened */
+    if (H5Gget_objinfo(grp, ".", TRUE, NULL)<0) goto error;
+
+    /* Try accessing it from the file */
+    if (H5Gget_objinfo(file2, "/file2", TRUE, NULL)<0) goto error;
+
+    /* Shut down */
+    if (H5Gclose(grp)<0) goto error;
+    if (H5Fclose(file1)<0) goto error;
+    if (H5Fclose(file2)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Gclose(grp);
+	H5Fclose(file2);
+	H5Fclose(file1);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_unlink
+ *
+ * Purpose:	Unlinking the mount point from its name doesn't affect its
+ *		existence or the fact that there is a file that is mounted
+ *		there.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, October 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_unlink(hid_t fapl)
+{
+    hid_t	file1=-1, file2=-1, mnt=-1, root=-1;
+    herr_t	status;
+    char	filename1[1024], filename2[1024];
+
+    TESTING("mount point unlinking");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /* Open files */
+    if ((file1=H5Fopen(filename1, H5F_ACC_RDWR, fapl))<0 ||
+	(file2=H5Fopen(filename2, H5F_ACC_RDWR, fapl))<0)
+	goto error;
+
+    /*
+     * Opening the mount point before mounting opens the group in the parent
+     * file, but opening the mount point after mounting is the same as
+     * opening the root group of the child file.
+     */
+    if ((mnt=H5Gopen(file1, "/mnt_unlink"))<0) goto error;
+    if (H5Fmount(file1, "/mnt_unlink", file2, H5P_DEFAULT)<0) goto error;
+    if ((root=H5Gopen(file1, "/mnt_unlink"))<0) goto error;
+
+    /*
+     * "/file2" of file2 should be visible as an absolute name through either
+     * file handle but not from the `mnt' handle since that handle was opened
+     * before the H5Fmount() and thus refers to the mount point itself rather
+     * than the group mounted there.
+     */
+    if (H5Gget_objinfo(file1, "/mnt_unlink/file2", TRUE, NULL)<0) goto error;
+    if (H5Gget_objinfo(mnt, "/mnt_unlink/file2", TRUE, NULL)<0) goto error;
+    if (H5Gget_objinfo(root, "/mnt_unlink/file2", TRUE, NULL)<0) goto error;
+    if (H5Gget_objinfo(root, "file2", TRUE, NULL)<0) goto error;
+    H5E_BEGIN_TRY {
+	status = H5Gget_objinfo(mnt, "file2", TRUE, NULL);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	puts("    Incorrect traversal from mount point!");
+	goto error;
+    }
+
+    /* Unlink the mount point */
+    if (H5Gunlink(file1, "/mnt_unlink")<0) goto error;
+
+    /*
+     * We should still be able to get to "/file2" of file2 by starting at
+     * `root' which is still open, but not by name.
+     */
+    if (H5Gget_objinfo(root, "file2", TRUE, NULL)<0) goto error;
+    H5E_BEGIN_TRY {
+	status = H5Gget_objinfo(mnt, "file2", TRUE, NULL);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	puts("    Traversal through mount point should not have worked!");
+	goto error;
+    }
+    H5E_BEGIN_TRY {
+	status = H5Gget_objinfo(file2, "/mnt_unlink/file2", TRUE, NULL);
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	puts("    Traversal through mount point should not have worked!");
+	goto error;
+    }
+
+    /*
+     * It's no longer possible to unmount the child by supplying the name of
+     * the mount point because the name doesn't exist anymore.  We must
+     * supply the mount point directly.
+     */
+    H5E_BEGIN_TRY {
+	status = H5Funmount(file1, "/mnt_unlink");
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	printf("    %d: Unmount by name should not have been allowed!\n",__LINE__);
+	goto error;
+    }
+    H5E_BEGIN_TRY {
+	status = H5Funmount(file2, "/");
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	printf("    %d: Unmount by name should not have been allowed!\n",__LINE__);
+	goto error;
+    }
+    if (H5Funmount(mnt, ".")<0) goto error;
+
+    /* Close files */
+    if (H5Gclose(mnt)<0) goto error;
+    if (H5Gclose(root)<0) goto error;
+    if (H5Fclose(file1)<0) goto error;
+    if (H5Fclose(file2)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Gclose(mnt);
+	H5Gclose(root);
+	H5Fclose(file2);
+	H5Fclose(file1);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_mvmpt
+ *
+ * Purpose:	Try renaming the mount point while a file is mounted there.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, October 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_mvmpt(hid_t fapl)
+{
+    hid_t	file1=-1, file2=-1;
+    char	filename1[1024], filename2[1024];
+
+    TESTING("mount point renaming");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /* Build the virtual file */
+    if ((file1=H5Fopen(filename1, H5F_ACC_RDWR, fapl))<0 ||
+	(file2=H5Fopen(filename2, H5F_ACC_RDWR, fapl))<0)
+	goto error;
+    if (H5Fmount(file1, "/mnt_move_a", file2, H5P_DEFAULT)<0) goto error;
+
+    /* Rename the mount point */
+    if (H5Gmove(file1, "/mnt_move_a", "/mnt_move_b")<0) goto error;
+
+    /* Access something under the new name */
+    if (H5Gget_objinfo(file1, "/mnt_move_b/file2", TRUE, NULL)<0) goto error;
+
+    /* Shut down */
+    if (H5Funmount(file1, "/mnt_move_b")<0) goto error;
+    if (H5Fclose(file1)<0) goto error;
+    if (H5Fclose(file2)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Fclose(file1);
+	H5Fclose(file2);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_interlink
+ *
+ * Purpose:	Hard links cannot cross file boundaries.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, October 14, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_interlink(hid_t fapl)
+{
+    hid_t	file1=-1, file2=-1, type=-1, space=-1, dset=-1;
+    char	filename1[1024], filename2[1024];
+    herr_t	status;
+    hsize_t	cur_dims[1] = {2};
+
+    TESTING("interfile hard links");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /* Build the virtual file */
+    if ((file1=H5Fopen(filename1, H5F_ACC_RDWR, fapl))<0 ||
+	(file2=H5Fopen(filename2, H5F_ACC_RDWR, fapl))<0)
+	goto error;
+    if (H5Fmount(file1, "/mnt1", file2, H5P_DEFAULT)<0) goto error;
+
+    /* Try an interfile hard link directly */
+    H5E_BEGIN_TRY {
+	status = H5Glink(file1, H5G_LINK_HARD, "/mnt1/file2",  "/file2");
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	puts("    Interfile hard link should not have been allowed!");
+	goto error;
+    }
+
+    /* Try an interfile hard link by renaming something */
+    H5E_BEGIN_TRY {
+	status = H5Gmove(file1, "/mnt1/file2", "/file2");
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	puts("    Interfile renaming should not have been allowed!");
+	goto error;
+    }
+
+    /* Try an interfile hard link by sharing a data type */
+    if ((type=H5Tcopy(H5T_NATIVE_INT))<0) goto error;
+    if (H5Tcommit(file1, "/type1", type)<0) goto error;
+    if ((space=H5Screate_simple(1, cur_dims, NULL))<0) goto error;
+    H5E_BEGIN_TRY {
+	dset = H5Dcreate(file1, "/mnt1/file2/dset", type, space, H5P_DEFAULT);
+    } H5E_END_TRY;
+    if (dset>=0) {
+	H5_FAILED();
+	puts("    Dataset and shared type must be in the same file!");
+	goto error;
+    }
+
+    /* Shut down */
+    if (H5Sclose(space)<0) goto error;
+    if (H5Tclose(type)<0) goto error;
+    if (H5Funmount(file1, "/mnt1")<0) goto error;
+    if (H5Fclose(file1)<0) goto error;
+    if (H5Fclose(file2)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Dclose(dset);
+	H5Sclose(space);
+	H5Tclose(type);
+	H5Fclose(file1);
+	H5Fclose(file2);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_uniformity
+ *
+ * Purpose:	Any file handle is equivalent to any other file handle in the
+ *		same virtual file.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, October 14, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_uniformity(hid_t fapl)
+{
+    hid_t	file1=-1, file2=-1;
+    char	filename1[1024], filename2[1024];
+
+    TESTING("file handle uniformity");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /* Build the virtual file */
+    if ((file1=H5Fopen(filename1, H5F_ACC_RDWR, fapl))<0 ||
+	(file2=H5Fopen(filename2, H5F_ACC_RDWR, fapl))<0)
+	TEST_ERROR;
+    if (H5Fmount(file1, "/mnt1", file2, H5P_DEFAULT)<0) TEST_ERROR;
+
+    /* Access some things from the file1 handle */
+    if (H5Gget_objinfo(file1, "/", TRUE, NULL)<0) TEST_ERROR;
+    if (H5Gget_objinfo(file1, "/mnt1", TRUE, NULL)<0) TEST_ERROR;
+    if (H5Gget_objinfo(file1, "mnt1", TRUE, NULL)<0) TEST_ERROR;
+    if (H5Gget_objinfo(file1, "/mnt1/file2", TRUE, NULL)<0) TEST_ERROR;
+    if (H5Gget_objinfo(file1, "mnt1/file2", TRUE, NULL)<0) TEST_ERROR;
+
+    /* Access the same things from the file2 handle */
+    if (H5Gget_objinfo(file2, "/", TRUE, NULL)<0) TEST_ERROR;
+    if (H5Gget_objinfo(file2, "/mnt1", TRUE, NULL)<0) TEST_ERROR;
+    if (H5Gget_objinfo(file2, "mnt1", TRUE, NULL)<0) TEST_ERROR;
+    if (H5Gget_objinfo(file2, "/mnt1/file2", TRUE, NULL)<0) TEST_ERROR;
+    if (H5Gget_objinfo(file2, "mnt1/file2", TRUE, NULL)<0) TEST_ERROR;
+
+    /* Shut down */
+    if (H5Funmount(file1, "/mnt1")<0) TEST_ERROR;
+    if (H5Fclose(file1)<0) TEST_ERROR;
+    if (H5Fclose(file2)<0) TEST_ERROR;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Fclose(file1);
+	H5Fclose(file2);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_close
+ *
+ * Purpose:	Closing any file handle closes the entire virtual file.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, October 14, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_close(hid_t fapl)
+{
+    hid_t	file1=-1, file2=-1;
+    char	filename1[1024], filename2[1024];
+
+    TESTING("file handle close");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /* Build the virtual file */
+    if ((file1=H5Fopen(filename1, H5F_ACC_RDWR, fapl))<0 ||
+	(file2=H5Fopen(filename2, H5F_ACC_RDWR, fapl))<0)
+	goto error;
+    if (H5Fmount(file1, "/mnt1", file2, H5P_DEFAULT)<0) goto error;
+
+    /*
+     * Close file1 unmounting it from the virtual file.  Objects in file1 are
+     * still accessible through the file2 handle.
+     */
+    if (H5Fclose(file1)<0) goto error;
+    if(H5Gget_objinfo(file2, "/mnt1", TRUE, NULL) < 0) {
+	H5_FAILED();
+	puts("    File1 contents are not accessible!");
+	goto error;
+    }
+    if (H5Fclose(file2)<0) goto error;
+
+    /* Check that all file IDs have been closed */
+    if(H5I_nmembers(H5I_FILE) != 0)
+        TEST_ERROR
+    if(H5F_sfile_assert_num(0) != 0)
+        TEST_ERROR
+
+    /* Build the virtual file again */
+    if ((file1=H5Fopen(filename1, H5F_ACC_RDWR, fapl))<0 ||
+	(file2=H5Fopen(filename2, H5F_ACC_RDWR, fapl))<0)
+	goto error;
+    if (H5Fmount(file1, "/mnt1", file2, H5P_DEFAULT)<0) goto error;
+
+    /*
+     * Close file2.  It is not actually closed because it's a child of file1.
+     */
+    if (H5Fclose(file2)<0) goto error;
+    if (H5Gget_objinfo(file1, "/mnt1/file2", TRUE, NULL)<0) goto error;
+    if (H5Fclose(file1)<0) goto error;
+
+    /* Check that all file IDs have been closed */
+    if(H5I_nmembers(H5I_FILE) != 0)
+        TEST_ERROR
+    if(H5F_sfile_assert_num(0) != 0)
+        TEST_ERROR
+
+    /* Shut down */
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Fclose(file1);
+	H5Fclose(file2);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_mount_after_close
+ *
+ * Purpose:	Test that the library handles mounting a file on a group
+ *              if the group is the only object holding the file open.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, May  4, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_mount_after_close(hid_t fapl)
+{
+    hid_t	fid1=-1, fid2=-1;                     /* File IDs */
+    hid_t       gidA=-1, gidAB=-1, gidABM=-1, gidX=-1, gidXY=-1;  /* Group identifiers */
+    hid_t       gidABMX=-1, gidABC=-1, gidABT=-1;       /* Group IDs for testing */
+    hid_t       didABMXYD=-1;                           /* Dataset ID for testing */
+    hid_t       did=-1, sid=-1;                         /* Dataset and dataspace identifiers */
+    char	filename1[1024], filename2[1024];       /* Name of files to mount */
+    char        objname[NAME_BUF_SIZE];                 /* Name of object opened */
+    hsize_t     dims[] = {NX,NY};                       /* Dataset dimensions */
+    int         i, j;                                   /* Local index variable */
+
+    TESTING("mounting on group after file is closed");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /*
+    * Initialization of buffer matrix "bm"
+    */
+    for(i =0; i<NX; i++)
+        for(j = 0; j<NY; j++)
+            bm[i][j] = i + j;
+
+    /* Create first file and a groups in it. */
+    /* h5ls -r shows: */
+    /* /A                       Group
+      /A/B                     Group
+      /A/B/C                   -> ./M/X/Y
+      /A/B/M                   Group
+      /A/B/T                   -> /A
+    */
+    if((fid1 = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+        TEST_ERROR
+    if((gidA = H5Gcreate(fid1, "A", (size_t)0)) < 0)
+        TEST_ERROR
+    if((gidAB = H5Gcreate(gidA , "B", (size_t)0)) < 0)
+        TEST_ERROR
+    if((gidABM = H5Gcreate(gidAB , "M", (size_t)0)) < 0) /* Mount point */
+        TEST_ERROR
+    if(H5Glink(gidAB, H5G_LINK_SOFT, "./M/X/Y", "C") < 0) /* Soft link */
+        TEST_ERROR
+    if(H5Glink(gidAB, H5G_LINK_SOFT, "/A", "T") < 0) /* Soft link */
+        TEST_ERROR
+
+    /* Close groups and file */
+    if(H5Gclose(gidABM) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidAB) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+   /* Create second file and dataset "D" in it. */
+   /* h5ls shows: */
+   /* /X                       Group
+      /X/T                     -> ./Y
+      /X/Y                     Group
+      /X/Y/D                   Dataset {4, 5}
+    */
+    if((fid2 = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+        TEST_ERROR
+
+    dims[0] = NX;
+    dims[1] = NY;
+    if((sid = H5Screate_simple(RANK, dims, NULL)) < 0)
+        TEST_ERROR
+
+    if((gidX = H5Gcreate(fid2, "/X", (size_t)0)) < 0)
+        TEST_ERROR
+    if((gidXY = H5Gcreate(gidX, "Y", (size_t)0)) < 0)
+        TEST_ERROR
+    if((did = H5Dcreate(gidXY, "D", H5T_NATIVE_INT, sid, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+    if(H5Glink(gidX, H5G_LINK_SOFT, "./Y", "T") < 0) /* Soft link */
+        TEST_ERROR
+
+    /* Write data to the dataset. */
+    if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, bm) < 0)
+        TEST_ERROR
+
+    /* Close all identifiers. */
+    if(H5Sclose(sid) < 0)
+        TEST_ERROR
+    if(H5Dclose(did) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidXY) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidX) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+/* Beginning of the actual test code */
+
+   /*
+    * Reopen both files
+    */
+    if((fid1 = H5Fopen(filename1, H5F_ACC_RDONLY, fapl)) < 0)
+        TEST_ERROR
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDONLY, fapl)) < 0)
+        TEST_ERROR
+   /*
+    *  Open /A/B to use as a mount point
+    */
+    if((gidAB = H5Gopen(fid1, "/A/B")) < 0)
+        TEST_ERROR
+
+   /*
+    *  Close the parent file. This keeps the file open because of the other handle on the group within
+    */
+    if(H5Fclose(fid1) < 0) /* We close the file (it should stay open from the group) */
+        TEST_ERROR
+
+   /*
+    * Mount second file under G in the first file.
+    */
+    if(H5Fmount(gidAB, "M", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Open "normal" group in mounted file */
+    /* (This shows we successfully mounted) */
+    if((gidABMX = H5Gopen(gidAB, "M/X")) < 0)
+        TEST_ERROR
+
+    /* Check name */
+    if(H5Iget_name( gidABMX, objname, (size_t)NAME_BUF_SIZE ) < 0)
+        TEST_ERROR
+    if(HDstrcmp(objname, "/A/B/M/X"))
+        TEST_ERROR
+
+    /* Close object in mounted file */
+    if(H5Gclose(gidABMX) < 0)
+        TEST_ERROR
+
+    /* Open group in mounted file through softlink */
+    if((gidABC = H5Gopen(gidAB, "C")) < 0)
+        TEST_ERROR
+
+    /* Check name */
+    if(H5Iget_name( gidABC, objname, (size_t)NAME_BUF_SIZE ) < 0)
+        TEST_ERROR
+    if(HDstrcmp(objname, "/A/B/C"))
+        TEST_ERROR
+
+    /* Close object in mounted file */
+    if(H5Gclose(gidABC) < 0)
+        TEST_ERROR
+
+    /* Open group in original file through softlink */
+    if((gidABT = H5Gopen(gidAB, "T")) < 0)
+        TEST_ERROR
+
+    /* Check name */
+    if(H5Iget_name( gidABT, objname, (size_t)NAME_BUF_SIZE ) < 0)
+        TEST_ERROR
+    if(HDstrcmp(objname, "/A/B/T"))
+        TEST_ERROR
+
+    /* Close object in original file */
+    if(H5Gclose(gidABT) < 0)
+        TEST_ERROR
+
+    /* Open "normal" dataset in mounted file */
+    if((didABMXYD = H5Dopen(gidAB, "M/X/Y/D")) < 0)
+        TEST_ERROR
+
+    /* Check name */
+    if(H5Iget_name( didABMXYD, objname, (size_t)NAME_BUF_SIZE ) < 0)
+        TEST_ERROR
+    if(HDstrcmp(objname, "/A/B/M/X/Y/D"))
+        TEST_ERROR
+
+    /* Close object in mounted file */
+    if(H5Dclose(didABMXYD) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidAB) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+    /* Shut down */
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Sclose(sid);
+	H5Dclose(did);
+	H5Gclose(didABMXYD);
+	H5Gclose(gidABT);
+	H5Gclose(gidABC);
+	H5Gclose(gidABMX);
+	H5Gclose(gidXY);
+	H5Gclose(gidX);
+	H5Gclose(gidABM);
+	H5Gclose(gidAB);
+	H5Gclose(gidA);
+	H5Fclose(fid1);
+        H5Fclose(fid2);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_mount_after_unmount
+ *
+ * Purpose:	Test that the library handles mounting a file while holding
+ *				objects open in a file which has been unmounted.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, June  6, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_mount_after_unmount(hid_t fapl)
+{
+    hid_t	fid1=-1, fid2=-1, fid3=-1, fid4=-1;      /* File IDs */
+    hid_t       gidA=-1, gidB=-1, gidX=-1, gidY=-1, gidZ=-1;  	/* Group identifiers */
+    hid_t       gidBM=-1;  			/* Group identifiers */
+    hid_t       gidBMZ=-1;  			/* Group identifiers */
+    hid_t       gidAM=-1;  			/* Group identifiers */
+    hid_t       gidAMX=-1;  			/* Group identifiers */
+    hid_t       gidAMXX=-1;  			/* Group identifiers */
+    hid_t       gidAMXMY=-1;  			/* Group identifiers */
+    hid_t       gidXM=-1;  			/* Group identifiers */
+    hid_t       gidXX=-1;  			/* Group identifiers */
+    char	filename1[1024],
+		filename2[1024],
+		filename3[1024],
+		filename4[1024];       		/* Name of files to mount */
+    char        objname[NAME_BUF_SIZE];                 /* Name of object opened */
+
+    TESTING("mounting after file is unmounted");
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+    h5_fixname(FILENAME[2], fapl, filename3, sizeof filename3);
+    h5_fixname(FILENAME[3], fapl, filename4, sizeof filename4);
+
+    /* Create first file and some groups in it. */
+    if((fid1 = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+        TEST_ERROR
+    if((gidA = H5Gcreate(fid1, "A", (size_t)0)) < 0)
+        TEST_ERROR
+    if((gidAM = H5Gcreate(gidA, "M", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidAM) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+    if((gidB = H5Gcreate(fid1, "B", (size_t)0)) < 0)
+        TEST_ERROR
+    if((gidBM = H5Gcreate(gidB, "M", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidBM) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidB) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+   /* Create second file and a group in it. */
+    if((fid2 = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+        TEST_ERROR
+    if((gidX = H5Gcreate(fid2, "/X", (size_t)0)) < 0)
+        TEST_ERROR
+    if((gidXM = H5Gcreate(gidX, "M", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidXM) < 0)
+        TEST_ERROR
+    if((gidXX = H5Gcreate(gidX, "X", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidXX) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidX) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+   /* Create third file and a group in it. */
+    if((fid3 = H5Fcreate(filename3, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+        TEST_ERROR
+    if((gidY = H5Gcreate(fid3, "/Y", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidY) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid3) < 0)
+        TEST_ERROR
+
+   /* Create fourth file and a group in it. */
+    if((fid4 = H5Fcreate(filename4, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+        TEST_ERROR
+    if((gidZ = H5Gcreate(fid4, "/Z", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidZ) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid4) < 0)
+        TEST_ERROR
+
+
+/* Beginning of the actual test code */
+
+   /*
+    * Reopen all three files
+    */
+    if((fid1 = H5Fopen(filename1, H5F_ACC_RDWR, fapl)) < 0)
+        TEST_ERROR
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDWR, fapl)) < 0)
+        TEST_ERROR
+    if((fid3 = H5Fopen(filename3, H5F_ACC_RDWR, fapl)) < 0)
+        TEST_ERROR
+    if((fid4 = H5Fopen(filename4, H5F_ACC_RDWR, fapl)) < 0)
+        TEST_ERROR
+
+   /*
+    *  Open /A & /B to use as a mount points
+    */
+    if((gidA = H5Gopen(fid1, "/A")) < 0)
+        TEST_ERROR
+    if((gidB = H5Gopen(fid1, "/B")) < 0)
+        TEST_ERROR
+
+   /*
+    * Mount second file on /A/M in the first file.
+    */
+    if(H5Fmount(gidA, "M", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Open group in mounted file */
+    /* (This shows we successfully mounted) */
+    if((gidAMXX = H5Gopen(gidA, "M/X/X")) < 0)
+        TEST_ERROR
+
+    /* Check name */
+    if(H5Iget_name( gidAMXX, objname, (size_t)NAME_BUF_SIZE ) < 0)
+        TEST_ERROR
+    if(HDstrcmp(objname, "/A/M/X/X"))
+        TEST_ERROR
+
+    /* Open group in mounted file #2 */
+    if((gidAMX = H5Gopen(gidA, "M/X")) < 0)
+        TEST_ERROR
+
+    /* Mount third file */
+    if(H5Fmount(gidAMX, "M", fid3, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Open group in mounted file #3 */
+    /* (This shows we successfully mounted) */
+    if((gidAMXMY = H5Gopen(gidAMX, "M/Y")) < 0)
+        TEST_ERROR
+
+    /* Check name */
+    if(H5Iget_name( gidAMXMY, objname, (size_t)NAME_BUF_SIZE ) < 0)
+        TEST_ERROR
+    if(HDstrcmp(objname, "/A/M/X/M/Y"))
+        TEST_ERROR
+
+    /* Unmount second file */
+    if (H5Funmount(fid1, "/A/M")<0)
+	TEST_ERROR
+
+    /* Check name */
+    *objname = '\0';
+    if(H5Iget_name( gidAMXMY, objname, (size_t)NAME_BUF_SIZE ) < 0)
+        TEST_ERROR
+    if(HDstrcmp(objname, ""))
+        TEST_ERROR
+
+    /* Rename object in file #3 that is "disconnected" from name hiearchy */
+    /* (It is "disconnected" because it's parent file has been unmounted) */
+    if(H5Gmove2(gidAMX,"M/Y",gidAMX,"M/Z") < 0)
+	TEST_ERROR
+
+    /* Close group in file #3 */
+    if(H5Gclose(gidAMXMY) < 0)
+	TEST_ERROR
+
+    /* Re-open group in file #3 */
+    if((gidAMXMY = H5Gopen(gidAMX, "M/Z")) < 0)
+        TEST_ERROR
+
+    /* Check name again */
+    *objname = '\0';
+    if(H5Iget_name( gidAMXMY, objname, (size_t)NAME_BUF_SIZE ) < 0)
+	TEST_ERROR
+    if(HDstrcmp(objname, ""))
+	TEST_ERROR
+
+    /* Mount fourth file */
+    if(H5Fmount(gidB, "M", fid4, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Open group in mounted file */
+    /* (This shows we successfully mounted) */
+    if((gidBMZ = H5Gopen(gidB, "M/Z")) < 0)
+        TEST_ERROR
+
+    /* Check name */
+    if(H5Iget_name( gidBMZ, objname, (size_t)NAME_BUF_SIZE ) < 0)
+        TEST_ERROR
+    if(HDstrcmp(objname, "/B/M/Z"))
+        TEST_ERROR
+
+    /* Unmount third file */
+    if (H5Funmount(fid2, "/X/M")<0)
+	TEST_ERROR
+
+    /* Unmount fourth file */
+    if (H5Funmount(fid1, "/B/M")<0)
+	TEST_ERROR
+
+    /* Close objects in mounted files */
+    if(H5Gclose(gidBMZ) < 0)
+	TEST_ERROR
+    if(H5Gclose(gidAMXMY) < 0)
+	TEST_ERROR
+    if(H5Gclose(gidAMXX) < 0)
+	TEST_ERROR
+    if(H5Gclose(gidAMX) < 0)
+	TEST_ERROR
+
+    /* Close objects in original file */
+    if(H5Gclose(gidB) < 0)
+	TEST_ERROR
+    if(H5Gclose(gidA) < 0)
+	TEST_ERROR
+
+    /* Close files */
+    if(H5Fclose(fid4) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid3) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+    /* Shut down */
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Gclose(gidZ);
+	H5Gclose(gidY);
+	H5Gclose(gidXX);
+	H5Gclose(gidXM);
+	H5Gclose(gidX);
+	H5Gclose(gidBMZ);
+	H5Gclose(gidBM);
+	H5Gclose(gidB);
+	H5Gclose(gidAMXMY);
+	H5Gclose(gidAMXX);
+	H5Gclose(gidAMX);
+	H5Gclose(gidAM);
+	H5Gclose(gidA);
+        H5Fclose(fid4);
+        H5Fclose(fid3);
+        H5Fclose(fid2);
+	H5Fclose(fid1);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_missing_unmount
+ *
+ * Purpose:	Test that the library correctly closes open files when they
+ *              have child files that have not been unmounted.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, June 30, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_missing_unmount(hid_t fapl)
+{
+    hid_t fid1=-1, fid2=-1, fid3=-1;    /* File IDs */
+    hid_t gidA=-1, gidE=-1, gidM=-1;    /* Group IDs */
+    hid_t gidAE=-1, gidAEM=-1;          /* Group IDs */
+    char	filename1[1024],
+		filename2[1024],
+		filename3[1024]; 	/* Name of files to mount */
+
+    TESTING("missing unmount");
+
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+    h5_fixname(FILENAME[2], fapl, filename3, sizeof filename3);
+
+    /* Create file #1 */
+    if((fid1 = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gcreate(fid1, "A", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Create file #2 */
+    if((fid2 = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidE = H5Gcreate(fid2, "E", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidE) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+
+    /* Create file #3 */
+    if((fid3 = H5Fcreate(filename3, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidM = H5Gcreate(fid3, "M", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidM) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid3) < 0)
+        TEST_ERROR
+
+
+    /* Re-open files and mount file #2 in file #1 and file #3 in file #2 */
+    if((fid1 = H5Fopen(filename1, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gopen(fid1, "A")) < 0)
+        TEST_ERROR
+
+    /* Close file #1 */
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if(H5Fmount(gidA, ".", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Open group in mounted file */
+    if((gidAE = H5Gopen(fid2, "A/E")) < 0)
+        TEST_ERROR
+
+    /* Close file #2 */
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+    if((fid3 = H5Fopen(filename3, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if(H5Fmount(gidAE, ".", fid3, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Open group in mounted file */
+    if((gidAEM = H5Gopen(fid3, "A/E/M")) < 0)
+        TEST_ERROR
+
+    /* Close file #3 */
+    if(H5Fclose(fid3) < 0)
+        TEST_ERROR
+
+    /* (Still have all file #2 & #3 mounted and groups open in all three files) */
+
+    /* Unmount file #2 & #3 */
+    if(H5Funmount(gidAE,".") < 0)
+        TEST_ERROR
+
+    /* Skip unmounting file #2 from file #1 */
+
+    /* Close groups in mounted file */
+    if(H5Gclose(gidAEM) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidAE) < 0)
+        TEST_ERROR
+
+    /* Close group in top file */
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    /* Check that all file IDs have been closed */
+    if(H5I_nmembers(H5I_FILE) != 0)
+        TEST_ERROR
+    if(H5F_sfile_assert_num(0) != 0)
+        TEST_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Gclose(gidM);
+	H5Gclose(gidE);
+	H5Gclose(gidAEM);
+	H5Gclose(gidAE);
+	H5Gclose(gidA);
+        H5Fclose(fid3);
+        H5Fclose(fid2);
+	H5Fclose(fid1);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_missing_unmount() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_hold_open_file
+ *
+ * Purpose:	Test that the library correctly holds open files when they
+ *              have child files that have not been unmounted.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, July  5, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_hold_open_file(hid_t fapl)
+{
+    hid_t fid1 = -1, fid2 = -1;           	/* File IDs */
+    hid_t gidA = -1, gidM = -1, gidAM = -1;    	/* Group IDs */
+    char	filename1[1024],
+		filename2[1024]; 	/* Name of files to mount */
+
+    TESTING("hold open w/file");
+
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /* Create file #1 */
+    if((fid1 = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gcreate(fid1, "A", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Create file #2 */
+    if((fid2 = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidM = H5Gcreate(fid2, "M", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidM) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+
+    /* Re-open files and mount file #2 in file #1 */
+    if((fid1 = H5Fopen(filename1, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gopen(fid1, "A")) < 0)
+        TEST_ERROR
+
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if(H5Fmount(gidA, ".", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    if((gidAM = H5Gopen(fid1, "A/M")) < 0)
+        TEST_ERROR
+
+    /* Close file #2 */
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+    /* Close group in mounted file */
+    if(H5Gclose(gidAM) < 0)
+        TEST_ERROR
+
+    /* Attempt to open group in mounted file */
+    /* (Should work because file is still mounted) */
+    if((gidAM = H5Gopen(fid1, "A/M")) < 0)
+        TEST_ERROR
+
+    /* Close file #1 */
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+    /* Close group in mounted file */
+    if(H5Gclose(gidAM) < 0)
+        TEST_ERROR
+
+    /* Attempt to open group in mounted file */
+    /* (Should work because file is still mounted) */
+    if((gidAM = H5Gopen(gidA, "/A/M")) < 0)
+        TEST_ERROR
+
+    /* Close group in mounted file */
+    if(H5Gclose(gidAM) < 0)
+        TEST_ERROR
+
+    /* Unmount file #2 */
+    if(H5Funmount(gidA, ".") < 0)
+        TEST_ERROR
+
+    /* Close group in top file */
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    /* Check that all file IDs have been closed */
+    if(H5I_nmembers(H5I_FILE) != 0)
+        TEST_ERROR
+    if(H5F_sfile_assert_num(0) != 0)
+        TEST_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Gclose(gidM);
+	H5Gclose(gidAM);
+	H5Gclose(gidA);
+        H5Fclose(fid2);
+	H5Fclose(fid1);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_hold_open_file() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_hold_open_group
+ *
+ * Purpose:	Test that the library correctly holds open file mount
+ *              hierarchies when they have objects open.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 14, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_hold_open_group(hid_t fapl)
+{
+    hid_t fid1 = -1, fid2 = -1;           	/* File IDs */
+    hid_t gid = -1, gidA = -1, gidM = -1, gidAM = -1, gidAM2 = -1;    	/* Group IDs */
+    char	filename1[1024],
+		filename2[1024]; 	/* Name of files to mount */
+
+    TESTING("hold open w/group");
+
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /* Create file #1 */
+    if((fid1 = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gcreate(fid1, "A", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Create file #2 */
+    if((fid2 = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidM = H5Gcreate(fid2, "M", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidM) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+
+    /* Re-open files and mount file #2 in file #1 */
+    if((fid1 = H5Fopen(filename1, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gopen(fid1, "A")) < 0)
+        TEST_ERROR
+
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if(H5Fmount(gidA, ".", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    if((gidAM = H5Gopen(fid1, "A/M")) < 0)
+        TEST_ERROR
+
+    /* Close file #2 */
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+    /* Close group in parent file */
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    /* Keep fid1 & gidAM open, everything else closed */
+
+    /* Retry to opening group in mounted file */
+    /* (Should work because file is still mounted) */
+    if((gidAM2 = H5Gopen(fid1, "A/M")) < 0)
+        TEST_ERROR
+
+    /* Close group in mounted file */
+    if(H5Gclose(gidAM2) < 0)
+        TEST_ERROR
+
+    /* Close original group in mount file */
+    if(H5Gclose(gidAM) < 0)
+        TEST_ERROR
+
+    /* Attempt to open group in mounted file */
+    /* (Should work because file is still mounted) */
+    if((gidAM2 = H5Gopen(fid1, "/A/M")) < 0)
+        TEST_ERROR
+
+    /* Close file #1 */
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+    /* Get ID of file #2 */
+    if((fid2 = H5Iget_file_id(gidAM2)) < 0)
+        TEST_ERROR
+
+    /* Close group in mounted file */
+    if(H5Gclose(gidAM2) < 0)
+        TEST_ERROR
+
+    /* Attempt to open group in mounted file */
+    /* (Should work because file is still mounted) */
+    if((gidAM2 = H5Gopen(fid2, "/A/M")) < 0)
+        TEST_ERROR
+
+    /* Close file #2 */
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+    /* Attempt to open group in parent file */
+    /* (Should work because files should be mounted together) */
+    if((gid = H5Gopen(gidAM2, "/")) < 0)
+        TEST_ERROR
+
+    /* Close group in mounted file */
+    if(H5Gclose(gidAM2) < 0)
+        TEST_ERROR
+
+    /* Close group in parent file */
+    if(H5Gclose(gid) < 0)
+        TEST_ERROR
+
+    /* Check that all file IDs have been closed */
+    if(H5I_nmembers(H5I_FILE) != 0)
+        TEST_ERROR
+    if(H5F_sfile_assert_num(0) != 0)
+        TEST_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Gclose(gidM);
+	H5Gclose(gidAM);
+	H5Gclose(gidAM2);
+	H5Gclose(gidA);
+	H5Gclose(gid);
+        H5Fclose(fid2);
+	H5Fclose(fid1);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_hold_open_group() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_fcdegree_same
+ *
+ * Purpose:	Test that the library will only allow files with same file
+ *              close degree to be mounted together.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, July 19, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_fcdegree_same(hid_t fapl)
+{
+    hid_t fid1 = -1, fid2 = -1;           	/* File IDs */
+    hid_t gidA = -1, gidM = -1, gidAM = -1;    	/* Group IDs */
+    hid_t fapl_id = -1;                         /* FAPL IDs */
+    herr_t ret;                                 /* Generic return value */
+    char	filename1[1024],
+		filename2[1024]; 	/* Name of files to mount */
+
+    TESTING("file close degrees must be same");
+
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /* Create file #1 */
+    if((fid1 = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gcreate(fid1, "A", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Create file #2 */
+    if((fid2 = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidM = H5Gcreate(fid2, "M", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidM) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+
+    /* Re-open files and mount file #2 in file #1 */
+    if((fid1 = H5Fopen(filename1, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gopen(fid1, "A")) < 0)
+        TEST_ERROR
+
+    /* Create FAPL & set file close degree for file #2 to be different */
+    if((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0)
+        TEST_ERROR
+
+    /* Set file close mode to H5F_CLOSE_STRONG */
+    if(H5Pset_fclose_degree(fapl_id, H5F_CLOSE_STRONG) < 0)
+        TEST_ERROR
+
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDONLY, fapl_id)) < 0)
+        TEST_ERROR
+
+    /* Try mounting file with different file close degree (should fail) */
+    H5E_BEGIN_TRY {
+        ret = H5Fmount(gidA, ".", fid2, H5P_DEFAULT);
+    } H5E_END_TRY;
+    if(ret >= 0)
+        TEST_ERROR
+
+    /* Set file close mode to H5F_CLOSE_WEAK */
+    if(H5Pset_fclose_degree(fapl_id, H5F_CLOSE_WEAK) < 0)
+        TEST_ERROR
+
+    /* Close file #2 & re-open with same file close degree as file #1 */
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDONLY, fapl_id)) < 0)
+        TEST_ERROR
+
+    /* Try mounting files again (should work now) */
+    if(H5Fmount(gidA, ".", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Verify opening group in mounted file */
+    if((gidAM = H5Gopen(fid1, "A/M")) < 0)
+        TEST_ERROR
+
+    /* Close group in mounted file */
+    if(H5Gclose(gidAM) < 0)
+        TEST_ERROR
+
+    /* Close group in parent file */
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    /* Close file #2 */
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+    /* Close file #1 */
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+    /* Close FAPL ID */
+    if(H5Pclose(fapl_id) < 0)
+        TEST_ERROR
+
+    /* Check that all file IDs have been closed */
+    if(H5I_nmembers(H5I_FILE) != 0)
+        TEST_ERROR
+    if(H5F_sfile_assert_num(0) != 0)
+        TEST_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Pclose(fapl_id);
+	H5Gclose(gidM);
+	H5Gclose(gidAM);
+	H5Gclose(gidA);
+        H5Fclose(fid2);
+	H5Fclose(fid1);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_fcdegree_same() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_fcdegree_semi
+ *
+ * Purpose:	Test that the library perform correct actions when using
+ *              "semi" file close degree on mounted files
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, July 19, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_fcdegree_semi(hid_t fapl)
+{
+    hid_t fid1 = -1, fid2 = -1;           	/* File IDs */
+    hid_t gidA = -1, gidM = -1, gidAM = -1;    	/* Group IDs */
+    hid_t fapl_id = -1;                         /* FAPL IDs */
+    herr_t ret;                                 /* Generic return value */
+    char	filename1[1024],
+		filename2[1024]; 	/* Name of files to mount */
+
+    TESTING("'semi' file close degree");
+
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /* Create file #1 */
+    if((fid1 = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gcreate(fid1, "A", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Create file #2 */
+    if((fid2 = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidM = H5Gcreate(fid2, "M", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidM) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+
+    /* Create FAPL & set file close degree to be "semi" */
+    if((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0)
+        TEST_ERROR
+
+    /* Set file close mode to H5F_CLOSE_SEMI */
+    if(H5Pset_fclose_degree(fapl_id, H5F_CLOSE_SEMI) < 0)
+        TEST_ERROR
+
+    /* Re-open files and mount file #2 in file #1 */
+    if((fid1 = H5Fopen(filename1, H5F_ACC_RDONLY, fapl_id)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gopen(fid1, "A")) < 0)
+        TEST_ERROR
+
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDONLY, fapl_id)) < 0)
+        TEST_ERROR
+
+    /* Mount files together */
+    if(H5Fmount(gidA, ".", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Verify opening group in mounted file */
+    if((gidAM = H5Gopen(fid1, "A/M")) < 0)
+        TEST_ERROR
+
+    /* Close file #1 (should succeed, since file #2 is open still) */
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+    /* Try closing file #2 (should fail, since there are still objects open) */
+    H5E_BEGIN_TRY {
+        ret = H5Fclose(fid2);
+    } H5E_END_TRY;
+    if(ret >= 0)
+        TEST_ERROR
+
+    /* Close group in parent file */
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    /* Try closing file #2 (should still fail, since there are still objects open in child file) */
+    H5E_BEGIN_TRY {
+        ret = H5Fclose(fid2);
+    } H5E_END_TRY;
+    if(ret >= 0)
+        TEST_ERROR
+
+    /* Close group in mounted file */
+    if(H5Gclose(gidAM) < 0)
+        TEST_ERROR
+
+    /* Close file #2 (should succeed now) */
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+    /* Close FAPL ID */
+    if(H5Pclose(fapl_id) < 0)
+        TEST_ERROR
+
+    /* Check that all file IDs have been closed */
+    if(H5I_nmembers(H5I_FILE) != 0)
+        TEST_ERROR
+    if(H5F_sfile_assert_num(0) != 0)
+        TEST_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Pclose(fapl_id);
+	H5Gclose(gidM);
+	H5Gclose(gidAM);
+	H5Gclose(gidA);
+        H5Fclose(fid2);
+	H5Fclose(fid1);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_fcdegree_semi() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_fcdegree_strong
+ *
+ * Purpose:	Test that the library perform correct actions when using
+ *              "strong" file close degree on mounted files
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, July 19, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_fcdegree_strong(hid_t fapl)
+{
+    hid_t fid1 = -1, fid2 = -1;           	/* File IDs */
+    hid_t gidA = -1, gidM = -1, gidAM = -1;    	/* Group IDs */
+    hid_t fapl_id = -1;                         /* FAPL IDs */
+    herr_t ret;                                 /* Generic return value */
+    char	filename1[1024],
+		filename2[1024]; 	/* Name of files to mount */
+
+    TESTING("'strong' file close degree");
+
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /* Create file #1 */
+    if((fid1 = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gcreate(fid1, "A", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Create file #2 */
+    if((fid2 = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidM = H5Gcreate(fid2, "M", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidM) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+
+    /* Create FAPL & set file close degree to be "strong" */
+    if((fapl_id = H5Pcreate(H5P_FILE_ACCESS)) < 0)
+        TEST_ERROR
+
+    /* Set file close mode to H5F_CLOSE_STRONG */
+    if(H5Pset_fclose_degree(fapl_id, H5F_CLOSE_STRONG) < 0)
+        TEST_ERROR
+
+    /* Re-open files and mount file #2 in file #1 */
+    if((fid1 = H5Fopen(filename1, H5F_ACC_RDONLY, fapl_id)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gopen(fid1, "A")) < 0)
+        TEST_ERROR
+
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDONLY, fapl_id)) < 0)
+        TEST_ERROR
+
+    /* Mount files together */
+    if(H5Fmount(gidA, ".", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Open group in mounted file */
+    if((gidAM = H5Gopen(fid1, "A/M")) < 0)
+        TEST_ERROR
+
+    /* Close file #1 */
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+    /* Check that objects are still open */
+    if (H5Gget_objinfo(gidA, ".", TRUE, NULL) < 0)
+        TEST_ERROR
+    if (H5Gget_objinfo(gidAM, ".", TRUE, NULL) < 0)
+        TEST_ERROR
+
+    /* Close file #2 (should close open objects also) */
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+    /* Check that objects are closed */
+    H5E_BEGIN_TRY {
+        ret = H5Gget_objinfo(gidA, ".", TRUE, NULL);
+    } H5E_END_TRY;
+    if(ret >= 0)
+        TEST_ERROR
+    H5E_BEGIN_TRY {
+        ret = H5Gget_objinfo(gidAM, ".", TRUE, NULL);
+    } H5E_END_TRY;
+    if(ret >= 0)
+        TEST_ERROR
+
+    /* Close FAPL ID */
+    if(H5Pclose(fapl_id) < 0)
+        TEST_ERROR
+
+    /* Check that all file IDs have been closed */
+    if(H5I_nmembers(H5I_FILE) != 0)
+        TEST_ERROR
+    if(H5F_sfile_assert_num(0) != 0)
+        TEST_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Pclose(fapl_id);
+	H5Gclose(gidM);
+	H5Gclose(gidAM);
+	H5Gclose(gidA);
+        H5Fclose(fid2);
+	H5Fclose(fid1);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_fcdegree_strong() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_acc_perm
+ *
+ * Purpose:	Test that the library correctly segregates operations in
+ *              parts of mounted file hierarchy with files that have different
+ *              R/W access permissions.
+ *
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, July 19, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_acc_perm(hid_t fapl)
+{
+    hid_t fid1 = -1, fid2 = -1, fid3 = -1;           	/* File IDs */
+    hid_t gidA = -1, gidB = -1, gidC = -1, gidM = -1, gidAM = -1, gidAMZ = -1;    	/* Group IDs */
+    hid_t bad_id = -1;                          /* Bad ID from object create */
+    char    name[NAME_BUF_SIZE];        /* Buffer for filename retrieved */
+    ssize_t name_len;                   /* Filename length */
+    char	filename1[1024],
+		filename2[1024],
+		filename3[1024]; 	/* Name of files to mount */
+
+    TESTING("access permissions");
+
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+    h5_fixname(FILENAME[2], fapl, filename3, sizeof filename3);
+
+    /* Create file #1 */
+    if((fid1 = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gcreate(fid1, "A", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Create file #2 */
+    if((fid2 = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidM = H5Gcreate(fid2, "M", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidM) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+
+    /* Re-open files and mount file #2 in file #1 */
+    if((fid1 = H5Fopen(filename1, H5F_ACC_RDWR, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gopen(fid1, "A")) < 0)
+        TEST_ERROR
+
+    /* Get and verify file name */
+    if((name_len = H5Fget_name(gidA, name, NAME_BUF_SIZE)) < 0)
+        TEST_ERROR
+    if(HDstrcmp(name, filename1) != 0)
+        TEST_ERROR
+
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    /* Get and verify file name */
+    if((name_len = H5Fget_name(fid2, name, NAME_BUF_SIZE)) < 0)
+        TEST_ERROR
+    if(HDstrcmp(name, filename2) != 0)
+        TEST_ERROR
+
+    /* Mount files together */
+    if(H5Fmount(gidA, ".", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Get and verify file name */
+    if((name_len = H5Fget_name(fid2, name, NAME_BUF_SIZE)) < 0)
+        TEST_ERROR
+    if(HDstrcmp(name, filename2) != 0)
+        TEST_ERROR
+
+    /* Open group in mounted file */
+    if((gidAM = H5Gopen(fid1, "A/M")) < 0)
+        TEST_ERROR
+
+    /* Get and verify file name */
+    if((name_len = H5Fget_name(gidAM, name, NAME_BUF_SIZE)) < 0)
+        TEST_ERROR
+    if(HDstrcmp(name, filename2) != 0)
+        TEST_ERROR
+
+    /* Attempt to create objects in read only file (should fail) */
+    H5E_BEGIN_TRY {
+        bad_id = H5Gcreate(gidAM, "Z", (size_t)0);
+    } H5E_END_TRY;
+    if(bad_id >= 0)
+        TEST_ERROR
+    H5E_BEGIN_TRY {
+        bad_id = H5Gcreate(fid1, "/A/L", (size_t)0);
+    } H5E_END_TRY;
+    if(bad_id >= 0)
+        TEST_ERROR
+
+    /* Attempt to create objects in read/write file (should succeed) */
+    if((gidB = H5Gcreate(fid2, "/B", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidB) < 0)
+        TEST_ERROR
+
+    /* (Note that this object should get created in the "hidden" group for "A" in parent file) */
+    if((gidC = H5Gcreate(gidA, "C", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidC) < 0)
+        TEST_ERROR
+
+    /* Create file #3 (it will have R/W permissions) */
+    if((fid3 = H5Fcreate(filename3, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    /* Mount file #3 on file #2 */
+    if(H5Fmount(gidAM, ".", fid3, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Attempt to create objects in read/write file (should succeed) */
+    if((gidAMZ = H5Gcreate(fid1, "/A/M/Z", (size_t)0)) < 0)
+        TEST_ERROR
+
+    /* Get and verify file name */
+    if((name_len = H5Fget_name(gidAMZ, name, NAME_BUF_SIZE)) < 0)
+        TEST_ERROR
+    if(HDstrcmp(name, filename3) != 0)
+        TEST_ERROR
+
+    /* Close object in file #3 */
+    if(H5Gclose(gidAMZ) < 0)
+        TEST_ERROR
+
+
+    /* Attempt to create objects in read only file again (should fail) */
+    H5E_BEGIN_TRY {
+        bad_id = H5Gcreate(fid1, "/A/L", (size_t)0);
+    } H5E_END_TRY;
+    if(bad_id >= 0)
+        TEST_ERROR
+
+    /* Close group in mounted file */
+    if(H5Gclose(gidAM) < 0)
+        TEST_ERROR
+
+    /* Close group in parent file */
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    /* Close file #3 */
+    if(H5Fclose(fid3) < 0)
+        TEST_ERROR
+
+    /* Close file #2 */
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+    /* Close file #1 */
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Check that all file IDs have been closed */
+    if(H5I_nmembers(H5I_FILE) != 0)
+        TEST_ERROR
+    if(H5F_sfile_assert_num(0) != 0)
+        TEST_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Gclose(gidM);
+	H5Gclose(gidAMZ);
+	H5Gclose(gidAM);
+	H5Gclose(gidC);
+	H5Gclose(gidB);
+	H5Gclose(gidA);
+        H5Fclose(fid3);
+        H5Fclose(fid2);
+	H5Fclose(fid1);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_acc_perm() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_mult_mount
+ *
+ * Purpose:	Test that the library correctly handles mounting a file
+ *              multiple times at different locations in the parent file(s)
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, July 25, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_mult_mount(hid_t fapl)
+{
+    hid_t fid1 = -1, fid2 = -1, fid3 = -1, fid3_2 = -1;	/* File IDs */
+    hid_t gidA = -1, gidB = -1;         /* Group IDs in file #1 */
+    hid_t gidM = -1, gidN = -1, gidAM = -1;         /* Group IDs in file #2 */
+    hid_t gidS = -1, gidT = -1, gidU = -1, gidBS = -1, gidAMT = -1;	/* Group IDs in file #3 */
+    char    name[NAME_BUF_SIZE];        /* Buffer for filename retrieved */
+    char	filename1[1024],
+		filename2[1024],
+		filename3[1024]; 	/* Name of files to mount */
+
+    TESTING("multiple mounts");
+
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+    h5_fixname(FILENAME[2], fapl, filename3, sizeof filename3);
+
+    /* Create file #1 */
+    if((fid1 = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gcreate(fid1, "A", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    if((gidB = H5Gcreate(fid1, "B", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidB) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Create file #2 */
+    if((fid2 = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidM = H5Gcreate(fid2, "M", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidM) < 0)
+        TEST_ERROR
+
+    if((gidN = H5Gcreate(fid2, "N", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidN) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+
+    /* Create file #3 */
+    if((fid3 = H5Fcreate(filename3, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidS = H5Gcreate(fid3, "S", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidS) < 0)
+        TEST_ERROR
+
+    if((gidT = H5Gcreate(fid3, "T", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidT) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid3) < 0)
+        TEST_ERROR
+
+
+    /* Re-open files and mount file #2 in file #1 */
+    if((fid1 = H5Fopen(filename1, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gopen(fid1, "A")) < 0)
+        TEST_ERROR
+
+    if((gidB = H5Gopen(fid1, "B")) < 0)
+        TEST_ERROR
+
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    /* Mount files together */
+    if(H5Fmount(gidA, ".", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Open group in mounted file */
+    if((gidAM = H5Gopen(fid1, "A/M")) < 0)
+        TEST_ERROR
+
+    /* Open file #3 again */
+    if((fid3 = H5Fopen(filename3, H5F_ACC_RDWR, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    /* Mount file #3 on file #2 */
+    if(H5Fmount(gidAM, ".", fid3, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Re-open file #3 */
+    if((fid3_2 = H5Freopen(fid3)) < 0)
+        TEST_ERROR
+
+    /* Mount file #3 on file #1 also */
+    if(H5Fmount(gidB, ".", fid3_2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Open object in file #3 through file #2 mount path */
+    if((gidAMT = H5Gopen(fid1, "A/M/T")) < 0)
+        TEST_ERROR
+
+    /* Check name */
+    if(H5Iget_name(gidAMT, name, (size_t)NAME_BUF_SIZE ) < 0)
+        TEST_ERROR
+    if(HDstrcmp(name, "/A/M/T"))
+        TEST_ERROR
+
+    /* Create object in file #3 */
+    if((gidU = H5Gcreate(gidAMT, "U", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidU) < 0)
+        TEST_ERROR
+
+    /* Open object in file #3 through file #1 mount path */
+    if((gidBS = H5Gopen(fid1, "B/S")) < 0)
+        TEST_ERROR
+
+    /* Check name */
+    if(H5Iget_name(gidBS, name, (size_t)NAME_BUF_SIZE ) < 0)
+        TEST_ERROR
+    if(HDstrcmp(name, "/B/S"))
+        TEST_ERROR
+
+    /* Re-open object created in file #3 through file #1 mount path */
+    if((gidU = H5Gopen(gidBS, "/B/T/U")) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidU) < 0)
+        TEST_ERROR
+
+    /* Close groups in file #3 */
+    if(H5Gclose(gidBS) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidAMT) < 0)
+        TEST_ERROR
+
+    /* Close group in file #2 */
+    if(H5Gclose(gidAM) < 0)
+        TEST_ERROR
+
+    /* Close groups in file #1 */
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidB) < 0)
+        TEST_ERROR
+
+    /* Close file #3 IDs */
+    if(H5Fclose(fid3) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid3_2) < 0)
+        TEST_ERROR
+
+    /* Close file #2 */
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+    /* Close file #1 */
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Check that all file IDs have been closed */
+    if(H5I_nmembers(H5I_FILE) != 0)
+        TEST_ERROR
+    if(H5F_sfile_assert_num(0) != 0)
+        TEST_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Gclose(gidU);
+	H5Gclose(gidAMT);
+	H5Gclose(gidT);
+	H5Gclose(gidBS);
+	H5Gclose(gidS);
+	H5Gclose(gidAM);
+	H5Gclose(gidN);
+	H5Gclose(gidM);
+	H5Gclose(gidB);
+	H5Gclose(gidA);
+        H5Fclose(fid3_2);
+        H5Fclose(fid3);
+        H5Fclose(fid2);
+	H5Fclose(fid1);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_mult_mount() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_nested_survive
+ *
+ * Purpose:	Test that the library correctly handles unmounting & remounting
+ *              a file with files mounted on it
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, July 25, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_nested_survive(hid_t fapl)
+{
+    hid_t fid1 = -1, fid2 = -1, fid3 = -1;	/* File IDs */
+    hid_t gidA = -1;                    /* Group IDs in file #1 */
+    hid_t gidM = -1, gidAM = -1;        /* Group IDs in file #2 */
+    hid_t gidS = -1, gidMS = -1, gidAMS = -1;	/* Group IDs in file #3 */
+    char    name[NAME_BUF_SIZE];        /* Buffer for filename retrieved */
+    ssize_t name_len;                   /* Filename length */
+    char	filename1[1024],
+		filename2[1024],
+		filename3[1024]; 	/* Name of files to mount */
+
+    TESTING("nested mounts survive");
+
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+    h5_fixname(FILENAME[2], fapl, filename3, sizeof filename3);
+
+    /* Create file #1 */
+    if((fid1 = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gcreate(fid1, "A", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Create file #2 */
+    if((fid2 = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidM = H5Gcreate(fid2, "M", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidM) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+
+    /* Create file #3 */
+    if((fid3 = H5Fcreate(filename3, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidS = H5Gcreate(fid3, "S", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidS) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid3) < 0)
+        TEST_ERROR
+
+
+    /* Re-open files and mount file #2 in file #1 */
+    if((fid1 = H5Fopen(filename1, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gopen(fid1, "A")) < 0)
+        TEST_ERROR
+
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    /* Mount files together */
+    if(H5Fmount(gidA, ".", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Open group in mounted file */
+    if((gidAM = H5Gopen(fid1, "A/M")) < 0)
+        TEST_ERROR
+
+    /* Open file #3 again */
+    if((fid3 = H5Fopen(filename3, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    /* Mount file #3 on file #2 */
+    if(H5Fmount(gidAM, ".", fid3, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Open object in file #3 through file #1 mount path */
+    if((gidAMS = H5Gopen(fid1, "A/M/S")) < 0)
+        TEST_ERROR
+
+    /* Close group in file #3 */
+    if(H5Gclose(gidAMS) < 0)
+        TEST_ERROR
+
+    /* Check name */
+    if((name_len = H5Iget_name(gidAM, name, (size_t)NAME_BUF_SIZE )) < 0)
+        TEST_ERROR
+    if(name_len == 0 || HDstrcmp(name, "/A/M"))
+        TEST_ERROR
+
+    /* Unmount file #2 from file #1 */
+    if(H5Funmount(gidA, ".") < 0)
+        TEST_ERROR
+
+    /* Check name (should be unavailable) */
+    if((name_len = H5Iget_name(gidAM, name, (size_t)NAME_BUF_SIZE )) < 0)
+        TEST_ERROR
+    if(name_len != 0)
+        TEST_ERROR
+
+    /* Open object in file #3 through file #1 mount path (should fail) */
+    H5E_BEGIN_TRY {
+        gidAMS = H5Gopen(fid1, "A/M/S");
+    } H5E_END_TRY;
+    if(gidAMS >= 0)
+        TEST_ERROR
+
+    /* Open object in file #3 through file #2 mount path */
+    if((gidMS = H5Gopen(fid2, "M/S")) < 0)
+        TEST_ERROR
+
+    /* Check name */
+    if(H5Iget_name(gidMS, name, (size_t)NAME_BUF_SIZE ) < 0)
+        TEST_ERROR
+    if(HDstrcmp(name, "/M/S"))
+        TEST_ERROR
+
+    /* Close group in file #3 */
+    if(H5Gclose(gidMS) < 0)
+        TEST_ERROR
+
+    /* Re-mount file #2 on file #1 */
+    if(H5Fmount(gidA, ".", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Open object in file #3 through file #1 mount path again */
+    if((gidAMS = H5Gopen(fid1, "A/M/S")) < 0)
+        TEST_ERROR
+
+    /* Check name */
+    if(H5Iget_name(gidAMS, name, (size_t)NAME_BUF_SIZE ) < 0)
+        TEST_ERROR
+    if(HDstrcmp(name, "/A/M/S"))
+        TEST_ERROR
+
+    /* Close group in file #3 */
+    if(H5Gclose(gidAMS) < 0)
+        TEST_ERROR
+
+    /* Close group in file #2 */
+    if(H5Gclose(gidAM) < 0)
+        TEST_ERROR
+
+    /* Close groups in file #1 */
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    /* Close file #3 IDs */
+    if(H5Fclose(fid3) < 0)
+        TEST_ERROR
+
+    /* Close file #2 */
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+    /* Close file #1 */
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Check that all file IDs have been closed */
+    if(H5I_nmembers(H5I_FILE) != 0)
+        TEST_ERROR
+    if(H5F_sfile_assert_num(0) != 0)
+        TEST_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Gclose(gidAMS);
+	H5Gclose(gidMS);
+	H5Gclose(gidS);
+	H5Gclose(gidAM);
+	H5Gclose(gidM);
+	H5Gclose(gidA);
+        H5Fclose(fid3);
+        H5Fclose(fid2);
+	H5Fclose(fid1);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_nested_survive() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_close_parent
+ *
+ * Purpose:	Test that the library correctly handles holding open a child
+ *              file while unmounting & closing parent.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, July 25, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_close_parent(hid_t fapl)
+{
+    hid_t fid1 = -1, fid2 = -1;		/* File IDs */
+    hid_t gidA = -1;                    /* Group IDs in file #1 */
+    hid_t gidM = -1;                    /* Group IDs in file #2 */
+    char    name[NAME_BUF_SIZE];        /* Buffer for filename retrieved */
+    ssize_t name_len;                   /* Filename length */
+    char	filename1[1024],
+		filename2[1024]; 	/* Name of files to mount */
+
+    TESTING("close parent");
+
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+
+    /* Create file #1 */
+    if((fid1 = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gcreate(fid1, "A", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Create file #2 */
+    if((fid2 = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidM = H5Gcreate(fid2, "M", (size_t)0)) < 0)
+        TEST_ERROR
+
+    if(H5Gclose(gidM) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+
+    /* Re-open files and mount file #2 in file #1 */
+    if((fid1 = H5Fopen(filename1, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gopen(fid1, "A")) < 0)
+        TEST_ERROR
+
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    /* Mount files together */
+    if(H5Fmount(gidA, ".", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+
+    /* Open group in mounted file */
+    if((gidM = H5Gopen(fid1, "A/M")) < 0)
+        TEST_ERROR
+
+    /* Close group in file #1 */
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    /* Close files #1 & #2 */
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+    /* Check that all file IDs have been closed */
+    if(H5I_nmembers(H5I_FILE) != 0)
+        TEST_ERROR
+
+    /* Both underlying shared files should be open still */
+    if(H5F_sfile_assert_num(2) != 0)
+        TEST_ERROR
+
+    /* Check the name of "M" is still defined */
+    if((name_len = H5Iget_name(gidM, name, (size_t)NAME_BUF_SIZE )) < 0)
+        TEST_ERROR
+    if(name_len == 0 || HDstrcmp(name, "/A/M"))
+        TEST_ERROR
+
+    /* Unmount file #2 from file #1, closing file #1 */
+    if(H5Funmount(gidM, "/A") < 0)
+        TEST_ERROR
+
+    /* Check the name of "M" is not defined any longer */
+    if((name_len = H5Iget_name(gidM, name, (size_t)NAME_BUF_SIZE )) < 0)
+        TEST_ERROR
+    if(name_len != 0)
+        TEST_ERROR
+
+    /* Just file #2's underlying shared file should be open still */
+    if(H5F_sfile_assert_num(1) != 0)
+        TEST_ERROR
+
+    /* Close group in file #2, letting file #2 close */
+    if(H5Gclose(gidM) < 0)
+        TEST_ERROR
+
+    /* All underlying shared file structs should be closed */
+    if(H5F_sfile_assert_num(0) != 0)
+        TEST_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Gclose(gidM);
+	H5Gclose(gidA);
+        H5Fclose(fid2);
+	H5Fclose(fid1);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_close_parent() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_cut_graph
+ *
+ * Purpose:	Test that the library correctly handles cutting a graph of
+ *              mounted files.
+ *
+ *              Initial file mounting graph is built up to this:
+ *
+ *                              [1]
+ *                             /   \
+ *                            /     \
+ *                          "A"     "B"
+ *                          /         \
+ *                         /           \
+ *                       [2]           [3]
+ *                       /  \         /   \
+ *                     "D"  "E"     "H"   "I"
+ *                     /      \     /       \
+ *                   [4]      [5] [6]       [7]
+ *                    |        |   |         |
+ *                   "K"      "M" "O"       "Q"
+ *
+ *              ( where [n] is a file in mounting hierarchy and "X" is a group
+ *               in a file )
+ *
+ *              Objects in file #5 & file #7 are opened and all other
+ *              file & object IDs to the hierarchy are closed.
+ *
+ *              Then file #2 is unmounted from file #1, which should make a
+ *              small tree of files 2, 4 & 5 and a larger tree of files 1, 3,
+ *              6 & 7.
+ *
+ *              Then, the object in file #5 is closed, which should release its
+ *              small tree of files.
+ *
+ *              Then, file #3 is unmounted from file #1, making it's tree
+ *              only 3, 6 & 7.
+ *
+ *              Then, the object in file #7 is closed, which should release the
+ *              remaining small tree of files.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, July 25, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_cut_graph(hid_t fapl)
+{
+    hid_t fid1 = -1, fid2 = -1, fid3 = -1,
+        fid4 = -1, fid5 = -1, fid6 = -1, fid7 = -1;	/* File IDs */
+    hid_t gidA = -1, gidB = -1;         /* Group IDs in file #1 */
+    hid_t gidD = -1, gidE = -1;         /* Group IDs in file #2 */
+    hid_t gidH = -1, gidI = -1;         /* Group IDs in file #3 */
+    hid_t gidK = -1;                    /* Group IDs in file #4 */
+    hid_t gidM = -1;                    /* Group IDs in file #5 */
+    hid_t gidO = -1;                    /* Group IDs in file #6 */
+    hid_t gidQ = -1;                    /* Group IDs in file #7 */
+    char    name[NAME_BUF_SIZE];        /* Buffer for filename retrieved */
+    ssize_t name_len;                   /* Filename length */
+    int obj_count;                      /* Number of objects open */
+    char	filename1[NAME_BUF_SIZE],
+		filename2[NAME_BUF_SIZE],
+		filename3[NAME_BUF_SIZE],
+		filename4[NAME_BUF_SIZE],
+		filename5[NAME_BUF_SIZE],
+		filename6[NAME_BUF_SIZE],
+		filename7[NAME_BUF_SIZE]; 	/* Name of files to mount */
+
+    TESTING("cutting mount graph");
+
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+    h5_fixname(FILENAME[2], fapl, filename3, sizeof filename3);
+    h5_fixname(FILENAME[3], fapl, filename4, sizeof filename3);
+    h5_fixname(FILENAME[4], fapl, filename5, sizeof filename3);
+    h5_fixname(FILENAME[5], fapl, filename6, sizeof filename3);
+    h5_fixname(FILENAME[6], fapl, filename7, sizeof filename3);
+
+    /* Create file #1 & it's groups */
+    if((fid1 = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gcreate(fid1, "A", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    if((gidB = H5Gcreate(fid1, "B", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidB) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Create file #2 & it's groups */
+    if((fid2 = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidD = H5Gcreate(fid2, "D", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidD) < 0)
+        TEST_ERROR
+
+    if((gidE = H5Gcreate(fid2, "E", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidE) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+
+    /* Create file #3 & it's groups */
+    if((fid3 = H5Fcreate(filename3, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidH = H5Gcreate(fid3, "H", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidH) < 0)
+        TEST_ERROR
+
+    if((gidI = H5Gcreate(fid3, "I", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidI) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid3) < 0)
+        TEST_ERROR
+
+    /* Create file #4 & it's group */
+    if((fid4 = H5Fcreate(filename4, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidK = H5Gcreate(fid4, "K", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidK) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid4) < 0)
+        TEST_ERROR
+
+    /* Create file #5 & it's group */
+    if((fid5 = H5Fcreate(filename5, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidM = H5Gcreate(fid5, "M", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidM) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid5) < 0)
+        TEST_ERROR
+
+    /* Create file #6 & it's group */
+    if((fid6 = H5Fcreate(filename6, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidO = H5Gcreate(fid6, "O", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidO) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid6) < 0)
+        TEST_ERROR
+
+    /* Create file #7 & it's group */
+    if((fid7 = H5Fcreate(filename7, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidQ = H5Gcreate(fid7, "Q", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidQ) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid7) < 0)
+        TEST_ERROR
+
+
+    /* Re-open files and build mount hierarchy */
+    if((fid1 = H5Fopen(filename1, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    /* Mount file #2 at /A */
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+    if(H5Fmount(fid1, "/A", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+    /* Mount file #3 at /B */
+    if((fid3 = H5Fopen(filename3, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+    if(H5Fmount(fid1, "/B", fid3, H5P_DEFAULT) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid3) < 0)
+        TEST_ERROR
+
+    /* Mount file #4 at /A/D */
+    if((fid4 = H5Fopen(filename4, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+    if(H5Fmount(fid1, "/A/D", fid4, H5P_DEFAULT) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid4) < 0)
+        TEST_ERROR
+
+    /* Mount file #5 at /A/E */
+    if((fid5 = H5Fopen(filename5, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+    if(H5Fmount(fid1, "/A/E", fid5, H5P_DEFAULT) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid5) < 0)
+        TEST_ERROR
+
+    /* Mount file #6 at /B/H */
+    if((fid6 = H5Fopen(filename6, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+    if(H5Fmount(fid1, "/B/H", fid6, H5P_DEFAULT) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid6) < 0)
+        TEST_ERROR
+
+    /* Mount file #7 at /B/H */
+    if((fid7 = H5Fopen(filename7, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+    if(H5Fmount(fid1, "/B/I", fid7, H5P_DEFAULT) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid7) < 0)
+        TEST_ERROR
+
+    /* Open object in file #5 */
+    if((gidM = H5Gopen(fid1, "A/E/M")) < 0)
+        TEST_ERROR
+
+    /* Check name */
+    if((name_len = H5Iget_name(gidM, name, (size_t)NAME_BUF_SIZE )) < 0)
+        TEST_ERROR
+    if(name_len == 0 || HDstrcmp(name, "/A/E/M"))
+        TEST_ERROR
+
+    /* Open object in file #7 */
+    if((gidQ = H5Gopen(fid1, "B/I/Q")) < 0)
+        TEST_ERROR
+
+    /* Check name */
+    if((name_len = H5Iget_name(gidQ, name, (size_t)NAME_BUF_SIZE )) < 0)
+        TEST_ERROR
+    if(name_len == 0 || HDstrcmp(name, "/B/I/Q"))
+        TEST_ERROR
+
+    /* Close file #1 */
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Get a new file ID for file #5 */
+    if((fid5 = H5Iget_file_id(gidM)) < 0)
+        TEST_ERROR
+
+    /* Check the number of objects currently open */
+    if((obj_count = H5Fget_obj_count(fid5, H5F_OBJ_ALL)) < 0)
+        TEST_ERROR
+    if(obj_count != 2)  /* one object and the file ID */
+        TEST_ERROR
+
+    /* Close ID on file #5 */
+    if(H5Fclose(fid5) < 0)
+        TEST_ERROR
+
+
+    /* Get a new file ID for file #7 */
+    if((fid7 = H5Iget_file_id(gidQ)) < 0)
+        TEST_ERROR
+
+    /* Check the number of objects currently open */
+    if((obj_count = H5Fget_obj_count(fid7, H5F_OBJ_ALL)) < 0)
+        TEST_ERROR
+    if(obj_count != 2)  /* one object and the file ID */
+        TEST_ERROR
+
+    /* Close ID on file #7 */
+    if(H5Fclose(fid7) < 0)
+        TEST_ERROR
+
+    /* Check that all file IDs have been closed */
+    if(H5I_nmembers(H5I_FILE) != 0)
+        TEST_ERROR
+
+
+    /* Unmount file #2 from file #1, cutting the graph */
+    if(H5Funmount(gidM, "/A") < 0)
+        TEST_ERROR
+
+    /* Attempt to open an object in file #4, from file #1 */
+    H5E_BEGIN_TRY {
+        gidK = H5Gopen(gidQ, "/A/D/K");
+    } H5E_END_TRY;
+    if(gidK >= 0)
+        TEST_ERROR
+
+    /* Open object in file #4 from file #5 */
+    if((gidK = H5Gopen(gidM, "/D/K")) < 0)
+        TEST_ERROR
+
+    /* Check the name of "K" is correct */
+    if((name_len = H5Iget_name(gidK, name, (size_t)NAME_BUF_SIZE )) < 0)
+        TEST_ERROR
+    if(name_len == 0 || HDstrcmp(name, "/D/K"))
+        TEST_ERROR
+
+    if(H5Gclose(gidK) < 0)
+        TEST_ERROR
+
+    /* Attempt to open an object in file #6, from file #5 */
+    H5E_BEGIN_TRY {
+        gidO = H5Gopen(gidM, "/B/H/O");
+    } H5E_END_TRY;
+    if(gidO >= 0)
+        TEST_ERROR
+
+    /* Open object in file #6 from file #7 */
+    if((gidO = H5Gopen(gidQ, "/B/H/O")) < 0)
+        TEST_ERROR
+
+    /* Check the name of "O" is correct */
+    if((name_len = H5Iget_name(gidO, name, (size_t)NAME_BUF_SIZE )) < 0)
+        TEST_ERROR
+    if(name_len == 0 || HDstrcmp(name, "/B/H/O"))
+        TEST_ERROR
+
+    if(H5Gclose(gidO) < 0)
+        TEST_ERROR
+
+    /* Check the name of "M" is not defined any longer */
+    if((name_len = H5Iget_name(gidM, name, (size_t)NAME_BUF_SIZE )) < 0)
+        TEST_ERROR
+    if(name_len != 0)
+        TEST_ERROR
+
+    /* Check the name of "Q" is still defined */
+    if((name_len = H5Iget_name(gidQ, name, (size_t)NAME_BUF_SIZE )) < 0)
+        TEST_ERROR
+    if(name_len == 0 || HDstrcmp(name, "/B/I/Q"))
+        TEST_ERROR
+
+    /* Check that all seven underlying files are still opened */
+    if(H5F_sfile_assert_num(7) != 0)
+        TEST_ERROR
+
+    /* Close "M" in file #5, which should close files 2, 4 & 5 */
+    if(H5Gclose(gidM) < 0)
+        TEST_ERROR
+
+    /* Check that only four underlying files are still opened */
+    if(H5F_sfile_assert_num(4) != 0)
+        TEST_ERROR
+
+    /* Unmount file #3 from file #1, cutting the graph */
+    if(H5Funmount(gidQ, "/B") < 0)
+        TEST_ERROR
+
+    /* Check that only three underlying files are still opened */
+    /* (File #1 should close after being cut off from the graph) */
+    if(H5F_sfile_assert_num(3) != 0)
+        TEST_ERROR
+
+    /* Check the name of "Q" is not defined any longer */
+    if((name_len = H5Iget_name(gidQ, name, (size_t)NAME_BUF_SIZE )) < 0)
+        TEST_ERROR
+    if(name_len != 0)
+        TEST_ERROR
+
+    /* Open object in file #6 from file #7 */
+    if((gidO = H5Gopen(gidQ, "/H/O")) < 0)
+        TEST_ERROR
+
+    /* Check the name of "O" is correct */
+    if((name_len = H5Iget_name(gidO, name, (size_t)NAME_BUF_SIZE )) < 0)
+        TEST_ERROR
+    if(name_len == 0 || HDstrcmp(name, "/H/O"))
+        TEST_ERROR
+
+    if(H5Gclose(gidO) < 0)
+        TEST_ERROR
+
+    /* Close last object and let files 3, 6 & 7 close */
+    if(H5Gclose(gidQ) < 0)
+        TEST_ERROR
+
+    /* Verify that all underlying shared files have been closed now */
+    if(H5F_sfile_assert_num(0) != 0)
+        TEST_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Gclose(gidQ);
+	H5Gclose(gidO);
+	H5Gclose(gidM);
+	H5Gclose(gidK);
+	H5Gclose(gidI);
+	H5Gclose(gidH);
+	H5Gclose(gidE);
+	H5Gclose(gidD);
+	H5Gclose(gidB);
+	H5Gclose(gidA);
+        H5Fclose(fid7);
+        H5Fclose(fid6);
+        H5Fclose(fid5);
+        H5Fclose(fid4);
+        H5Fclose(fid3);
+        H5Fclose(fid2);
+	H5Fclose(fid1);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_cut_graph() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_symlink
+ *
+ * Purpose:	Test that the library correctly handles symlinks across
+ *              mounted files.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, July 25, 2005
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_symlink(hid_t fapl)
+{
+    hid_t fid1 = -1, fid2 = -1, fid3 = -1; /* File IDs */
+    hid_t gidA = -1, gidB = -1;         /* Group IDs in file #1 */
+    hid_t gidD = -1, gidE = -1;         /* Group IDs in file #2 */
+    hid_t gidH = -1, gidI = -1;         /* Group IDs in file #3 */
+    hid_t gidL = -1;         		/* Group IDs through soft link to file #3 */
+    char    name[NAME_BUF_SIZE];        /* Buffer for filename retrieved */
+    ssize_t name_len;                   /* Filename length */
+    char	filename1[NAME_BUF_SIZE],
+		filename2[NAME_BUF_SIZE],
+		filename3[NAME_BUF_SIZE]; 	/* Name of files to mount */
+
+    TESTING("symlinks");
+
+    h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
+    h5_fixname(FILENAME[1], fapl, filename2, sizeof filename2);
+    h5_fixname(FILENAME[2], fapl, filename3, sizeof filename3);
+
+    /* Create file #1 & it's groups */
+    if((fid1 = H5Fcreate(filename1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidA = H5Gcreate(fid1, "A", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidA) < 0)
+        TEST_ERROR
+
+    if((gidB = H5Gcreate(fid1, "B", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidB) < 0)
+        TEST_ERROR
+
+    /* Create soft link to mounted object */
+    if(H5Glink(fid1, H5G_LINK_SOFT, "./A/D/H", "L") < 0) /* Soft link */
+        TEST_ERROR
+
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+
+    /* Create file #2 & it's groups */
+    if((fid2 = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidD = H5Gcreate(fid2, "D", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidD) < 0)
+        TEST_ERROR
+
+    if((gidE = H5Gcreate(fid2, "E", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidE) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+
+    /* Create file #3 & it's groups */
+    if((fid3 = H5Fcreate(filename3, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    if((gidH = H5Gcreate(fid3, "H", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidH) < 0)
+        TEST_ERROR
+
+    if((gidI = H5Gcreate(fid3, "I", (size_t)0)) < 0)
+        TEST_ERROR
+    if(H5Gclose(gidI) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(fid3) < 0)
+        TEST_ERROR
+
+
+    /* Re-open files and build mount hierarchy */
+    if((fid1 = H5Fopen(filename1, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+
+    /* Mount file #2 at /A */
+    if((fid2 = H5Fopen(filename2, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+    if(H5Fmount(fid1, "/A", fid2, H5P_DEFAULT) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid2) < 0)
+        TEST_ERROR
+
+    /* Attempt to open an object in file #3 (should fail) */
+    H5E_BEGIN_TRY {
+        gidL = H5Gopen(fid1, "L");
+    } H5E_END_TRY;
+    if(gidL >= 0)
+        TEST_ERROR
+
+    /* Mount file #3 at /A/D */
+    if((fid3 = H5Fopen(filename3, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR
+    if(H5Fmount(fid1, "/A/D", fid3, H5P_DEFAULT) < 0)
+        TEST_ERROR
+    if(H5Fclose(fid3) < 0)
+        TEST_ERROR
+
+    /* Open soft link to object in file #3 */
+    if((gidL = H5Gopen(fid1, "L")) < 0)
+        TEST_ERROR
+
+    /* Check the name of "L" is correct */
+    if((name_len = H5Iget_name(gidL, name, (size_t)NAME_BUF_SIZE )) < 0)
+        TEST_ERROR
+    if(name_len == 0 || HDstrcmp(name, "/L"))
+        TEST_ERROR
+
+    /* Close file #1 */
+    if(H5Fclose(fid1) < 0)
+        TEST_ERROR
+
+    /* Verify that all 3 underlying shared files are still open */
+    if(H5F_sfile_assert_num(3) != 0)
+        TEST_ERROR
+
+    /* Close object opened through soft link */
+    if(H5Gclose(gidL) < 0)
+        TEST_ERROR
+
+    /* Verify that all underlying shared files have been closed now */
+    if(H5F_sfile_assert_num(0) != 0)
+        TEST_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Gclose(gidL);
+	H5Gclose(gidI);
+	H5Gclose(gidH);
+	H5Gclose(gidE);
+	H5Gclose(gidD);
+	H5Gclose(gidB);
+	H5Gclose(gidA);
+        H5Fclose(fid3);
+        H5Fclose(fid2);
+	H5Fclose(fid1);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_symlink() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Test file mounting
+ *
+ * Return:	Success:	zero
+ *
+ *		Failure:	non-zero
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, October  7, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    int		nerrors = 0;
+    hid_t	fapl = -1;
+
+    h5_reset();
+    fapl = h5_fileaccess();
+    if (setup(fapl)<0) goto error;
+
+    nerrors += test_basic(fapl);
+    nerrors += test_illegal(fapl);
+    nerrors += test_hide(fapl);
+    nerrors += test_assoc(fapl);
+    nerrors += test_mntlnk(fapl);
+    nerrors += test_unlink(fapl);
+    nerrors += test_move(fapl);
+    nerrors += test_mvmpt(fapl);
+    nerrors += test_preopen(fapl);
+    nerrors += test_postopen(fapl);
+    nerrors += test_interlink(fapl);
+    nerrors += test_uniformity(fapl);
+    nerrors += test_close(fapl);
+    nerrors += test_mount_after_close(fapl);
+    nerrors += test_mount_after_unmount(fapl);
+    nerrors += test_missing_unmount(fapl);
+    nerrors += test_hold_open_file(fapl);
+    nerrors += test_hold_open_group(fapl);
+    nerrors += test_fcdegree_same(fapl);
+    nerrors += test_fcdegree_semi(fapl);
+    nerrors += test_fcdegree_strong(fapl);
+    nerrors += test_acc_perm(fapl);
+    nerrors += test_mult_mount(fapl);
+    nerrors += test_nested_survive(fapl);
+    nerrors += test_close_parent(fapl);
+    nerrors += test_cut_graph(fapl);
+    nerrors += test_symlink(fapl);
+
+    if (nerrors) goto error;
+    puts("All mount tests passed.");
+    h5_cleanup(FILENAME, fapl);
+    return 0;
+
+ error:
+    puts("***** MOUNT ERRORS *****");
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/test/mtime.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/mtime.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/mtime.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,206 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Thursday, July 30, 1998
+ *
+ * Purpose:	Determines if the modification time message is working
+ *		properly.  Specifically, the code in H5O_mtime_decode() is
+ *		very OS-dependent and this test tries to figure out if it's
+ *		working properly.
+ */
+#include "h5test.h"
+
+const char *FILENAME[] = {
+    "mtime",
+    NULL
+};
+
+#define TESTFILE1       "tmtimeo.h5"
+#define MTIME1          1055531866
+#define TESTFILE2       "tmtimen.h5"
+#define MTIME2          1041606478
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	H5O_mtime_decode() test.
+ *
+ * Return:	Success:
+ *
+ *		Failure:
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 30, 1998
+ *
+ * Modifications:
+ *              Added checks for old and new modification time messages
+ *              in pre-created datafiles (generated with gen_old_mtime.c and
+ *              gen_new_mtime.c).
+ *              Quincey Koziol
+ *              Friday, January  3, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    hid_t	fapl, file, space, dset;
+    hsize_t	size[1] = {2};
+    time_t	now;
+    struct tm	*tm;
+    H5G_stat_t	sb1, sb2;
+    signed char	buf1[32], buf2[32];
+    char	filename[1024];
+
+    h5_reset();
+    fapl = h5_fileaccess();
+
+    TESTING("modification time messages");
+
+    /* Create the file, create a dataset, then close the file */
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	TEST_ERROR;
+    if ((space=H5Screate_simple(1, size, NULL))<0) TEST_ERROR;
+    if ((dset=H5Dcreate(file, "dset", H5T_NATIVE_SCHAR, space, H5P_DEFAULT))<0)
+	TEST_ERROR;
+    now = time(NULL);
+    if (H5Dclose(dset)<0) TEST_ERROR;
+    if (H5Sclose(space)<0) TEST_ERROR;
+    if (H5Fclose(file)<0) TEST_ERROR;
+
+    /*
+     * Open the file and get the modification time. We'll test the new
+     * H5Gget_objinfo() arguments too: being able to stat something without
+     * knowing its name.
+     */
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file = H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) TEST_ERROR;
+    if (H5Gget_objinfo(file, "dset", TRUE, &sb1)<0) TEST_ERROR;
+    if ((dset=H5Dopen(file, "dset"))<0) TEST_ERROR;
+    if (H5Gget_objinfo(dset, ".", TRUE, &sb2)<0) TEST_ERROR;
+    if (H5Dclose(dset)<0) TEST_ERROR;
+    if (H5Fclose(file)<0) TEST_ERROR;
+
+    /* Compare times from the two ways of calling H5Gget_objinfo() */
+    if (sb1.objno[0]!=sb2.objno[0] || sb1.objno[1]!=sb2.objno[1] ||
+	sb1.mtime!=sb2.mtime) {
+        H5_FAILED();
+	puts("    Calling H5Gget_objinfo() with the dataset ID returned");
+	puts("    different values than calling it with a file and dataset");
+	puts("    name.");
+	goto error;
+    }
+
+    /* Compare times -- they must be within 60 seconds of one another */
+    if (0==sb1.mtime) {
+	SKIPPED();
+	puts("    The modification time could not be decoded on this OS.");
+	puts("    Modification times will be mantained in the file but");
+	puts("    cannot be queried on this system.  See H5O_mtime_decode().");
+	return 0;
+    } else if (fabs(HDdifftime(now, sb1.mtime))>60.0) {
+        H5_FAILED();
+	tm = localtime(&(sb1.mtime));
+	strftime((char*)buf1, sizeof buf1, "%Y-%m-%d %H:%M:%S", tm);
+	tm = localtime(&now);
+	strftime((char*)buf2, sizeof buf2, "%Y-%m-%d %H:%M:%S", tm);
+	printf("    got: %s\n    ans: %s\n", buf1, buf2);
+	goto error;
+    }
+    PASSED();
+
+    /* Check opening existing file with old-style modification time information
+     * and make certain that the time is correct
+     */
+    TESTING("accessing old modification time messages");
+
+    {
+    char testfile[512]="";
+    char *srcdir = HDgetenv("srcdir");
+    if (srcdir && ((HDstrlen(srcdir) + strlen(TESTFILE1) + 1) < sizeof(testfile))){
+	HDstrcpy(testfile, srcdir);
+	HDstrcat(testfile, "/");
+    }
+    HDstrcat(testfile, TESTFILE1);
+    file = H5Fopen(testfile, H5F_ACC_RDONLY, H5P_DEFAULT);
+    if (file >= 0){
+        if(H5Gget_objinfo(file, "/Dataset1", TRUE, &sb1)<0)
+            TEST_ERROR;
+        if(sb1.mtime!=MTIME1) {
+            H5_FAILED();
+               /* If this fails, examine H5Omtime.c.  Modification time is very
+                * system dependant (e.g., on Windows DST must be hardcoded). */
+            puts("    Old modification time incorrect");
+            goto error;
+        }
+        if (H5Fclose(file)<0) TEST_ERROR;
+    }
+    else {
+        H5_FAILED();
+	printf("***cannot open the pre-created old modification test file (%s)\n",
+	    testfile);
+	goto error;
+    } /* end else */
+    }
+    PASSED();
+
+    /* Check opening existing file with new-style modification time information
+     * and make certain that the time is correct
+     */
+    TESTING("accessing new modification time messages");
+
+    {
+    char testfile[512]="";
+    char *srcdir = HDgetenv("srcdir");
+    if (srcdir && ((HDstrlen(srcdir) + strlen(TESTFILE2) + 1) < sizeof(testfile))){
+	HDstrcpy(testfile, srcdir);
+	HDstrcat(testfile, "/");
+    }
+    HDstrcat(testfile, TESTFILE2);
+    file = H5Fopen(testfile, H5F_ACC_RDONLY, H5P_DEFAULT);
+    if (file >= 0){
+        if(H5Gget_objinfo(file, "/Dataset1", TRUE, &sb2)<0)
+            TEST_ERROR;
+        if(sb2.mtime!=MTIME2) {
+           H5_FAILED();
+           puts("    Modification time incorrect.");
+           goto error;
+        }
+        if (H5Fclose(file)<0) TEST_ERROR;
+    }
+    else {
+        H5_FAILED();
+	printf("***cannot open the pre-created old modification test file (%s)\n",
+	    testfile);
+	goto error;
+    } /* end else */
+    }
+    PASSED();
+
+    /* All looks good */
+    puts("All modification time tests passed.");
+    h5_cleanup(FILENAME, fapl);
+    return 0;
+
+    /* Something broke */
+    error:
+    return 1;
+}
+
+
+

Added: packages/hdf5/branches/upstream/current/test/noencoder.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/noencoder.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/ntypes.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/ntypes.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/ntypes.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2597 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:	Raymond Lu
+ *              October 14, 2001
+ *
+ * Purpose:	Tests the H5Tget_native_type function.
+ */
+
+#include "h5test.h"
+
+const char *FILENAME[] = {
+    "ntypes",
+    NULL
+};
+
+#define DIM0    100
+#define DIM1    200
+#define DIM3    20
+
+
+int	ipoints2[DIM0][DIM1], icheck2[DIM0][DIM1];
+short	spoints2[DIM0][DIM1], scheck2[DIM0][DIM1];
+int	ipoints3[DIM0][DIM1][5], icheck3[DIM0][DIM1][5];
+
+#define DSET_ATOMIC_NAME_1	"atomic_type_1"
+#define DSET_ATOMIC_NAME_2	"atomic_type_2"
+#define DSET_ATOMIC_NAME_3	"atomic_type_3"
+#define DSET_ATOMIC_NAME_4	"atomic_type_4"
+#define DSET_ATOMIC_NAME_5	"atomic_type_5"
+#define DSET_COMPOUND_NAME      "compound_type"
+#define DSET_COMPOUND_NAME_2    "compound_type_2"
+#define DSET_COMPOUND_NAME_3    "compound_type_3"
+#define DSET_COMPOUND_NAME_4    "compound_type_4"
+#define DSET_ENUM_NAME	        "enum_type"
+#define DSET_ARRAY_NAME	        "array_type"
+#define DSET_ARRAY2_NAME	"array_type_2"
+#define DSET_VL_NAME	        "vl_type"
+#define DSET_VLSTR_NAME         "vlstr_type"
+#define DSET_STR_NAME           "str_type"
+#define DSET_OPAQUE_NAME        "opaque_type"
+#define DSET_BITFIELD_NAME      "bitfield_type"
+
+#define SPACE1_DIM1             4
+#define SPACE1_RANK             1
+#define SPACE2_RANK	        2
+#define SPACE2_DIM1	        10
+#define SPACE2_DIM2	        10
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_atomic_dtype
+ *
+ * Purpose:	Test H5Tget_native_type for atomic datatype
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_atomic_dtype(hid_t file)
+{
+    hid_t		dataset, space;
+    hid_t               dtype, native_type;
+    int			i, j, n;
+    hsize_t		dims[2];
+    void                *tmp;
+
+    TESTING("atomic datatype");
+
+    /* Initialize the dataset */
+    for (i = n = 0; i < DIM0; i++) {
+	for (j = 0; j < DIM1; j++) {
+	    ipoints2[i][j] = n++;
+	}
+    }
+
+    /* Create the data space */
+    dims[0] = DIM0;
+    dims[1] = DIM1;
+    if ((space = H5Screate_simple(2, dims, NULL))<0) TEST_ERROR;
+
+    /*------------------- Test data values ------------------------*/
+    /* Create the dataset */
+    if ((dataset = H5Dcreate(file, DSET_ATOMIC_NAME_1, H5T_STD_I32BE, space,
+			     H5P_DEFAULT))<0) TEST_ERROR;
+
+    /* Write the data to the dataset */
+    if (H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, ipoints2)<0)
+	TEST_ERROR;
+
+    /* Close dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Open dataset again to check H5Tget_native_type */
+    if((dataset=H5Dopen(file, DSET_ATOMIC_NAME_1))<0) TEST_ERROR;
+
+    if((dtype=H5Dget_type(dataset))<0) TEST_ERROR;
+
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Verify the datatype retrieved and converted */
+    if(H5Tget_order(native_type) != H5Tget_order(H5T_NATIVE_INT))
+        TEST_ERROR;
+    if(H5Tget_size(native_type) < H5Tget_size(H5T_STD_I32BE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(native_type))
+        TEST_ERROR;
+
+    /* Read the dataset back.  The temporary buffer is for special platforms
+     * like Cray. */
+    tmp = malloc((size_t)(DIM0*DIM1*H5Tget_size(native_type)));
+
+    if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp)<0)
+	TEST_ERROR;
+
+    /* Copy data from temporary buffer to destination buffer */
+    memcpy(icheck2, tmp, (size_t)(DIM0*DIM1*H5Tget_size(native_type)));
+    free(tmp);
+
+    /* Convert to the integer type */
+    if(H5Tconvert(native_type, H5T_NATIVE_INT, (DIM0*DIM1), icheck2, NULL, H5P_DEFAULT)<0)
+        TEST_ERROR;
+
+    /* Check that the values read are the same as the values written */
+    for (i = 0; i < DIM0; i++) {
+	for (j = 0; j < DIM1; j++) {
+	    if (ipoints2[i][j] != icheck2[i][j]) {
+		H5_FAILED();
+		printf("    Read different values than written.\n");
+		printf("    At index %d,%d\n", i, j);
+		goto error;
+	    }
+	}
+    }
+
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+    if(H5Tclose(native_type)<0) TEST_ERROR;
+    if(H5Tclose(dtype)<0) TEST_ERROR;
+
+    /*------------------ Test different data types ----------------*/
+
+    /* Create the dataset of H5T_STD_I64LE */
+    if ((dataset = H5Dcreate(file, DSET_ATOMIC_NAME_2, H5T_STD_I64LE, space,
+			     H5P_DEFAULT))<0) TEST_ERROR;
+
+    if((dtype=H5Dget_type(dataset))<0) TEST_ERROR;
+
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Verify the datatype retrieved and converted */
+    if(H5Tget_order(native_type) != H5Tget_order(H5T_NATIVE_LLONG))
+        TEST_ERROR;
+    if(H5Tget_size(native_type) < H5Tget_size(H5T_STD_I64LE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(native_type))
+        TEST_ERROR;
+
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+    if(H5Tclose(native_type)<0) TEST_ERROR;
+    if(H5Tclose(dtype)<0) TEST_ERROR;
+
+
+    /* Create the dataset of H5T_STD_I8LE */
+    if ((dataset = H5Dcreate(file, DSET_ATOMIC_NAME_3, H5T_STD_I8LE, space,
+			     H5P_DEFAULT))<0) TEST_ERROR;
+
+    if((dtype=H5Dget_type(dataset))<0) TEST_ERROR;
+
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_ASCEND))<0)
+        TEST_ERROR;
+
+    /* Verify the datatype retrieved and converted */
+    if(H5Tget_order(native_type) != H5Tget_order(H5T_NATIVE_CHAR))
+        TEST_ERROR;
+    if(H5Tget_size(native_type) < H5Tget_size(H5T_STD_I8LE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(native_type))
+        TEST_ERROR;
+
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+    if(H5Tclose(native_type)<0) TEST_ERROR;
+    if(H5Tclose(dtype)<0) TEST_ERROR;
+
+
+    /* Create the dataset of H5T_IEEE_F32BE */
+    if ((dataset = H5Dcreate(file, DSET_ATOMIC_NAME_4, H5T_IEEE_F32BE, space,
+			     H5P_DEFAULT))<0) TEST_ERROR;
+
+    if((dtype=H5Dget_type(dataset))<0) TEST_ERROR;
+
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DESCEND))<0)
+        TEST_ERROR;
+
+    /* Verify the datatype retrieved and converted */
+    if(H5Tget_order(native_type) != H5Tget_order(H5T_NATIVE_FLOAT))
+        TEST_ERROR;
+    if(H5Tget_size(native_type) < H5Tget_size(H5T_IEEE_F32BE))
+        TEST_ERROR;
+    if(H5T_FLOAT!=H5Tget_class(native_type))
+        TEST_ERROR;
+
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+    if(H5Tclose(native_type)<0) TEST_ERROR;
+    if(H5Tclose(dtype)<0) TEST_ERROR;
+
+
+    /* Create the dataset of H5T_IEEE_F64BE */
+    if ((dataset = H5Dcreate(file, DSET_ATOMIC_NAME_5, H5T_IEEE_F64BE, space,
+			     H5P_DEFAULT))<0) TEST_ERROR;
+
+    if((dtype=H5Dget_type(dataset))<0) TEST_ERROR;
+
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DESCEND))<0)
+        TEST_ERROR;
+
+    /* Verify the datatype retrieved and converted */
+    if(H5Tget_order(native_type) != H5Tget_order(H5T_NATIVE_DOUBLE))
+        TEST_ERROR;
+    if(H5Tget_size(native_type) < H5Tget_size(H5T_IEEE_F64BE))
+        TEST_ERROR;
+    if(H5T_FLOAT!=H5Tget_class(native_type))
+        TEST_ERROR;
+
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+    if(H5Tclose(native_type)<0) TEST_ERROR;
+    if(H5Tclose(dtype)<0) TEST_ERROR;
+
+
+    /* Close dataspace */
+    if(H5Sclose(space)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+  error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_compound_dtype2
+ *
+ * Purpose:	Test H5Tget_native_type for compound datatype
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_compound_dtype2(hid_t file)
+{
+    typedef struct s2 {
+        short           c2;
+        long            l2;
+    } s2;
+    typedef struct s1 {
+        char            c;
+        int             i;
+        s2              st;
+        unsigned long_long       l;
+    } s1;
+    hid_t		dataset, space;
+    hid_t               dtype, native_type, tid, tid2, tid_m, tid_m2,
+                        mem_id, nest_mem_id;
+    int			i, j, n;
+    hsize_t		dims[2];
+    s1                 *temp_point, *temp_check;
+    s1 	               *points=NULL, *check=NULL;
+    void                *tmp, *bkg;
+
+    TESTING("nested compound datatype");
+
+    /* Allocate space for the points & check arrays */
+    if((points=malloc(sizeof(s1)*DIM0*DIM1))==NULL)
+        TEST_ERROR;
+    if((check=calloc(sizeof(s1),DIM0*DIM1))==NULL)
+        TEST_ERROR;
+
+    /* Initialize the dataset */
+    for (i = n = 0, temp_point=points; i < DIM0; i++) {
+	for (j = 0; j < DIM1; j++,temp_point++) {
+	    temp_point->c = 't';
+	    temp_point->i = n++;
+	    temp_point->st.c2 = i+j;
+	    temp_point->st.l2 = (i*5+j*50)*n;
+	    temp_point->l = (i*10+j*100)*n;
+	}
+    }
+
+    /* Create the data space */
+    dims[0] = DIM0;
+    dims[1] = DIM1;
+    if ((space = H5Screate_simple(2, dims, NULL))<0) TEST_ERROR;
+
+    /* Create compound datatype for disk storage */
+#if H5_SIZEOF_LONG==4
+    if((tid2=H5Tcreate(H5T_COMPOUND, 6))<0) TEST_ERROR;
+    if((tid=H5Tcreate(H5T_COMPOUND, 19))<0) TEST_ERROR;
+#elif H5_SIZEOF_LONG==8
+    if((tid2=H5Tcreate(H5T_COMPOUND, 10))<0) TEST_ERROR;
+    if((tid=H5Tcreate(H5T_COMPOUND, 23))<0) TEST_ERROR;
+#else
+#error "Unknown 'long' size"
+#endif
+
+    /* Insert and pack members */
+    if(H5Tinsert(tid2, "c2", 0, H5T_STD_I16BE)<0) TEST_ERROR;
+#if H5_SIZEOF_LONG==4
+    if(H5Tinsert(tid2, "l2", 2, H5T_STD_I32LE)<0) TEST_ERROR;
+#elif H5_SIZEOF_LONG==8
+    if(H5Tinsert(tid2, "l2", 2, H5T_STD_I64LE)<0) TEST_ERROR;
+#else
+#error "Unknown 'long' size"
+#endif
+
+    if(H5Tinsert(tid, "c", 0, H5T_STD_U8LE)<0) TEST_ERROR;
+    if(H5Tinsert(tid, "i", 1, H5T_STD_I32LE)<0) TEST_ERROR;
+    if(H5Tinsert(tid, "st", 5, tid2)<0) TEST_ERROR;
+#if H5_SIZEOF_LONG==4
+    if(H5Tinsert(tid, "l", 11, H5T_STD_U64BE)<0) TEST_ERROR;
+#elif H5_SIZEOF_LONG==8
+    if(H5Tinsert(tid, "l", 15, H5T_STD_U64BE)<0) TEST_ERROR;
+#else
+#error "Unknown 'long' size"
+#endif
+
+    /* Create the dataset */
+    if ((dataset = H5Dcreate(file, DSET_COMPOUND_NAME_2, tid, space,
+			     H5P_DEFAULT))<0) TEST_ERROR;
+
+    /* Create compound datatype for memory */
+    if((tid_m2=H5Tcreate(H5T_COMPOUND, sizeof(s2)))<0) TEST_ERROR;
+    if((tid_m=H5Tcreate(H5T_COMPOUND, sizeof(s1)))<0) TEST_ERROR;
+
+    /* Insert members */
+    if(H5Tinsert(tid_m2, "c2", HOFFSET(s2, c2), H5T_NATIVE_SHORT)<0) TEST_ERROR;
+    if(H5Tinsert(tid_m2, "l2", HOFFSET(s2, l2), H5T_NATIVE_LONG)<0) TEST_ERROR;
+    if(H5Tinsert(tid_m, "c", HOFFSET(s1, c), H5T_NATIVE_UCHAR)<0) TEST_ERROR;
+    if(H5Tinsert(tid_m, "i", HOFFSET(s1, i), H5T_NATIVE_INT)<0) TEST_ERROR;
+    if(H5Tinsert(tid_m, "st", HOFFSET(s1, st), tid_m2)<0) TEST_ERROR;
+    if(H5Tinsert(tid_m, "l", HOFFSET(s1, l), H5T_NATIVE_ULLONG)<0) TEST_ERROR;
+
+    /* Write the data to the dataset */
+    if (H5Dwrite(dataset, tid_m, H5S_ALL, H5S_ALL, H5P_DEFAULT, points)<0)
+	TEST_ERROR;
+
+    /* Close dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Close dataspace */
+    if(H5Sclose(space)<0) TEST_ERROR;
+
+
+    /* Open dataset again to check H5Tget_native_type */
+    if((dataset=H5Dopen(file, DSET_COMPOUND_NAME_2))<0) TEST_ERROR;
+
+    if((dtype=H5Dget_type(dataset))<0) TEST_ERROR;
+
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Verify the datatype of each field retrieved and converted */
+    /* check the char member */
+    if((mem_id = H5Tget_member_type(native_type, 0))<0)
+        TEST_ERROR;
+    if(H5Tget_order(mem_id) != H5Tget_order(H5T_NATIVE_UCHAR))
+        TEST_ERROR;
+    if(H5Tget_size(mem_id) < H5Tget_size(H5T_STD_U8LE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(mem_id))
+        TEST_ERROR;
+    H5Tclose(mem_id);
+
+    /* check the integer member */
+    if((mem_id = H5Tget_member_type(native_type, 1))<0)
+        TEST_ERROR;
+    if(H5Tget_order(mem_id) != H5Tget_order(H5T_NATIVE_INT))
+        TEST_ERROR;
+    if(H5Tget_size(mem_id) < H5Tget_size(H5T_STD_I32LE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(mem_id))
+        TEST_ERROR;
+    H5Tclose(mem_id);
+
+    /* check the long long member */
+    if((mem_id = H5Tget_member_type(native_type, 3))<0)
+        TEST_ERROR;
+    if(H5Tget_order(mem_id) != H5Tget_order(H5T_NATIVE_ULLONG))
+        TEST_ERROR;
+    if(H5Tget_size(mem_id) < H5Tget_size(H5T_STD_U64BE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(mem_id))
+        TEST_ERROR;
+    H5Tclose(mem_id);
+
+    /* check the nested compound member */
+    if((nest_mem_id = H5Tget_member_type(native_type, 2))<0)
+        TEST_ERROR;
+
+    if((mem_id = H5Tget_member_type(nest_mem_id, 0))<0)
+        TEST_ERROR;
+    if(H5Tget_order(mem_id) != H5Tget_order(H5T_NATIVE_SHORT))
+        TEST_ERROR;
+    if(H5Tget_size(mem_id) < H5Tget_size(H5T_STD_I16BE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(mem_id))
+        TEST_ERROR;
+    H5Tclose(mem_id);
+
+    if((mem_id = H5Tget_member_type(nest_mem_id, 1))<0)
+        TEST_ERROR;
+    if(H5Tget_order(mem_id) != H5Tget_order(H5T_NATIVE_LONG))
+        TEST_ERROR;
+#if H5_SIZEOF_LONG==4
+    if(H5Tget_size(mem_id) < H5Tget_size(H5T_STD_I32LE)) TEST_ERROR;
+#elif H5_SIZEOF_LONG==8
+    if(H5Tget_size(mem_id) < H5Tget_size(H5T_STD_I64LE)) TEST_ERROR;
+#else
+#error "Unknown 'long' size"
+#endif
+    if(H5T_INTEGER!=H5Tget_class(mem_id))
+        TEST_ERROR;
+    H5Tclose(mem_id);
+
+    /* Read the dataset back.  Temporary buffer is for special platforms like
+     * Cray */
+    tmp = malloc(DIM0*DIM1*H5Tget_size(native_type));
+    if((bkg=calloc(sizeof(s1),DIM0*DIM1))==NULL)
+        TEST_ERROR;
+
+    if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp)<0)
+	TEST_ERROR;
+
+    memcpy(check, tmp, DIM0*DIM1*H5Tget_size(native_type));
+    free(tmp);
+
+    if (H5Tconvert(native_type, tid_m, (DIM0*DIM1), check, bkg, H5P_DEFAULT))
+        TEST_ERROR;
+
+    free(bkg);
+
+    /* Check that the values read are the same as the values written */
+    for (i = 0, temp_point=points, temp_check=check; i < DIM0; i++) {
+	for (j = 0; j < DIM1; j++, temp_point++,temp_check++) {
+	    if (temp_point->c != temp_check->c ||
+	        temp_point->i != temp_check->i ||
+	        temp_point->st.c2 != temp_check->st.c2 ||
+	        temp_point->st.l2 != temp_check->st.l2 ||
+	        temp_point->l != temp_check->l ) {
+		H5_FAILED();
+		printf("    Read different values than written.\n");
+		printf("    At index %d,%d\n", i, j);
+		goto error;
+	    }
+	}
+    }
+
+    /* Close temporary datatypes */
+    if(H5Tclose(tid2)<0) TEST_ERROR;
+    if(H5Tclose(tid)<0) TEST_ERROR;
+    if(H5Tclose(tid_m2)<0) TEST_ERROR;
+
+    /* Close HDF5 objects */
+    H5Dclose(dataset);
+    H5Tclose(dtype);
+    H5Tclose(native_type);
+    H5Tclose(tid_m);
+
+    /* Free memory for test data */
+    free(points);
+    free(check);
+
+    PASSED();
+    return 0;
+
+error:
+    if(points!=NULL)
+        free(points);
+    if(check!=NULL)
+        free(check);
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_compound_dtype
+ *
+ * Purpose:	Test H5Tget_native_type for compound datatype
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_compound_dtype(hid_t file)
+{
+    typedef struct {
+        char            c;
+        unsigned int    i;
+        long_long       l;
+    } s1;
+    hid_t		dataset, space;
+    hid_t               dtype, native_type, tid, tid2, mem_id;
+    int			i, j, n;
+    hsize_t		dims[2];
+    s1                  *temp_point, *temp_check;
+    s1	                *points, *check;
+    void                *tmp, *bkg;
+
+    TESTING("compound datatype");
+
+
+    /* Allocate space for the points & check arrays */
+    if((points=malloc(sizeof(s1)*DIM0*DIM1))==NULL)
+        TEST_ERROR;
+    if((check=calloc(sizeof(s1),DIM0*DIM1))==NULL)
+        TEST_ERROR;
+
+    /* Initialize the dataset */
+    for (i = n = 0, temp_point=points; i < DIM0; i++) {
+	for (j = 0; j < DIM1; j++,temp_point++) {
+	    temp_point->c = 't';
+	    temp_point->i = n++;
+	    temp_point->l = (i*10+j*100)*n;
+	}
+    }
+
+    /* Create the data space */
+    dims[0] = DIM0;
+    dims[1] = DIM1;
+    if ((space = H5Screate_simple(2, dims, NULL))<0) TEST_ERROR;
+
+    /* Create compound datatype for disk storage */
+    if((tid=H5Tcreate(H5T_COMPOUND, sizeof(s1)))<0) TEST_ERROR;
+
+    /* Insert members */
+    if(H5Tinsert(tid, "c", 0, H5T_STD_U8LE)<0) TEST_ERROR;
+    if(H5Tinsert(tid, "i", 1, H5T_STD_U32LE)<0) TEST_ERROR;
+    if(H5Tinsert(tid, "l", 5, H5T_STD_I64BE)<0) TEST_ERROR;
+
+    /* Create the dataset */
+    if ((dataset = H5Dcreate(file, DSET_COMPOUND_NAME, tid, space,
+			     H5P_DEFAULT))<0) TEST_ERROR;
+
+    /* Create compound datatype for datatype in memory */
+    if((tid2=H5Tcreate(H5T_COMPOUND, sizeof(s1)))<0) TEST_ERROR;
+    if(H5Tinsert(tid2, "c", HOFFSET(s1, c), H5T_NATIVE_UCHAR)<0) TEST_ERROR;
+    if(H5Tinsert(tid2, "i", HOFFSET(s1, i), H5T_NATIVE_UINT)<0) TEST_ERROR;
+    if(H5Tinsert(tid2, "l", HOFFSET(s1, l), H5T_NATIVE_LLONG)<0) TEST_ERROR;
+
+    /* Write the data to the dataset */
+    if (H5Dwrite(dataset, tid2, H5S_ALL, H5S_ALL, H5P_DEFAULT, points)<0)
+	TEST_ERROR;
+
+    /* Close dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Close dataspace */
+    if(H5Sclose(space)<0) TEST_ERROR;
+
+
+    /* Open dataset again to check H5Tget_native_type */
+    if((dataset=H5Dopen(file, DSET_COMPOUND_NAME))<0) TEST_ERROR;
+
+    if((dtype=H5Dget_type(dataset))<0) TEST_ERROR;
+
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Verify the datatype of each field retrieved and converted */
+    if((mem_id = H5Tget_member_type(native_type, 0))<0)
+        TEST_ERROR;
+    if(H5Tget_order(mem_id) != H5Tget_order(H5T_NATIVE_UCHAR))
+        TEST_ERROR;
+    if(H5Tget_size(mem_id) < H5Tget_size(H5T_STD_U8LE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(mem_id))
+        TEST_ERROR;
+    H5Tclose(mem_id);
+
+    if((mem_id = H5Tget_member_type(native_type, 1))<0)
+        TEST_ERROR;
+    if(H5Tget_order(mem_id) != H5Tget_order(H5T_NATIVE_UINT))
+        TEST_ERROR;
+    if(H5Tget_size(mem_id) < H5Tget_size(H5T_STD_U32LE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(mem_id))
+        TEST_ERROR;
+    H5Tclose(mem_id);
+
+    if((mem_id = H5Tget_member_type(native_type, 2))<0)
+        TEST_ERROR;
+    if(H5Tget_order(mem_id) != H5Tget_order(H5T_NATIVE_LLONG))
+        TEST_ERROR;
+    if(H5Tget_size(mem_id) < H5Tget_size(H5T_STD_I64BE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(mem_id))
+        TEST_ERROR;
+    H5Tclose(mem_id);
+
+    /* Read the dataset back.  Temporary buffer is for special platforms like
+     * Cray */
+    tmp = malloc(DIM0*DIM1*H5Tget_size(native_type));
+    bkg = calloc(sizeof(s1),DIM0*DIM1);
+
+    if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp)<0)
+	TEST_ERROR;
+
+    memcpy(check, tmp, DIM0*DIM1*H5Tget_size(native_type));
+    free(tmp);
+
+    if (H5Tconvert(native_type, tid2, (DIM0*DIM1), check, bkg, H5P_DEFAULT)<0)
+        TEST_ERROR;
+
+    free(bkg);
+
+    /* Check that the values read are the same as the values written */
+    for (i = 0, temp_point=points, temp_check=check; i < DIM0; i++) {
+	for (j = 0; j < DIM1; j++, temp_point++,temp_check++) {
+	    if (temp_point->c != temp_check->c ||
+	        temp_point->i != temp_check->i ||
+	        temp_point->l != temp_check->l ) {
+		H5_FAILED();
+		printf("    Read different values than written.\n");
+		printf("    At index %d,%d\n", i, j);
+		goto error;
+	    }
+	}
+    }
+
+    /* Close datatype */
+    if(H5Tclose(tid)<0) TEST_ERROR;
+
+    H5Dclose(dataset);
+    H5Tclose(dtype);
+    H5Tclose(native_type);
+    H5Tclose(tid2);
+
+    /* Free memory for test data */
+    free(points);
+    free(check);
+
+    PASSED();
+    return 0;
+
+  error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_compound_dtype3
+ *
+ * Purpose:	Test H5Tget_native_type for compound datatype
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_compound_dtype3(hid_t file)
+{
+    typedef struct {
+        char            c;
+        int             a[5];
+        long_long       l;
+    } s1;
+    hid_t		dataset, space;
+    hid_t               dtype, native_type, tid, tid2, tid_m, tid_m2,
+                        mem_id, nest_mem_id;
+    hsize_t             array_dims[1]={5};
+    int			i, j, k, n;
+    hsize_t		dims[2];
+    s1                  *temp_point, *temp_check;
+    s1 	                *points=NULL, *check=NULL;
+    void                *tmp, *bkg;
+
+    TESTING("compound datatype with array as field");
+
+    /* Allocate space for the points & check arrays */
+    if((points=malloc(sizeof(s1)*DIM0*DIM1))==NULL)
+        TEST_ERROR;
+    if((check=calloc(sizeof(s1),DIM0*DIM1))==NULL)
+        TEST_ERROR;
+
+    /* Initialize the dataset */
+    for (i = n = 0, temp_point=points; i < DIM0; i++) {
+	for (j = 0; j < DIM1; j++,temp_point++) {
+	    temp_point->c = 't';
+	    temp_point->l = (i*10+j*100)*n;
+	    for (k = 0; k < 5; k++)
+	        (temp_point->a)[k] = n++;
+	}
+    }
+
+    /* Create the data space */
+    dims[0] = DIM0;
+    dims[1] = DIM1;
+    if ((space = H5Screate_simple(2, dims, NULL))<0) TEST_ERROR;
+
+    /* Create array datatype */
+    if((tid2=H5Tarray_create(H5T_STD_I32LE, 1, array_dims, NULL))<0) TEST_ERROR;
+
+    /* Create compound datatype for disk storage */
+    if((tid=H5Tcreate(H5T_COMPOUND, 29))<0) TEST_ERROR;
+
+    /* Insert members */
+    if(H5Tinsert(tid, "c", 0, H5T_STD_U8LE)<0) TEST_ERROR;
+    if(H5Tinsert(tid, "a", 1, tid2)<0) TEST_ERROR;
+    if(H5Tinsert(tid, "l", 21, H5T_STD_I64BE)<0) TEST_ERROR;
+
+    /* Create the dataset */
+    if ((dataset = H5Dcreate(file, DSET_COMPOUND_NAME_3, tid, space,
+			     H5P_DEFAULT))<0) TEST_ERROR;
+
+    /* Create array datatype */
+    if((tid_m2=H5Tarray_create(H5T_NATIVE_INT, 1, array_dims, NULL))<0) TEST_ERROR;
+
+    /* Create compound datatype for datatype in memory */
+    if((tid_m=H5Tcreate(H5T_COMPOUND, sizeof(s1)))<0) TEST_ERROR;
+    if(H5Tinsert(tid_m, "c", HOFFSET(s1, c), H5T_NATIVE_UCHAR)<0) TEST_ERROR;
+    if(H5Tinsert(tid_m, "a", HOFFSET(s1, a), tid_m2)<0) TEST_ERROR;
+    if(H5Tinsert(tid_m, "l", HOFFSET(s1, l), H5T_NATIVE_LLONG)<0) TEST_ERROR;
+
+    /* Write the data to the dataset */
+    if (H5Dwrite(dataset, tid_m, H5S_ALL, H5S_ALL, H5P_DEFAULT, points)<0)
+	TEST_ERROR;
+
+    /* Close dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Close datatype */
+    if(H5Tclose(tid)<0) TEST_ERROR;
+    if(H5Tclose(tid2)<0) TEST_ERROR;
+
+    /* Close dataspace */
+    if(H5Sclose(space)<0) TEST_ERROR;
+
+
+    /* Open dataset again to check H5Tget_native_type */
+    if((dataset=H5Dopen(file, DSET_COMPOUND_NAME_3))<0) TEST_ERROR;
+
+    if((dtype=H5Dget_type(dataset))<0) TEST_ERROR;
+
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Verify the datatype of each field retrieved and converted */
+    /* check the char member */
+    if((mem_id = H5Tget_member_type(native_type, 0))<0)
+        TEST_ERROR;
+    if(H5Tget_order(mem_id) != H5Tget_order(H5T_NATIVE_UCHAR))
+        TEST_ERROR;
+    if(H5Tget_size(mem_id) < H5Tget_size(H5T_STD_U8LE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(mem_id))
+        TEST_ERROR;
+    H5Tclose(mem_id);
+
+    /* check the array member */
+    if((mem_id = H5Tget_member_type(native_type, 1))<0)
+        TEST_ERROR;
+    if(H5T_ARRAY!=H5Tget_class(mem_id))
+        TEST_ERROR;
+    if((nest_mem_id = H5Tget_super(mem_id))<0)
+        TEST_ERROR;
+    if(H5Tget_order(nest_mem_id) != H5Tget_order(H5T_NATIVE_INT))
+        TEST_ERROR;
+    if(H5Tget_size(nest_mem_id) < H5Tget_size(H5T_STD_I32LE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(nest_mem_id))
+        TEST_ERROR;
+    H5Tclose(nest_mem_id);
+    H5Tclose(mem_id);
+
+    /* check the long long member */
+    if((mem_id = H5Tget_member_type(native_type, 2))<0)
+        TEST_ERROR;
+    if(H5Tget_order(mem_id) != H5Tget_order(H5T_NATIVE_LLONG))
+        TEST_ERROR;
+    if(H5Tget_size(mem_id) < H5Tget_size(H5T_STD_I64BE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(mem_id))
+        TEST_ERROR;
+    H5Tclose(mem_id);
+
+    /* Read the dataset back.  Temporary buffer is for special platforms like
+     * Cray */
+    tmp = malloc(DIM0*DIM1*H5Tget_size(native_type));
+    if((bkg=calloc(sizeof(s1),DIM0*DIM1))==NULL)
+        TEST_ERROR;
+
+    if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp)<0)
+	TEST_ERROR;
+
+    memcpy(check, tmp, DIM0*DIM1*H5Tget_size(native_type));
+    free(tmp);
+
+    if (H5Tconvert(native_type, tid_m, (DIM0*DIM1), check, bkg, H5P_DEFAULT))
+        TEST_ERROR;
+
+    free(bkg);
+
+    /* Check that the values read are the same as the values written */
+    for (i = 0, temp_point=points, temp_check=check; i < DIM0; i++) {
+	for (j = 0; j < DIM1; j++, temp_point++,temp_check++) {
+	    if (temp_point->c != temp_check->c ||
+	        temp_point->l != temp_check->l ) {
+		H5_FAILED();
+		printf("    Read different values than written.\n");
+		printf("    At index %d,%d\n", i, j);
+		goto error;
+	    }
+
+	    for (k = 0; k < 5; k++) {
+                if(temp_point->a[k] != temp_check->a[k]) {
+		      H5_FAILED();
+		      printf("    Read different values than written.\n");
+		      printf("    At index %d,%d,%d\n", i, j, k);
+		      goto error;
+                }
+            }
+	}
+    }
+
+    H5Dclose(dataset);
+    H5Tclose(dtype);
+    H5Tclose(native_type);
+    H5Tclose(tid_m);
+    H5Tclose(tid_m2);
+
+    /* Free memory for test data */
+    free(points);
+    free(check);
+
+    PASSED();
+    return 0;
+
+  error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_compound_opaque
+ *
+ * Purpose:	Test H5Tget_native_type for compound datatype with opaque field
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Quincey Koziol
+ *		January 31, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_compound_opaque(hid_t file)
+{
+    typedef struct {
+        char            c;
+        unsigned char   o[5];
+        long_long       l;
+    } s1;
+    hid_t		dataset, space;
+    hid_t               dtype, native_type, tid, tid2, tid_m,
+                        mem_id;
+    int			i, j, k, n;
+    hsize_t		dims[2];
+    s1                  *temp_point, *temp_check;
+    s1 	                *points=NULL, *check=NULL;
+    void                *tmp, *bkg;
+
+    TESTING("compound datatype with opaque field");
+
+    /* Allocate space for the points & check arrays */
+    if((points=HDmalloc(sizeof(s1)*DIM0*DIM1))==NULL)
+        TEST_ERROR;
+    if((check=HDcalloc(sizeof(s1),DIM0*DIM1))==NULL)
+        TEST_ERROR;
+
+    /* Initialize the dataset */
+    for (i = n = 0, temp_point=points; i < DIM0; i++) {
+	for (j = 0; j < DIM1; j++,temp_point++) {
+	    temp_point->c = 't';
+	    temp_point->l = (i*10+j*100)*n;
+	    for (k = 0; k < 5; k++)
+	        (temp_point->o)[k] = n++;
+	}
+    }
+
+    /* Create the data space */
+    dims[0] = DIM0;
+    dims[1] = DIM1;
+    if ((space = H5Screate_simple(2, dims, NULL))<0) TEST_ERROR;
+
+    /* Create opaque datatype */
+    if((tid2=H5Tcreate(H5T_OPAQUE, sizeof(temp_point->o)))<0) TEST_ERROR;
+    if(H5Tset_tag(tid2, "testing opaque field")<0) TEST_ERROR;
+
+    /* Create compound datatype for disk storage */
+    if((tid=H5Tcreate(H5T_COMPOUND, 14))<0) TEST_ERROR;
+
+    /* Insert members */
+    if(H5Tinsert(tid, "c", 0, H5T_STD_U8LE)<0) TEST_ERROR;
+    if(H5Tinsert(tid, "o", 1, tid2)<0) TEST_ERROR;
+    if(H5Tinsert(tid, "l", 6, H5T_STD_I64BE)<0) TEST_ERROR;
+
+    /* Create the dataset */
+    if ((dataset = H5Dcreate(file, DSET_COMPOUND_NAME_4, tid, space,
+			     H5P_DEFAULT))<0) TEST_ERROR;
+
+    /* Create compound datatype for datatype in memory */
+    if((tid_m=H5Tcreate(H5T_COMPOUND, sizeof(s1)))<0) TEST_ERROR;
+    if(H5Tinsert(tid_m, "c", HOFFSET(s1, c), H5T_NATIVE_UCHAR)<0) TEST_ERROR;
+    if(H5Tinsert(tid_m, "o", HOFFSET(s1, o), tid2)<0) TEST_ERROR;
+    if(H5Tinsert(tid_m, "l", HOFFSET(s1, l), H5T_NATIVE_LLONG)<0) TEST_ERROR;
+
+    /* Write the data to the dataset */
+    if (H5Dwrite(dataset, tid_m, H5S_ALL, H5S_ALL, H5P_DEFAULT, points)<0)
+	TEST_ERROR;
+
+    /* Close dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Close datatype */
+    if(H5Tclose(tid)<0) TEST_ERROR;
+    if(H5Tclose(tid2)<0) TEST_ERROR;
+
+    /* Close dataspace */
+    if(H5Sclose(space)<0) TEST_ERROR;
+
+
+    /* Open dataset again to check H5Tget_native_type */
+    if((dataset=H5Dopen(file, DSET_COMPOUND_NAME_4))<0) TEST_ERROR;
+
+    if((dtype=H5Dget_type(dataset))<0) TEST_ERROR;
+
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Verify the datatype of each field retrieved and converted */
+    /* check the char member */
+    if((mem_id = H5Tget_member_type(native_type, 0))<0)
+        TEST_ERROR;
+    if(H5Tget_order(mem_id) != H5Tget_order(H5T_NATIVE_UCHAR))
+        TEST_ERROR;
+    if(H5Tget_size(mem_id) < H5Tget_size(H5T_STD_U8LE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(mem_id))
+        TEST_ERROR;
+    H5Tclose(mem_id);
+
+    /* check the array member */
+    if((mem_id = H5Tget_member_type(native_type, 1))<0)
+        TEST_ERROR;
+    if(H5T_OPAQUE!=H5Tget_class(mem_id))
+        TEST_ERROR;
+    if(H5Tget_size(mem_id) != sizeof(temp_point->o))
+        TEST_ERROR;
+    H5Tclose(mem_id);
+
+    /* check the long long member */
+    if((mem_id = H5Tget_member_type(native_type, 2))<0)
+        TEST_ERROR;
+    if(H5Tget_order(mem_id) != H5Tget_order(H5T_NATIVE_LLONG))
+        TEST_ERROR;
+    if(H5Tget_size(mem_id) < H5Tget_size(H5T_STD_I64BE))
+        TEST_ERROR;
+    if(H5T_INTEGER!=H5Tget_class(mem_id))
+        TEST_ERROR;
+    H5Tclose(mem_id);
+
+    /* Read the dataset back.  Temporary buffer is for special platforms like
+     * Cray */
+    tmp = HDmalloc(DIM0*DIM1*H5Tget_size(native_type));
+    if((bkg=HDcalloc(sizeof(s1),DIM0*DIM1))==NULL)
+        TEST_ERROR;
+
+    if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp)<0)
+	TEST_ERROR;
+
+    HDmemcpy(check, tmp, DIM0*DIM1*H5Tget_size(native_type));
+    HDfree(tmp);
+
+    if (H5Tconvert(native_type, tid_m, (DIM0*DIM1), check, bkg, H5P_DEFAULT))
+        TEST_ERROR;
+
+    HDfree(bkg);
+
+    /* Check that the values read are the same as the values written */
+    for (i = 0, temp_point=points, temp_check=check; i < DIM0; i++) {
+	for (j = 0; j < DIM1; j++, temp_point++,temp_check++) {
+	    if (temp_point->c != temp_check->c ||
+	        temp_point->l != temp_check->l ) {
+		H5_FAILED();
+		printf("    Read different values than written.\n");
+		printf("    At index %d,%d\n", i, j);
+		goto error;
+	    }
+
+	    for (k = 0; k < 5; k++) {
+                if(temp_point->o[k] != temp_check->o[k]) {
+		      H5_FAILED();
+		      printf("    Read different values than written.\n");
+		      printf("    At index %d,%d,%d\n", i, j, k);
+		      goto error;
+                }
+            }
+	}
+    }
+
+    H5Dclose(dataset);
+    H5Tclose(dtype);
+    H5Tclose(native_type);
+    H5Tclose(tid_m);
+
+    /* Free memory for test data */
+    HDfree(points);
+    HDfree(check);
+
+    PASSED();
+    return 0;
+
+  error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_enum_dtype
+ *
+ * Purpose:	Test H5Tget_native_type for enumerate datatype
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_enum_dtype(hid_t file)
+{
+    hid_t		dataset, space;
+    hid_t               tid, tid_m, dtype, native_type;
+    int			i, j, n;
+    hsize_t		dims[2];
+    void                *tmp;
+    short               colors[8];
+    unsigned char       sub_colors[16];
+    const char          *mname[] = { "RED",
+                                     "GREEN",
+                                     "BLUE",
+                                     "YELLOW",
+                                     "PINK",
+                                     "PURPLE",
+                                     "ORANGE",
+                                     "WHITE" };
+
+    TESTING("enum datatype");
+
+    /* Initialize the dataset */
+    for (i = 0; i < DIM0; i++) {
+        for (j=0, n=0; j < DIM1; j++, n++)
+	    spoints2[i][j] = (i*10+j*100+n)%8;
+    }
+
+    /* Create the data space */
+    dims[0] = DIM0;
+    dims[1] = DIM1;
+    if ((space = H5Screate_simple(2, dims, NULL))<0) TEST_ERROR;
+
+    /* Construct enum type based on native type */
+    if((tid=H5Tenum_create(H5T_STD_I16LE))<0) TEST_ERROR;
+
+    for (i = 0; i < 8; i++) {
+        sub_colors[i*2]=i;
+        sub_colors[i*2+1]=0;
+        if(H5Tenum_insert(tid, mname[i], &(sub_colors[i*2]))<0) TEST_ERROR;
+    }
+
+    /* Create the dataset */
+    if ((dataset = H5Dcreate(file, DSET_ENUM_NAME, tid, space,
+			     H5P_DEFAULT))<0) TEST_ERROR;
+
+    /* Construct enum type based on native type in memory */
+    if((tid_m=H5Tenum_create(H5T_NATIVE_SHORT))<0) TEST_ERROR;
+
+    for (i = 0; i < 8; i++) {
+        colors[i] = i;
+        if(H5Tenum_insert(tid_m, mname[i], &(colors[i]))<0) TEST_ERROR;
+    }
+
+    /* Write the data to the dataset */
+    if (H5Dwrite(dataset, tid_m, H5S_ALL, H5S_ALL, H5P_DEFAULT, spoints2)<0)
+	TEST_ERROR;
+
+    /* Close dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Close datatype */
+    if(H5Tclose(tid)<0) TEST_ERROR;
+
+    /* Close dataspace */
+    if(H5Sclose(space)<0) TEST_ERROR;
+
+    /* Open dataset again to check H5Tget_native_type */
+    if((dataset=H5Dopen(file, DSET_ENUM_NAME))<0) TEST_ERROR;
+
+    if((dtype=H5Dget_type(dataset))<0) TEST_ERROR;
+
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Read the dataset back.  Temporary buffer is for special platforms like
+     * Cray */
+    tmp = malloc(DIM0*DIM1*H5Tget_size(native_type));
+
+    if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp)<0)
+	TEST_ERROR;
+
+    memcpy(scheck2, tmp, DIM0*DIM1*H5Tget_size(native_type));
+    free(tmp);
+
+    if (H5Tconvert(native_type, tid_m, (DIM0*DIM1), scheck2, NULL, H5P_DEFAULT)<0)
+        TEST_ERROR;
+
+    /* Check that the values read are the same as the values written */
+    for (i = 0; i < DIM0; i++) {
+	for (j = 0; j < DIM1; j++) {
+	    if (spoints2[i][j] != scheck2[i][j]) {
+		H5_FAILED();
+		printf("    Read different values than written.\n");
+		printf("    At index %d,%d\n", i, j);
+                printf(" spoints2[i][j]=%hd, scheck2[i][j]=%hd\n", spoints2[i][j],
+                        scheck2[i][j]);
+		goto error;
+	    }
+	}
+    }
+
+    H5Dclose(dataset);
+    H5Tclose(dtype);
+    H5Tclose(native_type);
+    H5Tclose(tid_m);
+    PASSED();
+    return 0;
+
+  error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_array_dtype
+ *
+ * Purpose:	Test H5Tget_native_type for array datatype
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_array_dtype(hid_t file)
+{
+    typedef struct {
+        char    c;
+        int     i;
+        long_long l;
+    } s1;
+    hid_t		dataset, space;
+    hid_t               dtype, native_type, tid, tid2, tid3, tid_m;
+    int			i, j, k, n;
+    hsize_t		space_dims[2], array_dims[1]={5};
+    s1                 *temp_point, *temp_check;
+    s1 	               *points=NULL, *check=NULL;
+    void               *tmp;
+
+    TESTING("array of compound datatype");
+
+    /* Allocate space for the points & check arrays */
+    if((points=malloc(sizeof(s1)*DIM0*DIM1*5))==NULL)
+        TEST_ERROR;
+    if((check=calloc(sizeof(s1),DIM0*DIM1*5))==NULL)
+        TEST_ERROR;
+
+    /* Initialize the dataset */
+    for(i = n = 0, temp_point=points; i < DIM0; i++)
+	for(j = 0; j < DIM1; j++)
+            for(k = 0; k < 5; k++,temp_point++) {
+                temp_point->c= 't';
+                temp_point->i= n++;
+                temp_point->l= (i*10+j*100)*n;
+            }
+
+    /* Create the data space */
+    space_dims[0] = DIM0;
+    space_dims[1] = DIM1;
+    if ((space = H5Screate_simple(2, space_dims, NULL))<0) TEST_ERROR;
+
+    /* Create compound datatype for disk storage */
+    if((tid2=H5Tcreate(H5T_COMPOUND, 13))<0) TEST_ERROR;
+
+    /* Insert members */
+    if(H5Tinsert(tid2, "c", 0, H5T_STD_U8BE)<0) TEST_ERROR;
+    if(H5Tinsert(tid2, "i", 1, H5T_STD_U32LE)<0) TEST_ERROR;
+    if(H5Tinsert(tid2, "l", 5, H5T_STD_I64BE)<0) TEST_ERROR;
+
+    /* Create array datatype for disk storage */
+    if((tid=H5Tarray_create(tid2, 1, array_dims, NULL))<0) TEST_ERROR;
+
+    /* Create the dataset */
+    if ((dataset = H5Dcreate(file, DSET_ARRAY_NAME, tid, space,
+			     H5P_DEFAULT))<0) TEST_ERROR;
+
+    /* Create compound datatype for datatype in memory */
+    if((tid3=H5Tcreate(H5T_COMPOUND, sizeof(s1)))<0) TEST_ERROR;
+    if(H5Tinsert(tid3, "c", HOFFSET(s1, c), H5T_NATIVE_UCHAR)<0) TEST_ERROR;
+    if(H5Tinsert(tid3, "i", HOFFSET(s1, i), H5T_NATIVE_UINT)<0) TEST_ERROR;
+    if(H5Tinsert(tid3, "l", HOFFSET(s1, l), H5T_NATIVE_LLONG)<0) TEST_ERROR;
+
+    /* Create array datatype for memory */
+    if((tid_m=H5Tarray_create(tid3, 1, array_dims, NULL))<0) TEST_ERROR;
+
+    /* Write the data to the dataset */
+    if (H5Dwrite(dataset, tid_m, H5S_ALL, H5S_ALL, H5P_DEFAULT, points)<0)
+	TEST_ERROR;
+
+    /* Close dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Close datatype */
+    if(H5Tclose(tid)<0) TEST_ERROR;
+    if(H5Tclose(tid2)<0) TEST_ERROR;
+
+    /* Close dataspace */
+    if(H5Sclose(space)<0) TEST_ERROR;
+
+    /* Open dataset again to check H5Tget_native_type */
+    if((dataset=H5Dopen(file, DSET_ARRAY_NAME))<0) TEST_ERROR;
+
+    if((dtype=H5Dget_type(dataset))<0) TEST_ERROR;
+
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Read the dataset back. Temporary buffer is for special platforms like
+     * Cray */
+    tmp = malloc(DIM0*DIM1*H5Tget_size(native_type));
+
+    if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp)<0)
+	TEST_ERROR;
+
+    memcpy(check, tmp, DIM0*DIM1*H5Tget_size(native_type));
+    free(tmp);
+
+    if (H5Tconvert(native_type, tid_m, (DIM0*DIM1), check, NULL, H5P_DEFAULT)<0)
+        TEST_ERROR;
+
+    /* Check that the values read are the same as the values written */
+    for (i = 0, temp_point=points, temp_check=check; i < DIM0; i++) {
+	for (j = 0; j < DIM1; j++) {
+            for (k = 0; k < 5; k++, temp_point++,temp_check++) {
+                if (temp_point->c != temp_check->c ||
+	            temp_point->i != temp_check->i ||
+	            temp_point->l != temp_check->l ) {
+                    H5_FAILED();
+                    printf("    Read different values than written.\n");
+                    printf("    At index %d,%d\n", i, j);
+                    goto error;
+                }
+	    }
+	}
+    }
+
+    /* Close HDF5 objects */
+    if(H5Dclose(dataset)) TEST_ERROR;
+    if(H5Tclose(native_type)) TEST_ERROR;
+    if(H5Tclose(dtype)) TEST_ERROR;
+    if(H5Tclose(tid_m)<0) TEST_ERROR;
+    if(H5Tclose(tid3)<0) TEST_ERROR;
+
+    /* Free memory for test data */
+    free(points);
+    free(check);
+
+    PASSED();
+    return 0;
+
+error:
+    if(points!=NULL)
+        free(points);
+    if(check!=NULL)
+        free(check);
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_array_dtype2
+ *
+ * Purpose:	Test H5Tget_native_type for array datatype
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_array_dtype2(hid_t file)
+{
+    hid_t		dataset, space;
+    hid_t               dtype, native_type, tid, tid_m;
+    int			i, j, k, n;
+    hsize_t		space_dims[2], array_dims[1]={5};
+    void                *tmp;
+
+    TESTING("array of atomic datatype");
+
+    /* Initialize the dataset */
+    for(i = n = 0;i < DIM0; i++)
+	for(j = 0; j < DIM1; j++)
+            for(k = 0; k < 5; k++)
+                ipoints3[i][j][k] = n++;
+
+    /* Create the data space */
+    space_dims[0] = DIM0;
+    space_dims[1] = DIM1;
+    if ((space = H5Screate_simple(2, space_dims, NULL))<0) TEST_ERROR;
+
+    /* Create array datatype for disk storage */
+    if((tid=H5Tarray_create(H5T_STD_I32LE, 1, array_dims, NULL))<0) TEST_ERROR;
+
+    /* Create the dataset */
+    if ((dataset = H5Dcreate(file, DSET_ARRAY2_NAME, tid, space,
+			     H5P_DEFAULT))<0) TEST_ERROR;
+
+    /* Create array datatype for memory */
+    if((tid_m=H5Tarray_create(H5T_NATIVE_INT, 1, array_dims, NULL))<0) TEST_ERROR;
+
+    /* Write the data to the dataset */
+    if (H5Dwrite(dataset, tid_m, H5S_ALL, H5S_ALL, H5P_DEFAULT, ipoints3)<0)
+	TEST_ERROR;
+
+    /* Close dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Close datatype */
+    if(H5Tclose(tid)<0) TEST_ERROR;
+
+    /* Close dataspace */
+    if(H5Sclose(space)<0) TEST_ERROR;
+
+
+    /* Open dataset again to check H5Tget_native_type */
+    if((dataset=H5Dopen(file, DSET_ARRAY2_NAME))<0) TEST_ERROR;
+
+    if((dtype=H5Dget_type(dataset))<0) TEST_ERROR;
+
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Read the dataset back.  Temporary buffer is for special platforms like
+     * Cray */
+    tmp = malloc(DIM0*DIM1*H5Tget_size(native_type));
+
+    if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, tmp)<0)
+	TEST_ERROR;
+
+    memcpy(icheck3, tmp, DIM0*DIM1*H5Tget_size(native_type));
+    free(tmp);
+
+    if (H5Tconvert(native_type, tid_m, (DIM0*DIM1), icheck3, NULL, H5P_DEFAULT)<0)
+        TEST_ERROR;
+
+    /* Check that the values read are the same as the values written */
+    for (i = 0; i < DIM0; i++) {
+	for (j = 0; j < DIM1; j++) {
+            for (k = 0; k < 5; k++) {
+                if(icheck3[i][j][k] != ipoints3[i][j][k]) {
+                    H5_FAILED();
+                    printf("    Read different values than written.\n");
+                    printf("    At index %d,%d\n", i, j);
+                    goto error;
+                }
+	    }
+	}
+    }
+
+    /* Close HDF5 objects */
+    if(H5Dclose(dataset)) TEST_ERROR;
+    if(H5Tclose(native_type)) TEST_ERROR;
+    if(H5Tclose(dtype)) TEST_ERROR;
+    if(H5Tclose(tid_m)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_vl_dtype
+ *
+ * Purpose:	Test H5Tget_native_type for variable length datatype
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_vl_dtype(hid_t file)
+{
+    hvl_t               wdata[SPACE1_DIM1];   /* Information to write */
+    hvl_t               rdata[SPACE1_DIM1];   /* Information read in */
+    hvl_t               *t1, *t2;             /* Temporary pointer to VL information */
+    hsize_t		dims1[] = {SPACE1_DIM1};
+    hid_t		dataset, space;
+    hid_t               dtype, native_type, nat_super_type, tid, tid2, tid_m, tid_m2;
+    size_t		i, j, k;
+    void*               *tmp;
+
+    TESTING("variable length datatype");
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        wdata[i].p=malloc((i+1)*sizeof(hvl_t));
+        if(wdata[i].p==NULL) {
+            H5_FAILED();
+            printf("    Cannot allocate memory for VL data! i=%u\n",(unsigned)i);
+            goto error;
+        } /* end if */
+        wdata[i].len=i+1;
+        for(t1=wdata[i].p,j=0; j<(i+1); j++, t1++) {
+            t1->p=malloc((j+1)*sizeof(unsigned int));
+            if(t1->p==NULL) {
+                H5_FAILED();
+                printf("    Cannot allocate memory for VL data! i=%u, j=%u\n",(unsigned)i,(unsigned)j);
+                goto error;
+            } /* end if */
+            t1->len=j+1;
+            for(k=0; k<(j+1); k++) {
+                ((unsigned int *)t1->p)[k]=(unsigned int)(i*100+j*10+k);
+            }
+        } /* end for */
+    } /* end for */
+
+    /* Create dataspace for datasets */
+    if((space = H5Screate_simple(SPACE1_RANK, dims1, NULL))<0) TEST_ERROR;
+
+    /* Create the base VL type */
+    if((tid2 = H5Tvlen_create (H5T_STD_U32LE))<0) TEST_ERROR;
+
+    /* Create a VL datatype for disk storage */
+    tid = H5Tvlen_create (tid2);
+
+    /* Create a dataset */
+    if((dataset=H5Dcreate(file, DSET_VL_NAME, tid, space, H5P_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Create a base VL datatype for memory */
+    if((tid_m2 = H5Tvlen_create (H5T_NATIVE_UINT))<0) TEST_ERROR;
+
+    /* Create a VL datatype for memory */
+    if((tid_m = H5Tvlen_create (tid_m2))<0) TEST_ERROR;
+
+    /* Write dataset to disk */
+    if(H5Dwrite(dataset,tid_m,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata)<0) TEST_ERROR;
+
+    /* Close Dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Close datatype */
+    if(H5Tclose(tid2)<0) TEST_ERROR;
+    if(H5Tclose(tid)<0) TEST_ERROR;
+
+    /* Open a dataset */
+    if((dataset=H5Dopen(file, DSET_VL_NAME))<0) TEST_ERROR;
+
+    /* Get native datatype for dataset */
+    if((dtype = H5Dget_type(dataset))<0) TEST_ERROR;
+
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Also get native base type for this nested VL type.  Should be an integer type. */
+    if((nat_super_type=H5Tget_super(native_type))<0)
+        TEST_ERROR;
+    if((nat_super_type=H5Tget_super(nat_super_type))<0)
+        TEST_ERROR;
+
+    /* Read dataset from disk */
+    if(H5Dread(dataset,native_type,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata)<0) TEST_ERROR;
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(wdata[i].len!=rdata[i].len) {
+            H5_FAILED();
+            printf("    VL data length don't match!, wdata[%d].len=%d, rdata[%d].len=%d\n",(int)i,(int)wdata[i].len,(int)i,(int)rdata[i].len);
+            goto error;
+        } /* end if */
+        for(t1=wdata[i].p, t2=rdata[i].p, j=0; j<rdata[i].len; j++, t1++, t2++) {
+            if(t1->len!=t2->len) {
+                H5_FAILED();
+                printf("    VL data length don't match!, wdata[%d].len=%d, rdata[%d].len=%d\n",(int)i,(int)wdata[i].len,(int)i,(int)rdata[i].len);
+                goto error;
+            } /* end if */
+
+            /* use temporary buffer to convert datatype.  This is for special
+             * platforms like Cray */
+            tmp=malloc(t2->len*sizeof(unsigned int));
+            memcpy(tmp, t2->p, t2->len*H5Tget_size(nat_super_type));
+
+            if (H5Tconvert(nat_super_type, H5T_NATIVE_UINT, t2->len, tmp, NULL, H5P_DEFAULT))
+                TEST_ERROR;
+
+            for(k=0; k<t2->len; k++) {
+                if( ((unsigned int *)t1->p)[k] != ((unsigned int *)tmp)[k] ) {
+                    H5_FAILED();
+                    printf("    VL data don't match!, wdata[%u].p=%d, rdata[%u].p=%u\n",
+                        (unsigned)i,((unsigned int*)t1->p)[k],(unsigned)i,((unsigned int*)tmp)[k]);
+                    goto error;
+                }
+            } /* end for */
+
+            free(tmp);
+        } /* end for */
+    } /* end for */
+
+    /* Reclaim the read VL data */
+    if(H5Dvlen_reclaim(native_type,space,H5P_DEFAULT,rdata)<0) TEST_ERROR;
+
+    /* Reclaim the write VL data */
+    if(H5Dvlen_reclaim(native_type,space,H5P_DEFAULT,wdata)<0) TEST_ERROR;
+
+    /* Close Dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Close datatype */
+    if(H5Tclose(native_type)<0) TEST_ERROR;
+    if(H5Tclose(dtype)<0) TEST_ERROR;
+    if(H5Tclose(tid_m)<0) TEST_ERROR;
+    if(H5Tclose(tid_m2)<0) TEST_ERROR;
+
+
+    /* Close disk dataspace */
+    if(H5Sclose(space)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+ error:
+    return -1;
+} /* end test_vl_type() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_vlstr_dtype
+ *
+ * Purpose:	Test H5Tget_native_type for variable length string datatype
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_vlstr_dtype(hid_t file)
+{
+    const char *wdata[SPACE1_DIM1]= {
+        "Four score and seven years ago our forefathers brought forth on this continent a new nation,",
+        "conceived in liberty and dedicated to the proposition that all men are created equal.",
+        "Now we are engaged in a great civil war,",
+        "testing whether that nation or any nation so conceived and so dedicated can long endure."
+        };   /* Information to write */
+    char *rdata[SPACE1_DIM1];   /* Information read in */
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1,dtype,native_type;       /* Datatype ID			*/
+    hsize_t		dims1[] = {SPACE1_DIM1};
+    unsigned       i;          /* counting variable */
+
+    /* Output message about test being performed */
+    TESTING("variable length string datatype");
+
+    /* Create dataspace for datasets */
+    if((sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL))<0) TEST_ERROR;
+
+    /* Create a datatype to refer to */
+    if((tid1 = H5Tcopy (H5T_C_S1))<0) TEST_ERROR;
+
+    if(H5Tset_size (tid1,H5T_VARIABLE)<0) TEST_ERROR;
+    if(H5T_STRING!=H5Tget_class(tid1) || !H5Tis_variable_str(tid1))
+        TEST_ERROR;
+
+    /* Create a dataset */
+    if((dataset=H5Dcreate(file,DSET_VLSTR_NAME,tid1,sid1,H5P_DEFAULT))<0) TEST_ERROR;
+
+    /* Write dataset to disk */
+    if(H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata)<0) TEST_ERROR;
+
+    /* Close Dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Open a dataset */
+    if((dataset=H5Dopen(file, DSET_VLSTR_NAME))<0) TEST_ERROR;
+
+    /* Get datatype for dataset */
+    if((dtype = H5Dget_type(dataset))<0) TEST_ERROR;
+
+    /* Construct native type */
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Check if the data type is equal */
+    if(!H5Tequal(native_type, tid1))
+        TEST_ERROR;
+
+    /* Read dataset from disk */
+    if(H5Dread(dataset,native_type,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata)<0) TEST_ERROR;
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(strlen(wdata[i])!=strlen(rdata[i])) {
+            H5_FAILED();
+            printf("    VL data length don't match!, strlen(wdata[%d])=%d, strlen(rdata[%d])=%d\n",
+                   (int)i,(int)strlen(wdata[i]),(int)i,(int)strlen(rdata[i]));
+            goto error;
+        } /* end if */
+        if( strcmp(wdata[i],rdata[i]) != 0 ) {
+            H5_FAILED();
+            printf("    VL data values don't match!, wdata[%d]=%s, rdata[%d]=%s\n",
+                   (int)i,wdata[i],(int)i,rdata[i]);
+            goto error;
+        } /* end if */
+    } /* end for */
+
+    /* Close Dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Close datatype */
+    if(H5Tclose(tid1)<0) TEST_ERROR;
+    if(H5Tclose(native_type)<0) TEST_ERROR;
+
+    /* Close disk dataspace */
+    if(H5Sclose(sid1)<0) TEST_ERROR;
+
+    /* Free memory for rdata */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        HDfree(rdata[i]);
+    }
+
+    PASSED();
+    return 0;
+
+error:
+    return -1;
+} /* end test_vlstr_dtype() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_str_dtype
+ *
+ * Purpose:	Test H5Tget_native_type for fixed-length string datatype
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_str_dtype(hid_t file)
+{
+    const char wdata[SPACE1_DIM1][4]= {
+        "one",
+        "two",
+        "3rd",
+        "4th"
+        };   /* Information to write */
+    char rdata[SPACE1_DIM1][4];   /* Information read in */
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1,dtype,native_type;       /* Datatype ID			*/
+    hsize_t		dims1[] = {SPACE1_DIM1};
+    unsigned       i;          /* counting variable */
+
+    /* Output message about test being performed */
+    TESTING("fixed-length string datatype");
+
+    /* Create dataspace for datasets */
+    if((sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL))<0) TEST_ERROR;
+
+    /* Create a datatype to refer to */
+    if((tid1 = H5Tcopy (H5T_C_S1))<0) TEST_ERROR;
+
+    if(H5Tset_size (tid1,4)<0) TEST_ERROR;
+    if(H5T_STRING!=H5Tget_class(tid1))
+        TEST_ERROR;
+
+    /* Create a dataset */
+    if((dataset=H5Dcreate(file,DSET_STR_NAME,tid1,sid1,H5P_DEFAULT))<0) TEST_ERROR;
+
+    /* Write dataset to disk */
+    if(H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata)<0) TEST_ERROR;
+
+    /* Close Dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Open a dataset */
+    if((dataset=H5Dopen(file, DSET_STR_NAME))<0) TEST_ERROR;
+
+    /* Get datatype for dataset */
+    if((dtype = H5Dget_type(dataset))<0) TEST_ERROR;
+
+    /* Construct native type */
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Check if the data type is equal */
+    if(!H5Tequal(native_type, tid1) || H5T_STRING!=H5Tget_class(native_type))
+        TEST_ERROR;
+
+    /* Read dataset from disk */
+    if(H5Dread(dataset,native_type,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata)<0) TEST_ERROR;
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(strlen(wdata[i])!=strlen(rdata[i])) {
+            H5_FAILED();
+            printf("    data length don't match!, strlen(wdata[%d])=%d, strlen(rdata[%d])=%d\n",
+                   (int)i,(int)strlen(wdata[i]),(int)i,(int)strlen(rdata[i]));
+            goto error;
+        } /* end if */
+        if( strcmp(wdata[i],rdata[i]) != 0 ) {
+            H5_FAILED();
+            printf("    data values don't match!, wdata[%d]=%s, rdata[%d]=%s\n",
+                   (int)i,wdata[i],(int)i,rdata[i]);
+            goto error;
+        } /* end if */
+    } /* end for */
+
+    /* Close Dataset */
+    if(H5Dclose(dataset)<0) TEST_ERROR;
+
+    /* Close datatype */
+    if(H5Tclose(tid1)<0) TEST_ERROR;
+    if(H5Tclose(native_type)<0) TEST_ERROR;
+
+    /* Close disk dataspace */
+    if(H5Sclose(sid1)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+error:
+    return -1;
+} /* end test_str_dtype() */
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_refer_dtype
+ *
+ * Purpose:	Test H5Tget_native_type for reference datatype
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_refer_dtype(hid_t file)
+{
+
+    /* Compound datatype */
+    typedef struct s1_t {
+        unsigned int a;
+        unsigned int b;
+        float c;
+    } s1_t;
+
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		group;      /* Group ID             */
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1, dtype, native_type;       /* Datatype ID	*/
+    hsize_t		dims1[] = {1};
+    hobj_ref_t          *wbuf,      /* buffer to write to disk */
+                        *rbuf;       /* buffer read from disk */
+
+    /* Output message about test being performed */
+    TESTING("reference datatype");
+
+    /* Allocate write & read buffers */
+    wbuf=HDmalloc(MAX(sizeof(unsigned),sizeof(hobj_ref_t)));
+    rbuf=HDmalloc(MAX(sizeof(unsigned),sizeof(hobj_ref_t)));
+
+    /* Create dataspace for datasets */
+    if((sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL))<0)
+        TEST_ERROR;
+
+    /* Create a group */
+    if((group=H5Gcreate(file,"Group1",(size_t)-1))<0)
+        TEST_ERROR;
+
+    /* Create a datatype to refer to */
+    if((tid1 = H5Tcreate (H5T_COMPOUND, sizeof(s1_t)))<0)
+        TEST_ERROR;
+
+    /* Insert fields */
+    if(H5Tinsert (tid1, "a", HOFFSET(s1_t,a), H5T_NATIVE_INT)<0)
+        TEST_ERROR;
+
+    if(H5Tinsert (tid1, "b", HOFFSET(s1_t,b), H5T_NATIVE_INT)<0)
+        TEST_ERROR;
+
+    if(H5Tinsert (tid1, "c", HOFFSET(s1_t,c), H5T_NATIVE_FLOAT)<0)
+        TEST_ERROR;
+
+    /* Save datatype for later */
+    if(H5Tcommit (group, "Datatype1", tid1)<0)
+        TEST_ERROR;
+
+    /* Close datatype */
+    if(H5Tclose(tid1)<0)
+        TEST_ERROR;
+
+    /* Close group */
+    if(H5Gclose(group)<0)
+        TEST_ERROR;
+
+    /* Create a dataset */
+    if((dataset=H5Dcreate(file,"Dataset3",H5T_STD_REF_OBJ,sid1,H5P_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Create reference to named datatype */
+    if(H5Rcreate(wbuf,file,"/Group1/Datatype1",H5R_OBJECT,-1)<0)
+        TEST_ERROR;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    if(H5Rget_object_type(dataset,wbuf)!=H5G_TYPE)
+        TEST_ERROR;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    if(H5Rget_obj_type(dataset,H5R_OBJECT,wbuf)!=H5G_TYPE)
+        TEST_ERROR;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+    /* Write selection to disk */
+    if(H5Dwrite(dataset,H5T_STD_REF_OBJ,H5S_ALL,H5S_ALL,H5P_DEFAULT,wbuf)<0)
+        TEST_ERROR;
+
+    /* Close disk dataspace */
+    if(H5Sclose(sid1)<0)
+        TEST_ERROR;
+
+    /* Close Dataset */
+    if(H5Dclose(dataset)<0)
+        TEST_ERROR;
+
+
+    /* Open the dataset */
+    if((dataset=H5Dopen(file,"/Dataset3"))<0)
+        TEST_ERROR;
+
+    /* Get datatype for dataset */
+    if((dtype = H5Dget_type(dataset))<0)
+        TEST_ERROR;
+
+    /* Construct native type */
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Check if the data type is equal */
+    if(!H5Tequal(native_type, H5T_STD_REF_OBJ))
+        TEST_ERROR;
+
+    /* Read selection from disk */
+    if(H5Dread(dataset,native_type,H5S_ALL,H5S_ALL,H5P_DEFAULT,rbuf)<0)
+        TEST_ERROR;
+
+    /* Open datatype object */
+    if((tid1 = H5Rdereference(dataset,H5R_OBJECT,rbuf))<0)
+        TEST_ERROR;
+
+    /* Verify correct datatype */
+    if(H5Tget_class(tid1)!=H5T_COMPOUND)
+        TEST_ERROR;
+
+    if(H5Tget_nmembers(tid1)!=3)
+        TEST_ERROR;
+
+    /* Close datatype */
+    if(H5Tclose(tid1)<0)
+        TEST_ERROR;
+
+    /* Close Dataset */
+    if(H5Dclose(dataset)<0)
+        TEST_ERROR;
+
+    /* Free memory buffers */
+    free(wbuf);
+    free(rbuf);
+
+    PASSED();
+    return 0;
+
+error:
+    return -1;
+}   /* test_refer_dtype() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_refer_dtype2
+ *
+ * Purpose:	Test H5Tget_native_type for reference
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_refer_dtype2(hid_t file)
+{
+    hid_t		dset1,	/* Dataset ID			*/
+                        dset2;      /* Dereferenced dataset ID */
+    hid_t		sid1,       /* Dataspace ID	#1		*/
+                        sid2;       /* Dataspace ID	#2		*/
+    hid_t               dtype, native_type;
+    hsize_t		dims1[] = {1},
+            	        dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t	        start[SPACE2_RANK];     /* Starting location of hyperslab */
+    hsize_t		stride[SPACE2_RANK];    /* Stride of hyperslab */
+    hsize_t		count[SPACE2_RANK];     /* Element count of hyperslab */
+    hsize_t		block[SPACE2_RANK];     /* Block size of hyperslab */
+    hdset_reg_ref_t     wbuf,        /* buffer to write to disk */
+                        rbuf;        /* buffer read from disk */
+    uint8_t             *dwbuf,      /* Buffer for writing numeric data to disk */
+                        *drbuf;      /* Buffer for reading numeric data from disk */
+    uint8_t             *tu8;        /* Temporary pointer to uint8 data */
+    int                 i;           /* counting variables */
+
+    /* Output message about test being performed */
+    TESTING("dataset region reference");
+
+    /* Allocate write & read buffers */
+    dwbuf=malloc(sizeof(uint8_t)*SPACE2_DIM1*SPACE2_DIM2);
+    drbuf=calloc(sizeof(uint8_t),SPACE2_DIM1*SPACE2_DIM2);
+
+    /* Create dataspace for datasets */
+    if((sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL))<0)
+        TEST_ERROR;
+
+    /* Create a dataset */
+    if((dset2=H5Dcreate(file,"Dataset2",H5T_STD_U8LE,sid2,H5P_DEFAULT))<0)
+        TEST_ERROR;
+
+    for(tu8=dwbuf,i=0; i<SPACE2_DIM1*SPACE2_DIM2; i++)
+        *tu8++=i*3;
+
+    /* Write selection to disk */
+    if(H5Dwrite(dset2,H5T_STD_U8LE,H5S_ALL,H5S_ALL,H5P_DEFAULT,dwbuf)<0)
+        TEST_ERROR;
+
+    /* Close Dataset */
+    if(H5Dclose(dset2)<0)
+        TEST_ERROR;
+
+
+    /* Create dataspace for the reference dataset */
+    if((sid1=H5Screate_simple(SPACE1_RANK, dims1, NULL))<0)
+        TEST_ERROR;
+
+    /* Create a reference dataset */
+    if((dset1=H5Dcreate(file,"Dataset1",H5T_STD_REF_DSETREG,sid1,H5P_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Create references */
+    /* Select 6x6 hyperslab for first reference */
+    start[0]=2; start[1]=2;
+    stride[0]=1; stride[1]=1;
+    count[0]=1; count[1]=1;
+    block[0]=6; block[1]=6;
+
+    if(H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block)<0)
+        TEST_ERROR;
+
+    if((int)H5Sget_select_npoints(sid2) != 36)
+        TEST_ERROR;
+
+    /* Store first dataset region */
+    if(H5Rcreate(&wbuf,file,"/Dataset2",H5R_DATASET_REGION,sid2)<0)
+        TEST_ERROR;
+    if(H5Rget_obj_type(dset1,H5R_DATASET_REGION,&wbuf) != H5G_DATASET)
+        TEST_ERROR;
+
+    /* Write selection to disk */
+    if(H5Dwrite(dset1,H5T_STD_REF_DSETREG,H5S_ALL,H5S_ALL,H5P_DEFAULT,&wbuf)<0)
+        TEST_ERROR;
+
+    /* Close disk dataspace */
+    if(H5Sclose(sid1)<0)
+        TEST_ERROR;
+
+    /* Close Dataset */
+    if(H5Dclose(dset1)<0)
+        TEST_ERROR;
+
+    /* Close uint8 dataset dataspace */
+    if(H5Sclose(sid2)<0)
+        TEST_ERROR;
+
+
+
+
+    /* Open the dataset */
+    if((dset1=H5Dopen(file,"/Dataset1"))<0)
+        TEST_ERROR;
+
+    /* Get datatype for dataset */
+    if((dtype = H5Dget_type(dset1))<0)
+        TEST_ERROR;
+
+    /* Construct native type */
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    /* Check if the data type is equal */
+    if(!H5Tequal(native_type, H5T_STD_REF_DSETREG))
+        TEST_ERROR;
+
+    /* Read selection from disk */
+    if(H5Dread(dset1,H5T_STD_REF_DSETREG,H5S_ALL,H5S_ALL,H5P_DEFAULT,&rbuf)<0)
+        TEST_ERROR;
+
+    /* Try to open objects */
+    if((dset2=H5Rdereference(dset1,H5R_DATASET_REGION,&rbuf))<0)
+        TEST_ERROR;
+
+    /* Check what H5Rget_obj_type function returns */
+    if(H5Rget_obj_type(dset1, H5R_DATASET_REGION,&rbuf) != H5G_DATASET)
+        TEST_ERROR;
+
+    /* Check information in referenced dataset */
+    if((sid1 = H5Dget_space(dset2))<0)
+        TEST_ERROR;
+
+    if((int)H5Sget_simple_extent_npoints(sid1)!=100)
+        TEST_ERROR;
+
+    /* Read from disk */
+    if(H5Dread(dset2,H5T_STD_U8LE,H5S_ALL,H5S_ALL,H5P_DEFAULT,drbuf)<0)
+        TEST_ERROR;
+
+    for(tu8=(uint8_t *)drbuf,i=0; i<SPACE2_DIM1*SPACE2_DIM2; i++,tu8++)
+        if(*tu8 != (uint8_t)(i*3))
+            TEST_ERROR;
+
+    /* Get the hyperslab selection */
+    if((sid2=H5Rget_region(dset1,H5R_DATASET_REGION,&rbuf))<0)
+        TEST_ERROR;
+
+    /* Verify correct hyperslab selected */
+    if((int)H5Sget_select_npoints(sid2) != 36)
+        TEST_ERROR;
+    if((int)H5Sget_select_hyper_nblocks(sid2) != 1)
+        TEST_ERROR;
+
+    /* Close region space */
+    if(H5Sclose(sid2)<0)
+        TEST_ERROR;
+
+    /* Close first space */
+    if(H5Sclose(sid1)<0)
+        TEST_ERROR;
+
+    /* Close dereferenced Dataset */
+    if(H5Dclose(dset2)<0)
+        TEST_ERROR;
+
+    /* Close Dataset */
+    if(H5Dclose(dset1)<0)
+        TEST_ERROR;
+
+    /* Free memory buffers */
+    free(dwbuf);
+    free(drbuf);
+
+    PASSED();
+    return 0;
+
+error:
+    return -1;
+}   /* test_refer_dtype2() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_opaque_dtype
+ *
+ * Purpose:	Test H5Tget_native_type for opaque datatype
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_opaque_dtype(hid_t file)
+{
+    hid_t		type=-1, space=-1, dset=-1;
+    hid_t               dataset, dtype, native_type;
+    size_t              i;
+    unsigned char	wbuf[32], rbuf[32];
+    hsize_t		nelmts;
+
+    TESTING("opaque datatype");
+
+    /* opaque_1 */
+    nelmts = sizeof(wbuf);
+    if ((type=H5Tcreate(H5T_OPAQUE, 1))<0 ||
+            H5Tset_tag(type, "testing 1-byte opaque type")<0 ||
+            (space=H5Screate_simple(1, &nelmts, NULL))<0 ||
+            (dset=H5Dcreate(file, DSET_OPAQUE_NAME, type, space, H5P_DEFAULT))<0)
+	TEST_ERROR;
+
+    for (i=0; i<sizeof(wbuf); i++)
+        wbuf[i] = (unsigned char)0xff ^ (unsigned char)i;
+
+    if (H5Dwrite(dset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf)<0)
+	TEST_ERROR;
+    if (H5Sclose(space)<0) TEST_ERROR;
+    if (H5Dclose(dset)<0) TEST_ERROR;
+
+
+    /* Open dataset again to check H5Tget_native_type */
+    if((dataset=H5Dopen(file, DSET_OPAQUE_NAME))<0) TEST_ERROR;
+
+    if((dtype=H5Dget_type(dataset))<0) TEST_ERROR;
+
+    if((native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT))<0)
+        TEST_ERROR;
+
+    if(!H5Tequal(native_type, type)) TEST_ERROR;
+
+    if (H5Dread(dataset, native_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, rbuf)<0)
+        TEST_ERROR;
+
+    for(i=0; i<sizeof(rbuf); i++) {
+	if (rbuf[i] != wbuf[i]) {
+	    H5_FAILED();
+	    printf("    Read different values than written.\n");
+            printf("    At index %u\n", (unsigned)i);
+	    goto error;
+        }
+    }
+
+    if (H5Tclose(type)<0) TEST_ERROR;
+    if (H5Tclose(dtype)<0) TEST_ERROR;
+    if (H5Tclose(native_type)<0) TEST_ERROR;
+    if (H5Dclose(dataset)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+error:
+    return -1;
+} /* test_opaque_dtype */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_bitfield_dtype
+ *
+ * Purpose:	Test H5Tget_native_type for bitfield datatype
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_bitfield_dtype(hid_t file)
+{
+    hid_t		type=-1, space=-1, dset=-1;
+    hid_t               dataset, dtype, native_type;
+    size_t		i;
+    unsigned char	wbuf[32];
+    hsize_t		nelmts;
+
+    TESTING("bitfield datatype");
+
+    /* opaque_1 */
+    nelmts = sizeof(wbuf);
+    if ((type=H5Tcopy(H5T_STD_B8LE))<0 ||
+            (space=H5Screate_simple(1, &nelmts, NULL))<0 ||
+            (dset=H5Dcreate(file, DSET_BITFIELD_NAME, type, space, H5P_DEFAULT))<0)
+	TEST_ERROR;
+
+    for (i=0; i<sizeof(wbuf); i++)
+        wbuf[i] = (unsigned char)0xff ^ (unsigned char)i;
+
+    if (H5Dwrite(dset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, wbuf)<0)
+	TEST_ERROR;
+    if (H5Sclose(space)<0) TEST_ERROR;
+    if (H5Dclose(dset)<0) TEST_ERROR;
+
+
+    /* Open dataset again to check H5Tget_native_type */
+    if((dataset=H5Dopen(file, DSET_BITFIELD_NAME))<0) TEST_ERROR;
+
+    if((dtype=H5Dget_type(dataset))<0) TEST_ERROR;
+
+    H5E_BEGIN_TRY {
+        native_type=H5Tget_native_type(dtype, H5T_DIR_DEFAULT);
+    } H5E_END_TRY;
+    if(native_type>0) {
+        H5_FAILED();
+        puts("  Bit field isn't supported.  Should have failed.");
+        TEST_ERROR;
+    }
+
+    if (H5Tclose(type)<0) TEST_ERROR;
+    if (H5Tclose(dtype)<0) TEST_ERROR;
+    if (H5Dclose(dataset)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+error:
+    return -1;
+} /* test_bitfield_dtype */
+
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_ninteger
+ *
+ * Purpose: Test the native integer function; made to check the case
+ * like the Cray SV1, where the size of short is 8 but precision is 32
+ *
+ * Return: Success: 0
+ *  Failure: -1
+ *
+ * Programmer: pvn at ncsa.uiuc.edu
+ *  September 3, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_ninteger(void)
+{
+    hid_t     fid1=(-1);             /* file ID */
+    hid_t     fid2=(-1);             /* file ID */
+    hid_t     did1=(-1);             /* dataset ID */
+    hid_t     did2=(-1);             /* dataset ID */
+    hid_t     sid1=(-1);             /* dataspace ID */
+    hid_t     dcpl1=(-1);            /* dataset creation property list ID */
+    hid_t     dcpl2=(-1);            /* dataset creation property list ID */
+    hid_t     tid1=(-1);             /* file datatype */
+    hid_t     tid2=(-1);             /* file datatype */
+    hid_t     nid1=(-1);             /* native datatype */
+    hid_t     nid2=(-1);             /* native datatype */
+    hsize_t   dims[1]={DIM3};        /* dataspace dimensions */
+    hsize_t   nelmts;                /* number of elements in dataset */
+    int       rank=1;                /* rank of dataset */
+    int       buf[DIM3];
+    int       chk[DIM3];
+    int       i;
+
+    for (i=0; i<DIM3; i++){
+     buf[i]=i;
+    }
+
+    TESTING("native integer ");
+
+   /*-------------------------------------------------------------------------
+    * step1: create a file
+    *-------------------------------------------------------------------------
+    */
+    /* create a file using default properties */
+    if ((fid1=H5Fcreate("tstint1.h5",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+     goto error;
+
+    /* create a data space */
+    if ((sid1 = H5Screate_simple(rank,dims,NULL))<0) goto error;
+
+    /* create dcpl  */
+    if((dcpl1 = H5Pcreate(H5P_DATASET_CREATE))<0) goto error;
+
+    /* create a dataset */
+    if ((did1 = H5Dcreate(fid1,"dset",H5T_NATIVE_INT,sid1,dcpl1)) <0) goto error;
+
+    /* write */
+    if(H5Dwrite(did1,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0)
+     goto error;
+
+    /* close  */
+    if (H5Sclose (sid1)<0) goto error;
+    if (H5Pclose (dcpl1)<0) goto error;
+    if (H5Dclose (did1)<0) goto error;
+    if (H5Fclose (fid1)<0) goto error;
+
+   /*-------------------------------------------------------------------------
+    * step 2: open and create another file copying the data from file1
+    *-------------------------------------------------------------------------
+    */
+
+     /* open */
+    if ((fid1=H5Fopen("tstint1.h5",H5F_ACC_RDONLY,H5P_DEFAULT))<0)
+     goto error;
+
+    /* open dataset */
+    if ((did1=H5Dopen(fid1,"dset"))<0)
+     goto error;
+
+    if ((sid1=H5Dget_space(did1))<0)
+     goto error;
+
+    /* get dcpl */
+    if ((dcpl1=H5Dget_create_plist(did1))<0)
+     goto error;
+
+    /* get file datatype */
+    if ((tid1=H5Dget_type (did1))<0)
+     goto error;
+
+    /* get native datatype */
+    if ((nid1=H5Tget_native_type(tid1,H5T_DIR_DEFAULT))<0)
+     goto error;
+
+    /* get size */
+    if (H5Tget_size(nid1)==0)
+     goto error;
+
+    /* get rank */
+    if ((rank=H5Sget_simple_extent_ndims(sid1))<0)
+     goto error;
+    HDmemset(dims, 0, sizeof dims);
+
+    /* get dimension */
+    if (H5Sget_simple_extent_dims(sid1,dims,NULL)<0)
+     goto error;
+    nelmts=1;
+    for (i=0; i<rank; i++)
+     nelmts*=dims[i];
+
+    /* read */
+    if (H5Dread(did1,nid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,chk)<0)
+     goto error;
+
+    /* create a file using default properties */
+    if ((fid2=H5Fcreate("tstint2.h5",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+     goto error;
+
+    /* create a dataset using the native type */
+    if ((did2 = H5Dcreate(fid2,"dset",nid1,sid1,dcpl1)) <0) goto error;
+
+    /* write */
+    if(H5Dwrite(did2,nid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,chk)<0)
+     goto error;
+
+    /* get dcpl */
+    if ((dcpl2=H5Dget_create_plist(did2))<0)
+     goto error;
+
+    /* get file datatype */
+    if ((tid2=H5Dget_type (did2))<0)
+     goto error;
+
+    /* get native datatype */
+    if ((nid2=H5Tget_native_type(tid2,H5T_DIR_DEFAULT))<0)
+     goto error;
+
+    /* check */
+    if (H5Tget_precision(nid1)!=H5Tget_precision(nid2)) {
+     printf("    Precision differ.\n");
+     goto error;
+    }
+
+    /* compare dataset creation property lists */
+    if(H5Pequal(dcpl1,dcpl2)<=0) {
+     printf("    Property lists differ.\n");
+     goto error;
+    }
+
+    /* check */
+    for (i = 0; i < DIM3; i++) {
+     if (buf[i] != chk[i]) {
+      H5_FAILED();
+      printf("    Read different values than written.\n");
+      printf("    At index %d\n", i);
+      goto error;
+     }
+    }
+
+    /* close  */
+    if (H5Sclose (sid1)<0) goto error;
+    if (H5Pclose (dcpl1)<0) goto error;
+    if (H5Pclose (dcpl2)<0) goto error;
+    if (H5Tclose (tid1)<0) goto error;
+    if (H5Tclose (tid2)<0) goto error;
+    if (H5Tclose (nid1)<0) goto error;
+    if (H5Tclose (nid2)<0) goto error;
+    if (H5Dclose (did1)<0) goto error;
+    if (H5Dclose (did2)<0) goto error;
+    if (H5Fclose (fid1)<0) goto error;
+    if (H5Fclose (fid2)<0) goto error;
+
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+     H5Pclose(dcpl1);
+     H5Pclose(dcpl2);
+     H5Tclose(tid1);
+     H5Tclose(tid2);
+     H5Tclose(nid1);
+     H5Tclose(nid2);
+     H5Dclose(did1);
+     H5Dclose(did2);
+     H5Sclose(sid1);
+     H5Fclose(fid1);
+     H5Fclose(fid2);
+    } H5E_END_TRY;
+    return -1;
+} /* end test_ninteger() */
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Test H5Tget_native_type for different datatype
+ *
+ * Programmer:	Raymond Lu
+ *		October 15, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    hid_t		file, fapl;
+    int			nerrors=0;
+    char		filename[1024];
+
+    h5_reset();
+    fapl = h5_fileaccess();
+
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	    goto error;
+
+    nerrors += test_atomic_dtype(file)<0 	?1:0;
+    nerrors += test_compound_dtype(file)<0 	?1:0;
+    nerrors += test_compound_dtype2(file)<0 	?1:0;
+    nerrors += test_compound_dtype3(file)<0 	?1:0;
+    nerrors += test_compound_opaque(file)<0 	?1:0;
+    nerrors += test_enum_dtype(file)<0 	        ?1:0;
+    nerrors += test_array_dtype(file)<0 	?1:0;
+    nerrors += test_array_dtype2(file)<0 	?1:0;
+    nerrors += test_vl_dtype(file)<0 	        ?1:0;
+    nerrors += test_vlstr_dtype(file)<0 	?1:0;
+    nerrors += test_str_dtype(file)<0           ?1:0;
+    nerrors += test_refer_dtype(file)<0 	?1:0;
+    nerrors += test_refer_dtype2(file)<0 	?1:0;
+    nerrors += test_opaque_dtype(file)<0 	?1:0;
+    nerrors += test_bitfield_dtype(file)<0 	?1:0;
+    nerrors += test_ninteger()<0  ?1:0;
+
+    if (H5Fclose(file)<0) goto error;
+    if (nerrors) goto error;
+    printf("All native datatype tests passed.\n");
+    h5_cleanup(FILENAME, fapl);
+    return 0;
+
+ error:
+    nerrors = MAX(1, nerrors);
+    printf("***** %d DATASET TEST%s FAILED! *****\n",
+	   nerrors, 1 == nerrors ? "" : "S");
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/test/ohdr.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/ohdr.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/ohdr.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,322 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Tuesday, November 24, 1998
+ */
+#include "h5test.h"
+#include "H5Iprivate.h"
+/*
+ * This file needs to access private datatypes from the H5O package.
+ */
+#define H5O_PACKAGE
+#include "H5Opkg.h"
+
+/*
+ * This file needs to access private datatypes from the H5G package.
+ */
+#define H5G_PACKAGE
+#include "H5Gpkg.h"
+
+const char *FILENAME[] = {
+    "ohdr",
+    NULL
+};
+
+/* The tbogus.h5 is generated from gen_bogus.c in HDF5 'test' directory.
+ * To get this data file, define H5O_ENABLE_BOGUS in src/H5Oprivate, rebuild
+ * the library and simply compile gen_bogus.c with that HDF5 library and run it. */
+#define FILE_BOGUS "tbogus.h5"
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:
+ *
+ * Return:	Success:
+ *
+ *		Failure:
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, November 24, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    hid_t	fapl=-1, file=-1;
+    hid_t	dset=-1;
+    H5F_t	*f=NULL;
+    char	filename[1024];
+    H5G_entry_t	oh_ent;
+    time_t	time_new, ro;
+    int		i;
+
+    /* Reset library */
+    h5_reset();
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+	goto error;
+    if (NULL==(f=H5I_object(file))) {
+	H5Eprint(stdout);
+	goto error;
+    }
+
+    /*
+     * Test object header creation
+     */
+    TESTING("object header creation");
+    HDmemset(&oh_ent,0,sizeof(H5G_entry_t));
+    if (H5O_create(f, H5P_DATASET_XFER_DEFAULT, 64, &oh_ent/*out*/)<0) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    PASSED();
+
+    /* create a new message */
+    TESTING("message creation");
+    time_new = 11111111;
+    if (H5O_modify(&oh_ent, H5O_MTIME_NEW_ID, H5O_NEW_MESG, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT)<0) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (H5AC_flush(f, H5P_DATASET_XFER_DEFAULT, TRUE)<0) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (NULL==H5O_read(&oh_ent, H5O_MTIME_NEW_ID, 0, &ro, H5P_DATASET_XFER_DEFAULT)) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (ro!=time_new) {
+	H5_FAILED();
+	HDfprintf(stdout, "    got: {%ld}\n", (long)ro);
+	HDfprintf(stdout, "    ans: {%ld}\n", (long)time_new);
+	goto error;
+    }
+    PASSED();
+
+    /*
+     * Test modification of an existing message.
+     */
+    TESTING("message modification");
+    time_new = 33333333;
+    if (H5O_modify(&oh_ent, H5O_MTIME_NEW_ID, 0, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT)<0) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (H5AC_flush(f, H5P_DATASET_XFER_DEFAULT, TRUE)<0) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (NULL==H5O_read(&oh_ent, H5O_MTIME_NEW_ID, 0, &ro, H5P_DATASET_XFER_DEFAULT)) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (ro!=time_new) {
+	H5_FAILED();
+	HDfprintf(stdout, "    got: {%ld}\n", (long)ro);
+	HDfprintf(stdout, "    ans: {%ld}\n", (long)time_new);
+	goto error;
+    }
+    PASSED();
+
+
+    /*
+     * Test creation of a second message of the same type.
+     */
+    TESTING("duplicate message creation");
+    time_new = 55555555;
+    if (H5O_modify(&oh_ent, H5O_MTIME_NEW_ID, H5O_NEW_MESG, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT)<0) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (H5AC_flush(f, H5P_DATASET_XFER_DEFAULT, TRUE)<0) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (NULL==H5O_read(&oh_ent, H5O_MTIME_NEW_ID, 1, &ro, H5P_DATASET_XFER_DEFAULT)) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (ro!=time_new) {
+	H5_FAILED();
+	HDfprintf(stdout, "    got: {%ld}\n", (long)ro);
+	HDfprintf(stdout, "    ans: {%ld}\n", (long)time_new);
+	goto error;
+    }
+    PASSED();
+
+    /*
+     * Test modification of the second message with a symbol table.
+     */
+    TESTING("duplicate message modification");
+    time_new = 77777777;
+    if (H5O_modify(&oh_ent, H5O_MTIME_NEW_ID, 1, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT)<0) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (H5AC_flush(f, H5P_DATASET_XFER_DEFAULT, TRUE)<0) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (NULL==H5O_read(&oh_ent, H5O_MTIME_NEW_ID, 1, &ro, H5P_DATASET_XFER_DEFAULT)) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (ro!=time_new) {
+	H5_FAILED();
+	HDfprintf(stdout, "    got: {%ld}\n", (long)ro);
+	HDfprintf(stdout, "    ans: {%ld}\n", (long)time_new);
+	goto error;
+    }
+    PASSED();
+
+    /*
+     * Test creation of a bunch of messages one after another to see
+     * what happens when the object header overflows in core.
+     * (Use 'old' MTIME message here, because it is large enough to be
+     *  replaced with a continuation message (the new one is too small)
+     *  and the library doesn't understand how to migrate more than one
+     *  message from an object header currently - QAK - 10/8/03)
+     */
+    TESTING("object header overflow in memory");
+    for (i=0; i<40; i++) {
+        time_new = (i+1)*1000+1;
+        if (H5O_modify(&oh_ent, H5O_MTIME_ID, H5O_NEW_MESG, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT)<0) {
+	    H5_FAILED();
+	    H5Eprint(stdout);
+	    goto error;
+	}
+    }
+    if (H5AC_flush(f, H5P_DATASET_XFER_DEFAULT, TRUE)<0) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    PASSED();
+
+    /*
+     * Test creation of a bunch of messages one after another to see
+     * what happens when the object header overflows on disk.
+     */
+    TESTING("object header overflow on disk");
+    for (i=0; i<10; i++) {
+        time_new = (i + 1) * 1000 + 10;
+        if (H5O_modify(&oh_ent, H5O_MTIME_NEW_ID, H5O_NEW_MESG, 0, 0, &time_new, H5P_DATASET_XFER_DEFAULT)<0) {
+	    H5_FAILED();
+	    H5Eprint(stdout);
+	    goto error;
+	}
+        if (H5AC_flush(f, H5P_DATASET_XFER_DEFAULT, TRUE)<0) {
+	    H5_FAILED();
+	    H5Eprint(stdout);
+	    goto error;
+	}
+    }
+    PASSED();
+
+    /*
+     * Delete all time messages.
+     */
+    TESTING("message deletion");
+    if (H5O_remove(&oh_ent, H5O_MTIME_NEW_ID, H5O_ALL, TRUE, H5P_DATASET_XFER_DEFAULT)<0) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (H5O_remove(&oh_ent, H5O_MTIME_ID, H5O_ALL, TRUE, H5P_DATASET_XFER_DEFAULT)<0) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (H5O_read(&oh_ent, H5O_MTIME_NEW_ID, 0, &ro, H5P_DATASET_XFER_DEFAULT)) {
+	H5_FAILED();
+	puts("    H5O_read() should have failed but didn't");
+	H5Eclear();
+	goto error;
+    }
+    if (H5O_read(&oh_ent, H5O_MTIME_ID, 0, &ro, H5P_DATASET_XFER_DEFAULT)) {
+	H5_FAILED();
+	puts("    H5O_read() should have failed but didn't");
+	H5Eclear();
+	goto error;
+    }
+    PASSED();
+
+
+    /* release resources */
+    TESTING("object header closing");
+    if (H5O_close(&oh_ent)<0) {
+	H5_FAILED();
+	H5Eprint(stdout);
+	goto error;
+    }
+    if (H5Fclose(file)<0) goto error;
+    PASSED();
+
+    /* Test reading dataset with undefined object header message */
+    TESTING("reading object with unknown header message");
+    {
+        char testfile[512]="";
+        char *srcdir = getenv("srcdir");
+
+        /* Build path to test file */
+        if (srcdir && ((HDstrlen(srcdir) + HDstrlen(FILE_BOGUS) + 1) < sizeof(testfile))){
+            HDstrcpy(testfile, srcdir);
+            HDstrcat(testfile, "/");
+        }
+        HDstrcat(testfile, FILE_BOGUS);
+
+        if ((file=H5Fopen(testfile, H5F_ACC_RDONLY, fapl))<0)
+            goto error;
+
+        /* Open the dataset with the unknown header message (generated with gen_bogus.c) */
+        if((dset=H5Dopen(file,"/Dataset1"))<0)
+            goto error;
+        if (H5Dclose(dset)<0) goto error;
+
+        if (H5Fclose(file)<0) goto error;
+    }
+    PASSED();
+
+    puts("All object header tests passed.");
+    h5_cleanup(FILENAME, fapl);
+    return 0;
+
+ error:
+     puts("*** TESTS FAILED ***");
+    H5E_BEGIN_TRY {
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/test/reserved.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/reserved.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/reserved.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,441 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "h5test.h"
+
+const char *FILENAME[] = {
+    "rsrv_heap",
+    "rsrv_ohdr",
+    "rsrv_vlen",
+    NULL
+};
+
+/*-------------------------------------------------------------------------
+ * Function:	rsrv_heap
+ *
+ * Purpose:	Ensure that heaps reserve file address space.
+ *			This function does this by creating datasets up to and past
+ *			the limit of the file, then ensuring that an error (not an
+ *			assert) was generated and that the file is readable.
+ *
+ * Return:	Success:	0
+ *		Failure:	1
+ *
+ * Programmer:	James Laird
+ *              Nat Furrer
+ *              Friday, May 28, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+rsrv_heap(void)
+{
+    hid_t       file_id=(-1), dataset_id=(-1), dataspace_id=(-1);
+    hid_t       fapl=(-1), fcpl=(-1);
+    hsize_t     dims[1] = {1};
+    char        filename[1024], dset_name[10];
+    int         i;
+
+    TESTING("Reserving file space for heap");
+
+    /* Create a new file. */
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    /* Set file address sizes to be very small. */
+    fcpl = H5Pcreate(H5P_FILE_CREATE);
+    if(fcpl < 0) TEST_ERROR;
+    if(H5Pset_sizes(fcpl, (size_t)2,(size_t)2) < 0) TEST_ERROR;
+
+    file_id = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl);
+    if(file_id < 0) TEST_ERROR;
+
+    /* Write datasets until the file is full, at which point HDF5
+     * should throw an error.
+     */
+    for (i = 0; i < 200; i++)
+    {
+        H5E_BEGIN_TRY {
+            dataspace_id = H5Screate_simple(1, dims, dims);
+        } H5E_END_TRY
+
+        sprintf(dset_name, "Dset %d", i);
+
+        H5E_BEGIN_TRY {
+            dataset_id = H5Dcreate(file_id, dset_name, H5T_NATIVE_INT, dataspace_id, H5P_DEFAULT);
+        } H5E_END_TRY
+
+        if(dataset_id < 0)
+            break;
+
+        H5E_BEGIN_TRY {
+            H5Dwrite(dataset_id, H5T_NATIVE_INT, dataspace_id, dataspace_id, H5P_DEFAULT, &i);
+        } H5E_END_TRY
+
+        if( H5Dclose(dataset_id) < 0) TEST_ERROR;
+        if( H5Sclose(dataspace_id) < 0) TEST_ERROR;
+    }
+
+    /* The loop should have broken before completing--the file should not have had
+     * enough address space to hold 200 datasets (or this test needs to be updated!).
+     */
+    if(i == 200)
+        TEST_ERROR;
+
+    /* Close the file, property lists, and library */
+    if( H5Fclose(file_id) < 0) TEST_ERROR;
+    if( H5Pclose(fapl) < 0) TEST_ERROR;
+    if( H5Pclose(fcpl) < 0) TEST_ERROR;
+    if( H5close() < 0) TEST_ERROR;
+
+    /* Re-open the library and try to read a dataset from the file we created */
+    if( H5open() < 0) TEST_ERROR;
+
+    sprintf(dset_name, "Dset %d", i - 2);
+
+    file_id = H5Fopen(filename, H5F_ACC_RDONLY, H5P_DEFAULT);
+    if( file_id < 0) TEST_ERROR;
+
+    dataset_id = H5Dopen(file_id, dset_name);
+
+    /* If we can read a dataset from the file, the file has been flushed to disk
+     * (if the heap or object headers weren't flushed, the file would be empty).
+     */
+    if(dataset_id == H5I_BADID)
+       TEST_ERROR;
+
+    if( H5Dclose(dataset_id) < 0) TEST_ERROR;
+    if( H5Fclose(file_id) < 0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+   error:
+      /* Close everything we can and exit */
+   H5E_BEGIN_TRY {
+      H5Dclose(dataset_id);
+      H5Sclose(dataspace_id);
+      H5Pclose(fcpl);
+      H5Pclose(fapl);
+      H5Fclose(file_id);
+   } H5E_END_TRY
+   return 1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	rsrv_ohdr
+ *
+ * Purpose:	Ensure that object headers reserve file address space.
+ *			This function does this by creating attributes of a dataset
+ *			past the limit of the file, then ensuring that an error (not
+ *			an assert) was generated and that the file is readable.
+ *
+ * Return:	Success:	0
+ *		Failure:	1
+ *
+ * Programmer:	James Laird
+ *              Nat Furrer
+ *              Friday, May 28, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+rsrv_ohdr(void)
+{
+    hid_t       file_id=(-1), dataset_id=(-1), dataspace_id=(-1);
+    hid_t       fapl=(-1), fcpl=(-1), aid, attr_id;
+    hsize_t     dims[2];
+    herr_t      status;
+    int         attrval[4][6];
+    char        filename[1024], attrname[20];
+    int         i;
+
+    TESTING("Reserving file space for object headers");
+
+    /* Create a new file */
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+
+    fcpl = H5Pcreate(H5P_FILE_CREATE);
+    if(fcpl < 0) TEST_ERROR;
+    if( H5Pset_sizes(fcpl, (size_t)2,(size_t)2) < 0) TEST_ERROR;
+
+    file_id = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl);
+    if( file_id < 0) TEST_ERROR;
+
+    /* Create the data space for the dataset. */
+    dims[0] = 4;
+    dims[1] = 6;
+    dataspace_id = H5Screate_simple(2, dims, NULL);
+    if( dataspace_id < 0) TEST_ERROR;
+
+    /* Create the dataset. */
+    dataset_id = H5Dcreate(file_id, "/dset", H5T_STD_I32BE, dataspace_id, H5P_DEFAULT);
+    if( dataset_id < 0) TEST_ERROR;
+
+    for(i=0; i<6; i++)
+    {
+        attrval[0][i] = 0;
+        attrval[1][i] = 1;
+        attrval[2][i] = 2;
+        attrval[3][i] = 3;
+    }
+
+    for (i = 0; i< 2000; i++)
+    {
+        sprintf(attrname, "attr %d", i);
+        H5E_BEGIN_TRY{
+            aid =  H5Screate_simple(2, dims, NULL);
+            attr_id = H5Acreate (dataset_id, attrname, H5T_STD_I32BE, aid, H5P_DEFAULT);
+            H5Awrite(attr_id, H5T_NATIVE_INT, attrval);
+            status = H5Aclose(attr_id);
+        } H5E_END_TRY
+
+        if(status < 0)
+            break;
+    }
+
+    /* The loop should have broken before completing--the file should not have had
+     * enough address space to hold 2000 attributes (or this test needs to be updated
+!).
+     */
+    if(i == 2000)
+        TEST_ERROR;
+
+    /* End access to the dataset and dataspace and release resources. */
+    if( H5Dclose(dataset_id) < 0) TEST_ERROR;
+    if( H5Pclose (fapl) < 0) TEST_ERROR;
+    if( H5Pclose (fcpl) < 0) TEST_ERROR;
+    if( H5Sclose(dataspace_id) < 0) TEST_ERROR;
+
+    /* Close the file and the library. */
+    if( H5Fclose(file_id) < 0) TEST_ERROR;
+    if( H5close() < 0) TEST_ERROR;
+
+    /* Re-open the library and try to read a dataset from the file we created */
+    if( H5open() < 0) TEST_ERROR;
+
+    file_id = H5Fopen(filename, H5F_ACC_RDONLY, H5P_DEFAULT);
+    if( file_id < 0) TEST_ERROR;
+
+    dataset_id = H5Dopen(file_id, "/dset");
+
+    /* If we can read the dataset from the file, the file has been flushed to disk
+     * (if the heap or object headers weren't flushed, the file would be empty).
+     */
+    if(dataset_id == H5I_BADID)
+        TEST_ERROR;
+
+    if( H5Dclose(dataset_id) < 0) TEST_ERROR;
+    if( H5Fclose(file_id) < 0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+   error:
+          /* Close everything we can and exit */
+   H5E_BEGIN_TRY {
+      H5Dclose(dataset_id);
+      H5Sclose(dataspace_id);
+      H5Pclose(fcpl);
+      H5Pclose(fapl);
+      H5Fclose(file_id);
+   } H5E_END_TRY
+   return 1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	rsrv_vlen
+ *
+ * Purpose:	Ensure that variable length datatypes properly ensure that
+ *              enough file address space exists before writing.
+ *		This function does this by creating a dataset containing
+ *              variable length data past the limit of the file, then
+ *              ensuring that an error (not an assert) was generated and
+ *              that the file is readable.
+ *
+ * Return:	Success:	0
+ *		Failure:	1
+ *
+ * Programmer:	James Laird
+ *		Nat Furrer
+ *              Thursday, July 1, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+rsrv_vlen(void)
+{
+    hid_t       file_id=(-1), dataset_id=(-1), dataspace_id=(-1), type_id=(-1);
+    hid_t       fapl=(-1), fcpl=(-1), mem_space_id=(-1);
+    hssize_t    offset[1];
+    hsize_t     start[1];
+    hsize_t     dims[1], count[1];
+    herr_t      status;
+    int         i;
+    int         write_buf[20];
+    char        filename[1024];
+    hvl_t       vlen_data;
+
+    TESTING("Reserved space with variable length data");
+
+    /* Create a new file */
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
+
+    /* Make file address space very small */
+    fcpl = H5Pcreate(H5P_FILE_CREATE);
+    if( fcpl < 0) TEST_ERROR;
+    if( H5Pset_sizes(fcpl, (size_t)2,(size_t)2) < 0) TEST_ERROR;
+
+    file_id = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl);
+    if( file_id < 0) TEST_ERROR;
+
+    /* Create the data space for the dataset. */
+    dims[0] = 2000;
+    dataspace_id = H5Screate_simple(1, dims, NULL);
+    if( dataspace_id < 0) TEST_ERROR;
+
+    /* Create a variable length type */
+    type_id = H5Tvlen_create(H5T_NATIVE_INT);
+    if( type_id < 0) TEST_ERROR;
+
+    /* Create the dataset. */
+    dataset_id = H5Dcreate(file_id, "/dset", type_id, dataspace_id, H5P_DEFAULT);
+    if( dataset_id < 0) TEST_ERROR;
+
+    /* Create some data to write */
+    for (i = 0; i < 20; i++)
+        write_buf[i] = i+1;
+    vlen_data.p = write_buf;
+
+    /* Create a memory dataspace for writing */
+    dims[0] = 1;
+    mem_space_id = H5Screate_simple(1, dims, NULL);
+    if( mem_space_id < 0) TEST_ERROR;
+
+    /* Create a selection to write to */
+    start[0] = 0;
+    count[0] = 1;
+    if( H5Sselect_hyperslab(dataspace_id, H5S_SELECT_SET,
+                            start, NULL, count, NULL)  < 0) TEST_ERROR;
+
+    for (i = 0; i< 2000; i++)
+    {
+        vlen_data.len = (i%20) + 1;
+
+        offset[0] = i;
+        if( H5Soffset_simple(dataspace_id, offset) <0) TEST_ERROR;
+
+        H5E_BEGIN_TRY
+            status = H5Dwrite(dataset_id, type_id, mem_space_id, dataspace_id, H5P_DEFAULT, &vlen_data);
+        H5E_END_TRY
+
+        if(status < 0)
+            break;
+    }
+
+    /* The loop should have broken before completing--the file should not have had
+     * enough address space to hold 2000 attributes (or this test needs to be updated!).
+     */
+    if(i == 2000)
+        TEST_ERROR;
+
+    /* End access to the dataset and dataspace and release resources. */
+    if( H5Dclose(dataset_id) < 0) TEST_ERROR;
+    if( H5Pclose(fcpl) < 0) TEST_ERROR;
+    if( H5Pclose(fapl) < 0) TEST_ERROR;
+    if( H5Sclose(dataspace_id) < 0) TEST_ERROR;
+    if( H5Tclose(type_id) < 0) TEST_ERROR;
+    if( H5Sclose(mem_space_id) < 0) TEST_ERROR;
+
+    /* Close the file and the library. */
+    if( H5Fclose(file_id) < 0) TEST_ERROR;
+    if( H5close() < 0) TEST_ERROR;
+
+    /* Re-open the library and try to read a dataset from the file we created */
+    if( H5open() < 0) TEST_ERROR;
+
+    file_id = H5Fopen(filename, H5F_ACC_RDONLY, H5P_DEFAULT);
+    if( file_id < 0) TEST_ERROR;
+
+    dataset_id = H5Dopen(file_id, "/dset");
+
+    /* If we can read the dataset from the file, the file has been flushed to disk
+     * (if the heap or object headers weren't flushed, the file would be empty).
+     */
+    if(dataset_id == H5I_BADID)
+        TEST_ERROR;
+
+    if( H5Dclose(dataset_id) < 0) TEST_ERROR;
+    if( H5Fclose(file_id) < 0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+   error:
+          /* Close everything we can and exit */
+   H5E_BEGIN_TRY {
+      H5Dclose(dataset_id);
+      H5Sclose(dataspace_id);
+      H5Sclose(mem_space_id);
+      H5Tclose(type_id);
+      H5Pclose(fcpl);
+      H5Pclose(fapl);
+      H5Fclose(file_id);
+   } H5E_END_TRY
+   return 1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:
+ *
+ * Return:	Success:
+ *
+ *		Failure:
+ *
+ * Programmer:	Nat Furrer and James Laird
+ *              Thursday, July 1, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    int num_errs=0;
+    hid_t fapl;
+
+    num_errs+=rsrv_ohdr();
+    num_errs+=rsrv_heap();
+    num_errs+=rsrv_vlen();
+
+    if(num_errs > 0)
+        printf("**** %d FAILURE%s! ****\n", num_errs, num_errs==1?"":"S");
+    else
+        puts("All address space reservation tests passed.");
+
+    fapl = h5_fileaccess();
+    h5_cleanup(FILENAME, fapl);
+    return num_errs;
+}
+


Property changes on: packages/hdf5/branches/upstream/current/test/reserved.c
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/test/set_extent.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/set_extent.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/set_extent.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,498 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Pedro Vicente <pvn at ncsa.uiuc.edu>
+ *              April 12, 2002
+ *
+ * Purpose:     Tests the H5Dset_extent call
+ */
+
+
+#include "hdf5.h"
+#include "h5test.h"
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Tests the function H5Dset_extent. In the current version of the library
+ * the dataset MUST be chunked.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define RANK 2
+#define ISTORE_IK       64
+
+
+int main( void )
+{
+
+    hid_t   file_id;
+    hid_t   dataset_id=(-1);
+    hid_t   space_id=(-1);
+    hid_t   plist_id=(-1);
+    hid_t   fcpl;               /* File creation property list */
+    hsize_t dims[RANK] = { 90, 90 };
+    hsize_t dims_new[RANK] = { 70, 70 };
+    hsize_t dims_chunk[RANK] = { 20, 20 };
+    hsize_t dims_out[RANK];
+    hsize_t maxdims[RANK] = { H5S_UNLIMITED, H5S_UNLIMITED };
+    int     data[ 90 ][ 90 ];
+    int     buf1[ 70 ][ 70 ];
+    int     buf2[ 90 ][ 90 ];
+    int     i, j, n = 0;
+    int     fillvalue = 1;   /* Fill value for the dataset */
+
+
+    for( i = 0; i < 90; i++ )
+        for( j = 0; j < 90; j++ )
+            data[i][j] = n++;
+
+    /*-------------------------------------------------------------------------
+    * Test H5Dset_extent with chunks on the raw data cache
+    *-------------------------------------------------------------------------
+    */
+
+
+    /* Create a new file using default properties. */
+    if ((file_id = H5Fcreate( "set_extent_create.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT ))<0) TEST_ERROR;
+
+    TESTING("extend dataset create with fill value");
+
+    /* Create the data space with unlimited dimensions. */
+    if ((space_id = H5Screate_simple( RANK, dims, maxdims ))<0) TEST_ERROR;
+
+    /* Modify dataset creation properties, i.e. enable chunking. */
+    if ((plist_id = H5Pcreate (H5P_DATASET_CREATE ))<0) TEST_ERROR;
+    if (H5Pset_chunk( plist_id, RANK, dims_chunk )<0) TEST_ERROR;
+    if (H5Pset_fill_value( plist_id, H5T_NATIVE_INT, &fillvalue )<0) TEST_ERROR;
+
+
+    /*-------------------------------------------------------------------------
+    * Create and write one dataset
+    *-------------------------------------------------------------------------
+    */
+
+    /* Create a new dataset */
+    if ((dataset_id = H5Dcreate( file_id , "Dataset1", H5T_NATIVE_INT, space_id, plist_id ))<0) TEST_ERROR;
+
+    /* Write the data. */
+    if (H5Dwrite( dataset_id , H5T_NATIVE_INT, space_id, H5S_ALL, H5P_DEFAULT, data )<0) TEST_ERROR;
+
+    /*-------------------------------------------------------------------------
+    * Set new dimensions for the array; shrink it
+    *-------------------------------------------------------------------------
+    */
+
+    /* Set new dimensions for the array. */
+    if (H5Dset_extent( dataset_id , dims_new )<0) TEST_ERROR;
+
+    /* Get the space. */
+    if ((space_id = H5Dget_space( dataset_id ))<0) TEST_ERROR;
+
+    /* Get dimensions. */
+    if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) TEST_ERROR;
+
+    if ( dims_out[0] != dims_new[0] ) TEST_ERROR;
+    if ( dims_out[1] != dims_new[1] ) TEST_ERROR;
+
+
+    /*-------------------------------------------------------------------------
+    * Read
+    *-------------------------------------------------------------------------
+    */
+
+    /* Read the new dataset. */
+    if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1 )<0) TEST_ERROR;
+
+
+    /* Compare the read array with the original array */
+    for( i = 0; i < (int)dims_out[0]; i++ )
+        for( j = 0; j < (int)dims_out[1]; j++ )
+            if (  buf1[i][j] != data[i][j] ) {
+                printf("buf1[%d][%d]=%d\n",i,j,buf1[i][j]);
+                printf("data[%d][%d]=%d\n",i,j,data[i][j]);
+                TEST_ERROR;
+            } /* end if */
+
+
+    /*-------------------------------------------------------------------------
+    * Set new dimensions for the array; expand it again
+    *-------------------------------------------------------------------------
+    */
+
+    /* Set new dimensions for the array. */
+    if (H5Dset_extent( dataset_id , dims )<0) TEST_ERROR;
+
+    /* Get the space. */
+    if ((space_id = H5Dget_space( dataset_id ))<0) TEST_ERROR;
+
+    /* Get dimensions. */
+    if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) TEST_ERROR;
+
+    if ( dims_out[0] != dims[0] ) TEST_ERROR;
+
+
+    /*-------------------------------------------------------------------------
+    * Read
+    *-------------------------------------------------------------------------
+    */
+
+    /* Read the new dataset. */
+    if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2 )<0) TEST_ERROR;
+
+    /* Compare the read array with the original array */
+    for( i = 0; i < (int)dims_out[0]; i++ ) {
+        for( j = 0; j < (int)dims_out[1]; j++ ) {
+            if ( i >= 70 || j >= 70 ) {
+                if (  buf2[i][j] != fillvalue ) TEST_ERROR;
+            }
+            else {
+                if (  buf2[i][j] != data[i][j] ) TEST_ERROR;
+            }
+        }
+    }
+
+
+    /*-------------------------------------------------------------------------
+    * Close/release resources
+    *-------------------------------------------------------------------------
+    */
+
+    H5Dclose( dataset_id );
+    H5Sclose( space_id );
+    H5Pclose( plist_id  );
+
+    PASSED();
+    TESTING("extend dataset create without fill value");
+
+    /* Create the data space with unlimited dimensions. */
+    if ((space_id = H5Screate_simple( RANK, dims, maxdims ))<0) TEST_ERROR;
+
+    /* Modify dataset creation properties, i.e. enable chunking. */
+    if ((plist_id = H5Pcreate (H5P_DATASET_CREATE ))<0) TEST_ERROR;
+    if (H5Pset_chunk( plist_id, RANK, dims_chunk )<0) TEST_ERROR;
+    if (H5Pset_fill_time( plist_id, H5D_FILL_TIME_ALLOC)<0) TEST_ERROR;
+
+    /*-------------------------------------------------------------------------
+    * Create and write one dataset
+    *-------------------------------------------------------------------------
+    */
+
+    /* Create a new dataset */
+    if ((dataset_id = H5Dcreate( file_id , "Dataset2", H5T_NATIVE_INT, space_id, plist_id ))<0) TEST_ERROR;
+
+    /* Write the data. */
+    if (H5Dwrite( dataset_id , H5T_NATIVE_INT, space_id, H5S_ALL, H5P_DEFAULT, data )<0) TEST_ERROR;
+
+    /*-------------------------------------------------------------------------
+    * Set new dimensions for the array; shrink it
+    *-------------------------------------------------------------------------
+    */
+
+    /* Set new dimensions for the array. */
+    if (H5Dset_extent( dataset_id , dims_new )<0) TEST_ERROR;
+
+    /* Get the space. */
+    if ((space_id = H5Dget_space( dataset_id ))<0) TEST_ERROR;
+
+    /* Get dimensions. */
+    if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) TEST_ERROR;
+
+    if ( dims_out[0] != dims_new[0] ) TEST_ERROR;
+
+
+    /*-------------------------------------------------------------------------
+    * Read
+    *-------------------------------------------------------------------------
+    */
+
+    /* Read the new dataset. */
+    if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1 )<0) TEST_ERROR;
+
+
+    /* Compare the read array with the original array */
+    for( i = 0; i < (int)dims_out[0]; i++ )
+        for( j = 0; j < (int)dims_out[1]; j++ )
+            if (  buf1[i][j] != data[i][j] ) TEST_ERROR;
+
+
+    /*-------------------------------------------------------------------------
+    * Set new dimensions for the array; expand it again
+    *-------------------------------------------------------------------------
+    */
+
+    /* Set new dimensions for the array. */
+    if (H5Dset_extent( dataset_id , dims )<0) TEST_ERROR;
+
+    /* Get the space. */
+    if ((space_id = H5Dget_space( dataset_id ))<0) TEST_ERROR;
+
+    /* Get dimensions. */
+    if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) TEST_ERROR;
+
+    if ( dims_out[0] != dims[0] ) TEST_ERROR;
+
+
+    /*-------------------------------------------------------------------------
+    * Read
+    *-------------------------------------------------------------------------
+    */
+
+    /* Read the new dataset. */
+    if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2 )<0) TEST_ERROR;
+
+    /* Compare the read array with the original array */
+    for( i = 0; i < (int)dims_out[0]; i++ ) {
+        for( j = 0; j < (int)dims_out[1]; j++ ) {
+            if ( i >= 70 || j >= 70 ) {
+                if (  buf2[i][j] != 0 ) TEST_ERROR;
+            }
+            else {
+                if (  buf2[i][j] != data[i][j] ) TEST_ERROR;
+            }
+        }
+    }
+
+
+    /*-------------------------------------------------------------------------
+    * Close/release resources
+    *-------------------------------------------------------------------------
+    */
+
+    H5Dclose( dataset_id );
+    H5Sclose( space_id );
+    H5Pclose( plist_id  );
+
+    H5Fclose( file_id );
+
+    PASSED();
+
+
+
+    /*-------------------------------------------------------------------------
+    * Test H5Dset_extent with chunks written to file
+    *-------------------------------------------------------------------------
+    */
+
+    /* Create a file creation property list */
+    if((fcpl = H5Pcreate(H5P_FILE_CREATE))<0) TEST_ERROR;
+
+    /* Set non-default indexed storage B-tree internal 'K' value */
+    if(H5Pset_istore_k(fcpl,ISTORE_IK)<0) TEST_ERROR;
+
+    /* Create a new file using properties. */
+    if ((file_id = H5Fcreate( "set_extent_read.h5", H5F_ACC_TRUNC, fcpl, H5P_DEFAULT ))<0) TEST_ERROR;
+
+    /* Close property list */
+    if(H5Pclose(fcpl)<0) TEST_ERROR;
+
+    TESTING("extend dataset read with fill value");
+
+    /* Create the data space with unlimited dimensions. */
+    if ((space_id = H5Screate_simple( RANK, dims, maxdims ))<0) TEST_ERROR;
+
+    /* Modify dataset creation properties, i.e. enable chunking. */
+    if ((plist_id = H5Pcreate (H5P_DATASET_CREATE ))<0) TEST_ERROR;
+    if (H5Pset_chunk( plist_id, RANK, dims_chunk )<0) TEST_ERROR;
+    if (H5Pset_fill_value( plist_id, H5T_NATIVE_INT, &fillvalue )<0) TEST_ERROR;
+
+    /* Create a new dataset within the file using cparms creation properties. */
+    if ((dataset_id = H5Dcreate( file_id , "Dataset1", H5T_NATIVE_INT, space_id, plist_id ))<0) TEST_ERROR;
+
+    /* Write the data. */
+    if (H5Dwrite( dataset_id , H5T_NATIVE_INT, space_id, H5S_ALL, H5P_DEFAULT, data )<0) TEST_ERROR;
+
+    /* Close/release resources. */
+    H5Dclose( dataset_id );
+    H5Sclose( space_id );
+    H5Pclose( plist_id  );
+    H5Fclose( file_id );
+
+
+    /* Open the file */
+    if ((file_id = H5Fopen( "set_extent_read.h5", H5F_ACC_RDWR, H5P_DEFAULT ))<0) TEST_ERROR;
+
+    /* Open the dataset */
+    if ((dataset_id = H5Dopen( file_id , "Dataset1" ))<0) TEST_ERROR;
+
+    /* Set new dimensions for the array. */
+    if (H5Dset_extent( dataset_id, dims_new )<0) TEST_ERROR;
+
+    /* Get the space. */
+    if ((space_id = H5Dget_space( dataset_id ))<0) TEST_ERROR;
+
+    /* Get dimensions. */
+    if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) TEST_ERROR;
+
+    if ( dims_out[0] != dims_new[0] ) TEST_ERROR;
+
+    /* Read the new dataset. */
+    if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1 )<0) TEST_ERROR;
+
+    /* Compare the read array with the original array */
+    for( i = 0; i < (int)dims_out[0]; i++ )
+        for( j = 0; j < (int)dims_out[1]; j++ )
+            if (  buf1[i][j] != data[i][j] )    TEST_ERROR;
+
+    /*-------------------------------------------------------------------------
+    * Set new dimensions for the array; expand it again
+    *-------------------------------------------------------------------------
+    */
+
+    /* Set new dimensions for the array. */
+    if (H5Dset_extent( dataset_id , dims )<0) TEST_ERROR;
+
+    /* Get the space. */
+    if ((space_id = H5Dget_space( dataset_id ))<0) TEST_ERROR;
+
+    /* Get dimensions. */
+    if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) TEST_ERROR;
+
+    if ( dims_out[0] != dims[0] ) TEST_ERROR;
+
+    /* Read the new dataset. */
+    if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2 )<0) TEST_ERROR;
+
+    /* Compare the read array with the original array */
+    for( i = 0; i < (int)dims_out[0]; i++ ) {
+        for( j = 0; j < (int)dims_out[1]; j++ ) {
+            if ( i >= 70 || j >= 70 ) {
+                if (  buf2[i][j] != fillvalue ) TEST_ERROR;
+            }
+            else {
+                if (  buf2[i][j] != data[i][j] ) TEST_ERROR;
+            }
+        }
+    }
+
+
+    /*-------------------------------------------------------------------------
+    * Close/release resources
+    *-------------------------------------------------------------------------
+    */
+
+    H5Dclose( dataset_id );
+    H5Sclose( space_id );
+
+    PASSED();
+
+
+    TESTING("extend dataset read without fill value");
+
+    /* Create the data space with unlimited dimensions. */
+    if ((space_id = H5Screate_simple( RANK, dims, maxdims ))<0) TEST_ERROR;
+
+    /* Modify dataset creation properties, i.e. enable chunking. */
+    if ((plist_id = H5Pcreate (H5P_DATASET_CREATE ))<0) TEST_ERROR;
+    if (H5Pset_chunk( plist_id, RANK, dims_chunk )<0) TEST_ERROR;
+    if (H5Pset_fill_time( plist_id, H5D_FILL_TIME_ALLOC)<0) TEST_ERROR;
+
+    /* Create a new dataset within the file using cparms creation properties. */
+    if ((dataset_id = H5Dcreate( file_id , "Dataset2", H5T_NATIVE_INT, space_id, plist_id ))<0) TEST_ERROR;
+
+    /* Write the data. */
+    if (H5Dwrite( dataset_id , H5T_NATIVE_INT, space_id, H5S_ALL, H5P_DEFAULT, data )<0) TEST_ERROR;
+
+    /* Close/release resources. */
+    H5Dclose( dataset_id );
+    H5Sclose( space_id );
+    H5Pclose( plist_id  );
+    H5Fclose( file_id );
+
+
+    /* Open the file */
+    if ((file_id = H5Fopen( "set_extent_read.h5", H5F_ACC_RDWR, H5P_DEFAULT ))<0) TEST_ERROR;
+
+    /* Open the dataset */
+    if ((dataset_id = H5Dopen( file_id , "Dataset2" ))<0) TEST_ERROR;
+
+    /* Set new dimensions for the array. */
+    if (H5Dset_extent( dataset_id, dims_new )<0) TEST_ERROR;
+
+    /* Get the space. */
+    if ((space_id = H5Dget_space( dataset_id ))<0) TEST_ERROR;
+
+    /* Get dimensions. */
+    if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) TEST_ERROR;
+
+    if ( dims_out[0] != dims_new[0] ) TEST_ERROR;
+
+    /* Read the new dataset. */
+    if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf1 )<0) TEST_ERROR;
+
+    /* Compare the read array with the original array */
+    for( i = 0; i < (int)dims_out[0]; i++ )
+        for( j = 0; j < (int)dims_out[1]; j++ )
+            if (  buf1[i][j] != data[i][j] ) TEST_ERROR;
+
+    /*-------------------------------------------------------------------------
+    * Set new dimensions for the array; expand it again
+    *-------------------------------------------------------------------------
+    */
+
+    /* Set new dimensions for the array. */
+    if (H5Dset_extent( dataset_id , dims )<0) TEST_ERROR;
+
+    /* Get the space. */
+    if ((space_id = H5Dget_space( dataset_id ))<0) TEST_ERROR;
+
+    /* Get dimensions. */
+    if (H5Sget_simple_extent_dims( space_id, dims_out, NULL )<0) TEST_ERROR;
+
+    if ( dims_out[0] != dims[0] ) TEST_ERROR;
+
+    /* Read the new dataset. */
+    if (H5Dread( dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf2 )<0) TEST_ERROR;
+
+    /* Compare the read array with the original array */
+    for( i = 0; i < (int)dims_out[0]; i++ ) {
+        for( j = 0; j < (int)dims_out[1]; j++ ) {
+            if ( i >= 70 || j >= 70 ) {
+                if (  buf2[i][j] != 0 ) TEST_ERROR;
+            }
+            else {
+                if (  buf2[i][j] != data[i][j] ) TEST_ERROR;
+            }
+        }
+    }
+
+
+    /*-------------------------------------------------------------------------
+    * Close/release resources
+    *-------------------------------------------------------------------------
+    */
+
+    H5Dclose( dataset_id );
+    H5Sclose( space_id );
+
+
+    H5Fclose( file_id );
+
+    PASSED();
+
+    puts("All set_extent tests passed.");
+    return 0;
+
+
+error:
+    H5Dclose( dataset_id );
+    H5Sclose( space_id );
+    H5Pclose( plist_id  );
+    H5Fclose( file_id );
+    H5_FAILED();
+    return 1;
+}
+

Added: packages/hdf5/branches/upstream/current/test/srb_append.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/srb_append.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/srb_append.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,196 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Raymond Lu <slu at ncsa.uiuc.edu>
+ *             April 14, 2000
+ *
+ * Purpose:    Test HDF-SRB if it is configured and compiled.  Append an
+ *             integer dataset to an existent HDF5 file with an integer array
+ *             on SRB server.
+ *
+ * Usage:      The HDF5 is built on the top of SRB.  So you just need to
+ *             activate a connection to SRB server by calling function
+ *             H5Pset_fapl_srb()(after creating file property list by calling
+ *             H5Pcreate()).  All server information is passed in through its
+ *             parameter SRB_Info(a structure).  Its fields are
+ *                 char *srbHost: SRB host address of server.  If the input is
+ *                     NULL, it will use the environment varible "srbHost" if
+ *                     it is defined.  If it is not defined, the
+ *                     ~/.srb/.MdasEnd file will be checked next.  If not, it
+ *                     will use the hostname of the client machine.
+ *                 char *srbPort: SRB host port number of server.  If the
+ *                     input value is NULL, it will use the env variable
+ *                     "srbPort" if it is defined.  If not, it defaults to
+ *                     5558.
+ *                 char *srbAuth: SRB Authentication-password.  It is used to
+ *                     define password for MDAS or SEA authentication.
+ *                     For SEA authentication, this is the password used by
+ *                     the SEA library to decrypt the encrypted private key
+ *                     stored in the file ~/.SEAuuuuu at ddddd(where uuuuu is
+ *                     the user ID and ddddd is the user domain name).  This
+ *                     input is not needed if an unencrypted private key is
+ *                     available in the /tmp directory(generated using the
+ *                     'seaauth auto' command).  To provide additional
+ *                     flexibility, a client may also use the environment
+ *                     variable "srbAuth" to specify the password.  A client
+ *                     may also supply the password in the ~/.srb/.MdasAuth
+ *                     file.  If a client uses more than one method to specfy
+ *                     the password, the value given in this function call
+ *                     will take precedent, then the environment variable
+ *                     "srbAuth", and lastly, the ~/.srb/.MdasAuth file.
+ *                 int  storSysType: Storage system type on SRB server.
+ *                     0=Unix, 1=UniTree, 2=HPSS, 3=FTP, 4=HTTP
+ *                 int  mode: File access mode, same definition with Unix.
+ *                 int  size: File Size, only valid for HPSS, -1 is default
+ *
+ *             Then you can open an HDF5 file by calling H5Fopen().  When
+ *             you pass in the file name, it has to be file name with an
+ *             absolute path.  It you use SDSC server(ghidorah.sdsc.edu), your
+ *             home directory is possibly in /projects/mdas/srb/SRBVault/.
+ */
+#include "h5test.h"
+
+#ifndef H5_HAVE_SRB
+int main(void)
+{
+    printf("Test skipped because SRB driver not available\n");
+    return 0;
+}
+#else
+
+#define fileName "/projects/mdas/srb/SRBVault/slu.ncsa/a.h5"
+#define DATASETNAME "Int1Array"
+#define NX     5                      /* dataset dimensions */
+#define NY     6
+#define RANK   2
+
+int main(void)
+{
+  SRB_Info srb_info={   NULL,    /* Use the server name in ~/.srb/MdasEnv    */
+                        NULL,    /* Use the server port number in
+                                  * ~/.srb/MdasEnv                           */
+                        NULL,    /* Use the password in ~/.srb/MdasAuth      */
+                        0,       /* Using Unix storage system.               */
+                        0600,    /* Open file for read and write for owner   */
+                        -1       /* default                                  */
+                    };
+    hid_t         fapl =-1, file;
+    hid_t         dataspace, datatype, dataset;
+    hsize_t       dimsf[2];
+
+    herr_t        status = 0;
+    int           data[NX][NY];          /* data to write */
+    int           i, j;
+
+    /*
+     * Data  and output buffer initialization.
+     */
+    for (j = 0; j < NX; j++) {
+        for (i = 0; i < NY; i++)
+            data[j][i] = i*i + j*j;
+    }
+    /*
+     *  0   1  4  9 16 25
+     *  1   2  5 10 17 26
+     *  4   5  8 13 20 29
+     *  9  10 13 18 25 34
+     * 16  17 20 25 32 41
+     */
+
+    /* Create access property list and set the driver to GASS */
+    fapl = H5Pcreate (H5P_FILE_ACCESS);
+         if (fapl < 0) {
+             printf (" H5Pcreate failed. \n");
+             return -1;
+    }
+    status = H5Pset_fapl_srb (fapl, srb_info);
+    if (status < 0) {
+         printf ("H5Pset_fapl_gass failed. \n");
+         return -1;
+    }
+
+    /*
+     * Open an existing file using H5F_ACC_RDWR access,
+     * and srb file access properties.
+     */
+    file = H5Fopen(fileName, H5F_ACC_RDWR, fapl);
+    if (file < 0) {
+        printf ("H5Fopen failed. \n");
+        return -1;
+    }
+
+    /*
+     * Describe the size of the array and create the data space for fixed
+     * size dataset.
+     */
+    dimsf[0] = NX;
+    dimsf[1] = NY;
+    dataspace = H5Screate_simple(RANK, dimsf, NULL);
+    if (dataspace < 0) {
+      printf ("H5Screate failed. \n");
+      return -1;
+    }
+
+    /*
+     * Define datatype for the data in the file.
+     * We will store little endian INT numbers.
+     */
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    if (datatype < 0) {
+      printf ("H5Tcopy failed. \n");
+      return -1;
+    }
+
+    status = H5Tset_order(datatype, H5T_ORDER_LE);
+    if (status < 0) {
+      printf ("H5Tset_order failed. \n");
+      return -1;
+    }
+
+    /*
+     * Create a new dataset within the file using defined dataspace and
+     * datatype and default dataset creation properties.
+     */
+    dataset = H5Dcreate(file, DATASETNAME, datatype, dataspace,
+			H5P_DEFAULT);
+    if (dataset < 0) {
+      printf ("H5Dcreate failed. \n");
+      return -1;
+    }
+
+    /*
+     * Write the data to the dataset using default transfer properties.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+		      H5P_DEFAULT, data);
+    if (status < 0) {
+      printf ("H5Dwrite failed. \n");
+      return -1;
+    }
+
+    /*
+     * Close/release resources.
+     */
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Fclose(file);
+    H5Pclose(fapl);
+
+    printf("Test finished!\n");
+    return 0;
+}
+
+#endif

Added: packages/hdf5/branches/upstream/current/test/srb_read.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/srb_read.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/srb_read.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,225 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Raymond Lu <slu at ncsa.uiuc.edu>
+ *             April 14, 2000
+ *
+ * Purpose:    Test HDF-SRB if it is configured and compiled.  Read a chunk of
+ *             dataset of an HDF5 file with an integer array on SRB server,
+ *             using hyperslab.
+ * Usage:      The HDF5 is built on the top of SRB.  So you just need to
+ *             activate a connection to SRB server by calling function
+ *             H5Pset_fapl_srb()(after creating file property list by calling
+ *             H5Pcreate()).  All server information is passed in through its
+ *             parameter SRB_Info(a structure).  Its fields are
+ *                 char *srbHost: SRB host address of server.  If the input is
+ *                     NULL, it will use the environment varible "srbHost" if
+ *                     it is defined.  If it is not defined, the
+ *                     ~/.srb/.MdasEnd file will be checked next.  If not, it
+ *                     will use the hostname of the client machine.
+ *                 char *srbPort: SRB host port number of server.  If the
+ *                     input value is NULL, it will use the env variable
+ *                     "srbPort" if it is defined.  If not, it defaults to
+ *                     5558.
+ *                 char *srbAuth: SRB Authentication-password.  It is used to
+ *                     define password for MDAS or SEA authentication.
+ *                     For SEA authentication, this is the password used by
+ *                     the SEA library to decrypt the encrypted private key
+ *                     stored in the file ~/.SEAuuuuu at ddddd(where uuuuu is
+ *                     the user ID and ddddd is the user domain name).  This
+ *                     input is not needed if an unencrypted private key is
+ *                     available in the /tmp directory(generated using the
+ *                     'seaauth auto' command).  To provide additional
+ *                     flexibility, a client may also use the environment
+ *                     variable "srbAuth" to specify the password.  A client
+ *                     may also supply the password in the ~/.srb/.MdasAuth
+ *                     file.  If a client uses more than one method to specfy
+ *                     the password, the value given in this function call
+ *                     will take precedent, then the environment variable
+ *                     "srbAuth", and lastly, the ~/.srb/.MdasAuth file.
+ *                 int  storSysType: Storage system type on SRB server.
+ *                     0=Unix, 1=UniTree, 2=HPSS, 3=FTP, 4=HTTP
+ *                 int  mode: File access mode, same definition with Unix.
+ *                 int  size: File Size, only valid for HPSS, -1 is default
+ *
+ *             Then you can open an HDF5 file by calling H5Fopen().  When
+ *             you pass in the file name, it has to be file name with an
+ *             absolute path.  It you use SDSC server(ghidorah.sdsc.edu), your
+ *             home directory is possibly in /projects/mdas/srb/SRBVault/.
+ */
+#include "h5test.h"
+
+#ifndef H5_HAVE_SRB
+int main(void)
+{
+    printf("Test skipped because SRB driver not available\n");
+    return 0;
+}
+#else
+
+#define fileName "/projects/mdas/srb/SRBVault/slu.ncsa/a.h5"
+#define DATASETNAME "IntArray"
+#define NX_SUB  3           /* hyperslab dimensions */
+#define NY_SUB  4
+#define NX 7           /* output buffer dimensions */
+#define NY 7
+#define NZ  3
+#define RANK         2
+#define RANK_OUT     3
+
+int main(void)
+{
+    hid_t       fapl=-1, fid = -1, dataset;
+    hid_t       datatype, dataspace;
+    hid_t       memspace;
+    H5T_class_t class;                 /* data type class */
+    H5T_order_t order;                 /* data order */
+    size_t      size;                  /*
+				        * size of the data element
+				        * stored in file
+				        */
+    hsize_t     dimsm[3];              /* memory space dimensions */
+    hsize_t     dims_out[2];           /* dataset dimensions */
+    herr_t      status;
+
+    int         data_out[NX][NY][NZ ]; /* output buffer */
+
+    hsize_t      count[2];              /* size of the hyperslab in the file */
+    hssize_t     offset[2];             /* hyperslab offset in the file */
+    hsize_t      count_out[3];          /* size of the hyperslab in memory */
+    hssize_t     offset_out[3];         /* hyperslab offset in memory */
+    int          i, j, k, status_n, rank;
+    SRB_Info srb_info={ NULL,  /* Use host name in ~/.srb/.MdasEnv           */
+                        NULL,  /* Use environment variable "srbPort"         */
+                        NULL,  /* Use password in  ~/.srb/.MdasEnv           */
+                        0,     /* Use Unix storage system.                   */
+                        0600,  /* File was created for read and write for
+                                * owner                                      */
+                        -1     /* default                                    */
+                      };
+
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++) {
+	    for (k = 0; k < NZ ; k++)
+		data_out[j][i][k] = 0;
+	}
+    }
+
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+    if (fapl < 0) {
+        printf (" H5Pcreate failed. \n");
+        return -1;
+    }
+
+    status = H5Pset_fapl_srb(fapl, srb_info);
+    if (status < 0) {
+      printf ("H5Pset_fapl_srb failed. \n");
+      return -1;
+    }
+
+    fid = H5Fopen(fileName, H5F_ACC_RDONLY, fapl);
+    if (fid < 0) {
+        printf ("H5Fopen failed. \n");
+        return -1;
+    }
+    dataset = H5Dopen(fid, DATASETNAME);
+    if(dataset<0) {
+        printf ("H5Dopen failed. \n");
+        return -1;
+    }
+    /*
+     * Get datatype and dataspace handles and then query
+     * dataset class, order, size, rank and dimensions.
+     */
+    datatype  = H5Dget_type(dataset);     /* datatype handle */
+    class     = H5Tget_class(datatype);
+    if (class == H5T_INTEGER) printf("Data set has INTEGER type \n");
+    order     = H5Tget_order(datatype);
+    if (order == H5T_ORDER_LE) printf("Little endian order \n");
+
+    size  = H5Tget_size(datatype);
+    printf(" Data size is %d \n", size);
+
+    dataspace = H5Dget_space(dataset);    /* dataspace handle */
+    rank      = H5Sget_simple_extent_ndims(dataspace);
+    status_n  = H5Sget_simple_extent_dims(dataspace, dims_out, NULL);
+    printf("rank %d, dimensions %lu x %lu \n", rank,
+	   (unsigned long)(dims_out[0]), (unsigned long)(dims_out[1]));
+
+    /*
+     * Define hyperslab in the dataset.
+     */
+    offset[0] = 1;
+    offset[1] = 2;
+    count[0]  = NX_SUB;
+    count[1]  = NY_SUB;
+    status = H5Sselect_hyperslab(dataspace, H5S_SELECT_SET, offset, NULL,
+				 count, NULL);
+
+    /*
+     * Define the memory dataspace.
+     */
+    dimsm[0] = NX;
+    dimsm[1] = NY;
+    dimsm[2] = NZ ;
+    memspace = H5Screate_simple(RANK_OUT,dimsm,NULL);
+
+    /*
+     * Define memory hyperslab.
+     */
+    offset_out[0] = 3;
+    offset_out[1] = 0;
+    offset_out[2] = 0;
+    count_out[0]  = NX_SUB;
+    count_out[1]  = NY_SUB;
+    count_out[2]  = 1;
+    status = H5Sselect_hyperslab(memspace, H5S_SELECT_SET, offset_out, NULL,
+				 count_out, NULL);
+
+    /*
+     * Read data from hyperslab in the file into the hyperslab in
+     * memory and display.
+     */
+    status = H5Dread(dataset, H5T_NATIVE_INT, memspace, dataspace,
+		     H5P_DEFAULT, data_out);
+    for (j = 0; j < NX; j++) {
+	for (i = 0; i < NY; i++) printf("%d ", data_out[j][i][0]);
+	printf("\n");
+    }
+    /*
+     * 0 0 0 0 0 0 0
+     * 0 0 0 0 0 0 0
+     * 0 0 0 0 0 0 0
+     * 3 4 5 6 0 0 0
+     * 4 5 6 7 0 0 0
+     * 5 6 7 8 0 0 0
+     * 0 0 0 0 0 0 0
+     */
+
+    /*
+     * Close/release resources.
+     */
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Sclose(dataspace);
+    H5Sclose(memspace);
+    H5Fclose(fid);
+    H5Pclose(fapl);
+
+    printf("Test finished!\n");
+    return 0;
+}
+
+#endif

Added: packages/hdf5/branches/upstream/current/test/srb_write.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/srb_write.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/srb_write.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,193 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer: Raymond Lu <slu at ncsa.uiuc.edu>
+ *             April 14, 2000
+ *
+ * Purpose:    Test HDF-SRB if it is configured and compiled.  Write an HDF5
+ *             file with an integer array to SRB server.
+ *
+ * Usage:      The HDF5 is built on the top of SRB.  So you just need to
+ *             activate a connection to SRB server by calling function
+ *             H5Pset_fapl_srb()(after creating file property list by calling
+ *             H5Pcreate()).  All server information is passed in through its
+ *             parameter SRB_Info(a structure).  Its fields are
+ *                 char *srbHost: SRB host address of server.  If the input is
+ *                     NULL, it will use the environment varible "srbHost" if
+ *                     it is defined.  If it is not defined, the
+ *                     ~/.srb/.MdasEnd file will be checked next.  If not, it
+ *                     will use the hostname of the client machine.
+ *                 char *srbPort: SRB host port number of server.  If the
+ *                     input value is NULL, it will use the env variable
+ *                     "srbPort" if it is defined.  If not, it defaults to
+ *                     5558.
+ *                 char *srbAuth: SRB Authentication-password.  It is used to
+ *                     define password for MDAS or SEA authentication.
+ *                     For SEA authentication, this is the password used by
+ *                     the SEA library to decrypt the encrypted private key
+ *                     stored in the file ~/.SEAuuuuu at ddddd(where uuuuu is
+ *                     the user ID and ddddd is the user domain name).  This
+ *                     input is not needed if an unencrypted private key is
+ *                     available in the /tmp directory(generated using the
+ *                     'seaauth auto' command).  To provide additional
+ *                     flexibility, a client may also use the environment
+ *                     variable "srbAuth" to specify the password.  A client
+ *                     may also supply the password in the ~/.srb/.MdasAuth
+ *                     file.  If a client uses more than one method to specfy
+ *                     the password, the value given in this function call
+ *                     will take precedent, then the environment variable
+ *                     "srbAuth", and lastly, the ~/.srb/.MdasAuth file.
+ *                 int  storSysType: Storage system type on SRB server.
+ *                     0=Unix, 1=UniTree, 2=HPSS, 3=FTP, 4=HTTP
+ *                 int  mode: File access mode, same definition with Unix.
+ *                 int  size: File Size, only valid for HPSS, -1 is default
+ *
+ *             Then you can create an HDF5 file by calling H5Fcreate().  When
+ *             you pass in the file name, it has to be file name with an
+ *             absolute path.  It you use SDSC server(ghidorah.sdsc.edu), your
+ *             home directory is possibly in /projects/mdas/srb/SRBVault/.
+ */
+
+#include "h5test.h"
+
+#ifndef H5_HAVE_SRB
+int main(void)
+{
+    printf("Test skipped because SRB driver not available\n");
+    return 0;
+}
+#else
+
+#define fileName "/projects/mdas/srb/SRBVault/slu.ncsa/a.h5"
+#define DATASETNAME "IntArray"
+#define NX     5                      /* dataset dimensions */
+#define NY     6
+#define RANK   2
+
+
+int main(void)
+{
+    hid_t fapl=-1, fid = -1;
+    hid_t         dataspace, datatype, dataset;
+    hsize_t       dimsf[2];
+    herr_t        status = 0;
+    int           data[NX][NY];          /* data to write */
+    int           i, j;
+    SRB_Info srb_info={ "ghidorah.sdsc.edu",  /* Using SDSC SRB server,
+                                               * don't append port number.   */
+                        NULL,                 /* SRB host default port number*/
+                        NULL,                 /* SRB Authentication-password,
+                                               * using the one in
+                                               * ~/.srb/.MdasAuth            */
+                        0,                    /* Unix storage system.        */
+                        0600,                 /* Read and write only for
+                                               * owner                       */
+                        -1                    /* -1 is default.              */
+                      };
+
+    /*
+     * Data  and output buffer initialization.
+     */
+    for (j = 0; j < NX; j++) {
+        for (i = 0; i < NY; i++)
+            data[j][i] = i + j;
+    }
+    /*
+     * 0 1 2 3 4 5
+     * 1 2 3 4 5 6
+     * 2 3 4 5 6 7
+     * 3 4 5 6 7 8
+     * 4 5 6 7 8 9
+    */
+
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+    if (fapl < 0) {
+        printf (" H5Pcreate failed. \n");
+        return -1;
+    }
+
+    status = H5Pset_fapl_srb(fapl, srb_info);
+    if (status < 0) {
+        printf ("H5Pset_fapl_srb failed. \n");
+        return -1;
+    }
+
+    fid = H5Fcreate(fileName, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+    /*fid = H5Fcreate(fileName, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);*/
+    if (fid < 0) {
+        printf ("H5Fcreate failed. \n");
+        return -1;
+    }
+
+    /*
+     * Describe the size of the array and create the data space for fixed
+     * size dataset.
+     */
+    dimsf[0] = NX;
+    dimsf[1] = NY;
+    dataspace = H5Screate_simple(RANK, dimsf, NULL);
+    if (dataspace < 0) {
+      printf ("H5Screate failed. \n");
+      return -1;
+    }
+
+    /*
+     * Define datatype for the data in the file.
+     * We will store little endian INT numbers.
+     */
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    if (datatype < 0) {
+      printf ("H5Tcopy failed. \n");
+      return -1;
+    }
+
+    status = H5Tset_order(datatype, H5T_ORDER_LE);
+    if (status < 0) {
+      printf ("H5Tset_order failed. \n");
+      return -1;
+    }
+    /*
+     * Create a new dataset within the file using defined dataspace and
+     * datatype and default dataset creation properties.
+     */
+    dataset = H5Dcreate(fid, DATASETNAME, datatype, dataspace,
+			H5P_DEFAULT);
+    if (dataset < 0) {
+      printf ("H5Dcreate failed. \n");
+      return -1;
+    }
+
+
+    /*
+     * Write the data to the dataset using default transfer properties.
+     */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+		      H5P_DEFAULT, data);
+    if (status < 0) {
+      printf ("H5Dwrite failed. \n");
+      return -1;
+    }
+
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Fclose(fid);
+    H5Pclose(fapl);
+
+    printf("Test finished!\n");
+    return 0;
+}
+
+#endif

Added: packages/hdf5/branches/upstream/current/test/stab.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/stab.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/stab.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,273 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Tuesday, November 24, 1998
+ */
+#include "h5test.h"
+
+/*
+ * This file needs to access private datatypes from the H5G package.
+ */
+#define H5G_PACKAGE
+#include "H5Gpkg.h"
+
+const char *FILENAME[] = {
+    "stab1",
+    "stab2",
+    NULL
+};
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_misc
+ *
+ * Purpose:	Test miscellaneous group stuff.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, November 24, 1998
+ *
+ * Modifications:
+ *              Robb Matzke, 2002-03-28
+ *              File is opened by parent instead of here.
+ *-------------------------------------------------------------------------
+ */
+static int
+test_misc(hid_t file)
+{
+    hid_t	g1=-1, g2=-1, g3=-1;
+    char	comment[64];
+
+    /* Test current working groups */
+    TESTING("miscellaneous group tests");
+
+    /* Create initial groups for testing, then close */
+    if ((g1=H5Gcreate(file, "test_1a", 0))<0) goto error;
+    if ((g2=H5Gcreate(g1, "sub_1", 0))<0) goto error;
+    if ((g3=H5Gcreate(file, "test_1b", 0))<0) goto error;
+    if (H5Gset_comment(g3, ".", "hello world")<0) goto error;
+    if (H5Gclose(g1)<0) goto error;
+    if (H5Gclose(g2)<0) goto error;
+    if (H5Gclose(g3)<0) goto error;
+
+    /* Open all groups with absolute names to check for exsistence */
+    if ((g1=H5Gopen(file, "/test_1a"))<0) goto error;
+    if ((g2=H5Gopen(file, "/test_1a/sub_1"))<0) goto error;
+    if ((g3=H5Gopen(file, "/test_1b"))<0) goto error;
+    if (H5Gget_comment(g3, "././.", sizeof comment, comment)<0) goto error;
+    if (strcmp(comment, "hello world")) {
+	H5_FAILED();
+	puts("    Read the wrong comment string from the group.");
+	printf("    got: \"%s\"\n    ans: \"hello world\"\n", comment);
+	goto error;
+    }
+    if (H5Gclose(g1)<0) goto error;
+    if (H5Gclose(g2)<0) goto error;
+    if (H5Gclose(g3)<0) goto error;
+
+    /* Check that creating groups with no-op names isn't allowed */
+    H5E_BEGIN_TRY {
+        g1=H5Gcreate(file, "/", 0);
+    } H5E_END_TRY
+    if(g1 >= 0) goto error;
+
+    H5E_BEGIN_TRY {
+        g1=H5Gcreate(file, "./././", 0);
+    } H5E_END_TRY
+    if(g1 >= 0) goto error;
+
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Gclose(g1);
+	H5Gclose(g2);
+	H5Gclose(g3);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Purpose:     Creates a group with a very long name
+ *
+ * Return:      Success:	0
+ *
+ * 		Failure:	number of errors
+ *
+ * Programmer:  Robb Matzke <matzke at llnl.gov> 2002-03-28
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static int
+test_long(hid_t file)
+{
+    hid_t       g1=-1, g2=-1;
+    char        *name1=NULL, *name2=NULL;
+    size_t      namesize=40960, i;
+
+    TESTING("long names");
+
+    /* Group names */
+    name1 = malloc(namesize);
+    for (i=0; i<namesize; i++)
+        name1[i] = (char)('A' + i%26);
+    name1[namesize-1] = '\0';
+    name2 = malloc(2*namesize + 2);
+    sprintf(name2, "%s/%s", name1, name1);
+
+    /* Create groups */
+    if ((g1=H5Gcreate(file, name1, 0))<0) goto error;
+    if ((g2=H5Gcreate(g1, name1, 0))<0) goto error;
+    H5Gclose(g1);
+    H5Gclose(g2);
+
+    /* Open groups */
+    if ((g1=H5Gopen(file, name1))<0) goto error;
+    if ((g2=H5Gopen(file, name2))<0) goto error;
+    H5Gclose(g1);
+    H5Gclose(g2);
+
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+        H5Gclose(g1);
+        H5Gclose(g2);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_large
+ *
+ * Purpose:     Creates a really large directory.
+ *
+ * Return:      Success:	0
+ *
+ * 		Failure:	number of errors
+ *
+ * Programmer:  Robb Matzke
+ *              robb at maya.nuance.com
+ *              Aug 29 1997
+ *
+ * Modifications:
+ *              Robb Matzke, 2002-03-28
+ *              File is opened by parent instead of here.
+ *-------------------------------------------------------------------------
+ */
+static int
+test_large(hid_t file)
+{
+    hid_t               cwg=-1, dir=-1;
+    int                 i;
+    char                name[1024];
+    int                 nsyms = 5000;
+
+    TESTING("large directories");
+
+    /*
+     * Create a directory that has so many entries that the root
+     * of the B-tree ends up splitting.
+     */
+    if ((cwg=H5Gcreate(file, "/big", (size_t)nsyms*16+2))<0) goto error;
+    for (i=0; i<nsyms; i++) {
+        sprintf(name, "%05d%05d", rand()%100000, i);
+#if 0
+	fprintf(stderr, "%s\n", name);
+#endif
+	if ((dir=H5Gcreate(cwg, name, 0))<0) goto error;
+        if (H5Gclose(dir)<0) goto error;
+    }
+    if (H5Gclose(cwg)<0) goto error;
+
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Gclose(dir);
+	H5Gclose(cwg);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Test groups
+ *
+ * Return:	Success:	zero
+ *
+ *		Failure:	non-zero
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, November 24, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    hid_t	fapl, fcpl, file;
+    int		nerrors=0;
+    char        filename[1024];
+
+    /* Reset library */
+    h5_reset();
+    fapl = h5_fileaccess();
+
+    /*
+     * Use larger symbol table data structures to be more efficient, use
+     * defaults to bang harder on the library for testing.
+     */
+    fcpl = H5Pcreate(H5P_FILE_CREATE);
+#if 0
+    H5Pset_sym_k(fcpl, 16, 16);
+#endif
+
+    /* Open the file */
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl))<0)
+	goto error;
+
+    /* Perform tests */
+    nerrors += test_misc(file);
+    nerrors += test_long(file);
+    nerrors += test_large(file);
+    if (nerrors) goto error;
+
+    /* Cleanup */
+    H5Fclose(file);
+    puts("All symbol table tests passed.");
+    h5_cleanup(FILENAME, fapl);
+    return 0;
+
+ error:
+    puts("*** TESTS FAILED ***");
+    return 1;
+}
+

Added: packages/hdf5/branches/upstream/current/test/stream_test.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/stream_test.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/stream_test.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,493 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Copyright © 2000 The author.
+ * The author prefers this code not be used for military purposes.
+ *
+ *
+ * Author:  Thomas Radke <tradke at aei-potsdam.mpg.de>
+ *          Tuesday, September 12, 2000
+ *
+ * Modifications:
+ *          Thomas Radke, Thursday, October 26, 2000
+ *          Made it compiling under Windows.
+ *
+ */
+
+/*
+ *  This program tests the functionality of the Stream Virtual File Driver.
+ *    1. It spawns two new processes, a sender and a receiver.
+ *    2. The sender opens an HDF5 file for writing using the Stream driver.
+ *       It will use a reserved port which should fail to be bound.
+ *       Then it will try a couple of successive ports until bind succeeds.
+ *       This final "hostname:port" information is written into a temporary
+ *       file as a single line of text.
+ *       The sender then writes a sample dataset to the HDF5 file.
+ *       On closing the file the Stream VFD would send the file
+ *       contents to any connected client.
+ *    3. The receiver serves as a client attempting to open an
+ *       HDF5 file for reading. On opening the file the Stream VFD
+ *       would establish a socket connection to the sender process,
+ *       identified by its hostname and a port number (which is obtained
+ *       from the temporary text file the sender should have created),
+ *       and read the file contents via this socket.
+ *       Aftwerwards the dataset is read from the file into memory
+ *       and verified.
+ *    4. The main program waits for termination of its two child
+ *       processes and returns their exit code.
+ */
+
+#include <stdio.h>
+#include "hdf5.h"
+
+#ifndef H5_HAVE_STREAM
+
+int main (void)
+{
+  printf ("Test skipped because Stream Virtual File Driver not available\n");
+  return (0);
+}
+
+#elif ! defined (H5_HAVE_FORK) || ! defined (H5_HAVE_WAITPID)
+
+int main (void)
+{
+  printf ("Test skipped because this architecture doesn't provide "
+          "fork(2) and waitpid(2)\n");
+  return (0);
+}
+
+#else
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+
+#define SLEEPTIME     10                  /* sleeping time in seconds    */
+#define RANK          2                   /* sample dataset rank         */
+#define DIMS          50                  /* sample dataset dimensions   */
+#define DATASETNAME   "IntArray"          /* sample dataset name         */
+#define HOSTNAME      "localhost"         /* hostname of this machine    */
+#define PORT          "5678"              /* default port to use         */
+#define MAXHUNT       500                 /* max number of ports to hunt */
+#define HDF5_FILENAME HOSTNAME ":" PORT   /* name of the streamed file   */
+#define TEMPFILENAME  "stream_test.tmp"   /* temporary filename          */
+
+
+static int sender (void)
+{
+  int     i;
+  hsize_t dims[RANK];
+  int     *data;
+  herr_t  status;
+  hid_t   fapl, file;
+  hid_t   dataspace, dataset;
+  H5FD_stream_fapl_t stream_fapl;
+  FILE    *tempfile;
+
+
+  /*
+   * Create access property list and set it to use the Stream driver.
+   */
+  fapl = H5Pcreate (H5P_FILE_ACCESS);
+  if (fapl < 0)
+  {
+    fprintf (stderr, "sender: couldn't create file access property list\n");
+    return (-1);
+  }
+
+  /*
+   * Setup file access property list and select Stream VFD.
+   *
+   *   - block increment for realloc() should be chosen by the driver
+   *   - no external socket is provided (should be created internally)
+   *   - do I/O on this processor on this socket
+   *   - only one client is allowed to connect at a time
+   *   - no READ broadcast function is provided (since we only send data)
+   *   - if bind to default port (given in the filename argument) fails
+   *     do port hunting on the following MAXHUNT ports
+   */
+  stream_fapl.increment = 0;
+  stream_fapl.socket = H5FD_STREAM_INVALID_SOCKET;
+  stream_fapl.do_socket_io = 1;
+  stream_fapl.backlog = 1;
+  stream_fapl.broadcast_fn  = NULL;
+  stream_fapl.broadcast_arg = NULL;
+  stream_fapl.maxhunt = MAXHUNT;
+
+  status = H5Pset_fapl_stream (fapl, &stream_fapl);
+  if (status < 0)
+  {
+    fprintf (stderr, "sender: couldn't set file access property list "
+                     "for Stream VFD\n");
+    H5Pclose (fapl);
+    return (-2);
+  }
+
+  /*
+   * Create the data space for fixed size dataset.
+   */
+  for (i = 0; i < RANK; i++)
+  {
+    dims[i] = DIMS;
+  }
+  dataspace = H5Screate_simple (RANK, dims, NULL);
+  if (dataspace < 0)
+  {
+    fprintf (stderr, "sender: couldn't create dataspace\n");
+    H5Pclose (fapl);
+    return (-3);
+  }
+
+  /*
+   * Data buffer initialization.
+   */
+  i = (int) H5Sget_simple_extent_npoints (dataspace);
+  data = (int *) malloc (i * sizeof (int));
+  if (data == NULL)
+  {
+    fprintf (stderr, "sender: cannot allocate buffer for dataset with "
+                     "%d integers\n", i);
+    H5Sclose (dataspace);
+    H5Pclose (fapl);
+    return (-4);
+  }
+  while (--i >= 0)
+  {
+    data[i] = i;
+  }
+
+  /*
+   * Create a new file using H5F_ACC_TRUNC access,
+   * default file creation properties, and STREAM file
+   * access properties.
+   */
+  printf ("  sender: opening file on host '%s' port %s for writing...\n",
+          HOSTNAME, PORT);
+  file = H5Fcreate (HDF5_FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+  if (file < 0)
+  {
+    fprintf (stderr, "sender: couldn't create file on '%s' using port %s and "
+            "following %d\n", HOSTNAME, PORT, MAXHUNT);
+    free (data);
+    H5Sclose (dataspace);
+    H5Pclose (fapl);
+    return (-5);
+  }
+
+  /*
+   * Get the file access property list to find out what port is actually used.
+   */
+  status = H5Pget_fapl_stream (fapl, &stream_fapl);
+  if (status < 0)
+  {
+    fprintf (stderr, "sender: couldn't get file access property list "
+                     "for Stream VFD\n");
+    free (data);
+    H5Sclose (dataspace);
+    H5Pclose (fapl);
+    return (-6);
+  }
+  printf ("  sender: using port %d...\n", (int) stream_fapl.port);
+
+  /*
+   * Write the "hostname:port" information to a temporary file
+   * which can be read by the receiver process.
+   */
+  tempfile = fopen (TEMPFILENAME, "w");
+  if (tempfile == NULL)
+  {
+    fprintf (stderr, "sender: couldn't open temporary file to write "
+                     "\"hostname:port\" information\n");
+    free (data);
+    H5Sclose (dataspace);
+    H5Pclose (fapl);
+    return (-7);
+  }
+  fprintf (tempfile, "%s:%d", HOSTNAME, (int) stream_fapl.port);
+  fclose (tempfile);
+
+  /*
+   * Create a new dataset within the file using defined dataspace and
+   * default dataset creation properties.
+   */
+  dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, dataspace,
+                       H5P_DEFAULT);
+  if (dataset < 0)
+  {
+    fprintf (stderr, "sender: couldn't create dataset '%s'\n", DATASETNAME);
+    free (data);
+    H5Fclose (file);
+    H5Sclose (dataspace);
+    H5Pclose (fapl);
+    return (-8);
+  }
+
+  /*
+   * Write the data to the dataset using default transfer properties.
+   */
+  printf ("  sender: writing dataset '%s' of type INTEGER to file '%s:%d'...\n",
+          DATASETNAME, HOSTNAME, (int) stream_fapl.port);
+  status = H5Dwrite (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+                     data);
+  if (status < 0)
+  {
+    free (data);
+    H5Fclose (file);
+    H5Dclose (dataset);
+    H5Sclose (dataspace);
+    H5Pclose (fapl);
+    fprintf (stderr, "sender: couldn't write dataset\n");
+    return (-9);
+  }
+
+  /*
+   * Now give the receiver some time to connect before closing the file
+   * and releasing resources.
+   */
+  printf ("  sender: sleeping for %d seconds...\n", SLEEPTIME);
+  sleep (SLEEPTIME);
+  printf ("  sender: closing file '%s:%d'\n", HOSTNAME, (int) stream_fapl.port);
+  H5Sclose (dataspace);
+  H5Dclose (dataset);
+  H5Fclose (file);
+  H5Pclose (fapl);
+  free (data);
+
+  return (0);
+}
+
+
+static int receiver (void)
+{
+  int i;                      /* looper */
+  hid_t fapl;                 /* file access property list */
+  hid_t file;                 /* file handle */
+  hid_t dataset;              /* dataset handle */
+  hid_t datatype;             /* datatype handle */
+  hid_t dataspace;            /* dataspace handle */
+  hsize_t nelems;             /* total number of elements in the dataset */
+  hsize_t *dims;              /* dataset dimensions */
+  int rank;                   /* dataset rank */
+  int *data;                  /* read buffer */
+  int nerrors;                /* total number of errors during verify */
+  int status;                 /* return code of HDF5 routines */
+  char filename[50];          /* filename of the streamed HDF5 file */
+  FILE    *tempfile;          /* descriptor for temporary file */
+
+
+  /*
+   * Create access property list and set it to use the Stream driver.
+   */
+  fapl = H5Pcreate (H5P_FILE_ACCESS);
+  if (fapl < 0)
+  {
+    fprintf (stderr, "receiver: couldn't create file access property list\n");
+    return (-1);
+  }
+
+  status = H5Pset_fapl_stream (fapl, NULL);
+  if (status < 0)
+  {
+    fprintf (stderr, "receiver: couldn't set file access property list "
+                     "for Stream VFD\n");
+    H5Pclose (fapl);
+    return (-2);
+  }
+
+  /*
+   * Now give the sender some time to open the file and accepting connections.
+   */
+  printf ("  receiver: sleeping for %d seconds...\n", SLEEPTIME / 2);
+  sleep (SLEEPTIME / 2);
+
+  /*
+   * Read the "hostname:port" information from the temporary file
+   * the sender should have created.
+   */
+  tempfile = fopen (TEMPFILENAME, "r");
+  if (tempfile == NULL)
+  {
+    fprintf (stderr, "receiver: couldn't open temporary file to read "
+                     "\"hostname:port\" information\n");
+    H5Pclose (fapl);
+    return (-3);
+  }
+  fgets (filename, sizeof (filename) - 1, tempfile);
+  fclose (tempfile);
+  unlink (TEMPFILENAME);
+
+  /*
+   * Open the streamed HDF5 file for reading.
+   */
+  printf ("  receiver: opening file '%s' for reading...\n", filename);
+  file = H5Fopen (filename, H5F_ACC_RDONLY, fapl);
+  H5Pclose (fapl);
+  if (file < 0)
+  {
+    fprintf (stderr, "receiver: couldn't open file from '%s'\n", filename);
+    return (-4);
+  }
+
+  /*
+   * Open the file and the dataset.
+   */
+  printf ("  receiver: reading dataset '%s'...\n", DATASETNAME);
+  dataset = H5Dopen (file, DATASETNAME);
+  if (dataset < 0)
+  {
+    fprintf (stderr, "receiver: couldn't open dataset '%s'\n", DATASETNAME);
+    return (-5);
+  }
+
+  /*
+   * Get dataset class, order, and size information
+   */
+  datatype = H5Dget_type (dataset);
+  if (H5Tget_class (datatype) == H5T_INTEGER)
+  {
+    printf ("  receiver: dataset is of type INTEGER\n");
+  }
+  printf ("  receiver: datatype size is %d bytes\n",
+          (int) H5Tget_size (datatype));
+  printf ("  receiver: byte ordering is %s endian\n",
+          H5Tget_order (datatype) == H5T_ORDER_LE ? "little" : "big");
+  H5Tclose(datatype);
+
+  /*
+   * Get dataset dimensions
+   */
+  dataspace = H5Dget_space (dataset);
+  rank      = H5Sget_simple_extent_ndims (dataspace);
+  dims      = (hsize_t *) malloc (rank * sizeof (hsize_t));
+  H5Sget_simple_extent_dims (dataspace, dims, NULL);
+  H5Sclose (dataspace);
+
+  printf ("  receiver: rank %d, dimensions %u", rank, (unsigned int) dims[0]);
+  nelems = dims[0];
+  for (i = 1; i < rank; i++)
+  {
+    printf (" x %u", (unsigned int) dims[i]);
+    nelems *= dims[i];
+  }
+  printf ("\n  receiver: total number of elements: %d\n", (int) nelems);
+  free (dims);
+
+  /*
+   * Read dataset from file into memory.
+   */
+  data = (int *) malloc ((size_t) nelems * sizeof (int));
+  status = H5Dread (dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+                    data);
+  H5Dclose (dataset);
+
+  /*
+   * Close the file.
+   */
+  printf ("  receiver: closing file '%s'...\n", filename);
+  H5Fclose (file);
+
+  /*
+   * Verify the dataset contents
+   */
+  printf ("  receiver: verifying contents of dataset '%s'...\n", DATASETNAME);
+  for (i = nerrors = 0; i < (int) nelems; i++)
+  {
+    if (data[i] != i)
+    {
+      fprintf (stderr, "receiver: data error at offset %d: "
+                       "expected %d got %d\n", i, i, data[i]);
+      nerrors++;
+    }
+  }
+  printf ("  receiver: dataset verified, %d errors found\n", nerrors);
+
+  free (data);
+
+  return (-nerrors);
+}
+
+
+int main (void)
+{
+  int main_status, sender_status, receiver_status;
+  pid_t sender_pid, receiver_pid;
+
+
+  sender_pid = receiver_pid = 0;
+
+  /* main's return code for success */
+  main_status = 0;
+
+  /* spawn off the sender and the receiver process */
+  printf ("main: starting sender process...\n");
+  sender_pid = fork ();
+  if (sender_pid == 0)
+  {
+    return (sender ());
+  }
+  else if (sender_pid < 0)
+  {
+    perror ("Failed to spawn sender");
+    main_status = -1;
+  }
+  else
+  {
+    printf ("main: starting receiver process...\n");
+    receiver_pid = fork ();
+    if (receiver_pid == 0)
+    {
+      return (receiver ());
+    }
+    else if (sender_pid < 0)
+    {
+      perror ("Failed to spawn receiver");
+      main_status = -1;
+    }
+  }
+
+  /* wait for the termination of sender and receiver and check their status */
+  printf ("main: waiting for termination of sender and receiver process...\n");
+  if (sender_pid > 0 &&
+      waitpid (sender_pid, &sender_status, 0) != sender_pid)
+  {
+    perror ("Failed to wait for termination of sender");
+    main_status = -1;
+  }
+  else
+  {
+    main_status |= sender_status;
+  }
+  if (receiver_pid > 0 &&
+      waitpid (receiver_pid, &receiver_status, 0) != receiver_pid)
+  {
+    perror ("Failed to wait for termination of receiver");
+    main_status = -1;
+  }
+  else
+  {
+    main_status |= receiver_status;
+  }
+
+  printf (main_status == 0 ?
+          "Stream Virtual File Driver test passed.\n" :
+          "*** Stream Virtual File Driver TEST FAILED ***\n");
+
+  return (main_status);
+}
+
+#endif /* H5_HAVE_STREAM */

Added: packages/hdf5/branches/upstream/current/test/tarray.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/tarray.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/tarray.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2098 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/***********************************************************
+*
+* Test program:	 tarray
+*
+* Test the Array Datatype functionality
+*
+*************************************************************/
+
+#include "testhdf5.h"
+
+#include "hdf5.h"
+
+#define FILENAME   "tarray1.h5"
+#define TESTFILE   "tarrold.h5"
+
+/* 1-D array datatype */
+#define ARRAY1_RANK	1
+#define ARRAY1_DIM1 4
+
+/* 3-D array datatype */
+#define ARRAY2_RANK	3
+#define ARRAY2_DIM1 3
+#define ARRAY2_DIM2 4
+#define ARRAY2_DIM3 5
+
+/* 2-D array datatype */
+#define ARRAY3_RANK	2
+#define ARRAY3_DIM1 6
+#define ARRAY3_DIM2 3
+
+/* 1-D dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	1
+#define SPACE1_DIM1	4
+
+/* 2-D dataset with fixed dimensions */
+#define SPACE2_NAME  "Space2"
+#define SPACE2_RANK	2
+#define SPACE2_DIM1	10
+#define SPACE2_DIM2	10
+
+/****************************************************************
+**
+**  test_array_atomic_1d(): Test basic array datatype code.
+**      Tests 1-D array of atomic datatypes
+**
+****************************************************************/
+static void
+test_array_atomic_1d(void)
+{
+    int wdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information to write */
+    int rdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information read in */
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1;       /* Datatype ID			*/
+    hsize_t		sdims1[] = {SPACE1_DIM1};
+    hsize_t		tdims1[] = {ARRAY1_DIM1};
+    int         ndims;      /* Array rank for reading */
+    hsize_t		rdims1[H5S_MAX_RANK];    /* Array dimensions for reading */
+    int        i,j;        /* counting variables */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing 1-D Array of Atomic Datatypes Functionality\n"));
+
+    /* Allocate and initialize array data to write */
+    for(i=0; i<SPACE1_DIM1; i++)
+        for(j=0; j<ARRAY1_DIM1; j++)
+            wdata[i][j]=i*10+j;
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tarray_create (H5T_NATIVE_INT,ARRAY1_RANK,tdims1,NULL);
+    CHECK(tid1, FAIL, "H5Tarray_create");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Re-open file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Get the datatype */
+    tid1 = H5Dget_type (dataset);
+    CHECK(tid1, FAIL, "H5Dget_type");
+
+    /* Check the array rank */
+    ndims=H5Tget_array_ndims(tid1);
+    VERIFY(ndims,ARRAY1_RANK,"H5Tget_array_ndims");
+
+    /* Get the array dimensions */
+    ret=H5Tget_array_dims(tid1,rdims1,NULL);
+    CHECK(ret, FAIL, "H5Tget_array_dims");
+
+    /* Check the array dimensions */
+    for(i=0; i<ndims; i++)
+        if(rdims1[i]!=tdims1[i]) {
+            TestErrPrintf("Array dimension information doesn't match!, rdims1[%d]=%d, tdims1[%d]=%d\n",(int)i,(int)rdims1[i],(int)i,(int)tdims1[i]);
+            continue;
+        } /* end if */
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        for(j=0; j<ARRAY1_DIM1; j++) {
+            if(wdata[i][j]!=rdata[i][j]) {
+                TestErrPrintf("Array data information doesn't match!, wdata[%d][%d]=%d, rdata[%d][%d]=%d\n",(int)i,(int)j,(int)wdata[i][j],(int)i,(int)j,(int)rdata[i][j]);
+                continue;
+            } /* end if */
+        } /* end for */
+    } /* end for */
+
+    /* Close Datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_array_atomic_1d() */
+
+/****************************************************************
+**
+**  test_array_atomic_3d(): Test basic array datatype code.
+**      Tests 3-D array of atomic datatypes
+**
+****************************************************************/
+static void
+test_array_atomic_3d(void)
+{
+    int wdata[SPACE1_DIM1][ARRAY2_DIM1][ARRAY2_DIM2][ARRAY2_DIM3];   /* Information to write */
+    int rdata[SPACE1_DIM1][ARRAY2_DIM1][ARRAY2_DIM2][ARRAY2_DIM3];   /* Information read in */
+    hid_t		fid;        /* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid;        /* Dataspace ID			*/
+    hid_t		tid;        /* Datatype ID			*/
+    hsize_t		sdims1[] = {SPACE1_DIM1};
+    hsize_t		tdims2[] = {ARRAY2_DIM1,ARRAY2_DIM2,ARRAY2_DIM3};
+    int         ndims;      /* Array rank for reading */
+    hsize_t		rdims2[H5S_MAX_RANK];    /* Array dimensions for reading */
+    int        i,j,k,l;    /* counting variables */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing 3-D Array of Atomic Datatypes Functionality\n"));
+
+    /* Allocate and initialize array data to write */
+    for(i=0; i<SPACE1_DIM1; i++)
+        for(j=0; j<ARRAY2_DIM1; j++)
+            for(k=0; k<ARRAY2_DIM2; k++)
+                for(l=0; l<ARRAY2_DIM3; l++)
+                    wdata[i][j][k][l]=i*1000+j*100+k*10+l;
+
+    /* Create file */
+    fid = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
+    CHECK(sid, FAIL, "H5Screate_simple");
+
+    /* Create a datatype to refer to */
+    tid = H5Tarray_create (H5T_NATIVE_INT,ARRAY2_RANK,tdims2,NULL);
+    CHECK(tid, FAIL, "H5Tarray_create");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid,"Dataset1",tid,sid,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Re-open file */
+    fid = H5Fopen(FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Get the datatype */
+    tid = H5Dget_type (dataset);
+    CHECK(tid, FAIL, "H5Dget_type");
+
+    /* Check the array rank */
+    ndims=H5Tget_array_ndims(tid);
+    VERIFY(ndims,ARRAY2_RANK,"H5Tget_array_ndims");
+
+    /* Get the array dimensions */
+    ret=H5Tget_array_dims(tid,rdims2,NULL);
+    CHECK(ret, FAIL, "H5Tget_array_dims");
+
+    /* Check the array dimensions */
+    for(i=0; i<ndims; i++)
+        if(rdims2[i]!=tdims2[i]) {
+            TestErrPrintf("Array dimension information doesn't match!, rdims2[%d]=%d, tdims2[%d]=%d\n",(int)i,(int)rdims2[i],(int)i,(int)tdims2[i]);
+            continue;
+        } /* end if */
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        for(j=0; j<ARRAY2_DIM1; j++) {
+            for(k=0; k<ARRAY2_DIM2; k++) {
+                for(l=0; l<ARRAY2_DIM3; l++) {
+                    if(wdata[i][j][k][l]!=rdata[i][j][k][l]) {
+                        TestErrPrintf("Array data information doesn't match!, wdata[%d][%d][%d][%d]=%d, rdata[%d][%d][%d][%d]=%d\n",(int)i,(int)j,(int)k,(int)l,(int)wdata[i][j][k][l],(int)i,(int)j,(int)k,(int)l,(int)rdata[i][j][k][l]);
+                        continue;
+                    } /* end if */
+                } /* end for */
+            } /* end for */
+        } /* end for */
+    } /* end for */
+
+    /* Close Datatype */
+    ret = H5Tclose(tid);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_array_atomic_3d() */
+
+/****************************************************************
+**
+**  test_array_array_atomic(): Test basic array datatype code.
+**      Tests 1-D array 2-D arrays of atomic datatypes
+**
+****************************************************************/
+static void
+test_array_array_atomic(void)
+{
+    int wdata[SPACE1_DIM1][ARRAY1_DIM1][ARRAY3_DIM1][ARRAY3_DIM2];   /* Information to write */
+    int rdata[SPACE1_DIM1][ARRAY1_DIM1][ARRAY3_DIM1][ARRAY3_DIM2];   /* Information read in */
+    hid_t		fid;        /* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid;        /* Dataspace ID			*/
+    hid_t		tid1;       /* 1-D array Datatype ID */
+    hid_t		tid2;       /* 2-D array Datatype ID */
+    hsize_t		sdims1[] = {SPACE1_DIM1};
+    hsize_t		tdims1[] = {ARRAY1_DIM1};
+    hsize_t		tdims2[] = {ARRAY3_DIM1,ARRAY3_DIM2};
+    int         ndims1;     /* Array rank for reading */
+    int         ndims2;     /* Array rank for reading */
+    hsize_t		rdims1[H5S_MAX_RANK];    /* Array dimensions for reading */
+    hsize_t		rdims2[H5S_MAX_RANK];    /* Array dimensions for reading */
+    int        i,j,k,l;    /* counting variables */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing 1-D Array 2-D Arrays of Atomic Datatypes Functionality\n"));
+
+    /* Allocate and initialize array data to write */
+    for(i=0; i<SPACE1_DIM1; i++)
+        for(j=0; j<ARRAY1_DIM1; j++)
+            for(k=0; k<ARRAY3_DIM1; k++)
+                for(l=0; l<ARRAY3_DIM2; l++)
+                    wdata[i][j][k][l]=i*1000+j*100+k*10+l;
+
+    /* Create file */
+    fid = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
+    CHECK(sid, FAIL, "H5Screate_simple");
+
+    /* Create a 2-D datatype to refer to */
+    tid2 = H5Tarray_create (H5T_NATIVE_INT,ARRAY3_RANK,tdims2,NULL);
+    CHECK(tid2, FAIL, "H5Tarray_create");
+
+    /* Create a 1-D datatype to refer to */
+    tid1 = H5Tarray_create (tid2,ARRAY1_RANK,tdims1,NULL);
+    CHECK(tid1, FAIL, "H5Tarray_create");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid,"Dataset1",tid1,sid,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatypes */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Re-open file */
+    fid = H5Fopen(FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Get the 1-D datatype */
+    tid1 = H5Dget_type (dataset);
+    CHECK(tid1, FAIL, "H5Dget_type");
+
+    /* Check the 1-D array rank */
+    ndims1=H5Tget_array_ndims(tid1);
+    VERIFY(ndims1,ARRAY1_RANK,"H5Tget_array_ndims");
+
+    /* Get the 1-D array dimensions */
+    ret=H5Tget_array_dims(tid1,rdims1,NULL);
+    CHECK(ret, FAIL, "H5Tget_array_dims");
+
+    /* Check the array dimensions */
+    for(i=0; i<ndims1; i++)
+        if(rdims1[i]!=tdims1[i]) {
+            TestErrPrintf("Array dimension information doesn't match!, rdims1[%d]=%d, tdims1[%d]=%d\n",(int)i,(int)rdims1[i],(int)i,(int)tdims1[i]);
+            continue;
+        } /* end if */
+
+    /* Get the 2-D datatype */
+    tid2 = H5Tget_super (tid1);
+    CHECK(tid2, FAIL, "H5Tget_super");
+
+    /* Check the 2-D array rank */
+    ndims2=H5Tget_array_ndims(tid2);
+    VERIFY(ndims2,ARRAY3_RANK,"H5Tget_array_ndims");
+
+    /* Get the 2-D array dimensions */
+    ret=H5Tget_array_dims(tid2,rdims2,NULL);
+    CHECK(ret, FAIL, "H5Tget_array_dims");
+
+    /* Check the array dimensions */
+    for(i=0; i<ndims2; i++)
+        if(rdims2[i]!=tdims2[i]) {
+            TestErrPrintf("Array dimension information doesn't match!, rdims2[%d]=%d, tdims2[%d]=%d\n",(int)i,(int)rdims2[i],(int)i,(int)tdims2[i]);
+            continue;
+        } /* end if */
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        for(j=0; j<ARRAY1_DIM1; j++) {
+            for(k=0; k<ARRAY3_DIM1; k++) {
+                for(l=0; l<ARRAY3_DIM2; l++) {
+                    if(wdata[i][j][k][l]!=rdata[i][j][k][l]) {
+                        TestErrPrintf("Array data information doesn't match!, wdata[%d][%d][%d][%d]=%d, rdata[%d][%d][%d][%d]=%d\n",(int)i,(int)j,(int)k,(int)l,(int)wdata[i][j][k][l],(int)i,(int)j,(int)k,(int)l,(int)rdata[i][j][k][l]);
+                        continue;
+                    } /* end if */
+                } /* end for */
+            } /* end for */
+        } /* end for */
+    } /* end for */
+
+    /* Close Datatypes */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_array_array_atomic() */
+
+/****************************************************************
+**
+**  test_array_compound_atomic(): Test basic array datatype code.
+**      Tests 1-D array of compound datatypes (with no array fields)
+**
+****************************************************************/
+static void
+test_array_compound_atomic(void)
+{
+    typedef struct {        /* Typedef for compound datatype */
+        int i;
+        float f;
+    } s1_t;
+    s1_t wdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information to write */
+    s1_t rdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information read in */
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1;       /* Array Datatype ID			*/
+    hid_t		tid2;       /* Compound Datatype ID			*/
+    hsize_t		sdims1[] = {SPACE1_DIM1};
+    hsize_t		tdims1[] = {ARRAY1_DIM1};
+    int         ndims;      /* Array rank for reading */
+    hsize_t		rdims1[H5S_MAX_RANK];    /* Array dimensions for reading */
+    int         nmemb;      /* Number of compound members */
+    char       *mname;      /* Name of compound field */
+    size_t      off;        /* Offset of compound field */
+    hid_t       mtid;       /* Datatype ID for field */
+    int        i,j;        /* counting variables */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing 1-D Array of Compound Atomic Datatypes Functionality\n"));
+
+    /* Initialize array data to write */
+    for(i=0; i<SPACE1_DIM1; i++)
+        for(j=0; j<ARRAY1_DIM1; j++) {
+            wdata[i][j].i=i*10+j;
+            wdata[i][j].f=(float)(i*2.5+j);
+        } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a compound datatype to refer to */
+    tid2 = H5Tcreate(H5T_COMPOUND, sizeof(s1_t));
+    CHECK(tid2, FAIL, "H5Tcreate");
+
+    /* Insert integer field */
+    ret = H5Tinsert (tid2, "i", HOFFSET(s1_t,i), H5T_NATIVE_INT);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    /* Insert float field */
+    ret = H5Tinsert (tid2, "f", HOFFSET(s1_t,f), H5T_NATIVE_FLOAT);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    /* Create an array datatype to refer to */
+    tid1 = H5Tarray_create (tid2,ARRAY1_RANK,tdims1,NULL);
+    CHECK(tid1, FAIL, "H5Tarray_create");
+
+    /* Close compound datatype */
+    ret=H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Re-open file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Get the datatype */
+    tid1 = H5Dget_type (dataset);
+    CHECK(tid1, FAIL, "H5Dget_type");
+
+    /* Check the array rank */
+    ndims=H5Tget_array_ndims(tid1);
+    VERIFY(ndims,ARRAY1_RANK,"H5Tget_array_ndims");
+
+    /* Get the array dimensions */
+    ret=H5Tget_array_dims(tid1,rdims1,NULL);
+    CHECK(ret, FAIL, "H5Tget_array_dims");
+
+    /* Check the array dimensions */
+    for(i=0; i<ndims; i++)
+        if(rdims1[i]!=tdims1[i]) {
+            TestErrPrintf("Array dimension information doesn't match!, rdims1[%d]=%d, tdims1[%d]=%d\n",(int)i,(int)rdims1[i],(int)i,(int)tdims1[i]);
+            continue;
+        } /* end if */
+
+    /* Get the compound datatype */
+    tid2 = H5Tget_super (tid1);
+    CHECK(tid2, FAIL, "H5Tget_super");
+
+    /* Check the number of members */
+    nmemb=H5Tget_nmembers(tid2);
+    VERIFY(nmemb,2,"H5Tget_nmembers");
+
+    /* Check the 1st field's name */
+    mname=H5Tget_member_name(tid2,0);
+    CHECK(mname, NULL, "H5Tget_member_name");
+    if(HDstrcmp(mname,"i")!=0)
+        TestErrPrintf("Compound field name doesn't match!, mname=%s\n",mname);
+    free(mname);
+
+    /* Check the 1st field's offset */
+    off=H5Tget_member_offset(tid2,0);
+    VERIFY(off, HOFFSET(s1_t,i), "H5Tget_member_offset");
+
+    /* Check the 1st field's datatype */
+    mtid=H5Tget_member_type(tid2,0);
+    CHECK(mtid, FAIL, "H5Tget_member_type");
+    if((ret=H5Tequal(mtid,H5T_NATIVE_INT))<=0)
+        TestErrPrintf("Compound data type is incorrect!, ret=%d\n",(int)ret);
+    ret=H5Tclose(mtid);
+    CHECK(mtid, FAIL, "H5Tclose");
+
+    /* Check the 2nd field's name */
+    mname=H5Tget_member_name(tid2,1);
+    CHECK(mname, NULL, "H5Tget_member_name");
+    if(HDstrcmp(mname,"f")!=0)
+        TestErrPrintf("Compound field name doesn't match!, mname=%s\n",mname);
+    free(mname);
+
+    /* Check the 2nd field's offset */
+    off=H5Tget_member_offset(tid2,1);
+    VERIFY(off, HOFFSET(s1_t,f), "H5Tget_member_offset");
+
+    /* Check the 2nd field's datatype */
+    mtid=H5Tget_member_type(tid2,1);
+    CHECK(mtid, FAIL, "H5Tget_member_type");
+    if((ret=H5Tequal(mtid,H5T_NATIVE_FLOAT))<=0)
+        TestErrPrintf("Compound data type is incorrect!, ret=%d\n",(int)ret);
+    ret=H5Tclose(mtid);
+    CHECK(mtid, FAIL, "H5Tclose");
+
+    /* Close Compound Datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        for(j=0; j<ARRAY1_DIM1; j++) {
+            if(wdata[i][j].i!=rdata[i][j].i) {
+                TestErrPrintf("Array data information doesn't match!, wdata[%d][%d].i=%d, rdata[%d][%d].i=%d\n",(int)i,(int)j,(int)wdata[i][j].i,(int)i,(int)j,(int)rdata[i][j].i);
+                continue;
+            } /* end if */
+            if(wdata[i][j].f!=rdata[i][j].f) {
+                TestErrPrintf("Array data information doesn't match!, wdata[%d][%d].f=%f, rdata[%d][%d].f=%f\n",(int)i,(int)j,wdata[i][j].f,(int)i,(int)j,rdata[i][j].f);
+                continue;
+            } /* end if */
+        } /* end for */
+    } /* end for */
+
+    /* Close Datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_array_compound_atomic() */
+
+/****************************************************************
+**
+**  test_array_compound_array(): Test basic array datatype code.
+**      Tests 1-D array of compound datatypes (with array fields)
+**
+****************************************************************/
+static void
+test_array_compound_array(void)
+{
+    typedef struct {        /* Typedef for compound datatype */
+        int i;
+        float f[ARRAY1_DIM1];
+    } s1_t;
+    s1_t wdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information to write */
+    s1_t rdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information read in */
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1;       /* Array Datatype ID	*/
+    hid_t		tid2;       /* Compound Datatype ID	*/
+    hid_t		tid3;       /* Nested Array Datatype ID	*/
+    hsize_t		sdims1[] = {SPACE1_DIM1};
+    hsize_t		tdims1[] = {ARRAY1_DIM1};
+    int         ndims;      /* Array rank for reading */
+    hsize_t		rdims1[H5S_MAX_RANK];    /* Array dimensions for reading */
+    int         nmemb;      /* Number of compound members */
+    char       *mname;      /* Name of compound field */
+    size_t      off;        /* Offset of compound field */
+    hid_t       mtid;       /* Datatype ID for field */
+    H5T_class_t mclass;     /* Datatype class for field */
+    int        i,j,k;      /* counting variables */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing 1-D Array of Compound Array Datatypes Functionality\n"));
+
+    /* Initialize array data to write */
+    for(i=0; i<SPACE1_DIM1; i++)
+        for(j=0; j<ARRAY1_DIM1; j++) {
+            wdata[i][j].i=i*10+j;
+            for(k=0; k<ARRAY1_DIM1; k++)
+                wdata[i][j].f[k]=(float)(i*10+j*2.5+k);
+        } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a compound datatype to refer to */
+    tid2 = H5Tcreate(H5T_COMPOUND, sizeof(s1_t));
+    CHECK(tid2, FAIL, "H5Tcreate");
+
+    /* Insert integer field */
+    ret = H5Tinsert (tid2, "i", HOFFSET(s1_t,i), H5T_NATIVE_INT);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    /* Create an array of floats datatype */
+    tid3 = H5Tarray_create (H5T_NATIVE_FLOAT,ARRAY1_RANK,tdims1,NULL);
+    CHECK(tid3, FAIL, "H5Tarray_create");
+
+    /* Insert float array field */
+    ret = H5Tinsert (tid2, "f", HOFFSET(s1_t,f), tid3);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    /* Close array of floats field datatype */
+    ret=H5Tclose(tid3);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Create an array datatype to refer to */
+    tid1 = H5Tarray_create (tid2,ARRAY1_RANK,tdims1,NULL);
+    CHECK(tid1, FAIL, "H5Tarray_create");
+
+    /* Close compound datatype */
+    ret=H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Re-open file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Get the datatype */
+    tid1 = H5Dget_type (dataset);
+    CHECK(tid1, FAIL, "H5Dget_type");
+
+    /* Check the array rank */
+    ndims=H5Tget_array_ndims(tid1);
+    VERIFY(ndims,ARRAY1_RANK,"H5Tget_array_ndims");
+
+    /* Get the array dimensions */
+    ret=H5Tget_array_dims(tid1,rdims1,NULL);
+    CHECK(ret, FAIL, "H5Tget_array_dims");
+
+    /* Check the array dimensions */
+    for(i=0; i<ndims; i++)
+        if(rdims1[i]!=tdims1[i]) {
+            TestErrPrintf("Array dimension information doesn't match!, rdims1[%d]=%d, tdims1[%d]=%d\n",(int)i,(int)rdims1[i],(int)i,(int)tdims1[i]);
+            continue;
+        } /* end if */
+
+    /* Get the compound datatype */
+    tid2 = H5Tget_super (tid1);
+    CHECK(tid2, FAIL, "H5Tget_super");
+
+    /* Check the number of members */
+    nmemb=H5Tget_nmembers(tid2);
+    VERIFY(nmemb,2,"H5Tget_nmembers");
+
+    /* Check the 1st field's name */
+    mname=H5Tget_member_name(tid2,0);
+    CHECK(mname, NULL, "H5Tget_member_name");
+    if(HDstrcmp(mname,"i")!=0)
+        TestErrPrintf("Compound field name doesn't match!, mname=%s\n",mname);
+    free(mname);
+
+    /* Check the 1st field's offset */
+    off=H5Tget_member_offset(tid2,0);
+    VERIFY(off, HOFFSET(s1_t,i), "H5Tget_member_offset");
+
+    /* Check the 1st field's datatype */
+    mtid=H5Tget_member_type(tid2,0);
+    CHECK(mtid, FAIL, "H5Tget_member_type");
+    if((ret=H5Tequal(mtid,H5T_NATIVE_INT))<=0)
+        TestErrPrintf("Compound data type is incorrect!, ret=%d\n",(int)ret);
+    ret=H5Tclose(mtid);
+    CHECK(mtid, FAIL, "H5Tclose");
+
+    /* Check the 2nd field's name */
+    mname=H5Tget_member_name(tid2,1);
+    CHECK(mname, NULL, "H5Tget_member_name");
+    if(HDstrcmp(mname,"f")!=0)
+        TestErrPrintf("Compound field name doesn't match!, mname=%s\n",mname);
+    free(mname);
+
+    /* Check the 2nd field's offset */
+    off=H5Tget_member_offset(tid2,1);
+    VERIFY(off, HOFFSET(s1_t,f), "H5Tget_member_offset");
+
+    /* Check the 2nd field's datatype */
+    mtid=H5Tget_member_type(tid2,1);
+    CHECK(mtid, FAIL, "H5Tget_member_type");
+
+    /* Get the 2nd field's class */
+    mclass=H5Tget_class(mtid);
+    VERIFY(mclass, H5T_ARRAY, "H5Tget_class");
+
+    /* Check the array rank */
+    ndims=H5Tget_array_ndims(mtid);
+    VERIFY(ndims,ARRAY1_RANK,"H5Tget_array_ndims");
+
+    /* Get the array dimensions */
+    ret=H5Tget_array_dims(mtid,rdims1,NULL);
+    CHECK(ret, FAIL, "H5Tget_array_dims");
+
+    /* Check the array dimensions */
+    for(i=0; i<ndims; i++)
+        if(rdims1[i]!=tdims1[i]) {
+            TestErrPrintf("Nested array dimension information doesn't match!, rdims1[%d]=%d, tdims1[%d]=%d\n",(int)i,(int)rdims1[i],(int)i,(int)tdims1[i]);
+            continue;
+        } /* end if */
+
+    /* Check the nested array's datatype */
+    tid3=H5Tget_super(mtid);
+    CHECK(tid3, FAIL, "H5Tget_super");
+
+    if((ret=H5Tequal(tid3,H5T_NATIVE_FLOAT))<=0)
+        TestErrPrintf("Compound data type is incorrect!, ret=%d\n",(int)ret);
+
+    /* Close the array's base type datatype */
+    ret=H5Tclose(tid3);
+    CHECK(mtid, FAIL, "H5Tclose");
+
+    /* Close the member datatype */
+    ret=H5Tclose(mtid);
+    CHECK(mtid, FAIL, "H5Tclose");
+
+    /* Close Compound Datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        for(j=0; j<ARRAY1_DIM1; j++) {
+            if(wdata[i][j].i!=rdata[i][j].i) {
+                TestErrPrintf("Array data information doesn't match!, wdata[%d][%d].i=%d, rdata[%d][%d].i=%d\n",(int)i,(int)j,(int)wdata[i][j].i,(int)i,(int)j,(int)rdata[i][j].i);
+                continue;
+            } /* end if */
+            for(k=0; k<ARRAY1_DIM1; k++)
+                if(wdata[i][j].f[k]!=rdata[i][j].f[k]) {
+                    TestErrPrintf("Array data information doesn't match!, wdata[%d][%d].f[%d]=%f, rdata[%d][%d].f[%d]=%f\n",(int)i,(int)j,(int)k,wdata[i][j].f[k],(int)i,(int)j,(int)k,rdata[i][j].f[k]);
+                    continue;
+                } /* end if */
+        } /* end for */
+    } /* end for */
+
+    /* Close Datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_array_compound_array() */
+
+void *test_array_alloc_custom(size_t size, void *info);
+void test_array_free_custom(void *mem, void *info);
+
+/****************************************************************
+**
+**  test_array_alloc_custom(): Test VL datatype custom memory
+**      allocation routines.  This routine just uses malloc to
+**      allocate the memory and increments the amount of memory
+**      allocated.
+**
+****************************************************************/
+void *test_array_alloc_custom(size_t size, void *info)
+{
+    void *ret_value=NULL;       /* Pointer to return */
+    int *mem_used=(int *)info;  /* Get the pointer to the memory used */
+    size_t extra;               /* Extra space needed */
+
+    /*
+     *  This weird contortion is required on the DEC Alpha to keep the
+     *  alignment correct - QAK
+     */
+    extra=MAX(sizeof(void *),sizeof(size_t));
+
+    if((ret_value=HDmalloc(extra+size))!=NULL) {
+        *(size_t *)ret_value=size;
+        *mem_used+=size;
+    } /* end if */
+    ret_value=((unsigned char *)ret_value)+extra;
+    return(ret_value);
+}
+
+/****************************************************************
+**
+**  test_array_free_custom(): Test VL datatype custom memory
+**      allocation routines.  This routine just uses free to
+**      release the memory and decrements the amount of memory
+**      allocated.
+**
+****************************************************************/
+void test_array_free_custom(void *_mem, void *info)
+{
+    unsigned char *mem;
+    int *mem_used=(int *)info;  /* Get the pointer to the memory used */
+    size_t extra;               /* Extra space needed */
+
+    /*
+     *  This weird contortion is required on the DEC Alpha to keep the
+     *  alignment correct - QAK
+     */
+    extra=MAX(sizeof(void *),sizeof(size_t));
+
+    if(_mem!=NULL) {
+        mem=((unsigned char *)_mem)-extra;
+        *mem_used-=*(size_t *)mem;
+        HDfree(mem);
+    } /* end if */
+}
+
+/****************************************************************
+**
+**  test_array_vlen_atomic(): Test basic array datatype code.
+**      Tests 1-D array of atomic VL datatypes
+**
+****************************************************************/
+static void
+test_array_vlen_atomic(void)
+{
+    hvl_t wdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information to write */
+    hvl_t rdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information read in */
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1;       /* Array Datatype ID			*/
+    hid_t		tid2;       /* VL Datatype ID       */
+    hid_t		tid3;       /* Atomic Datatype ID   */
+    hsize_t		sdims1[] = {SPACE1_DIM1};
+    hsize_t		tdims1[] = {ARRAY1_DIM1};
+    int         ndims;      /* Array rank for reading */
+    hsize_t		rdims1[H5S_MAX_RANK];    /* Array dimensions for reading */
+    H5T_class_t mclass;     /* Datatype class for VL */
+    hid_t       xfer_pid;   /* Dataset transfer property list ID */
+    hsize_t     size;       /* Number of bytes which will be used */
+    int         mem_used=0; /* Memory used during allocation */
+    int        i,j,k;      /* counting variables */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing 1-D Array of Atomic Variable-Length Datatypes Functionality\n"));
+
+    /* Initialize array data to write */
+    for(i=0; i<SPACE1_DIM1; i++)
+        for(j=0; j<ARRAY1_DIM1; j++) {
+            wdata[i][j].p=malloc((i+j+1)*sizeof(unsigned int));
+            wdata[i][j].len=i+j+1;
+            for(k=0; k<(i+j+1); k++)
+                ((unsigned int *)wdata[i][j].p)[k]=i*100+j*10+k;
+        } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a compound datatype to refer to */
+    tid2 = H5Tvlen_create(H5T_NATIVE_UINT);
+    CHECK(tid2, FAIL, "H5Tcreate");
+
+    /* Create an array datatype to refer to */
+    tid1 = H5Tarray_create (tid2,ARRAY1_RANK,tdims1,NULL);
+    CHECK(tid1, FAIL, "H5Tarray_create");
+
+    /* Close VL datatype */
+    ret=H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Re-open file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Get the dataspace */
+    sid1 = H5Dget_space (dataset);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    /* Get the datatype */
+    tid1 = H5Dget_type (dataset);
+    CHECK(tid1, FAIL, "H5Dget_type");
+
+    /* Check the array rank */
+    ndims=H5Tget_array_ndims(tid1);
+    VERIFY(ndims,ARRAY1_RANK,"H5Tget_array_ndims");
+
+    /* Get the array dimensions */
+    ret=H5Tget_array_dims(tid1,rdims1,NULL);
+    CHECK(ret, FAIL, "H5Tget_array_dims");
+
+    /* Check the array dimensions */
+    for(i=0; i<ndims; i++)
+        if(rdims1[i]!=tdims1[i]) {
+            TestErrPrintf("Array dimension information doesn't match!, rdims1[%d]=%d, tdims1[%d]=%d\n",(int)i,(int)rdims1[i],(int)i,(int)tdims1[i]);
+            continue;
+        } /* end if */
+
+    /* Get the VL datatype */
+    tid2 = H5Tget_super (tid1);
+    CHECK(tid2, FAIL, "H5Tget_super");
+
+    /* Get the 2nd field's class */
+    mclass=H5Tget_class(tid2);
+    VERIFY(mclass, H5T_VLEN, "H5Tget_class");
+
+    /* Check the VL datatype's base type */
+    tid3=H5Tget_super(tid2);
+    CHECK(tid3, FAIL, "H5Tget_super");
+
+    if((ret=H5Tequal(tid3,H5T_NATIVE_UINT))<=0)
+        TestErrPrintf("VL base datatype is incorrect!, ret=%d\n",(int)ret);
+
+    /* Close the array's base type datatype */
+    ret=H5Tclose(tid3);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close VL Datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Change to the custom memory allocation routines for reading VL data */
+    xfer_pid=H5Pcreate(H5P_DATASET_XFER);
+    CHECK(xfer_pid, FAIL, "H5Pcreate");
+
+    ret=H5Pset_vlen_mem_manager(xfer_pid,test_array_alloc_custom,&mem_used,test_array_free_custom,&mem_used);
+    CHECK(ret, FAIL, "H5Pset_vlen_mem_manager");
+
+    /* Make certain the correct amount of memory will be used */
+    ret=H5Dvlen_get_buf_size(dataset,tid1,sid1,&size);
+    CHECK(ret, FAIL, "H5Dvlen_get_buf_size");
+
+    /* # elements allocated = (1 + 2 + 3 + 4) + (2 + 3 + 4 + 5) +
+     *  (3 + 4 + 5 + 6) + (4 + 5 + 6 + 7) = 64 elements
+     */
+    VERIFY(size,64*sizeof(unsigned int),"H5Dvlen_get_buf_size");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Make certain the correct amount of memory has been used */
+    /* # elements allocated = (1 + 2 + 3 + 4) + (2 + 3 + 4 + 5) +
+     *  (3 + 4 + 5 + 6) + (4 + 5 + 6 + 7) = 64 elements
+     */
+    VERIFY(mem_used,64*sizeof(unsigned int),"H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        for(j=0; j<ARRAY1_DIM1; j++) {
+            if(wdata[i][j].len!=rdata[i][j].len) {
+                TestErrPrintf("VL data length don't match!, wdata[%d][%d].len=%d, rdata[%d][%d].len=%d\n",(int)i,(int)j,(int)wdata[i][j].len,(int)i,(int)j,(int)rdata[i][j].len);
+                continue;
+            } /* end if */
+            for(k=0; k<(int)rdata[i][j].len; k++) {
+                if( ((unsigned int *)wdata[i][j].p)[k] != ((unsigned int *)rdata[i][j].p)[k] ) {
+                    TestErrPrintf("VL data values don't match!, wdata[%d][%d].p[%d]=%d, rdata[%d][%d].p[%d]=%d\n",(int)i,(int)j,(int)k, (int)((unsigned int *)wdata[i][j].p)[k], (int)i,(int)j,(int)k, (int)((unsigned int *)rdata[i][j].p)[k]);
+                    continue;
+                } /* end if */
+            } /* end for */
+        } /* end for */
+    } /* end for */
+
+    /* Reclaim the read VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Make certain the VL memory has been freed */
+    VERIFY(mem_used,0,"H5Dvlen_reclaim");
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close dataset transfer property list */
+    ret = H5Pclose(xfer_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close Datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_array_vlen_atomic() */
+
+/****************************************************************
+**
+**  test_array_vlen_array(): Test basic array datatype code.
+**      Tests 1-D array of 1-D array VL datatypes
+**
+****************************************************************/
+static void
+test_array_vlen_array(void)
+{
+    hvl_t wdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information to write */
+    hvl_t rdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information read in */
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1;       /* Array Datatype ID			*/
+    hid_t		tid2;       /* VL Datatype ID       */
+    hid_t		tid3;       /* Nested Array Datatype ID   */
+    hid_t		tid4;       /* Atomic Datatype ID   */
+    hsize_t		sdims1[] = {SPACE1_DIM1};
+    hsize_t		tdims1[] = {ARRAY1_DIM1};
+    int         ndims;      /* Array rank for reading */
+    hsize_t		rdims1[H5S_MAX_RANK];    /* Array dimensions for reading */
+    H5T_class_t mclass;     /* Datatype class for VL */
+    hid_t       xfer_pid;   /* Dataset transfer property list ID */
+    hsize_t     size;       /* Number of bytes which will be used */
+    int         mem_used=0; /* Memory used during allocation */
+    int        i,j,k,l;    /* Index variables */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing 1-D Array of 1-D Array Variable-Length Datatypes Functionality\n"));
+
+    /* Initialize array data to write */
+    for(i=0; i<SPACE1_DIM1; i++)
+        for(j=0; j<ARRAY1_DIM1; j++) {
+            wdata[i][j].p=malloc((i+j+1)*(sizeof(unsigned int)*ARRAY1_DIM1));
+            wdata[i][j].len=i+j+1;
+            for(k=0; k<(i+j+1); k++)
+                for(l=0; l<ARRAY1_DIM1; l++)
+                    ((unsigned int *)wdata[i][j].p)[k*ARRAY1_DIM1+l]=i*1000+j*100+k*10+l;
+        } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create the nested array datatype to refer to */
+    tid3 = H5Tarray_create(H5T_NATIVE_UINT,ARRAY1_RANK,tdims1,NULL);
+    CHECK(tid3, FAIL, "H5Tcreate");
+
+    /* Create a VL datatype of 1-D arrays to refer to */
+    tid2 = H5Tvlen_create(tid3);
+    CHECK(tid2, FAIL, "H5Tcreate");
+
+    /* Close nested array datatype */
+    ret=H5Tclose(tid3);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Create an array datatype to refer to */
+    tid1 = H5Tarray_create (tid2,ARRAY1_RANK,tdims1,NULL);
+    CHECK(tid1, FAIL, "H5Tarray_create");
+
+    /* Close VL datatype */
+    ret=H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Re-open file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Get the dataspace */
+    sid1 = H5Dget_space (dataset);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    /* Get the datatype */
+    tid1 = H5Dget_type (dataset);
+    CHECK(tid1, FAIL, "H5Dget_type");
+
+    /* Check the array rank */
+    ndims=H5Tget_array_ndims(tid1);
+    VERIFY(ndims,ARRAY1_RANK,"H5Tget_array_ndims");
+
+    /* Get the array dimensions */
+    ret=H5Tget_array_dims(tid1,rdims1,NULL);
+    CHECK(ret, FAIL, "H5Tget_array_dims");
+
+    /* Check the array dimensions */
+    for(i=0; i<ndims; i++)
+        if(rdims1[i]!=tdims1[i]) {
+            TestErrPrintf("Array dimension information doesn't match!, rdims1[%d]=%d, tdims1[%d]=%d\n",(int)i,(int)rdims1[i],(int)i,(int)tdims1[i]);
+            continue;
+        } /* end if */
+
+    /* Get the VL datatype */
+    tid2 = H5Tget_super (tid1);
+    CHECK(tid2, FAIL, "H5Tget_super");
+
+    /* Get the VL datatype's class */
+    mclass=H5Tget_class(tid2);
+    VERIFY(mclass, H5T_VLEN, "H5Tget_class");
+
+    /* Check the VL datatype's base type */
+    tid3=H5Tget_super(tid2);
+    CHECK(tid3, FAIL, "H5Tget_super");
+
+    /* Get the nested array datatype's class */
+    mclass=H5Tget_class(tid3);
+    VERIFY(mclass, H5T_ARRAY, "H5Tget_class");
+
+    /* Check the array rank */
+    ndims=H5Tget_array_ndims(tid3);
+    VERIFY(ndims,ARRAY1_RANK,"H5Tget_array_ndims");
+
+    /* Get the array dimensions */
+    ret=H5Tget_array_dims(tid3,rdims1,NULL);
+    CHECK(ret, FAIL, "H5Tget_array_dims");
+
+    /* Check the array dimensions */
+    for(i=0; i<ndims; i++)
+        if(rdims1[i]!=tdims1[i]) {
+            TestErrPrintf("Array dimension information doesn't match!, rdims1[%d]=%d, tdims1[%d]=%d\n",(int)i,(int)rdims1[i],(int)i,(int)tdims1[i]);
+            continue;
+        } /* end if */
+
+    /* Check the array's base type */
+    tid4=H5Tget_super(tid3);
+    CHECK(tid4, FAIL, "H5Tget_super");
+
+
+    if((ret=H5Tequal(tid4,H5T_NATIVE_UINT))<=0)
+        TestErrPrintf("VL base datatype is incorrect!, ret=%d\n",(int)ret);
+
+    /* Close the array's base type datatype */
+    ret=H5Tclose(tid4);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close the nested array datatype */
+    ret=H5Tclose(tid3);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close VL Datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Change to the custom memory allocation routines for reading VL data */
+    xfer_pid=H5Pcreate(H5P_DATASET_XFER);
+    CHECK(xfer_pid, FAIL, "H5Pcreate");
+
+    ret=H5Pset_vlen_mem_manager(xfer_pid,test_array_alloc_custom,&mem_used,test_array_free_custom,&mem_used);
+    CHECK(ret, FAIL, "H5Pset_vlen_mem_manager");
+
+    /* Make certain the correct amount of memory will be used */
+    ret=H5Dvlen_get_buf_size(dataset,tid1,sid1,&size);
+    CHECK(ret, FAIL, "H5Dvlen_get_buf_size");
+
+    /* # elements allocated = (1 + 2 + 3 + 4) + (2 + 3 + 4 + 5) +
+     *  (3 + 4 + 5 + 6) + (4 + 5 + 6 + 7) = 64*ARRAY1_DIM1 elements
+     */
+    VERIFY(size,64*(sizeof(unsigned int)*ARRAY1_DIM1),"H5Dvlen_get_buf_size");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Make certain the correct amount of memory has been used */
+    /* # elements allocated = (1 + 2 + 3 + 4) + (2 + 3 + 4 + 5) +
+     *  (3 + 4 + 5 + 6) + (4 + 5 + 6 + 7) = 64*ARRAY1_DIM1 elements
+     */
+    VERIFY(mem_used,64*(sizeof(unsigned int)*ARRAY1_DIM1),"H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        for(j=0; j<ARRAY1_DIM1; j++) {
+            if(wdata[i][j].len!=rdata[i][j].len) {
+                TestErrPrintf("VL data length don't match!, wdata[%d][%d].len=%d, rdata[%d][%d].len=%d\n",(int)i,(int)j,(int)wdata[i][j].len,(int)i,(int)j,(int)rdata[i][j].len);
+                continue;
+            } /* end if */
+            for(k=0; k<(int)rdata[i][j].len; k++) {
+                for(l=0; l<ARRAY1_DIM1; l++) {
+                    if( ((unsigned int *)wdata[i][j].p)[k*ARRAY1_DIM1+l] != ((unsigned int *)rdata[i][j].p)[k*ARRAY1_DIM1+l] ) {
+                        TestErrPrintf("VL data values don't match!, wdata[%d][%d].p[%d][%d]=%d, rdata[%d][%d].p[%d][%d]=%d\n",(int)i,(int)j,(int)k,(int)l, (int)((unsigned int *)wdata[i][j].p)[k*ARRAY1_DIM1+l], (int)i,(int)j,(int)k,(int)l, (int)((unsigned int *)rdata[i][j].p)[k*ARRAY1_DIM1+l]);
+                        continue;
+                    } /* end if */
+                } /* end for */
+            } /* end for */
+        } /* end for */
+    } /* end for */
+
+    /* Reclaim the read VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Make certain the VL memory has been freed */
+    VERIFY(mem_used,0,"H5Dvlen_reclaim");
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close dataset transfer property list */
+    ret = H5Pclose(xfer_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close Datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_array_vlen_array() */
+
+#define FIELDNAME  "ArrayofStructures"
+#define LENGTH     5
+#define ALEN       10
+#define RANK       1
+#define NMAX       100
+
+typedef struct
+{
+  int      nsubfields;
+  char     *name[NMAX];
+  size_t   offset[NMAX];
+  hid_t    datatype[NMAX];
+
+} CmpDTSinfo;
+
+/****************************************************************
+**
+**  test_array_bkg(): Test basic array datatype code.
+**      Tests reading compound datatype with array fields and
+**          writing partial fields.
+**
+****************************************************************/
+static void
+test_array_bkg(void)
+{
+    herr_t       status = -1;
+
+    hid_t        fid, array_dt;
+    hid_t        space;
+    hid_t        type;
+    hid_t        dataset;
+
+    hsize_t      dim[] = {LENGTH};
+    hsize_t      dima[] = {ALEN};
+
+    int          i, j;
+    int          ndims[3] = {1,1,1};
+
+    typedef struct
+    {
+	  int      a[ALEN];
+	  float    b[ALEN];
+	  double   c[ALEN];
+    } CmpField;
+
+    CmpField     cf[LENGTH];
+    CmpField     cfr[LENGTH];
+    CmpDTSinfo   dtsinfo;
+
+    typedef struct
+    {
+      float   b[ALEN];
+    } fld_t;
+
+    fld_t   fld[LENGTH];
+    fld_t   fldr[LENGTH];
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Partial I/O of Array Fields in Compound Datatype Functionality\n"));
+
+    /* Initialize the data */
+    /* ------------------- */
+    for (i = 0; i < LENGTH; i++)
+	  {
+		for (j = 0; j < ALEN; j++)
+		  {
+			cf[i].a[j] = 100*(i+1) + j;
+			cf[i].b[j] = (float)(100.*(i+1) + 0.01*j);
+			cf[i].c[j] = 100.*(i+1) + 0.02*j;
+		  }
+	  }
+
+
+    /* Set the number of data members */
+    /* ------------------------------ */
+    dtsinfo.nsubfields = 3;
+
+    /* Initialize the offsets  */
+    /* ----------------------- */
+    dtsinfo.offset[0]   = HOFFSET(CmpField, a);
+    dtsinfo.offset[1]   = HOFFSET(CmpField, b);
+    dtsinfo.offset[2]   = HOFFSET(CmpField, c);
+
+    /* Initialize the data type IDs */
+    /* ---------------------------- */
+    dtsinfo.datatype[0] = H5T_NATIVE_INT;
+    dtsinfo.datatype[1] = H5T_NATIVE_FLOAT;
+    dtsinfo.datatype[2] = H5T_NATIVE_DOUBLE;
+
+
+    /* Initialize the names of data members */
+    /* ------------------------------------ */
+    for (i = 0; i < dtsinfo.nsubfields; i++)
+      dtsinfo.name[i] = (char *)calloc(20, sizeof(char));
+
+	strcpy(dtsinfo.name[0], "One");
+	strcpy(dtsinfo.name[1], "Two");
+	strcpy(dtsinfo.name[2], "Three");
+
+
+    /* Create file */
+    /* ----------- */
+    fid = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create data space */
+    /* ----------------- */
+    space  = H5Screate_simple(RANK, dim, NULL);
+    CHECK(space, FAIL, "H5Screate_simple");
+
+    /* Create the memory data type */
+    /* --------------------------- */
+    type   = H5Tcreate(H5T_COMPOUND, sizeof(CmpField));
+    CHECK(type, FAIL, "H5Tcreate");
+
+
+    /* Add  members to the compound data type */
+    /* -------------------------------------- */
+    for ( i = 0; i < dtsinfo.nsubfields; i++)
+    {
+        array_dt = H5Tarray_create (dtsinfo.datatype[i], ndims[i], dima, NULL);
+        CHECK(array_dt, FAIL, "H5Tarray_create");
+
+        status = H5Tinsert (type, dtsinfo.name[i], dtsinfo.offset[i], array_dt);
+        CHECK(status, FAIL, "H5Tinsert");
+
+        status = H5Tclose(array_dt);
+        CHECK(status, FAIL, "H5Tclose");
+    }
+
+    /* Create the dataset */
+    /* ------------------ */
+    dataset = H5Dcreate(fid, FIELDNAME, type, space, H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write data to the dataset */
+    /* ------------------------- */
+    status = H5Dwrite(dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, cf);
+    CHECK(status, FAIL, "H5Dwrite");
+
+    status = H5Dread(dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, cfr);
+    CHECK(status, FAIL, "H5Dread");
+
+    /* Verify correct data */
+    /* ------------------- */
+    for (i = 0; i < LENGTH; i++) {
+        for (j = 0; j < ALEN; j++) {
+            if(cf[i].a[j]!=cfr[i].a[j]) {
+                TestErrPrintf("Field a data doesn't match, cf[%d].a[%d]=%d, cfr[%d].a[%d]=%d\n",(int)i,(int)j,(int)cf[i].a[j],(int)i,(int)j,(int)cfr[i].a[j]);
+                continue;
+            }
+            if(cf[i].b[j]!=cfr[i].b[j]) {
+                TestErrPrintf("Field b data doesn't match, cf[%d].b[%d]=%f, cfr[%d].b[%d]=%f\n",(int)i,(int)j,(float)cf[i].b[j],(int)i,(int)j,(float)cfr[i].b[j]);
+                continue;
+            }
+            if(cf[i].c[j]!=cfr[i].c[j]) {
+                TestErrPrintf("Field c data doesn't match, cf[%d].b[%d]=%f, cfr[%d].b[%d]=%f\n",(int)i,(int)j,(float)cf[i].c[j],(int)i,(int)j,(float)cfr[i].c[j]);
+                continue;
+            }
+        }
+    }
+
+
+    /* Release memory resources */
+    /* ------------------------ */
+    for (i = 0; i < dtsinfo.nsubfields; i++)
+        free(dtsinfo.name[i]);
+
+
+    /* Release IDs */
+    /* ----------- */
+    status = H5Tclose(type);
+    CHECK(status, FAIL, "H5Tclose");
+
+    status = H5Sclose(space);
+    CHECK(status, FAIL, "H5Sclose");
+
+    status = H5Dclose(dataset);
+    CHECK(status, FAIL, "H5Dclose");
+
+    status = H5Fclose(fid);
+    CHECK(status, FAIL, "H5Fclose");
+
+
+/******************************/
+/* Reopen the file and update */
+/******************************/
+
+    fid = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fopen");
+
+    dataset = H5Dopen(fid, FIELDNAME );
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    type = H5Tcreate(H5T_COMPOUND, sizeof(fld_t));
+    CHECK(type, FAIL, "H5Tcreate");
+
+    array_dt = H5Tarray_create (H5T_NATIVE_FLOAT, 1, dima, NULL);
+    CHECK(array_dt, FAIL, "H5Tarray_create");
+
+    status = H5Tinsert (type, "Two", HOFFSET(fld_t, b), array_dt);
+    CHECK(status, FAIL, "H5Tinsert");
+
+    /* Initialize the data to overwrite */
+    /* -------------------------------- */
+    for (i=0; i< LENGTH; i++)
+        for (j = 0; j < ALEN; j++)
+            cf[i].b[j]=fld[i].b[j] = (float)1.313;
+
+    status = H5Dwrite (dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, fld);
+    CHECK(status, FAIL, "H5Dwrite");
+
+    /* Read just the field changed */
+    status = H5Dread (dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, fldr);
+    CHECK(status, FAIL, "H5Dread");
+
+    for (i=0; i< LENGTH; i++)
+        for (j = 0; j < ALEN; j++)
+            if(fld[i].b[j]!=fldr[i].b[j]) {
+                TestErrPrintf("Field data doesn't match, fld[%d].b[%d]=%f, fldr[%d].b[%d]=%f\n",(int)i,(int)j,(float)fld[i].b[j],(int)i,(int)j,(float)fldr[i].b[j]);
+                continue;
+            }
+
+    status = H5Tclose (type);
+    CHECK(status, FAIL, "H5Tclose");
+
+    status = H5Tclose (array_dt);
+    CHECK(status, FAIL, "H5Tclose");
+
+    type = H5Dget_type(dataset);
+    CHECK(type, FAIL, "H5Dget_type");
+
+    /* Read the entire dataset again */
+    status = H5Dread(dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, cfr);
+    CHECK(status, FAIL, "H5Dread");
+
+    /* Verify correct data */
+    /* ------------------- */
+    for (i = 0; i < LENGTH; i++) {
+        for (j = 0; j < ALEN; j++) {
+            if(cf[i].a[j]!=cfr[i].a[j]) {
+                TestErrPrintf("Field a data doesn't match, cf[%d].a[%d]=%d, cfr[%d].a[%d]=%d\n",(int)i,(int)j,(int)cf[i].a[j],(int)i,(int)j,(int)cfr[i].a[j]);
+                continue;
+            }
+            if(cf[i].b[j]!=cfr[i].b[j]) {
+                TestErrPrintf("Field b data doesn't match, cf[%d].b[%d]=%f, cfr[%d].b[%d]=%f\n",(int)i,(int)j,(float)cf[i].b[j],(int)i,(int)j,(float)cfr[i].b[j]);
+                continue;
+            }
+            if(cf[i].c[j]!=cfr[i].c[j]) {
+                TestErrPrintf("Field c data doesn't match, cf[%d].b[%d]=%f, cfr[%d].b[%d]=%f\n",(int)i,(int)j,(float)cf[i].c[j],(int)i,(int)j,(float)cfr[i].c[j]);
+                continue;
+            }
+        }
+    }
+
+    status = H5Dclose(dataset);
+    CHECK(status, FAIL, "H5Dclose");
+
+    status = H5Tclose (type);
+    CHECK(status, FAIL, "H5Tclose");
+
+    status = H5Fclose(fid);
+    CHECK(status, FAIL, "H5Fclose");
+
+/****************************************************/
+/* Reopen the file and print out all the data again */
+/****************************************************/
+
+    fid = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fopen");
+
+    dataset = H5Dopen(fid, FIELDNAME );
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    type = H5Dget_type(dataset);
+    CHECK(type, FAIL, "H5Dget_type");
+
+
+    /* Reset the data to read in */
+    /* ------------------------- */
+    memset(cfr, 0, sizeof(CmpField)*LENGTH);
+
+    status = H5Dread(dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, cfr);
+    CHECK(status, FAIL, "H5Dread");
+
+    /* Verify correct data */
+    /* ------------------- */
+    for (i = 0; i < LENGTH; i++) {
+        for (j = 0; j < ALEN; j++) {
+            if(cf[i].a[j]!=cfr[i].a[j]) {
+                TestErrPrintf("Field a data doesn't match, cf[%d].a[%d]=%d, cfr[%d].a[%d]=%d\n",(int)i,(int)j,(int)cf[i].a[j],(int)i,(int)j,(int)cfr[i].a[j]);
+                continue;
+            }
+            if(cf[i].b[j]!=cfr[i].b[j]) {
+                TestErrPrintf("Field b data doesn't match, cf[%d].b[%d]=%f, cfr[%d].b[%d]=%f\n",(int)i,(int)j,(float)cf[i].b[j],(int)i,(int)j,(float)cfr[i].b[j]);
+                continue;
+            }
+            if(cf[i].c[j]!=cfr[i].c[j]) {
+                TestErrPrintf("Field c data doesn't match, cf[%d].b[%d]=%f, cfr[%d].b[%d]=%f\n",(int)i,(int)j,(float)cf[i].c[j],(int)i,(int)j,(float)cfr[i].c[j]);
+                continue;
+            }
+        }
+    }
+
+    status = H5Dclose(dataset);
+    CHECK(status, FAIL, "H5Dclose");
+
+    status = H5Tclose (type);
+    CHECK(status, FAIL, "H5Tclose");
+
+    status = H5Fclose(fid);
+    CHECK(status, FAIL, "H5Fclose");
+} /* end test_array_bkg() */
+
+/****************************************************************
+**
+**  test_compat(): Test array datatype compatibility code.
+**      Reads file containing old version of datatype object header
+**      messages for compound datatypes and verifies reading the older
+**      version of the is working correctly.
+**
+****************************************************************/
+static void
+test_compat(void)
+{
+    typedef struct {        /* Typedef for compound datatype */
+        short i;
+        float f;
+        long l;
+    } s2_t;
+    typedef struct {        /* Typedef for compound datatype */
+        short i;
+        float f[ARRAY1_DIM1];
+        long l[ARRAY1_DIM1];
+        double d;
+    } s3_t;
+    char testfile[512]="";          /* Character buffer for corrected test file name */
+    char *srcdir = getenv("srcdir");    /* Pointer to the directory the source code is located within */
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		tid1;       /* Array Datatype ID			*/
+    hid_t		tid2;       /* Datatype ID          */
+    hsize_t		tdims1[] = {ARRAY1_DIM1};
+    int         ndims;      /* Array rank for reading */
+    hsize_t		rdims1[H5S_MAX_RANK];    /* Array dimensions for reading */
+    H5T_class_t mclass;     /* Datatype class for VL */
+    int         nmemb;      /* Number of compound members */
+    char       *mname;      /* Name of compound field */
+    size_t      off;        /* Offset of compound field */
+    hid_t       mtid;       /* Datatype ID for field */
+    int        i;          /* Index variables */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Array Datatypes Compatibility Functionality\n"));
+
+    /*
+     * Try reading a file that has been prepared that has datasets with
+     * compound datatypes which use an older version (version 1) of the
+     * datatype object header message for describing the datatype.
+     *
+     * If this test fails and the datatype object header message version has
+     *  changed, follow the instructions in gen_old_array.c for regenerating
+     *  the tarrold.h5 file.
+     */
+    /* Generate the correct name for the test file, by prepending the source path */
+    if (srcdir && ((strlen(srcdir) + strlen(TESTFILE) + 1) < sizeof(testfile))) {
+        strcpy(testfile, srcdir);
+        strcat(testfile, "/");
+    }
+    strcat(testfile, TESTFILE);
+
+    /* Open the testfile */
+    fid1 = H5Fopen(testfile, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK_I(fid1, "H5Fopen");
+
+    /* Only try to proceed if the file is around */
+    if (fid1 >= 0){
+        /* Open the first dataset (with no array fields) */
+        dataset = H5Dopen(fid1, "Dataset1");
+        CHECK_I(dataset, "H5Dopen");
+
+        /* Get the datatype */
+        tid1=H5Dget_type(dataset);
+        CHECK_I(tid1, "H5Dget_type");
+
+        /* Verify datatype class */
+        mclass=H5Tget_class(tid1);
+        VERIFY(mclass, H5T_COMPOUND, "H5Tget_class");
+
+        /* Get the number of compound datatype fields */
+        nmemb=H5Tget_nmembers(tid1);
+        VERIFY(nmemb,3,"H5Tget_nmembers");
+
+        /* Check the 1st field's name */
+        mname=H5Tget_member_name(tid1,0);
+        CHECK(mname, NULL, "H5Tget_member_name");
+        if(HDstrcmp(mname,"i")!=0)
+            TestErrPrintf("Compound field name doesn't match!, mname=%s\n",mname);
+        free(mname);
+
+        /* Check the 1st field's offset */
+        off=H5Tget_member_offset(tid1,0);
+        VERIFY(off, 0, "H5Tget_member_offset");
+
+        /* Check the 1st field's datatype */
+        mtid=H5Tget_member_type(tid1,0);
+        CHECK(mtid, FAIL, "H5Tget_member_type");
+        if((ret=H5Tequal(mtid,H5T_STD_I16LE))<=0)
+            TestErrPrintf("Compound data type is incorrect!, ret=%d\n",(int)ret);
+        ret=H5Tclose(mtid);
+        CHECK(mtid, FAIL, "H5Tclose");
+
+        /* Check the 2nd field's name */
+        mname=H5Tget_member_name(tid1,1);
+        CHECK(mname, NULL, "H5Tget_member_name");
+        if(HDstrcmp(mname,"f")!=0)
+            TestErrPrintf("Compound field name doesn't match!, mname=%s\n",mname);
+        free(mname);
+
+        /* Check the 2nd field's offset */
+        off=H5Tget_member_offset(tid1,1);
+        VERIFY(off, 4, "H5Tget_member_offset");
+
+        /* Check the 2nd field's datatype */
+        mtid=H5Tget_member_type(tid1,1);
+        CHECK(mtid, FAIL, "H5Tget_member_type");
+        if((ret=H5Tequal(mtid,H5T_IEEE_F32LE))<=0)
+            TestErrPrintf("Compound data type is incorrect!, ret=%d\n",(int)ret);
+        ret=H5Tclose(mtid);
+        CHECK(mtid, FAIL, "H5Tclose");
+
+        /* Check the 3rd field's name */
+        mname=H5Tget_member_name(tid1,2);
+        CHECK(mname, NULL, "H5Tget_member_name");
+        if(HDstrcmp(mname,"l")!=0)
+            TestErrPrintf("Compound field name doesn't match!, mname=%s\n",mname);
+        free(mname);
+
+        /* Check the 3rd field's offset */
+        off=H5Tget_member_offset(tid1,2);
+        VERIFY(off, 8, "H5Tget_member_offset");
+
+        /* Check the 3rd field's datatype */
+        mtid=H5Tget_member_type(tid1,2);
+        CHECK(mtid, FAIL, "H5Tget_member_type");
+        if((ret=H5Tequal(mtid,H5T_STD_I32LE))<=0)
+            TestErrPrintf("Compound data type is incorrect!, ret=%d\n",(int)ret);
+        ret=H5Tclose(mtid);
+        CHECK(mtid, FAIL, "H5Tclose");
+
+        /* Close the datatype */
+        ret = H5Tclose(tid1);
+        CHECK_I(ret, "H5Tclose");
+
+        /* Close the dataset */
+        ret = H5Dclose(dataset);
+        CHECK_I(ret, "H5Dclose");
+
+
+        /* Open the second dataset (with array fields) */
+        dataset = H5Dopen(fid1, "Dataset2");
+        CHECK_I(dataset, "H5Dopen");
+
+        /* Get the datatype */
+        tid1=H5Dget_type(dataset);
+        CHECK_I(tid1, "H5Dget_type");
+
+        /* Verify datatype class */
+        mclass=H5Tget_class(tid1);
+        VERIFY(mclass, H5T_COMPOUND, "H5Tget_class");
+
+        /* Get the number of compound datatype fields */
+        nmemb=H5Tget_nmembers(tid1);
+        VERIFY(nmemb,4,"H5Tget_nmembers");
+
+        /* Check the 1st field's name */
+        mname=H5Tget_member_name(tid1,0);
+        CHECK(mname, NULL, "H5Tget_member_name");
+        if(HDstrcmp(mname,"i")!=0)
+            TestErrPrintf("Compound field name doesn't match!, mname=%s\n",mname);
+        free(mname);
+
+        /* Check the 1st field's offset */
+        off=H5Tget_member_offset(tid1,0);
+        VERIFY(off, 0, "H5Tget_member_offset");
+
+        /* Check the 1st field's datatype */
+        mtid=H5Tget_member_type(tid1,0);
+        CHECK(mtid, FAIL, "H5Tget_member_type");
+        if((ret=H5Tequal(mtid,H5T_STD_I16LE))<=0)
+            TestErrPrintf("Compound data type is incorrect!, ret=%d\n",(int)ret);
+        ret=H5Tclose(mtid);
+        CHECK(mtid, FAIL, "H5Tclose");
+
+        /* Check the 2nd field's name */
+        mname=H5Tget_member_name(tid1,1);
+        CHECK(mname, NULL, "H5Tget_member_name");
+        if(HDstrcmp(mname,"f")!=0)
+            TestErrPrintf("Compound field name doesn't match!, mname=%s\n",mname);
+        free(mname);
+
+        /* Check the 2nd field's offset */
+        off=H5Tget_member_offset(tid1,1);
+        VERIFY(off, 4, "H5Tget_member_offset");
+
+        /* Check the 2nd field's datatype */
+        mtid=H5Tget_member_type(tid1,1);
+        CHECK(mtid, FAIL, "H5Tget_member_type");
+
+        /* Verify datatype class */
+        mclass=H5Tget_class(mtid);
+        VERIFY(mclass, H5T_ARRAY, "H5Tget_class");
+
+        /* Check the array rank */
+        ndims=H5Tget_array_ndims(mtid);
+        VERIFY(ndims,ARRAY1_RANK,"H5Tget_array_ndims");
+
+        /* Get the array dimensions */
+        ret=H5Tget_array_dims(mtid,rdims1,NULL);
+        CHECK(ret, FAIL, "H5Tget_array_dims");
+
+        /* Check the array dimensions */
+        for(i=0; i<ndims; i++)
+            if(rdims1[i]!=tdims1[i]) {
+                TestErrPrintf("Array dimension information doesn't match!, rdims1[%d]=%d, tdims1[%d]=%d\n",(int)i,(int)rdims1[i],(int)i,(int)tdims1[i]);
+                continue;
+            } /* end if */
+
+        /* Check the array's base datatype */
+        tid2=H5Tget_super(mtid);
+        CHECK(tid2, FAIL, "H5Tget_super");
+
+        if((ret=H5Tequal(tid2,H5T_IEEE_F32LE))<=0)
+            TestErrPrintf("Compound data type is incorrect!, ret=%d\n",(int)ret);
+        ret=H5Tclose(tid2);
+        CHECK(ret, FAIL, "H5Tclose");
+        ret=H5Tclose(mtid);
+        CHECK(ret, FAIL, "H5Tclose");
+
+        /* Check the 3rd field's name */
+        mname=H5Tget_member_name(tid1,2);
+        CHECK(mname, NULL, "H5Tget_member_name");
+        if(HDstrcmp(mname,"l")!=0)
+            TestErrPrintf("Compound field name doesn't match!, mname=%s\n",mname);
+        free(mname);
+
+        /* Check the 3rd field's offset */
+        off=H5Tget_member_offset(tid1,2);
+        VERIFY(off, 20, "H5Tget_member_offset");
+
+        /* Check the 3rd field's datatype */
+        mtid=H5Tget_member_type(tid1,2);
+        CHECK(mtid, FAIL, "H5Tget_member_type");
+
+        /* Verify datatype class */
+        mclass=H5Tget_class(mtid);
+        VERIFY(mclass, H5T_ARRAY, "H5Tget_class");
+
+        /* Check the array rank */
+        ndims=H5Tget_array_ndims(mtid);
+        VERIFY(ndims,ARRAY1_RANK,"H5Tget_array_ndims");
+
+        /* Get the array dimensions */
+        ret=H5Tget_array_dims(mtid,rdims1,NULL);
+        CHECK(ret, FAIL, "H5Tget_array_dims");
+
+        /* Check the array dimensions */
+        for(i=0; i<ndims; i++)
+            if(rdims1[i]!=tdims1[i]) {
+                TestErrPrintf("Array dimension information doesn't match!, rdims1[%d]=%d, tdims1[%d]=%d\n",(int)i,(int)rdims1[i],(int)i,(int)tdims1[i]);
+                continue;
+            } /* end if */
+
+        /* Check the array's base datatype */
+        tid2=H5Tget_super(mtid);
+        CHECK(tid2, FAIL, "H5Tget_super");
+
+        if((ret=H5Tequal(tid2,H5T_STD_I32LE))<=0)
+            TestErrPrintf("Compound data type is incorrect!, ret=%d\n",(int)ret);
+        ret=H5Tclose(tid2);
+        CHECK(ret, FAIL, "H5Tclose");
+        ret=H5Tclose(mtid);
+        CHECK(ret, FAIL, "H5Tclose");
+
+        /* Check the 4th field's name */
+        mname=H5Tget_member_name(tid1,3);
+        CHECK(mname, NULL, "H5Tget_member_name");
+        if(HDstrcmp(mname,"d")!=0)
+            TestErrPrintf("Compound field name doesn't match!, mname=%s\n",mname);
+        free(mname);
+
+        /* Check the 4th field's offset */
+        off=H5Tget_member_offset(tid1,3);
+        VERIFY(off, 36, "H5Tget_member_offset");
+
+        /* Check the 4th field's datatype */
+        mtid=H5Tget_member_type(tid1,3);
+        CHECK(mtid, FAIL, "H5Tget_member_type");
+        if((ret=H5Tequal(mtid,H5T_IEEE_F64LE))<=0)
+            TestErrPrintf("Compound data type is incorrect!, ret=%d\n",(int)ret);
+        ret=H5Tclose(mtid);
+        CHECK(mtid, FAIL, "H5Tclose");
+
+        /* Close the datatype */
+        ret = H5Tclose(tid1);
+        CHECK_I(ret, "H5Tclose");
+
+        /* Close the dataset */
+        ret = H5Dclose(dataset);
+        CHECK_I(ret, "H5Dclose");
+
+        /* Close the file */
+        ret = H5Fclose(fid1);
+        CHECK_I(ret, "H5Fclose");
+    }
+    else
+        printf("***cannot open the pre-created compound datatype test file (%s)\n",testfile);
+
+} /* end test_compat() */
+
+/****************************************************************
+**
+**  test_array(): Main array datatype testing routine.
+**
+****************************************************************/
+void
+test_array(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Array Datatypes\n"));
+
+    /* These tests use the same file... */
+    test_array_atomic_1d();     /* Test 1-D array of atomic datatypes */
+    test_array_atomic_3d();     /* Test 3-D array of atomic datatypes */
+    test_array_array_atomic();  /* Test 1-D array of 2-D arrays of atomic datatypes */
+    test_array_compound_atomic();   /* Test 1-D array of compound datatypes (with no array fields) */
+    test_array_compound_array();    /* Test 1-D array of compound datatypes (with array fields) */
+    test_array_vlen_atomic();   /* Test 1-D array of atomic VL datatypes */
+    test_array_vlen_array();    /* Test 1-D array of 1-D array VL datatypes */
+
+    test_array_bkg();           /* Read compound datatype with array fields and background fields read */
+
+    /* This test uses a custom file */
+    test_compat();              /* Test compatibility changes for compound datatype fields */
+}   /* test_array() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_array
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Quincey Koziol
+ *              June 8, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_array(void)
+{
+    remove(FILENAME);
+}
+

Added: packages/hdf5/branches/upstream/current/test/tarrold.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/tarrold.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/tattr.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/tattr.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/tattr.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1612 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/***********************************************************
+*
+* Test program:	 tattr
+*
+* Test the attribute functionality
+*
+*************************************************************/
+
+#include "testhdf5.h"
+#include "h5test.h"
+#include "hdf5.h"
+
+#define FILENAME   "tattr.h5"
+#define ATTR_NAME_LEN   16
+#define ATTR_MAX_DIMS   7
+#define ATTR_TMP_NAME   "temp_name"
+
+/* 3-D dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	3
+#define SPACE1_DIM1	3
+#define SPACE1_DIM2	15
+#define SPACE1_DIM3	13
+
+/* Dataset Information */
+#define DSET1_NAME "Dataset1"
+#define DSET2_NAME "Dataset2"
+
+/* Group Information */
+#define GROUP1_NAME "/Group1"
+
+/* Named Datatype Information */
+#define TYPE1_NAME "/Type"
+
+/* Attribute Rank & Dimensions */
+#define ATTR1_NAME  "Attr1"
+#define ATTR1_RANK	1
+#define ATTR1_DIM1	3
+int attr_data1[ATTR1_DIM1]={512,-234,98123}; /* Test data for 1st attribute */
+
+/* rank & dimensions for another attribute */
+#define ATTR1A_NAME  "Attr1_a"
+int attr_data1a[ATTR1_DIM1]={256,11945,-22107};
+
+#define ATTR2_NAME  "Attr2"
+#define ATTR2_RANK	2
+#define ATTR2_DIM1	2
+#define ATTR2_DIM2	2
+int attr_data2[ATTR2_DIM1][ATTR2_DIM2]={{7614,-416},{197814,-3}}; /* Test data for 2nd attribute */
+
+#define ATTR3_NAME  "Attr3"
+#define ATTR3_RANK	3
+#define ATTR3_DIM1	2
+#define ATTR3_DIM2	2
+#define ATTR3_DIM3	2
+double attr_data3[ATTR3_DIM1][ATTR3_DIM2][ATTR3_DIM3]={{{2.3,-26.1},{0.123,-10.0}},{{981724.2,-0.91827},{2.0,23.0}}}; /* Test data for 3rd attribute */
+
+#define ATTR4_NAME  "Attr4"
+#define ATTR4_RANK	2
+#define ATTR4_DIM1	2
+#define ATTR4_DIM2	2
+#define ATTR4_FIELDNAME1	"i"
+#define ATTR4_FIELDNAME2	"d"
+#define ATTR4_FIELDNAME3	"c"
+size_t attr4_field1_off=0;
+size_t attr4_field2_off=0;
+size_t attr4_field3_off=0;
+struct attr4_struct {
+    int i;
+    double d;
+    char c;
+ } attr_data4[ATTR4_DIM1][ATTR4_DIM2]={{{3,-26.1,'d'},{-100000, 0.123,'3'}},
+    {{-23,981724.2,'Q'},{0,2.0,'\n'}}}; /* Test data for 4th attribute */
+
+#define ATTR5_NAME  "Attr5"
+#define ATTR5_RANK	0
+float attr_data5=(float)-5.123;        /* Test data for 5th attribute */
+
+herr_t attr_op1(hid_t loc_id, const char *name, void *op_data);
+
+/****************************************************************
+**
+**  test_attr_basic_write(): Test basic H5A (attribute) code.
+**      Tests integer attributes on both datasets and groups
+**
+****************************************************************/
+static void
+test_attr_basic_write(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		group;	    /* Group ID			    */
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hid_t		attr, attr2;	    /* Attribute ID		*/
+    hsize_t             attr_size;  /* storage size for attribute       */
+    ssize_t             attr_name_size; /* size of attribute name       */
+    char                *attr_name=NULL;    /* name of attribute        */
+    hsize_t		dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    hsize_t		dims2[] = {ATTR1_DIM1};
+    hsize_t		dims3[] = {ATTR2_DIM1,ATTR2_DIM2};
+    int       read_data1[ATTR1_DIM1]={0}; /* Buffer for reading 1st attribute */
+    int         i;
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Scalar Attribute Writing Functions\n"));
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,DSET1_NAME,H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Create dataspace for attribute */
+    sid2 = H5Screate_simple(ATTR1_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Try to create an attribute on the file (should fail) */
+    ret=H5Acreate(fid1,ATTR1_NAME,H5T_NATIVE_INT,sid2,H5P_DEFAULT);
+    VERIFY(ret, FAIL, "H5Acreate");
+
+    /* Create an attribute for the dataset */
+    attr=H5Acreate(dataset,ATTR1_NAME,H5T_NATIVE_INT,sid2,H5P_DEFAULT);
+    CHECK(attr, FAIL, "H5Acreate");
+
+    /* Try to create the same attribute again (should fail) */
+    ret=H5Acreate(dataset,ATTR1_NAME,H5T_NATIVE_INT,sid2,H5P_DEFAULT);
+    VERIFY(ret, FAIL, "H5Acreate");
+
+    /* Write attribute information */
+    ret=H5Awrite(attr,H5T_NATIVE_INT,attr_data1);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    /* Create an another attribute for the dataset */
+    attr2=H5Acreate(dataset,ATTR1A_NAME,H5T_NATIVE_INT,sid2,H5P_DEFAULT);
+    CHECK(attr, FAIL, "H5Acreate");
+
+    /* Write attribute information */
+    ret=H5Awrite(attr2,H5T_NATIVE_INT,attr_data1a);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    /* Check storage size for attribute */
+    attr_size=H5Aget_storage_size(attr);
+    VERIFY(attr_size, (ATTR1_DIM1*sizeof(int)), "H5A_get_storage_size");
+
+    /* Read attribute information immediately, without closing attribute */
+    ret=H5Aread(attr,H5T_NATIVE_INT,read_data1);
+    CHECK(ret, FAIL, "H5Aread");
+
+    /* Verify values read in */
+    for(i=0; i<ATTR1_DIM1; i++)
+        if(attr_data1[i]!=read_data1[i])
+            TestErrPrintf("%d: attribute data different: attr_data1[%d]=%d, read_data1[%d]=%d\n",__LINE__,i,attr_data1[i],i,read_data1[i]);
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Close attribute */
+    ret=H5Aclose(attr2);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* change attribute name */
+    ret=H5Arename(dataset, ATTR1_NAME, ATTR_TMP_NAME);
+    CHECK(ret, FAIL, "H5Arename");
+
+    /* Open attribute again */
+    attr=H5Aopen_name(dataset, ATTR_TMP_NAME);
+    CHECK(attr, FAIL, "H5Aopen_name");
+
+    /* Verify new attribute name */
+    attr_name_size = H5Aget_name(attr, 0, NULL);
+    CHECK(attr_name_size, FAIL, "H5Aget_name");
+
+    if(attr_name_size>0)
+        attr_name = (char*)HDcalloc((size_t)(attr_name_size+1), sizeof(char));
+
+    ret=(herr_t)H5Aget_name(attr, (size_t)(attr_name_size+1), attr_name);
+    CHECK(ret, FAIL, "H5Aget_name");
+    ret=HDstrcmp(attr_name, ATTR_TMP_NAME);
+    VERIFY(ret, 0, "HDstrcmp");
+
+    if(attr_name)
+        HDfree(attr_name);
+
+    /* Read attribute information immediately, without closing attribute */
+    ret=H5Aread(attr,H5T_NATIVE_INT,read_data1);
+    CHECK(ret, FAIL, "H5Aread");
+
+    /* Verify values read in */
+    for(i=0; i<ATTR1_DIM1; i++)
+        if(attr_data1[i]!=read_data1[i])
+            TestErrPrintf("%d: attribute data different: attr_data1[%d]=%d, read_data1[%d]=%d\n",__LINE__,i,attr_data1[i],i,read_data1[i]);
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+
+    /* Open the second attribute again */
+    attr2=H5Aopen_name(dataset, ATTR1A_NAME);
+    CHECK(attr, FAIL, "H5Aopen_name");
+
+    /* Verify new attribute name */
+    attr_name_size = H5Aget_name(attr2, 0, NULL);
+    CHECK(attr_name_size, FAIL, "H5Aget_name");
+
+    if(attr_name_size>0)
+        attr_name = (char*)HDcalloc((size_t)(attr_name_size+1), sizeof(char));
+
+    ret=(herr_t)H5Aget_name(attr2, (size_t)(attr_name_size+1), attr_name);
+    CHECK(ret, FAIL, "H5Aget_name");
+    ret=HDstrcmp(attr_name, ATTR1A_NAME);
+    VERIFY(ret, 0, "HDstrcmp");
+
+    if(attr_name)
+        HDfree(attr_name);
+
+    /* Read attribute information immediately, without closing attribute */
+    ret=H5Aread(attr2,H5T_NATIVE_INT,read_data1);
+    CHECK(ret, FAIL, "H5Aread");
+
+    /* Verify values read in */
+    for(i=0; i<ATTR1_DIM1; i++)
+        if(attr_data1a[i]!=read_data1[i])
+            TestErrPrintf("%d: attribute data different: attr_data1[%d]=%d, read_data1[%d]=%d\n",__LINE__,i,attr_data1[i],i,read_data1[i]);
+
+    /* Close attribute */
+    ret=H5Aclose(attr2);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* change first attribute back to the original name */
+    ret=H5Arename(dataset, ATTR_TMP_NAME, ATTR1_NAME);
+    CHECK(ret, FAIL, "H5Arename");
+
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Create group */
+    group = H5Gcreate(fid1, GROUP1_NAME, 0);
+    CHECK(group, FAIL, "H5Gcreate");
+
+    /* Create dataspace for attribute */
+    sid2 = H5Screate_simple(ATTR2_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Create an attribute for the group */
+    attr=H5Acreate(group,ATTR2_NAME,H5T_NATIVE_INT,sid2,H5P_DEFAULT);
+    CHECK(attr, FAIL, "H5Acreate");
+
+    /* Check storage size for attribute */
+    attr_size=H5Aget_storage_size(attr);
+    VERIFY(attr_size, (ATTR2_DIM1*ATTR2_DIM2*sizeof(int)), "H5Aget_storage_size");
+
+    /* Try to create the same attribute again (should fail) */
+    ret=H5Acreate(group,ATTR2_NAME,H5T_NATIVE_INT,sid2,H5P_DEFAULT);
+    VERIFY(ret, FAIL, "H5Acreate");
+
+    /* Write attribute information */
+    ret=H5Awrite(attr,H5T_NATIVE_INT,attr_data2);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    /* Check storage size for attribute */
+    attr_size=H5Aget_storage_size(attr);
+    VERIFY(attr_size, (ATTR2_DIM1*ATTR2_DIM2*sizeof(int)), "H5A_get_storage_size");
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Close Attribute dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Group */
+    ret = H5Gclose(group);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}   /* test_attr_basic_write() */
+
+/****************************************************************
+**
+**  test_attr_basic_read(): Test basic H5A (attribute) code.
+**
+****************************************************************/
+static void
+test_attr_basic_read(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		group;	    /* Group ID			    */
+    hid_t		attr;	    /* Attribute ID			*/
+    int       read_data1[ATTR1_DIM1]={0}; /* Buffer for reading 1st attribute */
+    int       read_data2[ATTR2_DIM1][ATTR2_DIM2]={{0}}; /* Buffer for reading 2nd attribute */
+    int         i,j;
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Attribute Functions\n"));
+
+    /* Create file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,DSET1_NAME);
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Verify the correct number of attributes */
+    ret=H5Aget_num_attrs(dataset);
+    VERIFY(ret, 2, "H5Aget_num_attrs");
+
+    /* Open an attribute for the dataset */
+    attr=H5Aopen_name(dataset,ATTR1_NAME);
+    CHECK(attr, FAIL, "H5Aopen_name");
+
+    /* Read attribute information */
+    ret=H5Aread(attr,H5T_NATIVE_INT,read_data1);
+    CHECK(ret, FAIL, "H5Aread");
+
+    /* Verify values read in */
+    for(i=0; i<ATTR1_DIM1; i++)
+        if(attr_data1[i]!=read_data1[i])
+            TestErrPrintf("%d: attribute data different: attr_data1[%d]=%d, read_data1[%d]=%d\n",__LINE__,i,attr_data1[i],i,read_data1[i]);
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Open the group */
+    group=H5Gopen(fid1,GROUP1_NAME);
+
+    /* Verify the correct number of attributes */
+    ret=H5Aget_num_attrs(group);
+    VERIFY(ret, 1, "H5Aget_num_attrs");
+
+    /* Open an attribute for the dataset */
+    attr=H5Aopen_name(group,ATTR2_NAME);
+    CHECK(attr, FAIL, "H5Aopen_name");
+
+    /* Read attribute information */
+    ret=H5Aread(attr,H5T_NATIVE_INT,read_data2);
+    CHECK(ret, FAIL, "H5Aread");
+
+    /* Verify values read in */
+    for(i=0; i<ATTR2_DIM1; i++)
+        for(j=0; j<ATTR2_DIM2; j++)
+            if(attr_data2[i][j]!=read_data2[i][j])
+                TestErrPrintf("%d: attribute data different: attr_data2[%d][%d]=%d, read_data2[%d][%d]=%d\n",__LINE__, i,j,attr_data2[i][j],i,j,read_data1[i]);
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Close group */
+    ret = H5Gclose(group);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}   /* test_attr_basic_read() */
+
+/****************************************************************
+**
+**  test_attr_flush(): Test H5A (attribute) code for performing
+**                      I/O when H5Fflush is used.
+**
+****************************************************************/
+static void
+test_attr_flush(void)
+{
+    hid_t fil,          /* File ID */
+        att,            /* Attribute ID */
+        spc,            /* Dataspace ID */
+        set;            /* Dataset ID */
+    double wdata=3.14159;       /* Data to write */
+    double rdata;       /* Data read in */
+    herr_t ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Attribute Flushing\n"));
+
+    fil = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fil, FAIL, "H5Fcreate");
+
+    spc = H5Screate(H5S_SCALAR);
+    CHECK(spc, FAIL, "H5Screate");
+
+    set = H5Dcreate(fil, DSET1_NAME, H5T_NATIVE_DOUBLE, spc, H5P_DEFAULT);
+    CHECK(set, FAIL, "H5Dcreate");
+
+    att = H5Acreate(set, ATTR1_NAME, H5T_NATIVE_DOUBLE, spc, H5P_DEFAULT);
+    CHECK(att, FAIL, "H5Acreate");
+
+    ret=H5Aread(att, H5T_NATIVE_DOUBLE, &rdata);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    if(rdata!=0.0)
+        TestErrPrintf("attribute value wrong: rdata=%f, should be %f\n",rdata,0.0);
+
+    ret=H5Fflush(fil, H5F_SCOPE_GLOBAL);
+    CHECK(ret, FAIL, "H5Fflush");
+
+    ret=H5Aread(att, H5T_NATIVE_DOUBLE, &rdata);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    if(rdata!=0.0)
+        TestErrPrintf("attribute value wrong: rdata=%f, should be %f\n",rdata,0.0);
+
+    ret=H5Awrite(att, H5T_NATIVE_DOUBLE, &wdata);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    ret=H5Aread(att, H5T_NATIVE_DOUBLE, &rdata);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    if(rdata!=wdata)
+        TestErrPrintf("attribute value wrong: rdata=%f, should be %f\n",rdata,wdata);
+
+    ret=H5Sclose(spc);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret=H5Aclose(att);
+    CHECK(ret, FAIL, "H5Aclose");
+    ret=H5Dclose(set);
+    CHECK(ret, FAIL, "H5Dclose");
+    ret=H5Fclose(fil);
+    CHECK(ret, FAIL, "H5Fclose");
+}   /* test_attr_basic_flush() */
+
+/****************************************************************
+**
+**  test_attr_compound_write(): Test H5A (attribute) code.
+**      Tests compound datatype attributes
+**
+****************************************************************/
+static void
+test_attr_compound_write(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t       tid1;       /* Attribute datatype ID */
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hid_t		attr;	    /* Attribute ID			*/
+    hsize_t		dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    hsize_t		dims2[] = {ATTR4_DIM1,ATTR4_DIM2};
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Multiple Attribute Functions\n"));
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,DSET1_NAME,H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Close dataset's dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create the attribute datatype.  */
+    tid1 = H5Tcreate (H5T_COMPOUND, sizeof(struct attr4_struct));
+    CHECK(tid1, FAIL, "H5Tcreate");
+    attr4_field1_off=HOFFSET(struct attr4_struct, i);
+    ret = H5Tinsert(tid1, ATTR4_FIELDNAME1, attr4_field1_off, H5T_NATIVE_INT);
+    CHECK(ret, FAIL, "H5Tinsert");
+    attr4_field2_off=HOFFSET(struct attr4_struct, d);
+    ret = H5Tinsert(tid1, ATTR4_FIELDNAME2, attr4_field2_off, H5T_NATIVE_DOUBLE);
+    CHECK(ret, FAIL, "H5Tinsert");
+    attr4_field3_off=HOFFSET(struct attr4_struct, c);
+    ret = H5Tinsert(tid1, ATTR4_FIELDNAME3, attr4_field3_off,
+		    H5T_NATIVE_SCHAR);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    /* Create dataspace for 1st attribute */
+    sid2 = H5Screate_simple(ATTR4_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Create complex attribute for the dataset */
+    attr=H5Acreate(dataset,ATTR4_NAME,tid1,sid2,H5P_DEFAULT);
+    CHECK(attr, FAIL, "H5Acreate");
+
+    /* Try to create the same attribute again (should fail) */
+    ret=H5Acreate(dataset,ATTR4_NAME,tid1,sid2,H5P_DEFAULT);
+    VERIFY(ret, FAIL, "H5Acreate");
+
+    /* Write complex attribute data */
+    ret=H5Awrite(attr,tid1,attr_data4);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Close attribute's dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close attribute's datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}   /* test_attr_compound_write() */
+
+/****************************************************************
+**
+**  test_attr_compound_read(): Test basic H5A (attribute) code.
+**
+****************************************************************/
+static void
+test_attr_compound_read(void)
+{
+    hid_t   fid1;		/* HDF5 File IDs		*/
+    hid_t   dataset;	/* Dataset ID			*/
+    hid_t   space;      /* Attribute dataspace  */
+    hid_t   type;       /* Attribute datatype   */
+    hid_t   attr;	    /* Attribute ID			*/
+    char    attr_name[ATTR_NAME_LEN]; /* Buffer for attribute names */
+    int     rank;       /* Attribute rank */
+    hsize_t dims[ATTR_MAX_DIMS];    /* Attribute dimensions */
+    H5T_class_t t_class;  /* Attribute datatype class */
+    H5T_order_t order;  /* Attribute datatype order */
+    size_t      size;   /* Attribute datatype size as stored in file */
+    int     fields;     /* # of Attribute datatype fields */
+    char *fieldname;    /* Name of a field */
+    size_t      offset; /* Attribute datatype field offset */
+    hid_t   field;      /* Attribute field datatype */
+    struct attr4_struct read_data4[ATTR4_DIM1][ATTR4_DIM2]; /* Buffer for reading 4th attribute */
+    int     i,j;
+    size_t  name_len;   /* Length of attribute name */
+    herr_t  ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Attribute Functions\n"));
+
+    /* Open file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,DSET1_NAME);
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Verify the correct number of attributes */
+    ret=H5Aget_num_attrs(dataset);
+    VERIFY(ret, 1, "H5Aget_num_attrs");
+
+    /* Open 1st attribute for the dataset */
+    attr=H5Aopen_idx(dataset,0);
+    CHECK(attr, FAIL, "H5Aopen_idx");
+
+    /* Verify Dataspace */
+    space=H5Aget_space(attr);
+    CHECK(space, FAIL, "H5Aget_space");
+    rank=H5Sget_simple_extent_ndims(space);
+    VERIFY(rank, ATTR4_RANK, "H5Sget_simple_extent_ndims");
+    ret=H5Sget_simple_extent_dims(space,dims, NULL);
+    CHECK(ret, FAIL, "H5Sget_simple_extent_dims");
+    if(dims[0]!=ATTR4_DIM1)
+        TestErrPrintf("attribute dimensions different: dims[0]=%d, should be %d\n",(int)dims[0],ATTR4_DIM1);
+    if(dims[1]!=ATTR4_DIM2)
+        TestErrPrintf("attribute dimensions different: dims[1]=%d, should be %d\n",(int)dims[1],ATTR4_DIM2);
+    H5Sclose(space);
+
+    /* Verify Datatype */
+    type=H5Aget_type(attr);
+    CHECK(type, FAIL, "H5Aget_type");
+    t_class=H5Tget_class(type);
+    VERIFY(t_class, H5T_COMPOUND, "H5Tget_class");
+    fields=H5Tget_nmembers(type);
+    VERIFY(fields, 3, "H5Tget_nmembers");
+    for(i=0; i<fields; i++) {
+        fieldname=H5Tget_member_name(type,(unsigned)i);
+        if(!(HDstrcmp(fieldname,ATTR4_FIELDNAME1) ||
+                HDstrcmp(fieldname,ATTR4_FIELDNAME2) ||
+                HDstrcmp(fieldname,ATTR4_FIELDNAME3)))
+            TestErrPrintf("invalid field name for field #%d: %s\n",i,fieldname);
+        free(fieldname);
+      } /* end for */
+    offset=H5Tget_member_offset(type,0);
+    VERIFY(offset, attr4_field1_off, "H5Tget_member_offset");
+    offset=H5Tget_member_offset(type,1);
+    VERIFY(offset, attr4_field2_off, "H5Tget_member_offset");
+    offset=H5Tget_member_offset(type,2);
+    VERIFY(offset, attr4_field3_off, "H5Tget_member_offset");
+
+    /* Verify each field's type, class & size */
+    field=H5Tget_member_type(type,0);
+    CHECK(field, FAIL, "H5Tget_member_type");
+    t_class=H5Tget_class(field);
+    VERIFY(t_class, H5T_INTEGER, "H5Tget_class");
+    order=H5Tget_order(field);
+    VERIFY(order, H5Tget_order(H5T_NATIVE_INT), "H5Tget_order");
+    size=H5Tget_size(field);
+    VERIFY(size, H5Tget_size(H5T_NATIVE_INT), "H5Tget_size");
+    H5Tclose(field);
+    field=H5Tget_member_type(type,1);
+    CHECK(field, FAIL, "H5Tget_member_type");
+    t_class=H5Tget_class(field);
+    VERIFY(t_class, H5T_FLOAT, "H5Tget_class");
+    order=H5Tget_order(field);
+    VERIFY(order, H5Tget_order(H5T_NATIVE_DOUBLE), "H5Tget_order");
+    size=H5Tget_size(field);
+    VERIFY(size, H5Tget_size(H5T_NATIVE_DOUBLE), "H5Tget_size");
+    H5Tclose(field);
+    field=H5Tget_member_type(type,2);
+    CHECK(field, FAIL, "H5Tget_member_type");
+    t_class=H5Tget_class(field);
+    VERIFY(t_class, H5T_INTEGER, "H5Tget_class");
+    order=H5Tget_order(field);
+    VERIFY(order, H5Tget_order(H5T_NATIVE_SCHAR), "H5Tget_order");
+    size=H5Tget_size(field);
+    VERIFY(size, H5Tget_size(H5T_NATIVE_SCHAR), "H5Tget_size");
+    H5Tclose(field);
+
+    /* Read attribute information */
+    ret=H5Aread(attr,type,read_data4);
+    CHECK(ret, FAIL, "H5Aread");
+
+    /* Verify values read in */
+    for(i=0; i<ATTR4_DIM1; i++)
+        for(j=0; j<ATTR4_DIM2; j++)
+            if(HDmemcmp(&attr_data4[i][j],&read_data4[i][j],sizeof(struct attr4_struct))) {
+                printf("%d: attribute data different: attr_data4[%d][%d].i=%d, read_data4[%d][%d].i=%d\n",__LINE__,i,j,attr_data4[i][j].i,i,j,read_data4[i][j].i);
+                printf("%d: attribute data different: attr_data4[%d][%d].d=%f, read_data4[%d][%d].d=%f\n",__LINE__,i,j,attr_data4[i][j].d,i,j,read_data4[i][j].d);
+                TestErrPrintf("%d: attribute data different: attr_data4[%d][%d].c=%c, read_data4[%d][%d].c=%c\n",__LINE__,i,j,attr_data4[i][j].c,i,j,read_data4[i][j].c);
+             } /* end if */
+
+    /* Verify Name */
+    name_len=H5Aget_name(attr,ATTR_NAME_LEN, attr_name);
+    VERIFY(name_len, HDstrlen(ATTR4_NAME), "H5Aget_name");
+    if(HDstrcmp(attr_name,ATTR4_NAME))
+        TestErrPrintf("attribute name different: attr_name=%s, should be %s\n",attr_name,ATTR4_NAME);
+
+    /* Close attribute datatype */
+    ret=H5Tclose(type);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Close dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}   /* test_attr_compound_read() */
+
+/****************************************************************
+**
+**  test_attr_scalar_write(): Test scalar H5A (attribute) writing code.
+**
+****************************************************************/
+static void
+test_attr_scalar_write(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hid_t		attr;	    /* Attribute ID			*/
+    hsize_t		dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Attribute Functions\n"));
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,DSET1_NAME,H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Create dataspace for attribute */
+    sid2 = H5Screate_simple(ATTR5_RANK, NULL, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Create an attribute for the dataset */
+    attr=H5Acreate(dataset,ATTR5_NAME,H5T_NATIVE_FLOAT,sid2,H5P_DEFAULT);
+    CHECK(attr, FAIL, "H5Acreate");
+
+    /* Try to create the same attribute again (should fail) */
+    ret=H5Acreate(dataset,ATTR5_NAME,H5T_NATIVE_FLOAT,sid2,H5P_DEFAULT);
+    VERIFY(ret, FAIL, "H5Acreate");
+
+    /* Write attribute information */
+    ret=H5Awrite(attr,H5T_NATIVE_FLOAT,&attr_data5);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}   /* test_attr_scalar_write() */
+
+/****************************************************************
+**
+**  test_attr_scalar_read(): Test scalar H5A (attribute) reading code.
+**
+****************************************************************/
+static void
+test_attr_scalar_read(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid;	        /* Dataspace ID			*/
+    hid_t		attr;	        /* Attribute ID			*/
+    H5S_class_t         stype;          /* Dataspace class              */
+    float       rdata=0.0;  /* Buffer for reading 1st attribute */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Scalar Attribute Reading Functions\n"));
+
+    /* Create file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,DSET1_NAME);
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Verify the correct number of attributes */
+    ret=H5Aget_num_attrs(dataset);
+    VERIFY(ret, 1, "H5Aget_num_attrs");
+
+    /* Open an attribute for the dataset */
+    attr=H5Aopen_name(dataset,ATTR5_NAME);
+    CHECK(attr, FAIL, "H5Aopen_name");
+
+    /* Read attribute information */
+    ret=H5Aread(attr,H5T_NATIVE_FLOAT,&rdata);
+    CHECK(ret, FAIL, "H5Aread");
+    VERIFY(rdata, attr_data5, "H5Aread");
+
+    /* Get the attribute's dataspace */
+    sid = H5Aget_space(attr);
+    CHECK(sid, FAIL, "H5Aget_space");
+
+    /* Make certain the dataspace is scalar */
+    stype = H5Sget_simple_extent_type (sid);
+    VERIFY(stype, H5S_SCALAR, "H5Sget_simple_extent_type");
+
+    /* Close dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}   /* test_attr_scalar_read() */
+
+/****************************************************************
+**
+**  test_attr_mult_write(): Test basic H5A (attribute) code.
+**      Tests integer attributes on both datasets and groups
+**
+****************************************************************/
+static void
+test_attr_mult_write(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hid_t		attr;	    /* Attribute ID			*/
+    hsize_t		dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    hsize_t		dims2[] = {ATTR1_DIM1};
+    hsize_t		dims3[] = {ATTR2_DIM1,ATTR2_DIM2};
+    hsize_t		dims4[] = {ATTR3_DIM1,ATTR3_DIM2,ATTR3_DIM3};
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Multiple Attribute Functions\n"));
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,DSET1_NAME,H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Close dataset's dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for 1st attribute */
+    sid2 = H5Screate_simple(ATTR1_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Create 1st attribute for the dataset */
+    attr=H5Acreate(dataset,ATTR1_NAME,H5T_NATIVE_INT,sid2,H5P_DEFAULT);
+    CHECK(attr, FAIL, "H5Acreate");
+
+    /* Try to create the same attribute again (should fail) */
+    ret=H5Acreate(dataset,ATTR1_NAME,H5T_NATIVE_INT,sid2,H5P_DEFAULT);
+    VERIFY(ret, FAIL, "H5Acreate");
+
+    /* Write 1st attribute data */
+    ret=H5Awrite(attr,H5T_NATIVE_INT,attr_data1);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    /* Close 1st attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Close attribute's dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for 2nd attribute */
+    sid2 = H5Screate_simple(ATTR2_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Create 2nd attribute for the dataset */
+    attr=H5Acreate(dataset,ATTR2_NAME,H5T_NATIVE_INT,sid2,H5P_DEFAULT);
+    CHECK(attr, FAIL, "H5Acreate");
+
+    /* Try to create the same attribute again (should fail) */
+    ret=H5Acreate(dataset,ATTR2_NAME,H5T_NATIVE_INT,sid2,H5P_DEFAULT);
+    VERIFY(ret, FAIL, "H5Acreate");
+
+    /* Write 2nd attribute information */
+    ret=H5Awrite(attr,H5T_NATIVE_INT,attr_data2);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    /* Close 2nd attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Close 2nd attribute's dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for 3rd attribute */
+    sid2 = H5Screate_simple(ATTR3_RANK, dims4, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Create 3rd attribute for the dataset */
+    attr=H5Acreate(dataset,ATTR3_NAME,H5T_NATIVE_DOUBLE,sid2,H5P_DEFAULT);
+    CHECK(attr, FAIL, "H5Acreate");
+
+    /* Try to create the same attribute again (should fail) */
+    ret=H5Acreate(dataset,ATTR3_NAME,H5T_NATIVE_DOUBLE,sid2,H5P_DEFAULT);
+    VERIFY(ret, FAIL, "H5Acreate");
+
+    /* Write 3rd attribute information */
+    ret=H5Awrite(attr,H5T_NATIVE_DOUBLE,attr_data3);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    /* Close 3rd attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Close 3rd attribute's dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}   /* test_attr_mult_write() */
+
+/****************************************************************
+**
+**  test_attr_mult_read(): Test basic H5A (attribute) code.
+**
+****************************************************************/
+static void
+test_attr_mult_read(void)
+{
+    hid_t   fid1;		/* HDF5 File IDs		*/
+    hid_t   dataset;	/* Dataset ID			*/
+    hid_t   space;      /* Attribute dataspace  */
+    hid_t   type;       /* Attribute datatype   */
+    hid_t   attr;	    /* Attribute ID			*/
+    char    attr_name[ATTR_NAME_LEN]; /* Buffer for attribute names */
+    char    temp_name[ATTR_NAME_LEN]; /* Buffer for mangling attribute names */
+    int     rank;       /* Attribute rank */
+    hsize_t dims[ATTR_MAX_DIMS];    /* Attribute dimensions */
+    H5T_class_t t_class;              /* Attribute datatype class */
+    H5T_order_t order;              /* Attribute datatype order */
+    size_t      size;               /* Attribute datatype size as stored in file */
+    int   read_data1[ATTR1_DIM1]={0}; /* Buffer for reading 1st attribute */
+    int   read_data2[ATTR2_DIM1][ATTR2_DIM2]={{0}}; /* Buffer for reading 2nd attribute */
+    double  read_data3[ATTR3_DIM1][ATTR3_DIM2][ATTR3_DIM3]={{{0}}}; /* Buffer for reading 3rd attribute */
+    int     i,j,k;
+    size_t  name_len;   /* Length of attribute name */
+    herr_t  ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Attribute Functions\n"));
+
+    /* Open file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,DSET1_NAME);
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Verify the correct number of attributes */
+    ret=H5Aget_num_attrs(dataset);
+    VERIFY(ret, 3, "H5Aget_num_attrs");
+
+    /* Open 1st attribute for the dataset */
+    attr=H5Aopen_idx(dataset,0);
+    CHECK(attr, FAIL, "H5Aopen_idx");
+
+    /* Verify Dataspace */
+    space=H5Aget_space(attr);
+    CHECK(space, FAIL, "H5Aget_space");
+    rank=H5Sget_simple_extent_ndims(space);
+    VERIFY(rank, ATTR1_RANK, "H5Sget_simple_extent_ndims");
+    ret=H5Sget_simple_extent_dims(space,dims, NULL);
+    CHECK(ret, FAIL, "H5Sget_simple_extent_dims");
+    if(dims[0]!=ATTR1_DIM1)
+        TestErrPrintf("attribute dimensions different: dims[0]=%d, should be %d\n",(int)dims[0],ATTR1_DIM1);
+    H5Sclose(space);
+
+    /* Verify Datatype */
+    type=H5Aget_type(attr);
+    CHECK(type, FAIL, "H5Aget_type");
+    t_class=H5Tget_class(type);
+    VERIFY(t_class, H5T_INTEGER, "H5Tget_class");
+    order=H5Tget_order(type);
+    VERIFY(order, H5Tget_order(H5T_NATIVE_INT), "H5Tget_order");
+    size=H5Tget_size(type);
+    VERIFY(size, H5Tget_size(H5T_NATIVE_INT), "H5Tget_size");
+    H5Tclose(type);
+
+    /* Read attribute information */
+    ret=H5Aread(attr,H5T_NATIVE_INT,read_data1);
+    CHECK(ret, FAIL, "H5Aread");
+
+    /* Verify values read in */
+    for(i=0; i<ATTR1_DIM1; i++)
+        if(attr_data1[i]!=read_data1[i])
+            TestErrPrintf("%d: attribute data different: attr_data1[%d]=%d, read_data1[%d]=%d\n",__LINE__,i,attr_data1[i],i,read_data1[i]);
+
+    /* Verify Name */
+    name_len=H5Aget_name(attr, ATTR_NAME_LEN, attr_name);
+    VERIFY(name_len, HDstrlen(ATTR1_NAME), "H5Aget_name");
+    if(HDstrcmp(attr_name,ATTR1_NAME))
+        TestErrPrintf("attribute name different: attr_name=%s, should be %s\n",attr_name,ATTR1_NAME);
+
+    /* Verify Name with too small of a buffer */
+    name_len=H5Aget_name(attr,HDstrlen(ATTR1_NAME), attr_name);
+    VERIFY(name_len, HDstrlen(ATTR1_NAME), "H5Aget_name");
+    HDstrcpy(temp_name,ATTR1_NAME);     /* make a copy of the name */
+    temp_name[HDstrlen(ATTR1_NAME)-1]='\0';   /* truncate it to match the one retrieved */
+    if(HDstrcmp(attr_name,temp_name))
+        TestErrPrintf("attribute name different: attr_name=%s, should be %s\n",attr_name,temp_name);
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Open 2nd attribute for the dataset */
+    attr=H5Aopen_idx(dataset,1);
+    CHECK(attr, FAIL, "H5Aopen_idx");
+
+    /* Verify Dataspace */
+    space=H5Aget_space(attr);
+    CHECK(space, FAIL, "H5Aget_space");
+    rank=H5Sget_simple_extent_ndims(space);
+    VERIFY(rank, ATTR2_RANK, "H5Sget_simple_extent_ndims");
+    ret=H5Sget_simple_extent_dims(space,dims, NULL);
+    CHECK(ret, FAIL, "H5Sget_simple_extent_dims");
+    if(dims[0]!=ATTR2_DIM1)
+        TestErrPrintf("attribute dimensions different: dims[0]=%d, should be %d\n",(int)dims[0],ATTR2_DIM1);
+    if(dims[1]!=ATTR2_DIM2)
+        TestErrPrintf("attribute dimensions different: dims[1]=%d, should be %d\n",(int)dims[1],ATTR2_DIM2);
+    H5Sclose(space);
+
+    /* Verify Datatype */
+    type=H5Aget_type(attr);
+    CHECK(type, FAIL, "H5Aget_type");
+    t_class=H5Tget_class(type);
+    VERIFY(t_class, H5T_INTEGER, "H5Tget_class");
+    order=H5Tget_order(type);
+    VERIFY(order, H5Tget_order(H5T_NATIVE_INT), "H5Tget_order");
+    size=H5Tget_size(type);
+    VERIFY(size, H5Tget_size(H5T_NATIVE_INT), "H5Tget_size");
+    H5Tclose(type);
+
+    /* Read attribute information */
+    ret=H5Aread(attr,H5T_NATIVE_INT,read_data2);
+    CHECK(ret, FAIL, "H5Aread");
+
+    /* Verify values read in */
+    for(i=0; i<ATTR2_DIM1; i++)
+        for(j=0; j<ATTR2_DIM2; j++)
+            if(attr_data2[i][j]!=read_data2[i][j])
+                TestErrPrintf("%d: attribute data different: attr_data2[%d][%d]=%d, read_data2[%d][%d]=%d\n",__LINE__,i,j,attr_data2[i][j],i,j,read_data2[i][j]);
+
+    /* Verify Name */
+    name_len=H5Aget_name(attr,ATTR_NAME_LEN, attr_name);
+    VERIFY(name_len, HDstrlen(ATTR2_NAME), "H5Aget_name");
+    if(HDstrcmp(attr_name,ATTR2_NAME))
+        TestErrPrintf("attribute name different: attr_name=%s, should be %s\n",attr_name,ATTR2_NAME);
+
+    /* Verify Name with too small of a buffer */
+    name_len=H5Aget_name(attr,HDstrlen(ATTR2_NAME), attr_name);
+    VERIFY(name_len, HDstrlen(ATTR2_NAME), "H5Aget_name");
+    HDstrcpy(temp_name,ATTR2_NAME);     /* make a copy of the name */
+    temp_name[HDstrlen(ATTR2_NAME)-1]='\0';   /* truncate it to match the one retrieved */
+    if(HDstrcmp(attr_name,temp_name))
+        TestErrPrintf("attribute name different: attr_name=%s, should be %s\n",attr_name,temp_name);
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Open 2nd attribute for the dataset */
+    attr=H5Aopen_idx(dataset,2);
+    CHECK(attr, FAIL, "H5Aopen_idx");
+
+    /* Verify Dataspace */
+    space=H5Aget_space(attr);
+    CHECK(space, FAIL, "H5Aget_space");
+    rank=H5Sget_simple_extent_ndims(space);
+    VERIFY(rank, ATTR3_RANK, "H5Sget_simple_extent_ndims");
+    ret=H5Sget_simple_extent_dims(space,dims, NULL);
+    CHECK(ret, FAIL, "H5Sget_simple_extent_dims");
+    if(dims[0]!=ATTR3_DIM1)
+        TestErrPrintf("attribute dimensions different: dims[0]=%d, should be %d\n",(int)dims[0],ATTR3_DIM1);
+    if(dims[1]!=ATTR3_DIM2)
+        TestErrPrintf("attribute dimensions different: dims[1]=%d, should be %d\n",(int)dims[1],ATTR3_DIM2);
+    if(dims[2]!=ATTR3_DIM3)
+        TestErrPrintf("attribute dimensions different: dims[2]=%d, should be %d\n",(int)dims[2],ATTR3_DIM3);
+    H5Sclose(space);
+
+    /* Verify Datatype */
+    type=H5Aget_type(attr);
+    CHECK(type, FAIL, "H5Aget_type");
+    t_class=H5Tget_class(type);
+    VERIFY(t_class, H5T_FLOAT, "H5Tget_class");
+    order=H5Tget_order(type);
+    VERIFY(order, H5Tget_order(H5T_NATIVE_DOUBLE), "H5Tget_order");
+    size=H5Tget_size(type);
+    VERIFY(size, H5Tget_size(H5T_NATIVE_DOUBLE), "H5Tget_size");
+    H5Tclose(type);
+
+    /* Read attribute information */
+    ret=H5Aread(attr,H5T_NATIVE_DOUBLE,read_data3);
+    CHECK(ret, FAIL, "H5Aread");
+
+    /* Verify values read in */
+    for(i=0; i<ATTR3_DIM1; i++)
+        for(j=0; j<ATTR3_DIM2; j++)
+            for(k=0; k<ATTR3_DIM3; k++)
+                if(attr_data3[i][j][k]!=read_data3[i][j][k])
+                    TestErrPrintf("%d: attribute data different: attr_data3[%d][%d][%d]=%f, read_data3[%d][%d][%d]=%f\n",__LINE__,i,j,k,attr_data3[i][j][k],i,j,k,read_data3[i][j][k]);
+
+    /* Verify Name */
+    name_len=H5Aget_name(attr,ATTR_NAME_LEN, attr_name);
+    VERIFY(name_len, HDstrlen(ATTR3_NAME), "H5Aget_name");
+    if(HDstrcmp(attr_name,ATTR3_NAME))
+        TestErrPrintf("attribute name different: attr_name=%s, should be %s\n",attr_name,ATTR3_NAME);
+
+    /* Verify Name with too small of a buffer */
+    name_len=H5Aget_name(attr,HDstrlen(ATTR3_NAME), attr_name);
+    VERIFY(name_len, HDstrlen(ATTR3_NAME), "H5Aget_name");
+    HDstrcpy(temp_name,ATTR3_NAME);     /* make a copy of the name */
+    temp_name[HDstrlen(ATTR3_NAME)-1]='\0';   /* truncate it to match the one retrieved */
+    if(HDstrcmp(attr_name,temp_name))
+        TestErrPrintf("attribute name different: attr_name=%s, should be %s\n",attr_name,temp_name);
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Close dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}   /* test_attr_mult_read() */
+
+/****************************************************************
+**
+**  attr_op1(): Attribute operator
+**
+****************************************************************/
+herr_t attr_op1(hid_t UNUSED loc_id, const char *name, void *op_data)
+{
+    int *count=(int *)op_data;
+    herr_t ret=0;
+
+    switch(*count) {
+        case 0:
+            if(HDstrcmp(name,ATTR1_NAME))
+                TestErrPrintf("attribute name different: name=%s, should be %s\n",name,ATTR1_NAME);
+             (*count)++;
+             break;
+
+        case 1:
+            if(HDstrcmp(name,ATTR2_NAME))
+                TestErrPrintf("attribute name different: name=%s, should be %s\n",name,ATTR2_NAME);
+             (*count)++;
+             break;
+
+        case 2:
+            if(HDstrcmp(name,ATTR3_NAME))
+                TestErrPrintf("attribute name different: name=%s, should be %s\n",name,ATTR3_NAME);
+             (*count)++;
+             break;
+
+        default:
+            ret=-1;
+            break;
+    }  /* end switch() */
+
+    return(ret);
+} /* end attr_op1() */
+
+/****************************************************************
+**
+**  test_attr_iterate(): Test H5A (attribute) iterator code.
+**
+****************************************************************/
+static void
+test_attr_iterate(void)
+{
+    hid_t   file;		/* HDF5 File ID 		*/
+    hid_t   dataset;	/* Dataset ID			*/
+    hid_t   sid;	/* Dataspace ID			*/
+    unsigned start;     /* Starting attribute to look up */
+    int     count;      /* operator data for the iterator */
+    herr_t  ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Attribute Functions\n"));
+
+    /* Open file */
+    file = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fopen");
+
+    /* Create a dataspace */
+    sid=H5Screate(H5S_SCALAR);
+    CHECK(sid, FAIL, "H5Screate");
+
+    /* Create a new dataset */
+    dataset=H5Dcreate(file,DSET2_NAME,H5T_NATIVE_INT,sid,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Close dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Verify the correct number of attributes */
+    ret=H5Aget_num_attrs(dataset);
+    VERIFY(ret, 0, "H5Aget_num_attrs");
+
+    /* Iterate over attributes on dataset */
+    start=0;
+    count=0;
+    ret = H5Aiterate(dataset,&start,attr_op1,&count);
+    VERIFY(ret, 0, "H5Aiterate");
+
+    /* Close dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Open existing dataset w/attributes */
+    dataset=H5Dopen(file,DSET1_NAME);
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Verify the correct number of attributes */
+    ret=H5Aget_num_attrs(dataset);
+    VERIFY(ret, 3, "H5Aget_num_attrs");
+
+    /* Iterate over attributes on dataset */
+    start=0;
+    count=0;
+    ret = H5Aiterate(dataset,&start,attr_op1,&count);
+    VERIFY(ret, 0, "H5Aiterate");
+
+    /* Close dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+}   /* test_attr_iterate() */
+
+/****************************************************************
+**
+**  test_attr_delete(): Test H5A (attribute) code for deleting objects.
+**
+****************************************************************/
+static void
+test_attr_delete(void)
+{
+    hid_t   fid1;		/* HDF5 File ID 		*/
+    hid_t   dataset;	/* Dataset ID			*/
+    hid_t   attr;	    /* Attribute ID			*/
+    char    attr_name[ATTR_NAME_LEN]; /* Buffer for attribute names */
+    size_t  name_len;   /* Length of attribute name */
+    herr_t  ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Attribute Functions\n"));
+
+    /* Open file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,DSET1_NAME);
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Verify the correct number of attributes */
+    ret=H5Aget_num_attrs(dataset);
+    VERIFY(ret, 3, "H5Aget_num_attrs");
+
+    /* Try to delete bogus attribute */
+    ret=H5Adelete(dataset,"Bogus");
+    VERIFY(ret, FAIL, "H5Adelete");
+
+    /* Verify the correct number of attributes */
+    ret=H5Aget_num_attrs(dataset);
+    VERIFY(ret, 3, "H5Aget_num_attrs");
+
+    /* Delete middle (2nd) attribute */
+    ret=H5Adelete(dataset,ATTR2_NAME);
+    CHECK(ret, FAIL, "H5Adelete");
+
+    /* Verify the correct number of attributes */
+    ret=H5Aget_num_attrs(dataset);
+    VERIFY(ret, 2, "H5Aget_num_attrs");
+
+    /* Open 1st attribute for the dataset */
+    attr=H5Aopen_idx(dataset,0);
+    CHECK(attr, FAIL, "H5Aopen_idx");
+
+    /* Verify Name */
+    name_len=H5Aget_name(attr,ATTR_NAME_LEN,attr_name);
+    VERIFY(name_len, HDstrlen(ATTR1_NAME), "H5Aget_name");
+    if(HDstrcmp(attr_name,ATTR1_NAME))
+        TestErrPrintf("attribute name different: attr_name=%s, should be %s\n",attr_name,ATTR1_NAME);
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Open last (formally 3rd) attribute for the dataset */
+    attr=H5Aopen_idx(dataset,1);
+    CHECK(attr, FAIL, "H5Aopen_idx");
+
+    /* Verify Name */
+    name_len=H5Aget_name(attr,ATTR_NAME_LEN, attr_name);
+    VERIFY(name_len, HDstrlen(ATTR3_NAME), "H5Aget_name");
+    if(HDstrcmp(attr_name,ATTR3_NAME))
+        TestErrPrintf("attribute name different: attr_name=%s, should be %s\n",attr_name,ATTR3_NAME);
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Delete first attribute */
+    ret=H5Adelete(dataset,ATTR1_NAME);
+    CHECK(ret, FAIL, "H5Adelete");
+
+    /* Verify the correct number of attributes */
+    ret=H5Aget_num_attrs(dataset);
+    VERIFY(ret, 1, "H5Aget_num_attrs");
+
+    /* Open last (formally 3rd) attribute for the dataset */
+    attr=H5Aopen_idx(dataset,0);
+    CHECK(attr, FAIL, "H5Aopen_idx");
+
+    /* Verify Name */
+    name_len=H5Aget_name(attr,ATTR_NAME_LEN, attr_name);
+    VERIFY(name_len, HDstrlen(ATTR3_NAME), "H5Aget_name");
+    if(HDstrcmp(attr_name,ATTR3_NAME))
+        TestErrPrintf("attribute name different: attr_name=%s, should be %s\n",attr_name,ATTR3_NAME);
+
+    /* Close attribute */
+    ret=H5Aclose(attr);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Delete first attribute */
+    ret=H5Adelete(dataset,ATTR3_NAME);
+    CHECK(ret, FAIL, "H5Adelete");
+
+    /* Verify the correct number of attributes */
+    ret=H5Aget_num_attrs(dataset);
+    VERIFY(ret, 0, "H5Aget_num_attrs");
+
+    /* Close dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}   /* test_attr_delete() */
+
+/****************************************************************
+**
+**  test_attr_dtype_shared(): Test H5A (attribute) code for using
+**                              shared datatypes in attributes.
+**
+****************************************************************/
+static void
+test_attr_dtype_shared(void)
+{
+    hid_t file_id;              /* File ID */
+    hid_t dset_id;              /* Dataset ID */
+    hid_t space_id;             /* Dataspace ID for dataset & attribute */
+    hid_t type_id;              /* Datatype ID for named datatype */
+    hid_t attr_id;              /* Attribute ID */
+    int data=8;                 /* Data to write */
+    int rdata=0;                /* Read read in */
+    H5G_stat_t statbuf;         /* Object's information */
+    off_t empty_filesize;       /* Size of empty file */
+    off_t filesize;             /* Size of file after modifications */
+    herr_t  ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Shared Datatypes with Attributes\n"));
+
+    /* Create a file */
+    file_id=H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file_id, FAIL, "H5Fopen");
+
+    /* Close file */
+    ret=H5Fclose(file_id);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Get size of file */
+    empty_filesize=h5_get_file_size(FILENAME);
+    if(empty_filesize==0)
+        TestErrPrintf("Line %d: file size wrong!\n",__LINE__);
+
+    /* Re-open file */
+    file_id=H5Fopen(FILENAME,H5F_ACC_RDWR,H5P_DEFAULT);
+    CHECK(file_id, FAIL, "H5Fopen");
+
+    /* Create a datatype to commit and use */
+    type_id=H5Tcopy(H5T_NATIVE_INT);
+    CHECK(type_id, FAIL, "H5Tcopy");
+
+    /* Commit datatype to file */
+    ret=H5Tcommit(file_id,TYPE1_NAME,type_id);
+    CHECK(ret, FAIL, "H5Tcommit");
+
+    /* Check reference count on named datatype */
+    ret=H5Gget_objinfo(file_id,TYPE1_NAME,0,&statbuf);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+    VERIFY(statbuf.nlink, 1, "H5Tcommit");
+
+    /* Create dataspace for dataset */
+    space_id=H5Screate(H5S_SCALAR);
+    CHECK(space_id, FAIL, "H5Screate");
+
+    /* Create dataset */
+    dset_id=H5Dcreate(file_id,DSET1_NAME,type_id,space_id,H5P_DEFAULT);
+    CHECK(dset_id, FAIL, "H5Dcreate");
+
+    /* Check reference count on named datatype */
+    ret=H5Gget_objinfo(file_id,TYPE1_NAME,0,&statbuf);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+    VERIFY(statbuf.nlink, 2, "H5Dcreate");
+
+    /* Create attribute on dataset */
+    attr_id=H5Acreate(dset_id,ATTR1_NAME,type_id,space_id,H5P_DEFAULT);
+    CHECK(attr_id, FAIL, "H5Acreate");
+
+    /* Check reference count on named datatype */
+    ret=H5Gget_objinfo(file_id,TYPE1_NAME,0,&statbuf);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+    VERIFY(statbuf.nlink, 3, "H5Acreate");
+
+    /* Close attribute */
+    ret=H5Aclose(attr_id);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Delete attribute */
+    ret=H5Adelete(dset_id,ATTR1_NAME);
+    CHECK(ret, FAIL, "H5Adelete");
+
+    /* Check reference count on named datatype */
+    ret=H5Gget_objinfo(file_id,TYPE1_NAME,0,&statbuf);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+    VERIFY(statbuf.nlink, 2, "H5Adelete");
+
+    /* Create attribute on dataset */
+    attr_id=H5Acreate(dset_id,ATTR1_NAME,type_id,space_id,H5P_DEFAULT);
+    CHECK(attr_id, FAIL, "H5Acreate");
+
+    /* Check reference count on named datatype */
+    ret=H5Gget_objinfo(file_id,TYPE1_NAME,0,&statbuf);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+    VERIFY(statbuf.nlink, 3, "H5Acreate");
+
+    /* Write data into the attribute */
+    ret=H5Awrite(attr_id,H5T_NATIVE_INT,&data);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    /* Close attribute */
+    ret=H5Aclose(attr_id);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Close dataset */
+    ret=H5Dclose(dset_id);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close dataspace */
+    ret=H5Sclose(space_id);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close datatype */
+    ret=H5Tclose(type_id);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close file */
+    ret=H5Fclose(file_id);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Re-open file */
+    file_id=H5Fopen(FILENAME,H5F_ACC_RDWR,H5P_DEFAULT);
+    CHECK(file_id, FAIL, "H5Fopen");
+
+    /* Open dataset */
+    dset_id=H5Dopen(file_id,DSET1_NAME);
+    CHECK(dset_id, FAIL, "H5Dopen");
+
+    /* Open attribute */
+    attr_id=H5Aopen_name(dset_id,ATTR1_NAME);
+    CHECK(attr_id, FAIL, "H5Aopen_name");
+
+    /* Read data from the attribute */
+    ret=H5Aread(attr_id,H5T_NATIVE_INT,&rdata);
+    CHECK(ret, FAIL, "H5Aread");
+    VERIFY(data, rdata, "H5Aread");
+
+    /* Close attribute */
+    ret=H5Aclose(attr_id);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Close dataset */
+    ret=H5Dclose(dset_id);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Check reference count on named datatype */
+    ret=H5Gget_objinfo(file_id,TYPE1_NAME,0,&statbuf);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+    VERIFY(statbuf.nlink, 3, "H5Aopen_name");
+
+    /* Unlink the dataset */
+    ret=H5Gunlink(file_id,DSET1_NAME);
+    CHECK(ret, FAIL, "H5Gunlink");
+
+    /* Check reference count on named datatype */
+    ret=H5Gget_objinfo(file_id,TYPE1_NAME,0,&statbuf);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+    VERIFY(statbuf.nlink, 1, "H5Gunlink");
+
+    /* Unlink the named datatype */
+    ret=H5Gunlink(file_id,TYPE1_NAME);
+    CHECK(ret, FAIL, "H5Gunlink");
+
+    /* Close file */
+    ret=H5Fclose(file_id);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Check size of file */
+    filesize=h5_get_file_size(FILENAME);
+    VERIFY(filesize, empty_filesize, "H5Fclose");
+}   /* test_attr_dtype_shared() */
+
+/****************************************************************
+**
+**  test_attr(): Main H5A (attribute) testing routine.
+**
+****************************************************************/
+void
+test_attr(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Attributes\n"));
+
+    /* These next two tests use the same file information */
+    test_attr_basic_write();    /* Test basic H5A writing code */
+    test_attr_basic_read();     /* Test basic H5A reading code */
+    test_attr_flush();          /* Test H5A I/O in the presence of H5Fflush calls */
+
+    /* These next two tests use the same file information */
+    test_attr_compound_write();  /* Test complex datatype H5A writing code */
+    test_attr_compound_read();   /* Test complex datatype H5A reading code */
+
+    /* These next two tests use the same file information */
+    test_attr_scalar_write();  /* Test scalar dataspace H5A writing code */
+    test_attr_scalar_read();   /* Test scalar dataspace H5A reading code */
+
+    /* These next four tests use the same file information */
+    test_attr_mult_write();     /* Test H5A writing code for multiple attributes */
+    test_attr_mult_read();      /* Test H5A reading code for multiple attributes */
+    test_attr_iterate();        /* Test H5A iterator code */
+    test_attr_delete();         /* Test H5A code for deleting attributes */
+
+    /* This next test use the same file information */
+    test_attr_dtype_shared();   /* Test using shared dataypes in attributes */
+}   /* test_attr() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_attr
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Albert Cheng
+ *              July 2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_attr(void)
+{
+    remove(FILENAME);
+}
+

Added: packages/hdf5/branches/upstream/current/test/tbogus.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/tbogus.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/tconfig.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/tconfig.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/tconfig.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,203 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/***********************************************************
+*
+* Test program:  tconfig
+*
+* Test the definitions in the H5config.h as much as possible
+*
+*************************************************************/
+
+#include "hdf5.h"
+#include "testhdf5.h"
+
+/* macros definitions */
+/* verify C int type: verify the size of signed and unsigned int type
+ * with the macro size.
+ */
+#define vrfy_cint_type(ctype, uctype, ctype_macro) \
+    /* check signed type size */ \
+    vrfy_macrosize(ctype, ctype_macro, #ctype_macro);\
+    /* check unsigned type size */ \
+    vrfy_macrosize(uctype, ctype_macro, #ctype_macro);
+
+/* verify C type sizes: verify the sizeof type with the macro size. */
+#define vrfy_ctype(type, macro) \
+    vrfy_macrosize(type, macro, #macro);
+
+/* verify if the sizeof(type) matches size defined in macro. */
+/* Needs this extra step so that we can print the macro name. */
+#define vrfy_macrosize(type, macro, macroname) \
+    if (sizeof(type) != macro) \
+	TestErrPrintf("Error: sizeof(%s) is %d but %s is %d\n", \
+	    #type, sizeof(type), macroname, macro);
+
+/* local routine prototypes */
+void test_config_ctypes(void);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_configure
+ *
+ * Purpose:	Main configure definitions testing routine
+ *
+ * Return:	none (error is fed back via global variable num_errs)
+ *
+ * Programmer:	Albert Cheng
+ *              September 25, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+test_configure(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing configure definitions\n"));
+    test_config_ctypes();
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_configure
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Albert Cheng
+ *              September 25, 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_configure(void)
+{
+    /* no file to clean */
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_config_ctypes
+ *
+ * Purpose:	test C language data type sizes
+ *
+ * Return:	none (error is fed back via global variable num_errs)
+ *
+ * Programmer:	Albert Cheng
+ *              September 25, 2001
+ *
+ * Modifications:
+ *	Albert Cheng, 2004/10/14
+ *	Verified both signed and unsigned int types.
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+test_config_ctypes(void)
+{
+    /* standard C89 basic types */
+    /* char, signed char,  unsigned char are three distinct types. */
+    vrfy_ctype(char, H5_SIZEOF_CHAR);
+    vrfy_cint_type(signed char, unsigned char, H5_SIZEOF_CHAR);
+    vrfy_cint_type(int, unsigned int, H5_SIZEOF_INT);
+    vrfy_cint_type(short, unsigned short, H5_SIZEOF_SHORT);
+    vrfy_cint_type(long, unsigned long, H5_SIZEOF_LONG);
+    vrfy_ctype(float, H5_SIZEOF_FLOAT);
+    vrfy_ctype(double, H5_SIZEOF_DOUBLE);
+#if H5_SIZEOF_LONG_DOUBLE >0
+    vrfy_ctype(long double, H5_SIZEOF_LONG_DOUBLE);
+#endif
+
+    /* standard C99 basic types */
+#if H5_SIZEOF_LONG_LONG > 0
+    vrfy_cint_type(long_long, unsigned long_long, H5_SIZEOF_LONG_LONG);
+#endif
+
+#if H5_SIZEOF_INT8_T > 0
+    vrfy_cint_type(int8_t, uint8_t, H5_SIZEOF_INT8_T);
+#endif
+
+#if H5_SIZEOF_INT16_T > 0
+    vrfy_cint_type(int16_t, uint16_t, H5_SIZEOF_INT16_T);
+#endif
+
+#if H5_SIZEOF_INT32_T > 0
+    vrfy_cint_type(int32_t, uint32_t, H5_SIZEOF_INT32_T);
+#endif
+
+#if H5_SIZEOF_INT64_T > 0
+    vrfy_cint_type(int64_t, uint64_t, H5_SIZEOF_INT64_T);
+#endif
+
+    /* Some vendors have different sizes for the signed and unsigned */
+    /* fast8_t.  Need to check them individually. */
+#if H5_SIZEOF_INT_FAST8_T > 0
+    vrfy_ctype(int_fast8_t, H5_SIZEOF_INT_FAST8_T);
+#endif
+
+#if H5_SIZEOF_UINT_FAST8_T > 0
+    vrfy_ctype(uint_fast8_t, H5_SIZEOF_UINT_FAST8_T);
+#endif
+
+#if H5_SIZEOF_INT_FAST16_T > 0
+    vrfy_cint_type(int_fast16_t, uint_fast16_t, H5_SIZEOF_INT_FAST16_T);
+#endif
+
+#if H5_SIZEOF_INT_FAST32_T > 0
+    vrfy_cint_type(int_fast32_t, uint_fast32_t, H5_SIZEOF_INT_FAST32_T);
+#endif
+
+#if H5_SIZEOF_INT_FAST64_T > 0
+    vrfy_cint_type(int_fast64_t, uint_fast64_t, H5_SIZEOF_INT_FAST64_T);
+#endif
+
+#if H5_SIZEOF_INT_LEAST8_T > 0
+    vrfy_cint_type(int_least8_t, uint_least8_t, H5_SIZEOF_INT_LEAST8_T);
+#endif
+
+#if H5_SIZEOF_INT_LEAST16_T > 0
+    vrfy_cint_type(int_least16_t, uint_least16_t, H5_SIZEOF_INT_LEAST16_T);
+#endif
+
+#if H5_SIZEOF_INT_LEAST32_T > 0
+    vrfy_cint_type(int_least32_t, uint_least32_t, H5_SIZEOF_INT_LEAST32_T);
+#endif
+
+#if H5_SIZEOF_INT_LEAST64_T > 0
+    vrfy_cint_type(int_least64_t, uint_least64_t, H5_SIZEOF_INT_LEAST64_T);
+#endif
+
+    /* pseudo standard basic types */
+#if H5_SIZEOF___INT64 > 0
+    vrfy_cint_type(__int64, unsigned __int64, H5_SIZEOF___INT64);
+#endif
+
+#if H5_SIZEOF_OFF_T > 0
+    vrfy_ctype(off_t, H5_SIZEOF_OFF_T);
+#endif
+
+#if H5_SIZEOF_SIZE_T > 0
+    vrfy_ctype(size_t, H5_SIZEOF_SIZE_T);
+#endif
+
+#if H5_SIZEOF_SSIZE_T > 0
+    vrfy_ctype(ssize_t, H5_SIZEOF_SSIZE_T);
+#endif
+
+}

Added: packages/hdf5/branches/upstream/current/test/test_filters_be.hdf5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/test_filters_be.hdf5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/test_filters_le.hdf5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/test_filters_le.hdf5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/testframe.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/testframe.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/testframe.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,510 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol at ncsa.uiuc.edu>
+ *              Tuesday, January  6, 2004
+ *
+ * Purpose:	Provides support functions for the testing framework.
+ *
+ */
+
+#include "testhdf5.h"
+
+/*
+ * Definitions for the testing structure.
+ */
+#define MAXNUMOFTESTS   40
+#define MAXTESTNAME     16
+#define MAXTESTDESC     64
+
+typedef struct TestStruct {
+	int    NumErrors;
+	char   Description[MAXTESTDESC];
+	int    SkipFlag;
+	char   Name[MAXTESTNAME];
+	void (*Call)(void);
+	void (*Cleanup)(void);
+	const void *Parameters;
+} TestStruct;
+
+
+/*
+ * Variables used by testing framework.
+ */
+static int num_errs = 0;        /* Total number of errors during testing */
+static int Verbosity = VERBO_DEF;       /* Default Verbosity is Low */
+static int Summary = 0;		/* Show test summary. Default is no. */
+static int CleanUp = 1;		/* Do cleanup or not. Default is yes. */
+static TestStruct Test[MAXNUMOFTESTS];
+static int    Index = 0;
+static const void *Test_parameters = NULL;
+static const char *TestProgName = NULL;
+static void (*TestPrivateUsage)(void) = NULL;
+static int (*TestPrivateParser)(int ac, char *av[]) = NULL;
+
+
+/*
+ * Setup a test function and add it to the list of tests.
+ *      It must have no parameters and returns void.
+ * TheName--short test name.
+ *    If the name starts with '-', do not run it by default.
+ * TheCall--the test routine.
+ * Cleanup--the cleanup routine for the test.
+ * TheDescr--Long description of the test.
+ * Parameters--pointer to extra parameters. Use NULL if none used.
+ *    Since only the pointer is copied, the contents should not change.
+ */
+void
+AddTest(const char *TheName, void (*TheCall) (void), void (*Cleanup) (void), const char *TheDescr, const void *Parameters)
+{
+    /* Sanity checking */
+    if (Index >= MAXNUMOFTESTS) {
+        printf("Too many tests added, increase MAXNUMOFTEST(%d).\n",
+		MAXNUMOFTESTS);
+        exit(-1);
+    }                           /* end if */
+    if (HDstrlen(TheDescr) >= MAXTESTDESC) {
+        printf("Test description too long, increase MAXTESTDESC(%d).\n",
+		MAXTESTDESC);
+        exit(-1);
+    } /* end if */
+    if (HDstrlen(TheName) >= MAXTESTNAME) {
+        printf("Test name too long, increase MAXTESTNAME(%d).\n",
+		MAXTESTNAME);
+        exit(-1);
+    } /* end if */
+
+    /* Set up test function */
+    HDstrcpy(Test[Index].Description, TheDescr);
+    if (*TheName != '-'){
+	HDstrcpy(Test[Index].Name, TheName);
+	Test[Index].SkipFlag = 0;
+    }
+    else {	/* skip test by default */
+	HDstrcpy(Test[Index].Name, TheName+1);
+	Test[Index].SkipFlag = 1;
+    }
+    Test[Index].Call = TheCall;
+    Test[Index].Cleanup = Cleanup;
+    Test[Index].NumErrors = -1;
+    Test[Index].Parameters = Parameters;
+
+    /* Increment test count */
+    Index++;
+}
+
+
+/*
+ * Initialize testing framework
+ *
+ * ProgName: Name of test program.
+ * private_usage: Optional routine provided by test program to print the
+ *      private portion of usage page.  Default to NULL which means none is
+ *      provided.
+ * private_parser: Optional routine provided by test program to parse the
+ *      private options.  Default to NULL which means none is provided.
+ *
+ * Modifications:
+ *     	Albert Cheng 2004/08/17
+ *     	Added the ProgName, private_usage and private_parser arguments.
+ */
+void TestInit(const char *ProgName, void (*private_usage)(void), int (*private_parser)(int ac, char *av[]))
+{
+#if !(defined MAC || defined __MWERKS__ || defined SYMANTEC_C)
+    /* Un-buffer the stdout and stderr */
+    setbuf(stderr, NULL);
+    setbuf(stdout, NULL);
+#endif
+
+    /*
+     * Turn off automatic error reporting since we do it ourselves.  Besides,
+     * half the functions this test calls are private, so automatic error
+     * reporting wouldn't do much good since it's triggered at the API layer.
+     */
+    H5Eset_auto(NULL, NULL);
+
+    /*
+     * Record the program name and private routines if provided.
+     */
+    TestProgName = ProgName;
+    if (NULL != private_usage)
+	TestPrivateUsage = private_usage;
+    if (NULL != private_parser)
+	TestPrivateParser = private_parser;
+}
+
+
+/*
+ * Print test usage.
+ *	First print the common test options, then the extra options if provided.
+ *
+ * Modification:
+ * 	2004/08/18 Albert Cheng.  Add TestPrivateUsage feature.
+ */
+void TestUsage(void)
+{
+	int i;
+
+	print_func("Usage: %s [-v[erbose] (l[ow]|m[edium]|h[igh]|0-9)] %s\n",
+	    TestProgName, (TestPrivateUsage ? "<extra options>" : ""));
+	print_func("              [-[e]x[clude] name+] \n");
+	print_func("              [-o[nly] name+] \n");
+	print_func("              [-b[egin] name] \n");
+	print_func("              [-s[ummary]]  \n");
+	print_func("              [-c[leanoff]]  \n");
+	print_func("              [-h[elp]]  \n");
+	print_func("\n\n");
+	print_func("verbose   controls the amount of information displayed\n");
+	print_func("exclude   to exclude tests by name\n");
+	print_func("only      to name tests which should be run\n");
+	print_func("begin     start at the name of the test givin\n");
+	print_func("summary   prints a summary of test results at the end\n");
+	print_func("cleanoff  does not delete *.hdf files after execution of tests\n");
+	print_func("help      print out this information\n");
+	if (TestPrivateUsage){
+	    print_func("\nExtra options\n");
+	    TestPrivateUsage();
+	}
+	print_func("\n\n");
+	print_func("This program currently tests the following: \n\n");
+	print_func("%16s %s\n", "Name", "Description");
+	print_func("%16s %s\n", "----", "-----------");
+
+	for (i = 0; i < Index; i++)
+		print_func("%16s %s\n", Test[i].Name, Test[i].Description);
+
+	print_func("\n\n");
+}
+
+
+/*
+ * Print test info.
+ */
+void TestInfo(const char *ProgName)
+{
+    unsigned major, minor, release;
+
+    H5get_libversion(&major, &minor, &release);
+
+    print_func("\nFor help use: %s -help\n",ProgName);
+    print_func("Linked with hdf5 version %u.%u release %u\n", major, minor, release);
+}
+
+
+/*
+ * Parse command line information.
+ *      argc, argv: the usual command line argument count and strings
+ *
+ * Modification:
+ * 	2004/08/18 Albert Cheng.  Add extra_parse feature.
+ */
+void TestParseCmdLine(int argc, char *argv[])
+{
+    int ret_code;
+
+    while (argv++, --argc > 0){
+	if ((HDstrcmp(*argv, "-verbose") == 0) ||
+				(HDstrcmp(*argv, "-v") == 0)) {
+	    if (argc > 0){
+		--argc; ++argv;
+		ParseTestVerbosity(*argv);
+	    }else{
+		TestUsage();
+		exit(1);
+	    }
+	}
+	else if (((HDstrcmp(*argv, "-exclude") == 0) ||
+				    (HDstrcmp(*argv, "-x") == 0))) {
+	    if (argc > 0){
+		--argc; ++argv;
+		SetTest(*argv, SKIPTEST);
+	    }else{
+		TestUsage();
+		exit(1);
+	    }
+	}
+	else if (((HDstrcmp(*argv, "-begin") == 0) ||
+				    (HDstrcmp(*argv, "-b") == 0))) {
+	    if (argc > 0){
+		--argc; ++argv;
+		SetTest(*argv, BEGINTEST);
+	    }else{
+		TestUsage();
+		exit(1);
+	    }
+	}
+	else if (((HDstrcmp(*argv, "-only") == 0) ||
+				    (HDstrcmp(*argv, "-o") == 0))) {
+	    if (argc > 0){
+		int Loop;
+		--argc; ++argv;
+		/* Skip all tests, then activate only one. */
+		for (Loop = 0; Loop < Index; Loop++)
+		    Test[Loop].SkipFlag = 1;
+		SetTest(*argv, ONLYTEST);
+	    }else{
+		TestUsage();
+		exit(1);
+	    }
+	}
+	else if ((HDstrcmp(*argv, "-summary") == 0) || (HDstrcmp(*argv, "-s") == 0))
+            Summary = 1;
+	else if ((HDstrcmp(*argv, "-help") == 0) || (HDstrcmp(*argv, "-h") == 0)) {
+            TestUsage();
+            exit(0);
+        }
+	else if ((HDstrcmp(*argv, "-cleanoff") == 0) || (HDstrcmp(*argv, "-c") == 0))
+            CleanUp = 0;
+	else {
+	    /* non-standard option.  Break out. */
+	    break;
+	}
+
+    }
+
+    /* Call extra parsing function if provided. */
+    if (NULL != TestPrivateParser){
+	ret_code=TestPrivateParser(argc+1, argv-1);
+	if (ret_code != 0)
+	    exit(-1);
+    }
+}
+
+
+/*
+ * Perform Tests.
+ */
+void PerformTests(void)
+{
+    int                     Loop;
+
+    for (Loop = 0; Loop < Index; Loop++)
+        if (Test[Loop].SkipFlag) {
+            MESSAGE(2, ("Skipping -- %s (%s) \n", Test[Loop].Description, Test[Loop].Name));
+        } else {
+            MESSAGE(2, ("Testing  -- %s (%s) \n", Test[Loop].Description, Test[Loop].Name));
+            MESSAGE(5, ("===============================================\n"));
+            Test[Loop].NumErrors = num_errs;
+	    Test_parameters = Test[Loop].Parameters;
+	    ALARM_ON;
+            Test[Loop].Call();
+	    ALARM_OFF;
+            Test[Loop].NumErrors = num_errs - Test[Loop].NumErrors;
+            MESSAGE(5, ("===============================================\n"));
+            MESSAGE(5, ("There were %d errors detected.\n\n", (int)Test[Loop].NumErrors));
+        }
+
+    Test_parameters = NULL;     /* clear it. */
+    MESSAGE(2, ("\n\n"))
+
+    if (num_errs)
+        print_func("!!! %d Error(s) were detected !!!\n\n", (int) num_errs);
+    else
+        print_func("All tests were successful. \n\n");
+}
+
+
+/*
+ * Display test summary.
+ */
+void TestSummary(void)
+{
+    int                     Loop;
+
+    print_func("Summary of Test Results:\n");
+    print_func("Name of Test     Errors Description of Test\n");
+    print_func("---------------- ------ --------------------------------------\n");
+
+    for (Loop = 0; Loop < Index; Loop++) {
+        if (Test[Loop].NumErrors == -1)
+            print_func("%16s %6s %s\n", Test[Loop].Name, "N/A", Test[Loop].Description);
+        else
+            print_func("%16s %6d %s\n", Test[Loop].Name, (int)Test[Loop].NumErrors, Test[Loop].Description);
+    }
+
+    print_func("\n\n");
+}
+
+
+/*
+ * Cleanup files from testing
+ */
+void TestCleanup(void)
+{
+    int                     Loop;
+
+    MESSAGE(2, ("\nCleaning Up temp files...\n\n"));
+
+    /* call individual cleanup routines in each source module */
+    for (Loop = 0; Loop < Index; Loop++)
+        if (!Test[Loop].SkipFlag && Test[Loop].Cleanup!=NULL)
+            Test[Loop].Cleanup();
+}
+
+
+/*
+ * Retrieve the verbosity level for the testing framework
+ */
+int GetTestVerbosity(void)
+{
+    return(Verbosity);
+}
+
+/*
+ * Set the verbosity level for the testing framework.
+ * Return previous verbosity level.
+ */
+int SetTestVerbosity(int newval)
+{
+    int oldval;
+
+    oldval = Verbosity;
+    Verbosity = newval;
+    return(oldval);
+}
+
+/*
+ * Retrieve Summary request value.
+ *     0 means no summary, 1 means yes.
+ */
+int GetTestSummary(void)
+{
+    return(Summary);
+}
+
+/*
+ * Retrieve Cleanup request value.
+ *     0 means no Cleanup, 1 means yes.
+ */
+int GetTestCleanup(void)
+{
+    return(CleanUp);
+}
+
+/*
+ * Parse an argument string for verbosity level and set it.
+ */
+void ParseTestVerbosity(char *argv)
+{
+    if (*argv == 'l')
+	SetTestVerbosity(VERBO_LO);
+    else if (*argv == 'm')
+	SetTestVerbosity(VERBO_MED);
+    else if (*argv == 'h')
+	SetTestVerbosity(VERBO_HI);
+    else
+	SetTestVerbosity(atoi(argv));
+}
+
+
+/*
+ * Retrieve the number of testing errors for the testing framework
+ */
+int GetTestNumErrs(void)
+{
+    return(num_errs);
+}
+
+
+/*
+ * Increment the number of testing errors
+ */
+void IncTestNumErrs(void)
+{
+    num_errs++;
+}
+
+
+/*
+ * Retrieve the current Test Parameters pointer.
+ */
+const void *GetTestParameters(void)
+{
+    return(Test_parameters);
+}
+
+
+/*
+ * This routine is designed to provide equivalent functionality to 'printf'
+ * and also increment the error count for the testing framework.
+ */
+int
+TestErrPrintf(const char *format, ...)
+{
+    va_list arglist;
+    int ret_value;
+
+    /* Increment the error count */
+    num_errs++;
+
+    /* Print the requested information */
+    va_start(arglist, format);
+    ret_value = vprintf(format, arglist);
+    va_end(arglist);
+
+    /* Return the length of the string produced (like printf() does) */
+    return ret_value;
+}
+
+
+/*
+ * Set (control) which test will be tested.
+ * SKIPTEST: skip this test
+ * ONLYTEST: do only this test
+ * BEGINETEST: skip all tests before this test
+ *
+ */
+void SetTest(const char *testname, int action)
+{
+    int Loop;
+    switch (action){
+	case SKIPTEST:
+	    for (Loop = 0; Loop < Index; Loop++)
+		if (HDstrcmp(testname, Test[Loop].Name) == 0){
+		    Test[Loop].SkipFlag = 1;
+		    break;
+		}
+	    break;
+	case BEGINTEST:
+	    for (Loop = 0; Loop < Index; Loop++) {
+		if (HDstrcmp(testname, Test[Loop].Name) != 0)
+		    Test[Loop].SkipFlag = 1;
+		else{
+		    /* Found it. Set it to run.  Done. */
+		    Test[Loop].SkipFlag = 0;
+		    break;
+		}
+	    }
+	    break;
+	case ONLYTEST:
+	    for (Loop = 0; Loop < Index; Loop++) {
+		if (HDstrcmp(testname, Test[Loop].Name) != 0)
+		    Test[Loop].SkipFlag = 1;
+		else {
+		    /* Found it. Set it to run. Break to skip the rest. */
+		    Test[Loop].SkipFlag = 0;
+		    break;
+		}
+	    }
+	    /* skip the rest */
+	    while (++Loop < Index)
+		Test[Loop].SkipFlag = 1;
+	    break;
+	default:
+	    /* error */
+	    printf("*** ERROR: Unknown action (%d) for SetTest\n", action);
+	    break;
+    }
+}

Added: packages/hdf5/branches/upstream/current/test/testhdf5.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/testhdf5.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/testhdf5.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,83 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+   FILE
+   testhdf5.c - HDF5 testing framework main file.
+
+   REMARKS
+   General test wrapper for HDF5 base library test programs
+
+   DESIGN
+   Each test function should be implemented as function having no
+   parameters and returning void (i.e. no return value).  They should be put
+   into the list of AddTest() calls in main() below.  Functions which depend
+   on other functionality should be placed below the AddTest() call for the
+   base functionality testing.
+   Each test module should include testhdf5.h and define a unique set of
+   names for test files they create.
+
+   BUGS/LIMITATIONS
+
+
+ */
+
+/* ANY new test needs to have a prototype in testhdf5.h */
+#include "testhdf5.h"
+
+int
+main(int argc, char *argv[])
+{
+    /* Initialize testing framework */
+    TestInit(argv[0], NULL, NULL);
+
+    /* Tests are generally arranged from least to most complexity... */
+    AddTest("config", test_configure, cleanup_configure, "Configure definitions", NULL);
+    AddTest("metadata", test_metadata, cleanup_metadata, "Encode/decode metadata code", NULL);
+    AddTest("tst", test_tst, NULL,  "Ternary Search Trees", NULL);
+    AddTest("heap", test_heap, NULL,  "Memory Heaps", NULL);
+    AddTest("skiplist", test_skiplist, NULL,  "Skip Lists", NULL);
+    AddTest("refstr", test_refstr, NULL,  "Reference Counted Strings", NULL);
+    AddTest("file", test_file, cleanup_file, "Low-Level File I/O", NULL);
+    AddTest("h5s",  test_h5s,  cleanup_h5s,  "Dataspaces", NULL);
+    AddTest("attr", test_attr, cleanup_attr,  "Attributes", NULL);
+    AddTest("select", test_select, cleanup_select,  "Selections", NULL);
+    AddTest("time", test_time, cleanup_time,  "Time Datatypes", NULL);
+    AddTest("reference", test_reference, cleanup_reference,  "References", NULL);
+    AddTest("vltypes", test_vltypes, cleanup_vltypes,  "Variable-Length Datatypes", NULL);
+    AddTest("vlstrings", test_vlstrings, cleanup_vlstrings,  "Variable-Length Strings", NULL);
+    AddTest("iterate", test_iterate, cleanup_iterate,  "Group & Attribute Iteration", NULL);
+    AddTest("array", test_array, cleanup_array,  "Array Datatypes", NULL);
+    AddTest("genprop", test_genprop, cleanup_genprop,  "Generic Properties", NULL);
+    AddTest("misc", test_misc, cleanup_misc,  "Miscellaneous", NULL);
+
+    /* Display testing information */
+    TestInfo(argv[0]);
+
+    /* Parse command line arguments */
+    TestParseCmdLine(argc,argv);
+
+    /* Perform requested testing */
+    PerformTests();
+
+    /* Display test summary, if requested */
+    if (GetTestSummary())
+        TestSummary();
+
+    /* Clean up test files, if allowed */
+    if (GetTestCleanup() && !getenv("HDF5_NOCLEANUP"))
+        TestCleanup();
+
+    return (GetTestNumErrs());
+}                               /* end main() */

Added: packages/hdf5/branches/upstream/current/test/testhdf5.h
===================================================================
--- packages/hdf5/branches/upstream/current/test/testhdf5.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/testhdf5.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,165 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 header file contains information required for testing the HDF5 library.
+ */
+
+#ifndef TESTHDF5_H
+#define TESTHDF5_H
+
+/*
+ * Include required headers.  This file tests internal library functions,
+ * so we include the private headers here.
+ */
+#include "H5private.h"
+#include "H5Eprivate.h"
+
+/* Include generic testing header also */
+#include "h5test.h"
+
+/* Use %ld to print the value because long should cover most cases. */
+/* Used to make certain a return value _is_not_ a value */
+#define CHECK(ret, val, where) do {					      \
+    if (GetTestVerbosity()>=VERBO_HI) print_func("   Call to routine: %15s at line %4d " \
+				"in %s returned %ld \n",		      \
+				where, (int)__LINE__, __FILE__,		      \
+				(long)(ret));				      \
+    if ((ret) == (val)) {						      \
+	TestErrPrintf("*** UNEXPECTED RETURN from %s is %ld at line %4d "     \
+		   "in %s\n", where, (long)(ret), (int)__LINE__, __FILE__);   \
+	H5Eprint (stdout);						      \
+    }									      \
+} while(0)
+
+#define CHECK_I(ret,where) {						      \
+   if (GetTestVerbosity()>=VERBO_HI) {						      \
+      print_func("   Call to routine: %15s at line %4d in %s returned %ld\n", \
+                 (where), (int)__LINE__, __FILE__, (long)(ret));	      \
+   }									      \
+   if ((ret)<0) {							      \
+      TestErrPrintf ("*** UNEXPECTED RETURN from %s is %ld line %4d in %s\n", \
+                  (where), (long)(ret), (int)__LINE__, __FILE__);	      \
+      H5Eprint (stdout);						      \
+   }									      \
+}
+
+#define CHECK_PTR(ret,where) {						      \
+   if (GetTestVerbosity()>=VERBO_HI) {					      \
+      print_func("   Call to routine: %15s at line %4d in %s returned %p\n",  \
+                 (where), (int)__LINE__, __FILE__, (ret));		      \
+   }									      \
+   if (!(ret)) {							      \
+      TestErrPrintf ("*** UNEXPECTED RETURN from %s is NULL line %4d in %s\n", \
+                  (where), (int)__LINE__, __FILE__);			      \
+      H5Eprint (stdout);						      \
+   }									      \
+}
+
+/* Used to make certain a scalar return value _is_ a value */
+#define VERIFY(x, val, where) do {					      \
+    if (GetTestVerbosity()>=VERBO_HI) {					      \
+	print_func("   Call to routine: %15s at line %4d in %s had value "    \
+		   "%ld \n", (where), (int)__LINE__, __FILE__, (long)(x));    \
+    }									      \
+    if ((x) != (val)) {							      \
+	TestErrPrintf("*** UNEXPECTED VALUE from %s should be %ld, but is %ld at line %4d " \
+		   "in %s\n", (where), (long)(val), (long)(x), (int)__LINE__, __FILE__); \
+	H5Eprint (stdout);						      \
+    }									      \
+} while(0)
+
+/* Used to make certain a string return value _is_ a value */
+#define VERIFY_STR(x, val, where) do {					      \
+    if (GetTestVerbosity()>=VERBO_HI) {				              \
+	print_func("   Call to routine: %15s at line %4d in %s had value "    \
+		   "%s \n", (where), (int)__LINE__, __FILE__, x);    \
+    }									      \
+    if (HDstrcmp(x, val)) {					              \
+	TestErrPrintf("*** UNEXPECTED VALUE from %s should be %s, but is %s at line %4d " \
+		   "in %s\n", where, val, x, (int)__LINE__, __FILE__);        \
+	H5Eprint (stdout);					              \
+    }									      \
+} while(0)
+
+/* Used to document process through a test and to check for errors */
+#define RESULT(ret,func) do {						      \
+    if (GetTestVerbosity()>VERBO_MED) {					      \
+	print_func("   Call to routine: %15s at line %4d in %s returned "     \
+		   "%ld\n", func, (int)__LINE__, __FILE__, (long)(ret));      \
+    }									      \
+    if (GetTestVerbosity()>=VERBO_HI)					      \
+        H5Eprint(stdout);					              \
+    if ((ret) == FAIL) {						      \
+	TestErrPrintf("*** UNEXPECTED RETURN from %s is %ld at line %4d "     \
+		   "in %s\n", func, (long)(ret), (int)__LINE__, __FILE__);    \
+	H5Eprint (stdout);						      \
+    }									      \
+} while(0)
+
+/* Used to document process through a test */
+#define MESSAGE(V,A) {if (GetTestVerbosity()>(V)) print_func A;}
+
+/* definitions for command strings */
+#define VERBOSITY_STR   "Verbosity"
+#define SKIP_STR        "Skip"
+#define TEST_STR        "Test"
+#define CLEAN_STR       "Cleanup"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Prototypes for the test routines */
+void                    test_metadata(void);
+void                    test_tst(void);
+void                    test_heap(void);
+void                    test_refstr(void);
+void                    test_file(void);
+void                    test_h5t(void);
+void                    test_h5s(void);
+void                    test_h5d(void);
+void                    test_attr(void);
+void                    test_select(void);
+void                    test_time(void);
+void                    test_reference(void);
+void                    test_vltypes(void);
+void                    test_vlstrings(void);
+void                    test_iterate(void);
+void                    test_array(void);
+void                    test_genprop(void);
+void			test_configure(void);
+void			test_misc(void);
+void			test_skiplist(void);
+
+/* Prototypes for the cleanup routines */
+void                    cleanup_metadata(void);
+void                    cleanup_file(void);
+void                    cleanup_h5s(void);
+void                    cleanup_attr(void);
+void                    cleanup_select(void);
+void                    cleanup_time(void);
+void                    cleanup_reference(void);
+void                    cleanup_vltypes(void);
+void                    cleanup_vlstrings(void);
+void                    cleanup_iterate(void);
+void                    cleanup_array(void);
+void                    cleanup_genprop(void);
+void			cleanup_configure(void);
+void			cleanup_misc(void);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* TESTHDF5_H */

Added: packages/hdf5/branches/upstream/current/test/testmeta.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/testmeta.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/testmeta.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,241 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 program illustrates assertion errors when linked
+ * to HDF5 1.4.1-post2 or 1.4.2-pre3 debug library.
+ *
+ * If the assertion errors are ignored, the program eventially causes
+ * an error in H5Gcreate when writing object 83381.
+ *
+ * When writing in single file mode, the assertion errors still occur
+ * but the H5Gcreate error does not.
+ */
+
+
+#include "hdf5.h"
+
+#define FILEN		"testmeta.h5"
+
+#define MEMB_SIZE		100000000
+#define CHUNK_SIZE		512
+
+#define NDATAARRAYS		3
+/*#define NPOINTS			2048*/
+#define NPOINTS			20
+#define NEXTARRAYS		10
+#define NWATTRS			2
+#define NDATAOBJECTS	100000
+
+int main(void)
+{
+    hid_t	file_id, prop_id, memspace_id, type_id;
+    hid_t	group_id;
+    hid_t	dataset_id, dataspace_id;
+    herr_t	status;
+    hsize_t	dims[1];
+    hsize_t	maxdims[1];
+    float	data[NPOINTS];
+    float	floatval;
+    unsigned	numdataobj	= 0;
+    unsigned	i, j;
+    char	name[80];
+    hsize_t	start[1]			= {0};
+    hsize_t	stride[1]			= {1};
+    hsize_t	count[1]			= {1};
+
+    /* Create a file */
+    file_id = H5Fcreate(FILEN, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create a dataset to hold the number of data objects */
+    /* Create the data space */
+    dataspace_id = H5Screate(H5S_SCALAR);
+
+    /* Create dataset */
+    dataset_id = H5Dcreate(file_id, "/NumDataObj",
+                                    H5T_NATIVE_UINT, dataspace_id, H5P_DEFAULT);
+
+    /* Write value to NumDataObj dataset */
+    status = H5Dwrite(dataset_id, H5T_NATIVE_UINT, H5S_ALL,
+            H5S_ALL, H5P_DEFAULT, &numdataobj);
+
+    /* Close the identifiers */
+    status = H5Dclose(dataset_id);
+    status = H5Sclose(dataspace_id);
+
+    /* Create extendible arrays */
+    /* Set up for extendible dataset */
+    prop_id = H5Pcreate(H5P_DATASET_CREATE);
+    dims[0] = CHUNK_SIZE;
+    status = H5Pset_chunk(prop_id, 1, dims);
+
+    /* Create dataspace */
+    dims[0]=1;
+    maxdims[0]=H5S_UNLIMITED;
+    dataspace_id = H5Screate_simple(1, dims, maxdims);
+
+    for(i=0; i<NEXTARRAYS; i++)
+    {
+        /* Create dataset */
+        sprintf(name, "/ExtArray%06d", i);
+        dataset_id = H5Dcreate(file_id, name,
+                H5T_NATIVE_FLOAT, dataspace_id, prop_id);
+
+        /* Close the identifier */
+        status = H5Dclose(dataset_id);
+    }
+
+    /* Close the identifiers */
+    status = H5Sclose(dataspace_id);
+    status = H5Pclose(prop_id);
+
+    /* Create group to hold data object data arrays */
+    group_id = H5Gcreate(file_id, "/DataArray", 0);
+    H5Gclose(group_id);
+
+    for(j=0; j<NDATAOBJECTS; j++)
+    {
+        printf("\rWriting Object #%d of %d", j+1, NDATAOBJECTS);
+        fflush(stdout);
+
+        floatval = (float)j;
+
+        /* Create group to hold data arrays for this object */
+        sprintf(name, "/DataArray/%06d", j);
+        group_id = H5Gcreate(file_id, name, 0);
+        if(group_id < 0)
+        {
+            fprintf(stderr, "Failed to create DataArray group.\n");
+            status = H5Fclose(file_id);
+            return -1;
+        }
+
+        /* Loop over data arrays */
+        for(i=0; i<NDATAARRAYS; i++)
+        {
+            /* Create dataspace */
+            dims[0]=NPOINTS;
+            maxdims[0]=NPOINTS;
+            dataspace_id = H5Screate_simple(1 ,dims, maxdims);
+
+            /* Create dataset */
+            sprintf(name, "DataArray%06d", i);
+            dataset_id = H5Dcreate(group_id, name,
+                    H5T_NATIVE_FLOAT, dataspace_id, H5P_DEFAULT);
+            if(dataset_id < 0)
+            {
+                fprintf(stderr, "Failed to create DataArray dataset.\n");
+                status = H5Fclose(file_id);
+                return -1;
+            }
+
+            /* Write the data array data */
+            status = H5Dwrite(dataset_id, H5T_NATIVE_FLOAT, H5S_ALL,
+                    H5S_ALL, H5P_DEFAULT, data);
+            if(status < 0)
+            {
+                fprintf(stderr, "Failed to write DataArray dataset.\n");
+                status = H5Fclose(file_id);
+                return -1;
+            }
+
+            /* Close the identifiers */
+            status = H5Dclose(dataset_id);
+            status = H5Sclose(dataspace_id);
+        }
+
+        /* Open NumDataObj dataset */
+        dataset_id = H5Dopen(file_id, "/NumDataObj");
+        if(dataset_id < 0)
+        {
+            fprintf(stderr, "Failed to open NumDataObj dataset.\n");
+            status = H5Fclose(file_id);
+            return -1;
+        }
+
+        /* Write value to NumDataObj dataset */
+        numdataobj = j + 1;
+        status = H5Dwrite(dataset_id, H5T_NATIVE_UINT, H5S_ALL,
+                H5S_ALL, H5P_DEFAULT, &numdataobj);
+        if(status < 0)
+        {
+            fprintf(stderr, "Failed to write NumDataObj dataset.\n");
+            status = H5Fclose(file_id);
+            return -1;
+        }
+
+        /* Close identifiers */
+        status = H5Dclose(dataset_id);
+        status = H5Gclose(group_id);
+
+        /* Extend attribute arrays */
+        for(i=0; i<NEXTARRAYS; i++)
+        {
+            /* Open extendable dataset */
+            sprintf(name, "/ExtArray%06d", i);
+            dataset_id = H5Dopen(file_id, name);
+            if(dataset_id < 0)
+            {
+                fprintf(stderr, "Failed to open ExtArray dataset.\n");
+                status = H5Fclose(file_id);
+                return -1;
+            }
+
+            /* Extend attribute dataset */
+            dims[0] = (hsize_t)j + 1;
+            status = H5Dextend(dataset_id, dims);
+            if(status < 0)
+            {
+                fprintf(stderr, "Failed to extend DataArray dataset.\n");
+                status = H5Fclose(file_id);
+                return -1;
+            }
+
+            /* Select element and write value to attribute dataset */
+            dims[0] = 1;
+            memspace_id = H5Screate_simple(1, dims, dims);
+            dataspace_id = H5Dget_space(dataset_id);
+            type_id = H5Dget_type(dataset_id);
+
+            start[0] = 0;
+            status = H5Sselect_hyperslab(memspace_id, H5S_SELECT_SET,
+                    start, stride, count, NULL);
+            start[0] = (hssize_t)j;
+            status = H5Sselect_hyperslab(dataspace_id, H5S_SELECT_SET,
+                    start, stride, count, NULL);
+            status = H5Dwrite(dataset_id, type_id, memspace_id,
+                    dataspace_id, H5P_DEFAULT, &floatval);
+            if(status < 0)
+            {
+                fprintf(stderr, "Failed to write DataArray dataset.\n");
+                status = H5Fclose(file_id);
+                return -1;
+            }
+
+            /* Close identifiers */
+            status = H5Tclose(type_id);
+            status = H5Sclose(dataspace_id);
+            status = H5Sclose(memspace_id);
+            status = H5Dclose(dataset_id);
+        }
+    }
+
+
+    /* Close the file */
+    status = H5Fclose(file_id);
+
+    printf("\n");
+
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/test/tfile.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/tfile.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/tfile.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1862 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/***********************************************************
+*
+* Test program:	 tfile
+*
+* Test the low-level file I/O features.
+*
+*************************************************************/
+
+#include "hdf5.h"
+#include "testhdf5.h"
+
+#include "H5Bprivate.h"
+#include "H5Pprivate.h"
+
+#define F1_USERBLOCK_SIZE  (hsize_t)0
+#define F1_OFFSET_SIZE	   sizeof(haddr_t)
+#define F1_LENGTH_SIZE	   sizeof(hsize_t)
+#define F1_SYM_LEAF_K	   4
+#define F1_SYM_INTERN_K	   16
+#define FILE1	"tfile1.h5"
+
+#define F2_USERBLOCK_SIZE  (hsize_t)512
+#define F2_OFFSET_SIZE	   8
+#define F2_LENGTH_SIZE	   8
+#define F2_SYM_LEAF_K	   8
+#define F2_SYM_INTERN_K	   32
+#define F2_RANK            2
+#define F2_DIM0            4
+#define F2_DIM1            6
+#define F2_DSET            "dset"
+#define FILE2	"tfile2.h5"
+
+#define F3_USERBLOCK_SIZE  (hsize_t)0
+#define F3_OFFSET_SIZE	   F2_OFFSET_SIZE
+#define F3_LENGTH_SIZE	   F2_LENGTH_SIZE
+#define F3_SYM_LEAF_K	   F2_SYM_LEAF_K
+#define F3_SYM_INTERN_K	   F2_SYM_INTERN_K
+#define FILE3	"tfile3.h5"
+
+#define GRP_NAME         "/group"
+#define DSET_NAME         "dataset"
+#define ATTR_NAME          "attr"
+#define TYPE_NAME          "type"
+#define FILE4	           "tfile4.h5"
+
+#define OBJ_ID_COUNT_0     0
+#define OBJ_ID_COUNT_1     1
+#define OBJ_ID_COUNT_2     2
+#define OBJ_ID_COUNT_3     3
+#define OBJ_ID_COUNT_4     4
+#define OBJ_ID_COUNT_6	   6
+#define OBJ_ID_COUNT_8     8
+
+#define GROUP1  "Group1"
+#define DSET1   "Dataset1"
+#define DSET2   "/Group1/Dataset2"
+
+#define TESTA_GROUPNAME "group"
+#define TESTA_DSETNAME "dataset"
+#define TESTA_ATTRNAME "attribute"
+#define TESTA_DTYPENAME "compound"
+#define TESTA_NAME_BUF_SIZE     64
+#define TESTA_RANK 2
+#define TESTA_NX 4
+#define TESTA_NY 5
+
+static void
+create_objects(hid_t, hid_t, hid_t *, hid_t *, hid_t *, hid_t *);
+static void
+test_obj_count_and_id(hid_t, hid_t, hid_t, hid_t, hid_t, hid_t);
+static void
+check_file_id(hid_t, hid_t);
+
+/****************************************************************
+**
+**  test_file_create(): Low-level file creation I/O test routine.
+**
+****************************************************************/
+static void
+test_file_create(void)
+{
+    hid_t		fid1, fid2, fid3; /* HDF5 File IDs		*/
+    hid_t		tmpl1, tmpl2;	/*file creation templates	*/
+    hsize_t		ublock;		/*sizeof userblock		*/
+    size_t		parm;		/*file-creation parameters	*/
+    size_t		parm2;		/*file-creation parameters	*/
+    unsigned		iparm;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int		iparm2;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    unsigned		iparm2;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    herr_t		ret;		/*generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Low-Level File Creation I/O\n"));
+
+    /* Test create with various sequences of H5F_ACC_EXCL and */
+    /* H5F_ACC_TRUNC flags */
+
+    /* Create with H5F_ACC_EXCL */
+    /* First ensure the file does not exist */
+    remove(FILE1);
+    fid1 = H5Fcreate(FILE1, H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /*
+     * try to create the same file with H5F_ACC_TRUNC. This should fail
+     * because fid1 is the same file and is currently open.
+     */
+    fid2 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    VERIFY(fid2, FAIL, "H5Fcreate");
+
+    /* Close all files */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+    ret = H5Fclose(fid2);
+    VERIFY(ret, FAIL, "H5Fclose"); /*file should not have been open */
+
+    /*
+     * Try again with H5F_ACC_EXCL. This should fail because the file already
+     * exists from the previous steps.
+     */
+    fid1 = H5Fcreate(FILE1, H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT);
+    VERIFY(fid1, FAIL, "H5Fcreate");
+
+    /* Test create with H5F_ACC_TRUNC. This will truncate the existing file. */
+    fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /*
+     * Try to truncate first file again. This should fail because fid1 is the
+     * same file and is currently open.
+     */
+    fid2 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    VERIFY(fid2, FAIL, "H5Fcreate");
+
+    /*
+     * Try with H5F_ACC_EXCL. This should fail too because the file already
+     * exists.
+     */
+    fid2 = H5Fcreate(FILE1, H5F_ACC_EXCL, H5P_DEFAULT, H5P_DEFAULT);
+    VERIFY(fid2, FAIL, "H5Fcreate");
+
+    /* Get the file-creation template */
+    tmpl1 = H5Fget_create_plist(fid1);
+    CHECK(tmpl1, FAIL, "H5Fget_create_plist");
+
+    /* Get the file-creation parameters */
+    ret = H5Pget_userblock(tmpl1, &ublock);
+    CHECK(ret, FAIL, "H5Pget_userblock");
+    VERIFY(ublock, F1_USERBLOCK_SIZE, "H5Pget_userblock");
+
+    ret = H5Pget_sizes(tmpl1, &parm, &parm2);
+    CHECK(ret, FAIL, "H5Pget_sizes");
+    VERIFY(parm, F1_OFFSET_SIZE, "H5Pget_sizes");
+    VERIFY(parm2, F1_LENGTH_SIZE, "H5Pget_sizes");
+
+    ret = H5Pget_sym_k(tmpl1, &iparm, &iparm2);
+    CHECK(ret, FAIL, "H5Pget_sym_k");
+    VERIFY(iparm, F1_SYM_INTERN_K, "H5Pget_sym_k");
+    VERIFY(iparm2, F1_SYM_LEAF_K, "H5Pget_sym_k");
+
+    /* Release file-creation template */
+    ret = H5Pclose(tmpl1);
+    CHECK(ret, FAIL, "H5Pclose");
+
+#ifdef LATER
+    /* Double-check that the atom has been vaporized */
+    ret = H5Pclose(tmpl1);
+    VERIFY(ret, FAIL, "H5Pclose");
+#endif
+
+    /* Create a new file with a non-standard file-creation template */
+    tmpl1 = H5Pcreate(H5P_FILE_CREATE);
+    CHECK(tmpl1, FAIL, "H5Pcreate");
+
+    /* Set the new file-creation parameters */
+    ret = H5Pset_userblock(tmpl1, F2_USERBLOCK_SIZE);
+    CHECK(ret, FAIL, "H5Pset_userblock");
+
+    ret = H5Pset_sizes(tmpl1, (size_t)F2_OFFSET_SIZE, (size_t)F2_LENGTH_SIZE);
+    CHECK(ret, FAIL, "H5Pset_sizes");
+
+    ret = H5Pset_sym_k(tmpl1, F2_SYM_INTERN_K, F2_SYM_LEAF_K);
+    CHECK(ret, FAIL, "H5Pset_sym_k");
+
+    /*
+     * Try to create second file, with non-standard file-creation template
+     * params.
+     */
+    fid2 = H5Fcreate(FILE2, H5F_ACC_TRUNC, tmpl1, H5P_DEFAULT);
+    CHECK(fid2, FAIL, "H5Fcreate");
+
+    /* Release file-creation template */
+    ret = H5Pclose(tmpl1);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Make certain we can create a dataset properly in the file with the userblock */
+    {
+       hid_t       dataset_id, dataspace_id;  /* identifiers */
+       hsize_t     dims[F2_RANK];
+       int         data[F2_DIM0][F2_DIM1];
+       unsigned i,j;
+
+       /* Create the data space for the dataset. */
+       dims[0] = F2_DIM0;
+       dims[1] = F2_DIM1;
+       dataspace_id = H5Screate_simple(F2_RANK, dims, NULL);
+       CHECK(dataspace_id, FAIL, "H5Screate_simple");
+
+       /* Create the dataset. */
+       dataset_id = H5Dcreate(fid2, F2_DSET, H5T_NATIVE_INT, dataspace_id, H5P_DEFAULT);
+       CHECK(dataset_id, FAIL, "H5Dcreate");
+
+       for(i=0; i<F2_DIM0; i++)
+           for(j=0; j<F2_DIM1; j++)
+               data[i][j]=i*10+j;
+
+       /* Write data to the new dataset */
+       ret = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
+       CHECK(ret, FAIL, "H5Dwrite");
+
+       /* End access to the dataset and release resources used by it. */
+       ret = H5Dclose(dataset_id);
+       CHECK(ret, FAIL, "H5Dclose");
+
+       /* Terminate access to the data space. */
+       ret = H5Sclose(dataspace_id);
+       CHECK(ret, FAIL, "H5Sclose");
+    }
+
+    /* Get the file-creation template */
+    tmpl1 = H5Fget_create_plist(fid2);
+    CHECK(tmpl1, FAIL, "H5Fget_create_plist");
+
+    /* Get the file-creation parameters */
+    ret = H5Pget_userblock(tmpl1, &ublock);
+    CHECK(ret, FAIL, "H5Pget_userblock");
+    VERIFY(ublock, F2_USERBLOCK_SIZE, "H5Pget_userblock");
+
+    ret = H5Pget_sizes(tmpl1, &parm, &parm2);
+    CHECK(ret, FAIL, "H5Pget_sizes");
+    VERIFY(parm, F2_OFFSET_SIZE, "H5Pget_sizes");
+    VERIFY(parm2, F2_LENGTH_SIZE, "H5Pget_sizes");
+
+    ret = H5Pget_sym_k(tmpl1, &iparm, &iparm2);
+    CHECK(ret, FAIL, "H5Pget_sym_k");
+    VERIFY(iparm, F2_SYM_INTERN_K, "H5Pget_sym_k");
+    VERIFY(iparm2, F2_SYM_LEAF_K, "H5Pget_sym_k");
+
+    /* Clone the file-creation template */
+    tmpl2 = H5Pcopy(tmpl1);
+    CHECK(tmpl2, FAIL, "H5Pcopy");
+
+    /* Release file-creation template */
+    ret = H5Pclose(tmpl1);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Set the new file-creation parameter */
+    ret = H5Pset_userblock(tmpl2, F3_USERBLOCK_SIZE);
+    CHECK(ret, FAIL, "H5Pset_userblock");
+
+    /*
+     * Try to create second file, with non-standard file-creation template
+     * params
+     */
+    fid3 = H5Fcreate(FILE3, H5F_ACC_TRUNC, tmpl2, H5P_DEFAULT);
+    CHECK(fid3, FAIL, "H5Fcreate");
+
+    /* Release file-creation template */
+    ret = H5Pclose(tmpl2);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Get the file-creation template */
+    tmpl1 = H5Fget_create_plist(fid3);
+    CHECK(tmpl1, FAIL, "H5Fget_create_plist");
+
+    /* Get the file-creation parameters */
+    ret = H5Pget_userblock(tmpl1, &ublock);
+    CHECK(ret, FAIL, "H5Pget_userblock");
+    VERIFY(ublock, F3_USERBLOCK_SIZE, "H5Pget_userblock");
+
+    ret = H5Pget_sizes(tmpl1, &parm, &parm2);
+    CHECK(ret, FAIL, "H5Pget_sizes");
+    VERIFY(parm, F3_OFFSET_SIZE, "H5Pget_sizes");
+    VERIFY(parm2, F3_LENGTH_SIZE, "H5Pget_sizes");
+
+    ret = H5Pget_sym_k(tmpl1, &iparm, &iparm2);
+    CHECK(ret, FAIL, "H5Pget_sym_k");
+    VERIFY(iparm, F3_SYM_INTERN_K, "H5Pget_sym_k");
+    VERIFY(iparm2, F3_SYM_LEAF_K, "H5Pget_sym_k");
+
+    /* Release file-creation template */
+    ret = H5Pclose(tmpl1);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close first file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Close second file */
+    ret = H5Fclose(fid2);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Close third file */
+    ret = H5Fclose(fid3);
+    CHECK(ret, FAIL, "H5Fclose");
+}				/* test_file_create() */
+
+/****************************************************************
+**
+**  test_file_open(): Low-level file open I/O test routine.
+**
+****************************************************************/
+static void
+test_file_open(void)
+{
+    hid_t		fid1, fid2;     /*HDF5 File IDs			*/
+    hid_t               did;            /*dataset ID                    */
+    hid_t               fapl_id;        /*file access property list ID  */
+    hid_t		tmpl1;		/*file creation templates	*/
+    hsize_t		ublock;		/*sizeof user block		*/
+    size_t		parm;		/*file-creation parameters	*/
+    size_t		parm2;		/*file-creation parameters	*/
+    unsigned		iparm;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int		iparm2;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    unsigned		iparm2;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    herr_t		ret;		/*generic return value		*/
+
+    /*
+     * Test single file open
+     */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Low-Level File Opening I/O\n"));
+
+    /* Open first file */
+    fid1 = H5Fopen(FILE2, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Get the file-creation template */
+    tmpl1 = H5Fget_create_plist(fid1);
+    CHECK(tmpl1, FAIL, "H5Fget_create_plist");
+
+    /* Get the file-creation parameters */
+    ret = H5Pget_userblock(tmpl1, &ublock);
+    CHECK(ret, FAIL, "H5Pget_userblock");
+    VERIFY(ublock, F2_USERBLOCK_SIZE, "H5Pget_userblock");
+
+    ret = H5Pget_sizes(tmpl1, &parm, &parm2);
+    CHECK(ret, FAIL, "H5Pget_sizes");
+    VERIFY(parm, F2_OFFSET_SIZE, "H5Pget_sizes");
+    VERIFY(parm2, F2_LENGTH_SIZE, "H5Pget_sizes");
+
+    ret = H5Pget_sym_k(tmpl1, &iparm, &iparm2);
+    CHECK(ret, FAIL, "H5Pget_sym_k");
+    VERIFY(iparm, F2_SYM_INTERN_K, "H5Pget_sym_k");
+    VERIFY(iparm2, F2_SYM_LEAF_K, "H5Pget_sym_k");
+
+    /* Release file-creation template */
+    ret = H5Pclose(tmpl1);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close first file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /*
+     * Test two file opens: one is opened H5F_ACC_RDONLY and H5F_CLOSE_WEAK.
+     * It's closed with an object left open.  Then another is opened
+     * H5F_ACC_RDWR, which should fail.
+     */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing 2 File Openings\n"));
+
+    /* Create file access property list */
+    fapl_id = H5Pcreate(H5P_FILE_ACCESS);
+    CHECK(fapl_id, FAIL, "H5Pcreate");
+
+    /* Set file close mode to H5F_CLOSE_WEAK */
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_WEAK);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    /* Open file for first time */
+    fid1 = H5Fopen(FILE2, H5F_ACC_RDONLY, fapl_id);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open dataset */
+    did = H5Dopen(fid1, F2_DSET);
+    CHECK(did, FAIL, "H5Dopen");
+
+    /* Close first open */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Open file for second time, which should fail. */
+    fid2 = H5Fopen(FILE2, H5F_ACC_RDWR, fapl_id);
+    VERIFY(fid2, FAIL, "H5Fopen");
+
+    /* Close dataset from first open */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+}   /* test_file_open() */
+
+/****************************************************************
+**
+**  test_file_close():  low-level file close test routine.
+**                      It mainly tests behavior with close degree.
+**
+*****************************************************************/
+static void
+test_file_close(void)
+{
+    hid_t               fid1, fid2;
+    hid_t               fapl_id, access_id;
+    hid_t		dataset_id, group_id1, group_id2, group_id3;
+    H5F_close_degree_t  fc_degree;
+    herr_t              ret;
+
+    /* Test behavior while opening file multiple times with different
+     * file close degree value
+     */
+    fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    fapl_id = H5Pcreate(H5P_FILE_ACCESS);
+    CHECK(fapl_id, FAIL, "H5Pcreate");
+
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_STRONG);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    ret = H5Pget_fclose_degree(fapl_id, &fc_degree);
+    VERIFY(fc_degree, H5F_CLOSE_STRONG, "H5Pget_fclose_degree");
+
+    /* should fail */
+    fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
+    VERIFY(fid2, FAIL, "H5Fopen");
+
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_DEFAULT);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    /* should succeed */
+    fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
+    CHECK(fid2, FAIL, "H5Fopen");
+
+    /* Close first open */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Close second open */
+    ret = H5Fclose(fid2);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Test behavior while opening file multiple times with different file
+     * close degree
+     */
+    fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_WEAK);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    ret = H5Pget_fclose_degree(fapl_id, &fc_degree);
+    VERIFY(fc_degree, H5F_CLOSE_WEAK, "H5Pget_fclose_degree");
+
+    /* should succeed */
+    fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
+    CHECK(fid2, FAIL, "H5Fopen");
+
+    /* Close first open */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Close second open */
+    ret = H5Fclose(fid2);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Test behavior while opening file multiple times with file close
+     * degree STRONG */
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_STRONG);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_WEAK);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    /* should fail */
+    fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
+    VERIFY(fid2, FAIL, "H5Fopen");
+
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_STRONG);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    /* should succeed */
+    fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
+    CHECK(fid2, FAIL, "H5Fopen");
+
+    /* Create a dataset and a group in each file open respectively */
+    create_objects(fid1, fid2, NULL, NULL, NULL, NULL);
+
+    /* Close first open */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Close second open */
+    ret = H5Fclose(fid2);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Test behavior while opening file multiple times with file close
+     * degree SEMI */
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_SEMI);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_DEFAULT);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    /* should fail */
+    fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
+    VERIFY(fid2, FAIL, "H5Fopen");
+
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_SEMI);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    /* should succeed */
+    fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
+    CHECK(fid2, FAIL, "H5Fopen");
+
+    /* Create a dataset and a group in each file open respectively */
+    create_objects(fid1, fid2, &dataset_id, &group_id1, &group_id2, &group_id3);
+
+    /* Close first open, should fail since it is SEMI and objects are
+     * still open. */
+    ret = H5Fclose(fid1);
+    VERIFY(ret, FAIL, "H5Fclose");
+
+    /* Close second open, should fail since it is SEMI and objects are
+     * still open. */
+    ret = H5Fclose(fid2);
+    VERIFY(ret, FAIL, "H5Fclose");
+
+    ret = H5Dclose(dataset_id);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close first open */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    ret = H5Gclose(group_id1);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Gclose(group_id2);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Close second open, should fail since it is SEMI and one group ID is
+     * still open. */
+    ret = H5Fclose(fid2);
+    VERIFY(ret, FAIL, "H5Fclose");
+
+    /* Same check with H5Idec_ref() (should fail also) */
+    ret = H5Idec_ref(fid2);
+    VERIFY(ret, FAIL, "H5Idec_ref");
+
+    ret = H5Gclose(group_id3);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Close second open again.  Should succeed. */
+    ret = H5Fclose(fid2);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Test behavior while opening file multiple times with file close
+     * degree WEAK */
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_WEAK);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_SEMI);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    /* should fail */
+    fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
+    VERIFY(fid2, FAIL, "H5Fopen");
+
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_DEFAULT);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    /* should succeed */
+    fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
+    CHECK(fid2, FAIL, "H5Fopen");
+
+    /* Create a dataset and a group in each file open respectively */
+    create_objects(fid1, fid2, &dataset_id, &group_id1, &group_id2, &group_id3);
+
+    /* Create more new files and test object count and ID list functions */
+    test_obj_count_and_id(fid1, fid2, dataset_id, group_id1,
+				group_id2, group_id3);
+
+    /* Close first open */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Close second open.  File will be finally closed after all objects
+     * are closed. */
+    ret = H5Fclose(fid2);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    ret = H5Dclose(dataset_id);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    ret = H5Gclose(group_id1);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Gclose(group_id2);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Gclose(group_id3);
+    CHECK(ret, FAIL, "H5Gclose");
+
+
+    /* Test behavior while opening file multiple times with file close
+     * degree DEFAULT */
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_DEFAULT);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_SEMI);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    /* should fail */
+    fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
+    VERIFY(fid2, FAIL, "H5Fopen");
+
+    ret = H5Pset_fclose_degree(fapl_id, H5F_CLOSE_DEFAULT);
+    CHECK(ret, FAIL, "H5Pset_fclose_degree");
+
+    /* should succeed */
+    fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, fapl_id);
+    CHECK(fid2, FAIL, "H5Fopen");
+
+    /* Create a dataset and a group in each file open respectively */
+    create_objects(fid1, fid2, &dataset_id, &group_id1, &group_id2, &group_id3);
+
+    access_id = H5Fget_access_plist(fid1);
+    CHECK(access_id, FAIL, "H5Fget_access_plist");
+
+    ret= H5Pget_fclose_degree(access_id, &fc_degree);
+    CHECK(ret, FAIL, "H5Pget_fclose_degree");
+
+    switch(fc_degree) {
+	case H5F_CLOSE_STRONG:
+    	    /* Close first open */
+    	    ret = H5Fclose(fid1);
+    	    CHECK(ret, FAIL, "H5Fclose");
+    	    /* Close second open */
+    	    ret = H5Fclose(fid2);
+    	    CHECK(ret, FAIL, "H5Fclose");
+	    break;
+	case H5F_CLOSE_SEMI:
+            /* Close first open */
+            ret = H5Fclose(fid1);
+            CHECK(ret, FAIL, "H5Fclose");
+    	    ret = H5Dclose(dataset_id);
+            CHECK(ret, FAIL, "H5Dclose");
+            ret = H5Gclose(group_id1);
+    	    CHECK(ret, FAIL, "H5Gclose");
+            ret = H5Gclose(group_id2);
+            CHECK(ret, FAIL, "H5Gclose");
+            ret = H5Gclose(group_id3);
+            CHECK(ret, FAIL, "H5Gclose");
+            /* Close second open */
+            ret = H5Fclose(fid2);
+            CHECK(ret, FAIL, "H5Fclose");
+	    break;
+	case H5F_CLOSE_WEAK:
+            /* Close first open */
+            ret = H5Fclose(fid1);
+            CHECK(ret, FAIL, "H5Fclose");
+            /* Close second open */
+            ret = H5Fclose(fid2);
+            CHECK(ret, FAIL, "H5Fclose");
+            ret = H5Dclose(dataset_id);
+            CHECK(ret, FAIL, "H5Dclose");
+            ret = H5Gclose(group_id1);
+            CHECK(ret, FAIL, "H5Gclose");
+            ret = H5Gclose(group_id2);
+            CHECK(ret, FAIL, "H5Gclose");
+            ret = H5Gclose(group_id3);
+            CHECK(ret, FAIL, "H5Gclose");
+	    break;
+        default:
+            CHECK(fc_degree, H5F_CLOSE_DEFAULT, "H5Pget_fclose_degree");
+            break;
+    }
+
+    /* Close file access property list */
+    ret = H5Pclose(fapl_id);
+    CHECK(ret, FAIL, "H5Pclose");
+    ret = H5Pclose(access_id);
+    CHECK(ret, FAIL, "H5Pclose");
+}
+
+/****************************************************************
+**
+**  create_objects(): routine called by test_file_close to create
+**                    a dataset and a group in file.
+**
+****************************************************************/
+static void
+create_objects(hid_t fid1, hid_t fid2, hid_t *ret_did, hid_t *ret_gid1,
+		hid_t *ret_gid2, hid_t *ret_gid3)
+{
+    int	oid_count;
+    herr_t	ret;
+
+    /* Check reference counts of file IDs and opened object IDs.
+     * The verification is hard-coded.  If in any case, this testing
+     * is changed, remember to check this part and update the macros.
+     */
+    {
+       oid_count = H5Fget_obj_count(fid1, H5F_OBJ_ALL);
+       CHECK(oid_count, FAIL, "H5Fget_obj_count");
+       VERIFY(oid_count, OBJ_ID_COUNT_2, "H5Fget_obj_count");
+
+       oid_count = H5Fget_obj_count(fid1, H5F_OBJ_DATASET|H5F_OBJ_GROUP|H5F_OBJ_DATATYPE|H5F_OBJ_ATTR);
+       CHECK(oid_count, FAIL, "H5Fget_obj_count");
+       VERIFY(oid_count, OBJ_ID_COUNT_0, "H5Fget_obj_count");
+
+       oid_count = H5Fget_obj_count(fid2, H5F_OBJ_ALL);
+       CHECK(oid_count, FAIL, "H5Fget_obj_count");
+       VERIFY(oid_count, OBJ_ID_COUNT_2, "H5Fget_obj_count");
+
+       oid_count = H5Fget_obj_count(fid2, H5F_OBJ_DATASET|H5F_OBJ_GROUP|H5F_OBJ_DATATYPE|H5F_OBJ_ATTR);
+       CHECK(oid_count, FAIL, "H5Fget_obj_count");
+       VERIFY(oid_count, OBJ_ID_COUNT_0, "H5Fget_obj_count");
+    }
+
+    /* create a dataset in the first file open */
+    {
+       hid_t       dataset_id, dataspace_id;  /* identifiers */
+       hsize_t     dims[F2_RANK];
+       int         data[F2_DIM0][F2_DIM1];
+       unsigned    i,j;
+
+       /* Create the data space for the dataset. */
+       dims[0] = F2_DIM0;
+       dims[1] = F2_DIM1;
+       dataspace_id = H5Screate_simple(F2_RANK, dims, NULL);
+       CHECK(dataspace_id, FAIL, "H5Screate_simple");
+
+       /* Create the dataset. */
+       dataset_id = H5Dcreate(fid1, "/dset", H5T_NATIVE_INT, dataspace_id,
+                        H5P_DEFAULT);
+       CHECK(dataset_id, FAIL, "H5Dcreate");
+
+       for(i=0; i<F2_DIM0; i++)
+           for(j=0; j<F2_DIM1; j++)
+               data[i][j]=i*10+j;
+
+       /* Write data to the new dataset */
+       ret = H5Dwrite(dataset_id, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+                H5P_DEFAULT, data);
+       CHECK(ret, FAIL, "H5Dwrite");
+
+       if(ret_did != NULL)
+           *ret_did = dataset_id;
+
+       /* Terminate access to the data space. */
+       ret = H5Sclose(dataspace_id);
+       CHECK(ret, FAIL, "H5Sclose");
+    }
+
+    /* Create a group in the second file open */
+    {
+        hid_t   gid1, gid2, gid3;
+        gid1 = H5Gcreate(fid2, "/group", (size_t)0);
+        CHECK(gid1, FAIL, "H5Gcreate");
+        if(ret_gid1 != NULL)
+            *ret_gid1 = gid1;
+
+        gid2 = H5Gopen(fid2, "/group");
+        CHECK(gid2, FAIL, "H5Gopen");
+        if(ret_gid2 != NULL)
+            *ret_gid2 = gid2;
+
+        gid3 = H5Gopen(fid2, "/group");
+        CHECK(gid3, FAIL, "H5Gopen");
+        if(ret_gid3 != NULL)
+            *ret_gid3 = gid3;
+    }
+
+    /* Check reference counts of file IDs and opened object IDs.
+     * The verification is hard-coded.  If in any case, this testing
+     * is changed, remember to check this part and update the macros.
+     */
+    {
+       oid_count = H5Fget_obj_count(fid1, H5F_OBJ_ALL);
+       CHECK(oid_count, FAIL, "H5Fget_obj_count");
+       VERIFY(oid_count, OBJ_ID_COUNT_6, "H5Fget_obj_count");
+
+       oid_count = H5Fget_obj_count(fid1, H5F_OBJ_DATASET|H5F_OBJ_GROUP|H5F_OBJ_DATATYPE|H5F_OBJ_ATTR);
+       CHECK(oid_count, FAIL, "H5Fget_obj_count");
+       VERIFY(oid_count, OBJ_ID_COUNT_4, "H5Fget_obj_count");
+
+       oid_count = H5Fget_obj_count(fid2, H5F_OBJ_ALL);
+       CHECK(oid_count, FAIL, "H5Fget_obj_count");
+       VERIFY(oid_count, OBJ_ID_COUNT_6, "H5Fget_obj_count");
+
+       oid_count = H5Fget_obj_count(fid2, H5F_OBJ_DATASET|H5F_OBJ_GROUP|H5F_OBJ_DATATYPE|H5F_OBJ_ATTR);
+       CHECK(oid_count, FAIL, "H5Fget_obj_count");
+       VERIFY(oid_count, OBJ_ID_COUNT_4, "H5Fget_obj_count");
+    }
+}
+
+/****************************************************************
+**
+**  test_get_file_id(): Test H5Iget_file_id()
+**
+*****************************************************************/
+static void
+test_get_file_id(void)
+{
+    hid_t               fid, fid2, fid3;
+    hid_t		datatype_id, dataset_id, dataspace_id, group_id, attr_id;
+    hid_t               plist;
+    hsize_t             dims[F2_RANK];
+    herr_t              ret;
+
+    /* Create a file */
+    fid = H5Fcreate(FILE4, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Test H5Iget_file_id() */
+    check_file_id(fid, fid);
+
+    /* Create a group in the file.  Make a duplicated file ID from the group.
+     * And close this duplicated ID
+     */
+    group_id = H5Gcreate(fid, GRP_NAME, (size_t)0);
+    CHECK(group_id, FAIL, "H5Gcreate");
+
+    /* Test H5Iget_file_id() */
+    check_file_id(fid, group_id);
+
+    /* Close the file and get file ID from the group ID */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Test H5Iget_file_id() */
+    check_file_id(-1, group_id);
+
+    ret = H5Gclose(group_id);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Open the file again.  Test H5Iget_file_id() */
+    fid = H5Fopen(FILE4, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    group_id = H5Gopen(fid, GRP_NAME);
+    CHECK(group_id, FAIL, "H5Gcreate");
+
+    /* Test H5Iget_file_id() */
+    check_file_id(fid, group_id);
+
+    /* Open the file for second time.  Test H5Iget_file_id() */
+    fid3 = H5Freopen(fid);
+    CHECK(fid3, FAIL, "H5Freopen");
+
+    /* Test H5Iget_file_id() */
+    check_file_id(fid3, fid3);
+
+    ret = H5Fclose(fid3);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Create a dataset in the group.  Make a duplicated file ID from the
+     * dataset.  And close this duplicated ID.
+     */
+    dims[0] = F2_DIM0;
+    dims[1] = F2_DIM1;
+    dataspace_id = H5Screate_simple(F2_RANK, dims, NULL);
+    CHECK(dataspace_id, FAIL, "H5Screate_simple");
+
+    dataset_id = H5Dcreate(group_id, DSET_NAME, H5T_NATIVE_INT, dataspace_id,
+                        H5P_DEFAULT);
+    CHECK(dataset_id, FAIL, "H5Dcreate");
+
+    /* Test H5Iget_file_id() */
+    check_file_id(fid, dataset_id);
+
+    /* Create an attribute for the dataset.  Make a duplicated file ID from
+     * this attribute.  And close it.
+     */
+    attr_id=H5Acreate(dataset_id,ATTR_NAME,H5T_NATIVE_INT,dataspace_id,H5P_DEFAULT);
+    CHECK(ret, FAIL, "H5Acreate");
+
+    /* Test H5Iget_file_id() */
+    check_file_id(fid, attr_id);
+
+    /* Create a named datatype.  Make a duplicated file ID from
+     * this attribute.  And close it.
+     */
+    datatype_id=H5Tcopy(H5T_NATIVE_INT);
+    CHECK(ret, FAIL, "H5Acreate");
+
+    ret = H5Tcommit(fid, TYPE_NAME, datatype_id);
+    CHECK(ret, FAIL, "H5Tcommit");
+
+    /* Test H5Iget_file_id() */
+    check_file_id(fid, datatype_id);
+
+    /* Create a property list and try to get file ID from it.
+     * Supposed to fail.
+     */
+    plist = H5Pcreate(H5P_FILE_ACCESS);
+    CHECK(plist, FAIL, "H5Pcreate");
+
+    H5E_BEGIN_TRY {
+        fid2 = H5Iget_file_id(plist);
+    } H5E_END_TRY;
+    VERIFY(fid2, FAIL, "H5Iget_file_id");
+
+    /* Close objects */
+    ret = H5Tclose(datatype_id);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    ret = H5Aclose(attr_id);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    ret = H5Sclose(dataspace_id);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret = H5Dclose(dataset_id);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    ret = H5Gclose(group_id);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+}
+
+/****************************************************************
+**
+**  check_file_id(): Internal function of test_get_file_id()
+**
+*****************************************************************/
+static void
+check_file_id(hid_t fid, hid_t object_id)
+{
+    hid_t               new_fid;
+    herr_t              ret;
+
+    /* Return a duplicated file ID even not expecting user to do it.
+     * And close this duplicated ID
+     */
+    new_fid = H5Iget_file_id(object_id);
+
+    if(fid >=0)
+        VERIFY(new_fid, fid, "H5Iget_file_id");
+    else
+        CHECK(new_fid, FAIL, "H5Iget_file_id");
+
+    ret = H5Fclose(new_fid);
+    CHECK(ret, FAIL, "H5Fclose");
+}
+
+/****************************************************************
+**
+**  test_obj_count_and_id(): test object count and ID list functions.
+**
+****************************************************************/
+static void
+test_obj_count_and_id(hid_t fid1, hid_t fid2, hid_t did, hid_t gid1,
+			hid_t gid2, hid_t gid3)
+{
+    hid_t    fid3, fid4;
+    int oid_count;
+    herr_t   ret;
+
+    /* Create two new files */
+    fid3 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid3, FAIL, "H5Fcreate");
+    fid4 = H5Fcreate(FILE3, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid4, FAIL, "H5Fcreate");
+
+    /* test object count of all files IDs open */
+    oid_count = H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_FILE);
+    CHECK(oid_count, FAIL, "H5Fget_obj_count");
+    VERIFY(oid_count, OBJ_ID_COUNT_4, "H5Fget_obj_count");
+
+    /* test object count of all datasets open */
+    oid_count = H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_DATASET);
+    CHECK(oid_count, FAIL, "H5Fget_obj_count");
+    VERIFY(oid_count, OBJ_ID_COUNT_1, "H5Fget_obj_count");
+
+    /* test object count of all groups open */
+    oid_count = H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_GROUP);
+    CHECK(oid_count, FAIL, "H5Fget_obj_count");
+    VERIFY(oid_count, OBJ_ID_COUNT_3, "H5Fget_obj_count");
+
+    /* test object count of all named datatypes open */
+    oid_count = H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_DATATYPE);
+    CHECK(oid_count, FAIL, "H5Fget_obj_count");
+    VERIFY(oid_count, OBJ_ID_COUNT_0, "H5Fget_obj_count");
+
+    /* test object count of all attributes open */
+    oid_count = H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ATTR);
+    CHECK(oid_count, FAIL, "H5Fget_obj_count");
+    VERIFY(oid_count, OBJ_ID_COUNT_0, "H5Fget_obj_count");
+
+    /* test object count of all objects currently open */
+    oid_count = H5Fget_obj_count(H5F_OBJ_ALL, H5F_OBJ_ALL);
+    CHECK(oid_count, FAIL, "H5Fget_obj_count");
+    VERIFY(oid_count, OBJ_ID_COUNT_8, "H5Fget_obj_count");
+
+    {
+        hid_t      *oid_list;
+        int   i;
+        H5I_type_t id_type;
+
+        oid_list = (hid_t*)calloc((size_t)oid_count, sizeof(hid_t));
+        if(oid_list != NULL) {
+	    ret = H5Fget_obj_ids(H5F_OBJ_ALL, H5F_OBJ_ALL, oid_count, oid_list);
+	    CHECK(ret, FAIL, "H5Fget_obj_ids");
+        }
+
+        for(i=0; i<oid_count; i++) {
+	    id_type = H5Iget_type(oid_list[i]);
+	    switch(id_type) {
+	        case H5I_FILE:
+		    if(oid_list[i]!=fid1 && oid_list[i]!=fid2 &&
+			oid_list[i]!=fid3 && oid_list[i]!=fid4) {
+			ret = FAIL;
+			CHECK(ret, FAIL, "H5Fget_obj_ids");
+		    }
+		    break;
+	        case H5I_GROUP:
+                    if(oid_list[i]!=gid1 && oid_list[i]!=gid2 &&
+                        oid_list[i]!=gid3) {
+			ret = FAIL;
+                        CHECK(ret, FAIL, "H5Fget_obj_ids");
+                    }
+		    break;
+	        case H5I_DATASET:
+	 	    VERIFY(oid_list[i], did, "H5Fget_obj_ids");
+		    break;
+		default:
+		    ret = FAIL;
+                    CHECK(ret, FAIL, "H5Fget_obj_ids");
+	    }
+        }
+
+        free(oid_list);
+    }
+
+    /* close the two new files */
+    ret = H5Fclose(fid3);
+    CHECK(ret, FAIL, "H5Fclose");
+    ret = H5Fclose(fid4);
+    CHECK(ret, FAIL, "H5Fclose");
+}
+
+/****************************************************************
+**
+**  test_file_perm(): low-level file test routine.
+**      This test verifies that a file can be opened for both
+**      read-only and read-write access and things will be handled
+**      appropriately.
+**
+*****************************************************************/
+static void
+test_file_perm(void)
+{
+    hid_t    file;      /* File opened with read-write permission */
+    hid_t    filero;    /* Same file opened with read-only permission */
+    hid_t    dspace;    /* Dataspace ID */
+    hid_t    dset;      /* Dataset ID */
+    herr_t   ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Low-Level File Permissions\n"));
+
+    dspace = H5Screate(H5S_SCALAR);
+    CHECK(dspace, FAIL, "H5Screate");
+
+    /* Create the file (with read-write permission) */
+    file = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* Create a dataset with the read-write file handle */
+    dset = H5Dcreate(file, F2_DSET, H5T_NATIVE_INT, dspace, H5P_DEFAULT);
+    CHECK(dset, FAIL, "H5Dcreate");
+
+    ret = H5Dclose(dset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Open the file (with read-only permission) */
+    filero = H5Fopen(FILE2, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(filero, FAIL, "H5Fopen");
+
+    /* Create a dataset with the read-only file handle (should fail) */
+    H5E_BEGIN_TRY {
+        dset = H5Dcreate(filero, F2_DSET, H5T_NATIVE_INT, dspace, H5P_DEFAULT);
+    } H5E_END_TRY;
+    VERIFY(dset, FAIL, "H5Dcreate");
+    if(dset!=FAIL) {
+        ret = H5Dclose(dset);
+        CHECK(ret, FAIL, "H5Dclose");
+    } /* end if */
+
+    ret = H5Fclose(filero);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    ret = H5Sclose(dspace);
+    CHECK(ret, FAIL, "H5Sclose");
+
+} /* end test_file_perm() */
+
+/****************************************************************
+**
+**  test_file_freespace(): low-level file test routine.
+**      This test checks the free space available in a file in various
+**      situations.
+**
+*****************************************************************/
+static void
+test_file_freespace(void)
+{
+    hid_t    file;      /* File opened with read-write permission */
+    hssize_t free_space;        /* Amount of free space in file */
+    hid_t    dspace;    /* Dataspace ID */
+    hid_t    dset;      /* Dataset ID */
+    hid_t    dcpl;      /* Dataset creation property list */
+    unsigned u;         /* Local index variable */
+    char     name[32];  /* Dataset name */
+    herr_t   ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Low-Level File Free Space\n"));
+
+    /* Create the file (with read-write permission) */
+    file = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* Check that the free space is 0 */
+    free_space = H5Fget_freespace(file);
+    CHECK(free_space, FAIL, "H5Fget_freespace");
+    VERIFY(free_space, 0, "H5Fget_freespace");
+
+    /* Create dataspace for datasets */
+    dspace = H5Screate(H5S_SCALAR);
+    CHECK(dspace, FAIL, "H5Screate");
+
+    /* Create a dataset creation property list */
+    dcpl = H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(dcpl, FAIL, "H5Pcreate");
+
+    /* Set the space allocation time to early */
+    ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_EARLY);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Create datasets in file */
+    for(u=0; u<10; u++) {
+        sprintf(name,"Dataset %u",u);
+        dset = H5Dcreate(file, name, H5T_STD_U32LE, dspace, dcpl);
+        CHECK(dset, FAIL, "H5Dcreate");
+
+        ret = H5Dclose(dset);
+        CHECK(ret, FAIL, "H5Dclose");
+    } /* end for */
+
+    /* Close dataspace */
+    ret = H5Sclose(dspace);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset creation property list */
+    ret=H5Pclose(dcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Check that there is the right amount of free space in the file */
+    free_space = H5Fget_freespace(file);
+    CHECK(free_space, FAIL, "H5Fget_freespace");
+#ifdef H5_HAVE_LARGE_HSIZET
+    VERIFY(free_space, 168, "H5Fget_freespace");
+#else /* H5_HAVE_LARGE_HSIZET */
+    VERIFY(free_space, 76, "H5Fget_freespace");
+#endif /* H5_HAVE_LARGE_HSIZET */
+
+    /* Delete datasets in file */
+    for(u=0; u<10; u++) {
+        sprintf(name,"Dataset %u",u);
+        ret = H5Gunlink(file, name);
+        CHECK(ret, FAIL, "H5Gunlink");
+    } /* end for */
+
+    /* Check that there is the right amount of free space in the file */
+    free_space = H5Fget_freespace(file);
+    CHECK(free_space, FAIL, "H5Fget_freespace");
+#ifdef H5_HAVE_LARGE_HSIZET
+    VERIFY(free_space, 3584, "H5Fget_freespace");
+#else /* H5_HAVE_LARGE_HSIZET */
+    VERIFY(free_space, 3428, "H5Fget_freespace");
+#endif /* H5_HAVE_LARGE_HSIZET */
+
+    /* Close file */
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_file_freespace() */
+
+/****************************************************************
+**
+**  test_file_ishdf5(): low-level file test routine.
+**      This test checks whether the H5Fis_hdf5() routine is working
+**      correctly in variuous situations.
+**
+*****************************************************************/
+static void
+test_file_ishdf5(void)
+{
+    hid_t    file;      /* File opened with read-write permission */
+    hid_t    fcpl;      /* File creation property list */
+    int      fd;        /* File Descriptor */
+    ssize_t  nbytes;    /* Number of bytes written */
+    unsigned u;         /* Local index variable */
+    unsigned char buf[1024];    /* Buffer of data to write */
+    htri_t   status;    /* Whether a file is an HDF5 file */
+    herr_t   ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Detection of HDF5 Files\n"));
+
+    /* Create a file */
+    file = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* Close file */
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Verify that the file is an HDF5 file */
+    status = H5Fis_hdf5(FILE1);
+    VERIFY(status, TRUE, "H5Fis_hdf5");
+
+
+    /* Create a file creation property list with a non-default user block size */
+    fcpl = H5Pcreate(H5P_FILE_CREATE);
+    CHECK(fcpl, FAIL, "H5Pcreate");
+
+    ret = H5Pset_userblock(fcpl, (hsize_t)2048);
+    CHECK(ret, FAIL, "H5Pset_userblock");
+
+    /* Create file with non-default user block */
+    file = H5Fcreate(FILE1, H5F_ACC_TRUNC, fcpl, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* Release file-creation property list */
+    ret = H5Pclose(fcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Verify that the file is an HDF5 file */
+    status = H5Fis_hdf5(FILE1);
+    VERIFY(status, TRUE, "H5Fis_hdf5");
+
+
+    /* Create non-HDF5 file and check it */
+    fd=HDopen(FILE1, O_RDWR|O_CREAT|O_TRUNC, 0666);
+    CHECK(ret, FAIL, "HDopen");
+
+    /* Initialize information to write */
+    for(u=0; u<1024; u++)
+        buf[u]=(unsigned char)u;
+
+    /* Write some information */
+    nbytes = HDwrite(fd, buf, (size_t)1024);
+    VERIFY(nbytes, 1024, "HDwrite");
+
+    /* Close the file */
+    ret = HDclose(fd);
+    CHECK(ret, FAIL, "HDclose");
+
+    /* Verify that the file is not an HDF5 file */
+    status = H5Fis_hdf5(FILE1);
+    VERIFY(status, FALSE, "H5Fis_hdf5");
+
+} /* end test_file_ishdf5() */
+
+/****************************************************************
+**
+**  test_file_open_dot(): low-level file test routine.
+**      This test checks whether opening objects with "." for a name
+**      works correctly in variuous situations.
+**
+*****************************************************************/
+static void
+test_file_open_dot(void)
+{
+    hid_t fid;          /* File ID */
+    hid_t gid, gid2;    /* Group IDs */
+    hid_t did;          /* Dataset ID */
+    hid_t sid;          /* Dataspace ID */
+    hid_t tid, tid2;    /* Datatype IDs */
+    herr_t   ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing opening objects with \".\" for a name\n"));
+
+    /* Create a new HDF5 file to work with */
+    fid = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create a group in the HDF5 file */
+    gid = H5Gcreate(fid, GRP_NAME, (size_t)0);
+    CHECK(gid, FAIL, "H5Gcreate");
+
+    /* Create a dataspace for creating datasets */
+    sid = H5Screate(H5S_SCALAR);
+    CHECK(sid, FAIL, "H5Screate");
+
+    /* Create a dataset with no name using the file ID */
+    H5E_BEGIN_TRY {
+        did = H5Dcreate(fid, ".", H5T_NATIVE_INT, sid, H5P_DEFAULT);
+    } H5E_END_TRY;
+    VERIFY(did, FAIL, "H5Dcreate");
+
+    /* Create a dataset with no name using the group ID */
+    H5E_BEGIN_TRY {
+        did = H5Dcreate(gid, ".", H5T_NATIVE_INT, sid, H5P_DEFAULT);
+    } H5E_END_TRY;
+    VERIFY(did, FAIL, "H5Dcreate");
+
+    /* Open a dataset with no name using the file ID */
+    H5E_BEGIN_TRY {
+        did = H5Dopen(fid, ".");
+    } H5E_END_TRY;
+    VERIFY(did, FAIL, "H5Dopen");
+
+    /* Open a dataset with no name using the group ID */
+    H5E_BEGIN_TRY {
+        did = H5Dopen(gid, ".");
+    } H5E_END_TRY;
+    VERIFY(did, FAIL, "H5Dopen");
+
+    /* Make a copy of a datatype to use for creating a named datatype */
+    tid = H5Tcopy(H5T_NATIVE_INT);
+    CHECK(tid, FAIL, "H5Tcopy");
+
+    /* Create a named datatype with no name using the file ID */
+    H5E_BEGIN_TRY {
+        ret = H5Tcommit(fid, ".", tid);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Tcommit");
+
+    /* Create a named datatype with no name using the group ID */
+    H5E_BEGIN_TRY {
+        ret = H5Tcommit(gid, ".", tid);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Tcommit");
+
+    /* Open a named datatype with no name using the file ID */
+    H5E_BEGIN_TRY {
+        tid2 = H5Topen(fid, ".");
+    } H5E_END_TRY;
+    VERIFY(tid2, FAIL, "H5Topen");
+
+    /* Open a named datatype with no name using the group ID */
+    H5E_BEGIN_TRY {
+        tid2 = H5Topen(gid, ".");
+    } H5E_END_TRY;
+    VERIFY(tid2, FAIL, "H5Topen");
+
+    /* Create a group with no name using the file ID */
+    H5E_BEGIN_TRY {
+        gid2 = H5Gcreate(fid, ".", (size_t)0);
+    } H5E_END_TRY;
+    VERIFY(gid2, FAIL, "H5Gcreate");
+
+    /* Create a group with no name using the group ID */
+    H5E_BEGIN_TRY {
+        gid2 = H5Gcreate(gid, ".", (size_t)0);
+    } H5E_END_TRY;
+    VERIFY(gid2, FAIL, "H5Gcreate");
+
+    /* Open a group with no name using the file ID (should open the root group) */
+    gid2 = H5Gopen(fid, ".");
+    CHECK(gid2, FAIL, "H5Gopen");
+
+    ret = H5Gclose(gid2);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Open a group with no name using the group ID (should open the group again) */
+    gid2 = H5Gopen(gid, ".");
+    CHECK(gid2, FAIL, "H5Gopen");
+
+    ret = H5Gclose(gid2);
+    CHECK(ret, FAIL, "H5Gclose");
+
+
+    /* Close everything */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret = H5Gclose(gid);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_file_open_dot() */
+
+/****************************************************************
+**
+**  test_file_open_overlap(): low-level file test routine.
+**      This test checks whether opening files in an overlapping way
+**      (as opposed to a nested manner) works correctly.
+**
+*****************************************************************/
+static void
+test_file_open_overlap(void)
+{
+    hid_t fid1, fid2;
+    hid_t did1, did2;
+    hid_t gid;
+    hid_t sid;
+    int nobjs;          /* # of open objects */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing opening overlapping file opens\n"));
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Open file also */
+    fid2 = H5Fopen(FILE1, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid2, FAIL, "H5Fopen");
+
+    /* Create a group in file */
+    gid = H5Gcreate(fid1, GROUP1, (size_t)0);
+    CHECK(gid, FAIL, "H5Gcreate");
+
+    /* Create dataspace for dataset */
+    sid = H5Screate(H5S_SCALAR);
+    CHECK(sid, FAIL, "H5Screate");
+
+    /* Create dataset in group w/first file ID */
+    did1 = H5Dcreate(gid, DSET1, H5T_NATIVE_INT, sid, H5P_DEFAULT);
+    CHECK(did1, FAIL, "H5Dcreate");
+
+    /* Check number of objects opened in first file */
+    nobjs = H5Fget_obj_count(fid1, H5F_OBJ_LOCAL|H5F_OBJ_ALL);
+    VERIFY(nobjs, 3, "H5Fget_obj_count");       /* 3 == file, dataset & group */
+
+    /* Close dataset */
+    ret = H5Dclose(did1);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close group */
+    ret = H5Gclose(gid);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Close first file ID */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Create dataset with second file ID */
+    did2 = H5Dcreate(fid2, DSET2, H5T_NATIVE_INT, sid, H5P_DEFAULT);
+    CHECK(did2, FAIL, "H5Dcreate");
+
+    /* Check number of objects opened in first file */
+    nobjs = H5Fget_obj_count(fid2, H5F_OBJ_ALL);
+    VERIFY(nobjs, 2, "H5Fget_obj_count");       /* 3 == file & dataset */
+
+    /* Close dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close second dataset */
+    ret = H5Dclose(did2);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close second file */
+    ret = H5Fclose(fid2);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* end test_file_open_overlap() */
+
+/****************************************************************
+**
+**  test_file_getname(): low-level file test routine.
+**      This test checks whether H5Fget_name works correctly.
+**
+*****************************************************************/
+static void
+test_file_getname(void)
+{
+    /* Compound datatype */
+    typedef struct s1_t {
+        unsigned int a;
+        float        b;
+    } s1_t;
+
+    hid_t   file_id;
+    hid_t   group_id;
+    hid_t   dataset_id;
+    hid_t   space_id;
+    hid_t   type_id;
+    hid_t   attr_id;
+    hsize_t dims[TESTA_RANK] = {TESTA_NX, TESTA_NY};
+    char    name[TESTA_NAME_BUF_SIZE];
+    ssize_t name_len;
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing H5Fget_name() functionality\n"));
+
+    /* Create a new file_id using default properties. */
+    file_id = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT );
+    CHECK(file_id, FAIL, "H5Fcreate");
+
+    /* Get and verify file name */
+    name_len = H5Fget_name(file_id, name, TESTA_NAME_BUF_SIZE);
+    CHECK(name_len, FAIL, "H5Fget_name");
+    VERIFY_STR(name, FILE1, "H5Fget_name");
+
+    /* Create a group in the root group */
+    group_id = H5Gcreate(file_id, TESTA_GROUPNAME, 0);
+    CHECK(group_id, FAIL, "H5Gcreate");
+
+    /* Get and verify file name */
+    name_len = H5Fget_name(group_id, name, TESTA_NAME_BUF_SIZE);
+    CHECK(name_len, FAIL, "H5Fget_name");
+    VERIFY_STR(name, FILE1, "H5Fget_name");
+
+    /* Create the data space  */
+    space_id = H5Screate_simple(TESTA_RANK, dims, NULL);
+    CHECK(space_id, FAIL, "H5Screate_simple");
+
+    /* Try get file name from data space.  Supposed to fail because
+     * it's illegal operation. */
+    H5E_BEGIN_TRY {
+        name_len = H5Fget_name(space_id, name, TESTA_NAME_BUF_SIZE);
+    } H5E_END_TRY;
+    VERIFY(name_len, FAIL, "H5Fget_name");
+
+    /* Create a new dataset */
+    dataset_id = H5Dcreate(file_id, TESTA_DSETNAME, H5T_NATIVE_INT, space_id, H5P_DEFAULT);
+    CHECK(dataset_id, FAIL, "H5Dcreate");
+
+    /* Get and verify file name */
+    name_len = H5Fget_name(dataset_id, name, TESTA_NAME_BUF_SIZE);
+    CHECK(name_len, FAIL, "H5Fget_name");
+    VERIFY_STR(name, FILE1, "H5Fget_name");
+
+    /* Create an attribute for the dataset */
+    attr_id = H5Acreate(dataset_id,TESTA_ATTRNAME,H5T_NATIVE_INT,space_id,H5P_DEFAULT);
+    CHECK(attr_id, FAIL, "H5Acreate");
+
+    /* Get and verify file name */
+    name_len = H5Fget_name(attr_id, name, TESTA_NAME_BUF_SIZE);
+    CHECK(name_len, FAIL, "H5Fget_name");
+    VERIFY_STR(name, FILE1, "H5Fget_name");
+
+    /* Create a compound datatype */
+    type_id = H5Tcreate(H5T_COMPOUND, sizeof(s1_t));
+    CHECK(type_id, FAIL, "H5Tcreate");
+
+    /* Insert fields */
+    ret = H5Tinsert (type_id, "a", HOFFSET(s1_t,a), H5T_NATIVE_INT);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    ret = H5Tinsert (type_id, "b", HOFFSET(s1_t,b), H5T_NATIVE_FLOAT);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    /* Save it on file */
+    ret = H5Tcommit(file_id, TESTA_DTYPENAME, type_id);
+    CHECK(ret, FAIL, "H5Tcommit");
+
+    /* Get and verify file name */
+    name_len = H5Fget_name(type_id, name, TESTA_NAME_BUF_SIZE);
+    CHECK(name_len, FAIL, "H5Fget_name");
+    VERIFY_STR(name, FILE1, "H5Fget_name");
+
+    /* Close things down */
+    ret = H5Tclose(type_id);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    ret = H5Aclose(attr_id);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    ret = H5Dclose(dataset_id);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    ret = H5Sclose(space_id);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret = H5Gclose(group_id);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Fclose(file_id);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_file_getname() */
+
+/****************************************************************
+**
+**  test_file_double_root_open(): low-level file test routine.
+**      This test checks whether opening the root group from two
+**      different files works correctly.
+**
+*****************************************************************/
+static void
+test_file_double_root_open(void)
+{
+    hid_t file1_id, file2_id; 
+    hid_t grp1_id, grp2_id; 
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing double root group open\n"));
+
+    file1_id = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file1_id, FAIL, "H5Fcreate");
+    file2_id = H5Fopen (FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file2_id, FAIL, "H5Fopen");
+
+    grp1_id  = H5Gopen(file1_id, "/");
+    CHECK(grp1_id, FAIL, "H5Gopen");
+    grp2_id  = H5Gopen(file2_id, "/");
+    CHECK(grp2_id, FAIL, "H5Gopen");
+
+    /* Note "assymetric" close order */
+    ret = H5Gclose(grp1_id);
+    CHECK(ret, FAIL, "H5Gclose");
+    ret = H5Gclose(grp2_id);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Fclose(file1_id);
+    CHECK(ret, FAIL, "H5Fclose");
+    ret = H5Fclose(file2_id);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* end test_file_double_root_open() */
+
+/****************************************************************
+**
+**  test_file_double_group_open(): low-level file test routine.
+**      This test checks whether opening the same group from two
+**      different files works correctly.
+**
+*****************************************************************/
+static void
+test_file_double_group_open(void)
+{
+    hid_t file1_id, file2_id; 
+    hid_t grp1_id, grp2_id; 
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing double non-root group open\n"));
+
+    file1_id = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file1_id, FAIL, "H5Fcreate");
+    file2_id = H5Fopen (FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file2_id, FAIL, "H5Fopen");
+
+    grp1_id  = H5Gcreate(file1_id, GRP_NAME, (size_t)0);
+    CHECK(grp1_id, FAIL, "H5Gcreate");
+    grp2_id  = H5Gopen(file2_id, GRP_NAME);
+    CHECK(grp2_id, FAIL, "H5Gopen");
+
+    /* Note "assymetric" close order */
+    ret = H5Gclose(grp1_id);
+    CHECK(ret, FAIL, "H5Gclose");
+    ret = H5Gclose(grp2_id);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Fclose(file1_id);
+    CHECK(ret, FAIL, "H5Fclose");
+    ret = H5Fclose(file2_id);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* end test_file_double_group_open() */
+
+/****************************************************************
+**
+**  test_file_double_dataset_open(): low-level file test routine.
+**      This test checks whether opening the same dataset from two
+**      different files works correctly.
+**
+*****************************************************************/
+static void
+test_file_double_dataset_open(void)
+{
+    hid_t file1_id, file2_id; 
+    hid_t dset1_id, dset2_id; 
+    hid_t space_id; 
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing double dataset open\n"));
+
+    file1_id = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file1_id, FAIL, "H5Fcreate");
+    file2_id = H5Fopen (FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file2_id, FAIL, "H5Fopen");
+
+    /* Create dataspace for dataset */
+    space_id = H5Screate(H5S_SCALAR);
+    CHECK(space_id, FAIL, "H5Screate");
+
+    dset1_id  = H5Dcreate(file1_id, DSET_NAME, H5T_NATIVE_INT, space_id, H5P_DEFAULT);
+    CHECK(dset1_id, FAIL, "H5Dcreate");
+    dset2_id  = H5Dopen(file2_id, DSET_NAME);
+    CHECK(dset2_id, FAIL, "H5Dopen");
+
+    /* Close "supporting" dataspace */
+    ret = H5Sclose(space_id);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Note "assymetric" close order */
+    ret = H5Dclose(dset1_id);
+    CHECK(ret, FAIL, "H5Dclose");
+    ret = H5Dclose(dset2_id);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    ret = H5Fclose(file1_id);
+    CHECK(ret, FAIL, "H5Fclose");
+    ret = H5Fclose(file2_id);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* end test_file_double_dataset_open() */
+
+/****************************************************************
+**
+**  test_file_double_datatype_open(): low-level file test routine.
+**      This test checks whether opening the same named datatype from two
+**      different files works correctly.
+**
+*****************************************************************/
+static void
+test_file_double_datatype_open(void)
+{
+    hid_t file1_id, file2_id; 
+    hid_t type1_id, type2_id; 
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing double dataset open\n"));
+
+    file1_id = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file1_id, FAIL, "H5Fcreate");
+    file2_id = H5Fopen (FILE1, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file2_id, FAIL, "H5Fopen");
+
+    type1_id  = H5Tcopy(H5T_NATIVE_INT);
+    CHECK(type1_id, FAIL, "H5Tcopy");
+    ret  = H5Tcommit(file1_id, TYPE_NAME, type1_id);
+    CHECK(ret, FAIL, "H5Tcommit");
+    type2_id  = H5Topen(file2_id, TYPE_NAME);
+    CHECK(type2_id, FAIL, "H5Topen");
+
+    /* Note "assymetric" close order */
+    ret = H5Tclose(type1_id);
+    CHECK(ret, FAIL, "H5Tclose");
+    ret = H5Tclose(type2_id);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    ret = H5Fclose(file1_id);
+    CHECK(ret, FAIL, "H5Fclose");
+    ret = H5Fclose(file2_id);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* end test_file_double_dataset_open() */
+
+/****************************************************************
+**
+**  test_file(): Main low-level file I/O test routine.
+**
+****************************************************************/
+void
+test_file(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Low-Level File I/O\n"));
+
+    test_file_create();		/* Test file creation(also creation templates)*/
+    test_file_open();		/* Test file opening */
+#ifndef H5_NO_SHARED_WRITING
+    test_file_close();          /* Test file close behavior */
+#endif /* H5_NO_SHARED_WRITING */
+    test_get_file_id();         /* Test H5Iget_file_id */
+    test_file_perm();           /* Test file access permissions */
+    test_file_freespace();      /* Test file free space information */
+    test_file_ishdf5();         /* Test detecting HDF5 files correctly */
+    test_file_open_dot();       /* Test opening objects with "." for a name */
+    test_file_open_overlap();   /* Test opening files in an overlapping manner */
+    test_file_getname();        /* Test basic H5Fget_name() functionality */
+    test_file_double_root_open();       /* Test opening root group from two files works properly */
+    test_file_double_group_open();      /* Test opening same group from two files works properly */
+    test_file_double_dataset_open();    /* Test opening same dataset from two files works properly */
+    test_file_double_datatype_open();   /* Test opening same named datatype from two files works properly */
+}				/* test_file() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_file
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Albert Cheng
+ *              July 2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_file(void)
+{
+    remove(FILE1);
+    remove(FILE2);
+    remove(FILE3);
+    remove(FILE4);
+}

Added: packages/hdf5/branches/upstream/current/test/tgenprop.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/tgenprop.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/tgenprop.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1581 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/***********************************************************
+*
+* Test program:	 tgenprop
+*
+* Test the Generic Property functionality
+*
+*************************************************************/
+
+#define H5P_PACKAGE		/*suppress error about including H5Ppkg	  */
+
+/* Define this macro to indicate that the testing APIs should be available */
+#define H5P_TESTING
+
+#include "testhdf5.h"
+#include "hdf5.h"
+#include "H5Dprivate.h"         /* For Dataset creation property list names */
+#include "H5Ppkg.h"		/* Generic Properties			*/
+
+#define FILENAME   "tgenprop.h5"
+
+/* Property definitions */
+#define CLASS1_NAME     "Class 1"
+#define CLASS1_PATH     "root/Class 1"
+
+#define CLASS2_NAME     "Class 2"
+#define CLASS2_PATH     "root/Class 1/Class 2"
+
+/* Property definitions */
+#define PROP1_NAME     "Property 1"
+int         prop1_def=10;   /* Property 1 default value */
+#define PROP1_SIZE      sizeof(prop1_def)
+#define PROP1_DEF_VALUE (&prop1_def)
+
+#define PROP2_NAME     "Property 2"
+float         prop2_def=(float)3.14;   /* Property 2 default value */
+#define PROP2_SIZE      sizeof(prop2_def)
+#define PROP2_DEF_VALUE (&prop2_def)
+
+#define PROP3_NAME     "Property 3"
+char          prop3_def[10]="Ten chars";   /* Property 3 default value */
+#define PROP3_SIZE      sizeof(prop3_def)
+#define PROP3_DEF_VALUE (&prop3_def)
+
+#define PROP4_NAME     "Property 4"
+double          prop4_def=1.41;   /* Property 4 default value */
+#define PROP4_SIZE      sizeof(prop4_def)
+#define PROP4_DEF_VALUE (&prop4_def)
+
+/****************************************************************
+**
+**  test_genprop_basic_class(): Test basic generic property list code.
+**      Tests creating new generic classes.
+**
+****************************************************************/
+static void
+test_genprop_basic_class(void)
+{
+    hid_t		cid1;		/* Generic Property class ID */
+    hid_t		cid2;		/* Generic Property class ID */
+    hid_t		cid3;		/* Generic Property class ID */
+    char       *name;       /* Name of class */
+    herr_t		ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Generic Property List Class Creation Functionality\n"));
+
+    /* Create a new generic class, derived from the root of the class hierarchy */
+    cid1 = H5Pcreate_class(H5P_NO_CLASS,CLASS1_NAME,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(cid1, "H5Pcreate_class");
+
+    /* Check class name */
+    name = H5Pget_class_name(cid1);
+    CHECK_PTR(name, "H5Pget_class_name");
+    if(HDstrcmp(name,CLASS1_NAME)!=0)
+        TestErrPrintf("Class names don't match!, name=%s, CLASS1_NAME=%s\n",name,CLASS1_NAME);
+    free(name);
+
+    /* Check class parent */
+    cid2 = H5Pget_class_parent(cid1);
+    CHECK_I(cid2, "H5Pget_class_parent");
+
+    /* Verify class parent correct */
+    ret = H5Pequal(cid2,H5P_NO_CLASS);
+    VERIFY(ret, 1, "H5Pequal");
+
+    /* Make certain false postives aren't being returned */
+    ret = H5Pequal(cid2,H5P_FILE_CREATE);
+    VERIFY(ret, 0, "H5Pequal");
+
+    /* Close parent class */
+    ret = H5Pclose_class(cid2);
+    CHECK_I(ret, "H5Pclose_class");
+
+    /* Close class */
+    ret = H5Pclose_class(cid1);
+    CHECK_I(ret, "H5Pclose_class");
+
+    /* Create another new generic class, derived from file creation class */
+    cid1 = H5Pcreate_class(H5P_FILE_CREATE,CLASS2_NAME,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(cid1, "H5Pcreate_class");
+
+    /* Check class name */
+    name = H5Pget_class_name(cid1);
+    CHECK_PTR(name, "H5Pget_class_name");
+    if(HDstrcmp(name,CLASS2_NAME)!=0)
+        TestErrPrintf("Class names don't match!, name=%s, CLASS2_NAME=%s\n",name,CLASS2_NAME);
+    free(name);
+
+    /* Check class parent */
+    cid2 = H5Pget_class_parent(cid1);
+    CHECK_I(cid2, "H5Pget_class_parent");
+
+    /* Verify class parent correct */
+    ret = H5Pequal(cid2,H5P_FILE_CREATE);
+    VERIFY(ret, 1, "H5Pequal");
+
+    /* Check class parent's parent */
+    cid3 = H5Pget_class_parent(cid2);
+    CHECK_I(cid3, "H5Pget_class_parent");
+
+    /* Verify class parent's parent correct */
+    ret = H5Pequal(cid3,H5P_NO_CLASS);
+    VERIFY(ret, 1, "H5Pequal");
+
+    /* Close parent class's parent */
+    ret = H5Pclose_class(cid3);
+    CHECK_I(ret, "H5Pclose_class");
+
+    /* Close parent class */
+    ret = H5Pclose_class(cid2);
+    CHECK_I(ret, "H5Pclose_class");
+
+    /* Close class */
+    ret = H5Pclose_class(cid1);
+    CHECK_I(ret, "H5Pclose_class");
+} /* end test_genprop_basic_class() */
+
+/****************************************************************
+**
+**  test_genprop_basic_class_prop(): Test basic generic property list code.
+**      Tests adding properties to generic classes.
+**
+****************************************************************/
+static void
+test_genprop_basic_class_prop(void)
+{
+    hid_t		cid1;		/* Generic Property class ID */
+    size_t		size;		/* Size of property */
+    size_t		nprops;		/* Number of properties in class */
+    herr_t		ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Generic Property List Class Properties Functionality\n"));
+
+    /* Create a new generic class, derived from the root of the class hierarchy */
+    cid1 = H5Pcreate_class(H5P_NO_CLASS,CLASS1_NAME,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(cid1, "H5Pcreate_class");
+
+    /* Check the number of properties in class */
+    ret = H5Pget_nprops(cid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 0, "H5Pget_nprops");
+
+    /* Check the existance of the first property (should fail) */
+    ret = H5Pexist(cid1,PROP1_NAME);
+    VERIFY(ret, 0, "H5Pexist");
+
+    /* Insert first property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP1_NAME,PROP1_SIZE,PROP1_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Try to insert the first property again (should fail) */
+    ret = H5Pregister(cid1,PROP1_NAME,PROP1_SIZE,PROP1_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    VERIFY(ret, FAIL, "H5Pregister");
+
+    /* Check the existance of the first property */
+    ret = H5Pexist(cid1,PROP1_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+
+    /* Check the size of the first property */
+    ret = H5Pget_size(cid1,PROP1_NAME,&size);
+    CHECK_I(ret, "H5Pget_size");
+    VERIFY(size, PROP1_SIZE, "H5Pget_size");
+
+    /* Check the number of properties in class */
+    ret = H5Pget_nprops(cid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 1, "H5Pget_nprops");
+
+    /* Insert second property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP2_NAME,PROP2_SIZE,PROP2_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Try to insert the second property again (should fail) */
+    ret = H5Pregister(cid1,PROP2_NAME,PROP2_SIZE,PROP2_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    VERIFY(ret, FAIL, "H5Pregister");
+
+    /* Check the existance of the second property */
+    ret = H5Pexist(cid1,PROP2_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+
+    /* Check the size of the second property */
+    ret = H5Pget_size(cid1,PROP2_NAME,&size);
+    CHECK_I(ret, "H5Pget_size");
+    VERIFY(size, PROP2_SIZE, "H5Pget_size");
+
+    /* Check the number of properties in class */
+    ret = H5Pget_nprops(cid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 2, "H5Pget_nprops");
+
+    /* Insert third property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP3_NAME,PROP3_SIZE,PROP3_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Check the existance of the third property */
+    ret = H5Pexist(cid1,PROP3_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+
+    /* Check the size of the third property */
+    ret = H5Pget_size(cid1,PROP3_NAME,&size);
+    CHECK_I(ret, "H5Pget_size");
+    VERIFY(size, PROP3_SIZE, "H5Pget_size");
+
+    /* Check the number of properties in class */
+    ret = H5Pget_nprops(cid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 3, "H5Pget_nprops");
+
+    /* Unregister first property */
+    ret = H5Punregister(cid1,PROP1_NAME);
+    CHECK_I(ret, "H5Punregister");
+
+    /* Try to check the size of the first property (should fail) */
+    ret = H5Pget_size(cid1,PROP1_NAME,&size);
+    VERIFY(ret, FAIL, "H5Pget_size");
+
+    /* Check the number of properties in class */
+    ret = H5Pget_nprops(cid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 2, "H5Pget_nprops");
+
+    /* Unregister second property */
+    ret = H5Punregister(cid1,PROP2_NAME);
+    CHECK_I(ret, "H5Punregister");
+
+    /* Check the number of properties in class */
+    ret = H5Pget_nprops(cid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 1, "H5Pget_nprops");
+
+    /* Unregister third property */
+    ret = H5Punregister(cid1,PROP3_NAME);
+    CHECK_I(ret, "H5Punregister");
+
+    /* Check the number of properties in class */
+    ret = H5Pget_nprops(cid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 0, "H5Pget_nprops");
+
+    /* Close class */
+    ret = H5Pclose_class(cid1);
+    CHECK_I(ret, "H5Pclose_class");
+} /* end test_genprop_basic_class_prop() */
+
+/****************************************************************
+**
+**  test_genprop_iter1(): Property iterator for test_genprop_class_iter
+**
+****************************************************************/
+static int
+test_genprop_iter1(hid_t id, const char *name, void *iter_data)
+{
+    struct {                /* Struct for iterations */
+        int iter_count;
+        const char **names;
+    } *iter_struct=iter_data;
+
+    /* Shut compiler up */
+    id=id;
+
+    return(HDstrcmp(name,iter_struct->names[iter_struct->iter_count++]));
+}
+
+/****************************************************************
+**
+**  test_genprop_class_iter(): Test basic generic property list code.
+**      Tests iterating over properties in a generic class.
+**
+****************************************************************/
+static void
+test_genprop_class_iter(void)
+{
+    hid_t		cid1;		/* Generic Property class ID */
+    size_t		nprops;		/* Number of properties in class */
+    int         idx;        /* Index to start iteration at */
+    struct {                /* Struct for iterations */
+        int iter_count;
+        const char **names;
+    } iter_struct;
+    const char *pnames[4]={ /* Names of properties for iterator */
+        PROP1_NAME,
+        PROP2_NAME,
+        PROP3_NAME,
+        PROP4_NAME};
+    herr_t		ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Generic Property List Class Property Iteration Functionality\n"));
+
+    /* Create a new generic class, derived from the root of the class hierarchy */
+    cid1 = H5Pcreate_class(H5P_NO_CLASS,CLASS1_NAME,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(cid1, "H5Pcreate_class");
+
+    /* Insert first property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP1_NAME,PROP1_SIZE,PROP1_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Insert second property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP2_NAME,PROP2_SIZE,PROP2_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Insert third property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP3_NAME,PROP3_SIZE,PROP3_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Insert third property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP4_NAME,PROP4_SIZE,PROP4_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Check the number of properties in class */
+    ret = H5Pget_nprops(cid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 4, "H5Pget_nprops");
+
+    /* Iterate over all properties in class */
+    iter_struct.iter_count=0;
+    iter_struct.names=pnames;
+    ret = H5Piterate(cid1,NULL,test_genprop_iter1,&iter_struct);
+    VERIFY(ret, 0, "H5Piterate");
+
+    /* Iterate over last three properties in class */
+    idx=iter_struct.iter_count=1;
+    ret = H5Piterate(cid1,&idx,test_genprop_iter1,&iter_struct);
+    VERIFY(ret, 0, "H5Piterate");
+    VERIFY(idx, (int)nprops, "H5Piterate");
+
+    /* Close class */
+    ret = H5Pclose_class(cid1);
+    CHECK_I(ret, "H5Pclose_class");
+} /* end test_genprop_class_iter() */
+
+/****************************************************************
+**
+**  test_genprop_cls_cb1(): Property List callback for test_genprop_class_callback
+**
+****************************************************************/
+static herr_t
+test_genprop_cls_cb1(hid_t list_id, void *create_data)
+{
+    struct {                /* Struct for iterations */
+        int count;
+        hid_t id;
+    } *count_struct=create_data;
+
+    count_struct->count++;
+    count_struct->id=list_id;
+
+    return(SUCCEED);
+}
+
+static herr_t
+test_genprop_cls_cb2(hid_t new_list_id, hid_t UNUSED old_list_id, void *create_data)
+{
+    struct {                /* Struct for iterations */
+        int count;
+        hid_t id;
+    } *count_struct=create_data;
+
+    count_struct->count++;
+    count_struct->id=new_list_id;
+
+    return(SUCCEED);
+}
+/****************************************************************
+**
+**  test_genprop_class_callback(): Test basic generic property list code.
+**      Tests callbacks for property lists in a generic class.
+**
+****************************************************************/
+static void
+test_genprop_class_callback(void)
+{
+    hid_t	cid1;		/* Generic Property class ID */
+    hid_t	lid1;		/* Generic Property list ID */
+    hid_t	lid2;		/* Generic Property list ID */
+    size_t	nprops;		/* Number of properties in class */
+    struct {                    /* Struct for callbacks */
+        int count;
+        hid_t id;
+    } crt_cb_struct, cls_cb_struct;
+    herr_t		ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Generic Property List Class Callback Functionality\n"));
+
+    /* Create a new generic class, derived from the root of the class hierarchy */
+    cid1 = H5Pcreate_class(H5P_NO_CLASS,CLASS1_NAME,test_genprop_cls_cb1,&crt_cb_struct,NULL,NULL,test_genprop_cls_cb1,&cls_cb_struct);
+    CHECK_I(cid1, "H5Pcreate_class");
+
+    /* Insert first property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP1_NAME,PROP1_SIZE,PROP1_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Insert second property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP2_NAME,PROP2_SIZE,PROP2_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Insert third property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP3_NAME,PROP3_SIZE,PROP3_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Insert fourth property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP4_NAME,PROP4_SIZE,PROP4_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Check the number of properties in class */
+    ret = H5Pget_nprops(cid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 4, "H5Pget_nprops");
+
+    /* Initialize class callback structs */
+    crt_cb_struct.count=0;
+    crt_cb_struct.id=(-1);
+    cls_cb_struct.count=0;
+    cls_cb_struct.id=(-1);
+
+    /* Create a property list from the class */
+    lid1 = H5Pcreate(cid1);
+    CHECK_I(lid1, "H5Pcreate");
+
+    /* Verify that the creation callback occurred */
+    VERIFY(crt_cb_struct.count, 1, "H5Pcreate");
+    VERIFY(crt_cb_struct.id, lid1, "H5Pcreate");
+
+    /* Check the number of properties in list */
+    ret = H5Pget_nprops(lid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 4, "H5Pget_nprops");
+
+    /* Create another property list from the class */
+    lid2 = H5Pcreate(cid1);
+    CHECK_I(lid2, "H5Pcreate");
+
+    /* Verify that the creation callback occurred */
+    VERIFY(crt_cb_struct.count, 2, "H5Pcreate");
+    VERIFY(crt_cb_struct.id, lid2, "H5Pcreate");
+
+    /* Check the number of properties in list */
+    ret = H5Pget_nprops(lid2,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 4, "H5Pget_nprops");
+
+    /* Close first list */
+    ret = H5Pclose(lid1);
+    CHECK_I(ret, "H5Pclose");
+
+    /* Verify that the close callback occurred */
+    VERIFY(cls_cb_struct.count, 1, "H5Pclose");
+    VERIFY(cls_cb_struct.id, lid1, "H5Pclose");
+
+    /* Close second list */
+    ret = H5Pclose(lid2);
+    CHECK_I(ret, "H5Pclose");
+
+    /* Verify that the close callback occurred */
+    VERIFY(cls_cb_struct.count, 2, "H5Pclose");
+    VERIFY(cls_cb_struct.id, lid2, "H5Pclose");
+
+    /* Close class */
+    ret = H5Pclose_class(cid1);
+    CHECK_I(ret, "H5Pclose_class");
+} /* end test_genprop_class_callback() */
+
+/****************************************************************
+**
+**  test_genprop_basic_list(): Test basic generic property list code.
+**      Tests creating new generic property lists.
+**
+****************************************************************/
+static void
+test_genprop_basic_list(void)
+{
+    hid_t		cid1;		/* Generic Property class ID */
+    hid_t		cid2;		/* Generic Property class ID */
+    hid_t		lid1;		/* Generic Property list ID */
+    size_t		nprops;		/* Number of properties */
+    size_t		size;		/* Size of property */
+    int                 prop1_value;    /* Value for property #1 */
+    float               prop2_value;    /* Value for property #2 */
+    herr_t		ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Generic Property List Creation Functionality\n"));
+
+    /* Create a new generic class, derived from the root of the class hierarchy */
+    cid1 = H5Pcreate_class(H5P_NO_CLASS,CLASS1_NAME,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(cid1, "H5Pcreate_class");
+
+    /* Add several properties (w/default values) */
+
+    /* Insert first property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP1_NAME,PROP1_SIZE,PROP1_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Insert second property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP2_NAME,PROP2_SIZE,PROP2_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Check the number of properties in class */
+    ret = H5Pget_nprops(cid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 2, "H5Pget_nprops");
+
+    /* Create a property list from the class */
+    lid1 = H5Pcreate(cid1);
+    CHECK_I(lid1, "H5Pcreate");
+
+    /* Get the list's class */
+    cid2 = H5Pget_class(lid1);
+    CHECK_I(cid2, "H5Pget_class");
+
+    /* Check that the list's class is correct */
+    ret = H5Pequal(cid1,cid2);
+    VERIFY(ret, 1, "H5Pequal");
+
+    /* Check correct "is a" class/list relationship */
+    ret = H5Pisa_class(lid1,cid1);
+    VERIFY(ret, 1, "H5Pisa_class");
+
+    /* Check "is a" class/list relationship another way */
+    ret = H5Pisa_class(lid1,cid2);
+    VERIFY(ret, 1, "H5Pisa_class");
+
+    /* Close class */
+    ret = H5Pclose_class(cid2);
+    CHECK_I(ret, "H5Pclose_class");
+
+    /* Check the number of properties in list */
+    ret = H5Pget_nprops(lid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 2, "H5Pget_nprops");
+
+    /* Check existence of properties */
+    ret = H5Pexist(lid1,PROP1_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+    ret = H5Pexist(lid1,PROP2_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+
+    /* Check the sizes of the properties */
+    ret = H5Pget_size(lid1,PROP1_NAME,&size);
+    CHECK_I(ret, "H5Pget_size");
+    VERIFY(size, PROP1_SIZE, "H5Pget_size");
+    ret = H5Pget_size(lid1,PROP2_NAME,&size);
+    CHECK_I(ret, "H5Pget_size");
+    VERIFY(size, PROP2_SIZE, "H5Pget_size");
+
+    /* Check values of properties (set with default values) */
+    ret = H5Pget(lid1,PROP1_NAME,&prop1_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop1_value, *PROP1_DEF_VALUE, "H5Pget");
+    ret = H5Pget(lid1,PROP2_NAME,&prop2_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop2_value, *PROP2_DEF_VALUE, "H5Pget");
+
+    /* Close list */
+    ret = H5Pclose(lid1);
+    CHECK_I(ret, "H5Pclose");
+
+    /* Close class */
+    ret = H5Pclose_class(cid1);
+    CHECK_I(ret, "H5Pclose_class");
+
+} /* end test_genprop_basic_list() */
+
+/****************************************************************
+**
+**  test_genprop_basic_list_prop(): Test basic generic property list code.
+**      Tests creating new generic property lists and adding and
+**      removing properties from them.
+**
+****************************************************************/
+static void
+test_genprop_basic_list_prop(void)
+{
+    hid_t		cid1;		/* Generic Property class ID */
+    hid_t		lid1;		/* Generic Property list ID */
+    size_t		nprops;		/* Number of properties */
+    int                 prop1_value;    /* Value for property #1 */
+    float               prop2_value;    /* Value for property #2 */
+    char                prop3_value[10];/* Property #3 value */
+    double              prop4_value;    /* Property #4 value */
+    herr_t		ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Generic Property List Property Functionality\n"));
+
+    /* Create a new generic class, derived from the root of the class hierarchy */
+    cid1 = H5Pcreate_class(H5P_NO_CLASS,CLASS1_NAME,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(cid1, "H5Pcreate_class");
+
+    /* Add several properties (several w/default values) */
+
+    /* Insert first property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP1_NAME,PROP1_SIZE,PROP1_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Insert second property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP2_NAME,PROP2_SIZE,PROP2_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Create a property list from the class */
+    lid1 = H5Pcreate(cid1);
+    CHECK_I(lid1, "H5Pcreate");
+
+    /* Check the number of properties in list */
+    ret = H5Pget_nprops(lid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 2, "H5Pget_nprops");
+
+    /* Add temporary properties */
+
+    /* Insert first temporary property into class (with no callbacks) */
+    ret = H5Pinsert(lid1,PROP3_NAME,PROP3_SIZE,PROP3_DEF_VALUE,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pinsert");
+
+    /* Insert second temporary property into class (with no callbacks) */
+    ret = H5Pinsert(lid1,PROP4_NAME,PROP4_SIZE,PROP4_DEF_VALUE,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pinsert");
+
+    /* Check the number of properties in list */
+    ret = H5Pget_nprops(lid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 4, "H5Pget_nprops");
+
+    /* Check existence of all properties */
+    ret = H5Pexist(lid1,PROP1_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+    ret = H5Pexist(lid1,PROP2_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+    ret = H5Pexist(lid1,PROP3_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+    ret = H5Pexist(lid1,PROP4_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+
+    /* Check values of permanent properties (set with default values) */
+    ret = H5Pget(lid1,PROP1_NAME,&prop1_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop1_value, *PROP1_DEF_VALUE, "H5Pget");
+    ret = H5Pget(lid1,PROP2_NAME,&prop2_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop2_value, *PROP2_DEF_VALUE, "H5Pget");
+
+    /* Check values of temporary properties (set with regular values) */
+    ret = H5Pget(lid1,PROP3_NAME,&prop3_value);
+    CHECK_I(ret, "H5Pget");
+    if(HDmemcmp(&prop3_value,PROP3_DEF_VALUE,PROP3_SIZE)!=0)
+        TestErrPrintf("Property #3 doesn't match!, line=%d\n",__LINE__);
+    ret = H5Pget(lid1,PROP4_NAME,&prop4_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop4_value, *PROP4_DEF_VALUE, "H5Pget");
+
+    /* Delete permanent property */
+    ret = H5Premove(lid1,PROP2_NAME);
+    CHECK_I(ret, "H5Premove");
+
+    /* Check number of properties */
+    ret = H5Pget_nprops(lid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 3, "H5Pget_nprops");
+
+    /* Delete temporary property */
+    ret = H5Premove(lid1,PROP3_NAME);
+    CHECK_I(ret, "H5Premove");
+
+    /* Check number of properties */
+    ret = H5Pget_nprops(lid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 2, "H5Pget_nprops");
+
+    /* Check existence of remaining properties */
+    ret = H5Pexist(lid1,PROP1_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+    ret = H5Pexist(lid1,PROP4_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+
+    /* Check values of permanent properties (set with default values) */
+    ret = H5Pget(lid1,PROP1_NAME,&prop1_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop1_value, *PROP1_DEF_VALUE, "H5Pget");
+
+    /* Check values of temporary properties (set with regular values) */
+    ret = H5Pget(lid1,PROP4_NAME,&prop4_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop4_value, *PROP4_DEF_VALUE, "H5Pget");
+
+    /* Close list */
+    ret = H5Pclose(lid1);
+    CHECK_I(ret, "H5Pclose");
+
+    /* Close class */
+    ret = H5Pclose_class(cid1);
+    CHECK_I(ret, "H5Pclose_class");
+
+} /* end test_genprop_basic_list_prop() */
+
+/****************************************************************
+**
+**  test_genprop_iter2(): Property iterator for test_genprop_list_iter
+**
+****************************************************************/
+static int
+test_genprop_iter2(hid_t id, const char *name, void *iter_data)
+{
+    struct {                /* Struct for iterations */
+        int iter_count;
+        const char **names;
+    } *iter_struct=iter_data;
+
+    /* Shut compiler up */
+    id=id;
+
+    return(HDstrcmp(name,iter_struct->names[iter_struct->iter_count++]));
+}
+
+/****************************************************************
+**
+**  test_genprop_list_iter(): Test basic generic property list code.
+**      Tests iterating over generic property list properties.
+**
+****************************************************************/
+static void
+test_genprop_list_iter(void)
+{
+    hid_t		cid1;		/* Generic Property class ID */
+    hid_t		lid1;		/* Generic Property list ID */
+    size_t		nprops;		/* Number of properties */
+    int         idx;        /* Index to start iteration at */
+    struct {                /* Struct for iterations */
+        int iter_count;
+        const char **names;
+    } iter_struct;
+    const char *pnames[4]={ /* Names of properties for iterator */
+        PROP3_NAME,
+        PROP4_NAME,
+        PROP1_NAME,
+        PROP2_NAME
+        };
+    herr_t		ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Generic Property List Iteration Functionality\n"));
+
+    /* Create a new generic class, derived from the root of the class hierarchy */
+    cid1 = H5Pcreate_class(H5P_NO_CLASS,CLASS1_NAME,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(cid1, "H5Pcreate_class");
+
+    /* Add several properties (several w/default values) */
+
+    /* Insert first property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP1_NAME,PROP1_SIZE,PROP1_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Insert second property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP2_NAME,PROP2_SIZE,PROP2_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Create a property list from the class */
+    lid1 = H5Pcreate(cid1);
+    CHECK_I(lid1, "H5Pcreate");
+
+    /* Check the number of properties in list */
+    ret = H5Pget_nprops(lid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 2, "H5Pget_nprops");
+
+    /* Add temporary properties */
+
+    /* Insert first temporary property into class (with no callbacks) */
+    ret = H5Pinsert(lid1,PROP3_NAME,PROP3_SIZE,PROP3_DEF_VALUE,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pinsert");
+
+    /* Insert second temporary property into class (with no callbacks) */
+    ret = H5Pinsert(lid1,PROP4_NAME,PROP4_SIZE,PROP4_DEF_VALUE,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pinsert");
+
+    /* Check the number of properties in list */
+    ret = H5Pget_nprops(lid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 4, "H5Pget_nprops");
+
+    /* Iterate over all properties in list */
+    iter_struct.iter_count=0;
+    iter_struct.names=pnames;
+    ret = H5Piterate(lid1,NULL,test_genprop_iter2,&iter_struct);
+    VERIFY(ret, 0, "H5Piterate");
+
+    /* Iterate over last three properties in list */
+    idx=iter_struct.iter_count=1;
+    ret = H5Piterate(lid1,&idx,test_genprop_iter2,&iter_struct);
+    VERIFY(ret, 0, "H5Piterate");
+    VERIFY(idx, (int)nprops, "H5Piterate");
+
+    /* Close list */
+    ret = H5Pclose(lid1);
+    CHECK_I(ret, "H5Pclose");
+
+    /* Close class */
+    ret = H5Pclose_class(cid1);
+    CHECK_I(ret, "H5Pclose_class");
+
+} /* end test_genprop_list_iter() */
+
+typedef struct {
+    /* Creation information */
+    int crt_count;
+    char *crt_name;
+    void *crt_value;
+
+    /* Set information */
+    int set_count;
+    hid_t set_plist_id;
+    char *set_name;
+    void *set_value;
+
+    /* Get information */
+    int get_count;
+    hid_t get_plist_id;
+    char *get_name;
+    void *get_value;
+
+    /* Delete information */
+    int del_count;
+    hid_t del_plist_id;
+    char *del_name;
+    void *del_value;
+
+    /* Copy information */
+    int cop_count;
+    char *cop_name;
+    void *cop_value;
+
+    /* Close information */
+    int cls_count;
+    char *cls_name;
+    void *cls_value;
+} prop_cb_info;
+
+/* Global variables for Callback information */
+prop_cb_info prop1_cb_info;     /* Callback statistics for property #1 */
+prop_cb_info prop2_cb_info;     /* Callback statistics for property #2 */
+
+/****************************************************************
+**
+**  test_genprop_prop_crt_cb1(): Property creation callback for test_genprop_list_callback
+**
+****************************************************************/
+static herr_t
+test_genprop_prop_crt_cb1(const char *name, size_t size, void *def_value)
+{
+    /* Set the information from the creation call */
+    prop1_cb_info.crt_count++;
+    prop1_cb_info.crt_name=HDstrdup(name);
+    prop1_cb_info.crt_value=HDmalloc(size);
+    HDmemcpy(prop1_cb_info.crt_value,def_value,size);
+
+    return(SUCCEED);
+}
+
+/****************************************************************
+**
+**  test_genprop_prop_set_cb1(): Property set callback for test_genprop_list_callback
+**
+****************************************************************/
+static herr_t
+test_genprop_prop_set_cb1(hid_t plist_id, const char *name, size_t size, void *value)
+{
+    /* Set the information from the set call */
+    prop1_cb_info.set_count++;
+    prop1_cb_info.set_plist_id=plist_id;
+    if(prop1_cb_info.set_name==NULL)
+        prop1_cb_info.set_name=HDstrdup(name);
+    if(prop1_cb_info.set_value==NULL)
+        prop1_cb_info.set_value=HDmalloc(size);
+    HDmemcpy(prop1_cb_info.set_value,value,size);
+
+    return(SUCCEED);
+}
+
+/****************************************************************
+**
+**  test_genprop_prop_get_cb1(): Property get callback for test_genprop_list_callback
+**
+****************************************************************/
+static herr_t
+test_genprop_prop_get_cb1(hid_t plist_id, const char *name, size_t size, void *value)
+{
+    /* Set the information from the get call */
+    prop1_cb_info.get_count++;
+    prop1_cb_info.get_plist_id=plist_id;
+    if(prop1_cb_info.get_name==NULL)
+        prop1_cb_info.get_name=HDstrdup(name);
+    if(prop1_cb_info.get_value==NULL)
+        prop1_cb_info.get_value=HDmalloc(size);
+    HDmemcpy(prop1_cb_info.get_value,value,size);
+
+    return(SUCCEED);
+}
+
+/****************************************************************
+**
+**  test_genprop_prop_cop_cb1(): Property copy callback for test_genprop_list_callback
+**
+****************************************************************/
+static herr_t
+test_genprop_prop_cop_cb1(const char *name, size_t size, void *value)
+{
+    /* Set the information from the get call */
+    prop1_cb_info.cop_count++;
+    if(prop1_cb_info.cop_name==NULL)
+        prop1_cb_info.cop_name=HDstrdup(name);
+    if(prop1_cb_info.cop_value==NULL)
+        prop1_cb_info.cop_value=HDmalloc(size);
+    HDmemcpy(prop1_cb_info.cop_value,value,size);
+
+    return(SUCCEED);
+}
+
+/****************************************************************
+**
+**  test_genprop_prop_cls_cb1(): Property close callback for test_genprop_list_callback
+**
+****************************************************************/
+static herr_t
+test_genprop_prop_cls_cb1(const char *name, size_t size, void *value)
+{
+    /* Set the information from the close call */
+    prop1_cb_info.cls_count++;
+    if(prop1_cb_info.cls_name==NULL)
+        prop1_cb_info.cls_name=HDstrdup(name);
+    if(prop1_cb_info.cls_value==NULL)
+        prop1_cb_info.cls_value=HDmalloc(size);
+    HDmemcpy(prop1_cb_info.cls_value,value,size);
+
+    return(SUCCEED);
+}
+
+/****************************************************************
+**
+**  test_genprop_prop_del_cb2(): Property delete callback for test_genprop_list_callback
+**
+****************************************************************/
+static herr_t
+test_genprop_prop_del_cb2(hid_t plist_id, const char *name, size_t size, void *value)
+{
+    /* Set the information from the delete call */
+    prop2_cb_info.del_count++;
+    prop2_cb_info.del_plist_id=plist_id;
+    prop2_cb_info.del_name=HDstrdup(name);
+    prop2_cb_info.del_value=HDmalloc(size);
+    HDmemcpy(prop2_cb_info.del_value,value,size);
+
+    return(SUCCEED);
+}
+
+/****************************************************************
+**
+**  test_genprop_list_callback(): Test basic generic property list code.
+**      Tests callbacks for properties in a generic property list.
+**
+****************************************************************/
+static void
+test_genprop_list_callback(void)
+{
+    hid_t	cid1;		/* Generic Property class ID */
+    hid_t	lid1;		/* Generic Property list ID */
+    hid_t	lid2;		/* 2nd Generic Property list ID */
+    size_t	nprops;		/* Number of properties in class */
+    int         prop1_value;    /* Value for property #1 */
+    int         prop1_new_value=20;   /* Property #1 new value */
+    float       prop2_value;    /* Value for property #2 */
+    char        prop3_value[10];/* Property #3 value */
+    double      prop4_value;    /* Property #4 value */
+    struct {                    /* Struct for callbacks */
+        int count;
+        hid_t id;
+    } cop_cb_struct;
+    herr_t	ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Generic Property List Property Callback Functionality\n"));
+
+    /* Create a new generic class, derived from the root of the class hierarchy */
+    cid1 = H5Pcreate_class(H5P_NO_CLASS,CLASS1_NAME,NULL,NULL,test_genprop_cls_cb2,&cop_cb_struct,NULL,NULL);
+    CHECK_I(cid1, "H5Pcreate_class");
+
+    /* Insert first property into class (with callbacks) */
+    ret = H5Pregister(cid1,PROP1_NAME,PROP1_SIZE,PROP1_DEF_VALUE,test_genprop_prop_crt_cb1,test_genprop_prop_set_cb1,test_genprop_prop_get_cb1,NULL,test_genprop_prop_cop_cb1,test_genprop_prop_cls_cb1);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Insert second property into class (with only delete callback) */
+    ret = H5Pregister(cid1,PROP2_NAME,PROP2_SIZE,PROP2_DEF_VALUE,NULL,NULL,NULL,test_genprop_prop_del_cb2,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Insert third property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP3_NAME,PROP3_SIZE,PROP3_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Insert fourth property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP4_NAME,PROP4_SIZE,PROP4_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Check the number of properties in class */
+    ret = H5Pget_nprops(cid1,&nprops);
+    CHECK_I(ret, "H5Pget_nprops");
+    VERIFY(nprops, 4, "H5Pget_nprops");
+
+    /* Initialize class callback structs */
+    cop_cb_struct.count=0;
+    cop_cb_struct.id=(-1);
+
+    /* Initialize callback information for properties tracked */
+    HDmemset(&prop1_cb_info,0,sizeof(prop_cb_info));
+    HDmemset(&prop2_cb_info,0,sizeof(prop_cb_info));
+
+    /* Create a property list from the class */
+    lid1 = H5Pcreate(cid1);
+    CHECK_I(lid1, "H5Pcreate");
+
+    /* Verify creation callback information for properties tracked */
+    VERIFY(prop1_cb_info.crt_count, 1, "H5Pcreate");
+    if(HDstrcmp(prop1_cb_info.crt_name,PROP1_NAME)!=0)
+        TestErrPrintf("Property #1 name doesn't match!, line=%d\n",__LINE__);
+    if(HDmemcmp(prop1_cb_info.crt_value,PROP1_DEF_VALUE,PROP1_SIZE)!=0)
+        TestErrPrintf("Property #1 value doesn't match!, line=%d\n",__LINE__);
+
+    /* Check values of permanent properties (set with default values) */
+    ret = H5Pget(lid1,PROP1_NAME,&prop1_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop1_value, *PROP1_DEF_VALUE, "H5Pget");
+    ret = H5Pget(lid1,PROP2_NAME,&prop2_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop2_value, *PROP2_DEF_VALUE, "H5Pget");
+
+    /* Check values of temporary properties (set with regular values) */
+    ret = H5Pget(lid1,PROP3_NAME,&prop3_value);
+    CHECK_I(ret, "H5Pget");
+    if(HDmemcmp(&prop3_value,PROP3_DEF_VALUE,PROP3_SIZE)!=0)
+        TestErrPrintf("Property #3 doesn't match!, line=%d\n",__LINE__);
+    ret = H5Pget(lid1,PROP4_NAME,&prop4_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop4_value, *PROP4_DEF_VALUE, "H5Pget");
+
+    /* Verify get callback information for properties tracked */
+    VERIFY(prop1_cb_info.get_count, 1, "H5Pget");
+    VERIFY(prop1_cb_info.get_plist_id, lid1, "H5Pget");
+    if(HDstrcmp(prop1_cb_info.get_name,PROP1_NAME)!=0)
+        TestErrPrintf("Property #1 name doesn't match!, line=%d\n",__LINE__);
+    if(HDmemcmp(prop1_cb_info.get_value,PROP1_DEF_VALUE,PROP1_SIZE)!=0)
+        TestErrPrintf("Property #1 value doesn't match!, line=%d\n",__LINE__);
+
+    /* Set value of property #1 to different value */
+    ret = H5Pset(lid1,PROP1_NAME,&prop1_new_value);
+    CHECK_I(ret, "H5Pset");
+
+    /* Verify set callback information for properties tracked */
+    VERIFY(prop1_cb_info.set_count, 1, "H5Pset");
+    VERIFY(prop1_cb_info.set_plist_id, lid1, "H5Pset");
+    if(HDstrcmp(prop1_cb_info.set_name,PROP1_NAME)!=0)
+        TestErrPrintf("Property #1 name doesn't match!, line=%d\n",__LINE__);
+    if(HDmemcmp(prop1_cb_info.set_value,&prop1_new_value,PROP1_SIZE)!=0)
+        TestErrPrintf("Property #1 value doesn't match!, line=%d\n",__LINE__);
+
+    /* Check new value of tracked properties */
+    ret = H5Pget(lid1,PROP1_NAME,&prop1_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop1_value, prop1_new_value, "H5Pget");
+
+    /* Verify get callback information again for properties tracked */
+    VERIFY(prop1_cb_info.get_count, 2, "H5Pget");
+    VERIFY(prop1_cb_info.get_plist_id, lid1, "H5Pget");
+    if(HDstrcmp(prop1_cb_info.get_name,PROP1_NAME)!=0)
+        TestErrPrintf("Property #1 name doesn't match!, line=%d\n",__LINE__);
+    if(HDmemcmp(prop1_cb_info.get_value,&prop1_new_value,PROP1_SIZE)!=0)
+        TestErrPrintf("Property #1 value doesn't match!, line=%d\n",__LINE__);
+
+    /* Delete property #2 */
+    ret = H5Premove(lid1,PROP2_NAME);
+    CHECK_I(ret, "H5Premove");
+
+    /* Verify delete callback information for properties tracked */
+    VERIFY(prop2_cb_info.del_count, 1, "H5Premove");
+    VERIFY(prop2_cb_info.del_plist_id, lid1, "H5Premove");
+    if(HDstrcmp(prop2_cb_info.del_name,PROP2_NAME)!=0)
+        TestErrPrintf("Property #2 name doesn't match!, line=%d\n",__LINE__);
+    if(HDmemcmp(prop2_cb_info.del_value,PROP2_DEF_VALUE,PROP2_SIZE)!=0)
+        TestErrPrintf("Property #2 value doesn't match!, line=%d\n",__LINE__);
+
+    /* Copy first list */
+    lid2 = H5Pcopy(lid1);
+    CHECK_I(lid2, "H5Pcopy");
+
+    /* Verify copy callback information for properties tracked */
+    VERIFY(prop1_cb_info.cop_count, 1, "H5Pcopy");
+    if(HDstrcmp(prop1_cb_info.cop_name,PROP1_NAME)!=0)
+        TestErrPrintf("Property #1 name doesn't match!, line=%d\n",__LINE__);
+    if(HDmemcmp(prop1_cb_info.cop_value,&prop1_new_value,PROP1_SIZE)!=0)
+        TestErrPrintf("Property #1 value doesn't match!, line=%d\n",__LINE__);
+
+    /* Verify that the class creation callback occurred */
+    VERIFY(cop_cb_struct.count, 1, "H5Pcopy");
+    VERIFY(cop_cb_struct.id, lid2, "H5Pcopy");
+
+    /* Close first list */
+    ret = H5Pclose(lid1);
+    CHECK_I(ret, "H5Pclose");
+
+    /* Verify close callback information for properties tracked */
+    VERIFY(prop1_cb_info.cls_count, 1, "H5Pclose");
+    if(HDstrcmp(prop1_cb_info.cls_name,PROP1_NAME)!=0)
+        TestErrPrintf("Property #1 name doesn't match!, line=%d\n",__LINE__);
+    if(HDmemcmp(prop1_cb_info.cls_value,&prop1_new_value,PROP1_SIZE)!=0)
+        TestErrPrintf("Property #1 value doesn't match!, line=%d\n",__LINE__);
+
+    /* Close second list */
+    ret = H5Pclose(lid2);
+    CHECK_I(ret, "H5Pclose");
+
+    /* Verify close callback information for properties tracked */
+    VERIFY(prop1_cb_info.cls_count, 2, "H5Pclose");
+
+    /* Free memory allocated for tracking properties */
+    HDfree(prop1_cb_info.crt_name);
+    HDfree(prop1_cb_info.crt_value);
+    HDfree(prop1_cb_info.get_name);
+    HDfree(prop1_cb_info.get_value);
+    HDfree(prop1_cb_info.set_name);
+    HDfree(prop1_cb_info.set_value);
+    HDfree(prop1_cb_info.cop_name);
+    HDfree(prop1_cb_info.cop_value);
+    HDfree(prop1_cb_info.cls_name);
+    HDfree(prop1_cb_info.cls_value);
+    HDfree(prop2_cb_info.del_name);
+    HDfree(prop2_cb_info.del_value);
+
+    /* Close class */
+    ret = H5Pclose_class(cid1);
+    CHECK_I(ret, "H5Pclose_class");
+} /* end test_genprop_list_callback() */
+
+/****************************************************************
+**
+**  test_genprop_list_addprop(): Test adding properties to a
+**      standard HDF5 property list and verify that the library
+**      ignores the extra properties.
+**
+****************************************************************/
+static void
+test_genprop_list_addprop(void)
+{
+    hid_t fid;          /* File ID */
+    hid_t did;          /* Dataset ID */
+    hid_t sid;          /* Dataspace ID */
+    hid_t pid;          /* Property List ID */
+    int   prop1_value;  /* Value for property #1 */
+    herr_t ret;		/* Generic return value	*/
+
+    /* Create file */
+    fid = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create scalar dataspace for dataset */
+    sid = H5Screate(H5S_SCALAR);
+    CHECK(sid, FAIL, "H5Screate");
+
+    /* Create a dataset creation property list */
+    pid = H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(pid, FAIL, "H5Pcreate");
+
+    /* Insert temporary property into class (with no callbacks) */
+    ret = H5Pinsert(pid,PROP1_NAME,PROP1_SIZE,PROP1_DEF_VALUE,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pinsert");
+
+    /* Check existence of added property */
+    ret = H5Pexist(pid,PROP1_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+
+    /* Check values of property (set with default value) */
+    ret = H5Pget(pid,PROP1_NAME,&prop1_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop1_value, *PROP1_DEF_VALUE, "H5Pget");
+
+    /* Create a dataset */
+    did=H5Dcreate(fid,"Dataset1",H5T_NATIVE_INT,sid,pid);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Check existence of added property (after using property list) */
+    ret = H5Pexist(pid,PROP1_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+
+    /* Check values of property (set with default value) (after using property list) */
+    ret = H5Pget(pid,PROP1_NAME,&prop1_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop1_value, *PROP1_DEF_VALUE, "H5Pget");
+
+    /* Close property list */
+    ret = H5Pclose(pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_genprop_list_addprop() */
+
+/****************************************************************
+**
+**  test_genprop_class_addprop(): Test adding properties to a
+**      standard HDF5 property class and verify that the library
+**      ignores the extra properties and continues to recognize the
+**      derived class as a valid version of the derived-from class.
+**
+****************************************************************/
+static void
+test_genprop_class_addprop(void)
+{
+    hid_t fid;          /* File ID */
+    hid_t did;          /* Dataset ID */
+    hid_t sid;          /* Dataspace ID */
+    hid_t cid;          /* Property Class ID */
+    hid_t pid;          /* Property List ID */
+    int   prop1_value;  /* Value for property #1 */
+    herr_t ret;		/* Generic return value	*/
+
+    /* Create file */
+    fid = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create scalar dataspace for dataset */
+    sid = H5Screate(H5S_SCALAR);
+    CHECK(sid, FAIL, "H5Screate");
+
+    /* Create a new class, dervied from the dataset creation property list class */
+    cid = H5Pcreate_class(H5P_DATASET_CREATE,CLASS1_NAME,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(cid, "H5Pcreate_class");
+
+    /* Check existence of an original property */
+    ret = H5Pexist(cid,H5D_CRT_DATA_PIPELINE_NAME);
+    VERIFY(ret, 0, "H5Pexist");
+
+    /* Insert first property into class (with no callbacks) */
+    ret = H5Pregister(cid,PROP1_NAME,PROP1_SIZE,PROP1_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Create a derived dataset creation property list */
+    pid = H5Pcreate(cid);
+    CHECK(pid, FAIL, "H5Pcreate");
+
+    /* Check existence of an original property */
+    ret = H5Pexist(pid,H5D_CRT_DATA_PIPELINE_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+
+    /* Check existence of added property */
+    ret = H5Pexist(pid,PROP1_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+
+    /* Check values of property (set with default value) */
+    ret = H5Pget(pid,PROP1_NAME,&prop1_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop1_value, *PROP1_DEF_VALUE, "H5Pget");
+
+    /* Create a dataset */
+    did=H5Dcreate(fid,"Dataset1",H5T_NATIVE_INT,sid,pid);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Check existence of added property (after using property list) */
+    ret = H5Pexist(pid,PROP1_NAME);
+    VERIFY(ret, 1, "H5Pexist");
+
+    /* Check values of property (set with default value) (after using property list) */
+    ret = H5Pget(pid,PROP1_NAME,&prop1_value);
+    CHECK_I(ret, "H5Pget");
+    VERIFY(prop1_value, *PROP1_DEF_VALUE, "H5Pget");
+
+    /* Close property class */
+    ret = H5Pclose_class(cid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close property list */
+    ret = H5Pclose(pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_genprop_class_addprop() */
+
+/****************************************************************
+**
+**  test_genprop_equal(): Test basic generic property list code.
+**      More tests for H5Pequal()
+**
+****************************************************************/
+static void
+test_genprop_equal(void)
+{
+    hid_t		cid1;		/* Generic Property class ID */
+    hid_t		lid1;		/* Generic Property list ID */
+    hid_t		lid2;		/* Generic Property list ID */
+    herr_t		ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Generic Property List Equal Functionality\n"));
+
+    /* Create a new generic class, derived from the root of the class hierarchy */
+    cid1 = H5Pcreate_class(H5P_NO_CLASS,CLASS1_NAME,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(cid1, "H5Pcreate_class");
+
+    /* Insert first property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP1_NAME,PROP1_SIZE,PROP1_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Insert second property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP2_NAME,PROP2_SIZE,PROP2_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Create a property list from the class */
+    lid1 = H5Pcreate(cid1);
+    CHECK_I(lid1, "H5Pcreate");
+
+    /* Copy the property list */
+    lid2 = H5Pcopy(lid1);
+    CHECK_I(lid2, "H5Pcopy");
+
+    /* Check that the lists are equal */
+    ret = H5Pequal(lid1,lid2);
+    VERIFY(ret, 1, "H5Pequal");
+
+    /* Close class */
+    ret = H5Pclose_class(cid1);
+    CHECK_I(ret, "H5Pclose_class");
+
+} /* ent test_genprop_equal() */
+
+/****************************************************************
+**
+**  test_genprop_path(): Test basic generic property list code.
+**      Tests for class paths
+**
+****************************************************************/
+static void
+test_genprop_path(void)
+{
+    hid_t		cid1;		/* Generic Property class ID */
+    hid_t		cid2;		/* Generic Property class ID */
+    hid_t		cid3;		/* Generic Property class ID */
+    char               *path;           /* Class path */
+    herr_t		ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Generic Property List Class Path Functionality\n"));
+
+    /* Create a new generic class, derived from the root of the class hierarchy */
+    cid1 = H5Pcreate_class(H5P_NO_CLASS,CLASS1_NAME,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(cid1, "H5Pcreate_class");
+
+    /* Insert first property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP1_NAME,PROP1_SIZE,PROP1_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Get full path for first class */
+    path=H5P_get_class_path_test(cid1);
+    CHECK_PTR(path, "H5P_get_class_path_test");
+    if(HDstrcmp(path,CLASS1_PATH)!=0)
+        TestErrPrintf("Class names don't match!, path=%s, CLASS1_PATH=%s\n",path,CLASS1_PATH);
+    HDfree(path);
+
+    /* Create another new generic class, derived from first class */
+    cid2 = H5Pcreate_class(cid1,CLASS2_NAME,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(cid2, "H5Pcreate_class");
+
+    /* Insert second property into class (with no callbacks) */
+    ret = H5Pregister(cid2,PROP2_NAME,PROP2_SIZE,PROP2_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Get full path for second class */
+    path=H5P_get_class_path_test(cid2);
+    CHECK_PTR(path, "H5P_get_class_path_test");
+    if(HDstrcmp(path,CLASS2_PATH)!=0)
+        TestErrPrintf("Class names don't match!, path=%s, CLASS2_PATH=%s\n",path,CLASS2_PATH);
+
+    /* Open a copy of the class with the path name */
+    cid3 = H5P_open_class_path_test(path);
+    CHECK_I(cid3, "H5Popen_class_path");
+
+    /* Check that the classes are equal */
+    ret = H5Pequal(cid2,cid3);
+    VERIFY(ret, 1, "H5Pequal");
+
+    /* Release the path string */
+    free(path);
+
+    /* Close class */
+    ret = H5Pclose_class(cid3);
+    CHECK_I(ret, "H5Pclose_class");
+
+    /* Close class */
+    ret = H5Pclose_class(cid1);
+    CHECK_I(ret, "H5Pclose_class");
+
+    /* Close class */
+    ret = H5Pclose_class(cid2);
+    CHECK_I(ret, "H5Pclose_class");
+
+} /* ent test_genprop_path() */
+
+/****************************************************************
+**
+**  test_genprop_refcount(): Test basic generic property list code.
+**      Tests for correct reference counting
+**
+****************************************************************/
+static void
+test_genprop_refcount(void)
+{
+    hid_t		cid1;		/* Generic Property class ID */
+    hid_t		lid1;		/* Generic Property class ID */
+    char               *name;           /* Name of class */
+    herr_t		ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Generic Property List Reference Count Functionality\n"));
+
+    /* Create a new generic class, derived from the root of the class hierarchy */
+    cid1 = H5Pcreate_class(H5P_NO_CLASS,CLASS1_NAME,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(cid1, "H5Pcreate_class");
+
+    /* Insert first property into class (with no callbacks) */
+    ret = H5Pregister(cid1,PROP1_NAME,PROP1_SIZE,PROP1_DEF_VALUE,NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK_I(ret, "H5Pregister");
+
+    /* Create a new generic list, derived from the root of the class hierarchy */
+    lid1 = H5Pcreate(cid1);
+    CHECK_I(lid1, "H5Pcreate");
+
+    /* Check class name */
+    name = H5Pget_class_name(cid1);
+    CHECK_PTR(name, "H5Pget_class_name");
+    if(HDstrcmp(name,CLASS1_NAME)!=0)
+        TestErrPrintf("Class names don't match!, name=%s, CLASS1_NAME=%s\n",name,CLASS1_NAME);
+    HDfree(name);
+
+    /* Close class */
+    ret = H5Pclose_class(cid1);
+    CHECK_I(ret, "H5Pclose_class");
+
+    /* Get the list's class */
+    cid1 = H5Pget_class(lid1);
+    CHECK_I(cid1, "H5Pget_class");
+
+    /* Check correct "is a" class/list relationship */
+    ret = H5Pisa_class(lid1,cid1);
+    VERIFY(ret, 1, "H5Pisa_class");
+
+    /* Check class name */
+    name = H5Pget_class_name(cid1);
+    CHECK_PTR(name, "H5Pget_class_name");
+    if(HDstrcmp(name,CLASS1_NAME)!=0)
+        TestErrPrintf("Class names don't match!, name=%s, CLASS1_NAME=%s\n",name,CLASS1_NAME);
+    HDfree(name);
+
+    /* Close list */
+    ret = H5Pclose(lid1);
+    CHECK_I(ret, "H5Pclose");
+
+    /* Check class name */
+    name = H5Pget_class_name(cid1);
+    CHECK_PTR(name, "H5Pget_class_name");
+    if(HDstrcmp(name,CLASS1_NAME)!=0)
+        TestErrPrintf("Class names don't match!, name=%s, CLASS1_NAME=%s\n",name,CLASS1_NAME);
+    HDfree(name);
+
+    /* Close class */
+    ret = H5Pclose_class(cid1);
+    CHECK_I(ret, "H5Pclose_class");
+
+} /* ent test_genprop_refcount() */
+
+/****************************************************************
+**
+**  test_genprop(): Main generic property testing routine.
+**
+****************************************************************/
+void
+test_genprop(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Generic Properties\n"));
+
+    /* These tests use the same file... */
+    test_genprop_basic_class(); /* Test basic code for creating a generic class */
+    test_genprop_basic_class_prop(); /* Test basic code for adding properties to a generic class */
+    test_genprop_class_iter();  /* Test code for iterating over properties in a generic class */
+    test_genprop_class_callback();  /* Test code for property class callbacks */
+
+    test_genprop_basic_list();  /* Test basic code for creating a generic property list */
+    test_genprop_basic_list_prop(); /* Test basic code for adding properties to a generic property list */
+    test_genprop_list_iter();  /* Test basic code for iterating over properties in a generic property list */
+    test_genprop_list_callback();  /* Test code for property list callbacks */
+
+    test_genprop_list_addprop();    /* Test adding properties to HDF5 property list */
+    test_genprop_class_addprop();   /* Test adding properties to HDF5 property class */
+
+    test_genprop_equal();       /* Tests for more H5Pequal verification */
+    test_genprop_path();        /* Tests for class path verification */
+    test_genprop_refcount();    /* Tests for class reference counting */
+
+}   /* test_genprop() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_genprop
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Quincey Koziol
+ *              June 8, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_genprop(void)
+{
+    remove(FILENAME);
+}
+

Added: packages/hdf5/branches/upstream/current/test/th5s.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/th5s.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/th5s.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,768 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/***********************************************************
+*
+* Test program:	 th5s
+*
+* Test the dataspace functionality
+*
+*************************************************************/
+
+#include "testhdf5.h"
+
+#include "H5private.h"
+#include "H5Bprivate.h"
+#include "H5Sprivate.h"
+#include "H5Pprivate.h"
+
+#define TESTFILE   "th5s.h5"
+#define DATAFILE   "th5s1.h5"
+#define NULLFILE   "tnullspace.h5"
+#define BASICFILE  "th5s3.h5"
+
+/* 3-D dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	3
+#define SPACE1_DIM1	3
+#define SPACE1_DIM2	15
+#define SPACE1_DIM3	13
+
+/* 4-D dataset with one unlimited dimension */
+#define SPACE2_NAME  "Space2"
+#define SPACE2_RANK	4
+#define SPACE2_DIM1	0
+#define SPACE2_DIM2	15
+#define SPACE2_DIM3	13
+#define SPACE2_DIM4	23
+#define SPACE2_MAX1	H5S_UNLIMITED
+#define SPACE2_MAX2	15
+#define SPACE2_MAX3	13
+#define SPACE2_MAX4	23
+
+/* Scalar dataset with simple datatype */
+#define SPACE3_NAME  "Scalar1"
+#define SPACE3_RANK	0
+unsigned space3_data=65;
+
+/* Scalar dataset with compound datatype */
+#define SPACE4_NAME  "Scalar2"
+#define SPACE4_RANK	0
+#define SPACE4_FIELDNAME1	"c1"
+#define SPACE4_FIELDNAME2	"u"
+#define SPACE4_FIELDNAME3	"f"
+#define SPACE4_FIELDNAME4	"c2"
+size_t space4_field1_off=0;
+size_t space4_field2_off=0;
+size_t space4_field3_off=0;
+size_t space4_field4_off=0;
+struct space4_struct {
+    char c1;
+    unsigned u;
+    float f;
+    char c2;
+ } space4_data={'v',987123,(float)-3.14,'g'}; /* Test data for 4th dataspace */
+
+/* NULL dataspace info */
+#define NULLDATASET  "null_dataset"
+#define BASICDATASET "basic_dataset"
+#define BASICDATASET2 "basic_dataset2"
+#define NULLATTR   "null_attribute"
+#define BASICATTR  "basic_attribute"
+
+/****************************************************************
+**
+**  test_h5s_basic(): Test basic H5S (dataspace) code.
+**
+****************************************************************/
+static void
+test_h5s_basic(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		sid1, sid2;	/* Dataspace ID			*/
+    hid_t		dset1;		/* Dataset ID			*/
+    hid_t       aid1;       /* Attribute ID         */
+    int		        rank;		/* Logical rank of dataspace	*/
+    hsize_t		dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    hsize_t		dims2[] = {SPACE2_DIM1, SPACE2_DIM2, SPACE2_DIM3,
+				   SPACE2_DIM4};
+    hsize_t		dims3[H5S_MAX_RANK+1];
+    hsize_t		max2[] = {SPACE2_MAX1, SPACE2_MAX2, SPACE2_MAX3,
+				  SPACE2_MAX4};
+    hsize_t		tdims[4];	/* Dimension array to test with */
+    hsize_t		tmax[4];
+    hssize_t		n;	 	/* Number of dataspace elements */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Dataspace Manipulation\n"));
+
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    n = H5Sget_simple_extent_npoints(sid1);
+    CHECK(n, FAIL, "H5Sget_simple_extent_npoints");
+    VERIFY(n, SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3,
+	   "H5Sget_simple_extent_npoints");
+
+    rank = H5Sget_simple_extent_ndims(sid1);
+    CHECK(rank, FAIL, "H5Sget_simple_extent_ndims");
+    VERIFY(rank, SPACE1_RANK, "H5Sget_simple_extent_ndims");
+
+    rank = H5Sget_simple_extent_dims(sid1, tdims, NULL);
+    CHECK(rank, FAIL, "H5Sget_simple_extent_dims");
+    VERIFY(HDmemcmp(tdims, dims1, SPACE1_RANK * sizeof(hsize_t)), 0,
+	   "H5Sget_simple_extent_dims");
+
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, max2);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    n = H5Sget_simple_extent_npoints(sid2);
+    CHECK(n, FAIL, "H5Sget_simple_extent_npoints");
+    VERIFY(n, SPACE2_DIM1 * SPACE2_DIM2 * SPACE2_DIM3 * SPACE2_DIM4,
+	   "H5Sget_simple_extent_npoints");
+
+    rank = H5Sget_simple_extent_ndims(sid2);
+    CHECK(rank, FAIL, "H5Sget_simple_extent_ndims");
+    VERIFY(rank, SPACE2_RANK, "H5Sget_simple_extent_ndims");
+
+    rank = H5Sget_simple_extent_dims(sid2, tdims, tmax);
+    CHECK(rank, FAIL, "H5Sget_simple_extent_dims");
+    VERIFY(HDmemcmp(tdims, dims2, SPACE2_RANK * sizeof(hsize_t)), 0,
+	   "H5Sget_simple_extent_dims");
+    VERIFY(HDmemcmp(tmax, max2, SPACE2_RANK * sizeof(hsize_t)), 0,
+	   "H5Sget_simple_extent_dims");
+
+    /* Change max dims from zero to non-zero and back again */
+    ret = H5Sset_extent_simple(sid1, SPACE1_RANK, dims1, max2);
+    CHECK(ret, FAIL, "H5Sset_extent_simple");
+    ret = H5Sset_extent_simple(sid1, SPACE1_RANK, dims1, NULL);
+    CHECK(ret, FAIL, "H5Sset_extent_simple");
+    rank = H5Sget_simple_extent_dims(sid1, tdims, tmax);
+    CHECK(rank, FAIL, "H5Sget_simple_extent_dims");
+    VERIFY(HDmemcmp(tdims, dims1, SPACE1_RANK * sizeof(hsize_t)), 0,
+	   "H5Sget_simple_extent_dims");
+    VERIFY(HDmemcmp(tmax, dims1, SPACE1_RANK * sizeof(hsize_t)), 0,
+	   "H5Sget_simple_extent_dims");
+
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /*
+     * Check to be sure we can't create a simple data space that has too many
+     * dimensions.
+     */
+    H5E_BEGIN_TRY {
+	sid1 = H5Screate_simple(H5S_MAX_RANK+1, dims3, NULL);
+    } H5E_END_TRY;
+    VERIFY(sid1, FAIL, "H5Screate_simple");
+
+    /*
+     * Try reading a file that has been prepared that has a dataset with a
+     * higher dimensionality than what the library can handle.
+     *
+     * If this test fails and the H5S_MAX_RANK variable has changed, follow
+     * the instructions in space_overflow.c for regenerating the th5s.h5 file.
+     */
+    {
+    char testfile[512]="";
+    char *srcdir = HDgetenv("srcdir");
+    if (srcdir && ((HDstrlen(srcdir) + HDstrlen(TESTFILE) + 1) < sizeof(testfile))){
+	HDstrcpy(testfile, srcdir);
+	HDstrcat(testfile, "/");
+    }
+    HDstrcat(testfile, TESTFILE);
+    fid1 = H5Fopen(testfile, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK_I(fid1, "H5Fopen");
+    if (fid1 >= 0){
+	dset1 = H5Dopen(fid1, "dset");
+	VERIFY(dset1, FAIL, "H5Dopen");
+	ret = H5Fclose(fid1);
+	CHECK_I(ret, "H5Fclose");
+    }
+    else
+	printf("***cannot open the pre-created H5S_MAX_RANK test file (%s)\n",
+	    testfile);
+    }
+
+    /* Verify that incorrect dimensions don't work */
+    dims1[0]=0;
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    VERIFY(sid1, FAIL, "H5Screate_simple");
+
+    sid1 = H5Screate(H5S_SIMPLE);
+    CHECK(sid1, FAIL, "H5Screate");
+
+    ret = H5Sset_extent_simple(sid1,SPACE1_RANK,dims1,NULL);
+    VERIFY(ret, FAIL, "H5Sset_extent_simple");
+
+    ret = H5Sclose(sid1);
+    CHECK_I(ret, "H5Sclose");
+
+    /*
+     * Try writing simple dataspaces without setting their extents
+     */
+    /* Create the file */
+    fid1 = H5Fcreate(BASICFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    dims1[0]=SPACE1_DIM1;
+
+    sid1 = H5Screate(H5S_SIMPLE);
+    CHECK(sid1, FAIL, "H5Screate");
+    sid2 = H5Screate_simple(1, dims1, dims1);
+    CHECK(sid2, FAIL, "H5Screate");
+
+    /* This dataset's space has no extent; it should not be created */
+    H5E_BEGIN_TRY {
+    dset1 = H5Dcreate(fid1, BASICDATASET, H5T_NATIVE_INT, sid1, H5P_DEFAULT);
+    } H5E_END_TRY
+    VERIFY(dset1, FAIL, "H5Dcreate");
+
+    dset1 = H5Dcreate(fid1, BASICDATASET2, H5T_NATIVE_INT, sid2, H5P_DEFAULT);
+    CHECK(dset1, FAIL, "H5Dcreate");
+
+    /* Try some writes with the bad dataspace (sid1) */
+    H5E_BEGIN_TRY {
+    ret = H5Dwrite(dset1, H5T_NATIVE_INT, sid1, H5S_ALL, H5P_DEFAULT, &n);
+    } H5E_END_TRY
+    VERIFY(ret, FAIL, "H5Dwrite");
+
+    H5E_BEGIN_TRY {
+    ret = H5Dwrite(dset1, H5T_NATIVE_INT, H5S_ALL, sid1, H5P_DEFAULT, &n);
+    } H5E_END_TRY
+    VERIFY(ret, FAIL, "H5Dwrite");
+
+    H5E_BEGIN_TRY {
+    ret = H5Dwrite(dset1, H5T_NATIVE_INT, sid1, sid1, H5P_DEFAULT, &n);
+    } H5E_END_TRY
+    VERIFY(ret, FAIL, "H5Dwrite");
+
+    /* Try to iterate using the bad dataspace */
+    H5E_BEGIN_TRY {
+    ret = H5Diterate(&n, H5T_NATIVE_INT, sid1, NULL, NULL);
+    } H5E_END_TRY
+    VERIFY(ret, FAIL, "H5Diterate");
+
+    /* Try to fill using the bad dataspace */
+    H5E_BEGIN_TRY {
+    ret = H5Dfill(NULL, H5T_NATIVE_INT, &n, H5T_NATIVE_INT, sid1);
+    } H5E_END_TRY
+    VERIFY(ret, FAIL, "H5Dfill");
+
+    /* Now use the bad dataspace as the space for an attribute */
+    H5E_BEGIN_TRY {
+    aid1 = H5Acreate(dset1, BASICATTR,
+                        H5T_NATIVE_INT, sid1, H5P_DEFAULT);
+    } H5E_END_TRY
+    VERIFY(aid1, FAIL, "H5Acreate");
+
+    /* Make sure that dataspace reads using the bad dataspace fail */
+    H5E_BEGIN_TRY {
+    ret = H5Dread(dset1, H5T_NATIVE_INT, sid1, H5S_ALL, H5P_DEFAULT, &n);
+    } H5E_END_TRY
+    VERIFY(ret, FAIL, "H5Dread");
+
+    H5E_BEGIN_TRY {
+    ret = H5Dread(dset1, H5T_NATIVE_INT, H5S_ALL, sid1, H5P_DEFAULT, &n);
+    } H5E_END_TRY
+    VERIFY(ret, FAIL, "H5Dread");
+
+    H5E_BEGIN_TRY {
+    ret = H5Dread(dset1, H5T_NATIVE_INT, sid1, sid1, H5P_DEFAULT, &n);
+    } H5E_END_TRY
+    VERIFY(ret, FAIL, "H5Dread");
+
+    /* Clean up */
+    ret = H5Dclose(dset1);
+    CHECK(ret, FAIL, "H5Dclose");
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}				/* test_h5s_basic() */
+
+/****************************************************************
+**
+**  test_h5s_scalar_write(): Test scalar H5S (dataspace) writing code.
+**
+****************************************************************/
+static void
+test_h5s_scalar_write(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;	    /* Dataspace ID			*/
+    int		        rank;		/* Logical rank of dataspace	*/
+    hsize_t		tdims[4];	/* Dimension array to test with */
+    hssize_t		n;	 	/* Number of dataspace elements */
+    H5S_class_t ext_type;   /* Extent type */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Scalar Dataspace Manipulation during Writing\n"));
+
+    /* Create file */
+    fid1 = H5Fcreate(DATAFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create scalar dataspace */
+    sid1 = H5Screate_simple(SPACE3_RANK, NULL, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    n = H5Sget_simple_extent_npoints(sid1);
+    CHECK(n, FAIL, "H5Sget_simple_extent_npoints");
+    VERIFY(n, 1, "H5Sget_simple_extent_npoints");
+
+    rank = H5Sget_simple_extent_ndims(sid1);
+    CHECK(rank, FAIL, "H5Sget_simple_extent_ndims");
+    VERIFY(rank, SPACE3_RANK, "H5Sget_simple_extent_ndims");
+
+    rank = H5Sget_simple_extent_dims(sid1, tdims, NULL);
+    VERIFY(rank, 0, "H5Sget_simple_extent_dims");
+
+    /* Verify extent type */
+    ext_type = H5Sget_simple_extent_type(sid1);
+    VERIFY(ext_type, H5S_SCALAR, "H5Sget_simple_extent_type");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UINT,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    ret = H5Dwrite(dataset, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &space3_data);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close scalar dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}				/* test_h5s_scalar_write() */
+
+/****************************************************************
+**
+**  test_h5s_scalar_read(): Test scalar H5S (dataspace) reading code.
+**
+****************************************************************/
+static void
+test_h5s_scalar_read(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;	    	/* Dataspace ID			*/
+    int		        rank;		/* Logical rank of dataspace	*/
+    hsize_t		tdims[4];	/* Dimension array to test with */
+    hssize_t		n;	 	/* Number of dataspace elements */
+    unsigned      	rdata;      	/* Scalar data read in 		*/
+    herr_t		ret;		/* Generic return value		*/
+    H5S_class_t ext_type;               /* Extent type */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Scalar Dataspace Manipulation during Reading\n"));
+
+    /* Create file */
+    fid1 = H5Fopen(DATAFILE, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Create a dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    sid1=H5Dget_space(dataset);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    n = H5Sget_simple_extent_npoints(sid1);
+    CHECK(n, FAIL, "H5Sget_simple_extent_npoints");
+    VERIFY(n, 1, "H5Sget_simple_extent_npoints");
+
+    rank = H5Sget_simple_extent_ndims(sid1);
+    CHECK(rank, FAIL, "H5Sget_simple_extent_ndims");
+    VERIFY(rank, SPACE3_RANK, "H5Sget_simple_extent_ndims");
+
+    rank = H5Sget_simple_extent_dims(sid1, tdims, NULL);
+    VERIFY(rank, 0, "H5Sget_simple_extent_dims");
+
+    /* Verify extent type */
+    ext_type = H5Sget_simple_extent_type(sid1);
+    VERIFY(ext_type, H5S_SCALAR, "H5Sget_simple_extent_type");
+
+    ret = H5Dread(dataset, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdata);
+    CHECK(ret, FAIL, "H5Dread");
+    VERIFY(rdata, space3_data, "H5Dread");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close scalar dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}				/* test_h5s_scalar_read() */
+
+/****************************************************************
+**
+**  test_h5s_compound_scalar_write(): Test scalar H5S (dataspace) writing for
+**          compound datatypes.
+**
+****************************************************************/
+static void
+test_h5s_compound_scalar_write(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t       	tid1;       	/* Attribute datatype ID	*/
+    hid_t		sid1;	    	/* Dataspace ID			*/
+    int		        rank;		/* Logical rank of dataspace	*/
+    hsize_t		tdims[4];	/* Dimension array to test with */
+    hssize_t		n;	 	/* Number of dataspace elements */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Scalar Dataspace Manipulation for Writing Compound Datatypes\n"));
+
+    /* Create file */
+    fid1 = H5Fcreate(DATAFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create the compound datatype.  */
+    tid1 = H5Tcreate (H5T_COMPOUND, sizeof(struct space4_struct));
+    CHECK(tid1, FAIL, "H5Tcreate");
+    space4_field1_off=HOFFSET(struct space4_struct, c1);
+    ret = H5Tinsert(tid1, SPACE4_FIELDNAME1, space4_field1_off,
+		    H5T_NATIVE_SCHAR);
+    CHECK(ret, FAIL, "H5Tinsert");
+    space4_field2_off=HOFFSET(struct space4_struct, u);
+    ret = H5Tinsert(tid1, SPACE4_FIELDNAME2, space4_field2_off,
+		    H5T_NATIVE_UINT);
+    CHECK(ret, FAIL, "H5Tinsert");
+    space4_field3_off=HOFFSET(struct space4_struct, f);
+    ret = H5Tinsert(tid1, SPACE4_FIELDNAME3, space4_field3_off,
+		    H5T_NATIVE_FLOAT);
+    CHECK(ret, FAIL, "H5Tinsert");
+    space4_field4_off=HOFFSET(struct space4_struct, c2);
+    ret = H5Tinsert(tid1, SPACE4_FIELDNAME4, space4_field4_off,
+		    H5T_NATIVE_SCHAR);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    /* Create scalar dataspace */
+    sid1 = H5Screate_simple(SPACE3_RANK, NULL, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    n = H5Sget_simple_extent_npoints(sid1);
+    CHECK(n, FAIL, "H5Sget_simple_extent_npoints");
+    VERIFY(n, 1, "H5Sget_simple_extent_npoints");
+
+    rank = H5Sget_simple_extent_ndims(sid1);
+    CHECK(rank, FAIL, "H5Sget_simple_extent_ndims");
+    VERIFY(rank, SPACE3_RANK, "H5Sget_simple_extent_ndims");
+
+    rank = H5Sget_simple_extent_dims(sid1, tdims, NULL);
+    VERIFY(rank, 0, "H5Sget_simple_extent_dims");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    ret = H5Dwrite(dataset, tid1, H5S_ALL, H5S_ALL, H5P_DEFAULT, &space4_data);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close scalar dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}				/* test_h5s_compound_scalar_write() */
+
+/****************************************************************
+**
+**  test_h5s_compound_scalar_read(): Test scalar H5S (dataspace) reading for
+**          compound datatypes.
+**
+****************************************************************/
+static void
+test_h5s_compound_scalar_read(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;	    	/* Dataspace ID			*/
+    hid_t       	type;       	/* Datatype             	*/
+    int		        rank;		/* Logical rank of dataspace	*/
+    hsize_t		tdims[4];	/* Dimension array to test with */
+    hssize_t		n;	 	/* Number of dataspace elements */
+    struct space4_struct rdata; 	/* Scalar data read in 		*/
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Scalar Dataspace Manipulation for Reading Compound Datatypes\n"));
+
+    /* Create file */
+    fid1 = H5Fopen(DATAFILE, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Create a dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    sid1=H5Dget_space(dataset);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    n = H5Sget_simple_extent_npoints(sid1);
+    CHECK(n, FAIL, "H5Sget_simple_extent_npoints");
+    VERIFY(n, 1, "H5Sget_simple_extent_npoints");
+
+    rank = H5Sget_simple_extent_ndims(sid1);
+    CHECK(rank, FAIL, "H5Sget_simple_extent_ndims");
+    VERIFY(rank, SPACE3_RANK, "H5Sget_simple_extent_ndims");
+
+    rank = H5Sget_simple_extent_dims(sid1, tdims, NULL);
+    VERIFY(rank, 0, "H5Sget_simple_extent_dims");
+
+    type=H5Dget_type(dataset);
+    CHECK(type, FAIL, "H5Dget_type");
+
+    ret = H5Dread(dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdata);
+    CHECK(ret, FAIL, "H5Dread");
+    if(HDmemcmp(&space4_data,&rdata,sizeof(struct space4_struct))) {
+        printf("scalar data different: space4_data.c1=%c, read_data4.c1=%c\n",space4_data.c1,rdata.c1);
+        printf("scalar data different: space4_data.u=%u, read_data4.u=%u\n",space4_data.u,rdata.u);
+        printf("scalar data different: space4_data.f=%f, read_data4.f=%f\n",space4_data.f,rdata.f);
+        TestErrPrintf("scalar data different: space4_data.c1=%c, read_data4.c1=%c\n",space4_data.c1,rdata.c2);
+     } /* end if */
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close scalar dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}				/* test_h5s_compound_scalar_read() */
+
+/* Data arrays for chunk test */
+double  chunk_data_dbl[50000][3];
+float  chunk_data_flt[50000][3];
+
+/****************************************************************
+**
+**  test_h5s_chunk(): Exercise chunked I/O, testing when data conversion
+**      is necessary and the entire chunk read in doesn't fit into the
+**      conversion buffer
+**
+****************************************************************/
+static void
+test_h5s_chunk(void)
+{
+    herr_t status;
+    hid_t fileID, dsetID;
+    hid_t plist_id;
+    hid_t space_id;
+    hsize_t dims[2];
+    hsize_t csize[2];
+    int i,j;
+
+    fileID = H5Fcreate(DATAFILE,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);
+    CHECK(fileID, FAIL, "H5Fcreate");
+
+    plist_id = H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(plist_id, FAIL, "H5Pcreate");
+
+    csize[0] = 50000;
+    csize[1] = 3;
+    status = H5Pset_chunk(plist_id, 2, csize);
+    CHECK(status, FAIL, "H5Pset_chunk");
+
+    /* Create the data space */
+    dims[0] = 50000;
+    dims[1] = 3;
+    space_id = H5Screate_simple(2, dims, NULL);
+    CHECK(space_id, FAIL, "H5Screate_simple");
+
+    dsetID = H5Dcreate(fileID,"coords",H5T_NATIVE_FLOAT,space_id,plist_id);
+    CHECK(dsetID, FAIL, "H5Dcreate");
+
+    /* Initialize float array */
+    for(i=0; i<50000; i++)
+        for(j=0; j<3; j++)
+            chunk_data_flt[i][j]=(float)(i*2.5-j*100.3);
+
+    status= H5Dwrite(dsetID,H5T_NATIVE_FLOAT,H5S_ALL,H5S_ALL,H5P_DEFAULT,chunk_data_flt);
+    CHECK(status, FAIL, "H5Dwrite");
+
+    status=H5Pclose(plist_id);
+    CHECK(status, FAIL, "H5Pclose");
+    status=H5Sclose(space_id);
+    CHECK(status, FAIL, "H5Sclose");
+    status=H5Dclose(dsetID);
+    CHECK(status, FAIL, "H5Dclose");
+    status=H5Fclose(fileID);
+    CHECK(status, FAIL, "H5Fclose");
+
+    /* Reset/initialize the data arrays to read in */
+    HDmemset(chunk_data_dbl,0,sizeof(double)*50000*3);
+    HDmemset(chunk_data_flt,0,sizeof(float)*50000*3);
+
+    fileID = H5Fopen(DATAFILE,H5F_ACC_RDONLY,H5P_DEFAULT);
+    CHECK(fileID, FAIL, "H5Fopen");
+    dsetID = H5Dopen(fileID,"coords");
+    CHECK(dsetID, FAIL, "H5Dopen");
+
+    status= H5Dread (dsetID,H5T_NATIVE_DOUBLE,H5S_ALL,H5S_ALL,H5P_DEFAULT,chunk_data_dbl);
+    CHECK(status, FAIL, "H5Dread");
+    status= H5Dread (dsetID,H5T_NATIVE_FLOAT,H5S_ALL,H5S_ALL,H5P_DEFAULT,chunk_data_flt);
+    CHECK(status, FAIL, "H5Dread");
+
+    status=H5Dclose(dsetID);
+    CHECK(status, FAIL, "H5Dclose");
+    status=H5Fclose(fileID);
+    CHECK(status, FAIL, "H5Fclose");
+
+    for(i=0; i<50000; i++) {
+        for(j=0; j<3; j++) {
+            if(chunk_data_dbl[i][j]!=chunk_data_flt[i][j])
+                TestErrPrintf("chunk_data_dbl[%d][%d]=%f, chunk_data_flt[%d][%d]=%f\n",i,j,chunk_data_dbl[i][j],i,j,chunk_data_flt[i][j]);
+        } /* end for */
+    } /* end for */
+} /* test_h5s_chunk() */
+
+/****************************************************************
+**
+**  test_h5s_null_space(): Attempt to access dataset and attribute
+**      with null dataspace.  This should fail, since the 1.6.x
+**      branch doesn't understand null dataspaces.
+**
+****************************************************************/
+static void
+test_h5s_null_space(void)
+{
+    hid_t fid;                  /* File ID */
+    hid_t gid;                  /* Group ID */
+    hid_t aid;                  /* Attribute ID */
+    hid_t did;                  /* Dataset ID */
+    char testfile[512]="";          /* Character buffer for corrected test file name */
+    char *srcdir = HDgetenv("srcdir");    /* Pointer to the directory the source code is located within */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Attempting to Read NULL Dataspaces\n"));
+
+    /* Generate the correct name for the test file, by prepending the source path */
+    if (srcdir && ((HDstrlen(srcdir) + HDstrlen(NULLFILE) + 1) < sizeof(testfile))) {
+        HDstrcpy(testfile, srcdir);
+        HDstrcat(testfile, "/");
+    }
+    HDstrcat(testfile, NULLFILE);
+
+    /* Open the testfile */
+    fid = H5Fopen(testfile, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK_I(fid, "H5Fopen");
+
+    /* Only try to proceed if the file is around */
+    if (fid >= 0) {
+        /* Open the root group */
+        gid = H5Gopen(fid,"/");
+        CHECK_I(gid, "H5Gopen");
+
+        /* Attempt to open attribute w/NULL dataspace */
+        H5E_BEGIN_TRY {
+            aid=H5Aopen_name(gid,NULLATTR);
+        } H5E_END_TRY;
+        VERIFY(aid, FAIL, "H5Aopen_name");
+
+        /* Attempt to open dataset w/NULL dataspace */
+        H5E_BEGIN_TRY {
+            did=H5Dopen(fid,NULLDATASET);
+        } H5E_END_TRY;
+        VERIFY(did, FAIL, "H5Dopen");
+
+        /* Close open objects */
+        ret=H5Gclose(gid);
+        CHECK(ret, FAIL, "H5Gclose");
+        ret=H5Fclose(fid);
+        CHECK(ret, FAIL, "H5Fclose");
+    } /* end if */
+    else
+        printf("***cannot open the pre-created NULL dataspace test file (%s)\n",testfile);
+} /* test_h5s_null_space() */
+
+/****************************************************************
+**
+**  test_h5s(): Main H5S (dataspace) testing routine.
+**
+****************************************************************/
+void
+test_h5s(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Dataspaces\n"));
+
+    test_h5s_basic();		/* Test basic H5S code */
+    test_h5s_scalar_write();	/* Test scalar H5S writing code */
+    test_h5s_scalar_read();		/* Test scalar H5S reading code */
+    test_h5s_compound_scalar_write();	/* Test compound datatype scalar H5S writing code */
+    test_h5s_compound_scalar_read();	/* Test compound datatype scalar H5S reading code */
+
+    /* This test was added later to exercise a bug in chunked I/O */
+    test_h5s_chunk();	        /* Exercise bug fix for chunked I/O */
+
+    /* This test is specific to the 1.6.x branch, to test backward compatibility w/null dataspaces */
+    test_h5s_null_space();
+} /* test_h5s() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_h5s
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Albert Cheng
+ *              July 2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_h5s(void)
+{
+    remove(DATAFILE);
+    remove(BASICFILE);
+}
+

Added: packages/hdf5/branches/upstream/current/test/th5s.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/th5s.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/theap.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/theap.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/theap.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1049 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+   Test HDF Heap routines.
+
+   REMARKS
+
+   DESIGN
+
+   BUGS/LIMITATIONS
+
+   EXPORTED ROUTINES
+
+   AUTHOR
+       Quincey Koziol
+
+   MODIFICATION HISTORY
+       2/18/03 - Started coding
+ */
+
+#include <time.h>
+#include <stdlib.h>
+
+#include "testhdf5.h"
+#include "H5HPprivate.h"
+
+/* The number of elements in testing arrays */
+#define NUM_ELEMS       1000
+
+/* Objects for testing in heaps */
+typedef struct test_obj {
+    H5HP_info_t heap_info;      /* Information required for heap.  _MUST_ be first */
+    int val;                    /* Actual information for object */
+} test_obj;
+
+/* Array of random element values */
+static test_obj rand_num[NUM_ELEMS];
+
+/* Array of random elements values, sorted in increasing order */
+static test_obj inc_sort_num[NUM_ELEMS];
+
+/* Array of random elements values, sorted in decreasing order */
+static test_obj dec_sort_num[NUM_ELEMS];
+
+static int tst_dec_sort(const void *_i1, const void *_i2)
+{
+    const test_obj *i1=(const test_obj *)_i1;
+    const test_obj *i2=(const test_obj *)_i2;
+
+    if(i1->val<i2->val)
+        return(1);
+    else if(i1->val>i2->val)
+        return(-1);
+    return(0);
+}
+
+static int tst_inc_sort(const void *_i1, const void *_i2)
+{
+    const test_obj *i1=(const test_obj *)_i1;
+    const test_obj *i2=(const test_obj *)_i2;
+
+    if(i1->val<i2->val)
+        return(-1);
+    else if(i1->val>i2->val)
+        return(1);
+    return(0);
+}
+
+/****************************************************************
+**
+**  test_heap_init(): Test H5HP (heap) code.
+**      Initialize data for Heap testing
+**
+****************************************************************/
+static void
+test_heap_init(void)
+{
+    time_t curr_time;   /* Current time, for seeding random number generator */
+    size_t u;           /* Local index variables */
+
+    /* Create randomized set of numbers */
+    curr_time=time(NULL);
+    HDsrandom((unsigned long)curr_time);
+    for(u=0; u<NUM_ELEMS; u++)
+        /* Generate random numbers from -1000 to 1000 */
+        rand_num[u].val=(int)(HDrandom()%2001)-1001;
+
+    /* Sort random numbers into increasing order */
+    HDmemcpy(inc_sort_num,rand_num,sizeof(test_obj)*NUM_ELEMS);
+    HDqsort(inc_sort_num,NUM_ELEMS,sizeof(test_obj),tst_inc_sort);
+
+    /* Sort random numbers into decreasing order */
+    HDmemcpy(dec_sort_num,rand_num,sizeof(test_obj)*NUM_ELEMS);
+    HDqsort(dec_sort_num,NUM_ELEMS,sizeof(test_obj),tst_dec_sort);
+} /* end test_tst_init() */
+
+/****************************************************************
+**
+**  test_heap_create(): Test basic H5HP (heap) code.
+**      Tests creating and closing heaps.
+**
+****************************************************************/
+static void
+test_heap_create(void)
+{
+    H5HP_t *heap;       /* Heap created */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(6, ("Testing Creating & Closing Heaps\n"));
+
+    /* Try creating a maximum Heap */
+    heap=H5HP_create(H5HP_MAX_HEAP);
+    CHECK(heap, NULL, "H5HP_create");
+
+    /* Try closing the heap */
+    ret=H5HP_close(heap);
+    CHECK(ret, FAIL, "H5HP_close");
+
+    /* Try creating a minimum Heap */
+    heap=H5HP_create(H5HP_MIN_HEAP);
+    CHECK(heap, NULL, "H5HP_create");
+
+    /* Try closing the heap */
+    ret=H5HP_close(heap);
+    CHECK(ret, FAIL, "H5HP_close");
+
+} /* end test_heap_create() */
+
+/****************************************************************
+**
+**  test_heap_insert_min(): Test H5HP (heap) code.
+**      Tests basic inserting objects into minimum heaps.
+**
+****************************************************************/
+static void
+test_heap_insert_min(void)
+{
+    H5HP_t *heap;       /* Heap created */
+    ssize_t num;        /* Number of elements in heap */
+    int val;            /* Value of object on heap */
+    test_obj obj1, obj2, obj3;  /* Test objects to insert */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Inserting Into Minimum Heaps\n"));
+
+    /* Create a Heap */
+    heap=H5HP_create(H5HP_MIN_HEAP);
+    CHECK(heap, NULL, "H5HP_create");
+
+    /* Check that the heap has no elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 0, "H5HP_count");
+
+    /* Insert an object into the heap */
+    obj1.val=100;
+    ret=H5HP_insert(heap,10,&obj1);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Check that the heap has one element */
+    num=H5HP_count(heap);
+    VERIFY(num, 1, "H5HP_count");
+
+    /* Check the minimum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 10, "H5HP_top");
+
+    /* Insert another object into the heap, with value less than top element */
+    obj2.val=50;
+    ret=H5HP_insert(heap,5,&obj2);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Check that the heap has two elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 2, "H5HP_count");
+
+    /* Check the minimum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 5, "H5HP_top");
+
+    /* Insert third object into the heap, with value greater than top element */
+    obj3.val=200;
+    ret=H5HP_insert(heap,20,&obj3);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Check that the heap has three elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 3, "H5HP_count");
+
+    /* Check the minimum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 5, "H5HP_top");
+
+    /* Close the heap */
+    ret=H5HP_close(heap);
+    CHECK(ret, FAIL, "H5HP_close");
+
+} /* end test_heap_insert_min() */
+
+/****************************************************************
+**
+**  test_heap_insert(): Test H5HP (heap) code.
+**      Tests basic inserting objects into maximum heaps.
+**
+****************************************************************/
+static void
+test_heap_insert_max(void)
+{
+    H5HP_t *heap;       /* Heap created */
+    ssize_t num;        /* Number of elements in heap */
+    int val;            /* Value of object on heap */
+    test_obj obj1, obj2, obj3;  /* Test objects to insert */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Inserting Into Maximum Heaps\n"));
+
+    /* Create a Heap */
+    heap=H5HP_create(H5HP_MAX_HEAP);
+    CHECK(heap, NULL, "H5HP_create");
+
+    /* Check that the heap has no elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 0, "H5HP_count");
+
+    /* Insert an object into the heap */
+    obj1.val=100;
+    ret=H5HP_insert(heap,10,&obj1);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Check that the heap has one element */
+    num=H5HP_count(heap);
+    VERIFY(num, 1, "H5HP_count");
+
+    /* Check the maximum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 10, "H5HP_top");
+
+    /* Insert another object into the heap, with value less than top element */
+    obj2.val=50;
+    ret=H5HP_insert(heap,5,&obj2);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Check that the heap has two elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 2, "H5HP_count");
+
+    /* Check the maximum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 10, "H5HP_top");
+
+    /* Insert third object into the heap, with value greater than top element */
+    obj3.val=200;
+    ret=H5HP_insert(heap,20,&obj3);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Check that the heap has three elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 3, "H5HP_count");
+
+    /* Check the maximum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 20, "H5HP_top");
+
+    /* Close the heap */
+    ret=H5HP_close(heap);
+    CHECK(ret, FAIL, "H5HP_close");
+
+} /* end test_heap_insert_max() */
+
+/****************************************************************
+**
+**  test_heap_insert(): Test H5HP (heap) code.
+**      Tests basic inserting objects into heaps.
+**
+****************************************************************/
+static void
+test_heap_insert(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(6, ("Testing Inserting Into Heaps\n"));
+
+    /* Test insertions into minimum & maximum heaps */
+    test_heap_insert_max();
+    test_heap_insert_min();
+} /* end test_heap_insert() */
+
+/****************************************************************
+**
+**  test_heap_insert_many_core (): Tests H5HP (heap) code.
+**      "Core" routine called by test_heap_insert_many() routine.
+**
+****************************************************************/
+static void test_heap_insert_many_core(H5HP_type_t heap_type, test_obj *arr, size_t nelem, int top_val)
+{
+    H5HP_t *heap;       /* Heap created */
+    ssize_t num;        /* Number of elements in heap */
+    int val;            /* Value of object on heap */
+    size_t u;           /* Local index variable */
+    herr_t ret;         /* Generic return value */
+
+    /* Create a Heap */
+    heap=H5HP_create(heap_type);
+    CHECK(heap, NULL, "H5HP_create");
+
+    /* Check that the heap has no elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 0, "H5HP_count");
+
+    /* Insert the array elements into the heap */
+    for(u=0; u<nelem; u++) {
+        ret=H5HP_insert(heap,arr[u].val,&arr[u]);
+        CHECK(ret, FAIL, "H5HP_insert");
+    } /* end for */
+
+    /* Check that the heap has correct number of elements */
+    num=H5HP_count(heap);
+    CHECK(num, FAIL, "H5HP_count");
+    VERIFY((size_t)num, nelem, "H5HP_count");
+
+    /* Check the maximum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, top_val, "H5HP_top");
+
+    /* Close the heap */
+    ret=H5HP_close(heap);
+    CHECK(ret, FAIL, "H5HP_close");
+} /* end test_heap_insert_many_core() */
+
+/****************************************************************
+**
+**  test_heap_insert_many (): Test H5HP (heap) code.
+**      Tests inserting many objects into heaps.
+**
+****************************************************************/
+static void
+test_heap_insert_many(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(6, ("Testing Inserting Many Objects Into Heaps\n"));
+
+    /* Test creating a heap from random elements */
+    test_heap_insert_many_core(H5HP_MAX_HEAP, rand_num,NUM_ELEMS,dec_sort_num[0].val);
+
+    /* Test creating a heap from elements in increasing order */
+    test_heap_insert_many_core(H5HP_MAX_HEAP, inc_sort_num,NUM_ELEMS,dec_sort_num[0].val);
+
+    /* Test creating a heap from elements in decreasing order */
+    test_heap_insert_many_core(H5HP_MAX_HEAP, dec_sort_num,NUM_ELEMS,dec_sort_num[0].val);
+
+    /* Test creating a heap from random elements */
+    test_heap_insert_many_core(H5HP_MIN_HEAP, rand_num,NUM_ELEMS,inc_sort_num[0].val);
+
+    /* Test creating a heap from elements in increasing order */
+    test_heap_insert_many_core(H5HP_MIN_HEAP, inc_sort_num,NUM_ELEMS,inc_sort_num[0].val);
+
+    /* Test creating a heap from elements in decreasing order */
+    test_heap_insert_many_core(H5HP_MIN_HEAP, dec_sort_num,NUM_ELEMS,inc_sort_num[0].val);
+
+} /* end test_heap_insert_many() */
+
+/****************************************************************
+**
+**  test_heap_remove_min(): Test H5HP (heap) code.
+**      Tests basic removal of objects from minimum heaps.
+**
+****************************************************************/
+static void
+test_heap_remove_min(void)
+{
+    H5HP_t *heap;       /* Heap created */
+    ssize_t num;        /* Number of elements in heap */
+    int val;            /* Value of object on heap */
+    void *ptr;          /* Pointer for object on heap */
+    test_obj obj1, obj2, obj3;  /* Test objects to insert */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Removing From Minimum Heaps\n"));
+
+    /* Create a Heap */
+    heap=H5HP_create(H5HP_MIN_HEAP);
+    CHECK(heap, NULL, "H5HP_create");
+
+    /* Check that the heap has no elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 0, "H5HP_count");
+
+    /* Try removing an object from an empty heap */
+    ret=H5HP_remove(heap,&val,&ptr);
+    VERIFY(ret, FAIL, "H5HP_remove");
+
+    /* Insert an object into the heap */
+    obj1.val=100;
+    ret=H5HP_insert(heap,10,&obj1);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Insert another object into the heap, with value less than top element */
+    obj2.val=50;
+    ret=H5HP_insert(heap,5,&obj2);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Insert third object into the heap, with value greater than top element */
+    obj3.val=200;
+    ret=H5HP_insert(heap,20,&obj3);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Remove first maximum value from heap */
+    ret=H5HP_remove(heap,&val,&ptr);
+    CHECK(ret, FAIL, "H5HP_remove");
+    VERIFY(val, 5, "H5HP_remove");
+    VERIFY(ptr, &obj2, "H5HP_remove");
+
+    /* Remove second maximum value from heap */
+    ret=H5HP_remove(heap,&val,&ptr);
+    CHECK(ret, FAIL, "H5HP_remove");
+    VERIFY(val, 10, "H5HP_remove");
+    VERIFY(ptr, &obj1, "H5HP_remove");
+
+    /* Remove third maximum value from heap */
+    ret=H5HP_remove(heap,&val,&ptr);
+    CHECK(ret, FAIL, "H5HP_remove");
+    VERIFY(val, 20, "H5HP_remove");
+    VERIFY(ptr, &obj3, "H5HP_remove");
+
+    /* Try removing an object from an empty heap */
+    ret=H5HP_remove(heap,&val,&ptr);
+    VERIFY(ret, FAIL, "H5HP_remove");
+
+    /* Close the heap */
+    ret=H5HP_close(heap);
+    CHECK(ret, FAIL, "H5HP_close");
+
+} /* end test_heap_remove_min() */
+
+/****************************************************************
+**
+**  test_heap_remove_max(): Test H5HP (heap) code.
+**      Tests basic removal of objects from maximum heaps.
+**
+****************************************************************/
+static void
+test_heap_remove_max(void)
+{
+    H5HP_t *heap;       /* Heap created */
+    ssize_t num;        /* Number of elements in heap */
+    int val;            /* Value of object on heap */
+    void *ptr;          /* Pointer for object on heap */
+    test_obj obj1, obj2, obj3;  /* Test objects to insert */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Removing From Maximum Heaps\n"));
+
+    /* Create a Heap */
+    heap=H5HP_create(H5HP_MAX_HEAP);
+    CHECK(heap, NULL, "H5HP_create");
+
+    /* Check that the heap has no elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 0, "H5HP_count");
+
+    /* Try removing an object from an empty heap */
+    ret=H5HP_remove(heap,&val,&ptr);
+    VERIFY(ret, FAIL, "H5HP_remove");
+
+    /* Insert an object into the heap */
+    obj1.val=100;
+    ret=H5HP_insert(heap,10,&obj1);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Insert another object into the heap, with value less than top element */
+    obj2.val=50;
+    ret=H5HP_insert(heap,5,&obj2);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Insert third object into the heap, with value greater than top element */
+    obj3.val=200;
+    ret=H5HP_insert(heap,20,&obj3);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Remove first maximum value from heap */
+    ret=H5HP_remove(heap,&val,&ptr);
+    CHECK(ret, FAIL, "H5HP_remove");
+    VERIFY(val, 20, "H5HP_remove");
+    VERIFY(ptr, &obj3, "H5HP_remove");
+
+    /* Remove second maximum value from heap */
+    ret=H5HP_remove(heap,&val,&ptr);
+    CHECK(ret, FAIL, "H5HP_remove");
+    VERIFY(val, 10, "H5HP_remove");
+    VERIFY(ptr, &obj1, "H5HP_remove");
+
+    /* Remove third maximum value from heap */
+    ret=H5HP_remove(heap,&val,&ptr);
+    CHECK(ret, FAIL, "H5HP_remove");
+    VERIFY(val, 5, "H5HP_remove");
+    VERIFY(ptr, &obj2, "H5HP_remove");
+
+    /* Try removing an object from an empty heap */
+    ret=H5HP_remove(heap,&val,&ptr);
+    VERIFY(ret, FAIL, "H5HP_remove");
+
+    /* Close the heap */
+    ret=H5HP_close(heap);
+    CHECK(ret, FAIL, "H5HP_close");
+
+} /* end test_heap_remove_max() */
+
+/****************************************************************
+**
+**  test_heap_remove(): Test H5HP (heap) code.
+**      Tests basic removal of objects from minimum & maximum heaps.
+**
+****************************************************************/
+static void
+test_heap_remove(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(6, ("Testing Removing From Heaps\n"));
+
+    /* Test removals from minimum & maximum heaps */
+    test_heap_remove_max();
+    test_heap_remove_min();
+} /* end test_heap_remove() */
+
+/****************************************************************
+**
+**  test_heap_remove_many_core (): Tests H5HP (heap) code.
+**      "Core" routine called by test_heap_remove_many() routine.
+**
+****************************************************************/
+static void test_heap_remove_many_core(H5HP_type_t heap_type, test_obj *arr, size_t nelem)
+{
+    H5HP_t *heap;       /* Heap created */
+    ssize_t num;        /* Number of elements in heap */
+    int last_val;       /* Last value from the heap */
+    int val;            /* Value of object on heap */
+    test_obj *ptr;      /* Pointer for object on heap */
+    size_t u;           /* Local index variable */
+    herr_t ret;         /* Generic return value */
+
+    /* Create a Heap */
+    heap=H5HP_create(heap_type);
+    CHECK(heap, NULL, "H5HP_create");
+
+    /* Check that the heap has no elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 0, "H5HP_count");
+
+    /* Insert the array elements into the heap */
+    for(u=0; u<nelem; u++) {
+        ret=H5HP_insert(heap,arr[u].val,&arr[u]);
+        CHECK(ret, FAIL, "H5HP_insert");
+    } /* end for */
+
+    /* Check that the heap has correct number of elements */
+    num=H5HP_count(heap);
+    CHECK(num, FAIL, "H5HP_count");
+    VERIFY((size_t)num, nelem, "H5HP_count");
+
+    /* Set an appropriate starting value for the "last" value from heap */
+    if(heap_type==H5HP_MAX_HEAP)
+        last_val=INT_MAX;
+    else
+        last_val=INT_MIN;
+
+    /* Remove the objects from the heap */
+    for(u=0; u<nelem; u++) {
+        ret=H5HP_remove(heap,&val,(void **)&ptr);
+        CHECK(ret, FAIL, "H5HP_remove");
+        VERIFY(val, ptr->val, "H5HP_remove");
+
+        /* Check that the value is correct, based on the heap type */
+        if(heap_type==H5HP_MAX_HEAP) {
+            if(val>last_val)
+                TestErrPrintf("Error on line %d: incorrect value from heap=%d, last_val=%d\n",__LINE__,val,last_val);
+        } /* end if */
+        else {
+            if(val<last_val)
+                TestErrPrintf("Error on line %d: incorrect value from heap=%d, last_val=%d\n",__LINE__,val,last_val);
+        } /* end else */
+
+        /* Update last value */
+        last_val=val;
+    } /* end for */
+
+    /* Check that the heap has no elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 0, "H5HP_count");
+
+/* Insert & remove again, to check that completely empty heaps can be added again */
+
+    /* Set an appropriate starting value for the "last" value from heap */
+    if(heap_type==H5HP_MAX_HEAP)
+        last_val=INT_MAX;
+    else
+        last_val=INT_MIN;
+
+    /* Insert the array elements into the heap */
+    for(u=0; u<nelem; u++) {
+        ret=H5HP_insert(heap,arr[u].val,&arr[u]);
+        CHECK(ret, FAIL, "H5HP_insert");
+    } /* end for */
+
+    /* Check that the heap has correct number of elements */
+    num=H5HP_count(heap);
+    CHECK(num, FAIL, "H5HP_count");
+    VERIFY((size_t)num, nelem, "H5HP_count");
+
+    /* Remove the objects from the heap */
+    for(u=0; u<nelem; u++) {
+        ret=H5HP_remove(heap,&val,(void **)&ptr);
+        CHECK(ret, FAIL, "H5HP_remove");
+        VERIFY(val, ptr->val, "H5HP_remove");
+
+        /* Check that the value is correct, based on the heap type */
+        if(heap_type==H5HP_MAX_HEAP) {
+            if(val>last_val)
+                TestErrPrintf("Error on line %d: incorrect value from heap=%d, last_val=%d\n",__LINE__,val,last_val);
+        } /* end if */
+        else {
+            if(val<last_val)
+                TestErrPrintf("Error on line %d: incorrect value from heap=%d, last_val=%d\n",__LINE__,val,last_val);
+        } /* end else */
+
+        /* Update last value */
+        last_val=val;
+    } /* end for */
+
+    /* Check that the heap has no elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 0, "H5HP_count");
+
+    /* Close the heap */
+    ret=H5HP_close(heap);
+    CHECK(ret, FAIL, "H5HP_close");
+} /* end test_heap_remove_many_core() */
+
+/****************************************************************
+**
+**  test_heap_remove_many (): Test H5HP (heap) code.
+**      Tests removing many objects into heaps.
+**
+****************************************************************/
+static void
+test_heap_remove_many(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(6, ("Testing Removing Many Objects From Heaps\n"));
+
+    /* Test removing objects from maximum heap with random elements */
+    test_heap_remove_many_core(H5HP_MAX_HEAP, rand_num,NUM_ELEMS);
+
+    /* Test removing objects from maximum heap with elements already sorted in increasing order */
+    test_heap_remove_many_core(H5HP_MAX_HEAP, inc_sort_num,NUM_ELEMS);
+
+    /* Test removing objects from maximum heap with elements already sorted in decreasing order */
+    test_heap_remove_many_core(H5HP_MAX_HEAP, dec_sort_num,NUM_ELEMS);
+
+    /* Test removing objects from minimum heap with random elements */
+    test_heap_remove_many_core(H5HP_MIN_HEAP, rand_num,NUM_ELEMS);
+
+    /* Test removing objects from minimum heap with elements already sorted in increasing order */
+    test_heap_remove_many_core(H5HP_MIN_HEAP, inc_sort_num,NUM_ELEMS);
+
+    /* Test removing objects from minimum heap with elements already sorted in decreasing order */
+    test_heap_remove_many_core(H5HP_MIN_HEAP, dec_sort_num,NUM_ELEMS);
+
+} /* end test_heap_remove_many() */
+
+/****************************************************************
+**
+**  test_heap_change_min (): Test H5HP (heap) code.
+**      Tests changing the priority of an object in a minimum heap
+**
+****************************************************************/
+static void
+test_heap_change_min(void)
+{
+    H5HP_t *heap;       /* Heap created */
+    ssize_t num;        /* Number of elements in heap */
+    int val;            /* Value of object on heap */
+    test_obj obj1, obj2, obj3;  /* Test objects to insert */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Changing Priority of Objects in Minimum Heaps\n"));
+
+    /* Create a Heap */
+    heap=H5HP_create(H5HP_MIN_HEAP);
+    CHECK(heap, NULL, "H5HP_create");
+
+    /* Check that the heap has no elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 0, "H5HP_count");
+
+    /* Insert an object into the heap */
+    obj1.val=100;
+    ret=H5HP_insert(heap,10,&obj1);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Insert another object into the heap, with value less than top element */
+    obj2.val=50;
+    ret=H5HP_insert(heap,5,&obj2);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Insert third object into the heap, with value greater than top element */
+    obj3.val=200;
+    ret=H5HP_insert(heap,20,&obj3);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Change priority of first object on heap in way which shouldn't affect heap order */
+    ret=H5HP_change(heap,11,&obj1);
+    CHECK(ret, FAIL, "H5HP_change");
+
+    /* Check the minimum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 5, "H5HP_top");
+
+    /* Change priority of first object on heap to be the top object on the heap */
+    ret=H5HP_change(heap,3,&obj1);
+    CHECK(ret, FAIL, "H5HP_change");
+
+    /* Check the maximum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 3, "H5HP_top");
+
+    /* Change priority of first object on heap to not be the top object on the heap */
+    ret=H5HP_change(heap,10,&obj1);
+    CHECK(ret, FAIL, "H5HP_change");
+
+    /* Check the maximum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 5, "H5HP_top");
+
+    /* Close the heap */
+    ret=H5HP_close(heap);
+    CHECK(ret, FAIL, "H5HP_close");
+
+} /* end test_heap_change_min() */
+
+/****************************************************************
+**
+**  test_heap_change_max (): Test H5HP (heap) code.
+**      Tests changing the priority of an object in a maximumheap
+**
+****************************************************************/
+static void
+test_heap_change_max(void)
+{
+    H5HP_t *heap;       /* Heap created */
+    ssize_t num;        /* Number of elements in heap */
+    int val;            /* Value of object on heap */
+    test_obj obj1, obj2, obj3;  /* Test objects to insert */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Changing Priority of Objects in Maximum Heaps\n"));
+
+    /* Create a Heap */
+    heap=H5HP_create(H5HP_MAX_HEAP);
+    CHECK(heap, NULL, "H5HP_create");
+
+    /* Check that the heap has no elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 0, "H5HP_count");
+
+    /* Insert an object into the heap */
+    obj1.val=100;
+    ret=H5HP_insert(heap,10,&obj1);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Insert another object into the heap, with value less than top element */
+    obj2.val=50;
+    ret=H5HP_insert(heap,5,&obj2);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Insert third object into the heap, with value greater than top element */
+    obj3.val=200;
+    ret=H5HP_insert(heap,20,&obj3);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Change priority of first object on heap in way which shouldn't affect heap order */
+    ret=H5HP_change(heap,11,&obj1);
+    CHECK(ret, FAIL, "H5HP_change");
+
+    /* Check the maximum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 20, "H5HP_top");
+
+    /* Change priority of first object on heap to be the top object on the heap */
+    ret=H5HP_change(heap,21,&obj1);
+    CHECK(ret, FAIL, "H5HP_change");
+
+    /* Check the maximum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 21, "H5HP_top");
+
+    /* Change priority of first object on heap to not be the top object on the heap */
+    ret=H5HP_change(heap,10,&obj1);
+    CHECK(ret, FAIL, "H5HP_change");
+
+    /* Check the maximum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 20, "H5HP_top");
+
+    /* Close the heap */
+    ret=H5HP_close(heap);
+    CHECK(ret, FAIL, "H5HP_close");
+
+} /* end test_heap_change() */
+
+/****************************************************************
+**
+**  test_heap_change (): Test H5HP (heap) code.
+**      Tests changing the priority of an object in maximum & minimum heaps
+**
+****************************************************************/
+static void
+test_heap_change(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(6, ("Testing Changing Priority of Objects in Heaps\n"));
+
+    /* Test removals from minimum & maximum heaps */
+    test_heap_change_max();
+    test_heap_change_min();
+} /* end test_heap_change() */
+
+/****************************************************************
+**
+**  test_heap_incdec_min (): Test H5HP (heap) code.
+**      Tests incrementing & decrementing priority of objects on
+**      a minimum heap.
+**
+****************************************************************/
+static void
+test_heap_incdec_min(void)
+{
+    H5HP_t *heap;       /* Heap created */
+    ssize_t num;        /* Number of elements in heap */
+    int val;            /* Value of object on heap */
+    test_obj obj1, obj2, obj3;  /* Test objects to insert */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Incrementing & Decrementing Priority of Objects in Minimum Heaps\n"));
+
+    /* Create a Heap */
+    heap=H5HP_create(H5HP_MIN_HEAP);
+    CHECK(heap, NULL, "H5HP_create");
+
+    /* Check that the heap has no elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 0, "H5HP_count");
+
+    /* Insert an object into the heap */
+    obj1.val=100;
+    ret=H5HP_insert(heap,6,&obj1);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Insert another object into the heap, with value less than top element */
+    obj2.val=50;
+    ret=H5HP_insert(heap,5,&obj2);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Insert third object into the heap, with value greater than top element */
+    obj3.val=200;
+    ret=H5HP_insert(heap,20,&obj3);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Decrement object one's priority by two to put it on top of the heap */
+    ret=H5HP_decr(heap, 2, &obj1);
+    CHECK(ret, FAIL, "H5HP_change");
+
+    /* Check the minimum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 4, "H5HP_top");
+
+    /* Decrement object two's priority by two to put it back on top of the heap */
+    ret=H5HP_decr(heap, 2, &obj2);
+    CHECK(ret, FAIL, "H5HP_change");
+
+    /* Check the minimum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 3, "H5HP_top");
+
+    /* Increment object two's priority by two to return object one to the top */
+    ret=H5HP_incr(heap,2,&obj2);
+    CHECK(ret, FAIL, "H5HP_change");
+
+    /* Check the minimum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 4, "H5HP_top");
+
+    /* Close the heap */
+    ret=H5HP_close(heap);
+    CHECK(ret, FAIL, "H5HP_close");
+
+} /* end test_heap_incdec_min() */
+
+/****************************************************************
+**
+**  test_heap_incdec_max (): Test H5HP (heap) code.
+**      Tests incrementing & decrementing priority of objects on
+**      a maximum heap.
+**
+****************************************************************/
+static void
+test_heap_incdec_max(void)
+{
+    H5HP_t *heap;       /* Heap created */
+    ssize_t num;        /* Number of elements in heap */
+    int val;            /* Value of object on heap */
+    test_obj obj1, obj2, obj3;  /* Test objects to insert */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Incrementing & Decrementing Priority of Objects in Maximum Heaps\n"));
+
+    /* Create a Heap */
+    heap=H5HP_create(H5HP_MAX_HEAP);
+    CHECK(heap, NULL, "H5HP_create");
+
+    /* Check that the heap has no elements */
+    num=H5HP_count(heap);
+    VERIFY(num, 0, "H5HP_count");
+
+    /* Insert an object into the heap */
+    obj1.val=100;
+    ret=H5HP_insert(heap,19,&obj1);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Insert another object into the heap, with value less than top element */
+    obj2.val=50;
+    ret=H5HP_insert(heap,5,&obj2);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Insert third object into the heap, with value greater than top element */
+    obj3.val=200;
+    ret=H5HP_insert(heap,20,&obj3);
+    CHECK(ret, FAIL, "H5HP_insert");
+
+    /* Increment object one's priority by two to put it on top of the heap */
+    ret=H5HP_incr(heap, 2, &obj1);
+    CHECK(ret, FAIL, "H5HP_change");
+
+    /* Check the maximum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 21, "H5HP_top");
+
+    /* Increment object three's priority by two to put it back on top of the heap */
+    ret=H5HP_incr(heap, 2, &obj3);
+    CHECK(ret, FAIL, "H5HP_change");
+
+    /* Check the maximum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 22, "H5HP_top");
+
+    /* Decrement object three's priority by two to return object one to the top */
+    ret=H5HP_decr(heap,2,&obj3);
+    CHECK(ret, FAIL, "H5HP_change");
+
+    /* Check the maximum value on the heap */
+    ret=H5HP_top(heap, &val);
+    CHECK(ret, FAIL, "H5HP_top");
+    VERIFY(val, 21, "H5HP_top");
+
+    /* Close the heap */
+    ret=H5HP_close(heap);
+    CHECK(ret, FAIL, "H5HP_close");
+
+} /* end test_heap_incdec_max() */
+
+/****************************************************************
+**
+**  test_heap_incdec (): Test H5HP (heap) code.
+**      Tests incrementing & decrementing priority of objects on
+**      maximum & minimum heaps.
+**
+****************************************************************/
+static void
+test_heap_incdec(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(6, ("Testing Incrementing & Decrementing Priority of Objects in Heaps\n"));
+
+    /* Test increments & decrements in minimum & maximum heaps */
+    test_heap_incdec_max();
+    test_heap_incdec_min();
+} /* end test_heap_incdec() */
+
+/****************************************************************
+**
+**  test_heap(): Main H5HP testing routine.
+**
+****************************************************************/
+void
+test_heap(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Heaps\n"));
+
+    /* Initialize Heap testing data */
+    test_heap_init();
+
+    /* Actual Heap tests */
+    test_heap_create();          /* Test Heap creation */
+    test_heap_insert();          /* Test basic Heap insertion */
+    test_heap_insert_many();     /* Test Heap insertion of many items */
+    test_heap_remove();          /* Test basic Heap removal */
+    test_heap_remove_many();     /* Test Heap removal of many items */
+    test_heap_change();          /* Test changing priority of objects on Heap */
+    test_heap_incdec();          /* Test incrementing & decrementing priority of objects on Heap */
+
+}   /* end test_heap() */
+

Added: packages/hdf5/branches/upstream/current/test/titerate.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/titerate.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/titerate.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,957 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/***********************************************************
+*
+* Test program:	 titerate
+*
+* Test the Group & Attribute functionality
+*
+*************************************************************/
+
+#include "testhdf5.h"
+
+#include "hdf5.h"
+
+#define DATAFILE   "titerate.h5"
+
+/* Number of datasets for group iteration test */
+#define NDATASETS 50
+
+/* Number of attributes for attribute iteration test */
+#define NATTR 50
+
+/* Number of groups for second group iteration test */
+#define ITER_NGROUPS 150
+
+/* General maximum length of names used */
+#define NAMELEN     80
+
+/* 1-D dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	1
+#define SPACE1_DIM1	4
+
+typedef enum {
+    RET_ZERO,
+    RET_TWO,
+    RET_CHANGE
+} iter_enum;
+
+/* Custom group iteration callback data */
+typedef struct {
+    char name[NAMELEN];     /* The name of the object */
+    int type;               /* The type of the object */
+    iter_enum command;      /* The type of return value */
+} iter_info;
+
+/* Local functions */
+int iter_strcmp(const void *s1, const void *s2);
+int iter_strcmp2(const void *s1, const void *s2);
+herr_t giter_cb(hid_t group, const char *name, void *op_data);
+herr_t giter_cb2(hid_t group, const char *name, void *op_data);
+herr_t aiter_cb(hid_t loc_id, const char *name, void *op_data);
+
+/****************************************************************
+**
+**  iter_strcmp(): String comparison routine for qsort
+**
+****************************************************************/
+int iter_strcmp(const void *s1, const void *s2)
+{
+    return(strcmp(*(const char * const *)s1,*(const char * const *)s2));
+}
+
+/****************************************************************
+**
+**  giter_cb(): Custom group iteration callback routine.
+**
+****************************************************************/
+herr_t giter_cb(hid_t UNUSED group, const char *name, void *op_data)
+{
+    iter_info *info=(iter_info *)op_data;
+    static int count=0;
+
+    strcpy(info->name,name);
+
+    switch(info->command) {
+        case RET_ZERO:
+            return(0);
+
+        case RET_TWO:
+            return(2);
+
+        case RET_CHANGE:
+            count++;
+            return(count>10 ? 1: 0);
+
+        default:
+            printf("invalid iteration command");
+            return(-1);
+    } /* end switch */
+}
+
+/****************************************************************
+**
+**  test_iter_group(): Test group iteration functionality
+**
+****************************************************************/
+static void test_iter_group(void)
+{
+    hid_t file;             /* File ID */
+    hid_t dataset;          /* Dataset ID */
+    hid_t datatype;         /* Common datatype ID */
+    hid_t filespace;        /* Common dataspace ID */
+    hid_t root_group,grp;   /* Root group ID */
+    int i;                  /* counting variable */
+    int idx;                /* Index in the group */
+    char name[NAMELEN];     /* temporary name buffer */
+    char *dnames[NDATASETS];/* Names of the datasets created */
+    char dataset_name[NAMELEN];  /* dataset name */
+    iter_info info;         /* Custom iteration information */
+    hsize_t num_membs;      /* Number of group members */
+    herr_t ret;		    /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Group Iteration Functionality\n"));
+
+    /* Create the test file with the datasets */
+    file = H5Fcreate(DATAFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* Test iterating over empty group */
+    info.command=RET_ZERO;
+    idx=0;
+    ret=H5Giterate(file,"/",&idx,giter_cb,&info);
+    VERIFY(ret, SUCCEED, "H5Giterate");
+
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    CHECK(datatype, FAIL, "H5Tcopy");
+
+    filespace=H5Screate(H5S_SCALAR);
+    CHECK(filespace, FAIL, "H5Screate");
+
+    for(i=0; i< NDATASETS; i++) {
+        sprintf(name,"Dataset %d",i);
+        dataset = H5Dcreate(file, name, datatype, filespace, H5P_DEFAULT);
+        CHECK(dataset, FAIL, "H5Dcreate");
+
+        /* Keep a copy of the dataset names around for later */
+        dnames[i]=HDstrdup(name);
+        CHECK(dnames[i], NULL, "strdup");
+
+        ret=H5Dclose(dataset);
+        CHECK(ret, FAIL, "H5Dclose");
+    }
+
+    /* Create a group and named datatype under root group for testing
+     * H5Gget_objtype_by_idx.
+     */
+    grp = H5Gcreate(file, "grp", 0);
+    CHECK(ret, FAIL, "H5Gcreate");
+
+    ret = H5Tcommit(file, "dtype", datatype);
+    CHECK(ret, FAIL, "H5Tcommit");
+
+    /* Close everything up */
+    ret=H5Tclose(datatype);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    ret=H5Gclose(grp);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret=H5Sclose(filespace);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret=H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Sort the dataset names */
+    HDqsort(dnames,NDATASETS,sizeof(char *),iter_strcmp);
+
+
+    /* Iterate through the datasets in the root group in various ways */
+    file=H5Fopen(DATAFILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fopen");
+
+    /* These two functions, H5Gget_num_objs and H5Gget_objname_by_idx, actually
+     * iterate through B-tree for group members in internal library design.
+     */
+    {
+        root_group = H5Gopen(file, "/");
+        CHECK(root_group, FAIL, "H5Gopen");
+
+        ret = H5Gget_num_objs(root_group, &num_membs);
+        CHECK(ret, FAIL, "H5Gget_num_objs");
+        VERIFY(num_membs,NDATASETS+2,"H5Gget_num_objs");
+
+        for(i=0; i< (int)num_membs; i++) {
+#ifdef H5_WANT_H5_V1_4_COMPAT
+            int obj_type;         /* Type of object in file */
+#else /*H5_WANT_H5_V1_4_COMPAT*/
+            H5G_obj_t obj_type;         /* Type of object in file */
+#endif /*H5_WANT_H5_V1_4_COMPAT*/
+
+            ret = (herr_t)H5Gget_objname_by_idx(root_group, (hsize_t)i, dataset_name, NAMELEN);
+            CHECK(ret, FAIL, "H5Gget_objname_by_idx");
+
+            obj_type = H5Gget_objtype_by_idx(root_group, (hsize_t)i);
+            CHECK(obj_type, H5G_UNKNOWN, "H5Gget_objtype_by_idx");
+        }
+
+        H5E_BEGIN_TRY {
+            ret = (herr_t)H5Gget_objname_by_idx(root_group, (hsize_t)(NDATASETS+3), dataset_name, NAMELEN);
+        } H5E_END_TRY;
+        VERIFY(ret, FAIL, "H5Gget_objname_by_idx");
+
+        ret = H5Gclose(root_group);
+        CHECK(ret, FAIL, "H5Gclose");
+    }
+
+    /* These two functions, H5Gget_num_objs and H5Gget_objname_by_idx, actually
+     * iterate through B-tree for group members in internal library design.
+     *  (Same as test above, but with the file ID instead of opening the root group)
+     */
+    {
+        ret = H5Gget_num_objs(file, &num_membs);
+        CHECK(ret, FAIL, "H5Gget_num_objs");
+        VERIFY(num_membs,NDATASETS+2,"H5Gget_num_objs");
+
+        for(i=0; i< (int)num_membs; i++) {
+#ifdef H5_WANT_H5_V1_4_COMPAT
+            int obj_type;         /* Type of object in file */
+#else /*H5_WANT_H5_V1_4_COMPAT*/
+            H5G_obj_t obj_type;         /* Type of object in file */
+#endif /*H5_WANT_H5_V1_4_COMPAT*/
+
+            ret = (herr_t)H5Gget_objname_by_idx(file, (hsize_t)i, dataset_name, NAMELEN);
+            CHECK(ret, FAIL, "H5Gget_objname_by_idx");
+
+            obj_type = H5Gget_objtype_by_idx(file, (hsize_t)i);
+            CHECK(obj_type, H5G_UNKNOWN, "H5Gget_objtype_by_idx");
+        }
+
+        H5E_BEGIN_TRY {
+            ret = (herr_t)H5Gget_objname_by_idx(file, (hsize_t)(NDATASETS+3), dataset_name, NAMELEN);
+        } H5E_END_TRY;
+        VERIFY(ret, FAIL, "H5Gget_objname_by_idx");
+    }
+
+    /* Test invalid indices for starting iteration */
+    info.command=RET_ZERO;
+    idx=-1;
+    H5E_BEGIN_TRY {
+        ret=H5Giterate(file,"/",&idx,giter_cb,&info);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Giterate");
+
+    /* Test skipping exactly as many entries as in the group */
+    idx=NDATASETS+2;
+    H5E_BEGIN_TRY {
+        ret=H5Giterate(file,"/",&idx,giter_cb,&info);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Giterate");
+
+    /* Test skipping more entries than are in the group */
+    idx=NDATASETS+3;
+    H5E_BEGIN_TRY {
+        ret=H5Giterate(file,"/",&idx,giter_cb,&info);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Giterate");
+
+    /* Test all objects in group, when callback always returns 0 */
+    info.command=RET_ZERO;
+    idx=0;
+    if((ret=H5Giterate(file,"/",&idx,giter_cb,&info))>0)
+        TestErrPrintf("Group iteration function didn't return zero correctly!\n");
+
+    /* Test all objects in group, when callback always returns 1 */
+    /* This also tests the "restarting" ability, because the index changes */
+    info.command=RET_TWO;
+    idx=i=0;
+    while((ret=H5Giterate(file,"/",&idx,giter_cb,&info))>0) {
+        /* Verify return value from iterator gets propagated correctly */
+        VERIFY(ret,2,"H5Giterate");
+
+        /* Increment the number of times "1" is returned */
+        i++;
+
+        /* Verify that the index is the correct value */
+        VERIFY(idx,i,"H5Giterate");
+
+        /* Verify that the correct name is retrieved */
+        if(idx<=NDATASETS) {
+            if(HDstrcmp(info.name,dnames[idx-1])!=0)
+                TestErrPrintf("Group iteration function didn't return one correctly for dataset #%d!\n",idx);
+        } /* end if */
+        else if(idx==(NDATASETS+1)) {
+            if(HDstrcmp(info.name,"dtype")!=0)
+                TestErrPrintf("Group iteration function didn't return one correctly for group!\n");
+        } /* end if */
+        else if(idx==(NDATASETS+2)) {
+            if(HDstrcmp(info.name,"grp")!=0)
+                TestErrPrintf("Group iteration function didn't return one correctly for group!\n");
+        } /* end if */
+        else
+            TestErrPrintf("Group iteration function walked too far!\n");
+    }
+    VERIFY(ret,-1,"H5Giterate");
+
+    if(i!=(NDATASETS+2))
+        TestErrPrintf("Group iteration function didn't perform multiple iterations correctly!\n");
+
+    /* Test all objects in group, when callback changes return value */
+    /* This also tests the "restarting" ability, because the index changes */
+    info.command=RET_CHANGE;
+    idx=i=0;
+    while((ret=H5Giterate(file,"/",&idx,giter_cb,&info))>=0) {
+        /* Verify return value from iterator gets propagated correctly */
+        VERIFY(ret,1,"H5Giterate");
+
+        /* Increment the number of times "1" is returned */
+        i++;
+
+        /* Verify that the index is the correct value */
+        VERIFY(idx,i+10,"H5Giterate");
+
+        /* Verify that the correct name is retrieved */
+        if(idx<=NDATASETS) {
+            if(HDstrcmp(info.name,dnames[idx-1])!=0)
+                TestErrPrintf("Group iteration function didn't return one correctly for dataset #%d!\n",idx);
+        } /* end if */
+        else if(idx==(NDATASETS+1)) {
+            if(HDstrcmp(info.name,"dtype")!=0)
+                TestErrPrintf("Group iteration function didn't return one correctly for group!\n");
+        } /* end if */
+        else if(idx==(NDATASETS+2)) {
+            if(HDstrcmp(info.name,"grp")!=0)
+                TestErrPrintf("Group iteration function didn't return one correctly for group!\n");
+        } /* end if */
+        else
+            TestErrPrintf("Group iteration function walked too far!\n");
+    }
+    VERIFY(ret,-1,"H5Giterate");
+
+    if(i!=42 || idx!=52)
+        TestErrPrintf("Group iteration function didn't perform multiple iterations correctly!\n");
+
+    ret=H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free the dataset names */
+    for(i=0; i< NDATASETS; i++)
+        HDfree(dnames[i]);
+
+} /* test_iter_group() */
+
+/****************************************************************
+**
+**  aiter_cb(): Custom group iteration callback routine.
+**
+****************************************************************/
+herr_t aiter_cb(hid_t UNUSED group, const char *name, void *op_data)
+{
+    iter_info *info=(iter_info *)op_data;
+    static int count=0;
+
+    strcpy(info->name,name);
+
+    switch(info->command) {
+        case RET_ZERO:
+            return(0);
+
+        case RET_TWO:
+            return(2);
+
+        case RET_CHANGE:
+            count++;
+            return(count>10 ? 1: 0);
+
+        default:
+            printf("invalid iteration command");
+            return(-1);
+    } /* end switch */
+}
+
+/****************************************************************
+**
+**  test_iter_attr(): Test attribute iteration functionality
+**
+****************************************************************/
+static void test_iter_attr(void)
+{
+    hid_t file;             /* File ID */
+    hid_t dataset;          /* Common Dataset ID */
+    hid_t datatype;         /* Common datatype ID */
+    hid_t filespace;        /* Common dataspace ID */
+    hid_t attribute;        /* Attribute ID */
+    int i;                  /* counting variable */
+    unsigned idx;           /* Index in the attribute list */
+    char name[NAMELEN];     /* temporary name buffer */
+    char *anames[NATTR];    /* Names of the attributes created */
+    iter_info info;         /* Custom iteration information */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Attribute Iteration Functionality\n"));
+
+    /* Create the test file with the datasets */
+    file = H5Fcreate(DATAFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    CHECK(datatype, FAIL, "H5Tcopy");
+
+    filespace=H5Screate(H5S_SCALAR);
+    CHECK(filespace, FAIL, "H5Screate");
+
+    dataset = H5Dcreate(file, "Dataset", datatype, filespace, H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    for(i=0; i< NATTR; i++) {
+        sprintf(name,"Attribute %d",i);
+        attribute = H5Acreate(dataset, name, datatype, filespace, H5P_DEFAULT);
+        CHECK(attribute, FAIL, "H5Acreate");
+
+        /* Keep a copy of the attribute names around for later */
+        anames[i]=HDstrdup(name);
+        CHECK(anames[i], NULL, "strdup");
+
+        ret=H5Aclose(attribute);
+        CHECK(ret, FAIL, "H5Aclose");
+    }
+
+    /* Close everything up */
+    ret=H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    ret=H5Tclose(datatype);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    ret=H5Sclose(filespace);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret=H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Iterate through the attributes on the dataset in various ways */
+    file=H5Fopen(DATAFILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fopen");
+
+    dataset=H5Dopen(file, "Dataset");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Test invalid indices for starting iteration */
+    info.command=RET_ZERO;
+
+    /* Test skipping exactly as many attributes as there are */
+    idx=NATTR;
+    H5E_BEGIN_TRY {
+        ret=H5Aiterate(dataset,&idx,aiter_cb,&info);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Aiterate");
+
+    /* Test skipping more attributes than there are */
+    idx=NATTR+1;
+    H5E_BEGIN_TRY {
+        ret=H5Aiterate(dataset,&idx,aiter_cb,&info);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Aiterate");
+
+    /* Test all attributes on dataset, when callback always returns 0 */
+    info.command=RET_ZERO;
+    idx=0;
+    if((ret=H5Aiterate(dataset,&idx,aiter_cb,&info))>0)
+        TestErrPrintf("Attribute iteration function didn't return zero correctly!\n");
+
+    /* Test all attributes on dataset, when callback always returns 1 */
+    /* This also tests the "restarting" ability, because the index changes */
+    info.command=RET_TWO;
+    idx=i=0;
+    while((ret=H5Aiterate(dataset,&idx,aiter_cb,&info))>0) {
+        /* Verify return value from iterator gets propagated correctly */
+        VERIFY(ret,2,"H5Aiterate");
+
+        /* Increment the number of times "1" is returned */
+        i++;
+
+        /* Verify that the index is the correct value */
+        VERIFY(idx,(unsigned)i,"H5Aiterate");
+
+        /* Verify that the correct name is retrieved */
+        if(HDstrcmp(info.name,anames[idx-1])!=0)
+            TestErrPrintf("Attribute iteration function didn't return one correctly!\n");
+    }
+    VERIFY(ret,-1,"H5Aiterate");
+    if(i!=50 || idx!=50)
+        TestErrPrintf("Group iteration function didn't perform multiple iterations correctly!\n");
+
+
+    /* Test all attributes on dataset, when callback changes return value */
+    /* This also tests the "restarting" ability, because the index changes */
+    info.command=RET_CHANGE;
+    idx=i=0;
+    while((ret=H5Aiterate(dataset,&idx,aiter_cb,&info))>0) {
+        /* Verify return value from iterator gets propagated correctly */
+        VERIFY(ret,1,"H5Aiterate");
+
+        /* Increment the number of times "1" is returned */
+        i++;
+
+        /* Verify that the index is the correct value */
+        VERIFY(idx,(unsigned)i+10,"H5Aiterate");
+
+        /* Verify that the correct name is retrieved */
+        if(HDstrcmp(info.name,anames[idx-1])!=0)
+            TestErrPrintf("Attribute iteration function didn't return changing correctly!\n");
+    }
+    VERIFY(ret,-1,"H5Aiterate");
+    if(i!=40 || idx!=50)
+        TestErrPrintf("Group iteration function didn't perform multiple iterations correctly!\n");
+
+    ret=H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    ret=H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Free the attribute names */
+    for(i=0; i< NATTR; i++)
+        HDfree(anames[i]);
+
+} /* test_iter_attr() */
+
+/****************************************************************
+**
+**  iter_strcmp2(): String comparison routine for qsort
+**
+****************************************************************/
+int iter_strcmp2(const void *s1, const void *s2)
+{
+    return(strcmp((const char *)s1,(const char *)s2));
+}
+
+/****************************************************************
+**
+**  giter_cb2(): Custom group iteration callback routine.
+**
+****************************************************************/
+herr_t giter_cb2(hid_t loc_id, const char *name, void *opdata)
+{
+    const iter_info *test_info=(const iter_info *)opdata;
+    herr_t		ret;		/* Generic return value		*/
+    H5G_stat_t statbuf;
+
+    if(HDstrcmp(name,test_info->name)) {
+        TestErrPrintf("name=%s, test_info=%s\n",name,test_info->name);
+        return(-1);
+    } /* end if */
+
+    /*
+     * Get type of the object and check it.
+     */
+    ret=H5Gget_objinfo(loc_id, name, FALSE, &statbuf);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+
+    if(test_info->type!=statbuf.type) {
+        TestErrPrintf("test_info->type=%d, statbuf.type=%d\n",test_info->type,statbuf.type);
+        return(-1);
+    } /* end if */
+
+    return(1);
+} /* giter_cb2() */
+
+/****************************************************************
+**
+**  test_iter_group_large(): Test group iteration functionality
+**          for groups with large #'s of objects
+**
+****************************************************************/
+static void test_iter_group_large(void)
+{
+    hid_t		file;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		group;      /* Group ID             */
+    hid_t		sid;       /* Dataspace ID			*/
+    hid_t		tid;       /* Datatype ID			*/
+    hsize_t		dims[] = {SPACE1_DIM1};
+    herr_t		ret;		/* Generic return value		*/
+    char gname[20];         /* Temporary group name */
+    iter_info names[ITER_NGROUPS+2]; /* Names of objects in the root group */
+    iter_info *curr_name;        /* Pointer to the current name in the root group */
+    int                 i;
+
+    /* Compound datatype */
+    typedef struct s1_t {
+        unsigned int a;
+        unsigned int b;
+        float c;
+    } s1_t;
+
+    memset(names, 0, sizeof names);
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Large Group Iteration Functionality\n"));
+
+    /* Create file */
+    file = H5Fcreate(DATAFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid = H5Screate_simple(SPACE1_RANK, dims, NULL);
+    CHECK(sid, FAIL, "H5Screate_simple");
+
+    /* Create a bunch of groups */
+    for (i=0; i<ITER_NGROUPS; i++) {
+        sprintf(gname, "Group_%d", i);
+
+        /* Add the name to the list of objects in the root group */
+        strcpy(names[i].name,gname);
+        names[i].type=H5G_GROUP;
+
+        /* Create a group */
+        group=H5Gcreate(file,gname,0);
+        CHECK(group, FAIL, "H5Gcreate");
+
+        /* Close a group */
+        ret = H5Gclose(group);
+        CHECK(ret, FAIL, "H5Gclose");
+    }
+
+    /* Create a dataset  */
+    dataset=H5Dcreate(file,"Dataset1",H5T_STD_U32LE,sid,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Add the name to the list of objects in the root group */
+    strcpy(names[ITER_NGROUPS].name,"Dataset1");
+    names[ITER_NGROUPS].type=H5G_DATASET;
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close Dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create a datatype */
+    tid = H5Tcreate (H5T_COMPOUND, sizeof(s1_t));
+    CHECK(tid, FAIL, "H5Tcreate");
+
+    /* Insert fields */
+    ret=H5Tinsert (tid, "a", HOFFSET(s1_t,a), H5T_NATIVE_INT);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    ret=H5Tinsert (tid, "b", HOFFSET(s1_t,b), H5T_NATIVE_INT);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    ret=H5Tinsert (tid, "c", HOFFSET(s1_t,c), H5T_NATIVE_FLOAT);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    /* Save datatype for later */
+    ret=H5Tcommit (file, "Datatype1", tid);
+    CHECK(ret, FAIL, "H5Tcommit");
+
+    /* Add the name to the list of objects in the root group */
+    strcpy(names[ITER_NGROUPS+1].name,"Datatype1");
+    names[ITER_NGROUPS+1].type=H5G_TYPE;
+
+    /* Close datatype */
+    ret = H5Tclose(tid);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Need to sort the names in the root group, cause that's what the library does */
+    qsort(names,ITER_NGROUPS+2,sizeof(iter_info),iter_strcmp2);
+
+    /* Iterate through the file to see members of the root group */
+    curr_name=&names[0];
+    H5Giterate(file, "/", NULL, giter_cb2, curr_name);
+    for (i=1; i<100; ) {
+        curr_name=&names[i];
+        H5Giterate(file, "/", &i, giter_cb2, curr_name);
+    } /* end for */
+
+    /* Close file */
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* test_iterate_group_large() */
+
+/****************************************************************
+**
+**  test_grp_memb_funcs(): Test group member information
+**                         functionality
+**
+****************************************************************/
+static void test_grp_memb_funcs(void)
+{
+    hid_t file;             /* File ID */
+    hid_t dataset;          /* Dataset ID */
+    hid_t datatype;         /* Common datatype ID */
+    hid_t filespace;        /* Common dataspace ID */
+    hid_t root_group,grp;   /* Root group ID */
+    int i;                  /* counting variable */
+    char name[NAMELEN];     /* temporary name buffer */
+    char *dnames[NDATASETS+2];/* Names of the datasets created */
+    char *obj_names[NDATASETS+2];/* Names of the objects in group */
+    char dataset_name[NAMELEN];  /* dataset name */
+    ssize_t name_len;       /* Length of object's name */
+    hsize_t num_membs;      /* Number of group members */
+    herr_t ret;		    /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Group Member Information Functionality\n"));
+
+    /* Create the test file with the datasets */
+    file = H5Fcreate(DATAFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    CHECK(datatype, FAIL, "H5Tcopy");
+
+    filespace=H5Screate(H5S_SCALAR);
+    CHECK(filespace, FAIL, "H5Screate");
+
+    for(i=0; i< NDATASETS; i++) {
+        sprintf(name,"Dataset %d",i);
+        dataset = H5Dcreate(file, name, datatype, filespace, H5P_DEFAULT);
+        CHECK(dataset, FAIL, "H5Dcreate");
+
+        /* Keep a copy of the dataset names around for later */
+        dnames[i]=HDstrdup(name);
+        CHECK(dnames[i], NULL, "strdup");
+
+        ret=H5Dclose(dataset);
+        CHECK(ret, FAIL, "H5Dclose");
+    }
+
+    /* Create a group and named datatype under root group for testing
+     * H5Gget_objtype_by_idx.
+     */
+    grp = H5Gcreate(file, "grp", 0);
+    CHECK(ret, FAIL, "H5Gcreate");
+
+    dnames[NDATASETS]=HDstrdup("grp");
+    CHECK(dnames[NDATASETS], NULL, "strdup");
+
+    ret = H5Tcommit(file, "dtype", datatype);
+    CHECK(ret, FAIL, "H5Tcommit");
+
+    dnames[NDATASETS+1]=HDstrdup("dtype");
+    CHECK(dnames[NDATASETS], NULL, "strdup");
+
+    /* Close everything up */
+    ret=H5Tclose(datatype);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    ret=H5Gclose(grp);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret=H5Sclose(filespace);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret=H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Sort the dataset names */
+    HDqsort(dnames,NDATASETS+2,sizeof(char *),iter_strcmp);
+
+    /* Iterate through the datasets in the root group in various ways */
+    file=H5Fopen(DATAFILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fopen");
+
+    /* These two functions, H5Gget_num_objs and H5Gget_objname_by_idx, actually
+     * iterate through B-tree for group members in internal library design.
+     */
+    root_group = H5Gopen(file, "/");
+    CHECK(root_group, FAIL, "H5Gopen");
+
+    ret = H5Gget_num_objs(root_group, &num_membs);
+    CHECK(ret, FAIL, "H5Gget_num_objs");
+    VERIFY(num_membs,NDATASETS+2,"H5Gget_num_objs");
+
+    for(i=0; i< (int)num_membs; i++) {
+#ifdef H5_WANT_H5_V1_4_COMPAT
+        int obj_type;         /* Type of object in file */
+#else /*H5_WANT_H5_V1_4_COMPAT*/
+        H5G_obj_t obj_type;         /* Type of object in file */
+#endif /*H5_WANT_H5_V1_4_COMPAT*/
+
+        /* Test with NULL for name, to query length */
+        name_len = H5Gget_objname_by_idx(root_group, (hsize_t)i, NULL, NAMELEN);
+        CHECK(name_len, FAIL, "H5Gget_objname_by_idx");
+
+        ret = (herr_t)H5Gget_objname_by_idx(root_group, (hsize_t)i, dataset_name, (size_t)(name_len+1));
+        CHECK(ret, FAIL, "H5Gget_objname_by_idx");
+
+        /* Double-check that the length is the same */
+        VERIFY(ret, name_len, "H5Gget_objname_by_idx");
+
+        /* Keep a copy of the dataset names around for later */
+        obj_names[i]=HDstrdup(dataset_name);
+        CHECK(obj_names[i], NULL, "strdup");
+
+        obj_type = H5Gget_objtype_by_idx(root_group, (hsize_t)i);
+        CHECK(obj_type, H5G_UNKNOWN, "H5Gget_objtype_by_idx");
+
+        if(!HDstrcmp(dataset_name, "grp"))
+            VERIFY(obj_type, H5G_GROUP, "H5Gget_objname_by_idx");
+        if(!HDstrcmp(dataset_name, "dtype"))
+            VERIFY(obj_type, H5G_TYPE, "H5Gget_objname_by_idx");
+        if(!HDstrncmp(dataset_name, "Dataset", 7))
+            VERIFY(obj_type, H5G_DATASET, "H5Gget_objname_by_idx");
+    }
+
+    H5E_BEGIN_TRY {
+        ret = (herr_t)H5Gget_objname_by_idx(root_group, (hsize_t)(NDATASETS+3), dataset_name, NAMELEN);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Gget_objname_by_idx");
+
+    /* Sort the dataset names */
+    qsort(obj_names,NDATASETS+2,sizeof(char *),iter_strcmp);
+
+    /* Compare object names */
+    for(i=0; i< (int)num_membs; i++) {
+        ret = HDstrcmp(dnames[i], obj_names[i]);
+        VERIFY(ret, 0, "HDstrcmp");
+    }
+
+    ret = H5Gclose(root_group);
+    CHECK(ret, FAIL, "H5Gclose");
+
+
+    ret=H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free the dataset names */
+    for(i=0; i< NDATASETS+2; i++) {
+        free(dnames[i]);
+        free(obj_names[i]);
+    }
+
+} /* test_grp_memb_funcs() */
+
+/****************************************************************
+**
+**  test_links(): Test soft and hard link iteration
+**
+****************************************************************/
+static void test_links(void)
+{
+    hid_t file;             /* File ID */
+    char obj_name[NAMELEN]; /* Names of the object in group */
+    ssize_t name_len;       /* Length of object's name */
+    herr_t ret;		    /* Generic return value */
+    hid_t    gid, gid1;
+    hsize_t i;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int       obj_type;     /* Type of object */
+#else /*H5_WANT_H5_V1_4_COMPAT*/
+    H5G_obj_t obj_type;     /* Type of object */
+#endif /*H5_WANT_H5_V1_4_COMPAT*/
+    hsize_t   nobjs;        /* Number of objects */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Soft and Hard Link Iteration Functionality\n"));
+
+    /* Create the test file with the datasets */
+    file = H5Fcreate(DATAFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* create groups */
+    gid = H5Gcreate (file, "/g1", 0);
+    CHECK(gid, FAIL, "H5Gcreate");
+
+    gid1 = H5Gcreate (file, "/g1/g1.1", 0);
+    CHECK(gid1, FAIL, "H5Gcreate");
+
+    /* create soft and hard links to the group "/g1". */
+    ret = H5Glink (gid, H5G_LINK_SOFT, "something", "softlink");
+    CHECK(ret, FAIL, "H5Glink");
+
+    ret = H5Glink (gid, H5G_LINK_HARD, "/g1", "hardlink");
+    CHECK(ret, FAIL, "H5Glink");
+
+    ret = H5Gget_num_objs(gid, &nobjs);
+    CHECK(ret, FAIL, "H5Gget_num_objs");
+    VERIFY(nobjs,3,"H5Gget_num_objs");
+
+    /* Test these two functions, H5Gget_num_objs and H5Gget_objname_by_idx */
+    for(i=0; i<nobjs; i++) {
+        /* Get object name */
+        name_len = H5Gget_objname_by_idx(gid, i, obj_name, NAMELEN);
+        CHECK(name_len, FAIL, "H5Gget_objname_by_idx");
+
+        obj_type = H5Gget_objtype_by_idx(gid, i);
+        CHECK(obj_type, H5G_UNKNOWN, "H5Gget_objtype_by_idx");
+
+        if(!HDstrcmp(obj_name, "g1.1"))
+            VERIFY(obj_type, H5G_GROUP, "H5Gget_objname_by_idx");
+        else if(!HDstrcmp(obj_name, "hardlink"))
+            VERIFY(obj_type, H5G_GROUP, "H5Gget_objname_by_idx");
+        else if(!HDstrcmp(obj_name, "softlink"))
+            VERIFY(obj_type, H5G_LINK, "H5Gget_objname_by_idx");
+        else
+            CHECK(0, 0, "unknown object name");
+    }
+
+    ret=H5Gclose(gid);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret=H5Gclose(gid1);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret=H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* test_links() */
+
+/****************************************************************
+**
+**  test_iterate(): Main iteration testing routine.
+**
+****************************************************************/
+void
+test_iterate(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Iteration Operations\n"));
+
+    /* These next tests use the same file */
+    test_iter_group();       /* Test group iteration */
+    test_iter_group_large(); /* Test group iteration for large # of objects */
+    test_iter_attr();        /* Test attribute iteration */
+    test_grp_memb_funcs();   /* Test group member information functions */
+    test_links();            /* Test soft and hard link iteration */
+}   /* test_iterate() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_iterate
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Quincey Koziol
+ *              April 5, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_iterate(void)
+{
+    remove(DATAFILE);
+}
+

Added: packages/hdf5/branches/upstream/current/test/tlayouto.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/tlayouto.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/tmeta.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/tmeta.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/tmeta.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,132 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/***********************************************************
+*
+* Test program:  tmeta
+*
+* Test the basic meta-data encode/decode macros calls.
+*
+*************************************************************/
+
+#include "testhdf5.h"
+
+#include "H5private.h"
+#include "H5Fprivate.h"
+
+#define TEST_INT16_VALUE    -7641
+#define TEST_UINT16_VALUE   45002
+#define TEST_INT32_VALUE    -981236
+#define TEST_UINT32_VALUE   3476589
+
+uint8_t                   compar_buffer[] =
+{
+    /* Little-endian encoded version of the 16-bit signed integer */
+    (uint8_t) ((TEST_INT16_VALUE) & 0xff), (uint8_t) ((TEST_INT16_VALUE >> 8) & 0xff),
+    /* Little-endian encoded version of the 16-bit unsigned integer */
+    (uint8_t) ((TEST_UINT16_VALUE) & 0xff), (uint8_t) ((TEST_UINT16_VALUE >> 8) & 0xff),
+    /* Little-endian encoded version of the 32-bit signed integer */
+    (uint8_t) ((TEST_INT32_VALUE) & 0xff), (uint8_t) ((TEST_INT32_VALUE >> 8) & 0xff),
+    (uint8_t) ((TEST_INT32_VALUE >> 16) & 0xff), (uint8_t) ((TEST_INT32_VALUE >> 24) & 0xff),
+    /* Little-endian encoded version of the 32-bit unsigned integer */
+    (uint8_t) ((TEST_UINT32_VALUE) & 0xff), (uint8_t) ((TEST_UINT32_VALUE >> 8) & 0xff),
+    (uint8_t) ((TEST_UINT32_VALUE >> 16) & 0xff), (uint8_t) ((TEST_UINT32_VALUE >> 24) & 0xff),
+};
+
+uint8_t                   encode_buffer[sizeof(compar_buffer)];
+
+/****************************************************************
+**
+**  test_metadata(): Main meta-data encode/decode testing routine.
+**
+****************************************************************/
+void
+test_metadata(void)
+{
+    int16_t     ei16 = TEST_INT16_VALUE;    /* variables to hold the values to encode */
+    uint16_t    eu16 = TEST_UINT16_VALUE;
+    int32_t     ei32 = TEST_INT32_VALUE;
+    uint32_t    eu32 = TEST_UINT32_VALUE;
+    int16_t     di16;       /* variables to hold the decoded values */
+    uint16_t    du16;
+    int32_t     di32;
+    uint32_t    du32;
+    uint8_t	*p;  /* pointer into the buffer being en/de-coded */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Metadata encode/decode code\n"));
+
+    /* Start by encoding the values above */
+    p = encode_buffer;
+    INT16ENCODE(p, ei16);       /* Encode the int16 value */
+    UINT16ENCODE(p, eu16);      /* Encode the uint16 value */
+    INT32ENCODE(p, ei32);       /* Encode the int32 value */
+    UINT32ENCODE(p, eu32);      /* Encode the uint32 value */
+
+    /* Check if we got what we asked for */
+    if (HDmemcmp(encode_buffer, compar_buffer, sizeof(compar_buffer)) != 0) {
+        unsigned                   u;      /* local counting variable */
+
+        for (u = 0; u < sizeof(compar_buffer); u++) {
+            if (compar_buffer[u] != encode_buffer[u])
+                TestErrPrintf("Error encoding meta-data at offset %u, wanted: %u, got: %u\n", (unsigned) u, (unsigned) compar_buffer[u], (unsigned) encode_buffer[u]);
+        }                       /* end for */
+    }                           /* end if */
+    /* Test decoding macros */
+    p = encode_buffer;
+    INT16DECODE(p, di16);       /* Decode the int16 value */
+    UINT16DECODE(p, du16);      /* Decode the uint16 value */
+    INT32DECODE(p, di32);       /* Decode the int32 value */
+    UINT32DECODE(p, du32);      /* Decode the uint32 value */
+
+    /* Check the values decoded */
+    if (di16 != TEST_INT16_VALUE)
+        TestErrPrintf("Error decoding int16 meta-data wanted: %d, got: %d "
+                   "at %s:%d\n", (int) TEST_INT16_VALUE, (int) di16,
+                   __FILE__, __LINE__);
+    if (du16 != TEST_UINT16_VALUE)
+        TestErrPrintf("Error decoding uint16 meta-data wanted: %u, got: %u "
+                   "at %s:%d\n", (unsigned) TEST_UINT16_VALUE, (unsigned) du16,
+                   __FILE__, __LINE__);
+    if (di32 != TEST_INT32_VALUE)
+        TestErrPrintf("Error decoding int32 meta-data wanted: %ld, got: %ld "
+                   "at %s:%d\n", (long) TEST_INT32_VALUE, (long) di32,
+                   __FILE__, __LINE__);
+    if (du32 != TEST_UINT32_VALUE)
+        TestErrPrintf("Error decoding uint32 meta-data wanted: %lu, got: %lu "
+                   "at %s:%d\n", (unsigned long) TEST_UINT32_VALUE, (unsigned long) du32,
+                   __FILE__, __LINE__);
+}                               /* test_metadata() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_metadata
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Albert Cheng
+ *              July 2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_metadata(void)
+{
+    /* no file to clean */
+}
+

Added: packages/hdf5/branches/upstream/current/test/tmisc.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/tmisc.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/tmisc.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3692 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/***********************************************************
+*
+* Test program:	 tmisc
+*
+* Test miscellaneous features not tested elsewhere.  Generally
+*       regression tests for bugs that are reported and don't
+*       have an existing test to add them to.
+*
+*************************************************************/
+
+#define H5D_PACKAGE		/*suppress error about including H5Dpkg	  */
+
+/* Define this macro to indicate that the testing APIs should be available */
+#define H5D_TESTING
+
+#include "hdf5.h"
+#include "testhdf5.h"
+#include "H5Dpkg.h"		/* Datasets 				*/
+
+/* Definitions for misc. test #1 */
+#define MISC1_FILE	"tmisc1.h5"
+#define MISC1_VAL       (13417386)      /* 0xccbbaa */
+#define MISC1_VAL2      (15654348)      /* 0xeeddcc */
+#define MISC1_DSET_NAME "/scalar_set"
+
+/* Definitions for misc. test #2 */
+#define MISC2_FILE_1        "tmisc2a.h5"
+#define MISC2_FILE_2        "tmisc2b.h5"
+#define MISC2_ATT_NAME_1 "scalar_att_1"
+#define MISC2_ATT_NAME_2 "scalar_att_2"
+
+typedef struct {
+      char *string;
+} misc2_struct;
+
+/* Definitions for misc. test #3 */
+#define MISC3_FILE              "tmisc3.h5"
+#define MISC3_RANK              2
+#define MISC3_DIM1              6
+#define MISC3_DIM2              6
+#define MISC3_CHUNK_DIM1        2
+#define MISC3_CHUNK_DIM2        2
+#define MISC3_FILL_VALUE        2
+#define MISC3_DSET_NAME         "/chunked"
+
+/* Definitions for misc. test #4 */
+#define MISC4_FILE_1            "tmisc4a.h5"
+#define MISC4_FILE_2            "tmisc4b.h5"
+#define MISC4_GROUP_1           "/Group1"
+#define MISC4_GROUP_2           "/Group2"
+
+/* Definitions for misc. test #5 */
+#define MISC5_FILE              "tmisc5.h5"
+#define MISC5_DSETNAME          "dset1"
+#define MISC5_DSETRANK          1
+#define MISC5_NELMTOPLVL        1
+#define MISC5_DBGNELM1          2
+#define MISC5_DBGNELM2          1
+#define MISC5_DBGNELM3          1
+#define MISC5_DBGELVAL1         999999999
+#define MISC5_DBGELVAL2         888888888
+#define MISC5_DBGELVAL3         777777777
+
+typedef struct
+{
+    int st1_el1;
+    hvl_t st1_el2;
+} misc5_struct1;
+
+typedef struct
+{
+    int st2_el1;
+    hvl_t st2_el2;
+} misc5_struct2;
+
+typedef struct
+{
+    int st3_el1;
+} misc5_struct3;
+
+typedef struct
+{
+    hid_t         st3h_base;
+    hid_t         st3h_id;
+} misc5_struct3_hndl;
+
+typedef struct
+{
+    hid_t         st2h_base;
+    hid_t         st2h_id;
+    misc5_struct3_hndl *st2h_st3hndl;
+} misc5_struct2_hndl;
+
+typedef struct
+{
+    hid_t         st1h_base;
+    hid_t         st1h_id;
+    misc5_struct2_hndl *st1h_st2hndl;
+} misc5_struct1_hndl;
+
+/* Definitions for misc. test #6 */
+#define MISC6_FILE              "tmisc6.h5"
+#define MISC6_DSETNAME1         "dset1"
+#define MISC6_DSETNAME2         "dset2"
+#define MISC6_NUMATTR           16
+
+/* Definitions for misc. test #7 */
+#define MISC7_FILE              "tmisc7.h5"
+#define MISC7_DSETNAME1         "Dataset1"
+#define MISC7_DSETNAME2         "Dataset2"
+#define MISC7_TYPENAME1         "Datatype1"
+#define MISC7_TYPENAME2         "Datatype2"
+
+/* Definitions for misc. test #8 */
+#define MISC8_FILE              "tmisc8.h5"
+#define MISC8_DSETNAME1         "Dataset1"
+#define MISC8_DSETNAME2         "Dataset2"
+#define MISC8_DSETNAME3         "Dataset3"
+#define MISC8_DSETNAME4         "Dataset4"
+#define MISC8_DSETNAME5         "Dataset5"
+#define MISC8_DSETNAME6         "Dataset6"
+#define MISC8_DSETNAME7         "Dataset7"
+#define MISC8_DSETNAME8         "Dataset8"
+#define MISC8_DSETNAME9         "Dataset9"
+#define MISC8_DSETNAME10        "Dataset10"
+#define MISC8_RANK              2
+#define MISC8_DIM0              50
+#define MISC8_DIM1              50
+#define MISC8_CHUNK_DIM0        10
+#define MISC8_CHUNK_DIM1        10
+
+/* Definitions for misc. test #9 */
+#define MISC9_FILE              "tmisc9.h5"
+
+/* Definitions for misc. test #10 */
+#define MISC10_FILE_OLD         "tmtimeo.h5"
+#define MISC10_FILE_NEW         "tmisc10.h5"
+#define MISC10_DSETNAME         "Dataset1"
+
+/* Definitions for misc. test #11 */
+#define MISC11_FILE             "tmisc11.h5"
+#define MISC11_USERBLOCK        1024
+#define MISC11_SIZEOF_OFF       4
+#define MISC11_SIZEOF_LEN       4
+#define MISC11_SYM_LK           8
+#define MISC11_SYM_IK           32
+#define MISC11_ISTORE_IK        64
+
+/* Definitions for misc. test #12 */
+#define MISC12_FILE             "tmisc12.h5"
+#define MISC12_DSET_NAME        "Dataset"
+#define MISC12_SPACE1_RANK	1
+#define MISC12_SPACE1_DIM1	4
+#define MISC12_CHUNK_SIZE       2
+#define MISC12_APPEND_SIZE      5
+
+/* Definitions for misc. test #13 */
+#define MISC13_FILE_1          "tmisc13a.h5"
+#define MISC13_FILE_2          "tmisc13b.h5"
+#define MISC13_DSET1_NAME      "Dataset1"
+#define MISC13_DSET2_NAME      "Dataset2"
+#define MISC13_DSET3_NAME      "Dataset3"
+#define MISC13_GROUP1_NAME     "Group1"
+#define MISC13_GROUP2_NAME     "Group2"
+#define MISC13_DTYPE_NAME      "Datatype"
+#define MISC13_RANK            2
+#define MISC13_DIM1            20
+#define MISC13_DIM2            30
+#define MISC13_CHUNK_DIM1      10
+#define MISC13_CHUNK_DIM2      15
+#define MISC13_USERBLOCK_SIZE  512
+#define MISC13_COPY_BUF_SIZE   4096
+
+unsigned m13_data[MISC13_DIM1][MISC13_DIM2];           /* Data to write to dataset */
+unsigned m13_rdata[MISC13_DIM1][MISC13_DIM2];          /* Data read from dataset */
+
+/* Definitions for misc. test #14 */
+#define MISC14_FILE             "tmisc14.h5"
+#define MISC14_DSET1_NAME       "Dataset1"
+#define MISC14_DSET2_NAME       "Dataset2"
+#define MISC14_DSET3_NAME       "Dataset3"
+#define MISC14_METADATA_SIZE    4096
+
+/* Definitions for misc. test #15 */
+#define MISC15_FILE             "tmisc15.h5"
+
+/* Definitions for misc. test #16 */
+#define MISC16_FILE             "tmisc16.h5"
+#define MISC16_SPACE_DIM        4
+#define MISC16_SPACE_RANK       1
+#define MISC16_STR_SIZE         8
+#define MISC16_DSET_NAME        "Dataset"
+
+/* Definitions for misc. test #17 */
+#define MISC17_FILE             "tmisc17.h5"
+#define MISC17_SPACE_RANK       2
+#define MISC17_SPACE_DIM1       4
+#define MISC17_SPACE_DIM2       8
+#define MISC17_DSET_NAME        "Dataset"
+
+/* Definitions for misc. test #18 */
+#define MISC18_FILE             "tmisc18.h5"
+#define MISC18_DSET1_NAME       "Dataset1"
+#define MISC18_DSET2_NAME       "Dataset2"
+
+/* Definitions for misc. test #19 */
+#define MISC19_FILE             "tmisc19.h5"
+#define MISC19_DSET_NAME        "Dataset"
+#define MISC19_ATTR_NAME        "Attribute"
+#define MISC19_GROUP_NAME       "Group"
+
+/* Definitions for misc. test #20 */
+#define MISC20_FILE             "tmisc20.h5"
+#define MISC20_FILE_OLD         "tlayouto.h5"
+#define MISC20_DSET_NAME        "Dataset"
+#define MISC20_DSET2_NAME       "Dataset2"
+#define MISC20_SPACE_RANK       2
+/* Make sure the product of the following 2 does not get too close to */
+/* 64 bits, risking an overflow. */
+#define MISC20_SPACE_DIM0       (8*1024*1024*(uint64_t)1024)
+#define MISC20_SPACE_DIM1       ((256*1024*(uint64_t)1024)+1)
+#define MISC20_SPACE2_DIM0      8
+#define MISC20_SPACE2_DIM1      4
+
+/* Definitions for misc. test #21 */
+#define MISC21_FILE             "tmisc21.h5"
+#define MISC21_DSET_NAME        "Dataset"
+#define MISC21_SPACE_RANK       2
+#define MISC21_SPACE_DIM0       7639
+#define MISC21_SPACE_DIM1       6308
+#define MISC21_CHUNK_DIM0       2048
+#define MISC21_CHUNK_DIM1       2048
+
+/* Definitions for misc. test #21 */
+#define MISC22_FILE             "tmisc22.h5"
+#define MISC22_DSET_NAME        "Dataset"
+#define MISC22_SPACE_RANK       2
+#define MISC22_CHUNK_DIM0       512
+#define MISC22_CHUNK_DIM1       512
+#define MISC22_SPACE_DIM0       639
+#define MISC22_SPACE_DIM1       1308
+
+/****************************************************************
+**
+**  test_misc1(): test unlinking a dataset from a group and immediately
+**                      re-using the dataset name
+**
+****************************************************************/
+static void
+test_misc1(void)
+{
+    int i;
+    int i_check;
+    hid_t file, dataspace, dataset;
+    herr_t ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Unlinking Dataset and Re-creating It\n"));
+
+    file = H5Fcreate(MISC1_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    dataspace = H5Screate(H5S_SCALAR);
+    CHECK(dataspace, FAIL, "H5Screate");
+
+    /* Write the dataset the first time. */
+    dataset = H5Dcreate(file, MISC1_DSET_NAME, H5T_NATIVE_INT, dataspace, H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    i = MISC1_VAL;
+    ret = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &i);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Remove the dataset. */
+    ret = H5Gunlink(file, MISC1_DSET_NAME);
+    CHECK(ret, FAIL, "H5Gunlink");
+
+    /* Write the dataset for the second time with a different value. */
+    dataset = H5Dcreate(file, MISC1_DSET_NAME, H5T_NATIVE_INT, dataspace, H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    i = MISC1_VAL2;
+    ret = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &i);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    ret = H5Sclose(dataspace);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Now, check the value written to the dataset, after it was re-created */
+    file = H5Fopen(MISC1_FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fopen");
+
+    dataspace = H5Screate(H5S_SCALAR);
+    CHECK(dataspace, FAIL, "H5Screate");
+
+    dataset = H5Dopen(file, MISC1_DSET_NAME);
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    ret = H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &i_check);
+    CHECK(ret, FAIL, "H5Dread");
+    VERIFY(i_check,MISC1_VAL2,"H5Dread");
+
+    ret = H5Sclose(dataspace);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_misc1() */
+
+static hid_t misc2_create_type(void)
+{
+    hid_t type, type_tmp;
+    herr_t ret;
+
+    type_tmp = H5Tcopy (H5T_C_S1);
+    CHECK(type_tmp, FAIL, "H5Tcopy");
+
+    ret = H5Tset_size (type_tmp, H5T_VARIABLE);
+    CHECK(ret, FAIL, "H5Tset_size");
+
+    type = H5Tcreate (H5T_COMPOUND, sizeof(misc2_struct));
+    CHECK(type, FAIL, "H5Tcreate");
+
+    ret = H5Tinsert (type, "string", offsetof(misc2_struct, string), type_tmp);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    ret = H5Tclose(type_tmp);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    return type;
+}
+
+static void test_misc2_write_attribute(void)
+{
+    hid_t file1, file2, root1, root2, dataspace, att1, att2;
+    hid_t type;
+    herr_t ret;
+    misc2_struct data, data_check;
+    char *string_att1 = HDstrdup("string attribute in file one");
+    char *string_att2 = HDstrdup("string attribute in file two");
+
+    type = misc2_create_type();
+
+    dataspace = H5Screate(H5S_SCALAR);
+    CHECK(dataspace, FAIL, "H5Screate");
+
+    file2 = H5Fcreate(MISC2_FILE_2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file2, FAIL, "H5Fcreate");
+
+    file1 = H5Fcreate(MISC2_FILE_1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file1, FAIL, "H5Fcreate");
+
+    root1 = H5Gopen(file1, "/");
+    CHECK(root1, FAIL, "H5Gopen");
+
+    att1 = H5Acreate(root1, MISC2_ATT_NAME_1, type, dataspace, H5P_DEFAULT);
+    CHECK(att1, FAIL, "H5Acreate");
+
+    data.string = string_att1;
+
+    ret = H5Awrite(att1, type, &data);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    ret = H5Aread(att1, type, &data_check);
+    CHECK(ret, FAIL, "H5Aread");
+
+    free(data_check.string);
+
+    ret = H5Aclose(att1);
+    CHECK(ret, FAIL, "HAclose");
+
+    ret = H5Gclose(root1);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Fclose(file1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+
+    root2 = H5Gopen(file2, "/");
+    CHECK(root2, FAIL, "H5Gopen");
+
+    att2 = H5Acreate(root2, MISC2_ATT_NAME_2, type, dataspace, H5P_DEFAULT);
+    CHECK(att2, FAIL, "H5Acreate");
+
+    data.string = string_att2;
+
+    ret = H5Awrite(att2, type, &data);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    ret = H5Aread(att2, type, &data_check);
+    CHECK(ret, FAIL, "H5Aread");
+
+    free(data_check.string);
+
+    ret = H5Aclose(att2);
+    CHECK(ret, FAIL, "HAclose");
+
+    ret = H5Gclose(root2);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Tclose(type);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    ret = H5Sclose(dataspace);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret = H5Fclose(file2);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    free(string_att1);
+    free(string_att2);
+    return;
+}
+
+
+static void test_misc2_read_attribute(const char *filename, const char *att_name)
+{
+    hid_t file, root, att;
+    hid_t type;
+    herr_t ret;
+    misc2_struct data_check;
+
+    type = misc2_create_type();
+
+    file = H5Fopen(filename, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fopen");
+
+    root = H5Gopen(file, "/");
+    CHECK(root, FAIL, "H5Gopen");
+
+    att = H5Aopen_name(root, att_name);
+    CHECK(att, FAIL, "H5Aopen_name");
+
+    ret = H5Aread(att, type, &data_check);
+    CHECK(ret, FAIL, "H5Aread");
+
+    free(data_check.string);
+
+    ret = H5Aclose(att);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    ret = H5Tclose(type);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    ret = H5Gclose(root);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    return;
+}
+/****************************************************************
+**
+**  test_misc2(): test using the same VL-derived datatype in two
+**      different files, which was causing problems with the
+**      datatype conversion functions
+**
+****************************************************************/
+static void
+test_misc2(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing VL datatype in two different files\n"));
+
+    test_misc2_write_attribute();
+    test_misc2_read_attribute(MISC2_FILE_1, MISC2_ATT_NAME_1);
+    test_misc2_read_attribute(MISC2_FILE_2, MISC2_ATT_NAME_2);
+} /* end test_misc2() */
+
+/****************************************************************
+**
+**  test_misc3(): Test reading from chunked dataset with non-zero
+**      fill value
+**
+****************************************************************/
+static void
+test_misc3(void)
+{
+    hid_t file, dataspace, dataset, dcpl;
+    int rank=MISC3_RANK;
+    hsize_t dims[MISC3_RANK]={MISC3_DIM1,MISC3_DIM2};
+    hsize_t chunk_dims[MISC3_RANK]={MISC3_CHUNK_DIM1,MISC3_CHUNK_DIM2};
+    int fill=MISC3_FILL_VALUE;
+    int read_buf[MISC3_DIM1][MISC3_DIM2];
+    int i,j;
+    herr_t ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing reading from chunked dataset with non-zero fill-value\n"));
+
+    file = H5Fcreate(MISC3_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* Create a simple dataspace */
+    dataspace = H5Screate_simple(rank,dims,NULL);
+    CHECK(dataspace, FAIL, "H5Screate_simple");
+
+    /* Create a dataset creation property list */
+    dcpl = H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(dcpl, FAIL, "H5Pcreate");
+
+    /* Set the chunk information */
+    ret = H5Pset_chunk(dcpl,rank,chunk_dims);
+    CHECK(dcpl, FAIL, "H5Pset_chunk");
+
+    /* Set the fill-value information */
+    ret = H5Pset_fill_value(dcpl,H5T_NATIVE_INT,&fill);
+    CHECK(dcpl, FAIL, "H5Pset_fill_value");
+
+    /* Create the dataset */
+    dataset = H5Dcreate(file, MISC3_DSET_NAME, H5T_NATIVE_INT, dataspace, dcpl);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Read from the dataset (should be fill-values) */
+    ret = H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &read_buf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    for(i=0; i<MISC3_DIM1; i++)
+        for(j=0; j<MISC3_DIM2; j++)
+            VERIFY(read_buf[i][j],fill,"H5Dread");
+
+    /* Release resources */
+    ret = H5Pclose(dcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    ret = H5Sclose(dataspace);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* end test_misc3() */
+
+/****************************************************************
+**
+**  test_misc4(): Test the that 'fileno' field in H5G_stat_t is
+**      valid.
+**
+****************************************************************/
+static void
+test_misc4(void)
+{
+    hid_t file1, file2, group1, group2, group3;
+    H5G_stat_t stat1, stat2, stat3;
+    herr_t ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing fileno working in H5G_stat_t\n"));
+
+    file1 = H5Fcreate(MISC4_FILE_1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file1, FAIL, "H5Fcreate");
+
+    /* Create the first group */
+    group1 = H5Gcreate(file1, MISC4_GROUP_1, 0);
+    CHECK(group1, FAIL, "H5Gcreate");
+
+    /* Create the second group */
+    group2 = H5Gcreate(file1, MISC4_GROUP_2, 0);
+    CHECK(group2, FAIL, "H5Gcreate");
+
+    file2 = H5Fcreate(MISC4_FILE_2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file2, FAIL, "H5Fcreate");
+
+    /* Create the first group */
+    group3 = H5Gcreate(file2, MISC4_GROUP_1, 0);
+    CHECK(group3, FAIL, "H5Gcreate");
+
+    /* Get the stat information for each group */
+    ret = H5Gget_objinfo(file1,MISC4_GROUP_1,0,&stat1);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+    ret = H5Gget_objinfo(file1,MISC4_GROUP_2,0,&stat2);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+    ret = H5Gget_objinfo(file2,MISC4_GROUP_1,0,&stat3);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+
+    /* Verify that the fileno values are the same for groups from file1 */
+    VERIFY(stat1.fileno[0],stat2.fileno[0],"H5Gget_objinfo");
+    VERIFY(stat1.fileno[1],stat2.fileno[1],"H5Gget_objinfo");
+
+    /* Verify that the fileno values are not the same between file1 & file2 */
+    if(stat1.fileno[0]==stat3.fileno[0] && stat1.fileno[1]==stat3.fileno[1])
+        TestErrPrintf("Error on line %d: stat1.fileno==stat3.fileno\n",__LINE__);
+    if(stat2.fileno[0]==stat3.fileno[0] && stat2.fileno[1]==stat3.fileno[1])
+        TestErrPrintf("Error on line %d: stat1.fileno==stat3.fileno\n",__LINE__);
+
+    /* Close the objects */
+    ret = H5Gclose(group1);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Gclose(group2);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Gclose(group3);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Fclose(file1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    ret = H5Fclose(file2);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* end test_misc4() */
+
+/****************************************************************
+**
+**  test_misc5(): Test several level deep nested compound & VL datatypes
+**
+****************************************************************/
+
+/*********************** struct3 ***********************/
+
+static misc5_struct3_hndl *
+create_struct3(void)
+{
+    misc5_struct3_hndl *str3hndl;       /* New 'struct3' created */
+    herr_t ret;                         /* For error checking */
+
+    str3hndl=malloc(sizeof(misc5_struct3_hndl));
+    CHECK(str3hndl,NULL,"malloc");
+
+    str3hndl->st3h_base=H5Tcreate( H5T_COMPOUND, sizeof(misc5_struct3));
+    CHECK(str3hndl->st3h_base,FAIL,"H5Tcreate");
+
+    ret=H5Tinsert(str3hndl->st3h_base, "st3_el1", HOFFSET( misc5_struct3, st3_el1), H5T_NATIVE_INT);
+    CHECK(ret,FAIL,"H5Tinsert");
+
+    str3hndl->st3h_id=H5Tvlen_create(str3hndl->st3h_base);
+    CHECK(str3hndl->st3h_id,FAIL,"H5Tvlen_create");
+
+    return(str3hndl);
+}
+
+static void
+delete_struct3(misc5_struct3_hndl *str3hndl)
+{
+    herr_t ret;                         /* For error checking */
+
+    ret=H5Tclose(str3hndl->st3h_id);
+    CHECK(ret,FAIL,"H5Tclose");
+
+    ret=H5Tclose(str3hndl->st3h_base);
+    CHECK(ret,FAIL,"H5Tclose");
+
+    free(str3hndl);
+}
+
+static void
+set_struct3(misc5_struct3 *buf)
+{
+    buf->st3_el1=MISC5_DBGELVAL3;
+}
+
+/*********************** struct2 ***********************/
+
+static misc5_struct2_hndl *
+create_struct2(void)
+{
+    misc5_struct2_hndl *str2hndl;       /* New 'struct2' created */
+    herr_t ret;                         /* For error checking */
+
+    str2hndl=malloc(sizeof(misc5_struct2_hndl));
+    CHECK(str2hndl,NULL,"malloc");
+
+    str2hndl->st2h_base=H5Tcreate( H5T_COMPOUND, sizeof(misc5_struct2));
+    CHECK(str2hndl->st2h_base,FAIL,"H5Tcreate");
+
+    ret=H5Tinsert(str2hndl->st2h_base, "st2_el1", HOFFSET( misc5_struct2, st2_el1), H5T_NATIVE_INT);
+    CHECK(ret,FAIL,"H5Tinsert");
+
+    str2hndl->st2h_st3hndl=create_struct3();
+    CHECK(str2hndl->st2h_st3hndl,NULL,"create_struct3");
+
+    ret=H5Tinsert(str2hndl->st2h_base, "st2_el2", HOFFSET(misc5_struct2, st2_el2), str2hndl->st2h_st3hndl->st3h_id);
+    CHECK(ret,FAIL,"H5Tinsert");
+
+    str2hndl->st2h_id= H5Tvlen_create(str2hndl->st2h_base);
+    CHECK(str2hndl->st2h_id,FAIL,"H5Tvlen_create");
+
+    return(str2hndl);
+}
+
+static void
+delete_struct2(misc5_struct2_hndl *str2hndl)
+{
+    herr_t ret;                         /* For error checking */
+
+    ret=H5Tclose(str2hndl->st2h_id);
+    CHECK(ret,FAIL,"H5Tclose");
+
+    delete_struct3(str2hndl->st2h_st3hndl);
+
+    H5Tclose(str2hndl->st2h_base);
+    CHECK(ret,FAIL,"H5Tclose");
+
+    free(str2hndl);
+}
+
+static void
+set_struct2(misc5_struct2 *buf)
+{
+    unsigned i;         /* Local index variable */
+
+    buf->st2_el1=MISC5_DBGELVAL2;
+    buf->st2_el2.len=MISC5_DBGNELM3;
+
+    buf->st2_el2.p=malloc((buf->st2_el2.len)*sizeof(misc5_struct3));
+    CHECK(buf->st2_el2.p,NULL,"malloc");
+
+    for(i=0; i<(buf->st2_el2.len); i++)
+        set_struct3(&(((misc5_struct3 *)(buf->st2_el2.p))[i]));
+}
+
+static void
+clear_struct2(misc5_struct2 *buf)
+{
+    free(buf->st2_el2.p);
+}
+
+/*********************** struct1 ***********************/
+
+static misc5_struct1_hndl *
+create_struct1(void)
+{
+    misc5_struct1_hndl *str1hndl;       /* New 'struct1' created */
+    herr_t ret;                         /* For error checking */
+
+    str1hndl=malloc(sizeof(misc5_struct1_hndl));
+    CHECK(str1hndl,NULL,"malloc");
+
+    str1hndl->st1h_base=H5Tcreate(H5T_COMPOUND, sizeof(misc5_struct1));
+    CHECK(str1hndl->st1h_base,FAIL,"H5Tcreate");
+
+    ret=H5Tinsert(str1hndl->st1h_base, "st1_el1", HOFFSET(misc5_struct1, st1_el1), H5T_NATIVE_INT);
+    CHECK(ret,FAIL,"H5Tinsert");
+
+    str1hndl->st1h_st2hndl=create_struct2();
+    CHECK(str1hndl->st1h_st2hndl,NULL,"create_struct2");
+
+    ret=H5Tinsert(str1hndl->st1h_base, "st1_el2", HOFFSET(misc5_struct1, st1_el2), str1hndl->st1h_st2hndl->st2h_id);
+    CHECK(ret,FAIL,"H5Tinsert");
+
+    str1hndl->st1h_id=H5Tvlen_create(str1hndl->st1h_base);
+    CHECK(str1hndl->st1h_id,FAIL,"H5Tvlen_create");
+
+    return(str1hndl);
+}
+
+static void
+delete_struct1(misc5_struct1_hndl *str1hndl)
+{
+    herr_t ret;                         /* For error checking */
+
+    ret=H5Tclose(str1hndl->st1h_id);
+    CHECK(ret,FAIL,"H5Tclose");
+
+    delete_struct2(str1hndl->st1h_st2hndl);
+
+    ret=H5Tclose(str1hndl->st1h_base);
+    CHECK(ret,FAIL,"H5Tclose");
+
+    free(str1hndl);
+}
+
+static void
+set_struct1(misc5_struct1 *buf)
+{
+    unsigned i;         /* Local index variable */
+
+    buf->st1_el1=MISC5_DBGELVAL1;
+    buf->st1_el2.len=MISC5_DBGNELM2;
+
+    buf->st1_el2.p=malloc((buf->st1_el2.len)*sizeof(misc5_struct2));
+    CHECK(buf->st1_el2.p,NULL,"malloc");
+
+    for(i=0; i<(buf->st1_el2.len); i++)
+        set_struct2(&(((misc5_struct2 *)(buf->st1_el2.p))[i]));
+}
+
+static void
+clear_struct1(misc5_struct1 *buf)
+{
+    unsigned i;
+
+    for(i=0;i<buf->st1_el2.len;i++)
+        clear_struct2(&((( misc5_struct2 *)(buf->st1_el2.p))[i]));
+    free(buf->st1_el2.p);
+}
+
+static void
+test_misc5(void)
+{
+    hid_t loc_id, space_id, dataset_id;
+    hid_t mem_type_id;
+    misc5_struct1_hndl *str1hndl;
+    hsize_t dims[MISC5_DSETRANK];
+    hvl_t buf;
+    unsigned i,j,k;
+    herr_t ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing several level deep nested compound & VL datatypes \n"));
+
+    /* Write the dataset out */
+    loc_id=H5Fcreate(MISC5_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(loc_id,FAIL,"H5Fcreate");
+
+    /* Create the memory structure to write */
+    str1hndl=create_struct1();
+    CHECK(str1hndl,NULL,"create_struct1");
+
+    /* Create the dataspace */
+    dims[0]=MISC5_NELMTOPLVL;
+    space_id=H5Screate_simple(MISC5_DSETRANK, dims, NULL);
+    CHECK(space_id,FAIL,"H5Screate_simple");
+
+    /* Create the dataset */
+    dataset_id=H5Dcreate(loc_id, MISC5_DSETNAME, str1hndl->st1h_id, space_id, H5P_DEFAULT);
+    CHECK(dataset_id,FAIL,"H5Dcreate");
+
+    /* Create the variable-length buffer */
+    buf.len=MISC5_DBGNELM1;
+    buf.p=malloc((buf.len)*sizeof(misc5_struct1));
+    CHECK(buf.p,NULL,"malloc");
+
+    /* Create the top-level VL information */
+    for(i=0; i<MISC5_DBGNELM1; i++)
+        set_struct1(&(((misc5_struct1 *) (buf.p))[i]));
+
+    /* Write the data out */
+    ret=H5Dwrite(dataset_id, str1hndl->st1h_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, &buf);
+    CHECK(ret,FAIL,"H5Dwrite");
+
+    /* Release the top-level VL information */
+    for(j=0; j<MISC5_DBGNELM1; j++)
+        clear_struct1(&((( misc5_struct1 *)(buf.p))[j]));
+
+    /* Free the variable-length buffer */
+    free(buf.p);
+
+    /* Close dataset */
+    ret=H5Dclose(dataset_id);
+    CHECK(ret,FAIL,"H5Dclose");
+
+    /* Close dataspace */
+    ret=H5Sclose(space_id);
+    CHECK(ret,FAIL,"H5Sclose");
+
+    /* Delete memory structures */
+    delete_struct1(str1hndl);
+
+    /* Close file */
+    ret=H5Fclose(loc_id);
+    CHECK(ret,FAIL,"H5Fclose");
+
+
+    /* Read the dataset back in & verify it */
+    loc_id=H5Fopen(MISC5_FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(loc_id,FAIL,"H5Fopen");
+
+    /* Open dataset again */
+    dataset_id=H5Dopen(loc_id, MISC5_DSETNAME);
+    CHECK(dataset_id,FAIL,"H5Dopen");
+
+    /* Get the dataset's datatype */
+    mem_type_id=H5Dget_type(dataset_id);
+    CHECK(mem_type_id,FAIL,"H5Dget_type");
+
+    /* Get the dataset's dataspace */
+    space_id=H5Dget_space(dataset_id);
+    CHECK(space_id,FAIL,"H5Dget_space");
+
+    /* Read the data back in */
+    ret=H5Dread(dataset_id, mem_type_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, &buf);
+    CHECK(ret,FAIL,"H5Dread");
+
+    /* Verify the correct information was read in */
+    for(i=0; i<(buf.len); i++) {
+        /* printf("[%d]=%d\n",i, ((misc5_struct1 *)(buf.p))[i].st1_el1); */
+        VERIFY(((misc5_struct1 *)(buf.p))[i].st1_el1,MISC5_DBGELVAL1,"H5Dread");
+        for(j=0; j<(((misc5_struct1 *)(buf.p)) [i].st1_el2.len); j++) {
+            /* printf("   [%d]=%d\n",j, ((misc5_struct2 *)(((misc5_struct1 *) (buf.p))[i].st1_el2.p))[j].st2_el1); */
+            VERIFY(((misc5_struct2 *)(((misc5_struct1 *) (buf.p))[i].st1_el2.p))[j].st2_el1, MISC5_DBGELVAL2,"H5Dread");
+            for(k=0; k<(((misc5_struct2 *) (((misc5_struct1 *)(buf.p))[i].  st1_el2.p))[j].st2_el2.len); k++) {
+                /* printf("      [%d]=%d\n",k, ((misc5_struct3 *)(((misc5_struct2 *) (((misc5_struct1 *)(buf.p))[i].  st1_el2.p))[j].st2_el2.p))[k].st3_el1); */
+                VERIFY(((misc5_struct3 *)(((misc5_struct2 *) (((misc5_struct1 *)(buf.p))[i].  st1_el2.p))[j].st2_el2.p))[k].st3_el1, MISC5_DBGELVAL3,"H5Dread");
+            } /* end for */
+        }
+    }
+
+    /* Reclaim the memory for the VL information */
+    ret=H5Dvlen_reclaim(mem_type_id, space_id, H5P_DEFAULT, &buf);
+    CHECK(ret,FAIL,"H5Dvlen_reclaim");
+
+    /* Close dataspace */
+    ret=H5Sclose(space_id);
+    CHECK(ret,FAIL,"H5Sclose");
+
+    /* Close dataset */
+    ret=H5Tclose(mem_type_id);
+    CHECK(ret,FAIL,"H5Tclose");
+
+    /* Close dataset */
+    ret=H5Dclose(dataset_id);
+    CHECK(ret,FAIL,"H5Dclose");
+
+    /* Close file */
+    ret=H5Fclose(loc_id);
+    CHECK(ret,FAIL,"H5Fclose");
+
+} /* end test_misc5() */
+
+/****************************************************************
+**
+**  test_misc6(): Test that object header continuation messages are
+**      created correctly.
+**
+****************************************************************/
+static void
+test_misc6(void)
+{
+    hid_t loc_id, space_id, dataset_id;
+    hid_t attr_id;
+    char attr_name[16];
+    unsigned u;
+    herr_t ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing object header continuation code \n"));
+
+    /* Create the file */
+    loc_id=H5Fcreate(MISC6_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(loc_id,FAIL,"H5Fcreate");
+
+    /* Create the dataspace */
+    space_id=H5Screate(H5S_SCALAR);
+    CHECK(space_id,FAIL,"H5Screate");
+
+    /* Create the first dataset */
+    dataset_id=H5Dcreate(loc_id, MISC6_DSETNAME1, H5T_NATIVE_INT, space_id, H5P_DEFAULT);
+    CHECK(dataset_id,FAIL,"H5Dcreate");
+
+    /* Close dataset */
+    ret=H5Dclose(dataset_id);
+    CHECK(ret,FAIL,"H5Dclose");
+
+    /* Create the second dataset */
+    dataset_id=H5Dcreate(loc_id, MISC6_DSETNAME2, H5T_NATIVE_INT, space_id, H5P_DEFAULT);
+    CHECK(dataset_id,FAIL,"H5Dcreate");
+
+    /* Close dataset */
+    ret=H5Dclose(dataset_id);
+    CHECK(ret,FAIL,"H5Dclose");
+
+    /* Close file */
+    ret=H5Fclose(loc_id);
+    CHECK(ret,FAIL,"H5Fclose");
+
+    /* Loop through adding attributes to each dataset */
+    for(u=0; u<MISC6_NUMATTR; u++) {
+        /* Create name for attribute */
+        sprintf(attr_name,"Attr#%u",u);
+
+        /* Open the file */
+        loc_id=H5Fopen(MISC6_FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+        CHECK(loc_id,FAIL,"H5Fopen");
+
+
+        /* Open first dataset */
+        dataset_id=H5Dopen(loc_id, MISC6_DSETNAME1);
+        CHECK(dataset_id,FAIL,"H5Dopen");
+
+        /* Add attribute to dataset */
+        attr_id=H5Acreate(dataset_id,attr_name,H5T_NATIVE_INT,space_id,H5P_DEFAULT);
+        CHECK(attr_id, FAIL, "H5Acreate");
+
+        /* Close attribute */
+        ret=H5Aclose(attr_id);
+        CHECK(ret, FAIL, "H5Aclose");
+
+        /* Close dataset */
+        ret=H5Dclose(dataset_id);
+        CHECK(ret, FAIL, "H5Dclose");
+
+
+        /* Open second dataset */
+        dataset_id=H5Dopen(loc_id, MISC6_DSETNAME2);
+        CHECK(dataset_id,FAIL,"H5Dopen");
+
+        /* Add attribute to dataset */
+        attr_id=H5Acreate(dataset_id,attr_name,H5T_NATIVE_INT,space_id,H5P_DEFAULT);
+        CHECK(attr_id, FAIL, "H5Acreate");
+
+        /* Close attribute */
+        ret=H5Aclose(attr_id);
+        CHECK(ret, FAIL, "H5Aclose");
+
+        /* Close dataset */
+        ret=H5Dclose(dataset_id);
+        CHECK(ret, FAIL, "H5Dclose");
+
+
+        /* Close file */
+        ret=H5Fclose(loc_id);
+        CHECK(ret,FAIL,"H5Fclose");
+
+    } /* end for */
+
+    /* Close dataspace */
+    ret=H5Sclose(space_id);
+    CHECK(ret,FAIL,"H5Sclose");
+
+} /* end test_misc6() */
+
+/****************************************************************
+**
+**  test_misc7(): Test that datatypes are sensible to store on
+**      disk.  (i.e. not partially initialized)
+**
+****************************************************************/
+static void
+test_misc7(void)
+{
+    hid_t fid, did, tid, sid;
+    int enum_value=1;
+    herr_t ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing sensible datatype on disk code \n"));
+
+    /* Attempt to commit a non-sensible datatype */
+
+    /* Create the file */
+    fid=H5Fcreate(MISC7_FILE,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT);
+    CHECK(fid,FAIL,"H5Fcreate");
+
+    /* Create the dataspace */
+    sid=H5Screate(H5S_SCALAR);
+    CHECK(sid,FAIL,"H5Screate");
+
+    /* Create the compound datatype to commit*/
+    tid=H5Tcreate(H5T_COMPOUND,32);
+    CHECK(tid,FAIL,"H5Tcreate");
+
+    /* Attempt to commit an empty compound datatype */
+    ret=H5Tcommit(fid,MISC7_TYPENAME1,tid);
+    VERIFY(ret,FAIL,"H5Tcommit");
+
+    /* Attempt to use empty compound datatype to create dataset */
+    did=H5Dcreate(fid,MISC7_DSETNAME1,tid,sid,H5P_DEFAULT);
+    VERIFY(ret,FAIL,"H5Dcreate");
+
+    /* Add a field to the compound datatype */
+    ret=H5Tinsert(tid,"a",0,H5T_NATIVE_INT);
+    CHECK(ret,FAIL,"H5Tinsert");
+
+    /* Attempt to commit the compound datatype now - should work */
+    ret=H5Tcommit(fid,MISC7_TYPENAME1,tid);
+    CHECK(ret,FAIL,"H5Tcommit");
+
+    /* Attempt to use compound datatype to create dataset now - should work */
+    did=H5Dcreate(fid,MISC7_DSETNAME1,tid,sid,H5P_DEFAULT);
+    CHECK(did,FAIL,"H5Dcreate");
+
+    /* Close dataset */
+    ret=H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close compound datatype */
+    ret=H5Tclose(tid);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Create the enum datatype to commit*/
+    tid=H5Tenum_create(H5T_NATIVE_INT);
+    CHECK(tid,FAIL,"H5Tenum_create");
+
+    /* Attempt to commit an empty enum datatype */
+    ret=H5Tcommit(fid,MISC7_TYPENAME2,tid);
+    VERIFY(ret,FAIL,"H5Tcommit");
+
+    /* Attempt to use empty enum datatype to create dataset */
+    did=H5Dcreate(fid,MISC7_DSETNAME2,tid,sid,H5P_DEFAULT);
+    VERIFY(did,FAIL,"H5Dcreate");
+
+    /* Add a member to the enum datatype */
+    ret=H5Tenum_insert(tid,"a",&enum_value);
+    CHECK(ret,FAIL,"H5Tenum_insert");
+
+    /* Attempt to commit the enum datatype now - should work */
+    ret=H5Tcommit(fid,MISC7_TYPENAME2,tid);
+    CHECK(ret,FAIL,"H5Tcommit");
+
+    /* Attempt to use enum datatype to create dataset now - should work */
+    did=H5Dcreate(fid,MISC7_DSETNAME2,tid,sid,H5P_DEFAULT);
+    CHECK(did,FAIL,"H5Dcreate");
+
+    /* Close dataset */
+    ret=H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close enum datatype */
+    ret=H5Tclose(tid);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close dataspace */
+    ret=H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret=H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_misc7() */
+
+/****************************************************************
+**
+**  test_misc8(): Test storage size of various types of dataset
+**      storage methods.
+**
+****************************************************************/
+static void
+test_misc8(void)
+{
+    hid_t fid, did, sid;
+    hid_t fapl;                 /* File access property list */
+    hid_t dcpl;                 /* Dataset creation property list */
+    int rank=MISC8_RANK;
+    hsize_t dims[MISC8_RANK]={MISC8_DIM0,MISC8_DIM1};
+    hsize_t chunk_dims[MISC8_RANK]={MISC8_CHUNK_DIM0,MISC8_CHUNK_DIM1};
+    hsize_t storage_size;       /* Number of bytes of raw data storage used */
+    int *wdata;                 /* Data to write */
+    int *tdata;                 /* Temporary pointer to data write */
+#ifdef VERIFY_DATA
+    int *rdata;                 /* Data to read */
+    int *tdata2;                /* Temporary pointer to data to read */
+#endif /* VERIFY_DATA */
+    unsigned u,v;               /* Local index variables */
+    int mdc_nelmts;             /* Metadata number of elements */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int rdcc_nelmts;            /* Raw data number of elements */
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    size_t rdcc_nelmts;         /* Raw data number of elements */
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    size_t rdcc_nbytes;         /* Raw data number of bytes */
+    double rdcc_w0;             /* Raw data write percentage */
+    hsize_t start[MISC8_RANK];  /* Hyperslab start */
+    hsize_t count[MISC8_RANK];  /* Hyperslab block count */
+    herr_t ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing dataset storage sizes\n"));
+
+    /* Allocate space for the data to write & read */
+    wdata=malloc(sizeof(int)*MISC8_DIM0*MISC8_DIM1);
+    CHECK(wdata,NULL,"malloc");
+#ifdef VERIFY_DATA
+    rdata=malloc(sizeof(int)*MISC8_DIM0*MISC8_DIM1);
+    CHECK(rdata,NULL,"malloc");
+#endif /* VERIFY_DATA */
+
+    /* Initialize values */
+    tdata=wdata;
+    for(u=0; u<MISC8_DIM0; u++)
+        for(v=0; v<MISC8_DIM1; v++)
+            *tdata++=((u*MISC8_DIM1)+v)%13;
+
+    /* Create a file acccess property list */
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+    CHECK(fapl, FAIL, "H5Pcreate");
+
+    /* Get the default file access properties for caching */
+    ret=H5Pget_cache(fapl,&mdc_nelmts,&rdcc_nelmts,&rdcc_nbytes,&rdcc_w0);
+    CHECK(ret, FAIL, "H5Pget_cache");
+
+    /* Decrease the size of the raw data cache */
+    rdcc_nbytes=0;
+
+    /* Set the file access properties for caching */
+    ret=H5Pset_cache(fapl,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0);
+    CHECK(ret, FAIL, "H5Pset_cache");
+
+    /* Create the file */
+    fid=H5Fcreate(MISC8_FILE,H5F_ACC_TRUNC,H5P_DEFAULT,fapl);
+    CHECK(fid,FAIL,"H5Fcreate");
+
+    /* Close file access property list */
+    ret=H5Pclose(fapl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Create a simple dataspace */
+    sid = H5Screate_simple(rank,dims,NULL);
+    CHECK(sid, FAIL, "H5Screate_simple");
+
+    /* Select a hyperslab which coincides with chunk boundaries */
+    /* (For later use) */
+    start[0]=1; start[1]=1;
+    count[0]=(MISC8_CHUNK_DIM0*2)-1; count[1]=(MISC8_CHUNK_DIM1*2)-1;
+    ret = H5Sselect_hyperslab(sid,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create a dataset creation property list */
+    dcpl = H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(dcpl, FAIL, "H5Pcreate");
+
+    /*          I.  contiguous dataset tests    */
+
+    ret = H5Pset_layout(dcpl, H5D_CONTIGUOUS);
+    CHECK(ret, FAIL, "H5Pset_layout");
+
+    /* Set the space allocation time to early */
+    ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_EARLY);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Create a contiguous dataset, with space allocation early */
+    did = H5Dcreate(fid, MISC8_DSETNAME1, H5T_NATIVE_INT, sid, dcpl);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Check the storage size */
+    storage_size=H5Dget_storage_size(did);
+    CHECK(storage_size, 0, "H5Dget_storage_size");
+    VERIFY(storage_size, MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT), "H5Dget_storage_size");
+
+    /* Close dataset ID */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+#ifndef H5_HAVE_PARALLEL
+    /* Set the space allocation time to late */
+    ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_LATE);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Create a contiguous dataset, with space allocation late */
+    did = H5Dcreate(fid, MISC8_DSETNAME2, H5T_NATIVE_INT, sid, dcpl);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Check the storage size before data is written */
+    storage_size=H5Dget_storage_size(did);
+    VERIFY(storage_size, 0, "H5Dget_storage_size");
+
+    /* Write data */
+    ret = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Check the storage size after data is written */
+    storage_size=H5Dget_storage_size(did);
+    CHECK(storage_size, 0, "H5Dget_storage_size");
+    VERIFY(storage_size, MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT), "H5Dget_storage_size");
+
+    /* Close dataset ID */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Set the space allocation time to incremental */
+    ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_INCR);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Create a contiguous dataset, with space allocation late */
+    did = H5Dcreate(fid, MISC8_DSETNAME3, H5T_NATIVE_INT, sid, dcpl);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Check the storage size before data is written */
+    storage_size=H5Dget_storage_size(did);
+    VERIFY(storage_size, 0, "H5Dget_storage_size");
+
+    /* Write data */
+    ret = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Check the storage size after data is written */
+    storage_size=H5Dget_storage_size(did);
+    CHECK(storage_size, 0, "H5Dget_storage_size");
+    VERIFY(storage_size, MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT), "H5Dget_storage_size");
+
+    /* Close dataset ID */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+#endif /* H5_HAVE_PARALLEL */
+
+    /*          II.     compact dataset tests           */
+    ret = H5Pset_layout(dcpl, H5D_COMPACT);
+    CHECK(ret, FAIL, "H5Pset_layout");
+
+    /* Set the space allocation time to late */
+    ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_LATE);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Create a contiguous dataset, with space allocation late */
+    /* Should fail */
+    did = H5Dcreate(fid, MISC8_DSETNAME4, H5T_NATIVE_INT, sid, dcpl);
+    VERIFY(did, FAIL, "H5Dcreate");
+
+    /* Set the space allocation time to incremental */
+    ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_INCR);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Create a contiguous dataset, with space allocation incremental */
+    /* Should fail */
+    did = H5Dcreate(fid, MISC8_DSETNAME4, H5T_NATIVE_INT, sid, dcpl);
+    VERIFY(did, FAIL, "H5Dcreate");
+
+    /* Set the space allocation time to early */
+    ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_EARLY);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Set the fill time to allocation */
+    ret = H5Pset_fill_time(dcpl,H5D_FILL_TIME_ALLOC);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Create a contiguous dataset, with space allocation early */
+    did = H5Dcreate(fid, MISC8_DSETNAME4, H5T_NATIVE_INT, sid, dcpl);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Check the storage size */
+    storage_size=H5Dget_storage_size(did);
+    CHECK(storage_size, 0, "H5Dget_storage_size");
+    VERIFY(storage_size, MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT), "H5Dget_storage_size");
+
+    /* Close dataset ID */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+
+    /*          III.    chunked dataset tests           */
+
+    ret = H5Pset_layout(dcpl, H5D_CHUNKED);
+    CHECK(ret, FAIL, "H5Pset_layout");
+
+    /* Set the space allocation time to early */
+    ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_EARLY);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Use chunked storage for this dataset */
+    ret = H5Pset_chunk(dcpl,rank,chunk_dims);
+    CHECK(ret, FAIL, "H5Pset_chunk");
+
+    /* Create a chunked dataset, with space allocation early */
+    did = H5Dcreate(fid, MISC8_DSETNAME5, H5T_NATIVE_INT, sid, dcpl);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Check the storage size after data is written */
+    storage_size=H5Dget_storage_size(did);
+    CHECK(storage_size, 0, "H5Dget_storage_size");
+    VERIFY(storage_size, MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT), "H5Dget_storage_size");
+
+    /* Close dataset ID */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+#ifndef H5_HAVE_PARALLEL
+    /* Set the space allocation time to late */
+    ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_LATE);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Use chunked storage for this dataset */
+    ret = H5Pset_chunk(dcpl,rank,chunk_dims);
+    CHECK(ret, FAIL, "H5Pset_chunk");
+
+    /* Create a chunked dataset, with space allocation late */
+    did = H5Dcreate(fid, MISC8_DSETNAME6, H5T_NATIVE_INT, sid, dcpl);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Check the storage size after dataset is created */
+    storage_size=H5Dget_storage_size(did);
+    VERIFY(storage_size, 0, "H5Dget_storage_size");
+
+    /* Write part of the dataset */
+    ret = H5Dwrite(did, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Check the storage size after data is written */
+    storage_size=H5Dget_storage_size(did);
+    CHECK(storage_size, 0, "H5Dget_storage_size");
+    VERIFY(storage_size, MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT), "H5Dget_storage_size");
+
+    /* Close dataset ID */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Set the space allocation time to incremental */
+    ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_INCR);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Create a chunked dataset, with space allocation incremental */
+    did = H5Dcreate(fid, MISC8_DSETNAME7, H5T_NATIVE_INT, sid, dcpl);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Check the storage size before data is written */
+    storage_size=H5Dget_storage_size(did);
+    VERIFY(storage_size, 0, "H5Dget_storage_size");
+
+    /* Write part of the dataset */
+    ret = H5Dwrite(did, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Check the storage size after only four chunks are written */
+    storage_size=H5Dget_storage_size(did);
+    VERIFY(storage_size, 4*MISC8_CHUNK_DIM0*MISC8_CHUNK_DIM1*H5Tget_size(H5T_NATIVE_INT), "H5Dget_storage_size");
+
+    /* Write entire dataset */
+    ret = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+#ifdef VERIFY_DATA
+    /* Read data */
+    ret = H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check values written */
+    tdata=wdata;
+    tdata2=rdata;
+    for(u=0; u<MISC8_DIM0; u++)
+        for(v=0; v<MISC8_DIM1; v++,tdata++,tdata2++)
+            if(*tdata!=*tdata2)
+                TestErrPrintf("Error on line %d: u=%u, v=%d, *tdata=%d, *tdata2=%d\n",__LINE__,(unsigned)u,(unsigned)v,(int)*tdata,(int)*tdata2);
+#endif /* VERIFY_DATA */
+
+    /* Check the storage size after data is written */
+    storage_size=H5Dget_storage_size(did);
+    CHECK(storage_size, 0, "H5Dget_storage_size");
+    VERIFY(storage_size, MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT), "H5Dget_storage_size");
+
+    /* Close dataset ID */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+#endif /* H5_HAVE_PARALLEL */
+
+    /* Set the space allocation time to early */
+    ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_EARLY);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Use compression as well as chunking for these datasets */
+#ifdef H5_HAVE_FILTER_DEFLATE
+    ret = H5Pset_deflate(dcpl,9);
+    CHECK(ret, FAIL, "H5Pset_deflate");
+#endif /* end H5_HAVE_FILTER_DEFLATE */
+
+    /* Create a chunked dataset, with space allocation early */
+    did = H5Dcreate(fid, MISC8_DSETNAME8, H5T_NATIVE_INT, sid, dcpl);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Write part of the dataset */
+    ret = H5Dwrite(did, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Check the storage size after data is written */
+    storage_size=H5Dget_storage_size(did);
+    CHECK(storage_size, 0, "H5Dget_storage_size");
+#ifdef H5_HAVE_FILTER_DEFLATE
+    if(storage_size>=(MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT)))
+        TestErrPrintf("Error on line %d: data wasn't compressed! storage_size=%u\n",__LINE__,(unsigned)storage_size);
+#else /* Compression is not configured */
+    if(storage_size!=(MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT)))
+        TestErrPrintf("Error on line %d: wrong storage size! storage_size=%u\n",__LINE__,(unsigned)storage_size);
+#endif /* H5_HAVE_FILTER_DEFLATE */
+
+    /* Close dataset ID */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+#ifndef H5_HAVE_PARALLEL
+    /* Set the space allocation time to late */
+    ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_LATE);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Create a chunked dataset, with space allocation late */
+    did = H5Dcreate(fid, MISC8_DSETNAME9, H5T_NATIVE_INT, sid, dcpl);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Check the storage size before data is written */
+    storage_size=H5Dget_storage_size(did);
+    VERIFY(storage_size, 0, "H5Dget_storage_size");
+
+    /* Write part of the dataset */
+    ret = H5Dwrite(did, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Check the storage size after only four chunks are written */
+    storage_size=H5Dget_storage_size(did);
+    CHECK(storage_size, 0, "H5Dget_storage_size");
+#ifdef H5_HAVE_FILTER_DEFLATE
+    if(storage_size>=(MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT)))
+        TestErrPrintf("Error on line %d: data wasn't compressed! storage_size=%u\n",__LINE__,(unsigned)storage_size);
+#else /* Compression is not configured */
+    if(storage_size!=(MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT)))
+        TestErrPrintf("Error on line %d: wrong storage size! storage_size=%u\n",__LINE__,(unsigned)storage_size);
+#endif /* H5_HAVE_FILTER_DEFLATE */
+
+    /* Write entire dataset */
+    ret = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+#ifdef VERIFY_DATA
+    /* Read data */
+    ret = H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check values written */
+    tdata=wdata;
+    tdata2=rdata;
+    for(u=0; u<MISC8_DIM0; u++)
+        for(v=0; v<MISC8_DIM1; v++,tdata++,tdata2++)
+            if(*tdata!=*tdata2)
+                TestErrPrintf("Error on line %d: u=%u, v=%d, *tdata=%d, *tdata2=%d\n",__LINE__,(unsigned)u,(unsigned)v,(int)*tdata,(int)*tdata2);
+#endif /* VERIFY_DATA */
+
+    /* Check the storage size after data is written */
+    storage_size=H5Dget_storage_size(did);
+    CHECK(storage_size, 0, "H5Dget_storage_size");
+#ifdef H5_HAVE_FILTER_DEFLATE
+    if(storage_size>=(MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT)))
+        TestErrPrintf("Error on line %d: data wasn't compressed! storage_size=%u\n",__LINE__,(unsigned)storage_size);
+#else
+    if(storage_size!=(MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT)))
+        TestErrPrintf("Error on line %d: wrong storage size! storage_size=%u\n",__LINE__,(unsigned)storage_size);
+#endif /*H5_HAVE_FILTER_DEFLATE*/
+
+    /* Close dataset ID */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Set the space allocation time to incremental */
+    ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_INCR);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Create a chunked dataset, with space allocation incremental */
+    did = H5Dcreate(fid, MISC8_DSETNAME10, H5T_NATIVE_INT, sid, dcpl);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Check the storage size before data is written */
+    storage_size=H5Dget_storage_size(did);
+    VERIFY(storage_size, 0, "H5Dget_storage_size");
+
+    /* Write part of the dataset */
+    ret = H5Dwrite(did, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Check the storage size after only four chunks are written */
+    storage_size=H5Dget_storage_size(did);
+    CHECK(storage_size, 0, "H5Dget_storage_size");
+#ifdef H5_HAVE_FILTER_DEFLATE
+    if(storage_size>=(4*MISC8_CHUNK_DIM0*MISC8_CHUNK_DIM1*H5Tget_size(H5T_NATIVE_INT)))
+        TestErrPrintf("Error on line %d: data wasn't compressed! storage_size=%u\n",__LINE__,(unsigned)storage_size);
+#else /* Compression is not configured */
+    if(storage_size!=(4*MISC8_CHUNK_DIM0*MISC8_CHUNK_DIM1*H5Tget_size(H5T_NATIVE_INT)))
+        TestErrPrintf("Error on line %d: wrong storage size! storage_size=%u\n",__LINE__,(unsigned)storage_size);
+#endif /* H5_HAVE_FILTER_DEFLATE */
+
+    /* Write entire dataset */
+    ret = H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+#ifdef VERIFY_DATA
+    /* Read data */
+    ret = H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check values written */
+    tdata=wdata;
+    tdata2=rdata;
+    for(u=0; u<MISC8_DIM0; u++)
+        for(v=0; v<MISC8_DIM1; v++,tdata++,tdata2++)
+            if(*tdata!=*tdata2)
+                TestErrPrintf("Error on line %d: u=%u, v=%d, *tdata=%d, *tdata2=%d\n",__LINE__,(unsigned)u,(unsigned)v,(int)*tdata,(int)*tdata2);
+#endif /* VERIFY_DATA */
+
+    /* Check the storage size after data is written */
+    storage_size=H5Dget_storage_size(did);
+    CHECK(storage_size, 0, "H5Dget_storage_size");
+#ifdef H5_HAVE_FILTER_DEFLATE
+    if(storage_size>=(MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT)))
+        TestErrPrintf("Error on line %d: data wasn't compressed! storage_size=%u\n",__LINE__,(unsigned)storage_size);
+#else
+    if(storage_size!=(MISC8_DIM0*MISC8_DIM1*H5Tget_size(H5T_NATIVE_INT)))
+        TestErrPrintf("Error on line %d: wrong storage size! storage_size=%u\n",__LINE__,(unsigned)storage_size);
+#endif /*H5_HAVE_FILTER_DEFLATE*/
+
+    /* Close dataset ID */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+#endif /* H5_HAVE_PARALLEL */
+
+    /* Close dataset creation property list */
+    ret=H5Pclose(dcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close dataspace */
+    ret=H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret=H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free the read & write buffers */
+    free(wdata);
+#ifdef VERIFY_DATA
+    free(rdata);
+#endif /* VERIFY_DATA */
+} /* end test_misc8() */
+
+/****************************************************************
+**
+**  test_misc9(): Test that H5Fopen() does not succeed for core
+**      files, H5Fcreate() must be used to open them.
+**
+****************************************************************/
+static void
+test_misc9(void)
+{
+    hid_t fapl, fid;
+    herr_t ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing core file opening\n"));
+
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+    CHECK(fapl, FAIL, "H5Pcreate");
+
+    ret=H5Pset_fapl_core(fapl, 1024, 0);
+    CHECK(ret, FAIL, "H5Pset_fapl_core");
+
+    fid = H5Fopen(MISC9_FILE, H5F_ACC_RDWR, fapl);
+    VERIFY(fid,FAIL,"H5Fopen");
+
+    ret=H5Pclose(fapl);
+    CHECK(ret, FAIL, "H5Pset_fapl_core");
+} /* end test_misc9() */
+
+/****************************************************************
+**
+**  test_misc10(): Test opening a dataset created with an older
+**      version of the library (shares the tmtimeo.h5 file with the mtime.c
+**      test - see notes in gen_old_mtime.c for notes on generating this
+**      data file) and using the dataset creation property list from
+**      that dataset to create a dataset with the current version of
+**      the library.  Also tests using file creation property in same way.
+**
+****************************************************************/
+static void
+test_misc10(void)
+{
+    hid_t       file, file_new; /* File IDs for old & new files */
+    hid_t       fcpl;           /* File creation property list */
+    hid_t       dataset, dataset_new;   /* Dataset IDs for old & new datasets */
+    hid_t       dcpl;           /* Dataset creation property list */
+    hid_t       space, type;    /* Old dataset's dataspace & datatype */
+    char testfile[512]="";          /* Character buffer for corrected test file name */
+    char *srcdir = getenv("srcdir");    /* Pointer to the directory the source code is located within */
+    herr_t      ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing using old dataset creation property list\n"));
+
+    /* Generate the correct name for the test file, by prepending the source path */
+    if (srcdir && ((strlen(srcdir) + strlen(MISC10_FILE_OLD) + 1) < sizeof(testfile))) {
+        strcpy(testfile, srcdir);
+        strcat(testfile, "/");
+    }
+    strcat(testfile, MISC10_FILE_OLD);
+
+    /*
+     * Open the old file and the dataset and get old settings.
+     */
+    file =    H5Fopen(testfile, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fopen");
+    fcpl =  H5Fget_create_plist(file);
+    CHECK(fcpl, FAIL, "H5Fget_create_plist");
+
+    dataset = H5Dopen(file, MISC10_DSETNAME);
+    CHECK(dataset, FAIL, "H5Dopen");
+    dcpl =  H5Dget_create_plist(dataset);
+    CHECK(dcpl, FAIL, "H5Dget_create_plist");
+    space =   H5Dget_space(dataset);
+    CHECK(space, FAIL, "H5Dget_space");
+    type =    H5Dget_type(dataset);
+    CHECK(type, FAIL, "H5Dget_type");
+
+    /* Create new file & dataset */
+    file_new = H5Fcreate(MISC10_FILE_NEW, H5F_ACC_TRUNC , fcpl, H5P_DEFAULT);
+    CHECK(file_new, FAIL, "H5Fcreate");
+
+    dataset_new = H5Dcreate(file_new, MISC10_DSETNAME, type, space, dcpl);
+    CHECK(dataset_new, FAIL, "H5Dcreate");
+
+    /* Close new dataset & file */
+    ret=H5Dclose(dataset_new);
+    CHECK(ret, FAIL, "H5Dclose");
+    ret=H5Fclose(file_new);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Close old dataset information */
+    ret=H5Tclose(type);
+    CHECK(ret, FAIL, "H5Tclose");
+    ret=H5Sclose(space);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret=H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+    ret=H5Pclose(dcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close old file information */
+    ret=H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+    ret=H5Pclose(fcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+} /* end test_misc10() */
+
+/****************************************************************
+**
+**  test_misc11(): Test that all properties in a file creation property
+**      list are stored correctly in the file and can be retrieved
+**      when the file is re-opened.
+**
+****************************************************************/
+static void
+test_misc11(void)
+{
+    hid_t       file;           /* File IDs for old & new files */
+    hid_t       fcpl;           /* File creation property list */
+    hsize_t     userblock;      /* Userblock size retrieved from FCPL */
+    size_t      off_size;       /* Size of offsets in the file */
+    size_t      len_size;       /* Size of lengths in the file */
+    unsigned    sym_ik;         /* Symbol table B-tree initial 'K' value */
+    unsigned    istore_ik;      /* Indexed storage B-tree initial 'K' value */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int         sym_lk;         /* Symbol table B-tree leaf 'K' value */
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    unsigned    sym_lk;         /* Symbol table B-tree leaf 'K' value */
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    unsigned super;             /* Superblock version # */
+    unsigned freelist;          /* Free list version # */
+    unsigned stab;              /* Symbol table entry version # */
+    unsigned shhdr;             /* Shared object header version # */
+    herr_t      ret;            /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing file creation properties retrieved correctly\n"));
+
+    /* Creating a file with the default file creation property list should
+     * create a version 0 superblock
+     */
+
+    /* Create file with default file creation property list */
+    file= H5Fcreate(MISC11_FILE, H5F_ACC_TRUNC , H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* Get the file's dataset creation property list */
+    fcpl =  H5Fget_create_plist(file);
+    CHECK(fcpl, FAIL, "H5Fget_create_plist");
+
+    /* Get the file's version information */
+    ret=H5Pget_version(fcpl, &super, &freelist, &stab, &shhdr);
+    CHECK(ret, FAIL, "H5Pget_version");
+    VERIFY(super,0,"H5Pget_version");
+    VERIFY(freelist,0,"H5Pget_version");
+    VERIFY(stab,0,"H5Pget_version");
+    VERIFY(shhdr,0,"H5Pget_version");
+
+    /* Close FCPL */
+    ret=H5Pclose(fcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret=H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Create a file creation property list */
+    fcpl = H5Pcreate(H5P_FILE_CREATE);
+    CHECK(fcpl, FAIL, "H5Pcreate");
+
+    /* Set all the properties in the FCPL */
+    ret=H5Pset_userblock(fcpl,(hsize_t)MISC11_USERBLOCK);
+    CHECK(ret, FAIL, "H5Pset_userblock");
+
+    ret=H5Pset_sizes(fcpl,MISC11_SIZEOF_OFF,MISC11_SIZEOF_LEN);
+    CHECK(ret, FAIL, "H5Pset_sizes");
+
+    ret=H5Pset_sym_k(fcpl,MISC11_SYM_IK,MISC11_SYM_LK);
+    CHECK(ret, FAIL, "H5Pset_sym_k");
+
+    ret=H5Pset_istore_k(fcpl,MISC11_ISTORE_IK);
+    CHECK(ret, FAIL, "H5Pset_istore_k");
+
+    /* Creating a file with the non-default file creation property list should
+     * create a version 1 superblock
+     */
+
+    /* Create file with custom file creation property list */
+    file= H5Fcreate(MISC11_FILE, H5F_ACC_TRUNC , fcpl, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* Close FCPL */
+    ret=H5Pclose(fcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Get the file's dataset creation property list */
+    fcpl =  H5Fget_create_plist(file);
+    CHECK(fcpl, FAIL, "H5Fget_create_plist");
+
+    /* Get the file's version information */
+    ret=H5Pget_version(fcpl, &super, &freelist, &stab, &shhdr);
+    CHECK(ret, FAIL, "H5Pget_version");
+    VERIFY(super,1,"H5Pget_version");
+    VERIFY(freelist,0,"H5Pget_version");
+    VERIFY(stab,0,"H5Pget_version");
+    VERIFY(shhdr,0,"H5Pget_version");
+
+    /* Close FCPL */
+    ret=H5Pclose(fcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret=H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Re-open the file */
+    file = H5Fopen(MISC11_FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* Get the file's dataset creation property list */
+    fcpl =  H5Fget_create_plist(file);
+    CHECK(fcpl, FAIL, "H5Fget_create_plist");
+
+    /* Get the file's version information */
+    ret=H5Pget_version(fcpl, &super, &freelist, &stab, &shhdr);
+    CHECK(ret, FAIL, "H5Pget_version");
+    VERIFY(super,1,"H5Pget_version");
+    VERIFY(freelist,0,"H5Pget_version");
+    VERIFY(stab,0,"H5Pget_version");
+    VERIFY(shhdr,0,"H5Pget_version");
+
+    /* Retrieve all the property values & check them */
+    ret=H5Pget_userblock(fcpl,&userblock);
+    CHECK(ret, FAIL, "H5Pget_userblock");
+    VERIFY(userblock, MISC11_USERBLOCK, "H5Pget_userblock");
+
+    ret=H5Pget_sizes(fcpl,&off_size,&len_size);
+    CHECK(ret, FAIL, "H5Pget_sizes");
+    VERIFY(off_size, MISC11_SIZEOF_OFF, "H5Pget_sizes");
+    VERIFY(len_size, MISC11_SIZEOF_LEN, "H5Pget_sizes");
+
+    ret=H5Pget_sym_k(fcpl,&sym_ik,&sym_lk);
+    CHECK(ret, FAIL, "H5Pget_sym_k");
+    VERIFY(sym_ik, MISC11_SYM_IK, "H5Pget_sym_k");
+    VERIFY(sym_lk, MISC11_SYM_LK, "H5Pget_sym_k");
+
+    ret=H5Pget_istore_k(fcpl,&istore_ik);
+    CHECK(ret, FAIL, "H5Pget_istore_k");
+    VERIFY(istore_ik, MISC11_ISTORE_IK, "H5Pget_istore_k");
+
+    /* Close file */
+    ret=H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Close FCPL */
+    ret=H5Pclose(fcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+} /* end test_misc11() */
+
+/****************************************************************
+**
+**  test_misc12(): Test that VL-types operate correctly in chunked
+**      datasets that are extended.
+**
+****************************************************************/
+static void
+test_misc12(void)
+{
+    const char *wdata [MISC12_SPACE1_DIM1]= {
+        "Four score and seven years ago our forefathers brought forth on this continent a new nation,",
+        "conceived in liberty and dedicated to the proposition that all men are created equal.",
+        "Now we are engaged in a great civil war,",
+        "testing whether that nation or any nation so conceived and so dedicated can long endure."
+        };
+    const char *wdata1 [MISC12_APPEND_SIZE]= {
+       "O Gloria inmarcesible! O Jubilo inmortal! En surcos de dolores, el",
+       "bien germina ya! Ceso la horrible noche, La libertad sublime",
+       "derrama las auroras de su invencible luz.",
+       "La humanidad entera, que entre cadenas gime, comprende",
+       "las palabras del que murio en la cruz."
+        };
+    char        *rdata [MISC12_SPACE1_DIM1+MISC12_APPEND_SIZE]; /* Information read in */
+    hid_t		fid1;
+    hid_t		dataset;
+    hid_t		sid1, space, memspace;
+    hid_t		tid1, cparms;
+    hsize_t		dims1[] = {MISC12_SPACE1_DIM1};
+    hsize_t		dimsn[] = {MISC12_APPEND_SIZE};
+    hsize_t		maxdims1[1] = {H5S_UNLIMITED};
+    hsize_t		chkdims1[1] = {MISC12_CHUNK_SIZE};
+    hsize_t     	newsize[1] = {MISC12_SPACE1_DIM1+MISC12_APPEND_SIZE};
+    hsize_t    		offset[1] = {MISC12_SPACE1_DIM1};
+    hsize_t     	count[1] = {MISC12_APPEND_SIZE};
+    int                 i;          /* counting variable */
+    herr_t		ret;		/* Generic return value  */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing VL-type in chunked dataset\n"));
+
+    /* This test requirese a relatively "fresh" library environment */
+    ret=H5garbage_collect();
+    CHECK(ret, FAIL, "H5garbage_collect");
+
+    /* Create file */
+    fid1 = H5Fcreate (MISC12_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple (MISC12_SPACE1_RANK, dims1, maxdims1);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tcopy (H5T_C_S1);
+    CHECK(tid1, FAIL, "H5Tcopy");
+
+    ret = H5Tset_size (tid1,H5T_VARIABLE);
+    CHECK(ret, FAIL, "H5Tset_size");
+
+    cparms = H5Pcreate (H5P_DATASET_CREATE);
+    CHECK(cparms, FAIL, "H5Pcreate");
+
+    ret = H5Pset_chunk ( cparms, 1, chkdims1);
+    CHECK(ret, FAIL, "H5Pset_chunk");
+
+    /* Create a dataset */
+    dataset = H5Dcreate (fid1, MISC12_DSET_NAME, tid1, sid1, cparms);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret = H5Dwrite (dataset, tid1, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Extend dataset */
+    ret = H5Dextend (dataset, newsize);
+    CHECK(ret, FAIL, "H5Dextend");
+
+    memspace = H5Screate_simple (MISC12_SPACE1_RANK, dimsn, NULL);
+    CHECK(memspace, FAIL, "H5Screate_simple");
+
+    space = H5Dget_space (dataset);
+    CHECK(space, FAIL, "H5Dget_space");
+
+    ret = H5Sselect_hyperslab (space, H5S_SELECT_SET, offset, NULL, count, NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Write data to new portion of dataset */
+    ret = H5Dwrite (dataset, tid1, memspace, space, H5P_DEFAULT, wdata1);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read all data back */
+    ret= H5Dread (dataset, tid1, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    for(i=0; i<MISC12_SPACE1_DIM1; i++)
+        if(HDstrcmp(wdata[i],rdata[i]))
+            TestErrPrintf("Error on line %d: wdata[%d]=%s, rdata[%d]=%s\n",__LINE__,i,wdata[i],i,rdata[i]);
+    for(; i<(MISC12_SPACE1_DIM1+MISC12_APPEND_SIZE); i++)
+        if(HDstrcmp(wdata1[i-MISC12_SPACE1_DIM1],rdata[i]))
+            TestErrPrintf("Error on line %d: wdata1[%d]=%s, rdata[%d]=%s\n",__LINE__,i-MISC12_SPACE1_DIM1,wdata1[i-MISC12_SPACE1_DIM1],i,rdata[i]);
+
+    ret = H5Sselect_all (space);
+    CHECK(ret, FAIL, "H5Sselect_all");
+
+    /* Reclaim VL data memory */
+    ret = H5Dvlen_reclaim (tid1, space, H5P_DEFAULT, rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close Everything */
+    ret = H5Dclose (dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+    ret = H5Tclose (tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+    ret = H5Sclose (space);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose (memspace);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose (sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Pclose (cparms);
+    CHECK(ret, FAIL, "H5Pclose");
+    ret = H5Fclose (fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* end test_misc12() */
+
+/* Various routines for misc. 13 test */
+static void
+init_data(void)
+{
+    unsigned u,v;       /* Local index variables */
+
+    for(u=0; u<MISC13_DIM1; u++)
+        for(v=0; v<MISC13_DIM2; v++)
+            m13_data[u][v]=(u*MISC13_DIM2)+v;
+}
+
+static int
+verify_data(void)
+{
+    unsigned u,v;       /* Local index variables */
+
+    for(u=0; u<MISC13_DIM1; u++)
+        for(v=0; v<MISC13_DIM2; v++)
+            if(m13_data[u][v]!=m13_rdata[u][v])
+                return(-1);
+    return(0);
+}
+
+static void
+create_dataset(hid_t loc_id, const char *name, hid_t dcpl)
+{
+    hid_t dsid;         /* Dataset ID */
+    hid_t sid;          /* Dataspace ID */
+    hsize_t dims[MISC13_RANK]; /* Dataset dimensions */
+    herr_t ret;         /* Generic return value */
+
+    /* Create dataspace for use with dataset */
+    dims[0]=MISC13_DIM1;
+    dims[1]=MISC13_DIM2;
+    sid=H5Screate_simple(MISC13_RANK, dims, NULL);
+    CHECK(sid, FAIL, "H5Screate_simple");
+
+    /* Create contiguous dataset in root group */
+    dsid = H5Dcreate(loc_id, name, H5T_NATIVE_UINT, sid, dcpl);
+    CHECK(dsid, FAIL, "H5Dcreate");
+
+    /* Write some data to dataset */
+    ret = H5Dwrite(dsid, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, m13_data);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close the contiguous dataset */
+    ret = H5Dclose(dsid);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close the dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+}
+
+static void
+verify_dataset(hid_t loc_id, const char *name)
+{
+    hid_t dsid;         /* Dataset ID */
+    herr_t ret;         /* Generic return value */
+
+    /* Open the contiguous dataset in the root group */
+    dsid = H5Dopen(loc_id, name);
+    CHECK(dsid, FAIL, "H5Dopen");
+
+    /* Read the data */
+    ret = H5Dread(dsid, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, m13_rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Verify that the data is correct */
+    ret=verify_data();
+    CHECK(ret, FAIL, "verify_data");
+
+    /* Close the contiguous dataset */
+    ret = H5Dclose(dsid);
+    CHECK(ret, FAIL, "H5Dclose");
+}
+
+static void
+create_hdf_file(const char *name)
+{
+    hid_t fid;          /* File ID */
+    hid_t gid,gid2;     /* Group IDs */
+    hid_t tid;          /* Datatype ID */
+    hid_t dcpl;         /* Dataset creation property list ID */
+    hsize_t chunk_dims[MISC13_RANK]; /* Chunk dimensions */
+    herr_t ret;         /* Generic return value */
+
+    /* Create file */
+    fid=H5Fcreate(name, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create DCPL for use with datasets */
+    dcpl = H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(dcpl, FAIL, "H5Pcreate");
+
+    /* Set the DCPL to be chunked */
+    ret = H5Pset_layout(dcpl, H5D_CHUNKED);
+    CHECK(ret, FAIL, "H5Pset_layout");
+
+    /* Use chunked storage for this DCPL */
+    chunk_dims[0]=MISC13_CHUNK_DIM1;
+    chunk_dims[1]=MISC13_CHUNK_DIM2;
+    ret = H5Pset_chunk(dcpl,MISC13_RANK,chunk_dims);
+    CHECK(ret, FAIL, "H5Pset_chunk");
+
+    /* Create contiguous dataset in root group */
+    create_dataset(fid,MISC13_DSET1_NAME,H5P_DEFAULT);
+
+    /* Create chunked dataset in root group */
+    create_dataset(fid,MISC13_DSET2_NAME,dcpl);
+
+    /* Create a datatype to commit to the file */
+    tid=H5Tcopy(H5T_NATIVE_INT);
+    CHECK(tid, FAIL, "H5Tcopy");
+
+    /* Create a named datatype in the root group */
+    ret=H5Tcommit(fid,MISC13_DTYPE_NAME,tid);
+    CHECK(ret, FAIL, "H5Tcommit");
+
+    /* Close named datatype */
+    ret=H5Tclose(tid);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Create a group in the root group */
+    gid = H5Gcreate(fid, MISC13_GROUP1_NAME, 0);
+    CHECK(gid, FAIL, "H5Gcreate");
+
+    /* Create another group in the new group */
+    gid2 = H5Gcreate(gid, MISC13_GROUP2_NAME, 0);
+    CHECK(gid2, FAIL, "H5Gcreate");
+
+    /* Close the second group */
+    ret = H5Gclose(gid2);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Create contiguous dataset in new group */
+    create_dataset(gid,MISC13_DSET1_NAME,H5P_DEFAULT);
+
+    /* Create chunked dataset in new group */
+    create_dataset(gid,MISC13_DSET2_NAME,dcpl);
+
+    /* Create a datatype to commit to the new group */
+    tid=H5Tcopy(H5T_NATIVE_INT);
+    CHECK(tid, FAIL, "H5Tcopy");
+
+    /* Create a named datatype in the new group */
+    ret=H5Tcommit(gid,MISC13_DTYPE_NAME,tid);
+    CHECK(ret, FAIL, "H5Tcommit");
+
+    /* Close named datatype */
+    ret=H5Tclose(tid);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close the first group */
+    ret = H5Gclose(gid);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Close the DCPL */
+    ret = H5Pclose(dcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close the file */
+    ret = H5Fclose(fid);
+    assert(ret>=0);
+    CHECK(ret, FAIL, "H5Fclose");
+}
+
+static void
+insert_user_block(const char *old_name, const char *new_name,const char *str,size_t size)
+{
+    FILE *new_fp, *old_fp;      /* Pointers to new & old files */
+    void *user_block;           /* Pointer to user block to write to file */
+    void *copy_buf;             /* Pointer to buffer for copying data */
+    size_t written;             /* Amount of data written to new file */
+    size_t read_in;             /* Amount of data read in from old file */
+    int ret;                    /* Generic status value */
+
+    /* Allocate space for the user block */
+    user_block=HDcalloc(size,1);
+    CHECK(user_block, NULL, "HDcalloc");
+
+    /* Copy in the user block data */
+    HDmemcpy(user_block,str,strlen(str));
+
+    /* Open the new file */
+    new_fp=HDfopen(new_name,"wb");
+    CHECK(new_fp, NULL, "HDfopen");
+
+    /* Write the user block to the new file */
+    written=HDfwrite(user_block,1,size,new_fp);
+    VERIFY(written, size, "HDfwrite");
+
+    /* Open the old file */
+    old_fp=fopen(old_name,"rb");
+    CHECK(old_fp, NULL, "HDfopen");
+
+    /* Allocate space for the copy buffer */
+    copy_buf=malloc(MISC13_COPY_BUF_SIZE);
+    CHECK(copy_buf, NULL, "HDmalloc");
+
+    /* Copy data from the old file to the new file */
+    while((read_in=fread(copy_buf,1,MISC13_COPY_BUF_SIZE,old_fp))>0) {
+        /* Write the data to the new file */
+        written=fwrite(copy_buf,1,read_in,new_fp);
+        VERIFY(written, read_in, "HDfwrite");
+    } /* end while */
+
+    /* Close the old file */
+    ret=HDfclose(old_fp);
+    VERIFY(ret, 0, "HDfclose");
+
+    /* Close the new file */
+    ret=fclose(new_fp);
+    VERIFY(ret, 0, "HDfclose");
+
+    /* Free the copy buffer */
+    free(copy_buf);
+
+    /* Free the user block */
+    free(user_block);
+}
+
+static void
+verify_file(const char *name, hsize_t blk_size, unsigned check_new_data)
+{
+    hid_t fid;          /* File ID */
+    hid_t gid,gid2;     /* Group IDs */
+    hid_t tid;          /* Datatype ID */
+    hid_t fcpl;         /* File creation property list ID */
+    hsize_t userblock;  /* Userblock size retrieved from FCPL */
+    herr_t ret;         /* Generic return value */
+
+    /* Open the file */
+    fid=H5Fopen(name, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fopen");
+
+    /* Get the file's FCPL */
+    fcpl=H5Fget_create_plist(fid);
+    CHECK(fcpl, FAIL, "H5Fget_create_plist");
+
+    /* Get the user block size for the file */
+    ret=H5Pget_userblock(fcpl,&userblock);
+    CHECK(ret, FAIL, "H5Pget_userblock");
+
+    /* Check the userblock size */
+    VERIFY(userblock, blk_size, "H5Pget_userblock");
+
+    /* Close the FCPL */
+    ret = H5Pclose(fcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Verify the contiguous dataset in the root group */
+    verify_dataset(fid,MISC13_DSET1_NAME);
+
+    /* Verify the chunked dataset in the root group */
+    verify_dataset(fid,MISC13_DSET2_NAME);
+
+    /* Verify the "new" contiguous dataset in the root group, if asked */
+    if(check_new_data)
+        verify_dataset(fid,MISC13_DSET3_NAME);
+
+    /* Open the named datatype in the root group */
+    tid = H5Topen(fid, MISC13_DTYPE_NAME);
+    CHECK(tid, FAIL, "H5Topen");
+
+    /* Verify the type is correct */
+    VERIFY(H5Tequal(tid,H5T_NATIVE_INT), TRUE, "H5Tequal");
+
+    /* Close named datatype */
+    ret=H5Tclose(tid);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Open the first group */
+    gid = H5Gopen(fid, MISC13_GROUP1_NAME);
+    CHECK(gid, FAIL, "H5Gopen");
+
+    /* Verify the contiguous dataset in the first group */
+    verify_dataset(gid,MISC13_DSET1_NAME);
+
+    /* Verify the chunked dataset in the first group */
+    verify_dataset(gid,MISC13_DSET2_NAME);
+
+    /* Open the named datatype in the first group */
+    tid = H5Topen(gid,MISC13_DTYPE_NAME);
+    CHECK(tid, FAIL, "H5Topen");
+
+    /* Verify the type is correct */
+    VERIFY(H5Tequal(tid,H5T_NATIVE_INT), TRUE, "H5Tequal");
+
+    /* Close named datatype */
+    ret=H5Tclose(tid);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Open the second group */
+    gid2 = H5Gopen(gid, MISC13_GROUP2_NAME);
+    CHECK(gid2, FAIL, "H5Gopen");
+
+    /* Close the second group */
+    ret = H5Gclose(gid2);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Close the first group */
+    ret = H5Gclose(gid);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Close the file */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+}
+
+static void
+add_to_new_file(const char *name)
+{
+    hid_t fid;          /* File ID */
+    herr_t ret;         /* Generic return value */
+
+    /* Open the file */
+    fid=H5Fopen(name, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fopen");
+
+    /* Create new contiguous dataset in root group */
+    create_dataset(fid, MISC13_DSET3_NAME, H5P_DEFAULT);
+
+    /* Close the file */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+}
+
+/****************************************************************
+**
+**  test_misc13(): Test that file contents can be "slid down" by
+**      inserting a user block in front of an existing file.
+**
+****************************************************************/
+static void
+test_misc13(void)
+{
+    /* Initialize data to write */
+    init_data();
+
+    /* Create first file, with no user block */
+    create_hdf_file(MISC13_FILE_1);
+
+    /* Verify file contents are correct */
+    verify_file(MISC13_FILE_1,(hsize_t)0,0);
+
+    /* Create a new file by inserting a user block in front of the first file */
+    insert_user_block(MISC13_FILE_1,MISC13_FILE_2,"Test String",MISC13_USERBLOCK_SIZE);
+
+    /* Verify file contents are still correct */
+    verify_file(MISC13_FILE_2,(hsize_t)MISC13_USERBLOCK_SIZE,0);
+
+    /* Make certain we can modify the new file */
+    add_to_new_file(MISC13_FILE_2);
+
+    /* Verify file contents are still correct */
+    verify_file(MISC13_FILE_2,(hsize_t)MISC13_USERBLOCK_SIZE,1);
+} /* end test_misc13() */
+
+/****************************************************************
+**
+**  test_misc14(): Test that file contents can be "slid down" by
+**      inserting a user block in front of an existing file.
+**
+****************************************************************/
+static void
+test_misc14(void)
+{
+    hid_t file_id;              /* File ID */
+    hid_t fapl;                 /* File access property list ID */
+    hid_t DataSpace;            /* Dataspace ID */
+    hid_t Dataset1;             /* Dataset ID #1 */
+    hid_t Dataset2;             /* Dataset ID #2 */
+    hid_t Dataset3;             /* Dataset ID #3 */
+    double data1 = 5.0;         /* Data to write for dataset #1 */
+    double data2 = 10.0;        /* Data to write for dataset #2 */
+    double data3 = 15.0;        /* Data to write for dataset #3 */
+    double rdata;               /* Data read in */
+    herr_t ret;                 /* Generic return value */
+
+    /* Test creating two datasets and deleting the second */
+
+    /* Increase the metadata block size */
+    /* (This makes certain that all the data blocks are allocated together) */
+    fapl=H5Pcreate(H5P_FILE_ACCESS);
+    CHECK(fapl, FAIL, "H5Pcreate");
+
+    ret=H5Pset_meta_block_size(fapl,(hsize_t)MISC14_METADATA_SIZE);
+    CHECK(ret, FAIL, "H5Pset_meta_block_size");
+
+    /* Create dataspace to use */
+    DataSpace = H5Screate(H5S_SCALAR);
+    CHECK(DataSpace, FAIL, "H5Screate");
+
+    /* Open the file */
+    file_id = H5Fcreate(MISC14_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+    CHECK(file_id, FAIL, "H5Fcreate");
+
+    /* Create first dataset & write data */
+    Dataset1 = H5Dcreate(file_id, MISC14_DSET1_NAME, H5T_NATIVE_DOUBLE, DataSpace, H5P_DEFAULT);
+    CHECK(Dataset1, FAIL, "H5Dcreate");
+
+    ret = H5Dwrite(Dataset1, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &data1);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Create second dataset (to be unlinked).  */
+    Dataset2 = H5Dcreate(file_id, MISC14_DSET2_NAME, H5T_NATIVE_DOUBLE, DataSpace, H5P_DEFAULT);
+    CHECK(Dataset2, FAIL, "H5Dcreate");
+
+    ret = H5Dwrite(Dataset2, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &data2);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Check data from first dataset */
+    ret = H5Dread(Dataset1, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdata);
+    CHECK(ret, FAIL, "H5Dread");
+    if(rdata!=data1)
+        TestErrPrintf("Error on line %d: data1!=rdata\n",__LINE__);
+
+    /* Unlink second dataset */
+    ret = H5Gunlink(file_id, MISC14_DSET2_NAME);
+    CHECK(ret, FAIL, "H5Gunlink");
+
+    /* Close second dataset */
+    ret = H5Dclose(Dataset2);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Verify the data from dataset #1 */
+    ret = H5Dread(Dataset1, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdata);
+    CHECK(ret, FAIL, "H5Dread");
+    if(rdata!=data1)
+        TestErrPrintf("Error on line %d: data1!=rdata\n",__LINE__);
+
+    /* Close first dataset */
+    ret = H5Dclose(Dataset1);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close the file */
+    ret = H5Fclose (file_id);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Test creating two datasets and deleting the first */
+
+    /* Open the file */
+    file_id = H5Fcreate(MISC14_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+    CHECK(file_id, FAIL, "H5Fcreate");
+
+    /* Create first dataset & write data */
+    Dataset1 = H5Dcreate(file_id, MISC14_DSET1_NAME, H5T_NATIVE_DOUBLE, DataSpace, H5P_DEFAULT);
+    CHECK(Dataset1, FAIL, "H5Dcreate");
+
+    ret = H5Dwrite(Dataset1, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &data1);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Create second dataset  */
+    Dataset2 = H5Dcreate(file_id, MISC14_DSET2_NAME, H5T_NATIVE_DOUBLE, DataSpace, H5P_DEFAULT);
+    CHECK(Dataset2, FAIL, "H5Dcreate");
+
+    ret = H5Dwrite(Dataset2, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &data2);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Check data from second dataset */
+    ret = H5Dread(Dataset2, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdata);
+    CHECK(ret, FAIL, "H5Dread");
+    if(rdata!=data2)
+        TestErrPrintf("Error on line %d: data2!=rdata\n",__LINE__);
+
+    /* Unlink first dataset */
+    ret = H5Gunlink(file_id, MISC14_DSET1_NAME);
+    CHECK(ret, FAIL, "H5Gunlink");
+
+    /* Close first dataset */
+    ret = H5Dclose(Dataset1);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Verify the data from dataset #2 */
+    ret = H5Dread(Dataset2, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdata);
+    CHECK(ret, FAIL, "H5Dread");
+    if(rdata!=data2)
+        TestErrPrintf("Error on line %d: data2!=rdata\n",__LINE__);
+
+    /* Close second dataset */
+    ret = H5Dclose(Dataset2);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close the file */
+    ret = H5Fclose (file_id);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Test creating three datasets and deleting the second */
+
+    /* Open the file */
+    file_id = H5Fcreate(MISC14_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+    CHECK(file_id, FAIL, "H5Fcreate");
+
+    /* Create first dataset & write data */
+    Dataset1 = H5Dcreate(file_id, MISC14_DSET1_NAME, H5T_NATIVE_DOUBLE, DataSpace, H5P_DEFAULT);
+    CHECK(Dataset1, FAIL, "H5Dcreate");
+
+    ret = H5Dwrite(Dataset1, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &data1);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Create second dataset */
+    Dataset2 = H5Dcreate(file_id, MISC14_DSET2_NAME, H5T_NATIVE_DOUBLE, DataSpace, H5P_DEFAULT);
+    CHECK(Dataset2, FAIL, "H5Dcreate");
+
+    ret = H5Dwrite(Dataset2, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &data2);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Create third dataset */
+    Dataset3 = H5Dcreate(file_id, MISC14_DSET3_NAME, H5T_NATIVE_DOUBLE, DataSpace, H5P_DEFAULT);
+    CHECK(Dataset2, FAIL, "H5Dcreate");
+
+    ret = H5Dwrite(Dataset3, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &data3);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Check data from first dataset */
+    ret = H5Dread(Dataset1, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdata);
+    CHECK(ret, FAIL, "H5Dread");
+    if(rdata!=data1)
+        TestErrPrintf("Error on line %d: data1!=rdata\n",__LINE__);
+
+    /* Check data from third dataset */
+    ret = H5Dread(Dataset3, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdata);
+    CHECK(ret, FAIL, "H5Dread");
+    if(rdata!=data3)
+        TestErrPrintf("Error on line %d: data3!=rdata\n",__LINE__);
+
+    /* Unlink second dataset */
+    ret = H5Gunlink(file_id, MISC14_DSET2_NAME);
+    CHECK(ret, FAIL, "H5Gunlink");
+
+    /* Close second dataset */
+    ret = H5Dclose(Dataset2);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Verify the data from dataset #1 */
+    ret = H5Dread(Dataset1, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdata);
+    CHECK(ret, FAIL, "H5Dread");
+    if(rdata!=data1)
+        TestErrPrintf("Error on line %d: data1!=rdata\n",__LINE__);
+
+    /* Verify the data from dataset #3 */
+    ret = H5Dread(Dataset3, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rdata);
+    CHECK(ret, FAIL, "H5Dread");
+    if(rdata!=data3)
+        TestErrPrintf("Error on line %d: data3!=rdata\n",__LINE__);
+
+    /* Close first dataset */
+    ret = H5Dclose(Dataset1);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close third dataset */
+    ret = H5Dclose(Dataset3);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close the file */
+    ret = H5Fclose (file_id);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Close shared objects (dataspace & fapl) */
+    ret = H5Sclose (DataSpace);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Pclose (fapl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+} /* end test_misc14() */
+
+/****************************************************************
+**
+**  test_misc15(): Test that checking a file's access property list
+**      more than once correctly increments internal reference counts.
+**
+****************************************************************/
+static void
+test_misc15(void)
+{
+    hid_t file;         /* File ID */
+    hid_t fapl;         /* File access property list */
+    herr_t ret;         /* Generic return value */
+
+    /* Create the file & get it's FAPL */
+    file = H5Fcreate(MISC15_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    fapl = H5Fget_access_plist(file);
+    CHECK(fapl, FAIL, "H5Fget_access_plist");
+
+    ret = H5Pclose(fapl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Open the file & get it's FAPL again */
+    file = H5Fopen(MISC15_FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fopen");
+
+    fapl = H5Fget_access_plist(file);
+    CHECK(fapl, FAIL, "H5Fget_access_plist");
+
+    ret = H5Pclose(fapl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Verify that the file is still OK */
+    ret = H5Fis_hdf5(MISC15_FILE);
+    CHECK(ret, FAIL, "H5Fis_hdf5");
+
+    file = H5Fopen(MISC15_FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fopen");
+
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* end test_misc15() */
+
+/****************************************************************
+**
+**  test_misc16(): Test array of NULL-terminated
+**  fixed-length string.  It creates a dataset of fixed-length
+**  strings.  Each string is MISC16_STR_SIZE long.  There are
+**  totally MISC16_SPACE_DIM by MISC16_SPACE_RANK strings.
+**
+****************************************************************/
+static void
+test_misc16(void)
+{
+    hid_t file;         /* File ID */
+    herr_t ret;         /* Generic return value */
+    const char wdata[MISC16_SPACE_DIM][MISC16_STR_SIZE] =
+                        {"1234567", "1234567\0", "12345678", {NULL}};
+    char rdata[MISC16_SPACE_DIM][MISC16_STR_SIZE];  /* Information read in */
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid;       /* Dataspace ID			*/
+    hid_t		tid;       /* Datatype ID			*/
+    hsize_t		dims[] = {MISC16_SPACE_DIM};
+    int                 i;
+
+    /* Create the file */
+    file = H5Fcreate(MISC16_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid = H5Screate_simple(MISC16_SPACE_RANK, dims, NULL);
+    CHECK(sid, FAIL, "H5Screate_simple");
+
+    /* Create a datatype to refer to */
+    tid = H5Tcopy (H5T_C_S1);
+    CHECK(tid, FAIL, "H5Tcopy");
+
+    ret = H5Tset_size (tid,MISC16_STR_SIZE);
+    CHECK(ret, FAIL, "H5Tset_size");
+
+    /*ret = H5Tset_strpad (tid,H5T_STR_NULLPAD);
+    CHECK(ret, FAIL, "H5Tset_strpad");*/
+
+    /* Create a dataset */
+    dataset=H5Dcreate(file,MISC16_DSET_NAME,tid,sid,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<MISC16_SPACE_DIM; i++) {
+        if(HDstrlen(wdata[i])!=strlen(rdata[i])) {
+            TestErrPrintf("VL data length don't match!, strlen(wdata[%d])=%d, strlen(rdata[%d])=%d\n",(int)i,(int)strlen(wdata[i]),(int)i,(int)strlen(rdata[i]));
+            continue;
+        } /* end if */
+        if( HDstrcmp(wdata[i],rdata[i]) != 0 ) {
+            TestErrPrintf("VL data values don't match!, wdata[%d]=%s, rdata[%d]=%s\n",(int)i,wdata[i],(int)i,rdata[i]);
+            continue;
+        } /* end if */
+    } /* end for */
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* end test_misc16() */
+
+/****************************************************************
+**
+**  test_misc17(): Test array of characters.  It creates a dataset
+**  of ASCII characters, with dimensionality of MISC17_SPACE_DIM1
+**  by MISC17_SPACE_DIM2.
+**
+****************************************************************/
+static void
+test_misc17(void)
+{
+    hid_t file;         /* File ID */
+    herr_t ret;         /* Generic return value */
+    const char wdata[MISC17_SPACE_DIM1][MISC17_SPACE_DIM2] =
+                        {"1234567", "1234567\0", "12345678", {NULL}};
+    char rdata[MISC17_SPACE_DIM1][MISC17_SPACE_DIM2];  /* Information read in */
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid;       /* Dataspace ID			*/
+    hid_t		tid;       /* Datatype ID			*/
+    hsize_t		dims[] = {MISC17_SPACE_DIM1, MISC17_SPACE_DIM2};
+    int                 i;
+
+    /* Create the file */
+    file = H5Fcreate(MISC17_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid = H5Screate_simple(MISC17_SPACE_RANK, dims, NULL);
+    CHECK(sid, FAIL, "H5Screate_simple");
+
+    /* Create a datatype to refer to */
+    tid = H5Tcopy (H5T_C_S1);
+    CHECK(tid, FAIL, "H5Tcopy");
+
+    ret = H5Tset_strpad (tid,H5T_STR_NULLPAD);
+    CHECK(ret, FAIL, "H5Tset_strpad");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(file,MISC17_DSET_NAME,tid,sid,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data in the way of strings. */
+    for(i=0; i<MISC17_SPACE_DIM1; i++) {
+        if(HDstrlen(wdata[i])!=strlen(rdata[i])) {
+            TestErrPrintf("VL data length don't match!, strlen(wdata[%d])=%d, strlen(rdata[%d])=%d\n",(int)i,(int)strlen(wdata[i]),(int)i,(int)strlen(rdata[i]));
+            continue;
+        } /* end if */
+        if( HDstrcmp(wdata[i],rdata[i]) != 0 ) {
+            TestErrPrintf("VL data values don't match!, wdata[%d]=%s, rdata[%d]=%s\n",(int)i,wdata[i],(int)i,rdata[i]);
+            continue;
+        } /* end if */
+    } /* end for */
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* end test_misc17() */
+
+/****************************************************************
+**
+**  test_misc18(): Test new object header information in H5G_stat_t
+**  struct.
+**
+****************************************************************/
+static void
+test_misc18(void)
+{
+    hid_t fid;          /* File ID */
+    hid_t sid;          /* 'Space ID */
+    hid_t did1, did2;   /* Dataset IDs */
+    hid_t aid;          /* Attribute ID */
+    H5G_stat_t statbuf; /* Information about object */
+    char attr_name[32]; /* Attribute name buffer */
+    unsigned u;         /* Local index variable */
+    herr_t ret;         /* Generic return value */
+
+    /* Create the file */
+    fid = H5Fcreate(MISC18_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create dataspace for attributes */
+    sid = H5Screate(H5S_SCALAR);
+    CHECK(sid, FAIL, "H5Screate");
+
+    /* Create first dataset */
+    did1 = H5Dcreate(fid, MISC18_DSET1_NAME, H5T_STD_U32LE, sid, H5P_DEFAULT);
+    CHECK(did1, FAIL, "H5Dcreate");
+
+    /* Get object information */
+    ret = H5Gget_objinfo(fid,MISC18_DSET1_NAME,0,&statbuf);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.nmesgs, 6, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.nchunks, 1, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.size, 272, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.free, 152, "H5Gget_objinfo");
+
+    /* Create second dataset */
+    did2 = H5Dcreate(fid, MISC18_DSET2_NAME, H5T_STD_U32LE, sid, H5P_DEFAULT);
+    CHECK(did2, FAIL, "H5Screate_simple");
+
+    /* Get object information */
+    ret = H5Gget_objinfo(fid,MISC18_DSET2_NAME,0,&statbuf);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.nmesgs, 6, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.nchunks, 1, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.size, 272, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.free, 152, "H5Gget_objinfo");
+
+    /* Loop creating attributes on each dataset, flushing them to the file each time */
+    for(u=0; u<10; u++) {
+        /* Set up attribute name */
+        sprintf(attr_name,"Attr %u",u);
+
+        /* Create & close attribute on first dataset */
+        aid = H5Acreate(did1, attr_name, H5T_STD_U32LE, sid, H5P_DEFAULT);
+        CHECK(aid, FAIL, "H5Gget_objinfo");
+
+        ret = H5Aclose(aid);
+        CHECK(ret, FAIL, "HAclose");
+
+        /* Create & close attribute on second dataset */
+        aid = H5Acreate(did2, attr_name, H5T_STD_U32LE, sid, H5P_DEFAULT);
+        CHECK(aid, FAIL, "H5Gget_objinfo");
+
+        ret = H5Aclose(aid);
+        CHECK(ret, FAIL, "HAclose");
+
+        /* Flush file, to 'fix' size of dataset object headers */
+        ret = H5Fflush(fid,H5F_SCOPE_GLOBAL);
+        CHECK(ret, FAIL, "HAclose");
+    } /* end for */
+
+    /* Get object information for dataset #1 now */
+    ret = H5Gget_objinfo(fid,MISC18_DSET1_NAME,0,&statbuf);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.nmesgs, 24, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.nchunks, 9, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.size, 888, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.free, 16, "H5Gget_objinfo");
+
+    /* Get object information for dataset #2 now */
+    ret = H5Gget_objinfo(fid,MISC18_DSET2_NAME,0,&statbuf);
+    CHECK(ret, FAIL, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.nmesgs, 24, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.nchunks, 9, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.size, 888, "H5Gget_objinfo");
+    VERIFY(statbuf.ohdr.free, 16, "H5Gget_objinfo");
+
+    /* Close second dataset */
+    ret = H5Dclose(did2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close first dataset */
+    ret = H5Dclose(did1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* end test_misc18() */
+
+/****************************************************************
+**
+**  test_misc19(): Test incrementing & decrementing ref count on IDs
+**
+****************************************************************/
+static void
+test_misc19(void)
+{
+    hid_t fid;          /* File ID */
+    hid_t sid;          /* 'Space ID */
+    hid_t did;          /* Dataset ID */
+    hid_t tid;          /* 'Type ID */
+    hid_t aid;          /* Attribute ID */
+    hid_t plid;         /* Property List ID */
+    hid_t pcid;         /* Property Class ID */
+    hid_t gid;          /* Group ID */
+    int rc;             /* Reference count */
+    herr_t ret;         /* Generic return value */
+
+/* Check H5I operations on files */
+
+    /* Create the file */
+    fid = H5Fcreate(MISC19_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(fid);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Inc the reference count */
+    rc = H5Iinc_ref(fid);
+    VERIFY(rc, 2, "H5Iinc_ref");
+
+    /* Close the file normally */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(fid);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Close the file by decrementing the reference count */
+    rc = H5Idec_ref(fid);
+    VERIFY(rc, 0, "H5Idec_ref");
+
+    /* Try closing the file again (should fail) */
+    H5E_BEGIN_TRY {
+        ret = H5Fclose(fid);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Fclose");
+
+/* Check H5I operations on property lists */
+
+    /* Create the property list */
+    plid = H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(plid, FAIL, "H5Pcreate");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(plid);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Inc the reference count */
+    rc = H5Iinc_ref(plid);
+    VERIFY(rc, 2, "H5Iinc_ref");
+
+    /* Close the property list normally */
+    ret = H5Pclose(plid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(plid);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Close the property list by decrementing the reference count */
+    rc = H5Idec_ref(plid);
+    VERIFY(rc, 0, "H5Idec_ref");
+
+    /* Try closing the property list again (should fail) */
+    H5E_BEGIN_TRY {
+        ret = H5Pclose(plid);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Pclose");
+
+/* Check H5I operations on property classes */
+
+    /* Create a property class */
+    pcid = H5Pcreate_class(H5P_DATASET_CREATE,"foo",NULL,NULL,NULL,NULL,NULL,NULL);
+    CHECK(pcid, FAIL, "H5Pcreate_class");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(pcid);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Inc the reference count */
+    rc = H5Iinc_ref(pcid);
+    VERIFY(rc, 2, "H5Iinc_ref");
+
+    /* Close the property class normally */
+    ret = H5Pclose_class(pcid);
+    CHECK(ret, FAIL, "H5Pclose_class");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(pcid);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Close the property class by decrementing the reference count */
+    rc = H5Idec_ref(pcid);
+    VERIFY(rc, 0, "H5Idec_ref");
+
+    /* Try closing the property class again (should fail) */
+    H5E_BEGIN_TRY {
+        ret = H5Pclose_class(pcid);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Pclose_class");
+
+/* Check H5I operations on datatypes */
+
+    /* Create a datatype */
+    tid = H5Tcreate(H5T_OPAQUE,16);
+    CHECK(tid, FAIL, "H5Tcreate");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(tid);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Inc the reference count */
+    rc = H5Iinc_ref(tid);
+    VERIFY(rc, 2, "H5Iinc_ref");
+
+    /* Close the datatype normally */
+    ret = H5Tclose(tid);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(tid);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Close the datatype by decrementing the reference count */
+    rc = H5Idec_ref(tid);
+    VERIFY(rc, 0, "H5Idec_ref");
+
+    /* Try closing the datatype again (should fail) */
+    H5E_BEGIN_TRY {
+        ret = H5Tclose(tid);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Tclose");
+
+/* Check H5I operations on dataspaces */
+
+    /* Create a dataspace */
+    sid = H5Screate(H5S_SCALAR);
+    CHECK(sid, FAIL, "H5Screate");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(sid);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Inc the reference count */
+    rc = H5Iinc_ref(sid);
+    VERIFY(rc, 2, "H5Iinc_ref");
+
+    /* Close the dataspace normally */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(sid);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Close the dataspace by decrementing the reference count */
+    rc = H5Idec_ref(sid);
+    VERIFY(rc, 0, "H5Idec_ref");
+
+    /* Try closing the dataspace again (should fail) */
+    H5E_BEGIN_TRY {
+        ret = H5Sclose(sid);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Sclose");
+
+/* Check H5I operations on datasets */
+
+    /* Create a file */
+    fid = H5Fcreate(MISC19_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create a dataspace */
+    sid = H5Screate(H5S_SCALAR);
+    CHECK(sid, FAIL, "H5Screate");
+
+    /* Create a dataset */
+    did = H5Dcreate(fid,MISC19_DSET_NAME,H5T_NATIVE_INT,sid,H5P_DEFAULT);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(did);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Inc the reference count */
+    rc = H5Iinc_ref(did);
+    VERIFY(rc, 2, "H5Iinc_ref");
+
+    /* Close the dataset normally */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(did);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Close the dataset by decrementing the reference count */
+    rc = H5Idec_ref(did);
+    VERIFY(rc, 0, "H5Idec_ref");
+
+    /* Try closing the dataset again (should fail) */
+    H5E_BEGIN_TRY {
+        ret = H5Dclose(did);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Dclose");
+
+    /* Close the dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close the file */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+/* Check H5I operations on attributes */
+
+    /* Create a file */
+    fid = H5Fcreate(MISC19_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Open the root group */
+    gid = H5Gopen(fid,"/");
+    CHECK(gid, FAIL, "H5Gopen");
+
+    /* Create a dataspace */
+    sid = H5Screate(H5S_SCALAR);
+    CHECK(sid, FAIL, "H5Screate");
+
+    /* Create an attribute */
+    aid = H5Acreate(gid,MISC19_ATTR_NAME,H5T_NATIVE_INT,sid,H5P_DEFAULT);
+    CHECK(aid, FAIL, "H5Acreate");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(aid);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Inc the reference count */
+    rc = H5Iinc_ref(aid);
+    VERIFY(rc, 2, "H5Iinc_ref");
+
+    /* Close the dataset normally */
+    ret = H5Aclose(aid);
+    CHECK(ret, FAIL, "H5Aclose");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(aid);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Close the attribute by decrementing the reference count */
+    rc = H5Idec_ref(aid);
+    VERIFY(rc, 0, "H5Idec_ref");
+
+    /* Try closing the attribute again (should fail) */
+    H5E_BEGIN_TRY {
+        ret = H5Aclose(aid);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Aclose");
+
+    /* Close the root group */
+    ret = H5Gclose(gid);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Close the dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close the file */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+/* Check H5I operations on groups */
+
+    /* Create a file */
+    fid = H5Fcreate(MISC19_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create a group */
+    gid = H5Gcreate(fid,MISC19_GROUP_NAME,0);
+    CHECK(gid, FAIL, "H5Gcreate");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(gid);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Inc the reference count */
+    rc = H5Iinc_ref(gid);
+    VERIFY(rc, 2, "H5Iinc_ref");
+
+    /* Close the group normally */
+    ret = H5Gclose(gid);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Check the reference count */
+    rc = H5Iget_ref(gid);
+    VERIFY(rc, 1, "H5Iget_ref");
+
+    /* Close the group by decrementing the reference count */
+    rc = H5Idec_ref(gid);
+    VERIFY(rc, 0, "H5Idec_ref");
+
+    /* Try closing the group again (should fail) */
+    H5E_BEGIN_TRY {
+        ret = H5Gclose(gid);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Gclose");
+
+    /* Close the file */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_misc19() */
+
+/****************************************************************
+**
+**  test_misc20(): Test problems with version 2 of storage layout
+**                      message truncating dimensions
+**
+****************************************************************/
+static void
+test_misc20(void)
+{
+    hid_t fid;          /* File ID */
+    hid_t sid;          /* 'Space ID */
+    hid_t did;          /* Dataset ID */
+    hid_t dcpl;         /* Dataset creation property list ID */
+    int rank=MISC20_SPACE_RANK;    /* Rank of dataspace */
+    hsize_t big_dims[MISC20_SPACE_RANK]={MISC20_SPACE_DIM0,MISC20_SPACE_DIM1};      /* Large dimensions */
+    hsize_t small_dims[MISC20_SPACE_RANK]={MISC20_SPACE2_DIM0,MISC20_SPACE2_DIM1};      /* Small dimensions */
+    unsigned version;   /* Version of storage layout info */
+    hsize_t contig_size;        /* Size of contiguous storage size from layout into */
+    char testfile[512]="";          /* Character buffer for corrected test file name */
+    char *srcdir = HDgetenv("srcdir");    /* Pointer to the directory the source code is located within */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing large dimension truncation fix\n"));
+
+    /* Verify that chunks with dimensions that are too large get rejected */
+
+    /* Create a dataset creation property list */
+    dcpl = H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(dcpl, FAIL, "H5Pcreate");
+
+    /* Use chunked storage for this dataset */
+    ret = H5Pset_chunk(dcpl,rank,big_dims);
+    VERIFY(ret, FAIL, "H5Pset_chunk");
+
+    /* Verify that the storage for the dataset is the correct size and hasn't
+     * been truncated.
+     */
+
+    /* Create the file */
+    fid = H5Fcreate(MISC20_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create dataspace with _really_ big dimensions */
+    sid = H5Screate_simple(rank,big_dims,NULL);
+    CHECK(sid, FAIL, "H5Screate_simple");
+
+    /* Make certain that the dataset's storage doesn't get allocated :-) */
+    ret = H5Pset_alloc_time(dcpl,H5D_ALLOC_TIME_LATE);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Create dataset with big dataspace */
+    did = H5Dcreate(fid, MISC20_DSET_NAME, H5T_NATIVE_INT, sid, dcpl);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Close datasset */
+    ret=H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close dataspace */
+    ret=H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace with small dimensions */
+    sid = H5Screate_simple(rank,small_dims,NULL);
+    CHECK(sid, FAIL, "H5Screate_simple");
+
+    /* Create dataset with big dataspace */
+    did = H5Dcreate(fid, MISC20_DSET2_NAME, H5T_NATIVE_INT, sid, dcpl);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Close datasset */
+    ret=H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close dataspace */
+    ret=H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset creation property list */
+    ret=H5Pclose(dcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Re-open the file */
+    fid = H5Fopen(MISC20_FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fopen");
+
+    /* Open dataset with big dimensions */
+    did = H5Dopen(fid, MISC20_DSET_NAME);
+    CHECK(did, FAIL, "H5Dopen");
+
+    /* Get the layout version */
+    ret = H5D_layout_version_test(did,&version);
+    CHECK(ret, FAIL, "H5D_layout_version_test");
+    VERIFY(version,3,"H5D_layout_version_test");
+
+    /* Get the layout contiguous storage size */
+    ret = H5D_layout_contig_size_test(did,&contig_size);
+    CHECK(ret, FAIL, "H5D_layout_contig_size_test");
+    VERIFY(contig_size, MISC20_SPACE_DIM0*MISC20_SPACE_DIM1*H5Tget_size(H5T_NATIVE_INT), "H5D_layout_contig_size_test");
+
+    /* Close datasset */
+    ret=H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Open dataset with small dimensions */
+    did = H5Dopen(fid, MISC20_DSET2_NAME);
+    CHECK(did, FAIL, "H5Dopen");
+
+    /* Get the layout version */
+    ret = H5D_layout_version_test(did,&version);
+    CHECK(ret, FAIL, "H5D_layout_version_test");
+    VERIFY(version,2,"H5D_layout_version_test");
+
+    /* Get the layout contiguous storage size */
+    ret = H5D_layout_contig_size_test(did,&contig_size);
+    CHECK(ret, FAIL, "H5D_layout_contig_size_test");
+    VERIFY(contig_size, MISC20_SPACE2_DIM0*MISC20_SPACE2_DIM1*H5Tget_size(H5T_NATIVE_INT), "H5D_layout_contig_size_test");
+
+    /* Close datasset */
+    ret=H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Verify that the storage size is computed correctly for older versions of layout info */
+
+    /* Generate the correct name for the test file, by prepending the source path */
+    if (srcdir && ((HDstrlen(srcdir) + HDstrlen(MISC20_FILE_OLD) + 1) < sizeof(testfile))) {
+        HDstrcpy(testfile, srcdir);
+        HDstrcat(testfile, "/");
+    }
+    HDstrcat(testfile, MISC20_FILE_OLD);
+
+    /*
+     * Open the old file and the dataset and get old settings.
+     */
+    fid =    H5Fopen(testfile, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fopen");
+
+    /* Open dataset with small dimensions */
+    did = H5Dopen(fid, MISC20_DSET_NAME);
+    CHECK(did, FAIL, "H5Dopen");
+
+    /* Get the layout version */
+    ret = H5D_layout_version_test(did,&version);
+    CHECK(ret, FAIL, "H5D_layout_version_test");
+    VERIFY(version,2,"H5D_layout_version_test");
+
+    /* Get the layout contiguous storage size */
+    ret = H5D_layout_contig_size_test(did,&contig_size);
+    CHECK(ret, FAIL, "H5D_layout_contig_size_test");
+    VERIFY(contig_size, MISC20_SPACE_DIM0*MISC20_SPACE_DIM1*H5Tget_size(H5T_STD_I32LE), "H5D_layout_contig_size_test");
+
+    /* Close datasset */
+    ret=H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_misc20() */
+
+/*
+   test_misc21 and test_misc22 should be executed when SZIP is present
+   and encoder is available.
+                            EIP 2004/8/04
+*/
+#if defined H5_HAVE_FILTER_SZIP
+
+/****************************************************************
+**
+**  test_misc21(): Test that late allocation time is treated the same
+**                      as incremental allocation time, for chunked datasets
+**                      when overwriting entire dataset where the chunks
+**                      don't exactly match the dataspace.
+**
+****************************************************************/
+static void
+test_misc21(void)
+{
+    hid_t fid, sid, dcpl, dsid;
+    char *buf;
+    hsize_t dims[2]={MISC21_SPACE_DIM0,MISC21_SPACE_DIM1},
+        chunk_size[2]={MISC21_CHUNK_DIM0,MISC21_CHUNK_DIM1};
+    herr_t ret;         /* Generic return value */
+
+    if (h5_szip_can_encode() != 1) return;
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing late allocation time w/chunks & filters\n"));
+
+    /* Allocate space for the buffer */
+    buf = (char *)HDcalloc(MISC21_SPACE_DIM0*MISC21_SPACE_DIM1,1);
+    CHECK(buf, NULL, "HDcalloc");
+
+    /* Create the file */
+    fid = H5Fcreate (MISC21_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create the DCPL */
+    dcpl = H5Pcreate (H5P_DATASET_CREATE);
+    CHECK(dcpl, FAIL, "H5Pcreate");
+
+    /* Set custom DCPL properties */
+    ret = H5Pset_chunk (dcpl, MISC21_SPACE_RANK, chunk_size);
+    CHECK(ret, FAIL, "H5Pset_chunk");
+    ret = H5Pset_szip (dcpl, H5_SZIP_NN_OPTION_MASK, 8);
+    CHECK(ret, FAIL, "H5Pset_deflate");
+    ret = H5Pset_alloc_time (dcpl, H5D_ALLOC_TIME_LATE);
+    CHECK(ret, FAIL, "H5Pset_alloc_time");
+
+    /* Create the dataspace for the dataset */
+    sid = H5Screate_simple (MISC21_SPACE_RANK, dims, NULL);
+    CHECK(ret, FAIL, "H5Screate_simple");
+
+    /* Create the dataset */
+    dsid = H5Dcreate (fid, MISC21_DSET_NAME, H5T_NATIVE_UINT8, sid, dcpl);
+    CHECK(dsid, FAIL, "H5Dwrite");
+
+    /* Write out the whole dataset */
+    ret = H5Dwrite (dsid, H5T_NATIVE_UINT8, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close everything */
+    ret = H5Dclose (dsid);
+    CHECK(ret, FAIL, "H5Dclose");
+    ret = H5Sclose (sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Pclose (dcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+    ret = H5Fclose (fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    HDfree(buf);
+} /* end test_misc21() */
+
+/****************************************************************
+**
+**  test_misc22(): Test SZIP bits-per-pixel paramter.
+**                      This should be set according to the datatype.
+**                      Tests for precision and offset combo's.
+**
+****************************************************************/
+static void
+test_misc22(void)
+{
+    hid_t fid, sid, dcpl, dsid, dcpl2;
+    char *buf;
+    hsize_t dims[2]={MISC22_SPACE_DIM0,MISC22_SPACE_DIM1},
+        chunk_size[2]={MISC22_CHUNK_DIM0,MISC22_CHUNK_DIM1};
+    herr_t ret;         /* Generic return value */
+    hid_t dtype;
+    /* should extend test to signed ints */
+    hid_t idts[4];
+/*  do the same for floats
+    hid_t fdts[2]={H5T_NATIVE_FLOAT32,
+              H5T_NATIVE_FLOAT64}
+*/
+    int prec[4] = {3,11,19,27};
+    int offsets[5] = {0,3,11,19,27};
+    int i,j,k;
+    unsigned int flags;
+    size_t cd_nelmts=32;
+    unsigned int cd_values[32];
+    int correct;
+
+    if (h5_szip_can_encode() != 1) return;
+    idts[0]=H5Tcopy(H5T_NATIVE_UINT8);
+    idts[1]=H5Tcopy(H5T_NATIVE_UINT16);
+    idts[2]=H5Tcopy(H5T_NATIVE_UINT32);
+    idts[3]=H5Tcopy(H5T_NATIVE_UINT64);
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing datatypes with SZIP filter\n"));
+
+    /* Allocate space for the buffer */
+    buf = (char *)HDcalloc(MISC22_SPACE_DIM0*MISC22_SPACE_DIM1,8);
+    CHECK(buf, NULL, "HDcalloc");
+
+    /* Create the file */
+    fid = H5Fcreate (MISC22_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create the dataspace for the dataset */
+    sid = H5Screate_simple (MISC22_SPACE_RANK, dims, NULL);
+    CHECK(sid, FAIL, "H5Screate_simple");
+
+    for (i = 0; i < 4; i++) {
+        for (j = 0; j < 4; j++) {
+            if (prec[j] > (H5Tget_size(idts[i])*8)) continue; /* skip irrelevant combination */
+            for (k = 0; k < 5; k++) {
+                if (offsets[k] > (H5Tget_size(idts[i])*8)) continue; /* skip irrelevant combinations */
+                if ((prec[j]+offsets[k]) > (H5Tget_size(idts[i])*8)) continue;
+
+                MESSAGE(5, ("  Testing datatypes size=%d precision=%d offset=%d\n",H5Tget_size(idts[i]),prec[j],offsets[k]));
+
+                /* Create the DCPL */
+                dcpl = H5Pcreate (H5P_DATASET_CREATE);
+                CHECK(dcpl, FAIL, "H5Pcreate");
+
+                /* Set DCPL properties */
+                ret = H5Pset_chunk (dcpl, MISC22_SPACE_RANK, chunk_size);
+                CHECK(ret, FAIL, "H5Pset_chunk");
+                /* Set custom DCPL properties */
+                ret = H5Pset_szip (dcpl, H5_SZIP_NN_OPTION_MASK, 32);  /* vary the PPB */
+                CHECK(ret, FAIL, "H5Pset_szip");
+
+                /* set up the datatype according to the loop */
+                dtype = H5Tcopy(idts[i]);
+                CHECK(dtype, FAIL, "H5Tcopy");
+                ret = H5Tset_precision(dtype,prec[j]);
+                CHECK(ret, FAIL, "H5Tset_precision");
+                ret = H5Tset_offset(dtype,offsets[k]);
+                CHECK(ret, FAIL, "H5Tset_precision");
+
+                /* compute the correct PPB that should be set by SZIP */
+                if (offsets[k] == 0) {
+            	    correct=prec[j];
+                } else {
+                    correct=H5Tget_size(idts[i])*8;
+                }
+                if (correct > 24) {
+            	    if (correct <= 32) correct=32;
+            	    else if (correct <= 64) correct=64;
+                }
+
+                /* Create the dataset */
+                dsid = H5Dcreate (fid, MISC22_DSET_NAME, dtype, sid, dcpl);
+                CHECK(dsid, FAIL, "H5Dwrite");
+
+                /* Write out the whole dataset */
+                ret = H5Dwrite (dsid, dtype, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
+                CHECK(ret, FAIL, "H5Dwrite");
+
+                /* Close everything */
+                ret = H5Dclose (dsid);
+                CHECK(ret, FAIL, "H5Dclose");
+                ret = H5Tclose (dtype);
+                CHECK(ret, FAIL, "H5Tclose");
+                ret = H5Pclose (dcpl);
+                CHECK(ret, FAIL, "H5Pclose");
+
+                dsid = H5Dopen (fid, MISC22_DSET_NAME);
+                CHECK(dsid, FAIL, "H5Topen");
+
+                dcpl2 = H5Dget_create_plist(dsid);
+                CHECK(dcpl2, FAIL, "H5Dget_create_plist");
+
+                ret= H5Pget_filter_by_id( dcpl2, H5Z_FILTER_SZIP, &flags,
+                      &cd_nelmts, cd_values, 0, NULL );
+                CHECK(ret, FAIL, "H5Pget_filter_by_id");
+
+                VERIFY(cd_values[2], correct, "SZIP filter returned value for precision");
+
+                ret = H5Dclose (dsid);
+                CHECK(ret, FAIL, "H5Dclose");
+
+                ret = H5Gunlink (fid, MISC22_DSET_NAME );
+                CHECK(ret, FAIL, "H5Dunlink");
+
+                ret = H5Pclose (dcpl2);
+                CHECK(ret, FAIL, "H5Pclose");
+            }
+        }
+    }
+    ret = H5Tclose(idts[0]);
+    CHECK(ret, FAIL, "H5Tclose");
+    ret = H5Tclose(idts[1]);
+    CHECK(ret, FAIL, "H5Tclose");
+    ret = H5Tclose(idts[2]);
+    CHECK(ret, FAIL, "H5Tclose");
+    ret = H5Tclose(idts[3]);
+    CHECK(ret, FAIL, "H5Tclose");
+    ret = H5Sclose (sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Fclose (fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    HDfree(buf);
+} /* end test_misc22() */
+#endif /* H5_HAVE_FILTER_SZIP */
+
+/****************************************************************
+**
+**  test_misc(): Main misc. test routine.
+**
+****************************************************************/
+void
+test_misc(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Miscellaneous Routines\n"));
+
+    test_misc1();       /* Test unlinking a dataset & immediately re-using name */
+    test_misc2();       /* Test storing a VL-derived datatype in two different files */
+    test_misc3();       /* Test reading from chunked dataset with non-zero fill value */
+    test_misc4();       /* Test retrieving the fileno for various objects with H5Gget_objinfo() */
+    test_misc5();       /* Test several level deep nested compound & VL datatypes */
+    test_misc6();       /* Test object header continuation code */
+    test_misc7();       /* Test for sensible datatypes stored on disk */
+    test_misc8();       /* Test storage sizes of various types of dataset storage */
+    test_misc9();       /* Test for opening (not creating) core files */
+    test_misc10();      /* Test for using dataset creation property lists from old files */
+    test_misc11();      /* Test for all properties of a file creation property list being stored */
+    test_misc12();      /* Test VL-strings in chunked datasets operating correctly */
+    test_misc13();      /* Test that a user block can be insert in front of file contents */
+    test_misc14();      /* Test that deleted dataset's data is removed from sieve buffer correctly */
+    test_misc15();      /* Test that checking a file's access property list more than once works */
+    test_misc16();      /* Test array of fixed-length string */
+    test_misc17();      /* Test array of ASCII character */
+    test_misc18();      /* Test new object header information in H5G_stat_t struct */
+    test_misc19();      /* Test incrementing & decrementing ref count on IDs */
+    test_misc20();      /* Test problems with truncated dimensions in version 2 of storage layout message */
+#if defined H5_HAVE_FILTER_SZIP
+    test_misc21();      /* Test that "late" allocation time is treated the same as "incremental", for chunked datasets w/a filters */
+    test_misc22();     /* check szip bits per pixel */
+#endif /* H5_HAVE_FILTER_SZIP */
+
+} /* test_misc() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_misc
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Albert Cheng
+ *              July 2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_misc(void)
+{
+    HDremove(MISC1_FILE);
+    HDremove(MISC2_FILE_1);
+    HDremove(MISC2_FILE_2);
+    HDremove(MISC3_FILE);
+    HDremove(MISC4_FILE_1);
+    HDremove(MISC4_FILE_2);
+    HDremove(MISC5_FILE);
+    HDremove(MISC6_FILE);
+    HDremove(MISC7_FILE);
+    HDremove(MISC8_FILE);
+    HDremove(MISC9_FILE);
+    HDremove(MISC10_FILE_NEW);
+    HDremove(MISC11_FILE);
+    HDremove(MISC12_FILE);
+    HDremove(MISC13_FILE_1);
+    HDremove(MISC13_FILE_2);
+    HDremove(MISC14_FILE);
+    HDremove(MISC15_FILE);
+    HDremove(MISC16_FILE);
+    HDremove(MISC17_FILE);
+    HDremove(MISC18_FILE);
+    HDremove(MISC19_FILE);
+    HDremove(MISC20_FILE);
+#if defined H5_HAVE_FILTER_SZIP
+    HDremove(MISC21_FILE);
+    HDremove(MISC22_FILE);
+#endif /* H5_HAVE_FILTER_SZIP */
+}
+

Added: packages/hdf5/branches/upstream/current/test/tmtimen.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/tmtimen.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/tmtimeo.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/tmtimeo.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/tnullspace.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/test/tnullspace.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/test/trefer.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/trefer.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/trefer.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1152 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/***********************************************************
+*
+* Test program:	 trefer
+*
+* Test the Reference functionality
+*
+*************************************************************/
+
+#include "testhdf5.h"
+
+#include "hdf5.h"
+
+#define FILE1   "trefer1.h5"
+#define FILE2	"trefer2.h5"
+#define FILE3	"trefer3.h5"
+
+/* 1-D dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	1
+#define SPACE1_DIM1	4
+
+/* 2-D dataset with fixed dimensions */
+#define SPACE2_NAME  "Space2"
+#define SPACE2_RANK	2
+#define SPACE2_DIM1	10
+#define SPACE2_DIM2	10
+
+/* Larger 1-D dataset with fixed dimensions */
+#define SPACE3_NAME  "Space3"
+#define SPACE3_RANK	1
+#define SPACE3_DIM1	100
+
+/* Element selection information */
+#define POINT1_NPOINTS 10
+
+/* Compound datatype */
+typedef struct s1_t {
+    unsigned int a;
+    unsigned int b;
+    float c;
+} s1_t;
+
+#define GROUPNAME       "/group"
+#define GROUPNAME2      "group2"
+#define GROUPNAME3      "group3"
+#define DSETNAME        "/dset"
+#define DSETNAME2       "dset2"
+#define NAME_SIZE       16
+
+
+/****************************************************************
+**
+**  test_reference_obj(): Test basic H5R (reference) object reference code.
+**      Tests references to various kinds of objects
+**
+****************************************************************/
+static void
+test_reference_obj(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset,	/* Dataset ID			*/
+                dset2;      /* Dereferenced dataset ID */
+    hid_t		group;      /* Group ID             */
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1;       /* Datatype ID			*/
+    hsize_t		dims1[] = {SPACE1_DIM1};
+    hobj_ref_t      *wbuf,      /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf;       /* temp. buffer read from disk */
+    unsigned      *tu32;      /* Temporary pointer to uint32 data */
+    int        i;          /* counting variables */
+    const char *write_comment="Foo!"; /* Comments for group */
+    char read_comment[10];
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Object Reference Functions\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=malloc(MAX(sizeof(unsigned),sizeof(hobj_ref_t))*SPACE1_DIM1);
+    rbuf=malloc(MAX(sizeof(unsigned),sizeof(hobj_ref_t))*SPACE1_DIM1);
+    tbuf=malloc(MAX(sizeof(unsigned),sizeof(hobj_ref_t))*SPACE1_DIM1);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a group */
+    group=H5Gcreate(fid1,"Group1",(size_t)-1);
+    CHECK(group, FAIL, "H5Gcreate");
+
+    /* Set group's comment */
+    ret=H5Gset_comment(group,".",write_comment);
+    CHECK(ret, FAIL, "H5Gset_comment");
+
+    /* Create a dataset (inside Group1) */
+    dataset=H5Dcreate(group,"Dataset1",H5T_NATIVE_UINT,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    for(tu32=(unsigned *)wbuf,i=0; i<SPACE1_DIM1; i++)
+        *tu32++=i*3;
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UINT,H5S_ALL,H5S_ALL,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Create another dataset (inside Group1) */
+    dataset=H5Dcreate(group,"Dataset2",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tcreate (H5T_COMPOUND, sizeof(s1_t));
+    CHECK(tid1, FAIL, "H5Tcreate");
+
+    /* Insert fields */
+    ret=H5Tinsert (tid1, "a", HOFFSET(s1_t,a), H5T_NATIVE_INT);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    ret=H5Tinsert (tid1, "b", HOFFSET(s1_t,b), H5T_NATIVE_INT);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    ret=H5Tinsert (tid1, "c", HOFFSET(s1_t,c), H5T_NATIVE_FLOAT);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    /* Save datatype for later */
+    ret=H5Tcommit (group, "Datatype1", tid1);
+    CHECK(ret, FAIL, "H5Tcommit");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close group */
+    ret = H5Gclose(group);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset3",H5T_STD_REF_OBJ,sid1,H5P_DEFAULT);
+    CHECK(ret, FAIL, "H5Dcreate");
+
+    /* Create reference to dataset */
+    ret = H5Rcreate(&wbuf[0],fid1,"/Group1/Dataset1",H5R_OBJECT,-1);
+    CHECK(ret, FAIL, "H5Rcreate");
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    ret = H5Rget_object_type(dataset,&wbuf[0]);
+    VERIFY(ret, H5G_DATASET, "H5Rget_object_type");
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    ret = H5Rget_obj_type(dataset,H5R_OBJECT,&wbuf[0]);
+    VERIFY(ret, H5G_DATASET, "H5Rget_obj_type");
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+    /* Create reference to dataset */
+    ret = H5Rcreate(&wbuf[1],fid1,"/Group1/Dataset2",H5R_OBJECT,-1);
+    CHECK(ret, FAIL, "H5Rcreate");
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    ret = H5Rget_object_type(dataset,&wbuf[1]);
+    VERIFY(ret, H5G_DATASET, "H5Rget_object_type");
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    ret = H5Rget_obj_type(dataset,H5R_OBJECT,&wbuf[1]);
+    VERIFY(ret, H5G_DATASET, "H5Rget_obj_type");
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+    /* Create reference to group */
+    ret = H5Rcreate(&wbuf[2],fid1,"/Group1",H5R_OBJECT,-1);
+    CHECK(ret, FAIL, "H5Rcreate");
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    ret = H5Rget_object_type(dataset,&wbuf[2]);
+    VERIFY(ret, H5G_GROUP, "H5Rget_object_type");
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    ret = H5Rget_obj_type(dataset,H5R_OBJECT,&wbuf[2]);
+    VERIFY(ret, H5G_GROUP, "H5Rget_obj_type");
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+    /* Create reference to named datatype */
+    ret = H5Rcreate(&wbuf[3],fid1,"/Group1/Datatype1",H5R_OBJECT,-1);
+    CHECK(ret, FAIL, "H5Rcreate");
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    ret = H5Rget_object_type(dataset,&wbuf[3]);
+    VERIFY(ret, H5G_TYPE, "H5Rget_object_type");
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    ret = H5Rget_obj_type(dataset,H5R_OBJECT,&wbuf[3]);
+    VERIFY(ret, H5G_TYPE, "H5Rget_obj_type");
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_STD_REF_OBJ,H5S_ALL,H5S_ALL,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Re-open the file */
+    fid1 = H5Fopen(FILE1, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,"/Dataset3");
+    CHECK(ret, FAIL, "H5Dcreate");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_STD_REF_OBJ,H5S_ALL,H5S_ALL,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Open dataset object */
+    dset2 = H5Rdereference(dataset,H5R_OBJECT,&rbuf[0]);
+    CHECK(dset2, FAIL, "H5Rdereference");
+
+    /* Check information in referenced dataset */
+    sid1 = H5Dget_space(dset2);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    ret=(int)H5Sget_simple_extent_npoints(sid1);
+    VERIFY(ret, 4, "H5Sget_simple_extent_npoints");
+
+    /* Read from disk */
+    ret=H5Dread(dset2,H5T_NATIVE_UINT,H5S_ALL,H5S_ALL,H5P_DEFAULT,tbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    for(tu32=(unsigned *)tbuf,i=0; i<SPACE1_DIM1; i++,tu32++)
+        VERIFY(*tu32, (uint32_t)(i*3), "Data");
+
+    /* Close dereferenced Dataset */
+    ret = H5Dclose(dset2);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Open group object */
+    group = H5Rdereference(dataset,H5R_OBJECT,&rbuf[2]);
+    CHECK(group, FAIL, "H5Rdereference");
+
+    /* Get group's comment */
+    ret=H5Gget_comment(group,".",10,read_comment);
+    CHECK(ret, FAIL, "H5Gget_comment");
+
+    /* Check for correct comment value */
+    if(HDstrcmp(write_comment,read_comment)!=0)
+        TestErrPrintf("Error! Incorrect group comment, wanted: %s, got: %s\n",write_comment,read_comment);
+
+    /* Close group */
+    ret = H5Gclose(group);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Open datatype object */
+    tid1 = H5Rdereference(dataset,H5R_OBJECT,&rbuf[3]);
+    CHECK(tid1, FAIL, "H5Rdereference");
+
+    /* Verify correct datatype */
+    {
+        H5T_class_t tclass;
+
+        tclass= H5Tget_class(tid1);
+        VERIFY(tclass, H5T_COMPOUND, "H5Tget_class");
+
+        ret= H5Tget_nmembers(tid1);
+        VERIFY(ret, 3, "H5Tget_nmembers");
+    }
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    free(wbuf);
+    free(rbuf);
+    free(tbuf);
+}   /* test_reference_obj() */
+
+/****************************************************************
+**
+**  test_reference_region(): Test basic H5R (reference) object reference code.
+**      Tests references to various kinds of objects
+**
+****************************************************************/
+static void
+test_reference_region(void)
+{
+    hid_t	fid1;		/* HDF5 File IDs		*/
+    hid_t	dset1,		/* Dataset ID			*/
+                dset2;		/* Dereferenced dataset ID */
+    hid_t	sid1,		/* Dataspace ID	#1		*/
+                sid2;		/* Dataspace ID	#2		*/
+    hsize_t	dims1[] = {SPACE1_DIM1},
+            	dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t	start[SPACE2_RANK];     /* Starting location of hyperslab */
+    hsize_t	stride[SPACE2_RANK];    /* Stride of hyperslab */
+    hsize_t	count[SPACE2_RANK];     /* Element count of hyperslab */
+    hsize_t	block[SPACE2_RANK];     /* Block size of hyperslab */
+    hsize_t	coord1[POINT1_NPOINTS][SPACE2_RANK]; /* Coordinates for point selection */
+    hsize_t *   coords;			/* Coordinate buffer */
+    hsize_t	low[SPACE2_RANK];	/* Selection bounds */
+    hsize_t	high[SPACE2_RANK];	/* Selection bounds */
+    hdset_reg_ref_t      *wbuf,		/* buffer to write to disk */
+               *rbuf;       /* buffer read from disk */
+    uint8_t    *dwbuf,      /* Buffer for writing numeric data to disk */
+               *drbuf;      /* Buffer for reading numeric data from disk */
+    uint8_t    *tu8;        /* Temporary pointer to uint8 data */
+    int        i;           /* counting variables */
+    herr_t	ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Dataset Region Reference Functions\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=calloc(sizeof(hdset_reg_ref_t), SPACE1_DIM1);
+    rbuf=malloc(sizeof(hdset_reg_ref_t)*SPACE1_DIM1);
+    dwbuf=malloc(sizeof(uint8_t)*SPACE2_DIM1*SPACE2_DIM2);
+    drbuf=calloc(sizeof(uint8_t),SPACE2_DIM1*SPACE2_DIM2);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Create a dataset */
+    dset2=H5Dcreate(fid1,"Dataset2",H5T_STD_U8LE,sid2,H5P_DEFAULT);
+    CHECK(dset2, FAIL, "H5Dcreate");
+
+    for(tu8=dwbuf,i=0; i<SPACE2_DIM1*SPACE2_DIM2; i++)
+        *tu8++=i*3;
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dset2,H5T_STD_U8LE,H5S_ALL,H5S_ALL,H5P_DEFAULT,dwbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dset2);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Create dataspace for the reference dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a dataset */
+    dset1=H5Dcreate(fid1,"Dataset1",H5T_STD_REF_DSETREG,sid1,H5P_DEFAULT);
+    CHECK(ret, FAIL, "H5Dcreate");
+
+    /* Create references */
+
+    /* Select 6x6 hyperslab for first reference */
+    start[0]=2; start[1]=2;
+    stride[0]=1; stride[1]=1;
+    count[0]=1; count[1]=1;
+    block[0]=6; block[1]=6;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    ret = (int)H5Sget_select_npoints(sid2);
+    VERIFY(ret, 36, "H5Sget_select_npoints");
+
+    /* Store first dataset region */
+    ret = H5Rcreate(&wbuf[0],fid1,"/Dataset2",H5R_DATASET_REGION,sid2);
+    CHECK(ret, FAIL, "H5Rcreate");
+    ret = H5Rget_obj_type(dset1,H5R_DATASET_REGION,&wbuf[0]);
+    VERIFY(ret, H5G_DATASET, "H5Rget_obj_type");
+
+    /* Select sequence of ten points for second reference */
+    coord1[0][0]=6; coord1[0][1]=9;
+    coord1[1][0]=2; coord1[1][1]=2;
+    coord1[2][0]=8; coord1[2][1]=4;
+    coord1[3][0]=1; coord1[3][1]=6;
+    coord1[4][0]=2; coord1[4][1]=8;
+    coord1[5][0]=3; coord1[5][1]=2;
+    coord1[6][0]=0; coord1[6][1]=4;
+    coord1[7][0]=9; coord1[7][1]=0;
+    coord1[8][0]=7; coord1[8][1]=1;
+    coord1[9][0]=3; coord1[9][1]=3;
+    ret = H5Sselect_elements(sid2,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord1);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    ret = (int)H5Sget_select_npoints(sid2);
+    VERIFY(ret, 10, "H5Sget_select_npoints");
+
+    /* Store second dataset region */
+    ret = H5Rcreate(&wbuf[1],fid1,"/Dataset2",H5R_DATASET_REGION,sid2);
+    CHECK(ret, FAIL, "H5Rcreate");
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dset1,H5T_STD_REF_DSETREG,H5S_ALL,H5S_ALL,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dset1);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close uint8 dataset dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Re-open the file */
+    fid1 = H5Fopen(FILE2, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dset1=H5Dopen(fid1,"/Dataset1");
+    CHECK(dset1, FAIL, "H5Dopen");
+
+    /* Read selection from disk */
+    ret=H5Dread(dset1,H5T_STD_REF_DSETREG,H5S_ALL,H5S_ALL,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Try to open objects */
+    dset2 = H5Rdereference(dset1,H5R_DATASET_REGION,&rbuf[0]);
+    CHECK(dset2, FAIL, "H5Rdereference");
+
+    /* Check what H5Rget_obj_type function returns */
+    ret = H5Rget_obj_type(dset1, H5R_DATASET_REGION,&rbuf[0]);
+    VERIFY(ret, H5G_DATASET, "H5Rget_obj_type");
+
+    /* Check information in referenced dataset */
+    sid1 = H5Dget_space(dset2);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    ret=(int)H5Sget_simple_extent_npoints(sid1);
+    VERIFY(ret, 100, "H5Sget_simple_extent_npoints");
+
+    /* Read from disk */
+    ret=H5Dread(dset2,H5T_STD_U8LE,H5S_ALL,H5S_ALL,H5P_DEFAULT,drbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    for(tu8=(uint8_t *)drbuf,i=0; i<SPACE2_DIM1*SPACE2_DIM2; i++,tu8++)
+        VERIFY(*tu8, (uint8_t)(i*3), "Data");
+
+    /* Get the hyperslab selection */
+    sid2=H5Rget_region(dset1,H5R_DATASET_REGION,&rbuf[0]);
+    CHECK(sid2, FAIL, "H5Rget_region");
+
+    /* Verify correct hyperslab selected */
+    ret = (int)H5Sget_select_npoints(sid2);
+    VERIFY(ret, 36, "H5Sget_select_npoints");
+    ret = (int)H5Sget_select_hyper_nblocks(sid2);
+    VERIFY(ret, 1, "H5Sget_select_hyper_nblocks");
+    coords=HDmalloc(ret*SPACE2_RANK*sizeof(hsize_t)*2); /* allocate space for the hyperslab blocks */
+    ret = H5Sget_select_hyper_blocklist(sid2,(hsize_t)0,(hsize_t)ret,coords);
+    CHECK(ret, FAIL, "H5Sget_select_hyper_blocklist");
+    VERIFY(coords[0], 2, "Hyperslab Coordinates");
+    VERIFY(coords[1], 2, "Hyperslab Coordinates");
+    VERIFY(coords[2], 7, "Hyperslab Coordinates");
+    VERIFY(coords[3], 7, "Hyperslab Coordinates");
+    HDfree(coords);
+    ret = H5Sget_select_bounds(sid2,low,high);
+    CHECK(ret, FAIL, "H5Sget_select_bounds");
+    VERIFY(low[0], 2, "Selection Bounds");
+    VERIFY(low[1], 2, "Selection Bounds");
+    VERIFY(high[0], 7, "Selection Bounds");
+    VERIFY(high[1], 7, "Selection Bounds");
+
+    /* Close region space */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Get the element selection */
+    sid2=H5Rget_region(dset1,H5R_DATASET_REGION,&rbuf[1]);
+    CHECK(sid2, FAIL, "H5Rget_region");
+
+    /* Verify correct elements selected */
+    ret = (int)H5Sget_select_npoints(sid2);
+    VERIFY(ret, 10, "H5Sget_select_npoints");
+    ret = (int)H5Sget_select_elem_npoints(sid2);
+    VERIFY(ret, 10, "H5Sget_select_elem_npoints");
+    coords=HDmalloc(ret*SPACE2_RANK*sizeof(hsize_t)); /* allocate space for the element points */
+    ret = H5Sget_select_elem_pointlist(sid2,(hsize_t)0,(hsize_t)ret,coords);
+    CHECK(ret, FAIL, "H5Sget_select_elem_pointlist");
+    VERIFY(coords[0], coord1[0][0], "Element Coordinates");
+    VERIFY(coords[1], coord1[0][1], "Element Coordinates");
+    VERIFY(coords[2], coord1[1][0], "Element Coordinates");
+    VERIFY(coords[3], coord1[1][1], "Element Coordinates");
+    VERIFY(coords[4], coord1[2][0], "Element Coordinates");
+    VERIFY(coords[5], coord1[2][1], "Element Coordinates");
+    VERIFY(coords[6], coord1[3][0], "Element Coordinates");
+    VERIFY(coords[7], coord1[3][1], "Element Coordinates");
+    VERIFY(coords[8], coord1[4][0], "Element Coordinates");
+    VERIFY(coords[9], coord1[4][1], "Element Coordinates");
+    VERIFY(coords[10], coord1[5][0], "Element Coordinates");
+    VERIFY(coords[11], coord1[5][1], "Element Coordinates");
+    VERIFY(coords[12], coord1[6][0], "Element Coordinates");
+    VERIFY(coords[13], coord1[6][1], "Element Coordinates");
+    VERIFY(coords[14], coord1[7][0], "Element Coordinates");
+    VERIFY(coords[15], coord1[7][1], "Element Coordinates");
+    VERIFY(coords[16], coord1[8][0], "Element Coordinates");
+    VERIFY(coords[17], coord1[8][1], "Element Coordinates");
+    VERIFY(coords[18], coord1[9][0], "Element Coordinates");
+    VERIFY(coords[19], coord1[9][1], "Element Coordinates");
+    HDfree(coords);
+    ret = H5Sget_select_bounds(sid2,low,high);
+    CHECK(ret, FAIL, "H5Sget_select_bounds");
+    VERIFY(low[0], 0, "Selection Bounds");
+    VERIFY(low[1], 0, "Selection Bounds");
+    VERIFY(high[0], 9, "Selection Bounds");
+    VERIFY(high[1], 9, "Selection Bounds");
+
+    /* Close region space */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close first space */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dereferenced Dataset */
+    ret = H5Dclose(dset2);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dset1);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    free(wbuf);
+    free(rbuf);
+    free(dwbuf);
+    free(drbuf);
+}   /* test_reference_region() */
+
+/****************************************************************
+**
+**  test_reference_region_1D(): Test H5R (reference) object reference code.
+**      Tests 1-D references to various kinds of objects
+**
+****************************************************************/
+static void
+test_reference_region_1D(void)
+{
+    hid_t	fid1;           /* HDF5 File IDs		*/
+    hid_t	dset1,          /* Dataset ID			*/
+                dset3;          /* Dereferenced dataset ID */
+    hid_t	sid1,           /* Dataspace ID	#1		*/
+                sid3;           /* Dataspace ID	#3		*/
+    hsize_t	dims1[] = {SPACE1_DIM1},
+            	dims3[] = {SPACE3_DIM1};
+    hsize_t	start[SPACE3_RANK];     /* Starting location of hyperslab */
+    hsize_t	stride[SPACE3_RANK];    /* Stride of hyperslab */
+    hsize_t	count[SPACE3_RANK];     /* Element count of hyperslab */
+    hsize_t	block[SPACE3_RANK];     /* Block size of hyperslab */
+    hsize_t	coord1[POINT1_NPOINTS][SPACE3_RANK]; /* Coordinates for point selection */
+    hsize_t *   coords;                 /* Coordinate buffer */
+    hsize_t	low[SPACE3_RANK];       /* Selection bounds */
+    hsize_t	high[SPACE3_RANK];      /* Selection bounds */
+    hdset_reg_ref_t      *wbuf,         /* buffer to write to disk */
+               *rbuf;   /* buffer read from disk */
+    uint8_t    *dwbuf,  /* Buffer for writing numeric data to disk */
+               *drbuf;  /* Buffer for reading numeric data from disk */
+    uint8_t    *tu8;    /* Temporary pointer to uint8 data */
+    int         i;      /* counting variables */
+    herr_t	ret;    /* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing 1-D Dataset Region Reference Functions\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=calloc(sizeof(hdset_reg_ref_t), SPACE1_DIM1);
+    rbuf=malloc(sizeof(hdset_reg_ref_t)*SPACE1_DIM1);
+    dwbuf=malloc(sizeof(uint8_t)*SPACE3_DIM1);
+    drbuf=calloc(sizeof(uint8_t),SPACE3_DIM1);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid3 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid3, FAIL, "H5Screate_simple");
+
+    /* Create a dataset */
+    dset3=H5Dcreate(fid1,"Dataset2",H5T_STD_U8LE,sid3,H5P_DEFAULT);
+    CHECK(dset3, FAIL, "H5Dcreate");
+
+    for(tu8=dwbuf,i=0; i<SPACE3_DIM1; i++)
+        *tu8++=i*3;
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dset3,H5T_STD_U8LE,H5S_ALL,H5S_ALL,H5P_DEFAULT,dwbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dset3);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Create dataspace for the reference dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a dataset */
+    dset1=H5Dcreate(fid1,"Dataset1",H5T_STD_REF_DSETREG,sid1,H5P_DEFAULT);
+    CHECK(ret, FAIL, "H5Dcreate");
+
+    /* Create references */
+
+    /* Select 15 2x1 hyperslabs for first reference */
+    start[0]=2;
+    stride[0]=5;
+    count[0]=15;
+    block[0]=2;
+    ret = H5Sselect_hyperslab(sid3,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    ret = (int)H5Sget_select_npoints(sid3);
+    VERIFY(ret, 30, "H5Sget_select_npoints");
+
+    /* Store first dataset region */
+    ret = H5Rcreate(&wbuf[0],fid1,"/Dataset2",H5R_DATASET_REGION,sid3);
+    CHECK(ret, FAIL, "H5Rcreate");
+    ret = H5Rget_obj_type(dset1,H5R_DATASET_REGION,&wbuf[0]);
+    VERIFY(ret, H5G_DATASET, "H5Rget_obj_type");
+
+    /* Select sequence of ten points for second reference */
+    coord1[0][0]=16;
+    coord1[1][0]=22;
+    coord1[2][0]=38;
+    coord1[3][0]=41;
+    coord1[4][0]=52;
+    coord1[5][0]=63;
+    coord1[6][0]=70;
+    coord1[7][0]=89;
+    coord1[8][0]=97;
+    coord1[9][0]=03;
+    ret = H5Sselect_elements(sid3,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord1);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    ret = (int)H5Sget_select_npoints(sid3);
+    VERIFY(ret, 10, "H5Sget_select_npoints");
+
+    /* Store second dataset region */
+    ret = H5Rcreate(&wbuf[1],fid1,"/Dataset2",H5R_DATASET_REGION,sid3);
+    CHECK(ret, FAIL, "H5Rcreate");
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dset1,H5T_STD_REF_DSETREG,H5S_ALL,H5S_ALL,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dset1);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close uint8 dataset dataspace */
+    ret = H5Sclose(sid3);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Re-open the file */
+    fid1 = H5Fopen(FILE2, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dset1=H5Dopen(fid1,"/Dataset1");
+    CHECK(dset1, FAIL, "H5Dopen");
+
+    /* Read selection from disk */
+    ret=H5Dread(dset1,H5T_STD_REF_DSETREG,H5S_ALL,H5S_ALL,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Try to open objects */
+    dset3 = H5Rdereference(dset1,H5R_DATASET_REGION,&rbuf[0]);
+    CHECK(dset3, FAIL, "H5Rdereference");
+
+    /* Check what H5Rget_obj_type function returns */
+    ret = H5Rget_obj_type(dset1, H5R_DATASET_REGION,&rbuf[0]);
+    VERIFY(ret, H5G_DATASET, "H5Rget_obj_type");
+
+    /* Check information in referenced dataset */
+    sid1 = H5Dget_space(dset3);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    ret=(int)H5Sget_simple_extent_npoints(sid1);
+    VERIFY(ret, 100, "H5Sget_simple_extent_npoints");
+
+    /* Read from disk */
+    ret=H5Dread(dset3,H5T_STD_U8LE,H5S_ALL,H5S_ALL,H5P_DEFAULT,drbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    for(tu8=(uint8_t *)drbuf,i=0; i<SPACE3_DIM1; i++,tu8++)
+        VERIFY(*tu8, (uint8_t)(i*3), "Data");
+
+    /* Get the hyperslab selection */
+    sid3=H5Rget_region(dset1,H5R_DATASET_REGION,&rbuf[0]);
+    CHECK(sid3, FAIL, "H5Rget_region");
+
+    /* Verify correct hyperslab selected */
+    ret = (int)H5Sget_select_npoints(sid3);
+    VERIFY(ret, 30, "H5Sget_select_npoints");
+    ret = (int)H5Sget_select_hyper_nblocks(sid3);
+    VERIFY(ret, 15, "H5Sget_select_hyper_nblocks");
+    coords=HDmalloc(ret*SPACE3_RANK*sizeof(hsize_t)*2); /* allocate space for the hyperslab blocks */
+    ret = H5Sget_select_hyper_blocklist(sid3,(hsize_t)0,(hsize_t)ret,coords);
+    CHECK(ret, FAIL, "H5Sget_select_hyper_blocklist");
+    VERIFY(coords[0], 2, "Hyperslab Coordinates");
+    VERIFY(coords[1], 3, "Hyperslab Coordinates");
+    VERIFY(coords[2], 7, "Hyperslab Coordinates");
+    VERIFY(coords[3], 8, "Hyperslab Coordinates");
+    VERIFY(coords[4],12, "Hyperslab Coordinates");
+    VERIFY(coords[5],13, "Hyperslab Coordinates");
+    VERIFY(coords[6],17, "Hyperslab Coordinates");
+    VERIFY(coords[7],18, "Hyperslab Coordinates");
+    VERIFY(coords[8],22, "Hyperslab Coordinates");
+    VERIFY(coords[9],23, "Hyperslab Coordinates");
+    VERIFY(coords[10],27, "Hyperslab Coordinates");
+    VERIFY(coords[11],28, "Hyperslab Coordinates");
+    VERIFY(coords[12],32, "Hyperslab Coordinates");
+    VERIFY(coords[13],33, "Hyperslab Coordinates");
+    VERIFY(coords[14],37, "Hyperslab Coordinates");
+    VERIFY(coords[15],38, "Hyperslab Coordinates");
+    VERIFY(coords[16],42, "Hyperslab Coordinates");
+    VERIFY(coords[17],43, "Hyperslab Coordinates");
+    VERIFY(coords[18],47, "Hyperslab Coordinates");
+    VERIFY(coords[19],48, "Hyperslab Coordinates");
+    VERIFY(coords[20],52, "Hyperslab Coordinates");
+    VERIFY(coords[21],53, "Hyperslab Coordinates");
+    VERIFY(coords[22],57, "Hyperslab Coordinates");
+    VERIFY(coords[23],58, "Hyperslab Coordinates");
+    VERIFY(coords[24],62, "Hyperslab Coordinates");
+    VERIFY(coords[25],63, "Hyperslab Coordinates");
+    VERIFY(coords[26],67, "Hyperslab Coordinates");
+    VERIFY(coords[27],68, "Hyperslab Coordinates");
+    VERIFY(coords[28],72, "Hyperslab Coordinates");
+    VERIFY(coords[29],73, "Hyperslab Coordinates");
+    HDfree(coords);
+    ret = H5Sget_select_bounds(sid3,low,high);
+    CHECK(ret, FAIL, "H5Sget_select_bounds");
+    VERIFY(low[0], 2, "Selection Bounds");
+    VERIFY(high[0], 73, "Selection Bounds");
+
+    /* Close region space */
+    ret = H5Sclose(sid3);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Get the element selection */
+    sid3=H5Rget_region(dset1,H5R_DATASET_REGION,&rbuf[1]);
+    CHECK(sid3, FAIL, "H5Rget_region");
+
+    /* Verify correct elements selected */
+    ret = (int)H5Sget_select_npoints(sid3);
+    VERIFY(ret, 10, "H5Sget_select_npoints");
+    ret = (int)H5Sget_select_elem_npoints(sid3);
+    VERIFY(ret, 10, "H5Sget_select_elem_npoints");
+    coords=HDmalloc(ret*SPACE3_RANK*sizeof(hsize_t)); /* allocate space for the element points */
+    ret = H5Sget_select_elem_pointlist(sid3,(hsize_t)0,(hsize_t)ret,coords);
+    CHECK(ret, FAIL, "H5Sget_select_elem_pointlist");
+    VERIFY(coords[0], coord1[0][0], "Element Coordinates");
+    VERIFY(coords[1], coord1[1][0], "Element Coordinates");
+    VERIFY(coords[2], coord1[2][0], "Element Coordinates");
+    VERIFY(coords[3], coord1[3][0], "Element Coordinates");
+    VERIFY(coords[4], coord1[4][0], "Element Coordinates");
+    VERIFY(coords[5], coord1[5][0], "Element Coordinates");
+    VERIFY(coords[6], coord1[6][0], "Element Coordinates");
+    VERIFY(coords[7], coord1[7][0], "Element Coordinates");
+    VERIFY(coords[8], coord1[8][0], "Element Coordinates");
+    VERIFY(coords[9], coord1[9][0], "Element Coordinates");
+    HDfree(coords);
+    ret = H5Sget_select_bounds(sid3,low,high);
+    CHECK(ret, FAIL, "H5Sget_select_bounds");
+    VERIFY(low[0], 3, "Selection Bounds");
+    VERIFY(high[0], 97, "Selection Bounds");
+
+    /* Close region space */
+    ret = H5Sclose(sid3);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close first space */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dereferenced Dataset */
+    ret = H5Dclose(dset3);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dset1);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    free(wbuf);
+    free(rbuf);
+    free(dwbuf);
+    free(drbuf);
+}   /* test_reference_region_1D() */
+
+/****************************************************************
+**
+**  test_reference_obj_deleted(): Test H5R (reference) object reference code.
+**      Tests for correct failures for deleted and non-existent objects
+**
+****************************************************************/
+static void
+test_reference_obj_deleted(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset,	/* Dataset ID			*/
+                dset2;      /* Dereferenced dataset ID */
+    hid_t		sid1;       /* Dataspace ID			*/
+    hobj_ref_t  oref;       /* Object Reference to test */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE3, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create scalar dataspace for datasets */
+    sid1 = H5Screate_simple(0, NULL, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a dataset to reference (deleted later) */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_INT,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset2",H5T_STD_REF_OBJ,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Create reference to dataset */
+    ret = H5Rcreate(&oref,fid1,"/Dataset1",H5R_OBJECT,-1);
+    CHECK(ret, FAIL, "H5Rcreate");
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    ret = H5Rget_object_type(dataset,&oref);
+    VERIFY(ret, H5G_DATASET, "H5Rget_object_type");
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    ret = H5Rget_obj_type(dataset,H5R_OBJECT,&oref);
+    VERIFY(ret, H5G_DATASET, "H5Rget_obj_type");
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_STD_REF_OBJ,H5S_ALL,H5S_ALL,H5P_DEFAULT,&oref);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Delete referenced dataset */
+    ret = H5Gunlink(fid1,"/Dataset1");
+    CHECK(ret, FAIL, "H5Gunlink");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Re-open the file */
+    fid1 = H5Fopen(FILE3, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,"/Dataset2");
+    CHECK(ret, FAIL, "H5Dcreate");
+
+    /* Read selection from disk */
+    memset(&oref,0,sizeof(hobj_ref_t));
+    ret=H5Dread(dataset,H5T_STD_REF_OBJ,H5S_ALL,H5S_ALL,H5P_DEFAULT,&oref);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Open deleted dataset object */
+    dset2 = H5Rdereference(dataset,H5R_OBJECT,&oref);
+    VERIFY(dset2, FAIL, "H5Rdereference");
+
+    /* Open nonsense reference */
+    memset(&oref,0,sizeof(hobj_ref_t));
+    dset2 = H5Rdereference(dataset,H5R_OBJECT,&oref);
+    VERIFY(dset2, FAIL, "H5Rdereference");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+}   /* test_reference_obj_deleted() */
+
+/****************************************************************
+**
+**  test_deref_iter_op(): Iterator callback for test_reference_group_iterate()
+**      test.
+**
+****************************************************************/
+static herr_t
+test_deref_iter_op(hid_t UNUSED group, const char *name, void *op_data)
+{
+    int *count = (int *)op_data;        /* Pointer to name counter */
+    herr_t ret_value;
+
+    /* Simple check for correct names */
+    if(*count == 0) {
+        if(HDstrcmp(name, DSETNAME2) == 0)
+            ret_value = 0;
+        else
+            ret_value = -1;
+    } /* end if */
+    else if(*count == 1) {
+        if(HDstrcmp(name, GROUPNAME2) == 0)
+            ret_value = 0;
+        else
+            ret_value = -1;
+    } /* end if */
+    else if(*count == 2) {
+        if(HDstrcmp(name, GROUPNAME3) == 0)
+            ret_value = 0;
+        else
+            ret_value = -1;
+    } /* end if */
+    else
+        ret_value = -1;
+
+    (*count)++;
+
+    return(ret_value);
+} /* end test_deref_iter_op() */
+
+/****************************************************************
+**
+**  test_reference_group(): Test H5R (reference) object reference code.
+**      Tests for correct behavior of various routines on dereferenced group
+**
+****************************************************************/
+static void
+test_reference_group(void)
+{
+    hid_t fid = -1;             /* File ID */
+    hid_t gid = -1, gid2 = -1;  /* Group IDs */
+    hid_t did;                  /* Dataset ID */
+    hid_t sid;                  /* Dataspace ID */
+    hobj_ref_t wref;            /* Reference to write */
+    hobj_ref_t rref;            /* Reference to read */
+    hsize_t nobjs;
+    char objname[NAME_SIZE];    /* Buffer to store name */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int objtype;          /* Object type */
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    H5G_obj_t objtype;          /* Object type */
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    int count = 0;              /* Count within iterated group */
+    herr_t ret;
+
+    /* Create file with a group and a dataset containing an object reference to the group */
+    fid = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create dataspace to use for dataset */
+    sid = H5Screate(H5S_SCALAR);
+    CHECK(sid, FAIL, "H5Screate");
+
+    /* Create group to refer to */
+    gid = H5Gcreate(fid, GROUPNAME, (size_t)0);
+    CHECK(gid, FAIL, "H5Gcreate");
+
+    /* Create nested groups */
+    gid2 = H5Gcreate(gid, GROUPNAME2, (size_t)0);
+    CHECK(gid2, FAIL, "H5Gcreate");
+    ret = H5Gclose(gid2);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    gid2 = H5Gcreate(gid, GROUPNAME3, (size_t)0);
+    CHECK(gid2, FAIL, "H5Gcreate");
+    ret = H5Gclose(gid2);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Create bottom dataset */
+    did = H5Dcreate(gid, DSETNAME2, H5T_NATIVE_INT, sid, H5P_DEFAULT);
+    assert(did > 0);
+    ret = H5Dclose(did);
+    assert(ret >= 0);
+
+    ret = H5Gclose(gid);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    /* Create dataset */
+    did = H5Dcreate(fid, DSETNAME, H5T_STD_REF_OBJ, sid, H5P_DEFAULT);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Create reference to group */
+    ret = H5Rcreate(&wref, fid, GROUPNAME, H5R_OBJECT, -1);
+    CHECK(ret, FAIL, "H5Rcreate");
+
+    /* Write reference to disk */
+    ret = H5Dwrite(did, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL, H5P_DEFAULT, &wref);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close objects */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Re-open file */
+    fid = H5Fopen(FILE1, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fopen");
+
+    /* Re-open dataset */
+    did = H5Dopen(fid, DSETNAME);
+    CHECK(did, FAIL, "H5Dopen");
+
+    /* Read in the reference */
+    ret = H5Dread(did, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL, H5P_DEFAULT, &rref);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Dereference to get the group */
+    gid = H5Rdereference(did, H5R_OBJECT, &rref);
+    CHECK(gid, FAIL, "H5Rdereference");
+
+    /* Iterate through objects in dereferenced group */
+    ret = H5Giterate(gid, ".", NULL, test_deref_iter_op, &count);
+    CHECK(ret, FAIL, "H5Giterate");
+
+    /* Various queries on the group opened */
+    ret = H5Gget_num_objs(gid, &nobjs);
+    CHECK(ret, FAIL, "H5Gget_num_objs");
+
+    VERIFY(nobjs, 3, "H5Gget_num_objs");
+
+    ret = H5Gget_objname_by_idx(gid, (hsize_t)0, objname, NAME_SIZE);
+    CHECK(ret, FAIL, "H5Gget_objname_by_idx");
+
+    VERIFY_STR(objname, DSETNAME2, "H5Gget_objname_by_idx");
+
+    objtype = H5Gget_objtype_by_idx(gid, (hsize_t)0);
+    VERIFY(objtype, H5G_DATASET, "H5Gget_objtype_by_idx");
+
+    /* Unlink one of the objects in the dereferenced group */
+    ret = H5Gunlink(gid, GROUPNAME2);
+    CHECK(ret, FAIL, "H5Gunlink");
+
+    /* Delete dataset object in dereferenced group (with other dataset still open) */
+    ret = H5Gunlink(gid, DSETNAME2);
+    assert(ret >= 0);
+
+    /* Close objects */
+    ret = H5Dclose(did);
+    CHECK(ret, FAIL, "H5Dclose");
+    ret = H5Gclose(gid);
+    CHECK(ret, FAIL, "H5Gclose");
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+}   /* test_reference_group() */
+
+/****************************************************************
+**
+**  test_reference(): Main H5R reference testing routine.
+**
+****************************************************************/
+void
+test_reference(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing References\n"));
+
+    test_reference_obj();       /* Test basic H5R object reference code */
+    test_reference_region();    /* Test basic H5R dataset region reference code */
+    test_reference_region_1D(); /* Test H5R dataset region reference code for 1-D datasets */
+    test_reference_obj_deleted(); /* Test H5R object reference code for deleted objects */
+    test_reference_group();     /* Test operations on dereferenced groups */
+
+}   /* test_reference() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_reference
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Quincey Koziol
+ *              September 8, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_reference(void)
+{
+    remove(FILE1);
+    remove(FILE2);
+    remove(FILE3);
+}
+

Added: packages/hdf5/branches/upstream/current/test/trefstr.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/trefstr.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/trefstr.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,374 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+   FILE
+       refstr.c
+   Test HDF reference counted string routines.
+
+   REMARKS
+
+   DESIGN
+
+   BUGS/LIMITATIONS
+
+   EXPORTED ROUTINES
+
+   AUTHOR
+       Quincey Koziol
+
+   MODIFICATION HISTORY
+       12/17/02 - Started coding
+ */
+
+#include "testhdf5.h"
+#include "H5FLprivate.h"
+#include "H5RSprivate.h"
+
+/* Declare extern the PQ free list for the wrapped strings */
+H5FL_BLK_EXTERN(str_buf);
+
+/****************************************************************
+**
+**  test_refstr_init(): Test basic H5RS (ref-counted strings) code.
+**      Initialize data for RS testing
+**
+****************************************************************/
+static void
+test_refstr_init(void)
+{
+} /* end test_refstr_init() */
+
+/****************************************************************
+**
+**  test_refstr_create(): Test basic H5RS (ref-counted strings) code.
+**      Tests creating and closing ref-counted strings.
+**
+****************************************************************/
+static void
+test_refstr_create(void)
+{
+    H5RS_str_t *rs;     /* Ref-counted string created */
+    unsigned count;     /* Reference count on string */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Creating & Closing Ref-Counted Strings\n"));
+
+    /* Try creating a ref-counted string */
+    rs=H5RS_create("foo");
+    CHECK(rs, NULL, "H5RS_create");
+
+    /* Get the reference count on the string */
+    count=H5RS_get_count(rs);
+    VERIFY(count, 1, "H5RS_get_count");
+
+    /* Try closing a real ref-counted string */
+    ret=H5RS_decr(rs);
+    CHECK(ret, FAIL, "H5RS_decr");
+
+} /* end test_refstr_create() */
+
+/****************************************************************
+**
+**  test_refstr_count(): Test basic H5RS (ref-counted strings) code.
+**      Tests reference counting on ref-counted strings.
+**
+****************************************************************/
+static void
+test_refstr_count(void)
+{
+    H5RS_str_t *rs;     /* Ref-counted string created */
+    unsigned count;     /* Reference count on string */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Incrementing & Decrementing Ref-Counted Strings\n"));
+
+    /* Try creating a ref-counted string */
+    rs=H5RS_create("foo");
+    CHECK(rs, NULL, "H5RS_create");
+
+    /* Get the reference count on the string */
+    count=H5RS_get_count(rs);
+    VERIFY(count, 1, "H5RS_get_count");
+
+    /* Increment reference count */
+    ret=H5RS_incr(rs);
+    CHECK(ret, FAIL, "H5RS_incr");
+
+    /* Get the reference count on the string */
+    count=H5RS_get_count(rs);
+    VERIFY(count, 2, "H5RS_get_count");
+
+    /* Decrement reference count for string */
+    ret=H5RS_decr(rs);
+    CHECK(ret, FAIL, "H5RS_decr");
+
+    /* Get the reference count on the string */
+    count=H5RS_get_count(rs);
+    VERIFY(count, 1, "H5RS_get_count");
+
+    /* Decrement reference count for string */
+    ret=H5RS_decr(rs);
+    CHECK(ret, FAIL, "H5RS_decr");
+
+} /* end test_refstr_count() */
+
+/****************************************************************
+**
+**  test_refstr_dup(): Test basic H5RS (ref-counted strings) code.
+**      Tests duplicating ref-counted strings.
+**
+****************************************************************/
+static void
+test_refstr_dup(void)
+{
+    H5RS_str_t *rs1;    /* Ref-counted string created */
+    H5RS_str_t *rs2;    /* Ref-counted string created */
+    unsigned count;     /* Reference count on string */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Duplicating Ref-Counted Strings\n"));
+
+    /* Try creating a ref-counted string */
+    rs1=H5RS_create("foo");
+    CHECK(rs1, NULL, "H5RS_create");
+
+    /* Get the reference count on the string */
+    count=H5RS_get_count(rs1);
+    VERIFY(count, 1, "H5RS_get_count");
+
+    /* Duplicate r-string */
+    rs2=H5RS_dup(rs1);
+    CHECK(rs2, NULL, "H5RS_dup");
+
+    /* Get the reference count on the strings */
+    count=H5RS_get_count(rs1);
+    VERIFY(count, 2, "H5RS_get_count");
+    count=H5RS_get_count(rs2);
+    VERIFY(count, 2, "H5RS_get_count");
+
+    /* Decrement reference count for string */
+    ret=H5RS_decr(rs2);
+    CHECK(ret, FAIL, "H5RS_decr");
+
+    /* Get the reference count on the string */
+    count=H5RS_get_count(rs1);
+    VERIFY(count, 1, "H5RS_get_count");
+
+    /* Decrement reference count for string */
+    ret=H5RS_decr(rs1);
+    CHECK(ret, FAIL, "H5RS_decr");
+
+} /* end test_refstr_dup() */
+
+/****************************************************************
+**
+**  test_refstr_cmp(): Test basic H5RS (ref-counted strings) code.
+**      Tests comparing ref-counted strings.
+**
+****************************************************************/
+static void
+test_refstr_cmp(void)
+{
+    H5RS_str_t *rs1;    /* Ref-counted string created */
+    H5RS_str_t *rs2;    /* Ref-counted string created */
+    int cmp;            /* Comparison value */
+    ssize_t len;        /* Length of string */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Comparing Ref-Counted Strings\n"));
+
+    /* Create first reference counted string */
+    rs1=H5RS_create("foo");
+    CHECK(rs1, NULL, "H5RS_create");
+
+    /* Create second reference counted string */
+    rs2=H5RS_create("foo2");
+    CHECK(rs2, NULL, "H5RS_create");
+
+    /* Compare the strings in various ways */
+    cmp=H5RS_cmp(rs1,rs1);
+    VERIFY(cmp, 0, "H5RS_cmp");
+    cmp=H5RS_cmp(rs2,rs2);
+    VERIFY(cmp, 0, "H5RS_cmp");
+    cmp=H5RS_cmp(rs1,rs2);
+    if(cmp>=0)
+        TestErrPrintf("%d: string comparison incorrect!\n",__LINE__);
+
+    /* Check the lengths of the strings also */
+    len=H5RS_len(rs1);
+    VERIFY(len, 3, "H5RS_len");
+    len=H5RS_len(rs2);
+    VERIFY(len, 4, "H5RS_len");
+
+    /* Decrement reference count for strings */
+    ret=H5RS_decr(rs2);
+    CHECK(ret, FAIL, "H5RS_decr");
+    ret=H5RS_decr(rs1);
+    CHECK(ret, FAIL, "H5RS_decr");
+
+} /* end test_refstr_cmp() */
+
+/****************************************************************
+**
+**  test_refstr_wrap(): Test basic H5RS (ref-counted strings) code.
+**      Tests wrapping ref-counted strings around existing strings.
+**
+****************************************************************/
+static void
+test_refstr_wrap(void)
+{
+    H5RS_str_t *rs;     /* Ref-counted string created */
+    const char *s;      /* Pointer to raw string in ref-counted string */
+    char buf[16];       /* Buffer to wrap */
+    int cmp;            /* Comparison value */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Wrapping Ref-Counted Strings\n"));
+
+    /* Initialize buffer */
+    HDstrcpy(buf,"foo");
+
+    /* Wrap ref-counted string around existing buffer */
+    rs=H5RS_wrap(buf);
+    CHECK(rs, NULL, "H5RS_wrap");
+
+    /* Get pointer to raw string in ref-counted string */
+    s=H5RS_get_str(rs);
+    CHECK(s, NULL, "H5RS_get_str");
+    VERIFY(s, buf, "wrapping");
+    cmp=HDstrcmp(s,buf);
+    VERIFY(cmp, 0, "HDstrcmp");
+
+    /* Increment reference count (should duplicate string) */
+    ret=H5RS_incr(rs);
+    CHECK(ret, FAIL, "H5RS_incr");
+
+    /* Change the buffer initially wrapped */
+    buf[0]='F';
+
+    /* Get pointer to raw string in ref-counted string */
+    s=H5RS_get_str(rs);
+    CHECK(s, NULL, "H5RS_get_str");
+    CHECK(s, buf, "wrapping");
+    cmp=HDstrcmp(s,buf);
+    if(cmp<=0)
+        TestErrPrintf("%d: string comparison incorrect!\n",__LINE__);
+
+    /* Decrement reference count for string */
+    ret=H5RS_decr(rs);
+    CHECK(ret, FAIL, "H5RS_decr");
+    ret=H5RS_decr(rs);
+    CHECK(ret, FAIL, "H5RS_decr");
+
+} /* end test_refstr_wrap() */
+
+/****************************************************************
+**
+**  test_refstr_own(): Test basic H5RS (ref-counted strings) code.
+**      Tests transferring ownership of dynamically allocated strings
+**      to ref-counted strings.
+**
+****************************************************************/
+static void
+test_refstr_own(void)
+{
+    H5RS_str_t *rs;     /* Ref-counted string created */
+    char *s;            /* Pointer to string to transfer */
+    const char *t;      /* Temporary pointers to string */
+    int cmp;            /* Comparison value */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Transferring Ref-Counted Strings\n"));
+
+    /* Initialize buffer */
+    s = H5FL_BLK_MALLOC(str_buf,HDstrlen("foo") + 1);
+    HDstrcpy(s, "foo");
+
+    /* Transfer ownership of dynamically allocated string to ref-counted string */
+    rs=H5RS_own(s);
+    CHECK(rs, NULL, "H5RS_own");
+
+    /* Get pointer to raw string in ref-counted string */
+    t=H5RS_get_str(rs);
+    CHECK(t, NULL, "H5RS_get_str");
+    VERIFY(t, s, "transferring");
+    cmp=HDstrcmp(s,t);
+    VERIFY(cmp, 0, "HDstrcmp");
+
+    /* Increment reference count (should NOT duplicate string) */
+    ret=H5RS_incr(rs);
+    CHECK(ret, FAIL, "H5RS_incr");
+
+    /* Change the buffer initially wrapped */
+    *s='F';
+
+    /* Get pointer to raw string in ref-counted string */
+    t=H5RS_get_str(rs);
+    CHECK(t, NULL, "H5RS_get_str");
+    VERIFY(t, s, "transferring");
+    cmp=HDstrcmp(t,s);
+    VERIFY(cmp, 0, "HDstrcmp");
+
+    /* Decrement reference count for string */
+    ret=H5RS_decr(rs);
+    CHECK(ret, FAIL, "H5RS_decr");
+    ret=H5RS_decr(rs);
+    CHECK(ret, FAIL, "H5RS_decr");
+
+} /* end test_refstr_own() */
+
+/****************************************************************
+**
+**  test_refstr_finalize(): Test basic H5RS (ref-counted strings) code.
+**      Wrap up data for ref-counted string testing
+**
+****************************************************************/
+static void
+test_refstr_finalize(void)
+{
+} /* end test_refstr_finalize() */
+
+/****************************************************************
+**
+**  test_refstr(): Main H5RS testing routine.
+**
+****************************************************************/
+void
+test_refstr(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Reference Counted Strings\n"));
+
+    /* Initialize ref-counted strings testing data */
+    test_refstr_init();
+
+    /* Actual ref-counted strings tests */
+    test_refstr_create();       /* Test ref-counted string creation */
+    test_refstr_count();        /* Test ref-counted string counting */
+    test_refstr_dup();          /* Test ref-counted string duplication */
+    test_refstr_cmp();          /* Test ref-counted string comparison */
+    test_refstr_wrap();         /* Test ref-counted string wrapping */
+    test_refstr_own();          /* Test ref-counted string ownership transfer */
+
+    /* Finalize ref-counted strings testing data */
+    test_refstr_finalize();
+}   /* end test_refstr() */
+

Added: packages/hdf5/branches/upstream/current/test/tselect.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/tselect.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/tselect.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,6873 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/***********************************************************
+*
+* Test program:	 tselect
+*
+* Test the Dataspace selection functionality
+*
+*************************************************************/
+
+#define H5S_PACKAGE		/*suppress error about including H5Spkg	  */
+
+/* Define this macro to indicate that the testing APIs should be available */
+#define H5S_TESTING
+
+#include "testhdf5.h"
+#include "hdf5.h"
+#include "H5Spkg.h"		/* Dataspaces				*/
+
+#define FILENAME   "tselect.h5"
+
+/* 3-D dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	3
+#define SPACE1_DIM1	3
+#define SPACE1_DIM2	15
+#define SPACE1_DIM3	13
+
+/* 2-D dataset with fixed dimensions */
+#define SPACE2_NAME  "Space2"
+#define SPACE2_RANK	2
+#define SPACE2_DIM1	30
+#define SPACE2_DIM2	26
+#define SPACE2A_RANK	1
+#define SPACE2A_DIM1	(SPACE2_DIM1*SPACE2_DIM2)
+
+/* 2-D dataset with fixed dimensions */
+#define SPACE3_NAME  "Space3"
+#define SPACE3_RANK	2
+#define SPACE3_DIM1	15
+#define SPACE3_DIM2	26
+
+/* 3-D dataset with fixed dimensions */
+#define SPACE4_NAME  "Space4"
+#define SPACE4_RANK	3
+#define SPACE4_DIM1	11
+#define SPACE4_DIM2	13
+#define SPACE4_DIM3	17
+
+/* Number of random hyperslabs to test */
+#define NHYPERSLABS 10
+
+/* Number of random hyperslab tests performed */
+#define NRAND_HYPER 100
+
+/* 5-D dataset with fixed dimensions */
+#define SPACE5_NAME  "Space5"
+#define SPACE5_RANK	5
+#define SPACE5_DIM1	10
+#define SPACE5_DIM2	10
+#define SPACE5_DIM3	10
+#define SPACE5_DIM4	10
+#define SPACE5_DIM5	10
+
+/* 1-D dataset with same size as 5-D dataset */
+#define SPACE6_NAME  "Space6"
+#define SPACE6_RANK	1
+#define SPACE6_DIM1	(SPACE5_DIM1*SPACE5_DIM2*SPACE5_DIM3*SPACE5_DIM4*SPACE5_DIM5)
+
+/* 2-D dataset with easy dimension sizes */
+#define SPACE7_NAME  "Space7"
+#define SPACE7_RANK	2
+#define SPACE7_DIM1	10
+#define SPACE7_DIM2	10
+#define SPACE7_FILL     254
+#define SPACE7_CHUNK_DIM1 5
+#define SPACE7_CHUNK_DIM2 5
+#define SPACE7_NPOINTS  8
+
+/* 4-D dataset with fixed dimensions */
+#define SPACE8_NAME  "Space8"
+#define SPACE8_RANK	4
+#define SPACE8_DIM1	11
+#define SPACE8_DIM2	13
+#define SPACE8_DIM3	17
+#define SPACE8_DIM4	19
+
+/* Another 2-D dataset with easy dimension sizes */
+#define SPACE9_NAME  "Space9"
+#define SPACE9_RANK	2
+#define SPACE9_DIM1	12
+#define SPACE9_DIM2	12
+
+/* Element selection information */
+#define POINT1_NPOINTS 10
+
+/* Chunked dataset information */
+#define DATASETNAME "ChunkArray"
+#define NX_SUB   87                     /* hyperslab dimensions */
+#define NY_SUB   61
+#define NZ_SUB  181
+#define NX       87                     /* output buffer dimensions */
+#define NY       61
+#define NZ      181
+#define RANK_F     3                    /* File dataspace rank */
+#define RANK_M     3                    /* Memory dataspace rank */
+#define X    87                         /* dataset dimensions */
+#define Y    61
+#define Z   181
+#define CHUNK_X   87                    /* chunk dimensions */
+#define CHUNK_Y   61
+#define CHUNK_Z  181
+
+/* Basic chunk size */
+#define SPACE10_DIM1    180
+#define SPACE10_CHUNK_SIZE 12
+
+/* Information for bounds checking test */
+#define SPACE11_RANK	2
+#define SPACE11_DIM1    100
+#define SPACE11_DIM2    100
+#define SPACE11_NPOINTS 4
+
+/* Information for offsets w/chunks test #2 */
+#define SPACE12_RANK	        1
+#define SPACE12_DIM0            25
+#define SPACE12_CHUNK_DIM0      5
+
+/* Location comparison function */
+int compare_size_t(const void *s1, const void *s2);
+
+herr_t test_select_hyper_iter1(void *elem,hid_t type_id, unsigned ndim, const hsize_t *point, void *operator_data);
+herr_t test_select_point_iter1(void *elem,hid_t type_id, unsigned ndim, const hsize_t *point, void *operator_data);
+herr_t test_select_all_iter1(void *elem,hid_t type_id, unsigned ndim, const hsize_t *point, void *operator_data);
+herr_t test_select_none_iter1(void *elem,hid_t type_id, unsigned ndim, const hsize_t *point, void *operator_data);
+herr_t test_select_hyper_iter2(void *_elem, hid_t type_id, unsigned ndim, const hsize_t *point, void *_operator_data);
+herr_t test_select_hyper_iter3(void *elem,hid_t type_id, unsigned ndim, const hsize_t *point, void *operator_data);
+
+/****************************************************************
+**
+**  test_select_hyper_iter1(): Iterator for checking hyperslab iteration
+**
+****************************************************************/
+herr_t
+test_select_hyper_iter1(void *_elem, hid_t UNUSED type_id, unsigned UNUSED ndim, const hsize_t UNUSED *point, void *_operator_data)
+{
+    uint8_t *tbuf=(uint8_t *)_elem,     /* temporary buffer pointer */
+            **tbuf2=(uint8_t **)_operator_data; /* temporary buffer handle */
+
+    if(*tbuf!=**tbuf2)
+        return(-1);
+    else {
+        (*tbuf2)++;
+        return(0);
+    }
+}   /* end test_select_hyper_iter1() */
+
+/****************************************************************
+**
+**  test_select_hyper(): Test basic H5S (dataspace) selection code.
+**      Tests hyperslabs of various sizes and dimensionalities.
+**
+****************************************************************/
+static void
+test_select_hyper(hid_t xfer_plist)
+{
+    hid_t	fid1;		/* HDF5 File IDs		*/
+    hid_t	dataset;	/* Dataset ID			*/
+    hid_t	sid1,sid2;	/* Dataspace ID			*/
+    hsize_t	dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    hsize_t	dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t	dims3[] = {SPACE3_DIM1, SPACE3_DIM2};
+    hsize_t	start[SPACE1_RANK];     /* Starting location of hyperslab */
+    hsize_t	stride[SPACE1_RANK];    /* Stride of hyperslab */
+    hsize_t	count[SPACE1_RANK];     /* Element count of hyperslab */
+    hsize_t	block[SPACE1_RANK];     /* Block size of hyperslab */
+    uint8_t    *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf;       /* temporary buffer pointer */
+    int        i,j;        /* Counters */
+    herr_t		ret;		/* Generic return value		*/
+    H5S_class_t ext_type;   /* Extent type */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Hyperslab Selection Functions\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=malloc(sizeof(uint8_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=calloc(sizeof(uint8_t),SPACE3_DIM1*SPACE3_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint8_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Verify extent type */
+    ext_type = H5Sget_simple_extent_type(sid1);
+    VERIFY(ext_type, H5S_SIMPLE, "H5Sget_simple_extent_type");
+
+    /* Test selecting stride==0 to verify failure */
+    start[0]=1; start[1]=0; start[2]=0;
+    stride[0]=0; stride[1]=0; stride[2]=0;
+    count[0]=2; count[1]=15; count[2]=13;
+    block[0]=1; block[1]=1; block[2]=1;
+    H5E_BEGIN_TRY {
+        ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Test selecting stride<block to verify failure */
+    start[0]=1; start[1]=0; start[2]=0;
+    stride[0]=1; stride[1]=1; stride[2]=1;
+    count[0]=2; count[1]=15; count[2]=13;
+    block[0]=2; block[1]=2; block[2]=2;
+    H5E_BEGIN_TRY {
+        ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select 2x15x13 hyperslab for disk dataset */
+    start[0]=1; start[1]=0; start[2]=0;
+    stride[0]=1; stride[1]=1; stride[2]=1;
+    count[0]=2; count[1]=15; count[2]=13;
+    block[0]=1; block[1]=1; block[2]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select 15x26 hyperslab for memory dataset */
+    start[0]=15; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=15; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,xfer_plist,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Exercise check for NULL buffer and valid selection */
+    H5E_BEGIN_TRY {
+        ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,xfer_plist,NULL);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 15x26 hyperslab for reading memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=15; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select 0x26 hyperslab to OR into current selection (should be a NOOP) */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=0; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_OR,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,xfer_plist,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Exercise check for NULL buffer and valid selection */
+    H5E_BEGIN_TRY {
+        ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,xfer_plist,NULL);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Dread");
+
+    /* Check that the values match with a dataset iterator */
+    tbuf=wbuf+(15*SPACE2_DIM2);
+    ret = H5Diterate(rbuf,H5T_NATIVE_UCHAR,sid2,test_select_hyper_iter1,&tbuf);
+    CHECK(ret, FAIL, "H5Diterate");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    free(wbuf);
+    free(rbuf);
+}   /* test_select_hyper() */
+
+struct pnt_iter {
+    hsize_t	coord[POINT1_NPOINTS*2][SPACE2_RANK]; /* Coordinates for point selection */
+    uint8_t *buf;           /* Buffer the points are in */
+    int offset;            /* Which point we are looking at */
+};
+
+/****************************************************************
+**
+**  test_select_point_iter1(): Iterator for checking point iteration
+**  (This is really ugly code, not a very good example of correct usage - QAK)
+**
+****************************************************************/
+herr_t
+test_select_point_iter1(void *_elem, hid_t UNUSED type_id, unsigned UNUSED ndim, const hsize_t UNUSED *point, void *_operator_data)
+{
+    uint8_t *elem=(uint8_t *)_elem;  /* Pointer to the element to examine */
+    uint8_t *tmp;                       /* temporary ptr to element in operator data */
+    struct pnt_iter *pnt_info=(struct pnt_iter *)_operator_data;
+
+    tmp=pnt_info->buf+(pnt_info->coord[pnt_info->offset][0]*SPACE2_DIM2)+pnt_info->coord[pnt_info->offset][1];
+    if(*elem!=*tmp)
+        return(-1);
+    else {
+        pnt_info->offset++;
+        return(0);
+    }
+}   /* end test_select_point_iter1() */
+
+/****************************************************************
+**
+**  test_select_point(): Test basic H5S (dataspace) selection code.
+**      Tests element selections between dataspaces of various sizes
+**      and dimensionalities.
+**
+****************************************************************/
+static void
+test_select_point(hid_t xfer_plist)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hsize_t		dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    hsize_t		dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t		dims3[] = {SPACE3_DIM1, SPACE3_DIM2};
+    hsize_t	coord1[POINT1_NPOINTS][SPACE1_RANK]; /* Coordinates for point selection */
+    hsize_t	temp_coord1[POINT1_NPOINTS][SPACE1_RANK]; /* Coordinates for point selection */
+    hsize_t	coord2[POINT1_NPOINTS][SPACE2_RANK]; /* Coordinates for point selection */
+    hsize_t	temp_coord2[POINT1_NPOINTS][SPACE2_RANK]; /* Coordinates for point selection */
+    hsize_t	coord3[POINT1_NPOINTS][SPACE3_RANK]; /* Coordinates for point selection */
+    hsize_t	temp_coord3[POINT1_NPOINTS][SPACE3_RANK]; /* Coordinates for point selection */
+    uint8_t    *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf;       /* temporary buffer pointer */
+    int        i,j;        /* Counters */
+    struct pnt_iter pi;     /* Custom Pointer iterator struct */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Element Selection Functions\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=malloc(sizeof(uint8_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=calloc(sizeof(uint8_t),SPACE3_DIM1*SPACE3_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint8_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for write buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select sequence of ten points for disk dataset */
+    coord1[0][0]=0; coord1[0][1]=10; coord1[0][2]= 5;
+    coord1[1][0]=1; coord1[1][1]= 2; coord1[1][2]= 7;
+    coord1[2][0]=2; coord1[2][1]= 4; coord1[2][2]= 9;
+    coord1[3][0]=0; coord1[3][1]= 6; coord1[3][2]=11;
+    coord1[4][0]=1; coord1[4][1]= 8; coord1[4][2]=13;
+    coord1[5][0]=2; coord1[5][1]=12; coord1[5][2]= 0;
+    coord1[6][0]=0; coord1[6][1]=14; coord1[6][2]= 2;
+    coord1[7][0]=1; coord1[7][1]= 0; coord1[7][2]= 4;
+    coord1[8][0]=2; coord1[8][1]= 1; coord1[8][2]= 6;
+    coord1[9][0]=0; coord1[9][1]= 3; coord1[9][2]= 8;
+    ret = H5Sselect_elements(sid1,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord1);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Verify correct elements selected */
+    H5Sget_select_elem_pointlist(sid1,(hsize_t)0,(hsize_t)POINT1_NPOINTS,(hsize_t *)temp_coord1);
+    for(i=0; i<POINT1_NPOINTS; i++) {
+        VERIFY(temp_coord1[i][0],coord1[i][0],"H5Sget_select_elem_pointlist");
+        VERIFY(temp_coord1[i][1],coord1[i][1],"H5Sget_select_elem_pointlist");
+        VERIFY(temp_coord1[i][2],coord1[i][2],"H5Sget_select_elem_pointlist");
+    } /* end for */
+
+    ret = (int)H5Sget_select_npoints(sid1);
+    VERIFY(ret, 10, "H5Sget_select_npoints");
+
+    /* Append another sequence of ten points to disk dataset */
+    coord1[0][0]=0; coord1[0][1]= 2; coord1[0][2]= 0;
+    coord1[1][0]=1; coord1[1][1]=10; coord1[1][2]= 8;
+    coord1[2][0]=2; coord1[2][1]= 8; coord1[2][2]=10;
+    coord1[3][0]=0; coord1[3][1]= 7; coord1[3][2]=12;
+    coord1[4][0]=1; coord1[4][1]= 3; coord1[4][2]=11;
+    coord1[5][0]=2; coord1[5][1]= 1; coord1[5][2]= 1;
+    coord1[6][0]=0; coord1[6][1]=13; coord1[6][2]= 7;
+    coord1[7][0]=1; coord1[7][1]=14; coord1[7][2]= 6;
+    coord1[8][0]=2; coord1[8][1]= 2; coord1[8][2]= 5;
+    coord1[9][0]=0; coord1[9][1]= 6; coord1[9][2]=13;
+    ret = H5Sselect_elements(sid1,H5S_SELECT_APPEND,POINT1_NPOINTS,(const hsize_t **)coord1);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Verify correct elements selected */
+    H5Sget_select_elem_pointlist(sid1,(hsize_t)POINT1_NPOINTS,(hsize_t)POINT1_NPOINTS,(hsize_t *)temp_coord1);
+    for(i=0; i<POINT1_NPOINTS; i++) {
+        VERIFY(temp_coord1[i][0],coord1[i][0],"H5Sget_select_elem_pointlist");
+        VERIFY(temp_coord1[i][1],coord1[i][1],"H5Sget_select_elem_pointlist");
+        VERIFY(temp_coord1[i][2],coord1[i][2],"H5Sget_select_elem_pointlist");
+    } /* end for */
+
+    ret = (int)H5Sget_select_npoints(sid1);
+    VERIFY(ret, 20, "H5Sget_select_npoints");
+
+    /* Select sequence of ten points for memory dataset */
+    coord2[0][0]=12; coord2[0][1]= 3;
+    coord2[1][0]=15; coord2[1][1]=13;
+    coord2[2][0]= 7; coord2[2][1]=25;
+    coord2[3][0]= 0; coord2[3][1]= 6;
+    coord2[4][0]=13; coord2[4][1]= 0;
+    coord2[5][0]=24; coord2[5][1]=11;
+    coord2[6][0]=12; coord2[6][1]=21;
+    coord2[7][0]=29; coord2[7][1]= 4;
+    coord2[8][0]= 8; coord2[8][1]= 8;
+    coord2[9][0]=19; coord2[9][1]=17;
+    ret = H5Sselect_elements(sid2,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord2);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Verify correct elements selected */
+    H5Sget_select_elem_pointlist(sid2,(hsize_t)0,(hsize_t)POINT1_NPOINTS,(hsize_t *)temp_coord2);
+    for(i=0; i<POINT1_NPOINTS; i++) {
+        VERIFY(temp_coord2[i][0],coord2[i][0],"H5Sget_select_elem_pointlist");
+        VERIFY(temp_coord2[i][1],coord2[i][1],"H5Sget_select_elem_pointlist");
+    } /* end for */
+
+    /* Save points for later iteration */
+    /* (these are in the second half of the buffer, because we are prepending */
+    /*  the next list of points to the beginning of the point selection list) */
+    HDmemcpy(((char *)pi.coord)+sizeof(coord2),coord2,sizeof(coord2));
+
+    ret = (int)H5Sget_select_npoints(sid2);
+    VERIFY(ret, 10, "H5Sget_select_npoints");
+
+    /* Append another sequence of ten points to memory dataset */
+    coord2[0][0]=24; coord2[0][1]= 0;
+    coord2[1][0]= 2; coord2[1][1]=25;
+    coord2[2][0]=13; coord2[2][1]=17;
+    coord2[3][0]= 8; coord2[3][1]= 3;
+    coord2[4][0]=29; coord2[4][1]= 4;
+    coord2[5][0]=11; coord2[5][1]=14;
+    coord2[6][0]= 5; coord2[6][1]=22;
+    coord2[7][0]=12; coord2[7][1]= 2;
+    coord2[8][0]=21; coord2[8][1]=12;
+    coord2[9][0]= 9; coord2[9][1]=18;
+    ret = H5Sselect_elements(sid2,H5S_SELECT_PREPEND,POINT1_NPOINTS,(const hsize_t **)coord2);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Verify correct elements selected */
+    H5Sget_select_elem_pointlist(sid2,(hsize_t)0,(hsize_t)POINT1_NPOINTS,(hsize_t *)temp_coord2);
+    for(i=0; i<POINT1_NPOINTS; i++) {
+        VERIFY(temp_coord2[i][0],coord2[i][0],"H5Sget_select_elem_pointlist");
+        VERIFY(temp_coord2[i][1],coord2[i][1],"H5Sget_select_elem_pointlist");
+    } /* end for */
+
+    ret = (int)H5Sget_select_npoints(sid2);
+    VERIFY(ret, 20, "H5Sget_select_npoints");
+
+    /* Save points for later iteration */
+    HDmemcpy(pi.coord,coord2,sizeof(coord2));
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,xfer_plist,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select sequence of points for read dataset */
+    coord3[0][0]= 0; coord3[0][1]= 2;
+    coord3[1][0]= 4; coord3[1][1]= 8;
+    coord3[2][0]=13; coord3[2][1]=13;
+    coord3[3][0]=14; coord3[3][1]=20;
+    coord3[4][0]= 7; coord3[4][1]= 9;
+    coord3[5][0]= 2; coord3[5][1]= 0;
+    coord3[6][0]= 9; coord3[6][1]=19;
+    coord3[7][0]= 1; coord3[7][1]=22;
+    coord3[8][0]=12; coord3[8][1]=21;
+    coord3[9][0]=11; coord3[9][1]= 6;
+    ret = H5Sselect_elements(sid2,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord3);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Verify correct elements selected */
+    H5Sget_select_elem_pointlist(sid2,(hsize_t)0,(hsize_t)POINT1_NPOINTS,(hsize_t *)temp_coord3);
+    for(i=0; i<POINT1_NPOINTS; i++) {
+        VERIFY(temp_coord3[i][0],coord3[i][0],"H5Sget_select_elem_pointlist");
+        VERIFY(temp_coord3[i][1],coord3[i][1],"H5Sget_select_elem_pointlist");
+    } /* end for */
+
+    ret = (int)H5Sget_select_npoints(sid2);
+    VERIFY(ret, 10, "H5Sget_select_npoints");
+
+    /* Append another sequence of ten points to disk dataset */
+    coord3[0][0]=14; coord3[0][1]=25;
+    coord3[1][0]= 0; coord3[1][1]= 0;
+    coord3[2][0]=11; coord3[2][1]=11;
+    coord3[3][0]= 5; coord3[3][1]=14;
+    coord3[4][0]= 3; coord3[4][1]= 5;
+    coord3[5][0]= 2; coord3[5][1]= 2;
+    coord3[6][0]= 7; coord3[6][1]=13;
+    coord3[7][0]= 9; coord3[7][1]=16;
+    coord3[8][0]=12; coord3[8][1]=22;
+    coord3[9][0]=13; coord3[9][1]= 9;
+    ret = H5Sselect_elements(sid2,H5S_SELECT_APPEND,POINT1_NPOINTS,(const hsize_t **)coord3);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Verify correct elements selected */
+    H5Sget_select_elem_pointlist(sid2,(hsize_t)POINT1_NPOINTS,(hsize_t)POINT1_NPOINTS,(hsize_t *)temp_coord3);
+    for(i=0; i<POINT1_NPOINTS; i++) {
+        VERIFY(temp_coord3[i][0],coord3[i][0],"H5Sget_select_elem_pointlist");
+        VERIFY(temp_coord3[i][1],coord3[i][1],"H5Sget_select_elem_pointlist");
+    } /* end for */
+    ret = (int)H5Sget_select_npoints(sid2);
+    VERIFY(ret, 20, "H5Sget_select_npoints");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,xfer_plist,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check that the values match with a dataset iterator */
+    pi.buf=wbuf;
+    pi.offset=0;
+    ret = H5Diterate(rbuf,H5T_NATIVE_UCHAR,sid2,test_select_point_iter1,&pi);
+    CHECK(ret, FAIL, "H5Diterate");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    free(wbuf);
+    free(rbuf);
+}   /* test_select_point() */
+
+/****************************************************************
+**
+**  test_select_all_iter1(): Iterator for checking all iteration
+**
+**
+****************************************************************/
+herr_t
+test_select_all_iter1(void *_elem, hid_t UNUSED type_id, unsigned UNUSED ndim, const hsize_t UNUSED *point, void *_operator_data)
+{
+    uint8_t *tbuf=(uint8_t *)_elem,     /* temporary buffer pointer */
+            **tbuf2=(uint8_t **)_operator_data; /* temporary buffer handle */
+
+    if(*tbuf!=**tbuf2)
+        return(-1);
+    else {
+        (*tbuf2)++;
+        return(0);
+    }
+}   /* end test_select_all_iter1() */
+
+/****************************************************************
+**
+**  test_select_none_iter1(): Iterator for checking none iteration
+**      (This is never supposed to be called, so it always returns -1)
+**
+****************************************************************/
+herr_t
+test_select_none_iter1(void UNUSED *_elem, hid_t UNUSED type_id, unsigned UNUSED ndim, const hsize_t UNUSED *point, void UNUSED *_operator_data)
+{
+    return(-1);
+}   /* end test_select_none_iter1() */
+
+/****************************************************************
+**
+**  test_select_all(): Test basic H5S (dataspace) selection code.
+**      Tests "all" selections.
+**
+****************************************************************/
+static void
+test_select_all(hid_t xfer_plist)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;	        /* Dataspace ID			*/
+    hsize_t		dims1[] = {SPACE4_DIM1, SPACE4_DIM2, SPACE4_DIM3};
+    uint8_t    *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf;       /* temporary buffer pointer */
+    int        i,j,k;      /* Counters */
+    herr_t		ret;		/* Generic return value		*/
+    H5S_class_t ext_type;   /* Extent type */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing 'All' Selection Functions\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=malloc(sizeof(uint8_t)*SPACE4_DIM1*SPACE4_DIM2*SPACE4_DIM3);
+    rbuf=calloc(sizeof(uint8_t),SPACE4_DIM1*SPACE4_DIM2*SPACE4_DIM3);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE4_DIM1; i++)
+        for(j=0; j<SPACE4_DIM2; j++)
+            for(k=0; k<SPACE4_DIM3; k++)
+                *tbuf++=(uint8_t)(((i*SPACE4_DIM2)+j)*SPACE4_DIM3)+k;
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE4_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Verify extent type */
+    ext_type = H5Sget_simple_extent_type(sid1);
+    VERIFY(ext_type, H5S_SIMPLE, "H5Sget_simple_extent_type");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_INT,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,H5S_ALL,H5S_ALL,xfer_plist,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,H5S_ALL,H5S_ALL,xfer_plist,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check that the values match with a dataset iterator */
+    tbuf=wbuf;
+    ret = H5Diterate(rbuf,H5T_NATIVE_UCHAR,sid1,test_select_all_iter1,&tbuf);
+    CHECK(ret, FAIL, "H5Diterate");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    free(wbuf);
+    free(rbuf);
+}   /* test_select_all() */
+
+/****************************************************************
+**
+**  test_select_all_hyper(): Test basic H5S (dataspace) selection code.
+**      Tests "all" and hyperslab selections.
+**
+****************************************************************/
+static void
+test_select_all_hyper(hid_t xfer_plist)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hsize_t		dims1[] = {SPACE3_DIM1, SPACE3_DIM2};
+    hsize_t		dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t		dims3[] = {SPACE3_DIM1, SPACE3_DIM2};
+    hsize_t		start[SPACE1_RANK];     /* Starting location of hyperslab */
+    hsize_t		stride[SPACE1_RANK];    /* Stride of hyperslab */
+    hsize_t		count[SPACE1_RANK];     /* Element count of hyperslab */
+    hsize_t		block[SPACE1_RANK];     /* Block size of hyperslab */
+    uint8_t    *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf;       /* temporary buffer pointer */
+    int        i,j;        /* Counters */
+    herr_t		ret;		/* Generic return value		*/
+    H5S_class_t ext_type;   /* Extent type */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing 'All' Selection Functions\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=malloc(sizeof(uint8_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=calloc(sizeof(uint8_t),SPACE3_DIM1*SPACE3_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint8_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE3_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Verify extent type */
+    ext_type = H5Sget_simple_extent_type(sid1);
+    VERIFY(ext_type, H5S_SIMPLE, "H5Sget_simple_extent_type");
+
+    /* Select entire 15x26 extent for disk dataset */
+    ret = H5Sselect_all(sid1);
+    CHECK(ret, FAIL, "H5Sselect_all");
+
+    /* Select 15x26 hyperslab for memory dataset */
+    start[0]=15; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=15; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,xfer_plist,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 15x26 hyperslab for reading memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=15; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select no extent for disk dataset */
+    ret = H5Sselect_none(sid1);
+    CHECK(ret, FAIL, "H5Sselect_all");
+
+    /* Read selection from disk (should fail with no selection defined) */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,xfer_plist,rbuf);
+    VERIFY(ret, FAIL, "H5Dread");
+
+    /* Select entire 15x26 extent for disk dataset */
+    ret = H5Sselect_all(sid1);
+    CHECK(ret, FAIL, "H5Sselect_all");
+
+    /* Read selection from disk (should work now) */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,xfer_plist,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check that the values match with a dataset iterator */
+    tbuf=wbuf+(15*SPACE2_DIM2);
+    ret = H5Diterate(rbuf,H5T_NATIVE_UCHAR,sid2,test_select_all_iter1,&tbuf);
+    CHECK(ret, FAIL, "H5Diterate");
+
+    /* A quick check to make certain that iterating through a "none" selection works */
+    ret = H5Sselect_none(sid2);
+    CHECK(ret, FAIL, "H5Sselect_all");
+    ret = H5Diterate(rbuf,H5T_NATIVE_UCHAR,sid2,test_select_none_iter1,&tbuf);
+    CHECK(ret, FAIL, "H5Diterate");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    free(wbuf);
+    free(rbuf);
+}   /* test_select_all_hyper() */
+
+/****************************************************************
+**
+**  test_select_combo(): Test basic H5S (dataspace) selection code.
+**      Tests combinations of element and hyperslab selections between
+**      dataspaces of various sizes and dimensionalities.
+**
+****************************************************************/
+static void
+test_select_combo(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hsize_t		dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    hsize_t		dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t		dims3[] = {SPACE3_DIM1, SPACE3_DIM2};
+    hsize_t		coord1[POINT1_NPOINTS][SPACE1_RANK]; /* Coordinates for point selection */
+    hsize_t		start[SPACE1_RANK];     /* Starting location of hyperslab */
+    hsize_t		stride[SPACE1_RANK];    /* Stride of hyperslab */
+    hsize_t		count[SPACE1_RANK];     /* Element count of hyperslab */
+    hsize_t		block[SPACE1_RANK];     /* Block size of hyperslab */
+    uint8_t    *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf,       /* temporary buffer pointer */
+               *tbuf2;      /* temporary buffer pointer */
+    int        i,j;        /* Counters */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Combination of Hyperslab & Element Selection Functions\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=HDmalloc(sizeof(uint8_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=HDcalloc(sizeof(uint8_t),SPACE3_DIM1*SPACE3_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint8_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for write buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select sequence of ten points for disk dataset */
+    coord1[0][0]=0; coord1[0][1]=10; coord1[0][2]= 5;
+    coord1[1][0]=1; coord1[1][1]= 2; coord1[1][2]= 7;
+    coord1[2][0]=2; coord1[2][1]= 4; coord1[2][2]= 9;
+    coord1[3][0]=0; coord1[3][1]= 6; coord1[3][2]=11;
+    coord1[4][0]=1; coord1[4][1]= 8; coord1[4][2]=13;
+    coord1[5][0]=2; coord1[5][1]=12; coord1[5][2]= 0;
+    coord1[6][0]=0; coord1[6][1]=14; coord1[6][2]= 2;
+    coord1[7][0]=1; coord1[7][1]= 0; coord1[7][2]= 4;
+    coord1[8][0]=2; coord1[8][1]= 1; coord1[8][2]= 6;
+    coord1[9][0]=0; coord1[9][1]= 3; coord1[9][2]= 8;
+    ret = H5Sselect_elements(sid1,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord1);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Select 1x10 hyperslab for writing memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=1; count[1]=10;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 10x1 hyperslab for reading memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=10; count[1]=1;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read with data written out */
+    for(i=0; i<POINT1_NPOINTS; i++) {
+        tbuf=wbuf+i;
+        tbuf2=rbuf+(i*SPACE3_DIM2);
+        if(*tbuf!=*tbuf2)
+            TestErrPrintf("element values don't match!, i=%d\n",i);
+    } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+    HDfree(rbuf);
+}   /* test_select_combo() */
+
+int
+compare_size_t(const void *s1, const void *s2)
+{
+    if(*(const size_t *)s1<*(const size_t *)s2)
+        return(-1);
+    else
+        if(*(const size_t *)s1>*(const size_t *)s2)
+            return(1);
+        else
+            return(0);
+}
+
+/****************************************************************
+**
+**  test_select_hyper_stride(): Test H5S (dataspace) selection code.
+**      Tests strided hyperslabs of various sizes and dimensionalities.
+**
+****************************************************************/
+static void
+test_select_hyper_stride(hid_t xfer_plist)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hsize_t		dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    hsize_t		dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t		dims3[] = {SPACE3_DIM1, SPACE3_DIM2};
+    hsize_t		start[SPACE1_RANK];     /* Starting location of hyperslab */
+    hsize_t		stride[SPACE1_RANK];    /* Stride of hyperslab */
+    hsize_t		count[SPACE1_RANK];     /* Element count of hyperslab */
+    hsize_t		block[SPACE1_RANK];     /* Block size of hyperslab */
+    uint16_t   *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf,       /* temporary buffer pointer */
+               *tbuf2;      /* temporary buffer pointer */
+    size_t      loc1[72]={  /* Gruesomely ugly way to make certain hyperslab locations are checked correctly */
+       27, 28, 29, 53, 54, 55, 79, 80, 81,   /* Block #1 */
+       32, 33, 34, 58, 59, 60, 84, 85, 86,   /* Block #2 */
+      157,158,159,183,184,185,209,210,211,   /* Block #3 */
+      162,163,164,188,189,190,214,215,216,   /* Block #4 */
+      287,288,289,313,314,315,339,340,341,   /* Block #5 */
+      292,293,294,318,319,320,344,345,346,   /* Block #6 */
+      417,418,419,443,444,445,469,470,471,   /* Block #7 */
+      422,423,424,448,449,450,474,475,476,   /* Block #8 */
+            };
+    size_t      loc2[72]={
+        0,  1,  2, 26, 27, 28,    /* Block #1 */
+        4,  5,  6, 30, 31, 32,    /* Block #2 */
+        8,  9, 10, 34, 35, 36,    /* Block #3 */
+       12, 13, 14, 38, 39, 40,    /* Block #4 */
+      104,105,106,130,131,132,    /* Block #5 */
+      108,109,110,134,135,136,    /* Block #6 */
+      112,113,114,138,139,140,    /* Block #7 */
+      116,117,118,142,143,144,    /* Block #8 */
+      208,209,210,234,235,236,    /* Block #9 */
+      212,213,214,238,239,240,    /* Block #10 */
+      216,217,218,242,243,244,    /* Block #11 */
+      220,221,222,246,247,248,    /* Block #12 */
+            };
+    int        i,j;        /* Counters */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Hyperslabs with Strides Functionality\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=HDmalloc(sizeof(uint16_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=HDcalloc(sizeof(uint16_t),SPACE3_DIM1*SPACE3_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint16_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 2x3x3 count with a stride of 2x4x3 & 1x2x2 block hyperslab for disk dataset */
+    start[0]=0; start[1]=0; start[2]=0;
+    stride[0]=2; stride[1]=4; stride[2]=3;
+    count[0]=2; count[1]=3; count[2]=3;
+    block[0]=1; block[1]=2; block[2]=2;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select 4x2 count with a stride of 5x5 & 3x3 block hyperslab for memory dataset */
+    start[0]=1; start[1]=1;
+    stride[0]=5; stride[1]=5;
+    count[0]=4; count[1]=2;
+    block[0]=3; block[1]=3;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_STD_U16LE,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_USHORT,sid2,sid1,xfer_plist,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 3x4 count with a stride of 4x4 & 2x3 block hyperslab for memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=4; stride[1]=4;
+    count[0]=3; count[1]=4;
+    block[0]=2; block[1]=3;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_USHORT,sid2,sid1,xfer_plist,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Sort the locations into the proper order */
+    qsort(loc1,72,sizeof(size_t),compare_size_t);
+    qsort(loc2,72,sizeof(size_t),compare_size_t);
+    /* Compare data read with data written out */
+    for(i=0; i<72; i++) {
+        tbuf=wbuf+loc1[i];
+        tbuf2=rbuf+loc2[i];
+        if(*tbuf!=*tbuf2) {
+            printf("%d: hyperslab values don't match!, loc1[%d]=%d, loc2[%d]=%d\n",__LINE__,i,(int)loc1[i],i,(int)loc2[i]);
+            printf("wbuf=%p, tbuf=%p, rbuf=%p, tbuf2=%p\n",(void *)wbuf,(void *)tbuf,(void *)rbuf,(void *)tbuf2);
+            TestErrPrintf("*tbuf=%u, *tbuf2=%u\n",(unsigned)*tbuf,(unsigned)*tbuf2);
+        } /* end if */
+    } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+    HDfree(rbuf);
+}   /* test_select_hyper_stride() */
+
+/****************************************************************
+**
+**  test_select_hyper_contig(): Test H5S (dataspace) selection code.
+**      Tests contiguous hyperslabs of various sizes and dimensionalities.
+**
+****************************************************************/
+static void
+test_select_hyper_contig(hid_t dset_type, hid_t xfer_plist)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hsize_t		dims2[] = {SPACE2_DIM2, SPACE2_DIM1};
+    hsize_t		start[SPACE1_RANK];     /* Starting location of hyperslab */
+    hsize_t		stride[SPACE1_RANK];    /* Stride of hyperslab */
+    hsize_t		count[SPACE1_RANK];     /* Element count of hyperslab */
+    hsize_t		block[SPACE1_RANK];     /* Block size of hyperslab */
+    uint16_t   *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf;       /* temporary buffer pointer */
+    int        i,j;        /* Counters */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Contiguous Hyperslabs Functionality\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=HDmalloc(sizeof(uint16_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=HDcalloc(sizeof(uint16_t),SPACE2_DIM1*SPACE2_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint16_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 12x10 count with a stride of 1x3 & 3x3 block hyperslab for disk dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=3;
+    count[0]=12; count[1]=10;
+    block[0]=1; block[1]=3;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select 4x5 count with a stride of 3x6 & 3x6 block hyperslab for memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=3; stride[1]=6;
+    count[0]=4; count[1]=5;
+    block[0]=3; block[1]=6;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",dset_type,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_USHORT,sid2,sid1,xfer_plist,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 6x5 count with a stride of 2x6 & 2x6 block hyperslab for disk dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=2; stride[1]=6;
+    count[0]=6; count[1]=5;
+    block[0]=2; block[1]=6;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select 3x15 count with a stride of 4x2 & 4x2 block hyperslab for memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=4; stride[1]=2;
+    count[0]=3; count[1]=15;
+    block[0]=4; block[1]=2;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_USHORT,sid2,sid1,xfer_plist,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read with data written out */
+    if(HDmemcmp(rbuf,wbuf,sizeof(uint16_t)*30*12)) {
+        TestErrPrintf("hyperslab values don't match! Line=%d\n",__LINE__);
+#ifdef QAK
+        for(i=0, tbuf=wbuf; i<12; i++)
+            for(j=0; j<30; j++)
+                printf("i=%d, j=%d, *wbuf=%u, *rbuf=%u\n",i,j,(unsigned)*(wbuf+i*30+j),(unsigned)*(rbuf+i*30+j));
+#endif /* QAK */
+    } /* end if */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+    HDfree(rbuf);
+}   /* test_select_hyper_contig() */
+
+/****************************************************************
+**
+**  test_select_hyper_contig2(): Test H5S (dataspace) selection code.
+**      Tests more contiguous hyperslabs of various sizes and dimensionalities.
+**
+****************************************************************/
+static void
+test_select_hyper_contig2(hid_t dset_type, hid_t xfer_plist)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hsize_t		dims2[] = {SPACE8_DIM4, SPACE8_DIM3, SPACE8_DIM2, SPACE8_DIM1};
+    hsize_t	        start[SPACE8_RANK];     /* Starting location of hyperslab */
+    hsize_t		count[SPACE8_RANK];     /* Element count of hyperslab */
+    uint16_t   *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf;       /* temporary buffer pointer */
+    int        i,j,k,l;     /* Counters */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing More Contiguous Hyperslabs Functionality\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=HDmalloc(sizeof(uint16_t)*SPACE8_DIM1*SPACE8_DIM2*SPACE8_DIM3*SPACE8_DIM4);
+    rbuf=HDcalloc(sizeof(uint16_t),SPACE8_DIM1*SPACE8_DIM2*SPACE8_DIM3*SPACE8_DIM4);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE8_DIM1; i++)
+        for(j=0; j<SPACE8_DIM2; j++)
+            for(k=0; k<SPACE8_DIM3; k++)
+                for(l=0; l<SPACE8_DIM4; l++)
+                    *tbuf++=(uint16_t)((i*SPACE8_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE8_RANK, dims2, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE8_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select contiguous hyperslab for disk dataset */
+    start[0]=0; start[1]=0; start[2]=0; start[3]=0;
+    count[0]=2; count[1]=SPACE8_DIM3; count[2]=SPACE8_DIM2; count[3]=SPACE8_DIM1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select contiguous hyperslab in memory */
+    start[0]=0; start[1]=0; start[2]=0; start[3]=0;
+    count[0]=2; count[1]=SPACE8_DIM3; count[2]=SPACE8_DIM2; count[3]=SPACE8_DIM1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",dset_type,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_USHORT,sid2,sid1,xfer_plist,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE8_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select contiguous hyperslab in memory */
+    start[0]=0; start[1]=0; start[2]=0; start[3]=0;
+    count[0]=2; count[1]=SPACE8_DIM3; count[2]=SPACE8_DIM2; count[3]=SPACE8_DIM1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select contiguous hyperslab in memory */
+    start[0]=0; start[1]=0; start[2]=0; start[3]=0;
+    count[0]=2; count[1]=SPACE8_DIM3; count[2]=SPACE8_DIM2; count[3]=SPACE8_DIM1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_USHORT,sid2,sid1,xfer_plist,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read with data written out */
+    if(HDmemcmp(rbuf,wbuf,sizeof(uint16_t)*2*SPACE8_DIM3*SPACE8_DIM2*SPACE8_DIM1)) {
+        TestErrPrintf("Error: hyperslab values don't match!\n");
+#ifdef QAK
+        for(i=0, tbuf=wbuf; i<12; i++)
+            for(j=0; j<30; j++)
+                printf("i=%d, j=%d, *wbuf=%u, *rbuf=%u\n",i,j,(unsigned)*(wbuf+i*30+j),(unsigned)*(rbuf+i*30+j));
+#endif /* QAK */
+    } /* end if */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+    HDfree(rbuf);
+}   /* test_select_hyper_contig2() */
+
+/****************************************************************
+**
+**  test_select_hyper_contig3(): Test H5S (dataspace) selection code.
+**      Tests contiguous hyperslabs of various sizes and dimensionalities.
+**  This test uses a hyperslab that is contiguous in the lowest dimension,
+**  not contiguous in a dimension, then has a selection across the entire next
+**  dimension (which should be "flattened" out also).
+**
+****************************************************************/
+static void
+test_select_hyper_contig3(hid_t dset_type, hid_t xfer_plist)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hsize_t		dims2[] = {SPACE8_DIM4, SPACE8_DIM3, SPACE8_DIM2, SPACE8_DIM1};
+    hsize_t	        start[SPACE8_RANK];     /* Starting location of hyperslab */
+    hsize_t		count[SPACE8_RANK];     /* Element count of hyperslab */
+    uint16_t   *wbuf,           /* Buffer to write to disk */
+               *rbuf,           /* Buffer read from disk */
+               *tbuf, *tbuf2;   /* Temporary buffer pointers */
+    unsigned   i,j,k,l;     /* Counters */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Yet More Contiguous Hyperslabs Functionality\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=HDmalloc(sizeof(uint16_t)*SPACE8_DIM1*SPACE8_DIM2*SPACE8_DIM3*SPACE8_DIM4);
+    rbuf=HDcalloc(sizeof(uint16_t),SPACE8_DIM1*SPACE8_DIM2*SPACE8_DIM3*SPACE8_DIM4);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE8_DIM4; i++)
+        for(j=0; j<SPACE8_DIM3; j++)
+            for(k=0; k<SPACE8_DIM2; k++)
+                for(l=0; l<SPACE8_DIM1; l++)
+                    *tbuf++=(uint16_t)((k*SPACE8_DIM2)+l);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE8_RANK, dims2, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE8_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select semi-contiguous hyperslab for disk dataset */
+    start[0]=0; start[1]=0; start[2]=SPACE8_DIM2/2; start[3]=0;
+    count[0]=2; count[1]=SPACE8_DIM3; count[2]=SPACE8_DIM2/2; count[3]=SPACE8_DIM1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select semi-contiguous hyperslab in memory */
+    start[0]=0; start[1]=0; start[2]=SPACE8_DIM2/2; start[3]=0;
+    count[0]=2; count[1]=SPACE8_DIM3; count[2]=SPACE8_DIM2/2; count[3]=SPACE8_DIM1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",dset_type,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_USHORT,sid2,sid1,xfer_plist,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE8_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select semi-contiguous hyperslab in memory */
+    start[0]=0; start[1]=0; start[2]=SPACE8_DIM2/2; start[3]=0;
+    count[0]=2; count[1]=SPACE8_DIM3; count[2]=SPACE8_DIM2/2; count[3]=SPACE8_DIM1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select semi-contiguous hyperslab in memory */
+    start[0]=0; start[1]=0; start[2]=SPACE8_DIM2/2; start[3]=0;
+    count[0]=2; count[1]=SPACE8_DIM3; count[2]=SPACE8_DIM2/2; count[3]=SPACE8_DIM1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_USHORT,sid2,sid1,xfer_plist,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read with data written out */
+    for(i=0, tbuf=wbuf,tbuf2=rbuf; i<SPACE8_DIM4; i++)
+        for(j=0; j<SPACE8_DIM3; j++)
+            for(k=0; k<SPACE8_DIM2; k++)
+                for(l=0; l<SPACE8_DIM1; l++,tbuf++,tbuf2++)
+                    if( (i>=start[0] && i<(start[0]+count[0])) &&
+                            (j>=start[1] && j<(start[1]+count[1])) &&
+                            (k>=start[2] && k<(start[2]+count[2])) &&
+                            (l>=start[3] && l<(start[3]+count[3])) ) {
+                        if(*tbuf!=*tbuf2) {
+                            printf("Error: hyperslab values don't match!\n");
+                            TestErrPrintf("Line: %d, i=%u, j=%u, k=%u, l=%u, *tbuf=%u,*tbuf2=%u\n",__LINE__,i,j,k,l,(unsigned)*tbuf,(unsigned)*tbuf2);
+                        } /* end if */
+                    } /* end if */
+                    else {
+                        if(*tbuf2!=0) {
+                            printf("Error: invalid data in read buffer!\n");
+                            TestErrPrintf("Line: %d, i=%u, j=%u, k=%u, l=%u, *tbuf=%u,*tbuf2=%u\n",__LINE__,i,j,k,l,(unsigned)*tbuf,(unsigned)*tbuf2);
+                        } /* end if */
+                    } /* end else */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+    HDfree(rbuf);
+}   /* test_select_hyper_contig3() */
+
+/****************************************************************
+**
+**  test_select_hyper_copy(): Test H5S (dataspace) selection code.
+**      Tests copying hyperslab selections
+**
+****************************************************************/
+static void
+test_select_hyper_copy(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		data1,data2;	/* Dataset IDs			*/
+    hid_t		sid1,sid2,sid3; /* Dataspace IDs		*/
+    hsize_t		dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    hsize_t		dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t		dims3[] = {SPACE3_DIM1, SPACE3_DIM2};
+    hsize_t		start[SPACE1_RANK];     /* Starting location of hyperslab */
+    hsize_t		stride[SPACE1_RANK];    /* Stride of hyperslab */
+    hsize_t		count[SPACE1_RANK];     /* Element count of hyperslab */
+    hsize_t		block[SPACE1_RANK];     /* Block size of hyperslab */
+    uint16_t   *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* 1st buffer read from disk */
+               *rbuf2,      /* 2nd buffer read from disk */
+               *tbuf;       /* temporary buffer pointer */
+    int        i,j;        /* Counters */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Hyperslabs with Strides Functionality\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=HDmalloc(sizeof(uint16_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=HDcalloc(sizeof(uint16_t),SPACE3_DIM1*SPACE3_DIM2);
+    rbuf2=HDcalloc(sizeof(uint16_t),SPACE3_DIM1*SPACE3_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint16_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 2x3x3 count with a stride of 2x4x3 & 1x2x2 block hyperslab for disk dataset */
+    start[0]=0; start[1]=0; start[2]=0;
+    stride[0]=2; stride[1]=4; stride[2]=3;
+    count[0]=2; count[1]=3; count[2]=3;
+    block[0]=1; block[1]=2; block[2]=2;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select 4x2 count with a stride of 5x5 & 3x3 block hyperslab for memory dataset */
+    start[0]=1; start[1]=1;
+    stride[0]=5; stride[1]=5;
+    count[0]=4; count[1]=2;
+    block[0]=3; block[1]=3;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Make a copy of the dataspace to write */
+    sid3 = H5Scopy(sid2);
+    CHECK(sid3, FAIL, "H5Scopy");
+
+    /* Create a dataset */
+    data1=H5Dcreate(fid1,"Dataset1",H5T_STD_U16LE,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(data1,H5T_STD_U16LE,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create another dataset */
+    data2=H5Dcreate(fid1,"Dataset2",H5T_STD_U16LE,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(data2,H5T_STD_U16LE,sid3,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid3);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 3x4 count with a stride of 4x4 & 2x3 block hyperslab for memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=4; stride[1]=4;
+    count[0]=3; count[1]=4;
+    block[0]=2; block[1]=3;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Make a copy of the dataspace to read */
+    sid3 = H5Scopy(sid2);
+    CHECK(sid3, FAIL, "H5Scopy");
+
+    /* Read selection from disk */
+    ret=H5Dread(data1,H5T_STD_U16LE,sid2,sid1,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Read selection from disk */
+    ret=H5Dread(data2,H5T_STD_U16LE,sid3,sid1,H5P_DEFAULT,rbuf2);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read with data written out */
+    if(HDmemcmp(rbuf,rbuf2,sizeof(uint16_t)*SPACE3_DIM1*SPACE3_DIM2)) {
+        TestErrPrintf("hyperslab values don't match! Line=%d\n",__LINE__);
+#ifdef QAK
+        for(i=0; i<SPACE3_DIM1; i++)
+            for(j=0; j<SPACE3_DIM2; j++)
+                if((unsigned)*(rbuf+i*SPACE3_DIM2+j)!=(unsigned)*(rbuf2+i*SPACE3_DIM2+j))
+                    printf("i=%d, j=%d, *rbuf=%u, *rbuf2=%u\n",i,j,(unsigned)*(rbuf+i*SPACE3_DIM2+j),(unsigned)*(rbuf2+i*SPACE3_DIM2+j));
+#endif /* QAK */
+    } /* end if */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close 2nd memory dataspace */
+    ret = H5Sclose(sid3);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(data1);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(data2);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+    HDfree(rbuf);
+    HDfree(rbuf2);
+}   /* test_select_hyper_copy() */
+
+/****************************************************************
+**
+**  test_select_point_copy(): Test H5S (dataspace) selection code.
+**      Tests copying point selections
+**
+****************************************************************/
+static void
+test_select_point_copy(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		data1,data2;	/* Dataset IDs			*/
+    hid_t		sid1,sid2,sid3; /* Dataspace IDs		*/
+    hsize_t		dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    hsize_t		dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t		dims3[] = {SPACE3_DIM1, SPACE3_DIM2};
+    hsize_t	coord1[POINT1_NPOINTS][SPACE1_RANK]; /* Coordinates for point selection */
+    hsize_t	coord2[POINT1_NPOINTS][SPACE2_RANK]; /* Coordinates for point selection */
+    hsize_t	coord3[POINT1_NPOINTS][SPACE3_RANK]; /* Coordinates for point selection */
+    uint16_t   *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* 1st buffer read from disk */
+               *rbuf2,      /* 2nd buffer read from disk */
+               *tbuf;       /* temporary buffer pointer */
+    int        i,j;        /* Counters */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Hyperslabs with Strides Functionality\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=HDmalloc(sizeof(uint16_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=HDcalloc(sizeof(uint16_t),SPACE3_DIM1*SPACE3_DIM2);
+    rbuf2=HDcalloc(sizeof(uint16_t),SPACE3_DIM1*SPACE3_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint16_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select sequence of ten points for disk dataset */
+    coord1[0][0]=0; coord1[0][1]=10; coord1[0][2]= 5;
+    coord1[1][0]=1; coord1[1][1]= 2; coord1[1][2]= 7;
+    coord1[2][0]=2; coord1[2][1]= 4; coord1[2][2]= 9;
+    coord1[3][0]=0; coord1[3][1]= 6; coord1[3][2]=11;
+    coord1[4][0]=1; coord1[4][1]= 8; coord1[4][2]=13;
+    coord1[5][0]=2; coord1[5][1]=12; coord1[5][2]= 0;
+    coord1[6][0]=0; coord1[6][1]=14; coord1[6][2]= 2;
+    coord1[7][0]=1; coord1[7][1]= 0; coord1[7][2]= 4;
+    coord1[8][0]=2; coord1[8][1]= 1; coord1[8][2]= 6;
+    coord1[9][0]=0; coord1[9][1]= 3; coord1[9][2]= 8;
+    ret = H5Sselect_elements(sid1,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord1);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Select sequence of ten points for write dataset */
+    coord2[0][0]=12; coord2[0][1]= 3;
+    coord2[1][0]=15; coord2[1][1]=13;
+    coord2[2][0]= 7; coord2[2][1]=25;
+    coord2[3][0]= 0; coord2[3][1]= 6;
+    coord2[4][0]=13; coord2[4][1]= 0;
+    coord2[5][0]=24; coord2[5][1]=11;
+    coord2[6][0]=12; coord2[6][1]=21;
+    coord2[7][0]=29; coord2[7][1]= 4;
+    coord2[8][0]= 8; coord2[8][1]= 8;
+    coord2[9][0]=19; coord2[9][1]=17;
+    ret = H5Sselect_elements(sid2,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord2);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Make a copy of the dataspace to write */
+    sid3 = H5Scopy(sid2);
+    CHECK(sid3, FAIL, "H5Scopy");
+
+    /* Create a dataset */
+    data1=H5Dcreate(fid1,"Dataset1",H5T_STD_U16LE,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(data1,H5T_STD_U16LE,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create another dataset */
+    data2=H5Dcreate(fid1,"Dataset2",H5T_STD_U16LE,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(data2,H5T_STD_U16LE,sid3,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid3);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select sequence of points for read dataset */
+    coord3[0][0]= 0; coord3[0][1]= 2;
+    coord3[1][0]= 4; coord3[1][1]= 8;
+    coord3[2][0]=13; coord3[2][1]=13;
+    coord3[3][0]=14; coord3[3][1]=25;
+    coord3[4][0]= 7; coord3[4][1]= 9;
+    coord3[5][0]= 2; coord3[5][1]= 0;
+    coord3[6][0]= 9; coord3[6][1]=19;
+    coord3[7][0]= 1; coord3[7][1]=22;
+    coord3[8][0]=12; coord3[8][1]=21;
+    coord3[9][0]=11; coord3[9][1]= 6;
+    ret = H5Sselect_elements(sid2,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord3);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Make a copy of the dataspace to read */
+    sid3 = H5Scopy(sid2);
+    CHECK(sid3, FAIL, "H5Scopy");
+
+    /* Read selection from disk */
+    ret=H5Dread(data1,H5T_STD_U16LE,sid2,sid1,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Read selection from disk */
+    ret=H5Dread(data2,H5T_STD_U16LE,sid3,sid1,H5P_DEFAULT,rbuf2);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read with data written out */
+    if(HDmemcmp(rbuf,rbuf2,sizeof(uint16_t)*SPACE3_DIM1*SPACE3_DIM2))
+        TestErrPrintf("point values don't match!\n");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close 2nd memory dataspace */
+    ret = H5Sclose(sid3);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(data1);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(data2);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+    HDfree(rbuf);
+    HDfree(rbuf2);
+}   /* test_select_point_copy() */
+
+/****************************************************************
+**
+**  test_select_hyper_offset(): Test basic H5S (dataspace) selection code.
+**      Tests hyperslabs of various sizes and dimensionalities with selection
+**      offsets.
+**
+****************************************************************/
+static void
+test_select_hyper_offset(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hsize_t		dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    hsize_t		dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t		dims3[] = {SPACE3_DIM1, SPACE3_DIM2};
+    hsize_t		start[SPACE1_RANK];     /* Starting location of hyperslab */
+    hsize_t		stride[SPACE1_RANK];    /* Stride of hyperslab */
+    hsize_t		count[SPACE1_RANK];     /* Element count of hyperslab */
+    hsize_t		block[SPACE1_RANK];     /* Block size of hyperslab */
+    hssize_t	offset[SPACE1_RANK];    /* Offset of selection */
+    uint8_t    *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf,       /* temporary buffer pointer */
+               *tbuf2;      /* temporary buffer pointer */
+    int        i,j;        /* Counters */
+    herr_t		ret;		/* Generic return value		*/
+    htri_t	    valid;		/* Generic boolean return value		*/
+    H5S_class_t ext_type;   /* Extent type */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Hyperslab Selection Functions with Offsets\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=HDmalloc(sizeof(uint8_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=HDcalloc(sizeof(uint8_t),SPACE3_DIM1*SPACE3_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint8_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Verify extent type */
+    ext_type = H5Sget_simple_extent_type(sid1);
+    VERIFY(ext_type, H5S_SIMPLE, "H5Sget_simple_extent_type");
+
+    /* Select 2x15x13 hyperslab for disk dataset */
+    start[0]=1; start[1]=0; start[2]=0;
+    stride[0]=1; stride[1]=1; stride[2]=1;
+    count[0]=2; count[1]=15; count[2]=13;
+    block[0]=1; block[1]=1; block[2]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Check a valid offset */
+    offset[0]=-1; offset[1]=0; offset[2]=0;
+    ret = H5Soffset_simple(sid1,offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+    valid = H5Sselect_valid(sid1);
+    VERIFY(valid, TRUE, "H5Sselect_valid");
+
+    /* Check an invalid offset */
+    offset[0]=10; offset[1]=0; offset[2]=0;
+    ret = H5Soffset_simple(sid1,offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+    valid = H5Sselect_valid(sid1);
+    VERIFY(valid, FALSE, "H5Sselect_valid");
+
+    /* Reset offset */
+    offset[0]=0; offset[1]=0; offset[2]=0;
+    ret = H5Soffset_simple(sid1,offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+    valid = H5Sselect_valid(sid1);
+    VERIFY(valid, TRUE, "H5Sselect_valid");
+
+    /* Select 15x26 hyperslab for memory dataset */
+    start[0]=15; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=15; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Choose a valid offset for the memory dataspace */
+    offset[0]=-10; offset[1]=0;
+    ret = H5Soffset_simple(sid2,offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+    valid = H5Sselect_valid(sid2);
+    VERIFY(valid, TRUE, "H5Sselect_valid");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 15x26 hyperslab for reading memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=15; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read with data written out */
+    for(i=0; i<SPACE3_DIM1; i++) {
+        tbuf=wbuf+((i+5)*SPACE2_DIM2);
+        tbuf2=rbuf+(i*SPACE3_DIM2);
+        for(j=0; j<SPACE3_DIM2; j++, tbuf++, tbuf2++) {
+            if(*tbuf!=*tbuf2)
+                TestErrPrintf("%d: hyperslab values don't match!, i=%d, j=%d, *tbuf=%u, *tbuf2=%u\n",__LINE__,i,j,(unsigned)*tbuf,(unsigned)*tbuf2);
+        } /* end for */
+    } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+    HDfree(rbuf);
+}   /* test_select_hyper_offset() */
+
+/****************************************************************
+**
+**  test_select_hyper_offset2(): Test basic H5S (dataspace) selection code.
+**      Tests optimized hyperslab I/O with selection offsets.
+**
+****************************************************************/
+static void
+test_select_hyper_offset2(void)
+{
+    hid_t	fid1;		/* HDF5 File IDs		*/
+    hid_t	dataset;	/* Dataset ID			*/
+    hid_t	sid1,sid2;	/* Dataspace ID			*/
+    hsize_t	dims1[] = {SPACE7_DIM1, SPACE7_DIM2};
+    hsize_t	dims2[] = {SPACE7_DIM1, SPACE7_DIM2};
+    hsize_t	start[SPACE7_RANK];     /* Starting location of hyperslab */
+    hsize_t	count[SPACE7_RANK];     /* Element count of hyperslab */
+    hssize_t	offset[SPACE7_RANK];    /* Offset of selection */
+    uint8_t    *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf,       /* temporary buffer pointer */
+               *tbuf2;      /* temporary buffer pointer */
+    int         i,j;        /* Counters */
+    herr_t	ret;        /* Generic return value */
+    htri_t	valid;      /* Generic boolean return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing More Hyperslab Selection Functions with Offsets\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=HDmalloc(sizeof(uint8_t)*SPACE7_DIM1*SPACE7_DIM2);
+    rbuf=HDcalloc(sizeof(uint8_t),SPACE7_DIM1*SPACE7_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE7_DIM1; i++)
+        for(j=0; j<SPACE7_DIM2; j++)
+            *tbuf++=(uint8_t)((i*SPACE7_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE7_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE7_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 4x10 hyperslab for disk dataset */
+    start[0]=1; start[1]=0;
+    count[0]=4; count[1]=10;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Set offset */
+    offset[0]=1; offset[1]=0;
+    ret = H5Soffset_simple(sid1,offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+    valid = H5Sselect_valid(sid1);
+    VERIFY(valid, TRUE, "H5Sselect_valid");
+
+    /* Select 4x10 hyperslab for memory dataset */
+    start[0]=1; start[1]=0;
+    count[0]=4; count[1]=10;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Choose a valid offset for the memory dataspace */
+    offset[0]=2; offset[1]=0;
+    ret = H5Soffset_simple(sid2,offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+    valid = H5Sselect_valid(sid2);
+    VERIFY(valid, TRUE, "H5Sselect_valid");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read with data written out */
+    for(i=0; i<4; i++) {
+        tbuf=wbuf+((i+3)*SPACE7_DIM2);
+        tbuf2=rbuf+((i+3)*SPACE7_DIM2);
+        for(j=0; j<SPACE7_DIM2; j++, tbuf++, tbuf2++) {
+            if(*tbuf!=*tbuf2)
+                TestErrPrintf("%d: hyperslab values don't match!, i=%d, j=%d, *tbuf=%u, *tbuf2=%u\n",__LINE__,i,j,(unsigned)*tbuf,(unsigned)*tbuf2);
+        } /* end for */
+    } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+    HDfree(rbuf);
+}   /* test_select_hyper_offset2() */
+
+/****************************************************************
+**
+**  test_select_point_offset(): Test basic H5S (dataspace) selection code.
+**      Tests element selections between dataspaces of various sizes
+**      and dimensionalities with selection offsets.
+**
+****************************************************************/
+static void
+test_select_point_offset(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hsize_t		dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    hsize_t		dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t		dims3[] = {SPACE3_DIM1, SPACE3_DIM2};
+    hsize_t	coord1[POINT1_NPOINTS][SPACE1_RANK]; /* Coordinates for point selection */
+    hsize_t	coord2[POINT1_NPOINTS][SPACE2_RANK]; /* Coordinates for point selection */
+    hsize_t	coord3[POINT1_NPOINTS][SPACE3_RANK]; /* Coordinates for point selection */
+    hssize_t	offset[SPACE1_RANK];    /* Offset of selection */
+    uint8_t    *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf,       /* temporary buffer pointer */
+               *tbuf2;      /* temporary buffer pointer */
+    int        i,j;        /* Counters */
+    herr_t		ret;		/* Generic return value		*/
+    htri_t	    valid;		/* Generic boolean return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Element Selection Functions\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=HDmalloc(sizeof(uint8_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=HDcalloc(sizeof(uint8_t),SPACE3_DIM1*SPACE3_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint8_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for write buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select sequence of ten points for disk dataset */
+    coord1[0][0]=0; coord1[0][1]=10; coord1[0][2]= 5;
+    coord1[1][0]=1; coord1[1][1]= 2; coord1[1][2]= 7;
+    coord1[2][0]=2; coord1[2][1]= 4; coord1[2][2]= 9;
+    coord1[3][0]=0; coord1[3][1]= 6; coord1[3][2]=11;
+    coord1[4][0]=1; coord1[4][1]= 8; coord1[4][2]=12;
+    coord1[5][0]=2; coord1[5][1]=12; coord1[5][2]= 0;
+    coord1[6][0]=0; coord1[6][1]=14; coord1[6][2]= 2;
+    coord1[7][0]=1; coord1[7][1]= 0; coord1[7][2]= 4;
+    coord1[8][0]=2; coord1[8][1]= 1; coord1[8][2]= 6;
+    coord1[9][0]=0; coord1[9][1]= 3; coord1[9][2]= 8;
+    ret = H5Sselect_elements(sid1,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord1);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Check a valid offset */
+    offset[0]=0; offset[1]=0; offset[2]=1;
+    ret = H5Soffset_simple(sid1,offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+    valid = H5Sselect_valid(sid1);
+    VERIFY(valid, TRUE, "H5Sselect_valid");
+
+    /* Check an invalid offset */
+    offset[0]=10; offset[1]=0; offset[2]=0;
+    ret = H5Soffset_simple(sid1,offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+    valid = H5Sselect_valid(sid1);
+    VERIFY(valid, FALSE, "H5Sselect_valid");
+
+    /* Reset offset */
+    offset[0]=0; offset[1]=0; offset[2]=0;
+    ret = H5Soffset_simple(sid1,offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+    valid = H5Sselect_valid(sid1);
+    VERIFY(valid, TRUE, "H5Sselect_valid");
+
+    /* Select sequence of ten points for write dataset */
+    coord2[0][0]=12; coord2[0][1]= 3;
+    coord2[1][0]=15; coord2[1][1]=13;
+    coord2[2][0]= 7; coord2[2][1]=24;
+    coord2[3][0]= 0; coord2[3][1]= 6;
+    coord2[4][0]=13; coord2[4][1]= 0;
+    coord2[5][0]=24; coord2[5][1]=11;
+    coord2[6][0]=12; coord2[6][1]=21;
+    coord2[7][0]=23; coord2[7][1]= 4;
+    coord2[8][0]= 8; coord2[8][1]= 8;
+    coord2[9][0]=19; coord2[9][1]=17;
+    ret = H5Sselect_elements(sid2,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord2);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Choose a valid offset for the memory dataspace */
+    offset[0]=5; offset[1]=1;
+    ret = H5Soffset_simple(sid2,offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+    valid = H5Sselect_valid(sid2);
+    VERIFY(valid, TRUE, "H5Sselect_valid");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select sequence of points for read dataset */
+    coord3[0][0]= 0; coord3[0][1]= 2;
+    coord3[1][0]= 4; coord3[1][1]= 8;
+    coord3[2][0]=13; coord3[2][1]=13;
+    coord3[3][0]=14; coord3[3][1]=25;
+    coord3[4][0]= 7; coord3[4][1]= 9;
+    coord3[5][0]= 2; coord3[5][1]= 0;
+    coord3[6][0]= 9; coord3[6][1]=19;
+    coord3[7][0]= 1; coord3[7][1]=22;
+    coord3[8][0]=12; coord3[8][1]=21;
+    coord3[9][0]=11; coord3[9][1]= 6;
+    ret = H5Sselect_elements(sid2,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord3);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read with data written out */
+    for(i=0; i<POINT1_NPOINTS; i++) {
+        tbuf=wbuf+((coord2[i][0]+offset[0])*SPACE2_DIM2)+coord2[i][1]+offset[1];
+        tbuf2=rbuf+(coord3[i][0]*SPACE3_DIM2)+coord3[i][1];
+        if(*tbuf!=*tbuf2)
+            TestErrPrintf("element values don't match!, i=%d\n",i);
+    } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+    HDfree(rbuf);
+}   /* test_select_point_offset() */
+
+/****************************************************************
+**
+**  test_select_hyper_union(): Test basic H5S (dataspace) selection code.
+**      Tests unions of hyperslabs of various sizes and dimensionalities.
+**
+****************************************************************/
+static void
+test_select_hyper_union(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hid_t		xfer;	    /* Dataset Transfer Property List ID */
+    hsize_t		dims1[] = {SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3};
+    hsize_t		dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t		dims3[] = {SPACE3_DIM1, SPACE3_DIM2};
+    hsize_t		start[SPACE1_RANK];     /* Starting location of hyperslab */
+    hsize_t		stride[SPACE1_RANK];    /* Stride of hyperslab */
+    hsize_t		count[SPACE1_RANK];     /* Element count of hyperslab */
+    hsize_t		block[SPACE1_RANK];     /* Block size of hyperslab */
+    size_t      begin[SPACE2_DIM1]=     /* Offset within irregular block */
+        {0,0,0,0,0,0,0,0,0,0,           /* First ten rows start at offset 0 */
+        5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5}; /* Next eighteen rows start at offset 5 */
+    size_t      len[SPACE2_DIM1]=       /* Len of each row within irregular block */
+        {10,10,10,10,10,10,10,10,       /* First eight rows are 10 long */
+         20,20,                         /* Next two rows are 20 long */
+        15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15}; /* Next eighteen rows are 15 long */
+    uint8_t    *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf,       /* temporary buffer pointer */
+               *tbuf2;      /* temporary buffer pointer */
+    int        i,j;        /* Counters */
+    herr_t		ret;		/* Generic return value		*/
+    hsize_t	    npoints;	/* Number of elements in selection */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Hyperslab Selection Functions with unions of hyperslabs\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=HDmalloc(sizeof(uint8_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=HDcalloc(sizeof(uint8_t),SPACE3_DIM1*SPACE3_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint8_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+/* Test simple case of one block overlapping another */
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 2x15x13 hyperslab for disk dataset */
+    start[0]=1; start[1]=0; start[2]=0;
+    stride[0]=1; stride[1]=1; stride[2]=1;
+    count[0]=2; count[1]=15; count[2]=13;
+    block[0]=1; block[1]=1; block[2]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    npoints = H5Sget_select_npoints(sid1);
+    VERIFY(npoints, 2*15*13, "H5Sget_select_npoints");
+
+    /* Select 8x26 hyperslab for memory dataset */
+    start[0]=15; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=8; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Union overlapping 8x26 hyperslab for memory dataset (to form a 15x26 selection) */
+    start[0]=22; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=8; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_OR,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    npoints = H5Sget_select_npoints(sid2);
+    VERIFY(npoints, 15*26, "H5Sget_select_npoints");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 15x26 hyperslab for reading memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=15; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read with data written out */
+    for(i=0; i<SPACE3_DIM1; i++) {
+        tbuf=wbuf+((i+15)*SPACE2_DIM2);
+        tbuf2=rbuf+(i*SPACE3_DIM2);
+        for(j=0; j<SPACE3_DIM2; j++, tbuf++, tbuf2++) {
+            if(*tbuf!=*tbuf2)
+                TestErrPrintf("%d: hyperslab values don't match!, i=%d, j=%d, *tbuf=%d, *tbuf2=%d\n",__LINE__,i,j,(int)*tbuf,(int)*tbuf2);
+        } /* end for */
+    } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+/* Test simple case of several block overlapping another */
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 2x15x13 hyperslab for disk dataset */
+    start[0]=1; start[1]=0; start[2]=0;
+    stride[0]=1; stride[1]=1; stride[2]=1;
+    count[0]=2; count[1]=15; count[2]=13;
+    block[0]=1; block[1]=1; block[2]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select 8x15 hyperslab for memory dataset */
+    start[0]=15; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=8; count[1]=15;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Union overlapping 8x15 hyperslab for memory dataset (to form a 15x15 selection) */
+    start[0]=22; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=8; count[1]=15;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_OR,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Union overlapping 15x15 hyperslab for memory dataset (to form a 15x26 selection) */
+    start[0]=15; start[1]=11;
+    stride[0]=1; stride[1]=1;
+    count[0]=15; count[1]=15;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_OR,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    npoints = H5Sget_select_npoints(sid2);
+    VERIFY(npoints, 15*26, "H5Sget_select_npoints");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset2",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 15x26 hyperslab for reading memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=15; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read with data written out */
+    for(i=0; i<SPACE3_DIM1; i++) {
+        tbuf=wbuf+((i+15)*SPACE2_DIM2);
+        tbuf2=rbuf+(i*SPACE3_DIM2);
+        for(j=0; j<SPACE3_DIM2; j++, tbuf++, tbuf2++) {
+            if(*tbuf!=*tbuf2)
+                TestErrPrintf("%d: hyperslab values don't match!, i=%d, j=%d, *tbuf=%d, *tbuf2=%d\n",__LINE__,i,j,(int)*tbuf,(int)*tbuf2);
+        } /* end for */
+    } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+/* Test disjoint case of two non-overlapping blocks */
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 2x15x13 hyperslab for disk dataset */
+    start[0]=1; start[1]=0; start[2]=0;
+    stride[0]=1; stride[1]=1; stride[2]=1;
+    count[0]=2; count[1]=15; count[2]=13;
+    block[0]=1; block[1]=1; block[2]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select 7x26 hyperslab for memory dataset */
+    start[0]=1; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=7; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Union non-overlapping 8x26 hyperslab for memory dataset (to form a 15x26 disjoint selection) */
+    start[0]=22; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=8; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_OR,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    npoints = H5Sget_select_npoints(sid2);
+    VERIFY(npoints, 15*26, "H5Sget_select_npoints");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset3",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 15x26 hyperslab for reading memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=15; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read with data written out */
+    for(i=0; i<SPACE3_DIM1; i++) {
+        /* Jump over gap in middle */
+        if(i<7)
+            tbuf=wbuf+((i+1)*SPACE2_DIM2);
+        else
+            tbuf=wbuf+((i+15)*SPACE2_DIM2);
+        tbuf2=rbuf+(i*SPACE3_DIM2);
+        for(j=0; j<SPACE3_DIM2; j++, tbuf++, tbuf2++) {
+            if(*tbuf!=*tbuf2)
+                TestErrPrintf("%d: hyperslab values don't match!, i=%d, j=%d, *tbuf=%d, *tbuf2=%d\n",__LINE__,i,j,(int)*tbuf,(int)*tbuf2);
+        } /* end for */
+    } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+/* Test disjoint case of two non-overlapping blocks with hyperslab caching turned off */
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 2x15x13 hyperslab for disk dataset */
+    start[0]=1; start[1]=0; start[2]=0;
+    stride[0]=1; stride[1]=1; stride[2]=1;
+    count[0]=2; count[1]=15; count[2]=13;
+    block[0]=1; block[1]=1; block[2]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select 7x26 hyperslab for memory dataset */
+    start[0]=1; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=7; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Union non-overlapping 8x26 hyperslab for memory dataset (to form a 15x26 disjoint selection) */
+    start[0]=22; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=8; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_OR,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    npoints = H5Sget_select_npoints(sid2);
+    VERIFY(npoints, 15*26, "H5Sget_select_npoints");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset4",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    xfer = H5Pcreate (H5P_DATASET_XFER);
+    CHECK(xfer, FAIL, "H5Pcreate");
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    ret = H5Pset_hyper_cache(xfer,0,1);
+    CHECK(ret, FAIL, "H5Pset_hyper_cache");
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,xfer,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 15x26 hyperslab for reading memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=15; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,xfer,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Close transfer property list */
+    ret = H5Pclose(xfer);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Compare data read with data written out */
+    for(i=0; i<SPACE3_DIM1; i++) {
+        /* Jump over gap in middle */
+        if(i<7)
+            tbuf=wbuf+((i+1)*SPACE2_DIM2);
+        else
+            tbuf=wbuf+((i+15)*SPACE2_DIM2);
+        tbuf2=rbuf+(i*SPACE3_DIM2);
+        for(j=0; j<SPACE3_DIM2; j++, tbuf++, tbuf2++) {
+            if(*tbuf!=*tbuf2)
+                TestErrPrintf("%d: hyperslab values don't match!, i=%d, j=%d, *tbuf=%d, *tbuf2=%d\n",__LINE__,i,j,(int)*tbuf,(int)*tbuf2);
+        } /* end for */
+    } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+/* Test case of two blocks which overlap corners and must be split */
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 2x15x13 hyperslab for disk dataset */
+    start[0]=1; start[1]=0; start[2]=0;
+    stride[0]=1; stride[1]=1; stride[2]=1;
+    count[0]=2; count[1]=15; count[2]=13;
+    block[0]=1; block[1]=1; block[2]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select 10x10 hyperslab for memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=10; count[1]=10;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Union overlapping 15x20 hyperslab for memory dataset (forming a irregularly shaped region) */
+    start[0]=8; start[1]=5;
+    stride[0]=1; stride[1]=1;
+    count[0]=20; count[1]=15;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_OR,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    npoints = H5Sget_select_npoints(sid2);
+    VERIFY(npoints, 15*26, "H5Sget_select_npoints");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset5",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE3_RANK, dims3, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 15x26 hyperslab for reading memory dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=15; count[1]=26;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Read selection from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read with data written out */
+    for(i=0,tbuf2=rbuf; i<SPACE2_DIM1; i++) {
+        tbuf=wbuf+(i*SPACE2_DIM2)+begin[i];
+        for(j=0; j<(int)len[i]; j++, tbuf++, tbuf2++) {
+            if(*tbuf!=*tbuf2)
+                TestErrPrintf("%d: hyperslab values don't match!, i=%d, j=%d, *tbuf=%d, *tbuf2=%d\n",__LINE__,i,j,(int)*tbuf,(int)*tbuf2);
+        } /* end for */
+    } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+    HDfree(rbuf);
+}   /* test_select_hyper_union() */
+
+/****************************************************************
+**
+**  test_select_hyper_and_2d(): Test basic H5S (dataspace) selection code.
+**      Tests 'and' of hyperslabs in 2-D
+**
+****************************************************************/
+static void
+test_select_hyper_and_2d(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hsize_t		dims1[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t		dims2[] = {SPACE2A_DIM1};
+    hsize_t	        start[SPACE2_RANK];     /* Starting location of hyperslab */
+    hsize_t		stride[SPACE2_RANK];    /* Stride of hyperslab */
+    hsize_t		count[SPACE2_RANK];     /* Element count of hyperslab */
+    hsize_t		block[SPACE2_RANK];     /* Block size of hyperslab */
+    uint8_t    *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf,       /* temporary buffer pointer */
+               *tbuf2;      /* temporary buffer pointer */
+    int        i,j;        /* Counters */
+    herr_t		ret;    /* Generic return value		*/
+    hsize_t	    npoints;	/* Number of elements in selection */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Hyperslab Selection Functions with intersection of 2-D hyperslabs\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=malloc(sizeof(uint8_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=calloc(sizeof(uint8_t),SPACE2_DIM1*SPACE2_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint8_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset on disk */
+    sid1 = H5Screate_simple(SPACE2_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2A_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 10x10 hyperslab for disk dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=10; count[1]=10;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Intersect overlapping 10x10 hyperslab */
+    start[0]=5; start[1]=5;
+    stride[0]=1; stride[1]=1;
+    count[0]=10; count[1]=10;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_AND,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    npoints = H5Sget_select_npoints(sid1);
+    VERIFY(npoints, 5*5, "H5Sget_select_npoints");
+
+    /* Select 25 hyperslab for memory dataset */
+    start[0]=0;
+    stride[0]=1;
+    count[0]=25;
+    block[0]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    npoints = H5Sget_select_npoints(sid2);
+    VERIFY(npoints, 5*5, "H5Sget_select_npoints");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read entire dataset from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,H5S_ALL,H5S_ALL,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=rbuf, tbuf2=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++, tbuf++) {
+            if((i>=5 && i<=9) && (j>=5 && j<=9)) {
+                if(*tbuf!=*tbuf2)
+                    printf("%d: hyperslab values don't match!, i=%d, j=%d, *tbuf=%d, *tbuf2=%d\n",__LINE__,i,j,(int)*tbuf,(int)*tbuf2);
+                tbuf2++;
+            } /* end if */
+            else {
+                if(*tbuf!=0)
+                    printf("%d: hyperslab element has wrong value!, i=%d, j=%d, *tbuf=%d\n",__LINE__,i,j,(int)*tbuf);
+            } /* end else */
+        } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    free(wbuf);
+    free(rbuf);
+}   /* test_select_hyper_and_2d() */
+
+/****************************************************************
+**
+**  test_select_hyper_xor_2d(): Test basic H5S (dataspace) selection code.
+**      Tests 'xor' of hyperslabs in 2-D
+**
+****************************************************************/
+static void
+test_select_hyper_xor_2d(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hsize_t		dims1[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t		dims2[] = {SPACE2A_DIM1};
+    hsize_t	        start[SPACE2_RANK];     /* Starting location of hyperslab */
+    hsize_t		stride[SPACE2_RANK];    /* Stride of hyperslab */
+    hsize_t		count[SPACE2_RANK];     /* Element count of hyperslab */
+    hsize_t		block[SPACE2_RANK];     /* Block size of hyperslab */
+    uint8_t    *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf,       /* temporary buffer pointer */
+               *tbuf2;      /* temporary buffer pointer */
+    int        i,j;        /* Counters */
+    herr_t		ret;    /* Generic return value		*/
+    hsize_t	    npoints;	/* Number of elements in selection */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Hyperslab Selection Functions with XOR of 2-D hyperslabs\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=malloc(sizeof(uint8_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=calloc(sizeof(uint8_t),SPACE2_DIM1*SPACE2_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint8_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset on disk */
+    sid1 = H5Screate_simple(SPACE2_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2A_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 10x10 hyperslab for disk dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=10; count[1]=10;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Intersect overlapping 10x10 hyperslab */
+    start[0]=5; start[1]=5;
+    stride[0]=1; stride[1]=1;
+    count[0]=10; count[1]=10;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_XOR,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    npoints = H5Sget_select_npoints(sid1);
+    VERIFY(npoints, 150, "H5Sget_select_npoints");
+
+    /* Select 25 hyperslab for memory dataset */
+    start[0]=0;
+    stride[0]=1;
+    count[0]=150;
+    block[0]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    npoints = H5Sget_select_npoints(sid2);
+    VERIFY(npoints, 150, "H5Sget_select_npoints");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read entire dataset from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,H5S_ALL,H5S_ALL,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=rbuf, tbuf2=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++, tbuf++) {
+            if(((i>=0 && i<=4) && (j>=0 && j<=9)) ||
+                    ((i>=5 && i<=9) && ((j>=0 && j<=4) || (j>=10 && j<=14))) ||
+                    ((i>=10 && i<=14) && (j>=5 && j<=14))) {
+                if(*tbuf!=*tbuf2)
+                    printf("%d: hyperslab values don't match!, i=%d, j=%d, *tbuf=%d, *tbuf2=%d\n",__LINE__,i,j,(int)*tbuf,(int)*tbuf2);
+                tbuf2++;
+            } /* end if */
+            else {
+                if(*tbuf!=0)
+                    printf("%d: hyperslab element has wrong value!, i=%d, j=%d, *tbuf=%d\n",__LINE__,i,j,(int)*tbuf);
+            } /* end else */
+        } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    free(wbuf);
+    free(rbuf);
+}   /* test_select_hyper_xor_2d() */
+
+/****************************************************************
+**
+**  test_select_hyper_notb_2d(): Test basic H5S (dataspace) selection code.
+**      Tests 'notb' of hyperslabs in 2-D
+**
+****************************************************************/
+static void
+test_select_hyper_notb_2d(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hsize_t		dims1[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t		dims2[] = {SPACE2A_DIM1};
+    hsize_t	        start[SPACE2_RANK];     /* Starting location of hyperslab */
+    hsize_t		stride[SPACE2_RANK];    /* Stride of hyperslab */
+    hsize_t		count[SPACE2_RANK];     /* Element count of hyperslab */
+    hsize_t		block[SPACE2_RANK];     /* Block size of hyperslab */
+    uint8_t    *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf,       /* temporary buffer pointer */
+               *tbuf2;      /* temporary buffer pointer */
+    int        i,j;        /* Counters */
+    herr_t		ret;    /* Generic return value		*/
+    hsize_t	    npoints;	/* Number of elements in selection */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Hyperslab Selection Functions with NOTB of 2-D hyperslabs\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=malloc(sizeof(uint8_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=calloc(sizeof(uint8_t),SPACE2_DIM1*SPACE2_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint8_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset on disk */
+    sid1 = H5Screate_simple(SPACE2_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2A_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 10x10 hyperslab for disk dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=10; count[1]=10;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Intersect overlapping 10x10 hyperslab */
+    start[0]=5; start[1]=5;
+    stride[0]=1; stride[1]=1;
+    count[0]=10; count[1]=10;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_NOTB,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    npoints = H5Sget_select_npoints(sid1);
+    VERIFY(npoints, 75, "H5Sget_select_npoints");
+
+    /* Select 75 hyperslab for memory dataset */
+    start[0]=0;
+    stride[0]=1;
+    count[0]=75;
+    block[0]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    npoints = H5Sget_select_npoints(sid2);
+    VERIFY(npoints, 75, "H5Sget_select_npoints");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read entire dataset from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,H5S_ALL,H5S_ALL,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=rbuf, tbuf2=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++, tbuf++) {
+            if(((i>=0 && i<=4) && (j>=0 && j<=9)) ||
+                    ((i>=5 && i<=9) && (j>=0 && j<=4))) {
+                if(*tbuf!=*tbuf2)
+                    printf("%d: hyperslab values don't match!, i=%d, j=%d, *tbuf=%d, *tbuf2=%d\n",__LINE__,i,j,(int)*tbuf,(int)*tbuf2);
+                tbuf2++;
+            } /* end if */
+            else {
+                if(*tbuf!=0)
+                    printf("%d: hyperslab element has wrong value!, i=%d, j=%d, *tbuf=%d\n",__LINE__,i,j,(int)*tbuf);
+            } /* end else */
+        } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    free(wbuf);
+    free(rbuf);
+}   /* test_select_hyper_notb_2d() */
+
+/****************************************************************
+**
+**  test_select_hyper_nota_2d(): Test basic H5S (dataspace) selection code.
+**      Tests 'nota' of hyperslabs in 2-D
+**
+****************************************************************/
+static void
+test_select_hyper_nota_2d(void)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hsize_t		dims1[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t		dims2[] = {SPACE2A_DIM1};
+    hsize_t	        start[SPACE2_RANK];     /* Starting location of hyperslab */
+    hsize_t		stride[SPACE2_RANK];    /* Stride of hyperslab */
+    hsize_t		count[SPACE2_RANK];     /* Element count of hyperslab */
+    hsize_t		block[SPACE2_RANK];     /* Block size of hyperslab */
+    uint8_t    *wbuf,       /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf,       /* temporary buffer pointer */
+               *tbuf2;      /* temporary buffer pointer */
+    int        i,j;        /* Counters */
+    herr_t		ret;    /* Generic return value		*/
+    hsize_t	    npoints;	/* Number of elements in selection */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Hyperslab Selection Functions with NOTA of 2-D hyperslabs\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=HDmalloc(sizeof(uint8_t)*SPACE2_DIM1*SPACE2_DIM2);
+    rbuf=HDcalloc(sizeof(uint8_t),SPACE2_DIM1*SPACE2_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++)
+            *tbuf++=(uint8_t)((i*SPACE2_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset on disk */
+    sid1 = H5Screate_simple(SPACE2_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE2A_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Select 10x10 hyperslab for disk dataset */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=10; count[1]=10;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Intersect overlapping 10x10 hyperslab */
+    start[0]=5; start[1]=5;
+    stride[0]=1; stride[1]=1;
+    count[0]=10; count[1]=10;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_NOTA,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    npoints = H5Sget_select_npoints(sid1);
+    VERIFY(npoints, 75, "H5Sget_select_npoints");
+
+    /* Select 75 hyperslab for memory dataset */
+    start[0]=0;
+    stride[0]=1;
+    count[0]=75;
+    block[0]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    npoints = H5Sget_select_npoints(sid2);
+    VERIFY(npoints, 75, "H5Sget_select_npoints");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+
+    /* Write selection to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read entire dataset from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,H5S_ALL,H5S_ALL,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=rbuf, tbuf2=wbuf; i<SPACE2_DIM1; i++)
+        for(j=0; j<SPACE2_DIM2; j++, tbuf++) {
+            if(((i>=10 && i<=14) && (j>=5 && j<=14)) ||
+                    ((i>=5 && i<=9) && (j>=10 && j<=14))) {
+                if(*tbuf!=*tbuf2)
+                    TestErrPrintf("%d: hyperslab values don't match!, i=%d, j=%d, *tbuf=%d, *tbuf2=%d\n",__LINE__,i,j,(int)*tbuf,(int)*tbuf2);
+                tbuf2++;
+            } /* end if */
+            else {
+                if(*tbuf!=0)
+                    TestErrPrintf("%d: hyperslab element has wrong value!, i=%d, j=%d, *tbuf=%d\n",__LINE__,i,j,(int)*tbuf);
+            } /* end else */
+        } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+    HDfree(rbuf);
+}   /* test_select_hyper_nota_2d() */
+
+/****************************************************************
+**
+**  test_select_hyper_iter2(): Iterator for checking hyperslab iteration
+**
+****************************************************************/
+herr_t
+test_select_hyper_iter2(void *_elem, hid_t UNUSED type_id, unsigned ndim, const hsize_t *point, void *_operator_data)
+{
+    int *tbuf=(int *)_elem,     /* temporary buffer pointer */
+        **tbuf2=(int **)_operator_data; /* temporary buffer handle */
+    unsigned u;             /* Local counting variable */
+
+    if(*tbuf!=**tbuf2) {
+        TestErrPrintf("Error in hyperslab iteration!\n");
+        printf("location: { ");
+        for(u=0; u<ndim; u++) {
+            printf("%2d",(int)point[u]);
+            if(u<(ndim-1))
+                printf(", ");
+        } /* end for */
+        printf("}\n");
+        printf("*tbuf=%d, **tbuf2=%d\n",*tbuf,**tbuf2);
+        return(-1);
+    } /* end if */
+    else {
+        (*tbuf2)++;
+        return(0);
+    }
+}   /* end test_select_hyper_iter2() */
+
+/****************************************************************
+**
+**  test_select_hyper_union_random_5d(): Test basic H5S (dataspace) selection code.
+**      Tests random unions of 5-D hyperslabs
+**
+****************************************************************/
+static void
+test_select_hyper_union_random_5d(hid_t read_plist)
+{
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1,sid2;	/* Dataspace ID			*/
+    hsize_t		dims1[] = {SPACE5_DIM1, SPACE5_DIM2, SPACE5_DIM3, SPACE5_DIM4, SPACE5_DIM5};
+    hsize_t		dims2[] = {SPACE6_DIM1};
+    hsize_t		start[SPACE5_RANK];     /* Starting location of hyperslab */
+    hsize_t		count[SPACE5_RANK];     /* Element count of hyperslab */
+    int    *wbuf,          /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf;       /* temporary buffer pointer */
+    int        i,j,k,l,m;  /* Counters */
+    herr_t		ret;		/* Generic return value		*/
+    hssize_t	npoints,	/* Number of elements in file selection */
+                npoints2;	/* Number of elements in memory selection */
+    unsigned    seed;       /* Random number seed for each test */
+    unsigned    test_num;   /* Count of tests being executed */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Hyperslab Selection Functions with random unions of 5-D hyperslabs\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=HDmalloc(sizeof(int)*SPACE5_DIM1*SPACE5_DIM2*SPACE5_DIM3*SPACE5_DIM4*SPACE5_DIM5);
+    rbuf=HDcalloc(sizeof(int),SPACE5_DIM1*SPACE5_DIM2*SPACE5_DIM3*SPACE5_DIM4*SPACE5_DIM5);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE5_DIM1; i++)
+        for(j=0; j<SPACE5_DIM2; j++)
+            for(k=0; k<SPACE5_DIM3; k++)
+                for(l=0; l<SPACE5_DIM4; l++)
+                    for(m=0; m<SPACE5_DIM5; m++)
+                        *tbuf++=(int)(((((((i*SPACE5_DIM2)+j)*SPACE5_DIM3)+k)*SPACE5_DIM4)+l)*SPACE5_DIM5)+m;
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset on disk */
+    sid1 = H5Screate_simple(SPACE5_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_INT,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write entire dataset to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Create dataspace for reading buffer */
+    sid2 = H5Screate_simple(SPACE6_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Get initial random # seed */
+    seed=(unsigned)time(NULL)+(unsigned)clock();
+
+    /* Crunch through a bunch of random hyperslab reads from the file dataset */
+    for(test_num=0; test_num<NRAND_HYPER; test_num++) {
+        /* Save random # seed for later use */
+        /* (Used in case of errors, to regenerate the hyperslab sequence) */
+#ifndef QAK
+        seed+=(unsigned)clock();
+#else /* QAK */
+        seed=987909620;
+#endif /* QAK */
+        srand(seed);
+
+#ifdef QAK
+printf("test_num=%d, seed=%u\n",test_num,seed);
+#endif /* QAK */
+#ifndef QAK
+        for(i=0; i<NHYPERSLABS; i++) {
+#else /* QAK */
+        for(i=0; i<2; i++) {
+#endif /* QAK */
+#ifdef QAK
+printf("hyperslab=%d\n",i);
+#endif /* QAK */
+            /* Select random hyperslab location & size for selection */
+            for(j=0; j<SPACE5_RANK; j++) {
+                start[j]=rand()%dims1[j];
+                count[j]=(rand()%(dims1[j]-start[j]))+1;
+#ifdef QAK
+printf("start[%d]=%d, count[%d]=%d (end[%d]=%d)\n",j,(int)start[j],j,(int)count[j],j,(int)(start[j]+count[j]-1));
+#endif /* QAK */
+            } /* end for */
+
+            /* Select hyperslab */
+            ret = H5Sselect_hyperslab(sid1,(i==0 ? H5S_SELECT_SET : H5S_SELECT_OR),start,NULL,count,NULL);
+            CHECK(ret, FAIL, "H5Sselect_hyperslab");
+        } /* end for */
+
+        /* Get the number of elements selected */
+        npoints=H5Sget_select_npoints(sid1);
+        CHECK(npoints, 0, "H5Sget_select_npoints");
+
+        /* Select linear 1-D hyperslab for memory dataset */
+        start[0]=0;
+        count[0]=npoints;
+        ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,NULL,count,NULL);
+        CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+        npoints2 = H5Sget_select_npoints(sid2);
+        VERIFY(npoints, npoints2, "H5Sget_select_npoints");
+
+#ifdef QAK
+printf("random I/O, before H5Dread(), npoints=%lu\n",(unsigned long)npoints);
+{
+    hsize_t blocks[128][2][SPACE5_RANK];
+    hssize_t nblocks;
+    int k;
+
+    nblocks=H5Sget_select_hyper_nblocks(sid1);
+    printf("nblocks=%d\n",(int)nblocks);
+    H5Sget_select_hyper_blocklist(sid1,0,nblocks,blocks);
+    for(j=0; j<nblocks; j++) {
+        printf("Block #%d, start = {",j);
+        for(k=0; k<SPACE5_RANK; k++) {
+            printf("%d",blocks[j][0][k]);
+            if(k<(SPACE5_RANK-1))
+                printf(", ");
+            else
+                printf("}, end = {");
+        } /* end for */
+        for(k=0; k<SPACE5_RANK; k++) {
+            printf("%d",blocks[j][1][k]);
+            if(k<(SPACE5_RANK-1))
+                printf(", ");
+            else
+                printf("}\n");
+        } /* end for */
+    } /* end for */
+}
+#endif /* QAK */
+        /* Read selection from disk */
+        ret=H5Dread(dataset,H5T_NATIVE_INT,sid2,sid1,read_plist,rbuf);
+        CHECK(ret, FAIL, "H5Dread");
+#ifdef QAK
+printf("random I/O, after H5Dread()\n");
+#endif /* QAK */
+
+        /* Compare data read with data written out */
+        tbuf=rbuf;
+        ret = H5Diterate(wbuf,H5T_NATIVE_INT,sid1,test_select_hyper_iter2,&tbuf);
+        if(ret<0) {
+            TestErrPrintf("Random hyperslabs for seed %u failed!\n",seed);
+            break;
+        }
+
+        /* Set the read buffer back to all zeroes */
+        memset(rbuf,0,SPACE6_DIM1);
+    } /* end for */
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+    HDfree(rbuf);
+}   /* test_select_hyper_union_random_5d() */
+
+/****************************************************************
+**
+**  test_select_hyper_chunk(): Test basic H5S (dataspace) selection code.
+**      Tests large hyperslab selection in chunked dataset
+**
+****************************************************************/
+static void
+test_select_hyper_chunk(hid_t fapl_plist, hid_t xfer_plist)
+{
+    hsize_t     dimsf[3];              /* dataset dimensions */
+    hsize_t     chunk_dimsf[3] = {CHUNK_X, CHUNK_Y, CHUNK_Z};    /* chunk sizes */
+    short      *data;                   /* data to write */
+    short      *tmpdata;                /* data to write */
+
+    /*
+     * Data  and output buffer initialization.
+     */
+    hid_t       file, dataset;         /* handles */
+    hid_t       dataspace;
+    hid_t       memspace;
+    hid_t       plist;
+    hsize_t     dimsm[3];              /* memory space dimensions */
+    hsize_t     dims_out[3];           /* dataset dimensions */
+    herr_t      status;
+
+    short         *data_out; /* output buffer */
+    short         *tmpdata_out; /* output buffer */
+
+    hsize_t     count[3];              /* size of the hyperslab in the file */
+    hsize_t     offset[3];             /* hyperslab offset in the file */
+    hsize_t     count_out[3];          /* size of the hyperslab in memory */
+    hsize_t     offset_out[3];         /* hyperslab offset in memory */
+    int         i, j, k, status_n, rank;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Hyperslab I/O on Large Chunks\n"));
+
+    /* Allocate the transfer buffers */
+    data = HDmalloc(sizeof(short)*X*Y*Z);
+    data_out = HDcalloc(NX*NY*NZ,sizeof(short));
+
+    /*
+     * Data buffer initialization.
+     */
+    tmpdata = data;
+    for (j = 0; j < X; j++)
+	for (i = 0; i < Y; i++)
+	    for (k = 0; k < Z; k++)
+                *tmpdata++ =  (short)((k+1)%256);
+
+    /*
+     * Create a new file using H5F_ACC_TRUNC access,
+     * the default file creation properties, and the default file
+     * access properties.
+     */
+    file = H5Fcreate (FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_plist);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /*
+     * Describe the size of the array and create the data space for fixed
+     * size dataset.
+     */
+    dimsf[0] = X;
+    dimsf[1] = Y;
+    dimsf[2] = Z;
+    dataspace = H5Screate_simple (RANK_F, dimsf, NULL);
+    CHECK(dataspace, FAIL, "H5Screate_simple");
+
+    /*
+     * Create a new dataset within the file using defined dataspace and
+     * chunking properties.
+     */
+    plist = H5Pcreate (H5P_DATASET_CREATE);
+    CHECK(plist, FAIL, "H5Pcreate");
+    status = H5Pset_chunk (plist, RANK_F, chunk_dimsf);
+    CHECK(status, FAIL, "H5Pset_chunk");
+    dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_UCHAR, dataspace, plist);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /*
+     * Define hyperslab in the dataset.
+     */
+    offset[0] = 0;
+    offset[1] = 0;
+    offset[2] = 0;
+    count[0]  = NX_SUB;
+    count[1]  = NY_SUB;
+    count[2]  = NZ_SUB;
+    status = H5Sselect_hyperslab (dataspace, H5S_SELECT_SET, offset, NULL,
+                                  count, NULL);
+    CHECK(status, FAIL, "H5Sselect_hyperslab");
+
+    /*
+     * Define the memory dataspace.
+     */
+    dimsm[0] = NX;
+    dimsm[1] = NY;
+    dimsm[2] = NZ;
+    memspace = H5Screate_simple (RANK_M, dimsm, NULL);
+    CHECK(memspace, FAIL, "H5Screate_simple");
+
+    /*
+     * Define memory hyperslab.
+     */
+    offset_out[0] = 0;
+    offset_out[1] = 0;
+    offset_out[2] = 0;
+    count_out[0]  = NX_SUB;
+    count_out[1]  = NY_SUB;
+    count_out[2]  = NZ_SUB;
+    status = H5Sselect_hyperslab (memspace, H5S_SELECT_SET, offset_out, NULL,
+                                  count_out, NULL);
+    CHECK(status, FAIL, "H5Sselect_hyperslab");
+
+    /*
+     * Write the data to the dataset using hyperslabs
+     */
+    status = H5Dwrite (dataset, H5T_NATIVE_SHORT, memspace, dataspace,
+                      xfer_plist, data);
+    CHECK(status, FAIL, "H5Dwrite");
+
+    /*
+     * Close/release resources.
+     */
+    status=H5Pclose (plist);
+    CHECK(status, FAIL, "H5Pclose");
+    status=H5Sclose (dataspace);
+    CHECK(status, FAIL, "H5Sclose");
+    status=H5Sclose (memspace);
+    CHECK(status, FAIL, "H5Sclose");
+    status=H5Dclose (dataset);
+    CHECK(status, FAIL, "H5Dclose");
+    status=H5Fclose (file);
+    CHECK(status, FAIL, "H5Fclose");
+
+
+/*************************************************************
+
+  This reads the hyperslab from the test.h5 file just
+  created, into a 3-dimensional plane of the 3-dimensional
+  array.
+
+ ************************************************************/
+
+    /*
+     * Open the file and the dataset.
+     */
+    file = H5Fopen (FILENAME, H5F_ACC_RDONLY, fapl_plist);
+    CHECK(file, FAIL, "H5Fopen");
+    dataset = H5Dopen (file, DATASETNAME);
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    dataspace = H5Dget_space (dataset);    /* dataspace handle */
+    CHECK(dataspace, FAIL, "H5Dget_space");
+    rank      = H5Sget_simple_extent_ndims (dataspace);
+    VERIFY(rank, 3, "H5Sget_simple_extent_ndims");
+    status_n  = H5Sget_simple_extent_dims (dataspace, dims_out, NULL);
+    CHECK(status_n, FAIL, "H5Sget_simple_extent_dims");
+    VERIFY(dims_out[0], dimsf[0], "Dataset dimensions");
+    VERIFY(dims_out[1], dimsf[1], "Dataset dimensions");
+    VERIFY(dims_out[2], dimsf[2], "Dataset dimensions");
+
+    /*
+     * Define hyperslab in the dataset.
+     */
+    offset[0] = 0;
+    offset[1] = 0;
+    offset[2] = 0;
+    count[0]  = NX_SUB;
+    count[1]  = NY_SUB;
+    count[2]  = NZ_SUB;
+    status = H5Sselect_hyperslab (dataspace, H5S_SELECT_SET, offset, NULL,
+                                  count, NULL);
+    CHECK(status, FAIL, "H5Sselect_hyperslab");
+
+    /*
+     * Define the memory dataspace.
+     */
+    dimsm[0] = NX;
+    dimsm[1] = NY;
+    dimsm[2] = NZ;
+    memspace = H5Screate_simple (RANK_M, dimsm, NULL);
+    CHECK(memspace, FAIL, "H5Screate_simple");
+
+    /*
+     * Define memory hyperslab.
+     */
+    offset_out[0] = 0;
+    offset_out[1] = 0;
+    offset_out[2] = 0;
+    count_out[0]  = NX_SUB;
+    count_out[1]  = NY_SUB;
+    count_out[2]  = NZ_SUB;
+    status = H5Sselect_hyperslab (memspace, H5S_SELECT_SET, offset_out, NULL,
+                                  count_out, NULL);
+    CHECK(status, FAIL, "H5Sselect_hyperslab");
+
+    /*
+     * Read data from hyperslab in the file into the hyperslab in
+     * memory and display.
+     */
+    status = H5Dread (dataset, H5T_NATIVE_SHORT, memspace, dataspace,
+                      xfer_plist, data_out);
+    CHECK(status, FAIL, "H5Dread");
+
+    /* Compare data written with data read in */
+    tmpdata = data;
+    tmpdata_out = data_out;
+    for (j = 0; j < X; j++)
+	for (i = 0; i < Y; i++)
+	    for (k = 0; k < Z; k++,tmpdata++,tmpdata_out++) {
+                if(*tmpdata!=*tmpdata_out)
+                    TestErrPrintf("Line %d: Error! j=%d, i=%d, k=%d, *tmpdata=%x, *tmpdata_out=%x\n",__LINE__,j,i,k,(unsigned)*tmpdata,(unsigned)*tmpdata_out);
+            } /* end for */
+
+    /*
+     * Close and release resources.
+     */
+    status=H5Dclose (dataset);
+    CHECK(status, FAIL, "H5Dclose");
+    status=H5Sclose (dataspace);
+    CHECK(status, FAIL, "H5Sclose");
+    status=H5Sclose (memspace);
+    CHECK(status, FAIL, "H5Sclose");
+    status=H5Fclose (file);
+    CHECK(status, FAIL, "H5Fclose");
+    HDfree (data);
+    HDfree (data_out);
+}   /* test_select_hyper_chunk() */
+
+/****************************************************************
+**
+**  test_select_point_chunk(): Test basic H5S (dataspace) selection code.
+**      Tests combinations of hyperslab and point selections on
+**      chunked datasets.
+**
+****************************************************************/
+static void
+test_select_point_chunk(void)
+{
+    hsize_t     dimsf[SPACE7_RANK];     /* dataset dimensions */
+    hsize_t     chunk_dimsf[SPACE7_RANK] = {SPACE7_CHUNK_DIM1,SPACE7_CHUNK_DIM2};    /* chunk sizes */
+    unsigned    *data;                   /* data to write */
+    unsigned    *tmpdata;                /* data to write */
+
+    /*
+     * Data  and output buffer initialization.
+     */
+    hid_t       file, dataset;         /* handles */
+    hid_t       dataspace;
+    hid_t       pnt1_space;                     /* Dataspace to hold 1st point selection */
+    hid_t       pnt2_space;                     /* Dataspace to hold 2nd point selection */
+    hid_t       hyp1_space;                     /* Dataspace to hold 1st hyperslab selection */
+    hid_t       hyp2_space;                     /* Dataspace to hold 2nd hyperslab selection */
+    hid_t       dcpl;
+    herr_t      ret;                            /* Generic return value */
+
+    unsigned    *data_out;			/* output buffer */
+#ifdef LATER
+    unsigned    *tmpdata_out;			/* output buffer */
+#endif /* LATER */
+
+    hsize_t     start[SPACE7_RANK];             /* hyperslab offset */
+    hsize_t     count[SPACE7_RANK];             /* size of the hyperslab */
+    hsize_t     points[SPACE7_NPOINTS][SPACE7_RANK];   /* points for selection */
+    unsigned    i, j;                           /* Local index variables */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Point Selections on Chunked Datasets\n"));
+
+    /* Allocate the transfer buffers */
+    data = (unsigned*)HDmalloc(sizeof(unsigned)*SPACE7_DIM1*SPACE7_DIM2);
+    data_out = (unsigned*)HDcalloc(SPACE7_DIM1*SPACE7_DIM2,sizeof(unsigned));
+
+    /*
+     * Data buffer initialization.
+     */
+    tmpdata = data;
+    for (i = 0; i < SPACE7_DIM1; i++)
+	for (j = 0; j < SPACE7_DIM1; j++)
+            *tmpdata++ = ((i*SPACE7_DIM2)+j)%256;
+
+    /*
+     * Create a new file using H5F_ACC_TRUNC access,
+     * the default file creation properties and file
+     * access properties.
+     */
+    file = H5Fcreate (FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* Create file dataspace */
+    dimsf[0] = SPACE7_DIM1;
+    dimsf[1] = SPACE7_DIM2;
+    dataspace = H5Screate_simple (SPACE7_RANK, dimsf, NULL);
+    CHECK(dataspace, FAIL, "H5Screate_simple");
+
+    /*
+     * Create a new dataset within the file using defined dataspace and
+     * chunking properties.
+     */
+    dcpl = H5Pcreate (H5P_DATASET_CREATE);
+    CHECK(dcpl, FAIL, "H5Pcreate");
+    ret = H5Pset_chunk (dcpl, SPACE7_RANK, chunk_dimsf);
+    CHECK(ret, FAIL, "H5Pset_chunk");
+    dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_UCHAR, dataspace, dcpl);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Create 1st point selection */
+    pnt1_space = H5Scopy (dataspace);
+    CHECK(pnt1_space, FAIL, "H5Scopy");
+
+    points[0][0]=3;
+    points[0][1]=3;
+    points[1][0]=3;
+    points[1][1]=8;
+    points[2][0]=8;
+    points[2][1]=3;
+    points[3][0]=8;
+    points[3][1]=8;
+    points[4][0]=1;    /* In same chunk as point #0, but "earlier" in chunk */
+    points[4][1]=1;
+    points[5][0]=1;    /* In same chunk as point #1, but "earlier" in chunk */
+    points[5][1]=6;
+    points[6][0]=6;    /* In same chunk as point #2, but "earlier" in chunk */
+    points[6][1]=1;
+    points[7][0]=6;    /* In same chunk as point #3, but "earlier" in chunk */
+    points[7][1]=6;
+    ret = H5Sselect_elements(pnt1_space,H5S_SELECT_SET,SPACE7_NPOINTS,(const hsize_t **)points);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Create 1st hyperslab selection */
+    hyp1_space = H5Scopy (dataspace);
+    CHECK(hyp1_space, FAIL, "H5Scopy");
+
+    start[0]=2; start[1]=2;
+    count[0]=4; count[1]=2;
+    ret = H5Sselect_hyperslab(hyp1_space,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Write out data using 1st point selection for file & hyperslab for memory */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UINT,hyp1_space,pnt1_space,H5P_DEFAULT,data);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Create 2nd point selection */
+    pnt2_space = H5Scopy (dataspace);
+    CHECK(pnt2_space, FAIL, "H5Scopy");
+
+    points[0][0]=4;
+    points[0][1]=4;
+    points[1][0]=4;
+    points[1][1]=9;
+    points[2][0]=9;
+    points[2][1]=4;
+    points[3][0]=9;
+    points[3][1]=9;
+    points[4][0]=2;    /* In same chunk as point #0, but "earlier" in chunk */
+    points[4][1]=2;
+    points[5][0]=2;    /* In same chunk as point #1, but "earlier" in chunk */
+    points[5][1]=7;
+    points[6][0]=7;    /* In same chunk as point #2, but "earlier" in chunk */
+    points[6][1]=2;
+    points[7][0]=7;    /* In same chunk as point #3, but "earlier" in chunk */
+    points[7][1]=7;
+    ret = H5Sselect_elements(pnt2_space,H5S_SELECT_SET,SPACE7_NPOINTS,(const hsize_t **)points);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Create 2nd hyperslab selection */
+    hyp2_space = H5Scopy (dataspace);
+    CHECK(hyp2_space, FAIL, "H5Scopy");
+
+    start[0]=2; start[1]=4;
+    count[0]=4; count[1]=2;
+    ret = H5Sselect_hyperslab(hyp2_space,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Write out data using 2nd hyperslab selection for file & point for memory */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UINT,pnt2_space,hyp2_space,H5P_DEFAULT,data);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close everything (except selections) */
+    ret=H5Pclose (dcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+    ret=H5Sclose (dataspace);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret=H5Dclose (dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+    ret=H5Fclose (file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Re-open file & dataset */
+    file = H5Fopen (FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fopen");
+    dataset = H5Dopen (file, DATASETNAME);
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Read data using 1st point selection for file and hyperslab for memory */
+    ret=H5Dread(dataset,H5T_NATIVE_UINT,hyp1_space,pnt1_space,H5P_DEFAULT,data_out);
+    CHECK(ret, FAIL, "H5Dread");
+
+/* Verify data (later) */
+
+    /* Read data using 2nd hyperslab selection for file and point for memory */
+    ret=H5Dread(dataset,H5T_NATIVE_UINT,pnt2_space,hyp2_space,H5P_DEFAULT,data_out);
+    CHECK(ret, FAIL, "H5Dread");
+
+/* Verify data (later) */
+
+    /* Close everything (inclusing selections) */
+    ret=H5Sclose (pnt1_space);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret=H5Sclose (pnt2_space);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret=H5Sclose (hyp1_space);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret=H5Sclose (hyp2_space);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret=H5Dclose (dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+    ret=H5Fclose (file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    free (data);
+    free (data_out);
+}   /* test_select_point_chunk() */
+
+/****************************************************************
+**
+**  test_select_sclar_chunk(): Test basic H5S (dataspace) selection code.
+**      Tests using a scalar dataspace (in memory) to access chunked datasets.
+**
+****************************************************************/
+static void
+test_select_scalar_chunk(void)
+{
+    hid_t file_id;              /* File ID */
+    hid_t dcpl;                 /* Dataset creation property list */
+    hid_t dsid;                 /* Dataset ID */
+    hid_t sid;                  /* Dataspace ID */
+    hid_t m_sid;                /* Memory dataspace */
+    hsize_t dims[] = {2};       /* Dataset dimensions */
+    hsize_t maxdims[] = {H5S_UNLIMITED};        /* Dataset maximum dimensions */
+    hsize_t offset[] = {0};     /* Hyperslab start */
+    hsize_t count[] = {1};      /* Hyperslab count */
+    unsigned data = 2;          /* Data to write */
+    herr_t ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Scalar Dataspaces and Chunked Datasets\n"));
+
+    file_id = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file_id, FAIL, "H5Fcreate");
+
+    dcpl = H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(dcpl, FAIL, "H5Pcreate");
+
+    dims[0] = 1024U;
+    ret = H5Pset_chunk(dcpl, 1, dims);
+    CHECK(ret, FAIL, "H5Pset_chunk");
+
+    /* Create 1-D dataspace */
+    sid = H5Screate_simple(1, dims, maxdims);
+    CHECK(sid, FAIL, "H5Screate_simple");
+
+    dsid = H5Dcreate(file_id, "dset", H5T_NATIVE_UINT, sid, dcpl);
+    CHECK(dsid, FAIL, "H5Dcreate");
+
+    /* Select scalar area (offset 0, count 1) */
+    ret = H5Sselect_hyperslab(sid, H5S_SELECT_SET, offset, NULL, count, NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create scalar memory dataspace */
+    m_sid = H5Screate(H5S_SCALAR);
+    CHECK(m_sid, FAIL, "H5Screate");
+
+    /* Write out data using scalar dataspace for memory dataspace */
+    ret = H5Dwrite (dsid, H5T_NATIVE_UINT, m_sid, sid, H5P_DEFAULT, &data);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close resources */
+    ret = H5Sclose(m_sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Dclose(dsid);
+    CHECK(ret, FAIL, "H5Dclose");
+    ret = H5Pclose(dcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+    ret = H5Fclose (file_id);
+    CHECK(ret, FAIL, "H5Fclose");
+}   /* test_select_scalar_chunk() */
+
+/****************************************************************
+**
+**  test_select_valid(): Test basic H5S (dataspace) selection code.
+**      Tests selection validity
+**
+****************************************************************/
+static void
+test_select_valid(void)
+{
+    herr_t error;
+    htri_t valid;
+    hid_t main_space, sub_space;
+    hsize_t safe_start[2]={1,1};
+    hsize_t safe_count[2]={1,1};
+    hsize_t start[2];
+    hsize_t dims[2],maxdims[2],size[2],count[2];
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Selection Validity\n"));
+
+    count[0] = count[1] = 1;
+    dims[0] = dims[1] = maxdims[0] = maxdims[1] = 10;
+
+    main_space = H5Screate_simple(2,dims,maxdims);
+    CHECK(main_space, FAIL, "H5Screate_simple");
+
+    MESSAGE(8, ( "Case 1 : in the dimensions\nTry offset (4,4) and size(6,6), the original space is of size (10,10)\n"));
+    start[0] = start[1] = 4;
+    size[0] = size[1] = 6;
+
+    sub_space = H5Scopy(main_space);
+    CHECK(sub_space, FAIL, "H5Scopy");
+
+    error=H5Sselect_hyperslab(sub_space,H5S_SELECT_SET,start,size,count,size);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    valid=H5Sselect_valid(sub_space);
+    VERIFY(valid, TRUE, "H5Sselect_valid");
+
+    error=H5Sselect_hyperslab(sub_space,H5S_SELECT_OR,safe_start,NULL,safe_count,NULL);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    valid=H5Sselect_valid(sub_space);
+    VERIFY(valid, TRUE, "H5Sselect_valid");
+
+    error=H5Sclose(sub_space);
+    CHECK(error, FAIL, "H5Sclose");
+
+    MESSAGE(8, ( "Case 2 : exceed dimensions by 1\nTry offset (5,5) and size(6,6), the original space is of size (10,10)\n"));
+    start[0] = start[1] = 5;
+    size[0] = size[1] = 6;
+
+    sub_space = H5Scopy(main_space);
+    CHECK(sub_space, FAIL, "H5Scopy");
+
+    error=H5Sselect_hyperslab(sub_space,H5S_SELECT_SET,start,size,count,size);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    valid=H5Sselect_valid(sub_space);
+    VERIFY(valid, FALSE, "H5Sselect_valid");
+
+    error=H5Sselect_hyperslab(sub_space,H5S_SELECT_OR,safe_start,NULL,safe_count,NULL);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    valid=H5Sselect_valid(sub_space);
+    VERIFY(valid, FALSE, "H5Sselect_valid");
+
+    error=H5Sclose(sub_space);
+    CHECK(error, FAIL, "H5Sclose");
+
+    MESSAGE(8, ( "Case 3 : exceed dimensions by 2\nTry offset (6,6) and size(6,6), the original space is of size (10,10)\n"));
+    start[0] = start[1] = 6;
+    size[0] = size[1] = 6;
+
+    sub_space = H5Scopy(main_space);
+    CHECK(sub_space, FAIL, "H5Scopy");
+
+    error=H5Sselect_hyperslab(sub_space,H5S_SELECT_SET,start,size,count,size);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    valid=H5Sselect_valid(sub_space);
+    VERIFY(valid, FALSE, "H5Sselect_valid");
+
+    error=H5Sselect_hyperslab(sub_space,H5S_SELECT_OR,safe_start,NULL,safe_count,NULL);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    valid=H5Sselect_valid(sub_space);
+    VERIFY(valid, FALSE, "H5Sselect_valid");
+
+    error=H5Sclose(sub_space);
+    CHECK(error, FAIL, "H5Sclose");
+    error=H5Sclose(main_space);
+    CHECK(error, FAIL, "H5Sclose");
+}   /* test_select_valid() */
+
+/****************************************************************
+**
+**  test_select_combine(): Test basic H5S (dataspace) selection code.
+**      Tests combining "all" and "none" selections with hyperslab
+**      operations.
+**
+****************************************************************/
+static void
+test_select_combine(void)
+{
+    hid_t base_id;      /* Base dataspace for test */
+    hid_t all_id;       /* Dataspace for "all" selection */
+    hid_t none_id;      /* Dataspace for "none" selection */
+    hid_t space1;       /* Temporary dataspace #1 */
+    hsize_t start[SPACE7_RANK];        /* Hyperslab start */
+    hsize_t stride[SPACE7_RANK];        /* Hyperslab stride */
+    hsize_t count[SPACE7_RANK];         /* Hyperslab count */
+    hsize_t block[SPACE7_RANK];         /* Hyperslab block */
+    hsize_t dims[SPACE7_RANK]={SPACE7_DIM1,SPACE7_DIM2};        /* Dimensions of dataspace */
+    H5S_sel_type sel_type;      /* Selection type */
+    hssize_t nblocks;   /* Number of hyperslab blocks */
+    hsize_t blocks[128][2][SPACE7_RANK];    /* List of blocks */
+    herr_t error;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Selection Combinations\n"));
+
+    /* Create dataspace for dataset on disk */
+    base_id = H5Screate_simple(SPACE7_RANK, dims, NULL);
+    CHECK(base_id, FAIL, "H5Screate_simple");
+
+    /* Copy base dataspace and set selection to "all" */
+    all_id=H5Scopy(base_id);
+    CHECK(all_id, FAIL, "H5Scopy");
+    error=H5Sselect_all(all_id);
+    CHECK(error, FAIL, "H5Sselect_all");
+    sel_type=H5Sget_select_type(all_id);
+    VERIFY(sel_type, H5S_SEL_ALL, "H5Sget_select_type");
+
+    /* Copy base dataspace and set selection to "none" */
+    none_id=H5Scopy(base_id);
+    CHECK(none_id, FAIL, "H5Scopy");
+    error=H5Sselect_none(none_id);
+    CHECK(error, FAIL, "H5Sselect_all");
+    sel_type=H5Sget_select_type(none_id);
+    VERIFY(sel_type, H5S_SEL_NONE, "H5Sget_select_type");
+
+
+    /* Copy "all" selection & space */
+    space1=H5Scopy(all_id);
+    CHECK(space1, FAIL, "H5Scopy");
+
+    /* 'OR' "all" selection with another hyperslab */
+    start[0]=start[1]=0;
+    stride[0]=stride[1]=1;
+    count[0]=count[1]=1;
+    block[0]=block[1]=5;
+    error=H5Sselect_hyperslab(space1,H5S_SELECT_OR,start,stride,count,block);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    /* Verify that it's still "all" selection */
+    sel_type=H5Sget_select_type(space1);
+    VERIFY(sel_type, H5S_SEL_ALL, "H5Sget_select_type");
+
+    /* Close temporary dataspace */
+    error=H5Sclose(space1);
+    CHECK(error, FAIL, "H5Sclose");
+
+    /* Copy "all" selection & space */
+    space1=H5Scopy(all_id);
+    CHECK(space1, FAIL, "H5Scopy");
+
+    /* 'AND' "all" selection with another hyperslab */
+    start[0]=start[1]=0;
+    stride[0]=stride[1]=1;
+    count[0]=count[1]=1;
+    block[0]=block[1]=5;
+    error=H5Sselect_hyperslab(space1,H5S_SELECT_AND,start,stride,count,block);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    /* Verify that the new selection is the same at the original block */
+    sel_type=H5Sget_select_type(space1);
+    VERIFY(sel_type, H5S_SEL_HYPERSLABS, "H5Sget_select_type");
+
+    /* Verify that there is only one block */
+    nblocks=H5Sget_select_hyper_nblocks(space1);
+    VERIFY(nblocks, 1, "H5Sget_select_hyper_nblocks");
+
+    /* Retrieve the block defined */
+    HDmemset(blocks,-1,sizeof(blocks));  /* Reset block list */
+    error=H5Sget_select_hyper_blocklist(space1,(hsize_t)0,(hsize_t)nblocks,(hsize_t *)blocks);
+    CHECK(error, FAIL, "H5Sget_select_hyper_blocklist");
+
+    /* Verify that the correct block is defined */
+    VERIFY(blocks[0][0][0], (hsize_t)start[0], "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][0][1], (hsize_t)start[1], "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][1][0], (block[0]-1), "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][1][1], (block[1]-1), "H5Sget_select_hyper_blocklist");
+
+    /* Close temporary dataspace */
+    error=H5Sclose(space1);
+    CHECK(error, FAIL, "H5Sclose");
+
+    /* Copy "all" selection & space */
+    space1=H5Scopy(all_id);
+    CHECK(space1, FAIL, "H5Scopy");
+
+    /* 'XOR' "all" selection with another hyperslab */
+    start[0]=start[1]=0;
+    stride[0]=stride[1]=1;
+    count[0]=count[1]=1;
+    block[0]=block[1]=5;
+    error=H5Sselect_hyperslab(space1,H5S_SELECT_XOR,start,stride,count,block);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    /* Verify that the new selection is an inversion of the original block */
+    sel_type=H5Sget_select_type(space1);
+    VERIFY(sel_type, H5S_SEL_HYPERSLABS, "H5Sget_select_type");
+
+    /* Verify that there are two blocks */
+    nblocks=H5Sget_select_hyper_nblocks(space1);
+    VERIFY(nblocks, 2, "H5Sget_select_hyper_nblocks");
+
+    /* Retrieve the block defined */
+    HDmemset(blocks,-1,sizeof(blocks));  /* Reset block list */
+    error=H5Sget_select_hyper_blocklist(space1,(hsize_t)0,(hsize_t)nblocks,(hsize_t *)blocks);
+    CHECK(error, FAIL, "H5Sget_select_hyper_blocklist");
+
+    /* Verify that the correct block is defined */
+    VERIFY(blocks[0][0][0], 0, "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][0][1], 5, "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][1][0], 4, "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][1][1], 9, "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[1][0][0], 5, "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[1][0][1], 0, "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[1][1][0], 9, "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[1][1][1], 9, "H5Sget_select_hyper_blocklist");
+
+    /* Close temporary dataspace */
+    error=H5Sclose(space1);
+    CHECK(error, FAIL, "H5Sclose");
+
+    /* Copy "all" selection & space */
+    space1=H5Scopy(all_id);
+    CHECK(space1, FAIL, "H5Scopy");
+
+    /* 'NOTB' "all" selection with another hyperslab */
+    start[0]=start[1]=0;
+    stride[0]=stride[1]=1;
+    count[0]=count[1]=1;
+    block[0]=block[1]=5;
+    error=H5Sselect_hyperslab(space1,H5S_SELECT_NOTB,start,stride,count,block);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    /* Verify that the new selection is an inversion of the original block */
+    sel_type=H5Sget_select_type(space1);
+    VERIFY(sel_type, H5S_SEL_HYPERSLABS, "H5Sget_select_type");
+
+    /* Verify that there are two blocks */
+    nblocks=H5Sget_select_hyper_nblocks(space1);
+    VERIFY(nblocks, 2, "H5Sget_select_hyper_nblocks");
+
+    /* Retrieve the block defined */
+    HDmemset(blocks,-1,sizeof(blocks));  /* Reset block list */
+    error=H5Sget_select_hyper_blocklist(space1,(hsize_t)0,(hsize_t)nblocks,(hsize_t *)blocks);
+    CHECK(error, FAIL, "H5Sget_select_hyper_blocklist");
+
+    /* Verify that the correct block is defined */
+    VERIFY(blocks[0][0][0], 0, "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][0][1], 5, "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][1][0], 4, "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][1][1], 9, "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[1][0][0], 5, "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[1][0][1], 0, "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[1][1][0], 9, "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[1][1][1], 9, "H5Sget_select_hyper_blocklist");
+
+    /* Close temporary dataspace */
+    error=H5Sclose(space1);
+    CHECK(error, FAIL, "H5Sclose");
+
+    /* Copy "all" selection & space */
+    space1=H5Scopy(all_id);
+    CHECK(space1, FAIL, "H5Scopy");
+
+    /* 'NOTA' "all" selection with another hyperslab */
+    start[0]=start[1]=0;
+    stride[0]=stride[1]=1;
+    count[0]=count[1]=1;
+    block[0]=block[1]=5;
+    error=H5Sselect_hyperslab(space1,H5S_SELECT_NOTA,start,stride,count,block);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    /* Verify that the new selection is the "none" selection */
+    sel_type=H5Sget_select_type(space1);
+    VERIFY(sel_type, H5S_SEL_NONE, "H5Sget_select_type");
+
+    /* Close temporary dataspace */
+    error=H5Sclose(space1);
+    CHECK(error, FAIL, "H5Sclose");
+
+
+    /* Copy "none" selection & space */
+    space1=H5Scopy(none_id);
+    CHECK(space1, FAIL, "H5Scopy");
+
+    /* 'OR' "none" selection with another hyperslab */
+    start[0]=start[1]=0;
+    stride[0]=stride[1]=1;
+    count[0]=count[1]=1;
+    block[0]=block[1]=5;
+    error=H5Sselect_hyperslab(space1,H5S_SELECT_OR,start,stride,count,block);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    /* Verify that the new selection is the same as the original hyperslab */
+    sel_type=H5Sget_select_type(space1);
+    VERIFY(sel_type, H5S_SEL_HYPERSLABS, "H5Sget_select_type");
+
+    /* Verify that there is only one block */
+    nblocks=H5Sget_select_hyper_nblocks(space1);
+    VERIFY(nblocks, 1, "H5Sget_select_hyper_nblocks");
+
+    /* Retrieve the block defined */
+    HDmemset(blocks,-1,sizeof(blocks));  /* Reset block list */
+    error=H5Sget_select_hyper_blocklist(space1,(hsize_t)0,(hsize_t)nblocks,(hsize_t *)blocks);
+    CHECK(error, FAIL, "H5Sget_select_hyper_blocklist");
+
+    /* Verify that the correct block is defined */
+    VERIFY(blocks[0][0][0], (hsize_t)start[0], "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][0][1], (hsize_t)start[1], "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][1][0], (block[0]-1), "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][1][1], (block[1]-1), "H5Sget_select_hyper_blocklist");
+
+    /* Close temporary dataspace */
+    error=H5Sclose(space1);
+    CHECK(error, FAIL, "H5Sclose");
+
+    /* Copy "none" selection & space */
+    space1=H5Scopy(none_id);
+    CHECK(space1, FAIL, "H5Scopy");
+
+    /* 'AND' "none" selection with another hyperslab */
+    start[0]=start[1]=0;
+    stride[0]=stride[1]=1;
+    count[0]=count[1]=1;
+    block[0]=block[1]=5;
+    error=H5Sselect_hyperslab(space1,H5S_SELECT_AND,start,stride,count,block);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    /* Verify that the new selection is the "none" selection */
+    sel_type=H5Sget_select_type(space1);
+    VERIFY(sel_type, H5S_SEL_NONE, "H5Sget_select_type");
+
+    /* Close temporary dataspace */
+    error=H5Sclose(space1);
+    CHECK(error, FAIL, "H5Sclose");
+
+    /* Copy "none" selection & space */
+    space1=H5Scopy(none_id);
+    CHECK(space1, FAIL, "H5Scopy");
+
+    /* 'XOR' "none" selection with another hyperslab */
+    start[0]=start[1]=0;
+    stride[0]=stride[1]=1;
+    count[0]=count[1]=1;
+    block[0]=block[1]=5;
+    error=H5Sselect_hyperslab(space1,H5S_SELECT_XOR,start,stride,count,block);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    /* Verify that the new selection is the same as the original hyperslab */
+    sel_type=H5Sget_select_type(space1);
+    VERIFY(sel_type, H5S_SEL_HYPERSLABS, "H5Sget_select_type");
+
+    /* Verify that there is only one block */
+    nblocks=H5Sget_select_hyper_nblocks(space1);
+    VERIFY(nblocks, 1, "H5Sget_select_hyper_nblocks");
+
+    /* Retrieve the block defined */
+    HDmemset(blocks,-1,sizeof(blocks));  /* Reset block list */
+    error=H5Sget_select_hyper_blocklist(space1,(hsize_t)0,(hsize_t)nblocks,(hsize_t *)blocks);
+    CHECK(error, FAIL, "H5Sget_select_hyper_blocklist");
+
+    /* Verify that the correct block is defined */
+    VERIFY(blocks[0][0][0], (hsize_t)start[0], "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][0][1], (hsize_t)start[1], "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][1][0], (block[0]-1), "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][1][1], (block[1]-1), "H5Sget_select_hyper_blocklist");
+
+    /* Close temporary dataspace */
+    error=H5Sclose(space1);
+    CHECK(error, FAIL, "H5Sclose");
+
+    /* Copy "none" selection & space */
+    space1=H5Scopy(none_id);
+    CHECK(space1, FAIL, "H5Scopy");
+
+    /* 'NOTB' "none" selection with another hyperslab */
+    start[0]=start[1]=0;
+    stride[0]=stride[1]=1;
+    count[0]=count[1]=1;
+    block[0]=block[1]=5;
+    error=H5Sselect_hyperslab(space1,H5S_SELECT_NOTB,start,stride,count,block);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    /* Verify that the new selection is the "none" selection */
+    sel_type=H5Sget_select_type(space1);
+    VERIFY(sel_type, H5S_SEL_NONE, "H5Sget_select_type");
+
+    /* Close temporary dataspace */
+    error=H5Sclose(space1);
+    CHECK(error, FAIL, "H5Sclose");
+
+    /* Copy "none" selection & space */
+    space1=H5Scopy(none_id);
+    CHECK(space1, FAIL, "H5Scopy");
+
+    /* 'NOTA' "none" selection with another hyperslab */
+    start[0]=start[1]=0;
+    stride[0]=stride[1]=1;
+    count[0]=count[1]=1;
+    block[0]=block[1]=5;
+    error=H5Sselect_hyperslab(space1,H5S_SELECT_NOTA,start,stride,count,block);
+    CHECK(error, FAIL, "H5Sselect_hyperslab");
+
+    /* Verify that the new selection is the same as the original hyperslab */
+    sel_type=H5Sget_select_type(space1);
+    VERIFY(sel_type, H5S_SEL_HYPERSLABS, "H5Sget_select_type");
+
+    /* Verify that there is only one block */
+    nblocks=H5Sget_select_hyper_nblocks(space1);
+    VERIFY(nblocks, 1, "H5Sget_select_hyper_nblocks");
+
+    /* Retrieve the block defined */
+    HDmemset(blocks,-1,sizeof(blocks));  /* Reset block list */
+    error=H5Sget_select_hyper_blocklist(space1,(hsize_t)0,(hsize_t)nblocks,(hsize_t *)blocks);
+    CHECK(error, FAIL, "H5Sget_select_hyper_blocklist");
+
+    /* Verify that the correct block is defined */
+    VERIFY(blocks[0][0][0], (hsize_t)start[0], "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][0][1], (hsize_t)start[1], "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][1][0], (block[0]-1), "H5Sget_select_hyper_blocklist");
+    VERIFY(blocks[0][1][1], (block[1]-1), "H5Sget_select_hyper_blocklist");
+
+    /* Close temporary dataspace */
+    error=H5Sclose(space1);
+    CHECK(error, FAIL, "H5Sclose");
+
+
+    /* Close dataspaces */
+    error=H5Sclose(base_id);
+    CHECK(error, FAIL, "H5Sclose");
+
+    error=H5Sclose(all_id);
+    CHECK(error, FAIL, "H5Sclose");
+
+    error=H5Sclose(none_id);
+    CHECK(error, FAIL, "H5Sclose");
+}   /* test_select_combine() */
+
+/*
+ * Typedef for iteration structure used in the fill value tests
+ */
+typedef struct {
+    unsigned short fill_value;  /* The fill value to check */
+    size_t curr_coord;          /* Current coordinate to examine */
+    hsize_t *coords;            /* Pointer to selection's coordinates */
+} fill_iter_info;
+
+/****************************************************************
+**
+**  test_select_hyper_iter3(): Iterator for checking hyperslab iteration
+**
+****************************************************************/
+herr_t
+test_select_hyper_iter3(void *_elem, hid_t UNUSED type_id, unsigned ndim, const hsize_t *point, void *_operator_data)
+{
+    unsigned short *tbuf=(unsigned short *)_elem;     /* temporary buffer pointer */
+    fill_iter_info *iter_info=(fill_iter_info *)_operator_data; /* Get the pointer to the iterator information */
+    hsize_t *coord_ptr;        /* Pointer to the coordinate information for a point*/
+
+    /* Check value in current buffer location */
+    if(*tbuf!=iter_info->fill_value)
+        return(-1);
+    else {
+        /* Check number of dimensions */
+        if(ndim!=SPACE7_RANK)
+            return(-1);
+        else {
+            /* Check Coordinates */
+            coord_ptr=iter_info->coords+(2*iter_info->curr_coord);
+            iter_info->curr_coord++;
+            if(coord_ptr[0]!=point[0])
+                return(-1);
+            else if(coord_ptr[1]!=point[1])
+                return(-1);
+            else
+                return(0);
+        } /* end else */
+    } /* end else */
+}   /* end test_select_hyper_iter3() */
+
+/****************************************************************
+**
+**  test_select_fill_all(): Test basic H5S (dataspace) selection code.
+**      Tests filling "all" selections
+**
+****************************************************************/
+static void
+test_select_fill_all(void)
+{
+    hid_t	sid1;           /* Dataspace ID */
+    hsize_t	dims1[] = {SPACE7_DIM1, SPACE7_DIM2};
+    int         fill_value;     /* Fill value */
+    fill_iter_info iter_info;   /* Iterator information structure */
+    hsize_t     points[SPACE7_DIM1*SPACE7_DIM2][SPACE7_RANK];   /* Coordinates of selection */
+    unsigned short *wbuf,       /* buffer to write to disk */
+               *tbuf;           /* temporary buffer pointer */
+    int         i,j;            /* Counters */
+    herr_t	ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Filling 'all' Selections\n"));
+
+    /* Allocate memory buffer */
+    wbuf=HDmalloc(sizeof(unsigned short)*SPACE7_DIM1*SPACE7_DIM2);
+
+    /* Initialize memory buffer */
+    for(i=0, tbuf=wbuf; i<SPACE7_DIM1; i++)
+        for(j=0; j<SPACE7_DIM2; j++)
+            *tbuf++=(unsigned short)(i*SPACE7_DIM2)+j;
+
+    /* Create dataspace for dataset on disk */
+    sid1 = H5Screate_simple(SPACE7_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Space defaults to "all" selection */
+
+    /* Set fill value */
+    fill_value=SPACE7_FILL;
+
+    /* Fill selection in memory */
+    ret=H5Dfill(&fill_value,H5T_NATIVE_INT,wbuf,H5T_NATIVE_USHORT,sid1);
+    CHECK(ret, FAIL, "H5Dfill");
+
+    /* Verify memory buffer the hard way... */
+    for(i=0, tbuf=wbuf; i<SPACE7_DIM1; i++)
+        for(j=0; j<SPACE7_DIM2; j++)
+            if(*tbuf!=(unsigned short)fill_value)
+                TestErrPrintf("Error! j=%d, i=%d, *tbuf=%x, fill_value=%x\n",j,i,(unsigned)*tbuf,(unsigned)fill_value);
+
+    /* Set the coordinates of the selection */
+    for(i=0; i<SPACE7_DIM1; i++)
+        for(j=0; j<SPACE7_DIM2; j++) {
+            points[(i*SPACE7_DIM2)+j][0]=i;
+            points[(i*SPACE7_DIM2)+j][1]=j;
+        } /* end for */
+
+    /* Initialize the iterator structure */
+    iter_info.fill_value=SPACE7_FILL;
+    iter_info.curr_coord=0;
+    iter_info.coords=(hsize_t *)points;
+
+    /* Iterate through selection, verifying correct data */
+    ret = H5Diterate(wbuf,H5T_NATIVE_USHORT,sid1,test_select_hyper_iter3,&iter_info);
+    CHECK(ret, FAIL, "H5Diterate");
+
+    /* Close dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+}   /* test_select_fill_all() */
+
+/****************************************************************
+**
+**  test_select_fill_point(): Test basic H5S (dataspace) selection code.
+**      Tests filling "point" selections
+**
+****************************************************************/
+static void
+test_select_fill_point(hssize_t *offset)
+{
+    hid_t	sid1;           /* Dataspace ID */
+    hsize_t	dims1[] = {SPACE7_DIM1, SPACE7_DIM2};
+    hssize_t    real_offset[SPACE7_RANK];       /* Actual offset to use */
+    hsize_t     points[5][SPACE7_RANK] = {{2,4}, {3,8}, {8,4}, {7,5}, {7,7}};
+    size_t      num_points=5;   /* Number of points selected */
+    int         fill_value;     /* Fill value */
+    fill_iter_info iter_info;   /* Iterator information structure */
+    unsigned short *wbuf,       /* buffer to write to disk */
+               *tbuf;           /* temporary buffer pointer */
+    int         i,j,k;          /* Counters */
+    herr_t	ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Filling 'point' Selections\n"));
+
+    /* Allocate memory buffer */
+    wbuf=HDmalloc(sizeof(unsigned short)*SPACE7_DIM1*SPACE7_DIM2);
+
+    /* Initialize memory buffer */
+    for(i=0, tbuf=wbuf; i<SPACE7_DIM1; i++)
+        for(j=0; j<SPACE7_DIM2; j++)
+            *tbuf++=(unsigned short)(i*SPACE7_DIM2)+j;
+
+    /* Create dataspace for dataset on disk */
+    sid1 = H5Screate_simple(SPACE7_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Select "point" selection */
+    ret = H5Sselect_elements(sid1, H5S_SELECT_SET,num_points,(const hsize_t **)points);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    if(offset!=NULL) {
+        HDmemcpy(real_offset,offset,SPACE7_RANK*sizeof(hssize_t));
+
+        /* Set offset, if provided */
+        ret = H5Soffset_simple(sid1,real_offset);
+        CHECK(ret, FAIL, "H5Soffset_simple");
+    } /* end if */
+    else
+        HDmemset(real_offset,0,SPACE7_RANK*sizeof(hssize_t));
+
+    /* Set fill value */
+    fill_value=SPACE7_FILL;
+
+    /* Fill selection in memory */
+    ret=H5Dfill(&fill_value,H5T_NATIVE_INT,wbuf,H5T_NATIVE_USHORT,sid1);
+    CHECK(ret, FAIL, "H5Dfill");
+
+    /* Verify memory buffer the hard way... */
+    for(i=0, tbuf=wbuf; i<SPACE7_DIM1; i++)
+        for(j=0; j<SPACE7_DIM2; j++, tbuf++) {
+            for(k=0; k<(int)num_points; k++) {
+                if(i==(int)(points[k][0]+real_offset[0]) && j==(int)(points[k][1]+real_offset[1])) {
+                    if(*tbuf!=(unsigned short)fill_value)
+                        TestErrPrintf("Error! j=%d, i=%d, *tbuf=%u, fill_value=%u\n",j,i,(unsigned)*tbuf,(unsigned)fill_value);
+                    break;
+                } /* end if */
+            } /* end for */
+            if(k==(int)num_points && *tbuf!=((unsigned short)(i*SPACE7_DIM2)+j))
+                TestErrPrintf("Error! j=%d, i=%d, *tbuf=%u, should be: %u\n",j,i,(unsigned)*tbuf,(unsigned)((i*SPACE7_DIM2)+j));
+        } /* end for */
+
+    /* Initialize the iterator structure */
+    iter_info.fill_value=SPACE7_FILL;
+    iter_info.curr_coord=0;
+    iter_info.coords=(hsize_t *)points;
+
+    /* Add in the offset */
+    for(i=0; i<(int)num_points; i++) {
+        points[i][0]+=real_offset[0];
+        points[i][1]+=real_offset[1];
+    } /* end for */
+
+    /* Iterate through selection, verifying correct data */
+    ret = H5Diterate(wbuf,H5T_NATIVE_USHORT,sid1,test_select_hyper_iter3,&iter_info);
+    CHECK(ret, FAIL, "H5Diterate");
+
+    /* Close dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+}   /* test_select_fill_point() */
+
+/****************************************************************
+**
+**  test_select_fill_hyper_simple(): Test basic H5S (dataspace) selection code.
+**      Tests filling "simple" (i.e. one block) hyperslab selections
+**
+****************************************************************/
+static void
+test_select_fill_hyper_simple(hssize_t *offset)
+{
+    hid_t	sid1;           /* Dataspace ID */
+    hsize_t	dims1[] = {SPACE7_DIM1, SPACE7_DIM2};
+    hssize_t    real_offset[SPACE7_RANK];       /* Actual offset to use */
+    hsize_t     start[SPACE7_RANK];     /* Hyperslab start */
+    hsize_t     count[SPACE7_RANK];     /* Hyperslab block size */
+    size_t      num_points;     /* Number of points in selection */
+    hsize_t     points[16][SPACE7_RANK];        /* Coordinates selected */
+    int         fill_value;     /* Fill value */
+    fill_iter_info iter_info;   /* Iterator information structure */
+    unsigned short *wbuf,       /* buffer to write to disk */
+               *tbuf;           /* temporary buffer pointer */
+    int         i,j;            /* Counters */
+    herr_t	ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Filling Simple 'hyperslab' Selections\n"));
+
+    /* Allocate memory buffer */
+    wbuf=HDmalloc(sizeof(unsigned short)*SPACE7_DIM1*SPACE7_DIM2);
+
+    /* Initialize memory buffer */
+    for(i=0, tbuf=wbuf; i<SPACE7_DIM1; i++)
+        for(j=0; j<SPACE7_DIM2; j++)
+            *tbuf++=(unsigned short)(i*SPACE7_DIM2)+j;
+
+    /* Create dataspace for dataset on disk */
+    sid1 = H5Screate_simple(SPACE7_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Select "hyperslab" selection */
+    start[0]=3; start[1]=3;
+    count[0]=4; count[1]=4;
+    ret = H5Sselect_hyperslab(sid1, H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    if(offset!=NULL) {
+        HDmemcpy(real_offset,offset,SPACE7_RANK*sizeof(hssize_t));
+
+        /* Set offset, if provided */
+        ret = H5Soffset_simple(sid1,real_offset);
+        CHECK(ret, FAIL, "H5Soffset_simple");
+    } /* end if */
+    else
+        HDmemset(real_offset,0,SPACE7_RANK*sizeof(hssize_t));
+
+    /* Set fill value */
+    fill_value=SPACE7_FILL;
+
+    /* Fill selection in memory */
+    ret=H5Dfill(&fill_value,H5T_NATIVE_INT,wbuf,H5T_NATIVE_USHORT,sid1);
+    CHECK(ret, FAIL, "H5Dfill");
+
+    /* Verify memory buffer the hard way... */
+    for(i=0, tbuf=wbuf; i<SPACE7_DIM1; i++)
+        for(j=0; j<SPACE7_DIM2; j++, tbuf++) {
+            if((i>=(int)(start[0]+real_offset[0]) && i<(int)(start[0]+count[0]+real_offset[0]))
+                && (j>=(int)(start[1]+real_offset[1]) && j<(int)(start[1]+count[1]+real_offset[1]))) {
+                    if(*tbuf!=(unsigned short)fill_value)
+                        TestErrPrintf("Error! j=%d, i=%d, *tbuf=%u, fill_value=%u\n",j,i,(unsigned)*tbuf,(unsigned)fill_value);
+                } /* end if */
+            else {
+                if(*tbuf!=((unsigned short)(i*SPACE7_DIM2)+j))
+                    TestErrPrintf("Error! j=%d, i=%d, *tbuf=%u, should be: %u\n",j,i,(unsigned)*tbuf,(unsigned)((i*SPACE7_DIM2)+j));
+            } /* end else */
+        } /* end for */
+
+    /* Initialize the iterator structure */
+    iter_info.fill_value=SPACE7_FILL;
+    iter_info.curr_coord=0;
+    iter_info.coords=(hsize_t *)points;
+
+    /* Set the coordinates of the selection (with the offset) */
+    for(i=0, num_points=0; i<(int)count[0]; i++)
+        for(j=0; j<(int)count[1]; j++, num_points++) {
+            points[num_points][0]=i+start[0]+real_offset[0];
+            points[num_points][1]=j+start[1]+real_offset[1];
+        } /* end for */
+
+    /* Iterate through selection, verifying correct data */
+    ret = H5Diterate(wbuf,H5T_NATIVE_USHORT,sid1,test_select_hyper_iter3,&iter_info);
+    CHECK(ret, FAIL, "H5Diterate");
+
+    /* Close dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+}   /* test_select_fill_hyper_simple() */
+
+/****************************************************************
+**
+**  test_select_fill_hyper_regular(): Test basic H5S (dataspace) selection code.
+**      Tests filling "regular" (i.e. strided block) hyperslab selections
+**
+****************************************************************/
+static void
+test_select_fill_hyper_regular(hssize_t *offset)
+{
+    hid_t	sid1;           /* Dataspace ID */
+    hsize_t	dims1[] = {SPACE7_DIM1, SPACE7_DIM2};
+    hssize_t    real_offset[SPACE7_RANK];       /* Actual offset to use */
+    hsize_t     start[SPACE7_RANK];     /* Hyperslab start */
+    hsize_t     stride[SPACE7_RANK];    /* Hyperslab stride size */
+    hsize_t     count[SPACE7_RANK];     /* Hyperslab block count */
+    hsize_t     block[SPACE7_RANK];     /* Hyperslab block size */
+    hsize_t     points[16][SPACE7_RANK] = {
+        {2,2}, {2,3}, {2,6}, {2,7},
+        {3,2}, {3,3}, {3,6}, {3,7},
+        {6,2}, {6,3}, {6,6}, {6,7},
+        {7,2}, {7,3}, {7,6}, {7,7},
+        };
+    size_t      num_points=16;  /* Number of points selected */
+    int         fill_value;     /* Fill value */
+    fill_iter_info iter_info;   /* Iterator information structure */
+    unsigned short *wbuf,       /* buffer to write to disk */
+               *tbuf;           /* temporary buffer pointer */
+    int         i,j,k;          /* Counters */
+    herr_t	ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Filling Regular 'hyperslab' Selections\n"));
+
+    /* Allocate memory buffer */
+    wbuf=HDmalloc(sizeof(unsigned short)*SPACE7_DIM1*SPACE7_DIM2);
+
+    /* Initialize memory buffer */
+    for(i=0, tbuf=wbuf; i<SPACE7_DIM1; i++)
+        for(j=0; j<SPACE7_DIM2; j++)
+            *tbuf++=(unsigned short)(i*SPACE7_DIM2)+j;
+
+    /* Create dataspace for dataset on disk */
+    sid1 = H5Screate_simple(SPACE7_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Select "hyperslab" selection */
+    start[0]=2; start[1]=2;
+    stride[0]=4; stride[1]=4;
+    count[0]=2; count[1]=2;
+    block[0]=2; block[1]=2;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    if(offset!=NULL) {
+        HDmemcpy(real_offset,offset,SPACE7_RANK*sizeof(hssize_t));
+
+        /* Set offset, if provided */
+        ret = H5Soffset_simple(sid1,real_offset);
+        CHECK(ret, FAIL, "H5Soffset_simple");
+    } /* end if */
+    else
+        HDmemset(real_offset,0,SPACE7_RANK*sizeof(hssize_t));
+
+    /* Set fill value */
+    fill_value=SPACE7_FILL;
+
+    /* Fill selection in memory */
+    ret=H5Dfill(&fill_value,H5T_NATIVE_INT,wbuf,H5T_NATIVE_USHORT,sid1);
+    CHECK(ret, FAIL, "H5Dfill");
+
+    /* Verify memory buffer the hard way... */
+    for(i=0, tbuf=wbuf; i<SPACE7_DIM1; i++)
+        for(j=0; j<SPACE7_DIM2; j++, tbuf++) {
+            for(k=0; k<(int)num_points; k++) {
+                if(i==(int)(points[k][0]+real_offset[0]) && j==(int)(points[k][1]+real_offset[1])) {
+                    if(*tbuf!=(unsigned short)fill_value)
+                        TestErrPrintf("Error! j=%d, i=%d, *tbuf=%u, fill_value=%u\n",j,i,(unsigned)*tbuf,(unsigned)fill_value);
+                    break;
+                } /* end if */
+            } /* end for */
+            if(k==(int)num_points && *tbuf!=((unsigned short)(i*SPACE7_DIM2)+j))
+                TestErrPrintf("Error! j=%d, i=%d, *tbuf=%u, should be: %u\n",j,i,(unsigned)*tbuf,(unsigned)((i*SPACE7_DIM2)+j));
+        } /* end for */
+
+    /* Initialize the iterator structure */
+    iter_info.fill_value=SPACE7_FILL;
+    iter_info.curr_coord=0;
+    iter_info.coords=(hsize_t *)points;
+
+    /* Add in the offset */
+    for(i=0; i<(int)num_points; i++) {
+        points[i][0]+=real_offset[0];
+        points[i][1]+=real_offset[1];
+    } /* end for */
+
+    /* Iterate through selection, verifying correct data */
+    ret = H5Diterate(wbuf,H5T_NATIVE_USHORT,sid1,test_select_hyper_iter3,&iter_info);
+    CHECK(ret, FAIL, "H5Diterate");
+
+    /* Close dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+}   /* test_select_fill_hyper_regular() */
+
+/****************************************************************
+**
+**  test_select_fill_hyper_irregular(): Test basic H5S (dataspace) selection code.
+**      Tests filling "irregular" (i.e. combined blocks) hyperslab selections
+**
+****************************************************************/
+static void
+test_select_fill_hyper_irregular(hssize_t *offset)
+{
+    hid_t	sid1;           /* Dataspace ID */
+    hsize_t	dims1[] = {SPACE7_DIM1, SPACE7_DIM2};
+    hssize_t    real_offset[SPACE7_RANK];       /* Actual offset to use */
+    hsize_t     start[SPACE7_RANK];     /* Hyperslab start */
+    hsize_t     count[SPACE7_RANK];     /* Hyperslab block count */
+    hsize_t     points[32][SPACE7_RANK] = { /* Yes, some of the are duplicated.. */
+        {2,2}, {2,3}, {2,4}, {2,5},
+        {3,2}, {3,3}, {3,4}, {3,5},
+        {4,2}, {4,3}, {4,4}, {4,5},
+        {5,2}, {5,3}, {5,4}, {5,5},
+        {4,4}, {4,5}, {4,6}, {4,7},
+        {5,4}, {5,5}, {5,6}, {5,7},
+        {6,4}, {6,5}, {6,6}, {6,7},
+        {7,4}, {7,5}, {7,6}, {7,7},
+        };
+    hsize_t     iter_points[28][SPACE7_RANK] = { /* Coordinates, as iterated through */
+        {2,2}, {2,3}, {2,4}, {2,5},
+        {3,2}, {3,3}, {3,4}, {3,5},
+        {4,2}, {4,3}, {4,4}, {4,5}, {4,6}, {4,7},
+        {5,2}, {5,3}, {5,4}, {5,5}, {5,6}, {5,7},
+        {6,4}, {6,5}, {6,6}, {6,7},
+        {7,4}, {7,5}, {7,6}, {7,7},
+        };
+    size_t      num_points=32;  /* Number of points selected */
+    size_t      num_iter_points=28;  /* Number of resulting points */
+    int         fill_value;     /* Fill value */
+    fill_iter_info iter_info;   /* Iterator information structure */
+    unsigned short *wbuf,       /* buffer to write to disk */
+               *tbuf;           /* temporary buffer pointer */
+    int         i,j,k;          /* Counters */
+    herr_t	ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Filling Irregular 'hyperslab' Selections\n"));
+
+    /* Allocate memory buffer */
+    wbuf=HDmalloc(sizeof(unsigned short)*SPACE7_DIM1*SPACE7_DIM2);
+
+    /* Initialize memory buffer */
+    for(i=0, tbuf=wbuf; i<SPACE7_DIM1; i++)
+        for(j=0; j<SPACE7_DIM2; j++)
+            *tbuf++=(unsigned short)(i*SPACE7_DIM2)+j;
+
+    /* Create dataspace for dataset on disk */
+    sid1 = H5Screate_simple(SPACE7_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Select first "hyperslab" selection */
+    start[0]=2; start[1]=2;
+    count[0]=4; count[1]=4;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Combine with second "hyperslab" selection */
+    start[0]=4; start[1]=4;
+    count[0]=4; count[1]=4;
+    ret = H5Sselect_hyperslab(sid1,H5S_SELECT_OR,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    if(offset!=NULL) {
+        HDmemcpy(real_offset,offset,SPACE7_RANK*sizeof(hssize_t));
+
+        /* Set offset, if provided */
+        ret = H5Soffset_simple(sid1,real_offset);
+        CHECK(ret, FAIL, "H5Soffset_simple");
+    } /* end if */
+    else
+        HDmemset(real_offset,0,SPACE7_RANK*sizeof(hssize_t));
+
+    /* Set fill value */
+    fill_value=SPACE7_FILL;
+
+    /* Fill selection in memory */
+    ret=H5Dfill(&fill_value,H5T_NATIVE_INT,wbuf,H5T_NATIVE_USHORT,sid1);
+    CHECK(ret, FAIL, "H5Dfill");
+
+    /* Verify memory buffer the hard way... */
+    for(i=0, tbuf=wbuf; i<SPACE7_DIM1; i++)
+        for(j=0; j<SPACE7_DIM2; j++, tbuf++) {
+            for(k=0; k<(int)num_points; k++) {
+                if(i==(int)(points[k][0]+real_offset[0]) && j==(int)(points[k][1]+real_offset[1])) {
+                    if(*tbuf!=(unsigned short)fill_value)
+                        TestErrPrintf("Error! j=%d, i=%d, *tbuf=%u, fill_value=%u\n",j,i,(unsigned)*tbuf,(unsigned)fill_value);
+                    break;
+                } /* end if */
+            } /* end for */
+            if(k==(int)num_points && *tbuf!=((unsigned short)(i*SPACE7_DIM2)+j))
+                TestErrPrintf("Error! j=%d, i=%d, *tbuf=%u, should be: %u\n",j,i,(unsigned)*tbuf,(unsigned)((i*SPACE7_DIM2)+j));
+        } /* end for */
+
+    /* Initialize the iterator structure */
+    iter_info.fill_value=SPACE7_FILL;
+    iter_info.curr_coord=0;
+    iter_info.coords=(hsize_t *)iter_points;
+
+    /* Add in the offset */
+    for(i=0; i<(int)num_iter_points; i++) {
+        iter_points[i][0]+=real_offset[0];
+        iter_points[i][1]+=real_offset[1];
+    } /* end for */
+
+    /* Iterate through selection, verifying correct data */
+    ret = H5Diterate(wbuf,H5T_NATIVE_USHORT,sid1,test_select_hyper_iter3,&iter_info);
+    CHECK(ret, FAIL, "H5Diterate");
+
+    /* Close dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf);
+}   /* test_select_fill_hyper_irregular() */
+
+/****************************************************************
+**
+**  test_select_none(): Test basic H5S (dataspace) selection code.
+**      Tests I/O on 0-sized point selections
+**
+****************************************************************/
+static void
+test_select_none(void)
+{
+    hid_t	fid1;		/* HDF5 File IDs		*/
+    hid_t	dataset;	/* Dataset ID			*/
+    hid_t	sid1,sid2;	/* Dataspace ID			*/
+    hsize_t	dims1[] = {SPACE7_DIM1, SPACE7_DIM2};
+    hsize_t	dims2[] = {SPACE7_DIM1, SPACE7_DIM2};
+    uint8_t    *wbuf,           /* buffer to write to disk */
+               *rbuf,           /* buffer to read from disk */
+               *tbuf;           /* temporary buffer pointer */
+    int         i,j;            /* Counters */
+    herr_t	ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing I/O on 0-sized Selections\n"));
+
+    /* Allocate write & read buffers */
+    wbuf=malloc(sizeof(uint8_t)*SPACE7_DIM1*SPACE7_DIM2);
+    rbuf=malloc(sizeof(uint8_t)*SPACE7_DIM1*SPACE7_DIM2);
+
+    /* Initialize write buffer */
+    for(i=0, tbuf=wbuf; i<SPACE7_DIM1; i++)
+        for(j=0; j<SPACE7_DIM2; j++)
+            *tbuf++=(uint8_t)((i*SPACE7_DIM2)+j);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate_simple(SPACE7_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE7_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Make "none" selection in both disk and memory datasets */
+    ret = H5Sselect_none(sid1);
+    CHECK(ret, FAIL, "H5Sselect_none");
+
+    ret = H5Sselect_none(sid2);
+    CHECK(ret, FAIL, "H5Sselect_none");
+
+    /* Attempt to read "nothing" from disk (before space is allocated) */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,rbuf);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Write "nothing" to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Write "nothing" to disk (with a datatype conversion :-) */
+    ret=H5Dwrite(dataset,H5T_NATIVE_INT,sid2,sid1,H5P_DEFAULT,wbuf);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Write "nothing" to disk (with NULL buffer argument) */
+    ret=H5Dwrite(dataset,H5T_NATIVE_INT,sid2,sid1,H5P_DEFAULT,NULL);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read "nothing" from disk (with NULL buffer argument) */
+    ret=H5Dread(dataset,H5T_NATIVE_INT,sid2,sid1,H5P_DEFAULT,NULL);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    free(wbuf);
+    free(rbuf);
+}   /* test_select_none() */
+
+/****************************************************************
+**
+**  test_scalar_select(): Test basic H5S (dataspace) selection code.
+**      Tests selections on scalar dataspaces
+**
+****************************************************************/
+static void
+test_scalar_select(void)
+{
+    hid_t	fid1;		/* HDF5 File IDs		*/
+    hid_t	dataset;	/* Dataset ID			*/
+    hid_t	sid1,sid2;	/* Dataspace ID			*/
+    hsize_t	dims2[] = {SPACE7_DIM1, SPACE7_DIM2};
+    hsize_t	coord1[SPACE7_RANK]; /* Coordinates for point selection */
+    hsize_t     start[SPACE7_RANK]; /* Hyperslab start */
+    hsize_t     count[SPACE7_RANK]; /* Hyperslab block count */
+    uint8_t    *wbuf_uint8,     /* buffer to write to disk */
+                rval_uint8,     /* value read back in */
+               *tbuf_uint8;     /* temporary buffer pointer */
+    unsigned short *wbuf_ushort,/* another buffer to write to disk */
+                rval_ushort,    /* value read back in */
+               *tbuf_ushort;    /* temporary buffer pointer */
+    int         i,j;            /* Counters */
+    herr_t	ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing I/O on Selections in Scalar Dataspaces\n"));
+
+    /* Allocate write & read buffers */
+    wbuf_uint8=HDmalloc(sizeof(uint8_t)*SPACE7_DIM1*SPACE7_DIM2);
+    wbuf_ushort=HDmalloc(sizeof(unsigned short)*SPACE7_DIM1*SPACE7_DIM2);
+
+    /* Initialize write buffers */
+    for(i=0, tbuf_uint8=wbuf_uint8, tbuf_ushort=wbuf_ushort; i<SPACE7_DIM1; i++)
+        for(j=0; j<SPACE7_DIM2; j++) {
+            *tbuf_uint8++=(uint8_t)((i*SPACE7_DIM2)+j);
+            *tbuf_ushort++=(unsigned short)((j*SPACE7_DIM2)+i);
+        } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for dataset */
+    sid1 = H5Screate(H5S_SCALAR);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create dataspace for writing buffer */
+    sid2 = H5Screate_simple(SPACE7_RANK, dims2, NULL);
+    CHECK(sid2, FAIL, "H5Screate_simple");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",H5T_NATIVE_UCHAR,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Select one element in memory with a point selection */
+    coord1[0]=0; coord1[1]= 2;
+    ret = H5Sselect_elements(sid2,H5S_SELECT_SET,1,(const hsize_t **)&coord1);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Write single point to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf_uint8);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read scalar element from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid1,sid1,H5P_DEFAULT,&rval_uint8);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check value read back in */
+    if(rval_uint8!=*(wbuf_uint8+2))
+        TestErrPrintf("Error! rval=%u, should be: *(wbuf+2)=%u\n",(unsigned)rval_uint8,(unsigned)*(wbuf_uint8+2));
+
+    /* Write single point to disk (with a datatype conversion) */
+    ret=H5Dwrite(dataset,H5T_NATIVE_USHORT,sid2,sid1,H5P_DEFAULT,wbuf_ushort);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read scalar element from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_USHORT,sid1,sid1,H5P_DEFAULT,&rval_ushort);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check value read back in */
+    if(rval_ushort!=*(wbuf_ushort+2))
+        TestErrPrintf("Error! rval=%u, should be: *(wbuf+2)=%u\n",(unsigned)rval_ushort,(unsigned)*(wbuf_ushort+2));
+
+    /* Select one element in memory with a hyperslab selection */
+    start[0]=4; start[1]=3;
+    count[0]=1; count[1]=1;
+    ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,NULL,count,NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Write single hyperslab element to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf_uint8);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read scalar element from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_UCHAR,sid1,sid1,H5P_DEFAULT,&rval_uint8);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check value read back in */
+    if(rval_uint8!=*(wbuf_uint8+(SPACE7_DIM2*4)+3))
+        TestErrPrintf("Error! rval=%u, should be: *(wbuf+(SPACE7_DIM2*4)+3)=%u\n",(unsigned)rval_uint8,(unsigned)*(wbuf_uint8+(SPACE7_DIM2*4)+3));
+
+    /* Write single hyperslab element to disk (with a datatype conversion) */
+    ret=H5Dwrite(dataset,H5T_NATIVE_USHORT,sid2,sid1,H5P_DEFAULT,wbuf_ushort);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read scalar element from disk */
+    ret=H5Dread(dataset,H5T_NATIVE_USHORT,sid1,sid1,H5P_DEFAULT,&rval_ushort);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check value read back in */
+    if(rval_ushort!=*(wbuf_ushort+(SPACE7_DIM2*4)+3))
+        TestErrPrintf("Error! rval=%u, should be: *(wbuf+(SPACE7_DIM2*4)+3)=%u\n",(unsigned)rval_ushort,(unsigned)*(wbuf_ushort+(SPACE7_DIM2*4)+3));
+
+    /* Select no elements in memory & file with "none" selections */
+    ret = H5Sselect_none(sid1);
+    CHECK(ret, FAIL, "H5Sselect_none");
+
+    ret = H5Sselect_none(sid2);
+    CHECK(ret, FAIL, "H5Sselect_none");
+
+    /* Write no data to disk */
+    ret=H5Dwrite(dataset,H5T_NATIVE_UCHAR,sid2,sid1,H5P_DEFAULT,wbuf_uint8);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Write no data to disk (with a datatype conversion) */
+    ret=H5Dwrite(dataset,H5T_NATIVE_USHORT,sid2,sid1,H5P_DEFAULT,wbuf_ushort);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close memory dataspace */
+    ret = H5Sclose(sid2);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free memory buffers */
+    HDfree(wbuf_uint8);
+    HDfree(wbuf_ushort);
+}   /* test_scalar_select() */
+
+/****************************************************************
+**
+**  test_scalar_select2(): Tests selections on scalar dataspace,
+**	verify H5Shyperslab and H5Sselect_elements fails for
+**	scalar dataspace.
+**
+****************************************************************/
+static void
+test_scalar_select2(void)
+{
+    hid_t	sid;		/* Dataspace ID			*/
+    hsize_t	coord1[1]; /* Coordinates for point selection */
+    hsize_t     start[1]; /* Hyperslab start */
+    hsize_t     count[1]; /* Hyperslab block count */
+    herr_t	ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(6, ("Testing Selections in Scalar Dataspaces\n"));
+
+    /* Create dataspace for dataset */
+    sid = H5Screate(H5S_SCALAR);
+    CHECK(sid, FAIL, "H5Screate_simple");
+
+    /* Select one element in memory with a point selection */
+    coord1[0]=0;
+    H5E_BEGIN_TRY {
+    	ret = H5Sselect_elements(sid,H5S_SELECT_SET,1,(const hsize_t **)&coord1);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Sselect_elements");
+
+    /* Select one element in memory with a hyperslab selection */
+    start[0]=0;
+    count[0]=0;
+    H5E_BEGIN_TRY {
+    	ret = H5Sselect_hyperslab(sid,H5S_SELECT_SET,start,NULL,count,NULL);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Select no elements in memory & file with "none" selection */
+    ret = H5Sselect_none(sid);
+    CHECK(ret, FAIL, "H5Sselect_none");
+
+    /* Select all elements in memory & file with "all" selection */
+    ret = H5Sselect_all(sid);
+    CHECK(ret, FAIL, "H5Sselect_none");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid);
+    CHECK(ret, FAIL, "H5Sclose");
+}   /* test_scalar_select2() */
+
+/****************************************************************
+**
+**  test_shape_same(): Tests selections on dataspace, verify that
+**	"shape same" routine is working correctly.
+**
+****************************************************************/
+static void
+test_shape_same(void)
+{
+    hid_t	all_sid;	/* Dataspace ID	with "all" selection */
+    hid_t	none_sid;	/* Dataspace ID	with "none" selection */
+    hid_t	single_pt_sid;	/* Dataspace ID	with single point selection */
+    hid_t	mult_pt_sid;	/* Dataspace ID	with multiple point selection */
+    hid_t	single_hyper_sid;	/* Dataspace ID	with single block hyperslab selection */
+    hid_t	single_hyper_all_sid;	/* Dataspace ID	with single block hyperslab
+                                         * selection that is the entire dataspace
+                                         */
+    hid_t	single_hyper_pt_sid;	/* Dataspace ID	with single block hyperslab
+                                         * selection that is the same as the single
+                                         * point selection
+                                         */
+    hid_t	regular_hyper_sid;	/* Dataspace ID	with regular hyperslab selection */
+    hid_t	irreg_hyper_sid;	/* Dataspace ID	with irregular hyperslab selection */
+    hid_t	none_hyper_sid;	/* Dataspace ID	with "no hyperslabs" selection */
+    hid_t	tmp_sid;	/* Temporary dataspace ID */
+    hsize_t	dims[] = {SPACE9_DIM1, SPACE9_DIM2};
+    hsize_t	coord1[1][SPACE2_RANK]; /* Coordinates for single point selection */
+    hsize_t	coord2[SPACE9_DIM2][SPACE9_RANK]; /* Coordinates for multiple point selection */
+    hsize_t     start[SPACE9_RANK]; /* Hyperslab start */
+    hsize_t     stride[SPACE9_RANK]; /* Hyperslab stride */
+    hsize_t     count[SPACE9_RANK]; /* Hyperslab block count */
+    hsize_t     block[SPACE9_RANK]; /* Hyperslab block size */
+    unsigned    u,v;            /* Local index variables */
+    htri_t	check;		/* Shape comparison return value */
+    herr_t	ret;		/* Generic return value	*/
+
+    /* Output message about test being performed */
+    MESSAGE(6, ("Testing Same Shape Comparisons\n"));
+    assert(SPACE9_DIM2>=POINT1_NPOINTS);
+
+    /* Create dataspace for "all" selection */
+    all_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+    CHECK(all_sid, FAIL, "H5Screate_simple");
+
+    /* Select entire extent for dataspace */
+    ret = H5Sselect_all(all_sid);
+    CHECK(ret, FAIL, "H5Sselect_all");
+
+    /* Create dataspace for "none" selection */
+    none_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+    CHECK(none_sid, FAIL, "H5Screate_simple");
+
+    /* Un-Select entire extent for dataspace */
+    ret = H5Sselect_none(none_sid);
+    CHECK(ret, FAIL, "H5Sselect_none");
+
+    /* Create dataspace for single point selection */
+    single_pt_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+    CHECK(single_pt_sid, FAIL, "H5Screate_simple");
+
+    /* Select sequence of ten points for multiple point selection */
+    coord1[0][0]=2; coord1[0][1]=2;
+    ret = H5Sselect_elements(single_pt_sid,H5S_SELECT_SET,1,(const hsize_t **)coord1);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Create dataspace for multiple point selection */
+    mult_pt_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+    CHECK(mult_pt_sid, FAIL, "H5Screate_simple");
+
+    /* Select sequence of ten points for multiple point selection */
+    coord2[0][0]=2; coord2[0][1]=2;
+    coord2[1][0]=7; coord2[1][1]=2;
+    coord2[2][0]=1; coord2[2][1]=4;
+    coord2[3][0]=2; coord2[3][1]=6;
+    coord2[4][0]=0; coord2[4][1]=8;
+    coord2[5][0]=3; coord2[5][1]=2;
+    coord2[6][0]=4; coord2[6][1]=4;
+    coord2[7][0]=1; coord2[7][1]=0;
+    coord2[8][0]=5; coord2[8][1]=1;
+    coord2[9][0]=9; coord2[9][1]=3;
+    ret = H5Sselect_elements(mult_pt_sid,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord2);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Create dataspace for single hyperslab selection */
+    single_hyper_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+    CHECK(single_hyper_sid, FAIL, "H5Screate_simple");
+
+    /* Select 10x10 hyperslab for single hyperslab selection  */
+    start[0]=1; start[1]=1;
+    stride[0]=1; stride[1]=1;
+    count[0]=1; count[1]=1;
+    block[0]=(SPACE9_DIM1-2); block[1]=(SPACE9_DIM2-2);
+    ret = H5Sselect_hyperslab(single_hyper_sid,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create dataspace for single hyperslab selection with entire extent selected */
+    single_hyper_all_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+    CHECK(single_hyper_all_sid, FAIL, "H5Screate_simple");
+
+    /* Select entire extent for hyperslab selection */
+    start[0]=0; start[1]=0;
+    stride[0]=1; stride[1]=1;
+    count[0]=1; count[1]=1;
+    block[0]=SPACE9_DIM1; block[1]=SPACE9_DIM2;
+    ret = H5Sselect_hyperslab(single_hyper_all_sid,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create dataspace for single hyperslab selection with single point selected */
+    single_hyper_pt_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+    CHECK(single_hyper_pt_sid, FAIL, "H5Screate_simple");
+
+    /* Select entire extent for hyperslab selection */
+    start[0]=2; start[1]=2;
+    stride[0]=1; stride[1]=1;
+    count[0]=1; count[1]=1;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(single_hyper_pt_sid,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create dataspace for regular hyperslab selection */
+    regular_hyper_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+    CHECK(regular_hyper_sid, FAIL, "H5Screate_simple");
+
+    /* Select regular, strided hyperslab selection */
+    start[0]=2; start[1]=2;
+    stride[0]=2; stride[1]=2;
+    count[0]=5; count[1]=2;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(regular_hyper_sid,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create dataspace for irregular hyperslab selection */
+    irreg_hyper_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+    CHECK(irreg_hyper_sid, FAIL, "H5Screate_simple");
+
+    /* Create irregular hyperslab selection by OR'ing two blocks together */
+    start[0]=2; start[1]=2;
+    stride[0]=1; stride[1]=1;
+    count[0]=1; count[1]=1;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(irreg_hyper_sid,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    start[0]=4; start[1]=4;
+    stride[0]=1; stride[1]=1;
+    count[0]=1; count[1]=1;
+    block[0]=3; block[1]=3;
+    ret = H5Sselect_hyperslab(irreg_hyper_sid,H5S_SELECT_OR,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create dataspace for "no" hyperslab selection */
+    none_hyper_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+    CHECK(none_hyper_sid, FAIL, "H5Screate_simple");
+
+    /* Create "no" hyperslab selection by XOR'ing same blocks together */
+    start[0]=2; start[1]=2;
+    stride[0]=1; stride[1]=1;
+    count[0]=1; count[1]=1;
+    block[0]=1; block[1]=1;
+    ret = H5Sselect_hyperslab(none_hyper_sid,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    ret = H5Sselect_hyperslab(none_hyper_sid,H5S_SELECT_XOR,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Compare "all" selection to all the selections created */
+        /* Compare against itself */
+        check=H5S_select_shape_same_test(all_sid,all_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        /* Compare against copy of itself */
+        tmp_sid=H5Scopy(all_sid);
+        CHECK(tmp_sid, FAIL, "H5Scopy");
+
+        check=H5S_select_shape_same_test(all_sid,tmp_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        ret = H5Sclose(tmp_sid);
+        CHECK(ret, FAIL, "H5Sclose");
+
+        /* Compare against "none" selection */
+        check=H5S_select_shape_same_test(all_sid,none_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against single point selection */
+        check=H5S_select_shape_same_test(all_sid,single_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against multiple point selection */
+        check=H5S_select_shape_same_test(all_sid,mult_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "plain" single hyperslab selection */
+        check=H5S_select_shape_same_test(all_sid,single_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "all" single hyperslab selection */
+        check=H5S_select_shape_same_test(all_sid,single_hyper_all_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        /* Compare against "single point" single hyperslab selection */
+        check=H5S_select_shape_same_test(all_sid,single_hyper_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against regular, strided hyperslab selection */
+        check=H5S_select_shape_same_test(all_sid,regular_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against irregular hyperslab selection */
+        check=H5S_select_shape_same_test(all_sid,irreg_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "no" hyperslab selection */
+        check=H5S_select_shape_same_test(all_sid,none_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+    /* Compare "none" selection to all the selections created */
+        /* Compare against itself */
+        check=H5S_select_shape_same_test(none_sid,none_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        /* Compare against copy of itself */
+        tmp_sid=H5Scopy(none_sid);
+        CHECK(tmp_sid, FAIL, "H5Scopy");
+
+        check=H5S_select_shape_same_test(none_sid,tmp_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        ret = H5Sclose(tmp_sid);
+        CHECK(ret, FAIL, "H5Sclose");
+
+        /* Compare against "all" selection */
+        check=H5S_select_shape_same_test(none_sid,all_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against single point selection */
+        check=H5S_select_shape_same_test(none_sid,single_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against multiple point selection */
+        check=H5S_select_shape_same_test(none_sid,mult_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "plain" single hyperslab selection */
+        check=H5S_select_shape_same_test(none_sid,single_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "all" single hyperslab selection */
+        check=H5S_select_shape_same_test(none_sid,single_hyper_all_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "single point" single hyperslab selection */
+        check=H5S_select_shape_same_test(none_sid,single_hyper_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against regular, strided hyperslab selection */
+        check=H5S_select_shape_same_test(none_sid,regular_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against irregular hyperslab selection */
+        check=H5S_select_shape_same_test(none_sid,irreg_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "no" hyperslab selection */
+        check=H5S_select_shape_same_test(none_sid,none_hyper_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+    /* Compare single point selection to all the selections created */
+        /* Compare against itself */
+        check=H5S_select_shape_same_test(single_pt_sid,single_pt_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        /* Compare against copy of itself */
+        tmp_sid=H5Scopy(single_pt_sid);
+        CHECK(tmp_sid, FAIL, "H5Scopy");
+
+        check=H5S_select_shape_same_test(single_pt_sid,tmp_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        ret = H5Sclose(tmp_sid);
+        CHECK(ret, FAIL, "H5Sclose");
+
+        /* Compare against "all" selection */
+        check=H5S_select_shape_same_test(single_pt_sid,all_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "none" selection */
+        check=H5S_select_shape_same_test(single_pt_sid,none_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against multiple point selection */
+        check=H5S_select_shape_same_test(single_pt_sid,mult_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "plain" single hyperslab selection */
+        check=H5S_select_shape_same_test(single_pt_sid,single_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "all" single hyperslab selection */
+        check=H5S_select_shape_same_test(single_pt_sid,single_hyper_all_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "single point" single hyperslab selection */
+        check=H5S_select_shape_same_test(single_pt_sid,single_hyper_pt_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        /* Compare against regular, strided hyperslab selection */
+        check=H5S_select_shape_same_test(single_pt_sid,regular_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against irregular hyperslab selection */
+        check=H5S_select_shape_same_test(single_pt_sid,irreg_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "no" hyperslab selection */
+        check=H5S_select_shape_same_test(single_pt_sid,none_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+    /* Compare multiple point selection to all the selections created */
+        /* Compare against itself */
+        check=H5S_select_shape_same_test(mult_pt_sid,mult_pt_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        /* Compare against copy of itself */
+        tmp_sid=H5Scopy(mult_pt_sid);
+        CHECK(tmp_sid, FAIL, "H5Scopy");
+
+        check=H5S_select_shape_same_test(mult_pt_sid,tmp_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        ret = H5Sclose(tmp_sid);
+        CHECK(ret, FAIL, "H5Sclose");
+
+        /* Compare against "all" selection */
+        check=H5S_select_shape_same_test(mult_pt_sid,all_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "none" selection */
+        check=H5S_select_shape_same_test(mult_pt_sid,none_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against single point selection */
+        check=H5S_select_shape_same_test(mult_pt_sid,single_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "plain" single hyperslab selection */
+        check=H5S_select_shape_same_test(mult_pt_sid,single_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "all" single hyperslab selection */
+        check=H5S_select_shape_same_test(mult_pt_sid,single_hyper_all_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "single point" single hyperslab selection */
+        check=H5S_select_shape_same_test(mult_pt_sid,single_hyper_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against regular, strided hyperslab selection */
+        check=H5S_select_shape_same_test(mult_pt_sid,regular_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against irregular hyperslab selection */
+        check=H5S_select_shape_same_test(mult_pt_sid,irreg_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "no" hyperslab selection */
+        check=H5S_select_shape_same_test(mult_pt_sid,none_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+    /* Compare single "normal" hyperslab selection to all the selections created */
+        /* Compare against itself */
+        check=H5S_select_shape_same_test(single_hyper_sid,single_hyper_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        /* Compare against copy of itself */
+        tmp_sid=H5Scopy(single_hyper_sid);
+        CHECK(tmp_sid, FAIL, "H5Scopy");
+
+        check=H5S_select_shape_same_test(single_hyper_sid,tmp_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        ret = H5Sclose(tmp_sid);
+        CHECK(ret, FAIL, "H5Sclose");
+
+        /* Compare against "all" selection */
+        check=H5S_select_shape_same_test(single_hyper_sid,all_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "none" selection */
+        check=H5S_select_shape_same_test(single_hyper_sid,none_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against single point selection */
+        check=H5S_select_shape_same_test(single_hyper_sid,single_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against multiple point selection */
+        check=H5S_select_shape_same_test(single_hyper_sid,mult_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "all" single hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_sid,single_hyper_all_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "single point" single hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_sid,single_hyper_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against regular, strided hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_sid,regular_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against irregular hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_sid,irreg_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "no" hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_sid,none_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+#ifdef NOT_YET
+/* In theory, these two selections are the same shape, but the
+ * H5S_select_shape_same() routine is just not this sophisticated yet and it
+ * would take too much effort to make this work.  The worst case is that the
+ * non-optimized chunk mapping routines will be invoked instead of the more
+ * optimized routines, so this only hurts performance, not correctness
+ */
+        /* Construct point selection which matches "plain" hyperslab selection */
+            /* Create dataspace for point selection */
+            tmp_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+            CHECK(tmp_sid, FAIL, "H5Screate_simple");
+
+            /* Select sequence of points for point selection */
+            for(u=1; u<(SPACE9_DIM1-1); u++) {
+                for(v=1; v<(SPACE9_DIM2-1); v++) {
+                    coord2[v-1][0]=u; coord2[v-1][1]=v;
+                } /* end for */
+                ret = H5Sselect_elements(tmp_sid,H5S_SELECT_APPEND,(SPACE9_DIM2-2),(const hsize_t **)coord2);
+                CHECK(ret, FAIL, "H5Sselect_elements");
+            } /* end for */
+
+            /* Compare against hyperslab selection */
+            check=H5S_select_shape_same_test(single_hyper_sid,tmp_sid);
+            VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+            ret = H5Sclose(tmp_sid);
+            CHECK(ret, FAIL, "H5Sclose");
+#endif /* NOT_YET */
+
+        /* Construct hyperslab selection which matches "plain" hyperslab selection */
+            /* Create dataspace for hyperslab selection */
+            tmp_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+            CHECK(tmp_sid, FAIL, "H5Screate_simple");
+
+            /* Un-select entire extent */
+            ret = H5Sselect_none(tmp_sid);
+            CHECK(ret, FAIL, "H5Sselect_none");
+
+            /* Select sequence of rows for hyperslab selection */
+            for(u=1; u<(SPACE9_DIM1-1); u++) {
+                start[0]=u; start[1]=1;
+                stride[0]=1; stride[1]=1;
+                count[0]=1; count[1]=1;
+                block[0]=1; block[1]=(SPACE9_DIM2-2);
+                ret = H5Sselect_hyperslab(tmp_sid,H5S_SELECT_OR,start,stride,count,block);
+                CHECK(ret, FAIL, "H5Sselect_hyperslab");
+            } /* end for */
+
+            /* Compare against hyperslab selection */
+            check=H5S_select_shape_same_test(single_hyper_sid,tmp_sid);
+            VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+            ret = H5Sclose(tmp_sid);
+            CHECK(ret, FAIL, "H5Sclose");
+
+    /* Compare single "all" hyperslab selection to all the selections created */
+        /* Compare against itself */
+        check=H5S_select_shape_same_test(single_hyper_all_sid,single_hyper_all_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        /* Compare against copy of itself */
+        tmp_sid=H5Scopy(single_hyper_all_sid);
+        CHECK(tmp_sid, FAIL, "H5Scopy");
+
+        check=H5S_select_shape_same_test(single_hyper_all_sid,tmp_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        ret = H5Sclose(tmp_sid);
+        CHECK(ret, FAIL, "H5Sclose");
+
+        /* Compare against "all" selection */
+        check=H5S_select_shape_same_test(single_hyper_all_sid,all_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        /* Compare against "none" selection */
+        check=H5S_select_shape_same_test(single_hyper_all_sid,none_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against single point selection */
+        check=H5S_select_shape_same_test(single_hyper_all_sid,single_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against multiple point selection */
+        check=H5S_select_shape_same_test(single_hyper_all_sid,mult_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "plain" single hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_all_sid,single_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "single point" single hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_all_sid,single_hyper_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against regular, strided hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_all_sid,regular_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against irregular hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_all_sid,irreg_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "no" hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_all_sid,none_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+#ifdef NOT_YET
+/* In theory, these two selections are the same shape, but the
+ * H5S_select_shape_same() routine is just not this sophisticated yet and it
+ * would take too much effort to make this work.  The worst case is that the
+ * non-optimized chunk mapping routines will be invoked instead of the more
+ * optimized routines, so this only hurts performance, not correctness
+ */
+        /* Construct point selection which matches "all" hyperslab selection */
+            /* Create dataspace for point selection */
+            tmp_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+            CHECK(tmp_sid, FAIL, "H5Screate_simple");
+
+            /* Select sequence of points for point selection */
+            for(u=0; u<SPACE9_DIM1; u++) {
+                for(v=0; v<SPACE9_DIM2; v++) {
+                    coord2[v][0]=u; coord2[v][1]=v;
+                } /* end for */
+                ret = H5Sselect_elements(tmp_sid,H5S_SELECT_APPEND,SPACE9_DIM2,(const hsize_t **)coord2);
+                CHECK(ret, FAIL, "H5Sselect_elements");
+            } /* end for */
+
+            /* Compare against hyperslab selection */
+            check=H5S_select_shape_same_test(single_hyper_all_sid,tmp_sid);
+            VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+            ret = H5Sclose(tmp_sid);
+            CHECK(ret, FAIL, "H5Sclose");
+#endif /* NOT_YET */
+
+        /* Construct hyperslab selection which matches "all" hyperslab selection */
+            /* Create dataspace for hyperslab selection */
+            tmp_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+            CHECK(tmp_sid, FAIL, "H5Screate_simple");
+
+            /* Un-select entire extent */
+            ret = H5Sselect_none(tmp_sid);
+            CHECK(ret, FAIL, "H5Sselect_none");
+
+            /* Select sequence of rows for hyperslab selection */
+            for(u=0; u<SPACE9_DIM2; u++) {
+                start[0]=u; start[1]=0;
+                stride[0]=1; stride[1]=1;
+                count[0]=1; count[1]=1;
+                block[0]=1; block[1]=SPACE9_DIM2;
+                ret = H5Sselect_hyperslab(tmp_sid,H5S_SELECT_OR,start,stride,count,block);
+                CHECK(ret, FAIL, "H5Sselect_hyperslab");
+            } /* end for */
+
+            /* Compare against hyperslab selection */
+            check=H5S_select_shape_same_test(single_hyper_all_sid,tmp_sid);
+            VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+            ret = H5Sclose(tmp_sid);
+            CHECK(ret, FAIL, "H5Sclose");
+
+    /* Compare single "point" hyperslab selection to all the selections created */
+        /* Compare against itself */
+        check=H5S_select_shape_same_test(single_hyper_pt_sid,single_hyper_pt_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        /* Compare against copy of itself */
+        tmp_sid=H5Scopy(single_hyper_pt_sid);
+        CHECK(tmp_sid, FAIL, "H5Scopy");
+
+        check=H5S_select_shape_same_test(single_hyper_pt_sid,tmp_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        ret = H5Sclose(tmp_sid);
+        CHECK(ret, FAIL, "H5Sclose");
+
+        /* Compare against "all" selection */
+        check=H5S_select_shape_same_test(single_hyper_pt_sid,all_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "none" selection */
+        check=H5S_select_shape_same_test(single_hyper_pt_sid,none_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against single point selection */
+        check=H5S_select_shape_same_test(single_hyper_pt_sid,single_pt_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        /* Compare against multiple point selection */
+        check=H5S_select_shape_same_test(single_hyper_pt_sid,mult_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "plain" single hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_pt_sid,single_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "all" single hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_pt_sid,single_hyper_all_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against regular, strided hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_pt_sid,regular_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against irregular hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_pt_sid,irreg_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "no" hyperslab selection */
+        check=H5S_select_shape_same_test(single_hyper_pt_sid,none_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+    /* Compare regular, strided hyperslab selection to all the selections created */
+        /* Compare against itself */
+        check=H5S_select_shape_same_test(regular_hyper_sid,regular_hyper_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        /* Compare against copy of itself */
+        tmp_sid=H5Scopy(regular_hyper_sid);
+        CHECK(tmp_sid, FAIL, "H5Scopy");
+
+        check=H5S_select_shape_same_test(regular_hyper_sid,tmp_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        ret = H5Sclose(tmp_sid);
+        CHECK(ret, FAIL, "H5Sclose");
+
+        /* Compare against "all" selection */
+        check=H5S_select_shape_same_test(regular_hyper_sid,all_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "none" selection */
+        check=H5S_select_shape_same_test(regular_hyper_sid,none_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against single point selection */
+        check=H5S_select_shape_same_test(regular_hyper_sid,single_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against multiple point selection */
+        check=H5S_select_shape_same_test(regular_hyper_sid,mult_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "plain" single hyperslab selection */
+        check=H5S_select_shape_same_test(regular_hyper_sid,single_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "all" single hyperslab selection */
+        check=H5S_select_shape_same_test(regular_hyper_sid,single_hyper_all_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "single point" single hyperslab selection */
+        check=H5S_select_shape_same_test(regular_hyper_sid,single_hyper_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against irregular hyperslab selection */
+        check=H5S_select_shape_same_test(regular_hyper_sid,irreg_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "no" hyperslab selection */
+        check=H5S_select_shape_same_test(regular_hyper_sid,none_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Construct point selection which matches regular, strided hyperslab selection */
+            /* Create dataspace for point selection */
+            tmp_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+            CHECK(tmp_sid, FAIL, "H5Screate_simple");
+
+            /* Select sequence of points for point selection */
+            for(u=2; u<11; u+=2) {
+                for(v=0; v<2; v++) {
+                    coord2[v][0]=u; coord2[v][1]=(v*2)+2;
+                } /* end for */
+                ret = H5Sselect_elements(tmp_sid,H5S_SELECT_APPEND,2,(const hsize_t **)coord2);
+                CHECK(ret, FAIL, "H5Sselect_elements");
+            } /* end for */
+
+            /* Compare against hyperslab selection */
+            check=H5S_select_shape_same_test(regular_hyper_sid,tmp_sid);
+            VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+            ret = H5Sclose(tmp_sid);
+            CHECK(ret, FAIL, "H5Sclose");
+
+        /* Construct hyperslab selection which matches regular, strided hyperslab selection */
+            /* Create dataspace for hyperslab selection */
+            tmp_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+            CHECK(tmp_sid, FAIL, "H5Screate_simple");
+
+            /* Un-select entire extent */
+            ret = H5Sselect_none(tmp_sid);
+            CHECK(ret, FAIL, "H5Sselect_none");
+
+            /* Select sequence of rows for hyperslab selection */
+            for(u=2; u<11; u+=2) {
+                start[0]=u; start[1]=3;
+                stride[0]=1; stride[1]=2;
+                count[0]=1; count[1]=2;
+                block[0]=1; block[1]=1;
+                ret = H5Sselect_hyperslab(tmp_sid,H5S_SELECT_OR,start,stride,count,block);
+                CHECK(ret, FAIL, "H5Sselect_hyperslab");
+            } /* end for */
+
+            /* Compare against hyperslab selection */
+            check=H5S_select_shape_same_test(regular_hyper_sid,tmp_sid);
+            VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+            ret = H5Sclose(tmp_sid);
+            CHECK(ret, FAIL, "H5Sclose");
+
+        /* Construct regular hyperslab selection with an offset which matches regular, strided hyperslab selection */
+            /* Create dataspace for hyperslab selection */
+            tmp_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+            CHECK(tmp_sid, FAIL, "H5Screate_simple");
+
+            /* Select regular, strided hyperslab selection at an offset */
+            start[0]=1; start[1]=1;
+            stride[0]=2; stride[1]=2;
+            count[0]=5; count[1]=2;
+            block[0]=1; block[1]=1;
+            ret = H5Sselect_hyperslab(tmp_sid,H5S_SELECT_SET,start,stride,count,block);
+            CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+            /* Compare against hyperslab selection */
+            check=H5S_select_shape_same_test(regular_hyper_sid,tmp_sid);
+            VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+            ret = H5Sclose(tmp_sid);
+            CHECK(ret, FAIL, "H5Sclose");
+
+    /* Compare irregular hyperslab selection to all the selections created */
+        /* Compare against itself */
+        check=H5S_select_shape_same_test(irreg_hyper_sid,irreg_hyper_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        /* Compare against copy of itself */
+        tmp_sid=H5Scopy(irreg_hyper_sid);
+        CHECK(tmp_sid, FAIL, "H5Scopy");
+
+        check=H5S_select_shape_same_test(irreg_hyper_sid,tmp_sid);
+        VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+        ret = H5Sclose(tmp_sid);
+        CHECK(ret, FAIL, "H5Sclose");
+
+        /* Compare against "all" selection */
+        check=H5S_select_shape_same_test(irreg_hyper_sid,all_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "none" selection */
+        check=H5S_select_shape_same_test(irreg_hyper_sid,none_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against single point selection */
+        check=H5S_select_shape_same_test(irreg_hyper_sid,single_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against multiple point selection */
+        check=H5S_select_shape_same_test(irreg_hyper_sid,mult_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "plain" single hyperslab selection */
+        check=H5S_select_shape_same_test(irreg_hyper_sid,single_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "all" single hyperslab selection */
+        check=H5S_select_shape_same_test(irreg_hyper_sid,single_hyper_all_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "single point" single hyperslab selection */
+        check=H5S_select_shape_same_test(irreg_hyper_sid,single_hyper_pt_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against regular, strided hyperslab selection */
+        check=H5S_select_shape_same_test(irreg_hyper_sid,regular_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Compare against "no" hyperslab selection */
+        check=H5S_select_shape_same_test(irreg_hyper_sid,none_hyper_sid);
+        VERIFY(check, FALSE, "H5S_select_shape_same_test");
+
+        /* Construct hyperslab selection which matches irregular hyperslab selection */
+            /* Create dataspace for hyperslab selection */
+            tmp_sid = H5Screate_simple(SPACE9_RANK, dims, NULL);
+            CHECK(tmp_sid, FAIL, "H5Screate_simple");
+
+            start[0]=2; start[1]=2;
+            stride[0]=1; stride[1]=1;
+            count[0]=1; count[1]=1;
+            block[0]=1; block[1]=1;
+            ret = H5Sselect_hyperslab(tmp_sid,H5S_SELECT_SET,start,stride,count,block);
+            CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+            /* Select sequence of columns for hyperslab selection */
+            for(u=0; u<3; u++) {
+                start[0]=4; start[1]=u+4;
+                stride[0]=1; stride[1]=1;
+                count[0]=1; count[1]=1;
+                block[0]=3; block[1]=1;
+                ret = H5Sselect_hyperslab(tmp_sid,H5S_SELECT_OR,start,stride,count,block);
+                CHECK(ret, FAIL, "H5Sselect_hyperslab");
+            } /* end for */
+
+            /* Compare against hyperslab selection */
+            check=H5S_select_shape_same_test(irreg_hyper_sid,tmp_sid);
+            VERIFY(check, TRUE, "H5S_select_shape_same_test");
+
+            ret = H5Sclose(tmp_sid);
+            CHECK(ret, FAIL, "H5Sclose");
+
+
+    /* Close dataspaces */
+    ret = H5Sclose(all_sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose(none_sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose(single_pt_sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose(mult_pt_sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose(single_hyper_sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose(single_hyper_all_sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose(single_hyper_pt_sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose(regular_hyper_sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose(irreg_hyper_sid);
+    CHECK(ret, FAIL, "H5Sclose");
+    ret = H5Sclose(none_hyper_sid);
+    CHECK(ret, FAIL, "H5Sclose");
+}   /* test_shape_same() */
+
+/****************************************************************
+**
+**  test_select_hyper_chunk_offset(): Tests selections on dataspace,
+**      verify that offsets for hyperslab selections are working in
+**      chunked datasets.
+**
+****************************************************************/
+static void
+test_select_hyper_chunk_offset(void)
+{
+    hid_t fid;          /* File ID  */
+    hid_t sid;          /* Dataspace ID */
+    hid_t msid;         /* Memory dataspace ID */
+    hid_t did;          /* Dataset ID */
+    const hsize_t mem_dims[1] = { SPACE10_DIM1 };      /* Dataspace dimensions for memory */
+    const hsize_t dims[1] = { 0 };      /* Dataspace initial dimensions */
+    const hsize_t maxdims[1] = { H5S_UNLIMITED };       /* Dataspace mam dims */
+    int *wbuf;                          /* Buffer for writing data */
+    int *rbuf;                          /* Buffer for reading data */
+    hid_t dcpl;                         /* Dataset creation property list ID */
+    hsize_t chunks[1]={SPACE10_CHUNK_SIZE };    /* Chunk size */
+    hsize_t start[1] = { 0 };           /* The start of the hyperslab */
+    hsize_t count[1] = { SPACE10_CHUNK_SIZE };  /* The size of the hyperslab */
+    int i,j;                            /* Local index */
+    herr_t ret;                         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(6, ("Testing hyperslab selections using offsets in chunked datasets\n"));
+
+    /* Allocate buffers */
+    wbuf= HDmalloc(sizeof(int)*SPACE10_DIM1);
+    CHECK(wbuf, NULL, "HDmalloc");
+    rbuf= HDmalloc(sizeof(int)*SPACE10_DIM1);
+    CHECK(rbuf, NULL, "HDmalloc");
+
+    /* Initialize the write buffer */
+    for(i=0; i<SPACE10_DIM1; i++)
+        wbuf[i]=i;
+
+    /* Create file */
+    fid = H5Fcreate (FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create a dataset creation property list */
+    dcpl = H5Pcreate (H5P_DATASET_CREATE);
+    CHECK(dcpl, FAIL, "H5Pcreate");
+
+    /* Set to chunked storage layout */
+    ret=H5Pset_layout (dcpl, H5D_CHUNKED);
+    CHECK(ret, FAIL, "H5Pset_layout");
+
+    /* Set the chunk size */
+    ret=H5Pset_chunk (dcpl, 1, chunks);
+    CHECK(ret, FAIL, "H5Pset_chunk");
+
+    /* Create dataspace for memory */
+    msid = H5Screate_simple (1, mem_dims, NULL);
+    CHECK(msid, FAIL, "H5Screate_simple");
+
+    /* Select the correct chunk in the memory dataspace */
+    ret=H5Sselect_hyperslab (msid, H5S_SELECT_SET, start, NULL, count, NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Create dataspace for dataset */
+    sid = H5Screate_simple (1, dims, maxdims);
+    CHECK(sid, FAIL, "H5Screate_simple");
+
+    /* Create the dataset */
+    did = H5Dcreate (fid, "fooData", H5T_NATIVE_INT, sid, dcpl);
+    CHECK(did, FAIL, "H5Dcreate");
+
+    /* Close the dataspace */
+    ret=H5Sclose (sid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close the dataset creation property list */
+    ret=H5Pclose (dcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Loop over writing out each chunk */
+    for(i=SPACE10_CHUNK_SIZE; i<=SPACE10_DIM1; i+=SPACE10_CHUNK_SIZE) {
+        hssize_t offset[1];                 /* Offset of selection */
+        hid_t fsid;                         /* File dataspace ID */
+        hsize_t size[1];                    /* The size to extend the dataset to */
+
+        /* Extend the dataset */
+        size[0] = i;                 /* The size to extend the dataset to */
+        ret=H5Dextend (did, size);
+        CHECK(ret, FAIL, "H5Dextend");
+
+        /* Get the (extended) dataspace from the dataset */
+        fsid = H5Dget_space (did);
+        CHECK(fsid, FAIL, "H5Dget_space");
+
+        /* Select the correct chunk in the dataset */
+        ret=H5Sselect_hyperslab (fsid, H5S_SELECT_SET, start, NULL, count, NULL);
+        CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+        /* Set the selection offset for the file dataspace */
+        offset[0] = i - SPACE10_CHUNK_SIZE;
+        ret=H5Soffset_simple (fsid, offset);
+        CHECK(ret, FAIL, "H5Soffset_simple");
+
+        /* Set the selection offset for the memory dataspace */
+        offset[0] = SPACE10_DIM1-i;
+        ret=H5Soffset_simple (msid, offset);
+        CHECK(ret, FAIL, "H5Soffset_simple");
+
+        /* Write the data to the chunk */
+        ret=H5Dwrite (did, H5T_NATIVE_INT, msid, fsid, H5P_DEFAULT, wbuf);
+        CHECK(ret, FAIL, "H5Soffset_simple");
+
+        /* Close the file dataspace copy */
+        ret=H5Sclose (fsid);
+        CHECK(ret, FAIL, "H5Sclose");
+    }
+
+    /* Read the data back in */
+    ret=H5Dread (did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rbuf);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+
+    /* Verify the information read in */
+    for(i=0; i<SPACE10_DIM1; i+=SPACE10_CHUNK_SIZE)
+        for(j=0; j<SPACE10_CHUNK_SIZE; j++)
+            if(wbuf[i+j]!=rbuf[((SPACE10_DIM1-i)-SPACE10_CHUNK_SIZE)+j])
+                TestErrPrintf("Line: %d - Error! i=%d, j=%d, rbuf=%d, wbuf=%d\n",__LINE__,i,j,rbuf[((SPACE10_DIM1-i)-SPACE10_CHUNK_SIZE)+j],wbuf[i+j]);
+
+/* Check with 'OR'ed set of hyperslab selections, which makes certain the
+ * hyperslab spanlist code gets tested. -QAK
+ */
+
+    /* Re-initialize the write buffer */
+    for(i=0; i<SPACE10_DIM1; i++)
+        wbuf[i]=i*2;
+
+    /* Change the selected the region in the memory dataspace */
+    start[0] = 0;
+    count[0] = SPACE10_CHUNK_SIZE/3;
+    ret=H5Sselect_hyperslab (msid, H5S_SELECT_SET, start, NULL, count, NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+    start[0] = (2*SPACE10_CHUNK_SIZE)/3;
+    ret=H5Sselect_hyperslab (msid, H5S_SELECT_OR, start, NULL, count, NULL);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Loop over writing out each chunk */
+    for(i=SPACE10_CHUNK_SIZE; i<=SPACE10_DIM1; i+=SPACE10_CHUNK_SIZE) {
+        hssize_t offset[1];                 /* Offset of selection */
+        hid_t fsid;                         /* File dataspace ID */
+        hsize_t size[1];                    /* The size to extend the dataset to */
+
+        /* Extend the dataset */
+        size[0] = i;                 /* The size to extend the dataset to */
+        ret=H5Dextend (did, size);
+        CHECK(ret, FAIL, "H5Dextend");
+
+        /* Get the (extended) dataspace from the dataset */
+        fsid = H5Dget_space (did);
+        CHECK(fsid, FAIL, "H5Dget_space");
+
+        /* Select the correct region in the dataset */
+        start[0] = 0;
+        ret=H5Sselect_hyperslab (fsid, H5S_SELECT_SET, start, NULL, count, NULL);
+        CHECK(ret, FAIL, "H5Sselect_hyperslab");
+        start[0] = (2*SPACE10_CHUNK_SIZE)/3;
+        ret=H5Sselect_hyperslab (fsid, H5S_SELECT_OR, start, NULL, count, NULL);
+        CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+        /* Set the selection offset for the file dataspace */
+        offset[0] = i - SPACE10_CHUNK_SIZE;
+        ret=H5Soffset_simple (fsid, offset);
+        CHECK(ret, FAIL, "H5Soffset_simple");
+
+        /* Set the selection offset for the memory dataspace */
+        offset[0] = SPACE10_DIM1-i;
+        ret=H5Soffset_simple (msid, offset);
+        CHECK(ret, FAIL, "H5Soffset_simple");
+
+        /* Write the data to the chunk */
+        ret=H5Dwrite (did, H5T_NATIVE_INT, msid, fsid, H5P_DEFAULT, wbuf);
+        CHECK(ret, FAIL, "H5Soffset_simple");
+
+        /* Close the file dataspace copy */
+        ret=H5Sclose (fsid);
+        CHECK(ret, FAIL, "H5Sclose");
+    }
+
+    /* Read the data back in */
+    ret=H5Dread (did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rbuf);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+
+    /* Verify the information read in */
+    for(i=0; i<SPACE10_DIM1; i+=SPACE10_CHUNK_SIZE)
+        for(j=0; j<SPACE10_CHUNK_SIZE; j++)
+            /* We're not writing out the "middle" of each chunk, so don't check that */
+            if(j<(SPACE10_CHUNK_SIZE/3) || j>=((2*SPACE10_CHUNK_SIZE)/3))
+                if(wbuf[i+j]!=rbuf[((SPACE10_DIM1-i)-SPACE10_CHUNK_SIZE)+j])
+                    TestErrPrintf("Line: %d - Error! i=%d, j=%d, rbuf=%d, wbuf=%d\n",__LINE__,i,j,rbuf[((SPACE10_DIM1-i)-SPACE10_CHUNK_SIZE)+j],wbuf[i+j]);
+
+    /* Close the memory dataspace */
+    ret=H5Sclose (msid);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close the dataset */
+    ret=H5Dclose (did);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close the file */
+    ret=H5Fclose (fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Free the buffers */
+    HDfree(wbuf);
+    HDfree(rbuf);
+}   /* test_select_hyper_chunk_offset() */
+
+/****************************************************************
+**
+**  test_select_hyper_chunk_offset2(): Tests selections on dataspace,
+**      another test to verify that offsets for hyperslab selections are
+**      working in chunked datasets.
+**
+****************************************************************/
+static void
+test_select_hyper_chunk_offset2(void)
+{
+    hid_t       file, dataset;  /* handles */
+    hid_t       dataspace;
+    hid_t       memspace;
+    hid_t       dcpl;           /* Dataset creation property list */
+    herr_t      status;
+    unsigned    data_out[SPACE12_DIM0]; /* output buffer */
+    unsigned    data_in[SPACE12_CHUNK_DIM0]; /* input buffer */
+    hsize_t     dims[SPACE12_RANK]={SPACE12_DIM0};              /* Dimension size */
+    hsize_t     chunk_dims[SPACE12_RANK]={SPACE12_CHUNK_DIM0};  /* Chunk size */
+    hsize_t     start[SPACE12_RANK];    /* Start of hyperslab */
+    hsize_t     count[SPACE12_RANK];    /* Size of hyperslab */
+    hssize_t    offset[SPACE12_RANK];   /* hyperslab offset in the file */
+    unsigned    u, v;           /* Local index variables */
+
+    /* Output message about test being performed */
+    MESSAGE(6, ("Testing more hyperslab selections using offsets in chunked datasets\n"));
+
+    /* Initialize data to write out */
+    for (u = 0; u < SPACE12_DIM0; u++)
+        data_out[u] = u;
+
+    /* Create the file */
+    file = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fcreate");
+
+    /* Create dataspace */
+    dataspace = H5Screate_simple(SPACE12_RANK, dims, NULL);
+    CHECK(dataspace, FAIL, "H5Screate_simple");
+
+    /* Create dataset creation property list */
+    dcpl = H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(dcpl, FAIL, "H5Pcreate");
+
+    /* Set chunk sizes */
+    status = H5Pset_chunk(dcpl, SPACE12_RANK, chunk_dims);
+    CHECK(status, FAIL, "H5Pset_chunk");
+
+    /* Create dataset */
+    dataset = H5Dcreate(file, DATASETNAME, H5T_NATIVE_UINT, dataspace, dcpl);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Close DCPL */
+    status = H5Pclose(dcpl);
+    CHECK(status, FAIL, "H5Pclose");
+
+    /* Write out entire dataset */
+    status = H5Dwrite(dataset, H5T_NATIVE_UINT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data_out);
+    CHECK(status, FAIL, "H5Dclose");
+
+    /* Create memory dataspace (same size as a chunk) */
+    memspace = H5Screate_simple(SPACE12_RANK, chunk_dims, NULL);
+    CHECK(dataspace, FAIL, "H5Screate_simple");
+
+    /*
+     * Define hyperslab in the file dataspace.
+     */
+    start[0] = 0;
+    count[0] = SPACE12_CHUNK_DIM0;
+    status = H5Sselect_hyperslab(dataspace, H5S_SELECT_SET, start, NULL, count, NULL);
+    CHECK(status, FAIL, "H5Sselect_hyperslab");
+
+    /* Loop through retrieving data from file, checking it against data written */
+    for(u = 0; u < SPACE12_DIM0; u += SPACE12_CHUNK_DIM0) {
+        /* Set the offset of the file selection */
+        offset[0] = u;
+        status = H5Soffset_simple(dataspace, offset);
+        CHECK(status, FAIL, "H5Soffset_simple");
+
+        /* Read in buffer of data */
+        status = H5Dread(dataset, H5T_NATIVE_UINT, memspace, dataspace,
+                H5P_DEFAULT, data_in);
+        CHECK(status, FAIL, "H5Dread");
+
+        /* Check data read in */
+        for(v = 0; v < SPACE12_CHUNK_DIM0; v++)
+            if(data_out[u + v] != data_in[v])
+                TestErrPrintf("Error! data_out[%u]=%u, data_in[%u]=%u\n",(unsigned)(u + v), data_out[u + v], v, data_in[v]);
+    } /* end for */
+
+    status = H5Dclose(dataset);
+    CHECK(status, FAIL, "H5Dclose");
+
+    status = H5Sclose(dataspace);
+    CHECK(status, FAIL, "H5Sclose");
+
+    status = H5Sclose(memspace);
+    CHECK(status, FAIL, "H5Sclose");
+
+    status = H5Fclose(file);
+    CHECK(status, FAIL, "H5Fclose");
+}   /* test_select_hyper_chunk_offset2() */
+
+/****************************************************************
+**
+**  test_select_bounds(): Tests selection bounds on dataspaces,
+**      both with and without offsets.
+**
+****************************************************************/
+static void
+test_select_bounds(void)
+{
+    hid_t sid;          /* Dataspace ID */
+    const hsize_t dims[SPACE11_RANK] = { SPACE11_DIM1, SPACE11_DIM2 };      /* Dataspace dimensions */
+    hsize_t coord[SPACE11_NPOINTS][SPACE11_RANK]; /* Coordinates for point selection */
+    hsize_t start[SPACE11_RANK];       /* The start of the hyperslab */
+    hsize_t stride[SPACE11_RANK];       /* The stride between block starts for the hyperslab */
+    hsize_t count[SPACE11_RANK];        /* The number of blocks for the hyperslab */
+    hsize_t block[SPACE11_RANK];        /* The size of each block for the hyperslab */
+    hssize_t offset[SPACE11_RANK];      /* Offset amount for selection */
+    hsize_t low_bounds[SPACE11_RANK];  /* The low bounds for the selection */
+    hsize_t high_bounds[SPACE11_RANK]; /* The high bounds for the selection */
+    herr_t ret;                         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(6, ("Testing selection bounds\n"));
+
+    /* Create dataspace */
+    sid = H5Screate_simple (SPACE11_RANK, dims, NULL);
+    CHECK(sid, FAIL, "H5Screate_simple");
+
+    /* Get bounds for 'all' selection */
+    ret = H5Sget_select_bounds(sid,low_bounds,high_bounds);
+    CHECK(ret, FAIL, "H5Sget_select_bounds");
+    VERIFY(low_bounds[0],0,"H5Sget_select_bounds");
+    VERIFY(low_bounds[1],0,"H5Sget_select_bounds");
+    VERIFY(high_bounds[0],SPACE11_DIM1-1,"H5Sget_select_bounds");
+    VERIFY(high_bounds[1],SPACE11_DIM2-1,"H5Sget_select_bounds");
+
+    /* Set offset for selection */
+    offset[0]=1; offset[1]=1;
+    ret=H5Soffset_simple(sid, offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+
+    /* Get bounds for 'all' selection with offset (which should be ignored) */
+    ret = H5Sget_select_bounds(sid,low_bounds,high_bounds);
+    CHECK(ret, FAIL, "H5Sget_select_bounds");
+    VERIFY(low_bounds[0],0,"H5Sget_select_bounds");
+    VERIFY(low_bounds[1],0,"H5Sget_select_bounds");
+    VERIFY(high_bounds[0],SPACE11_DIM1-1,"H5Sget_select_bounds");
+    VERIFY(high_bounds[1],SPACE11_DIM2-1,"H5Sget_select_bounds");
+
+    /* Reset offset for selection */
+    offset[0]=0; offset[1]=0;
+    ret=H5Soffset_simple(sid, offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+
+    /* Set 'none' selection */
+    ret=H5Sselect_none(sid);
+    CHECK(ret, FAIL, "H5Sselect_none");
+
+    /* Get bounds for 'none' selection */
+    H5E_BEGIN_TRY {
+        ret = H5Sget_select_bounds(sid,low_bounds,high_bounds);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Sget_select_bounds");
+
+    /* Set point selection */
+    coord[0][0]=  3; coord[0][1]=  3;
+    coord[1][0]=  3; coord[1][1]= 96;
+    coord[2][0]= 96; coord[2][1]=  3;
+    coord[3][0]= 96; coord[3][1]= 96;
+    ret = H5Sselect_elements(sid,H5S_SELECT_SET,SPACE11_NPOINTS,(const hsize_t **)coord);
+    CHECK(ret, FAIL, "H5Sselect_elements");
+
+    /* Get bounds for point selection */
+    ret = H5Sget_select_bounds(sid,low_bounds,high_bounds);
+    CHECK(ret, FAIL, "H5Sget_select_bounds");
+    VERIFY(low_bounds[0],3,"H5Sget_select_bounds");
+    VERIFY(low_bounds[1],3,"H5Sget_select_bounds");
+    VERIFY(high_bounds[0],SPACE11_DIM1-4,"H5Sget_select_bounds");
+    VERIFY(high_bounds[1],SPACE11_DIM2-4,"H5Sget_select_bounds");
+
+    /* Set bad offset for selection */
+    offset[0]=5; offset[1]=-5;
+    ret=H5Soffset_simple(sid, offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+
+    /* Get bounds for hyperslab selection with negative offset */
+    H5E_BEGIN_TRY {
+        ret = H5Sget_select_bounds(sid,low_bounds,high_bounds);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Sget_select_bounds");
+
+    /* Set valid offset for selection */
+    offset[0]=2; offset[1]=-2;
+    ret=H5Soffset_simple(sid, offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+
+    /* Get bounds for point selection with offset */
+    ret = H5Sget_select_bounds(sid,low_bounds,high_bounds);
+    CHECK(ret, FAIL, "H5Sget_select_bounds");
+    VERIFY(low_bounds[0],5,"H5Sget_select_bounds");
+    VERIFY(low_bounds[1],1,"H5Sget_select_bounds");
+    VERIFY(high_bounds[0],SPACE11_DIM1-2,"H5Sget_select_bounds");
+    VERIFY(high_bounds[1],SPACE11_DIM2-6,"H5Sget_select_bounds");
+
+    /* Reset offset for selection */
+    offset[0]=0; offset[1]=0;
+    ret=H5Soffset_simple(sid, offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+
+    /* Set "regular" hyperslab selection */
+    start[0]=  2; start[1]=  2;
+    stride[0]=  10; stride[1]= 10;
+    count[0]= 4; count[1]=  4;
+    block[0]= 5; block[1]= 5;
+    ret = H5Sselect_hyperslab(sid,H5S_SELECT_SET,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Get bounds for hyperslab selection */
+    ret = H5Sget_select_bounds(sid,low_bounds,high_bounds);
+    CHECK(ret, FAIL, "H5Sget_select_bounds");
+    VERIFY(low_bounds[0],2,"H5Sget_select_bounds");
+    VERIFY(low_bounds[1],2,"H5Sget_select_bounds");
+    VERIFY(high_bounds[0],36,"H5Sget_select_bounds");
+    VERIFY(high_bounds[1],36,"H5Sget_select_bounds");
+
+    /* Set bad offset for selection */
+    offset[0]=5; offset[1]=-5;
+    ret=H5Soffset_simple(sid, offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+
+    /* Get bounds for hyperslab selection with negative offset */
+    H5E_BEGIN_TRY {
+        ret = H5Sget_select_bounds(sid,low_bounds,high_bounds);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Sget_select_bounds");
+
+    /* Set valid offset for selection */
+    offset[0]=5; offset[1]=-2;
+    ret=H5Soffset_simple(sid, offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+
+    /* Get bounds for hyperslab selection with offset */
+    ret = H5Sget_select_bounds(sid,low_bounds,high_bounds);
+    CHECK(ret, FAIL, "H5Sget_select_bounds");
+    VERIFY(low_bounds[0],7,"H5Sget_select_bounds");
+    VERIFY(low_bounds[1],0,"H5Sget_select_bounds");
+    VERIFY(high_bounds[0],41,"H5Sget_select_bounds");
+    VERIFY(high_bounds[1],34,"H5Sget_select_bounds");
+
+    /* Reset offset for selection */
+    offset[0]=0; offset[1]=0;
+    ret=H5Soffset_simple(sid, offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+
+    /* Make "irregular" hyperslab selection */
+    start[0]= 20; start[1]= 20;
+    stride[0]=  20; stride[1]= 20;
+    count[0]= 2; count[1]=  2;
+    block[0]= 10; block[1]= 10;
+    ret = H5Sselect_hyperslab(sid,H5S_SELECT_OR,start,stride,count,block);
+    CHECK(ret, FAIL, "H5Sselect_hyperslab");
+
+    /* Get bounds for hyperslab selection */
+    ret = H5Sget_select_bounds(sid,low_bounds,high_bounds);
+    CHECK(ret, FAIL, "H5Sget_select_bounds");
+    VERIFY(low_bounds[0],2,"H5Sget_select_bounds");
+    VERIFY(low_bounds[1],2,"H5Sget_select_bounds");
+    VERIFY(high_bounds[0],49,"H5Sget_select_bounds");
+    VERIFY(high_bounds[1],49,"H5Sget_select_bounds");
+
+    /* Set bad offset for selection */
+    offset[0]=5; offset[1]=-5;
+    ret=H5Soffset_simple(sid, offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+
+    /* Get bounds for hyperslab selection with negative offset */
+    H5E_BEGIN_TRY {
+        ret = H5Sget_select_bounds(sid,low_bounds,high_bounds);
+    } H5E_END_TRY;
+    VERIFY(ret, FAIL, "H5Sget_select_bounds");
+
+    /* Set valid offset for selection */
+    offset[0]=5; offset[1]=-2;
+    ret=H5Soffset_simple(sid, offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+
+    /* Get bounds for hyperslab selection with offset */
+    ret = H5Sget_select_bounds(sid,low_bounds,high_bounds);
+    CHECK(ret, FAIL, "H5Sget_select_bounds");
+    VERIFY(low_bounds[0],7,"H5Sget_select_bounds");
+    VERIFY(low_bounds[1],0,"H5Sget_select_bounds");
+    VERIFY(high_bounds[0],54,"H5Sget_select_bounds");
+    VERIFY(high_bounds[1],47,"H5Sget_select_bounds");
+
+    /* Reset offset for selection */
+    offset[0]=0; offset[1]=0;
+    ret=H5Soffset_simple(sid, offset);
+    CHECK(ret, FAIL, "H5Soffset_simple");
+
+    /* Close the dataspace */
+    ret=H5Sclose (sid);
+    CHECK(ret, FAIL, "H5Sclose");
+}   /* test_select_bounds() */
+
+/****************************************************************
+**
+**  test_select(): Main H5S selection testing routine.
+**
+****************************************************************/
+void
+test_select(void)
+{
+    hid_t plist_id;     /* Property list for reading random hyperslabs */
+    hid_t fapl;         /* Property list accessing the file */
+    int mdc_nelmts;     /* Metadata number of elements */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int rdcc_nelmts;   /* Raw data number of elements */
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    size_t rdcc_nelmts;   /* Raw data number of elements */
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    size_t rdcc_nbytes; /* Raw data number of bytes */
+    double rdcc_w0;     /* Raw data write percentage */
+    hssize_t offset[SPACE7_RANK]={1,1}; /* Offset for testing selection offsets */
+    herr_t	ret;	/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Selections\n"));
+
+    /* Create a dataset transfer property list */
+    plist_id=H5Pcreate(H5P_DATASET_XFER);
+    CHECK(plist_id, FAIL, "H5Pcreate");
+
+    /* test I/O with a very small buffer for reads */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    ret=H5Pset_buffer(plist_id,(hsize_t)59,NULL,NULL);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    ret=H5Pset_buffer(plist_id,(size_t)59,NULL,NULL);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    CHECK(ret, FAIL, "H5Pset_buffer");
+
+    /* These next tests use the same file */
+    test_select_hyper(H5P_DEFAULT);     /* Test basic H5S hyperslab selection code */
+    test_select_hyper(plist_id);        /* Test basic H5S hyperslab selection code */
+    test_select_point(H5P_DEFAULT);     /* Test basic H5S element selection code, also tests appending to existing element selections */
+    test_select_point(plist_id);        /* Test basic H5S element selection code, also tests appending to existing element selections */
+    test_select_all(H5P_DEFAULT);       /* Test basic all & none selection code */
+    test_select_all(plist_id);          /* Test basic all & none selection code */
+    test_select_all_hyper(H5P_DEFAULT);       /* Test basic all & none selection code */
+    test_select_all_hyper(plist_id);          /* Test basic all & none selection code */
+
+    /* These next tests use the same file */
+    test_select_combo();        /* Test combined hyperslab & element selection code */
+    test_select_hyper_stride(H5P_DEFAULT); /* Test strided hyperslab selection code */
+    test_select_hyper_stride(plist_id); /* Test strided hyperslab selection code */
+    test_select_hyper_contig(H5T_STD_U16LE,H5P_DEFAULT); /* Test contiguous hyperslab selection code */
+    test_select_hyper_contig(H5T_STD_U16LE,plist_id); /* Test contiguous hyperslab selection code */
+    test_select_hyper_contig(H5T_STD_U16BE,H5P_DEFAULT); /* Test contiguous hyperslab selection code */
+    test_select_hyper_contig(H5T_STD_U16BE,plist_id); /* Test contiguous hyperslab selection code */
+    test_select_hyper_contig2(H5T_STD_U16LE,H5P_DEFAULT); /* Test more contiguous hyperslab selection cases */
+    test_select_hyper_contig2(H5T_STD_U16LE,plist_id); /* Test more contiguous hyperslab selection cases */
+    test_select_hyper_contig2(H5T_STD_U16BE,H5P_DEFAULT); /* Test more contiguous hyperslab selection cases */
+    test_select_hyper_contig2(H5T_STD_U16BE,plist_id); /* Test more contiguous hyperslab selection cases */
+    test_select_hyper_contig3(H5T_STD_U16LE,H5P_DEFAULT); /* Test yet more contiguous hyperslab selection cases */
+    test_select_hyper_contig3(H5T_STD_U16LE,plist_id); /* Test yet more contiguous hyperslab selection cases */
+    test_select_hyper_contig3(H5T_STD_U16BE,H5P_DEFAULT); /* Test yet more contiguous hyperslab selection cases */
+    test_select_hyper_contig3(H5T_STD_U16BE,plist_id); /* Test yet more contiguous hyperslab selection cases */
+    test_select_hyper_copy();   /* Test hyperslab selection copying code */
+    test_select_point_copy();   /* Test point selection copying code */
+    test_select_hyper_offset(); /* Test selection offset code with hyperslabs */
+    test_select_hyper_offset2();/* Test more selection offset code with hyperslabs */
+    test_select_point_offset(); /* Test selection offset code with elements */
+    test_select_hyper_union();  /* Test hyperslab union code */
+    test_select_hyper_and_2d(); /* Test hyperslab intersection (AND) code for 2-D dataset */
+    test_select_hyper_xor_2d(); /* Test hyperslab XOR code for 2-D dataset */
+    test_select_hyper_notb_2d(); /* Test hyperslab NOTB code for 2-D dataset */
+    test_select_hyper_nota_2d(); /* Test hyperslab NOTA code for 2-D dataset */
+
+    /* test the random hyperslab I/O with the default property list for reading */
+    test_select_hyper_union_random_5d(H5P_DEFAULT);  /* Test hyperslab union code for random 5-D hyperslabs */
+
+    /* test random hyperslab I/O with a small buffer for reads */
+    test_select_hyper_union_random_5d(plist_id);  /* Test hyperslab union code for random 5-D hyperslabs */
+
+    /* Create a dataset transfer property list */
+    fapl=H5Pcreate(H5P_FILE_ACCESS);
+    CHECK(fapl, FAIL, "H5Pcreate");
+
+    /* Get the default file access properties for caching */
+    ret=H5Pget_cache(fapl,&mdc_nelmts,&rdcc_nelmts,&rdcc_nbytes,&rdcc_w0);
+    CHECK(ret, FAIL, "H5Pget_cache");
+
+    /* Increase the size of the raw data cache */
+    rdcc_nbytes=10*1024*1024;
+
+    /* Set the file access properties for caching */
+    ret=H5Pset_cache(fapl,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0);
+    CHECK(ret, FAIL, "H5Pset_cache");
+
+    /* Test reading in a large hyperslab with a chunked dataset */
+    test_select_hyper_chunk(fapl,H5P_DEFAULT);
+
+    /* Test reading in a large hyperslab with a chunked dataset a small amount at a time */
+    test_select_hyper_chunk(fapl,plist_id);
+
+    /* Close file access property list */
+    ret=H5Pclose(fapl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close dataset transfer property list */
+    ret=H5Pclose(plist_id);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* More tests for checking validity of selections */
+    test_select_valid();
+
+    /* Tests for combining "all" and "none" selections with hyperslabs */
+    test_select_combine();
+
+    /* Test filling selections */
+    /* (Also tests iterating through each selection */
+    test_select_fill_all();
+    test_select_fill_point(NULL);
+    test_select_fill_point(offset);
+    test_select_fill_hyper_simple(NULL);
+    test_select_fill_hyper_simple(offset);
+    test_select_fill_hyper_regular(NULL);
+    test_select_fill_hyper_regular(offset);
+    test_select_fill_hyper_irregular(NULL);
+    test_select_fill_hyper_irregular(offset);
+
+    /* Test 0-sized selections */
+    test_select_none();
+
+    /* Test selections on scalar dataspaces */
+    test_scalar_select();
+    test_scalar_select2();
+
+    /* Test "same shape" routine */
+    test_shape_same();
+
+    /* Test point selections in chunked datasets */
+    test_select_point_chunk();
+
+    /* Test scalar dataspaces in chunked datasets */
+    test_select_scalar_chunk();
+
+    /* Test using selection offset on hyperslab in chunked dataset */
+    test_select_hyper_chunk_offset();
+    test_select_hyper_chunk_offset2();
+
+    /* Test selection bounds with & without offsets */
+    test_select_bounds();
+
+}   /* test_select() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_select
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Albert Cheng
+ *              July 2, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_select(void)
+{
+    remove(FILENAME);
+}
+

Added: packages/hdf5/branches/upstream/current/test/tskiplist.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/tskiplist.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/tskiplist.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1133 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+   Test HDF Skip List routines.
+
+   REMARKS
+
+   DESIGN
+
+   BUGS/LIMITATIONS
+
+   EXPORTED ROUTINES
+
+   AUTHOR
+       Quincey Koziol
+
+   MODIFICATION HISTORY
+       11/15/04 - Started coding
+ */
+
+#include <time.h>
+#include <stdlib.h>
+
+#include "testhdf5.h"
+#include "H5SLprivate.h"
+
+/* The number of elements in testing arrays */
+#define NUM_ELEMS       1000
+
+/* Random numbers */
+static int rand_num[NUM_ELEMS];
+static int sort_rand_num[NUM_ELEMS];
+static int rev_sort_rand_num[NUM_ELEMS];
+
+static int tst_sort(const void *i1, const void *i2)
+{
+    return(*(const int *)i1-*(const int *)i2);
+}
+
+static int tst_rev_sort(const void *i1, const void *i2)
+{
+    return(*(const int *)i2-*(const int *)i1);
+}
+
+/****************************************************************
+**
+**  test_skiplist_init(): Test H5SL (skiplist) code.
+**      Initialize data for skip list testing
+**
+****************************************************************/
+static void
+test_skiplist_init(void)
+{
+    time_t curr_time;   /* Current time, for seeding random number generator */
+    int new_val;        /* New value to insert */
+    unsigned found;     /* Flag to indicate value was inserted already */
+    size_t u,v;         /* Local index variables */
+
+    /* Initialize random number seed */
+    curr_time=time(NULL);
+    HDsrandom((unsigned long)curr_time);
+
+    /* Create randomized set of numbers */
+    for(u=0; u<NUM_ELEMS; u++) {
+        do {
+            /* Reset flag */
+            found=0;
+
+            /* Generate random numbers from -5000 to 5000 */
+            new_val=(int)(HDrandom()%10001)-5001;
+
+            /* Check if the value is already in the array */
+            for(v=0; v<u; v++)
+                if(rand_num[v]==new_val)
+                    found=1;
+        } while(found);
+
+        /* Set unique value in array */
+        rand_num[u]=new_val;
+    } /* end for */
+
+    /* Copy random values to sorted array */
+    HDmemcpy(sort_rand_num,rand_num,sizeof(int)*NUM_ELEMS);
+
+    /* Sort random numbers */
+    HDqsort(sort_rand_num,NUM_ELEMS,sizeof(int),tst_sort);
+
+    /* Copy random values to reverse sorted array */
+    HDmemcpy(rev_sort_rand_num,rand_num,sizeof(int)*NUM_ELEMS);
+
+    /* Sort random numbers */
+    HDqsort(rev_sort_rand_num,NUM_ELEMS,sizeof(int),tst_rev_sort);
+} /* end test_tst_init() */
+
+/****************************************************************
+**
+**  test_skiplist_create(): Test basic H5SL (skiplist) code.
+**      Tests creating and closing skip lists.
+**
+****************************************************************/
+static void
+test_skiplist_create(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(6, ("Testing Creating & Closing Skip Lists\n"));
+
+    /* Try creating a skip list */
+    slist=H5SL_create(H5SL_TYPE_INT, 0.5,16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Try closing the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_create() */
+
+/****************************************************************
+**
+**  test_skiplist_insert(): Test H5SL (skip list) code.
+**      Tests inserting single object into skip list.
+**
+****************************************************************/
+static void
+test_skiplist_insert(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    int key,            /* Key of item to insert */
+        item;           /* Item to insert */
+    int search_key;     /* Key of item to search for in skip list */
+    int *found_item;    /* Item found in skip list */
+    size_t num;         /* Number of elements in skip list */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Insertion Into Skip List\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_INT, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Check that the skip list has no elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+    /* Try searching for item in empty skip list */
+    key=37;
+    found_item=H5SL_search(slist,&key);
+    VERIFY(found_item, NULL, "H5SL_search");
+
+    /* Insert an object into the skip list */
+    key=2; item=10;
+    ret=H5SL_insert(slist,&item,&key);
+    CHECK(ret, FAIL, "H5SL_insert");
+
+    /* Check that the skip list has one element */
+    num=H5SL_count(slist);
+    VERIFY(num, 1, "H5SL_count");
+
+    /* Search for the item just inserted */
+    found_item=H5SL_search(slist,&key);
+    CHECK(found_item, NULL, "H5SL_search");
+    VERIFY(*found_item,item,"H5SL_search");
+
+    /* Search for an item not in list */
+    search_key=37;
+    found_item=H5SL_search(slist,&search_key);
+    VERIFY(found_item, NULL, "H5SL_search");
+
+    /* Attempt to insert duplicate key (should fail) */
+    search_key=2;
+    ret=H5SL_insert(slist,&search_key,&search_key);
+    VERIFY(ret, FAIL, "H5SL_insert");
+
+    /* Close the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_insert() */
+
+/****************************************************************
+**
+**  test_skiplist_insert_many(): Test H5SL (skip list) code.
+**      Tests inserting many objects into skip list.
+**
+****************************************************************/
+static void
+test_skiplist_insert_many(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    size_t num;         /* Number of elements in skip list */
+    size_t u;           /* Local index variable */
+    int *found_item;    /* Item found in skip list */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Insertion of Many Items Into Skip List\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_INT, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Check that the skip list has no elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+    /* Insert many objects into the skip list */
+    for(u=0; u<NUM_ELEMS; u++) {
+        ret=H5SL_insert(slist,&rand_num[u],&rand_num[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, NUM_ELEMS, "H5SL_count");
+
+    /* Search for all objects in the skip list */
+    for(u=0; u<NUM_ELEMS; u++) {
+        found_item=H5SL_search(slist,&rand_num[u]);
+        CHECK(found_item, NULL, "H5SL_search");
+        VERIFY(*found_item,rand_num[u],"H5SL_search");
+    } /* end for */
+
+    /* Release all the items from the list */
+    ret=H5SL_release(slist);
+    CHECK(ret, FAIL, "H5SL_release");
+
+    /* Check that the skip list has no elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+    /* Insert many objects into the skip list */
+    for(u=0; u<NUM_ELEMS; u++) {
+        ret=H5SL_insert(slist,&rand_num[u],&rand_num[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, NUM_ELEMS, "H5SL_count");
+
+    /* Release all the items from the list */
+    ret=H5SL_release(slist);
+    CHECK(ret, FAIL, "H5SL_release");
+
+    /* Close the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_insert_many() */
+
+/****************************************************************
+**
+**  test_skiplist_remove(): Test H5SL (skip list) code.
+**      Tests basic object removal from skip list.
+**
+****************************************************************/
+static void
+test_skiplist_remove(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    int key1,           /* Key of 1st item to insert */
+        key2,           /* Key of 2nd item to insert */
+        key3;           /* Key of 3rd item to insert */
+    int search_key;     /* Key of item to search for in skip list */
+    int *found_item;    /* Item found in skip list */
+    size_t num;         /* Number of elements in skip list */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Removal From Skip List\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_INT, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Check that the skip list has no elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+    /* Try removing an item in empty skip list */
+    search_key=37;
+    found_item=H5SL_remove(slist,&search_key);
+    VERIFY(found_item, NULL, "H5SL_remove");
+
+    /* Insert three objects into the skip list */
+    key1=15;
+    ret=H5SL_insert(slist,&key1,&key1);
+    CHECK(ret, FAIL, "H5SL_insert");
+
+    key2=10;
+    ret=H5SL_insert(slist,&key2,&key2);
+    CHECK(ret, FAIL, "H5SL_insert");
+
+    key3=20;
+    ret=H5SL_insert(slist,&key3,&key3);
+    CHECK(ret, FAIL, "H5SL_insert");
+
+    /* Check that the skip list has three elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 3, "H5SL_count");
+
+    /* Try removing items from skip list */
+    search_key=key1;
+    found_item=H5SL_remove(slist,&search_key);
+    CHECK(found_item, NULL, "H5SL_remove");
+    VERIFY(found_item, &key1, "H5SL_remove");
+
+    search_key=key2;
+    found_item=H5SL_remove(slist,&search_key);
+    CHECK(found_item, NULL, "H5SL_remove");
+    VERIFY(found_item, &key2, "H5SL_remove");
+
+    search_key=key3;
+    found_item=H5SL_remove(slist,&search_key);
+    CHECK(found_item, NULL, "H5SL_remove");
+    VERIFY(found_item, &key3, "H5SL_remove");
+
+    /* Check that the skip list has no elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+    /* Try removing items from empty skip list (after its been worked on) */
+    search_key=key1;
+    found_item=H5SL_remove(slist,&search_key);
+    VERIFY(found_item, NULL, "H5SL_remove");
+
+    /* Close the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_remove() */
+
+/****************************************************************
+**
+**  test_skiplist_remove_many(): Test H5SL (skip list) code.
+**      Tests removing many objects from skip list.
+**
+****************************************************************/
+static void
+test_skiplist_remove_many(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    size_t num;         /* Number of elements in skip list */
+    size_t u;           /* Local index variable */
+    int *found_item;    /* Item found in skip list */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Removal of Many Items From Skip List\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_INT, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Check that the skip list has no elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+    /* Insert many objects into the skip list */
+    for(u=0; u<NUM_ELEMS; u++) {
+        ret=H5SL_insert(slist,&rand_num[u],&rand_num[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, NUM_ELEMS, "H5SL_count");
+
+    /* Remove all objects from the skip list (in random order) */
+    for(u=0; u<NUM_ELEMS; u++) {
+        found_item=H5SL_remove(slist,&rand_num[u]);
+        CHECK(found_item, NULL, "H5SL_remove");
+        VERIFY(*found_item,rand_num[u],"H5SL_remove");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+/* Insert & remove again (in sorted order), to check that completely empty skip lists can be added again */
+
+    /* Insert many objects into the skip list */
+    for(u=0; u<NUM_ELEMS; u++) {
+        ret=H5SL_insert(slist,&rand_num[u],&rand_num[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, NUM_ELEMS, "H5SL_count");
+
+    /* Remove all objects from the skip list */
+    for(u=0; u<NUM_ELEMS; u++) {
+        found_item=H5SL_remove(slist,&sort_rand_num[u]);
+        CHECK(found_item, NULL, "H5SL_remove");
+        VERIFY(*found_item,sort_rand_num[u],"H5SL_remove");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+/* Insert & remove again (in reverse sorted order), to check that completely empty skip lists can be added again */
+
+    /* Insert many objects into the skip list */
+    for(u=0; u<NUM_ELEMS; u++) {
+        ret=H5SL_insert(slist,&rand_num[u],&rand_num[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, NUM_ELEMS, "H5SL_count");
+
+    /* Remove all objects from the skip list */
+    for(u=0; u<NUM_ELEMS; u++) {
+        found_item=H5SL_remove(slist,&rev_sort_rand_num[u]);
+        CHECK(found_item, NULL, "H5SL_remove");
+        VERIFY(*found_item,rev_sort_rand_num[u],"H5SL_remove");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+    /* Close the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_remove_many() */
+
+/****************************************************************
+**
+**  test_skiplist_firstnext(): Test H5SL (skip list) code.
+**      Tests iterating over nodes in skip list with first/next calls.
+**
+****************************************************************/
+static void
+test_skiplist_firstnext(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    H5SL_node_t *node;  /* Skip list node */
+    size_t num;         /* Number of elements in skip list */
+    size_t u;           /* Local index variable */
+    int *found_item;    /* Item found in skip list */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Iterating Over Skip List With First/Next\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_INT, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Check that the skip list has no elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+    /* Check that the list appears empty */
+    node=H5SL_first(slist);
+    VERIFY(node, NULL, "H5SL_first");
+
+    /* Insert many objects into the skip list */
+    for(u=0; u<NUM_ELEMS; u++) {
+        ret=H5SL_insert(slist,&rand_num[u],&rand_num[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, NUM_ELEMS, "H5SL_count");
+
+    /* Iterate over all the nodes in the skip list */
+    node=H5SL_first(slist);
+    CHECK(node, NULL, "H5SL_first");
+    u=0;
+    while(node!=NULL) {
+        found_item=H5SL_item(node);
+        VERIFY(*found_item,sort_rand_num[u],"H5SL_next");
+        u++;
+        node=H5SL_next(node);
+    } /* end while */
+
+    /* Release all the items from the list */
+    ret=H5SL_release(slist);
+    CHECK(ret, FAIL, "H5SL_release");
+
+    /* Check that the list appears empty again */
+    node=H5SL_first(slist);
+    VERIFY(node, NULL, "H5SL_first");
+
+    /* Close the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_firstnext() */
+
+/****************************************************************
+**
+**  test_skiplist_string(): Test H5SL (skip list) code.
+**      Tests using strings for keys in skip lists.
+**
+****************************************************************/
+static void
+test_skiplist_string(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    H5SL_node_t *node;  /* Skip list node */
+    size_t num;         /* Number of elements in skip list */
+    size_t u;           /* Local index variable */
+    typedef struct string_node {
+        int i;
+        const char *s;
+    } string_node;
+    string_node data[10]={
+        {10,"10"},
+        {20,"20"},
+        {15,"15"},
+        { 5,"05"},
+        {50,"50"},
+        {30,"30"},
+        {31,"31"},
+        {32,"32"},
+        {80,"80"},
+        {90,"90"}};
+    string_node sorted_data[10]={
+        { 5,"05"},
+        {10,"10"},
+        {15,"15"},
+        {20,"20"},
+        {30,"30"},
+        {31,"31"},
+        {32,"32"},
+        {50,"50"},
+        {80,"80"},
+        {90,"90"}};
+    string_node *found_item;    /* Item found in skip list */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Skip List With String Keys\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_STR, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Check that the skip list has no elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+    /* Insert objects into the skip list */
+    for(u=0; u<10; u++) {
+        ret=H5SL_insert(slist,&data[u],data[u].s);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 10, "H5SL_count");
+
+    /* Iterate over all the nodes in the skip list */
+    node=H5SL_first(slist);
+    u=0;
+    while(node!=NULL) {
+        found_item=H5SL_item(node);
+        VERIFY(found_item->i,sorted_data[u].i,"H5SL_next");
+        u++;
+        node=H5SL_next(node);
+    } /* end while */
+
+    /* Close the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_string() */
+
+static herr_t
+test_skiplist_iter(void *item, void UNUSED *key, void *op_data)
+{
+    size_t *up=(size_t *)op_data;
+
+    VERIFY(*(int *)item,sort_rand_num[*up],"H5SL_iterate");
+    (*up)++;
+
+    return(0);
+}
+
+/****************************************************************
+**
+**  test_skiplist_iterate(): Test H5SL (skip list) code.
+**      Tests iterating over nodes in skip list with callbacks.
+**
+****************************************************************/
+static void
+test_skiplist_iterate(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    size_t num;         /* Number of elements in skip list */
+    size_t u;           /* Local index variable */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Iterating Over Skip List\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_INT, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Check that the skip list has no elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+    /* Insert many objects into the skip list */
+    for(u=0; u<NUM_ELEMS; u++) {
+        ret=H5SL_insert(slist,&rand_num[u],&rand_num[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, NUM_ELEMS, "H5SL_count");
+
+    /* Iterate over all the nodes in the skip list */
+    u=0;
+    ret=H5SL_iterate(slist,test_skiplist_iter,&u);
+    CHECK(ret, FAIL, "H5SL_iterate");
+
+    /* Close the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_iterate() */
+
+/****************************************************************
+**
+**  test_skiplist_hsize(): Test H5SL (skip list) code.
+**      Tests using hsize_t for keys in skip lists.
+**
+****************************************************************/
+static void
+test_skiplist_hsize(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    H5SL_node_t *node;  /* Skip list node */
+    size_t num;         /* Number of elements in skip list */
+    size_t u;           /* Local index variable */
+    hsize_t data[10]={ 10, 20, 15, 5, 50, 30, 31, 32, 80, 90};
+    hsize_t sorted_data[10]={ 5, 10, 15, 20, 30, 31, 32, 50, 80, 90};
+    hsize_t *found_item;    /* Item found in skip list */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Skip List With hsize_t Keys\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_HSIZE, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Check that the skip list has no elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+    /* Insert objects into the skip list */
+    for(u=0; u<10; u++) {
+        ret=H5SL_insert(slist,&data[u],&data[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 10, "H5SL_count");
+
+    /* Iterate over all the nodes in the skip list */
+    node=H5SL_first(slist);
+    u=0;
+    while(node!=NULL) {
+        found_item=H5SL_item(node);
+        VERIFY(*found_item,sorted_data[u],"H5SL_next");
+        u++;
+        node=H5SL_next(node);
+    } /* end while */
+
+    /* Close the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_hsize() */
+
+/****************************************************************
+**
+**  test_skiplist_unsigned(): Test H5SL (skip list) code.
+**      Tests using unsigned for keys in skip lists.
+**
+****************************************************************/
+static void
+test_skiplist_unsigned(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    H5SL_node_t *node;  /* Skip list node */
+    size_t num;         /* Number of elements in skip list */
+    size_t u;           /* Local index variable */
+    unsigned data[10]={ 10, 20, 15, 5, 50, 30, 31, 32, 80, 90};
+    unsigned sorted_data[10]={ 5, 10, 15, 20, 30, 31, 32, 50, 80, 90};
+    unsigned *found_item;    /* Item found in skip list */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Skip List With unsigned Keys\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_UNSIGNED, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Check that the skip list has no elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+    /* Insert objects into the skip list */
+    for(u=0; u<10; u++) {
+        ret=H5SL_insert(slist,&data[u],&data[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 10, "H5SL_count");
+
+    /* Iterate over all the nodes in the skip list */
+    node=H5SL_first(slist);
+    u=0;
+    while(node!=NULL) {
+        found_item=H5SL_item(node);
+        VERIFY(*found_item,sorted_data[u],"H5SL_next");
+        u++;
+        node=H5SL_next(node);
+    } /* end while */
+
+    /* Close the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_unsigned() */
+
+/****************************************************************
+**
+**  test_skiplist_lastprev(): Test H5SL (skip list) code.
+**      Tests iterating over nodes in skip list with last/prev calls.
+**
+****************************************************************/
+static void
+test_skiplist_lastprev(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    H5SL_node_t *node;  /* Skip list node */
+    size_t num;         /* Number of elements in skip list */
+    size_t u;           /* Local index variable */
+    int *found_item;    /* Item found in skip list */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Iterating Over Skip List With Last/Prev\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_INT, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Check that the skip list has no elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+    /* Check that the list appears empty */
+    node=H5SL_last(slist);
+    VERIFY(node, NULL, "H5SL_last");
+
+    /* Insert many objects into the skip list */
+    for(u=0; u<NUM_ELEMS; u++) {
+        ret=H5SL_insert(slist,&rand_num[u],&rand_num[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, NUM_ELEMS, "H5SL_count");
+
+    /* Iterate over all the nodes in the skip list */
+    node=H5SL_last(slist);
+    CHECK(node, NULL, "H5SL_last");
+    u=NUM_ELEMS-1;
+    while(node!=NULL) {
+        found_item=H5SL_item(node);
+        VERIFY(*found_item,sort_rand_num[u],"H5SL_prev");
+        u--;
+        node=H5SL_prev(node);
+    } /* end while */
+
+    /* Release all the items from the list */
+    ret=H5SL_release(slist);
+    CHECK(ret, FAIL, "H5SL_release");
+
+    /* Check that the list appears empty again */
+    node=H5SL_last(slist);
+    VERIFY(node, NULL, "H5SL_last");
+
+    /* Close the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_lastprev() */
+
+/****************************************************************
+**
+**  test_skiplist_find(): Test H5SL (skip list) code.
+**      Tests 'find' operation in skip lists.
+**
+****************************************************************/
+static void
+test_skiplist_find(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    H5SL_node_t *node;  /* Skip list node */
+    size_t u;           /* Local index variable */
+    unsigned data[10]={ 10, 20, 15, 5, 50, 30, 31, 32, 80, 90};
+    unsigned sorted_data[10]={ 5, 10, 15, 20, 30, 31, 32, 50, 80, 90};
+    unsigned *found_item;    /* Item found in skip list */
+    unsigned find_item; /* Item to find in skip list */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Skip List 'Find' Operation\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_UNSIGNED, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Insert objects into the skip list */
+    for(u=0; u<10; u++) {
+        ret=H5SL_insert(slist,&data[u],&data[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Find the element with key==30 in the skip list */
+    find_item=30;
+    node=H5SL_find(slist,&find_item);
+    CHECK(node, NULL, "H5SL_find");
+
+    /* Iterate over the rest of the nodes in the skip list */
+    u=4;
+    while(node!=NULL) {
+        found_item=H5SL_item(node);
+        VERIFY(*found_item,sorted_data[u],"H5SL_next");
+        u++;
+        node=H5SL_next(node);
+    } /* end while */
+
+    /* Check for trying to locate non-existent item */
+    find_item=81;
+    node=H5SL_find(slist,&find_item);
+    VERIFY(node, NULL, "H5SL_find");
+
+    /* Close the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_find() */
+
+/****************************************************************
+**
+**  test_skiplist_add(): Test H5SL (skip list) code.
+**      Tests 'add' operation in skip lists.
+**
+****************************************************************/
+static void
+test_skiplist_add(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    H5SL_node_t *node;  /* Skip list node */
+    size_t u;           /* Local index variable */
+    unsigned data[10]={ 10, 20, 15, 5, 50, 30, 31, 32, 80, 90};
+    unsigned sorted_data[10]={ 5, 10, 15, 20, 30, 31, 32, 50, 80, 90};
+    unsigned *found_item;    /* Item found in skip list */
+    unsigned new_item;  /* Item to add to skip list */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Skip List 'Add' Operation\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_UNSIGNED, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Insert objects into the skip list */
+    for(u=0; u<10; u++) {
+        ret=H5SL_insert(slist,&data[u],&data[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Add the element with key==12 in the skip list */
+    new_item=12;
+    node=H5SL_add(slist,&new_item,&new_item);
+    CHECK(node, NULL, "H5SL_add");
+
+    /* Advance to next node in list */
+    node=H5SL_next(node);
+    CHECK(node, NULL, "H5SL_next");
+
+    /* Iterate over the rest of the nodes in the skip list */
+    u=2;
+    while(node!=NULL) {
+        found_item=H5SL_item(node);
+        VERIFY(*found_item,sorted_data[u],"H5SL_item");
+        u++;
+        node=H5SL_next(node);
+    } /* end while */
+
+    /* Close the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_add() */
+
+static herr_t
+test_skiplist_destroy_free(void *item, void UNUSED *key, void *op_data)
+{
+    unsigned *free_count=(unsigned *)op_data;
+
+    VERIFY(*(int *)item,sort_rand_num[*free_count],"H5SL_destroy");
+    (*free_count)++;
+
+    return(0);
+}
+
+/****************************************************************
+**
+**  test_skiplist_destroy(): Test H5SL (skip list) code.
+**      Tests 'destroy' operation in skip lists.
+**
+****************************************************************/
+static void
+test_skiplist_destroy(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    size_t u;           /* Local index variable */
+    unsigned free_count; /* Number of items freed */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Skip List 'Destroy' Operation\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_INT, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Insert objects into the skip list */
+    for(u=0; u<NUM_ELEMS; u++) {
+        ret=H5SL_insert(slist,&rand_num[u],&rand_num[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Destroy the skip list */
+    free_count=0;
+    ret=H5SL_destroy(slist,test_skiplist_destroy_free,&free_count);
+    CHECK(ret, FAIL, "H5SL_destroy");
+    VERIFY(free_count, NUM_ELEMS, "H5SL_destroy");
+
+} /* end test_skiplist_destroy() */
+
+/****************************************************************
+**
+**  test_skiplist_free(): Test H5SL (skip list) code.
+**      Tests 'free' operation in skip lists.
+**
+****************************************************************/
+static void
+test_skiplist_free(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    size_t num;         /* Number of elements in skip list */
+    size_t u;           /* Local index variable */
+    unsigned free_count; /* Number of items freed */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Skip List 'Free' Operation\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_INT, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Insert objects into the skip list */
+    for(u=0; u<NUM_ELEMS; u++) {
+        ret=H5SL_insert(slist,&rand_num[u],&rand_num[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Destroy the skip list */
+    free_count=0;
+    ret=H5SL_free(slist,test_skiplist_destroy_free,&free_count);
+    CHECK(ret, FAIL, "H5SL_destroy");
+    VERIFY(free_count, NUM_ELEMS, "H5SL_free");
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, 0, "H5SL_count");
+
+    /* Insert objects into the skip list again */
+    for(u=0; u<NUM_ELEMS; u++) {
+        ret=H5SL_insert(slist,&rand_num[u],&rand_num[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Check that the skip list has correct # of elements */
+    num=H5SL_count(slist);
+    VERIFY(num, NUM_ELEMS, "H5SL_count");
+
+    /* Close the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_free() */
+
+/****************************************************************
+**
+**  test_skiplist_less(): Test H5SL (skip list) code.
+**      Tests 'less' operation in skip lists.
+**
+****************************************************************/
+static void
+test_skiplist_less(void)
+{
+    H5SL_t *slist;      /* Skip list created */
+    size_t u;           /* Local index variable */
+    unsigned data[10]={ 10, 20, 15, 5, 50, 30, 31, 32, 80, 90};
+    /* unsigned sorted_data[10]={ 5, 10, 15, 20, 30, 31, 32, 50, 80, 90}; */
+    unsigned *found_item;    /* Item found in skip list */
+    unsigned find_item;  /* Item to add to skip list */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(7, ("Testing Skip List 'Less' Operation\n"));
+
+    /* Create a skip list */
+    slist=H5SL_create(H5SL_TYPE_UNSIGNED, 0.5, 16);
+    CHECK(slist, NULL, "H5SL_create");
+
+    /* Insert objects into the skip list */
+    for(u=0; u<10; u++) {
+        ret=H5SL_insert(slist,&data[u],&data[u]);
+        CHECK(ret, FAIL, "H5SL_insert");
+    } /* end for */
+
+    /* Check for exact match of items in various positions */
+    find_item=20;
+    found_item=H5SL_less(slist,&find_item);
+    VERIFY(*found_item,find_item,"H5SL_less");
+    find_item=90;
+    found_item=H5SL_less(slist,&find_item);
+    VERIFY(*found_item,find_item,"H5SL_less");
+    find_item=5;
+    found_item=H5SL_less(slist,&find_item);
+    VERIFY(*found_item,find_item,"H5SL_less");
+
+    /* Find item less than a missing key, in various positions */
+    find_item=19;
+    found_item=H5SL_less(slist,&find_item);
+    VERIFY(*found_item,15,"H5SL_less");
+    find_item=89;
+    found_item=H5SL_less(slist,&find_item);
+    VERIFY(*found_item,80,"H5SL_less");
+    find_item=100;
+    found_item=H5SL_less(slist,&find_item);
+    VERIFY(*found_item,90,"H5SL_less");
+    find_item=9;
+    found_item=H5SL_less(slist,&find_item);
+    VERIFY(*found_item,5,"H5SL_less");
+    find_item=4;
+    found_item=H5SL_less(slist,&find_item);
+    VERIFY(found_item,NULL,"H5SL_less");
+
+    /* Close the skip list */
+    ret=H5SL_close(slist);
+    CHECK(ret, FAIL, "H5SL_close");
+
+} /* end test_skiplist_less() */
+
+/****************************************************************
+**
+**  test_skiplist(): Main H5SL testing routine.
+**
+****************************************************************/
+void
+test_skiplist(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Skip Lists\n"));
+
+    /* Initialize skip list testing data */
+    test_skiplist_init();
+
+    /* Actual skip list tests */
+    test_skiplist_create();     /* Test skip list creation */
+    test_skiplist_insert();     /* Test basic skip list insertion */
+    test_skiplist_insert_many(); /* Test insertion of many items into skip list */
+    test_skiplist_remove();     /* Test basic skip list removal */
+    test_skiplist_remove_many(); /* Test removal of many items from skip list */
+    test_skiplist_firstnext();  /* Test iteration over skip list nodes with first/next */
+    test_skiplist_string();     /* Test skip list string keys */
+    test_skiplist_iterate();    /* Test iteration over skip list nodes with callback */
+    test_skiplist_hsize();      /* Test skip list hsize_t keys */
+    test_skiplist_unsigned();   /* Test skip list unsigned keys */
+    test_skiplist_lastprev();   /* Test iteration over skip list nodes with last/prev */
+    test_skiplist_find();       /* Test 'find' operation */
+    test_skiplist_add();        /* Test 'add' operation */
+    test_skiplist_destroy();    /* Test 'destroy' operation */
+    test_skiplist_free();       /* Test 'free' operation */
+    test_skiplist_less();       /* Test 'less' operation */
+
+}   /* end test_skiplist() */
+

Added: packages/hdf5/branches/upstream/current/test/ttime.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/ttime.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/ttime.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,237 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/***********************************************************
+*
+* Test program:	 ttime
+*
+* Test the Time Datatype functionality
+*
+*************************************************************/
+
+#include "testhdf5.h"
+
+#include "hdf5.h"
+
+#define DATAFILE   "ttime.h5"
+#define DATASETNAME   "Dataset"
+
+/****************************************************************
+**
+**  test_time_commit(): Test committing time datatypes to a file
+**
+****************************************************************/
+static void
+test_time_commit(void)
+{
+    hid_t       file_id, tid;  /* identifiers */
+    herr_t      status;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Committing Time Datatypes\n"));
+
+    /* Create a new file using default properties. */
+    file_id = H5Fcreate(DATAFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file_id, FAIL, "H5Fcreate");
+
+    tid = H5Tcopy (H5T_UNIX_D32LE);
+    CHECK(tid, FAIL, "H5Tcopy");
+    status = H5Tcommit(file_id, "Committed D32LE type", tid);
+    CHECK(status, FAIL, "H5Tcommit");
+    status = H5Tclose (tid);
+    CHECK(status, FAIL, "H5Tclose");
+
+    tid = H5Tcopy (H5T_UNIX_D32BE);
+    CHECK(tid, FAIL, "H5Tcopy");
+    status = H5Tcommit(file_id, "Committed D32BE type", tid);
+    CHECK(status, FAIL, "H5Tcommit");
+    status = H5Tclose (tid);
+    CHECK(status, FAIL, "H5Tclose");
+
+    tid = H5Tcopy (H5T_UNIX_D64LE);
+    CHECK(tid, FAIL, "H5Tcopy");
+    status = H5Tcommit(file_id, "Committed D64LE type", tid);
+    CHECK(status, FAIL, "H5Tcommit");
+    status = H5Tclose (tid);
+    CHECK(status, FAIL, "H5Tclose");
+
+    tid = H5Tcopy (H5T_UNIX_D64BE);
+    CHECK(tid, FAIL, "H5Tcopy");
+    status = H5Tcommit(file_id, "Committed D64BE type", tid);
+    CHECK(status, FAIL, "H5Tcommit");
+    status = H5Tclose (tid);
+    CHECK(status, FAIL, "H5Tclose");
+
+    /* Close the file. */
+    status = H5Fclose(file_id);
+    CHECK(status, FAIL, "H5Fclose");
+
+    file_id = H5Fopen(DATAFILE, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(file_id, FAIL, "H5Fopen");
+
+    tid = H5Topen(file_id, "Committed D32LE type");
+    CHECK(tid, FAIL, "H5Topen");
+
+    if(!H5Tequal(tid, H5T_UNIX_D32LE))
+        TestErrPrintf("H5T_UNIX_D32LE datatype not found\n");
+
+    status = H5Tclose (tid);
+    CHECK(status, FAIL, "H5Tclose");
+
+    tid = H5Topen(file_id, "Committed D32BE type");
+    CHECK(tid, FAIL, "H5Topen");
+
+    if(!H5Tequal(tid, H5T_UNIX_D32BE))
+        TestErrPrintf("H5T_UNIX_D32BE datatype not found\n");
+
+    status = H5Tclose (tid);
+    CHECK(status, FAIL, "H5Tclose");
+
+    tid = H5Topen(file_id, "Committed D64LE type");
+    CHECK(tid, FAIL, "H5Topen");
+
+    if(!H5Tequal(tid, H5T_UNIX_D64LE))
+        TestErrPrintf("H5T_UNIX_D64LE datatype not found");
+
+    status = H5Tclose (tid);
+    CHECK(status, FAIL, "H5Tclose");
+
+    tid = H5Topen(file_id, "Committed D64BE type");
+    CHECK(tid, FAIL, "H5Topen");
+
+    if(!H5Tequal(tid, H5T_UNIX_D64BE))
+        TestErrPrintf("H5T_UNIX_D64BE datatype not found");
+
+    status = H5Tclose (tid);
+    CHECK(status, FAIL, "H5Tclose");
+
+    status = H5Fclose(file_id);
+    CHECK(status, FAIL, "H5Fclose");
+
+}
+
+#ifdef NOT_YET
+/****************************************************************
+**
+**  test_time_io(): Test writing time data to a dataset
+**
+****************************************************************/
+static void
+test_time_io(void)
+{
+    hid_t       fid;            /* File identifier */
+    hid_t       dsid;           /* Dataset identifier */
+    hid_t       tid;            /* Datatype identifier */
+    hid_t       sid;            /* Dataspace identifier */
+    time_t      timenow, timethen;      /* Times */
+    herr_t      status;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Committing Time Datatypes\n"));
+
+    /* Create a new file using default properties. */
+    fid = H5Fcreate(DATAFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fcreate");
+
+    /* Create a scalar dataspace */
+    sid = H5Screate(H5S_SCALAR);
+    CHECK(sid, FAIL, "H5Screate");
+
+    /* Create a dataset with a time datatype */
+    dsid = H5Dcreate(fid, DATASETNAME, H5T_UNIX_D32LE, sid, H5P_DEFAULT);
+    CHECK(dsid, FAIL, "H5Dcreate");
+
+    /* Initialize time data value */
+    timenow = HDtime(NULL);
+
+    /* Write time to dataset */
+    status = H5Dwrite (dsid, H5T_UNIX_D32LE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &timenow);
+    CHECK(status, FAIL, "H5Dwrite");
+
+    /* Close objects */
+    status = H5Dclose(dsid);
+    CHECK(status, FAIL, "H5Dclose");
+
+    status = H5Sclose(sid);
+    CHECK(status, FAIL, "H5Sclose");
+
+    status = H5Fclose (fid);
+    CHECK(status, FAIL, "H5Fclose");
+
+    /* Open file and dataset, read time back and print it in calendar format */
+    fid = H5Fopen(DATAFILE, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fopen");
+
+    dsid = H5Dopen(fid, DATASETNAME);
+    CHECK(dsid, FAIL, "H5Dopen");
+
+tid = H5Dget_type(dsid);
+CHECK(tid, FAIL, "H5Dget_type");
+if( H5Tget_class (tid) == H5T_TIME)
+    fprintf(stderr,"datatype class is H5T_TIME\n");
+status = H5Tclose (tid);
+CHECK(status, FAIL, "H5Tclose");
+
+    status = H5Dread (dsid, H5T_UNIX_D32LE, H5S_ALL, H5S_ALL, H5P_DEFAULT, &timethen);
+    CHECK(status, FAIL, "H5Dread");
+fprintf(stderr,"time written was: %s\n", HDctime(&timethen));
+
+    status = H5Dclose(dsid);
+    CHECK(status, FAIL, "H5Dclose");
+
+    status = H5Fclose(fid);
+    CHECK(status, FAIL, "H5Fclose");
+
+}
+#endif /* NOT_YET */
+
+/****************************************************************
+**
+**  test_time(): Main time datatype testing routine.
+**
+****************************************************************/
+void
+test_time(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Time Datatypes\n"));
+
+    test_time_commit();         /* Test committing time datatypes to a file */
+#ifdef NOT_YET
+    test_time_io();             /* Test writing time data to a dataset */
+#endif /* NOT_YET */
+
+}   /* test_time() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_time
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Quincey Koziol
+ *              October 19, 2000
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_time(void)
+{
+    remove(DATAFILE);
+}
+

Added: packages/hdf5/branches/upstream/current/test/ttsafe.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/ttsafe.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/ttsafe.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,116 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * FILE
+ * ttsafe.c - HDF5 threadsafe testing framework main file.
+ *
+ * REMARKS
+ * General test wrapper for HDF5 library thread safety test programs
+ *
+ * DESIGN
+ * Each test function should be implemented as function having no
+ * parameters and returning void (i.e. no return value).  They should be put
+ * into the list of InitTest() calls in main() below.  Functions which depend
+ * on other functionality should be placed below the InitTest() call for the
+ * base functionality testing.
+ * Each test module should include ttsafe.h and define a unique set of
+ * names for test files they create.
+ *
+ * BUGS/LIMITATIONS
+ *
+ * EXPORTED ROUTINES/VARIABLES:
+ *
+ */
+
+#include "h5test.h"
+
+/* ANY new test needs to have a prototype in ttsafe.h */
+#include "ttsafe.h"
+
+#ifndef H5_HAVE_THREADSAFE
+int main(void)
+{
+    printf("Test skipped because THREADSAFE not enabled\n");
+    return 0;
+}
+#else
+
+#define MAX_NUM_NAME 1000
+#define NAME_OFFSET 6         /* offset for "name<num>" */
+
+/* pre-condition: num must be a non-negative number */
+static int num_digits(int num)
+{
+	int i;
+
+	if (num == 0)
+		return 1;
+
+	for (i = 0; num > 0; i++)
+		num = num / 10;
+
+	return i;
+}
+
+/* Routine to generate attribute names for numeric values */
+char *gen_name(int value)
+{
+	char *temp;
+	int i, length;
+
+	length = num_digits(MAX_NUM_NAME - 1);
+	temp = (char *)HDmalloc((NAME_OFFSET + length + 1) * sizeof(char));
+	temp = HDstrcpy(temp, "attrib");
+	temp[NAME_OFFSET + length] = '\0';
+
+	for (i = length - 1; i >= 0; i--) {
+		temp[NAME_OFFSET + i] = (char)((int)'0' + value % 10);
+		value = value / 10;
+	}
+
+	return temp;
+}
+
+int main(int argc, char *argv[])
+{
+        /* Initialize testing framework */
+        TestInit(argv[0], NULL, NULL);
+
+	/* Tests are generally arranged from least to most complexity... */
+	AddTest("dcreate", tts_dcreate, cleanup_dcreate, "multi-dataset creation", NULL);
+	AddTest("error", tts_error, cleanup_error, "per-thread error stacks", NULL);
+	AddTest("cancel", tts_cancel, cleanup_cancel, "thread cancellation safety test", NULL);
+	AddTest("acreate", tts_acreate, cleanup_acreate, "multi-attribute creation", NULL);
+
+        /* Display testing information */
+        TestInfo(argv[0]);
+
+        /* Parse command line arguments */
+        TestParseCmdLine(argc,argv);
+
+        /* Perform requested testing */
+        PerformTests();
+
+        /* Display test summary, if requested */
+	if (GetTestSummary())
+            TestSummary();
+
+        /* Clean up test files, if allowed */
+	if (GetTestCleanup() && !getenv("HDF5_NOCLEANUP"))
+            TestCleanup();
+
+	return GetTestNumErrs();
+} /* end main() */
+#endif  /*H5_HAVE_THREADSAFE*/

Added: packages/hdf5/branches/upstream/current/test/ttsafe.h
===================================================================
--- packages/hdf5/branches/upstream/current/test/ttsafe.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/ttsafe.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,53 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 header file contains information required for testing the HDF5 library.
+ */
+
+#ifndef TTSAFE_H
+#define TTSAFE_H
+
+#include <string.h>
+
+/*
+ * Include required headers.  This file tests internal library functions,
+ * so we include the private headers here.
+ */
+#include "hdf5.h"
+#include "H5private.h"
+#include "H5Eprivate.h"
+#include "testhdf5.h"
+
+#ifdef H5_HAVE_THREADSAFE
+/* Include pthread library for threadsafe tests */
+#include <pthread.h>
+
+/* Prototypes for the support routines */
+extern char*            gen_name(int);
+
+/* Prototypes for the test routines */
+void                    tts_dcreate(void);
+void                    tts_error(void);
+void                    tts_cancel(void);
+void                    tts_acreate(void);
+
+/* Prototypes for the cleanup routines */
+void                    cleanup_dcreate(void);
+void                    cleanup_error(void);
+void                    cleanup_cancel(void);
+void                    cleanup_acreate(void);
+
+#endif /* H5_HAVE_THREADSAFE */
+#endif /* TTSAFE_H */

Added: packages/hdf5/branches/upstream/current/test/ttsafe_acreate.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/ttsafe_acreate.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/ttsafe_acreate.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,175 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/********************************************************************
+ *
+ * Testing for thread safety in H5A (dataset attribute) library
+ * operations. -- Threaded program --
+ * ------------------------------------------------------------------
+ *
+ * Plan: Attempt to break H5Acreate by making many simultaneous create
+ *       calls.
+ *
+ * Claim: N calls to H5Acreate should create N attributes for a dataset
+ *        if threadsafe. If some unprotected shared data exists for the
+ *        dataset (eg, a count of the number of attributes in the
+ *        dataset), there is a small chance that consecutive reads occur
+ *        before a write to that shared variable.
+ *
+ * HDF5 APIs exercised in thread:
+ * H5Acreate, H5Awrite, H5Aclose.
+ *
+ * Created: Oct 5 1999
+ * Programmer: Chee Wai LEE
+ *
+ * Modification History
+ * --------------------
+ *
+ *	15 May 2000, Chee Wai LEE
+ *	Incorporated into library tests.
+ *
+ *	19 May 2000, Bill Wendling
+ *	Changed so that it creates its own HDF5 file and removes it at cleanup
+ *	time.
+ *
+ ********************************************************************/
+
+#include "ttsafe.h"
+
+#ifdef H5_HAVE_THREADSAFE
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#define FILENAME	"ttsafe_acreate.h5"
+#define DATASETNAME	"IntData"
+#define NUM_THREADS	16
+
+void *tts_acreate_thread(void *);
+
+typedef struct acreate_data_struct {
+	hid_t dataset;
+	hid_t datatype;
+	hid_t dataspace;
+	int current_index;
+} ttsafe_name_data_t;
+
+void tts_acreate(void)
+{
+    /* Pthread declarations */
+    pthread_t threads[NUM_THREADS];
+
+    /* HDF5 data declarations */
+    hid_t   file, dataset;
+    hid_t   dataspace, datatype;
+    hid_t   attribute;
+    hsize_t dimsf[1];		/* dataset dimensions */
+
+    /* data declarations */
+    int     data;			/* data to write */
+    int     buffer, ret, i;
+
+    ttsafe_name_data_t *attrib_data;
+
+    /*
+     * Create an HDF5 file using H5F_ACC_TRUNC access, default file
+     * creation plist and default file access plist
+     */
+    file = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* create a simple dataspace for the dataset */
+    dimsf[0] = 1;
+    dataspace = H5Screate_simple(1, dimsf, NULL);
+
+    /* define datatype for the data using native little endian integers */
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    H5Tset_order(datatype, H5T_ORDER_LE);
+
+    /* create a new dataset within the file */
+    dataset = H5Dcreate(file, DATASETNAME, datatype, dataspace, H5P_DEFAULT);
+
+    /* initialize data for dataset and write value to dataset */
+    data = NUM_THREADS;
+    H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+    H5P_DEFAULT, &data);
+
+    /*
+     * Simultaneously create a large number of attributes to be associated
+     * with the dataset
+     */
+    for (i = 0; i < NUM_THREADS; i++) {
+        attrib_data = malloc(sizeof(ttsafe_name_data_t));
+        attrib_data->dataset = dataset;
+        attrib_data->datatype = datatype;
+        attrib_data->dataspace = dataspace;
+        attrib_data->current_index = i;
+        pthread_create(&threads[i], NULL, tts_acreate_thread, attrib_data);
+    }
+
+    for (i = 0; i < NUM_THREADS; i++)
+        pthread_join(threads[i], NULL);
+
+    /* verify the correctness of the test */
+    for (i = 0; i < NUM_THREADS; i++) {
+        attribute = H5Aopen_name(dataset,gen_name(i));
+
+        if (attribute < 0)
+            TestErrPrintf("unable to open appropriate attribute.  Test failed!\n");
+        else {
+            ret = H5Aread(attribute, H5T_NATIVE_INT, &buffer);
+
+            if (ret < 0 || buffer != i)
+                TestErrPrintf("wrong data values. Test failed!\n");
+
+            H5Aclose(attribute);
+        }
+    }
+
+    /* close remaining resources */
+    H5Sclose(dataspace);
+    H5Tclose(datatype);
+    H5Dclose(dataset);
+    H5Fclose(file);
+}
+
+void *tts_acreate_thread(void *client_data)
+{
+    hid_t   attribute;
+    char    *attribute_name;
+    int     *attribute_data;	/* data for attributes */
+
+    ttsafe_name_data_t *attrib_data;
+
+    attrib_data = (ttsafe_name_data_t *)client_data;
+
+    /* Create attribute */
+    attribute_name = gen_name(attrib_data->current_index);
+    attribute = H5Acreate(attrib_data->dataset, attribute_name,
+                          attrib_data->datatype, attrib_data->dataspace,
+                          H5P_DEFAULT);
+
+    /* Write data to the attribute */
+    attribute_data = malloc(sizeof(int));
+    *attribute_data = attrib_data->current_index;
+    H5Awrite(attribute, H5T_NATIVE_INT, attribute_data);
+    H5Aclose(attribute);
+    return NULL;
+}
+
+void cleanup_acreate(void)
+{
+    HDunlink(FILENAME);
+}
+
+#endif /*H5_HAVE_THREADSAFE*/

Added: packages/hdf5/branches/upstream/current/test/ttsafe_cancel.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/ttsafe_cancel.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/ttsafe_cancel.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,211 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/********************************************************************
+ *
+ * Testing thread safety. Thread Cancellation safety
+ * -------------------------------------------------
+ *
+ * The main thread spawns a child to perform a series of dataset writes
+ * to a hdf5 file. The main thread and child thread synchronizes within
+ * a callback function called during a H5Diterate call afterwhich the
+ * main thread attempts to cancel the child thread.
+ *
+ * The cancellation should only work after the child thread has safely
+ * left the H5Diterate call.
+ *
+ * Temporary files generated:
+ *   ttsafe_cancel.h5
+ *
+ * HDF5 APIs exercised in thread:
+ * H5Screate_simple, H5Tcopy, H5Tset_order, H5Dcreate, H5Dclose,
+ * H5Dwrite, H5Dread, H5Diterate, H5Tclose, H5Sclose.
+ *
+ * Created: May 15 2000
+ * Programmer: Chee Wai LEE
+ *
+ * Modification History
+ * --------------------
+ *
+ *	19 May 2000, Bill Wendling
+ *	Changed so that it creates its own HDF5 file and removes it at cleanup
+ *	time.
+ *
+ ********************************************************************/
+#include "ttsafe.h"
+
+#ifdef H5_HAVE_THREADSAFE
+
+#define FILENAME	"ttsafe_cancel.h5"
+#define DATASETNAME	"commonname"
+
+void *tts_cancel_thread(void *);
+void tts_cancel_barrier(void);
+herr_t tts_cancel_callback(void *, hid_t, unsigned, const hsize_t *, void *);
+void cancellation_cleanup(void *);
+
+hid_t cancel_file;
+typedef struct cleanup_struct {
+	hid_t dataset;
+	hid_t datatype;
+	hid_t dataspace;
+} cancel_cleanup_t;
+
+pthread_t childthread;
+pthread_mutex_t mutex;
+pthread_cond_t cond;
+
+void tts_cancel(void)
+{
+    pthread_attr_t attribute;
+    hid_t dataset;
+    int buffer;
+
+    /* make thread scheduling global */
+    pthread_attr_init(&attribute);
+#ifdef H5_HAVE_SYSTEM_SCOPE_THREADS
+    pthread_attr_setscope(&attribute, PTHREAD_SCOPE_SYSTEM);
+#endif /* H5_HAVE_SYSTEM_SCOPE_THREADS */
+
+    /*
+     * Create a hdf5 file using H5F_ACC_TRUNC access, default file
+     * creation plist and default file access plist
+     */
+    cancel_file = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    pthread_create(&childthread, &attribute, tts_cancel_thread, NULL);
+    tts_cancel_barrier();
+    pthread_cancel(childthread);
+
+    dataset = H5Dopen(cancel_file, DATASETNAME);
+    H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &buffer);
+
+    if (buffer != 11)
+        TestErrPrintf("operation unsuccessful with value at %d instead of 11\n", buffer);
+
+    H5Dclose(dataset);
+    H5Fclose(cancel_file);
+
+    /* Destroy the thread attribute */
+    pthread_attr_destroy(&attribute);
+}
+
+void *tts_cancel_thread(void UNUSED *arg)
+{
+    int datavalue;
+    int *buffer;
+    hid_t dataspace, datatype, dataset;
+    hsize_t dimsf[1];	/* dataset dimensions */
+    cancel_cleanup_t *cleanup_structure;
+
+    /* define dataspace for dataset */
+    dimsf[0] = 1;
+    dataspace = H5Screate_simple(1,dimsf,NULL);
+
+    /* define datatype for the data using native little endian integers */
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    H5Tset_order(datatype, H5T_ORDER_LE);
+
+    /* create a new dataset within the file */
+    dataset = H5Dcreate(cancel_file, DATASETNAME, datatype, dataspace, H5P_DEFAULT);
+
+    /* If thread is cancelled, make cleanup call */
+    cleanup_structure = (cancel_cleanup_t*)malloc(sizeof(cancel_cleanup_t));
+    cleanup_structure->dataset = dataset;
+    cleanup_structure->datatype = datatype;
+    cleanup_structure->dataspace = dataspace;
+    pthread_cleanup_push(cancellation_cleanup, cleanup_structure);
+
+    datavalue = 1;
+    H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &datavalue);
+
+    buffer = malloc(sizeof(int));
+    H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buffer);
+    H5Diterate(buffer, H5T_NATIVE_INT, dataspace, tts_cancel_callback, &dataset);
+
+    sleep(3);
+
+    datavalue = 100;
+    H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &datavalue);
+    H5Dclose(dataset);
+    H5Tclose(datatype);
+    H5Sclose(dataspace);
+
+    /*
+     * Required by pthreads. The argument 0 pops the stack but does not
+     * execute the cleanup routine.
+     */
+    pthread_cleanup_pop(0);
+    return NULL;
+}
+
+herr_t tts_cancel_callback(void *elem, hid_t UNUSED type_id, unsigned UNUSED ndim,
+			   const hsize_t UNUSED *point, void *operator_data)
+{
+    int value = *(int *)elem;
+    hid_t dataset = *(hid_t *)operator_data;
+
+    tts_cancel_barrier();
+    sleep(3);
+
+    if (value != 1) {
+        TestErrPrintf("Error! Element value should be 1 and not %d\n", value);
+        return -1;
+    }
+
+    value += 10;
+    H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &value);
+    return 0;
+}
+
+/*
+ * Need to perform the dataset, datatype and dataspace close that was never
+ * performed because of thread cancellation
+ */
+void cancellation_cleanup(void *arg)
+{
+    cancel_cleanup_t *cleanup_structure = (cancel_cleanup_t *)arg;
+    H5Dclose(cleanup_structure->dataset);
+    H5Tclose(cleanup_structure->datatype);
+    H5Sclose(cleanup_structure->dataspace);
+
+    /* retained for debugging */
+    /*  print_func("cancellation noted, cleaning up ... \n"); */
+}
+
+/*
+ * Artificial (and specific to this test) barrier to keep track of whether
+ * both the main and child threads have reached a point in the program.
+ */
+void tts_cancel_barrier(void)
+{
+    static int count = 2;
+
+    pthread_mutex_lock(&mutex);
+
+    if (count != 1) {
+        count--;
+        pthread_cond_wait(&cond, &mutex);
+    } else {
+        pthread_cond_signal(&cond);
+    }
+
+    pthread_mutex_unlock(&mutex);
+}
+
+void cleanup_cancel(void)
+{
+	HDunlink(FILENAME);
+}
+
+#endif /*H5_HAVE_THREADSAFE*/

Added: packages/hdf5/branches/upstream/current/test/ttsafe_dcreate.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/ttsafe_dcreate.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/ttsafe_dcreate.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,198 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/********************************************************************
+ *
+ * Testing thread safety in dataset creation in the HDF5 library
+ * -------------------------------------------------------------
+ *
+ * Set of tests to run multiple threads so that each creates a different
+ * dataset. This is likely to cause race-conditions if run in a non
+ * threadsafe environment.
+ *
+ * Temporary files generated:
+ *   ttsafe_dcreate.h5
+ *
+ * HDF5 APIs exercised in thread:
+ * H5Screate_simple, H5Tcopy, H5Tset_order, H5Dcreate, H5Dwrite, H5Dclose,
+ * H5Tclose, H5Sclose.
+ *
+ * Created: Apr 28 2000
+ * Programmer: Chee Wai LEE
+ *
+ * Modification History
+ * --------------------
+ *
+ *	19 May 2000, Bill Wendling
+ *	Changed so that it creates its own HDF5 file and removes it at cleanup
+ *	time.
+ *
+ ********************************************************************/
+#include "ttsafe.h"
+
+#ifdef H5_HAVE_THREADSAFE
+
+#define FILENAME		"ttsafe_dcreate.h5"
+#define DATASETNAME_LENGTH	10
+#define NUM_THREAD		16
+
+void *tts_dcreate_creator(void *);
+
+typedef struct thread_info {
+	int id;
+	hid_t file;
+	const char *dsetname;
+} thread_info;
+
+/*
+ * Set individual dataset names (rather than generated the names
+ * automatically)
+ */
+const char *dsetname[NUM_THREAD]={
+    "zero",
+    "one",
+    "two",
+    "three",
+    "four",
+    "five",
+    "six",
+    "seven",
+    "eight",
+    "nine",
+    "ten",
+    "eleven",
+    "twelve",
+    "thirteen",
+    "fourteen",
+    "fifteen"
+};
+
+thread_info thread_out[NUM_THREAD];
+
+/*
+ **********************************************************************
+ * Thread safe test - multiple dataset creation
+ **********************************************************************
+ */
+void tts_dcreate(void)
+{
+    /* Pthread definitions */
+    pthread_t threads[NUM_THREAD];
+
+    /* HDF5 data definitions */
+    hid_t file, dataset;
+    int datavalue, i;
+    pthread_attr_t attribute;
+    int ret;
+
+    /* set pthread attribute to perform global scheduling */
+    ret=pthread_attr_init(&attribute);
+    assert(ret==0);
+#ifdef H5_HAVE_SYSTEM_SCOPE_THREADS
+    ret=pthread_attr_setscope(&attribute, PTHREAD_SCOPE_SYSTEM);
+    assert(ret==0);
+#endif /* H5_HAVE_SYSTEM_SCOPE_THREADS */
+
+    /*
+     * Create a hdf5 file using H5F_ACC_TRUNC access, default file
+     * creation plist and default file access plist
+     */
+    file = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    assert(file>=0);
+
+    /* simultaneously create a large number of datasets within the file */
+    for (i = 0; i < NUM_THREAD; i++) {
+        thread_out[i].id = i;
+        thread_out[i].file = file;
+        thread_out[i].dsetname = dsetname[i];
+        ret=pthread_create(&threads[i], NULL, tts_dcreate_creator, &thread_out[i]);
+        assert(ret==0);
+    }
+
+    for (i = 0;i < NUM_THREAD; i++) {
+        ret=pthread_join(threads[i], NULL);
+        assert(ret==0);
+    } /* end for */
+
+    /* compare data to see if it is written correctly */
+
+    for (i = 0; i < NUM_THREAD; i++) {
+        if ((dataset = H5Dopen(file,dsetname[i])) < 0) {
+            TestErrPrintf("Dataset name not found - test failed\n");
+            H5Fclose(file);
+            return;
+        } else {
+            ret=H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &datavalue);
+            assert(ret>=0);
+
+            if (datavalue != i) {
+                TestErrPrintf("Wrong value read %d for dataset name %s - test failed\n",
+                            datavalue, dsetname[i]);
+                H5Dclose(dataset);
+                H5Fclose(file);
+                return;
+            }
+
+            ret=H5Dclose(dataset);
+            assert(ret>=0);
+        }
+    }
+
+    /* close remaining resources */
+    ret=H5Fclose(file);
+    assert(ret>=0);
+
+    /* Destroy the thread attribute */
+    ret=pthread_attr_destroy(&attribute);
+    assert(ret==0);
+}
+
+void *tts_dcreate_creator(void *_thread_data)
+{
+	hid_t   dataspace, dataset;
+        herr_t  ret;
+	hsize_t dimsf[1]; /* dataset dimensions */
+	struct thread_info thread_data;
+
+	memcpy(&thread_data,_thread_data,sizeof(struct thread_info));
+
+	/* define dataspace for dataset */
+	dimsf[0] = 1;
+	dataspace = H5Screate_simple(1,dimsf,NULL);
+        assert(dataspace>=0);
+
+	/* create a new dataset within the file */
+	dataset = H5Dcreate(thread_data.file, thread_data.dsetname,
+			    H5T_NATIVE_INT, dataspace, H5P_DEFAULT);
+        assert(dataset>=0);
+
+	/* initialize data for dataset and write value to dataset */
+	ret=H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL,
+		 H5P_DEFAULT, &thread_data.id);
+        assert(ret>=0);
+
+	/* close dataset and dataspace resources */
+	ret=H5Dclose(dataset);
+        assert(ret>=0);
+	ret=H5Sclose(dataspace);
+        assert(ret>=0);
+
+	return NULL;
+}
+
+void cleanup_dcreate(void)
+{
+	HDunlink(FILENAME);
+}
+#endif /*H5_HAVE_THREADSAFE*/

Added: packages/hdf5/branches/upstream/current/test/ttsafe_error.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/ttsafe_error.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/ttsafe_error.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,204 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/********************************************************************
+ *
+ * Testing thread safety. Deliberate per-thread errors to test error stack
+ * -----------------------------------------------------------------------
+ *
+ * Create 16 multiple threads to create datasets with the same name. The
+ * library should respond with 15 equivalent error stack printouts (one for
+ * each bad thread). The final hdf5 file should be a valid file with one
+ * entry.
+ *
+ * Temporary files generated:
+ *
+ *     ttsafe_error.h5
+ *
+ * HDF5 APIs exercised in thread:
+ *
+ *     H5Screate_simple, H5Tcopy, H5Tset_order, H5Dcreate, H5Dclose,
+ *     H5Tclose, H5Sclose.
+ *
+ * Created: Apr 28 2000
+ * Programmer: Chee Wai LEE
+ *
+ * Modification History
+ * --------------------
+ *
+ * 	19 May 2000, Bill Wendling
+ * 	Modified so that it creates a unique HDF5 file and removes it on
+ * 	cleanup.
+ *
+ ********************************************************************/
+#include "ttsafe.h"
+
+#ifdef H5_HAVE_THREADSAFE
+
+#define NUM_THREAD              16
+#define FILENAME                "ttsafe_error.h5"
+
+/* Having a common dataset name is an error */
+#define DATASETNAME		"commonname"
+#define EXPECTED_ERROR_DEPTH	8
+#define WRITE_NUMBER		37
+
+static herr_t error_callback(void *);
+static herr_t walk_error_callback(int, H5E_error_t *, void *);
+static void *tts_error_thread(void *);
+
+/* Global variables */
+hid_t error_file;
+
+typedef struct err_num_struct {
+	int maj_num;
+	int min_num;
+} err_num_t;
+
+err_num_t expected[] = {
+	{H5E_DATASET, H5E_CANTINIT},
+	{H5E_DATASET, H5E_CANTINIT},
+	{H5E_SYM, H5E_EXISTS},
+	{H5E_SYM, H5E_CANTINSERT},
+	{H5E_SYM, H5E_CANTINSERT},
+	{H5E_BTREE, H5E_CANTINIT},
+	{H5E_BTREE, H5E_CANTINSERT},
+	{H5E_SYM, H5E_CANTINSERT},
+};
+
+int error_flag = 0;
+int error_count = 0;
+pthread_mutex_t error_mutex;
+
+void tts_error(void)
+{
+    pthread_t threads[NUM_THREAD];
+    pthread_attr_t attribute;
+    hid_t dataset;
+    int value, i;
+
+    /* set up mutex for global count of errors */
+    pthread_mutex_init(&error_mutex, NULL);
+
+    /* make thread scheduling global */
+    pthread_attr_init(&attribute);
+#ifdef H5_HAVE_SYSTEM_SCOPE_THREADS
+    pthread_attr_setscope(&attribute, PTHREAD_SCOPE_SYSTEM);
+#endif /* H5_HAVE_SYSTEM_SCOPE_THREADS */
+
+    /*
+     * Create a hdf5 file using H5F_ACC_TRUNC access, default file
+     * creation plist and default file access plist
+     */
+    error_file = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    for (i = 0; i < NUM_THREAD; i++)
+        pthread_create(&threads[i], &attribute, tts_error_thread, NULL);
+
+    for (i = 0; i < NUM_THREAD; i++)
+        pthread_join(threads[i],NULL);
+
+    if (error_flag)
+        TestErrPrintf("Threads reporting different error values!\n");
+
+    if (error_count != NUM_THREAD - 1)
+        TestErrPrintf("Error: %d threads failed instead of %d\n", error_count, NUM_THREAD-1);
+
+    dataset = H5Dopen(error_file, DATASETNAME);
+    H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &value);
+
+    if (value != WRITE_NUMBER)
+        TestErrPrintf("Error: Successful thread wrote value %d instead of %d\n", value, WRITE_NUMBER);
+
+    H5Dclose(dataset);
+    H5Fclose(error_file);
+
+    /* Destroy the thread attribute */
+    pthread_attr_destroy(&attribute);
+}
+
+static
+void *tts_error_thread(void UNUSED *arg)
+{
+    hid_t dataspace, datatype, dataset;
+    hsize_t dimsf[1]; /* dataset dimensions */
+    H5E_auto_t old_error_cb;
+    void *old_error_client_data;
+    int value;
+
+    /* preserve previous error stack handler */
+    H5Eget_auto(&old_error_cb, &old_error_client_data);
+
+    /* set each thread's error stack handler */
+    H5Eset_auto(error_callback, NULL);
+
+    /* define dataspace for dataset */
+    dimsf[0] = 1;
+    dataspace = H5Screate_simple(1,dimsf,NULL);
+
+    /* define datatype for the data using native little endian integers */
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    H5Tset_order(datatype, H5T_ORDER_LE);
+
+    /* create a new dataset within the file */
+    dataset = H5Dcreate(error_file, DATASETNAME, datatype, dataspace, H5P_DEFAULT);
+    if (dataset >= 0) {   /* not an error */
+        value = WRITE_NUMBER;
+        H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &value);
+        H5Dclose(dataset);
+    }
+
+    H5Tclose(datatype);
+    H5Sclose(dataspace);
+
+    /* turn our error stack handler off */
+    H5Eset_auto(old_error_cb, old_error_client_data);
+
+    return NULL;
+}
+
+static
+herr_t error_callback(void *client_data)
+{
+    pthread_mutex_lock(&error_mutex);
+    error_count++;
+    pthread_mutex_unlock(&error_mutex);
+
+    return H5Ewalk(H5E_WALK_DOWNWARD, walk_error_callback, client_data);
+}
+
+static
+herr_t walk_error_callback(int n, H5E_error_t *err_desc, void UNUSED *client_data)
+{
+    int maj_num, min_num;
+
+    if (err_desc) {
+        maj_num = err_desc->maj_num;
+        min_num = err_desc->min_num;
+
+        if (n < EXPECTED_ERROR_DEPTH && maj_num == expected[n].maj_num &&
+                min_num == expected[n].min_num)
+            return SUCCEED;
+    }
+
+    error_flag = -1;
+    return SUCCEED;
+}
+
+void cleanup_error(void)
+{
+    HDunlink(FILENAME);
+}
+
+#endif /*H5_HAVE_THREADSAFE*/

Added: packages/hdf5/branches/upstream/current/test/ttst.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/ttst.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/ttst.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,391 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+   FILE
+       tst.c
+   Test HDF Ternary Search Tree (tst) routines.
+
+   REMARKS
+
+   DESIGN
+
+   BUGS/LIMITATIONS
+
+   EXPORTED ROUTINES
+
+   AUTHOR
+       Quincey Koziol
+
+   MODIFICATION HISTORY
+       12/9/02 - Started coding
+ */
+
+#include <time.h>
+#include <stdlib.h>
+
+#include "testhdf5.h"
+#include "H5STprivate.h"
+
+/* Test words to insert into s TST */
+static const char *words[]={
+    "We", "hold", "these", "truths", "to", "be", "self-evident,", "that",
+    "all", "men", "are", "created", "equal,", "that", "they", "are", "endowed",
+    "by", "their", "Creator", "with", "certain", "unalienable", "Rights,",
+    "that", "among", "these", "are", "Life,", "Liberty", "and", "the",
+    "pursuit", "of", "Happiness."
+};
+/* Number of words in test words set */
+size_t num_words;
+
+/* Number of unique words in test word set */
+size_t num_uniq_words;
+/* Unique words in test word set */
+char **uniq_words;
+/* Randomized order version of words in test word set */
+char **rand_uniq_words;
+/* Sorted order version of words in test word set */
+char **sort_uniq_words;
+
+static int tst_strcmp(const void *_s1, const void *_s2)
+{
+    return(HDstrcmp(*(const char * const *)_s1,*(const char * const *)_s2));
+}
+
+/****************************************************************
+**
+**  test_tst_init(): Test basic H5ST (ternary search tree) selection code.
+**      Initialize data for TST testing
+**
+****************************************************************/
+static void
+test_tst_init(void)
+{
+    time_t curr_time;   /* Current time, for seeding random number generator */
+    char *tmp_word;/* Temporary pointer to word in word set */
+    size_t u,v,w;       /* Local index variables */
+
+    /* Compute the number of words in the test set */
+    num_words=sizeof(words)/sizeof(words[0]);
+
+    /* Determine the number of unique words in test set */
+    /* (Not particularly efficient, be careful if many words are added to set) */
+    num_uniq_words=0;
+    for(u=0; u<num_words; u++) {
+        /* Assume word is unique */
+        num_uniq_words++;
+        for(v=0; v<u; v++)
+            /* If word is already found in words looked at, decrement unique count */
+            if(!HDstrcmp(words[u],words[v])) {
+                num_uniq_words--;
+                break;
+            } /* end if */
+    } /* end for */
+
+    /* Allocate space for the array of unique words */
+    uniq_words=HDmalloc(sizeof(char *)*num_uniq_words);
+
+    /* Allocate space for the array of randomized order unique words also */
+    rand_uniq_words=HDmalloc(sizeof(char *)*num_uniq_words);
+
+    /* Allocate space for the array of sorted order unique words also */
+    sort_uniq_words=HDmalloc(sizeof(char *)*num_uniq_words);
+
+    /* Insert unique words from test set into unique word set */
+    w=0;
+    for(u=0; u<num_words; u++) {
+        /* Assume word is unique */
+        tmp_word=(char *)words[u];
+        for(v=0; v<u; v++)
+            /* If word is already found in words looked at, decrement unique count */
+            if(!HDstrcmp(words[u],words[v])) {
+                tmp_word=NULL;
+                break;
+            } /* end if */
+
+        /* Check if word was actually unique */
+        if(tmp_word!=NULL)
+            uniq_words[w++]=tmp_word;
+    } /* end for */
+
+    /* Create randomized set of unique words */
+    for(u=0; u<num_uniq_words; u++)
+        rand_uniq_words[u]=uniq_words[u];
+    curr_time=HDtime(NULL);
+    HDsrandom((unsigned long)curr_time);
+    for(u=0; u<num_uniq_words; u++) {
+        v=u+(HDrandom()%(num_uniq_words-u));
+        if(u!=v) {
+            tmp_word=rand_uniq_words[u];
+            rand_uniq_words[u]=rand_uniq_words[v];
+            rand_uniq_words[v]=tmp_word;
+        } /* end if */
+    } /* end for */
+
+    /* Create sorted set of unique words */
+    for(u=0; u<num_uniq_words; u++)
+        sort_uniq_words[u]=uniq_words[u];
+    HDqsort(sort_uniq_words,num_uniq_words,sizeof(char *),tst_strcmp);
+} /* end test_tst_init() */
+
+/****************************************************************
+**
+**  test_tst_create(): Test basic H5ST (ternary search tree) selection code.
+**      Tests creating and closing TSTs.
+**
+****************************************************************/
+static void
+test_tst_create(void)
+{
+    H5ST_tree_t *tree;   /* TST created */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Creating & Closing TSTs\n"));
+
+    /* Try closing a NULL tree */
+    tree=NULL;
+    ret=H5ST_close(tree);
+    VERIFY(ret, FAIL, "H5ST_close");
+
+    /* Try creating a TST */
+    tree=H5ST_create();
+    CHECK(tree, NULL, "H5ST_create");
+
+    /* Try closing a real tree */
+    ret=H5ST_close(tree);
+    CHECK(ret, FAIL, "H5ST_close");
+
+} /* end test_tst_create() */
+
+/****************************************************************
+**
+**  test_tst_insert(): Test basic H5ST (ternary search tree) selection code.
+**      Tests inserting key/value pairs into TST
+**
+****************************************************************/
+static void
+test_tst_insert(void)
+{
+    H5ST_tree_t *tree;  /* TST created */
+    H5ST_ptr_t found;   /* Pointer to TST node found */
+    void *obj;          /* Pointer to object located in TST */
+    size_t u;           /* Local index counter */
+    htri_t check;       /* Is string in TST? */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Inserting Values into TSTs\n"));
+
+    /* Create the TST */
+    tree=H5ST_create();
+    CHECK(tree, NULL, "H5ST_create");
+
+    /* Insert unique words into TST, in random order */
+    for(u=0; u<num_uniq_words; u++) {
+        ret=H5ST_insert(tree,rand_uniq_words[u],rand_uniq_words[u]);
+        CHECK(ret, FAIL, "H5ST_insert");
+    } /* end for */
+
+    /* Verify that all words were inserted into TST properly */
+    for(u=0; u<num_uniq_words; u++) {
+        /* Check that the word is present */
+        check=H5ST_search(tree,uniq_words[u]);
+        VERIFY(check, TRUE, "H5ST_search");
+
+        /* Check that the value "payloads" are correct */
+        found=H5ST_find(tree,uniq_words[u]);
+        CHECK(found, NULL, "H5ST_find");
+
+        if(HDstrcmp((const char *)found->eqkid,uniq_words[u]))
+            TestErrPrintf("%d: TST node values don't match!, found->eqkid=%s, uniq_words[%u]=%s\n",__LINE__,(char *)found->eqkid,(unsigned)u,uniq_words[u]);
+
+        obj=H5ST_locate(tree,uniq_words[u]);
+        CHECK(obj, NULL, "H5ST_locate");
+
+        if(HDstrcmp((const char *)obj,uniq_words[u]))
+            TestErrPrintf("%d: TST objects don't match!, obj=%s, uniq_words[%u]=%s\n",__LINE__,(char *)obj,(unsigned)u,uniq_words[u]);
+    } /* end for */
+
+    /* Verify that words not in the TST aren't found */
+    check=H5ST_search(tree,"foo");
+    VERIFY(check, FALSE, "H5ST_search");
+    check=H5ST_search(tree,"bar");
+    VERIFY(check, FALSE, "H5ST_search");
+    check=H5ST_search(tree,"baz");
+    VERIFY(check, FALSE, "H5ST_search");
+
+    /* Close the TST */
+    ret=H5ST_close(tree);
+    CHECK(ret, FAIL, "H5ST_close");
+} /* end test_tst_insert() */
+
+/****************************************************************
+**
+**  test_tst_iterate(): Test basic H5ST (ternary search tree) code.
+**      Tests iterating through key/value pairs in TST
+**
+****************************************************************/
+static void
+test_tst_iterate(void)
+{
+    H5ST_tree_t *tree;  /* TST created */
+    H5ST_ptr_t found;   /* Pointer to TST node found */
+    size_t u;           /* Local index counter */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Iterating Over TSTs\n"));
+
+    /* Create the TST */
+    tree=H5ST_create();
+    CHECK(tree, NULL, "H5ST_create");
+
+    /* Insert unique words into TST, in random order */
+    for(u=0; u<num_uniq_words; u++) {
+        ret=H5ST_insert(tree,rand_uniq_words[u],rand_uniq_words[u]);
+        CHECK(ret, FAIL, "H5ST_insert");
+    } /* end for */
+
+    /* Use findfirst/findnext calls to iterate through TST */
+    found=H5ST_findfirst(tree);
+    CHECK(found, NULL, "H5ST_findfirst");
+    u=0;
+    do {
+        /* Check that the strings in the TST are in the correct order */
+        if(HDstrcmp((const char *)found->eqkid,sort_uniq_words[u]))
+            TestErrPrintf("%d: TST node values don't match!, found->eqkid=%s, sort_uniq_words[%u]=%s\n",__LINE__,(char *)found->eqkid,(unsigned)u,sort_uniq_words[u]);
+
+        /* Advance to next string in TST */
+        found=H5ST_findnext(found);
+        u++;
+    } while(found!=NULL);
+
+    /* Close the TST */
+    ret=H5ST_close(tree);
+    CHECK(ret, FAIL, "H5ST_close");
+} /* end test_tst_iterate() */
+
+/****************************************************************
+**
+**  test_tst_remove(): Test basic H5ST (ternary search tree) code.
+**      Tests removing key/value pairs by string value in TST
+**
+****************************************************************/
+static void
+test_tst_remove(void)
+{
+    H5ST_tree_t *tree;  /* TST created */
+    H5ST_ptr_t found;   /* Pointer to TST node found */
+    void *obj;          /* Pointer to object removed from TST */
+    htri_t check;       /* Is string in TST? */
+    size_t u;           /* Local index counter */
+    herr_t ret;         /* Generic return value */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Removing String Values from TSTs\n"));
+
+    /* Create the TST */
+    tree=H5ST_create();
+    CHECK(tree, NULL, "H5ST_create");
+
+    /* Insert unique words into TST, in random order */
+    for(u=0; u<num_uniq_words; u++) {
+        ret=H5ST_insert(tree,rand_uniq_words[u],rand_uniq_words[u]);
+        CHECK(ret, FAIL, "H5ST_insert");
+    } /* end for */
+
+    /* Remove strings from TST in random order */
+    for(u=0; u<num_uniq_words; u++) {
+        obj=H5ST_remove(tree,rand_uniq_words[u]);
+        CHECK(obj, NULL, "H5ST_remove");
+
+        /* Check that the correct string was removed from TST */
+        if(HDstrcmp((const char *)obj,rand_uniq_words[u]))
+            TestErrPrintf("%d: TST node values don't match!, obj=%s, rand_uniq_words[%u]=%s\n",__LINE__,(char *)obj,(unsigned)u,rand_uniq_words[u]);
+
+        /* Check that the string can't be found in the TST any longer */
+        check=H5ST_search(tree,rand_uniq_words[u]);
+        VERIFY(check, FALSE, "H5ST_search");
+    } /* end for */
+
+    /* Re-insert unique words into TST, in random order */
+    for(u=0; u<num_uniq_words; u++) {
+        ret=H5ST_insert(tree,rand_uniq_words[u],rand_uniq_words[u]);
+        CHECK(ret, FAIL, "H5ST_insert");
+    } /* end for */
+
+    /* Remove TST nodes from TST in random order */
+    for(u=0; u<num_uniq_words; u++) {
+        /* Get the pointer to the node to delete */
+        found=H5ST_find(tree,rand_uniq_words[u]);
+        CHECK(found, NULL, "H5ST_find");
+
+        /* Check that the correct object will be removed from TST */
+        if(HDstrcmp((const char *)found->eqkid,rand_uniq_words[u]))
+            TestErrPrintf("%d: TST node values don't match!, found->eqkid=%s, rand_uniq_words[%u]=%s\n",__LINE__,(char *)found->eqkid,(unsigned)u,rand_uniq_words[u]);
+
+        /* Remove the node */
+        ret=H5ST_delete(tree,found);
+        CHECK(ret, FAIL, "H5ST_delete");
+
+        /* Check that the string can't be found in the TST any longer */
+        check=H5ST_search(tree,rand_uniq_words[u]);
+        VERIFY(check, FALSE, "H5ST_search");
+    } /* end for */
+
+    /* Close the TST */
+    ret=H5ST_close(tree);
+    CHECK(ret, FAIL, "H5ST_close");
+} /* end test_tst_remove() */
+
+/****************************************************************
+**
+**  test_tst_finalize(): Test basic H5ST (ternary search tree) selection code.
+**      Wrap up data for TST testing
+**
+****************************************************************/
+static void
+test_tst_finalize(void)
+{
+    /* Release memory for unordered, randomized and sorted order unique words */
+    HDfree(uniq_words);
+    HDfree(rand_uniq_words);
+    HDfree(sort_uniq_words);
+} /* end test_tst_finalize() */
+
+/****************************************************************
+**
+**  test_tst(): Main H5ST selection testing routine.
+**
+****************************************************************/
+void
+test_tst(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Ternary Search Trees\n"));
+
+    /* Initialize TST testing data */
+    test_tst_init();
+
+    /* Actual TST tests */
+    test_tst_create();          /* Test TST creation */
+    test_tst_insert();          /* Test TST insertion */
+    test_tst_iterate();         /* Test TST iteration */
+    test_tst_remove();          /* Test TST deletion */
+
+    /* Finalize TST testing data */
+    test_tst_finalize();
+}   /* end test_tst() */
+

Added: packages/hdf5/branches/upstream/current/test/tvlstr.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/tvlstr.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/tvlstr.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,888 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/***********************************************************
+*
+* Test program:	 tvlstr
+*
+* Test the Variable-Length String functionality
+*
+*************************************************************/
+
+#ifdef WIN32
+#include <stdio.h>
+#endif
+
+#include "testhdf5.h"
+
+#include "hdf5.h"
+
+#define DATAFILE   "tvlstr.h5"
+#define DATAFILE2  "tvlstr2.h5"
+
+/* 1-D dataset with fixed dimensions */
+#define SPACE1_NAME  "Space1"
+#define SPACE1_RANK	1
+#define SPACE1_DIM1	4
+
+/* 2-D dataset with fixed dimensions */
+#define SPACE2_NAME  "Space2"
+#define SPACE2_RANK	2
+#define SPACE2_DIM1	10
+#define SPACE2_DIM2	10
+
+#define VLSTR_TYPE      "vl_string_type"
+
+/* Definitions for the VL re-writing test */
+#define REWRITE_NDATASETS       32
+
+/* String for testing attributes */
+static const char *string_att = "This is the string for the attribute";
+static char *string_att_write=NULL;
+
+void *test_vlstr_alloc_custom(size_t size, void *info);
+void test_vlstr_free_custom(void *mem, void *info);
+
+/****************************************************************
+**
+**  test_vlstr_alloc_custom(): Test VL datatype custom memory
+**      allocation routines.  This routine just uses malloc to
+**      allocate the memory and increments the amount of memory
+**      allocated.
+**
+****************************************************************/
+void *test_vlstr_alloc_custom(size_t size, void *info)
+{
+    void *ret_value=NULL;       /* Pointer to return */
+    int *mem_used=(int *)info;  /* Get the pointer to the memory used */
+    size_t extra;               /* Extra space needed */
+
+    /*
+     *  This weird contortion is required on the DEC Alpha to keep the
+     *  alignment correct - QAK
+     */
+    extra=MAX(sizeof(void *),sizeof(size_t));
+
+    if((ret_value=HDmalloc(extra+size))!=NULL) {
+        *(size_t *)ret_value=size;
+        *mem_used+=size;
+    } /* end if */
+    ret_value=((unsigned char *)ret_value)+extra;
+    return(ret_value);
+}
+
+/****************************************************************
+**
+**  test_vlstr_free_custom(): Test VL datatype custom memory
+**      allocation routines.  This routine just uses free to
+**      release the memory and decrements the amount of memory
+**      allocated.
+**
+****************************************************************/
+void test_vlstr_free_custom(void *_mem, void *info)
+{
+    unsigned char *mem;
+    int *mem_used=(int *)info;  /* Get the pointer to the memory used */
+    size_t extra;               /* Extra space needed */
+
+    /*
+     *  This weird contortion is required on the DEC Alpha to keep the
+     *  alignment correct - QAK
+     */
+    extra=MAX(sizeof(void *),sizeof(size_t));
+
+    if(_mem!=NULL) {
+        mem=((unsigned char *)_mem)-extra;
+        *mem_used-=*(size_t *)mem;
+        HDfree(mem);
+    } /* end if */
+}
+
+/****************************************************************
+**
+**  test_vlstrings_basic(): Test basic VL string code.
+**      Tests simple VL string I/O
+**
+****************************************************************/
+static void
+test_vlstrings_basic(void)
+{
+    const char *wdata[SPACE1_DIM1]= {
+        "Four score and seven years ago our forefathers brought forth on this continent a new nation,",
+        "conceived in liberty and dedicated to the proposition that all men are created equal.",
+        "Now we are engaged in a great civil war,",
+        "testing whether that nation or any nation so conceived and so dedicated can long endure."
+        };   /* Information to write */
+    char *rdata[SPACE1_DIM1];   /* Information read in */
+    char *wdata2;
+    hid_t dataspace, dataset2;
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1;       /* Datatype ID			*/
+    hid_t       xfer_pid;   /* Dataset transfer property list ID */
+    hsize_t		dims1[] = {SPACE1_DIM1};
+    hsize_t     size;       /* Number of bytes which will be used */
+    unsigned       i;          /* counting variable */
+    int         str_used;   /* String data in memory */
+    int         mem_used=0; /* Memory used during allocation */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic VL String Functionality\n"));
+
+    /* Create file */
+    fid1 = H5Fcreate(DATAFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tcopy (H5T_C_S1);
+    CHECK(tid1, FAIL, "H5Tcopy");
+
+    ret = H5Tset_size (tid1,H5T_VARIABLE);
+    CHECK(ret, FAIL, "H5Tset_size");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    dataspace = H5Screate(H5S_SCALAR);
+
+    dataset2=H5Dcreate(fid1,"Dataset2",tid1,dataspace,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    wdata2 = (char*)HDcalloc(65534, sizeof(char));
+    HDmemset(wdata2, 'A', 65533);
+
+    ret=H5Dwrite(dataset2,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,&wdata2);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    H5Sclose(dataspace);
+    H5Dclose(dataset2);
+    HDfree(wdata2);
+
+    /* Change to the custom memory allocation routines for reading VL string */
+    xfer_pid=H5Pcreate(H5P_DATASET_XFER);
+    CHECK(xfer_pid, FAIL, "H5Pcreate");
+
+    ret=H5Pset_vlen_mem_manager(xfer_pid,test_vlstr_alloc_custom,&mem_used,test_vlstr_free_custom,&mem_used);
+    CHECK(ret, FAIL, "H5Pset_vlen_mem_manager");
+
+    /* Make certain the correct amount of memory will be used */
+    ret=H5Dvlen_get_buf_size(dataset,tid1,sid1,&size);
+    CHECK(ret, FAIL, "H5Dvlen_get_buf_size");
+
+    /* Count the actual number of bytes used by the strings */
+    for(i=0,str_used=0; i<SPACE1_DIM1; i++)
+        str_used+=HDstrlen(wdata[i])+1;
+
+    /* Compare against the strings actually written */
+    VERIFY(size,(hsize_t)str_used,"H5Dvlen_get_buf_size");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Make certain the correct amount of memory has been used */
+    VERIFY(mem_used,str_used,"H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(HDstrlen(wdata[i])!=strlen(rdata[i])) {
+            TestErrPrintf("VL data length don't match!, strlen(wdata[%d])=%d, strlen(rdata[%d])=%d\n",(int)i,(int)strlen(wdata[i]),(int)i,(int)strlen(rdata[i]));
+            continue;
+        } /* end if */
+        if( HDstrcmp(wdata[i],rdata[i]) != 0 ) {
+            TestErrPrintf("VL data values don't match!, wdata[%d]=%s, rdata[%d]=%s\n",(int)i,wdata[i],(int)i,rdata[i]);
+            continue;
+        } /* end if */
+    } /* end for */
+
+    /* Reclaim the read VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Make certain the VL memory has been freed */
+    VERIFY(mem_used,0,"H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset transfer property list */
+    ret = H5Pclose(xfer_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_vlstrings_basic() */
+
+/****************************************************************
+**
+**  test_vlstrings_special(): Test VL string code for special
+**      string cases, nil and zero-sized.
+**
+****************************************************************/
+static void
+test_vlstrings_special(void)
+{
+    const char *wdata[SPACE1_DIM1] = {"one", "two", "", "four"};
+    const char *wdata2[SPACE1_DIM1] = {NULL, NULL, NULL, NULL};
+    char *rdata[SPACE1_DIM1];   /* Information read in */
+    char *fill;                 /* Fill value */
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1;       /* Datatype ID			*/
+    hid_t		dcpl;       /* Dataset creation property list ID */
+    hsize_t		dims1[] = {SPACE1_DIM1};
+    unsigned       i;          /* counting variable */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Special VL Strings\n"));
+
+    /* Create file */
+    fid1 = H5Fcreate(DATAFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tcopy (H5T_C_S1);
+    CHECK(tid1, FAIL, "H5Tcopy");
+
+    ret = H5Tset_size (tid1,H5T_VARIABLE);
+    CHECK(ret, FAIL, "H5Tset_size");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset3",tid1,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Read from dataset before writing data */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check data read in */
+    for(i=0; i<SPACE1_DIM1; i++)
+        if(rdata[i]!=NULL)
+            TestErrPrintf("VL doesn't match!, rdata[%d]=%p\n",(int)i,rdata[i]);
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(HDstrlen(wdata[i])!=strlen(rdata[i])) {
+            TestErrPrintf("VL data length don't match!, strlen(wdata[%d])=%d, strlen(rdata[%d])=%d\n",(int)i,(int)strlen(wdata[i]),(int)i,(int)strlen(rdata[i]));
+            continue;
+        } /* end if */
+        if( HDstrcmp(wdata[i],rdata[i]) != 0 ) {
+            TestErrPrintf("VL data values don't match!, wdata[%d]=%s, rdata[%d]=%s\n",(int)i,wdata[i],(int)i,rdata[i]);
+            continue;
+        } /* end if */
+    } /* end for */
+
+    /* Reclaim the read VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Create another dataset to test nil strings */
+    dcpl=H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(dcpl, FAIL, "H5Pcreate");
+
+    /* Set the fill value for the second dataset */
+    fill=NULL;
+    ret=H5Pset_fill_value(dcpl, tid1, &fill);
+    CHECK(ret, FAIL, "H5Pset_fill_value");
+
+    dataset=H5Dcreate(fid1,"Dataset4",tid1,sid1,dcpl);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Close dataset creation property list */
+    ret = H5Pclose(dcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Read from dataset before writing data */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check data read in */
+    for(i=0; i<SPACE1_DIM1; i++)
+        if(rdata[i]!=NULL)
+            TestErrPrintf("VL doesn't match!, rdata[%d]=%p\n",(int)i,rdata[i]);
+
+    /* Try to write nil strings to disk. */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata2);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read nil strings back from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check data read in */
+    for(i=0; i<SPACE1_DIM1; i++)
+        if(rdata[i]!=NULL)
+            TestErrPrintf("VL doesn't match!, rdata[%d]=%p\n",(int)i,rdata[i]);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}
+
+/****************************************************************
+**
+**  test_vlstring_type(): Test VL string type.
+**      Tests if VL string is treated as string.
+**
+****************************************************************/
+static void test_vlstring_type(void)
+{
+    hid_t               fid;           /* HDF5 File IDs                */
+    hid_t               tid_vlstr;
+    H5T_cset_t          cset;
+    H5T_str_t           pad;
+    herr_t              ret;
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing VL String type\n"));
+
+    /* Open file */
+    fid = H5Fopen(DATAFILE, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fopen");
+
+    /* Create a datatype to refer to */
+    tid_vlstr = H5Tcopy(H5T_C_S1);
+    CHECK(tid_vlstr, FAIL, "H5Tcopy");
+
+    /* Change padding and verify it */
+    ret = H5Tset_strpad(tid_vlstr, H5T_STR_NULLPAD);
+    CHECK(ret, FAIL, "H5Tset_strpad");
+    pad = H5Tget_strpad(tid_vlstr);
+    VERIFY(pad, H5T_STR_NULLPAD, "H5Tget_strpad");
+
+    /* Convert to variable-length string */
+    ret = H5Tset_size(tid_vlstr, H5T_VARIABLE);
+    CHECK(ret, FAIL, "H5Tset_size");
+
+    /* Check if datatype is VL string */
+    ret = H5Tget_class(tid_vlstr);
+    VERIFY(ret, H5T_STRING, "H5Tget_class");
+    ret = H5Tis_variable_str(tid_vlstr);
+    VERIFY(ret, TRUE, "H5Tis_variable_str");
+
+    /* Check default character set and padding */
+    cset = H5Tget_cset(tid_vlstr);
+    VERIFY(cset, H5T_CSET_ASCII, "H5Tget_cset");
+    pad = H5Tget_strpad(tid_vlstr);
+    VERIFY(pad, H5T_STR_NULLPAD, "H5Tget_strpad");
+
+    /* Commit variable-length string datatype to storage */
+    ret = H5Tcommit(fid, VLSTR_TYPE, tid_vlstr);
+    CHECK(ret, FAIL, "H5Tcommit");
+
+    /* Close datatype */
+    ret = H5Tclose(tid_vlstr);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    tid_vlstr = H5Topen(fid, VLSTR_TYPE);
+    CHECK(tid_vlstr, FAIL, "H5Topen");
+
+    ret = H5Tclose(tid_vlstr);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    fid = H5Fopen(DATAFILE, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid, FAIL, "H5Fopen");
+
+    /* Open the variable-length string datatype just created */
+    tid_vlstr = H5Topen(fid, VLSTR_TYPE);
+    CHECK(tid_vlstr, FAIL, "H5Topen");
+
+    /* Verify character set and padding */
+    cset = H5Tget_cset(tid_vlstr);
+    VERIFY(cset, H5T_CSET_ASCII, "H5Tget_cset");
+    pad = H5Tget_strpad(tid_vlstr);
+    VERIFY(pad, H5T_STR_NULLPAD, "H5Tget_strpad");
+
+    /* Close datatype and file */
+    ret = H5Tclose(tid_vlstr);
+    CHECK(ret, FAIL, "H5Tclose");
+    ret = H5Fclose(fid);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_vlstring_type() */
+
+/****************************************************************
+**
+**  test_compact_vlstring(): Test code for storing VL strings in
+**      compact datasets.
+**
+****************************************************************/
+static void
+test_compact_vlstring(void)
+{
+    const char *wdata[SPACE1_DIM1] = {"one", "two", "three", "four"};
+    char *rdata[SPACE1_DIM1];   /* Information read in */
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1;       /* Datatype ID			*/
+    hid_t		plist;      /* Dataset creation property list	*/
+    hsize_t		dims1[] = {SPACE1_DIM1};
+    unsigned       i;          /* counting variable */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing VL Strings in compact dataset\n"));
+
+    /* Create file */
+    fid1 = H5Fcreate(DATAFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tcopy (H5T_C_S1);
+    CHECK(tid1, FAIL, "H5Tcopy");
+
+    ret = H5Tset_size (tid1,H5T_VARIABLE);
+    CHECK(ret, FAIL, "H5Tset_size");
+
+    plist = H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(plist, FAIL, "H5Pcreate");
+
+    ret = H5Pset_layout(plist, H5D_COMPACT);
+    CHECK(ret, FAIL, "H5Pset_layout");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset5",tid1,sid1,plist);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(HDstrlen(wdata[i])!=strlen(rdata[i])) {
+            TestErrPrintf("VL data length don't match!, strlen(wdata[%d])=%d, strlen(rdata[%d])=%d\n",(int)i,(int)strlen(wdata[i]),(int)i,(int)strlen(rdata[i]));
+            continue;
+        } /* end if */
+        if( HDstrcmp(wdata[i],rdata[i]) != 0 ) {
+            TestErrPrintf("VL data values don't match!, wdata[%d]=%s, rdata[%d]=%s\n",(int)i,wdata[i],(int)i,rdata[i]);
+            continue;
+        } /* end if */
+    } /* end for */
+
+    /* Reclaim the read VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset create property list */
+    ret = H5Pclose(plist);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+} /*test_compact_vlstrings*/
+
+/****************************************************************
+**
+**  test_write_vl_string_attribute(): Test basic VL string code.
+**      Tests writing VL strings as attributes
+**
+****************************************************************/
+static void test_write_vl_string_attribute(void)
+{
+    hid_t file, root, dataspace, att;
+    hid_t type;
+    herr_t ret;
+    char *string_att_check;
+
+    /* Open the file */
+    file = H5Fopen(DATAFILE, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fopen");
+
+    /* Create a datatype to refer to. */
+    type = H5Tcopy (H5T_C_S1);
+    CHECK(type, FAIL, "H5Tcopy");
+
+    ret = H5Tset_size (type, H5T_VARIABLE);
+    CHECK(ret, FAIL, "H5Tset_size");
+
+    root = H5Gopen(file, "/");
+    CHECK(root, FAIL, "H5Gopen");
+
+    dataspace = H5Screate(H5S_SCALAR);
+    CHECK(dataspace, FAIL, "H5Screate");
+
+    /* Test creating a "normal" sized string attribute */
+    att = H5Acreate(root, "test_scalar", type, dataspace, H5P_DEFAULT);
+    CHECK(att, FAIL, "H5Acreate");
+
+    ret = H5Awrite(att, type, &string_att);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    ret = H5Aread(att, type, &string_att_check);
+    CHECK(ret, FAIL, "H5Aread");
+
+    if(HDstrcmp(string_att_check,string_att)!=0)
+        TestErrPrintf("VL string attributes don't match!, string_att=%s, string_att_check=%s\n",string_att,string_att_check);
+
+    HDfree(string_att_check);
+
+    ret = H5Aclose(att);
+    CHECK(ret, FAIL, "HAclose");
+
+    /* Test creating a "large" sized string attribute */
+    att = H5Acreate(root, "test_scalar_large", type, dataspace, H5P_DEFAULT);
+    CHECK(att, FAIL, "H5Acreate");
+
+    string_att_write = (char*)HDcalloc(8192, sizeof(char));
+    HDmemset(string_att_write, 'A', 8191);
+
+    ret = H5Awrite(att, type, &string_att_write);
+    CHECK(ret, FAIL, "H5Awrite");
+
+    ret = H5Aread(att, type, &string_att_check);
+    CHECK(ret, FAIL, "H5Aread");
+
+    if(HDstrcmp(string_att_check,string_att_write)!=0)
+        TestErrPrintf("VL string attributes don't match!, string_att_write=%s, string_att_check=%s\n",string_att_write,string_att_check);
+
+    HDfree(string_att_check);
+    /* The attribute string written is freed below, in the test_read_vl_string_attribute() test */
+    /* HDfree(string_att_write); */
+
+    ret = H5Aclose(att);
+    CHECK(ret, FAIL, "HAclose");
+
+    ret = H5Gclose(root);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Tclose(type);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    ret = H5Sclose(dataspace);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    return;
+}
+
+/****************************************************************
+**
+**  test_read_vl_string_attribute(): Test basic VL string code.
+**      Tests reading VL strings from attributes
+**
+****************************************************************/
+static void test_read_vl_string_attribute(void)
+{
+    hid_t file, root, att;
+    hid_t type;
+    herr_t ret;
+    char *string_att_check;
+
+    /* Open file */
+    file = H5Fopen(DATAFILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(file, FAIL, "H5Fopen");
+
+    /* Create a datatype to refer to. */
+    type = H5Tcopy (H5T_C_S1);
+    CHECK(type, FAIL, "H5Tcopy");
+
+    ret = H5Tset_size (type, H5T_VARIABLE);
+    CHECK(ret, FAIL, "H5Tset_size");
+
+    root = H5Gopen(file, "/");
+    CHECK(root, FAIL, "H5Gopen");
+
+    /* Test reading "normal" sized string attribute */
+    att = H5Aopen_name(root, "test_scalar");
+    CHECK(att, FAIL, "H5Aopen_name");
+
+    ret = H5Aread(att, type, &string_att_check);
+    CHECK(ret, FAIL, "H5Aread");
+
+    if(HDstrcmp(string_att_check,string_att)!=0)
+        TestErrPrintf("VL string attributes don't match!, string_att=%s, string_att_check=%s\n",string_att,string_att_check);
+
+    HDfree(string_att_check);
+
+    ret = H5Aclose(att);
+    CHECK(ret, FAIL, "HAclose");
+
+    /* Test reading "large" sized string attribute */
+    att = H5Aopen_name(root, "test_scalar_large");
+    CHECK(att, FAIL, "H5Aopen_name");
+
+    ret = H5Aread(att, type, &string_att_check);
+    CHECK(ret, FAIL, "H5Aread");
+
+    if(HDstrcmp(string_att_check,string_att_write)!=0)
+        TestErrPrintf("VL string attributes don't match!, string_att_write=%s, string_att_check=%s\n",string_att_write,string_att_check);
+
+    HDfree(string_att_check);
+    HDfree(string_att_write);   /* Free string allocated in test_write_vl_string_attribute */
+
+    ret = H5Aclose(att);
+    CHECK(ret, FAIL, "HAclose");
+
+    ret = H5Tclose(type);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    ret = H5Gclose(root);
+    CHECK(ret, FAIL, "H5Gclose");
+
+    ret = H5Fclose(file);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    return;
+}
+
+/* Helper routine for test_vl_rewrite() */
+static void write_scalar_dset(hid_t file, hid_t type, hid_t space, char *name, char *data)
+{
+      hid_t dset;
+      herr_t ret;
+
+      dset = H5Dcreate (file, name, type, space, H5P_DEFAULT);
+      CHECK(dset, FAIL, "H5Dcreate");
+
+      ret = H5Dwrite(dset, type, space, space, H5P_DEFAULT, &data);
+      CHECK(ret, FAIL, "H5Dwrite");
+
+      ret = H5Dclose(dset);
+      CHECK(ret, FAIL, "H5Dclose");
+}
+
+/* Helper routine for test_vl_rewrite() */
+static void read_scalar_dset(hid_t file, hid_t type, hid_t space, char *name, char *data)
+{
+    hid_t dset;
+    herr_t ret;
+    char *data_read;
+
+    dset = H5Dopen (file, name);
+    CHECK(dset, FAIL, "H5Dopen");
+
+    ret = H5Dread(dset, type, space, space, H5P_DEFAULT, &data_read);
+    CHECK(ret, FAIL, "H5Dread");
+
+    ret = H5Dclose(dset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    if(HDstrcmp(data, data_read))
+        TestErrPrintf("Expected %s for dataset %s but read %s\n", data, name, data_read);
+
+    HDfree(data_read);
+}
+
+/****************************************************************
+**
+**  test_vl_rewrite(): Test basic VL string code.
+**      Tests I/O on VL strings when lots of objects in the file
+**      have been linked/unlinked.
+**
+****************************************************************/
+static void test_vl_rewrite(void)
+{
+    hid_t file1, file2; /* File IDs */
+    hid_t type;         /* VL string datatype ID */
+    hid_t space;        /* Scalar dataspace */
+    char name[256];     /* Buffer for names & data */
+    int i;              /* Local index variable */
+    herr_t ret;         /* Generic return value */
+
+    /* Create the VL string datatype */
+    type = H5Tcopy(H5T_C_S1);
+    CHECK(type, FAIL, "H5Tcopy");
+
+    ret = H5Tset_size(type, H5T_VARIABLE);
+    CHECK(ret, FAIL, "H5Tset_size");
+
+    /* Create the scalar dataspace */
+    space = H5Screate(H5S_SCALAR);
+    CHECK(space, FAIL, "H5Screate");
+
+    /* Open the files */
+    file1 = H5Fcreate(DATAFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file1, FAIL, "H5Fcreate");
+
+    file2 = H5Fcreate(DATAFILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(file1, FAIL, "H5Fcreate");
+
+    /* Create in file 1 */
+    for(i=0; i<REWRITE_NDATASETS; i++) {
+        sprintf(name, "/set_%d", i);
+        write_scalar_dset(file1, type, space, name, name);
+    }
+
+    /* Effectively copy data from file 1 to 2 */
+    for(i=0; i<REWRITE_NDATASETS; i++) {
+        sprintf(name, "/set_%d", i);
+        read_scalar_dset(file1, type, space, name, name);
+        write_scalar_dset(file2, type, space, name, name);
+    }
+
+    /* Read back from file 2 */
+    for(i=0; i<REWRITE_NDATASETS; i++) {
+        sprintf(name, "/set_%d", i);
+        read_scalar_dset(file2, type, space, name, name);
+    }
+
+    /* Remove from file 2. */
+    for(i=0; i<REWRITE_NDATASETS; i++) {
+        sprintf(name, "/set_%d", i);
+        ret = H5Gunlink(file2, name);
+        CHECK(ret, FAIL, "H5Gunlink");
+    }
+
+    /* Effectively copy from file 1 to file 2 */
+    for(i=0; i<REWRITE_NDATASETS; i++) {
+        sprintf(name, "/set_%d", i);
+        read_scalar_dset(file1, type, space, name, name);
+        write_scalar_dset(file2, type, space, name, name);
+    }
+
+    /* Close everything */
+    ret = H5Tclose(type);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    ret = H5Sclose(space);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    ret = H5Fclose(file1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    ret = H5Fclose(file2);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    return;
+} /* end test_vl_rewrite() */
+
+/****************************************************************
+**
+**  test_vlstrings(): Main VL string testing routine.
+**
+****************************************************************/
+void
+test_vlstrings(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Variable-Length Strings\n"));
+
+    /* These tests use the same file */
+    /* Test basic VL string datatype */
+    test_vlstrings_basic();
+    test_vlstrings_special();
+    test_vlstring_type();
+    test_compact_vlstring();
+
+    /* Test using VL strings in attributes */
+    test_write_vl_string_attribute();
+    test_read_vl_string_attribute();
+
+    /* Test writing VL datasets in files with lots of unlinking */
+    test_vl_rewrite();
+}   /* test_vlstrings() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_vlstrings
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Quincey Koziol
+ *              September 10, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_vlstrings(void)
+{
+    HDremove(DATAFILE);
+    HDremove(DATAFILE2);
+}
+

Added: packages/hdf5/branches/upstream/current/test/tvltypes.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/tvltypes.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/tvltypes.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2076 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/***********************************************************
+*
+* Test program:	 tvltypes
+*
+* Test the Variable-Length Datatype functionality
+*
+*************************************************************/
+
+#include "testhdf5.h"
+
+#include "hdf5.h"
+
+#define FILENAME   "tvltypes.h5"
+
+/* 1-D dataset with fixed dimensions */
+#define SPACE1_RANK	1
+#define SPACE1_DIM1     4
+
+/* 2-D dataset with fixed dimensions */
+#define SPACE2_RANK	2
+#define SPACE2_DIM1	10
+#define SPACE2_DIM2	10
+
+/* 1-D dataset with fixed dimensions */
+#define SPACE3_RANK	1
+#define SPACE3_DIM1     128
+#define L1_INCM         16
+#define L2_INCM         8
+
+void *test_vltypes_alloc_custom(size_t size, void *info);
+void test_vltypes_free_custom(void *mem, void *info);
+
+/****************************************************************
+**
+**  test_vltypes_alloc_custom(): Test VL datatype custom memory
+**      allocation routines.  This routine just uses malloc to
+**      allocate the memory and increments the amount of memory
+**      allocated.
+**
+****************************************************************/
+void *test_vltypes_alloc_custom(size_t size, void *info)
+{
+    void *ret_value=NULL;       /* Pointer to return */
+    size_t *mem_used=(size_t *)info;  /* Get the pointer to the memory used */
+    size_t extra;               /* Extra space needed */
+
+    /*
+     *  This weird contortion is required on the DEC Alpha to keep the
+     *  alignment correct - QAK
+     */
+    extra=MAX(sizeof(void *),sizeof(size_t));
+
+    if((ret_value=HDmalloc(extra+size))!=NULL) {
+        *(size_t *)ret_value=size;
+        *mem_used+=size;
+    } /* end if */
+    ret_value=((unsigned char *)ret_value)+extra;
+    return(ret_value);
+}
+
+/****************************************************************
+**
+**  test_vltypes_free_custom(): Test VL datatype custom memory
+**      allocation routines.  This routine just uses free to
+**      release the memory and decrements the amount of memory
+**      allocated.
+**
+****************************************************************/
+void test_vltypes_free_custom(void *_mem, void *info)
+{
+    unsigned char *mem;
+    size_t *mem_used=(size_t *)info;  /* Get the pointer to the memory used */
+    size_t extra;               /* Extra space needed */
+
+    /*
+     *  This weird contortion is required on the DEC Alpha to keep the
+     *  alignment correct - QAK
+     */
+    extra=MAX(sizeof(void *),sizeof(size_t));
+
+    if(_mem!=NULL) {
+        mem=((unsigned char *)_mem)-extra;
+        *mem_used-=*(size_t *)mem;
+        HDfree(mem);
+    } /* end if */
+}
+
+/****************************************************************
+**
+**  test_vltypes_data_create(): Dataset of VL is supposed to
+**      fail when fill value is never written to dataset.
+**
+****************************************************************/
+static void
+test_vltypes_dataset_create(void)
+{
+    hid_t               fid1;           /* HDF5 File IDs                */
+    hid_t		dcpl;		/* Dataset Property list	*/
+    hid_t               dataset;        /* Dataset ID                   */
+    hsize_t             dims1[] = {SPACE1_DIM1};
+    hid_t               sid1;       /* Dataspace ID                     */
+    hid_t               tid1;       /* Datatype ID                      */
+    herr_t              ret;            /* Generic return value         */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Dataset of VL Datatype Functionality\n"));
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tvlen_create (H5T_NATIVE_UINT);
+    CHECK(tid1, FAIL, "H5Tvlen_create");
+
+    /* Create dataset property list */
+    dcpl=H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(dcpl, FAIL, "H5Pcreate");
+
+    /* Set fill value writting time to be NEVER */
+    ret=H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER);
+    CHECK(ret, FAIL, "H5Pset_fill_time");
+
+    /* Create a dataset, supposed to fail */
+    H5E_BEGIN_TRY {
+    	dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,dcpl);
+    } H5E_END_TRY;
+    VERIFY(dataset, FAIL, "H5Dcreate");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset transfer property list */
+    ret = H5Pclose(dcpl);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+}
+
+/****************************************************************
+**
+**  test_vltypes_vlen_atomic(): Test basic VL datatype code.
+**      Tests VL datatypes of atomic datatypes
+**
+****************************************************************/
+static void
+test_vltypes_vlen_atomic(void)
+{
+    hvl_t wdata[SPACE1_DIM1];   /* Information to write */
+    hvl_t wdata2[SPACE1_DIM1];  /* Information to write */
+    hvl_t rdata[SPACE1_DIM1];   /* Information read in */
+    hvl_t fill;                 /* Fill value */
+    hid_t fid1;		/* HDF5 File IDs		*/
+    hid_t dataset;	/* Dataset ID			*/
+    hid_t sid1;         /* Dataspace ID			*/
+    hid_t sid2;         /* ID of bad dataspace (no extent set) */
+    hid_t tid1;         /* Datatype ID			*/
+    hid_t dcpl_pid;     /* Dataset creation property list ID */
+    hid_t xfer_pid;     /* Dataset transfer property list ID */
+    hsize_t dims1[] = {SPACE1_DIM1};
+    hsize_t size;       /* Number of bytes which will be used */
+    unsigned i,j;       /* counting variables */
+    size_t mem_used=0;  /* Memory used during allocation */
+    herr_t ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Atomic VL Datatype Functionality\n"));
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        wdata[i].p=HDmalloc((i+1)*sizeof(unsigned int));
+        wdata[i].len=i+1;
+        for(j=0; j<(i+1); j++)
+            ((unsigned int *)wdata[i].p)[j]=i*10+j;
+
+        wdata2[i].p=NULL;
+        wdata2[i].len=0;
+    } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tvlen_create (H5T_NATIVE_UINT);
+    CHECK(tid1, FAIL, "H5Tvlen_create");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Read from dataset before writing data */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check data read in */
+    for(i=0; i<SPACE1_DIM1; i++)
+        if(rdata[i].len!=0 || rdata[i].p!=NULL)
+            TestErrPrintf("VL doesn't match!, rdata[%d].len=%u, rdata[%d].p=%p\n",(int)i,(unsigned)rdata[i].len,(int)i,rdata[i].p);
+
+    /* Write "nil" data to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata2);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read from dataset with "nil" data */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check data read in */
+    for(i=0; i<SPACE1_DIM1; i++)
+        if(rdata[i].len!=0 || rdata[i].p!=NULL)
+            TestErrPrintf("VL doesn't match!, rdata[%d].len=%u, rdata[%d].p=%p\n",(int)i,(unsigned)rdata[i].len,(int)i,rdata[i].p);
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Create second dataset, with fill value */
+    dcpl_pid=H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(dcpl_pid, FAIL, "H5Pcreate");
+
+    /* Set the fill value for the second dataset */
+    fill.p=NULL; fill.len=0;
+    ret=H5Pset_fill_value(dcpl_pid, tid1, &fill);
+    CHECK(ret, FAIL, "H5Pset_fill_value");
+
+    /* Create a second dataset */
+    dataset=H5Dcreate(fid1,"Dataset2",tid1,sid1,dcpl_pid);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Close dataset creation property list */
+    ret = H5Pclose(dcpl_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Read from dataset before writing data */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check data read in */
+    for(i=0; i<SPACE1_DIM1; i++)
+        if(rdata[i].len!=0 || rdata[i].p!=NULL)
+            TestErrPrintf("VL doesn't match!, rdata[%d].len=%u, rdata[%d].p=%p\n",(int)i,(unsigned)rdata[i].len,(int)i,rdata[i].p);
+
+    /* Write "nil" data to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata2);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read from dataset with "nil" data */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check data read in */
+    for(i=0; i<SPACE1_DIM1; i++)
+        if(rdata[i].len!=0 || rdata[i].p!=NULL)
+            TestErrPrintf("VL doesn't match!, rdata[%d].len=%u, rdata[%d].p=%p\n",(int)i,(unsigned)rdata[i].len,(int)i,rdata[i].p);
+
+    /* Write data to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Open the file for data checking */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open a dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Get dataspace for datasets */
+    sid1 = H5Dget_space(dataset);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    /* Get datatype for dataset */
+    tid1 = H5Dget_type(dataset);
+    CHECK(tid1, FAIL, "H5Dget_type");
+
+    /* Change to the custom memory allocation routines for reading VL data */
+    xfer_pid=H5Pcreate(H5P_DATASET_XFER);
+    CHECK(xfer_pid, FAIL, "H5Pcreate");
+
+    ret=H5Pset_vlen_mem_manager(xfer_pid,test_vltypes_alloc_custom,&mem_used,test_vltypes_free_custom,&mem_used);
+    CHECK(ret, FAIL, "H5Pset_vlen_mem_manager");
+
+    /* Make certain the correct amount of memory will be used */
+    ret=H5Dvlen_get_buf_size(dataset,tid1,sid1,&size);
+    CHECK(ret, FAIL, "H5Dvlen_get_buf_size");
+
+    /* 10 elements allocated = 1 + 2 + 3 + 4 elements for each array position */
+    VERIFY(size,((SPACE1_DIM1*(SPACE1_DIM1+1))/2)*sizeof(unsigned int),"H5Dvlen_get_buf_size");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Make certain the correct amount of memory has been used */
+    /* 10 elements allocated = 1 + 2 + 3 + 4 elements for each array position */
+    VERIFY(mem_used,((SPACE1_DIM1*(SPACE1_DIM1+1))/2)*sizeof(unsigned int),"H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(wdata[i].len!=rdata[i].len) {
+            TestErrPrintf("%d: VL data lengths don't match!, wdata[%d].len=%d, rdata[%d].len=%d\n",__LINE__,(int)i,(int)wdata[i].len,(int)i,(int)rdata[i].len);
+            continue;
+        } /* end if */
+        for(j=0; j<rdata[i].len; j++) {
+            if( ((unsigned int *)wdata[i].p)[j] != ((unsigned int *)rdata[i].p)[j] ) {
+                TestErrPrintf("VL data values don't match!, wdata[%d].p[%d]=%d, rdata[%d].p[%d]=%d\n",(int)i,(int)j, (int)((unsigned int *)wdata[i].p)[j], (int)i,(int)j, (int)((unsigned int *)rdata[i].p)[j]);
+                continue;
+            } /* end if */
+        } /* end for */
+    } /* end for */
+
+    /* Reclaim the read VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Make certain the VL memory has been freed */
+    VERIFY(mem_used,0,"H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset transfer property list */
+    ret = H5Pclose(xfer_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+
+    /* Open second dataset */
+    dataset=H5Dopen(fid1,"Dataset2");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Get dataspace for datasets */
+    sid1 = H5Dget_space(dataset);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    /* Get datatype for dataset */
+    tid1 = H5Dget_type(dataset);
+    CHECK(tid1, FAIL, "H5Dget_type");
+
+    /* Create a "bad" dataspace with no extent set */
+    sid2 = H5Screate(H5S_SIMPLE);
+    CHECK(sid2, FAIL, "H5Screate");
+
+    /* Change to the custom memory allocation routines for reading VL data */
+    xfer_pid=H5Pcreate(H5P_DATASET_XFER);
+    CHECK(xfer_pid, FAIL, "H5Pcreate");
+
+    ret=H5Pset_vlen_mem_manager(xfer_pid,test_vltypes_alloc_custom,&mem_used,test_vltypes_free_custom,&mem_used);
+    CHECK(ret, FAIL, "H5Pset_vlen_mem_manager");
+
+    /* Make certain the correct amount of memory will be used */
+    ret=H5Dvlen_get_buf_size(dataset,tid1,sid1,&size);
+    CHECK(ret, FAIL, "H5Dvlen_get_buf_size");
+
+    /* Try to call H5Dvlen_get_buf with bad dataspace */
+    H5E_BEGIN_TRY {
+    ret=H5Dvlen_get_buf_size(dataset,tid1,sid2,&size);
+    } H5E_END_TRY
+    VERIFY(ret, FAIL, "H5Dvlen_get_buf_size");
+
+    /* 10 elements allocated = 1 + 2 + 3 + 4 elements for each array position */
+    VERIFY(size,((SPACE1_DIM1*(SPACE1_DIM1+1))/2)*sizeof(unsigned int),"H5Dvlen_get_buf_size");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Make certain the correct amount of memory has been used */
+    /* 10 elements allocated = 1 + 2 + 3 + 4 elements for each array position */
+    VERIFY(mem_used,((SPACE1_DIM1*(SPACE1_DIM1+1))/2)*sizeof(unsigned int),"H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(wdata[i].len!=rdata[i].len) {
+            TestErrPrintf("%d: VL data lengths don't match!, wdata[%d].len=%d, rdata[%d].len=%d\n",__LINE__,(int)i,(int)wdata[i].len,(int)i,(int)rdata[i].len);
+            continue;
+        } /* end if */
+        for(j=0; j<rdata[i].len; j++) {
+            if( ((unsigned int *)wdata[i].p)[j] != ((unsigned int *)rdata[i].p)[j] ) {
+                TestErrPrintf("VL data values don't match!, wdata[%d].p[%d]=%d, rdata[%d].p[%d]=%d\n",(int)i,(int)j, (int)((unsigned int *)wdata[i].p)[j], (int)i,(int)j, (int)((unsigned int *)rdata[i].p)[j]);
+                continue;
+            } /* end if */
+        } /* end for */
+    } /* end for */
+
+    /* Try to reclaim read data using "bad" dataspace with no extent
+     * Should fail */
+    H5E_BEGIN_TRY {
+    ret=H5Dvlen_reclaim(tid1,sid2,xfer_pid,rdata);
+    } H5E_END_TRY
+    VERIFY(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Reclaim the read VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Make certain the VL memory has been freed */
+    VERIFY(mem_used,0,"H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset transfer property list */
+    ret = H5Pclose(xfer_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_vltypes_vlen_atomic() */
+
+/****************************************************************
+**
+**  rewrite_vltypes_vlen_atomic(): check memory leak for basic VL datatype.
+**      Check memory leak for VL datatypes of atomic datatypes
+**
+****************************************************************/
+static void
+rewrite_vltypes_vlen_atomic(void)
+{
+    hvl_t wdata[SPACE1_DIM1];   /* Information to write */
+    hvl_t rdata[SPACE1_DIM1];   /* Information read in */
+    hid_t               fid1;           /* HDF5 File IDs                */
+    hid_t               dataset;        /* Dataset ID                   */
+    hid_t               sid1;       /* Dataspace ID                     */
+    hid_t               tid1;       /* Datatype ID                      */
+    hid_t       xfer_pid;   /* Dataset transfer property list ID */
+    hsize_t     size;       /* Number of bytes which will be used */
+    unsigned       i,j;        /* counting variables */
+    size_t         mem_used=0; /* Memory used during allocation */
+    int			increment=4;
+    herr_t              ret;            /* Generic return value         */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Check Memory Leak for Basic Atomic VL Datatype Functionality\n"));
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        wdata[i].p=HDmalloc((i+increment)*sizeof(unsigned int));
+        wdata[i].len=i+increment;
+        for(j=0; j<(i+increment); j++)
+            ((unsigned int *)wdata[i].p)[j]=i*20+j;
+    } /* end for */
+
+    /* Open file created in test_vltypes_vlen_atomic() */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset created in test_vltypes_vlen_atomic() */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Open dataspace for dataset */
+    sid1 = H5Dget_space(dataset);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    /* Get datatype for dataset */
+    tid1 = H5Dget_type(dataset);
+    CHECK(tid1, FAIL, "H5Dget_type");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Open the file for data checking */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open a dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Get dataspace for datasets */
+    sid1 = H5Dget_space(dataset);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    /* Get datatype for dataset */
+    tid1 = H5Dget_type(dataset);
+    CHECK(tid1, FAIL, "H5Dget_type");
+
+    /* Change to the custom memory allocation routines for reading VL data */
+    xfer_pid=H5Pcreate(H5P_DATASET_XFER);
+    CHECK(xfer_pid, FAIL, "H5Pcreate");
+
+    ret=H5Pset_vlen_mem_manager(xfer_pid,test_vltypes_alloc_custom,&mem_used,test_vltypes_free_custom,&mem_used);
+    CHECK(ret, FAIL, "H5Pset_vlen_mem_manager");
+
+    /* Make certain the correct amount of memory will be used */
+    ret=H5Dvlen_get_buf_size(dataset,tid1,sid1,&size);
+    CHECK(ret, FAIL, "H5Dvlen_get_buf_size");
+
+    /* 22 elements allocated = 4+5+6+7 elements for each array position */
+    VERIFY(size,22*sizeof(unsigned int),"H5Dvlen_get_buf_size");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Make certain the correct amount of memory has been used */
+    /* 22 elements allocated = 4+5+6+7 elements for each array position */
+    VERIFY(mem_used,22*sizeof(unsigned int),"H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(wdata[i].len!=rdata[i].len) {
+            TestErrPrintf("%d: VL data lengths don't match!, wdata[%d].len=%d, rdata[%d].len=%d\n",__LINE__,(int)i,(int)wdata[i].len,(int)i,(int)rdata[i].len);
+            continue;
+        } /* end if */
+        for(j=0; j<rdata[i].len; j++) {
+            if( ((unsigned int *)wdata[i].p)[j] != ((unsigned int *)rdata[i].p)[j] ) {
+                TestErrPrintf("VL data values don't match!, wdata[%d].p[%d]=%d, rdata[%d].p[%d]=%d\n",(int)i,(int)j, (int)((unsigned int *)wdata[i].p)[j], (int)i,(int)j, (int)((unsigned int *)rdata[i].p)[j]);
+                continue;
+            } /* end if */
+        } /* end for */
+    } /* end for */
+
+    /* Reclaim the read VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Make certain the VL memory has been freed */
+    VERIFY(mem_used,0,"H5Dvlen_reclaim");
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset transfer property list */
+    ret = H5Pclose(xfer_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end rewrite_vltypes_vlen_atomic() */
+
+
+
+/****************************************************************
+**
+**  test_vltypes_vlen_compound(): Test basic VL datatype code.
+**      Test VL datatypes of compound datatypes
+**
+****************************************************************/
+static void
+test_vltypes_vlen_compound(void)
+{
+    typedef struct {             /* Struct that the VL sequences are composed of */
+        int i;
+        float f;
+    } s1;
+    hvl_t wdata[SPACE1_DIM1];   /* Information to write */
+    hvl_t rdata[SPACE1_DIM1];   /* Information read in */
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1, tid2; /* Datatype IDs         */
+    hid_t       xfer_pid;   /* Dataset transfer property list ID */
+    hsize_t		dims1[] = {SPACE1_DIM1};
+    hsize_t     size;       /* Number of bytes which will be used */
+    unsigned       i,j;        /* counting variables */
+    size_t         mem_used=0; /* Memory used during allocation */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Basic Compound VL Datatype Functionality\n"));
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        wdata[i].p=HDmalloc((i+1)*sizeof(s1));
+        wdata[i].len=i+1;
+        for(j=0; j<(i+1); j++) {
+            ((s1 *)wdata[i].p)[j].i=i*10+j;
+            ((s1 *)wdata[i].p)[j].f=(float)((i*20+j)/3.0);
+          } /* end for */
+    } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create the base compound type */
+    tid2 = H5Tcreate(H5T_COMPOUND, sizeof(s1));
+    CHECK(tid2, FAIL, "H5Tcreate");
+
+    /* Insert fields */
+    ret=H5Tinsert(tid2, "i", HOFFSET(s1, i), H5T_NATIVE_INT);
+    CHECK(ret, FAIL, "H5Tinsert");
+    ret=H5Tinsert(tid2, "f", HOFFSET(s1, f), H5T_NATIVE_FLOAT);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tvlen_create (tid2);
+    CHECK(tid1, FAIL, "H5Tvlen_create");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Change to the custom memory allocation routines for reading VL data */
+    xfer_pid=H5Pcreate(H5P_DATASET_XFER);
+    CHECK(xfer_pid, FAIL, "H5Pcreate");
+
+    ret=H5Pset_vlen_mem_manager(xfer_pid,test_vltypes_alloc_custom,&mem_used,test_vltypes_free_custom,&mem_used);
+    CHECK(ret, FAIL, "H5Pset_vlen_mem_manager");
+
+    /* Make certain the correct amount of memory will be used */
+    ret=H5Dvlen_get_buf_size(dataset,tid1,sid1,&size);
+    CHECK(ret, FAIL, "H5Dvlen_get_buf_size");
+
+    /* 10 elements allocated = 1 + 2 + 3 + 4 elements for each array position */
+    VERIFY(size,((SPACE1_DIM1*(SPACE1_DIM1+1))/2)*sizeof(s1),"H5Dvlen_get_buf_size");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Make certain the correct amount of memory has been used */
+    /* 10 elements allocated = 1 + 2 + 3 + 4 elements for each array position */
+    VERIFY(mem_used,((SPACE1_DIM1*(SPACE1_DIM1+1))/2)*sizeof(s1),"H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(wdata[i].len!=rdata[i].len) {
+            TestErrPrintf("%d: VL data length don't match!, wdata[%d].len=%d, rdata[%d].len=%d\n",__LINE__,(int)i,(int)wdata[i].len,(int)i,(int)rdata[i].len);
+            continue;
+        } /* end if */
+        for(j=0; j<rdata[i].len; j++) {
+            if( ((s1 *)wdata[i].p)[j].i != ((s1 *)rdata[i].p)[j].i ) {
+                TestErrPrintf("VL data values don't match!, wdata[%d].p[%d].i=%d, rdata[%d].p[%d].i=%d\n",(int)i,(int)j, (int)((s1 *)wdata[i].p)[j].i, (int)i,(int)j, (int)((s1 *)rdata[i].p)[j].i);
+                continue;
+            } /* end if */
+            if( ((s1 *)wdata[i].p)[j].f != ((s1 *)rdata[i].p)[j].f ) {
+                TestErrPrintf("VL data values don't match!, wdata[%d].p[%d].f=%f, rdata[%d].p[%d].f=%f\n",(int)i,(int)j, (double)((s1 *)wdata[i].p)[j].f, (int)i,(int)j, (double)((s1 *)rdata[i].p)[j].f);
+                continue;
+            } /* end if */
+        } /* end for */
+    } /* end for */
+
+    /* Reclaim the VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Make certain the VL memory has been freed */
+    VERIFY(mem_used,0,"H5Dvlen_reclaim");
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset transfer property list */
+    ret = H5Pclose(xfer_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_vltypes_vlen_compound() */
+
+/****************************************************************
+**
+**  rewrite_vltypes_vlen_compound(): Check memory leak for basic VL datatype.
+**      Checks memory leak for VL datatypes of compound datatypes
+**
+****************************************************************/
+static void
+rewrite_vltypes_vlen_compound(void)
+{
+    typedef struct {    /* Struct that the VL sequences are composed of */
+        int i;
+        float f;
+    } s1;
+    hvl_t wdata[SPACE1_DIM1];   /* Information to write */
+    hvl_t rdata[SPACE1_DIM1];   /* Information read in */
+    hid_t               fid1;           /* HDF5 File IDs                */
+    hid_t               dataset;        /* Dataset ID                   */
+    hid_t               sid1;       /* Dataspace ID                     */
+    hid_t               tid1, tid2; /* Datatype IDs         */
+    hid_t       xfer_pid;   /* Dataset transfer property list ID */
+    hsize_t     size;       /* Number of bytes which will be used */
+    unsigned       i,j;        /* counting variables */
+    size_t         mem_used=0; /* Memory used during allocation */
+    int 		increment=4;
+    herr_t              ret;            /* Generic return value         */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Check Memory Leak for Basic Compound VL Datatype Functionality\n"));
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        wdata[i].p=HDmalloc((i+increment)*sizeof(s1));
+        wdata[i].len=i+increment;
+        for(j=0; j<(i+increment); j++) {
+            ((s1 *)wdata[i].p)[j].i=i*40+j;
+            ((s1 *)wdata[i].p)[j].f=(float)((i*60+j)/3.0);
+          } /* end for */
+    } /* end for */
+
+    /* Create file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Create the base compound type */
+    tid2 = H5Tcreate(H5T_COMPOUND, sizeof(s1));
+    CHECK(tid2, FAIL, "H5Tcreate");
+
+    ret=H5Tinsert(tid2, "i", HOFFSET(s1, i), H5T_NATIVE_INT);
+    CHECK(ret, FAIL, "H5Tinsert");
+    ret=H5Tinsert(tid2, "f", HOFFSET(s1, f), H5T_NATIVE_FLOAT);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tvlen_create (tid2);
+    CHECK(tid1, FAIL, "H5Tvlen_create");
+
+    /* Create a dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Dget_space(dataset);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Change to the custom memory allocation routines for reading VL data */
+    xfer_pid=H5Pcreate(H5P_DATASET_XFER);
+    CHECK(xfer_pid, FAIL, "H5Pcreate");
+
+    ret=H5Pset_vlen_mem_manager(xfer_pid,test_vltypes_alloc_custom,&mem_used,test_vltypes_free_custom,&mem_used);
+    CHECK(ret, FAIL, "H5Pset_vlen_mem_manager");
+
+    /* Make certain the correct amount of memory will be used */
+    ret=H5Dvlen_get_buf_size(dataset,tid1,sid1,&size);
+    CHECK(ret, FAIL, "H5Dvlen_get_buf_size");
+
+    /* 22 elements allocated = 4 + 5 + 6 + 7 elements for each array position */
+    VERIFY(size,22*sizeof(s1),"H5Dvlen_get_buf_size");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid1,H5S_ALL,H5S_ALL,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Make certain the correct amount of memory has been used */
+    /* 22 elements allocated = 4 + 5 + 6 + 7 elements for each array position */
+    VERIFY(mem_used,22*sizeof(s1),"H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(wdata[i].len!=rdata[i].len) {
+            TestErrPrintf("%d: VL data length don't match!, wdata[%d].len=%d, rdata[%d].len=%d\n",__LINE__,(int)i,(int)wdata[i].len,(int)i,(int)rdata[i].len);
+            continue;
+        } /* end if */
+        for(j=0; j<rdata[i].len; j++) {
+            if( ((s1 *)wdata[i].p)[j].i != ((s1 *)rdata[i].p)[j].i ) {
+                TestErrPrintf("VL data values don't match!, wdata[%d].p[%d].i=%d, rdata[%d].p[%d].i=%d\n",(int)i,(int)j, (int)((s1 *)wdata[i].p)[j].i, (int)i,(int)j, (int)((s1 *)rdata[i].p)[j].i);
+                continue;
+            } /* end if */
+            if( ((s1 *)wdata[i].p)[j].f != ((s1 *)rdata[i].p)[j].f ) {
+                TestErrPrintf("VL data values don't match!, wdata[%d].p[%d].f=%f, rdata[%d].p[%d].f=%f\n",(int)i,(int)j, (double)((s1 *)wdata[i].p)[j].f, (int)i,(int)j, (double)((s1 *)rdata[i].p)[j].f);
+                continue;
+            } /* end if */
+        } /* end for */
+    } /* end for */
+
+    /* Reclaim the VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Make certain the VL memory has been freed */
+    VERIFY(mem_used,0,"H5Dvlen_reclaim");
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset transfer property list */
+    ret = H5Pclose(xfer_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end rewrite_vltypes_vlen_compound() */
+
+/****************************************************************
+**
+**  test_vltypes_compound_vlen_vlen(): Test basic VL datatype code.
+**      Tests compound datatypes with VL datatypes of VL datatypes.
+**
+****************************************************************/
+static void
+test_vltypes_compound_vlen_vlen(void)
+{
+    typedef struct {                    /* Struct that the compound type are composed of */
+        int i;
+        float f;
+        hvl_t v;
+    } s1;
+    s1 wdata[SPACE3_DIM1];              /* data to write */
+    s1 rdata[SPACE3_DIM1];              /* data to read */
+    hid_t	fid1;		        /* HDF5 File IDs		*/
+    hid_t	dataset;	        /* Dataset ID			*/
+    hid_t	sid1;                   /* Dataspace ID			*/
+    hid_t	tid1, tid2, tid3;       /* Datatype IDs         */
+    hsize_t	dims1[] = {SPACE3_DIM1};
+    unsigned    i,j,k;                  /* counting variables */
+    hvl_t       *t1, *t2;               /* Temporary pointer to VL information */
+    herr_t	ret;		        /* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Compound Datatypes with VL Atomic Datatype Component Functionality\n"));
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SPACE3_DIM1; i++) {
+        wdata[i].i=i*10;
+        wdata[i].f=(float)((i*20)/3.0);
+        wdata[i].v.p=HDmalloc((i+L1_INCM)*sizeof(hvl_t));
+        wdata[i].v.len=i+L1_INCM;
+        for(t1=(wdata[i].v).p,j=0; j<(i+L1_INCM); j++, t1++) {
+            t1->p=HDmalloc((j+L2_INCM)*sizeof(unsigned int));
+            t1->len=j+L2_INCM;
+            for(k=0; k<j+L2_INCM; k++)
+                ((unsigned int*)t1->p)[k] = i*100 + j*10 + k;
+        }
+    } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE3_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a VL datatype to refer to */
+    tid3 = H5Tvlen_create (H5T_NATIVE_UINT);
+    CHECK(tid3, FAIL, "H5Tvlen_create");
+
+    /* Create a VL datatype to refer to */
+    tid1 = H5Tvlen_create (tid3);
+    CHECK(tid1, FAIL, "H5Tvlen_create");
+
+    /* Create the base compound type */
+    tid2 = H5Tcreate(H5T_COMPOUND, sizeof(s1));
+    CHECK(tid2, FAIL, "H5Tcreate");
+
+    /* Insert fields */
+    ret=H5Tinsert(tid2, "i", HOFFSET(s1, i), H5T_NATIVE_INT);
+    CHECK(ret, FAIL, "H5Tinsert");
+    ret=H5Tinsert(tid2, "f", HOFFSET(s1, f), H5T_NATIVE_FLOAT);
+    CHECK(ret, FAIL, "H5Tinsert");
+    ret=H5Tinsert(tid2, "v", HOFFSET(s1, v), tid1);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid2,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid2,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Open file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open a dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid2,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE3_DIM1; i++) {
+        if(wdata[i].i!=rdata[i].i) {
+            TestErrPrintf("Integer components don't match!, wdata[%d].i=%d, rdata[%d].i=%d\n",(int)i,(int)wdata[i].i,(int)i,(int)rdata[i].i);
+            continue;
+        } /* end if */
+        if(wdata[i].f!=rdata[i].f) {
+            TestErrPrintf("Float components don't match!, wdata[%d].f=%f, rdata[%d].f=%f\n",(int)i,(double)wdata[i].f,(int)i,(double)rdata[i].f);
+            continue;
+        } /* end if */
+
+        if(wdata[i].v.len!=rdata[i].v.len) {
+            TestErrPrintf("%d: VL data length don't match!, wdata[%d].v.len=%d, rdata[%d].v.len=%d\n",__LINE__,(int)i,(int)wdata[i].v.len,(int)i,(int)rdata[i].v.len);
+            continue;
+        } /* end if */
+
+        for(t1=wdata[i].v.p, t2=rdata[i].v.p, j=0; j<rdata[i].v.len; j++, t1++, t2++) {
+            if(t1->len!=t2->len) {
+                TestErrPrintf("%d: VL data length don't match!, i=%d, j=%d, t1->len=%d, t2->len=%d\n",__LINE__,(int)i,(int)j,(int)t1->len,(int)t2->len);
+                continue;
+            } /* end if */
+            for(k=0; k<t2->len; k++) {
+                if( ((unsigned int *)t1->p)[k] != ((unsigned int *)t2->p)[k] ) {
+                    TestErrPrintf("VL data values don't match!, t1->p[%d]=%d, t2->p[%d]=%d\n",(int)k, (int)((unsigned int *)t1->p)[k], (int)k, (int)((unsigned int *)t2->p)[k]);
+                    continue;
+                } /* end if */
+            } /* end for */
+        } /* end for */
+    } /* end for */
+
+    /* Reclaim the VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid3);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+} /* end test_vltypes_compound_vlen_vlen() */
+
+/****************************************************************
+**
+**  test_vltypes_compound_vlen_atomic(): Test basic VL datatype code.
+**      Tests compound datatypes with VL datatypes of atomic datatypes.
+**
+****************************************************************/
+static void
+test_vltypes_compound_vlen_atomic(void)
+{
+    typedef struct {             /* Struct that the VL sequences are composed of */
+        int i;
+        float f;
+        hvl_t v;
+    } s1;
+    s1 wdata[SPACE1_DIM1];   /* Information to write */
+    s1 rdata[SPACE1_DIM1];   /* Information read in */
+    s1 fill;                    /* Fill value */
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1, tid2; /* Datatype IDs         */
+    hid_t       xfer_pid;   /* Dataset transfer property list ID */
+    hid_t       dcpl_pid;   /* Dataset creation property list ID */
+    hsize_t		dims1[] = {SPACE1_DIM1};
+    hsize_t     size;       /* Number of bytes which will be used */
+    unsigned       i,j;        /* counting variables */
+    size_t         mem_used=0; /* Memory used during allocation */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Compound Datatypes with VL Atomic Datatype Component Functionality\n"));
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        wdata[i].i=i*10;
+        wdata[i].f=(float)((i*20)/3.0);
+        wdata[i].v.p=HDmalloc((i+1)*sizeof(unsigned int));
+        wdata[i].v.len=i+1;
+        for(j=0; j<(i+1); j++)
+            ((unsigned int *)wdata[i].v.p)[j]=i*10+j;
+    } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a VL datatype to refer to */
+    tid1 = H5Tvlen_create (H5T_NATIVE_UINT);
+    CHECK(tid1, FAIL, "H5Tvlen_create");
+
+    /* Create the base compound type */
+    tid2 = H5Tcreate(H5T_COMPOUND, sizeof(s1));
+    CHECK(tid2, FAIL, "H5Tcreate");
+
+    /* Insert fields */
+    ret=H5Tinsert(tid2, "i", HOFFSET(s1, i), H5T_NATIVE_INT);
+    CHECK(ret, FAIL, "H5Tinsert");
+    ret=H5Tinsert(tid2, "f", HOFFSET(s1, f), H5T_NATIVE_FLOAT);
+    CHECK(ret, FAIL, "H5Tinsert");
+    ret=H5Tinsert(tid2, "v", HOFFSET(s1, v), tid1);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid2,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid2,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Change to the custom memory allocation routines for reading VL data */
+    xfer_pid=H5Pcreate(H5P_DATASET_XFER);
+    CHECK(xfer_pid, FAIL, "H5Pcreate");
+
+    ret=H5Pset_vlen_mem_manager(xfer_pid,test_vltypes_alloc_custom,&mem_used,test_vltypes_free_custom,&mem_used);
+    CHECK(ret, FAIL, "H5Pset_vlen_mem_manager");
+
+    /* Make certain the correct amount of memory will be used */
+    ret=H5Dvlen_get_buf_size(dataset,tid2,sid1,&size);
+    CHECK(ret, FAIL, "H5Dvlen_get_buf_size");
+
+    /* 10 elements allocated = 1 + 2 + 3 + 4 elements for each array position */
+    VERIFY(size,((SPACE1_DIM1*(SPACE1_DIM1+1))/2)*sizeof(unsigned int),"H5Dvlen_get_buf_size");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid2,H5S_ALL,H5S_ALL,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Make certain the correct amount of memory has been used */
+    /* 10 elements allocated = 1 + 2 + 3 + 4 elements for each array position */
+    VERIFY(mem_used,((SPACE1_DIM1*(SPACE1_DIM1+1))/2)*sizeof(unsigned int),"H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(wdata[i].i!=rdata[i].i) {
+            TestErrPrintf("Integer components don't match!, wdata[%d].i=%d, rdata[%d].i=%d\n",(int)i,(int)wdata[i].i,(int)i,(int)rdata[i].i);
+            continue;
+        } /* end if */
+        if(wdata[i].f!=rdata[i].f) {
+            TestErrPrintf("Float components don't match!, wdata[%d].f=%f, rdata[%d].f=%f\n",(int)i,(double)wdata[i].f,(int)i,(double)rdata[i].f);
+            continue;
+        } /* end if */
+        if(wdata[i].v.len!=rdata[i].v.len) {
+            TestErrPrintf("%d: VL data length don't match!, wdata[%d].v.len=%d, rdata[%d].v.len=%d\n",__LINE__,(int)i,(int)wdata[i].v.len,(int)i,(int)rdata[i].v.len);
+            continue;
+        } /* end if */
+        for(j=0; j<rdata[i].v.len; j++) {
+            if( ((unsigned int *)wdata[i].v.p)[j] != ((unsigned int *)rdata[i].v.p)[j] ) {
+                TestErrPrintf("VL data values don't match!, wdata[%d].v.p[%d]=%d, rdata[%d].v.p[%d]=%d\n",(int)i,(int)j, (int)((unsigned int *)wdata[i].v.p)[j], (int)i,(int)j, (int)((unsigned int *)rdata[i].v.p)[j]);
+                continue;
+            } /* end if */
+        } /* end for */
+    } /* end for */
+
+    /* Reclaim the VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Make certain the VL memory has been freed */
+    VERIFY(mem_used,0,"H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Create a second dataset, with a fill value */
+    dcpl_pid=H5Pcreate(H5P_DATASET_CREATE);
+    CHECK(dcpl_pid, FAIL, "H5Pcreate");
+
+    /* Set the fill value for the second dataset */
+    HDmemset(&fill,0,sizeof(s1));
+    ret=H5Pset_fill_value(dcpl_pid, tid2, &fill);
+    CHECK(ret, FAIL, "H5Pset_fill_value");
+
+    dataset=H5Dcreate(fid1,"Dataset2",tid2,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Close dataset creation property list */
+    ret = H5Pclose(dcpl_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Read from dataset before writing data */
+    ret=H5Dread(dataset,tid2,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Check data read in */
+    for(i=0; i<SPACE1_DIM1; i++)
+        if(rdata[i].i!=0 || rdata[i].f!=0.0 || rdata[i].v.len!=0 || rdata[i].v.p!=NULL)
+            TestErrPrintf("VL doesn't match!, rdata[%d].i=%d, rdata[%d].f=%f, rdata[%d].v.len=%u, rdata[%d].v.p=%p\n",(int)i,rdata[i].i,(int)i,rdata[i].f,(int)i,(unsigned)rdata[i].v.len,(int)i,rdata[i].v.p);
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid2,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid2,H5S_ALL,H5S_ALL,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(wdata[i].i!=rdata[i].i) {
+            TestErrPrintf("Integer components don't match!, wdata[%d].i=%d, rdata[%d].i=%d\n",(int)i,(int)wdata[i].i,(int)i,(int)rdata[i].i);
+            continue;
+        } /* end if */
+        if(wdata[i].f!=rdata[i].f) {
+            TestErrPrintf("Float components don't match!, wdata[%d].f=%f, rdata[%d].f=%f\n",(int)i,(double)wdata[i].f,(int)i,(double)rdata[i].f);
+            continue;
+        } /* end if */
+        if(wdata[i].v.len!=rdata[i].v.len) {
+            TestErrPrintf("%d: VL data length don't match!, wdata[%d].v.len=%d, rdata[%d].v.len=%d\n",__LINE__,(int)i,(int)wdata[i].v.len,(int)i,(int)rdata[i].v.len);
+            continue;
+        } /* end if */
+        for(j=0; j<rdata[i].v.len; j++) {
+            if( ((unsigned int *)wdata[i].v.p)[j] != ((unsigned int *)rdata[i].v.p)[j] ) {
+                TestErrPrintf("VL data values don't match!, wdata[%d].v.p[%d]=%d, rdata[%d].v.p[%d]=%d\n",(int)i,(int)j, (int)((unsigned int *)wdata[i].v.p)[j], (int)i,(int)j, (int)((unsigned int *)rdata[i].v.p)[j]);
+                continue;
+            } /* end if */
+        } /* end for */
+    } /* end for */
+
+    /* Reclaim the VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,H5P_DEFAULT,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset transfer property list */
+    ret = H5Pclose(xfer_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_vltypes_compound_vlen_atomic() */
+
+/****************************************************************
+**
+**  rewrite_vltypes_compound_vlen_atomic(): Check memory leak for
+**	basic VL datatype code.
+**      Check memory leak for compound datatypes with VL datatypes
+**	of atomic datatypes.
+**
+****************************************************************/
+static void
+rewrite_vltypes_compound_vlen_atomic(void)
+{
+    typedef struct {    /* Struct that the VL sequences are composed of */
+        int i;
+        float f;
+        hvl_t v;
+    } s1;
+    s1 wdata[SPACE1_DIM1];   /* Information to write */
+    s1 rdata[SPACE1_DIM1];   /* Information read in */
+    hid_t               fid1;           /* HDF5 File IDs                */
+    hid_t               dataset;        /* Dataset ID                   */
+    hid_t               sid1;       /* Dataspace ID                     */
+    hid_t               tid1, tid2; /* Datatype IDs         */
+    hid_t       xfer_pid;   /* Dataset transfer property list ID */
+    hsize_t     size;       /* Number of bytes which will be used */
+    unsigned       i,j;        /* counting variables */
+    size_t         mem_used=0; /* Memory used during allocation */
+    int			increment=4;
+    herr_t              ret;            /* Generic return value         */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Checking memory leak for compound datatype with VL Atomic Datatype Component Functionality\n"));
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        wdata[i].i=i*40;
+        wdata[i].f=(float)((i*50)/3.0);
+        wdata[i].v.p=HDmalloc((i+increment)*sizeof(unsigned int));
+        wdata[i].v.len=i+increment;
+        for(j=0; j<(i+increment); j++)
+            ((unsigned int *)wdata[i].v.p)[j]=i*60+j;
+    } /* end for */
+
+    /* Create file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Create a VL datatype to refer to */
+    tid1 = H5Tvlen_create (H5T_NATIVE_UINT);
+    CHECK(tid1, FAIL, "H5Tvlen_create");
+
+    /* Create the base compound type */
+    tid2 = H5Tcreate(H5T_COMPOUND, sizeof(s1));
+    CHECK(tid2, FAIL, "H5Tcreate");
+
+    /* Insert fields */
+    ret=H5Tinsert(tid2, "i", HOFFSET(s1, i), H5T_NATIVE_INT);
+    CHECK(ret, FAIL, "H5Tinsert");
+    ret=H5Tinsert(tid2, "f", HOFFSET(s1, f), H5T_NATIVE_FLOAT);
+    CHECK(ret, FAIL, "H5Tinsert");
+    ret=H5Tinsert(tid2, "v", HOFFSET(s1, v), tid1);
+    CHECK(ret, FAIL, "H5Tinsert");
+
+    /* Create a dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Dget_space(dataset);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid2,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Change to the custom memory allocation routines for reading VL data */
+    xfer_pid=H5Pcreate(H5P_DATASET_XFER);
+    CHECK(xfer_pid, FAIL, "H5Pcreate");
+
+    ret=H5Pset_vlen_mem_manager(xfer_pid,test_vltypes_alloc_custom,&mem_used,test_vltypes_free_custom,&mem_used);
+    CHECK(ret, FAIL, "H5Pset_vlen_mem_manager");
+
+    /* Make certain the correct amount of memory will be used */
+    ret=H5Dvlen_get_buf_size(dataset,tid2,sid1,&size);
+    CHECK(ret, FAIL, "H5Dvlen_get_buf_size");
+
+    /* 22 elements allocated = 4+5+6+7 elements for each array position */
+    VERIFY(size, 22*sizeof(unsigned int),"H5Dvlen_get_buf_size");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid2,H5S_ALL,H5S_ALL,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Make certain the correct amount of memory has been used */
+    /* 22 elements allocated = 4+5+6+7 elements for each array position */
+    VERIFY(mem_used,22*sizeof(unsigned int),"H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(wdata[i].i!=rdata[i].i) {
+            TestErrPrintf("Integer components don't match!, wdata[%d].i=%d, rdata[%d].i=%d\n",(int)i,(int)wdata[i].i,(int)i,(int)rdata[i].i);
+            continue;
+        } /* end if */
+        if(wdata[i].f!=rdata[i].f) {
+            TestErrPrintf("Float components don't match!, wdata[%d].f=%f, rdata[%d].f=%f\n",(int)i,(double)wdata[i].f,(int)i,(double)rdata[i].f);
+            continue;
+        } /* end if */
+        if(wdata[i].v.len!=rdata[i].v.len) {
+            TestErrPrintf("%d: VL data length don't match!, wdata[%d].v.len=%d, rdata[%d].v.len=%d\n",__LINE__,(int)i,(int)wdata[i].v.len,(int)i,(int)rdata[i].v.len);
+            continue;
+        } /* end if */
+        for(j=0; j<rdata[i].v.len; j++) {
+            if( ((unsigned int *)wdata[i].v.p)[j] != ((unsigned int *)rdata[i].v.p)[j] ) {
+                TestErrPrintf("VL data values don't match!, wdata[%d].v.p[%d]=%d, rdata[%d].v.p[%d]=%d\n",(int)i,(int)j, (int)((unsigned int *)wdata[i].v.p)[j], (int)i,(int)j, (int)((unsigned int *)rdata[i].v.p)[j]);
+                continue;
+            } /* end if */
+        } /* end for */
+    } /* end for */
+
+    /* Reclaim the VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Make certain the VL memory has been freed */
+    VERIFY(mem_used,0,"H5Dvlen_reclaim");
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset transfer property list */
+    ret = H5Pclose(xfer_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end rewrite_vltypes_compound_vlen_atomic() */
+
+/****************************************************************
+**
+**  vlen_size_func(): Test basic VL datatype code.
+**      Tests VL datatype with VL datatypes of atomic datatypes.
+**
+****************************************************************/
+static size_t vlen_size_func(unsigned long n)
+{
+    size_t u=1;
+    size_t tmp=1;
+    size_t result=1;
+
+    while(u<n) {
+        u++;
+        tmp+=u;
+        result+=tmp;
+    }
+    return(result);
+}
+
+/****************************************************************
+**
+**  test_vltypes_vlen_vlen_atomic(): Test basic VL datatype code.
+**      Tests VL datatype with VL datatypes of atomic datatypes.
+**
+****************************************************************/
+static void
+test_vltypes_vlen_vlen_atomic(void)
+{
+    hvl_t wdata[SPACE1_DIM1];   /* Information to write */
+    hvl_t rdata[SPACE1_DIM1];   /* Information read in */
+    hvl_t *t1, *t2;             /* Temporary pointer to VL information */
+    hid_t		fid1;		/* HDF5 File IDs		*/
+    hid_t		dataset;	/* Dataset ID			*/
+    hid_t		sid1;       /* Dataspace ID			*/
+    hid_t		tid1, tid2; /* Datatype IDs         */
+    hid_t       xfer_pid;   /* Dataset transfer property list ID */
+    hsize_t		dims1[] = {SPACE1_DIM1};
+    hsize_t     size;       /* Number of bytes which will be used */
+    unsigned       i,j,k;      /* counting variables */
+    size_t         mem_used=0; /* Memory used during allocation */
+    herr_t		ret;		/* Generic return value		*/
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing VL Datatypes with VL Atomic Datatype Component Functionality\n"));
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        wdata[i].p=HDmalloc((i+1)*sizeof(hvl_t));
+        if(wdata[i].p==NULL) {
+            TestErrPrintf("Cannot allocate memory for VL data! i=%u\n",i);
+            return;
+        } /* end if */
+        wdata[i].len=i+1;
+        for(t1=wdata[i].p,j=0; j<(i+1); j++, t1++) {
+            t1->p=HDmalloc((j+1)*sizeof(unsigned int));
+            if(t1->p==NULL) {
+                TestErrPrintf("Cannot allocate memory for VL data! i=%u, j=%u\n",i,j);
+                return;
+            } /* end if */
+            t1->len=j+1;
+            for(k=0; k<(j+1); k++)
+                ((unsigned int *)t1->p)[k]=i*100+j*10+k;
+        } /* end for */
+    } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILENAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fcreate");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a VL datatype to refer to */
+    tid1 = H5Tvlen_create (H5T_NATIVE_UINT);
+    CHECK(tid1, FAIL, "H5Tvlen_create");
+
+    /* Create the base VL type */
+    tid2 = H5Tvlen_create (tid1);
+    CHECK(tid2, FAIL, "H5Tvlen_create");
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid2,sid1,H5P_DEFAULT);
+    CHECK(dataset, FAIL, "H5Dcreate");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid2,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+    /* Open file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+    CHECK(sid1, FAIL, "H5Screate_simple");
+
+    /* Create a VL datatype to refer to */
+    tid1 = H5Tvlen_create (H5T_NATIVE_UINT);
+    CHECK(tid1, FAIL, "H5Tvlen_create");
+
+    /* Create the base VL type */
+    tid2 = H5Tvlen_create (tid1);
+    CHECK(tid2, FAIL, "H5Tvlen_create");
+
+    /* Open a dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Change to the custom memory allocation routines for reading VL data */
+    xfer_pid=H5Pcreate(H5P_DATASET_XFER);
+    CHECK(xfer_pid, FAIL, "H5Pcreate");
+
+    ret=H5Pset_vlen_mem_manager(xfer_pid,test_vltypes_alloc_custom,&mem_used,test_vltypes_free_custom,&mem_used);
+    CHECK(ret, FAIL, "H5Pset_vlen_mem_manager");
+
+    /* Make certain the correct amount of memory was used */
+    ret=H5Dvlen_get_buf_size(dataset,tid2,sid1,&size);
+    CHECK(ret, FAIL, "H5Dvlen_get_buf_size");
+
+    /* 10 hvl_t elements allocated = 1 + 2 + 3 + 4 elements for each array position */
+    /* 20 unsigned int elements allocated = 1 + 3 + 6 + 10 elements */
+    VERIFY(size,((SPACE1_DIM1*(SPACE1_DIM1+1))/2)*sizeof(hvl_t)+vlen_size_func(SPACE1_DIM1)*sizeof(unsigned int),"H5Dvlen_get_buf_size");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid2,H5S_ALL,H5S_ALL,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Make certain the correct amount of memory has been used */
+    /* 10 hvl_t elements allocated = 1 + 2 + 3 + 4 elements for each array position */
+    /* 20 unsigned int elements allocated = 1 + 3 + 6 + 10 elements */
+    VERIFY(mem_used,((SPACE1_DIM1*(SPACE1_DIM1+1))/2)*sizeof(hvl_t)+vlen_size_func(SPACE1_DIM1)*sizeof(unsigned int),"H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(wdata[i].len!=rdata[i].len) {
+            TestErrPrintf("%d: VL data length don't match!, wdata[%d].len=%d, rdata[%d].len=%d\n",__LINE__,(int)i,(int)wdata[i].len,(int)i,(int)rdata[i].len);
+            continue;
+        } /* end if */
+        for(t1=wdata[i].p, t2=rdata[i].p, j=0; j<rdata[i].len; j++, t1++, t2++) {
+            if(t1->len!=t2->len) {
+                TestErrPrintf("%d: VL data length don't match!, i=%d, j=%d, t1->len=%d, t2->len=%d\n",__LINE__,(int)i,(int)j,(int)t1->len,(int)t2->len);
+                continue;
+            } /* end if */
+            for(k=0; k<t2->len; k++) {
+                if( ((unsigned int *)t1->p)[k] != ((unsigned int *)t2->p)[k] ) {
+                    TestErrPrintf("VL data values don't match!, t1->p[%d]=%d, t2->p[%d]=%d\n",(int)k, (int)((unsigned int *)t1->p)[k], (int)k, (int)((unsigned int *)t2->p)[k]);
+                    continue;
+                } /* end if */
+            } /* end for */
+        } /* end for */
+    } /* end for */
+
+    /* Reclaim all the (nested) VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Make certain the VL memory has been freed */
+    VERIFY(mem_used,0,"H5Dvlen_reclaim");
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid1);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset transfer property list */
+    ret = H5Pclose(xfer_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end test_vltypes_vlen_vlen_atomic() */
+
+/****************************************************************
+**
+**  rewrite_longer_vltypes_vlen_vlen_atomic(): Test basic VL datatype code.
+**      Tests VL datatype with VL datatypes of atomic datatypes.
+**
+****************************************************************/
+static void
+rewrite_longer_vltypes_vlen_vlen_atomic(void)
+{
+    hvl_t wdata[SPACE1_DIM1];   /* Information to write */
+    hvl_t rdata[SPACE1_DIM1];   /* Information read in */
+    hvl_t *t1, *t2;             /* Temporary pointer to VL information */
+    hid_t               fid1;           /* HDF5 File IDs                */
+    hid_t               dataset;        /* Dataset ID                   */
+    hid_t               sid1;       /* Dataspace ID                     */
+    hid_t               tid2; 	/* Datatype IDs         */
+    hid_t       xfer_pid;   /* Dataset transfer property list ID */
+    hsize_t     size;       /* Number of bytes which will be used */
+    unsigned       i,j,k;      /* counting variables */
+    size_t         mem_used=0; /* Memory used during allocation */
+    int			increment=1;
+    herr_t              ret;            /* Generic return value         */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Check memory leak for VL Datatypes with VL Atomic Datatype Component Functionality\n"));
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        wdata[i].p=HDmalloc((i+increment)*sizeof(hvl_t));
+        if(wdata[i].p==NULL) {
+            TestErrPrintf("Cannot allocate memory for VL data! i=%u\n",i);
+            return;
+        } /* end if */
+        wdata[i].len=i+increment;
+        for(t1=wdata[i].p,j=0; j<(i+increment); j++, t1++) {
+            t1->p=HDmalloc((j+1)*sizeof(unsigned int));
+            if(t1->p==NULL) {
+                TestErrPrintf("Cannot allocate memory for VL data! i=%u, j=%u\n",i,j);
+                return;
+            } /* end if */
+            t1->len=j+1;
+            for(k=0; k<(j+1); k++)
+                ((unsigned int *)t1->p)[k]=i*1000+j*100+k*10;
+        } /* end for */
+    } /* end for */
+
+    /* Open file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Get dataspace for datasets */
+    sid1 = H5Dget_space(dataset);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    /* Open datatype of the dataset */
+    tid2 = H5Dget_type(dataset);
+    CHECK(tid2, FAIL, "H5Dget_type");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid2,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Open the file for data checking */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open a dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Get dataspace for datasets */
+    sid1 = H5Dget_space(dataset);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    /* Get datatype for dataset */
+    tid2 = H5Dget_type(dataset);
+    CHECK(tid2, FAIL, "H5Dget_type");
+
+    /* Change to the custom memory allocation routines for reading VL data */
+    xfer_pid=H5Pcreate(H5P_DATASET_XFER);
+    CHECK(xfer_pid, FAIL, "H5Pcreate");
+
+    ret=H5Pset_vlen_mem_manager(xfer_pid,test_vltypes_alloc_custom,&mem_used,test_vltypes_free_custom,&mem_used);
+    CHECK(ret, FAIL, "H5Pset_vlen_mem_manager");
+
+    /* Make certain the correct amount of memory was used */
+    ret=H5Dvlen_get_buf_size(dataset,tid2,sid1,&size);
+    CHECK(ret, FAIL, "H5Dvlen_get_buf_size");
+
+    /* 18 hvl_t elements allocated = 3 + 4 + 5 + 6 elements for each array position */
+    /* 52 unsigned int elements allocated = 6 + 10 + 15 + 21 elements */
+    /*VERIFY(size,18*sizeof(hvl_t)+52*sizeof(unsigned int),"H5Dvlen_get_buf_size");*/
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid2,H5S_ALL,H5S_ALL,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Make certain the correct amount of memory has been used */
+    /* 18 hvl_t elements allocated = 3+4+5+6elements for each array position */
+    /* 52 unsigned int elements allocated = 6+10+15+21 elements */
+    /*VERIFY(mem_used,18*sizeof(hvl_t)+52*sizeof(unsigned int),"H5Dread");*/
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(wdata[i].len!=rdata[i].len) {
+            TestErrPrintf("%d: VL data length don't match!, wdata[%d].len=%d, rdata[%d].len=%d\n",__LINE__,(int)i,(int)wdata[i].len,(int)i,(int)rdata[i].len);
+            continue;
+        } /* end if */
+        for(t1=wdata[i].p, t2=rdata[i].p, j=0; j<rdata[i].len; j++, t1++, t2++) {
+            if(t1->len!=t2->len) {
+                TestErrPrintf("%d: VL data length don't match!, i=%d, j=%d, t1->len=%d, t2->len=%d\n",__LINE__,(int)i,(int)j,(int)t1->len,(int)t2->len);
+                continue;
+            } /* end if */
+            for(k=0; k<t2->len; k++) {
+                if( ((unsigned int *)t1->p)[k] != ((unsigned int *)t2->p)[k] ) {
+                    TestErrPrintf("VL data values don't match!, t1->p[%d]=%d, t2->p[%d]=%d\n",(int)k, (int)((unsigned int *)t1->p)[k], (int)k, (int)((unsigned int *)t2->p)[k]);
+                    continue;
+                } /* end if */
+            } /* end for */
+        } /* end for */
+    } /* end for */
+
+    /* Reclaim all the (nested) VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Make certain the VL memory has been freed */
+    VERIFY(mem_used,0,"H5Dvlen_reclaim");
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset transfer property list */
+    ret = H5Pclose(xfer_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end rewrite_longer_vltypes_vlen_vlen_atomic() */
+
+/****************************************************************
+**
+**  rewrite_shorter_vltypes_vlen_vlen_atomic(): Test basic VL datatype code.
+**      Tests VL datatype with VL datatypes of atomic datatypes.
+**
+****************************************************************/
+static void
+rewrite_shorter_vltypes_vlen_vlen_atomic(void)
+{
+    hvl_t wdata[SPACE1_DIM1];   /* Information to write */
+    hvl_t rdata[SPACE1_DIM1];   /* Information read in */
+    hvl_t *t1, *t2;             /* Temporary pointer to VL information */
+    hid_t               fid1;           /* HDF5 File IDs                */
+    hid_t               dataset;        /* Dataset ID                   */
+    hid_t               sid1;       /* Dataspace ID                     */
+    hid_t               tid2;   /* Datatype IDs         */
+    hid_t       xfer_pid;   /* Dataset transfer property list ID */
+    hsize_t     size;       /* Number of bytes which will be used */
+    unsigned       i,j,k;      /* counting variables */
+    size_t         mem_used=0; /* Memory used during allocation */
+    int                 increment=1;
+    herr_t              ret;            /* Generic return value         */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Check memory leak for VL Datatypes with VL Atomic Datatype Component Functionality\n"));
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        wdata[i].p=HDmalloc((i+increment)*sizeof(hvl_t));
+        if(wdata[i].p==NULL) {
+            TestErrPrintf("Cannot allocate memory for VL data! i=%u\n",i);
+            return;
+        } /* end if */
+        wdata[i].len=i+increment;
+        for(t1=wdata[i].p,j=0; j<(i+increment); j++, t1++) {
+            t1->p=HDmalloc((j+1)*sizeof(unsigned int));
+            if(t1->p==NULL) {
+                TestErrPrintf("Cannot allocate memory for VL data! i=%u, j=%u\n",i,j);
+                return;
+            } /* end if */
+            t1->len=j+1;
+            for(k=0; k<(j+1); k++)
+                ((unsigned int *)t1->p)[k]=i*100000+j*1000+k*10;
+        } /* end for */
+    } /* end for */
+
+    /* Open file */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDWR, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open the dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Get dataspace for datasets */
+    sid1 = H5Dget_space(dataset);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    /* Open datatype of the dataset */
+    tid2 = H5Dget_type(dataset);
+    CHECK(tid2, FAIL, "H5Dget_type");
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid2,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dwrite");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+
+    /* Open the file for data checking */
+    fid1 = H5Fopen(FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);
+    CHECK(fid1, FAIL, "H5Fopen");
+
+    /* Open a dataset */
+    dataset=H5Dopen(fid1,"Dataset1");
+    CHECK(dataset, FAIL, "H5Dopen");
+
+    /* Get dataspace for datasets */
+    sid1 = H5Dget_space(dataset);
+    CHECK(sid1, FAIL, "H5Dget_space");
+
+    /* Get datatype for dataset */
+    tid2 = H5Dget_type(dataset);
+    CHECK(tid2, FAIL, "H5Dget_type");
+
+    /* Change to the custom memory allocation routines for reading VL data */
+    xfer_pid=H5Pcreate(H5P_DATASET_XFER);
+    CHECK(xfer_pid, FAIL, "H5Pcreate");
+
+    ret=H5Pset_vlen_mem_manager(xfer_pid,test_vltypes_alloc_custom,&mem_used,test_vltypes_free_custom,&mem_used);
+    CHECK(ret, FAIL, "H5Pset_vlen_mem_manager");
+
+    /* Make certain the correct amount of memory was used */
+    ret=H5Dvlen_get_buf_size(dataset,tid2,sid1,&size);
+    CHECK(ret, FAIL, "H5Dvlen_get_buf_size");
+
+    /* 10 hvl_t elements allocated = 1 + 2 + 3 + 4 elements for each array position */
+    /* 20 unsigned int elements allocated = 1 + 3 + 6 + 10 elements */
+    VERIFY(size,((SPACE1_DIM1*(SPACE1_DIM1+1))/2)*sizeof(hvl_t)+vlen_size_func(SPACE1_DIM1)*sizeof(unsigned int),"H5Dvlen_get_buf_size");
+
+    /* Read dataset from disk */
+    ret=H5Dread(dataset,tid2,H5S_ALL,H5S_ALL,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dread");
+
+    /* Make certain the correct amount of memory has been used */
+    /* 10 hvl_t elements allocated = 1 + 2 + 3 + 4 elements for each array position */
+    /* 20 unsigned int elements allocated = 1 + 3 + 6 + 10 elements */
+    VERIFY(mem_used,((SPACE1_DIM1*(SPACE1_DIM1+1))/2)*sizeof(hvl_t)+vlen_size_func(SPACE1_DIM1)*sizeof(unsigned int),"H5Dread");
+
+    /* Compare data read in */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(wdata[i].len!=rdata[i].len) {
+            TestErrPrintf("%d: VL data length don't match!, wdata[%d].len=%d, rdata[%d].len=%d\n",__LINE__,(int)i,(int)wdata[i].len,(int)i,(int)rdata[i].len);
+            continue;
+        } /* end if */
+        for(t1=wdata[i].p, t2=rdata[i].p, j=0; j<rdata[i].len; j++, t1++, t2++) {
+            if(t1->len!=t2->len) {
+                TestErrPrintf("%d: VL data length don't match!, i=%d, j=%d, t1->len=%d, t2->len=%d\n",__LINE__,(int)i,(int)j,(int)t1->len,(int)t2->len);
+                continue;
+            } /* end if */
+            for(k=0; k<t2->len; k++) {
+                if( ((unsigned int *)t1->p)[k] != ((unsigned int *)t2->p)[k] ) {
+                    TestErrPrintf("VL data values don't match!, t1->p[%d]=%d, t2->p[%d]=%d\n",(int)k, (int)((unsigned int *)t1->p)[k], (int)k, (int)((unsigned int *)t2->p)[k]);
+                    continue;
+                } /* end if */
+            } /* end for */
+        } /* end for */
+    } /* end for */
+
+    /* Reclaim all the (nested) VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,xfer_pid,rdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Make certain the VL memory has been freed */
+    VERIFY(mem_used,0,"H5Dvlen_reclaim");
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,H5P_DEFAULT,wdata);
+    CHECK(ret, FAIL, "H5Dvlen_reclaim");
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    CHECK(ret, FAIL, "H5Dclose");
+
+    /* Close datatype */
+    ret = H5Tclose(tid2);
+    CHECK(ret, FAIL, "H5Tclose");
+
+    /* Close disk dataspace */
+    ret = H5Sclose(sid1);
+    CHECK(ret, FAIL, "H5Sclose");
+
+    /* Close dataset transfer property list */
+    ret = H5Pclose(xfer_pid);
+    CHECK(ret, FAIL, "H5Pclose");
+
+    /* Close file */
+    ret = H5Fclose(fid1);
+    CHECK(ret, FAIL, "H5Fclose");
+
+} /* end rewrite_shorter_vltypes_vlen_vlen_atomic() */
+
+/****************************************************************
+**
+**  test_vltypes(): Main VL datatype testing routine.
+**
+****************************************************************/
+void
+test_vltypes(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing Variable-Length Datatypes\n"));
+
+    /* These next tests use the same file */
+    test_vltypes_dataset_create();    /* Check dataset of VL when fill value
+				       * won't be rewritten to it.*/
+    test_vltypes_vlen_atomic();       /* Test VL atomic datatypes */
+    rewrite_vltypes_vlen_atomic();    /* Check VL memory leak	  */
+    test_vltypes_vlen_compound();     /* Test VL compound datatypes */
+    rewrite_vltypes_vlen_compound();  /* Check VL memory leak	  */
+    test_vltypes_compound_vlen_atomic(); /* Test compound datatypes with VL atomic components */
+    rewrite_vltypes_compound_vlen_atomic();/* Check VL memory leak	*/
+    test_vltypes_vlen_vlen_atomic();  	   /* Test VL datatype with VL atomic components */
+    rewrite_longer_vltypes_vlen_vlen_atomic();  /*overwrite with VL data of longer sequence*/
+    rewrite_shorter_vltypes_vlen_vlen_atomic();  /*overwrite with VL data of shorted sequence*/
+    test_vltypes_compound_vlen_vlen(); /* Test compound datatypes with VL atomic components */
+}   /* test_vltypes() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	cleanup_vltypes
+ *
+ * Purpose:	Cleanup temporary test files
+ *
+ * Return:	none
+ *
+ * Programmer:	Quincey Koziol
+ *              June 8, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+cleanup_vltypes(void)
+{
+    remove(FILENAME);
+}

Added: packages/hdf5/branches/upstream/current/test/unlink.c
===================================================================
--- packages/hdf5/branches/upstream/current/test/unlink.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/test/unlink.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2209 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Friday, September 25, 1998
+ *
+ * Purpose:	Test H5Gunlink().
+ */
+
+#include <time.h>
+#include "h5test.h"
+
+const char *FILENAME[] = {
+    "unlink",
+    "new_move_a",
+    "new_move_b",
+    "lunlink",
+    "filespace",
+    "slashes",
+    "resurrect_set",
+    "resurrect_type",
+    "resurrect_group",
+    "unlink_chunked",
+    NULL
+};
+
+#define THE_OBJECT	"/foo"
+
+/* Macros for test_create_unlink() & test_filespace */
+#define GROUPNAME       "group"
+#define GROUP2NAME      "group2"
+#define UNLINK_NGROUPS         1000
+#define DATASETNAME     "dataset"
+#define DATASET2NAME    "dataset2"
+#define ATTRNAME        "attribute"
+#define TYPENAME        "datatype"
+#define TYPE2NAME       "datatype2"
+#define FILESPACE_NDIMS 3
+#define FILESPACE_DIM0  20
+#define FILESPACE_DIM1  20
+#define FILESPACE_DIM2  20
+#define FILESPACE_CHUNK0  10
+#define FILESPACE_CHUNK1  10
+#define FILESPACE_CHUNK2  10
+#define FILESPACE_DEFLATE_LEVEL 6
+#define FILESPACE_REWRITE       10
+#define FILESPACE_NATTR 100
+#define FILESPACE_ATTR_NDIMS    2
+#define FILESPACE_ATTR_DIM0     5
+#define FILESPACE_ATTR_DIM1     5
+#define FILESPACE_TOP_GROUPS    10
+#define FILESPACE_NESTED_GROUPS 50
+#define FILESPACE_NDATASETS     50
+#define SLASHES_GROUP_NAME      "Group///"
+#define SLASHES_HARDLINK_NAME   "Hard///"
+#define SLASHES_SOFTLINK_NAME   "Soft///"
+#define SLASHES_SOFTLINK2_NAME  "Soft2///"
+#define SLASHES_ROOTLINK_NAME   "Root///"
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_one
+ *
+ * Purpose:	Creates a group that has just one entry and then unlinks that
+ *		entry.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, September 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_one(hid_t file)
+{
+    hid_t	work=-1, grp=-1;
+    herr_t	status;
+
+    /* Create a test group */
+    if ((work=H5Gcreate(file, "/test_one", 0))<0) goto error;
+
+    /* Delete by absolute name */
+    TESTING("unlink by absolute name");
+    if ((grp=H5Gcreate(work, "foo", 0))<0) goto error;
+    if (H5Gclose(grp)<0) goto error;
+    if (H5Gunlink(file, "/test_one/foo")<0) goto error;
+    PASSED();
+
+    /* Delete by local name */
+    TESTING("unlink by local name");
+    if ((grp=H5Gcreate(work, "foo", 0))<0) goto error;
+    if (H5Gclose(grp)<0) goto error;
+    if (H5Gunlink(work, "foo")<0) goto error;
+    PASSED();
+
+    /* Delete directly - should fail */
+    TESTING("unlink without a name");
+    if ((grp=H5Gcreate(work, "foo", 0))<0) goto error;
+    H5E_BEGIN_TRY {
+	status = H5Gunlink(grp, ".");
+    } H5E_END_TRY;
+    if (status>=0) {
+	H5_FAILED();
+	puts("    Unlinking object w/o a name should have failed.");
+	goto error;
+    }
+    if (H5Gclose(grp)<0) goto error;
+    PASSED();
+
+    /* Cleanup */
+    if (H5Gclose(work)<0) goto error;
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Gclose(work);
+	H5Gclose(grp);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_many
+ *
+ * Purpose:	Tests many unlinks in a single directory.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, September 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_many(hid_t file)
+{
+    hid_t	work=-1, grp=-1;
+    int		i;
+    const int	how_many=500;
+    char	name[32];
+
+    /* Create a test group */
+    if ((work=H5Gcreate(file, "/test_many", 0))<0) goto error;
+    if ((grp = H5Gcreate(work, "/test_many_foo", 0))<0) goto error;
+    if (H5Gclose(grp)<0) goto error;
+
+    /* Create a bunch of names and unlink them in order */
+    TESTING("forward unlink");
+    for (i=0; i<how_many; i++) {
+	sprintf(name, "obj_%05d", i);
+	if (H5Glink(work, H5G_LINK_HARD, "/test_many_foo", name)<0) goto error;
+    }
+    for (i=0; i<how_many; i++) {
+	sprintf(name, "obj_%05d", i);
+	if (H5Gunlink(work, name)<0) goto error;
+    }
+    PASSED();
+
+    /* Create a bunch of names and unlink them in reverse order */
+    TESTING("backward unlink");
+    for (i=0; i<how_many; i++) {
+	sprintf(name, "obj_%05d", i);
+	if (H5Glink(work, H5G_LINK_HARD, "/test_many_foo", name)<0) goto error;
+    }
+    for (i=how_many-1; i>=0; --i) {
+	sprintf(name, "obj_%05d", i);
+	if (H5Gunlink(work, name)<0) goto error;
+    }
+    PASSED();
+
+    /* Create a bunch of names and unlink them from both directions */
+    TESTING("inward unlink");
+    for (i=0; i<how_many; i++) {
+	sprintf(name, "obj_%05d", i);
+	if (H5Glink(work, H5G_LINK_HARD, "/test_many_foo", name)<0) goto error;
+    }
+    for (i=0; i<how_many; i++) {
+	if (i%2) {
+	    sprintf(name, "obj_%05d", how_many-(1+i/2));
+	} else {
+	    sprintf(name, "obj_%05d", i/2);
+	}
+	if (H5Gunlink(work, name)<0) goto error;
+    }
+    PASSED();
+
+    /* Create a bunch of names and unlink them from the midle */
+    TESTING("outward unlink");
+    for (i=0; i<how_many; i++) {
+	sprintf(name, "obj_%05d", i);
+	if (H5Glink(work, H5G_LINK_HARD, "/test_many_foo", name)<0) goto error;
+    }
+    for (i=how_many-1; i>=0; --i) {
+	if (i%2) {
+	    sprintf(name, "obj_%05d", how_many-(1+i/2));
+	} else {
+	    sprintf(name, "obj_%05d", i/2);
+	}
+	if (H5Gunlink(work, name)<0) goto error;
+    }
+    PASSED();
+
+
+    /* Cleanup */
+    if (H5Gclose(work)<0) goto error;
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Gclose(work);
+	H5Gclose(grp);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_symlink
+ *
+ * Purpose:	Tests removal of symbolic links.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, September 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_symlink(hid_t file)
+{
+    hid_t	work=-1;
+
+    TESTING("symlink removal");
+
+    /* Create a test group and symlink */
+    if ((work=H5Gcreate(file, "/test_symlink", 0))<0) goto error;
+    if (H5Glink(work, H5G_LINK_SOFT, "link_value", "link")<0) goto error;
+    if (H5Gunlink(work, "link")<0) goto error;
+
+    /* Cleanup */
+    if (H5Gclose(work)<0) goto error;
+    PASSED();
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Gclose(work);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_rename
+ *
+ * Purpose:	Tests H5Gmove()
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	number of errors
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, September 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_rename(hid_t file)
+{
+    hid_t	work=-1, foo=-1, inner=-1;
+
+    /* Create a test group and rename something */
+    TESTING("object renaming");
+    if ((work=H5Gcreate(file, "/test_rename", 0))<0) goto error;
+    if ((foo=H5Gcreate(work, "foo", 0))<0) goto error;
+    if (H5Gmove(work, "foo", "bar")<0) goto error;
+    if ((inner=H5Gcreate(foo, "inner", 0))<0) goto error;
+    if (H5Gclose(inner)<0) goto error;
+    if (H5Gclose(foo)<0) goto error;
+    if ((inner=H5Gopen(work, "bar/inner"))<0) goto error;
+    if (H5Gclose(inner)<0) goto error;
+    PASSED();
+
+    /* Try renaming a symlink */
+    TESTING("symlink renaming");
+    if (H5Glink(work, H5G_LINK_SOFT, "link_value", "link_one")<0) goto error;
+    if (H5Gmove(work, "link_one", "link_two")<0) goto error;
+    PASSED();
+
+    /* Cleanup */
+    if (H5Gclose(work)<0) goto error;
+    return 0;
+
+ error:
+    H5E_BEGIN_TRY {
+	H5Gclose(work);
+	H5Gclose(foo);
+	H5Gclose(inner);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_new_move
+ *
+ * Purpose:     Tests H5Gmove2()
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Raymond Lu
+ *              Thursday, April 25, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_new_move(void)
+{
+    hid_t 	fapl, file_a, file_b=(-1);
+    hid_t	grp_1=(-1), grp_2=(-1), grp_move=(-1), moved_grp=(-1);
+    char 	filename[1024];
+
+    TESTING("new move");
+
+    /* Create a second file */
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+    if ((file_a=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+        goto error;
+    h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
+    if ((file_b=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+        goto error;
+
+    /* Create groups in first file */
+    if((grp_1=H5Gcreate(file_a, "group1", 0))<0) goto error;
+    if((grp_2=H5Gcreate(file_a, "group2", 0))<0) goto error;
+    if((grp_move=H5Gcreate(grp_1, "group_move", 0))<0) goto error;
+
+    /* Create hard and soft links. */
+    if(H5Glink2(grp_1, "group_move", H5G_LINK_HARD, H5G_SAME_LOC, "hard")<0)
+	goto error;
+    if(H5Glink2(grp_1, "/group1/group_move", H5G_LINK_SOFT, grp_2, "soft")<0)
+	goto error;
+
+    /* Move a group within the file.  Both of source and destination use
+     * H5G_SAME_LOC.  Should fail. */
+    H5E_BEGIN_TRY {
+        if(H5Gmove2(H5G_SAME_LOC, "group_move", H5G_SAME_LOC, "group_new_name")
+		!=FAIL) goto error;
+    } H5E_END_TRY;
+
+    /* Move a group across files.  Should fail. */
+    H5E_BEGIN_TRY {
+        if(H5Gmove2(grp_1, "group_move", file_b, "group_new_name")!=FAIL)
+	    goto error;
+    } H5E_END_TRY;
+
+    /* Move a group across groups in the same file. */
+    if(H5Gmove2(grp_1, "group_move", grp_2, "group_new_name")<0)
+	goto error;
+
+    /* Open the group just moved to the new location. */
+    if((moved_grp = H5Gopen(grp_2, "group_new_name"))<0)
+	goto error;
+
+    H5Gclose(grp_1);
+    H5Gclose(grp_2);
+    H5Gclose(grp_move);
+    H5Gclose(moved_grp);
+    H5Fclose(file_a);
+    H5Fclose(file_b);
+
+    PASSED();
+    return 0;
+
+  error:
+    H5E_BEGIN_TRY {
+ 	H5Gclose(grp_1);
+	H5Gclose(grp_2);
+	H5Gclose(grp_move);
+        H5Gclose(moved_grp);
+	H5Fclose(file_a);
+	H5Fclose(file_b);
+    } H5E_END_TRY;
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    check_new_move
+ *
+ * Purpose:     Checks result of H5Gmove2()
+ *
+ * Return:      Success:        0
+ *
+ *              Failure:        number of errors
+ *
+ * Programmer:  Raymond Lu
+ *              Thursday, April 25, 2002
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+check_new_move(void)
+{
+    hid_t 	fapl, file;
+    H5G_stat_t	sb_hard1, sb_hard2;
+    char 	filename[1024];
+    char 	linkval[1024];
+
+    TESTING("check new move function");
+
+    /* Open file */
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+    if ((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) {
+        goto error;
+    }
+
+    /* Get hard link info */
+    if(H5Gget_objinfo(file, "/group2/group_new_name", TRUE, &sb_hard1)<0)
+	goto error;
+    if(H5Gget_objinfo(file, "/group1/hard", TRUE, &sb_hard2)<0)
+	goto error;
+
+    /* Check hard links */
+    if(H5G_GROUP!=sb_hard1.type || H5G_GROUP!=sb_hard2.type) {
+        H5_FAILED();
+        puts("    Unexpected object type, should have been a group");
+        goto error;
+    }
+    if( sb_hard1.objno[0]!=sb_hard2.objno[0] ||
+        sb_hard1.objno[1]!=sb_hard2.objno[1] ) {
+        H5_FAILED();
+        puts("    Hard link test failed.  Link seems not to point to the ");
+        puts("    expected file location.");
+        goto error;
+    }
+
+    /* Check soft links */
+    if (H5Gget_linkval(file, "group2/soft", sizeof linkval, linkval)<0) {
+        goto error;
+    }
+    if (strcmp(linkval, "/group1/group_move")) {
+        H5_FAILED();
+        puts("    Soft link test failed. Wrong link value");
+        goto error;
+    }
+
+    /* Cleanup */
+    if(H5Fclose(file)<0) goto error;
+    PASSED();
+    return 0;
+
+  error:
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_filespace
+ *
+ * Purpose:     Test proper reuse of space in the file when objects are unlinked
+ *
+ * Return:      Success:        0
+ *              Failure:        number of errors
+ *
+ * Programmer:  Quincey Koziol
+ *              Saturday, March 22, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_filespace(void)
+{
+    hid_t 	fapl;           /* File access property list */
+    hid_t 	fapl_nocache;   /* File access property list with raw data cache turned off */
+    hid_t 	contig_dcpl;    /* Dataset creation property list for contiguous dataset */
+    hid_t 	early_chunk_dcpl; /* Dataset creation property list for chunked dataset & early allocation */
+    hid_t 	late_chunk_dcpl; /* Dataset creation property list for chunked dataset & late allocation */
+    hid_t 	comp_dcpl;      /* Dataset creation property list for compressed, chunked dataset */
+    hid_t 	compact_dcpl;   /* Dataset creation property list for compact dataset */
+    hid_t 	file;           /* File ID */
+    hid_t 	group, group2;  /* Group IDs */
+    hid_t 	dataset, dataset2;      /* Dataset IDs */
+    hid_t 	space;          /* Dataspace ID */
+    hid_t 	type;           /* Datatype ID */
+    hid_t 	attr_space;     /* Dataspace ID for attributes */
+    hid_t 	attr;           /* Attribute ID */
+    char 	filename[1024]; /* Name of file to create */
+    char 	objname[128];   /* Name of object to create */
+    hsize_t     dims[FILESPACE_NDIMS]= {FILESPACE_DIM0, FILESPACE_DIM1, FILESPACE_DIM2};        /* Dataset dimensions */
+    hsize_t     chunk_dims[FILESPACE_NDIMS]= {FILESPACE_CHUNK0, FILESPACE_CHUNK1, FILESPACE_CHUNK2};        /* Chunk dimensions */
+    hsize_t     attr_dims[FILESPACE_ATTR_NDIMS]= {FILESPACE_ATTR_DIM0, FILESPACE_ATTR_DIM1};        /* Attribute dimensions */
+    int        *data;           /* Pointer to dataset buffer */
+    int        *tmp_data;       /* Temporary pointer to dataset buffer */
+    off_t       empty_size;     /* Size of an empty file */
+    off_t       file_size;      /* Size of each file created */
+    herr_t	status;         /* Function status return value */
+    unsigned u,v,w;             /* Local index variables */
+
+    /* Metadata cache parameters */
+    int mdc_nelmts;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int rdcc_nelmts;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    size_t rdcc_nelmts;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    size_t rdcc_nbytes;
+    double rdcc_w0;
+
+
+    puts("Testing file space gets reused:");
+
+    /* Open file */
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[4], fapl, filename, sizeof filename);
+
+/* Create FAPL with raw data cache disabled */
+    /* Create file access property list with raw data cache disabled */
+    if ((fapl_nocache=H5Pcopy(fapl))<0) TEST_ERROR;
+
+    /* Get the cache settings */
+    if(H5Pget_cache(fapl_nocache,&mdc_nelmts,&rdcc_nelmts,&rdcc_nbytes,&rdcc_w0)<0) TEST_ERROR;
+
+    /* Disable the raw data cache */
+    rdcc_nelmts=0;
+    rdcc_nbytes=0;
+    if(H5Pset_cache(fapl_nocache,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0)<0) TEST_ERROR;
+
+/* Create empty file for size comparisons later */
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of an empty file */
+    if((empty_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+/* Create common objects for datasets */
+
+    /* Create dataset creation property list for contigous storage */
+    if ((contig_dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR;
+
+    /* Make certain that space is allocated early */
+    if(H5Pset_alloc_time(contig_dcpl, H5D_ALLOC_TIME_EARLY) < 0) TEST_ERROR;
+
+    /* Create dataset creation property list for chunked storage & early allocation */
+    if ((early_chunk_dcpl=H5Pcopy(contig_dcpl))<0) TEST_ERROR;
+
+    /* Set chunk dimensions */
+    if(H5Pset_chunk(early_chunk_dcpl, FILESPACE_NDIMS, chunk_dims) < 0) TEST_ERROR;
+
+    /* Create dataset creation property list for chunked storage & late allocation */
+    if ((late_chunk_dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR;
+
+    /* Set chunk dimensions */
+    if(H5Pset_chunk(late_chunk_dcpl, FILESPACE_NDIMS, chunk_dims) < 0) TEST_ERROR;
+
+    /* Create dataset creation property list for compressed, chunked storage & early allocation */
+    if ((comp_dcpl=H5Pcopy(early_chunk_dcpl))<0) TEST_ERROR;
+
+    /* Enable compression & set level */
+    if(H5Pset_deflate(comp_dcpl, FILESPACE_DEFLATE_LEVEL) < 0) TEST_ERROR;
+
+    /* Create dataset creation property list for compact storage */
+    if ((compact_dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR;
+
+    /* Set to compact storage */
+    if(H5Pset_layout(compact_dcpl, H5D_COMPACT) < 0) TEST_ERROR;
+
+    /* Create dataspace for datasets */
+    if((space = H5Screate_simple(FILESPACE_NDIMS, dims, NULL))<0) TEST_ERROR;
+
+    /* Create buffer for writing dataset */
+    if((data = HDmalloc(sizeof(int)*FILESPACE_DIM0*FILESPACE_DIM1*FILESPACE_DIM2))==NULL) TEST_ERROR;
+
+/* Create single dataset (with contiguous storage & late allocation), remove it & verify file size */
+    TESTING("    contiguous dataset with late allocation");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a single dataset to remove */
+    if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, H5P_DEFAULT))<0) TEST_ERROR;
+    if(H5Dclose (dataset)<0) TEST_ERROR;
+
+    /* Remove the dataset */
+    if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create single dataset (with contiguous storage & early allocation), remove it & verify file size */
+    TESTING("    contiguous dataset with early allocation");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a single dataset to remove */
+    if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, contig_dcpl))<0) TEST_ERROR;
+    if(H5Dclose (dataset)<0) TEST_ERROR;
+
+    /* Remove the dataset */
+    if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create single dataset (with chunked storage & late allocation), remove it & verify file size */
+    TESTING("    chunked dataset with late allocation");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a single dataset to remove */
+    if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, late_chunk_dcpl))<0) TEST_ERROR;
+    if(H5Dclose (dataset)<0) TEST_ERROR;
+
+    /* Remove the dataset */
+    if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create single dataset (with chunked storage & early allocation), remove it & verify file size */
+    TESTING("    chunked dataset with early allocation");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a single dataset to remove */
+    if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, early_chunk_dcpl))<0) TEST_ERROR;
+    if(H5Dclose (dataset)<0) TEST_ERROR;
+
+    /* Remove the dataset */
+    if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create single dataset (with compressed storage & early allocation), remove it & verify file size */
+    TESTING("    compressed, chunked dataset");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a single dataset to remove */
+    if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, comp_dcpl))<0) TEST_ERROR;
+    if(H5Dclose (dataset)<0) TEST_ERROR;
+
+    /* Remove the dataset */
+    if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create single dataset (with compressed storage & early allocation), re-write it a bunch of
+ * times (which should re-allocate blocks many times) and remove it & verify
+ * file size.
+ */
+    TESTING("    re-writing compressed, chunked dataset");
+
+    /* Create file (using FAPL with disabled raw data cache) */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_nocache))<0) TEST_ERROR;
+
+    /* Create a single dataset to remove */
+    if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, comp_dcpl))<0) TEST_ERROR;
+
+    /* Alternate re-writing dataset with compressible & random data */
+    for(u=0; u<FILESPACE_REWRITE; u++) {
+        /* Set buffer to some compressible values */
+        for (v=0, tmp_data=data; v<(FILESPACE_DIM0*FILESPACE_DIM1*FILESPACE_DIM2); v++)
+            *tmp_data++ = v*u;
+
+        /* Write the buffer to the dataset */
+        if (H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data)<0) TEST_ERROR;
+
+        /* Set buffer to different random numbers each time */
+        for (v=0, tmp_data=data; v<(FILESPACE_DIM0*FILESPACE_DIM1*FILESPACE_DIM2); v++)
+            *tmp_data++ = (int)HDrandom();
+
+        /* Write the buffer to the dataset */
+        if (H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data)<0) TEST_ERROR;
+    } /* end for */
+
+    /* Close dataset */
+    if(H5Dclose (dataset)<0) TEST_ERROR;
+
+    /* Remove the dataset */
+    if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create single dataset (with compact storage), remove it & verify file size */
+    TESTING("    compact dataset");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a single dataset to remove */
+    if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, compact_dcpl))<0) TEST_ERROR;
+    if(H5Dclose (dataset)<0) TEST_ERROR;
+
+    /* Remove the dataset */
+    if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create two datasets (with contiguous storage), alternate adding attributes
+ * to each one (which creates many object header continuations),
+ * remove both & verify file size.
+ */
+    TESTING("    object header continuations");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create datasets to remove */
+    if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, contig_dcpl))<0) TEST_ERROR;
+    if((dataset2 = H5Dcreate (file, DATASET2NAME, H5T_NATIVE_INT, space, contig_dcpl))<0) TEST_ERROR;
+
+    /* Create a dataspace for the attributes */
+    if((attr_space = H5Screate_simple(FILESPACE_ATTR_NDIMS, attr_dims, NULL))<0) TEST_ERROR;
+
+    /* Alternate adding attributes to each one */
+    for(u=0; u<FILESPACE_NATTR; u++) {
+        /* Set the name of the attribute to create */
+        sprintf(objname,"%s %u",ATTRNAME,u);
+
+        /* Create an attribute on the first dataset */
+        if((attr = H5Acreate (dataset, objname, H5T_NATIVE_INT, attr_space, H5P_DEFAULT))<0) TEST_ERROR;
+
+        /* Don't worry about writing the attribute - it will have a fill value */
+
+        /* Close the attribute on the first dataset */
+        if(H5Aclose (attr)<0) TEST_ERROR;
+
+        /* Create an attribute on the second dataset */
+        if((attr = H5Acreate (dataset2, objname, H5T_NATIVE_INT, attr_space, H5P_DEFAULT))<0) TEST_ERROR;
+
+        /* Don't worry about writing the attribute - it will have a fill value */
+
+        /* Close the attribute on the second dataset */
+        if(H5Aclose (attr)<0) TEST_ERROR;
+
+        /* Flush the file (to fix the sizes of object header buffers, etc) */
+        if(H5Fflush(file,H5F_SCOPE_GLOBAL)<0) TEST_ERROR;
+    } /* end for */
+
+    /* Close the dataspace for the attributes */
+    if(H5Sclose (attr_space)<0) TEST_ERROR;
+
+    /* Close datasets */
+    if(H5Dclose (dataset)<0) TEST_ERROR;
+    if(H5Dclose (dataset2)<0) TEST_ERROR;
+
+    /* Remove the datasets */
+    if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+    if(H5Gunlink (file, DATASET2NAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create single named datatype, remove it & verify file size */
+    TESTING("    named datatype");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create datatype to commit */
+    if((type = H5Tcopy (H5T_NATIVE_INT))<0) TEST_ERROR;
+
+    /* Create a single named datatype to remove */
+    if(H5Tcommit (file, TYPENAME, type)<0) TEST_ERROR;
+    if(H5Tclose (type)<0) TEST_ERROR;
+
+    /* Remove the named datatype */
+    if(H5Gunlink (file, TYPENAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create single group, remove it & verify file size */
+    TESTING("    single group");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a single group to remove */
+    if((group = H5Gcreate (file, GROUPNAME, 0))<0) TEST_ERROR;
+    if(H5Gclose (group)<0) TEST_ERROR;
+
+    /* Remove the group */
+    if(H5Gunlink (file, GROUPNAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create many groups, remove them & verify file size */
+    TESTING("    multiple groups");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a many groups to remove */
+    for(u=0; u<UNLINK_NGROUPS; u++) {
+        sprintf(objname,"%s %u",GROUPNAME,u);
+        if((group = H5Gcreate (file, objname, 0))<0) TEST_ERROR;
+        if(H5Gclose (group)<0) TEST_ERROR;
+    } /* end for */
+
+    /* Remove the all the groups */
+    for(u=0; u<UNLINK_NGROUPS; u++) {
+        sprintf(objname,"%s %u",GROUPNAME,u);
+        if(H5Gunlink (file, objname)<0) TEST_ERROR;
+    } /* end for */
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create simple group hiearchy, remove it & verify file size */
+    TESTING("    simple group hierarchy");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a small group hierarchy to remove */
+    if((group = H5Gcreate (file, GROUPNAME, 0))<0) TEST_ERROR;
+    if((group2 = H5Gcreate (group, GROUP2NAME, 0))<0) TEST_ERROR;
+    if(H5Gclose (group2)<0) TEST_ERROR;
+    if(H5Gclose (group)<0) TEST_ERROR;
+
+    /* Remove the second group */
+    if(H5Gunlink (file, GROUPNAME "/" GROUP2NAME)<0) TEST_ERROR;
+
+    /* Remove the first group */
+    if(H5Gunlink (file, GROUPNAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create complex group hiearchy, remove it & verify file size */
+    TESTING("    complex group hierarchy");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a complex group hierarchy to remove */
+    for(u=0; u<FILESPACE_TOP_GROUPS; u++) {
+        /* Create group */
+        sprintf(objname,"%s %u",GROUPNAME,u);
+        if((group = H5Gcreate (file, objname, 0))<0) TEST_ERROR;
+
+        /* Create nested groups inside top groups */
+        for(v=0; v<FILESPACE_NESTED_GROUPS; v++) {
+            /* Create group */
+            sprintf(objname,"%s %u",GROUP2NAME,v);
+            if((group2 = H5Gcreate (group, objname, 0))<0) TEST_ERROR;
+
+            /* Create datasets inside nested groups */
+            for(w=0; w<FILESPACE_NDATASETS; w++) {
+                /* Create & close a dataset */
+                sprintf(objname,"%s %u",DATASETNAME,w);
+                if((dataset = H5Dcreate (group2, objname, H5T_NATIVE_INT, space, H5P_DEFAULT))<0) TEST_ERROR;
+                if(H5Dclose (dataset)<0) TEST_ERROR;
+            } /* end for */
+
+            /* Close nested group */
+            if(H5Gclose (group2)<0) TEST_ERROR;
+        } /* end for */
+
+        /* Close top group */
+        if(H5Gclose (group)<0) TEST_ERROR;
+    } /* end for */
+
+    /* Remove complex group hierarchy */
+    for(u=0; u<FILESPACE_TOP_GROUPS; u++) {
+        /* Open group */
+        sprintf(objname,"%s %u",GROUPNAME,u);
+        if((group = H5Gopen (file, objname))<0) TEST_ERROR;
+
+        /* Open nested groups inside top groups */
+        for(v=0; v<FILESPACE_NESTED_GROUPS; v++) {
+            /* Create group */
+            sprintf(objname,"%s %u",GROUP2NAME,v);
+            if((group2 = H5Gopen (group, objname))<0) TEST_ERROR;
+
+            /* Remove datasets inside nested groups */
+            for(w=0; w<FILESPACE_NDATASETS; w++) {
+                /* Remove dataset */
+                sprintf(objname,"%s %u",DATASETNAME,w);
+                if(H5Gunlink (group2, objname)<0) TEST_ERROR;
+            } /* end for */
+
+            /* Close nested group */
+            if(H5Gclose (group2)<0) TEST_ERROR;
+
+            /* Remove nested group */
+            sprintf(objname,"%s %u",GROUP2NAME,v);
+            if(H5Gunlink (group, objname)<0) TEST_ERROR;
+        } /* end for */
+
+        /* Close top group */
+        if(H5Gclose (group)<0) TEST_ERROR;
+
+        /* Remove top group */
+        sprintf(objname,"%s %u",GROUPNAME,u);
+        if(H5Gunlink (file, objname)<0) TEST_ERROR;
+    } /* end for */
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create dataset and duplicate dataset, remove original & verify file size */
+    TESTING("    duplicate dataset");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a single dataset to remove */
+    if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, H5P_DEFAULT))<0) TEST_ERROR;
+    if(H5Dclose (dataset)<0) TEST_ERROR;
+
+    /* Create another dataset with same name */
+    H5E_BEGIN_TRY {
+        dataset=H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, H5P_DEFAULT);
+    } H5E_END_TRY;
+    if (dataset>=0) {
+        H5Dclose(dataset);
+        TEST_ERROR;
+    } /* end if */
+
+    /* Remove the dataset */
+    if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create group and duplicate group, remove original & verify file size */
+    TESTING("    duplicate group");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a single group to remove */
+    if((group = H5Gcreate (file, GROUPNAME, 0))<0) TEST_ERROR;
+    if(H5Gclose (group)<0) TEST_ERROR;
+
+    /* Create another group with same name */
+    H5E_BEGIN_TRY {
+        group = H5Gcreate (file, GROUPNAME, 0);
+    } H5E_END_TRY;
+    if (group>=0) {
+        H5Gclose(group);
+        TEST_ERROR;
+    } /* end if */
+
+    /* Remove the group */
+    if(H5Gunlink (file, GROUPNAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create named datatype and duplicate named datatype, remove original & verify file size */
+    TESTING("    duplicate named datatype");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create datatype to commit */
+    if((type = H5Tcopy (H5T_NATIVE_INT))<0) TEST_ERROR;
+
+    /* Create a single named datatype to remove */
+    if(H5Tcommit (file, TYPENAME, type)<0) TEST_ERROR;
+    if(H5Tclose (type)<0) TEST_ERROR;
+
+    /* Create datatype to commit */
+    if((type = H5Tcopy (H5T_NATIVE_INT))<0) TEST_ERROR;
+
+    /* Create another named datatype with same name */
+    H5E_BEGIN_TRY {
+        status = H5Tcommit (file, TYPENAME, type);
+    } H5E_END_TRY;
+    if (status>=0) TEST_ERROR;
+    if(H5Tclose (type)<0) TEST_ERROR;
+
+    /* Remove the named datatype */
+    if(H5Gunlink (file, TYPENAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Create named datatype and duplicate named datatype, remove original & verify file size */
+    TESTING("    duplicate attribute");
+
+    /* Create file */
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create datasets to remove */
+    if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, contig_dcpl))<0) TEST_ERROR;
+
+    /* Create a dataspace for the attributes */
+    if((attr_space = H5Screate_simple(FILESPACE_ATTR_NDIMS, attr_dims, NULL))<0) TEST_ERROR;
+
+    /* Create an attribute on the dataset */
+    if((attr = H5Acreate (dataset, ATTRNAME, H5T_NATIVE_INT, attr_space, H5P_DEFAULT))<0) TEST_ERROR;
+
+    /* Don't worry about writing the attribute - it will have a fill value */
+
+    /* Close the attribute on the dataset */
+    if(H5Aclose (attr)<0) TEST_ERROR;
+
+    /* Create another attribute with same name */
+    H5E_BEGIN_TRY {
+        attr = H5Acreate (dataset, ATTRNAME, H5T_NATIVE_INT, attr_space, H5P_DEFAULT);
+    } H5E_END_TRY;
+    if (attr>=0) {
+        H5Aclose(attr);
+        TEST_ERROR;
+    } /* end if */
+
+    /* Close the dataspace for the attributes */
+    if(H5Sclose (attr_space)<0) TEST_ERROR;
+
+    /* Close dataset */
+    if(H5Dclose (dataset)<0) TEST_ERROR;
+
+    /* Remove the dataset */
+    if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+
+    /* Close file */
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Get the size of the file */
+    if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+
+    /* Verify the file is correct size */
+    if(file_size!=empty_size) TEST_ERROR;
+
+    PASSED();
+
+/* Cleanup common objects */
+
+    /* Release dataset buffer */
+    HDfree(data);
+
+    /* Close property lists */
+    if(H5Pclose(fapl)<0) TEST_ERROR;
+    if(H5Pclose(fapl_nocache)<0) TEST_ERROR;
+    if(H5Pclose(contig_dcpl)<0) TEST_ERROR;
+    if(H5Pclose(early_chunk_dcpl)<0) TEST_ERROR;
+    if(H5Pclose(late_chunk_dcpl)<0) TEST_ERROR;
+    if(H5Pclose(comp_dcpl)<0) TEST_ERROR;
+    if(H5Pclose(compact_dcpl)<0) TEST_ERROR;
+
+    /* Close dataspace */
+    if(H5Sclose(space)<0) TEST_ERROR;
+
+    /* Indicate success */
+    /* Don't print final "PASSED", since we aren't on the correct line anymore */
+    return 0;
+
+error:
+    return 1;
+} /* end test_filespace() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_create_unlink
+ *
+ * Purpose:     Creates and then unlinks a large number of objects
+ *
+ * Return:      Success:        0
+ *              Failure:        number of errors
+ *
+ * Programmer:  Quincey Koziol
+ *              Friday, April 11, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int test_create_unlink(const char *msg, hid_t fapl)
+{
+    hid_t 	file, group;
+    unsigned u;
+    char 	groupname[1024];
+    char	filename[1024];
+
+    TESTING(msg);
+
+    /* Create file */
+    h5_fixname(FILENAME[3], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
+    {
+        H5_FAILED();
+        puts("    Creating file failed");
+        goto error;
+    }
+
+    /* Create a many groups to remove */
+    for(u=0; u<UNLINK_NGROUPS; u++) {
+        sprintf(groupname,"%s %u",GROUPNAME,u);
+        if((group = H5Gcreate (file, groupname, 0))<0)
+        {
+            H5_FAILED();
+            printf("group %s creation failed\n",groupname);
+            goto error;
+        }
+        if(H5Gclose (group)<0)
+        {
+            H5_FAILED();
+            printf("closing group %s failed\n",groupname);
+            goto error;
+        }
+    } /* end for */
+
+    /* Remove the all the groups */
+    for(u=0; u<UNLINK_NGROUPS; u++) {
+        sprintf(groupname,"%s %u",GROUPNAME,u);
+        if(H5Gunlink (file, groupname)<0)
+        {
+            H5_FAILED();
+            printf("Unlinking group %s failed\n",groupname);
+            goto error;
+        }
+    } /* end for */
+
+    /* Close file */
+    if(H5Fclose(file)<0)
+    {
+        H5_FAILED();
+        printf("Closing file failed\n");
+        goto error;
+    }
+
+    PASSED();
+    return 0;
+
+error:
+    return 1;
+} /* end test_create_unlink() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_link_slashes
+ *
+ * Purpose:     Tests creating links with various multiple & trailing slashes
+ *
+ * Return:      Success:        0
+ *              Failure:        number of errors
+ *
+ * Programmer:  Quincey Koziol
+ *              Saturday, August 16, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_link_slashes(void)
+{
+    hid_t 	fapl;           /* File access property list */
+    hid_t fid;          /* File ID */
+    hid_t gid,gid2;     /* Group ID */
+    char	filename[1024];
+
+    TESTING("creating links with multiple slashes");
+
+    /* Create file */
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[5], fapl, filename, sizeof filename);
+
+    /* Create a file */
+    if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) TEST_ERROR;
+
+    /* Create a group in the root group */
+    if((gid = H5Gcreate(fid, SLASHES_GROUP_NAME, 0))<0) TEST_ERROR;
+
+    /* Create a nested group in the root group */
+    if((gid2 = H5Gcreate(gid, SLASHES_GROUP_NAME, 0))<0) TEST_ERROR;
+
+    /* Close the nested group */
+    if(H5Gclose(gid2)<0) TEST_ERROR;
+
+    /* Create a hard link to the nested group */
+    if(H5Glink2(gid, SLASHES_GROUP_NAME, H5G_LINK_HARD, H5G_SAME_LOC, SLASHES_HARDLINK_NAME)<0) TEST_ERROR;
+
+    /* Create a soft link with a relative path to the nested group */
+    if(H5Glink2(gid, SLASHES_GROUP_NAME, H5G_LINK_SOFT, H5G_SAME_LOC, SLASHES_SOFTLINK_NAME)<0) TEST_ERROR;
+
+    /* Create a soft link with the full path to the nested group */
+    if(H5Glink2(gid, "////"SLASHES_GROUP_NAME""SLASHES_GROUP_NAME, H5G_LINK_SOFT, H5G_SAME_LOC, SLASHES_SOFTLINK2_NAME)<0) TEST_ERROR;
+
+    /* Create a soft link to the root group */
+    if(H5Glink2(gid, "////", H5G_LINK_SOFT, H5G_SAME_LOC, SLASHES_ROOTLINK_NAME)<0) TEST_ERROR;
+
+    /* Close the group */
+    if(H5Gclose(gid)<0) TEST_ERROR;
+
+    /* Create a hard link to the existing group */
+    if(H5Glink2(fid, SLASHES_GROUP_NAME, H5G_LINK_HARD, H5G_SAME_LOC, SLASHES_HARDLINK_NAME)<0) TEST_ERROR;
+
+    /* Close the file */
+    if(H5Fclose(fid)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+error:
+    return 1;
+} /* end test_link_slashes() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_unlink_slashes
+ *
+ * Purpose:     Tests deleting links with various multiple & trailing slashes
+ *
+ * Return:      Success:        0
+ *              Failure:        number of errors
+ *
+ * Programmer:  Quincey Koziol
+ *              Saturday, August 16, 2003
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_unlink_slashes(void)
+{
+    hid_t 	fapl;           /* File access property list */
+    hid_t fid;          /* File ID */
+    hid_t gid;          /* Group ID */
+    char	filename[1024];
+
+    TESTING("deleting links with multiple slashes");
+
+    /* Create file */
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[5], fapl, filename, sizeof filename);
+
+    /* Open the file */
+    if((fid=H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT))<0) TEST_ERROR;
+
+    /* Open the top level group */
+    if((gid = H5Gopen(fid, SLASHES_GROUP_NAME))<0) TEST_ERROR;
+
+    /* Delete the root link */
+    if(H5Gunlink(gid,SLASHES_ROOTLINK_NAME)<0) TEST_ERROR;
+
+    /* Delete the soft link with the full path */
+    if(H5Gunlink(gid,SLASHES_SOFTLINK2_NAME)<0) TEST_ERROR;
+
+    /* Delete the soft link with the relative path */
+    if(H5Gunlink(gid,SLASHES_SOFTLINK_NAME)<0) TEST_ERROR;
+
+    /* Delete the hard link */
+    if(H5Gunlink(gid,SLASHES_HARDLINK_NAME)<0) TEST_ERROR;
+
+    /* Delete the group itself */
+    if(H5Gunlink(gid,SLASHES_GROUP_NAME)<0) TEST_ERROR;
+
+    /* Close the group */
+    if(H5Gclose(gid)<0) TEST_ERROR;
+
+    /* Delete the hard link */
+    if(H5Gunlink(fid,SLASHES_HARDLINK_NAME)<0) TEST_ERROR;
+
+    /* Delete the group itself */
+    if(H5Gunlink(fid,SLASHES_GROUP_NAME)<0) TEST_ERROR;
+
+    /* Close the file */
+    if(H5Fclose(fid)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+error:
+    return 1;
+} /* end test_unlink_slashes() */
+
+/*
+ * Helper routine for test_unlink_rightleaf()
+ */
+static int delete_node (hid_t pid, hid_t id)
+{
+    char name[256];     /* Name of object to close */
+
+    /* Get the name of the object to delete */
+    if(H5Iget_name(id, name, sizeof(name))<0) return (-1);
+
+    /* Close the object */
+    if(H5Gclose (id)<0) return(-1);
+
+    /* Unlink the object */
+    if(H5Gunlink (pid, name)<0) return(-1);
+
+    /* If this object is the right-most child, try opening the previous object */
+    if(HDstrcmp(name,"/Zone81")==0) {
+        hid_t gid;
+
+        if((gid = H5Gopen (pid, "/Zone80"))<0) return(-1);
+        if(H5Gclose(gid)<0) return(-1);
+    } /* end if */
+
+    /* Indicate success */
+    return(0);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_unlink_rightleaf
+ *
+ * Purpose:     Tests deleting objects in a way that triggers deletion of the
+ *              right child in the leaf of a non-leaf B-tree node
+ *
+ * Return:      Success:        0
+ *              Failure:        number of errors
+ *
+ * Programmer:  Quincey Koziol
+ *              Monday, January 19, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_unlink_rightleaf(hid_t fid)
+{
+    hid_t rootid,       /* Group ID for root group */
+        *gids;          /* Array of IDs for groups created */
+    int n,              /* Local index variable */
+        ngroups = 150;  /* Number of groups to create */
+    char name[256];     /* Name of object to create */
+
+    TESTING("Deleting right-most child in non-leaf B-tree node");
+
+    /* Allocate space for the group IDs */
+    gids = (hid_t *) HDmalloc (ngroups * sizeof(hid_t));
+    if(gids==NULL) TEST_ERROR;
+
+    if((rootid = H5Gopen (fid, "/"))<0) TEST_ERROR;
+
+    /* Create all the groups */
+    for (n = 0; n < ngroups; n++) {
+        sprintf(name, "Zone%d", n + 1);
+        if((gids[n] = H5Gcreate (rootid, name, 0))<0) TEST_ERROR;
+    } /* end for */
+
+    /* Unlink & re-create each group */
+    for (n = 0; n < ngroups; n++) {
+        if(delete_node (rootid, gids[n])<0) TEST_ERROR;
+        sprintf(name, "Zone%d", n + 1);
+        if((gids[n] = H5Gcreate (rootid, name, 0))<0) TEST_ERROR;
+    } /* end for */
+
+    /* Close all the groups */
+    for (n = 0; n < ngroups; n++)
+        if(H5Gclose(gids[n])<0) TEST_ERROR;
+
+    /* Free memory */
+    HDfree(gids);
+
+    PASSED();
+    return 0;
+
+error:
+    return 1;
+} /* end test_unlink_rightleaf() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_unlink_rightnode
+ *
+ * Purpose:     Tests deleting objects in a way that triggers deletion of the
+ *              entire right child leaf of a non-leaf B-tree node
+ *
+ * Return:      Success:        0
+ *              Failure:        number of errors
+ *
+ * Programmer:  Quincey Koziol
+ *              Monday, January 19, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_unlink_rightnode(hid_t fid)
+{
+    hid_t rootid,       /* Group ID for root group */
+        *gids;          /* Array of IDs for groups created */
+    int n,              /* Local index variable */
+        ngroups = 150;  /* Number of groups to create */
+    char name[256];     /* Name of object to create */
+
+    TESTING("Deleting right-most child in non-leaf B-tree node");
+
+    /* Allocate space for the group IDs */
+    gids = (hid_t *) HDmalloc (ngroups * sizeof(hid_t));
+    if(gids==NULL) TEST_ERROR;
+
+    if((rootid = H5Gopen (fid, "/"))<0) TEST_ERROR;
+
+    /* Create all the groups */
+    for (n = 0; n < ngroups; n++) {
+        sprintf(name, "ZoneB%d", n + 1);
+        if((gids[n] = H5Gcreate (rootid, name, 0))<0) TEST_ERROR;
+    } /* end for */
+
+    /* Close all the groups */
+    for (n = 0; n < ngroups; n++)
+        if(H5Gclose(gids[n])<0) TEST_ERROR;
+
+    /* Unlink specific objects to trigger deletion of right leaf in non-leaf node */
+    if(H5Gunlink(fid,"/ZoneB77")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneB78")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneB79")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneB8")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneB80")<0) TEST_ERROR;
+
+    /* Free memory */
+    HDfree(gids);
+
+    PASSED();
+    return 0;
+
+error:
+    return 1;
+} /* end test_unlink_rightnode() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_unlink_middlenode
+ *
+ * Purpose:     Tests deleting objects in a way that triggers deletion of all
+ *              the leafs of a "middle" non-leaf B-tree node
+ *
+ * Return:      Success:        0
+ *              Failure:        number of errors
+ *
+ * Programmer:  Quincey Koziol
+ *              Monday, January 19, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_unlink_middlenode(hid_t fid)
+{
+    hid_t rootid,       /* Group ID for root group */
+        *gids;          /* Array of IDs for groups created */
+    int n,              /* Local index variable */
+        ngroups = 250;  /* Number of groups to create */
+    char name[256];     /* Name of object to create */
+
+    TESTING("Deleting right-most child in non-leaf B-tree node");
+
+    /* Allocate space for the group IDs */
+    gids = (hid_t *) HDmalloc (ngroups * sizeof(hid_t));
+    if(gids==NULL) TEST_ERROR;
+
+    if((rootid = H5Gopen (fid, "/"))<0) TEST_ERROR;
+
+    /* Create all the groups */
+    for (n = 0; n < ngroups; n++) {
+        sprintf(name, "ZoneC%d", n + 1);
+        if((gids[n] = H5Gcreate (rootid, name, 0))<0) TEST_ERROR;
+    } /* end for */
+
+    /* Close all the groups */
+    for (n = 0; n < ngroups; n++)
+        if(H5Gclose(gids[n])<0) TEST_ERROR;
+
+    /* Unlink specific objects to trigger deletion of all leafs in "interior" non-leaf node */
+    if(H5Gunlink(fid,"/ZoneC11")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC110")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC111")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC112")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC113")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC114")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC115")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC116")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC117")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC118")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC119")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC12")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC120")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC121")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC122")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC123")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC124")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC125")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC126")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC127")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC128")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC129")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC13")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC130")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC131")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC132")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC133")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC134")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC135")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC136")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC137")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC138")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC139")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC14")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC140")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC141")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC142")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC143")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC144")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC145")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC146")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC147")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC148")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC149")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC15")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC150")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC151")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC152")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC153")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC154")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC155")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC156")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC157")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC158")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC159")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC16")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC160")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC161")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC162")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC163")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC164")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC165")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC166")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC167")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC168")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC169")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC17")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC170")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC171")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC172")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC173")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC174")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC175")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC176")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC177")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC178")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC179")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC18")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC180")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC19")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC2")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC20")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC21")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC22")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC23")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC24")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC25")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC26")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC27")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC28")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC29")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC3")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC30")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC31")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC32")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC33")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC34")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC35")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC36")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC37")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC38")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC39")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC4")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC40")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC41")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC42")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC43")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC44")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC45")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC46")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC47")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC48")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC49")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC5")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC50")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC51")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC52")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC53")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC54")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC55")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC56")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC57")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC58")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC59")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC6")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC60")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC61")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC62")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC63")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC64")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC65")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC66")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC67")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC68")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC69")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC7")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC70")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC71")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC72")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC73")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC74")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC75")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC76")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC77")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC78")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC79")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC8")<0) TEST_ERROR;
+    if(H5Gunlink(fid,"/ZoneC80")<0) TEST_ERROR;
+
+    /* Free memory */
+    HDfree(gids);
+
+    PASSED();
+    return 0;
+
+error:
+    return 1;
+} /* end test_unlink_middlenode() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_resurrect_dataset
+ *
+ * Purpose:     Tests deleting a dataset while its still open and then
+ *              "resurrecting" it by creating a link to it again.
+ *
+ * Return:      Success:        0
+ *              Failure:        number of errors
+ *
+ * Programmer:  Quincey Koziol
+ *              Wednesday, July 14, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_resurrect_dataset(void)
+{
+    hid_t       f=-1, s=-1, d=-1, fapl=-1;
+    char	filename[1024];
+
+    TESTING("Resurrecting dataset after deletion");
+
+    /* Create file */
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[6], fapl, filename, sizeof filename);
+
+    /* Create the file */
+    if((f = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a dataset in the file */
+    if((s = H5Screate(H5S_SCALAR))<0) TEST_ERROR;
+    if((d = H5Dcreate(f, DATASETNAME, H5T_NATIVE_INT, s, H5P_DEFAULT))<0) TEST_ERROR;
+    if(H5Sclose(s)<0) TEST_ERROR;
+
+    /* Unlink the dataset while it's open (will mark it for deletion when closed) */
+    if(H5Gunlink(f, DATASETNAME)<0) TEST_ERROR;
+
+    /* Check that dataset name is NULL */
+    if(H5Iget_name(d, NULL, 0) != 0) TEST_ERROR;
+
+    /* Re-link the dataset to the group hierarchy (shouldn't get deleted now) */
+    if(H5Glink2(d, ".", H5G_LINK_HARD, f, DATASET2NAME)<0) TEST_ERROR;
+
+    /* Close things */
+    if(H5Dclose(d)<0) TEST_ERROR;
+    if(H5Fclose(f)<0) TEST_ERROR;
+
+    /* Re-open the file */
+    if((f=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) TEST_ERROR;
+
+    /* Attempt to open the dataset under the new name */
+    if((d=H5Dopen(f,DATASET2NAME))<0) TEST_ERROR;
+
+    /* Close things */
+    if(H5Dclose(d)<0) TEST_ERROR;
+    if(H5Fclose(f)<0) TEST_ERROR;
+    if(H5Pclose(fapl)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Sclose(s);
+	H5Dclose(d);
+	H5Fclose(f);
+	H5Pclose(fapl);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_resurrect_dataset() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_resurrect_datatype
+ *
+ * Purpose:     Tests deleting a datatype while it's still open and then
+ *              "resurrecting" it by creating a link to it again.
+ *
+ * Return:      Success:        0
+ *              Failure:        number of errors
+ *
+ * Programmer:  James Laird
+ *              Wednesday, July 28, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_resurrect_datatype(void)
+{
+    hid_t       file=-1, type=-1, fapl=-1;
+    char        filename[1024];
+
+    TESTING("Resurrecting datatype after deletion");
+
+    /* Create file */
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[7], fapl, filename, sizeof filename);
+
+    /* Create the file */
+    if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a named datatype in the file */
+    if((type = H5Tcopy (H5T_NATIVE_INT))<0) TEST_ERROR;
+    if(H5Tcommit (file, TYPENAME, type)<0) TEST_ERROR;
+
+    /* Unlink the datatype while it's open (will mark it for deletion when closed) */
+    if(H5Gunlink(file, TYPENAME)<0) TEST_ERROR;
+
+    /* Check that datatype name is NULL */
+    if(H5Iget_name(type, NULL, 0) != 0) TEST_ERROR;
+
+    /* Re-link the datatype to the group hierarchy (shouldn't get deleted now) */
+    if(H5Glink2(type, ".", H5G_LINK_HARD, file, TYPE2NAME) < 0) TEST_ERROR;
+
+    /* Close things */
+    if(H5Tclose(type)<0) TEST_ERROR;
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Re-open the file */
+    if((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) TEST_ERROR;
+
+    /* Attempt to open the datatype under the new name */
+    if((type=H5Topen(file,TYPE2NAME))<0) TEST_ERROR;
+
+    /* Close things */
+    if(H5Tclose(type)<0) TEST_ERROR;
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Tclose(type);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_resurrect_datatype() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_resurrect_group
+ *
+ * Purpose:     Tests deleting a group while it's still open and then
+ *              "resurrecting" it by creating a link to it again.
+ *
+ * Return:      Success:        0
+ *              Failure:        number of errors
+ *
+ * Programmer:  James Laird
+ *              Wednesday, July 28, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_resurrect_group(void)
+{
+    hid_t       file=-1, group=-1, fapl=-1;
+    char        filename[1024];
+
+    TESTING("Resurrecting group after deletion");
+
+    /* Create file */
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[8], fapl, filename, sizeof filename);
+
+    /* Create the file */
+    if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Create a group in the file */
+    if((group = H5Gcreate (file, GROUPNAME, 0))<0) TEST_ERROR;
+
+    /* Unlink the group while it's open (will mark it for deletion when closed) */
+    if(H5Gunlink(file, GROUPNAME)<0) TEST_ERROR;
+
+    /* Check that group's name is NULL */
+    if(H5Iget_name(group, NULL, 0) != 0) TEST_ERROR;
+
+    /* Re-link the group into the group hierarchy (shouldn't get deleted now) */
+    if(H5Glink2(group, ".", H5G_LINK_HARD, file, GROUP2NAME)<0) TEST_ERROR;
+
+    /* Close things */
+    if(H5Gclose(group)<0) TEST_ERROR;
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    /* Re-open the file */
+    if((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) TEST_ERROR;
+
+    /* Attempt to open the datatype under the new name */
+    if((group=H5Gopen(file,GROUP2NAME))<0) TEST_ERROR;
+
+    /* Close things */
+    if(H5Gclose(group)<0) TEST_ERROR;
+    if(H5Fclose(file)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Gclose(group);
+	H5Fclose(file);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_resurrect_group() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_unlink_chunked_dataset
+ *
+ * Purpose:     Tests deleting a chunked dataset
+ *
+ * Return:      Success:        0
+ *              Failure:        number of errors
+ *
+ * Programmer:  Quincey Koziol
+ *              Monday, September 27, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_unlink_chunked_dataset(void)
+{
+    hid_t fapl_id=-1;
+    hid_t file_id=-1;
+    hid_t dset_id=-1;
+    hid_t space_id=-1;
+    hid_t dcpl_id=-1;
+    hsize_t dims[FILESPACE_NDIMS]={FILESPACE_DIM0,FILESPACE_DIM1,FILESPACE_DIM2};
+    hsize_t max_dims[FILESPACE_NDIMS]={H5S_UNLIMITED,H5S_UNLIMITED,H5S_UNLIMITED};
+    hsize_t chunk_dims[FILESPACE_NDIMS]={FILESPACE_CHUNK0,FILESPACE_CHUNK1,FILESPACE_CHUNK2};
+    char filename[1024];
+
+    TESTING("Unlinking chunked dataset");
+
+    /* Create file */
+    fapl_id = h5_fileaccess();
+    h5_fixname(FILENAME[7], fapl_id, filename, sizeof filename);
+
+    /* Create the file */
+    if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id))<0) TEST_ERROR;
+
+    /* Create the dataspace */
+    if((space_id=H5Screate_simple(FILESPACE_NDIMS,dims,max_dims))<0) TEST_ERROR;
+
+    /* Create the dataset creation filter */
+    if((dcpl_id=H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR;
+
+    /* Set to chunked storage */
+    if(H5Pset_chunk(dcpl_id,FILESPACE_NDIMS,chunk_dims)<0) TEST_ERROR;
+
+    /* Set to early space allocation */
+    if(H5Pset_alloc_time(dcpl_id,H5D_ALLOC_TIME_EARLY)<0) TEST_ERROR;
+
+    /* Create the dataset */
+    if((dset_id = H5Dcreate(file_id,DATASETNAME,H5T_NATIVE_INT,space_id,dcpl_id))<0) TEST_ERROR;
+
+    /* Close the dataspace */
+    if(H5Sclose(space_id)<0) TEST_ERROR;
+
+    /* Close the dataset creation property list */
+    if(H5Pclose(dcpl_id)<0) TEST_ERROR;
+
+    /* Close the dataset */
+    if(H5Dclose(dset_id)<0) TEST_ERROR;
+
+    /* Close the file */
+    if(H5Fclose(file_id)<0) TEST_ERROR;
+
+    /* Re-open the file */
+    if((file_id = H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT))<0) TEST_ERROR;
+
+    /* Delete the dataset */
+    if(H5Gunlink(file_id, DATASETNAME)<0) TEST_ERROR;
+
+    /* Close the file */
+    if(H5Fclose(file_id)<0) TEST_ERROR;
+
+    /* Close the file access property list */
+    if(H5Pclose(fapl_id)<0) TEST_ERROR;
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Pclose(dcpl_id);
+	H5Sclose(space_id);
+	H5Dclose(dset_id);
+	H5Fclose(file_id);
+	H5Pclose(fapl_id);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_unlink_chunked_dataset() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Test H5Gunlink()
+ *
+ * Return:	Success:	zero
+ *
+ *		Failure:	non-zero
+ *
+ * Programmer:	Robb Matzke
+ *              Friday, September 25, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(void)
+{
+    hid_t	fapl, fapl2, file;
+    int		nerrors = 0;
+    char	filename[1024];
+
+    /* Metadata cache parameters */
+    int mdc_nelmts;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int rdcc_nelmts;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    size_t rdcc_nelmts;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    size_t rdcc_nbytes;
+    double rdcc_w0;
+
+    /* Set the random # seed */
+    HDsrandom((unsigned long)HDtime(NULL));
+
+    /* Open */
+    h5_reset();
+    fapl = h5_fileaccess();
+    h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
+    if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+
+    /* Make copy of regular fapl, to turn down the elements in the metadata cache */
+    if((fapl2=H5Pcopy(fapl))<0)
+        goto error;
+
+    /* Get FAPL cache settings */
+    if(H5Pget_cache(fapl2,&mdc_nelmts,&rdcc_nelmts,&rdcc_nbytes,&rdcc_w0)<0)
+        printf("H5Pget_cache failed\n");
+
+    /* Change FAPL cache settings */
+    mdc_nelmts=1;
+    if(H5Pset_cache(fapl2,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0)<0)
+        printf("H5Pset_cache failed\n");
+
+    /* Tests */
+    nerrors += test_one(file);
+    nerrors += test_many(file);
+    nerrors += test_symlink(file);
+    nerrors += test_rename(file);
+    nerrors += test_new_move();
+    nerrors += check_new_move();
+    nerrors += test_filespace();
+
+    /* Test creating & unlinking lots of objects with default FAPL */
+    nerrors += test_create_unlink("create and unlink large number of objects",fapl);
+    /* Test creating & unlinking lots of objects with a 1-element metadata cache FAPL */
+    nerrors += test_create_unlink("create and unlink large number of objects with small cache",fapl2);
+
+    nerrors += test_link_slashes();
+    nerrors += test_unlink_slashes();
+
+    /* Test specific B-tree removal issues */
+    nerrors += test_unlink_rightleaf(file);
+    nerrors += test_unlink_rightnode(file);
+    nerrors += test_unlink_middlenode(file);
+
+    /* Test "resurrecting" objects */
+    nerrors += test_resurrect_dataset();
+    nerrors += test_resurrect_datatype();
+    nerrors += test_resurrect_group();
+
+    /* Test unlinking chunked datasets */
+    nerrors += test_unlink_chunked_dataset();
+
+    /* Close */
+    if (H5Fclose(file)<0) TEST_ERROR;
+    if (nerrors) {
+	printf("***** %d FAILURE%s! *****\n", nerrors, 1==nerrors?"":"S");
+	exit(1);
+    }
+    puts("All unlink tests passed.");
+    h5_cleanup(FILENAME, fapl);
+    return 0;
+ error:
+    return 1;
+}

Added: packages/hdf5/branches/upstream/current/testpar/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/testpar/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/testpar/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,351 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+t_mpi.lo: \
+   $(srcdir)/t_mpi.c \
+   $(srcdir)/testphdf5.h \
+   $(top_srcdir)/test/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+testphdf5.lo: \
+   $(srcdir)/testphdf5.c \
+   $(srcdir)/testphdf5.h \
+   $(top_srcdir)/test/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+t_dset.lo: \
+   $(srcdir)/t_dset.c \
+   $(srcdir)/testphdf5.h \
+   $(top_srcdir)/test/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+t_file.lo: \
+   $(srcdir)/t_file.c \
+   $(srcdir)/testphdf5.h \
+   $(top_srcdir)/test/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+t_mdset.lo: \
+   $(srcdir)/t_mdset.c \
+   $(srcdir)/testphdf5.h \
+   $(top_srcdir)/test/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+t_ph5basic.lo: \
+   $(srcdir)/t_ph5basic.c \
+   $(srcdir)/testphdf5.h \
+   $(top_srcdir)/test/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+t_coll_chunk.lo: \
+   $(srcdir)/t_coll_chunk.c \
+   $(srcdir)/testphdf5.h \
+   $(top_srcdir)/test/h5test.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Dprivate.h \
+   $(top_srcdir)/src/H5FDprivate.h \
+   $(top_srcdir)/src/H5Oprivate.h \
+   $(top_srcdir)/src/H5HGprivate.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Tprivate.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5RSprivate.h \
+   $(top_srcdir)/src/H5Rprivate.h \
+   $(top_srcdir)/src/H5Zprivate.h
+t_span_tree.lo: \
+   $(srcdir)/t_span_tree.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(srcdir)/testphdf5.h \
+   $(top_srcdir)/test/h5test.h

Added: packages/hdf5/branches/upstream/current/testpar/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/testpar/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/testpar/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,63 @@
+##
+## 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.
+##
+## hdf5 Parallel Library Test Makefile(.in)
+##
+top_srcdir=@top_srcdir@
+top_builddir=..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Add the include directory to the C preprocessor flags the the hdf5 library
+## to the library list.
+CPPFLAGS=-I. -I$(srcdir) -I../src -I$(top_srcdir)/src -I$(top_srcdir)/test @CPPFLAGS@
+LIBHDF5=../src/libhdf5.la
+LIBH5TEST=../test/libh5test.la
+
+## These tests are parallel
+RUNTEST=$(RUNPARALLEL)
+
+## Test programs and scripts.
+##
+TEST_PROGS_PARA=t_mpi testphdf5
+TEST_SCRIPTS_PARA=testph5.sh
+
+## These are our main targets
+PROGS=$(TEST_PROGS_PARA)
+
+## Temporary files
+## MPItest.h5 is from t_mpi
+## Para*.h5 are from testphdf
+## *.clog are from MPE option
+MOSTLYCLEAN=MPItest.h5 Para*.h5 *.clog
+DISTCLEAN=go Makefile testph5.sh
+
+## Test source files
+TEST_PHDF5_SRC=testphdf5.c t_dset.c t_file.c t_mdset.c t_ph5basic.c t_coll_chunk.c t_span_tree.c
+TEST_PHDF5_OBJ=$(TEST_PHDF5_SRC:.c=.lo)
+TEST_SRC=t_mpi.c $(TEST_PHDF5_SRC)
+TEST_OBJ=$(TEST_SRC:.c=.lo)
+TEST_HDR=testphdf5.h
+
+## How to build the tests... They all depend on the hdf5 library
+$(PROGS): $(LIBHDF5) $(LIBH5TEST)
+
+$(TEST_OBJ): $(TEST_HDR)
+
+t_mpi: t_mpi.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ t_mpi.lo $(LIBH5TEST) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+testphdf5: $(TEST_PHDF5_OBJ)
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(TEST_PHDF5_OBJ) $(LIBH5TEST) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/testpar/t_coll_chunk.c
===================================================================
--- packages/hdf5/branches/upstream/current/testpar/t_coll_chunk.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/testpar/t_coll_chunk.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,450 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "testphdf5.h"
+#include "H5Dprivate.h"
+
+/*#define SPACE_DIM1 256
+#define SPACE_DIM2 256
+#define BYROW_CONT 1
+#define BYROW_DISCONT 2
+#define DSET_COLLECTIVE_CHUNK_NAME "coll_chunk_name"
+*/
+
+/* some commonly used routines for collective chunk IO tests*/
+static void ccslab_set(int mpi_rank,int mpi_size,hsize_t start[],hsize_t count[],
+		hsize_t stride[],hsize_t block[],int mode);
+
+static void ccdataset_fill(hsize_t start[],hsize_t count[],
+                 hsize_t stride[],hsize_t block[],DATATYPE*dataset);
+
+static void ccdataset_print(hsize_t start[],hsize_t block[],DATATYPE*dataset);
+
+static int ccdataset_vrfy(hsize_t start[], hsize_t count[], hsize_t stride[],
+                 hsize_t block[], DATATYPE *dataset, DATATYPE *original);
+
+static void coll_chunktest(const char* filename,int chunk_factor,int select_factor);
+
+/*-------------------------------------------------------------------------
+ * Function:	coll_chunk1
+ *
+ * Purpose:	Test the special case of the collective chunk io
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Unknown
+ *		July 12th, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+coll_chunk1(void)
+{
+
+  const char *filename;
+  filename = GetTestParameters();
+  coll_chunktest(filename,1,BYROW_CONT);
+
+}
+
+void
+coll_chunk2(void)
+{
+
+  const char *filename;
+  filename = GetTestParameters();
+  coll_chunktest(filename,1,BYROW_DISCONT);
+
+}
+
+
+void
+coll_chunk3(void)
+{
+
+  const char *filename;
+  int mpi_size;
+  MPI_Comm comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm,&mpi_size);
+  filename = GetTestParameters();
+  coll_chunktest(filename,mpi_size,BYROW_CONT);
+
+}
+
+
+void
+coll_chunk4(void)
+{
+
+  const char *filename;
+  int mpi_size;
+  MPI_Comm comm = MPI_COMM_WORLD;
+  MPI_Comm_size(comm,&mpi_size);
+  filename = GetTestParameters();
+  coll_chunktest(filename,mpi_size*2,BYROW_DISCONT);
+
+}
+
+static void
+coll_chunktest(const char* filename,int chunk_factor,int select_factor) {
+
+  hid_t	   file,dataset, file_dataspace;
+  hid_t    acc_plist,xfer_plist,crp_plist;
+  hbool_t  use_gpfs = FALSE;
+  hsize_t  dims[RANK], chunk_dims[RANK];
+  int*     data_array1  = NULL;
+  int*     data_origin1 = NULL;
+  herr_t   status;
+  hsize_t start[RANK];
+  hsize_t  count[RANK],stride[RANK],block[RANK];
+#ifdef H5_HAVE_INSTRUMENTED_LIBRARY
+  unsigned prop_value;
+#endif /* H5_HAVE_INSTRUMENTED_LIBRARY */
+  int mpi_size,mpi_rank;
+  MPI_Comm comm = MPI_COMM_WORLD;
+  MPI_Info info = MPI_INFO_NULL;
+
+   /* set up MPI parameters */
+  MPI_Comm_size(comm,&mpi_size);
+  MPI_Comm_rank(comm,&mpi_rank);
+
+  /* Create the data space */
+  acc_plist = create_faccess_plist(comm,info,facc_type,use_gpfs);
+  VRFY((acc_plist >= 0),"");
+
+  file = H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_plist);
+  VRFY((file >= 0),"H5Fcreate succeeded");
+
+  status = H5Pclose(acc_plist);
+  VRFY((status >= 0),"");
+
+  /* setup dimensionality object */
+
+    dims[0] = SPACE_DIM1;
+    dims[1] = SPACE_DIM2;
+
+  /* each process takes a slab of rows
+    stride[0] = 1;
+    stride[1] = 1;
+    count[0]  = SPACE_DIM1/mpi_size;
+    count[1]  = SPACE_DIM2;
+    start[0]  = mpi_rank*count[0];
+    start[1]  = 0;
+    block[0]  = 1;
+    block[1]  = 1;
+  */
+
+ /* allocate memory for data buffer */
+    data_array1 = (int *)malloc(SPACE_DIM1*SPACE_DIM2*sizeof(int));
+    VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
+
+     /* set up dimensions of the slab this process accesses */
+    ccslab_set(mpi_rank, mpi_size, start, count, stride, block, select_factor);
+
+    file_dataspace = H5Screate_simple(2, dims, NULL);
+    VRFY((file_dataspace >= 0),"file dataspace created succeeded");
+
+    crp_plist = H5Pcreate(H5P_DATASET_CREATE);
+    VRFY((crp_plist >= 0),"");
+
+    /* test1: chunk size is equal to dataset size */
+    chunk_dims[0] = SPACE_DIM1/chunk_factor;
+
+    /* to decrease the testing time, maintain bigger chunk size */
+    if(chunk_factor >2) chunk_dims[1] = SPACE_DIM2/2;
+    else chunk_dims[1] = SPACE_DIM2/chunk_factor;
+    status = H5Pset_chunk(crp_plist, 2, chunk_dims);
+    VRFY((status >= 0),"chunk creation property list succeeded");
+
+    dataset = H5Dcreate(file,DSET_COLLECTIVE_CHUNK_NAME,H5T_NATIVE_INT,
+			file_dataspace,crp_plist);
+    VRFY((dataset >= 0),"dataset created succeeded");
+/*    H5Sclose(file_dataspace); */
+
+    status = H5Pclose(crp_plist);
+    VRFY((status >= 0),"");
+
+    /*put some trivial data in the data array */
+    ccdataset_fill(start, stride,count,block, data_array1);
+    MESG("data_array initialized");
+
+/*    file_dataspace = H5Dget_space(dataset); */
+    status=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride,
+	    count, block);
+    VRFY((status >= 0),"hyperslab selection succeeded");
+
+    /* set up the collective transfer property list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((xfer_plist >= 0),"");
+
+    status = H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    VRFY((status>= 0),"MPIO collective transfer property succeeded");
+
+    /* write data collectively */
+    status = H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((status >= 0),"dataset write succeeded");
+
+    status = H5Dclose(dataset);
+    VRFY((status >= 0),"");
+
+    /* check whether using collective IO */
+    /* Should use H5Pget and H5Pinsert to handle this test. */
+
+    status = H5Pclose(xfer_plist);
+    VRFY((status >= 0),"property list closed");
+
+    status = H5Sclose(file_dataspace);
+    VRFY((status >= 0),"");
+
+    status = H5Fclose(file);
+    VRFY((status >= 0),"");
+
+    if (data_array1) free(data_array1);
+
+    /* Using read to verify the data inside the dataset is correct */
+
+    /* allocate memory for data buffer */
+    data_array1 = (int *)malloc(SPACE_DIM1*SPACE_DIM2*sizeof(int));
+    VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
+
+     /* allocate memory for data buffer */
+    data_origin1 = (int *)malloc(SPACE_DIM1*SPACE_DIM2*sizeof(int));
+    VRFY((data_origin1 != NULL), "data_origin1 malloc succeeded");
+
+    acc_plist = create_faccess_plist(comm, info, facc_type, use_gpfs);
+    VRFY((acc_plist >= 0),"MPIO creation property list succeeded");
+
+    file = H5Fopen(filename,H5F_ACC_RDONLY,acc_plist);
+    VRFY((file >= 0),"H5Fcreate succeeded");
+
+    status = H5Pclose(acc_plist);
+    VRFY((status >= 0),"");
+
+    /* open the dataset collectively */
+    dataset = H5Dopen(file, DSET_COLLECTIVE_CHUNK_NAME);
+    VRFY((dataset >= 0), "");
+
+    /* set up dimensions of the slab this process accesses */
+    ccslab_set(mpi_rank, mpi_size, start, count, stride, block, select_factor);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset);
+    VRFY((file_dataspace >= 0), "");
+    status=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((status >= 0), "");
+
+    /* fill dataset with test data */
+    ccdataset_fill(start, stride,count,block, data_origin1);
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((xfer_plist >= 0),"");
+    status = H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    VRFY((status>= 0),"MPIO collective transfer property succeeded");
+    status = H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, file_dataspace,
+                      xfer_plist, data_array1);
+    VRFY((status >=0),"dataset read succeeded");
+
+    /* verify the read data with original expected data */
+
+    status = ccdataset_vrfy(start, count, stride, block, data_array1, data_origin1);
+    if (status) nerrors++;
+
+    status = H5Pclose(xfer_plist);
+    VRFY((status >= 0),"property list closed");
+
+    /* close dataset collectively */
+    status=H5Dclose(dataset);
+    VRFY((status >= 0), "");
+
+    /* release all IDs created */
+    H5Sclose(file_dataspace);
+
+    /* close the file collectively */
+    H5Fclose(file);
+
+    /* release data buffers */
+    if (data_array1) free(data_array1);
+    if (data_origin1) free(data_origin1);
+
+}
+
+
+static void
+ccslab_set(int mpi_rank, int mpi_size, hsize_t start[], hsize_t count[],
+	 hsize_t stride[], hsize_t block[], int mode)
+{
+    switch (mode){
+    case BYROW_CONT:
+	/* Each process takes a slabs of rows. */
+	block[0] = 1;
+	block[1] = 1;
+	stride[0] = 1;
+	stride[1] = 1;
+	count[0] = SPACE_DIM1/mpi_size;
+	count[1] = SPACE_DIM2;
+	start[0] = mpi_rank*count[0];
+	start[1] = 0;
+
+	if (VERBOSE_MED) printf("slab_set BYROW_CONT\n");
+	break;
+    case BYROW_DISCONT:
+	/* Each process takes several disjoint blocks. */
+	block[0] = 1;
+	block[1] = 1;
+        stride[0] = 3;
+        stride[1] = 3;
+        count[0]  = (SPACE_DIM1/mpi_size)/(stride[0]*block[0]);
+        count[1]  = (SPACE_DIM2)/(stride[1]*block[1]);
+	start[0] = SPACE_DIM1/mpi_size*mpi_rank;
+	start[1] = 0;
+if (VERBOSE_MED) printf("slab_set BYROW_DISCONT\n");
+	break;
+    default:
+	/* Unknown mode.  Set it to cover the whole dataset. */
+	printf("unknown slab_set mode (%d)\n", mode);
+	block[0] = SPACE_DIM1;
+	block[1] = SPACE_DIM2;
+	stride[0] = block[0];
+	stride[1] = block[1];
+	count[0] = 1;
+	count[1] = 1;
+	start[0] = 0;
+	start[1] = 0;
+if (VERBOSE_MED) printf("slab_set wholeset\n");
+	break;
+    }
+if (VERBOSE_MED){
+    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), stride[]=(%lu,%lu), block[]=(%lu,%lu), total datapoints=%lu\n",
+	(unsigned long)start[0], (unsigned long)start[1], (unsigned long)count[0], (unsigned long)count[1],
+	(unsigned long)stride[0], (unsigned long)stride[1], (unsigned long)block[0], (unsigned long)block[1],
+	(unsigned long)(block[0]*block[1]*count[0]*count[1]));
+    }
+}
+
+
+/*
+ * Fill the dataset with trivial data for testing.
+ * Assume dimension rank is 2 and data is stored contiguous.
+ */
+static void
+ccdataset_fill(hsize_t start[], hsize_t stride[], hsize_t count[], hsize_t block[], DATATYPE * dataset)
+{
+    DATATYPE *dataptr = dataset;
+    DATATYPE *tmptr;
+    hsize_t i, j,k1,k2;
+
+    /* put some trivial data in the data_array */
+    tmptr = dataptr;
+
+    /* assign the disjoint block (two-dimensional)data array value
+       through the pointer */
+     for (k1 = 0; k1 < count[0]; k1++) {
+      for(i = 0;i < block[0]; i++) {
+        for(k2 = 0; k2<count[1]; k2++) {
+          for(j=0;j<block[1]; j++) {
+
+            dataptr = tmptr + ((start[0]+k1*stride[0]+i)*SPACE_DIM2+
+			       start[1]+k2*stride[1]+j);
+
+	      *dataptr = (DATATYPE)(k1+k2+i+j);
+          }
+         }
+      }
+    }
+
+}
+
+/*
+ * Print the first block of the content of the dataset.
+ */
+static void
+ccdataset_print(hsize_t start[], hsize_t block[], DATATYPE * dataset)
+{
+    DATATYPE *dataptr = dataset;
+    hsize_t i, j;
+
+    /* print the column heading */
+    printf("Print only the first block of the dataset\n");
+    printf("%-8s", "Cols:");
+    for (j=0; j < block[1]; j++){
+	printf("%3lu ", (unsigned long)(start[1]+j));
+    }
+    printf("\n");
+
+    /* print the slab data */
+    for (i=0; i < block[0]; i++){
+	printf("Row %2lu: ", (unsigned long)(i+start[0]));
+	for (j=0; j < block[1]; j++){
+	    printf("%03d ", *dataptr++);
+	}
+	printf("\n");
+    }
+}
+
+
+/*
+ * Print the content of the dataset.
+ */
+static int
+ccdataset_vrfy(hsize_t start[], hsize_t count[], hsize_t stride[], hsize_t block[], DATATYPE *dataset, DATATYPE *original)
+{
+    hsize_t i, j,k1,k2;
+    int vrfyerrs;
+    DATATYPE *dataptr,*oriptr;
+
+    /* print it if VERBOSE_MED */
+    if (VERBOSE_MED) {
+	printf("dataset_vrfy dumping:::\n");
+	printf("start(%lu, %lu), count(%lu, %lu), stride(%lu, %lu), block(%lu, %lu)\n",
+	    (unsigned long)start[0], (unsigned long)start[1], (unsigned long)count[0], (unsigned long)count[1],
+	    (unsigned long)stride[0], (unsigned long)stride[1], (unsigned long)block[0], (unsigned long)block[1]);
+	printf("original values:\n");
+	ccdataset_print(start, block, original);
+	printf("compared values:\n");
+	ccdataset_print(start, block, dataset);
+    }
+
+    vrfyerrs = 0;
+
+    for (k1 = 0; k1 < count[0];k1++) {
+      for(i = 0;i < block[0];i++) {
+        for(k2 = 0; k2<count[1];k2++) {
+          for(j=0;j<block[1];j++) {
+
+             dataptr = dataset + ((start[0]+k1*stride[0]+i)*SPACE_DIM2+
+			       start[1]+k2*stride[1]+j);
+	     oriptr =  original + ((start[0]+k1*stride[0]+i)*SPACE_DIM2+
+			       start[1]+k2*stride[1]+j);
+
+	    if (*dataptr != *oriptr){
+		if (vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED){
+		    printf("Dataset Verify failed at [%lu][%lu]: expect %d, got %d\n",
+			(unsigned long)i, (unsigned long)j,
+	     	    	*(original), *(dataset));
+		}
+	    }
+	  }
+	}
+      }
+    }
+    if (vrfyerrs > MAX_ERR_REPORT && !VERBOSE_MED)
+	printf("[more errors ...]\n");
+    if (vrfyerrs)
+	printf("%d errors found in ccdataset_vrfy\n", vrfyerrs);
+    return(vrfyerrs);
+}

Added: packages/hdf5/branches/upstream/current/testpar/t_dset.c
===================================================================
--- packages/hdf5/branches/upstream/current/testpar/t_dset.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/testpar/t_dset.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2239 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Parallel tests for datasets
+ */
+
+/*
+ * Example of using the parallel HDF5 library to access datasets.
+ *
+ * This program contains three major parts.  Part 1 tests fixed dimension
+ * datasets, for both independent and collective transfer modes.
+ * Part 2 tests extendible datasets, for independent transfer mode
+ * only.
+ * Part 3 tests extendible datasets, for collective transfer mode
+ * only.
+ */
+
+#include "testphdf5.h"
+
+/*
+ * The following are various utility routines used by the tests.
+ */
+
+/*
+ * Setup the dimensions of the hyperslab.
+ * Two modes--by rows or by columns.
+ * Assume dimension rank is 2.
+ * BYROW	divide into slabs of rows
+ * BYCOL	divide into blocks of columns
+ * ZROW		same as BYROW except process 0 gets 0 rows
+ * ZCOL		same as BYCOL except process 0 gets 0 columns
+ */
+static void
+slab_set(int mpi_rank, int mpi_size, hsize_t start[], hsize_t count[],
+	 hsize_t stride[], hsize_t block[], int mode)
+{
+    switch (mode){
+    case BYROW:
+	/* Each process takes a slabs of rows. */
+	block[0] = dim0/mpi_size;
+	block[1] = dim1;
+	stride[0] = block[0];
+	stride[1] = block[1];
+	count[0] = 1;
+	count[1] = 1;
+	start[0] = mpi_rank*block[0];
+	start[1] = 0;
+if (VERBOSE_MED) printf("slab_set BYROW\n");
+	break;
+    case BYCOL:
+	/* Each process takes a block of columns. */
+	block[0] = dim0;
+	block[1] = dim1/mpi_size;
+	stride[0] = block[0];
+	stride[1] = block[1];
+	count[0] = 1;
+	count[1] = 1;
+	start[0] = 0;
+	start[1] = mpi_rank*block[1];
+if (VERBOSE_MED) printf("slab_set BYCOL\n");
+	break;
+    case ZROW:
+	/* Similar to BYROW except process 0 gets 0 row */
+	block[0] = (mpi_rank ? dim0/mpi_size : 0);
+	block[1] = dim1;
+        stride[0] = (mpi_rank ? block[0] : 1);  /* avoid setting stride to 0 */
+	stride[1] = block[1];
+	count[0] = 1;
+	count[1] = 1;
+	start[0] = (mpi_rank? mpi_rank*block[0] : 0);
+	start[1] = 0;
+if (VERBOSE_MED) printf("slab_set ZROW\n");
+	break;
+    case ZCOL:
+	/* Similar to BYCOL except process 0 gets 0 column */
+	block[0] = dim0;
+	block[1] = (mpi_rank ? dim1/mpi_size : 0);
+	stride[0] = block[0];
+        stride[1] = (mpi_rank ? block[1] : 1);  /* avoid setting stride to 0 */
+	count[0] = 1;
+	count[1] = 1;
+	start[0] = 0;
+	start[1] = (mpi_rank? mpi_rank*block[1] : 0);
+if (VERBOSE_MED) printf("slab_set ZCOL\n");
+	break;
+    default:
+	/* Unknown mode.  Set it to cover the whole dataset. */
+	printf("unknown slab_set mode (%d)\n", mode);
+	block[0] = dim0;
+	block[1] = dim1;
+	stride[0] = block[0];
+	stride[1] = block[1];
+	count[0] = 1;
+	count[1] = 1;
+	start[0] = 0;
+	start[1] = 0;
+if (VERBOSE_MED) printf("slab_set wholeset\n");
+	break;
+    }
+if (VERBOSE_MED){
+    printf("start[]=(%lu,%lu), count[]=(%lu,%lu), stride[]=(%lu,%lu), block[]=(%lu,%lu), total datapoints=%lu\n",
+	(unsigned long)start[0], (unsigned long)start[1], (unsigned long)count[0], (unsigned long)count[1],
+	(unsigned long)stride[0], (unsigned long)stride[1], (unsigned long)block[0], (unsigned long)block[1],
+	(unsigned long)(block[0]*block[1]*count[0]*count[1]));
+    }
+}
+
+
+/*
+ * Fill the dataset with trivial data for testing.
+ * Assume dimension rank is 2 and data is stored contiguous.
+ */
+static void
+dataset_fill(hsize_t start[], hsize_t block[], DATATYPE * dataset)
+{
+    DATATYPE *dataptr = dataset;
+    hsize_t i, j;
+
+    /* put some trivial data in the data_array */
+    for (i=0; i < block[0]; i++){
+	for (j=0; j < block[1]; j++){
+	    *dataptr = (DATATYPE)((i+start[0])*100 + (j+start[1]+1));
+	    dataptr++;
+	}
+    }
+}
+
+
+/*
+ * Print the content of the dataset.
+ */
+static void
+dataset_print(hsize_t start[], hsize_t block[], DATATYPE * dataset)
+{
+    DATATYPE *dataptr = dataset;
+    hsize_t i, j;
+
+    /* print the column heading */
+    printf("%-8s", "Cols:");
+    for (j=0; j < block[1]; j++){
+	printf("%3lu ", (unsigned long)(start[1]+j));
+    }
+    printf("\n");
+
+    /* print the slab data */
+    for (i=0; i < block[0]; i++){
+	printf("Row %2lu: ", (unsigned long)(i+start[0]));
+	for (j=0; j < block[1]; j++){
+	    printf("%03d ", *dataptr++);
+	}
+	printf("\n");
+    }
+}
+
+
+/*
+ * Print the content of the dataset.
+ */
+int
+dataset_vrfy(hsize_t start[], hsize_t count[], hsize_t stride[], hsize_t block[], DATATYPE *dataset, DATATYPE *original)
+{
+    hsize_t i, j;
+    int vrfyerrs;
+
+    /* print it if VERBOSE_MED */
+    if (VERBOSE_MED) {
+	printf("dataset_vrfy dumping:::\n");
+	printf("start(%lu, %lu), count(%lu, %lu), stride(%lu, %lu), block(%lu, %lu)\n",
+	    (unsigned long)start[0], (unsigned long)start[1], (unsigned long)count[0], (unsigned long)count[1],
+	    (unsigned long)stride[0], (unsigned long)stride[1], (unsigned long)block[0], (unsigned long)block[1]);
+	printf("original values:\n");
+	dataset_print(start, block, original);
+	printf("compared values:\n");
+	dataset_print(start, block, dataset);
+    }
+
+    vrfyerrs = 0;
+    for (i=0; i < block[0]; i++){
+	for (j=0; j < block[1]; j++){
+	    if (*dataset != *original){
+		if (vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED){
+		    printf("Dataset Verify failed at [%lu][%lu](row %lu, col %lu): expect %d, got %d\n",
+			(unsigned long)i, (unsigned long)j,
+			(unsigned long)(i+start[0]), (unsigned long)(j+start[1]),
+			*(original), *(dataset));
+		}
+		dataset++;
+		original++;
+	    }
+	}
+    }
+    if (vrfyerrs > MAX_ERR_REPORT && !VERBOSE_MED)
+	printf("[more errors ...]\n");
+    if (vrfyerrs)
+	printf("%d errors found in dataset_vrfy\n", vrfyerrs);
+    return(vrfyerrs);
+}
+
+
+/*
+ * Part 1.a--Independent read/write for fixed dimension datasets.
+ */
+
+/*
+ * Example of using the parallel HDF5 library to create two datasets
+ * in one HDF5 files with parallel MPIO access support.
+ * The Datasets are of sizes (number-of-mpi-processes x dim0) x dim1.
+ * Each process controls only a slab of size dim0 x dim1 within each
+ * dataset.
+ */
+
+void
+dataset_writeInd(void)
+{
+    hid_t fid;                  /* HDF5 file ID */
+    hid_t acc_tpl;		/* File access templates */
+    hid_t sid;   		/* Dataspace ID */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    hbool_t use_gpfs = FALSE;   /* Use GPFS hints */
+    hsize_t dims[RANK];   	/* dataset dim sizes */
+    DATATYPE *data_array1 = NULL;	/* data buffer */
+    const char *filename;
+
+    hsize_t   start[RANK];			/* for hyperslab setting */
+    hsize_t count[RANK], stride[RANK];		/* for hyperslab setting */
+    hsize_t block[RANK];			/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+    int mpi_size, mpi_rank;
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    filename = GetTestParameters();
+    if (VERBOSE_MED)
+	printf("Independent write test on file %s\n", filename);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+    /* allocate memory for data buffer */
+    data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
+    VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
+
+    /* ----------------------------------------
+     * CREATE AN HDF5 FILE WITH PARALLEL ACCESS
+     * ---------------------------------------*/
+    /* setup file access template */
+    acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs);
+    VRFY((acc_tpl >= 0), "");
+
+    /* create the file collectively */
+    fid=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
+    VRFY((fid >= 0), "H5Fcreate succeeded");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl);
+    VRFY((ret >= 0), "");
+
+
+    /* ---------------------------------------------
+     * Define the dimensions of the overall datasets
+     * and the slabs local to the MPI process.
+     * ------------------------------------------- */
+    /* setup dimensionality object */
+    dims[0] = dim0;
+    dims[1] = dim1;
+    sid = H5Screate_simple (RANK, dims, NULL);
+    VRFY((sid >= 0), "H5Screate_simple succeeded");
+
+
+    /* create a dataset collectively */
+    dataset1 = H5Dcreate(fid, DATASETNAME1, H5T_NATIVE_INT, sid,
+			H5P_DEFAULT);
+    VRFY((dataset1 >= 0), "H5Dcreate succeeded");
+
+    /* create another dataset collectively */
+    dataset2 = H5Dcreate(fid, DATASETNAME2, H5T_NATIVE_INT, sid,
+			H5P_DEFAULT);
+    VRFY((dataset2 >= 0), "H5Dcreate succeeded");
+
+
+    /*
+     * To test the independent orders of writes between processes, all
+     * even number processes write to dataset1 first, then dataset2.
+     * All odd number processes write to dataset2 first, then dataset1.
+     */
+
+    /* set up dimensions of the slab this process accesses */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYROW);
+
+    /* put some trivial data in the data_array */
+    dataset_fill(start, block, data_array1);
+    MESG("data_array initialized");
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+
+    /* write data independently */
+    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    VRFY((ret >= 0), "H5Dwrite dataset1 succeeded");
+    /* write data independently */
+    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    VRFY((ret >= 0), "H5Dwrite dataset2 succeeded");
+
+    /* setup dimensions again to write with zero rows for process 0 */
+    if (VERBOSE_MED)
+	printf("writeInd by some with zero row\n");
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, ZROW);
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+    /* need to make mem_dataspace to match for process 0 */
+    if (MAINPROCESS){
+	ret=H5Sselect_hyperslab(mem_dataspace, H5S_SELECT_SET, start, stride, count, block);
+	VRFY((ret >= 0), "H5Sset_hyperslab mem_dataspace succeeded");
+    }
+    MESG("writeInd by some with zero row");
+if ((mpi_rank/2)*2 != mpi_rank){
+    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    VRFY((ret >= 0), "H5Dwrite dataset1 by ZROW succeeded");
+}
+#ifdef BARRIER_CHECKS
+MPI_Barrier(MPI_COMM_WORLD);
+#endif /* BARRIER_CHECKS */
+
+    /* release dataspace ID */
+    H5Sclose(file_dataspace);
+
+    /* close dataset collectively */
+    ret=H5Dclose(dataset1);
+    VRFY((ret >= 0), "H5Dclose1 succeeded");
+    ret=H5Dclose(dataset2);
+    VRFY((ret >= 0), "H5Dclose2 succeeded");
+
+    /* release all IDs created */
+    H5Sclose(sid);
+
+    /* close the file collectively */
+    H5Fclose(fid);
+
+    /* release data buffers */
+    if (data_array1) free(data_array1);
+}
+
+/* Example of using the parallel HDF5 library to read a dataset */
+void
+dataset_readInd(void)
+{
+    hid_t fid;                  /* HDF5 file ID */
+    hid_t acc_tpl;		/* File access templates */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    hbool_t use_gpfs = FALSE;   /* Use GPFS hints */
+    DATATYPE *data_array1 = NULL;	/* data buffer */
+    DATATYPE *data_origin1 = NULL; 	/* expected data buffer */
+    const char *filename;
+
+    hsize_t start[RANK];			/* for hyperslab setting */
+    hsize_t count[RANK], stride[RANK];		/* for hyperslab setting */
+    hsize_t block[RANK];			/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+    int mpi_size, mpi_rank;
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    filename = GetTestParameters();
+    if (VERBOSE_MED)
+	printf("Independent read test on file %s\n", filename);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+    /* allocate memory for data buffer */
+    data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
+    VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
+    data_origin1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
+    VRFY((data_origin1 != NULL), "data_origin1 malloc succeeded");
+
+    /* setup file access template */
+    acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs);
+    VRFY((acc_tpl >= 0), "");
+
+    /* open the file collectively */
+    fid=H5Fopen(filename,H5F_ACC_RDONLY,acc_tpl);
+    VRFY((fid >= 0), "");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl);
+    VRFY((ret >= 0), "");
+
+    /* open the dataset1 collectively */
+    dataset1 = H5Dopen(fid, DATASETNAME1);
+    VRFY((dataset1 >= 0), "");
+
+    /* open another dataset collectively */
+    dataset2 = H5Dopen(fid, DATASETNAME1);
+    VRFY((dataset2 >= 0), "");
+
+
+    /* set up dimensions of the slab this process accesses */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYROW);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    VRFY((file_dataspace >= 0), "");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+
+    /* fill dataset with test data */
+    dataset_fill(start, block, data_origin1);
+
+    /* read data independently */
+    ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    VRFY((ret >= 0), "");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, block, data_array1, data_origin1);
+    if (ret) nerrors++;
+
+    /* read data independently */
+    ret = H5Dread(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    VRFY((ret >= 0), "");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, block, data_array1, data_origin1);
+    if (ret) nerrors++;
+
+    /* close dataset collectively */
+    ret=H5Dclose(dataset1);
+    VRFY((ret >= 0), "");
+    ret=H5Dclose(dataset2);
+    VRFY((ret >= 0), "");
+
+    /* release all IDs created */
+    H5Sclose(file_dataspace);
+
+    /* close the file collectively */
+    H5Fclose(fid);
+
+    /* release data buffers */
+    if (data_array1) free(data_array1);
+    if (data_origin1) free(data_origin1);
+}
+
+
+/*
+ * Part 1.b--Collective read/write for fixed dimension datasets.
+ */
+
+/*
+ * Example of using the parallel HDF5 library to create two datasets
+ * in one HDF5 file with collective parallel access support.
+ * The Datasets are of sizes (number-of-mpi-processes x dim0) x dim1.
+ * Each process controls only a slab of size dim0 x dim1 within each
+ * dataset. [Note: not so yet.  Datasets are of sizes dim0xdim1 and
+ * each process controls a hyperslab within.]
+ */
+
+void
+dataset_writeAll(void)
+{
+    hid_t fid;                  /* HDF5 file ID */
+    hid_t acc_tpl;		/* File access templates */
+    hid_t xfer_plist;		/* Dataset transfer properties list */
+    hid_t sid;   		/* Dataspace ID */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2, dataset3, dataset4;	/* Dataset ID */
+    hid_t datatype;		/* Datatype ID */
+    hbool_t use_gpfs = FALSE;   /* Use GPFS hints */
+    hsize_t dims[RANK];   	/* dataset dim sizes */
+    DATATYPE *data_array1 = NULL;	/* data buffer */
+    const char *filename;
+
+    hsize_t start[RANK];			/* for hyperslab setting */
+    hsize_t count[RANK], stride[RANK];		/* for hyperslab setting */
+    hsize_t block[RANK];			/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+    int mpi_size, mpi_rank;
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    filename = GetTestParameters();
+    if (VERBOSE_MED)
+	printf("Collective write test on file %s\n", filename);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+    /* allocate memory for data buffer */
+    data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
+    VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
+
+    /* -------------------
+     * START AN HDF5 FILE
+     * -------------------*/
+    /* setup file access template */
+    acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs);
+    VRFY((acc_tpl >= 0), "");
+
+    /* create the file collectively */
+    fid=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
+    VRFY((fid >= 0), "H5Fcreate succeeded");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl);
+    VRFY((ret >= 0), "");
+
+
+    /* --------------------------
+     * Define the dimensions of the overall datasets
+     * and create the dataset
+     * ------------------------- */
+    /* setup 2-D dimensionality object */
+    dims[0] = dim0;
+    dims[1] = dim1;
+    sid = H5Screate_simple (RANK, dims, NULL);
+    VRFY((sid >= 0), "H5Screate_simple succeeded");
+
+
+    /* create a dataset collectively */
+    dataset1 = H5Dcreate(fid, DATASETNAME1, H5T_NATIVE_INT, sid, H5P_DEFAULT);
+    VRFY((dataset1 >= 0), "H5Dcreate succeeded");
+
+    /* create another dataset collectively */
+    datatype = H5Tcopy(H5T_NATIVE_INT);
+    ret = H5Tset_order(datatype, H5T_ORDER_LE);
+    VRFY((ret >= 0), "H5Tset_order succeeded");
+
+    dataset2 = H5Dcreate(fid, DATASETNAME2, datatype, sid, H5P_DEFAULT);
+    VRFY((dataset2 >= 0), "H5Dcreate 2 succeeded");
+
+    /* create a third dataset collectively */
+    dataset3 = H5Dcreate(fid, DATASETNAME3, H5T_NATIVE_INT, sid, H5P_DEFAULT);
+    VRFY((dataset3 >= 0), "H5Dcreate succeeded");
+
+    /* release 2-D space ID created */
+    H5Sclose(sid);
+
+    /* setup scalar dimensionality object */
+    sid = H5Screate(H5S_SCALAR);
+    VRFY((sid >= 0), "H5Screate succeeded");
+
+    /* create a fourth dataset collectively */
+    dataset4 = H5Dcreate(fid, DATASETNAME4, H5T_NATIVE_INT, sid, H5P_DEFAULT);
+    VRFY((dataset4 >= 0), "H5Dcreate succeeded");
+
+    /* release scalar space ID created */
+    H5Sclose(sid);
+
+    /*
+     * Set up dimensions of the slab this process accesses.
+     */
+
+    /* Dataset1: each process takes a block of rows. */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYROW);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+
+    /* fill the local slab with some trivial data */
+    dataset_fill(start, block, data_array1);
+    MESG("data_array initialized");
+    if (VERBOSE_MED){
+	MESG("data_array created");
+	dataset_print(start, block, data_array1);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((xfer_plist >= 0), "H5Pcreate xfer succeeded");
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
+
+    /* write data collectively */
+    MESG("writeAll by Row");
+    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dwrite dataset1 succeeded");
+
+    /* setup dimensions again to writeAll with zero rows for process 0 */
+    if (VERBOSE_MED)
+	printf("writeAll by some with zero row\n");
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, ZROW);
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+    /* need to make mem_dataspace to match for process 0 */
+    if (MAINPROCESS){
+	ret=H5Sselect_hyperslab(mem_dataspace, H5S_SELECT_SET, start, stride, count, block);
+	VRFY((ret >= 0), "H5Sset_hyperslab mem_dataspace succeeded");
+    }
+    MESG("writeAll by some with zero row");
+    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dwrite dataset1 by ZROW succeeded");
+
+    /* release all temporary handles. */
+    /* Could have used them for dataset2 but it is cleaner */
+    /* to create them again.*/
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+    /* Dataset2: each process takes a block of columns. */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYCOL);
+
+    /* put some trivial data in the data_array */
+    dataset_fill(start, block, data_array1);
+    MESG("data_array initialized");
+    if (VERBOSE_MED){
+	MESG("data_array created");
+	dataset_print(start, block, data_array1);
+    }
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+
+    /* fill the local slab with some trivial data */
+    dataset_fill(start, block, data_array1);
+    MESG("data_array initialized");
+    if (VERBOSE_MED){
+	MESG("data_array created");
+	dataset_print(start, block, data_array1);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((xfer_plist >= 0), "");
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    VRFY((ret >= 0), "H5Pcreate xfer succeeded");
+
+    /* write data independently */
+    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dwrite dataset2 succeeded");
+
+    /* setup dimensions again to writeAll with zero columns for process 0 */
+    if (VERBOSE_MED)
+	printf("writeAll by some with zero col\n");
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, ZCOL);
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+    /* need to make mem_dataspace to match for process 0 */
+    if (MAINPROCESS){
+	ret=H5Sselect_hyperslab(mem_dataspace, H5S_SELECT_SET, start, stride, count, block);
+	VRFY((ret >= 0), "H5Sset_hyperslab mem_dataspace succeeded");
+    }
+    MESG("writeAll by some with zero col");
+    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dwrite dataset1 by ZCOL succeeded");
+
+    /* release all temporary handles. */
+    /* Could have used them for dataset3 but it is cleaner */
+    /* to create them again.*/
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+
+    /* Dataset3: each process takes a block of rows, except process zero uses "none" selection. */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYROW);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset3);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    if (MAINPROCESS) {
+	ret=H5Sselect_none(file_dataspace);
+	VRFY((ret >= 0), "H5Sselect_none file_dataspace succeeded");
+    } /* end if */
+    else {
+        ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+        VRFY((ret >= 0), "H5Sselect_hyperslab succeeded");
+    } /* end else */
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+    if (MAINPROCESS) {
+	ret=H5Sselect_none(mem_dataspace);
+	VRFY((ret >= 0), "H5Sselect_none mem_dataspace succeeded");
+    } /* end if */
+
+    /* fill the local slab with some trivial data */
+    dataset_fill(start, block, data_array1);
+    MESG("data_array initialized");
+    if (VERBOSE_MED) {
+	MESG("data_array created");
+	dataset_print(start, block, data_array1);
+    } /* end if */
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((xfer_plist >= 0), "");
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    VRFY((ret >= 0), "H5Pcreate xfer succeeded");
+
+    /* write data collectively */
+    MESG("writeAll with none");
+    ret = H5Dwrite(dataset3, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dwrite dataset3 succeeded");
+
+    /* write data collectively (with datatype conversion) */
+    MESG("writeAll with none");
+    ret = H5Dwrite(dataset3, H5T_NATIVE_UCHAR, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dwrite dataset3 succeeded");
+
+    /* release all temporary handles. */
+    /* Could have used them for dataset4 but it is cleaner */
+    /* to create them again.*/
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+    /* Dataset4: each process writes no data, except process zero uses "all" selection. */
+    /* Additionally, these are in a scalar dataspace */
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset4);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    if (MAINPROCESS) {
+	ret=H5Sselect_none(file_dataspace);
+	VRFY((ret >= 0), "H5Sselect_all file_dataspace succeeded");
+    } /* end if */
+    else {
+        ret=H5Sselect_all(file_dataspace);
+        VRFY((ret >= 0), "H5Sselect_none succeeded");
+    } /* end else */
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate(H5S_SCALAR);
+    VRFY((mem_dataspace >= 0), "");
+    if (MAINPROCESS) {
+	ret=H5Sselect_none(mem_dataspace);
+	VRFY((ret >= 0), "H5Sselect_all mem_dataspace succeeded");
+    } /* end if */
+    else {
+        ret=H5Sselect_all(mem_dataspace);
+        VRFY((ret >= 0), "H5Sselect_none succeeded");
+    } /* end else */
+
+    /* fill the local slab with some trivial data */
+    dataset_fill(start, block, data_array1);
+    MESG("data_array initialized");
+    if (VERBOSE_MED) {
+	MESG("data_array created");
+	dataset_print(start, block, data_array1);
+    } /* end if */
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((xfer_plist >= 0), "");
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    VRFY((ret >= 0), "H5Pcreate xfer succeeded");
+
+    /* write data collectively */
+    MESG("writeAll with scalar dataspace");
+    ret = H5Dwrite(dataset4, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dwrite dataset4 succeeded");
+
+    /* write data collectively (with datatype conversion) */
+    MESG("writeAll with scalar dataspace");
+    ret = H5Dwrite(dataset4, H5T_NATIVE_UCHAR, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dwrite dataset4 succeeded");
+
+    /* release all temporary handles. */
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+    /*
+     * All writes completed.  Close datasets collectively
+     */
+    ret=H5Dclose(dataset1);
+    VRFY((ret >= 0), "H5Dclose1 succeeded");
+    ret=H5Dclose(dataset2);
+    VRFY((ret >= 0), "H5Dclose2 succeeded");
+    ret=H5Dclose(dataset3);
+    VRFY((ret >= 0), "H5Dclose3 succeeded");
+    ret=H5Dclose(dataset4);
+    VRFY((ret >= 0), "H5Dclose3 succeeded");
+
+    /* close the file collectively */
+    H5Fclose(fid);
+
+    /* release data buffers */
+    if (data_array1) free(data_array1);
+}
+
+/*
+ * Example of using the parallel HDF5 library to read two datasets
+ * in one HDF5 file with collective parallel access support.
+ * The Datasets are of sizes (number-of-mpi-processes x dim0) x dim1.
+ * Each process controls only a slab of size dim0 x dim1 within each
+ * dataset. [Note: not so yet.  Datasets are of sizes dim0xdim1 and
+ * each process controls a hyperslab within.]
+ */
+
+void
+dataset_readAll(void)
+{
+    hid_t fid;                  /* HDF5 file ID */
+    hid_t acc_tpl;		/* File access templates */
+    hid_t xfer_plist;		/* Dataset transfer properties list */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    hbool_t use_gpfs = FALSE;   /* Use GPFS hints */
+    DATATYPE *data_array1 = NULL;	/* data buffer */
+    DATATYPE *data_origin1 = NULL; 	/* expected data buffer */
+    const char *filename;
+
+    hsize_t start[RANK];			/* for hyperslab setting */
+    hsize_t count[RANK], stride[RANK];		/* for hyperslab setting */
+    hsize_t block[RANK];			/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+    int mpi_size, mpi_rank;
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    filename = GetTestParameters();
+    if (VERBOSE_MED)
+	printf("Collective read test on file %s\n", filename);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+    /* allocate memory for data buffer */
+    data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
+    VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
+    data_origin1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
+    VRFY((data_origin1 != NULL), "data_origin1 malloc succeeded");
+
+    /* -------------------
+     * OPEN AN HDF5 FILE
+     * -------------------*/
+    /* setup file access template */
+    acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs);
+    VRFY((acc_tpl >= 0), "");
+
+    /* open the file collectively */
+    fid=H5Fopen(filename,H5F_ACC_RDONLY,acc_tpl);
+    VRFY((fid >= 0), "H5Fopen succeeded");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl);
+    VRFY((ret >= 0), "");
+
+
+    /* --------------------------
+     * Open the datasets in it
+     * ------------------------- */
+    /* open the dataset1 collectively */
+    dataset1 = H5Dopen(fid, DATASETNAME1);
+    VRFY((dataset1 >= 0), "H5Dopen succeeded");
+
+    /* open another dataset collectively */
+    dataset2 = H5Dopen(fid, DATASETNAME2);
+    VRFY((dataset2 >= 0), "H5Dopen 2 succeeded");
+
+    /*
+     * Set up dimensions of the slab this process accesses.
+     */
+
+    /* Dataset1: each process takes a block of columns. */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYCOL);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+
+    /* fill dataset with test data */
+    dataset_fill(start, block, data_origin1);
+    MESG("data_array initialized");
+    if (VERBOSE_MED){
+	MESG("data_array created");
+	dataset_print(start, block, data_origin1);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((xfer_plist >= 0), "");
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    VRFY((ret >= 0), "H5Pcreate xfer succeeded");
+
+    /* read data collectively */
+    ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dread dataset1 succeeded");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, block, data_array1, data_origin1);
+    if (ret) nerrors++;
+
+    /* setup dimensions again to readAll with zero columns for process 0 */
+    if (VERBOSE_MED)
+	printf("readAll by some with zero col\n");
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, ZCOL);
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+    /* need to make mem_dataspace to match for process 0 */
+    if (MAINPROCESS){
+	ret=H5Sselect_hyperslab(mem_dataspace, H5S_SELECT_SET, start, stride, count, block);
+	VRFY((ret >= 0), "H5Sset_hyperslab mem_dataspace succeeded");
+    }
+    MESG("readAll by some with zero col");
+    ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dread dataset1 by ZCOL succeeded");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, block, data_array1, data_origin1);
+    if (ret) nerrors++;
+
+    /* release all temporary handles. */
+    /* Could have used them for dataset2 but it is cleaner */
+    /* to create them again.*/
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+    /* Dataset2: each process takes a block of rows. */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYROW);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+
+    /* fill dataset with test data */
+    dataset_fill(start, block, data_origin1);
+    MESG("data_array initialized");
+    if (VERBOSE_MED){
+	MESG("data_array created");
+	dataset_print(start, block, data_origin1);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((xfer_plist >= 0), "");
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    VRFY((ret >= 0), "H5Pcreate xfer succeeded");
+
+    /* read data collectively */
+    ret = H5Dread(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dread dataset2 succeeded");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, block, data_array1, data_origin1);
+    if (ret) nerrors++;
+
+    /* setup dimensions again to readAll with zero rows for process 0 */
+    if (VERBOSE_MED)
+	printf("readAll by some with zero row\n");
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, ZROW);
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+    /* need to make mem_dataspace to match for process 0 */
+    if (MAINPROCESS){
+	ret=H5Sselect_hyperslab(mem_dataspace, H5S_SELECT_SET, start, stride, count, block);
+	VRFY((ret >= 0), "H5Sset_hyperslab mem_dataspace succeeded");
+    }
+    MESG("readAll by some with zero row");
+    ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dread dataset1 by ZROW succeeded");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, block, data_array1, data_origin1);
+    if (ret) nerrors++;
+
+    /* release all temporary handles. */
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+
+    /*
+     * All reads completed.  Close datasets collectively
+     */
+    ret=H5Dclose(dataset1);
+    VRFY((ret >= 0), "H5Dclose1 succeeded");
+    ret=H5Dclose(dataset2);
+    VRFY((ret >= 0), "H5Dclose2 succeeded");
+
+    /* close the file collectively */
+    H5Fclose(fid);
+
+    /* release data buffers */
+    if (data_array1) free(data_array1);
+    if (data_origin1) free(data_origin1);
+}
+
+
+/*
+ * Part 2--Independent read/write for extendible datasets.
+ */
+
+/*
+ * Example of using the parallel HDF5 library to create two extendible
+ * datasets in one HDF5 file with independent parallel MPIO access support.
+ * The Datasets are of sizes (number-of-mpi-processes x dim0) x dim1.
+ * Each process controls only a slab of size dim0 x dim1 within each
+ * dataset.
+ */
+
+void
+extend_writeInd(void)
+{
+    hid_t fid;                  /* HDF5 file ID */
+    hid_t acc_tpl;		/* File access templates */
+    hid_t sid;   		/* Dataspace ID */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    hbool_t use_gpfs = FALSE;   /* Use GPFS hints */
+    const char *filename;
+    hsize_t dims[RANK];   	/* dataset dim sizes */
+    hsize_t max_dims[RANK] =
+		{H5S_UNLIMITED, H5S_UNLIMITED};	/* dataset maximum dim sizes */
+    DATATYPE	*data_array1 = NULL;		/* data buffer */
+    hsize_t	chunk_dims[RANK];		/* chunk sizes */
+    hid_t	dataset_pl;			/* dataset create prop. list */
+
+    hsize_t	start[RANK];			/* for hyperslab setting */
+    hsize_t	count[RANK];			/* for hyperslab setting */
+    hsize_t	stride[RANK];			/* for hyperslab setting */
+    hsize_t 	block[RANK];			/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+    int mpi_size, mpi_rank;
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    filename = GetTestParameters();
+    if (VERBOSE_MED)
+	printf("Extend independent write test on file %s\n", filename);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+    /* setup chunk-size. Make sure sizes are > 0 */
+    chunk_dims[0] = chunkdim0;
+    chunk_dims[1] = chunkdim1;
+
+    /* allocate memory for data buffer */
+    data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
+    VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
+
+    /* -------------------
+     * START AN HDF5 FILE
+     * -------------------*/
+    /* setup file access template */
+    acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs);
+    VRFY((acc_tpl >= 0), "");
+
+/* Reduce the number of metadata cache slots, so that there are cache
+ * collisions during the raw data I/O on the chunked dataset.  This stresses
+ * the metadata cache and tests for cache bugs. -QAK
+ */
+{
+    int mdc_nelmts;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int rdcc_nelmts;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    size_t rdcc_nelmts;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    size_t rdcc_nbytes;
+    double rdcc_w0;
+
+    ret=H5Pget_cache(acc_tpl,&mdc_nelmts,&rdcc_nelmts,&rdcc_nbytes,&rdcc_w0);
+    VRFY((ret >= 0), "H5Pget_cache succeeded");
+    mdc_nelmts=4;
+    ret=H5Pset_cache(acc_tpl,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0);
+    VRFY((ret >= 0), "H5Pset_cache succeeded");
+}
+
+    /* create the file collectively */
+    fid=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
+    VRFY((fid >= 0), "H5Fcreate succeeded");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl);
+    VRFY((ret >= 0), "");
+
+
+    /* --------------------------------------------------------------
+     * Define the dimensions of the overall datasets and create them.
+     * ------------------------------------------------------------- */
+
+    /* set up dataset storage chunk sizes and creation property list */
+    if (VERBOSE_MED)
+	printf("chunks[]=%lu,%lu\n", (unsigned long)chunk_dims[0], (unsigned long)chunk_dims[1]);
+    dataset_pl = H5Pcreate(H5P_DATASET_CREATE);
+    VRFY((dataset_pl >= 0), "H5Pcreate succeeded");
+    ret = H5Pset_chunk(dataset_pl, RANK, chunk_dims);
+    VRFY((ret >= 0), "H5Pset_chunk succeeded");
+
+    /* setup dimensionality object */
+    /* start out with no rows, extend it later. */
+    dims[0] = dims[1] = 0;
+    sid = H5Screate_simple (RANK, dims, max_dims);
+    VRFY((sid >= 0), "H5Screate_simple succeeded");
+
+    /* create an extendible dataset collectively */
+    dataset1 = H5Dcreate(fid, DATASETNAME1, H5T_NATIVE_INT, sid, dataset_pl);
+    VRFY((dataset1 >= 0), "H5Dcreate succeeded");
+
+    /* create another extendible dataset collectively */
+    dataset2 = H5Dcreate(fid, DATASETNAME2, H5T_NATIVE_INT, sid, dataset_pl);
+    VRFY((dataset2 >= 0), "H5Dcreate succeeded");
+
+    /* release resource */
+    H5Sclose(sid);
+    H5Pclose(dataset_pl);
+
+
+
+    /* -------------------------
+     * Test writing to dataset1
+     * -------------------------*/
+    /* set up dimensions of the slab this process accesses */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYROW);
+
+    /* put some trivial data in the data_array */
+    dataset_fill(start, block, data_array1);
+    MESG("data_array initialized");
+    if (VERBOSE_MED){
+	MESG("data_array created");
+	dataset_print(start, block, data_array1);
+    }
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+
+    /* Extend its current dim sizes before writing */
+    dims[0] = dim0;
+    dims[1] = dim1;
+    ret = H5Dextend (dataset1, dims);
+    VRFY((ret >= 0), "H5Dextend succeeded");
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+
+    /* write data independently */
+    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    VRFY((ret >= 0), "H5Dwrite succeeded");
+
+    /* release resource */
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+
+
+    /* -------------------------
+     * Test writing to dataset2
+     * -------------------------*/
+    /* set up dimensions of the slab this process accesses */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYCOL);
+
+    /* put some trivial data in the data_array */
+    dataset_fill(start, block, data_array1);
+    MESG("data_array initialized");
+    if (VERBOSE_MED){
+	MESG("data_array created");
+	dataset_print(start, block, data_array1);
+    }
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+
+    /* Try write to dataset2 beyond its current dim sizes.  Should fail. */
+    /* Temporary turn off auto error reporting */
+    H5Eget_auto(&old_func, &old_client_data);
+    H5Eset_auto(NULL, NULL);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset2);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+
+    /* write data independently.  Should fail. */
+    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    VRFY((ret < 0), "H5Dwrite failed as expected");
+
+    /* restore auto error reporting */
+    H5Eset_auto(old_func, old_client_data);
+    H5Sclose(file_dataspace);
+
+    /* Extend dataset2 and try again.  Should succeed. */
+    dims[0] = dim0;
+    dims[1] = dim1;
+    ret = H5Dextend (dataset2, dims);
+    VRFY((ret >= 0), "H5Dextend succeeded");
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset2);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+
+    /* write data independently */
+    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    VRFY((ret >= 0), "H5Dwrite succeeded");
+
+    /* release resource */
+    ret=H5Sclose(file_dataspace);
+    VRFY((ret >= 0), "H5Sclose succeeded");
+    ret=H5Sclose(mem_dataspace);
+    VRFY((ret >= 0), "H5Sclose succeeded");
+
+
+    /* close dataset collectively */
+    ret=H5Dclose(dataset1);
+    VRFY((ret >= 0), "H5Dclose1 succeeded");
+    ret=H5Dclose(dataset2);
+    VRFY((ret >= 0), "H5Dclose2 succeeded");
+
+    /* close the file collectively */
+    H5Fclose(fid);
+
+    /* release data buffers */
+    if (data_array1) free(data_array1);
+}
+
+/*
+ * Example of using the parallel HDF5 library to create an extendable dataset
+ * and perform I/O on it in a way that verifies that the chunk cache is
+ * bypassed for parallel I/O.
+ */
+
+void
+extend_writeInd2(void)
+{
+    const char *filename;
+    hid_t fid;                  /* HDF5 file ID */
+    hid_t fapl;			/* File access templates */
+    hid_t fs;   		/* File dataspace ID */
+    hid_t ms;   		/* Memory dataspace ID */
+    hid_t dataset;		/* Dataset ID */
+    hbool_t use_gpfs = FALSE;   /* Use GPFS hints */
+    hsize_t orig_size=10;   	/* Original dataset dim size */
+    hsize_t new_size=20;   	/* Extended dataset dim size */
+    hsize_t one=1;
+    hsize_t max_size = H5S_UNLIMITED;	/* dataset maximum dim size */
+    hsize_t chunk_size = 16384;	/* chunk size */
+    hid_t dcpl;	       		/* dataset create prop. list */
+    int   written[10],          /* Data to write */
+        retrieved[10];          /* Data read in */
+    int mpi_size, mpi_rank;     /* MPI settings */
+    int i;                      /* Local index variable */
+    herr_t ret;         	/* Generic return value */
+
+    filename = GetTestParameters();
+    if (VERBOSE_MED)
+	printf("Extend independent write test #2 on file %s\n", filename);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+    /* -------------------
+     * START AN HDF5 FILE
+     * -------------------*/
+    /* setup file access template */
+    fapl = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs);
+    VRFY((fapl >= 0), "create_faccess_plist succeeded");
+
+    /* create the file collectively */
+    fid=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,fapl);
+    VRFY((fid >= 0), "H5Fcreate succeeded");
+
+    /* Release file-access template */
+    ret=H5Pclose(fapl);
+    VRFY((ret >= 0), "H5Pclose succeeded");
+
+
+    /* --------------------------------------------------------------
+     * Define the dimensions of the overall datasets and create them.
+     * ------------------------------------------------------------- */
+
+    /* set up dataset storage chunk sizes and creation property list */
+    dcpl = H5Pcreate(H5P_DATASET_CREATE);
+    VRFY((dcpl >= 0), "H5Pcreate succeeded");
+    ret = H5Pset_chunk(dcpl, 1, &chunk_size);
+    VRFY((ret >= 0), "H5Pset_chunk succeeded");
+
+    /* setup dimensionality object */
+    fs = H5Screate_simple (1, &orig_size, &max_size);
+    VRFY((fs >= 0), "H5Screate_simple succeeded");
+
+    /* create an extendible dataset collectively */
+    dataset = H5Dcreate(fid, DATASETNAME1, H5T_NATIVE_INT, fs, dcpl);
+    VRFY((dataset >= 0), "H5Dcreate succeeded");
+
+    /* release resource */
+    ret=H5Pclose(dcpl);
+    VRFY((ret >= 0), "H5Pclose succeeded");
+
+
+    /* -------------------------
+     * Test writing to dataset
+     * -------------------------*/
+    /* create a memory dataspace independently */
+    ms = H5Screate_simple(1, &orig_size, &max_size);
+    VRFY((ms >= 0), "H5Screate_simple succeeded");
+
+    /* put some trivial data in the data_array */
+    for (i=0; i<(int)orig_size; i++)
+        written[i] = i;
+    MESG("data array initialized");
+    if (VERBOSE_MED) {
+	MESG("writing at offset zero: ");
+        for (i=0; i<(int)orig_size; i++)
+            printf("%s%d", i?", ":"", written[i]);
+        printf("\n");
+    }
+    ret = H5Dwrite(dataset, H5T_NATIVE_INT, ms, fs, H5P_DEFAULT, written);
+    VRFY((ret >= 0), "H5Dwrite succeeded");
+
+    /* -------------------------
+     * Read initial data from dataset.
+     * -------------------------*/
+    ret = H5Dread(dataset, H5T_NATIVE_INT, ms, fs, H5P_DEFAULT, retrieved);
+    VRFY((ret >= 0), "H5Dread succeeded");
+    for (i=0; i<(int)orig_size; i++)
+        if(written[i]!=retrieved[i]) {
+            printf("Line #%d: written!=retrieved: written[%d]=%d, retrieved[%d]=%d\n",__LINE__,
+                i,written[i], i,retrieved[i]);
+            nerrors++;
+        }
+    if (VERBOSE_MED){
+	MESG("read at offset zero: ");
+        for (i=0; i<(int)orig_size; i++)
+            printf("%s%d", i?", ":"", retrieved[i]);
+        printf("\n");
+    }
+
+    /* -------------------------
+     * Extend the dataset & retrieve new dataspace
+     * -------------------------*/
+    ret =H5Dextend(dataset, &new_size);
+    VRFY((ret >= 0), "H5Dextend succeeded");
+    ret=H5Sclose(fs);
+    VRFY((ret >= 0), "H5Sclose succeeded");
+    fs = H5Dget_space(dataset);
+    VRFY((fs >= 0), "H5Dget_space succeeded");
+
+    /* -------------------------
+     * Write to the second half of the dataset
+     * -------------------------*/
+    for (i=0; i<(int)orig_size; i++)
+        written[i] = orig_size + i;
+    MESG("data array re-initialized");
+    if (VERBOSE_MED) {
+	MESG("writing at offset 10: ");
+        for (i=0; i<(int)orig_size; i++)
+            printf("%s%d", i?", ":"", written[i]);
+        printf("\n");
+    }
+    ret = H5Sselect_hyperslab(fs, H5S_SELECT_SET, &orig_size, NULL, &one, &orig_size);
+    VRFY((ret >= 0), "H5Sselect_hyperslab succeeded");
+    ret = H5Dwrite(dataset, H5T_NATIVE_INT, ms, fs, H5P_DEFAULT, written);
+    VRFY((ret >= 0), "H5Dwrite succeeded");
+
+    /* -------------------------
+     * Read the new data
+     * -------------------------*/
+    ret = H5Dread(dataset, H5T_NATIVE_INT, ms, fs, H5P_DEFAULT, retrieved);
+    VRFY((ret >= 0), "H5Dread succeeded");
+    for (i=0; i<(int)orig_size; i++)
+        if(written[i]!=retrieved[i]) {
+            printf("Line #%d: written!=retrieved: written[%d]=%d, retrieved[%d]=%d\n",__LINE__,
+                i,written[i], i,retrieved[i]);
+            nerrors++;
+        }
+    if (VERBOSE_MED){
+	MESG("read at offset 10: ");
+        for (i=0; i<(int)orig_size; i++)
+            printf("%s%d", i?", ":"", retrieved[i]);
+        printf("\n");
+    }
+
+
+    /* Close dataset collectively */
+    ret=H5Dclose(dataset);
+    VRFY((ret >= 0), "H5Dclose succeeded");
+
+    /* Close the file collectively */
+    ret = H5Fclose(fid);
+    VRFY((ret >= 0), "H5Fclose succeeded");
+}
+
+/* Example of using the parallel HDF5 library to read an extendible dataset */
+void
+extend_readInd(void)
+{
+    hid_t fid;			/* HDF5 file ID */
+    hid_t acc_tpl;		/* File access templates */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    hbool_t use_gpfs = FALSE;   /* Use GPFS hints */
+    hsize_t dims[RANK];   	/* dataset dim sizes */
+    DATATYPE *data_array1 = NULL;	/* data buffer */
+    DATATYPE *data_array2 = NULL;	/* data buffer */
+    DATATYPE *data_origin1 = NULL; 	/* expected data buffer */
+    const char *filename;
+
+    hsize_t start[RANK];			/* for hyperslab setting */
+    hsize_t count[RANK], stride[RANK];		/* for hyperslab setting */
+    hsize_t block[RANK];			/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+    int mpi_size, mpi_rank;
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    filename = GetTestParameters();
+    if (VERBOSE_MED)
+	printf("Extend independent read test on file %s\n", filename);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+    /* allocate memory for data buffer */
+    data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
+    VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
+    data_array2 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
+    VRFY((data_array2 != NULL), "data_array2 malloc succeeded");
+    data_origin1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
+    VRFY((data_origin1 != NULL), "data_origin1 malloc succeeded");
+
+    /* -------------------
+     * OPEN AN HDF5 FILE
+     * -------------------*/
+    /* setup file access template */
+    acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs);
+    VRFY((acc_tpl >= 0), "");
+
+    /* open the file collectively */
+    fid=H5Fopen(filename,H5F_ACC_RDONLY,acc_tpl);
+    VRFY((fid >= 0), "");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl);
+    VRFY((ret >= 0), "");
+
+    /* open the dataset1 collectively */
+    dataset1 = H5Dopen(fid, DATASETNAME1);
+    VRFY((dataset1 >= 0), "");
+
+    /* open another dataset collectively */
+    dataset2 = H5Dopen(fid, DATASETNAME1);
+    VRFY((dataset2 >= 0), "");
+
+    /* Try extend dataset1 which is open RDONLY.  Should fail. */
+    /* first turn off auto error reporting */
+    H5Eget_auto(&old_func, &old_client_data);
+    H5Eset_auto(NULL, NULL);
+
+    file_dataspace = H5Dget_space (dataset1);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    ret=H5Sget_simple_extent_dims(file_dataspace, dims, NULL);
+    VRFY((ret > 0), "H5Sget_simple_extent_dims succeeded");
+    dims[0]++;
+    ret=H5Dextend(dataset1, dims);
+    VRFY((ret < 0), "H5Dextend failed as expected");
+
+    /* restore auto error reporting */
+    H5Eset_auto(old_func, old_client_data);
+    H5Sclose(file_dataspace);
+
+
+    /* Read dataset1 using BYROW pattern */
+    /* set up dimensions of the slab this process accesses */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYROW);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    VRFY((file_dataspace >= 0), "");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+
+    /* fill dataset with test data */
+    dataset_fill(start, block, data_origin1);
+    if (VERBOSE_MED){
+	MESG("data_array created");
+	dataset_print(start, block, data_array1);
+    }
+
+    /* read data independently */
+    ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    VRFY((ret >= 0), "H5Dread succeeded");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, block, data_array1, data_origin1);
+    VRFY((ret == 0), "dataset1 read verified correct");
+    if (ret) nerrors++;
+
+    H5Sclose(mem_dataspace);
+    H5Sclose(file_dataspace);
+
+
+    /* Read dataset2 using BYCOL pattern */
+    /* set up dimensions of the slab this process accesses */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYCOL);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset2);
+    VRFY((file_dataspace >= 0), "");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+
+    /* fill dataset with test data */
+    dataset_fill(start, block, data_origin1);
+    if (VERBOSE_MED){
+	MESG("data_array created");
+	dataset_print(start, block, data_array1);
+    }
+
+    /* read data independently */
+    ret = H5Dread(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    H5P_DEFAULT, data_array1);
+    VRFY((ret >= 0), "H5Dread succeeded");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, block, data_array1, data_origin1);
+    VRFY((ret == 0), "dataset2 read verified correct");
+    if (ret) nerrors++;
+
+    H5Sclose(mem_dataspace);
+    H5Sclose(file_dataspace);
+
+    /* close dataset collectively */
+    ret=H5Dclose(dataset1);
+    VRFY((ret >= 0), "");
+    ret=H5Dclose(dataset2);
+    VRFY((ret >= 0), "");
+
+
+    /* close the file collectively */
+    H5Fclose(fid);
+
+    /* release data buffers */
+    if (data_array1) free(data_array1);
+    if (data_array2) free(data_array2);
+    if (data_origin1) free(data_origin1);
+}
+
+/*
+ * Part 3--Collective read/write for extendible datasets.
+ */
+
+/*
+ * Example of using the parallel HDF5 library to create two extendible
+ * datasets in one HDF5 file with collective parallel MPIO access support.
+ * The Datasets are of sizes (number-of-mpi-processes x dim0) x dim1.
+ * Each process controls only a slab of size dim0 x dim1 within each
+ * dataset.
+ */
+
+void
+extend_writeAll(void)
+{
+    hid_t fid;                  /* HDF5 file ID */
+    hid_t acc_tpl;		/* File access templates */
+    hid_t xfer_plist;		/* Dataset transfer properties list */
+    hid_t sid;   		/* Dataspace ID */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    hbool_t use_gpfs = FALSE;   /* Use GPFS hints */
+    const char *filename;
+    hsize_t dims[RANK];   	/* dataset dim sizes */
+    hsize_t max_dims[RANK] =
+		{H5S_UNLIMITED, H5S_UNLIMITED};	/* dataset maximum dim sizes */
+    DATATYPE	*data_array1 = NULL;		/* data buffer */
+    hsize_t	chunk_dims[RANK];		/* chunk sizes */
+    hid_t	dataset_pl;			/* dataset create prop. list */
+
+    hsize_t	start[RANK];			/* for hyperslab setting */
+    hsize_t	count[RANK];			/* for hyperslab setting */
+    hsize_t	stride[RANK];			/* for hyperslab setting */
+    hsize_t 	block[RANK];			/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+    int mpi_size, mpi_rank;
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    filename = GetTestParameters();
+    if (VERBOSE_MED)
+	printf("Extend independent write test on file %s\n", filename);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+    /* setup chunk-size. Make sure sizes are > 0 */
+    chunk_dims[0] = chunkdim0;
+    chunk_dims[1] = chunkdim1;
+
+    /* allocate memory for data buffer */
+    data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
+    VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
+
+    /* -------------------
+     * START AN HDF5 FILE
+     * -------------------*/
+    /* setup file access template */
+    acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs);
+    VRFY((acc_tpl >= 0), "");
+
+/* Reduce the number of metadata cache slots, so that there are cache
+ * collisions during the raw data I/O on the chunked dataset.  This stresses
+ * the metadata cache and tests for cache bugs. -QAK
+ */
+{
+    int mdc_nelmts;
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    int rdcc_nelmts;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    size_t rdcc_nelmts;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    size_t rdcc_nbytes;
+    double rdcc_w0;
+
+    ret=H5Pget_cache(acc_tpl,&mdc_nelmts,&rdcc_nelmts,&rdcc_nbytes,&rdcc_w0);
+    VRFY((ret >= 0), "H5Pget_cache succeeded");
+    mdc_nelmts=4;
+    ret=H5Pset_cache(acc_tpl,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0);
+    VRFY((ret >= 0), "H5Pset_cache succeeded");
+}
+
+    /* create the file collectively */
+    fid=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
+    VRFY((fid >= 0), "H5Fcreate succeeded");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl);
+    VRFY((ret >= 0), "");
+
+
+    /* --------------------------------------------------------------
+     * Define the dimensions of the overall datasets and create them.
+     * ------------------------------------------------------------- */
+
+    /* set up dataset storage chunk sizes and creation property list */
+    if (VERBOSE_MED)
+	printf("chunks[]=%lu,%lu\n", (unsigned long)chunk_dims[0], (unsigned long)chunk_dims[1]);
+    dataset_pl = H5Pcreate(H5P_DATASET_CREATE);
+    VRFY((dataset_pl >= 0), "H5Pcreate succeeded");
+    ret = H5Pset_chunk(dataset_pl, RANK, chunk_dims);
+    VRFY((ret >= 0), "H5Pset_chunk succeeded");
+
+    /* setup dimensionality object */
+    /* start out with no rows, extend it later. */
+    dims[0] = dims[1] = 0;
+    sid = H5Screate_simple (RANK, dims, max_dims);
+    VRFY((sid >= 0), "H5Screate_simple succeeded");
+
+    /* create an extendible dataset collectively */
+    dataset1 = H5Dcreate(fid, DATASETNAME1, H5T_NATIVE_INT, sid, dataset_pl);
+    VRFY((dataset1 >= 0), "H5Dcreate succeeded");
+
+    /* create another extendible dataset collectively */
+    dataset2 = H5Dcreate(fid, DATASETNAME2, H5T_NATIVE_INT, sid, dataset_pl);
+    VRFY((dataset2 >= 0), "H5Dcreate succeeded");
+
+    /* release resource */
+    H5Sclose(sid);
+    H5Pclose(dataset_pl);
+
+
+
+    /* -------------------------
+     * Test writing to dataset1
+     * -------------------------*/
+    /* set up dimensions of the slab this process accesses */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYROW);
+
+    /* put some trivial data in the data_array */
+    dataset_fill(start, block, data_array1);
+    MESG("data_array initialized");
+    if (VERBOSE_MED){
+	MESG("data_array created");
+	dataset_print(start, block, data_array1);
+    }
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+
+    /* Extend its current dim sizes before writing */
+    dims[0] = dim0;
+    dims[1] = dim1;
+    ret = H5Dextend (dataset1, dims);
+    VRFY((ret >= 0), "H5Dextend succeeded");
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((xfer_plist >= 0), "H5Pcreate xfer succeeded");
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
+
+    /* write data collectively */
+    ret = H5Dwrite(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dwrite succeeded");
+
+    /* release resource */
+    H5Sclose(file_dataspace);
+    H5Sclose(mem_dataspace);
+    H5Pclose(xfer_plist);
+
+
+    /* -------------------------
+     * Test writing to dataset2
+     * -------------------------*/
+    /* set up dimensions of the slab this process accesses */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYCOL);
+
+    /* put some trivial data in the data_array */
+    dataset_fill(start, block, data_array1);
+    MESG("data_array initialized");
+    if (VERBOSE_MED){
+	MESG("data_array created");
+	dataset_print(start, block, data_array1);
+    }
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((xfer_plist >= 0), "H5Pcreate xfer succeeded");
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
+
+    /* Try write to dataset2 beyond its current dim sizes.  Should fail. */
+    /* Temporary turn off auto error reporting */
+    H5Eget_auto(&old_func, &old_client_data);
+    H5Eset_auto(NULL, NULL);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset2);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+
+    /* write data independently.  Should fail. */
+    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret < 0), "H5Dwrite failed as expected");
+
+    /* restore auto error reporting */
+    H5Eset_auto(old_func, old_client_data);
+    H5Sclose(file_dataspace);
+
+    /* Extend dataset2 and try again.  Should succeed. */
+    dims[0] = dim0;
+    dims[1] = dim1;
+    ret = H5Dextend (dataset2, dims);
+    VRFY((ret >= 0), "H5Dextend succeeded");
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset2);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+
+    /* write data independently */
+    ret = H5Dwrite(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dwrite succeeded");
+
+    /* release resource */
+    ret=H5Sclose(file_dataspace);
+    VRFY((ret >= 0), "H5Sclose succeeded");
+    ret=H5Sclose(mem_dataspace);
+    VRFY((ret >= 0), "H5Sclose succeeded");
+    ret=H5Pclose(xfer_plist);
+    VRFY((ret >= 0), "H5Pclose succeeded");
+
+
+    /* close dataset collectively */
+    ret=H5Dclose(dataset1);
+    VRFY((ret >= 0), "H5Dclose1 succeeded");
+    ret=H5Dclose(dataset2);
+    VRFY((ret >= 0), "H5Dclose2 succeeded");
+
+    /* close the file collectively */
+    H5Fclose(fid);
+
+    /* release data buffers */
+    if (data_array1) free(data_array1);
+}
+
+/* Example of using the parallel HDF5 library to read an extendible dataset */
+void
+extend_readAll(void)
+{
+    hid_t fid;			/* HDF5 file ID */
+    hid_t acc_tpl;		/* File access templates */
+    hid_t xfer_plist;		/* Dataset transfer properties list */
+    hid_t file_dataspace;	/* File dataspace ID */
+    hid_t mem_dataspace;	/* memory dataspace ID */
+    hid_t dataset1, dataset2;	/* Dataset ID */
+    hbool_t use_gpfs = FALSE;   /* Use GPFS hints */
+    const char *filename;
+    hsize_t dims[RANK];   	/* dataset dim sizes */
+    DATATYPE *data_array1 = NULL;	/* data buffer */
+    DATATYPE *data_array2 = NULL;	/* data buffer */
+    DATATYPE *data_origin1 = NULL; 	/* expected data buffer */
+
+    hsize_t start[RANK];			/* for hyperslab setting */
+    hsize_t count[RANK], stride[RANK];		/* for hyperslab setting */
+    hsize_t block[RANK];			/* for hyperslab setting */
+
+    herr_t ret;         	/* Generic return value */
+    int mpi_size, mpi_rank;
+
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+
+    filename = GetTestParameters();
+    if (VERBOSE_MED)
+	printf("Extend independent read test on file %s\n", filename);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+    /* allocate memory for data buffer */
+    data_array1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
+    VRFY((data_array1 != NULL), "data_array1 malloc succeeded");
+    data_array2 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
+    VRFY((data_array2 != NULL), "data_array2 malloc succeeded");
+    data_origin1 = (DATATYPE *)malloc(dim0*dim1*sizeof(DATATYPE));
+    VRFY((data_origin1 != NULL), "data_origin1 malloc succeeded");
+
+    /* -------------------
+     * OPEN AN HDF5 FILE
+     * -------------------*/
+    /* setup file access template */
+    acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs);
+    VRFY((acc_tpl >= 0), "");
+
+    /* open the file collectively */
+    fid=H5Fopen(filename,H5F_ACC_RDONLY,acc_tpl);
+    VRFY((fid >= 0), "");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl);
+    VRFY((ret >= 0), "");
+
+    /* open the dataset1 collectively */
+    dataset1 = H5Dopen(fid, DATASETNAME1);
+    VRFY((dataset1 >= 0), "");
+
+    /* open another dataset collectively */
+    dataset2 = H5Dopen(fid, DATASETNAME1);
+    VRFY((dataset2 >= 0), "");
+
+    /* Try extend dataset1 which is open RDONLY.  Should fail. */
+    /* first turn off auto error reporting */
+    H5Eget_auto(&old_func, &old_client_data);
+    H5Eset_auto(NULL, NULL);
+
+    file_dataspace = H5Dget_space (dataset1);
+    VRFY((file_dataspace >= 0), "H5Dget_space succeeded");
+    ret=H5Sget_simple_extent_dims(file_dataspace, dims, NULL);
+    VRFY((ret > 0), "H5Sget_simple_extent_dims succeeded");
+    dims[0]++;
+    ret=H5Dextend(dataset1, dims);
+    VRFY((ret < 0), "H5Dextend failed as expected");
+
+    /* restore auto error reporting */
+    H5Eset_auto(old_func, old_client_data);
+    H5Sclose(file_dataspace);
+
+
+    /* Read dataset1 using BYROW pattern */
+    /* set up dimensions of the slab this process accesses */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYROW);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset1);
+    VRFY((file_dataspace >= 0), "");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+
+    /* fill dataset with test data */
+    dataset_fill(start, block, data_origin1);
+    if (VERBOSE_MED){
+	MESG("data_array created");
+	dataset_print(start, block, data_array1);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((xfer_plist >= 0), "H5Pcreate xfer succeeded");
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
+
+    /* read data collectively */
+    ret = H5Dread(dataset1, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dread succeeded");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, block, data_array1, data_origin1);
+    VRFY((ret == 0), "dataset1 read verified correct");
+    if (ret) nerrors++;
+
+    H5Sclose(mem_dataspace);
+    H5Sclose(file_dataspace);
+    H5Pclose(xfer_plist);
+
+
+    /* Read dataset2 using BYCOL pattern */
+    /* set up dimensions of the slab this process accesses */
+    slab_set(mpi_rank, mpi_size, start, count, stride, block, BYCOL);
+
+    /* create a file dataspace independently */
+    file_dataspace = H5Dget_space (dataset2);
+    VRFY((file_dataspace >= 0), "");
+    ret=H5Sselect_hyperslab(file_dataspace, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "");
+
+    /* create a memory dataspace independently */
+    mem_dataspace = H5Screate_simple (RANK, block, NULL);
+    VRFY((mem_dataspace >= 0), "");
+
+    /* fill dataset with test data */
+    dataset_fill(start, block, data_origin1);
+    if (VERBOSE_MED){
+	MESG("data_array created");
+	dataset_print(start, block, data_array1);
+    }
+
+    /* set up the collective transfer properties list */
+    xfer_plist = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((xfer_plist >= 0), "H5Pcreate xfer succeeded");
+    ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+    VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
+
+    /* read data collectively */
+    ret = H5Dread(dataset2, H5T_NATIVE_INT, mem_dataspace, file_dataspace,
+	    xfer_plist, data_array1);
+    VRFY((ret >= 0), "H5Dread succeeded");
+
+    /* verify the read data with original expected data */
+    ret = dataset_vrfy(start, count, stride, block, data_array1, data_origin1);
+    VRFY((ret == 0), "dataset2 read verified correct");
+    if (ret) nerrors++;
+
+    H5Sclose(mem_dataspace);
+    H5Sclose(file_dataspace);
+    H5Pclose(xfer_plist);
+
+    /* close dataset collectively */
+    ret=H5Dclose(dataset1);
+    VRFY((ret >= 0), "");
+    ret=H5Dclose(dataset2);
+    VRFY((ret >= 0), "");
+
+
+    /* close the file collectively */
+    H5Fclose(fid);
+
+    /* release data buffers */
+    if (data_array1) free(data_array1);
+    if (data_array2) free(data_array2);
+    if (data_origin1) free(data_origin1);
+}
+
+/*
+ * Example of using the parallel HDF5 library to read a compressed
+ * dataset in an HDF5 file with collective parallel access support.
+ */
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+void
+compress_readAll(void)
+{
+    hid_t fid;                  /* HDF5 file ID */
+    hid_t acc_tpl;		/* File access templates */
+    hid_t dcpl;                 /* Dataset creation property list */
+    hid_t xfer_plist;		/* Dataset transfer properties list */
+    hid_t dataspace;		/* Dataspace ID */
+    hid_t dataset;		/* Dataset ID */
+    int rank=1;                 /* Dataspace rank */
+    hsize_t dim=dim0;           /* Dataspace dimensions */
+    unsigned u;                 /* Local index variable */
+    hbool_t use_gpfs = FALSE;   /* Use GPFS hints */
+    DATATYPE *data_read = NULL;	/* data buffer */
+    DATATYPE *data_orig = NULL; /* expected data buffer */
+    const char *filename;
+    MPI_Comm comm = MPI_COMM_WORLD;
+    MPI_Info info = MPI_INFO_NULL;
+    int mpi_size, mpi_rank;
+    herr_t ret;         	/* Generic return value */
+
+    filename = GetTestParameters();
+    if (VERBOSE_MED)
+	printf("Collective chunked dataset read test on file %s\n", filename);
+
+    /* Retrieve MPI parameters */
+    MPI_Comm_size(comm,&mpi_size);
+    MPI_Comm_rank(comm,&mpi_rank);
+
+    /* Allocate data buffer */
+    data_orig = (DATATYPE *)HDmalloc((size_t)dim*sizeof(DATATYPE));
+    VRFY((data_orig != NULL), "data_origin1 malloc succeeded");
+    data_read = (DATATYPE *)HDmalloc((size_t)dim*sizeof(DATATYPE));
+    VRFY((data_read != NULL), "data_array1 malloc succeeded");
+
+    /* Initialize data buffers */
+    for(u=0; u<dim;u++)
+        data_orig[u]=u;
+
+    /* Process zero creates the file with a compressed, chunked dataset */
+    if(mpi_rank==0) {
+        hsize_t chunk_dim;           /* Chunk dimensions */
+
+        /* Create the file */
+        fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+        VRFY((fid > 0), "H5Fcreate succeeded");
+
+        /* Create property list for chunking and compression */
+        dcpl = H5Pcreate(H5P_DATASET_CREATE);
+        VRFY((dcpl > 0), "H5Pcreate succeeded");
+
+        ret=H5Pset_layout(dcpl, H5D_CHUNKED);
+        VRFY((ret >= 0), "H5Pset_layout succeeded");
+
+        /* Use eight chunks */
+        chunk_dim=dim/8;
+        ret=H5Pset_chunk(dcpl, rank, &chunk_dim);
+        VRFY((ret >= 0), "H5Pset_chunk succeeded");
+
+        ret=H5Pset_deflate(dcpl, 9);
+        VRFY((ret >= 0), "H5Pset_deflate succeeded");
+
+        /* Create dataspace */
+        dataspace = H5Screate_simple(rank, &dim, NULL);
+        VRFY((dataspace > 0), "H5Screate_simple succeeded");
+
+        /* Create dataset */
+        dataset = H5Dcreate(fid, "compressed_data", H5T_NATIVE_INT, dataspace, dcpl);
+        VRFY((dataset > 0), "H5Screate_simple succeeded");
+
+        /* Write compressed data */
+        ret=H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data_orig);
+        VRFY((ret >= 0), "H5Dwrite succeeded");
+
+        /* Close objects */
+        ret=H5Pclose(dcpl);
+        VRFY((ret >= 0), "H5Pclose succeeded");
+        ret=H5Sclose(dataspace);
+        VRFY((ret >= 0), "H5Sclose succeeded");
+        ret=H5Dclose(dataset);
+        VRFY((ret >= 0), "H5Dclose succeeded");
+        ret=H5Fclose(fid);
+        VRFY((ret >= 0), "H5Fclose succeeded");
+    }
+
+    /* Wait for file to be created */
+    MPI_Barrier(comm);
+
+    /* -------------------
+     * OPEN AN HDF5 FILE
+     * -------------------*/
+
+    /* setup file access template */
+    acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs);
+    VRFY((acc_tpl >= 0), "");
+
+    /* open the file collectively */
+    fid=H5Fopen(filename,H5F_ACC_RDWR,acc_tpl);
+    VRFY((fid > 0), "H5Fopen succeeded");
+
+    /* Release file-access template */
+    ret=H5Pclose(acc_tpl);
+    VRFY((ret >= 0), "H5Pclose succeeded");
+
+
+    /* Open dataset with compressed chunks */
+    dataset = H5Dopen(fid, "compressed_data");
+    VRFY((dataset > 0), "H5Dopen succeeded");
+
+    /* Try reading & writing data */
+    if(dataset>0) {
+        /* Create dataset transfer property list */
+        xfer_plist = H5Pcreate(H5P_DATASET_XFER);
+        VRFY((xfer_plist > 0), "H5Pcreate succeeded");
+
+        ret=H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+        VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
+
+        /* Try reading the data */
+        ret=H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, xfer_plist, data_read);
+        VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
+
+        /* Verify data read */
+        for(u=0; u<dim; u++)
+            if(data_orig[u]!=data_read[u]) {
+                printf("Line #%d: written!=retrieved: data_orig[%u]=%d, data_read[%u]=%d\n",__LINE__,
+                    (unsigned)u,data_orig[u],(unsigned)u,data_read[u]);
+                nerrors++;
+            }
+
+        /* Writing to the compressed, chunked dataset in parallel should fail */
+        H5E_BEGIN_TRY {
+            ret=H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, xfer_plist, data_read);
+        } H5E_END_TRY;
+        VRFY((ret < 0), "H5Dwrite failed");
+
+        ret=H5Pclose(xfer_plist);
+        VRFY((ret >= 0), "H5Pclose succeeded");
+        ret=H5Dclose(dataset);
+        VRFY((ret >= 0), "H5Dclose succeeded");
+    } /* end if */
+
+    ret=H5Fclose(fid);
+    VRFY((ret >= 0), "H5Fclose succeeded");
+
+    /* release data buffers */
+    if (data_read) HDfree(data_read);
+    if (data_orig) HDfree(data_orig);
+}
+#endif /* H5_HAVE_FILTER_DEFLATE */
+

Added: packages/hdf5/branches/upstream/current/testpar/t_file.c
===================================================================
--- packages/hdf5/branches/upstream/current/testpar/t_file.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/testpar/t_file.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,95 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Parallel tests for file operations
+ */
+
+#include "testphdf5.h"
+
+/*
+ * test file access by communicator besides COMM_WORLD.
+ * Split COMM_WORLD into two, one (even_comm) contains the original
+ * processes of even ranks.  The other (odd_comm) contains the original
+ * processes of odd ranks.  Processes in even_comm creates a file, then
+ * cloose it, using even_comm.  Processes in old_comm just do a barrier
+ * using odd_comm.  Then they all do a barrier using COMM_WORLD.
+ * If the file creation and cloose does not do correct collective action
+ * according to the communicator argument, the processes will freeze up
+ * sooner or later due to barrier mixed up.
+ */
+void
+test_split_comm_access(void)
+{
+    int mpi_size, mpi_rank;
+    MPI_Comm comm;
+    MPI_Info info = MPI_INFO_NULL;
+    int color, mrc;
+    int newrank, newprocs;
+    hid_t fid;			/* file IDs */
+    hid_t acc_tpl;		/* File access properties */
+    hbool_t use_gpfs = FALSE;   /* Use GPFS hints */
+    herr_t ret;			/* generic return value */
+    const char *filename;
+
+    filename = GetTestParameters();
+    if (VERBOSE_MED)
+	printf("Split Communicator access test on file %s\n",
+	    filename);
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+    color = mpi_rank%2;
+    mrc = MPI_Comm_split (MPI_COMM_WORLD, color, mpi_rank, &comm);
+    VRFY((mrc==MPI_SUCCESS), "");
+    MPI_Comm_size(comm,&newprocs);
+    MPI_Comm_rank(comm,&newrank);
+
+    if (color){
+	/* odd-rank processes */
+	mrc = MPI_Barrier(comm);
+	VRFY((mrc==MPI_SUCCESS), "");
+    }else{
+	/* even-rank processes */
+	int sub_mpi_rank;	/* rank in the sub-comm */
+	MPI_Comm_rank(comm,&sub_mpi_rank);
+
+	/* setup file access template */
+	acc_tpl = create_faccess_plist(comm, info, facc_type, use_gpfs);
+	VRFY((acc_tpl >= 0), "");
+
+	/* create the file collectively */
+	fid=H5Fcreate(filename,H5F_ACC_TRUNC,H5P_DEFAULT,acc_tpl);
+	VRFY((fid >= 0), "H5Fcreate succeeded");
+
+	/* Release file-access template */
+	ret=H5Pclose(acc_tpl);
+	VRFY((ret >= 0), "");
+
+	/* close the file */
+	ret=H5Fclose(fid);
+	VRFY((ret >= 0), "");
+
+	/* delete the test file */
+	if (sub_mpi_rank == 0){
+	    mrc = MPI_File_delete((char *)filename, info);
+	    /*VRFY((mrc==MPI_SUCCESS), ""); */
+	}
+    }
+    mrc = MPI_Barrier(MPI_COMM_WORLD);
+    VRFY((mrc==MPI_SUCCESS), "final MPI_Barrier succeeded");
+}
+
+

Added: packages/hdf5/branches/upstream/current/testpar/t_mdset.c
===================================================================
--- packages/hdf5/branches/upstream/current/testpar/t_mdset.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/testpar/t_mdset.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1582 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "testphdf5.h"
+
+#define DIM  2
+#define SIZE 32
+#define NDATASET 4
+#define GROUP_DEPTH 128
+enum obj_type { is_group, is_dset };
+
+
+int get_size(void);
+void write_dataset(hid_t, hid_t, hid_t);
+int  read_dataset(hid_t, hid_t, hid_t);
+void create_group_recursive(hid_t, hid_t, hid_t, int);
+void recursive_read_group(hid_t, hid_t, hid_t, int);
+void group_dataset_read(hid_t fid, int mpi_rank, int m);
+void write_attribute(hid_t, int, int);
+int  read_attribute(hid_t, int, int);
+int  check_value(DATATYPE *, DATATYPE *, int);
+void get_slab(hsize_t[], hsize_t[], hsize_t[], hsize_t[], int);
+
+
+/*
+ * The size value computed by this function is used extensively in
+ * configuring tests for the current number of processes.
+ *
+ * This function was created as part of an effort to allow the
+ * test functions in this file to run on an arbitrary number of
+ * processors.
+ *                                       JRM - 8/11/04
+ */
+
+int get_size(void)
+{
+    int mpi_rank;
+    int mpi_size;
+    int size = SIZE;
+
+    MPI_Comm_rank (MPI_COMM_WORLD, &mpi_rank); /* needed for VRFY */
+    MPI_Comm_size (MPI_COMM_WORLD, &mpi_size);
+
+    if ( mpi_size > size ) {
+
+        if ( (mpi_size % 2) == 0 ) {
+
+            size = mpi_size;
+
+        } else {
+
+            size = mpi_size + 1;
+        }
+    }
+
+    VRFY((mpi_size <= size), "mpi_size <= size");
+    VRFY(((size % 2) == 0), "size isn't even");
+
+    return(size);
+
+} /* get_size() */
+
+/*
+ * Example of using PHDF5 to create ndatasets datasets.  Each process write
+ * a slab of array to the file.
+ *
+ * Changes:	Updated function to use a dynamically calculated size,
+ *		instead of the old SIZE #define.  This should allow it
+ *		to function with an arbitrary number of processors.
+ *
+ *						JRM - 8/11/04
+ */
+void multiple_dset_write(void)
+{
+    int i, j, n, mpi_size, mpi_rank, size;
+    hid_t iof, plist, dataset, memspace, filespace;
+    hid_t dcpl;                         /* Dataset creation property list */
+    hbool_t use_gpfs = FALSE;           /* Use GPFS hints */
+    hsize_t chunk_origin [DIM];
+    hsize_t chunk_dims [DIM], file_dims [DIM];
+    hsize_t count[DIM]={1,1};
+    double * outme = NULL;
+    double fill=1.0;                    /* Fill value */
+    char dname [100];
+    herr_t ret;
+    const H5Ptest_param_t *pt;
+    char	*filename;
+    int		ndatasets;
+
+    pt = GetTestParameters();
+    filename = pt->name;
+    ndatasets = pt->count;
+
+    size = get_size();
+
+    MPI_Comm_rank (MPI_COMM_WORLD, &mpi_rank);
+    MPI_Comm_size (MPI_COMM_WORLD, &mpi_size);
+
+    outme = HDmalloc((size_t)(size * size * sizeof(double)));
+    VRFY((outme != NULL), "HDmalloc succeeded for outme");
+
+    plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs);
+    VRFY((plist>=0), "create_faccess_plist succeeded");
+    iof = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, plist);
+    VRFY((iof>=0), "H5Fcreate succeeded");
+    ret = H5Pclose (plist);
+    VRFY((ret>=0), "H5Pclose succeeded");
+
+    /* decide the hyperslab according to process number. */
+    get_slab(chunk_origin, chunk_dims, count, file_dims, size);
+
+    memspace = H5Screate_simple (DIM, chunk_dims, NULL);
+    filespace = H5Screate_simple (DIM, file_dims, NULL);
+    ret = H5Sselect_hyperslab (filespace, H5S_SELECT_SET, chunk_origin, chunk_dims, count, chunk_dims);
+    VRFY((ret>=0), "mdata hyperslab selection");
+
+    /* Create a dataset creation property list */
+    dcpl = H5Pcreate(H5P_DATASET_CREATE);
+    VRFY((dcpl>=0), "dataset creation property list succeeded");
+
+    ret=H5Pset_fill_value(dcpl, H5T_NATIVE_DOUBLE, &fill);
+    VRFY((ret>=0), "set fill-value succeeded");
+
+    for (n = 0; n < ndatasets; n++) {
+	sprintf (dname, "dataset %d", n);
+	dataset = H5Dcreate (iof, dname, H5T_NATIVE_DOUBLE, filespace, dcpl);
+	VRFY((dataset > 0), dname);
+
+	/* calculate data to write */
+	for (i = 0; i < size; i++)
+	    for (j = 0; j < size; j++)
+                outme [(i * size) + j] = n*1000 + mpi_rank;
+
+	H5Dwrite (dataset, H5T_NATIVE_DOUBLE, memspace, filespace, H5P_DEFAULT, outme);
+
+	H5Dclose (dataset);
+#ifdef BARRIER_CHECKS
+	if (! ((n+1) % 10)) {
+	    printf("created %d datasets\n", n+1);
+	    MPI_Barrier(MPI_COMM_WORLD);
+	}
+#endif /* BARRIER_CHECKS */
+    }
+
+    H5Sclose (filespace);
+    H5Sclose (memspace);
+    H5Pclose (dcpl);
+    H5Fclose (iof);
+
+    HDfree(outme);
+}
+
+
+/* Example of using PHDF5 to create, write, and read compact dataset.
+ *
+ * Changes:	Updated function to use a dynamically calculated size,
+ *		instead of the old SIZE #define.  This should allow it
+ *		to function with an arbitrary number of processors.
+ *
+ *						JRM - 8/11/04
+ */
+void compact_dataset(void)
+{
+    int i, j, mpi_size, mpi_rank, size, err_num=0;
+    hbool_t use_gpfs = FALSE;
+    hid_t iof, plist, dcpl, dxpl, dataset, filespace;
+    hsize_t file_dims [DIM];
+    double * outme;
+    double * inme;
+    char dname[]="dataset";
+    herr_t ret;
+    const char *filename;
+
+    size = get_size();
+
+    for ( i = 0; i < DIM; i++ )
+    {
+        file_dims[i] = size;
+    }
+
+    MPI_Comm_rank (MPI_COMM_WORLD, &mpi_rank);
+    MPI_Comm_size (MPI_COMM_WORLD, &mpi_size);
+
+    outme = HDmalloc((size_t)(size * size * sizeof(double)));
+    VRFY((outme != NULL), "HDmalloc succeeded for outme");
+
+    inme = HDmalloc((size_t)(size * size * sizeof(double)));
+    VRFY((outme != NULL), "HDmalloc succeeded for inme");
+
+    filename = GetTestParameters();
+    VRFY((mpi_size <= size), "mpi_size <= size");
+
+    plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs);
+    iof = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, plist);
+
+    /* Define data space */
+    filespace = H5Screate_simple (DIM, file_dims, NULL);
+
+    /* Create a compact dataset */
+    dcpl = H5Pcreate(H5P_DATASET_CREATE);
+    VRFY((dcpl>=0), "dataset creation property list succeeded");
+    ret=H5Pset_layout(dcpl, H5D_COMPACT);
+    VRFY((dcpl >= 0), "set property list for compact dataset");
+    ret=H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_EARLY);
+    VRFY((ret >= 0), "set space allocation time for compact dataset");
+
+    dataset = H5Dcreate (iof, dname, H5T_NATIVE_DOUBLE, filespace, dcpl);
+    VRFY((dataset >= 0), "H5Dcreate succeeded");
+
+    /* set up the collective transfer properties list */
+    dxpl = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((dxpl >= 0), "");
+    ret=H5Pset_dxpl_mpio(dxpl, H5FD_MPIO_COLLECTIVE);
+    VRFY((ret >= 0), "H5Pcreate xfer succeeded");
+
+    /* Recalculate data to write.  Each process writes the same data. */
+    for (i = 0; i < size; i++)
+         for (j = 0; j < size; j++)
+              outme[(i * size) + j] = (i+j)*1000;
+
+    ret=H5Dwrite (dataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, dxpl, outme);
+    VRFY((ret >= 0), "H5Dwrite succeeded");
+
+    H5Pclose (dcpl);
+    H5Pclose (plist);
+    H5Dclose (dataset);
+    H5Sclose (filespace);
+    H5Fclose (iof);
+
+    /* Open the file and dataset, read and compare the data. */
+    plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs);
+    iof = H5Fopen(filename, H5F_ACC_RDONLY, plist);
+    VRFY((iof >= 0), "H5Fopen succeeded");
+
+    /* set up the collective transfer properties list */
+    dxpl = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((dxpl >= 0), "");
+    ret=H5Pset_dxpl_mpio(dxpl, H5FD_MPIO_COLLECTIVE);
+    VRFY((ret >= 0), "H5Pcreate xfer succeeded");
+
+    dataset = H5Dopen(iof, dname);
+    VRFY((dataset >= 0), "H5Dcreate succeeded");
+
+    ret = H5Dread(dataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, dxpl, inme);
+    VRFY((ret >= 0), "H5Dread succeeded");
+
+    /* Verify data value */
+    for (i = 0; i < size; i++)
+        for (j = 0; j < size; j++)
+            if ( inme[(i * size) + j] != outme[(i * size) + j])
+                if(err_num++ < MAX_ERR_REPORT || VERBOSE_MED)
+                    printf("Dataset Verify failed at [%d][%d]: expect %f, got %f\n", i, j, outme[(i * size) + j], inme[(i * size) + j]);
+
+    H5Pclose(plist);
+    H5Pclose(dxpl);
+    H5Dclose(dataset);
+    H5Fclose(iof);
+    HDfree(inme);
+    HDfree(outme);
+}
+
+/* Example of using PHDF5 to create "large" datasets.  (>2GB, >4GB, >8GB)
+ * Actual data is _not_ written to these datasets.  Dataspaces are exact
+ * sizes (2GB, 4GB, etc.), but the metadata for the file pushes the file over
+ * the boundary of interest.
+ *
+ * Changes:	Removed the assert that mpi_size <= the SIZE #define.
+ *		As best I can tell, this assert isn't needed here,
+ *		and in any case, the SIZE #define is being removed
+ *		in an update of the functions in this file to run
+ *		with an arbitrary number of processes.
+ *
+ *                                         JRM - 8/11/04
+ */
+void big_dataset(void)
+{
+    int mpi_size, mpi_rank;     /* MPI info */
+    hbool_t use_gpfs = FALSE;   /* Don't use GPFS stuff for this test */
+    hid_t iof,                  /* File ID */
+        fapl,                   /* File access property list ID */
+        dataset,                /* Dataset ID */
+        filespace;              /* Dataset's dataspace ID */
+    hsize_t file_dims [4];      /* Dimensions of dataspace */
+    char dname[]="dataset";     /* Name of dataset */
+    MPI_Offset file_size;       /* Size of file on disk */
+    herr_t ret;                 /* Generic return value */
+    const char *filename;
+
+    MPI_Comm_rank (MPI_COMM_WORLD, &mpi_rank);
+    MPI_Comm_size (MPI_COMM_WORLD, &mpi_size);
+
+    /* Verify MPI_Offset can handle larger than 2GB sizes */
+    VRFY((sizeof(MPI_Offset)>4), "sizeof(MPI_Offset)>4");
+
+    filename = GetTestParameters();
+
+    fapl = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs);
+    VRFY((fapl >= 0), "create_faccess_plist succeeded");
+
+    /*
+     * Create >2GB HDF5 file
+     */
+    iof = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+    VRFY((iof >= 0), "H5Fcreate succeeded");
+
+    /* Define dataspace for 2GB dataspace */
+    file_dims[0]= 2;
+    file_dims[1]= 1024;
+    file_dims[2]= 1024;
+    file_dims[3]= 1024;
+    filespace = H5Screate_simple (4, file_dims, NULL);
+    VRFY((filespace >= 0), "H5Screate_simple succeeded");
+
+    dataset = H5Dcreate (iof, dname, H5T_NATIVE_UCHAR, filespace, H5P_DEFAULT);
+    VRFY((dataset >= 0), "H5Dcreate succeeded");
+
+    /* Close all file objects */
+    ret=H5Dclose (dataset);
+    VRFY((ret >= 0), "H5Dclose succeeded");
+    ret=H5Sclose (filespace);
+    VRFY((ret >= 0), "H5Sclose succeeded");
+    ret=H5Fclose (iof);
+    VRFY((ret >= 0), "H5Fclose succeeded");
+
+    /* Check that file of the correct size was created */
+    file_size=h5_mpi_get_file_size(filename, MPI_COMM_WORLD, MPI_INFO_NULL);
+    VRFY((file_size == 2147485696ULL), "File is correct size");
+
+    /*
+     * Create >4GB HDF5 file
+     */
+    iof = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+    VRFY((iof >= 0), "H5Fcreate succeeded");
+
+    /* Define dataspace for 4GB dataspace */
+    file_dims[0]= 4;
+    file_dims[1]= 1024;
+    file_dims[2]= 1024;
+    file_dims[3]= 1024;
+    filespace = H5Screate_simple (4, file_dims, NULL);
+    VRFY((filespace >= 0), "H5Screate_simple succeeded");
+
+    dataset = H5Dcreate (iof, dname, H5T_NATIVE_UCHAR, filespace, H5P_DEFAULT);
+    VRFY((dataset >= 0), "H5Dcreate succeeded");
+
+    /* Close all file objects */
+    ret=H5Dclose (dataset);
+    VRFY((ret >= 0), "H5Dclose succeeded");
+    ret=H5Sclose (filespace);
+    VRFY((ret >= 0), "H5Sclose succeeded");
+    ret=H5Fclose (iof);
+    VRFY((ret >= 0), "H5Fclose succeeded");
+
+    /* Check that file of the correct size was created */
+    file_size=h5_mpi_get_file_size(filename, MPI_COMM_WORLD, MPI_INFO_NULL);
+    VRFY((file_size == 4294969344ULL), "File is correct size");
+
+    /*
+     * Create >8GB HDF5 file
+     */
+    iof = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+    VRFY((iof >= 0), "H5Fcreate succeeded");
+
+    /* Define dataspace for 8GB dataspace */
+    file_dims[0]= 8;
+    file_dims[1]= 1024;
+    file_dims[2]= 1024;
+    file_dims[3]= 1024;
+    filespace = H5Screate_simple (4, file_dims, NULL);
+    VRFY((filespace >= 0), "H5Screate_simple succeeded");
+
+    dataset = H5Dcreate (iof, dname, H5T_NATIVE_UCHAR, filespace, H5P_DEFAULT);
+    VRFY((dataset >= 0), "H5Dcreate succeeded");
+
+    /* Close all file objects */
+    ret=H5Dclose (dataset);
+    VRFY((ret >= 0), "H5Dclose succeeded");
+    ret=H5Sclose (filespace);
+    VRFY((ret >= 0), "H5Sclose succeeded");
+    ret=H5Fclose (iof);
+    VRFY((ret >= 0), "H5Fclose succeeded");
+
+    /* Check that file of the correct size was created */
+    file_size=h5_mpi_get_file_size(filename, MPI_COMM_WORLD, MPI_INFO_NULL);
+    VRFY((file_size == 8589936640ULL), "File is correct size");
+
+    /* Close fapl */
+    ret=H5Pclose (fapl);
+    VRFY((ret >= 0), "H5Pclose succeeded");
+}
+
+/* Example of using PHDF5 to read a partial written dataset.   The dataset does
+ * not have actual data written to the entire raw data area and relies on the
+ * default fill value of zeros to work correctly.
+ *
+ * Changes:	Removed the assert that mpi_size <= the SIZE #define.
+ *		As best I can tell, this assert isn't needed here,
+ *		and in any case, the SIZE #define is being removed
+ *		in an update of the functions in this file to run
+ *		with an arbitrary number of processes.
+ *
+ *		Also added code to free dynamically allocated buffers.
+ *
+ *                                         JRM - 8/11/04
+ */
+void dataset_fillvalue(void)
+{
+    int mpi_size, mpi_rank;     /* MPI info */
+    hbool_t use_gpfs = FALSE;   /* Don't use GPFS stuff for this test */
+    int err_num;                /* Number of errors */
+    hid_t iof,                  /* File ID */
+        fapl,                   /* File access property list ID */
+        dxpl,                   /* Data transfer property list ID */
+        dataset,                /* Dataset ID */
+        memspace,               /* Memory dataspace ID */
+        filespace;              /* Dataset's dataspace ID */
+    char dname[]="dataset";     /* Name of dataset */
+    hsize_t     dset_dims[4] = {0, 6, 7, 8};
+    hsize_t     req_start[4] = {0, 0, 0, 0};
+    hsize_t     req_count[4] = {1, 6, 7, 8};
+    hsize_t     dset_size;      /* Dataset size */
+    int *rdata, *wdata;         /* Buffers for data to read and write */
+    int *twdata, *trdata;        /* Temporary pointer into buffer */
+    int acc, i, j, k, l;        /* Local index variables */
+    herr_t ret;                 /* Generic return value */
+    const char *filename;
+
+    MPI_Comm_rank (MPI_COMM_WORLD, &mpi_rank);
+    MPI_Comm_size (MPI_COMM_WORLD, &mpi_size);
+
+    filename = GetTestParameters();
+
+    /* Set the dataset dimension to be one row more than number of processes */
+    /* and calculate the actual dataset size. */
+    dset_dims[0]=mpi_size+1;
+    dset_size=dset_dims[0]*dset_dims[1]*dset_dims[2]*dset_dims[3];
+
+    /* Allocate space for the buffers */
+    rdata=HDmalloc((size_t)(dset_size*sizeof(int)));
+    VRFY((rdata != NULL), "HDcalloc succeeded for read buffer");
+    wdata=HDmalloc((size_t)(dset_size*sizeof(int)));
+    VRFY((wdata != NULL), "HDmalloc succeeded for write buffer");
+
+    fapl = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs);
+    VRFY((fapl >= 0), "create_faccess_plist succeeded");
+
+    /*
+     * Create HDF5 file
+     */
+    iof = H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+    VRFY((iof >= 0), "H5Fcreate succeeded");
+
+    filespace = H5Screate_simple(4, dset_dims, NULL);
+    VRFY((filespace >= 0), "File H5Screate_simple succeeded");
+
+    dataset = H5Dcreate(iof, dname, H5T_NATIVE_INT, filespace, H5P_DEFAULT);
+    VRFY((dataset >= 0), "H5Dcreate succeeded");
+
+    memspace = H5Screate_simple(4, dset_dims, NULL);
+    VRFY((memspace >= 0), "Memory H5Screate_simple succeeded");
+
+    /*
+     * Read dataset before any data is written.
+     */
+    /* set entire read buffer with the constant 2 */
+    HDmemset(rdata,2,(size_t)(dset_size*sizeof(int)));
+    /* Independently read the entire dataset back */
+    ret=H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
+    VRFY((ret >= 0), "H5Dread succeeded");
+
+    /* Verify all data read are the fill value 0 */
+    trdata=rdata;
+    err_num=0;
+    for (i=0; i<(int)dset_dims[0]; i++)
+        for (j=0; j<(int)dset_dims[1]; j++)
+            for (k=0; k<(int)dset_dims[2]; k++)
+                for (l=0; l<(int)dset_dims[3]; l++, twdata++, trdata++)
+		    if( *trdata != 0)
+			if(err_num++ < MAX_ERR_REPORT || VERBOSE_MED)
+			    printf("Dataset Verify failed at [%d][%d][%d][%d]: expect 0, got %d\n", i,j,k,l, *trdata);
+    if(err_num > MAX_ERR_REPORT && !VERBOSE_MED)
+        printf("[more errors ...]\n");
+    if(err_num){
+        printf("%d errors found in check_value\n", err_num);
+	nerrors++;
+    }
+
+    /* Barrier to ensure all processes have completed the above test. */
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /*
+     * Each process writes 1 row of data. Thus last row is not written.
+     */
+    /* Create hyperslabs in memory and file dataspaces */
+    req_start[0]=mpi_rank;
+    ret=H5Sselect_hyperslab(filespace, H5S_SELECT_SET, req_start, NULL, req_count, NULL);
+    VRFY((ret >= 0), "H5Sselect_hyperslab succeeded on memory dataspace");
+    ret=H5Sselect_hyperslab(memspace, H5S_SELECT_SET, req_start, NULL, req_count, NULL);
+    VRFY((ret >= 0), "H5Sselect_hyperslab succeeded on memory dataspace");
+
+    /* Create DXPL for collective I/O */
+    dxpl = H5Pcreate (H5P_DATASET_XFER);
+    VRFY((dxpl >= 0), "H5Pcreate succeeded");
+
+    ret=H5Pset_dxpl_mpio(dxpl, H5FD_MPIO_COLLECTIVE);
+    VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
+
+    /* Fill write buffer with some values */
+    twdata=wdata;
+    for (i=0, acc=0; i<(int)dset_dims[0]; i++)
+        for (j=0; j<(int)dset_dims[1]; j++)
+            for (k=0; k<(int)dset_dims[2]; k++)
+                for (l=0; l<(int)dset_dims[3]; l++)
+                    *twdata++ = acc++;
+
+    /* Collectively write a hyperslab of data to the dataset */
+    ret=H5Dwrite(dataset, H5T_NATIVE_INT, memspace, filespace, dxpl, wdata);
+    VRFY((ret >= 0), "H5Dwrite succeeded");
+
+    /* Barrier here, to allow MPI-posix I/O to sync */
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /*
+     * Read dataset after partial write.
+     */
+    /* set entire read buffer with the constant 2 */
+    HDmemset(rdata,2,(size_t)(dset_size*sizeof(int)));
+    /* Independently read the entire dataset back */
+    ret=H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, rdata);
+    VRFY((ret >= 0), "H5Dread succeeded");
+
+    /* Verify correct data read */
+    twdata=wdata;
+    trdata=rdata;
+    err_num=0;
+    for (i=0; i<(int)dset_dims[0]; i++)
+        for (j=0; j<(int)dset_dims[1]; j++)
+            for (k=0; k<(int)dset_dims[2]; k++)
+                for (l=0; l<(int)dset_dims[3]; l++, twdata++, trdata++)
+                    if(i<mpi_size) {
+                        if( *twdata != *trdata )
+                            if(err_num++ < MAX_ERR_REPORT || VERBOSE_MED)
+                                printf("Dataset Verify failed at [%d][%d][%d][%d]: expect %d, got %d\n", i,j,k,l, *twdata, *trdata);
+                    } /* end if */
+                    else {
+                        if( *trdata != 0)
+                            if(err_num++ < MAX_ERR_REPORT || VERBOSE_MED)
+                                printf("Dataset Verify failed at [%d][%d][%d][%d]: expect 0, got %d\n", i,j,k,l, *trdata);
+                    } /* end else */
+    if(err_num > MAX_ERR_REPORT && !VERBOSE_MED)
+        printf("[more errors ...]\n");
+    if(err_num){
+        printf("%d errors found in check_value\n", err_num);
+	nerrors++;
+    }
+
+    /* Close all file objects */
+    ret=H5Dclose (dataset);
+    VRFY((ret >= 0), "H5Dclose succeeded");
+    ret=H5Sclose (filespace);
+    VRFY((ret >= 0), "H5Sclose succeeded");
+    ret=H5Fclose (iof);
+    VRFY((ret >= 0), "H5Fclose succeeded");
+
+    /* Close memory dataspace */
+    ret=H5Sclose (memspace);
+    VRFY((ret >= 0), "H5Sclose succeeded");
+
+    /* Close dxpl */
+    ret=H5Pclose (dxpl);
+    VRFY((ret >= 0), "H5Pclose succeeded");
+
+    /* Close fapl */
+    ret=H5Pclose (fapl);
+    VRFY((ret >= 0), "H5Pclose succeeded");
+
+    /* free the buffers */
+    HDfree(rdata);
+    HDfree(wdata);
+}
+
+/* Write multiple groups with a chunked dataset in each group collectively.
+ * These groups and datasets are for testing independent read later.
+ *
+ * Changes:     Updated function to use a dynamically calculated size,
+ *              instead of the old SIZE #define.  This should allow it
+ *              to function with an arbitrary number of processors.
+ *
+ *                                              JRM - 8/16/04
+ */
+void collective_group_write(void)
+{
+    int mpi_rank, mpi_size, size;
+    int i, j, m;
+    hbool_t use_gpfs = FALSE;
+    char gname[64], dname[32];
+    hid_t fid, gid, did, plist, dcpl, memspace, filespace;
+    DATATYPE * outme = NULL;
+    hsize_t chunk_origin[DIM];
+    hsize_t chunk_dims[DIM], file_dims[DIM], count[DIM];
+    hsize_t chunk_size[2];  /* Chunk dimensions - computed shortly */
+    herr_t ret1, ret2;
+    const H5Ptest_param_t *pt;
+    char	*filename;
+    int		ngroups;
+
+    pt = GetTestParameters();
+    filename = pt->name;
+    ngroups = pt->count;
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+
+    size = get_size();
+
+    chunk_size[0] = (hsize_t)(size / 2);
+    chunk_size[1] = (hsize_t)(size / 2);
+
+    outme = HDmalloc((size_t)(size * size * sizeof(DATATYPE)));
+    VRFY((outme != NULL), "HDmalloc succeeded for outme");
+
+    plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs);
+    fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, plist);
+    H5Pclose(plist);
+
+    /* decide the hyperslab according to process number. */
+    get_slab(chunk_origin, chunk_dims, count, file_dims, size);
+
+    /* select hyperslab in memory and file spaces.  These two operations are
+     * identical since the datasets are the same. */
+    memspace  = H5Screate_simple(DIM, file_dims, NULL);
+    ret1 = H5Sselect_hyperslab(memspace, H5S_SELECT_SET, chunk_origin,
+                               chunk_dims, count, chunk_dims);
+    filespace = H5Screate_simple(DIM, file_dims,  NULL);
+    ret2 = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, chunk_origin,
+                               chunk_dims, count, chunk_dims);
+    VRFY((memspace>=0), "memspace");
+    VRFY((filespace>=0), "filespace");
+    VRFY((ret1>=0), "mgroup memspace selection");
+    VRFY((ret2>=0), "mgroup filespace selection");
+
+    dcpl = H5Pcreate(H5P_DATASET_CREATE);
+    ret1 = H5Pset_chunk (dcpl, 2, chunk_size);
+    VRFY((dcpl>=0), "dataset creation property");
+    VRFY((ret1>=0), "set chunk for dataset creation property");
+
+    /* creates ngroups groups under the root group, writes chunked
+     * datasets in parallel. */
+    for(m = 0; m < ngroups; m++) {
+        sprintf(gname, "group%d", m);
+        gid = H5Gcreate(fid, gname, 0);
+        VRFY((gid > 0), gname);
+
+        sprintf(dname, "dataset%d", m);
+        did = H5Dcreate(gid, dname, H5T_NATIVE_INT, filespace, dcpl);
+        VRFY((did > 0), dname);
+
+        for(i=0; i < size; i++)
+            for(j=0; j < size; j++)
+                outme[(i * size) + j] = (i+j)*1000 + mpi_rank;
+
+        H5Dwrite(did, H5T_NATIVE_INT, memspace, filespace, H5P_DEFAULT,
+                 outme);
+
+        H5Dclose(did);
+        H5Gclose(gid);
+
+#ifdef BARRIER_CHECKS
+        if(! ((m+1) % 10)) {
+            printf("created %d groups\n", m+1);
+            MPI_Barrier(MPI_COMM_WORLD);
+	}
+#endif /* BARRIER_CHECKS */
+    }
+
+    H5Pclose(dcpl);
+    H5Sclose(filespace);
+    H5Sclose(memspace);
+    H5Fclose(fid);
+
+    HDfree(outme);
+}
+
+/* Let two sets of processes open and read different groups and chunked
+ * datasets independently.
+ */
+void independent_group_read(void)
+{
+    int      mpi_rank, m;
+    hid_t    plist, fid;
+    hbool_t  use_gpfs = FALSE;
+    const H5Ptest_param_t *pt;
+    char	*filename;
+    int		ngroups;
+
+    pt = GetTestParameters();
+    filename = pt->name;
+    ngroups = pt->count;
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
+    plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs);
+    fid = H5Fopen(filename, H5F_ACC_RDONLY, plist);
+    H5Pclose(plist);
+
+    /* open groups and read datasets. Odd number processes read even number
+     * groups from the end; even number processes read odd number groups
+     * from the beginning. */
+    if(mpi_rank%2==0) {
+        for(m=ngroups-1; m==0; m-=2)
+            group_dataset_read(fid, mpi_rank, m);
+    } else {
+        for(m=0; m<ngroups; m+=2)
+            group_dataset_read(fid, mpi_rank, m);
+    }
+
+    H5Fclose(fid);
+}
+
+/* Open and read datasets and compare data
+ *
+ * Changes:     Updated function to use a dynamically calculated size,
+ *              instead of the old SIZE #define.  This should allow it
+ *              to function with an arbitrary number of processors.
+ *
+ *		Also added code to verify the results of dynamic memory
+ *		allocations, and to free dynamically allocated memeory
+ *		when we are done with it.
+ *
+ *                                              JRM - 8/16/04
+ */
+void group_dataset_read(hid_t fid, int mpi_rank, int m)
+{
+    int      ret, i, j, size;
+    char     gname[64], dname[32];
+    hid_t    gid, did;
+    DATATYPE *outdata = NULL;
+    DATATYPE *indata = NULL;
+
+    size = get_size();
+
+    indata = (DATATYPE*)HDmalloc((size_t)(size * size * sizeof(DATATYPE)));
+    VRFY((indata != NULL), "HDmalloc succeeded for indata");
+
+    outdata = (DATATYPE*)HDmalloc((size_t)(size * size * sizeof(DATATYPE)));
+    VRFY((outdata != NULL), "HDmalloc succeeded for outdata");
+
+    /* open every group under root group. */
+    sprintf(gname, "group%d", m);
+    gid = H5Gopen(fid, gname);
+    VRFY((gid > 0), gname);
+
+    /* check the data. */
+    sprintf(dname, "dataset%d", m);
+    did = H5Dopen(gid, dname);
+    VRFY((did>0), dname);
+
+    H5Dread(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, indata);
+
+    /* this is the original value */
+    for(i=0; i<size; i++)
+       for(j=0; j<size; j++) {
+           outdata[(i * size) + j] = (i+j)*1000 + mpi_rank;
+       }
+
+    /* compare the original value(outdata) to the value in file(indata).*/
+    ret = check_value(indata, outdata, size);
+    VRFY((ret==0), "check the data");
+
+    H5Dclose(did);
+    H5Gclose(gid);
+
+    HDfree(indata);
+    HDfree(outdata);
+}
+
+/*
+ * Example of using PHDF5 to create multiple groups.  Under the root group,
+ * it creates ngroups groups.  Under the first group just created, it creates
+ * recursive subgroups of depth GROUP_DEPTH.  In each created group, it
+ * generates NDATASETS datasets.  Each process write a hyperslab of an array
+ * into the file.  The structure is like
+ *
+ *                             root group
+ *                                 |
+ *            ---------------------------- ... ... ------------------------
+ *           |          |         |        ... ...  |                      |
+ *       group0*+'   group1*+' group2*+'   ... ...             group ngroups*+'
+ *           |
+ *      1st_child_group*'
+ *           |
+ *      2nd_child_group*'
+ *           |
+ *           :
+ *           :
+ *           |
+ * GROUP_DEPTHth_child_group*'
+ *
+ *      * means the group has dataset(s).
+ *      + means the group has attribute(s).
+ *      ' means the datasets in the groups have attribute(s).
+ *
+ * Changes:     Updated function to use a dynamically calculated size,
+ *              instead of the old SIZE #define.  This should allow it
+ *              to function with an arbitrary number of processors.
+ *
+ *                                              JRM - 8/16/04
+ */
+void multiple_group_write(void)
+{
+    int mpi_rank, mpi_size, size;
+    int m;
+    hbool_t use_gpfs = FALSE;
+    char gname[64];
+    hid_t fid, gid, plist, memspace, filespace;
+    hsize_t chunk_origin[DIM];
+    hsize_t chunk_dims[DIM], file_dims[DIM], count[DIM];
+    herr_t ret;
+    const H5Ptest_param_t *pt;
+    char	*filename;
+    int		ngroups;
+
+    pt = GetTestParameters();
+    filename = pt->name;
+    ngroups = pt->count;
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+
+    size = get_size();
+
+    plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs);
+    fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, plist);
+    H5Pclose(plist);
+
+    /* decide the hyperslab according to process number. */
+    get_slab(chunk_origin, chunk_dims, count, file_dims, size);
+
+    /* select hyperslab in memory and file spaces.  These two operations are
+     * identical since the datasets are the same. */
+    memspace  = H5Screate_simple(DIM, file_dims, NULL);
+    VRFY((memspace>=0), "memspace");
+    ret = H5Sselect_hyperslab(memspace, H5S_SELECT_SET, chunk_origin,
+                               chunk_dims, count, chunk_dims);
+    VRFY((ret>=0), "mgroup memspace selection");
+
+    filespace = H5Screate_simple(DIM, file_dims,  NULL);
+    VRFY((filespace>=0), "filespace");
+    ret = H5Sselect_hyperslab(filespace, H5S_SELECT_SET, chunk_origin,
+                               chunk_dims, count, chunk_dims);
+    VRFY((ret>=0), "mgroup filespace selection");
+
+    /* creates ngroups groups under the root group, writes datasets in
+     * parallel. */
+    for(m = 0; m < ngroups; m++) {
+        sprintf(gname, "group%d", m);
+        gid = H5Gcreate(fid, gname, 0);
+        VRFY((gid > 0), gname);
+
+        /* create attribute for these groups. */
+	write_attribute(gid, is_group, m);
+
+        if(m != 0)
+	    write_dataset(memspace, filespace, gid);
+
+        H5Gclose(gid);
+
+#ifdef BARRIER_CHECKS
+        if(! ((m+1) % 10)) {
+            printf("created %d groups\n", m+1);
+            MPI_Barrier(MPI_COMM_WORLD);
+	}
+#endif /* BARRIER_CHECKS */
+    }
+
+    /* recursively creates subgroups under the first group. */
+    gid = H5Gopen(fid, "group0");
+    create_group_recursive(memspace, filespace, gid, 0);
+    ret = H5Gclose(gid);
+    VRFY((ret>=0), "H5Gclose");
+
+    ret = H5Sclose(filespace);
+    VRFY((ret>=0), "H5Sclose");
+    ret = H5Sclose(memspace);
+    VRFY((ret>=0), "H5Sclose");
+    ret = H5Fclose(fid);
+    VRFY((ret>=0), "H5Fclose");
+}
+
+/*
+ * In a group, creates NDATASETS datasets.  Each process writes a hyperslab
+ * of a data array to the file.
+ *
+ * Changes:     Updated function to use a dynamically calculated size,
+ *              instead of the old SIZE #define.  This should allow it
+ *              to function with an arbitrary number of processors.
+ *
+ *                                              JRM - 8/16/04
+ */
+void write_dataset(hid_t memspace, hid_t filespace, hid_t gid)
+{
+    int i, j, n, size;
+    int mpi_rank, mpi_size;
+    char dname[32];
+    DATATYPE * outme = NULL;
+    hid_t did;
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+
+    size = get_size();
+
+    outme = HDmalloc((size_t)(size * size * sizeof(double)));
+    VRFY((outme != NULL), "HDmalloc succeeded for outme");
+
+    for(n=0; n < NDATASET; n++) {
+         sprintf(dname, "dataset%d", n);
+         did = H5Dcreate(gid, dname, H5T_NATIVE_INT, filespace,
+                         H5P_DEFAULT);
+         VRFY((did > 0), dname);
+
+         for(i=0; i < size; i++)
+             for(j=0; j < size; j++)
+     	         outme[(i * size) + j] = n*1000 + mpi_rank;
+
+         H5Dwrite(did, H5T_NATIVE_INT, memspace, filespace, H5P_DEFAULT,
+                  outme);
+
+         /* create attribute for these datasets.*/
+         write_attribute(did, is_dset, n);
+
+         H5Dclose(did);
+    }
+    HDfree(outme);
+}
+
+/*
+ * Creates subgroups of depth GROUP_DEPTH recursively.  Also writes datasets
+ * in parallel in each group.
+ */
+void create_group_recursive(hid_t memspace, hid_t filespace, hid_t gid,
+                            int counter)
+{
+   hid_t child_gid;
+   int   mpi_rank;
+   char  gname[64];
+
+   MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
+#ifdef BARRIER_CHECKS
+   if(! ((counter+1) % 10)) {
+        printf("created %dth child groups\n", counter+1);
+        MPI_Barrier(MPI_COMM_WORLD);
+   }
+#endif /* BARRIER_CHECKS */
+
+   sprintf(gname, "%dth_child_group", counter+1);
+   child_gid = H5Gcreate(gid, gname, 0);
+   VRFY((child_gid > 0), gname);
+
+   /* write datasets in parallel. */
+   write_dataset(memspace, filespace, gid);
+
+   if( counter < GROUP_DEPTH )
+       create_group_recursive(memspace, filespace, child_gid, counter+1);
+
+   H5Gclose(child_gid);
+}
+
+/*
+ * This function is to verify the data from multiple group testing.  It opens
+ * every dataset in every group and check their correctness.
+ *
+ * Changes:     Updated function to use a dynamically calculated size,
+ *              instead of the old SIZE #define.  This should allow it
+ *              to function with an arbitrary number of processors.
+ *
+ *                                              JRM - 8/11/04
+ */
+void multiple_group_read(void)
+{
+    int      mpi_rank, mpi_size, error_num, size;
+    int      m;
+    hbool_t  use_gpfs = FALSE;
+    char     gname[64];
+    hid_t    plist, fid, gid, memspace, filespace;
+    hsize_t  chunk_origin[DIM];
+    hsize_t  chunk_dims[DIM], file_dims[DIM], count[DIM];
+    const H5Ptest_param_t *pt;
+    char	*filename;
+    int		ngroups;
+
+    pt = GetTestParameters();
+    filename = pt->name;
+    ngroups = pt->count;
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+
+    size = get_size();
+
+    plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type, use_gpfs);
+    fid = H5Fopen(filename, H5F_ACC_RDONLY, plist);
+    H5Pclose(plist);
+
+    /* decide hyperslab for each process */
+    get_slab(chunk_origin, chunk_dims, count, file_dims, size);
+
+    /* select hyperslab for memory and file space */
+    memspace  = H5Screate_simple(DIM, file_dims, NULL);
+    H5Sselect_hyperslab(memspace, H5S_SELECT_SET, chunk_origin, chunk_dims,
+                        count, chunk_dims);
+    filespace = H5Screate_simple(DIM, file_dims, NULL);
+    H5Sselect_hyperslab(filespace, H5S_SELECT_SET, chunk_origin, chunk_dims,
+                        count, chunk_dims);
+
+    /* open every group under root group. */
+    for(m=0; m<ngroups; m++) {
+        sprintf(gname, "group%d", m);
+        gid = H5Gopen(fid, gname);
+        VRFY((gid > 0), gname);
+
+        /* check the data. */
+        if(m != 0)
+            if( (error_num = read_dataset(memspace, filespace, gid))>0)
+	        nerrors += error_num;
+
+        /* check attribute.*/
+        error_num = 0;
+        if( (error_num = read_attribute(gid, is_group, m))>0 )
+	    nerrors += error_num;
+
+        H5Gclose(gid);
+
+#ifdef BARRIER_CHECKS
+        if(!((m+1)%10))
+            MPI_Barrier(MPI_COMM_WORLD);
+#endif /* BARRIER_CHECKS */
+    }
+
+    /* open all the groups in vertical direction. */
+    gid = H5Gopen(fid, "group0");
+    VRFY((gid>0), "group0");
+    recursive_read_group(memspace, filespace, gid, 0);
+    H5Gclose(gid);
+
+    H5Sclose(filespace);
+    H5Sclose(memspace);
+    H5Fclose(fid);
+
+}
+
+/*
+ * This function opens all the datasets in a certain, checks the data using
+ * dataset_vrfy function.
+ *
+ * Changes:     Updated function to use a dynamically calculated size,
+ *              instead of the old SIZE #define.  This should allow it
+ *              to function with an arbitrary number of processors.
+ *
+ *                                              JRM - 8/11/04
+ */
+int read_dataset(hid_t memspace, hid_t filespace, hid_t gid)
+{
+    int i, j, n, mpi_rank, mpi_size, size, attr_errors=0, vrfy_errors=0;
+    char dname[32];
+    DATATYPE *outdata = NULL, *indata = NULL;
+    hid_t did;
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+
+    size = get_size();
+
+    indata = (DATATYPE*)HDmalloc((size_t)(size * size * sizeof(DATATYPE)));
+    VRFY((indata != NULL), "HDmalloc succeeded for indata");
+
+    outdata = (DATATYPE*)HDmalloc((size_t)(size * size * sizeof(DATATYPE)));
+    VRFY((outdata != NULL), "HDmalloc succeeded for outdata");
+
+    for(n=0; n<NDATASET; n++) {
+        sprintf(dname, "dataset%d", n);
+        did = H5Dopen(gid, dname);
+        VRFY((did>0), dname);
+
+        H5Dread(did, H5T_NATIVE_INT, memspace, filespace, H5P_DEFAULT,
+                indata);
+
+        /* this is the original value */
+        for(i=0; i<size; i++)
+	    for(j=0; j<size; j++) {
+	         *outdata = n*1000 + mpi_rank;
+                 outdata++;
+	    }
+        outdata -= size * size;
+
+        /* compare the original value(outdata) to the value in file(indata).*/
+        vrfy_errors = check_value(indata, outdata, size);
+
+        /* check attribute.*/
+        if( (attr_errors = read_attribute(did, is_dset, n))>0 )
+            vrfy_errors += attr_errors;
+
+        H5Dclose(did);
+    }
+
+    HDfree(indata);
+    HDfree(outdata);
+
+    return vrfy_errors;
+}
+
+/*
+ * This recursive function opens all the groups in vertical direction and
+ * checks the data.
+ */
+void recursive_read_group(hid_t memspace, hid_t filespace, hid_t gid,
+                          int counter)
+{
+    hid_t child_gid;
+    int   mpi_rank, err_num=0;
+    char  gname[64];
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+#ifdef BARRIER_CHECKS
+    if((counter+1) % 10)
+        MPI_Barrier(MPI_COMM_WORLD);
+#endif /* BARRIER_CHECKS */
+
+    if( (err_num = read_dataset(memspace, filespace, gid)) )
+        nerrors += err_num;
+
+    if( counter < GROUP_DEPTH ) {
+        sprintf(gname, "%dth_child_group", counter+1);
+        child_gid = H5Gopen(gid, gname);
+        VRFY((child_gid>0), gname);
+        recursive_read_group(memspace, filespace, child_gid, counter+1);
+        H5Gclose(child_gid);
+    }
+}
+
+/* Create and write attribute for a group or a dataset.  For groups, attribute
+ * is a scalar datum; for dataset, it is a one-dimensional array.
+ */
+void write_attribute(hid_t obj_id, int this_type, int num)
+{
+    hid_t   sid, aid;
+    hsize_t dspace_dims[1]={8};
+    int     i, mpi_rank, attr_data[8], dspace_rank=1;
+    char    attr_name[32];
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
+    if(this_type == is_group) {
+        sprintf(attr_name, "Group Attribute %d", num);
+        sid = H5Screate(H5S_SCALAR);
+        aid = H5Acreate(obj_id, attr_name, H5T_NATIVE_INT, sid, H5P_DEFAULT);
+        H5Awrite(aid, H5T_NATIVE_INT,  &num);
+        H5Aclose(aid);
+        H5Sclose(sid);
+    }
+    else if(this_type == is_dset) {
+        sprintf(attr_name, "Dataset Attribute %d", num);
+        for(i=0; i<8; i++)
+            attr_data[i] = i;
+        sid = H5Screate_simple(dspace_rank, dspace_dims, NULL);
+        aid = H5Acreate(obj_id, attr_name, H5T_NATIVE_INT, sid, H5P_DEFAULT);
+        H5Awrite(aid, H5T_NATIVE_INT, attr_data);
+        H5Aclose(aid);
+        H5Sclose(sid);
+    }
+
+}
+
+/* Read and verify attribute for group or dataset. */
+int read_attribute(hid_t obj_id, int this_type, int num)
+{
+    hid_t aid;
+    hsize_t group_block[2]={1,1}, dset_block[2]={1, 8};
+    int  i, mpi_rank, in_num, in_data[8], out_data[8], vrfy_errors = 0;
+    char attr_name[32];
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
+    if(this_type == is_group) {
+        sprintf(attr_name, "Group Attribute %d", num);
+        aid = H5Aopen_name(obj_id, attr_name);
+        if(MAINPROCESS) {
+            H5Aread(aid, H5T_NATIVE_INT, &in_num);
+            vrfy_errors =  dataset_vrfy(NULL, NULL, NULL, group_block,
+                                        &in_num, &num);
+	}
+        H5Aclose(aid);
+    }
+    else if(this_type == is_dset) {
+        sprintf(attr_name, "Dataset Attribute %d", num);
+        for(i=0; i<8; i++)
+            out_data[i] = i;
+        aid = H5Aopen_name(obj_id, attr_name);
+        if(MAINPROCESS) {
+            H5Aread(aid, H5T_NATIVE_INT, in_data);
+            vrfy_errors = dataset_vrfy(NULL, NULL, NULL, dset_block, in_data,
+                                       out_data);
+	}
+        H5Aclose(aid);
+    }
+
+    return vrfy_errors;
+}
+
+/* This functions compares the original data with the read-in data for its
+ * hyperslab part only by process ID.
+ *
+ * Changes:	Modified function to use a passed in size parameter
+ *		instead of the old SIZE #define.  This should let us
+ *		run with an arbitrary number of processes.
+ *
+ *					JRM - 8/16/04
+ */
+int check_value(DATATYPE *indata, DATATYPE *outdata, int size)
+{
+    int mpi_rank, mpi_size, err_num=0;
+    hsize_t i, j;
+    hsize_t chunk_origin[DIM];
+    hsize_t  chunk_dims[DIM], count[DIM];
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+
+    get_slab(chunk_origin, chunk_dims, count, NULL, size);
+
+    indata += chunk_origin[0]*size;
+    outdata += chunk_origin[0]*size;
+    for(i=chunk_origin[0]; i<(chunk_origin[0]+chunk_dims[0]); i++)
+         for(j=chunk_origin[1]; j<(chunk_origin[1]+chunk_dims[1]); j++) {
+              if( *indata != *outdata )
+	          if(err_num++ < MAX_ERR_REPORT || VERBOSE_MED)
+		      printf("Dataset Verify failed at [%lu][%lu](row %lu, col%lu): expect %d, got %d\n", (unsigned long)i, (unsigned long)j, (unsigned long)i, (unsigned long)j, *outdata, *indata);
+	 }
+    if(err_num > MAX_ERR_REPORT && !VERBOSE_MED)
+        printf("[more errors ...]\n");
+    if(err_num)
+        printf("%d errors found in check_value\n", err_num);
+    return err_num;
+}
+
+/* Decide the portion of data chunk in dataset by process ID.
+ *
+ * Changes:	Modified function to use a passed in size parameter
+ *		instead of the old SIZE #define.  This should let us
+ *		run with an arbitrary number of processes.
+ *
+ *					JRM - 8/11/04
+ */
+
+void get_slab(hsize_t chunk_origin[],
+              hsize_t chunk_dims[],
+              hsize_t count[],
+              hsize_t file_dims[],
+              int size)
+{
+    int mpi_rank, mpi_size;
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+
+    if(chunk_origin != NULL) {
+        chunk_origin[0] = mpi_rank * (size/mpi_size);
+        chunk_origin[1] = 0;
+    }
+    if(chunk_dims != NULL) {
+        chunk_dims[0]   = size/mpi_size;
+        chunk_dims[1]   = size;
+    }
+    if(file_dims != NULL)
+        file_dims[0] = file_dims[1] = size;
+    if(count != NULL)
+        count[0] = count[1] = 1;
+}
+
+/*
+ * This function is based on bug demonstration code provided by Thomas
+ * Guignon (thomas.guignon at ifp.fr), and is intended to verify the
+ * correctness of my fix for that bug.
+ *
+ * In essence, the bug appeared when at least one process attempted to
+ * write a point selection -- for which collective I/O is not supported,
+ * and at least one other attempted to write some other type of selection
+ * for which collective I/O is supported.
+ *
+ * Since the processes did not compare notes before performing the I/O,
+ * some would attempt collective I/O while others performed independent
+ * I/O.  A hang resulted.
+ *
+ * This function reproduces this situation.  At present the test hangs
+ * on failure.
+ *                                         JRM - 9/13/04
+ *
+ * Changes:	None.
+ */
+
+#define N 4
+
+void io_mode_confusion(void)
+{
+    /*
+     * HDF5 APIs definitions
+     */
+
+    const int   rank = 1;
+    const char *dataset_name = "IntArray";
+
+    hid_t       file_id, dset_id;         /* file and dataset identifiers */
+    hid_t       filespace, memspace;      /* file and memory dataspace */
+                                          /* identifiers               */
+    hsize_t     dimsf[1];                 /* dataset dimensions */
+    int         data[N] = {1};            /* pointer to data buffer to write */
+    hsize_t     coord[N] = {0L,1L,2L,3L};
+    hsize_t     start[1];
+    hsize_t     stride[1];
+    hsize_t     count[1];
+    hsize_t     block[1];
+    hid_t       plist_id;                 /* property list identifier */
+    herr_t      status;
+
+
+    /*
+     * MPI variables
+     */
+
+    int mpi_size, mpi_rank;
+
+
+    /*
+     * test bed related variables
+     */
+
+    const char *	fcn_name = "io_mode_confusion";
+    const hbool_t	verbose = FALSE;
+    const H5Ptest_param_t *	pt;
+    char *		filename;
+
+
+    pt = GetTestParameters();
+    filename = pt->name;
+
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+
+    /*
+     * Set up file access property list with parallel I/O access
+     */
+
+    if ( verbose )
+        HDfprintf(stdout, "%0d:%s: Setting up property list.\n",
+                  mpi_rank, fcn_name);
+
+    plist_id = H5Pcreate(H5P_FILE_ACCESS);
+
+    VRFY((plist_id != -1), "H5Pcreate() failed");
+
+    status = H5Pset_fapl_mpio(plist_id, MPI_COMM_WORLD, MPI_INFO_NULL);
+
+    VRFY(( status >= 0 ), "H5Pset_fapl_mpio() failed");
+
+
+    /*
+     * Create a new file collectively and release property list identifier.
+     */
+
+    if ( verbose )
+        HDfprintf(stdout, "%0d:%s: Creating new file.\n", mpi_rank, fcn_name);
+
+    file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, plist_id);
+
+    VRFY(( file_id >= 0 ), "H5Fcreate() failed");
+
+    status = H5Pclose(plist_id);
+
+    VRFY(( status >= 0 ), "H5Pclose() failed");
+
+
+    /*
+     * Create the dataspace for the dataset.
+     */
+
+    if ( verbose )
+        HDfprintf(stdout, "%0d:%s: Creating the dataspace for the dataset.\n",
+                  mpi_rank, fcn_name);
+
+    dimsf[0] = N;
+
+    filespace = H5Screate_simple(rank, dimsf, NULL);
+
+    VRFY(( filespace >= 0 ), "H5Screate_simple() failed.");
+
+
+    /*
+     * Create the dataset with default properties and close filespace.
+     */
+
+    if ( verbose )
+        HDfprintf(stdout,
+                  "%0d:%s: Creating the dataset, and closing filespace.\n",
+                  mpi_rank, fcn_name);
+
+    dset_id = H5Dcreate(file_id, dataset_name, H5T_NATIVE_INT, filespace,
+                        H5P_DEFAULT);
+
+    VRFY(( dset_id >= 0 ), "H5Dcreate() failed");
+
+    status = H5Sclose(filespace);
+
+    VRFY(( status >= 0 ), "H5Sclose() failed");
+
+
+    if ( verbose )
+        HDfprintf(stdout, "%0d:%s: Calling H5Screate_simple().\n",
+                  mpi_rank, fcn_name);
+
+    memspace = H5Screate_simple(rank, dimsf, NULL);
+
+    VRFY(( memspace >= 0 ), "H5Screate_simple() failed.");
+
+
+    if( mpi_rank == 0 ) {
+
+        if ( verbose )
+            HDfprintf(stdout, "%0d:%s: Calling H5Sselect_all(memspace).\n",
+                      mpi_rank, fcn_name);
+
+        status = H5Sselect_all(memspace);
+
+        VRFY(( status >= 0 ), "H5Sselect_all() failed");
+
+    } else {
+
+        if ( verbose )
+            HDfprintf(stdout, "%0d:%s: Calling H5Sselect_none(memspace).\n",
+                      mpi_rank, fcn_name);
+
+        status = H5Sselect_none(memspace);
+
+        VRFY(( status >= 0 ), "H5Sselect_none() failed");
+
+    }
+
+
+    if ( verbose )
+        HDfprintf(stdout, "%0d:%s: Calling MPI_Barrier().\n",
+                  mpi_rank, fcn_name);
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+
+    if ( verbose )
+        HDfprintf(stdout, "%0d:%s: Calling H5Dget_space().\n",
+                  mpi_rank, fcn_name);
+
+    filespace = H5Dget_space(dset_id);
+
+    VRFY(( filespace >= 0 ), "H5Dget_space() failed");
+
+
+    start[0] = 0L;
+    stride[0] = 1;
+    count[0] = 1;
+    block[0] = N;
+
+    if ( mpi_rank == 0 ) {
+
+        /* select all */
+
+        if ( verbose )
+             HDfprintf(stdout,
+                       "%0d:%s: Calling H5Sselect_elements() -- set up hang?\n",
+                       mpi_rank, fcn_name);
+
+        status = H5Sselect_elements(filespace, H5S_SELECT_SET, N,
+                                    (const hsize_t **)&coord);
+
+        VRFY(( status >= 0 ), "H5Sselect_elements() failed");
+
+    } else {
+
+        /* select nothing */
+
+        if ( verbose )
+            HDfprintf(stdout, "%0d:%s: Calling H5Sselect_none().\n",
+                      mpi_rank, fcn_name);
+
+        status = H5Sselect_none(filespace);
+
+        VRFY(( status >= 0 ), "H5Sselect_none() failed");
+
+    }
+
+
+    if ( verbose )
+        HDfprintf(stdout, "%0d:%s: Calling MPI_Barrier().\n",
+                  mpi_rank, fcn_name);
+
+    MPI_Barrier(MPI_COMM_WORLD);
+
+
+    if ( verbose )
+        HDfprintf(stdout, "%0d:%s: Calling H5Pcreate().\n", mpi_rank, fcn_name);
+
+    plist_id = H5Pcreate(H5P_DATASET_XFER);
+
+    VRFY(( plist_id != -1 ), "H5Pcreate() failed");
+
+
+    if ( verbose )
+        HDfprintf(stdout, "%0d:%s: Calling H5Pset_dxpl_mpio().\n",
+                  mpi_rank, fcn_name);
+
+    status = H5Pset_dxpl_mpio(plist_id, H5FD_MPIO_COLLECTIVE);
+
+    VRFY(( status >= 0 ), "H5Pset_dxpl_mpio() failed");
+
+
+    if ( verbose )
+        HDfprintf(stdout, "%0d:%s: Calling H5Dwrite() -- hang here?.\n",
+                  mpi_rank, fcn_name);
+
+    status = H5Dwrite(dset_id, H5T_NATIVE_INT, memspace, filespace,
+                      plist_id, data);
+
+    if ( verbose )
+        HDfprintf(stdout, "%0d:%s: Returned from H5Dwrite(), status=%d.\n",
+                  mpi_rank, fcn_name, status);
+
+    VRFY(( status >= 0 ), "H5Dwrite() failed");
+
+    /*
+     * Close/release resources.
+     */
+
+    if ( verbose )
+        HDfprintf(stdout, "%0d:%s: Cleaning up from test.\n",
+                  mpi_rank, fcn_name);
+
+    status = H5Dclose(dset_id);
+    VRFY(( status >= 0 ), "H5Dclose() failed");
+
+    status = H5Sclose(filespace);
+    VRFY(( status >= 0 ), "H5Dclose() failed");
+
+    status = H5Sclose(memspace);
+    VRFY(( status >= 0 ), "H5Sclose() failed");
+
+    status = H5Pclose(plist_id);
+    VRFY(( status >= 0 ), "H5Pclose() failed");
+
+    status = H5Fclose(file_id);
+    VRFY(( status >= 0 ), "H5Fclose() failed");
+
+
+    if ( verbose )
+        HDfprintf(stdout, "%0d:%s: Done.\n", mpi_rank);
+
+    return;
+
+} /* io_mode_confusion() */
+
+#undef N
+
+/*=============================================================================
+ *                         End of t_mdset.c
+ *===========================================================================*/

Added: packages/hdf5/branches/upstream/current/testpar/t_mpi.c
===================================================================
--- packages/hdf5/branches/upstream/current/testpar/t_mpi.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/testpar/t_mpi.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,779 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * MPIO independent overlapping writes.
+ *
+ * First n-1 processes open 1 file.
+ * Each of the n-1 process writes chunks of data to the file in round-robin
+ * fashion, in a interleaved but not overlapped fashion.  Using increasing
+ * chunk sizes for the benefits of testing different write sizes and also
+ * reducing the numbers of writes.
+ *
+ * Last process (n-1) just waits.
+ * First n-1 processes finish writing and cloose the file.
+ * Last process opens the same file and verifies the data.
+ */
+
+#include "testphdf5.h"
+
+/* FILENAME and filenames must have the same number of names */
+const char *FILENAME[2]={
+	    "MPItest",
+	    NULL};
+char	filenames[2][200];
+int	nerrors = 0;
+hid_t	fapl;				/* file access property list */
+
+/* protocols */
+static int errors_sum(int nerrs);
+
+#define MPIO_TEST_WRITE_SIZE 1024*1024     /* 1 MB */
+
+static int
+test_mpio_overlap_writes(char *filename)
+{
+    int mpi_size, mpi_rank;
+    MPI_Comm comm;
+    MPI_Info info = MPI_INFO_NULL;
+    int color, mrc;
+    MPI_File	fh;
+    int i;
+    int vrfyerrs, nerrs;
+    unsigned char  buf[4093];		/* use some prime number for size */
+    int bufsize = sizeof(buf);
+    MPI_Offset  stride;
+    MPI_Offset  mpi_off;
+    MPI_Status  mpi_stat;
+
+
+    if (VERBOSE_MED)
+	printf("MPIO independent overlapping writes test on file %s\n",
+	    filename);
+
+    nerrs = 0;
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+    /* Need at least 2 processes */
+    if (mpi_size < 2) {
+	if (MAINPROCESS)
+	    printf("Need at least 2 processes to run MPIO test.\n");
+	    printf(" -SKIP- \n");
+	return 0;
+    }
+
+    /* splits processes 0 to n-2 into one comm. and the last one into another */
+    color = ((mpi_rank < (mpi_size - 1)) ? 0 : 1);
+    mrc = MPI_Comm_split (MPI_COMM_WORLD, color, mpi_rank, &comm);
+    VRFY((mrc==MPI_SUCCESS), "Comm_split succeeded");
+
+    if (color==0){
+	/* First n-1 processes (color==0) open a file and write it */
+	mrc = MPI_File_open(comm, filename, MPI_MODE_CREATE|MPI_MODE_RDWR,
+		info, &fh);
+	VRFY((mrc==MPI_SUCCESS), "");
+
+	stride = 1;
+	mpi_off = mpi_rank*stride;
+	while (mpi_off < MPIO_TEST_WRITE_SIZE){
+	    /* make sure the write does not exceed the TEST_WRITE_SIZE */
+	    if (mpi_off+stride > MPIO_TEST_WRITE_SIZE)
+		stride = MPIO_TEST_WRITE_SIZE - mpi_off;
+
+	    /* set data to some trivial pattern for easy verification */
+	    for (i=0; i<stride; i++)
+		buf[i] = (unsigned char)(mpi_off+i);
+	    mrc = MPI_File_write_at(fh, mpi_off, buf, (int)stride, MPI_BYTE,
+		    &mpi_stat);
+	    VRFY((mrc==MPI_SUCCESS), "");
+
+	    /* move the offset pointer to last byte written by all processes */
+	    mpi_off += (mpi_size - 1 - mpi_rank) * stride;
+
+	    /* Increase chunk size without exceeding buffer size. */
+	    /* Then move the starting offset for next write. */
+	    stride *= 2;
+	    if (stride > bufsize)
+		stride = bufsize;
+	    mpi_off += mpi_rank*stride;
+	}
+
+	/* close file and free the communicator */
+	mrc = MPI_File_close(&fh);
+	VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
+	mrc = MPI_Comm_free(&comm);
+	VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
+
+	/* sync with the other waiting processes */
+	mrc = MPI_Barrier(MPI_COMM_WORLD);
+	VRFY((mrc==MPI_SUCCESS), "Sync after writes");
+    }else{
+	/* last process waits till writes are done,
+	 * then opens file to verify data.
+	 */
+	mrc = MPI_Barrier(MPI_COMM_WORLD);
+	VRFY((mrc==MPI_SUCCESS), "Sync after writes");
+
+	mrc = MPI_File_open(comm, filename, MPI_MODE_RDONLY,
+		info, &fh);
+	VRFY((mrc==MPI_SUCCESS), "");
+
+	stride = bufsize;
+	for (mpi_off=0; mpi_off < MPIO_TEST_WRITE_SIZE; mpi_off += bufsize){
+	    /* make sure it does not read beyond end of data */
+	    if (mpi_off+stride > MPIO_TEST_WRITE_SIZE)
+		stride = MPIO_TEST_WRITE_SIZE - mpi_off;
+	    mrc = MPI_File_read_at(fh, mpi_off, buf, (int)stride, MPI_BYTE,
+		    &mpi_stat);
+	    VRFY((mrc==MPI_SUCCESS), "");
+	    vrfyerrs=0;
+	    for (i=0; i<stride; i++){
+		unsigned char expected;
+		expected = (unsigned char)(mpi_off+i);
+		if ((expected != buf[i]) &&
+		    (vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED)) {
+			printf("proc %d: found data error at [%ld], expect %u, got %u\n",
+			    mpi_rank, (long)(mpi_off+i), expected, buf[i]);
+		}
+	    }
+	    if (vrfyerrs > MAX_ERR_REPORT && !VERBOSE_MED)
+		printf("proc %d: [more errors ...]\n", mpi_rank);
+
+	    nerrs += vrfyerrs;
+	}
+
+	/* close file and free the communicator */
+	mrc = MPI_File_close(&fh);
+	VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
+	mrc = MPI_Comm_free(&comm);
+	VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
+    }
+
+    /*
+     * one more sync to ensure all processes have done reading
+     * before ending this test.
+     */
+    mrc = MPI_Barrier(MPI_COMM_WORLD);
+    VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
+    return (nerrs);
+}
+
+
+#define MB      1048576        /* 1024*1024 == 2**20 */
+#define GB      1073741824     /* 1024**3 == 2**30 */
+#define TWO_GB_LESS1    2147483647     /* 2**31 - 1 */
+#define FOUR_GB_LESS1   4294967295L     /* 2**32 - 1 */
+/*
+ * Verify that MPI_Offset exceeding 2**31 can be computed correctly.
+ * Print any failure as information only, not as an error so that this
+ * won't abort the remaining test or other separated tests.
+ *
+ * Test if MPIO can write file from under 2GB to over 2GB and then
+ * from under 4GB to over 4GB.
+ * Each process writes 1MB in round robin fashion.
+ * Then reads the file back in by reverse order, that is process 0
+ * reads the data of process n-1 and vice versa.
+ */
+static int
+test_mpio_gb_file(char *filename)
+{
+    int mpi_size, mpi_rank;
+    MPI_Info info = MPI_INFO_NULL;
+    int mrc;
+    MPI_File	fh;
+    int i, j, n;
+    int vrfyerrs;
+    int writerrs;		/* write errors */
+    int nerrs;
+    int ntimes;			/* how many times */
+    char  *buf = NULL;
+    char  expected;
+    MPI_Offset  mpi_off;
+    MPI_Offset  mpi_off_old;
+    MPI_Status  mpi_stat;
+    int is_signed, sizeof_mpi_offset;
+
+    nerrs = 0;
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+
+    if (VERBOSE_MED)
+        printf("MPI_Offset range test\n");
+
+    /* figure out the signness and sizeof MPI_Offset */
+    mpi_off = 0;
+    is_signed = ((MPI_Offset)(mpi_off - 1)) < 0;
+    sizeof_mpi_offset = (int)(sizeof(MPI_Offset));
+
+    /*
+     * Verify the sizeof MPI_Offset and correctness of handling multiple GB
+     * sizes.
+     */
+    if (MAINPROCESS){			/* only process 0 needs to check it*/
+	printf("MPI_Offset is %s %d bytes integeral type\n",
+	    is_signed ? "signed" : "unsigned", (int)sizeof(MPI_Offset));
+	if (sizeof_mpi_offset <= 4 && is_signed){
+	    printf("Skipped 2GB range test "
+		    "because MPI_Offset cannot support it\n");
+	}else {
+	    /* verify correctness of assigning 2GB sizes */
+	    mpi_off = 2 * 1024 * (MPI_Offset)MB;
+	    INFO((mpi_off>0), "2GB OFFSET assignment no overflow");
+	    INFO((mpi_off-1)==TWO_GB_LESS1, "2GB OFFSET assignment succeed");
+
+	    /* verify correctness of increasing from below 2 GB to above 2GB */
+	    mpi_off = TWO_GB_LESS1;
+	    for (i=0; i < 3; i++){
+		mpi_off_old = mpi_off;
+		mpi_off = mpi_off + 1;
+		/* no overflow */
+		INFO((mpi_off>0), "2GB OFFSET increment no overflow");
+		/* correct inc. */
+		INFO((mpi_off-1)==mpi_off_old, "2GB OFFSET increment succeed");
+	    }
+	}
+
+	if (sizeof_mpi_offset <= 4){
+	    printf("Skipped 4GB range test "
+		    "because MPI_Offset cannot support it\n");
+	}else {
+	    /* verify correctness of assigning 4GB sizes */
+	    mpi_off = 4 * 1024 * (MPI_Offset)MB;
+	    INFO((mpi_off>0), "4GB OFFSET assignment no overflow");
+	    INFO((mpi_off-1)==FOUR_GB_LESS1, "4GB OFFSET assignment succeed");
+
+	    /* verify correctness of increasing from below 4 GB to above 4 GB */
+	    mpi_off = FOUR_GB_LESS1;
+	    for (i=0; i < 3; i++){
+		mpi_off_old = mpi_off;
+		mpi_off = mpi_off + 1;
+		/* no overflow */
+		INFO((mpi_off>0), "4GB OFFSET increment no overflow");
+		/* correct inc. */
+		INFO((mpi_off-1)==mpi_off_old, "4GB OFFSET increment succeed");
+	    }
+	}
+    }
+
+    /*
+     * Verify if we can write to a file of multiple GB sizes.
+     */
+    if (VERBOSE_MED)
+	printf("MPIO GB file test %s\n", filename);
+
+    if (sizeof_mpi_offset <= 4){
+	printf("Skipped GB file range test "
+		"because MPI_Offset cannot support it\n");
+    }else{
+	buf = malloc(MB);
+	VRFY((buf!=NULL), "malloc succeed");
+
+	/* open a new file. Remove it first in case it exists. */
+	if (MAINPROCESS)
+	    remove(filename);
+	MPI_Barrier(MPI_COMM_WORLD);	/* prevent racing condition */
+
+	mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_CREATE|MPI_MODE_RDWR,
+		    info, &fh);
+	VRFY((mrc==MPI_SUCCESS), "MPI_FILE_OPEN");
+
+	printf("MPIO GB file write test %s\n", filename);
+
+	/* instead of writing every bytes of the file, we will just write
+	 * some data around the 2 and 4 GB boundaries.  That should cover
+	 * potential integer overflow and filesystem size limits.
+	 */
+	writerrs = 0;
+	for (n=2; n <= 4; n+=2){
+	    ntimes = GB/MB*n/mpi_size + 1;
+	    for (i=ntimes-2; i <= ntimes; i++){
+		mpi_off = (i*mpi_size + mpi_rank)*(MPI_Offset)MB;
+		if (VERBOSE_MED)
+		    HDfprintf(stdout,"proc %d: write to mpi_off=%016llx, %lld\n",
+			mpi_rank, mpi_off, mpi_off);
+		/* set data to some trivial pattern for easy verification */
+		for (j=0; j<MB; j++)
+		    *(buf+j) = i*mpi_size + mpi_rank;
+		if (VERBOSE_MED)
+		    HDfprintf(stdout,"proc %d: writing %d bytes at offset %lld\n",
+			mpi_rank, MB, mpi_off);
+		mrc = MPI_File_write_at(fh, mpi_off, buf, MB, MPI_BYTE, &mpi_stat);
+		INFO((mrc==MPI_SUCCESS), "GB size file write");
+		if (mrc!=MPI_SUCCESS)
+		    writerrs++;
+	    }
+	}
+
+	/* close file and free the communicator */
+	mrc = MPI_File_close(&fh);
+	VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
+
+	mrc = MPI_Barrier(MPI_COMM_WORLD);
+	VRFY((mrc==MPI_SUCCESS), "Sync after writes");
+
+	/*
+	 * Verify if we can read the multiple GB file just created.
+	 */
+	/* open it again to verify the data written */
+	/* but only if there was no write errors */
+	printf("MPIO GB file read test %s\n", filename);
+	if (errors_sum(writerrs)>0){
+	    printf("proc %d: Skip read test due to previous write errors\n",
+		mpi_rank);
+	    goto finish;
+	}
+	mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, info, &fh);
+	VRFY((mrc==MPI_SUCCESS), "");
+
+	/* Only read back parts of the file that have been written. */
+	for (n=2; n <= 4; n+=2){
+	    ntimes = GB/MB*n/mpi_size + 1;
+	    for (i=ntimes-2; i <= ntimes; i++){
+		mpi_off = (i*mpi_size + (mpi_size - mpi_rank - 1))*(MPI_Offset)MB;
+		if (VERBOSE_MED)
+		    HDfprintf(stdout,"proc %d: read from mpi_off=%016llx, %lld\n",
+			mpi_rank, mpi_off, mpi_off);
+		mrc = MPI_File_read_at(fh, mpi_off, buf, MB, MPI_BYTE, &mpi_stat);
+		INFO((mrc==MPI_SUCCESS), "GB size file read");
+		expected = i*mpi_size + (mpi_size - mpi_rank - 1);
+		vrfyerrs=0;
+		for (j=0; j<MB; j++){
+		    if ((*(buf+j) != expected) &&
+			(vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED)){
+			    printf("proc %d: found data error at [%ld+%d], expect %d, got %d\n",
+				mpi_rank, (long)mpi_off, j, expected, *(buf+j));
+		    }
+		}
+		if (vrfyerrs > MAX_ERR_REPORT && !VERBOSE_MED)
+		    printf("proc %d: [more errors ...]\n", mpi_rank);
+
+		nerrs += vrfyerrs;
+	    }
+	}
+
+	/* close file and free the communicator */
+	mrc = MPI_File_close(&fh);
+	VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
+
+	/*
+	 * one more sync to ensure all processes have done reading
+	 * before ending this test.
+	 */
+	mrc = MPI_Barrier(MPI_COMM_WORLD);
+	VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
+    }
+
+finish:
+    if (buf)
+	HDfree(buf);
+    return (nerrs);
+}
+
+
+/*
+ * MPI-IO Test: One writes, Many reads.
+ * Verify if only one process writes some data and then all other
+ * processes can read them back correctly. This tests if the
+ * underlaying parallel I/O and file system supports parallel I/O
+ * correctly.
+ *
+ * Algorithm: Only one process (e.g., process 0) writes some data.
+ * Then all processes, including the writing process, read the data
+ * back and verify them against the original values.
+ */
+
+/*
+ * Default filename can be specified via first program argument.
+ * Each process writes something, then reads all data back.
+ */
+
+#define DIMSIZE	32		/* Dimension size. */
+#define PRINTID printf("Proc %d: ", mpi_rank)
+#define USENONE 0
+#define USEATOM 1		/* request atomic I/O */
+#define USEFSYNC 2		/* request file_sync */
+
+
+static int
+test_mpio_1wMr(char *filename, int special_request)
+{
+    char hostname[128];
+    int  mpi_size, mpi_rank;
+    MPI_File fh;
+    char mpi_err_str[MPI_MAX_ERROR_STRING];
+    int  mpi_err_strlen;
+    int  mpi_err;
+    unsigned char writedata[DIMSIZE], readdata[DIMSIZE];
+    unsigned char expect_val;
+    int  i, irank;
+    int  nerrs = 0;		/* number of errors */
+    int  atomicity;
+    MPI_Offset  mpi_off;
+    MPI_Status  mpi_stat;
+
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
+    if (MAINPROCESS && VERBOSE_MED){
+        printf("Testing one process writes, all processes read.\n");
+	printf("Using %d processes accessing file %s\n", mpi_size, filename);
+        printf("    (Filename can be specified via program argument)\n");
+    }
+
+    /* show the hostname so that we can tell where the processes are running */
+    if (VERBOSE_DEF){
+	if (gethostname(hostname, 128) < 0){
+	    PRINTID;
+	    printf("gethostname failed\n");
+	    return 1;
+	}
+	PRINTID;
+	printf("hostname=%s\n", hostname);
+    }
+
+    /* Delete any old file in order to start anew. */
+    /* Must delete because MPI_File_open does not have a Truncate mode. */
+    /* Don't care if it has error. */
+    MPI_File_delete(filename, MPI_INFO_NULL);
+
+    if ((mpi_err = MPI_File_open(MPI_COMM_WORLD, filename,
+	    MPI_MODE_RDWR | MPI_MODE_CREATE ,
+	    MPI_INFO_NULL, &fh))
+	    != MPI_SUCCESS){
+	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+	PRINTID;
+	printf("MPI_File_open failed (%s)\n", mpi_err_str);
+	return 1;
+    }
+
+if (special_request & USEATOM){
+    /* ==================================================
+     * Set atomcity to true (1).  A POSIX compliant filesystem
+     * should not need this.
+     * ==================================================*/
+    if ((mpi_err = MPI_File_get_atomicity(fh, &atomicity)) != MPI_SUCCESS){
+	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+	PRINTID;
+	printf("MPI_File_get_atomicity failed (%s)\n", mpi_err_str);
+    }
+    if (VERBOSE_HI)
+	printf("Initial atomicity = %d\n", atomicity);
+    if ((mpi_err = MPI_File_set_atomicity(fh, 1)) != MPI_SUCCESS){
+	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+	PRINTID;
+	printf("MPI_File_set_atomicity failed (%s)\n", mpi_err_str);
+    }
+    if ((mpi_err = MPI_File_get_atomicity(fh, &atomicity)) != MPI_SUCCESS){
+	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+	PRINTID;
+	printf("MPI_File_get_atomicity failed (%s)\n", mpi_err_str);
+    }
+    if (VERBOSE_HI)
+	printf("After set_atomicity atomicity = %d\n", atomicity);
+}
+
+    /* This barrier is not necessary but do it anyway. */
+    MPI_Barrier(MPI_COMM_WORLD);
+    if (VERBOSE_HI){
+	PRINTID;
+	printf("between MPI_Barrier and MPI_File_write_at\n");
+    }
+
+    /* ==================================================
+     * Each process calculates what to write but
+     * only process irank(0) writes.
+     * ==================================================*/
+    irank=0;
+    for (i=0; i < DIMSIZE; i++)
+	writedata[i] = irank*DIMSIZE + i;
+    mpi_off = irank*DIMSIZE;
+
+    /* Only one process writes */
+    if (mpi_rank==irank){
+	if (VERBOSE_HI){
+	    PRINTID; printf("wrote %d bytes at %ld\n", DIMSIZE, (long)mpi_off);
+	}
+	if ((mpi_err = MPI_File_write_at(fh, mpi_off, writedata, DIMSIZE,
+			MPI_BYTE, &mpi_stat))
+		!= MPI_SUCCESS){
+	    MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+	    PRINTID;
+	    printf("MPI_File_write_at offset(%ld), bytes (%d), failed (%s)\n",
+		    (long) mpi_off, DIMSIZE, mpi_err_str);
+	    return 1;
+	};
+    };
+
+    /* Bcast the return code and */
+    /* make sure all writing are done before reading. */
+    MPI_Bcast(&mpi_err, 1, MPI_INT, irank, MPI_COMM_WORLD);
+    if (VERBOSE_HI){
+	PRINTID;
+	printf("MPI_Bcast: mpi_err = %d\n", mpi_err);
+    }
+
+if (special_request & USEFSYNC){
+    /* ==================================================
+     * Do a file sync.  A POSIX compliant filesystem
+     * should not need this.
+     * ==================================================*/
+    if (VERBOSE_HI)
+	printf("Apply MPI_File_sync\n");
+    /* call file_sync to force the write out */
+    if ((mpi_err = MPI_File_sync(fh)) != MPI_SUCCESS){
+	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+	PRINTID;
+	printf("MPI_File_sync failed (%s)\n", mpi_err_str);
+    }
+    MPI_Barrier(MPI_COMM_WORLD);
+    /* call file_sync to force the write out */
+    if ((mpi_err = MPI_File_sync(fh)) != MPI_SUCCESS){
+	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+	PRINTID;
+	printf("MPI_File_sync failed (%s)\n", mpi_err_str);
+    }
+}
+
+    /* This barrier is not necessary because the Bcase or File_sync above */
+    /* should take care of it.  Do it anyway. */
+    MPI_Barrier(MPI_COMM_WORLD);
+    if (VERBOSE_HI){
+	PRINTID;
+	printf("after MPI_Barrier\n");
+    }
+
+    /* ==================================================
+     * Each process reads what process 0 wrote and verify.
+     * ==================================================*/
+    irank=0;
+    mpi_off = irank*DIMSIZE;
+    if ((mpi_err = MPI_File_read_at(fh, mpi_off, readdata, DIMSIZE, MPI_BYTE,
+	    &mpi_stat))
+	    != MPI_SUCCESS){
+	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+	PRINTID;
+	printf("MPI_File_read_at offset(%ld), bytes (%d), failed (%s)\n",
+		(long) mpi_off, DIMSIZE, mpi_err_str);
+	return 1;
+    };
+    for (i=0; i < DIMSIZE; i++){
+	expect_val = irank*DIMSIZE + i;
+	if (readdata[i] != expect_val){
+	    PRINTID;
+	    printf("read data[%d:%d] got %02x, expect %02x\n", irank, i,
+		    readdata[i], expect_val);
+	    nerrs++;
+	}
+    }
+
+    MPI_File_close(&fh);
+
+    if (VERBOSE_HI){
+	PRINTID;
+	printf("%d data errors detected\n", nerrs);
+    }
+
+    mpi_err = MPI_Barrier(MPI_COMM_WORLD);
+    return nerrs;
+}
+
+
+/*
+ * parse the command line options
+ */
+static int
+parse_options(int argc, char **argv)
+{
+    while (--argc){
+	if (**(++argv) != '-'){
+	    break;
+	}else{
+	    switch(*(*argv+1)){
+		case 'v':   if (*((*argv+1)+1))
+				ParseTestVerbosity((*argv+1)+1);
+			    else
+				SetTestVerbosity(VERBO_MED);
+			    break;
+		case 'f':   if (--argc < 1) {
+				nerrors++;
+				return(1);
+			    }
+			    if (**(++argv) == '-') {
+				nerrors++;
+				return(1);
+			    }
+			    paraprefix = *argv;
+			    break;
+		case 'h':   /* print help message--return with nerrors set */
+			    return(1);
+		default:    nerrors++;
+			    return(1);
+	    }
+	}
+    } /*while*/
+
+    /* compose the test filenames */
+    {
+	int i, n;
+	hid_t plist;
+
+	plist = H5Pcreate (H5P_FILE_ACCESS);
+	H5Pset_fapl_mpio(plist, MPI_COMM_WORLD, MPI_INFO_NULL);
+	n = sizeof(FILENAME)/sizeof(FILENAME[0]) - 1;	/* exclude the NULL */
+
+	for (i=0; i < n; i++)
+	    if (h5_fixname(FILENAME[i],plist,filenames[i],sizeof(filenames[i]))
+		== NULL){
+		printf("h5_fixname failed\n");
+		nerrors++;
+		return(1);
+	    }
+	H5Pclose(plist);
+	if (VERBOSE_MED){
+	    printf("Test filenames are:\n");
+	    for (i=0; i < n; i++)
+		printf("    %s\n", filenames[i]);
+	}
+    }
+
+    return(0);
+}
+
+
+/*
+ * Show command usage
+ */
+static void
+usage(void)
+{
+    printf("Usage: t_mpi [-v<verbosity>] [-f <prefix>]\n");
+    printf("\t-v<verbosity>\tset verbose level (0-9,l,m,h)\n");
+    printf("\t-f <prefix>\tfilename prefix\n");
+    printf("\n");
+}
+
+/*
+ * return the sum of all errors.
+ */
+static int
+errors_sum(int nerrs)
+{
+    int temp;
+    MPI_Allreduce(&nerrs, &temp, 1, MPI_INT, MPI_SUM, MPI_COMM_WORLD);
+    return(temp);
+}
+
+
+int
+main(int argc, char **argv)
+{
+    int mpi_size, mpi_rank;				/* mpi variables */
+    int ret_code;
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
+    H5open();
+    if (parse_options(argc, argv) != 0){
+	if (MAINPROCESS)
+	    usage();
+	goto finish;
+    }
+
+    if (MAINPROCESS){
+	printf("===================================\n");
+	printf("MPI functionality tests\n");
+	printf("===================================\n");
+    }
+
+    if (VERBOSE_MED)
+	h5_show_hostname();
+
+    fapl = H5Pcreate (H5P_FILE_ACCESS);
+    H5Pset_fapl_mpio(fapl, MPI_COMM_WORLD, MPI_INFO_NULL);
+
+    MPI_BANNER("MPIO 1 write Many read test...");
+    ret_code = test_mpio_1wMr(filenames[0], USENONE);
+    ret_code = errors_sum(ret_code);
+    if (mpi_rank==0 && ret_code > 0){
+	printf("***FAILED with %d total errors\n", ret_code);
+	nerrors += ret_code;
+    }
+
+    /* test atomicity and file sync in high verbose mode only         */
+    /* since they often hang when broken and PHDF5 does not use them. */
+    if (VERBOSE_HI){
+	MPI_BANNER("MPIO 1 write Many read test with atomicity...");
+	ret_code = test_mpio_1wMr(filenames[0], USEATOM);
+	ret_code = errors_sum(ret_code);
+	if (mpi_rank==0 && ret_code > 0){
+	    printf("***FAILED with %d total errors\n", ret_code);
+	    nerrors += ret_code;
+	}
+
+	MPI_BANNER("MPIO 1 write Many read test with file sync...");
+	ret_code = test_mpio_1wMr(filenames[0], USEFSYNC);
+	ret_code = errors_sum(ret_code);
+	if (mpi_rank==0 && ret_code > 0){
+	    printf("***FAILED with %d total errors\n", ret_code);
+	    nerrors += ret_code;
+	}
+    }
+
+    MPI_BANNER("MPIO File size range test...");
+    ret_code = test_mpio_gb_file(filenames[0]);
+    ret_code = errors_sum(ret_code);
+    if (mpi_rank==0 && ret_code > 0){
+	printf("***FAILED with %d total errors\n", ret_code);
+	nerrors += ret_code;
+    }
+
+    MPI_BANNER("MPIO independent overlapping writes...");
+    ret_code = test_mpio_overlap_writes(filenames[0]);
+    ret_code = errors_sum(ret_code);
+    if (mpi_rank==0 && ret_code > 0){
+	printf("***FAILED with %d total errors\n", ret_code);
+	nerrors += ret_code;
+    }
+
+finish:
+    /* make sure all processes are finished before final report, cleanup
+     * and exit.
+     */
+    MPI_Barrier(MPI_COMM_WORLD);
+    if (MAINPROCESS){		/* only process 0 reports */
+	printf("===================================\n");
+	if (nerrors){
+	    printf("***MPI tests detected %d errors***\n", nerrors);
+	}
+	else{
+	    printf("MPI tests finished with no errors\n");
+	}
+	printf("===================================\n");
+    }
+
+    h5_cleanup(FILENAME, fapl);
+    H5close();
+
+    /* MPI_Finalize must be called AFTER H5close which may use MPI calls */
+    MPI_Finalize();
+
+    /* cannot just return (nerrors) because exit code is limited to 1byte */
+    return(nerrors!=0);
+}
+

Added: packages/hdf5/branches/upstream/current/testpar/t_ph5basic.c
===================================================================
--- packages/hdf5/branches/upstream/current/testpar/t_ph5basic.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/testpar/t_ph5basic.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,324 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Test parallel HDF5 basic components
+ */
+
+#include "testphdf5.h"
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_fapl_mpio_dup
+ *
+ * Purpose:     Test if fapl_mpio property list keeps a duplicate of the
+ * 		communicator and INFO objects given when set; and returns
+ * 		duplicates of its components when H5Pget_fapl_mpio is called.
+ *
+ * Return:      Success:        None
+ *
+ *              Failure:        Abort
+ *
+ * Programmer:  Albert Cheng
+ *              January 9, 2003
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+void
+test_fapl_mpio_dup(void)
+{
+    int mpi_size, mpi_rank;
+    MPI_Comm comm, comm_tmp;
+    int mpi_size_old, mpi_rank_old;
+    int mpi_size_tmp, mpi_rank_tmp;
+    MPI_Info info = MPI_INFO_NULL;
+    MPI_Info info_tmp = MPI_INFO_NULL;
+    int mrc;			/* MPI return value */
+    hid_t acc_pl;		/* File access properties */
+    herr_t ret;			/* hdf5 return value */
+    int nkeys, nkeys_tmp;
+
+    if (VERBOSE_MED)
+	printf("Verify fapl_mpio duplicates communicator and INFO objects\n");
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+    if (VERBOSE_MED)
+	printf("rank/size of MPI_COMM_WORLD are %d/%d\n", mpi_rank, mpi_size);
+
+    /* Create a new communicator that has the same processes as MPI_COMM_WORLD.
+     * Use MPI_Comm_split because it is simplier than MPI_Comm_create
+     */
+    mrc = MPI_Comm_split(MPI_COMM_WORLD, 0, 0, &comm);
+    VRFY((mrc==MPI_SUCCESS), "MPI_Comm_split");
+    MPI_Comm_size(comm,&mpi_size_old);
+    MPI_Comm_rank(comm,&mpi_rank_old);
+    if (VERBOSE_MED)
+	printf("rank/size of comm are %d/%d\n", mpi_rank_old, mpi_size_old);
+
+    /* create a new INFO object with some trivial information. */
+    mrc = MPI_Info_create(&info);
+    VRFY((mrc==MPI_SUCCESS), "MPI_Info_create");
+    mrc = MPI_Info_set(info, "hdf_info_name", "XYZ");
+    VRFY((mrc==MPI_SUCCESS), "MPI_Info_set");
+    if (MPI_INFO_NULL != info){
+	mrc=MPI_Info_get_nkeys(info, &nkeys);
+	VRFY((mrc==MPI_SUCCESS), "MPI_Info_get_nkeys");
+    }
+    if (VERBOSE_MED)
+	h5_dump_info_object(info);
+
+    acc_pl = H5Pcreate (H5P_FILE_ACCESS);
+    VRFY((acc_pl >= 0), "H5P_FILE_ACCESS");
+
+    ret = H5Pset_fapl_mpio(acc_pl, comm, info);
+    VRFY((ret >= 0), "");
+
+    /* Case 1:
+     * Free the created communicator and INFO object.
+     * Check if the access property list is still valid and can return
+     * valid communicator and INFO object.
+     */
+    mrc = MPI_Comm_free(&comm);
+    VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
+    if (MPI_INFO_NULL!=info){
+	mrc = MPI_Info_free(&info);
+	VRFY((mrc==MPI_SUCCESS), "MPI_Info_free");
+    }
+
+    ret = H5Pget_fapl_mpio(acc_pl, &comm_tmp, &info_tmp);
+    VRFY((ret >= 0), "H5Pget_fapl_mpio");
+    MPI_Comm_size(comm_tmp,&mpi_size_tmp);
+    MPI_Comm_rank(comm_tmp,&mpi_rank_tmp);
+    if (VERBOSE_MED)
+	printf("After H5Pget_fapl_mpio: rank/size of comm are %d/%d\n",
+	mpi_rank_tmp, mpi_size_tmp);
+    VRFY((mpi_size_tmp==mpi_size), "MPI_Comm_size");
+    VRFY((mpi_rank_tmp==mpi_rank), "MPI_Comm_rank");
+    if (MPI_INFO_NULL != info_tmp){
+	mrc=MPI_Info_get_nkeys(info_tmp, &nkeys_tmp);
+	VRFY((mrc==MPI_SUCCESS), "MPI_Info_get_nkeys");
+	VRFY((nkeys_tmp==nkeys), "new and old nkeys equal");
+    }
+    if (VERBOSE_MED)
+	h5_dump_info_object(info_tmp);
+
+    /* Case 2:
+     * Free the retrieved communicator and INFO object.
+     * Check if the access property list is still valid and can return
+     * valid communicator and INFO object.
+     * Also verify the NULL argument option.
+     */
+    mrc = MPI_Comm_free(&comm_tmp);
+    VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
+    if (MPI_INFO_NULL!=info_tmp){
+	mrc = MPI_Info_free(&info_tmp);
+	VRFY((mrc==MPI_SUCCESS), "MPI_Info_free");
+    }
+
+    /* check NULL argument options. */
+    ret = H5Pget_fapl_mpio(acc_pl, &comm_tmp, NULL);
+    VRFY((ret >= 0), "H5Pget_fapl_mpio Comm only");
+    mrc = MPI_Comm_free(&comm_tmp);
+    VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
+
+    ret = H5Pget_fapl_mpio(acc_pl, NULL, &info_tmp);
+    VRFY((ret >= 0), "H5Pget_fapl_mpio Info only");
+    if (MPI_INFO_NULL!=info_tmp){
+	mrc = MPI_Info_free(&info_tmp);
+	VRFY((mrc==MPI_SUCCESS), "MPI_Info_free");
+    }
+
+    ret = H5Pget_fapl_mpio(acc_pl, NULL, NULL);
+    VRFY((ret >= 0), "H5Pget_fapl_mpio neither");
+
+    /* now get both and check validity too. */
+    /* Donot free the returned objects which are used in the next case. */
+    ret = H5Pget_fapl_mpio(acc_pl, &comm_tmp, &info_tmp);
+    VRFY((ret >= 0), "H5Pget_fapl_mpio");
+    MPI_Comm_size(comm_tmp,&mpi_size_tmp);
+    MPI_Comm_rank(comm_tmp,&mpi_rank_tmp);
+    if (VERBOSE_MED)
+	printf("After second H5Pget_fapl_mpio: rank/size of comm are %d/%d\n",
+	mpi_rank_tmp, mpi_size_tmp);
+    VRFY((mpi_size_tmp==mpi_size), "MPI_Comm_size");
+    VRFY((mpi_rank_tmp==mpi_rank), "MPI_Comm_rank");
+    if (MPI_INFO_NULL != info_tmp){
+	mrc=MPI_Info_get_nkeys(info_tmp, &nkeys_tmp);
+	VRFY((mrc==MPI_SUCCESS), "MPI_Info_get_nkeys");
+	VRFY((nkeys_tmp==nkeys), "new and old nkeys equal");
+    }
+    if (VERBOSE_MED)
+	h5_dump_info_object(info_tmp);
+
+    /* Case 3:
+     * Close the property list and verify the retrieved communicator and INFO
+     * object are still valid.
+     */
+    H5Pclose(acc_pl);
+    MPI_Comm_size(comm_tmp,&mpi_size_tmp);
+    MPI_Comm_rank(comm_tmp,&mpi_rank_tmp);
+    if (VERBOSE_MED)
+	printf("After Property list closed: rank/size of comm are %d/%d\n",
+	mpi_rank_tmp, mpi_size_tmp);
+    if (MPI_INFO_NULL != info_tmp){
+	mrc=MPI_Info_get_nkeys(info_tmp, &nkeys_tmp);
+	VRFY((mrc==MPI_SUCCESS), "MPI_Info_get_nkeys");
+    }
+    if (VERBOSE_MED)
+	h5_dump_info_object(info_tmp);
+
+    /* clean up */
+    mrc = MPI_Comm_free(&comm_tmp);
+    VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
+    if (MPI_INFO_NULL!=info_tmp){
+	mrc = MPI_Info_free(&info_tmp);
+	VRFY((mrc==MPI_SUCCESS), "MPI_Info_free");
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_fapl_mpiposix_dup
+ *
+ * Purpose:     Test if fapl_mpiposix property list keeps a duplicate of the
+ * 		communicator object given when set; and returns a duplicate
+ * 		of its component when H5Pget_fapl_mpiposix is called.
+ * 		Note that fapl_mpiposix does not use INFO object.
+ *
+ * Return:      Success:        None
+ *
+ *              Failure:        Abort
+ *
+ * Programmer:  Albert Cheng
+ *              January 9, 2003
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+void
+test_fapl_mpiposix_dup(void)
+{
+    int mpi_size, mpi_rank;
+    MPI_Comm comm, comm_tmp;
+    int mpi_size_old, mpi_rank_old;
+    int mpi_size_tmp, mpi_rank_tmp;
+    int mrc;			/* MPI return value */
+    hid_t acc_pl;		/* File access properties */
+#ifndef H5_WANT_H5_V1_4_COMPAT
+    hbool_t use_gpfs = FALSE;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    herr_t ret;			/* hdf5 return value */
+
+    if (VERBOSE_MED)
+	printf("Verify fapl_mpiposix duplicates communicator object\n");
+
+    /* set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+    if (VERBOSE_MED)
+	printf("rank/size of MPI_COMM_WORLD are %d/%d\n", mpi_rank, mpi_size);
+
+    /* Create a new communicator that has the same processes as MPI_COMM_WORLD.
+     * Use MPI_Comm_split because it is simplier than MPI_Comm_create
+     */
+    mrc = MPI_Comm_split(MPI_COMM_WORLD, 0, 0, &comm);
+    VRFY((mrc==MPI_SUCCESS), "MPI_Comm_split");
+    MPI_Comm_size(comm,&mpi_size_old);
+    MPI_Comm_rank(comm,&mpi_rank_old);
+    if (VERBOSE_MED)
+	printf("rank/size of comm are %d/%d\n", mpi_rank_old, mpi_size_old);
+
+    acc_pl = H5Pcreate (H5P_FILE_ACCESS);
+    VRFY((acc_pl >= 0), "H5P_FILE_ACCESS");
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    ret = H5Pset_fapl_mpiposix(acc_pl, comm);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    ret = H5Pset_fapl_mpiposix(acc_pl, comm, use_gpfs);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    VRFY((ret >= 0), "");
+
+    /* Case 1:
+     * Free the created communicator object.
+     * Check if the access property list is still valid and can return
+     * valid communicator object.
+     */
+    mrc = MPI_Comm_free(&comm);
+    VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    ret = H5Pget_fapl_mpiposix(acc_pl, &comm_tmp);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    ret = H5Pget_fapl_mpiposix(acc_pl, &comm_tmp, &use_gpfs);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    VRFY((ret >= 0), "H5Pget_fapl_mpiposix");
+    MPI_Comm_size(comm_tmp,&mpi_size_tmp);
+    MPI_Comm_rank(comm_tmp,&mpi_rank_tmp);
+    if (VERBOSE_MED)
+	printf("After H5Pget_fapl_mpiposix: rank/size of comm are %d/%d\n",
+	mpi_rank_tmp, mpi_size_tmp);
+    VRFY((mpi_size_tmp==mpi_size), "MPI_Comm_size");
+    VRFY((mpi_rank_tmp==mpi_rank), "MPI_Comm_rank");
+
+    /* Case 2:
+     * Free the retrieved communicator object.
+     * Check if the access property list is still valid and can return
+     * valid communicator object.
+     * Also verify the NULL argument option.
+     */
+    mrc = MPI_Comm_free(&comm_tmp);
+    VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
+
+    /* check NULL argument options. */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    ret = H5Pget_fapl_mpiposix(acc_pl, NULL);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    ret = H5Pget_fapl_mpiposix(acc_pl, NULL, NULL);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    VRFY((ret >= 0), "H5Pget_fapl_mpiposix neither");
+
+    /* now get it again and check validity too. */
+    /* Don't free the returned object which is used in the next case. */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+    ret = H5Pget_fapl_mpiposix(acc_pl, &comm_tmp);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+    ret = H5Pget_fapl_mpiposix(acc_pl, &comm_tmp, &use_gpfs);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    VRFY((ret >= 0), "H5Pget_fapl_mpiposix");
+    MPI_Comm_size(comm_tmp,&mpi_size_tmp);
+    MPI_Comm_rank(comm_tmp,&mpi_rank_tmp);
+    if (VERBOSE_MED)
+	printf("After second H5Pget_fapl_mpiposix: rank/size of comm are %d/%d\n",
+	mpi_rank_tmp, mpi_size_tmp);
+    VRFY((mpi_size_tmp==mpi_size), "MPI_Comm_size");
+    VRFY((mpi_rank_tmp==mpi_rank), "MPI_Comm_rank");
+
+    /* Case 3:
+     * Close the property list and verify the retrieved communicator
+     * object is still valid.
+     */
+    H5Pclose(acc_pl);
+    MPI_Comm_size(comm_tmp,&mpi_size_tmp);
+    MPI_Comm_rank(comm_tmp,&mpi_rank_tmp);
+    if (VERBOSE_MED)
+	printf("After Property list closed: rank/size of comm are %d/%d\n",
+	mpi_rank_tmp, mpi_size_tmp);
+
+    /* clean up */
+    mrc = MPI_Comm_free(&comm_tmp);
+    VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
+}

Added: packages/hdf5/branches/upstream/current/testpar/t_span_tree.c
===================================================================
--- packages/hdf5/branches/upstream/current/testpar/t_span_tree.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/testpar/t_span_tree.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,778 @@
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 program will test irregular hyperslab selections with collective write and read.
+   The way to test whether collective write and read works is to use independent IO
+   output to verify the collective output.
+
+   1) We will write two datasets with the same hyperslab selection settings;
+   one in independent mode,
+   one in collective mode,
+   2) We will read two datasets with the same hyperslab selection settings,
+      1.  independent read to read independent output,
+          independent read to read collecive   output,
+	  Compare the result,
+	  If the result is the same, then collective write succeeds.
+      2.  collective read to read independent output,
+          independent read to read independent output,
+	  Compare the result,
+	  If the result is the same, then collective read succeeds.
+
+ */
+
+#include "hdf5.h"
+#include "H5private.h"
+#include "testphdf5.h"
+
+
+static void coll_write_test(int chunk_factor);
+static void coll_read_test(int chunk_factor);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	coll_irregular_cont_write
+ *
+ * Purpose:	Test the collectively irregular hyperslab write in contiguous
+                storage
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Unknown
+ *		Dec 2nd, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+coll_irregular_cont_write(void)
+{
+
+  coll_write_test(0);
+
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	coll_irregular_cont_read
+ *
+ * Purpose:	Test the collectively irregular hyperslab read in contiguous
+                storage
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Unknown
+ *		Dec 2nd, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+coll_irregular_cont_read(void)
+{
+
+  coll_read_test(0);
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	coll_irregular_simple_chunk_write
+ *
+ * Purpose:	Test the collectively irregular hyperslab write in chunk
+                storage(1 chunk)
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Unknown
+ *		Dec 2nd, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+coll_irregular_simple_chunk_write(void)
+{
+
+  coll_write_test(1);
+
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	coll_irregular_simple_chunk_read
+ *
+ * Purpose:	Test the collectively irregular hyperslab read in chunk
+                storage(1 chunk)
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Unknown
+ *		Dec 2nd, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+coll_irregular_simple_chunk_read(void)
+{
+
+  coll_read_test(1);
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	coll_irregular_complex_chunk_write
+ *
+ * Purpose:	Test the collectively irregular hyperslab write in chunk
+                storage(4 chunks)
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Unknown
+ *		Dec 2nd, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+coll_irregular_complex_chunk_write(void)
+{
+
+  coll_write_test(4);
+
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	coll_irregular_complex_chunk_read
+ *
+ * Purpose:	Test the collectively irregular hyperslab read in chunk
+                storage(1 chunk)
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Unknown
+ *		Dec 2nd, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+coll_irregular_complex_chunk_read(void)
+{
+
+  coll_read_test(4);
+
+}
+
+
+void coll_write_test(int chunk_factor)
+{
+
+  const char *filename;
+  hid_t   acc_plist,xfer_plist;
+  hbool_t  use_gpfs = FALSE;
+  hid_t   file, datasetc,dataseti;           /* File and dataset identifiers */
+  hid_t   mspaceid1, mspaceid, fspaceid,fspaceid1; /* Dataspace identifiers */
+  hid_t   plist;                   /* Dataset property list identifier */
+
+  hsize_t mdim1[] = {MSPACE1_DIM};  /* Dimension size of the first dataset
+				      (in memory) */
+
+  hsize_t fsdim[] = {FSPACE_DIM1, FSPACE_DIM2};
+  /* Dimension sizes of the dataset (on disk) */
+  hsize_t mdim[] = {MSPACE_DIM1, MSPACE_DIM2}; /* Dimension sizes of the
+						  dataset in memory when we
+						  read selection from the
+						  dataset on the disk */
+
+  hsize_t start[2];   /* Start of hyperslab */
+  hsize_t  stride[2]; /* Stride of hyperslab */
+  hsize_t  count[2];  /* Block count */
+  hsize_t  block[2];  /* Block sizes */
+  hsize_t  chunk_dims[RANK];
+
+  herr_t   ret;
+  unsigned i,j;
+  int fillvalue = 0;   /* Fill value for the dataset */
+
+  int    matrix_out[MSPACE_DIM1][MSPACE_DIM2];
+  int    matrix_out1[MSPACE_DIM1][MSPACE_DIM2];   /* Buffer to read from the
+						  dataset */
+  int    vector[MSPACE1_DIM];
+
+  int    mpi_size,mpi_rank;
+
+  MPI_Comm comm = MPI_COMM_WORLD;
+  MPI_Info info = MPI_INFO_NULL;
+
+  /*set up MPI parameters */
+  MPI_Comm_size(comm,&mpi_size);
+  MPI_Comm_rank(comm,&mpi_rank);
+
+
+  /* Obtain file name */
+  filename = GetTestParameters();
+
+  /*
+   * Buffers' initialization.
+   */
+  vector[0] = vector[MSPACE1_DIM - 1] = -1;
+  for (i = 1; i < MSPACE1_DIM - 1; i++) vector[i] = i;
+
+#if 0
+  acc_plist = H5Pcreate(H5P_FILE_ACCESS);
+  VRFY((acc_plist >= 0),"");
+
+  ret       = H5Pset_fapl_mpio(acc_plist,comm,info);
+  VRFY((ret >= 0),"MPIO creation property list succeeded");
+#endif
+
+  acc_plist = create_faccess_plist(comm, info, facc_type, use_gpfs);
+  VRFY((acc_plist >= 0),"");
+
+  /*
+   * Create a file.
+   */
+  file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, acc_plist);
+  VRFY((file >= 0),"H5Fcreate succeeded");
+
+  /*
+   * Create property list for a dataset and set up fill values.
+   */
+  plist = H5Pcreate(H5P_DATASET_CREATE);
+  VRFY((acc_plist >= 0),"");
+
+  ret   = H5Pset_fill_value(plist, H5T_NATIVE_INT, &fillvalue);
+  VRFY((ret >= 0),"Fill value creation property list succeeded");
+
+  if(chunk_factor != 0) {
+
+    chunk_dims[0] = FSPACE_DIM1/chunk_factor;
+    chunk_dims[1] = FSPACE_DIM2/chunk_factor;
+     ret = H5Pset_chunk(plist, 2, chunk_dims);
+    VRFY((ret >= 0),"chunk creation property list succeeded");
+  }
+  /*
+   * Create dataspace for the dataset in the file.
+   */
+  fspaceid = H5Screate_simple(FSPACE_RANK, fsdim, NULL);
+  VRFY((fspaceid >= 0),"file dataspace created succeeded");
+
+  /*
+   * Create dataset in the file. Notice that creation
+   * property list plist is used.
+   */
+  datasetc = H5Dcreate(file, "collect_write", H5T_NATIVE_INT, fspaceid, plist);
+  VRFY((datasetc >= 0),"dataset created succeeded");
+
+  dataseti = H5Dcreate(file, "independ_write", H5T_NATIVE_INT, fspaceid, plist);
+  VRFY((dataseti >= 0),"dataset created succeeded");
+  /*
+   * Select hyperslab for the dataset in the file, using 3x2 blocks,
+   * (4,3) stride and (1,4) count starting at the position (0,1)
+   for the first selection
+  */
+
+  start[0]  = FHSTART0;
+  start[1]  = FHSTART1+mpi_rank*FHSTRIDE1*FHCOUNT1/mpi_size;
+  stride[0] = FHSTRIDE0;
+  stride[1] = FHSTRIDE1;
+  count[0]  = FHCOUNT0;
+  count[1]  = FHCOUNT1/mpi_size;
+  block[0]  = FHBLOCK0;
+  block[1]  = FHBLOCK1;
+
+  ret = H5Sselect_hyperslab(fspaceid, H5S_SELECT_SET, start, stride, count, block);
+  VRFY((ret >= 0),"hyperslab selection succeeded");
+
+  /*
+   * Select hyperslab for the dataset in the file, using 3x2*4 blocks,
+   * stride 1  and (1,1) count starting at the position (4,0).
+   */
+
+  start[0]  = SHSTART0;
+  start[1]  = SHSTART1+SHCOUNT1*SHBLOCK1*mpi_rank/mpi_size;
+  stride[0] = SHSTRIDE0;
+  stride[1] = SHSTRIDE1;
+  count[0]  = SHCOUNT0;
+  count[1]  = SHCOUNT1;
+  block[0]  = SHBLOCK0;
+  block[1]  = SHBLOCK1/mpi_size;
+
+  ret = H5Sselect_hyperslab(fspaceid, H5S_SELECT_OR, start, stride, count, block);
+  VRFY((ret >= 0),"hyperslab selection succeeded");
+
+  /*
+   * Create dataspace for the first dataset.
+   */
+  mspaceid1 = H5Screate_simple(MSPACE1_RANK, mdim1, NULL);
+  VRFY((mspaceid1 >= 0),"memory dataspace created succeeded");
+
+  /*
+   * Select hyperslab.
+   * We will use 48 elements of the vector buffer starting at the second element.
+   * Selected elements are 1 2 3 . . . 48
+   */
+  start[0]  = MHSTART0;
+  stride[0] = MHSTRIDE0;
+  count[0]  = MHCOUNT0/mpi_size;
+  block[0]  = MHBLOCK0;
+
+  ret = H5Sselect_hyperslab(mspaceid1, H5S_SELECT_SET, start, stride, count, block);
+  VRFY((ret >= 0),"hyperslab selection succeeded");
+
+
+  ret = H5Dwrite(dataseti, H5T_NATIVE_INT, mspaceid1, fspaceid, H5P_DEFAULT, vector);
+  VRFY((ret >= 0),"dataset independent write succeed");
+  xfer_plist = H5Pcreate(H5P_DATASET_XFER);
+  VRFY((xfer_plist >= 0),"");
+
+  ret = H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+  VRFY((ret >= 0),"MPIO data transfer property list succeed");
+
+
+  ret = H5Dwrite(datasetc, H5T_NATIVE_INT, mspaceid1, fspaceid, xfer_plist, vector);
+/* ret = H5Dwrite(datasetc, H5T_NATIVE_INT, mspaceid1, fspaceid, H5P_DEFAULT, vector);*/
+  VRFY((ret >= 0),"dataset collective write succeed");
+
+  ret = H5Sclose(mspaceid1);
+  VRFY((ret >= 0),"");
+
+  ret = H5Sclose(fspaceid);
+  VRFY((ret >= 0),"");
+
+  /*
+   * Close dataset.
+   */
+  ret = H5Dclose(datasetc);
+  VRFY((ret >= 0),"");
+  ret = H5Dclose(dataseti);
+  VRFY((ret >= 0),"");
+
+  /*
+   * Close the file.
+   */
+  ret = H5Fclose(file);
+  VRFY((ret >= 0),"");
+  /*
+   * Close property list
+   */
+
+  ret = H5Pclose(acc_plist);
+  VRFY((ret >= 0),"");
+  ret = H5Pclose(xfer_plist);
+  VRFY((ret >= 0),"");
+  ret = H5Pclose(plist);
+  VRFY((ret >= 0),"");
+
+  /*
+   * Open the file.
+   */
+
+  /*** For testing collective hyperslab selection write ***/
+
+#if 0
+  acc_plist = H5Pcreate(H5P_FILE_ACCESS);
+  VRFY((acc_plist >= 0),"");
+
+  ret       = H5Pset_fapl_mpio(acc_plist,comm,info);
+  VRFY((ret >= 0),"MPIO creation property list succeeded");
+#endif
+  acc_plist = create_faccess_plist(comm, info, facc_type, use_gpfs);
+  VRFY((acc_plist >= 0),"");
+
+  file = H5Fopen(filename, H5F_ACC_RDONLY, acc_plist);
+  VRFY((file >= 0),"H5Fopen succeeded");
+
+  /*
+   * Open the dataset.
+   */
+  datasetc = H5Dopen(file,"collect_write");
+  VRFY((datasetc >= 0),"H5Dopen succeeded");
+  dataseti = H5Dopen(file,"independ_write");
+  VRFY((dataseti >= 0),"H5Dopen succeeded");
+
+  /*
+   * Get dataspace of the open dataset.
+   */
+  fspaceid = H5Dget_space(datasetc);
+  VRFY((fspaceid >= 0),"file dataspace obtained succeeded");
+
+  fspaceid1 = H5Dget_space(dataseti);
+  VRFY((fspaceid1 >= 0),"file dataspace obtained succeeded");
+
+
+
+  start[0]  = RFFHSTART0;
+  start[1]  = RFFHSTART1+mpi_rank*RFFHCOUNT1/mpi_size;
+  block[0]  = RFFHBLOCK0;
+  block[1]  = RFFHBLOCK1;
+  stride[0] = RFFHSTRIDE0;
+  stride[1] = RFFHSTRIDE1;
+  count[0]  = RFFHCOUNT0;
+  count[1]  = RFFHCOUNT1/mpi_size;
+
+
+  ret = H5Sselect_hyperslab(fspaceid, H5S_SELECT_SET, start, stride, count, block);
+  VRFY((ret >= 0),"hyperslab selection succeeded");
+  ret = H5Sselect_hyperslab(fspaceid1, H5S_SELECT_SET, start, stride, count, block);
+  VRFY((ret >= 0),"hyperslab selection succeeded");
+
+  /*start[0] = RFSHSTART0+mpi_rank*RFSHCOUNT1/mpi_size; */
+  start[0] = RFSHSTART0;
+  start[1] = RFSHSTART1+RFSHCOUNT1*mpi_rank/mpi_size;
+  block[0] = RFSHBLOCK0;
+  block[1] = RFSHBLOCK1;
+  stride[0] = RFSHSTRIDE0;
+  stride[1] = RFSHSTRIDE0;
+  count[0]  = RFSHCOUNT0;
+  count[1]  = RFSHCOUNT1/mpi_size;
+  ret = H5Sselect_hyperslab(fspaceid, H5S_SELECT_OR, start, stride, count, block);
+  VRFY((ret >= 0),"hyperslab selection succeeded");
+  ret = H5Sselect_hyperslab(fspaceid1, H5S_SELECT_OR, start, stride, count, block);
+  VRFY((ret >= 0),"hyperslab selection succeeded");
+
+
+  /*
+   * Create memory dataspace.
+   */
+  mspaceid = H5Screate_simple(MSPACE_RANK, mdim, NULL);
+
+  /*
+   * Select two hyperslabs in memory. Hyperslabs has the same
+   * size and shape as the selected hyperslabs for the file dataspace.
+   */
+
+
+  start[0]  = RMFHSTART0;
+  start[1]  = RMFHSTART1+mpi_rank*RMFHCOUNT1/mpi_size;
+  block[0]  = RMFHBLOCK0;
+  block[1]  = RMFHBLOCK1;
+  stride[0] = RMFHSTRIDE0;
+  stride[1] = RMFHSTRIDE1;
+  count[0]  = RMFHCOUNT0;
+  count[1]  = RMFHCOUNT1/mpi_size;
+  ret = H5Sselect_hyperslab(mspaceid, H5S_SELECT_SET, start, stride, count, block);
+  VRFY((ret >= 0),"hyperslab selection succeeded");
+
+  start[0]  = RMSHSTART0;
+  start[1]  = RMSHSTART1+mpi_rank*RMSHCOUNT1/mpi_size;
+  block[0]  = RMSHBLOCK0;
+  block[1]  = RMSHBLOCK1;
+  stride[0] = RMSHSTRIDE0;
+  stride[1] = RMSHSTRIDE1;
+  count[0]  = RMSHCOUNT0;
+  count[1]  = RMSHCOUNT1/mpi_size;
+
+
+  ret = H5Sselect_hyperslab(mspaceid, H5S_SELECT_OR, start, stride, count, block);
+  VRFY((ret >= 0),"hyperslab selection succeeded");
+
+  /*
+   * Initialize data buffer.
+   */
+  for (i = 0; i < MSPACE_DIM1; i++) {
+    for (j = 0; j < MSPACE_DIM2; j++)
+      matrix_out[i][j] = 0;
+  }
+
+  /*
+   * Read data back to the buffer matrix_out.
+   */
+
+  ret = H5Dread(datasetc, H5T_NATIVE_INT, mspaceid, fspaceid,
+		H5P_DEFAULT, matrix_out);
+  VRFY((ret >= 0),"H5D independent read succeed");
+
+
+  for (i = 0; i < MSPACE_DIM1; i++) {
+    for (j = 0; j < MSPACE_DIM2; j++)
+      matrix_out1[i][j] = 0;
+  }
+  ret = H5Dread(dataseti, H5T_NATIVE_INT, mspaceid, fspaceid,
+		H5P_DEFAULT, matrix_out1);
+  VRFY((ret >= 0),"H5D independent read succeed");
+
+  ret = 0;
+  for (i = 0; i < MSPACE_DIM1; i++){
+    for (j = 0; j < MSPACE_DIM2; j++){
+      if(matrix_out[i][j]!=matrix_out1[i][j]) ret = -1;
+      if(ret < 0) break;
+    }
+  }
+  VRFY((ret >= 0),"H5D contiguous irregular collective write succeed");
+
+  /*
+   * Close memory file and memory dataspaces.
+   */
+  ret = H5Sclose(mspaceid);
+  VRFY((ret >= 0),"");
+  ret = H5Sclose(fspaceid);
+  VRFY((ret >= 0),"");
+
+  /*
+   * Close dataset.
+   */
+  ret = H5Dclose(dataseti);
+  VRFY((ret >= 0),"");
+
+  ret = H5Dclose(datasetc);
+  VRFY((ret >= 0),"");
+  /*
+   * Close property list
+   */
+
+  ret = H5Pclose(acc_plist);
+  VRFY((ret >= 0),"");
+
+
+  /*
+   * Close the file.
+   */
+  ret = H5Fclose(file);
+  VRFY((ret >= 0),"");
+
+  return ;
+}
+
+
+void coll_read_test(int chunk_factor)
+{
+
+  const char *filename;
+  hid_t   acc_plist,xfer_plist;
+  hid_t   file, dataseti;           /* File and dataset identifiers */
+  hid_t   mspaceid, fspaceid1; /* Dataspace identifiers */
+  hbool_t use_gpfs = FALSE;
+
+  /* Dimension sizes of the dataset (on disk) */
+  hsize_t mdim[] = {MSPACE_DIM1, MSPACE_DIM2}; /* Dimension sizes of the
+						  dataset in memory when we
+						  read selection from the
+						  dataset on the disk */
+
+  hsize_t  start[2]; /* Start of hyperslab */
+  hsize_t  stride[2]; /* Stride of hyperslab */
+  hsize_t  count[2];  /* Block count */
+  hsize_t  block[2];  /* Block sizes */
+
+  herr_t   ret;
+  unsigned i,j;
+
+  int    matrix_out[MSPACE_DIM1][MSPACE_DIM2];
+  int    matrix_out1[MSPACE_DIM1][MSPACE_DIM2];   /* Buffer to read from the
+						  dataset */
+
+  int    mpi_size,mpi_rank;
+
+  MPI_Comm comm = MPI_COMM_WORLD;
+  MPI_Info info = MPI_INFO_NULL;
+
+  /*set up MPI parameters */
+  MPI_Comm_size(comm,&mpi_size);
+  MPI_Comm_rank(comm,&mpi_rank);
+
+
+  /* Obtain file name */
+  filename = GetTestParameters();
+
+  /*
+   * Buffers' initialization.
+   */
+
+  /*
+   * Open the file.
+   */
+
+  /*** For testing collective hyperslab selection read ***/
+
+#if 0
+  acc_plist = H5Pcreate(H5P_FILE_ACCESS);
+  VRFY((acc_plist >= 0),"");
+
+  ret       = H5Pset_fapl_mpio(acc_plist,comm,info);
+  VRFY((ret >= 0),"MPIO creation property list succeeded");
+#endif
+
+  acc_plist = create_faccess_plist(comm, info, facc_type, use_gpfs);
+  VRFY((acc_plist >= 0),"");
+
+  file = H5Fopen(filename, H5F_ACC_RDONLY, acc_plist);
+  VRFY((file >= 0),"H5Fopen succeeded");
+
+  /*
+   * Open the dataset.
+   */
+  dataseti = H5Dopen(file,"independ_write");
+  VRFY((dataseti >= 0),"H5Dopen succeeded");
+
+  /*
+   * Get dataspace of the open dataset.
+   */
+
+  fspaceid1 = H5Dget_space(dataseti);
+  VRFY((fspaceid1 >= 0),"file dataspace obtained succeeded");
+
+  start[0]  = RFFHSTART0;
+  start[1]  = RFFHSTART1+mpi_rank*RFFHCOUNT1/mpi_size;
+  block[0]  = RFFHBLOCK0;
+  block[1]  = RFFHBLOCK1;
+  stride[0] = RFFHSTRIDE0;
+  stride[1] = RFFHSTRIDE1;
+  count[0]  = RFFHCOUNT0;
+  count[1]  = RFFHCOUNT1/mpi_size;
+
+  ret = H5Sselect_hyperslab(fspaceid1, H5S_SELECT_SET, start, stride, count, block);
+  VRFY((ret >= 0),"hyperslab selection succeeded");
+
+
+  start[0] = RFSHSTART0;
+  start[1] = RFSHSTART1+RFSHCOUNT1*mpi_rank/mpi_size;
+  block[0] = RFSHBLOCK0;
+  block[1] = RFSHBLOCK1;
+  stride[0] = RFSHSTRIDE0;
+  stride[1] = RFSHSTRIDE0;
+  count[0]  = RFSHCOUNT0;
+  count[1]  = RFSHCOUNT1/mpi_size;
+
+  ret = H5Sselect_hyperslab(fspaceid1, H5S_SELECT_OR, start, stride, count, block);
+  VRFY((ret >= 0),"hyperslab selection succeeded");
+
+
+  /*
+   * Create memory dataspace.
+   */
+  mspaceid = H5Screate_simple(MSPACE_RANK, mdim, NULL);
+
+  /*
+   * Select two hyperslabs in memory. Hyperslabs has the same
+   * size and shape as the selected hyperslabs for the file dataspace.
+   */
+
+  start[0]  = RMFHSTART0;
+  start[1]  = RMFHSTART1+mpi_rank*RMFHCOUNT1/mpi_size;
+  block[0]  = RMFHBLOCK0;
+  block[1]  = RMFHBLOCK1;
+  stride[0] = RMFHSTRIDE0;
+  stride[1] = RMFHSTRIDE1;
+  count[0]  = RMFHCOUNT0;
+  count[1]  = RMFHCOUNT1/mpi_size;
+  ret = H5Sselect_hyperslab(mspaceid, H5S_SELECT_SET, start, stride, count, block);
+  VRFY((ret >= 0),"hyperslab selection succeeded");
+
+  start[0]  = RMSHSTART0;
+  start[1]  = RMSHSTART1+mpi_rank*RMSHCOUNT1/mpi_size;
+  block[0]  = RMSHBLOCK0;
+  block[1]  = RMSHBLOCK1;
+  stride[0] = RMSHSTRIDE0;
+  stride[1] = RMSHSTRIDE1;
+  count[0]  = RMSHCOUNT0;
+  count[1]  = RMSHCOUNT1/mpi_size;
+  ret = H5Sselect_hyperslab(mspaceid, H5S_SELECT_OR, start, stride, count, block);
+  VRFY((ret >= 0),"hyperslab selection succeeded");
+
+  /*
+   * Initialize data buffer.
+   */
+  for (i = 0; i < MSPACE_DIM1; i++) {
+    for (j = 0; j < MSPACE_DIM2; j++)
+      matrix_out[i][j] = 0;
+  }
+
+  /*
+   * Read data back to the buffer matrix_out.
+   */
+
+  xfer_plist = H5Pcreate(H5P_DATASET_XFER);
+  VRFY((xfer_plist >= 0),"");
+
+  ret = H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+  VRFY((ret >= 0),"MPIO data transfer property list succeed");
+
+    ret = H5Dread(dataseti, H5T_NATIVE_INT, mspaceid, fspaceid1,
+		xfer_plist, matrix_out);
+		VRFY((ret >= 0),"H5D collecive read succeed");
+
+  ret = H5Pclose(xfer_plist);
+  VRFY((ret >= 0),"");
+
+  for (i = 0; i < MSPACE_DIM1; i++) {
+    for (j = 0; j < MSPACE_DIM2; j++)
+      matrix_out1[i][j] = 0;
+  }
+  ret = H5Dread(dataseti, H5T_NATIVE_INT, mspaceid, fspaceid1,
+		H5P_DEFAULT, matrix_out1);
+
+  VRFY((ret >= 0),"H5D independent read succeed");
+  ret = 0;
+  for (i = 0; i < MSPACE_DIM1; i++){
+    for (j = 0; j < MSPACE_DIM2; j++){
+      if(matrix_out[i][j]!=matrix_out1[i][j])ret = -1;
+      if(ret < 0) break;
+    }
+  }
+  VRFY((ret >= 0),"H5D contiguous irregular collective read succeed");
+
+  /*
+   * Close memory file and memory dataspaces.
+   */
+  ret = H5Sclose(mspaceid);
+  VRFY((ret >= 0),"");
+  ret = H5Sclose(fspaceid1);
+  VRFY((ret >= 0),"");
+
+  /*
+   * Close dataset.
+   */
+  ret = H5Dclose(dataseti);
+  VRFY((ret >= 0),"");
+  /*
+   * Close property list
+   */
+  ret = H5Pclose(acc_plist);
+  VRFY((ret >= 0),"");
+
+
+  /*
+   * Close the file.
+   */
+  ret = H5Fclose(file);
+  VRFY((ret >= 0),"");
+
+  return ;
+}

Added: packages/hdf5/branches/upstream/current/testpar/testph5.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/testpar/testph5.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/testpar/testph5.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,70 @@
+#! /bin/sh
+##
+## 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.
+##
+
+# Scripts for running testphdf5 program with a variety of parameters
+top_srcdir=@top_srcdir@
+top_builddir=..
+srcdir=@srcdir@
+
+TEST_APP=testphdf5               # The tool name
+TEST_APP_BIN=`pwd`/$TEST_APP    # The path of the tool binary
+
+nerrors=0
+verbose=yes
+
+# The build (current) directory might be different than the source directory.
+if test -z "$srcdir"; then
+   srcdir=.
+fi
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Testing".
+#
+TESTING() {
+   SPACES="                                                               "
+   echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
+}
+
+# Run a test.  If a test fails then increment the `nerrors' global variable.
+#
+TOOLTEST() {
+    # Run test.
+    echo $RUNPARALLEL $TEST_APP_BIN "$@"
+    eval $RUNPARALLEL $TEST_APP_BIN "$@"
+
+    # Check if the command failed and increment nerrors if so.
+    if test $? -ne 0 ; then
+        nerrors="`expr $nerrors + 1`"
+    fi
+}
+
+##############################################################################
+##############################################################################
+###			  T H E   T E S T S                                ###
+##############################################################################
+##############################################################################
+
+# testphdf5 test using the MPI-POSIX VFL driver
+TOOLTEST -p
+
+# Emit message about testing status
+if test $nerrors -eq 0 ; then
+   echo "All $TEST_APP tests passed."
+else
+   echo "ERROR! One or more $TEST_APP tests failed."
+fi
+
+# Propagate a useful exit code
+exit $nerrors

Added: packages/hdf5/branches/upstream/current/testpar/testphdf5.c
===================================================================
--- packages/hdf5/branches/upstream/current/testpar/testphdf5.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/testpar/testphdf5.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,543 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Main driver of the Parallel HDF5 tests
+ */
+
+#include "testphdf5.h"
+
+#ifndef PATH_MAX
+#define PATH_MAX    512
+#endif  /* !PATH_MAX */
+
+/* global variables */
+int dim0 = DIM0;
+int dim1 = DIM1;
+int chunkdim0;
+int chunkdim1;
+int nerrors = 0;			/* errors count */
+int ndatasets = 300;			/* number of datasets to create*/
+int ngroups = 512;                      /* number of groups to create in root
+                                         * group. */
+int facc_type = FACC_MPIO;		/*Test file access type */
+
+H5E_auto_t old_func;		        /* previous error handler */
+void *old_client_data;			/* previous error handler arg.*/
+
+/* other option flags */
+
+/* FILENAME and filenames must have the same number of names.
+ * Use PARATESTFILE in general and use a separated filename only if the file
+ * created in one test is accessed by a different test.
+ * filenames[0] is reserved as the file name for PARATESTFILE.
+ */
+#define NFILENAME 2
+#define PARATESTFILE filenames[0]
+const char *FILENAME[NFILENAME]={
+	    "ParaTest",
+	    NULL};
+char	filenames[NFILENAME][PATH_MAX];
+hid_t	fapl;				/* file access property list */
+
+#ifdef USE_PAUSE
+/* pause the process for a moment to allow debugger to attach if desired. */
+/* Will pause more if greenlight file is not persent but will eventually */
+/* continue. */
+#include <sys/types.h>
+#include <sys/stat.h>
+
+void pause_proc(void)
+{
+
+    int pid;
+    h5_stat_t	statbuf;
+    char greenlight[] = "go";
+    int maxloop = 10;
+    int loops = 0;
+    int time_int = 10;
+
+    /* mpi variables */
+    int  mpi_size, mpi_rank;
+    int  mpi_namelen;
+    char mpi_name[MPI_MAX_PROCESSOR_NAME];
+
+    pid = getpid();
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+    MPI_Get_processor_name(mpi_name, &mpi_namelen);
+
+    if (MAINPROCESS)
+	while ((stat(greenlight, &statbuf) == -1) && loops < maxloop){
+	    if (!loops++){
+		printf("Proc %d (%*s, %d): to debug, attach %d\n",
+		    mpi_rank, mpi_namelen, mpi_name, pid, pid);
+	    }
+	    printf("waiting(%ds) for file %s ...\n", time_int, greenlight);
+	    fflush(stdout);
+	    sleep(time_int);
+	}
+    MPI_Barrier(MPI_COMM_WORLD);
+}
+
+/* Use the Profile feature of MPI to call the pause_proc() */
+int MPI_Init(int *argc, char ***argv)
+{
+    int ret_code;
+    ret_code=PMPI_Init(argc, argv);
+    pause_proc();
+    return (ret_code);
+}
+#endif	/* USE_PAUSE */
+
+
+/*
+ * Show command usage
+ */
+static void
+usage(void)
+{
+    printf("    [-r] [-w] [-m<n_datasets>] [-n<n_groups>] "
+	"[-o] [-f <prefix>] [-d <dim0> <dim1>]\n");
+    printf("\t-m<n_datasets>"
+	"\tset number of datasets for the multiple dataset test\n");
+    printf("\t-n<n_groups>"
+        "\tset number of groups for the multiple group test\n");
+    printf("\t-f <prefix>\tfilename prefix\n");
+    printf("\t-2\t\tuse Split-file together with MPIO\n");
+    printf("\t-p\t\tuse combo MPI-POSIX driver\n");
+    printf("\t-d <dim0> <dim1>\tdataset dimensions. Defaults (%d,%d)\n",
+	DIM0, DIM1);
+    printf("\t-c <dim0> <dim1>\tdataset chunk dimensions. Defaults (dim0/10,dim1/10)\n");
+    printf("\n");
+}
+
+
+/*
+ * parse the command line options
+ */
+static int
+parse_options(int argc, char **argv)
+{
+    int mpi_size, mpi_rank;				/* mpi variables */
+
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
+    /* setup default chunk-size. Make sure sizes are > 0 */
+    chunkdim0 = (dim0+9)/10;
+    chunkdim1 = (dim1+9)/10;
+
+    while (--argc){
+	if (**(++argv) != '-'){
+	    break;
+	}else{
+	    switch(*(*argv+1)){
+		case 'm':   ndatasets = atoi((*argv+1)+1);
+			    if (ndatasets < 0){
+				nerrors++;
+				return(1);
+			    }
+			    break;
+	        case 'n':   ngroups = atoi((*argv+1)+1);
+		            if (ngroups < 0){
+                                nerrors++;
+                                return(1);
+			    }
+                            break;
+		case 'f':   if (--argc < 1) {
+				nerrors++;
+				return(1);
+			    }
+			    if (**(++argv) == '-') {
+				nerrors++;
+				return(1);
+			    }
+			    paraprefix = *argv;
+			    break;
+		case 'p':   /* Use the MPI-POSIX driver access */
+			    facc_type = FACC_MPIPOSIX;
+			    break;
+		case '2':   /* Use the split-file driver with MPIO access */
+			    /* Can use $HDF5_METAPREFIX to define the */
+			    /* meta-file-prefix. */
+			    facc_type = FACC_MPIO | FACC_SPLIT;
+			    break;
+		case 'd':   /* dimensizes */
+			    if (--argc < 2){
+				nerrors++;
+				return(1);
+			    }
+			    dim0 = atoi(*(++argv));
+			    argc--;
+			    dim1 = atoi(*(++argv));
+			    /* set default chunkdim sizes too */
+			    chunkdim0 = (dim0+9)/10;
+			    chunkdim1 = (dim1+9)/10;
+			    break;
+		case 'c':   /* chunk dimensions */
+			    if (--argc < 2){
+				nerrors++;
+				return(1);
+			    }
+			    chunkdim0 = atoi(*(++argv));
+			    argc--;
+			    chunkdim1 = atoi(*(++argv));
+			    break;
+		case 'h':   /* print help message--return with nerrors set */
+			    return(1);
+		default:    printf("Illegal option(%s)\n", *argv);
+			    nerrors++;
+			    return(1);
+	    }
+	}
+    } /*while*/
+
+    /* check validity of dimension and chunk sizes */
+    if (dim0 <= 0 || dim1 <= 0){
+	printf("Illegal dim sizes (%d, %d)\n", dim0, dim1);
+	nerrors++;
+	return(1);
+    }
+    if (chunkdim0 <= 0 || chunkdim1 <= 0){
+	printf("Illegal chunkdim sizes (%d, %d)\n", chunkdim0, chunkdim1);
+	nerrors++;
+	return(1);
+    }
+
+    /* Make sure datasets can be divided into equal portions by the processes */
+    if ((dim0 % mpi_size) || (dim1 % mpi_size)){
+	if (MAINPROCESS)
+	    printf("dim0(%d) and dim1(%d) must be multiples of processes(%d)\n",
+		    dim0, dim1, mpi_size);
+	nerrors++;
+	return(1);
+    }
+
+    /* compose the test filenames */
+    {
+	int i, n;
+
+	n = sizeof(FILENAME)/sizeof(FILENAME[0]) - 1;	/* exclude the NULL */
+
+	for (i=0; i < n; i++)
+	    if (h5_fixname(FILENAME[i],fapl,filenames[i],sizeof(filenames[i]))
+		== NULL){
+		printf("h5_fixname failed\n");
+		nerrors++;
+		return(1);
+	    }
+	printf("Test filenames are:\n");
+	for (i=0; i < n; i++)
+	    printf("    %s\n", filenames[i]);
+    }
+
+    return(0);
+}
+
+
+/*
+ * Create the appropriate File access property list
+ */
+hid_t
+create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type,
+                     hbool_t use_gpfs)
+{
+    hid_t ret_pl = -1;
+    herr_t ret;                 /* generic return value */
+    int mpi_rank;		/* mpi variables */
+
+    /* need the rank for error checking macros */
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
+    ret_pl = H5Pcreate (H5P_FILE_ACCESS);
+    VRFY((ret_pl >= 0), "H5P_FILE_ACCESS");
+
+    if (l_facc_type == FACC_DEFAULT)
+	return (ret_pl);
+
+    if (l_facc_type == FACC_MPIO){
+	/* set Parallel access with communicator */
+	ret = H5Pset_fapl_mpio(ret_pl, comm, info);
+	VRFY((ret >= 0), "");
+	return(ret_pl);
+    }
+
+    if (l_facc_type == (FACC_MPIO | FACC_SPLIT)){
+	hid_t mpio_pl;
+
+	mpio_pl = H5Pcreate (H5P_FILE_ACCESS);
+	VRFY((mpio_pl >= 0), "");
+	/* set Parallel access with communicator */
+	ret = H5Pset_fapl_mpio(mpio_pl, comm, info);
+	VRFY((ret >= 0), "");
+
+	/* setup file access template */
+	ret_pl = H5Pcreate (H5P_FILE_ACCESS);
+	VRFY((ret_pl >= 0), "");
+	/* set Parallel access with communicator */
+	ret = H5Pset_fapl_split(ret_pl, ".meta", mpio_pl, ".raw", mpio_pl);
+	VRFY((ret >= 0), "H5Pset_fapl_split succeeded");
+	H5Pclose(mpio_pl);
+	return(ret_pl);
+    }
+
+    if (l_facc_type == FACC_MPIPOSIX) {
+	/* set Parallel access with communicator */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+	ret = H5Pset_fapl_mpiposix(ret_pl, comm);
+#else /* H5_WANT_H5_V1_4_COMPAT */
+	ret = H5Pset_fapl_mpiposix(ret_pl, comm, use_gpfs);
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+	VRFY((ret >= 0), "H5Pset_fapl_mpiposix succeeded");
+	return(ret_pl);
+    }
+
+    /* unknown file access types */
+    return (ret_pl);
+}
+
+/*
+ * Check the size of a file using MPI routines
+ */
+MPI_Offset
+h5_mpi_get_file_size(const char *filename, MPI_Comm comm, MPI_Info info)
+{
+    MPI_File	fh;             /* MPI file handle */
+    MPI_Offset	size=0;         /* File size to return */
+
+    if (MPI_SUCCESS != MPI_File_open(comm, (char*)filename, MPI_MODE_RDONLY, info, &fh))
+        goto done;
+
+    if (MPI_SUCCESS != (MPI_File_get_size(fh, &size)))
+        goto done;
+
+    if (MPI_SUCCESS != MPI_File_close(&fh))
+        size=0;
+
+done:
+    return(size);
+}
+
+int main(int argc, char **argv)
+{
+    int mpi_size, mpi_rank;				/* mpi variables */
+    H5Ptest_param_t ndsets_params, ngroups_params;
+    H5Ptest_param_t collngroups_params;
+    H5Ptest_param_t io_mode_confusion_params;
+
+    /* Un-buffer the stdout and stderr */
+    setbuf(stderr, NULL);
+    setbuf(stdout, NULL);
+
+    MPI_Init(&argc, &argv);
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
+    if (MAINPROCESS){
+	printf("===================================\n");
+	printf("PHDF5 TESTS START\n");
+	printf("===================================\n");
+    }
+    H5open();
+    h5_show_hostname();
+
+    /* Initialize testing framework */
+    TestInit(argv[0], usage, parse_options);
+
+    /* Tests are generally arranged from least to most complexity... */
+    AddTest("mpiodup", test_fapl_mpio_dup, NULL,
+	    "fapl_mpio duplicate", NULL);
+    AddTest("posixdup", test_fapl_mpiposix_dup, NULL,
+	    "fapl_mpiposix duplicate", NULL);
+
+    AddTest("split", test_split_comm_access, NULL,
+	    "dataset using split communicators", PARATESTFILE);
+
+    AddTest("idsetw", dataset_writeInd, NULL,
+	    "dataset independent write", PARATESTFILE);
+    AddTest("idsetr", dataset_readInd, NULL,
+	    "dataset independent read", PARATESTFILE);
+
+    AddTest("cdsetw", dataset_writeAll, NULL,
+	    "dataset collective write", PARATESTFILE);
+    AddTest("cdsetr", dataset_readAll, NULL,
+	    "dataset collective read", PARATESTFILE);
+
+    AddTest("eidsetw", extend_writeInd, NULL,
+	    "extendible dataset independent write", PARATESTFILE);
+    AddTest("eidsetr", extend_readInd, NULL,
+	    "extendible dataset independent read", PARATESTFILE);
+    AddTest("ecdsetw", extend_writeAll, NULL,
+	    "extendible dataset collective write", PARATESTFILE);
+    AddTest("ecdsetr", extend_readAll, NULL,
+	    "extendible dataset collective read", PARATESTFILE);
+    AddTest("eidsetw2", extend_writeInd2, NULL,
+	    "extendible dataset independent write #2", PARATESTFILE);
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+    AddTest("cmpdsetr", compress_readAll, NULL,
+	    "compressed dataset collective read", PARATESTFILE);
+#endif /* H5_HAVE_FILTER_DEFLATE */
+
+    ndsets_params.name = PARATESTFILE;
+    ndsets_params.count = ndatasets;
+    AddTest("ndsetw", multiple_dset_write, NULL,
+	    "multiple datasets write", &ndsets_params);
+
+    ngroups_params.name = PARATESTFILE;
+    ngroups_params.count = ngroups;
+    AddTest("ngrpw", multiple_group_write, NULL,
+	    "multiple groups write", &ngroups_params);
+    AddTest("ngrpr", multiple_group_read, NULL,
+	    "multiple groups read", &ngroups_params);
+
+    AddTest("compact", compact_dataset, NULL,
+	    "compact dataset test", PARATESTFILE);
+
+    collngroups_params.name = PARATESTFILE;
+    collngroups_params.count = ngroups;
+    AddTest("cngrpw", collective_group_write, NULL,
+	    "collective group and dataset write", &collngroups_params);
+    AddTest("ingrpr", independent_group_read, NULL,
+	    "independent group and dataset read", &collngroups_params);
+
+    /* By default, do not run big dataset. */
+    AddTest("-bigdset", big_dataset, NULL,
+	    "big dataset test", PARATESTFILE);
+    AddTest("fill", dataset_fillvalue, NULL,
+	    "dataset fill value", PARATESTFILE);
+
+#if 0
+    /* Collective Chunk IO are verified to work for 64 processes.
+     * Add or skip depending on whether mpi_size is larger than 64.
+     */
+
+    if((mpi_size > 64) && MAINPROCESS) {
+	printf("Collective chunk IO tests haven't been tested \n");
+	printf("  for the number of process greater than 64.\n");
+	printf("Please try with the number of process \n");
+	printf("  no greater than 64 for collective chunk IO test.\n");
+	printf("Collective chunk tests will be skipped \n");
+    }
+    AddTest((mpi_size > 64) ? "-cchunk1" : "cchunk1",
+	coll_chunk1,NULL, "simple collective chunk io",PARATESTFILE);
+    AddTest((mpi_size > 64) ? "-cchunk2" : "cchunk2",
+	coll_chunk2,NULL, "noncontiguous collective chunk io",PARATESTFILE);
+    AddTest((mpi_size > 64) ? "-cchunk3" : "cchunk3",
+	coll_chunk3,NULL, "multi-chunk collective chunk io",PARATESTFILE);
+    AddTest((mpi_size > 64) ? "-cchunk4" : "cchunk4",
+	coll_chunk4,NULL, "collective to independent chunk io",PARATESTFILE);
+#endif
+  AddTest("cchunk1",
+	coll_chunk1,NULL, "simple collective chunk io",PARATESTFILE);
+    AddTest("cchunk2",
+	coll_chunk2,NULL, "noncontiguous collective chunk io",PARATESTFILE);
+    AddTest("cchunk3",
+	coll_chunk3,NULL, "multi-chunk collective chunk io",PARATESTFILE);
+#if 0
+    AddTest("cchunk4",
+	coll_chunk4,NULL, "collective to independent chunk io",PARATESTFILE);
+#endif
+
+/* irregular collective IO tests*/
+    AddTest("ccontw",
+	coll_irregular_cont_write,NULL,
+	"collective irregular contiguous write",PARATESTFILE);
+    AddTest("ccontr",
+	coll_irregular_cont_read,NULL,
+	"collective irregular contiguous read",PARATESTFILE);
+    AddTest("cschunkw",
+	coll_irregular_simple_chunk_write,NULL,
+	"collective irregular simple chunk write",PARATESTFILE);
+    AddTest("cschunkr",
+	coll_irregular_simple_chunk_read,NULL,
+	"collective irregular simple chunk read",PARATESTFILE);
+    AddTest("ccchunkw",
+	coll_irregular_complex_chunk_write,NULL,
+	"collective irregular complex chunk write",PARATESTFILE);
+    AddTest("ccchunkr",
+	coll_irregular_complex_chunk_read,NULL,
+	"collective irregular complex chunk read",PARATESTFILE);
+
+
+    io_mode_confusion_params.name  = PARATESTFILE;
+    io_mode_confusion_params.count = 0; /* value not used */
+
+    AddTest("I/Omodeconf", io_mode_confusion, NULL,
+	    "I/O mode confusion test -- hangs quickly on failure",
+            &io_mode_confusion_params);
+
+    /* Display testing information */
+    TestInfo(argv[0]);
+
+    /* setup file access property list */
+    fapl = H5Pcreate (H5P_FILE_ACCESS);
+    H5Pset_fapl_mpio(fapl, MPI_COMM_WORLD, MPI_INFO_NULL);
+
+    /* Parse command line arguments */
+    TestParseCmdLine(argc, argv);
+
+    if (facc_type == FACC_MPIPOSIX && MAINPROCESS){
+	printf("===================================\n"
+	       "   Using MPIPOSIX driver\n"
+	       "===================================\n");
+    }
+
+    /* Perform requested testing */
+    PerformTests();
+
+    /* make sure all processes are finished before final report, cleanup
+     * and exit.
+     */
+    MPI_Barrier(MPI_COMM_WORLD);
+
+    /* Display test summary, if requested */
+    if (MAINPROCESS && GetTestSummary())
+        TestSummary();
+
+    /* Clean up test files, if allowed */
+    if (GetTestCleanup() && !getenv("HDF5_NOCLEANUP"))
+	h5_cleanup(FILENAME, fapl);
+    else
+	/* h5_cleanup would have closed fapl.  Now must do it explicitedly */
+	H5Pclose(fapl);
+
+    nerrors += GetTestNumErrs();
+
+    /* Gather errors from all processes */
+    {
+        int temp;
+        MPI_Allreduce(&nerrors, &temp, 1, MPI_INT, MPI_MAX, MPI_COMM_WORLD);
+	nerrors=temp;
+    }
+
+    if (MAINPROCESS){		/* only process 0 reports */
+	printf("===================================\n");
+	if (nerrors)
+	    printf("***PHDF5 tests detected %d errors***\n", nerrors);
+	else
+	    printf("PHDF5 tests finished with no errors\n");
+	printf("===================================\n");
+    }
+    /* close HDF5 library */
+    H5close();
+
+    /* MPI_Finalize must be called AFTER H5close which may use MPI calls */
+    MPI_Finalize();
+
+    /* cannot just return (nerrors) because exit code is limited to 1byte */
+    return(nerrors!=0);
+}
+

Added: packages/hdf5/branches/upstream/current/testpar/testphdf5.h
===================================================================
--- packages/hdf5/branches/upstream/current/testpar/testphdf5.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/testpar/testphdf5.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,276 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef PHDF5TEST_H
+#define PHDF5TEST_H
+
+#include "h5test.h"
+
+#ifndef TRUE
+#define TRUE    1
+#endif  /* !TRUE */
+
+#ifndef FALSE
+#define FALSE   (!TRUE)
+#endif  /* !FALSE */
+
+/* Define some handy debugging shorthands, routines, ... */
+/* debugging tools */
+
+#define MESG(x)                                                         \
+	if (VERBOSE_MED) printf("%s\n", x);                                 \
+
+#define VRFY(val, mesg) do {                                            \
+    if (val) {                                                          \
+        if (*mesg != '\0') {                                            \
+            MESG(mesg);                                                 \
+        }                                                               \
+    } else {                                                            \
+        printf("Proc %d: ", mpi_rank);                                  \
+        printf("*** PHDF5 ERROR ***\n");                                \
+        printf("        Assertion (%s) failed at line %4d in %s\n",     \
+               mesg, (int)__LINE__, __FILE__);                          \
+        ++nerrors;                                                      \
+        fflush(stdout);                                                 \
+        if (!VERBOSE_MED) {                                                 \
+            printf("aborting MPI process\n");                           \
+            MPI_Finalize();                                             \
+            exit(nerrors);                                              \
+        }                                                               \
+    }                                                                   \
+} while(0)
+
+/*
+ * Checking for information purpose.
+ * If val is false, print mesg; else nothing.
+ * Either case, no error setting.
+ */
+#define INFO(val, mesg) do {                                            \
+    if (val) {                                                          \
+        if (*mesg != '\0') {                                            \
+            MESG(mesg);                                                 \
+        }                                                               \
+    } else {                                                            \
+        printf("Proc %d: ", mpi_rank);                                  \
+        printf("*** PHDF5 REMARK (not an error) ***\n");                \
+        printf("        Condition (%s) failed at line %4d in %s\n",     \
+               mesg, (int)__LINE__, __FILE__);                          \
+        fflush(stdout);                                                 \
+    }                                                                   \
+} while(0)
+
+#define MPI_BANNER(mesg) do {                                           \
+    if (VERBOSE_MED || MAINPROCESS){                                    \
+	printf("--------------------------------\n");                   \
+	printf("Proc %d: ", mpi_rank);                                  \
+	printf("*** %s\n", mesg);                                       \
+	printf("--------------------------------\n");                   \
+    }                                                                   \
+} while(0)
+
+#define MAINPROCESS     (!mpi_rank) /* define process 0 as main process */
+
+#define SYNC(comm) do {                                                 \
+    MPI_BANNER("doing a SYNC");                                         \
+    MPI_Barrier(comm);                                                  \
+    MPI_BANNER("SYNC DONE");                                            \
+} while(0)
+
+/* End of Define some handy debugging shorthands, routines, ... */
+
+/* Constants definitions */
+#define DIM0		600 	/* Default dataset sizes. */
+#define DIM1		1200	/* Values are from a monitor pixel sizes */
+#define RANK		2
+#define DATASETNAME1	"Data1"
+#define DATASETNAME2	"Data2"
+#define DATASETNAME3	"Data3"
+#define DATASETNAME4	"Data4"
+
+/* Hyperslab layout styles */
+#define BYROW           1       /* divide into slabs of rows */
+#define BYCOL           2       /* divide into blocks of columns */
+#define ZROW            3       /* same as BYCOL except process 0 gets 0 rows */
+#define ZCOL            4       /* same as BYCOL except process 0 gets 0 columns */
+#define MAX_ERR_REPORT  10      /* Maximum number of errors reported */
+
+/* File_Access_type bits */
+#define FACC_DEFAULT    0x0     /* default */
+#define FACC_MPIO       0x1     /* MPIO */
+#define FACC_SPLIT      0x2     /* Split File */
+#define FACC_MULTI      0x4     /* Multi File */
+#define FACC_MPIPOSIX   0x8     /* MPIPOSIX */
+
+/*Constants for collective chunk definitions */
+#define SPACE_DIM1 5760
+#define SPACE_DIM2 3
+#define BYROW_CONT 1
+#define BYROW_DISCONT 2
+#define DSET_COLLECTIVE_CHUNK_NAME "coll_chunk_name"
+
+
+/*Constants for MPI derived data type generated from span tree */
+
+#define MSPACE1_RANK     1          /* Rank of the first dataset in memory */
+#define MSPACE1_DIM      27000      /* Dataset size in memory */
+#define FSPACE_RANK      2        /* Dataset rank as it is stored in the file */
+#define FSPACE_DIM1      9       /* Dimension sizes of the dataset as it is                                                                  stored in the file */
+#define FSPACE_DIM2      3600                                                                                         /* We will read dataset back from the file                                         to the dataset in memory with these                                                                      dataspace parameters. */
+#define MSPACE_RANK      2
+#define MSPACE_DIM1      9
+#define MSPACE_DIM2      3600
+#define FHCOUNT0           1         /* Count of the first dimension of the first hyperslab selection*/
+#define FHCOUNT1           768       /* Count of the second dimension of the first hyperslab selection*/
+#define FHSTRIDE0          4        /* Stride of the first dimension of the first hyperslab selection*/
+#define FHSTRIDE1          3        /* Stride of the second dimension of the first hyperslab selection*/
+#define FHBLOCK0           3        /* Block of the first dimension of the first hyperslab selection*/
+#define FHBLOCK1           2        /* Block of the second dimension of the first hyperslab selection*/
+#define FHSTART0           0        /* start of the first dimension of the first hyperslab selection*/
+#define FHSTART1           1        /* start of the second dimension of the first hyperslab selection*/
+
+#define SHCOUNT0           1         /* Count of the first dimension of the first hyperslab selection*/
+#define SHCOUNT1           1       /* Count of the second dimension of the first hyperslab selection*/
+#define SHSTRIDE0          1        /* Stride of the first dimension of the first hyperslab selection*/
+#define SHSTRIDE1          1        /* Stride of the second dimension of the first hyperslab selection*/
+#define SHBLOCK0           3        /* Block of the first dimension of the first hyperslab selection*/
+#define SHBLOCK1           768        /* Block of the second dimension of the first hyperslab selection*/
+#define SHSTART0           4        /* start of the first dimension of the first hyperslab selection*/
+#define SHSTART1           0        /* start of the second dimension of the first hyperslab selection*/
+
+#define MHCOUNT0           6912         /* Count of the first dimension of the first hyperslab selection*/
+#define MHSTRIDE0          1        /* Stride of the first dimension of the first hyperslab selection*/
+#define MHBLOCK0           1        /* Block of the first dimension of the first hyperslab selection*/
+#define MHSTART0           1        /* start of the first dimension of the first hyperslab selection*/
+
+
+
+#define RFFHCOUNT0           3       /* Count of the first dimension of the first hyperslab selection*/
+#define RFFHCOUNT1           768       /* Count of the second dimension of the first hyperslab selection*/
+#define RFFHSTRIDE0          1        /* Stride of the first dimension of the first hyperslab selection*/
+#define RFFHSTRIDE1          1        /* Stride of the second dimension of the first hyperslab selection*/
+#define RFFHBLOCK0           1        /* Block of the first dimension of the first hyperslab selection*/
+#define RFFHBLOCK1           1        /* Block of the second dimension of the first hyperslab selection*/
+#define RFFHSTART0           1        /* start of the first dimension of the first hyperslab selection*/
+#define RFFHSTART1           2        /* start of the second dimension of the first hyperslab selection*/
+
+
+#define RFSHCOUNT0           3       /* Count of the first dimension of the first hyperslab selection*/
+#define RFSHCOUNT1           1536    /* Count of the second dimension of the first hyperslab selection*/
+#define RFSHSTRIDE0          1        /* Stride of the first dimension of the first hyperslab selection*/
+#define RFSHSTRIDE1          1        /* Stride of the second dimension of the first hyperslab selection*/
+#define RFSHBLOCK0           1        /* Block of the first dimension of the first hyperslab selection*/
+#define RFSHBLOCK1           1        /* Block of the second dimension of the first hyperslab selection*/
+#define RFSHSTART0           2        /* start of the first dimension of the first hyperslab selection*/
+#define RFSHSTART1           4        /* start of the second dimension of the first hyperslab selection*/
+
+
+#define RMFHCOUNT0           3       /* Count of the first dimension of the first hyperslab selection*/
+#define RMFHCOUNT1           768       /* Count of the second dimension of the first hyperslab selection*/
+#define RMFHSTRIDE0          1        /* Stride of the first dimension of the first hyperslab selection*/
+#define RMFHSTRIDE1          1        /* Stride of the second dimension of the first hyperslab selection*/
+#define RMFHBLOCK0           1        /* Block of the first dimension of the first hyperslab selection*/
+#define RMFHBLOCK1           1        /* Block of the second dimension of the first hyperslab selection*/
+#define RMFHSTART0           0        /* start of the first dimension of the first hyperslab selection*/
+#define RMFHSTART1           0        /* start of the second dimension of the first hyperslab selection*/
+
+#define RMSHCOUNT0           3       /* Count of the first dimension of the first hyperslab selection*/
+#define RMSHCOUNT1           1536    /* Count of the second dimension of the first hyperslab selection*/
+#define RMSHSTRIDE0          1        /* Stride of the first dimension of the first hyperslab selection*/
+#define RMSHSTRIDE1          1        /* Stride of the second dimension of the first hyperslab selection*/
+#define RMSHBLOCK0           1        /* Block of the first dimension of the first hyperslab selection*/
+#define RMSHBLOCK1           1        /* Block of the second dimension of the first hyperslab selection*/
+#define RMSHSTART0           1        /* start of the first dimension of the first hyperslab selection*/
+#define RMSHSTART1           2        /* start of the second dimension of the first hyperslab selection*/
+
+
+#define NPOINTS          4          /* Number of points that will be selected
+                                                                and overwritten */
+
+/* Don't erase these lines, they are put here for debugging purposes */
+/*
+#define MSPACE1_RANK     1
+#define MSPACE1_DIM      50
+#define MSPACE2_RANK     1
+#define MSPACE2_DIM      4
+#define FSPACE_RANK      2
+#define FSPACE_DIM1      8
+#define FSPACE_DIM2      12
+#define MSPACE_RANK      2
+#define MSPACE_DIM1      8
+#define MSPACE_DIM2      9
+#define NPOINTS          4
+
+
+*/ /* end of debugging macro */
+/* type definitions */
+typedef struct H5Ptest_param_t  /* holds extra test parameters */
+{
+    char	*name;
+    int		count;
+} H5Ptest_param_t;
+
+/* Dataset data type.  Int's can be easily octo dumped. */
+typedef int DATATYPE;
+
+/* Shared global variables */
+extern int dim0, dim1;				/*Dataset dimensions */
+extern int chunkdim0, chunkdim1;		/*Chunk dimensions */
+extern int nerrors;				/*errors count */
+extern H5E_auto_t old_func;			/* previous error handler */
+extern void *old_client_data;			/*previous error handler arg.*/
+extern int facc_type;				/*Test file access type */
+
+/* Test program prototypes */
+void multiple_dset_write(void);
+void multiple_group_write(void);
+void multiple_group_read(void);
+void collective_group_write(void);
+void independent_group_read(void);
+void test_fapl_mpio_dup(void);
+void test_fapl_mpiposix_dup(void);
+void test_split_comm_access(void);
+void dataset_writeInd(void);
+void dataset_writeAll(void);
+void extend_writeInd(void);
+void extend_writeInd2(void);
+void extend_writeAll(void);
+void dataset_readInd(void);
+void dataset_readAll(void);
+void extend_readInd(void);
+void extend_readAll(void);
+void compact_dataset(void);
+void big_dataset(void);
+void dataset_fillvalue(void);
+void coll_chunk1(void);
+void coll_chunk2(void);
+void coll_chunk3(void);
+void coll_chunk4(void);
+void coll_irregular_cont_read(void);
+void coll_irregular_cont_write(void);
+void coll_irregular_simple_chunk_read(void);
+void coll_irregular_simple_chunk_write(void);
+void coll_irregular_complex_chunk_read(void);
+void coll_irregular_complex_chunk_write(void);
+void io_mode_confusion(void);
+#ifdef H5_HAVE_FILTER_DEFLATE
+void compress_readAll(void);
+#endif /* H5_HAVE_FILTER_DEFLATE */
+
+/* commonly used prototypes */
+hid_t create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type, hbool_t use_gpfs);
+MPI_Offset h5_mpi_get_file_size(const char *filename, MPI_Comm comm, MPI_Info info);
+int dataset_vrfy(hsize_t start[], hsize_t count[], hsize_t stride[],
+                 hsize_t block[], DATATYPE *dataset, DATATYPE *original);
+
+#endif /* PHDF5TEST_H */

Added: packages/hdf5/branches/upstream/current/tools/Dependencies
===================================================================

Added: packages/hdf5/branches/upstream/current/tools/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,116 @@
+## Tools HDF5 Makefile(.in)
+##
+## 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.
+## 
+top_srcdir=@top_srcdir@
+top_builddir=..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## All subdirectories except for the ``lib'' subdirectory.
+##
+SUBDIRS=h5dump h5diff h5ls misc gifconv h5import h5repack h5jam
+
+## Add include directory to the C preprocessor flags, add -lh5tools and
+## -lhdf5 to the list of libraries.
+##
+CPPFLAGS=-I. -I$(srcdir) -I$(top_builddir)/src -I$(top_srcdir)/src  \
+         -I$(top_srcdir)/tools/lib @CPPFLAGS@
+
+## Test programs and scripts.
+##
+TEST_PROGS=
+TEST_SCRIPTS=
+
+## These are our main targets: library and tools.
+##
+LIBTOOLS=$(top_builddir)/tools/lib/libh5tools.la
+LIBHDF5=$(top_builddir)/src/libhdf5.la
+
+PROGS=$(PUB_PROGS) $(TEST_PROGS)
+
+## Source and object files for the tests
+##
+TEST_SRC=
+TEST_OBJ=$(TEST_SRC:.c=.lo)
+
+lib ::
+	(cd lib && $(MAKE) $@) || exit 1;
+
+progs: $(LIBTOOLS) $(LIBHDF5)
+	@@SETX@; for d in X $(SUBDIRS); do                                    \
+	  if test $$d != X; then                                              \
+	    (cd $$d && $(MAKE) $@) || exit 1;                                 \
+	  fi;                                                                 \
+	done
+
+dep depend:
+	@@SETX@; for d in X lib $(SUBDIRS); do                                \
+	  if test $$d != X; then                                              \
+	    (cd $$d && $(MAKE) $@) || exit 1;                                 \
+	  fi;                                                                 \
+	done
+
+check check-s check-p tests test _test: $(PROGS)
+	@@SETX@; for d in X lib $(SUBDIRS); do                                \
+	  if test $$d != X; then                                              \
+	    (cd $$d && $(MAKE) $@) || exit 1;                                 \
+	  fi;                                                                 \
+	done
+
+uninstall:
+	@@SETX@; for d in X lib $(SUBDIRS); do                                \
+	  if test $$d != X; then                                              \
+	    (cd $$d && $(MAKE) $@) || exit 1;                                 \
+	  fi;                                                                 \
+	done
+
+install:
+	@@SETX@; for d in X lib $(SUBDIRS); do                                \
+	  if test $$d != X; then                                              \
+	    (cd $$d && $(MAKE) $@) || exit 1;                                 \
+	  fi;                                                                 \
+	done
+
+install-doc:
+	@@SETX@; for d in X lib $(SUBDIRS); do                                \
+	  if test $$d != X; then                                              \
+	    (cd $$d && $(MAKE) $@);                                           \
+	  fi;                                                                 \
+	done
+
+.PHONY: all lib progs test _test install uninstall clean           \
+	mostlyclean distclean maintainer-clean
+
+clean mostlyclean:
+	@@SETX@; for d in X lib $(SUBDIRS); do                                \
+	  if test $$d != X; then                                              \
+	    (cd $$d && $(MAKE) $@);                                           \
+	  fi;                                                                 \
+	done
+
+distclean:
+	@@SETX@; for d in X lib $(SUBDIRS); do                                \
+	  if test $$d != X; then                                              \
+	    (cd $$d && $(MAKE) $@);                                           \
+	  fi;                                                                 \
+	done
+	-$(RM) Makefile
+
+maintainer-clean:
+	@@SETX@; for d in X lib $(SUBDIRS); do                                \
+	  if test $$d != X; then                                              \
+	    (cd $$d && $(MAKE) $@);                                           \
+	  fi;                                                                 \
+	done
+

Added: packages/hdf5/branches/upstream/current/tools/gifconv/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/tools/gifconv/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/gifconv/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,312 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+decompress.lo: \
+   $(srcdir)/decompress.c \
+   $(srcdir)/gif.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+gif2hdf.lo: \
+   $(srcdir)/gif2hdf.c \
+   $(srcdir)/gif.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+gif2mem.lo: \
+   $(srcdir)/gif2mem.c \
+   $(srcdir)/gif.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+gifread.lo: \
+   $(srcdir)/gifread.c \
+   $(srcdir)/gif.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+hdf2gif.lo: \
+   $(srcdir)/hdf2gif.c \
+   $(srcdir)/gif.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+hdfgifwr.lo: \
+   $(srcdir)/hdfgifwr.c \
+   $(srcdir)/gif.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+readhdf.lo: \
+   $(srcdir)/readhdf.c \
+   $(srcdir)/gif.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+writehdf.lo: \
+   $(srcdir)/writehdf.c \
+   $(srcdir)/gif.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h

Added: packages/hdf5/branches/upstream/current/tools/gifconv/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/gifconv/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/gifconv/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,73 @@
+##
+## 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.
+##
+## HDF5 Library Makefile(.in)
+##
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Add include directory to the C preprocessor flags, add -lh5tools and
+## -lhdf5 to the list of libraries.
+##
+CPPFLAGS=-I. -I$(srcdir) -I$(top_builddir)/src -I$(top_srcdir)/src  \
+         -I$(top_srcdir)/tools/lib @CPPFLAGS@
+
+## Test programs and scripts.
+##
+TEST_PROGS=
+TEST_SCRIPTS=
+
+## These are our main targets: library and tools.
+##
+LIBTOOLS=../lib/libh5tools.la
+LIBHDF5=$(top_builddir)/src/libhdf5.la
+
+PUB_PROGS= gif2h5 h52gif
+PROGS=$(PUB_PROGS) $(TEST_PROGS)
+
+## Source and object files for the library; do not install
+##
+LIB_SRC=
+LIB_OBJ=$(LIB_SRC:.c=.lo)
+PUB_LIB=
+
+## Source and object files for programs...
+##
+PROG_SRC=decompress.c gif2hdf.c gif2mem.c gifread.c hdf2gif.c hdfgifwr.c readhdf.c writehdf.c
+PROG_OBJ=$(PROG_SRC:.c=.lo)
+
+PRIVATE_HDR=gif.h
+
+## Source and object files for the tests
+##
+TEST_SRC=
+TEST_OBJ=$(TEST_SRC:.c=.lo)
+
+## Programs have to be built before they can be tested!
+##
+check test _test: $(PROGS)
+
+## How to build the programs...They all depend on the hdf5 library and
+## the tools library compiled in this directory.
+##
+$(PROGS): $(LIBTOOLS) $(LIBHDF5)
+
+gif2h5: gif2hdf.lo gif2mem.lo decompress.lo gifread.lo writehdf.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ gif2hdf.lo gif2mem.lo decompress.lo gifread.lo writehdf.lo  $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+h52gif: hdf2gif.lo hdfgifwr.lo readhdf.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ hdf2gif.lo hdfgifwr.lo readhdf.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/tools/gifconv/decompress.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/gifconv/decompress.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/gifconv/decompress.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,320 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "gif.h"
+
+#define NEXTBYTE        (*ptr++)
+
+#define IMAGESEP        0x2c
+#define INTERLACEMASK   0x40
+#define COLORMAPMASK    0x80
+
+WORD iWIDE, iHIGH, eWIDE, eHIGH, expand, numcols, strip, nostrip;
+unsigned long  cols[256];
+char *cmd;
+
+FILE *fp;
+
+static WORD
+    XC = 0, YC = 0,         /* Output X and Y coords of current pixel       */
+    InitCodeSize,           /* Starting code size, used during Clear        */
+    CodeSize,               /* Code size, read from GIF header              */
+    BytesPerScanline,       /* Bytes per scanline in output raster          */
+    IWidth, IHeight;        /* image dimensions                             */
+static int
+    BitOffset = 0,          /* Bit Offset of next code                      */
+    Pass = 0,               /* Used by output routine if WORDerlaced pic    */
+    OutCount = 0,           /* Decompressor output 'stack count'            */
+    Code,                   /* Value returned by ReadCode                   */
+    MaxCode,                /* limiting value for current code size         */
+    ClearCode,              /* GIF clear code                               */
+    EOFCode,                /* GIF end-of-information code                  */
+    CurCode, OldCode, InCode,   /* Decompressor variables                   */
+    FirstFree,              /* First free code, generated per GIF spec      */
+    FreeCode,               /* Decompressor, next free slot in hash table   */
+    FinChar,                /* Decompressor variable                        */
+    DataMask,               /* AND mask for data size                       */
+    ReadMask;               /* Code AND mask for current code size          */
+
+/*MODIFICATIONS*/
+BYTE tempbyte[10];
+BYTE * tempBYTEptr[10];
+WORD tempint[10];
+WORD ImageCount = 0;
+/*END MODIFICATION*/
+
+boolean Interlace, HasColormap;
+
+BYTE *Image;                /* The result array                             */
+BYTE *RawGIF;               /* The heap array to hold it, raw               */
+BYTE *Raster;               /* The raster data stream, unblocked            */
+
+/* The hash table used by the decompressor */
+
+int Prefix[4096];
+int Suffix[4096];
+
+/* An output array used by the decompressor */
+
+int OutCode[1025];
+
+/* The color map, read from the GIF header */
+
+int  numused;
+
+/*
+ * Fetch the next code from the raster data stream.  The codes can be any
+ * length from 3 to 12 bits, packed WORDo 8-bit BYTEs, so we have to maWORDain
+ * our location in the Raster array as a BIT Offset.  We compute the BYTE
+ * Offset WORDo the raster array by dividing this by 8, pick up three BYTEs,
+ * compute the bit Offset WORDo our 24-bit chunk, shift to bring the desired
+ * code to the bottom, then mask it off and return it.
+ */
+static int
+ReadCode(void)
+{
+    int RawCode, ByteOffset;
+
+    ByteOffset = BitOffset / 8;
+    RawCode = Raster[ByteOffset] + (0x100 * Raster[ByteOffset + 1]);
+
+    if (CodeSize >= 8)
+        RawCode += (0x10000 * Raster[ByteOffset + 2]);
+
+    RawCode >>= (BitOffset % 8);
+    BitOffset += CodeSize;
+    return (RawCode & ReadMask);
+}
+
+static void
+AddToPixel(BYTE Index)
+{
+    if (YC<IHeight)
+    *(Image + YC * BytesPerScanline + XC) = Index;
+
+
+
+    /* Update the X-coordinate, and if it overflows, update the
+     * Y-coordinate */
+    if (++XC == IWidth) {
+        /*
+         * If a non-WORDerlaced picture, just increment YC to the next scan
+         * line.  If it's WORDerlaced, deal with the WORDerlace as described
+         * in the GIF spec.  Put the decoded scan line out to the screen if we
+         * haven't gone past the bottom of it.
+         */
+        XC = 0;
+
+        if (!Interlace) {
+            YC++;
+        } else {
+            switch (Pass) {
+            case 0:
+                YC += 8;
+
+                if (YC >= IHeight) {
+                    Pass++;
+                    YC = 4;
+                }
+
+                break;
+            case 1:
+                YC += 8;
+
+                if (YC >= IHeight) {
+                    Pass++;
+                    YC = 2;
+                }
+
+                break;
+            case 2:
+                YC += 4;
+
+                if (YC >= IHeight) {
+                    Pass++;
+                    YC = 1;
+                }
+
+                break;
+            case 3:
+                YC += 2;
+                break;
+            default:
+                break;
+            }
+        }
+    }
+}
+
+/* Main routine.  Convert a GIF image to an HDF image */
+
+BYTE *
+Decompress(GIFIMAGEDESC *GifImageDesc, GIFHEAD *GifHead)
+{
+    int i;
+
+    XC = 0;
+    YC = 0;
+    Pass = 0;
+    OutCount = 0;
+    BitOffset = 0;
+
+    DataMask = (1 << ((GifHead->PackedField & 0x07) +1)) -1;
+    Raster = GifImageDesc->GIFImage;
+
+    /* Check for image seperator */
+
+    /* Now read in values from the image descriptor */
+    IWidth = GifImageDesc->ImageWidth;
+    IHeight = GifImageDesc->ImageHeight;
+    Interlace = GifImageDesc->PackedField & 0x40;
+
+    /*
+     * Note that I ignore the possible existence of a local color map.  I'm
+     * told there aren't many files around that use them, and the spec says
+     * it's defined for future use.  This could lead to an error reading some
+     * files.
+     */
+
+    /*
+     * Start reading the raster data. First we get the WORDial code size and
+     * compute decompressor constant values, based on this code size.
+     */
+
+    CodeSize = GifImageDesc->CodeSize;
+    ClearCode = (1 << CodeSize);
+    EOFCode = ClearCode + 1;
+    FreeCode = FirstFree = ClearCode + 2;
+
+    /*
+     * The GIF spec has it that the code size is the code size used to compute
+     * the above values is the code size given in the file, but the code size
+     * used in compression/decompression is the code size given in the file
+     * plus one. (thus the ++).
+     */
+
+    CodeSize++;
+    InitCodeSize = CodeSize;
+    MaxCode = (1 << CodeSize);
+    ReadMask = MaxCode - 1;
+
+    /*
+     * Read the raster data.  Here we just transpose it from the GIF array to
+     * the Raster array, turning it from a series of blocks WORDo one long
+     * data stream, which makes life much easier for ReadCode().
+     */
+
+    /* Allocate the Image */
+
+    if (!(Image = (BYTE *)malloc((size_t)IWidth*(size_t)IHeight))) {
+        printf("Out of memory");
+        exit(-1);
+    }
+
+    BytesPerScanline = IWidth;
+
+    /*
+     * Decompress the file, continuing until you see the GIF EOF code.  One
+     * obvious enhancement is to add checking for corrupt files here.
+     */
+
+    Code = ReadCode();
+
+    while (Code != EOFCode) {
+        /*
+         * Clear code sets everything back to its initial value, then reads
+         * the immediately subsequent code as uncompressed data.
+         */
+        if (Code == ClearCode) {
+            CodeSize = InitCodeSize;
+            MaxCode = (1 << CodeSize);
+            ReadMask = MaxCode - 1;
+            FreeCode = FirstFree;
+            CurCode = OldCode = Code = ReadCode();
+            FinChar = CurCode & DataMask;
+            AddToPixel((BYTE)FinChar);
+        } else {
+            /*
+             * If not a clear code, then must be data: save same as CurCode
+             * and InCode
+             */
+            CurCode = InCode = Code;
+
+            /*
+             * If greater or equal to FreeCode, not in the hash table yet;
+             * repeat the last character decoded
+             */
+            if (CurCode >= FreeCode) {
+                CurCode = OldCode;
+                OutCode[OutCount++] = FinChar;
+            }
+
+            /*
+             * Unless this code is raw data, pursue the chain poWORDed to by
+             * CurCode through the hash table to its end; each code in the
+             * chain puts its associated output code on the output queue.
+             */
+            while (CurCode > DataMask) {
+                if (OutCount > 1024) {
+                    /*return error message*/
+                }
+
+                OutCode[OutCount++] = Suffix[CurCode];
+                CurCode = Prefix[CurCode];
+            }
+
+            /* The last code in the chain is treated as raw data. */
+            FinChar = CurCode & DataMask;
+            OutCode[OutCount++] = FinChar;
+
+            /*
+             * Now we put the data out to the Output routine. It's been
+             * stacked LIFO, so deal with it that way...
+             */
+            for (i = OutCount - 1; i >= 0; i--)
+                AddToPixel((BYTE)OutCode[i]);
+
+            OutCount = 0;
+
+            /*
+             * Build the hash table on-the-fly. No table is stored in the
+             * file.
+             */
+            Prefix[FreeCode] = OldCode;
+            Suffix[FreeCode] = FinChar;
+            OldCode = InCode;
+
+            /*
+             * PoWORD to the next slot in the table.  If we exceed the current
+             * MaxCode value, increment the code size unless it's already 12.
+             * If it is, do nothing: the next code decompressed better be
+             * CLEAR
+             */
+            FreeCode++;
+
+            if (FreeCode >= MaxCode)
+                if (CodeSize < 12) {
+                    CodeSize++;
+                    MaxCode *= 2;
+                    ReadMask = (1 << CodeSize) - 1;
+                }
+        }
+
+        Code = ReadCode();
+    }
+
+    return Image;
+}

Added: packages/hdf5/branches/upstream/current/tools/gifconv/gif.h
===================================================================
--- packages/hdf5/branches/upstream/current/tools/gifconv/gif.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/gifconv/gif.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,184 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *  Title:       GIF.H
+ *  Purpose:     GIF Header file
+ */
+#ifndef GIF_H_
+#define GIF_H_   1
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "hdf5.h"
+
+#define MAX_PAL 768
+
+/* set the name length restriction to 64 charachters */
+#define VSNAMELENMAX 64 /* this is a carryover from HDF4 */
+
+/* typedef H5T_NATIVE_UINT8  BYTE; */
+typedef unsigned char BYTE;
+
+/* typedef H5T_NATIVE_UINT16  WORD; */
+typedef unsigned long WORD;
+
+typedef char CHAR;
+typedef unsigned char boolean;
+
+#define false       0
+#define true        1
+
+/* Set the EndianOrder.
+** The GIF Reader file should do this.
+** Set EndianOrder = 0 if machine is little endian
+**     EndianOrder = 1 if machine is big endian.
+*/
+extern int  EndianOrder;
+
+/*
+**  The GIF header format.
+**
+**  This structure actually contains the header, logical screen
+**  descriptor, and the global color table for the GIF image.
+*/
+typedef struct _GifHeader { /* Offset   Description                         */
+    BYTE PackedField;       /*  0Ah     Color Information                   */
+    WORD TableSize;
+    BYTE ImageCount;        /* Keep a count of the number of images         */
+    BYTE CommentCount;
+    BYTE ApplicationCount;
+    BYTE PlainTextCount;
+    BYTE HDFPalette[256][3];
+    BYTE HeaderDump[6];     /* BYTE array to dump header contents           */
+    BYTE LSDDump[7];        /* Logical Screen Descriptor dump               */
+} GIFHEAD;
+
+
+/*
+**  The GIF Image Descriptor.
+*/
+typedef struct _GifImageDescriptor {
+    WORD ImageWidth;            /* Width of the image in pixels             */
+    WORD ImageHeight;           /* Height of the image in pixels            */
+    BYTE PackedField;           /* Image and Color Table Data Information   */
+    WORD TableSize;
+    WORD CodeSize;              /* Minimum LZW CodeSize for image data      */
+    BYTE HDFPalette[256][3];
+    BYTE GIDDump[9];            /* GifImageDescriptor dump                  */
+
+    BYTE *Image;                /* Decompressed Raster Image                */
+    BYTE *GIFImage;
+} GIFIMAGEDESC;
+
+/*
+**  GIF 89a Graphic Control Extension Block
+*/
+typedef struct _GifGraphicControlExtension {
+    BYTE GCEDump[5];            /* Graphic Control Extension Dump           */
+} GIFGRAPHICCONTROL;
+
+/*
+**  GIF 89a Plain Text Extension Block
+*/
+typedef struct _GifPlainTextExtension {
+    BYTE PTEDump[15];           /* Plain Text Extension Dump                */
+    BYTE *PlainTextData;        /* Plain Text data sub-blocks               */
+    WORD DataSize;
+} GIFPLAINTEXT;
+
+
+/*
+**  GIF 89a Application Extension Block
+*/
+typedef struct _GifApplicationExtension {
+    BYTE AEDump[14];            /* Application Extension Dump               */
+    BYTE *ApplicationData;      /* Application data sub-blocks              */
+    WORD DataSize;
+} GIFAPPLICATION;
+
+/*
+**  GIF 89a Comment Extension Block
+*/
+typedef struct _GifCommentExtension {
+    BYTE CEDump[2];             /* Comment Extension Dump                   */
+    BYTE *CommentData;          /* Comment data sub-blocks                  */
+    WORD DataSize;
+    BYTE Terminator;            /* Block Terminator (always 0)              */
+} GIFCOMMENT;
+
+/*
+** GIF to HDF Memory Struct
+** Purpose : The gif to hdf structure is used to pass all the
+**           gif data to the memory, which gets caught by the hdf driver
+**           Its the drivers job to put the data in the appropriate places
+**           in the HDF file.
+**           I have assumed that the ImageDescriptors and GraphicControls follow
+**           one another, ie. I have not associated them with each other. The driver
+**           must assume a 1-1 correspondance. The same discussion with plain text
+**           extension.
+*/
+typedef struct _GifToMem {
+	GIFHEAD            *GifHeader;
+	GIFIMAGEDESC      **GifImageDesc;
+	GIFGRAPHICCONTROL **GifGraphicControlExtension;
+	GIFPLAINTEXT      **GifPlainTextExtension;
+	GIFAPPLICATION    **GifApplicationExtension;
+	GIFCOMMENT        **GifCommentExtension;
+} GIFTOMEM;
+
+/*
+**  Function Prototypes
+*/
+
+/* GIF2MEM.C */
+GIFTOMEM Gif2Mem(BYTE *);
+
+/* GIFREAD.C */
+int ReadGifHeader(GIFHEAD *, BYTE **);
+int ReadGifImageDesc(GIFIMAGEDESC *, BYTE **);
+int ReadGifGraphicControl(GIFGRAPHICCONTROL *, BYTE **);
+int ReadGifPlainText(GIFPLAINTEXT *, BYTE **);
+int ReadGifApplication(GIFAPPLICATION *, BYTE **);
+int ReadGifComment(GIFCOMMENT *, BYTE **);
+
+/* HDFGIFWR.C */
+int hdfWriteGIF(FILE *fp, BYTE *pic, int ptype, int w, int h, BYTE *rmap,
+                BYTE *gmap, BYTE *bmap, BYTE *pc2ncmap, int numcols,
+                int colorstyle, int BitsPerPixel);
+
+/* WRITEHDF.C */
+int WriteHDF(GIFTOMEM , CHAR * , CHAR *);
+
+/* Function:    ReadHDF
+** Return:      0 on completion without error, -1 on error
+** Input:       CHAR *h5_file - HDF file name
+**              CHAR *dset_name - Name of the HDF Image dataset
+**              CHAR *pal_name - Name of the HDF palette
+** Output:      BYTE* data - the HDF Image to be converted
+**              BYTE  palette[256][3] - the corresponding palette
+**              hsize_t* image_size - the size of each dimension of the image
+*/
+int ReadHDF(BYTE** data, BYTE palette[256][3], hsize_t *image_size,
+            CHAR *h5_file, CHAR *dset_name, CHAR *pal_name);
+
+BYTE *Decompress(GIFIMAGEDESC *, GIFHEAD *);
+BYTE GetByte(BYTE *);
+WORD GetWord(BYTE *);
+
+void cleanup(BYTE*);
+
+#endif  /* GIF_H_ */

Added: packages/hdf5/branches/upstream/current/tools/gifconv/gif2hdf.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/gifconv/gif2hdf.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/gifconv/gif2hdf.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,125 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "gif.h"
+
+int
+main(int argv , char *argc[])
+{
+    GIFTOMEM GifMemoryStruct;
+    GIFIMAGEDESC gifImageDesc;
+
+    FILE *fpGif;
+
+    /* replacing int32 with long */
+    long i, ImageCount;
+    long filesize;
+
+    BYTE *MemGif;
+    BYTE *StartPos;
+
+    /* VSNAMELENMAX is a carryover from HDF4 and is #defined to 256 in gif.h */
+    char GIFFileName[VSNAMELENMAX];
+    char HDFFileName[VSNAMELENMAX];
+
+    /*
+     * Initialize all GifMemoryStruct pointers to null to prevent hassles
+     * later on
+     */
+    GifMemoryStruct.GifHeader                  = NULL;
+    GifMemoryStruct.GifImageDesc               = NULL;
+    GifMemoryStruct.GifGraphicControlExtension = NULL;
+    GifMemoryStruct.GifPlainTextExtension      = NULL;
+    GifMemoryStruct.GifApplicationExtension    = NULL;
+    GifMemoryStruct.GifCommentExtension        = NULL;
+
+    if (argv < 3) {
+        printf("\n\nWrong Usage. Use:\ngif2h5 <GIFFILE> <HDFFILE>\n\n");
+        return(-1);
+    }
+
+    strncpy(GIFFileName , argc[1] , VSNAMELENMAX - 1);
+    strncpy(HDFFileName , argc[2] , VSNAMELENMAX - 1);
+    GIFFileName[VSNAMELENMAX - 1] = '\0';
+    HDFFileName[VSNAMELENMAX - 1] = '\0';
+
+    if (!(fpGif = fopen(GIFFileName,"rb"))) {
+        printf("Unable to open GIF file for reading.\n");
+        printf("Filename (including path) must be less than %d charachters in length\n",
+               VSNAMELENMAX);
+        exit(-1);
+    }
+
+    /* Get the whole file into memory. Mem's much faster than I/O */
+    fseek(fpGif, 0L , 2);
+    filesize = ftell(fpGif);
+    fseek(fpGif, 0L , 0);
+
+    if (filesize == 0)
+        printf("File Size Zero");
+
+    if (!(MemGif = StartPos = (BYTE *)malloc((size_t)filesize))) {
+        printf("Out of memory");
+        exit (-1);
+    }
+
+    if (fread(MemGif,(size_t)filesize,1,fpGif) != 1) {
+        printf("Corrupted Input File");
+        exit(-1);
+    }
+
+    fseek(fpGif,0L,0);
+
+    /*
+     * Call Gif2Mem and break the whole file into parts.  Gif2Mem also calls
+     * decompresses the images so we don't have to worry about that
+     */
+    GifMemoryStruct = Gif2Mem(MemGif);
+
+    if (ferror(fpGif)) {
+            printf("File Stream Error\n\n");
+            exit(-1);
+    }
+
+    fclose(fpGif);
+
+    /*
+     * Call WriteHDF from here. Go ahead and change WriteHDF to write whatever
+     * format you want
+     */
+    if (WriteHDF(GifMemoryStruct , argc[2] , argc[1]))
+        printf("HDF Write Error\n\n");
+
+    /* Free all buffers */
+    /* replacing int32 with long */
+    ImageCount = (long)((GifMemoryStruct.GifHeader)->ImageCount);
+
+    for(i = 0; i < ImageCount ; i++) {
+        gifImageDesc = *(GifMemoryStruct.GifImageDesc[i]);
+
+        if (gifImageDesc.Image != NULL)
+            free(gifImageDesc.Image);
+
+        if (GifMemoryStruct.GifGraphicControlExtension[i] != NULL)
+            free(GifMemoryStruct.GifGraphicControlExtension[i]);
+    }
+
+    free(StartPos);
+    free(GifMemoryStruct.GifHeader);
+    free(GifMemoryStruct.GifApplicationExtension);
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/tools/gifconv/gif2mem.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/gifconv/gif2mem.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/gifconv/gif2mem.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,344 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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 file contains snippets of code from James Murray's original file to
+ * display the GIF header information, but most of it has been modified to
+ * suit gif2hdf
+ */
+
+/****************************************************************************\
+**  Title:       GIFHEAD.C                                                  **
+**  Purpose:     Display the data in a GIF image file.                      **
+**  Version:     1.0                                                        **
+**  Date:        March 1992                                                 **
+**  Author:      James D. Murray, Anaheim, CA, USA                          **
+**  C Compilers: Borland C++ v2.0, Microsoft C v6.00a                       **
+**                                                                          **
+**  GIFHEAD displays all real information contained within a GIF image      **
+**  file, including all color tables and extension block information.       **
+**  GIFHEAD reads both GIF 87a abd 89a-format files.                        **
+**                                                                          **
+**  Copyright (C) 1991-92 by Graphics Software Labs.  All rights reserved.  **
+\****************************************************************************/
+#include <stdio.h>
+
+#include "gif.h"
+
+#define VERSION                     "1.00"
+
+GIFTOMEM
+Gif2Mem(BYTE *MemGif)
+{
+    /*
+     * The gif structure outline for passing data to memory is given in gif.h.
+     * These pointers are redunant, should take them out in ver. 2
+     */
+    GIFHEAD            *gifHead;           /* GIF Header structure            */
+    GIFIMAGEDESC      **gifImageDesc;      /* Logical Image Descriptor struct */
+    GIFPLAINTEXT      **gifPlainText;      /* Plain Text Extension structure  */
+    GIFAPPLICATION    **gifApplication;    /* Application Extension structure */
+    GIFCOMMENT        **gifComment;        /* Comment Extension structure     */
+    GIFGRAPHICCONTROL **gifGraphicControl; /* Graphic Control Extension strct */
+
+    GIFTOMEM GifMemoryStruct;
+
+    register WORD i;        /* Loop counter                                 */
+    BYTE Identifier;        /* Extension block identifier holder            */
+    BYTE Label;             /* Extension block label holder                 */
+    BYTE ImageCount;        /* Count of the number of images in the file    */
+    BYTE ImageArray;        /* Keep the size of the array to store Images   */
+    BYTE CommentCount;
+    BYTE CommentArray;
+    BYTE ApplicationCount;
+    BYTE ApplicationArray;
+    BYTE PlainTextCount;
+    BYTE PlainTextArray;
+    BYTE GCEflag;
+    BYTE aTemp;
+    BYTE j;
+    BYTE w;                 /* Two more variables needed only while testing */
+    BYTE *b;                /* Endian Ordering                              */
+
+    /* Allocate memory for the GIF structures           */
+    /* Plug the structs into GifMemoryStruct at the end */
+    /****************************************************/
+    if (!(gifHead = (GIFHEAD *)malloc(sizeof(GIFHEAD)))) {
+        printf("Could not allocate memory for gifHead\n");
+        exit(-1);
+    }
+
+    /*
+     * The next three have to grow dynamically so we leave them for now and
+     * let realloc handle it later on.
+     */
+    gifImageDesc      = NULL;
+    gifPlainText      = NULL;
+    gifGraphicControl = NULL;
+    gifComment        = NULL;
+    gifApplication    = NULL;
+
+    /******************************/
+    /* Memory allocation complete */
+    /******************************/
+
+    /* Carry out Endian Testing and set Endian Order */
+    w = 0x0001;
+    b = (BYTE *) &w;
+    EndianOrder = (b[0] ? 1 : 0);
+
+    /* Read the GIF image file header information */
+    ReadGifHeader(gifHead, &MemGif);
+
+    /* Check for FILE stream error */
+#if 0
+    if (ferror(fpGif))
+    {
+        fputs("GIFHEAD: Error reading header information!\n", stderr);
+        exit(-3);
+    }
+#endif  /* 0 */
+
+    /*
+     * Identify, read, and display block information.
+     */
+    ImageCount       = ImageArray       = 0;
+    CommentCount     = CommentArray     = 0;
+    ApplicationCount = ApplicationArray = 0;
+    PlainTextCount   = PlainTextArray   = 0;
+    GCEflag          = 0;
+
+    for (;;) {
+        Identifier = *MemGif++;
+
+        switch (Identifier) {
+            case 0x3B:  /* Trailer */
+                /*
+                 * The counts are stored to make it easier while putting stuff
+                 * into the HDF file and then deallocating space.
+                 */
+                gifHead->ImageCount       = ImageCount;
+                gifHead->CommentCount     = CommentCount;
+                gifHead->ApplicationCount = ApplicationCount;
+                gifHead->PlainTextCount   = PlainTextCount;
+
+                /* putting stuff into the gif2mem structure */
+                GifMemoryStruct.GifHeader = gifHead;
+                GifMemoryStruct.GifImageDesc = gifImageDesc;
+                GifMemoryStruct.GifPlainTextExtension = gifPlainText;
+                GifMemoryStruct.GifApplicationExtension = gifApplication;
+                GifMemoryStruct.GifCommentExtension = gifComment;
+                GifMemoryStruct.GifGraphicControlExtension = gifGraphicControl;
+
+                /* return the struct */
+                return GifMemoryStruct;
+
+            case 0x2C:  /* Image Descriptor */
+                /*
+                 * If there was no image descriptor before this increase image
+                 * count. If an imagedescriptor was present, reset GCEflag
+                 */
+                if (GCEflag == 0)
+                    ImageCount++;
+                else
+                    GCEflag = 0;
+
+                if (ImageCount > ImageArray) {
+                    aTemp = ImageArray;
+                    ImageArray = (ImageArray << 1) + 1;
+                    if (!(gifImageDesc = (GIFIMAGEDESC **)realloc(gifImageDesc,
+                                            sizeof(GIFIMAGEDESC *) * ImageArray))) {
+                        printf("Out of memory!");
+                        exit(-1);
+                    }
+
+                    if (!(gifGraphicControl = (GIFGRAPHICCONTROL **)realloc(
+                                        gifGraphicControl,
+                                        sizeof(GIFGRAPHICCONTROL *) * ImageArray))) {
+                        printf("Out of memory!");
+                        exit(-1);
+                    }
+
+                    for (j = aTemp ; j < ImageArray ; j++) {
+                        gifGraphicControl[j] = NULL;
+                        gifImageDesc[j] = NULL;
+                    }
+                }
+
+                if(!(gifImageDesc[ImageCount-1] = (GIFIMAGEDESC*)malloc(sizeof(GIFIMAGEDESC)))) {
+                    printf("Out of memory!");
+                    exit(-1);
+                }
+
+
+                if (ReadGifImageDesc(gifImageDesc[ImageCount-1], &MemGif) == -1)
+                    fputs("Error reading Image Descriptor information\n", stderr);
+
+                /* Decompress the Image */
+                gifImageDesc[ImageCount-1]->Image = Decompress(gifImageDesc[ImageCount-1],
+                                                               gifHead);
+                free(gifImageDesc[ImageCount-1]->GIFImage);
+
+                /*
+                 * Convert the local palette into an HDF compatible palette In
+                 * case the local color table is present, it is written out as
+                 * the HDFPalette If it is absent the global table is written
+                 * as the HDFPalette.
+                 */
+                if (!((gifImageDesc[ImageCount-1]->PackedField) & 0x80)) {
+                    /* Check to see if the global color table exists.... */
+                    if (gifHead->PackedField & 0x80) {
+                        for (i=0 ; i<gifHead->TableSize ; i++) {
+                            gifImageDesc[ImageCount-1]->HDFPalette[i][0] =
+                                                    gifHead->HDFPalette[i][0];
+                            gifImageDesc[ImageCount-1]->HDFPalette[i][1] =
+                                                    gifHead->HDFPalette[i][1];
+                            gifImageDesc[ImageCount-1]->HDFPalette[i][2] =
+                                                    gifHead->HDFPalette[i][2];
+                        }
+                    }
+
+                    gifImageDesc[ImageCount-1]->TableSize = gifHead->TableSize;
+                }
+
+                break;
+
+            case 0x21:  /* Extension Block */
+                    Label = *MemGif++;
+
+                    switch (Label) {
+                    case 0x01:  /* Plain Text Extension */
+                        puts("Plain Text Extension\n");
+                        PlainTextCount++;
+
+                        if (PlainTextCount > PlainTextArray)
+                                PlainTextArray = (PlainTextArray << 1) + 1;
+
+                        if (!(gifPlainText = (GIFPLAINTEXT **)realloc(gifPlainText , sizeof(GIFPLAINTEXT *) * PlainTextArray))) {
+                            printf("Out of memory!");
+                            exit(-1);
+                        }
+
+                        if(!(gifPlainText[PlainTextCount - 1] = (GIFPLAINTEXT*)malloc(sizeof(GIFPLAINTEXT)))) {
+                            printf("Out of memory!");
+                            exit(-1);
+                        }
+
+                        if (ReadGifPlainText(gifPlainText[PlainTextCount - 1], &MemGif))
+                            fprintf(stderr,
+                                    "Error reading Plain Text Extension information.\n");
+
+                        break;
+
+                    case 0xFE:  /* Comment Extension */
+                        CommentCount++;
+
+                        if (CommentCount > CommentArray)
+                            CommentArray = (CommentArray << 1) + 1;
+
+                        if (!(gifComment = (GIFCOMMENT **)realloc(gifComment , sizeof(GIFCOMMENT *) * CommentArray))) {
+                            printf("Out of memory!");
+                            exit(-1);
+                        }
+
+                        if(!(gifComment[CommentCount - 1] = (GIFCOMMENT *)malloc(sizeof(GIFCOMMENT)))) {
+                            printf("Out of memory!");
+                            exit(-1);
+                        }
+
+
+                        if (ReadGifComment(gifComment[CommentCount - 1], &MemGif))
+                            fprintf(stderr,
+                                    "Error reading Comment Extension information\n");
+
+                        break;
+
+                    case 0xF9:  /* Graphic Control Extension */
+                        if (GCEflag == 0 )
+                            ImageCount++;
+
+                        GCEflag = 1;
+
+                        if (ImageCount > ImageArray) {
+                            aTemp = ImageArray;
+                            ImageArray = (ImageArray << 1) + 1;
+
+                            if (!(gifGraphicControl = (GIFGRAPHICCONTROL **)realloc(gifGraphicControl , sizeof(GIFGRAPHICCONTROL *) * ImageArray))) {
+                                printf("Out of memory!");
+                                exit(-1);
+                            }
+
+                            if (!(gifImageDesc = (GIFIMAGEDESC **)realloc(gifImageDesc , sizeof(GIFIMAGEDESC *) * ImageArray))) {
+                                printf("Out of memory!");
+                                exit(-1);
+                            }
+
+                            for (j = aTemp ; j < ImageArray ; j++) {
+                                gifGraphicControl[j] = NULL;
+                                gifImageDesc[j]      = NULL;
+                            }
+                        }
+
+                        if(!(gifGraphicControl[ImageCount-1] = (GIFGRAPHICCONTROL*)malloc(sizeof(GIFGRAPHICCONTROL)))) {
+                            printf("Out of memory!");
+                            exit(-1);
+                        }
+
+
+                        if (ReadGifGraphicControl(gifGraphicControl[ImageCount-1], &MemGif))
+                            fprintf(stderr,
+                                    "Error reading Graphic Control Extension information\n");
+
+                        if (!*MemGif++ == 0)
+                            fprintf(stderr,
+                                    "Error reading Graphic Control Extension\n");
+
+                        break;
+
+                    case 0xFF:  /* Application Extension */
+                        ApplicationCount++;
+
+                        if (ApplicationCount > ApplicationArray)
+                            ApplicationArray = (ApplicationArray << 1) + 1;
+
+                        if (!(gifApplication = (GIFAPPLICATION **)realloc(gifApplication , sizeof(GIFAPPLICATION *) * ApplicationArray))) {
+                            printf("Out of memory!");
+                            exit(-1);
+                        }
+
+                        if(!(gifApplication[ApplicationCount - 1] = (GIFAPPLICATION *)malloc(sizeof(GIFAPPLICATION)))) {
+                            printf("Out of memory!");
+                            exit(-1);
+                        }
+
+
+                        if (ReadGifApplication(gifApplication[ApplicationCount - 1], &MemGif))
+                            fprintf(stderr,
+                                    "Error reading Application Extension information\n");
+
+                        break;
+
+                    default:
+                        printf("Unknown Extension Label: 0x%02x\n", Label);
+                        break;
+                    }
+
+                    break;
+
+            default:
+                fprintf(stderr,
+                        "Unknown Block Separator Character: 0x%02x\n", Identifier);
+        }
+    }
+}

Added: packages/hdf5/branches/upstream/current/tools/gifconv/gifread.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/gifconv/gifread.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/gifconv/gifread.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,402 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "gif.h"
+
+int EndianOrder;
+
+static BYTE *ReadDataSubBlocks(BYTE **MemGif2, WORD *DSize);
+
+WORD
+GetWord(BYTE *MemGif)
+{
+    WORD w;
+
+    if (EndianOrder == 1) {
+        /* LittleEndian */
+        w  = (WORD) (*MemGif++ & 0xFF);
+        w |= (WORD) ((*MemGif++ & 0xFF) << 0x08);
+    } else {
+        w = (WORD) (*MemGif++ & 0xFF);
+        w = ((WORD) (*MemGif++ & 0xFF)) | (w << 0x08);
+    }
+
+    return w;
+}
+
+BYTE
+GetByte(BYTE *MemGif)
+{
+    return *MemGif;
+}
+
+/*
+ *  Read a GIF image BYTE Header.
+ *
+ *  This function reads the Header, Logical Screen Descriptor, and
+ *  Global Color Table (if any) from a GIF image file.  The information
+ *  is stored in a GIFHEAD structure.
+ *
+ *  Returns: -1 if a FILE stream error occured during the read,
+ *           otherwise 0 if no error occured.
+ */
+int
+ReadGifHeader(GIFHEAD *GifHead, /* Pointer to GIF header structure  */
+              BYTE **MemGif2)   /* GIF image file input FILE stream */
+{
+    WORD i;             /* Loop counter                                */
+    WORD tableSize;     /* Number of entires in the Global Color Table */
+
+    GifHead->TableSize = 0;
+    for (i = 0 ; i < 6 ; i++) {
+        GifHead->HeaderDump[i] = *(*MemGif2)++;
+    }
+
+    if (strncmp((const char *)GifHead->HeaderDump , "GIF" , 3)) {
+        printf("The file does not appear to be a valid GIF file.\n");
+        exit(-1);
+    }
+
+    for (i = 0 ; i < 7 ; i++) {
+        GifHead->LSDDump[i] = *(*MemGif2)++;
+    }
+
+    GifHead->PackedField = GifHead->LSDDump[4];
+
+    /* Check if a Global Color Table is present */
+    if (GifHead->PackedField & 0x80) {
+        /* Read number of color table entries */
+        tableSize = (WORD) (1L << ((GifHead->PackedField & 0x07) + 1));
+        GifHead->TableSize = tableSize;
+
+        /* Read the Global Color Table */
+
+        /*
+         * There are some changes made here apart from just reading in the
+         * global color table as would seem intuitively obvious.  The colors
+         * are stored in the bottom part of the palette as opposed to the top
+         */
+
+        for (i = 0; i < tableSize; i++) {
+            GifHead->HDFPalette[i][0] = *(*MemGif2)++;
+            GifHead->HDFPalette[i][1] = *(*MemGif2)++;
+            GifHead->HDFPalette[i][2] = *(*MemGif2)++;
+        }
+    }
+
+    /* Check for a FILE stream error */
+#if 0
+    if (ferror(FpGif))
+        return -1;
+#endif  /* 0 */
+
+    return 0;   /* No FILE stream error occured */
+}
+
+
+/*
+**  Read a GIF Local Image Descriptor.
+**
+**  This function reads the Local Image Descriptor, and Local Color
+**  Table (if any) from a GIF image file.  The information is stored
+**  in a GIFIMAGEDESC structure.
+**
+**  Note that the ImageSeparator field value in the GIFIMAGEDESC
+**  structure is assigned by the function calling ReadGifImageDesc().
+**
+**  Returns: -1 if a FILE stream error occured during the read,
+**           otherwise 0 if no error occured.
+*/
+int
+ReadGifImageDesc(
+    GIFIMAGEDESC *GifImageDesc, /* Pointer to GIF image descriptor structure  */
+    BYTE **MemGif2              /* GIF image file input FILE stream           */
+    )
+{
+    WORD i;        /* Loop counter                               */
+    WORD tableSize;         /* Number of entries in the Local Color Table */
+	/* BYTE Interlace; */         /* PackedField & 0x20 gives information on interlacing */
+	BYTE *TempPtr;
+	int	 ch , ch1;
+
+	GifImageDesc->TableSize = 0;
+	for (i = 0 ; i < 9 ; i++) {
+		GifImageDesc->GIDDump[i] = *(*MemGif2)++;
+	}
+
+	/*
+	** Get the relevant fields. I need ImageWidth and Height actively hence I have
+	** taken information from those fields. I intend to keep the GifImageDesc data
+	** structure as it is so that anyone needing the rest of the fields can do so
+	** quickly.
+	*/
+
+	if (EndianOrder == 1) /* LittleEndian */
+	{
+		GifImageDesc->ImageWidth  = (WORD) (GifImageDesc->GIDDump[4] & 0xFF);
+		GifImageDesc->ImageWidth |= (WORD) ((GifImageDesc->GIDDump[5] & 0xFF) << 0x08);
+
+		GifImageDesc->ImageHeight  = (WORD) (GifImageDesc->GIDDump[6] & 0xFF);
+		GifImageDesc->ImageHeight |= (WORD) ((GifImageDesc->GIDDump[7] & 0xFF) << 0x08);
+
+	}
+	else
+	{
+		GifImageDesc->ImageWidth = (WORD) (GifImageDesc->GIDDump[4] & 0xFF);
+		GifImageDesc->ImageWidth = ((WORD) (GifImageDesc->GIDDump[5] & 0xFF)) | (GifImageDesc->ImageWidth << 0x08);
+
+		GifImageDesc->ImageHeight = (WORD) (GifImageDesc->GIDDump[6] & 0xFF);
+		GifImageDesc->ImageHeight = ((WORD) (GifImageDesc->GIDDump[7] & 0xFF)) | (GifImageDesc->ImageWidth << 0x08);
+
+
+	}
+
+	GifImageDesc->PackedField = GifImageDesc->GIDDump[8];
+
+	/* Interlace = GifImageDesc->PackedField & 0x20; */
+
+    /* Check if a Local Color Table is present */
+    if (GifImageDesc->PackedField & 0x80)
+    {
+        /* Read number of color table entries */
+        tableSize = (WORD) (1L << ((GifImageDesc->PackedField & 0x07) + 1));
+		GifImageDesc->TableSize = tableSize;
+        /* Read the Local Color Table */
+        for (i = 0; i < tableSize; i++)
+        {
+            GifImageDesc->HDFPalette[i][0] = *(*MemGif2)++;
+            GifImageDesc->HDFPalette[i][1] = *(*MemGif2)++;
+            GifImageDesc->HDFPalette[i][2] = *(*MemGif2)++;
+        }
+    }
+
+	/*
+	** Get LZW minimum Code Size
+	*/
+	GifImageDesc->CodeSize = (WORD)*(*MemGif2)++;
+
+	/*GifImageDesc->GIFImage = ReadDataSubBlocks(FpGif);*/
+	if (!(GifImageDesc->GIFImage = (BYTE *)malloc((GifImageDesc->ImageWidth) * (GifImageDesc->ImageHeight)))) {
+		printf("Out of memory");
+		exit(-1);
+	}
+
+
+	TempPtr = GifImageDesc->GIFImage;
+	do
+	{
+		ch = ch1 = (int)*(*MemGif2)++;
+		while (ch--) *TempPtr++ = *(*MemGif2)++;
+	}
+	while (ch1);
+
+
+    return(0);          /* No FILE stream error occured */
+}
+
+
+/*
+**  Read a GIF Graphic Control Extension block.
+**
+**  Note that the Introducer and Label field values in the GIFGRAPHICCONTROL
+**  structure are assigned by the function calling ReadGifGraphicControl().
+**
+**  Returns: -1 if a FILE stream error occured during the read,
+**           otherwise 0 if no error occured.
+*/
+int
+ReadGifGraphicControl(
+    GIFGRAPHICCONTROL *GifGraphicControl, /* Pointer to GC Extension structure */
+    BYTE              **MemGif2           /* GIF image file input FILE stream  */
+    )
+{
+    int i;
+
+    for (i = 0 ; i < 5 ; i++) {
+            GifGraphicControl->GCEDump[i] = *(*MemGif2)++;
+    }
+
+    return(0);          /* No FILE stream error occured */
+}
+
+
+/*
+**  Read a GIF Plain Text Extension block.
+**
+**  Note that the Introducer and Label field values in the GIFLPLAINTEXT
+**  structure are assigned by the function calling ReadGifPlainText().
+**
+**  Returns: -1 if a FILE stream error occured during the read,
+**           otherwise 0 if no error occured.
+*/
+int
+ReadGifPlainText(
+    GIFPLAINTEXT *GifPlainText, /* Pointer to Plain Text Extension structure */
+    BYTE         **MemGif2        /* GIF image file input FILE stream          */
+    )
+{
+    int i;
+
+	for (i = 0 ; i < 13 ; i++) {
+		GifPlainText->PTEDump[i] = *(*MemGif2)++;
+	}
+
+    /* Read in the Plain Text data sub-blocks */
+    if (!(GifPlainText->PlainTextData = ReadDataSubBlocks(MemGif2 , &(GifPlainText->DataSize))))
+        return(1);
+
+    /*
+	GifPlainText->Terminator       = 0;
+	*/
+
+    /* Check for a FILE stream error */
+	/*
+    if (ferror(FpGif))
+        return(-1);
+	*/
+
+    return(0);          /* No FILE stream error occured */
+}
+
+
+/*
+**  Read a GIF Application Extension block.
+**
+**  Note that the Introducer and Label field values in the GIFAPPLICATION
+**  structure are assigned by the function calling ReadGifApplication().
+**
+**  Returns: -1 if a FILE stream error occured during the read,
+**           otherwise 0 if no error occured.
+*/
+int
+ReadGifApplication(
+    GIFAPPLICATION *GifApplication, /* Pointer to Application Extension structure */
+    BYTE           **MemGif2           /* GIF image file input FILE stream           */
+    )
+{
+    int i;
+
+	for (i = 0 ; i < 12 ; i++) {
+		GifApplication->AEDump[i] = *(*MemGif2)++;
+	}
+
+    /* Read in the Plain Text data sub-blocks */
+    if (!(GifApplication->ApplicationData = ReadDataSubBlocks(MemGif2 , &(GifApplication->DataSize))))
+        return(1);
+	/*
+    GifApplication->Terminator     = 0;
+	*/
+
+	/* Check for a FILE stream error */
+	/*
+    if (ferror(FpGif))
+        return(-1);
+	*/
+
+    return(0);          /* No FILE stream error occured */
+}
+
+
+/*
+**  Read a GIF Comment Extension block.
+**
+**  Note that the Introducer and Label field values in the GIFCOMMENT
+**  structure are assigned by the function calling ReadGifComment().
+**
+**  Returns: -1 if a FILE stream error occured during the read,
+**           otherwise 0 if no error occured.
+*/
+int
+ReadGifComment(
+    GIFCOMMENT *GifComment, /* Pointer to GIF Comment Extension structure */
+    BYTE       **MemGif2       /* GIF image file input FILE stream           */
+    )
+{
+
+    /* Read in the Plain Text data sub-blocks */
+    if (!(GifComment->CommentData = ReadDataSubBlocks(MemGif2 , &(GifComment->DataSize))))
+        return(1);
+
+    GifComment->Terminator = 0;
+
+    return(0);          /* No FILE stream error occured */
+}
+
+
+/*
+**  Read one or more GIF data sub-blocks and write the information
+**  to a buffer.
+**
+**  A GIF "sub-block" is a single count byte followed by 1 to 255
+**  additional data bytes.
+**
+**  Returns: A NULL pointer if a memory allocation error occured,
+**           otherwise a valid pointer if no error occured.
+*/
+static BYTE *
+ReadDataSubBlocks(BYTE **MemGif2, /* GIF image file input FILE stream              */
+    WORD *DSize)
+{
+    BYTE *ptr1;     /* Pointer used to "walk the heap"               */
+    BYTE *ptr2;     /* Pointer used to mark the top of the heap      */
+    BYTE dataSize;  /* Size of the current data sub-block being read */
+    WORD bufSize;   /* Total size of the Plain Text data buffer      */
+	int tempcount = 0;
+
+	bufSize = 0;				/* The output buffer is empty          */
+
+    dataSize = *(*MemGif2)++;		/* Get the size of the first sub-block */
+
+    /* Allocate initial data buffer */
+    if (!(ptr1 = ptr2 = (BYTE *) malloc((size_t)dataSize + 1))) {
+		printf("Out of memory. Allocation of memory for data sub-blocks for\neither Comment, Plain Text or Application Extensions failed");
+        return((BYTE *) NULL);
+	}
+    for (;;)
+    {
+		tempcount++;
+        bufSize += (dataSize);  /* Running total of the buffer size */
+		*DSize = bufSize;
+
+#ifdef COMMENTED_OUT
+        *ptr1++ = dataSize;			/* Write the data count */
+#endif /* COMMENTED_OUT */
+        while (dataSize--)			/* Read/write the Plain Text data */
+             *ptr1++ = *(*MemGif2)++;
+
+        /* Check if there is another data sub-block */
+        if ((dataSize = *(*MemGif2)++) == 0)
+            break;  /* Block Terminator encountered */
+
+        /* Increase the buffer size to accomodate the next sub-block */
+        if (!(ptr1 = ptr2 = (BYTE *) realloc(ptr2, bufSize + dataSize + 1)))
+            return((BYTE *) NULL);
+
+
+		ptr1 += bufSize;			/* Move pointer to the end of the data */
+
+
+    }
+
+   	*ptr1++ = '\0';
+
+    return(ptr2);					/* Return a pointer to the sub-block data */
+}
+
+
+
+
+

Added: packages/hdf5/branches/upstream/current/tools/gifconv/hdf2gif.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/gifconv/hdf2gif.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/gifconv/hdf2gif.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,404 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * NOTES:
+ * 04/01 - 04/10: been working on it a lot. I think it does gif89 images just
+ *                fine with palettes. So that's cool. Putting in multiple
+ *                images and animation support right now
+ * 03/29: For some reason I can write .GIF files which IE will open and see
+ *        but kodak imaging does not like. I'm sure its a problem with the GIF
+ *        file, I can't figure out what.
+ * 03/17: Explicitely deallocate the GIFTOMEM* struct in the main loop.
+ *        Check for both success and failure conditions
+ */
+
+#include <stdio.h>
+#include <assert.h>
+#include "gif.h"
+
+#define MAX_FILE_LEN            256
+#define MAX_NUMBER_IMAGES       50
+
+int EndianOrder;
+
+#ifdef NOT_USED
+static void
+PutByte(BYTE b , FILE *fpGif)
+{
+    if (fputc(b , fpGif) == EOF) {
+        printf("File Writing Error, cannot continue");
+        exit(-1);
+    }
+}
+#endif /* NOT_USED */
+
+static void
+putword(int w, FILE *fp)
+{
+    /* writes a 16-bit integer in GIF order (LSB first) */
+    fputc(w &0xff, fp);
+    fputc((w>>8)&0xff,fp);
+}
+
+static void
+usage(void)
+{
+    printf("Usage: h52gif <h5_file> <gif_file> -i <h5_image> [-p <h5_palette>]\n");
+    printf("h52gif expects *at least* one h5_image.\n");
+    printf("You may repeat -i <h5_image> [-p <h5_palette>] at most 50 times\n");
+    printf("(maximum of 50 images).\n");
+}
+
+FILE *fpGif = NULL;
+int main(int argc , char **argv)
+{
+
+
+    hsize_t dim_sizes[2];
+    BYTE *Image;
+
+    /* compression structs */
+    CHAR *HDFName = NULL;
+    CHAR *GIFName = NULL;
+
+    /* reference variables */
+    int has_local_palette;  /* treated as a flag */
+
+    BYTE* b;
+
+    BYTE  GlobalPalette[256][3];
+    BYTE  Red[256];
+    BYTE  Green[256];
+    BYTE  Blue[256];
+
+    int   RWidth, RHeight;
+#ifdef UNUSED
+    int   LeftOfs, TopOfs;
+    int   CountDown;
+    int   curx , cury;
+    int	  w,h;
+#endif /* UNUSED */
+    int   ColorMapSize, InitCodeSize, Background, BitsPerPixel;
+    int   j,nc;
+    int	  i;
+    int   numcols = 256;
+    int   time_out = 0;		/* time between two images in the animation */
+    int   n_images , idx;
+
+    BYTE pc2nc[256] , r1[256] , g1[256] , b1[256];
+
+    /* initial stuff */
+    int number_of_images = 0;
+    int arg_index = 2;
+    int bool_is_image = 0; /* 0 = false , 1 = true */
+    int bool_is_palette = 0;
+    CHAR* image_name_arr[MAX_NUMBER_IMAGES];
+    CHAR* pal_name_arr[MAX_NUMBER_IMAGES];
+
+    if (argc < 5) {
+        /* they didn't supply at least one image -- bail */
+        usage();
+        return 0;
+    }
+
+    memset(image_name_arr , 0 , MAX_NUMBER_IMAGES);
+    memset(pal_name_arr , 0 , MAX_NUMBER_IMAGES);
+
+    HDFName = (CHAR *)malloc (strlen(argv[1]) + 1);
+    GIFName = (CHAR *)malloc (strlen(argv[2]) + 1);
+
+    if (strlen(argv[1] + 1) > MAX_FILE_LEN || strlen(argv[2] + 1) > MAX_FILE_LEN) {
+        /* supplied file names are too long. bail. */
+        usage();
+        printf("Supplied filenames exceed maximum length of 256 bytes\n");
+    }
+
+    strcpy(HDFName , argv[1]);
+    strcpy(GIFName , argv[2]);
+
+    /* get the options */
+    while (arg_index++ < argc - 1 && number_of_images < MAX_NUMBER_IMAGES) {
+        if (!strcmp(argv[arg_index] , "-i")) {
+            bool_is_image = 1;
+            continue;
+        }
+
+        if (!strcmp(argv[arg_index] , "-p")) {
+            bool_is_palette = 1;
+            continue;
+        }
+
+        if (!strcmp(argv[arg_index] , "-a")) {
+            time_out = 10;
+            continue;
+        }
+
+        if (bool_is_image) {
+            /* this is an image */
+            /* allocate space to store the image name */
+            image_name_arr[number_of_images] = (CHAR*) malloc(strlen(argv[arg_index] + 1));
+            strcpy(image_name_arr[number_of_images] , argv[arg_index]);
+
+            /* make the palette array for this NULL */
+            pal_name_arr[number_of_images] = NULL;
+            number_of_images++;
+            bool_is_image = 0;
+            continue;
+        }
+
+        if (bool_is_palette) {
+            /* this is a palette */
+            /* allocate space to store the pal name */
+            /* the palette was probably allocated for a previous image */
+            pal_name_arr[number_of_images-1] = (CHAR*) malloc(strlen(argv[arg_index] + 1));
+            strcpy(pal_name_arr[number_of_images - 1], argv[arg_index]);
+            bool_is_palette = 0;
+            continue;
+        }
+
+        /* oops. This was not meant to happen */
+        usage();
+
+#if 0
+        while (number_of_images--) {
+            cleanup(image_name_arr[number_of_images]);
+            cleanup(pal_name_arr[number_of_images]);
+        }
+#endif  /* 0 */
+
+        return -1;
+    }
+
+    /* we shall always have a palette - read hdf will see to that */
+    has_local_palette = true;
+
+    /* Do Endian Order testing and set Endian Order */
+    idx = 0x0001;
+    b = (BYTE *) &idx;
+    EndianOrder = (b[0] ? 1:0);
+
+    if (!(fpGif = fopen(GIFName , "wb"))) {
+        printf("Error opening gif file for output. Aborting.\n");
+        return -1;
+    }
+
+    /* hardwire n_images to 1 for now. */
+    n_images = number_of_images;
+
+    Background = 0;
+    for (idx = 0 ; idx < n_images ; idx++) {
+        /* try to read the image and the palette */
+
+        /*
+         * Lots of funky stuff to support multiple images has been taken off.
+         * Just in case you're extending code, here's what you need to do in
+         * short: figure out if there is a global palette or not, if there is
+         * one store that one only.  If they are all local or a combination of
+         * local and global palettes, you will have to write the global
+         * palette out and then independantly write the smaller local palettes
+         */
+        if (ReadHDF(&Image, GlobalPalette, dim_sizes, HDFName,
+                    image_name_arr[idx], pal_name_arr[idx]) < 0) {
+            fprintf(stderr , "Unable to read image %s from HDF file %s\n",image_name_arr[idx],HDFName);
+            return -1;
+        }
+
+		assert(dim_sizes[0]==(hsize_t)((int)dim_sizes[0]));
+		assert(dim_sizes[1]==(hsize_t)((int)dim_sizes[1]));
+        RWidth  = (int)dim_sizes[1];
+        RHeight = (int)dim_sizes[0];
+#ifdef UNUSED
+        w = dim_sizes[1];
+        h = dim_sizes[0];
+
+        LeftOfs = TopOfs = 0;
+#endif /* UNUSED */
+
+
+        /*
+         * If the first image does not have a palette, I make my own global
+         * color table Obviously this is not the best thing to do, better
+         * steps would be:
+         *
+         *   1. Check for either a global palette or a global attribute called
+         *      palette
+         *   2. Check for palettes in any of the other images.
+         */
+        if (!has_local_palette) {
+            for (i = 0 ; i < 256 ; i++) {
+                Red[i] = 255 - i;
+                Green[i] = 255 - i;
+                Blue[i] = 255 - i;
+            }
+        } else {
+            for (i = 0 ; i < 256 ; i++){
+                Red[i] = GlobalPalette[i][0];
+                Green[i] = GlobalPalette[i][1];
+                Blue[i] = GlobalPalette[i][2];
+            }
+        }
+
+        for (i = 0; i < 256; i++) {
+            pc2nc[i] = r1[i] = g1[i] = b1[i] = 0;
+        }
+
+        /* compute number of unique colors */
+        nc = 0;
+
+        for (i = 0; i < numcols; i++) {
+            /* see if color #i is already used */
+            for (j = 0; j < i; j++) {
+                if (Red[i] == Red[j] && Green[i] == Green[j] && Blue[i] == Blue[j])
+                    break;
+            }
+
+            if (j==i) {
+                /* wasn't found */
+                pc2nc[i] = nc;
+                r1[nc] = Red[i];
+                g1[nc] = Green[i];
+                b1[nc] = Blue[i];
+                nc++;
+            } else {
+                pc2nc[i] = pc2nc[j];
+            }
+        }
+
+        /* figure out 'BitsPerPixel' */
+        for (i = 1; i < 8; i++) {
+            if ((1<<i) >= nc)
+                break;
+        }
+
+        BitsPerPixel = i;
+        ColorMapSize = 1 << BitsPerPixel;
+
+#ifdef UNUSED
+        CountDown = w * h;  /* # of pixels we'll be doing */
+#endif /* UNUSED */
+
+        if (BitsPerPixel <= 1)
+            InitCodeSize = 2;
+        else
+            InitCodeSize = BitsPerPixel;
+
+#ifdef UNUSED
+        curx = cury = 0;
+#endif /* UNUSED */
+
+        if (!fpGif) {
+            fprintf(stderr,  "WriteGIF: file not open for writing\n" );
+            return (1);
+        }
+
+        /*
+         * If it is the first image we do all the header stuff that isn't
+         * required for the rest of the images.
+         */
+        if (idx == 0) {
+            /* Write out the GIF header and logical screen descriptor */
+            if (n_images > 1) {
+                fwrite("GIF89a", sizeof( char ), 6, fpGif);  /* the GIF magic number */
+            } else {
+                fwrite("GIF87a", sizeof( char ), 6, fpGif);  /* the GIF magic number */
+            }
+
+            putword(RWidth, fpGif);             /* screen descriptor */
+            putword(RHeight, fpGif);
+
+            i = 0x00;                   /* No, there is no color map */
+            i |= (8-1)<<4;              /* OR in the color resolution (hardwired 8) */
+            i |= (BitsPerPixel - 1);    /* OR in the # of bits per pixel */
+            fputc(i,fpGif);
+
+            fputc(Background,fpGif);    /* background color */
+            fputc(0, fpGif);            /* future expansion byte */
+
+            /*
+             * If loop_times is 0 , put in the application extension to make
+             * the gif anime loop indefinitely
+             */
+            if (time_out > 0) {
+                fputc(0x21 , fpGif);
+                fputc(0xFF , fpGif);
+                fputc(11 , fpGif);
+                fwrite("NETSCAPE2.0" , 1 , 11 , fpGif);
+                fputc(3 , fpGif);
+                fputc(1 , fpGif);
+                fputc(0 , fpGif);
+                fputc(0 , fpGif);
+                fputc(0 , fpGif);
+            }
+        }
+
+        if (n_images > 1) {
+            /* write a graphic control block */
+            fputc(0x21 , fpGif);
+            fputc(0xF9 , fpGif);
+            fputc(4 , fpGif);
+            fputc(4 , fpGif);
+            putword(time_out , fpGif);
+            fputc(255, fpGif);
+            fputc(0 , fpGif);
+        }
+
+        /*
+         * Put Image Descriptor
+         * Hardwiring Left Offset and Top Offset to 0x00
+         */
+        fputc(0x2c , fpGif);
+        putword(0x00 , fpGif);
+        putword(0x00  , fpGif);
+        putword(RWidth   , fpGif);
+        putword(RHeight  , fpGif);
+
+        /* since we always have a local color palette ... */
+        fputc((0x80 | (BitsPerPixel - 1)) , fpGif);
+
+        for (i = 0; i < ColorMapSize; i++) {
+            /* write out Global colormap */
+            fputc(r1[i], fpGif);
+            fputc(g1[i], fpGif);
+            fputc(b1[i], fpGif);
+        }
+
+        fputc(InitCodeSize , fpGif);
+
+        i = hdfWriteGIF(fpGif , Image , 0 , (int)dim_sizes[0] ,
+                        (int)dim_sizes[1] , r1, g1 , b1 , pc2nc , 256 , 8 ,
+                        BitsPerPixel);
+        fputc(0x00, fpGif);
+        free(Image);
+    }
+
+    if (fputc(';',fpGif) == EOF) {
+        /* Write GIF file terminator */
+        fprintf(stderr , "Error!");
+        return -1;
+    }
+
+    fclose(fpGif);
+
+#if 0
+    while(number_of_images--) {
+        if (image_name_arr[number_of_images])
+            free(image_name_arr[number_of_images]);
+        if (pal_name_arr[number_of_images])
+            free(pal_name_arr[number_of_images]);
+    }
+#endif  /* 0 */
+
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/tools/gifconv/hdfgifwr.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/gifconv/hdfgifwr.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/gifconv/hdfgifwr.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,521 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * hdfgifwr.c  - handles writing of GIF files.
+ *
+ * Contains:
+ *   hdfWriteGIF(fp, pic, ptype, w, h, rmap, gmap, bmap, numcols, colorstyle,
+ *               comment)
+ *
+ * Note: slightly brain-damaged, in that it'll only write non-interlaced
+ *       GIF files (in the interests of speed, or something)
+ */
+
+/*****************************************************************
+ * Portions of this code Copyright (C) 1989 by Michael Mauldin.
+ * Permission is granted to use this file in whole or in
+ * part for any purpose, educational, recreational or commercial,
+ * provided that this copyright notice is retained unchanged.
+ * This software is available to all free of charge by anonymous
+ * FTP and in the UUNET archives.
+ *
+ *
+ * Authors:  Michael Mauldin (mlm at cs.cmu.edu)
+ *           David Rowley (mgardi at watdcsu.waterloo.edu)
+ *
+ * Based on: compress.c - File compression ala IEEE Computer, June 1984.
+ *
+ *	Spencer W. Thomas       (decvax!harpo!utah-cs!utah-gr!thomas)
+ *	Jim McKie               (decvax!mcvax!jim)
+ *	Steve Davies            (decvax!vax135!petsd!peora!srd)
+ *	Ken Turkowski           (decvax!decwrl!turtlevax!ken)
+ *	James A. Woods          (decvax!ihnp4!ames!jaw)
+ *	Joe Orost               (decvax!vax135!petsd!joe)
+ *****************************************************************/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "gif.h"
+
+typedef BYTE		byte;
+typedef long int	count_int;
+
+/* indicies into conv24MB */
+#define CONV24_8BIT  0
+#define CONV24_24BIT 1
+#define CONV24_SEP1  2
+#define CONV24_LOCK  3
+#define CONV24_SEP2  4
+#define CONV24_FAST  5
+#define CONV24_SLOW  6
+#define CONV24_BEST  7
+#define CONV24_MAX   8
+
+/* values 'picType' can take */
+#define PIC8  CONV24_8BIT
+#define PIC24 CONV24_24BIT
+
+/* MONO returns total intensity of r,g,b components */
+#define MONO(rd,gn,bl) (((rd)*11 + (gn)*16 + (bl)*5) >> 5)  /*.33R+ .5G+ .17B*/
+
+#ifdef UNUSED
+static int  Width, Height;
+static int  curx, cury;
+static long CountDown;
+static int  Interlace;
+#endif /* UNUSED */
+
+#ifdef __STDC__
+static void compress(int, FILE *, byte *, int);
+static void output(int);
+static void cl_block(void);
+static void cl_hash(count_int);
+static void char_init(void);
+static void char_out(int);
+static void flush_char(void);
+#else
+static void compress(), output(), cl_block(), cl_hash();
+static void char_init(), char_out(), flush_char();
+#endif  /* __STDC__ */
+
+static byte pc2nc[256];
+#ifdef UNUSED
+static byte r1[256],g1[256],b1[256];
+#endif /* UNUSED */
+
+/*************************************************************/
+int hdfWriteGIF(FILE *fp, byte *pic, int ptype, int w, int h, byte *rmap,
+                byte *gmap, byte *bmap, byte *pc2ncmap, int numcols,
+                int colorstyle, int BitsPerPixel)
+{
+#ifdef UNUSED
+    int RWidth, RHeight;
+    int LeftOfs, TopOfs;
+    int ColorMapSize, Background;
+#endif /* UNUSED */
+    int InitCodeSize;
+    int i;
+    byte *pic8 = pic;
+
+    /* Shut compiler up... */
+    ptype=ptype;
+    rmap=rmap;
+    gmap=gmap;
+    bmap=bmap;
+    numcols=numcols;
+    colorstyle=colorstyle;
+
+#ifdef UNUSED
+    Interlace = 0;
+    Background = 0;
+#endif /* UNUSED */
+
+    for (i = 0; i < 256; i++) {
+      pc2nc[i] = pc2ncmap[i];
+#ifdef UNUSED
+      r1[i] = rmap[i];
+      g1[i] = gmap[i];
+      b1[i] = bmap[i];
+#endif /* UNUSED */
+    }
+
+#ifdef UNUSED
+    ColorMapSize = 1 << BitsPerPixel;
+
+    RWidth  = Width = w;
+    RHeight = Height = h;
+    LeftOfs = TopOfs = 0;
+
+    CountDown = w * h;    /* # of pixels we'll be doing */
+#endif /* UNUSED */
+
+    if (BitsPerPixel <= 1)
+        InitCodeSize = 2;
+    else
+        InitCodeSize = BitsPerPixel;
+
+#ifdef UNUSED
+    curx = cury = 0;
+#endif /* UNUSED */
+
+    if (!fp) {
+        fprintf(stderr,  "WriteGIF: file not open for writing\n" );
+        return (1);
+    }
+
+    compress(InitCodeSize+1, fp, pic8, w*h);
+
+    if (ferror(fp))
+        return -1;
+
+    return  0 ;
+}
+
+/***********************************************************************/
+static unsigned long cur_accum = 0;
+static int           cur_bits = 0;
+
+#define MAXCODE(n_bits)     ( (1 << (n_bits)) - 1)
+#ifndef WIN32
+#define min(a,b)        ((a>b) ? b : a)
+#endif
+#define XV_BITS	12    /* BITS was already defined on some systems */
+#define MSDOS	1
+#define HSIZE  5003            /* 80% occupancy */
+
+typedef unsigned char   char_type;
+
+static int n_bits;                    /* number of bits/code */
+static int maxbits = XV_BITS;         /* user settable max # bits/code */
+static int maxcode;                   /* maximum code, given n_bits */
+static int maxmaxcode = 1 << XV_BITS; /* NEVER generate this */
+
+static  count_int      htab [HSIZE];
+static  unsigned short codetab [HSIZE];
+
+#define HashTabOf(i)   htab[i]
+#define CodeTabOf(i)   codetab[i]
+
+static int hsize = HSIZE;            /* for dynamic table sizing */
+
+/*
+ * To save much memory, we overlay the table used by compress() with those
+ * used by decompress().  The tab_prefix table is the same size and type as
+ * the codetab.  The tab_suffix table needs 2**BITS characters.  We get this
+ * from the beginning of htab.  The output stack uses the rest of htab, and
+ * contains characters.  There is plenty of room for any possible stack (stack
+ * used to be 8000 characters).
+ */
+
+#define tab_prefixof(i) CodeTabOf(i)
+#define tab_suffixof(i)        ((char_type *)(htab))[i]
+#define de_stack               ((char_type *)&tab_suffixof(1<<XV_BITS))
+
+static int free_ent = 0;                  /* first unused entry */
+
+/*
+ * block compression parameters -- after all codes are used up,
+ * and compression rate changes, start over.
+ */
+static int clear_flg = 0;
+
+static long int in_count = 1;            /* length of input */
+static long int out_count = 0;           /* # of codes output (for debugging) */
+
+/*
+ * compress stdin to stdout
+ *
+ * Algorithm:  use open addressing double hashing (no chaining) on the prefix
+ * code / next character combination.  We do a variant of Knuth's algorithm D
+ * (vol. 3, sec. 6.4) along with G. Knott's relatively-prime secondary probe.
+ * Here, the modular division first probe is gives way to a faster
+ * exclusive-or manipulation.  Also do block compression with an adaptive
+ * reset, whereby the code table is cleared when the compression ratio
+ * decreases, but after the table fills.  The variable-length output codes are
+ * re-sized at this point, and a special CLEAR code is generated for the
+ * decompressor.  Late addition:  construct the table according to file size
+ * for noticeable speed improvement on small files.  Please direct questions
+ * about this implementation to ames!jaw.
+ */
+
+static int g_init_bits;
+static FILE *g_outfile;
+
+static int ClearCode;
+static int EOFCode;
+
+/********************************************************/
+static void compress(int init_bits, FILE *outfile, byte *data, int len)
+{
+    register long fcode;
+    register int i = 0;
+    register int c;
+    register int ent;
+    register int disp;
+    register int hsize_reg;
+    register int hshift;
+
+    /*
+     * Set up the globals:  g_init_bits - initial number of bits g_outfile -
+     * pointer to output file
+     */
+    g_init_bits = init_bits;
+    g_outfile   = outfile;
+
+    /* initialize 'compress' globals */
+    maxbits = XV_BITS;
+    maxmaxcode = 1<<XV_BITS;
+    memset(htab, 0, sizeof(htab));
+    memset(codetab, 0, sizeof(codetab));
+    hsize = HSIZE;
+    free_ent = 0;
+    clear_flg = 0;
+    in_count = 1;
+    out_count = 0;
+    cur_accum = 0;
+    cur_bits = 0;
+
+    /* Set up the necessary values */
+    out_count = 0;
+    clear_flg = 0;
+    in_count = 1;
+    maxcode = MAXCODE(n_bits = g_init_bits);
+
+    ClearCode = (1 << (init_bits - 1));
+    EOFCode = ClearCode + 1;
+    free_ent = ClearCode + 2;
+
+    char_init();
+    ent = pc2nc[*data++];
+    len--;
+
+    hshift = 0;
+    for (fcode = (long)hsize; fcode < 65536L; fcode *= 2L )
+        hshift++;
+
+    hshift = 8 - hshift; /* set hash code range bound */
+
+    hsize_reg = hsize;
+    cl_hash( (count_int) hsize_reg); /* clear hash table */
+
+    output(ClearCode);
+
+    while (len) {
+        c = pc2nc[*data++];
+        len--;
+        in_count++;
+
+        fcode = (long)(((long) c << maxbits) + ent);
+        i = (((int) c << hshift) ^ ent);    /* xor hashing */
+
+        if ( HashTabOf (i) == fcode ) {
+            ent = CodeTabOf (i);
+            continue;
+        } else if ( (long)HashTabOf (i) < 0) {
+            /* empty slot */
+            goto nomatch;
+        }
+
+        disp = hsize_reg - i;   /* secondary hash (after G. Knott) */
+
+        if ( i == 0 )
+            disp = 1;
+
+probe:
+        if ((i -= disp) < 0)
+            i += hsize_reg;
+
+        if (HashTabOf (i) == fcode) {
+            ent = CodeTabOf (i);
+            continue;
+        }
+
+        if ((long)HashTabOf (i) >= 0)
+            goto probe;
+
+nomatch:
+        output(ent);
+        out_count++;
+        ent = c;
+
+        if (free_ent < maxmaxcode) {
+            CodeTabOf (i) = free_ent++; /* code -> hashtable */
+            HashTabOf (i) = fcode;
+        } else {
+            cl_block();
+        }
+    }
+
+    /* Put out the final code */
+    output(ent);
+    out_count++;
+    output(EOFCode);
+}
+
+
+/*****************************************************************
+ * TAG( output )
+ *
+ * Output the given code.
+ * Inputs:
+ *      code:   A n_bits-bit integer.  If == -1, then EOF.  This assumes
+ *              that n_bits =< (long)wordsize - 1.
+ * Outputs:
+ *      Outputs code to the file.
+ * Assumptions:
+ *      Chars are 8 bits long.
+ * Algorithm:
+ *      Maintain a BITS character long buffer (so that 8 codes will
+ * fit in it exactly).  Use the VAX insv instruction to insert each
+ * code in turn.  When the buffer fills up empty it and start over.
+ */
+
+static
+unsigned long masks[] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F,
+                                  0x001F, 0x003F, 0x007F, 0x00FF,
+                                  0x01FF, 0x03FF, 0x07FF, 0x0FFF,
+                                  0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF };
+
+static void
+output(int code)
+{
+    cur_accum &= masks[cur_bits];
+
+    if (cur_bits > 0)
+        cur_accum |= ((long)code << cur_bits);
+    else
+        cur_accum = code;
+
+    cur_bits += n_bits;
+
+    while( cur_bits >= 8 ) {
+        char_out( (int)((unsigned int) cur_accum & 0xff) );
+        cur_accum >>= 8;
+        cur_bits -= 8;
+    }
+
+    /*
+     * If the next entry is going to be too big for the code size, then
+     * increase it, if possible.
+     */
+    if (free_ent > maxcode || clear_flg) {
+        if (clear_flg) {
+            maxcode = MAXCODE (n_bits = g_init_bits);
+            clear_flg = 0;
+        } else {
+            n_bits++;
+
+            if ( n_bits == maxbits )
+                maxcode = maxmaxcode;
+            else
+                maxcode = MAXCODE(n_bits);
+        }
+    }
+
+    if (code == EOFCode) {
+        /* At EOF, write the rest of the buffer */
+        while( cur_bits > 0 ) {
+            char_out( (int)((unsigned int)cur_accum & 0xff) );
+            cur_accum >>= 8;
+            cur_bits -= 8;
+        }
+
+        flush_char();
+        fflush( g_outfile );
+
+#ifdef FOO
+        if(ferror( g_outfile))
+            FatalError("unable to write GIF file");
+#endif
+    }
+}
+
+/********************************/
+static void
+cl_block(void)                  /* table clear for block compress */
+{
+    /* Clear out the hash table */
+    cl_hash((count_int) hsize);
+    free_ent = ClearCode + 2;
+    clear_flg = 1;
+    output(ClearCode);
+}
+
+/********************************/
+static void
+cl_hash(count_int hashsize)     /* reset code table */
+{
+    count_int *htab_p = htab+hashsize;
+    long i, m1 = -1;
+
+    i = hashsize - 16;
+
+    do {    /* might use Sys V memset(3) here */
+        *(htab_p-16) = m1;
+        *(htab_p-15) = m1;
+        *(htab_p-14) = m1;
+        *(htab_p-13) = m1;
+        *(htab_p-12) = m1;
+        *(htab_p-11) = m1;
+        *(htab_p-10) = m1;
+        *(htab_p-9) = m1;
+        *(htab_p-8) = m1;
+        *(htab_p-7) = m1;
+        *(htab_p-6) = m1;
+        *(htab_p-5) = m1;
+        *(htab_p-4) = m1;
+        *(htab_p-3) = m1;
+        *(htab_p-2) = m1;
+        *(htab_p-1) = m1;
+        htab_p -= 16;
+    } while ((i -= 16) >= 0);
+
+    for ( i += 16; i > 0; i-- )
+        *--htab_p = m1;
+}
+
+/******************************************************************************
+ *
+ * GIF Specific routines
+ *
+ ******************************************************************************/
+
+/*
+ * Number of characters so far in this 'packet'
+ */
+static int a_count;
+
+/*
+ * Set up the 'byte output' routine
+ */
+static void
+char_init(void)
+{
+    a_count = 0;
+}
+
+/*
+ * Define the storage for the packet accumulator
+ */
+static char accum[ 256 ];
+
+/*
+ * Add a character to the end of the current packet, and if it is 254
+ * characters, flush the packet to disk.
+ */
+static void
+char_out(int c)
+{
+    accum[ a_count++ ] = c;
+
+    if (a_count >= 254)
+        flush_char();
+}
+
+/*
+ * Flush the packet to disk, and reset the accumulator
+ */
+static void
+flush_char(void)
+{
+    if (a_count > 0) {
+        fputc( a_count, g_outfile );
+        fwrite( accum, 1, (size_t)a_count, g_outfile);
+        a_count = 0;
+    }
+}

Added: packages/hdf5/branches/upstream/current/tools/gifconv/readhdf.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/gifconv/readhdf.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/gifconv/readhdf.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,211 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#include "gif.h"
+
+/* just a small cleanup routine before we leave */
+void
+cleanup(BYTE *ptr)
+{
+    if (ptr)
+        free(ptr);
+}
+
+/* Function:    ReadHDF
+** Return:      0 on completion without error, -1 on error
+** Input:       CHAR *h5_file - HDF file name
+**              CHAR *dset_name - Name of the HDF Image dataset
+**              CHAR *pal_name - Name of the HDF palette
+** Output:      BYTE** data - the HDF Image to be converted
+**              BYTE  palette[256][3] - the corresponding palette
+**              hsize_t* image_size - the size of each dimension of the image
+**
+** Future Notes:
+** The way readHDF works right now is that it expects the user
+** to know the exact path to the HDF image. Thus it does not
+** parse the HDF file looking for image datasets and corresponding
+** palettes. Also it takes in the default palette for the image
+** specified, if the palette is missing, it makes a default greyscale
+** palette and throws it in.
+**
+*/
+int ReadHDF(BYTE** data, BYTE palette[256][3], hsize_t *image_size,
+            CHAR *h5_file, CHAR *dset_name, CHAR *pal_name)
+{
+    hid_t fHfile;       /* H5 file to open                              */
+    hid_t dspace;       /* dataspace identifier for the the dataset     */
+    hid_t dtype;        /* datatype identifier for the the dataset     */
+    hid_t dset;	        /* dataset identifier                           */
+    hid_t pal_set;      /* dataset for palette                          */
+    hid_t pal_space;    /* dataspace for palette                        */
+    hid_t pal_dtype;     /* datatype for palette                        */
+    hsize_t datasize;	/* size of the image                            */
+    int pal_exist = 0;  /* do we have a palette?                        */
+
+    /* check stuff */
+    if (!h5_file || !dset_name || !image_size) {
+        fprintf(stderr, "NULL is not an acceptable input for HDFread. Aborting.\n");
+        return -1;
+    }
+
+    /* do we have a palette ? */
+    if (pal_name) {
+        pal_exist = 1;
+    }
+
+    /* try opening the file */
+    /* H5 file open calls */
+    if ((fHfile = H5Fopen(h5_file , H5F_ACC_RDONLY , H5P_DEFAULT)) < 0) {
+        fprintf(stderr , "Unable to open HDF file for input. Aborting.\n");
+        return -1;
+    }
+
+    /* open the dataset for reading */
+    if ((dset = H5Dopen(fHfile , dset_name)) < 0) {
+        fprintf(stderr , "Unable to open dataset\n");
+        return -1;
+    }
+
+    dtype = H5Dget_type(dset);
+    if (dtype < 0) {
+        fprintf(stderr , "Unable to open datatype\n");
+        return -1;
+    }
+    if (H5Tget_class(dtype) != H5T_INTEGER) {
+        fprintf(stderr , "Data is not integer. Cannot convert to GIF\n");
+        return -1;
+    }
+    if (H5Tget_size(dtype) != 1) {
+        fprintf(stderr , "Data is %d bytes per pixel. Cannot convert to GIF\n",(int)H5Tget_size(dtype));
+        return -1;
+    }
+
+    /* get the dataspace */
+    if ((dspace = H5Dget_space(dset)) < 0) {
+        fprintf(stderr , "Unable to get dataspace\n");
+        return -1;
+    }
+
+    /* get the dimension size of the image */
+    if (H5Sget_simple_extent_dims(dspace , image_size , NULL) <0 ) {
+        fprintf(stderr , "Unable to get dimension info\n");
+        return -1;
+    }
+
+    /* size needed to store the image */
+    datasize = image_size[0] * image_size[1];
+
+    /* allocate memory to store the image */
+    if ((*data = (BYTE*) malloc((size_t)datasize)) == NULL) {
+        fprintf(stderr , "Out of memory, exiting");
+        return -1;
+    }
+
+    /* get the actual image */
+    if (H5Dread(dset , H5Tget_native_type(dtype, H5T_DIR_ASCEND) , H5S_ALL , H5S_ALL , H5P_DEFAULT , *data) < 0) {
+        fprintf(stderr , "Unable to read data \n");
+        cleanup(*data);
+        return -1;
+    }
+
+    if (pal_exist) {
+        hsize_t loc_pal_size[2];
+        hsize_t pal_datasize;
+        BYTE *temp_buf;
+        hsize_t temp_size;
+
+        /* get the palette dataset */
+        if ((pal_set = H5Dopen(fHfile , pal_name)) < 0) {
+            fprintf(stderr , "Unable to open dataset\n");
+            pal_exist = 0;
+            return -1;
+        }
+
+        pal_dtype = H5Dget_type(pal_set);
+        if (dtype < 0) {
+            fprintf(stderr , "Unable to open palette datatype\n");
+            return -1;
+        }
+        if (H5Tget_class(pal_dtype) != H5T_INTEGER) {
+            fprintf(stderr , "Palette data is not integer. Cannot convert to GIF\n");
+            return -1;
+        }
+        if (H5Tget_size(pal_dtype) != 1) {
+            fprintf(stderr , "Palette data is %d bytes per pixel. Cannot convert to GIF\n",(int)H5Tget_size(pal_dtype));
+            return -1;
+        }
+
+        /* get the dataspace */
+        if ((pal_space = H5Dget_space(pal_set)) < 0) {
+            fprintf(stderr , "Unable to get dataspace\n");
+            pal_exist = 0;
+            return -1;
+        }
+
+        /* get the dimension size of the palette. */
+        if (H5Sget_simple_extent_dims(pal_space , loc_pal_size , NULL) !=2 ) {
+            fprintf(stderr , "Unable to get dimension info\n");
+            pal_exist = 0;
+            return -1;
+        }
+
+        /* size needed to store the image */
+        pal_datasize = loc_pal_size[0] * loc_pal_size[1];
+
+        /* copy stuff into a temp buffer and then copy 256*3 elements to palette */
+        temp_size = H5Dget_storage_size(pal_set);
+        temp_buf = (BYTE*) malloc ((size_t)temp_size * sizeof(BYTE));
+
+        /*
+         * make sure that the palette is actually 256 X 3 so that we don't
+         * create overflows
+         */
+        if (pal_datasize > 256 * 3) {
+            fprintf(stderr , "Palette seems to be more than 256X3 bytes\n");
+            fprintf(stderr , "Truncating palette to 256 colors. This might cause a problem with the final image\n");
+            pal_datasize = 256 * 3;
+        }
+
+        /* get the actual palette */
+        if (H5Dread(pal_set , H5Tget_native_type(pal_dtype, H5T_DIR_ASCEND) , H5S_ALL , H5S_ALL , H5P_DEFAULT , temp_buf) < 0) {
+            fprintf(stderr , "Unable to read data \n");
+            cleanup(*data);
+            cleanup(temp_buf);
+            return -1;
+        }
+
+        /* copy stuff into the actual palette */
+        memcpy(palette , temp_buf , (size_t)pal_datasize);
+
+        /* get rid of the temp memory */
+        cleanup(temp_buf);
+        /* end of if (pal_exist) */
+    } else {
+        int i;
+        /*
+         * if palette does not exist we just go ahead and create a uniform
+         * greyscale palette
+         */
+        for (i = 0 ; i < 256 ; i++) {
+            palette[i][0] = 255 - i;
+            palette[i][1] = 255 - i;
+            palette[i][2] = 255 - i;
+        }
+    }
+
+    /* close everything */
+    H5Dclose(dset);
+    H5Sclose(dspace);
+    H5Fclose(fHfile);
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/tools/gifconv/writehdf.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/gifconv/writehdf.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/gifconv/writehdf.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,412 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#include <string.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "gif.h"
+
+/*******************************************************************
+ * Function:	write_text_attribute
+ * Use:         Just a small wrapper to write text attributes easily
+ *******************************************************************/
+static int write_text_attribute(hid_t dataset_id , const char *attr_name,
+                                const char *attr_value, const size_t attr_len)
+{
+    /* variables for the attributes */
+    hsize_t attr_size;     /* dimensions for the attribute */
+    hid_t attr_dataspace_id;    /* dataspaces needed for the various attributes */
+    hid_t attr_attr_id;	        /* attribute id */
+    hid_t attr_type_id;
+
+    /* check strings */
+    if (!attr_name || !attr_value)
+        return -1;
+
+    /* figure out size of the data */
+    attr_size = (hsize_t)attr_len;
+
+    /* set the type to string */
+    attr_type_id = H5Tcopy(H5T_C_S1);
+    H5Tset_size(attr_type_id , (size_t)attr_size);
+
+    /* create the dataspace for the attribute */
+    attr_dataspace_id = H5Screate(H5S_SCALAR);
+
+    /* create the attribute */
+    attr_attr_id = H5Acreate(dataset_id , attr_name , attr_type_id ,
+                             attr_dataspace_id , H5P_DEFAULT);
+
+    /* write out the attribute data */
+    if (H5Awrite(attr_attr_id , attr_type_id , attr_value) < 0)
+        return -1;
+
+    /* close the attribute */
+    if (H5Aclose(attr_attr_id) < 0)
+        return -1;
+
+    /* close the dataspace */
+    if (H5Sclose(attr_dataspace_id) < 0) {
+        fprintf(stderr , "Unable to close attribute dataspace. Aborting \n");
+        return -1;
+    }
+
+    return 0;
+}
+
+int
+WriteHDF(GIFTOMEM GifMemoryStruct, char *HDFName , char *GIFFileName)
+{
+    GIFHEAD          gifHead;           /* GIF Header structure            */
+    GIFIMAGEDESC    *gifImageDesc;      /* Logical Image Descriptor struct */
+
+    long ImageCount;                    /* number of images */
+#ifdef UNUSED
+    long CommentCount,                  /* number of comments */
+         ApplicationCount,              /* number of application extensions */
+         PlainTextCount;                /* number of plain text extensions */
+#endif /* UNUSED */
+
+    char ImageName[256];                /* Image name for the GR Image */
+    char GroupName[VSNAMELENMAX];       /* so that we can name the subgroups appropriately */
+
+    /* H5 variables */
+    hid_t file_id;      /* H5 file id */
+    hid_t image_id;     /* H5 id for the whole image */
+    hid_t pal_id;       /* H5 id for the palette */
+    hobj_ref_t pal_ref; /* Create a reference for the palette */
+
+    /* temp counter */
+    int i;
+
+    /* get the GIFMem stuff */
+    gifHead = *(GifMemoryStruct.GifHeader);
+
+    /* get some data from gifHead */
+    ImageCount = gifHead.ImageCount;
+#ifdef UNUSED
+    CommentCount = (WORD)gifHead.CommentCount;
+    ApplicationCount = (WORD)gifHead.ApplicationCount;
+    PlainTextCount = (WORD)gifHead.PlainTextCount;
+#endif /* UNUSED */
+
+    /* get the main group name from GIFFileName */
+    GroupName[0]= '/';
+
+    if (strncpy(GroupName , GIFFileName , VSNAMELENMAX-2) == NULL) {
+        fprintf(stderr , "strncpy failed\n");
+        exit(1);
+    }
+
+    GroupName[VSNAMELENMAX - 1] = '\0';
+
+    if ((file_id = H5Fcreate(HDFName , H5F_ACC_TRUNC , H5P_DEFAULT , H5P_DEFAULT)) < 0) {
+        /* error occured opening the HDF File for write */
+        fprintf(stderr , "HDF file could not be opened for writing\n");
+        fprintf(stderr , "NOTE: GIF file must be present in the same directory as the binary on UNIX systems.\n");
+        exit(1);
+    }
+
+    /* create a group within the root group to hold the gif image */
+    /* might want to make a different naming style out here */
+    image_id = H5Gcreate(file_id, GroupName , 0);
+
+    /* first create the global palette if there is one */
+    if (gifHead.PackedField & 0x80) { /* global palette exists */
+        hid_t dataspace_id;	/* identifier for dataspace */
+        hsize_t dims[2];	/* specify the dimensions of the palette */
+
+        hsize_t dimsr[1] = {1};	/* needed to store reference */
+        hid_t ref_dataspace_id;	/* dataspace id for references */
+        hid_t ref_dataset_id;	/* dataset id for references */
+
+        /* size of the palette is tablesize (rows) X 3 (columns) */
+        dims[0] = gifHead.TableSize;
+        dims[1] = 3;
+
+        /* create the dataspace */
+        if ((dataspace_id = H5Screate_simple(2 , dims , NULL)) < 0) {
+            fprintf(stderr , "Could not create dataspace for palette. Aborting...\n");
+            return -1;
+        }
+
+        /* create the palette dataset */
+        if ((pal_id = H5Dcreate(image_id , "Global Palette" , H5T_NATIVE_UINT8 , dataspace_id , H5P_DEFAULT )) < 0) {
+            fprintf(stderr , "Could not create palette dataset. Aborting...\n");
+            return -1;
+        }
+
+        /* write the palette data out */
+        /****** Ask Elena about VOIDP ******/
+        if (H5Dwrite(pal_id , H5T_NATIVE_UINT8 , H5S_ALL , H5S_ALL , H5P_DEFAULT , (void *)gifHead.HDFPalette) < 0) {
+            fprintf(stderr , "Error writing dataset. Aborting...\n");
+            return -1;
+        }
+
+        /* set palette attributes */
+
+        /* attribute CLASS = PALETTE */
+        if ((write_text_attribute(pal_id , "CLASS" , "PALETTE",strlen("PALETTE"))) < 0) {
+            fprintf(stderr , "Unable to write palette attributes. Aborting\n");
+            return -1;
+        }
+
+        /* attribute PAL_COLORMODEL = RGB */
+        if ((write_text_attribute(pal_id , "PAL_COLORMODEL" , "RGB",strlen("RGB"))) < 0) {
+            fprintf(stderr , "Unable to write palette attributes. Aborting\n");
+            return -1;
+        }
+
+        /* attribute PAL_TYPE = STANDARD8 */
+        if ((write_text_attribute(pal_id , "PAL_TYPE" , "STANDARD8",strlen("STANDARD8"))) < 0) {
+            fprintf(stderr , "Unable to write palette attributes. Aborting\n");
+            return -1;
+        }
+
+        /* attribute PAL_VERSION = 1.0 */
+        if ((write_text_attribute(pal_id , "PAL_VERSION" , "1.0",strlen("1.0"))) < 0) {
+            fprintf(stderr , "Unable to write palette attributes. Aborting\n");
+            return -1;
+        }
+
+        /* create dataspace for the dataset to store references */
+        ref_dataspace_id = H5Screate_simple(1 , dimsr , NULL);
+
+        /* create a dataset to store the references */
+        ref_dataset_id = H5Dcreate(image_id , "Palette Reference" , H5T_STD_REF_OBJ , ref_dataspace_id , H5P_DEFAULT);
+
+        /* create a reference to the palette */
+        if (H5Rcreate(&pal_ref , image_id , "Global Palette" , H5R_OBJECT , -1) < 0) {
+            fprintf(stderr , "Unable to create palette reference\n");
+            return -1;
+        }
+
+        /* write the reference out */
+        if (H5Dwrite(ref_dataset_id , H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL , H5P_DEFAULT, &pal_ref) < 0) {
+            fprintf(stderr , "Unable to write Palette Reference");
+            return -1;
+        }
+
+        /* close dataset */
+        if (H5Dclose(ref_dataset_id) < 0) {
+            fprintf(stderr , "Unable to close palette dataset.\n");
+            return -1;
+        }
+
+        /* close dataspace */
+        if (H5Sclose(ref_dataspace_id) < 0) {
+            fprintf(stderr , "Unable to close palette dataspace.\n");
+            return -1;
+        }
+
+        /* close everything */
+        if (H5Dclose(pal_id) < 0) {
+            fprintf(stderr , "Unable to close palette dataset. Aborting.\n");
+            return -1;
+        }
+
+        if (H5Sclose(dataspace_id) < 0) {
+            fprintf(stderr , "Unable to close palette dataspace. Aborting.\n");
+            return -1;
+        }
+    }
+
+    for(i = 0; i < ImageCount; i++) {
+        /* variables for the images */
+        hsize_t dims[2];        /* dimensions for the dataset */
+        hid_t dataspace_id;     /* identifier for the dataspace */
+        hid_t sub_image_id;     /* wierd name to distinguish from the group_id */
+
+        /* variables for the attributes */
+        hsize_t attr_dims[2];   /* dimensions for the attribute */
+        hid_t attr_dataspace_id;/* dataspaces needed for the various attributes */
+        hid_t attr_attr_id;     /* attribute id */
+        BYTE minmax[2];         /* lower and upper minmax values */
+
+        /* initialise minmax */
+        minmax[0] = 0 ;
+        minmax[1] = 255;
+
+        /* get the gifImageDesc */
+        gifImageDesc = GifMemoryStruct.GifImageDesc[i];
+
+        /* set the dimensions */
+        dims[0] = gifImageDesc->ImageHeight;
+        dims[1] = gifImageDesc->ImageWidth;
+
+        /* create the empty dataspace */
+        if ((dataspace_id = H5Screate_simple(2 , dims , NULL)) < 0) {
+            fprintf(stderr , "Could not create image dataspace. Aborting\n");
+            return -1;
+        }
+
+        /* create the image name */
+        sprintf(ImageName , "Image%d" , i);
+
+        /* create the image data set */
+        if ((sub_image_id = H5Dcreate(image_id , ImageName , H5T_NATIVE_UINT8 , dataspace_id , H5P_DEFAULT)) < 0) {
+            fprintf(stderr , "Could not create dataset for image. Aborting... \n");
+            return -1;
+        }
+
+        /* write out the image */
+        /****** Ask Elena about VOIDP ******/
+        if (H5Dwrite(sub_image_id , H5T_NATIVE_UINT8 , H5S_ALL , H5S_ALL , H5P_DEFAULT , (void *)(gifImageDesc->Image)) < 0) {
+            fprintf(stderr , "Error writing image. Aborting... \n");
+            return -1;
+        }
+
+        /* set the attributes */
+        /* This info is available at http://hdf.ncsa.uiuc.edu/HDF5/doc/ImageSpec.html */
+        /* The following attributes must be set for each image:
+        ** ---------------------------------------
+        ** Attribute Name			Value
+        **		CLASS				IMAGE
+        **		IMAGE_VERSION		1.0
+        **		IMAGE_SUBCLASS		IMAGE_BITMAP
+        **		PALETTE				ref. to palette datasets
+        **		IMAGE_MINMAXRANGE	[0,255]
+        ** ---------------------------------------
+        */
+
+        /****************************************
+        ** Attribute: CLASS
+        ** Value	: IMAGE
+        *****************************************/
+
+        if (write_text_attribute(sub_image_id , "CLASS" , "IMAGE",strlen("IMAGE")) < 0) {
+            fprintf(stderr , "Unable to write CLASS = IMAGE attribute\n");
+            return -1;
+        }
+
+        /****************************************
+        ** Attribute: IMAGE_VERSION
+        ** Value	: 1.0
+        *****************************************/
+
+        if (write_text_attribute(sub_image_id , "IMAGE_VERSION" , "1.0",strlen("1.0")) < 0) {
+            fprintf(stderr , "Unable to write IMAGE_VERSION attribute\n");
+            return -1;
+        }
+
+        /****************************************
+        ** Attribute: IMAGE_SUBCLASS
+        ** Value	: IMAGE_BITMAP
+        *****************************************/
+
+        if (write_text_attribute(sub_image_id , "IMAGE_SUBCLASS" , "IMAGE_BITMAP", strlen("IMAGE_BITMAP")) < 0) {
+            fprintf(stderr , "Unable to write IMAGE_SUBCLASS attribute\n");
+            return -1;
+        }
+
+        /****************************************
+        ** Attribute: IMAGE_COLORMODEL
+        ** Value	: RGB
+        *****************************************/
+
+        if (write_text_attribute(sub_image_id , "IMAGE_COLORMODEL" , "RGB", strlen("RGB")) < 0) {
+            fprintf(stderr , "Unable to write IMAGE_SUBCLASS attribute\n");
+            return -1;
+        }
+
+        /****************************************
+        ** Attribute: PALETTE
+        ** Value	: Reference to Palette
+        *****************************************/
+
+        /**** MAKE SURE PALETTE EXISTS!!! ****/
+        if (gifHead.PackedField & 0x80) {
+            /* global palette exists */
+            attr_dims[0] = 1;
+
+            /* create the dataspace for the attribute */
+            attr_dataspace_id = H5Screate_simple(1 , attr_dims , NULL);
+
+            /* create the attribute */
+            attr_attr_id = H5Acreate(sub_image_id , "PALETTE" , H5T_STD_REF_OBJ , attr_dataspace_id , H5P_DEFAULT);
+
+            if (H5Awrite(attr_attr_id , H5T_STD_REF_OBJ , &pal_ref) < 0) {
+                fprintf(stderr , "Unable to write attribute. Aborting \n");
+                return -1;
+            }
+
+            /* close the attribute */
+            if (H5Aclose(attr_attr_id) < 0) {
+                fprintf(stderr , "Unable to close CLASS IMAGE attribute. Aborting.\n");
+                return -1;
+            }
+
+            /* close the dataspace */
+            if (H5Sclose(attr_dataspace_id) < 0) {
+                fprintf(stderr , "Unable to close attribute dataspace. Aborting \n");
+                return -1;
+            }
+        }
+
+        /****************************************
+        ** Attribute: IMAGE_MINMAXRANGE
+        ** Value	: minmax
+        *****************************************/
+
+        attr_dims[0] = 2;
+
+        /* create the dataspace for the attribute */
+        attr_dataspace_id = H5Screate_simple(1 , attr_dims , NULL);
+
+        /* create the attribute */
+        attr_attr_id = H5Acreate(sub_image_id , "IMAGE_MINMAXRANGE" , H5T_NATIVE_UINT8 , attr_dataspace_id , H5P_DEFAULT);
+
+        if (H5Awrite(attr_attr_id , H5T_NATIVE_UINT8 , minmax) < 0) {
+            fprintf(stderr , "Unable to write attribute. Aborting \n");
+            return -1;
+        }
+
+        /* close the attribute */
+        if (H5Aclose(attr_attr_id) < 0) {
+            fprintf(stderr , "Unable to close CLASS IMAGE attribute. Aborting.\n");
+            return -1;
+        }
+
+        /* close the dataspace */
+        if (H5Sclose(attr_dataspace_id) < 0) {
+            fprintf(stderr , "Unable to close attribute dataspace. Aborting \n");
+            return -1;
+        }
+
+        /* close everything */
+        if (H5Dclose(sub_image_id) < 0) {
+            fprintf(stderr , "Unable to close image dataset. Aborting \n");
+            return -1;
+        }
+
+        if (H5Sclose(dataspace_id) < 0) {
+            fprintf(stderr , "Unable to close image dataspace. Aborting \n");
+            return -1;
+        }
+    }
+
+    /* close the main image group */
+    if (H5Gclose(image_id) < 0) {
+        fprintf(stderr , "Could not close the image group. Aborting...\n");
+        return -1;
+    }
+
+    /* close the H5 file */
+    if (H5Fclose(file_id) < 0) {
+        fprintf(stderr , "Could not close HDF5 file. Aborting...\n");
+        return -1;
+    }
+
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/tools/h5diff/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5diff/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5diff/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,249 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+h5diff_main.lo: \
+   $(srcdir)/h5diff_main.c \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/tools/lib/h5trav.h
+testh5diff_attr.lo: \
+   $(srcdir)/testh5diff_attr.c \
+   $(srcdir)/testh5diff.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+testh5diff_basic.lo: \
+   $(srcdir)/testh5diff_basic.c \
+   $(srcdir)/testh5diff.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+testh5diff_dset.lo: \
+   $(srcdir)/testh5diff_dset.c \
+   $(srcdir)/testh5diff.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+testh5diff_util.lo: \
+   $(srcdir)/testh5diff_util.c \
+   $(srcdir)/testh5diff.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+testh5diff_main.lo: \
+   $(srcdir)/testh5diff_main.c \
+   $(srcdir)/testh5diff.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h

Added: packages/hdf5/branches/upstream/current/tools/h5diff/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5diff/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5diff/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,80 @@
+##
+## 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.
+##
+## HDF5 Library Makefile(.in)
+##
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Add include directory to the C preprocessor flags, add -lh5tools and
+## -lhdf5 to the list of libraries.
+##
+CPPFLAGS=-I. -I$(srcdir) -I$(top_builddir)/src -I$(top_srcdir)/src  \
+         -I$(top_srcdir)/tools/lib @CPPFLAGS@
+
+## Test programs and scripts.
+##
+TEST_PROGS=h5difftst
+TEST_SCRIPTS=$(srcdir)/testh5diff.sh
+
+## These are our main targets: library and tools.
+##
+LIBHDF5=$(top_builddir)/src/libhdf5.la
+LIBTOOLS=../lib/libh5tools.la
+
+PUB_PROGS=h5diff
+PROGS=$(PUB_PROGS) $(TEST_PROGS) 
+
+## Source and object files for the library; do not install
+##
+LIB_SRC=
+LIB_OBJ=$(LIB_SRC:.c=.lo)
+PUB_LIB=
+
+## Temporary files.  *.h5 are generated by h5diff.  They should
+## copied to the testfiles/ directory if update is required.
+MOSTLYCLEAN=*.h5
+
+## Source and object files for programs...
+##
+PROG_SRC= h5diff_main.c  testh5diff_attr.c testh5diff_basic.c testh5diff_dset.c testh5diff_util.c testh5diff_main.c
+PROG_OBJ=$(PROG_SRC:.c=.lo)
+OBJS= h5diff_main.lo
+TEST_OBJS=testh5diff_attr.lo testh5diff_basic.lo testh5diff_dset.lo testh5diff_util.lo testh5diff_main.lo
+
+PRIVATE_HDR=testh5diff.h
+
+## Source and object files for the tests
+##
+TEST_SRC=
+TEST_OBJ=$(TEST_SRC:.c=.lo)
+
+## Programs have to be built before they can be tested!
+##
+check test _test: $(PROGS)
+
+## How to build the programs...They all depend on the hdf5 library and
+## the tools library compiled in this directory.
+##
+$(PROGS): $(LIBTOOLS) $(LIBHDF5)
+
+h5diff: $(OBJS)
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(OBJS) $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+h5difftst: $(TEST_OBJS)
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(TEST_OBJS)  $(LIBTOOLS)  $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/tools/h5diff/h5diff_main.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5diff/h5diff_main.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5diff/h5diff_main.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,384 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "h5diff.h"
+#include <stdlib.h>
+#include <assert.h>
+
+static void usage(void);
+static int check_n_input( const char* );
+static int check_f_input( const char* );
+
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ * Purpose: h5diff main program
+ *
+ * Return: An  exit status of 0 means no differences were found, 1 means some
+ *   differences were found.
+ *
+ * Programmer: Pedro Vicente Nunes, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ * Comments:
+ *
+ * Modifications: July 2004
+ *  Introduced the four modes:
+ *   Normal mode: print the number of differences found and where they occured
+ *   Report mode: print the above plus the differences
+ *   Verbose mode: print the above plus a list of objects and warnings
+ *   Quiet mode: do not print output
+ *
+	* Modifications: October 2005
+	*  Introduced a new field 'not_cmp' to 'diff_opt_t' that detects
+	*  if some objects are not comparable and prints the message
+	*  "Some objects are not comparable"
+ *-------------------------------------------------------------------------
+ */
+
+int main(int argc, const char *argv[])
+{
+ int        i;
+ const char *s = NULL;
+ const char *fname1 = NULL;
+ const char *fname2 = NULL;
+ const char *objname1  = NULL;
+ const char *objname2  = NULL;
+ hsize_t    nfound=0;
+ int        ret;
+ diff_opt_t options;
+
+ memset(&options, 0, sizeof (diff_opt_t));
+
+/*-------------------------------------------------------------------------
+ * initial check of command line options
+ *-------------------------------------------------------------------------
+ */
+
+ if ( argc==2 && (strcmp("-h",argv[1])==0) )
+  usage();
+
+ if ( argc<3 )
+ {
+  printf("Number of arguments is only %d\n", argc );
+  usage();
+ }
+
+/*-------------------------------------------------------------------------
+ * file names are first
+ *-------------------------------------------------------------------------
+ */
+ if ( argc>=3 )
+ {
+  fname1 = argv[1];
+  fname2 = argv[2];
+ }
+/*-------------------------------------------------------------------------
+ * parse command line options
+ *-------------------------------------------------------------------------
+ */
+ for (i=3; i<argc ; i++)
+ {
+  /* get the single-letter switches */
+  if ( '-'==argv[i][0] )
+  {
+   for (s=argv[i]+1; *s; s++)
+   {
+    switch (*s) {
+    default:
+    printf("-%s is an invalid option\n", s );
+    usage();
+    break;
+    case 'h':
+     usage();
+     break;
+    case 'v':
+     options.m_verbose = 1;
+     break;
+    case 'q':
+     /* use quiet mode; supress the message "0 differences found" */
+     options.m_quiet = 1;
+     break;
+    case 'r':
+     options.m_report = 1;
+     break;
+    case 'd':
+     /* if it is not another option */
+     if ( i<argc-1 &&'-' != argv[i+1][0] )
+     {
+      options.d=1;
+      if ( check_f_input(argv[i+1])==-1)
+      {
+       printf("<-d %s> is not a valid option\n", argv[i+1] );
+       usage();
+      }
+      options.delta = atof(argv[i+1]);
+      i++; /* go to next */
+     }
+     else
+     {
+      printf("Not a valid -d option\n");
+      usage();
+     }
+     break;
+    case 'p':
+     if ( i<argc-1 &&'-' !=argv[i+1][0] )
+     {
+      options.p=1;
+      if ( check_f_input(argv[i+1])==-1)
+      {
+       printf("<-p %s> is not a valid option\n", argv[i+1] );
+       usage();
+      }
+      options.percent = atof(argv[i+1]);
+      i++; /* go to next */
+     }
+     else
+     {
+      printf("Not a valid -p option\n");
+      usage();
+     }
+     break;
+    case 'n':
+     if ( i<argc-1 && '-' !=argv[i+1][0] )
+     {
+      options.n=1;
+      if ( check_n_input(argv[i+1])==-1)
+      {
+       printf("<-n %s> is not a valid option\n", argv[i+1] );
+       usage();
+      }
+      options.count = atol(argv[i+1]);
+      i++; /* go to next */
+     }
+     else
+     {
+      printf("Not a valid -n option\n");
+      usage();
+     }
+     break;
+    } /*switch*/
+   } /*for*/
+  } /*if*/
+
+  else /* not single-letter switches */
+
+  {
+   /* check if it is not a -d, -p parameter */
+   if ( '-'==argv[i-1][0] && ('d'==argv[i-1][1] ||'p'==argv[i-1][1] ))
+    continue;
+   else
+   {
+    if ( objname1==NULL )
+     objname1 = argv[i];
+    if ( objname2==NULL )
+    {
+     /* check if we have a second object name */
+     if ( i+1<argc && '-' !=argv[i+1][0] ) {
+      /* yes */
+      objname2 = argv[i+1];
+      i++; /* go to next */
+     }
+     else
+      /* no */
+      objname2 = objname1;
+    } /*objname2*/
+   } /*else*/
+  } /*else*/
+
+ }/*for*/
+
+ nfound = h5diff(fname1,fname2,objname1,objname2,&options);
+
+/*-------------------------------------------------------------------------
+ * print how many differences were found
+ *-------------------------------------------------------------------------
+ */
+ if (!options.m_quiet)
+ {
+  if (options.cmn_objs==0)
+  {
+   printf("No common objects found. Files are not comparable.\n");
+   if (!options.m_verbose)
+    printf("Use -v for a list of objects.\n");
+  }
+  else
+  {
+   if (!options.err_stat)
+    print_found(nfound);
+  }
+
+		if (options.not_cmp==1)
+  {
+			printf("--------------------------------\n");
+   printf("Some objects are not comparable\n");
+			printf("--------------------------------\n");
+   if (!options.m_verbose)
+    printf("Use -v for a list of objects.\n");
+  }
+
+
+ }
+
+/*-------------------------------------------------------------------------
+ * exit code
+ *   >0 if differences, 0 if no differences, <0 if error
+ *-------------------------------------------------------------------------
+ */
+
+ ret= (nfound==0 ? 0 : 1 );
+ if (options.err_stat)
+  ret=-1;
+ return ret;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: check_n_input
+ *
+ * Purpose: check for valid input
+ *
+ * Return: 1 for ok, -1 for fail
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static
+int check_n_input( const char *str )
+{
+ unsigned i;
+ char c;
+
+ for ( i = 0; i < strlen(str); i++)
+ {
+  c = str[i];
+  if ( i==0 )
+  {
+   if ( c < 49 || c > 57  ) /* ascii values between 1 and 9 */
+    return -1;
+  }
+  else
+   if ( c < 48 || c > 57  ) /* 0 also */
+    return -1;
+ }
+ return 1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: check_f_input
+ *
+ * Purpose: check for a valid floating point input
+ *
+ * Return: 1 for ok, -1 for fail
+ *
+ * Date: May 9, 2003
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static
+int check_f_input( const char *str )
+{
+ double x;
+
+ /*
+ the atof return value on a hexadecimal input is different
+ on some systems; we do a character check for this
+ */
+ if (strlen(str)>2 && str[0]=='0' && str[1]=='x')
+  return -1;
+
+ x=atof(str);
+ if (x==0)
+  return -1;
+
+ return 1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: usage
+ *
+ * Purpose: print a usage message
+ *
+ * Return: void
+ *
+ *-------------------------------------------------------------------------
+ */
+static
+void usage(void)
+{
+ printf("Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] \n");
+ printf("\n");
+ printf("file1             File name of the first HDF5 file\n");
+ printf("file2             File name of the second HDF5 file\n");
+ printf("[obj1]            Name of an HDF5 object, in absolute path\n");
+ printf("[obj2]            Name of an HDF5 object, in absolute path\n");
+ printf("[OPTIONS] are:\n");
+ printf("[-h]              Print out this information\n");
+ printf("[-r]              Report mode. Print the differences\n");
+ printf("[-v]              Verbose mode. Print the differences, list of objects, warnings\n");
+ printf("[-q]              Quiet mode. Do not do output\n");
+ printf("[-n count]        Print difference up to count number\n");
+ printf("[-d delta]        Print difference when it is greater than limit delta\n");
+ printf("[-p relative]     Print difference when it is greater than a relative limit\n");
+ printf("\n");
+ printf("Items in [] are optional\n");
+ printf("[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)\n");
+ printf("The 'count' value must be a positive integer\n");
+ printf("The 'delta' and 'relative' values must be positive numbers\n");
+ printf("The -d compare criteria is |a - b| > delta\n");
+ printf("The -p compare criteria is |1 - b/a| > relative\n");
+ printf("\n");
+ printf("h5diff has four modes of output:\n");
+ printf(" Normal mode: print the number of differences found and where they occured\n");
+ printf(" Report mode: print the above plus the differences\n");
+ printf(" Verbose mode: print the above plus a list of objects and warnings\n");
+ printf(" Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)\n");
+ printf("\n");
+ printf("Examples of use:\n");
+ printf("\n");
+ printf("1) h5diff file1 file2 /g1/dset1 /g1/dset2\n");
+ printf("\n");
+ printf("   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2\n");
+ printf("\n");
+ printf("2) h5diff file1 file2 /g1/dset1\n");
+ printf("\n");
+ printf("   Compares object '/g1/dset1' in both files\n");
+ printf("\n");
+ printf("3) h5diff file1 file2\n");
+ printf("\n");
+ printf("   Compares all objects in both files\n");
+ printf("\n");
+ printf("Note)  file1 and file2 can be the same file. Use\n");
+ printf("\n");
+ printf("   h5diff file1 file1 /g1/dset1 /g1/dset2\n");
+ printf("\n");
+ printf("   to compare '/g1/dset1' and '/g1/dset2' in the same file\n");
+ exit(0);
+}
+
+
+

Added: packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff.h
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,53 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "hdf5.h"
+#include "H5private.h"
+
+
+int test_basic(const char *file1,
+               const char *file2);
+
+int test_types(const char *file1,
+               const char *file2);
+
+int test_native(const char *file1,
+                const char *file2);
+
+
+int test_dsetall(const char *file,
+                 int make_diffs /* flag to modify data buffers */);
+
+int test_attr(const char *file,
+              int make_diffs /* flag to modify data buffers */);
+
+
+int write_attr(hid_t loc_id,
+               int rank,
+               hsize_t *dims,
+               const char *attr_name,
+               hid_t type_id,
+               void *buf);
+
+
+int write_dset( hid_t loc_id,
+                int rank,
+                hsize_t *dims,
+                const char *dset_name,
+                hid_t type_id,
+                void *buf );
+
+

Added: packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff.sh
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,318 @@
+#! /bin/sh
+#
+# 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.
+#
+# Tests for the h5diff tool
+
+H5DIFF=h5diff               # The tool name
+H5DIFF_BIN=`pwd`/$H5DIFF    # The path of the tool binary
+
+CMP='cmp -s'
+DIFF='diff -c'
+
+nerrors=0
+verbose=yes
+
+# The build (current) directory might be different than the source directory.
+if test -z "$srcdir"; then
+   srcdir=.
+fi
+
+test -d ../testfiles || mkdir ../testfiles
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Testing".
+#
+TESTING() {
+   SPACES="                                                               "
+   echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
+}
+
+# Run a test and print PASS or *FAIL*.  If a test fails then increment
+# the `nerrors' global variable and (if $verbose is set) display the
+# difference between the actual output and the expected output. The
+# expected output is given as the first argument to this function and
+# the actual output file is calculated by replacing the `.ddl' with
+# `.out'.  The actual output is not removed if $HDF5_NOCLEANUP has a
+# non-zero value.
+#
+TOOLTEST() {
+   expect="$srcdir/../testfiles/$1"
+   actual="../testfiles/`basename $1 .txt`.out"
+   actual_err="../testfiles/`basename $1 .txt`.err"
+   shift
+
+   # Run test.
+   # Tflops interprets "$@" as "" when no parameter is given (e.g., the
+   # case of missing file name).  Changed it to use $@ till Tflops fixes it.
+   TESTING $H5DIFF $@
+   (
+      echo "#############################"
+      echo "Expected output for '$H5DIFF $@'" 
+      echo "#############################"
+      cd $srcdir/../testfiles
+      if [ "`uname -s`" = "TFLOPS O/S" ]; then
+        $RUNSERIAL $H5DIFF_BIN $@
+      else
+        $RUNSERIAL $H5DIFF_BIN "$@"
+      fi
+   ) >$actual 2>$actual_err
+   cat $actual_err >> $actual
+
+   if [ ! -f $expect ]; then
+   # Create the expect file if it doesn't yet exist.
+      echo " CREATED"
+      cp $actual $expect
+   elif $CMP $expect $actual; then
+      echo " PASSED"
+   else
+      echo "*FAILED*"
+      echo "    Expected result (*.txt) differs from actual result (*.out)"
+      nerrors="`expr $nerrors + 1`"
+      test yes = "$verbose" && $DIFF $expect $actual |sed 's/^/    /'
+   fi
+
+   # Clean up output file
+     if test -z "$HDF5_NOCLEANUP"; then
+     rm -f $actual $actual_err
+     fi
+}
+
+##############################################################################
+##############################################################################
+###			  T H E   T E S T S                                            ###
+##############################################################################
+##############################################################################
+
+# ##############################################################################
+# # Common usage
+# ##############################################################################
+
+
+# 1.0
+TOOLTEST h5diff_10.txt -h
+
+# 1.1 normal mode
+TOOLTEST h5diff_11.txt  file1.h5 file2.h5 
+
+# 1.2 normal mode with objects
+TOOLTEST h5diff_12.txt  file1.h5 file2.h5  g1/dset1 g1/dset2
+
+# 1.3 report mode
+TOOLTEST h5diff_13.txt file1.h5 file2.h5 -r
+
+# 1.4 report  mode with objects
+TOOLTEST h5diff_14.txt  file1.h5 file2.h5  -r g1/dset1 g1/dset2
+
+# 1.5 with -d
+TOOLTEST h5diff_15.txt file1.h5 file2.h5 -r -d 5 g1/dset3 g1/dset4
+
+# 1.6 with -p
+TOOLTEST h5diff_16.txt file1.h5 file2.h5 -r -p 0.05 g1/dset3 g1/dset4
+
+# 1.7 verbose mode
+TOOLTEST h5diff_17.txt file1.h5 file2.h5 -v  
+
+# 1.8 quiet mode 
+TOOLTEST h5diff_18.txt file1.h5 file2.h5 -q
+
+# ##############################################################################
+# # not comparable types
+# ##############################################################################
+
+# 2.0
+TOOLTEST h5diff_20.txt file3.h5 file3.h5 -v dset group
+
+# 2.1
+TOOLTEST h5diff_21.txt file3.h5 file3.h5 -v dset link
+
+# 2.2
+TOOLTEST h5diff_22.txt file3.h5 file3.h5 -v dset type
+
+# 2.3
+TOOLTEST h5diff_23.txt file3.h5 file3.h5 -v group group
+
+# 2.4
+TOOLTEST h5diff_24.txt file3.h5 file3.h5 -v type type
+
+# 2.5
+TOOLTEST h5diff_25.txt file3.h5 file3.h5 -v link link
+
+
+# ##############################################################################
+# # Dataset types
+# ##############################################################################
+
+# 5.0
+TOOLTEST h5diff_50.txt file4.h5 file4.h5 -v dset0a dset0b
+
+# 5.1
+TOOLTEST h5diff_51.txt file4.h5 file4.h5 -v dset1a dset1b
+
+# 5.2
+TOOLTEST h5diff_52.txt file4.h5 file4.h5 -v dset2a dset2b
+
+# 5.3
+TOOLTEST h5diff_53.txt file4.h5 file4.h5 -v dset3a dset4b
+
+# 5.4
+TOOLTEST h5diff_54.txt file4.h5 file4.h5 -v dset4a dset4b
+
+# 5.5
+TOOLTEST h5diff_55.txt file4.h5 file4.h5 -v dset5a dset5b
+
+# 5.6
+TOOLTEST h5diff_56.txt file4.h5 file4.h5 -v dset6a dset6b
+
+# 5.7
+TOOLTEST h5diff_57.txt file4.h5 file4.h5 -v dset7a dset7b
+
+# 5.8 long_long test; different format of long_long print  in Linux and IRIX
+#TOOLTEST h5diff_58.txt file4.h5 file4.h5 dset8a dset8b
+
+# ##############################################################################
+# # Error messages
+# ##############################################################################
+
+
+# 6.0: Check if the command line number of arguments is less than 3
+TOOLTEST h5diff_600.txt file1.h5 
+
+# 6.1: Check for invalid options
+TOOLTEST h5diff_601.txt file1.h5 file2.h5 -x 
+
+# ##############################################################################
+# # -d 
+# ##############################################################################
+
+# 6.2: no value
+TOOLTEST h5diff_602.txt file1.h5 file2.h5  -d g1/dset3 g1/dset4
+
+# 6.3: negative value
+TOOLTEST h5diff_603.txt file1.h5 file2.h5  -d -4 g1/dset3 g1/dset4
+
+# 6.4: zero
+TOOLTEST h5diff_604.txt file1.h5 file2.h5  -d 0 g1/dset3 g1/dset4
+
+# 6.5: non number
+TOOLTEST h5diff_605.txt file1.h5 file2.h5  -d u g1/dset3 g1/dset4
+
+# 6.6: hexadecimal
+TOOLTEST h5diff_606.txt file1.h5 file2.h5 -d 0x1 g1/dset3 g1/dset4
+
+# 6.7: string
+TOOLTEST h5diff_607.txt file1.h5 file2.h5  -d "1" g1/dset3 g1/dset4
+
+# 6.8: repeated option
+TOOLTEST h5diff_608.txt file1.h5 file2.h5  -d 1 -d 2 g1/dset3 g1/dset4
+
+# 6.9: number larger than biggest difference
+TOOLTEST h5diff_609.txt file1.h5 file2.h5  -d 200 g1/dset3 g1/dset4
+
+# 6.10: number smaller than smallest difference
+TOOLTEST h5diff_610.txt file1.h5 file2.h5  -d 1 g1/dset3 g1/dset4
+
+
+# ##############################################################################
+# # -p
+# ##############################################################################
+
+
+# 6.11: no value
+TOOLTEST h5diff_611.txt file1.h5 file2.h5 -r -p g1/dset3 g1/dset4
+
+# 6.12: negative value
+TOOLTEST h5diff_612.txt file1.h5 file2.h5 -p -4 g1/dset3 g1/dset4
+
+# 6.13: zero
+TOOLTEST h5diff_613.txt file1.h5 file2.h5 -p 0 g1/dset3 g1/dset4
+
+# 6.14: non number
+TOOLTEST h5diff_614.txt file1.h5 file2.h5 -p u g1/dset3 g1/dset4
+
+# 6.15: hexadecimal
+TOOLTEST h5diff_615.txt file1.h5 file2.h5 -p 0x1 g1/dset3 g1/dset4
+
+# 6.16: string
+TOOLTEST h5diff_616.txt file1.h5 file2.h5 -p "0.21" g1/dset3 g1/dset4
+
+# 6.17: repeated option
+TOOLTEST h5diff_617.txt file1.h5 file2.h5 -p 0.21 -p 0.22 g1/dset3 g1/dset4
+
+# 6.18: number larger than biggest difference
+TOOLTEST h5diff_618.txt file1.h5 file2.h5 -p 2 g1/dset3 g1/dset4
+
+# 6.19: number smaller than smallest difference
+TOOLTEST h5diff_619.txt file1.h5 file2.h5 -p 0.005 g1/dset3 g1/dset4
+
+
+
+# ##############################################################################
+# # -n
+# ##############################################################################
+
+
+# 6.20: no value
+TOOLTEST h5diff_620.txt file1.h5 file2.h5 -n g1/dset3 g1/dset4
+
+# 6.21: negative value
+TOOLTEST h5diff_621.txt file1.h5 file2.h5 -n -4 g1/dset3 g1/dset4
+
+# 6.22: zero
+TOOLTEST h5diff_622.txt file1.h5 file2.h5 -n 0 g1/dset3 g1/dset4
+
+# 6.23: non number
+TOOLTEST h5diff_623.txt file1.h5 file2.h5 -n u g1/dset3 g1/dset4
+
+# 6.24: hexadecimal
+TOOLTEST h5diff_624.txt file1.h5 file2.h5 -n 0x1 g1/dset3 g1/dset4
+
+# 6.25: string
+TOOLTEST h5diff_625.txt file1.h5 file2.h5 -n "2" g1/dset3 g1/dset4
+
+# 6.26: repeated option
+TOOLTEST h5diff_626.txt file1.h5 file2.h5 -n 2 -n 3 g1/dset3 g1/dset4
+
+# 6.27: number larger than biggest difference
+TOOLTEST h5diff_627.txt file1.h5 file2.h5 -n 200 g1/dset3 g1/dset4
+
+# 6.28: number smaller than smallest difference
+TOOLTEST h5diff_628.txt file1.h5 file2.h5 -n 1 g1/dset3 g1/dset4
+
+# ##############################################################################
+# # non valid files
+# ##############################################################################
+
+TOOLTEST h5diff_629.txt file1.h6 file2.h6
+
+# ##############################################################################
+# # attributes
+# ##############################################################################
+
+TOOLTEST h5diff_70.txt file5.h5 file6.h5 -v
+
+# ##############################################################################
+# # all dataset datatypes
+# ##############################################################################
+
+TOOLTEST h5diff_80.txt file7.h5 file8.h5 -v
+
+# ##############################################################################
+# # END
+# ##############################################################################
+
+if test $nerrors -eq 0 ; then
+   echo "All $H5DIFF tests passed."
+fi
+
+exit $nerrors


Property changes on: packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff.sh
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_attr.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_attr.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_attr.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1088 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "testh5diff.h"
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: write_attr_in
+ *
+ * Purpose: write attributes in LOC_ID (dataset, group, named datatype)
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 12, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+static void write_attr_in(hid_t loc_id,
+                   const char* dset_name, /* for saving reference to dataset*/
+                   hid_t file_id,
+                   int make_diffs /* flag to modify data buffers */)
+{
+ /* Compound datatype */
+ typedef struct s_t
+ {
+  char   a;
+  double b;
+ } s_t;
+
+ typedef enum
+ {
+  RED,
+  GREEN
+ } e_t;
+
+ hid_t   attr_id;
+ hid_t   space_id;
+ hid_t   type_id;
+ herr_t  status;
+ int     val, i, j, k, n;
+ float   f;
+
+ /* create 1D attributes with dimension [2], 2 elements */
+ hsize_t    dims[1]={2};
+ char       buf1[2][2]= {"ab","de"};        /* string */
+ char       buf2[2]= {1,2};                 /* bitfield, opaque */
+ s_t        buf3[2]= {{1,2},{3,4}};         /* compound */
+ hobj_ref_t buf4[2];                        /* reference */
+ e_t        buf45[2]= {RED,RED};            /* enum */
+ hvl_t      buf5[2];                        /* vlen */
+ hsize_t    dimarray[1]={3};                /* array dimension */
+ int        buf6[2][3]= {{1,2,3},{4,5,6}};  /* array */
+ int        buf7[2]= {1,2};                 /* integer */
+ float      buf8[2]= {1,2};                 /* float */
+
+ /* create 2D attributes with dimension [3][2], 6 elements */
+ hsize_t    dims2[2]={3,2};
+ char       buf12[6][2]= {"ab","cd","ef","gh","ij","kl"};         /* string */
+ char       buf22[3][2]= {{1,2},{3,4},{5,6}};                     /* bitfield, opaque */
+ s_t        buf32[6]= {{1,2},{3,4},{5,6},{7,8},{9,10},{11,12}};   /* compound */
+ hobj_ref_t buf42[3][2];                                          /* reference */
+ e_t        buf452[3][2];                                         /* enum */
+ hvl_t      buf52[3][2];                                          /* vlen */
+ int        buf62[6][3]= {{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15},{16,17,18}};  /* array */
+ int        buf72[3][2]= {{1,2},{3,4},{5,6}};                     /* integer */
+ float      buf82[3][2]= {{1,2},{3,4},{5,6}};                     /* float */
+
+ /* create 3D attributes with dimension [4][3][2], 24 elements */
+ hsize_t    dims3[3]={4,3,2};
+ char       buf13[24][2]= {"ab","cd","ef","gh","ij","kl","mn","pq",
+ "rs","tu","vw","xz","AB","CD","EF","GH",
+ "IJ","KL","MN","PQ","RS","TU","VW","XZ"};  /* string */
+ char       buf23[4][3][2];    /* bitfield, opaque */
+ s_t        buf33[4][3][2];    /* compound */
+ hobj_ref_t buf43[4][3][2];    /* reference */
+ e_t        buf453[4][3][2];   /* enum */
+ hvl_t      buf53[4][3][2];    /* vlen */
+ int        buf63[24][3];      /* array */
+ int        buf73[4][3][2];    /* integer */
+ float      buf83[4][3][2];    /* float */
+
+
+/*-------------------------------------------------------------------------
+ * 1D attributes
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+   for (j=0; j<2; j++)
+   {
+    buf1[i][j]='z';
+   }
+ }
+ /*
+ buf1[2][2]= {"ab","de"};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ Attribute:   <string> and <string>
+ position      string of </g1>  string of </g1> difference
+ ------------------------------------------------------------
+[ 0 ]          a                z
+[ 0 ]          b                z
+[ 1 ]          d                z
+[ 1 ]          e                z
+ */
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ write_attr(loc_id,1,dims,"string",type_id,buf1);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+   buf2[i]=buf2[1]=0;
+ }
+ /*
+ buf2[2]= {1,2};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ Attribute:   <bitfield> and <bitfield>
+ position      bitfield of </g1> bitfield of </g1> difference
+ position        opaque of </g1> opaque of </g1> difference
+------------------------------------------------------------
+[ 0 ]          1               0               1
+[ 1 ]          2               0               2
+ */
+
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_attr(loc_id,1,dims,"bitfield",type_id,buf2);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+
+ /*
+ buf2[2]= {1,2};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ Attribute:   <opaque> and <opaque>
+ position     opaque of </g1> opaque of </g1> difference
+ position        opaque of </g1> opaque of </g1> difference
+------------------------------------------------------------
+[ 0 ]          1               0               1
+[ 1 ]          2               0               2
+*/
+
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_attr(loc_id,1,dims,"opaque",type_id,buf2);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+  {
+   buf3[i].a=0; buf3[i].b=0;
+  }
+ }
+
+ /*
+ buf3[2]= {{1,2},{3,4}};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ Attribute:   <compound> and <compound>
+ position        compound of </g1> compound of </g1> difference
+ ------------------------------------------------------------
+ [ 0 ]          1               5               4
+ [ 0 ]          2               5               3
+ [ 1 ]          3               5               2
+ [ 1 ]          4               5               1
+ */
+
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_attr(loc_id,1,dims,"compound",type_id,buf3);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  status=H5Rcreate(&buf4[0],file_id,dset_name,H5R_OBJECT,-1);
+  status=H5Rcreate(&buf4[1],file_id,dset_name,H5R_OBJECT,-1);
+  write_attr(loc_id,1,dims,"reference",H5T_STD_REF_OBJ,buf4);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+  {
+   buf45[i]=GREEN;
+  }
+ }
+ /*
+ buf45[2]= {RED,RED};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ Attribute:   <enum> and <enum>
+ position     enum of </g1>   enum of </g1>   difference
+------------------------------------------------------------
+[ 0 ]          RED              GREEN
+[ 1 ]          RED              GREEN
+ */
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_attr(loc_id,1,dims,"enum",type_id,buf45);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+
+ buf5[0].len = 1;
+ buf5[0].p = malloc( 1 * sizeof(int));
+ ((int *)buf5[0].p)[0]=1;
+ buf5[1].len = 2;
+ buf5[1].p = malloc( 2 * sizeof(int));
+ ((int *)buf5[1].p)[0]=2;
+ ((int *)buf5[1].p)[1]=3;
+
+ if (make_diffs)
+ {
+  ((int *)buf5[0].p)[0]=0;
+  ((int *)buf5[1].p)[0]=0;
+  ((int *)buf5[1].p)[1]=0;
+ }
+ /*
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ position        vlen of </g1>   vlen of </g1>   difference
+------------------------------------------------------------
+[ 0 ]          1               0               1
+[ 1 ]          2               0               2
+[ 1 ]          3               0               3
+ */
+
+ space_id = H5Screate_simple(1,dims,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ attr_id = H5Acreate(loc_id,"vlen",type_id,space_id,H5P_DEFAULT);
+ status = H5Awrite(attr_id,type_id,buf5);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf5);
+ assert(status>=0);
+ status = H5Aclose(attr_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+   for (j=0; j<3; j++)
+   {
+    buf6[i][j]=0;
+   }
+ }
+ /*
+ buf6[2][3]= {{1,2,3},{4,5,6}};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ Attribute:   <array> and <array>
+position        array of </g1>  array of </g1>  difference
+------------------------------------------------------------
+[ 0 ]          1               0               1
+[ 0 ]          2               0               2
+[ 0 ]          3               0               3
+[ 1 ]          4               0               4
+[ 1 ]          5               0               5
+[ 1 ]          6               0               6
+ */
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_attr(loc_id,1,dims,"array",type_id,buf6);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+  {
+   buf7[i]=0;
+   buf8[i]=0;
+  }
+ }
+ /*
+ buf7[2]= {1,2};
+ buf8[2]= {1,2};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ position        integer of </g1> integer of </g1> difference
+ ------------------------------------------------------------
+ [ 0 ]          1               0               1
+ [ 1 ]          2               0               2
+ position        float of </g1>  float of </g1>  difference
+ ------------------------------------------------------------
+ [ 0 ]          1               0               1
+ [ 1 ]          2               0               2
+ */
+ write_attr(loc_id,1,dims,"integer",H5T_NATIVE_INT,buf7);
+ write_attr(loc_id,1,dims,"float",H5T_NATIVE_FLOAT,buf8);
+
+
+/*-------------------------------------------------------------------------
+ * 2D attributes
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+ if (make_diffs)
+ {
+  memset(buf12, 'z', sizeof buf12);
+ }
+
+ /*
+ buf12[6][2]= {"ab","cd","ef","gh","ij","kl"};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Attribute:   <string2D> and <string2D>
+ position        string2D of </g1> string2D of </g1> difference
+ ------------------------------------------------------------
+[ 0 0 ]          a                z
+[ 0 0 ]          b                z
+[ 0 1 ]          c                z
+[ 0 1 ]          d                z
+[ 1 0 ]          e                z
+[ 1 0 ]          f                z
+[ 1 1 ]          g                z
+[ 1 1 ]          h                z
+[ 2 0 ]          i                z
+[ 2 0 ]          j                z
+[ 2 1 ]          k                z
+[ 2 1 ]          l                z
+ */
+
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ write_attr(loc_id,2,dims2,"string2D",type_id,buf12);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf22,0,sizeof buf22);
+ }
+
+ /*
+ buf22[3][2]= {{1,2},{3,4},{5,6}};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Attribute:   <bitfield2D> and <bitfield2D>
+ position        bitfield2D of </g1> bitfield2D of </g1> difference
+------------------------------------------------------------
+[ 0 0 ]          1               0               1
+[ 0 1 ]          2               0               2
+[ 1 0 ]          3               0               3
+[ 1 1 ]          4               0               4
+[ 2 0 ]          5               0               5
+[ 2 1 ]          6               0               6
+ */
+
+
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_attr(loc_id,2,dims2,"bitfield2D",type_id,buf22);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+
+ /*
+ buf22[3][2]= {{1,2},{3,4},{5,6}};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Attribute:   <opaque2D> and <opaque2D>
+ position        opaque2D of </g1> opaque2D of </g1> difference
+------------------------------------------------------------
+[ 0 0 ]          1               0               1
+[ 0 1 ]          2               0               2
+[ 1 0 ]          3               0               3
+[ 1 1 ]          4               0               4
+[ 2 0 ]          5               0               5
+[ 2 1 ]          6               0               6
+ */
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_attr(loc_id,2,dims2,"opaque2D",type_id,buf22);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+ if (make_diffs)
+ {
+  memset(buf32,0,sizeof buf32);
+ }
+
+ /*
+ buf32[6]= {{1,2},{3,4},{5,6},{7,8},{9,10},{11,12}};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Attribute:   <opaque2D> and <opaque2D>
+ position        opaque2D of </g1> opaque2D of </g1> difference
+------------------------------------------------------------
+[ 0 0 ]          1               0               1
+[ 0 1 ]          2               0               2
+[ 1 0 ]          3               0               3
+[ 1 1 ]          4               0               4
+[ 2 0 ]          5               0               5
+[ 2 1 ]          6               0               6
+ */
+
+
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_attr(loc_id,2,dims2,"compound2D",type_id,buf32);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  for (i = 0; i < 3; i++) {
+   for (j = 0; j < 2; j++) {
+    status=H5Rcreate(&buf42[i][j],file_id,dset_name,H5R_OBJECT,-1);
+   }
+  }
+  write_attr(loc_id,2,dims2,"reference2D",H5T_STD_REF_OBJ,buf42);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+ for (i=0; i<3; i++)
+  for (j=0; j<2; j++)
+  {
+   if (make_diffs) buf452[i][j]=GREEN; else buf452[i][j]=RED;
+  }
+
+/*
+Attribute:   <enum2D> and <enum2D>
+position        enum2D of </g1> enum2D of </g1> difference
+------------------------------------------------------------
+[ 0 0 ]          RED              GREEN
+[ 0 1 ]          RED              GREEN
+[ 1 0 ]          RED              GREEN
+[ 1 1 ]          RED              GREEN
+[ 2 0 ]          RED              GREEN
+[ 2 1 ]          RED              GREEN
+*/
+
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_attr(loc_id,2,dims2,"enum2D",type_id,buf452);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+ n=0;
+ for (i = 0; i < 3; i++) {
+  for (j = 0; j < 2; j++) {
+    int l;
+    buf52[i][j].p = malloc((i + 1) * sizeof(int));
+    buf52[i][j].len = i + 1;
+    for (l = 0; l < i + 1; l++)
+    if (make_diffs)((int *)buf52[i][j].p)[l] = 0;
+    else ((int *)buf52[i][j].p)[l] = n++;
+  }
+ }
+
+ /*
+ position        vlen2D of </g1> vlen2D of </g1> difference
+------------------------------------------------------------
+[ 0 1 ]          1               0               1
+[ 1 0 ]          2               0               2
+[ 1 0 ]          3               0               3
+[ 1 1 ]          4               0               4
+[ 1 1 ]          5               0               5
+[ 2 0 ]          6               0               6
+[ 2 0 ]          7               0               7
+[ 2 0 ]          8               0               8
+[ 2 1 ]          9               0               9
+[ 2 1 ]          10              0               10
+[ 2 1 ]          11              0               11
+*/
+
+ space_id = H5Screate_simple(2,dims2,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ attr_id = H5Acreate(loc_id,"vlen2D",type_id,space_id,H5P_DEFAULT);
+ status = H5Awrite(attr_id,type_id,buf52);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf52);
+ assert(status>=0);
+ status = H5Aclose(attr_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf62,0,sizeof buf62);
+ }
+ /*
+ buf62[6][3]= {{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15},{16,17,18}};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+Attribute:   <array2D> and <array2D>
+position        array2D of </g1> array2D of </g1> difference
+------------------------------------------------------------
+[ 0 0 ]          1               0               1
+[ 0 0 ]          2               0               2
+[ 0 0 ]          3               0               3
+[ 0 1 ]          4               0               4
+[ 0 1 ]          5               0               5
+[ 0 1 ]          6               0               6
+[ 1 0 ]          7               0               7
+[ 1 0 ]          8               0               8
+[ 1 0 ]          9               0               9
+[ 1 1 ]          10              0               10
+[ 1 1 ]          11              0               11
+[ 1 1 ]          12              0               12
+[ 2 0 ]          13              0               13
+[ 2 0 ]          14              0               14
+[ 2 0 ]          15              0               15
+[ 2 1 ]          16              0               16
+[ 2 1 ]          17              0               17
+[ 2 1 ]          18              0               18
+ */
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_attr(loc_id,2,dims2,"array2D",type_id,buf62);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf72,0,sizeof buf72);
+  memset(buf82,0,sizeof buf82);
+ }
+/*
+Attribute:   <integer2D> and <integer2D>
+position        integer2D of </g1> integer2D of </g1> difference
+------------------------------------------------------------
+[ 0 0 ]          1               0               1
+[ 0 1 ]          2               0               2
+[ 1 0 ]          3               0               3
+[ 1 1 ]          4               0               4
+[ 2 0 ]          5               0               5
+[ 2 1 ]          6               0               6
+6 differences found
+Attribute:   <float2D> and <float2D>
+position        float2D of </g1> float2D of </g1> difference
+------------------------------------------------------------
+[ 0 0 ]          1               0               1
+[ 0 1 ]          2               0               2
+[ 1 0 ]          3               0               3
+[ 1 1 ]          4               0               4
+[ 2 0 ]          5               0               5
+[ 2 1 ]          6               0               6
+*/
+
+ write_attr(loc_id,2,dims2,"integer2D",H5T_NATIVE_INT,buf72);
+ write_attr(loc_id,2,dims2,"float2D",H5T_NATIVE_FLOAT,buf82);
+
+
+/*-------------------------------------------------------------------------
+ * 3D attributes
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf13,'z',sizeof buf13);
+ }
+
+ /*
+ buf13[24][2]= {"ab","cd","ef","gh","ij","kl","mn","pq",
+ "rs","tu","vw","xz","AB","CD","EF","GH",
+ "IJ","KL","MN","PQ","RS","TU","VW","XZ"};
+
+Attribute:   <string3D> and <string3D>
+position        string3D of </g1> string3D of </g1> difference
+------------------------------------------------------------
+[ 0 0 0 ]          a                z
+[ 0 0 0 ]          b                z
+[ 0 0 1 ]          c                z
+[ 0 0 1 ]          d                z
+[ 0 1 0 ]          e                z
+[ 0 1 0 ]          f                z
+[ 0 1 1 ]          g                z
+[ 0 1 1 ]          h                z
+[ 0 2 0 ]          i                z
+[ 0 2 0 ]          j                z
+[ 0 2 1 ]          k                z
+[ 0 2 1 ]          l                z
+[ 1 0 0 ]          m                z
+[ 1 0 0 ]          n                z
+[ 1 0 1 ]          p                z
+[ 1 0 1 ]          q                z
+[ 1 1 0 ]          r                z
+[ 1 1 0 ]          s                z
+[ 1 1 1 ]          t                z
+[ 1 1 1 ]          u                z
+[ 1 2 0 ]          v                z
+[ 1 2 0 ]          w                z
+[ 1 2 1 ]          x                z
+[ 2 0 0 ]          A                z
+[ 2 0 0 ]          B                z
+[ 2 0 1 ]          C                z
+[ 2 0 1 ]          D                z
+[ 2 1 0 ]          E                z
+[ 2 1 0 ]          F                z
+[ 2 1 1 ]          G                z
+[ 2 1 1 ]          H                z
+[ 2 2 0 ]          I                z
+[ 2 2 0 ]          J                z
+[ 2 2 1 ]          K                z
+[ 2 2 1 ]          L                z
+[ 3 0 0 ]          M                z
+[ 3 0 0 ]          N                z
+[ 3 0 1 ]          P                z
+[ 3 0 1 ]          Q                z
+[ 3 1 0 ]          R                z
+[ 3 1 0 ]          S                z
+[ 3 1 1 ]          T                z
+[ 3 1 1 ]          U                z
+[ 3 2 0 ]          V                z
+[ 3 2 0 ]          W                z
+[ 3 2 1 ]          X                z
+[ 3 2 1 ]          Z                z
+ */
+
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ write_attr(loc_id,3,dims3,"string3D",type_id,buf13);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+
+ n=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    if (make_diffs) buf23[i][j][k]=0;
+    else buf23[i][j][k]=n++;
+   }
+  }
+ }
+
+/*
+position        bitfield3D of </g1> bitfield3D of </g1> difference
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1
+[ 0 0 1 ]          2               0               2
+[ 0 1 0 ]          3               0               3
+[ 0 1 1 ]          4               0               4
+[ 0 2 0 ]          5               0               5
+[ 0 2 1 ]          6               0               6
+[ 1 0 0 ]          7               0               7
+[ 1 0 1 ]          8               0               8
+[ 1 1 0 ]          9               0               9
+[ 1 1 1 ]          10              0               10
+[ 1 2 0 ]          11              0               11
+[ 1 2 1 ]          12              0               12
+[ 2 0 0 ]          13              0               13
+[ 2 0 1 ]          14              0               14
+[ 2 1 0 ]          15              0               15
+[ 2 1 1 ]          16              0               16
+[ 2 2 0 ]          17              0               17
+[ 2 2 1 ]          18              0               18
+[ 3 0 0 ]          19              0               19
+[ 3 0 1 ]          20              0               20
+[ 3 1 0 ]          21              0               21
+[ 3 1 1 ]          22              0               22
+[ 3 2 0 ]          23              0               23
+[ 3 2 1 ]          24              0               24
+*/
+
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_attr(loc_id,3,dims3,"bitfield3D",type_id,buf23);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_attr(loc_id,3,dims3,"opaque3D",type_id,buf23);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+
+ n=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    if (make_diffs) {
+     buf33[i][j][k].a=0;
+     buf33[i][j][k].b=0;
+    }
+    else {
+     buf33[i][j][k].a=n++;
+     buf33[i][j][k].b=n++;
+    }
+   }
+  }
+ }
+/*position        compound3D of </g1> compound3D of </g1> difference
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1
+[ 0 0 0 ]          2               0               2
+[ 0 0 1 ]          3               0               3
+[ 0 0 1 ]          4               0               4
+[ 0 1 0 ]          5               0               5
+[ 0 1 0 ]          6               0               6
+[ 0 1 1 ]          7               0               7
+[ 0 1 1 ]          8               0               8
+[ 0 2 0 ]          9               0               9
+[ 0 2 0 ]          10              0               10
+[ 0 2 1 ]          11              0               11
+[ 0 2 1 ]          12              0               12
+[ 1 0 0 ]          13              0               13
+[ 1 0 0 ]          14              0               14
+[ 1 0 1 ]          15              0               15
+[ 1 0 1 ]          16              0               16
+[ 1 1 0 ]          17              0               17
+[ 1 1 0 ]          18              0               18
+[ 1 1 1 ]          19              0               19
+[ 1 1 1 ]          20              0               20
+[ 1 2 0 ]          21              0               21
+[ 1 2 0 ]          22              0               22
+[ 1 2 1 ]          23              0               23
+[ 1 2 1 ]          24              0               24
+[ 2 0 0 ]          25              0               25
+[ 2 0 0 ]          26              0               26
+[ 2 0 1 ]          27              0               27
+[ 2 0 1 ]          28              0               28
+[ 2 1 0 ]          29              0               29
+[ 2 1 0 ]          30              0               30
+[ 2 1 1 ]          31              0               31
+[ 2 1 1 ]          32              0               32
+[ 2 2 0 ]          33              0               33
+[ 2 2 0 ]          34              0               34
+[ 2 2 1 ]          35              0               35
+[ 2 2 1 ]          36              0               36
+[ 3 0 0 ]          37              0               37
+[ 3 0 0 ]          38              0               38
+[ 3 0 1 ]          39              0               39
+[ 3 0 1 ]          40              0               40
+[ 3 1 0 ]          41              0               41
+[ 3 1 0 ]          42              0               42
+[ 3 1 1 ]          43              0               43
+[ 3 1 1 ]          44              0               44
+[ 3 2 0 ]          45              0               45
+[ 3 2 0 ]          46              0               46
+[ 3 2 1 ]          47              0               47
+[ 3 2 1 ]          48              0               48
+*/
+
+
+
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_attr(loc_id,3,dims3,"compound3D",type_id,buf33);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  for (i = 0; i < 4; i++) {
+   for (j = 0; j < 3; j++) {
+    for (k = 0; k < 2; k++)
+     status=H5Rcreate(&buf43[i][j][k],file_id,dset_name,H5R_OBJECT,-1);
+   }
+  }
+ write_attr(loc_id,3,dims3,"reference3D",H5T_STD_REF_OBJ,buf43);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    if (make_diffs) buf453[i][j][k]=RED; else buf453[i][j][k]=GREEN;
+   }
+  }
+ }
+
+/*
+position        enum3D of </g1> enum3D of </g1> difference
+------------------------------------------------------------
+[ 0 0 0 ]          GREEN            RED
+[ 0 0 1 ]          GREEN            RED
+[ 0 1 0 ]          GREEN            RED
+[ 0 1 1 ]          GREEN            RED
+[ 0 2 0 ]          GREEN            RED
+[ 0 2 1 ]          GREEN            RED
+[ 1 0 0 ]          GREEN            RED
+[ 1 0 1 ]          GREEN            RED
+[ 1 1 0 ]          GREEN            RED
+[ 1 1 1 ]          GREEN            RED
+[ 1 2 0 ]          GREEN            RED
+[ 1 2 1 ]          GREEN            RED
+[ 2 0 0 ]          GREEN            RED
+[ 2 0 1 ]          GREEN            RED
+[ 2 1 0 ]          GREEN            RED
+[ 2 1 1 ]          GREEN            RED
+[ 2 2 0 ]          GREEN            RED
+[ 2 2 1 ]          GREEN            RED
+[ 3 0 0 ]          GREEN            RED
+[ 3 0 1 ]          GREEN            RED
+[ 3 1 0 ]          GREEN            RED
+[ 3 1 1 ]          GREEN            RED
+[ 3 2 0 ]          GREEN            RED
+[ 3 2 1 ]          GREEN            RED
+*/
+
+
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_attr(loc_id,3,dims3,"enum3D",type_id,buf453);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+ n=0;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    int l;
+    buf53[i][j][k].p = malloc((i + 1) * sizeof(int));
+    buf53[i][j][k].len = i + 1;
+    for (l = 0; l < i + 1; l++)
+    if (make_diffs)((int *)buf53[i][j][k].p)[l] = 0;
+    else ((int *)buf53[i][j][k].p)[l] = n++;
+   }
+  }
+ }
+/*
+position        vlen3D of </g1> vlen3D of </g1> difference
+------------------------------------------------------------
+[ 0 0 1 ]          1               0               1
+[ 0 1 0 ]          2               0               2
+[ 0 1 1 ]          3               0               3
+[ 0 2 0 ]          4               0               4
+[ 0 2 1 ]          5               0               5
+[ 1 0 0 ]          6               0               6
+[ 1 0 0 ]          7               0               7
+[ 1 0 1 ]          8               0               8
+[ 1 0 1 ]          9               0               9
+[ 1 1 0 ]          10              0               10
+etc
+*/
+ space_id = H5Screate_simple(3,dims3,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ attr_id = H5Acreate(loc_id,"vlen3D",type_id,space_id,H5P_DEFAULT);
+ status = H5Awrite(attr_id,type_id,buf53);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf53);
+ assert(status>=0);
+ status = H5Aclose(attr_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+ n=1;
+ for (i = 0; i < 24; i++) {
+  for (j = 0; j < (int)dimarray[0]; j++) {
+    if (make_diffs) buf63[i][j]=0;
+    else buf63[i][j]=n++;
+  }
+ }
+ /*
+ position        array3D of </g1> array3D of </g1> difference
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1
+[ 0 0 0 ]          2               0               2
+[ 0 0 0 ]          3               0               3
+[ 0 0 1 ]          4               0               4
+[ 0 0 1 ]          5               0               5
+[ 0 0 1 ]          6               0               6
+[ 0 1 0 ]          7               0               7
+etc
+*/
+
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_attr(loc_id,3,dims3,"array3D",type_id,buf63);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+ n=1; f=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    if (make_diffs) {
+     buf73[i][j][k]=0;
+     buf83[i][j][k]=0;
+    }
+    else {
+     buf73[i][j][k]=n++;
+     buf83[i][j][k]=f++;
+    }
+   }
+  }
+ }
+
+ /*
+ position        integer3D of </g1> integer3D of </g1> difference
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1
+[ 0 0 1 ]          2               0               2
+[ 0 1 0 ]          3               0               3
+[ 0 1 1 ]          4               0               4
+[ 0 2 0 ]          5               0               5
+[ 0 2 1 ]          6               0               6
+[ 1 0 0 ]          7               0               7
+[ 1 0 1 ]          8               0               8
+[ 1 1 0 ]          9               0               9
+[ 1 1 1 ]          10              0               10
+etc
+*/
+ write_attr(loc_id,3,dims3,"integer3D",H5T_NATIVE_INT,buf73);
+ write_attr(loc_id,3,dims3,"float3D",H5T_NATIVE_FLOAT,buf83);
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Check all HDF5 classes
+ * H5T_INTEGER, H5T_FLOAT
+ * H5T_TIME, H5T_STRING, H5T_BITFIELD, H5T_OPAQUE, H5T_COMPOUND, H5T_REFERENCE,
+ * H5T_ENUM, H5T_VLEN, H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+
+
+int test_attr(const char *file,
+              int make_diffs /* flag to modify data buffers */)
+{
+ hid_t   file_id;
+ hid_t   dset_id;
+ hid_t   group_id;
+ hid_t   root_id;
+ hid_t   space_id;
+ hsize_t dims[1]={2};
+ herr_t  status;
+
+ /* Create a file  */
+ if ((file_id  = H5Fcreate(file, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0)
+  return -1;
+
+ /* Create a 1D dataset */
+ space_id = H5Screate_simple(1,dims,NULL);
+ dset_id  = H5Dcreate(file_id,"dset",H5T_NATIVE_INT,space_id,H5P_DEFAULT);
+ status   = H5Sclose(space_id);
+ assert(status>=0);
+
+ /* Create groups */
+ group_id  = H5Gcreate(file_id,"g1",0);
+ root_id   = H5Gopen(file_id, "/");
+
+/*-------------------------------------------------------------------------
+ * write a series of attributes on the dataset, group, and root group
+ *-------------------------------------------------------------------------
+ */
+
+ write_attr_in(dset_id,"dset",file_id,make_diffs);
+ write_attr_in(group_id,NULL,0,make_diffs);
+ write_attr_in(root_id,NULL,0,make_diffs);
+
+
+ /* Close */
+ status = H5Dclose(dset_id);
+ assert(status>=0);
+ status = H5Gclose(group_id);
+ assert(status>=0);
+ status = H5Gclose(root_id);
+ assert(status>=0);
+
+ /* Close file */
+ status = H5Fclose(file_id);
+ assert(status>=0);
+ return status;
+}

Added: packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_basic.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_basic.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_basic.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,498 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "testh5diff.h"
+
+
+/*UINT_MAX Maximum value for a variable of type unsigned int. 4294967295 */
+#define UIMAX 4294967295u
+
+
+
+/*
+
+# ##############################################################################
+# # Common usage
+# ##############################################################################
+
+
+# 1.0
+ -h
+
+# 1.1
+ file1.h5 file2.h5 g1/dset1 g1/dset2
+
+# 1.2
+ file1.h5 file2.h5 -n 2 g1/dset1 g1/dset2
+
+# 1.3
+ file1.h5 file2.h5 -d 5 g1/dset3 g1/dset4
+
+# 1.4
+ file1.h5 file2.h5 -p 0.05 g1/dset3 g1/dset4
+
+# 1.5
+ file1.h5 file2.h5 -r g1/dset1 g1/dset2
+
+# 1.6
+ file1.h5 file2.h5
+
+# ##############################################################################
+# # basic types
+# ##############################################################################
+
+# 2.0
+ file3.h5 file3.h5 dset group
+
+# 2.1
+ file3.h5 file3.h5 dset link
+
+# 2.2
+ file3.h5 file3.h5 dset type
+
+# 2.3
+ file3.h5 file3.h5 group group
+
+# 2.4
+ file3.h5 file3.h5 type type
+
+# 2.5
+ file3.h5 file3.h5 link link
+
+
+# ##############################################################################
+# # Dimensions
+# ##############################################################################
+
+# 4.0
+ file5.h5 file5.h5 dset1 dset2
+
+# 4.1
+ file5.h5 file5.h5 dset3 dset4
+
+# 4.2
+ file5.h5 file5.h5 dset5 dset6
+
+
+# ##############################################################################
+# # Dataset types
+# ##############################################################################
+
+# 5.0
+ file6.h5 file6.h5 dset0a dset0b
+
+# 5.1
+ file6.h5 file6.h5 dset1a dset1b
+
+# 5.2
+ file6.h5 file6.h5 dset2a dset2b
+
+# 5.3
+ file6.h5 file6.h5 dset3a dset4b
+
+# 5.4
+ file6.h5 file6.h5 dset4a dset4b
+
+# 5.5
+ file6.h5 file6.h5 dset5a dset5b
+
+# 5.6
+ file6.h5 file6.h5 dset6a dset6b
+
+# 5.7
+ file6.h5 file6.h5 dset7a dset7b
+
+# 5.8
+ file6.h5 file6.h5 dset8a dset8b
+
+# ##############################################################################
+# # Error messages
+# ##############################################################################
+
+
+# 6.0: Check if the command line number of arguments is less than 3
+ h5diff_test1.h5
+
+# 6.1: Check for invalid options
+ h5diff_test1.h5 h5diff_test2.h5 -x
+
+# ##############################################################################
+# # -d
+# ##############################################################################
+
+# 6.2: no value
+ file1.h5 file2.h5 -d g1/dset3 g1/dset4
+
+# 6.3: negative value
+ file1.h5 file2.h5 -d -4 g1/dset3 g1/dset4
+
+# 6.4: zero
+ file1.h5 file2.h5 -d 0 g1/dset3 g1/dset4
+
+# 6.5: non number
+ file1.h5 file2.h5 -d u g1/dset3 g1/dset4
+
+# 6.6: hexadecimal
+ file1.h5 file2.h5 -d 0x1 g1/dset3 g1/dset4
+
+# 6.7: string
+ file1.h5 file2.h5 -d "1" g1/dset3 g1/dset4
+
+# 6.8: repeated option
+ file1.h5 file2.h5 -d 1 -d 2 g1/dset3 g1/dset4
+
+# 6.9: number larger than biggest difference
+ file1.h5 file2.h5 -d 200 g1/dset3 g1/dset4
+
+# 6.10: number smaller than smallest difference
+ file1.h5 file2.h5 -d 1 g1/dset3 g1/dset4
+
+
+# ##############################################################################
+# # -p
+# ##############################################################################
+
+
+# 6.11: no value
+ file1.h5 file2.h5 -p g1/dset3 g1/dset4
+
+# 6.12: negative value
+ file1.h5 file2.h5 -p -4 g1/dset3 g1/dset4
+
+# 6.13: zero
+ file1.h5 file2.h5 -p 0 g1/dset3 g1/dset4
+
+# 6.14: non number
+ file1.h5 file2.h5 -p u g1/dset3 g1/dset4
+
+# 6.15: hexadecimal
+ file1.h5 file2.h5 -p 0x1 g1/dset3 g1/dset4
+
+# 6.16: string
+ file1.h5 file2.h5 -p "0.21" g1/dset3 g1/dset4
+
+# 6.17: repeated option
+ file1.h5 file2.h5 -p 0.21 -p 0.22 g1/dset3 g1/dset4
+
+# 6.18: number larger than biggest difference
+ file1.h5 file2.h5 -p 2 g1/dset3 g1/dset4
+
+# 6.19: number smaller than smallest difference
+ file1.h5 file2.h5 -p 0.005 g1/dset3 g1/dset4
+
+
+
+# ##############################################################################
+# # -n
+# ##############################################################################
+
+
+# 6.20: no value
+ file1.h5 file2.h5 -n g1/dset3 g1/dset4
+
+# 6.21: negative value
+ file1.h5 file2.h5 -n -4 g1/dset3 g1/dset4
+
+# 6.22: zero
+ file1.h5 file2.h5 -n 0 g1/dset3 g1/dset4
+
+# 6.23: non number
+ file1.h5 file2.h5 -n u g1/dset3 g1/dset4
+
+# 6.24: hexadecimal
+ file1.h5 file2.h5 -n 0x1 g1/dset3 g1/dset4
+
+# 6.25: string
+ file1.h5 file2.h5 -n "2" g1/dset3 g1/dset4
+
+# 6.26: repeated option
+ file1.h5 file2.h5 -n 2 -n 3 g1/dset3 g1/dset4
+
+# 6.27: number larger than biggest difference
+ file1.h5 file2.h5 -n 200 g1/dset3 g1/dset4
+
+# 6.28: number smaller than smallest difference
+ file1.h5 file2.h5 -n 1 g1/dset3 g1/dset4
+
+# ##############################################################################
+# # non valid files
+# ##############################################################################
+
+ file1.h6 file2.h6
+
+*/
+
+
+/*-------------------------------------------------------------------------
+ * Basic review tests
+ *-------------------------------------------------------------------------
+ */
+
+int test_basic(const char *file1, const char *file2)
+{
+
+ hid_t   file1_id, file2_id;
+ hid_t   group1_id, group2_id, group3_id;
+ herr_t  status;
+ hsize_t dims[2] = { 3,2 };
+
+ /* Test */
+ double  data1[3][2] = {{1,1},{1,1},{1,1}};
+ double  data2[3][2] = {{1,1.1},{1.01,1.001},{1.0001,1}};
+ double  data3[3][2] = {{100,110},{100,100},{100,100}};
+ double  data4[3][2] = {{110,100},{90,80},{140,200}};
+
+/*-------------------------------------------------------------------------
+ * Create two files
+ *-------------------------------------------------------------------------
+ */
+
+ file1_id = H5Fcreate (file1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+ file2_id = H5Fcreate (file2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* Create groups */
+ group1_id = H5Gcreate(file1_id, "g1", 0);
+ group2_id = H5Gcreate(file2_id, "g1", 0);
+ group3_id = H5Gcreate(file2_id, "g2", 0);
+
+ write_dset(group1_id,2,dims,"dset1",H5T_NATIVE_DOUBLE,data1);
+ write_dset(group2_id,2,dims,"dset2",H5T_NATIVE_DOUBLE,data2);
+ write_dset(group1_id,2,dims,"dset3",H5T_NATIVE_DOUBLE,data3);
+ write_dset(group2_id,2,dims,"dset4",H5T_NATIVE_DOUBLE,data4);
+ write_dset(group2_id,2,dims,"dset1",H5T_NATIVE_DOUBLE,data2);
+
+/*-------------------------------------------------------------------------
+ * Close
+ *-------------------------------------------------------------------------
+ */
+ status = H5Gclose(group1_id);
+ status = H5Gclose(group2_id);
+ status = H5Gclose(group3_id);
+ status = H5Fclose(file1_id);
+ status = H5Fclose(file2_id);
+ return status;
+}
+
+/*-------------------------------------------------------------------------
+ * Compare different types: H5G_DATASET, H5G_TYPE, H5G_GROUP, H5G_LINK
+ *-------------------------------------------------------------------------
+ */
+
+int test_types(const char *file1, const char UNUSED *file2)
+{
+
+ hid_t   file1_id;
+ hid_t   group_id;
+ hid_t   type_id;
+ herr_t  status;
+ hsize_t dims[1]={1};
+ /* Compound datatype */
+ typedef struct s_t
+ {
+  int    a;
+  float  b;
+ } s_t;
+
+
+/*-------------------------------------------------------------------------
+ * Create one file
+ *-------------------------------------------------------------------------
+ */
+ file1_id = H5Fcreate (file1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+/*-------------------------------------------------------------------------
+ * H5G_DATASET
+ *-------------------------------------------------------------------------
+ */
+ write_dset(file1_id,1,dims,"dset",H5T_NATIVE_INT,0);
+
+/*-------------------------------------------------------------------------
+ * H5G_GROUP
+ *-------------------------------------------------------------------------
+ */
+ group_id = H5Gcreate(file1_id, "group", 0);
+ status = H5Gclose(group_id);
+
+/*-------------------------------------------------------------------------
+ * H5G_TYPE
+ *-------------------------------------------------------------------------
+ */
+
+ /* Create a memory compound datatype */
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_INT);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_FLOAT);
+ /* Commit compound datatype and close it */
+ H5Tcommit(file1_id, "type", type_id);
+ H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5G_LINK
+ *-------------------------------------------------------------------------
+ */
+
+ status = H5Glink(file1_id, H5G_LINK_SOFT, "dset", "link");
+
+/*-------------------------------------------------------------------------
+ * Close
+ *-------------------------------------------------------------------------
+ */
+ status = H5Fclose(file1_id);
+ return status;
+}
+
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Datasets datatypes
+ *-------------------------------------------------------------------------
+ */
+
+int test_native(const char *file1, const char UNUSED *file2)
+{
+
+ hid_t   file1_id;
+ hsize_t dims[2]={3,2};
+ herr_t  status;
+ char    buf1a[3][2] = {{1,1},{1,1},{1,1}};
+ char    buf1b[3][2] = {{1,1},{3,4},{5,6}};
+ short   buf2a[3][2] = {{1,1},{1,1},{1,1}};
+ short   buf2b[3][2] = {{1,1},{3,4},{5,6}};
+ int     buf3a[3][2] = {{1,1},{1,1},{1,1}};
+ int     buf3b[3][2] = {{1,1},{3,4},{5,6}};
+ long    buf4a[3][2] = {{1,1},{1,1},{1,1}};
+ long    buf4b[3][2] = {{1,1},{3,4},{5,6}};
+ float   buf5a[3][2] = {{1,1},{1,1},{1,1}};
+ float   buf5b[3][2] = {{1,1},{3,4},{5,6}};
+ double  buf6a[3][2] = {{1,1},{1,1},{1,1}};
+ double  buf6b[3][2] = {{1,1},{3,4},{5,6}};
+
+ /*unsigned/signed test
+   signed char -128 to 127
+   unsigned char 0 to 255
+  */
+ char          buf7a[3][2] = {{-1,-128},{-1,-1},{-1,-1}};
+ unsigned char buf7b[3][2] = {{1,128},{1,1},{1,1}};
+
+ /* long_long test */
+ long_long            buf8a[3][2] = {{1,1},{1,1},{1,1}};
+ long_long            buf8b[3][2] = {{1,1},{3,4},{5,6}};
+ unsigned long_long   buf9a[3][2] = {{1,1},{1,1},{1,1}};
+ unsigned long_long   buf9b[3][2] = {{1,1},{3,4},{5,6}};
+
+ unsigned int    buf10a[3][2] = {{UIMAX,1},{1,1},{1,1}};
+ unsigned int    buf10b[3][2] = {{UIMAX-1,1},{3,4},{5,6}};
+
+
+/*-------------------------------------------------------------------------
+ * Create a file
+ *-------------------------------------------------------------------------
+ */
+ file1_id = H5Fcreate (file1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+/*-------------------------------------------------------------------------
+ * Check for different storage order. Give a warning if they are different
+ *-------------------------------------------------------------------------
+ */
+
+ write_dset(file1_id,2,dims,"dset0a",H5T_STD_I16LE,buf2a);
+ write_dset(file1_id,2,dims,"dset0b",H5T_STD_I32LE,buf3b);
+
+/*-------------------------------------------------------------------------
+ * Check H5T_NATIVE_CHAR
+ *-------------------------------------------------------------------------
+ */
+ write_dset(file1_id,2,dims,"dset1a",H5T_NATIVE_CHAR,buf1a);
+ write_dset(file1_id,2,dims,"dset1b",H5T_NATIVE_CHAR,buf1b);
+
+/*-------------------------------------------------------------------------
+ * Check H5T_NATIVE_SHORT
+ *-------------------------------------------------------------------------
+ */
+ write_dset(file1_id,2,dims,"dset2a",H5T_NATIVE_SHORT,buf2a);
+ write_dset(file1_id,2,dims,"dset2b",H5T_NATIVE_SHORT,buf2b);
+
+/*-------------------------------------------------------------------------
+ * Check H5T_NATIVE_INT
+ *-------------------------------------------------------------------------
+ */
+ write_dset(file1_id,2,dims,"dset3a",H5T_NATIVE_INT,buf3a);
+ write_dset(file1_id,2,dims,"dset3b",H5T_NATIVE_INT,buf3b);
+
+/*-------------------------------------------------------------------------
+ * Check H5T_NATIVE_LONG
+ *-------------------------------------------------------------------------
+ */
+ write_dset(file1_id,2,dims,"dset4a",H5T_NATIVE_LONG,buf4a);
+ write_dset(file1_id,2,dims,"dset4b",H5T_NATIVE_LONG,buf4b);
+
+/*-------------------------------------------------------------------------
+ * Check H5T_NATIVE_FLOAT
+ *-------------------------------------------------------------------------
+ */
+ write_dset(file1_id,2,dims,"dset5a",H5T_NATIVE_FLOAT,buf5a);
+ write_dset(file1_id,2,dims,"dset5b",H5T_NATIVE_FLOAT,buf5b);
+
+/*-------------------------------------------------------------------------
+ * Check H5T_NATIVE_DOUBLE
+ *-------------------------------------------------------------------------
+ */
+
+ write_dset(file1_id,2,dims,"dset6a",H5T_NATIVE_DOUBLE,buf6a);
+ write_dset(file1_id,2,dims,"dset6b",H5T_NATIVE_DOUBLE,buf6b);
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_CHAR and H5T_NATIVE_UCHAR
+ *-------------------------------------------------------------------------
+ */
+
+ write_dset(file1_id,2,dims,"dset7a",H5T_NATIVE_CHAR,buf7a);
+ write_dset(file1_id,2,dims,"dset7b",H5T_NATIVE_UCHAR,buf7b);
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_LLONG
+ *-------------------------------------------------------------------------
+ */
+
+ write_dset(file1_id,2,dims,"dset8a",H5T_NATIVE_LLONG,buf8a);
+ write_dset(file1_id,2,dims,"dset8b",H5T_NATIVE_LLONG,buf8b);
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_ULLONG
+ *-------------------------------------------------------------------------
+ */
+
+ write_dset(file1_id,2,dims,"dset9a",H5T_NATIVE_ULLONG,buf9a);
+ write_dset(file1_id,2,dims,"dset9b",H5T_NATIVE_ULLONG,buf9b);
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_INT
+ *-------------------------------------------------------------------------
+ */
+
+ write_dset(file1_id,2,dims,"dset10a",H5T_NATIVE_UINT,buf10a);
+ write_dset(file1_id,2,dims,"dset10b",H5T_NATIVE_UINT,buf10b);
+
+
+/*-------------------------------------------------------------------------
+ * Close
+ *-------------------------------------------------------------------------
+ */
+ status = H5Fclose(file1_id);
+ return status;
+}
+
+

Added: packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_dset.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_dset.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_dset.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,665 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "testh5diff.h"
+
+#define STR_SIZE 3
+
+/*-------------------------------------------------------------------------
+ * Function: write_dset_in
+ *
+ * Purpose: write datasets in LOC_ID
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 12, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+static void write_dset_in(hid_t loc_id,
+                   const char* dset_name, /* for saving reference to dataset*/
+                   hid_t file_id,
+                   int make_diffs /* flag to modify data buffers */)
+{
+ /* Compound datatype */
+ typedef struct s_t
+ {
+  char   a;
+  double b;
+ } s_t;
+
+ typedef enum
+ {
+  RED,
+  GREEN
+ } e_t;
+
+ hid_t   dset_id;
+ hid_t   space_id;
+ hid_t   type_id;
+ hid_t   plist_id;
+ herr_t  status;
+ int     val, i, j, k, n;
+ float   f;
+ int     fillvalue=2;
+
+ /* create 1D attributes with dimension [2], 2 elements */
+ hsize_t    dims[1]={2};
+ char       buf1[2][STR_SIZE]= {"ab","de"}; /* string */
+ char       buf2[2]= {1,2};                 /* bitfield, opaque */
+ s_t        buf3[2]= {{1,2},{3,4}};         /* compound */
+ hobj_ref_t buf4[2];                        /* reference */
+ e_t        buf45[2]= {RED,GREEN};          /* enum */
+ hvl_t      buf5[2];                        /* vlen */
+ hsize_t    dimarray[1]={3};                /* array dimension */
+ int        buf6[2][3]= {{1,2,3},{4,5,6}};  /* array */
+ int        buf7[2]= {1,2};                 /* integer */
+ float      buf8[2]= {1,2};                 /* float */
+
+ /* create 2D attributes with dimension [3][2], 6 elements */
+ hsize_t    dims2[2]={3,2};
+ char       buf12[6][STR_SIZE]= {"ab","cd","ef","gh","ij","kl"};  /* string */
+ char       buf22[3][2]= {{1,2},{3,4},{5,6}};                     /* bitfield, opaque */
+ s_t        buf32[6]= {{1,2},{3,4},{5,6},{7,8},{9,10},{11,12}};   /* compound */
+ hobj_ref_t buf42[3][2];                                          /* reference */
+ hvl_t      buf52[3][2];                                          /* vlen */
+ int        buf62[6][3]= {{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15},{16,17,18}};  /* array */
+ int        buf72[3][2]= {{1,2},{3,4},{5,6}};                     /* integer */
+ float      buf82[3][2]= {{1,2},{3,4},{5,6}};                     /* float */
+
+ /* create 3D attributes with dimension [4][3][2], 24 elements */
+ hsize_t    dims3[3]={4,3,2};
+ char       buf13[24][STR_SIZE]= {"ab","cd","ef","gh","ij","kl","mn","pq",
+ "rs","tu","vw","xz","AB","CD","EF","GH",
+ "IJ","KL","MN","PQ","RS","TU","VW","XZ"};  /* string */
+ char       buf23[4][3][2];    /* bitfield, opaque */
+ s_t        buf33[4][3][2];    /* compound */
+ hobj_ref_t buf43[4][3][2];    /* reference */
+ hvl_t      buf53[4][3][2];    /* vlen */
+ int        buf63[24][3];      /* array */
+ int        buf73[4][3][2];    /* integer */
+ float      buf83[4][3][2];    /* float */
+
+
+/*-------------------------------------------------------------------------
+ * 1D
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+   for (j=0; j<2; j++)
+   {
+    buf1[i][j]='z';
+   }
+ }
+
+
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id,STR_SIZE);
+ write_dset(loc_id,1,dims,"string",type_id,buf1);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+   buf2[i]=buf2[1]=0;
+ }
+
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_dset(loc_id,1,dims,"bitfield",type_id,buf2);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+  {
+   buf3[i].a=0; buf3[i].b=0;
+  }
+ }
+
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_dset(loc_id,1,dims,"opaque",type_id,buf2);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+  {
+   buf45[i]=GREEN;
+  }
+ }
+
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_dset(loc_id,1,dims,"compound",type_id,buf3);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  status=H5Rcreate(&buf4[0],file_id,dset_name,H5R_OBJECT,-1);
+  status=H5Rcreate(&buf4[1],file_id,dset_name,H5R_OBJECT,-1);
+  write_dset(loc_id,1,dims,"reference",H5T_STD_REF_OBJ,buf4);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_dset(loc_id,1,dims,"enum",type_id,buf45);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+
+ buf5[0].len = 1;
+ buf5[0].p = malloc( 1 * sizeof(int));
+ ((int *)buf5[0].p)[0]=1;
+ buf5[1].len = 2;
+ buf5[1].p = malloc( 2 * sizeof(int));
+ ((int *)buf5[1].p)[0]=2;
+ ((int *)buf5[1].p)[1]=3;
+
+ if (make_diffs)
+ {
+  ((int *)buf5[0].p)[0]=0;
+  ((int *)buf5[1].p)[0]=0;
+  ((int *)buf5[1].p)[1]=0;
+ }
+
+ space_id = H5Screate_simple(1,dims,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ dset_id = H5Dcreate(loc_id,"vlen",type_id,space_id,H5P_DEFAULT);
+ status = H5Dwrite(dset_id,type_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf5);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf5);
+ assert(status>=0);
+ status = H5Dclose(dset_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+   for (j=0; j<3; j++)
+   {
+    buf6[i][j]=0;
+   }
+ }
+
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_dset(loc_id,1,dims,"array",type_id,buf6);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+  {
+   buf7[i]=0;
+   buf8[i]=0;
+  }
+ }
+
+ write_dset(loc_id,1,dims,"integer",H5T_NATIVE_INT,buf7);
+ write_dset(loc_id,1,dims,"float",H5T_NATIVE_FLOAT,buf8);
+
+
+/*-------------------------------------------------------------------------
+ * 2D
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf12, 'z', sizeof buf12);
+ }
+
+
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id,STR_SIZE);
+ write_dset(loc_id,2,dims2,"string2D",type_id,buf12);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+
+
+ if (make_diffs)
+ {
+  memset(buf22,0,sizeof buf22);
+ }
+
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_dset(loc_id,2,dims2,"bitfield2D",type_id,buf22);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_dset(loc_id,2,dims2,"opaque2D",type_id,buf22);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf32,0,sizeof buf32);
+ }
+
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_dset(loc_id,2,dims2,"compound2D",type_id,buf32);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  for (i = 0; i < 3; i++) {
+   for (j = 0; j < 2; j++) {
+    status=H5Rcreate(&buf42[i][j],file_id,dset_name,H5R_OBJECT,-1);
+   }
+  }
+  write_dset(loc_id,2,dims2,"reference2D",H5T_STD_REF_OBJ,buf42);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_dset(loc_id,2,dims2,"enum2D",type_id,0);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+/* Allocate and initialize VL dataset to write */
+ n=0;
+ for (i = 0; i < 3; i++) {
+  for (j = 0; j < 2; j++) {
+    int l;
+    buf52[i][j].p = malloc((i + 1) * sizeof(int));
+    buf52[i][j].len = i + 1;
+    for (l = 0; l < i + 1; l++)
+    if (make_diffs)((int *)buf52[i][j].p)[l] = 0;
+    else ((int *)buf52[i][j].p)[l] = n++;
+  }
+ }
+
+ space_id = H5Screate_simple(2,dims2,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ dset_id = H5Dcreate(loc_id,"vlen2D",type_id,space_id,H5P_DEFAULT);
+ status = H5Dwrite(dset_id,type_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf52);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf52);
+ assert(status>=0);
+ status = H5Dclose(dset_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf62,0,sizeof buf62);
+ }
+
+
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_dset(loc_id,2,dims2,"array2D",type_id,buf62);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER, write a fill value
+ *-------------------------------------------------------------------------
+ */
+
+
+ if (make_diffs)
+ {
+  memset(buf72,0,sizeof buf72);
+  memset(buf82,0,sizeof buf82);
+ }
+
+
+ plist_id = H5Pcreate(H5P_DATASET_CREATE);
+ status = H5Pset_fill_value(plist_id, H5T_NATIVE_INT, &fillvalue);
+ space_id = H5Screate_simple(2,dims2,NULL);
+ dset_id = H5Dcreate(loc_id,"integer2D",H5T_NATIVE_INT,space_id,plist_id);
+ status = H5Dwrite(dset_id,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf72);
+ status = H5Pclose(plist_id);
+ status = H5Dclose(dset_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+
+ write_dset(loc_id,2,dims2,"float2D",H5T_NATIVE_FLOAT,buf82);
+
+
+/*-------------------------------------------------------------------------
+ * 3D
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf13,'z',sizeof buf13);
+ }
+
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id,STR_SIZE);
+ write_dset(loc_id,3,dims3,"string3D",type_id,buf13);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+
+
+ n=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    if (make_diffs) buf23[i][j][k]=0;
+    else buf23[i][j][k]=n++;
+   }
+  }
+ }
+
+
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_dset(loc_id,3,dims3,"bitfield3D",type_id,buf23);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_dset(loc_id,3,dims3,"opaque3D",type_id,buf23);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+
+ n=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    if (make_diffs) {
+     buf33[i][j][k].a=0;
+     buf33[i][j][k].b=0;
+    }
+    else {
+     buf33[i][j][k].a=n++;
+     buf33[i][j][k].b=n++;
+    }
+   }
+  }
+ }
+
+
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_dset(loc_id,3,dims3,"compound3D",type_id,buf33);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  for (i = 0; i < 4; i++) {
+   for (j = 0; j < 3; j++) {
+    for (k = 0; k < 2; k++)
+     status=H5Rcreate(&buf43[i][j][k],file_id,dset_name,H5R_OBJECT,-1);
+   }
+  }
+ write_dset(loc_id,3,dims3,"reference3D",H5T_STD_REF_OBJ,buf43);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_dset(loc_id,3,dims3,"enum3D",type_id,0);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+ n=0;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    int l;
+    buf53[i][j][k].p = malloc((i + 1) * sizeof(int));
+    buf53[i][j][k].len = i + 1;
+    for (l = 0; l < i + 1; l++)
+    if (make_diffs)((int *)buf53[i][j][k].p)[l] = 0;
+    else ((int *)buf53[i][j][k].p)[l] = n++;
+   }
+  }
+ }
+
+ space_id = H5Screate_simple(3,dims3,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ dset_id = H5Dcreate(loc_id,"vlen3D",type_id,space_id,H5P_DEFAULT);
+ status = H5Dwrite(dset_id,type_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf53);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf53);
+ assert(status>=0);
+ status = H5Dclose(dset_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+
+
+ n=1;
+ for (i = 0; i < 24; i++) {
+  for (j = 0; j < (int)dimarray[0]; j++) {
+    if (make_diffs) buf63[i][j]=0;
+    else buf63[i][j]=n++;
+  }
+ }
+
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_dset(loc_id,3,dims3,"array3D",type_id,buf63);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+ n=1; f=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    if (make_diffs) {
+     buf73[i][j][k]=0;
+     buf83[i][j][k]=0;
+    }
+    else {
+     buf73[i][j][k]=n++;
+     buf83[i][j][k]=f++;
+    }
+   }
+  }
+ }
+ write_dset(loc_id,3,dims3,"integer3D",H5T_NATIVE_INT,buf73);
+ write_dset(loc_id,3,dims3,"float3D",H5T_NATIVE_FLOAT,buf83);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Check all HDF5 classes
+ * H5T_INTEGER, H5T_FLOAT
+ * H5T_TIME, H5T_STRING, H5T_BITFIELD, H5T_OPAQUE, H5T_COMPOUND, H5T_REFERENCE,
+ * H5T_ENUM, H5T_VLEN, H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+
+
+int test_dsetall(const char *file,
+                 int make_diffs /* flag to modify data buffers */)
+{
+ hid_t   file_id;
+ hid_t   dset_id;
+ hid_t   group_id;
+ hid_t   space_id;
+ hsize_t dims[1]={2};
+ herr_t  status;
+ int     buf[2]={1,2};
+
+ if (make_diffs)
+ {
+  memset(buf,0,sizeof buf);
+ }
+
+ /* Create a file  */
+ if ((file_id  = H5Fcreate(file, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0)
+  return -1;
+
+ /* Create a 1D dataset */
+ space_id = H5Screate_simple(1,dims,NULL);
+ dset_id  = H5Dcreate(file_id,"dset",H5T_NATIVE_INT,space_id,H5P_DEFAULT);
+ status   = H5Dwrite(dset_id,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf);
+ status   = H5Sclose(space_id);
+ assert(status>=0);
+
+ /* Create a group */
+ group_id  = H5Gcreate(file_id,"g1",0);
+
+/*-------------------------------------------------------------------------
+ * write a series of datasets on the group
+ *-------------------------------------------------------------------------
+ */
+
+ write_dset_in(group_id,"/dset",file_id,make_diffs);
+
+ /* Close */
+ status = H5Dclose(dset_id);
+ assert(status>=0);
+ status = H5Gclose(group_id);
+ assert(status>=0);
+
+ /* Close file */
+ status = H5Fclose(file_id);
+ assert(status>=0);
+ return status;
+}
+
+
+

Added: packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_main.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_main.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_main.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,36 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "testh5diff.h"
+
+
+
+
+int main(int UNUSED argc, const UNUSED char *argv[])
+{
+
+ test_basic ("file1.h5","file2.h5");
+ test_types ("file3.h5",NULL);
+ test_native("file4.h5",NULL);
+
+ /* generate 2 files with attribute differences */
+ test_attr("file5.h5",0);
+ test_attr("file6.h5",1);
+
+ /* generate 2 files with all datatype differences */
+ test_dsetall("file7.h5",0);
+ test_dsetall("file8.h5",1);
+ return 0;
+}
+

Added: packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_util.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_util.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5diff/testh5diff_util.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,99 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "testh5diff.h"
+
+
+/*-------------------------------------------------------------------------
+ * Function: write_attr
+ *
+ * Purpose: utility function to write an attribute in LOC_ID
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 12, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+int write_attr(hid_t loc_id,
+               int rank,
+               hsize_t *dims,
+               const char *attr_name,
+               hid_t type_id,
+               void *buf)
+{
+ hid_t   attr_id;
+ hid_t   space_id;
+ herr_t  status;
+
+ /* Create a buf space  */
+ space_id = H5Screate_simple(rank,dims,NULL);
+
+ /* Create the attribute */
+ attr_id = H5Acreate(loc_id,attr_name,type_id,space_id,H5P_DEFAULT);
+
+ /* Write the buf */
+ if ( buf )
+  status = H5Awrite(attr_id,type_id,buf);
+
+ /* Close */
+ status = H5Aclose(attr_id);
+ status = H5Sclose(space_id);
+ return status;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: write_dset
+ *
+ * Purpose: utility function to create and write a dataset in LOC_ID
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 12, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+int write_dset( hid_t loc_id,
+                int rank,
+                hsize_t *dims,
+                const char *dset_name,
+                hid_t type_id,
+                void *buf )
+{
+ hid_t   dset_id;
+ hid_t   space_id;
+ herr_t  status;
+
+ /* Create a buf space  */
+ space_id = H5Screate_simple(rank,dims,NULL);
+
+ /* Create a dataset */
+ dset_id = H5Dcreate(loc_id,dset_name,type_id,space_id,H5P_DEFAULT);
+
+ /* Write the buf */
+ if ( buf )
+  status = H5Dwrite(dset_id,type_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf);
+
+ /* Close */
+ status = H5Dclose(dset_id);
+ status = H5Sclose(space_id);
+
+ return status;
+
+}
+

Added: packages/hdf5/branches/upstream/current/tools/h5dump/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5dump/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5dump/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,98 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+h5dump.lo: \
+   $(srcdir)/h5dump.c \
+   $(srcdir)/h5dump.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/tools/lib/h5tools.h \
+   $(top_srcdir)/tools/lib/h5tools_utils.h \
+   $(top_srcdir)/tools/lib/h5tools_ref.h \
+   $(top_srcdir)/tools/lib/h5trav.h
+h5dumpgentest.lo: \
+   $(srcdir)/h5dumpgentest.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/tools/lib/h5tools.h

Added: packages/hdf5/branches/upstream/current/tools/h5dump/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5dump/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5dump/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,86 @@
+##
+## 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.
+##
+## HDF5 Library Makefile(.in)
+##
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Add include directory to the C preprocessor flags, add -lh5tools and
+## -lhdf5 to the list of libraries.
+##
+CPPFLAGS=-I. -I$(srcdir) -I$(top_builddir)/src -I$(top_srcdir)/src  \
+         -I$(top_srcdir)/tools/lib @CPPFLAGS@
+
+## Test programs and scripts.
+##
+TEST_PROGS=h5dumpgentest
+TEST_SCRIPTS=./testh5dump.sh
+TEST_SCRIPTS_XML=$(srcdir)/testh5dumpxml.sh
+
+## These are our main targets: library and tools.
+##
+LIBTOOLS=../lib/libh5tools.la
+LIBHDF5=$(top_builddir)/src/libhdf5.la
+
+PUB_PROGS=h5dump
+PROGS=$(PUB_PROGS) $(TEST_PROGS)
+
+## Source and object files for the library; do not install
+##
+LIB_SRC=
+LIB_OBJ=$(LIB_SRC:.c=.lo)
+PUB_LIB=
+
+## Temporary files.  *.h5 are generated by h5dumpgentest.  They should
+## copied to the testfiles/ directory if update is required.
+MOSTLYCLEAN=*.h5
+CLEAN=
+DISTCLEAN=testh5dump.sh
+
+## Source and object files for programs...
+##
+PROG_SRC=h5dump.c h5dumpgentest.c
+PROG_OBJ=$(PROG_SRC:.c=.lo)
+
+PRIVATE_HDR=h5dump.h
+
+## Source and object files for the tests
+##
+TEST_SRC=
+TEST_OBJ=$(TEST_SRC:.c=.lo)
+
+## Programs have to be built before they can be tested!
+##
+check test _test: $(PROGS)
+
+## Some XML tests fail in some machines such as 64bits platforms.
+## Run XML tests only if asked.
+check-xml:
+	$(MAKE) TEST_SCRIPTS=$(TEST_SCRIPTS_XML) check
+
+
+## How to build the programs...They all depend on the hdf5 library and
+## the tools library compiled in this directory.
+##
+$(PROGS): $(LIBTOOLS) $(LIBHDF5)
+
+h5dump: h5dump.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ h5dump.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+h5dumpgentest: h5dumpgentest.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ h5dumpgentest.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/tools/h5dump/h5dump.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5dump/h5dump.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5dump/h5dump.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,6044 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "h5dump.h"
+#include "H5private.h"
+#include "h5tools.h"
+#include "h5tools_utils.h"
+#include "h5tools_ref.h"
+#include "h5trav.h"
+
+
+/* module-scoped variables */
+const char  *progname = "h5dump";
+
+/* Macros for displaying objects */
+#define begin_obj(obj,name,begin)                               \
+    if (name)                                                   \
+        printf("%s \"%s\" %s\n", (obj), (name), (begin));       \
+    else                                                        \
+        printf("%s %s\n", (obj), (begin));
+
+#define end_obj(obj,end)                                        \
+    if(HDstrlen(end)) {                                         \
+        printf("%s", end);                                      \
+        if(HDstrlen(obj))                                       \
+            printf(" ");                                        \
+    }                                                           \
+    if(HDstrlen(obj))                                           \
+        printf("%s", obj);                                      \
+    printf("\n");
+
+/* 3 private values: can't be set, but can be read.
+   Note: these are defined in H5Zprivate, they are
+   duplicated here.
+ */
+#define H5_SZIP_LSB_OPTION_MASK         8
+#define H5_SZIP_MSB_OPTION_MASK         16
+#define H5_SZIP_RAW_OPTION_MASK         128
+
+int                 d_status = EXIT_SUCCESS;
+static int          unamedtype = 0;     /* shared data type with no name */
+static table_t     *group_table = NULL, *dset_table = NULL, *type_table = NULL;
+
+static size_t       prefix_len = 1024;
+static char  *prefix;
+
+static const char  *driver = NULL;      /* The driver to open the file with. */
+
+static const dump_header *dump_header_format;
+
+/* things to display or which are set via command line parameters */
+static int          display_all       = TRUE;
+static int          display_oid       = FALSE;
+static int          display_data      = TRUE;
+static int          display_attr_data = TRUE;
+static int          display_char      = FALSE; /*print 1-byte numbers as ASCII */
+static int          usingdasho        = FALSE;
+static int          display_bb        = FALSE; /*superblock */
+static int          display_dcpl      = FALSE; /*dcpl */
+static int          display_fi        = FALSE; /*file index */
+static int          display_ai        = TRUE;  /*array index */
+static int          display_escape    = FALSE; /*escape non printable characters */
+
+/**
+ **  Added for XML  **
+ **/
+
+/* module-scoped variables for XML option */
+#define DEFAULT_XSD     "http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd"
+#define DEFAULT_DTD     "http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.dtd"
+
+static int              doxml = 0;
+static int              useschema = 1;
+static const char       *xml_dtd_uri = NULL;
+static const char       *xmlnsprefix="hdf5:";
+
+/** end XML **/
+
+/* internal functions */
+static hid_t     h5_fileaccess(void);
+static void      dump_oid(hid_t oid);
+static void      print_enum(hid_t type);
+static herr_t    dump_all(hid_t group, const char *name, void *op_data);
+#ifdef LATER
+static void      check_compression(hid_t);
+#endif /* LATER */
+static int       xml_name_to_XID(const char *, char *, int , int );
+static void      init_prefix(char **prfx, size_t prfx_len);
+
+static h5dump_t         dataformat = {
+    0,				/*raw */
+
+    "",				/*fmt_raw */
+    "%d",			/*fmt_int */
+    "%u",			/*fmt_uint */
+    "%d",			/*fmt_schar */
+    "%u",			/*fmt_uchar */
+    "%d",			/*fmt_short */
+    "%u",			/*fmt_ushort */
+    "%ld",			/*fmt_long */
+    "%lu",			/*fmt_ulong */
+    NULL,			/*fmt_llong */
+    NULL,			/*fmt_ullong */
+    "%g",			/*fmt_double */
+    "%g",			/*fmt_float */
+
+    0,				/*ascii */
+    0,				/*str_locale */
+    0,				/*str_repeat */
+
+    "[ ",			/*arr_pre */
+    ",",			/*arr_sep */
+    " ]",			/*arr_suf */
+    1,				/*arr_linebreak */
+
+    "",				/*cmpd_name */
+    ",\n",			/*cmpd_sep */
+    "{\n",			/*cmpd_pre */
+    "}",			/*cmpd_suf */
+    "\n",			/*cmpd_end */
+
+    ", ",			/*vlen_sep */
+    "(",			/*vlen_pre */
+    ")",			/*vlen_suf */
+    "",				/*vlen_end */
+
+    "%s",			/*elmt_fmt */
+    ",",			/*elmt_suf1 */
+    " ",			/*elmt_suf2 */
+
+    "",				/*idx_n_fmt */
+    "",				/*idx_sep */
+    "",				/*idx_fmt */
+
+    80,				/*line_ncols *//*standard default columns */
+    0,				/*line_per_line */
+    "",				/*line_pre */
+    "%s",			/*line_1st */
+    "%s",			/*line_cont */
+    "",				/*line_suf */
+    "",				/*line_sep */
+    1,				/*line_multi_new */
+    "   ",			/*line_indent */
+
+    1,				/*skip_first */
+
+    1,				/*obj_hidefileno */
+    " %lu:%lu",			/*obj_format */
+
+    1,				/*dset_hidefileno */
+    "DATASET %lu:%lu ",		/*dset_format */
+    "%s",			/*dset_blockformat_pre */
+    "%s",			/*dset_ptformat_pre */
+    "%s",			/*dset_ptformat */
+    1,                          /*array indices */
+    1                           /*escape non printable characters */
+};
+
+/**
+ **  Added for XML  **
+ **/
+/*
+ *  Alternative formating for data dumped to XML
+ *  In general, the numbers are the same, but separators
+ *  except spaces are not used.
+ *
+ *  Some of these are not used, as some kinds of data are
+ *  dumped in completely new subroutines.
+ *
+ *  Some of this formatting may yet need to change.
+ *
+ *  This table only affects XML output.
+ */
+static h5dump_t         xml_dataformat = {
+    0,				/*raw */
+
+    "",				/*fmt_raw */
+    "%d",			/*fmt_int */
+    "%u",			/*fmt_uint */
+    "%d",			/*fmt_schar */
+    "%u",			/*fmt_uchar */
+    "%d",			/*fmt_short */
+    "%u",			/*fmt_ushort */
+    "%ld",			/*fmt_long */
+    "%lu",			/*fmt_ulong */
+    NULL,			/*fmt_llong */
+    NULL,			/*fmt_ullong */
+    "%g",			/*fmt_double */
+    "%g",			/*fmt_float */
+
+    0,				/*ascii */
+    0,				/*str_locale */
+    0,				/*str_repeat */
+
+    " ",			/*arr_pre */
+    "",				/*arr_sep */
+    "",				/*arr_suf */
+    1,				/*arr_linebreak */
+
+    "",				/*cmpd_name */
+    " ",			/*cmpd_sep */
+    "",				/*cmpd_pre */
+    "",				/*cmpd_suf */
+    "",				/*cmpd_end */
+
+    " ",			/*vlen_sep */
+    " ",			/*vlen_pre */
+    "",				/*vlen_suf */
+    "",				/*vlen_end */
+
+    "%s",			/*elmt_fmt */
+    "",				/*elmt_suf1 */
+    " ",			/*elmt_suf2 */
+
+    "",				/*idx_n_fmt */
+    "",				/*idx_sep */
+    "",				/*idx_fmt */
+
+    80,				/*line_ncols *//*standard default columns */
+    0,				/*line_per_line */
+    "",				/*line_pre */
+    "%s",			/*line_1st */
+    "%s",			/*line_cont */
+    "",				/*line_suf */
+    "",				/*line_sep */
+    1,				/*line_multi_new */
+    "   ",			/*line_indent */
+
+    1,				/*skip_first */
+
+    1,				/*obj_hidefileno */
+    " %lu:%lu",			/*obj_format */
+
+    1,				/*dset_hidefileno */
+    "DATASET %lu:%lu ",		/*dset_format */
+    "%s",			/*dset_blockformat_pre */
+    "%s",			/*dset_ptformat_pre */
+    "%s",			/*dset_ptformat */
+     0,                         /*array indices */
+     0                          /*escape non printable characters */
+};
+
+/** XML **/
+
+static const dump_header standardformat = {
+    "standardformat",		/*name */
+    "HDF5",			/*fileebgin */
+    "",				/*fileend */
+    SUPER_BLOCK,			/*bootblockbegin */
+    "",				/*bootblockend */
+    GROUPNAME,			/*groupbegin */
+    "",				/*groupend */
+    DATASET,			/*datasetbegin */
+    "",				/*datasetend */
+    ATTRIBUTE,			/*attributebegin */
+    "",				/*attributeend */
+    DATATYPE,			/*datatypebegin */
+    "",				/*datatypeend */
+    DATASPACE,			/*dataspacebegin */
+    "",				/*dataspaceend */
+    DATA,			/*databegin */
+    "",				/*dataend */
+    SOFTLINK,			/*softlinkbegin */
+    "",				/*softlinkend */
+    SUBSET,			/*subsettingbegin */
+    "",				/*subsettingend */
+    START,			/*startbegin */
+    "",				/*startend */
+    STRIDE,			/*stridebegin */
+    "",				/*strideend */
+    COUNT,			/*countbegin */
+    "",				/*countend */
+    BLOCK,			/*blockbegin */
+    "",				/*blockend */
+
+    "{",			/*fileblockbegin */
+    "}",			/*fileblockend */
+    "{",			/*bootblockblockbegin */
+    "}",			/*bootblockblockend */
+    "{",			/*groupblockbegin */
+    "}",			/*groupblockend */
+    "{",			/*datasetblockbegin */
+    "}",			/*datasetblockend */
+    "{",			/*attributeblockbegin */
+    "}",			/*attributeblockend */
+    "",				/*datatypeblockbegin */
+    "",				/*datatypeblockend */
+    "",				/*dataspaceblockbegin */
+    "",				/*dataspaceblockend */
+    "{",			/*datablockbegin */
+    "}",			/*datablockend */
+    "{",			/*softlinkblockbegin */
+    "}",			/*softlinkblockend */
+    "{",			/*strblockbegin */
+    "}",			/*strblockend */
+    "{",			/*enumblockbegin */
+    "}",			/*enumblockend */
+    "{",			/*structblockbegin */
+    "}",			/*structblockend */
+    "{",			/*vlenblockbegin */
+    "}",			/*vlenblockend */
+    "{",                        /*subsettingblockbegin */
+    "}",                        /*subsettingblockend */
+    "(",                        /*startblockbegin */
+    ");",                       /*startblockend */
+    "(",                        /*strideblockbegin */
+    ");",                       /*strideblockend */
+    "(",                        /*countblockbegin */
+    ");",                       /*countblockend */
+    "(",                        /*blockblockbegin */
+    ");",                       /*blockblockend */
+
+    "",				/*dataspacedescriptionbegin */
+    "",				/*dataspacedescriptionend */
+    "(",			/*dataspacedimbegin */
+    ")",			/*dataspacedimend */
+};
+
+/**
+ ** Added for XML **
+ **/
+/* internal functions used by XML option */
+static void             xml_print_datatype(hid_t, unsigned);
+static void             xml_print_enum(hid_t);
+static int              xml_print_refs(hid_t, int);
+static int              xml_print_strs(hid_t, int);
+static char            *xml_escape_the_string(const char *, int);
+static char            *xml_escape_the_name(const char *);
+
+/* a structure for handling the order command-line parameters come in */
+struct handler_t {
+    void (*func)(hid_t, char *, void *);
+    char *obj;
+    struct subset_t *subset_info;
+};
+
+/*
+ * Command-line options: The user can specify short or long-named
+ * parameters. The long-named ones can be partially spelled. When
+ * adding more, make sure that they don't clash with each other.
+ */
+static const char *s_opts = "hnpeyBHirVa:c:d:f:g:k:l:t:w:xD:uX:o:s:S:A";
+static struct long_options l_opts[] = {
+    { "help", no_arg, 'h' },
+    { "hel", no_arg, 'h' },
+    { "contents", no_arg, 'n' },
+    { "properties", no_arg, 'p' },
+    { "boot-block", no_arg, 'B' },
+    { "boot-bloc", no_arg, 'B' },
+    { "boot-blo", no_arg, 'B' },
+    { "boot-bl", no_arg, 'B' },
+    { "boot-b", no_arg, 'B' },
+    { "boot", no_arg, 'B' },
+    { "boo", no_arg, 'B' },
+    { "bo", no_arg, 'B' },
+    { "header", no_arg, 'H' },
+    { "heade", no_arg, 'H' },
+    { "head", no_arg, 'H' },
+    { "hea", no_arg, 'H' },
+    { "object-ids", no_arg, 'i' },
+    { "object-id", no_arg, 'i' },
+    { "object-i", no_arg, 'i' },
+    { "object", no_arg, 'i' },
+    { "objec", no_arg, 'i' },
+    { "obje", no_arg, 'i' },
+    { "obj", no_arg, 'i' },
+    { "ob", no_arg, 'i' },
+    { "version", no_arg, 'V' },
+    { "versio", no_arg, 'V' },
+    { "versi", no_arg, 'V' },
+    { "vers", no_arg, 'V' },
+    { "ver", no_arg, 'V' },
+    { "ve", no_arg, 'V' },
+    { "attribute", require_arg, 'a' },
+    { "attribut", require_arg, 'a' },
+    { "attribu", require_arg, 'a' },
+    { "attrib", require_arg, 'a' },
+    { "attri", require_arg, 'a' },
+    { "attr", require_arg, 'a' },
+    { "att", require_arg, 'a' },
+    { "at", require_arg, 'a' },
+    { "block", require_arg, 'k' },
+    { "bloc", require_arg, 'k' },
+    { "blo", require_arg, 'k' },
+    { "bl", require_arg, 'k' },
+    { "count", require_arg, 'c' },
+    { "coun", require_arg, 'c' },
+    { "cou", require_arg, 'c' },
+    { "co", require_arg, 'c' },
+    { "dataset", require_arg, 'd' },
+    { "datase", require_arg, 'd' },
+    { "datas", require_arg, 'd' },
+    { "datatype", require_arg, 't' },
+    { "datatyp", require_arg, 't' },
+    { "dataty", require_arg, 't' },
+    { "datat", require_arg, 't' },
+    { "filedriver", require_arg, 'f' },
+    { "filedrive", require_arg, 'f' },
+    { "filedriv", require_arg, 'f' },
+    { "filedri", require_arg, 'f' },
+    { "filedr", require_arg, 'f' },
+    { "filed", require_arg, 'f' },
+    { "file", require_arg, 'f' },
+    { "fil", require_arg, 'f' },
+    { "fi", require_arg, 'f' },
+    { "group", require_arg, 'g' },
+    { "grou", require_arg, 'g' },
+    { "gro", require_arg, 'g' },
+    { "gr", require_arg, 'g' },
+    { "output", require_arg, 'o' },
+    { "outpu", require_arg, 'o' },
+    { "outp", require_arg, 'o' },
+    { "out", require_arg, 'o' },
+    { "ou", require_arg, 'o' },
+    { "soft-link", require_arg, 'l' },
+    { "soft-lin", require_arg, 'l' },
+    { "soft-li", require_arg, 'l' },
+    { "soft-l", require_arg, 'l' },
+    { "soft", require_arg, 'l' },
+    { "sof", require_arg, 'l' },
+    { "so", require_arg, 'l' },
+    { "start", require_arg, 's' },
+    { "star", require_arg, 's' },
+    { "sta", require_arg, 's' },
+    { "stride", require_arg, 'S' },
+    { "strid", require_arg, 'S' },
+    { "string", no_arg, 'r' },
+    { "strin", no_arg, 'r' },
+    { "use-dtd", no_arg, 'u' },
+    { "use-dt", no_arg, 'u' },
+    { "use-d", no_arg, 'u' },
+    { "use-", no_arg, 'u' },
+    { "use", no_arg, 'u' },
+    { "us", no_arg, 'u' },
+    { "u", no_arg, 'u' },
+    { "width", require_arg, 'w' },
+    { "widt", require_arg, 'w' },
+    { "wid", require_arg, 'w' },
+    { "wi", require_arg, 'w' },
+    { "xml-dtd", require_arg, 'D' },
+    { "xml-dt", require_arg, 'D' },
+    { "xml-d", require_arg, 'D' },
+    { "xml-ns", require_arg, 'X' },
+    { "xml-n", require_arg, 'X' },
+    { "xml", no_arg, 'x' },
+    { "xm", no_arg, 'x' },
+    { NULL, 0, '\0' }
+};
+
+/**
+ **  Change for XML  **
+ **
+ **  The 'dump_xxx' functions have two versions, standard and XML.
+ **
+ **    They are called indirectly through the 'dump_function_table'.
+ **    e.g., dump_group(...) becomes dump_functions->dump_group(...);
+ **
+ **    The standard functions are unchanged except for the way
+ **    they are called
+ **/
+
+/* The dump functions of the dump_function_table */
+
+/* standard format:  no change */
+static void             dump_group(hid_t, const char *);
+static void             dump_named_datatype(hid_t, const char *);
+static void             dump_dataset(hid_t, const char *, struct subset_t *);
+static void             dump_dataspace(hid_t space);
+static void             dump_datatype(hid_t type);
+static herr_t           dump_attr(hid_t, const char *, void *);
+static void             dump_data(hid_t, int, struct subset_t *, int);
+static void             dump_dcpl(hid_t dcpl, hid_t type_id, hid_t obj_id);
+static void             dump_comment(hid_t obj_id);
+static void             dump_fcpl(hid_t fid);
+static void             dump_fcontents(hid_t fid);
+
+/* XML format:   same interface, alternative output */
+
+static void             xml_dump_group(hid_t, const char *);
+static void             xml_dump_named_datatype(hid_t, const char *);
+static void             xml_dump_dataset(hid_t, const char *, struct subset_t *);
+static void             xml_dump_dataspace(hid_t space);
+static void             xml_dump_datatype(hid_t type);
+static herr_t           xml_dump_attr(hid_t, const char *, void *);
+static void             xml_dump_data(hid_t, int, struct subset_t *, int);
+
+/**
+ ** Added for XML **
+ **
+ **  This is the global dispatch table for the dump functions.
+ **/
+/* the table of dump functions */
+typedef struct dump_functions_t {
+    void                (*dump_group_function) (hid_t, const char *);
+    void                (*dump_named_datatype_function) (hid_t, const char *);
+    void                (*dump_dataset_function) (hid_t, const char *, struct subset_t *);
+    void                (*dump_dataspace_function) (hid_t);
+    void                (*dump_datatype_function) (hid_t);
+    herr_t              (*dump_attribute_function) (hid_t, const char *, void *);
+    void                (*dump_data_function) (hid_t, int, struct subset_t *, int);
+} dump_functions;
+
+/* Standard DDL output */
+static const dump_functions ddl_function_table = {
+    dump_group,
+    dump_named_datatype,
+    dump_dataset,
+    dump_dataspace,
+    dump_datatype,
+    dump_attr,
+    dump_data
+};
+
+/* XML output */
+static const dump_functions xml_function_table = {
+    xml_dump_group,
+    xml_dump_named_datatype,
+    xml_dump_dataset,
+    xml_dump_dataspace,
+    xml_dump_datatype,
+    xml_dump_attr,
+    xml_dump_data
+};
+
+/*
+ * The global table is set to either ddl_function_table or
+ * xml_function_table in the initialization.
+ */
+static const dump_functions *dump_function_table;
+
+
+/*-------------------------------------------------------------------------
+ * Function:    leave
+ *
+ * Purpose:     Shutdown MPI & HDF5 and call exit()
+ *
+ * Return:      Does not return
+ *
+ * Programmer:  Quincey Koziol
+ *              Saturday, 31. January 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+leave(int ret)
+{
+    h5tools_close();
+
+    exit(ret);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    usage
+ *
+ * Purpose:     Print the usage message about dumper
+ *
+ * Return:      void
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+usage(const char *prog)
+{
+    fflush(stdout);
+    fprintf(stdout, "usage: %s [OPTIONS] file\n", prog);
+    fprintf(stdout, "  OPTIONS\n");
+    fprintf(stdout, "     -h, --help           Print a usage message and exit\n");
+    fprintf(stdout, "     -n, --contents       Print a list of the file contents and exit\n");
+    fprintf(stdout, "     -B, --bootblock      Print the content of the boot block\n");
+    fprintf(stdout, "     -H, --header         Print the header only; no data is displayed\n");
+    fprintf(stdout, "     -A                   Print the header and value of attributes; data of datasets is not displayed\n");
+    fprintf(stdout, "     -i, --object-ids     Print the object ids\n");
+    fprintf(stdout, "     -r, --string         Print 1-byte integer datasets as ASCII\n");
+    fprintf(stdout, "     -e,                  Escape non printing characters\n");
+    fprintf(stdout, "     -V, --version        Print version number and exit\n");
+    fprintf(stdout, "     -a P, --attribute=P  Print the specified attribute\n");
+    fprintf(stdout, "     -d P, --dataset=P    Print the specified dataset\n");
+    fprintf(stdout, "     -y                   Do not print array indices with the data\n");
+    fprintf(stdout, "     -p,   --properties   Print dataset filters, storage layout and fill value\n");
+    fprintf(stdout, "     -f D, --filedriver=D Specify which driver to open the file with\n");
+    fprintf(stdout, "     -g P, --group=P      Print the specified group and all members\n");
+    fprintf(stdout, "     -l P, --soft-link=P  Print the value(s) of the specified soft link\n");
+    fprintf(stdout, "     -o F, --output=F     Output raw data into file F\n");
+    fprintf(stdout, "     -t P, --datatype=P   Print the specified named data type\n");
+    fprintf(stdout, "     -w N, --width=N      Set the number of columns of output\n");
+    fprintf(stdout, "     -x, --xml            Output in XML using Schema\n");
+    fprintf(stdout, "     -u, --use-dtd        Output in XML using DTD\n");
+    fprintf(stdout, "     -D U, --xml-dtd=U    Use the DTD or schema at U\n");
+    fprintf(stdout, "     -X S, --xml-ns=S      (XML Schema) Use qualified names n the XML\n");
+    fprintf(stdout, "                          \":\": no namespace, default: \"hdf5:\"\n");
+    fprintf(stdout, "                          E.g., to dump a file called `-f', use h5dump -- -f\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, " Subsetting is available by using the following options with a dataset\n");
+    fprintf(stdout, " attribute. Subsetting is done by selecting a hyperslab from the data.\n");
+    fprintf(stdout, " Thus, the options mirror those for performing a hyperslab selection.\n");
+    fprintf(stdout, " The START and COUNT parameters are mandatory if you do subsetting.\n");
+    fprintf(stdout, " The STRIDE and BLOCK parameters are optional and will default to 1 in\n");
+    fprintf(stdout, " each dimension.\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "      -s L, --start=L     Offset of start of subsetting selection\n");
+    fprintf(stdout, "      -S L, --stride=L    Hyperslab stride\n");
+    fprintf(stdout, "      -c L, --count=L     Number of blocks to include in selection\n");
+    fprintf(stdout, "      -k L, --block=L     Size of block in hyperslab\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "  D - is the file driver to use in opening the file. Acceptable values\n");
+    fprintf(stdout, "        are \"sec2\", \"family\", \"split\", \"multi\", and \"stream\". Without\n");
+    fprintf(stdout, "        the file driver flag, the file will be opened with each driver in\n");
+    fprintf(stdout, "        turn and in the order specified above until one driver succeeds\n");
+    fprintf(stdout, "        in opening the file.\n");
+    fprintf(stdout, "  F - is a filename.\n");
+    fprintf(stdout, "  P - is the full path from the root group to the object.\n");
+    fprintf(stdout, "  N - is an integer greater than 1.\n");
+    fprintf(stdout, "  L - is a list of integers the number of which are equal to the\n");
+    fprintf(stdout, "        number of dimensions in the dataspace being queried\n");
+    fprintf(stdout, "  U - is a URI reference (as defined in [IETF RFC 2396],\n");
+    fprintf(stdout, "        updated by [IETF RFC 2732])\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "  Examples:\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "  1) Attribute foo of the group /bar_none in file quux.h5\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "     	h5dump -a /bar_none/foo quux.h5\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "  2) Selecting a subset from dataset /foo in file quux.h5\n");
+    fprintf(stdout, "\n");
+    fprintf(stdout, "      h5dump -d /foo -s \"0,1\" -S \"1,1\" -c \"2,3\" -k \"2,2\" quux.h5\n");
+    fprintf(stdout, "\n");
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    print_datatype
+ *
+ * Purpose:     print the data type.
+ *
+ * Return:      void
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+print_datatype(hid_t type,unsigned in_group)
+{
+    char       *fname;
+    hid_t       mtype, str_type;
+    unsigned    nmembers;
+    int         perm[H5DUMP_MAX_RANK];
+    unsigned    ndims;
+    unsigned    i;
+    size_t      size=0;
+    hsize_t     dims[H5DUMP_MAX_RANK];
+    H5T_str_t   str_pad;
+    H5T_cset_t  cset;
+    H5G_stat_t  statbuf;
+    H5T_order_t order;
+    hid_t       super;
+    hid_t       tmp_type;
+    htri_t      is_vlstr=FALSE;
+
+    if (!in_group && H5Tcommitted(type) > 0) {
+        obj_t  *obj;    /* Found object */
+
+        H5Gget_objinfo(type, ".", TRUE, &statbuf);
+        obj = search_obj(type_table, statbuf.objno);
+
+        if (obj) {
+            if (!obj->recorded) {
+                unsigned long 	objno[2];	/*object number			*/
+
+                objno[0] = (unsigned long)(obj->objno);
+#if H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG
+                objno[1] = (unsigned long)(obj->objno >> 8*sizeof(long));
+#else /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+                objno[1] = 0;
+#endif /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+                HDfprintf(stdout,"\"/#%lu:%lu\"", objno[0], objno[1]);
+            }
+            else
+                printf("\"%s\"", obj->objname);
+        } else {
+            error_msg(progname, "unknown committed type.\n");
+            d_status = EXIT_FAILURE;
+        }
+    } else {
+        switch (H5Tget_class(type)) {
+        case H5T_INTEGER:
+            if (H5Tequal(type, H5T_STD_I8BE)) {
+                printf("H5T_STD_I8BE");
+            } else if (H5Tequal(type, H5T_STD_I8LE)) {
+                printf("H5T_STD_I8LE");
+            } else if (H5Tequal(type, H5T_STD_I16BE)) {
+                printf("H5T_STD_I16BE");
+            } else if (H5Tequal(type, H5T_STD_I16LE)) {
+                printf("H5T_STD_I16LE");
+            } else if (H5Tequal(type, H5T_STD_I32BE)) {
+                printf("H5T_STD_I32BE");
+            } else if (H5Tequal(type, H5T_STD_I32LE)) {
+                printf("H5T_STD_I32LE");
+            } else if (H5Tequal(type, H5T_STD_I64BE)) {
+                printf("H5T_STD_I64BE");
+            } else if (H5Tequal(type, H5T_STD_I64LE)) {
+                printf("H5T_STD_I64LE");
+            } else if (H5Tequal(type, H5T_STD_U8BE)) {
+                printf("H5T_STD_U8BE");
+            } else if (H5Tequal(type, H5T_STD_U8LE)) {
+                printf("H5T_STD_U8LE");
+            } else if (H5Tequal(type, H5T_STD_U16BE)) {
+                printf("H5T_STD_U16BE");
+            } else if (H5Tequal(type, H5T_STD_U16LE)) {
+                printf("H5T_STD_U16LE");
+            } else if (H5Tequal(type, H5T_STD_U32BE)) {
+                printf("H5T_STD_U32BE");
+            } else if (H5Tequal(type, H5T_STD_U32LE)) {
+                printf("H5T_STD_U32LE");
+            } else if (H5Tequal(type, H5T_STD_U64BE)) {
+                printf("H5T_STD_U64BE");
+            } else if (H5Tequal(type, H5T_STD_U64LE)) {
+                printf("H5T_STD_U64LE");
+            } else if (H5Tequal(type, H5T_NATIVE_SCHAR)) {
+                printf("H5T_NATIVE_SCHAR");
+            } else if (H5Tequal(type, H5T_NATIVE_UCHAR)) {
+                printf("H5T_NATIVE_UCHAR");
+            } else if (H5Tequal(type, H5T_NATIVE_SHORT)) {
+                printf("H5T_NATIVE_SHORT");
+            } else if (H5Tequal(type, H5T_NATIVE_USHORT)) {
+                printf("H5T_NATIVE_USHORT");
+            } else if (H5Tequal(type, H5T_NATIVE_INT)) {
+                printf("H5T_NATIVE_INT");
+            } else if (H5Tequal(type, H5T_NATIVE_UINT)) {
+                printf("H5T_NATIVE_UINT");
+            } else if (H5Tequal(type, H5T_NATIVE_LONG)) {
+                printf("H5T_NATIVE_LONG");
+            } else if (H5Tequal(type, H5T_NATIVE_ULONG)) {
+                printf("H5T_NATIVE_ULONG");
+            } else if (H5Tequal(type, H5T_NATIVE_LLONG)) {
+                printf("H5T_NATIVE_LLONG");
+            } else if (H5Tequal(type, H5T_NATIVE_ULLONG)) {
+                printf("H5T_NATIVE_ULLONG");
+            } else {
+                printf("undefined integer");
+                d_status = EXIT_FAILURE;
+            }
+            break;
+
+        case H5T_FLOAT:
+            if (H5Tequal(type, H5T_IEEE_F32BE)) {
+                printf("H5T_IEEE_F32BE");
+            } else if (H5Tequal(type, H5T_IEEE_F32LE)) {
+                printf("H5T_IEEE_F32LE");
+            } else if (H5Tequal(type, H5T_IEEE_F64BE)) {
+                printf("H5T_IEEE_F64BE");
+            } else if (H5Tequal(type, H5T_IEEE_F64LE)) {
+                printf("H5T_IEEE_F64LE");
+            } else if (H5Tequal(type, H5T_NATIVE_FLOAT)) {
+                printf("H5T_NATIVE_FLOAT");
+            } else if (H5Tequal(type, H5T_NATIVE_DOUBLE)) {
+                printf("H5T_NATIVE_DOUBLE");
+            } else if (H5Tequal(type, H5T_NATIVE_LDOUBLE)) {
+                printf("H5T_NATIVE_LDOUBLE");
+            } else {
+                printf("undefined float");
+                d_status = EXIT_FAILURE;
+            }
+            break;
+
+        case H5T_TIME:
+            printf("H5T_TIME: not yet implemented");
+            break;
+
+        case H5T_STRING:
+            /* Make a copy of type in memory in case when TYPE is on disk, the size
+             * will be bigger than in memory.  This makes it easier to compare
+             * types in memory. */
+            tmp_type = H5Tcopy(type);
+            size = H5Tget_size(tmp_type);
+            str_pad = H5Tget_strpad(tmp_type);
+            cset = H5Tget_cset(tmp_type);
+            is_vlstr = H5Tis_variable_str(tmp_type);
+
+            printf("H5T_STRING %s\n", dump_header_format->strblockbegin);
+            indent += COL;
+
+            indentation(indent + COL);
+            if(is_vlstr)
+                printf("%s H5T_VARIABLE;\n", STRSIZE);
+            else
+                printf("%s %d;\n", STRSIZE, (int) size);
+
+            indentation(indent + COL);
+            printf("%s ", STRPAD);
+            if (str_pad == H5T_STR_NULLTERM)
+                printf("H5T_STR_NULLTERM;\n");
+            else if (str_pad == H5T_STR_NULLPAD)
+                printf("H5T_STR_NULLPAD;\n");
+            else if (str_pad == H5T_STR_SPACEPAD)
+                printf("H5T_STR_SPACEPAD;\n");
+            else
+                printf("H5T_STR_ERROR;\n");
+
+            indentation(indent + COL);
+            printf("%s ", CSET);
+
+            if (cset == H5T_CSET_ASCII)
+                printf("H5T_CSET_ASCII;\n");
+            else
+                printf("unknown_cset;\n");
+
+            str_type = H5Tcopy(H5T_C_S1);
+            if(is_vlstr)
+                H5Tset_size(str_type, H5T_VARIABLE);
+            else
+                H5Tset_size(str_type, size);
+            H5Tset_cset(str_type, cset);
+            H5Tset_strpad(str_type, str_pad);
+
+            indentation(indent + COL);
+            printf("%s ", CTYPE);
+
+            /* Check C variable-length string first. Are the two types equal? */
+            if (H5Tequal(tmp_type, str_type)) {
+                printf("H5T_C_S1;\n");
+                goto done;
+            }
+
+            /* Change the endianness and see if they're equal. */
+            order = H5Tget_order(tmp_type);
+            if(order==H5T_ORDER_LE)
+                H5Tset_order(str_type, H5T_ORDER_LE);
+            else if(order==H5T_ORDER_BE)
+                H5Tset_order(str_type, H5T_ORDER_BE);
+
+            if (H5Tequal(tmp_type, str_type)) {
+                printf("H5T_C_S1;\n");
+                goto done;
+            }
+
+            /* If not equal to C variable-length string, check Fortran type. */
+            H5Tclose(str_type);
+            str_type = H5Tcopy(H5T_FORTRAN_S1);
+            H5Tset_cset(str_type, cset);
+            H5Tset_size(str_type, size);
+            H5Tset_strpad(str_type, str_pad);
+
+            /* Are the two types equal? */
+            if (H5Tequal(tmp_type, str_type)) {
+                printf("H5T_FORTRAN_S1;\n");
+                goto done;
+            }
+
+            /* Change the endianness and see if they're equal. */
+            order = H5Tget_order(tmp_type);
+            if(order==H5T_ORDER_LE)
+                H5Tset_order(str_type, H5T_ORDER_LE);
+            else if(order==H5T_ORDER_BE)
+                H5Tset_order(str_type, H5T_ORDER_BE);
+
+            if (H5Tequal(tmp_type, str_type)) {
+                printf("H5T_FORTRAN_S1;\n");
+                goto done;
+            }
+
+            /* Type doesn't match any of above. */
+            printf("unknown_one_character_type;\n ");
+            d_status = EXIT_FAILURE;
+
+done:
+            H5Tclose(str_type);
+            H5Tclose(tmp_type);
+
+            indent -= COL;
+            indentation(indent + COL);
+            printf("%s", dump_header_format->strblockend);
+            break;
+
+        case H5T_BITFIELD:
+            if (H5Tequal(type, H5T_STD_B8BE)) {
+                printf("H5T_STD_B8BE");
+            } else if (H5Tequal(type, H5T_STD_B8LE)) {
+                printf("H5T_STD_B8LE");
+            } else if (H5Tequal(type, H5T_STD_B16BE)) {
+                printf("H5T_STD_B16BE");
+            } else if (H5Tequal(type, H5T_STD_B16LE)) {
+                printf("H5T_STD_B16LE");
+            } else if (H5Tequal(type, H5T_STD_B32BE)) {
+                printf("H5T_STD_B32BE");
+            } else if (H5Tequal(type, H5T_STD_B32LE)) {
+                printf("H5T_STD_B32LE");
+            } else if (H5Tequal(type, H5T_STD_B64BE)) {
+                printf("H5T_STD_B64BE");
+            } else if (H5Tequal(type, H5T_STD_B64LE)) {
+                printf("H5T_STD_B64LE");
+            } else {
+                printf("undefined bitfield");
+                d_status = EXIT_FAILURE;
+            }
+            break;
+
+        case H5T_OPAQUE:
+            printf("\n");
+            indentation(indent + COL);
+            printf("H5T_OPAQUE;\n");
+            indentation(indent + COL);
+            printf("OPAQUE_TAG \"%s\";\n", H5Tget_tag(type));
+            indentation(indent);
+            break;
+
+        case H5T_COMPOUND:
+            nmembers = H5Tget_nmembers(type);
+            printf("H5T_COMPOUND %s\n", dump_header_format->structblockbegin);
+
+            for (i = 0; i < nmembers; i++) {
+                fname = H5Tget_member_name(type, i);
+                mtype = H5Tget_member_type(type, i);
+                indentation(indent + COL);
+
+                if (H5Tget_class(mtype) == H5T_COMPOUND)
+                    indent += COL;
+
+                print_datatype(mtype,0);
+
+                if (H5Tget_class(mtype) == H5T_COMPOUND)
+                    indent -= COL;
+
+                printf(" \"%s\";\n", fname);
+                free(fname);
+            }
+
+            indentation(indent);
+            printf("%s", dump_header_format->structblockend);
+            break;
+
+        case H5T_REFERENCE:
+            printf("H5T_REFERENCE");
+            break;
+
+        case H5T_ENUM:
+            printf("H5T_ENUM %s\n", dump_header_format->enumblockbegin);
+            indent += COL;
+            indentation(indent + COL);
+            super = H5Tget_super(type);
+            print_datatype(super,0);
+            printf(";\n");
+            print_enum(type);
+            indent -= COL;
+            indentation(indent + COL);
+            printf("%s", dump_header_format->enumblockend);
+            break;
+
+        case H5T_VLEN:
+            printf("H5T_VLEN %s ", dump_header_format->vlenblockbegin);
+            super = H5Tget_super(type);
+            print_datatype(super,0);
+            H5Tclose(super);
+
+            /* Print closing */
+            printf("%s", dump_header_format->vlenblockend);
+            break;
+
+        case H5T_ARRAY:
+            /* Get array base type */
+            super = H5Tget_super(type);
+
+            /* Print lead-in */
+            printf("H5T_ARRAY { ");
+
+            /* Get array information */
+            ndims = H5Tget_array_ndims(type);
+            H5Tget_array_dims(type, dims, perm);
+
+            /* Print array dimensions */
+            for (i = 0; i < ndims; i++)
+                printf("[%d]", (int) dims[i]);
+
+            printf(" ");
+
+            /* Print base type */
+            print_datatype(super,0);
+
+            /* Close array base type */
+            H5Tclose(super);
+
+            /* Print closing */
+            printf(" }");
+
+            break;
+
+        default:
+            printf("unknown data type");
+            d_status = EXIT_FAILURE;
+            break;
+        }
+    } /* end else */
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_datatype
+ *
+ * Purpose:     Dump the data type. Data type can be HDF5 predefined
+ *              atomic data type or committed/transient data type.
+ *
+ * Return:      void
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+dump_datatype(hid_t type)
+{
+    indent += COL;
+
+    indentation(indent);
+    printf("%s %s ", dump_header_format->datatypebegin,
+           dump_header_format->datatypeblockbegin);
+
+    print_datatype(type,0);
+
+    end_obj(dump_header_format->datatypeend,
+	    dump_header_format->datatypeblockend);
+    indent -= COL;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_dataspace
+ *
+ * Purpose:     Dump the data space. Data space can be named data space,
+ *              array, or others.
+ *
+ * Return:      void
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+dump_dataspace(hid_t space)
+{
+    hsize_t   size[H5DUMP_MAX_RANK];
+    hsize_t   maxsize[H5DUMP_MAX_RANK];
+    int       ndims = H5Sget_simple_extent_dims(space, size, maxsize);
+    H5S_class_t space_type = H5Sget_simple_extent_type(space);
+    int       i;
+
+    indentation(indent + COL);
+    printf("%s ", dump_header_format->dataspacebegin);
+
+    switch (space_type) {
+        case H5S_SCALAR:
+	    /* scalar dataspace */
+	    HDfprintf(stdout, "%s %s",
+		      dump_header_format->dataspacedescriptionbegin, S_SCALAR);
+            break;
+        case H5S_SIMPLE:
+	    /* simple dataspace */
+	    HDfprintf(stdout, "%s %s { %s %Hu",
+		      dump_header_format->dataspacedescriptionbegin, S_SIMPLE,
+		      dump_header_format->dataspacedimbegin, size[0]);
+
+	    for (i = 1; i < ndims; i++)
+		HDfprintf(stdout, ", %Hu", size[i]);
+
+	    printf(" %s / ", dump_header_format->dataspacedimend);
+
+	    if (maxsize[0] == H5S_UNLIMITED)
+		HDfprintf(stdout, "%s %s",
+			  dump_header_format->dataspacedimbegin,
+			  "H5S_UNLIMITED");
+	    else
+		HDfprintf(stdout, "%s %Hu",
+                          dump_header_format->dataspacedimbegin, maxsize[0]);
+
+	    for (i = 1; i < ndims; i++)
+		if (maxsize[i] == H5S_UNLIMITED)
+		    HDfprintf(stdout, ", %s", "H5S_UNLIMITED");
+		else
+		    HDfprintf(stdout, ", %Hu", maxsize[i]);
+
+	    printf(" %s }", dump_header_format->dataspacedimend);
+
+	    break;
+        case H5S_COMPLEX:
+	    printf("%s not yet implemented %s\n", BEGIN, END);
+            break;
+        case H5S_NO_CLASS:
+        default:
+	    printf("%s unknown dataspace %s\n", BEGIN, END);
+    }
+
+    end_obj(dump_header_format->dataspaceend,
+	    dump_header_format->dataspaceblockend);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_attr
+ *
+ * Purpose:     dump the attribute
+ *
+ * Return:      Success:        SUCCEED
+ *
+ *              Failure:        FAIL
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+dump_attr(hid_t attr, const char *attr_name, void UNUSED * op_data)
+{
+    hid_t       attr_id, type, space;
+    herr_t      ret = SUCCEED;
+
+    indentation(indent);
+    begin_obj(dump_header_format->attributebegin, attr_name,
+	      dump_header_format->attributeblockbegin);
+
+    if ((attr_id = H5Aopen_name(attr, attr_name)) < 0) {
+	indentation(indent + COL);
+        error_msg(progname, "unable to open attribute \"%s\"\n", attr_name);
+	indentation(indent);
+	end_obj(dump_header_format->attributeend,
+		dump_header_format->attributeblockend);
+	d_status = EXIT_FAILURE;
+	ret = FAIL;
+    } else {
+	type = H5Aget_type(attr_id);
+	space = H5Aget_space(attr_id);
+	dump_datatype(type);
+	dump_dataspace(space);
+
+	if (display_oid)
+	    dump_oid(attr_id);
+
+	if (display_data || display_attr_data)
+	    dump_data(attr_id, ATTRIBUTE_DATA, NULL, display_ai);
+
+	H5Tclose(type);
+	H5Sclose(space);
+	H5Aclose(attr_id);
+	indentation(indent);
+	end_obj(dump_header_format->attributeend,
+		dump_header_format->attributeblockend);
+    }
+
+    return ret;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_selected_attr
+ *
+ * Purpose:     dump the selected attribute
+ *
+ * Return:      Success:        SUCCEED
+ *
+ *              Failure:        FAIL
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+dump_selected_attr(hid_t loc_id, const char *name)
+{
+    int j;
+    char *obj_name;
+    const char *attr_name;
+    hid_t  oid, attr_id, type, space;
+    H5G_stat_t statbuf;
+
+    j = (int)strlen(name) - 1;
+    obj_name = malloc((size_t)j + 2);
+
+    /* find the last / */
+    while (name[j] != '/' && j >= 0)
+	j--;
+
+    /* object name */
+    if (j == -1) {
+	strcpy(obj_name, "/");
+    } else {
+        strncpy(obj_name, name, (size_t)j + 1);
+        obj_name[j + 1] = '\0';
+    }
+
+    attr_name = name + j + 1;
+    begin_obj(dump_header_format->attributebegin, name,
+	      dump_header_format->attributeblockbegin);
+    H5Gget_objinfo(loc_id, obj_name, FALSE, &statbuf);
+
+    switch (statbuf.type) {
+    case H5G_GROUP:
+	if ((oid = H5Gopen(loc_id, obj_name)) < 0) {
+	    indentation(COL);
+            error_msg(progname, "unable to open group \"%s\"\n", obj_name);
+	    end_obj(dump_header_format->attributeend,
+		    dump_header_format->attributeblockend);
+	    d_status = EXIT_FAILURE;
+	    return FAIL;
+	}
+	break;
+
+    case H5G_DATASET:
+	if ((oid = H5Dopen(loc_id, obj_name)) < 0) {
+	    indentation(COL);
+            error_msg(progname, "unable to open dataset \"%s\"\n", obj_name);
+	    end_obj(dump_header_format->attributeend,
+		    dump_header_format->attributeblockend);
+	    d_status = EXIT_FAILURE;
+	    return FAIL;
+	}
+	break;
+
+    case H5G_TYPE:
+	if ((oid = H5Topen(loc_id, obj_name)) < 0) {
+	    indentation(COL);
+            error_msg(progname, "unable to open datatype \"%s\"\n", obj_name);
+	    end_obj(dump_header_format->attributeend,
+		    dump_header_format->attributeblockend);
+	    d_status = EXIT_FAILURE;
+	    return FAIL;
+	}
+	break;
+
+    default:
+	indentation(COL);
+        error_msg(progname, "unable to open unknown \"%s\"\n", obj_name);
+	end_obj(dump_header_format->attributeend,
+		dump_header_format->attributeblockend);
+	d_status = EXIT_FAILURE;
+	return FAIL;
+    }
+
+    if ((attr_id = H5Aopen_name(oid, attr_name)) >= 0) {
+	type = H5Aget_type(attr_id);
+	space = H5Aget_space(attr_id);
+	dump_datatype(type);
+	dump_dataspace(space);
+
+	if (display_oid)
+	    dump_oid(attr_id);
+
+	if (display_data || display_attr_data)
+	    dump_data(attr_id, ATTRIBUTE_DATA, NULL, display_ai);
+
+	H5Tclose(type);
+	H5Sclose(space);
+	H5Aclose(attr_id);
+	end_obj(dump_header_format->attributeend,
+		dump_header_format->attributeblockend);
+    } else {
+	indentation(COL);
+        error_msg(progname, "unable to open attribute \"%s\"\n", obj_name);
+	end_obj(dump_header_format->attributeend,
+		dump_header_format->attributeblockend);
+	d_status = EXIT_FAILURE;
+    }
+
+    switch (statbuf.type) {
+    case H5G_GROUP:
+	if (H5Gclose(oid) < 0) {
+	    d_status = EXIT_FAILURE;
+	    return FAIL;
+	}
+	break;
+
+    case H5G_DATASET:
+	if (H5Dclose(oid) < 0) {
+	    d_status = EXIT_FAILURE;
+	    return FAIL;
+	}
+	break;
+
+    case H5G_TYPE:
+	if (H5Tclose(oid) < 0) {
+	    d_status = EXIT_FAILURE;
+	    return FAIL;
+	}
+	break;
+    default:
+	d_status = EXIT_FAILURE;
+	return FAIL;
+    }
+
+    free(obj_name);
+    return SUCCEED;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_all
+ *
+ * Purpose:     Dump everything in the specified object
+ *
+ * Return:      Success:        SUCCEED
+ *
+ *              Failure:        FAIL
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *          RMcG, November 2000
+ *          Added XML support. Also, optionally checks the op_data
+ *          argument.
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+dump_all(hid_t group, const char *name, void * op_data)
+{
+    hid_t       obj;
+    char       *targbuf, *tmp = NULL;
+    H5G_stat_t  statbuf;
+    herr_t      ret = SUCCEED;
+
+    H5Gget_objinfo(group, name, FALSE, &statbuf);
+
+    if (*(int *)op_data != H5G_UNKNOWN && statbuf.type != *(int *) op_data)
+        goto done;
+
+    tmp = malloc(strlen(prefix) + strlen(name) + 2);
+    strcpy(tmp, prefix);
+
+    switch (statbuf.type) {
+    case H5G_LINK:
+	indentation(indent);
+	targbuf = malloc(statbuf.linklen);
+
+	if (!doxml) {
+	    begin_obj(dump_header_format->softlinkbegin, name,
+		      dump_header_format->softlinkblockbegin);
+	    indentation(indent + COL);
+	}
+
+	if (H5Gget_linkval(group, name, statbuf.linklen, targbuf) < 0) {
+            error_msg(progname, "unable to get link value\n");
+	    d_status = EXIT_FAILURE;
+            ret = FAIL;
+	} else {
+	    /* print the value of a soft link */
+	    if (!doxml) {
+		/* Standard DDL: no modification */
+		printf("LINKTARGET \"%s\"\n", targbuf);
+	    } else {
+		/* XML */
+		char *linkxid = malloc(100);
+		char *parentxid = malloc(100);
+		char *targetxid = malloc(100);
+                char *t_prefix = xml_escape_the_name(strcmp(prefix,"") ? prefix : "/");
+                char *t_name = xml_escape_the_name(name);
+                char *t_targbuf = xml_escape_the_name(targbuf);
+                char *tmp2, *t_tmp;
+		int res;
+
+                tmp2 = malloc(strlen(prefix) + statbuf.linklen + 1);
+                strcpy(tmp2, prefix);
+
+                if (targbuf && targbuf[0] == '/')
+                    strcpy(tmp2, targbuf);
+                else
+                    strcat(strcat(tmp2, "/"), targbuf);
+
+                t_tmp = xml_escape_the_name(strcat(strcat(tmp, "/"), name));
+		xml_name_to_XID(t_tmp,linkxid,100,1);
+		xml_name_to_XID(prefix,parentxid,100,1);
+
+		res = xml_name_to_XID(tmp2,targetxid,100,0);
+
+		if (res == 0) {
+			/* target obj found */
+			printf("<%sSoftLink LinkName=\"%s\" "
+			       "OBJ-XID=\"%s\" "
+			       "H5SourcePath=\"%s\" "
+                               "TargetPath=\"%s\" TargetObj=\"%s\" "
+			       "Parents=\"%s\" H5ParentPaths=\"%s\" />\n",
+				xmlnsprefix,
+				t_name,
+				linkxid,
+				t_tmp,
+				t_targbuf, targetxid,
+				parentxid, t_prefix);
+			free(targetxid);
+		} else {
+			/* dangling link -- omit from xml attributes */
+			printf("<%sSoftLink LinkName=\"%s\" "
+			       "OBJ-XID=\"%s\" "
+			       "H5SourcePath=\"%s\" "
+                               "TargetPath=\"%s\"  "
+			       "Parents=\"%s\" H5ParentPaths=\"%s\" />\n",
+				xmlnsprefix,
+				t_name,
+				linkxid,
+				t_tmp,
+				t_targbuf,
+				parentxid, t_prefix);
+		}
+
+                free(t_name);
+                free(t_targbuf);
+                free(t_tmp);
+                free(tmp2);
+                free(linkxid);
+                free(parentxid);
+	    }
+	}
+
+	if (!doxml) {
+	    indentation(indent);
+	    end_obj(dump_header_format->softlinkend,
+		    dump_header_format->softlinkblockend);
+	}
+
+	free(targbuf);
+	break;
+
+    case H5G_GROUP:
+	if ((obj = H5Gopen(group, name)) < 0) {
+            error_msg(progname, "unable to dump group \"%s\"\n", name);
+	    d_status = EXIT_FAILURE;
+            ret = FAIL;
+	} else {
+            size_t new_len = strlen(prefix) + strlen(name) + 2;
+
+            if (prefix_len <= new_len) {
+                prefix_len = new_len + 1;
+                prefix = realloc(prefix, prefix_len);
+            }
+
+	    strcat(strcat(prefix, "/"), name);
+	    dump_function_table->dump_group_function(obj, name);
+	    strcpy(prefix, tmp);
+	    H5Gclose(obj);
+	}
+
+	break;
+
+    case H5G_DATASET:
+	if ((obj = H5Dopen(group, name)) >= 0) {
+	    /* hard link */
+	    H5Gget_objinfo(obj, ".", TRUE, &statbuf);
+
+	    if (statbuf.nlink > 1) {
+                obj_t  *found_obj;    /* Found object */
+
+		found_obj = search_obj(dset_table, statbuf.objno);
+
+		if (found_obj == NULL) {
+		    indentation(indent);
+		    begin_obj(dump_header_format->datasetbegin, name,
+			      dump_header_format->datasetblockbegin);
+		    indentation(indent + COL);
+                    error_msg(progname,
+                              "internal error (file %s:line %d)\n",
+                              __FILE__, __LINE__);
+		    indentation(indent);
+		    end_obj(dump_header_format->datasetend,
+			    dump_header_format->datasetblockend);
+		    d_status = EXIT_FAILURE;
+                    ret = FAIL;
+		    H5Dclose(obj);
+		    goto done;
+		} else if (found_obj->displayed) {
+		    indentation(indent);
+
+		    if (!doxml) {
+			begin_obj(dump_header_format->datasetbegin, name,
+				  dump_header_format->datasetblockbegin);
+			indentation(indent + COL);
+			printf("%s \"%s\"\n", HARDLINK, found_obj->objname);
+			indentation(indent);
+			end_obj(dump_header_format->datasetend,
+				dump_header_format->datasetblockend);
+		    } else {
+			/* the XML version */
+                        char *t_tmp;
+                        char *t_prefix;
+                        char *t_name;
+			char *dsetxid = malloc(100);
+			char *parentxid = malloc(100);
+			char *pointerxid = malloc(100);
+                        char *tx_tmp = malloc(strlen(tmp)+strlen(name)+1);
+				strcpy(tx_tmp,tmp);
+                        t_tmp = xml_escape_the_name(strcat(strcat(tx_tmp, "/"), name));
+                        t_prefix = xml_escape_the_name(prefix);
+                        t_name = xml_escape_the_name(name);
+			xml_name_to_XID( strcat(strcat(tmp,"/"),name), dsetxid,100,1);
+			xml_name_to_XID( prefix ,parentxid,100,1);
+
+			printf("<%sDataset Name=\"%s\" OBJ-XID=\"%s-%d\" "
+                               "H5Path=\"%s\" Parents=\"%s\" "
+                               "H5ParentPaths=\"%s\">\n",
+				xmlnsprefix,
+			       t_name, dsetxid, get_next_xid(),
+				t_tmp, parentxid,
+			       (strcmp(prefix, "") ? t_prefix : "/"));
+
+			indentation(indent + COL);
+			xml_name_to_XID(found_obj->objname,pointerxid,100,1);
+			printf("<%sDatasetPtr OBJ-XID=\"%s\" H5Path=\"%s\"/>\n",
+				xmlnsprefix,
+				pointerxid,t_tmp);
+			indentation(indent);
+			printf("</%sDataset>\n", xmlnsprefix);
+
+                        free(t_name);
+                        free(dsetxid);
+                        free(parentxid);
+                        free(pointerxid);
+                        free(t_tmp);
+                        free(tx_tmp);
+                        free(t_prefix);
+		    }
+
+		    H5Dclose(obj);
+		    goto done;
+		} else {
+		    found_obj->displayed = TRUE;
+
+		}
+	    }
+
+	    dump_function_table->dump_dataset_function(obj, name, NULL);
+	    H5Dclose(obj);
+	} else {
+            error_msg(progname, "unable to dump dataset \"%s\"\n", name);
+	    d_status = EXIT_FAILURE;
+            ret = FAIL;
+	}
+	break;
+
+    case H5G_TYPE:
+	if ((obj = H5Topen(group, name)) < 0) {
+            error_msg(progname, "unable to dump data type \"%s\"\n", name);
+	    d_status = EXIT_FAILURE;
+            ret = FAIL;
+	} else {
+	    dump_function_table->dump_named_datatype_function(obj, name);
+	    H5Tclose(obj);
+	}
+	break;
+
+    default:
+        error_msg(progname, "unknown object \"%s\"\n", name);
+	d_status = EXIT_FAILURE;
+	ret = FAIL;
+    }
+
+done:
+    free(tmp);
+    return ret;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_named_datatype
+ *
+ * Purpose:     Dump named data type
+ *
+ * Return:      void
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications: Comments: not yet implemented.
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+dump_named_datatype(hid_t type, const char *name)
+{
+    indentation(indent);
+    printf("%s \"%s\" %s", dump_header_format->datatypebegin, name,
+	   dump_header_format->datatypeblockbegin);
+
+    if (H5Tget_class(type) == H5T_COMPOUND) {
+	print_datatype(type,1);
+    } else {
+	indentation(indent + COL);
+	print_datatype(type,1);
+	printf(";\n");
+    }
+    end_obj(dump_header_format->datatypeend,
+	    dump_header_format->datatypeblockend);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_group
+ *
+ * Purpose:     Dump everything within the specified group
+ *
+ * Return:      void
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *      Call to dump_all -- add parameter to select everything.
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+dump_group(hid_t gid, const char *name)
+{
+    H5G_stat_t  statbuf;
+    hid_t       dset, type;
+    char        type_name[1024], *tmp;
+    int         xtype = H5G_UNKNOWN; /* dump all */
+
+    tmp = malloc(strlen(prefix) + strlen(name) + 2);
+    strcpy(tmp, prefix);
+    indentation(indent);
+    begin_obj(dump_header_format->groupbegin, name,
+	      dump_header_format->groupblockbegin);
+    indent += COL;
+
+    if (display_oid)
+	    dump_oid(gid);
+
+    dump_comment(gid);
+
+    if (!strcmp(name, "/") && unamedtype) {
+        unsigned u;             /* Local index variable */
+
+	/* dump unamed type in root group */
+	for (u = 0; u < type_table->nobjs; u++)
+	    if (!type_table->objs[u].recorded) {
+                unsigned long 	objno[2];	/*object number			*/
+
+		dset = H5Dopen(gid, type_table->objs[u].objname);
+		type = H5Dget_type(dset);
+
+                objno[0] = (unsigned long)(type_table->objs[u].objno);
+#if H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG
+                objno[1] = (unsigned long)(type_table->objs[u].objno >> 8*sizeof(long));
+#else /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+                objno[1] = 0;
+#endif /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+		sprintf(type_name, "#%lu:%lu", objno[0], objno[1]);
+                dump_function_table->dump_named_datatype_function(type, type_name);
+
+		H5Tclose(type);
+		H5Dclose(dset);
+	    }
+    } /* end if */
+
+    H5Gget_objinfo(gid, ".", TRUE, &statbuf);
+
+    if (statbuf.nlink > 1) {
+        obj_t  *found_obj;    /* Found object */
+
+        found_obj = search_obj(group_table, statbuf.objno);
+
+	if (found_obj == NULL) {
+	    indentation(indent);
+            error_msg(progname, "internal error (file %s:line %d)\n",
+                      __FILE__, __LINE__);
+	    d_status = EXIT_FAILURE;
+	} else if (found_obj->displayed) {
+	    indentation(indent);
+	    printf("%s \"%s\"\n", HARDLINK, found_obj->objname);
+	} else {
+	    found_obj->displayed = TRUE;
+	    H5Aiterate(gid, NULL, dump_attr, NULL);
+	    H5Giterate(gid, ".", NULL, dump_all, (void *) &xtype);
+	}
+    } else {
+	H5Aiterate(gid, NULL, dump_attr, NULL);
+	H5Giterate(gid, ".", NULL, dump_all, (void *) &xtype);
+    }
+
+    indent -= COL;
+    indentation(indent);
+    end_obj(dump_header_format->groupend, dump_header_format->groupblockend);
+    free(tmp);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_dataset
+ *
+ * Purpose:     Dump the specified data set
+ *
+ * Return:      void
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications: pvn, 2004, added dcpl dump
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+dump_dataset(hid_t did, const char *name, struct subset_t *sset)
+{
+    hid_t   type, space, dcpl_id;
+
+    indentation(indent);
+    begin_obj(dump_header_format->datasetbegin, name,
+	      dump_header_format->datasetblockbegin);
+    type = H5Dget_type(did);
+    space = H5Dget_space(did);
+    dcpl_id = H5Dget_create_plist(did);
+
+    dump_comment(did);
+    dump_datatype(type);
+    dump_dataspace(space);
+
+    if (display_oid)
+     dump_oid(did);
+
+    if (display_dcpl)
+     dump_dcpl(dcpl_id, type, did);
+
+    if (display_data)
+	switch (H5Tget_class(type)) {
+	case H5T_TIME:
+	    indentation(indent + COL);
+	    printf("DATA{ not yet implemented.}\n");
+	    break;
+
+	case H5T_INTEGER:
+	case H5T_FLOAT:
+	case H5T_STRING:
+	case H5T_BITFIELD:
+	case H5T_OPAQUE:
+	case H5T_COMPOUND:
+	case H5T_REFERENCE:
+	case H5T_ENUM:
+	case H5T_VLEN:
+	case H5T_ARRAY:
+	    dump_data(did, DATASET_DATA, sset, display_ai);
+	    break;
+
+	default:
+	    break;
+	}
+
+    indent += COL;
+    H5Aiterate(did, NULL, dump_attr, NULL);
+    indent -= COL;
+    H5Tclose(type);
+    H5Sclose(space);
+    H5Pclose(dcpl_id);
+    indentation(indent);
+    end_obj(dump_header_format->datasetend,
+	    dump_header_format->datasetblockend);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_dims
+ *
+ * Purpose:     Dump the dimensions handed to it in a comma separated list
+ *
+ * Return:      void
+ *
+ * Programmer:  Bill Wendling
+ *              Tuesday, 27. February 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+dump_dims(hsize_t *s, int dims)
+{
+    register int i;
+
+    for (i = 0; i < dims; i++) {
+        printf("%u", (unsigned int)s[i]);
+
+        if (i + 1 != dims)
+            printf(", ");
+    }
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_subsetting_header
+ *
+ * Purpose:     Dump the subsetting header like specified in the DDL.
+ *
+ * Return:      void
+ *
+ * Programmer:  Bill Wendling
+ *              Tuesday, 27. February 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+dump_subsetting_header(struct subset_t *sset, int dims)
+{
+    indentation(indent);
+    printf("%s %s\n", dump_header_format->subsettingbegin,
+           dump_header_format->subsettingblockbegin);
+
+    indent += COL;
+    indentation(indent);
+    printf("%s %s ", dump_header_format->startbegin,
+           dump_header_format->startblockbegin);
+    dump_dims((hsize_t *)sset->start, dims);
+    printf("%s %s\n", dump_header_format->startend,
+           dump_header_format->startblockend);
+
+    indentation(indent);
+    printf("%s %s ", dump_header_format->stridebegin,
+           dump_header_format->strideblockbegin);
+    dump_dims(sset->stride, dims);
+    printf("%s %s\n", dump_header_format->strideend,
+           dump_header_format->strideblockend);
+
+    indentation(indent);
+    printf("%s %s ", dump_header_format->countbegin,
+           dump_header_format->countblockbegin);
+
+    if (sset->count)
+        dump_dims(sset->count, dims);
+    else
+        printf("DEFAULT");
+
+    printf("%s %s\n", dump_header_format->countend,
+           dump_header_format->countblockend);
+
+    indentation(indent);
+    printf("%s %s ", dump_header_format->blockbegin,
+           dump_header_format->blockblockbegin);
+
+    if (sset->block)
+        dump_dims(sset->block, dims);
+    else
+        printf("DEFAULT");
+
+    printf("%s %s\n", dump_header_format->blockend,
+           dump_header_format->blockblockend);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_data
+ *
+ * Purpose:     Dump attribute or dataset data
+ *
+ * Return:      void
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications: pvn, print the matrix indices
+ *	Albert Cheng, 2004/11/18
+ *	Add --string printing for attributes too.
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+dump_data(hid_t obj_id, int obj_data, struct subset_t *sset, int pindex)
+{
+    h5dump_t   *outputformat = &dataformat;
+    int         status = -1;
+    void       *buf;
+    hid_t       space, type, p_type;
+    H5S_class_t space_type;
+    int         ndims, i;
+    hsize_t     size[64], nelmts = 1, alloc_size;
+    int         depth;
+    int         stdindent = COL;	/* should be 3 */
+
+    outputformat->line_ncols = nCols;
+    outputformat->do_escape=display_escape;
+    /* print the matrix indices */
+    outputformat->pindex=pindex;
+    if (outputformat->pindex)
+    {
+     outputformat->idx_fmt   = "(%s): ";
+     outputformat->idx_n_fmt = "%lu";
+     outputformat->idx_sep   = ",";
+     outputformat->line_pre  = "%s";
+    }
+
+    indent += COL;
+
+    /*
+     * the depth will tell us how far we need to indent extra.  we use to just
+     * use indent but with the merging of the tools lib we have to do
+     * something different for the lib funtions... the normal indentation is 6
+     * so when we don't need any extra indentation, depth will be 0.
+     */
+    depth = indent / stdindent + 1;
+
+    if (sset && obj_data == DATASET_DATA) {
+        hid_t f_space = H5Dget_space(obj_id);
+
+        dump_subsetting_header(sset, H5Sget_simple_extent_ndims(f_space));
+        H5Sclose(f_space);
+
+        /* recalculate the depth of the data */
+        depth = indent / stdindent + 1;
+    }
+
+    indentation(indent);
+    begin_obj(dump_header_format->databegin, (const char *)NULL,
+	      dump_header_format->datablockbegin);
+
+    /* Print all the values. */
+    if (obj_data == DATASET_DATA) {
+        hid_t       f_type = H5Dget_type(obj_id);
+        char        string_prefix[64];
+        h5dump_t    string_dataformat;
+
+        if (display_char && H5Tget_size(f_type) == 1 && H5Tget_class(f_type) == H5T_INTEGER) {
+            /*
+             * Print 1-byte integer data as an ASCII character string
+             * instead of integers if the `-r' or `--string' command-line
+             * option was given.
+             *
+             * We don't want to modify the global dataformat, so make a
+             * copy of it instead.
+             */
+            string_dataformat = *outputformat;
+            string_dataformat.idx_fmt = " ";
+            string_dataformat.line_multi_new = 1;
+            string_dataformat.line_1st = "        %s\"";
+            string_dataformat.line_pre = "        %s";
+            string_dataformat.line_cont = "        %s";
+            string_dataformat.str_repeat = 8;
+            string_dataformat.ascii = TRUE;
+            string_dataformat.elmt_suf1 = "";
+            string_dataformat.elmt_suf2 = "";
+            string_dataformat.line_indent = "";
+            strcpy(string_prefix, string_dataformat.line_pre);
+            strcat(string_prefix, "\"");
+            string_dataformat.line_pre = string_prefix;
+            string_dataformat.line_suf = "\"";
+            outputformat = &string_dataformat;
+        }
+
+
+	status = h5tools_dump_dset(stdout, outputformat, obj_id, -1, sset, depth);
+        H5Tclose(f_type);
+    } else {
+        /* need to call h5tools_dump_mem for the attribute data */
+        space = H5Aget_space(obj_id);
+        space_type = H5Sget_simple_extent_type(space);
+        if(space_type == H5S_NO_CLASS || space_type == H5S_COMPLEX) {
+            status = SUCCEED;
+        } else {
+	    char        string_prefix[64];
+	    h5dump_t    string_dataformat;
+
+            type = H5Aget_type(obj_id);
+            p_type = h5tools_get_native_type(type);
+
+            ndims = H5Sget_simple_extent_dims(space, size, NULL);
+
+            for (i = 0; i < ndims; i++)
+                nelmts *= size[i];
+
+            alloc_size = nelmts * MAX(H5Tget_size(type), H5Tget_size(p_type));
+            assert(alloc_size == (hsize_t)((size_t)alloc_size)); /*check for overflow*/
+
+            buf = malloc((size_t)alloc_size);
+            assert(buf);
+
+            if (H5Aread(obj_id, p_type, buf) >= 0)
+		if (display_char && H5Tget_size(type) == 1 && H5Tget_class(type) == H5T_INTEGER) {
+		    /*
+		     * Print 1-byte integer data as an ASCII character string
+		     * instead of integers if the `-r' or `--string' command-line
+		     * option was given.
+		     *
+		     * We don't want to modify the global dataformat, so make a
+		     * copy of it instead.
+		     */
+		    string_dataformat = *outputformat;
+		    string_dataformat.idx_fmt = " ";
+		    string_dataformat.line_multi_new = 1;
+		    string_dataformat.line_1st = "        %s\"";
+		    string_dataformat.line_pre = "        %s";
+		    string_dataformat.line_cont = "        %s";
+		    string_dataformat.str_repeat = 8;
+		    string_dataformat.ascii = TRUE;
+		    string_dataformat.elmt_suf1 = "";
+		    string_dataformat.elmt_suf2 = "";
+		    string_dataformat.line_indent = "";
+		    strcpy(string_prefix, string_dataformat.line_pre);
+		    strcat(string_prefix, "\"");
+		    string_dataformat.line_pre = string_prefix;
+		    string_dataformat.line_suf = "\"";
+		    outputformat = &string_dataformat;
+		}
+
+                status = h5tools_dump_mem(stdout, outputformat, obj_id, p_type,
+                                        space, buf, depth);
+
+            free(buf);
+            H5Tclose(p_type);
+            H5Tclose(type);
+        }
+        H5Sclose(space);
+    }
+
+    if (status == FAIL) {
+        indentation(indent + COL);
+        error_msg(progname, "unable to print data\n");
+        d_status = EXIT_FAILURE;
+    }
+
+    indentation(indent);
+    end_obj(dump_header_format->dataend, dump_header_format->datablockend);
+    indent -= COL;
+
+    if (sset && obj_data == DATASET_DATA) {
+        indentation(indent);
+        end_obj(dump_header_format->subsettingend,
+                dump_header_format->subsettingblockend);
+        indent -= COL;
+    }
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_oid
+ *
+ * Purpose:     Prints the object ids
+ *
+ * Return:      void
+ *
+ * Programmer:  Patrick Lu
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+dump_oid(hid_t oid)
+{
+    indentation(indent + COL);
+    printf("%s %s %d %s\n", OBJID, BEGIN, oid, END);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_comment
+ *
+ * Purpose:     prints the comment for the the object name
+ *
+ * Return:      void
+ *
+ * Programmer:  pvn
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void dump_comment(hid_t obj_id)
+{
+ char comment[50];
+
+ comment[0] = '\0';
+ H5Gget_comment(obj_id, ".", sizeof(comment), comment);
+
+ if (comment[0]) {
+  indentation(indent);
+  printf("COMMENT \"%s\"\n", comment);
+ }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_fill_value
+ *
+ * Purpose:     prints the fill value
+ *
+ * Return:      void
+ *
+ * Programmer:  pvn
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void dump_fill_value(hid_t dcpl,hid_t type_id, hid_t obj_id)
+{
+    h5tools_context_t	ctx;			/*print context		*/
+    size_t            size;
+    void              *buf=NULL;
+    hsize_t           nelmts=1;
+    h5dump_t          *outputformat = &dataformat;
+    hid_t             n_type;
+
+    memset(&ctx, 0, sizeof(ctx));
+    ctx.indent_level=2;
+
+    n_type = h5tools_get_native_type(type_id);
+
+    size = H5Tget_size(n_type);
+    buf = malloc(size);
+
+    H5Pget_fill_value(dcpl, n_type, buf);
+
+    h5tools_dump_simple_data(stdout, outputformat, obj_id, &ctx, START_OF_DATA | END_OF_DATA, nelmts, n_type, buf);
+
+    H5Tclose(n_type);
+
+    if (buf)
+        free (buf);
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_dcpl
+ *
+ * Purpose:     prints several dataset create property list properties
+ *
+ * Return:      void
+ *
+ * Programmer:  pvn
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+dump_dcpl(hid_t dcpl_id,hid_t type_id, hid_t obj_id)
+{
+ int              nfilters;       /* number of filters */
+ unsigned         filt_flags;     /* filter flags */
+ H5Z_filter_t     filtn;          /* filter identification number */
+ unsigned         cd_values[20];  /* filter client data values */
+ size_t           cd_nelmts;      /* filter client number of values */
+ char             f_name[256];    /* filter name */
+ unsigned         szip_options_mask;
+ unsigned         szip_pixels_per_block;
+ hsize_t          chsize[64];     /* chunk size in elements */
+ int              rank;           /* rank */
+ char	            name[256];		    /* external file name		*/
+ off_t            offset;         /* offset of external file 	*/
+ hsize_t          size;           /* size of external file 	*/
+ H5D_fill_value_t fvstatus;
+ H5D_alloc_time_t at;
+ H5D_fill_time_t  ft;
+ hsize_t          storage_size;
+ haddr_t          ioffset;
+ int              i, next;
+ unsigned         j;
+
+ storage_size=H5Dget_storage_size(obj_id);
+ ioffset=H5Dget_offset(obj_id);
+ next=H5Pget_external_count(dcpl_id);
+ strcpy(f_name,"\0");
+
+/*-------------------------------------------------------------------------
+ * STORAGE_LAYOUT
+ *-------------------------------------------------------------------------
+ */
+ indentation(indent + COL);
+ printf("%s %s\n", STORAGE_LAYOUT, BEGIN);
+
+ if (H5D_CHUNKED == H5Pget_layout(dcpl_id))
+ {
+   /*start indent */
+  indent += COL;
+  indentation(indent + COL);
+  printf("%s ", CHUNKED);
+  rank = H5Pget_chunk(dcpl_id,NELMTS(chsize),chsize);
+  HDfprintf(stdout,"%s %Hu", dump_header_format->dataspacedimbegin, chsize[0]);
+  for ( i=1; i<rank; i++)
+   HDfprintf(stdout, ", %Hu", chsize[i]);
+	 printf(" %s\n", dump_header_format->dataspacedimend);
+  indentation(indent + COL);
+  HDfprintf(stdout, "SIZE %Hu\n ", storage_size);
+  /*end indent */
+  indent -= COL;
+  indentation(indent + COL);
+  printf("%s\n",END);
+ }
+ else if (H5D_COMPACT == H5Pget_layout(dcpl_id))
+ {
+  /*start indent */
+  indent += COL;
+  indentation(indent + COL);
+  printf("%s\n", COMPACT);
+  indentation(indent + COL);
+  HDfprintf(stdout, "SIZE %Hu\n", storage_size);
+  /*end indent */
+  indent -= COL;
+  indentation(indent + COL);
+  printf("%s\n",END);
+ }
+ else if (H5D_CONTIGUOUS == H5Pget_layout(dcpl_id))
+ {
+ /*-------------------------------------------------------------------------
+  * EXTERNAL_FILE
+  *-------------------------------------------------------------------------
+  */
+  if (next)
+  {
+   /*start indent */
+   indent += COL;
+   indentation(indent + COL);
+   printf("%s\n", CONTIGUOUS);
+   indentation(indent + COL);
+   printf("%s %s\n", EXTERNAL, BEGIN);
+   /*start indent */
+   indent += COL;
+   for ( j=0; j<(unsigned)next; j++) {
+    H5Pget_external(dcpl_id,j,sizeof(name),name,&offset,&size);
+    indentation(indent + COL);
+    HDfprintf(stdout,"FILENAME %s SIZE %Hu OFFSET %ld\n",name,size,offset);
+   }
+   /*end indent */
+   indent -= COL;
+   indentation(indent + COL);
+   printf("%s\n",END);
+   /*end indent */
+   indent -= COL;
+   indentation(indent + COL);
+   printf("%s\n",END);
+  }
+  else
+  {
+   /*start indent */
+   indent += COL;
+   indentation(indent + COL);
+   printf("%s\n", CONTIGUOUS);
+   indentation(indent + COL);
+   HDfprintf(stdout,"SIZE %Hu\n", storage_size);
+   indentation(indent + COL);
+   HDfprintf(stdout,"OFFSET %Hu\n", ioffset);
+   /*end indent */
+   indent -= COL;
+   indentation(indent + COL);
+   printf("%s\n",END);
+  }
+ }
+/*-------------------------------------------------------------------------
+ * FILTERS
+ *-------------------------------------------------------------------------
+ */
+ nfilters = H5Pget_nfilters(dcpl_id);
+
+ indentation(indent + COL);
+ printf("%s %s\n", FILTERS, BEGIN);
+ indent += COL;
+
+ if (nfilters)
+ {
+  for (i=0; i<nfilters; i++)
+  {
+   cd_nelmts = NELMTS(cd_values);
+   filtn = H5Pget_filter(dcpl_id,
+    (unsigned)i,
+    &filt_flags,
+    &cd_nelmts,
+    cd_values,
+    sizeof(f_name),
+    f_name);
+
+   switch (filtn)
+   {
+   case H5Z_FILTER_DEFLATE:
+    indentation(indent + COL);
+    printf("%s %s %s %d %s\n", DEFLATE, BEGIN, DEFLATE_LEVEL, cd_values[0], END);
+    break;
+   case H5Z_FILTER_SHUFFLE:
+    indentation(indent + COL);
+    printf("%s\n", SHUFFLE);
+    break;
+   case H5Z_FILTER_FLETCHER32:
+    indentation(indent + COL);
+    printf("%s\n", FLETCHER32);
+    break;
+   case H5Z_FILTER_SZIP:
+    {
+     szip_options_mask=cd_values[0];;
+     szip_pixels_per_block=cd_values[1];
+
+     indentation(indent + COL);
+     printf("%s %s\n",SZIP, BEGIN);
+
+     /*start indent */
+     indent += COL;
+     indentation(indent + COL);
+     printf("PIXELS_PER_BLOCK %d\n", szip_pixels_per_block);
+
+     indentation(indent + COL);
+     if (szip_options_mask & H5_SZIP_CHIP_OPTION_MASK)
+      printf("MODE %s\n", "HARDWARE");
+     else if (szip_options_mask & H5_SZIP_ALLOW_K13_OPTION_MASK)
+      printf("MODE %s\n", "K13");
+
+     indentation(indent + COL);
+     if (szip_options_mask & H5_SZIP_EC_OPTION_MASK)
+      printf("CODING %s\n", "ENTROPY");
+     else if (szip_options_mask & H5_SZIP_NN_OPTION_MASK)
+      printf("CODING %s\n", "NEAREST NEIGHBOUR");
+
+     indentation(indent + COL);
+     if (szip_options_mask & H5_SZIP_LSB_OPTION_MASK)
+      printf("BYTE_ORDER %s\n", "LSB");
+     else if (szip_options_mask & H5_SZIP_MSB_OPTION_MASK)
+      printf("BYTE_ORDER %s\n", "MSB");
+
+     indentation(indent + COL);
+     if (szip_options_mask & H5_SZIP_RAW_OPTION_MASK)
+      printf("HEADER %s\n", "RAW");
+
+     /*end indent */
+     indent -= COL;
+     indentation(indent + COL);
+     printf("%s\n",END);
+    }
+    break;
+   default:
+    indentation(indent + COL);
+    if (H5Zfilter_avail(filtn))
+     printf("%s %s\n", "USER_REGISTERED_FILTER", BEGIN);
+    else
+     printf("%s %s\n", "UNKNOWN_FILTER", BEGIN);
+    /*start indent */
+    indent += COL;
+    indentation(indent + COL);
+    printf("FILTER_ID %d\n", filtn);
+    if (f_name[0]!='\0') {
+     indentation(indent + COL);
+     printf("COMMENT %s\n", f_name);
+    }
+    if (cd_nelmts) {
+     indentation(indent + COL);
+     printf("%s %s ","PARAMS", BEGIN);
+     for (j=0; j<cd_nelmts; j++) {
+      printf("%d ", cd_values[j]);
+     }
+     printf("%s\n", END);
+    }
+    break;
+   }/*switch*/
+  } /*i*/
+ }/*nfilters*/
+ else
+ {
+  indentation(indent + COL);
+  printf("NONE\n");
+ }
+ indent -= COL;
+ indentation(indent + COL);
+ printf("%s\n",END);
+
+/*-------------------------------------------------------------------------
+ * FILLVALUE
+ *-------------------------------------------------------------------------
+ */
+ indentation(indent + COL);
+ printf("%s %s\n", FILLVALUE, BEGIN);
+ /*start indent */
+ indent += COL;
+ indentation(indent + COL);
+ printf("FILL_TIME ");
+ H5Pget_fill_time(dcpl_id, &ft);
+ switch ( ft )
+ {
+    case H5D_FILL_TIME_ALLOC:
+        printf("%s", "H5D_FILL_TIME_ALLOC\n");
+        break;
+    case H5D_FILL_TIME_NEVER:
+        printf("%s", "H5D_FILL_TIME_NEVER\n");
+        break;
+    case H5D_FILL_TIME_IFSET:
+        printf("%s", "H5D_FILL_TIME_IFSET\n");
+        break;
+    default:
+        assert(0);
+        break;
+ }
+ indentation(indent + COL);
+ printf("%s ", "VALUE ");
+ H5Pfill_value_defined(dcpl_id, &fvstatus);
+ if (fvstatus == H5D_FILL_VALUE_UNDEFINED)
+ {
+  printf("%s\n", "H5D_FILL_VALUE_UNDEFINED");
+ }
+ else
+ {
+  dump_fill_value(dcpl_id,type_id,obj_id);
+ }
+ /* end indent */
+ indent -= COL;
+ indentation(indent + COL);
+ printf("\n");
+ indentation(indent + COL);
+ printf("%s\n",END);
+
+/*-------------------------------------------------------------------------
+ * ALLOCATION_TIME
+ *-------------------------------------------------------------------------
+ */
+ indentation(indent + COL);
+ printf("ALLOCATION_TIME %s\n",BEGIN);
+ /*start indent */
+ indent += COL;
+ indentation(indent + COL);
+ H5Pget_alloc_time(dcpl_id, &at);
+ switch (at)
+ {
+    case H5D_ALLOC_TIME_EARLY:
+        printf("%s", "H5D_ALLOC_TIME_EARLY\n");
+        break;
+    case H5D_ALLOC_TIME_INCR:
+        printf("%s", "H5D_ALLOC_TIME_INCR\n");
+        break;
+    case H5D_ALLOC_TIME_LATE:
+        printf("%s", "H5D_ALLOC_TIME_LATE\n");
+        break;
+    default:
+        assert(0);
+        break;
+ }
+ /* end indent */
+ indent -= COL;
+ indentation(indent + COL);
+ printf("%s\n",END);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_fcpl
+ *
+ * Purpose:     prints file creation property list information
+ *
+ * Return:      void
+ *
+ * Programmer:  pvn
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+dump_fcpl(hid_t fid)
+{
+ hid_t    fcpl;      /* file creation property list ID */
+ hid_t		  fapl;      /* file access property list ID */
+ hsize_t  userblock; /* userblock size retrieved from FCPL */
+ size_t   off_size;  /* size of offsets in the file */
+ size_t   len_size;  /* size of lengths in the file */
+ unsigned super;     /* superblock version # */
+ unsigned freelist;  /* free list version # */
+ unsigned stab;      /* symbol table entry version # */
+ unsigned shhdr;     /* shared object header version # */
+ hid_t    fdriver;    /* file driver */
+ char     dname[15]; /* buffer to store driver name */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+ int      sym_lk;
+ int      sym_ik;    /* symbol table B-tree internal 'K' value */
+#else
+ unsigned sym_lk;    /* symbol table B-tree leaf 'K' value */
+ unsigned sym_ik;    /* symbol table B-tree internal 'K' value */
+#endif
+ unsigned istore_ik; /* indexed storage B-tree internal 'K' value */
+
+ fcpl=H5Fget_create_plist(fid);
+ H5Pget_version(fcpl, &super, &freelist, &stab, &shhdr);
+ H5Pget_userblock(fcpl,&userblock);
+ H5Pget_sizes(fcpl,&off_size,&len_size);
+ H5Pget_sym_k(fcpl,&sym_ik,&sym_lk);
+ H5Pget_istore_k(fcpl,&istore_ik);
+ H5Pclose(fcpl);
+ fapl=h5_fileaccess();
+ fdriver=H5Pget_driver(fapl);
+ H5Pclose(fapl);
+
+/*-------------------------------------------------------------------------
+ * SUPER_BLOCK
+ *-------------------------------------------------------------------------
+ */
+ printf("%s %s\n",SUPER_BLOCK, BEGIN);
+ indentation(indent + COL);
+ printf("%s %u\n","SUPERBLOCK_VERSION", super);
+ indentation(indent + COL);
+ printf("%s %u\n","FREELIST_VERSION", freelist);
+ indentation(indent + COL);
+ printf("%s %u\n","SYMBOLTABLE_VERSION", stab);
+ indentation(indent + COL);
+ printf("%s %u\n","OBJECTHEADER_VERSION", shhdr);
+ indentation(indent + COL);
+ HDfprintf(stdout,"%s %Hd\n","OFFSET_SIZE", (long_long)off_size);
+ indentation(indent + COL);
+ HDfprintf(stdout,"%s %Hd\n","LENGTH_SIZE", (long_long)len_size);
+ indentation(indent + COL);
+ printf("%s %u\n","BTREE_RANK", sym_ik);
+ indentation(indent + COL);
+ printf("%s %d\n","BTREE_LEAF", sym_lk);
+
+ if (H5FD_CORE==fdriver)
+ {
+  strcpy(dname,"H5FD_CORE");
+ }
+ else if (H5FD_FAMILY==fdriver)
+ {
+  strcpy(dname,"H5FD_FAMILY");
+ }
+ else if (H5FD_GASS==fdriver)
+ {
+  strcpy(dname,"H5FD_GASS");
+ }
+ else if (H5FD_LOG==fdriver)
+ {
+  strcpy(dname,"H5FD_LOG");
+ }
+ else if (H5FD_MPIO==fdriver)
+ {
+  strcpy(dname,"H5FD_MPIO");
+ }
+ else if (H5FD_MULTI==fdriver)
+ {
+  strcpy(dname,"H5FD_MULTI");
+ }
+ else if (H5FD_SEC2==fdriver)
+ {
+  strcpy(dname,"H5FD_SEC2");
+ }
+ else if (H5FD_STDIO==fdriver)
+ {
+  strcpy(dname,"H5FD_STDIO");
+ }
+#ifdef H5_HAVE_STREAM
+ else if (H5FD_STREAM==fdriver)
+ {
+  strcpy(dname,"H5FD_STREAM");
+ }
+#endif
+
+ indentation(indent + COL);
+ printf("%s %s\n","FILE_DRIVER", dname);
+ indentation(indent + COL);
+ printf("%s %u\n","ISTORE_K", istore_ik);
+ printf("%s\n",END);
+
+/*-------------------------------------------------------------------------
+ * USER_BLOCK
+ *-------------------------------------------------------------------------
+ */
+ printf("USER_BLOCK %s\n",BEGIN);
+ indentation(indent + COL);
+ HDfprintf(stdout,"%s %Hu\n","USERBLOCK_SIZE", userblock);
+ printf("%s\n",END);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_fcontents
+ *
+ * Purpose:     prints all objects
+ *
+ * Return:      void
+ *
+ * Programmer:  pvn
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void dump_fcontents(hid_t fid)
+{
+    printf("%s %s\n",FILE_CONTENTS, BEGIN);
+
+    /* special case of unamed types in root group */
+    if (unamedtype) {
+        unsigned u;
+
+        for (u = 0; u < type_table->nobjs; u++) {
+            if (!type_table->objs[u].recorded) {
+                unsigned long 	objno[2];	/*object number			*/
+
+                objno[0] = (unsigned long)(type_table->objs[u].objno);
+#if H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG
+                objno[1] = (unsigned long)(type_table->objs[u].objno >> 8*sizeof(long));
+#else /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+                objno[1] = 0;
+#endif /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+                printf(" %-10s /#%lu:%lu\n", "datatype", objno[0], objno[1]);
+            }
+        }
+    }
+
+    /* print objects in the files */
+    h5trav_getinfo(fid, NULL, 1);
+
+    printf(" %s\n",END);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    set_output_file
+ *
+ * Purpose:     Open fname as the output file for dataset raw data.
+ *		Set rawdatastream as its file stream.
+ *
+ * Return:      0 -- succeeded
+ *		negative -- failed
+ *
+ * Programmer:  Albert Cheng, 2000/09/30
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+set_output_file(const char *fname)
+{
+    FILE    *f;	/* temporary holding place for the stream pointer
+                 * so that rawdatastream is changed only when succeeded */
+
+    if ((f = fopen(fname, "w")) != NULL) {
+	rawdatastream = f;
+	return 0;
+    }
+
+    return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    handle_attributes
+ *
+ * Purpose:     Handle the attributes from the command.
+ *
+ * Return:      void
+ *
+ * Programmer:  Bill Wendling
+ *              Tuesday, 9. January 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+handle_attributes(hid_t fid, char *attr, void UNUSED * data)
+{
+    dump_selected_attr(fid, attr);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    parse_hsize_list
+ *
+ * Purpose:     Parse a list of comma or space separated integers and return
+ *              them in a list. The string being passed into this function
+ *              should be at the start of the list you want to parse. You are
+ *              responsible for freeing the array returned from here.
+ *
+ *              Lists in the so-called "terse" syntax are separated by
+ *              semicolons (;). The lists themselves can be separated by
+ *              either commas (,) or white spaces.
+ *
+ * Return:      Success:    hsize_t array. NULL is a valid return type if
+ *                          there aren't any elements in the array.
+ *
+ * Programmer:  Bill Wendling
+ *              Tuesday, 6. February 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hsize_t *
+parse_hsize_list(const char *h_list)
+{
+    hsize_t        *p_list;
+    const char     *ptr;
+    unsigned int    size_count = 0, i = 0, last_digit = 0;
+
+    if (!h_list || !*h_list || *h_list == ';')
+        return NULL;
+
+    /* count how many integers do we have */
+    for (ptr = h_list; ptr && *ptr && *ptr != ';' && *ptr != ']'; ptr++)
+        if (isdigit(*ptr)) {
+            if (!last_digit)
+                /* the last read character wasn't a digit */
+                size_count++;
+
+            last_digit = 1;
+        } else {
+            last_digit = 0;
+        }
+
+    if (size_count == 0)
+        /* there aren't any integers to read */
+        return NULL;
+
+    /* allocate an array for the integers in the list */
+    p_list = calloc(size_count, sizeof(hsize_t));
+
+    for (ptr = h_list; i < size_count && ptr && *ptr && *ptr != ';' && *ptr != ']'; ptr++)
+        if (isdigit(*ptr)) {
+            /* we should have an integer now */
+            p_list[i++] = (hsize_t)atoi(ptr);
+
+            while (isdigit(*ptr))
+                /* scroll to end of integer */
+                ptr++;
+        }
+
+    return p_list;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    parse_subset_params
+ *
+ * Purpose:     Parse the so-called "terse" syntax for specifying subsetting
+ *              parameters.
+ *
+ * Return:      Success:    struct subset_t object
+ *              Failure:    NULL
+ *
+ * Programmer:  Bill Wendling
+ *              Tuesday, 6. February 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static struct subset_t *
+parse_subset_params(char *dset)
+{
+    struct subset_t *s = NULL;
+    register char   *brace;
+
+    if ((brace = strrchr(dset, '[')) != NULL) {
+        char *slash = strrchr(dset, '/');
+
+        /* sanity check to make sure the [ isn't part of the dataset name */
+        if (brace > slash) {
+            *brace++ = '\0';
+
+            s = calloc(1, sizeof(struct subset_t));
+            s->start = parse_hsize_list(brace);
+
+            while (*brace && *brace != ';')
+                brace++;
+
+            if (*brace)
+                brace++;
+
+            s->stride = parse_hsize_list(brace);
+
+            while (*brace && *brace != ';')
+                brace++;
+
+            if (*brace)
+                brace++;
+
+            s->count = parse_hsize_list(brace);
+
+            while (*brace && *brace != ';')
+                brace++;
+
+            if (*brace)
+                brace++;
+
+            s->block = parse_hsize_list(brace);
+        }
+    }
+
+    return s;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    handle_datasets
+ *
+ * Purpose:     Handle the datasets from the command.
+ *
+ * Return:      void
+ *
+ * Programmer:  Bill Wendling
+ *              Tuesday, 9. January 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+handle_datasets(hid_t fid, char *dset, void *data)
+{
+    H5G_stat_t       statbuf;
+    hid_t            dsetid;
+    struct subset_t *sset = (struct subset_t *)data;
+
+    if ((dsetid = H5Dopen(fid, dset)) < 0) {
+        begin_obj(dump_header_format->datasetbegin, dset,
+                  dump_header_format->datasetblockbegin);
+        indentation(COL);
+        error_msg(progname, "unable to open dataset \"%s\"\n", dset);
+        end_obj(dump_header_format->datasetend,
+                dump_header_format->datasetblockend);
+        d_status = EXIT_FAILURE;
+        return;
+    }
+
+    if (sset) {
+        if (!sset->start || !sset->stride || !sset->count || !sset->block) {
+            /* they didn't specify a ``stride'' or ``block''. default to 1 in all
+             * dimensions */
+            hid_t sid = H5Dget_space(dsetid);
+            unsigned int ndims = H5Sget_simple_extent_ndims(sid);
+
+            if (!sset->start)
+                /* default to (0, 0, ...) for the start coord */
+                sset->start = calloc(ndims, sizeof(hsize_t));
+
+            if (!sset->stride) {
+                unsigned int i;
+
+                sset->stride = calloc(ndims, sizeof(hsize_t));
+
+                for (i = 0; i < ndims; i++)
+                    sset->stride[i] = 1;
+            }
+
+            if (!sset->count) {
+                hsize_t dims[H5S_MAX_RANK];
+                herr_t status = H5Sget_simple_extent_dims(sid, dims, NULL);
+                unsigned int i;
+
+                if (status == FAIL) {
+                    error_msg(progname, "unable to get dataset dimensions\n");
+                    d_status = EXIT_FAILURE;
+                    H5Sclose(sid);
+                    return;
+                }
+
+                sset->count = calloc(ndims, sizeof(hsize_t));
+
+                for (i = 0; i < ndims; i++)
+                    sset->count[i] = dims[i] - sset->start[i];
+            }
+
+            if (!sset->block) {
+                unsigned int i;
+
+                sset->block = calloc(ndims, sizeof(hsize_t));
+
+                for (i = 0; i < ndims; i++)
+                    sset->block[i] = 1;
+            }
+
+            H5Sclose(sid);
+        }
+    }
+
+    H5Gget_objinfo(dsetid, ".", TRUE, &statbuf);
+
+    if (statbuf.nlink > 1) {
+        obj_t  *found_obj;    /* Found object */
+
+        found_obj = search_obj(dset_table, statbuf.objno);
+
+        if (found_obj) {
+            if (found_obj->displayed) {
+                begin_obj(dump_header_format->datasetbegin, dset,
+                          dump_header_format->datasetblockbegin);
+                indentation(indent + COL);
+                printf("%s \"%s\"\n", HARDLINK, found_obj->objname);
+                indentation(indent);
+                end_obj(dump_header_format->datasetend,
+                        dump_header_format->datasetblockend);
+            } else {
+                found_obj->displayed = TRUE;
+                dump_dataset(dsetid, dset, sset);
+            }
+        } else {
+            d_status = EXIT_FAILURE;
+        }
+    } else {
+        dump_dataset(dsetid, dset, sset);
+    }
+
+    if (H5Dclose(dsetid) < 0)
+        d_status = EXIT_FAILURE;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    handle_groups
+ *
+ * Purpose:     Handle the groups from the command.
+ *
+ * Return:      void
+ *
+ * Programmer:  Bill Wendling
+ *              Tuesday, 9. January 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+handle_groups(hid_t fid, char *group, void UNUSED * data)
+{
+    H5G_stat_t  statbuf;
+    hid_t       gid;
+
+    if ((gid = H5Gopen(fid, group)) < 0) {
+        begin_obj(dump_header_format->groupbegin, group,
+                  dump_header_format->groupblockbegin);
+        indentation(COL);
+        error_msg(progname, "unable to open group \"%s\"\n", group);
+        end_obj(dump_header_format->groupend,
+                dump_header_format->groupblockend);
+        d_status = EXIT_FAILURE;
+    } else {
+        size_t new_len = strlen(group) + 1;
+
+        if (prefix_len <= new_len) {
+            prefix_len = new_len;
+            prefix = realloc(prefix, prefix_len);
+        }
+
+        H5Gget_objinfo(gid, ".", TRUE, &statbuf);
+        strcpy(prefix, group);
+        dump_group(gid, group);
+
+        if (H5Gclose(gid) < 0)
+            d_status = EXIT_FAILURE;
+    }
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    handle_links
+ *
+ * Purpose:     Handle the links from the command.
+ *
+ * Return:      void
+ *
+ * Programmer:  Bill Wendling
+ *              Tuesday, 9. January 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+handle_links(hid_t fid, char *links, void UNUSED * data)
+{
+    H5G_stat_t  statbuf;
+
+    if (H5Gget_objinfo(fid, links, FALSE, &statbuf) < 0) {
+        begin_obj(dump_header_format->softlinkbegin, links,
+                  dump_header_format->softlinkblockbegin);
+        indentation(COL);
+        error_msg(progname, "unable to get obj info from \"%s\"\n", links);
+        end_obj(dump_header_format->softlinkend,
+                dump_header_format->softlinkblockend);
+        d_status = EXIT_FAILURE;
+    } else if (statbuf.type == H5G_LINK) {
+        char *buf = malloc(statbuf.linklen);
+
+        begin_obj(dump_header_format->softlinkbegin, links,
+                  dump_header_format->softlinkblockbegin);
+        indentation(COL);
+
+        if (H5Gget_linkval(fid, links, statbuf.linklen, buf) >= 0) {
+            printf("LINKTARGET \"%s\"\n", buf);
+        } else {
+            error_msg(progname, "h5dump error: unable to get link value for \"%s\"\n",
+                      links);
+            d_status = EXIT_FAILURE;
+        }
+
+        end_obj(dump_header_format->softlinkend,
+                dump_header_format->softlinkblockend);
+        free(buf);
+    } else {
+        begin_obj(dump_header_format->softlinkbegin, links,
+                  dump_header_format->softlinkblockbegin);
+        indentation(COL);
+        error_msg(progname, "\"%s\" is not a link\n", links);
+        end_obj(dump_header_format->softlinkend,
+                dump_header_format->softlinkblockend);
+        d_status = EXIT_FAILURE;
+    }
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    handle_datatypes
+ *
+ * Purpose:     Handle the datatypes from the command.
+ *
+ * Return:      void
+ *
+ * Programmer:  Bill Wendling
+ *              Tuesday, 9. January 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+handle_datatypes(hid_t fid, char *type, void UNUSED * data)
+{
+    hid_t       type_id;
+
+    if ((type_id = H5Topen(fid, type)) < 0) {
+        /* check if type is unamed data type */
+        unsigned idx = 0;
+
+        while (idx < type_table->nobjs ) {
+            char name[128];
+
+            if (!type_table->objs[idx].recorded) {
+                unsigned long 	objno[2];	/*object number			*/
+
+                /* unamed data type */
+                objno[0] = (unsigned long)(type_table->objs[idx].objno);
+#if H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG
+                objno[1] = (unsigned long)(type_table->objs[idx].objno >> 8*sizeof(long));
+#else /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+                objno[1] = 0;
+#endif /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+                sprintf(name, "/#%lu:%lu", objno[0], objno[1]);
+
+                if (!HDstrcmp(name, type))
+                    break;
+            }
+
+            idx++;
+        }
+
+        if (idx ==  type_table->nobjs) {
+            /* unknown type */
+            begin_obj(dump_header_format->datatypebegin, type,
+                      dump_header_format->datatypeblockbegin);
+            indentation(COL);
+            error_msg(progname, "unable to open datatype \"%s\"\n", type);
+            end_obj(dump_header_format->datatypeend,
+                    dump_header_format->datatypeblockend);
+            d_status = EXIT_FAILURE;
+        } else {
+            hid_t dsetid = H5Dopen(fid, type_table->objs[idx].objname);
+            type_id = H5Dget_type(dsetid);
+            dump_named_datatype(type_id, type);
+            H5Tclose(type_id);
+            H5Dclose(dsetid);
+        }
+    } else {
+        dump_named_datatype(type_id, type);
+
+        if (H5Tclose(type_id) < 0)
+            d_status = EXIT_FAILURE;
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    parse_command_line
+ *
+ * Purpose:     Parse the command line for the h5dumper.
+ *
+ * Return:      Success:    A pointer to an array of handler_t structures.
+ *                          These contain all the information needed to dump
+ *                          the necessary object.
+ *
+ *              Failure:    Exits program with EXIT_FAILURE value.
+ *
+ * Programmer:  Bill Wendling
+ *              Tuesday, 20. February 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static struct handler_t *
+parse_command_line(int argc, const char *argv[])
+{
+    struct handler_t   *hand, *last_dset = NULL;
+    int                 i, opt, last_was_dset = FALSE;
+
+    /* this will be plenty big enough to hold the info */
+    hand = calloc((size_t)argc, sizeof(struct handler_t));
+
+    /* parse command line options */
+    while ((opt = get_option(argc, argv, s_opts, l_opts)) != EOF) {
+parse_start:
+        switch ((char)opt) {
+        case 'B':
+            display_bb = TRUE;
+            last_was_dset = FALSE;
+            break;
+        case 'n':
+            display_fi = TRUE;
+            last_was_dset = FALSE;
+            break;
+        case 'p':
+            display_dcpl = TRUE;
+            break;
+        case 'y':
+            display_ai = FALSE;
+            break;
+        case 'e':
+            display_escape = TRUE;
+            break;
+        case 'H':
+            display_data = FALSE;
+            display_attr_data = FALSE;
+            last_was_dset = FALSE;
+            break;
+        case 'A':
+            display_data = FALSE;
+            display_attr_data = TRUE;
+            last_was_dset = FALSE;
+            break;
+        case 'i':
+            display_oid = TRUE;
+            last_was_dset = FALSE;
+            break;
+        case 'r':
+            display_char = TRUE;
+            break;
+        case 'V':
+            print_version(progname);
+            leave(EXIT_SUCCESS);
+            break;
+        case 'w':
+            nCols = atoi(opt_arg);
+            last_was_dset = FALSE;
+            break;
+        case 'a':
+            display_all = 0;
+
+            for (i = 0; i < argc; i++)
+                if (!hand[i].func) {
+                    hand[i].func = handle_attributes;
+                    hand[i].obj = HDstrdup(opt_arg);
+                    break;
+                }
+
+            last_was_dset = FALSE;
+            break;
+        case 'd':
+            display_all = 0;
+
+            for (i = 0; i < argc; i++)
+                if (!hand[i].func) {
+                    hand[i].func = handle_datasets;
+                    hand[i].obj = HDstrdup(opt_arg);
+                    hand[i].subset_info = parse_subset_params(hand[i].obj);
+                    last_dset = hand;
+                    break;
+                }
+
+            last_was_dset = TRUE;
+            break;
+        case 'f':
+            driver = opt_arg;
+            break;
+        case 'g':
+            display_all = 0;
+
+            for (i = 0; i < argc; i++)
+                if (!hand[i].func) {
+                    hand[i].func = handle_groups;
+                    hand[i].obj = HDstrdup(opt_arg);
+                    break;
+                }
+
+            last_was_dset = FALSE;
+            break;
+        case 'l':
+            display_all = 0;
+
+            for (i = 0; i < argc; i++)
+                if (!hand[i].func) {
+                    hand[i].func = handle_links;
+                    hand[i].obj = HDstrdup(opt_arg);
+                    break;
+                }
+
+            last_was_dset = FALSE;
+            break;
+        case 't':
+            display_all = 0;
+
+            for (i = 0; i < argc; i++)
+                if (!hand[i].func) {
+                    hand[i].func = handle_datatypes;
+                    hand[i].obj = HDstrdup(opt_arg);
+                    break;
+                }
+
+            last_was_dset = FALSE;
+            break;
+        case 'o':
+            if (set_output_file(opt_arg) < 0){
+                /* failed to set output file */
+                usage(progname);
+                leave(EXIT_FAILURE);
+            }
+
+            usingdasho = TRUE;
+            last_was_dset = FALSE;
+            break;
+
+        /** begin XML parameters **/
+        case 'x':
+            /* select XML output */
+            doxml = TRUE;
+            useschema = TRUE;
+            dump_header_format = NULL;
+            dump_function_table = &xml_function_table;
+            break;
+        case 'u':
+            doxml = TRUE;
+            useschema = FALSE;
+            xmlnsprefix = "";
+            dump_header_format = NULL;
+            dump_function_table = &xml_function_table;
+            break;
+        case 'D':
+            /* specify alternative XML DTD or schema */
+            /* To Do: check format of this value?  */
+            xml_dtd_uri = opt_arg;
+            break;
+        case 'X':
+            /* specify XML namespace (default="hdf5:"), or none */
+            /* To Do: check format of this value?  */
+	    if (!useschema) {
+                usage(progname);
+                leave(EXIT_FAILURE);
+	    }
+	    if (strcmp(opt_arg,":") == 0) {
+                xmlnsprefix = "";
+	    } else {
+                xmlnsprefix = opt_arg;
+	    }
+            break;
+        /** end XML parameters **/
+
+        /** begin subsetting parameters **/
+        case 's':
+        case 'S':
+        case 'c':
+        case 'k': {
+            struct subset_t *s;
+
+            if (!last_was_dset) {
+                error_msg(progname,
+                          "option `-%c' can only be used after --dataset option\n",
+                          opt);
+                leave(EXIT_FAILURE);
+            }
+
+            if (last_dset->subset_info) {
+                /*
+                 * This overrides the "terse" syntax if they actually mixed
+                 * the two.
+                 */
+                s = last_dset->subset_info;
+            } else {
+                last_dset->subset_info = s = calloc(1, sizeof(struct subset_t));
+            }
+
+            /*
+             * slightly convoluted, but...we are only interested in options
+             * for subsetting: "--start", "--stride", "--count", and "--block"
+             * which can come in any order. If we run out of parameters (EOF)
+             * or run into one which isn't a subsetting parameter (NOT s, S,
+             * c, or K), then we exit the do-while look, set the subset_info
+             * to the structure we've been filling. If we've reached the end
+             * of the options, we exit the parsing (goto parse_end) otherwise,
+             * since we've "read" the next option, we need to parse it. So we
+             * jump to the beginning of the switch statement (goto parse_start).
+             */
+            do {
+                switch ((char)opt) {
+                case 's': free(s->start); s->start = parse_hsize_list(opt_arg); break;
+                case 'S': free(s->stride); s->stride = parse_hsize_list(opt_arg); break;
+                case 'c': free(s->count); s->count = parse_hsize_list(opt_arg); break;
+                case 'k': free(s->block); s->block = parse_hsize_list(opt_arg); break;
+                default: goto end_collect;
+                }
+            } while ((opt = get_option(argc, argv, s_opts, l_opts)) != EOF);
+
+end_collect:
+            last_was_dset = FALSE;
+
+            if (opt != EOF)
+                goto parse_start;
+            else
+                goto parse_end;
+        }
+        /** end subsetting parameters **/
+
+        case 'h':
+            usage(progname);
+            leave(EXIT_SUCCESS);
+        case '?':
+        default:
+            usage(progname);
+            leave(EXIT_FAILURE);
+        }
+    }
+
+parse_end:
+    /* check for file name to be processed */
+    if (argc <= opt_ind) {
+        error_msg(progname, "missing file name\n");
+        usage(progname);
+        leave(EXIT_FAILURE);
+    }
+    return hand;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    free_handler
+ *
+ * Purpose:     Convenience function to free the handler_t structures. Needs a
+ *              length variable (LEN) to know how many in the array it needs
+ *              to free
+ *
+ * Return:      Nothing
+ *
+ * Programmer:  Bill Wendling
+ *              Tuesday, 20. February 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+free_handler(struct handler_t *hand, int len)
+{
+    register int i;
+
+    for (i = 0; i < len; i++) {
+        free(hand[i].obj);
+
+        if (hand[i].subset_info) {
+            free(hand[i].subset_info->start);
+            free(hand[i].subset_info->stride);
+            free(hand[i].subset_info->count);
+            free(hand[i].subset_info->block);
+            free(hand[i].subset_info);
+        }
+    }
+
+    free(hand);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    main
+ *
+ * Purpose:     HDF5 dumper
+ *
+ * Return:      Success:    0
+ *              Failure:    1
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *        Albert Cheng
+ *        30. September 2000
+ *        Add the -o option--output file for datasets raw data
+ *
+ *        REMcG
+ *        November 2000
+ *        Changes to support XML.
+ *
+ *        Bill Wendling
+ *        Wednesday, 10. January 2001
+ *        Modified the way command line parameters are interpreted. They go
+ *        through one function call now (get_option).
+ *
+ *        Bill Wendling
+ *        Tuesday, 20. February 2001
+ *        Moved command line parsing to separate function. Made various
+ *        "display_*" flags global.
+ *
+ *        REMcG
+ *        August 2003
+ *        Major upgrade to XML support.
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(int argc, const char *argv[])
+{
+    hid_t               fid, gid;
+    const char         *fname = NULL;
+    void               *edata;
+    H5E_auto_t          func;
+    find_objs_t         info;
+    struct handler_t   *hand;
+    int                 i;
+    unsigned            u;
+
+    dump_header_format = &standardformat;
+    dump_function_table = &ddl_function_table;
+
+    /* Disable error reporting */
+    H5Eget_auto(&func, &edata);
+    H5Eset_auto(NULL, NULL);
+
+    /* Initialize h5tools lib */
+    h5tools_init();
+    hand = parse_command_line(argc, argv);
+
+    /* Check for conflicting options */
+    if (doxml) {
+	if (!display_all) {
+            error_msg(progname, "option \"%s\" not available for XML\n",
+		      "to display selected objects");
+	    leave(EXIT_FAILURE);
+	} else if (display_bb) {
+            error_msg(progname, "option \"%s\" not available for XML\n",
+		      "--boot-block");
+	    leave(EXIT_FAILURE);
+	} else if (display_oid == 1) {
+            error_msg(progname, "option \"%s\" not available for XML\n",
+		      "--object-ids");
+	    leave(EXIT_FAILURE);
+        } else if (display_char == TRUE) {
+            error_msg(progname, "option \"%s\" not available for XML\n",
+		      "--string");
+	    leave(EXIT_FAILURE);
+	} else if (usingdasho) {
+            error_msg(progname, "option \"%s\" not available for XML\n",
+		      "--output");
+	    leave(EXIT_FAILURE);
+	}
+    } else {
+        if (xml_dtd_uri) {
+            warn_msg(progname, "option \"%s\" only applies with XML: %s\n",
+                     "--xml-dtd", xml_dtd_uri);
+        }
+    }
+
+    if (argc <= opt_ind) {
+        error_msg(progname, "missing file name\n");
+        usage(progname);
+        leave(EXIT_FAILURE);
+    }
+    fname = argv[opt_ind];
+
+    fid = h5tools_fopen(fname, driver, NULL, 0, argc, argv);
+
+    if (fid < 0) {
+        error_msg(progname, "unable to open file \"%s\"\n", fname);
+        leave(EXIT_FAILURE);
+    }
+
+    /* allocate and initialize internal data structure */
+    init_prefix(&prefix, prefix_len);
+
+    /* find all objects that might be targets of a refernce */
+    init_ref_path_table(fid);      /* Insert the root group into the ref. path table */
+    H5Giterate(fid, "/", NULL, fill_ref_path_table, (void *)"");
+
+    if (doxml) {
+	/* initialize XML */
+
+	/* reset prefix! */
+	strcpy(prefix, "");
+
+	/* make sure the URI is initialized to something */
+	if (xml_dtd_uri == NULL) {
+	    if (useschema) {
+		    xml_dtd_uri = DEFAULT_XSD;
+	    } else {
+		    xml_dtd_uri = DEFAULT_DTD;
+		    xmlnsprefix = "";
+	    }
+	} else {
+		if (useschema && strcmp(xmlnsprefix,"")) {
+        error_msg(progname, "Cannot set Schema URL for a qualified namespace--use -X or -U option with -D \n");
+			leave(EXIT_FAILURE);
+		}
+	}
+    }
+
+    /* find all shared objects */
+    if(init_objs(fid, &info, &group_table, &dset_table, &type_table) < 0) {
+        error_msg(progname, "internal error (file %s:line %d)\n",
+                  __FILE__, __LINE__);
+        d_status = EXIT_FAILURE;
+        goto done;
+    }
+
+    /* does there exist unamed committed data type */
+    for (u = 0; u < type_table->nobjs; u++)
+        if (!type_table->objs[u].recorded) {
+            unamedtype = 1;
+            break;
+        } /* end if */
+
+#ifdef H5DUMP_DEBUG
+    dump_tables(&info);
+#endif /* H5DUMP_DEBUG */
+
+    /* start to dump - display file header information */
+    if (!doxml) {
+	begin_obj(dump_header_format->filebegin, fname,
+		  dump_header_format->fileblockbegin);
+    } else {
+	printf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+	/* alternative first element, depending on schema or DTD. */
+        if (useschema) {
+            if (strcmp(xmlnsprefix,"") == 0) {
+                printf("<HDF5-File xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"%s\">\n",
+                   xml_dtd_uri);
+            } else {
+/*  TO DO: make -url option work in this case (may need new option) */
+                char * ns;
+                char *indx;
+
+                ns = strdup(xmlnsprefix);
+                indx = strrchr(ns,(int)':');
+                if (indx) *indx = '\0';
+
+                printf("<%sHDF5-File xmlns:%s=\"http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File\" "
+                    "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
+                    "xsi:schemaLocation=\"http://hdf.ncsa.uiuc.edu/DTDs/HDF5File "
+                    "http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd\">\n",xmlnsprefix,ns);
+            }
+	} else {
+            printf("<!DOCTYPE HDF5-File PUBLIC \"HDF5-File.dtd\" \"%s\">\n",
+                   xml_dtd_uri);
+            printf("<HDF5-File>\n");
+	}
+    }
+
+    if (!doxml) {
+        if (display_fi) {
+            dump_fcontents(fid);
+            end_obj(dump_header_format->fileend,dump_header_format->fileblockend);
+            goto done;
+        }
+
+        if (display_bb)
+            dump_fcpl(fid);
+    }
+
+
+    if (display_all) {
+        if ((gid = H5Gopen(fid, "/")) < 0) {
+            error_msg(progname, "unable to open root group\n");
+            d_status = EXIT_FAILURE;
+        } else {
+	    dump_function_table->dump_group_function(gid, "/");
+        }
+
+        if (H5Gclose(gid) < 0) {
+            error_msg(progname, "unable to close root group\n");
+            d_status = EXIT_FAILURE;
+        }
+    } else {
+	if (doxml) {
+	    /* Note: this option is not supported for XML */
+            error_msg(progname, "internal error (file %s:line %d)\n",
+                      __FILE__, __LINE__);
+            d_status = EXIT_FAILURE;
+	    goto done;
+	}
+
+        for (i = 0; i < argc; i++)
+            if (hand[i].func)
+                hand[i].func(fid, hand[i].obj, hand[i].subset_info);
+    }
+
+    if (!doxml) {
+	end_obj(dump_header_format->fileend,
+		dump_header_format->fileblockend);
+    } else {
+	printf("</%sHDF5-File>\n", xmlnsprefix);
+    }
+
+done:
+    if (H5Fclose(fid) < 0)
+	d_status = EXIT_FAILURE;
+
+    free_handler(hand, argc);
+
+    /* Free tables for objects */
+    free_table(group_table);
+    free_table(dset_table);
+    free_table(type_table);
+
+    free(prefix);
+
+    /* To Do:  clean up XML table */
+
+    H5Eset_auto(func, edata);
+
+    leave(d_status);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    print_enum
+ *
+ * Purpose:     prints the enum data
+ *
+ * Return:      void
+ *
+ * Programmer:  Patrick Lu
+ *
+ * Modifications:
+ *
+ * NOTE: this function was taken from h5ls. should be moved into the toolslib
+ *
+ *-----------------------------------------------------------------------*/
+static void
+print_enum(hid_t type)
+{
+    char           **name = NULL;   /*member names                   */
+    unsigned char   *value = NULL;  /*value array                    */
+    unsigned char   *copy = NULL;   /*a pointer to value array       */
+    unsigned         nmembs;        /*number of members              */
+    int              nchars;        /*number of output characters    */
+    hid_t            super;         /*enum base integer type         */
+    hid_t            native = -1;   /*native integer data type       */
+    size_t           dst_size;      /*destination value type size    */
+    unsigned         i;
+
+    nmembs = H5Tget_nmembers(type);
+    assert(nmembs>0);
+    super = H5Tget_super(type);
+
+    /*
+     * Determine what data type to use for the native values.  To simplify
+     * things we entertain three possibilities:
+     *  1. long_long -- the largest native signed integer
+     *    2. unsigned long_long -- the largest native unsigned integer
+     *    3. raw format
+     */
+    if (H5Tget_size(type) <= sizeof(long_long)) {
+	dst_size = sizeof(long_long);
+
+	if (H5T_SGN_NONE == H5Tget_sign(type)) {
+	    native = H5T_NATIVE_ULLONG;
+	} else {
+	    native = H5T_NATIVE_LLONG;
+	}
+    } else {
+	dst_size = H5Tget_size(type);
+    }
+
+    /* Get the names and raw values of all members */
+    name = calloc(nmembs, sizeof(char *));
+    value = calloc(nmembs, MAX(H5Tget_size(type), dst_size));
+
+    for (i = 0; i < nmembs; i++) {
+	name[i] = H5Tget_member_name(type, i);
+	H5Tget_member_value(type, i, value + i * H5Tget_size(type));
+    }
+
+    /* Convert values to native data type */
+    if (native > 0)
+        H5Tconvert(super, native, nmembs, value, NULL, H5P_DEFAULT);
+
+    /*
+     * Sort members by increasing value
+     *    ***not implemented yet***
+     */
+
+    /* Print members */
+    for (i = 0; i < nmembs; i++) {
+	indentation(indent + COL);
+	nchars = printf("\"%s\"", name[i]);
+	printf("%*s   ", MAX(0, 16 - nchars), "");
+
+	if (native < 0) {
+            size_t j;
+
+	    printf("0x");
+
+	    for (j = 0; j < dst_size; j++)
+		printf("%02x", value[i * dst_size + j]);
+	} else if (H5T_SGN_NONE == H5Tget_sign(native)) {
+	    /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
+	     *strangely, unless use another pointer "copy".*/
+	    copy = value+i*dst_size;
+	    HDfprintf(stdout,"%" H5_PRINTF_LL_WIDTH "u", *((unsigned long_long *)
+					      ((void *)copy)));
+	} else {
+	    /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
+	     *strangely, unless use another pointer "copy".*/
+	    copy = value+i*dst_size;
+	    HDfprintf(stdout,"%" H5_PRINTF_LL_WIDTH "d",
+		   *((long_long *) ((void *)copy)));
+	}
+
+	printf(";\n");
+    }
+
+    /* Release resources */
+    for (i = 0; i < nmembs; i++)
+	free(name[i]);
+
+    free(name);
+    free(value);
+    H5Tclose(super);
+
+    if (0 == nmembs)
+	printf("\n%*s <empty>", indent + 4, "");
+}
+
+
+/*
+ * create a string suitable for and XML NCNAME.  Uses the
+ * object reference to create the string.
+ *
+ *  'gen'; 0 - return null if not found
+ *         1 - generate a fake entry and return fake id.
+ */
+
+int
+xml_name_to_XID(const char *str , char *outstr, int outlen, int gen)
+{
+    haddr_t objno;      /* Object ID for object at path */
+    unsigned long 	_objno[2];	/*object number			*/
+
+    if (outlen < 22) return 1;
+
+    objno = ref_path_table_lookup(str);
+    if (objno == HADDR_UNDEF) {
+        if (HDstrlen(str) == 0) {
+            objno = ref_path_table_lookup("/");
+            if (objno == HADDR_UNDEF) {
+                if (gen) {
+                    objno = ref_path_table_gen_fake(str);
+                    _objno[0] = (unsigned long)(objno);
+#if H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG
+                    _objno[1] = (unsigned long)(objno >> 8*sizeof(long));
+#else /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+                    _objno[1] = 0;
+#endif /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+		    sprintf(outstr,"xid_%lu-%lu", _objno[0], _objno[1]);
+                    return 0;
+                } else {
+                    return 1;
+                }
+            }
+        } else {
+            if (gen) {
+                objno = ref_path_table_gen_fake(str);
+                _objno[0] = (unsigned long)(objno);
+#if H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG
+                _objno[1] = (unsigned long)(objno >> 8*sizeof(long));
+#else /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+                _objno[1] = 0;
+#endif /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+                sprintf(outstr,"xid_%lu-%lu", _objno[0], _objno[1]);
+                return 0;
+            } else {
+                return 1;
+            }
+        }
+    }
+
+    _objno[0] = (unsigned long)(objno);
+#if H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG
+    _objno[1] = (unsigned long)(objno >> 8*sizeof(long));
+#else /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+    _objno[1] = 0;
+#endif /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+    sprintf(outstr,"xid_%lu-%lu", _objno[0], _objno[1]);
+
+    return(0);
+}
+
+static const char      *quote = "&quot;";
+static const char      *amp = "&amp;";
+static const char      *lt = "&lt;";
+static const char      *gt = "&gt;";
+static const char      *apos = "&apos;";
+
+/*-------------------------------------------------------------------------
+ * Function:    xml_escape_the_name
+ *
+ * Purpose:     Escape XML reserved chars in a name, so HDF5 strings
+ *              and paths can be correctly read back in XML element.
+ *
+ * Return:      The revised string.
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static char                   *
+xml_escape_the_name(const char *str)
+{
+    size_t                     extra;
+    size_t                     len;
+    size_t                     i;
+    const char             *cp;
+    char                   *ncp;
+    char                   *rcp;
+
+    if (!str)
+	return NULL;
+
+    cp = str;
+    len = strlen(str);
+    extra = 0;
+
+    for (i = 0; i < len; i++) {
+	if (*cp == '\"') {
+	    extra += (strlen(quote) - 1);
+	} else if (*cp == '\'') {
+	    extra += (strlen(apos) - 1);
+	} else if (*cp == '<') {
+	    extra += (strlen(lt) - 1);
+	} else if (*cp == '>') {
+	    extra += (strlen(gt) - 1);
+	} else if (*cp == '&') {
+	    extra += (strlen(amp) - 1);
+	}
+
+	cp++;
+    }
+
+    if (extra == 0)
+	return HDstrdup(str);
+
+    cp = str;
+    rcp = ncp = HDmalloc(len + extra + 1);
+
+    if (!ncp)
+        return NULL;    /* ?? */
+
+    for (i = 0; i < len; i++) {
+        if (*cp == '\'') {
+            strncpy(ncp, apos, strlen(apos));
+            ncp += strlen(apos);
+            cp++;
+        } else if (*cp == '<') {
+            strncpy(ncp, lt, strlen(lt));
+            ncp += strlen(lt);
+            cp++;
+        } else if (*cp == '>') {
+            strncpy(ncp, gt, strlen(gt));
+            ncp += strlen(gt);
+            cp++;
+        } else if (*cp == '\"') {
+            strncpy(ncp, quote, strlen(quote));
+            ncp += strlen(quote);
+            cp++;
+        } else if (*cp == '&') {
+            strncpy(ncp, amp, strlen(amp));
+            ncp += strlen(amp);
+            cp++;
+        } else {
+            *ncp++ = *cp++;
+        }
+    }
+
+    *ncp = '\0';
+    return rcp;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    xml_escape_the_string
+ *
+ * Purpose:     Escape XML reserved chars in a string, so HDF5 strings
+ *              and paths can be correctly read back in XML CDATA.
+ *
+ * Return:      The revised string.
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static char                   *
+xml_escape_the_string(const char *str, int slen)
+{
+    size_t                     extra;
+    size_t                     len;
+    size_t                     i;
+    const char             *cp;
+    char                   *ncp;
+    char                   *rcp;
+
+    if (!str)
+	return NULL;
+
+    cp = str;
+
+    if (slen < 0)
+	len = strlen(str);
+    else
+	len = slen;
+
+    extra = 0;
+
+    for (i = 0; i < len; i++) {
+	if (*cp == '\\') {
+	    extra++;
+	} else if (*cp == '\"') {
+	    extra++;
+	} else if (*cp == '\'') {
+	    extra += (strlen(apos) - 1);
+	} else if (*cp == '<') {
+	    extra += (strlen(lt) - 1);
+	} else if (*cp == '>') {
+	    extra += (strlen(gt) - 1);
+	} else if (*cp == '&') {
+	    extra += (strlen(amp) - 1);
+	}
+	cp++;
+    }
+
+    cp = str;
+    rcp = ncp = calloc((len + extra + 1), sizeof(char));
+
+    if (ncp == NULL)
+	return NULL;		/* ?? */
+
+    for (i = 0; i < len; i++) {
+	if (*cp == '\\') {
+	    *ncp++ = '\\';
+	    *ncp++ = *cp++;
+	} else if (*cp == '\"') {
+	    *ncp++ = '\\';
+	    *ncp++ = *cp++;
+	} else if (*cp == '\'') {
+	    strncpy(ncp, apos, strlen(apos));
+	    ncp += strlen(apos);
+	    cp++;
+	} else if (*cp == '<') {
+	    strncpy(ncp, lt, strlen(lt));
+	    ncp += strlen(lt);
+	    cp++;
+	} else if (*cp == '>') {
+	    strncpy(ncp, gt, strlen(gt));
+	    ncp += strlen(gt);
+	    cp++;
+	} else if (*cp == '&') {
+	    strncpy(ncp, amp, strlen(amp));
+	    ncp += strlen(amp);
+	    cp++;
+	} else {
+	    *ncp++ = *cp++;
+	}
+    }
+
+    *ncp = '\0';
+    return rcp;
+}
+
+/**
+ **  XML print functions--these replace some functions in the
+ **  h5tools.c suite.
+ **/
+
+/*-------------------------------------------------------------------------
+ * Function:    xml_print_datatype
+ *
+ * Purpose:     Print description of a datatype in XML.
+ *              Note:  this is called inside a <DataType> element.
+ *
+ * Return:      void
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+xml_print_datatype(hid_t type, unsigned in_group)
+{
+    char                   *fname;
+    hid_t                   mtype;
+    unsigned                nmembers;
+    int                     perm[H5DUMP_MAX_RANK];
+    unsigned                ndims;
+    unsigned                i;
+    size_t                  size;
+    hsize_t                 dims[H5DUMP_MAX_RANK];
+    H5T_str_t               str_pad;
+    H5T_cset_t              cset;
+    H5G_stat_t              statbuf;
+    hid_t                   super;
+    H5T_order_t             ord;
+    H5T_sign_t              sgn;
+    size_t                  sz;
+    size_t                  spos;
+    size_t                  epos;
+    size_t                  esize;
+    size_t                  mpos;
+    size_t                  msize;
+    int                     nmembs;
+    htri_t                  is_vlstr=FALSE;
+
+    if (!in_group && H5Tcommitted(type) > 0) {
+        obj_t  *found_obj;    /* Found object */
+
+        /* detect a shared datatype, output only once */
+        H5Gget_objinfo(type, ".", TRUE, &statbuf);
+        found_obj = search_obj(type_table, statbuf.objno);
+
+        if (found_obj) {
+            /* This should be defined somewhere else */
+            /* These 2 cases are handled the same right now, but
+               probably will have something different eventually */
+            char * dtxid = malloc(100);
+            xml_name_to_XID(found_obj->objname,dtxid,100,1);
+            if (!found_obj->recorded) {
+                /* 'anonymous' NDT.  Use it's object num.
+                   as it's name.  */
+                printf("<%sNamedDataTypePtr OBJ-XID=\"/%s\"/>\n",
+                    xmlnsprefix, dtxid);
+            } else {
+                /* point to the NDT by name */
+                char *t_objname = xml_escape_the_name(found_obj->objname);
+                printf("<%sNamedDataTypePtr OBJ-XID=\"%s\" H5Path=\"%s\"/>\n",
+                    xmlnsprefix, dtxid,t_objname);
+                free(t_objname);
+            }
+            free(dtxid);
+        } else {
+            printf("<!-- h5dump error: unknown committed type. -->\n");
+            d_status = EXIT_FAILURE;
+        }
+
+    } else {
+
+        switch (H5Tget_class(type)) {
+        case H5T_INTEGER:
+            indentation(indent);
+            printf("<%sAtomicType>\n",xmlnsprefix);
+            indent += COL;
+            /* <hdf5:IntegerType ByteOrder="bo" Sign="torf" Size="bytes"/> */
+            ord = H5Tget_order(type);
+            sgn = H5Tget_sign(type);
+            indentation(indent);
+            printf("<%sIntegerType ByteOrder=\"",xmlnsprefix);
+            switch (ord) {
+            case H5T_ORDER_LE:
+                printf("LE");
+                break;
+            case H5T_ORDER_BE:
+                printf("BE");
+                break;
+            case H5T_ORDER_VAX:
+            default:
+                printf("ERROR_UNKNOWN");
+            }
+            printf("\" Sign=\"");
+            switch (sgn) {
+            case H5T_SGN_NONE:
+                printf("false");
+                break;
+            case H5T_SGN_2:
+                printf("true");
+                break;
+            default:
+                printf("ERROR_UNKNOWN");
+            }
+            printf("\" Size=\"");
+            sz = H5Tget_size(type);
+            printf("%lu", (unsigned long)sz);
+            printf("\" />\n");
+            indent -= COL;
+            indentation(indent);
+            printf("</%sAtomicType>\n",xmlnsprefix);
+            break;
+
+        case H5T_FLOAT:
+            /* <hdf5:FloatType ByteOrder="bo" Size="bytes"
+               SignBitLocation="bytes"
+               ExponentBits="eb" ExponentLocation="el"
+               MantissaBits="mb" MantissaLocation="ml" /> */
+            ord = H5Tget_order(type);
+            indentation(indent);
+            printf("<%sAtomicType>\n",xmlnsprefix);
+            indent += COL;
+            indentation(indent);
+            printf("<%sFloatType ByteOrder=\"",xmlnsprefix);
+            switch (ord) {
+            case H5T_ORDER_LE:
+                printf("LE");
+                break;
+            case H5T_ORDER_BE:
+                printf("BE");
+                break;
+            case H5T_ORDER_VAX:
+            default:
+                printf("ERROR_UNKNOWN");
+            }
+            printf("\" Size=\"");
+            sz = H5Tget_size(type);
+            printf("%lu", (unsigned long)sz);
+            H5Tget_fields(type, &spos, &epos, &esize, &mpos, &msize);
+            printf("\" SignBitLocation=\"%lu\" ", (unsigned long)spos);
+            printf("ExponentBits=\"%lu\" ExponentLocation=\"%lu\" ", (unsigned long)esize, (unsigned long)epos);
+            printf("MantissaBits=\"%lu\" MantissaLocation=\"%lu\" />\n",
+                   (unsigned long)msize, (unsigned long)mpos);
+            indent -= COL;
+            indentation(indent);
+            printf("</%sAtomicType>\n",xmlnsprefix);
+            break;
+
+        case H5T_TIME:
+            indentation(indent);
+            printf("<%sAtomicType>\n",xmlnsprefix);
+            indent += COL;
+            indentation(indent);
+            printf("<%sTimeType />\n",xmlnsprefix);
+            printf("<!-- H5T_TIME: not yet implemented -->");
+            indent -= COL;
+            indentation(indent);
+            printf("</%sAtomicType>\n",xmlnsprefix);
+            break;
+
+        case H5T_STRING:
+            /* <hdf5:StringType Cset="cs" StrSize="chars" StrPad="pad" /> */
+            size = H5Tget_size(type);
+            str_pad = H5Tget_strpad(type);
+            cset = H5Tget_cset(type);
+            is_vlstr = H5Tis_variable_str(type);
+
+            indentation(indent);
+            printf("<%sAtomicType>\n",xmlnsprefix);
+            indent += COL;
+            indentation(indent);
+            printf("<%sStringType Cset=\"",xmlnsprefix);
+            if (cset == H5T_CSET_ASCII) {
+                printf("H5T_CSET_ASCII\" ");
+            } else {
+                printf("unknown_cset\" ");
+            }
+            if(is_vlstr)
+                printf("StrSize=\"H5T_VARIABLE\" StrPad=\"");
+            else
+                printf("StrSize=\"%d\" StrPad=\"", (int) size);
+            if (str_pad == H5T_STR_NULLTERM) {
+                printf("H5T_STR_NULLTERM\"/>\n");
+            } else if (str_pad == H5T_STR_NULLPAD) {
+                printf("H5T_STR_NULLPAD\"/>\n");
+            } else if (str_pad == H5T_STR_SPACEPAD) {
+                printf("H5T_STR_SPACEPAD\"/>\n");
+            } else {
+                printf("H5T_STR_ERROR\"/>\n");
+            }
+            indent -= COL;
+            indentation(indent);
+            printf("</%sAtomicType>\n",xmlnsprefix);
+            break;
+
+        case H5T_BITFIELD:
+            /* <hdf5:BitfieldType ByteOrder="bo" Size="bytes"/> */
+            ord = H5Tget_order(type);
+            indentation(indent);
+            printf("<%sAtomicType>\n",xmlnsprefix);
+            indent += COL;
+            indentation(indent);
+            printf("<%sBitfieldType ByteOrder=\"",xmlnsprefix);
+            switch (ord) {
+            case H5T_ORDER_LE:
+                printf("LE");
+                break;
+            case H5T_ORDER_BE:
+                printf("BE");
+                break;
+            case H5T_ORDER_VAX:
+            default:
+                printf("ERROR_UNKNOWN");
+            }
+            size = H5Tget_size(type);
+            printf("\" Size=\"%lu\"/>\n", (unsigned long)size);
+            indent -= COL;
+            indentation(indent);
+            printf("</%sAtomicType>\n",xmlnsprefix);
+            break;
+
+        case H5T_OPAQUE:
+            /* <hdf5:OpaqueType Tag="tag" Size="bytes" /> */
+            indentation(indent);
+            printf("<%sAtomicType>\n",xmlnsprefix);
+            indent += COL;
+            indentation(indent);
+            printf("<%sOpaqueType Tag=\"%s\" ",xmlnsprefix, H5Tget_tag(type));
+            size = H5Tget_size(type);
+            printf("Size=\"%lu\"/>\n", (unsigned long)size);
+            indent -= COL;
+            indentation(indent);
+            printf("</%sAtomicType>\n",xmlnsprefix);
+            break;
+
+        case H5T_COMPOUND:
+            /* recursively describe the components of a compound datatype */
+
+            /* type of a dataset */
+            nmembers = H5Tget_nmembers(type);
+
+            indentation(indent);
+            printf("<%sCompoundType>\n",xmlnsprefix);
+
+            /* List each member Field of the type */
+            /*   <hdf5:Field FieldName="name" > */
+            /*   <hdf5:DataType > */
+            indent += COL;
+            for (i = 0; i < nmembers; i++) {
+                char *t_fname;
+
+                fname = H5Tget_member_name(type, i);
+                mtype = H5Tget_member_type(type, i);
+                indentation(indent);
+                t_fname = xml_escape_the_name(fname);
+                printf("<%sField FieldName=\"%s\">\n",xmlnsprefix, t_fname);
+
+                free(fname);
+                free(t_fname);
+                indent += COL;
+                indentation(indent);
+                printf("<%sDataType>\n",xmlnsprefix);
+                indent += COL;
+                xml_print_datatype(mtype,0);
+                indent -= COL;
+                indentation(indent);
+                printf("</%sDataType>\n",xmlnsprefix);
+                indent -= COL;
+
+                indentation(indent);
+                printf("</%sField>\n",xmlnsprefix);
+            }
+            indent -= COL;
+            indentation(indent);
+            printf("</%sCompoundType>\n",xmlnsprefix);
+            break;
+
+        case H5T_REFERENCE:
+            indentation(indent);
+            printf("<%sAtomicType>\n",xmlnsprefix);
+            indent += COL;
+            indentation(indent);
+            /*  Only Object references supported at this time */
+            printf("<%sReferenceType>\n",xmlnsprefix);
+            indentation(indent + COL);
+            printf("<%sObjectReferenceType />\n",xmlnsprefix);
+            indentation(indent);
+            printf("</%sReferenceType>\n",xmlnsprefix);
+            indent -= COL;
+            indentation(indent);
+            printf("</%sAtomicType>\n",xmlnsprefix);
+            break;
+
+        case H5T_ENUM:
+            /*  <hdf5:EnumType Nelems="ne" >
+               list Name, values of enum
+             */
+            nmembs = H5Tget_nmembers(type);
+            indentation(indent);
+            printf("<%sAtomicType>\n",xmlnsprefix);
+            indent += COL;
+            indentation(indent);
+            printf("<%sEnumType Nelems=\"%d\">\n",xmlnsprefix, nmembs);
+            xml_print_enum(type);
+            indentation(indent);
+            printf("</%sEnumType>\n",xmlnsprefix);
+            indent -= COL;
+            indentation(indent);
+            printf("</%sAtomicType>\n",xmlnsprefix);
+            break;
+
+        case H5T_VLEN:
+            indentation(indent);
+            printf("<%sVLType>\n",xmlnsprefix);
+            super = H5Tget_super(type);
+            indent += COL;
+            indentation(indent);
+            printf("<%sDataType>\n",xmlnsprefix);
+            indent += COL;
+            xml_print_datatype(super,0);
+            indent -= COL;
+            indentation(indent);
+            printf("</%sDataType>\n",xmlnsprefix);
+            indent -= COL;
+            indentation(indent);
+            printf("</%sVLType>\n",xmlnsprefix);
+            H5Tclose(super);
+
+            break;
+
+        case H5T_ARRAY:
+            /* Get array base type */
+            super = H5Tget_super(type);
+
+            /* Print lead-in */
+            indentation(indent);
+            printf("<%sArrayType Ndims=\"",xmlnsprefix);
+            ndims = H5Tget_array_ndims(type);
+            printf("%u\">\n", ndims);
+
+            /* Get array information */
+            H5Tget_array_dims(type, dims, perm);
+
+            /* list of dimensions */
+            indent += COL;
+            if (perm != NULL) {
+                /* for each dimension, list */
+                for (i = 0; i < ndims; i++) {
+                    indentation(indent);
+                    printf("<%sArrayDimension DimSize=\"%u\" DimPerm=\"%u\"/>\n",
+                           xmlnsprefix,(int) dims[i], (int) perm[i]);
+                }
+            } else {
+                for (i = 0; i < ndims; i++) {
+                    indentation(indent);
+                    printf("<%sArrayDimension DimSize=\"%u\" DimPerm=\"0\"/>\n",
+                           xmlnsprefix,
+                           (int) dims[i]);
+                }
+            }
+            indent -= COL;
+
+            indent += COL;
+            indentation(indent);
+            printf("<%sDataType>\n",xmlnsprefix);
+            indent += COL;
+            xml_print_datatype(super,0);
+            indent -= COL;
+            indentation(indent);
+            printf("</%sDataType>\n",xmlnsprefix);
+            indent -= COL;
+            indentation(indent);
+            printf("</%sArrayType>\n",xmlnsprefix);
+            /* Close array base type */
+            H5Tclose(super);
+            break;
+
+        default:
+            printf("<!-- unknown data type -->");
+            d_status = EXIT_FAILURE;
+            break;
+        }
+    } /* end else */
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    xml_dump_datatype
+ *
+ * Purpose:     Dump description of a datatype in XML.
+ *
+ * Return:      void
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+xml_dump_datatype(hid_t type)
+{
+    H5G_stat_t              statbuf;
+
+    indent += COL;
+    indentation(indent);
+
+    if (H5Tcommitted(type) > 0) {
+        obj_t  *found_obj;    /* Found object */
+
+	/* Data type is a shared or named data type */
+	H5Gget_objinfo(type, ".", TRUE, &statbuf);
+	found_obj = search_obj(type_table, statbuf.objno);
+
+	if (found_obj) {
+	    /* Shared data type, must be entered as an object  */
+		/* These 2 cases are the same now, but may change */
+	    char * dtxid = malloc(100);
+	    xml_name_to_XID(found_obj->objname,dtxid,100,1);
+	    if (!found_obj->recorded) {
+		/* anonymous stored data type:
+		   following the dumper's current
+		   practice:
+		   use it's object ref as its name
+		 */
+		printf("<%sNamedDataTypePtr OBJ-XID=\"%s\"/>\n",
+			xmlnsprefix, dtxid);
+
+	    } else {
+		/* pointer to a named data type already in XML */
+                char *t_objname = xml_escape_the_name(found_obj->objname);
+		printf("<%sNamedDataTypePtr OBJ-XID=\"%s\" H5Path=\"%s\" />\n",
+			xmlnsprefix, dtxid,t_objname);
+		free(t_objname);
+	    }
+	    free(dtxid);
+	} else {
+	    printf("<!-- h5dump error: unknown committed type. -->\n");
+	}
+	indent -= COL;
+	return;
+    }
+    printf("<%sDataType>\n",xmlnsprefix);
+    indent += COL;
+    xml_print_datatype(type,0);
+    indent -= COL;
+    indentation(indent);
+    printf("</%sDataType>\n",xmlnsprefix);
+    indent -= COL;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    xml_dump_dataspace
+ *
+ * Purpose:     Dump description of a dataspace in XML.
+ *
+ * Return:      void
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+xml_dump_dataspace(hid_t space)
+{
+    hsize_t                 size[H5DUMP_MAX_RANK];
+    hsize_t                 maxsize[H5DUMP_MAX_RANK];
+    int                     ndims =
+	H5Sget_simple_extent_dims(space, size, maxsize);
+    H5S_class_t             space_type = H5Sget_simple_extent_type(space);
+    int                     i;
+
+    indentation(indent + COL);
+    printf("<%sDataspace>\n", xmlnsprefix);
+    indentation(indent + COL + COL);
+
+    switch (space_type) {
+        case H5S_SCALAR:
+	    /* scalar dataspace (just a tag, no XML attrs. defined */
+	    printf("<%sScalarDataspace />\n",xmlnsprefix);
+
+            break;
+        case H5S_SIMPLE:
+	    /* simple dataspace */
+	    /* <hdf5:SimpleDataspace Ndims="nd"> */
+	    printf("<%sSimpleDataspace Ndims=\"%d\">\n",xmlnsprefix, ndims);
+
+	    /* print the <hdf5:Dimension> elements */
+	    for (i = 0; i < ndims; i++) {
+		indentation(indent + COL + COL + COL);
+		if (maxsize[i] == H5S_UNLIMITED) {
+		    HDfprintf(stdout,
+			      "<%sDimension  DimSize=\"%Hu\" MaxDimSize=\"UNLIMITED\"/>\n",
+			      xmlnsprefix,size[i]);
+		} else if (maxsize[i] == (hsize_t) 0) {
+		    HDfprintf(stdout,
+			      "<%sDimension  DimSize=\"%Hu\" MaxDimSize=\"%Hu\"/>\n",
+			      xmlnsprefix,size[i], size[i]);
+		} else {
+		    HDfprintf(stdout,
+			      "<%sDimension  DimSize=\"%Hu\" MaxDimSize=\"%Hu\"/>\n",
+			      xmlnsprefix, size[i], maxsize[i]);
+		}
+	    }
+	    indentation(indent + COL + COL);
+	    printf("</%sSimpleDataspace>\n", xmlnsprefix );
+
+            break;
+        case H5S_COMPLEX:
+	    printf("<!-- not yet implemented -->\n");
+
+            break;
+        case H5S_NO_CLASS:
+        default:
+	    printf("<!-- unknown dataspace -->\n");
+    }
+
+    indentation(indent + COL);
+    printf("</%sDataspace>\n", xmlnsprefix);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    xml_dump_data
+ *
+ * Purpose:     Dump description of data in XML.
+ *              Note that this calls the h5dump_xxx calls in
+ *              the h5tools library.
+ *
+ * Return:      void
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+xml_dump_data(hid_t obj_id, int obj_data, struct subset_t UNUSED * sset, int UNUSED pindex)
+{
+    h5dump_t               *outputformat = &xml_dataformat;
+    int                     status = -1;
+    void                   *buf;
+    hid_t                   space, type, p_type;
+    int                     ndims, i;
+    hsize_t                 size[64], nelmts = 1;
+    int                     depth;
+    int                     stdindent = COL;	/* should be 3 */
+
+    outputformat->line_ncols = nCols;
+    indent += COL;
+
+    /*
+     * the depth will tell us how far we need to indent extra.  we use to just
+     * use indent but with the merging of the tools lib we have to do
+     * something different for the lib funtions... the normal indentation is 6
+     * so when we don't need any extra indentation, depth will be 0.
+     */
+    depth = indent / stdindent + 1;
+
+    /* Print all the values. */
+    indentation(indent);
+    printf("<%sData>\n", xmlnsprefix);
+    indentation(indent + COL);
+    printf("<%sDataFromFile>\n",xmlnsprefix);
+    if (obj_data == DATASET_DATA) {
+	type = H5Dget_type(obj_id);
+	if (H5Tget_class(type) == H5T_REFERENCE) {
+	    status = xml_print_refs(obj_id, DATASET_DATA);
+	} else if (H5Tget_class(type) == H5T_STRING) {
+	    status = xml_print_strs(obj_id, DATASET_DATA);
+	} else {
+	    status = h5tools_dump_dset(stdout, outputformat, obj_id, -1, NULL, depth);
+	}
+    } else {
+	/* Attribute data */
+	type = H5Aget_type(obj_id);
+
+	if (H5Tget_class(type) == H5T_REFERENCE) {
+	    /* references are done differently than
+	       the standard output:
+	       XML dumps a path to the object
+	       referenced.
+	     */
+	    status = xml_print_refs(obj_id, ATTRIBUTE_DATA);
+	    H5Tclose(type);
+	} else if (H5Tget_class(type) == H5T_STRING) {
+	    status = xml_print_strs(obj_id, ATTRIBUTE_DATA);
+	} else {
+	    /* all other data */
+            p_type = h5tools_get_native_type(type);
+
+	    H5Tclose(type);
+
+	    space = H5Aget_space(obj_id);
+
+	    ndims = H5Sget_simple_extent_dims(space, size, NULL);
+
+	    for (i = 0; i < ndims; i++)
+		nelmts *= size[i];
+
+	    buf =
+		malloc((size_t)(nelmts * MAX(H5Tget_size(type), H5Tget_size(p_type))));
+	    assert(buf);
+
+	    if (H5Aread(obj_id, p_type, buf) >= 0)
+                status = h5tools_dump_mem(stdout, outputformat, obj_id,
+                                          p_type, space, buf, depth);
+
+	    free(buf);
+	    H5Tclose(p_type);
+	    H5Sclose(space);
+	    H5Tclose(type);
+	}
+    }
+
+    if (status == FAIL) {
+	indentation(indent + COL);
+	printf("Unable to print data.\n");
+	status = 1;
+    }
+
+    indentation(indent + COL);
+    printf("</%sDataFromFile>\n",xmlnsprefix);
+    indentation(indent);
+    printf("</%sData>\n", xmlnsprefix);
+    indent -= COL;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    xml_dump_attr
+ *
+ * Purpose:     Dump a description of an HDF5 attribute in XML.
+ *
+ * Return:      herr_t
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+xml_dump_attr(hid_t attr, const char *attr_name, void UNUSED * op_data)
+{
+    hid_t   attr_id, type, space;
+    char   *t_aname = xml_escape_the_name(attr_name);
+
+    indentation(indent);
+    printf("<%sAttribute Name=\"%s\">\n",xmlnsprefix, t_aname);
+    free(t_aname);
+
+    if ((attr_id = H5Aopen_name(attr, attr_name)) >= 0) {
+	type = H5Aget_type(attr_id);
+	space = H5Aget_space(attr_id);
+
+	dump_function_table->dump_dataspace_function(space);
+	dump_function_table->dump_datatype_function(type);
+
+	if (display_attr_data) {
+	    switch (H5Tget_class(type)) {
+	    case H5T_INTEGER:
+	    case H5T_FLOAT:
+	    case H5T_STRING:
+	    case H5T_BITFIELD:
+	    case H5T_OPAQUE:
+	    case H5T_ENUM:
+	    case H5T_ARRAY:
+		dump_function_table->dump_data_function(attr_id, ATTRIBUTE_DATA, NULL, 0);
+		break;
+
+	    case H5T_TIME:
+		indent += COL;
+		indentation(indent);
+		printf("<%sData>\n",xmlnsprefix);
+		indentation(indent);
+		printf("<!-- Time data not yet implemented. -->\n");
+		indentation(indent);
+		printf("<%sNoData/>\n",xmlnsprefix);
+		indentation(indent);
+		printf("<hdf5:Data>\n");
+		printf("</%sData>\n",xmlnsprefix);
+		indent -= COL;
+		break;
+
+	    case H5T_COMPOUND:
+		indentation(indent);
+		printf("<!-- Note: format of compound data not specified -->\n");
+		dump_function_table->dump_data_function(attr_id, ATTRIBUTE_DATA, NULL, 0);
+		break;
+
+	    case H5T_REFERENCE:
+		indentation(indent);
+		printf("<%sData>\n",xmlnsprefix);
+		indentation(indent);
+                if (!H5Tequal(type, H5T_STD_REF_OBJ)) {
+                   printf("<!-- Note: Region references not supported -->\n");
+                   indentation(indent);
+                   printf("<%sNoData />\n",xmlnsprefix);
+                } else {
+		    printf("<%sDataFromFile>\n",xmlnsprefix);
+		    xml_print_refs(attr_id, ATTRIBUTE_DATA);
+		    indentation(indent);
+		    printf("</%sDataFromFile>\n",xmlnsprefix);
+                }
+		indentation(indent);
+		printf("</%sData>\n",xmlnsprefix);
+		break;
+
+	    case H5T_VLEN:
+		printf("<!-- Note: format of VL data not specified -->\n");
+		dump_function_table->dump_data_function(attr_id, ATTRIBUTE_DATA, NULL, 0);
+		break;
+	    default:
+		indentation(indent);
+		printf("<%sData>\n",xmlnsprefix);
+		indentation(indent);
+		printf("<!-- Unknown datatype: %d -->\n", H5Tget_class(type));
+		indentation(indent);
+		printf("<%sNoData/>\n",xmlnsprefix);
+		indentation(indent);
+		printf("</%sData>\n",xmlnsprefix);
+		break;
+	    }
+	} else {
+	    /* The case of an attribute never yet written ?? */
+	    indentation(indent + COL);
+	    printf("<%sData>\n",xmlnsprefix);
+	    indentation(indent + COL + COL);
+	    printf("<%sNoData/>\n",xmlnsprefix);
+	    indentation(indent + COL);
+	    printf("</%sData>\n",xmlnsprefix);
+	}
+
+	H5Tclose(type);
+	H5Sclose(space);
+	H5Aclose(attr_id);
+	indentation(indent);
+	printf("</%sAttribute>\n", xmlnsprefix );
+	return SUCCEED;
+
+    } else {
+	/* ?? failed */
+	indentation(indent + COL);
+	printf("<!-- h5dump error: unable to open attribute. -->\n");
+	indentation(indent);
+	printf("</%sAttribute>\n", xmlnsprefix );
+	d_status = EXIT_FAILURE;
+	return FAIL;
+    }
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    xml_dump_named_datatype
+ *
+ * Purpose:     Dump a description of an HDF5 NDT in XML.
+ *
+ * Return:      herr_t
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+xml_dump_named_datatype(hid_t type, const char *name)
+{
+    char                   *tmp;
+    char * dtxid;
+    char * parentxid;
+    char *t_tmp;
+    char *t_prefix;
+    char   *t_name;
+
+    tmp = malloc(strlen(prefix) + strlen(name) + 2);
+    strcpy(tmp, prefix);
+    strcat(tmp, "/");
+    strcat(tmp, name);
+
+    indentation(indent);
+    /*char **/ dtxid = malloc(100);
+    /*char **/ parentxid = malloc(100);
+    /*char **/t_tmp = xml_escape_the_name(tmp);
+    /*char **/t_prefix = xml_escape_the_name(prefix);
+    /*char   **/t_name = xml_escape_the_name(name);
+    xml_name_to_XID(tmp,dtxid,100,1);
+    xml_name_to_XID(prefix,parentxid,100,1);
+    if (strncmp(name, "#", 1) == 0) {
+	/*  Special:  this is an 'anonymous' NDT, deleted but
+	   still in use.
+	   We follow the dumper's undocumented practice, and
+	   use its object id as its name.
+	   Exactly the same as normal, but a separate case
+	   in the event we want to do something else in
+	   the future.
+	 */
+	printf("<%sNamedDataType Name=\"%s\" OBJ-XID=\"%s\" "
+		"Parents=\"%s\" H5ParentPaths=\"%s\">\n",
+		xmlnsprefix,
+		name, dtxid,
+		parentxid,(strcmp(prefix, "") ? t_prefix : "/"));
+    } else {
+	printf("<%sNamedDataType Name=\"%s\" OBJ-XID=\"%s\" "
+		"H5Path=\"%s\" Parents=\"%s\" H5ParentPaths=\"%s\">\n",
+		xmlnsprefix,
+		t_name, dtxid,
+		t_tmp, parentxid, (strcmp(prefix, "") ? t_prefix : "/"));
+    }
+    free(dtxid);
+    free(parentxid);
+    free(t_tmp);
+    free(t_prefix);
+    free(t_name);
+    free(tmp);
+
+    indent += COL;
+    indentation(indent);
+    printf("<%sDataType>\n",xmlnsprefix);
+
+    indent += COL;
+    xml_print_datatype(type,1);
+
+    indent -= COL;
+    indentation(indent);
+    printf("</%sDataType>\n",xmlnsprefix);
+
+    indent -= COL;
+    indentation(indent);
+    printf("</%sNamedDataType>\n",xmlnsprefix);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    xml_dump_group
+ *
+ * Purpose:     Dump a description of an HDF5 Group (and its members) in XML.
+ *
+ * Return:      void
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+xml_dump_group(hid_t gid, const char *name)
+{
+    H5G_stat_t              statbuf;
+    char                   *cp;
+    hid_t                   dset, type;
+    char                    type_name[1024], *tmp = NULL;
+    char                   *par = NULL;
+    int                     isRoot = 0;
+    int                     xtype;
+    char *ptrstr;
+    char *t_objname;
+    char *par_name;
+
+    if (strcmp(name, "/") == 0) {
+	isRoot = 1;
+	tmp = malloc(2);
+	strcpy(tmp, "/");
+    } else {
+	tmp = malloc(strlen(prefix) + strlen(name) + 2);
+	strcpy(tmp, prefix);
+	par = HDstrdup(tmp);
+	cp = strrchr(par, '/');
+	if (cp != NULL) {
+	    if ((cp == par) && strlen(par) > 1) {
+		*(cp + 1) = '\0';
+	    } else {
+		*cp = '\0';
+	    }
+	}
+    }
+
+    indentation(indent);
+
+    indent += COL;
+    H5Gget_objinfo(gid, ".", TRUE, &statbuf);
+
+    if (statbuf.nlink > 1) {
+        obj_t  *found_obj;    /* Found object */
+
+	/* Group with more than one link to it... */
+	found_obj = search_obj(group_table, statbuf.objno);
+
+	if (found_obj == NULL) {
+	    indentation(indent);
+            error_msg(progname, "internal error (file %s:line %d)\n",
+                      __FILE__, __LINE__);
+	    d_status = EXIT_FAILURE;
+	} else {
+            char *t_name = xml_escape_the_name(name);
+            char *grpxid = malloc(100);
+            char *parentxid = malloc(100);
+
+            if (found_obj->displayed) {
+                /* already seen: enter a groupptr */
+                if (isRoot) {
+                    /* probably can't happen! */
+                    xml_name_to_XID("/",grpxid,100,1);
+                    printf("<%sRootGroup OBJ-XID=\"%s\" H5Path=\"%s\">\n",
+                            xmlnsprefix,grpxid,"/");
+                } else {
+                    t_objname = xml_escape_the_name(found_obj->objname);
+                    par_name = xml_escape_the_name(par);
+                    xml_name_to_XID(tmp,grpxid,100,1);
+                    xml_name_to_XID(par,parentxid,100,1);
+                    printf("<%sGroup Name=\"%s\" OBJ-XID=\"%s-%d\" H5Path=\"%s\" "
+                            "Parents=\"%s\" H5ParentPaths=\"%s\">\n",
+                            xmlnsprefix,t_name, grpxid, get_next_xid(),
+                            t_objname, parentxid, par_name);
+                    free(t_objname);
+                    free(par_name);
+                }
+
+                indentation(indent + COL);
+                ptrstr = malloc(100);
+                t_objname = xml_escape_the_name(found_obj->objname);
+                par_name = xml_escape_the_name(par);
+                xml_name_to_XID(par,parentxid,100,1);
+                xml_name_to_XID(found_obj->objname,ptrstr,100,1);
+                printf("<%sGroupPtr OBJ-XID=\"%s\" H5Path=\"%s\" "
+                            "Parents=\"%s\" H5ParentPaths=\"%s\" />\n",
+                            xmlnsprefix,
+                            ptrstr, t_objname, parentxid, par_name);
+                free(t_objname);
+                free(par_name);
+
+            } else {
+
+                /* first time this group has been seen -- describe it  */
+                if (isRoot) {
+                    xml_name_to_XID("/",grpxid,100,1);
+                    printf("<%sRootGroup OBJ-XID=\"%s\" H5Path=\"%s\">\n",
+                            xmlnsprefix,grpxid,"/");
+                } else {
+                    char *t_tmp = xml_escape_the_name(tmp);
+                    par_name = xml_escape_the_name(par);
+                    xml_name_to_XID(tmp,grpxid,100,1);
+                    xml_name_to_XID(par,parentxid,100,1);
+                    printf("<%sGroup Name=\"%s\" OBJ-XID=\"%s\" H5Path=\"%s\" "
+                            "Parents=\"%s\" H5ParentPaths=\"%s\" >\n",
+                           xmlnsprefix,t_name, grpxid, t_tmp, parentxid, par_name);
+                    free(t_tmp);
+                    free(par_name);
+                }
+                found_obj->displayed = TRUE;
+
+                /* 1.  do all the attributes of the group */
+                H5Aiterate(gid, NULL,
+                           dump_function_table->dump_attribute_function, NULL);
+
+                if (!strcmp(name, "/") && unamedtype) {
+                    unsigned u;
+
+                    /* Very special case: dump unamed type in root group */
+                    for (u = 0; u < type_table->nobjs; u++) {
+                        if (!type_table->objs[u].recorded) {
+                            unsigned long 	objno[2];	/*object number			*/
+
+                            dset = H5Dopen(gid, type_table->objs[u].objname);
+                            type = H5Dget_type(dset);
+
+                            objno[0] = (unsigned long)(type_table->objs[u].objno);
+#if H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG
+                            objno[1] = (unsigned long)(type_table->objs[u].objno >> 8*sizeof(long));
+#else /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+                            objno[1] = 0;
+#endif /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+                            sprintf(type_name, "#%lu:%lu", objno[0], objno[1]);
+                            dump_function_table->dump_named_datatype_function(type, type_name);
+
+                            H5Tclose(type);
+                            H5Dclose(dset);
+                        }
+                    }
+                }
+
+                /* iterate through all the members */
+                xtype = H5G_TYPE;
+                H5Giterate(gid, ".", NULL, dump_all, (void *) &xtype);
+                xtype = H5G_DATASET;
+                H5Giterate(gid, ".", NULL, dump_all, (void *) &xtype);
+                xtype = H5G_GROUP;
+                H5Giterate(gid, ".", NULL, dump_all, (void *) &xtype);
+                xtype = H5G_LINK;
+                H5Giterate(gid, ".", NULL, dump_all, (void *) &xtype);
+
+            }
+            free(t_name);
+            free(grpxid);
+            free(parentxid);
+        }
+    } else {
+
+	/* only link -- must be first time! */
+        char *t_name = xml_escape_the_name(name);
+	char *grpxid = malloc(100);
+	char *parentxid = malloc(100);
+	if (isRoot) {
+		xml_name_to_XID("/",grpxid,100,1);
+		printf("<%sRootGroup OBJ-XID=\"%s\" H5Path=\"%s\">\n",
+			xmlnsprefix,grpxid,"/");
+	} else {
+		char *t_tmp = xml_escape_the_name(tmp);
+		par_name = xml_escape_the_name(par);
+		xml_name_to_XID(tmp,grpxid,100,1);
+		xml_name_to_XID(par,parentxid,100,1);
+		printf("<%sGroup Name=\"%s\" OBJ-XID=\"%s\" H5Path=\"%s\" "
+			"Parents=\"%s\" H5ParentPaths=\"%s\" >\n",
+		        xmlnsprefix,t_name, grpxid, t_tmp,
+			parentxid, par_name);
+		free(t_tmp);
+		free(par_name);
+	}
+        free(t_name);
+	free(grpxid);
+	free(parentxid);
+	/* 1.  do all the attributes of the group */
+	H5Aiterate(gid, NULL, dump_function_table->dump_attribute_function, NULL);
+
+	if (!strcmp(name, "/") && unamedtype) {
+            unsigned u;
+
+	    /* Very special case: dump unamed type in root group */
+	    for (u = 0; u < type_table->nobjs; u++) {
+		if (!type_table->objs[u].recorded) {
+                    unsigned long 	objno[2];	/*object number			*/
+
+		    dset = H5Dopen(gid, type_table->objs[u].objname);
+		    type = H5Dget_type(dset);
+
+                    objno[0] = (unsigned long)(type_table->objs[u].objno);
+#if H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG
+                    objno[1] = (unsigned long)(type_table->objs[u].objno >> 8*sizeof(long));
+#else /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+                    objno[1] = 0;
+#endif /* H5_SIZEOF_UINT64_T>H5_SIZEOF_LONG */
+		    sprintf(type_name, "#%lu:%lu", objno[0], objno[1]);
+		    dump_function_table->dump_named_datatype_function(type, type_name);
+
+		    H5Tclose(type);
+		    H5Dclose(dset);
+		}
+	    }
+	}
+
+  	/* iterate through all the members */
+	xtype = H5G_TYPE;
+	H5Giterate(gid, ".", NULL, dump_all, (void *) &xtype);
+  	xtype = H5G_DATASET;
+  	H5Giterate(gid, ".", NULL, dump_all, (void *) &xtype);
+  	xtype = H5G_GROUP;
+  	H5Giterate(gid, ".", NULL, dump_all, (void *) &xtype);
+	xtype = H5G_LINK;
+	H5Giterate(gid, ".", NULL, dump_all, (void *) &xtype);
+
+    }
+
+    indent -= COL;
+    indentation(indent);
+    if (isRoot) {
+	printf("</%sRootGroup>\n",xmlnsprefix);
+    } else {
+	printf("</%sGroup>\n" ,xmlnsprefix);
+    }
+    free(tmp);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    xml_print_refs
+ *
+ * Purpose:     Print a path to the objects referenced by HDF5 Referneces.
+ *
+ * Return:      void
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+xml_print_refs(hid_t did, int source)
+{
+    herr_t                  e;
+    hid_t                   type, space;
+    char                   *buf;
+    hobj_ref_t             *refbuf;
+    hsize_t                 ssiz;
+    hsize_t                 i;
+
+    if (source == DATASET_DATA) {
+	type = H5Dget_type(did);
+    } else if (source == ATTRIBUTE_DATA) {
+	type = H5Aget_type(did);
+    } else {
+	/* return an error */
+	return FAIL;
+    }
+    if (H5Tget_class(type) != H5T_REFERENCE) {
+	/* return an error */
+	return FAIL;
+    }
+    if (!H5Tequal(type, H5T_STD_REF_OBJ)) {
+	/* region ref not supported yet... */
+	/* return an error */
+	return FAIL;
+    }
+    if (source == DATASET_DATA) {
+	space = H5Dget_space(did);
+	ssiz = H5Sget_simple_extent_npoints(space);
+	ssiz *= H5Tget_size(type);
+
+	buf = calloc((size_t)ssiz, sizeof(char));
+	if (buf == NULL) {
+	    return FAIL;
+	}
+	e = H5Dread(did, H5T_STD_REF_OBJ, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
+	/* need to check result here */
+	if (e < 0) {
+	    free(buf);
+	    return FAIL;
+	}
+
+    } else if (source == ATTRIBUTE_DATA) {
+	space = H5Aget_space(did);
+	ssiz = H5Sget_simple_extent_npoints(space);
+	ssiz *= H5Tget_size(type);
+
+	buf = calloc((size_t)ssiz, sizeof(char));
+	if (buf == NULL) {
+	    free(buf);
+	    return FAIL;
+	}
+	e = H5Aread(did, H5T_STD_REF_OBJ, buf);
+	/* need to check the result here */
+    } else {
+	/* error */
+	return FAIL;
+    }
+
+    refbuf = (hobj_ref_t *) buf;
+    ssiz = H5Sget_simple_extent_npoints(space);
+
+    for (i = 0; i < ssiz; i++) {
+        const char *path;
+
+	path = lookup_ref_path(*refbuf);
+	indentation(indent + COL);
+
+	if (!path) {
+	    printf("\"%s\"\n", "NULL");
+	} else {
+            char *t_path = xml_escape_the_string(path, -1);
+
+	    printf("\"%s\"\n", t_path);
+            free(t_path);
+	}
+
+	refbuf++;
+    }
+
+    free(buf);
+
+    return SUCCEED;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    xml_print_strs
+ *
+ * Purpose:     Print strings.
+ *
+ * Return:      void
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+xml_print_strs(hid_t did, int source)
+{
+    herr_t                  e;
+    hid_t                   type, space;
+    void                   *buf;
+    char                   *bp;
+    char                   *onestring=NULL;
+    hsize_t                 ssiz;
+    size_t                  tsiz, str_size=0;
+    size_t                  i;
+    htri_t                  is_vlstr;
+
+    if (source == DATASET_DATA) {
+	type = H5Dget_type(did);
+    } else if (source == ATTRIBUTE_DATA) {
+	type = H5Aget_type(did);
+    } else {
+	/* return an error */
+	return FAIL;
+    }
+    if (H5Tget_class(type) != H5T_STRING) {
+	/* return an error */
+	return FAIL;
+    }
+    is_vlstr = H5Tis_variable_str(type);
+
+    if (source == DATASET_DATA) {
+	space = H5Dget_space(did);
+	ssiz = H5Sget_simple_extent_npoints(space);
+	ssiz *= H5Tget_size(type);
+
+	buf = malloc((size_t)ssiz);
+
+	if (buf == NULL) {
+	    return FAIL;
+	}
+
+	e = H5Dread(did, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
+
+	if (e < 0) {
+	    free(buf);
+	    return FAIL;
+	}
+    } else if (source == ATTRIBUTE_DATA) {
+	space = H5Aget_space(did);
+	ssiz = H5Sget_simple_extent_npoints(space);
+	ssiz *= H5Tget_size(type);
+
+	buf = malloc((size_t)ssiz);
+	if (buf == NULL) {
+	    return FAIL;
+	}
+
+	e = H5Aread(did, type, buf);
+	if (e < 0) {
+	    free(buf);
+	    return FAIL;
+	}
+    } else {
+	/* error */
+	return FAIL;
+    }
+
+    /* pull out each string... */
+    ssiz = H5Sget_simple_extent_npoints(space);
+
+    tsiz = H5Tget_size(type);
+    bp = (char*)buf;
+    if(!is_vlstr)
+        onestring = (char *) calloc(tsiz, sizeof(char));
+
+    for (i = 0; i < ssiz; i++) {
+        if(is_vlstr) {
+            onestring = *(char **)bp;
+            if(onestring)
+                str_size = (size_t)HDstrlen(onestring);
+        } else {
+    	    HDstrncpy(onestring, bp, tsiz);
+            str_size = tsiz;
+        }
+	indentation(indent + COL);
+
+	if (!onestring) {
+	    printf("NULL\n");
+	} else {
+            char *t_onestring = xml_escape_the_string(onestring, (int)str_size);
+
+	    printf("\"%s\"\n", t_onestring);
+            free(t_onestring);
+	}
+
+       bp += tsiz;
+    }
+
+    return SUCCEED;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    check_compression
+ *
+ * Purpose:     private function to check for compression and
+ *              put a comment in the XML.  (Not fully implemented.)
+ *
+ * Return:      void
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifdef LATER
+static void
+check_compression(hid_t dcpl)
+{
+    int                     nfilt;
+    int                     i;
+    H5Z_filter_t            filter;
+    char                    namebuf[20];
+    size_t                  cd_nelmts = 1;
+    unsigned int            cd_values;
+    unsigned int            flags;
+/*  not used yet:  will need to do somehting more elaborate to handle future
+ * compression methods.
+    char                   *t1 = "H5Z_FILTER_DEFLATE";
+*/
+
+    nfilt = H5Pget_nfilters(dcpl);
+    if (nfilt <= 0)
+	return;
+    for (i = 0; i < nfilt; i++) {
+	filter = H5Pget_filter(dcpl, i, &flags,
+			       (size_t *) &cd_nelmts,
+			       &cd_values, 20, namebuf);
+	if (filter == H5Z_FILTER_DEFLATE) {
+	    indentation(indent + COL);
+	    printf("<%sCompression />\n",xmlnsprefix);
+	    indentation(indent + COL);
+	    printf("<!-- Compression parameter %d -->\n", cd_values);
+	}
+    }
+}
+#endif /* LATER */
+
+/*-------------------------------------------------------------------------
+ * Function:    check_filters
+ *
+ * Purpose:     private function to check for the filters and
+ *              put tags in the XML.
+ *
+ * Return:      void
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+check_filters(hid_t dcpl)
+{
+    int                     nfilt;
+    int                     i;
+    H5Z_filter_t            filter;
+    char                    namebuf[120];
+    size_t                  cd_nelmts = 20;
+    unsigned int            cd_values[20];
+    unsigned int            flags;
+
+    nfilt = H5Pget_nfilters(dcpl);
+    if (nfilt <= 0)
+	return;
+    for (i = 0; i < nfilt; i++) {
+	filter = H5Pget_filter(dcpl, (unsigned)i, &flags,
+			       (size_t *) &cd_nelmts,
+			       cd_values, 120, namebuf);
+	if (filter == H5Z_FILTER_DEFLATE) {
+	    indentation(indent + COL);
+	    printf("<%sDeflate Level=\"",xmlnsprefix);
+            if (cd_nelmts < 1) {
+		/* not sure what this means? */
+	        printf("6");
+            } else {
+	        printf("%d",cd_values[0]);
+            }
+	    printf("\"/>\n");
+	} else if (filter == H5Z_FILTER_FLETCHER32) {
+	    indentation(indent + COL);
+	    printf("<%sFletcher32 />",xmlnsprefix);
+	} else if (filter == H5Z_FILTER_SHUFFLE) {
+	    indentation(indent + COL);
+	    printf("<%sShuffle />",xmlnsprefix);
+	} else if (filter == H5Z_FILTER_SZIP) {
+
+	    indentation(indent + COL);
+	    printf("<%sSZIP ",xmlnsprefix);
+            if (cd_nelmts < 2) {
+		/* no pixels ? */
+	        printf("Pixels_per_block=\"-1\" ");
+            } else {
+	        printf("Pixels_per_block=\"%d\" ",cd_values[1]);
+            }
+		/* analyse the options mask */
+		if (cd_values[0] & H5_SZIP_CHIP_OPTION_MASK) {
+                    printf("Mode =\"Hardware\" ");
+                } else if (cd_values[0] & H5_SZIP_ALLOW_K13_OPTION_MASK) {
+                    printf("Mode =\"K13\" ");
+                }
+                printf("Coding=\"");
+		if (cd_values[0] & H5_SZIP_EC_OPTION_MASK) {
+                    printf("Entropy");
+                } else if (cd_values[0] & H5_SZIP_NN_OPTION_MASK) {
+                    printf("NN");
+                }
+                printf("\" ");
+
+                printf("ByteOrder=\"");
+		if (cd_values[0] & H5_SZIP_LSB_OPTION_MASK) {
+                    printf("LSB");
+                } else if (cd_values[0] & H5_SZIP_MSB_OPTION_MASK) {
+                    printf("MSB");
+                }
+                printf("\" ");
+
+		if (cd_values[0] & H5_SZIP_RAW_OPTION_MASK) {
+                    printf("Header=\"Raw\"");
+                }
+	        printf("/>\n");
+	} else {
+		/* unknown option */
+	}
+    }
+}
+
+static void
+xml_dump_fill_value(hid_t dcpl, hid_t type)
+{
+    size_t sz;
+    size_t i;
+    hsize_t space;
+    void * buf;
+    char * name;
+
+    indent += COL;
+    indentation(indent);
+    printf("<%sData>\n",xmlnsprefix);
+    indent += COL;
+
+    space = H5Tget_size(type);
+    buf = malloc((size_t)space);
+
+    H5Pget_fill_value(dcpl, type, buf);
+
+    if (H5Tget_class(type) == H5T_REFERENCE) {
+        const char * path;
+
+        path = lookup_ref_path(*(hobj_ref_t *)buf);
+
+        indentation(indent);
+        printf("<%sDataFromFile>\n",xmlnsprefix);
+        if (!path) {
+            printf("\"%s\"\n", "NULL");
+        } else {
+            char *t_path = xml_escape_the_string(path, -1);
+
+            printf("\"%s\"\n", t_path);
+            free(t_path);
+        }
+        indentation(indent);
+        printf("</%sDataFromFile>\n",xmlnsprefix);
+    } else if (H5Tget_class(type) == H5T_STRING) {
+            /* ????? */
+            indentation(indent);
+            printf("<!-- String fill values not yet implemented. -->\n");
+            indentation(indent);
+            printf("<%sNoData />\n",xmlnsprefix);
+    } else {
+        /* all other data */
+        switch (H5Tget_class(type)) {
+            case H5T_INTEGER:
+                    indentation(indent);
+                    printf("<%sDataFromFile>\n",xmlnsprefix);
+                    indentation(indent);
+                    printf("\"%d\"\n",*(int *)buf);
+                    indentation(indent);
+                    printf("</%sDataFromFile>\n",xmlnsprefix);
+                    break;
+            case H5T_FLOAT:
+                    indentation(indent);
+                    printf("<%sDataFromFile>\n",xmlnsprefix);
+                    indentation(indent);
+                    printf("\"%f\"\n",*(float *)buf);
+                    indentation(indent);
+                    printf("</%sDataFromFile>\n",xmlnsprefix);
+                    break;
+            case H5T_BITFIELD:
+            case H5T_OPAQUE:
+                    indentation(indent);
+                    printf("<%sDataFromFile>\n",xmlnsprefix);
+                    sz = H5Tget_size(type);
+                    indentation(indent);
+                    printf("\"");
+                    for (i = 0; i < sz; i++) {
+                            printf("%x ",*(unsigned int *)buf);
+                            buf = (char *)buf + sizeof(unsigned int);
+                    }
+                    printf("\"\n");
+                    indentation(indent);
+                    printf("</%sDataFromFile>\n",xmlnsprefix);
+                    break;
+            case H5T_ENUM:
+                    indentation(indent);
+                    printf("<%sDataFromFile>\n",xmlnsprefix);
+                    name = H5Tget_member_name(type, *(unsigned *)buf);
+                    indentation(indent);
+                    printf("\"%s\"\n",name);
+                    indentation(indent);
+                    printf("</%sDataFromFile>\n",xmlnsprefix);
+                    break;
+            case H5T_ARRAY:
+                    indentation(indent);
+                printf("<!-- Array fill values not yet implemented. -->\n");
+                indentation(indent);
+                printf("<%sNoData />\n",xmlnsprefix);
+                break;
+            case H5T_TIME:
+                    indentation(indent);
+                printf("<!-- Time fill not yet implemented. -->\n");
+                indentation(indent);
+                printf("<%sNoData />\n",xmlnsprefix);
+                break;
+            case H5T_COMPOUND:
+                    indentation(indent);
+                printf("<!-- Compound fill not yet implemented. -->\n");
+                indentation(indent);
+                printf("<%sNoData />\n",xmlnsprefix);
+                break;
+    case H5T_VLEN:
+            indentation(indent);
+                printf("<!-- VL fill not yet implemented. -->\n");
+                indentation(indent);
+                printf("<%sNoData />\n",xmlnsprefix);
+                break;
+    default:
+            indentation(indent);
+        printf("<!-- Unknown fill datatype: %d -->\n", H5Tget_class(type));
+        indentation(indent);
+        printf("<%sNoData/>\n",xmlnsprefix);
+        break;
+    }
+    }
+    free(buf);
+    indent -= COL;
+    indentation(indent);
+    printf("</%sData>\n",xmlnsprefix);
+    indent -= COL;
+}
+/*-------------------------------------------------------------------------
+ * Function:    xml_dump_group
+ *
+ * Purpose:     Dump a description of an HDF5 Group (and its members) in XML.
+ *
+ * Return:      void
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset)
+{
+    hid_t                   type, space;
+    hid_t                   dcpl;
+    H5D_fill_value_t        fvstatus;
+    int                     maxdims;
+    hsize_t                *chsize;
+    int                     ndims;
+    int                     i;
+    H5D_alloc_time_t        at;
+    H5D_fill_time_t        ft;
+    hsize_t                 tempi;
+    char                   *tmp;
+    char                   *t_name, *t_tmp, *t_prefix;
+    char *rstr = malloc(100);
+    char *pstr = malloc(100);
+
+    tmp = malloc(strlen(prefix) + strlen(name) + 2);
+    strcpy(tmp, prefix);
+    strcat(tmp, "/");
+    strcat(tmp, name);
+    indentation(indent);
+
+    t_name = xml_escape_the_name(name);
+    t_tmp = xml_escape_the_name(tmp);
+    t_prefix = xml_escape_the_name(prefix);
+
+    xml_name_to_XID(tmp, rstr, 100, 1);
+    xml_name_to_XID(prefix, pstr, 100, 1);
+    printf("<%sDataset Name=\"%s\" OBJ-XID=\"%s\" H5Path= \"%s\" Parents=\"%s\" H5ParentPaths=\"%s\">\n",xmlnsprefix,
+	   t_name, rstr, t_tmp, pstr, strcmp(prefix, "") ? t_prefix : "/");
+
+    free(t_name);
+    free(t_tmp);
+    free(t_prefix);
+    free(rstr);
+    free(pstr);
+    free(tmp);
+
+    dcpl = H5Dget_create_plist(did);
+    type = H5Dget_type(did);
+    space = H5Dget_space(did);
+
+    /* Print information about storage layout */
+    if (H5D_CHUNKED == H5Pget_layout(dcpl)) {
+	maxdims = H5Sget_simple_extent_ndims(space);
+	chsize = (hsize_t *) malloc(maxdims * sizeof(hsize_t));
+	indent += COL;
+	indentation(indent);
+	printf("<%sStorageLayout>\n",xmlnsprefix);
+	indent += COL;
+	indentation(indent);
+	printf("<%sChunkedLayout ",xmlnsprefix);
+	ndims = H5Pget_chunk(dcpl, maxdims, chsize);
+	printf("Ndims=\"%d\">\n", ndims);
+
+	indent += COL;
+
+	for (i = 0; i < ndims; i++) {
+	    indentation(indent);
+	    HDfprintf(stdout, "<%sChunkDimension DimSize=\"%Hu\" />\n",
+               xmlnsprefix, chsize[i]);
+	}
+
+	indentation(indent);
+	printf("<%sRequiredFilter>\n",xmlnsprefix);
+	indent += COL;
+	check_filters(dcpl);
+	indent -= COL;
+	indentation(indent);
+	printf("</%sRequiredFilter>\n",xmlnsprefix);
+
+	indent -= COL;
+
+	indentation(indent);
+	printf("</%sChunkedLayout>\n",xmlnsprefix);
+	indent -= COL;
+	indentation(indent);
+	printf("</%sStorageLayout>\n",xmlnsprefix);
+	indent -= COL;
+	free(chsize);
+    } else if (H5D_CONTIGUOUS == H5Pget_layout(dcpl)) {
+	indent += COL;
+	indentation(indent);
+	printf("<%sStorageLayout>\n",xmlnsprefix);
+	indent += COL;
+	indentation(indent);
+	printf("<%sContiguousLayout/>\n",xmlnsprefix);
+	indent -= COL;
+	indentation(indent);
+	printf("</%sStorageLayout>\n",xmlnsprefix);
+	indent -= COL;
+	indentation(indent);
+    } else if (H5D_COMPACT == H5Pget_layout(dcpl)) {
+	indent += COL;
+	indentation(indent);
+	printf("<%sStorageLayout>\n",xmlnsprefix);
+	indent += COL;
+	indentation(indent);
+	printf("<%sCompactLayout/>\n",xmlnsprefix);
+	indent -= COL;
+	indentation(indent);
+	printf("</%sStorageLayout>\n",xmlnsprefix);
+	indent -= COL;
+	indentation(indent);
+    }
+    /* and check for external.... ?? */
+
+    /* fill value */
+
+    indent += COL;
+    indentation(indent);
+    printf("<%sFillValueInfo ",xmlnsprefix);
+    H5Pget_fill_time(dcpl, &ft);
+    printf("FillTime=\"");
+    switch ( ft ) {
+	case H5D_FILL_TIME_ALLOC:
+                printf("FillOnAlloc");
+		break;
+	case H5D_FILL_TIME_NEVER:
+                printf("FillNever");
+		break;
+	case H5D_FILL_TIME_IFSET:
+                printf("FillIfSet");
+		break;
+	default:
+                printf("?");
+		break;
+    }
+    printf("\" ");
+    H5Pget_alloc_time(dcpl, &at);
+    printf("AllocationTime=\"");
+    switch ( at ) {
+	case H5D_ALLOC_TIME_EARLY:
+                printf("Early");
+		break;
+	case H5D_ALLOC_TIME_INCR:
+                printf("Incremental");
+		break;
+	case H5D_ALLOC_TIME_LATE:
+                printf("Late");
+		break;
+	case H5D_ALLOC_TIME_DEFAULT:
+	default:
+                printf("?");
+		break;
+    }
+    printf("\"");
+    printf(">\n");
+
+    indent += COL;
+    indentation(indent);
+    printf("<%sFillValue>\n",xmlnsprefix);
+    indent += COL;
+    H5Pfill_value_defined(dcpl, &fvstatus);
+    if (fvstatus == H5D_FILL_VALUE_UNDEFINED ||
+            (fvstatus==H5D_FILL_VALUE_DEFAULT && ft==H5D_FILL_TIME_IFSET)) {
+        indentation(indent + COL);
+        printf("<%sNoFill/>\n",xmlnsprefix);
+    } else {
+        xml_dump_fill_value(dcpl,type);
+    }
+
+    indent -= COL;
+    indentation(indent);
+    printf("</%sFillValue>\n",xmlnsprefix);
+
+    indent -= COL;
+    indentation(indent);
+    printf("</%sFillValueInfo>\n",xmlnsprefix);
+    indent -= COL;
+
+    dump_function_table->dump_dataspace_function(space);
+    dump_function_table->dump_datatype_function(type);
+
+    indent += COL;
+    H5Aiterate(did, NULL, dump_function_table->dump_attribute_function, NULL);
+    indent -= COL;
+    tempi = H5Dget_storage_size(did);
+
+    if (display_data && (tempi > 0)) {
+	switch (H5Tget_class(type)) {
+	case H5T_INTEGER:
+	case H5T_FLOAT:
+	case H5T_STRING:
+	case H5T_BITFIELD:
+	case H5T_OPAQUE:
+	case H5T_ENUM:
+	case H5T_ARRAY:
+	    dump_function_table->dump_data_function(did, DATASET_DATA, NULL, 0);
+	    break;
+
+	case H5T_TIME:
+	    indent += COL;
+	    indentation(indent);
+	    printf("<%sData>\n",xmlnsprefix);
+	    indentation(indent);
+	    printf("<!-- Time data not yet implemented. -->\n");
+	    indentation(indent);
+	    printf("<%sNoData />\n",xmlnsprefix);
+	    indentation(indent);
+	    printf("<%sData>\n",xmlnsprefix);
+	    indent -= COL;
+	    break;
+
+	case H5T_COMPOUND:
+	    indentation(indent);
+	    printf("<!-- Note: format of compound data not specified -->\n");
+	    dump_function_table->dump_data_function(did, DATASET_DATA, NULL, 0);
+	    break;
+
+	case H5T_REFERENCE:
+	    indentation(indent);
+	    printf("<%sData>\n",xmlnsprefix);
+	    indentation(indent);
+            if (!H5Tequal(type, H5T_STD_REF_OBJ)) {
+                printf("<!-- Note: Region references not supported -->\n");
+                indentation(indent);
+                printf("<%sNoData />\n",xmlnsprefix);
+            } else {
+	        printf("<%sDataFromFile>\n",xmlnsprefix);
+	        xml_print_refs(did, DATASET_DATA);
+	        indentation(indent);
+	        printf("</%sDataFromFile>\n",xmlnsprefix);
+            }
+	    indentation(indent);
+	    printf("</%sData>\n",xmlnsprefix);
+	    break;
+
+	case H5T_VLEN:
+	    printf("<!-- Note: format of VL data not specified -->\n");
+	    dump_function_table->dump_data_function(did, DATASET_DATA, NULL, 0);
+	    break;
+	default:
+	    indentation(indent);
+	    printf("<%sData>\n",xmlnsprefix);
+	    indentation(indent);
+	    printf("<!-- Unknown datatype: %d -->\n", H5Tget_class(type));
+	    indentation(indent);
+	    printf("<%sNoData/>\n",xmlnsprefix);
+	    indentation(indent);
+	    printf("</%sData>\n",xmlnsprefix);
+	    break;
+	}
+    } else {
+	/* no data written */
+	indentation(indent + COL);
+	printf("<%sData>\n",xmlnsprefix);
+	indentation(indent + COL + COL);
+	printf("<%sNoData/>\n",xmlnsprefix);
+	indentation(indent + COL);
+	printf("</%sData>\n",xmlnsprefix);
+    }
+
+    H5Tclose(type);
+    H5Sclose(space);
+    H5Pclose(dcpl);
+    indentation(indent);
+    printf("</%sDataset>\n", xmlnsprefix);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    xml_print_enum
+ *
+ * Purpose:     Print the values of an HDF5 ENUM in XML.
+ *              Very similar to regular DDL output.
+ *
+ * Return:      void
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+xml_print_enum(hid_t type)
+{
+    char                  **name = NULL;	/*member names                    */
+    unsigned char          *value = NULL;	/*value array                    */
+    unsigned                nmembs;	/*number of members                */
+    hid_t                   super;	/*enum base integer type        */
+    hid_t                   native = -1;	/*native integer data type        */
+    size_t                  dst_size;	/*destination value type size    */
+    unsigned                i;	/*miscellaneous counters        */
+    size_t                  j;
+
+    nmembs = H5Tget_nmembers(type);
+    super = H5Tget_super(type);
+
+    indentation(indent);
+    printf("<%sDataType>\n",xmlnsprefix);
+    xml_print_datatype(super,0);
+    indentation(indent);
+    printf("</%sDataType>\n",xmlnsprefix);
+
+    /*
+     * Determine what data type to use for the native values.  To simplify
+     * things we entertain three possibilities:
+     *  1. long_long -- the largest native signed integer
+     *    2. unsigned long_long -- the largest native unsigned integer
+     *    3. raw format
+     */
+    if (H5Tget_size(type) <= sizeof(long_long)) {
+	dst_size = sizeof(long_long);
+
+	if (H5T_SGN_NONE == H5Tget_sign(type)) {
+	    native = H5T_NATIVE_ULLONG;
+	} else {
+	    native = H5T_NATIVE_LLONG;
+	}
+    } else {
+	dst_size = H5Tget_size(type);
+    }
+
+    /* Get the names and raw values of all members */
+    name = calloc(nmembs, sizeof(char *));
+    value = calloc(nmembs, MAX(H5Tget_size(type), dst_size));
+
+    for (i = 0; i < nmembs; i++) {
+	name[i] = H5Tget_member_name(type, i);
+	H5Tget_member_value(type, i, value + i * H5Tget_size(type));
+    }
+
+    /* Convert values to native data type */
+    if (native > 0)
+	H5Tconvert(super, native, nmembs, value, NULL, H5P_DEFAULT);
+
+    /* Sort members by increasing value */
+    /*not implemented yet */
+
+    /* Print members */
+    indent += COL;
+    for (i = 0; i < nmembs; i++) {
+        char *t_name = xml_escape_the_name(name[i]);
+
+	indentation(indent);
+	printf("<%sEnumElement>\n",xmlnsprefix);
+	indentation(indent + COL);
+	printf("%s\n", t_name);
+        free(t_name);
+	indentation(indent);
+	printf("</%sEnumElement>\n",xmlnsprefix);
+	indentation(indent);
+	printf("<%sEnumValue>\n",xmlnsprefix);
+	indentation(indent + COL);
+	if (native < 0) {
+	    printf("0x");
+
+	    for (j = 0; j < dst_size; j++)
+		printf("%02x", value[i * dst_size + j]);
+	} else if (H5T_SGN_NONE == H5Tget_sign(native)) {
+	    HDfprintf(stdout,"%" H5_PRINTF_LL_WIDTH "u", *((unsigned long_long *)
+					      ((void *) (value + i * dst_size))));
+	} else {
+	    HDfprintf(stdout,"%" H5_PRINTF_LL_WIDTH "d",
+		   *((long_long *) ((void *) (value + i * dst_size))));
+	}
+	printf("\n");
+	indentation(indent);
+	printf("</%sEnumValue>\n",xmlnsprefix);
+
+    }
+    indent -= COL;
+
+    /* Release resources */
+    for (i = 0; i < nmembs; i++)
+	free(name[i]);
+
+    free(name);
+    free(value);
+    H5Tclose(super);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	h5_fileaccess
+ *
+ * Purpose:	Returns a file access template which is the default template
+ *		but with a file driver set according to the constant or
+ *		environment variable HDF5_DRIVER
+ *
+ * Return:	Success:	A file access property list
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, November 19, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hid_t
+h5_fileaccess(void)
+{
+    static const char *multi_letters = "msbrglo";
+    const char	*val = NULL;
+    const char	*name;
+    char s[1024];
+    hid_t fapl = -1;
+
+    /* First use the environment variable, then the constant */
+    val = HDgetenv("HDF5_DRIVER");
+#ifdef HDF5_DRIVER
+    if (!val) val = HDF5_DRIVER;
+#endif
+
+    if ((fapl=H5Pcreate(H5P_FILE_ACCESS))<0) return -1;
+    if (!val || !*val) return fapl; /*use default*/
+
+    HDstrncpy(s, val, sizeof s);
+    s[sizeof(s)-1] = '\0';
+    if (NULL==(name=HDstrtok(s, " \t\n\r"))) return fapl;
+
+    if (!HDstrcmp(name, "sec2")) {
+	/* Unix read() and write() system calls */
+	if (H5Pset_fapl_sec2(fapl)<0) return -1;
+    } else if (!HDstrcmp(name, "stdio")) {
+	/* Standard C fread() and fwrite() system calls */
+	if (H5Pset_fapl_stdio(fapl)<0) return -1;
+    } else if (!HDstrcmp(name, "core")) {
+	/* In-core temporary file with 1MB increment */
+	if (H5Pset_fapl_core(fapl, 1024*1024, FALSE)<0) return -1;
+    } else if (!HDstrcmp(name, "split")) {
+	/* Split meta data and raw data each using default driver */
+	if (H5Pset_fapl_split(fapl,
+			      "-m.h5", H5P_DEFAULT,
+			      "-r.h5", H5P_DEFAULT)<0)
+	    return -1;
+    } else if (!HDstrcmp(name, "multi")) {
+	/* Multi-file driver, general case of the split driver */
+	H5FD_mem_t memb_map[H5FD_MEM_NTYPES];
+	hid_t memb_fapl[H5FD_MEM_NTYPES];
+	const char *memb_name[H5FD_MEM_NTYPES];
+	char sv[H5FD_MEM_NTYPES][1024];
+	haddr_t memb_addr[H5FD_MEM_NTYPES];
+        H5FD_mem_t	mt;
+
+	HDmemset(memb_map, 0, sizeof memb_map);
+	HDmemset(memb_fapl, 0, sizeof memb_fapl);
+	HDmemset(memb_name, 0, sizeof memb_name);
+	HDmemset(memb_addr, 0, sizeof memb_addr);
+
+	assert(HDstrlen(multi_letters)==H5FD_MEM_NTYPES);
+	for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,mt)) {
+	    memb_fapl[mt] = H5P_DEFAULT;
+	    sprintf(sv[mt], "%%s-%c.h5", multi_letters[mt]);
+	    memb_name[mt] = sv[mt];
+	    memb_addr[mt] = MAX(mt-1,0)*(HADDR_MAX/10);
+	}
+
+	if (H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name,
+			      memb_addr, FALSE)<0) {
+	    return -1;
+	}
+    } else if (!HDstrcmp(name, "family")) {
+        hsize_t fam_size = 100*1024*1024; /*100 MB*/
+
+	/* Family of files, each 1MB and using the default driver */
+	if ((val=HDstrtok(NULL, " \t\n\r")))
+	    fam_size = (hsize_t)(HDstrtod(val, NULL) * 1024*1024);
+	if (H5Pset_fapl_family(fapl, fam_size, H5P_DEFAULT)<0)
+            return -1;
+    } else if (!HDstrcmp(name, "log")) {
+#ifdef H5_WANT_H5_V1_4_COMPAT
+        long verbosity = 1;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+        long log_flags = H5FD_LOG_LOC_IO;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+        /* Log file access */
+        if ((val = strtok(NULL, " \t\n\r")))
+            verbosity = strtol(val, NULL, 0);
+
+        if (H5Pset_fapl_log(fapl, NULL, (int)verbosity) < 0)
+	    return -1;
+#else /* H5_WANT_H5_V1_4_COMPAT */
+        /* Log file access */
+        if ((val = HDstrtok(NULL, " \t\n\r")))
+            log_flags = HDstrtol(val, NULL, 0);
+
+        if (H5Pset_fapl_log(fapl, NULL, (unsigned)log_flags, 0) < 0)
+	    return -1;
+#endif /* H5_WANT_H5_V1_4_COMPAT */
+    } else {
+	/* Unknown driver */
+	return -1;
+    }
+
+    return fapl;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    init_prefix
+ *
+ * Purpose:     allocate and initialize prefix
+ *
+ * Return:      void
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+init_prefix(char **prfx, size_t prfx_len)
+{
+    assert(prfx_len > 0);
+    *prfx = HDcalloc(prfx_len, 1);
+}
+

Added: packages/hdf5/branches/upstream/current/tools/h5dump/h5dump.h
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5dump/h5dump.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5dump/h5dump.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,21 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#ifndef H5DUMP_H__
+#define H5DUMP_H__
+
+#include "hdf5.h"
+
+#define H5DUMP_MAX_RANK		H5S_MAX_RANK
+
+#endif  /* !H5DUMP_H__ */

Added: packages/hdf5/branches/upstream/current/tools/h5dump/h5dumpgentest.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5dump/h5dumpgentest.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5dump/h5dumpgentest.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5346 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Generate the binary hdf5 files for the h5dump tests.
+ * Usage: just execute the program without any arguments will
+ * generate all the binary hdf5 files in the local directory.
+ *
+ * If you regenerate the test files (e.g., changing some code,
+ * trying it on a new platform, ...), you need to verify the correctness
+ * of the expected output and update the corresponding *.ddl files.
+ */
+#include <limits.h>
+
+#include "hdf5.h"
+#include "H5private.h"
+#include "h5tools.h"
+
+#define FILE1 "tgroup.h5"
+#define FILE2 "tdset.h5"
+#define FILE3 "tattr.h5"
+#define FILE4 "tslink.h5"
+#define FILE5 "thlink.h5"
+#define FILE6 "tcompound.h5"
+#define FILE7 "tall.h5"
+#define FILE8 "tdset2.h5"
+#define FILE9 "tcompound2.h5"
+#define FILE10 "tloop.h5"
+#define FILE11 "tloop2.h5"
+#define FILE12 "tmany.h5"
+#define FILE13 "tstr.h5"
+#define FILE14 "tstr2.h5"
+#define FILE15 "tenum.h5"
+#define FILE16 "tobjref.h5"
+#define FILE17 "tdatareg.h5"
+#define FILE18 "tnestedcomp.h5"
+#define FILE19 "topaque.h5"
+#define FILE20 "tbitfields.h5"
+#define FILE21 "tvldtypes1.h5"
+#define FILE22 "tvldtypes2.h5"
+#define FILE23 "tvldtypes3.h5"
+#define FILE24 "tvldtypes4.h5"
+#define FILE25 "tarray1.h5"
+#define FILE26 "tarray2.h5"
+#define FILE27 "tarray3.h5"
+#define FILE28 "tarray4.h5"
+#define FILE29 "tarray5.h5"
+#define FILE30 "tarray6.h5"
+#define FILE31 "tarray7.h5"
+#define FILE32 "tempty.h5"
+#define FILE33  "tgrp_comments.h5"
+#define FILE34  "tsplit_file"
+#define FILE35  "tfamily%05d.h5"
+#define FILE36  "tmulti"
+#define FILE37  "tlarge_objname.h5"
+#define FILE38  "tvlstr.h5"
+#define FILE39  "tchar.h5"
+#define FILE40  "tattr2.h5"
+#define FILE41  "tcompound_complex.h5"
+#define FILE42  "tnamed_dtype_attr.h5"
+#define FILE43  "tvldtypes5.h5"
+#define FILE44  "tfilters.h5"
+/* FILE45  not defined in this version */
+#define FILE46  "tfcontents1.h5"
+#define FILE47  "tfcontents2.h5"
+#define FILE48  "tfvalues.h5"
+#define FILE49  "tstr3.h5"
+#define FILE50  "taindices.h5"
+#define FILE51  "tlonglinks.h5"
+
+
+
+/*-------------------------------------------------------------------------
+ * prototypes
+ *-------------------------------------------------------------------------
+ */
+
+/* utility functions */
+static int
+write_attr(hid_t loc_id, int rank, hsize_t *dims, const char *attr_name,
+                hid_t type_id, void *buf);
+static int
+write_dset( hid_t loc_id, int rank, hsize_t *dims, const char *dset_name,
+                   hid_t type_id, void *buf );
+
+/* a filter operation callback function */
+static size_t
+myfilter(unsigned int UNUSED flags, size_t UNUSED cd_nelmts,
+      const unsigned int UNUSED *cd_values, size_t nbytes,
+      size_t UNUSED *buf_size, void UNUSED **buf);
+
+/* a "set local" callback     */
+static herr_t
+set_local_myfilter(hid_t dcpl_id, hid_t type_id, hid_t UNUSED space_id);
+
+#define MYFILTER_ID 405
+
+/* This message derives from H5Z */
+const H5Z_class_t H5Z_MYFILTER[1] = {{
+    MYFILTER_ID,         /* Filter id number  */
+    "myfilter",          /* Filter name for debugging */
+    NULL,                /* The "can apply" callback     */
+    set_local_myfilter,  /* The "set local" callback     */
+    myfilter,            /* The actual filter function */
+}};
+
+
+
+#define LENSTR  50
+#define LENSTR2  11
+
+#define SPACE2_RANK 2
+#define SPACE2_DIM1 10
+#define SPACE2_DIM2 10
+
+#define SPACE1_RANK 1
+#define SPACE1_DIM1 4
+
+#define DIM1  20
+#define DIM2  10
+#define CDIM1 DIM1/2
+#define CDIM2 DIM2/2
+#define RANK  2
+
+/* Element selection information */
+#define POINT1_NPOINTS 10
+
+typedef enum{
+     RED,
+     GREEN,
+     BLUE,
+     WHITE,
+     BLACK
+} enumtype;
+
+/* Compound datatype */
+typedef struct s1_t {
+    unsigned int a;
+    unsigned int b;
+    float c;
+} s1_t;
+
+
+/* 1-D array datatype */
+#define ARRAY1_RANK 1
+#define ARRAY1_DIM1 4
+
+/* 3-D array datatype */
+#define ARRAY2_RANK 3
+#define ARRAY2_DIM1 3
+#define ARRAY2_DIM2 4
+#define ARRAY2_DIM3 5
+
+/* 2-D array datatype */
+#define ARRAY3_RANK 2
+#define ARRAY3_DIM1 6
+#define ARRAY3_DIM2 3
+
+/* VL string datatype name */
+#define VLSTR_TYPE      "vl_string_type"
+
+/* "File 41" macros */
+/* Name of dataset to create in datafile                              */
+#define F41_DATASETNAME   "CompoundComplex"
+/* Dataset dimensions                                                 */
+#define F41_LENGTH         6
+#define F41_RANK           1
+#define F41_ARRAY_RANK     1
+#define F41_ARRAY_RANKd    2
+#define F41_DIMb           4
+#define F41_ARRAY_DIMc     6
+#define F41_ARRAY_DIMd1    5
+#define F41_ARRAY_DIMd2    6
+#define F41_ARRAY_DIMf     10
+
+/* "File 42" macros */
+/* Name of dataset to create in datafile                              */
+#define F42_DSETNAME "Dataset"
+#define F42_TYPENAME "Datatype"
+#define F42_ATTRNAME "Attribute"
+
+/* "File 43" macros */
+/* Name of dataset to create in datafile                              */
+#define F43_DSETNAME "Dataset"
+
+/* "File 51" macros */
+#define F51_MAX_NAME_LEN    ((64*1024)+1024)
+
+static void gent_group(void)
+{
+    hid_t fid, group;
+
+    fid = H5Fcreate(FILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* / */
+    group = H5Gcreate (fid, "/g1", 0);
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g2", 0);
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g3", 0);
+    H5Gclose(group);
+
+    /* /g1 */
+    group = H5Gcreate (fid, "/g1/g1.1", 0);
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g1/g1.2", 0);
+    H5Gclose(group);
+
+    /* /g2 */
+    group = H5Gcreate (fid, "/g2/g2.1", 0);
+    H5Gclose(group);
+
+    /* /g3 */
+    group = H5Gcreate (fid, "/g3/g3.1", 0);
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g3/g3.2", 0);
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g3/g3.3", 0);
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g3/g3.4", 0);
+    H5Gclose(group);
+
+    /* /g2/g2.1 */
+    group = H5Gcreate (fid, "/g2/g2.1/g2.1.1", 0);
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g2/g2.1/g2.1.2", 0);
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g2/g2.1/g2.1.3", 0);
+    H5Gclose(group);
+
+    H5Fclose(fid);
+}
+
+static void gent_dataset(void)
+{
+    hid_t fid, dataset, space;
+    hsize_t dims[2];
+    int dset1[10][20];
+    double dset2[30][20];
+    int i, j;
+
+    fid = H5Fcreate(FILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* dset1 */
+    dims[0] = 10; dims[1] = 20;
+    space = H5Screate_simple(2, dims, NULL);
+    dataset = H5Dcreate(fid, "/dset1", H5T_STD_I32BE, space, H5P_DEFAULT);
+
+    for (i = 0; i < 10; i++)
+         for (j = 0; j < 20; j++)
+              dset1[i][j] = j+i;
+
+    H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset1);
+    H5Sclose(space);
+    H5Dclose(dataset);
+
+    /* dset2 */
+    dims[0] = 30; dims[1] = 20;
+    space = H5Screate_simple(2, dims, NULL);
+    dataset = H5Dcreate(fid, "/dset2", H5T_IEEE_F64BE, space, H5P_DEFAULT);
+
+    for (i = 0; i < 30; i++)
+         for (j = 0; j < 20; j++)
+              dset2[i][j] = 0.0001*j+i;
+
+    H5Dwrite(dataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2);
+
+    H5Sclose(space);
+    H5Dclose(dataset);
+    H5Fclose(fid);
+}
+
+static void gent_dataset2(void)
+{
+    hid_t fid, dataset, space, create_plist;
+    hsize_t dims[2];
+    hsize_t maxdims[2];
+    int dset1[10][20];
+    double dset2[30][10];
+    int i, j;
+
+    fid = H5Fcreate(FILE8, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    create_plist = H5Pcreate(H5P_DATASET_CREATE);
+    dims[0] = 5; dims[1] = 5;
+    H5Pset_chunk(create_plist, 2, dims);
+
+    /* dset1 */
+    dims[0] = 10; dims[1] = 20;
+    maxdims[0] = H5S_UNLIMITED; maxdims[1] = 20;
+    space = H5Screate_simple(2, dims,  maxdims);
+    dataset = H5Dcreate(fid, "/dset1", H5T_STD_I32BE, space, create_plist);
+
+    for (i = 0; i < 10; i++)
+         for (j = 0; j < 20; j++)
+              dset1[i][j] = j;
+
+    H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset1);
+    H5Sclose(space);
+    H5Dclose(dataset);
+
+    /* dset2 */
+    dims[0] = 30; dims[1] = 10;
+    maxdims[0] = 30; maxdims[1] = H5S_UNLIMITED;
+    space = H5Screate_simple(2, dims, maxdims);
+    dataset = H5Dcreate(fid, "/dset2", H5T_IEEE_F64BE, space, create_plist);
+
+    for (i = 0; i < 30; i++)
+         for (j = 0; j < 10; j++)
+              dset2[i][j] = j;
+
+    H5Dwrite(dataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2);
+
+    H5Sclose(space);
+    H5Dclose(dataset);
+    H5Pclose(create_plist);
+    H5Fclose(fid);
+}
+
+
+static void gent_attribute(void)
+{
+    hid_t fid, root, space, attr, type;
+    hsize_t dims[2];
+    char buf[60];
+    int i, data[10];
+    double d[10];
+    char string[]= "string attribute";
+    int point = 100;
+
+    fid = H5Fcreate(FILE3, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    root = H5Gopen (fid, "/");
+
+    /* attribute 1 */
+    dims[0] = 24;
+    space = H5Screate_simple(1, dims, NULL);
+    attr = H5Acreate (root, "attr1", H5T_STD_I8BE, space, H5P_DEFAULT);
+    sprintf(buf, "attribute of root group");
+    H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
+    H5Sclose(space);
+    H5Aclose(attr);
+
+    /* attribute 2 */
+    dims[0] = 10;
+    space = H5Screate_simple(1, dims, NULL);
+    attr = H5Acreate (root, "attr2", H5T_STD_I32BE, space, H5P_DEFAULT);
+
+    for (i = 0; i < 10; i++) data[i] = i+1;
+
+    H5Awrite(attr, H5T_NATIVE_INT, data);
+    H5Sclose(space);
+    H5Aclose(attr);
+
+    /* attribute 3 */
+    dims[0] = 10;
+    space = H5Screate_simple(1, dims, NULL);
+    attr = H5Acreate (root, "attr3", H5T_IEEE_F64BE, space, H5P_DEFAULT);
+
+    for (i = 0; i < 10; i++) d[i] = 0.1 * i;
+
+    H5Awrite(attr, H5T_NATIVE_DOUBLE, d);
+    H5Sclose(space);
+    H5Aclose(attr);
+
+    /* attribute 4 */
+    space = H5Screate(H5S_SCALAR);
+    attr = H5Acreate (root, "attr4", H5T_STD_I32BE, space, H5P_DEFAULT);
+    H5Awrite(attr, H5T_NATIVE_INT, &point);
+    H5Sclose(space);
+    H5Aclose(attr);
+
+    /* attribute 5 */
+    space = H5Screate(H5S_SCALAR);
+    type = H5Tcopy(H5T_C_S1);
+    H5Tset_size(type, 17);
+    attr = H5Acreate (root, "attr5", type, space, H5P_DEFAULT);
+    H5Awrite(attr, type, string);
+
+    H5Tclose(type);
+    H5Sclose(space);
+    H5Aclose(attr);
+    H5Gclose(root);
+    H5Fclose(fid);
+}
+
+static void gent_softlink(void)
+{
+    hid_t fid, root;
+
+    fid = H5Fcreate(FILE4, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    root = H5Gopen (fid, "/");
+    H5Glink (root, H5G_LINK_SOFT, "somevalue", "slink1");
+    H5Glink (root, H5G_LINK_SOFT, "linkvalue", "slink2");
+
+    H5Gclose(root);
+    H5Fclose(fid);
+}
+
+/*
+            /
+
+       /    |   \      the dataset is hardlinked to three names
+                       /dset1, /g1/dset2, and /g1/g1.1/dset3
+     dset1 g1    g2
+                       /g2 and /g1/g1.1 are hardlinked to the same object.
+          /  \
+       dset2 g1.1
+              |
+             dset3
+*/
+
+static void gent_hardlink(void)
+{
+    hid_t fid, group, dataset, space;
+    hsize_t dim = 5;
+    int i, dset[5];
+
+    fid = H5Fcreate(FILE5, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    space = H5Screate_simple(1, &dim, NULL);
+    dataset = H5Dcreate(fid, "/dset1", H5T_STD_I32BE, space, H5P_DEFAULT);
+
+    for (i = 0; i < 5; i++) dset[i] = i;
+
+    H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset);
+    H5Sclose(space);
+    H5Dclose(dataset);
+
+    group = H5Gcreate (fid, "/g1", 0);
+    H5Glink (group, H5G_LINK_HARD, "/dset1", "dset2");
+    H5Gclose(group);
+
+    group = H5Gcreate (fid, "/g2", 0);
+    H5Glink (group, H5G_LINK_HARD, "/dset1", "dset3");
+    H5Gclose(group);
+
+    group = H5Gopen(fid, "/g1");
+    H5Glink (group, H5G_LINK_HARD, "/g2", "g1.1");
+    H5Gclose(group);
+    H5Fclose(fid);
+}
+
+/*
+               /
+     /     |       \     \
+   dset1  group1  type1 type2
+           |
+          dset2
+
+*/
+static void gent_compound_dt(void) {       /* test compound data type */
+    hid_t fid, group, dataset, space, space3, type, type2;
+    hid_t array_dt;
+    typedef struct {
+      int a;
+      float b;
+      double c;
+    } dset1_t;
+    dset1_t dset1[5];
+
+    typedef struct {
+      int a;
+      float b;
+    } dset2_t;
+    dset2_t dset2[5];
+
+    typedef struct {
+      int a[4];
+      float b[5][6];
+    } dset3_t;
+    dset3_t dset3[3][6];
+
+    typedef struct {
+      int a;
+      float b;
+    } dset4_t;
+    dset4_t dset4[5];
+
+    typedef struct {
+      int a;
+      float b;
+    } dset5_t;
+    dset5_t dset5[5];
+
+    int i, j, k, l, ndims;
+    hsize_t dim[2];
+
+    hsize_t sdim = 5;
+    hsize_t dset3_dim[2];
+
+
+  for (i = 0; i < (int)sdim; i++) {
+       dset1[i].a = i;
+       dset1[i].b = (float)(i*i);
+       dset1[i].c = (float)(1./(i+1));
+
+       dset2[i].a = i;
+       dset2[i].b = (float)(i+ i*0.1);
+
+       dset4[i].a = i;
+       dset4[i].b = (float)(i+3);
+
+       dset5[i].a = i;
+       dset5[i].b = (float)(i*0.1);
+  }
+
+
+  fid = H5Fcreate(FILE6, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+  space = H5Screate_simple(1, &sdim, NULL);
+
+  type = H5Tcreate (H5T_COMPOUND, sizeof(dset1[0]));
+  type2 = H5Tcreate(H5T_COMPOUND, sizeof(dset1[0]));
+  H5Tinsert(type, "a_name", HOFFSET(dset1_t, a), H5T_STD_I32BE);
+  H5Tinsert(type, "b_name", HOFFSET(dset1_t, b), H5T_IEEE_F32BE);
+  H5Tinsert(type, "c_name", HOFFSET(dset1_t, c), H5T_IEEE_F64BE);
+  H5Tinsert(type2, "a_name", HOFFSET(dset1_t, a), H5T_NATIVE_INT);
+  H5Tinsert(type2, "b_name", HOFFSET(dset1_t, b), H5T_NATIVE_FLOAT);
+  H5Tinsert(type2, "c_name", HOFFSET(dset1_t, c), H5T_NATIVE_DOUBLE);
+  dataset = H5Dcreate(fid, "/dset1", type, space, H5P_DEFAULT);
+  H5Dwrite(dataset, type2, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset1);
+  H5Tclose(type2);
+  H5Tclose(type);
+  H5Dclose(dataset);
+
+  /* shared data type 1 */
+  type = H5Tcreate (H5T_COMPOUND, sizeof(dset2_t));
+  H5Tinsert(type, "int_name", HOFFSET(dset2_t, a), H5T_STD_I32BE);
+  H5Tinsert(type, "float_name", HOFFSET(dset2_t, b), H5T_IEEE_F32BE);
+  H5Tcommit(fid, "type1", type);
+  type2 = H5Tcreate (H5T_COMPOUND, sizeof(dset2_t));
+  H5Tinsert(type2, "int_name", HOFFSET(dset2_t, a), H5T_NATIVE_INT);
+  H5Tinsert(type2, "float_name", HOFFSET(dset2_t, b), H5T_NATIVE_FLOAT);
+  group = H5Gcreate (fid, "/group1", 0);
+
+  dataset = H5Dcreate(group, "dset2", type, space, H5P_DEFAULT);
+  H5Dwrite(dataset, type2, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2);
+  H5Tclose(type2);
+  H5Tclose(type);
+  H5Dclose(dataset);
+
+
+  /* shared data type 2 */
+  type = H5Tcreate (H5T_COMPOUND, sizeof(dset3_t));
+  type2 = H5Tcreate (H5T_COMPOUND, sizeof(dset3_t));
+
+  ndims = 1; dim[0] = 4;
+
+  array_dt=H5Tarray_create(H5T_STD_I32BE,ndims,dim,NULL);
+  H5Tinsert(type, "int_array", HOFFSET(dset3_t, a), array_dt);
+  H5Tclose(array_dt);
+
+  array_dt=H5Tarray_create(H5T_NATIVE_INT,ndims,dim,NULL);
+  H5Tinsert(type2, "int_array", HOFFSET(dset3_t, a), array_dt);
+  H5Tclose(array_dt);
+
+  ndims = 2; dim[0] = 5; dim[1] = 6;
+
+  array_dt=H5Tarray_create(H5T_IEEE_F32BE,ndims,dim,NULL);
+  H5Tinsert(type, "float_array", HOFFSET(dset3_t, b), array_dt);
+  H5Tclose(array_dt);
+
+  array_dt=H5Tarray_create(H5T_NATIVE_FLOAT,ndims,dim,NULL);
+  H5Tinsert(type2, "float_array", HOFFSET(dset3_t, b), array_dt);
+  H5Tclose(array_dt);
+
+  H5Tcommit(fid, "type2", type);
+
+
+  dset3_dim[0] = 3;  dset3_dim[1] = 6;
+  space3 = H5Screate_simple(2, dset3_dim, NULL);
+  dataset = H5Dcreate(group, "dset3", type, space3, H5P_DEFAULT);
+  for (i = 0; i < (int)dset3_dim[0]; i++) {
+       for (j = 0; j < (int)dset3_dim[1]; j++) {
+            for (k = 0; k < 4; k++)
+                 dset3[i][j].a[k] = k+j+i;
+            for (k = 0; k < 5; k++)
+                 for (l = 0; l < 6; l++)
+                      dset3[i][j].b[k][l] = (float)((k+1)+l+j+i);
+       }
+  }
+  H5Dwrite(dataset, type2, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset3);
+  H5Sclose(space3);
+  H5Tclose(type);
+  H5Tclose(type2);
+  H5Dclose(dataset);
+
+  /* shared data type 3 */
+  type = H5Tcreate (H5T_COMPOUND, sizeof(dset4_t));
+  type2 = H5Tcreate (H5T_COMPOUND, sizeof(dset4_t));
+  H5Tinsert(type, "int", HOFFSET(dset4_t, a), H5T_STD_I32BE);
+  H5Tinsert(type, "float", HOFFSET(dset4_t, b), H5T_IEEE_F32BE);
+  H5Tcommit(group, "type3", type);
+  H5Tinsert(type2, "int", HOFFSET(dset4_t, a), H5T_NATIVE_INT);
+  H5Tinsert(type2, "float", HOFFSET(dset4_t, b), H5T_NATIVE_FLOAT);
+  dataset = H5Dcreate(group, "dset4", type, space, H5P_DEFAULT);
+  H5Dwrite(dataset, type2, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset4);
+
+  H5Tclose(type);
+  H5Tclose(type2);
+  H5Dclose(dataset);
+  H5Gclose(group);
+
+
+  /* unamed data type */
+  group = H5Gcreate (fid, "/group2", 0);
+
+  type = H5Tcreate (H5T_COMPOUND, sizeof(dset5_t));
+  H5Tinsert(type, "int", HOFFSET(dset5_t, a), H5T_STD_I32BE);
+  H5Tinsert(type, "float", HOFFSET(dset5_t, b), H5T_IEEE_F32BE);
+  H5Tcommit(group, "type4", type);
+  type2 = H5Tcreate (H5T_COMPOUND, sizeof(dset5_t));
+  H5Tinsert(type2, "int", HOFFSET(dset5_t, a), H5T_NATIVE_INT);
+  H5Tinsert(type2, "float", HOFFSET(dset5_t, b), H5T_NATIVE_FLOAT);
+  dataset = H5Dcreate(group, "dset5", type, space, H5P_DEFAULT);
+  H5Dwrite(dataset, type2, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset5);
+
+  H5Gunlink(group,"type4");
+
+  H5Tclose(type);
+  H5Tclose(type2);
+  H5Dclose(dataset);
+  H5Sclose(space);
+  H5Gclose(group);
+
+  H5Fclose(fid);
+
+}
+
+/*
+               /
+     /     |       \     \
+   dset1  group1  type1 type2
+           |
+          dset2
+
+*/
+static void gent_compound_dt2(void) {       /* test compound data type */
+    hid_t fid, group, dataset, space, type, create_plist, type2;
+    hid_t array_dt;
+
+    typedef struct {
+      int a;
+      float b;
+      double c;
+    } dset1_t;
+    dset1_t dset1[10];
+
+    typedef struct {
+      int a;
+      float b;
+    } dset2_t;
+    dset2_t dset2[10];
+
+    typedef struct {
+      int a[4];
+      float b[5][6];
+    } dset3_t;
+
+    typedef struct {
+      int a;
+      float b;
+    } dset4_t;
+    dset4_t dset4[10];
+
+    typedef struct {
+      int a;
+      float b;
+    } dset5_t;
+    dset5_t dset5[10];
+
+    int i, ndims;
+    const int perm[2]={0,1};
+    hsize_t dim[2];
+
+    hsize_t sdim, maxdim;
+
+  sdim = 10;
+  for (i = 0; i < (int)sdim; i++) {
+       dset1[i].a = i;
+       dset1[i].b = (float)(i*i);
+       dset1[i].c = (float)(1./(i+1));
+
+       dset2[i].a = i;
+       dset2[i].b = (float)(i+ i*0.1);
+
+       dset4[i].a = i;
+       dset4[i].b = (float)(i*1.0);
+
+       dset5[i].a = i;
+       dset5[i].b = (float)(i*1.0);
+  }
+
+  fid = H5Fcreate(FILE9, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+  create_plist = H5Pcreate(H5P_DATASET_CREATE);
+
+  sdim = 2;
+  H5Pset_chunk(create_plist, 1, &sdim);
+
+  sdim = 6;
+  maxdim = H5S_UNLIMITED;
+
+  space = H5Screate_simple(1, &sdim, &maxdim);
+
+  type = H5Tcreate (H5T_COMPOUND, sizeof(dset1[0]));
+
+  H5Tinsert(type, "a_name", HOFFSET(dset1_t, a), H5T_STD_I32BE);
+  H5Tinsert(type, "b_name", HOFFSET(dset1_t, b), H5T_IEEE_F32BE);
+  H5Tinsert(type, "c_name", HOFFSET(dset1_t, c), H5T_IEEE_F64BE);
+
+  dataset = H5Dcreate(fid, "/dset1", type, space, create_plist);
+
+  type2 = H5Tcreate (H5T_COMPOUND, sizeof(dset1[0]));
+
+  H5Tinsert(type2, "a_name", HOFFSET(dset1_t, a), H5T_NATIVE_INT);
+  H5Tinsert(type2, "b_name", HOFFSET(dset1_t, b), H5T_NATIVE_FLOAT);
+  H5Tinsert(type2, "c_name", HOFFSET(dset1_t, c), H5T_NATIVE_DOUBLE);
+
+  H5Dwrite(dataset, type2, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset1);
+
+  H5Tclose(type);
+  H5Tclose(type2);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  sdim = 6;
+  maxdim = 10;
+
+  space = H5Screate_simple(1, &sdim, &maxdim);
+
+  /* shared data type 1 */
+  type = H5Tcreate (H5T_COMPOUND, sizeof(dset2_t));
+  H5Tinsert(type, "int_name", HOFFSET(dset2_t, a), H5T_STD_I32BE);
+  H5Tinsert(type, "float_name", HOFFSET(dset2_t, b), H5T_IEEE_F32BE);
+  H5Tcommit(fid, "type1", type);
+
+  group = H5Gcreate (fid, "/group1", 0);
+
+  dataset = H5Dcreate(group, "dset2", type, space, create_plist);
+
+  type2 = H5Tcreate (H5T_COMPOUND, sizeof(dset2_t));
+  H5Tinsert(type2, "int_name", HOFFSET(dset2_t, a), H5T_NATIVE_INT);
+  H5Tinsert(type2, "float_name", HOFFSET(dset2_t, b), H5T_NATIVE_FLOAT);
+  H5Dwrite(dataset, type2, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2);
+
+  H5Tclose(type);
+  H5Tclose(type2);
+  H5Dclose(dataset);
+
+
+  /* shared data type 2 */
+  type = H5Tcreate (H5T_COMPOUND, sizeof(dset3_t));
+
+  ndims = 1; dim[0] = 4;
+  array_dt=H5Tarray_create(H5T_STD_I32BE,ndims,dim,perm);
+  H5Tinsert(type, "int_array", HOFFSET(dset3_t, a), array_dt);
+  H5Tclose(array_dt);
+
+  ndims = 2; dim[0] = 5; dim[1] = 6;
+  array_dt=H5Tarray_create(H5T_IEEE_F32BE,ndims,dim,perm);
+  H5Tinsert(type, "float_array", HOFFSET(dset3_t, b), array_dt);
+  H5Tclose(array_dt);
+
+  H5Tcommit(fid, "type2", type);
+  H5Tclose(type);
+
+  /* shared data type 3 */
+  type = H5Tcreate (H5T_COMPOUND, sizeof(dset4_t));
+  H5Tinsert(type, "int", HOFFSET(dset4_t, a), H5T_STD_I32BE);
+  H5Tinsert(type, "float", HOFFSET(dset4_t, b), H5T_IEEE_F32BE);
+  H5Tcommit(group, "type3", type);
+
+  dataset = H5Dcreate(group, "dset4", type, space, create_plist);
+
+  type2 = H5Tcreate (H5T_COMPOUND, sizeof(dset4_t));
+  H5Tinsert(type2, "int", HOFFSET(dset4_t, a), H5T_NATIVE_INT);
+  H5Tinsert(type2, "float", HOFFSET(dset4_t, b), H5T_NATIVE_FLOAT);
+  H5Dwrite(dataset, type2, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset4);
+
+  H5Tclose(type);
+  H5Tclose(type2);
+  H5Dclose(dataset);
+  H5Gclose(group);
+
+
+  /* unamed data type */
+  group = H5Gcreate (fid, "/group2", 0);
+
+  type = H5Tcreate (H5T_COMPOUND, sizeof(dset5_t));
+  H5Tinsert(type, "int", HOFFSET(dset5_t, a), H5T_STD_I32BE);
+  H5Tinsert(type, "float", HOFFSET(dset5_t, b), H5T_IEEE_F32BE);
+  H5Tcommit(group, "type4", type);
+  dataset = H5Dcreate(group, "dset5", type, space, create_plist);
+  type2 = H5Tcreate (H5T_COMPOUND, sizeof(dset5_t));
+  H5Tinsert(type2, "int", HOFFSET(dset5_t, a), H5T_NATIVE_INT);
+  H5Tinsert(type2, "float", HOFFSET(dset5_t, b), H5T_NATIVE_FLOAT);
+  H5Dwrite(dataset, type2, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset5);
+
+  H5Gunlink(group,"type4");
+
+  H5Tclose(type);
+  H5Tclose(type2);
+  H5Dclose(dataset);
+  H5Sclose(space);
+  H5Gclose(group);
+  H5Pclose(create_plist);
+
+  H5Fclose(fid);
+
+}
+
+
+/*
+
+/ : g1  g2  attr1  attr2
+g1 : g1.1  g1.2
+g1.1 : dset1.1.1(attr1, attr2)   dset1.1.2
+g1.2 : g1.2.1
+g1.2.1 : slink
+g2 : dset2.1  dset2.2
+
+*/
+
+static void gent_all(void) {
+hid_t fid, group, attr, dataset, space;
+hsize_t dims[2];
+int data[2][2], dset1[10][10], dset2[20];
+char buf[60];
+int i, j;
+float dset2_1[10], dset2_2[3][5];
+
+  fid = H5Fcreate(FILE7, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+  /* create groups */
+  group = H5Gcreate (fid, "/g1", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g2", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g1/g1.1", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g1/g1.2", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g1/g1.2/g1.2.1", 0);
+  H5Gclose(group);
+
+  /* root attributes */
+  group = H5Gopen (fid, "/");
+
+  dims[0] = 10;
+  space = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (group, "attr1", H5T_STD_I8BE, space, H5P_DEFAULT);
+  sprintf(buf, "abcdefghi");
+  H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  dims[0] = 2; dims[1] = 2;
+  space = H5Screate_simple(2, dims, NULL);
+  attr = H5Acreate (group, "attr2", H5T_STD_I32BE, space, H5P_DEFAULT);
+  data[0][0] = 0; data[0][1] = 1; data[1][0] = 2; data[1][1] = 3;
+  H5Awrite(attr, H5T_NATIVE_INT, data);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  H5Gclose(group);
+
+  group = H5Gopen (fid, "/g1/g1.1");
+
+  /* dset1.1.1 */
+  dims[0] = 10; dims[1] = 10;
+  space = H5Screate_simple(2, dims, NULL);
+  dataset = H5Dcreate(group, "dset1.1.1", H5T_STD_I32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+            dset1[i][j] = j*i;
+  H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset1);
+  H5Sclose(space);
+
+  /* attributes of dset1.1.1 */
+  dims[0] = 27;
+  space = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (dataset, "attr1", H5T_STD_I8BE, space, H5P_DEFAULT);
+  sprintf(buf, "1st attribute of dset1.1.1");
+  H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  dims[0] = 27;
+  space = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (dataset, "attr2", H5T_STD_I8BE, space, H5P_DEFAULT);
+  sprintf(buf, "2nd attribute of dset1.1.1");
+  H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  H5Dclose(dataset);
+
+  /* dset1.1.2 */
+  dims[0] = 20;
+  space = H5Screate_simple(1, dims, NULL);
+  dataset = H5Dcreate(group, "dset1.1.2", H5T_STD_I32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 20; i++)
+       dset2[i] = i;
+  H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  H5Gclose(group);
+
+  /* soft link */
+  group = H5Gopen (fid, "/g1/g1.2/g1.2.1");
+  H5Glink (group, H5G_LINK_SOFT, "somevalue", "slink");
+  H5Gclose(group);
+
+  group = H5Gopen (fid, "/g2");
+
+  /* dset2.1 */
+  dims[0] = 10;
+  space = H5Screate_simple(1, dims, NULL);
+  dataset = H5Dcreate(group, "dset2.1", H5T_IEEE_F32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 10; i++)
+       dset2_1[i] = (float)(i*0.1+1);
+  H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2_1);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  /* dset2.2 */
+  dims[0] = 3; dims[1] = 5;
+  space = H5Screate_simple(2, dims, NULL);
+  dataset = H5Dcreate(group, "dset2.2", H5T_IEEE_F32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 3; i++)
+       for (j = 0; j < 5; j++)
+            dset2_2[i][j] = (float)((i+1)*j*0.1);
+  H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2_2);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  H5Gclose(group);
+
+  H5Fclose(fid);
+
+}
+
+/*
+            o
+          /___\
+      g1 o/   \o g2
+          \___/
+
+
+o - group objects
+
+*/
+
+static void gent_loop(void) {
+hid_t fid, group;
+
+  fid = H5Fcreate(FILE10, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+  group = H5Gcreate (fid, "/g1", 0);
+  H5Gclose(group);
+  group = H5Gcreate (fid, "/g2", 0);
+  H5Gclose(group);
+
+  H5Glink(fid, H5G_LINK_HARD, "/g2", "/g1/g1.1");
+  H5Glink(fid, H5G_LINK_HARD, "/g1", "/g2/g2.1");
+
+  H5Fclose(fid);
+}
+
+static void gent_loop2(void) {
+hid_t fid, group;
+
+  fid = H5Fcreate(FILE11, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+  /* create group object g1 and implcit path from root object */
+  group = H5Gcreate (fid, "/g1", 0);
+  H5Gclose(group);
+
+  /* create group object g2 and implcit path from root object */
+  group = H5Gcreate (fid, "/g2", 0);
+  H5Gclose(group);
+
+  /* create path from object at /g1 to object at /g2 and name it g1.1 */
+  H5Glink (fid, H5G_LINK_HARD, "/g2", "/g1/g1.1");
+
+  /* create path from object at /g2 to object at /g1 and name it g2.1 */
+  H5Glink (fid, H5G_LINK_SOFT, "/g1", "/g2/g2.1");
+
+  H5Fclose(fid);
+
+}
+
+/*
+                  /
+     |       |       |   \    \    \
+     g1     g2      g3   g4   g5    g6
+    / \      |       |    \     \    \
+ g1.1 g1.2 slink2  link3 dset2 slink4 dset3
+  |    |    (g1)  (dset2)      (dset3)
+ dset1 link1
+      (dset1)
+*/
+
+static void gent_many(void) {
+    hid_t fid, group, attr, dataset, space, space2, type, create_plist, type2;
+    hid_t array_dt;
+    hsize_t dims[2];
+    int data[2][2], dset2[10][10], dset3[10][10];
+    double d[10];
+
+    char buf[60];
+    int i, j;
+    int i0, i1, i2, i3;
+    hsize_t sdim, maxdim;
+
+    typedef struct { /* compound type has members with rank > 1 */
+      int a[2][2][2][2]; /* arrays are 2x2x2x2    */
+      double b[2][2][2][2];
+      double c[2][2][2][2];
+    } dset1_t;
+    dset1_t dset1[6];
+
+    hsize_t dim[4];
+    int idx[4] = {0,1,2,3};  /* normal indicies */
+    const int perm[4] = {0,1,2,3};  /* the 0'th and the 3'rd indices are permuted */
+
+  fid = H5Fcreate(FILE12, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+  group = H5Gcreate (fid, "/g1", 0);
+  H5Gclose(group);
+
+  create_plist = H5Pcreate(H5P_DATASET_CREATE);
+
+  sdim = 2;
+  H5Pset_chunk(create_plist, 1, &sdim);
+
+  group = H5Gcreate (fid, "/g1/g1.1", 0);
+
+  type = H5Tcreate (H5T_COMPOUND, sizeof(dset1[0]));
+
+  dim[0] = dim[1] = dim[2] = dim[3] = 2;
+  array_dt=H5Tarray_create(H5T_STD_I32BE,4,dim,perm);
+  H5Tinsert(type, "a_array", HOFFSET(dset1_t, a), array_dt);
+  H5Tclose(array_dt);
+
+  array_dt=H5Tarray_create(H5T_IEEE_F64BE,4,dim,perm);
+  H5Tinsert(type, "b_array", HOFFSET(dset1_t, b), array_dt);
+  H5Tclose(array_dt);
+
+  array_dt=H5Tarray_create(H5T_IEEE_F64BE,4,dim,perm);
+  H5Tinsert(type, "c_array", HOFFSET(dset1_t, c), array_dt);
+  H5Tclose(array_dt);
+
+  type2 = H5Tcreate (H5T_COMPOUND, sizeof(dset1[0]));
+
+  array_dt=H5Tarray_create(H5T_NATIVE_INT,4,dim,perm);
+  H5Tinsert(type2, "a_array", HOFFSET(dset1_t, a), array_dt);
+  H5Tclose(array_dt);
+
+  array_dt=H5Tarray_create(H5T_NATIVE_DOUBLE,4,dim,perm);
+  H5Tinsert(type2, "b_array", HOFFSET(dset1_t, b), array_dt);
+  H5Tclose(array_dt);
+
+  array_dt=H5Tarray_create(H5T_NATIVE_DOUBLE,4,dim,perm);
+  H5Tinsert(type2, "c_array", HOFFSET(dset1_t, c), array_dt);
+  H5Tclose(array_dt);
+
+
+  /* dset1 */
+  sdim = 6;
+  maxdim = H5S_UNLIMITED;
+  space = H5Screate_simple(1, &sdim, &maxdim);
+  dataset = H5Dcreate(group, "dset1", type, space, create_plist);
+
+  /* add attributes to dset1 */
+  dims[0] = 10;
+  space2 = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (dataset, "attr1", H5T_STD_I8BE, space2, H5P_DEFAULT);
+  sprintf(buf, "abcdefghi");
+  H5Awrite(attr, H5T_NATIVE_CHAR, buf);
+  H5Sclose(space2);
+  H5Aclose(attr);
+
+  dims[0] = 2; dims[1] = 2;
+  space2 = H5Screate_simple(2, dims, NULL);
+  attr = H5Acreate (dataset, "attr2", H5T_STD_I32BE, space2, H5P_DEFAULT);
+  data[0][0] = 0; data[0][1] = 1; data[1][0] = 2; data[1][1] = 3;
+  H5Awrite(attr, H5T_NATIVE_INT, data);
+  H5Sclose(space2);
+  H5Aclose(attr);
+
+  dims[0] = 10;
+  space2 = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (dataset, "attr3", H5T_IEEE_F64BE, space2, H5P_DEFAULT);
+  for (i = 0; i < 10; i++) d[i] = 0.1 * i;
+  H5Awrite(attr, H5T_NATIVE_DOUBLE, d);
+  H5Sclose(space2);
+  H5Aclose(attr);
+
+  for (j=0; j<(int)sdim; j++) {
+ for (i3 = 0; i3 < 2; i3++) {
+  idx[perm[3]] = i3;
+ for (i2 = 0; i2 < 2; i2++) {
+  idx[perm[2]] = i2;
+ for (i1 = 0; i1 < 2; i1++) {
+  idx[perm[1]] = i1;
+ for (i0 = 0; i0 < 2; i0++) {
+  idx[perm[0]] = i0;
+
+  dset1[j].a[idx[3]][idx[2]][idx[1]][idx[0]] = i0+j;
+  dset1[j].b[idx[3]][idx[2]][idx[1]][idx[0]] = (double)(i0+j);
+#ifdef WIN32
+  dset1[j].c[idx[3]][idx[2]][idx[1]][idx[0]] = (double)(i0+j+(signed __int64)sdim);
+#else
+  dset1[j].c[idx[3]][idx[2]][idx[1]][idx[0]] = (double)(i0+j+sdim);
+#endif
+ }
+ }
+ }
+ }
+  }
+
+  H5Dwrite(dataset, type2, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset1);
+
+  H5Dclose(dataset);
+  H5Sclose(space);
+
+  H5Tclose(type);
+  H5Tclose(type2);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g1/g1.2", 0);
+  H5Glink (group, H5G_LINK_HARD, "/g1/g1.1/dset1", "link1");
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g2", 0);
+  H5Glink (group, H5G_LINK_SOFT, "/g1", "slink2");
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g3", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g4", 0);
+
+  /* dset2 */
+  dims[0] = 10; dims[1] = 10;
+  space = H5Screate_simple(2, dims, NULL);
+
+  dataset = H5Dcreate(group, "dset2", H5T_STD_I32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+            dset2[i][j] = j;
+  H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2);
+
+  H5Dclose(dataset);
+
+  H5Sclose(space);
+  H5Gclose(group);
+
+  group = H5Gopen(fid, "/g3");
+  H5Glink (group, H5G_LINK_HARD, "/g4/dset2", "link3");
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g5", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g6", 0);
+  /* dset3 */
+  dims[0] = 10; dims[1] = 10;
+  space = H5Screate_simple(2, dims, NULL);
+
+  dataset = H5Dcreate(group, "dset3", H5T_STD_I32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+            dset3[i][j] = i;
+  H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset3);
+
+  H5Dclose(dataset);
+
+  H5Sclose(space);
+  H5Gclose(group);
+
+  group = H5Gopen(fid, "/g5");
+  H5Glink (group, H5G_LINK_SOFT, "/g6/dset3", "slink4");
+  H5Gclose(group);
+  H5Pclose(create_plist);
+
+  H5Fclose(fid);
+
+}
+static hid_t mkstr(int size, H5T_str_t pad) {
+hid_t type;
+
+  if ((type=H5Tcopy(H5T_C_S1))<0) return -1;
+  if (H5Tset_size(type, (size_t)size)<0) return -1;
+  if (H5Tset_strpad(type, pad)<0) return -1;
+
+  return type;
+}
+
+static void gent_str(void) {
+    hid_t fid, dataset, space, f_type, m_type, str_type, f_type2;
+    hid_t array_dt;
+
+    hsize_t dims1[] = { 3, 4};
+    char string1[12][3] = {"s1","s2","s3","s4","s5","s6","s7","s8","s9",
+                           "s0","s1","s2"};
+
+    hsize_t dims2[]={20};
+    char string2[20][10] = {"ab cd ef1", "ab cd ef2", "ab cd ef3", "ab cd ef4",
+                        "ab cd ef5", "ab cd ef6", "ab cd ef7", "ab cd ef8",
+                        "ab cd ef9", "ab cd ef0", "ab cd ef1", "ab cd ef2",
+                        "ab cd ef3", "ab cd ef4", "ab cd ef5", "ab cd ef6",
+                        "ab cd ef7", "ab cd ef8", "ab cd ef9", "ab cd ef0"};
+
+    hsize_t dims3[] = { 27};
+    char string3[27][6] = {"abcd0", "abcd1", "abcd2", "abcd3",
+                       "abcd4", "abcd5", "abcd6", "abcd7",
+                       "abcd8", "abcd9", "abcd0", "abcd1",
+                       "abcd2", "abcd3", "abcd4", "abcd5",
+                       "abcd6", "abcd7", "abcd8", "abcd9",
+                       "abcd0", "abcd1", "abcd2", "abcd3",
+                       "abcd4", "abcd5", "abcd6"};
+
+    int i, j, k, l;
+
+    hsize_t dims4[] = { 3 };
+    char string4[3][21] = { "s1234567890123456789", "s1234567890123456789",
+                            "s1234567890123456789"};
+
+    hsize_t dims5[] = { 3, 6};
+    typedef struct {
+      int a[8][10];
+      char s[12][33];
+    } compound_t;
+    compound_t comp1[3][6];
+    hsize_t mdims[2];
+
+  fid = H5Fcreate(FILE13, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+  /* string 1 : nullterm string */
+  space = H5Screate_simple(2, dims1, NULL);
+  f_type = mkstr(5, H5T_STR_NULLTERM);
+  m_type = mkstr(3, H5T_STR_NULLTERM);
+  dataset = H5Dcreate(fid, "/string1", f_type, space, H5P_DEFAULT);
+  H5Dwrite(dataset, m_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, string1);
+  H5Tclose(m_type);
+  H5Tclose(f_type);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  /* string 2 : space pad string */
+  space = H5Screate_simple(1, dims2, NULL);
+  f_type = mkstr(11, H5T_STR_SPACEPAD);
+  m_type = mkstr(10, H5T_STR_NULLTERM);
+  dataset = H5Dcreate(fid, "/string2", f_type, space, H5P_DEFAULT);
+  H5Dwrite(dataset, m_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, string2);
+  H5Tclose(m_type);
+  H5Tclose(f_type);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  /* string 3 : null pad string */
+  space = H5Screate_simple(1, dims3, NULL);
+  f_type = mkstr(8, H5T_STR_NULLPAD);
+  m_type = mkstr(6, H5T_STR_NULLTERM);
+  dataset = H5Dcreate(fid, "/string3", f_type, space, H5P_DEFAULT);
+  H5Dwrite(dataset, m_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, string3);
+  H5Tclose(m_type);
+  H5Tclose(f_type);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  /* string 4 : space pad long string */
+  space = H5Screate_simple(1, dims4, NULL);
+  f_type = mkstr(168, H5T_STR_SPACEPAD);
+  m_type = mkstr(21, H5T_STR_NULLTERM);
+  dataset = H5Dcreate(fid, "/string4", f_type, space, H5P_DEFAULT);
+  H5Dwrite(dataset, m_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, string4);
+  H5Tclose(m_type);
+  H5Tclose(f_type);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  /* compound data */
+  space = H5Screate_simple(2, dims5, NULL);
+  f_type = H5Tcreate (H5T_COMPOUND, sizeof(compound_t));
+  f_type2 = H5Tcreate (H5T_COMPOUND, sizeof(compound_t));
+
+  mdims[0] = 8; mdims[1] = 10;
+
+  array_dt=H5Tarray_create(H5T_STD_I32BE,2,mdims,NULL);
+  H5Tinsert(f_type, "int_array", HOFFSET(compound_t, a), array_dt);
+  H5Tclose(array_dt);
+
+  array_dt=H5Tarray_create(H5T_NATIVE_INT,2,mdims,NULL);
+  H5Tinsert(f_type2, "int_array", HOFFSET(compound_t, a), array_dt);
+  H5Tclose(array_dt);
+
+  mdims[0] = 3; mdims[1] = 4;
+
+  str_type = mkstr(32, H5T_STR_SPACEPAD);
+  array_dt=H5Tarray_create(str_type,2,mdims,NULL);
+  H5Tinsert(f_type, "string", HOFFSET(compound_t, s), array_dt);
+  H5Tclose(array_dt);
+  H5Tclose(str_type);
+
+  str_type = mkstr(33, H5T_STR_NULLTERM);
+  array_dt=H5Tarray_create(str_type,2,mdims,NULL);
+  H5Tinsert(f_type2, "string", HOFFSET(compound_t, s), array_dt);
+  H5Tclose(array_dt);
+  H5Tclose(str_type);
+
+  for (i = 0; i < 3; i++)
+      for (j = 0; j < 6; j++) {
+           for (k = 0 ; k < 8; k++)
+                for (l = 0; l < 10; l++)
+                   comp1[i][j].a[k][l] = (l+j+k) * (l+j+k);
+           for (k = 0 ; k < 12; k++)
+               strcpy(comp1[i][j].s[k], "abcdefgh12345678abcdefgh12345678");
+      }
+
+  dataset = H5Dcreate(fid, "/comp1", f_type, space, H5P_DEFAULT);
+  H5Dwrite(dataset, f_type2, H5S_ALL, H5S_ALL, H5P_DEFAULT, comp1);
+
+  H5Tclose(f_type);
+  H5Tclose(f_type2);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  H5Fclose(fid);
+}
+
+/*
+                      /
+       /     /     |    \    \     \
+     g1     g2    g3    g4    g5    g6
+     |       |     |     |     \     \
+  string1       string3       string5
+         string2       string4       string6
+*/
+
+static void gent_str2(void)
+{
+hid_t fid, group, attr, dataset, space, space2, mem_space, hyper_space;
+hid_t fxdlenstr, fxdlenstr2, memtype;
+hsize_t dims[1], size[1], stride[1], count[1], block[1];
+hsize_t start[1];
+
+
+int i;
+char buf[LENSTR+10];
+char buf2[3*LENSTR2];
+hsize_t sdim;
+
+  fid = H5Fcreate(FILE14, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+  fxdlenstr = H5Tcopy(H5T_C_S1);
+  H5Tset_size(fxdlenstr, LENSTR);
+  H5Tset_cset(fxdlenstr, H5T_CSET_ASCII);
+  H5Tset_strpad(fxdlenstr, H5T_STR_NULLTERM);
+
+  memtype = H5Tcopy(H5T_C_S1);
+  H5Tset_size(memtype, LENSTR);
+  H5Tset_cset(memtype, H5T_CSET_ASCII);
+  H5Tset_strpad(memtype, H5T_STR_NULLTERM);
+
+  sdim = 10;
+  size[0] = sdim;
+  space = H5Screate_simple(1, size, NULL);
+  size[0] = 1;
+  mem_space = H5Screate_simple(1,size,NULL);
+  hyper_space = H5Scopy(space);
+
+  /* dset1 */
+
+  group = H5Gcreate (fid, "/g1", 0);
+  dataset = H5Dcreate(group, "dset1", fxdlenstr, space, H5P_DEFAULT);
+
+  /* add attributes to dset1 */
+
+  fxdlenstr2 = H5Tcopy(H5T_C_S1);
+  H5Tset_size(fxdlenstr2, LENSTR2);
+  H5Tset_cset(fxdlenstr2, H5T_CSET_ASCII);
+  H5Tset_strpad(fxdlenstr2, H5T_STR_NULLTERM);
+
+  dims[0] = 3;
+  space2 = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (dataset, "attr1", fxdlenstr2, space2, H5P_DEFAULT);
+  sprintf(&(buf2[0*LENSTR2]), "0123456789");
+  sprintf(&(buf2[1*LENSTR2]), "abcdefghij");
+  sprintf(&(buf2[2*LENSTR2]), "ABCDEFGHIJ");
+  H5Awrite(attr, fxdlenstr2, buf2);
+  H5Sclose(space2);
+  H5Tclose(fxdlenstr2);
+  H5Aclose(attr);
+
+  stride[0]=1;
+  count[0]=1;
+  block[0]=1;
+
+  for (i = 0; (hsize_t)i < sdim; i++) {
+ start[0] = i;
+ sprintf(buf,"This is row %1d of type H5T_STR_NULLTERM of",i);
+   H5Tset_size(memtype, HDstrlen(buf)+1);
+ H5Sselect_hyperslab(hyper_space, H5S_SELECT_SET, start, stride, count, block);
+   H5Dwrite(dataset, memtype, mem_space, hyper_space, H5P_DEFAULT, buf);
+  }
+  H5Dclose(dataset);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g2", 0);
+  dataset = H5Dcreate(group, "dset2", fxdlenstr, space, H5P_DEFAULT);
+
+  for (i = 0; (hsize_t)i < sdim; i++) {
+ start[0] = i;
+ sprintf(buf,"This is row %1d of type H5T_STR_NULLTERM of string array",i);
+   H5Tset_size(memtype, HDstrlen(buf)+1);
+ H5Sselect_hyperslab(hyper_space, H5S_SELECT_SET, start, stride, count, block);
+   H5Dwrite(dataset, memtype, mem_space, hyper_space, H5P_DEFAULT, buf);
+  }
+  H5Dclose(dataset);
+  H5Gclose(group);
+
+
+  H5Tclose(fxdlenstr);
+  fxdlenstr = H5Tcopy(H5T_C_S1);
+  H5Tset_size(fxdlenstr, LENSTR);
+  H5Tset_cset(fxdlenstr, H5T_CSET_ASCII);
+  H5Tset_strpad(fxdlenstr, H5T_STR_NULLPAD);
+
+  group = H5Gcreate (fid, "/g3", 0);
+  dataset = H5Dcreate(group, "dset3", fxdlenstr, space, H5P_DEFAULT);
+
+  for (i = 0;(hsize_t) i < sdim; i++) {
+ start[0] = i;
+ sprintf(buf,"This is row %1d of type H5T_STR_NULLPAD of",i);
+   H5Tset_size(memtype, HDstrlen(buf)+1);
+ H5Sselect_hyperslab(hyper_space, H5S_SELECT_SET, start, stride, count, block);
+   H5Dwrite(dataset, memtype, mem_space, hyper_space, H5P_DEFAULT, buf);
+  }
+  H5Dclose(dataset);
+  H5Gclose(group);
+
+
+  group = H5Gcreate (fid, "/g4", 0);
+  dataset = H5Dcreate(group, "dset4", fxdlenstr, space, H5P_DEFAULT);
+
+  for (i = 0; (hsize_t)i < sdim; i++) {
+ start[0] = i;
+ sprintf(buf,"This is row %1d of type H5T_STR_NULLPAD of string array",i);
+   H5Tset_size(memtype, HDstrlen(buf)+1);
+ H5Sselect_hyperslab(hyper_space, H5S_SELECT_SET, start, stride, count, block);
+   H5Dwrite(dataset, memtype, mem_space, hyper_space, H5P_DEFAULT, buf);
+  }
+  H5Dclose(dataset);
+  H5Gclose(group);
+
+  H5Tclose(fxdlenstr);
+  fxdlenstr = H5Tcopy(H5T_C_S1);
+  H5Tset_size(fxdlenstr, LENSTR);
+  H5Tset_cset(fxdlenstr, H5T_CSET_ASCII);
+  H5Tset_strpad(fxdlenstr, H5T_STR_SPACEPAD);
+
+  group = H5Gcreate (fid, "/g5", 0);
+  dataset = H5Dcreate(group, "dset5", fxdlenstr, space, H5P_DEFAULT);
+
+  for (i = 0; (hsize_t)i < sdim; i++) {
+ start[0] = i;
+ sprintf(buf,"This is row %1d of type H5T_STR_SPACEPAD of",i);
+   H5Tset_size(memtype, HDstrlen(buf)+1);
+ H5Sselect_hyperslab(hyper_space, H5S_SELECT_SET, start, stride, count, block);
+   H5Dwrite(dataset, memtype, mem_space, hyper_space, H5P_DEFAULT, buf);
+  }
+  H5Dclose(dataset);
+  H5Gclose(group);
+
+
+  group = H5Gcreate (fid, "/g6", 0);
+  dataset = H5Dcreate(group, "dset6", fxdlenstr, space, H5P_DEFAULT);
+
+  for (i = 0; (hsize_t)i < sdim; i++) {
+ start[0] = i;
+ sprintf(buf,"This is row %1d of type H5T_STR_SPACEPAD of string array",i);
+   H5Tset_size(memtype, HDstrlen(buf)+1);
+ H5Sselect_hyperslab(hyper_space, H5S_SELECT_SET, start, stride, count, block);
+   H5Dwrite(dataset, memtype, mem_space, hyper_space, H5P_DEFAULT, buf);
+  }
+
+  H5Dclose(dataset);
+  H5Gclose(group);
+  H5Tclose(fxdlenstr);
+  H5Tclose(memtype);
+  H5Sclose(mem_space);
+  H5Sclose(hyper_space);
+  H5Sclose(space);
+  H5Fclose(fid);
+}
+
+static void gent_enum(void)
+{
+    /*some code is taken from enum.c in the test dir */
+    hid_t file, type, space, dset;
+    int val;
+    enumtype data[] = {RED,   GREEN, BLUE,  GREEN, WHITE,
+         WHITE, BLACK, GREEN, BLUE,  RED,
+         RED,   BLUE,  GREEN, BLACK, WHITE,
+         RED,   WHITE, GREEN, GREEN, BLUE};
+    hsize_t size[1] = {NELMTS(data)};
+
+    file = H5Fcreate(FILE15,H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Try to test names with special characters */
+    type = H5Tcreate(H5T_ENUM, sizeof(enumtype));
+    H5Tenum_insert(type, "RED",   (val = 0, &val));
+    H5Tenum_insert(type, "GREEN\ngreen", (val = 1, &val));
+    H5Tenum_insert(type, "BLUE blue",  (val = 2, &val));
+    H5Tenum_insert(type, "WHITE \"white\"", (val = 3, &val));
+    H5Tenum_insert(type, "BLACK \'black\'", (val = 4, &val));
+    H5Tcommit(file, "enum normal", type);
+
+    space = H5Screate_simple(1,size,NULL);
+    dset = H5Dcreate(file,"table",type, space, H5P_DEFAULT);
+    H5Dwrite(dset,type,space,space,H5P_DEFAULT,data);
+
+    H5Dclose(dset);
+    H5Sclose(space);
+    H5Fclose(file);
+}
+
+static void gent_objref(void)
+{
+/*some code is taken from enum.c in the test dir */
+    hid_t  fid1;  /* HDF5 File IDs  */
+    hid_t  dataset; /* Dataset ID   */
+
+    hid_t  group;      /* Group ID             */
+    hid_t  sid1;       /* Dataspace ID   */
+    hid_t  tid1;       /* Datatype ID   */
+    hsize_t  dims1[] = {SPACE1_DIM1};
+    hobj_ref_t      *wbuf,      /* buffer to write to disk */
+               *rbuf,       /* buffer read from disk */
+               *tbuf;       /* temp. buffer read from disk */
+    uint32_t   *tu32;      /* Temporary pointer to uint32 data */
+    int        i;          /* counting variables */
+    const char *write_comment="Foo!"; /* Comments for group */
+
+    /* Allocate write & read buffers */
+    wbuf=malloc(sizeof(hobj_ref_t)*SPACE1_DIM1);
+    rbuf=malloc(sizeof(hobj_ref_t)*SPACE1_DIM1);
+    tbuf=malloc(sizeof(hobj_ref_t)*SPACE1_DIM1);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE16, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+
+    /* Create a group */
+    group=H5Gcreate(fid1,"Group1",(size_t)-1);
+
+    /* Set group's comment */
+    H5Gset_comment(group,".",write_comment);
+
+    /* Create a dataset (inside Group1) */
+    dataset=H5Dcreate(group,"Dataset1",H5T_STD_U32BE,sid1,H5P_DEFAULT);
+
+    for(tu32=(uint32_t *)((void*)wbuf),i=0; i<SPACE1_DIM1; i++)
+        *tu32++=i*3;
+
+    /* Write selection to disk */
+    H5Dwrite(dataset,H5T_NATIVE_UINT,H5S_ALL,H5S_ALL,H5P_DEFAULT,wbuf);
+
+    /* Close Dataset */
+    H5Dclose(dataset);
+
+    /* Create another dataset (inside Group1) */
+    dataset=H5Dcreate(group,"Dataset2",H5T_STD_U8BE,sid1,H5P_DEFAULT);
+
+    /* Close Dataset */
+    H5Dclose(dataset);
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tcreate (H5T_COMPOUND, sizeof(s1_t));
+
+    /* Insert fields */
+    H5Tinsert (tid1, "a", HOFFSET(s1_t,a), H5T_STD_I32BE);
+
+    H5Tinsert (tid1, "b", HOFFSET(s1_t,b), H5T_IEEE_F32BE);
+
+    H5Tinsert (tid1, "c", HOFFSET(s1_t,c), H5T_IEEE_F32BE);
+
+    /* Save datatype for later */
+    H5Tcommit (group, "Datatype1", tid1);
+
+    /* Close datatype */
+    H5Tclose(tid1);
+
+    /* Close group */
+    H5Gclose(group);
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset3",H5T_STD_REF_OBJ,sid1,H5P_DEFAULT);
+
+    /* Create reference to dataset */
+    H5Rcreate(&wbuf[0],fid1,"/Group1/Dataset1",H5R_OBJECT,-1);
+
+    /* Create reference to dataset */
+    H5Rcreate(&wbuf[1],fid1,"/Group1/Dataset2",H5R_OBJECT,-1);
+
+    /* Create reference to group */
+    H5Rcreate(&wbuf[2],fid1,"/Group1",H5R_OBJECT,-1);
+
+    /* Create reference to named datatype */
+    H5Rcreate(&wbuf[3],fid1,"/Group1/Datatype1",H5R_OBJECT,-1);
+
+    /* Write selection to disk */
+    H5Dwrite(dataset,H5T_STD_REF_OBJ,H5S_ALL,H5S_ALL,H5P_DEFAULT,wbuf);
+
+    /* Close disk dataspace */
+    H5Sclose(sid1);
+
+    /* Close Dataset */
+    H5Dclose(dataset);
+
+    /* Close file */
+    H5Fclose(fid1);
+
+    /* Free memory buffers */
+    free(wbuf);
+    free(rbuf);
+    free(tbuf);
+
+}
+
+static void gent_datareg(void)
+{
+    /*some code is taken from enum.c in the test dir */
+
+    hid_t  fid1;  /* HDF5 File IDs  */
+    hid_t  dset1, /* Dataset ID   */
+                dset2;      /* Dereferenced dataset ID */
+    hid_t  sid1,       /* Dataspace ID #1  */
+                sid2;       /* Dataspace ID #2  */
+    hsize_t  dims1[] = {SPACE1_DIM1},
+             dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+    hsize_t  start[SPACE2_RANK];     /* Starting location of hyperslab */
+    hsize_t  stride[SPACE2_RANK];    /* Stride of hyperslab */
+    hsize_t  count[SPACE2_RANK];     /* Element count of hyperslab */
+    hsize_t  block[SPACE2_RANK];     /* Block size of hyperslab */
+    hsize_t  coord1[POINT1_NPOINTS][SPACE2_RANK]; /* Coordinates for point selection */
+    hdset_reg_ref_t      *wbuf,      /* buffer to write to disk */
+               *rbuf;       /* buffer read from disk */
+    uint8_t    *dwbuf,      /* Buffer for writing numeric data to disk */
+               *drbuf;      /* Buffer for reading numeric data from disk */
+    uint8_t    *tu8;        /* Temporary pointer to uint8 data */
+    int        i;          /* counting variables */
+
+    /* Allocate write & read buffers */
+    wbuf=calloc(sizeof(hdset_reg_ref_t), SPACE1_DIM1);
+    rbuf=malloc(sizeof(hdset_reg_ref_t)*SPACE1_DIM1);
+    dwbuf=malloc(sizeof(uint8_t)*SPACE2_DIM1*SPACE2_DIM2);
+    drbuf=calloc(sizeof(uint8_t),SPACE2_DIM1*SPACE2_DIM2);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE17, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+
+    /* Create a dataset */
+    dset2=H5Dcreate(fid1,"Dataset2",H5T_STD_U8BE,sid2,H5P_DEFAULT);
+
+    for(tu8=dwbuf,i=0; i<SPACE2_DIM1*SPACE2_DIM2; i++)
+        *tu8++=i*3;
+
+    /* Write selection to disk */
+    H5Dwrite(dset2,H5T_NATIVE_UCHAR,H5S_ALL,H5S_ALL,H5P_DEFAULT,dwbuf);
+
+    /* Close Dataset */
+    H5Dclose(dset2);
+
+    /* Create dataspace for the reference dataset */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+
+    /* Create a dataset */
+    dset1=H5Dcreate(fid1,"Dataset1",H5T_STD_REF_DSETREG,sid1,H5P_DEFAULT);
+
+    /* Create references */
+
+    /* Select 6x6 hyperslab for first reference */
+    start[0]=2; start[1]=2;
+    stride[0]=1; stride[1]=1;
+    count[0]=6; count[1]=6;
+    block[0]=1; block[1]=1;
+    H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+
+    H5Sget_select_npoints(sid2);
+
+    /* Store first dataset region */
+    H5Rcreate(&wbuf[0],fid1,"/Dataset2",H5R_DATASET_REGION,sid2);
+
+    /* Select sequence of ten points for second reference */
+    coord1[0][0]=6; coord1[0][1]=9;
+    coord1[1][0]=2; coord1[1][1]=2;
+    coord1[2][0]=8; coord1[2][1]=4;
+    coord1[3][0]=1; coord1[3][1]=6;
+    coord1[4][0]=2; coord1[4][1]=8;
+    coord1[5][0]=3; coord1[5][1]=2;
+    coord1[6][0]=0; coord1[6][1]=4;
+    coord1[7][0]=9; coord1[7][1]=0;
+    coord1[8][0]=7; coord1[8][1]=1;
+    coord1[9][0]=3; coord1[9][1]=3;
+    H5Sselect_elements(sid2,H5S_SELECT_SET,POINT1_NPOINTS,(const hsize_t **)coord1);
+
+    H5Sget_select_npoints(sid2);
+
+    /* Store second dataset region */
+    H5Rcreate(&wbuf[1],fid1,"/Dataset2",H5R_DATASET_REGION,sid2);
+
+    /* Write selection to disk */
+    H5Dwrite(dset1,H5T_STD_REF_DSETREG,H5S_ALL,H5S_ALL,H5P_DEFAULT,wbuf);
+
+    /* Close disk dataspace */
+    H5Sclose(sid1);
+
+    /* Close Dataset */
+    H5Dclose(dset1);
+
+    /* Close uint8 dataset dataspace */
+    H5Sclose(sid2);
+
+    /* Close file */
+    H5Fclose(fid1);
+
+    /* Free memory buffers */
+    free(wbuf);
+    free(rbuf);
+    free(dwbuf);
+    free(drbuf);
+}
+
+/*taken from Elena's compound test file*/
+static void gent_nestcomp(void)
+{
+   /* Compound memeber of the compound datatype*/
+    typedef struct cmp_t {
+        char   a;
+        float  b[2];
+    } cmp_t;
+
+    /* First structure  and dataset*/
+    typedef struct s1_t {
+ int    a;
+ float  b;
+ double c;
+        cmp_t  d;
+    } s2_t;
+    hid_t      cmp_tid;    /* Handle for the compound datatype */
+    hid_t      char_id;    /* Handle for the string datatype */
+    hid_t      array_dt;
+    hsize_t     array_dims[] = {2};    /* Dataspace dimensions */
+    int        ndims = 1;    /* Number of dimensions in the array field */
+
+    s2_t       s1[10];
+    hid_t      s2_tid;     /* File datatype identifier */
+
+    int        i;
+    hid_t      file, dataset, space; /* Handles */
+    herr_t     status;
+    hsize_t    dim[] = {10};   /* Dataspace dimensions */
+
+    char datasetname[] = "ArrayOfStructures";
+
+
+    /*
+     * Initialize the data
+     */
+    for (i = 0; i< 10; i++) {
+        s1[i].a = i;
+        s1[i].b = (float)(i*i);
+        s1[i].c = 1./(i+1);
+        s1[i].d.a = 65 + i;
+        s1[i].d.b[0] = -100.;
+        s1[i].d.b[1] =  100.;
+    }
+
+    /*
+     * Create the data space.
+     */
+    space = H5Screate_simple(1, dim, NULL);
+
+    /*
+     * Create the file.
+     */
+    file = H5Fcreate(FILE18, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Create the memory data type.
+     */
+    /*
+     * Create a datatype for compound field first.
+     */
+    cmp_tid = H5Tcreate (H5T_COMPOUND, sizeof(cmp_t));
+
+    /* We are using C string of length one to represent "real" character */
+    char_id = H5Tcopy(H5T_C_S1);
+    H5Tset_strpad(char_id, H5T_STR_NULLTERM);
+    H5Tinsert(cmp_tid, "char_name", HOFFSET(cmp_t, a), char_id);
+
+    array_dt=H5Tarray_create(H5T_NATIVE_FLOAT,ndims,array_dims,NULL);
+    H5Tinsert(cmp_tid, "array_name", HOFFSET(cmp_t, b), array_dt);
+    H5Tclose(array_dt);
+
+    s2_tid = H5Tcreate (H5T_COMPOUND, sizeof(s2_t));
+    H5Tinsert(s2_tid, "a_name", HOFFSET(s2_t, a), H5T_NATIVE_INT);
+    H5Tinsert(s2_tid, "c_name", HOFFSET(s2_t, c), H5T_NATIVE_DOUBLE);
+    H5Tinsert(s2_tid, "b_name", HOFFSET(s2_t, b), H5T_NATIVE_FLOAT);
+
+    /* Insert compound memeber created above */
+    H5Tinsert(s2_tid, "d_name", HOFFSET(s2_t, d), cmp_tid);
+
+    /*
+     * Create the dataset.
+     */
+    dataset = H5Dcreate(file, datasetname, s2_tid, space, H5P_DEFAULT);
+
+    /*
+     * Wtite data to the dataset;
+     */
+    status = H5Dwrite(dataset, s2_tid, H5S_ALL, H5S_ALL, H5P_DEFAULT, s1);
+    if (status < 0)
+ fprintf(stderr, "gent_nestcomp H5Dwrite failed\n");
+
+    /*
+     * Release resources
+     */
+    H5Tclose(s2_tid);
+    H5Tclose(cmp_tid);
+    H5Tclose(char_id);
+    H5Sclose(space);
+    H5Dclose(dataset);
+    H5Fclose(file);
+}
+
+static void gent_opaque(void)
+{
+    hid_t file, type, dataset, space;
+    char test[100][2];
+    int x;
+    hsize_t dim = 2;
+
+    for (x = 0; x < 100; x++){
+        test[x][0] = x;
+        test[x][1] = 99 - x;
+    }
+
+    /*
+     * Create the data space.
+     */
+    space = H5Screate_simple(1, &dim, NULL);
+
+    /*
+     * Create the file.
+     */
+    file = H5Fcreate(FILE19, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*
+     * Create the memory datatype.
+     */
+    type = H5Tcreate (H5T_OPAQUE, sizeof(char)*100*2);
+    H5Tset_tag(type, "test opaque type");
+
+    /*
+     * Create the dataset.
+     */
+    dataset = H5Dcreate(file, "opaque test", type, space, H5P_DEFAULT);
+
+    /*
+     * Write data to the dataset;
+     */
+    H5Dwrite(dataset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, test);
+
+    H5Tclose(type);
+    H5Sclose(space);
+    H5Dclose(dataset);
+    H5Fclose(file);
+}
+
+static void gent_bitfields(void)
+{
+    hid_t  file, grp=-1, type=-1, space=-1, dset=-1;
+    size_t  i;
+    hsize_t  nelmts;
+    unsigned char buf[32];
+
+    file = H5Fcreate(FILE20, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    if ((grp=H5Gcreate(file, "typetests", 0))<0) goto error;
+
+    /* bitfield_1 */
+    nelmts = sizeof(buf);
+    if ((type=H5Tcopy(H5T_STD_B8LE))<0 ||
+ (space=H5Screate_simple(1, &nelmts, NULL))<0 ||
+ (dset=H5Dcreate(grp, "bitfield_1", type, space, H5P_DEFAULT))<0)
+ goto error;
+
+    for (i=0; i<sizeof buf; i++) buf[i] = (unsigned char)0xff ^ (unsigned char)i;
+    if (H5Dwrite(dset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf)<0)
+ goto error;
+    if (H5Sclose(space)<0) goto error;
+    if (H5Tclose(type)<0) goto error;
+    if (H5Dclose(dset)<0) goto error;
+
+    /* bitfield_2 */
+    nelmts = sizeof(buf)/2;
+    if ((type=H5Tcopy(H5T_STD_B16LE))<0 ||
+ (space=H5Screate_simple(1, &nelmts, NULL))<0 ||
+ (dset=H5Dcreate(grp, "bitfield_2", type, space, H5P_DEFAULT))<0)
+ goto error;
+    for (i=0; i<sizeof buf; i++) buf[i] = (unsigned char)0xff ^ (unsigned char)i;
+    if (H5Dwrite(dset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf)<0)
+ goto error;
+    if (H5Sclose(space)<0) goto error;
+    if (H5Tclose(type)<0) goto error;
+    if (H5Dclose(dset)<0) goto error;
+    if (H5Gclose(grp)<0) goto error;
+    H5Fclose(file);
+
+ error:
+    H5E_BEGIN_TRY {
+ H5Gclose(grp);
+ H5Tclose(type);
+ H5Sclose(space);
+ H5Dclose(dset);
+    } H5E_END_TRY;
+}
+
+static void gent_vldatatypes(void)
+{
+    hvl_t adata, wdata[SPACE1_DIM1];
+    hid_t file, dset, space, type;
+    hsize_t dims[] = { SPACE1_DIM1 };
+    int i;
+    herr_t ret=0;
+
+    file = H5Fcreate(FILE21, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Allocate and initialize VL dataset to write */
+    for(i = 0; i < SPACE1_DIM1; i++) {
+ int j;
+
+        wdata[i].p = malloc((i + 1) * sizeof(int));
+        wdata[i].len = i + 1;
+
+        for (j = 0; j < i + 1; j++)
+            ((int *)wdata[i].p)[j] = i * 10 + j;
+    }
+
+    /* write out the integers in little-endian format */
+    space = H5Screate_simple(SPACE1_RANK, dims, NULL);
+    type = H5Tvlen_create(H5T_NATIVE_INT);
+    dset = H5Dcreate(file, "Dataset1.0", type, space, H5P_DEFAULT);
+    ret = H5Dwrite(dset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+    assert(ret>=0);
+    ret = H5Dvlen_reclaim(type, space, H5P_DEFAULT, wdata);
+    assert(ret>=0);
+
+    ret = H5Dclose(dset);
+    assert(ret>=0);
+    ret = H5Tclose(type);
+    assert(ret>=0);
+    ret = H5Sclose(space);
+    assert(ret>=0);
+
+    /* Allocate and initialize VL dataset to write */
+    for(i = 0; i < SPACE1_DIM1; i++) {
+ int j;
+
+        wdata[i].p = malloc((i + 1) * sizeof(float));
+        wdata[i].len = i + 1;
+
+        for (j = 0; j < i + 1; j++)
+            ((float *)wdata[i].p)[j] = (float)(i * 10 + ((float)j) / 10.0);
+    }
+
+    /* write out the floats in little-endian format */
+    space = H5Screate_simple(SPACE1_RANK, dims, NULL);
+    type = H5Tvlen_create(H5T_NATIVE_FLOAT);
+    dset = H5Dcreate(file, "Dataset2.0", type, space, H5P_DEFAULT);
+    ret = H5Dwrite(dset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+    assert(ret>=0);
+    ret = H5Dvlen_reclaim(type, space, H5P_DEFAULT, wdata);
+    assert(ret>=0);
+
+    ret = H5Dclose(dset);
+    assert(ret>=0);
+    ret = H5Tclose(type);
+    assert(ret>=0);
+    ret = H5Sclose(space);
+    assert(ret>=0);
+
+    /* Allocate and initialize a scalar VL dataset to write */
+    adata.p = malloc(37 * sizeof(int));
+    adata.len = 37;
+
+    for (i = 0; i < 37; i++)
+        ((int *)adata.p)[i] = i * 2;
+
+    /* write out scalar VL dataset in little-endian format */
+    space = H5Screate_simple(0, NULL, NULL);
+    type = H5Tvlen_create(H5T_NATIVE_INT);
+    dset = H5Dcreate(file, "Dataset3.0", type, space, H5P_DEFAULT);
+    ret = H5Dwrite(dset, type, H5S_ALL, H5S_ALL, H5P_DEFAULT, &adata);
+    assert(ret>=0);
+    ret = H5Dvlen_reclaim(type, space, H5P_DEFAULT, &adata);
+    assert(ret>=0);
+
+    ret = H5Dclose(dset);
+    assert(ret>=0);
+    ret = H5Tclose(type);
+    assert(ret>=0);
+    ret = H5Sclose(space);
+    assert(ret>=0);
+    ret = H5Fclose(file);
+    assert(ret>=0);
+}
+
+static void gent_vldatatypes2(void)
+{
+    hvl_t wdata[SPACE1_DIM1];   /* Information to write */
+    hvl_t *t1;              /* Temporary pointer to VL information */
+    hid_t  fid1;  /* HDF5 File IDs  */
+    hid_t  dataset; /* Dataset ID   */
+    hid_t  sid1;       /* Dataspace ID   */
+    hid_t  tid1, tid2; /* Datatype IDs         */
+    hsize_t  dims1[] = {SPACE1_DIM1};
+    unsigned       i,j,k;      /* counting variables */
+    herr_t  ret;  /* Generic return value  */
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        wdata[i].p=malloc((i+1)*sizeof(hvl_t));
+        if(wdata[i].p==NULL) {
+            printf("Cannot allocate memory for VL data! i=%u\n",i);
+            return;
+        } /* end if */
+        wdata[i].len=i+1;
+        for(t1=wdata[i].p,j=0; j<(i+1); j++, t1++) {
+            t1->p=malloc((j+1)*sizeof(unsigned int));
+            if(t1->p==NULL) {
+                printf("Cannot allocate memory for VL data! i=%u, j=%u\n",i,j);
+                return;
+            } /* end if */
+            t1->len=j+1;
+            for(k=0; k<(j+1); k++)
+                ((unsigned int *)t1->p)[k]=i*100+j*10+k;
+        } /* end for */
+    } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE22, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+
+    /* Create a VL datatype to refer to */
+    tid1 = H5Tvlen_create (H5T_NATIVE_UINT);
+
+    /* Create the base VL type */
+    tid2 = H5Tvlen_create (tid1);
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid2,sid1,H5P_DEFAULT);
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid2,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    assert(ret>=0);
+    ret = H5Tclose(tid2);
+    assert(ret>=0);
+    ret = H5Tclose(tid1);
+    assert(ret>=0);
+    ret = H5Sclose(sid1);
+    assert(ret>=0);
+    ret = H5Fclose(fid1);
+    assert(ret>=0);
+
+}
+
+static void gent_vldatatypes3(void)
+{
+    typedef struct {             /* Struct that the VL sequences are composed of */
+        int i;
+        float f;
+        hvl_t v;
+    } s1;
+    s1 wdata[SPACE1_DIM1];   /* Information to write */
+    hid_t  fid1;  /* HDF5 File IDs  */
+    hid_t  dataset; /* Dataset ID   */
+    hid_t  sid1;       /* Dataspace ID   */
+    hid_t  tid1, tid2; /* Datatype IDs         */
+    hsize_t  dims1[] = {SPACE1_DIM1};
+    unsigned       i,j;        /* counting variables */
+    herr_t  ret;  /* Generic return value  */
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        wdata[i].i=i*10;
+        wdata[i].f=(float)((i*20)/3.0);
+        wdata[i].v.p=malloc((i+1)*sizeof(unsigned int));
+        wdata[i].v.len=i+1;
+        for(j=0; j<(i+1); j++)
+            ((unsigned int *)wdata[i].v.p)[j]=i*10+j;
+    } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE23, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+
+    /* Create a VL datatype to refer to */
+    tid1 = H5Tvlen_create (H5T_NATIVE_UINT);
+
+    /* Create the base compound type */
+    tid2 = H5Tcreate(H5T_COMPOUND, sizeof(s1));
+
+    /* Insert fields */
+    ret=H5Tinsert(tid2, "i", HOFFSET(s1, i), H5T_NATIVE_INT);
+    assert(ret>=0);
+    ret=H5Tinsert(tid2, "f", HOFFSET(s1, f), H5T_NATIVE_FLOAT);
+    assert(ret>=0);
+    ret=H5Tinsert(tid2, "v", HOFFSET(s1, v), tid1);
+    assert(ret>=0);
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid2,sid1,H5P_DEFAULT);
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid2,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid2,sid1,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    assert(ret>=0);
+    ret = H5Tclose(tid2);
+    assert(ret>=0);
+    ret = H5Tclose(tid1);
+    assert(ret>=0);
+    ret = H5Sclose(sid1);
+    assert(ret>=0);
+    ret = H5Fclose(fid1);
+    assert(ret>=0);
+}
+
+static void gent_vldatatypes4(void)
+{
+    typedef struct {             /* Struct that the VL sequences are composed of */
+        int i;
+        float f;
+    } s1;
+    hvl_t wdata[SPACE1_DIM1];   /* Information to write */
+    hid_t  fid1;  /* HDF5 File IDs  */
+    hid_t  dataset; /* Dataset ID   */
+    hid_t  sid1;       /* Dataspace ID   */
+    hid_t  tid1, tid2; /* Datatype IDs         */
+    hsize_t  dims1[] = {SPACE1_DIM1};
+    unsigned       i,j;        /* counting variables */
+    herr_t  ret;  /* Generic return value  */
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        wdata[i].p=malloc((i+1)*sizeof(s1));
+        wdata[i].len=i+1;
+        for(j=0; j<(i+1); j++) {
+            ((s1 *)wdata[i].p)[j].i=i*10+j;
+            ((s1 *)wdata[i].p)[j].f=(float)((i*20+j)/3.0);
+          } /* end for */
+    } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE24, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+
+    /* Create the base compound type */
+    tid2 = H5Tcreate(H5T_COMPOUND, sizeof(s1));
+
+    /* Insert fields */
+    ret=H5Tinsert(tid2, "i", HOFFSET(s1, i), H5T_NATIVE_INT);
+    assert(ret>=0);
+    ret=H5Tinsert(tid2, "f", HOFFSET(s1, f), H5T_NATIVE_FLOAT);
+    assert(ret>=0);
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tvlen_create (tid2);
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    assert(ret>=0);
+    ret = H5Tclose(tid1);
+    assert(ret>=0);
+    ret = H5Tclose(tid2);
+    assert(ret>=0);
+    ret = H5Sclose(sid1);
+    assert(ret>=0);
+    ret = H5Fclose(fid1);
+    assert(ret>=0);
+}
+
+/* Generate a variable-length dataset with NULL values in it */
+static void gent_vldatatypes5(void)
+{
+    hvl_t wdata [SPACE1_DIM1];
+    hid_t  fid1;
+    hid_t  dataset;
+    hid_t  sid1;
+    hid_t  tid1;
+    hsize_t  dims1[] = {SPACE1_DIM1};
+    int                 i,j;          /* counting variable */
+    herr_t  ret;  /* Generic return value  */
+
+    /* initialize data for dataset */
+    for(i=0; i<SPACE1_DIM1; i++) {
+        if(i%2) {
+            wdata[i].len=0;
+            wdata[i].p=NULL;
+        } /* end if */
+        else {
+            wdata[i].len=i+5;
+            wdata[i].p=malloc(sizeof(unsigned)*(i+5));
+            for(j=0; j<i+5; j++)
+                ((unsigned *)wdata[i].p)[j]=j*2;
+        } /* end else */
+    } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate (FILE43, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    assert(fid1>0);
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple (SPACE1_RANK, dims1, NULL);
+    assert(sid1>0);
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tvlen_create (H5T_NATIVE_UINT);
+    assert(tid1>0);
+
+    /* Create a dataset */
+    dataset = H5Dcreate (fid1, F43_DSETNAME, tid1, sid1, H5P_DEFAULT);
+    assert(dataset>0);
+
+    ret = H5Dwrite (dataset, tid1, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+    assert(ret>=0);
+
+    ret = H5Dclose (dataset);
+    assert(ret>=0);
+
+    ret = H5Dvlen_reclaim (tid1, sid1, H5P_DEFAULT, wdata);
+    assert(ret>=0);
+
+    ret = H5Tclose (tid1);
+    assert(ret>=0);
+
+    ret = H5Sclose (sid1);
+    assert(ret>=0);
+
+    ret = H5Fclose (fid1);
+    assert(ret>=0);
+}
+
+static void gent_array1(void)
+{
+    int wdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information to write */
+    hid_t  fid1;  /* HDF5 File IDs  */
+    hid_t  dataset; /* Dataset ID   */
+    hid_t  sid1;       /* Dataspace ID   */
+    hid_t  tid1;       /* Datatype ID   */
+    hsize_t  sdims1[] = {SPACE1_DIM1};
+    hsize_t  tdims1[] = {ARRAY1_DIM1};
+    int        i,j;        /* counting variables */
+    herr_t  ret;  /* Generic return value  */
+
+    /* Allocate and initialize array data to write */
+    for(i=0; i<SPACE1_DIM1; i++)
+        for(j=0; j<ARRAY1_DIM1; j++)
+            wdata[i][j]=i*10+j;
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE25, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
+
+    /* Create a datatype to refer to */
+    tid1 = H5Tarray_create (H5T_NATIVE_INT,ARRAY1_RANK,tdims1,NULL);
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    assert(ret>=0);
+    ret = H5Tclose(tid1);
+    assert(ret>=0);
+    ret = H5Sclose(sid1);
+    assert(ret>=0);
+    ret = H5Fclose(fid1);
+    assert(ret>=0);
+}
+
+static void gent_array2(void)
+{
+    int wdata[SPACE1_DIM1][ARRAY2_DIM1][ARRAY2_DIM2][ARRAY2_DIM3];   /* Information to write */
+    hid_t  fid;        /* HDF5 File IDs  */
+    hid_t  dataset; /* Dataset ID   */
+    hid_t  sid;        /* Dataspace ID   */
+    hid_t  tid;        /* Datatype ID   */
+    hsize_t  sdims1[] = {SPACE1_DIM1};
+    hsize_t  tdims2[] = {ARRAY2_DIM1,ARRAY2_DIM2,ARRAY2_DIM3};
+    int        i,j,k,l;    /* counting variables */
+    herr_t  ret;  /* Generic return value  */
+
+    /* Allocate and initialize array data to write */
+    for(i=0; i<SPACE1_DIM1; i++)
+        for(j=0; j<ARRAY2_DIM1; j++)
+            for(k=0; k<ARRAY2_DIM2; k++)
+                for(l=0; l<ARRAY2_DIM3; l++)
+                    wdata[i][j][k][l]=i*1000+j*100+k*10+l;
+
+    /* Create file */
+    fid = H5Fcreate(FILE26, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
+
+    /* Create a datatype to refer to */
+    tid = H5Tarray_create (H5T_NATIVE_INT,ARRAY2_RANK,tdims2,NULL);
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid,"Dataset1",tid,sid,H5P_DEFAULT);
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    assert(ret>=0);
+    ret = H5Tclose(tid);
+    assert(ret>=0);
+    ret = H5Sclose(sid);
+    assert(ret>=0);
+    ret = H5Fclose(fid);
+    assert(ret>=0);
+}
+
+static void gent_array3(void)
+{
+    int wdata[SPACE1_DIM1][ARRAY1_DIM1][ARRAY3_DIM1][ARRAY3_DIM2];   /* Information to write */
+    hid_t  fid;        /* HDF5 File IDs  */
+    hid_t  dataset; /* Dataset ID   */
+    hid_t  sid;        /* Dataspace ID   */
+    hid_t  tid1;       /* 1-D array Datatype ID */
+    hid_t  tid2;       /* 2-D array Datatype ID */
+    hsize_t  sdims1[] = {SPACE1_DIM1};
+    hsize_t  tdims1[] = {ARRAY1_DIM1};
+    hsize_t  tdims2[] = {ARRAY3_DIM1,ARRAY3_DIM2};
+    int        i,j,k,l;    /* counting variables */
+    herr_t  ret;  /* Generic return value  */
+
+    /* Allocate and initialize array data to write */
+    for(i=0; i<SPACE1_DIM1; i++)
+        for(j=0; j<ARRAY1_DIM1; j++)
+            for(k=0; k<ARRAY3_DIM1; k++)
+                for(l=0; l<ARRAY3_DIM2; l++)
+                    wdata[i][j][k][l]=i*1000+j*100+k*10+l;
+
+    /* Create file */
+    fid = H5Fcreate(FILE27, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
+
+    /* Create a 2-D datatype to refer to */
+    tid2 = H5Tarray_create (H5T_NATIVE_INT,ARRAY3_RANK,tdims2,NULL);
+
+    /* Create a 1-D datatype to refer to */
+    tid1 = H5Tarray_create (tid2,ARRAY1_RANK,tdims1,NULL);
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid,"Dataset1",tid1,sid,H5P_DEFAULT);
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    assert(ret>=0);
+    ret = H5Tclose(tid1);
+    assert(ret>=0);
+    ret = H5Tclose(tid2);
+    assert(ret>=0);
+    ret = H5Sclose(sid);
+    assert(ret>=0);
+    ret = H5Fclose(fid);
+    assert(ret>=0);
+}
+
+static void gent_array4(void)
+{
+    typedef struct {        /* Typedef for compound datatype */
+        int i;
+        float f;
+    } s2_t;
+    s2_t wdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information to write */
+    hid_t  fid1;  /* HDF5 File IDs  */
+    hid_t  dataset; /* Dataset ID   */
+    hid_t  sid1;       /* Dataspace ID   */
+    hid_t  tid1;       /* Array Datatype ID   */
+    hid_t  tid2;       /* Compound Datatype ID   */
+    hsize_t  sdims1[] = {SPACE1_DIM1};
+    hsize_t  tdims1[] = {ARRAY1_DIM1};
+    int        i,j;        /* counting variables */
+    herr_t  ret;  /* Generic return value  */
+
+    /* Initialize array data to write */
+    for(i=0; i<SPACE1_DIM1; i++)
+        for(j=0; j<ARRAY1_DIM1; j++) {
+            wdata[i][j].i=i*10+j;
+            wdata[i][j].f=(float)(i*2.5+j);
+        } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE28, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
+
+    /* Create a compound datatype to refer to */
+    tid2 = H5Tcreate(H5T_COMPOUND, sizeof(s2_t));
+
+    /* Insert integer field */
+    ret = H5Tinsert (tid2, "i", HOFFSET(s2_t,i), H5T_NATIVE_INT);
+    assert(ret>=0);
+
+    /* Insert float field */
+    ret = H5Tinsert (tid2, "f", HOFFSET(s2_t,f), H5T_NATIVE_FLOAT);
+    assert(ret>=0);
+
+    /* Create an array datatype to refer to */
+    tid1 = H5Tarray_create (tid2,ARRAY1_RANK,tdims1,NULL);
+
+    /* Close compound datatype */
+    ret=H5Tclose(tid2);
+    assert(ret>=0);
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    assert(ret>=0);
+    ret = H5Tclose(tid1);
+    assert(ret>=0);
+    ret = H5Sclose(sid1);
+    assert(ret>=0);
+    ret = H5Fclose(fid1);
+    assert(ret>=0);
+}
+
+static void gent_array5(void)
+{
+    typedef struct {        /* Typedef for compound datatype */
+        int i;
+        float f[ARRAY1_DIM1];
+    } s2_t;
+    s2_t wdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information to write */
+    hid_t  fid1;  /* HDF5 File IDs  */
+    hid_t  dataset; /* Dataset ID   */
+    hid_t  sid1;       /* Dataspace ID   */
+    hid_t  tid1;       /* Array Datatype ID */
+    hid_t  tid2;       /* Compound Datatype ID */
+    hid_t  tid3;       /* Nested Array Datatype ID */
+    hsize_t  sdims1[] = {SPACE1_DIM1};
+    hsize_t  tdims1[] = {ARRAY1_DIM1};
+    int        i,j,k;      /* counting variables */
+    herr_t  ret;  /* Generic return value  */
+
+    /* Initialize array data to write */
+    for(i=0; i<SPACE1_DIM1; i++)
+        for(j=0; j<ARRAY1_DIM1; j++) {
+            wdata[i][j].i=i*10+j;
+            for(k=0; k<ARRAY1_DIM1; k++)
+                wdata[i][j].f[k]=(float)(i*10+j*2.5+k);
+        } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE29, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
+
+    /* Create a compound datatype to refer to */
+    tid2 = H5Tcreate(H5T_COMPOUND, sizeof(s2_t));
+
+    /* Insert integer field */
+    ret = H5Tinsert (tid2, "i", HOFFSET(s2_t,i), H5T_NATIVE_INT);
+    assert(ret>=0);
+
+    /* Create an array of floats datatype */
+    tid3 = H5Tarray_create (H5T_NATIVE_FLOAT,ARRAY1_RANK,tdims1,NULL);
+
+    /* Insert float array field */
+    ret = H5Tinsert (tid2, "f", HOFFSET(s2_t,f), tid3);
+    assert(ret>=0);
+
+    /* Close array of floats field datatype */
+    ret=H5Tclose(tid3);
+    assert(ret>=0);
+
+    /* Create an array datatype to refer to */
+    tid1 = H5Tarray_create (tid2,ARRAY1_RANK,tdims1,NULL);
+
+    /* Close compound datatype */
+    ret=H5Tclose(tid2);
+    assert(ret>=0);
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    assert(ret>=0);
+    ret = H5Tclose(tid1);
+    assert(ret>=0);
+    ret = H5Sclose(sid1);
+    assert(ret>=0);
+    ret = H5Fclose(fid1);
+    assert(ret>=0);
+}
+
+static void gent_array6(void)
+{
+    hvl_t wdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information to write */
+    hid_t  fid1;  /* HDF5 File IDs  */
+    hid_t  dataset; /* Dataset ID   */
+    hid_t  sid1;       /* Dataspace ID   */
+    hid_t  tid1;       /* Array Datatype ID   */
+    hid_t  tid2;       /* VL Datatype ID       */
+    hsize_t  sdims1[] = {SPACE1_DIM1};
+    hsize_t  tdims1[] = {ARRAY1_DIM1};
+    int        i,j,k;      /* counting variables */
+    herr_t  ret;  /* Generic return value  */
+
+    /* Initialize array data to write */
+    for(i=0; i<SPACE1_DIM1; i++)
+        for(j=0; j<ARRAY1_DIM1; j++) {
+            wdata[i][j].p=malloc((i+j+1)*sizeof(unsigned int));
+            wdata[i][j].len=i+j+1;
+            for(k=0; k<(i+j+1); k++)
+                ((unsigned int *)wdata[i][j].p)[k]=i*100+j*10+k;
+        } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE30, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
+
+    /* Create a compound datatype to refer to */
+    tid2 = H5Tvlen_create(H5T_NATIVE_UINT);
+
+    /* Create an array datatype to refer to */
+    tid1 = H5Tarray_create (tid2,ARRAY1_RANK,tdims1,NULL);
+
+    /* Close VL datatype */
+    ret=H5Tclose(tid2);
+    assert(ret>=0);
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    assert(ret>=0);
+    ret = H5Tclose(tid1);
+    assert(ret>=0);
+    ret = H5Sclose(sid1);
+    assert(ret>=0);
+    ret = H5Fclose(fid1);
+    assert(ret>=0);
+}
+
+static void gent_array7(void)
+{
+    hvl_t wdata[SPACE1_DIM1][ARRAY1_DIM1];   /* Information to write */
+    hid_t  fid1;  /* HDF5 File IDs  */
+    hid_t  dataset; /* Dataset ID   */
+    hid_t  sid1;       /* Dataspace ID   */
+    hid_t  tid1;       /* Array Datatype ID   */
+    hid_t  tid2;       /* VL Datatype ID       */
+    hid_t  tid3;       /* Nested Array Datatype ID   */
+    hsize_t  sdims1[] = {SPACE1_DIM1};
+    hsize_t  tdims1[] = {ARRAY1_DIM1};
+    int        i,j,k,l;    /* Index variables */
+    herr_t  ret;  /* Generic return value  */
+
+    /* Initialize array data to write */
+    for(i=0; i<SPACE1_DIM1; i++)
+        for(j=0; j<ARRAY1_DIM1; j++) {
+            wdata[i][j].p=malloc((i+j+1)*(sizeof(unsigned int)*ARRAY1_DIM1));
+            wdata[i][j].len=i+j+1;
+            for(k=0; k<(i+j+1); k++)
+                for(l=0; l<ARRAY1_DIM1; l++)
+                    ((unsigned int *)wdata[i][j].p)[k*ARRAY1_DIM1+l]=i*1000+j*100+k*10+l;
+        } /* end for */
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE31, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid1 = H5Screate_simple(SPACE1_RANK, sdims1, NULL);
+
+    /* Create the nested array datatype to refer to */
+    tid3 = H5Tarray_create(H5T_NATIVE_UINT,ARRAY1_RANK,tdims1,NULL);
+
+    /* Create a VL datatype of 1-D arrays to refer to */
+    tid2 = H5Tvlen_create(tid3);
+
+    /* Close nested array datatype */
+    ret=H5Tclose(tid3);
+    assert(ret>=0);
+
+    /* Create an array datatype to refer to */
+    tid1 = H5Tarray_create (tid2,ARRAY1_RANK,tdims1,NULL);
+
+    /* Close VL datatype */
+    ret=H5Tclose(tid2);
+    assert(ret>=0);
+
+    /* Create a dataset */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+
+    /* Write dataset to disk */
+    ret=H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Reclaim the write VL data */
+    ret=H5Dvlen_reclaim(tid1,sid1,H5P_DEFAULT,wdata);
+    assert(ret>=0);
+
+    /* Close Dataset */
+    ret = H5Dclose(dataset);
+    assert(ret>=0);
+    ret = H5Tclose(tid1);
+    assert(ret>=0);
+    ret = H5Sclose(sid1);
+    assert(ret>=0);
+    ret = H5Fclose(fid1);
+    assert(ret>=0);
+}
+
+static void gent_empty(void)
+{
+    typedef struct {
+        int a;
+        float b;
+        char c;
+    } empty_struct;
+    hid_t file, dset, space, type;
+    hsize_t dims[] = { SPACE1_DIM1 };
+    herr_t ret=0;
+
+    file = H5Fcreate(FILE32, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    space = H5Screate_simple(SPACE1_RANK, dims, NULL);
+
+    /* write out an empty vlen dataset */
+    type = H5Tvlen_create(H5T_NATIVE_INT);
+    dset = H5Dcreate(file, "Dataset1.0", type, space, H5P_DEFAULT);
+    /* Don't write any data */
+    ret = H5Dclose(dset);
+    assert(ret>=0);
+    ret = H5Tclose(type);
+    assert(ret>=0);
+
+    /* write out an empty native integer dataset dataset */
+    dset = H5Dcreate(file, "Dataset2.0", H5T_NATIVE_INT, space, H5P_DEFAULT);
+    /* Don't write any data */
+    ret = H5Dclose(dset);
+    assert(ret>=0);
+
+    /* write out an empty native floating-point dataset dataset */
+    dset = H5Dcreate(file, "Dataset3.0", H5T_NATIVE_FLOAT, space, H5P_DEFAULT);
+    /* Don't write any data */
+    ret = H5Dclose(dset);
+    assert(ret>=0);
+
+    /* write out an empty array dataset */
+    type = H5Tarray_create(H5T_NATIVE_INT,SPACE1_RANK,dims,NULL);
+    dset = H5Dcreate(file, "Dataset4.0", type, space, H5P_DEFAULT);
+    /* Don't write any data */
+    ret = H5Dclose(dset);
+    assert(ret>=0);
+    ret = H5Tclose(type);
+    assert(ret>=0);
+
+    /* write out an empty compound dataset */
+    type = H5Tcreate(H5T_COMPOUND,sizeof(empty_struct));
+    H5Tinsert(type, "a", HOFFSET(empty_struct, a),H5T_NATIVE_INT);
+    H5Tinsert(type, "b", HOFFSET(empty_struct, b),H5T_NATIVE_FLOAT);
+    H5Tinsert(type, "c", HOFFSET(empty_struct, c),H5T_NATIVE_CHAR);
+    dset = H5Dcreate(file, "Dataset5.0", type, space, H5P_DEFAULT);
+    /* Don't write any data */
+    ret = H5Dclose(dset);
+    assert(ret>=0);
+    ret = H5Tclose(type);
+    assert(ret>=0);
+
+    ret = H5Sclose(space);
+    assert(ret>=0);
+
+    ret = H5Fclose(file);
+    assert(ret>=0);
+}
+
+static void gent_group_comments(void)
+{
+    hid_t fid, group;
+
+    fid = H5Fcreate(FILE33, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* / */
+    group = H5Gcreate (fid, "/g1", 0);
+    H5Gset_comment(group, "/g1", "Comment for group /g1");
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g2", 0);
+    H5Gset_comment(group, "/g2", "Comment for group /g2");
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g3", 0);
+    H5Gset_comment(group, "/g3", "Comment for group /g3");
+    H5Gclose(group);
+
+    /* /g1 */
+    group = H5Gcreate (fid, "/g1/g1.1", 0);
+    H5Gset_comment(group, "/g1/g1.1", "Comment for group /g1/g1.1");
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g1/g1.2", 0);
+    H5Gset_comment(group, "/g1/g1.2", "Comment for group /g1/g1.2");
+    H5Gclose(group);
+
+    /* /g2 */
+    group = H5Gcreate (fid, "/g2/g2.1", 0);
+    H5Gset_comment(group, "/g2/g2.1", "Comment for group /g2/g2.1");
+    H5Gclose(group);
+
+    /* /g3 */
+    group = H5Gcreate (fid, "/g3/g3.1", 0);
+    H5Gset_comment(group, "/g3/g3.1", "Comment for group /g3/g3.1");
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g3/g3.2", 0);
+    H5Gset_comment(group, "/g3/g3.2", "Comment for group /g3/g3.2");
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g3/g3.3", 0);
+    H5Gset_comment(group, "/g3/g3.3", "Comment for group /g3/g3.3");
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g3/g3.4", 0);
+    H5Gset_comment(group, "/g3/g3.4", "Comment for group /g3/g3.4");
+    H5Gclose(group);
+
+    /* /g2/g2.1 */
+    group = H5Gcreate (fid, "/g2/g2.1/g2.1.1", 0);
+    H5Gset_comment(group, "/g2/g2.1/g2.1.1", "Comment for group /g2/g2.1/g2.1.1");
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g2/g2.1/g2.1.2", 0);
+    H5Gset_comment(group, "/g2/g2.1/g2.1.2", "Comment for group /g2/g2.1/g2.1.2");
+    H5Gclose(group);
+    group = H5Gcreate (fid, "/g2/g2.1/g2.1.3", 0);
+    H5Gset_comment(group, "/g2/g2.1/g2.1.3", "Comment for group /g2/g2.1/g2.1.3");
+    H5Gclose(group);
+
+    H5Fclose(fid);
+}
+
+static
+void gent_split_file(void)
+{
+    hid_t fapl, fid, root, attr, space, dataset, atype;
+    char meta[] = "this is some metadata on this file";
+    hsize_t dims[2];
+    int i, j, dset[10][15];
+
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+    H5Pset_fapl_split(fapl, "-m.h5", H5P_DEFAULT, "-r.h5", H5P_DEFAULT);
+    fid = H5Fcreate(FILE34, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+    root = H5Gopen(fid, "/");
+
+    atype = H5Tcopy(H5T_C_S1);
+    H5Tset_size(atype, strlen(meta) + 1);
+    H5Tset_strpad(atype, H5T_STR_NULLTERM);
+
+    dims[0] = 1;
+    space = H5Screate_simple(1, dims, NULL);
+    attr = H5Acreate(root, "Metadata", atype, space, H5P_DEFAULT);
+    H5Awrite(attr, atype, meta);
+    H5Tclose(atype);
+    H5Sclose(space);
+    H5Aclose(attr);
+
+    /* create dataset */
+    dims[0] = 10;
+    dims[1] = 15;
+    space = H5Screate_simple(2, dims, NULL);
+    dataset = H5Dcreate(fid, "/dset1", H5T_STD_I32BE, space, H5P_DEFAULT);
+
+    for (i = 0; i < 10; i++)
+         for (j = 0; j < 15; j++)
+              dset[i][j] = i + j;
+
+    H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset);
+    H5Sclose(space);
+    H5Dclose(dataset);
+    H5Gclose(root);
+    H5Fclose(fid);
+    H5Pclose(fapl);
+}
+
+static
+void gent_family(void)
+{
+    hid_t fapl, fid, space, dataset;
+    hsize_t dims[2];
+    int i, j, dset[10][15];
+
+#define FAMILY_SIZE     256
+
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+    H5Pset_fapl_family(fapl, (hsize_t)FAMILY_SIZE, H5P_DEFAULT);
+
+    fid = H5Fcreate(FILE35, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+    /* create dataset */
+    dims[0] = 10;
+    dims[1] = 15;
+    space = H5Screate_simple(2, dims, NULL);
+    dataset = H5Dcreate(fid, "/dset1", H5T_STD_I32BE, space, H5P_DEFAULT);
+
+    for (i = 0; i < 10; i++)
+         for (j = 0; j < 15; j++)
+              dset[i][j] = i + j;
+
+    H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset);
+    H5Sclose(space);
+    H5Dclose(dataset);
+    H5Fclose(fid);
+    H5Pclose(fapl);
+}
+
+static const char *multi_letters = "msbrglo";
+
+static
+void gent_multi(void)
+{
+    hid_t fapl, fid, space, dataset;
+    hsize_t dims[2];
+    int i, j, dset[10][15];
+
+    /* Multi-file driver, general case of the split driver */
+    H5FD_mem_t mt, memb_map[H5FD_MEM_NTYPES];
+    hid_t memb_fapl[H5FD_MEM_NTYPES];
+    const char *memb_name[H5FD_MEM_NTYPES];
+    char sv[H5FD_MEM_NTYPES][1024];
+    haddr_t memb_addr[H5FD_MEM_NTYPES];
+
+    fapl = H5Pcreate(H5P_FILE_ACCESS);
+
+    HDmemset(memb_map, 0, sizeof memb_map);
+    HDmemset(memb_fapl, 0, sizeof memb_fapl);
+    HDmemset(memb_name, 0, sizeof memb_name);
+    HDmemset(memb_addr, 0, sizeof memb_addr);
+
+    assert(HDstrlen(multi_letters) == H5FD_MEM_NTYPES);
+
+    for (mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,mt)) {
+        memb_fapl[mt] = H5P_DEFAULT;
+        sprintf(sv[mt], "%%s-%c.h5", multi_letters[mt]);
+        memb_name[mt] = sv[mt];
+        memb_addr[mt] = MAX(mt - 1,0) * (HADDR_MAX / 10);
+    }
+
+    H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name,
+                      memb_addr, FALSE);
+
+    fid = H5Fcreate(FILE36, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+
+    /* create dataset */
+    dims[0] = 10;
+    dims[1] = 15;
+    space = H5Screate_simple(2, dims, NULL);
+    dataset = H5Dcreate(fid, "/dset1", H5T_STD_I32BE, space, H5P_DEFAULT);
+
+    for (i = 0; i < 10; i++)
+         for (j = 0; j < 15; j++)
+              dset[i][j] = i + j;
+
+    H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset);
+    H5Sclose(space);
+    H5Dclose(dataset);
+    H5Fclose(fid);
+    H5Pclose(fapl);
+}
+
+static void gent_large_objname(void)
+{
+    hid_t fid, group, group2;
+    char grp_name[128];
+    register int i;
+
+    fid = H5Fcreate(FILE37, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    group = H5Gcreate(fid, "this_is_a_large_group_name", 0);
+
+    for (i = 0; i < 50; ++i) {
+        sprintf(grp_name, "this_is_a_large_group_name%d", i);
+        group2 = H5Gcreate(group, grp_name, 0);
+        H5Gclose(group2);
+    }
+
+    H5Gclose(group);
+    H5Fclose(fid);
+}
+
+static void gent_vlstr(void)
+{
+    const char *wdata[SPACE1_DIM1]= {
+        "Four score and seven years ago our forefathers brought forth on this continent a new nation,",
+        "conceived in liberty and dedicated to the proposition that all men are created equal.",
+        "",
+        NULL
+        };   /* Information to write */
+    const char *string_att= "This is the string for the attribute";
+    hid_t  fid1;  /* HDF5 File IDs  */
+    hid_t  dataset, root; /* Dataset ID   */
+    hid_t  sid1, dataspace;/* Dataspace ID   */
+    hid_t  tid1, att;      /* Datatype ID   */
+    hsize_t  dims1[] = {SPACE1_DIM1};
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE38, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+
+    /* Create a VL string datatype to refer to */
+    tid1 = H5Tcopy (H5T_C_S1);
+    H5Tset_size (tid1,H5T_VARIABLE);
+
+    /* Create a dataset and write VL string to it. */
+    dataset=H5Dcreate(fid1,"Dataset1",tid1,sid1,H5P_DEFAULT);
+    H5Dwrite(dataset,tid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,wdata);
+    H5Dclose(dataset);
+
+    /* Create a named VL string type.  Change padding of datatype */
+    H5Tset_strpad(tid1, H5T_STR_NULLPAD);
+    H5Tcommit(fid1, "vl_string_type", tid1);
+
+    /* Create an group attribute of VL string type */
+    root = H5Gopen(fid1, "/");
+    dataspace = H5Screate(H5S_SCALAR);
+
+    att = H5Acreate(root, "test_scalar", tid1, dataspace, H5P_DEFAULT);
+    H5Awrite(att, tid1, &string_att);
+
+    /* Close */
+    H5Tclose(tid1);
+    H5Sclose(sid1);
+    H5Sclose(dataspace);
+    H5Aclose(att);
+    H5Gclose(root);
+    H5Fclose(fid1);
+}
+
+static void gent_char(void)
+{
+    const char *wdata =
+        "Four score and seven years ago our forefathers brought "
+        "forth on this continent a new nation, conceived in "
+        "liberty and dedicated to the proposition that all "
+        "men are created equal. Now we are engaged in a great "
+        "civil war, testing whether that nation or any nation "
+        "so conceived and so dedicated can long endure.";
+    hid_t       fid1;               /* HDF5 File IDs    */
+    hid_t       dataset;            /* Dataset ID       */
+    hid_t       sid1;               /* Dataspace ID     */
+    hsize_t     dims1[1];
+
+    dims1[0] = strlen(wdata);
+
+    /* Create file */
+    fid1 = H5Fcreate(FILE39, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    sid1 = H5Screate_simple(1, dims1, NULL);
+
+    /* Create a dataset */
+    dataset = H5Dcreate(fid1, "Dataset1", H5T_NATIVE_CHAR, sid1, H5P_DEFAULT);
+
+    /* Write some characters to it. */
+    H5Dwrite(dataset, H5T_NATIVE_CHAR, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+
+    /* Close */
+    H5Dclose(dataset);
+    H5Sclose(sid1);
+    H5Fclose(fid1);
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: write_attr_in
+ *
+ * Purpose: write attributes in LOC_ID (dataset, group, named datatype)
+ *
+ * Return: void
+ *
+ * Programmer: pvn at ncsa.uiuc.edu
+ *
+ * Date: May 28, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void write_attr_in(hid_t loc_id,
+                          const char* dset_name, /* for saving reference to dataset*/
+                          hid_t file_id)
+{
+ /* Compound datatype */
+ typedef struct s_t
+ {
+  char   a;
+  double b;
+ } s_t;
+
+ typedef enum
+ {
+  E_RED,
+  E_GREEN
+ } e_t;
+
+ hid_t   attr_id;
+ hid_t   space_id;
+ hid_t   type_id;
+ herr_t  status;
+ int     val, i, j, k, n;
+ float   f;
+
+ /* create 1D attributes with dimension [2], 2 elements */
+ hsize_t    dims[1]={2};
+ char       buf1[2][2]= {"ab","de"};        /* string */
+ char       buf2[2]= {1,2};                 /* bitfield, opaque */
+ s_t        buf3[2]= {{1,2},{3,4}};         /* compound */
+ hobj_ref_t buf4[2];                        /* reference */
+ hvl_t      buf5[2];                        /* vlen */
+ hsize_t    dimarray[1]={3};                /* array dimension */
+ int        buf6[2][3]= {{1,2,3},{4,5,6}};  /* array */
+ int        buf7[2]= {1,2};                 /* integer */
+ float      buf8[2]= {1,2};                 /* float */
+
+ /* create 2D attributes with dimension [3][2], 6 elements */
+ hsize_t    dims2[2]={3,2};
+ char       buf12[6][2]= {"ab","cd","ef","gh","ij","kl"};         /* string */
+ char       buf22[3][2]= {{1,2},{3,4},{5,6}};                     /* bitfield, opaque */
+ s_t        buf32[6]= {{1,2},{3,4},{5,6},{7,8},{9,10},{11,12}};   /* compound */
+ hobj_ref_t buf42[3][2];                                          /* reference */
+ hvl_t      buf52[3][2];                                          /* vlen */
+ int        buf62[6][3]= {{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15},{16,17,18}};  /* array */
+ int        buf72[3][2]= {{1,2},{3,4},{5,6}};                     /* integer */
+ float      buf82[3][2]= {{1,2},{3,4},{5,6}};                     /* float */
+
+ /* create 3D attributes with dimension [4][3][2], 24 elements */
+ hsize_t    dims3[3]={4,3,2};
+ char       buf13[24][2]= {"ab","cd","ef","gh","ij","kl","mn","pq",
+ "rs","tu","vw","xz","AB","CD","EF","GH",
+ "IJ","KL","MN","PQ","RS","TU","VW","XZ"};  /* string */
+ char       buf23[4][3][2];    /* bitfield, opaque */
+ s_t        buf33[4][3][2];    /* compound */
+ hobj_ref_t buf43[4][3][2];    /* reference */
+ hvl_t      buf53[4][3][2];    /* vlen */
+ int        buf63[24][3];      /* array */
+ int        buf73[4][3][2];    /* integer */
+ float      buf83[4][3][2];    /* float */
+
+
+/*-------------------------------------------------------------------------
+ * 1D attributes
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ write_attr(loc_id,1,dims,"string",type_id,buf1);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_attr(loc_id,1,dims,"bitfield",type_id,buf2);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_attr(loc_id,1,dims,"opaque",type_id,buf2);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_attr(loc_id,1,dims,"compound",type_id,buf3);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  status=H5Rcreate(&buf4[0],file_id,dset_name,H5R_OBJECT,-1);
+  status=H5Rcreate(&buf4[1],file_id,dset_name,H5R_OBJECT,-1);
+  write_attr(loc_id,1,dims,"reference",H5T_STD_REF_OBJ,buf4);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_attr(loc_id,1,dims,"enum",type_id,0);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+
+ buf5[0].len = 1;
+ buf5[0].p = malloc( 1 * sizeof(int));
+ ((int *)buf5[0].p)[0]=1;
+ buf5[1].len = 2;
+ buf5[1].p = malloc( 2 * sizeof(int));
+ ((int *)buf5[1].p)[0]=2;
+ ((int *)buf5[1].p)[1]=3;
+
+ space_id = H5Screate_simple(1,dims,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ attr_id = H5Acreate(loc_id,"vlen",type_id,space_id,H5P_DEFAULT);
+ status = H5Awrite(attr_id,type_id,buf5);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf5);
+ assert(status>=0);
+ status = H5Aclose(attr_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_attr(loc_id,1,dims,"array",type_id,buf6);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+ write_attr(loc_id,1,dims,"integer",H5T_NATIVE_INT,buf7);
+ write_attr(loc_id,1,dims,"float",H5T_NATIVE_FLOAT,buf8);
+
+
+/*-------------------------------------------------------------------------
+ * 2D attributes
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ write_attr(loc_id,2,dims2,"string2D",type_id,buf12);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_attr(loc_id,2,dims2,"bitfield2D",type_id,buf22);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_attr(loc_id,2,dims2,"opaque2D",type_id,buf22);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_attr(loc_id,2,dims2,"compound2D",type_id,buf32);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  for (i = 0; i < 3; i++) {
+   for (j = 0; j < 2; j++) {
+    status=H5Rcreate(&buf42[i][j],file_id,dset_name,H5R_OBJECT,-1);
+   }
+  }
+  write_attr(loc_id,2,dims2,"reference2D",H5T_STD_REF_OBJ,buf42);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_attr(loc_id,2,dims2,"enum2D",type_id,0);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+ n=0;
+ for (i = 0; i < 3; i++) {
+  for (j = 0; j < 2; j++) {
+    int l;
+    buf52[i][j].p = malloc((i + 1) * sizeof(int));
+    buf52[i][j].len = i + 1;
+    for (l = 0; l < i + 1; l++)
+    ((int *)buf52[i][j].p)[l] = n++;
+  }
+ }
+
+ space_id = H5Screate_simple(2,dims2,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ attr_id = H5Acreate(loc_id,"vlen2D",type_id,space_id,H5P_DEFAULT);
+ status = H5Awrite(attr_id,type_id,buf52);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf52);
+ assert(status>=0);
+ status = H5Aclose(attr_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_attr(loc_id,2,dims2,"array2D",type_id,buf62);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+ write_attr(loc_id,2,dims2,"integer2D",H5T_NATIVE_INT,buf72);
+ write_attr(loc_id,2,dims2,"float2D",H5T_NATIVE_FLOAT,buf82);
+
+
+/*-------------------------------------------------------------------------
+ * 3D attributes
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ write_attr(loc_id,3,dims3,"string3D",type_id,buf13);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+
+ n=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    buf23[i][j][k]=n++;
+   }
+  }
+ }
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_attr(loc_id,3,dims3,"bitfield3D",type_id,buf23);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_attr(loc_id,3,dims3,"opaque3D",type_id,buf23);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+
+ n=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    buf33[i][j][k].a=n++;
+    buf33[i][j][k].b=n++;
+   }
+  }
+ }
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_attr(loc_id,3,dims3,"compound3D",type_id,buf33);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  for (i = 0; i < 4; i++) {
+   for (j = 0; j < 3; j++) {
+    for (k = 0; k < 2; k++)
+     status=H5Rcreate(&buf43[i][j][k],file_id,dset_name,H5R_OBJECT,-1);
+   }
+  }
+ write_attr(loc_id,3,dims3,"reference3D",H5T_STD_REF_OBJ,buf43);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_attr(loc_id,3,dims3,"enum3D",type_id,0);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+ n=0;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    int l;
+    buf53[i][j][k].p = malloc((i + 1) * sizeof(int));
+    buf53[i][j][k].len = i + 1;
+    for (l = 0; l < i + 1; l++)
+    ((int *)buf53[i][j][k].p)[l] = n++;
+   }
+  }
+ }
+
+ space_id = H5Screate_simple(3,dims3,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ attr_id = H5Acreate(loc_id,"vlen3D",type_id,space_id,H5P_DEFAULT);
+ status = H5Awrite(attr_id,type_id,buf53);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf53);
+ assert(status>=0);
+ status = H5Aclose(attr_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+ n=1;
+ for (i = 0; i < 24; i++) {
+  for (j = 0; j < (int)dimarray[0]; j++) {
+    buf63[i][j]=n++;
+  }
+ }
+
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_attr(loc_id,3,dims3,"array3D",type_id,buf63);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+ n=1; f=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    buf73[i][j][k]=n++;
+    buf83[i][j][k]=f++;
+   }
+  }
+ }
+ write_attr(loc_id,3,dims3,"integer3D",H5T_NATIVE_INT,buf73);
+ write_attr(loc_id,3,dims3,"float3D",H5T_NATIVE_FLOAT,buf83);
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: write_dset_in
+ *
+ * Purpose: write datasets in LOC_ID
+ *
+ * Return: void
+ *
+ * Programmer: pvn at ncsa.uiuc.edu
+ *
+ * Date: May 28, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void write_dset_in(hid_t loc_id,
+                          const char* dset_name, /* for saving reference to dataset*/
+                          hid_t file_id)
+{
+ /* Compound datatype */
+ typedef struct s_t
+ {
+  char   a;
+  double b;
+ } s_t;
+
+ typedef enum
+ {
+  E_RED,
+  E_GREEN
+ } e_t;
+
+ hid_t   dset_id;
+ hid_t   space_id;
+ hid_t   type_id;
+ hid_t   plist_id;
+ herr_t  status;
+ int     val, i, j, k, n;
+ float   f;
+ int     fillvalue=2;
+
+ /* create 1D attributes with dimension [2], 2 elements */
+ hsize_t    dims[1]={2};
+ char       buf1[2][2]= {"ab","de"};        /* string */
+ char       buf2[2]= {1,2};                 /* bitfield, opaque */
+ s_t        buf3[2]= {{1,2},{3,4}};         /* compound */
+ hobj_ref_t buf4[2];                        /* reference */
+ hvl_t      buf5[2];                        /* vlen */
+ hsize_t    dimarray[1]={3};                /* array dimension */
+ int        buf6[2][3]= {{1,2,3},{4,5,6}};  /* array */
+ int        buf7[2]= {1,2};                 /* integer */
+ float      buf8[2]= {1,2};                 /* float */
+
+ /* create 2D attributes with dimension [3][2], 6 elements */
+ hsize_t    dims2[2]={3,2};
+ char       buf12[6][2]= {"ab","cd","ef","gh","ij","kl"};         /* string */
+ char       buf22[3][2]= {{1,2},{3,4},{5,6}};                     /* bitfield, opaque */
+ s_t        buf32[6]= {{1,2},{3,4},{5,6},{7,8},{9,10},{11,12}};   /* compound */
+ hobj_ref_t buf42[3][2];                                          /* reference */
+ hvl_t      buf52[3][2];                                          /* vlen */
+ int        buf62[6][3]= {{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15},{16,17,18}};  /* array */
+ int        buf72[3][2]= {{1,2},{3,4},{5,6}};                     /* integer */
+ float      buf82[3][2]= {{1,2},{3,4},{5,6}};                     /* float */
+
+ /* create 3D attributes with dimension [4][3][2], 24 elements */
+ hsize_t    dims3[3]={4,3,2};
+ char       buf13[24][2]= {"ab","cd","ef","gh","ij","kl","mn","pq",
+ "rs","tu","vw","xz","AB","CD","EF","GH",
+ "IJ","KL","MN","PQ","RS","TU","VW","XZ"};  /* string */
+ char       buf23[4][3][2];    /* bitfield, opaque */
+ s_t        buf33[4][3][2];    /* compound */
+ hobj_ref_t buf43[4][3][2];    /* reference */
+ hvl_t      buf53[4][3][2];    /* vlen */
+ int        buf63[24][3];      /* array */
+ int        buf73[4][3][2];    /* integer */
+ float      buf83[4][3][2];    /* float */
+
+
+/*-------------------------------------------------------------------------
+ * 1D
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ write_dset(loc_id,1,dims,"string",type_id,buf1);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_dset(loc_id,1,dims,"bitfield",type_id,buf2);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_dset(loc_id,1,dims,"opaque",type_id,buf2);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_dset(loc_id,1,dims,"compound",type_id,buf3);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  status=H5Rcreate(&buf4[0],file_id,dset_name,H5R_OBJECT,-1);
+  status=H5Rcreate(&buf4[1],file_id,dset_name,H5R_OBJECT,-1);
+  write_dset(loc_id,1,dims,"reference",H5T_STD_REF_OBJ,buf4);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_dset(loc_id,1,dims,"enum",type_id,0);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+
+ buf5[0].len = 1;
+ buf5[0].p = malloc( 1 * sizeof(int));
+ ((int *)buf5[0].p)[0]=1;
+ buf5[1].len = 2;
+ buf5[1].p = malloc( 2 * sizeof(int));
+ ((int *)buf5[1].p)[0]=2;
+ ((int *)buf5[1].p)[1]=3;
+
+ space_id = H5Screate_simple(1,dims,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ dset_id = H5Dcreate(loc_id,"vlen",type_id,space_id,H5P_DEFAULT);
+ status = H5Dwrite(dset_id,type_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf5);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf5);
+ assert(status>=0);
+ status = H5Dclose(dset_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_dset(loc_id,1,dims,"array",type_id,buf6);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+ write_dset(loc_id,1,dims,"integer",H5T_NATIVE_INT,buf7);
+ write_dset(loc_id,1,dims,"float",H5T_NATIVE_FLOAT,buf8);
+
+
+/*-------------------------------------------------------------------------
+ * 2D
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ write_dset(loc_id,2,dims2,"string2D",type_id,buf12);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_dset(loc_id,2,dims2,"bitfield2D",type_id,buf22);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_dset(loc_id,2,dims2,"opaque2D",type_id,buf22);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_dset(loc_id,2,dims2,"compound2D",type_id,buf32);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  for (i = 0; i < 3; i++) {
+   for (j = 0; j < 2; j++) {
+    status=H5Rcreate(&buf42[i][j],file_id,dset_name,H5R_OBJECT,-1);
+   }
+  }
+  write_dset(loc_id,2,dims2,"reference2D",H5T_STD_REF_OBJ,buf42);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_dset(loc_id,2,dims2,"enum2D",type_id,0);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+ n=0;
+ for (i = 0; i < 3; i++) {
+  for (j = 0; j < 2; j++) {
+    int l;
+    buf52[i][j].p = malloc((i + 1) * sizeof(int));
+    buf52[i][j].len = i + 1;
+    for (l = 0; l < i + 1; l++)
+    ((int *)buf52[i][j].p)[l] = n++;
+  }
+ }
+
+ space_id = H5Screate_simple(2,dims2,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ dset_id = H5Dcreate(loc_id,"vlen2D",type_id,space_id,H5P_DEFAULT);
+ status = H5Dwrite(dset_id,type_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf52);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf52);
+ assert(status>=0);
+ status = H5Dclose(dset_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_dset(loc_id,2,dims2,"array2D",type_id,buf62);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER, write a fill value
+ *-------------------------------------------------------------------------
+ */
+ plist_id = H5Pcreate(H5P_DATASET_CREATE);
+ status = H5Pset_fill_value(plist_id, H5T_NATIVE_INT, &fillvalue);
+ space_id = H5Screate_simple(2,dims2,NULL);
+ dset_id = H5Dcreate(loc_id,"integer2D",H5T_NATIVE_INT,space_id,plist_id);
+ status = H5Dwrite(dset_id,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf72);
+ status = H5Pclose(plist_id);
+ status = H5Dclose(dset_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+
+ write_dset(loc_id,2,dims2,"float2D",H5T_NATIVE_FLOAT,buf82);
+
+
+/*-------------------------------------------------------------------------
+ * 3D
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ write_dset(loc_id,3,dims3,"string3D",type_id,buf13);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+
+ n=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    buf23[i][j][k]=n++;
+   }
+  }
+ }
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_dset(loc_id,3,dims3,"bitfield3D",type_id,buf23);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_dset(loc_id,3,dims3,"opaque3D",type_id,buf23);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+
+ n=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    buf33[i][j][k].a=n++;
+    buf33[i][j][k].b=n++;
+   }
+  }
+ }
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_dset(loc_id,3,dims3,"compound3D",type_id,buf33);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  for (i = 0; i < 4; i++) {
+   for (j = 0; j < 3; j++) {
+    for (k = 0; k < 2; k++)
+     status=H5Rcreate(&buf43[i][j][k],file_id,dset_name,H5R_OBJECT,-1);
+   }
+  }
+ write_dset(loc_id,3,dims3,"reference3D",H5T_STD_REF_OBJ,buf43);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_dset(loc_id,3,dims3,"enum3D",type_id,0);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+ n=0;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    int l;
+    buf53[i][j][k].p = malloc((i + 1) * sizeof(int));
+    buf53[i][j][k].len = i + 1;
+    for (l = 0; l < i + 1; l++)
+    ((int *)buf53[i][j][k].p)[l] = n++;
+   }
+  }
+ }
+
+ space_id = H5Screate_simple(3,dims3,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ dset_id = H5Dcreate(loc_id,"vlen3D",type_id,space_id,H5P_DEFAULT);
+ status = H5Dwrite(dset_id,type_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf53);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf53);
+ assert(status>=0);
+ status = H5Dclose(dset_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+ n=1;
+ for (i = 0; i < 24; i++) {
+  for (j = 0; j < (int)dimarray[0]; j++) {
+    buf63[i][j]=n++;
+  }
+ }
+
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_dset(loc_id,3,dims3,"array3D",type_id,buf63);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+ n=1; f=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    buf73[i][j][k]=n++;
+    buf83[i][j][k]=f++;
+   }
+  }
+ }
+ write_dset(loc_id,3,dims3,"integer3D",H5T_NATIVE_INT,buf73);
+ write_dset(loc_id,3,dims3,"float3D",H5T_NATIVE_FLOAT,buf83);
+}
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: gent_attr_all
+ *
+ * Purpose: generate all datatype attributes
+ *
+ * Return: void
+ *
+ * Programmer: pvn at ncsa.uiuc.edu
+ *
+ * Date: May 19, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void gent_attr_all(void)
+{
+ hid_t   file_id;
+ hid_t   dset_id;
+ hid_t   group_id;
+ hid_t   group2_id;
+ hid_t   root_id;
+ hid_t   space_id;
+ hsize_t dims[1]={2};
+ herr_t  status;
+
+ /* Create a file and a dataset */
+ file_id  = H5Fcreate(FILE40, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+ /* Create a 1D dataset */
+ space_id = H5Screate_simple(1,dims,NULL);
+ dset_id  = H5Dcreate(file_id,"dset",H5T_NATIVE_INT,space_id,H5P_DEFAULT);
+ status   = H5Sclose(space_id);
+ assert(status>=0);
+
+ /* Create groups */
+ group_id  = H5Gcreate(file_id,"g1",0);
+ group2_id = H5Gcreate(file_id,"g2",0);
+ root_id   = H5Gopen(file_id, "/");
+
+/*-------------------------------------------------------------------------
+ * write a series of attributes on the dataset, group
+ *-------------------------------------------------------------------------
+ */
+
+ write_attr_in(dset_id,"dset",file_id);
+ write_attr_in(group_id,NULL,0);
+ write_attr_in(root_id,NULL,0);
+
+/*-------------------------------------------------------------------------
+ * write a series of datasets on group 2
+ *-------------------------------------------------------------------------
+ */
+
+ write_dset_in(group2_id,"/dset",file_id);
+
+ /* Close */
+ status = H5Dclose(dset_id);
+ assert(status>=0);
+ status = H5Gclose(group_id);
+ assert(status>=0);
+ status = H5Gclose(group2_id);
+ assert(status>=0);
+ status = H5Gclose(root_id);
+ assert(status>=0);
+
+ /* Close file */
+ status = H5Fclose(file_id);
+ assert(status>=0);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: write_attr
+ *
+ * Purpose: utility function to write an attribute
+ *
+ * Programmer: pvn at ncsa.uiuc.edu
+ *
+ * Date: May 19, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static
+int write_attr(hid_t loc_id, int rank, hsize_t *dims, const char *attr_name,
+               hid_t type_id, void *buf)
+{
+ hid_t   attr_id;
+ hid_t   space_id;
+ herr_t  status;
+
+ /* Create a buf space  */
+ space_id = H5Screate_simple(rank,dims,NULL);
+
+ /* Create the attribute */
+ attr_id = H5Acreate(loc_id,attr_name,type_id,space_id,H5P_DEFAULT);
+
+ /* Write the buf */
+ if ( buf )
+  status = H5Awrite(attr_id,type_id,buf);
+
+ /* Close */
+ status = H5Aclose(attr_id);
+ status = H5Sclose(space_id);
+ return status;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: write_dset
+ *
+ * Purpose: utility function to create and write a dataset in LOC_ID
+ *
+ * Return:
+ *
+ * Programmer: pvn at ncsa.uiuc.edu
+ *
+ * Date: May 27, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static
+int write_dset( hid_t loc_id, int rank, hsize_t *dims, const char *dset_name,
+                hid_t type_id, void *buf )
+{
+ hid_t   dset_id;
+ hid_t   space_id;
+ herr_t  status;
+
+ /* Create a buf space  */
+ space_id = H5Screate_simple(rank,dims,NULL);
+
+ /* Create a dataset */
+ dset_id = H5Dcreate(loc_id,dset_name,type_id,space_id,H5P_DEFAULT);
+
+ /* Write the buf */
+ if ( buf )
+  status = H5Dwrite(dset_id,type_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf);
+
+ /* Close */
+ status = H5Dclose(dset_id);
+ status = H5Sclose(space_id);
+
+ return status;
+
+}
+
+
+static void gent_compound_complex(void)
+{
+    /* Structure and array for compound types                             */
+    typedef struct Array1Struct {
+        int                a;
+ const char         *b[F41_DIMb];
+ char               c[F41_ARRAY_DIMc];
+ short              d[F41_ARRAY_DIMd1][F41_ARRAY_DIMd2];
+ float              e;
+ double             f[F41_ARRAY_DIMf];
+ char               g;
+    } Array1Struct;
+    Array1Struct       Array1[F41_LENGTH];
+
+    /* Define the value of the string array                           */
+    const char *quote [F41_DIMb] = {
+        "A fight is a contract that takes two people to honor.",
+        "A combative stance means that you've accepted the contract.",
+        "In which case, you deserve what you get.",
+        "  --  Professor Cheng Man-ch'ing"
+        };
+
+    /* Define the value of the character array                        */
+    char chararray [F41_ARRAY_DIMc] = {'H', 'e', 'l', 'l', 'o', '!'};
+
+
+    hid_t      Array1Structid;            /* File datatype identifier */
+    hid_t      array_tid;                 /* Array datatype handle    */
+    hid_t      array1_tid;                /* Array datatype handle    */
+    hid_t      array2_tid;                /* Array datatype handle    */
+    hid_t      array4_tid;                /* Array datatype handle    */
+    hid_t      datafile, dataset;         /* Datafile/dataset handles */
+    hid_t      dataspace;                 /* Dataspace handle         */
+    herr_t     status;                    /* Error checking variable */
+    hsize_t    dim[] = {F41_LENGTH};          /* Dataspace dimensions     */
+    hsize_t    array_dimb[] = {F41_DIMb};     /* Array dimensions         */
+    hsize_t    array_dimd[]={F41_ARRAY_DIMd1,F41_ARRAY_DIMd2}; /* Array dimensions         */
+    hsize_t    array_dimf[]={F41_ARRAY_DIMf}; /* Array dimensions         */
+    hid_t      str_array_id;
+
+    int        m, n, o;                   /* Array init loop vars     */
+
+    /* Initialize the data in the arrays/datastructure                */
+    for (m = 0; m< F41_LENGTH; m++) {
+        Array1[m].a = m;
+
+        for (n = 0; n < F41_DIMb; n++) {
+     Array1[m].b[n] = quote[n];
+ }
+
+ for (n = 0; n < F41_ARRAY_DIMc; n++) {
+            Array1[m].c[n] = chararray[n];
+ }
+
+ for (n = 0; n < F41_ARRAY_DIMd1; n++) {
+         for (o = 0; o < F41_ARRAY_DIMd2; o++){
+             Array1[m].d[n][o] = m + n + o;
+            }
+        }
+
+        Array1[m].e = (float)( m * .96 );
+
+ for (n = 0; n < F41_ARRAY_DIMf; n++) {
+            Array1[m].f[n] = ( m * 1024.9637 );
+ }
+
+        Array1[m].g = 'm';
+    }
+
+    /* Create the dataspace                                           */
+    dataspace = H5Screate_simple(F41_RANK, dim, NULL);
+    assert (dataspace >= 0);
+
+    /* Create the file                                                */
+    datafile = H5Fcreate(FILE41, H5F_ACC_TRUNC, H5P_DEFAULT,
+      H5P_DEFAULT);
+    assert (datafile >= 0);
+
+    /* Copy the array data type for the string array                  */
+    array_tid = H5Tcopy (H5T_C_S1);
+    assert (array_tid >= 0);
+
+    /* Set the string array size to Variable                          */
+    status = H5Tset_size (array_tid,H5T_VARIABLE);
+    assert (status >= 0);
+
+    /* Create the array data type for the string array                */
+    str_array_id = H5Tarray_create(array_tid, F41_ARRAY_RANK,
+      array_dimb, NULL);
+    assert (str_array_id >= 0);
+
+    /* Copy the array data type for the character array               */
+    array1_tid = H5Tcopy (H5T_C_S1);
+    assert (array1_tid >= 0);
+
+    /* Set the character array size                                   */
+    status = H5Tset_size (array1_tid, F41_ARRAY_DIMc);
+    assert (status >= 0);
+
+    /* Create the array data type for the character array             */
+    array2_tid = H5Tarray_create(H5T_NATIVE_SHORT, F41_ARRAY_RANKd,
+      array_dimd, NULL);
+    assert (array2_tid >= 0);
+
+    /* Create the array data type for the character array             */
+    array4_tid = H5Tarray_create(H5T_NATIVE_DOUBLE, F41_ARRAY_RANK,
+      array_dimf, NULL);
+    assert (array4_tid >= 0);
+
+    /* Create the memory data type                                    */
+    Array1Structid = H5Tcreate (H5T_COMPOUND, sizeof(Array1Struct));
+    assert (Array1Structid >= 0);
+
+    /* Insert the arrays and variables into the structure             */
+    status = H5Tinsert(Array1Structid, "a_name",
+      HOFFSET(Array1Struct, a), H5T_NATIVE_INT);
+    assert (status >= 0);
+
+    status = H5Tinsert(Array1Structid, "b_name",
+      HOFFSET(Array1Struct, b), str_array_id);
+    assert (status >= 0);
+
+    status = H5Tinsert(Array1Structid, "c_name",
+      HOFFSET(Array1Struct, c), array1_tid);
+    assert (status >= 0);
+
+    status = H5Tinsert(Array1Structid, "d_name",
+      HOFFSET(Array1Struct, d), array2_tid);
+    assert (status >= 0);
+
+    status = H5Tinsert(Array1Structid, "e_name",
+      HOFFSET(Array1Struct, e), H5T_NATIVE_FLOAT);
+    assert (status >= 0);
+
+    status = H5Tinsert(Array1Structid, "f_name",
+      HOFFSET(Array1Struct, f), array4_tid);
+    assert (status >= 0);
+
+    status = H5Tinsert(Array1Structid, "g_name",
+      HOFFSET(Array1Struct, g), H5T_NATIVE_CHAR);
+    assert (status >= 0);
+
+    /* Create the dataset                                             */
+    dataset = H5Dcreate(datafile, F41_DATASETNAME, Array1Structid,
+      dataspace, H5P_DEFAULT);
+
+    /* Write data to the dataset                                      */
+    status = H5Dwrite(dataset, Array1Structid, H5S_ALL, H5S_ALL,
+      H5P_DEFAULT, Array1);
+    assert (status >= 0);
+
+    /* Release resources                                              */
+    status = H5Tclose(Array1Structid);
+    assert (status >= 0);
+
+    status = H5Tclose(array_tid);
+    assert (status >= 0);
+
+    status = H5Tclose(array1_tid);
+    assert (status >= 0);
+
+    status = H5Tclose(array2_tid);
+    assert (status >= 0);
+
+    status = H5Tclose(array4_tid);
+    assert (status >= 0);
+
+    status = H5Tclose(str_array_id);
+    assert (status >= 0);
+
+    status = H5Sclose(dataspace);
+    assert (status >= 0);
+
+    status = H5Dclose(dataset);
+    assert (status >= 0);
+
+    status = H5Fclose(datafile);
+    assert (status >= 0);
+}
+
+
+static void gent_named_dtype_attr(void)
+{
+   hid_t file_id;
+   hid_t dset_id;
+   hid_t space_id;
+   hid_t type_id;
+   hid_t attr_id;
+   int data=8;
+   herr_t ret;
+
+   /* Create a file */
+   file_id=H5Fcreate(FILE42, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+   assert(file_id>0);
+
+   /* Create a datatype to commit and use */
+   type_id=H5Tcopy(H5T_NATIVE_INT);
+   assert(type_id>0);
+
+   /* Commit datatype to file */
+   ret=H5Tcommit(file_id,F42_TYPENAME,type_id);
+   assert(ret>=0);
+
+   /* Create dataspace for dataset */
+   space_id=H5Screate(H5S_SCALAR);
+   assert(space_id>0);
+
+   /* Create dataset */
+   dset_id=H5Dcreate(file_id,F42_DSETNAME,type_id,space_id,H5P_DEFAULT);
+   assert(dset_id>0);
+
+   /* Create attribute on dataset */
+   attr_id=H5Acreate(dset_id,F42_ATTRNAME,type_id,space_id,H5P_DEFAULT);
+   assert(dset_id>0);
+
+   /* Write data into the attribute */
+   ret=H5Awrite(attr_id,H5T_NATIVE_INT,&data);
+   assert(ret>=0);
+
+   /* Close attribute */
+   ret=H5Aclose(attr_id);
+   assert(ret>=0);
+
+   /* Close dataset */
+   ret=H5Dclose(dset_id);
+   assert(ret>=0);
+
+   /* Close dataspace */
+   ret=H5Sclose(space_id);
+   assert(ret>=0);
+
+   /* Close datatype */
+   ret=H5Tclose(type_id);
+   assert(ret>=0);
+
+   /* Close file */
+   ret=H5Fclose(file_id);
+   assert(ret>=0);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: make_dset
+ *
+ * Purpose: utility function to create and write a dataset in LOC_ID
+ *
+ *-------------------------------------------------------------------------
+ */
+static
+int make_dset(hid_t loc_id,
+              const char *name,
+              hid_t sid,
+              hid_t tid,
+              hid_t dcpl,
+              void *buf)
+{
+ hid_t   dsid;
+
+ /* create the dataset */
+ if((dsid = H5Dcreate (loc_id,name,tid,sid,dcpl))<0)
+  return -1;
+
+ /* write */
+ if(H5Dwrite(dsid,tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0)
+  goto out;
+
+ /* close */
+ if(H5Dclose(dsid)<0)
+  return -1;
+
+ return 0;
+ out:
+ H5E_BEGIN_TRY {
+  H5Dclose(dsid);
+ } H5E_END_TRY;
+ return -1;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: make_external
+ *
+ * Purpose: make a dataset with external storage
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+make_external(hid_t fid)
+{
+ hid_t   dcpl;         /*dataset creation property list */
+ hid_t   sid;          /*dataspace ID */
+ hid_t   dsid;         /*dataset ID   */
+ hsize_t cur_size[1];  /*data space current size */
+ hsize_t max_size[1];  /*data space maximum size */
+ hsize_t size;         /*bytes reserved for data in the external file*/
+ int     ret;
+
+ cur_size[0] = max_size[0] = 100;
+ size = (max_size[0]*sizeof(int)/2);
+
+ dcpl=H5Pcreate(H5P_DATASET_CREATE);
+ ret=H5Pset_external(dcpl,"ext1.bin",(off_t)0,size);
+ assert(ret>=0);
+
+ ret=H5Pset_external(dcpl,"ext2.bin",(off_t)0,size);
+ assert(ret>=0);
+
+ sid=H5Screate_simple(1, cur_size, max_size);
+ assert(ret>=0);
+
+ dsid=H5Dcreate(fid, "external", H5T_NATIVE_INT, sid, dcpl);
+ assert(ret>=0);
+
+ H5Dclose(dsid);
+ assert(ret>=0);
+
+ H5Sclose(sid);
+ assert(ret>=0);
+
+ H5Pclose(dcpl);
+ assert(ret>=0);
+}
+
+/*-------------------------------------------------------------------------
+ * Function: gent_filters
+ *
+ * Purpose: make several datasets with filters, external dataset
+ *
+ *-------------------------------------------------------------------------
+ */
+static void gent_filters(void)
+{
+ hid_t    fid;  /* file id */
+ hid_t    dcpl; /* dataset creation property list */
+ hid_t    sid;  /* dataspace ID */
+ hid_t    tid;  /* datatype ID */
+#ifdef H5_HAVE_FILTER_SZIP
+ unsigned szip_options_mask=H5_SZIP_ALLOW_K13_OPTION_MASK|H5_SZIP_NN_OPTION_MASK;
+ unsigned szip_pixels_per_block=4;
+#endif /* H5_HAVE_FILTER_SZIP */
+ hsize_t  dims1[RANK]      = {DIM1,DIM2};
+ hsize_t  chunk_dims[RANK] = {CDIM1,CDIM2};
+ int      buf1[DIM1][DIM2];
+ int      i, j, n, ret;
+
+ for (i=n=0; i<DIM1; i++){
+  for (j=0; j<DIM2; j++){
+   buf1[i][j]=n++;
+  }
+ }
+
+ /* create a file */
+ fid  = H5Fcreate(FILE44, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+ assert(fid>=0);
+
+ /* create a space */
+ sid = H5Screate_simple(SPACE2_RANK, dims1, NULL);
+
+ /* create a dataset creation property list; the same DCPL is used for all dsets */
+ dcpl = H5Pcreate(H5P_DATASET_CREATE);
+
+/*-------------------------------------------------------------------------
+ * create a compact and contiguous storage layout dataset
+ * add a comment to the datasets
+ *-------------------------------------------------------------------------
+ */
+ ret=H5Pset_layout(dcpl, H5D_COMPACT);
+ assert(ret>=0);
+
+ ret=make_dset(fid,"compact",sid,H5T_NATIVE_INT,dcpl,buf1);
+ assert(ret>=0);
+
+ ret=H5Gset_comment(fid,"compact", "This is a dataset with compact storage");
+ assert(ret>=0);
+
+ ret=H5Pset_layout(dcpl, H5D_CONTIGUOUS);
+ assert(ret>=0);
+
+ ret=make_dset(fid,"contiguous",sid,H5T_NATIVE_INT,dcpl,buf1);
+ assert(ret>=0);
+
+ ret=H5Gset_comment(fid,"contiguous", "This is a dataset with contiguous storage");
+ assert(ret>=0);
+
+ ret=H5Pset_layout(dcpl, H5D_CHUNKED);
+ assert(ret>=0);
+
+ ret=H5Pset_chunk(dcpl, SPACE2_RANK, chunk_dims);
+ assert(ret>=0);
+
+ ret=make_dset(fid,"chunked",sid,H5T_NATIVE_INT,dcpl,buf1);
+ assert(ret>=0);
+
+ ret=H5Gset_comment(fid,"chunked", "This is a dataset with chunked storage");
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * make several dataset with filters
+ *-------------------------------------------------------------------------
+ */
+
+ /* set up chunk */
+ ret=H5Pset_chunk(dcpl, SPACE2_RANK, chunk_dims);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * SZIP
+ *-------------------------------------------------------------------------
+ */
+#ifdef H5_HAVE_FILTER_SZIP
+ if (h5tools_can_encode(H5Z_FILTER_SZIP) == 1) {
+ /* remove the filters from the dcpl */
+ ret=H5Premove_filter(dcpl,H5Z_FILTER_ALL);
+ assert(ret>=0);
+
+ /* set szip data */
+ ret=H5Pset_szip (dcpl,szip_options_mask,szip_pixels_per_block);
+ assert(ret>=0);
+
+ ret=make_dset(fid,"szip",sid,H5T_NATIVE_INT,dcpl,buf1);
+ assert(ret>=0);
+ }
+#endif /* H5_HAVE_FILTER_SZIP */
+
+/*-------------------------------------------------------------------------
+ * GZIP
+ *-------------------------------------------------------------------------
+ */
+#if defined (H5_HAVE_FILTER_DEFLATE)
+ /* remove the filters from the dcpl */
+ ret=H5Premove_filter(dcpl,H5Z_FILTER_ALL);
+ assert(ret>=0);
+
+ /* set deflate data */
+ ret=H5Pset_deflate(dcpl, 9);
+ assert(ret>=0);
+
+ ret=make_dset(fid,"deflate",sid,H5T_NATIVE_INT,dcpl,buf1);
+ assert(ret>=0);
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * shuffle
+ *-------------------------------------------------------------------------
+ */
+#if defined (H5_HAVE_FILTER_SHUFFLE)
+ /* remove the filters from the dcpl */
+ ret=H5Premove_filter(dcpl,H5Z_FILTER_ALL);
+ assert(ret>=0);
+
+ /* set the shuffle filter */
+ ret=H5Pset_shuffle(dcpl);
+ assert(ret>=0);
+
+ ret=make_dset(fid,"shuffle",sid,H5T_NATIVE_INT,dcpl,buf1);
+ assert(ret>=0);
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * checksum
+ *-------------------------------------------------------------------------
+ */
+#if defined (H5_HAVE_FILTER_FLETCHER32)
+ /* remove the filters from the dcpl */
+ ret=H5Premove_filter(dcpl,H5Z_FILTER_ALL);
+ assert(ret>=0);
+
+ /* set the checksum filter */
+ ret=H5Pset_fletcher32(dcpl);
+ assert(ret>=0);
+
+ ret=make_dset(fid,"fletcher32",sid,H5T_NATIVE_INT,dcpl,buf1);
+ assert(ret>=0);
+#endif
+
+/*-------------------------------------------------------------------------
+ * all filters
+ *-------------------------------------------------------------------------
+ */
+ /* remove the filters from the dcpl */
+ ret=H5Premove_filter(dcpl,H5Z_FILTER_ALL);
+ assert(ret>=0);
+
+#if defined (H5_HAVE_FILTER_SHUFFLE)
+ /* set the shuffle filter */
+ ret=H5Pset_shuffle(dcpl);
+ assert(ret>=0);
+#endif
+
+#ifdef H5_HAVE_FILTER_SZIP
+ if (h5tools_can_encode(H5Z_FILTER_SZIP) == 1) {
+ szip_options_mask=H5_SZIP_CHIP_OPTION_MASK | H5_SZIP_EC_OPTION_MASK;
+ /* set szip data */
+ ret=H5Pset_szip (dcpl,szip_options_mask,szip_pixels_per_block);
+ assert(ret>=0);
+ }
+#endif /* H5_HAVE_FILTER_SZIP */
+
+#if defined (H5_HAVE_FILTER_DEFLATE)
+ /* set deflate data */
+ ret=H5Pset_deflate(dcpl, 5);
+ assert(ret>=0);
+#endif
+
+#if defined (H5_HAVE_FILTER_FLETCHER32)
+ /* set the checksum filter */
+ ret=H5Pset_fletcher32(dcpl);
+ assert(ret>=0);
+#endif
+
+ ret=make_dset(fid,"all",sid,H5T_NATIVE_INT,dcpl,buf1);
+ assert(ret>=0);
+
+
+/*-------------------------------------------------------------------------
+ * user defined filter
+ *-------------------------------------------------------------------------
+ */
+ /* remove the filters from the dcpl */
+ ret=H5Premove_filter(dcpl,H5Z_FILTER_ALL);
+ assert(ret>=0);
+
+#ifdef H5_WANT_H5_V1_4_COMPAT
+ ret=H5Zregister (MYFILTER_ID, "myfilter", myfilter);
+#else
+ ret=H5Zregister (H5Z_MYFILTER);
+#endif
+ assert(ret>=0);
+
+ ret=H5Pset_filter (dcpl, MYFILTER_ID, 0, 0, NULL);
+ assert(ret>=0);
+
+ ret=make_dset(fid,"myfilter",sid,H5T_NATIVE_INT,dcpl,buf1);
+ assert(ret>=0);
+
+ /* remove the filters from the dcpl */
+ ret=H5Premove_filter(dcpl,H5Z_FILTER_ALL);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * make an external dataset
+ *-------------------------------------------------------------------------
+ */
+ make_external(fid);
+
+/*-------------------------------------------------------------------------
+ * H5D_ALLOC_TIME_EARLY
+ *-------------------------------------------------------------------------
+ */
+ ret=H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_EARLY);
+ assert(ret>=0);
+ ret=make_dset(fid,"alloc_time_early",sid,H5T_NATIVE_INT,dcpl,buf1);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * H5D_ALLOC_TIME_INCR
+ *-------------------------------------------------------------------------
+ */
+ ret=H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_INCR);
+ assert(ret>=0);
+ ret=make_dset(fid,"alloc_time_incr",sid,H5T_NATIVE_INT,dcpl,buf1);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * H5D_ALLOC_TIME_LATE
+ *-------------------------------------------------------------------------
+ */
+ ret=H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_LATE);
+ assert(ret>=0);
+ ret=make_dset(fid,"alloc_time_late",sid,H5T_NATIVE_INT,dcpl,buf1);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * commit a H5G_TYPE type with a comment
+ *-------------------------------------------------------------------------
+ */
+ tid=H5Tcopy(H5T_STD_B8LE);
+ ret=H5Tcommit(fid, "mytype", tid);
+ assert(ret>=0);
+
+ ret=H5Gset_comment(fid,"mytype", "This is a commited datatype");
+ assert(ret>=0);
+
+ ret=H5Tclose(tid);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+ ret=H5Sclose(sid);
+ assert(ret>=0);
+
+ ret=H5Pclose(dcpl);
+ assert(ret>=0);
+
+ ret=H5Fclose(fid);
+ assert(ret>=0);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: myfilter
+ *
+ * Purpose: filter operation callback function; the filter does nothing
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+myfilter(unsigned int UNUSED flags, size_t UNUSED cd_nelmts,
+      const unsigned int UNUSED *cd_values, size_t nbytes,
+      size_t UNUSED *buf_size, void UNUSED **buf)
+{
+ return nbytes;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: set_local_myfilter
+ *
+ * Purpose: filter operation "set local" callback
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static herr_t
+set_local_myfilter(hid_t dcpl_id, hid_t UNUSED type_id, hid_t UNUSED space_id)
+{
+ unsigned flags;                /* Filter flags */
+ size_t   cd_nelmts=0;          /* Number of filter parameters */
+ unsigned cd_values[2]={5,6};   /* Filter parameters */
+
+ /* Get the filter's current parameters */
+ if(H5Pget_filter_by_id(dcpl_id,MYFILTER_ID,&flags,&cd_nelmts,cd_values,0,NULL)<0)
+  return(FAIL);
+
+ cd_nelmts=2;
+
+ /* Modify the filter's parameters for this dataset */
+ if(H5Pmodify_filter(dcpl_id,MYFILTER_ID,flags, cd_nelmts,cd_values)<0)
+  return(FAIL);
+
+ return(SUCCEED);
+}
+
+/*-------------------------------------------------------------------------
+ * Function: gent_fcontents
+ *
+ * Purpose: generate several files to list its contents
+ *
+ *-------------------------------------------------------------------------
+ */
+static void gent_fcontents(void)
+{
+ hid_t    fid;   /* file id */
+ hid_t    gid1;  /* group ID */
+ hid_t    tid;   /* datatype ID */
+ hsize_t  dims[1]={4};
+ int      buf[4]={1,2,3,4};
+ int      ret;
+
+
+ /* create a file */
+ fid  = H5Fcreate(FILE46, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+ assert(fid>=0);
+
+
+ write_dset(fid,1,dims,"dset",H5T_NATIVE_INT,buf);
+
+
+/*-------------------------------------------------------------------------
+ * links
+ *-------------------------------------------------------------------------
+ */
+
+
+ /* hard link to "dset" */
+ gid1 = H5Gcreate (fid, "/g1", 0);
+ H5Glink (gid1, H5G_LINK_HARD, "/dset", "dset1");
+ H5Gclose(gid1);
+
+
+ /* hard link to "dset" */
+ gid1 = H5Gcreate (fid, "/g2", 0);
+ H5Glink (gid1, H5G_LINK_HARD, "/dset", "dset2");
+ H5Gclose(gid1);
+
+
+ /* hard link to "g2" */
+ gid1 = H5Gopen(fid, "/g1");
+ H5Glink (gid1, H5G_LINK_HARD, "/g2", "g1.1");
+ H5Gclose(gid1);
+
+
+ /* hard link to "dset" */
+ ret=H5Glink (fid, H5G_LINK_HARD, "/dset", "dset3");
+ assert(ret>=0);
+
+
+ /* hard link to "dset" */
+ ret=H5Glink (fid, H5G_LINK_HARD, "/dset", "dset4");
+ assert(ret>=0);
+
+
+ /* soft link to itself */
+ ret=H5Glink (fid, H5G_LINK_SOFT, "mylink", "mylink");
+ assert(ret>=0);
+
+
+ /* soft link to "dset" */
+ ret=H5Glink (fid, H5G_LINK_SOFT, "/dset", "softlink");
+ assert(ret>=0);
+
+
+
+/*-------------------------------------------------------------------------
+ * datatypes
+ *-------------------------------------------------------------------------
+ */
+ tid=H5Tcopy(H5T_NATIVE_INT);
+ ret=H5Tcommit(fid, "mytype", tid);
+ assert(ret>=0);
+ ret=H5Tclose(tid);
+ assert(ret>=0);
+
+
+ /* no name datatype */
+ tid=H5Tcopy(H5T_NATIVE_INT);
+ ret=H5Tcommit(fid, "mytype2", tid);
+ assert(ret>=0);
+ write_dset(fid,1,dims,"dsetmytype2",tid,buf);
+ ret=H5Gunlink(fid,"mytype2");
+ assert(ret>=0);
+ ret=H5Tclose(tid);
+ assert(ret>=0);
+
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+
+
+ ret=H5Fclose(fid);
+ assert(ret>=0);
+
+
+ /* create a file for the bootblock test */
+ fid  = H5Fcreate(FILE47, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+ assert(fid>=0);
+
+
+ ret=H5Fclose(fid);
+ assert(ret>=0);
+}
+
+/*-------------------------------------------------------------------------
+ * Function: gent_fvalues
+ *
+ * Purpose: generate a file for the fill values test
+ *
+ *-------------------------------------------------------------------------
+ */
+static void gent_fvalues(void)
+{
+ /* compound datatype */
+ typedef struct c_t
+ {
+  char   a;
+  double b;
+ } c_t;
+
+
+ hid_t      fid;  /* file id */
+ hid_t      dcpl; /* dataset creation property list */
+ hid_t      sid;  /* dataspace ID */
+ hid_t      tid;  /* datatype ID */
+ hid_t      did;  /* datasetID */
+ hsize_t    dims[1]={2};
+ int        buf[2]={1,2};                   /* integer */
+ int        fillval1=-99;                   /* integer fill value */
+ c_t        buf2[2]={{1,2},{3,4}};          /* compound */
+ c_t        fillval2[1]={{1,2}};            /* compound fill value */
+ hvl_t      buf3[2];                        /* vlen */
+ hvl_t      fillval3;                       /* vlen fill value */
+ hsize_t    dimarray[1]={3};                /* array dimension */
+ int        buf4[2][3]= {{1,2,3},{4,5,6}};  /* array */
+ int        ret;
+
+ /* create a file */
+ fid  = H5Fcreate(FILE48, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+ assert(fid>=0);
+
+ /* create a space */
+ sid = H5Screate_simple(1, dims, NULL);
+
+ /* create a dataset creation property list */
+ dcpl = H5Pcreate(H5P_DATASET_CREATE);
+
+/*-------------------------------------------------------------------------
+ * make datasets with fill value combinations
+ * H5D_FILL_TIME_IFSET
+ *-------------------------------------------------------------------------
+ */
+ ret=H5Pset_fill_time(dcpl, H5D_FILL_TIME_IFSET);
+ assert(ret>=0);
+
+ ret=H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval1);
+ assert(ret>=0);
+
+ ret=make_dset(fid,"fill_time_ifset",sid,H5T_NATIVE_INT,dcpl,buf);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * H5D_FILL_TIME_NEVER
+ *-------------------------------------------------------------------------
+ */
+ ret=H5Pset_fill_time(dcpl, H5D_FILL_TIME_NEVER);
+ assert(ret>=0);
+
+ ret=H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval1);
+ assert(ret>=0);
+
+ ret=make_dset(fid,"fill_time_never",sid,H5T_NATIVE_INT,dcpl,buf);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * H5D_FILL_TIME_ALLOC
+ *-------------------------------------------------------------------------
+ */
+ ret=H5Pset_fill_time(dcpl, H5D_FILL_TIME_ALLOC);
+ assert(ret>=0);
+
+ ret=H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillval1);
+ assert(ret>=0);
+
+ ret=make_dset(fid,"fill_time_alloc",sid,H5T_NATIVE_INT,dcpl,buf);
+ assert(ret>=0);
+
+ ret=H5Pclose(dcpl);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * dataset with no fill value
+ *-------------------------------------------------------------------------
+ */
+ write_dset(fid,1,dims,"no_fill",H5T_NATIVE_INT,buf);
+
+/*-------------------------------------------------------------------------
+ * dataset with a H5T_COMPOUND fill value
+ *-------------------------------------------------------------------------
+ */
+ dcpl = H5Pcreate(H5P_DATASET_CREATE);
+ tid = H5Tcreate (H5T_COMPOUND, sizeof(c_t));
+ H5Tinsert(tid, "a", HOFFSET(c_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(tid, "b", HOFFSET(c_t, b), H5T_NATIVE_DOUBLE);
+ ret=H5Pset_fill_value(dcpl, tid, &fillval2);
+ assert(ret>=0);
+ ret=make_dset(fid,"fill_compound",sid,tid,dcpl,buf2);
+ assert(ret>=0);
+ ret = H5Tclose(tid);
+ assert(ret>=0);
+ ret=H5Pclose(dcpl);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * dataset with a H5T_VLEN fill value
+ *-------------------------------------------------------------------------
+ */
+ buf3[0].len = 1;
+ buf3[0].p = malloc( 1 * sizeof(int));
+ ((int *)buf3[0].p)[0]=1;
+ buf3[1].len = 2;
+ buf3[1].p = malloc( 2 * sizeof(int));
+ ((int *)buf3[1].p)[0]=2;
+ ((int *)buf3[1].p)[1]=3;
+
+ tid = H5Tvlen_create(H5T_NATIVE_INT);
+ dcpl = H5Pcreate(H5P_DATASET_CREATE);
+
+ fillval3.p=NULL; fillval3.len=0;
+ ret = H5Pset_fill_value(dcpl, tid, &fillval3);
+ assert(ret>=0);
+
+ did = H5Dcreate(fid,"fill_vlen",tid,sid,H5P_DEFAULT);
+ ret = H5Dwrite(did,tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf3);
+ assert(ret>=0);
+ ret = H5Dvlen_reclaim(tid,sid,H5P_DEFAULT,buf3);
+ assert(ret>=0);
+ ret = H5Dclose(did);
+ ret = H5Tclose(tid);
+ ret = H5Pclose(dcpl);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * dataset with a H5T_ARRAY fill value
+ *-------------------------------------------------------------------------
+ */
+ tid = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_dset(fid,1,dims,"fill_array",tid,buf4);
+ ret = H5Tclose(tid);
+
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+ ret=H5Sclose(sid);
+ assert(ret>=0);
+ ret=H5Fclose(fid);
+ assert(ret>=0);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: gent_string
+ *
+ * Purpose: make several datasets for the string with escape/not escape test
+ *
+ *-------------------------------------------------------------------------
+ */
+static void gent_string(void)
+{
+  /* compound datatype */
+ typedef struct c_t
+ {
+  int    a;
+  char   str[255];
+ } c_t;
+
+ hid_t    fid;      /* file id */
+ hid_t    sid;      /* dataspace ID */
+ hid_t    tid;      /* datatype ID */
+ hid_t    str_tid;  /* datatype ID */
+ hid_t    did;      /* dataset ID */
+ char     buf1[]={"quote \"  backspace\b form feed\f new line\n tab\t new line\n carriage return\r"};
+ const char *buf2[SPACE1_DIM1]= {
+        "Four score and seven\n years ago our forefathers brought forth on this continent a new nation,",
+        "conceived in liberty\n and dedicated to the proposition that all men are created equal.",
+        "Now we are engaged\n in a great civil war,",
+        "testing whether that\n nation or any nation so conceived and so dedicated can long endure."
+        };
+ c_t      buf3 = {24, "Four score and seven\n years ago our forefathers brought forth on this continent a new nation"};
+ char     buf4[] = {"Four score and seven\n years ago our forefathers brought forth on this continent a new nation"};
+ hsize_t  dims1[]  = {1};
+ hsize_t		dims2[]  = {SPACE1_DIM1};
+ hsize_t		dims4[1];
+ int      ret;
+
+ dims4[0] = sizeof(buf4);
+
+ /* create a file */
+ fid  = H5Fcreate(FILE49, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+ assert(fid>=0);
+
+/*-------------------------------------------------------------------------
+ * str1
+ *-------------------------------------------------------------------------
+ */
+
+ tid=H5Tcopy(H5T_C_S1);
+ ret=H5Tset_size(tid, sizeof(buf1));
+ assert(ret>=0);
+ write_dset(fid,1,dims1,"str1",tid,buf1);
+ assert(ret>=0);
+ ret=H5Tclose(tid);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * str2
+ *-------------------------------------------------------------------------
+ */
+ sid = H5Screate_simple(SPACE1_RANK, dims2, NULL);
+ tid = H5Tcopy (H5T_C_S1);
+ ret = H5Tset_size (tid,H5T_VARIABLE);
+ assert(ret>=0);
+ did = H5Dcreate(fid,"str2",tid,sid,H5P_DEFAULT);
+ ret = H5Dwrite(did,tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf2);
+ assert(ret>=0);
+ ret=H5Tclose(tid);
+ assert(ret>=0);
+ ret=H5Dclose(did);
+ assert(ret>=0);
+ ret=H5Sclose(sid);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * str3
+ *-------------------------------------------------------------------------
+ */
+ sid = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+ tid = H5Tcreate (H5T_COMPOUND, sizeof(c_t));
+ str_tid = H5Tcopy( H5T_C_S1 );
+ H5Tset_size( str_tid, 255 );
+ H5Tinsert(tid, "a", HOFFSET(c_t, a), H5T_NATIVE_INT);
+ H5Tinsert(tid, "str", HOFFSET(c_t, str), str_tid );
+ ret=make_dset(fid,"str3",sid,tid,H5P_DEFAULT,&buf3);
+ assert(ret>=0);
+ ret = H5Tclose(tid);
+ assert(ret>=0);
+ ret = H5Tclose(str_tid);
+ assert(ret>=0);
+ ret=H5Sclose(sid);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * str4
+ *-------------------------------------------------------------------------
+ */
+ sid = H5Screate_simple(SPACE1_RANK, dims4, NULL);
+ ret=make_dset(fid,"str4",sid,H5T_NATIVE_CHAR,H5P_DEFAULT,buf4);
+ ret=H5Sclose(sid);
+ assert(ret>=0);
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+ ret=H5Fclose(fid);
+ assert(ret>=0);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: gent_aindices
+ *
+ * Purpose: make several datasets for the array indices tests
+ *
+ *-------------------------------------------------------------------------
+ */
+static void gent_aindices(void)
+{
+ hid_t    fid;     /* file id */
+ hid_t    gid[6];  /* group ids */
+ hsize_t  dims1[1]  = {100};
+ hsize_t  dims2[2]  = {2,100};
+ hsize_t  dims3[3]  = {2,2,100};
+ hsize_t  dims4[4]  = {2,3,4,5};
+ int      buf1[100];
+ int      buf2[2][100];
+ int      buf3[2][2][100];
+ int      buf4[2][3][4][5];
+ int      i, j, k, l, n, ret;
+
+ for (i=n=0; i<100; i++){
+  buf1[i]=n++;
+ }
+
+ for (i=n=0; i<2; i++){
+  for (j=0; j<100; j++){
+   buf2[i][j]=n++;
+  }
+ }
+ for (i=n=0; i<2; i++){
+  for (j=0; j<2; j++){
+   for (k=0; k<100; k++){
+    buf3[i][j][k]=n++;
+   }
+  }
+ }
+ for (i=n=0; i<2; i++){
+  for (j=0; j<3; j++){
+   for (k=0; k<4; k++){
+    for (l=0; l<5; l++){
+     buf4[i][j][k][l]=n++;
+    }
+   }
+  }
+ }
+
+ /* create a file */
+ fid  = H5Fcreate(FILE50, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+ assert(fid>=0);
+
+/*-------------------------------------------------------------------------
+ * root datasets
+ *-------------------------------------------------------------------------
+ */
+ write_dset(fid,1,dims1,"1d",H5T_NATIVE_INT,buf1);
+ write_dset(fid,2,dims2,"2d",H5T_NATIVE_INT,buf2);
+ write_dset(fid,3,dims3,"3d",H5T_NATIVE_INT,buf3);
+ write_dset(fid,4,dims4,"4d",H5T_NATIVE_INT,buf4);
+
+/*-------------------------------------------------------------------------
+ * test with group indentation
+ *-------------------------------------------------------------------------
+ */
+ gid[0] = H5Gcreate (fid, "/g1", 0);
+ gid[1] = H5Gcreate (fid, "g1/g2", 0);
+ gid[2] = H5Gcreate (fid, "g1/g2/g3", 0);
+ gid[3] = H5Gcreate (fid, "g1/g2/g3/g4", 0);
+ gid[4] = H5Gcreate (fid, "g1/g2/g3/g4/g5", 0);
+ gid[5] = H5Gcreate (fid, "g1/g2/g3/g4/g5/g6", 0);
+ write_dset(gid[5],1,dims1,"1d",H5T_NATIVE_INT,buf1);
+ write_dset(gid[5],2,dims2,"2d",H5T_NATIVE_INT,buf2);
+ write_dset(gid[5],3,dims3,"3d",H5T_NATIVE_INT,buf3);
+ write_dset(gid[5],4,dims4,"4d",H5T_NATIVE_INT,buf4);
+ for (i=0; i<6; i++)
+  H5Gclose(gid[i]);
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+ ret=H5Fclose(fid);
+ assert(ret>=0);
+}
+
+/*-------------------------------------------------------------------------
+ * Function: gent_longlinks
+ *
+ * Purpose: make file with very long names for objects
+ *
+ *-------------------------------------------------------------------------
+ */
+static void gent_longlinks(void)
+{
+    hid_t		fid = (-1);     /* File ID */
+    hid_t		gid = (-1);     /* Group ID */
+    hid_t		gid2 = (-1);    /* Datatype ID */
+    char               *objname = NULL; /* Name of object [Long] */
+    size_t              u;              /* Local index variable */
+
+    /* Create files */
+    fid = H5Fcreate(FILE51, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    assert(fid >= 0);
+
+    /* Create group with short name in file (used as target for hard links) */
+    gid=H5Gcreate(fid, "grp1", (size_t)0);
+    assert(gid >= 0);
+
+    /* Construct very long file name */
+    objname = HDmalloc((size_t)(F51_MAX_NAME_LEN + 1));
+    assert(objname);
+    for(u = 0; u < F51_MAX_NAME_LEN; u++)
+        objname[u] = 'a';
+    objname[F51_MAX_NAME_LEN] = '\0';
+
+    /* Create hard link to existing object */
+    assert(H5Glink2(fid, "grp1", H5G_LINK_HARD, fid, objname) >= 0);
+
+    /* Create soft link to existing object */
+    objname[0] = 'b';
+    assert(H5Glink2(fid, "grp1", H5G_LINK_SOFT, fid, objname) >= 0);
+
+    /* Create group with long name in existing group */
+    gid2=H5Gcreate(gid, objname, (size_t)0);
+    assert(gid2 >= 0);
+
+    /* Close objects */
+    assert(H5Gclose(gid2) >= 0);
+    assert(H5Gclose(gid) >= 0);
+    assert(H5Fclose(fid) >= 0);
+
+    /* Release memory */
+    HDfree(objname);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+int main(void)
+{
+    gent_group();
+    gent_attribute();
+    gent_softlink();
+    gent_dataset();
+    gent_hardlink();
+    gent_compound_dt();
+    gent_all();
+    gent_loop();
+    gent_dataset2();
+    gent_compound_dt2();
+    gent_loop2();
+    gent_many();
+    gent_str();
+    gent_str2();
+    gent_enum();
+    gent_objref();
+    gent_datareg();
+    gent_nestcomp();
+    gent_opaque();
+    gent_bitfields();
+    gent_vldatatypes();
+    gent_vldatatypes2();
+    gent_vldatatypes3();
+    gent_vldatatypes4();
+    gent_vldatatypes5();
+    gent_array1();
+    gent_array2();
+    gent_array3();
+    gent_array4();
+    gent_array5();
+    gent_array6();
+    gent_array7();
+    gent_empty();
+    gent_group_comments();
+    gent_split_file();
+    gent_family();
+    gent_multi();
+    gent_large_objname();
+    gent_vlstr();
+    gent_char();
+    gent_attr_all();
+    gent_compound_complex();
+    gent_named_dtype_attr();
+
+    gent_filters();
+    gent_fvalues();
+    gent_fcontents();
+    gent_string();
+    gent_aindices();
+    gent_longlinks();
+
+    return 0;
+}
+

Added: packages/hdf5/branches/upstream/current/tools/h5dump/testh5dump.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5dump/testh5dump.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5dump/testh5dump.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,306 @@
+#! /bin/sh
+#
+# 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.
+#
+# Tests for the h5dump tool
+
+# Determine which filters are available
+USE_FILTER_SZIP="@USE_FILTER_SZIP@"
+USE_FILTER_DEFLATE="@USE_FILTER_DEFLATE@"
+USE_FILTER_SHUFFLE="@USE_FILTER_SHUFFLE@"
+USE_FILTER_FLETCHER32="@USE_FILTER_FLETCHER32@"
+
+DUMPER=h5dump               # The tool name
+DUMPER_BIN=`pwd`/$DUMPER    # The path of the tool binary
+
+CMP='cmp -s'
+DIFF='diff -c'
+
+nerrors=0
+verbose=yes
+
+# The build (current) directory might be different than the source directory.
+if test -z "$srcdir"; then
+   srcdir=.
+fi
+
+test -d ../testfiles || mkdir ../testfiles
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Testing".
+#
+TESTING() {
+   SPACES="                                                               "
+   echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
+}
+
+# Run a test and print PASS or *FAIL*.  If a test fails then increment
+# the `nerrors' global variable and (if $verbose is set) display the
+# difference between the actual output and the expected output. The
+# expected output is given as the first argument to this function and
+# the actual output file is calculated by replacing the `.ddl' with
+# `.out'.  The actual output is not removed if $HDF5_NOCLEANUP has a
+# non-zero value.
+#
+TOOLTEST() {
+   expect="$srcdir/../testfiles/$1"
+   actual="../testfiles/`basename $1 .ddl`.out"
+   actual_err="../testfiles/`basename $1 .ddl`.err"
+   shift
+
+   # Run test.
+   TESTING $DUMPER $@
+   (
+      echo "#############################"
+      echo "Expected output for '$DUMPER $@'" 
+      echo "#############################"
+      cd $srcdir/../testfiles
+      $RUNSERIAL $DUMPER_BIN $@
+   ) >$actual 2>$actual_err
+   cat $actual_err >> $actual
+
+
+   if [ ! -f $expect ]; then
+    # Create the expect file if it doesn't yet exist.
+    echo " CREATED"
+    cp $actual $expect
+   elif $CMP $expect $actual; then
+      echo " PASSED"
+   else
+      echo "*FAILED*"
+      echo "    Expected result (*.ddl) differs from actual result (*.out)"
+      nerrors="`expr $nerrors + 1`"
+      test yes = "$verbose" && $DIFF $expect $actual |sed 's/^/    /'
+   fi
+
+   # Clean up output file
+   if test -z "$HDF5_NOCLEANUP"; then
+      rm -f $actual $actual_err
+   fi
+}
+
+
+# Print a "SKIP" message
+SKIP() {
+	 TESTING $DUMPER $@
+	  echo  " -SKIP-"
+}
+  
+
+
+##############################################################################
+##############################################################################
+###			  T H E   T E S T S                                ###
+##############################################################################
+##############################################################################
+
+# test for displaying groups
+TOOLTEST tgroup-1.ddl tgroup.h5
+# test for displaying the selected groups
+TOOLTEST tgroup-2.ddl --group=/g2 --group / -g /y tgroup.h5
+
+# test for displaying simple space datasets
+TOOLTEST tdset-1.ddl tdset.h5
+# test for displaying selected datasets
+TOOLTEST tdset-2.ddl -H -d dset1 -d /dset2 --dataset=dset3 tdset.h5
+
+# test for displaying attributes
+TOOLTEST tattr-1.ddl tattr.h5
+# test for displaying the selected attributes of string type and scalar space
+TOOLTEST tattr-2.ddl -a /attr1 --attribute /attr4 --attribute=/attr5 tattr.h5
+# test for header and error messages
+TOOLTEST tattr-3.ddl --header -a /attr2 --attribute=/attr tattr.h5
+# test for displaying shared datatype in attribute
+TOOLTEST tnamed_dtype_attr.ddl -A tnamed_dtype_attr.h5
+
+# test for displaying soft links
+TOOLTEST tslink-1.ddl tslink.h5
+# test for displaying the selected link
+TOOLTEST tslink-2.ddl -l slink2 tslink.h5
+
+# tests for hard links
+TOOLTEST thlink-1.ddl thlink.h5
+TOOLTEST thlink-2.ddl -d /g1/dset2 --dataset /dset1 --dataset=/g1/g1.1/dset3 thlink.h5
+TOOLTEST thlink-3.ddl -d /g1/g1.1/dset3 --dataset /g1/dset2 --dataset=/dset1 thlink.h5
+TOOLTEST thlink-4.ddl -g /g1 thlink.h5
+TOOLTEST thlink-5.ddl -d /dset1 -g /g2 -d /g1/dset2 thlink.h5
+
+# tests for compound data types
+TOOLTEST tcomp-1.ddl tcompound.h5
+# test for named data types
+TOOLTEST tcomp-2.ddl -t /type1 --datatype /type2 --datatype=/group1/type3 tcompound.h5
+# test for unamed type 
+TOOLTEST tcomp-3.ddl -t /#6632:0 -g /group2 tcompound.h5
+# test complicated compound datatype
+TOOLTEST tcomp-4.ddl tcompound_complex.h5
+
+#test for the nested compound type
+TOOLTEST tnestcomp-1.ddl tnestedcomp.h5
+
+# test for options
+TOOLTEST tall-1.ddl tall.h5
+TOOLTEST tall-2.ddl --header -g /g1/g1.1 -a attr2 tall.h5
+TOOLTEST tall-3.ddl -d /g2/dset2.1 -l /g1/g1.2/g1.2.1/slink tall.h5
+
+# test for loop detection
+TOOLTEST tloop-1.ddl tloop.h5
+
+# test for string 
+TOOLTEST tstr-1.ddl tstr.h5
+TOOLTEST tstr-2.ddl tstr2.h5
+
+# test for file created by Lib SAF team
+TOOLTEST tsaf.ddl tsaf.h5
+
+# test for file with variable length data
+TOOLTEST tvldtypes1.ddl tvldtypes1.h5
+TOOLTEST tvldtypes2.ddl tvldtypes2.h5
+TOOLTEST tvldtypes3.ddl tvldtypes3.h5
+TOOLTEST tvldtypes4.ddl tvldtypes4.h5
+TOOLTEST tvldtypes5.ddl tvldtypes5.h5
+
+#test for file with variable length string data
+TOOLTEST tvlstr.ddl tvlstr.h5
+
+# test for files with array data
+TOOLTEST tarray1.ddl tarray1.h5
+TOOLTEST tarray2.ddl tarray2.h5
+TOOLTEST tarray3.ddl tarray3.h5
+TOOLTEST tarray4.ddl tarray4.h5
+TOOLTEST tarray5.ddl tarray5.h5
+TOOLTEST tarray6.ddl tarray6.h5
+TOOLTEST tarray7.ddl tarray7.h5
+
+# test for files with empty data
+TOOLTEST tempty.ddl tempty.h5
+
+# test for files with groups that have comments
+TOOLTEST tgrp_comments.ddl tgrp_comments.h5
+
+# test the --filedriver flag
+#TOOLTEST tsplit_file.ddl --filedriver=split tsplit_file
+TOOLTEST tfamily.ddl --filedriver=family tfamily%05d.h5
+#TOOLTEST tmulti.ddl --filedriver=multi tmulti
+
+# test for files with group names which reach > 1024 bytes in size
+TOOLTEST tlarge_objname.ddl -w157 tlarge_objname.h5
+
+# test '-A' to suppress data but print attr's
+TOOLTEST tall-2A.ddl -A tall.h5
+
+# test '-r' to print attributes in ASCII instead of decimal
+TOOLTEST tall-2B.ddl -A -r tall.h5
+
+# test Subsetting
+TOOLTEST tall-4s.ddl --dataset=/g1/g1.1/dset1.1.1 --start=1,1 --stride=2,3 --count=3,2 --block=1,1 tall.h5
+TOOLTEST tall-5s.ddl -d "/g1/g1.1/dset1.1.2[0;2;10;]" tall.h5
+TOOLTEST tdset-3s.ddl -d "/dset1[1,1;;;]" tdset.h5
+TOOLTEST tdset2-1s.ddl -d "/dset1[;3,2;4,4;1,4]" tdset2.h5
+
+# test printing characters in ASCII instead of decimal
+TOOLTEST tchar1.ddl -r tchar.h5
+
+# test failure handling
+# Missing file name
+TOOLTEST tnofilename.ddl
+
+# rev. 2004
+
+# tests for super block
+TOOLTEST tboot1.ddl -H -B -d dset tfcontents1.h5
+TOOLTEST tboot2.ddl -B tfcontents2.h5
+
+# test -p with a non existing dataset
+TOOLTEST tperror.ddl -p -d bogus tfcontents1.h5
+
+# test for file contents
+TOOLTEST tcontents.ddl -n tfcontents1.h5
+
+# tests for storage layout
+# compact
+TOOLTEST tcompact.ddl -H -p -d compact tfilters.h5
+# contiguous
+TOOLTEST tcontiguos.ddl -H -p -d contiguous tfilters.h5
+# chunked
+TOOLTEST tchunked.ddl -H -p -d chunked tfilters.h5
+# external 
+TOOLTEST texternal.ddl -H -p -d external tfilters.h5
+
+# fill values
+TOOLTEST tfill.ddl -p tfvalues.h5
+
+# several datatype, with references , print path
+TOOLTEST treference.ddl  tattr2.h5
+
+# escape/not escape non printable characters
+TOOLTEST tstringe.ddl -e tstr3.h5
+TOOLTEST tstring.ddl tstr3.h5
+# char data as ASCII with non escape
+TOOLTEST tstring2.ddl -r -d str4 tstr3.h5
+
+# array indices print/not print
+TOOLTEST tindicesyes.ddl taindices.h5
+TOOLTEST tindicesno.ddl -y taindices.h5
+
+
+# tests for filters
+# SZIP
+option="-H -p -d szip tfilters.h5"
+if test $USE_FILTER_SZIP != "yes"; then
+ SKIP $option
+else
+TOOLTEST tszip.ddl $option
+fi
+# deflate
+option="-H -p -d deflate tfilters.h5"
+if test $USE_FILTER_DEFLATE != "yes"; then
+ SKIP $option
+else
+ TOOLTEST tdeflate.ddl $option
+fi
+# shuffle
+option="-H -p -d shuffle tfilters.h5"
+if test $USE_FILTER_SHUFFLE != "yes"; then
+ SKIP $option
+else
+ TOOLTEST tshuffle.ddl $option
+fi
+# fletcher32
+option="-H -p -d fletcher32  tfilters.h5"
+if test $USE_FILTER_FLETCHER32 != "yes"; then
+ SKIP $option
+else
+ TOOLTEST tfletcher32.ddl $option
+fi
+# all
+option="-H -p -d all  tfilters.h5"
+if test $USE_FILTER_FLETCHER32 != "yes" -o  $USE_FILTER_SZIP != "yes" -o  $USE_FILTER_DEFLATE != "yes" -o  $USE_FILTER_SHUFFLE != "yes" ; then
+ SKIP $option
+else
+ TOOLTEST tallfilters.ddl $option
+fi
+# user defined
+TOOLTEST tuserfilter.ddl -H  -p -d myfilter  tfilters.h5
+
+# test for displaying objects with very long names
+TOOLTEST tlonglinks.ddl tlonglinks.h5
+
+
+if test $nerrors -eq 0 ; then
+   echo "All $DUMPER tests passed."
+fi
+
+exit $nerrors
+
+
+

Added: packages/hdf5/branches/upstream/current/tools/h5dump/testh5dumpxml.sh
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5dump/testh5dumpxml.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5dump/testh5dumpxml.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,162 @@
+#! /bin/sh
+#
+# 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.
+#
+# Tests for the h5dump tool
+
+DUMPER=h5dump               # The tool name
+DUMPER_BIN=`pwd`/$DUMPER    # The path of the tool binary
+
+CMP='cmp -s'
+DIFF='diff -c'
+
+nerrors=0
+verbose=yes
+
+# The build (current) directory might be different than the source directory.
+if test -z "$srcdir"; then
+   srcdir=.
+fi
+
+test -d ../testfiles || mkdir ../testfiles
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Testing".
+#
+TESTING() {
+   SPACES="                                                               "
+   echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
+}
+
+# Run a test and print PASS or *FAIL*.  If a test fails then increment
+# the `nerrors' global variable and (if $verbose is set) display the
+# difference between the actual output and the expected output. The
+# expected output is given as the first argument to this function and
+# the actual output file is calculated by replacing the `.ddl' with
+# `.out'.  The actual output is not removed if $HDF5_NOCLEANUP has a
+# non-zero value.
+#
+TOOLTEST() {
+   expect="$srcdir/../testfiles/$1"
+   actual="../testfiles/`basename $1 .ddl`.out"
+   actual_err="../testfiles/`basename $1 .ddl`.err"
+   shift
+
+   # Run test.
+   TESTING $DUMPER $@
+   (
+      echo "#############################"
+      echo "Expected output for '$DUMPER $@'" 
+      echo "#############################"
+      cd $srcdir/../testfiles
+      $RUNSERIAL $DUMPER_BIN $@
+   ) >$actual 2>$actual_err
+   cat $actual_err >> $actual
+
+
+   if [ ! -f $expect ]; then
+    # Create the expect file if it doesn't yet exist.
+    echo " CREATED"
+     cp $actual $expect		  
+   elif  $CMP $expect $actual; then
+      echo " PASSED"
+   else
+      echo "*FAILED*"
+      echo "    Expected result (*.ddl) differs from actual result (*.out)"
+      nerrors="`expr $nerrors + 1`"
+      test yes = "$verbose" && $DIFF $expect $actual |sed 's/^/    /'
+   fi
+
+   # Clean up output file
+   if test -z "$HDF5_NOCLEANUP"; then
+      rm -f $actual $actual_err
+   fi
+}
+
+##############################################################################
+##############################################################################
+###			  T H E   T E S T S                                ###
+##############################################################################
+##############################################################################
+
+# test XML
+TOOLTEST tall.h5.xml --xml tall.h5
+TOOLTEST tattr.h5.xml --xml tattr.h5
+TOOLTEST tbitfields.h5.xml --xml tbitfields.h5
+TOOLTEST tcompound.h5.xml --xml tcompound.h5
+TOOLTEST tcompound2.h5.xml --xml tcompound2.h5
+TOOLTEST tdatareg.h5.xml --xml tdatareg.h5
+TOOLTEST tdset.h5.xml --xml tdset.h5
+TOOLTEST tdset2.h5.xml --xml tdset2.h5
+TOOLTEST tenum.h5.xml --xml tenum.h5
+TOOLTEST tgroup.h5.xml --xml tgroup.h5
+TOOLTEST thlink.h5.xml --xml thlink.h5
+TOOLTEST tloop.h5.xml --xml tloop.h5
+TOOLTEST tloop2.h5.xml --xml tloop2.h5
+TOOLTEST tmany.h5.xml --xml tmany.h5
+TOOLTEST tnestedcomp.h5.xml --xml tnestedcomp.h5
+TOOLTEST tcompound_complex.h5.xml --xml tcompound_complex.h5
+TOOLTEST tobjref.h5.xml --xml tobjref.h5
+TOOLTEST topaque.h5.xml --xml topaque.h5
+TOOLTEST tslink.h5.xml --xml tslink.h5
+TOOLTEST tstr.h5.xml --xml tstr.h5
+TOOLTEST tstr2.h5.xml --xml tstr2.h5
+TOOLTEST tref.h5.xml --xml tref.h5
+TOOLTEST tname-amp.h5.xml --xml tname-amp.h5
+TOOLTEST tname-apos.h5.xml --xml tname-apos.h5
+TOOLTEST tname-gt.h5.xml --xml tname-gt.h5
+TOOLTEST tname-lt.h5.xml --xml tname-lt.h5
+TOOLTEST tname-quot.h5.xml --xml tname-quot.h5
+TOOLTEST tname-sp.h5.xml --xml tname-sp.h5
+TOOLTEST tstring.h5.xml --xml tstring.h5
+TOOLTEST tstring-at.h5.xml --xml tstring-at.h5
+TOOLTEST tref-escapes.h5.xml --xml tref-escapes.h5
+TOOLTEST tref-escapes-at.h5.xml --xml tref-escapes-at.h5
+TOOLTEST tnodata.h5.xml --xml tnodata.h5
+TOOLTEST tarray1.h5.xml --xml tarray1.h5
+TOOLTEST tarray2.h5.xml --xml tarray2.h5
+TOOLTEST tarray3.h5.xml --xml tarray3.h5
+TOOLTEST tarray6.h5.xml --xml tarray6.h5
+TOOLTEST tarray7.h5.xml --xml tarray7.h5
+TOOLTEST tvldtypes1.h5.xml --xml tvldtypes1.h5
+TOOLTEST tvldtypes2.h5.xml --xml tvldtypes2.h5
+TOOLTEST tvldtypes3.h5.xml --xml tvldtypes3.h5
+TOOLTEST tvldtypes4.h5.xml --xml tvldtypes4.h5
+TOOLTEST tvldtypes5.h5.xml --xml tvldtypes5.h5
+TOOLTEST tvlstr.h5.xml --xml tvlstr.h5
+TOOLTEST tsaf.h5.xml --xml tsaf.h5
+TOOLTEST tempty.h5.xml --xml tempty.h5
+TOOLTEST tnamed_dtype_attr.h5.xml --xml tnamed_dtype_attr.h5
+
+# other options for xml
+
+TOOLTEST tempty-dtd.h5.xml --xml --use-dtd tempty.h5
+TOOLTEST tempty-dtd-2.h5.xml --xml -u tempty.h5
+TOOLTEST tempty-nons.h5.xml --xml -X ":" tempty.h5
+TOOLTEST tempty-nons-2.h5.xml --xml --xml-ns=":" tempty.h5
+
+## Some of these combinations are syntactically correct but
+##  the URLs are dummies 
+TOOLTEST tempty-ns.h5.xml --xml -X "thing:" tempty.h5
+TOOLTEST tempty-ns-2.h5.xml --xml --xml-ns="thing:" tempty.h5
+TOOLTEST tempty-nons-uri.h5.xml --xml --xml-ns=":" --xml-dtd="http://somewhere.net" tempty.h5
+TOOLTEST tempty-dtd-uri.h5.xml --xml --use-dtd --xml-dtd="http://somewhere.net" tempty.h5
+
+TOOLTEST tall-2A.h5.xml --xml -A tall.h5
+
+
+if test $nerrors -eq 0 ; then
+   echo "All $DUMPER tests passed."
+fi
+
+exit $nerrors


Property changes on: packages/hdf5/branches/upstream/current/tools/h5dump/testh5dumpxml.sh
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,21 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+h5import.lo: \
+   $(srcdir)/h5import.c \
+   $(srcdir)/h5import.h
+h5importtest.lo: \
+   $(srcdir)/h5importtest.c

Added: packages/hdf5/branches/upstream/current/tools/h5import/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,77 @@
+##
+## 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.
+##
+## HDF5 Library Makefile(.in)
+## 
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Add include directory to the C preprocessor flags, add -lh5tools and
+## -lhdf5 to the list of libraries.
+##
+CPPFLAGS=-I. -I$(srcdir) -I$(top_builddir)/src -I$(top_srcdir)/src  \
+         -I$(top_srcdir)/tools/lib @CPPFLAGS@
+
+## Test programs and scripts.
+##
+TEST_PROGS= h5importtest
+TEST_SCRIPTS=$(srcdir)/h5importtestutil.sh
+
+## These are our main targets: library and tools.
+##
+LIBTOOLS=../lib/libh5tools.la
+LIBHDF5=$(top_builddir)/src/libhdf5.la
+
+PUB_PROGS=h5import
+PROGS=$(PUB_PROGS) $(TEST_PROGS) h5importtest
+
+## Source and object files for the library; do not install
+##
+LIB_SRC=
+LIB_OBJ=$(LIB_SRC:.c=.lo)
+PUB_LIB=
+
+## Source and object files for programs...
+##
+PROG_SRC=h5import.c h5importtest.c
+PROG_OBJ=$(PROG_SRC:.c=.lo)
+
+PRIVATE_HDR=
+
+## Source and object files for the tests
+##
+TEST_SRC=
+TEST_OBJ=$(TEST_SRC:.c=.lo)
+
+## Programs have to be built before they can be tested!
+##
+check test _test: $(PROGS)
+
+## How to build the programs...They all depend on the hdf5 library and
+## the tools library compiled in this directory.
+##
+$(PROGS): $(LIBTOOLS) $(LIBHDF5)
+
+h5import: h5import.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ h5import.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+h5importtest: h5importtest.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ h5importtest.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+ at CONCLUDE@
+
+
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/Makefile.in
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/h5import.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/h5import.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/h5import.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2659 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#include <hdf5.h>
+#include <H5private.h>
+#include  <stdio.h>
+#ifndef  MIPSEL
+#include  <math.h>
+#endif  /* MIPSEL */
+#include  <string.h>
+#include  <ctype.h>
+#include  "h5import.h"
+
+int main(int argc, char *argv[])
+{
+  struct  Options opt;
+  int    outfile_named = FALSE;
+  int    token;
+  int    i;
+  int    state = 0;
+  struct Input *in=NULL;
+
+  const char *err1 = "Invalid number of arguments:  %d.\n";
+  const char *err2 = "Error in state table.\n";
+  const char *err3 = "No output file given.\n";
+  const char *err4 = "Program aborted.\n";
+  const char *err5 = "Invalid path %s.\n";
+  const char *err6 = "Invalid dimensions - %s.\n";
+  const char *err7 = "Invalid type of data - %s.\n";
+  const char *err8 = "Invalid size of data - %s.\n";
+  const char *err9 = "Cannot specify more than 30 input files in one call to h5import.\n";
+
+  (void) setvbuf(stderr, (char *) NULL, _IOLBF, 0);
+  (void) setvbuf(stdout, (char *) NULL, _IOLBF, 0);
+
+ /*
+  * validate the number of command line arguments
+  */
+
+  if (argc < 2)
+  {
+    (void) fprintf(stderr, err1, argc);
+    usage(argv[0]);
+    goto err;
+  }
+
+  /* Initialize the file count to 0 */
+  opt.fcount = 0;
+
+ /*
+  * parse the command line
+  */
+
+  for (i = 1; i < argc; i++)
+  {
+    if ((token = gtoken(argv[i])) == ERR)
+    {
+      usage(argv[0]);
+      goto err;
+    }
+
+    state = state_table[state][token];
+
+    switch (state)
+    {
+
+      case 1: /* counting input files */
+				if (opt.fcount < 29) {
+	        (void) HDstrcpy(opt.infiles[opt.fcount].datafile, argv[i]);
+					in = &(opt.infiles[opt.fcount].in);
+					opt.infiles[opt.fcount].config = 0;
+					setDefaultValues(in, opt.fcount);
+	        opt.fcount++;
+				}
+				else {
+					(void) fprintf(stderr, err9, argv[i]);
+					goto err;
+				}
+
+      break;
+
+      case 2: /* -c found; look for configfile */
+      break;
+
+      case 3: /* get configfile name */
+        (void) HDstrcpy(opt.infiles[opt.fcount-1].configfile, argv[i]);
+	opt.infiles[opt.fcount-1].config = 1;
+      break;
+
+      case 4: /* -o found; look for outfile */
+      break;
+
+      case 5: /* get outfile found */
+        (void) HDstrcpy(opt.outfile, argv[i]);
+        outfile_named = TRUE;
+      break;
+
+      case 6:    /* -h found; help, then exit */
+        help(argv[0]);
+        exit(0);
+      break;
+
+      case 7:    /* -d found; look for dimensions */
+      break;
+
+      case 8:    /* read dimensions */
+	if (parseDimensions(in, argv[i]) == -1)
+        {
+          (void) fprintf(stderr, err6, argv[i]);
+					goto err;
+        }
+      break;
+
+      case 9:    /* -p found; look for path name */
+      break;
+
+      case 10:    /* read path name */
+ 	if (parsePathInfo(&in->path, argv[i]) == -1)
+        {
+          (void) fprintf(stderr, err5, argv[i]);
+					goto err;
+        }
+      break;
+
+      case 11:    /* -t found; look for data type */
+      break;
+
+      case 12:    /* read data type */
+        if (getInputClass(in, argv[i]) == -1)
+        {
+          (void) fprintf(stderr, err7, argv[i]);
+					goto err;
+        }
+
+        if (in->inputClass == 0 || in->inputClass == 4)
+            in->outputClass = 0;
+        if (in->inputClass == 1 || in->inputClass == 2 || in->inputClass == 3)
+            in->outputClass = 1;
+        if (in->inputClass == 6 || in->inputClass == 7)
+            in->outputClass = 2;
+      break;
+
+      case 13:    /* -s found; look for data size */
+      break;
+
+      case 14:    /* read data size */
+        if (getInputSize(in, (int)HDstrtol(argv[i], NULL, BASE_10)) == -1)
+        {
+          (void) fprintf(stderr, err8, argv[i]);
+					goto err;
+        }
+        /*set default value for output-size */
+        in->outputSize = in->inputSize;
+      break;
+
+      case ERR:   /* command syntax error */
+      default:
+        (void) fprintf(stderr, err2);
+        usage(argv[0]);
+        goto err;
+    }
+  }
+
+  if (FALSE == outfile_named)
+  {
+    (void) fprintf(stderr, err3);
+    usage(argv[0]);
+    goto err;
+  }
+
+  if (process(&opt) == -1)
+    goto err;
+
+  return(0);
+  err:
+    (void) fprintf(stderr, err4);
+    return(-1);
+}
+
+static int
+gtoken(char *s)
+{
+  size_t      len;
+  int         token;
+
+  const char *err1 = "Illegal argument: %s.\n";
+
+  /*
+   * identify the token type
+   */
+  if (s[0] == '-')
+  {     /* option name (or negative number) */
+    token = ERR;
+    len = HDstrlen(&s[1]);
+    switch (s[1])
+    {
+      case 'o':
+        if (!HDstrncmp("outfile", &s[1], len))
+          token = OPT_o;
+      break;
+
+      case 'c':
+        if (!HDstrncmp("config", &s[1], len))
+          token = OPT_c;
+      break;
+
+      case 'h':
+        if (!HDstrncmp("help", &s[1], len))
+          token = OPT_h;
+      break;
+
+      case 'd':
+        if (!HDstrncmp("dims", &s[1], len))
+          token = OPT_d;
+      break;
+
+      case 'p':
+        if (!HDstrncmp("path", &s[1], len))
+          token = OPT_p;
+      break;
+
+      case 't':
+        if (!HDstrncmp("type", &s[1], len))
+          token = OPT_t;
+      break;
+
+      case 's':
+        if (!HDstrncmp("size", &s[1], len))
+          token = OPT_s;
+      break;
+    }
+
+    if (token == ERR)
+      (void) fprintf(stderr, err1, s);
+  }
+  else    /* filename */
+  {
+    token = FILNAME;
+  }
+  return (token);
+}
+
+static int
+processDataFile(char *infile, struct Input *in, FILE **strm)
+{
+  const char *err1 = "Unable to open the input file  %s for reading.\n";
+  const char *err2 = "Error in allocating integer data storage.\n";
+  const char *err3 = "Error in allocating floating-point data storage.\n";
+  const char *err4 = "Error in reading integer data.\n";
+  const char *err5 = "Error in reading floating-point data.\n";
+  const char *err6 = "Error in allocating unsigned integer data storage.\n";
+  const char *err7 = "Error in reading unsigned integer data.\n";
+  const char *err10 = "Unrecognized input class type.\n";
+
+  if ((*strm = fopen(infile, "r")) == NULL)
+  {
+      (void) fprintf(stderr, err1, infile);
+      return(-1);
+  }
+
+  switch(in->inputClass)
+  {
+    case 0: /*  TEXTIN */
+    case 4: /*  IN  */
+      if (allocateIntegerStorage(in) == -1)
+      {
+        (void) fprintf(stderr, err2, infile);
+        return(-1);
+      }
+
+      if (readIntegerData(strm, in) == -1)
+      {
+        (void) fprintf(stderr, err4, infile);
+        return(-1);
+      }
+    break;
+
+    case 1: /*  TEXTFP */
+    case 2: /*  TEXTFPE  */
+    case 3: /*  FP  */
+      if (allocateFloatStorage(in) == -1)
+      {
+        (void) fprintf(stderr, err3, infile);
+        return(-1);
+
+      }
+
+      if (readFloatData(strm, in) == -1)
+      {
+        (void) fprintf(stderr, err5, infile);
+          return(-1);
+      }
+    break;
+
+    case 5: /*  STR  */
+    break;
+
+    case 6: /* TEXTUIN */
+    case 7: /* UIN */
+      if (allocateUIntegerStorage(in) == -1)
+      {
+        (void) fprintf(stderr, err6, infile);
+          return(-1);
+      }
+      if (readUIntegerData(strm, in) == -1)
+      {
+        (void) fprintf(stderr, err7, infile);
+         return(-1);
+      }
+    break;
+
+    default:
+        (void) fprintf(stderr, err10);
+        return(-1);
+  }
+  return (0);
+}
+
+static int
+readIntegerData(FILE **strm, struct Input *in)
+{
+  H5DT_INT8 *in08;
+  H5DT_INT16 *in16, temp;
+  H5DT_INT32 *in32;
+#ifndef WIN32
+  H5DT_INT64 *in64;
+  char buffer[256];
+#endif
+  hsize_t len=1;
+  hsize_t i;
+  int j;
+
+  const char *err1 = "Unable to get integer value from file.\n";
+  const char *err2 = "Unrecongnized input class type.\n";
+  const char *err3 = "Invalid input size.\n";
+
+  for (j=0; j<in->rank;j++)
+    len *= in->sizeOfDimension[j];
+
+  switch(in->inputSize)
+  {
+    case 8:
+      switch(in->inputClass)
+      {
+        case 0: /* TEXTIN */
+          in08 = (H5DT_INT8 *) in->data;
+          for (i = 0; i < len; i++, in08++)
+          {
+            if (fscanf(*strm, "%hd", &temp) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+            (*in08) = (H5DT_INT8)temp;
+          }
+        break;
+
+        case 4: /* IN */
+          in08 = (H5DT_INT8 *) in->data;
+          for (i = 0; i < len; i++, in08++)
+          {
+            if (fread((char *) in08, sizeof(H5DT_INT8), 1, *strm) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+        break;
+
+        default:
+          (void) fprintf(stderr, err2);
+          return (-1);
+      }
+    break;
+
+    case 16:
+      in16 = (H5DT_INT16 *) in->data;
+      switch(in->inputClass)
+      {
+        case 0: /* TEXTIN */
+          for (i = 0; i < len; i++, in16++)
+          {
+            if (fscanf(*strm, "%hd", in16) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+          in16 = (H5DT_INT16 *) in->data;
+        break;
+
+        case 4: /* IN */
+          for (i = 0; i < len; i++, in16++)
+          {
+            if (fread((char *) in16, sizeof(H5DT_INT16), 1, *strm) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+        break;
+
+        default:
+          (void) fprintf(stderr, err2);
+          return (-1);
+      }
+    break;
+
+    case 32:
+      in32 = (H5DT_INT32 *) in->data;
+      switch(in->inputClass)
+      {
+        case 0: /* TEXTIN */
+          for (i = 0; i < len; i++, in32++)
+          {
+            if (fscanf(*strm, "%d", in32) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+        break;
+
+        case 4: /* IN */
+          for (i = 0; i < len; i++, in32++)
+          {
+            if (fread((char *) in32, sizeof(H5DT_INT32), 1, *strm) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+        break;
+
+        default:
+          (void) fprintf(stderr, err2);
+          return (-1);
+      }
+    break;
+
+#ifndef WIN32
+    case 64:
+      in64 = (H5DT_INT64 *) in->data;
+      switch(in->inputClass)
+      {
+        case 0: /* TEXTIN */
+          for (i = 0; i < len; i++, in64++)
+          {
+            if (fscanf(*strm, "%s", buffer) < 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+            *in64 = (H5DT_INT64) HDstrtoll(buffer, NULL, 10);
+          }
+        break;
+
+        case 4: /* IN */
+          for (i = 0; i < len; i++, in64++)
+          {
+            if (fread((char *) in64, sizeof(H5DT_INT64), 1, *strm) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+        break;
+
+        default:
+          (void) fprintf(stderr, err2);
+          return (-1);
+      }
+  	  break;
+#endif /* ifndef WIN32 */
+
+    default:
+      (void) fprintf(stderr, err3);
+      break;
+  }
+  return(0);
+}
+
+static int
+readUIntegerData(FILE **strm, struct Input *in)
+{
+  H5DT_UINT8 *in08;
+  H5DT_UINT16 *in16, temp;
+  H5DT_UINT32 *in32;
+#ifndef WIN32
+  H5DT_UINT64 *in64;
+  char buffer[256];
+#endif
+  hsize_t len=1;
+  hsize_t i;
+  int j;
+  const char *err1 = "Unable to get unsigned integer value from file.\n";
+  const char *err2 = "Unrecongnized input class type.\n";
+  const char *err3 = "Invalid input size.\n";
+
+  for (j=0; j<in->rank;j++)
+    len *= in->sizeOfDimension[j];
+
+  switch(in->inputSize)
+  {
+    case 8:
+      switch(in->inputClass)
+      {
+        case 6: /* TEXTUIN */
+          in08 = (H5DT_UINT8 *) in->data;
+          for (i = 0; i < len; i++, in08++)
+          {
+            if (fscanf(*strm, "%hu", &temp) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+            (*in08) = (H5DT_UINT8)temp;
+          }
+        break;
+
+        case 7: /* UIN */
+          in08 = (H5DT_UINT8 *) in->data;
+          for (i = 0; i < len; i++, in08++)
+          {
+            if (fread((char *) in08, sizeof(H5DT_UINT8), 1, *strm) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+        break;
+
+        default:
+          (void) fprintf(stderr, err2);
+          return (-1);
+      }
+    break;
+
+    case 16:
+      in16 = (H5DT_UINT16 *) in->data;
+      switch(in->inputClass)
+      {
+        case 6: /* TEXTUIN */
+          for (i = 0; i < len; i++, in16++)
+          {
+            if (fscanf(*strm, "%hu", in16) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+        break;
+
+        case 7: /* UIN */
+          for (i = 0; i < len; i++, in16++)
+          {
+            if (fread((char *) in16, sizeof(H5DT_UINT16), 1, *strm) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+        break;
+
+        default:
+          (void) fprintf(stderr, err2);
+          return (-1);
+      }
+    break;
+
+    case 32:
+      in32 = (H5DT_UINT32 *) in->data;
+      switch(in->inputClass)
+      {
+        case 6: /* TEXTUIN */
+          for (i = 0; i < len; i++, in32++)
+          {
+            if (fscanf(*strm, "%u", in32) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+        break;
+
+        case 7: /* UIN */
+          for (i = 0; i < len; i++, in32++)
+          {
+            if (fread((char *) in32, sizeof(H5DT_UINT32), 1, *strm) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+        break;
+
+        default:
+          (void) fprintf(stderr, err2);
+          return (-1);
+      }
+    break;
+
+#ifndef WIN32
+    case 64:
+      in64 = (H5DT_UINT64 *) in->data;
+      switch(in->inputClass)
+      {
+        case 6: /* TEXTUIN */
+          for (i = 0; i < len; i++, in64++)
+          {
+            if (fscanf(*strm, "%s", buffer) < 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+            *in64 = (H5DT_UINT64) HDstrtoll(buffer, NULL, 10);
+          }
+        break;
+
+        case 7: /* UIN */
+          for (i = 0; i < len; i++, in64++)
+          {
+            if (fread((char *) in64, sizeof(H5DT_UINT64), 1, *strm) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+        break;
+
+        default:
+          (void) fprintf(stderr, err2);
+          return (-1);
+      }
+    break;
+#endif /* ifndef WIN32 */
+
+    default:
+      (void) fprintf(stderr, err3);
+      break;
+  }
+  return(0);
+}
+
+static int
+readFloatData(FILE **strm, struct Input *in)
+{
+  H5DT_FLOAT32 *fp32;
+  H5DT_FLOAT64 *fp64;
+
+  hsize_t len=1;
+  hsize_t i;
+  int j;
+  const char *err1 = "Unable to get integer value from file.\n";
+  const char *err2 = "Unrecongnized input class type.\n";
+  const char *err3 = "Invalid input size type.\n";
+
+  for (j=0; j<in->rank;j++)
+    len *= in->sizeOfDimension[j];
+
+  switch(in->inputSize)
+  {
+    case 32:
+      fp32 = (H5DT_FLOAT32 *) in->data;
+      switch(in->inputClass)
+      {
+        case 1: /* TEXTFP */
+          for (i = 0; i < len; i++, fp32++)
+          {
+            if (fscanf(*strm, "%f", fp32) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+
+          fp32 = (H5DT_FLOAT32 *) in->data;
+        break;
+
+        case 2: /*TEXTFPE */
+        break;
+
+        case 3: /* FP */
+          for (i = 0; i < len; i++, fp32++)
+          {
+            if (fread((char *) fp32, sizeof(H5DT_FLOAT32), 1, *strm) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+        break;
+
+        default:
+          (void) fprintf(stderr, err2);
+          return (-1);
+      }
+    break;
+
+    case 64:
+      fp64 = (H5DT_FLOAT64 *) in->data;
+      switch(in->inputClass)
+      {
+        case 1: /* TEXTFP */
+          for (i = 0; i < len; i++, fp64++)
+          {
+            if (fscanf(*strm, "%lf", fp64) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+
+          fp64 = (H5DT_FLOAT64 *) in->data;
+        break;
+
+        case 2: /*TEXTFPE */
+        break;
+
+        case 3: /* FP */
+          for (i = 0; i < len; i++, fp64++)
+          {
+            if (fread((char *) fp64, sizeof(H5DT_FLOAT64), 1, *strm) != 1)
+            {
+              (void) fprintf(stderr, err1);
+              return (-1);
+            }
+          }
+        break;
+
+        default:
+          (void) fprintf(stderr, err2);
+          return (-1);
+      }
+    break;
+
+    default:
+      (void) fprintf(stderr, err3);
+      break;
+  }
+  return(0);
+}
+
+static int
+allocateIntegerStorage(struct Input *in)
+{
+  hsize_t len=1;
+  int j;
+  const char *err1 = "Unable to allocate dynamic memory.\n";
+  const char *err2 = "Invalid storage size for integer input data.\n";
+
+  for (j=0; j<in->rank;j++)
+    len *= in->sizeOfDimension[j];
+
+  switch(in->inputSize)
+  {
+    case 8:
+      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT8))) == NULL)
+      {
+        (void) fprintf(stderr, err1);
+        return (-1);
+      }
+    break;
+
+    case 16:
+      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT16))) == NULL)
+      {
+        (void) fprintf(stderr, err1);
+        return (-1);
+      }
+    break;
+
+    case 32:
+      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT32))) == NULL)
+      {
+        (void) fprintf(stderr, err1);
+        return (-1);
+      }
+    break;
+
+    case 64:
+      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT64))) == NULL)
+      {
+        (void) fprintf(stderr, err1);
+        return (-1);
+      }
+    break;
+
+    default:
+      (void) fprintf(stderr, err2);
+    break;
+  }
+  return(0);
+}
+
+static int allocateUIntegerStorage(struct Input *in)
+{
+  hsize_t len=1;
+  const char *err1 = "Unable to allocate dynamic memory.\n";
+  const char *err2 = "Invalid storage size for unsigned integer input data.\n";
+  int j;
+
+  for (j=0; j<in->rank;j++)
+    len *= in->sizeOfDimension[j];
+
+  switch(in->inputSize)
+  {
+    case 8:
+      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT8))) == NULL)
+      {
+        (void) fprintf(stderr, err1);
+        return (-1);
+      }
+      break;
+
+    case 16:
+      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT16))) == NULL)
+      {
+        (void) fprintf(stderr, err1);
+        return (-1);
+      }
+      break;
+
+    case 32:
+      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT32))) == NULL)
+      {
+        (void) fprintf(stderr, err1);
+        return (-1);
+      }
+      break;
+
+    case 64:
+      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT64))) == NULL)
+      {
+        (void) fprintf(stderr, err1);
+        return (-1);
+      }
+      break;
+
+    default:
+      (void) fprintf(stderr, err2);
+      break;
+  }
+  return(0);
+}
+
+static int
+allocateFloatStorage(struct Input *in)
+{
+  hsize_t len = 1;
+  int j;
+  const char *err1 = "Unable to allocate dynamic memory.\n";
+  const char *err2 = "Invalid storage size for float input data.\n";
+
+  for (j=0; j<in->rank;j++)
+    len *= in->sizeOfDimension[j];
+
+  switch(in->inputSize)
+  {
+    case 32:
+      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_FLOAT32))) == NULL)
+      {
+        (void) fprintf(stderr, err1);
+        return (-1);
+      }
+    break;
+
+    case 64:
+      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_FLOAT64))) == NULL)
+      {
+        (void) fprintf(stderr, err1);
+        return (-1);
+      }
+    break;
+
+    default:
+      (void) fprintf(stderr, err2);
+    break;
+  }
+  return(0);
+}
+
+static int
+processConfigurationFile(char *infile, struct Input *in, FILE **strm)
+{
+  char key[255];
+  int kindex;
+  char temp[255];
+  int ival;
+
+  const char *err1 = "Unable to open the configuration file:  %s for reading.\n";
+  const char *err2 = "Unknown keyword in configuration file: %s\n";
+  const char *err3a = "PATH keyword appears twice in %s.\n";
+  const char *err3b = "Error in parsing the path information from %s.\n";
+  const char *err4a = "INPUT-CLASS keyword appears twice in %s.\n";
+  const char *err4b = "Error in retrieving the input class from %s.\n";
+  const char *err5a = "INPUT-SIZE keyword appears twice in %s.\n";
+  const char *err5b = "Error in retrieving the input size from %s.\n";
+  const char *err6a = "RANK keyword appears twice in %s.\n";
+  const char *err6b = "Error in retrieving the rank from %s.\n";
+  const char *err7a = "DIMENSION-SIZES keyword appears twice in %s.\n";
+  const char *err7b = "DIMENSION-SIZES cannot appear before RANK is provided.\n";
+  const char *err7c = "Error in retrieving the dimension sizes from %s.\n";
+  const char *err8a = "OUTPUT-CLASS keyword appears twice in %s.\n";
+  const char *err8b = "Error in retrieving the output class from %s.\n";
+  const char *err9a = "OUTPUT-SIZE keyword appears twice in %s.\n";
+  const char *err9b = "Error in retrieving the output size from %s.\n";
+  const char *err10a = "OUTPUT-ARCHITECTURE keyword appears twice in %s.\n";
+  const char *err10b = "Error in retrieving the output architecture from %s.\n";
+  const char *err11a = "OUTPUT-BYTE-ORDER keyword appears twice in %s.\n";
+  const char *err11b = "Error in retrieving the output byte order from %s.\n";
+  const char *err12a = "CHUNKED-DIMENSION-SIZES keyword appears twice in %s.\n";
+  const char *err12b = "CHUNKED-DIMENSION-SIZES cannot appear before DIMENSION-SIZES are provided.\n";
+  const char *err12c = "Error in retrieving the chunked dimension sizes from %s.\n";
+  const char *err13a = "COMPRESSION-TYPE keyword appears twice in %s.\n";
+  const char *err13b = "Error in retrieving the compression type from %s.\n";
+  const char *err14a = "COMPRESSION-PARAM keyword appears twice in %s.\n";
+  const char *err14b = "Error in retrieving the compression parameter from %s.\n";
+  const char *err15a = "EXTERNAL-STORAGE keyword appears twice in %s.\n";
+  const char *err15b = "Error in retrieving the external storage paramters from %s.\n";
+  const char *err16a = "MAXIMUM-DIMENSIONS keyword appears twice in %s.\n";
+  const char *err16b = "MAXIMUM-DIMENSIONS cannot appear before DIMENSION-SIZES are provided.\n";
+  const char *err16c = "Error in retrieving the maximum dimension sizes from %s.\n";
+  const char *err17 =  "Configuration parameters are invalid in %s.\n";
+  const char *err18 =  "Unable to get string value.\n";
+  const char *err19 =  "Unable to get integer value.\n";
+
+  /* create vector to map which keywords have been found
+  check vector after each keyword to check for violation
+  at the end check vector to see if required fields have been provided
+  process the output file according to the options
+  */
+
+  if ((*strm = fopen(infile, "r")) == NULL)
+  {
+    (void) fprintf(stderr, err1, infile);
+    return (-1);
+  }
+
+  while (fscanf(*strm, "%s", key) == 1)
+  {
+    if ((kindex = mapKeywordToIndex(key)) == -1)
+    {
+      (void) fprintf(stderr, err2, infile);
+      return (-1);
+    }
+    switch (kindex)
+    {
+      case 0: /* PATH */
+        if (in->configOptionVector[PATH] == 1)
+        {
+          (void) fprintf(stderr, err3a, infile);
+          return (-1);
+        }
+	if (fscanf(*strm, "%s", temp) != 1)
+	{
+	  (void) fprintf(stderr, err18);
+	  return (-1);
+	}
+        if (parsePathInfo(&in->path, temp) == -1)
+        {
+          (void) fprintf(stderr, err3b, infile);
+          return (-1);
+        }
+        in->configOptionVector[PATH] = 1;
+      break;
+
+      case 1: /* INPUT-CLASS */
+        if (in->configOptionVector[INPUT_CLASS] == 1)
+        {
+          (void) fprintf(stderr, err4a, infile);
+          return (-1);
+        }
+
+	if (fscanf(*strm, "%s", temp) != 1)
+	{
+	  (void) fprintf(stderr, err18);
+	  return (-1);
+	}
+        if (getInputClass(in, temp) == -1)
+        {
+          (void) fprintf(stderr, err4b, infile);
+          return (-1);
+        }
+
+        in->configOptionVector[INPUT_CLASS] = 1;
+
+        /*set default value for output-class */
+        if (in->configOptionVector[OUTPUT_CLASS] == 0)
+        {
+          if (in->inputClass == 0 || in->inputClass == 4)
+            in->outputClass = 0;
+          if (in->inputClass == 1 || in->inputClass == 2 || in->inputClass == 3)
+            in->outputClass = 1;
+          if (in->inputClass == 6 || in->inputClass == 7)
+            in->outputClass = 2;
+        }
+      break;
+
+      case 2: /* INPUT-SIZE */
+        if (in->configOptionVector[INPUT_SIZE] == 1)
+        {
+          (void) fprintf(stderr, err5a, infile);
+          return (-1);
+        }
+	if (fscanf(*strm, "%d", (&ival)) != 1)
+	{
+	  (void) fprintf(stderr, err19);
+	  return (-1);
+	}
+        if (getInputSize(in, ival) == -1)
+        {
+          (void) fprintf(stderr, err5b, infile);
+          return (-1);
+        }
+        in->configOptionVector[INPUT_SIZE] = 1;
+
+        /*set default value for output-size */
+        if (in->configOptionVector[OUTPUT_SIZE] == 0)
+          in->outputSize = in->inputSize;
+      break;
+
+      case 3: /* RANK */
+        if (in->configOptionVector[RANK] == 1)
+        {
+          (void) fprintf(stderr, err6a, infile);
+          return (-1);
+        }
+
+        if (getRank(in, strm) == -1)
+        {
+          (void) fprintf(stderr, err6b, infile);
+          return (-1);
+        }
+        in->configOptionVector[RANK] = 1;
+      break;
+
+      case 4: /* DIMENSION-SIZES */
+        if (in->configOptionVector[DIM] == 1)
+        {
+          (void) fprintf(stderr, err7a, infile);
+          return (-1);
+        }
+
+        if (in->configOptionVector[RANK] == 0)
+        {
+          (void) fprintf(stderr, err7b, infile);
+          return (-1);
+        }
+        if (getDimensionSizes(in, strm) == -1)
+        {
+          (void) fprintf(stderr, err7c, infile);
+          return (-1);
+        }
+        in->configOptionVector[DIM] = 1;
+      break;
+
+      case 5: /* OUTPUT-CLASS */
+        if (in->configOptionVector[OUTPUT_CLASS] == 1)
+        {
+          (void) fprintf(stderr, err8a, infile);
+          return (-1);
+        }
+
+        if (getOutputClass(in, strm) == -1)
+        {
+          (void) fprintf(stderr, err8b, infile);
+          return (-1);
+        }
+        in->configOptionVector[OUTPUT_CLASS] = 1;
+      break;
+
+      case 6: /* OUTPUT-SIZE */
+        if (in->configOptionVector[OUTPUT_SIZE] == 1)
+        {
+          (void) fprintf(stderr, err9a, infile);
+          return (-1);
+        }
+
+        if (getOutputSize(in, strm) == -1)
+        {
+          (void) fprintf(stderr, err9b, infile);
+          return (-1);
+        }
+        in->configOptionVector[OUTPUT_SIZE] = 1;
+      break;
+
+      case 7: /* OUTPUT-ARCHITECTURE */
+        if (in->configOptionVector[OUTPUT_ARCH] == 1)
+        {
+          (void) fprintf(stderr, err10a, infile);
+          return (-1);
+        }
+
+        if (getOutputArchitecture(in, strm) == -1)
+        {
+          (void) fprintf(stderr, err10b, infile);
+          return (-1);
+        }
+        in->configOptionVector[OUTPUT_ARCH] = 1;
+      break;
+
+      case 8: /* OUTPUT-BYTE-ORDER */
+        if (in->configOptionVector[OUTPUT_B_ORDER] == 1)
+        {
+          (void) fprintf(stderr, err11a, infile);
+          return (-1);
+        }
+
+        if (getOutputByteOrder(in, strm) == -1)
+        {
+          (void) fprintf(stderr, err11b, infile);
+          return (-1);
+        }
+        in->configOptionVector[OUTPUT_B_ORDER] = 1;
+      break;
+
+      case 9: /* CHUNKED-DIMENSION-SIZES */
+        if (in->configOptionVector[CHUNK] == 1)
+        {
+          (void) fprintf(stderr, err12a, infile);
+          return (-1);
+        }
+        /* cant appear before dimension sizes have been provided */
+        if (in->configOptionVector[DIM] == 0)
+        {
+          (void) fprintf(stderr, err12b, infile);
+          return (-1);
+        }
+
+        if (getChunkedDimensionSizes(in, strm) == -1)
+        {
+          (void) fprintf(stderr, err12c, infile);
+          return (-1);
+        }
+        in->configOptionVector[CHUNK] = 1;
+      break;
+
+      case 10: /* COMPRESSION-TYPE */
+        if (in->configOptionVector[COMPRESS] == 1)
+        {
+          (void) fprintf(stderr, err13a, infile);
+          return (-1);
+        }
+
+        if (getCompressionType(in, strm) == -1)
+        {
+          (void) fprintf(stderr, err13b, infile);
+          return (-1);
+        }
+        in->configOptionVector[COMPRESS] = 1;
+
+        if (in->configOptionVector[COMPRESS_PARAM] == 0)
+        {
+          if (in->compressionType == 0)
+            in->compressionParam = 6; /* default value if compressionType is GZIP */
+        }
+      break;
+
+      case 11: /* COMPRESSION-PARAM */
+        if (in->configOptionVector[COMPRESS_PARAM] == 1)
+        {
+          (void) fprintf(stderr, err14a, infile);
+          return (-1);
+        }
+
+        if (getCompressionParameter(in, strm) == -1)
+        {
+          (void) fprintf(stderr, err14b, infile);
+          return (-1);
+        }
+
+        in->configOptionVector[COMPRESS_PARAM] = 1;
+
+        if (in->configOptionVector[COMPRESS] == 0)
+          in->compressionType = 0;
+
+        in->configOptionVector[COMPRESS] = 1;
+      break;
+
+      case 12: /* EXTERNAL-STORAGE */
+        if (in->configOptionVector[EXTERNAL] == 1)
+        {
+          (void) fprintf(stderr, err15a, infile);
+          return (-1);
+        }
+
+        if (getExternalFilename(in, strm) == -1)
+        {
+          (void) fprintf(stderr, err15b, infile);
+          return (-1);
+        }
+        in->configOptionVector[EXTERNAL] = 1;
+      break;
+
+      case 13: /* MAXIMUM-DIMENSIONS */
+        if (in->configOptionVector[EXTEND] == 1)
+        {
+          (void) fprintf(stderr, err16a, infile);
+          return (-1);
+        }
+        /* cant appear before dimension sizes have been provided */
+        if (in->configOptionVector[DIM] == 0)
+        {
+          (void) fprintf(stderr, err16b, infile);
+          return (-1);
+        }
+        if (getMaximumDimensionSizes(in, strm) == -1)
+        {
+          (void) fprintf(stderr, err16c, infile);
+          return (-1);
+        }
+        in->configOptionVector[EXTEND] = 1;
+      break;
+
+      default:
+        break;
+    }
+  }
+  /*
+    check if keywords obtained are valid
+    if yes, return 0 else error
+  */
+
+  if (validateConfigurationParameters(in) == -1)
+  {
+    (void) fprintf(stderr, err17, infile);
+    return (-1);
+  }
+
+  return (0);
+}
+
+static int
+validateConfigurationParameters(struct Input * in)
+{
+  const char *err1 = "One or more of the required fields (RANK, DIMENSION-SIZES) missing.\n";
+  const char *err2 = "Cannot specify chunking or compression or extendible data sets with the external file option.\n";
+  const char *err3 = "Cannot specify the compression or the extendible data sets without the chunking option.\n";
+  const char *err4a = "OUTPUT-ARCHITECTURE cannot be STD if OUTPUT-CLASS is floating point (FP).\n";
+  const char *err4b = "OUTPUT-ARCHITECTURE cannot be IEEE if OUTPUT-CLASS is integer (IN).\n";
+  const char *err5 = "For OUTPUT-CLASS FP, valid values for OUTPUT-SIZE are (32, 64) .\n";
+#ifdef WIN32
+  const char *err6 = "No support for reading 64-bit integer (INPUT-CLASS: IN, TEXTIN, UIN, TEXTUIN files\n";
+#endif
+
+  if (
+      (in->configOptionVector[DIM] != 1) ||
+      (in->configOptionVector[RANK] != 1))
+  {
+    (void) fprintf(stderr, err1);
+    return (-1);
+  }
+
+  if (in->configOptionVector[EXTERNAL] == 1)
+  {
+    if ((in->configOptionVector[COMPRESS] == 1) ||
+        (in->configOptionVector[CHUNK] == 1) ||
+        (in->configOptionVector[EXTEND] == 1))
+    {
+      (void) fprintf(stderr, err2);
+      return (-1);
+    }
+  }
+
+  if ((in->configOptionVector[COMPRESS] == 1) ||
+      (in->configOptionVector[EXTEND] == 1))
+  {
+    if (in->configOptionVector[CHUNK] != 1)
+    {
+      (void) fprintf(stderr, err3);
+      return (-1);
+    }
+  }
+
+  /* Arch cant be STD if O/p class is FP */
+  if (in->outputArchitecture == 1)
+    if (in->outputClass == 1)
+    {
+      (void) fprintf(stderr, err4a);
+      return (-1);
+    }
+
+  /* Arch cant be IEEE if O/p class is IN */
+  if (in->outputArchitecture == 2)
+    if (in->outputClass == 0)
+    {
+      (void) fprintf(stderr, err4b);
+      return (-1);
+    }
+
+  if (in->outputClass == 1)
+    if(in->outputSize != 32 &&
+       in->outputSize != 64 )
+    {
+      (void) fprintf(stderr, err5);
+      return (-1);
+    }
+
+#ifdef WIN32
+  if (in->inputSize == 64 && (in->inputClass == 0 || in->inputClass == 4 || in->inputClass == 6 || in->inputClass == 7) )
+	{
+	  (void) fprintf(stderr, err6);
+	  return -1;
+	}
+#endif
+  return (0);
+}
+
+static int
+mapKeywordToIndex(char *key)
+{
+  int i;
+
+  for (i=0; i<NUM_KEYS; i++)
+    if (!HDstrcmp(keytable[i], key)) return i;
+  return -1;
+}
+
+static int
+parsePathInfo(struct path_info *path, char *temp)
+{
+  const char delimiter[] = "/";
+  char *token = (char*) malloc(255*sizeof(char));
+  int i=0;
+
+  HDstrcpy(path->group[i++],HDstrtok (temp, delimiter));
+
+  while (1)
+  {
+    token = HDstrtok (NULL, delimiter);
+    if (token == NULL)
+      break;
+    HDstrcpy(path->group[i++],token);
+  }
+  path->count = i;
+  return (0);
+}
+
+static int
+parseDimensions(struct Input *in, char *strm)
+{
+  const char delimiter[] = ",";
+  char temp[255];
+  char *token = (char*) malloc(255*sizeof(char));
+  int i=0;
+  const char *err1 = "Unable to allocate dynamic memory.\n";
+
+  HDstrcpy(temp, strm);
+  HDstrtok (temp, delimiter);
+
+  while (1)
+  {
+    token = HDstrtok (NULL, delimiter);
+    if (token == NULL)
+      break;
+    i++;
+  }
+  in->rank = i+1;
+  if ((in->sizeOfDimension =
+               (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL)
+  {
+    (void) fprintf(stderr, err1);
+    return (-1);
+  }
+
+  i=0;
+  HDstrcpy(temp, strm);
+  in->sizeOfDimension[i++] = HDstrtol(HDstrtok (temp, delimiter), NULL, BASE_10);
+
+  while (1)
+  {
+    token = HDstrtok (NULL, delimiter);
+    if (token == NULL)
+      break;
+    in->sizeOfDimension[i++] = HDstrtol(token, NULL, BASE_10);
+  }
+  return (0);
+}
+
+static int
+getOutputClass(struct Input *in, FILE** strm)
+{
+  char temp[255];
+  int kindex;
+  const char *err1 = "Unable to get 'string' value.\n";
+  const char *err2 = "Invalid value for output class.\n";
+
+  if (fscanf(*strm, "%s", temp) != 1)
+    {
+    (void) fprintf(stderr, err1);
+    return (-1);
+  }
+
+  if ((kindex = OutputClassStrToInt(temp)) == -1)
+  {
+    (void) fprintf(stderr, err2);
+    return (-1);
+  }
+
+  in->outputClass = kindex;
+  return (0);
+}
+
+static int
+OutputClassStrToInt(char *temp)
+{
+  int i;
+  char classKeywordTable[3][15] = {
+    "IN",
+    "FP",
+    "UIN"
+  };
+  for  (i=0; i<3; i++)
+    if (!HDstrcmp(classKeywordTable[i], temp)) return i;
+
+  return -1;
+}
+ /* same as getInputSize. But defined separately for extensibility */
+static int
+getOutputSize(struct Input *in, FILE** strm)
+{
+  int ival;
+  int i;
+  int outputSizeValidValues[4] = {8,16,32,64};
+  const char *err1 = "Unable to get integer value.\n";
+  const char *err2 = "Invalid value for output size.\n";
+
+  if (fscanf(*strm, "%d", (&ival)) != 1)
+  {
+    (void) fprintf(stderr, err1);
+        return (-1);
+  }
+
+  for  (i=0; i<4; i++)
+    if (outputSizeValidValues[i] == ival)
+    {
+      in->outputSize = ival;
+      return (0);
+    }
+  (void) fprintf(stderr, err2);
+  return(-1);
+}
+
+static int
+getInputClass(struct Input *in, char * temp)
+{
+  int kindex;
+  const char *err1 = "Invalid value for input class.\n";
+
+  if ((kindex = InputClassStrToInt(temp)) == -1)
+  {
+    (void) fprintf(stderr, err1);
+    return (-1);
+  }
+
+  in->inputClass = kindex;
+  return (0);
+}
+
+static int
+InputClassStrToInt(char *temp)
+{
+  int i;
+  char classKeywordTable[8][15] = {
+    "TEXTIN",
+    "TEXTFP",
+    "TEXTFPE",
+    "FP",
+    "IN",
+    "STR",
+    "TEXTUIN",
+    "UIN"
+  };
+  for  (i=0; i<8; i++)
+    if (!HDstrcmp(classKeywordTable[i], temp)) return i;
+  return -1;
+}
+
+ /* same as getOutputSize. But defined separately for extensibility */
+static int
+getInputSize(struct Input *in, int ival)
+{
+  int i;
+  int inputSizeValidValues[4] = {8,16,32,64};
+  const char *err1 = "Invalid value for input size.\n";
+
+  for  (i=0; i<4; i++)
+    if (inputSizeValidValues[i] == ival)
+    {
+      in->inputSize = ival;
+      return (0);
+    }
+  (void) fprintf(stderr, err1);
+  return(-1);
+}
+
+static int
+getRank(struct Input *in, FILE** strm)
+{
+  int ival;
+
+  const char *err1 = "Unable to get integer value.\n";
+  const char *err2 = "Invalid value for rank.\n";
+
+  if (fscanf(*strm, "%d", (&ival)) != 1)
+  {
+    (void) fprintf(stderr, err1);
+    return (-1);
+  }
+  if (ival >=MIN_NUM_DIMENSION && ival <=MAX_NUM_DIMENSION )
+  {
+    in->rank = ival;
+    return (0);
+  }
+
+  (void) fprintf(stderr, err2);
+  return(-1);
+}
+
+ /* same as getChunkedDimensionSizes. But defined separately for extensibility */
+static int
+getDimensionSizes(struct Input *in, FILE **strm)
+{
+  int ival;
+  int i=0;
+
+  const char *err1 = "Unable to allocate dynamic memory.\n";
+  const char *err2 = "No. of dimensions for which dimension sizes provided is not equal to provided rank.\n";
+
+  if ((in->sizeOfDimension =
+               (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL)
+  {
+    (void) fprintf(stderr, err1);
+    return (-1);
+  }
+
+  while (fscanf(*strm, "%d", (&ival)) == 1)
+    in->sizeOfDimension[i++] = ival;
+
+  if (in->rank != i)
+  {
+    (void) fprintf(stderr, err2);
+    return (-1);
+  }
+  return (0);
+}
+ /* same as getDimensionSizes. But defined separately for extensibility */
+static int
+getChunkedDimensionSizes(struct Input *in, FILE **strm)
+{
+  int ival;
+  int i=0;
+
+  const char *err1 = "Unable to allocate dynamic memory.\n";
+  const char *err2 = "No. of dimensions for which chunked dimension sizes provided is not equal to provided rank.\n";
+  const char *err3 = "The CHUNKED-DIMENSION-SIZES cannot exceed the sizes of DIMENSION-SIZES\n";
+
+  if ((in->sizeOfChunk =
+           (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL)
+  {
+    (void) fprintf(stderr, err1);
+    return (-1);
+  }
+
+  while (fscanf(*strm, "%d", (&ival)) == 1)
+      in->sizeOfChunk[i++] = ival;
+
+  if (in->rank != i)
+  {
+    (void) fprintf(stderr, err2);
+    return (-1);
+  }
+
+  for (i=0; i<in->rank; i++)
+    if (in->sizeOfChunk[i] > in->sizeOfDimension[i])
+    {
+      (void) fprintf(stderr, err3);
+      return (-1);
+    }
+  return (0);
+}
+
+static int
+getMaximumDimensionSizes(struct Input *in, FILE **strm)
+{
+  int ival;
+  int i=0;
+
+  const char *err1 = "Unable to allocate dynamic memory.\n";
+  const char *err2 = "No. of dimensions for which maximum dimension sizes provided is not equal to provided rank.\n";
+  const char *err3 = "The MAXIMUM-DIMENSIONS cannot be less than the sizes of DIMENSION-SIZES. Exception: can be -1 to indicate unlimited size\n";
+
+  if ((in->maxsizeOfDimension =
+                (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL)
+  {
+    (void) fprintf(stderr, err1);
+    return (-1);
+  }
+
+  while (fscanf(*strm, "%d", (&ival)) == 1)
+  {
+    if (ival == -1)
+         in->maxsizeOfDimension[i++] = H5S_UNLIMITED;
+    else
+         in->maxsizeOfDimension[i++] = ival;
+  }
+
+  if (in->rank != i)
+  {
+    (void) fprintf(stderr, err2);
+    return (-1);
+  }
+
+  for (i=0; i<in->rank; i++)
+  {
+    if (in->maxsizeOfDimension[i] != H5S_UNLIMITED)
+      if (in->maxsizeOfDimension[i] < in->sizeOfDimension[i])
+      {
+        (void) fprintf(stderr, err3);
+        return (-1);
+      }
+  }
+  return (0);
+}
+
+static int
+getOutputArchitecture(struct Input *in, FILE** strm)
+{
+  char temp[255];
+  int kindex;
+  const char *err1 = "Unable to get 'string' value.\n";
+  const char *err2 = "Invalid value for output architecture.\n";
+
+  if (fscanf(*strm, "%s", temp) != 1)
+  {
+    (void) fprintf(stderr, err1);
+    return (-1);
+  }
+
+  if ((kindex = OutputArchStrToInt(temp)) == -1)
+  {
+    (void) fprintf(stderr, err2);
+    return (-1);
+  }
+
+  in->outputArchitecture = kindex;
+  return (0);
+}
+
+static int
+OutputArchStrToInt(char *temp)
+{
+  int i;
+  char outputArchKeywordTable[8][15] = {
+    "NATIVE",
+    "STD",
+    "IEEE",
+    "INTEL",
+    "CRAY",
+    "MIPS",
+    "ALPHA",
+    "UNIX"
+  };
+  for  (i=0; i<8; i++)
+    if (!HDstrcmp(outputArchKeywordTable[i], temp)) return i;
+  return -1;
+}
+
+static int
+getOutputByteOrder(struct Input *in, FILE** strm)
+{
+  char temp[255];
+  int kindex;
+  const char *err1 = "Unable to get 'string' value.\n";
+  const char *err2 = "Invalid value for output byte-order.\n";
+
+  if (fscanf(*strm, "%s", temp) != 1)
+  {
+    (void) fprintf(stderr, err1);
+    return (-1);
+  }
+
+  if ((kindex = OutputByteOrderStrToInt(temp)) == -1)
+  {
+    (void) fprintf(stderr, err2);
+    return (-1);
+  }
+
+  in->outputByteOrder = kindex;
+  return (0);
+}
+
+static int
+OutputByteOrderStrToInt(char *temp)
+{
+  int i;
+  char outputByteOrderKeywordTable[2][15] = {
+    "BE",
+    "LE"
+  };
+  for  (i=0; i<2; i++)
+    if (!HDstrcmp(outputByteOrderKeywordTable[i], temp)) return i;
+  return -1;
+}
+
+static int
+getCompressionType(struct Input *in, FILE** strm)
+{
+  char temp[255];
+  int kindex;
+  const char *err1 = "Unable to get 'string' value.\n";
+  const char *err2 = "Invalid value for compression.\n";
+
+  if (fscanf(*strm, "%s", temp) != 1)
+  {
+    (void) fprintf(stderr, err1);
+    return (-1);
+  }
+
+  if ((kindex = CompressionTypeStrToInt(temp)) == -1)
+  {
+    (void) fprintf(stderr, err2);
+    return (-1);
+  }
+
+  in->outputByteOrder = kindex;
+  return (0);
+
+}
+
+static int
+CompressionTypeStrToInt(char *temp)
+{
+  /* currently supports only GZIP */
+  /* can be extended by adding fields to the table */
+
+  int i;
+  char CompressionTypeKeywordTable[1][15] = {
+    "GZIP"
+  };
+  for  (i=0; i<1; i++)
+    if (!HDstrcmp(CompressionTypeKeywordTable[i], temp)) return i;
+  return -1;
+}
+
+static int
+getCompressionParameter(struct Input *in, FILE** strm)
+{
+  /*  currently supports only GZIP */
+  /*  can be extended by adding more values to COMPRESSION-TYPE and
+    handling the paramters here by adding more cases  */
+
+  int ival;
+  const char *err1 = "Unable to get integer value.\n";
+  const char *err2 = "Invalid value for compression paramter.\n";
+  const char *err3 = "Unsupported Compression Type.\n";
+
+  switch (in->compressionType)
+  {
+    case 0:    /* GZIP */
+      if (fscanf(*strm, "%d", (&ival)) != 1)
+      {
+        (void) fprintf(stderr, err1);
+        return (-1);
+      }
+
+      if (ival <0 || ival > 9)
+      {
+        (void) fprintf(stderr, err2);
+        return (-1);
+      }
+      in->compressionParam = ival;
+      return (0);
+
+    default:
+      (void) fprintf(stderr, err3);
+      return (-1);
+  }
+}
+
+static int
+getExternalFilename(struct Input *in, FILE** strm)
+{
+  char temp[255];
+  const char *err1 = "Unable to get 'string' value.\n";
+
+  if (fscanf(*strm, "%s", temp) != 1)
+  {
+    (void) fprintf(stderr, err1);
+    return (-1);
+  }
+
+  in->externFilename = (char *) HDmalloc ((size_t) (HDstrlen(temp)) * sizeof(char));
+  (void) HDstrcpy(in->externFilename, temp);
+  return (0);
+}
+
+void
+setDefaultValues(struct Input *in, int count)
+{
+  int i;
+  char temp[255];
+  char num[255];
+
+  in->inputClass = 3; /* FP */
+  in->inputSize = 32;
+  in->outputClass = 1; /* FP */
+  in->outputSize = 32;
+  in->rank = 0;
+  in->path.count = 1;
+
+  HDstrcpy(temp, "dataset");
+  sprintf(num, "%d", count);
+  HDstrcat(temp, num);
+  HDstrcpy(in->path.group[0], temp);
+
+  in->outputArchitecture = 0; /* NATIVE */
+  in->outputByteOrder = -1;  /* use default    */
+  in->compressionType = 0;  /* GZIP   */
+  for (i=0; i<NUM_KEYS; i++)
+    in->configOptionVector[i] = 0;
+}
+
+hid_t
+createOutputDataType(struct Input *in)
+{
+  hid_t new_type = (-1);
+  const char *err1 = "Invalid value for output class.\n";
+
+  switch (in->outputClass)
+  {
+    case 0:
+      switch (in->outputArchitecture)
+      {
+        case 0: /* NATIVE */
+          switch(in->outputSize)
+          {
+            case 8:
+              new_type = H5Tcopy (H5T_NATIVE_CHAR);
+            break;
+
+            case 16:
+              new_type = H5Tcopy (H5T_NATIVE_SHORT);
+            break;
+
+            case 32:
+              new_type = H5Tcopy (H5T_NATIVE_INT);
+            break;
+
+            case 64:
+              new_type = H5Tcopy (H5T_NATIVE_LLONG);
+            break;
+          }
+              switch(in->outputByteOrder)
+              {
+                case -1: /* default */
+                break;
+                case 0:
+                  H5Tset_order (new_type,H5T_ORDER_BE);
+                break;
+
+                case 1:
+                  H5Tset_order (new_type,H5T_ORDER_LE);
+                break;
+              }
+        break;
+
+        case 1: /* STD */
+          switch(in->outputSize)
+          {
+            case 8:
+              switch(in->outputByteOrder)
+              {
+                case -1:
+                case 0:
+                  new_type = H5Tcopy (H5T_STD_I8BE);
+                break;
+
+                case 1:
+                  new_type = H5Tcopy (H5T_STD_I8LE);
+                break;
+              }
+            break;
+
+            case 16:
+              switch(in->outputByteOrder)
+              {
+                case -1:
+                case 0:
+                  new_type = H5Tcopy (H5T_STD_I16BE);
+                break;
+
+                case 1:
+                  new_type = H5Tcopy (H5T_STD_I16LE);
+                break;
+              }
+            break;
+
+            case 32:
+              switch(in->outputByteOrder)
+              {
+                case -1:
+                case 0:
+                  new_type = H5Tcopy (H5T_STD_I32BE);
+                break;
+
+                case 1:
+                  new_type = H5Tcopy (H5T_STD_I32LE);
+                break;
+              }
+            break;
+
+            case 64:
+              switch(in->outputByteOrder)
+              {
+                case -1:
+                case 0:
+                  new_type = H5Tcopy (H5T_STD_I64BE);
+                break;
+
+                case 1:
+                  new_type = H5Tcopy (H5T_STD_I64LE);
+                break;
+              }
+            break;
+          }
+          break;
+
+        }
+        break;
+
+    case 1:
+      switch (in->outputArchitecture)
+      {
+        case 0:
+          switch(in->outputSize)
+          {
+            case 32:
+              new_type = H5Tcopy (H5T_NATIVE_FLOAT);
+            break;
+
+            case 64:
+              new_type = H5Tcopy (H5T_NATIVE_DOUBLE);
+            break;
+          }
+              switch(in->outputByteOrder)
+              {
+                case -1: /* DEFAULT */
+                break;
+                case 0:
+                  H5Tset_order (new_type,H5T_ORDER_BE);
+                break;
+
+                case 1:
+                  H5Tset_order (new_type,H5T_ORDER_LE);
+                break;
+              }
+        break;
+
+        case 1:
+          /* STD not supported for float */
+        break;
+
+        case 2:
+          switch(in->outputSize)
+          {
+            case 32:
+              switch(in->outputByteOrder)
+              {
+                case -1:
+                case 0:
+                  new_type = H5Tcopy (H5T_IEEE_F32BE);
+                break;
+
+                case 1:
+                  new_type = H5Tcopy (H5T_IEEE_F32LE);
+                break;
+              }
+            break;
+
+            case 64:
+              switch(in->outputByteOrder)
+              {
+                case -1:
+                case 0:
+                  new_type = H5Tcopy (H5T_IEEE_F64BE);
+                break;
+
+                case 1:
+                  new_type = H5Tcopy (H5T_IEEE_F64LE);
+                break;
+              }
+            break;
+          }
+        break;
+
+      }
+      break;
+
+    case 2:
+        switch (in->outputArchitecture)
+        {
+          case 0:
+            switch(in->outputSize)
+            {
+              case 8:
+                new_type = H5Tcopy (H5T_NATIVE_UCHAR);
+              break;
+
+              case 16:
+                new_type = H5Tcopy (H5T_NATIVE_USHORT);
+              break;
+
+              case 32:
+                new_type = H5Tcopy (H5T_NATIVE_UINT);
+              break;
+
+              case 64:
+                new_type = H5Tcopy (H5T_NATIVE_ULLONG);
+              break;
+            }
+              switch(in->outputByteOrder)
+              {
+                case -1: /* Default */
+                break;
+                case 0:
+                  H5Tset_order (new_type,H5T_ORDER_BE);
+                break;
+
+                case 1:
+                  H5Tset_order (new_type,H5T_ORDER_LE);
+                break;
+              }
+            break;
+
+          case 1:
+            switch(in->outputSize)
+            {
+              case 8:
+                switch(in->outputByteOrder)
+                {
+                  case -1:
+                  case 0:
+                    new_type = H5Tcopy (H5T_STD_U8BE);
+                  break;
+
+                  case 1:
+                    new_type = H5Tcopy (H5T_STD_U8LE);
+                  break;
+                }
+                break;
+
+              case 16:
+                switch(in->outputByteOrder)
+                {
+                  case -1:
+                  case 0:
+                    new_type = H5Tcopy (H5T_STD_U16BE);
+                  break;
+
+                  case 1:
+                    new_type = H5Tcopy (H5T_STD_U16LE);
+                  break;
+                }
+                break;
+
+              case 32:
+                switch(in->outputByteOrder)
+                {
+                  case -1:
+                  case 0:
+                    new_type = H5Tcopy (H5T_STD_U32BE);
+                  break;
+
+                  case 1:
+                    new_type = H5Tcopy (H5T_STD_U32LE);
+                  break;
+                }
+                break;
+
+              case 64:
+                switch(in->outputByteOrder)
+                {
+                  case -1:
+                  case 0:
+                    new_type = H5Tcopy (H5T_STD_U64BE);
+                  break;
+
+                  case 1:
+                    new_type = H5Tcopy (H5T_STD_U64LE);
+                  break;
+                }
+                break;
+            }
+            break;
+
+          case 2:
+            /* IEEE not supported for INT */
+          break;
+
+        }
+
+        break;
+
+    default:
+        (void) fprintf(stderr, err1);
+        return (-1);
+    }
+    return new_type;
+}
+
+hid_t
+createInputDataType(struct Input *in)
+{
+  hid_t new_type = (-1);
+  const char *err1 = "Invalid value for input class.\n";
+
+  switch (in->inputClass)
+  {
+    case 0:
+    case 4:
+        switch(in->inputSize)
+        {
+          case 8:
+              new_type = H5Tcopy (H5T_NATIVE_CHAR);
+              break;
+
+          case 16:
+              new_type = H5Tcopy (H5T_NATIVE_SHORT);
+              break;
+
+          case 32:
+              new_type = H5Tcopy (H5T_NATIVE_INT);
+              break;
+
+          case 64:
+              new_type = H5Tcopy (H5T_NATIVE_LLONG);
+              break;
+        }
+        break;
+
+    case 1:
+    case 2:
+    case 3:
+        switch(in->inputSize)
+        {
+          case 32:
+              new_type = H5Tcopy (H5T_NATIVE_FLOAT);
+              break;
+
+          case 64:
+              new_type = H5Tcopy (H5T_NATIVE_DOUBLE);
+              break;
+        }
+        break;
+
+    case 5:
+        break;
+
+    case 6:
+    case 7:
+        switch(in->inputSize)
+        {
+          case 8:
+              new_type = H5Tcopy (H5T_NATIVE_UCHAR);
+              break;
+
+          case 16:
+              new_type = H5Tcopy (H5T_NATIVE_USHORT);
+              break;
+
+          case 32:
+              new_type = H5Tcopy (H5T_NATIVE_UINT);
+              break;
+
+          case 64:
+              new_type = H5Tcopy (H5T_NATIVE_ULLONG);
+              break;
+        }
+        break;
+
+    default:
+        (void) fprintf(stderr, err1);
+        return (-1);
+    }
+  return new_type;
+}
+
+static int
+process(struct Options *opt)
+{
+  struct  Input *in;
+  hid_t   file_id, group_id, handle;
+  hid_t   dataset, dataspace = (-1);
+  FILE *strm, *extfile;
+  hid_t intype, outtype;
+  hid_t proplist;
+  hsize_t numOfElements = 1;
+  int j,k;
+
+  const char *err1 = "Error creating HDF output file: %s.\n";
+  const char *err2 = "Error in processing the configuration file: %s.\n";
+  const char *err3 = "Error in reading the input file: %s.\n";
+  const char *err4 = "Error in creating or opening external file.\n";
+  const char *err5 = "Error in creating the output data set. Dataset with the same name may exist at the specified path\n";
+  const char *err6 = "Error in writing the output data set.\n";
+
+  H5E_BEGIN_TRY {
+    if ((file_id = H5Fopen(opt->outfile, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) {
+      if ((file_id = H5Fcreate(opt->outfile, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) == FAIL)
+      {
+        (void) fprintf(stderr, err1, opt->outfile);
+        return (-1);
+      }
+    }
+  } H5E_END_TRY;
+
+  for (k = 0; k < opt->fcount; k++)
+  {
+    in = &(opt->infiles[k].in);
+    if (opt->infiles[k].config == 1)
+    {
+    	if (processConfigurationFile(opt->infiles[k].configfile, in, &strm) == -1)
+        {
+          (void) fprintf(stderr, err2, opt->infiles[k].configfile);
+          return (-1);
+        }
+    }
+
+    if (processDataFile(opt->infiles[k].datafile, in, &strm) == -1)
+    {
+      (void) fprintf(stderr, err3, opt->infiles[k].datafile);
+      return (-1);
+    }
+
+    for (j=0; j<in->rank;j++)
+      numOfElements *= in->sizeOfDimension[j];
+
+    /* disable error reporting */
+    H5E_BEGIN_TRY {
+
+    /* create parent groups */
+    if (in->path.count > 1)
+    {
+      j = 0;
+      handle = file_id;
+      while (j<in->path.count-1)
+      {
+        if ((group_id = H5Gopen(handle, in->path.group[j])) < 0)
+        {
+          group_id = H5Gcreate(handle, in->path.group[j++], 0);
+          for (; j<in->path.count-1; j++)
+            group_id = H5Gcreate(group_id, in->path.group[j], 0);
+          handle = group_id;
+          break;
+        }
+        handle = group_id;
+        j++;
+      }
+    }
+    else
+    {
+      handle = file_id;
+      j=0;
+    }
+
+    /*enable error reporting */
+    } H5E_END_TRY;
+
+    /*create data type */
+    intype = createInputDataType(in);
+    outtype = createOutputDataType(in);
+
+    /* create property list */
+    proplist = H5Pcreate (H5P_DATASET_CREATE);
+    if (in->configOptionVector[CHUNK] == 1)
+    {
+      H5Pset_layout (proplist, H5D_CHUNKED);
+      /* not reqd chunking is implied if set_chunk is used  */
+      H5Pset_chunk (proplist, in->rank, in->sizeOfChunk);
+    }
+
+    if (in->configOptionVector[COMPRESS] == 1)
+    {
+      H5Pset_deflate (proplist, (unsigned) in->compressionParam);
+    }
+
+    if (in->configOptionVector[EXTERNAL] == 1)
+    {
+      /* creating the external file if it doesnt exist */
+      if ((extfile = HDfopen(in->externFilename, "ab")) == NULL)
+      {
+        (void) fprintf(stderr, err4);
+        H5Pclose(proplist);
+        H5Sclose(dataspace);
+        H5Fclose(file_id);
+        return (-1);
+      }
+      HDfclose(extfile);
+      H5Pset_external (proplist, in->externFilename, (off_t)0, numOfElements * in->inputSize / 8);
+    }
+
+    /* create dataspace */
+    if (in->configOptionVector[EXTEND] == 1)
+    {
+      dataspace = H5Screate_simple(in->rank, in->sizeOfDimension, in->maxsizeOfDimension);
+    }
+    else
+    {
+      dataspace = H5Screate_simple(in->rank, in->sizeOfDimension, NULL);
+    }
+
+    /* disable error reporting */
+    H5E_BEGIN_TRY {
+    /* create data set */
+    if ((dataset = H5Dcreate(handle, in->path.group[j], outtype, dataspace, proplist)) < 0)
+    {
+      (void) fprintf(stderr, err5);
+      H5Pclose(proplist);
+      H5Sclose(dataspace);
+      H5Fclose(file_id);
+      return (-1);
+    }
+
+    /*enable error reporting */
+    } H5E_END_TRY;
+
+     /* write dataset */
+    if (H5Dwrite(dataset, intype, H5S_ALL, H5S_ALL, H5P_DEFAULT, (VOIDP)in->data) < 0)
+    {
+      (void) fprintf(stderr, err6);
+      H5Dclose(dataset);
+      H5Pclose(proplist);
+      H5Sclose(dataspace);
+      H5Fclose(file_id);
+      return (-1);
+    }
+
+    H5Dclose(dataset);
+    H5Pclose(proplist);
+    H5Sclose(dataspace);
+  }
+  H5Fclose(file_id);
+  return (0);
+}
+
+/*
+ * Name:
+ *      help
+ *
+ * Purpose:
+ *      Print a helpful summary of command usage and features.
+ */
+
+void
+help(char *name)
+{
+  (void) fprintf(stderr, "Name:\n\n");
+  (void) fprintf(stderr, "\t%s\n\n", name);
+  (void) fprintf(stderr, "\t  TOOL NAME:\n");
+  (void) fprintf(stderr, "\t   %s\n", name);
+  (void) fprintf(stderr, "\t   SYNTAX:\n");
+  (void) fprintf(stderr, "\t   %s -h[elp], OR\n", name);
+  (void) fprintf(stderr, "\t   %s <infile> -c[onfig] <configfile> [<infile> -c[config] <configfile>...]", name);
+  (void) fprintf(stderr, "\t\t\t\t      -o[utfile] <outfile>\n\n");
+  (void) fprintf(stderr, "\t   PURPOSE:\n");
+  (void) fprintf(stderr, "\t 	To convert data stored in one or more ASCII or binary files\n");
+  (void) fprintf(stderr, "\t	into one or more datasets (in accordance with the \n");
+  (void) fprintf(stderr, "\t	user-specified type and storage properties) in an existing \n");
+  (void) fprintf(stderr, "\t	or new HDF5 file.\n\n");
+  (void) fprintf(stderr, "\t   DESCRIPTION:\n");
+  (void) fprintf(stderr, "\t	The primary objective of the utility is to convert floating\n");
+  (void) fprintf(stderr, "\t	point or integer data stored in ASCII text or binary form \n");
+  (void) fprintf(stderr, "\t	into a data-set according to the type and storage properties\n");
+  (void) fprintf(stderr, "\t	specified by the user. The utility can also accept ASCII\n");
+  (void) fprintf(stderr, "\t	text files and store the contents in a compact form as an\n");
+  (void) fprintf(stderr, "\t	array of one-dimensional strings.\n\n");
+  (void) fprintf(stderr, "\t	The input data to be written as a data-set can be provided\n");
+  (void) fprintf(stderr, "\t	to the utility in one of the follwing forms:\n");
+  (void) fprintf(stderr, "\t	1. ASCII text file with numeric data (floating point or \n");
+  (void) fprintf(stderr, "\t	integer data). \n");
+  (void) fprintf(stderr, "\t	2. Binary file with native floating point data (32-bit or \n");
+  (void) fprintf(stderr, "\t	64-bit) \n");
+  (void) fprintf(stderr, "\t	3. Binary file with native integer (signed or unsigned)\n");
+  (void) fprintf(stderr, "\t	data (8-bit or 16-bit or 32-bit or 64-bit). \n");
+  (void) fprintf(stderr, "\t	4. ASCII text file containing strings (text data).\n");
+  (void) fprintf(stderr, "\t   (Not implemented)\n\n");
+  (void) fprintf(stderr, "\t	Every input file is associated with a configuration file \n");
+  (void) fprintf(stderr, "\t	also provided as an input to the utility. (See Section \n");
+  (void) fprintf(stderr, "\t	\"CONFIGURATION FILE\" to know how it is to be organised).\n");
+  (void) fprintf(stderr, "\t	The class, size and dimensions of the input data is \n");
+  (void) fprintf(stderr, "\t	specified in this configuration file. A point to note is\n");
+  (void) fprintf(stderr, "\t	that the floating point data in the ASCII text file may be\n");
+  (void) fprintf(stderr, "\t	organized in the fixed floating form (for example 323.56)\n");
+  (void) fprintf(stderr, "\t	or in a scientific notation (for example 3.23E+02). A \n");
+  (void) fprintf(stderr, "\t	different input-class specification is to be used for both\n");
+  (void) fprintf(stderr, "\t	forms.\n\n");
+  (void) fprintf(stderr, "\t	The utility extracts the input data from the input file \n");
+  (void) fprintf(stderr, "\t	according to the specified parameters and saves it into \n");
+  (void) fprintf(stderr, "\t	an H5 dataset. \n\n");
+  (void) fprintf(stderr, "\t	The user can specify output type and storage properties in \n");
+  (void) fprintf(stderr, "\t	the configuration file. The user is requited to specify the \n");
+  (void) fprintf(stderr, "\t	path of the dataset. If the groups in the path leading to \n");
+  (void) fprintf(stderr, "\t	the data-set do not exist, the groups will be created by the\n");
+  (void) fprintf(stderr, "\t	utility. If no group is specified, the dataset will be\n");
+  (void) fprintf(stderr, "\t	created under the root group.\n\n");
+  (void) fprintf(stderr, "\t	In addition to the name, the user is also required to \n");
+  (void) fprintf(stderr, "\t	provide the class and size of output data to be written to \n");
+  (void) fprintf(stderr, "\t	the dataset and may optionally specify the output-architecure,\n");
+  (void) fprintf(stderr, "\t	and the output-byte-order. If output-architecture is not \n");
+  (void) fprintf(stderr, "\t	specified the default is NATIVE. Output-byte-orders are fixed\n");
+  (void) fprintf(stderr, "\t	for some architectures and may be specified only if output-\n");
+  (void) fprintf(stderr, "\t	architecture is IEEE, UNIX or STD.\n\n");
+  (void) fprintf(stderr, "\t 	Also, layout and other storage properties such as \n");
+  (void) fprintf(stderr, "\t	compression, external storage and extendible data-sets may be\n");
+  (void) fprintf(stderr, "\t	optionally specified.  The layout and storage properties \n");
+  (void) fprintf(stderr, "\t	denote how raw data is to be organized on the disk. If these \n");
+  (void) fprintf(stderr, "\t	options are not specified the default is Contiguous layout \n");
+  (void) fprintf(stderr, "\t	and storage.\n\n");
+  (void) fprintf(stderr, "\t	The dataset can be organized in any of the following ways:\n");
+  (void) fprintf(stderr, "\t	1. Contiguous.\n");
+  (void) fprintf(stderr, "\t	2. Chunked.\n");
+  (void) fprintf(stderr, "\t	3. External Storage File    (has to be contiguous)\n");
+  (void) fprintf(stderr, "\t	4. Extendible data sets     (has to be chunked)\n");
+  (void) fprintf(stderr, "\t	5. Compressed.		    (has to be chunked)\n");
+  (void) fprintf(stderr, "\t	6. Compressed & Extendible  (has to be chunked)\n\n");
+  (void) fprintf(stderr, "\t	If the user wants to store raw data in a non-HDF file then \n");
+  (void) fprintf(stderr, "\t	the external storage file option is to be used and the name \n");
+  (void) fprintf(stderr, "\t	of the file is to be specified. \n\n");
+  (void) fprintf(stderr, "\t	If the user wants the dimensions of the data-set to be\n");
+  (void) fprintf(stderr, "\t	unlimited, the extendible data set option can be chosen. \n\n");
+  (void) fprintf(stderr, "\t	The user may also specify the type of compression and the \n");
+  (void) fprintf(stderr, "\t	level to which the data set must be compresses by setting \n");
+  (void) fprintf(stderr, "\t	the compressed option.\n\n");
+  (void) fprintf(stderr, "\t   SYNOPSIS:\n");
+  (void) fprintf(stderr, "\t  h5import -h[elp], OR\n");
+  (void) fprintf(stderr, "\t  h5import <infile> -c[onfig] <configfile> \
+                    [<infile> -c[config] <confile2>...] -o[utfile] <outfile>\n\n");
+  (void) fprintf(stderr, "\t   -h[elp]:\n");
+  (void) fprintf(stderr, "\t           Prints this summary of usage, and exits.\n\n");
+  (void) fprintf(stderr, "\t   <infile(s)>:\n");
+  (void) fprintf(stderr, "\t           Name of the Input file(s), containing a \n");
+  (void) fprintf(stderr, "\t		single n-dimensional floating point or integer array \n");
+  (void) fprintf(stderr, "\t		in either ASCII text, native floating point(32-bit \n");
+  (void) fprintf(stderr, "\t		or 64-bit) or native integer(8-bit or 16-bit or \n");
+  (void) fprintf(stderr, "\t		32-bit or 64-bit). Data to be specified in the order\n");
+  (void) fprintf(stderr, "\t		of fastest changing dimensions first.\n\n");
+  (void) fprintf(stderr, "\t	-c[config] <configfile>:\n");
+  (void) fprintf(stderr, "\t		Every input file should be associated with a \n");
+  (void) fprintf(stderr, "\t		configuration file and this is done by the -c option.\n");
+  (void) fprintf(stderr, "\t		<configfile> is the name of the configuration file.\n");
+  (void) fprintf(stderr, "\t		(See Section \"CONFIGURATION FILE\")\n\n");
+  (void) fprintf(stderr, "\t   -o[utfile] <outfile>:\n");
+  (void) fprintf(stderr, "\t           Name of the HDF 5 output file. Data from one or more \n");
+  (void) fprintf(stderr, "\t		input files are stored as one or more data sets in \n");
+  (void) fprintf(stderr, "\t		<outfile>. The output file may be an existing file or \n");
+  (void) fprintf(stderr, "\t		it maybe new in which case it will be created.\n\n\n");
+  (void) fprintf(stderr, "\t   CONFIGURATION FILE:\n");
+  (void) fprintf(stderr, "\t	The configuration file is an ASCII text file and must be \n");
+  (void) fprintf(stderr, "\t	organized as \"CONFIG-KEYWORD VALUE\" pairs, one pair on each \n");
+  (void) fprintf(stderr, "\t	line.\n\n");
+  (void) fprintf(stderr, "\t   The configuration file may have the following keywords each \n");
+  (void) fprintf(stderr, "\t   followed by an acceptable value.\n\n");
+  (void) fprintf(stderr, "\t	Required KEYWORDS:\n");
+  (void) fprintf(stderr, "\t		PATH\n");
+  (void) fprintf(stderr, "\t		INPUT-CLASS\n");
+  (void) fprintf(stderr, "\t		INPUT-SIZE\n");
+  (void) fprintf(stderr, "\t		RANK\n");
+  (void) fprintf(stderr, "\t		DIMENSION-SIZES\n");
+  (void) fprintf(stderr, "\t		OUTPUT-CLASS\n");
+  (void) fprintf(stderr, "\t		OUTPUT-SIZE\n\n");
+  (void) fprintf(stderr, "\t	Optional KEYWORDS:\n");
+  (void) fprintf(stderr, "\t		OUTPUT-ARCHITECTURE\n");
+  (void) fprintf(stderr, "\t		OUTPUT-BYTE-ORDER\n");
+  (void) fprintf(stderr, "\t  		CHUNKED-DIMENSION-SIZES\n");
+  (void) fprintf(stderr, "\t		COMPRESSION-TYPE\n");
+  (void) fprintf(stderr, "\t		COMPRESSION-PARAM\n");
+  (void) fprintf(stderr, "\t		EXTERNAL-STORAGE\n");
+  (void) fprintf(stderr, "\t		MAXIMUM-DIMENSIONS\n\n\n");
+  (void) fprintf(stderr, "\t  	Values for keywords:\n");
+  (void) fprintf(stderr, "\t		PATH:\n");
+  (void) fprintf(stderr, "\t			Strings separated by spaces to represent\n");
+  (void) fprintf(stderr, "\t			the path of the data-set. If the groups in\n");
+  (void) fprintf(stderr, "\t			the path do no exist, they will be created. \n");
+  (void) fprintf(stderr, "\t			For example,\n");
+  (void) fprintf(stderr, "\t				PATH grp1/grp2/dataset1\n");
+  (void) fprintf(stderr, "\t				PATH: keyword\n");
+  (void) fprintf(stderr, "\t				grp1: group under the root. If\n");
+  (void) fprintf(stderr, "\t				      non-existent will be created.\n");
+  (void) fprintf(stderr, "\t				grp2: group under grp1. If \n");
+  (void) fprintf(stderr, "\t				      non-existent will be created \n");
+  (void) fprintf(stderr, "\t				      under grp1.\n");
+  (void) fprintf(stderr, "\t				dataset1: the name of the data-set \n");
+  (void) fprintf(stderr, "\t					  to be created.\n\n");
+  (void) fprintf(stderr, "\t               INPUT-CLASS:\n");
+  (void) fprintf(stderr, "\t			String denoting the type of input data.\n");
+  (void) fprintf(stderr, "\t			(\"TEXTIN\", \"TEXTFP\", \"TEXTFPE\", \"FP\", \"IN\", \n");
+  (void) fprintf(stderr, "\t			\"STR\", \"TEXTUIN\", \"UIN\"). \n");
+  (void) fprintf(stderr, "\t			INPUT-CLASS \"TEXTIN\" denotes an ASCII text \n");
+  (void) fprintf(stderr, "\t			file with signed integer data in ASCII form,\n");
+  (void) fprintf(stderr, "\t			INPUT-CLASS \"TEXTIN\" denotes an ASCII text \n");
+  (void) fprintf(stderr, "\t			file with unsigned integer data in ASCII form,\n");
+  (void) fprintf(stderr, "\t			\"TEXTFP\" denotes an ASCII text file containing\n");
+  (void) fprintf(stderr, "\t			floating point data in the fixed notation\n");
+  (void) fprintf(stderr, "\t			(325.34),\n");
+  (void) fprintf(stderr, "\t			\"TEXTFPE\" denotes an ASCII text file containing\n");
+  (void) fprintf(stderr, "\t			floating point data in the scientific notation\n");
+  (void) fprintf(stderr, "\t			(3.2534E+02),\n");
+  (void) fprintf(stderr, "\t			\"FP\" denotes a floating point binary file,\n");
+  (void) fprintf(stderr, "\t			\"IN\" denotes a signed integer binary file,\n");
+  (void) fprintf(stderr, "\t			\"UIN\" denotes an unsigned integer binary file,\n");
+  (void) fprintf(stderr, "\t			 & \"STR\" denotes an ASCII text file the \n");
+  (void) fprintf(stderr, "\t			contents of which should be stored as an 1-D \n");
+  (void) fprintf(stderr, "\t			array of strings.\n");
+  (void) fprintf(stderr, "\t			If INPUT-CLASS is \"STR\", then RANK, \n");
+  (void) fprintf(stderr, "\t			DIMENSION-SIZES, OUTPUT-CLASS, OUTPUT-SIZE, \n");
+  (void) fprintf(stderr, "\t			OUTPUT-ARCHITECTURE and OUTPUT-BYTE-ORDER \n");
+  (void) fprintf(stderr, "\t			will be ignored.\n\n\n");
+  (void) fprintf(stderr, "\t		INPUT-SIZE:\n");
+  (void) fprintf(stderr, "\t			Integer denoting the size of the input data \n");
+  (void) fprintf(stderr, "\t			(8, 16, 32, 64). \n\n");
+  (void) fprintf(stderr, "\t			For floating point,\n");
+  (void) fprintf(stderr, "\t			INPUT-SIZE can be 32 or 64.\n");
+  (void) fprintf(stderr, "\t			For integers (signed and unsigned)\n");
+  (void) fprintf(stderr, "\t			INPUT-SIZE can be 8, 16, 32 or 64.\n\n");
+  (void) fprintf(stderr, "\t		RANK:\n");
+  (void) fprintf(stderr, "\t			Integer denoting the number of dimensions.\n\n");
+  (void) fprintf(stderr, "\t		DIMENSION-SIZES:\n");
+  (void) fprintf(stderr, "\t		        Integers separated by spaces to denote the \n");
+  (void) fprintf(stderr, "\t			dimension sizes for the no. of dimensions \n");
+  (void) fprintf(stderr, "\t			determined by rank.\n\n");
+  (void) fprintf(stderr, "\t		OUTPUT-CLASS:\n");
+  (void) fprintf(stderr, "\t			String dentoting data type of the dataset to \n");
+  (void) fprintf(stderr, "\t			be written (\"IN\",\"FP\", \"UIN\")\n\n");
+  (void) fprintf(stderr, "\t		OUTPUT-SIZE:\n");
+  (void) fprintf(stderr, "\t			Integer denoting the size of the data in the \n");
+  (void) fprintf(stderr, "\t			output dataset to be written.\n");
+  (void) fprintf(stderr, "\t			If OUTPUT-CLASS is \"FP\", OUTPUT-SIZE can be \n");
+  (void) fprintf(stderr, "\t			32 or 64.\n");
+  (void) fprintf(stderr, "\t			If OUTPUT-CLASS is \"IN\" or \"UIN\", OUTPUT-SIZE\n");
+  (void) fprintf(stderr, "\t			can be 8, 16, 32 or 64.\n\n");
+  (void) fprintf(stderr, "\t		OUTPUT-ARCHITECTURE:\n");
+  (void) fprintf(stderr, "\t			STRING denoting the type of output \n");
+  (void) fprintf(stderr, "\t			architecture. Can accept the following values\n");
+  (void) fprintf(stderr, "\t			STD\n");
+  (void) fprintf(stderr, "\t			IEEE\n");
+  (void) fprintf(stderr, "\t			INTEL\n");
+  (void) fprintf(stderr, "\t			CRAY\n");
+  (void) fprintf(stderr, "\t			MIPS\n");
+  (void) fprintf(stderr, "\t			ALPHA\n");
+  (void) fprintf(stderr, "\t			NATIVE (default)\n");
+  (void) fprintf(stderr, "\t			UNIX\n\n");
+  (void) fprintf(stderr, "\t		OUTPUT-BYTE-ORDER:\n");
+  (void) fprintf(stderr, "\t			String denoting the output-byte-order. Ignored\n");
+  (void) fprintf(stderr, "\t			if the OUTPUT-ARCHITECTURE is not specified or\n");
+  (void) fprintf(stderr, "\t			if it is IEEE, UNIX or STD. Can accept the \n");
+  (void) fprintf(stderr, "\t			following values.\n");
+  (void) fprintf(stderr, "\t			BE (default)\n");
+  (void) fprintf(stderr, "\t			LE\n\n");
+  (void) fprintf(stderr, "\t		CHUNKED-DIMENSION:\n");
+  (void) fprintf(stderr, "\t			Integers separated by spaces to denote the \n");
+  (void) fprintf(stderr, "\t			dimension sizes of the chunk for the no. of \n");
+  (void) fprintf(stderr, "\t			dimensions determined by rank. Required field\n");
+  (void) fprintf(stderr, "\t			to denote that the dataset will be stored with\n");
+  (void) fprintf(stderr, "\t			chunked storage. If this field is absent the\n");
+  (void) fprintf(stderr, "\t			dataset will be stored with contiguous storage.\n\n");
+  (void) fprintf(stderr, "\t		COMPRESSION-TYPE:\n");
+  (void) fprintf(stderr, "\t			String denoting the type of compression to be\n");
+  (void) fprintf(stderr, "\t			used with the chunked storage. Requires the\n");
+  (void) fprintf(stderr, "\t			CHUNKED-DIMENSION to be specified. The only \n");
+  (void) fprintf(stderr, "\t			currently supported compression method is GZIP. \n");
+  (void) fprintf(stderr, "\t			Will accept the following value\n");
+  (void) fprintf(stderr, "\t			GZIP\n\n");
+  (void) fprintf(stderr, "\t		COMPRESSION-PARAM:\n");
+  (void) fprintf(stderr, "\t			Integer used to denote compression level and \n");
+  (void) fprintf(stderr, "\t			this option is to be always specified when \n");
+  (void) fprintf(stderr, "\t			the COMPRESSION-TYPE option is specified. The\n");
+  (void) fprintf(stderr, "\t			values are applicable only to GZIP \n");
+  (void) fprintf(stderr, "\t			compression.\n");
+  (void) fprintf(stderr, "\t			Value 1-9: The level of Compression. \n");
+  (void) fprintf(stderr, "\t				1 will result in the fastest \n");
+  (void) fprintf(stderr, "\t				compression while 9 will result in \n");
+  (void) fprintf(stderr, "\t				the best compression ratio. The default\n");
+  (void) fprintf(stderr, "\t				level of compression is 6.\n\n");
+  (void) fprintf(stderr, "\t		EXTERNAL-STORAGE:\n");
+  (void) fprintf(stderr, "\t			String to denote the name of the non-HDF5 file \n");
+  (void) fprintf(stderr, "\t			to store data to. Cannot be used if CHUNKED-\n");
+  (void) fprintf(stderr, "\t			DIMENSIONS or COMPRESSION-TYPE or EXTENDIBLE-\n");
+  (void) fprintf(stderr, "\t			DATASET is specified.\n");
+  (void) fprintf(stderr, "\t			Value <external-filename>: the name of the \n");
+  (void) fprintf(stderr, "\t			external file as a string to be used.\n\n");
+  (void) fprintf(stderr, "\t		MAXIMUM-DIMENSIONS:\n");
+  (void) fprintf(stderr, "\t			Integers separated by spaces to denote the \n");
+  (void) fprintf(stderr, "\t			maximum dimension sizes of all the \n");
+  (void) fprintf(stderr, "\t			dimensions determined by rank. Requires the\n");
+  (void) fprintf(stderr, "\t			CHUNKED-DIMENSION to be specified. A value of \n");
+  (void) fprintf(stderr, "\t			-1 for any dimension implies UNLIMITED \n");
+  (void) fprintf(stderr, "\t			DIMENSION size for that particular dimension.\n\n");
+  (void) fprintf(stderr, "\t   EXAMPLES:\n");
+  (void) fprintf(stderr, "\t	1. Configuration File may look like:\n\n");
+  (void) fprintf(stderr, "\t		PATH work h5 pkamat First-set\n");
+  (void) fprintf(stderr, "\t		INPUT-CLASS TEXTFP\n");
+  (void) fprintf(stderr, "\t		RANK 3\n");
+  (void) fprintf(stderr, "\t		DIMENSION-SIZES 5 2 4\n");
+  (void) fprintf(stderr, "\t		OUTPUT-CLASS FP\n");
+  (void) fprintf(stderr, "\t		OUTPUT-SIZE 64\n");
+  (void) fprintf(stderr, "\t		OUTPUT-ARCHITECTURE IEEE\n");
+  (void) fprintf(stderr, "\t		OUTPUT-BYTE-ORDER LE\n");
+  (void) fprintf(stderr, "\t  		CHUNKED-DIMENSION 2 2 2 \n\n");
+  (void) fprintf(stderr, "\t	The above configuration will accept a floating point array \n");
+  (void) fprintf(stderr, "\t	(5 x 2 x 4)  in an ASCII file with the rank and dimension sizes \n");
+  (void) fprintf(stderr, "\t	specified and will save it in a chunked data-set (of pattern \n");
+  (void) fprintf(stderr, "\t	2 X 2 X 2) of 64-bit floating point in the little-endian order \n");
+  (void) fprintf(stderr, "\t	and IEEE architecture. The dataset will be stored at\n");
+  (void) fprintf(stderr, "\t	\"/work/h5/pkamat/First-set\"\n\n");
+  (void) fprintf(stderr, "\t	2. Another configuration could be:\n\n");
+  (void) fprintf(stderr, "\t		PATH Second-set\n");
+  (void) fprintf(stderr, "\t		INPUT-CLASS IN	\n");
+  (void) fprintf(stderr, "\t		RANK 5\n");
+  (void) fprintf(stderr, "\t		DIMENSION-SIZES 6 3 5 2 4\n");
+  (void) fprintf(stderr, "\t		OUTPUT-CLASS IN\n");
+  (void) fprintf(stderr, "\t		OUTPUT-SIZE 32\n");
+  (void) fprintf(stderr, "\t  		CHUNKED-DIMENSION 2 2 2 2 2\n");
+  (void) fprintf(stderr, "\t		EXTENDIBLE-DATASET 1 3 \n");
+  (void) fprintf(stderr, "\t		COMPRESSION-TYPE GZIP\n");
+  (void) fprintf(stderr, "\t		COMPRESSION-PARAM 7\n\n\n");
+  (void) fprintf(stderr, "\t	The above configuration will accept an integer array \n");
+  (void) fprintf(stderr, "\t	(6 X 3 X 5 x 2 x 4)  in a binary file with the rank and \n");
+  (void) fprintf(stderr, "\t	dimension sizes specified and will save it in a chunked data-set\n");
+  (void) fprintf(stderr, "\t	(of pattern 2 X 2 X 2 X 2 X 2) of 32-bit floating point in \n");
+  (void) fprintf(stderr, "\t	native format (as output-architecure is not specified). The \n");
+  (void) fprintf(stderr, "\t	first and the third dimension will be defined as unlimited. The \n");
+  (void) fprintf(stderr, "\t	data-set will be compressed using GZIP and a compression level \n");
+  (void) fprintf(stderr, "\t	of 7.\n");
+  (void) fprintf(stderr, "\t	The dataset will be stored at \"/Second-set\"\n\n");
+  return;
+}
+
+
+void
+usage(char *name)
+{
+  (void) fprintf(stderr, "\nUsage:\t%s -h[elp], OR\n", name);
+  (void) fprintf(stderr, "\t%s <infile> -c[onfig] <configfile> \
+  [<infile> -c[config] <configfile>...] -o[utfile] <outfile> \n\n", name);
+  return;
+}
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/h5import.c
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/h5import.h
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/h5import.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/h5import.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,222 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ *
+ * Data and structure definitions for h5import
+ *
+ */
+
+/*
+ * state table tokens
+ */
+#define FILNAME 0
+/* filename */
+#define OPT_o   1
+/* output filename */
+#define OPT_c   2   /* configuration filename */
+#define OPT_h   3   /* request for explanation */
+#define OPT_d   4   /* dimensions */
+#define OPT_p   5   /* pathname */
+#define OPT_t   6   /* data type */
+#define OPT_s   7   /* data size */
+#define ERR    20  /* invalid token */
+
+#define MAX_GROUPS_IN_PATH  20
+#define NUM_KEYS 14
+#define MIN_NUM_DIMENSION  1
+#define MAX_NUM_DIMENSION  32
+#define BASE_10 10
+
+#define CHUNK            0
+#define COMPRESS         1
+#define EXTEND           2
+#define EXTERNAL         3
+#define DIM              4
+#define RANK             5
+#define PATH             6
+#define INPUT_CLASS      7
+#define INPUT_SIZE       8
+#define OUTPUT_CLASS     9
+#define OUTPUT_SIZE     10
+#define OUTPUT_ARCH     11
+#define OUTPUT_B_ORDER  12
+#define COMPRESS_PARAM  13
+
+/* data types */
+#define H5DT_INT8      signed char
+#define H5DT_INT16     short
+#define H5DT_INT32     int
+#define H5DT_FLOAT32   float
+#define H5DT_FLOAT64   double
+#define VOIDP          void*
+#define H5DT_UINT8     unsigned char
+#define H5DT_UINT16    unsigned short
+#define H5DT_UINT32    unsigned int
+#define H5DT_INT64     long_long
+#define H5DT_UINT64    unsigned H5DT_INT64
+
+struct path_info
+{
+  char group[MAX_GROUPS_IN_PATH][255];
+  int count;
+};
+
+struct Input
+{
+  struct path_info path;
+  int inputClass;
+  int inputSize;
+  int rank;
+  hsize_t* sizeOfDimension;
+  int outputClass;
+  int outputSize;
+  int outputArchitecture;
+  int outputByteOrder;
+  hsize_t* sizeOfChunk;
+  hsize_t* maxsizeOfDimension;
+  int compressionType;
+  int compressionParam;
+  char *externFilename;
+  VOIDP data;
+  int configOptionVector[NUM_KEYS];
+};
+
+struct infilesformat
+{
+  char datafile[255];
+  char configfile[255];
+  struct Input in;
+  int config; /* Configfile present? No - 0. Yes - 1 */
+};
+
+struct Options
+{
+  struct infilesformat  infiles[30];  /* structure to hold the list of input file names. Limited to 30*/
+  char   outfile[256];  /* output file name */
+  int    fcount;       /* number of input files */
+};
+
+char keytable[NUM_KEYS][30] = {
+  "PATH",
+  "INPUT-CLASS",
+  "INPUT-SIZE",
+  "RANK",
+  "DIMENSION-SIZES",
+  "OUTPUT-CLASS",
+  "OUTPUT-SIZE",
+  "OUTPUT-ARCHITECTURE",
+  "OUTPUT-BYTE-ORDER",
+  "CHUNKED-DIMENSION-SIZES",
+  "COMPRESSION-TYPE",
+  "COMPRESSION-PARAM",
+  "EXTERNAL-STORAGE",
+  "MAXIMUM-DIMENSIONS"
+};
+
+static int  state_table[15][8] =
+{
+  /* token ordering:
+     FILNAME      OPT_o   OPT_c  OPT_h  OPT_d  OPT_p  OPT_t  OPT_s   */
+
+  /* state 0: start */
+  {1, ERR, ERR, 6, ERR, ERR, ERR, ERR},
+
+  /* state 1: input files */
+  {ERR, ERR, 2, ERR, 7, ERR, ERR, ERR},
+
+  /* state 2: -c[onfigfile] */
+  {3, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+
+  /* state 3: configfile */
+  {1, 4, ERR, ERR, ERR, ERR, ERR, ERR},
+
+  /* state 4: -o[utfile] */
+  {5, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+
+  /* state 5: outfile */
+  {ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+
+  /* state 6: -h[elp] */
+  {ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+
+  /* state 7: -d[ims] */
+  {8, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+
+  /* state 8: dimensions */
+  {1, 4, ERR, ERR, ERR, 9, 11, 13},
+
+  /* state 9: -p[ath] */
+  {10, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+
+  /* state 10: path name */
+  {1, 4, ERR, ERR, ERR, ERR, 11, 13},
+
+  /* state 11: -t[ype] */
+  {12, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+
+  /* state 12: data type */
+  {1, 4, ERR, ERR, ERR, ERR, ERR, 13},
+
+  /* state 13: -s[ize] */
+  {14, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+
+  /* state 14: data size */
+  {1, 4, ERR, ERR, ERR, ERR, ERR, ERR}
+
+};
+
+/*
+ *
+ *  Function declarations for h5import
+ *
+ */
+void  usage(char *);
+void  setDefaultValues(struct Input *in, int count);
+void  help(char *);
+
+static int  gtoken(char *s);
+static int  process(struct Options *opt);
+static int  processConfigurationFile(char *infile, struct Input *in, FILE **strm);
+static int  mapKeywordToIndex(char *key);
+static int  parsePathInfo(struct path_info *path, char *strm);
+static int  parseDimensions(struct Input *in, char *strm);
+static int  getInputSize(struct Input *in, int ival);
+static int  getInputClass(struct Input *in, char * strm);
+static int  InputClassStrToInt(char *temp);
+static int  getRank(struct Input *in, FILE** strm);
+static int  getDimensionSizes(struct Input *in, FILE** strm);
+static int  getOutputSize(struct Input *in, FILE** strm);
+static int  getOutputClass(struct Input *in, FILE** strm);
+static int  OutputClassStrToInt(char *temp);
+static int  getOutputArchitecture(struct Input *in, FILE** strm);
+static int  OutputArchStrToInt(char *temp);
+static int  getOutputByteOrder(struct Input *in, FILE** strm);
+static int  OutputByteOrderStrToInt(char *temp);
+static int  getChunkedDimensionSizes(struct Input *in, FILE **strm);
+static int  getCompressionType(struct Input *in, FILE** strm);
+static int  CompressionTypeStrToInt(char *temp);
+static int  getCompressionParameter(struct Input *in, FILE** strm);
+static int  getExternalFilename(struct Input *in, FILE** strm);
+static int  getMaximumDimensionSizes(struct Input *in, FILE **strm);
+static int  processDataFile(char *infile, struct Input *in, FILE **strm);
+static int  readIntegerData(FILE **strm, struct Input *in);
+static int  readFloatData(FILE **strm, struct Input *in);
+static int  allocateIntegerStorage(struct Input *in);
+static int  allocateFloatStorage(struct Input *in);
+hid_t       createOutputDataType(struct Input *in);
+hid_t       createInputDataType(struct Input *in);
+static int  readUIntegerData(FILE **strm, struct Input *in);
+static int  allocateUIntegerStorage(struct Input *in);
+static int  validateConfigurationParameters(struct Input * in);


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/h5import.h
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/h5importtest.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/h5importtest.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/h5importtest.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,289 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#include <stdio.h>
+#include <H5private.h>
+/*
+ * Name:
+ *      h5importtest
+ *
+ * Description:
+ *      This program creates that can be
+ *      used to test the h5import program.
+ *
+ */
+/*
+ * Define names for test files
+ */
+
+int
+main(void)
+{
+    int         nrow = 3, ncol = 4, npln = 5;
+    int         i, j, k;
+    FILE       *sp;
+
+    float     b32r3[5][3][4];
+    float     row4[3], col4[4], pln4[5];
+    float     rowo4 = (float)11.0e0, colo4 = (float)21.0e0, plno4 = (float)51.0e0;
+    float     rowi4 = (float)1.0e0, coli4 = (float)2.0e0, plni4 = (float)5.0e0;
+
+    int     b32i3[5][3][4];
+    int     row4i[3], col4i[4], pln4i[5];
+    int     rowo4i = (int)11 , colo4i = (int)21 , plno4i = (int)51 ;
+    int     rowi4i = (int)1 , coli4i = (int)2 , plni4i = (int)5 ;
+
+#ifndef WIN32
+    long_long     b64i2[3][4], b64i3[5][3][4];
+    long_long     row4i64[3], col4i64[4], pln4i64[5];
+    long_long     rowo4i64 = (long_long)11 , colo4i64 = (long_long)21 , plno4i64 = (long_long)51 ;
+    long_long     rowi4i64 = (long_long)1 , coli4i64 = (long_long)2 , plni4i64 = (long_long)5 ;
+#endif
+
+    short     b16i3[5][3][4];
+    short     row4i16[3], col4i16[4], pln4i16[5];
+    short     rowo4i16 = (short)11 , colo4i16 = (short)21 , plno4i16 = (short)51 ;
+    short     rowi4i16 = (short)1 , coli4i16 = (short)2 , plni4i16 = (short)5 ;
+
+    char     b8i3[5][3][4];
+    char     row4i8[3], col4i8[4], pln4i8[5];
+    char     rowo4i8 = (char)11 , colo4i8 = (char)21 , plno4i8 = (char)51 ;
+    char     rowi4i8 = (char)1 , coli4i8 = (char)2 , plni4i8 = (char)5 ;
+
+    double     b64r3[5][3][4];
+    double     row8[3], col8[4], pln8[5];
+    double     rowo8 = 11.0e0, colo8 = 21.0e0, plno8 = 51.0e0;
+	double     rowi8 = 1.0e0, coli8 = 2.0e0, plni8 = 5.0e0;
+
+
+    /*
+     * initialize the row, column, and plane vectors
+     *
+     * row values start at 11 and increment by 1 => 11, 12, 13
+     * column values start at 21 and increment by 2 => 21, 23, 25, 27
+     * plane values start at 51 and increment by 5 => 51, 56, 61, 66, 71
+     */
+
+
+    /*
+     * build array elements - rank 2
+     *
+     * element value = sum of row value and col values
+     */
+
+    row4[0] = rowo4;
+    col4[0] = colo4;
+    pln4[0] = plno4;
+
+    row8[0] = rowo8;
+    col8[0] = colo8;
+    pln8[0] = plno8;
+
+    row4i[0] = rowo4i;
+    col4i[0] = colo4i;
+    pln4i[0] = plno4i;
+
+#ifndef WIN32
+    row4i64[0] = rowo4i64;
+    col4i64[0] = colo4i64;
+    pln4i64[0] = plno4i64;
+#endif
+
+    row4i16[0] = rowo4i16;
+    col4i16[0] = colo4i16;
+    pln4i16[0] = plno4i16;
+
+    row4i8[0] = rowo4i8;
+    col4i8[0] = colo4i8;
+    pln4i8[0] = plno4i8;
+
+    for (i = 1; i < nrow; i++)
+    {
+        row4[i] = row4[i - 1] + rowi4;
+        row8[i] = row8[i - 1] + rowi8;
+        row4i[i] = row4i[i - 1] + rowi4i;
+#ifndef WIN32
+	row4i64[i] = row4i64[i - 1] + rowi4i64;
+#endif
+	row4i16[i] = row4i16[i - 1] + rowi4i16;
+	row4i8[i] = row4i8[i - 1] + rowi4i8;
+    }
+
+    for (j = 1; j < ncol; j++)
+    {
+          col4[j] = col4[j - 1] + coli4;
+          col8[j] = col8[j - 1] + coli8;
+	  col4i[j] = col4i[j - 1] + coli4i;
+#ifndef WIN32
+          col4i64[j] = col4i64[j - 1] + coli4i64;
+#endif
+	  col4i16[j] = col4i16[j - 1] + coli4i16;
+	  col4i8[j] = col4i8[j - 1] + coli4i8;
+    }
+    for (k = 1; k < npln; k++)
+    {
+          pln4[k] = pln4[k - 1] + plni4;
+          pln8[k] = pln8[k - 1] + plni8;
+	  pln4i[k] = pln4i[k - 1] + plni4i;
+#ifndef WIN32
+    	  pln4i64[k] = pln4i64[k - 1] + plni4i64;
+#endif
+	  pln4i16[k] = pln4i16[k - 1] + plni4i16;
+	  pln4i8[k] = pln4i8[k - 1] + plni4i8;
+   }
+
+   for (i = 0; i < nrow; i++)
+   {
+     for (j = 0; j < ncol; j++)
+     {
+#ifndef WIN32
+  	b64i2[i][j] = row4i64[i] + col4i64[j];
+#endif
+     }
+   }
+
+    /*
+     * build array elements - rank 3
+     *
+     * element value = sum of row value, col, and plane values
+     */
+
+    for (i = 0; i < nrow; i++)
+      {
+          for (j = 0; j < ncol; j++)
+            {
+                for (k = 0; k < npln; k++)
+                  {
+                      b32r3[k][i][j] = row4[i] + col4[j] + pln4[k];
+                      b64r3[k][i][j] = row8[i] + col8[j] + pln8[k];
+	              b32i3[k][i][j] = row4i[i] + col4i[j] + pln4i[k];
+#ifndef WIN32
+	     	      b64i3[k][i][j] = row4i64[i] + col4i64[j] + pln4i64[k];
+#endif
+		      b16i3[k][i][j] = row4i16[i] + col4i16[j] + pln4i16[k];
+		      b8i3[k][i][j] = row4i8[i] + col4i8[j] + pln4i8[k];
+                  }
+            }
+      }
+
+    /*
+     * binary 32-bit file - rank 2 & 3
+     */
+
+#ifndef UNICOS
+
+
+    	sp = fopen("txtin16", "w");
+	for (k = 0; k < npln; k++)
+    	for (i = 0; i < nrow; i++)
+        {
+          for (j = 0; j < ncol; j++)
+              (void) fprintf(sp, "%10u", b16i3[k][i][j]);
+          (void) fprintf(sp, "\n");
+        }
+    (void) fclose(sp);
+
+      sp = fopen("txtin32", "w");
+      for (k = 0; k < npln; k++)
+    	for (i = 0; i < nrow; i++)
+        {
+          for (j = 0; j < ncol; j++)
+              (void) fprintf(sp, "%10d", b32i3[k][i][j]);
+          (void) fprintf(sp, "\n");
+        }
+      (void) fclose(sp);
+
+    sp = fopen("bin32", "w");
+    for (k = 0; k < npln; k++)
+    for (i = 0; i < nrow; i++)
+        for (j = 0; j < ncol; j++)
+            (void) fwrite((char *) &b32i3[k][i][j], sizeof(int), 1, sp);
+    (void) fclose(sp);
+
+
+    sp = fopen("buin32", "w");
+    for (k = 0; k < npln; k++)
+    for (i = 0; i < nrow; i++)
+        for (j = 0; j < ncol; j++)
+            (void) fwrite((char *) &b32i3[k][i][j], sizeof(unsigned int), 1, sp);
+    (void) fclose(sp);
+
+#ifndef WIN32
+
+    sp = fopen("bin64-2", "w");
+    for (i = 0; i < nrow; i++)
+        for (j = 0; j < ncol; j++)
+            (void) fwrite((char *) &b64i2[i][j], sizeof(long_long), 1, sp);
+    (void) fclose(sp);
+#endif
+
+    sp = fopen("bfp32", "w");
+    for (k = 0; k < npln; k++)
+        for (i = 0; i < nrow; i++)
+            for (j = 0; j < ncol; j++)
+                (void) fwrite((char *) &b32r3[k][i][j],
+                              sizeof(float), 1, sp);
+    (void) fclose(sp);
+
+        sp = fopen("bin16", "w");
+	for (k = 0; k < npln; k++)
+    	for (i = 0; i < nrow; i++)
+        for (j = 0; j < ncol; j++)
+            (void) fwrite((char *) &b16i3[k][i][j], sizeof(short), 1,
+                          sp);
+    (void) fclose(sp);
+
+        sp = fopen("buin16", "w");
+	for (k = 0; k < npln; k++)
+    	for (i = 0; i < nrow; i++)
+        for (j = 0; j < ncol; j++)
+            (void) fwrite((char *) &b16i3[k][i][j], sizeof(unsigned short), 1,
+                          sp);
+    (void) fclose(sp);
+
+#ifndef WIN32
+
+        sp = fopen("bin64-3", "w");
+	for (k = 0; k < npln; k++)
+    	for (i = 0; i < nrow; i++)
+        for (j = 0; j < ncol; j++)
+            (void) fwrite((char *) &b64i3[k][i][j], sizeof(long_long), 1,
+                          sp);
+    (void) fclose(sp);
+#endif
+
+    sp = fopen("bin8", "w");
+    for (k = 0; k < npln; k++)
+    	for (i = 0; i < nrow; i++)
+        for (j = 0; j < ncol; j++)
+            (void) fwrite((char *) &b8i3[k][i][j], sizeof(char), 1,
+                          sp);
+    (void) fclose(sp);
+
+#endif
+
+    /*
+     * binary 64-bit file - rank 2 & 3
+     */
+
+    sp = fopen("bfp64", "w");
+    for (k = 0; k < npln; k++)
+        for (i = 0; i < nrow; i++)
+            for (j = 0; j < ncol; j++)
+                (void) fwrite((char *) &b64r3[k][i][j],
+                              sizeof(double), 1, sp);
+    (void) fclose(sp);
+    return (0);
+}
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/h5importtest.c
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/h5importtestutil.sh
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/h5importtestutil.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/h5importtestutil.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,119 @@
+#!/bin/sh
+#
+# 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.
+#
+# HDF Utilities Test script
+# Usage: h5importtestutil.sh [machine-type]
+
+# initialize errors variable
+errors=0
+
+TESTING() {
+   SPACES="                                                               "
+   echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
+}
+
+TOOLTEST()
+{
+err=0
+$RUNSERIAL ./h5import $*
+$RUNSERIAL ../h5dump/h5dump $5 >log2
+
+cd tmp_testfiles
+$RUNSERIAL ../../h5dump/h5dump $5 >log1
+cd ..
+
+cmp -s tmp_testfiles/log1 log2 || err=1
+rm -f log2 tmp_testfiles/log1
+if [ $err -eq 1 ]; then
+errors="` expr $errors + 1 `";
+  echo "*FAILED*"
+else
+  echo " PASSED"
+fi
+}
+
+echo "" 
+echo "=============================="
+echo "H5IMPORT tests started"
+echo "=============================="
+
+if [ -f h5import -a -f h5importtest ]; then
+#echo "** Testing h5import  ***"
+
+rm -f  output.h5 log1 tx* b* *.dat
+
+mkdir tmp_testfiles
+cp $srcdir/testfiles/*.h5 tmp_testfiles/
+
+$RUNSERIAL ./h5importtest
+
+TESTING "ASCII I32 rank 3 - Output BE " ;
+TOOLTEST txtin32 -c $srcdir/testfiles/textin32 -o test1.h5
+
+TESTING "ASCII I16 rank 3 - Output LE - CHUNKED - extended" 
+TOOLTEST txtin16 -c $srcdir/testfiles/textin16 -o test2.h5
+
+TESTING "ASCII I8 - rank 3 - Output I16 LE-Chunked+Extended+Compressed " 
+TOOLTEST txtin16 -c $srcdir/testfiles/textin8  -o test3.h5
+
+TESTING "ASCII UI32 - rank 3 - Output BE" 
+TOOLTEST $srcdir/testfiles/in1 -c $srcdir/testfiles/textuin32 -o test4.h5
+
+TESTING "ASCII UI16 - rank 2 - Output LE+Chunked+Compressed " 
+TOOLTEST $srcdir/testfiles/in1 -c $srcdir/testfiles/textuin16 -o test5.h5
+
+TESTING "ASCII F32 - rank 3 - Output LE " 
+TOOLTEST $srcdir/testfiles/fp1 -c $srcdir/testfiles/textfp32 -o test6.h5
+
+TESTING "ASCII F64 - rank 3 - Output BE + CHUNKED+Extended+Compressed " 
+TOOLTEST $srcdir/testfiles/fp2 -c $srcdir/testfiles/textfp64 -o test7.h5
+
+TESTING "BINARY F64 - rank 3 - Output LE+CHUNKED+Extended+Compressed " 
+TOOLTEST bfp64 -c $srcdir/testfiles/conbfp64 -o test8.h5
+
+TESTING "BINARY I16 - rank 3 - Output order LE + CHUNKED + extended " 
+TOOLTEST bin16 -c $srcdir/testfiles/conbin16 -o test9.h5
+
+TESTING "BINARY I8 - rank 3 - Output I16LE + Chunked+Extended+Compressed " 
+TOOLTEST bin8 -c $srcdir/testfiles/conbin8  -o test10.h5
+
+TESTING "BINARY I32 - rank 3 - Output BE + CHUNKED " 
+TOOLTEST bin32 -c $srcdir/testfiles/conbin32 -o test11.h5
+
+TESTING "BINARY UI16 - rank 3 - Output byte BE + CHUNKED " 
+TOOLTEST buin16 -c $srcdir/testfiles/conbuin16 -o test12.h5
+
+TESTING "BINARY UI32 - rank 3 - Output LE + CHUNKED " 
+TOOLTEST buin32 -c $srcdir/testfiles/conbuin32 -o test13.h5
+
+rm -f  tx* b* *.dat
+rm -f  test*.h5 
+rm -rf tmp_testfiles
+else
+	echo "** h5import or h5importtest not available ***"
+	errors="` expr $errors + 1 `";
+fi
+
+#
+# Check errors result
+if [ $errors -eq 0 ]; then
+    echo "======================================"
+    echo " H5IMPORT Utilities tests have passed."
+    echo "======================================"    
+else
+    echo "*********************************************"
+    echo " H5IMPORT Utilities tests encountered errors"
+    echo "*********************************************"
+fi
+exit $errors


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/h5importtestutil.sh
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbfp32
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbfp32	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbfp32	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,12 @@
+PATH /fpbin/32-bit
+INPUT-CLASS FP
+INPUT-SIZE	32
+RANK 3
+DIMENSION-SIZES 5 3 4
+OUTPUT-ARCHITECTURE IEEE
+OUTPUT-BYTE-ORDER BE
+CHUNKED-DIMENSION-SIZES 2 2 2 
+COMPRESSION-PARAM 2
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbfp32
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbfp64
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbfp64	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbfp64	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,13 @@
+PATH /fp/bin/64-bit
+INPUT-CLASS FP
+INPUT-SIZE	64
+RANK 3
+DIMENSION-SIZES 5 3 4
+OUTPUT-ARCHITECTURE IEEE
+OUTPUT-BYTE-ORDER LE
+CHUNKED-DIMENSION-SIZES 2 2 2
+COMPRESSION-PARAM 8
+MAXIMUM-DIMENSIONS -1 6 7
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbfp64
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin16
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin16	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin16	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,12 @@
+PATH /int/bin/16-bit
+INPUT-CLASS IN
+INPUT-SIZE	16
+RANK 3
+DIMENSION-SIZES 2 3 4
+CHUNKED-DIMENSION-SIZES 2 2 2
+MAXIMUM-DIMENSIONS -1 -1 8
+OUTPUT-ARCHITECTURE STD
+OUTPUT-BYTE-ORDER LE
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin16
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin32
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin32	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin32	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,12 @@
+PATH /int/bin/32-bit
+INPUT-CLASS IN
+INPUT-SIZE	32
+RANK 3
+DIMENSION-SIZES 5 3 4
+OUTPUT-ARCHITECTURE STD
+OUTPUT-BYTE-ORDER BE
+CHUNKED-DIMENSION-SIZES 1 2 1
+
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin32
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin8
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin8	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin8	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,16 @@
+PATH /int/bin/8-bit
+INPUT-CLASS IN
+INPUT-SIZE	8
+OUTPUT-CLASS IN
+OUTPUT-SIZE 16
+RANK 3
+OUTPUT-ARCHITECTURE STD
+OUTPUT-BYTE-ORDER LE
+DIMENSION-SIZES 5 3 4
+CHUNKED-DIMENSION-SIZES 2 2 2
+MAXIMUM-DIMENSIONS -1 -1 -1
+COMPRESSION-PARAM 3
+
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbin8
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbuin16
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbuin16	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbuin16	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,12 @@
+PATH /int/buin/16-bit
+INPUT-CLASS UIN
+INPUT-SIZE	16
+RANK 3
+DIMENSION-SIZES 2 3 4
+CHUNKED-DIMENSION-SIZES 2 2 2
+MAXIMUM-DIMENSIONS -1 -1 8
+OUTPUT-ARCHITECTURE STD
+OUTPUT-BYTE-ORDER BE
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbuin16
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbuin32
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbuin32	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbuin32	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,12 @@
+PATH /int/buin/32-bit
+INPUT-CLASS UIN
+INPUT-SIZE	32
+RANK 3
+DIMENSION-SIZES 5 3 4
+OUTPUT-ARCHITECTURE STD
+OUTPUT-BYTE-ORDER LE
+
+
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/conbuin32
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/fp1
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/fp1	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/fp1	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,9 @@
+12.3 14.2 15.56
+26.782 27.22 28.44
+29.33 20.11 11.45
+22.31 23.3332 24.343
+
+16.134 19.34 0.17
+4.5 8.9 91.8
+34.7 0.32 0.076
+22.2 88.31 77.83
\ No newline at end of file


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/fp1
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/fp2
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/fp2	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/fp2	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,19 @@
+12.3 14.2 15.56
+26.782 27.22 28.44
+29.33 20.11 11.45
+22.31 23.3332 24.343
+
+16.134 19.34 0.17
+4.5 8.9 91.8
+34.7 0.32 0.076
+22.2 88.31 77.83
+
+216.134 139.34 101.17
+24.5 82.9 291.8  
+334.7 0.232 10.076 
+222.2 88.31 77.83
+
+122.3 114.2 125.56
+226.782 27.222 128.44
+341.7 30.132 0.1076
+4.51 181.9 911.8


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/fp2
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/in1
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/in1	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/in1	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,15 @@
+        83        85        87        89
+        84        86        88        90
+        85        87        89        91
+        88        90        92        94
+        89        91        93        95
+        90        92        94        96
+        93        95        97        99
+        94        96        98       100
+        95        97        99       101
+        98       100       102       104
+        99       101       103       105
+       100       102       104       106
+       103       105       107       109
+       104       106       108       110
+       105       107       109       111


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/in1
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test1.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test1.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test10.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test10.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test11.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test11.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test12.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test12.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test13.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test13.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test2.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test2.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test3.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test3.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test4.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test4.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test5.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test5.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test6.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test6.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test7.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test7.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test8.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test8.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test9.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/test9.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textfp32
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textfp32	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textfp32	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,10 @@
+PATH /fp/32-bit
+INPUT-CLASS TEXTFP
+INPUT-SIZE	32
+RANK 3
+DIMENSION-SIZES 2 4 3
+OUTPUT-ARCHITECTURE IEEE
+OUTPUT-BYTE-ORDER LE
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textfp32
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textfp64
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textfp64	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textfp64	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,13 @@
+PATH /fp/64-bit
+INPUT-CLASS TEXTFP
+INPUT-SIZE	64
+RANK 3
+DIMENSION-SIZES 4 4 3
+OUTPUT-ARCHITECTURE IEEE
+OUTPUT-BYTE-ORDER BE
+CHUNKED-DIMENSION-SIZES 2 2 2
+COMPRESSION-PARAM 8
+MAXIMUM-DIMENSIONS -1 6 7
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textfp64
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin16
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin16	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin16	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,12 @@
+PATH /int/16-bit
+INPUT-CLASS TEXTIN
+INPUT-SIZE	16
+RANK 3
+DIMENSION-SIZES 2 4 3
+OUTPUT-BYTE-ORDER LE
+CHUNKED-DIMENSION-SIZES 2 2 2
+MAXIMUM-DIMENSIONS -1 -1 8
+OUTPUT-ARCHITECTURE STD
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin16
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin32
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin32	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin32	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,11 @@
+PATH /int/32-bit
+INPUT-CLASS TEXTIN
+INPUT-SIZE 32
+RANK 3
+DIMENSION-SIZES 2 4 3
+OUTPUT-ARCHITECTURE STD
+OUTPUT-BYTE-ORDER BE
+
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin32
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin8
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin8	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin8	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,16 @@
+PATH /int/8-bit
+INPUT-CLASS TEXTIN
+INPUT-SIZE	8
+OUTPUT-CLASS IN
+OUTPUT-SIZE 8
+OUTPUT-BYTE-ORDER LE
+OUTPUT-ARCHITECTURE STD
+RANK 3
+DIMENSION-SIZES 2 4 3
+CHUNKED-DIMENSION-SIZES 2 2 2
+MAXIMUM-DIMENSIONS -1 -1 -1
+COMPRESSION-PARAM 3
+
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textin8
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textuin16
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textuin16	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textuin16	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,12 @@
+PATH /int/uint/16-bit
+INPUT-CLASS TEXTUIN
+INPUT-SIZE	16
+RANK 2
+DIMENSION-SIZES 4 3
+COMPRESSION-PARAM 2
+CHUNKED-DIMENSION-SIZES 2 2
+OUTPUT-ARCHITECTURE STD
+OUTPUT-BYTE-ORDER LE
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textuin16
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textuin32
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textuin32	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textuin32	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,11 @@
+PATH /int/uint/32-bit
+INPUT-CLASS TEXTUIN
+INPUT-SIZE	32
+RANK 3
+DIMENSION-SIZES 2 4 3
+OUTPUT-ARCHITECTURE STD
+OUTPUT-BYTE-ORDER BE
+
+
+
+


Property changes on: packages/hdf5/branches/upstream/current/tools/h5import/testfiles/textuin32
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5jam/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5jam/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5jam/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,94 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+h5jam.lo: \
+   $(srcdir)/h5jam.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/tools/lib/h5tools_utils.h
+h5unjam.lo: \
+   $(srcdir)/h5unjam.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/tools/lib/h5tools_utils.h

Added: packages/hdf5/branches/upstream/current/tools/h5jam/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5jam/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5jam/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,96 @@
+## HDF5 Library Makefile(.in)
+##
+## 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.
+## 
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Add include directory to the C preprocessor flags, add -lh5tools and
+## -lhdf5 to the list of libraries.
+##
+CPPFLAGS=-I. -I$(srcdir) -I$(top_builddir)/src -I$(top_srcdir)/src  \
+         -I$(top_srcdir)/tools/lib @CPPFLAGS@
+
+## Test programs and scripts.
+##
+TEST_PROGS=
+TEST_SCRIPTS=./testh5jam.sh
+
+OTHER_PROGS=tellub h5jamgentest getub
+## These are our main targets: library and tools.
+##
+LIBTOOLS=../lib/libh5tools.la
+LIBHDF5=$(top_builddir)/src/libhdf5.la
+
+PUB_PROGS=h5jam h5unjam 
+
+PROGS=$(PUB_PROGS) $(TEST_PROGS) $(OTHER_PROGS)
+
+## Source and object files for the library; do not install
+##
+LIB_SRC=
+LIB_OBJ=$(LIB_SRC:.c=.lo)
+PUB_LIB=
+
+## Temporary files.  *.h5 are generated by jamgentest.  They should
+## copied to the testfiles/ directory if update is required.
+MOSTLYCLEAN=*.h5 *.txt
+CLEAN=
+DISTCLEAN=testh5jam.sh
+
+#### FIX AFTER HERE
+
+## Source and object files for programs...
+##
+PROG_SRC=h5jam.c h5unjam.c 
+PROG_OBJ=$(PROG_SRC:.c=.lo)
+
+PRIVATE_HDR=
+
+OTHER_SRC=tellub.c h5jamgentest.c getub.c
+OTHER_OBJ=$(OTHER_SRC:.c=.lo)
+
+## Source and object files for the tests (to be cleaned up)
+##
+TEST_SRC=
+TEST_OBJ=$(TEST_SRC:.c=.lo) $(OTHER_OBJ)
+
+## Programs have to be built before they can be tested!
+##
+check test _test: $(PROGS)
+
+## How to build the programs...They all depend on the hdf5 library and
+## the tools library compiled in this directory.
+##
+$(PROGS): $(LIBTOOLS) $(LIBHDF5)
+
+h5jam: h5jam.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ h5jam.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+h5unjam: h5unjam.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ h5unjam.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+h5jamgentest: h5jamgentest.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ h5jamgentest.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+tellub: tellub.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ tellub.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+getub: getub.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ getub.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+check-all: check 
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/tools/h5jam/getub.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5jam/getub.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5jam/getub.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,170 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdio.h>
+#include <fcntl.h>
+
+#ifdef H5_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "H5private.h"
+#include "h5tools_utils.h"
+
+void parse_command_line (int argc, const char *argv[]);
+
+#define TRUE 1
+#define FALSE 0
+
+static const char *progname="getub";
+char *nbytes = NULL;
+
+static const char *s_opts = "c:";	/* add more later ? */
+static struct long_options l_opts[] = {
+  {"c", require_arg, 'c'},	/* input file */
+  {NULL, 0, '\0'}
+};
+
+/*-------------------------------------------------------------------------
+ * Function:    usage
+ *
+ * Purpose:     Print the usage message
+ *
+ * Return:      void
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+usage (const char *prog)
+{
+  fflush (stdout);
+  fprintf (stdout, "usage: %s -c nb file] \n", prog);
+  fprintf (stdout, "           print first 'nb' byts of file to stdoug.\n");
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    parse_command_line
+ *
+ * Purpose:     Parse the command line for the h5dumper.
+ *
+ * Return:      Success:
+ *
+ *              Failure:    Exits program with EXIT_FAILURE value.
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+void
+parse_command_line (int argc, const char *argv[])
+{
+  int opt = FALSE;
+
+  /* parse command line options */
+  while ((opt = get_option (argc, argv, s_opts, l_opts)) != EOF)
+    {
+      switch ((char) opt)
+	{
+	case 'c':
+	  nbytes = strdup (opt_arg);
+	  break;
+	case '?':
+	default:
+	  usage (progname);
+	  exit (EXIT_FAILURE);
+	}
+    }
+
+  if (argc <= opt_ind)
+    {
+      error_msg (progname, "missing file name\n");
+      usage (progname);
+      exit (EXIT_FAILURE);
+    }
+}
+
+int
+main (int argc, const char *argv[])
+{
+  int fd;
+  unsigned int size;
+  char *filename;
+  long res;
+  char *buf;
+
+  parse_command_line (argc, argv);
+
+  if (nbytes == NULL)
+    {
+      /* missing arg */
+      error_msg (progname, "missing size\n");
+      usage (progname);
+      exit (EXIT_FAILURE);
+    }
+  if (argc <= (opt_ind))
+    {
+      error_msg (progname, "missing file name\n");
+      usage (progname);
+      exit (EXIT_FAILURE);
+    }
+  filename = strdup (argv[opt_ind]);
+
+  size = 0;
+  res = sscanf (nbytes, "%u", &size);
+  if (res == EOF)
+    {
+      /* fail */
+      error_msg (progname, "missing file name\n");
+      usage (progname);
+      exit (EXIT_FAILURE);
+    }
+
+  fd = HDopen (filename, O_RDONLY, 0);
+  if (fd < 0)
+    {
+      error_msg (progname, "can't open file %s\n", filename);
+      exit (EXIT_FAILURE);
+    }
+
+  buf = malloc ((unsigned)(size + 1));
+  if (buf == NULL)
+    {
+      close (fd);
+      exit (EXIT_FAILURE);
+    }
+
+  res = HDread (fd, buf, (unsigned)size);
+
+  if (res < (long)size)
+    {
+      if (buf)
+	free (buf);
+      close (fd);
+      exit (EXIT_FAILURE);
+    }
+
+  HDwrite (1, buf, (unsigned)size);
+
+  if (buf)
+    free (buf);
+  close (fd);
+  return (EXIT_SUCCESS);
+}

Added: packages/hdf5/branches/upstream/current/tools/h5jam/h5jam.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5jam/h5jam.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5jam/h5jam.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,538 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#ifdef H5_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "hdf5.h"
+#include "H5private.h"
+#include "h5tools_utils.h"
+
+#define TRUE 1
+#define FALSE 0
+
+hsize_t write_pad (int, hsize_t);
+hsize_t compute_user_block_size (hsize_t);
+hsize_t copy_some_to_file (int, int, hsize_t, hsize_t, ssize_t);
+void parse_command_line (int, const char *[]);
+
+const char *progname = "h5jam";
+int d_status = EXIT_SUCCESS;
+int do_clobber = FALSE;
+char *output_file = NULL;
+char *input_file = NULL;
+char *ub_file = NULL;
+
+/*
+ * Command-line options: The user can specify short or long-named
+ * parameters. The long-named ones can be partially spelled. When
+ * adding more, make sure that they don't clash with each other.
+ */
+static const char *s_opts = "hi:u:o:c";	/* add more later ? */
+static struct long_options l_opts[] = {
+  {"help", no_arg, 'h'},
+  {"hel", no_arg, 'h'},
+  {"i", require_arg, 'i'},	/* input file */
+  {"u", require_arg, 'u'},	/* user block file */
+  {"o", require_arg, 'o'},	/* output file */
+  {"clobber", no_arg, 'c'},	/* clobber existing UB */
+  {"clobbe", no_arg, 'c'},
+  {"clobb", no_arg, 'c'},
+  {"clob", no_arg, 'c'},
+  {"clo", no_arg, 'c'},
+  {"cl", no_arg, 'c'},
+  {NULL, 0, '\0'}
+};
+
+/*-------------------------------------------------------------------------
+ * Function:    usage
+ *
+ * Purpose:     Print the usage message
+ *
+ * Return:      void
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+usage (const char *prog)
+{
+  fflush (stdout);
+  fprintf (stdout,
+	   "usage: %s -u user_block_file -i h5_file [-o ofile | --clobber] \n",
+	   prog);
+  fprintf (stdout, "           Add 'user_block_file' to front of \n");
+  fprintf (stdout,
+	   "           'h5_file', pad so 'h5_file' starts on proper\n");
+  fprintf (stdout, "           byte.\n");
+  fprintf (stdout, "\n");
+  fprintf (stdout, "       %s -h \n", prog);
+  fprintf (stdout, "           Print a usage message and exit\n");
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    parse_command_line
+ *
+ * Purpose:     Parse the command line for the h5dumper.
+ *
+ * Return:      Success:
+ *
+ *              Failure:    Exits program with EXIT_FAILURE value.
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+void
+parse_command_line (int argc, const char *argv[])
+{
+  int opt = FALSE;
+
+  /* parse command line options */
+  while ((opt = get_option (argc, argv, s_opts, l_opts)) != EOF)
+    {
+      switch ((char) opt)
+	{
+	case 'o':
+	  output_file = strdup (opt_arg);
+	  break;
+	case 'i':
+	  input_file = strdup (opt_arg);
+	  break;
+	case 'u':
+	  ub_file = strdup (opt_arg);
+	  break;
+	case 'c':
+	  do_clobber = TRUE;
+	  break;
+	case 'h':
+	  usage (progname);
+	  exit (EXIT_SUCCESS);
+	case '?':
+	default:
+	  usage (progname);
+	  exit (EXIT_FAILURE);
+	}
+    }
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    main
+ *
+ * Purpose:     HDF5 user block jammer
+ *
+ * Return:      Success:    0
+ *              Failure:    1
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main (int argc, const char *argv[])
+{
+  int ufid;
+  int h5fid;
+  int ofid;
+  void *edata;
+  H5E_auto_t func;
+  hid_t ifile;
+  hid_t plist;
+  herr_t status;
+  htri_t testval;
+  hsize_t usize;
+  hsize_t h5fsize;
+  hsize_t startub;
+  hsize_t where;
+  hsize_t newubsize;
+  off_t fsize;
+  struct stat sbuf;
+  struct stat sbuf2;
+  int res;
+
+  /* Disable error reporting */
+  H5Eget_auto (&func, &edata);
+  H5Eset_auto (NULL, NULL);
+
+  parse_command_line (argc, argv);
+
+  if (ub_file == NULL)
+    {
+      /* no user block */
+      error_msg (progname, "no user block file name\n");
+      usage (progname);
+      exit (EXIT_FAILURE);
+    }
+
+  if (input_file == NULL)
+    {
+      /* no user block */
+      error_msg (progname, "no HDF5 file\n");
+      usage (progname);
+      exit (EXIT_FAILURE);
+    }
+
+  testval = H5Fis_hdf5 (input_file);
+
+  if (testval <= 0)
+    {
+      error_msg (progname, "Input HDF5 file is not HDF \"%s\"\n", input_file);
+      exit (EXIT_FAILURE);
+    }
+
+  ifile = H5Fopen (input_file, H5F_ACC_RDONLY, H5P_DEFAULT);
+
+  if (ifile < 0)
+    {
+      error_msg (progname, "Can't open input HDF5 file \"%s\"\n", input_file);
+      exit (EXIT_FAILURE);
+    }
+
+  plist = H5Fget_create_plist (ifile);
+  if (plist < 0)
+    {
+      error_msg (progname, "Can't get file creation plist for file \"%s\"\n",
+		 input_file);
+      exit (EXIT_FAILURE);
+    }
+
+  status = H5Pget_userblock (plist, &usize);
+  if (status < 0)
+    {
+      error_msg (progname, "Can't get user block for file \"%s\"\n",
+		 input_file);
+      exit (EXIT_FAILURE);
+    }
+
+  H5Pclose (plist);
+  H5Fclose (ifile);
+
+  ufid = HDopen (ub_file, O_RDONLY, 0);
+
+  if (ufid < 0)
+    {
+      error_msg (progname, "unable to open user block file \"%s\"\n",
+		 ub_file);
+      exit (EXIT_FAILURE);
+    }
+
+  res = stat (ub_file, &sbuf);
+
+  if (res < 0)
+    {
+      error_msg (progname, "Can't stat file \"%s\"\n", ub_file);
+      exit (EXIT_FAILURE);
+    }
+
+  fsize = sbuf.st_size;
+
+  h5fid = HDopen (input_file, O_RDONLY, 0);
+
+  if (h5fid < 0)
+    {
+      error_msg (progname, "unable to open HDF5 file for read \"%s\"\n",
+		 input_file);
+      exit (EXIT_FAILURE);
+    }
+
+  res = stat (input_file, &sbuf2);
+
+  if (res < 0)
+    {
+      error_msg (progname, "Can't stat file \"%s\"\n", input_file);
+      exit (EXIT_FAILURE);
+    }
+
+  h5fsize = sbuf2.st_size;
+
+  if (output_file == NULL)
+    {
+      ofid = HDopen (input_file, O_WRONLY, 0);
+
+      if (ofid < 0)
+	{
+	  error_msg (progname, "unable to open output file \"%s\"\n",
+		     output_file);
+	  exit (EXIT_FAILURE);
+	}
+    }
+  else
+    {
+      ofid = HDopen (output_file, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+
+      if (ofid < 0)
+	{
+	  error_msg (progname, "unable to create output file \"%s\"\n",
+		     output_file);
+	  exit (EXIT_FAILURE);
+	}
+    }
+
+  newubsize = compute_user_block_size ((hsize_t) fsize);
+
+  startub = usize;
+
+  if (usize > 0)
+    {
+      if (do_clobber == TRUE)
+	{
+	  /* where is max of the current size or the new UB */
+	  if (usize > newubsize)
+	    {
+	      newubsize = usize;
+	    }
+	  startub = 0;		/*blast the old */
+	}
+      else
+	{
+	  /* add new ub to current ublock, pad to new offset */
+	  newubsize += usize;
+	  newubsize = compute_user_block_size ((hsize_t) newubsize);
+	}
+    }
+
+  /* copy the HDF5 from starting at usize to starting at newubsize:
+   *  makes room at 'from' for new ub */
+  /* if no current ub, usize is 0 */
+  copy_some_to_file (h5fid, ofid, usize, newubsize,
+		     (ssize_t) (h5fsize - usize));
+
+  /* copy the old ub to the beginning of the new file */
+  if (!do_clobber)
+    {
+      where =
+	copy_some_to_file (h5fid, ofid, (hsize_t) 0, (hsize_t) 0,
+			   (ssize_t) usize);
+    }
+
+  /* copy the new ub to the end of the ub */
+  where = copy_some_to_file (ufid, ofid, (hsize_t) 0, startub, (ssize_t) - 1);
+
+  /* pad the ub */
+  where = write_pad (ofid, where);
+
+
+  close (ufid);
+  close (h5fid);
+  close (ofid);
+
+  return d_status;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    copy_some_to_file
+ *
+ * Purpose:     Copy part of the input file to output.
+ *		  infid: fd of file to read
+ *		  outfid: fd of file to write
+ *		  startin: offset of where to read from infid
+ *		  startout: offset of where to write to outfid
+ *		  limit: bytes to read/write
+ *
+ *		If limit is < 0, the entire input file is copied.
+ *
+ *		Note: this routine can be used to copy within
+ *		the same file, i.e., infid and outfid can be the
+ *		same file.
+ *
+ * Return:      Success:    last byte written in the output.
+ *              Failure:    Exits program with EXIT_FAILURE value.
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t
+copy_some_to_file (int infid, int outfid, hsize_t startin, hsize_t startout,
+		   ssize_t limit)
+{
+  char buf[1024];
+  struct stat sbuf;
+  int res;
+  ssize_t tot = 0;
+  ssize_t howmuch = 0;
+  ssize_t nchars = -1;
+/* used in assertion check
+  ssize_t ncw = -1;
+*/
+  ssize_t to;
+  ssize_t from;
+  ssize_t toend;
+  ssize_t fromend;
+
+  if (startin > startout)
+    {
+      /* this case is prohibited */
+      error_msg (progname, "copy_some_to_file: panic: startin > startout?\n");
+      exit (EXIT_FAILURE);
+    }
+
+  if (limit < 0)
+    {
+      res = fstat (infid, &sbuf);
+
+      if (res < 0)
+	{
+	  error_msg (progname, "Can't stat file \n");
+	  exit (EXIT_FAILURE);
+	}
+
+      howmuch = sbuf.st_size;
+    }
+  else
+    {
+      howmuch = limit;
+    }
+
+  if (howmuch == 0)
+    {
+      return 0;
+    }
+
+  /* assert (howmuch > 0) */
+
+  toend = (ssize_t) startout + howmuch;
+  fromend = (ssize_t) startin + howmuch;
+
+  if (howmuch > 512)
+    {
+      to = toend - 512;
+      from = fromend - 512;
+    }
+  else
+    {
+      to = toend - howmuch;
+      from = fromend - howmuch;
+    }
+
+  while (howmuch > 0)
+    {
+      HDlseek (outfid, (off_t) to, SEEK_SET);
+      HDlseek (infid, (off_t) from, SEEK_SET);
+
+      if (howmuch > 512)
+	{
+	  nchars = HDread (infid, buf, (unsigned) 512);
+	}
+      else
+	{
+	  nchars = HDread (infid, buf, (unsigned)howmuch);
+	}
+
+      if (nchars <= 0)
+	{
+	  printf ("huh? \n");
+	  exit (1);
+	}
+      /*ncw = */ HDwrite (outfid, buf, (unsigned) nchars);
+
+      /* assert (ncw == nchars) */
+
+      tot += nchars;
+      howmuch -= nchars;
+      if (howmuch > 512)
+	{
+	  to -= nchars;
+	  from -= nchars;
+	}
+      else
+	{
+	  to -= howmuch;
+	  from -= howmuch;
+	}
+    }
+
+  /* assert howmuch == 0 */
+  /* assert tot == limit */
+
+  return ((hsize_t) tot + (hsize_t) startout);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    compute_user_block_size
+ *
+ * Purpose:     Find the offset of the HDF5 header after the user block:
+ *                 align at 0, 512, 1024, etc.
+ *			ublock_size: the size of the user block (bytes).
+ *
+ * Return:      Success:    the location of the header == the size of the
+ *				padded user block.
+ *              Failure:    none
+ *
+ * Return:      Success:    last byte written in the output.
+ *              Failure:    Exits program with EXIT_FAILURE value.
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t
+compute_user_block_size (hsize_t ublock_size)
+{
+  hsize_t where = 512;
+
+  if (ublock_size == 0)
+    return 0;
+
+  while (where < ublock_size)
+    {
+      where *= 2;
+    }
+
+  return (where);
+}
+
+/*
+ *  Write zeroes to fill the file from 'where' to 512, 1024, etc. bytes.
+ *
+ *  Returns the size of the padded file.
+ */
+hsize_t
+write_pad (int ofile, hsize_t where)
+{
+  unsigned int i;
+  char buf[1];
+  hsize_t psize;
+
+  buf[0] = '\0';
+
+  HDlseek (ofile, (off_t) where, SEEK_SET);
+
+  psize = compute_user_block_size (where);
+  psize -= where;
+
+  for (i = 0; i < psize; i++)
+    {
+      HDwrite (ofile, buf, 1);
+    }
+  return (where + psize);	/* the new size of the file. */
+}

Added: packages/hdf5/branches/upstream/current/tools/h5jam/h5jamgentest.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5jam/h5jamgentest.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5jam/h5jamgentest.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,646 @@
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Generate the binary hdf5 files and user block data for the jam/unjam tests.
+ * Usage: just execute the program without any arguments will
+ * generate all the files in the local directory.
+ *
+ * If you regenerate the test files (e.g., changing some code,
+ * trying it on a new platform, ...), you need to verify the correctness
+ * of the expected output and update the corresponding *.ddl files.
+ */
+#include <limits.h>
+
+#include "hdf5.h"
+#include "H5private.h"
+
+#define UBTXT1 "u0.txt"
+#define UBTXT2 "u10.txt"
+#define UBTXT3 "u511.txt"
+#define UBTXT4 "u512.txt"
+#define UBTXT5 "u513.txt"
+/* not used yet
+#define UBTXT6 "u1023.txt"
+#define UBTXT7 "u1024.txt"
+#define UBTXT8 "u1025.txt"
+#define UBTXT9 "u2047.txt"
+#define UBTXT10 "u2048.txt"
+#define UBTXT11 "u2049.txt"
+#define UBBIN1 "u0.dat"
+#define UBBIN2 "u10.dat"
+#define UBBIN3 "u511.dat"
+#define UBBIN4 "u512.dat"
+#define UBBIN5 "u513.dat"
+*/
+
+/* not used yet
+#define FILE1 "tnull.h5"
+#define FILE2 "tnullwithub.h5"
+*/
+/* tall is same as dumper test */
+#define FILE7 "tall.h5"
+#define FILE8 "twithub.h5"
+#define FILE9 "twithub513.h5"
+
+/*
+ * This pattern is used to fill text files
+ */
+char pattern[11] = "abcdefghij";
+
+/*-------------------------------------------------------------------------
+ * prototypes
+ *-------------------------------------------------------------------------
+ */
+
+
+#define LENSTR  50
+#define LENSTR2  11
+
+#define SPACE2_RANK 2
+#define SPACE2_DIM1 10
+#define SPACE2_DIM2 10
+
+#define SPACE1_RANK 1
+#define SPACE1_DIM1 4
+
+#define DIM1  20
+#define DIM2  10
+#define CDIM1 DIM1/2
+#define CDIM2 DIM2/2
+#define RANK  2
+
+/* Element selection information */
+#define POINT1_NPOINTS 10
+
+typedef enum{
+     RED,
+     GREEN,
+     BLUE,
+     WHITE,
+     BLACK
+} enumtype;
+
+/* Compound datatype */
+typedef struct s1_t {
+    unsigned int a;
+    unsigned int b;
+    float c;
+} s1_t;
+
+
+/* 1-D array datatype */
+#define ARRAY1_RANK 1
+#define ARRAY1_DIM1 4
+
+/* 3-D array datatype */
+#define ARRAY2_RANK 3
+#define ARRAY2_DIM1 3
+#define ARRAY2_DIM2 4
+#define ARRAY2_DIM3 5
+
+/* 2-D array datatype */
+#define ARRAY3_RANK 2
+#define ARRAY3_DIM1 6
+#define ARRAY3_DIM2 3
+
+/* VL string datatype name */
+#define VLSTR_TYPE      "vl_string_type"
+
+
+/*
+
+/ : g1  g2  attr1  attr2
+g1 : g1.1  g1.2
+g1.1 : dset1.1.1(attr1, attr2)   dset1.1.2
+g1.2 : g1.2.1
+g1.2.1 : slink
+g2 : dset2.1  dset2.2
+
+*/
+
+
+static void gent_all(void) {
+hid_t fid, group, attr, dataset, space;
+hsize_t dims[2];
+int data[2][2], dset1[10][10], dset2[20];
+char buf[60];
+int i, j;
+float dset2_1[10], dset2_2[3][5];
+
+  fid = H5Fcreate(FILE7, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+  /* create groups */
+  group = H5Gcreate (fid, "/g1", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g2", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g1/g1.1", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g1/g1.2", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g1/g1.2/g1.2.1", 0);
+  H5Gclose(group);
+
+  /* root attributes */
+  group = H5Gopen (fid, "/");
+
+  dims[0] = 10;
+  space = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (group, "attr1", H5T_STD_I8BE, space, H5P_DEFAULT);
+  sprintf(buf, "abcdefghi");
+  H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  dims[0] = 2; dims[1] = 2;
+  space = H5Screate_simple(2, dims, NULL);
+  attr = H5Acreate (group, "attr2", H5T_STD_I32BE, space, H5P_DEFAULT);
+  data[0][0] = 0; data[0][1] = 1; data[1][0] = 2; data[1][1] = 3;
+  H5Awrite(attr, H5T_NATIVE_INT, data);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  H5Gclose(group);
+
+  group = H5Gopen (fid, "/g1/g1.1");
+
+  /* dset1.1.1 */
+  dims[0] = 10; dims[1] = 10;
+  space = H5Screate_simple(2, dims, NULL);
+  dataset = H5Dcreate(group, "dset1.1.1", H5T_STD_I32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+            dset1[i][j] = j*i;
+  H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset1);
+  H5Sclose(space);
+
+  /* attributes of dset1.1.1 */
+  dims[0] = 27;
+  space = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (dataset, "attr1", H5T_STD_I8BE, space, H5P_DEFAULT);
+  sprintf(buf, "1st attribute of dset1.1.1");
+  H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  dims[0] = 27;
+  space = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (dataset, "attr2", H5T_STD_I8BE, space, H5P_DEFAULT);
+  sprintf(buf, "2nd attribute of dset1.1.1");
+  H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  H5Dclose(dataset);
+
+  /* dset1.1.2 */
+  dims[0] = 20;
+  space = H5Screate_simple(1, dims, NULL);
+  dataset = H5Dcreate(group, "dset1.1.2", H5T_STD_I32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 20; i++)
+       dset2[i] = i;
+  H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  H5Gclose(group);
+
+  /* soft link */
+  group = H5Gopen (fid, "/g1/g1.2/g1.2.1");
+  H5Glink (group, H5G_LINK_SOFT, "somevalue", "slink");
+  H5Gclose(group);
+
+  group = H5Gopen (fid, "/g2");
+
+  /* dset2.1 */
+  dims[0] = 10;
+  space = H5Screate_simple(1, dims, NULL);
+  dataset = H5Dcreate(group, "dset2.1", H5T_IEEE_F32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 10; i++)
+       dset2_1[i] = (float)(i*0.1+1);
+  H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2_1);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  /* dset2.2 */
+  dims[0] = 3; dims[1] = 5;
+  space = H5Screate_simple(2, dims, NULL);
+  dataset = H5Dcreate(group, "dset2.2", H5T_IEEE_F32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 3; i++)
+       for (j = 0; j < 5; j++)
+            dset2_2[i][j] = (float)((i+1)*j*0.1);
+  H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2_2);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  H5Gclose(group);
+
+  H5Fclose(fid);
+
+}
+
+static void gent_withub(void) {
+hid_t fid, group, attr, dataset, space;
+hid_t create_plist;
+hsize_t dims[2];
+int data[2][2], dset1[10][10], dset2[20];
+char buf[512];
+int i, j;
+unsigned u;
+float dset2_1[10], dset2_2[3][5];
+int fd;
+char *bp;
+
+  create_plist = H5Pcreate(H5P_FILE_CREATE);
+  H5Pset_userblock(create_plist,(hsize_t)512);
+  fid = H5Fcreate(FILE8, H5F_ACC_TRUNC, create_plist, H5P_DEFAULT);
+
+  /* create groups */
+  group = H5Gcreate (fid, "/g1", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g2", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g1/g1.1", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g1/g1.2", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g1/g1.2/g1.2.1", 0);
+  H5Gclose(group);
+
+  /* root attributes */
+  group = H5Gopen (fid, "/");
+
+  dims[0] = 10;
+  space = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (group, "attr1", H5T_STD_I8BE, space, H5P_DEFAULT);
+  sprintf(buf, "abcdefghi");
+  H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  dims[0] = 2; dims[1] = 2;
+  space = H5Screate_simple(2, dims, NULL);
+  attr = H5Acreate (group, "attr2", H5T_STD_I32BE, space, H5P_DEFAULT);
+  data[0][0] = 0; data[0][1] = 1; data[1][0] = 2; data[1][1] = 3;
+  H5Awrite(attr, H5T_NATIVE_INT, data);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  H5Gclose(group);
+
+  group = H5Gopen (fid, "/g1/g1.1");
+
+  /* dset1.1.1 */
+  dims[0] = 10; dims[1] = 10;
+  space = H5Screate_simple(2, dims, NULL);
+  dataset = H5Dcreate(group, "dset1.1.1", H5T_STD_I32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+            dset1[i][j] = j*i;
+  H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset1);
+  H5Sclose(space);
+
+  /* attributes of dset1.1.1 */
+  dims[0] = 27;
+  space = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (dataset, "attr1", H5T_STD_I8BE, space, H5P_DEFAULT);
+  sprintf(buf, "1st attribute of dset1.1.1");
+  H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  dims[0] = 27;
+  space = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (dataset, "attr2", H5T_STD_I8BE, space, H5P_DEFAULT);
+  sprintf(buf, "2nd attribute of dset1.1.1");
+  H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  H5Dclose(dataset);
+
+  /* dset1.1.2 */
+  dims[0] = 20;
+  space = H5Screate_simple(1, dims, NULL);
+  dataset = H5Dcreate(group, "dset1.1.2", H5T_STD_I32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 20; i++)
+       dset2[i] = i;
+  H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  H5Gclose(group);
+
+  /* soft link */
+  group = H5Gopen (fid, "/g1/g1.2/g1.2.1");
+  H5Glink (group, H5G_LINK_SOFT, "somevalue", "slink");
+  H5Gclose(group);
+
+  group = H5Gopen (fid, "/g2");
+
+  /* dset2.1 */
+  dims[0] = 10;
+  space = H5Screate_simple(1, dims, NULL);
+  dataset = H5Dcreate(group, "dset2.1", H5T_IEEE_F32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 10; i++)
+       dset2_1[i] = (float)(i*0.1+1);
+  H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2_1);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  /* dset2.2 */
+  dims[0] = 3; dims[1] = 5;
+  space = H5Screate_simple(2, dims, NULL);
+  dataset = H5Dcreate(group, "dset2.2", H5T_IEEE_F32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 3; i++)
+       for (j = 0; j < 5; j++)
+            dset2_2[i][j] = (float)((i+1)*j*0.1);
+  H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2_2);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  H5Gclose(group);
+
+  H5Fclose(fid);
+
+
+	fd = HDopen(FILE8,O_RDWR, 0);
+	if (fd < 0) {
+		/* panic */
+	}
+	/* fill buf with pattern */
+	memset(buf,'\0',512);
+	bp = buf;
+	for (u = 0; u < strlen(pattern); u++) {
+		*bp++ = pattern[u%10];
+	}
+
+	HDwrite(fd,buf,512);
+
+	close(fd);
+}
+
+static void gent_withub513(void) {
+hid_t fid, group, attr, dataset, space;
+hid_t create_plist;
+hsize_t dims[2];
+int data[2][2], dset1[10][10], dset2[20];
+char buf[1023];
+int i, j;
+float dset2_1[10], dset2_2[3][5];
+int fd;
+char *bp;
+
+  create_plist = H5Pcreate(H5P_FILE_CREATE);
+  H5Pset_userblock(create_plist,(hsize_t)1024);
+  fid = H5Fcreate(FILE9, H5F_ACC_TRUNC, create_plist, H5P_DEFAULT);
+
+  /* create groups */
+  group = H5Gcreate (fid, "/g1", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g2", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g1/g1.1", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g1/g1.2", 0);
+  H5Gclose(group);
+
+  group = H5Gcreate (fid, "/g1/g1.2/g1.2.1", 0);
+  H5Gclose(group);
+
+  /* root attributes */
+  group = H5Gopen (fid, "/");
+
+  dims[0] = 10;
+  space = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (group, "attr1", H5T_STD_I8BE, space, H5P_DEFAULT);
+  sprintf(buf, "abcdefghi");
+  H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  dims[0] = 2; dims[1] = 2;
+  space = H5Screate_simple(2, dims, NULL);
+  attr = H5Acreate (group, "attr2", H5T_STD_I32BE, space, H5P_DEFAULT);
+  data[0][0] = 0; data[0][1] = 1; data[1][0] = 2; data[1][1] = 3;
+  H5Awrite(attr, H5T_NATIVE_INT, data);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  H5Gclose(group);
+
+  group = H5Gopen (fid, "/g1/g1.1");
+
+  /* dset1.1.1 */
+  dims[0] = 10; dims[1] = 10;
+  space = H5Screate_simple(2, dims, NULL);
+  dataset = H5Dcreate(group, "dset1.1.1", H5T_STD_I32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 10; i++)
+       for (j = 0; j < 10; j++)
+            dset1[i][j] = j*i;
+  H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset1);
+  H5Sclose(space);
+
+  /* attributes of dset1.1.1 */
+  dims[0] = 27;
+  space = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (dataset, "attr1", H5T_STD_I8BE, space, H5P_DEFAULT);
+  sprintf(buf, "1st attribute of dset1.1.1");
+  H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  dims[0] = 27;
+  space = H5Screate_simple(1, dims, NULL);
+  attr = H5Acreate (dataset, "attr2", H5T_STD_I8BE, space, H5P_DEFAULT);
+  sprintf(buf, "2nd attribute of dset1.1.1");
+  H5Awrite(attr, H5T_NATIVE_SCHAR, buf);
+  H5Sclose(space);
+  H5Aclose(attr);
+
+  H5Dclose(dataset);
+
+  /* dset1.1.2 */
+  dims[0] = 20;
+  space = H5Screate_simple(1, dims, NULL);
+  dataset = H5Dcreate(group, "dset1.1.2", H5T_STD_I32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 20; i++)
+       dset2[i] = i;
+  H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  H5Gclose(group);
+
+  /* soft link */
+  group = H5Gopen (fid, "/g1/g1.2/g1.2.1");
+  H5Glink (group, H5G_LINK_SOFT, "somevalue", "slink");
+  H5Gclose(group);
+
+  group = H5Gopen (fid, "/g2");
+
+  /* dset2.1 */
+  dims[0] = 10;
+  space = H5Screate_simple(1, dims, NULL);
+  dataset = H5Dcreate(group, "dset2.1", H5T_IEEE_F32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 10; i++)
+       dset2_1[i] = (float)(i*0.1+1);
+  H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2_1);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  /* dset2.2 */
+  dims[0] = 3; dims[1] = 5;
+  space = H5Screate_simple(2, dims, NULL);
+  dataset = H5Dcreate(group, "dset2.2", H5T_IEEE_F32BE, space, H5P_DEFAULT);
+  for (i = 0; i < 3; i++)
+       for (j = 0; j < 5; j++)
+            dset2_2[i][j] = (float)((i+1)*j*0.1);
+  H5Dwrite(dataset, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset2_2);
+  H5Sclose(space);
+  H5Dclose(dataset);
+
+  H5Gclose(group);
+
+  H5Fclose(fid);
+
+
+	fd = HDopen(FILE9,O_RDWR, 0);
+	if (fd < 0) {
+		/* panic */
+	}
+	/* fill buf with pattern */
+	memset(buf,'\0',1024);
+	bp = buf;
+	for (i = 0; i < 513; i++) {
+		*bp++ = pattern[i%10];
+	}
+
+	HDwrite(fd,buf,1024);
+
+	close(fd);
+}
+
+static void
+create_textfile(const char *name, size_t size) {
+char *buf;
+int fd;
+size_t i;
+char *bp;
+
+
+	#ifdef WIN32
+	fd = _creat(name, _S_IREAD | _S_IWRITE);
+	#else /* WIN32 */
+	fd = creat(name,(mode_t)0777);
+	#endif /* WIN32 */
+	if (fd < 0) {
+		/* panic */
+	}
+	buf = calloc(size,1);
+	if (buf == NULL) {
+		/* panic */
+	}
+	/* fill buf with pattern */
+	bp = buf;
+	for (i = 0; i < size; i++) {
+		*bp++ = pattern[i%10];
+	}
+
+
+	HDwrite(fd,buf,size);
+
+	close(fd);
+}
+
+#ifdef notdef
+/* not used yet */
+void
+create_binfile(char *name, off_t size) {
+char *buf;
+int fd;
+int i;
+char *bp;
+
+
+	fd = creat(name,0777);
+	if (fd < 0) {
+		/* panic */
+	}
+	buf = calloc(size,1);
+	if (buf == NULL) {
+		/* panic */
+	}
+	/* fill buf with pattern */
+	bp = buf;
+	for (i = 0; i < size; i++) {
+		*bp++ = (char) i & 0xff;
+	}
+
+	HDwrite(fd,buf,size);
+
+	close(fd);
+}
+#endif
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+int main(void)
+{
+
+/*
+create_textfile(UBTXT1,0);
+*/
+create_textfile(UBTXT2,10);
+create_textfile(UBTXT3,511);
+create_textfile(UBTXT4,512);
+create_textfile(UBTXT5,513);
+/*
+create_textfile(UBTXT6,1023);
+create_textfile(UBTXT7,1024);
+create_textfile(UBTXT8,1025);
+create_textfile(UBTXT9,2047);
+create_textfile(UBTXT10,2048);
+create_textfile(UBTXT11,2049);
+
+create_binfile(UBBIN1,0);
+create_binfile(UBBIN2,10);
+create_binfile(UBBIN3,511);
+create_binfile(UBBIN4,512);
+create_binfile(UBBIN5,513);
+
+*/
+    gent_all();
+    gent_withub();
+    gent_withub513();
+
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/tools/h5jam/h5unjam.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5jam/h5unjam.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5jam/h5unjam.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,317 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+
+#ifdef H5_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "hdf5.h"
+#include "H5private.h"
+#include "h5tools_utils.h"
+
+#define TRUE 1
+#define FALSE 0
+
+hsize_t write_pad( int , hsize_t );
+hsize_t compute_pad( hsize_t );
+hsize_t copy_to_file( int , int , ssize_t, ssize_t );
+
+const char  *progname = "h5unjam";
+int          d_status = EXIT_SUCCESS;
+int do_delete = FALSE;
+char *output_file = NULL;
+char *input_file = NULL;
+char *ub_file = NULL;
+
+/*
+ * Command-line options: The user can specify short or long-named
+ * parameters. The long-named ones can be partially spelled. When
+ * adding more, make sure that they don't clash with each other.
+ */
+static const char *s_opts = "hu:i:o:d";
+static struct long_options l_opts[] = {
+    { "help", no_arg, 'h' },
+    { "hel", no_arg, 'h' },
+  {"i", require_arg, 'i'},	/* input file */
+  {"u", require_arg, 'u'},	/* user block file */
+  {"o", require_arg, 'o'},	/* output file */
+  {"delete", no_arg, 'd'},	/* delete ub */
+  {"delet", no_arg, 'd'},
+  {"dele", no_arg, 'd'},
+  {"del", no_arg, 'd'},
+  {"de", no_arg, 'd'},
+    { NULL, 0, '\0' }
+};
+
+/*-------------------------------------------------------------------------
+ * Function:    usage
+ *
+ * Purpose:     Print the usage message
+ *
+ * Return:      void
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+usage(const char *prog)
+{
+    fflush(stdout);
+    fprintf(stdout, "usage: %s -i h5_file -o user_block_file_out -o h5_file_out [-d | --delete]\n", prog);
+    fprintf(stdout, "           Extract user block from 'h5_file' into 'user_block_file'\n");
+    fprintf(stdout, "           and HDF5 file into 'h5_file_out'\n");
+
+    fprintf(stdout, "       %s -h\n",prog);
+    fprintf(stdout, "           Print a usage message and exit\n");
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    parse_command_line
+ *
+ * Purpose:     Parse the command line for the h5dumper.
+ *
+ * Return:      Success:
+ *
+ *              Failure:    Exits program with EXIT_FAILURE value.
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+parse_command_line(int argc, const char *argv[])
+{
+    int                 opt  = FALSE;
+
+    /* parse command line options */
+    while ((opt = get_option(argc, argv, s_opts, l_opts)) != EOF) {
+        switch ((char)opt) {
+	case 'o':
+	  output_file = strdup (opt_arg);
+	  break;
+	case 'i':
+	  input_file = strdup (opt_arg);
+	  break;
+	case 'u':
+	  ub_file = strdup (opt_arg);
+	  break;
+	case 'd':
+	  do_delete = TRUE;
+	  break;
+        case 'h':
+            usage(progname);
+            exit(EXIT_SUCCESS);
+        case '?':
+        default:
+            usage(progname);
+            exit(EXIT_FAILURE);
+        }
+    }
+
+    /* check for file name to be processed */
+/*
+    if (argc <= opt_ind+2) {
+        error_msg(progname, "missing file name\n");
+        usage(progname);
+        exit(EXIT_FAILURE);
+    }
+*/
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    main
+ *
+ * Purpose:     HDF5 user block unjammer
+ *
+ * Return:      Success:    0
+ *              Failure:    1
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(int argc, const char *argv[])
+{
+    int   ifid;
+    int   ufid;
+    int   h5fid;
+    void               *edata;
+    H5E_auto_t          func;
+    hid_t               ifile;
+    off_t fsize;
+    hsize_t usize;
+    htri_t testval;
+    herr_t status;
+    hid_t plist;
+    int res;
+    struct stat sbuf;
+
+    /* Disable error reporting */
+    H5Eget_auto(&func, &edata);
+    H5Eset_auto(NULL, NULL);
+
+    parse_command_line(argc, argv);
+
+    testval = H5Fis_hdf5(input_file);
+
+    if (testval <= 0) {
+        error_msg(progname, "Input HDF5 file is not HDF \"%s\"\n", input_file);
+        exit(EXIT_FAILURE);
+    }
+
+    ifile = H5Fopen(input_file, H5F_ACC_RDONLY , H5P_DEFAULT);
+
+    if (ifile < 0) {
+        error_msg(progname, "Can't open input HDF5 file \"%s\"\n", input_file);
+        exit(EXIT_FAILURE);
+    }
+
+    plist = H5Fget_create_plist(ifile);
+    if (plist < 0) {
+        error_msg(progname, "Can't get file creation plist for file \"%s\"\n", input_file);
+        exit(EXIT_FAILURE);
+    }
+
+    status =  H5Pget_userblock(plist, & usize  );
+    if (status < 0) {
+        error_msg(progname, "Can't get user block for file \"%s\"\n", input_file);
+        exit(EXIT_FAILURE);
+    }
+
+    if (usize == 0) {
+	/* no user block to remove: message? */
+        error_msg(progname, "\"%s\" has no user block: no change to file\n", input_file);
+        exit(EXIT_SUCCESS);
+
+    }
+
+    res = stat(input_file, &sbuf);
+
+    if (res < 0) {
+        error_msg(progname, "Can't stat file \"%s\"\n", input_file);
+        exit(EXIT_FAILURE);
+    }
+
+    fsize = sbuf.st_size;
+
+    ifid = HDopen(input_file,O_RDONLY,0);
+
+    if (ifid < 0) {
+        error_msg(progname, "unable to open input HDF5 file \"%s\"\n", input_file);
+        exit(EXIT_FAILURE);
+    }
+
+    if (do_delete && (ub_file != NULL)) {
+            error_msg(progname, "??\"%s\"\n", ub_file);
+            exit(EXIT_FAILURE);
+    }
+
+    if (ub_file == NULL) {
+	/* write to sdtout */
+	ufid = dup(1);
+    } else {
+        ufid = HDopen(ub_file,O_WRONLY|O_CREAT|O_TRUNC, 0644 );
+
+        if (ufid < 0) {
+            error_msg(progname, "unable to open user block file for output\"%s\"\n", ub_file);
+            exit(EXIT_FAILURE);
+        }
+    }
+
+    if (output_file == NULL) {
+        h5fid = HDopen(input_file,O_WRONLY, 0);
+
+        if (h5fid < 0) {
+            error_msg(progname, "unable to open output HDF5 file \"%s\"\n", input_file);
+            exit(EXIT_FAILURE);
+        }
+    } else {
+        h5fid = open(output_file,O_WRONLY|O_CREAT|O_TRUNC, 0644 );
+
+        if (h5fid < 0) {
+            error_msg(progname, "unable to open output HDF5 file \"%s\"\n", output_file);
+            exit(EXIT_FAILURE);
+        }
+    }
+
+
+    /* copy from 0 to 'usize - 1' into ufid */
+    if (!do_delete) {
+	    copy_to_file( ifid, ufid, 0, (ssize_t) usize);
+    }
+
+    /* copy from usize to end of file into h5fid,
+     * starting at end of user block if present
+     */
+    copy_to_file( ifid, h5fid, (ssize_t) usize, (ssize_t)(fsize - (ssize_t)usize) );
+
+
+    close(ufid);
+    close(h5fid);
+    close(ifid);
+
+    return d_status;
+}
+
+/*
+ *  Copy 'how_much' bytes from the input file to the output file,
+ *  starting at byte 'where' in the input file.
+ *
+ *  Returns the size of the output file.
+ */
+hsize_t
+copy_to_file( int infid, int ofid, ssize_t where, ssize_t how_much ) {
+	char buf[1024];
+	off_t to;
+	off_t from;
+	ssize_t nchars = -1;
+
+
+	if (how_much <= 0) {
+		/* nothing to copy */
+		return(where);
+	}
+	from = where;
+	to = 0;
+
+	while( how_much > 0) {
+		HDlseek(infid,from,SEEK_SET);
+		if (how_much > 512) {
+			nchars = HDread(infid,buf,(unsigned)512);
+		} else {
+			nchars = HDread(infid,buf,(unsigned)how_much);
+		}
+		HDlseek(ofid,to,SEEK_SET);
+		HDwrite(ofid,buf,(unsigned)nchars);
+		how_much -= nchars;
+		from += nchars;
+		to += nchars;
+	}
+
+	return (where+how_much);
+}

Added: packages/hdf5/branches/upstream/current/tools/h5jam/tellub.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5jam/tellub.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5jam/tellub.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,189 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdio.h>
+
+#ifdef H5_HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include "hdf5.h"
+#include "H5private.h"
+#include "h5tools_utils.h"
+
+#define TRUE 1
+#define FALSE 0
+
+const char *progname = "tellub";
+
+/*
+ * Command-line options: The user can specify short or long-named
+ * parameters. The long-named ones can be partially spelled. When
+ * adding more, make sure that they don't clash with each other.
+ */
+static const char *s_opts = "h";
+static struct long_options l_opts[] = {
+  {"help", no_arg, 'h'},
+  {"hel", no_arg, 'h'},
+  {NULL, 0, '\0'}
+};
+
+/*-------------------------------------------------------------------------
+ * Function:    usage
+ *
+ * Purpose:     Print the usage message
+ *
+ * Return:      void
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+usage (const char *prog)
+{
+  fflush (stdout);
+  fprintf (stdout, "usage: %s h5_file\n", prog);
+  fprintf (stdout,
+	   "           Check that h5_fil is HDF5 file and print size of user block \n");
+  fprintf (stdout, "       %s -h\n", prog);
+  fprintf (stdout, "           Print a usage message and exit\n");
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    parse_command_line
+ *
+ * Purpose:     Parse the command line for the h5dumper.
+ *
+ * Return:      Success:
+ *
+ *              Failure:    Exits program with EXIT_FAILURE value.
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void
+parse_command_line (int argc, const char *argv[])
+{
+  int opt = FALSE;
+
+  /* parse command line options */
+  while ((opt = get_option (argc, argv, s_opts, l_opts)) != EOF)
+    {
+      switch ((char) opt)
+	{
+	case 'h':
+	  usage (progname);
+	  exit (EXIT_SUCCESS);
+	case '?':
+	default:
+	  usage (progname);
+	  exit (EXIT_FAILURE);
+	}
+    }
+
+  /* check for file name to be processed */
+  if (argc <= opt_ind)
+    {
+      error_msg (progname, "missing file name\n");
+      usage (progname);
+      exit (EXIT_FAILURE);
+    }
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    main
+ *
+ * Purpose:     HDF5 user block unjammer
+ *
+ * Return:      Success:    0
+ *              Failure:    1
+ *
+ * Programmer:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main (int argc, const char *argv[])
+{
+  char *ifname;
+  void *edata;
+  H5E_auto_t func;
+  hid_t ifile;
+  hsize_t usize;
+  htri_t testval;
+  herr_t status;
+  hid_t plist;
+
+  /* Disable error reporting */
+  H5Eget_auto(&func, &edata);
+  H5Eset_auto(NULL, NULL);
+
+  parse_command_line (argc, argv);
+
+  if (argc <= (opt_ind))
+    {
+      error_msg (progname, "missing file name\n");
+      usage (progname);
+      return (EXIT_FAILURE);
+    }
+
+  ifname = strdup (argv[opt_ind]);
+
+  testval = H5Fis_hdf5 (ifname);
+
+  if (testval <= 0)
+    {
+      error_msg (progname, "Input HDF5 file is not HDF \"%s\"\n", ifname);
+      return (EXIT_FAILURE);
+    }
+
+  ifile = H5Fopen (ifname, H5F_ACC_RDONLY, H5P_DEFAULT);
+
+  if (ifile < 0)
+    {
+      error_msg (progname, "Can't open input HDF5 file \"%s\"\n", ifname);
+      return (EXIT_FAILURE);
+    }
+
+  plist = H5Fget_create_plist (ifile);
+  if (plist < 0)
+    {
+      error_msg (progname, "Can't get file creation plist for file \"%s\"\n",
+		 ifname);
+      return (EXIT_FAILURE);
+    }
+
+  status = H5Pget_userblock (plist, &usize);
+  if (status < 0)
+    {
+      error_msg (progname, "Can't get user block for file \"%s\"\n", ifname);
+      return (EXIT_FAILURE);
+    }
+
+  printf ("%ld\n", (long) usize);
+
+  H5Pclose (plist);
+  H5Fclose (ifile);
+
+  return (EXIT_SUCCESS);
+}

Added: packages/hdf5/branches/upstream/current/tools/h5jam/testh5jam.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5jam/testh5jam.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5jam/testh5jam.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,532 @@
+#! /bin/sh
+#
+# 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.
+#
+# Tests for the h5dump tool
+
+# Determine which filters are available
+USE_FILTER_SZIP="@USE_FILTER_SZIP@"
+USE_FILTER_DEFLATE="@USE_FILTER_DEFLATE@"
+USE_FILTER_SHUFFLE="@USE_FILTER_SHUFFLE@"
+USE_FILTER_FLETCHER32="@USE_FILTER_FLETCHER32@"
+
+DUMPER=h5dump               # The dumper to use
+DUMPER_BIN=`pwd`/../$DUMPER    # The path of the dumper binary
+JAM=h5jam                     # Tool to test
+UNJAM=h5unjam                     # Tool to test
+JAM_BIN="$RUNSERIAL "`pwd`    # The path of the jam binary
+UNJAM_BIN=`pwd`    # The path of the jam binary
+
+CMP='cmp -s'
+DIFF='diff -c'
+AWK='awk'
+
+nerrors=0
+verbose=yes
+
+# The build (current) directory might be different than the source directory.
+if test -z "$srcdir"; then
+   srcdir=.
+fi
+TESTFILES="$srcdir/../testfiles"
+
+#test -d ../testfiles || mkdir ../testfiles
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Testing".
+#
+TESTING() {
+   SPACES="                                                               "
+   echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
+}
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Compare".
+#
+COMPARE() {
+   SPACES="                                                               "
+   echo "Compare $* $SPACES" | cut -c1-70 | tr -d '\012'
+}
+
+# Print a "SKIP" message
+SKIP() {
+ TESTING $JAM $@
+ echo  " -SKIP-"
+}
+
+# 
+#  COMPARE_FILES a.h5 b.h5
+#    Compare two files, skipping the first line.  This is used to 
+#    compare the output of the dumper, skipping the file name which
+#    is different.
+#    The result is stored in 'compval'.
+#
+cmpval=0;
+COMPARE_FILES() {
+	$AWK 'NR > 1' $1 > $1.cmp
+	$AWK 'NR > 1' $2 > $2.cmp
+ 	$CMP $1.cmp $2.cmp 
+ 	cmpval=$?
+        rm -f $1.cmp $2.cmp
+}
+
+#  CLEANUP files
+#     Clean up named files.
+CLEANUP() {
+   if test -z "$HDF5_NOCLEANUP"; then
+	for i in $*
+	do
+		rm -f $i
+	done
+   fi
+}
+
+#  SETUP file tocopy
+#    Clone a standard input file in the test directory
+#  Modification:
+#    Was using "cp" command which means file $2 will inherit the permission
+#    setting of file $1.  If $1 is read-only, so will $2.  That will cause
+#    failure when the test attempts to write it later on.  Changed to use
+#    the "cat" command.
+#
+SETUP() {
+	cat < $1 > $2
+}
+
+#
+#  CHECKFILE orig.h5 compar.h5
+#     Check that the test file is the same as an original.
+#     The two files are dumped with the dumper, and the output
+#     compared with COMPARE_FILES.
+#     If the files are the same, the test reports " PASSED",
+#     otherwise, it reports "*FAILED*"
+CHECKFILE() {
+   expected="`dirname $2`/`basename $2 .h5`.out"
+   expected_err="`dirname $2`/`basename $2 .h5`.err"
+   actual="`basename $1 .h5`.out"
+   actual_err="`basename $1 .h5`.err"
+
+   $RUNSERIAL $DUMPER_BIN/$DUMPER $1 >$expected 2>$expected_err
+   cat $expected_err >> $expected
+
+   # dump the test file
+   COMPARE $2 to $1
+   $RUNSERIAL $DUMPER_BIN/$DUMPER $2 >$actual 2>$actual_err
+   cat $actual_err >> $actual
+
+   # compare the two files (ignore line 1)
+   COMPARE_FILES $actual $expected
+   if [ "$cmpval" = 0 ] ; then
+      echo " PASSED"
+   else
+      echo "*FAILED*"
+      echo "    Expected result (*.ddl) differs from actual result (*.out)"
+      nerrors="`expr $nerrors + 1`"
+      test yes = "$verbose" && $DIFF $expected $actual |sed 's/^/    /'
+   fi
+
+   # Clean up output files
+   if test -z "$HDF5_NOCLEANUP"; then
+      rm -f $actual $actual_err
+      rm -f $expected $expected_err
+   fi
+}
+
+#
+# CHECK_UB file.h5 user_block_file origfile.h5 
+#
+#   Check the user block in 'file.h5' is the same as
+#   'user_block' (allowing for padding).
+#
+#   If the original file had a user block before the test
+#   then 'compare.h5' is passed.  The user block must be extracted
+#   and the test file compared to:
+#      cat compare_ub user_block_file.
+#
+#   This test uses './getub' to extract the user block from 
+#   'file.h5', which is compared to the file described above.
+#
+#   The result is set in variable 'result1'.
+#
+result1=0;
+CHECK_UB_1() {
+	hfile="$1"
+	ufile="$2"
+
+	# check for third argument (the original file)
+	origfile="";
+	if [ -n "$3" ];
+	then
+		origfile="$3"
+	fi
+
+	# find the length of the user block to check
+	s1=`cat $ufile | wc -c | sed -e 's/ //g'`
+	if [ "$s1" = "0" ];
+	then
+		echo "File "$ufile" is empty"
+		result1=1;
+	fi
+
+	# Get the size of the original user block, if any.
+	if [ -n "$origfile" ];
+	then
+		# 'tellub' calls H5Fget_user_block to get the size
+		#  of the user block
+		s2=`$JAM_BIN/tellub $origfile`
+		if [ "$s2" = "0" ];
+		then
+			size=$s1;
+			cmpfile=$ufile
+		else
+			cmpfile="tt2"
+			size=`expr $s2 + $s1`
+			$JAM_BIN/getub -c $s2 $origfile > $cmpfile
+			cat $ufile >> $cmpfile
+		fi
+	else
+		# assume no user block
+		s2="0"
+		size=$s1;
+		cmpfile=$ufile
+	fi
+
+	# Extract 'size' bytes from the front of 'hfile'
+	# Compare to 'cmpfile', result is set in result1
+	tfile="tt1"
+	$JAM_BIN/getub -c $size $hfile > $tfile
+	res=`cmp $cmpfile $tfile`
+	if [ "$?" != "0" ];
+	then
+		echo $res
+		result1=1;
+	else
+		result1=0;
+	fi
+
+	# clean up
+	rm -f  $tfile
+	if [ "$s2" != "0" ] ;
+	then
+		rm -f $cmpfile
+	fi
+}
+
+
+#  CHECK_NOUB file.h5
+#
+#  Check that 'file.h5' has no user block.
+#  Setst result2 to 1 if there is a user block (fail), 0 if none (pass)
+
+result2=0;
+
+CHECK_NOUB() {
+	hfile="$1"
+
+	# call 'ubsize' to get the size of the user block
+	ubsize=`$JAM_BIN/tellub $hfile`
+
+	if [ "$?" != "0" ];
+	then
+		# error
+		result2=1;
+	else
+	if [ "$ubsize" = "0" ];
+	then
+		# pass
+		result2=0;
+	else
+		# fail
+		result2=1;
+	fi
+	fi
+}
+
+#  JAMTEST user_block file.h5 [--clobber] [ofile.h5]
+#
+#    Test the 'jam' tool:
+#      1. figure out the input and output, and the comparision
+#         that will be done.
+#      2. call 'jam' with the appropriate arguments
+#      3. check the user block is correct in the output (Check_UB)
+#    If the user block is correct, print "PASSED", else "*FAILED*"
+JAMTEST() {
+	ufile="$1"
+	ifile="$2"
+	compare_test=""   # the file to test
+	compare_orig=""   # the comparison to test against
+	cleanup=""
+
+	# sort out the arguments for the test and the check
+	do_clobber="no"
+	if [ "$3" = "--clobber" ];
+	then
+		#  clobber overwrites any existing user block
+		do_clobber="yes"
+		clobber="--clobber"
+		compare_orig=""
+		if [ -z "$4" ];
+		then
+			# output goes to infile, compare ubfile to infile
+			ofile=""
+			compare_test="$ifile"
+		else
+			# output goes to $4,  compare ofile to ubfile
+			ofile="$4"
+			compare_test="$ofile"
+		fi
+	else
+		clobber=""
+		# add user block to existing ub, if any 
+		if [ -z "$3" ];
+		then
+			# output goes to infile, compare ubfile to infile
+			ofile=""
+			compare_test="$ifile"
+			cp $ifile xxofile.h5
+			compare_orig="xxofile.h5"
+			cleanup="$cleanup $compare_orig"
+		else
+			# output goes to $4,  compare ofile to ubfile
+			ofile="$3"
+			compare_test="$ofile"
+			compare_orig="$ifile"
+		fi
+	fi
+
+	# call 'jam' with the appropriate arguments
+	if [ -n "$ofile" ];
+	then
+		TESTING h5jam -u `basename $ufile` -i `basename $ifile` -o `basename $ofile` $clobber
+		$JAM_BIN/$JAM -u $ufile -i $ifile -o $ofile $clobber
+	else
+		TESTING jam -u `basename $ufile` -i `basename $ifile` $clobber
+		$JAM_BIN/$JAM -u $ufile -i $ifile $clobber
+	fi
+
+	#echo "CHECK_UB_1 $compare_test $ufile $compare_orig"
+	CHECK_UB_1 $compare_test $ufile $compare_orig
+
+	if [ "$result1" = "0" ] ;
+	then
+		echo " PASSED"
+	else
+		echo " *FAILED*"
+      		nerrors="`expr $nerrors + 1`"
+	fi
+ 	CLEANUP $cleanup
+}
+	
+# UNJAMTEST  file.h5 [- | --delete] ofile
+#
+#  Test the 'unjam' tool
+#
+###fix the working directory here and in jamtest
+UNJAMTEST () {
+	infile="$1"
+	ofile="$3"
+	if [ "$2" = "-" ];
+	then
+		uofile="uofile"
+		TESTING h5unjam -i `basename $infile` -o `basename $ofile` "> "`basename $uofile`
+		$JAM_BIN/$UNJAM -i $infile -o $ofile > $uofile
+	else
+	if [ "$2" = "--delete" ];
+	then
+		uofile="none"
+		TESTING h5unjam -i `basename $infile` -o `basename $ofile` --delete
+		$JAM_BIN/$UNJAM  -i $infile -o $ofile --delete 
+
+	else
+		uofile="$2"
+		TESTING h5unjam -i `basename $infile` -u `basename $uofile` -o `basename $ofile`
+		$JAM_BIN/$UNJAM  -i $infile -u $uofile -o $ofile
+	fi
+	fi
+
+	result1=0
+	result2=0
+	cleanup=""
+	if [ "$uofile" != "none" ];
+	then
+		# sets result1
+		CHECK_UB_1 $infile $uofile
+		CLEANUP $uofile
+	fi
+
+	# sets result2
+	CHECK_NOUB $ofile
+
+	if [ "$result1" = "0" -a "$result2" = "0" ];
+	then
+		echo " PASSED"
+	else
+		echo " *FAILED*"
+	      nerrors="`expr $nerrors + 1`"
+	fi
+}
+
+
+##############################################################################
+##############################################################################
+###			  T H E   T E S T S                                ###
+##############################################################################
+##############################################################################
+
+JAMTEST $TESTFILES/u10.txt $TESTFILES/tall.h5 ta2.h5
+CHECKFILE $TESTFILES/tall.h5 ta2.h5
+CLEANUP ta2.h5
+JAMTEST $TESTFILES/u511.txt $TESTFILES/tall.h5 ta3.h5
+CHECKFILE $TESTFILES/tall.h5 ta3.h5
+CLEANUP ta3.h5
+JAMTEST $TESTFILES/u512.txt $TESTFILES/tall.h5 ta4.h5
+CHECKFILE $TESTFILES/tall.h5 ta4.h5
+CLEANUP ta4.h5
+JAMTEST $TESTFILES/u513.txt $TESTFILES/tall.h5 ta5.h5
+CHECKFILE $TESTFILES/tall.h5 ta5.h5
+CLEANUP ta5.h5
+
+SETUP $TESTFILES/tall.h5 ta.h5
+JAMTEST $TESTFILES/u10.txt ta.h5 
+CHECKFILE $TESTFILES/tall.h5 ta.h5
+SETUP $TESTFILES/tall.h5 ta.h5
+JAMTEST $TESTFILES/u511.txt ta.h5 
+CHECKFILE $TESTFILES/tall.h5 ta.h5
+SETUP $TESTFILES/tall.h5 ta.h5
+JAMTEST $TESTFILES/u512.txt ta.h5 
+CHECKFILE $TESTFILES/tall.h5 ta.h5
+SETUP $TESTFILES/tall.h5 ta.h5
+JAMTEST $TESTFILES/u513.txt ta.h5 
+CHECKFILE $TESTFILES/tall.h5 ta.h5
+CLEANUP ta.h5
+
+JAMTEST $TESTFILES/u10.txt $TESTFILES/twithub.h5 tax2.h5
+CHECKFILE $TESTFILES/tall.h5 tax2.h5
+CLEANUP tax2.h5
+JAMTEST $TESTFILES/u511.txt $TESTFILES/twithub.h5 tax3.h5
+CHECKFILE $TESTFILES/tall.h5 tax3.h5
+CLEANUP tax3.h5
+JAMTEST $TESTFILES/u512.txt $TESTFILES/twithub.h5 tax4.h5
+CHECKFILE $TESTFILES/tall.h5 tax4.h5
+CLEANUP tax4.h5
+JAMTEST $TESTFILES/u513.txt $TESTFILES/twithub.h5 tax5.h5
+CHECKFILE $TESTFILES/tall.h5 tax5.h5
+CLEANUP tax5.h5
+
+JAMTEST $TESTFILES/u10.txt $TESTFILES/twithub513.h5 tax6.h5
+CHECKFILE $TESTFILES/tall.h5 tax6.h5
+CLEANUP tax6.h5
+JAMTEST $TESTFILES/u511.txt $TESTFILES/twithub513.h5 tax7.h5
+CHECKFILE $TESTFILES/tall.h5 tax7.h5
+CLEANUP tax7.h5
+JAMTEST $TESTFILES/u512.txt $TESTFILES/twithub513.h5 tax8.h5
+CHECKFILE $TESTFILES/tall.h5 tax8.h5
+CLEANUP tax8.h5
+JAMTEST $TESTFILES/u513.txt $TESTFILES/twithub513.h5 tax9.h5
+CHECKFILE $TESTFILES/tall.h5 tax9.h5
+CLEANUP tax9.h5
+
+JAMTEST $TESTFILES/u10.txt $TESTFILES/twithub.h5 --clobber taz2.h5 
+CHECKFILE $TESTFILES/tall.h5 taz2.h5
+CLEANUP taz2.h5
+JAMTEST $TESTFILES/u511.txt $TESTFILES/twithub.h5 --clobber taz3.h5
+CHECKFILE $TESTFILES/tall.h5 taz3.h5
+CLEANUP taz3.h5
+JAMTEST $TESTFILES/u512.txt $TESTFILES/twithub.h5 --clobber taz4.h5 
+CHECKFILE $TESTFILES/tall.h5 taz4.h5
+CLEANUP taz4.h5
+JAMTEST $TESTFILES/u513.txt $TESTFILES/twithub.h5 --clobber taz5.h5 
+CHECKFILE $TESTFILES/tall.h5 taz5.h5
+CLEANUP taz5.h5
+
+JAMTEST $TESTFILES/u10.txt $TESTFILES/twithub513.h5 --clobber taz6.h5 
+CHECKFILE $TESTFILES/tall.h5 taz6.h5
+CLEANUP taz6.h5
+JAMTEST $TESTFILES/u511.txt $TESTFILES/twithub513.h5 --clobber taz7.h5
+CHECKFILE $TESTFILES/tall.h5 taz7.h5
+CLEANUP taz7.h5
+JAMTEST $TESTFILES/u512.txt $TESTFILES/twithub513.h5 --clobber taz8.h5 
+CHECKFILE $TESTFILES/tall.h5 taz8.h5
+CLEANUP taz8.h5
+JAMTEST $TESTFILES/u513.txt $TESTFILES/twithub513.h5 --clobber taz9.h5 
+CHECKFILE $TESTFILES/tall.h5 taz9.h5
+CLEANUP taz9.h5
+
+SETUP $TESTFILES/twithub.h5 tay2.h5
+JAMTEST $TESTFILES/u10.txt tay2.h5 --clobber
+CHECKFILE $TESTFILES/tall.h5 tay2.h5
+CLEANUP tay2.h5
+SETUP $TESTFILES/twithub.h5 tay3.h5
+JAMTEST $TESTFILES/u511.txt tay3.h5 --clobber
+CHECKFILE $TESTFILES/tall.h5 tay3.h5
+CLEANUP tay3.h5
+SETUP $TESTFILES/twithub.h5 tay4.h5
+JAMTEST $TESTFILES/u512.txt tay4.h5 --clobber
+CHECKFILE $TESTFILES/tall.h5 tay4.h5
+CLEANUP tay4.h5
+SETUP $TESTFILES/twithub.h5 tay5.h5
+JAMTEST $TESTFILES/u513.txt tay5.h5 --clobber
+CHECKFILE $TESTFILES/tall.h5 tay5.h5
+CLEANUP tay5.h5
+
+SETUP $TESTFILES/twithub513.h5 tay6.h5
+JAMTEST $TESTFILES/u10.txt tay6.h5 --clobber
+CHECKFILE $TESTFILES/tall.h5 tay6.h5
+CLEANUP tay6.h5
+SETUP $TESTFILES/twithub513.h5 tay7.h5
+JAMTEST $TESTFILES/u511.txt tay7.h5 --clobber
+CHECKFILE $TESTFILES/tall.h5 tay7.h5
+CLEANUP tay7.h5
+SETUP $TESTFILES/twithub513.h5 tay8.h5
+JAMTEST $TESTFILES/u512.txt tay8.h5 --clobber
+CHECKFILE $TESTFILES/tall.h5 tay8.h5
+CLEANUP tay8.h5
+SETUP $TESTFILES/twithub513.h5 tay9.h5
+JAMTEST $TESTFILES/u513.txt tay9.h5 --clobber
+CHECKFILE $TESTFILES/tall.h5 tay9.h5
+CLEANUP tay9.h5
+
+SETUP $TESTFILES/twithub.h5 tai1.h5
+UNJAMTEST tai1.h5 o10.txt taa1.h5
+CHECKFILE $TESTFILES/tall.h5 taa1.h5
+CLEANUP taa1.h5 tai1.h5 o10.txt
+SETUP $TESTFILES/twithub513.h5 tai2.h5
+UNJAMTEST tai2.h5 o512.txt taa2.h5
+CHECKFILE $TESTFILES/tall.h5 taa2.h5
+CLEANUP taa2.h5 tai2.h5 o512.txt
+
+SETUP $TESTFILES/twithub.h5 tai3.h5
+UNJAMTEST tai3.h5 - taa3.h5
+CHECKFILE $TESTFILES/tall.h5 taa3.h5
+CLEANUP taa3.h5 tai3.h5
+SETUP $TESTFILES/twithub513.h5 tai4.h5
+UNJAMTEST tai4.h5 - taa4.h5
+CHECKFILE $TESTFILES/tall.h5 taa4.h5
+CLEANUP taa4.h5 tai4.h5
+
+SETUP $TESTFILES/twithub.h5 taj2.h5
+UNJAMTEST taj2.h5 --delete tac2.h5
+CHECKFILE $TESTFILES/tall.h5 tac2.h5
+CLEANUP tac2.h5 taj2.h5
+SETUP $TESTFILES/twithub513.h5 taj3.h5
+UNJAMTEST taj3.h5 --delete tac3.h5
+CHECKFILE $TESTFILES/tall.h5 tac3.h5
+CLEANUP tac3.h5 taj3.h5
+
+
+
+if test $nerrors -eq 0 ; then
+   echo "All $JAM tests passed."
+fi
+
+exit $nerrors

Added: packages/hdf5/branches/upstream/current/tools/h5ls/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5ls/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5ls/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,56 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+h5ls.lo: \
+   $(srcdir)/h5ls.c \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/tools/lib/h5tools.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/tools/lib/h5tools_utils.h

Added: packages/hdf5/branches/upstream/current/tools/h5ls/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5ls/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5ls/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,63 @@
+##
+## 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.
+##
+## HDF5 Library Makefile(.in)
+##
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Add include directory to the C preprocessor flags, add -lh5tools and
+## -lhdf5 to the list of libraries.
+##
+CPPFLAGS=-I. -I$(srcdir) -I$(top_builddir)/src -I$(top_srcdir)/src  \
+         -I$(top_srcdir)/tools/lib @CPPFLAGS@
+
+## Test programs and scripts.
+##
+TEST_PROGS=
+TEST_SCRIPTS=$(srcdir)/testh5ls.sh
+
+## These are our main targets: library and tools.
+##
+LIBTOOLS=../lib/libh5tools.la
+LIBHDF5=$(top_builddir)/src/libhdf5.la
+PUB_PROGS=h5ls
+PROGS=$(PUB_PROGS) $(TEST_PROGS)
+
+## Source and object files for the library; do not install
+LIB_SRC=
+LIB_OBJ=$(LIB_SRC:.c=.lo)
+PUB_LIB=
+
+## Source and object files for programs...
+PROG_SRC=h5ls.c
+PROG_OBJ=$(PROG_SRC:.c=.lo)
+PRIVATE_HDR=
+
+## Source and object files for the tests
+TEST_SRC=
+TEST_OBJ=$(TEST_SRC:.c=.lo)
+
+## Programs have to be built before they can be tested!
+check test _test: $(PROGS)
+
+## How to build the programs... They all depend on the hdf5 library and
+## the tools library compiled in this directory.
+$(PROGS): $(LIBTOOLS) $(LIBHDF5)
+
+h5ls: h5ls.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ h5ls.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/tools/h5ls/h5ls.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5ls/h5ls.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5ls/h5ls.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2265 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Monday, March 23, 1998
+ */
+
+
+/*
+ * We include the private header file so we can get to the uniform
+ * programming environment it declares.  Other than that, h5ls only calls
+ * HDF5 API functions (except for H5G_basename())
+ */
+#include "H5private.h"
+#include "h5tools.h"
+#include "h5tools_utils.h"
+
+/* Command-line switches */
+static int      verbose_g = 0;            /* lots of extra output */
+static int      width_g = 80;             /* output width in characters */
+static hbool_t  address_g = FALSE;        /* print raw data addresses */
+static hbool_t  data_g = FALSE;           /* display dataset values? */
+static hbool_t  label_g = FALSE;          /* label compound values? */
+static hbool_t  string_g = FALSE;         /* print 1-byte numbers as ASCII? */
+static hbool_t  fullname_g = FALSE;       /* print full path names */
+static hbool_t  recursive_g = FALSE;      /* recursive descent listing */
+static hbool_t  grp_literal_g = FALSE;    /* list group, not contents */
+static hbool_t  hexdump_g = FALSE;        /* show data as raw hexadecimal */
+static hbool_t  show_errors_g = FALSE;    /* print HDF5 error messages */
+static hbool_t  simple_output_g = FALSE;  /* make output more machine-readable */
+static hbool_t  show_file_name_g = FALSE; /* show file name for full names */
+
+/* Info to pass to the iteration functions */
+typedef struct iter_t {
+    const char *container;  /* full name of the container object */
+} iter_t;
+
+/* Table containing object id and object name */
+static struct {
+    int  nalloc;                /* number of slots allocated */
+    int  nobjs;                 /* number of objects */
+    struct {
+        unsigned long id[2];    /* object number */
+        char *name;             /* full object name */
+    } *obj;
+} idtab_g;
+
+/* Information about how to display each type of object */
+static struct dispatch_t {
+    const char *name;
+    hid_t (*open)(hid_t loc, const char *name);
+    herr_t (*close)(hid_t obj);
+    herr_t (*list1)(hid_t obj);
+    herr_t (*list2)(hid_t obj, const char *name);
+} dispatch_g[H5G_NTYPES];
+
+#define DISPATCH(TYPE,NAME,OPEN,CLOSE,LIST1,LIST2) {         \
+    dispatch_g[TYPE].name = (NAME);           \
+    dispatch_g[TYPE].open = (OPEN);           \
+    dispatch_g[TYPE].close = (CLOSE);           \
+    dispatch_g[TYPE].list1 = (LIST1);           \
+    dispatch_g[TYPE].list2 = (LIST2);           \
+}
+
+static herr_t list (hid_t group, const char *name, void *cd);
+static void display_type(hid_t type, int ind);
+static char *fix_name(const char *path, const char *base);
+
+const char *progname="h5ls";
+int   d_status;
+
+
+/*-------------------------------------------------------------------------
+ * Function: usage
+ *
+ * Purpose: Prints a usage message on stderr and then returns.
+ *
+ * Return: void
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, July 16, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+usage (void)
+{
+    fprintf(stderr, "\
+usage: %s [OPTIONS] [OBJECTS...]\n\
+   OPTIONS\n\
+      -h, -?, --help   Print a usage message and exit\n\
+      -a, --address    Print addresses for raw data\n\
+      -d, --data       Print the values of datasets\n\
+      -e, --errors     Show all HDF5 error reporting\n\
+      -f, --full       Print full path names instead of base names\n\
+      -g, --group      Show information about a group, not its contents\n\
+      -l, --label      Label members of compound datasets\n\
+      -r, --recursive  List all groups recursively, avoiding cycles\n\
+      -s, --string     Print 1-byte integer datasets as ASCII\n\
+      -S, --simple     Use a machine-readable output format\n\
+      -wN, --width=N   Set the number of columns of output\n\
+      -v, --verbose    Generate more verbose output\n\
+      -V, --version    Print version number and exit\n\
+      --vfd=DRIVER     Use the specified virtual file driver\n\
+      -x, --hexdump    Show raw data in hexadecimal format\n\
+\n\
+   OBJECTS\n\
+      Each object consists of an HDF5 file name optionally followed by a\n\
+      slash and an object name within the file (if no object is specified\n\
+      within the file then the contents of the root group are displayed).\n\
+      The file name may include a printf(3C) integer format such as\n\
+      \"%%05d\" to open a file family.\n",
+     progname);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: sym_insert
+ *
+ * Purpose: Add a symbol to the table.
+ *
+ * Return: void
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, January 21, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+sym_insert(H5G_stat_t *sb, const char *name)
+{
+    int  n;
+
+    /* Don't add it if the link count is 1 because such an object can only
+     * have one name. */
+    if (sb->nlink<2) return;
+
+    /* Extend the table */
+    if (idtab_g.nobjs>=idtab_g.nalloc) {
+        idtab_g.nalloc = MAX(256, 2*idtab_g.nalloc);
+        idtab_g.obj = realloc(idtab_g.obj,
+            idtab_g.nalloc*sizeof(idtab_g.obj[0]));
+    }
+
+    /* Insert the entry */
+    n = idtab_g.nobjs++;
+    idtab_g.obj[n].id[0] = sb->objno[0];
+    idtab_g.obj[n].id[1] = sb->objno[1];
+    idtab_g.obj[n].name = HDstrdup(name);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: sym_lookup
+ *
+ * Purpose: Find another name for the specified object.
+ *
+ * Return: Success: Ptr to another name.
+ *
+ *  Failure: NULL
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, January 21, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static char *
+sym_lookup(H5G_stat_t *sb)
+{
+    int  n;
+
+    if (sb->nlink<2) return NULL; /*only one name possible*/
+    for (n=0; n<idtab_g.nobjs; n++) {
+ if (idtab_g.obj[n].id[0]==sb->objno[0] &&
+     idtab_g.obj[n].id[1]==sb->objno[1]) {
+     return idtab_g.obj[n].name;
+ }
+    }
+    return NULL;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: display_string
+ *
+ * Purpose: Print a string value by escaping unusual characters. If
+ *  STREAM is null then we only count how large the output would
+ *  be.
+ *
+ * Return: Number of characters printed.
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, November  5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+display_string(FILE *stream, const char *s, hbool_t escape_spaces)
+{
+    int  nprint=0;
+
+    for (/*void*/; s && *s; s++) {
+        switch (*s) {
+            case '"':
+                if (stream) fprintf(stream, "\\\"");
+                nprint += 2;
+                break;
+            case '\\':
+                if (stream) fprintf(stream, "\\\\");
+                nprint += 2;
+                break;
+            case '\b':
+                if (stream) fprintf(stream, "\\b");
+                nprint += 2;
+                break;
+            case '\f':
+                if (stream) fprintf(stream, "\\f");
+                nprint += 2;
+                break;
+            case '\n':
+                if (stream) fprintf(stream, "\\n");
+                nprint += 2;
+                break;
+            case '\r':
+                if (stream) fprintf(stream, "\\r");
+                nprint += 2;
+                break;
+            case '\t':
+                if (stream) fprintf(stream, "\\t");
+                nprint += 2;
+                break;
+            case ' ':
+                if (escape_spaces) {
+                    if (stream) fprintf(stream, "\\ ");
+                    nprint += 2;
+                } else {
+                    if (stream) fprintf(stream, " ");
+                    nprint++;
+                }
+                break;
+            default:
+                if (isprint((int)*s)) {
+                    if (stream) putc(*s, stream);
+                    nprint++;
+                } else {
+                    if (stream) {
+                        fprintf(stream, "\\%03o", *((const unsigned char*)s));
+                    }
+                    nprint += 4;
+                }
+                break;
+        }
+    }
+    return nprint;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: display_native_type
+ *
+ * Purpose: Prints the name of a native C data type.
+ *
+ * Return: Success: TRUE
+ *
+ *  Failure: FALSE, nothing printed.
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, November  5, 1998
+ *
+ * Modifications:
+ *   Robb Matzke, 1999-06-11
+ *  Added the C9x types, but we still prefer to display the types
+ *  from the C language itself (like `int' vs. `int32_t').
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+display_native_type(hid_t type, int UNUSED ind)
+{
+    if (H5Tequal(type, H5T_NATIVE_SCHAR)) {
+ printf("native signed char");
+    } else if (H5Tequal(type, H5T_NATIVE_UCHAR)) {
+ printf("native unsigned char");
+    } else if (H5Tequal(type, H5T_NATIVE_INT)) {
+ printf("native int");
+    } else if (H5Tequal(type, H5T_NATIVE_UINT)) {
+ printf("native unsigned int");
+    } else if (H5Tequal(type, H5T_NATIVE_SHORT)) {
+ printf("native short");
+    } else if (H5Tequal(type, H5T_NATIVE_USHORT)) {
+ printf("native unsigned short");
+    } else if (H5Tequal(type, H5T_NATIVE_LONG)) {
+ printf("native long");
+    } else if (H5Tequal(type, H5T_NATIVE_ULONG)) {
+ printf("native unsigned long");
+    } else if (H5Tequal(type, H5T_NATIVE_LLONG)) {
+ printf("native long long");
+    } else if (H5Tequal(type, H5T_NATIVE_ULLONG)) {
+ printf("native unsigned long long");
+    } else if (H5Tequal(type, H5T_NATIVE_FLOAT)) {
+ printf("native float");
+    } else if (H5Tequal(type, H5T_NATIVE_DOUBLE)) {
+ printf("native double");
+    } else if (H5Tequal(type, H5T_NATIVE_LDOUBLE)) {
+ printf("native long double");
+    } else if (H5Tequal(type, H5T_NATIVE_INT8)) {
+ printf("native int8_t");
+    } else if (H5Tequal(type, H5T_NATIVE_UINT8)) {
+ printf("native uint8_t");
+    } else if (H5Tequal(type, H5T_NATIVE_INT16)) {
+ printf("native int16_t");
+    } else if (H5Tequal(type, H5T_NATIVE_UINT16)) {
+ printf("native uint16_t");
+    } else if (H5Tequal(type, H5T_NATIVE_INT32)) {
+ printf("native int32_t");
+    } else if (H5Tequal(type, H5T_NATIVE_UINT32)) {
+ printf("native uint32_t");
+    } else if (H5Tequal(type, H5T_NATIVE_INT64)) {
+ printf("native int64_t");
+    } else if (H5Tequal(type, H5T_NATIVE_UINT64)) {
+ printf("native uint64_t");
+    } else if (H5Tequal(type, H5T_NATIVE_INT_LEAST8)) {
+ printf("native int_least8_t");
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST8)) {
+ printf("native uint_least8_t");
+    } else if (H5Tequal(type, H5T_NATIVE_INT_LEAST16)) {
+ printf("native int_least16_t");
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST16)) {
+ printf("native uint_least16_t");
+    } else if (H5Tequal(type, H5T_NATIVE_INT_LEAST32)) {
+ printf("native int_least32_t");
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST32)) {
+ printf("native uint_least32_t");
+    } else if (H5Tequal(type, H5T_NATIVE_INT_LEAST64)) {
+ printf("native int_least64_t");
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_LEAST64)) {
+ printf("native uint_least64_t");
+    } else if (H5Tequal(type, H5T_NATIVE_INT_FAST8)) {
+ printf("native int_fast8_t");
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_FAST8)) {
+ printf("native uint_fast8_t");
+    } else if (H5Tequal(type, H5T_NATIVE_INT_FAST16)) {
+ printf("native int_fast16_t");
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_FAST16)) {
+ printf("native uint_fast16_t");
+    } else if (H5Tequal(type, H5T_NATIVE_INT_FAST32)) {
+ printf("native int_fast32_t");
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_FAST32)) {
+ printf("native uint_fast32_t");
+    } else if (H5Tequal(type, H5T_NATIVE_INT_FAST64)) {
+ printf("native int_fast64_t");
+    } else if (H5Tequal(type, H5T_NATIVE_UINT_FAST64)) {
+ printf("native uint_fast64_t");
+    } else if (H5Tequal(type, H5T_NATIVE_B8)) {
+ printf("native 8-bit field");
+    } else if (H5Tequal(type, H5T_NATIVE_B16)) {
+ printf("native 16-bit field");
+    } else if (H5Tequal(type, H5T_NATIVE_B32)) {
+ printf("native 32-bit field");
+    } else if (H5Tequal(type, H5T_NATIVE_B64)) {
+ printf("native 64-bit field");
+    } else if (H5Tequal(type, H5T_NATIVE_HSIZE)) {
+ printf("native hsize_t");
+    } else if (H5Tequal(type, H5T_NATIVE_HSSIZE)) {
+ printf("native hssize_t");
+    } else if (H5Tequal(type, H5T_NATIVE_HERR)) {
+ printf("native herr_t");
+    } else if (H5Tequal(type, H5T_NATIVE_HBOOL)) {
+ printf("native hbool_t");
+    } else {
+ return FALSE;
+    }
+    return TRUE;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: display_ieee_type
+ *
+ * Purpose: Print the name of an IEEE floating-point data type.
+ *
+ * Return: Success: TRUE
+ *
+ *  Failure: FALSE, nothing printed
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, November  5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+display_ieee_type(hid_t type, int UNUSED ind)
+{
+    if (H5Tequal(type, H5T_IEEE_F32BE)) {
+ printf("IEEE 32-bit big-endian float");
+    } else if (H5Tequal(type, H5T_IEEE_F32LE)) {
+ printf("IEEE 32-bit little-endian float");
+    } else if (H5Tequal(type, H5T_IEEE_F64BE)) {
+ printf("IEEE 64-bit big-endian float");
+    } else if (H5Tequal(type, H5T_IEEE_F64LE)) {
+ printf("IEEE 64-bit little-endian float");
+    } else {
+ return FALSE;
+    }
+    return TRUE;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: display_precision
+ *
+ * Purpose: Prints information on the next line about precision and
+ *  padding if the precision is less than the total data type
+ *  size.
+ *
+ * Return: void
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, November  5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+display_precision(hid_t type, int ind)
+{
+    size_t      prec;           /* precision */
+    H5T_pad_t   plsb, pmsb;     /* lsb and msb padding */
+    const char  *plsb_s=NULL;   /* lsb padding string */
+    const char  *pmsb_s=NULL;   /* msb padding string */
+    size_t      nbits;          /* number of bits */
+
+    /* If the precision is less than the total size then show the precision
+     * and offset on the following line.  Also display the padding
+     * information. */
+    if (8*H5Tget_size(type)!=(prec=H5Tget_precision(type))) {
+ printf("\n%*s(%lu bit%s of precision beginning at bit %lu)",
+        ind, "", (unsigned long)prec, 1==prec?"":"s",
+        (unsigned long)H5Tget_offset(type));
+
+ H5Tget_pad(type, &plsb, &pmsb);
+ if (H5Tget_offset(type)>0) {
+     switch (plsb) {
+     case H5T_PAD_ZERO:
+  plsb_s = "zero";
+  break;
+     case H5T_PAD_ONE:
+  plsb_s = "one";
+  break;
+     case H5T_PAD_BACKGROUND:
+  plsb_s = "bkg";
+  break;
+     case H5T_PAD_ERROR:
+     case H5T_NPAD:
+  plsb_s = "unknown";
+  break;
+     }
+ }
+ if (H5Tget_offset(type)+prec<8*H5Tget_size(type)) {
+     switch (pmsb) {
+     case H5T_PAD_ZERO:
+  pmsb_s = "zero";
+  break;
+     case H5T_PAD_ONE:
+  pmsb_s = "one";
+  break;
+     case H5T_PAD_BACKGROUND:
+  pmsb_s = "bkg";
+  break;
+     case H5T_PAD_ERROR:
+     case H5T_NPAD:
+  pmsb_s = "unknown";
+  break;
+     }
+ }
+ if (plsb_s || pmsb_s) {
+     printf("\n%*s(", ind, "");
+     if (plsb_s) {
+  nbits = H5Tget_offset(type);
+  printf("%lu %s bit%s at bit 0",
+         (unsigned long)nbits, plsb_s, 1==nbits?"":"s");
+     }
+     if (plsb_s && pmsb_s) printf(", ");
+     if (pmsb_s) {
+  nbits = 8*H5Tget_size(type)-(H5Tget_offset(type)+prec);
+  printf("%lu %s bit%s at bit %lu",
+         (unsigned long)nbits, pmsb_s, 1==nbits?"":"s",
+         (unsigned long)(8*H5Tget_size(type)-nbits));
+     }
+     printf(")");
+ }
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: display_int_type
+ *
+ * Purpose: Print the name of an integer data type.  Common information
+ *  like number of bits, byte order, and sign scheme appear on
+ *  the first line. Additional information might appear in
+ *  parentheses on the following lines.
+ *
+ * Return: Success: TRUE
+ *
+ *  Failure: FALSE, nothing printed
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, November  5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+display_int_type(hid_t type, int ind)
+{
+    H5T_order_t order;          /* byte order value */
+    const char  *order_s=NULL;  /* byte order string */
+    H5T_sign_t  sign;           /* sign scheme value */
+    const char  *sign_s=NULL;   /* sign scheme string */
+
+    if (H5T_INTEGER!=H5Tget_class(type)) return FALSE;
+
+    /* Byte order */
+    if (H5Tget_size(type)>1) {
+ order = H5Tget_order(type);
+ if (H5T_ORDER_LE==order) {
+     order_s = " little-endian";
+ } else if (H5T_ORDER_BE==order) {
+     order_s = " big-endian";
+ } else if (H5T_ORDER_VAX==order) {
+     order_s = " mixed-endian";
+ } else {
+     order_s = " unknown-byte-order";
+ }
+    } else {
+ order_s = "";
+    }
+
+    /* Sign */
+    if ((sign=H5Tget_sign(type))>=0) {
+ if (H5T_SGN_NONE==sign) {
+     sign_s = " unsigned";
+ } else if (H5T_SGN_2==sign) {
+     sign_s = "";
+ } else {
+     sign_s = " unknown-sign";
+ }
+    } else {
+ sign_s = " unknown-sign";
+    }
+
+    /* Print size, order, and sign on first line, precision and padding
+     * information on the subsequent lines */
+    printf("%lu-bit%s%s integer",
+    (unsigned long)(8*H5Tget_size(type)), order_s, sign_s);
+    display_precision(type, ind);
+    return TRUE;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: display_float_type
+ *
+ * Purpose: Print info about a floating point data type.
+ *
+ * Return: Success: TRUE
+ *
+ *  Failure: FALSE, nothing printed
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, November  5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+display_float_type(hid_t type, int ind)
+{
+    H5T_order_t order;          /* byte order value */
+    const char  *order_s=NULL;  /* byte order string */
+    size_t      spos;           /* sign bit position */
+    size_t      esize, epos;    /* exponent size and position */
+    size_t      msize, mpos;    /* significand size and position */
+    size_t      ebias;          /* exponent bias */
+    H5T_norm_t  norm;           /* significand normalization */
+    const char  *norm_s=NULL;   /* normalization string */
+    H5T_pad_t   pad;            /* internal padding value */
+    const char  *pad_s=NULL;    /* internal padding string */
+
+    if (H5T_FLOAT!=H5Tget_class(type)) return FALSE;
+
+    /* Byte order */
+    if (H5Tget_size(type)>1) {
+ order = H5Tget_order(type);
+ if (H5T_ORDER_LE==order) {
+     order_s = " little-endian";
+ } else if (H5T_ORDER_BE==order) {
+     order_s = " big-endian";
+ } else if (H5T_ORDER_VAX==order) {
+     order_s = " mixed-endian";
+ } else {
+     order_s = " unknown-byte-order";
+ }
+    } else {
+ order_s = "";
+    }
+
+    /* Print size and byte order on first line, precision and padding on
+     * subsequent lines. */
+    printf("%lu-bit%s floating-point",
+    (unsigned long)(8*H5Tget_size(type)), order_s);
+    display_precision(type, ind);
+
+    /* Print sizes, locations, and other information about each field */
+    H5Tget_fields (type, &spos, &epos, &esize, &mpos, &msize);
+    ebias = H5Tget_ebias(type);
+    norm = H5Tget_norm(type);
+    switch (norm) {
+    case H5T_NORM_IMPLIED:
+ norm_s = ", msb implied";
+ break;
+    case H5T_NORM_MSBSET:
+ norm_s = ", msb always set";
+ break;
+    case H5T_NORM_NONE:
+ norm_s = ", no normalization";
+ break;
+    case H5T_NORM_ERROR:
+ norm_s = ", unknown normalization";
+ break;
+    }
+    printf("\n%*s(significant for %lu bit%s at bit %lu%s)", ind, "",
+    (unsigned long)msize, 1==msize?"":"s", (unsigned long)mpos,
+    norm_s);
+    printf("\n%*s(exponent for %lu bit%s at bit %lu, bias is 0x%lx)",
+    ind, "", (unsigned long)esize, 1==esize?"":"s",
+    (unsigned long)epos, (unsigned long)ebias);
+    printf("\n%*s(sign bit at %lu)", ind, "", (unsigned long)spos);
+
+    /* Display internal padding */
+    if (1+esize+msize<H5Tget_precision(type)) {
+ pad = H5Tget_inpad(type);
+ switch (pad) {
+ case H5T_PAD_ZERO:
+     pad_s = "zero";
+     break;
+ case H5T_PAD_ONE:
+     pad_s = "one";
+     break;
+ case H5T_PAD_BACKGROUND:
+     pad_s = "bkg";
+     break;
+ case H5T_PAD_ERROR:
+ case H5T_NPAD:
+     pad_s = "unknown";
+     break;
+ }
+ printf("\n%*s(internal padding bits are %s)", ind, "", pad_s);
+    }
+    return TRUE;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: display_cmpd_type
+ *
+ * Purpose: Print info about a compound data type.
+ *
+ * Return: Success: TRUE
+ *
+ *  Failure: FALSE, nothing printed
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, November  5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+display_cmpd_type(hid_t type, int ind)
+{
+    char        *name=NULL;     /* member name */
+    size_t      size;           /* total size of type in bytes */
+    hid_t       subtype;        /* member data type */
+    unsigned    nmembs;         /* number of members */
+    int         n;              /* miscellaneous counters */
+    unsigned    i;              /* miscellaneous counters */
+
+    if (H5T_COMPOUND!=H5Tget_class(type)) return FALSE;
+    printf("struct {");
+    nmembs=H5Tget_nmembers(type);
+    for (i=0; i<nmembs; i++) {
+
+        /* Name and offset */
+        name = H5Tget_member_name(type, i);
+        printf("\n%*s\"", ind+4, "");
+        n = display_string(stdout, name, FALSE);
+        printf("\"%*s +%-4lu ", MAX(0, 16-n), "",
+               (unsigned long)H5Tget_member_offset(type, i));
+        free(name);
+
+        /* Member's type */
+        subtype = H5Tget_member_type(type, i);
+        display_type(subtype, ind+4);
+        H5Tclose(subtype);
+    }
+    size = H5Tget_size(type);
+    printf("\n%*s} %lu byte%s",
+    ind, "", (unsigned long)size, 1==size?"":"s");
+    return TRUE;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: display_enum_type
+ *
+ * Purpose: Print info about an enumeration data type.
+ *
+ * Return: Success: TRUE
+ *
+ *  Failure: FALSE, nothing printed
+ *
+ * Programmer: Robb Matzke
+ *              Wednesday, December 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+display_enum_type(hid_t type, int ind)
+{
+    char        **name=NULL;    /* member names */
+    unsigned char *value=NULL;  /* value array */
+    unsigned char *copy = NULL; /* a pointer to value array */
+    unsigned    nmembs;         /* number of members */
+    int         nchars;         /* number of output characters */
+    hid_t       super;          /* enum base integer type */
+    hid_t       native=-1;      /* native integer data type */
+    size_t      dst_size;       /* destination value type size */
+    unsigned    i;              /* miscellaneous counters */
+    size_t j;
+
+    if (H5T_ENUM!=H5Tget_class(type)) return FALSE;
+    nmembs = H5Tget_nmembers(type);
+    assert(nmembs>0);
+    super = H5Tget_super(type);
+    printf("enum ");
+    display_type(super, ind+4);
+    printf(" {");
+
+    /* Determine what data type to use for the native values.  To simplify
+     * things we entertain three possibilities:
+     *  1. long_long -- the largest native signed integer
+     * 2. unsigned long_long -- the largest native unsigned integer
+     *     3. raw format */
+    if (H5Tget_size(type)<=sizeof(long_long)) {
+        dst_size = sizeof(long_long);
+        if (H5T_SGN_NONE==H5Tget_sign(type)) {
+            native = H5T_NATIVE_ULLONG;
+        } else {
+            native = H5T_NATIVE_LLONG;
+        }
+    } else {
+        dst_size = H5Tget_size(type);
+    }
+
+    /* Get the names and raw values of all members */
+    name = calloc(nmembs, sizeof(char*));
+    value = calloc(nmembs, MAX(H5Tget_size(type), dst_size));
+    for (i=0; i<nmembs; i++) {
+        name[i] = H5Tget_member_name(type, i);
+        H5Tget_member_value(type, i, value+i*H5Tget_size(type));
+    }
+
+    /* Convert values to native data type */
+    if (native>0) H5Tconvert(super, native, nmembs, value, NULL, H5P_DEFAULT);
+
+    /* Sort members by increasing value */
+    /*not implemented yet*/
+
+    /* Print members */
+    for (i=0; i<nmembs; i++) {
+        printf("\n%*s", ind+4, "");
+        nchars = display_string(stdout, name[i], TRUE);
+        printf("%*s = ", MAX(0, 16-nchars), "");
+
+        if (native<0) {
+            printf("0x");
+            for (j=0; j<dst_size; j++)
+                printf("%02x", value[i*dst_size+j]);
+        } else if (H5T_SGN_NONE==H5Tget_sign(native)) {
+ 	    /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
+ 	     *strangely, unless use another pointer "copy".*/
+ 	    copy = value+i*dst_size;
+            HDfprintf(stdout,"%"H5_PRINTF_LL_WIDTH"u",
+            *((unsigned long_long*)((void*)copy)));
+        } else {
+ 	    /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
+ 	     *strangely, unless use another pointer "copy".*/
+ 	    copy = value+i*dst_size;
+            HDfprintf(stdout,"%"H5_PRINTF_LL_WIDTH"d",
+            *((long_long*)((void*)copy)));
+        }
+    }
+
+    /* Release resources */
+    for (i=0; i<nmembs; i++) free(name[i]);
+    free(name);
+    free(value);
+    H5Tclose(super);
+
+    if (0==nmembs) printf("\n%*s <empty>", ind+4, "");
+    printf("\n%*s}", ind, "");
+    return TRUE;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: display_string_type
+ *
+ * Purpose: Print information about a string data type.
+ *
+ * Return: Success: TRUE
+ *
+ *  Failure: FALSE, nothing printed
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, November  5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+display_string_type(hid_t type, int UNUSED ind)
+{
+    H5T_str_t  pad;
+    const char  *pad_s=NULL;
+    H5T_cset_t  cset;
+    const char  *cset_s=NULL;
+
+    if (H5T_STRING!=H5Tget_class(type)) return FALSE;
+
+    /* Padding */
+    pad = H5Tget_strpad(type);
+    switch (pad) {
+    case H5T_STR_NULLTERM:
+ pad_s = "null-terminated";
+ break;
+    case H5T_STR_NULLPAD:
+ pad_s = "null-padded";
+ break;
+    case H5T_STR_SPACEPAD:
+ pad_s = "space-padded";
+ break;
+    case H5T_STR_RESERVED_3:
+    case H5T_STR_RESERVED_4:
+    case H5T_STR_RESERVED_5:
+    case H5T_STR_RESERVED_6:
+    case H5T_STR_RESERVED_7:
+    case H5T_STR_RESERVED_8:
+    case H5T_STR_RESERVED_9:
+    case H5T_STR_RESERVED_10:
+    case H5T_STR_RESERVED_11:
+    case H5T_STR_RESERVED_12:
+    case H5T_STR_RESERVED_13:
+    case H5T_STR_RESERVED_14:
+    case H5T_STR_RESERVED_15:
+    case H5T_STR_ERROR:
+ pad_s = "unknown-format";
+ break;
+    }
+
+    /* Character set */
+    cset = H5Tget_cset(type);
+    switch (cset) {
+    case H5T_CSET_ASCII:
+ cset_s = "ASCII";
+ break;
+    case H5T_CSET_RESERVED_1:
+    case H5T_CSET_RESERVED_2:
+    case H5T_CSET_RESERVED_3:
+    case H5T_CSET_RESERVED_4:
+    case H5T_CSET_RESERVED_5:
+    case H5T_CSET_RESERVED_6:
+    case H5T_CSET_RESERVED_7:
+    case H5T_CSET_RESERVED_8:
+    case H5T_CSET_RESERVED_9:
+    case H5T_CSET_RESERVED_10:
+    case H5T_CSET_RESERVED_11:
+    case H5T_CSET_RESERVED_12:
+    case H5T_CSET_RESERVED_13:
+    case H5T_CSET_RESERVED_14:
+    case H5T_CSET_RESERVED_15:
+    case H5T_CSET_ERROR:
+ cset_s = "unknown-character-set";
+ break;
+    }
+
+    if (H5Tis_variable_str(type)) {
+        printf("variable-length");
+    } else {
+        printf("%lu-byte", (unsigned long)H5Tget_size(type));
+    }
+    printf(" %s %s string", pad_s, cset_s);
+    return TRUE;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: display_reference_type
+ *
+ * Purpose: Prints information about a reference data type.
+ *
+ * Return: Success: TRUE
+ *
+ *  Failure: FALSE, nothing printed
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, November  5, 1998
+ *
+ * Modifications:
+ *   Robb Matzke, 1999-06-04
+ *  Knows about object and dataset region references.
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+display_reference_type(hid_t type, int UNUSED ind)
+{
+    if (H5T_REFERENCE!=H5Tget_class(type)) return FALSE;
+
+    if (H5Tequal(type, H5T_STD_REF_OBJ)) {
+ printf("object reference");
+    } else if (H5Tequal(type, H5T_STD_REF_DSETREG)) {
+ printf("dataset region reference");
+    } else {
+ printf("%lu-byte unknown reference",
+        (unsigned long)H5Tget_size(type));
+    }
+
+    return TRUE;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: display_opaque_type
+ *
+ * Purpose: Prints information about an opaque data type.
+ *
+ * Return: Success: TRUE
+ *
+ *  Failure: FALSE, nothing printed
+ *
+ * Programmer: Robb Matzke
+ *              Monday, June  7, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+display_opaque_type(hid_t type, int ind)
+{
+    char *tag;
+    size_t size;
+
+    if (H5T_OPAQUE!=H5Tget_class(type)) return FALSE;
+
+    size = H5Tget_size(type);
+    printf("%lu-byte opaque type", (unsigned long)size);
+    if ((tag=H5Tget_tag(type))) {
+ printf("\n%*s(tag = \"", ind, "");
+ display_string(stdout, tag, FALSE);
+ printf("\")");
+ free(tag);
+    }
+    return TRUE;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    display_vlen_type
+ *
+ * Purpose:     Print information about a variable-length type
+ *
+ * Return:      Success:        TRUE
+ *
+ *              Failure:        FALSE
+ *
+ * Programmer:  Robb Matzke
+ *              Friday, December  1, 2000
+ *
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+display_vlen_type(hid_t type, int ind)
+{
+    hid_t       super;
+
+    if (H5T_VLEN!=H5Tget_class(type)) return FALSE;
+
+    printf("variable length of\n%*s", ind+4, "");
+    super = H5Tget_super(type);
+    display_type(super, ind+4);
+    H5Tclose(super);
+    return TRUE;
+}
+
+/*---------------------------------------------------------------------------
+ * Purpose:     Print information about an array type
+ *
+ * Return:      Success:        TRUE
+ *
+ *              Failure:        FALSE
+ *
+ * Programmer:  Robb Matzke
+ *              Thursday, January 31, 2002
+ *
+ * Modifications:
+ *---------------------------------------------------------------------------
+ */
+static hbool_t
+display_array_type(hid_t type, int ind)
+{
+    hid_t       super;
+    int         ndims, i, *perm=NULL, identity;
+    hsize_t     *dims=NULL;
+
+    if (H5T_ARRAY!=H5Tget_class(type)) return FALSE;
+    ndims = H5Tget_array_ndims(type);
+    if (ndims) {
+        dims = malloc(ndims*sizeof(dims[0]));
+        perm = malloc(ndims*sizeof(perm[0]));
+        H5Tget_array_dims(type, dims, perm);
+
+        /* Print dimensions */
+        for (i=0; i<ndims; i++)
+            HDfprintf(stdout, "%s%Hu" , i?",":"[", dims[i]);
+        putchar(']');
+
+        /* Print permutation vector if not identity */
+        for (i=0, identity=TRUE; identity && i<ndims; i++) {
+            if (i!=perm[i]) identity = FALSE;
+        }
+        if (!identity) {
+            fputs(" perm=[", stdout);
+            for (i=0; i<ndims; i++)
+                HDfprintf(stdout, "%s%d", i?",":"", perm[i]);
+            putchar(']');
+        }
+
+        free(dims);
+        free(perm);
+    } else {
+        fputs(" [SCALAR]", stdout);
+    }
+
+
+    /* Print parent type */
+    putchar(' ');
+    super = H5Tget_super(type);
+    display_type(super, ind+4);
+    H5Tclose(super);
+    return TRUE;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: display_bitfield_type
+ *
+ * Purpose: Print information about a bitfield type.
+ *
+ * Return: Success: TRUE
+ *
+ *  Failure: FALSE, nothing printed
+ *
+ * Programmer: Pedro Vicente
+ *              Tuesday, May  20, 2003
+ *
+ * Modifications:
+ *              Robb Matzke, LLNL 2003-06-05
+ *              Generalized Pedro's original if/then/else.  Also display
+ *              precision/offset information.
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+display_bitfield_type(hid_t type, int ind)
+{
+    H5T_order_t order;          /* byte order value */
+    const char  *order_s=NULL;  /* byte order string */
+
+    if (H5T_BITFIELD!=H5Tget_class(type)) return FALSE;
+    if (H5Tget_size(type)>1) {
+        order = H5Tget_order(type);
+        if (H5T_ORDER_LE==order) {
+            order_s = " little-endian";
+        } else if (H5T_ORDER_BE==order) {
+            order_s = " big-endian";
+        } else if (H5T_ORDER_VAX==order) {
+            order_s = " mixed-endian";
+        } else {
+            order_s = "unknown-byte-order";
+        }
+    } else {
+        order_s = "";
+    }
+
+    printf("%lu-bit%s bitfield",
+           (unsigned long)(8*H5Tget_size(type)), order_s);
+    display_precision(type, ind);
+    return TRUE;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: display_type
+ *
+ * Purpose: Prints a data type definition.  The definition is printed
+ *  without any leading space or trailing line-feed (although
+ *  there might be line-feeds inside the type definition).  The
+ *  first line is assumed to have IND characters before it on
+ *  the same line (printed by the caller).
+ *
+ * Return: void
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, November  5, 1998
+ *
+ * Modifications:
+ *   Robb Matzke, 1999-06-11
+ *  Prints the OID of shared data types.
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+display_type(hid_t type, int ind)
+{
+    H5T_class_t  data_class = H5Tget_class(type);
+    H5G_stat_t  sb;
+
+    /* Bad data type */
+    if (type<0) {
+ printf("<ERROR>");
+ return;
+    }
+
+    /* Shared? If so then print the type's OID */
+    if (H5Tcommitted(type)) {
+ if (H5Gget_objinfo(type, ".", FALSE, &sb)>=0) {
+     printf("shared-%lu:%lu:%lu:%lu ",
+     sb.fileno[1], sb.fileno[0],
+     sb.objno[1], sb.objno[0]);
+ } else {
+     printf("shared ");
+ }
+    }
+
+    /* Print the type */
+    if ((!simple_output_g && display_native_type(type, ind)) ||
+ display_ieee_type(type, ind) ||
+ display_int_type(type, ind) ||
+ display_float_type(type, ind) ||
+ display_cmpd_type(type, ind) ||
+ display_enum_type(type, ind) ||
+ display_string_type(type, ind) ||
+ display_reference_type(type, ind) ||
+ display_vlen_type(type, ind) ||
+ display_array_type(type, ind) ||
+ display_opaque_type(type, ind) ||
+	display_bitfield_type(type, ind)) {
+ return;
+    }
+
+    /* Unknown type */
+    printf("%lu-byte class-%u unknown",
+    (unsigned long)H5Tget_size(type),
+    (unsigned)data_class);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: dump_dataset_values
+ *
+ * Purpose: Prints all values of a dataset.
+ *
+ * Return: void
+ *
+ * Programmer: Robb Matzke
+ *              Tuesday, July 21, 1998
+ *
+ * Modifications:
+ *  Robb Matzke, 1999-09-27
+ *  Understands the simple_output_g switch which causes data to
+ *  be displayed in a more machine-readable format.
+ *-------------------------------------------------------------------------
+ */
+static void
+dump_dataset_values(hid_t dset)
+{
+    hid_t  f_type = H5Dget_type(dset);
+    size_t  size = H5Tget_size(f_type);
+    h5dump_t  info;
+    char  string_prefix[64];
+    static char         fmt_double[16], fmt_float[16];
+
+    /* Set to all default values and then override */
+    memset(&info, 0, sizeof info);
+
+    if (simple_output_g) {
+ info.idx_fmt = "";
+ info.line_ncols = 65535; /*something big*/
+ info.line_per_line = 1;
+ info.line_multi_new = 0;
+ info.line_pre  = "        ";
+ info.line_cont = "         ";
+
+ info.arr_pre = "";
+ info.arr_suf = "";
+ info.arr_sep = " ";
+
+ info.cmpd_pre = "";
+ info.cmpd_suf = "";
+ info.cmpd_sep = " ";
+
+ if (label_g) info.cmpd_name = "%s=";
+
+ info.elmt_suf1 = " ";
+ info.str_locale = ESCAPE_HTML;
+
+    } else {
+ info.idx_fmt = "(%s)";
+ info.line_ncols = width_g;
+ info.line_multi_new = 1;
+ if (label_g) info.cmpd_name = "%s=";
+ info.line_pre  = "        %s ";
+ info.line_cont = "        %s  ";
+ info.str_repeat = 8;
+    }
+
+    /* Floating point types should display full precision */
+    sprintf(fmt_float, "%%1.%dg", FLT_DIG);
+    info.fmt_float = fmt_float;
+    sprintf(fmt_double, "%%1.%dg", DBL_DIG);
+    info.fmt_double = fmt_double;
+
+    info.dset_format =  "DSET-%lu:%lu:%lu:%lu-";
+    info.dset_hidefileno = 0;
+
+    info.obj_format = "-%lu:%lu:%lu:%lu";
+    info.obj_hidefileno = 0;
+
+    info.dset_blockformat_pre = "%sBlk%lu: ";
+    info.dset_ptformat_pre = "%sPt%lu: ";
+
+    info.line_indent = "";
+
+    if (hexdump_g) {
+        /* Print all data in hexadecimal format if the `-x' or `--hexdump'
+         * command line switch was given. */
+ info.raw = TRUE;
+    } else if (string_g && 1==size && H5T_INTEGER==H5Tget_class(f_type)) {
+        /* Print 1-byte integer data as an ASCI character string instead of
+         * integers if the `-s' or `--string' command-line option was given. */
+ info.ascii = TRUE;
+ info.elmt_suf1 = "";
+ info.elmt_suf2 = "";
+ strcpy(string_prefix, info.line_pre);
+ strcat(string_prefix, "\"");
+ info.line_pre = string_prefix;
+ info.line_suf = "\"";
+    }
+
+    /* Print all the values. */
+    printf("    Data:\n");
+    if (h5tools_dump_dset(stdout, &info, dset, -1, NULL, -1) < 0) {
+ printf("        Unable to print data.\n");
+    }
+
+    H5Tclose(f_type);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: list_attr
+ *
+ * Purpose: Prints information about attributes.
+ *
+ * Return: Success: 0
+ *
+ *  Failure: -1
+ *
+ * Programmer: Robb Matzke
+ *              Friday, June  5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+list_attr (hid_t obj, const char *attr_name, void UNUSED *op_data)
+{
+    hid_t attr, space, type, p_type;
+    hsize_t size[64], nelmts=1;
+    int  ndims, i, n;
+    size_t need;
+    hsize_t     temp_need;
+    void *buf;
+    h5dump_t info;
+    H5S_class_t space_type;
+
+    printf("    Attribute: ");
+    n = display_string(stdout, attr_name, TRUE);
+    printf("%*s", MAX(0, 9-n), "");
+
+    if ((attr = H5Aopen_name(obj, attr_name))) {
+        space = H5Aget_space(attr);
+        type = H5Aget_type(attr);
+
+        /* Data space */
+        ndims = H5Sget_simple_extent_dims(space, size, NULL);
+        space_type = H5Sget_simple_extent_type(space);
+        switch (space_type) {
+            case H5S_SCALAR:
+                /* scalar dataspace */
+                puts(" scalar");
+                break;
+            case H5S_SIMPLE:
+                /* simple dataspace */
+                printf(" {");
+                for (i=0; i<ndims; i++) {
+                    HDfprintf(stdout, "%s%Hu", i?", ":"", size[i]);
+                    nelmts *= size[i];
+                }
+                puts("}");
+                break;
+            default:
+                /* Unknown dataspace type */
+                puts(" unknown");
+                break;
+        }
+
+        /* Data type */
+        printf("        Type:      ");
+        display_type(type, 15);
+        putchar('\n');
+
+        /* Data */
+        memset(&info, 0, sizeof info);
+        info.line_multi_new = 1;
+        if (nelmts<5) {
+            info.idx_fmt = "";
+            info.line_1st  = "        Data:  ";
+            info.line_pre  = "               ";
+            info.line_cont = "                ";
+            info.str_repeat = 8;
+
+        } else {
+            printf("        Data:\n");
+            info.idx_fmt = "(%s)";
+            info.line_pre  = "            %s ";
+            info.line_cont = "            %s  ";
+            info.str_repeat = 8;
+        }
+
+        info.line_ncols = width_g;
+        if (label_g) info.cmpd_name = "%s=";
+        if (string_g && 1==H5Tget_size(type) &&
+            H5T_INTEGER==H5Tget_class(type)) {
+            info.ascii = TRUE;
+            info.elmt_suf1 = "";
+            info.elmt_suf2 = "";
+            info.idx_fmt  = "(%s)";
+            info.line_pre = "            %s \"";
+            info.line_suf = "\"";
+        }
+
+        /* values of type reference */
+        info.obj_format = "-%lu:%lu:%lu:%lu";
+        info.obj_hidefileno = 0;
+        if (hexdump_g)
+           p_type = H5Tcopy(type);
+        else
+           p_type = h5tools_get_native_type(type);
+
+        if (p_type>=0) {
+            temp_need= nelmts * MAX(H5Tget_size(type), H5Tget_size(p_type));
+            assert(temp_need==(hsize_t)((size_t)temp_need));
+            need = (size_t)temp_need;
+            buf = malloc(need);
+            assert(buf);
+            if (H5Aread(attr, p_type, buf)>=0)
+               h5tools_dump_mem(stdout, &info, attr, p_type, space, buf, -1);
+            free(buf);
+            H5Tclose(p_type);
+        }
+
+        H5Sclose(space);
+        H5Tclose(type);
+        H5Aclose(attr);
+    } else {
+        putchar('\n');
+    }
+
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: dataset_list1
+ *
+ * Purpose: List information about a dataset which should appear on the
+ *  same line as the dataset name.  This information will precede
+ *  information which is applicable to all objects which will be
+ *  printed by the caller.
+ *
+ * Return: Success: 0
+ *
+ *  Failure: -1
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, August 27, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+dataset_list1(hid_t dset)
+{
+    hsize_t     cur_size[64];   /* current dataset dimensions */
+    hsize_t     max_size[64];   /* maximum dataset dimensions */
+    hid_t       space;          /* data space                 */
+    int         ndims;          /* dimensionality             */
+    H5S_class_t space_type;     /* type of dataspace          */
+    int   i;
+
+    /* Information that goes on the same row as the name.  The name has
+     * already been printed. */
+    space = H5Dget_space(dset);
+    space_type = H5Sget_simple_extent_type(space);
+    ndims = H5Sget_simple_extent_dims(space, cur_size, max_size);
+    printf (" {");
+    for (i=0; i<ndims; i++) {
+ HDfprintf (stdout, "%s%Hu", i?", ":"", cur_size[i]);
+ if (max_size[i]==H5S_UNLIMITED) {
+     HDfprintf (stdout, "/%s", "Inf");
+ } else if (max_size[i]!=cur_size[i] || verbose_g>0) {
+     HDfprintf(stdout, "/%Hu", max_size[i]);
+ }
+    }
+    if (space_type==H5S_SCALAR) printf("SCALAR");
+    putchar('}');
+    H5Sclose (space);
+
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: dataset_list2
+ *
+ * Purpose: List information about a dataset which should appear after
+ *  information which is general to all objects.
+ *
+ * Return: Success: 0
+ *
+ *  Failure: -1
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, August 27, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+dataset_list2(hid_t dset, const char UNUSED *name)
+{
+    hid_t       dcpl;           /* dataset creation property list */
+    hid_t       type;           /* data type of dataset */
+    hid_t       space;          /* data space of dataset */
+    int         nf;             /* number of filters */
+    unsigned    filt_flags;     /* filter flags */
+    H5Z_filter_t filt_id;       /* filter identification number */
+    unsigned    cd_values[20];  /* filter client data values */
+    size_t      cd_nelmts;      /* filter client number of values */
+    size_t      cd_num;         /* filter client data counter */
+    char        f_name[256];    /* filter/file name */
+    char        s[64];          /* temporary string buffer */
+    off_t       f_offset;       /* offset in external file */
+    hsize_t     f_size;         /* bytes used in external file */
+    hsize_t     total, used;    /* total size or offset */
+    hsize_t     chsize[64];     /* chunk size in elements */
+    int         ndims;          /* dimensionality */
+    int         n, max_len;     /* max extern file name length */
+    double      utilization;    /* percent utilization of storage */
+    int   i;
+
+    if (verbose_g>0) {
+ dcpl = H5Dget_create_plist(dset);
+ space = H5Dget_space(dset);
+ type = H5Dget_type(dset);
+
+ /* Print information about chunked storage */
+ if (H5D_CHUNKED==H5Pget_layout(dcpl)) {
+     ndims = H5Pget_chunk(dcpl, NELMTS(chsize), chsize/*out*/);
+     printf("    %-10s {", "Chunks:");
+     total = H5Tget_size(type);
+     for (i=0; i<ndims; i++) {
+  printf("%s%lu", i?", ":"", (unsigned long)(chsize[i]));
+  total *= chsize[i];
+     }
+     printf("} %lu bytes\n", (unsigned long)total);
+ }
+
+ /* Print total raw storage size */
+ total = H5Sget_simple_extent_npoints(space) * H5Tget_size(type);
+ used = H5Dget_storage_size(dset);
+ printf("    %-10s ", "Storage:");
+ printf("%lu logical byte%s, %lu allocated byte%s",
+        (unsigned long)total, 1==total?"":"s",
+        (unsigned long)used, 1==used?"":"s");
+ if (used>0) {
+#ifdef WIN32
+    utilization = (hssize_t)total * 100.0 / (hssize_t)used;
+#else
+    utilization = (total*100.0)/used;
+#endif
+     printf(", %1.2f%% utilization", utilization);
+ }
+ putchar('\n');
+
+ /* Print information about external strorage */
+ if ((nf = H5Pget_external_count(dcpl))>0) {
+     for (i=0, max_len=0; i<nf; i++) {
+  H5Pget_external(dcpl, (unsigned)i, sizeof(f_name), f_name, NULL, NULL);
+  n = display_string(NULL, f_name, TRUE);
+  max_len = MAX(max_len, n);
+     }
+     printf("    %-10s %d external file%s\n",
+     "Extern:", nf, 1==nf?"":"s");
+     printf("        %4s %10s %10s %10s %s\n",
+     "ID", "DSet-Addr", "File-Addr", "Bytes", "File");
+     printf("        %4s %10s %10s %10s ",
+     "----", "----------", "----------", "----------");
+     for (i=0; i<max_len; i++) putchar('-');
+     putchar('\n');
+     for (i=0, total=0; i<nf; i++) {
+  if (H5Pget_external(dcpl, (unsigned)i, sizeof(f_name), f_name, &f_offset,
+        &f_size)<0) {
+      HDfprintf(stdout,
+         "        #%03d %10Hu %10s %10s ***ERROR*** %s\n",
+         i, total, "", "",
+         i+1<nf?"Following addresses are incorrect":"");
+  } else if (H5S_UNLIMITED==f_size) {
+      HDfprintf(stdout, "        #%03d %10Hu %10Hu %10s ",
+         i, total, (hsize_t)f_offset, "INF");
+      display_string(stdout, f_name, TRUE);
+  } else {
+      HDfprintf(stdout, "        #%03d %10Hu %10Hu %10Hu ",
+         i, total, (hsize_t)f_offset, f_size);
+      display_string(stdout, f_name, TRUE);
+  }
+  putchar('\n');
+  total += f_size;
+     }
+     printf("        %4s %10s %10s %10s ",
+     "----", "----------", "----------", "----------");
+     for (i=0; i<max_len; i++) putchar('-');
+     putchar('\n');
+ }
+
+ /* Print information about raw data filters */
+ if ((nf = H5Pget_nfilters(dcpl))>0) {
+     for (i=0; i<nf; i++) {
+  cd_nelmts = NELMTS(cd_values);
+  filt_id = H5Pget_filter(dcpl, (unsigned)i, &filt_flags, &cd_nelmts,
+     cd_values, sizeof(f_name), f_name);
+  f_name[sizeof(f_name)-1] = '\0';
+  sprintf(s, "Filter-%d:", i);
+  printf("    %-10s %s-%u %s {", s,
+         f_name[0]?f_name:"method",
+         (unsigned)filt_id,
+         filt_flags & H5Z_FLAG_OPTIONAL?"OPT":"");
+  for (cd_num=0; cd_num<cd_nelmts; cd_num++) {
+      printf("%s%u", cd_num?", ":"", cd_values[cd_num]);
+  }
+  printf("}\n");
+     }
+ }
+
+ /* Print data type */
+ printf("    %-10s ", "Type:");
+ display_type(type, 15);
+ printf("\n");
+
+ /* Print address information */
+ if (address_g) H5Ddebug(dset);
+
+ /* Close stuff */
+ H5Tclose(type);
+ H5Sclose(space);
+ H5Pclose(dcpl);
+    }
+
+    if (data_g) dump_dataset_values(dset);
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: group_list2
+ *
+ * Purpose: List information about a group which should appear after
+ *  information which is general to all objects.
+ *
+ * Return: Success: 0
+ *
+ *  Failure: -1
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, January 21, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+group_list2(hid_t grp, const char *name)
+{
+    iter_t iter;
+
+    if (recursive_g) {
+        iter.container = name;
+        H5Giterate(grp, ".", NULL, list, &iter);
+    }
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: datatype_list2
+ *
+ * Purpose: List information about a data type which should appear after
+ *  information which is general to all objects.
+ *
+ * Return: Success: 0
+ *
+ *  Failure: -1
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, November  5, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+datatype_list2(hid_t type, const char UNUSED *name)
+{
+    if (verbose_g>0) {
+ printf("    %-10s ", "Type:");
+ display_type(type, 15);
+ printf("\n");
+    }
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: link_open
+ *
+ * Purpose: This gets called to open a symbolic link.  Since symbolic
+ *  links don't correspond to actual objects we simply print the
+ *  link information and return failure.
+ *
+ * Return: Success: 0 - an invalid object but successful return
+ *    of this function.
+ *
+ *  Failure: -1
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, August 27, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hid_t
+link_open(hid_t location, const char *name)
+{
+    char buf[64];
+
+    if (H5Gget_linkval (location, name, sizeof(buf), buf)<0) return -1;
+    if (NULL==HDmemchr(buf, 0, sizeof(buf))) {
+ strcpy(buf+sizeof(buf)-4, "...");
+    }
+    fputs(buf, stdout);
+
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: list
+ *
+ * Purpose: Prints the group member name.
+ *
+ * Return: Success: 0
+ *
+ *  Failure: -1
+ *
+ * Programmer: Robb Matzke
+ *              Monday, March 23, 1998
+ *
+ * Modifications:
+ *              Robb Matzke, LLNL, 2003-06-06
+ *              If simple_output_g (set by `--simple') is turned on then
+ *              the modification time is printed as UTC instead of the
+ *              local timezone.
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+list (hid_t group, const char *name, void *_iter)
+{
+    hid_t obj=-1;
+    char buf[512], comment[50], *fullname=NULL, *s=NULL;
+    H5G_stat_t sb;
+    struct tm *tm;
+    herr_t status;
+    iter_t *iter = (iter_t*)_iter;
+    int  n;
+
+    /* Print the object name, either full name or base name */
+    fullname = fix_name(iter->container, name);
+    if (fullname_g) {
+        n = display_string(stdout, fullname, TRUE);
+        printf("%*s ", MAX(0, 24-n), "");
+    } else {
+        n = display_string(stdout, name, TRUE);
+        printf("%*s ", MAX(0, 24-n), "");
+    }
+
+    /* Get object information */
+    H5E_BEGIN_TRY {
+        status = H5Gget_objinfo(group, name, FALSE, &sb);
+    } H5E_END_TRY;
+    if (status<0) {
+        puts("**NOT FOUND**");
+        return 0;
+    } else if (sb.type<0 || sb.type>=H5G_NTYPES) {
+        printf("Unknown type(%d)", sb.type);
+        sb.type = H5G_UNKNOWN;
+    }
+    if (sb.type>=0 && dispatch_g[sb.type].name) {
+        fputs(dispatch_g[sb.type].name, stdout);
+    }
+
+    /* If the object has already been printed then just show the object ID
+     * and return. */
+    if ((s=sym_lookup(&sb))) {
+        printf(", same as ");
+        display_string(stdout, s, TRUE);
+        printf("\n");
+        goto done;
+    } else {
+        sym_insert(&sb, fullname);
+    }
+
+    /* Open the object.  Not all objects can be opened.  If this is the case
+     * then return right away. */
+    if (sb.type>=0 &&
+            (NULL==dispatch_g[sb.type].open ||
+            (obj=(dispatch_g[sb.type].open)(group, name))<0)) {
+        printf(" *ERROR*\n");
+        goto done;
+    }
+
+    /* List the first line of information for the object. */
+    if (sb.type>=0 && dispatch_g[sb.type].list1) {
+        (dispatch_g[sb.type].list1)(obj);
+    }
+    putchar('\n');
+
+    /* Show detailed information about the object, beginning with information
+     * which is common to all objects. */
+    if (verbose_g>0 && H5G_LINK!=sb.type) {
+        if (sb.type>=0)
+            H5Aiterate(obj, NULL, list_attr, NULL);
+ printf("    %-10s %lu:%lu:%lu:%lu\n", "Location:",
+        sb.fileno[1], sb.fileno[0], sb.objno[1], sb.objno[0]);
+        printf("    %-10s %u\n", "Links:", sb.nlink);
+        if (sb.mtime>0) {
+            if (simple_output_g) tm=gmtime(&(sb.mtime));
+            else tm=localtime(&(sb.mtime));
+            if (tm) {
+                strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", tm);
+                printf("    %-10s %s\n", "Modified:", buf);
+            }
+        }
+        comment[0] = '\0';
+        H5Gget_comment(group, name, sizeof(comment), comment);
+        strcpy(comment+sizeof(comment)-4, "...");
+        if (comment[0]) {
+            printf("    %-10s \"", "Comment:");
+            display_string(stdout, comment, FALSE);
+            puts("\"");
+        }
+    }
+    if (sb.type>=0 && dispatch_g[sb.type].list2) {
+        (dispatch_g[sb.type].list2)(obj, fullname);
+    }
+
+    /* Close the object. */
+done:
+    if (sb.type>=0 && obj>=0 && dispatch_g[sb.type].close) {
+        (dispatch_g[sb.type].close)(obj);
+    }
+    if (fullname) free(fullname);
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: fix_name
+ *
+ * Purpose: Returns a malloc'd buffer that contains the PATH and BASE
+ *  names separated by a single slash. It also removes duplicate
+ *  and trailing slashes.
+ *
+ * Return: Success: Ptr to fixed name from malloc()
+ *
+ *  Failure: NULL
+ *
+ * Programmer: Robb Matzke
+ *              Thursday, January 21, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static char *
+fix_name(const char *path, const char *base)
+{
+    size_t n = (path ? HDstrlen(path) : 0) + (base ? HDstrlen(base) : 0) + 3;
+    char *s = HDmalloc(n), prev='\0';
+    size_t len = 0;
+
+    if (path) {
+        /* Path, followed by slash */
+        for (/*void*/; *path; path++)
+            if ('/'!=*path || '/'!=prev)
+                prev = s[len++] = *path;
+        if ('/' != prev)
+            prev = s[len++] = '/';
+    }
+
+    if (base) {
+        /* Base name w/o trailing slashes */
+        const char *end = base + HDstrlen(base);
+        while (end > base && '/' == end[-1])
+            --end;
+
+        for (/*void*/; base < end; base++)
+            if ('/' != *base || '/' != prev)
+                prev = s[len++] = *base;
+    }
+
+    s[len] = '\0';
+    return s;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: get_width
+ *
+ * Purpose: Figure out how wide the screen is.  This is highly
+ *  unportable, but the user can always override the width we
+ *  detect by giving a command-line option. These code snippets
+ *  were borrowed from the GNU less(1).
+ *
+ * Return: Success: Number of columns.
+ *
+ *  Failure: Some default number of columms.
+ *
+ * Programmer: Robb Matzke
+ *              Friday, November  6, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+get_width(void)
+{
+    int  width = 80;  /*the default   */
+    char *s;
+
+    /* Try to get it from the COLUMNS environment variable first since it's
+     * value is sometimes wrong. */
+    if ((s=getenv("COLUMNS")) && *s && isdigit((int)*s)) {
+ width = (int)strtol(s, NULL, 0);
+    }
+
+#if defined(H5_HAVE_STRUCT_VIDEOCONFIG) && defined(H5_HAVE__GETVIDEOCONFIG)
+    {
+ /* Microsoft C */
+ struct videoconfig w;
+ _getvideoconfig(&w);
+ width = w.numtextcols;
+    }
+#elif defined(H5_HAVE_STRUCT_TEXT_INFO) && defined(H5_HAVE_GETTEXTINFO)
+    {
+ /* Borland C or DJGPPC */
+ struct text_info w;
+ gettextinfo(&w);
+ width = w.screenwidth;
+    }
+#elif defined(H5_HAVE_GETCONSOLESCREENBUFFERINFO)
+    {
+ /* Win32 C */
+ CONSOLE_SCREEN_BUFFER_INFO scr;
+ GetConsoleScreenBufferInfo(con_out, &scr);
+ width = scr.srWindow.Right - scr.srWindow.Left + 1;
+    }
+#elif defined(H5_HAVE__SCRSIZE)
+    {
+ /* OS/2 */
+ int w[2];
+ _scrsize(w);
+ width = w[0];
+    }
+#elif defined(H5_HAVE_TIOCGWINSZ) && defined(H5_HAVE_IOCTL)
+#ifndef __PUMAGON__
+/* the ioctl() call coredump on TFLOPS.  Turn it off for now. */
+    {
+ /* Unix with ioctl(TIOCGWINSZ) */
+ struct winsize w;
+ if (ioctl(2, TIOCGWINSZ, &w)>=0 && w.ws_col>0) {
+     width = w.ws_col;
+ }
+    }
+#endif
+#elif defined(H5_HAVE_TIOCGETD) && defined(H5_HAVE_IOCTL)
+    {
+ /* Unix with ioctl(TIOCGETD) */
+ struct uwdata w;
+ if (ioctl(2, WIOCGETD, &w)>=0 && w.uw_width>0) {
+     width = w.uw_width / w.uw_hs;
+ }
+    }
+#endif
+
+    /* Set to at least 1 */
+    if (width<1) width = 1;
+    return width;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: leave
+ *
+ * Purpose: Close HDF5 and MPI and call exit()
+ *
+ * Return: Does not return
+ *
+ * Programmer: Quincey Koziol
+ *              Saturday, January 31, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+leave(int ret)
+{
+    h5tools_close();
+
+    exit(ret);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ * Purpose: Opens a file and lists the specified group
+ *
+ * Return: Success: 0
+ *
+ *  Failure: 1
+ *
+ * Programmer: Robb Matzke
+ *              Monday, March 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main (int argc, const char *argv[])
+{
+    hid_t file=-1, root=-1;
+    char *fname=NULL, *oname=NULL, *x;
+    const char *s = NULL;
+    char *rest, *container=NULL;
+    int  argno;
+    H5G_stat_t sb;
+    iter_t iter;
+    static char root_name[] = "/";
+    char        drivername[50];
+    const char                *preferred_driver=NULL;
+
+    /* Initialize h5tools lib */
+    h5tools_init();
+
+    /* Build display table */
+    DISPATCH(H5G_DATASET, "Dataset", H5Dopen, H5Dclose,
+      dataset_list1, dataset_list2);
+    DISPATCH(H5G_GROUP, "Group", H5Gopen, H5Gclose,
+      NULL, group_list2);
+    DISPATCH(H5G_TYPE, "Type", H5Topen, H5Tclose,
+      NULL, datatype_list2);
+    DISPATCH(H5G_LINK, "-> ", link_open, NULL,
+      NULL, NULL);
+
+#if 0
+    /* Name of this program without the path */
+    if ((progname=strrchr(argv[0], '/'))) progname++;
+    else progname = argv[0];
+#endif
+
+    /* Default output width */
+    width_g = get_width();
+
+    /* Switches come before non-switch arguments */
+    for (argno=1; argno<argc && '-'==argv[argno][0]; argno++) {
+        if (!strcmp(argv[argno], "--")) {
+            /* Last switch */
+            argno++;
+            break;
+        } else if (!strcmp(argv[argno], "--help")) {
+            usage();
+            leave(0);
+        } else if (!strcmp(argv[argno], "--address")) {
+            address_g = TRUE;
+        } else if (!strcmp(argv[argno], "--data")) {
+            data_g = TRUE;
+        } else if (!strcmp(argv[argno], "--errors")) {
+            show_errors_g = TRUE;
+        } else if (!strcmp(argv[argno], "--full")) {
+            fullname_g = TRUE;
+        } else if (!strcmp(argv[argno], "--group")) {
+            grp_literal_g = TRUE;
+        } else if (!strcmp(argv[argno], "--label")) {
+            label_g = TRUE;
+        } else if (!strcmp(argv[argno], "--recursive")) {
+            recursive_g = TRUE;
+            fullname_g = TRUE;
+        } else if (!strcmp(argv[argno], "--simple")) {
+            simple_output_g = TRUE;
+        } else if (!strcmp(argv[argno], "--string")) {
+            string_g = TRUE;
+        } else if (!strncmp(argv[argno], "--vfd=", 6)) {
+            preferred_driver = argv[argno]+6;
+        } else if (!strncmp(argv[argno], "--width=", 8)) {
+            width_g = (int)strtol(argv[argno]+8, &rest, 0);
+            if (width_g<=0 || *rest) {
+                usage();
+                leave(1);
+            }
+        } else if (!strcmp(argv[argno], "--width")) {
+            if (argno+1>=argc) {
+                usage();
+                leave(1);
+            } else {
+                s = argv[++argno];
+            }
+            width_g = (int)strtol(s, &rest, 0);
+            if (width_g<=0 || *rest) {
+                usage();
+                leave(1);
+            }
+        } else if (!strcmp(argv[argno], "--verbose")) {
+            verbose_g++;
+        } else if (!strcmp(argv[argno], "--version")) {
+            print_version(progname);
+            leave(0);
+        } else if (!strcmp(argv[argno], "--hexdump")) {
+            hexdump_g = TRUE;
+        } else if (!strncmp(argv[argno], "-w", 2)) {
+            if (argv[argno][2]) {
+                s = argv[argno]+2;
+            } else if (argno+1>=argc) {
+                usage();
+                leave(1);
+            } else {
+                s = argv[++argno];
+            }
+            width_g = (int)strtol(s, &rest, 0);
+            if (width_g<=0 || *rest) {
+                usage();
+                leave(1);
+            }
+        } else if ('-'!=argv[argno][1]) {
+            /* Single-letter switches */
+            for (s=argv[argno]+1; *s; s++) {
+                switch (*s) {
+                    case '?':
+                    case 'h': /* --help */
+                        usage();
+                        leave(0);
+                    case 'a': /* --address */
+                        address_g = TRUE;
+                        break;
+                    case 'd': /* --data */
+                        data_g = TRUE;
+                        break;
+                    case 'e': /* --errors */
+                        show_errors_g = TRUE;
+                        break;
+                    case 'f': /* --full */
+                        fullname_g = TRUE;
+                        break;
+                    case 'g': /* --group */
+                        grp_literal_g = TRUE;
+                        break;
+                    case 'l': /* --label */
+                        label_g = TRUE;
+                        break;
+                    case 'r': /* --recursive */
+                        recursive_g = TRUE;
+                        fullname_g = TRUE;
+                        break;
+                    case 'S': /* --simple */
+                        simple_output_g = TRUE;
+                        break;
+                    case 's': /* --string */
+                        string_g = TRUE;
+                        break;
+                    case 'v': /* --verbose */
+                        verbose_g++;
+                        break;
+                    case 'V': /* --version */
+                        print_version(progname);
+                        leave(0);
+                    case 'x': /* --hexdump */
+                        hexdump_g = TRUE;
+                        break;
+                    default:
+                        usage();
+                        leave(1);
+                }
+            }
+        } else {
+            usage();
+            leave(1);
+        }
+    }
+
+    /* If no arguments remain then print a usage message (instead of doing
+     * absolutely nothing ;-) */
+    if (argno>=argc) {
+        usage();
+        leave(1);
+    }
+
+    /* Turn off HDF5's automatic error printing unless you're debugging h5ls */
+    if (!show_errors_g) H5Eset_auto(NULL, NULL);
+
+
+    /* Each remaining argument is an hdf5 file followed by an optional slash
+     * and object name.
+     *
+     * Example: ../dir1/foo/bar/baz
+     *          \_________/\______/
+     *             file       obj
+     *
+     * The dichotomy is determined by calling H5Fopen() repeatedly until it
+     * succeeds. The first call uses the entire name and each subsequent call
+     * chops off the last component. If we reach the beginning of the name
+     * then there must have been something wrong with the file (perhaps it
+     * doesn't exist). */
+    show_file_name_g = (argc-argno > 1); /*show file names if more than one*/
+    while (argno<argc) {
+        fname = HDstrdup(argv[argno++]);
+        oname = NULL;
+        file = -1;
+
+        while (fname && *fname) {
+            file = h5tools_fopen(fname, preferred_driver, drivername, sizeof drivername, argc, argv);
+
+            if (file>=0) {
+                if (verbose_g) {
+                    printf("Opened \"%s\" with %s driver.\n",
+                    fname, drivername);
+                }
+                break; /*success*/
+            }
+
+            /* Shorten the file name; lengthen the object name */
+            x = oname;
+            oname = strrchr(fname, '/');
+            if (x) *x = '/';
+            if (!oname) break;
+            *oname = '\0';
+        }
+        if (file<0) {
+            fprintf(stderr, "%s: unable to open file\n", argv[argno-1]);
+            continue;
+        }
+        if (oname) oname++;
+        if (!oname || !*oname) oname = root_name;
+
+        /* Open the object and display it's information */
+        if (H5Gget_objinfo(file, oname, TRUE, &sb)>=0 &&
+                H5G_GROUP==sb.type && !grp_literal_g) {
+            /* Specified name is a group. List the complete contents of the
+             * group. */
+            sym_insert(&sb, oname);
+            iter.container = container = fix_name(show_file_name_g?fname:"", oname);
+            H5Giterate(file, oname, NULL, list, &iter);
+            free(container);
+
+        } else if ((root=H5Gopen(file, "/"))<0) {
+            leave(1); /*major problem!*/
+
+        } else {
+            /* Specified name is a non-group object -- list that object.  The
+            * container for the object is everything up to the base name. */
+            iter.container = show_file_name_g ? fname : "/";
+            list(root, oname, &iter);
+            if (H5Gclose(root)<0) leave(1);
+        }
+        H5Fclose(file);
+        free(fname);
+    }
+    leave(0);
+}

Added: packages/hdf5/branches/upstream/current/tools/h5ls/testh5ls.sh
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5ls/testh5ls.sh	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5ls/testh5ls.sh	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,156 @@
+#! /bin/sh
+#
+# 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.
+#
+# Tests for the h5ls tool
+
+H5LS=h5ls               # The tool name
+H5LS_BIN=`pwd`/$H5LS    # The path of the tool binary
+
+CMP='cmp -s'
+DIFF='diff -c'
+NLINES=20			# Max. lines of output to display if test fails
+
+nerrors=0
+verbose=yes
+
+# The build (current) directory might be different than the source directory.
+if test -z "$srcdir"; then
+    srcdir=.
+fi
+test -d ../testfiles || mkdir ../testfiles
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Testing".
+TESTING() {
+    SPACES="                                                               "
+    echo "Testing $* $SPACES" |cut -c1-70 |tr -d '\012'
+}
+
+# Run a test and print PASS or *FAIL*. For now, if h5ls can complete
+# with exit status 0, consider it pass. If a test fails then increment
+# the `nerrors' global variable and (if $verbose is set) display up to $NLINS
+# lines of the actual output from the tool test.  The actual output is not
+# removed if $HDF5_NOCLEANUP has a non-zero value.
+# Arguemnts:
+# $1 -- actual output filename to use
+# $2 and on -- argument for the h5ls tool
+TOOLTEST() {
+    expect="$srcdir/../testfiles/$1"
+    actual="../testfiles/`basename $1 .ls`.out"
+    shift
+
+    # Run test.
+    # Stderr is included in stdout so that the diff can detect
+    # any unexpected output from that stream too.
+    TESTING $H5LS $@
+    (
+	echo "#############################"
+	echo " output for '$H5LS $@'" 
+	echo "#############################"
+	cd $srcdir/../testfiles
+        $RUNSERIAL $H5LS_BIN "$@"
+    ) 2>&1 |sed 's/Modified:.*/Modified:  XXXX-XX-XX XX:XX:XX XXX/' >$actual
+    
+    exitcode=$?
+    if [ $exitcode -ne 0 ]; then
+	echo "*FAILED*"
+	nerrors="`expr $nerrors + 1`"
+	if [ yes = "$verbose" ]; then
+	    echo "test returned with exit code $exitcode"
+	    echo "test output: (up to $NLINES lines)"
+	    head -$NLINES $actual
+	    echo "***end of test output***"
+	    echo ""
+	fi
+    elif [ ! -f $expect ]; then
+	# Create the expect file if it doesn't yet exist.
+        echo " CREATED"
+        cp $actual $expect
+    elif $CMP $expect $actual; then
+        echo " PASSED"
+    else
+        echo "*FAILED*"
+	echo "    Expected result differs from actual result"
+	nerrors="`expr $nerrors + 1`"
+	test yes = "$verbose" && $DIFF $expect $actual |sed 's/^/    /'
+    fi
+
+    # Clean up output file
+    if test -z "$HDF5_NOCLEANUP"; then
+	rm -f $actual
+    fi
+}
+
+##############################################################################
+##############################################################################
+###			  T H E   T E S T S                                ###
+##############################################################################
+##############################################################################
+
+# Toss in a bunch of tests.  Not sure if they are the right kinds.
+# test the help syntax
+TOOLTEST help-1.ls -w80 -h
+TOOLTEST help-2.ls -w80 -help
+TOOLTEST help-3.ls -w80 -?
+
+# test simple command
+TOOLTEST tall-1.ls -w80 tall.h5
+TOOLTEST tall-2.ls -w80 -r -d tall.h5
+TOOLTEST tgroup.ls -w80 tgroup.h5
+
+# test for displaying groups
+TOOLTEST tgroup-1.ls -w80 -r -g tgroup.h5
+
+# test for displaying simple space datasets
+TOOLTEST tdset-1.ls -w80 -r -d tdset.h5
+
+# test for displaying soft links
+TOOLTEST tslink-1.ls -w80 -r tslink.h5
+
+# tests for hard links
+TOOLTEST thlink-1.ls -w80 thlink.h5
+
+# tests for compound data types
+TOOLTEST tcomp-1.ls -w80 -r -d tcompound.h5
+
+#test for the nested compound type
+TOOLTEST tnestcomp-1.ls -w80 -r -d tnestedcomp.h5
+
+# test for loop detection
+TOOLTEST tloop-1.ls -w80 -r -d tloop.h5
+
+# test for string 
+TOOLTEST tstr-1.ls -w80 -r -d tstr.h5
+
+# test test file created from lib SAF team
+TOOLTEST tsaf.ls -w80 -r -d tsaf.h5
+
+# test for variable length data types
+TOOLTEST tvldtypes1.ls -w80 -r -d tvldtypes1.h5
+
+# test for array data types
+TOOLTEST tarray1.ls -w80 -r -d tarray1.h5
+
+# test for empty data
+TOOLTEST tempty.ls -w80 -d tempty.h5
+
+# test for all dataset types written to attributes
+# enable -S for avoiding printing NATIVE types
+TOOLTEST tattr2.ls -w80 -v -S tattr2.h5
+
+if test $nerrors -eq 0 ; then
+	echo "All h5ls tests passed."
+fi
+
+exit $nerrors


Property changes on: packages/hdf5/branches/upstream/current/tools/h5ls/testh5ls.sh
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5repack/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,600 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+h5repack.lo: \
+   $(srcdir)/h5repack.c \
+   $(srcdir)/h5repack.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/tools/lib/h5trav.h \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/tools/lib/h5tools.h
+h5repack_copy.lo: \
+   $(srcdir)/h5repack_copy.c \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(srcdir)/h5repack.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/tools/lib/h5trav.h \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/tools/lib/h5tools.h
+h5repack_filters.lo: \
+   $(srcdir)/h5repack_filters.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/test/h5test.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(srcdir)/h5repack.h \
+   $(top_srcdir)/tools/lib/h5trav.h \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/tools/lib/h5tools.h
+h5repack_refs.lo: \
+   $(srcdir)/h5repack_refs.c \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(srcdir)/h5repack.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/tools/lib/h5trav.h \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/tools/lib/h5tools.h
+h5repack_list.lo: \
+   $(srcdir)/h5repack_list.c \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(srcdir)/h5repack.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/tools/lib/h5trav.h \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/tools/lib/h5tools.h
+h5repack_main.lo: \
+   $(srcdir)/h5repack_main.c \
+   $(srcdir)/h5repack.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/tools/lib/h5trav.h \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/tools/lib/h5tools.h
+h5repack_opttable.lo: \
+   $(srcdir)/h5repack_opttable.c \
+   $(srcdir)/h5repack.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/tools/lib/h5trav.h \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/tools/lib/h5tools.h
+h5repack_parse.lo: \
+   $(srcdir)/h5repack_parse.c \
+   $(srcdir)/h5repack.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/tools/lib/h5trav.h \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/tools/lib/h5tools.h
+h5repack_verify.lo: \
+   $(srcdir)/h5repack_verify.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/test/h5test.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(srcdir)/h5repack.h \
+   $(top_srcdir)/tools/lib/h5trav.h \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/tools/lib/h5tools.h
+testh5repack_attr.lo: \
+   $(srcdir)/testh5repack_attr.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/test/h5test.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(srcdir)/h5repack.h \
+   $(top_srcdir)/tools/lib/h5trav.h \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/tools/lib/h5tools.h
+testh5repack_dset.lo: \
+   $(srcdir)/testh5repack_dset.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/test/h5test.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(srcdir)/h5repack.h \
+   $(top_srcdir)/tools/lib/h5trav.h \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/tools/lib/h5tools.h
+testh5repack_main.lo: \
+   $(srcdir)/testh5repack_main.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/test/h5test.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(srcdir)/h5repack.h \
+   $(top_srcdir)/tools/lib/h5trav.h \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/tools/lib/h5tools.h
+testh5repack_make.lo: \
+   $(srcdir)/testh5repack_make.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/test/h5test.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(srcdir)/h5repack.h \
+   $(top_srcdir)/tools/lib/h5trav.h \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/tools/lib/h5tools.h
+testh5repack_util.lo: \
+   $(srcdir)/testh5repack_util.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(srcdir)/h5repack.h \
+   $(top_srcdir)/tools/lib/h5trav.h \
+   $(top_srcdir)/tools/lib/h5diff.h \
+   $(top_srcdir)/tools/lib/h5tools.h

Added: packages/hdf5/branches/upstream/current/tools/h5repack/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,87 @@
+##
+## 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.
+##
+## HDF5 Library Makefile(.in)
+##
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Add include directory to the C preprocessor flags, add -lh5tools and
+## -lhdf5 to the list of libraries.
+## Add also the test include directory for #defines
+CPPFLAGS=-I. -I$(srcdir) -I$(top_builddir)/src -I$(top_srcdir)/src  \
+         -I$(top_srcdir)/test  \
+         -I$(top_srcdir)/tools/lib @CPPFLAGS@  
+
+## Test programs and scripts.
+##
+TEST_PROGS=h5repacktst
+TEST_SCRIPTS=./h5repack.sh
+PRIV_PROGS=testh5repack_detect_szip
+
+## These are our main targets: library and tools.
+##
+LIBHDF5=$(top_builddir)/src/libhdf5.la
+LIBTOOLS=../lib/libh5tools.la
+
+PUB_PROGS=h5repack
+PROGS=$(PUB_PROGS) $(TEST_PROGS) $(PRIV_PROGS)
+
+## Source and object files for the library; do not install
+##
+LIB_SRC=
+LIB_OBJ=$(LIB_SRC:.c=.lo)
+PUB_LIB=
+
+## Temporary files.  *.h5 are generated by h5repack.  They should
+## copied to the testfiles/ directory if update is required.
+MOSTLYCLEAN=*.h5
+DISTCLEAN=h5repack.sh
+
+## Source and object files for programs...
+##
+PROG_SRC=h5repack.c h5repack_copy.c h5repack_filters.c  h5repack_refs.c  h5repack_list.c h5repack_main.c h5repack_opttable.c h5repack_parse.c h5repack_verify.c testh5repack_attr.c testh5repack_dset.c   testh5repack_main.c testh5repack_make.c  testh5repack_util.c
+OBJS=h5repack.lo h5repack_filters.lo h5repack_copy.lo h5repack_refs.lo  h5repack_list.lo h5repack_main.lo h5repack_opttable.lo h5repack_parse.lo h5repack_verify.lo	
+TEST_OBJS=h5repack.lo h5repack_filters.lo  h5repack_copy.lo h5repack_refs.lo  h5repack_list.lo h5repack_opttable.lo h5repack_parse.lo h5repack_verify.lo testh5repack_attr.lo testh5repack_dset.lo  testh5repack_main.lo testh5repack_make.lo  testh5repack_util.lo
+DETECT_OBJS=testh5repack_detect_szip.lo
+PROG_OBJ=$(PROG_SRC:.c=.lo) $(DETECT_OBJS)
+
+PRIVATE_HDR=
+
+## Source and object files for the tests
+##
+TEST_SRC=
+TEST_OBJ=$(TEST_SRC:.c=.lo)
+
+## Programs have to be built before they can be tested!
+##
+check test _test: $(PROGS)
+
+## How to build the programs...They all depend on the hdf5 library and
+## the tools library compiled in this directory.
+##
+$(PROGS): $(LIBTOOLS) $(LIBHDF5)
+
+h5repack: $(OBJS)
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(OBJS)  $(LIBTOOLS)  $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+h5repacktst: $(TEST_OBJS)
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(TEST_OBJS)  $(LIBTOOLS)  $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+testh5repack_detect_szip: $(DETECT_OBJS)
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ $(DETECT_OBJS)  $(LIBTOOLS)  $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/tools/h5repack/h5repack.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/h5repack.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/h5repack.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,488 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdlib.h>
+#include "h5repack.h"
+
+/*-------------------------------------------------------------------------
+ * File: h5repack.c
+ * Purpose: Public API functions
+ *-------------------------------------------------------------------------
+ */
+
+static int check_options(pack_opt_t *options);
+
+
+/*-------------------------------------------------------------------------
+ * Function: aux_initglb_filter
+ *
+ * Purpose: auxiliary function, initialize the options global filter
+ *
+ * Return: void
+ *
+ *-------------------------------------------------------------------------
+ */
+static void aux_initglb_filter(pack_opt_t *options)
+{
+ int k;
+ options->filter_g.filtn  = -1;
+ for ( k=0; k<CDVALUES; k++)
+  options->filter_g.cd_values[k] = -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: h5repack
+ *
+ * Purpose: locate all high-level HDF5 objects in the file
+ *  and compress/chunk them using options
+ *
+ * Algorythm: 2 traversals are made to the file; the 1st builds a list of
+ *  the objects, the 2nd makes a copy of them, using the options;
+ *  the reason for the 1st traversal is to check for invalid
+ *  object name requests
+ *
+ * Return: 0, ok, -1, fail
+ *
+ * Programmer: pvn at ncsa.uiuc.edu
+ *
+ * Date: September, 22, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+int h5repack(const char* infile,
+             const char* outfile,
+             pack_opt_t *options)
+{
+ /* check input */
+ if (check_options(options)<0)
+  return -1;
+
+ /* check for objects in input that are in the file */
+ if (check_objects(infile,options)<0)
+  return -1;
+
+ /* copy the objects  */
+ if (copy_objects(infile,outfile,options)<0)
+  return -1;
+
+
+ return 0;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: h5repack_init
+ *
+ * Purpose: initialize options
+ *
+ * Return: 0, ok, -1, fail
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int h5repack_init (pack_opt_t *options,
+                   int verbose)
+{
+ memset(options,0,sizeof(pack_opt_t));
+ options->threshold = 1024;
+ options->verbose   = verbose;
+ return (options_table_init(&(options->op_tbl)));
+}
+
+/*-------------------------------------------------------------------------
+ * Function: h5repack_end
+ *
+ * Purpose: free options table
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int h5repack_end  (pack_opt_t *options)
+{
+ return options_table_free(options->op_tbl);
+}
+
+/*-------------------------------------------------------------------------
+ * Function: h5repack_addfilter
+ *
+ * Purpose: add a compression -f option to table
+ *   Example: -f dset:GZIP=6
+ *
+ * Return: 0, ok, -1, fail
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int h5repack_addfilter(const char* str,
+                       pack_opt_t *options)
+{
+ obj_list_t      *obj_list=NULL; /*one object list for the -f and -c option entry */
+ filter_info_t   filt;           /*filter info for the current -f option entry */
+ int             n_objs;         /*number of objects in the current -f or -c option entry */
+
+ if (options->all_filter==1){
+  printf("Error: Invalid compression input: all option is present \
+   with other objects <%s>\n",str);
+  return -1;
+ }
+
+ /* parse the -f option */
+ obj_list=parse_filter(str,&n_objs,&filt,options);
+ if (obj_list==NULL)
+ {
+  return -1;
+ }
+
+ if (options->all_filter==1)
+ {
+  /* if we are compressing all set the global filter type */
+  aux_initglb_filter(options);
+  options->filter_g=filt;
+ }
+
+ if (options->all_filter==0)
+  options_add_filter(obj_list,n_objs,filt,options->op_tbl);
+
+ free(obj_list);
+ return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: h5repack_addlayout
+ *
+ * Purpose: add a layout option
+ *
+ * Return: 0, ok, -1, fail
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+int h5repack_addlayout(const char* str,
+                       pack_opt_t *options)
+{
+
+ obj_list_t  *obj_list=NULL;     /*one object list for the -t and -c option entry */
+ int         n_objs;             /*number of objects in the current -t or -c option entry */
+ pack_info_t pack;               /*info about layout to extract from parse */
+ int         j;
+
+ init_packobject(&pack);
+
+ if (options->all_layout==1){
+  printf("Error: Invalid layout input: all option \
+   is present with other objects <%s>\n",str);
+  return -1;
+ }
+
+ /* parse the layout option */
+ obj_list=parse_layout(str,&n_objs,&pack,options);
+ if (obj_list==NULL)
+  return -1;
+
+ /* set global layout option */
+ if (options->all_layout==1 )
+ {
+  options->layout_g=pack.layout;
+  if (pack.layout==H5D_CHUNKED)
+  {
+   /* -2 means the NONE option, remove chunking
+      and set the global layout to contiguous */
+   if (pack.chunk.rank==-2)
+   {
+    options->layout_g = H5D_CONTIGUOUS;
+   }
+   /* otherwise set the global chunking type */
+   else
+   {
+    options->chunk_g.rank=pack.chunk.rank;
+    for (j = 0; j < pack.chunk.rank; j++)
+     options->chunk_g.chunk_lengths[j] = pack.chunk.chunk_lengths[j];
+   }
+  }
+ }
+
+ if (options->all_layout==0)
+  options_add_layout(obj_list,
+   n_objs,
+   &pack,
+   options->op_tbl);
+
+ free(obj_list);
+ return 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: check_options
+ *
+ * Purpose: print options, checks for invalid options
+ *
+ * Return: void, return -1 on error
+ *
+ * Programmer: pvn at ncsa.uiuc.edu
+ *
+ * Date: September, 22, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+static int check_options(pack_opt_t *options)
+{
+ int   i, k, j, has_cp=0, has_ck=0;
+ char  slayout[30];
+
+/*-------------------------------------------------------------------------
+ * objects to layout
+ *-------------------------------------------------------------------------
+ */
+ if (options->verbose)
+ {
+  printf("Objects to modify layout are...\n");
+  if (options->all_layout==1)  {
+   switch (options->layout_g)
+   {
+   case H5D_COMPACT:
+    strcpy(slayout,"compact");
+    break;
+   case H5D_CONTIGUOUS:
+    strcpy(slayout,"contiguous");
+    break;
+   case H5D_CHUNKED:
+    strcpy(slayout,"chunked");
+    break;
+   default:
+    strcpy(slayout,"unknown");
+    break;
+   }
+   printf(" Apply %s layout to all\n", slayout);
+   if (H5D_CHUNKED==options->layout_g) {
+    printf("with dimension [");
+    for ( j = 0; j < options->chunk_g.rank; j++)
+     printf("%d ",(int)options->chunk_g.chunk_lengths[j]);
+    printf("]\n");
+   }
+  }
+ }/* verbose */
+
+ for ( i = 0; i < options->op_tbl->nelems; i++)
+ {
+  char* name=options->op_tbl->objs[i].path;
+
+  if (options->op_tbl->objs[i].chunk.rank>0)
+  {
+   if (options->verbose){
+    printf(" <%s> with chunk size ",name);
+    for ( k = 0; k < options->op_tbl->objs[i].chunk.rank; k++)
+     printf("%d ",(int)options->op_tbl->objs[i].chunk.chunk_lengths[k]);
+    printf("\n");
+   }
+   has_ck=1;
+  }
+  else if (options->op_tbl->objs[i].chunk.rank==-2)
+  {
+   if (options->verbose)
+    printf(" <%s> %s\n",name,"NONE (contigous)");
+   has_ck=1;
+  }
+ }
+
+ if (options->all_layout==1 && has_ck){
+  printf("Error: Invalid chunking input: all option\
+   is present with other objects\n");
+  return -1;
+ }
+
+/*-------------------------------------------------------------------------
+ * objects to filter
+ *-------------------------------------------------------------------------
+ */
+
+ if (options->verbose)
+ {
+  printf("Objects to apply filter are...\n");
+  if (options->all_filter==1)
+  {
+   H5Z_filter_t filtn=options->filter_g.filtn;
+   switch (filtn)
+   {
+   case H5Z_FILTER_NONE:
+     printf(" Uncompress all\n");
+    break;
+   case H5Z_FILTER_SHUFFLE:
+   case H5Z_FILTER_FLETCHER32:
+     printf(" All with %s\n",get_sfilter(filtn));
+    break;
+   case H5Z_FILTER_SZIP:
+   case H5Z_FILTER_DEFLATE:
+     printf(" All with %s, parameter %d\n",
+      get_sfilter(filtn),
+      options->filter_g.cd_values[0]);
+    break;
+   };
+  }
+ } /* verbose */
+
+ for ( i = 0; i < options->op_tbl->nelems; i++)
+ {
+  pack_info_t pack  = options->op_tbl->objs[i];
+  char*       name  = pack.path;
+
+  for ( j=0; j<pack.nfilters; j++)
+  {
+   if (options->verbose)
+   {
+    printf(" <%s> with %s filter\n",
+     name,
+     get_sfilter(pack.filter[j].filtn));
+   }
+
+   has_cp=1;
+
+  } /* j */
+ } /* i */
+
+ if (options->all_filter==1 && has_cp){
+  printf("Error: Invalid compression input: all option\
+   is present with other objects\n");
+  return -1;
+ }
+
+
+ return 0;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: read_info
+ *
+ * Purpose: read comp and chunk options from file
+ *
+ * Return: void, exit on error
+ *
+ * Programmer: pvn at ncsa.uiuc.edu
+ *
+ * Date: September, 22, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+void read_info(const char *filename,
+               pack_opt_t *options)
+{
+
+ char stype[10];
+ char comp_info[1024];
+ FILE *fp;
+ char c;
+ int  i, rc=1;
+ char  *srcdir = getenv("srcdir"); /* the source directory */
+ char  data_file[512]="";          /* buffer to hold name of existing file */
+
+ /* compose the name of the file to open, using the srcdir, if appropriate */
+ if (srcdir){
+  strcpy(data_file,srcdir);
+  strcat(data_file,"/");
+ }
+ strcat(data_file,filename);
+
+
+ if ((fp = fopen(data_file, "r")) == (FILE *)NULL) {
+  printf( "Cannot open options file %s", filename);
+  exit(1);
+ }
+
+ /* cycle until end of file reached */
+ while( 1 )
+ {
+  rc=fscanf(fp, "%s", stype);
+  if (rc==-1)
+   break;
+
+ /*-------------------------------------------------------------------------
+  * filter
+  *-------------------------------------------------------------------------
+  */
+  if (strcmp(stype,"-f") == 0) {
+
+   /* find begining of info */
+   i=0; c='0';
+   while( c!=' ' )
+   {
+    fscanf(fp, "%c", &c);
+    if (feof(fp)) break;
+   }
+   c='0';
+   /* go until end */
+   while( c!=' ' )
+   {
+    fscanf(fp, "%c", &c);
+    comp_info[i]=c;
+    i++;
+    if (feof(fp)) break;
+    if (c==10 /*eol*/) break;
+   }
+   comp_info[i-1]='\0'; /*cut the last " */
+
+   if (h5repack_addfilter(comp_info,options)==-1){
+    printf( "Could not add compression option. Exiting\n");
+    exit(1);
+   }
+  }
+ /*-------------------------------------------------------------------------
+  * layout
+  *-------------------------------------------------------------------------
+  */
+  else if (strcmp(stype,"-l") == 0) {
+
+   /* find begining of info */
+   i=0; c='0';
+   while( c!=' ' )
+   {
+    fscanf(fp, "%c", &c);
+    if (feof(fp)) break;
+   }
+   c='0';
+   /* go until end */
+   while( c!=' ' )
+   {
+    fscanf(fp, "%c", &c);
+    comp_info[i]=c;
+    i++;
+    if (feof(fp)) break;
+    if (c==10 /*eol*/) break;
+   }
+   comp_info[i-1]='\0'; /*cut the last " */
+
+   if (h5repack_addlayout(comp_info,options)==-1){
+    printf( "Could not add chunck option. Exiting\n");
+    exit(1);
+   }
+  }
+ /*-------------------------------------------------------------------------
+  * not valid
+  *-------------------------------------------------------------------------
+  */
+  else {
+   printf( "Bad file format for %s", filename);
+   exit(1);
+  }
+ }
+
+ fclose(fp);
+ return;
+}
+
+

Added: packages/hdf5/branches/upstream/current/tools/h5repack/h5repack.h
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/h5repack.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/h5repack.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,324 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#ifndef H5REPACK_H__
+#define H5REPACK_H__
+
+#include "hdf5.h"
+#include "h5trav.h"
+#include "h5diff.h"
+#include "h5tools.h"
+
+#define H5FOPENERROR "unable to open file"
+
+#define PFORMAT  "%-7s %-7s %-7s\n" /*chunk info, compression info, name*/
+#define PFORMAT1 "%-7s %-7s %-7s"     /*chunk info, compression info, name*/
+
+#define MAX_NC_NAME 256 /* max length of a name */
+#define MAX_VAR_DIMS 32 /* max per variable dimensions */
+
+
+/*-------------------------------------------------------------------------
+ * data structures for command line options
+ *-------------------------------------------------------------------------
+ */
+
+/* a list of names */
+typedef struct {
+ char obj[MAX_NC_NAME];
+} obj_list_t;
+
+/*
+ the type of filter and additional parameter
+ type can be one of the filters
+ H5Z_FILTER_NONE       0,  uncompress if compressed
+ H5Z_FILTER_DEFLATE	   1 , deflation like gzip
+ H5Z_FILTER_SHUFFLE    2 , shuffle the data
+ H5Z_FILTER_FLETCHER32 3 , letcher32 checksum of EDC
+ H5Z_FILTER_SZIP       4 , szip compression
+*/
+
+#define CDVALUES 2
+
+typedef struct {
+ H5Z_filter_t filtn;               /* filter identification number */
+ int          cd_values[CDVALUES]; /* filter client data values */
+ /* extra input for szip, selects the coding method
+    entropy coding method: EC=0
+    nearest neighbor coding method: NN=1
+ */
+ int          szip_coding;
+} filter_info_t;
+
+/* chunk lengths along each dimension and rank */
+typedef struct {
+ hsize_t chunk_lengths[MAX_VAR_DIMS];
+ int     rank;
+} chunk_info_t;
+
+/* we currently define a maximum value for the filters array,
+   that corresponds to the current library filters */
+#define H5_REPACK_MAX_NFILTERS 4
+
+/* information for one object, contains PATH, CHUNK info and FILTER info */
+typedef struct {
+ char          path[MAX_NC_NAME];               /* name of object */
+ filter_info_t filter[H5_REPACK_MAX_NFILTERS];  /* filter array */
+ int           nfilters;                        /* current number of filters */
+ H5D_layout_t  layout;                          /* layout information */
+ chunk_info_t  chunk;                           /* chunk information */
+ hid_t         refobj_id;                       /* object ID, references */
+} pack_info_t;
+
+/* store a table of all objects */
+typedef struct {
+ int         size;
+ int         nelems;
+ pack_info_t *objs;
+} pack_opttbl_t;
+
+
+/*-------------------------------------------------------------------------
+ * command line options
+ *-------------------------------------------------------------------------
+ */
+
+/* all the above, ready to go to the hrepack call */
+typedef struct {
+ pack_opttbl_t   *op_tbl;     /*table with all -c and -f options */
+ int             all_layout;  /*apply the layout to all objects */
+ int             all_filter;  /*apply the filter to all objects */
+ filter_info_t   filter_g;    /*global filter INFO for the ALL case */
+ chunk_info_t    chunk_g;     /*global chunk INFO for the ALL case */
+ H5D_layout_t    layout_g;    /*global layout information for the ALL case */
+ int verbose;                 /*verbose mode */
+ hsize_t threshold;               /*minimum size to compress, in bytes */
+} pack_opt_t;
+
+
+
+/*-------------------------------------------------------------------------
+ * public functions
+ *-------------------------------------------------------------------------
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int h5repack           (const char* infile, const char* outfile, pack_opt_t *options);
+int h5repack_addfilter (const char* str, pack_opt_t *options);
+int h5repack_addlayout (const char* str, pack_opt_t *options);
+int h5repack_init      (pack_opt_t *options, int verbose);
+int h5repack_end       (pack_opt_t *options);
+int h5repack_verify    (const char *fname,pack_opt_t *options);
+int h5repack_cmpdcpl   (const char *fname1,
+                        const char *fname2);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+/*-------------------------------------------------------------------------
+ * private functions
+ *-------------------------------------------------------------------------
+ */
+
+
+int check_objects(const char* fname,
+                  pack_opt_t *options);
+
+int copy_objects(const char* fnamein,
+                 const char* fnameout,
+                 pack_opt_t *options);
+
+void print_objlist(const char *filename,
+                   int nobjects,
+                   trav_info_t *travi );
+
+int do_copy_objects(hid_t fidin,
+                    hid_t fidout,
+                    trav_table_t *travt,
+                    pack_opt_t *options);
+
+int copy_attr(hid_t loc_in,
+              hid_t loc_out,
+              pack_opt_t *options
+              );
+
+int do_copy_refobjs(hid_t fidin,
+                    hid_t fidout,
+                    trav_table_t *travt,
+                    pack_opt_t *options); /* repack options */
+
+
+
+void read_info(const char *filename,pack_opt_t *options);
+void init_packobject(pack_info_t *obj);
+int print_filters(hid_t dcpl_id);
+
+
+
+/*-------------------------------------------------------------------------
+ * filters
+ *-------------------------------------------------------------------------
+ */
+
+int apply_filters(const char* name,    /* object name from traverse list */
+                  int rank,            /* rank of dataset */
+                  hsize_t *dims,       /* dimensions of dataset */
+                  hid_t dcpl_id,       /* dataset creation property list */
+                  hid_t type_id,       /* datatype */
+                  pack_opt_t *options); /* repack options */
+
+int has_filter(hid_t dcpl_id,
+               H5Z_filter_t filtnin);
+
+
+int can_read(const char* name,    /* object name from traverse list */
+             hid_t dcpl_id,       /* dataset creation property list */
+             pack_opt_t *options); /* repack options */
+
+
+/*-------------------------------------------------------------------------
+ * layout functions
+ *-------------------------------------------------------------------------
+ */
+
+int has_layout(hid_t dcpl_id,
+               pack_info_t *obj);
+
+int layout_this(hid_t dcpl_id,             /* DCPL from input object */
+                const char* name,          /* object name from traverse list */
+                pack_opt_t *options,       /* repack options */
+                pack_info_t *pack /*OUT*/) /* object to apply layout */;
+
+int apply_layout(hid_t dcpl_id,
+                 pack_info_t *pack);  /* info about object  */
+
+
+/*-------------------------------------------------------------------------
+ * options table
+ *-------------------------------------------------------------------------
+ */
+int          options_table_init( pack_opttbl_t **tbl );
+int          options_table_free( pack_opttbl_t *table );
+int          options_add_layout( obj_list_t *obj_list,
+                                 int n_objs,
+                                 pack_info_t *pack,
+                                 pack_opttbl_t *table );
+int          options_add_filter ( obj_list_t *obj_list,
+                                 int n_objs,
+                                 filter_info_t filt,
+                                 pack_opttbl_t *table );
+pack_info_t* options_get_object( const char *path,
+                                 pack_opttbl_t *table);
+
+/*-------------------------------------------------------------------------
+ * parse functions
+ *-------------------------------------------------------------------------
+ */
+
+obj_list_t* parse_filter(const char *str,
+                         int *n_objs,
+                         filter_info_t *filt,
+                         pack_opt_t *options);
+
+obj_list_t* parse_layout(const char *str,
+                         int *n_objs,
+                         pack_info_t *pack,    /* info about object */
+                         pack_opt_t *options);
+
+const char* get_sfilter (H5Z_filter_t filtn);
+int         parse_number(char *str);
+
+/*-------------------------------------------------------------------------
+ * tests
+ *-------------------------------------------------------------------------
+ */
+
+#define FNAME0     "test0.h5"
+#define FNAME0OUT  "test0.out.h5"
+#define FNAME1     "test1.h5"
+#define FNAME1OUT  "test1.out.h5"
+#define FNAME2     "test2.h5"
+#define FNAME2OUT  "test2.out.h5"
+#define FNAME3     "test3.h5"
+#define FNAME3OUT  "test3.out.h5"
+#define FNAME4     "test4.h5"
+#define FNAME4OUT  "test4.out.h5"
+#define FNAME5     "test5.h5"
+#define FNAME5OUT  "test5.out.h5"
+#define FNAME6     "test6.h5"
+#define FNAME7     "test_szip.h5"
+#define FNAME8     "test_deflate.h5"
+#define FNAME9     "test_shuffle.h5"
+#define FNAME10    "test_fletcher32.h5"
+#define FNAME11    "test_all.h5"
+#define FNAME7OUT     "test_szip.out.h5"
+#define FNAME8OUT     "test_deflate.out.h5"
+#define FNAME9OUT     "test_shuffle.out.h5"
+#define FNAME10OUT    "test_fletcher32.out.h5"
+#define FNAME11OUT    "test_all.out.h5"
+
+int make_testfiles(void);
+
+int write_dset( hid_t loc_id,
+                int rank,
+                hsize_t *dims,
+                const char *dset_name,
+                hid_t type_id,
+                void *buf );
+int write_attr(hid_t loc_id,
+               int rank,
+               hsize_t *dims,
+               const char *attr_name,
+               hid_t type_id,
+               void *buf);
+void write_attr_in(hid_t loc_id,
+                   const char* dset_name, /* for saving reference to dataset*/
+                   hid_t fid, /* for reference create */
+                   int make_diffs /* flag to modify data buffers */);
+void write_dset_in(hid_t loc_id,
+                   const char* dset_name, /* for saving reference to dataset*/
+                   hid_t file_id,
+                   int make_diffs /* flag to modify data buffers */);
+
+
+
+/*-------------------------------------------------------------------------
+ * tests utils
+ *-------------------------------------------------------------------------
+ */
+int make_dset(hid_t loc_id,
+              const char *name,
+              hid_t sid,
+              hid_t dcpl,
+              void *buf);
+
+int make_attr(hid_t loc_id,
+               int rank,
+               hsize_t *dims,
+               const char *attr_name,
+               hid_t type_id,
+               void *buf);
+
+
+
+
+#endif  /* H5REPACK_H__ */

Added: packages/hdf5/branches/upstream/current/tools/h5repack/h5repack.sh.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/h5repack.sh.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/h5repack.sh.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,366 @@
+#! /bin/sh
+#
+# 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.
+#
+# Tests for the h5repack tool
+
+USE_FILTER_SZIP="@USE_FILTER_SZIP@"
+USE_FILTER_DEFLATE="@USE_FILTER_DEFLATE@"
+USE_FILTER_SHUFFLE="@USE_FILTER_SHUFFLE@"
+USE_FILTER_FLETCHER32="@USE_FILTER_FLETCHER32@"
+
+
+H5REPACK=h5repack               # The tool name
+H5REPACK_BIN=`pwd`/$H5REPACK    # The path of the tool binary
+
+H5DIFF=../h5diff/h5diff         # The h5diff tool name 
+H5DIFF_BIN=`pwd`/$H5DIFF        # The path of the h5diff  tool binary
+
+H5DETECTSZIP=testh5repack_detect_szip               # The tool name
+H5DETECTSZIP_BIN=`pwd`/$H5DETECTSZIP    # The path of the tool binary
+
+nerrors=0
+verbose=yes
+
+# The build (current) directory might be different than the source directory.
+#
+if test -z "$srcdir"; then
+   srcdir=.
+fi
+
+test -d ../testfiles || mkdir ../testfiles
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Testing".
+#
+TESTING() {
+   SPACES="                                                               "
+   echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
+}
+
+# Print a line-line message left justified in a field of 70 characters
+# beginning with the word "Verifying".
+#
+VERIFY() {
+ SPACES="                                                               "
+ echo "Testing h5diff output $* $SPACES" | cut -c1-70 | tr -d '\012'
+}
+
+# Print a message that a test has been skipped (because a required filter
+# was unavailable)
+SKIP() {
+    TESTING $H5REPACK $@
+    echo " -SKIP-"
+}
+
+# Call the h5diff tool
+#
+DIFFTEST() 
+{
+    VERIFY  $@
+    if [ "`uname -s`" = "TFLOPS O/S" ]; then
+     $RUNSERIAL $H5DIFF_BIN $@ -q
+    else
+     $RUNSERIAL $H5DIFF_BIN "$@" -q
+    fi
+    RET=$?
+    if [ $RET != 0 ] ; then
+         echo "*FAILED*"
+         nerrors="`expr $nerrors + 1`"
+    else
+         echo " PASSED"
+    fi
+        
+}
+          
+# Call h5repack
+#
+TOOLTEST() 
+{
+    # Run test.
+    # Tflops interprets "$@" as "" when no parameter is given (e.g., the
+    # case of missing file name).  Changed it to use $@ till Tflops fixes it.
+    TESTING $H5REPACK $@
+
+    infile=$srcdir/../testfiles/$1
+    outfile=out.$1
+    shift
+    if [ "`uname -s`" = "TFLOPS O/S" ]; then
+     $RUNSERIAL $H5REPACK_BIN -i $infile -o $outfile $@
+    else
+     $RUNSERIAL $H5REPACK_BIN -i $infile -o $outfile "$@"
+    fi
+
+    RET=$?
+    if [ $RET != 0 ] ; then
+     echo "*FAILED*"
+     nerrors="`expr $nerrors + 1`"
+    else
+     echo " PASSED"
+     DIFFTEST $infile $outfile
+    fi
+    rm -f $outfile
+}
+
+#
+# The tests
+# We use the files generated by h5repacktst
+# Each run generates "<file>.out.h5" and the tool h5diff is used to
+# compare the input and output files
+#
+# the tests are the same as the program h5repacktst, but run from the CLI 
+#
+
+# See which filters are usable (and skip tests for filters we
+# don't have).  Do this by searching H5pubconf.h to see which
+# filters are defined.
+
+# detect whether the encoder is present. 
+USE_FILTER_SZIP_ENCODER="no";
+if test $USE_FILTER_SZIP = "yes"; then
+USE_FILTER_SZIP_ENCODER=`$RUNSERIAL $H5DETECTSZIP_BIN`
+fi
+
+# copy files (these files have no filters; test2.h5 has copied references that h5diff detects)
+TOOLTEST test0.h5
+TOOLTEST test1.h5
+TOOLTEST test3.h5
+TOOLTEST test4.h5
+TOOLTEST test5.h5
+
+# use test4.h5 to write some filters  (this file has  no filters)
+
+# gzip with individual object
+arg="test4.h5 -f dset1:GZIP=1  -l dset1:CHUNK=20x10"
+if test  $USE_FILTER_DEFLATE != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+  
+# gzip for all 
+arg="test4.h5 -f GZIP=1"
+if test  $USE_FILTER_DEFLATE != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+
+# szip with individual object
+arg="test4.h5 -f dset2:SZIP=8,EC  -l dset2:CHUNK=20x10"
+if test $USE_FILTER_SZIP_ENCODER != "yes" -o $USE_FILTER_SZIP != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg 
+fi
+
+# szip for all
+arg="test4.h5 -f SZIP=8,NN"
+if test $USE_FILTER_SZIP_ENCODER != "yes" -o $USE_FILTER_SZIP != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg 
+fi
+
+# shuffle with individual object
+arg="test4.h5 -f dset2:SHUF  -l dset2:CHUNK=20x10"
+if test $USE_FILTER_SHUFFLE != "yes"  ; then
+ SKIP $arg
+else
+ TOOLTEST $arg 
+fi
+  
+
+# shuffle for all
+arg="test4.h5 -f SHUF"
+if test $USE_FILTER_SHUFFLE != "yes"  ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+  
+# fletcher32  with individual object
+arg="test4.h5 -f dset2:FLET  -l dset2:CHUNK=20x10"
+if test $USE_FILTER_FLETCHER32 != "yes"  ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+
+# fletcher32 for all
+arg="test4.h5 -f FLET"
+if test $USE_FILTER_FLETCHER32 != "yes"  ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+
+# all filters
+arg="test4.h5 -f dset2:SHUF -f dset2:FLET -f dset2:SZIP=8,NN -f dset2:GZIP=1 -l dset2:CHUNK=20x10"
+if test $USE_FILTER_SZIP_ENCODER != "yes" -o $USE_FILTER_SZIP != "yes" -o $USE_FILTER_SHUFFLE != "yes" -o $USE_FILTER_FLETCHER32 != "yes" -o $USE_FILTER_DEFLATE != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+  
+###########################################################
+# the following tests assume the input files have filters
+###########################################################
+
+# szip copy
+arg="test_szip.h5"
+if test $USE_FILTER_SZIP_ENCODER != "yes" -o $USE_FILTER_SZIP != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+  
+# szip remove
+arg="test_szip.h5 -f dset_szip:NONE"
+if test $USE_FILTER_SZIP_ENCODER != "yes" -o $USE_FILTER_SZIP != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+  
+# deflate copy
+arg="test_deflate.h5"
+if test $USE_FILTER_DEFLATE != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+
+# deflate remove
+arg="test_deflate.h5 -f dset_deflate:NONE"
+if test $USE_FILTER_DEFLATE != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+    
+# shuffle copy
+arg="test_shuffle.h5"
+if test $USE_FILTER_SHUFFLE != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+
+# shuffle remove
+arg="test_shuffle.h5 -f dset_shuffle:NONE"
+if test $USE_FILTER_SHUFFLE != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+
+# fletcher32 copy
+arg="test_fletcher32.h5"
+if test $USE_FILTER_FLETCHER32 != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+
+# fletcher32 remove
+arg="test_fletcher32.h5 -f dset_fletcher32:NONE"
+if test $USE_FILTER_FLETCHER32 != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi        
+
+# remove all  filters
+arg="test_all.h5 -f NONE"
+if test $USE_FILTER_FLETCHER32 != "yes" -o $USE_FILTER_DEFLATE != "yes" -o $USE_FILTER_SZIP != "yes" -o $USE_FILTER_SZIP_ENCODER != "yes" -o $USE_FILTER_SHUFFLE != "yes"  ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+
+#filter conversions
+
+arg="test_deflate.h5 -f dset_deflate:SZIP=8,NN"
+if test $USE_FILTER_SZIP_ENCODER != "yes" -o $USE_FILTER_SZIP != "yes" -o $USE_FILTER_DEFLATE != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg 
+fi
+
+arg="test_szip.h5 -f dset_szip:GZIP=1"
+if test $USE_FILTER_SZIP != "yes" -o $USE_FILTER_SZIP_ENCODER != "yes"  -o $USE_FILTER_DEFLATE != "yes" ; then
+ SKIP $arg
+else
+ TOOLTEST $arg 
+fi
+
+
+#limit
+arg="test4.h5 -f GZIP=1 -m 1024"
+if test $USE_FILTER_DEFLATE != "yes"  ; then
+ SKIP $arg
+else
+ TOOLTEST $arg
+fi
+
+#file
+arg="test4.h5 -e ../testfiles/h5repack_info.txt"
+if test $USE_FILTER_DEFLATE != "yes" ; then
+ SKIP $arg 
+else
+ TOOLTEST $arg 
+fi
+
+
+#########################################################
+# layout options (these files have no filters)
+#########################################################
+
+TOOLTEST test4.h5 -l dset2:CHUNK=20x10
+TOOLTEST test4.h5 -l CHUNK=20x10
+TOOLTEST test4.h5 -l dset2:CONTI
+TOOLTEST test4.h5 -l CONTI
+TOOLTEST test4.h5 -l dset2:COMPA
+TOOLTEST test4.h5 -l COMPA
+
+
+################################################################
+# layout conversions (file has no filters)
+###############################################################
+
+arg1="test4.h5 -l dset_compact:CONTI"
+arg2="test4.h5 -l dset_compact:CHUNK=2x5"
+arg3="test4.h5 -l dset_compact:COMPA"
+arg4="test4.h5 -l dset_contiguous:COMPA"
+arg5="test4.h5 -l dset_contiguous:CHUNK=3x6"
+arg6="test4.h5 -l dset_contiguous:CONTI"
+arg7="test4.h5 -l dset_chunk:COMPA"
+arg8="test4.h5 -l dset_chunk:CONTI"
+arg9="test4.h5 -l dset_chunk:CHUNK=18x13"
+TOOLTEST $arg1
+TOOLTEST $arg2
+TOOLTEST $arg3
+TOOLTEST $arg4
+TOOLTEST $arg5
+TOOLTEST $arg6
+TOOLTEST $arg7
+TOOLTEST $arg8
+TOOLTEST $arg9
+
+
+if test $nerrors -eq 0 ; then
+   echo "All $H5REPACK tests passed."
+fi
+
+exit $nerrors


Property changes on: packages/hdf5/branches/upstream/current/tools/h5repack/h5repack.sh.in
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_copy.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_copy.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_copy.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,716 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include "H5private.h"
+#include "h5repack.h"
+
+#if 0
+#define PRINT_DEBUG
+#endif
+
+/*-------------------------------------------------------------------------
+ * Function: print_obj
+ *
+ * Purpose: print name and filters of an object
+ *
+ *-------------------------------------------------------------------------
+ */
+static void print_obj(hid_t dcpl_id, char *name)
+{
+ char         str[255];
+#if defined (PRINT_DEBUG )
+ char         temp[255];
+#endif
+ int          nfilters;       /* number of filters */
+ unsigned     filt_flags;     /* filter flags */
+ H5Z_filter_t filtn;          /* filter identification number */
+ unsigned     cd_values[20];  /* filter client data values */
+ size_t       cd_nelmts;      /* filter client number of values */
+ char         f_name[256];    /* filter name */
+ int          i;
+
+ strcpy(str,"\0");
+
+ /* get information about input filters */
+ if ((nfilters = H5Pget_nfilters(dcpl_id))<0)
+  return;
+
+ for ( i=0; i<nfilters; i++)
+ {
+  cd_nelmts = NELMTS(cd_values);
+  filtn = H5Pget_filter(dcpl_id,
+   (unsigned)i,
+   &filt_flags,
+   &cd_nelmts,
+   cd_values,
+   sizeof(f_name),
+   f_name);
+  switch (filtn)
+  {
+  default:
+   break;
+  case H5Z_FILTER_DEFLATE:
+   strcat(str,"GZIP ");
+
+#if defined (PRINT_DEBUG)
+   {
+    unsigned level=cd_values[0];
+    sprintf(temp,"(%d)",level);
+    strcat(str,temp);
+   }
+#endif
+
+   break;
+  case H5Z_FILTER_SZIP:
+   strcat(str,"SZIP ");
+
+#if defined (PRINT_DEBUG)
+   {
+    unsigned options_mask=cd_values[0]; /* from dcpl, not filt*/
+    unsigned ppb=cd_values[1];
+    sprintf(temp,"(%d,",ppb);
+    strcat(str,temp);
+    if (options_mask & H5_SZIP_EC_OPTION_MASK)
+     strcpy(temp,"EC) ");
+    else if (options_mask & H5_SZIP_NN_OPTION_MASK)
+     strcpy(temp,"NN) ");
+   }
+   strcat(str,temp);
+
+#endif
+
+   break;
+  case H5Z_FILTER_SHUFFLE:
+   strcat(str,"SHUF ");
+   break;
+  case H5Z_FILTER_FLETCHER32:
+   strcat(str,"FLET ");
+   break;
+  } /* switch */
+ }/*i*/
+
+ printf(" %-10s %s %s\n", "dataset",str,name );
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: copy_objects
+ *
+ * Purpose: duplicate all HDF5 objects in the file
+ *
+ * Return: 0, ok, -1 no
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October, 23, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int copy_objects(const char* fnamein,
+                 const char* fnameout,
+                 pack_opt_t *options)
+{
+ hid_t         fidin;
+ hid_t         fidout=(-1);
+ trav_table_t  *travt=NULL;
+
+/*-------------------------------------------------------------------------
+ * open the files
+ *-------------------------------------------------------------------------
+ */
+ if ((fidin=H5Fopen(fnamein,H5F_ACC_RDONLY,H5P_DEFAULT))<0 ){
+  printf("h5repack: <%s>: %s\n", fnamein, H5FOPENERROR );
+  goto out;
+ }
+ if ((fidout=H5Fcreate(fnameout,H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0 ){
+  printf("h5repack: <%s>: Could not create file\n", fnameout );
+  goto out;
+ }
+
+ if (options->verbose)
+  printf("Making file <%s>...\n",fnameout);
+
+ /* init table */
+ trav_table_init(&travt);
+
+ /* get the list of objects in the file */
+ if (h5trav_gettable(fidin,travt)<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * do the copy
+ *-------------------------------------------------------------------------
+ */
+ if(do_copy_objects(fidin,fidout,travt,options)<0) {
+  printf("h5repack: <%s>: Could not copy data to: %s\n", fnamein, fnameout);
+  goto out;
+ }
+
+/*-------------------------------------------------------------------------
+ * do the copy of referenced objects
+ * and create hard links
+ *-------------------------------------------------------------------------
+ */
+ if(do_copy_refobjs(fidin,fidout,travt,options)<0) {
+  printf("h5repack: <%s>: Could not copy data to: %s\n", fnamein, fnameout);
+  goto out;
+ }
+
+ /* free table */
+ trav_table_free(travt);
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+
+ H5Fclose(fidin);
+ H5Fclose(fidout);
+ return 0;
+
+/*-------------------------------------------------------------------------
+ * out
+ *-------------------------------------------------------------------------
+ */
+
+out:
+ H5E_BEGIN_TRY {
+  H5Fclose(fidin);
+  H5Fclose(fidout);
+ } H5E_END_TRY;
+ if (travt)
+  trav_table_free(travt);
+
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: do_copy_objects
+ *
+ * Purpose: duplicate all HDF5 objects in the file
+ *
+ * Return: 0, ok, -1 no
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October, 23, 2003
+	*   Modified: December, 03, 2004 - added a check for H5Dcreate; if the dataset
+	*    cannot be created with the requested filter, use the input one
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int do_copy_objects(hid_t fidin,
+                    hid_t fidout,
+                    trav_table_t *travt,
+                    pack_opt_t *options) /* repack options */
+{
+ hid_t     grp_in=(-1);       /* group ID */
+ hid_t     grp_out=(-1);      /* group ID */
+ hid_t     dset_in=(-1);      /* read dataset ID */
+ hid_t     dset_out=(-1);     /* write dataset ID */
+ hid_t     type_in=(-1);      /* named type ID */
+ hid_t     type_out=(-1);     /* named type ID */
+ hid_t     dcpl_id=(-1);      /* dataset creation property list ID */
+ hid_t     dcpl_out=(-1);     /* dataset creation property list ID */
+ hid_t     space_id=(-1);     /* space ID */
+ hid_t     ftype_id=(-1);     /* file data type ID */
+ hid_t     mtype_id=(-1);     /* memory data type ID */
+ size_t    msize;        /* memory size of memory type */
+ void      *buf=NULL;    /* data buffer */
+ hsize_t   nelmts;       /* number of elements in dataset */
+ int       rank;         /* rank of dataset */
+ hsize_t   dims[H5S_MAX_RANK];/* dimensions of dataset */
+ hsize_t   dsize_in;     /* input dataset size before filter */
+ int       next;         /* external files */
+ int       i, j;
+
+/*-------------------------------------------------------------------------
+ * copy the suppplied object list
+ *-------------------------------------------------------------------------
+ */
+
+ for ( i = 0; i < travt->nobjs; i++)
+ {
+
+  buf=NULL;
+  switch ( travt->objs[i].type )
+  {
+/*-------------------------------------------------------------------------
+ * H5G_GROUP
+ *-------------------------------------------------------------------------
+ */
+  case H5G_GROUP:
+   if (options->verbose)
+    printf(" %-10s %s\n", "group",travt->objs[i].name );
+
+   if ((grp_out=H5Gcreate(fidout,travt->objs[i].name, 0))<0)
+    goto error;
+
+   if((grp_in = H5Gopen (fidin,travt->objs[i].name))<0)
+    goto error;
+
+   /*-------------------------------------------------------------------------
+    * copy attrs
+    *-------------------------------------------------------------------------
+    */
+   if (copy_attr(grp_in,grp_out,options)<0)
+    goto error;
+
+   if (H5Gclose(grp_out)<0)
+    goto error;
+   if (H5Gclose(grp_in)<0)
+    goto error;
+
+
+   break;
+
+/*-------------------------------------------------------------------------
+ * H5G_DATASET
+ *-------------------------------------------------------------------------
+ */
+  case H5G_DATASET:
+
+   if ((dset_in=H5Dopen(fidin,travt->objs[i].name))<0)
+    goto error;
+   if ((space_id=H5Dget_space(dset_in))<0)
+    goto error;
+   if ((ftype_id=H5Dget_type (dset_in))<0)
+    goto error;
+   if ((dcpl_id=H5Dget_create_plist(dset_in))<0)
+    goto error;
+			if ((dcpl_out = H5Pcopy (dcpl_id))<0)
+				goto error;
+   if ( (rank=H5Sget_simple_extent_ndims(space_id))<0)
+    goto error;
+   HDmemset(dims, 0, sizeof dims);
+   if ( H5Sget_simple_extent_dims(space_id,dims,NULL)<0)
+    goto error;
+   nelmts=1;
+   for (j=0; j<rank; j++)
+    nelmts*=dims[j];
+
+			if (options->verbose)
+				print_obj(dcpl_id,travt->objs[i].name );
+
+   if ((mtype_id=h5tools_get_native_type(ftype_id))<0)
+    goto error;
+
+   if ((msize=H5Tget_size(mtype_id))==0)
+    goto error;
+
+/*-------------------------------------------------------------------------
+ * check for external files
+ *-------------------------------------------------------------------------
+ */
+   if ((next=H5Pget_external_count (dcpl_id))<0)
+    goto error;
+
+   if (next) {
+    fprintf(stderr,"Warning: <%s> has external files, ignoring read...\n",travt->objs[i].name );
+   }
+
+/*-------------------------------------------------------------------------
+ * check if the dataset creation property list has filters that
+ * are not registered in the current configuration
+ * 1) the external filters GZIP and SZIP might not be available
+ * 2) the internal filters might be turned off
+ *-------------------------------------------------------------------------
+ */
+   if (next==0 && h5tools_canreadf((travt->objs[i].name),dcpl_id)==1)
+   {
+
+/*-------------------------------------------------------------------------
+ * references are a special case
+ * we cannot just copy the buffers, but instead we recreate the reference
+ * in a second traversal of the output file
+ *-------------------------------------------------------------------------
+ */
+   if ( (H5T_REFERENCE!=H5Tget_class(mtype_id)))
+   {
+
+    /* get the storage size of the input dataset */
+    dsize_in=H5Dget_storage_size(dset_in);
+
+  /*-------------------------------------------------------------------------
+   * read to memory
+   *-------------------------------------------------------------------------
+   */
+    if (nelmts)
+    {
+     buf=(void *) HDmalloc((unsigned)(nelmts*msize));
+     if ( buf==NULL){
+      printf( "cannot read into memory\n" );
+      goto error;
+     }
+     if (H5Dread(dset_in,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0)
+      goto error;
+
+    /*-------------------------------------------------------------------------
+     * apply the filter
+     *-------------------------------------------------------------------------
+     */
+     if (apply_filters(travt->objs[i].name,rank,dims,dcpl_out,mtype_id,options)<0)
+      goto error;
+
+    }/*nelmts*/
+
+    /*-------------------------------------------------------------------------
+     * create;
+					* disable error checking in case the dataset cannot be created with the
+					* modified dcpl; in that case use the original instead
+     *-------------------------------------------------------------------------
+     */
+
+				H5E_BEGIN_TRY {
+					 dset_out=H5Dcreate(fidout,travt->objs[i].name,mtype_id,space_id,dcpl_out);
+				} H5E_END_TRY;
+
+				if (dset_out==FAIL)
+				{
+     if ((dset_out=H5Dcreate(fidout,travt->objs[i].name,mtype_id,space_id,dcpl_id))<0)
+						goto error;
+
+					if (options->verbose)
+						printf("Warning: Could not apply the filter to <%s>\n", travt->objs[i].name);
+				}
+
+				/*-------------------------------------------------------------------------
+     * write dataset
+     *-------------------------------------------------------------------------
+     */
+
+    if (dsize_in && nelmts) {
+     if (H5Dwrite(dset_out,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0)
+      goto error;
+    }
+    /*-------------------------------------------------------------------------
+     * copy attrs
+     *-------------------------------------------------------------------------
+     */
+    if (copy_attr(dset_in,dset_out,options)<0)
+     goto error;
+
+    /*close */
+    if (H5Dclose(dset_out)<0)
+     goto error;
+
+    if (buf)
+     free(buf);
+
+   }/*H5T_STD_REF_OBJ*/
+   }/*can_read*/
+
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+   if (H5Tclose(ftype_id)<0)
+    goto error;
+   if (H5Tclose(mtype_id)<0)
+    goto error;
+   if (H5Pclose(dcpl_id)<0)
+    goto error;
+			if (H5Pclose(dcpl_out)<0)
+    goto error;
+   if (H5Sclose(space_id)<0)
+    goto error;
+   if (H5Dclose(dset_in)<0)
+    goto error;
+
+   break;
+
+/*-------------------------------------------------------------------------
+ * H5G_TYPE
+ *-------------------------------------------------------------------------
+ */
+  case H5G_TYPE:
+
+   if ((type_in = H5Topen (fidin,travt->objs[i].name))<0)
+    goto error;
+
+   if ((type_out = H5Tcopy(type_in))<0)
+    goto error;
+
+   if ((H5Tcommit(fidout,travt->objs[i].name,type_out))<0)
+    goto error;
+
+/*-------------------------------------------------------------------------
+ * copy attrs
+ *-------------------------------------------------------------------------
+ */
+   if (copy_attr(type_in,type_out,options)<0)
+    goto error;
+
+   if (H5Tclose(type_in)<0)
+    goto error;
+   if (H5Tclose(type_out)<0)
+    goto error;
+
+   if (options->verbose)
+    printf(" %-10s %s\n","datatype",travt->objs[i].name );
+
+   break;
+
+
+/*-------------------------------------------------------------------------
+ * H5G_LINK
+ *-------------------------------------------------------------------------
+ */
+
+  case H5G_LINK:
+   {
+    H5G_stat_t  statbuf;
+    char        *targbuf=NULL;
+
+    if (H5Gget_objinfo(fidin,travt->objs[i].name,FALSE,&statbuf)<0)
+     goto error;
+
+    targbuf = malloc(statbuf.linklen);
+
+    if (H5Gget_linkval(fidin,travt->objs[i].name,statbuf.linklen,targbuf)<0)
+     goto error;
+
+    if (H5Glink(fidout,
+     H5G_LINK_SOFT,
+     targbuf,        /* current name of object */
+     travt->objs[i].name   /* new name of object */
+     )<0)
+     goto error;
+
+    free(targbuf);
+
+    if (options->verbose)
+     printf(" %-10s %s\n","link",travt->objs[i].name );
+
+   }
+   break;
+
+  default:
+   if (options->verbose)
+    printf(" %-10s %s\n","User defined object",travt->objs[i].name);
+   break;
+  }
+ }
+
+/*-------------------------------------------------------------------------
+ * the root is a special case, we get an ID for the root group
+ * and copy its attributes using that ID
+ * it must be done last, because the attributes might contain references to
+ * objects in the object list
+ *-------------------------------------------------------------------------
+ */
+
+ if ((grp_out = H5Gopen(fidout,"/"))<0)
+  goto error;
+
+ if ((grp_in  = H5Gopen(fidin,"/"))<0)
+  goto error;
+
+ if (copy_attr(grp_in,grp_out,options)<0)
+  goto error;
+
+ if (H5Gclose(grp_out)<0)
+  goto error;
+ if (H5Gclose(grp_in)<0)
+  goto error;
+
+ return 0;
+
+error:
+ H5E_BEGIN_TRY {
+  H5Gclose(grp_in);
+  H5Gclose(grp_out);
+  H5Pclose(dcpl_id);
+  H5Sclose(space_id);
+  H5Dclose(dset_in);
+  H5Dclose(dset_out);
+  H5Tclose(ftype_id);
+  H5Tclose(mtype_id);
+  H5Tclose(type_in);
+  H5Tclose(type_out);
+  if (buf)
+   free(buf);
+ } H5E_END_TRY;
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: copy_attr
+ *
+ * Purpose: copy attributes located in LOC_IN, which is obtained either from
+ * loc_id = H5Gopen( fid, name);
+ * loc_id = H5Dopen( fid, name);
+ * loc_id = H5Topen( fid, name);
+ *
+ * Return: 0, ok, -1 no
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October, 28, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int copy_attr(hid_t loc_in,
+              hid_t loc_out,
+              pack_opt_t *options
+              )
+{
+ hid_t      attr_id=-1;      /* attr ID */
+ hid_t      attr_out=-1;     /* attr ID */
+ hid_t      space_id=-1;     /* space ID */
+ hid_t      ftype_id=-1;     /* file data type ID */
+ hid_t      mtype_id=-1;     /* memory data type ID */
+ size_t     msize;        /* memory size of type */
+ void       *buf=NULL;         /* data buffer */
+ hsize_t    nelmts;       /* number of elements in dataset */
+ int        rank;         /* rank of dataset */
+ hsize_t    dims[H5S_MAX_RANK];/* dimensions of dataset */
+ char       name[255];
+ int        n, j;
+ unsigned   u;
+
+ if ((n = H5Aget_num_attrs(loc_in))<0)
+  goto error;
+
+ for ( u = 0; u < (unsigned)n; u++)
+ {
+
+  /* set data buffer to NULL each iteration
+     we might not use it in the case of references
+   */
+   buf=NULL;
+/*-------------------------------------------------------------------------
+ * open
+ *-------------------------------------------------------------------------
+ */
+  /* open attribute */
+  if ((attr_id = H5Aopen_idx(loc_in, u))<0)
+   goto error;
+
+  /* get name */
+  if (H5Aget_name( attr_id, 255, name )<0)
+   goto error;
+
+  /* get the file datatype  */
+  if ((ftype_id = H5Aget_type( attr_id )) < 0 )
+   goto error;
+
+  /* get the dataspace handle  */
+  if ((space_id = H5Aget_space( attr_id )) < 0 )
+   goto error;
+
+  /* get dimensions  */
+  if ( (rank = H5Sget_simple_extent_dims(space_id, dims, NULL)) < 0 )
+   goto error;
+
+  nelmts=1;
+  for (j=0; j<rank; j++)
+   nelmts*=dims[j];
+
+  if ((mtype_id=h5tools_get_native_type(ftype_id))<0)
+   goto error;
+
+  if ((msize=H5Tget_size(mtype_id))==0)
+   goto error;
+
+/*-------------------------------------------------------------------------
+ * object references are a special case
+ * we cannot just copy the buffers, but instead we recreate the reference
+ * this is done on a second sweep of the file that just copies
+ * the referenced objects
+ *-------------------------------------------------------------------------
+ */
+  if ( ! H5Tequal(mtype_id, H5T_STD_REF_OBJ))
+  {
+
+
+ /*-------------------------------------------------------------------------
+  * read to memory
+  *-------------------------------------------------------------------------
+  */
+
+   buf=(void *) HDmalloc((unsigned)(nelmts*msize));
+   if ( buf==NULL){
+    printf( "cannot read into memory\n" );
+    goto error;
+   }
+   if (H5Aread(attr_id,mtype_id,buf)<0)
+    goto error;
+
+   /*-------------------------------------------------------------------------
+    * copy
+    *-------------------------------------------------------------------------
+    */
+
+   if ((attr_out=H5Acreate(loc_out,name,ftype_id,space_id,H5P_DEFAULT))<0)
+    goto error;
+   if(H5Awrite(attr_out,mtype_id,buf)<0)
+    goto error;
+
+   /*close*/
+   if (H5Aclose(attr_out)<0)
+    goto error;
+
+
+   if (buf)
+    free(buf);
+
+
+  } /*H5T_STD_REF_OBJ*/
+
+
+  if (options->verbose)
+   printf("   %-13s %s\n", "attr", name);
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+
+  if (H5Tclose(ftype_id)<0) goto error;
+  if (H5Tclose(mtype_id)<0) goto error;
+  if (H5Sclose(space_id)<0) goto error;
+  if (H5Aclose(attr_id)<0) goto error;
+
+ } /* u */
+
+  return 0;
+
+error:
+ H5E_BEGIN_TRY {
+  H5Tclose(ftype_id);
+  H5Tclose(mtype_id);
+  H5Sclose(space_id);
+  H5Aclose(attr_id);
+  H5Aclose(attr_out);
+  if (buf)
+    free(buf);
+ } H5E_END_TRY;
+ return -1;
+}
+
+
+
+

Added: packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_filters.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_filters.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_filters.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,460 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "h5test.h"
+#include "h5repack.h"
+
+
+/*-------------------------------------------------------------------------
+ * Function: aux_find_obj
+ *
+ * Purpose: find the object name NAME (got from the traverse list)
+ *  in the repack options list
+ *
+ *-------------------------------------------------------------------------
+ */
+static
+int aux_find_obj(const char* name,          /* object name from traverse list */
+                 pack_opt_t *options,       /* repack options */
+																	pack_info_t *obj /*OUT*/)  /* info about object to filter */
+{
+ char *pdest;
+ int  result;
+	int  i;
+
+ for ( i=0; i<options->op_tbl->nelems; i++)
+ {
+  if (strcmp(options->op_tbl->objs[i].path,name)==0)
+		{
+			*obj =  options->op_tbl->objs[i];
+			return i;
+		}
+
+		pdest  = strstr(name,options->op_tbl->objs[i].path);
+		result = (int)(pdest - name);
+
+		/* found at position 1, meaning without '/' */
+		if( pdest != NULL && result==1 )
+		{
+			*obj =  options->op_tbl->objs[i];
+			return i;
+		}
+ }/*i*/
+
+ return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: aux_assign_obj
+ *
+ * Purpose: find the object name NAME (got from the traverse list)
+ *  in the repack options list; assign the filter information OBJ
+ *
+ * Return: 0 not found, 1 found
+ *
+ *-------------------------------------------------------------------------
+ */
+static
+int aux_assign_obj(const char* name,            /* object name from traverse list */
+                   pack_opt_t *options,         /* repack options */
+                   pack_info_t *obj /*OUT*/)    /* info about object to filter */
+{
+
+ int  idx, i;
+	pack_info_t tmp;
+
+	init_packobject(&tmp);
+
+	idx = aux_find_obj(name,options,&tmp);
+
+	/* name was on input */
+	if (idx>=0)
+	{
+
+		/* applying to all objects */
+  if (options->all_layout)
+		{
+   /* assign the global layout info to the OBJ info */
+   tmp.layout=options->layout_g;
+			switch (options->layout_g)
+			{
+			case H5D_CHUNKED:
+				tmp.chunk.rank=options->chunk_g.rank;
+				for ( i=0; i<tmp.chunk.rank; i++)
+					tmp.chunk.chunk_lengths[i]=options->chunk_g.chunk_lengths[i];
+				break;
+			default:
+				break;
+			}/*switch*/
+		}
+		else
+		{
+			tmp.layout = options->op_tbl->objs[idx].layout;
+			switch (tmp.layout)
+			{
+			case H5D_CHUNKED:
+				tmp.chunk.rank = options->op_tbl->objs[idx].chunk.rank;
+				for ( i=0; i<tmp.chunk.rank; i++)
+					tmp.chunk.chunk_lengths[i]=options->op_tbl->objs[idx].chunk.chunk_lengths[i];
+				break;
+			default:
+				break;
+			}/*switch*/
+
+		}
+
+		/* applying to all objects */
+		if (options->all_filter)
+		{
+			/* assign the global filter */
+			tmp.nfilters=1;
+			tmp.filter[0]=options->filter_g;
+		} /* if all */
+		else
+		{
+   tmp.nfilters=options->op_tbl->objs[idx].nfilters;
+			for ( i=0; i<tmp.nfilters; i++)
+			{
+    tmp.filter[i] = options->op_tbl->objs[idx].filter[i];
+			}
+		}
+
+
+	} /* if idx */
+
+
+ /* no input name */
+
+	else
+	{
+
+		if (options->all_filter)
+		{
+   /* assign the global filter */
+			tmp.nfilters=1;
+			tmp.filter[0]=options->filter_g;
+		}
+
+
+		if (options->all_layout)
+		{
+			/* assign the global layout info to the OBJ info */
+			tmp.layout=options->layout_g;
+			switch (options->layout_g)
+			{
+			case H5D_CHUNKED:
+				tmp.chunk.rank=options->chunk_g.rank;
+				for ( i=0; i<tmp.chunk.rank; i++)
+					tmp.chunk.chunk_lengths[i]=options->chunk_g.chunk_lengths[i];
+				break;
+			default:
+				break;
+			}/*switch*/
+
+		}
+
+
+	}
+
+ *obj = tmp;
+ return 1;
+
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: apply_filters
+ *
+ * Purpose: apply the filters in the object to the property list;
+ *  do extra checking in the case of SZIP; delete all filters in the case
+ *  of H5Z_FILTER_NONE present in the PACK_INFO_T filter array
+ *
+ * Return: 0 success, -1 an error occured
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: December 19, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+int apply_filters(const char* name,    /* object name from traverse list */
+                  int rank,            /* rank of dataset */
+                  hsize_t *dims,       /* dimensions of dataset */
+                  hid_t dcpl_id,       /* dataset creation property list */
+                  hid_t type_id,       /* dataset datatype */
+                  pack_opt_t *options) /* repack options */
+{
+	int          nfilters;       /* number of filters in DCPL */
+ unsigned     aggression;     /* the deflate level */
+ hsize_t      nelmts;         /* number of elements in dataset */
+ size_t       size;           /* size of datatype in bytes */
+ hsize_t      chsize[64];     /* chunk size in elements */
+ H5D_layout_t layout;
+ int          i;
+	pack_info_t  obj;
+
+ if (rank==0)
+  goto out;
+
+		/*-------------------------------------------------------------------------
+		* initialize the assigment object
+		*-------------------------------------------------------------------------
+ */
+	init_packobject(&obj);
+
+
+	/*-------------------------------------------------------------------------
+ * find options
+ *-------------------------------------------------------------------------
+ */
+ if (aux_assign_obj(name,options,&obj)==0)
+  return 0;
+
+
+ /* check for datasets too small */
+	if ((size=H5Tget_size(type_id))==0)
+		return 0;
+	nelmts=1;
+	for (i=0; i<rank; i++)
+		nelmts*=dims[i];
+	if (nelmts*size < options->threshold )
+	{
+		if (options->verbose)
+			printf("Warning: Filter not applied to <%s>. Dataset smaller than <%d> bytes\n",
+			name,(int)options->threshold);
+		return 0;
+	}
+
+ /* get information about input filters */
+ if ((nfilters = H5Pget_nfilters(dcpl_id))<0)
+  return -1;
+		/*-------------------------------------------------------------------------
+		* check if we have filters in the pipeline
+		* we want to replace them with the input filters
+		* only remove if we are inserting new ones
+		*-------------------------------------------------------------------------
+ */
+ if (nfilters && obj.nfilters ) {
+  if (H5Premove_filter(dcpl_id,H5Z_FILTER_ALL)<0)
+   return -1;
+ }
+
+
+ /*-------------------------------------------------------------------------
+		* check if there is an existent chunk
+  * read it only if there is not a requested layout
+		*-------------------------------------------------------------------------
+  */
+ if (obj.layout == -1 )
+ {
+  if ((layout = H5Pget_layout(dcpl_id))<0)
+   return -1;
+
+  if (layout==H5D_CHUNKED)
+  {
+   if ((rank = H5Pget_chunk(dcpl_id,NELMTS(chsize),chsize/*out*/))<0)
+    return -1;
+   obj.layout=H5D_CHUNKED;
+   obj.chunk.rank=rank;
+   for ( i=0; i<rank; i++)
+    obj.chunk.chunk_lengths[i] = chsize[i];
+  }
+ }
+
+
+	/*-------------------------------------------------------------------------
+ * the type of filter and additional parameter
+ * type can be one of the filters
+ * H5Z_FILTER_NONE       0,  uncompress if compressed
+ * H5Z_FILTER_DEFLATE	   1 , deflation like gzip
+ * H5Z_FILTER_SHUFFLE    2 , shuffle the data
+ * H5Z_FILTER_FLETCHER32 3 , fletcher32 checksum of EDC
+ * H5Z_FILTER_SZIP       4 , szip compression
+ *-------------------------------------------------------------------------
+ */
+
+	if (obj.nfilters)
+	{
+
+	/*-------------------------------------------------------------------------
+ * filters require CHUNK layout; if we do not have one define a default
+ *-------------------------------------------------------------------------
+		*/
+		if (obj.layout==-1)
+		{
+			obj.chunk.rank=rank;
+			for (i=0; i<rank; i++)
+				obj.chunk.chunk_lengths[i] = dims[i];
+		}
+
+		for ( i=0; i<obj.nfilters; i++)
+		{
+			switch (obj.filter[i].filtn)
+			{
+			default:
+				break;
+
+				/*-------------------------------------------------------------------------
+				* H5Z_FILTER_DEFLATE	   1 , deflation like gzip
+				*-------------------------------------------------------------------------
+				*/
+			case H5Z_FILTER_DEFLATE:
+				aggression=obj.filter[i].cd_values[0];
+				/* set up for deflated data */
+				if(H5Pset_chunk(dcpl_id, obj.chunk.rank, obj.chunk.chunk_lengths)<0)
+					return -1;
+				if(H5Pset_deflate(dcpl_id,aggression)<0)
+					return -1;
+				break;
+
+				/*-------------------------------------------------------------------------
+				* H5Z_FILTER_SZIP       4 , szip compression
+				*-------------------------------------------------------------------------
+				*/
+			case H5Z_FILTER_SZIP:
+				{
+					unsigned  options_mask;
+					unsigned  pixels_per_block;
+
+					pixels_per_block=obj.filter[i].cd_values[0];
+					if (obj.filter[i].szip_coding==0)
+						options_mask=H5_SZIP_NN_OPTION_MASK;
+					else
+						options_mask=H5_SZIP_EC_OPTION_MASK;
+
+					/* set up for szip data */
+					if(H5Pset_chunk(dcpl_id,obj.chunk.rank,obj.chunk.chunk_lengths)<0)
+						return -1;
+					if (H5Pset_szip(dcpl_id,options_mask,pixels_per_block)<0)
+						return -1;
+
+				}
+				break;
+
+				/*-------------------------------------------------------------------------
+				* H5Z_FILTER_SHUFFLE    2 , shuffle the data
+				*-------------------------------------------------------------------------
+				*/
+			case H5Z_FILTER_SHUFFLE:
+				if(H5Pset_chunk(dcpl_id, obj.chunk.rank, obj.chunk.chunk_lengths)<0)
+					return -1;
+				if (H5Pset_shuffle(dcpl_id)<0)
+					return -1;
+				break;
+
+				/*-------------------------------------------------------------------------
+				* H5Z_FILTER_FLETCHER32 3 , fletcher32 checksum of EDC
+				*-------------------------------------------------------------------------
+				*/
+			case H5Z_FILTER_FLETCHER32:
+				if(H5Pset_chunk(dcpl_id, obj.chunk.rank, obj.chunk.chunk_lengths)<0)
+					return -1;
+				if (H5Pset_fletcher32(dcpl_id)<0)
+					return -1;
+				break;
+			} /* switch */
+		}/*i*/
+
+	}
+	/*obj.nfilters*/
+
+	/*-------------------------------------------------------------------------
+ * layout
+ *-------------------------------------------------------------------------
+ */
+
+	if (obj.layout>=0)
+	{
+		/* a layout was defined */
+		if (H5Pset_layout(dcpl_id, obj.layout)<0)
+			return -1;
+
+		if (H5D_CHUNKED==obj.layout) { /* set up chunk */
+			if(H5Pset_chunk(dcpl_id, obj.chunk.rank, obj.chunk.chunk_lengths)<0)
+				return -1;
+		}
+		else if (H5D_COMPACT==obj.layout) {
+			if (H5Pset_alloc_time(dcpl_id, H5D_ALLOC_TIME_EARLY)<0)
+				return -1;
+		}
+
+	}
+
+ return 0;
+
+out:
+ if (options->verbose)
+  printf("Warning: Filter could not be applied to <%s>\n",name);
+ return 0;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: print_filters
+ *
+ * Purpose: print the filters in DCPL
+ *
+ * Return: 0, ok, -1 no
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int print_filters(hid_t dcpl_id)
+{
+ int          nfilters;       /* number of filters */
+ unsigned     filt_flags;     /* filter flags */
+ H5Z_filter_t filtn;          /* filter identification number */
+ unsigned     cd_values[20];  /* filter client data values */
+ size_t       cd_nelmts;      /* filter client number of values */
+ size_t       cd_num;         /* filter client data counter */
+ char         f_name[256];    /* filter name */
+ char         s[64];          /* temporary string buffer */
+ int          i;
+
+ /* get information about filters */
+ if ((nfilters = H5Pget_nfilters(dcpl_id))<0)
+  return -1;
+
+ for (i=0; i<nfilters; i++)
+ {
+  cd_nelmts = NELMTS(cd_values);
+  filtn = H5Pget_filter(dcpl_id,
+   (unsigned)i,
+   &filt_flags,
+   &cd_nelmts,
+   cd_values,
+   sizeof(f_name),
+   f_name);
+
+  f_name[sizeof(f_name)-1] = '\0';
+  sprintf(s, "Filter-%d:", i);
+  printf("    %-10s %s-%u %s {", s,
+   f_name[0]?f_name:"method",
+   (unsigned)filtn,
+   filt_flags & H5Z_FLAG_OPTIONAL?"OPT":"");
+  for (cd_num=0; cd_num<cd_nelmts; cd_num++) {
+   printf("%s%u", cd_num?", ":"", cd_values[cd_num]);
+  }
+  printf("}\n");
+ }
+
+ return 0;
+}
+
+
+

Added: packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_list.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_list.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_list.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,214 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include "H5private.h"
+#include "h5repack.h"
+
+
+/*-------------------------------------------------------------------------
+ * Function: check_objects
+ *
+ * Purpose: locate all HDF5 objects in the file and compare with user
+ *  supplied list
+ *
+ * Return: 0, ok, -1 no
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September, 23, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+int check_objects(const char* fname,
+                  pack_opt_t *options)
+{
+ hid_t         fid;
+ int           i;
+ trav_table_t  *travt=NULL;
+
+/*-------------------------------------------------------------------------
+ * open the file
+ *-------------------------------------------------------------------------
+ */
+
+ /* disable out reporting */
+ H5E_BEGIN_TRY {
+
+ /* Open the files */
+ if ((fid=H5Fopen(fname,H5F_ACC_RDONLY,H5P_DEFAULT))<0 ){
+  printf("h5repack: <%s>: %s\n", fname, H5FOPENERROR );
+  exit(1);
+ }
+ /* enable out reporting */
+ } H5E_END_TRY;
+
+
+/*-------------------------------------------------------------------------
+ * get the list of objects in the file
+ *-------------------------------------------------------------------------
+ */
+
+ /* init table */
+ trav_table_init(&travt);
+
+ /* get the list of objects in the file */
+ if (h5trav_gettable(fid,travt)<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * compare with user supplied list
+ *-------------------------------------------------------------------------
+ */
+
+ if (options->verbose)
+ {
+  printf("Opening file <%s>. Searching for objects to modify...\n",fname);
+ }
+
+ for ( i = 0; i < options->op_tbl->nelems; i++)
+ {
+  char* name=options->op_tbl->objs[i].path;
+  if (options->verbose)
+   printf(" <%s>",name);
+
+  /* the input object names are present in the file and are valid */
+  if (h5trav_getindext(name,travt)<0)
+  {
+   printf("%sError: Could not find <%s> in file <%s>. Exiting...\n",
+    (options->verbose?"\n":""),name,fname);
+   goto out;
+  }
+  if (options->verbose)
+   printf("...Found\n");
+
+
+  /* check for extra filter conditions */
+  switch (options->op_tbl->objs[i].filter->filtn)
+  {
+
+   /* chunk size must be smaller than pixels per block */
+  case H5Z_FILTER_SZIP:
+   {
+    int     j;
+    int     csize=1;
+    int     ppb=options->op_tbl->objs[i].filter->cd_values[0];
+    hsize_t dims[H5S_MAX_RANK];
+    int     rank;
+    hid_t   did;
+    hid_t   sid;
+
+    if (options->op_tbl->objs[i].chunk.rank>0)
+    {
+     rank=options->op_tbl->objs[i].chunk.rank;
+     for (j=0; j<rank; j++)
+      csize*=(int)options->op_tbl->objs[i].chunk.chunk_lengths[j];
+    }
+    else
+    {
+     if ((did=H5Dopen(fid,travt->objs[i].name))<0)
+      goto out;
+     if ((sid=H5Dget_space(did))<0)
+      goto out;
+     if ( (rank=H5Sget_simple_extent_ndims(sid))<0)
+      goto out;
+     HDmemset(dims, 0, sizeof dims);
+     if ( H5Sget_simple_extent_dims(sid,dims,NULL)<0)
+      goto out;
+     for (j=0; j<rank; j++)
+      csize*=(int)dims[j];
+     if (H5Sclose(sid)<0)
+      goto out;
+     if (H5Dclose(did)<0)
+      goto out;
+    }
+
+    if (csize < ppb )
+    {
+     printf("Warning: SZIP settins, chunk size is smaller than pixels per block...Exiting\n");
+     goto out;
+    }
+
+
+   }
+   break;
+
+  }
+
+
+
+ } /* i */
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+ H5Fclose(fid);
+ trav_table_free(travt);
+ return 0;
+
+out:
+ H5Fclose(fid);
+ trav_table_free(travt);
+ return -1;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: print_objlist
+ *
+ * Purpose: print list of objects in file
+ *
+ * Return: void
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October 23, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+void print_objlist(const char *filename,
+                   int nobjects,
+                   trav_info_t *info )
+{
+ int i;
+
+ printf("File <%s>: # of entries = %d\n", filename, nobjects );
+ for ( i = 0; i < nobjects; i++)
+ {
+  switch ( info[i].type )
+  {
+  case H5G_GROUP:
+   printf(" %-10s %s\n", "group", info[i].name  );
+   break;
+  case H5G_DATASET:
+   printf(" %-10s %s\n", "dataset", info[i].name );
+   break;
+  case H5G_TYPE:
+   printf(" %-10s %s\n", "datatype", info[i].name );
+   break;
+  case H5G_LINK:
+   printf(" %-10s %s\n", "link", info[i].name );
+   break;
+  default:
+   printf(" %-10s %s\n", "User defined object", info[i].name );
+   break;
+  }
+ }
+
+}
+

Added: packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_main.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_main.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_main.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,189 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdlib.h>
+#include "h5repack.h"
+
+static void usage(void);
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ * Purpose: h5repack main program
+ *
+ * Return: 1, error, 0, no error
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ * Comments:
+ *
+ * Modifications: July 2004
+ *  Introduced the extra EC or NN option for SZIP
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+int main(int argc, char **argv)
+{
+ char          *infile  = NULL;
+ char          *outfile = NULL;
+ pack_opt_t    options;            /*the global options */
+ int           i, ret;
+
+ /* initialize options  */
+ h5repack_init (&options,0);
+
+ for ( i = 1; i < argc; i++)
+ {
+  if (strcmp(argv[i], "-h") == 0) {
+    usage();
+    exit(0);
+  }
+  if (strcmp(argv[i], "-i") == 0) {
+   infile = argv[++i];
+  }
+  else if (strcmp(argv[i], "-o") == 0) {
+   outfile = argv[++i];
+  }
+  else if (strcmp(argv[i], "-v") == 0) {
+   options.verbose = 1;
+  }
+  else if (strcmp(argv[i], "-f") == 0) {
+
+   /* add the -f filter option */
+   if (h5repack_addfilter(argv[i+1],&options)<0)
+    exit(1);
+
+   /* jump to next */
+   ++i;
+  }
+  else if (strcmp(argv[i], "-l") == 0) {
+
+   /* parse the -l layout option */
+   if (h5repack_addlayout(argv[i+1],&options)<0)
+    exit(1);
+
+   /* jump to next */
+   ++i;
+  }
+
+  else if (strcmp(argv[i], "-m") == 0) {
+   options.threshold = parse_number(argv[i+1]);
+   if ((int)options.threshold==-1) {
+    printf("Error: Invalid treshold size <%s>\n",argv[i+1]);
+    exit(1);
+   }
+   ++i;
+  }
+
+  else if (strcmp(argv[i], "-e") == 0) {
+   read_info(argv[++i],&options);
+  }
+
+  else if (argv[i][0] == '-') {
+   usage();
+   exit(1);
+  }
+ }
+
+ if (infile == NULL || outfile == NULL)
+ {
+  usage();
+  exit(1);
+ }
+
+ /* pack it */
+ ret=h5repack(infile,outfile,&options);
+
+ /* free tables */
+ h5repack_end(&options);
+
+ if (ret==-1)
+  return 1;
+ else
+  return 0;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: usage
+ *
+ * Purpose: print usage
+ *
+ * Return: void
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static
+void usage(void)
+{
+ printf("h5repack -i input -o output [-h] [-v] [-f 'filter'] [-l 'layout'][-m number][-e file] \n");
+ printf("\n");
+ printf("-i input          Input HDF5 File\n");
+ printf("-o output         Output HDF5 File\n");
+ printf("[-h]              Print usage message\n");
+ printf("[-v]              Verbose mode. Print output (list of objects, filters, warnings)\n");
+ printf("[-f 'filter']     Filter type: 'filter' is a string with the format\n");
+ printf("     <list of objects> : <name of filter> = <filter parameters>\n");
+ printf("     <list of objects> is a comma separated list of object names\n");
+ printf("       meaning apply compression only to those objects.\n");
+ printf("       if no object names are specified, the filter is applied to all objects\n");
+ printf("     <name of filter> can be:\n");
+ printf("       GZIP, to apply the HDF5 GZIP filter (GZIP compression)\n");
+ printf("       SZIP, to apply the HDF5 SZIP filter (SZIP compression)\n");
+ printf("       SHUF, to apply the HDF5 shuffle filter\n");
+ printf("       FLET, to apply the HDF5 checksum filter\n");
+ printf("       NONE, to remove the filter\n");
+ printf("     <filter parameters> is optional compression info\n");
+ printf("       SHUF (no parameter)\n");
+ printf("       FLET (no parameter)\n");
+ printf("       GZIP=<deflation level> from 1-9\n");
+ printf("       SZIP=<pixels per block,coding> (pixels per block is a even number in 2-32 and coding method is 'EC' or 'NN')\n");
+ printf("[-l 'layout']     Layout type. 'layout' is a string with the format\n");
+ printf("     <list of objects> : <layout type>\n");
+ printf("     <list of objects> is a comma separated list of object names,\n");
+ printf("       meaning that layout information is supplied for those objects.\n");
+ printf("       if no object names are specified, the layout is applied to all objects\n");
+ printf("     <layout type> can be:\n");
+ printf("       CHUNK, to apply chunking layout\n");
+ printf("       COMPA, to apply compact layout\n");
+ printf("       CONTI, to apply continuous layout\n");
+ printf("     <layout parameters> is present for the chunk case only\n");
+ printf("       it is the chunk size of each dimension:\n");
+ printf("       <dim_1 x dim_2 x ... dim_n>\n");
+ printf("\n");
+ printf("-e file           File with the -f and -l options (only filter and layout flags)\n");
+ printf("-m number         Do not apply the filter to objects which size in bytes is smaller than number.\n");
+ printf("                  If no size is specified a minimum of 1024 bytes is assumed.\n");
+ printf("\n");
+ printf("Examples of use:\n");
+ printf("\n");
+ printf("1) h5repack -i file1 -o file2 -f GZIP=1 -v\n");
+ printf("\n");
+ printf("   Applies GZIP compression to all objects in file1 and saves the output in file2\n");
+ printf("\n");
+ printf("2) h5repack -i file1 -o file2 -f dset1:SZIP=8,NN -v\n");
+ printf("\n");
+ printf("   Applies SZIP compression only to object 'dset1'\n");
+ printf("\n");
+ printf("3) h5repack -i file1 -o file2 -l dset1,dset2:CHUNK=20x10 -v\n");
+ printf("\n");
+ printf("   Applies chunked layout to objects 'dset1' and 'dset2'\n");
+ printf("\n");
+}
+
+

Added: packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_opttable.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_opttable.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_opttable.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,406 @@
+ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#include <stdlib.h>
+#include "h5repack.h"
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: init_packobject
+ *
+ * Purpose: initialize a pack_info_t structure
+ *
+ * Return: void
+ *
+ *-------------------------------------------------------------------------
+ */
+
+void init_packobject(pack_info_t *obj)
+{
+ int j, k;
+
+ strcpy(obj->path,"\0");
+ for ( j=0; j<H5_REPACK_MAX_NFILTERS; j++)
+ {
+  obj->filter[j].filtn        = -1;
+  obj->filter[j].szip_coding  = -1;
+  for ( k=0; k<CDVALUES; k++)
+   obj->filter[j].cd_values[k] = -1;
+ }
+ obj->chunk.rank = -1;
+ obj->refobj_id = -1;
+ obj->layout = H5D_LAYOUT_ERROR;
+ obj->nfilters = 0;
+
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: aux_tblinsert_filter
+ *
+ * Purpose: auxiliary function, inserts the filter in object OBJS[ I ]
+ *
+ * Return: void
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void aux_tblinsert_filter(pack_opttbl_t *table,
+                                 int I,
+                                 filter_info_t filt)
+{
+ if (table->objs[ I ].nfilters<H5_REPACK_MAX_NFILTERS)
+ {
+  table->objs[ I ].filter[ table->objs[ I ].nfilters++ ] = filt;
+ }
+ else
+ {
+  printf("Cannot insert the filter in this object.\
+   Maximum capacity exceeded\n");
+ }
+}
+
+/*-------------------------------------------------------------------------
+ * Function: aux_tblinsert_layout
+ *
+ * Purpose: auxiliary function, inserts the layout in object OBJS[ I ]
+ *
+ * Return: void
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void aux_tblinsert_layout(pack_opttbl_t *table,
+                                 int I,
+                                 pack_info_t *pack)
+{
+ int k;
+
+ table->objs[I].layout = pack->layout;
+ if (H5D_CHUNKED==pack->layout)
+ {
+ /* -2 means the NONE option, remove chunking
+  and set the layout to contiguous */
+  if (pack->chunk.rank==-2)
+  {
+   table->objs[I].layout = H5D_CONTIGUOUS;
+   table->objs[I].chunk.rank = -2;
+  }
+  /* otherwise set the chunking type */
+  else
+  {
+   table->objs[I].chunk.rank = pack->chunk.rank;
+   for (k = 0; k < pack->chunk.rank; k++)
+    table->objs[I].chunk.chunk_lengths[k] = pack->chunk.chunk_lengths[k];
+  }
+ }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: aux_inctable
+ *
+ * Purpose: auxiliary function, increases the size of the collection by N_OBJS
+ *
+ * Return: 0, ok, -1, fail
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static int aux_inctable(pack_opttbl_t *table, int n_objs )
+{
+ int i;
+
+ table->size += n_objs;
+ table->objs = (pack_info_t*)realloc(table->objs, table->size * sizeof(pack_info_t));
+ if (table->objs==NULL) {
+  printf("Error: not enough memory for options table\n");
+  return -1;
+ }
+ for (i = table->nelems; i < table->size; i++)
+ {
+  init_packobject(&table->objs[i]);
+ }
+ return 0;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: options_table_init
+ *
+ * Purpose: init options table
+ *
+ * Return: 0, ok, -1, fail
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int options_table_init( pack_opttbl_t **tbl )
+{
+ int i;
+ pack_opttbl_t* table = (pack_opttbl_t*) malloc(sizeof(pack_opttbl_t));
+ if (table==NULL) {
+  printf("Error: not enough memory for options table\n");
+  return -1;
+ }
+
+ table->size   = 30;
+ table->nelems = 0;
+ table->objs   = (pack_info_t*) malloc(table->size * sizeof(pack_info_t));
+ if (table->objs==NULL) {
+  printf("Error: not enough memory for options table\n");
+  return -1;
+ }
+
+ for ( i=0; i<table->size; i++)
+ {
+  init_packobject(&table->objs[i]);
+ }
+
+ *tbl = table;
+ return 0;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: options_table_free
+ *
+ * Purpose: free table memory
+ *
+ * Return: 0
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int options_table_free( pack_opttbl_t *table )
+{
+ free(table->objs);
+ free(table);
+ return 0;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: options_add_layout
+ *
+ * Purpose: add a layout option to the option list
+ *
+ * Return: 0, ok, -1, fail
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+int options_add_layout( obj_list_t *obj_list,
+                        int n_objs,
+                        pack_info_t *pack,
+                        pack_opttbl_t *table )
+{
+ int i, j, I, added=0, found=0;
+
+ /* increase the size of the collection by N_OBJS if necessary */
+ if (table->nelems+n_objs >= table->size)
+ {
+  if (aux_inctable(table,n_objs)<0)
+   return -1;
+ }
+
+ /* search if this object is already in the table; "path" is the key */
+ if (table->nelems>0)
+ {
+  /* go tru the supplied list of names */
+  for (j = 0; j < n_objs; j++)
+  {
+   /* linear table search */
+   for (i = 0; i < table->nelems; i++)
+   {
+    /*already on the table */
+    if (strcmp(obj_list[j].obj,table->objs[i].path)==0)
+    {
+     /* already chunk info inserted for this one; exit */
+     if (table->objs[i].chunk.rank>0)
+     {
+      printf("Input Error: chunk information already inserted for <%s>\n",obj_list[j].obj);
+      exit(1);
+     }
+     /* insert the layout info */
+     else
+     {
+      aux_tblinsert_layout(table,i,pack);
+      found=1;
+      break;
+     }
+    } /* if */
+   } /* i */
+
+   if (found==0)
+   {
+    /* keep the grow in a temp var */
+    I = table->nelems + added;
+    added++;
+    strcpy(table->objs[I].path,obj_list[j].obj);
+    aux_tblinsert_layout(table,I,pack);
+    }
+   /* cases where we have an already inserted name but there is a new name also
+      example:
+      -f dset1:GZIP=1 -l dset1,dset2:CHUNK=20x20
+      dset1 is already inserted, but dset2 must also be
+      */
+   else if (found==1 && strcmp(obj_list[j].obj,table->objs[i].path)!=0)
+   {
+    /* keep the grow in a temp var */
+    I = table->nelems + added;
+    added++;
+    strcpy(table->objs[I].path,obj_list[j].obj);
+    aux_tblinsert_layout(table,I,pack);
+   }
+  } /* j */
+ }
+
+ /* first time insertion */
+ else
+ {
+  /* go tru the supplied list of names */
+  for (j = 0; j < n_objs; j++)
+  {
+   I = table->nelems + added;
+   added++;
+   strcpy(table->objs[I].path,obj_list[j].obj);
+   aux_tblinsert_layout(table,I,pack);
+
+  }
+ }
+
+ table->nelems+= added;
+
+ return 0;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: options_add_filter
+ *
+ * Purpose: add a compression -f option to the option list
+ *
+ * Return: 0, ok, -1, fail
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int options_add_filter(obj_list_t *obj_list,
+                       int n_objs,
+                       filter_info_t filt,
+                       pack_opttbl_t *table )
+{
+
+ int i, j, I, added=0, found=0;
+
+ /* increase the size of the collection by N_OBJS if necessary */
+ if (table->nelems+n_objs >= table->size)
+ {
+  if (aux_inctable(table,n_objs)<0)
+   return -1;
+ }
+
+ /* search if this object is already in the table; "path" is the key */
+ if (table->nelems>0)
+ {
+  /* go tru the supplied list of names */
+  for (j = 0; j < n_objs; j++)
+  {
+   /* linear table search */
+   for (i = 0; i < table->nelems; i++)
+   {
+    /*already on the table */
+    if (strcmp(obj_list[j].obj,table->objs[i].path)==0)
+    {
+     /* insert */
+     aux_tblinsert_filter(table,i,filt);
+     found=1;
+     break;
+    } /* if */
+   } /* i */
+
+   if (found==0)
+   {
+    /* keep the grow in a temp var */
+    I = table->nelems + added;
+    added++;
+    strcpy(table->objs[I].path,obj_list[j].obj);
+    aux_tblinsert_filter(table,I,filt);
+   }
+   /* cases where we have an already inserted name but there is a new name also
+      example:
+      -l dset1:CHUNK=20x20 -f dset1,dset2:GZIP=1
+      dset1 is already inserted, but dset2 must also be
+      */
+   else if (found==1 && strcmp(obj_list[j].obj,table->objs[i].path)!=0)
+   {
+    /* keep the grow in a temp var */
+    I = table->nelems + added;
+    added++;
+    strcpy(table->objs[I].path,obj_list[j].obj);
+    aux_tblinsert_filter(table,I,filt);
+   }
+  } /* j */
+ }
+
+ /* first time insertion */
+ else
+ {
+  /* go tru the supplied list of names */
+  for (j = 0; j < n_objs; j++)
+  {
+   I = table->nelems + added;
+   added++;
+   strcpy(table->objs[I].path,obj_list[j].obj);
+   aux_tblinsert_filter(table,I,filt);
+  }
+ }
+
+ table->nelems+= added;
+
+ return 0;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: options_get_object
+ *
+ * Purpose: get object from table; "path" is the key
+ *
+ * Return: pack_info_t* OBJECT or NULL if not found; PATH is the key
+ *
+ *-------------------------------------------------------------------------
+ */
+
+pack_info_t* options_get_object( const char *path,
+                                 pack_opttbl_t *table )
+{
+ int i;
+
+ for ( i = 0; i < table->nelems; i++)
+ {
+  /* found it */
+  if (strcmp(table->objs[i].path,path)==0)
+  {
+   return (&table->objs[i]);
+  }
+ }
+
+ return NULL;
+}
+
+
+
+

Added: packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_parse.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_parse.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_parse.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,579 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <ctype.h>
+#include "h5repack.h"
+
+#if 0
+#define PARSE_DEBUG
+#endif
+
+/*-------------------------------------------------------------------------
+ * Function: parse_filter
+ *
+ * Purpose: read filter information
+ *
+ * Return: a list of names, the number of names and its compression type
+ *
+ * <name of filter> can be:
+ *  GZIP, to apply the HDF5 GZIP filter (GZIP compression)
+ *  SZIP, to apply the HDF5 SZIP filter (SZIP compression)
+ *  SHUF, to apply the HDF5 shuffle filter
+ *  FLET, to apply the HDF5 checksum filter
+ *  NONE, to remove the filter
+ *
+ * Examples:
+ * "GZIP=6"
+ * "A,B:NONE"
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September, 23, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+obj_list_t* parse_filter(const char *str,
+                         int *n_objs,
+                         filter_info_t *filt,
+                         pack_opt_t *options)
+{
+ unsigned    i, u;
+ char        c;
+ size_t      len=strlen(str);
+ int         j, m, n, k, l, end_obj=-1, no_param=0;
+ char        sobj[MAX_NC_NAME];
+ char        scomp[10];
+ char        stype[5];
+ char        smask[3];
+ obj_list_t* obj_list=NULL;
+ unsigned    pixels_per_block;
+
+#if defined(PARSE_DEBUG)
+ fprintf(stderr,"%s\n",str);
+#endif
+
+ /* initialize compression  info */
+ memset(filt,0,sizeof(filter_info_t));
+
+ /* check for the end of object list and number of objects */
+ for ( i=0, n=0; i<len; i++)
+ {
+  c = str[i];
+  if ( c==':' )
+  {
+   end_obj=i;
+  }
+  if ( c==',' )
+  {
+   n++;
+  }
+ }
+
+ if (end_obj==-1) { /* missing : */
+  /* apply to all objects */
+  options->all_filter=1;
+ }
+
+ n++;
+ obj_list=malloc(n*sizeof(obj_list_t));
+ if (obj_list==NULL)
+ {
+  printf("Could not alloc object list\n");
+  return NULL;
+ }
+ *n_objs=n;
+
+ /* get object list */
+ for ( j=0, k=0, n=0; j<end_obj; j++,k++)
+ {
+  c = str[j];
+  sobj[k]=c;
+  if ( c==',' || j==end_obj-1)
+  {
+   if ( c==',') sobj[k]='\0'; else sobj[k+1]='\0';
+   strcpy(obj_list[n].obj,sobj);
+   memset(sobj,0,sizeof(sobj));
+   n++;
+   k=-1;
+  }
+ }
+ /* nothing after : */
+ if (end_obj+1==(int)len)
+ {
+  if (obj_list) free(obj_list);
+  printf("Input Error: Invalid compression type in <%s>\n",str);
+  exit(1);
+ }
+
+
+ /* get filter additional parameters */
+ m=0;
+ for ( i=end_obj+1, k=0, j=0; i<len; i++,k++)
+ {
+  c = str[i];
+  scomp[k]=c;
+  if ( c=='=' || i==len-1)
+  {
+   if ( c=='=') {      /*one more parameter */
+    scomp[k]='\0';     /*cut space */
+
+     /*SZIP is a special case , it can be
+      SZIP=8,EC
+      SZIP=8,NN
+      */
+
+    if (strcmp(scomp,"SZIP")==0)
+    {
+     l=-1; /* mask index check */
+     for ( m=0,u=i+1; u<len; u++,m++)
+     {
+      if (str[u]==',')
+      {
+       stype[m]='\0'; /* end digit of szip */
+       l=0;  /* start EC or NN search */
+       u++;  /* skip ',' */
+      }
+      c = str[u];
+      if (!isdigit(c) && l==-1){
+       if (obj_list) free(obj_list);
+       printf("Input Error: Compression parameter not digit in <%s>\n",str);
+       exit(1);
+      }
+      if (l==-1)
+       stype[m]=c;
+      else
+      {
+       smask[l]=c;
+       l++;
+       if (l==2)
+       {
+        smask[l]='\0';
+        i=len-1; /* end */
+        (*n_objs)--; /* we counted an extra ',' */
+        if (strcmp(smask,"NN")==0)
+         filt->szip_coding=0;
+        else if (strcmp(smask,"EC")==0)
+         filt->szip_coding=1;
+        else
+        {
+         printf("Input Error: szip mask must be 'NN' or 'EC' \n");
+         exit(1);
+        }
+
+       }
+      }
+
+     }  /* u */
+    } /*if */
+
+    else
+    {
+     /* here we could have 1 or 2 digits  */
+     for ( m=0,u=i+1; u<len; u++,m++)
+     {
+      c = str[u];
+      if (!isdigit(c)){
+       if (obj_list) free(obj_list);
+       printf("Input Error: Compression parameter not digit in <%s>\n",str);
+       exit(1);
+      }
+      stype[m]=c;
+     } /* u */
+
+     stype[m]='\0';
+    } /*if */
+
+
+
+    filt->cd_values[j++]=atoi(stype);
+    i+=m; /* jump */
+   }
+   else if (i==len-1) { /*no more parameters */
+    scomp[k+1]='\0';
+    no_param=1;
+   }
+
+/*-------------------------------------------------------------------------
+ * H5Z_FILTER_NONE
+ *-------------------------------------------------------------------------
+ */
+   if (strcmp(scomp,"NONE")==0)
+    filt->filtn=H5Z_FILTER_NONE;
+
+/*-------------------------------------------------------------------------
+ * H5Z_FILTER_DEFLATE
+ *-------------------------------------------------------------------------
+ */
+   else if (strcmp(scomp,"GZIP")==0)
+   {
+    filt->filtn=H5Z_FILTER_DEFLATE;
+    if (no_param) { /*no more parameters, GZIP must have parameter */
+     if (obj_list) free(obj_list);
+     printf("Input Error: Missing compression parameter in <%s>\n",str);
+     exit(1);
+    }
+   }
+
+/*-------------------------------------------------------------------------
+ * H5Z_FILTER_SZIP
+ *-------------------------------------------------------------------------
+ */
+   else if (strcmp(scomp,"SZIP")==0)
+   {
+    filt->filtn=H5Z_FILTER_SZIP;
+    if (no_param) { /*no more parameters, SZIP must have parameter */
+     if (obj_list) free(obj_list);
+     printf("Input Error: Missing compression parameter in <%s>\n",str);
+     exit(1);
+    }
+   }
+
+/*-------------------------------------------------------------------------
+ * H5Z_FILTER_SHUFFLE
+ *-------------------------------------------------------------------------
+ */
+   else if (strcmp(scomp,"SHUF")==0)
+   {
+    filt->filtn=H5Z_FILTER_SHUFFLE;
+    if (m>0){ /*shuffle does not have parameter */
+     if (obj_list) free(obj_list);
+     printf("Input Error: Extra parameter in SHUF <%s>\n",str);
+     exit(1);
+    }
+   }
+/*-------------------------------------------------------------------------
+ * H5Z_FILTER_FLETCHER32
+ *-------------------------------------------------------------------------
+ */
+   else if (strcmp(scomp,"FLET")==0)
+   {
+    filt->filtn=H5Z_FILTER_FLETCHER32;
+    if (m>0){ /*shuffle does not have parameter */
+     if (obj_list) free(obj_list);
+     printf("Input Error: Extra parameter in FLET <%s>\n",str);
+     exit(1);
+    }
+   }
+   else {
+    if (obj_list) free(obj_list);
+    printf("Input Error: Invalid filter type in <%s>\n",str);
+    exit(1);
+   }
+  }
+ } /*i*/
+
+/*-------------------------------------------------------------------------
+ * check valid parameters
+ *-------------------------------------------------------------------------
+ */
+
+ switch (filt->filtn)
+ {
+
+ case H5Z_FILTER_DEFLATE:
+  if (filt->cd_values[0]<0 || filt->cd_values[0]>9 ){
+   if (obj_list) free(obj_list);
+   printf("Input Error: Invalid compression parameter in <%s>\n",str);
+   exit(1);
+  }
+  break;
+
+
+ case H5Z_FILTER_SZIP:
+  pixels_per_block=filt->cd_values[0];
+  if ((pixels_per_block%2)==1) {
+   if (obj_list) free(obj_list);
+   printf("Input Error: pixels_per_block is not even in <%s>\n",str);
+   exit(1);
+  }
+  if (pixels_per_block>H5_SZIP_MAX_PIXELS_PER_BLOCK) {
+   if (obj_list) free(obj_list);
+   printf("Input Error: pixels_per_block is too large in <%s>\n",str);
+   exit(1);
+  }
+  if ( (strcmp(smask,"NN")!=0) && (strcmp(smask,"EC")!=0) ) {
+   if (obj_list) free(obj_list);
+   printf("Input Error: szip mask must be 'NN' or 'EC' \n");
+   exit(1);
+  }
+  break;
+ };
+
+ return obj_list;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: get_sfilter
+ *
+ * Purpose: return the filter as a string name
+ *
+ * Return: name of filter, exit on error
+ *
+ *-------------------------------------------------------------------------
+ */
+
+const char* get_sfilter(H5Z_filter_t filtn)
+{
+ if (filtn==H5Z_FILTER_NONE)
+  return "NONE";
+ else if (filtn==H5Z_FILTER_DEFLATE)
+  return "GZIP";
+ else if (filtn==H5Z_FILTER_SZIP)
+  return "SZIP";
+ else if (filtn==H5Z_FILTER_SHUFFLE)
+  return "SHUFFLE";
+ else if (filtn==H5Z_FILTER_FLETCHER32)
+  return "FLETCHER32";
+ else {
+  printf("Input error in filter type\n");
+  exit(1);
+ }
+ return NULL;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: parse_layout
+ *
+ * Purpose: read layout info
+ *
+ * Return: a list of names, the number of names and its chunking info for
+ *  chunked. NULL, on error
+ * the layout type can be:
+ *  CHUNK, to apply chunking layout
+ *  CONTI, to apply continuous layout
+ *  COMPA, to apply compact layout
+ *
+ * Example:
+ * "AA,B,CDE:CHUNK=10X10"
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: December 30, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+obj_list_t* parse_layout(const char *str,
+                         int *n_objs,
+                         pack_info_t *pack,    /* info about layout needed */
+                         pack_opt_t *options)
+{
+ obj_list_t* obj_list=NULL;
+ unsigned    i;
+ char        c;
+ size_t      len=strlen(str);
+ int         j, n, k, end_obj=-1, c_index;
+ char        sobj[MAX_NC_NAME];
+ char        sdim[10];
+ char        slayout[10];
+
+
+ memset(sdim, '\0', sizeof(sdim));
+ memset(sobj, '\0', sizeof(sobj));
+ memset(slayout, '\0', sizeof(slayout));
+
+ /* check for the end of object list and number of objects */
+ for ( i=0, n=0; i<len; i++)
+ {
+  c = str[i];
+  if ( c==':' )
+  {
+   end_obj=i;
+  }
+  if ( c==',' )
+  {
+   n++;
+  }
+ }
+
+ if (end_obj==-1) { /* missing : chunk all */
+  options->all_layout=1;
+ }
+
+ n++;
+ obj_list=malloc(n*sizeof(obj_list_t));
+ if (obj_list==NULL)
+ {
+  printf("Could not alloc object list\n");
+  return NULL;
+ }
+ *n_objs=n;
+
+ /* get object list */
+ for ( j=0, k=0, n=0; j<end_obj; j++,k++)
+ {
+  c = str[j];
+  sobj[k]=c;
+  if ( c==',' || j==end_obj-1)
+  {
+   if ( c==',') sobj[k]='\0'; else sobj[k+1]='\0';
+   strcpy(obj_list[n].obj,sobj);
+   memset(sobj,0,sizeof(sobj));
+   n++;
+   k=-1;
+  }
+ }
+
+ /* nothing after : */
+ if (end_obj+1==(int)len)
+ {
+  if (obj_list) free(obj_list);
+  printf("Parse layout error: No characters after : in <%s>\n",str);
+  exit(1);
+ }
+
+ /* get layout info */
+ for ( j=end_obj+1, n=0; n<=5; j++,n++)
+ {
+  if (n==5)
+  {
+   slayout[n]='\0';  /*cut string */
+   if (strcmp(slayout,"COMPA")==0)
+    pack->layout=H5D_COMPACT;
+   else if (strcmp(slayout,"CONTI")==0)
+    pack->layout=H5D_CONTIGUOUS;
+   else if (strcmp(slayout,"CHUNK")==0)
+    pack->layout=H5D_CHUNKED;
+   else {
+    printf("Parse layout error: Not a valid layout in <%s>\n",str);
+    exit(1);
+   }
+  }
+  else
+  {
+   c = str[j];
+   slayout[n]=c;
+  }
+ } /* j */
+
+
+ if ( pack->layout==H5D_CHUNKED )
+ {
+
+/*-------------------------------------------------------------------------
+ * get chunk info
+ *-------------------------------------------------------------------------
+ */
+   k=0;
+
+   if (j>(int)len)
+   {
+    if (obj_list) free(obj_list);
+    printf("Parse layout error: <%s> Chunk dimensions missing\n",str);
+    exit(1);
+   }
+
+   for ( i=j, c_index=0; i<len; i++)
+   {
+    c = str[i];
+    sdim[k]=c;
+    k++; /*increment sdim index */
+
+    if (!isdigit(c) && c!='x'
+     && c!='N' && c!='O' && c!='N' && c!='E'
+     ){
+     if (obj_list) free(obj_list);
+     printf("Parse layout error: <%s> Not a valid character in <%s>\n",
+      sdim,str);
+     exit(1);
+    }
+
+    if ( c=='x' || i==len-1)
+    {
+     if ( c=='x') {
+      sdim[k-1]='\0';
+      k=0;
+      pack->chunk.chunk_lengths[c_index]=atoi(sdim);
+      if (pack->chunk.chunk_lengths[c_index]==0) {
+       if (obj_list) free(obj_list);
+       printf("Parse layout error: <%s> Conversion to number in <%s>\n",
+        sdim,str);
+       exit(1);
+      }
+      c_index++;
+     }
+     else if (i==len-1) { /*no more parameters */
+      sdim[k]='\0';
+      k=0;
+      if (strcmp(sdim,"NONE")==0)
+      {
+       pack->chunk.rank=-2;
+      }
+      else
+      {
+       pack->chunk.chunk_lengths[c_index]=atoi(sdim);
+       if (pack->chunk.chunk_lengths[c_index]==0){
+        if (obj_list) free(obj_list);
+        printf("Parse layout error: <%s> Conversion to number in <%s>\n",
+         sdim,str);
+        exit(1);
+       }
+       pack->chunk.rank=c_index+1;
+      }
+     } /*if */
+    } /*if c=='x' || i==len-1 */
+   } /*i*/
+
+
+ } /*H5D_CHUNKED*/
+
+
+ return obj_list;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: parse_number
+ *
+ * Purpose: read a number from command line argument
+ *
+ * Return: number, -1 for FAIL
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: September, 23, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+int parse_number(char *str)
+{
+ unsigned    i;
+ int         n;
+ char        c;
+ size_t      len=strlen(str);
+
+ for ( i=0; i<len; i++)
+ {
+  c = str[i];
+  if (!isdigit(c)){
+   return -1;
+  }
+ }
+ str[i]='\0';
+ n=atoi(str);
+ return n;
+}
+
+
+
+

Added: packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_refs.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_refs.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_refs.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,805 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include "H5private.h"
+#include "h5repack.h"
+
+static const char* MapIdToName(hid_t refobj_id,
+                               trav_table_t *travt);
+
+static void close_obj(H5G_obj_t1 obj_type, hid_t obj_id);
+
+
+static int copy_refs_attr(hid_t loc_in,
+                          hid_t loc_out,
+                          pack_opt_t *options,
+                          trav_table_t *travt,
+                          hid_t fidout         /* for saving references */
+                          );
+
+/*-------------------------------------------------------------------------
+ * Function: do_copy_refobjs
+ *
+ * Purpose: duplicate all referenced HDF5 objects in the file
+ *  and create hard links
+ *
+ * Return: 0, ok, -1 no
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: December, 10, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int do_copy_refobjs(hid_t fidin,
+                    hid_t fidout,
+                    trav_table_t *travt,
+                    pack_opt_t *options) /* repack options */
+{
+ hid_t     grp_in=(-1);            /* read group ID */
+ hid_t     grp_out=(-1);           /* write group ID */
+ hid_t     dset_in=(-1);           /* read dataset ID */
+ hid_t     dset_out=(-1);          /* write dataset ID */
+ hid_t     type_in=(-1);           /* named type ID */
+ hid_t     dcpl_id=(-1);           /* dataset creation property list ID */
+ hid_t     space_id=(-1);          /* space ID */
+ hid_t     ftype_id=(-1);          /* file data type ID */
+ hid_t     mtype_id=(-1);          /* memory data type ID */
+ size_t    msize;             /* memory size of memory type */
+ hsize_t   nelmts;            /* number of elements in dataset */
+ int       rank;              /* rank of dataset */
+ hsize_t   dims[H5S_MAX_RANK];/* dimensions of dataset */
+ int       next;              /* external files */
+ int       i, j;
+
+/*-------------------------------------------------------------------------
+ * browse
+ *-------------------------------------------------------------------------
+ */
+
+ for ( i = 0; i < travt->nobjs; i++)
+ {
+  switch ( travt->objs[i].type )
+  {
+ /*-------------------------------------------------------------------------
+  * H5G_GROUP
+  *-------------------------------------------------------------------------
+  */
+  case H5G_GROUP:
+
+   /*-------------------------------------------------------------------------
+    * check for hard links
+    *-------------------------------------------------------------------------
+    */
+
+   if (travt->objs[i].nlinks)
+   {
+    for ( j=0; j<travt->objs[i].nlinks; j++)
+    {
+      H5Glink(fidout,
+      H5G_LINK_HARD,
+      travt->objs[i].name,
+      travt->objs[i].links[j].new_name);
+    }
+   }
+
+   break;
+
+  /*-------------------------------------------------------------------------
+   * H5G_DATASET
+   *-------------------------------------------------------------------------
+   */
+  case H5G_DATASET:
+
+   if ((dset_in=H5Dopen(fidin,travt->objs[i].name))<0)
+    goto error;
+   if ((space_id=H5Dget_space(dset_in))<0)
+    goto error;
+   if ((ftype_id=H5Dget_type (dset_in))<0)
+    goto error;
+   if ((dcpl_id=H5Dget_create_plist(dset_in))<0)
+    goto error;
+   if ( (rank=H5Sget_simple_extent_ndims(space_id))<0)
+    goto error;
+   if ( H5Sget_simple_extent_dims(space_id,dims,NULL)<0)
+    goto error;
+   nelmts=1;
+   for (j=0; j<rank; j++)
+    nelmts*=dims[j];
+
+   if ((mtype_id=h5tools_get_native_type(ftype_id))<0)
+    goto error;
+
+   if ((msize=H5Tget_size(mtype_id))==0)
+    goto error;
+
+/*-------------------------------------------------------------------------
+ * check for external files
+ *-------------------------------------------------------------------------
+ */
+   if ((next=H5Pget_external_count (dcpl_id))<0)
+    goto error;
+/*-------------------------------------------------------------------------
+ * check if the dataset creation property list has filters that
+ * are not registered in the current configuration
+ * 1) the external filters GZIP and SZIP might not be available
+ * 2) the internal filters might be turned off
+ *-------------------------------------------------------------------------
+ */
+   if (next==0 && h5tools_canreadf((NULL),dcpl_id)==1)
+   {
+/*-------------------------------------------------------------------------
+ * test for a valid output dataset
+ *-------------------------------------------------------------------------
+ */
+   dset_out = FAIL;
+
+/*-------------------------------------------------------------------------
+ * object references are a special case
+ * we cannot just copy the buffers, but instead we recreate the reference
+ *-------------------------------------------------------------------------
+ */
+   if (H5Tequal(mtype_id, H5T_STD_REF_OBJ))
+   {
+    H5G_obj_t1       obj_type;
+    hid_t            refobj_id;
+    hobj_ref_t       *refbuf=NULL; /* buffer for object references */
+    hobj_ref_t       *buf=NULL;
+    const char*      refname;
+    unsigned         u;
+
+   /*-------------------------------------------------------------------------
+    * read to memory
+    *-------------------------------------------------------------------------
+    */
+
+    if (nelmts)
+    {
+     buf=(void *) HDmalloc((unsigned)(nelmts*msize));
+     if ( buf==NULL){
+      printf( "cannot read into memory\n" );
+      goto error;
+     }
+     if (H5Dread(dset_in,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0)
+      goto error;
+
+     if ((obj_type = H5Rget_obj_type(dset_in,H5R_OBJECT,buf))<0)
+      goto error;
+     refbuf=HDmalloc((unsigned)nelmts*msize);
+     if ( refbuf==NULL){
+      printf( "cannot allocate memory\n" );
+      goto error;
+     }
+     for ( u=0; u<nelmts; u++)
+     {
+      H5E_BEGIN_TRY {
+       if ((refobj_id = H5Rdereference(dset_in,H5R_OBJECT,&buf[u]))<0)
+        continue;
+      } H5E_END_TRY;
+      /* get the name. a valid name could only occur in the
+      second traversal of the file */
+      if ((refname=MapIdToName(refobj_id,travt))!=NULL)
+      {
+       /* create the reference, -1 parameter for objects */
+       if (H5Rcreate(&refbuf[u],fidout,refname,H5R_OBJECT,-1)<0)
+        goto error;
+       if (options->verbose)
+        printf("object <%s> object reference created to <%s>\n",
+        travt->objs[i].name,
+        refname);
+      }/*refname*/
+      close_obj(obj_type,refobj_id);
+     }/*  u */
+    }/*nelmts*/
+
+    /*-------------------------------------------------------------------------
+     * create/write dataset/close
+     *-------------------------------------------------------------------------
+     */
+    if ((dset_out=H5Dcreate(fidout,travt->objs[i].name,mtype_id,space_id,dcpl_id))<0)
+     goto error;
+    if (nelmts) {
+     if (H5Dwrite(dset_out,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,refbuf)<0)
+      goto error;
+    }
+
+    if (buf)
+     free(buf);
+    if (refbuf)
+     free(refbuf);
+
+   }/*H5T_STD_REF_OBJ*/
+
+/*-------------------------------------------------------------------------
+ * dataset region references
+ *-------------------------------------------------------------------------
+ */
+   else if (H5Tequal(mtype_id, H5T_STD_REF_DSETREG))
+   {
+    H5G_obj_t1       obj_type;
+    hid_t            refobj_id;
+    hdset_reg_ref_t  *refbuf=NULL; /* input buffer for region references */
+    hdset_reg_ref_t  *buf=NULL;    /* output buffer */
+    const char*      refname;
+    unsigned         u;
+
+   /*-------------------------------------------------------------------------
+    * read input to memory
+    *-------------------------------------------------------------------------
+    */
+    if (nelmts)
+    {
+     buf=(void *) HDmalloc((unsigned)(nelmts*msize));
+     if ( buf==NULL){
+      printf( "cannot read into memory\n" );
+      goto error;
+     }
+     if (H5Dread(dset_in,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0)
+      goto error;
+     if ((obj_type = H5Rget_obj_type(dset_in,H5R_DATASET_REGION,buf))<0)
+      goto error;
+
+     /*-------------------------------------------------------------------------
+      * create output
+      *-------------------------------------------------------------------------
+      */
+
+     refbuf=HDcalloc(sizeof(hdset_reg_ref_t),(size_t)nelmts); /*init to zero */
+     if ( refbuf==NULL){
+      printf( "cannot allocate memory\n" );
+      goto error;
+     }
+     for ( u=0; u<nelmts; u++)
+     {
+      H5E_BEGIN_TRY {
+       if ((refobj_id = H5Rdereference(dset_in,H5R_DATASET_REGION,&buf[u]))<0)
+        continue;
+      } H5E_END_TRY;
+
+      /* get the name. a valid name could only occur in the
+      second traversal of the file */
+      if ((refname=MapIdToName(refobj_id,travt))!=NULL)
+      {
+       hid_t region_id;    /* region id of the referenced dataset */
+       if ((region_id = H5Rget_region(dset_in,H5R_DATASET_REGION,&buf[u]))<0)
+        goto error;
+       /* create the reference, we need the space_id */
+       if (H5Rcreate(&refbuf[u],fidout,refname,H5R_DATASET_REGION,region_id)<0)
+        goto error;
+       if (H5Sclose(region_id)<0)
+        goto error;
+       if (options->verbose)
+        printf("object <%s> region reference created to <%s>\n",
+        travt->objs[i].name,
+        refname);
+      }/*refname*/
+      close_obj(obj_type,refobj_id);
+     }/*  u */
+    }/*nelmts*/
+
+    /*-------------------------------------------------------------------------
+     * create/write dataset/close
+     *-------------------------------------------------------------------------
+     */
+    if ((dset_out=H5Dcreate(fidout,travt->objs[i].name,mtype_id,space_id,dcpl_id))<0)
+     goto error;
+    if (nelmts) {
+     if (H5Dwrite(dset_out,mtype_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,refbuf)<0)
+      goto error;
+    }
+
+    if (buf)
+     free(buf);
+    if (refbuf)
+     free(refbuf);
+   } /* H5T_STD_REF_DSETREG */
+
+
+/*-------------------------------------------------------------------------
+ * not references, open previously created object in 1st traversal
+ *-------------------------------------------------------------------------
+ */
+   else
+   {
+    if ((dset_out=H5Dopen(fidout,travt->objs[i].name))<0)
+     goto error;
+   }
+
+   assert(dset_out!=FAIL);
+
+/*-------------------------------------------------------------------------
+ * copy referenced objects in attributes
+ *-------------------------------------------------------------------------
+ */
+   if (copy_refs_attr(dset_in,dset_out,options,travt,fidout)<0)
+    goto error;
+
+
+/*-------------------------------------------------------------------------
+ * check for hard links
+ *-------------------------------------------------------------------------
+ */
+   if (travt->objs[i].nlinks)
+   {
+    for ( j=0; j<travt->objs[i].nlinks; j++){
+     H5Glink(fidout,
+      H5G_LINK_HARD,
+      travt->objs[i].name,
+      travt->objs[i].links[j].new_name);
+    }
+   }
+
+   if (H5Dclose(dset_out)<0)
+    goto error;
+
+   }/*can_read*/
+
+   /*-------------------------------------------------------------------------
+    * close
+    *-------------------------------------------------------------------------
+    */
+
+   if (H5Tclose(ftype_id)<0)
+    goto error;
+   if (H5Tclose(mtype_id)<0)
+    goto error;
+   if (H5Pclose(dcpl_id)<0)
+    goto error;
+   if (H5Sclose(space_id)<0)
+    goto error;
+   if (H5Dclose(dset_in)<0)
+    goto error;
+
+   break;
+
+  /*-------------------------------------------------------------------------
+   * H5G_TYPE
+   *-------------------------------------------------------------------------
+   */
+  case H5G_TYPE:
+
+   if ((type_in = H5Topen (fidin,travt->objs[i].name))<0)
+    goto error;
+
+   if (H5Tclose(type_in)<0)
+    goto error;
+
+   break;
+
+  /*-------------------------------------------------------------------------
+   * H5G_LINK
+   *-------------------------------------------------------------------------
+   */
+
+  case H5G_LINK:
+
+   /*nothing to do */
+   break;
+
+  default:
+
+   break;
+  }
+ }
+
+
+
+/*-------------------------------------------------------------------------
+ * the root is a special case, we get an ID for the root group
+ * and copy its attributes using that ID
+ * it must be done last, because the attributes might contain references to
+ * objects in the object list
+ *-------------------------------------------------------------------------
+ */
+
+ if ((grp_out = H5Gopen(fidout,"/"))<0)
+  goto error;
+
+ if ((grp_in  = H5Gopen(fidin,"/"))<0)
+  goto error;
+
+ if (copy_refs_attr(grp_in,grp_out,options,travt,fidout)<0)
+  goto error;
+
+ if (H5Gclose(grp_out)<0)
+  goto error;
+ if (H5Gclose(grp_in)<0)
+  goto error;
+
+ return 0;
+
+error:
+ H5E_BEGIN_TRY {
+  H5Gclose(grp_in);
+  H5Gclose(grp_out);
+  H5Pclose(dcpl_id);
+  H5Sclose(space_id);
+  H5Dclose(dset_in);
+  H5Dclose(dset_out);
+  H5Tclose(ftype_id);
+  H5Tclose(mtype_id);
+  H5Tclose(type_in);
+ } H5E_END_TRY;
+ return -1;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: copy_refs_attr
+ *
+ * Purpose: duplicate all referenced HDF5 located in attributes
+ *  relative to LOC_IN, which is obtained either from
+ * loc_id = H5Gopen( fid, name);
+ * loc_id = H5Dopen( fid, name);
+ * loc_id = H5Topen( fid, name);
+ *
+ * Return: 0, ok, -1 no
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October, 28, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static int copy_refs_attr(hid_t loc_in,
+                          hid_t loc_out,
+                          pack_opt_t *options,
+                          trav_table_t *travt,
+                          hid_t fidout         /* for saving references */
+                          )
+{
+ hid_t      attr_id=-1;      /* attr ID */
+ hid_t      attr_out=-1;     /* attr ID */
+ hid_t      space_id=-1;     /* space ID */
+ hid_t      ftype_id=-1;     /* file data type ID */
+ hid_t      mtype_id=-1;     /* memory data type ID */
+ size_t     msize;        /* memory size of type */
+ hsize_t    nelmts;       /* number of elements in dataset */
+ int        rank;         /* rank of dataset */
+ hsize_t    dims[H5S_MAX_RANK];/* dimensions of dataset */
+ char       name[255];
+ int        n, j;
+ unsigned   u;
+
+ if ((n = H5Aget_num_attrs(loc_in))<0)
+  goto error;
+
+ for ( u = 0; u < (unsigned)n; u++)
+ {
+
+/*-------------------------------------------------------------------------
+ * open
+ *-------------------------------------------------------------------------
+ */
+  /* open attribute */
+  if ((attr_id = H5Aopen_idx(loc_in, u))<0)
+   goto error;
+
+  /* get name */
+  if (H5Aget_name( attr_id, 255, name )<0)
+   goto error;
+
+  /* get the file datatype  */
+  if ((ftype_id = H5Aget_type( attr_id )) < 0 )
+   goto error;
+
+  /* get the dataspace handle  */
+  if ((space_id = H5Aget_space( attr_id )) < 0 )
+   goto error;
+
+  /* get dimensions  */
+  if ( (rank = H5Sget_simple_extent_dims(space_id, dims, NULL)) < 0 )
+   goto error;
+
+
+  /*-------------------------------------------------------------------------
+   * elements
+   *-------------------------------------------------------------------------
+   */
+  nelmts=1;
+  for (j=0; j<rank; j++)
+   nelmts*=dims[j];
+
+  if ((mtype_id=h5tools_get_native_type(ftype_id))<0)
+   goto error;
+
+  if ((msize=H5Tget_size(mtype_id))==0)
+   goto error;
+
+/*-------------------------------------------------------------------------
+ * object references are a special case
+ * we cannot just copy the buffers, but instead we recreate the reference
+ *-------------------------------------------------------------------------
+ */
+   if (H5Tequal(mtype_id, H5T_STD_REF_OBJ))
+   {
+    H5G_obj_t1  obj_type;
+    hid_t       refobj_id;
+    hobj_ref_t  *refbuf=NULL;
+    unsigned    k;
+    const char* refname;
+    hobj_ref_t  *buf=NULL;
+
+   /*-------------------------------------------------------------------------
+    * read input to memory
+    *-------------------------------------------------------------------------
+    */
+
+    if (nelmts)
+    {
+     buf=(void *) HDmalloc((unsigned)(nelmts*msize));
+     if ( buf==NULL){
+      printf( "cannot read into memory\n" );
+      goto error;
+     }
+     if (H5Aread(attr_id,mtype_id,buf)<0)
+      goto error;
+
+     if ((obj_type = H5Rget_obj_type(attr_id,H5R_OBJECT,buf))<0)
+      goto error;
+     refbuf=HDmalloc((unsigned)nelmts*msize);
+     if ( refbuf==NULL){
+      printf( "cannot allocate memory\n" );
+      goto error;
+     }
+     for ( k=0; k<nelmts; k++)
+     {
+      H5E_BEGIN_TRY {
+       if ((refobj_id = H5Rdereference(attr_id,H5R_OBJECT,&buf[k]))<0)
+        goto error;
+      } H5E_END_TRY;
+      /* get the name. a valid name could only occur in the
+      second traversal of the file */
+      if ((refname=MapIdToName(refobj_id,travt))!=NULL)
+      {
+       /* create the reference */
+       if (H5Rcreate(&refbuf[k],fidout,refname,H5R_OBJECT,-1)<0)
+        goto error;
+       if (options->verbose)
+        printf("object <%s> reference created to <%s>\n",name,refname);
+      }
+      close_obj(obj_type,refobj_id);
+     }/*  k */
+    }/*nelmts*/
+
+    /*-------------------------------------------------------------------------
+     * copy
+     *-------------------------------------------------------------------------
+     */
+
+    if ((attr_out=H5Acreate(loc_out,name,ftype_id,space_id,H5P_DEFAULT))<0)
+     goto error;
+    if (nelmts) {
+     if(H5Awrite(attr_out,mtype_id,refbuf)<0)
+      goto error;
+    }
+
+    if (H5Aclose(attr_out)<0)
+     goto error;
+
+    if (refbuf)
+     free(refbuf);
+    if (buf)
+     free(buf);
+
+   }/*H5T_STD_REF_OBJ*/
+
+/*-------------------------------------------------------------------------
+ * dataset region references
+ *-------------------------------------------------------------------------
+ */
+   else if (H5Tequal(mtype_id, H5T_STD_REF_DSETREG))
+   {
+    H5G_obj_t1       obj_type;
+    hid_t            refobj_id;
+    hdset_reg_ref_t  *refbuf=NULL; /* input buffer for region references */
+    hdset_reg_ref_t  *buf=NULL;    /* output buffer */
+    const char*      refname;
+    unsigned         k;
+
+   /*-------------------------------------------------------------------------
+    * read input to memory
+    *-------------------------------------------------------------------------
+    */
+
+    if (nelmts)
+    {
+     buf=(void *) HDmalloc((unsigned)(nelmts*msize));
+     if ( buf==NULL){
+      printf( "cannot read into memory\n" );
+      goto error;
+     }
+     if (H5Aread(attr_id,mtype_id,buf)<0)
+      goto error;
+     if ((obj_type = H5Rget_obj_type(attr_id,H5R_DATASET_REGION,buf))<0)
+      goto error;
+
+    /*-------------------------------------------------------------------------
+     * create output
+     *-------------------------------------------------------------------------
+     */
+
+     refbuf=HDcalloc(sizeof(hdset_reg_ref_t),(size_t)nelmts); /*init to zero */
+     if ( refbuf==NULL){
+      printf( "cannot allocate memory\n" );
+      goto error;
+     }
+     for ( k=0; k<nelmts; k++)
+     {
+      H5E_BEGIN_TRY {
+       if ((refobj_id = H5Rdereference(attr_id,H5R_DATASET_REGION,&buf[k]))<0)
+        continue;
+      } H5E_END_TRY;
+      /* get the name. a valid name could only occur in the
+      second traversal of the file */
+      if ((refname=MapIdToName(refobj_id,travt))!=NULL)
+      {
+       hid_t region_id;    /* region id of the referenced dataset */
+       if ((region_id = H5Rget_region(attr_id,H5R_DATASET_REGION,&buf[k]))<0)
+        goto error;
+       /* create the reference, we need the space_id */
+       if (H5Rcreate(&refbuf[k],fidout,refname,H5R_DATASET_REGION,region_id)<0)
+        goto error;
+       if (H5Sclose(region_id)<0)
+        goto error;
+       if (options->verbose)
+        printf("object <%s> region reference created to <%s>\n",name,refname);
+      }
+      close_obj(obj_type,refobj_id);
+     }/*  k */
+    }/*nelmts */
+
+    /*-------------------------------------------------------------------------
+     * copy
+     *-------------------------------------------------------------------------
+     */
+
+    if ((attr_out=H5Acreate(loc_out,name,ftype_id,space_id,H5P_DEFAULT))<0)
+     goto error;
+    if (nelmts) {
+     if(H5Awrite(attr_out,mtype_id,refbuf)<0)
+      goto error;
+    }
+    if (H5Aclose(attr_out)<0)
+     goto error;
+    if (refbuf)
+     free(refbuf);
+    if (buf)
+     free(buf);
+   } /* H5T_STD_REF_DSETREG */
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+
+  if (H5Tclose(ftype_id)<0) goto error;
+  if (H5Tclose(mtype_id)<0) goto error;
+  if (H5Sclose(space_id)<0) goto error;
+  if (H5Aclose(attr_id)<0) goto error;
+ } /* u */
+
+  return 0;
+
+error:
+ H5E_BEGIN_TRY {
+  H5Tclose(ftype_id);
+  H5Tclose(mtype_id);
+  H5Sclose(space_id);
+  H5Aclose(attr_id);
+  H5Aclose(attr_out);
+ } H5E_END_TRY;
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	close_obj
+ *
+ * Purpose:	Auxiliary function to close an object
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static void close_obj(H5G_obj_t1 obj_type, hid_t obj_id)
+{
+ H5E_BEGIN_TRY
+ {
+  switch (obj_type)
+  {
+  case H5G_GROUP:
+   H5Gclose(obj_id);
+   break;
+  case H5G_DATASET:
+   H5Dclose(obj_id);
+   break;
+  case H5G_TYPE:
+   H5Tclose(obj_id);
+   break;
+  default:
+   break;
+  }
+ } H5E_END_TRY;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	MapIdToName
+ *
+ * Purpose:	map an object ID to a name
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static const char* MapIdToName(hid_t refobj_id,
+                               trav_table_t *travt)
+{
+ hid_t id;
+ hid_t fid;
+ H5G_stat_t refstat;    /* Stat for the refobj id */
+ H5G_stat_t objstat;    /* Stat for objects in the file */
+ int   i;
+
+ /* obtain information to identify the referenced object uniquely */
+ if(H5Gget_objinfo(refobj_id, ".", 0, &refstat) <0)
+  return NULL;
+
+ /* obtains the file ID given an object ID.  This ID must be closed */
+ if ((fid = H5Iget_file_id(refobj_id))<0)
+ {
+  return NULL;
+ }
+
+ /* linear search */
+ for ( i=0; i<travt->nobjs; i++)
+ {
+  switch ( travt->objs[i].type )
+  {
+  default:
+   break;
+
+  /*-------------------------------------------------------------------------
+   * H5G_DATASET
+   *-------------------------------------------------------------------------
+   */
+
+  case H5G_DATASET:
+
+   if ((id = H5Dopen(fid,travt->objs[i].name))<0)
+    return NULL;
+   if(H5Gget_objinfo(id, ".", 0, &objstat) <0)
+    return NULL;
+   if (H5Dclose(id)<0)
+    return NULL;
+   if (refstat.fileno[0]==objstat.fileno[0] && refstat.fileno[1]==objstat.fileno[1]
+        && refstat.objno[0]==objstat.objno[0] && refstat.objno[1]==objstat.objno[1])
+   {
+    H5Fclose(fid);
+    return travt->objs[i].name;
+   }
+   break;
+  }  /* switch */
+ } /* i */
+
+ if (H5Fclose(fid)<0)
+  return NULL;
+
+ return NULL;
+}
+

Added: packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_verify.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_verify.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/h5repack_verify.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,478 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "h5test.h"
+#include "h5repack.h"
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: has_filter
+ *
+ * Purpose: verify if a filter is present in the property list DCPL_ID
+ *
+ * Return: 1 has, 0 does not, -1 error
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: December 19, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int has_filter(hid_t dcpl_id,
+               H5Z_filter_t filtnin)
+{
+
+ int          nfilters;       /* number of filters */
+ unsigned     filt_flags;     /* filter flags */
+ H5Z_filter_t filtn;          /* filter identification number */
+ unsigned     cd_values[20];  /* filter client data values */
+ size_t       cd_nelmts;      /* filter client number of values */
+ char         f_name[256];    /* filter name */
+ int          have=0;         /* flag, filter is present */
+ int          i;              /* index */
+
+ /* if no information about the input filter is requested return exit */
+ if (filtnin==-1)
+  return 1;
+
+ /* get information about filters */
+ if ((nfilters = H5Pget_nfilters(dcpl_id))<0)
+  return -1;
+
+ /* if we do not have filters and the requested filter is NONE, return 1 */
+ if (!nfilters && filtnin==H5Z_FILTER_NONE)
+  return 1;
+
+ for (i=0; i<nfilters; i++)
+ {
+  cd_nelmts = NELMTS(cd_values);
+  filtn = H5Pget_filter(dcpl_id,
+   (unsigned)i,
+   &filt_flags,
+   &cd_nelmts,
+   cd_values,
+   sizeof(f_name),
+   f_name);
+
+  if (filtnin==filtn)
+   have=1;
+
+ }
+
+ return have;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: has_layout
+ *
+ * Purpose: verify which layout is present in the property list DCPL_ID
+ *
+ *  H5D_COMPACT	  	= 0
+ *  H5D_CONTIGUOUS	= 1
+ *  H5D_CHUNKED		  = 2
+ *
+ * Return: 1 has, 0 does not, -1 error
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: December 30, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int has_layout(hid_t dcpl_id,
+               pack_info_t *obj)
+{
+ hsize_t      chsize[64];     /* chunk size in elements */
+ H5D_layout_t layout;         /* layout */
+ int          nfilters;       /* number of filters */
+ int          rank;           /* rank */
+ int          i;              /* index */
+
+ /* if no information about the input layout is requested return exit */
+ if (obj==NULL)
+  return 1;
+
+ /* check if we have filters in the input object */
+ if ((nfilters = H5Pget_nfilters(dcpl_id))<0)
+  return -1;
+
+ /* a non chunked layout was requested on a filtered object; avoid the test */
+ if (nfilters && obj->layout!=H5D_CHUNKED)
+  return 1;
+
+ /* get layout */
+ if ((layout = H5Pget_layout(dcpl_id))<0)
+  return -1;
+
+ if (obj->layout != layout)
+  return 0;
+
+ if (layout==H5D_CHUNKED)
+ {
+  if ((rank = H5Pget_chunk(dcpl_id,NELMTS(chsize),chsize/*out*/))<0)
+   return -1;
+  if (obj->chunk.rank != rank)
+   return 0;
+  for ( i=0; i<rank; i++)
+   if (chsize[i] != obj->chunk.chunk_lengths[i])
+    return 0;
+ }
+
+ return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: h5repack_verify
+ *
+ * Purpose: verify if the filters specified in the options list are
+ *  present on the OUTPUT file
+ *
+ * Return: 1=filter present, 0=filter not present, -1=error
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: December 19, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int h5repack_verify(const char *fname,
+                    pack_opt_t *options)
+{
+ hid_t  fid;      /* file ID */
+ hid_t  dset_id=-1;  /* dataset ID */
+ hid_t  dcpl_id=-1;  /* dataset creation property list ID */
+ hid_t  space_id=-1; /* space ID */
+ int    ret=1, i, j;
+ trav_table_t  *travt=NULL;
+
+ /* open the file */
+ if ((fid=H5Fopen(fname,H5F_ACC_RDONLY,H5P_DEFAULT))<0 )
+  return -1;
+
+ for ( i=0; i<options->op_tbl->nelems; i++)
+ {
+  char* name=options->op_tbl->objs[i].path;
+  pack_info_t *obj = &options->op_tbl->objs[i];
+
+/*-------------------------------------------------------------------------
+ * open
+ *-------------------------------------------------------------------------
+ */
+  if ((dset_id=H5Dopen(fid,name))<0)
+   goto error;
+  if ((space_id=H5Dget_space(dset_id))<0)
+   goto error;
+  if ((dcpl_id=H5Dget_create_plist(dset_id))<0)
+   goto error;
+
+/*-------------------------------------------------------------------------
+ * filter check
+ *-------------------------------------------------------------------------
+ */
+  for ( j=0; j<obj->nfilters; j++)
+  {
+   if (has_filter(dcpl_id,obj->filter[j].filtn)==0)
+    ret=0;
+  }
+
+/*-------------------------------------------------------------------------
+ * layout check
+ *-------------------------------------------------------------------------
+ */
+  if ((obj->layout!=-1) && (has_layout(dcpl_id,obj)==0))
+   ret=0;
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+  if (H5Pclose(dcpl_id)<0)
+   goto error;
+  if (H5Sclose(space_id)<0)
+   goto error;
+  if (H5Dclose(dset_id)<0)
+   goto error;
+
+ }
+
+
+/*-------------------------------------------------------------------------
+ * check for the "all" objects option
+ *-------------------------------------------------------------------------
+ */
+
+ if (options->all_filter==1 || options->all_layout==1)
+ {
+
+  /* init table */
+  trav_table_init(&travt);
+
+  /* get the list of objects in the file */
+  if (h5trav_gettable(fid,travt)<0)
+   goto error;
+
+  for ( i=0; i<travt->nobjs; i++)
+  {
+   char* name=travt->objs[i].name;
+
+   switch ( travt->objs[i].type )
+   {
+   case H5G_DATASET:
+
+ /*-------------------------------------------------------------------------
+  * open
+  *-------------------------------------------------------------------------
+  */
+    if ((dset_id=H5Dopen(fid,name))<0)
+     goto error;
+    if ((space_id=H5Dget_space(dset_id))<0)
+     goto error;
+    if ((dcpl_id=H5Dget_create_plist(dset_id))<0)
+     goto error;
+
+ /*-------------------------------------------------------------------------
+  * filter check
+  *-------------------------------------------------------------------------
+  */
+    if (options->all_filter==1 ){
+     if (has_filter(dcpl_id,options->filter_g.filtn)==0)
+      ret=0;
+    }
+
+ /*-------------------------------------------------------------------------
+  * layout check
+  *-------------------------------------------------------------------------
+  */
+    if (options->all_layout==1){
+     pack_info_t pack;
+     init_packobject(&pack);
+     pack.layout=options->layout_g;
+     pack.chunk=options->chunk_g;
+     if (has_layout(dcpl_id,&pack)==0)
+      ret=0;
+    }
+
+
+  /*-------------------------------------------------------------------------
+   * close
+   *-------------------------------------------------------------------------
+   */
+    if (H5Pclose(dcpl_id)<0)
+     goto error;
+    if (H5Sclose(space_id)<0)
+     goto error;
+    if (H5Dclose(dset_id)<0)
+     goto error;
+
+    break;
+   default:
+    break;
+   } /* switch */
+
+  } /* i */
+
+  /* free table */
+  trav_table_free(travt);
+ }
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+
+ if (H5Fclose(fid)<0)
+  return -1;
+
+ return ret;
+
+error:
+ H5E_BEGIN_TRY {
+  H5Pclose(dcpl_id);
+  H5Sclose(space_id);
+  H5Dclose(dset_id);
+  H5Fclose(fid);
+  if (travt)
+   trav_table_free(travt);
+ } H5E_END_TRY;
+ return -1;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: h5repack_cmpdcpl
+ *
+ * Purpose: compare 2 files for identical property lists of all objects
+ *
+ * Return: 1=identical, 0=not identical, -1=error
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: December 31, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int h5repack_cmpdcpl(const char *fname1,
+                     const char *fname2)
+{
+ hid_t         fid1=-1;       /* file ID */
+ hid_t         fid2=-1;       /* file ID */
+ hid_t         dset1=-1;      /* dataset ID */
+ hid_t         dset2=-1;      /* dataset ID */
+ hid_t         dcpl1=-1;      /* dataset creation property list ID */
+ hid_t         dcpl2=-1;      /* dataset creation property list ID */
+ trav_table_t  *travt1=NULL;
+ trav_table_t  *travt2=NULL;
+ int           ret=1, i;
+
+/*-------------------------------------------------------------------------
+ * open the files first; if they are not valid, no point in continuing
+ *-------------------------------------------------------------------------
+ */
+
+ /* disable error reporting */
+ H5E_BEGIN_TRY {
+
+ /* Open the files */
+ if ((fid1=H5Fopen(fname1,H5F_ACC_RDONLY,H5P_DEFAULT))<0 )
+ {
+  printf("h5repack: <%s>: %s\n", fname1, H5FOPENERROR );
+  return -1;
+ }
+ if ((fid2=H5Fopen(fname2,H5F_ACC_RDONLY,H5P_DEFAULT))<0 )
+ {
+  printf("h5repack: <%s>: %s\n", fname2, H5FOPENERROR );
+  H5Fclose(fid1);
+  return -1;
+ }
+ /* enable error reporting */
+ } H5E_END_TRY;
+
+/*-------------------------------------------------------------------------
+ * get file table list of objects
+ *-------------------------------------------------------------------------
+ */
+ trav_table_init(&travt1);
+ trav_table_init(&travt2);
+ if (h5trav_gettable(fid1,travt1)<0)
+  goto error;
+ if (h5trav_gettable(fid2,travt2)<0)
+  goto error;
+
+
+/*-------------------------------------------------------------------------
+ * traverse the suppplied object list
+ *-------------------------------------------------------------------------
+ */
+
+ for ( i=0; i < travt1->nobjs; i++)
+ {
+  switch ( travt1->objs[i].type )
+  {
+/*-------------------------------------------------------------------------
+ * nothing to do for groups, links and types
+ *-------------------------------------------------------------------------
+ */
+  default:
+   break;
+
+/*-------------------------------------------------------------------------
+ * H5G_DATASET
+ *-------------------------------------------------------------------------
+ */
+  case H5G_DATASET:
+   if ((dset1=H5Dopen(fid1,travt1->objs[i].name))<0)
+    goto error;
+   if ((dset2=H5Dopen(fid2,travt1->objs[i].name))<0)
+    goto error;
+   if ((dcpl1=H5Dget_create_plist(dset1))<0)
+    goto error;
+   if ((dcpl2=H5Dget_create_plist(dset2))<0)
+    goto error;
+
+/*-------------------------------------------------------------------------
+ * compare the property lists
+ *-------------------------------------------------------------------------
+ */
+   if ((ret=H5Pequal(dcpl1,dcpl2))<0)
+    goto error;
+
+   if (ret==0)
+   {
+    printf("Property lists for <%s> are different\n",travt1->objs[i].name);
+    goto error;
+   }
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+   if (H5Pclose(dcpl1)<0)
+    goto error;
+   if (H5Pclose(dcpl2)<0)
+    goto error;
+   if (H5Dclose(dset1)<0)
+    goto error;
+   if (H5Dclose(dset2)<0)
+    goto error;
+
+   break;
+
+  } /*switch*/
+ } /*i*/
+
+/*-------------------------------------------------------------------------
+ * free
+ *-------------------------------------------------------------------------
+ */
+
+ trav_table_free(travt1);
+ trav_table_free(travt2);
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+
+ H5Fclose(fid1);
+ H5Fclose(fid2);
+ return ret;
+
+/*-------------------------------------------------------------------------
+ * error
+ *-------------------------------------------------------------------------
+ */
+
+error:
+ H5E_BEGIN_TRY {
+ H5Pclose(dcpl1);
+ H5Pclose(dcpl2);
+ H5Dclose(dset1);
+ H5Dclose(dset2);
+ H5Fclose(fid1);
+ H5Fclose(fid2);
+ trav_table_free(travt1);
+ trav_table_free(travt2);
+ } H5E_END_TRY;
+ return -1;
+
+}

Added: packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_attr.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_attr.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_attr.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1032 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "h5test.h"
+#include "h5repack.h"
+
+/*-------------------------------------------------------------------------
+ * Function: write_attr_in
+ *
+ * Purpose: write attributes in LOC_ID (dataset, group, named datatype)
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 12, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+void write_attr_in(hid_t loc_id,
+                   const char* dset_name, /* for saving reference to dataset*/
+                   hid_t fid, /* for reference create */
+                   int make_diffs /* flag to modify data buffers */)
+{
+ /* Compound datatype */
+ typedef struct s_t
+ {
+  char   a;
+  double b;
+ } s_t;
+
+ typedef enum
+ {
+  RED,
+  GREEN
+ } e_t;
+
+ hid_t   attr_id;
+ hid_t   space_id;
+ hid_t   type_id;
+ herr_t  status;
+ int     val, i, j, k, n;
+ float   f;
+
+ /* create 1D attributes with dimension [2], 2 elements */
+ hsize_t    dims[1]={2};
+ char       buf1[2][2]= {"ab","de"};        /* string */
+ char       buf2[2]= {1,2};                 /* bitfield, opaque */
+ s_t        buf3[2]= {{1,2},{3,4}};         /* compound */
+ hobj_ref_t buf4[2];                        /* reference */
+ e_t        buf45[2]= {RED,RED};            /* enum */
+ hvl_t      buf5[2];                        /* vlen */
+ hsize_t    dimarray[1]={3};                /* array dimension */
+ int        buf6[2][3]= {{1,2,3},{4,5,6}};  /* array */
+ int        buf7[2]= {1,2};                 /* integer */
+ float      buf8[2]= {1,2};                 /* float */
+
+ /* create 2D attributes with dimension [3][2], 6 elements */
+ hsize_t    dims2[2]={3,2};
+ char       buf12[6][2]= {"ab","cd","ef","gh","ij","kl"};         /* string */
+ char       buf22[3][2]= {{1,2},{3,4},{5,6}};                     /* bitfield, opaque */
+ s_t        buf32[6]= {{1,2},{3,4},{5,6},{7,8},{9,10},{11,12}};   /* compound */
+ hobj_ref_t buf42[3][2];                                          /* reference */
+ e_t        buf452[3][2];                                         /* enum */
+ hvl_t      buf52[3][2];                                          /* vlen */
+ int        buf62[6][3]= {{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15},{16,17,18}};  /* array */
+ int        buf72[3][2]= {{1,2},{3,4},{5,6}};                     /* integer */
+ float      buf82[3][2]= {{1,2},{3,4},{5,6}};                     /* float */
+
+ /* create 3D attributes with dimension [4][3][2], 24 elements */
+ hsize_t    dims3[3]={4,3,2};
+ char       buf13[24][2]= {"ab","cd","ef","gh","ij","kl","mn","pq",
+ "rs","tu","vw","xz","AB","CD","EF","GH",
+ "IJ","KL","MN","PQ","RS","TU","VW","XZ"};  /* string */
+ char       buf23[4][3][2];    /* bitfield, opaque */
+ s_t        buf33[4][3][2];    /* compound */
+ hobj_ref_t buf43[4][3][2];    /* reference */
+ e_t        buf453[4][3][2];   /* enum */
+ hvl_t      buf53[4][3][2];    /* vlen */
+ int        buf63[24][3];      /* array */
+ int        buf73[4][3][2];    /* integer */
+ float      buf83[4][3][2];    /* float */
+
+
+/*-------------------------------------------------------------------------
+ * 1D attributes
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+   for (j=0; j<2; j++)
+   {
+    buf1[i][j]='z';
+   }
+ }
+ /*
+ buf1[2][2]= {"ab","de"};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ Attribute:   <string> and <string>
+ position      string of </g1>  string of </g1> difference
+ ------------------------------------------------------------
+[ 0 ]          a                z
+[ 0 ]          b                z
+[ 1 ]          d                z
+[ 1 ]          e                z
+ */
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ make_attr(loc_id,1,dims,"string",type_id,buf1);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+   buf2[i]=buf2[1]=0;
+ }
+ /*
+ buf2[2]= {1,2};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ Attribute:   <bitfield> and <bitfield>
+ position      bitfield of </g1> bitfield of </g1> difference
+ position        opaque of </g1> opaque of </g1> difference
+------------------------------------------------------------
+[ 0 ]          1               0               1
+[ 1 ]          2               0               2
+ */
+
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ make_attr(loc_id,1,dims,"bitfield",type_id,buf2);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+
+ /*
+ buf2[2]= {1,2};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ Attribute:   <opaque> and <opaque>
+ position     opaque of </g1> opaque of </g1> difference
+ position        opaque of </g1> opaque of </g1> difference
+------------------------------------------------------------
+[ 0 ]          1               0               1
+[ 1 ]          2               0               2
+*/
+
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ make_attr(loc_id,1,dims,"opaque",type_id,buf2);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+  {
+   buf3[i].a=0; buf3[i].b=0;
+  }
+ }
+
+ /*
+ buf3[2]= {{1,2},{3,4}};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ Attribute:   <compound> and <compound>
+ position        compound of </g1> compound of </g1> difference
+ ------------------------------------------------------------
+ [ 0 ]          1               5               4
+ [ 0 ]          2               5               3
+ [ 1 ]          3               5               2
+ [ 1 ]          4               5               1
+ */
+
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ make_attr(loc_id,1,dims,"compound",type_id,buf3);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* object references ( H5R_OBJECT  */
+ if (dset_name)
+ {
+  status=H5Rcreate(&buf4[0],fid,dset_name,H5R_OBJECT,-1);
+  status=H5Rcreate(&buf4[1],fid,dset_name,H5R_OBJECT,-1);
+  make_attr(loc_id,1,dims,"reference to object",H5T_STD_REF_OBJ,buf4);
+ }
+
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+  {
+   buf45[i]=GREEN;
+  }
+ }
+ /*
+ buf45[2]= {RED,RED};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ Attribute:   <enum> and <enum>
+ position     enum of </g1>   enum of </g1>   difference
+------------------------------------------------------------
+[ 0 ]          RED              GREEN
+[ 1 ]          RED              GREEN
+ */
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ make_attr(loc_id,1,dims,"enum",type_id,buf45);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+
+ buf5[0].len = 1;
+ buf5[0].p = malloc( 1 * sizeof(int));
+ ((int *)buf5[0].p)[0]=1;
+ buf5[1].len = 2;
+ buf5[1].p = malloc( 2 * sizeof(int));
+ ((int *)buf5[1].p)[0]=2;
+ ((int *)buf5[1].p)[1]=3;
+
+ if (make_diffs)
+ {
+  ((int *)buf5[0].p)[0]=0;
+  ((int *)buf5[1].p)[0]=0;
+  ((int *)buf5[1].p)[1]=0;
+ }
+ /*
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ position        vlen of </g1>   vlen of </g1>   difference
+------------------------------------------------------------
+[ 0 ]          1               0               1
+[ 1 ]          2               0               2
+[ 1 ]          3               0               3
+ */
+
+ space_id = H5Screate_simple(1,dims,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ attr_id = H5Acreate(loc_id,"vlen",type_id,space_id,H5P_DEFAULT);
+ status = H5Awrite(attr_id,type_id,buf5);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf5);
+ assert(status>=0);
+ status = H5Aclose(attr_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+   for (j=0; j<3; j++)
+   {
+    buf6[i][j]=0;
+   }
+ }
+ /*
+ buf6[2][3]= {{1,2,3},{4,5,6}};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ Attribute:   <array> and <array>
+position        array of </g1>  array of </g1>  difference
+------------------------------------------------------------
+[ 0 ]          1               0               1
+[ 0 ]          2               0               2
+[ 0 ]          3               0               3
+[ 1 ]          4               0               4
+[ 1 ]          5               0               5
+[ 1 ]          6               0               6
+ */
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ make_attr(loc_id,1,dims,"array",type_id,buf6);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+  {
+   buf7[i]=0;
+   buf8[i]=0;
+  }
+ }
+ /*
+ buf7[2]= {1,2};
+ buf8[2]= {1,2};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+ position        integer of </g1> integer of </g1> difference
+ ------------------------------------------------------------
+ [ 0 ]          1               0               1
+ [ 1 ]          2               0               2
+ position        float of </g1>  float of </g1>  difference
+ ------------------------------------------------------------
+ [ 0 ]          1               0               1
+ [ 1 ]          2               0               2
+ */
+ make_attr(loc_id,1,dims,"integer",H5T_NATIVE_INT,buf7);
+ make_attr(loc_id,1,dims,"float",H5T_NATIVE_FLOAT,buf8);
+
+
+/*-------------------------------------------------------------------------
+ * 2D attributes
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+ if (make_diffs)
+ {
+  memset(buf12, 'z', sizeof buf12);
+ }
+
+ /*
+ buf12[6][2]= {"ab","cd","ef","gh","ij","kl"};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Attribute:   <string2D> and <string2D>
+ position        string2D of </g1> string2D of </g1> difference
+ ------------------------------------------------------------
+[ 0 0 ]          a                z
+[ 0 0 ]          b                z
+[ 0 1 ]          c                z
+[ 0 1 ]          d                z
+[ 1 0 ]          e                z
+[ 1 0 ]          f                z
+[ 1 1 ]          g                z
+[ 1 1 ]          h                z
+[ 2 0 ]          i                z
+[ 2 0 ]          j                z
+[ 2 1 ]          k                z
+[ 2 1 ]          l                z
+ */
+
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ make_attr(loc_id,2,dims2,"string2D",type_id,buf12);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf22,0,sizeof buf22);
+ }
+
+ /*
+ buf22[3][2]= {{1,2},{3,4},{5,6}};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Attribute:   <bitfield2D> and <bitfield2D>
+ position        bitfield2D of </g1> bitfield2D of </g1> difference
+------------------------------------------------------------
+[ 0 0 ]          1               0               1
+[ 0 1 ]          2               0               2
+[ 1 0 ]          3               0               3
+[ 1 1 ]          4               0               4
+[ 2 0 ]          5               0               5
+[ 2 1 ]          6               0               6
+ */
+
+
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ make_attr(loc_id,2,dims2,"bitfield2D",type_id,buf22);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+
+ /*
+ buf22[3][2]= {{1,2},{3,4},{5,6}};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Attribute:   <opaque2D> and <opaque2D>
+ position        opaque2D of </g1> opaque2D of </g1> difference
+------------------------------------------------------------
+[ 0 0 ]          1               0               1
+[ 0 1 ]          2               0               2
+[ 1 0 ]          3               0               3
+[ 1 1 ]          4               0               4
+[ 2 0 ]          5               0               5
+[ 2 1 ]          6               0               6
+ */
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ make_attr(loc_id,2,dims2,"opaque2D",type_id,buf22);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+ if (make_diffs)
+ {
+  memset(buf32,0,sizeof buf32);
+ }
+
+ /*
+ buf32[6]= {{1,2},{3,4},{5,6},{7,8},{9,10},{11,12}};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Attribute:   <opaque2D> and <opaque2D>
+ position        opaque2D of </g1> opaque2D of </g1> difference
+------------------------------------------------------------
+[ 0 0 ]          1               0               1
+[ 0 1 ]          2               0               2
+[ 1 0 ]          3               0               3
+[ 1 1 ]          4               0               4
+[ 2 0 ]          5               0               5
+[ 2 1 ]          6               0               6
+ */
+
+
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ make_attr(loc_id,2,dims2,"compound2D",type_id,buf32);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  for (i = 0; i < 3; i++) {
+   for (j = 0; j < 2; j++) {
+    status=H5Rcreate(&buf42[i][j],fid,dset_name,H5R_OBJECT,-1);
+   }
+  }
+  make_attr(loc_id,2,dims2,"reference2D",H5T_STD_REF_OBJ,buf42);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+ for (i=0; i<3; i++)
+  for (j=0; j<2; j++)
+  {
+   if (make_diffs) buf452[i][j]=GREEN; else buf452[i][j]=RED;
+  }
+
+/*
+Attribute:   <enum2D> and <enum2D>
+position        enum2D of </g1> enum2D of </g1> difference
+------------------------------------------------------------
+[ 0 0 ]          RED              GREEN
+[ 0 1 ]          RED              GREEN
+[ 1 0 ]          RED              GREEN
+[ 1 1 ]          RED              GREEN
+[ 2 0 ]          RED              GREEN
+[ 2 1 ]          RED              GREEN
+*/
+
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ make_attr(loc_id,2,dims2,"enum2D",type_id,buf452);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+ n=0;
+ for (i = 0; i < 3; i++) {
+  for (j = 0; j < 2; j++) {
+    int l;
+    buf52[i][j].p = malloc((i + 1) * sizeof(int));
+    buf52[i][j].len = i + 1;
+    for (l = 0; l < i + 1; l++)
+    if (make_diffs)((int *)buf52[i][j].p)[l] = 0;
+    else ((int *)buf52[i][j].p)[l] = n++;
+  }
+ }
+
+ /*
+ position        vlen2D of </g1> vlen2D of </g1> difference
+------------------------------------------------------------
+[ 0 1 ]          1               0               1
+[ 1 0 ]          2               0               2
+[ 1 0 ]          3               0               3
+[ 1 1 ]          4               0               4
+[ 1 1 ]          5               0               5
+[ 2 0 ]          6               0               6
+[ 2 0 ]          7               0               7
+[ 2 0 ]          8               0               8
+[ 2 1 ]          9               0               9
+[ 2 1 ]          10              0               10
+[ 2 1 ]          11              0               11
+*/
+
+ space_id = H5Screate_simple(2,dims2,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ attr_id = H5Acreate(loc_id,"vlen2D",type_id,space_id,H5P_DEFAULT);
+ status = H5Awrite(attr_id,type_id,buf52);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf52);
+ assert(status>=0);
+ status = H5Aclose(attr_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf62,0,sizeof buf62);
+ }
+ /*
+ buf62[6][3]= {{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15},{16,17,18}};
+ $h5diff file7.h5 file6.h5 g1 g1 -v
+ Group:       </g1> and </g1>
+Attribute:   <array2D> and <array2D>
+position        array2D of </g1> array2D of </g1> difference
+------------------------------------------------------------
+[ 0 0 ]          1               0               1
+[ 0 0 ]          2               0               2
+[ 0 0 ]          3               0               3
+[ 0 1 ]          4               0               4
+[ 0 1 ]          5               0               5
+[ 0 1 ]          6               0               6
+[ 1 0 ]          7               0               7
+[ 1 0 ]          8               0               8
+[ 1 0 ]          9               0               9
+[ 1 1 ]          10              0               10
+[ 1 1 ]          11              0               11
+[ 1 1 ]          12              0               12
+[ 2 0 ]          13              0               13
+[ 2 0 ]          14              0               14
+[ 2 0 ]          15              0               15
+[ 2 1 ]          16              0               16
+[ 2 1 ]          17              0               17
+[ 2 1 ]          18              0               18
+ */
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ make_attr(loc_id,2,dims2,"array2D",type_id,buf62);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf72,0,sizeof buf72);
+  memset(buf82,0,sizeof buf82);
+ }
+/*
+Attribute:   <integer2D> and <integer2D>
+position        integer2D of </g1> integer2D of </g1> difference
+------------------------------------------------------------
+[ 0 0 ]          1               0               1
+[ 0 1 ]          2               0               2
+[ 1 0 ]          3               0               3
+[ 1 1 ]          4               0               4
+[ 2 0 ]          5               0               5
+[ 2 1 ]          6               0               6
+6 differences found
+Attribute:   <float2D> and <float2D>
+position        float2D of </g1> float2D of </g1> difference
+------------------------------------------------------------
+[ 0 0 ]          1               0               1
+[ 0 1 ]          2               0               2
+[ 1 0 ]          3               0               3
+[ 1 1 ]          4               0               4
+[ 2 0 ]          5               0               5
+[ 2 1 ]          6               0               6
+*/
+
+ make_attr(loc_id,2,dims2,"integer2D",H5T_NATIVE_INT,buf72);
+ make_attr(loc_id,2,dims2,"float2D",H5T_NATIVE_FLOAT,buf82);
+
+
+/*-------------------------------------------------------------------------
+ * 3D attributes
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf13,'z',sizeof buf13);
+ }
+
+ /*
+ buf13[24][2]= {"ab","cd","ef","gh","ij","kl","mn","pq",
+ "rs","tu","vw","xz","AB","CD","EF","GH",
+ "IJ","KL","MN","PQ","RS","TU","VW","XZ"};
+
+Attribute:   <string3D> and <string3D>
+position        string3D of </g1> string3D of </g1> difference
+------------------------------------------------------------
+[ 0 0 0 ]          a                z
+[ 0 0 0 ]          b                z
+[ 0 0 1 ]          c                z
+[ 0 0 1 ]          d                z
+[ 0 1 0 ]          e                z
+[ 0 1 0 ]          f                z
+[ 0 1 1 ]          g                z
+[ 0 1 1 ]          h                z
+[ 0 2 0 ]          i                z
+[ 0 2 0 ]          j                z
+[ 0 2 1 ]          k                z
+[ 0 2 1 ]          l                z
+[ 1 0 0 ]          m                z
+[ 1 0 0 ]          n                z
+[ 1 0 1 ]          p                z
+[ 1 0 1 ]          q                z
+[ 1 1 0 ]          r                z
+[ 1 1 0 ]          s                z
+[ 1 1 1 ]          t                z
+[ 1 1 1 ]          u                z
+[ 1 2 0 ]          v                z
+[ 1 2 0 ]          w                z
+[ 1 2 1 ]          x                z
+[ 2 0 0 ]          A                z
+[ 2 0 0 ]          B                z
+[ 2 0 1 ]          C                z
+[ 2 0 1 ]          D                z
+[ 2 1 0 ]          E                z
+[ 2 1 0 ]          F                z
+[ 2 1 1 ]          G                z
+[ 2 1 1 ]          H                z
+[ 2 2 0 ]          I                z
+[ 2 2 0 ]          J                z
+[ 2 2 1 ]          K                z
+[ 2 2 1 ]          L                z
+[ 3 0 0 ]          M                z
+[ 3 0 0 ]          N                z
+[ 3 0 1 ]          P                z
+[ 3 0 1 ]          Q                z
+[ 3 1 0 ]          R                z
+[ 3 1 0 ]          S                z
+[ 3 1 1 ]          T                z
+[ 3 1 1 ]          U                z
+[ 3 2 0 ]          V                z
+[ 3 2 0 ]          W                z
+[ 3 2 1 ]          X                z
+[ 3 2 1 ]          Z                z
+ */
+
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ make_attr(loc_id,3,dims3,"string3D",type_id,buf13);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+
+ n=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    if (make_diffs) buf23[i][j][k]=0;
+    else buf23[i][j][k]=n++;
+   }
+  }
+ }
+
+/*
+position        bitfield3D of </g1> bitfield3D of </g1> difference
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1
+[ 0 0 1 ]          2               0               2
+[ 0 1 0 ]          3               0               3
+[ 0 1 1 ]          4               0               4
+[ 0 2 0 ]          5               0               5
+[ 0 2 1 ]          6               0               6
+[ 1 0 0 ]          7               0               7
+[ 1 0 1 ]          8               0               8
+[ 1 1 0 ]          9               0               9
+[ 1 1 1 ]          10              0               10
+[ 1 2 0 ]          11              0               11
+[ 1 2 1 ]          12              0               12
+[ 2 0 0 ]          13              0               13
+[ 2 0 1 ]          14              0               14
+[ 2 1 0 ]          15              0               15
+[ 2 1 1 ]          16              0               16
+[ 2 2 0 ]          17              0               17
+[ 2 2 1 ]          18              0               18
+[ 3 0 0 ]          19              0               19
+[ 3 0 1 ]          20              0               20
+[ 3 1 0 ]          21              0               21
+[ 3 1 1 ]          22              0               22
+[ 3 2 0 ]          23              0               23
+[ 3 2 1 ]          24              0               24
+*/
+
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ make_attr(loc_id,3,dims3,"bitfield3D",type_id,buf23);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ make_attr(loc_id,3,dims3,"opaque3D",type_id,buf23);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+
+ n=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    if (make_diffs) {
+     buf33[i][j][k].a=0;
+     buf33[i][j][k].b=0;
+    }
+    else {
+     buf33[i][j][k].a=n++;
+     buf33[i][j][k].b=n++;
+    }
+   }
+  }
+ }
+/*position        compound3D of </g1> compound3D of </g1> difference
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1
+[ 0 0 0 ]          2               0               2
+[ 0 0 1 ]          3               0               3
+[ 0 0 1 ]          4               0               4
+[ 0 1 0 ]          5               0               5
+[ 0 1 0 ]          6               0               6
+[ 0 1 1 ]          7               0               7
+[ 0 1 1 ]          8               0               8
+[ 0 2 0 ]          9               0               9
+[ 0 2 0 ]          10              0               10
+[ 0 2 1 ]          11              0               11
+[ 0 2 1 ]          12              0               12
+[ 1 0 0 ]          13              0               13
+[ 1 0 0 ]          14              0               14
+[ 1 0 1 ]          15              0               15
+[ 1 0 1 ]          16              0               16
+[ 1 1 0 ]          17              0               17
+[ 1 1 0 ]          18              0               18
+[ 1 1 1 ]          19              0               19
+[ 1 1 1 ]          20              0               20
+[ 1 2 0 ]          21              0               21
+[ 1 2 0 ]          22              0               22
+[ 1 2 1 ]          23              0               23
+[ 1 2 1 ]          24              0               24
+[ 2 0 0 ]          25              0               25
+[ 2 0 0 ]          26              0               26
+[ 2 0 1 ]          27              0               27
+[ 2 0 1 ]          28              0               28
+[ 2 1 0 ]          29              0               29
+[ 2 1 0 ]          30              0               30
+[ 2 1 1 ]          31              0               31
+[ 2 1 1 ]          32              0               32
+[ 2 2 0 ]          33              0               33
+[ 2 2 0 ]          34              0               34
+[ 2 2 1 ]          35              0               35
+[ 2 2 1 ]          36              0               36
+[ 3 0 0 ]          37              0               37
+[ 3 0 0 ]          38              0               38
+[ 3 0 1 ]          39              0               39
+[ 3 0 1 ]          40              0               40
+[ 3 1 0 ]          41              0               41
+[ 3 1 0 ]          42              0               42
+[ 3 1 1 ]          43              0               43
+[ 3 1 1 ]          44              0               44
+[ 3 2 0 ]          45              0               45
+[ 3 2 0 ]          46              0               46
+[ 3 2 1 ]          47              0               47
+[ 3 2 1 ]          48              0               48
+*/
+
+
+
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ make_attr(loc_id,3,dims3,"compound3D",type_id,buf33);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  for (i = 0; i < 4; i++) {
+   for (j = 0; j < 3; j++) {
+    for (k = 0; k < 2; k++)
+     status=H5Rcreate(&buf43[i][j][k],fid,dset_name,H5R_OBJECT,-1);
+   }
+  }
+ make_attr(loc_id,3,dims3,"reference3D",H5T_STD_REF_OBJ,buf43);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    if (make_diffs) buf453[i][j][k]=RED; else buf453[i][j][k]=GREEN;
+   }
+  }
+ }
+
+/*
+position        enum3D of </g1> enum3D of </g1> difference
+------------------------------------------------------------
+[ 0 0 0 ]          GREEN            RED
+[ 0 0 1 ]          GREEN            RED
+[ 0 1 0 ]          GREEN            RED
+[ 0 1 1 ]          GREEN            RED
+[ 0 2 0 ]          GREEN            RED
+[ 0 2 1 ]          GREEN            RED
+[ 1 0 0 ]          GREEN            RED
+[ 1 0 1 ]          GREEN            RED
+[ 1 1 0 ]          GREEN            RED
+[ 1 1 1 ]          GREEN            RED
+[ 1 2 0 ]          GREEN            RED
+[ 1 2 1 ]          GREEN            RED
+[ 2 0 0 ]          GREEN            RED
+[ 2 0 1 ]          GREEN            RED
+[ 2 1 0 ]          GREEN            RED
+[ 2 1 1 ]          GREEN            RED
+[ 2 2 0 ]          GREEN            RED
+[ 2 2 1 ]          GREEN            RED
+[ 3 0 0 ]          GREEN            RED
+[ 3 0 1 ]          GREEN            RED
+[ 3 1 0 ]          GREEN            RED
+[ 3 1 1 ]          GREEN            RED
+[ 3 2 0 ]          GREEN            RED
+[ 3 2 1 ]          GREEN            RED
+*/
+
+
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ make_attr(loc_id,3,dims3,"enum3D",type_id,buf453);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+ n=0;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    int l;
+    buf53[i][j][k].p = malloc((i + 1) * sizeof(int));
+    buf53[i][j][k].len = i + 1;
+    for (l = 0; l < i + 1; l++)
+    if (make_diffs)((int *)buf53[i][j][k].p)[l] = 0;
+    else ((int *)buf53[i][j][k].p)[l] = n++;
+   }
+  }
+ }
+/*
+position        vlen3D of </g1> vlen3D of </g1> difference
+------------------------------------------------------------
+[ 0 0 1 ]          1               0               1
+[ 0 1 0 ]          2               0               2
+[ 0 1 1 ]          3               0               3
+[ 0 2 0 ]          4               0               4
+[ 0 2 1 ]          5               0               5
+[ 1 0 0 ]          6               0               6
+[ 1 0 0 ]          7               0               7
+[ 1 0 1 ]          8               0               8
+[ 1 0 1 ]          9               0               9
+[ 1 1 0 ]          10              0               10
+etc
+*/
+ space_id = H5Screate_simple(3,dims3,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ attr_id = H5Acreate(loc_id,"vlen3D",type_id,space_id,H5P_DEFAULT);
+ status = H5Awrite(attr_id,type_id,buf53);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf53);
+ assert(status>=0);
+ status = H5Aclose(attr_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+ n=1;
+ for (i = 0; i < 24; i++) {
+  for (j = 0; j < (int)dimarray[0]; j++) {
+    if (make_diffs) buf63[i][j]=0;
+    else buf63[i][j]=n++;
+  }
+ }
+ /*
+ position        array3D of </g1> array3D of </g1> difference
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1
+[ 0 0 0 ]          2               0               2
+[ 0 0 0 ]          3               0               3
+[ 0 0 1 ]          4               0               4
+[ 0 0 1 ]          5               0               5
+[ 0 0 1 ]          6               0               6
+[ 0 1 0 ]          7               0               7
+etc
+*/
+
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ make_attr(loc_id,3,dims3,"array3D",type_id,buf63);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+ n=1; f=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    if (make_diffs) {
+     buf73[i][j][k]=0;
+     buf83[i][j][k]=0;
+    }
+    else {
+     buf73[i][j][k]=n++;
+     buf83[i][j][k]=f++;
+    }
+   }
+  }
+ }
+
+ /*
+ position        integer3D of </g1> integer3D of </g1> difference
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1
+[ 0 0 1 ]          2               0               2
+[ 0 1 0 ]          3               0               3
+[ 0 1 1 ]          4               0               4
+[ 0 2 0 ]          5               0               5
+[ 0 2 1 ]          6               0               6
+[ 1 0 0 ]          7               0               7
+[ 1 0 1 ]          8               0               8
+[ 1 1 0 ]          9               0               9
+[ 1 1 1 ]          10              0               10
+etc
+*/
+ make_attr(loc_id,3,dims3,"integer3D",H5T_NATIVE_INT,buf73);
+ make_attr(loc_id,3,dims3,"float3D",H5T_NATIVE_FLOAT,buf83);
+}
+
+
+

Added: packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_detect_szip.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_detect_szip.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_detect_szip.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdio.h>
+#include "hdf5.h"
+#include "h5test.h"
+#include "h5repack.h"
+
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ * Purpose: detects szip encoder, prints "yes" or "no" to stdout.
+ *          Intended to be used in test scripts.
+ *
+ * Return:
+ *
+ * Programmer:
+ *
+ * Date:
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+int main(void)
+{
+#ifdef H5_HAVE_FILTER_SZIP
+    if (h5tools_can_encode(H5Z_FILTER_SZIP) == 1) {
+        printf("yes\n");
+        return(1);
+    }
+#endif /* H5_HAVE_FILTER_SZIP */
+    printf("no\n");
+    return(0);
+}

Added: packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_dset.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_dset.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_dset.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,697 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "h5test.h"
+#include "h5repack.h"
+
+static void make_dset_reg_ref(hid_t loc_id);
+
+
+/*-------------------------------------------------------------------------
+ * Function: write_dset_in
+ *
+ * Purpose: write datasets in LOC_ID
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 12, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+void write_dset_in(hid_t loc_id,
+                   const char* dset_name, /* for saving reference to dataset*/
+                   hid_t file_id,
+                   int make_diffs /* flag to modify data buffers */)
+{
+ /* Compound datatype */
+ typedef struct s_t
+ {
+  char   a;
+  double b;
+ } s_t;
+
+ typedef enum
+ {
+  RED,
+  GREEN
+ } e_t;
+
+ hid_t   dset_id;
+ hid_t   space_id;
+ hid_t   type_id;
+ hid_t   plist_id;
+ herr_t  status;
+ int     val, i, j, k, n;
+ float   f;
+
+ /* create 1D attributes with dimension [2], 2 elements */
+ hsize_t    dims[1]={2};
+ hsize_t    dims1r[1]={1};
+ char       buf1[2][2]= {"ab","de"};        /* string */
+ char       buf2[2]= {1,2};                 /* bitfield, opaque */
+ s_t        buf3[2]= {{1,2},{3,4}};         /* compound */
+ hobj_ref_t buf4[1];                        /* reference */
+ e_t        buf45[2]= {RED,GREEN};          /* enum */
+ hvl_t      buf5[2];                        /* vlen */
+ hsize_t    dimarray[1]={3};                /* array dimension */
+ int        buf6[2][3]= {{1,2,3},{4,5,6}};  /* array */
+ int        buf7[2]= {1,2};                 /* integer */
+ float      buf8[2]= {1,2};                 /* float */
+
+ /* create 2D attributes with dimension [3][2], 6 elements */
+ hsize_t    dims2[2]={3,2};
+ hsize_t    dims2r[2]={1,1};
+ char       buf12[6][2]= {"ab","cd","ef","gh","ij","kl"};         /* string */
+ char       buf22[3][2]= {{1,2},{3,4},{5,6}};                     /* bitfield, opaque */
+ s_t        buf32[6]= {{1,2},{3,4},{5,6},{7,8},{9,10},{11,12}};   /* compound */
+ hobj_ref_t buf42[1][1];                                          /* reference */
+ hvl_t      buf52[3][2];                                          /* vlen */
+ int        buf62[6][3]= {{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15},{16,17,18}};  /* array */
+ int        buf72[3][2]= {{1,2},{3,4},{5,6}};                     /* integer */
+ float      buf82[3][2]= {{1,2},{3,4},{5,6}};                     /* float */
+
+ /* create 3D attributes with dimension [4][3][2], 24 elements */
+ hsize_t    dims3[3]={4,3,2};
+ hsize_t    dims3r[3]={1,1,1};
+ char       buf13[24][2]= {"ab","cd","ef","gh","ij","kl","mn","pq",
+ "rs","tu","vw","xz","AB","CD","EF","GH",
+ "IJ","KL","MN","PQ","RS","TU","VW","XZ"};  /* string */
+ char       buf23[4][3][2];    /* bitfield, opaque */
+ s_t        buf33[4][3][2];    /* compound */
+ hobj_ref_t buf43[1][1][1];    /* reference */
+ hvl_t      buf53[4][3][2];    /* vlen */
+ int        buf63[24][3];      /* array */
+ int        buf73[4][3][2];    /* integer */
+ float      buf83[4][3][2];    /* float */
+
+
+/*-------------------------------------------------------------------------
+ * 1D
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+   for (j=0; j<2; j++)
+   {
+    buf1[i][j]='z';
+   }
+ }
+
+
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ write_dset(loc_id,1,dims,"string",type_id,buf1);
+ status = H5Tclose(type_id);
+
+
+ /* create hard link */
+ status = H5Glink(loc_id, H5G_LINK_HARD, "string", "string_link");
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+   buf2[i]=buf2[1]=0;
+ }
+
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_dset(loc_id,1,dims,"bitfield",type_id,buf2);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+  {
+   buf3[i].a=0; buf3[i].b=0;
+  }
+ }
+
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_dset(loc_id,1,dims,"opaque",type_id,buf2);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+  {
+   buf45[i]=GREEN;
+  }
+ }
+
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_dset(loc_id,1,dims,"compound",type_id,buf3);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* object references ( H5R_OBJECT ) */
+ if (dset_name)
+ {
+  status=H5Rcreate(&buf4[0],file_id,dset_name,H5R_OBJECT,-1);
+  write_dset(loc_id,1,dims1r,"refobj",H5T_STD_REF_OBJ,buf4);
+ }
+
+ /* Dataset region reference ( H5R_DATASET_REGION  )  */
+ make_dset_reg_ref(loc_id);
+
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_dset(loc_id,1,dims,"enum",type_id,buf45);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+
+ buf5[0].len = 1;
+ buf5[0].p = malloc( 1 * sizeof(int));
+ ((int *)buf5[0].p)[0]=1;
+ buf5[1].len = 2;
+ buf5[1].p = malloc( 2 * sizeof(int));
+ ((int *)buf5[1].p)[0]=2;
+ ((int *)buf5[1].p)[1]=3;
+
+ if (make_diffs)
+ {
+  ((int *)buf5[0].p)[0]=0;
+  ((int *)buf5[1].p)[0]=0;
+  ((int *)buf5[1].p)[1]=0;
+ }
+
+ space_id = H5Screate_simple(1,dims,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ dset_id = H5Dcreate(loc_id,"vlen",type_id,space_id,H5P_DEFAULT);
+ status = H5Dwrite(dset_id,type_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf5);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf5);
+ assert(status>=0);
+ status = H5Dclose(dset_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+   for (j=0; j<3; j++)
+   {
+    buf6[i][j]=0;
+   }
+ }
+
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_dset(loc_id,1,dims,"array",type_id,buf6);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  for (i=0; i<2; i++)
+  {
+   buf7[i]=0;
+   buf8[i]=0;
+  }
+ }
+
+ write_dset(loc_id,1,dims,"integer",H5T_NATIVE_INT,buf7);
+ write_dset(loc_id,1,dims,"float",H5T_NATIVE_FLOAT,buf8);
+
+
+/*-------------------------------------------------------------------------
+ * 2D
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf12, 'z', sizeof buf12);
+ }
+
+
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ write_dset(loc_id,2,dims2,"string2D",type_id,buf12);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+
+
+ if (make_diffs)
+ {
+  memset(buf22,0,sizeof buf22);
+ }
+
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_dset(loc_id,2,dims2,"bitfield2D",type_id,buf22);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_dset(loc_id,2,dims2,"opaque2D",type_id,buf22);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf32,0,sizeof buf32);
+ }
+
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_dset(loc_id,2,dims2,"compound2D",type_id,buf32);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  for (i = 0; i < 1; i++) {
+   for (j = 0; j < 1; j++) {
+    status=H5Rcreate(&buf42[i][j],file_id,dset_name,H5R_OBJECT,-1);
+   }
+  }
+  write_dset(loc_id,2,dims2r,"refobj2D",H5T_STD_REF_OBJ,buf42);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_dset(loc_id,2,dims2,"enum2D",type_id,0);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+/* Allocate and initialize VL dataset to write */
+ n=0;
+ for (i = 0; i < 3; i++) {
+  for (j = 0; j < 2; j++) {
+    int l;
+    buf52[i][j].p = malloc((i + 1) * sizeof(int));
+    buf52[i][j].len = i + 1;
+    for (l = 0; l < i + 1; l++)
+    if (make_diffs)((int *)buf52[i][j].p)[l] = 0;
+    else ((int *)buf52[i][j].p)[l] = n++;
+  }
+ }
+
+ space_id = H5Screate_simple(2,dims2,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ dset_id = H5Dcreate(loc_id,"vlen2D",type_id,space_id,H5P_DEFAULT);
+ status = H5Dwrite(dset_id,type_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf52);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf52);
+ assert(status>=0);
+ status = H5Dclose(dset_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf62,0,sizeof buf62);
+ }
+
+
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_dset(loc_id,2,dims2,"array2D",type_id,buf62);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER, write a fill value
+ *-------------------------------------------------------------------------
+ */
+
+
+ if (make_diffs)
+ {
+  memset(buf72,0,sizeof buf72);
+  memset(buf82,0,sizeof buf82);
+ }
+
+
+ plist_id = H5Pcreate(H5P_DATASET_CREATE);
+ space_id = H5Screate_simple(2,dims2,NULL);
+ dset_id = H5Dcreate(loc_id,"integer2D",H5T_NATIVE_INT,space_id,plist_id);
+ status = H5Dwrite(dset_id,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf72);
+ status = H5Pclose(plist_id);
+ status = H5Dclose(dset_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+
+ write_dset(loc_id,2,dims2,"float2D",H5T_NATIVE_FLOAT,buf82);
+
+
+/*-------------------------------------------------------------------------
+ * 3D
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+
+ if (make_diffs)
+ {
+  memset(buf13,'z',sizeof buf13);
+ }
+
+ type_id = H5Tcopy(H5T_C_S1);
+ status  = H5Tset_size(type_id, 2);
+ write_dset(loc_id,3,dims3,"string3D",type_id,buf13);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+
+
+ n=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    if (make_diffs) buf23[i][j][k]=0;
+    else buf23[i][j][k]=n++;
+   }
+  }
+ }
+
+
+ type_id = H5Tcopy(H5T_STD_B8LE);
+ write_dset(loc_id,3,dims3,"bitfield3D",type_id,buf23);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+ type_id = H5Tcreate(H5T_OPAQUE, 1);
+ status = H5Tset_tag(type_id, "1-byte opaque type"); /* must set this */
+ write_dset(loc_id,3,dims3,"opaque3D",type_id,buf23);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+
+ n=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    if (make_diffs) {
+     buf33[i][j][k].a=0;
+     buf33[i][j][k].b=0;
+    }
+    else {
+     buf33[i][j][k].a=n++;
+     buf33[i][j][k].b=n++;
+    }
+   }
+  }
+ }
+
+
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_CHAR);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_DOUBLE);
+ write_dset(loc_id,3,dims3,"compound3D",type_id,buf33);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_REFERENCE
+ *-------------------------------------------------------------------------
+ */
+ /* Create references to dataset */
+ if (dset_name)
+ {
+  for (i = 0; i < 1; i++) {
+   for (j = 0; j < 1; j++) {
+    for (k = 0; k < 1; k++)
+     status=H5Rcreate(&buf43[i][j][k],file_id,dset_name,H5R_OBJECT,-1);
+   }
+  }
+ write_dset(loc_id,3,dims3r,"refobj3D",H5T_STD_REF_OBJ,buf43);
+ }
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+
+ type_id = H5Tcreate(H5T_ENUM, sizeof(e_t));
+ H5Tenum_insert(type_id, "RED",   (val = 0, &val));
+ H5Tenum_insert(type_id, "GREEN", (val = 1, &val));
+ write_dset(loc_id,3,dims3,"enum3D",type_id,0);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+
+ /* Allocate and initialize VL dataset to write */
+ n=0;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    int l;
+    buf53[i][j][k].p = malloc((i + 1) * sizeof(int));
+    buf53[i][j][k].len = i + 1;
+    for (l = 0; l < i + 1; l++)
+    if (make_diffs)((int *)buf53[i][j][k].p)[l] = 0;
+    else ((int *)buf53[i][j][k].p)[l] = n++;
+   }
+  }
+ }
+
+ space_id = H5Screate_simple(3,dims3,NULL);
+ type_id = H5Tvlen_create(H5T_NATIVE_INT);
+ dset_id = H5Dcreate(loc_id,"vlen3D",type_id,space_id,H5P_DEFAULT);
+ status = H5Dwrite(dset_id,type_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf53);
+ assert(status>=0);
+ status = H5Dvlen_reclaim(type_id,space_id,H5P_DEFAULT,buf53);
+ assert(status>=0);
+ status = H5Dclose(dset_id);
+ status = H5Tclose(type_id);
+ status = H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+
+
+ n=1;
+ for (i = 0; i < 24; i++) {
+  for (j = 0; j < (int)dimarray[0]; j++) {
+    if (make_diffs) buf63[i][j]=0;
+    else buf63[i][j]=n++;
+  }
+ }
+
+ type_id = H5Tarray_create(H5T_NATIVE_INT,1,dimarray,NULL);
+ write_dset(loc_id,3,dims3,"array3D",type_id,buf63);
+ status = H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER and H5T_FLOAT
+ *-------------------------------------------------------------------------
+ */
+ n=1; f=1;
+ for (i = 0; i < 4; i++) {
+  for (j = 0; j < 3; j++) {
+   for (k = 0; k < 2; k++) {
+    if (make_diffs) {
+     buf73[i][j][k]=0;
+     buf83[i][j][k]=0;
+    }
+    else {
+     buf73[i][j][k]=n++;
+     buf83[i][j][k]=f++;
+    }
+   }
+  }
+ }
+ write_dset(loc_id,3,dims3,"integer3D",H5T_NATIVE_INT,buf73);
+ write_dset(loc_id,3,dims3,"float3D",H5T_NATIVE_FLOAT,buf83);
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: make_dset_reg_ref
+ *
+ * Purpose: write dataset region references
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define SPACE1_RANK 1
+#define SPACE1_DIM1 1
+#define SPACE2_RANK	2
+#define SPACE2_DIM1	10
+#define SPACE2_DIM2	10
+#define NPOINTS 10
+
+static void make_dset_reg_ref(hid_t loc_id)
+{
+ hid_t           dset1; /* Dataset ID   */
+ hid_t           dset2; /* Dereferenced dataset ID */
+ hid_t           sid1;  /* Dataspace ID #1  */
+ hid_t           sid2;  /* Dataspace ID #2  */
+ hsize_t         dims1[] = {SPACE1_DIM1};
+ hsize_t         dims2[] = {SPACE2_DIM1, SPACE2_DIM2};
+ hsize_t         start[SPACE2_RANK];     /* Starting location of hyperslab */
+ hsize_t         stride[SPACE2_RANK];    /* Stride of hyperslab */
+ hsize_t         count[SPACE2_RANK];     /* Element count of hyperslab */
+ hsize_t         block[SPACE2_RANK];     /* Block size of hyperslab */
+ hdset_reg_ref_t *wbuf;  /* buffer to write to disk */
+ int             *dwbuf; /* Buffer for writing numeric data to disk */
+ int             i;      /* counting variables */
+ herr_t          ret;    /* Generic return value  */
+
+ /* Allocate write & read buffers */
+ wbuf=calloc(sizeof(hdset_reg_ref_t), SPACE1_DIM1);
+ dwbuf=malloc(sizeof(int)*SPACE2_DIM1*SPACE2_DIM2);
+
+ /* Create dataspace for datasets */
+ sid2 = H5Screate_simple(SPACE2_RANK, dims2, NULL);
+
+ /* Create a dataset */
+ dset2=H5Dcreate(loc_id,"dsetreg",H5T_NATIVE_UCHAR,sid2,H5P_DEFAULT);
+
+ for(i=0; i<SPACE2_DIM1*SPACE2_DIM2; i++)
+  dwbuf[i]=i*3;
+
+ /* Write selection to disk */
+ ret=H5Dwrite(dset2,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,dwbuf);
+
+ /* Close Dataset */
+ ret = H5Dclose(dset2);
+
+ /* Create dataspace for the reference dataset */
+ sid1 = H5Screate_simple(SPACE1_RANK, dims1, NULL);
+
+ /* Create a dataset */
+ dset1=H5Dcreate(loc_id,"refreg",H5T_STD_REF_DSETREG,sid1,H5P_DEFAULT);
+
+ /* Create references */
+
+ /* Select 6x6 hyperslab for first reference */
+ start[0]=2; start[1]=2;
+ stride[0]=1; stride[1]=1;
+ count[0]=6; count[1]=6;
+ block[0]=1; block[1]=1;
+ ret = H5Sselect_hyperslab(sid2,H5S_SELECT_SET,start,stride,count,block);
+
+ /* Store dataset region */
+ ret = H5Rcreate(&wbuf[0],loc_id,"dsetreg",H5R_DATASET_REGION,sid2);
+
+ /* Write selection to disk */
+ ret=H5Dwrite(dset1,H5T_STD_REF_DSETREG,H5S_ALL,H5S_ALL,H5P_DEFAULT,wbuf);
+
+ /* Close all objects */
+ ret = H5Sclose(sid1);
+ ret = H5Dclose(dset1);
+ ret = H5Sclose(sid2);
+
+ free(wbuf);
+ free(dwbuf);
+}

Added: packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_main.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_main.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_main.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1068 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "h5test.h"
+#include "h5repack.h"
+#include "h5diff.h"
+
+#if 0
+#define PACK_DEBUG
+#endif
+
+/*-------------------------------------------------------------------------
+ * Function: main
+ *
+ * Purpose: Executes h5repack tests
+ *
+ * Return: Success: zero
+ *  Failure: non-zero
+ *
+ * Programmer:  Pedro Vicente <pvn at ncsa.uiuc.edu>
+ *             January, 6, 2004
+ *
+ *-------------------------------------------------------------------------
+ */
+
+
+int main (void)
+{
+ pack_opt_t  pack_options;
+ diff_opt_t  diff_options;
+#if defined (H5_HAVE_FILTER_SZIP)
+ int szip_can_encode = 0;
+#endif
+ memset(&diff_options, 0, sizeof (diff_opt_t));
+ memset(&pack_options, 0, sizeof (pack_opt_t));
+
+ /* run tests  */
+ puts("Testing h5repack:");
+
+ /* make the test files */
+ if (make_testfiles()<0)
+  goto error;
+
+/*-------------------------------------------------------------------------
+ * Format of the tests:
+ *
+ * 1) make a copy of the file with h5repack
+ * 2) use the h5diff utility to compare the input and output file;
+ *     it returns RET==0 if the objects have the same data
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * file with fill values
+ *-------------------------------------------------------------------------
+ */
+ TESTING("    copy of datasets (fill values)");
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME0,FNAME0OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME0,FNAME0OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME0OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_cmpdcpl(FNAME0,FNAME0OUT)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+ PASSED();
+
+ /*return 0;*/
+
+/*-------------------------------------------------------------------------
+ * file with all kinds of dataset datatypes
+ *-------------------------------------------------------------------------
+ */
+ TESTING("    copy of datasets (all datatypes)");
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME1,FNAME1OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME1,FNAME1OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME1OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_cmpdcpl(FNAME1,FNAME1OUT)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * file with attributes
+ *-------------------------------------------------------------------------
+ */
+ TESTING("    copy of datasets (attributes)");
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME2,FNAME2OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME2,FNAME2OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME2OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_cmpdcpl(FNAME2,FNAME2OUT)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+ PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * file with hardlinks
+ *-------------------------------------------------------------------------
+ */
+ TESTING("    copy of datasets (hardlinks)");
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME3,FNAME3OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME3,FNAME3OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME3OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_cmpdcpl(FNAME3,FNAME3OUT)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * alloc early test
+ *-------------------------------------------------------------------------
+ */
+ TESTING("    copy of allocation early file");
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME5,FNAME5OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME5,FNAME5OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME5OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+  PASSED();
+
+/*-------------------------------------------------------------------------
+ * the remaining files differ in the dcpl's
+ *-------------------------------------------------------------------------
+ */
+
+/*-------------------------------------------------------------------------
+ * deflate
+ *-------------------------------------------------------------------------
+ */
+ TESTING("    adding deflate filter");
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+
+/*-------------------------------------------------------------------------
+ * test an individual object option
+ *-------------------------------------------------------------------------
+ */
+
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("dset1:GZIP=9",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset1:CHUNK=20x10",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+ PASSED();
+#else
+ SKIPPED();
+#endif
+
+/*-------------------------------------------------------------------------
+ * test all objects option
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("    adding deflate filter to all");
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("GZIP=1",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("CHUNK=20x10",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+#else
+ SKIPPED();
+#endif
+
+/*-------------------------------------------------------------------------
+ * SZIP
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING("    adding szip filter");
+
+#if defined (H5_HAVE_FILTER_SZIP)
+if (h5tools_can_encode(H5Z_FILTER_SZIP) == 1) {
+   szip_can_encode = 1;
+}
+
+/*-------------------------------------------------------------------------
+ * test an individual object option
+ *-------------------------------------------------------------------------
+ */
+
+if (szip_can_encode) {
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("dset2:SZIP=8,EC",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset2:CHUNK=20x10",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+} else {
+ SKIPPED();
+}
+#else
+ SKIPPED();
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * test all objects option
+ *-------------------------------------------------------------------------
+ */
+TESTING("    adding szip filter to all");
+
+#if defined (H5_HAVE_FILTER_SZIP)
+if (szip_can_encode) {
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("SZIP=8,NN",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+} else {
+ SKIPPED();
+}
+#else
+ SKIPPED();
+#endif
+
+
+ TESTING("    addding shuffle filter");
+
+#ifdef H5_HAVE_FILTER_SHUFFLE
+
+/*-------------------------------------------------------------------------
+ * test an individual object option
+ *-------------------------------------------------------------------------
+ */
+
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("dset1:SHUF",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset1:CHUNK=20x10",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+#else
+ SKIPPED();
+#endif
+
+/*-------------------------------------------------------------------------
+ * test all objects option
+ *-------------------------------------------------------------------------
+ */
+
+TESTING("    addding shuffle filter to all");
+
+#ifdef H5_HAVE_FILTER_SHUFFLE
+
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("SHUF",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("CHUNK=20x10",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+#else
+ SKIPPED();
+#endif
+
+
+
+ TESTING("    adding checksum filter");
+
+#ifdef H5_HAVE_FILTER_FLETCHER32
+
+/*-------------------------------------------------------------------------
+ * test an individual object option
+ *-------------------------------------------------------------------------
+ */
+
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("dset1:FLET",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset1:CHUNK=20x10",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+#else
+ SKIPPED();
+#endif
+
+/*-------------------------------------------------------------------------
+ * test all objects option
+ *-------------------------------------------------------------------------
+ */
+
+
+ TESTING("    adding checksum filter to all");
+
+#ifdef H5_HAVE_FILTER_FLETCHER32
+
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("FLET",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("CHUNK=20x10",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+#else
+ SKIPPED();
+#endif
+
+
+ TESTING("    filter queue fletcher, shuffle, deflate, szip");
+
+/*-------------------------------------------------------------------------
+ * add some filters
+ *-------------------------------------------------------------------------
+ */
+
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset1:CHUNK 20x10",&pack_options)<0)
+  TEST_ERROR;
+
+#if defined (H5_HAVE_FILTER_FLETCHER32)
+ if (h5repack_addfilter("dset1:FLET",&pack_options)<0)
+  TEST_ERROR;
+#endif
+
+#ifdef H5_HAVE_FILTER_SHUFFLE
+ if (h5repack_addfilter("dset1:SHUF",&pack_options)<0)
+  TEST_ERROR;
+#endif
+
+#if defined (H5_HAVE_FILTER_SZIP)
+if (szip_can_encode) {
+ if (h5repack_addfilter("dset1:SZIP=8,NN",&pack_options)<0)
+  TEST_ERROR;
+}
+#endif
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+ if (h5repack_addfilter("dset1:GZIP=1",&pack_options)<0)
+  TEST_ERROR;
+#endif
+
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+
+
+ TESTING("    adding layout chunked");
+
+/*-------------------------------------------------------------------------
+ * test an individual object option
+ *-------------------------------------------------------------------------
+ */
+
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset1:CHUNK=20x10",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * test all objects option
+ *-------------------------------------------------------------------------
+ */
+ TESTING("    adding layout chunked to all");
+
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("CHUNK=20x10",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+
+ TESTING("    adding layout contiguous");
+
+/*-------------------------------------------------------------------------
+ * test an individual object option
+ *-------------------------------------------------------------------------
+ */
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset1:CONTI",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+
+ TESTING("    adding layout contiguous to all");
+
+/*-------------------------------------------------------------------------
+ * test all objects option
+ *-------------------------------------------------------------------------
+ */
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("CONTI",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+
+ TESTING("    adding layout compact");
+
+/*-------------------------------------------------------------------------
+ * test an individual object option
+ *-------------------------------------------------------------------------
+ */
+
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset1:COMPA",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+ PASSED();
+
+ TESTING("    adding layout compact to all");
+
+/*-------------------------------------------------------------------------
+ * test all objects option
+ *-------------------------------------------------------------------------
+ */
+
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("COMPA",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+
+
+ TESTING("    layout compact to contiguous conversion");
+
+/*-------------------------------------------------------------------------
+ * layout compact to contiguous conversion
+ *-------------------------------------------------------------------------
+ */
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset_compact:CONTI",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+  PASSED();
+
+ TESTING("    layout compact to chunk conversion");
+
+/*-------------------------------------------------------------------------
+ * layout compact to chunk conversion
+ *-------------------------------------------------------------------------
+ */
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset_compact:CHUNK=2x5",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+  PASSED();
+
+  TESTING("    layout compact to compact conversion");
+
+/*-------------------------------------------------------------------------
+ * layout compact to compact conversion
+ *-------------------------------------------------------------------------
+ */
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset_compact:COMPA",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+  PASSED();
+
+ TESTING("    layout contiguous to compact conversion");
+/*-------------------------------------------------------------------------
+ * layout contiguous to compact conversion
+ *-------------------------------------------------------------------------
+ */
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset_contiguous:COMPA",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+  PASSED();
+
+ TESTING("    layout contiguous to chunk conversion");
+/*-------------------------------------------------------------------------
+ * layout contiguous to chunk conversion
+ *-------------------------------------------------------------------------
+ */
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset_contiguous:CHUNK=3x6",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+  PASSED();
+
+  TESTING("    layout contiguous to contiguous conversion");
+
+/*-------------------------------------------------------------------------
+ * layout contiguous to contiguous conversion
+ *-------------------------------------------------------------------------
+ */
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset_contiguous:CONTI",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+  PASSED();
+
+ TESTING("    layout chunked to compact conversion");
+/*-------------------------------------------------------------------------
+ * layout chunked to compact conversion
+ *-------------------------------------------------------------------------
+ */
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset_chunk:COMPA",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+  PASSED();
+
+ TESTING("    layout chunked to contiguous conversion");
+
+/*-------------------------------------------------------------------------
+ * layout chunked to contiguous conversion
+ *-------------------------------------------------------------------------
+ */
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset_chunk:CONTI",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+  PASSED();
+
+ TESTING("    layout chunked to chunk conversion");
+/*-------------------------------------------------------------------------
+ * layout chunked to chunked conversion
+ *-------------------------------------------------------------------------
+ */
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addlayout("dset_chunk:CHUNK=18x13",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME4,FNAME4OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME4,FNAME4OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME4OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+  PASSED();
+
+
+/*-------------------------------------------------------------------------
+ * the following tests assume the input files have filters
+ * FNAME7     "test_szip.h5"
+ * FNAME8     "test_deflate.h5"
+ * FNAME9     "test_shuffle.h5"
+ * FNAME10    "test_fletcher32.h5"
+ * FNAME11    "test_all.h5"
+ *-------------------------------------------------------------------------
+ */
+
+
+ TESTING("    copy of szip filter");
+
+#if defined (H5_HAVE_FILTER_SZIP)
+if (szip_can_encode) {
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME7,FNAME7OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME7,FNAME7OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME7OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+} else {
+ SKIPPED();
+}
+#else
+ SKIPPED();
+#endif
+
+  TESTING("    removing szip filter");
+
+#if defined (H5_HAVE_FILTER_SZIP)
+if (szip_can_encode) {
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("dset_szip:NONE",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME7,FNAME7OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME7,FNAME7OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME7OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+} else {
+ SKIPPED();
+}
+#else
+ SKIPPED();
+#endif
+
+
+  TESTING("    copy of deflate filter");
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME8,FNAME8OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME8,FNAME8OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME8OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+#else
+ SKIPPED();
+#endif
+
+
+ TESTING("    removing deflate filter");
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("dset_deflate:NONE",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME8,FNAME8OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME8,FNAME8OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME8OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+#else
+ SKIPPED();
+#endif
+
+
+
+ TESTING("    copy of shuffle filter");
+
+#ifdef H5_HAVE_FILTER_SHUFFLE
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME9,FNAME9OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME9,FNAME9OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME9OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+#else
+ SKIPPED();
+#endif
+
+ TESTING("    removing shuffle filter");
+
+#ifdef H5_HAVE_FILTER_SHUFFLE
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("dset_shuffle:NONE",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME9,FNAME9OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME9,FNAME9OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME9OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+#else
+ SKIPPED();
+#endif
+
+ TESTING("    copy of fletcher filter");
+
+#ifdef H5_HAVE_FILTER_FLETCHER32
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME10,FNAME10OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME10,FNAME10OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME10OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+#else
+ SKIPPED();
+#endif
+
+  TESTING("    removing fletcher filter");
+
+#ifdef H5_HAVE_FILTER_FLETCHER32
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("dset_fletcher32:NONE",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME10,FNAME10OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME10,FNAME10OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME10OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+#else
+ SKIPPED();
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * file with all filters
+ *  dset_all
+ *  dset_deflate
+ *  dset_szip
+ *  dset_shuffle
+ *  dset_fletcher32
+ *-------------------------------------------------------------------------
+ */
+
+
+ TESTING("    filter conversion from deflate to szip");
+
+#if defined (H5_HAVE_FILTER_SZIP) \
+    && defined (H5_HAVE_FILTER_DEFLATE) \
+    && defined (H5_HAVE_FILTER_FLETCHER32) && defined (H5_HAVE_FILTER_SHUFFLE)
+
+if (szip_can_encode) {
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("dset_deflate:SZIP=8,NN",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME11,FNAME11OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME11,FNAME11OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME11OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+} else {
+ SKIPPED();
+}
+#else
+ SKIPPED();
+#endif
+
+ TESTING("    filter conversion from szip to deflate");
+
+#if defined (H5_HAVE_FILTER_SZIP) \
+    && defined (H5_HAVE_FILTER_DEFLATE) \
+    && defined (H5_HAVE_FILTER_FLETCHER32) && defined (H5_HAVE_FILTER_SHUFFLE)
+
+if (szip_can_encode) {
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("dset_szip:GZIP=1",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME11,FNAME11OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME11,FNAME11OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME11OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+} else {
+ SKIPPED();
+}
+#else
+ SKIPPED();
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * test the NONE global option
+ *-------------------------------------------------------------------------
+ */
+
+  TESTING("    removing all filters");
+
+#if defined (H5_HAVE_FILTER_SZIP) && defined (H5_HAVE_FILTER_DEFLATE) \
+    && defined (H5_HAVE_FILTER_FLETCHER32) && defined (H5_HAVE_FILTER_SHUFFLE)
+
+ if (h5repack_init (&pack_options, 0)<0)
+  TEST_ERROR;
+ if (h5repack_addfilter("NONE",&pack_options)<0)
+  TEST_ERROR;
+ if (h5repack(FNAME11,FNAME11OUT,&pack_options)<0)
+  TEST_ERROR;
+ if (h5diff(FNAME11,FNAME11OUT,NULL,NULL,&diff_options) == 1)
+  TEST_ERROR;
+ if (h5repack_verify(FNAME11OUT,&pack_options)<=0)
+  TEST_ERROR;
+ if (h5repack_end (&pack_options)<0)
+  TEST_ERROR;
+
+ PASSED();
+#else
+ SKIPPED();
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * end
+ *-------------------------------------------------------------------------
+ */
+
+ puts("All h5repack tests passed.");
+
+ return 0;
+
+error:
+ puts("***** H5REPACK TESTS FAILED *****");
+ return 1;
+
+}
+
+
+

Added: packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_make.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_make.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_make.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1014 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "h5test.h"
+#include "h5repack.h"
+
+#define DIM1  40
+#define DIM2  20
+#define CDIM1 DIM1/2
+#define CDIM2 DIM2/2
+#define RANK  2
+
+int make_all_objects(hid_t loc_id);
+int make_attributes(hid_t loc_id);
+int make_hlinks(hid_t loc_id);
+int make_early(void);
+int make_layout(hid_t loc_id);
+#ifdef H5_HAVE_FILTER_SZIP
+int make_szip(hid_t loc_id);
+#endif /* H5_HAVE_FILTER_SZIP */
+int make_deflate(hid_t loc_id);
+int make_shuffle(hid_t loc_id);
+int make_fletcher32(hid_t loc_id);
+int make_all(hid_t loc_id);
+int make_fill(hid_t loc_id);
+
+
+/*-------------------------------------------------------------------------
+ * Function: make_testfiles
+ *
+ * Purpose: make a test file with all types of HDF5 objects,
+ *   datatypes and filters
+ *
+ *-------------------------------------------------------------------------
+ */
+int make_testfiles(void)
+{
+ hid_t  loc_id;  /* file ID */
+
+ TESTING("    generating datasets");
+
+/*-------------------------------------------------------------------------
+ * create a file for general copy test
+ *-------------------------------------------------------------------------
+ */
+ if((loc_id = H5Fcreate(FNAME0,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+  return -1;
+ if (make_fill(loc_id)<0)
+  goto out;
+ if(H5Fclose(loc_id)<0)
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * create another file for general copy test (all datatypes)
+ *-------------------------------------------------------------------------
+ */
+ if((loc_id = H5Fcreate(FNAME1,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+  return -1;
+ if (make_all_objects(loc_id)<0)
+  goto out;
+ if(H5Fclose(loc_id)<0)
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * create a file for attributes copy test
+ *-------------------------------------------------------------------------
+ */
+ if((loc_id = H5Fcreate(FNAME2,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+  return -1;
+ if (make_attributes(loc_id)<0)
+  goto out;
+ if(H5Fclose(loc_id)<0)
+  return -1;
+/*-------------------------------------------------------------------------
+ * create a file for hard links test
+ *-------------------------------------------------------------------------
+ */
+ if((loc_id = H5Fcreate(FNAME3,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+  return -1;
+ if (make_hlinks(loc_id)<0)
+  goto out;
+ if(H5Fclose(loc_id)<0)
+  return -1;
+/*-------------------------------------------------------------------------
+ * create a file for layouts test
+ *-------------------------------------------------------------------------
+ */
+ if((loc_id = H5Fcreate(FNAME4,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+  return -1;
+ if (make_layout(loc_id)<0)
+  goto out;
+ if(H5Fclose(loc_id)<0)
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * create a file for the H5D_ALLOC_TIME_EARLY test
+ *-------------------------------------------------------------------------
+ */
+ if (make_early()<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * create a file with the SZIP filter
+ *-------------------------------------------------------------------------
+ */
+#ifdef H5_HAVE_FILTER_SZIP
+ if((loc_id = H5Fcreate(FNAME7,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+  return -1;
+ if (make_szip(loc_id)<0)
+  goto out;
+ if(H5Fclose(loc_id)<0)
+  return -1;
+#endif /* H5_HAVE_FILTER_SZIP */
+
+/*-------------------------------------------------------------------------
+ * create a file with the deflate filter
+ *-------------------------------------------------------------------------
+ */
+ if((loc_id = H5Fcreate(FNAME8,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+  return -1;
+ if (make_deflate(loc_id)<0)
+  goto out;
+ if(H5Fclose(loc_id)<0)
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * create a file with the shuffle filter
+ *-------------------------------------------------------------------------
+ */
+ if((loc_id = H5Fcreate(FNAME9,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+  return -1;
+ if (make_shuffle(loc_id)<0)
+  goto out;
+ if(H5Fclose(loc_id)<0)
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * create a file with the fletcher32 filter
+ *-------------------------------------------------------------------------
+ */
+ if((loc_id = H5Fcreate(FNAME10,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+  return -1;
+ if (make_fletcher32(loc_id)<0)
+  goto out;
+ if(H5Fclose(loc_id)<0)
+  return -1;
+
+/*-------------------------------------------------------------------------
+ * create a file with the all filters
+ *-------------------------------------------------------------------------
+ */
+ if((loc_id = H5Fcreate(FNAME11,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+  return -1;
+ if (make_all(loc_id)<0)
+  goto out;
+ if(H5Fclose(loc_id)<0)
+  return -1;
+
+
+ PASSED();
+ return 0;
+
+out:
+  H5Fclose(loc_id);
+ return -1;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: make_all_objects
+ *
+ * Purpose: make a test file with all types of HDF5 objects, datatypes
+ *
+ *-------------------------------------------------------------------------
+ */
+int make_all_objects(hid_t loc_id)
+{
+ hid_t   dset_id;
+ hid_t   group_id;
+ hid_t   type_id;
+ hid_t   root_id;
+ hid_t   space_id;
+ hsize_t dims[1]={2};
+ /* Compound datatype */
+ typedef struct s_t
+ {
+  int    a;
+  float  b;
+ } s_t;
+
+/*-------------------------------------------------------------------------
+ * H5G_DATASET
+ *-------------------------------------------------------------------------
+ */
+ space_id = H5Screate_simple(1,dims,NULL);
+ dset_id  = H5Dcreate(loc_id,"dset_referenced",H5T_NATIVE_INT,space_id,H5P_DEFAULT);
+ H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5G_GROUP
+ *-------------------------------------------------------------------------
+ */
+ group_id  = H5Gcreate(loc_id,"g1",0);
+ root_id   = H5Gopen(loc_id, "/");
+
+/*-------------------------------------------------------------------------
+ * H5G_TYPE
+ *-------------------------------------------------------------------------
+ */
+
+ /* Create a memory compound datatype */
+ type_id = H5Tcreate (H5T_COMPOUND, sizeof(s_t));
+ H5Tinsert(type_id, "a", HOFFSET(s_t, a), H5T_NATIVE_INT);
+ H5Tinsert(type_id, "b", HOFFSET(s_t, b), H5T_NATIVE_FLOAT);
+ /* Commit compound datatype and close it */
+ H5Tcommit(loc_id, "type", type_id);
+ H5Tclose(type_id);
+
+/*-------------------------------------------------------------------------
+ * H5G_LINK
+ *-------------------------------------------------------------------------
+ */
+
+ H5Glink(loc_id, H5G_LINK_SOFT, "dset", "link");
+
+/*-------------------------------------------------------------------------
+ * write a series of datasetes
+ *-------------------------------------------------------------------------
+ */
+
+ write_dset_in(root_id,"dset_referenced",loc_id,0);
+
+ /* Close */
+ H5Dclose(dset_id);
+ H5Gclose(group_id);
+ H5Gclose(root_id);
+
+ return 0;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: make_attributes
+ *
+ * Purpose: make a test file with all types of attributes
+ *
+ *-------------------------------------------------------------------------
+ */
+int make_attributes(hid_t loc_id)
+{
+ hid_t   dset_id;
+ hid_t   group_id;
+ hid_t   root_id;
+ hid_t   space_id;
+ hsize_t dims[1]={2};
+
+
+/*-------------------------------------------------------------------------
+ * H5G_DATASET
+ *-------------------------------------------------------------------------
+ */
+
+ space_id = H5Screate_simple(1,dims,NULL);
+ dset_id  = H5Dcreate(loc_id,"dset",H5T_NATIVE_INT,space_id,H5P_DEFAULT);
+ H5Sclose(space_id);
+
+/*-------------------------------------------------------------------------
+ * H5G_GROUP
+ *-------------------------------------------------------------------------
+ */
+ group_id  = H5Gcreate(loc_id,"g1",0);
+ root_id   = H5Gopen(loc_id, "/");
+
+/*-------------------------------------------------------------------------
+ * write a series of attributes on the dataset, group, and root group
+ *-------------------------------------------------------------------------
+ */
+
+ write_attr_in(dset_id,"dset",loc_id,0);
+ write_attr_in(group_id,"dset",loc_id,0);
+ write_attr_in(root_id,"dset",loc_id,0);
+
+ /* Close */
+ H5Dclose(dset_id);
+ H5Gclose(group_id);
+ H5Gclose(root_id);
+
+ return 0;
+
+}
+
+/*-------------------------------------------------------------------------
+ * Function: make_hlinks
+ *
+ * Purpose: make a test file with hard links
+ *
+ *-------------------------------------------------------------------------
+ */
+int make_hlinks(hid_t loc_id)
+{
+ hid_t   group1_id;
+ hid_t   group2_id;
+ hid_t   group3_id;
+ hsize_t dims[2]={3,2};
+ int     buf[3][2]= {{1,1},{1,2},{2,2}};
+
+/*-------------------------------------------------------------------------
+ * create a dataset and some hard links to it
+ *-------------------------------------------------------------------------
+ */
+
+ if (write_dset(loc_id,2,dims,"dset",H5T_NATIVE_INT,buf)<0)
+  return -1;
+ if (H5Glink(loc_id, H5G_LINK_HARD, "dset", "link1 to dset")<0)
+  return -1;
+ if (H5Glink(loc_id, H5G_LINK_HARD, "dset", "link2 to dset")<0)
+  return -1;
+ if (H5Glink(loc_id, H5G_LINK_HARD, "dset", "link3 to dset")<0)
+  return -1;
+
+
+/*-------------------------------------------------------------------------
+ * create a group and some hard links to it
+ *-------------------------------------------------------------------------
+ */
+
+ if ((group1_id = H5Gcreate(loc_id,"g1",0))<0)
+  return -1;
+ if ((group2_id = H5Gcreate(group1_id,"g2",0))<0)
+  return -1;
+ if ((group3_id = H5Gcreate(group2_id,"g3",0))<0)
+  return -1;
+
+ if (H5Glink2(loc_id, "g1", H5G_LINK_HARD, group2_id, "link1 to g1")<0)
+  return -1;
+ if (H5Glink2(group1_id, "g2", H5G_LINK_HARD, group3_id, "link1 to g2")<0)
+  return -1;
+
+ H5Gclose(group1_id);
+ H5Gclose(group2_id);
+ H5Gclose(group3_id);
+
+ return 0;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: make_szip
+ *
+ * Purpose: make a dataset with the SZIP filter
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifdef H5_HAVE_FILTER_SZIP
+int make_szip(hid_t loc_id)
+{
+ hid_t    dcpl; /* dataset creation property list */
+ hid_t    sid;  /* dataspace ID */
+ unsigned szip_options_mask=H5_SZIP_ALLOW_K13_OPTION_MASK|H5_SZIP_NN_OPTION_MASK;
+ unsigned szip_pixels_per_block=8;
+ hsize_t  dims[RANK]={DIM1,DIM2};
+ hsize_t  chunk_dims[RANK]={CDIM1,CDIM2};
+ int      buf[DIM1][DIM2];
+ int      i, j, n;
+ int szip_can_encode = 0;
+
+ for (i=n=0; i<DIM1; i++){
+  for (j=0; j<DIM2; j++){
+   buf[i][j]=n++;
+  }
+ }
+ /* create a space */
+ if((sid = H5Screate_simple(RANK, dims, NULL))<0)
+  return -1;
+ /* create a dcpl */
+ if ((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0)
+  goto out;
+ /* set up chunk */
+ if(H5Pset_chunk(dcpl, RANK, chunk_dims)<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * SZIP
+ *-------------------------------------------------------------------------
+ */
+ /* Make sure encoding is enabled */
+if (h5tools_can_encode(H5Z_FILTER_SZIP) == 1) {
+   szip_can_encode = 1;
+}
+if (szip_can_encode) {
+ /* set szip data */
+ if(H5Pset_szip (dcpl,szip_options_mask,szip_pixels_per_block)<0)
+  goto out;
+ if (make_dset(loc_id,"dset_szip",sid,dcpl,buf)<0)
+  goto out;
+} else {
+	/* WARNING? SZIP is decoder only, can't generate test files */
+}
+
+ if(H5Sclose(sid)<0)
+  goto out;
+ if(H5Pclose(dcpl)<0)
+  goto out;
+
+ return 0;
+
+out:
+ H5E_BEGIN_TRY {
+  H5Pclose(dcpl);
+  H5Sclose(sid);
+ } H5E_END_TRY;
+ return -1;
+}
+#endif /* H5_HAVE_FILTER_SZIP */
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: make_deflate
+ *
+ * Purpose: make a dataset with the deflate filter
+ *
+ *-------------------------------------------------------------------------
+ */
+int make_deflate(hid_t loc_id)
+{
+ hid_t    dcpl; /* dataset creation property list */
+ hid_t    sid;  /* dataspace ID */
+ hsize_t  dims[RANK]={DIM1,DIM2};
+ hsize_t  chunk_dims[RANK]={CDIM1,CDIM2};
+ int      buf[DIM1][DIM2];
+ int      i, j, n;
+
+ for (i=n=0; i<DIM1; i++){
+  for (j=0; j<DIM2; j++){
+   buf[i][j]=n++;
+  }
+ }
+
+ /* create a space */
+ if((sid = H5Screate_simple(RANK, dims, NULL))<0)
+  return -1;
+ /* create a dcpl */
+ if ((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0)
+  goto out;
+ /* set up chunk */
+ if(H5Pset_chunk(dcpl, RANK, chunk_dims)<0)
+  goto out;
+/*-------------------------------------------------------------------------
+ * GZIP
+ *-------------------------------------------------------------------------
+ */
+#if defined (H5_HAVE_FILTER_DEFLATE)
+ /* set deflate data */
+ if(H5Pset_deflate(dcpl, 9)<0)
+  goto out;
+ if (make_dset(loc_id,"dset_deflate",sid,dcpl,buf)<0)
+  goto out;
+#endif
+
+/*-------------------------------------------------------------------------
+ * close space and dcpl
+ *-------------------------------------------------------------------------
+ */
+ if(H5Sclose(sid)<0)
+  goto out;
+ if(H5Pclose(dcpl)<0)
+  goto out;
+
+ return 0;
+
+out:
+ H5E_BEGIN_TRY {
+  H5Pclose(dcpl);
+  H5Sclose(sid);
+ } H5E_END_TRY;
+ return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: make_shuffle
+ *
+ * Purpose: make a dataset with the shuffle filter
+ *
+ *-------------------------------------------------------------------------
+ */
+int make_shuffle(hid_t loc_id)
+{
+ hid_t    dcpl; /* dataset creation property list */
+ hid_t    sid;  /* dataspace ID */
+ hsize_t  dims[RANK]={DIM1,DIM2};
+ hsize_t  chunk_dims[RANK]={CDIM1,CDIM2};
+ int      buf[DIM1][DIM2];
+ int      i, j, n;
+
+ for (i=n=0; i<DIM1; i++){
+  for (j=0; j<DIM2; j++){
+   buf[i][j]=n++;
+  }
+ }
+ /* create a space */
+ if((sid = H5Screate_simple(RANK, dims, NULL))<0)
+  return -1;
+ /* create a dcpl */
+ if ((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0)
+  goto out;
+ /* set up chunk */
+ if(H5Pset_chunk(dcpl, RANK, chunk_dims)<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * shuffle
+ *-------------------------------------------------------------------------
+ */
+#if defined (H5_HAVE_FILTER_SHUFFLE)
+ /* set the shuffle filter */
+ if (H5Pset_shuffle(dcpl)<0)
+  goto out;
+ if (make_dset(loc_id,"dset_shuffle",sid,dcpl,buf)<0)
+  goto out;
+#endif
+
+/*-------------------------------------------------------------------------
+ * close space and dcpl
+ *-------------------------------------------------------------------------
+ */
+ if(H5Sclose(sid)<0)
+  goto out;
+ if(H5Pclose(dcpl)<0)
+  goto out;
+
+ return 0;
+
+out:
+ H5E_BEGIN_TRY {
+  H5Pclose(dcpl);
+  H5Sclose(sid);
+ } H5E_END_TRY;
+ return -1;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: make_fletcher32
+ *
+ * Purpose: make a dataset with the fletcher32 filter
+ *
+ *-------------------------------------------------------------------------
+ */
+int make_fletcher32(hid_t loc_id)
+{
+ hid_t    dcpl; /* dataset creation property list */
+ hid_t    sid;  /* dataspace ID */
+ hsize_t  dims[RANK]={DIM1,DIM2};
+ hsize_t  chunk_dims[RANK]={CDIM1,CDIM2};
+ int      buf[DIM1][DIM2];
+ int      i, j, n;
+
+ for (i=n=0; i<DIM1; i++){
+  for (j=0; j<DIM2; j++){
+   buf[i][j]=n++;
+  }
+ }
+ /* create a space */
+ if((sid = H5Screate_simple(RANK, dims, NULL))<0)
+  return -1;
+ /* create a dataset creation property list; the same DCPL is used for all dsets */
+ if ((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0)
+  goto out;
+ /* set up chunk */
+ if(H5Pset_chunk(dcpl, RANK, chunk_dims)<0)
+  goto out;
+
+
+/*-------------------------------------------------------------------------
+ * fletcher32
+ *-------------------------------------------------------------------------
+ */
+#if defined (H5_HAVE_FILTER_FLETCHER32)
+ /* remove the filters from the dcpl */
+ if (H5Premove_filter(dcpl,H5Z_FILTER_ALL)<0)
+  goto out;
+ /* set the checksum filter */
+ if (H5Pset_fletcher32(dcpl)<0)
+  goto out;
+ if (make_dset(loc_id,"dset_fletcher32",sid,dcpl,buf)<0)
+  goto out;
+#endif
+
+/*-------------------------------------------------------------------------
+ * close space and dcpl
+ *-------------------------------------------------------------------------
+ */
+ if(H5Sclose(sid)<0)
+  goto out;
+ if(H5Pclose(dcpl)<0)
+  goto out;
+
+ return 0;
+
+out:
+ H5E_BEGIN_TRY {
+  H5Pclose(dcpl);
+  H5Sclose(sid);
+ } H5E_END_TRY;
+ return -1;
+}
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: make_all
+ *
+ * Purpose: make a file with all filters
+ *
+ *-------------------------------------------------------------------------
+ */
+int make_all(hid_t loc_id)
+{
+ hid_t    dcpl; /* dataset creation property list */
+ hid_t    sid;  /* dataspace ID */
+#if defined (H5_HAVE_FILTER_SZIP)
+ unsigned szip_options_mask=H5_SZIP_ALLOW_K13_OPTION_MASK|H5_SZIP_NN_OPTION_MASK;
+ unsigned szip_pixels_per_block=8;
+#endif /* H5_HAVE_FILTER_SZIP */
+ hsize_t  dims[RANK]={DIM1,DIM2};
+ hsize_t  chunk_dims[RANK]={CDIM1,CDIM2};
+ int      buf[DIM1][DIM2];
+ int      i, j, n;
+#if defined (H5_HAVE_FILTER_SZIP)
+ int szip_can_encode = 0;
+#endif
+
+ for (i=n=0; i<DIM1; i++){
+  for (j=0; j<DIM2; j++){
+   buf[i][j]=n++;
+  }
+ }
+ /* create a space */
+ if((sid = H5Screate_simple(RANK, dims, NULL))<0)
+  return -1;
+ /* create a dataset creation property list; the same DCPL is used for all dsets */
+ if ((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0)
+  goto out;
+ /* set up chunk */
+ if(H5Pset_chunk(dcpl, RANK, chunk_dims)<0)
+  goto out;
+
+#if defined (H5_HAVE_FILTER_SHUFFLE)
+ /* set the shuffle filter */
+ if (H5Pset_shuffle(dcpl)<0)
+  goto out;
+#endif
+
+#if defined (H5_HAVE_FILTER_FLETCHER32)
+ /* set the checksum filter */
+ if (H5Pset_fletcher32(dcpl)<0)
+  goto out;
+#endif
+
+#if defined (H5_HAVE_FILTER_SZIP)
+if (h5tools_can_encode(H5Z_FILTER_SZIP) == 1) {
+   szip_can_encode = 1;
+}
+if (szip_can_encode) {
+ /* set szip data */
+ if(H5Pset_szip (dcpl,szip_options_mask,szip_pixels_per_block)<0)
+  goto out;
+} else {
+	/* WARNING? SZIP is decoder only, can't generate test data using szip */
+}
+#endif
+
+#if defined (H5_HAVE_FILTER_DEFLATE)
+ /* set deflate data */
+ if(H5Pset_deflate(dcpl, 9)<0)
+  goto out;
+#endif
+
+ if (make_dset(loc_id,"dset_all",sid,dcpl,buf)<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * fletcher32
+ *-------------------------------------------------------------------------
+ */
+#if defined (H5_HAVE_FILTER_FLETCHER32)
+ /* remove the filters from the dcpl */
+ if (H5Premove_filter(dcpl,H5Z_FILTER_ALL)<0)
+  goto out;
+ /* set the checksum filter */
+ if (H5Pset_fletcher32(dcpl)<0)
+  goto out;
+ if (make_dset(loc_id,"dset_fletcher32",sid,dcpl,buf)<0)
+  goto out;
+#endif
+
+/*-------------------------------------------------------------------------
+ * SZIP
+ *-------------------------------------------------------------------------
+ */
+ /* Make sure encoding is enabled */
+#if defined (H5_HAVE_FILTER_SZIP)
+if (szip_can_encode) {
+ /* remove the filters from the dcpl */
+ if (H5Premove_filter(dcpl,H5Z_FILTER_ALL)<0)
+  goto out;
+ /* set szip data */
+ if(H5Pset_szip (dcpl,szip_options_mask,szip_pixels_per_block)<0)
+  goto out;
+ if (make_dset(loc_id,"dset_szip",sid,dcpl,buf)<0)
+  goto out;
+} else {
+	/* WARNING? SZIP is decoder only, can't generate test dataset */
+}
+#endif
+
+/*-------------------------------------------------------------------------
+ * shuffle
+ *-------------------------------------------------------------------------
+ */
+#if defined (H5_HAVE_FILTER_SHUFFLE)
+ /* remove the filters from the dcpl */
+ if (H5Premove_filter(dcpl,H5Z_FILTER_ALL)<0)
+  goto out;
+ /* set the shuffle filter */
+ if (H5Pset_shuffle(dcpl)<0)
+  goto out;
+ if (make_dset(loc_id,"dset_shuffle",sid,dcpl,buf)<0)
+  goto out;
+#endif
+
+/*-------------------------------------------------------------------------
+ * GZIP
+ *-------------------------------------------------------------------------
+ */
+#if defined (H5_HAVE_FILTER_DEFLATE)
+ /* remove the filters from the dcpl */
+ if (H5Premove_filter(dcpl,H5Z_FILTER_ALL)<0)
+  goto out;
+ /* set deflate data */
+ if(H5Pset_deflate(dcpl, 1)<0)
+  goto out;
+ if (make_dset(loc_id,"dset_deflate",sid,dcpl,buf)<0)
+  goto out;
+#endif
+
+
+
+/*-------------------------------------------------------------------------
+ * close space and dcpl
+ *-------------------------------------------------------------------------
+ */
+ if(H5Sclose(sid)<0)
+  goto out;
+ if(H5Pclose(dcpl)<0)
+  goto out;
+
+ return 0;
+
+out:
+ H5E_BEGIN_TRY {
+  H5Pclose(dcpl);
+  H5Sclose(sid);
+ } H5E_END_TRY;
+ return -1;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: make_early
+ *
+ * Purpose: create a file for the H5D_ALLOC_TIME_EARLY test
+ *
+ *-------------------------------------------------------------------------
+ */
+int make_early(void)
+{
+ hsize_t dims[1] ={3000};
+ hsize_t cdims[1]={30};
+ hid_t   fid=-1;
+ hid_t   dset_id=-1;
+ hid_t   sid=-1;
+ hid_t   tid=-1;
+ hid_t   dcpl=-1;
+ int     i;
+ char    name[10];
+ int     iter=100;
+
+ if ((fid = H5Fcreate(FNAME5,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+  return -1;
+ if (H5Fclose(fid)<0)
+  goto out;
+
+ if ((sid = H5Screate_simple(1, dims, NULL))<0)
+  goto out;
+ if ((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0)
+  goto out;
+ if (H5Pset_chunk(dcpl,1,cdims)<0)
+  goto out;
+ if (H5Pset_alloc_time(dcpl, H5D_ALLOC_TIME_EARLY)<0)
+  goto out;
+
+ for (i=0; i<iter; i++)
+ {
+  if ((fid = H5Fopen(FNAME5,H5F_ACC_RDWR,H5P_DEFAULT))<0)
+   goto out;
+  if ((dset_id = H5Dcreate(fid,"early",H5T_NATIVE_DOUBLE,sid,dcpl))<0)
+   goto out;
+  if ((tid = H5Tcopy(H5T_NATIVE_DOUBLE))<0)
+   goto out;
+  sprintf(name,"%d", i);
+  if ((H5Tcommit(fid,name,tid))<0)
+   goto out;
+  if (H5Tclose(tid)<0)
+   goto out;
+  if (H5Dclose(dset_id)<0)
+   goto out;
+  if (H5Gunlink(fid,"early")<0)
+   goto out;
+  if (H5Fclose(fid)<0)
+   goto out;
+ }
+
+/*-------------------------------------------------------------------------
+ * do the same without close/opening the file and creating the dataset
+ *-------------------------------------------------------------------------
+ */
+
+ if ((fid = H5Fcreate(FNAME6,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+  return -1;
+
+ for (i=0; i<iter; i++)
+ {
+  if ((tid = H5Tcopy(H5T_NATIVE_DOUBLE))<0)
+   goto out;
+  sprintf(name,"%d", i);
+  if ((H5Tcommit(fid,name,tid))<0)
+   goto out;
+  if (H5Tclose(tid)<0)
+   goto out;
+ }
+
+ if (H5Sclose(sid)<0)
+  goto out;
+ if (H5Pclose(dcpl)<0)
+  goto out;
+ if (H5Fclose(fid)<0)
+  goto out;
+
+
+ return 0;
+
+out:
+ H5E_BEGIN_TRY {
+  H5Tclose(tid);
+  H5Pclose(dcpl);
+  H5Sclose(sid);
+  H5Dclose(dset_id);
+  H5Fclose(fid);
+ } H5E_END_TRY;
+ return -1;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: make_layout
+ *
+ * Purpose: make several datasets with several layouts in location LOC_ID
+ *
+ *-------------------------------------------------------------------------
+ */
+int make_layout(hid_t loc_id)
+{
+ hid_t    dcpl; /* dataset creation property list */
+ hid_t    sid;  /* dataspace ID */
+ hsize_t  dims[RANK]={DIM1,DIM2};
+ hsize_t  chunk_dims[RANK]={CDIM1,CDIM2};
+ int      buf[DIM1][DIM2];
+ int      i, j, n;
+ char     name[5];
+
+
+ for (i=n=0; i<DIM1; i++){
+  for (j=0; j<DIM2; j++){
+   buf[i][j]=n++;
+  }
+ }
+
+/*-------------------------------------------------------------------------
+ * make several dataset with no filters
+ *-------------------------------------------------------------------------
+ */
+ for (i=0; i<4; i++)
+ {
+  sprintf(name,"dset%d",i+1);
+  if (write_dset(loc_id,RANK,dims,name,H5T_NATIVE_INT,buf)<0)
+   return -1;
+ }
+
+
+/*-------------------------------------------------------------------------
+ * make several dataset with several layout options
+ *-------------------------------------------------------------------------
+ */
+ /* create a space */
+ if((sid = H5Screate_simple(RANK, dims, NULL))<0)
+  return -1;
+ /* create a dataset creation property list; the same DCPL is used for all dsets */
+ if ((dcpl = H5Pcreate(H5P_DATASET_CREATE))<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * H5D_COMPACT
+ *-------------------------------------------------------------------------
+ */
+ if(H5Pset_layout (dcpl,H5D_COMPACT)<0)
+  goto out;
+ if (make_dset(loc_id,"dset_compact",sid,dcpl,buf)<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * H5D_COMPACT
+ *-------------------------------------------------------------------------
+ */
+ if(H5Pset_layout (dcpl,H5D_CONTIGUOUS)<0)
+  goto out;
+ if (make_dset(loc_id,"dset_contiguous",sid,dcpl,buf)<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * H5D_CHUNKED
+ *-------------------------------------------------------------------------
+ */
+ if(H5Pset_chunk(dcpl, RANK, chunk_dims)<0)
+  goto out;
+ if (make_dset(loc_id,"dset_chunk",sid,dcpl,buf)<0)
+  goto out;
+
+/*-------------------------------------------------------------------------
+ * close space and dcpl
+ *-------------------------------------------------------------------------
+ */
+ if(H5Sclose(sid)<0)
+  goto out;
+ if(H5Pclose(dcpl)<0)
+  goto out;
+
+ return 0;
+
+out:
+ H5E_BEGIN_TRY {
+  H5Pclose(dcpl);
+  H5Sclose(sid);
+ } H5E_END_TRY;
+ return -1;
+}
+
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: make a file with an integer dataset with a fill value
+ *
+ * Purpose: test copy of fill values
+ *
+ *-------------------------------------------------------------------------
+ */
+int make_fill(hid_t loc_id)
+{
+ hid_t   did;
+ hid_t   sid;
+ hid_t   dcpl;
+ hsize_t dims[2]={3,2};
+ int     buf[3][2]= {{1,1},{1,2},{2,2}};
+ int     fillvalue=2;
+
+/*-------------------------------------------------------------------------
+ * H5T_INTEGER, write a fill value
+ *-------------------------------------------------------------------------
+ */
+
+ dcpl = H5Pcreate(H5P_DATASET_CREATE);
+	H5Pset_fill_value(dcpl, H5T_NATIVE_INT, &fillvalue);
+	sid = H5Screate_simple(2,dims,NULL);
+	did = H5Dcreate(loc_id,"dset_fill",H5T_NATIVE_INT,sid,dcpl);
+	H5Dwrite(did,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf);
+	H5Pclose(dcpl);
+	H5Dclose(did);
+ H5Sclose(sid);
+
+ return 0;
+
+}
+

Added: packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_util.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_util.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/h5repack/testh5repack_util.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,153 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "h5repack.h"
+
+/*-------------------------------------------------------------------------
+ * Function: make_dset
+ *
+ * Purpose: utility function to create and write a dataset in LOC_ID
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 12, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+int make_dset(hid_t loc_id,
+              const char *name,
+              hid_t sid,
+              hid_t dcpl,
+              void *buf)
+{
+ hid_t   dsid;
+
+ /* create the dataset */
+ if((dsid = H5Dcreate (loc_id,name,H5T_NATIVE_INT,sid,dcpl))<0)
+  return -1;
+
+ /* write */
+ if(H5Dwrite(dsid,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0)
+  goto out;
+
+ /* close */
+ if(H5Dclose(dsid)<0)
+  return -1;
+
+ return 0;
+ out:
+ H5E_BEGIN_TRY {
+  H5Dclose(dsid);
+ } H5E_END_TRY;
+ return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: write_dset
+ *
+ * Purpose: utility function to create and write a dataset in LOC_ID
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 12, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int write_dset( hid_t loc_id,
+                int rank,
+                hsize_t *dims,
+                const char *dset_name,
+                hid_t type_id,
+                void *buf )
+{
+ hid_t   dset_id;
+ hid_t   space_id;
+
+ /* Create a buf space  */
+ if ((space_id = H5Screate_simple(rank,dims,NULL))<0)
+  return -1;
+
+ /* Create a dataset */
+ if ((dset_id = H5Dcreate(loc_id,dset_name,type_id,space_id,H5P_DEFAULT))<0)
+  return -1;
+
+ /* Write the buf */
+ if ( buf )
+  if (H5Dwrite(dset_id,type_id,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0)
+   return -1;
+
+ /* Close */
+ if (H5Dclose(dset_id)<0)
+  return -1;
+ if (H5Sclose(space_id)<0)
+  return -1;
+
+ return 0;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: write_attr
+ *
+ * Purpose: utility function to write an attribute in LOC_ID
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 12, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int make_attr(hid_t loc_id,
+               int rank,
+               hsize_t *dims,
+               const char *attr_name,
+               hid_t type_id,
+               void *buf)
+{
+ hid_t   attr_id;
+ hid_t   space_id;
+
+ /* create a space  */
+ if ((space_id = H5Screate_simple(rank,dims,NULL))<0)
+  return -1;
+
+ /* create the attribute */
+ if ((attr_id = H5Acreate(loc_id,attr_name,type_id,space_id,H5P_DEFAULT))<0)
+  goto out;
+
+ /* write the buffer */
+ if ( buf )
+ {
+  if (H5Awrite(attr_id,type_id,buf)<0)
+   goto out;
+ }
+
+ /* close */
+ H5Aclose(attr_id);
+ H5Sclose(space_id);
+ return 0;
+
+out:
+ H5E_BEGIN_TRY {
+  H5Aclose(attr_id);
+  H5Sclose(space_id);
+ } H5E_END_TRY;
+ return -1;
+}
+

Added: packages/hdf5/branches/upstream/current/tools/lib/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,573 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+h5tools.lo: \
+   $(srcdir)/h5tools.c \
+   $(srcdir)/h5tools.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(srcdir)/h5tools_ref.h \
+   $(srcdir)/h5tools_str.h \
+   $(srcdir)/h5tools_utils.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+h5tools_str.lo: \
+   $(srcdir)/h5tools_str.c \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(srcdir)/h5tools.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(srcdir)/h5tools_ref.h \
+   $(srcdir)/h5tools_str.h
+h5tools_utils.lo: \
+   $(srcdir)/h5tools_utils.c \
+   $(srcdir)/h5tools_utils.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+h5diff.lo: \
+   $(srcdir)/h5diff.c \
+   $(srcdir)/h5diff.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(srcdir)/h5trav.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+h5diff_array.lo: \
+   $(srcdir)/h5diff_array.c \
+   $(srcdir)/h5diff.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(srcdir)/h5trav.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+h5diff_attr.lo: \
+   $(srcdir)/h5diff_attr.c \
+   $(srcdir)/h5tools.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(srcdir)/h5diff.h \
+   $(srcdir)/h5trav.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+h5diff_dset.lo: \
+   $(srcdir)/h5diff_dset.c \
+   $(srcdir)/h5diff.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(srcdir)/h5trav.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(srcdir)/h5tools.h
+h5diff_util.lo: \
+   $(srcdir)/h5diff_util.c \
+   $(srcdir)/h5diff.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(srcdir)/h5trav.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+h5trav.lo: \
+   $(srcdir)/h5trav.c \
+   $(srcdir)/h5trav.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+h5trav_table.lo: \
+   $(srcdir)/h5trav_table.c \
+   $(srcdir)/h5trav.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h
+h5tools_filters.lo: \
+   $(srcdir)/h5tools_filters.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(srcdir)/h5tools.h
+h5tools_ref.lo: \
+   $(srcdir)/h5tools_ref.c \
+   $(srcdir)/h5tools_ref.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5SLprivate.h \
+   $(srcdir)/h5tools.h \
+   $(srcdir)/h5tools_utils.h
+h5tools_type.lo: \
+   $(srcdir)/h5tools_type.c \
+   $(srcdir)/h5tools.h \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h
+talign.lo: \
+   $(srcdir)/talign.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(srcdir)/h5tools.h

Added: packages/hdf5/branches/upstream/current/tools/lib/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,66 @@
+##
+## 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.
+##
+## HDF5 Library Makefile(.in)
+##
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Add include directory to the C preprocessor flags, add -lh5tools and
+## -lhdf5 to the list of libraries.
+##
+CPPFLAGS=-I. -I$(srcdir) -I$(top_builddir)/src -I$(top_srcdir)/src  \
+         -I$(top_srcdir)/tools/lib @CPPFLAGS@
+
+## Test programs and scripts.
+##
+TEST_PROGS=talign
+TEST_SCRIPTS=
+
+## These are our main targets: library and tools. We link this library
+## statically because some systems can only link executables to a single
+## shared library and libhdf5 is much bigger than libh5tools.
+##
+LT_LINK_LIB=$(LT) --mode=link $(CC) -static -rpath $(libdir)
+LIB=libh5tools.la
+LIBHDF5=$(top_builddir)/src/libhdf5.la
+PUB_PROGS=
+PROGS=$(PUB_PROGS) $(TEST_PROGS)
+
+## Source and object files for the library; do not install
+##
+LIB_SRC=h5tools.c h5tools_str.c h5tools_utils.c h5diff.c h5diff_array.c h5diff_attr.c h5diff_dset.c h5diff_util.c h5trav.c h5trav_table.c h5tools_filters.c h5tools_ref.c h5tools_type.c
+LIB_OBJ=$(LIB_SRC:.c=.lo)
+PUB_LIB=
+AUX_LIB=$(LIB)
+
+TEST_SRC=talign.c
+TEST_OBJ=$(TEST_SRC:.c=.lo)
+
+PRIVATE_HDR=h5tools.h h5tools_str.h h5diff.h h5trav.h
+
+## Programs have to be built before they can be tested!
+##
+check test _test: $(PROGS)
+
+## How to build the programs... They all depend on the hdf5 library and
+## the tools library compiled in this directory.
+##
+$(PROGS): $(LIB) $(LIBHDF5)
+
+talign: talign.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ talign.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/tools/lib/h5diff.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5diff.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5diff.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,609 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdlib.h>
+#include "h5diff.h"
+#include "H5private.h"
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: print_objname
+ *
+ * Purpose: print object name only when:
+ *  1) verbose mode
+ *  2) when diff was found (normal mode)
+ *-------------------------------------------------------------------------
+ */
+int print_objname(diff_opt_t *options, hsize_t nfound)
+{
+ return ( (options->m_verbose || nfound) && !options->m_quiet) ?1:0;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: h5diff
+ *
+ * Purpose: public function, can be called in an application program.
+ *   return differences between 2 HDF5 files
+ *
+ * Return: Number of differences found.
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October 22, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+hsize_t h5diff(const char *fname1,
+               const char *fname2,
+               const char *objname1,
+               const char *objname2,
+               diff_opt_t *options)
+{
+ int          nobjects1, nobjects2;
+ trav_info_t  *info1=NULL;
+ trav_info_t  *info2=NULL;
+ hid_t        file1_id=(-1), file2_id=(-1);
+ hsize_t      nfound=0;
+
+ if (options->m_quiet &&
+     (options->m_verbose || options->m_report))
+ {
+  printf("Error: -q (quiet mode) cannot be added to verbose or report modes\n");
+  options->err_stat=1;
+  return 0;
+ }
+
+/*-------------------------------------------------------------------------
+ * open the files first; if they are not valid, no point in continuing
+ *-------------------------------------------------------------------------
+ */
+
+ /* disable error reporting */
+ H5E_BEGIN_TRY {
+ /* Open the files */
+ if ((file1_id=H5Fopen(fname1,H5F_ACC_RDONLY,H5P_DEFAULT))<0 )
+ {
+  printf("h5diff: <%s>: unable to open file\n", fname1 );
+  options->err_stat=1;
+  goto out;
+ }
+ if ((file2_id=H5Fopen(fname2,H5F_ACC_RDONLY,H5P_DEFAULT))<0 )
+ {
+  printf("h5diff: <%s>: unable to open file\n", fname2 );
+  options->err_stat=1;
+  goto out;
+ }
+ /* enable error reporting */
+ } H5E_END_TRY;
+
+
+/*-------------------------------------------------------------------------
+ * get the number of objects in the files
+ *-------------------------------------------------------------------------
+ */
+ nobjects1 = h5trav_getinfo( file1_id, NULL, 0 );
+ nobjects2 = h5trav_getinfo( file2_id, NULL, 0 );
+
+ if (nobjects1<0 || nobjects2<0)
+ {
+  printf("Error: Could not get get file contents\n");
+  options->err_stat=1;
+  goto out;
+ }
+
+/*-------------------------------------------------------------------------
+ * get the list of objects in the files
+ *-------------------------------------------------------------------------
+ */
+
+ info1 = (trav_info_t*) malloc( nobjects1 * sizeof(trav_info_t));
+ info2 = (trav_info_t*) malloc( nobjects2 * sizeof(trav_info_t));
+ if (info1==NULL || info2==NULL)
+ {
+  printf("Error: Not enough memory for object list\n");
+  options->err_stat=1;
+  if (info1) h5trav_freeinfo(info1,nobjects1);
+  if (info2) h5trav_freeinfo(info2,nobjects1);
+  goto out;
+ }
+
+ h5trav_getinfo( file1_id, info1, 0 );
+ h5trav_getinfo( file2_id, info2, 0 );
+
+/*-------------------------------------------------------------------------
+ * object name was supplied
+ *-------------------------------------------------------------------------
+ */
+
+ if ( objname1 )
+ {
+  assert(objname2);
+  options->cmn_objs=1; /* eliminate warning */
+  nfound=diff_compare(file1_id,fname1,objname1,nobjects1,info1,
+                      file2_id,fname2,objname2,nobjects2,info2,options);
+ }
+
+/*-------------------------------------------------------------------------
+ * compare all
+ *-------------------------------------------------------------------------
+ */
+
+ else
+ {
+  nfound=diff_match(file1_id,nobjects1,info1,
+                    file2_id,nobjects2,info2,options);
+ }
+
+
+ h5trav_freeinfo(info1,nobjects1);
+ h5trav_freeinfo(info2,nobjects2);
+
+out:
+ /* close */
+ H5E_BEGIN_TRY {
+  H5Fclose(file1_id);
+  H5Fclose(file2_id);
+ } H5E_END_TRY;
+
+
+ return nfound;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_match
+ *
+ * Purpose: Find common objects; the algorithm used for this search is the
+ *  cosequential match algorithm and is described in
+ *  Folk, Michael; Zoellick, Bill. (1992). File Structures. Addison-Wesley.
+ *
+ * Return: Number of differences found
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_match( hid_t file1_id,
+                    int nobjects1,
+                    trav_info_t *info1,
+                    hid_t file2_id,
+                    int nobjects2,
+                    trav_info_t *info2,
+                    diff_opt_t *options )
+{
+ int           more_names_exist = (nobjects1>0 && nobjects2>0) ? 1 : 0;
+ trav_table_t  *table=NULL;
+ int           cmp;
+ int           curr1=0;
+ int           curr2=0;
+ unsigned      infile[2];
+ char          c1, c2;
+ hsize_t       nfound=0;
+ int           i;
+
+/*-------------------------------------------------------------------------
+ * build the list
+ *-------------------------------------------------------------------------
+ */
+ trav_table_init( &table );
+
+ while ( more_names_exist )
+ {
+  /* criteria is string compare */
+  cmp = strcmp( info1[curr1].name, info2[curr2].name );
+  if ( cmp == 0 )
+  {
+   infile[0]=1; infile[1]=1;
+   trav_table_addflags(infile, info1[curr1].name, info1[curr1].type, table );
+
+   curr1++;
+   curr2++;
+  }
+  else if ( cmp < 0 )
+  {
+   infile[0]=1; infile[1]=0;
+   trav_table_addflags(infile, info1[curr1].name, info1[curr1].type, table );
+   curr1++;
+  }
+  else
+  {
+   infile[0]=0; infile[1]=1;
+   trav_table_addflags(infile, info2[curr2].name, info2[curr2].type, table );
+   curr2++;
+  }
+
+  more_names_exist = (curr1<nobjects1 && curr2<nobjects2) ? 1 : 0;
+
+
+ } /* end while */
+
+ /* list1 did not end */
+ if (curr1<nobjects1)
+ {
+  while ( curr1<nobjects1 )
+  {
+   infile[0]=1; infile[1]=0;
+   trav_table_addflags(infile, info1[curr1].name, info1[curr1].type, table );
+   curr1++;
+  }
+ }
+
+ /* list2 did not end */
+ if (curr2<nobjects2)
+ {
+  while ( curr2<nobjects2 )
+  {
+   infile[0]=0; infile[1]=1;
+   trav_table_addflags(infile, info2[curr2].name, info2[curr2].type, table );
+   curr2++;
+  }
+ }
+
+/*-------------------------------------------------------------------------
+ * print the list
+ *-------------------------------------------------------------------------
+ */
+
+ if (options->m_verbose)
+ {
+  printf("\n");
+  printf("file1     file2\n");
+  printf("---------------------------------------\n");
+  for (i = 0; i < table->nobjs; i++)
+  {
+   c1 = (table->objs[i].flags[0]) ? 'x' : ' ';
+   c2 = (table->objs[i].flags[1]) ? 'x' : ' ';
+   printf("%5c %6c    %-15s\n", c1, c2, table->objs[i].name);
+  }
+  printf("\n");
+ }
+
+
+/*-------------------------------------------------------------------------
+ * do the diff for common objects
+ *-------------------------------------------------------------------------
+ */
+
+ for (i = 0; i < table->nobjs; i++)
+ {
+  if ( table->objs[i].flags[0] && table->objs[i].flags[1] )
+  {
+   options->cmn_objs=1;
+   nfound+=diff( file1_id,
+                 table->objs[i].name,
+                 file2_id,
+                 table->objs[i].name,
+                 options,
+                 table->objs[i].type );
+  }
+ }
+
+ /* free table */
+ trav_table_free(table);
+
+
+/*-------------------------------------------------------------------------
+ * do the diff for the root.
+ * this is a special case, we get an ID for the root group and call diff()
+ * with this ID; it compares only the root group attributes
+ *-------------------------------------------------------------------------
+ */
+
+ nfound+=diff( file1_id,
+               "/",
+               file2_id,
+               "/",
+               options,
+               H5G_GROUP );
+
+
+ return nfound;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_compare
+ *
+ * Purpose: get objects from list, and check for the same type
+ *
+ * Return: Number of differences found
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+hsize_t diff_compare( hid_t file1_id,
+                      const char *file1_name,
+                      const char *obj1_name,
+                      int nobjects1,
+                      trav_info_t *info1,
+                      hid_t file2_id,
+                      const char *file2_name,
+                      const char *obj2_name,
+                      int nobjects2,
+                      trav_info_t *info2,
+                      diff_opt_t *options )
+{
+
+ int     f1=0, f2=0;
+ hsize_t nfound=0;
+
+ int i = h5trav_getindex( obj1_name, nobjects1, info1 );
+ int j = h5trav_getindex( obj2_name, nobjects2, info2 );
+
+ if ( i == -1 )
+ {
+  printf( "Object <%s> could not be found in <%s>\n", obj1_name, file1_name );
+  f1=1;
+ }
+ if ( j == -1 )
+ {
+  printf( "Object <%s> could not be found in <%s>\n", obj2_name, file2_name );
+  f2=1;
+ }
+ if ( f1 || f2 ) {
+  options->err_stat=1;
+  return 0;
+ }
+
+  /* use the name with "/" first, as obtained by iterator function */
+ obj1_name=info1[i].name;
+ obj2_name=info2[j].name;
+
+ /* objects are not the same type */
+ if ( info1[i].type != info2[j].type)
+ {
+  if (options->m_verbose)
+  printf("Comparison not possible: <%s> is of type %s and <%s> is of type %s\n",
+   obj1_name, get_type(info1[i].type),
+   obj2_name, get_type(info2[j].type) );
+  options->not_cmp=1;
+  return 0;
+ }
+
+ nfound=diff( file1_id, obj1_name, file2_id, obj2_name, options, info1[i].type );
+
+ return nfound;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff
+ *
+ * Purpose: switch between types and choose the diff function
+ * TYPE is either
+ *  H5G_LINK     Object is a symbolic link
+ *  H5G_GROUP		  Object is a group
+ *  H5G_DATASET 	Object is a dataset
+ *  H5G_TYPE     Object is a named data type
+ *
+ * Return: Number of differences found
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+hsize_t diff( hid_t      file1_id,
+              const char *path1,
+              hid_t      file2_id,
+              const char *path2,
+              diff_opt_t *options,
+              H5G_obj_t1  type )
+{
+ hid_t       type1_id=(-1);
+ hid_t       type2_id=(-1);
+ hid_t       grp1_id=(-1);
+ hid_t       grp2_id=(-1);
+ int         ret;
+ H5G_stat_t  sb1;
+ H5G_stat_t  sb2;
+ char        *buf1=NULL;
+ char        *buf2=NULL;
+ hsize_t     nfound=0;
+
+ switch ( type )
+ {
+/*-------------------------------------------------------------------------
+ * H5G_DATASET
+ *-------------------------------------------------------------------------
+ */
+ case H5G_DATASET:
+
+  /* always print name */
+  if (options->m_verbose)
+  {
+   if (print_objname(options,(hsize_t)1))
+    printf( "Dataset:     <%s> and <%s>\n",path1,path2);
+   nfound=diff_dataset(file1_id,file2_id,path1,path2,options);
+
+  }
+  /* check first if we have differences */
+  else
+  {
+   if (options->m_quiet==0)
+   {
+    /* shut up temporarily */
+    options->m_quiet=1;
+    nfound=diff_dataset(file1_id,file2_id,path1,path2,options);
+    /* print again */
+    options->m_quiet=0;
+    if (nfound)
+    {
+     if (print_objname(options,nfound))
+      printf( "Dataset:     <%s> and <%s>\n",path1,path2);
+     nfound=diff_dataset(file1_id,file2_id,path1,path2,options);
+    } /*if*/
+   } /*if*/
+   /* in quiet mode, just count differences */
+   else
+   {
+    nfound=diff_dataset(file1_id,file2_id,path1,path2,options);
+   }
+  }/*else*/
+
+  break;
+
+/*-------------------------------------------------------------------------
+ * H5G_TYPE
+ *-------------------------------------------------------------------------
+ */
+ case H5G_TYPE:
+  if ((type1_id = H5Topen(file1_id, path1))<0)
+   goto out;
+  if ((type2_id = H5Topen(file2_id, path2))<0)
+   goto out;
+
+  if ((ret = H5Tequal(type1_id,type2_id))<0)
+   goto out;
+
+  /* if H5Tequal is > 0 then the datatypes refer to the same datatype */
+  nfound = (ret>0) ? 0 : 1;
+
+  if (print_objname(options,nfound))
+   printf( "Datatype:    <%s> and <%s>\n",path1,path2);
+
+/*-------------------------------------------------------------------------
+ * compare attributes
+ * the if condition refers to cases when the dataset is a referenced object
+ *-------------------------------------------------------------------------
+ */
+  if (path1)
+   diff_attr(type1_id,type2_id,path1,path2,options);
+
+  if ( H5Tclose(type1_id)<0)
+   goto out;
+  if ( H5Tclose(type2_id)<0)
+   goto out;
+
+  break;
+
+/*-------------------------------------------------------------------------
+ * H5G_GROUP
+ *-------------------------------------------------------------------------
+ */
+ case H5G_GROUP:
+  if ((grp1_id = H5Gopen(file1_id, path1))<0)
+   goto out;
+  if ((grp2_id = H5Gopen(file2_id, path2))<0)
+   goto out;
+
+  ret = HDstrcmp(path1,path2);
+
+  /* if "path1" != "path2" then the groups are "different" */
+  nfound = (ret!=0) ? 1 : 0;
+
+  if (print_objname(options,nfound))
+   printf( "Group:       <%s> and <%s>\n",path1,path2);
+
+ /*-------------------------------------------------------------------------
+  * compare attributes
+  * the if condition refers to cases when the dataset is a referenced object
+  *-------------------------------------------------------------------------
+  */
+  if (path1)
+   diff_attr(grp1_id,grp2_id,path1,path2,options);
+
+  if ( H5Gclose(grp1_id)<0)
+   goto out;
+  if ( H5Gclose(grp2_id)<0)
+   goto out;
+
+  break;
+
+
+/*-------------------------------------------------------------------------
+ * H5G_LINK
+ *-------------------------------------------------------------------------
+ */
+ case H5G_LINK:
+  if (H5Gget_objinfo(file1_id,path1,FALSE,&sb1)<0)
+   goto out;
+  if (H5Gget_objinfo(file1_id,path1,FALSE,&sb2)<0)
+   goto out;
+
+  buf1 = malloc(sb1.linklen);
+  buf2 = malloc(sb2.linklen);
+
+  if (H5Gget_linkval(file1_id,path1,sb1.linklen,buf1)<0)
+   goto out;
+  if (H5Gget_linkval(file2_id,path2,sb1.linklen,buf2)<0)
+   goto out;
+
+  ret = HDstrcmp(buf1,buf2);
+
+  /* if "buf1" != "buf2" then the links are "different" */
+  nfound = (ret!=0) ? 1 : 0;
+
+  if (print_objname(options,nfound))
+   printf( "Link:        <%s> and <%s>\n",path1,path2);
+
+  if (buf1) {
+   free(buf1);
+   buf1=NULL;
+  }
+
+  if (buf2) {
+   free(buf2);
+   buf2=NULL;
+  }
+
+  break;
+
+
+ default:
+  nfound=0;
+  if (options->m_verbose) {
+   printf("Comparison not supported: <%s> and <%s> are of type %s\n",
+    path1, path2, get_type(type) );
+  }
+		options->not_cmp=1;
+  break;
+ }
+
+
+ out:
+
+ /* close */
+ /* disable error reporting */
+ H5E_BEGIN_TRY {
+  H5Tclose(type1_id);
+  H5Tclose(type2_id);
+  H5Gclose(grp1_id);
+  H5Tclose(grp2_id);
+   /* enable error reporting */
+ } H5E_END_TRY;
+
+ if (buf1)
+  free(buf1);
+ if (buf2)
+  free(buf2);
+
+ return nfound;
+}
+
+
+
+
+

Added: packages/hdf5/branches/upstream/current/tools/lib/h5diff.h
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5diff.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5diff.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,376 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef H5DIFF_H__
+#define H5DIFF_H__
+
+#include "hdf5.h"
+#include "h5trav.h"
+
+
+#if 0
+#define H5DIFF_DEBUG
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * printf formatting
+ *-------------------------------------------------------------------------
+ */
+
+#define FFORMAT "%-15f %-15f %-15f\n"
+#define IFORMAT "%-15d %-15d %-15d\n"
+#define CFORMAT "%-16c %-17c\n"
+#define SFORMAT "%-16s %-17s\n"
+#define UIFORMAT "%-15u %-15u %-15u\n"
+#define LIFORMAT "%-15ld %-15ld %-15ld\n"
+#define ULIFORMAT "%-15lu %-15lu %-15lu\n"
+/* with -p option */
+#define FPFORMAT "%-15.10g %-15.10g %-15.10g %-14.10g\n"
+#define IPFORMAT "%-15d %-15d %-15d %-14d\n"
+#define UIPFORMAT "%-15u %-15u %-15u %-14u\n"
+#define LPIFORMAT "%-15ld %-15ld %-15ld %-14ld\n"
+#define ULPIFORMAT "%-15lu %-15lu %-15lu %-14lu\n"
+#define SPACES  "          "
+
+
+/*-------------------------------------------------------------------------
+ * command line options
+ *-------------------------------------------------------------------------
+ */
+
+typedef struct {
+ int    m_quiet;   /* quiet mide: no output at all */
+ int    m_report;  /* report mode: print the data */
+ int    m_verbose; /* verbose mode: print the data, list of objcets, warnings */
+ int    d;         /* delta, absolute value to compare */
+ double delta;     /* delta value */
+ int    p;         /* relative error to compare*/
+ double percent;   /* relative error value */
+ int    n;         /* count, compare up to count */
+ hsize_t count;     /* count value */
+ int    err_stat;  /* an error ocurred (1, error, 0, no error) */
+ int    cmn_objs;  /* do we have comparable objects */
+	int    not_cmp;   /* are the objects comparable */
+
+} diff_opt_t;
+
+
+
+/*-------------------------------------------------------------------------
+ * public functions
+ *-------------------------------------------------------------------------
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+hsize_t  h5diff(const char *fname1,
+                const char *fname2,
+                const char *objname1,
+                const char *objname2,
+                diff_opt_t *options);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+/*-------------------------------------------------------------------------
+ * private functions
+ *-------------------------------------------------------------------------
+ */
+
+
+hsize_t diff_dataset( hid_t file1_id,
+                      hid_t file2_id,
+                      const char *obj1_name,
+                      const char *obj2_name,
+                      diff_opt_t *options );
+
+hsize_t diff_datasetid( hid_t dset1_id,
+                        hid_t dset2_id,
+                        const char *obj1_name,
+                        const char *obj2_name,
+                        diff_opt_t *options );
+
+hsize_t diff( hid_t      file1_id,
+              const char *path1,
+              hid_t      file2_id,
+              const char *path2,
+              diff_opt_t *options,
+              H5G_obj_t1  type );
+
+hsize_t diff_compare( hid_t file1_id,
+                      const char *file1_name,
+                      const char *obj1_name,
+                      int nobjects1,
+                      trav_info_t *info1,
+                      hid_t file2_id,
+                      const char *file2_name,
+                      const char *obj2_name,
+                      int nobjects2,
+                      trav_info_t *info2,
+                      diff_opt_t *options );
+
+hsize_t diff_match( hid_t file1_id,
+                    int nobjects1,
+                    trav_info_t *info1,
+                    hid_t file2_id,
+                    int nobjects2,
+                    trav_info_t *info2,
+                    diff_opt_t *options );
+
+hsize_t diff_array( void *_mem1,
+                    void *_mem2,
+                    hsize_t nelmts,
+                    int rank,
+                    hsize_t *dims,
+                    diff_opt_t *options,
+                    const char *name1,
+                    const char *name2,
+                    hid_t m_type,
+                    hid_t container1_id,
+                    hid_t container2_id); /* dataset where the reference came from*/
+
+
+int diff_can_type( hid_t       f_type1, /* file data type */
+                   hid_t       f_type2, /* file data type */
+                   int         rank1,
+                   int         rank2,
+                   hsize_t     *dims1,
+                   hsize_t     *dims2,
+                   hsize_t     *maxdim1,
+                   hsize_t     *maxdim2,
+                   const char  *obj1_name,
+                   const char  *obj2_name,
+                   diff_opt_t  *options );
+
+
+int diff_attr(hid_t      loc1_id,
+              hid_t      loc2_id,
+              const char *path1,
+              const char *path2,
+              diff_opt_t *options
+              );
+
+
+/*-------------------------------------------------------------------------
+ * utility functions
+ *-------------------------------------------------------------------------
+ */
+
+void        print_found(hsize_t nfound);
+void        print_type(hid_t type);
+const char* diff_basename(const char *name);
+const char* get_type(int type);
+const char* get_class(H5T_class_t tclass);
+const char* get_sign(H5T_sign_t sign);
+void        print_dims( int r, hsize_t *d );
+void        print_pos( int        *ph,
+                       int        per,
+                       hsize_t    curr_pos,
+                       hsize_t    *acc,
+                       hsize_t    *pos,
+                       int        rank,
+                       const char *obj1,
+                       const char *obj2 );
+
+int print_objname(diff_opt_t *options, hsize_t nfound);
+
+
+#if defined (H5DIFF_DEBUG)
+void print_sizes( const char *obj1, const char *obj2,
+ hid_t f_type1, hid_t f_type2,
+ hid_t m_type1, hid_t m_type2 );
+#endif
+
+
+hsize_t diff_native_uchar(unsigned char *mem1,
+                          unsigned char *mem2,
+                          hsize_t       i,
+                          int           rank,
+                          hsize_t       *acc,
+                          hsize_t       *pos,
+                          diff_opt_t    *options,
+                          const char    *obj1,
+                          const char    *obj2,
+                          int           *ph);
+
+
+hsize_t diff_char(unsigned char *mem1,
+                  unsigned char *mem2,
+                  hsize_t       i,
+                  int           rank,
+                  hsize_t       *acc,
+                  hsize_t       *pos,
+                  diff_opt_t    *options,
+                  const char    *obj1,
+                  const char    *obj2,
+                  int           *ph);
+
+hsize_t diff_datum(void       *_mem1,
+                   void       *_mem2,
+                   hid_t      m_type,
+                   hsize_t    i,
+                   int        rank,
+                   hsize_t    *acc,
+                   hsize_t    *pos,
+                   diff_opt_t *options,
+                   const char *obj1,
+                   const char *obj2,
+                   hid_t      container1_id,
+                   hid_t      container2_id, /*where the reference came from*/
+                   int        *ph);           /*print header */
+
+
+
+hsize_t diff_float(unsigned char *mem1,
+																			unsigned char *mem2,
+																			hsize_t       nelmts,
+																			int           rank,
+																			hsize_t       *acc,
+																			hsize_t       *pos,
+																			diff_opt_t    *options,
+																			const char    *obj1,
+																			const char    *obj2,
+																			int           *ph);
+
+hsize_t diff_double(unsigned char *mem1,
+																			unsigned char *mem2,
+																			hsize_t       nelmts,
+																			int           rank,
+																			hsize_t       *acc,
+																			hsize_t       *pos,
+																			diff_opt_t    *options,
+																			const char    *obj1,
+																			const char    *obj2,
+																			int           *ph);
+
+hsize_t diff_schar(unsigned char *mem1,
+																			unsigned char *mem2,
+																			hsize_t       nelmts,
+																			int           rank,
+																			hsize_t       *acc,
+																			hsize_t       *pos,
+																			diff_opt_t    *options,
+																			const char    *obj1,
+																			const char    *obj2,
+																			int           *ph);
+
+hsize_t diff_uchar(unsigned char *mem1,
+																			unsigned char *mem2,
+																			hsize_t       nelmts,
+																			int           rank,
+																			hsize_t       *acc,
+																			hsize_t       *pos,
+																			diff_opt_t    *options,
+																			const char    *obj1,
+																			const char    *obj2,
+																			int           *ph);
+
+hsize_t diff_short(unsigned char *mem1,
+																			unsigned char *mem2,
+																			hsize_t       nelmts,
+																			int           rank,
+																			hsize_t       *acc,
+																			hsize_t       *pos,
+																			diff_opt_t    *options,
+																			const char    *obj1,
+																			const char    *obj2,
+																			int           *ph);
+
+hsize_t diff_ushort(unsigned char *mem1,
+																			unsigned char *mem2,
+																			hsize_t       nelmts,
+																			int           rank,
+																			hsize_t       *acc,
+																			hsize_t       *pos,
+																			diff_opt_t    *options,
+																			const char    *obj1,
+																			const char    *obj2,
+																			int           *ph);
+
+hsize_t diff_int(unsigned char *mem1,
+																			unsigned char *mem2,
+																			hsize_t       nelmts,
+																			int           rank,
+																			hsize_t       *acc,
+																			hsize_t       *pos,
+																			diff_opt_t    *options,
+																			const char    *obj1,
+																			const char    *obj2,
+																			int           *ph);
+
+hsize_t diff_uint(unsigned char *mem1,
+																			unsigned char *mem2,
+																			hsize_t       nelmts,
+																			int           rank,
+																			hsize_t       *acc,
+																			hsize_t       *pos,
+																			diff_opt_t    *options,
+																			const char    *obj1,
+																			const char    *obj2,
+																			int           *ph);
+
+hsize_t diff_long(unsigned char *mem1,
+																			unsigned char *mem2,
+																			hsize_t       nelmts,
+																			int           rank,
+																			hsize_t       *acc,
+																			hsize_t       *pos,
+																			diff_opt_t    *options,
+																			const char    *obj1,
+																			const char    *obj2,
+																			int           *ph);
+
+hsize_t diff_ulong(unsigned char *mem1,
+																			unsigned char *mem2,
+																			hsize_t       nelmts,
+																			int           rank,
+																			hsize_t       *acc,
+																			hsize_t       *pos,
+																			diff_opt_t    *options,
+																			const char    *obj1,
+																			const char    *obj2,
+																			int           *ph);
+
+hsize_t diff_llong(unsigned char *mem1,
+																			unsigned char *mem2,
+																			hsize_t       nelmts,
+																			int           rank,
+																			hsize_t       *acc,
+																			hsize_t       *pos,
+																			diff_opt_t    *options,
+																			const char    *obj1,
+																			const char    *obj2,
+																			int           *ph);
+
+hsize_t diff_ullong(unsigned char *mem1,
+																			unsigned char *mem2,
+																			hsize_t       nelmts,
+																			int           rank,
+																			hsize_t       *acc,
+																			hsize_t       *pos,
+																			diff_opt_t    *options,
+																			const char    *obj1,
+																			const char    *obj2,
+																			int           *ph);
+
+
+
+#endif  /* H5DIFF_H__ */

Added: packages/hdf5/branches/upstream/current/tools/lib/h5diff_array.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5diff_array.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5diff_array.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3584 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <math.h>
+#include "h5diff.h"
+#include "H5private.h"
+
+
+/* local functions */
+static void    close_obj(H5G_obj_t1 obj_type, hid_t obj_id);
+static int     diff_region(hid_t region1_id, hid_t region2_id);
+static hbool_t is_zero(const void *_mem, size_t size);
+
+/*-------------------------------------------------------------------------
+ * Function: print_data
+ *
+ * Purpose: print data only in report or verbose modes,
+ *  and do not print in quiet mode
+ *-------------------------------------------------------------------------
+ */
+static int print_data(diff_opt_t *options)
+{
+ return ( (options->m_report || options->m_verbose) && !options->m_quiet)?1:0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_array
+ *
+ * Purpose: compare two memory buffers;
+ *
+ * Return: number of differences found
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 12, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+hsize_t diff_array( void *_mem1,
+                    void *_mem2,
+                    hsize_t nelmts,
+                    int rank,
+                    hsize_t *dims,
+                    diff_opt_t *options,
+                    const char *name1,
+                    const char *name2,
+                    hid_t m_type,
+                    hid_t container1_id,
+                    hid_t container2_id) /* dataset where the reference came from*/
+{
+ hsize_t       nfound=0;          /* number of differences found */
+ size_t        size;              /* size of datum */
+ unsigned char *mem1 = (unsigned char*)_mem1;
+ unsigned char *mem2 = (unsigned char*)_mem2;
+ unsigned char *tmp1;
+ unsigned char *tmp2;
+ hsize_t       acc[32];    /* accumulator position */
+ hsize_t       pos[32];    /* matrix position */
+ int           ph=1;       /* print header  */
+ hsize_t       i;
+ int           j;
+
+ /* get the size. */
+ size = H5Tget_size( m_type );
+
+ acc[rank-1]=1;
+ for(j=(rank-2); j>=0; j--)
+ {
+  acc[j]=acc[j+1]*(int)dims[j+1];
+ }
+ for ( j = 0; j < rank; j++)
+  pos[j]=0;
+
+
+ if(H5Tis_variable_str(m_type))
+ {
+  tmp1 = ((unsigned char**)mem1)[0];
+  tmp2 = ((unsigned char**)mem2)[0];
+  nfound+=diff_datum(
+   tmp1,
+   tmp2,
+   m_type,
+   (hsize_t)0,
+   rank,
+   acc,
+   pos,
+   options,
+   name1,
+   name2,
+   container1_id,
+   container2_id,
+   &ph);
+ }
+
+ else
+
+ {
+
+  switch (H5Tget_class(m_type))
+  {
+  default:
+   assert(0);
+   break;
+
+  case H5T_FLOAT:
+   if (H5Tequal(m_type, H5T_NATIVE_FLOAT))
+    nfound=diff_float(mem1,mem2,nelmts,rank,acc,pos,options,name1,name2,&ph);
+   else if (H5Tequal(m_type, H5T_NATIVE_DOUBLE))
+    nfound=diff_double(mem1,mem2,nelmts,rank,acc,pos,options,name1,name2,&ph);
+   break;
+
+  case H5T_INTEGER:
+
+   if (H5Tequal(m_type, H5T_NATIVE_SCHAR))
+    nfound=diff_schar(mem1,mem2,nelmts,rank,acc,pos,options,name1,name2,&ph);
+   else if (H5Tequal(m_type, H5T_NATIVE_UCHAR))
+    nfound=diff_uchar(mem1,mem2,nelmts,rank,acc,pos,options,name1,name2,&ph);
+   else if (H5Tequal(m_type, H5T_NATIVE_SHORT))
+    nfound=diff_short(mem1,mem2,nelmts,rank,acc,pos,options,name1,name2,&ph);
+   else if (H5Tequal(m_type, H5T_NATIVE_USHORT))
+    nfound=diff_ushort(mem1,mem2,nelmts,rank,acc,pos,options,name1,name2,&ph);
+   else if (H5Tequal(m_type, H5T_NATIVE_INT))
+    nfound=diff_int(mem1,mem2,nelmts,rank,acc,pos,options,name1,name2,&ph);
+   else if (H5Tequal(m_type, H5T_NATIVE_UINT))
+    nfound=diff_uint(mem1,mem2,nelmts,rank,acc,pos,options,name1,name2,&ph);
+   else if (H5Tequal(m_type, H5T_NATIVE_LONG))
+    nfound=diff_long(mem1,mem2,nelmts,rank,acc,pos,options,name1,name2,&ph);
+   else if (H5Tequal(m_type, H5T_NATIVE_ULONG))
+    nfound=diff_ulong(mem1,mem2,nelmts,rank,acc,pos,options,name1,name2,&ph);
+   else if (H5Tequal(m_type, H5T_NATIVE_LLONG))
+    nfound=diff_llong(mem1,mem2,nelmts,rank,acc,pos,options,name1,name2,&ph);
+   else if (H5Tequal(m_type, H5T_NATIVE_ULLONG))
+    nfound=diff_ullong(mem1,mem2,nelmts,rank,acc,pos,options,name1,name2,&ph);
+
+   break;
+
+  case H5T_COMPOUND:
+  case H5T_STRING:
+  case H5T_BITFIELD:
+  case H5T_OPAQUE:
+  case H5T_ENUM:
+  case H5T_ARRAY:
+  case H5T_VLEN:
+  case H5T_REFERENCE:
+
+   for ( i = 0; i < nelmts; i++)
+   {
+    nfound+=diff_datum(
+     mem1 + i * size,
+     mem2 + i * size, /* offset */
+     m_type,
+     i,
+     rank,
+     acc,
+     pos,
+     options,
+     name1,
+     name2,
+     container1_id,
+     container2_id,
+     &ph);
+    if (options->n && nfound>=options->count)
+     return nfound;
+   } /* i */
+  } /* switch */
+ } /* else */
+
+ return nfound;
+}
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_datum
+ *
+ * Purpose: Compare the values pointed to in _MEM1 and _MEM2 of type M_TYPE
+ *
+ * Return: number of differences found
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October 29, 2003
+ *
+ * The compare of the 2 buffers read from the files is made datum by datum.
+ *
+ * H5T_INTEGER and H5T_FLOAT
+ *  Copy the buffer into a compatible local datum and do a numerical
+ *  compare of this datum
+ * H5T_COMPOUND
+ *  Recursively call this function for each member
+ * H5T_ARRAY
+ *  Recursively call this function for each element 
+ * H5T_VLEN
+ *  Recursively call this function for each element 
+ * H5T_STRING
+ *  compare byte by byte in a cycle from 0 to type_size. this type_size is the
+ *  value obtained by the get_size function but it is the string lenght for
+ *  variable sized strings
+ * H5T_OPAQUE
+ *  compare byte by byte in a cycle from 0 to type_size
+ * H5T_BITFIELD
+ *  compare byte by byte in a cycle from 0 to type_size
+ * H5T_ENUM
+ *  for each pair of elements being compared, both bit patterns are converted to
+ *  their corresponding enumeration constant and a string comparison is made
+ * H5T_REFERENCE
+ *  Dereference the object and compare the type (basic object type).
+ *-------------------------------------------------------------------------
+ */
+
+hsize_t diff_datum(void       *_mem1,
+                   void       *_mem2,
+                   hid_t      m_type,
+                   hsize_t    i,
+                   int        rank,
+                   hsize_t    *acc,
+                   hsize_t    *pos,
+                   diff_opt_t *options,
+                   const char *obj1,
+                   const char *obj2,
+                   hid_t      container1_id,
+                   hid_t      container2_id, /*where the reference came from*/
+                   int        *ph)           /*print header */
+{
+ static char   fmt_llong[255];
+ static char   fmt_ullong[255];
+ static char   fmt_llongp[255];
+ static char   fmt_ullongp[255];
+ hsize_t       dims[H5S_MAX_RANK];
+ unsigned char *mem1 = (unsigned char*)_mem1;
+ unsigned char *mem2 = (unsigned char*)_mem2;
+ unsigned      u;
+ hid_t         memb_type;
+ size_t        type_size;
+ size_t        offset;
+ int           nmembs;
+ int           j;
+ hsize_t       nelmts;
+ hsize_t       ndims;
+ size_t        size;
+ int           iszero1;
+ int           iszero2;
+ H5G_obj_t1     obj1_type;
+ H5G_obj_t1     obj2_type;
+ hid_t         obj1_id;
+ hid_t         obj2_id;
+ H5G_stat_t    sb1;
+ H5G_stat_t    sb2;
+ hsize_t       nfound=0;   /* differences found */
+ int           ret=0;      /* check return error */
+
+ if (!fmt_llong[0]) {
+
+  /* Build default formats for long long types */
+  sprintf(fmt_llong,  "%%%sd              %%%sd               %%%sd\n",
+   H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH);
+  sprintf(fmt_ullong, "%%%su              %%%su               %%%su\n",
+   H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH);
+  sprintf(fmt_llongp,  "%%%sd             %%%sd               %%%sd               %%%sd\n",
+   H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH);
+  sprintf(fmt_ullongp, "%%%su             %%%su               %%%su               %%%su\n",
+   H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH);
+
+ }
+
+ type_size = H5Tget_size( m_type );
+
+ switch (H5Tget_class(m_type))
+ {
+ default:
+  assert(0);
+  break;
+ case H5T_TIME:
+  assert(0);
+  break;
+
+/*-------------------------------------------------------------------------
+ * H5T_COMPOUND
+ *-------------------------------------------------------------------------
+ */
+ case H5T_COMPOUND:
+  nmembs = H5Tget_nmembers(m_type);
+  for (j = 0; j < nmembs; j++)
+  {
+   offset    = H5Tget_member_offset(m_type, (unsigned)j);
+   memb_type = H5Tget_member_type(m_type, (unsigned)j);
+   nfound+=diff_datum(
+    mem1+offset,
+    mem2+offset,
+    memb_type,
+    i,
+    rank,
+    acc,
+    pos,
+    options,
+    obj1,
+    obj2,
+    container1_id,
+    container2_id,
+    ph);
+   H5Tclose(memb_type);
+  }
+  break;
+
+/*-------------------------------------------------------------------------
+ * H5T_STRING
+ *-------------------------------------------------------------------------
+ */
+ case H5T_STRING:
+
+  if(H5Tis_variable_str(m_type))
+   type_size = HDstrlen((char*)mem1);
+  else
+   type_size = H5Tget_size(m_type);
+
+  for (u=0; u<type_size; u++)
+   nfound+=diff_char(
+   mem1 + u,
+   mem2 + u, /* offset */
+   i,        /* index position */
+   rank,
+   acc,
+   pos,
+   options,
+   obj1,
+   obj2,
+   ph);
+
+
+  break;
+
+/*-------------------------------------------------------------------------
+ * H5T_BITFIELD
+ *-------------------------------------------------------------------------
+ */
+ case H5T_BITFIELD:
+  {
+   /* byte-by-byte comparison */
+   for (u=0; u<type_size; u++)
+    nfound+=diff_native_uchar(
+    mem1 + u,
+    mem2 + u, /* offset */
+    i,        /* index position */
+    rank,
+    acc,
+    pos,
+    options,
+    obj1,
+    obj2,
+    ph);
+
+  }
+  break;
+/*-------------------------------------------------------------------------
+ * H5T_OPAQUE
+ *-------------------------------------------------------------------------
+ */
+ case H5T_OPAQUE:
+
+ /* byte-by-byte comparison */
+  for (u=0; u<type_size; u++)
+   nfound+=diff_native_uchar(
+   mem1 + u,
+   mem2 + u, /* offset */
+   i,        /* index position */
+   rank,
+   acc,
+   pos,
+   options,
+   obj1,
+   obj2,
+   ph);
+
+  break;
+
+
+/*-------------------------------------------------------------------------
+ * H5T_ENUM
+ *-------------------------------------------------------------------------
+ */
+ case H5T_ENUM:
+
+/* For enumeration types we compare the names instead of the
+   integer values.  For each pair of elements being
+   compared, we convert both bit patterns to their corresponding
+   enumeration constant and do a string comparison */
+
+  {
+   char enum_name1[1024];
+   char enum_name2[1024];
+
+   /* disable error reporting */
+   H5E_BEGIN_TRY {
+
+    if ((H5Tenum_nameof(m_type, mem1, enum_name1, sizeof enum_name1) >= 0) &&
+     (H5Tenum_nameof(m_type, mem2, enum_name2, sizeof enum_name2) >= 0))
+    {
+     if (HDstrcmp(enum_name1,enum_name2)!=0)
+     {
+      nfound=1;
+      if ( print_data(options) )
+      {
+       print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(SFORMAT,enum_name1,enum_name2);
+      }
+     }
+    }
+    else
+    {
+     for (u=0; u<type_size; u++)
+      nfound+=diff_native_uchar(
+      mem1 + u,
+      mem2 + u, /* offset */
+      i,        /* index position */
+      rank,
+      acc,
+      pos,
+      options,
+      obj1,
+      obj2,
+      ph);
+    }
+
+    /* enable error reporting */
+   } H5E_END_TRY;
+  }
+
+
+  break;
+/*-------------------------------------------------------------------------
+ * H5T_ARRAY
+ *-------------------------------------------------------------------------
+ */
+ case H5T_ARRAY:
+  /* get the array's base datatype for each element */
+  memb_type = H5Tget_super(m_type);
+  size      = H5Tget_size(memb_type);
+  ndims     = H5Tget_array_ndims(m_type);
+  H5Tget_array_dims(m_type, dims, NULL);
+  assert(ndims >= 1 && ndims <= H5S_MAX_RANK);
+
+  /* calculate the number of array elements */
+  for (u = 0, nelmts = 1; u <ndims; u++)
+   nelmts *= dims[u];
+  for (u = 0; u < nelmts; u++)
+   nfound+=diff_datum(
+    mem1 + u * size,
+    mem2 + u * size, /* offset */
+    memb_type,
+    i,               /* index position */
+    rank,
+    acc,
+    pos,
+    options,
+    obj1,
+    obj2,
+    container1_id,
+    container2_id,
+    ph);
+  H5Tclose(memb_type);
+  break;
+
+/*-------------------------------------------------------------------------
+ * H5T_VLEN
+ *-------------------------------------------------------------------------
+ */
+ case H5T_VLEN:
+
+  /* get the VL sequences's base datatype for each element */
+  memb_type = H5Tget_super(m_type);
+  size      = H5Tget_size(memb_type);
+
+  /* get the number of sequence elements */
+  nelmts = ((hvl_t *)mem1)->len;
+
+  for (j = 0; j < (int)nelmts; j++)
+    nfound+=diff_datum(
+    ((char *)(((hvl_t *)mem1)->p)) + j * size,
+    ((char *)(((hvl_t *)mem2)->p)) + j * size, /* offset */
+    memb_type,
+    i,         /* index position */
+    rank,
+    acc,
+    pos,
+    options,
+    obj1,
+    obj2,
+    container1_id,
+    container2_id,
+    ph);
+
+  H5Tclose(memb_type);
+
+  break;
+
+
+ case H5T_REFERENCE:
+
+  iszero1=is_zero(_mem1, H5Tget_size(m_type));
+  iszero2=is_zero(_mem2, H5Tget_size(m_type));
+  if (iszero1==1 && iszero2==1)
+   return 0;
+  else if (iszero1!=iszero2)
+   return 1;
+  else
+  {
+
+/*-------------------------------------------------------------------------
+ * H5T_STD_REF_DSETREG
+ * Dataset region reference
+ *-------------------------------------------------------------------------
+ */
+
+   if (H5Tequal(m_type, H5T_STD_REF_DSETREG))
+   {
+    hid_t  region1_id;
+    hid_t  region2_id;
+
+    if ((obj1_id = H5Rdereference(container1_id, H5R_DATASET_REGION, _mem1))<0)
+     ret= -1;
+    if ((obj2_id = H5Rdereference(container2_id, H5R_DATASET_REGION, _mem2))<0)
+     ret= -1;
+    if (H5Gget_objinfo(obj1_id, ".", FALSE, &sb1)<0)
+     ret= -1;
+    if (H5Gget_objinfo(obj2_id, ".", FALSE, &sb2)<0)
+     ret= -1;
+    if ((region1_id = H5Rget_region(container1_id, H5R_DATASET_REGION, _mem1))<0)
+     ret= -1;
+    if ((region2_id = H5Rget_region(container2_id, H5R_DATASET_REGION, _mem2))<0)
+     ret= -1;
+
+    if (ret==-1) {
+     options->err_stat=1;
+     return 0;
+    }
+
+    if (diff_region(region1_id,region2_id))
+    {
+     printf("Different region referenced\n");
+    }
+
+    close_obj(H5G_DATASET,obj1_id);
+    close_obj(H5G_DATASET,obj2_id);
+    H5Sclose(region1_id);
+    H5Sclose(region2_id);
+
+   }/*dataset reference*/
+
+
+/*-------------------------------------------------------------------------
+ * H5T_STD_REF_OBJ
+ * Object references. get the type and OID of the referenced object
+ *-------------------------------------------------------------------------
+ */
+   else if (H5Tequal(m_type, H5T_STD_REF_OBJ))
+   {
+
+    if ((obj1_type = H5Rget_obj_type(container1_id, H5R_OBJECT, _mem1))<0)
+     ret= -1;
+    if ((obj2_type = H5Rget_obj_type(container2_id, H5R_OBJECT, _mem2))<0)
+     ret= -1;
+    if (ret==-1) {
+     options->err_stat=1;
+     return 0;
+    }
+
+    /* check object type */
+    if (obj1_type!=obj2_type)
+    {
+     printf("Different object types referenced: <%s> and <%s>", obj1, obj2);
+     return 1;
+    }
+
+    if ((obj1_id = H5Rdereference(container1_id, H5R_OBJECT, _mem1))<0)
+     ret= -1;
+    if ((obj2_id = H5Rdereference(container2_id, H5R_OBJECT, _mem2))<0)
+     ret= -1;
+    if (ret==-1) {
+     options->err_stat=1;
+     return 0;
+    }
+
+
+    /*deep compare */
+    switch (obj1_type) {
+    case H5G_DATASET:
+     nfound=diff_datasetid(obj1_id,
+      obj2_id,
+      NULL,
+      NULL,
+      options);
+     break;
+    default:
+     printf("Warning: Comparison not possible of object types referenced: <%s> and <%s>",
+      obj1, obj2);
+					options->not_cmp=1;
+     break;
+    }
+
+    close_obj(obj1_type,obj1_id);
+    close_obj(obj2_type,obj2_id);
+
+   }/*object reference*/
+
+  }/*is zero*/
+
+
+  break;
+
+
+ case H5T_INTEGER:
+
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_SCHAR
+ *-------------------------------------------------------------------------
+ */
+  if (H5Tequal(m_type, H5T_NATIVE_SCHAR))
+  {
+   char        temp1_char;
+   char        temp2_char;
+   assert(type_size==sizeof(char));
+   memcpy(&temp1_char, mem1, sizeof(char));
+   memcpy(&temp2_char, mem2, sizeof(char));
+    /* -d and !-p */
+    if (options->d && !options->p)
+    {
+     if (abs(temp1_char-temp2_char) > options->delta)
+     {
+      if ( print_data(options) )
+      {
+       print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IFORMAT,temp1_char,temp2_char,abs(temp1_char-temp2_char));
+      }
+      nfound++;
+     }
+    }
+    /* !-d and -p */
+    else if (!options->d && options->p)
+    {
+     if ( temp1_char!=0 && abs(1-temp2_char/temp1_char) > options->percent )
+     {
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IPFORMAT,temp1_char,temp2_char,abs(temp1_char-temp2_char),
+        abs(1-temp2_char/temp1_char));
+      }
+      nfound++;
+     }
+    }
+    /* -d and -p */
+    else if ( options->d && options->p)
+    {
+     if ( temp1_char!=0 && abs(1-temp2_char/temp1_char) > options->percent &&
+      abs(temp1_char-temp2_char) > options->delta )
+     {
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IPFORMAT,temp1_char,temp2_char,abs(temp1_char-temp2_char),
+        abs(1-temp2_char/temp1_char));
+      }
+      nfound++;
+     }
+    }
+    else if (temp1_char != temp2_char)
+    {
+     if ( print_data(options) )
+     {
+      print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+      printf(SPACES);
+      printf(IFORMAT,temp1_char,temp2_char,abs(temp1_char-temp2_char));
+     }
+     nfound++;
+    }
+
+  } /*H5T_NATIVE_SCHAR*/
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_UCHAR
+ *-------------------------------------------------------------------------
+ */
+  else if (H5Tequal(m_type, H5T_NATIVE_UCHAR))
+  {
+   unsigned char      temp1_uchar;
+   unsigned char      temp2_uchar;
+   assert(type_size==sizeof(unsigned char));
+
+    memcpy(&temp1_uchar, mem1, sizeof(unsigned char));
+    memcpy(&temp2_uchar, mem2, sizeof(unsigned char));
+    /* -d and !-p */
+    if (options->d && !options->p)
+    {
+     if (abs(temp1_uchar-temp2_uchar) > options->delta)
+     {
+     if ( print_data(options) )
+      {
+       print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar));
+      }
+      nfound++;
+     }
+    }
+    /* !-d and -p */
+    else if (!options->d && options->p)
+    {
+     if ( temp1_uchar!=0 && abs(1-temp2_uchar/temp1_uchar) > options->percent )
+     {
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IPFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar),
+        abs(1-temp2_uchar/temp1_uchar));
+      }
+      nfound++;
+     }
+    }
+    /* -d and -p */
+    else if ( options->d && options->p)
+    {
+     if ( temp1_uchar!=0 && abs(1-temp2_uchar/temp1_uchar) > options->percent &&
+      abs(temp1_uchar-temp2_uchar) > options->delta )
+     {
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IPFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar),
+        abs(1-temp2_uchar/temp1_uchar));
+      }
+      nfound++;
+     }
+    }
+    else if (temp1_uchar != temp2_uchar)
+    {
+     if ( print_data(options) )
+     {
+      print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+      printf(SPACES);
+      printf(IFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar));
+     }
+     nfound++;
+    }
+
+  } /*H5T_NATIVE_UCHAR*/
+
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_SHORT
+ *-------------------------------------------------------------------------
+ */
+
+  else if (H5Tequal(m_type, H5T_NATIVE_SHORT))
+  {
+   short       temp1_short;
+   short       temp2_short;
+   assert(type_size==sizeof(short));
+
+    memcpy(&temp1_short, mem1, sizeof(short));
+    memcpy(&temp2_short, mem2, sizeof(short));
+    /* -d and !-p */
+    if (options->d && !options->p)
+    {
+     if (abs(temp1_short-temp2_short) > options->delta)
+     {
+      if ( print_data(options) )
+      {
+       print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IFORMAT,temp1_short,temp2_short,abs(temp1_short-temp2_short));
+      }
+      nfound++;
+     }
+    }
+    /* !-d and -p */
+    else if (!options->d && options->p)
+    {
+     if ( temp1_short!=0 && abs(1-temp2_short/temp1_short) > options->percent )
+     {
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IPFORMAT,temp1_short,temp2_short,abs(temp1_short-temp2_short),
+        abs(1-temp2_short/temp1_short));
+      }
+      nfound++;
+     }
+    }
+    /* -d and -p */
+    else if ( options->d && options->p)
+    {
+     if ( temp1_short!=0 && abs(1-temp2_short/temp1_short) > options->percent &&
+      abs(temp1_short-temp2_short) > options->delta )
+     {
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IPFORMAT,temp1_short,temp2_short,abs(temp1_short-temp2_short),
+        abs(1-temp2_short/temp1_short));
+      }
+      nfound++;
+     }
+    }
+    else if (temp1_short != temp2_short)
+    {
+     if ( print_data(options) )
+     {
+      print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+      printf(SPACES);
+      printf(IFORMAT,temp1_short,temp2_short,abs(temp1_short-temp2_short));
+     }
+     nfound++;
+    }
+
+
+  } /*H5T_NATIVE_SHORT*/
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_USHORT
+ *-------------------------------------------------------------------------
+ */
+
+  else if (H5Tequal(m_type, H5T_NATIVE_USHORT))
+  {
+   unsigned short       temp1_ushort;
+   unsigned short       temp2_ushort;
+   assert(type_size==sizeof(short));
+
+    memcpy(&temp1_ushort, mem1, sizeof(unsigned short));
+    memcpy(&temp2_ushort, mem2, sizeof(unsigned short));
+    /* -d and !-p */
+    if (options->d && !options->p)
+    {
+     if (abs(temp1_ushort-temp2_ushort) > options->delta)
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IFORMAT,temp1_ushort,temp2_ushort,abs(temp1_ushort-temp2_ushort));
+      }
+      nfound++;
+     }
+    }
+    /* !-d and -p */
+    else if (!options->d && options->p)
+    {
+     if ( temp1_ushort!=0 && abs(1-temp2_ushort/temp1_ushort) > options->percent )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IPFORMAT,temp1_ushort,temp2_ushort,abs(temp1_ushort-temp2_ushort),
+        abs(1-temp2_ushort/temp1_ushort));
+      }
+      nfound++;
+     }
+    }
+    /* -d and -p */
+    else if ( options->d && options->p)
+    {
+     if ( temp1_ushort!=0 && abs(1-temp2_ushort/temp1_ushort) > options->percent &&
+      abs(temp1_ushort-temp2_ushort) > options->delta )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IPFORMAT,temp1_ushort,temp2_ushort,abs(temp1_ushort-temp2_ushort),
+        abs(1-temp2_ushort/temp1_ushort));
+      }
+      nfound++;
+     }
+    }
+    else if (temp1_ushort != temp2_ushort)
+    {
+
+     if ( print_data(options) )
+     {
+      print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+      printf(SPACES);
+      printf(IFORMAT,temp1_ushort,temp2_ushort,abs(temp1_ushort-temp2_ushort));
+     }
+     nfound++;
+    }
+
+
+  } /*H5T_NATIVE_USHORT*/
+
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_INT
+ *-------------------------------------------------------------------------
+ */
+
+  else if (H5Tequal(m_type, H5T_NATIVE_INT))
+  {
+   int         temp1_int;
+   int         temp2_int;
+   assert(type_size==sizeof(int));
+
+    memcpy(&temp1_int, mem1, sizeof(int));
+    memcpy(&temp2_int, mem2, sizeof(int));
+    /* -d and !-p */
+    if (options->d && !options->p)
+    {
+     if (abs(temp1_int-temp2_int) > options->delta)
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IFORMAT,temp1_int,temp2_int,abs(temp1_int-temp2_int));
+      }
+      nfound++;
+     }
+    }
+    /* !-d and -p */
+    else if (!options->d && options->p)
+    {
+     if ( temp1_int!=0 && abs(1-temp2_int/temp1_int) > options->percent )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IPFORMAT,temp1_int,temp2_int,abs(temp1_int-temp2_int),
+        abs(1-temp2_int/temp1_int));
+      }
+      nfound++;
+     }
+    }
+    /* -d and -p */
+    else if ( options->d && options->p)
+    {
+     if ( temp1_int!=0 && abs(1-temp2_int/temp1_int) > options->percent &&
+      abs(temp1_int-temp2_int) > options->delta )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(IPFORMAT,temp1_int,temp2_int,abs(temp1_int-temp2_int),
+        abs(1-temp2_int/temp1_int));
+      }
+      nfound++;
+     }
+    }
+    else if (temp1_int != temp2_int)
+    {
+
+     if ( print_data(options) )
+     {
+      print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+      printf(SPACES);
+      printf(IFORMAT,temp1_int,temp2_int,abs(temp1_int-temp2_int));
+     }
+     nfound++;
+    }
+
+
+  } /*H5T_NATIVE_INT*/
+
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_UINT
+ *-------------------------------------------------------------------------
+ */
+
+  else if (H5Tequal(m_type, H5T_NATIVE_UINT))
+  {
+   unsigned int         temp1_uint;
+   unsigned int         temp2_uint;
+   assert(type_size==sizeof(int));
+
+    memcpy(&temp1_uint, mem1, sizeof(unsigned int));
+    memcpy(&temp2_uint, mem2, sizeof(unsigned int));
+    /* -d and !-p */
+    if (options->d && !options->p)
+    {
+     if (abs((int)(temp1_uint-temp2_uint)) > options->delta)
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(UIFORMAT,temp1_uint,temp2_uint,abs((int)(temp1_uint-temp2_uint)));
+      }
+      nfound++;
+     }
+    }
+    /* !-d and -p */
+    else if (!options->d && options->p)
+    {
+     if ( temp1_uint!=0 && abs((int)(1-temp2_uint/temp1_uint)) > options->percent )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(UIPFORMAT,temp1_uint,temp2_uint,abs((int)(temp1_uint-temp2_uint)),
+        abs((int)(1-temp2_uint/temp1_uint)));
+      }
+      nfound++;
+     }
+    }
+    /* -d and -p */
+    else if ( options->d && options->p)
+    {
+     if ( temp1_uint!=0 && abs((int)(1-temp2_uint/temp1_uint)) > options->percent &&
+      abs((int)(temp1_uint-temp2_uint)) > options->delta )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(UIPFORMAT,temp1_uint,temp2_uint,abs((int)(temp1_uint-temp2_uint)),
+        abs((int)(1-temp2_uint/temp1_uint)));
+      }
+      nfound++;
+     }
+    }
+    else if (temp1_uint != temp2_uint)
+    {
+
+     if ( print_data(options) )
+     {
+      print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+      printf(SPACES);
+      printf(UIFORMAT,temp1_uint,temp2_uint,abs((int)(temp1_uint-temp2_uint)));
+     }
+     nfound++;
+    }
+
+
+
+  } /*H5T_NATIVE_UINT*/
+
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_LONG
+ *-------------------------------------------------------------------------
+ */
+
+  else if (H5Tequal(m_type, H5T_NATIVE_LONG))
+  {
+   long        temp1_long;
+   long        temp2_long;
+   assert(type_size==sizeof(long));
+
+    memcpy(&temp1_long, mem1, sizeof(long));
+    memcpy(&temp2_long, mem2, sizeof(long));
+    /* -d and !-p */
+    if (options->d && !options->p)
+    {
+     if (labs(temp1_long-temp2_long) > (long)options->delta)
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(LIFORMAT,temp1_long,temp2_long,labs(temp1_long-temp2_long));
+      }
+      nfound++;
+     }
+    }
+    /* !-d and -p */
+    else if (!options->d && options->p)
+    {
+     if ( temp1_long!=0 && labs(1-temp2_long/temp1_long) > (long)options->percent )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(LPIFORMAT,temp1_long,temp2_long,labs(temp1_long-temp2_long),
+        labs(1-temp2_long/temp1_long));
+      }
+      nfound++;
+     }
+    }
+    /* -d and -p */
+    else if ( options->d && options->p)
+    {
+     if ( temp1_long!=0 && labs(1-temp2_long/temp1_long) > (long)options->percent &&
+      labs(temp1_long-temp2_long) > (long)options->delta )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(LPIFORMAT,temp1_long,temp2_long,labs(temp1_long-temp2_long),
+        labs(1-temp2_long/temp1_long));
+      }
+      nfound++;
+     }
+    }
+    else if (temp1_long != temp2_long)
+    {
+
+     if ( print_data(options) )
+     {
+      print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+      printf(SPACES);
+      printf(LIFORMAT,temp1_long,temp2_long,labs(temp1_long-temp2_long));
+     }
+     nfound++;
+    }
+
+
+
+  } /*H5T_NATIVE_LONG*/
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_ULONG
+ *-------------------------------------------------------------------------
+ */
+
+  else if (H5Tequal(m_type, H5T_NATIVE_ULONG))
+  {
+   unsigned long        temp1_ulong;
+   unsigned long        temp2_ulong;
+   assert(type_size==sizeof(unsigned long));
+
+    memcpy(&temp1_ulong, mem1, sizeof(unsigned long));
+    memcpy(&temp2_ulong, mem2, sizeof(unsigned long));
+    /* -d and !-p */
+    if (options->d && !options->p)
+    {
+     if (labs((long)(temp1_ulong-temp2_ulong)) > (long)options->delta)
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(ULIFORMAT,temp1_ulong,temp2_ulong,labs((long)(temp1_ulong-temp2_ulong)));
+      }
+      nfound++;
+     }
+    }
+    /* !-d and -p */
+    else if (!options->d && options->p)
+    {
+     if ( temp1_ulong!=0 && labs((long)(1-temp2_ulong/temp1_ulong)) > (long)options->percent )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(ULPIFORMAT,temp1_ulong,temp2_ulong,labs((long)(temp1_ulong-temp2_ulong)),
+        labs((long)(1-temp2_ulong/temp1_ulong)));
+      }
+      nfound++;
+     }
+    }
+    /* -d and -p */
+    else if ( options->d && options->p)
+    {
+     if ( temp1_ulong!=0 && labs((long)(1-temp2_ulong/temp1_ulong)) > (long)options->percent &&
+      labs((long)(temp1_ulong-temp2_ulong)) > (long)options->delta )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(ULPIFORMAT,temp1_ulong,temp2_ulong,labs((long)(temp1_ulong-temp2_ulong)),
+        labs((long)(1-temp2_ulong/temp1_ulong)));
+      }
+      nfound++;
+     }
+    }
+    else if (temp1_ulong != temp2_ulong)
+    {
+
+     if ( print_data(options) )
+     {
+      print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+      printf(SPACES);
+      printf(ULIFORMAT,temp1_ulong,temp2_ulong,labs((long)(temp1_ulong-temp2_ulong)));
+     }
+     nfound++;
+    }
+
+
+  } /*H5T_NATIVE_ULONG*/
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_LLONG
+ *-------------------------------------------------------------------------
+ */
+
+  else if (H5Tequal(m_type, H5T_NATIVE_LLONG))
+  {
+   long_long        temp1_llong;
+   long_long        temp2_llong;
+   assert(type_size==sizeof(long_long));
+
+    memcpy(&temp1_llong, mem1, sizeof(long_long));
+    memcpy(&temp2_llong, mem2, sizeof(long_long));
+    /* -d and !-p */
+    if (options->d && !options->p)
+    {
+     if (labs((long)(temp1_llong-temp2_llong)) > (long)options->delta)
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(fmt_llong,temp1_llong,temp2_llong,(long_long)labs((long)(temp1_llong-temp2_llong)));
+      }
+      nfound++;
+     }
+    }
+    /* !-d and -p */
+    else if (!options->d && options->p)
+    {
+     if ( temp1_llong!=0 && labs((long)(1-temp2_llong/temp1_llong)) > (long)options->percent )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(fmt_llongp,temp1_llong,temp2_llong,(long_long)labs((long)(temp1_llong-temp2_llong)),
+        (long_long)labs((long)(1-temp2_llong/temp1_llong)));
+      }
+      nfound++;
+     }
+    }
+    /* -d and -p */
+    else if ( options->d && options->p)
+    {
+     if ( temp1_llong!=0 && labs((long)(1-temp2_llong/temp1_llong)) > (long)options->percent &&
+      labs((long)(temp1_llong-temp2_llong)) > (long)options->delta )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(fmt_llongp,temp1_llong,temp2_llong,(long_long)labs((long)(temp1_llong-temp2_llong)),
+        (long_long)labs((long)(1-temp2_llong/temp1_llong)));
+      }
+      nfound++;
+     }
+    }
+    else if (temp1_llong != temp2_llong)
+    {
+
+     if ( print_data(options) )
+     {
+      print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+      printf(SPACES);
+      printf(fmt_llong,temp1_llong,temp2_llong,(long_long)labs((long)(temp1_llong-temp2_llong)));
+     }
+     nfound++;
+    }
+
+
+  } /*H5T_NATIVE_LLONG*/
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_ULLONG
+ *-------------------------------------------------------------------------
+ */
+
+  else if (H5Tequal(m_type, H5T_NATIVE_ULLONG))
+  {
+   unsigned long_long        temp1_ullong;
+   unsigned long_long        temp2_ullong;
+   assert(type_size==sizeof(unsigned long_long));
+
+    memcpy(&temp1_ullong, mem1, sizeof(unsigned long_long));
+    memcpy(&temp2_ullong, mem2, sizeof(unsigned long_long));
+    /* -d and !-p */
+    if (options->d && !options->p)
+    {
+     if (labs((long)(temp1_ullong-temp2_ullong)) > (long)options->delta)
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(fmt_ullong,temp1_ullong,temp2_ullong,
+        (unsigned long_long)labs((long)(temp1_ullong-temp2_ullong)));
+      }
+      nfound++;
+     }
+    }
+    /* !-d and -p */
+    else if (!options->d && options->p)
+    {
+     if ( temp1_ullong!=0 && labs((long)(1-temp2_ullong/temp1_ullong)) > (long)options->percent )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(fmt_ullongp,temp1_ullong,temp2_ullong,
+        (unsigned long_long)labs((long)(temp1_ullong-temp2_ullong)),
+        (unsigned long_long)labs((long)(1-temp2_ullong/temp1_ullong)));
+      }
+      nfound++;
+     }
+    }
+    /* -d and -p */
+    else if ( options->d && options->p)
+    {
+     if ( temp1_ullong!=0 && labs((long)(1-temp2_ullong/temp1_ullong)) > (long)options->percent &&
+      labs((long)(temp1_ullong-temp2_ullong)) > (long)options->delta )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(fmt_ullongp,temp1_ullong,temp2_ullong,
+        (unsigned long_long)labs((long)(temp1_ullong-temp2_ullong)),
+        (unsigned long_long)labs((long)(1-temp2_ullong/temp1_ullong)));
+      }
+      nfound++;
+     }
+    }
+    else if (temp1_ullong != temp2_ullong)
+    {
+
+     if ( print_data(options) )
+     {
+      print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+      printf(SPACES);
+      printf(fmt_ullong,temp1_ullong,temp2_ullong,
+       (unsigned long_long)labs((long)(temp1_ullong-temp2_ullong)));
+     }
+     nfound++;
+    }
+
+  } /*H5T_NATIVE_ULLONG*/
+
+
+  break; /* H5T_INTEGER class */
+ case H5T_FLOAT:
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_FLOAT
+ *-------------------------------------------------------------------------
+ */
+
+  if (H5Tequal(m_type, H5T_NATIVE_FLOAT))
+  {
+   float       temp1_float;
+   float       temp2_float;
+   assert(type_size==sizeof(float));
+
+    memcpy(&temp1_float, mem1, sizeof(float));
+    memcpy(&temp2_float, mem2, sizeof(float));
+
+
+    /* -d and !-p */
+    if (options->d && !options->p)
+    {
+     if (fabs(temp1_float-temp2_float) > options->delta)
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(FFORMAT,temp1_float,temp2_float,fabs(temp1_float-temp2_float));
+      }
+      nfound++;
+     }
+    }
+    /* !-d and -p */
+    else if (!options->d && options->p)
+    {
+     if ( temp1_float!=0 && fabs(1-temp2_float/temp1_float) > options->percent )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(FPFORMAT,temp1_float,temp2_float,fabs(temp1_float-temp2_float),
+        fabs(1-temp2_float/temp1_float));
+      }
+      nfound++;
+     }
+    }
+    /* -d and -p */
+    else if ( options->d && options->p)
+    {
+     if ( temp1_float!=0 && fabs(1-temp2_float/temp1_float) > options->percent &&
+      fabs(temp1_float-temp2_float) > options->delta )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(FPFORMAT,temp1_float,temp2_float,fabs(temp1_float-temp2_float),
+        fabs(1-temp2_float/temp1_float));
+      }
+      nfound++;
+     }
+    }
+    else if (temp1_float != temp2_float)
+    {
+
+     if ( print_data(options) )
+     {
+      print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+      printf(SPACES);
+      printf(FFORMAT,temp1_float,temp2_float,fabs(temp1_float-temp2_float));
+     }
+     nfound++;
+    }
+
+  } /*H5T_NATIVE_FLOAT*/
+
+/*-------------------------------------------------------------------------
+ * H5T_NATIVE_DOUBLE
+ *-------------------------------------------------------------------------
+ */
+
+  else if (H5Tequal(m_type, H5T_NATIVE_DOUBLE))
+  {
+   double      temp1_double;
+   double      temp2_double;
+   assert(type_size==sizeof(double));
+
+    memcpy(&temp1_double, mem1, sizeof(double));
+    memcpy(&temp2_double, mem2, sizeof(double));
+    /* -d and !-p */
+    if (options->d && !options->p)
+    {
+     if (fabs(temp1_double-temp2_double) > options->delta)
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(FFORMAT,temp1_double,temp2_double,fabs(temp1_double-temp2_double));
+      }
+      nfound++;
+     }
+    }
+    /* !-d and -p */
+    else if (!options->d && options->p)
+    {
+     if ( temp1_double!=0 && fabs(1-temp2_double/temp1_double) > options->percent )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(FPFORMAT,temp1_double,temp2_double,fabs(temp1_double-temp2_double),
+        fabs(1-temp2_double/temp1_double));
+      }
+      nfound++;
+     }
+    }
+    /* -d and -p */
+    else if ( options->d && options->p)
+    {
+     if ( temp1_double!=0 && fabs(1-temp2_double/temp1_double) > options->percent &&
+      fabs(temp1_double-temp2_double) > options->delta )
+     {
+
+      if ( print_data(options) )
+      {
+       print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+       printf(SPACES);
+       printf(FPFORMAT,temp1_double,temp2_double,fabs(temp1_double-temp2_double),
+        fabs(1-temp2_double/temp1_double));
+      }
+      nfound++;
+     }
+    }
+    else if (temp1_double != temp2_double)
+    {
+
+     if ( print_data(options) )
+     {
+      print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+      printf(SPACES);
+      printf(FFORMAT,temp1_double,temp2_double,fabs(temp1_double-temp2_double));
+     }
+     nfound++;
+    }
+
+  } /*H5T_NATIVE_DOUBLE*/
+
+
+  break;   /* H5T_FLOAT class */
+
+  } /* switch */
+
+
+  return nfound;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_native_uchar
+ *
+ * Purpose: do a byte-by-byte comparison and print in numerical format
+ *
+ * Return: number of differences found
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October 29, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+hsize_t diff_native_uchar(unsigned char *mem1,
+                          unsigned char *mem2,
+                          hsize_t       i,
+                          int           rank,
+                          hsize_t       *acc,
+                          hsize_t       *pos,
+                          diff_opt_t    *options,
+                          const char    *obj1,
+                          const char    *obj2,
+                          int           *ph)
+{
+ hsize_t            nfound=0;  /* differences found */
+ unsigned char      temp1_uchar;
+ unsigned char      temp2_uchar;
+
+ memcpy(&temp1_uchar, mem1, sizeof(unsigned char));
+ memcpy(&temp2_uchar, mem2, sizeof(unsigned char));
+
+ /* -d and !-p */
+ if (options->d && !options->p)
+ {
+  if (abs(temp1_uchar-temp2_uchar) > options->delta)
+  {
+   if ( print_data(options) )
+   {
+    print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+    printf(SPACES);
+    printf(IFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar));
+   }
+   nfound++;
+  }
+ }
+ /* !-d and -p */
+ else if (!options->d && options->p)
+ {
+  if ( temp1_uchar!=0 && abs(1-temp2_uchar/temp1_uchar) > options->percent )
+  {
+   if ( print_data(options) )
+   {
+    print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+    printf(SPACES);
+    printf(IPFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar),
+     abs(1-temp2_uchar/temp1_uchar));
+   }
+   nfound++;
+  }
+ }
+ /* -d and -p */
+ else if ( options->d && options->p)
+ {
+  if ( temp1_uchar!=0 && abs(1-temp2_uchar/temp1_uchar) > options->percent &&
+   abs(temp1_uchar-temp2_uchar) > options->delta )
+  {
+   if ( print_data(options) )
+   {
+    print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+    printf(SPACES);
+    printf(IPFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar),
+     abs(1-temp2_uchar/temp1_uchar));
+   }
+   nfound++;
+  }
+ }
+ else if (temp1_uchar != temp2_uchar)
+ {
+  if ( print_data(options) )
+  {
+   print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+   printf(SPACES);
+   printf(IFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar));
+  }
+  nfound++;
+ }
+
+ return nfound;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_char
+ *
+ * Purpose: do a byte-by-byte comparison and print in char format
+ *
+ * Return: number of differences found
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October 29, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+hsize_t diff_char(unsigned char *mem1,
+                  unsigned char *mem2,
+                  hsize_t       i,
+                  int           rank,
+                  hsize_t       *acc,
+                  hsize_t       *pos,
+                  diff_opt_t    *options,
+                  const char    *obj1,
+                  const char    *obj2,
+                  int           *ph)
+{
+ hsize_t            nfound=0;  /* differences found */
+ unsigned char      temp1_uchar;
+ unsigned char      temp2_uchar;
+
+ memcpy(&temp1_uchar, mem1, sizeof(unsigned char));
+ memcpy(&temp2_uchar, mem2, sizeof(unsigned char));
+
+ if (temp1_uchar != temp2_uchar)
+ {
+  if ( print_data(options) )
+  {
+   print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+   printf(SPACES);
+   printf(CFORMAT,temp1_uchar,temp2_uchar);
+  }
+  nfound++;
+ }
+
+ return nfound;
+}
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: is_zero
+ *
+ * Purpose: Determines if memory is initialized to all zero bytes.
+ *
+ * Return: TRUE if all bytes are zero; FALSE otherwise
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+is_zero(const void *_mem, size_t size)
+{
+ const unsigned char *mem = (const unsigned char *)_mem;
+
+ while (size-- > 0)
+  if (mem[size])
+   return FALSE;
+
+  return TRUE;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: close_obj
+ *
+ * Purpose: Auxialiary function to close an object
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static
+void close_obj(H5G_obj_t1 obj_type, hid_t obj_id)
+{
+
+ switch (obj_type) {
+ case H5G_GROUP:
+  H5Gclose(obj_id);
+  break;
+ case H5G_DATASET:
+  H5Dclose(obj_id);
+  break;
+ case H5G_TYPE:
+  H5Tclose(obj_id);
+  break;
+ default:
+  assert(0);
+  break;
+ }
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_region
+ *
+ * Purpose: diff a dataspace region
+ *
+ * Return: 0, diff not found, 1 found
+ *
+ *-------------------------------------------------------------------------
+ */
+static int diff_region(hid_t region1_id, hid_t region2_id)
+{
+ hssize_t  nblocks1, npoints1;
+ hssize_t  nblocks2, npoints2;
+ hsize_t   alloc_size;
+ hsize_t   *ptdata1;
+ hsize_t   *ptdata2;
+ int       ndims1 = H5Sget_simple_extent_ndims(region1_id);
+ int       ndims2 = H5Sget_simple_extent_ndims(region2_id);
+ int       ret=0;
+
+#if defined (H5DIFF_DEBUG)
+ int i;
+#endif
+
+/*
+ * These two functions fail if the region does not have blocks or points,
+ * respectively. They do not currently know how to translate from one to
+ * the other.
+ */
+ H5E_BEGIN_TRY {
+  nblocks1 = H5Sget_select_hyper_nblocks(region1_id);
+  nblocks2 = H5Sget_select_hyper_nblocks(region2_id);
+
+  npoints1 = H5Sget_select_elem_npoints(region1_id);
+  npoints2 = H5Sget_select_elem_npoints(region2_id);
+ } H5E_END_TRY;
+
+ if (nblocks1!=nblocks2 || npoints1!=npoints2 || ndims1!=ndims2)
+  return 1;
+
+ /* compare block information */
+ if (nblocks1 > 0)
+ {
+
+  alloc_size = nblocks1 * ndims1 * 2 * sizeof(ptdata1[0]);
+  assert(alloc_size == (hsize_t)((size_t)alloc_size)); /*check for overflow*/
+
+  ptdata1 = malloc((size_t)alloc_size);
+  H5_CHECK_OVERFLOW(nblocks1, hssize_t, hsize_t);
+  H5Sget_select_hyper_blocklist(region1_id, (hsize_t)0, (hsize_t)nblocks1, ptdata1);
+
+  ptdata2 = malloc((size_t)alloc_size);
+  H5_CHECK_OVERFLOW(nblocks2, hssize_t, hsize_t);
+  H5Sget_select_hyper_blocklist(region2_id, (hsize_t)0, (hsize_t)nblocks2, ptdata2);
+
+  ret=HDmemcmp(ptdata1,ptdata2,(size_t)alloc_size);
+
+#if defined (H5DIFF_DEBUG)
+  for (i = 0; i < nblocks1; i++)
+  {
+   int j;
+
+   /* start coordinates and opposite corner */
+   for (j = 0; j < ndims1; j++)
+    printf("%s%lu", j ? "," : "(",
+    (unsigned long)ptdata1[i * 2 * ndims1 + j]);
+
+   for (j = 0; j < ndims1; j++)
+    printf("%s%lu", j ? "," : ")-(",
+    (unsigned long)ptdata1[i * 2 * ndims1 + j + ndims1]);
+
+   printf(")\n");
+  }
+#endif
+
+
+  HDfree(ptdata1);
+  HDfree(ptdata2);
+ }
+
+ /* Print point information */
+ if (npoints1 > 0)
+ {
+  alloc_size = npoints1 * ndims1 * sizeof(ptdata1[0]);
+  assert(alloc_size == (hsize_t)((size_t)alloc_size)); /*check for overflow*/
+
+  ptdata1 = malloc((size_t)alloc_size);
+  H5_CHECK_OVERFLOW(npoints1,hssize_t,hsize_t);
+  H5Sget_select_elem_pointlist(region1_id, (hsize_t)0, (hsize_t)npoints1, ptdata1);
+
+  ptdata2 = malloc((size_t)alloc_size);
+  H5_CHECK_OVERFLOW(npoints1,hssize_t,hsize_t);
+  H5Sget_select_elem_pointlist(region2_id, (hsize_t)0, (hsize_t)npoints2, ptdata2);
+
+  ret=HDmemcmp(ptdata1,ptdata2,(size_t)alloc_size);
+
+#if defined (H5DIFF_DEBUG)
+  for (i = 0; i < npoints1; i++)
+  {
+   int j;
+
+   printf("%sPt%lu: " ,
+    i ? "," : "",
+    (unsigned long)i);
+
+   for (j = 0; j < ndims1; j++)
+    printf("%s%lu", j ? "," : "(",
+    (unsigned long)(ptdata1[i * ndims1 + j]));
+
+   printf(")");
+  }
+#endif
+
+  HDfree(ptdata1);
+  HDfree(ptdata2);
+ }
+
+ return ret;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_float
+ *
+ * Purpose: diff a H5T_NATIVE_FLOAT type
+ *
+ * Return: number of differences found
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_float(unsigned char *mem1,
+                   unsigned char *mem2,
+                   hsize_t       nelmts,
+                   int           rank,
+                   hsize_t       *acc,
+                   hsize_t       *pos,
+                   diff_opt_t    *options,
+                   const char    *obj1,
+                   const char    *obj2,
+                   int           *ph)
+
+{
+ hsize_t     nfound=0;          /* number of differences found */
+ float       temp1_float;
+ float       temp2_float;
+ hsize_t     i;
+
+
+ /* -d and !-p */
+ if (options->d && !options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_float, mem1, sizeof(float));
+   memcpy(&temp2_float, mem2, sizeof(float));
+
+   if (fabs(temp1_float-temp2_float) > options->delta)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(FFORMAT,temp1_float,temp2_float,fabs(temp1_float-temp2_float));
+    }
+    nfound++;
+   }
+  mem1+=sizeof(float);
+  mem2+=sizeof(float);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+ }
+
+ /* !-d and -p */
+ else if (!options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_float, mem1, sizeof(float));
+   memcpy(&temp2_float, mem2, sizeof(float));
+
+   if ( temp1_float!=0 && fabs(1-temp2_float/temp1_float) > options->percent )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(FPFORMAT,temp1_float,temp2_float,fabs(temp1_float-temp2_float),
+      fabs(1-temp2_float/temp1_float));
+    }
+    nfound++;
+   }
+  mem1+=sizeof(float);
+  mem2+=sizeof(float);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+ }
+
+ /* -d and -p */
+ else if ( options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_float, mem1, sizeof(float));
+   memcpy(&temp2_float, mem2, sizeof(float));
+
+   if ( temp1_float!=0 && fabs(1-temp2_float/temp1_float) > options->percent &&
+    fabs(temp1_float-temp2_float) > options->delta )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(FPFORMAT,temp1_float,temp2_float,fabs(temp1_float-temp2_float),
+      fabs(1-temp2_float/temp1_float));
+    }
+    nfound++;
+   }
+  mem1+=sizeof(float);
+  mem2+=sizeof(float);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+ }
+ else
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_float, mem1, sizeof(float));
+   memcpy(&temp2_float, mem2, sizeof(float));
+
+   if (temp1_float != temp2_float)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(FFORMAT,temp1_float,temp2_float,fabs(temp1_float-temp2_float));
+    }
+    nfound++;
+   }
+
+   mem1+=sizeof(float);
+   mem2+=sizeof(float);
+    if (options->n && nfound>=options->count)
+     return nfound;
+  } /* nelmts */
+
+ }
+
+ return nfound;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_double
+ *
+ * Purpose: diff a H5T_NATIVE_DOUBLE type
+ *
+ * Return: number of differences found
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_double(unsigned char *mem1,
+                    unsigned char *mem2,
+                    hsize_t       nelmts,
+                    int           rank,
+                    hsize_t       *acc,
+                    hsize_t       *pos,
+                    diff_opt_t    *options,
+                    const char    *obj1,
+                    const char    *obj2,
+                    int           *ph)
+
+{
+ hsize_t     nfound=0;          /* number of differences found */
+ double      temp1_double;
+ double      temp2_double;
+ hsize_t     i;
+
+
+ /* -d and !-p */
+ if (options->d && !options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_double, mem1, sizeof(double));
+   memcpy(&temp2_double, mem2, sizeof(double));
+
+   if (fabs(temp1_double-temp2_double) > options->delta)
+   {
+
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(FFORMAT,temp1_double,temp2_double,fabs(temp1_double-temp2_double));
+    }
+    nfound++;
+   }
+  mem1+=sizeof(double);
+  mem2+=sizeof(double);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+ }
+
+ /* !-d and -p */
+ else if (!options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_double, mem1, sizeof(double));
+   memcpy(&temp2_double, mem2, sizeof(double));
+
+   if ( temp1_double!=0 && fabs(1-temp2_double/temp1_double) > options->percent )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(FPFORMAT,temp1_double,temp2_double,fabs(temp1_double-temp2_double),
+      fabs(1-temp2_double/temp1_double));
+    }
+    nfound++;
+   }
+  mem1+=sizeof(double);
+  mem2+=sizeof(double);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+ }
+
+ /* -d and -p */
+ else if ( options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_double, mem1, sizeof(double));
+   memcpy(&temp2_double, mem2, sizeof(double));
+
+   if ( temp1_double!=0 && fabs(1-temp2_double/temp1_double) > options->percent &&
+    fabs(temp1_double-temp2_double) > options->delta )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(FPFORMAT,temp1_double,temp2_double,fabs(temp1_double-temp2_double),
+      fabs(1-temp2_double/temp1_double));
+    }
+    nfound++;
+   }
+   mem1+=sizeof(double);
+   mem2+=sizeof(double);
+    if (options->n && nfound>=options->count)
+     return nfound;
+  }
+ }
+ else
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_double, mem1, sizeof(double));
+   memcpy(&temp2_double, mem2, sizeof(double));
+
+   if (temp1_double != temp2_double)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(FFORMAT,temp1_double,temp2_double,fabs(temp1_double-temp2_double));
+    }
+    nfound++;
+   }
+
+   mem1+=sizeof(double);
+   mem2+=sizeof(double);
+    if (options->n && nfound>=options->count)
+     return nfound;
+  } /* nelmts */
+
+ }
+
+ return nfound;
+}
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_schar
+ *
+ * Purpose: diff a H5T_NATIVE_SCHAR type
+ *
+ * Return: number of differences found
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_schar(unsigned char *mem1,
+                   unsigned char *mem2,
+                   hsize_t       nelmts,
+                   int           rank,
+                   hsize_t       *acc,
+                   hsize_t       *pos,
+                   diff_opt_t    *options,
+                   const char    *obj1,
+                   const char    *obj2,
+                   int           *ph)
+
+{
+ hsize_t     nfound=0;          /* number of differences found */
+ char        temp1_char;
+ char        temp2_char;
+ hsize_t     i;
+
+
+ /* -d and !-p */
+ if (options->d && !options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_char, mem1, sizeof(char));
+   memcpy(&temp2_char, mem2, sizeof(char));
+
+   if (abs(temp1_char-temp2_char) > options->delta)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IFORMAT,temp1_char,temp2_char,abs(temp1_char-temp2_char));
+    }
+    nfound++;
+   }
+  mem1+=sizeof(char);
+  mem2+=sizeof(char);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+ }
+
+ /* !-d and -p */
+ else if (!options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_char, mem1, sizeof(char));
+   memcpy(&temp2_char, mem2, sizeof(char));
+
+   if ( temp1_char!=0 && abs(1-temp2_char/temp1_char) > options->percent )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IPFORMAT,temp1_char,temp2_char,abs(temp1_char-temp2_char),
+      abs(1-temp2_char/temp1_char));
+    }
+    nfound++;
+   }
+  mem1+=sizeof(char);
+  mem2+=sizeof(char);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+ }
+
+ /* -d and -p */
+ else if ( options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_char, mem1, sizeof(char));
+   memcpy(&temp2_char, mem2, sizeof(char));
+
+   if ( temp1_char!=0 && abs(1-temp2_char/temp1_char) > options->percent &&
+    abs(temp1_char-temp2_char) > options->delta )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IPFORMAT,temp1_char,temp2_char,abs(temp1_char-temp2_char),
+      abs(1-temp2_char/temp1_char));
+    }
+    nfound++;
+   }
+  mem1+=sizeof(char);
+  mem2+=sizeof(char);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+ else
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_char, mem1, sizeof(char));
+   memcpy(&temp2_char, mem2, sizeof(char));
+
+   if (temp1_char != temp2_char)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IFORMAT,temp1_char,temp2_char,abs(temp1_char-temp2_char));
+    }
+    nfound++;
+   }
+
+   mem1+=sizeof(char);
+   mem2+=sizeof(char);
+    if (options->n && nfound>=options->count)
+     return nfound;
+  } /* nelmts */
+
+ }
+
+ return nfound;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_uchar
+ *
+ * Purpose: diff a H5T_NATIVE_UCHAR type
+ *
+ * Return: number of differences found
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_uchar(unsigned char *mem1,
+                   unsigned char *mem2,
+                   hsize_t       nelmts,
+                   int           rank,
+                   hsize_t       *acc,
+                   hsize_t       *pos,
+                   diff_opt_t    *options,
+                   const char    *obj1,
+                   const char    *obj2,
+                   int           *ph)
+
+{
+ hsize_t       nfound=0;          /* number of differences found */
+ unsigned char temp1_uchar;
+ unsigned char temp2_uchar;
+ hsize_t       i;
+
+
+ /* -d and !-p */
+ if (options->d && !options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_uchar, mem1, sizeof(unsigned char));
+   memcpy(&temp2_uchar, mem2, sizeof(unsigned char));
+
+   if (abs(temp1_uchar-temp2_uchar) > options->delta)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar));
+    }
+    nfound++;
+   }
+  mem1+=sizeof(unsigned char);
+  mem2+=sizeof(unsigned char);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+
+ /* !-d and -p */
+ else if (!options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_uchar, mem1, sizeof(unsigned char));
+   memcpy(&temp2_uchar, mem2, sizeof(unsigned char));
+
+   if ( temp1_uchar!=0 && abs(1-temp2_uchar/temp1_uchar) > options->percent )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IPFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar),
+      abs(1-temp2_uchar/temp1_uchar));
+    }
+    nfound++;
+   }
+  mem1+=sizeof(unsigned char);
+  mem2+=sizeof(unsigned char);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+ }
+
+ /* -d and -p */
+ else if ( options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_uchar, mem1, sizeof(unsigned char));
+   memcpy(&temp2_uchar, mem2, sizeof(unsigned char));
+
+   if ( temp1_uchar!=0 && abs(1-temp2_uchar/temp1_uchar) > options->percent &&
+    abs(temp1_uchar-temp2_uchar) > options->delta )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IPFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar),
+      abs(1-temp2_uchar/temp1_uchar));
+    }
+    nfound++;
+   }
+   mem1+=sizeof(unsigned char);
+  mem2+=sizeof(unsigned char);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+ else
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_uchar, mem1, sizeof(unsigned char));
+   memcpy(&temp2_uchar, mem2, sizeof(unsigned char));
+
+   if (temp1_uchar != temp2_uchar)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IFORMAT,temp1_uchar,temp2_uchar,abs(temp1_uchar-temp2_uchar));
+    }
+    nfound++;
+   }
+
+   mem1+=sizeof(unsigned char);
+   mem2+=sizeof(unsigned char);
+    if (options->n && nfound>=options->count)
+     return nfound;
+  } /* nelmts */
+
+ }
+
+ return nfound;
+}
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_short
+ *
+ * Purpose: diff a H5T_NATIVE_SHORT type
+ *
+ * Return: number of differences found
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_short(unsigned char *mem1,
+                   unsigned char *mem2,
+                   hsize_t       nelmts,
+                   int           rank,
+                   hsize_t       *acc,
+                   hsize_t       *pos,
+                   diff_opt_t    *options,
+                   const char    *obj1,
+                   const char    *obj2,
+                   int           *ph)
+
+{
+ hsize_t       nfound=0;          /* number of differences found */
+ short         temp1_short;
+ short         temp2_short;
+ hsize_t       i;
+
+
+ /* -d and !-p */
+ if (options->d && !options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_short, mem1, sizeof(short));
+   memcpy(&temp2_short, mem2, sizeof(short));
+
+   if (abs(temp1_short-temp2_short) > options->delta)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IFORMAT,temp1_short,temp2_short,abs(temp1_short-temp2_short));
+    }
+    nfound++;
+   }
+   mem1+=sizeof(short);
+  mem2+=sizeof(short);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+
+ /* !-d and -p */
+ else if (!options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_short, mem1, sizeof(short));
+   memcpy(&temp2_short, mem2, sizeof(short));
+
+   if ( temp1_short!=0 && abs(1-temp2_short/temp1_short) > options->percent )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IPFORMAT,temp1_short,temp2_short,abs(temp1_short-temp2_short),
+      abs(1-temp2_short/temp1_short));
+    }
+    nfound++;
+   }
+   mem1+=sizeof(short);
+  mem2+=sizeof(short);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+
+ }
+
+ /* -d and -p */
+ else if ( options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_short, mem1, sizeof(short));
+   memcpy(&temp2_short, mem2, sizeof(short));
+
+   if ( temp1_short!=0 && abs(1-temp2_short/temp1_short) > options->percent &&
+    abs(temp1_short-temp2_short) > options->delta )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IPFORMAT,temp1_short,temp2_short,abs(temp1_short-temp2_short),
+      abs(1-temp2_short/temp1_short));
+    }
+    nfound++;
+   }
+   mem1+=sizeof(short);
+  mem2+=sizeof(short);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+ else
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_short, mem1, sizeof(short));
+   memcpy(&temp2_short, mem2, sizeof(short));
+
+   if (temp1_short != temp2_short)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IFORMAT,temp1_short,temp2_short,abs(temp1_short-temp2_short));
+    }
+    nfound++;
+   }
+
+   mem1+=sizeof(short);
+   mem2+=sizeof(short);
+    if (options->n && nfound>=options->count)
+     return nfound;
+  } /* nelmts */
+
+ }
+
+ return nfound;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_ushort
+ *
+ * Purpose: diff a H5T_NATIVE_USHORT type
+ *
+ * Return: number of differences found
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_ushort(unsigned char *mem1,
+                    unsigned char *mem2,
+                    hsize_t       nelmts,
+                    int           rank,
+                    hsize_t       *acc,
+                    hsize_t       *pos,
+                    diff_opt_t    *options,
+                    const char    *obj1,
+                    const char    *obj2,
+                    int           *ph)
+
+{
+ hsize_t        nfound=0;          /* number of differences found */
+ unsigned short temp1_ushort;
+ unsigned short temp2_ushort;
+ hsize_t        i;
+
+
+ /* -d and !-p */
+ if (options->d && !options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_ushort, mem1, sizeof(unsigned short));
+   memcpy(&temp2_ushort, mem2, sizeof(unsigned short));
+
+   if (abs(temp1_ushort-temp2_ushort) > options->delta)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IFORMAT,temp1_ushort,temp2_ushort,abs(temp1_ushort-temp2_ushort));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(unsigned short);
+  mem2+=sizeof(unsigned short);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+
+ /* !-d and -p */
+ else if (!options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_ushort, mem1, sizeof(unsigned short));
+   memcpy(&temp2_ushort, mem2, sizeof(unsigned short));
+
+   if ( temp1_ushort!=0 && abs(1-temp2_ushort/temp1_ushort) > options->percent )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IPFORMAT,temp1_ushort,temp2_ushort,abs(temp1_ushort-temp2_ushort),
+      abs(1-temp2_ushort/temp1_ushort));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(unsigned short);
+  mem2+=sizeof(unsigned short);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+
+ }
+
+ /* -d and -p */
+ else if ( options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_ushort, mem1, sizeof(unsigned short));
+   memcpy(&temp2_ushort, mem2, sizeof(unsigned short));
+
+   if ( temp1_ushort!=0 && abs(1-temp2_ushort/temp1_ushort) > options->percent &&
+    abs(temp1_ushort-temp2_ushort) > options->delta )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IPFORMAT,temp1_ushort,temp2_ushort,abs(temp1_ushort-temp2_ushort),
+      abs(1-temp2_ushort/temp1_ushort));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(unsigned short);
+  mem2+=sizeof(unsigned short);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+ else
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_ushort, mem1, sizeof(unsigned short));
+   memcpy(&temp2_ushort, mem2, sizeof(unsigned short));
+
+   if (temp1_ushort != temp2_ushort)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IFORMAT,temp1_ushort,temp2_ushort,abs(temp1_ushort-temp2_ushort));
+    }
+    nfound++;
+   }
+
+   mem1+=sizeof(unsigned short);
+   mem2+=sizeof(unsigned short);
+    if (options->n && nfound>=options->count)
+     return nfound;
+  } /* nelmts */
+
+ }
+
+ return nfound;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_int
+ *
+ * Purpose: diff a H5T_NATIVE_INT type
+ *
+ * Return: number of differences found
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_int(unsigned char *mem1,
+                 unsigned char *mem2,
+                 hsize_t       nelmts,
+                 int           rank,
+                 hsize_t       *acc,
+                 hsize_t       *pos,
+                 diff_opt_t    *options,
+                 const char    *obj1,
+                 const char    *obj2,
+                 int           *ph)
+
+{
+ hsize_t       nfound=0;          /* number of differences found */
+ int           temp1_int;
+ int           temp2_int;
+ hsize_t       i;
+
+
+ /* -d and !-p */
+ if (options->d && !options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_int, mem1, sizeof(int));
+   memcpy(&temp2_int, mem2, sizeof(int));
+
+   if (abs(temp1_int-temp2_int) > options->delta)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IFORMAT,temp1_int,temp2_int,abs(temp1_int-temp2_int));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(int);
+  mem2+=sizeof(int);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+
+ /* !-d and -p */
+ else if (!options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_int, mem1, sizeof(int));
+   memcpy(&temp2_int, mem2, sizeof(int));
+
+   if ( temp1_int!=0 && abs(1-temp2_int/temp1_int) > options->percent )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IPFORMAT,temp1_int,temp2_int,abs(temp1_int-temp2_int),
+      abs(1-temp2_int/temp1_int));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(int);
+  mem2+=sizeof(int);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+
+ }
+
+ /* -d and -p */
+ else if ( options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_int, mem1, sizeof(int));
+   memcpy(&temp2_int, mem2, sizeof(int));
+
+   if ( temp1_int!=0 && abs(1-temp2_int/temp1_int) > options->percent &&
+    abs(temp1_int-temp2_int) > options->delta )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IPFORMAT,temp1_int,temp2_int,abs(temp1_int-temp2_int),
+      abs(1-temp2_int/temp1_int));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(int);
+  mem2+=sizeof(int);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+ else
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_int, mem1, sizeof(int));
+   memcpy(&temp2_int, mem2, sizeof(int));
+
+   if (temp1_int != temp2_int)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IFORMAT,temp1_int,temp2_int,abs(temp1_int-temp2_int));
+    }
+    nfound++;
+   }
+
+   mem1+=sizeof(int);
+   mem2+=sizeof(int);
+    if (options->n && nfound>=options->count)
+     return nfound;
+  } /* nelmts */
+
+ }
+
+ return nfound;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_uint
+ *
+ * Purpose: diff a H5T_NATIVE_UINT type
+ *
+ * Return: number of differences found
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_uint(unsigned char *mem1,
+                  unsigned char *mem2,
+                  hsize_t       nelmts,
+                  int           rank,
+                  hsize_t       *acc,
+                  hsize_t       *pos,
+                  diff_opt_t    *options,
+                  const char    *obj1,
+                  const char    *obj2,
+                  int           *ph)
+
+{
+ hsize_t        nfound=0;          /* number of differences found */
+ unsigned int temp1_uint;
+ unsigned int temp2_uint;
+ hsize_t        i;
+
+
+ /* -d and !-p */
+ if (options->d && !options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_uint, mem1, sizeof(unsigned int));
+   memcpy(&temp2_uint, mem2, sizeof(unsigned int));
+
+   if (abs(temp1_uint-temp2_uint) > options->delta)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IFORMAT,temp1_uint,temp2_uint,abs(temp1_uint-temp2_uint));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(unsigned int);
+  mem2+=sizeof(unsigned int);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+
+ /* !-d and -p */
+ else if (!options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_uint, mem1, sizeof(unsigned int));
+   memcpy(&temp2_uint, mem2, sizeof(unsigned int));
+
+   if ( temp1_uint!=0 && abs(1-temp2_uint/temp1_uint) > options->percent )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IPFORMAT,temp1_uint,temp2_uint,abs(temp1_uint-temp2_uint),
+      abs(1-temp2_uint/temp1_uint));
+    }
+    nfound++;
+   }
+   mem1+=sizeof(unsigned int);
+  mem2+=sizeof(unsigned int);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+
+ }
+
+ /* -d and -p */
+ else if ( options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_uint, mem1, sizeof(unsigned int));
+   memcpy(&temp2_uint, mem2, sizeof(unsigned int));
+
+   if ( temp1_uint!=0 && abs(1-temp2_uint/temp1_uint) > options->percent &&
+    abs(temp1_uint-temp2_uint) > options->delta )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IPFORMAT,temp1_uint,temp2_uint,abs(temp1_uint-temp2_uint),
+      abs(1-temp2_uint/temp1_uint));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(unsigned int);
+  mem2+=sizeof(unsigned int);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+ else
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_uint, mem1, sizeof(unsigned int));
+   memcpy(&temp2_uint, mem2, sizeof(unsigned int));
+
+   if (temp1_uint != temp2_uint)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(IFORMAT,temp1_uint,temp2_uint,abs(temp1_uint-temp2_uint));
+    }
+    nfound++;
+   }
+
+   mem1+=sizeof(unsigned int);
+   mem2+=sizeof(unsigned int);
+    if (options->n && nfound>=options->count)
+     return nfound;
+  } /* nelmts */
+
+ }
+
+ return nfound;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_long
+ *
+ * Purpose: diff a H5T_NATIVE_LONG type
+ *
+ * Return: number of differences found
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_long(unsigned char *mem1,
+                  unsigned char *mem2,
+                  hsize_t       nelmts,
+                  int           rank,
+                  hsize_t       *acc,
+                  hsize_t       *pos,
+                  diff_opt_t    *options,
+                  const char    *obj1,
+                  const char    *obj2,
+                  int           *ph)
+
+{
+ hsize_t       nfound=0;          /* number of differences found */
+ long          temp1_long;
+ long          temp2_long;
+ hsize_t       i;
+
+
+ /* -d and !-p */
+ if (options->d && !options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_long, mem1, sizeof(long));
+   memcpy(&temp2_long, mem2, sizeof(long));
+
+   if (labs(temp1_long-temp2_long) > (long)options->delta)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(LIFORMAT,temp1_long,temp2_long,labs(temp1_long-temp2_long));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(long);
+  mem2+=sizeof(long);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+
+ /* !-d and -p */
+ else if (!options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_long, mem1, sizeof(long));
+   memcpy(&temp2_long, mem2, sizeof(long));
+
+   if ( temp1_long!=0 && labs(1-temp2_long/temp1_long) > options->percent )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(LPIFORMAT,temp1_long,temp2_long,labs(temp1_long-temp2_long),
+      labs(1-temp2_long/temp1_long));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(long);
+  mem2+=sizeof(long);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+
+ }
+
+ /* -d and -p */
+ else if ( options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_long, mem1, sizeof(long));
+   memcpy(&temp2_long, mem2, sizeof(long));
+
+   if ( temp1_long!=0 && labs(1-temp2_long/temp1_long) > options->percent &&
+    labs(temp1_long-temp2_long) > (long)options->delta )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(LPIFORMAT,temp1_long,temp2_long,labs(temp1_long-temp2_long),
+      labs(1-temp2_long/temp1_long));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(long);
+  mem2+=sizeof(long);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+ else
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_long, mem1, sizeof(long));
+   memcpy(&temp2_long, mem2, sizeof(long));
+
+   if (temp1_long != temp2_long)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(LIFORMAT,temp1_long,temp2_long,labs(temp1_long-temp2_long));
+    }
+    nfound++;
+   }
+
+   mem1+=sizeof(long);
+   mem2+=sizeof(long);
+    if (options->n && nfound>=options->count)
+     return nfound;
+  } /* nelmts */
+
+ }
+
+ return nfound;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_ulong
+ *
+ * Purpose: diff a H5T_NATIVE_ULONG type
+ *
+ * Return: number of differences found
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_ulong(unsigned char *mem1,
+                   unsigned char *mem2,
+                   hsize_t       nelmts,
+                   int           rank,
+                   hsize_t       *acc,
+                   hsize_t       *pos,
+                   diff_opt_t    *options,
+                   const char    *obj1,
+                   const char    *obj2,
+                   int           *ph)
+
+{
+ hsize_t        nfound=0;          /* number of differences found */
+ unsigned long  temp1_ulong;
+ unsigned long  temp2_ulong;
+ hsize_t        i;
+
+
+ /* -d and !-p */
+ if (options->d && !options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_ulong, mem1, sizeof(unsigned long));
+   memcpy(&temp2_ulong, mem2, sizeof(unsigned long));
+
+   if (labs((long)(temp1_ulong-temp2_ulong)) > (long)options->delta)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(LIFORMAT,temp1_ulong,temp2_ulong,labs(temp1_ulong-temp2_ulong));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(unsigned long);
+  mem2+=sizeof(unsigned long);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+
+ /* !-d and -p */
+ else if (!options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_ulong, mem1, sizeof(unsigned long));
+   memcpy(&temp2_ulong, mem2, sizeof(unsigned long));
+
+   if ( temp1_ulong!=0 && labs(1-temp2_ulong/temp1_ulong) > options->percent )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(LPIFORMAT,temp1_ulong,temp2_ulong,labs(temp1_ulong-temp2_ulong),
+      labs(1-temp2_ulong/temp1_ulong));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(unsigned long);
+  mem2+=sizeof(unsigned long);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+
+ }
+
+ /* -d and -p */
+ else if ( options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_ulong, mem1, sizeof(unsigned long));
+   memcpy(&temp2_ulong, mem2, sizeof(unsigned long));
+
+   if ( temp1_ulong!=0 && labs(1-temp2_ulong/temp1_ulong) > options->percent &&
+    labs(temp1_ulong-temp2_ulong) > options->delta )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(LPIFORMAT,temp1_ulong,temp2_ulong,labs(temp1_ulong-temp2_ulong),
+      labs(1-temp2_ulong/temp1_ulong));
+    }
+    nfound++;
+   }
+   mem1+=sizeof(unsigned long);
+  mem2+=sizeof(unsigned long);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+ else
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_ulong, mem1, sizeof(unsigned long));
+   memcpy(&temp2_ulong, mem2, sizeof(unsigned long));
+
+   if (temp1_ulong != temp2_ulong)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(LIFORMAT,temp1_ulong,temp2_ulong,labs(temp1_ulong-temp2_ulong));
+    }
+    nfound++;
+   }
+
+   mem1+=sizeof(unsigned long);
+   mem2+=sizeof(unsigned long);
+    if (options->n && nfound>=options->count)
+     return nfound;
+  } /* nelmts */
+
+ }
+
+ return nfound;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_llong
+ *
+ * Purpose: diff a H5T_NATIVE_LLONG type
+ *
+ * Return: number of differences found
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_llong(unsigned char *mem1,
+                   unsigned char *mem2,
+                   hsize_t       nelmts,
+                   int           rank,
+                   hsize_t       *acc,
+                   hsize_t       *pos,
+                   diff_opt_t    *options,
+                   const char    *obj1,
+                   const char    *obj2,
+                   int           *ph)
+
+{
+ hsize_t       nfound=0;          /* number of differences found */
+ long_long     temp1_llong;
+ long_long     temp2_llong;
+ hsize_t       i;
+ static char   fmt_llong[255];
+ static char   fmt_llongp[255];
+
+  if (!fmt_llong[0]) {
+  /* build default formats for long long types */
+  sprintf(fmt_llong,  "%%%sd              %%%sd               %%%sd\n",
+   H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH);
+  sprintf(fmt_llongp,  "%%%sd             %%%sd               %%%sd               %%%sd\n",
+   H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH);
+ }
+
+
+ /* -d and !-p */
+ if (options->d && !options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_llong, mem1, sizeof(long_long));
+   memcpy(&temp2_llong, mem2, sizeof(long_long));
+
+   if (labs( (long) (temp1_llong-temp2_llong)) > options->delta)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(fmt_llong,temp1_llong,temp2_llong,labs((long)(temp1_llong-temp2_llong)));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(long_long);
+  mem2+=sizeof(long_long);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+
+ /* !-d and -p */
+ else if (!options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_llong, mem1, sizeof(long_long));
+   memcpy(&temp2_llong, mem2, sizeof(long_long));
+
+   if ( temp1_llong!=0 && labs((long)(1-temp2_llong/temp1_llong)) > options->percent )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(fmt_llongp,temp1_llong,temp2_llong,labs((long)(temp1_llong-temp2_llong)),
+      labs((long)(1-temp2_llong/temp1_llong)));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(long_long);
+  mem2+=sizeof(long_long);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+
+ }
+
+ /* -d and -p */
+ else if ( options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_llong, mem1, sizeof(long_long));
+   memcpy(&temp2_llong, mem2, sizeof(long_long));
+
+   if ( temp1_llong!=0 && labs((long)(1-temp2_llong/temp1_llong)) > options->percent &&
+    labs((long)(temp1_llong-temp2_llong)) > options->delta )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(fmt_llongp,temp1_llong,temp2_llong,labs((long)(temp1_llong-temp2_llong)),
+      labs((long)(1-temp2_llong/temp1_llong)));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(long_long);
+  mem2+=sizeof(long_long);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+ else
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_llong, mem1, sizeof(long_long));
+   memcpy(&temp2_llong, mem2, sizeof(long_long));
+
+   if (temp1_llong != temp2_llong)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(fmt_llong,temp1_llong,temp2_llong,labs((long)(temp1_llong-temp2_llong)));
+    }
+    nfound++;
+   }
+
+   mem1+=sizeof(long_long);
+   mem2+=sizeof(long_long);
+    if (options->n && nfound>=options->count)
+     return nfound;
+  } /* nelmts */
+
+ }
+
+ return nfound;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_ullong
+ *
+ * Purpose: diff a H5T_NATIVE_ULLONG type
+ *
+ * Return: number of differences found
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_ullong(unsigned char *mem1,
+                    unsigned char *mem2,
+                    hsize_t       nelmts,
+                    int           rank,
+                    hsize_t       *acc,
+                    hsize_t       *pos,
+                    diff_opt_t    *options,
+                    const char    *obj1,
+                    const char    *obj2,
+                    int           *ph)
+
+{
+ hsize_t             nfound=0;          /* number of differences found */
+ unsigned long_long  temp1_ullong;
+ unsigned long_long  temp2_ullong;
+ hsize_t             i;
+ static char         fmt_ullong[255];
+ static char         fmt_ullongp[255];
+
+ if (!fmt_ullong[0]) {
+  /* build default formats for long long types */
+  sprintf(fmt_ullong, "%%%su              %%%su               %%%su\n",
+   H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH);
+  sprintf(fmt_ullongp, "%%%su             %%%su               %%%su               %%%su\n",
+   H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH, H5_PRINTF_LL_WIDTH);
+ }
+
+
+ /* -d and !-p */
+ if (options->d && !options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_ullong, mem1, sizeof(unsigned long_long));
+   memcpy(&temp2_ullong, mem2, sizeof(unsigned long_long));
+
+   if (labs((long)(temp1_ullong-temp2_ullong)) > options->delta)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(fmt_ullong,temp1_ullong,temp2_ullong,labs((long)(temp1_ullong-temp2_ullong)));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(unsigned long_long);
+  mem2+=sizeof(unsigned long_long);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+
+ /* !-d and -p */
+ else if (!options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_ullong, mem1, sizeof(unsigned long_long));
+   memcpy(&temp2_ullong, mem2, sizeof(unsigned long_long));
+
+   if ( temp1_ullong!=0 && labs((long)(1-temp2_ullong/temp1_ullong)) > options->percent )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(fmt_ullongp,temp1_ullong,temp2_ullong,labs((long)(temp1_ullong-temp2_ullong)),
+      labs((long)(1-temp2_ullong/temp1_ullong)));
+    }
+    nfound++;
+   }
+    mem1+=sizeof(unsigned long_long);
+  mem2+=sizeof(unsigned long_long);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+
+ }
+
+ /* -d and -p */
+ else if ( options->d && options->p)
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_ullong, mem1, sizeof(unsigned long_long));
+   memcpy(&temp2_ullong, mem2, sizeof(unsigned long_long));
+
+   if ( temp1_ullong!=0 && labs((long)(1-temp2_ullong/temp1_ullong)) > options->percent &&
+    labs((long)(temp1_ullong-temp2_ullong)) > options->delta )
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,1,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(fmt_ullongp,temp1_ullong,temp2_ullong,labs((long)(temp1_ullong-temp2_ullong)),
+      labs((long)(1-temp2_ullong/temp1_ullong)));
+    }
+    nfound++;
+   }
+   mem1+=sizeof(unsigned long_long);
+  mem2+=sizeof(unsigned long_long);
+   if (options->n && nfound>=options->count)
+     return nfound;
+  }
+
+ }
+ else
+ {
+
+  for ( i = 0; i < nelmts; i++)
+  {
+   memcpy(&temp1_ullong, mem1, sizeof(unsigned long_long));
+   memcpy(&temp2_ullong, mem2, sizeof(unsigned long_long));
+
+   if (temp1_ullong != temp2_ullong)
+   {
+    if ( print_data(options) )
+    {
+     print_pos(ph,0,i,acc,pos,rank,obj1,obj2);
+     printf(SPACES);
+     printf(fmt_ullong,temp1_ullong,temp2_ullong,labs((long)(temp1_ullong-temp2_ullong)));
+    }
+    nfound++;
+   }
+
+   mem1+=sizeof(unsigned long_long);
+   mem2+=sizeof(unsigned long_long);
+    if (options->n && nfound>=options->count)
+     return nfound;
+  } /* nelmts */
+
+ }
+
+ return nfound;
+}
+

Added: packages/hdf5/branches/upstream/current/tools/lib/h5diff_attr.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5diff_attr.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5diff_attr.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,318 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "h5tools.h"
+#include "h5diff.h"
+#include "H5private.h"
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_attr
+ *
+ * Purpose: compare attributes located in LOC1_ID and LOC2_ID, which are
+ *  obtained either from
+ * loc_id = H5Gopen( fid, name);
+ * loc_id = H5Dopen( fid, name);
+ * loc_id = H5Topen( fid, name);
+ *
+ * Return:
+ *  0 : no differences found
+ *  1 : differences found
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November, 03, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int diff_attr(hid_t      loc1_id,
+              hid_t      loc2_id,
+              const char *path1,
+              const char *path2,
+              diff_opt_t *options
+              )
+{
+ hid_t      attr1_id=-1;     /* attr ID */
+ hid_t      attr2_id=-1;     /* attr ID */
+ hid_t      space1_id=-1;    /* space ID */
+ hid_t      space2_id=-1;    /* space ID */
+ hid_t      ftype1_id=-1;    /* file data type ID */
+ hid_t      ftype2_id=-1;    /* file data type ID */
+ hid_t      mtype1_id=-1;    /* memory data type ID */
+ hid_t      mtype2_id=-1;    /* memory data type ID */
+ size_t     msize1;       /* memory size of memory type */
+ size_t     msize2;       /* memory size of memory type */
+ void       *buf1=NULL;   /* data buffer */
+ void       *buf2=NULL;   /* data buffer */
+ hsize_t    nelmts1;      /* number of elements in dataset */
+ int        rank1;        /* rank of dataset */
+ int        rank2;        /* rank of dataset */
+ hsize_t    dims1[H5S_MAX_RANK];/* dimensions of dataset */
+ hsize_t    dims2[H5S_MAX_RANK];/* dimensions of dataset */
+ char       name1[255];
+ char       name2[255];
+ int        n1, n2, i, j;
+ int        ret=0;
+ hsize_t    nfound;
+ int        cmp=1;
+
+ if ((n1 = H5Aget_num_attrs(loc1_id))<0)
+  goto error;
+ if ((n2 = H5Aget_num_attrs(loc2_id))<0)
+  goto error;
+
+ if (n1!=n2)
+  return 1;
+
+ for ( i = 0; i < n1; i++)
+ {
+
+  /* reset buffers for every attribute, we might goto out and call free */
+  buf1=NULL;
+  buf2=NULL;
+
+/*-------------------------------------------------------------------------
+ * open
+ *-------------------------------------------------------------------------
+ */
+  /* open attribute */
+  if ((attr1_id = H5Aopen_idx(loc1_id, (unsigned)i))<0)
+   goto error;
+  if ((attr2_id = H5Aopen_idx(loc2_id, (unsigned)i))<0)
+   goto error;
+
+  /* get name */
+  if (H5Aget_name( attr1_id, 255, name1 )<0)
+   goto error;
+  if (H5Aget_name( attr2_id, 255, name2 )<0)
+   goto error;
+
+  if (HDstrcmp(name1,name2)!=0)
+  {
+   if (options->m_verbose)
+   {
+    printf("Different name for attributes: <%s> and <%s>\n", name1, name2);
+   }
+   H5Aclose(attr1_id);
+   H5Aclose(attr2_id);
+   ret=1;
+   continue;
+  }
+
+  /* get the file datatype  */
+  if ((ftype1_id = H5Aget_type( attr1_id )) < 0 )
+   goto error;
+  if ((ftype2_id = H5Aget_type( attr2_id )) < 0 )
+   goto error;
+
+  /* get the dataspace handle  */
+  if ((space1_id = H5Aget_space( attr1_id )) < 0 )
+   goto error;
+  if ((space2_id = H5Aget_space( attr2_id )) < 0 )
+   goto error;
+
+  /* get dimensions  */
+  if ( (rank1 = H5Sget_simple_extent_dims(space1_id, dims1, NULL)) < 0 )
+   goto error;
+  if ( (rank2 = H5Sget_simple_extent_dims(space2_id, dims2, NULL)) < 0 )
+   goto error;
+
+
+/*-------------------------------------------------------------------------
+ * check for comparable TYPE and SPACE
+ *-------------------------------------------------------------------------
+ */
+
+ if (diff_can_type(ftype1_id,
+  ftype2_id,
+  rank1,
+  rank2,
+  dims1,
+  dims2,
+  NULL,
+  NULL,
+  name1,
+  name2,
+  options)!=1)
+	{
+		cmp=0;
+		options->not_cmp=1;
+ }
+
+
+/*-------------------------------------------------------------------------
+ * only attempt to compare if possible
+ *-------------------------------------------------------------------------
+ */
+ if (cmp)
+ {
+
+/*-------------------------------------------------------------------------
+ * read to memory
+ *-------------------------------------------------------------------------
+ */
+ nelmts1=1;
+ for (j=0; j<rank1; j++)
+  nelmts1*=dims1[j];
+
+ if ((mtype1_id=h5tools_get_native_type(ftype1_id))<0)
+    goto error;
+
+ if ((mtype2_id=h5tools_get_native_type(ftype2_id))<0)
+    goto error;
+
+ if ((msize1=H5Tget_size(mtype1_id))==0)
+  goto error;
+ if ((msize2=H5Tget_size(mtype2_id))==0)
+  goto error;
+
+ assert(msize1==msize2);
+
+ buf1=(void *) HDmalloc((unsigned)(nelmts1*msize1));
+ buf2=(void *) HDmalloc((unsigned)(nelmts1*msize2));
+ if ( buf1==NULL || buf2==NULL){
+  printf( "cannot read into memory\n" );
+  goto error;
+ }
+ if (H5Aread(attr1_id,mtype1_id,buf1)<0)
+  goto error;
+ if (H5Aread(attr2_id,mtype2_id,buf2)<0)
+  goto error;
+
+
+/*-------------------------------------------------------------------------
+ * array compare
+ *-------------------------------------------------------------------------
+ */
+ sprintf(name1,"%s of <%s>",name1,path1);
+ sprintf(name2,"%s of <%s>",name2,path2);
+
+ /* always print name */
+ if (options->m_verbose)
+ {
+  printf( "Attribute:   <%s> and <%s>\n",name1,name2);
+  nfound = diff_array(buf1,
+                     buf2,
+                     nelmts1,
+                     rank1,
+                     dims1,
+                     options,
+                     name1,
+                     name2,
+                     mtype1_id,
+                     attr1_id,
+                     attr2_id);
+  print_found(nfound);
+
+ }
+ /* check first if we have differences */
+ else
+ {
+  if (options->m_quiet==0)
+  {
+   /* shut up temporarily */
+   options->m_quiet=1;
+   nfound = diff_array(buf1,
+                     buf2,
+                     nelmts1,
+                     rank1,
+                     dims1,
+                     options,
+                     name1,
+                     name2,
+                     mtype1_id,
+                     attr1_id,
+                     attr2_id);
+   /* print again */
+   options->m_quiet=0;
+   if (nfound)
+   {
+    printf( "Attribute:   <%s> and <%s>\n",name1,name2);
+    nfound = diff_array(buf1,
+                     buf2,
+                     nelmts1,
+                     rank1,
+                     dims1,
+                     options,
+                     name1,
+                     name2,
+                     mtype1_id,
+                     attr1_id,
+                     attr2_id);
+    print_found(nfound);
+   } /*if*/
+  } /*if*/
+  /* in quiet mode, just count differences */
+  else
+  {
+   nfound = diff_array(buf1,
+                     buf2,
+                     nelmts1,
+                     rank1,
+                     dims1,
+                     options,
+                     name1,
+                     name2,
+                     mtype1_id,
+                     attr1_id,
+                     attr2_id);
+  } /*else quiet */
+ } /*else verbose */
+ }/*cmp*/
+
+
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+
+ if (H5Tclose(ftype1_id)<0) goto error;
+ if (H5Tclose(ftype2_id)<0) goto error;
+ if (H5Tclose(mtype1_id)<0) goto error;
+ if (H5Tclose(mtype2_id)<0) goto error;
+ if (H5Sclose(space1_id)<0) goto error;
+ if (H5Sclose(space2_id)<0) goto error;
+ if (H5Aclose(attr1_id)<0) goto error;
+ if (H5Aclose(attr2_id)<0) goto error;
+ if (buf1)
+  HDfree(buf1);
+ if (buf2)
+  HDfree(buf2);
+ } /* i */
+
+ return ret;
+
+error:
+ H5E_BEGIN_TRY {
+  H5Tclose(ftype1_id);
+  H5Tclose(ftype2_id);
+  H5Tclose(mtype1_id);
+  H5Tclose(mtype2_id);
+  H5Sclose(space1_id);
+  H5Sclose(space2_id);
+  H5Aclose(attr1_id);
+  H5Aclose(attr2_id);
+  if (buf1)
+   HDfree(buf1);
+  if (buf2)
+   HDfree(buf2);
+ } H5E_END_TRY;
+
+ options->err_stat=1;
+ return 0;
+}
+
+

Added: packages/hdf5/branches/upstream/current/tools/lib/h5diff_dset.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5diff_dset.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5diff_dset.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,619 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "h5diff.h"
+#include "H5private.h"
+#include "h5tools.h"
+
+/*-------------------------------------------------------------------------
+ * Function: diff_dataset
+ *
+ * Purpose: check for comparable datasets and read into a compatible
+ *  memory type
+ *
+ * Return: Number of differences found
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_dataset( hid_t file1_id,
+                      hid_t file2_id,
+                      const char *obj1_name,
+                      const char *obj2_name,
+                      diff_opt_t *options )
+{
+ hid_t   dset1_id=-1;
+ hid_t   dset2_id=-1;
+ hid_t   dcpl1_id=-1;
+ hid_t   dcpl2_id=-1;
+ hsize_t nfound=0;
+
+/*-------------------------------------------------------------------------
+ * open the handles
+ *-------------------------------------------------------------------------
+ */
+ /* disable error reporting */
+ H5E_BEGIN_TRY {
+ /* Open the datasets */
+ if ( (dset1_id = H5Dopen(file1_id,obj1_name)) < 0 )
+ {
+  printf("Cannot open dataset <%s>\n", obj1_name );
+  goto error;
+ }
+ if ( (dset2_id = H5Dopen(file2_id,obj2_name)) < 0 )
+ {
+  printf("Cannot open dataset <%s>\n", obj2_name );
+  goto error;
+ }
+ /* enable error reporting */
+ } H5E_END_TRY;
+
+
+ if ((dcpl1_id=H5Dget_create_plist(dset1_id))<0)
+  goto error;
+ if ((dcpl2_id=H5Dget_create_plist(dset2_id))<0)
+  goto error;
+
+/*-------------------------------------------------------------------------
+ * check if the dataset creation property list has filters that
+ * are not registered in the current configuration
+ * 1) the external filters GZIP and SZIP might not be available
+ * 2) the internal filters might be turned off
+ *-------------------------------------------------------------------------
+ */
+ if ((h5tools_canreadf((options->m_verbose?obj1_name:NULL),dcpl1_id)==1) &&
+     (h5tools_canreadf((options->m_verbose?obj2_name:NULL),dcpl2_id)==1))
+ {
+  nfound=diff_datasetid(dset1_id,
+                       dset2_id,
+                       obj1_name,
+                       obj2_name,
+                       options);
+ }
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+ /* disable error reporting */
+ H5E_BEGIN_TRY {
+  H5Pclose(dcpl1_id);
+  H5Pclose(dcpl2_id);
+  H5Dclose(dset1_id);
+  H5Dclose(dset2_id);
+   /* enable error reporting */
+ } H5E_END_TRY;
+
+ return nfound;
+
+error:
+ options->err_stat=1;
+ /* disable error reporting */
+ H5E_BEGIN_TRY {
+  H5Pclose(dcpl1_id);
+  H5Pclose(dcpl2_id);
+  H5Dclose(dset1_id);
+  H5Dclose(dset2_id);
+   /* enable error reporting */
+ } H5E_END_TRY;
+
+ return nfound;
+
+}
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_datasetid
+ *
+ * Purpose: check for comparable datasets and read into a compatible
+ *  memory type
+ *
+ * Return: Number of differences found
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+hsize_t diff_datasetid( hid_t dset1_id,
+                        hid_t dset2_id,
+                        const char *obj1_name,
+                        const char *obj2_name,
+                        diff_opt_t *options )
+{
+ hid_t        space1_id =-1;
+ hid_t        space2_id =-1;
+ hid_t        f_type1=-1, f_type2=-1; /* file data type */
+ hid_t        m_type1=-1, m_type2=-1; /* memory data type */
+ size_t       m_size1, m_size2;       /* size of type in memory */
+ H5T_sign_t   sign1, sign2;           /* sign of type */
+ int          rank1, rank2;
+ void         *buf1=NULL, *buf2=NULL;
+ hsize_t      nelmts1, nelmts2;
+ hsize_t      dims1[H5S_MAX_RANK];
+ hsize_t      dims2[H5S_MAX_RANK];
+ hsize_t      maxdim1[H5S_MAX_RANK];
+ hsize_t      maxdim2[H5S_MAX_RANK];
+ const char   *name1=NULL;            /* relative names */
+ const char   *name2=NULL;
+ hsize_t      storage_size1;
+ hsize_t      storage_size2;
+ hsize_t      nfound=0;               /* number of differences found */
+ int          cmp=1;                  /* do diff or not */
+ int          i;
+
+  /* Get the dataspace handle */
+ if ( (space1_id = H5Dget_space(dset1_id)) < 0 )
+  goto error;
+
+ /* Get rank */
+ if ( (rank1 = H5Sget_simple_extent_ndims(space1_id)) < 0 )
+  goto error;
+
+ /* Get the dataspace handle */
+ if ( (space2_id = H5Dget_space(dset2_id)) < 0 )
+  goto error;
+
+ /* Get rank */
+ if ( (rank2 = H5Sget_simple_extent_ndims(space2_id)) < 0 )
+  goto error;
+
+ /* Get dimensions */
+ if ( H5Sget_simple_extent_dims(space1_id,dims1,maxdim1) < 0 )
+  goto error;
+
+ /* Get dimensions */
+ if ( H5Sget_simple_extent_dims(space2_id,dims2,maxdim2) < 0 )
+  goto error;
+
+/*-------------------------------------------------------------------------
+ * Get the file data type
+ *-------------------------------------------------------------------------
+ */
+
+ /* Get the data type */
+ if ( (f_type1 = H5Dget_type(dset1_id)) < 0 )
+  goto error;
+
+ /* Get the data type */
+ if ( (f_type2 = H5Dget_type(dset2_id)) < 0 )
+  goto error;
+
+
+/*-------------------------------------------------------------------------
+ * check for empty datasets
+ *-------------------------------------------------------------------------
+ */
+
+ storage_size1=H5Dget_storage_size(dset1_id);
+ storage_size2=H5Dget_storage_size(dset2_id);
+ if (storage_size1<=0 && storage_size2<=0)
+ {
+  if (options->m_verbose && obj1_name && obj2_name)
+   printf("<%s> and <%s> are empty datasets\n", obj1_name, obj2_name);
+  cmp=0;
+		options->not_cmp=1;
+ }
+
+
+/*-------------------------------------------------------------------------
+ * check for comparable TYPE and SPACE
+ *-------------------------------------------------------------------------
+ */
+
+ if (diff_can_type(f_type1,
+  f_type2,
+  rank1,
+  rank2,
+  dims1,
+  dims2,
+  maxdim1,
+  maxdim2,
+  obj1_name,
+  obj2_name,
+  options)!=1)
+	{
+  cmp=0;
+  options->not_cmp=1;
+ }
+
+/*-------------------------------------------------------------------------
+ * get number of elements
+ *-------------------------------------------------------------------------
+ */
+ nelmts1 = 1;
+ for (i = 0; i < rank1; i++)
+ {
+  nelmts1 *= dims1[i];
+ }
+
+ nelmts2 = 1;
+ for (i = 0; i < rank2; i++)
+ {
+  nelmts2 *= dims2[i];
+ }
+
+ assert(nelmts1==nelmts2);
+
+/*-------------------------------------------------------------------------
+ * check for equal file datatype; warning only
+ *-------------------------------------------------------------------------
+ */
+
+ if ( (H5Tequal(f_type1, f_type2)==0) && options->m_verbose && obj1_name)
+ {
+  printf("Warning: Different storage datatype\n");
+  printf("<%s> has file datatype ", obj1_name);
+  print_type(f_type1);
+  printf("\n");
+  printf("<%s> has file datatype ", obj2_name);
+  print_type(f_type2);
+  printf("\n");
+ }
+
+/*-------------------------------------------------------------------------
+ * memory type and sizes
+ *-------------------------------------------------------------------------
+ */
+ if ((m_type1=h5tools_get_native_type(f_type1))<0)
+    goto error;
+
+ if ((m_type2=h5tools_get_native_type(f_type2))<0)
+    goto error;
+
+ m_size1 = H5Tget_size( m_type1 );
+ m_size2 = H5Tget_size( m_type2 );
+
+#if defined (H5DIFF_DEBUG)
+ if (obj1_name)
+  print_sizes(obj1_name,obj2_name,f_type1,f_type2,m_type1,m_type2);
+#endif
+
+/*-------------------------------------------------------------------------
+ * check for different signed/unsigned types
+ *-------------------------------------------------------------------------
+ */
+
+ sign1=H5Tget_sign(m_type1);
+ sign2=H5Tget_sign(m_type2);
+ if ( sign1 != sign2 )
+ {
+  if (options->m_verbose && obj1_name) {
+   printf("Comparison not supported: <%s> has sign %s ", obj1_name, get_sign(sign1));
+   printf("and <%s> has sign %s\n", obj2_name, get_sign(sign2));
+  }
+  cmp=0;
+		options->not_cmp=1;
+ }
+
+/*-------------------------------------------------------------------------
+ * "upgrade" the smaller memory size
+ *-------------------------------------------------------------------------
+ */
+
+ if ( m_size1 != m_size2 )
+ {
+  if ( m_size1 < m_size2 )
+  {
+   H5Tclose(m_type1);
+
+   if ((m_type1=h5tools_get_native_type(f_type2))<0)
+        goto error;
+
+   m_size1 = H5Tget_size( m_type1 );
+  }
+  else
+  {
+   H5Tclose(m_type2);
+
+   if ((m_type2=h5tools_get_native_type(f_type1))<0)
+        goto error;
+
+   m_size2 = H5Tget_size( m_type2 );
+  }
+#if defined (H5DIFF_DEBUG)
+  printf("WARNING: Size was upgraded\n");
+  if (obj1_name)
+  print_sizes(obj1_name,obj2_name,f_type1,f_type2,m_type1,m_type2);
+#endif
+ }
+ assert(m_size1==m_size2);
+
+/*-------------------------------------------------------------------------
+ * only attempt to compare if possible
+ *-------------------------------------------------------------------------
+ */
+ if (cmp)
+ {
+
+ buf1 = (void *) HDmalloc((unsigned) (nelmts1*m_size1));
+ buf2 = (void *) HDmalloc((unsigned) (nelmts2*m_size2));
+
+ if ( buf1 == NULL || buf2 == NULL )
+ {
+  printf( "cannot read into memory\n" );
+  goto error;
+ }
+
+/*-------------------------------------------------------------------------
+ * read
+ *-------------------------------------------------------------------------
+ */
+
+ if ( H5Dread(dset1_id,m_type1,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf1) < 0 )
+  goto error;
+
+ if ( H5Dread(dset2_id,m_type2,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf2) < 0 )
+  goto error;
+
+/*-------------------------------------------------------------------------
+ * array compare
+ *-------------------------------------------------------------------------
+ */
+
+ if (obj1_name!=NULL)
+  name1=diff_basename(obj1_name);
+ if (obj2_name!=NULL)
+  name2=diff_basename(obj2_name);
+
+ nfound = diff_array(buf1,
+                     buf2,
+                     nelmts1,
+                     rank1,
+                     dims1,
+                     options,
+                     name1,
+                     name2,
+                     m_type1,
+                     dset1_id,
+                     dset2_id);
+/*-------------------------------------------------------------------------
+ * compare attributes
+ * the if condition refers to cases when the dataset is a referenced object
+ *-------------------------------------------------------------------------
+ */
+
+ if (obj1_name!=NULL)
+  diff_attr(dset1_id,dset2_id,obj1_name,obj2_name,options);
+
+ }/*cmp*/
+
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+
+
+ if ( buf1) HDfree(buf1);
+ if ( buf2) HDfree(buf2);
+ /* close */
+ /* disable error reporting */
+ H5E_BEGIN_TRY {
+  H5Sclose(space1_id);
+  H5Sclose(space2_id);
+  H5Tclose(f_type1);
+  H5Tclose(f_type2);
+  H5Tclose(m_type1);
+  H5Tclose(m_type2);
+   /* enable error reporting */
+ } H5E_END_TRY;
+
+ return nfound;
+
+error:
+ options->err_stat=1;
+ if ( buf1) HDfree(buf1);
+ if ( buf2) HDfree(buf2);
+ /* close */
+ /* disable error reporting */
+ H5E_BEGIN_TRY {
+  H5Sclose(space1_id);
+  H5Sclose(space2_id);
+  H5Tclose(f_type1);
+  H5Tclose(f_type2);
+  H5Tclose(m_type1);
+  H5Tclose(m_type2);
+   /* enable error reporting */
+ } H5E_END_TRY;
+
+ return nfound;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: diff_can_type
+ *
+ * Purpose: check for comparable TYPE and SPACE
+ *
+ * Return:
+ *  1, can compare
+ *  0, cannot compare
+ * -1, error
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 3, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int diff_can_type( hid_t       f_type1, /* file data type */
+                   hid_t       f_type2, /* file data type */
+                   int         rank1,
+                   int         rank2,
+                   hsize_t     *dims1,
+                   hsize_t     *dims2,
+                   hsize_t     *maxdim1,
+                   hsize_t     *maxdim2,
+                   const char  *obj1_name,
+                   const char  *obj2_name,
+                   diff_opt_t  *options )
+{
+
+
+ H5T_class_t  tclass1;
+ H5T_class_t  tclass2;
+ int          maxdim_diff=0;          /* maximum dimensions are different */
+ int          dim_diff=0;             /* current dimensions are different */
+ int          i;
+
+/*-------------------------------------------------------------------------
+ * check for the same class
+ *-------------------------------------------------------------------------
+ */
+
+ if ((tclass1=H5Tget_class(f_type1))<0)
+  return -1;
+
+ if ((tclass2=H5Tget_class(f_type2))<0)
+  return -1;
+
+ if ( tclass1 != tclass2 )
+ {
+  if (options->m_verbose && obj1_name) {
+   printf("Comparison not possible: <%s> is of class %s and <%s> is of class %s\n",
+    obj1_name, get_class(tclass1),
+    obj2_name, get_class(tclass2) );
+  }
+  return 0;
+ }
+
+/*-------------------------------------------------------------------------
+ * check for non supported classes
+ *-------------------------------------------------------------------------
+ */
+
+ assert(tclass1==tclass2);
+ switch (tclass1)
+ {
+ case H5T_INTEGER:
+ case H5T_FLOAT:
+ case H5T_COMPOUND:
+ case H5T_STRING:
+ case H5T_ARRAY:
+ case H5T_BITFIELD:
+ case H5T_OPAQUE:
+ case H5T_ENUM:
+ case H5T_VLEN:
+ case H5T_REFERENCE:
+
+  break;
+
+ default: /*H5T_TIME */
+  if (options->m_verbose && obj1_name )
+   printf("Comparison not supported: <%s> and <%s> are of class %s\n",
+    obj1_name,obj2_name,get_class(tclass2) );
+  return 0;
+ }
+
+/*-------------------------------------------------------------------------
+ * check for equal file datatype; warning only
+ *-------------------------------------------------------------------------
+ */
+
+ if ( (H5Tequal(f_type1, f_type2)==0) && options->m_verbose && obj1_name)
+ {
+  printf("Warning: Different storage datatype\n");
+  printf("<%s> has file datatype ", obj1_name);
+  print_type(f_type1);
+  printf("\n");
+  printf("<%s> has file datatype ", obj2_name);
+  print_type(f_type2);
+  printf("\n");
+ }
+
+/*-------------------------------------------------------------------------
+ * check for the same rank
+ *-------------------------------------------------------------------------
+ */
+
+ if ( rank1 != rank2 )
+ {
+  if (options->m_verbose && obj1_name) {
+   printf("Comparison not supported: <%s> has rank %d, dimensions ", obj1_name, rank1);
+   print_dims(rank1,dims1);
+   printf(", max dimensions ");
+   print_dims(rank1,maxdim1);
+   printf("\n" );
+   printf("<%s> has rank %d, dimensions ", obj2_name, rank2);
+   print_dims(rank2,dims2);
+   printf(", max dimensions ");
+   print_dims(rank2,maxdim2);
+  }
+  return 0;
+ }
+
+/*-------------------------------------------------------------------------
+ * check for different dimensions
+ *-------------------------------------------------------------------------
+ */
+
+ assert(rank1==rank2);
+ for ( i=0; i<rank1; i++)
+ {
+  if (maxdim1 && maxdim2)
+  {
+   if ( maxdim1[i] != maxdim2[i] )
+    maxdim_diff=1;
+  }
+  if ( dims1[i] != dims2[i] )
+   dim_diff=1;
+ }
+
+/*-------------------------------------------------------------------------
+ * current dimensions
+ *-------------------------------------------------------------------------
+ */
+
+ if (dim_diff==1)
+ {
+  if (options->m_verbose && obj1_name) {
+   printf("Comparison not supported: <%s> has rank %d, dimensions ", obj1_name, rank1);
+   print_dims(rank1,dims1);
+   if (maxdim1 && maxdim2) {
+    printf(", max dimensions ");
+    print_dims(rank1,maxdim1);
+    printf("\n" );
+    printf("<%s> has rank %d, dimensions ", obj2_name, rank2);
+    print_dims(rank2,dims2);
+    printf(", max dimensions ");
+    print_dims(rank2,maxdim2);
+   }
+  }
+  return 0;
+ }
+
+/*-------------------------------------------------------------------------
+ * maximum dimensions; just give a warning
+ *-------------------------------------------------------------------------
+ */
+ if (maxdim1 && maxdim2 && maxdim_diff==1 && obj1_name )
+ {
+  if (options->m_verbose) {
+   printf( "Warning: Different maximum dimensions\n");
+   printf("<%s> has max dimensions ", obj1_name);
+   print_dims(rank1,maxdim1);
+   printf("\n");
+   printf("<%s> has max dimensions ", obj2_name);
+   print_dims(rank2,maxdim2);
+   printf("\n");
+  }
+ }
+
+ return 1;
+}

Added: packages/hdf5/branches/upstream/current/tools/lib/h5diff_util.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5diff_util.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5diff_util.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,403 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "h5diff.h"
+#include "H5private.h"
+
+
+/*-------------------------------------------------------------------------
+ * Function: print_pos
+ *
+ * Purpose: convert an array index position to matrix notation
+ *
+ * Return: pos matrix array
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+void print_pos( int        *ph,
+                int        per,
+                hsize_t    curr_pos,
+                hsize_t    *acc,
+                hsize_t    *pos,
+                int        rank,
+                const char *obj1,
+                const char *obj2 )
+{
+ int i;
+
+ /* print header */
+ if ( *ph==1 )
+ {
+  *ph=0;
+  if (per)
+  {
+   printf("%-15s %-15s %-15s %-15s %-15s\n",
+    "position",
+    (obj1!=NULL) ? obj1 : " ",
+    (obj2!=NULL) ? obj2 : " ",
+    "difference",
+    "relative");
+   printf("------------------------------------------------------------------------\n");
+  }
+  else
+  {
+   printf("%-15s %-15s %-15s %-20s\n",
+    "position",
+    (obj1!=NULL) ? obj1 : " ",
+    (obj2!=NULL) ? obj2 : " ",
+    "difference");
+   printf("------------------------------------------------------------\n");
+  }
+ }
+
+ for ( i = 0; i < rank; i++)
+ {
+  pos[i] = curr_pos/acc[i];
+  curr_pos -= acc[i]*pos[i];
+ }
+ assert( curr_pos == 0 );
+
+ printf("[ " );
+ for ( i = 0; i < rank; i++)
+ {
+  HDfprintf(stdout,"%Hu ", pos[i]  );
+ }
+ printf("]" );
+}
+
+/*-------------------------------------------------------------------------
+ * Function: print_dims
+ *
+ * Purpose: print dimensions
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+void print_dims( int r, hsize_t *d )
+{
+ int i;
+ printf("[ " );
+ for ( i=0; i<r; i++ )
+  printf("%d ",(int)d[i]  );
+ printf("] " );
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: print_type
+ *
+ * Purpose: Print name of datatype
+ *
+ * Return: void
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ * Comments: Adapted from h5dump for H5T_INTEGER and H5T_FLOAT classes only
+ *
+ *-------------------------------------------------------------------------
+ */
+void print_type(hid_t type)
+{
+ switch (H5Tget_class(type))
+ {
+ default:
+  return;
+ case H5T_INTEGER:
+  if (H5Tequal(type, H5T_STD_I8BE)) {
+   printf("H5T_STD_I8BE");
+  } else if (H5Tequal(type, H5T_STD_I8LE)) {
+   printf("H5T_STD_I8LE");
+  } else if (H5Tequal(type, H5T_STD_I16BE)) {
+   printf("H5T_STD_I16BE");
+  } else if (H5Tequal(type, H5T_STD_I16LE)) {
+   printf("H5T_STD_I16LE");
+  } else if (H5Tequal(type, H5T_STD_I32BE)) {
+   printf("H5T_STD_I32BE");
+  } else if (H5Tequal(type, H5T_STD_I32LE)) {
+   printf("H5T_STD_I32LE");
+  } else if (H5Tequal(type, H5T_STD_I64BE)) {
+   printf("H5T_STD_I64BE");
+  } else if (H5Tequal(type, H5T_STD_I64LE)) {
+   printf("H5T_STD_I64LE");
+  } else if (H5Tequal(type, H5T_STD_U8BE)) {
+   printf("H5T_STD_U8BE");
+  } else if (H5Tequal(type, H5T_STD_U8LE)) {
+   printf("H5T_STD_U8LE");
+  } else if (H5Tequal(type, H5T_STD_U16BE)) {
+   printf("H5T_STD_U16BE");
+  } else if (H5Tequal(type, H5T_STD_U16LE)) {
+   printf("H5T_STD_U16LE");
+  } else if (H5Tequal(type, H5T_STD_U32BE)) {
+   printf("H5T_STD_U32BE");
+  } else if (H5Tequal(type, H5T_STD_U32LE)) {
+   printf("H5T_STD_U32LE");
+  } else if (H5Tequal(type, H5T_STD_U64BE)) {
+   printf("H5T_STD_U64BE");
+  } else if (H5Tequal(type, H5T_STD_U64LE)) {
+   printf("H5T_STD_U64LE");
+  } else if (H5Tequal(type, H5T_NATIVE_SCHAR)) {
+   printf("H5T_NATIVE_SCHAR");
+  } else if (H5Tequal(type, H5T_NATIVE_UCHAR)) {
+   printf("H5T_NATIVE_UCHAR");
+  } else if (H5Tequal(type, H5T_NATIVE_SHORT)) {
+   printf("H5T_NATIVE_SHORT");
+  } else if (H5Tequal(type, H5T_NATIVE_USHORT)) {
+   printf("H5T_NATIVE_USHORT");
+  } else if (H5Tequal(type, H5T_NATIVE_INT)) {
+   printf("H5T_NATIVE_INT");
+  } else if (H5Tequal(type, H5T_NATIVE_UINT)) {
+   printf("H5T_NATIVE_UINT");
+  } else if (H5Tequal(type, H5T_NATIVE_LONG)) {
+   printf("H5T_NATIVE_LONG");
+  } else if (H5Tequal(type, H5T_NATIVE_ULONG)) {
+   printf("H5T_NATIVE_ULONG");
+  } else if (H5Tequal(type, H5T_NATIVE_LLONG)) {
+   printf("H5T_NATIVE_LLONG");
+  } else if (H5Tequal(type, H5T_NATIVE_ULLONG)) {
+   printf("H5T_NATIVE_ULLONG");
+  } else {
+   printf("undefined integer");
+  }
+  break;
+
+ case H5T_FLOAT:
+  if (H5Tequal(type, H5T_IEEE_F32BE)) {
+   printf("H5T_IEEE_F32BE");
+  } else if (H5Tequal(type, H5T_IEEE_F32LE)) {
+   printf("H5T_IEEE_F32LE");
+  } else if (H5Tequal(type, H5T_IEEE_F64BE)) {
+   printf("H5T_IEEE_F64BE");
+  } else if (H5Tequal(type, H5T_IEEE_F64LE)) {
+   printf("H5T_IEEE_F64LE");
+  } else if (H5Tequal(type, H5T_NATIVE_FLOAT)) {
+   printf("H5T_NATIVE_FLOAT");
+  } else if (H5Tequal(type, H5T_NATIVE_DOUBLE)) {
+   printf("H5T_NATIVE_DOUBLE");
+  } else if (H5Tequal(type, H5T_NATIVE_LDOUBLE)) {
+   printf("H5T_NATIVE_LDOUBLE");
+  } else {
+   printf("undefined float");
+  }
+  break;
+
+ }/*switch*/
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: diff_basename
+ *
+ * Purpose: Returns a pointer to the last component absolute name
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+const char*
+diff_basename(const char *name)
+{
+ size_t i;
+
+ if (name==NULL)
+  return(NULL);
+
+ /* Find the end of the base name */
+ i = strlen(name);
+ while (i>0 && '/'==name[i-1])
+  --i;
+
+ /* Skip backward over base name */
+ while (i>0 && '/'!=name[i-1])
+  --i;
+
+ return(name+i);
+}
+
+/*-------------------------------------------------------------------------
+ * Function: get_type
+ *
+ * Purpose: Returns the type as a string
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+const char*
+get_type(int type)
+{
+ switch (type)
+ {
+ case H5G_DATASET:
+  return("H5G_DATASET");
+ case H5G_GROUP:
+  return("H5G_GROUP");
+ case H5G_TYPE:
+  return("H5G_TYPE");
+ case H5G_LINK:
+  return("H5G_LINK");
+ default:
+  return("user defined type");
+ }
+}
+
+/*-------------------------------------------------------------------------
+ * Function: get_sign
+ *
+ * Purpose: Returns the sign as a string
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ * Comments:
+ *
+ *-------------------------------------------------------------------------
+ */
+const char*
+get_sign(H5T_sign_t sign)
+{
+ switch (sign)
+ {
+ default:
+  return("H5T_SGN_ERROR");
+ case H5T_SGN_NONE:
+  return("H5T_SGN_NONE");
+ case H5T_SGN_2:
+  return("H5T_SGN_2");
+ }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: get_class
+ *
+ * Purpose: Returns the class as a string
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+const char*
+get_class(H5T_class_t tclass)
+{
+ switch (tclass)
+ {
+ default:
+  return("Invalid class");
+ case H5T_TIME:
+  return("H5T_TIME");
+ case H5T_INTEGER:
+  return("H5T_INTEGER");
+ case H5T_FLOAT:
+  return("H5T_FLOAT");
+ case H5T_STRING:
+  return("H5T_STRING");
+ case H5T_BITFIELD:
+  return("H5T_BITFIELD");
+ case H5T_OPAQUE:
+  return("H5T_OPAQUE");
+ case H5T_COMPOUND:
+  return("H5T_COMPOUND");
+ case H5T_REFERENCE:
+  return("H5T_REFERENCE");
+ case H5T_ENUM:
+  return("H5T_ENUM");
+ case H5T_VLEN:
+  return("H5T_VLEN");
+ case H5T_ARRAY:
+  return("H5T_ARRAY");
+ }
+}
+
+/*-------------------------------------------------------------------------
+ * Function: print_found
+ *
+ * Purpose: print number of differences found
+ *
+ *-------------------------------------------------------------------------
+ */
+void print_found(hsize_t nfound)
+{
+ HDfprintf(stdout,"%Hu differences found\n",nfound);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: print_sizes
+ *
+ * Purpose: Print datatype sizes
+ *
+ *-------------------------------------------------------------------------
+ */
+#if defined (H5DIFF_DEBUG)
+void print_sizes( const char *obj1, const char *obj2,
+                  hid_t f_type1, hid_t f_type2,
+                  hid_t m_type1, hid_t m_type2 )
+{
+ size_t  f_size1, f_size2;       /* size of type in file */
+ size_t  m_size1, m_size2;       /* size of type in memory */
+
+ f_size1 = H5Tget_size( f_type1 );
+ f_size2 = H5Tget_size( f_type2 );
+ m_size1 = H5Tget_size( m_type1 );
+ m_size2 = H5Tget_size( m_type2 );
+
+ printf("\n");
+ printf("------------------\n");
+ printf("sizeof(char)   %u\n", sizeof(char) );
+ printf("sizeof(short)  %u\n", sizeof(short) );
+ printf("sizeof(int)    %u\n", sizeof(int) );
+ printf("sizeof(long)   %u\n", sizeof(long) );
+ printf("<%s> ------------------\n", obj1);
+ printf("type on file   ");
+ print_type(f_type1);
+ printf("\n");
+ printf("size on file   %u\n", f_size1 );
+
+ printf("type on memory ");
+ print_type(m_type1);
+ printf("\n");
+ printf("size on memory %u\n", m_size1 );
+
+ printf("<%s> ------------------\n", obj2);
+ printf("type on file   ");
+ print_type(f_type2);
+ printf("\n");
+ printf("size on file   %u\n", f_size2 );
+
+ printf("type on memory ");
+ print_type(m_type2);
+ printf("\n");
+ printf("size on memory %u\n", m_size2 );
+ printf("\n");
+}
+#endif /* H5DIFF_DEBUG */
+
+

Added: packages/hdf5/branches/upstream/current/tools/lib/h5tools.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5tools.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5tools.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1287 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Thursday, July 23, 1998
+ *
+ * Purpose:	A library for displaying the values of a dataset in a human
+ *		readable format.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "h5tools.h"
+#include "h5tools_ref.h"
+#include "h5tools_str.h"
+#include "h5tools_utils.h"
+#include "H5private.h"
+
+/*
+ * The output functions need a temporary buffer to hold a piece of the
+ * dataset while it's being printed. This constant sets the limit on the
+ * size of that temporary buffer in bytes. For efficiency's sake, choose the
+ * largest value suitable for your machine (for testing use a small value).
+ */
+#if 1
+#define H5TOOLS_BUFSIZE         (1024 * 1024)
+#else
+#define H5TOOLS_BUFSIZE         (1024)
+#endif  /* 1 */
+
+#define ALIGN(A,Z)		((((A) + (Z) - 1) / (Z)) * (Z))
+
+/* global variables */
+int         indent;
+int         compound_data;
+FILE       *rawdatastream;	/* should initialize to stdout but gcc moans about it */
+
+/* module-scoped variables */
+static int  h5tools_init_g;     /* if h5tools lib has been initialized */
+#ifdef H5_HAVE_PARALLEL
+static int  h5tools_mpi_init_g; /* if MPI_Init() has been called */
+#endif /* H5_HAVE_PARALLEL */
+
+/* Names of VFDs */
+static const char *drivernames[]={
+    "sec2",
+    "family",
+    "split",
+    "multi",
+#ifdef H5_HAVE_STREAM
+    "stream",
+#endif	/* H5_HAVE_STREAM */
+#ifdef H5_HAVE_PARALLEL
+    "mpio",
+    "mpiposix"
+#endif /* H5_HAVE_PARALLEL */
+};
+
+/* This enum should match the entries in the above drivers_list since they
+ * are indexes into the drivers_list array. */
+enum {
+    SEC2_IDX = 0
+   ,FAMILY_IDX
+   ,SPLIT_IDX
+   ,MULTI_IDX
+#ifdef H5_HAVE_STREAM
+   ,STREAM_IDX
+#endif	/* H5_HAVE_STREAM */
+#ifdef H5_HAVE_PARALLEL
+   ,MPIO_IDX
+   ,MPIPOSIX_IDX
+#endif /* H5_HAVE_PARALLEL */
+} driver_idx;
+#define NUM_DRIVERS     (sizeof(drivernames) / sizeof(drivernames[0]))
+
+/*-------------------------------------------------------------------------
+ * Audience:    Public
+ * Chapter:     H5Tools Library
+ * Purpose:     Initialize the H5 Tools library
+ * Description:
+ *      This should be called before any other h5tools function is called.
+ *      Effect of any h5tools function called before this has been called is
+ *      undetermined.
+ * Return:
+ *      None
+ * Programmer:
+ *      Albert Cheng, 2000-10-31
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+void
+h5tools_init(void)
+{
+    if (!h5tools_init_g) {
+	if (!rawdatastream)
+	    rawdatastream = stdout;
+
+	h5tools_init_g++;
+    }
+}
+
+/*-------------------------------------------------------------------------
+ * Audience:    Public
+ * Chapter:     H5Tools Library
+ * Purpose:	Close the H5 Tools library
+ * Description:
+ *      Close or release resources such as files opened by the library. This
+ *      should be called after all other h5tools functions have been called.
+ *      Effect of any h5tools function called after this has been called is
+ *      undetermined.
+ * Return:
+ *      None
+ * Programmer:
+ *      Albert Cheng, 2000-10-31
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+void
+h5tools_close(void)
+{
+    if (h5tools_init_g) {
+	if (rawdatastream && rawdatastream != stdout) {
+	    if (fclose(rawdatastream))
+		perror("closing rawdatastream");
+	    else
+		rawdatastream = NULL;
+	}
+
+        /* Clean up the reference path table, if it's been used */
+        term_ref_path_table();
+
+        /* Shut down the library */
+        H5close();
+
+#ifdef H5_HAVE_PARALLEL
+        /* Check if we need to shut down MPI */
+        if(h5tools_mpi_init_g) {
+            MPI_Finalize();
+            h5tools_mpi_init_g=0;
+        } /* end if */
+#endif
+
+	h5tools_init_g = 0;
+    }
+}
+
+/*-------------------------------------------------------------------------
+ * Audience:    Private
+ * Chapter:     H5Tools Library
+ * Purpose:	Get a FAPL for a driver
+ * Description:
+ *      Get a FAPL for a given VFL driver name.
+ * Return:
+ *      None
+ * Programmer:
+ *      Quincey Koziol, 2004-02-04
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static hid_t
+h5tools_get_fapl(const char *driver, unsigned *drivernum,
+#ifdef H5_HAVE_PARALLEL
+int argc, const char *argv[]
+#else /* H5_HAVE_PARALLEL */
+int UNUSED argc, const char UNUSED *argv[]
+#endif /* H5_HAVE_PARALLEL */
+)
+{
+    hid_t               fapl = H5P_DEFAULT;
+
+    /* Determine which driver the user wants to open the file with. Try
+     * that driver. If it can't open it, then fail. */
+    if (!strcmp(driver, drivernames[SEC2_IDX])) {
+        if(drivernum)
+            *drivernum = SEC2_IDX;
+    } else if (!strcmp(driver, drivernames[FAMILY_IDX])) {
+        /* FAMILY Driver */
+        if((fapl = H5Pcreate(H5P_FILE_ACCESS))>=0) {
+            /* Set member size to be 0 to indicate the current first member size
+             * is the member size.
+             */
+            H5Pset_fapl_family(fapl, (hsize_t)0, H5P_DEFAULT);
+
+            if(drivernum)
+                *drivernum = FAMILY_IDX;
+        } /* end if */
+    } else if (!strcmp(driver, drivernames[SPLIT_IDX])) {
+        /* SPLIT Driver */
+        if((fapl = H5Pcreate(H5P_FILE_ACCESS))>=0) {
+            H5Pset_fapl_split(fapl, "-m.h5", H5P_DEFAULT, "-r.h5", H5P_DEFAULT);
+
+            if(drivernum)
+                *drivernum = SPLIT_IDX;
+        } /* end if */
+    } else if (!strcmp(driver, drivernames[MULTI_IDX])) {
+        /* MULTI Driver */
+        if((fapl = H5Pcreate(H5P_FILE_ACCESS))>=0) {
+            H5Pset_fapl_multi(fapl, NULL, NULL, NULL, NULL, TRUE);
+
+            if(drivernum)
+                *drivernum = MULTI_IDX;
+        } /* end if */
+#ifdef H5_HAVE_STREAM
+    } else if (!strcmp(driver, drivernames[STREAM_IDX])) {
+        /* STREAM Driver */
+        if((fapl = H5Pcreate(H5P_FILE_ACCESS))>=0) {
+            H5Pset_fapl_stream(fapl, NULL);
+
+            if(drivernum)
+                *drivernum = STREAM_IDX;
+        } /* end if */
+#endif	/* H5_HAVE_STREAM */
+#ifdef H5_HAVE_PARALLEL
+    } else if (!strcmp(driver, drivernames[MPIO_IDX])) {
+        /* MPI-I/O Driver */
+        if((fapl = H5Pcreate(H5P_FILE_ACCESS))>=0) {
+            H5Pset_fapl_mpio(fapl, MPI_COMM_WORLD, MPI_INFO_NULL);
+
+            /* Initialize the MPI library, if it wasn't already */
+            if(!h5tools_mpi_init_g) {
+                MPI_Init(&argc, (char ***)&argv);
+
+                h5tools_mpi_init_g=1;
+            } /* end if */
+
+            if(drivernum)
+                *drivernum = MPIO_IDX;
+        } /* end if */
+    } else if (!strcmp(driver, drivernames[MPIPOSIX_IDX])) {
+        /* MPI-I/O Driver */
+        if((fapl = H5Pcreate(H5P_FILE_ACCESS))>=0) {
+            H5Pset_fapl_mpiposix(fapl, MPI_COMM_WORLD, TRUE);
+
+            /* Initialize the MPI library, if it wasn't already */
+            if(!h5tools_mpi_init_g) {
+                MPI_Init(&argc, (char ***)&argv);
+
+                h5tools_mpi_init_g=1;
+            } /* end if */
+
+            if(drivernum)
+                *drivernum = MPIPOSIX_IDX;
+        } /* end if */
+#endif /* H5_HAVE_PARALLEL */
+    } else {
+        fapl=(-1);
+    }
+
+    return(fapl);
+}
+
+/*-------------------------------------------------------------------------
+ * Audience:    Public
+ * Chapter:     H5Tools Library
+ * Purpose:     Open a file with various VFL drivers.
+ * Description:
+ *      Loop through the various types of VFL drivers trying to open FNAME.
+ *      If the HDF5 library is version 1.2 or less, then we have only the SEC2
+ *      driver to try out. If the HDF5 library is greater than version 1.2,
+ *      then we have the FAMILY, SPLIT, and MULTI drivers to play with (and
+ *      the STREAM driver if H5_HAVE_STREAM is defined, that is).
+ *
+ *      If DRIVER is non-NULL, then it will try to open the file with that
+ *      driver first. We assume that the user knows what they are doing so, if
+ *      we fail, then we won't try other file drivers.
+ * Return:
+ *      On success, returns a file id for the opened file. If DRIVERNAME is
+ *      non-null then the first DRIVERNAME_SIZE-1 characters of the driver
+ *      name are copied into the DRIVERNAME array and null terminated.
+ *
+ *      Otherwise, the function returns FAIL. If DRIVERNAME is non-null then
+ *      the first byte is set to the null terminator.
+ * Programmer:
+ *      Lost in the mists of time.
+ * Modifications:
+ *      Robb Matzke, 2000-06-23
+ *      We only have to initialize driver[] on the first call, thereby
+ *      preventing memory leaks from repeated calls to H5Pcreate().
+ *
+ *      Robb Matzke, 2000-06-23
+ *      Added DRIVERNAME_SIZE arg to prevent overflows when writing to
+ *      DRIVERNAME.
+ *
+ *      Robb Matzke, 2000-06-23
+ *      Added test to prevent coredump when the file could not be opened by
+ *      any driver.
+ *
+ *      Robb Matzke, 2000-06-23
+ *      Changed name from H5ToolsFopen() so it jives better with the names we
+ *      already have at the top of this source file.
+ *
+ *      Thomas Radke, 2000-09-12
+ *      Added Stream VFD to the driver[] array.
+ *
+ *      Bill Wendling, 2001-01-10
+ *      Changed macro behavior so that if we have a version other than 1.2.x
+ *      (i.e., > 1.2), then we do the drivers check.
+ *
+ *      Bill Wendling, 2001-07-30
+ *      Added DRIVER parameter so that the user can specify "try this driver"
+ *      instead of the default behaviour. If it fails to open the file with
+ *      that driver, this will fail completely (i.e., we won't try the other
+ *      drivers). We're assuming the user knows what they're doing. How UNIX
+ *      of us.
+ *-------------------------------------------------------------------------
+ */
+hid_t
+h5tools_fopen(const char *fname, const char *driver, char *drivername,
+              size_t drivername_size, int argc, const char *argv[])
+{
+    unsigned    drivernum;
+    hid_t       fid = FAIL;
+    hid_t       fapl = H5P_DEFAULT;
+
+    if (driver && *driver) {
+        /* Get the correct FAPL for the given driver */
+        if((fapl=h5tools_get_fapl(driver,&drivernum,argc,argv))<0)
+            goto done;
+
+        H5E_BEGIN_TRY {
+            fid = H5Fopen(fname, H5F_ACC_RDONLY, fapl);
+        } H5E_END_TRY;
+
+        if (fid == FAIL)
+            goto done;
+
+    } else {
+        /* Try to open the file using each of the drivers */
+        for (drivernum = 0; drivernum < NUM_DRIVERS; drivernum++) {
+            /* Get the correct FAPL for the given driver */
+            if((fapl=h5tools_get_fapl(drivernames[drivernum],NULL,argc,argv))<0)
+                goto done;
+
+            H5E_BEGIN_TRY {
+                fid = H5Fopen(fname, H5F_ACC_RDONLY, fapl);
+            } H5E_END_TRY;
+
+            if (fid != FAIL)
+                break;
+            else {
+                /* Close the FAPL */
+                H5Pclose(fapl);
+                fapl=H5P_DEFAULT;
+            } /* end else */
+        }
+    }
+
+    /* Save the driver name */
+    if (drivername && drivername_size) {
+        if (fid != FAIL) {
+            strncpy(drivername, drivernames[drivernum], drivername_size);
+            drivername[drivername_size - 1] = '\0';
+        } else {
+            /*no file opened*/
+            drivername[0] = '\0';
+        }
+    }
+
+done:
+    if(fapl!=H5P_DEFAULT)
+        H5Pclose(fapl);
+    return fid;
+}
+
+/*-------------------------------------------------------------------------
+ * Audience:    Public
+ * Chapter:     H5Tools Library
+ * Purpose:     Count the number of columns in a string.
+ * Description:
+ *      Count the number of columns in a string. This is the number of
+ *      characters in the string not counting line-control characters.
+ * Return:
+ *      On success, returns the width of the string. Otherwise this function
+ *      returns 0.
+ * Programmer:
+ *       Robb Matzke, Tuesday, April 27, 1999
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static size_t
+h5tools_ncols(const char *s)
+{
+    register size_t i;
+
+    for (i = 0; *s; s++)
+        if (*s >= ' ')
+            i++;
+
+    return i;
+}
+
+/*-------------------------------------------------------------------------
+ * Audience:    Public
+ * Chapter:     H5Tools Library
+ * Purpose:     Emit a simple prefix to STREAM.
+ * Description:
+ *      If /ctx->need_prefix/ is set then terminate the current line (if
+ *      applicable), calculate the prefix string, and display it at the start
+ *      of a line.
+ * Return:
+ *      None
+ * Programmer:
+ *      Robb Matzke, Monday, April 26, 1999
+ * Modifications:
+ *      Robb Matzke, 1999-09-29
+ *	If a new prefix is printed then the current element number is set back
+ *	to zero.
+ *      pvn, 2004-07-08
+ * Added support for printing array indices:
+ *  the indentation is printed before the prefix (printed one indentation
+ *  level before)
+ *-------------------------------------------------------------------------
+ */
+static void
+h5tools_simple_prefix(FILE *stream, const h5dump_t *info,
+                      h5tools_context_t *ctx, hsize_t elmtno, int secnum)
+{
+    h5tools_str_t prefix;
+    h5tools_str_t str; /*temporary for indentation */
+    size_t templength = 0;
+    int i, indentlevel = 0;
+
+    if (!ctx->need_prefix)
+	return;
+
+    memset(&prefix, 0, sizeof(h5tools_str_t));
+    memset(&str, 0, sizeof(h5tools_str_t));
+
+    /* Terminate previous line, if any */
+    if (ctx->cur_column) {
+	    fputs(OPT(info->line_suf, ""), stream);
+     putc('\n', stream);
+	    fputs(OPT(info->line_sep, ""), stream);
+    }
+
+    /* Calculate new prefix */
+    h5tools_str_prefix(&prefix, info, elmtno, ctx->ndims, ctx->p_min_idx,
+                       ctx->p_max_idx, ctx);
+
+    /* Write new prefix to output */
+    if (ctx->indent_level >= 0) {
+        indentlevel = ctx->indent_level;
+    } else {
+        /*
+         * This is because sometimes we don't print out all the header
+         * info for the data (like the tattr-2.ddl example). If that happens
+         * the ctx->indent_level is negative so we need to skip the above and
+         * just print out the default indent levels.
+         */
+	indentlevel = ctx->default_indent_level;
+    }
+
+    /* when printing array indices, print the indentation before the prefix
+       the prefix is printed one indentation level before */
+    if (info->pindex) {
+     for (i = 0; i < indentlevel-1; i++){
+      fputs(h5tools_str_fmt(&str, 0, info->line_indent), stream);
+     }
+    }
+
+    if (elmtno == 0 && secnum == 0 && info->line_1st)
+        fputs(h5tools_str_fmt(&prefix, 0, info->line_1st), stream);
+    else if (secnum && info->line_cont)
+        fputs(h5tools_str_fmt(&prefix, 0, info->line_cont), stream);
+    else
+        fputs(h5tools_str_fmt(&prefix, 0, info->line_pre), stream);
+
+    templength = h5tools_str_len(&prefix);
+
+    for (i = 0; i < indentlevel; i++){
+        /*we already made the indent for the array indices case */
+     if (!info->pindex) {
+        fputs(h5tools_str_fmt(&prefix, 0, info->line_indent), stream);
+        templength += h5tools_str_len(&prefix);
+     }
+     else {
+      /*we cannot count the prefix for the array indices case */
+      templength += h5tools_str_len(&str);
+     }
+    }
+
+    ctx->cur_column = ctx->prev_prefix_len = templength;
+    ctx->cur_elmt = 0;
+    ctx->need_prefix = 0;
+
+    /* Free string */
+    h5tools_str_close(&prefix);
+    h5tools_str_close(&str);
+}
+
+/*-------------------------------------------------------------------------
+ * Audience:    Public
+ * Chapter:     H5Tools Library
+ * Purpose:     Prints NELMTS data elements to output STREAM.
+ * Description:
+ *      Prints some (NELMTS) data elements to output STREAM. The elements are
+ *      stored in _MEM as type TYPE and are printed according to the format
+ *      described in INFO. The CTX struct contains context information shared
+ *      between calls to this function. The FLAGS is a bit field that
+ *      indicates whether the data supplied in this call falls at the
+ *      beginning or end of the total data to be printed (START_OF_DATA and
+ *      END_OF_DATA).
+ * Return:
+ *      None
+ * Programmer:
+ *      Robb Matzke, Monday, April 26, 1999
+ * Modifications:
+ * 	Robb Matzke, 1999-06-04
+ *	The `container' argument is the optional dataset for reference types.
+ *
+ * 	Robb Matzke, 1999-09-29
+ *	Understands the `per_line' property which indicates that every Nth
+ *	element should begin a new line.
+ *
+ *      Robb Matzke, LLNL, 2003-06-05
+ *      Do not dereference the memory for a variable-length string here.
+ *      Deref in h5tools_str_sprint() instead so recursive types are
+ *      handled correctly.
+	*
+	*      Pedro Vicente Nunes, THG, 2005-10-19
+ *        pass to the prefix in h5tools_simple_prefix the total position
+	*								instead of the current stripmine position i; this is necessary 
+	*								to print the array indices 
+	*        new field sm_pos in h5tools_context_t, the current stripmine element position 
+ *-------------------------------------------------------------------------
+ */
+void
+h5tools_dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container,
+                         h5tools_context_t *ctx/*in,out*/, unsigned flags,
+                         hsize_t nelmts, hid_t type, void *_mem)
+{
+    unsigned char	*mem = (unsigned char*)_mem;
+    hsize_t		i;		/*element counter		*/
+    char		*s, *section;	/*a section of output		*/
+    int			secnum;		/*section sequence number	*/
+    size_t		size;		/*size of each datum		*/
+    size_t		ncols = 80;	/*available output width	*/
+    h5tools_str_t	buffer;		/*string into which to render	*/
+    int			multiline;	/*datum was multiline		*/
+				hsize_t		curr_pos;		/* total data element position 		*/
+    int                 elmt_counter = 0;/*counts the # elements printed.
+                                          *I (ptl?) needed something that
+                                          *isn't going to get reset when a new
+                                          *line is formed. I'm going to use
+                                          *this var to count elements and
+                                          *break after we see a number equal
+                                          *to the ctx->size_last_dim.   */
+
+    /* Setup */
+    memset(&buffer, 0, sizeof(h5tools_str_t));
+    size = H5Tget_size(type);
+
+    if (info->line_ncols > 0)
+	ncols = info->line_ncols;
+
+    h5tools_simple_prefix(stream, info, ctx, (hsize_t)0, 0);
+
+    for (i = 0; i < nelmts; i++, ctx->cur_elmt++, elmt_counter++) {
+        /* Render the element */
+        h5tools_str_reset(&buffer);
+        h5tools_str_sprint(&buffer, info, container, type, mem + i * size, ctx);
+
+        if (i + 1 < nelmts || (flags & END_OF_DATA) == 0)
+            h5tools_str_append(&buffer, "%s", OPT(info->elmt_suf1, ","));
+
+        s = h5tools_str_fmt(&buffer, 0, "%s");
+
+        /*
+         * If the element would split on multiple lines if printed at our
+         * current location...
+         */
+        if (info->line_multi_new == 1 &&
+                (ctx->cur_column + h5tools_ncols(s) +
+                 strlen(OPT(info->elmt_suf2, " ")) +
+                 strlen(OPT(info->line_suf, ""))) > ncols) {
+            if (ctx->prev_multiline) {
+                /*
+                 * ... and the previous element also occupied more than one
+                 * line, then start this element at the beginning of a line.
+                 */
+                ctx->need_prefix = TRUE;
+            } else if ((ctx->prev_prefix_len + h5tools_ncols(s) +
+                    strlen(OPT(info->elmt_suf2, " ")) +
+                    strlen(OPT(info->line_suf, ""))) <= ncols) {
+                /*
+                 * ...but *could* fit on one line otherwise, then we
+                 * should end the current line and start this element on its
+                 * own line.
+                 */
+                ctx->need_prefix = TRUE;
+            }
+        }
+
+        /*
+         * We need to break after each row of a dimension---> we should
+         * break at the end of the each last dimension well that is the
+         * way the dumper did it before
+         */
+        if (info->arr_linebreak && ctx->cur_elmt) {
+            if (ctx->size_last_dim && (ctx->cur_elmt % ctx->size_last_dim) == 0)
+                ctx->need_prefix = TRUE;
+
+            if ((hsize_t)elmt_counter == ctx->size_last_dim) {
+                ctx->need_prefix = TRUE;
+                elmt_counter = 0;
+            }
+        }
+
+        /*
+         * If the previous element occupied multiple lines and this element
+         * is too long to fit on a line then start this element at the
+         * beginning of the line.
+         */
+        if (info->line_multi_new == 1 && ctx->prev_multiline &&
+                (ctx->cur_column + h5tools_ncols(s) +
+                 strlen(OPT(info->elmt_suf2, " ")) +
+                 strlen(OPT(info->line_suf, ""))) > ncols)
+            ctx->need_prefix = TRUE;
+
+        /*
+         * If too many elements have already been printed then we need to
+         * start a new line.
+         */
+        if (info->line_per_line > 0 && ctx->cur_elmt >= info->line_per_line)
+            ctx->need_prefix = TRUE;
+
+        /*
+         * Each OPTIONAL_LINE_BREAK embedded in the rendered string can cause
+         * the data to split across multiple lines.  We display the sections
+         * one-at a time.
+         */
+        for (secnum = 0, multiline = 0;
+                 (section = strtok(secnum ? NULL : s, OPTIONAL_LINE_BREAK));
+                 secnum++) {
+            /*
+             * If the current section plus possible suffix and end-of-line
+             * information would cause the output to wrap then we need to
+             * start a new line.
+             */
+
+            /*
+             * Added the info->skip_first because the dumper does not want
+             * this check to happen for the first line
+             */
+            if ((!info->skip_first || i) &&
+                    (ctx->cur_column + strlen(section) +
+                     strlen(OPT(info->elmt_suf2, " ")) +
+                     strlen(OPT(info->line_suf, ""))) > ncols)
+                ctx->need_prefix = 1;
+
+            /*
+             * Print the prefix or separate the beginning of this element
+             * from the previous element.
+             */
+            if (ctx->need_prefix) {
+                if (secnum)
+                    multiline++;
+
+																  /* pass to the prefix the total position instead of the current
+                   stripmine position i; this is necessary to print the array
+                   indices */
+                curr_pos = ctx->sm_pos + i;
+
+                h5tools_simple_prefix(stream, info, ctx, curr_pos, secnum);
+            } else if ((i || ctx->continuation) && secnum == 0) {
+                fputs(OPT(info->elmt_suf2, " "), stream);
+                ctx->cur_column += strlen(OPT(info->elmt_suf2, " "));
+            }
+
+            /* Print the section */
+            fputs(section, stream);
+            ctx->cur_column += strlen(section);
+        }
+
+        ctx->prev_multiline = multiline;
+    }
+
+    h5tools_str_close(&buffer);
+}
+
+/*-------------------------------------------------------------------------
+ * Audience:    Public
+ * Chapter:     H5Tools Library
+ * Purpose:     Dump out a subset of a dataset.
+ * Description:
+ *      Select a hyperslab from the dataset DSET using the parameters
+ *      specified in SSET. Dump this out to STREAM.
+ * Return:
+ *      On success, return SUCCEED. Otherwise, the function returns FAIL.
+ * Programmer:
+ *      Bill Wendling, Wednesday, 07. March 2001
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+h5tools_dump_simple_subset(FILE *stream, const h5dump_t *info, hid_t dset,
+                           hid_t p_type, struct subset_t *sset,
+                           int indentlevel)
+{
+    herr_t              ret;                    /*the value to return   */
+    hid_t		f_space;		/*file data space	*/
+    int			i;                      /*counters		*/
+    hsize_t		zero = 0;               /*vector of zeros	*/
+    unsigned int	flags;			/*buffer extent flags	*/
+    hsize_t		total_size[H5S_MAX_RANK];/*total size of dataset*/
+
+    /* Print info */
+    h5tools_context_t	ctx;			/*print context		*/
+    size_t		p_type_nbytes;		/*size of memory type	*/
+
+    /* Stripmine info */
+    hsize_t		sm_size[H5S_MAX_RANK];	/*stripmine size	*/
+    hsize_t		sm_nbytes;		/*bytes per stripmine	*/
+    hsize_t		sm_nelmts;		/*elements per stripmine*/
+    unsigned char      *sm_buf = NULL;		/*buffer for raw data	*/
+    hid_t		sm_space;		/*stripmine data space	*/
+
+    hsize_t             count;
+
+    ret = FAIL;     /* be pessimistic */
+    f_space = H5Dget_space(dset);
+
+    if (f_space == FAIL)
+        goto done;
+
+    /*
+     * check that everything looks okay. the dimensionality must not be too
+     * great and the dimensionality of the items selected for printing must
+     * match the dimensionality of the dataset.
+     */
+    memset(&ctx, 0, sizeof(ctx));
+    ctx.indent_level = indentlevel;
+    ctx.need_prefix = 1;
+    ctx.ndims = H5Sget_simple_extent_ndims(f_space);
+
+    if ((size_t)ctx.ndims > NELMTS(sm_size))
+        goto done_close;
+
+    /* assume entire data space to be printed */
+    if (ctx.ndims > 0)
+        for (i = 0; i < ctx.ndims; i++)
+            ctx.p_min_idx[i] = 0;
+
+    H5Sget_simple_extent_dims(f_space, total_size, NULL);
+	assert(total_size[ctx.ndims - 1]==(hsize_t)((int)(total_size[ctx.ndims - 1])));
+    ctx.size_last_dim = (int)(total_size[ctx.ndims - 1]);
+
+    count = sset->count[ctx.ndims - 1];
+    sset->count[ctx.ndims - 1] = 1;
+
+    if(ctx.ndims>0)
+     init_acc_pos(&ctx,total_size);
+
+    for (; count > 0; sset->start[ctx.ndims - 1] += sset->stride[ctx.ndims - 1],
+                      count--) {
+        /* calculate the potential number of elements we're going to print */
+        H5Sselect_hyperslab(f_space, H5S_SELECT_SET,
+            sset->start,
+            sset->stride,
+            sset->count,
+            sset->block);
+        sm_nelmts = H5Sget_select_npoints(f_space);
+
+        /*
+         * start (0, 0)
+         * block (2, 2)
+         * stride (15, 5)
+         * count (4, 3)
+         *
+         * make:
+         *
+         * for up to "count" times.
+         *
+         * start (0, += stride[last_dim])
+         * block (2, 2)
+         * stride (15, 5)
+         * count (4, 1)
+         */
+
+        if (sm_nelmts == 0) {
+            /* nothing to print */
+            ret = SUCCEED;
+            goto done_close;
+        }
+
+        /*
+         * determine the strip mine size and allocate a buffer. the strip mine is
+         * a hyperslab whose size is manageable.
+         */
+        sm_nbytes = p_type_nbytes = H5Tget_size(p_type);
+
+        if (ctx.ndims > 0)
+            for (i = ctx.ndims; i > 0; --i) {
+                sm_size[i - 1] = MIN(total_size[i - 1], H5TOOLS_BUFSIZE / sm_nbytes);
+                sm_nbytes *= sm_size[i - 1];
+                assert(sm_nbytes > 0);
+            }
+
+        assert(sm_nbytes == (hsize_t)((size_t)sm_nbytes)); /*check for overflow*/
+        sm_buf = malloc((size_t)sm_nelmts * p_type_nbytes);
+        sm_space = H5Screate_simple(1, &sm_nelmts, NULL);
+
+        H5Sselect_hyperslab(sm_space, H5S_SELECT_SET, &zero, NULL, &sm_nelmts, NULL);
+
+        /* Read the data */
+        if (H5Dread(dset, p_type, sm_space, f_space, H5P_DEFAULT, sm_buf) < 0) {
+            H5Sclose(f_space);
+            H5Sclose(sm_space);
+            free(sm_buf);
+            return FAIL;
+        }
+
+        /* Print the data */
+        flags = START_OF_DATA;
+
+        if (count == 1)
+            flags |= END_OF_DATA;
+
+        for (i = 0; i < ctx.ndims; i++) {
+            ctx.p_max_idx[i] = ctx.p_min_idx[i] + MIN(total_size[i], sm_size[i]);
+        }
+
+        h5tools_dump_simple_data(stream, info, dset, &ctx, flags, sm_nelmts,
+                                 p_type, sm_buf);
+        free(sm_buf);
+        ctx.continuation++;
+    }
+
+    /* Terminate the output */
+    if (ctx.cur_column) {
+        fputs(OPT(info->line_suf, ""), stream);
+        putc('\n', stream);
+        fputs(OPT(info->line_sep, ""), stream);
+    }
+
+    ret = SUCCEED;
+
+done_close:
+    H5Sclose(f_space);
+done:
+    return ret;
+}
+
+/*-------------------------------------------------------------------------
+ * Audience:    Public
+ * Chapter:     H5Tools Library
+ * Purpose:	Print some values from a dataset with a simple data space.
+ * Description:
+ *      This is a special case of h5tools_dump_dset(). This function only
+ *      intended for dumping datasets -- it does strip mining and some other
+ *      things which are unnecessary for smaller objects such as attributes
+ *      (to print small objects like attributes simply read the attribute and
+ *      call h5tools_dump_simple_mem()).
+ * Return:
+ *      On success, the function returns SUCCEED. Otherwise, the function
+ *      returns FAIL.
+ * Programmer:
+ *      Robb Matzke, Thursday, July 23, 1998
+ * Modifications:
+ *-------------------------------------------------------------------------
+ */
+static int
+h5tools_dump_simple_dset(FILE *stream, const h5dump_t *info, hid_t dset,
+                         hid_t p_type, int indentlevel)
+{
+    hid_t		f_space;		/*file data space	*/
+    hsize_t		elmtno;			/*counter		*/
+    int			i;			/*counter		*/
+    int			carry;			/*counter carry value	*/
+    hsize_t		zero[8];		/*vector of zeros	*/
+    unsigned int	flags;			/*buffer extent flags	*/
+    hsize_t		total_size[H5S_MAX_RANK];/*total size of dataset*/
+
+    /* Print info */
+    h5tools_context_t	ctx;			/*print context		*/
+    size_t		p_type_nbytes;		/*size of memory type	*/
+    hsize_t		p_nelmts;		/*total selected elmts	*/
+
+    /* Stripmine info */
+    hsize_t		sm_size[H5S_MAX_RANK];	/*stripmine size	*/
+    hsize_t		sm_nbytes;		/*bytes per stripmine	*/
+    hsize_t		sm_nelmts;		/*elements per stripmine*/
+    unsigned char      *sm_buf = NULL;		/*buffer for raw data	*/
+    hid_t		sm_space;		/*stripmine data space	*/
+
+    /* Hyperslab info */
+    hsize_t		hs_offset[H5S_MAX_RANK];/*starting offset	*/
+    hsize_t		hs_size[H5S_MAX_RANK];	/*size this pass	*/
+    hsize_t		hs_nelmts;		/*elements in request	*/
+
+    /* VL data special information */
+    unsigned int        vl_data = 0;            /*contains VL datatypes */
+
+    f_space = H5Dget_space(dset);
+
+    if (f_space == FAIL)
+        return FAIL;
+
+    /*
+     * Check that everything looks okay. The dimensionality must not be too
+     * great and the dimensionality of the items selected for printing must
+     * match the dimensionality of the dataset.
+     */
+    memset(&ctx, 0, sizeof(ctx));
+    ctx.indent_level = indentlevel;
+    ctx.need_prefix = 1;
+    ctx.ndims = H5Sget_simple_extent_ndims(f_space);
+
+    if ((size_t)ctx.ndims > NELMTS(sm_size)) {
+        H5Sclose(f_space);
+        return FAIL;
+    }
+
+    /* Assume entire data space to be printed */
+    if (ctx.ndims > 0)
+        for (i = 0; i < ctx.ndims; i++)
+            ctx.p_min_idx[i] = 0;
+
+    H5Sget_simple_extent_dims(f_space, total_size, NULL);
+
+    /* calculate the number of elements we're going to print */
+    p_nelmts = 1;
+
+    if (ctx.ndims > 0) {
+        for (i = 0; i < ctx.ndims; i++)
+            p_nelmts *= total_size[i];
+        ctx.size_last_dim = (total_size[ctx.ndims - 1]);
+    } /* end if */
+    else
+        ctx.size_last_dim = 0;
+
+    if (p_nelmts == 0) {
+        /* nothing to print */
+        H5Sclose(f_space);
+        return SUCCEED;
+    }
+
+    /* Check if we have VL data in the dataset's datatype */
+    if (H5Tdetect_class(p_type, H5T_VLEN) == TRUE)
+        vl_data = TRUE;
+
+    /*
+     * Determine the strip mine size and allocate a buffer. The strip mine is
+     * a hyperslab whose size is manageable.
+     */
+    sm_nbytes = p_type_nbytes = H5Tget_size(p_type);
+
+    if (ctx.ndims > 0) {
+        for (i = ctx.ndims; i > 0; --i) {
+            sm_size[i - 1] = MIN(total_size[i - 1], H5TOOLS_BUFSIZE / sm_nbytes);
+            sm_nbytes *= sm_size[i - 1];
+            assert(sm_nbytes > 0);
+        }
+    }
+
+    assert(sm_nbytes == (hsize_t)((size_t)sm_nbytes)); /*check for overflow*/
+    sm_buf = malloc((size_t)sm_nbytes);
+
+    sm_nelmts = sm_nbytes / p_type_nbytes;
+    sm_space = H5Screate_simple(1, &sm_nelmts, NULL);
+
+    if(ctx.ndims>0)
+     init_acc_pos(&ctx,total_size);
+
+    /* The stripmine loop */
+    memset(hs_offset, 0, sizeof hs_offset);
+    memset(zero, 0, sizeof zero);
+
+    for (elmtno = 0; elmtno < p_nelmts; elmtno += hs_nelmts) {
+        /* Calculate the hyperslab size */
+        if (ctx.ndims > 0) {
+            for (i = 0, hs_nelmts = 1; i < ctx.ndims; i++) {
+                hs_size[i] = MIN(total_size[i] - hs_offset[i], sm_size[i]);
+                ctx.p_max_idx[i] = ctx.p_min_idx[i] + hs_size[i];
+                hs_nelmts *= hs_size[i];
+            }
+
+            H5Sselect_hyperslab(f_space, H5S_SELECT_SET, hs_offset, NULL,
+                                hs_size, NULL);
+            H5Sselect_hyperslab(sm_space, H5S_SELECT_SET, zero, NULL,
+                                &hs_nelmts, NULL);
+        } else {
+            H5Sselect_all(f_space);
+            H5Sselect_all(sm_space);
+            hs_nelmts = 1;
+        }
+
+        /* Read the data */
+        if (H5Dread(dset, p_type, sm_space, f_space, H5P_DEFAULT, sm_buf) < 0) {
+            H5Sclose(f_space);
+            H5Sclose(sm_space);
+            free(sm_buf);
+            return FAIL;
+        }
+
+        /* Print the data */
+        flags = (elmtno == 0) ? START_OF_DATA : 0;
+        flags |= ((elmtno + hs_nelmts) >= p_nelmts) ? END_OF_DATA : 0;
+
+         /* initialize the current stripmine position; this is necessary to print the array
+           indices */
+        ctx.sm_pos = elmtno;
+
+        h5tools_dump_simple_data(stream, info, dset, &ctx, flags, hs_nelmts,
+                             p_type, sm_buf);
+
+        /* Reclaim any VL memory, if necessary */
+        if(vl_data)
+            H5Dvlen_reclaim(p_type, sm_space, H5P_DEFAULT, sm_buf);
+
+        /* Calculate the next hyperslab offset */
+        for (i = ctx.ndims, carry = 1; i > 0 && carry; --i) {
+            ctx.p_min_idx[i - 1] = ctx.p_max_idx[i - 1];
+            hs_offset[i - 1] += hs_size[i - 1];
+
+            if (hs_offset[i - 1] == total_size[i - 1])
+                hs_offset[i - 1] = 0;
+            else
+                carry = 0;
+        }
+
+        ctx.continuation++;
+    }
+
+    /* Terminate the output */
+    if (ctx.cur_column) {
+        fputs(OPT(info->line_suf, ""), stream);
+        putc('\n', stream);
+        fputs(OPT(info->line_sep, ""), stream);
+    }
+
+    H5Sclose(sm_space);
+    H5Sclose(f_space);
+
+    free(sm_buf);
+
+    return SUCCEED;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_dump_simple_mem
+ *
+ * Purpose:	Print some values from memory with a simple data space.
+ *		This is a special case of h5tools_dump_mem().
+ *
+ * Return:	Success:    SUCCEED
+ *
+ *		Failure:    FAIL
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+h5tools_dump_simple_mem(FILE *stream, const h5dump_t *info, hid_t obj_id,
+                        hid_t type, hid_t space, void *mem, int indentlevel)
+{
+    int			i;			/*counters		*/
+    hsize_t		nelmts;			/*total selected elmts	*/
+    h5tools_context_t	ctx;			/*printing context	*/
+
+    /*
+     * Check that everything looks okay.  The dimensionality must not be too
+     * great and the dimensionality of the items selected for printing must
+     * match the dimensionality of the dataset.
+     */
+    memset(&ctx, 0, sizeof(ctx));
+    ctx.ndims = H5Sget_simple_extent_ndims(space);
+
+    if ((size_t)ctx.ndims > NELMTS(ctx.p_min_idx))
+        return FAIL;
+
+    ctx.indent_level = indentlevel;
+    ctx.need_prefix = 1;
+
+    /* Assume entire data space to be printed */
+    for (i = 0; i < ctx.ndims; i++)
+        ctx.p_min_idx[i] = 0;
+
+    H5Sget_simple_extent_dims(space, ctx.p_max_idx, NULL);
+
+    for (i = 0, nelmts = 1; ctx.ndims != 0 && i < ctx.ndims; i++)
+        nelmts *= ctx.p_max_idx[i] - ctx.p_min_idx[i];
+
+    if (nelmts == 0)
+        return SUCCEED; /*nothing to print*/
+    if(ctx.ndims>0) {
+        assert(ctx.p_max_idx[ctx.ndims - 1]==(hsize_t)((int)ctx.p_max_idx[ctx.ndims - 1]));
+        ctx.size_last_dim = (int)(ctx.p_max_idx[ctx.ndims - 1]);
+    } /* end if */
+    else
+        ctx.size_last_dim = 0;
+
+    if(ctx.ndims>0)
+     init_acc_pos(&ctx,ctx.p_max_idx);
+
+    /* Print it */
+    h5tools_dump_simple_data(stream, info, obj_id, &ctx,
+                             START_OF_DATA | END_OF_DATA, nelmts, type, mem);
+
+    /* Terminate the output */
+    if (ctx.cur_column) {
+        fputs(OPT(info->line_suf, ""), stream);
+        putc('\n', stream);
+        fputs(OPT(info->line_sep, ""), stream);
+    }
+
+    return SUCCEED;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_dump_dset
+ *
+ * Purpose:	Print some values from a dataset DSET to the file STREAM
+ *		after converting all types to P_TYPE (which should be a
+ *		native type).  If P_TYPE is a negative value then it will be
+ *		computed from the dataset type using only native types.
+ *
+ * Note:	This function is intended only for datasets since it does
+ *		some things like strip mining which are unnecessary for
+ *		smaller objects such as attributes. The easiest way to print
+ *		small objects is to read the object into memory and call
+ *		h5tools_dump_mem().
+ *
+ * Return:	Success:    SUCCEED
+ *
+ *		Failure:    FAIL
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 23, 1998
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-06-07
+ *		If info->raw is set then the memory datatype will be the same
+ *		as the file datatype.
+ *
+ *		Bill Wendling, 2001-02-27
+ *		Renamed to ``h5tools_dump_dset'' and added the subsetting
+ *		parameter.
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+h5tools_dump_dset(FILE *stream, const h5dump_t *info, hid_t dset, hid_t _p_type,
+                  struct subset_t *sset, int indentlevel)
+{
+    hid_t     f_space;
+    hid_t     p_type = _p_type;
+    hid_t     f_type;
+    H5S_class_t space_type;
+    int       status = FAIL;
+    h5dump_t  info_dflt;
+
+    /* Use default values */
+    if (!stream)
+        stream = stdout;
+
+    if (!info) {
+        memset(&info_dflt, 0, sizeof info_dflt);
+        info = &info_dflt;
+    }
+
+    if (p_type < 0) {
+        f_type = H5Dget_type(dset);
+
+        if (info->raw)
+            p_type = H5Tcopy(f_type);
+        else
+            p_type = h5tools_get_native_type(f_type);
+
+        H5Tclose(f_type);
+
+        if (p_type < 0)
+            goto done;
+    }
+
+    /* Check the data space */
+    f_space = H5Dget_space(dset);
+
+    space_type = H5Sget_simple_extent_type(f_space);
+
+    /* Print the data */
+    if (space_type == H5S_SIMPLE || space_type == H5S_SCALAR) {
+        if (!sset)
+            status = h5tools_dump_simple_dset(rawdatastream, info, dset, p_type,
+                                              indentlevel);
+        else
+            status = h5tools_dump_simple_subset(rawdatastream, info, dset, p_type,
+                                                sset, indentlevel);
+    } else /* space is H5S_NULL */
+        status = SUCCEED;
+
+    /* Close the dataspace */
+    H5Sclose(f_space);
+
+done:
+    if (p_type != _p_type)
+        H5Tclose(p_type);
+
+    return status;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_dump_mem
+ *
+ * Purpose:	Displays the data contained in MEM. MEM must have the
+ *		specified data TYPE and SPACE.  Currently only simple data
+ *		spaces are allowed and only the `all' selection.
+ *
+ * Return:	Success:    SUCCEED
+ *
+ *		Failure:    FAIL
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, January 20, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+h5tools_dump_mem(FILE *stream, const h5dump_t *info, hid_t obj_id, hid_t type,
+                 hid_t space, void *mem, int indentlevel)
+{
+    h5dump_t    info_dflt;
+
+    /* Use default values */
+    if (!stream)
+	stream = stdout;
+
+    if (!info) {
+	memset(&info_dflt, 0, sizeof(info_dflt));
+	info = &info_dflt;
+    }
+
+    /* Check the data space */
+    if (H5Sis_simple(space) <= 0)
+	return -1;
+
+    return h5tools_dump_simple_mem(stream, info, obj_id, type, space, mem,
+                                   indentlevel);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    init_acc_pos
+ *
+ * Purpose:     initialize accumulator and matrix position
+ *
+ * Return:      void
+ *
+ * Programmer:  pvn
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void init_acc_pos(h5tools_context_t	*ctx, hsize_t *dims)
+{
+ int i;
+
+ assert(ctx->ndims);
+
+ ctx->acc[ctx->ndims-1]=1;
+ for(i=(ctx->ndims-2); i>=0; i--)
+ {
+  ctx->acc[i]=ctx->acc[i+1] * dims[i+1];
+ }
+ for ( i = 0; i < ctx->ndims; i++)
+  ctx->pos[i]=0;
+}
+

Added: packages/hdf5/branches/upstream/current/tools/lib/h5tools.h
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5tools.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5tools.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,518 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Thursday, July 23, 1998
+ *
+ * Purpose:     Support functions for the various tools.
+ */
+#ifndef H5TOOLS_H__
+#define H5TOOLS_H__
+
+#include "hdf5.h"
+
+#define ESCAPE_HTML             1
+#define OPT(X,S)                ((X) ? (X) : (S))
+#define OPTIONAL_LINE_BREAK     "\001"  /* Special strings embedded in the output */
+#define START_OF_DATA		0x0001
+#define END_OF_DATA		0x0002
+
+/*
+ * Information about how to format output.
+ */
+typedef struct h5dump_t {
+    /*
+     * Fields associated with formatting numeric data.  If a datatype matches
+     * multiple formats based on its size, then the first applicable format
+     * from this list is used. However, if `raw' is non-zero then dump all
+     * data in hexadecimal format without translating from what appears on
+     * disk.
+     *
+     *   raw:        If set then print all data as hexadecimal without
+     *               performing any conversion from disk.
+     *
+     *   fmt_raw:    The printf() format for each byte of raw data. The
+     *               default is `%02x'.
+     *
+     *   fmt_int:    The printf() format to use when rendering data which is
+     *               typed `int'. The default is `%d'.
+     *
+     *   fmt_uint:   The printf() format to use when rendering data which is
+     *               typed `unsigned'. The default is `%u'.
+     *
+     *   fmt_schar:  The printf() format to use when rendering data which is
+     *               typed `signed char'. The default is `%d'. This format is
+     *               used ony if the `ascii' field is zero.
+     *
+     *   fmt_uchar:  The printf() format to use when rendering data which is
+     *               typed `unsigned char'. The default is `%u'. This format
+     *               is used only if the `ascii' field is zero.
+     *
+     *   fmt_short:  The printf() format to use when rendering data which is
+     *               typed `short'. The default is `%d'.
+     *
+     *   fmt_ushort: The printf() format to use when rendering data which is
+     *               typed `unsigned short'. The default is `%u'.
+     *
+     *   fmt_long:   The printf() format to use when rendering data which is
+     *               typed `long'. The default is `%ld'.
+     *
+     *   fmt_ulong:  The printf() format to use when rendering data which is
+     *               typed `unsigned long'. The default is `%lu'.
+     *
+     *   fmt_llong:  The printf() format to use when rendering data which is
+     *               typed `long long'. The default depends on what printf()
+     *               format is available to print this datatype.
+     *
+     *   fmt_ullong: The printf() format to use when rendering data which is
+     *               typed `unsigned long long'. The default depends on what
+     *               printf() format is available to print this datatype.
+     *
+     *   fmt_double: The printf() format to use when rendering data which is
+     *               typed `double'. The default is `%g'.
+     *
+     *   fmt_float:  The printf() format to use when rendering data which is
+     *               typed `float'. The default is `%g'.
+     *
+     *   ascii:      If set then print 1-byte integer values as an ASCII
+     *               character (no quotes).  If the character is one of the
+     *               standard C escapes then print the escaped version.  If
+     *               the character is unprintable then print a 3-digit octal
+     *               escape.  If `ascii' is zero then then 1-byte integers are
+     *               printed as numeric values.  The default is zero.
+     *
+     *   str_locale: Determines how strings are printed. If zero then strings
+     *               are printed like in C except. If set to ESCAPE_HTML then
+     *               strings are printed using HTML encoding where each
+     *               character not in the class [a-zA-Z0-9] is substituted
+     *               with `%XX' where `X' is a hexadecimal digit.
+     *
+     *   str_repeat: If set to non-zero then any character value repeated N
+     *               or more times is printed as 'C'*N
+     *
+     * Numeric data is also subject to the formats for individual elements.
+     */
+    hbool_t     raw;
+    const char  *fmt_raw;
+    const char  *fmt_int;
+    const char  *fmt_uint;
+    const char  *fmt_schar;
+    const char  *fmt_uchar;
+    const char  *fmt_short;
+    const char  *fmt_ushort;
+    const char  *fmt_long;
+    const char  *fmt_ulong;
+    const char  *fmt_llong;
+    const char  *fmt_ullong;
+    const char  *fmt_double;
+    const char  *fmt_float;
+    int         ascii;
+    int         str_locale;
+    int         str_repeat;
+
+    /*
+     * Fields associated with compound array members.
+     *
+     *   pre:       A string to print at the beginning of each array. The
+     *              default value is the left square bracket `['.
+     *
+     *   sep:       A string to print between array values.  The default
+     *              value is a ",\001" ("\001" indicates an optional line
+     *              break).
+     *
+     *   suf:       A string to print at the end of each array.  The default
+     *              value is a right square bracket `]'.
+     *
+     *   linebreaks: a boolean value to determine if we want to break the line
+     *               after each row of an array.
+     */
+    const char  *arr_pre;
+    const char  *arr_sep;
+    const char  *arr_suf;
+    int         arr_linebreak;
+
+    /*
+     * Fields associated with compound data types.
+     *
+     *   name:      How the name of the struct member is printed in the
+     *              values. By default the name is not printed, but a
+     *              reasonable setting might be "%s=" which prints the name
+     *              followed by an equal sign and then the value.
+     *
+     *   sep:       A string that separates one member from another.  The
+     *              default is ", \001" (the \001 indicates an optional
+     *              line break to allow structs to span multiple lines of
+     *              output).
+     *
+     *   pre:       A string to print at the beginning of a compound type.
+     *              The default is a left curly brace.
+     *
+     *   suf:       A string to print at the end of each compound type.  The
+     *              default is  right curly brace.
+     *
+     *   end:       a string to print after we reach the last element of
+     *              each compound type. prints out before the suf.
+     */
+    const char  *cmpd_name;
+    const char  *cmpd_sep;
+    const char  *cmpd_pre;
+    const char  *cmpd_suf;
+    const char  *cmpd_end;
+
+    /*
+     * Fields associated with vlen data types.
+     *
+     *   sep:       A string that separates one member from another.  The
+     *              default is ", \001" (the \001 indicates an optional
+     *              line break to allow structs to span multiple lines of
+     *              output).
+     *
+     *   pre:       A string to print at the beginning of a vlen type.
+     *              The default is a left parentheses.
+     *
+     *   suf:       A string to print at the end of each vlen type.  The
+     *              default is a right parentheses.
+     *
+     *   end:       a string to print after we reach the last element of
+     *              each compound type. prints out before the suf.
+     */
+    const char  *vlen_sep;
+    const char  *vlen_pre;
+    const char  *vlen_suf;
+    const char  *vlen_end;
+
+    /*
+     * Fields associated with the individual elements.
+     *
+     *   fmt:       A printf(3c) format to use to print the value string
+     *              after it has been rendered.  The default is "%s".
+     *
+     *   suf1:      This string is appended to elements which are followed by
+     *              another element whether the following element is on the
+     *              same line or the next line.  The default is a comma.
+     *
+     *   suf2:      This string is appended (after `suf1') to elements which
+     *              are followed on the same line by another element.  The
+     *              default is a single space.
+     */
+    const char  *elmt_fmt;
+    const char  *elmt_suf1;
+    const char  *elmt_suf2;
+
+    /*
+     * Fields associated with the index values printed at the left edge of
+     * each line of output.
+     *
+     *   n_fmt:     Each index value is printed according to this printf(3c)
+     *              format string which should include a format for a long
+     *              integer.  The default is "%lu".
+     *
+     *   sep:       Each integer in the index list will be separated from the
+     *              others by this string, which defaults to a comma.
+     *
+     *   fmt:       After the index values are formated individually and
+     *              separated from one another by some string, the entire
+     *              resulting string will be formated according to this
+     *              printf(3c) format which should include a format for a
+     *              character string.  The default is "%s".
+     */
+    const char  *idx_n_fmt;             /*index number format           */
+    const char  *idx_sep;               /*separator between numbers     */
+    const char  *idx_fmt;               /*entire index format           */
+
+    /*
+     * Fields associated with entire lines.
+     *
+     *   ncols:     Number of columns per line defaults to 80.
+     *
+     *   per_line:  If this field has a positive value then every Nth element
+     *              will be printed at the beginning of a line.
+     *
+     *   pre:       Each line of output contains an optional prefix area
+     *              before the data. This area can contain the index for the
+     *              first datum (represented by `%s') as well as other
+     *              constant text.  The default value is `%s'.
+     *
+     *   1st:       This is the format to print at the beginning of the first
+     *              line of output. The default value is the current value of
+     *              `pre' described above.
+     *
+     *   cont:      This is the format to print at the beginning of each line
+     *              which was continued because the line was split onto
+     *              multiple lines. This often happens with compound
+     *              data which is longer than one line of output. The default
+     *              value is the current value of the `pre' field
+     *              described above.
+     *
+     *   suf:       This character string will be appended to each line of
+     *              output.  It should not contain line feeds.  The default
+     *              is the empty string.
+     *
+     *   sep:       A character string to be printed after every line feed
+     *              defaulting to the empty string.  It should end with a
+     *              line feed.
+     *
+     *   multi_new: Indicates the algorithm to use when data elements tend to
+     *              occupy more than one line of output. The possible values
+     *              are (zero is the default):
+     *
+     *              0:  No consideration. Each new element is printed
+     *                  beginning where the previous element ended.
+     *
+     *              1:  Print the current element beginning where the
+     *                  previous element left off. But if that would result
+     *                  in the element occupying more than one line and it
+     *                  would only occupy one line if it started at the
+     *                  beginning of a line, then it is printed at the
+     *                  beginning of the next line.
+     *
+     *   multi_new: If an element is continued onto additional lines then
+     *              should the following element begin on the next line? The
+     *              default is to start the next element on the same line
+     *              unless it wouldn't fit.
+     *
+     * indentlevel: a string that shows how far to indent if extra spacing
+     *              is needed. dumper uses it.
+     */
+    int         line_ncols;             /*columns of output             */
+    size_t      line_per_line;          /*max elements per line         */
+    const char  *line_pre;              /*prefix at front of each line  */
+    const char  *line_1st;              /*alternate pre. on first line  */
+    const char  *line_cont;             /*alternate pre. on continuation*/
+    const char  *line_suf;              /*string to append to each line */
+    const char  *line_sep;              /*separates lines               */
+    int         line_multi_new;         /*split multi-line outputs?     */
+    const char  *line_indent;           /*for extra identation if we need it*/
+
+    /*used to skip the first set of checks for line length*/
+    int skip_first;
+
+    /*flag used to hide or show the file number for obj refs*/
+    int obj_hidefileno;
+
+    /*string used to format the output for the obje refs*/
+    const char *obj_format;
+
+    /*flag used to hide or show the file number for dataset regions*/
+    int dset_hidefileno;
+
+    /*string used to format the output for the dataset regions*/
+    const char *dset_format;
+
+    const char *dset_blockformat_pre;
+    const char *dset_ptformat_pre;
+    const char *dset_ptformat;
+
+    /*print array indices in output matrix */
+    int pindex;
+
+    /*escape non printable characters */
+    int do_escape;
+
+} h5dump_t;
+
+typedef struct dump_header{
+    const char *name;
+    const char *filebegin;
+    const char *fileend;
+    const char *bootblockbegin;
+    const char *bootblockend;
+    const char *groupbegin;
+    const char *groupend;
+    const char *datasetbegin;
+    const char *datasetend;
+    const char *attributebegin;
+    const char *attributeend;
+    const char *datatypebegin;
+    const char *datatypeend;
+    const char *dataspacebegin;
+    const char *dataspaceend;
+    const char *databegin;
+    const char *dataend;
+    const char *softlinkbegin;
+    const char *softlinkend;
+    const char *subsettingbegin;
+    const char *subsettingend;
+    const char *startbegin;
+    const char *startend;
+    const char *stridebegin;
+    const char *strideend;
+    const char *countbegin;
+    const char *countend;
+    const char *blockbegin;
+    const char *blockend;
+
+    const char *fileblockbegin;
+    const char *fileblockend;
+    const char *bootblockblockbegin;
+    const char *bootblockblockend;
+    const char *groupblockbegin;
+    const char *groupblockend;
+    const char *datasetblockbegin;
+    const char *datasetblockend;
+    const char *attributeblockbegin;
+    const char *attributeblockend;
+    const char *datatypeblockbegin;
+    const char *datatypeblockend;
+    const char *dataspaceblockbegin;
+    const char *dataspaceblockend;
+    const char *datablockbegin;
+    const char *datablockend;
+    const char *softlinkblockbegin;
+    const char *softlinkblockend;
+    const char *strblockbegin;
+    const char *strblockend;
+    const char *enumblockbegin;
+    const char *enumblockend;
+    const char *structblockbegin;
+    const char *structblockend;
+    const char *vlenblockbegin;
+    const char *vlenblockend;
+    const char *subsettingblockbegin;
+    const char *subsettingblockend;
+    const char *startblockbegin;
+    const char *startblockend;
+    const char *strideblockbegin;
+    const char *strideblockend;
+    const char *countblockbegin;
+    const char *countblockend;
+    const char *blockblockbegin;
+    const char *blockblockend;
+
+    const char *dataspacedescriptionbegin;
+    const char *dataspacedescriptionend;
+    const char *dataspacedimbegin;
+    const char *dataspacedimend;
+
+} dump_header;
+
+typedef struct h5tools_context_t {
+    size_t	cur_column;	/*current column for output	*/
+    size_t	cur_elmt;	/*current element/output line	*/
+    int		need_prefix;	/*is line prefix needed?	*/
+    int		ndims;		/*dimensionality		*/
+    hsize_t	p_min_idx[H5S_MAX_RANK]; /*min selected index	*/
+    hsize_t	p_max_idx[H5S_MAX_RANK]; /*max selected index	*/
+    int		prev_multiline;	/*was prev datum multiline?	*/
+    size_t	prev_prefix_len;/*length of previous prefix	*/
+    int		continuation;	/*continuation of previous data?*/
+    hsize_t	size_last_dim;  /*the size of the last dimension,
+                                 *needed so we can break after each
+                                 *row */
+    int		indent_level;   /*the number of times we need some
+                                 *extra indentation */
+    int		default_indent_level; /*this is used when the indent level gets changed */
+    hsize_t acc[H5S_MAX_RANK];    /* accumulator position */
+    hsize_t pos[H5S_MAX_RANK];    /* matrix position */
+				hsize_t sm_pos;               /* current stripmine element position */
+} h5tools_context_t;
+
+/* a structure to hold the subsetting particulars for a dataset */
+struct subset_t {
+    hsize_t *start;
+    hsize_t *stride;
+    hsize_t *count;
+    hsize_t *block;
+};
+
+/*if we get a new program that needs to use the library add its name here*/
+typedef enum {
+    UNKNOWN = 0,
+    H5LS,
+    H5DUMP
+} ProgType;
+
+/* taken from h5dump.h */
+#define ATTRIBUTE_DATA  0
+#define DATASET_DATA    1
+#define ENUM_DATA       2
+
+#define COL             3
+
+extern int     indent;              /*how far in to indent the line         */
+extern FILE   *rawdatastream;       /*output stream for raw data            */
+
+/* taken from h5dump.h*/
+#define ATTRIBUTE       "ATTRIBUTE"
+#define BLOCK           "BLOCK"
+#define SUPER_BLOCK     "SUPER_BLOCK"
+#define COMPRESSION     "COMPRESSION"
+#define CONCATENATOR    "//"
+#define COMPLEX         "COMPLEX"
+#define COUNT           "COUNT"
+#define CSET            "CSET"
+#define CTYPE           "CTYPE"
+#define DATA            "DATA"
+#define DATASET         "DATASET"
+#define DATASPACE       "DATASPACE"
+#define DATATYPE        "DATATYPE"
+#define EXTERNAL        "EXTERNAL"
+#define FILENO          "FILENO"
+#define GROUPNAME       "GROUP"
+#define HARDLINK        "HARDLINK"
+#define NLINK           "NLINK"
+#define OBJID           "OBJECTID"
+#define OBJNO           "OBJNO"
+#define S_SCALAR        "SCALAR"
+#define S_SIMPLE        "SIMPLE"
+#define SOFTLINK        "SOFTLINK"
+#define STORAGELAYOUT   "STORAGELAYOUT"
+#define START           "START"
+#define STRIDE          "STRIDE"
+#define STRSIZE         "STRSIZE"
+#define STRPAD          "STRPAD"
+#define SUBSET          "SUBSET"
+#define FILTERS         "FILTERS"
+#define DEFLATE         "COMPRESSION DEFLATE"
+#define DEFLATE_LEVEL   "LEVEL"
+#define SHUFFLE         "PREPROCESSING SHUFFLE"
+#define FLETCHER32      "CHECKSUM FLETCHER32"
+#define SZIP            "COMPRESSION SZIP"
+#define STORAGE_LAYOUT  "STORAGE_LAYOUT"
+#define CONTIGUOUS      "CONTIGUOUS"
+#define COMPACT         "COMPACT"
+#define CHUNKED         "CHUNKED"
+#define EXTERNAL_FILE   "EXTERNAL_FILE"
+#define FILLVALUE       "FILLVALUE"
+#define FILE_CONTENTS   "FILE_CONTENTS"
+
+
+#define BEGIN           "{"
+#define END             "}"
+
+/* Definitions of useful routines */
+extern void     h5tools_init(void);
+extern void     h5tools_close(void);
+extern hid_t    h5tools_fopen(const char *fname, const char *driver,
+                              char *drivername, size_t drivername_len,
+                              int argc, const char *argv[]);
+extern int      h5tools_dump_dset(FILE *stream, const h5dump_t *info, hid_t dset,
+                                  hid_t p_typ, struct subset_t *sset, int indentlevel);
+extern int      h5tools_dump_mem(FILE *stream, const h5dump_t *info, hid_t obj_id,
+                                 hid_t type, hid_t space, void *mem, int indentlevel);
+extern hid_t    h5tools_get_native_type(hid_t type);
+
+extern void     h5tools_dump_simple_data(FILE *stream, const h5dump_t *info, hid_t container,
+                         h5tools_context_t *ctx/*in,out*/, unsigned flags,
+                         hsize_t nelmts, hid_t type, void *_mem);
+
+extern int      h5tools_canreadf(const char* name,
+                                 hid_t dcpl_id);
+extern int      h5tools_can_encode(H5Z_filter_t filtn);
+
+void            init_acc_pos(h5tools_context_t	*ctx, hsize_t *dims);
+
+
+#endif	/* H5TOOLS_H__ */

Added: packages/hdf5/branches/upstream/current/tools/lib/h5tools_filters.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5tools_filters.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5tools_filters.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,240 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "hdf5.h"
+#include "h5tools.h"
+
+/*-------------------------------------------------------------------------
+ * print a warning message
+ *-------------------------------------------------------------------------
+ */
+static void print_warning(const char *dname, const char *fname)
+{
+ fprintf(stderr,"Warning: dataset <%s> cannot be read, %s filter is not available\n",
+  dname,fname);
+}
+
+/*-------------------------------------------------------------------------
+ * Function: h5tools_canreadf
+ *
+ * Purpose: check if the dataset creation property list has filters that
+ * are not registered in the current configuration
+ * 1) the external filters GZIP and SZIP might not be available
+ * 2) the internal filters might be turned off
+ *
+ * Return: 1, can read, 0, cannot, -1 error
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: March 1, 2004
+ *
+ *-------------------------------------------------------------------------
+ */
+int h5tools_canreadf(const char* name, /* object name, serves also as boolean print */
+                     hid_t dcpl_id)    /* dataset creation property list */
+{
+
+ int          nfilters;       /* number of filters */
+ H5Z_filter_t filtn;          /* filter identification number */
+ int          i;              /* index */
+ int          have_deflate=0; /* assume initially we do not have filters */
+ int          have_szip=0;
+ int          have_shuffle=0;
+ int          have_fletcher=0;
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+ have_deflate=1;
+#endif
+#ifdef H5_HAVE_FILTER_SZIP
+ have_szip=1;
+#endif
+#ifdef H5_HAVE_FILTER_SHUFFLE
+ have_shuffle=1;
+#endif
+#ifdef H5_HAVE_FILTER_FLETCHER32
+ have_fletcher=1;
+#endif
+
+ /* get information about filters */
+ if ((nfilters = H5Pget_nfilters(dcpl_id))<0)
+  return -1;
+
+ /* if we do not have filters, we can read the dataset safely */
+ if (!nfilters)
+  return 1;
+
+ /* check availability of filters */
+ for (i=0; i<nfilters; i++)
+ {
+  if ((filtn = H5Pget_filter(dcpl_id,(unsigned)i,0,0,0,0,0))<0)
+   return -1;
+
+  switch (filtn)
+  {
+/*-------------------------------------------------------------------------
+ * user defined filter
+ *-------------------------------------------------------------------------
+ */
+  default:
+    if (name)
+     print_warning(name,"user defined");
+    return 0;
+
+/*-------------------------------------------------------------------------
+ * H5Z_FILTER_DEFLATE	   1 , deflation like gzip
+ *-------------------------------------------------------------------------
+ */
+  case H5Z_FILTER_DEFLATE:
+   if (!have_deflate)
+   {
+    if (name)
+     print_warning(name,"deflate");
+    return 0;
+   }
+   break;
+/*-------------------------------------------------------------------------
+ * H5Z_FILTER_SZIP       4 , szip compression
+ *-------------------------------------------------------------------------
+ */
+  case H5Z_FILTER_SZIP:
+   if (!have_szip)
+   {
+    if (name)
+     print_warning(name,"SZIP");
+    return 0;
+   }
+   break;
+/*-------------------------------------------------------------------------
+ * H5Z_FILTER_SHUFFLE    2 , shuffle the data
+ *-------------------------------------------------------------------------
+ */
+  case H5Z_FILTER_SHUFFLE:
+   if (!have_shuffle)
+   {
+    if (name)
+     print_warning(name,"shuffle");
+    return 0;
+   }
+   break;
+/*-------------------------------------------------------------------------
+ * H5Z_FILTER_FLETCHER32 3 , fletcher32 checksum of EDC
+ *-------------------------------------------------------------------------
+ */
+  case H5Z_FILTER_FLETCHER32:
+   if (!have_fletcher)
+   {
+    if (name)
+     print_warning(name,"fletcher32");
+    return 0;
+   }
+   break;
+  }/*switch*/
+ }/*for*/
+
+ return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: h5tools_canwritef
+ *
+ * Purpose: check if the filter is available and can write data.
+ * At this time, all filters that are available can write data,
+ * except SZIP, which may be configured decoder-only.
+ *
+ * Return: 1, can write, 0, cannot, -1 error
+ *
+ * Programmer:
+ *
+ * Date: October 5, 2004
+ *
+ *-------------------------------------------------------------------------
+ */
+int h5tools_can_encode( H5Z_filter_t filtn)
+{
+
+ int          have_deflate=0; /* assume initially we do not have filters */
+ int          have_szip=0;
+ int          have_shuffle=0;
+ int          have_fletcher=0;
+ unsigned int filter_config_flags;
+
+#ifdef H5_HAVE_FILTER_DEFLATE
+ have_deflate=1;
+#endif
+#ifdef H5_HAVE_FILTER_SZIP
+ have_szip=1;
+#endif
+#ifdef H5_HAVE_FILTER_SHUFFLE
+ have_shuffle=1;
+#endif
+#ifdef H5_HAVE_FILTER_FLETCHER32
+ have_fletcher=1;
+#endif
+
+  switch (filtn)
+  {
+    /* user defined filter	   */
+  default:
+    return 0;
+
+  case H5Z_FILTER_DEFLATE:
+   if (!have_deflate)
+   {
+    return 0;
+   }
+   break;
+  case H5Z_FILTER_SZIP:
+   if (!have_szip)
+   {
+    return 0;
+   }
+   if(H5Zget_filter_info(filtn, &filter_config_flags)<0)
+       return -1;
+   if ((filter_config_flags &
+          (H5Z_FILTER_CONFIG_ENCODE_ENABLED|H5Z_FILTER_CONFIG_DECODE_ENABLED)) == 0) {
+    /* filter present but neither encode nor decode is supported (???) */
+    return -1;
+   } else if ((filter_config_flags &
+          (H5Z_FILTER_CONFIG_ENCODE_ENABLED|H5Z_FILTER_CONFIG_DECODE_ENABLED)) ==
+    H5Z_FILTER_CONFIG_DECODE_ENABLED) {
+     /* decoder only: read but not write */
+    return 0;
+   } else if ((filter_config_flags &
+          (H5Z_FILTER_CONFIG_ENCODE_ENABLED|H5Z_FILTER_CONFIG_DECODE_ENABLED)) ==
+    H5Z_FILTER_CONFIG_ENCODE_ENABLED) {
+     /* encoder only: write but not read (???) */
+     return -1;
+   } else if ((filter_config_flags &
+          (H5Z_FILTER_CONFIG_ENCODE_ENABLED|H5Z_FILTER_CONFIG_DECODE_ENABLED)) ==
+          (H5Z_FILTER_CONFIG_ENCODE_ENABLED|H5Z_FILTER_CONFIG_DECODE_ENABLED)) {
+    return 1;
+   }
+   break;
+  case H5Z_FILTER_SHUFFLE:
+   if (!have_shuffle)
+   {
+    return 0;
+   }
+   break;
+  case H5Z_FILTER_FLETCHER32:
+   if (!have_fletcher)
+   {
+    return 0;
+   }
+   break;
+  }/*switch*/
+
+ return 1;
+}

Added: packages/hdf5/branches/upstream/current/tools/lib/h5tools_ref.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5tools_ref.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5tools_ref.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,395 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "h5tools_ref.h"
+#include "H5private.h"
+#include "H5SLprivate.h"
+#include "h5tools.h"
+#include "h5tools_utils.h"
+
+
+/*
+ *  Table to look up a path name for an object
+ *  reference.
+ *
+ *  This table stores mappings of reference -> path
+ *  for all objects in the file that may be the target of
+ *  an object reference.
+ *
+ *  The 'path' is an absolute path by which the object
+ *  can be accessed.  When an object has > 1 such path,
+ *  only one will be used in the table, with no particular
+ *  method of selecting which one.
+ */
+
+typedef struct {
+    haddr_t objno;      /* Object ID (i.e. address) */
+    const char *path;   /* Object path */
+} ref_path_node_t;
+
+static H5SL_t *ref_path_table = NULL;   /* the "table" (implemented with a skip list) */
+static hid_t thefile;
+
+extern char  *progname;
+extern int   d_status;
+
+static int ref_path_table_put(const char *, haddr_t objno);
+static hbool_t ref_path_table_find(haddr_t objno);
+
+/*-------------------------------------------------------------------------
+ * Function:    init_ref_path_table
+ *
+ * Purpose:     Enter the root group ("/") into the path table
+ *
+ * Return:      Non-negative on success, negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+init_ref_path_table(hid_t fid)
+{
+    H5G_stat_t              sb;
+    haddr_t objno;
+    char *root_path;
+
+    /* Set file ID for later queries (XXX: this should be fixed) */
+    thefile = fid;
+
+    /* Create skip list to store reference path information */
+    if((ref_path_table = H5SL_create(H5SL_TYPE_HADDR, 0.5, (size_t)16))==NULL)
+	return (-1);
+
+    if((root_path = HDstrdup("/")) == NULL)
+	return (-1);
+
+    if(H5Gget_objinfo(fid, "/", TRUE, &sb)<0) {
+	/* fatal error? */
+	HDfree(root_path);
+	return (-1);
+    }
+
+    /* Insert into table (takes ownership of path) */
+    objno = ((haddr_t)sb.objno[1] << (8*sizeof(long))) | (haddr_t)sb.objno[0];
+    ref_path_table_put(root_path, objno);
+
+    return(0);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    free_ref_path_info
+ *
+ * Purpose:     Free the key for a reference path table node
+ *
+ * Return:      Non-negative on success, negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+free_ref_path_info(void *item, void UNUSED *key, void UNUSED *operator_data/*in,out*/)
+{
+    ref_path_node_t *node = (ref_path_node_t *)item;
+
+    HDfree(node->path);
+    HDfree(node);
+
+    return(0);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    term_ref_path_table
+ *
+ * Purpose:     Terminate the reference path table
+ *
+ * Return:      Non-negative on success, negative on failure
+ *
+ * Programmer:  Quincey Koziol
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+term_ref_path_table(void)
+{
+    /* Destroy reference path table, freeing all memory */
+    if(ref_path_table)
+        H5SL_destroy(ref_path_table, free_ref_path_info, NULL);
+
+    return(0);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    ref_path_table_lookup
+ *
+ * Purpose:     Looks up a table entry given a path name.
+ *              Used during construction of the table.
+ *
+ * Return:      The table entre (pte) or NULL if not in the
+ *              table.
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+ref_path_table_lookup(const char *thepath)
+{
+    H5G_stat_t  sb;
+    haddr_t objno;
+    haddr_t     ret_value;
+
+    /* Get object ID for object at path */
+    if(H5Gget_objinfo(thefile, thepath, TRUE, &sb)<0)
+	/*  fatal error ? */
+	return HADDR_UNDEF;
+
+    /* Return OID or HADDR_UNDEF */
+    objno = ((haddr_t)sb.objno[1] << (8*sizeof(long))) | (haddr_t)sb.objno[0];
+    ret_value = ref_path_table_find(objno) ? objno : HADDR_UNDEF;
+
+    return(ret_value);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    ref_path_table_find
+ *
+ * Purpose:     Looks up a table entry given a object number.
+ *              Used during construction of the table.
+ *
+ * Return:      TRUE/FALSE on success, can't fail
+ *
+ * Programmer:  Quincey Koziol
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+ref_path_table_find(haddr_t objno)
+{
+    HDassert(ref_path_table);
+
+    if(H5SL_search(ref_path_table, &objno) == NULL)
+        return FALSE;
+    else
+        return TRUE;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    ref_path_table_put
+ *
+ * Purpose:     Enter the 'obj' with 'path' in the table (assumes its not
+ *              already there)
+ *
+ *              Create an object reference, pte, and store them
+ *              in the table.
+ *
+ *              NOTE: Takes ownership of the path name string passed in!
+ *
+ * Return:      Non-negative on success, negative on failure
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+ref_path_table_put(const char *path, haddr_t objno)
+{
+    ref_path_node_t *new_node;
+
+    HDassert(ref_path_table);
+    HDassert(path);
+
+    if((new_node = HDmalloc(sizeof(ref_path_node_t))) == NULL)
+        return(-1);
+
+    new_node->objno = objno;
+    new_node->path = path;
+
+    return(H5SL_insert(ref_path_table, new_node, &(new_node->objno)));
+}
+
+/*
+ *  counter used to disambiguate multiple instances of same object.
+ */
+int xid = 1;
+
+int get_next_xid() {
+    return xid++;
+}
+
+/*
+ *  This counter is used to create fake object ID's
+ *  The idea is to set it to the largest possible offest, which
+ *  minimizes the chance of collision with a real object id.
+ *
+ */
+haddr_t fake_xid = HADDR_MAX;
+haddr_t
+get_fake_xid () {
+    return (fake_xid--);
+}
+
+/*
+ * for an object that does not have an object id (e.g., soft link),
+ * create a table entry with a fake object id as the key.
+ *
+ * Assumes 'path' is for an object that is not in the table.
+ *
+ */
+
+haddr_t
+ref_path_table_gen_fake(const char *path)
+{
+    const char *dup_path;
+    haddr_t fake_objno;
+
+    if((dup_path = HDstrdup(path)) == NULL)
+        return HADDR_UNDEF;
+
+    /* Generate fake ID for string */
+    fake_objno = get_fake_xid();
+
+    /* Insert "fake" object into table (takes ownership of path) */
+    ref_path_table_put(dup_path, fake_objno);
+
+    return(fake_objno);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    lookup_ref_path
+ *
+ * Purpose:     Lookup the path to the object with refernce 'ref'.
+ *
+ * Return:      Return a path to the object, or NULL if not found.
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+const char *
+lookup_ref_path(haddr_t ref)
+{
+    uint8_t                *p;          /* Pointer to reference to translate */
+    haddr_t                 addr;       /* Resulting address */
+    unsigned		    i;          /* Local index variable */
+    haddr_t		    tmp;        /* Temporary portion of address */
+    uint8_t		    c;          /* Byte from address */
+    hbool_t		    all_zero = TRUE;    /* If the address is all zeros, make into HADDR_UNDEF */
+    ref_path_node_t        *node;       /* Ref path node found for address */
+
+    /* Be safer for h5ls */
+    if(!ref_path_table)
+        return(NULL);
+
+    /* Compensate for endianness differences */
+    p = (uint8_t *)&ref;
+    addr = 0;
+
+    for (i=0; i<sizeof(haddr_t); i++) {
+	c = *p++;
+	if (c != 0xff)
+            all_zero = FALSE;
+
+	if (i<sizeof(haddr_t)) {
+	    tmp = c;
+	    tmp <<= (i * 8);	/*use tmp to get casting right */
+	    addr |= tmp;
+	} else if (!all_zero) {
+	    assert(0 == *p);	/*overflow */
+	}
+    }
+    if (all_zero)
+        addr = HADDR_UNDEF;
+
+    /* Check if address is in reference path table */
+    node = H5SL_search(ref_path_table, &addr);
+
+    return(node ? node->path : NULL);
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    fill_ref_path_table
+ *
+ * Purpose:     Called by interator to create references for
+ *              all objects and enter them in the table.
+ *
+ * Return:      Error status.
+ *
+ * Programmer:  REMcG
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+fill_ref_path_table(hid_t group, const char *obj_name, void *op_data)
+{
+    const char *obj_prefix = (const char *)op_data;
+    H5G_stat_t              statbuf;
+    haddr_t objno;
+
+    H5Gget_objinfo(group, obj_name, FALSE, &statbuf);
+    objno = ((haddr_t)statbuf.objno[1] << (8*sizeof(long))) | (haddr_t)statbuf.objno[0];
+
+    /* Check if the object is in the path table */
+    if (!ref_path_table_find(objno)) {
+        size_t                  tmp_len;
+        char                   *thepath;
+
+        /* Compute length for this object's path */
+        tmp_len = HDstrlen(obj_prefix) + HDstrlen(obj_name) + 2;
+
+        /* Allocate room for the path for this object */
+        if ((thepath = (char *) HDmalloc(tmp_len)) == NULL)
+            return FAIL;
+
+        /* Build the name for this object */
+        HDstrcpy(thepath, obj_prefix);
+        HDstrcat(thepath, "/");
+        HDstrcat(thepath, obj_name);
+
+        /* Insert the object into the path table */
+        ref_path_table_put(thepath, objno);
+
+        if(statbuf.type == H5G_GROUP) {
+            /* Iterate over objects in this group, using this group's
+             * name as their prefix
+             */
+            if(H5Giterate(group, obj_name, NULL, fill_ref_path_table, thepath) < 0) {
+                error_msg(progname, "unable to dump group \"%s\"\n", obj_name);
+                d_status = EXIT_FAILURE;
+            }
+        }
+    }
+
+    return 0;
+}
+

Added: packages/hdf5/branches/upstream/current/tools/lib/h5tools_ref.h
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5tools_ref.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5tools_ref.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,38 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef H5TOOLS_REF_H__
+#define H5TOOLS_REF_H__
+
+#include "hdf5.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int init_ref_path_table(hid_t fid);
+const char *lookup_ref_path(haddr_t ref);
+herr_t      fill_ref_path_table(hid_t, const char *, void *);
+int         get_next_xid(void);
+haddr_t     get_fake_xid (void);
+haddr_t ref_path_table_lookup(const char *);
+haddr_t ref_path_table_gen_fake(const char *);
+int term_ref_path_table(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+

Added: packages/hdf5/branches/upstream/current/tools/lib/h5tools_str.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5tools_str.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5tools_str.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1127 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Bill Wendling <wendling at ncsa.uiuc.edu>
+ *              Monday, 19. February 2001
+ *
+ * Purpose: These are string functions for us to use and abuse.
+ */
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "H5private.h"
+#include "h5tools.h"            /*for h5dump_t structure    */
+#include "h5tools_ref.h"
+#include "h5tools_str.h"        /*function prototypes       */
+
+/*
+ * If REPEAT_VERBOSE is defined then character strings will be printed so
+ * that repeated character sequences like "AAAAAAAAAA" are displayed as
+ *
+ * 	'A' repeates 9 times
+ *
+ * Otherwise the format is more Perl-like
+ *
+ * 	'A'*10
+ *
+ */
+#define REPEAT_VERBOSE
+
+/* Variable length string datatype */
+#define STR_INIT_LEN    4096    /*initial length            */
+
+static char    *h5tools_escape(char *s, size_t size);
+static hbool_t  h5tools_is_zero(const void *_mem, size_t size);
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_str_close
+ *
+ * Purpose:	Closes a string by releasing it's memory and setting the size
+ *		information to zero.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April 26, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+h5tools_str_close(h5tools_str_t *str)
+{
+    if (str && str->nalloc) {
+        free(str->s);
+        memset(str, 0, sizeof(h5tools_str_t));
+    }
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_str_len
+ *
+ * Purpose:	Returns the length of the string, not counting the null
+ *		terminator.
+ *
+ * Return:	Success:	Length of string
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April 26, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+h5tools_str_len(h5tools_str_t *str)
+{
+    return str->len;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_str_append
+ *
+ * Purpose:	Formats variable arguments according to printf() format
+ *		string and appends the result to variable length string STR.
+ *
+ * Return:	Success:	Pointer to buffer containing result.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April 26, 1999
+ *
+ * Modifications:
+ *
+ *              Major change:  need to check results of vsnprintf to
+ *              handle errors, empty format, and overflows.
+ *
+ * Programmer:	REMcG Matzke
+ *              June 16, 2004
+ *
+ *-------------------------------------------------------------------------
+ */
+char *
+h5tools_str_append(h5tools_str_t *str/*in,out*/, const char *fmt, ...)
+{
+    va_list ap;
+
+    va_start(ap, fmt);
+
+    /* Make sure we have some memory into which to print */
+    if (!str->s || str->nalloc <= 0) {
+	str->nalloc = STR_INIT_LEN;
+	str->s = malloc(str->nalloc);
+	assert(str->s);
+	str->s[0] = '\0';
+	str->len = 0;
+    }
+
+    if (strlen(fmt) == 0) {
+        /* nothing to print */
+        va_end(ap);
+        return str->s;
+    }
+
+     /* Format the arguments and append to the value already in `str' */
+     while (1) {
+        /* How many bytes available for new value, counting the new NUL */
+	size_t avail = str->nalloc - str->len;
+
+	int nchars = HDvsnprintf(str->s + str->len, avail, fmt, ap);
+
+	if (nchars<0) {
+            /* failure, such as bad format */
+            va_end(ap);
+	    return NULL;
+        }
+
+	if ((size_t)nchars>=avail ||
+	    (0==nchars && (strcmp(fmt,"%s") ))) {
+	   /* Truncation return value as documented by C99, or zero return value with either of the
+            * following conditions, each of which indicates that the proper C99 return value probably
+            *  should have been positive when the format string is
+            *  something other than "%s"
+            * Alocate at least twice as much space and try again.
+            */
+	   size_t newsize = MAX(str->len+nchars+1, 2*str->nalloc);
+	   assert(newsize > str->nalloc); /*overflow*/
+#ifndef H5_HAVE_VSNPRINTF
+	   /* If we even made it this far... the HDvsnprintf() clobbered memory: SIGSEGV probable*/
+	   abort();
+#endif
+	   str->s = realloc(str->s, newsize);
+	   assert(str->s);
+	   str->nalloc = newsize;
+	} else {
+	   /* Success */
+	   str->len += nchars;
+	   break;
+        }
+     }
+     va_end(ap);
+     return str->s;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_str_reset
+ *
+ * Purpose:	Reset the string to the empty value. If no memory is
+ *		allocated yet then initialize the h5tools_str_t struct.
+ *
+ * Return:	Success:	Ptr to the buffer which contains a null
+ *				character as the first element.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April 26, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+char *
+h5tools_str_reset(h5tools_str_t *str/*in,out*/)
+{
+    if (!str->s || str->nalloc <= 0) {
+	str->nalloc = STR_INIT_LEN;
+	str->s = malloc(str->nalloc);
+	assert(str->s);
+    }
+
+    str->s[0] = '\0';
+    str->len = 0;
+    return str->s;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_str_trunc
+ *
+ * Purpose:	Truncate a string to be at most SIZE characters.
+ *
+ * Return:	Success:	Pointer to the string
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April 26, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+char *
+h5tools_str_trunc(h5tools_str_t *str/*in,out*/, size_t size)
+{
+    if (size < str->len) {
+	str->len = size;
+	str->s[size] = '\0';
+    }
+
+    return str->s;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_str_fmt
+ *
+ * Purpose:	Reformat a string contents beginning at character START
+ *		according to printf format FMT. FMT should contain no format
+ *		specifiers except possibly the `%s' variety. For example, if
+ *		the input string is `hello' and the format is "<<%s>>" then
+ *		the output value will be "<<hello>>".
+ *
+ * Return:	Success:	A pointer to the resulting string.
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April 26, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+char *
+h5tools_str_fmt(h5tools_str_t *str/*in,out*/, size_t start, const char *fmt)
+{
+    char _temp[1024], *temp = _temp;
+
+    /* If the format string is simply "%s" then don't bother doing anything */
+    if (!strcmp(fmt, "%s"))
+        return str->s;
+
+    /*
+     * Save the input value if there is a `%' anywhere in FMT.  Otherwise
+     * don't bother because we don't need a temporary copy.
+     */
+    if (strchr(fmt, '%')) {
+        if (str->len - start + 1 > sizeof(_temp)) {
+            temp = malloc(str->len-start + 1);
+            assert(temp);
+        }
+
+        strcpy(temp, str->s + start);
+    }
+
+    /* Reset the output string and append a formatted version */
+    h5tools_str_trunc(str, start);
+    h5tools_str_append(str, fmt, temp);
+
+    /* Free the temp buffer if we allocated one */
+    if (temp != _temp)
+        free(temp);
+
+    return str->s;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_str_prefix
+ *
+ * Purpose:	Renders the line prefix value into string STR.
+ *
+ * Return:	Success:	Pointer to the prefix.
+ *
+ * 		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 23, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+char *
+h5tools_str_prefix(h5tools_str_t *str/*in,out*/, const h5dump_t *info,
+                   hsize_t elmtno, int ndims, hsize_t min_idx[],
+                   hsize_t max_idx[], h5tools_context_t *ctx)
+{
+    hsize_t p_prod[H5S_MAX_RANK];
+    hsize_t i = 0;
+    hsize_t curr_pos=elmtno;
+
+    h5tools_str_reset(str);
+
+    if (ndims > 0) {
+        /*
+         * Calculate the number of elements represented by a unit change in a
+         * certain index position.
+         */
+        for (i = ndims - 1, p_prod[ndims - 1] = 1; i > 0; --i)
+            p_prod[i - 1] = (max_idx[i] - min_idx[i]) * p_prod[i];
+
+        for ( i = 0; i < (hsize_t)ndims; i++)
+        {
+         ctx->pos[i] = curr_pos/ctx->acc[i];
+         curr_pos -= ctx->acc[i]*ctx->pos[i];
+        }
+        assert( curr_pos == 0 );
+
+        /* Print the index values */
+        for (i = 0; i < (hsize_t)ndims; i++) {
+            if (i)
+                h5tools_str_append(str, "%s", OPT(info->idx_sep, ","));
+
+            h5tools_str_append(str, OPT(info->idx_n_fmt, "%lu"),
+                               (unsigned long)ctx->pos[i]);
+        }
+    } else {
+        /* Scalar */
+        h5tools_str_append(str, OPT(info->idx_n_fmt, "%lu"), (unsigned long)0);
+    }
+
+    /* Add prefix and suffix to the index */
+    return h5tools_str_fmt(str, 0, OPT(info->idx_fmt, "%s: "));
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_str_dump_region
+ *
+ * Purpose:	Prints information about a dataspace region by appending
+ *		the information to the specified string.
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	NULL
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, June  7, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+h5tools_str_dump_region(h5tools_str_t *str, hid_t region, const h5dump_t *info)
+{
+    hssize_t	nblocks, npoints;
+    hsize_t     alloc_size;
+    hsize_t    *ptdata;
+    int		ndims = H5Sget_simple_extent_ndims(region);
+
+    /*
+     * These two functions fail if the region does not have blocks or points,
+     * respectively. They do not currently know how to translate from one to
+     * the other.
+     */
+    H5E_BEGIN_TRY {
+        nblocks = H5Sget_select_hyper_nblocks(region);
+        npoints = H5Sget_select_elem_npoints(region);
+    } H5E_END_TRY;
+
+    h5tools_str_append(str, "{");
+
+    /* Print block information */
+    if (nblocks > 0) {
+        int i;
+
+        alloc_size = nblocks * ndims * 2 * sizeof(ptdata[0]);
+        assert(alloc_size == (hsize_t)((size_t)alloc_size)); /*check for overflow*/
+        ptdata = malloc((size_t)alloc_size);
+        H5_CHECK_OVERFLOW(nblocks, hssize_t, hsize_t);
+        H5Sget_select_hyper_blocklist(region, (hsize_t)0, (hsize_t)nblocks, ptdata);
+
+        for (i = 0; i < nblocks; i++) {
+            int j;
+
+            h5tools_str_append(str, info->dset_blockformat_pre,
+                               i ? "," OPTIONAL_LINE_BREAK " " : "",
+                               (unsigned long)i);
+
+            /* Start coordinates and opposite corner */
+            for (j = 0; j < ndims; j++)
+                h5tools_str_append(str, "%s%lu", j ? "," : "(",
+                                   (unsigned long)ptdata[i * 2 * ndims + j]);
+
+            for (j = 0; j < ndims; j++)
+                h5tools_str_append(str, "%s%lu", j ? "," : ")-(",
+                                  (unsigned long)ptdata[i * 2 * ndims + j + ndims]);
+
+            h5tools_str_append(str, ")");
+        }
+
+        free(ptdata);
+    }
+
+    /* Print point information */
+    if (npoints > 0) {
+        int i;
+
+        alloc_size = npoints * ndims * sizeof(ptdata[0]);
+        assert(alloc_size == (hsize_t)((size_t)alloc_size)); /*check for overflow*/
+        ptdata = malloc((size_t)alloc_size);
+        H5_CHECK_OVERFLOW(npoints,hssize_t,hsize_t);
+        H5Sget_select_elem_pointlist(region, (hsize_t)0, (hsize_t)npoints, ptdata);
+
+        for (i = 0; i < npoints; i++) {
+            int j;
+
+            h5tools_str_append(str, info->dset_ptformat_pre ,
+                               i ? "," OPTIONAL_LINE_BREAK " " : "",
+                               (unsigned long)i);
+
+            for (j = 0; j < ndims; j++)
+                h5tools_str_append(str, "%s%lu", j ? "," : "(",
+                                   (unsigned long)(ptdata[i * ndims + j]));
+
+            h5tools_str_append(str, ")");
+        }
+
+        free(ptdata);
+    }
+
+    h5tools_str_append(str, "}");
+    return 0;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_print_char
+ *
+ * Purpose:	Shove a character into the STR.
+ *
+ * Return:	Nothing
+ *
+ * Programmer:	Bill Wendling
+ *              Tuesday, 20. February 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+h5tools_print_char(h5tools_str_t *str, const h5dump_t *info, unsigned char ch)
+{
+    if (info->str_locale == ESCAPE_HTML) {
+        if (ch <= ' ' || ch > '~')
+            h5tools_str_append(str, "%%%02x", ch);
+        else
+            h5tools_str_append(str, "%c", (char)ch);
+    } else {
+        switch (ch) {
+        case '"':
+           if (!info->do_escape)
+            h5tools_str_append(str, "\"");
+           else
+            h5tools_str_append(str, "\\\"");
+            break;
+        case '\\':
+          if (!info->do_escape)
+            h5tools_str_append(str, "\\");
+          else
+            h5tools_str_append(str, "\\\\");
+            break;
+        case '\b':
+           if (!info->do_escape)
+            h5tools_str_append(str, "\b");
+           else
+            h5tools_str_append(str, "\\b");
+            break;
+        case '\f':
+           if (!info->do_escape)
+             h5tools_str_append(str, "\f");
+           else
+             h5tools_str_append(str, "\\f");
+            break;
+        case '\n':
+           if (!info->do_escape) {
+             h5tools_str_append(str, "\n");
+             h5tools_str_append(str, "           ");
+           }
+           else
+            h5tools_str_append(str, "\\n");
+         break;
+        case '\r':
+         if (!info->do_escape) {
+           h5tools_str_append(str, "\r");
+           h5tools_str_append(str, "           ");
+         }
+          else
+            h5tools_str_append(str, "\\r");
+            break;
+        case '\t':
+          if (!info->do_escape)
+           h5tools_str_append(str, "\t");
+          else
+           h5tools_str_append(str, "\\t");
+            break;
+        default:
+            if (isprint(ch))
+                h5tools_str_append(str, "%c", (char)ch);
+            else
+                h5tools_str_append(str, "\\%03o", ch);
+
+            break;
+        }
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_str_sprint
+ *
+ * Purpose:	Renders the value pointed to by VP of type TYPE into variable
+ *		length string STR.
+ *
+ * Return:	A pointer to memory containing the result or NULL on error.
+ *
+ * Programmer:	Robb Matzke
+ *              Thursday, July 23, 1998
+ *
+ * Modifications:
+ * 		Robb Matzke, 1999-04-26
+ *		Made this function safe from overflow problems by allowing it
+ *		to reallocate the output string.
+ *
+ * 		Robb Matzke, 1999-06-04
+ *		Added support for object references. The new `container'
+ *		argument is the dataset where the reference came from.
+ *
+ * 		Robb Matzke, 1999-06-07
+ *		Added support for printing raw data. If info->raw is non-zero
+ *		then data is printed in hexadecimal format.
+ *
+ *              Robb Matzke, 2003-01-10
+ *              Binary output format is dd:dd:... instead of 0xdddd... so it
+ *              doesn't look like a hexadecimal integer, and thus users will
+ *              be less likely to complain that HDF5 didn't properly byte
+ *              swap their data during type conversion.
+ *
+ *              Robb Matzke, LLNL, 2003-06-05
+ *              If TYPE is a variable length string then the pointer to
+ *              the value to pring (VP) is a pointer to a `char*'.
+ *-------------------------------------------------------------------------
+ */
+char *
+h5tools_str_sprint(h5tools_str_t *str, const h5dump_t *info, hid_t container,
+                   hid_t type, void *vp, h5tools_context_t *ctx)
+{
+    size_t         n, offset, size=0, nelmts, start;
+    char          *name;
+    unsigned char *ucp_vp = (unsigned char *)vp;
+    char          *cp_vp = (char *)vp;
+    hid_t          memb, obj, region;
+    unsigned       nmembs;
+    int	           otype;
+    static char    fmt_llong[8], fmt_ullong[8];
+    H5T_str_t      pad;
+    H5G_stat_t     sb;
+
+    /*
+     * some tempvars to store the value before we append it to the string to
+     * get rid of the memory alignment problem
+     */
+    double             tempdouble;
+    float              tempfloat;
+    unsigned long_long tempullong;
+    long_long          templlong;
+    unsigned long      tempulong;
+    long               templong;
+    unsigned int       tempuint;
+    int                tempint;
+    unsigned short     tempushort;
+    short              tempshort;
+
+    /* Build default formats for long long types */
+    if (!fmt_llong[0]) {
+        sprintf(fmt_llong, "%%%sd", H5_PRINTF_LL_WIDTH);
+        sprintf(fmt_ullong, "%%%su", H5_PRINTF_LL_WIDTH);
+    }
+
+    /* Append value depending on data type */
+    start = h5tools_str_len(str);
+
+    if (info->raw) {
+        size_t i;
+        n = H5Tget_size(type);
+        if (1==n) {
+            h5tools_str_append(str, OPT(info->fmt_raw, "0x%02x"), ucp_vp[0]);
+        } else {
+            for (i = 0; i < n; i++) {
+                if (i) h5tools_str_append(str, ":");
+            h5tools_str_append(str, OPT(info->fmt_raw, "%02x"), ucp_vp[i]);
+            }
+        }
+    } else if (H5Tequal(type, H5T_NATIVE_FLOAT)) {
+        memcpy(&tempfloat, vp, sizeof(float));
+        h5tools_str_append(str, OPT(info->fmt_float, "%g"), tempfloat);
+    } else if (H5Tequal(type, H5T_NATIVE_DOUBLE)) {
+        memcpy(&tempdouble, vp, sizeof(double));
+        h5tools_str_append(str, OPT(info->fmt_double, "%g"), tempdouble);
+    } else if (info->ascii && (H5Tequal(type, H5T_NATIVE_SCHAR) ||
+                               H5Tequal(type, H5T_NATIVE_UCHAR))) {
+        h5tools_print_char(str, info, (unsigned char)(*ucp_vp));
+    } else if (H5T_STRING == H5Tget_class(type)) {
+        unsigned int i;
+        char quote = '\0';
+        char *s;
+
+        quote = '\0';
+        if(H5Tis_variable_str(type)) {
+            /* cp_vp is the pointer into the struct where a `char*' is stored. So we have
+             * to dereference the pointer to get the `char*' to pass to HDstrlen(). */
+            s = *(char**)cp_vp;
+            if(s!=NULL)
+                size = HDstrlen(s);
+        } else {
+            s = cp_vp;
+            size = H5Tget_size(type);
+        }
+        pad = H5Tget_strpad(type);
+
+        /* Check for NULL pointer for string */
+        if(s==NULL) {
+            h5tools_str_append(str, "NULL");
+        }
+        else {
+            for (i=0; i<size && (s[i] || pad!=H5T_STR_NULLTERM); i++) {
+                int j = 1;
+
+                /*
+                 * Count how many times the next character repeats. If the
+                 * threshold is zero then that means it can repeat any number
+                 * of times.
+                 */
+                if (info->str_repeat > 0)
+                    while (i + j < size && s[i] == s[i + j])
+                        j++;
+
+                /*
+                 * Print the opening quote.  If the repeat count is high enough to
+                 * warrant printing the number of repeats instead of enumerating
+                 * the characters, then make sure the character to be repeated is
+                 * in it's own quote.
+                 */
+                if (info->str_repeat > 0 && j > info->str_repeat) {
+                    if (quote)
+                        h5tools_str_append(str, "%c", quote);
+
+                    quote = '\'';
+                    h5tools_str_append(str, "%s%c", i ? " " : "", quote);
+                } else if (!quote) {
+                    quote = '"';
+                    h5tools_str_append(str, "%s%c", i ? " " : "", quote);
+                }
+
+                /* Print the character */
+                h5tools_print_char(str, info, (unsigned char)(s[i]));
+
+                /* Print the repeat count */
+                if (info->str_repeat && j > info->str_repeat) {
+#ifdef REPEAT_VERBOSE
+                    h5tools_str_append(str, "%c repeats %d times", quote, j - 1);
+#else
+                    h5tools_str_append(str, "%c*%d", quote, j - 1);
+#endif  /* REPEAT_VERBOSE */
+                    quote = '\0';
+                    i += j - 1;
+                }
+
+            }
+
+            if (quote)
+                h5tools_str_append(str, "%c", quote);
+
+            if (i == 0)
+                /*empty string*/
+                h5tools_str_append(str, "\"\"");
+        } /* end else */
+    } else if (H5Tequal(type, H5T_NATIVE_INT)) {
+        memcpy(&tempint, vp, sizeof(int));
+        h5tools_str_append(str, OPT(info->fmt_int, "%d"), tempint);
+    } else if (H5Tequal(type, H5T_NATIVE_UINT)) {
+        memcpy(&tempuint, vp, sizeof(unsigned int));
+        h5tools_str_append(str, OPT(info->fmt_uint, "%u"), tempuint);
+    } else if (H5Tequal(type, H5T_NATIVE_SCHAR)) {
+        h5tools_str_append(str, OPT(info->fmt_schar, "%d"), *cp_vp);
+    } else if (H5Tequal(type, H5T_NATIVE_UCHAR)) {
+        h5tools_str_append(str, OPT(info->fmt_uchar, "%u"), *ucp_vp);
+    } else if (H5Tequal(type, H5T_NATIVE_SHORT)) {
+        memcpy(&tempshort, vp, sizeof(short));
+        h5tools_str_append(str, OPT(info->fmt_short, "%d"), tempshort);
+    } else if (H5Tequal(type, H5T_NATIVE_USHORT)) {
+        memcpy(&tempushort, vp, sizeof(unsigned short));
+        h5tools_str_append(str, OPT(info->fmt_ushort, "%u"), tempushort);
+    } else if (H5Tequal(type, H5T_NATIVE_LONG)) {
+        memcpy(&templong, vp, sizeof(long));
+        h5tools_str_append(str, OPT(info->fmt_long, "%ld"), templong);
+    } else if (H5Tequal(type, H5T_NATIVE_ULONG)) {
+        memcpy(&tempulong, vp, sizeof(unsigned long));
+        h5tools_str_append(str, OPT(info->fmt_ulong, "%lu"), tempulong);
+    } else if (H5Tequal(type, H5T_NATIVE_LLONG)) {
+        memcpy(&templlong, vp, sizeof(long_long));
+        h5tools_str_append(str, OPT(info->fmt_llong, fmt_llong), templlong);
+    } else if (H5Tequal(type, H5T_NATIVE_ULLONG)) {
+        memcpy(&tempullong, vp, sizeof(unsigned long_long));
+        h5tools_str_append(str, OPT(info->fmt_ullong, fmt_ullong), tempullong);
+    } else if (H5Tequal(type, H5T_NATIVE_HSSIZE)) {
+        if (sizeof(hssize_t) == sizeof(int)) {
+            memcpy(&tempint, vp, sizeof(int));
+            h5tools_str_append(str, OPT(info->fmt_int, "%d"), tempint);
+        } else if (sizeof(hssize_t) == sizeof(long)) {
+            memcpy(&templong, vp, sizeof(long));
+            h5tools_str_append(str, OPT(info->fmt_long, "%ld"), templong);
+        } else {
+            memcpy(&templlong, vp, sizeof(long_long));
+            h5tools_str_append(str, OPT(info->fmt_llong, fmt_llong), templlong);
+        }
+    } else if (H5Tequal(type, H5T_NATIVE_HSIZE)) {
+        if (sizeof(hsize_t) == sizeof(int)) {
+            memcpy(&tempuint, vp, sizeof(unsigned int));
+            h5tools_str_append(str, OPT(info->fmt_uint, "%u"), tempuint);
+        } else if (sizeof(hsize_t) == sizeof(long)) {
+            memcpy(&tempulong, vp, sizeof(long));
+            h5tools_str_append(str, OPT(info->fmt_ulong, "%lu"), tempulong);
+        } else {
+            memcpy(&tempullong, vp, sizeof(unsigned long_long));
+            h5tools_str_append(str, OPT(info->fmt_ullong, fmt_ullong), tempullong);
+        }
+    } else if (H5Tget_class(type) == H5T_COMPOUND) {
+        unsigned j;
+
+        nmembs = H5Tget_nmembers(type);
+        h5tools_str_append(str, "%s", OPT(info->cmpd_pre, "{"));
+
+        for (j = 0; j < nmembs; j++) {
+            if (j)
+                h5tools_str_append(str, "%s", OPT(info->cmpd_sep, ", " OPTIONAL_LINE_BREAK));
+
+            /* RPM 2000-10-31
+             * If the previous character is a line-feed (which is true when
+             * h5dump is running) then insert some white space for
+             * indentation. Be warned that column number calculations will be
+             * incorrect and that object indices at the beginning of the line
+             * will be missing (h5dump doesn't display them anyway).  */
+            if (ctx->indent_level >= 0 && str->len && str->s[str->len - 1] == '\n') {
+                int x;
+
+                h5tools_str_append(str, OPT(info->line_pre, ""), "");
+
+                for (x = 0; x < ctx->indent_level + 1; x++)
+                    h5tools_str_append(str, "%s", OPT(info->line_indent, ""));
+            }
+
+            /* The name */
+            name = H5Tget_member_name(type, j);
+            h5tools_str_append(str, OPT(info->cmpd_name, ""), name);
+            free(name);
+
+            /* The value */
+            offset = H5Tget_member_offset(type, j);
+            memb = H5Tget_member_type(type, j);
+
+            ctx->indent_level++;
+            h5tools_str_sprint(str, info, container, memb, cp_vp + offset , ctx);
+            ctx->indent_level--;
+
+            H5Tclose(memb);
+        }
+
+        /* RPM 2000-10-31
+         * If the previous character is a line feed (which is true when
+         * h5dump is running) then insert some white space for indentation.
+         * Be warned that column number calculations will be incorrect and
+         * that object indices at the beginning of the line will be missing
+         * (h5dump doesn't display them anyway). */
+        h5tools_str_append(str, "%s", OPT(info->cmpd_end, ""));
+
+        if (ctx->indent_level >= 0 && str->len && str->s[str->len - 1] == '\n') {
+            int x;
+
+            h5tools_str_append(str, OPT(info->line_pre, ""), "");
+
+            for (x = 0; x < ctx->indent_level; x++)
+                h5tools_str_append(str, "%s", OPT(info->line_indent, ""));
+        }
+
+        h5tools_str_append(str, "%s", OPT(info->cmpd_suf, "}"));
+    } else if (H5Tget_class(type) == H5T_ENUM) {
+        char enum_name[1024];
+
+        if (H5Tenum_nameof(type, vp, enum_name, sizeof enum_name) >= 0) {
+            h5tools_str_append(str, h5tools_escape(enum_name, sizeof(enum_name)));
+        } else {
+            size_t i;
+            n = H5Tget_size(type);
+            if (1==n) {
+                h5tools_str_append(str, "0x%02x", ucp_vp[0]);
+            } else {
+            for (i = 0; i < n; i++)
+                    h5tools_str_append(str, "%s%02x", i?":":"", ucp_vp[i]);
+            }
+        }
+    } else if (H5Tequal(type, H5T_STD_REF_DSETREG)) {
+        /*
+         * Dataset region reference -- show the type and OID of the referenced
+         * object, but we are unable to show the region yet because there
+         * isn't enough support in the data space layer.  - rpm 19990604
+         */
+        if (h5tools_is_zero(vp, H5Tget_size(type))) {
+            h5tools_str_append(str, "NULL");
+        } else {
+            obj = H5Rdereference(container, H5R_DATASET_REGION, vp);
+            region = H5Rget_region(container, H5R_DATASET_REGION, vp);
+            H5Gget_objinfo(obj, ".", FALSE, &sb);
+
+            if (info->dset_hidefileno)
+                h5tools_str_append(str, info->dset_format, sb.objno[1], sb.objno[0]);
+            else
+                h5tools_str_append(str, info->dset_format,
+                      sb.fileno[1], sb.fileno[0], sb.objno[1], sb.objno[0]);
+
+            h5tools_str_dump_region(str, region, info);
+            H5Sclose(region);
+            H5Dclose(obj);
+        }
+    } else if (H5Tequal(type, H5T_STD_REF_OBJ)) {
+        /*
+         * Object references -- show the type and OID of the referenced
+         * object.
+         */
+        if (h5tools_is_zero(vp, H5Tget_size(type))) {
+            h5tools_str_append(str, "NULL");
+        } else {
+            const char *path;
+            otype = H5Rget_obj_type(container, H5R_OBJECT, vp);
+            obj = H5Rdereference(container, H5R_OBJECT, vp);
+            H5Gget_objinfo(obj, ".", FALSE, &sb);
+
+            /* Print object type and close object */
+            switch (otype) {
+                case H5G_GROUP:
+                    h5tools_str_append(str, GROUPNAME);
+                    H5Gclose(obj);
+                    break;
+                case H5G_DATASET:
+                    h5tools_str_append(str, DATASET);
+                    H5Dclose(obj);
+                    break;
+                case H5G_TYPE:
+                    h5tools_str_append(str, DATATYPE);
+                    H5Tclose(obj);
+                    break;
+                default:
+                    h5tools_str_append(str, "%u-", otype);
+                    break;
+            }
+
+            /* Print OID */
+            if (info->obj_hidefileno)
+                h5tools_str_append(str, info->obj_format, sb.objno[1], sb.objno[0]);
+            else
+                h5tools_str_append(str, info->obj_format,
+                          sb.fileno[1], sb.fileno[0], sb.objno[1], sb.objno[0]);
+
+             /* Print name */
+            path = lookup_ref_path(*(haddr_t *)vp);
+            if (path) {
+             h5tools_str_append(str, " ");
+             h5tools_str_append(str, path);
+             h5tools_str_append(str, " ");
+            }
+        }
+    } else if (H5Tget_class(type) == H5T_ARRAY) {
+        int k, ndims;
+        hsize_t	i, dims[H5S_MAX_RANK],temp_nelmts;
+
+        /* Get the array's base datatype for each element */
+        memb = H5Tget_super(type);
+        size = H5Tget_size(memb);
+        ndims = H5Tget_array_ndims(type);
+        H5Tget_array_dims(type, dims, NULL);
+        assert(ndims >= 1 && ndims <= H5S_MAX_RANK);
+
+        /* Calculate the number of array elements */
+        for (k = 0, nelmts = 1; k < ndims; k++){
+			temp_nelmts = nelmts;
+			temp_nelmts *= dims[k];
+			assert(temp_nelmts==(hsize_t)((size_t)temp_nelmts));
+            nelmts = (size_t)temp_nelmts;
+		}
+        /* Print the opening bracket */
+        h5tools_str_append(str, "%s", OPT(info->arr_pre, "["));
+
+        for (i = 0; i < nelmts; i++) {
+            if (i)
+                h5tools_str_append(str, "%s",
+                          OPT(info->arr_sep, "," OPTIONAL_LINE_BREAK));
+
+            if (info->arr_linebreak && i && i % dims[ndims - 1] == 0) {
+                int x;
+
+                h5tools_str_append(str, "%s", "\n");
+
+                /*need to indent some more here*/
+                if (ctx->indent_level >= 0 )
+                {
+                 if (!info->pindex)
+                  h5tools_str_append(str, "%s", OPT(info->line_pre, ""));
+                }
+
+                for (x = 0; x < ctx->indent_level + 1; x++)
+                    h5tools_str_append(str,"%s",OPT(info->line_indent,""));
+            } /* end if */
+            else if(i && info->arr_sep)
+                h5tools_str_append(str, " ");
+
+            ctx->indent_level++;
+
+            /* Dump the array element */
+            h5tools_str_sprint(str, info, container, memb, cp_vp + i * size, ctx);
+
+            ctx->indent_level--;
+        } /* end for */
+
+        /* Print the closing bracket */
+ 	h5tools_str_append(str, "%s", OPT(info->arr_suf, "]"));
+        H5Tclose(memb);
+    } else if (H5Tget_class(type) == H5T_VLEN) {
+        unsigned int i;
+
+        /* Get the VL sequences's base datatype for each element */
+        memb = H5Tget_super(type);
+        size = H5Tget_size(memb);
+
+        /* Print the opening bracket */
+        h5tools_str_append(str, "%s", OPT(info->vlen_pre, "("));
+
+        /* Get the number of sequence elements */
+        nelmts = ((hvl_t *)cp_vp)->len;
+
+        for (i = 0; i < nelmts; i++) {
+            if (i)
+                h5tools_str_append(str, "%s",
+                          OPT(info->vlen_sep, "," OPTIONAL_LINE_BREAK));
+
+#ifdef LATER
+/* Need to fix so VL data breaks at correct location on end of line -QAK */
+            if (info->arr_linebreak && h5tools_str_len(str)>=info->line_ncols) {
+                int x;
+
+                h5tools_str_append(str, "%s", "\n");
+
+                /* need to indent some more here */
+                if (ctx->indent_level >= 0)
+                    h5tools_str_append(str, "%s", OPT(info->line_pre, ""));
+
+                for (x = 0; x < ctx->indent_level + 1; x++)
+                    h5tools_str_append(str,"%s",OPT(info->line_indent,""));
+            } /* end if */
+#endif /* LATER */
+
+            ctx->indent_level++;
+
+            /* Dump the array element */
+            h5tools_str_sprint(str, info, container, memb,
+                           ((char *)(((hvl_t *)cp_vp)->p)) + i * size, ctx);
+
+            ctx->indent_level--;
+        } /* end for */
+
+        h5tools_str_append(str, "%s", OPT(info->vlen_suf, ")"));
+        H5Tclose(memb);
+    } else {
+        /* All other types get printed as hexadecimal */
+        size_t i;
+        n = H5Tget_size(type);
+        if (1==n) {
+            h5tools_str_append(str, "0x%02x", ucp_vp[0]);
+        } else {
+            for (i = 0; i < n; i++)
+                h5tools_str_append(str, "%s%02x", i?":":"", ucp_vp[i]);
+        }
+    }
+
+    return h5tools_str_fmt(str, start, OPT(info->elmt_fmt, "%s"));
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_escape
+ *
+ * Purpose:	Changes all "funny" characters in S into standard C escape
+ *		sequences.
+ *
+ * Return:	Success:	S
+ *
+ *		Failure:	NULL if the buffer would overflow. The
+ *				buffer has as many left-to-right escapes as
+ *				possible before overflow would have happened.
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, April 26, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static char *
+h5tools_escape(char *s/*in,out*/, size_t size)
+{
+    register size_t i;
+    size_t n = strlen(s);
+    const char *escape;
+    char octal[8];
+
+    for (i = 0; i < n; i++) {
+	switch (s[i]) {
+	case '\'':
+	    escape = "\\\'";
+	    break;
+	case '\"':
+	    escape = "\\\"";
+	    break;
+	case '\\':
+	    escape = "\\\\";
+	    break;
+	case '\?':
+	    escape = "\\\?";
+	    break;
+	case '\a':
+	    escape = "\\a";
+	    break;
+	case '\b':
+	    escape = "\\b";
+	    break;
+	case '\f':
+	    escape = "\\f";
+	    break;
+	case '\n':
+	    escape = "\\n";
+	    break;
+	case '\r':
+	    escape = "\\r";
+	    break;
+	case '\t':
+	    escape = "\\t";
+	    break;
+	case '\v':
+	    escape = "\\v";
+	    break;
+	default:
+	    if (!isprint(s[i])) {
+		sprintf(octal, "\\%03o", (unsigned char)s[i]);
+		escape = octal;
+	    } else {
+		escape = NULL;
+	    }
+
+	    break;
+	}
+
+	if (escape) {
+	    size_t esc_size = strlen(escape);
+
+	    if (n + esc_size + 1 > size)
+		/*would overflow*/
+		return NULL;
+
+	    memmove(s + i + esc_size, s + i + 1, n - i); /*make room*/
+	    memcpy(s + i, escape, esc_size); /*insert*/
+	    n += esc_size - 1;  /* adjust total string size */
+	    i += esc_size;      /* adjust string position */
+	}
+    }
+
+    return s;
+}
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_is_zero
+ *
+ * Purpose:	Determines if memory is initialized to all zero bytes.
+ *
+ * Return:	TRUE if all bytes are zero; FALSE otherwise
+ *
+ * Programmer:	Robb Matzke
+ *              Monday, June  7, 1999
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static hbool_t
+h5tools_is_zero(const void *_mem, size_t size)
+{
+    const unsigned char *mem = (const unsigned char *)_mem;
+
+    while (size-- > 0)
+	if (mem[size])
+	    return FALSE;
+
+    return TRUE;
+}

Added: packages/hdf5/branches/upstream/current/tools/lib/h5tools_str.h
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5tools_str.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5tools_str.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,43 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Bill Wendling <wendling at ncsa.uiuc.edu>
+ *              Monday, 19. February 2001
+ */
+#ifndef H5TOOLS_STR_H__
+#define H5TOOLS_STR_H__
+
+typedef struct h5tools_str_t {
+    char	*s;		/*allocate string		*/
+    size_t	len;		/*length of actual value	*/
+    size_t	nalloc;		/*allocated size of string	*/
+} h5tools_str_t;
+
+extern void     h5tools_str_close(h5tools_str_t *str);
+extern size_t   h5tools_str_len(h5tools_str_t *str);
+extern char    *h5tools_str_append(h5tools_str_t *str, const char *fmt, ...);
+extern char    *h5tools_str_reset(h5tools_str_t *str);
+extern char    *h5tools_str_trunc(h5tools_str_t *str, size_t size);
+extern char    *h5tools_str_fmt(h5tools_str_t *str, size_t start, const char *fmt);
+extern char    *h5tools_str_prefix(h5tools_str_t *str, const h5dump_t *info,
+                                   hsize_t elmtno, int ndims, hsize_t min_idx[],
+                                   hsize_t max_idx[],h5tools_context_t *ctx);
+extern int      h5tools_str_dump_region(h5tools_str_t *, hid_t, const h5dump_t *);
+extern void     h5tools_print_char(h5tools_str_t *str, const h5dump_t *info, unsigned char ch);
+extern char    *h5tools_str_sprint(h5tools_str_t *str, const h5dump_t *info,
+                                   hid_t container, hid_t type, void *vp,
+                                   h5tools_context_t *ctx);
+
+#endif  /* H5TOOLS_STR_H__ */

Added: packages/hdf5/branches/upstream/current/tools/lib/h5tools_type.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5tools_type.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5tools_type.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,48 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#include "h5tools.h"
+
+/*-------------------------------------------------------------------------
+ * Function:	h5tools_get_native_type
+ *
+ * Purpose:	Wrapper around H5Tget_native_type() to work around
+ *		Problems with bitfields.
+ *
+ * Return:	Success:    datatype ID
+ *
+ *		Failure:    FAIL
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, October  5, 2004
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+h5tools_get_native_type(hid_t type)
+{
+    hid_t p_type;
+    H5T_class_t type_class;
+
+    type_class = H5Tget_class(type);
+    if(type_class==H5T_BITFIELD)
+        p_type=H5Tcopy(type);
+    else
+        p_type = H5Tget_native_type(type,H5T_DIR_DEFAULT);
+
+    return(p_type);
+}
+

Added: packages/hdf5/branches/upstream/current/tools/lib/h5tools_utils.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5tools_utils.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5tools_utils.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,637 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Bill Wendling <wendling at ncsa.uiuc.edu>
+ *              Tuesday, 6. March 2001
+ */
+
+/*
+ * Portions of this work are derived from _Obfuscated C and Other Mysteries_,
+ * by Don Libes, copyright (c) 1993 by John Wiley & Sons, Inc.
+ */
+
+#include <ctype.h>
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "h5tools_utils.h"
+#include "H5private.h"
+
+/* global variables */
+int   nCols = 80;
+
+/* ``get_option'' variables */
+int         opt_err = 1;    /*get_option prints errors if this is on */
+int         opt_ind = 1;    /*token pointer                          */
+const char *opt_arg;        /*flag argument (or value)               */
+
+/* local functions */
+static void init_table(table_t **tbl);
+#ifdef H5DUMP_DEBUG
+static void dump_table(char* tablename, table_t *table);
+#endif  /* H5DUMP_DEBUG */
+static void add_obj(table_t *table, unsigned long *objno, char *objname, hbool_t recorded);
+static char * build_obj_path_name(const char *prefix, const char *name);
+static herr_t find_objs_cb(hid_t group, const char *name, void *op_data);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	error_msg
+ *
+ * Purpose:	Print a nicely formatted error message to stderr flushing the
+ *              stdout stream first.
+ *
+ * Return:	Nothing
+ *
+ * Programmer:	Bill Wendling
+ *              Tuesday, 20. February 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+error_msg(const char *progname, const char *fmt, ...)
+{
+    va_list ap;
+
+    va_start(ap, fmt);
+    HDfflush(stdout);
+    HDfprintf(stderr, "%s error: ", progname);
+    HDvfprintf(stderr, fmt, ap);
+
+    va_end(ap);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	warn_msg
+ *
+ * Purpose:	Print a nicely formatted warning message to stderr flushing
+ *              the stdout stream first.
+ *
+ * Return:	Nothing
+ *
+ * Programmer:	Bill Wendling
+ *              Tuesday, 20. February 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+warn_msg(const char *progname, const char *fmt, ...)
+{
+    va_list ap;
+
+    va_start(ap, fmt);
+    HDfflush(stdout);
+#ifdef WIN32
+    HDfprintf(stdout, "%s warning: ", progname);
+    HDvfprintf(stdout, fmt, ap);
+#else /* WIN32 */
+    HDfprintf(stderr, "%s warning: ", progname);
+    HDvfprintf(stderr, fmt, ap);
+#endif /* WIN32 */
+    va_end(ap);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	get_option
+ *
+ * Purpose:	Determine the command-line options a user specified. We can
+ *		accept both short and long type command-lines.
+ *
+ * Return:	Success:	The short valued "name" of the command line
+ * 				parameter or EOF if there are no more
+ * 				parameters to process.
+ *
+ *		Failure:	A question mark.
+ *
+ * Programmer:	Bill Wendling
+ *              Friday, 5. January 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+get_option(int argc, const char **argv, const char *opts, const struct long_options *l_opts)
+{
+    static int sp = 1;    /* character index in current token */
+    int opt_opt = '?';    /* option character passed back to user */
+
+    if (sp == 1) {
+        /* check for more flag-like tokens */
+        if (opt_ind >= argc || argv[opt_ind][0] != '-' || argv[opt_ind][1] == '\0') {
+            return EOF;
+        } else if (HDstrcmp(argv[opt_ind], "--") == 0) {
+            opt_ind++;
+            return EOF;
+        }
+    }
+
+    if (sp == 1 && argv[opt_ind][0] == '-' && argv[opt_ind][1] == '-') {
+        /* long command line option */
+        const char *arg = &argv[opt_ind][2];
+        int i;
+
+        for (i = 0; l_opts && l_opts[i].name; i++) {
+            size_t len = HDstrlen(l_opts[i].name);
+
+            if (HDstrncmp(arg, l_opts[i].name, len) == 0) {
+                /* we've found a matching long command line flag */
+                opt_opt = l_opts[i].shortval;
+
+                if (l_opts[i].has_arg != no_arg) {
+                    if (arg[len] == '=') {
+                        opt_arg = &arg[len + 1];
+                    } else if (opt_ind < (argc - 1) && argv[opt_ind + 1][0] != '-') {
+                        opt_arg = argv[++opt_ind];
+                    } else if (l_opts[i].has_arg == require_arg) {
+                        if (opt_err)
+                            HDfprintf(stderr,
+                                    "%s: option required for \"--%s\" flag\n",
+                                    argv[0], arg);
+
+                        opt_opt = '?';
+                    }
+                } else {
+                    if (arg[len] == '=') {
+                        if (opt_err)
+                            HDfprintf(stderr,
+                                    "%s: no option required for \"%s\" flag\n",
+                                    argv[0], arg);
+
+                        opt_opt = '?';
+                    }
+
+                    opt_arg = NULL;
+                }
+
+                break;
+            }
+        }
+
+        if (l_opts[i].name == NULL) {
+            /* exhausted all of the l_opts we have and still didn't match */
+            if (opt_err)
+                HDfprintf(stderr, "%s: unknown option \"%s\"\n", argv[0], arg);
+
+            opt_opt = '?';
+        }
+
+        opt_ind++;
+        sp = 1;
+    } else {
+        register char *cp;    /* pointer into current token */
+
+        /* short command line option */
+        opt_opt = argv[opt_ind][sp];
+
+        if (opt_opt == ':' || (cp = strchr(opts, opt_opt)) == 0) {
+            if (opt_err)
+                HDfprintf(stderr, "%s: unknown option \"%c\"\n",
+                        argv[0], opt_opt);
+
+            /* if no chars left in this token, move to next token */
+            if (argv[opt_ind][++sp] == '\0') {
+                opt_ind++;
+                sp = 1;
+            }
+
+            return '?';
+        }
+
+        if (*++cp == ':') {
+            /* if a value is expected, get it */
+            if (argv[opt_ind][sp + 1] != '\0') {
+                /* flag value is rest of current token */
+                opt_arg = &argv[opt_ind++][sp + 1];
+            } else if (++opt_ind >= argc) {
+                if (opt_err)
+                    HDfprintf(stderr,
+                            "%s: value expected for option \"%c\"\n",
+                            argv[0], opt_opt);
+
+                opt_opt = '?';
+            } else {
+                /* flag value is next token */
+                opt_arg = argv[opt_ind++];
+            }
+
+            sp = 1;
+        } else {
+            /* set up to look at next char in token, next time */
+            if (argv[opt_ind][++sp] == '\0') {
+                /* no more in current token, so setup next token */
+                opt_ind++;
+                sp = 1;
+            }
+
+            opt_arg = NULL;
+        }
+    }
+
+    /* return the current flag character found */
+    return opt_opt;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    indentation
+ *
+ * Purpose:     Print spaces for indentation
+ *
+ * Return:      void
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+indentation(int x)
+{
+    if (x < nCols) {
+        while (x-- > 0)
+            printf(" ");
+    } else {
+        HDfprintf(stderr, "error: the indentation exceeds the number of cols.\n");
+        exit(1);
+    }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    print_version
+ *
+ * Purpose:     Print the program name and the version information which is
+ *		defined the same as the HDF5 library version.
+ *
+ * Return:      void
+ *
+ * Programmer:  unknown
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+print_version(const char *progname)
+{
+    printf("%s: Version %u.%u.%u%s%s\n",
+           progname, H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE,
+           H5_VERS_SUBRELEASE[0] ? "-" : "", H5_VERS_SUBRELEASE);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    init_table
+ *
+ * Purpose:     allocate and initialize tables for shared groups, datasets,
+ *              and committed types
+ *
+ * Return:      void
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+init_table(table_t **tbl)
+{
+    table_t *table = HDmalloc(sizeof(table_t));
+
+    table->size = 20;
+    table->nobjs = 0;
+    table->objs = HDmalloc(table->size * sizeof(obj_t));
+
+    *tbl = table;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    free_table
+ *
+ * Purpose:     free tables for shared groups, datasets,
+ *              and committed types
+ *
+ * Return:      void
+ *
+ * Programmer:  Paul Harten
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+free_table(table_t *table)
+{
+    unsigned u;         /* Local index value */
+
+    /* Free the names for the objects in the table */
+    for(u = 0; u < table->nobjs; u++)
+        if(table->objs[u].objname)
+            HDfree(table->objs[u].objname);
+
+    HDfree(table->objs);
+}
+
+#ifdef H5DUMP_DEBUG
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_table
+ *
+ * Purpose:     display the contents of tables for debugging purposes
+ *
+ * Return:      void
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+dump_table(char* tablename, table_t *table)
+{
+    unsigned u;
+
+    printf("%s: # of entries = %d\n", tablename,table->nobjs);
+    for (u = 0; u < table->nobjs; u++)
+	HDfprintf(stdout,"%a %s %d %d\n", table->objs[u].objno,
+	       table->objs[u].objname,
+	       table->objs[u].displayed, table->objs[u].recorded);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    dump_tables
+ *
+ * Purpose:     display the contents of tables for debugging purposes
+ *
+ * Return:      void
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+dump_tables(find_objs_t *info)
+{
+    dump_table("group_table", info->group_table);
+    dump_table("dset_table", info->dset_table);
+    dump_table("type_table", info->type_table);
+}
+#endif  /* H5DUMP_DEBUG */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    search_obj
+ *
+ * Purpose:     search the object specified by objno in the table
+ *
+ * Return:      Success:    an integer, the location of the object
+ *
+ *              Failure:    FAIL   if object is not found
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+obj_t *
+search_obj(table_t *table, unsigned long *_objno)
+{
+    haddr_t objno = ((haddr_t)_objno[1] << (8*sizeof(long))) | (haddr_t)_objno[0];
+    unsigned u;
+
+    for (u = 0; u < table->nobjs; u++)
+        if (table->objs[u].objno == objno)
+	    return &(table->objs[u]);
+
+    return NULL;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    build_obj_path_name
+ *
+ * Purpose:     Allocate space & build path name from prefix & name
+ *
+ * Return:      Success:    SUCCEED
+ *
+ *              Failure:    FAIL
+ *
+ * Programmer:  Quincey Koziol
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static char *
+build_obj_path_name(const char *prefix, const char *name)
+{
+    char *path;
+
+    path = HDmalloc(HDstrlen(prefix) + HDstrlen(name) + 2);
+    HDstrcpy(path, prefix);
+    HDstrcat(path,"/");
+    HDstrcat(path,name); /* absolute name of the data set */
+
+    return(path);
+} /* end build_obj_path_name() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    find_objs_cb
+ *
+ * Purpose:     Callback to find objects, committed types and store them in tables
+ *
+ * Return:      Success:    SUCCEED
+ *
+ *              Failure:    FAIL
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+find_objs_cb(hid_t group, const char *name, void *op_data)
+{
+    H5G_stat_t statbuf;
+    find_objs_t *info = (find_objs_t*)op_data;
+    herr_t ret_value = 0;
+
+    H5Gget_objinfo(group, name, TRUE, &statbuf);
+
+    switch (statbuf.type) {
+        char *tmp;
+
+        case H5G_GROUP:
+            if (search_obj(info->group_table, statbuf.objno) == NULL) {
+                char *old_prefix;
+
+                tmp = build_obj_path_name(info->prefix, name);
+                add_obj(info->group_table, statbuf.objno, tmp, TRUE);
+
+                old_prefix = info->prefix;
+                info->prefix = tmp;
+
+                if(H5Giterate(group, name, NULL, find_objs_cb, (void *)info) < 0)
+                    ret_value = FAIL;
+
+                info->prefix = old_prefix;
+            } /* end if */
+            break;
+
+        case H5G_DATASET:
+            if (search_obj(info->dset_table, statbuf.objno) == NULL) {
+                hid_t dset;
+
+                tmp = build_obj_path_name(info->prefix, name);
+                add_obj(info->dset_table, statbuf.objno, tmp, TRUE);
+
+                if ((dset = H5Dopen (group, name)) >= 0) {
+                    hid_t type;
+
+                    type = H5Dget_type(dset);
+
+                    if (H5Tcommitted(type) > 0) {
+                        H5Gget_objinfo(type, ".", TRUE, &statbuf);
+
+                        if (search_obj(info->type_table, statbuf.objno) == NULL) {
+                            char *type_name = HDstrdup(tmp);
+
+                            add_obj(info->type_table, statbuf.objno, type_name, FALSE);
+                        } /* end if */
+                    }
+
+                    H5Tclose(type);
+                    H5Dclose(dset);
+                } else {
+                    ret_value = FAIL;
+                }
+            } /* end if */
+            break;
+
+        case H5G_TYPE:
+        {
+            obj_t *found_obj;
+
+            tmp = build_obj_path_name(info->prefix, name);
+            if ((found_obj = search_obj(info->type_table, statbuf.objno)) == NULL)
+                add_obj(info->type_table, statbuf.objno, tmp, TRUE);
+            else {
+                /* Use latest version of name */
+                HDfree(found_obj->objname);
+                found_obj->objname = HDstrdup(tmp);
+
+                /* Mark named datatype as having valid name */
+                found_obj->recorded = TRUE;
+            } /* end else */
+            break;
+        }
+
+        default:
+            /* Ignore links, etc. */
+            break;
+    }
+
+    return ret_value;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    init_objs
+ *
+ * Purpose:     Initialize tables for groups, datasets & named datatypes
+ *
+ * Return:      Success:    SUCCEED
+ *
+ *              Failure:    FAIL
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+init_objs(hid_t fid, find_objs_t *info, table_t **group_table,
+    table_t **dset_table, table_t **type_table)
+{
+    /* Initialize the tables */
+    init_table(group_table);
+    init_table(dset_table);
+    init_table(type_table);
+
+    /* Init the find_objs_t */
+    info->prefix = "";
+    info->group_table = *group_table;
+    info->type_table = *type_table;
+    info->dset_table = *dset_table;
+
+    /* Find all shared objects */
+    return(H5Giterate(fid, "/", NULL, find_objs_cb, (void *)info));
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    add_obj
+ *
+ * Purpose:     add a shared object to the table
+ *              realloc the table if necessary
+ *
+ * Return:      void
+ *
+ * Programmer:  Ruey-Hsia Li
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+add_obj(table_t *table, unsigned long *_objno, char *objname, hbool_t record)
+{
+    haddr_t objno = ((haddr_t)_objno[1] << (8*sizeof(long))) | (haddr_t)_objno[0];
+    unsigned u;
+
+    /* See if we need to make table larger */
+    if (table->nobjs == table->size) {
+        table->size *= 2;
+        table->objs = HDrealloc(table->objs, table->size * sizeof(obj_t));
+    }
+
+    /* Increment number of objects in table */
+    u = table->nobjs++;
+
+    /* Set information about object */
+    table->objs[u].objno = objno;
+    table->objs[u].objname = objname;
+    table->objs[u].recorded = record;
+    table->objs[u].displayed = 0;
+}

Added: packages/hdf5/branches/upstream/current/tools/lib/h5tools_utils.h
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5tools_utils.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5tools_utils.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,118 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Bill Wendling <wendling at ncsa.uiuc.edu>
+ *              Tuesday, 6. March 2001
+ *
+ * Purpose:     Support functions for the various tools.
+ */
+#ifndef H5TOOLS_UTILS_H__
+#define H5TOOLS_UTILS_H__
+
+#include "hdf5.h"
+
+/*
+ * begin get_option section
+ */
+extern int         opt_err;     /* getoption prints errors if this is on    */
+extern int         opt_ind;     /* token pointer                            */
+extern const char *opt_arg;     /* flag argument (or value)                 */
+
+enum {
+    no_arg = 0,         /* doesn't take an argument     */
+    require_arg,        /* requires an argument	        */
+    optional_arg        /* argument is optional         */
+};
+
+/*
+ * get_option determines which options are specified on the command line and
+ * returns a pointer to any arguments possibly associated with the option in
+ * the ``opt_arg'' variable. get_option returns the shortname equivalent of
+ * the option. The long options are specified in the following way:
+ *
+ * struct long_options foo[] = {
+ * 	{ "filename", require_arg, 'f' },
+ * 	{ "append", no_arg, 'a' },
+ * 	{ "width", require_arg, 'w' },
+ * 	{ NULL, 0, 0 }
+ * };
+ *
+ * Long named options can have arguments specified as either:
+ *
+ * 	``--param=arg'' or ``--param arg''
+ *
+ * Short named options can have arguments specified as either:
+ *
+ * 	``-w80'' or ``-w 80''
+ *
+ * and can have more than one short named option specified at one time:
+ *
+ * 	-aw80
+ *
+ * in which case those options which expect an argument need to come at the
+ * end.
+ */
+typedef struct long_options {
+    const char  *name;          /* name of the long option              */
+    int          has_arg;       /* whether we should look for an arg    */
+    char         shortval;      /* the shortname equivalent of long arg
+                                 * this gets returned from get_option   */
+} long_options;
+
+extern int    get_option(int argc, const char **argv, const char *opt,
+                         const struct long_options *l_opt);
+/*
+ * end get_option section
+ */
+
+/*struct taken from the dumper. needed in table struct*/
+typedef struct obj_t {
+    haddr_t objno;
+    char *objname;
+    hbool_t displayed;          /* Flag to indicate that the object has been displayed */
+    hbool_t recorded;           /* Flag for named datatypes to indicate they were found in the group hierarchy */
+} obj_t;
+
+/*struct for the tables that the find_objs function uses*/
+typedef struct table_t {
+    size_t size;
+    size_t nobjs;
+    obj_t *objs;
+} table_t;
+
+/*this struct stores the information that is passed to the find_objs function*/
+typedef struct find_objs_t {
+    char *prefix;
+    table_t *group_table;
+    table_t *type_table;
+    table_t *dset_table;
+} find_objs_t;
+
+extern int     nCols;               /*max number of columns for outputting  */
+
+/* Definitions of useful routines */
+extern void     indentation(int);
+extern void     print_version(const char *progname);
+extern void     error_msg(const char *progname, const char *fmt, ...);
+extern void     warn_msg(const char *progname, const char *fmt, ...);
+extern void     free_table(table_t *table);
+#ifdef H5DUMP_DEBUG
+extern void     dump_tables(find_objs_t *info)
+#endif  /* H5DUMP_DEBUG */
+extern herr_t init_objs(hid_t fid, find_objs_t *info, table_t **group_table,
+    table_t **dset_table, table_t **type_table);
+extern obj_t   *search_obj(table_t *temp, unsigned long *objno);
+
+#endif	/* H5TOOLS_UTILS_H__ */

Added: packages/hdf5/branches/upstream/current/tools/lib/h5trav.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5trav.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5trav.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,681 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#include "h5trav.h"
+#include "H5private.h"
+
+/* functions for traversal */
+int traverse( hid_t loc_id,
+              const char *group_name,
+              trav_table_t *table,
+              trav_info_t *info,
+              int *idx,
+              int print);
+
+herr_t get_nnames( hid_t loc_id,
+                   const char *group_name );
+
+herr_t get_name_type( hid_t loc_id,
+                      const char *group_name,
+                      int idx,
+                      char **name,
+                      H5G_obj_t1 *type );
+
+/*-------------------------------------------------------------------------
+ * Function: h5trav_getinfo
+ *
+ * Purpose: get an array of "trav_info_t" , containing the name and type of
+ *  objects in the file
+ *
+ * Return: number of object names in file
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 6, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int h5trav_getinfo(hid_t file_id,
+                   trav_info_t *info,
+                   int print )
+{
+
+ trav_table_t  *table=NULL;
+ int           nnames=0;
+
+ /* init table */
+ trav_table_init( &table );
+
+ /* iterate starting on the root group */
+ if (( nnames = traverse( file_id, "/", table, info, &nnames, print )) < 0 )
+  return -1;
+
+ /* free table */
+ trav_table_free( table );
+
+ return nnames;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: h5trav_gettable
+ *
+ * Purpose: get the trav_table_t struct
+ *
+ * Return: 0, -1 on error
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: December 17, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int h5trav_gettable(hid_t fid, trav_table_t *travt)
+{
+ int nnames=0;
+
+ /* iterate starting on the root group */
+ if (( nnames = traverse(fid,"/",travt,NULL,&nnames,0))<0)
+  return -1;
+
+ return 0;
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: h5trav_getindex
+ *
+ * Purpose: get index of OBJ in list
+ *
+ * Return: index, -1 if not found
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int h5trav_getindex( const char *obj, int nobjs, trav_info_t *info )
+{
+ char *pdest;
+ int  result;
+ int  i;
+
+ for ( i = 0; i < nobjs; i++)
+ {
+  if ( strcmp(obj,info[i].name)==0 )
+   return i;
+
+  pdest  = strstr( info[i].name, obj );
+  result = (int)(pdest - info[i].name);
+
+  /* found at position 1, meaning without '/' */
+  if( pdest != NULL && result==1 )
+   return i;
+ }
+ return -1;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: h5trav_freeinfo
+ *
+ * Purpose: free info memory
+ *
+ *-------------------------------------------------------------------------
+ */
+
+void h5trav_freeinfo( trav_info_t *info, int nobjs )
+{
+ int i;
+	if ( info )
+	{
+		for ( i = 0; i < nobjs; i++)
+		{
+			if (info[i].name)
+		 	HDfree( info[i].name );
+		}
+		HDfree(info);
+	}
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: count_names
+ *
+ * Purpose: operator function
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October 10, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static herr_t count_names( hid_t loc_id, const char *name, void *op_data)
+{
+
+ H5G_stat_t statbuf;
+
+ if (H5Gget_objinfo( loc_id, name, 0, &statbuf) < 0 )
+  return 1;
+
+ (*(int *)op_data)++;
+
+ /* Define a default zero value for return. This will cause the iterator to continue */
+ return 0;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: get_nnames
+ *
+ * Purpose:  Counts the number of names in the group GROUP_NAME
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October 10, 2002
+ *
+ * Return:
+ *     Success: The return value of the first operator that
+ *              returns non-zero, or zero if all members were
+ *              processed with no operator returning non-zero.
+ *
+ *     Failure: Negative if something goes wrong within the
+ *              library, or the negative value returned by one
+ *              of the operators.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t get_nnames( hid_t loc_id, const char *group_name )
+{
+
+ int nobjs = 0;
+
+ if ( H5Giterate( loc_id, group_name, NULL, count_names, (void *)&nobjs ) < 0 )
+  return -1;
+
+ return nobjs;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: opget_info
+ *
+ * Purpose: operator function
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October 10, 2002
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+
+static herr_t opget_info( hid_t loc_id, const char *name, void *op_data)
+{
+
+ H5G_stat_t statbuf;
+
+ if (H5Gget_objinfo( loc_id, name, 0, &statbuf) < 0 )
+  return -1;
+
+ ((trav_info_t *)op_data)->type = statbuf.type;
+ ((trav_info_t *)op_data)->name = (char *)HDstrdup(name);
+
+ /* Define 1 for return. This will cause the iterator to stop */
+ return 1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: get_name_type
+ *
+ * Purpose:
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: October 10, 2002
+ *
+ * Return:
+ *     Success: The return value of the first operator that
+ *              returns non-zero, or zero if all members were
+ *              processed with no operator returning non-zero.
+ *
+ *     Failure: Negative if something goes wrong within the
+ *              library, or the negative value returned by one
+ *              of the operators.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+herr_t get_name_type( hid_t loc_id,
+                      const char *group_name,
+                      int idx,
+                      char **name,
+                      H5G_obj_t1 *type )
+{
+
+ trav_info_t info;
+
+ if (H5Giterate( loc_id, group_name, &idx, opget_info, (void *)&info) < 0 )
+  return -1;
+
+ *name = info.name;
+ *type = info.type;
+
+ return 0;
+}
+
+/*-------------------------------------------------------------------------
+ * Function: traverse
+ *
+ * Purpose: recursive function that searches HDF5 objects in LOC_ID
+ *
+ * Return: number of objects found in LOC_ID
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 4, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int traverse( hid_t loc_id,
+              const char *group_name,
+              trav_table_t *table,
+              trav_info_t *info,
+              int *idx,
+              int print)
+{
+
+ char          *name=NULL;
+ H5G_obj_t1     type;
+ int           n_names;
+ char          *path=NULL;
+ H5G_stat_t    statbuf;
+ int           inserted_objs=0;
+ int           i, j;
+
+ /* get the number of names */
+ if (( n_names = get_nnames( loc_id, group_name )) < 0 )
+  return -1;
+
+ for ( i = 0; i < n_names; i++)
+ {
+  if (get_name_type( loc_id, group_name, i, &name, &type ) < 0 )
+   return -1;
+
+  /* allocate path buffer */
+  path = (char*) HDmalloc(strlen(group_name) + strlen(name) + 2);
+
+  /* initialize path */
+  strcpy( path, group_name );
+  if ( strcmp(group_name,"/")!=0 )
+   strcat( path, "/" );
+  strcat( path, name );
+
+  /* disable error reporting */
+  H5E_BEGIN_TRY {
+
+  /* get info */
+   H5Gget_objinfo( loc_id, path, FALSE, &statbuf);
+  } H5E_END_TRY;
+
+  /* add to array */
+  if ( info )
+  {
+   info[*idx].name = (char *)HDstrdup(path);
+   info[*idx].type = type;
+   (*idx)++;
+  }
+
+
+  switch ( type )
+  {
+
+  /*-------------------------------------------------------------------------
+   * H5G_GROUP
+   *-------------------------------------------------------------------------
+   */
+
+  case H5G_GROUP:
+
+    /* increment */
+   inserted_objs++;
+
+   /* nlink is number of hard links to object */
+   if (statbuf.nlink > 0  && trav_table_search(statbuf.objno, table ) == -1)
+   {
+    /* add object to table */
+    trav_table_add(statbuf.objno, path, H5G_GROUP, table );
+
+    /* print it */
+    if (print)
+     printf(" %-10s %s\n", "group", path  );
+
+    /* recurse with the absolute name */
+    inserted_objs += traverse( loc_id, path, table, info, idx, print );
+   }
+
+     /* search table
+       group with more than one link to it */
+   if (statbuf.nlink > 1)
+   {
+    if ((j = trav_table_search(statbuf.objno, table )) < 0 )
+     return -1;
+
+    trav_table_addlink(table,j,path);
+
+    if ( table->objs[j].displayed == 0 )
+    {
+     table->objs[j].displayed = 1;
+    }
+    else
+    {
+     /* print it */
+     if (print)
+      printf(" %-10s %s %s %s\n", "group", path, "->", table->objs[j].name  );
+    }
+
+   }
+
+   break;
+
+  /*-------------------------------------------------------------------------
+   * H5G_DATASET
+   *-------------------------------------------------------------------------
+   */
+
+  case H5G_DATASET:
+
+    /* increment */
+   inserted_objs++;
+
+   /* nlink is number of hard links to object */
+   if (statbuf.nlink > 0  && trav_table_search(statbuf.objno, table ) == -1)
+   {
+    /* add object to table */
+    trav_table_add(statbuf.objno, path, H5G_DATASET, table );
+
+    /* print it */
+    if (print)
+     printf(" %-10s %s\n", "dataset", path  );
+   }
+
+   /* search table
+       dataset with more than one link to it */
+   if (statbuf.nlink > 1)
+   {
+    if ((j = trav_table_search(statbuf.objno, table )) < 0 )
+     return -1;
+
+    trav_table_addlink(table,j,path);
+
+    if ( table->objs[j].displayed == 0 )
+    {
+     table->objs[j].displayed = 1;
+    }
+    else
+    {
+     /* print it */
+     if (print)
+      printf(" %-10s %s %s %s\n", "dataset", path, "->", table->objs[j].name  );
+    } /* displayed==1 */
+   } /* nlink>1 */
+
+
+   break;
+
+  /*-------------------------------------------------------------------------
+   * H5G_TYPE
+   *-------------------------------------------------------------------------
+   */
+
+  case H5G_TYPE:
+
+   /* increment */
+   inserted_objs++;
+
+   /* nlink is number of hard links to object */
+   if (statbuf.nlink > 0  && trav_table_search(statbuf.objno, table ) == -1)
+   {
+    /* add object to table */
+    trav_table_add(statbuf.objno, path, H5G_TYPE, table );
+
+     /* print it */
+    if (print)
+     printf(" %-10s %s\n", "datatype", path  );
+   }
+
+   break;
+
+
+  /*-------------------------------------------------------------------------
+   * H5G_LINK
+   *-------------------------------------------------------------------------
+   */
+
+  case H5G_LINK:
+   {
+    char *targbuf=NULL;
+
+    /* increment */
+    inserted_objs++;
+
+    /* add object to table */
+    trav_table_add(statbuf.objno, path, H5G_LINK, table );
+
+    if (statbuf.linklen>0)
+    {
+     targbuf=malloc(statbuf.linklen);
+     H5Gget_linkval(loc_id,path,statbuf.linklen,targbuf);
+     if (print)
+      printf(" %-10s %s -> %s\n", "link", path, targbuf);
+     if (targbuf)
+      free(targbuf);
+    }
+    else
+    {
+     if (print)
+      printf(" %-10s %s ->\n", "link", path);
+    }
+   }
+
+   break;
+
+
+  default:
+   break;
+
+  }
+
+  /*-------------------------------------------------------------------------
+   * end switch
+   *-------------------------------------------------------------------------
+   */
+
+  if ( name )
+   HDfree( name );
+
+  if ( path )
+   HDfree( path );
+
+ } /* i */
+
+ return inserted_objs;
+}
+
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: h5trav_printinfo
+ *
+ * Purpose: print list of names in file
+ *
+ * Return: void
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+void h5trav_printinfo(int nobjs, trav_info_t *travi)
+{
+ int i;
+ for ( i = 0; i < nobjs; i++)
+ {
+  switch ( travi[i].type )
+  {
+  case H5G_GROUP:
+   printf(" %-10s %s\n", "group", travi[i].name  );
+   break;
+  case H5G_DATASET:
+   printf(" %-10s %s\n", "dataset", travi[i].name );
+   break;
+  case H5G_TYPE:
+   printf(" %-10s %s\n", "datatype", travi[i].name );
+   break;
+  case H5G_LINK:
+   printf(" %-10s %s\n", "link", travi[i].name );
+   break;
+  default:
+   printf(" %-10s %s\n", "User defined object", travi[i].name );
+   break;
+  }
+ }
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: h5trav_printtable
+ *
+ * Purpose: print list of objects in file
+ *
+ * Return: void
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: May 9, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+void h5trav_printtable(trav_table_t *table)
+{
+ int i, j;
+
+ for ( i = 0; i < table->nobjs; i++)
+ {
+  switch ( table->objs[i].type )
+  {
+  case H5G_GROUP:
+   printf(" %-10s %s\n", "group", table->objs[i].name  );
+   break;
+  case H5G_DATASET:
+   printf(" %-10s %s\n", "dataset", table->objs[i].name );
+   break;
+  case H5G_TYPE:
+   printf(" %-10s %s\n", "datatype", table->objs[i].name );
+   break;
+  case H5G_LINK:
+   printf(" %-10s %s\n", "link", table->objs[i].name );
+   break;
+  default:
+   printf(" %-10s %s\n", "User defined object", table->objs[i].name );
+   break;
+  }
+
+  if (table->objs[i].nlinks)
+  {
+   for ( j=0; j<table->objs[i].nlinks; j++)
+   {
+    printf(" %-10s %s\n", "    hardlink", table->objs[i].links[j].new_name );
+   }
+  }
+
+ }
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: h5trav_getindext
+ *
+ * Purpose: get index of NAME in list
+ *
+ * Return: index, -1 if not found
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: December 18, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int h5trav_getindext(const char *name, trav_table_t *table)
+{
+ char *pdest;
+ int  result;
+ int  i, j;
+
+ for ( i = 0; i < table->nobjs; i++)
+ {
+  if ( strcmp(name,table->objs[i].name)==0 )
+   return i;
+
+  pdest  = strstr( table->objs[i].name, name );
+  result = (int)(pdest - table->objs[i].name);
+
+  /* found at position 1, meaning without '/' */
+  if( pdest != NULL && result==1 && strlen(table->objs[i].name)-1==strlen(name))
+   return i;
+
+  /* search also in the list of links */
+  if (table->objs[i].nlinks)
+  {
+   for ( j=0; j<table->objs[i].nlinks; j++)
+   {
+    if ( strcmp(name,table->objs[i].links[j].new_name)==0 )
+     return i;
+
+    pdest  = strstr( table->objs[i].links[j].new_name, name );
+    result = (int)(pdest - table->objs[i].links[j].new_name);
+
+    /* found at position 1, meaning without '/' */
+    if( pdest != NULL && result==1 )
+     return i;
+
+   }
+  }
+
+ }
+ return -1;
+}
+

Added: packages/hdf5/branches/upstream/current/tools/lib/h5trav.h
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5trav.h	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5trav.h	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,146 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef H5TRAV_H__
+#define H5TRAV_H__
+
+#include "hdf5.h"
+
+#if 0
+#define H5_TRAV_DEBUG
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * public struct to store name and type of an object
+ * the TYPE can be:
+ *    H5G_UNKNOWN = -1,
+ *    H5G_LINK,		        Object is a symbolic link
+ *    H5G_GROUP,		    Object is a group
+ *    H5G_DATASET,		    Object is a dataset
+ *    H5G_TYPE,			    Object is a named data type
+ *-------------------------------------------------------------------------
+ */
+
+/* hack to alow v1.4 compability */
+#ifdef H5_WANT_H5_V1_4_COMPAT
+ typedef int H5G_obj_t1;
+#else
+ typedef H5G_obj_t H5G_obj_t1;
+#endif
+
+typedef struct trav_info_t {
+	char      *name;
+	H5G_obj_t1 type;
+} trav_info_t;
+
+
+/*-------------------------------------------------------------------------
+ * keep record of hard link information
+ *-------------------------------------------------------------------------
+ */
+typedef struct trav_link_t {
+	char      *new_name;
+} trav_link_t;
+
+
+/*-------------------------------------------------------------------------
+ * struct to store basic info needed for the h5trav table traversal algorythm
+ *-------------------------------------------------------------------------
+ */
+
+typedef struct trav_obj_t {
+    unsigned long objno[2];/* object number from H5Gget_objinfo */
+    unsigned    flags[2];  /* h5diff.object is present or not in both files*/
+    char        *name;     /* name */
+    int         displayed; /* hard link already traversed once */
+    H5G_obj_t1  type;      /* type of object */
+    trav_link_t *links;    /* array of possible link names */
+    int         sizelinks; /* size of links array */
+    int         nlinks;    /* number of links */
+} trav_obj_t;
+
+
+/*-------------------------------------------------------------------------
+ * private struct that stores all objects
+ *-------------------------------------------------------------------------
+ */
+
+typedef struct trav_table_t {
+	int        size;
+	int        nobjs;
+	trav_obj_t *objs;
+} trav_table_t;
+
+
+/*-------------------------------------------------------------------------
+ * public functions
+ *-------------------------------------------------------------------------
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*-------------------------------------------------------------------------
+ * "h5trav info" public functions
+ *-------------------------------------------------------------------------
+ */
+int  h5trav_getinfo( hid_t fid, trav_info_t *info, int print );
+int  h5trav_getindex( const char *obj, int nobjs, trav_info_t *info );
+void h5trav_freeinfo( trav_info_t *info, int nobjs );
+void h5trav_printinfo(int nobjs, trav_info_t *info);
+
+/*-------------------------------------------------------------------------
+ * "h5trav table" public functions
+ *-------------------------------------------------------------------------
+ */
+
+int  h5trav_getindext(const char *obj,trav_table_t *travt);
+int  h5trav_gettable(hid_t fid, trav_table_t *travt);
+void h5trav_printtable(trav_table_t *table);
+
+#ifdef __cplusplus
+}
+#endif
+
+/*-------------------------------------------------------------------------
+ * table private functions
+ *-------------------------------------------------------------------------
+ */
+
+void trav_table_init(trav_table_t **table);
+
+void trav_table_free(trav_table_t *table);
+
+int  trav_table_search(unsigned long *objno,
+                       trav_table_t *table );
+
+void trav_table_add(unsigned long *objno,
+                    char *objname,
+                    H5G_obj_t1 type,
+                    trav_table_t *table);
+
+void trav_table_addflags(unsigned *flags,
+                         char *objname,
+                         H5G_obj_t1 type,
+                         trav_table_t *table);
+
+
+void trav_table_addlink(trav_table_t *table,
+                        int j /* the object index */,
+                        char *path );
+
+
+#endif  /* H5TRAV_H__ */

Added: packages/hdf5/branches/upstream/current/tools/lib/h5trav_table.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/h5trav_table.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/h5trav_table.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,258 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+
+#include "h5trav.h"
+#include "H5private.h"
+
+/*-------------------------------------------------------------------------
+ * Function: trav_table_search
+ *
+ * Purpose: Search in the table for OBJNO
+ *
+ * Return: index of object in table
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 4, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+
+int trav_table_search(unsigned long *objno, trav_table_t *table )
+{
+ int i;
+
+ for (i = 0; i < table->nobjs; i++)
+   if (table->objs[i].objno[0] == *objno && table->objs[i].objno[1] == *(objno + 1))
+   return i;
+
+  return -1;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: trav_table_add
+ *
+ * Purpose: Add OBJNO, NAME and TYPE of object to table
+ *
+ * Return: void
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 4, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+
+void trav_table_add(unsigned long *objno,
+                    char *name,
+                    H5G_obj_t1 type,
+                    trav_table_t *table)
+{
+ int i;
+
+ if (table->nobjs == table->size) {
+  table->size *= 2;
+  table->objs =
+   (trav_obj_t*)HDrealloc(table->objs, table->size * sizeof(trav_obj_t));
+
+  for (i = table->nobjs; i < table->size; i++) {
+   table->objs[i].objno[0] = table->objs[i].objno[1] = 0;
+   table->objs[i].flags[0] = table->objs[i].flags[1] = 0;
+   table->objs[i].displayed = 0;
+   table->objs[i].type = H5G_UNKNOWN;
+   table->objs[i].name = NULL;
+   table->objs[i].links = NULL;
+   table->objs[i].nlinks = 0;
+   table->objs[i].sizelinks = 0;
+  }
+ }
+
+ i = table->nobjs++;
+ table->objs[i].objno[0] = objno[0];
+ table->objs[i].objno[1] = objno[1];
+ table->objs[i].flags[0] = table->objs[i].flags[1] = 0;
+ HDfree(table->objs[i].name);
+ table->objs[i].name = (char *)HDstrdup(name);
+ table->objs[i].type = type;
+ table->objs[i].links = NULL;
+ table->objs[i].nlinks = 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: trav_table_addflags
+ *
+ * Purpose: Add FLAGS, NAME and TYPE of object to table
+ *
+ * Return: void
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 4, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+
+void trav_table_addflags(unsigned *flags,
+                         char *name,
+                         H5G_obj_t1 type,
+                         trav_table_t *table)
+{
+ int i;
+
+ if (table->nobjs == table->size) {
+  table->size *= 2;
+  table->objs =
+   (trav_obj_t*)HDrealloc(table->objs, table->size * sizeof(trav_obj_t));
+
+  for (i = table->nobjs; i < table->size; i++) {
+   table->objs[i].objno[0] = table->objs[i].objno[1] = 0;
+   table->objs[i].flags[0] = table->objs[i].flags[1] = 0;
+   table->objs[i].displayed = 0;
+   table->objs[i].type = H5G_UNKNOWN;
+   table->objs[i].name = NULL;
+   table->objs[i].links = NULL;
+   table->objs[i].nlinks = 0;
+   table->objs[i].sizelinks = 0;
+  }
+ }
+
+ i = table->nobjs++;
+ table->objs[i].objno[0] = 0;
+ table->objs[i].objno[1] = 0;
+ table->objs[i].flags[0] = flags[0];
+ table->objs[i].flags[1] = flags[1];
+ HDfree(table->objs[i].name);
+ table->objs[i].name = (char *)HDstrdup(name);
+ table->objs[i].type = type;
+ table->objs[i].links = NULL;
+ table->objs[i].nlinks = 0;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: trav_table_init
+ *
+ * Purpose: Initialize the table
+ *
+ * Return: void
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 4, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+
+void trav_table_init( trav_table_t **tbl )
+{
+ int i;
+ trav_table_t* table = (trav_table_t*) HDmalloc(sizeof(trav_table_t));
+
+ table->size = 20;
+ table->nobjs = 0;
+ table->objs =
+  (trav_obj_t*)HDmalloc(table->size * sizeof(trav_obj_t));
+
+ for (i = 0; i < table->size; i++) {
+  table->objs[i].objno[0] = table->objs[i].objno[1] = 0;
+  table->objs[i].flags[0] = table->objs[i].flags[1] = 0;
+  table->objs[i].displayed = 0;
+  table->objs[i].type = H5G_UNKNOWN;
+  table->objs[i].name = NULL;
+  table->objs[i].links = NULL;
+  table->objs[i].nlinks = 0;
+  table->objs[i].sizelinks = 0;
+ }
+
+ *tbl = table;
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: trav_table_free
+ *
+ * Purpose: free table memory
+ *
+ * Return: void
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: November 4, 2002
+ *
+ *-------------------------------------------------------------------------
+ */
+
+void trav_table_free( trav_table_t *table )
+{
+ int i, j;
+
+ for ( i = 0; i < table->nobjs; i++)
+ {
+  HDfree( table->objs[i].name );
+  if (table->objs[i].nlinks)
+  {
+   for ( j=0; j<table->objs[i].nlinks; j++)
+    HDfree( table->objs[i].links[j].new_name );
+
+   HDfree(table->objs[i].links);
+  }
+ }
+ HDfree(table->objs);
+ HDfree(table);
+
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: trav_table_addlink
+ *
+ * Purpose: Add a hardlink name to the object
+ *
+ * Return: void
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ *
+ * Date: December 17, 2003
+ *
+ *-------------------------------------------------------------------------
+ */
+
+void trav_table_addlink(trav_table_t *table,
+                        int j /* the object index */,
+                        char *path )
+{
+ int k;
+
+ /* already inserted */
+ if (strcmp(table->objs[j].name,path)==0)
+  return;
+
+ /* allocate space if necessary */
+ if (table->objs[j].nlinks == table->objs[j].sizelinks) {
+  table->objs[j].sizelinks += 2;
+  table->objs[j].links =
+   (trav_link_t*)HDrealloc(table->objs[j].links,
+   table->objs[j].sizelinks * sizeof(trav_link_t));
+ }
+
+ /* insert it */
+ k=table->objs[j].nlinks++;
+ table->objs[j].links[k].new_name = (char*)HDstrdup(path);
+}
+
+

Added: packages/hdf5/branches/upstream/current/tools/lib/talign.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/lib/talign.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/lib/talign.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,189 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Small program to illustrate the "misalignment" of members within a compound
+ * datatype, in a datatype fixed by H5Tget_native_type().
+ */
+#include <string.h>
+#include <stdlib.h>
+/*#include <unistd.h>	*//* Required for unlink() */
+
+#include "hdf5.h"
+#include "H5private.h"
+#include "h5tools.h"
+
+const char *fname = "talign.h5";
+const char *setname = "align";
+
+/*
+ * This program assumes that there is no extra space between the members 'Ok'
+ * and 'Not Ok', (there shouldn't be because they are of the same atomic type
+ * H5T_NATIVE_FLOAT, and they are placed within the compound next to one
+ * another per construction)
+ */
+
+int main(void)
+{
+	hid_t fil,spc,set;
+	hid_t cs6, cmp, fix;
+	hid_t cmp1, cmp2, cmp3;
+	hid_t plist;
+	hid_t array_dt;
+
+	hsize_t dim[2];
+	hsize_t cdim[4];
+
+	char string5[5];
+	float fok[2] = {1234., 2341.};
+	float fnok[2] = {5678., 6785.};
+	float *fptr;
+
+	char *data;
+	char *mname;
+
+	int result = 0;
+
+	printf("%-70s", "Testing alignment in compound datatypes");
+
+	strcpy(string5, "Hi!");
+	HDunlink(fname);
+	fil = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+	if (fil < 0) {
+		puts("*FAILED*");
+		return 1;
+	}
+
+	H5E_BEGIN_TRY {
+		H5Gunlink(fil, setname);
+	} H5E_END_TRY;
+
+	cs6 = H5Tcopy(H5T_C_S1);
+	H5Tset_size(cs6, sizeof(string5));
+	H5Tset_strpad(cs6, H5T_STR_NULLPAD);
+
+	cmp = H5Tcreate(H5T_COMPOUND, sizeof(fok) + sizeof(string5) + sizeof(fnok));
+	H5Tinsert(cmp, "Awkward length", 0, cs6);
+
+	cdim[0] = sizeof(fok) / sizeof(float);
+    array_dt=H5Tarray_create(H5T_NATIVE_FLOAT,1,cdim,NULL);
+	H5Tinsert(cmp, "Ok", sizeof(string5), array_dt);
+    H5Tclose(array_dt);
+
+	cdim[0] = sizeof(fnok) / sizeof(float);
+    array_dt=H5Tarray_create(H5T_NATIVE_FLOAT,1,cdim,NULL);
+	H5Tinsert(cmp, "Not Ok", sizeof(fok) + sizeof(string5), array_dt);
+    H5Tclose(array_dt);
+
+        fix=h5tools_get_native_type(cmp);
+
+	cmp1 = H5Tcreate(H5T_COMPOUND, sizeof(fok));
+
+	cdim[0] = sizeof(fok) / sizeof(float);
+    array_dt=H5Tarray_create(H5T_NATIVE_FLOAT,1,cdim,NULL);
+	H5Tinsert(cmp1, "Ok", 0, array_dt);
+    H5Tclose(array_dt);
+
+	cmp2 = H5Tcreate(H5T_COMPOUND, sizeof(string5));
+	H5Tinsert(cmp2, "Awkward length", 0, cs6);
+
+	cmp3 = H5Tcreate(H5T_COMPOUND, sizeof(fnok));
+
+	cdim[0] = sizeof(fnok) / sizeof(float);
+    array_dt=H5Tarray_create(H5T_NATIVE_FLOAT,1,cdim,NULL);
+	H5Tinsert(cmp3, "Not Ok", 0, array_dt);
+    H5Tclose(array_dt);
+
+	plist = H5Pcreate(H5P_DATASET_XFER);
+	H5Pset_preserve(plist, 1);
+
+	/*
+	 * Create a small dataset, and write data into it we write each field
+	 * in turn so that we are avoid alignment issues at this point
+	 */
+	dim[0] = 1;
+	spc = H5Screate_simple(1, dim, NULL);
+	set = H5Dcreate(fil, setname, cmp, spc, H5P_DEFAULT);
+
+	H5Dwrite(set, cmp1, spc, H5S_ALL, plist, fok);
+	H5Dwrite(set, cmp2, spc, H5S_ALL, plist, string5);
+	H5Dwrite(set, cmp3, spc, H5S_ALL, plist, fnok);
+
+	H5Dclose(set);
+
+	/* Now open the set, and read it back in */
+	data = malloc(H5Tget_size(fix));
+
+	if (!data) {
+		perror("malloc() failed");
+		abort();
+	}
+
+	set = H5Dopen(fil, setname);
+
+	H5Dread(set, fix, spc, H5S_ALL, H5P_DEFAULT, data);
+	fptr = (float *)(data + H5Tget_member_offset(fix, 1));
+
+	if (fok[0] != fptr[0] || fok[1] != fptr[1]
+			|| fnok[0] != fptr[2] || fnok[1] != fptr[3]) {
+		result = 1;
+		printf("%14s (%2d) %6s = %s\n",
+			mname = H5Tget_member_name(fix, 0), (int)H5Tget_member_offset(fix,0),
+			string5, (char *)(data + H5Tget_member_offset(fix, 0)));
+		free(mname);
+		fptr = (float *)(data + H5Tget_member_offset(fix, 1));
+		printf("Data comparison:\n"
+			"%14s (%2d) %6f = %f\n"
+			"                    %6f = %f\n",
+			mname = H5Tget_member_name(fix, 1), (int)H5Tget_member_offset(fix,1),
+			fok[0], fptr[0],
+			fok[1], fptr[1]);
+		free(mname);
+		fptr = (float *)(data + H5Tget_member_offset(fix, 2));
+		printf("%14s (%2d) %6f = %f\n"
+			"                    %6f = %6f\n",
+			mname = H5Tget_member_name(fix, 2), (int)H5Tget_member_offset(fix,2),
+			fnok[0], fptr[0],
+			fnok[1], fptr[1]);
+		free(mname);
+
+		fptr = (float *)(data + H5Tget_member_offset(fix, 1));
+		printf("\n"
+			"Short circuit\n"
+			"                    %6f = %f\n"
+			"                    %6f = %f\n"
+			"                    %6f = %f\n"
+			"                    %6f = %f\n",
+			fok[0], fptr[0],
+			fok[1], fptr[1],
+			fnok[0], fptr[2],
+			fnok[1], fptr[3]);
+		puts("*FAILED*");
+	} else {
+		puts(" PASSED");
+	}
+
+	free(data);
+	H5Sclose(spc);
+	H5Tclose(cmp);
+	H5Tclose(cmp1);
+	H5Tclose(cmp2);
+	H5Tclose(cmp3);
+	H5Pclose(plist);
+	H5Fclose(fil);
+	unlink(fname);
+	fflush(stdout);
+	return result;
+}

Added: packages/hdf5/branches/upstream/current/tools/misc/Dependencies
===================================================================
--- packages/hdf5/branches/upstream/current/tools/misc/Dependencies	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/misc/Dependencies	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,103 @@
+##
+## This file is machine generated on GNU systems.
+## Only temporary changes may be made here.
+##
+## 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.
+
+h5debug.lo: \
+   $(srcdir)/h5debug.c \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5MPprivate.h \
+   $(top_srcdir)/src/H5Bprivate.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5ACprivate.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Fprivate.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Cprivate.h \
+   $(top_srcdir)/src/H5Cpublic.h \
+   $(top_srcdir)/src/H5RCprivate.h \
+   $(top_srcdir)/src/H5Dprivate.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5FDprivate.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5Oprivate.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5HGprivate.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5Tprivate.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Gprivate.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5RSprivate.h \
+   $(top_srcdir)/src/H5Rprivate.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Zprivate.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Fpkg.h \
+   $(top_srcdir)/src/H5FOprivate.h \
+   $(top_srcdir)/src/H5SLprivate.h \
+   $(top_srcdir)/src/H5HLprivate.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5Iprivate.h \
+   $(top_srcdir)/src/H5Opkg.h \
+   $(top_srcdir)/src/H5Pprivate.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5FDfamily.h
+h5repart.lo: \
+   $(srcdir)/h5repart.c \
+   $(top_srcdir)/src/hdf5.h \
+   $(top_srcdir)/src/H5public.h \
+   $(top_builddir)/src/H5pubconf.h \
+   $(top_srcdir)/src/H5api_adpt.h \
+   $(top_srcdir)/src/H5Apublic.h \
+   $(top_srcdir)/src/H5Ipublic.h \
+   $(top_srcdir)/src/H5ACpublic.h \
+   $(top_srcdir)/src/H5Bpublic.h \
+   $(top_srcdir)/src/H5Dpublic.h \
+   $(top_srcdir)/src/H5Epublic.h \
+   $(top_srcdir)/src/H5Fpublic.h \
+   $(top_srcdir)/src/H5FDpublic.h \
+   $(top_srcdir)/src/H5Gpublic.h \
+   $(top_srcdir)/src/H5Opublic.h \
+   $(top_srcdir)/src/H5HGpublic.h \
+   $(top_srcdir)/src/H5HLpublic.h \
+   $(top_srcdir)/src/H5MMpublic.h \
+   $(top_srcdir)/src/H5Ppublic.h \
+   $(top_srcdir)/src/H5Zpublic.h \
+   $(top_srcdir)/src/H5Rpublic.h \
+   $(top_srcdir)/src/H5Spublic.h \
+   $(top_srcdir)/src/H5Tpublic.h \
+   $(top_srcdir)/src/H5FDcore.h \
+   $(top_srcdir)/src/H5FDfamily.h \
+   $(top_srcdir)/src/H5FDgass.h \
+   $(top_srcdir)/src/H5FDlog.h \
+   $(top_srcdir)/src/H5FDmpi.h \
+   $(top_srcdir)/src/H5FDmpio.h \
+   $(top_srcdir)/src/H5FDmpiposix.h \
+   $(top_srcdir)/src/H5FDmulti.h \
+   $(top_srcdir)/src/H5FDsec2.h \
+   $(top_srcdir)/src/H5FDsrb.h \
+   $(top_srcdir)/src/H5FDstdio.h \
+   $(top_srcdir)/src/H5FDstream.h \
+   $(top_srcdir)/src/H5private.h \
+   $(top_srcdir)/src/H5MPprivate.h

Added: packages/hdf5/branches/upstream/current/tools/misc/Makefile.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/misc/Makefile.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/misc/Makefile.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,82 @@
+##
+## 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.
+##
+## HDF5 Library Makefile(.in)
+## 
+top_srcdir=@top_srcdir@
+top_builddir=../..
+srcdir=@srcdir@
+ at COMMENCE@
+
+## Add include directory to the C preprocessor flags, add -lh5tools and
+## -lhdf5 to the list of libraries.
+##
+CPPFLAGS=-I. -I$(srcdir) -I$(top_builddir)/src -I$(top_srcdir)/src  \
+         -I$(top_srcdir)/tools/lib @CPPFLAGS@
+
+## Test programs and scripts.
+##
+TEST_PROGS=
+TEST_SCRIPTS=
+
+## These are our main targets: library and tools.
+##
+LIBTOOLS=../lib/libh5tools.la
+LIBHDF5=$(top_builddir)/src/libhdf5.la
+
+## h5cc is generated by configure.  Remove it only when distclean.
+BUILD_PROGS=h5debug h5redeploy h5repart
+PUB_PROGS=h5cc $(BUILD_PROGS)
+PROGS=$(BUILD_PROGS) $(TEST_PROGS)
+DISTCLEAN=h5cc
+
+## Source and object files for the library; do not install
+##
+LIB_SRC=
+LIB_OBJ=$(LIB_SRC:.c=.lo)
+PUB_LIB=
+
+## Source and object files for programs...
+##
+PROG_SRC=h5debug.c h5repart.c
+PROG_OBJ=$(PROG_SRC:.c=.lo)
+
+PRIVATE_HDR=
+
+## Source and object files for the tests
+##
+TEST_SRC=
+TEST_OBJ=$(TEST_SRC:.c=.lo)
+
+## Programs have to be built before they can be tested!
+##
+check test _test: $(PROGS)
+
+## How to build the programs...They all depend on the hdf5 library and
+## the tools library compiled in this directory.
+##
+$(PROGS): $(LIBTOOLS) $(LIBHDF5)
+
+h5cc: h5cc.in
+	@true
+
+h5debug: h5debug.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ h5debug.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+h5redeploy: h5redeploy.in
+	$(CP) $(srcdir)/$@.in $@
+
+h5repart: h5repart.lo
+	@$(LT_LINK_EXE) $(CFLAGS) -o $@ h5repart.lo $(LIBTOOLS) $(LIBHDF5) $(LDFLAGS) $(LIBS)
+
+ at CONCLUDE@

Added: packages/hdf5/branches/upstream/current/tools/misc/h5cc.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/misc/h5cc.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/misc/h5cc.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,317 @@
+#! /bin/sh
+##
+## 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.
+##
+
+############################################################################
+##                                                                        ##
+## Things You May Have to Modify:                                         ##
+##                                                                        ##
+## If the following paths don't point to the place were HDF5 is installed ##
+## on your system (i.e., you received a binary distribution or moved the  ##
+## files from the originally installed directory to another directory)    ##
+## then modify them accordingly to represent the new paths.               ##
+##                                                                        ##
+############################################################################
+prefix="@prefix@"
+exec_prefix="@exec_prefix@"
+libdir="@libdir@"
+includedir="@includedir@"
+HL="@HL@"
+
+############################################################################
+##                                                                        ##
+## You shouldn't have to modify anything below this line.                 ##
+##                                                                        ##
+############################################################################
+
+host_os="@host_os@"
+
+prog_name="`basename $0`"
+
+allargs=""
+compile_args=""
+libraries=""
+link_args=""
+link_objs=""
+clibpath=""
+
+do_link="yes"
+do_compile="no"
+dash_o="no"
+dash_c="no"
+get_output_file="no"
+
+SHOW="eval"
+CCBASE="@CC@"
+CLINKERBASE="@CC@"
+CFLAGS="@CFLAGS@"
+CPPFLAGS="@CPPFLAGS@"
+LDFLAGS="@LDFLAGS@"
+LIBS="@LIBS@"
+
+CC="${HDF5_CC:-$CCBASE}"
+CLINKER="${HDF5_CLINKER:-$CLINKERBASE}"
+
+USE_SHARED_LIB="${HDF5_USE_SHLIB:-no}"
+
+usage() {
+  # A wonderfully informative "usage" message.
+  echo "usage: $prog_name [OPTIONS] <compile line>"
+  echo "  OPTIONS:"
+  echo "    -help        This help message."
+  echo "    -echo        Show all the shell commands executed"
+  echo "    -prefix=DIR  Prefix directory to find HDF5 lib/ and include/"
+  echo "                   subdirectories [default: $prefix]"
+  echo "    -show        Show the commands without executing them"
+  echo "    -showconfig  Show the HDF5 library configuration summary"
+  echo "    -shlib       Compile with shared HDF5 libraries"
+  echo "    -noshlib     Compile with static HDF5 libraries [default]"
+  echo " "
+  echo "  <compile line>  - the normal compile line options for your compiler."
+  echo "                    $prog_name uses the same compiler you used to compile"
+  echo "                    HDF5. Check with your compiler's man pages for more"
+  echo "                    information on which options are needed."
+  echo " "
+  echo " You can override the compiler, linker, and whether or not to use static"
+  echo " or shared libraries to compile your program by setting the following"
+  echo " environment variables accordingly:"
+  echo " "
+  echo "   HDF5_CC                  -  use a different C compiler"
+  echo "   HDF5_CLINKER             -  use a different linker"
+  echo "   HDF5_USE_SHLIB=[yes|no]  -  use shared or static version of the HDF5 library"
+  echo "                                 [default: no]"
+  echo " "
+  exit 1
+}
+
+# Show the configuration summary of the library recorded in the
+# libhdf5.settings file reside in the lib directory.
+showconfigure()
+{
+  cat ${libdir}/libhdf5.settings
+  status=$?
+}
+
+# Main
+status=0
+
+if test "$#" = "0"; then
+  # No parameters specified, issue usage statement and exit.
+  usage
+fi
+
+case "$CC" in
+  gcc)
+    kind="gcc"
+    ;;
+  mpicc|mpcc|mpicc_r)
+    # Is this gcc masquarading as an MPI compiler?
+    if test "`${CC} -v 2>&1 | sed -n 2p | cut -c1-3`" = "gcc"; then
+      kind="gcc"
+    else
+      # Nope
+      kind="$host_os"
+    fi
+    ;;
+  *)
+    kind="$host_os"
+    ;;
+esac
+
+for arg in $@ ; do
+  if test "x$get_output_file" = "xyes"; then
+    link_args="$link_args $arg"
+    output_file="$arg"
+    get_output_file="no"
+    continue
+  fi
+
+  case "$arg" in
+    -c)
+      allargs="$allargs $arg"
+      compile_args="$compile_args $arg"
+
+      if test "x$do_link" = "xyes" -a -n "$output_file"; then
+        compile_args="$compile_args -o $outputfile"
+      fi
+
+      do_link="no"
+      dash_c="yes"
+      ;;
+    -o)
+      allargs="$allargs $arg"
+      dash_o="yes"
+
+      if test "x$dash_c" = "xyes"; then
+        compile_args="$compile_args $arg"
+      else
+        link_args="$link_args $arg"
+        do_link="yes"
+        get_output_file="yes"
+      fi
+      ;;
+    -E|-M)
+      allargs="$allargs $arg"
+      compile_args="$compile_args $arg"
+      dash_c="yes"
+      do_link="no"
+      ;;
+    -l*)
+      libraries=" $libraries $arg "
+      allargs="$allargs $arg"
+      ;;
+    -prefix=*)
+      prefix="`expr "$arg" : '-prefix=\(.*\)'`"
+      ;;
+    -echo)
+      set -x
+      ;;
+    -show)
+      SHOW="echo"
+      ;;
+    -showconfig)
+      showconfigure
+      exit $status
+      ;;
+    -shlib)
+      USE_SHARED_LIB="yes"
+      ;;
+    -noshlib)
+      USE_SHARED_LIB="no"
+      ;;
+    -help)
+      usage
+      ;;
+    *\"*)
+      qarg="'"$arg"'"
+      allargs="$allargs $qarg"
+      ;;
+    *\'*)
+      qarg='\"'"$arg"'\"'
+      allargs="$allargs $qarg"
+      ;;
+    *)
+      allargs="$allargs $qarg"
+
+      if test -s "$arg"; then
+        ext=`expr "$arg" : '.*\(\..*\)'`
+
+        if test "x$ext" = "x.c"; then
+          do_compile="yes"
+          compile_args="$compile_args $arg"
+          fname=`basename $arg .c`
+          link_objs="$link_objs $fname.o"
+        elif test "x$ext" = "x.o"; then
+          if test "x$dash_c" = "xyes"; then
+            compile_args="$compile_args $arg"
+          else
+            do_link="yes"
+            link_objs="$link_objs $arg"
+          fi
+        elif test "x$ext" = "x.a"; then
+          # This is an archive that we're linking in
+          libraries=" $libraries $arg "
+        else
+          compile_args="$compile_args $arg"
+          link_args="$link_args $arg"
+        fi
+      else
+        compile_args="$compile_args $arg"
+        link_args="$link_args $arg"
+      fi
+      ;;
+  esac
+done
+
+if test "x$do_compile" = "xyes"; then
+  if test "x$dash_c" != "xyes"; then
+    compile_args="-c $compile_args"
+  fi
+
+  $SHOW $CC -I$includedir $CPPFLAGS $CFLAGS $compile_args
+  status=$?
+
+  if test "$status" != "0"; then
+    exit $status
+  fi
+fi
+
+if test "x$do_link" = "xyes"; then
+  shared_link=""
+# conditionnaly link with the hl library  
+  if test "X$HL" = "Xhl"; then
+   libraries=" $libraries -lhdf5_hl -lhdf5 "
+  else
+   libraries=" $libraries  -lhdf5 "
+  fi
+  link_args="$link_args -L${libdir}"
+
+  case "$kind" in
+    gcc|linux*)
+      # MacOS X doesn't support the "-Wl,-rpath -Wl," style of linker flags.
+      # It appears to want none of them specified.
+      case "$host_os" in
+        darwin*)          flag="" ;;
+        *)                flag="-Wl,-rpath -Wl," ;;
+      esac
+      ;;
+    hpux*)                flag="-Wl,+b -Wl," ;;
+    freebsd*|solaris*)    flag="-R" ;;
+    rs6000*|aix*)         flag="-L" ;;
+    irix*|sgi)            flag="-rpath " ;;
+    *)                    flag="" ;;
+  esac
+
+  if test -n "$flag"; then
+    shared_link="${flag}${libdir}"
+  fi
+
+  if test "x$USE_SHARED_LIB" != "xyes"; then
+    # The "-lhdf5" & "-lhdf5_hl" flags are in here already...This is a static
+    # compile though, so change it to the static version (.a) of the library.
+    new_libraries=""
+    for lib in $libraries; do
+      case "$lib" in
+        -lhdf5)
+          new_libraries="$new_libraries ${libdir}/libhdf5.a"
+          ;;
+        -lhdf5_hl)
+          new_libraries="$new_libraries ${libdir}/libhdf5_hl.a"
+          ;;
+        *)
+          new_libraries="$new_libraries $lib"
+          ;;
+      esac
+    done
+    libraries="$new_libraries"
+  fi
+
+  for lib in $libraries; do
+    if echo $link_args | grep " $lib " > /dev/null ||
+       echo $link_args | grep " $lib$" > /dev/null; then
+      :
+    else
+      link_args="$link_args $lib "
+    fi
+  done
+
+  # The LIBS are just a bunch of -l* libraries necessary for the HDF5
+  # module. It's okay if they're included twice in the compile line.
+  link_args="$link_args $LIBS"
+
+  $SHOW $CLINKER $CFLAGS $LDFLAGS $clibpath $link_objs $link_args $shared_link
+  status=$?
+fi
+
+exit $status


Property changes on: packages/hdf5/branches/upstream/current/tools/misc/h5cc.in
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/misc/h5debug.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/misc/h5debug.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/misc/h5debug.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*-------------------------------------------------------------------------
+ *
+ * Created:             debug.c
+ *                      Jul 18 1997
+ *                      Robb Matzke <matzke at llnl.gov>
+ *
+ * Purpose:             Debugs an existing HDF5 file at a low level.
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+#define H5O_PACKAGE		/*suppress error about including H5Opkg	  */
+
+#include "H5private.h"
+#include "H5Bprivate.h"
+#include "H5Dprivate.h"
+#include "H5Fpkg.h"
+#include "H5Gprivate.h"
+#include "H5HGprivate.h"
+#include "H5HLprivate.h"
+#include "H5Iprivate.h"
+#include "H5Opkg.h"
+#include "H5Pprivate.h"
+
+/* File drivers */
+#include "H5FDfamily.h"
+
+#define INDENT  3
+#define VCOL    50
+
+
+/*-------------------------------------------------------------------------
+ * Function:    main
+ *
+ * Usage:       debug FILENAME [OFFSET]
+ *
+ * Return:      Success:        exit (0)
+ *
+ *              Failure:        exit (non-zero)
+ *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Jul 18 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main(int argc, char *argv[])
+{
+    hid_t	fid, fapl, dxpl;
+    H5F_t       *f;
+    haddr_t     addr=0, extra=0;
+    uint8_t     sig[16];
+    int         i;
+    unsigned    ndims;
+    herr_t      status = SUCCEED;
+
+    if (argc == 1) {
+	fprintf(stderr,
+		"Usage: %s filename [signature addr [extra]]\n", argv[0]);
+	HDexit(1);
+    }
+
+    /* Initialize the library */
+    if(H5open ()<0) {
+        fprintf(stderr, "cannot initialize the library\n");
+        HDexit(1);
+    }
+
+    /*
+     * Open the file and get the file descriptor.
+     */
+    if((dxpl = H5Pcreate (H5P_DATASET_XFER))<0) {
+        fprintf(stderr, "cannot create dataset transfer property list\n");
+        HDexit(1);
+    }
+    if((fapl = H5Pcreate (H5P_FILE_ACCESS))<0) {
+        fprintf(stderr, "cannot create file access property list\n");
+        HDexit(1);
+    }
+    if (strchr (argv[1], '%')) {
+	H5Pset_fapl_family (fapl, (hsize_t)0, H5P_DEFAULT);
+    }
+    if ((fid = H5Fopen(argv[1], H5F_ACC_RDONLY, fapl)) < 0) {
+        fprintf(stderr, "cannot open file\n");
+        HDexit(1);
+    }
+    if (NULL == (f = H5I_object(fid))) {
+        fprintf(stderr, "cannot obtain H5F_t pointer\n");
+        HDexit(2);
+    }
+
+    /*
+     * Parse command arguments.
+     */
+    if (argc > 2) {
+        printf("New address: %s\n", argv[2]);
+        addr = HDstrtoll(argv[2], NULL, 0);
+    }
+    if (argc > 3) {
+        extra = HDstrtoll(argv[3], NULL, 0);
+    }
+    /*
+     * Read the signature at the specified file position.
+     */
+    HDfprintf(stdout, "Reading signature at address %a (rel)\n", addr);
+    if (H5F_block_read(f, H5FD_MEM_SUPER, addr, sizeof(sig), dxpl, sig)<0) {
+        fprintf(stderr, "cannot read signature\n");
+        HDexit(3);
+    }
+    if (!HDmemcmp(sig, H5F_SIGNATURE, H5F_SIGNATURE_LEN)) {
+        /*
+         * Debug the boot block.
+         */
+        status = H5F_debug(f, H5P_DATASET_XFER_DEFAULT, stdout, 0, VCOL);
+
+    } else if (!HDmemcmp(sig, H5HL_MAGIC, H5HL_SIZEOF_MAGIC)) {
+        /*
+         * Debug a local heap.
+         */
+        status = H5HL_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL);
+
+    } else if (!HDmemcmp (sig, H5HG_MAGIC, H5HG_SIZEOF_MAGIC)) {
+	/*
+	 * Debug a global heap collection.
+	 */
+	status = H5HG_debug (f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL);
+
+    } else if (!HDmemcmp(sig, H5G_NODE_MAGIC, H5G_NODE_SIZEOF_MAGIC)) {
+        /*
+         * Debug a symbol table node.
+         */
+        status = H5G_node_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, extra);
+
+    } else if (!HDmemcmp(sig, H5B_MAGIC, H5B_SIZEOF_MAGIC)) {
+        /*
+         * Debug a B-tree.  B-trees are debugged through the B-tree
+         * subclass.  The subclass identifier is the byte immediately
+         * after the B-tree signature.
+         */
+        H5B_subid_t subtype = (H5B_subid_t)sig[H5B_SIZEOF_MAGIC];
+
+        switch (subtype) {
+        case H5B_SNODE_ID:
+            status = H5G_node_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, extra);
+            break;
+
+	case H5B_ISTORE_ID:
+	    ndims = (unsigned)extra;
+	    status = H5D_istore_debug (f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL, ndims);
+	    break;
+
+        default:
+            fprintf(stderr, "Unknown B-tree subtype %u\n", (unsigned)(subtype));
+            HDexit(4);
+        }
+
+    } else if (sig[0] == H5O_VERSION) {
+        /*
+         * This could be an object header.  Since they don't have a signature
+         * it's a somewhat "ify" detection.
+         */
+        status = H5O_debug(f, H5P_DATASET_XFER_DEFAULT, addr, stdout, 0, VCOL);
+
+    } else {
+        /*
+         * Got some other unrecognized signature.
+         */
+        printf("%-*s ", VCOL, "Signature:");
+        for (i = 0; i < 8; i++) {
+            if (sig[i] > ' ' && sig[i] <= '~' && '\\' != sig[i]) {
+                HDputchar(sig[i]);
+            } else if ('\\' == sig[i]) {
+                HDputchar('\\');
+                HDputchar('\\');
+            } else {
+                printf("\\%03o", sig[i]);
+            }
+        }
+        HDputchar('\n');
+
+        fprintf(stderr, "unknown signature\n");
+        HDexit(4);
+    }
+
+    if (status < 0) {
+        fprintf(stderr, "An error occurred\n");
+        HDexit(5);
+    }
+    H5Pclose(dxpl);
+    H5Pclose(fapl);
+    H5Fclose(fid);
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/tools/misc/h5redeploy.in
===================================================================
--- packages/hdf5/branches/upstream/current/tools/misc/h5redeploy.in	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/misc/h5redeploy.in	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,175 @@
+#! /bin/sh
+##
+## 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.
+##
+
+## Update HDF5 compiler tools after the HDF5 software has been installed
+## in a new location.
+## For help page, use "h5redeploy -help"
+
+# Function definitions
+
+# show help page
+usage() {
+  # A wonderfully informative "usage" message.
+  echo "usage: $prog_name [OPTIONS]"
+  echo "  OPTIONS:"
+  echo "    -help|help   This help message"
+  echo "    -echo        Show all the shell commands executed"
+  echo "    -force       No prompt, just do it"
+  echo "    -prefix=DIR  New directory to find HDF5 lib/ and include/"
+  echo "                   subdirectories [default: current directory]"
+  echo "    -tool=TOOL   Tool to update. TOOL must be in the current"
+  echo "                   directory and writable. [default: $h5tools]"
+  echo "    -show        Show the commands without executing them"
+  echo " "
+  exit 1
+}
+
+# display variable values
+dump_vars(){
+    echo "====Showing all variable values====="
+    echo prefix=$prefix
+    echo h5tools=$h5tools
+    echo "====End Showing====="
+}
+
+# show actions to be taken
+show_action()
+{
+    echo "Update the following tools because they are now installed at a new directory"
+    for t in $foundtools; do
+	echo "${t}:"
+	echo "   current setting=`sed -e '/^prefix=/s/prefix=//p' -e d $t`"
+	echo "   new     setting="\""$prefix"\"
+    done
+}
+
+
+# Report Error message
+ERROR()
+{
+    echo "***ERROR***"
+    echo "$1"
+}
+
+# Main
+#
+# Initialization
+h5tools="h5cc h5pcc h5fc h5pfc h5c++"	# possible hdf5 tools
+foundtools=		# tools found and will be modified
+fmode=			# force mode, default is off
+prefix=`(cd ..;pwd)`
+
+# Parse options
+for arg in $@ ; do
+  case "$arg" in
+    -prefix=*)
+      prefix="`expr "$arg" : '-prefix=\(.*\)'`"
+      ;;
+    -echo)
+      set -x
+      ;;
+    -show)
+      SHOW="echo"
+      ;;
+    -tool=*)
+      h5tools="`expr "$arg" : '-tool=\(.*\)'`"
+      ;;
+    -help|help)
+      usage
+      ;;
+    -force)
+      fmode=yes
+      ;;
+    *)
+      ERROR "Unknown Option($arg)"
+      usage
+      exit 1
+      ;;
+  esac
+done
+
+# Sanity checks
+if [ ! -d $prefix ]; then
+    ERROR "prefix($prefix) is not an existing directory"
+    exit 1
+fi
+
+for x in $h5tools; do
+    if [ -f $x ]; then
+	foundtools="$foundtools $x"
+	if [ ! -w $x ]; then
+	    ERROR "h5tool($x) is not writable"
+	    exit 1
+	fi
+    fi
+done
+
+if [ -z "$foundtools" ]; then
+    ERROR "found no tools to modify"
+    exit 1
+fi
+
+# Show actions to be taken and get consent
+show_action
+# Ask confirmation unless fmode is on
+if [ x-$fmode = x- ]; then
+    echo "Continue? (yes/no)"
+    read ansx
+    ans=`echo $ansx | tr "[A-Z]" "[a-z]"`
+    if [ x-$ans != x-yes ]; then
+	echo ABORT.  No tools changed.
+	exit 1
+    fi
+fi
+
+
+# Create the update commands
+CMDFILE=/tmp/h5redeploy.$$
+touch $CMDFILE
+chmod 0600 $CMDFILE
+echo "/^prefix/c"                 >> $CMDFILE
+echo prefix=\""$prefix"\"         >> $CMDFILE
+echo .                            >> $CMDFILE
+(echo w; echo q)                  >> $CMDFILE
+
+
+# Update them
+if [ "$SHOW" = "echo" ]; then
+    echo "===Update commands are:===="
+    cat $CMDFILE
+    echo "===End Update commands====="
+fi
+
+for t in $foundtools; do
+    echo Update $t ...
+    COMMAND="ed - $t"
+    if [ "$SHOW" = "echo" ]; then
+	echo $COMMAND
+    else
+	$COMMAND < $CMDFILE
+    fi
+done
+
+
+# Cleanup
+rm -f $CMDFILE
+exit 0
+
+# Some possible future features to add
+# CCBASE - Name of the alternative C compiler
+# CLINKERBASE - Name of the alternative linker
+# LDFLAGS   - Path to different libraries your application will link with
+#     (this path should include the path to the zlib library)
+# LIBS      - Libraries your application will link with


Property changes on: packages/hdf5/branches/upstream/current/tools/misc/h5redeploy.in
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/misc/h5repart.c
===================================================================
--- packages/hdf5/branches/upstream/current/tools/misc/h5repart.c	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/misc/h5repart.c	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,448 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * 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. *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *              Wednesday, May 13, 1998
+ *
+ * Purpose:	Repartitions a file family.  This program can be used to
+ *		split a single file into a family of files, join a family of
+ *		files into a single file, or copy one family to another while
+ *		changing the size of the family members.  It can also be used
+ *		to copy a single file to a single file with holes.
+ */
+
+/* See H5private.h for how to include system headers */
+#include "hdf5.h"
+#include "H5private.h"
+#ifdef H5_STDC_HEADERS
+#   include <ctype.h>
+#   include <errno.h>
+#   include <fcntl.h>
+#   include <stdio.h>
+#   include <stdlib.h>
+#   include <string.h>
+#endif
+
+#ifdef H5_HAVE_UNISTD_H
+#   include <sys/types.h>
+#   include <unistd.h>
+#endif
+
+#ifdef H5_HAVE_SYS_STAT_H
+#   include <sys/stat.h>
+#endif
+
+#ifdef WIN32
+#   include <io.h>
+#	include <fcntl.h>
+#endif
+
+#ifndef FALSE
+#   define FALSE	0
+#endif
+#ifndef TRUE
+#   define TRUE 	1
+#endif
+#   define NAMELEN	4096
+#define GB	*1024*1024*1024
+
+#ifndef MIN
+#   define MIN(X,Y)	((X)<(Y)?(X):(Y))
+#endif
+#ifndef MIN3
+#   define MIN3(X,Y,Z)	MIN(MIN(X,Y),Z)
+#endif
+
+
+/*-------------------------------------------------------------------------
+ * Function:	usage
+ *
+ * Purpose:	Prints a usage message.
+ *
+ * Return:	void
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, May 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+usage (const char *progname)
+{
+    fprintf(stderr, "usage: %s [-v] [-V] [-[b|m] N[g|m|k]] SRC DST\n",
+	    progname);
+    fprintf(stderr, "   -v     Produce verbose output\n");
+    fprintf(stderr, "   -V     Print a version number and exit\n");
+    fprintf(stderr, "   -b N   The I/O block size, defaults to 1kB\n");
+    fprintf(stderr, "   -m N   The destination member size or 1GB\n");
+    fprintf(stderr, "   SRC    The name of the source file\n");
+    fprintf(stderr, "   DST	The name of the destination files\n");
+    fprintf(stderr, "Sizes may be suffixed with `g' for GB, `m' for MB or "
+	    "`k' for kB.\n");
+    fprintf(stderr, "File family names include an integer printf "
+	    "format such as `%%d'\n");
+    exit (1);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	get_size
+ *
+ * Purpose:	Reads a size option of the form `-XNS' where `X' is any
+ *		letter, `N' is a multi-character positive decimal number, and
+ *		`S' is an optional suffix letter in the set [GgMmk].  The
+ *		option may also be split among two arguments as: `-X NS'.
+ *		The input value of ARGNO is the argument number for the
+ *		switch in the ARGV vector and ARGC is the number of entries
+ *		in that vector.
+ *
+ * Return:	Success:	The value N multiplied according to the
+ *				suffix S.  On return ARGNO will be the number
+ *				of the next argument to process.
+ *
+ *		Failure:	Calls usage() which exits with a non-zero
+ *				status.
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, May 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static off_t
+get_size (const char *progname, int *argno, int argc, char *argv[])
+{
+    off_t	retval=-1;
+    char	*suffix;
+
+    if (isdigit ((int)(argv[*argno][2]))) {
+	retval = strtol (argv[*argno]+2, &suffix, 10);
+	(*argno)++;
+    } else if (argv[*argno][2] || *argno+1>=argc) {
+	usage (progname);
+    } else {
+	retval = strtol (argv[*argno+1], &suffix, 0);
+	if (suffix==argv[*argno+1]) usage (progname);
+	*argno += 2;
+    }
+    if (suffix && suffix[0] && !suffix[1]) {
+	switch (*suffix) {
+	case 'G':
+	case 'g':
+	    retval *= 1024 * 1024 * 1024;
+	    break;
+	case 'M':
+	case 'm':
+	    retval *= 1024 * 1024;
+	    break;
+	case 'k':
+	    retval *= 1024;
+	    break;
+	default:
+	    usage (progname);
+	}
+    } else if (suffix && suffix[0]) {
+	usage (progname);
+    }
+    return retval;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	main
+ *
+ * Purpose:	Split an hdf5 file
+ *
+ * Return:	Success:
+ *
+ *		Failure:
+ *
+ * Programmer:	Robb Matzke
+ *              Wednesday, May 13, 1998
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+int
+main (int argc, char *argv[])
+{
+    const char	*prog_name;		/*program name			*/
+    size_t	blk_size=1024;		/*size of each I/O block	*/
+    char	*buf=NULL;		/*I/O block buffer		*/
+    size_t	n, i;			/*counters			*/
+    ssize_t	nio;			/*I/O return value		*/
+    int		argno=1;		/*program argument number	*/
+    int		src, dst=-1;		/*source & destination files	*/
+    int		need_seek=FALSE;	/*destination needs to seek?	*/
+    int		need_write;		/*data needs to be written?	*/
+    /*struct stat	sb;			temporary file stat buffer	*/
+	/*struct _stati64 sb;*/
+	h5_stat_t sb;
+
+    int		verbose=FALSE;		/*display file names?		*/
+
+    const char	*src_gen_name;		/*general source name		*/
+    char	src_name[NAMELEN];	/*source member name		*/
+
+    int		src_is_family;		/*is source name a family name?	*/
+    int		src_membno=0;		/*source member number		*/
+
+    const char	*dst_gen_name;		/*general destination name	*/
+    char	dst_name[NAMELEN];	/*destination member name	*/
+    int		dst_is_family;		/*is dst name a family name?	*/
+    int		dst_membno=0;		/*destination member number	*/
+
+#if defined(WIN32) && ! defined (__MWERKS__)
+    _int64	left_overs=0;		/*amount of zeros left over	*/
+    _int64	src_offset=0;		/*offset in source member	*/
+    _int64	dst_offset=0;		/*offset in destination member	*/
+    _int64	src_size;		/*source logical member size	*/
+    _int64	src_act_size;		/*source actual member size	*/
+    _int64	dst_size=1 GB;		/*destination logical memb size	*/
+#else
+    off_t	left_overs=0;		/*amount of zeros left over	*/
+    off_t	src_offset=0;		/*offset in source member	*/
+    off_t	dst_offset=0;		/*offset in destination member	*/
+    off_t	src_size;		/*source logical member size	*/
+    off_t	src_act_size;		/*source actual member size	*/
+    off_t	dst_size=1 GB;		/*destination logical memb size	*/
+#endif
+
+    /*
+     * Get the program name from argv[0]. Use only the last component.
+     */
+    if ((prog_name=strrchr (argv[0], '/'))) prog_name++;
+    else prog_name = argv[0];
+
+    /*
+     * Parse switches.
+     */
+    while (argno<argc && '-'==argv[argno][0]) {
+	if (!strcmp (argv[argno], "-v")) {
+	    verbose = TRUE;
+	    argno++;
+	} else if (!strcmp(argv[argno], "-V")) {
+	    printf("This is %s version %u.%u release %u\n",
+		   prog_name, H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE);
+	    exit(0);
+	} else if ('b'==argv[argno][1]) {
+	    blk_size = get_size (prog_name, &argno, argc, argv);
+	} else if ('m'==argv[argno][1]) {
+	    dst_size = get_size (prog_name, &argno, argc, argv);
+	} else {
+	    usage (prog_name);
+	}
+    }
+
+    /*
+     * Get the name for the source file and open the first member.  The size
+     * of the first member determines the logical size of all the members.
+     */
+    if (argno>=argc) usage (prog_name);
+    src_gen_name = argv[argno++];
+    sprintf (src_name, src_gen_name, src_membno);
+    src_is_family = strcmp (src_name, src_gen_name);
+
+    if ((src=HDopen(src_name, O_RDONLY,0))<0) {
+	perror (src_name);
+	exit (1);
+    }
+
+    if (HDfstat(src, &sb)<0) {
+	perror ("fstat");
+	exit (1);
+    }
+    src_size = src_act_size = sb.st_size;
+    if (verbose) fprintf (stderr, "< %s\n", src_name);
+
+    /*
+     * Get the name for the destination file and open the first member.
+     */
+    if (argno>=argc) usage (prog_name);
+    dst_gen_name = argv[argno++];
+    sprintf (dst_name, dst_gen_name, dst_membno);
+    dst_is_family = strcmp (dst_name, dst_gen_name);
+
+    if ((dst=HDopen (dst_name, O_RDWR|O_CREAT|O_TRUNC, 0666))<0) {
+	perror (dst_name);
+	exit (1);
+    }
+    if (verbose) fprintf (stderr, "> %s\n", dst_name);
+
+    /* No more arguments */
+    if (argno<argc) usage (prog_name);
+
+    /* Now the real work, split the file */
+    buf = malloc (blk_size);
+    while (src_offset<src_size) {
+
+	/* Read a block.  The amount to read is the minimum of:
+	 *    1. The I/O block size
+	 *    2. What's left to write in the destination member
+	 *    3. Left over zeros or what's left in the source member.
+	 */
+	n = blk_size;
+	if (dst_is_family) n = (size_t)MIN((off_t)n, dst_size-dst_offset);
+	if (left_overs) {
+	    n = (size_t)MIN (n, left_overs);
+	    left_overs -= n;
+	    need_write = FALSE;
+	} else if (src_offset<src_act_size) {
+	    n = (size_t)MIN ((off_t)n, src_act_size-src_offset);
+	    if ((nio=read (src, buf, n))<0) {
+		perror ("read");
+		exit (1);
+	    } else if ((size_t)nio!=n) {
+		fprintf (stderr, "%s: short read\n", src_name);
+		exit (1);
+	    }
+	    for (i=0; i<n; i++) {
+		if (buf[i]) break;
+	    }
+	    need_write = (i<n);
+	} else {
+	    n = 0;
+	    left_overs = src_size - src_act_size;
+	    need_write = FALSE;
+	}
+
+	/*
+	 * If the block contains non-zero data then write it to the
+	 * destination, otherwise just remember that we'll have to do a seek
+	 * later in the destination when we finally get non-zero data.
+	 */
+	if (need_write) {
+	    if (need_seek && HDlseek (dst, dst_offset, SEEK_SET)<0) {
+		perror ("HDlseek");
+		exit (1);
+	    }
+	    if ((nio=write (dst, buf, n))<0) {
+		perror ("write");
+		exit (1);
+	    } else if ((size_t)nio!=n) {
+		fprintf (stderr, "%s: short write\n", dst_name);
+		exit (1);
+	    }
+	    need_seek = FALSE;
+	} else {
+	    need_seek = TRUE;
+	}
+
+	/*
+	 * Update the source offset and open the next source family member if
+	 * necessary.  The source stream ends at the first member which
+	 * cannot be opened because it doesn't exist.  At the end of the
+	 * source stream, update the destination offset and break out of the
+	 * loop.   The destination offset must be updated so we can fix
+	 * trailing holes.
+	 */
+	src_offset += n;
+	if (src_offset==src_act_size) {
+	    close (src);
+	    if (!src_is_family) {
+		dst_offset += n;
+		break;
+	    }
+	    sprintf (src_name, src_gen_name, ++src_membno);
+	    if ((src=HDopen (src_name, O_RDONLY,0))<0 && ENOENT==errno) {
+		dst_offset += n;
+		break;
+	    } else if (src<0) {
+		perror (src_name);
+		exit (1);
+	    }
+	    if (HDfstat (src, &sb)<0) {
+		perror ("fstat");
+		exit (1);
+	    }
+	    src_act_size = sb.st_size;
+	    if (src_act_size>src_size) {
+		fprintf (stderr, "%s: member truncated to %lu bytes\n",
+			 src_name, (unsigned long)src_size);
+	    }
+	    src_offset = 0;
+	    if (verbose) fprintf (stderr, "< %s\n", src_name);
+	}
+
+	/*
+	 * Update the destination offset, opening a new member if one will be
+	 * needed. The first member is extended to the logical member size
+	 * but other members might be smaller if they end with a hole.
+	 */
+	dst_offset += n;
+	if (dst_is_family && dst_offset==dst_size) {
+	    if (0==dst_membno) {
+		if (HDlseek (dst, dst_size-1, SEEK_SET)<0) {
+		    perror ("HDHDlseek");
+		    exit (1);
+		}
+		if (read (dst, buf, 1)<0) {
+		    perror ("read");
+		    exit (1);
+		}
+		if (HDlseek (dst, dst_size-1, SEEK_SET)<0) {
+		    perror ("HDlseek");
+		    exit (1);
+		}
+		if (write (dst, buf, 1)<0) {
+		    perror ("write");
+		    exit (1);
+		}
+	    }
+	    close (dst);
+	    sprintf (dst_name, dst_gen_name, ++dst_membno);
+	    if ((dst=HDopen (dst_name, O_RDWR|O_CREAT|O_TRUNC, 0666))<0) {
+		perror (dst_name);
+		exit (1);
+	    }
+	    dst_offset = 0;
+	    need_seek = FALSE;
+	    if (verbose) fprintf (stderr, "> %s\n", dst_name);
+	}
+    }
+
+    /*
+     * Make sure the last family member is the right size and then close it.
+     * The last member can't end with a hole or hdf5 will think that the
+     * family has been truncated.
+     */
+    if (need_seek) {
+	if (HDlseek (dst, dst_offset-1, SEEK_SET)<0) {
+	    perror ("HDlseek");
+	    exit (1);
+	}
+	if (read (dst, buf, 1)<0) {
+	    perror ("read");
+	    exit (1);
+	}
+	if (HDlseek (dst, dst_offset-1, SEEK_SET)<0) {
+	    perror ("HDlseek");
+	    exit (1);
+	}
+	if (write (dst, buf, 1)<0) {
+	    perror ("write");
+	    exit (1);
+	}
+    }
+    close (dst);
+
+    /* Free resources and return */
+    free (buf);
+    return 0;
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/file1.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/file1.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/file2.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/file2.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/file3.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/file3.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/file4.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/file4.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/file5.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/file5.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/file6.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/file6.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/file7.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/file7.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/file8.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/file8.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_10.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_10.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_10.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,50 @@
+#############################
+Expected output for 'h5diff -h'
+#############################
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_11.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_11.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_11.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5'
+#############################
+Dataset:     </g1/dset1> and </g1/dset1>
+4 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_12.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_12.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_12.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 g1/dset1 g1/dset2'
+#############################
+Dataset:     </g1/dset1> and </g1/dset2>
+4 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_13.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_13.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_13.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,11 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -r'
+#############################
+Dataset:     </g1/dset1> and </g1/dset1>
+position        dset1           dset1           difference          
+------------------------------------------------------------
+[ 0 1 ]          1.000000        1.100000        0.100000       
+[ 1 0 ]          1.000000        1.010000        0.010000       
+[ 1 1 ]          1.000000        1.001000        0.001000       
+[ 2 0 ]          1.000000        1.000100        0.000100       
+4 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_14.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_14.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_14.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,11 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -r g1/dset1 g1/dset2'
+#############################
+Dataset:     </g1/dset1> and </g1/dset2>
+position        dset1           dset2           difference          
+------------------------------------------------------------
+[ 0 1 ]          1.000000        1.100000        0.100000       
+[ 1 0 ]          1.000000        1.010000        0.010000       
+[ 1 1 ]          1.000000        1.001000        0.001000       
+[ 2 0 ]          1.000000        1.000100        0.000100       
+4 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_15.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_15.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_15.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,13 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -r -d 5 g1/dset3 g1/dset4'
+#############################
+Dataset:     </g1/dset3> and </g1/dset4>
+position        dset3           dset4           difference          
+------------------------------------------------------------
+[ 0 0 ]          100.000000      110.000000      10.000000      
+[ 0 1 ]          110.000000      100.000000      10.000000      
+[ 1 0 ]          100.000000      90.000000       10.000000      
+[ 1 1 ]          100.000000      80.000000       20.000000      
+[ 2 0 ]          100.000000      140.000000      40.000000      
+[ 2 1 ]          100.000000      200.000000      100.000000     
+6 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_16.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_16.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_16.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,13 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -r -p 0.05 g1/dset3 g1/dset4'
+#############################
+Dataset:     </g1/dset3> and </g1/dset4>
+position        dset3           dset4           difference      relative       
+------------------------------------------------------------------------
+[ 0 0 ]          100             110             10              0.1           
+[ 0 1 ]          110             100             10              0.09090909091 
+[ 1 0 ]          100             90              10              0.1           
+[ 1 1 ]          100             80              20              0.2           
+[ 2 0 ]          100             140             40              0.4           
+[ 2 1 ]          100             200             100             1             
+6 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_17.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_17.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_17.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,23 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -v'
+#############################
+
+file1     file2
+---------------------------------------
+    x      x    /g1            
+    x      x    /g1/dset1      
+           x    /g1/dset2      
+    x           /g1/dset3      
+           x    /g1/dset4      
+           x    /g2            
+
+Group:       </g1> and </g1>
+Dataset:     </g1/dset1> and </g1/dset1>
+position        dset1           dset1           difference          
+------------------------------------------------------------
+[ 0 1 ]          1.000000        1.100000        0.100000       
+[ 1 0 ]          1.000000        1.010000        0.010000       
+[ 1 1 ]          1.000000        1.001000        0.001000       
+[ 2 0 ]          1.000000        1.000100        0.000100       
+Group:       </> and </>
+4 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_18.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_18.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_18.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,3 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -q'
+#############################

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_20.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_20.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_20.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,8 @@
+#############################
+Expected output for 'h5diff file3.h5 file3.h5 -v dset group'
+#############################
+Comparison not possible: </dset> is of type H5G_DATASET and </group> is of type H5G_GROUP
+0 differences found
+--------------------------------
+Some objects are not comparable
+--------------------------------

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_21.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_21.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_21.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,8 @@
+#############################
+Expected output for 'h5diff file3.h5 file3.h5 -v dset link'
+#############################
+Comparison not possible: </dset> is of type H5G_DATASET and </link> is of type H5G_LINK
+0 differences found
+--------------------------------
+Some objects are not comparable
+--------------------------------

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_22.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_22.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_22.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,8 @@
+#############################
+Expected output for 'h5diff file3.h5 file3.h5 -v dset type'
+#############################
+Comparison not possible: </dset> is of type H5G_DATASET and </type> is of type H5G_TYPE
+0 differences found
+--------------------------------
+Some objects are not comparable
+--------------------------------

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_23.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_23.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_23.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file3.h5 file3.h5 -v group group'
+#############################
+Group:       </group> and </group>
+0 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_24.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_24.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_24.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file3.h5 file3.h5 -v type type'
+#############################
+Datatype:    </type> and </type>
+0 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_25.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_25.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_25.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file3.h5 file3.h5 -v link link'
+#############################
+Link:        </link> and </link>
+0 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_50.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_50.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_50.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#############################
+Expected output for 'h5diff file4.h5 file4.h5 -v dset0a dset0b'
+#############################
+Dataset:     </dset0a> and </dset0b>
+Warning: Different storage datatype
+</dset0a> has file datatype H5T_STD_I16LE
+</dset0b> has file datatype H5T_STD_I32LE
+Warning: Different storage datatype
+</dset0a> has file datatype H5T_STD_I16LE
+</dset0b> has file datatype H5T_STD_I32LE
+position        dset0a          dset0b          difference          
+------------------------------------------------------------
+[ 1 0 ]          1               3               2              
+[ 1 1 ]          1               4               3              
+[ 2 0 ]          1               5               4              
+[ 2 1 ]          1               6               5              
+4 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_51.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_51.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_51.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,11 @@
+#############################
+Expected output for 'h5diff file4.h5 file4.h5 -v dset1a dset1b'
+#############################
+Dataset:     </dset1a> and </dset1b>
+position        dset1a          dset1b          difference          
+------------------------------------------------------------
+[ 1 0 ]          1               3               2              
+[ 1 1 ]          1               4               3              
+[ 2 0 ]          1               5               4              
+[ 2 1 ]          1               6               5              
+4 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_52.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_52.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_52.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,11 @@
+#############################
+Expected output for 'h5diff file4.h5 file4.h5 -v dset2a dset2b'
+#############################
+Dataset:     </dset2a> and </dset2b>
+position        dset2a          dset2b          difference          
+------------------------------------------------------------
+[ 1 0 ]          1               3               2              
+[ 1 1 ]          1               4               3              
+[ 2 0 ]          1               5               4              
+[ 2 1 ]          1               6               5              
+4 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_53.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_53.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_53.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,11 @@
+#############################
+Expected output for 'h5diff file4.h5 file4.h5 -v dset3a dset4b'
+#############################
+Dataset:     </dset3a> and </dset4b>
+position        dset3a          dset4b          difference          
+------------------------------------------------------------
+[ 1 0 ]          1               3               2              
+[ 1 1 ]          1               4               3              
+[ 2 0 ]          1               5               4              
+[ 2 1 ]          1               6               5              
+4 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_54.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_54.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_54.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,11 @@
+#############################
+Expected output for 'h5diff file4.h5 file4.h5 -v dset4a dset4b'
+#############################
+Dataset:     </dset4a> and </dset4b>
+position        dset4a          dset4b          difference          
+------------------------------------------------------------
+[ 1 0 ]          1               3               2              
+[ 1 1 ]          1               4               3              
+[ 2 0 ]          1               5               4              
+[ 2 1 ]          1               6               5              
+4 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_55.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_55.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_55.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,11 @@
+#############################
+Expected output for 'h5diff file4.h5 file4.h5 -v dset5a dset5b'
+#############################
+Dataset:     </dset5a> and </dset5b>
+position        dset5a          dset5b          difference          
+------------------------------------------------------------
+[ 1 0 ]          1.000000        3.000000        2.000000       
+[ 1 1 ]          1.000000        4.000000        3.000000       
+[ 2 0 ]          1.000000        5.000000        4.000000       
+[ 2 1 ]          1.000000        6.000000        5.000000       
+4 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_56.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_56.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_56.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,11 @@
+#############################
+Expected output for 'h5diff file4.h5 file4.h5 -v dset6a dset6b'
+#############################
+Dataset:     </dset6a> and </dset6b>
+position        dset6a          dset6b          difference          
+------------------------------------------------------------
+[ 1 0 ]          1.000000        3.000000        2.000000       
+[ 1 1 ]          1.000000        4.000000        3.000000       
+[ 2 0 ]          1.000000        5.000000        4.000000       
+[ 2 1 ]          1.000000        6.000000        5.000000       
+4 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_57.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_57.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_57.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,15 @@
+#############################
+Expected output for 'h5diff file4.h5 file4.h5 -v dset7a dset7b'
+#############################
+Dataset:     </dset7a> and </dset7b>
+Warning: Different storage datatype
+</dset7a> has file datatype H5T_STD_I8LE
+</dset7b> has file datatype H5T_STD_U8LE
+Warning: Different storage datatype
+</dset7a> has file datatype H5T_STD_I8LE
+</dset7b> has file datatype H5T_STD_U8LE
+Comparison not supported: </dset7a> has sign H5T_SGN_2 and </dset7b> has sign H5T_SGN_NONE
+0 differences found
+--------------------------------
+Some objects are not comparable
+--------------------------------

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_600.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_600.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_600.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5'
+#############################
+Number of arguments is only 2
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_601.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_601.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_601.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -x'
+#############################
+-x is an invalid option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_602.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_602.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_602.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -d g1/dset3 g1/dset4'
+#############################
+<-d g1/dset3> is not a valid option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_603.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_603.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_603.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -d -4 g1/dset3 g1/dset4'
+#############################
+Not a valid -d option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_604.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_604.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_604.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -d 0 g1/dset3 g1/dset4'
+#############################
+<-d 0> is not a valid option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_605.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_605.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_605.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -d u g1/dset3 g1/dset4'
+#############################
+<-d u> is not a valid option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_606.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_606.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_606.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -d 0x1 g1/dset3 g1/dset4'
+#############################
+<-d 0x1> is not a valid option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_607.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_607.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_607.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -d 1 g1/dset3 g1/dset4'
+#############################
+Dataset:     </g1/dset3> and </g1/dset4>
+6 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_608.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_608.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_608.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -d 1 -d 2 g1/dset3 g1/dset4'
+#############################
+Dataset:     </g1/dset3> and </g1/dset4>
+6 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_609.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_609.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_609.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,4 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -d 200 g1/dset3 g1/dset4'
+#############################
+0 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_610.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_610.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_610.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -d 1 g1/dset3 g1/dset4'
+#############################
+Dataset:     </g1/dset3> and </g1/dset4>
+6 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_611.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_611.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_611.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -r -p g1/dset3 g1/dset4'
+#############################
+<-p g1/dset3> is not a valid option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_612.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_612.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_612.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -p -4 g1/dset3 g1/dset4'
+#############################
+Not a valid -p option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_613.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_613.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_613.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -p 0 g1/dset3 g1/dset4'
+#############################
+<-p 0> is not a valid option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_614.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_614.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_614.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -p u g1/dset3 g1/dset4'
+#############################
+<-p u> is not a valid option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_615.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_615.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_615.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -p 0x1 g1/dset3 g1/dset4'
+#############################
+<-p 0x1> is not a valid option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_616.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_616.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_616.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -p 0.21 g1/dset3 g1/dset4'
+#############################
+Dataset:     </g1/dset3> and </g1/dset4>
+2 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_617.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_617.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_617.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -p 0.21 -p 0.22 g1/dset3 g1/dset4'
+#############################
+Dataset:     </g1/dset3> and </g1/dset4>
+2 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_618.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_618.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_618.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,4 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -p 2 g1/dset3 g1/dset4'
+#############################
+0 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_619.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_619.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_619.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -p 0.005 g1/dset3 g1/dset4'
+#############################
+Dataset:     </g1/dset3> and </g1/dset4>
+6 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_620.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_620.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_620.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -n g1/dset3 g1/dset4'
+#############################
+<-n g1/dset3> is not a valid option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_621.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_621.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_621.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -n -4 g1/dset3 g1/dset4'
+#############################
+Not a valid -n option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_622.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_622.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_622.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -n 0 g1/dset3 g1/dset4'
+#############################
+<-n 0> is not a valid option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_623.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_623.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_623.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -n u g1/dset3 g1/dset4'
+#############################
+<-n u> is not a valid option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_624.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_624.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_624.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,51 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -n 0x1 g1/dset3 g1/dset4'
+#############################
+<-n 0x1> is not a valid option
+Usage: h5diff file1 file2 [OPTIONS] [obj1[obj2]] 
+
+file1             File name of the first HDF5 file
+file2             File name of the second HDF5 file
+[obj1]            Name of an HDF5 object, in absolute path
+[obj2]            Name of an HDF5 object, in absolute path
+[OPTIONS] are:
+[-h]              Print out this information
+[-r]              Report mode. Print the differences
+[-v]              Verbose mode. Print the differences, list of objects, warnings
+[-q]              Quiet mode. Do not do output
+[-n count]        Print difference up to count number
+[-d delta]        Print difference when it is greater than limit delta
+[-p relative]     Print difference when it is greater than a relative limit
+
+Items in [] are optional
+[obj1] and [obj2] are HDF5 objects (datasets, groups or datatypes)
+The 'count' value must be a positive integer
+The 'delta' and 'relative' values must be positive numbers
+The -d compare criteria is |a - b| > delta
+The -p compare criteria is |1 - b/a| > relative
+
+h5diff has four modes of output:
+ Normal mode: print the number of differences found and where they occured
+ Report mode: print the above plus the differences
+ Verbose mode: print the above plus a list of objects and warnings
+ Quiet mode: do not print output (h5diff always returns an exit code of 1 when differences are found)
+
+Examples of use:
+
+1) h5diff file1 file2 /g1/dset1 /g1/dset2
+
+   Compares object '/g1/dset1' in file1 with '/g1/dset2' in file2
+
+2) h5diff file1 file2 /g1/dset1
+
+   Compares object '/g1/dset1' in both files
+
+3) h5diff file1 file2
+
+   Compares all objects in both files
+
+Note)  file1 and file2 can be the same file. Use
+
+   h5diff file1 file1 /g1/dset1 /g1/dset2
+
+   to compare '/g1/dset1' and '/g1/dset2' in the same file

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_625.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_625.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_625.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -n 2 g1/dset3 g1/dset4'
+#############################
+Dataset:     </g1/dset3> and </g1/dset4>
+2 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_626.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_626.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_626.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -n 2 -n 3 g1/dset3 g1/dset4'
+#############################
+Dataset:     </g1/dset3> and </g1/dset4>
+3 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_627.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_627.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_627.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -n 200 g1/dset3 g1/dset4'
+#############################
+Dataset:     </g1/dset3> and </g1/dset4>
+6 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_628.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_628.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_628.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+Expected output for 'h5diff file1.h5 file2.h5 -n 1 g1/dset3 g1/dset4'
+#############################
+Dataset:     </g1/dset3> and </g1/dset4>
+1 differences found

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_629.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_629.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_629.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,6 @@
+#############################
+Expected output for 'h5diff file1.h6 file2.h6'
+#############################
+h5diff: <file1.h6>: unable to open file
+No common objects found. Files are not comparable.
+Use -v for a list of objects.

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_70.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_70.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_70.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1145 @@
+#############################
+Expected output for 'h5diff file5.h5 file6.h5 -v'
+#############################
+
+file1     file2
+---------------------------------------
+    x      x    /dset          
+    x      x    /g1            
+
+Dataset:     </dset> and </dset>
+</dset> and </dset> are empty datasets
+Group:       </g1> and </g1>
+Attribute:   <string of </g1>> and <string of </g1>>
+position        string of </g1> string of </g1> difference          
+------------------------------------------------------------
+[ 0 ]          a                z                
+[ 0 ]          b                z                
+[ 1 ]          d                z                
+[ 1 ]          e                z                
+4 differences found
+Attribute:   <bitfield of </g1>> and <bitfield of </g1>>
+position        bitfield of </g1> bitfield of </g1> difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+2 differences found
+Attribute:   <opaque of </g1>> and <opaque of </g1>>
+position        opaque of </g1> opaque of </g1> difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+2 differences found
+Attribute:   <compound of </g1>> and <compound of </g1>>
+position        compound of </g1> compound of </g1> difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 0 ]          2.000000        0.000000        2.000000       
+[ 1 ]          3               0               3              
+[ 1 ]          4.000000        0.000000        4.000000       
+4 differences found
+Attribute:   <enum of </g1>> and <enum of </g1>>
+position        enum of </g1>   enum of </g1>   difference          
+------------------------------------------------------------
+[ 0 ]          RED              GREEN            
+[ 1 ]          RED              GREEN            
+2 differences found
+Attribute:   <vlen of </g1>> and <vlen of </g1>>
+position        vlen of </g1>   vlen of </g1>   difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+[ 1 ]          3               0               3              
+3 differences found
+Attribute:   <array of </g1>> and <array of </g1>>
+position        array of </g1>  array of </g1>  difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 0 ]          2               0               2              
+[ 0 ]          3               0               3              
+[ 1 ]          4               0               4              
+[ 1 ]          5               0               5              
+[ 1 ]          6               0               6              
+6 differences found
+Attribute:   <integer of </g1>> and <integer of </g1>>
+position        integer of </g1> integer of </g1> difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+2 differences found
+Attribute:   <float of </g1>> and <float of </g1>>
+position        float of </g1>  float of </g1>  difference          
+------------------------------------------------------------
+[ 0 ]          1.000000        0.000000        1.000000       
+[ 1 ]          2.000000        0.000000        2.000000       
+2 differences found
+Attribute:   <string2D of </g1>> and <string2D of </g1>>
+position        string2D of </g1> string2D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 ]          a                z                
+[ 0 0 ]          b                z                
+[ 0 1 ]          c                z                
+[ 0 1 ]          d                z                
+[ 1 0 ]          e                z                
+[ 1 0 ]          f                z                
+[ 1 1 ]          g                z                
+[ 1 1 ]          h                z                
+[ 2 0 ]          i                z                
+[ 2 0 ]          j                z                
+[ 2 1 ]          k                z                
+[ 2 1 ]          l                z                
+12 differences found
+Attribute:   <bitfield2D of </g1>> and <bitfield2D of </g1>>
+position        bitfield2D of </g1> bitfield2D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 1 ]          2               0               2              
+[ 1 0 ]          3               0               3              
+[ 1 1 ]          4               0               4              
+[ 2 0 ]          5               0               5              
+[ 2 1 ]          6               0               6              
+6 differences found
+Attribute:   <opaque2D of </g1>> and <opaque2D of </g1>>
+position        opaque2D of </g1> opaque2D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 1 ]          2               0               2              
+[ 1 0 ]          3               0               3              
+[ 1 1 ]          4               0               4              
+[ 2 0 ]          5               0               5              
+[ 2 1 ]          6               0               6              
+6 differences found
+Attribute:   <compound2D of </g1>> and <compound2D of </g1>>
+position        compound2D of </g1> compound2D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 0 ]          2.000000        0.000000        2.000000       
+[ 0 1 ]          3               0               3              
+[ 0 1 ]          4.000000        0.000000        4.000000       
+[ 1 0 ]          5               0               5              
+[ 1 0 ]          6.000000        0.000000        6.000000       
+[ 1 1 ]          7               0               7              
+[ 1 1 ]          8.000000        0.000000        8.000000       
+[ 2 0 ]          9               0               9              
+[ 2 0 ]          10.000000       0.000000        10.000000      
+[ 2 1 ]          11              0               11             
+[ 2 1 ]          12.000000       0.000000        12.000000      
+12 differences found
+Attribute:   <enum2D of </g1>> and <enum2D of </g1>>
+position        enum2D of </g1> enum2D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 ]          RED              GREEN            
+[ 0 1 ]          RED              GREEN            
+[ 1 0 ]          RED              GREEN            
+[ 1 1 ]          RED              GREEN            
+[ 2 0 ]          RED              GREEN            
+[ 2 1 ]          RED              GREEN            
+6 differences found
+Attribute:   <vlen2D of </g1>> and <vlen2D of </g1>>
+position        vlen2D of </g1> vlen2D of </g1> difference          
+------------------------------------------------------------
+[ 0 1 ]          1               0               1              
+[ 1 0 ]          2               0               2              
+[ 1 0 ]          3               0               3              
+[ 1 1 ]          4               0               4              
+[ 1 1 ]          5               0               5              
+[ 2 0 ]          6               0               6              
+[ 2 0 ]          7               0               7              
+[ 2 0 ]          8               0               8              
+[ 2 1 ]          9               0               9              
+[ 2 1 ]          10              0               10             
+[ 2 1 ]          11              0               11             
+11 differences found
+Attribute:   <array2D of </g1>> and <array2D of </g1>>
+position        array2D of </g1> array2D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 0 ]          2               0               2              
+[ 0 0 ]          3               0               3              
+[ 0 1 ]          4               0               4              
+[ 0 1 ]          5               0               5              
+[ 0 1 ]          6               0               6              
+[ 1 0 ]          7               0               7              
+[ 1 0 ]          8               0               8              
+[ 1 0 ]          9               0               9              
+[ 1 1 ]          10              0               10             
+[ 1 1 ]          11              0               11             
+[ 1 1 ]          12              0               12             
+[ 2 0 ]          13              0               13             
+[ 2 0 ]          14              0               14             
+[ 2 0 ]          15              0               15             
+[ 2 1 ]          16              0               16             
+[ 2 1 ]          17              0               17             
+[ 2 1 ]          18              0               18             
+18 differences found
+Attribute:   <integer2D of </g1>> and <integer2D of </g1>>
+position        integer2D of </g1> integer2D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 1 ]          2               0               2              
+[ 1 0 ]          3               0               3              
+[ 1 1 ]          4               0               4              
+[ 2 0 ]          5               0               5              
+[ 2 1 ]          6               0               6              
+6 differences found
+Attribute:   <float2D of </g1>> and <float2D of </g1>>
+position        float2D of </g1> float2D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 ]          1.000000        0.000000        1.000000       
+[ 0 1 ]          2.000000        0.000000        2.000000       
+[ 1 0 ]          3.000000        0.000000        3.000000       
+[ 1 1 ]          4.000000        0.000000        4.000000       
+[ 2 0 ]          5.000000        0.000000        5.000000       
+[ 2 1 ]          6.000000        0.000000        6.000000       
+6 differences found
+Attribute:   <string3D of </g1>> and <string3D of </g1>>
+position        string3D of </g1> string3D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 0 ]          a                z                
+[ 0 0 0 ]          b                z                
+[ 0 0 1 ]          c                z                
+[ 0 0 1 ]          d                z                
+[ 0 1 0 ]          e                z                
+[ 0 1 0 ]          f                z                
+[ 0 1 1 ]          g                z                
+[ 0 1 1 ]          h                z                
+[ 0 2 0 ]          i                z                
+[ 0 2 0 ]          j                z                
+[ 0 2 1 ]          k                z                
+[ 0 2 1 ]          l                z                
+[ 1 0 0 ]          m                z                
+[ 1 0 0 ]          n                z                
+[ 1 0 1 ]          p                z                
+[ 1 0 1 ]          q                z                
+[ 1 1 0 ]          r                z                
+[ 1 1 0 ]          s                z                
+[ 1 1 1 ]          t                z                
+[ 1 1 1 ]          u                z                
+[ 1 2 0 ]          v                z                
+[ 1 2 0 ]          w                z                
+[ 1 2 1 ]          x                z                
+[ 2 0 0 ]          A                z                
+[ 2 0 0 ]          B                z                
+[ 2 0 1 ]          C                z                
+[ 2 0 1 ]          D                z                
+[ 2 1 0 ]          E                z                
+[ 2 1 0 ]          F                z                
+[ 2 1 1 ]          G                z                
+[ 2 1 1 ]          H                z                
+[ 2 2 0 ]          I                z                
+[ 2 2 0 ]          J                z                
+[ 2 2 1 ]          K                z                
+[ 2 2 1 ]          L                z                
+[ 3 0 0 ]          M                z                
+[ 3 0 0 ]          N                z                
+[ 3 0 1 ]          P                z                
+[ 3 0 1 ]          Q                z                
+[ 3 1 0 ]          R                z                
+[ 3 1 0 ]          S                z                
+[ 3 1 1 ]          T                z                
+[ 3 1 1 ]          U                z                
+[ 3 2 0 ]          V                z                
+[ 3 2 0 ]          W                z                
+[ 3 2 1 ]          X                z                
+[ 3 2 1 ]          Z                z                
+47 differences found
+Attribute:   <bitfield3D of </g1>> and <bitfield3D of </g1>>
+position        bitfield3D of </g1> bitfield3D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 1 ]          2               0               2              
+[ 0 1 0 ]          3               0               3              
+[ 0 1 1 ]          4               0               4              
+[ 0 2 0 ]          5               0               5              
+[ 0 2 1 ]          6               0               6              
+[ 1 0 0 ]          7               0               7              
+[ 1 0 1 ]          8               0               8              
+[ 1 1 0 ]          9               0               9              
+[ 1 1 1 ]          10              0               10             
+[ 1 2 0 ]          11              0               11             
+[ 1 2 1 ]          12              0               12             
+[ 2 0 0 ]          13              0               13             
+[ 2 0 1 ]          14              0               14             
+[ 2 1 0 ]          15              0               15             
+[ 2 1 1 ]          16              0               16             
+[ 2 2 0 ]          17              0               17             
+[ 2 2 1 ]          18              0               18             
+[ 3 0 0 ]          19              0               19             
+[ 3 0 1 ]          20              0               20             
+[ 3 1 0 ]          21              0               21             
+[ 3 1 1 ]          22              0               22             
+[ 3 2 0 ]          23              0               23             
+[ 3 2 1 ]          24              0               24             
+24 differences found
+Attribute:   <opaque3D of </g1>> and <opaque3D of </g1>>
+position        opaque3D of </g1> opaque3D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 1 ]          2               0               2              
+[ 0 1 0 ]          3               0               3              
+[ 0 1 1 ]          4               0               4              
+[ 0 2 0 ]          5               0               5              
+[ 0 2 1 ]          6               0               6              
+[ 1 0 0 ]          7               0               7              
+[ 1 0 1 ]          8               0               8              
+[ 1 1 0 ]          9               0               9              
+[ 1 1 1 ]          10              0               10             
+[ 1 2 0 ]          11              0               11             
+[ 1 2 1 ]          12              0               12             
+[ 2 0 0 ]          13              0               13             
+[ 2 0 1 ]          14              0               14             
+[ 2 1 0 ]          15              0               15             
+[ 2 1 1 ]          16              0               16             
+[ 2 2 0 ]          17              0               17             
+[ 2 2 1 ]          18              0               18             
+[ 3 0 0 ]          19              0               19             
+[ 3 0 1 ]          20              0               20             
+[ 3 1 0 ]          21              0               21             
+[ 3 1 1 ]          22              0               22             
+[ 3 2 0 ]          23              0               23             
+[ 3 2 1 ]          24              0               24             
+24 differences found
+Attribute:   <compound3D of </g1>> and <compound3D of </g1>>
+position        compound3D of </g1> compound3D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 0 ]          2.000000        0.000000        2.000000       
+[ 0 0 1 ]          3               0               3              
+[ 0 0 1 ]          4.000000        0.000000        4.000000       
+[ 0 1 0 ]          5               0               5              
+[ 0 1 0 ]          6.000000        0.000000        6.000000       
+[ 0 1 1 ]          7               0               7              
+[ 0 1 1 ]          8.000000        0.000000        8.000000       
+[ 0 2 0 ]          9               0               9              
+[ 0 2 0 ]          10.000000       0.000000        10.000000      
+[ 0 2 1 ]          11              0               11             
+[ 0 2 1 ]          12.000000       0.000000        12.000000      
+[ 1 0 0 ]          13              0               13             
+[ 1 0 0 ]          14.000000       0.000000        14.000000      
+[ 1 0 1 ]          15              0               15             
+[ 1 0 1 ]          16.000000       0.000000        16.000000      
+[ 1 1 0 ]          17              0               17             
+[ 1 1 0 ]          18.000000       0.000000        18.000000      
+[ 1 1 1 ]          19              0               19             
+[ 1 1 1 ]          20.000000       0.000000        20.000000      
+[ 1 2 0 ]          21              0               21             
+[ 1 2 0 ]          22.000000       0.000000        22.000000      
+[ 1 2 1 ]          23              0               23             
+[ 1 2 1 ]          24.000000       0.000000        24.000000      
+[ 2 0 0 ]          25              0               25             
+[ 2 0 0 ]          26.000000       0.000000        26.000000      
+[ 2 0 1 ]          27              0               27             
+[ 2 0 1 ]          28.000000       0.000000        28.000000      
+[ 2 1 0 ]          29              0               29             
+[ 2 1 0 ]          30.000000       0.000000        30.000000      
+[ 2 1 1 ]          31              0               31             
+[ 2 1 1 ]          32.000000       0.000000        32.000000      
+[ 2 2 0 ]          33              0               33             
+[ 2 2 0 ]          34.000000       0.000000        34.000000      
+[ 2 2 1 ]          35              0               35             
+[ 2 2 1 ]          36.000000       0.000000        36.000000      
+[ 3 0 0 ]          37              0               37             
+[ 3 0 0 ]          38.000000       0.000000        38.000000      
+[ 3 0 1 ]          39              0               39             
+[ 3 0 1 ]          40.000000       0.000000        40.000000      
+[ 3 1 0 ]          41              0               41             
+[ 3 1 0 ]          42.000000       0.000000        42.000000      
+[ 3 1 1 ]          43              0               43             
+[ 3 1 1 ]          44.000000       0.000000        44.000000      
+[ 3 2 0 ]          45              0               45             
+[ 3 2 0 ]          46.000000       0.000000        46.000000      
+[ 3 2 1 ]          47              0               47             
+[ 3 2 1 ]          48.000000       0.000000        48.000000      
+48 differences found
+Attribute:   <enum3D of </g1>> and <enum3D of </g1>>
+position        enum3D of </g1> enum3D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 0 ]          GREEN            RED              
+[ 0 0 1 ]          GREEN            RED              
+[ 0 1 0 ]          GREEN            RED              
+[ 0 1 1 ]          GREEN            RED              
+[ 0 2 0 ]          GREEN            RED              
+[ 0 2 1 ]          GREEN            RED              
+[ 1 0 0 ]          GREEN            RED              
+[ 1 0 1 ]          GREEN            RED              
+[ 1 1 0 ]          GREEN            RED              
+[ 1 1 1 ]          GREEN            RED              
+[ 1 2 0 ]          GREEN            RED              
+[ 1 2 1 ]          GREEN            RED              
+[ 2 0 0 ]          GREEN            RED              
+[ 2 0 1 ]          GREEN            RED              
+[ 2 1 0 ]          GREEN            RED              
+[ 2 1 1 ]          GREEN            RED              
+[ 2 2 0 ]          GREEN            RED              
+[ 2 2 1 ]          GREEN            RED              
+[ 3 0 0 ]          GREEN            RED              
+[ 3 0 1 ]          GREEN            RED              
+[ 3 1 0 ]          GREEN            RED              
+[ 3 1 1 ]          GREEN            RED              
+[ 3 2 0 ]          GREEN            RED              
+[ 3 2 1 ]          GREEN            RED              
+24 differences found
+Attribute:   <vlen3D of </g1>> and <vlen3D of </g1>>
+position        vlen3D of </g1> vlen3D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 1 ]          1               0               1              
+[ 0 1 0 ]          2               0               2              
+[ 0 1 1 ]          3               0               3              
+[ 0 2 0 ]          4               0               4              
+[ 0 2 1 ]          5               0               5              
+[ 1 0 0 ]          6               0               6              
+[ 1 0 0 ]          7               0               7              
+[ 1 0 1 ]          8               0               8              
+[ 1 0 1 ]          9               0               9              
+[ 1 1 0 ]          10              0               10             
+[ 1 1 0 ]          11              0               11             
+[ 1 1 1 ]          12              0               12             
+[ 1 1 1 ]          13              0               13             
+[ 1 2 0 ]          14              0               14             
+[ 1 2 0 ]          15              0               15             
+[ 1 2 1 ]          16              0               16             
+[ 1 2 1 ]          17              0               17             
+[ 2 0 0 ]          18              0               18             
+[ 2 0 0 ]          19              0               19             
+[ 2 0 0 ]          20              0               20             
+[ 2 0 1 ]          21              0               21             
+[ 2 0 1 ]          22              0               22             
+[ 2 0 1 ]          23              0               23             
+[ 2 1 0 ]          24              0               24             
+[ 2 1 0 ]          25              0               25             
+[ 2 1 0 ]          26              0               26             
+[ 2 1 1 ]          27              0               27             
+[ 2 1 1 ]          28              0               28             
+[ 2 1 1 ]          29              0               29             
+[ 2 2 0 ]          30              0               30             
+[ 2 2 0 ]          31              0               31             
+[ 2 2 0 ]          32              0               32             
+[ 2 2 1 ]          33              0               33             
+[ 2 2 1 ]          34              0               34             
+[ 2 2 1 ]          35              0               35             
+[ 3 0 0 ]          36              0               36             
+[ 3 0 0 ]          37              0               37             
+[ 3 0 0 ]          38              0               38             
+[ 3 0 0 ]          39              0               39             
+[ 3 0 1 ]          40              0               40             
+[ 3 0 1 ]          41              0               41             
+[ 3 0 1 ]          42              0               42             
+[ 3 0 1 ]          43              0               43             
+[ 3 1 0 ]          44              0               44             
+[ 3 1 0 ]          45              0               45             
+[ 3 1 0 ]          46              0               46             
+[ 3 1 0 ]          47              0               47             
+[ 3 1 1 ]          48              0               48             
+[ 3 1 1 ]          49              0               49             
+[ 3 1 1 ]          50              0               50             
+[ 3 1 1 ]          51              0               51             
+[ 3 2 0 ]          52              0               52             
+[ 3 2 0 ]          53              0               53             
+[ 3 2 0 ]          54              0               54             
+[ 3 2 0 ]          55              0               55             
+[ 3 2 1 ]          56              0               56             
+[ 3 2 1 ]          57              0               57             
+[ 3 2 1 ]          58              0               58             
+[ 3 2 1 ]          59              0               59             
+59 differences found
+Attribute:   <array3D of </g1>> and <array3D of </g1>>
+position        array3D of </g1> array3D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 0 ]          2               0               2              
+[ 0 0 0 ]          3               0               3              
+[ 0 0 1 ]          4               0               4              
+[ 0 0 1 ]          5               0               5              
+[ 0 0 1 ]          6               0               6              
+[ 0 1 0 ]          7               0               7              
+[ 0 1 0 ]          8               0               8              
+[ 0 1 0 ]          9               0               9              
+[ 0 1 1 ]          10              0               10             
+[ 0 1 1 ]          11              0               11             
+[ 0 1 1 ]          12              0               12             
+[ 0 2 0 ]          13              0               13             
+[ 0 2 0 ]          14              0               14             
+[ 0 2 0 ]          15              0               15             
+[ 0 2 1 ]          16              0               16             
+[ 0 2 1 ]          17              0               17             
+[ 0 2 1 ]          18              0               18             
+[ 1 0 0 ]          19              0               19             
+[ 1 0 0 ]          20              0               20             
+[ 1 0 0 ]          21              0               21             
+[ 1 0 1 ]          22              0               22             
+[ 1 0 1 ]          23              0               23             
+[ 1 0 1 ]          24              0               24             
+[ 1 1 0 ]          25              0               25             
+[ 1 1 0 ]          26              0               26             
+[ 1 1 0 ]          27              0               27             
+[ 1 1 1 ]          28              0               28             
+[ 1 1 1 ]          29              0               29             
+[ 1 1 1 ]          30              0               30             
+[ 1 2 0 ]          31              0               31             
+[ 1 2 0 ]          32              0               32             
+[ 1 2 0 ]          33              0               33             
+[ 1 2 1 ]          34              0               34             
+[ 1 2 1 ]          35              0               35             
+[ 1 2 1 ]          36              0               36             
+[ 2 0 0 ]          37              0               37             
+[ 2 0 0 ]          38              0               38             
+[ 2 0 0 ]          39              0               39             
+[ 2 0 1 ]          40              0               40             
+[ 2 0 1 ]          41              0               41             
+[ 2 0 1 ]          42              0               42             
+[ 2 1 0 ]          43              0               43             
+[ 2 1 0 ]          44              0               44             
+[ 2 1 0 ]          45              0               45             
+[ 2 1 1 ]          46              0               46             
+[ 2 1 1 ]          47              0               47             
+[ 2 1 1 ]          48              0               48             
+[ 2 2 0 ]          49              0               49             
+[ 2 2 0 ]          50              0               50             
+[ 2 2 0 ]          51              0               51             
+[ 2 2 1 ]          52              0               52             
+[ 2 2 1 ]          53              0               53             
+[ 2 2 1 ]          54              0               54             
+[ 3 0 0 ]          55              0               55             
+[ 3 0 0 ]          56              0               56             
+[ 3 0 0 ]          57              0               57             
+[ 3 0 1 ]          58              0               58             
+[ 3 0 1 ]          59              0               59             
+[ 3 0 1 ]          60              0               60             
+[ 3 1 0 ]          61              0               61             
+[ 3 1 0 ]          62              0               62             
+[ 3 1 0 ]          63              0               63             
+[ 3 1 1 ]          64              0               64             
+[ 3 1 1 ]          65              0               65             
+[ 3 1 1 ]          66              0               66             
+[ 3 2 0 ]          67              0               67             
+[ 3 2 0 ]          68              0               68             
+[ 3 2 0 ]          69              0               69             
+[ 3 2 1 ]          70              0               70             
+[ 3 2 1 ]          71              0               71             
+[ 3 2 1 ]          72              0               72             
+72 differences found
+Attribute:   <integer3D of </g1>> and <integer3D of </g1>>
+position        integer3D of </g1> integer3D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 1 ]          2               0               2              
+[ 0 1 0 ]          3               0               3              
+[ 0 1 1 ]          4               0               4              
+[ 0 2 0 ]          5               0               5              
+[ 0 2 1 ]          6               0               6              
+[ 1 0 0 ]          7               0               7              
+[ 1 0 1 ]          8               0               8              
+[ 1 1 0 ]          9               0               9              
+[ 1 1 1 ]          10              0               10             
+[ 1 2 0 ]          11              0               11             
+[ 1 2 1 ]          12              0               12             
+[ 2 0 0 ]          13              0               13             
+[ 2 0 1 ]          14              0               14             
+[ 2 1 0 ]          15              0               15             
+[ 2 1 1 ]          16              0               16             
+[ 2 2 0 ]          17              0               17             
+[ 2 2 1 ]          18              0               18             
+[ 3 0 0 ]          19              0               19             
+[ 3 0 1 ]          20              0               20             
+[ 3 1 0 ]          21              0               21             
+[ 3 1 1 ]          22              0               22             
+[ 3 2 0 ]          23              0               23             
+[ 3 2 1 ]          24              0               24             
+24 differences found
+Attribute:   <float3D of </g1>> and <float3D of </g1>>
+position        float3D of </g1> float3D of </g1> difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1.000000        0.000000        1.000000       
+[ 0 0 1 ]          2.000000        0.000000        2.000000       
+[ 0 1 0 ]          3.000000        0.000000        3.000000       
+[ 0 1 1 ]          4.000000        0.000000        4.000000       
+[ 0 2 0 ]          5.000000        0.000000        5.000000       
+[ 0 2 1 ]          6.000000        0.000000        6.000000       
+[ 1 0 0 ]          7.000000        0.000000        7.000000       
+[ 1 0 1 ]          8.000000        0.000000        8.000000       
+[ 1 1 0 ]          9.000000        0.000000        9.000000       
+[ 1 1 1 ]          10.000000       0.000000        10.000000      
+[ 1 2 0 ]          11.000000       0.000000        11.000000      
+[ 1 2 1 ]          12.000000       0.000000        12.000000      
+[ 2 0 0 ]          13.000000       0.000000        13.000000      
+[ 2 0 1 ]          14.000000       0.000000        14.000000      
+[ 2 1 0 ]          15.000000       0.000000        15.000000      
+[ 2 1 1 ]          16.000000       0.000000        16.000000      
+[ 2 2 0 ]          17.000000       0.000000        17.000000      
+[ 2 2 1 ]          18.000000       0.000000        18.000000      
+[ 3 0 0 ]          19.000000       0.000000        19.000000      
+[ 3 0 1 ]          20.000000       0.000000        20.000000      
+[ 3 1 0 ]          21.000000       0.000000        21.000000      
+[ 3 1 1 ]          22.000000       0.000000        22.000000      
+[ 3 2 0 ]          23.000000       0.000000        23.000000      
+[ 3 2 1 ]          24.000000       0.000000        24.000000      
+24 differences found
+Group:       </> and </>
+Attribute:   <string of </>> and <string of </>>
+position        string of </>   string of </>   difference          
+------------------------------------------------------------
+[ 0 ]          a                z                
+[ 0 ]          b                z                
+[ 1 ]          d                z                
+[ 1 ]          e                z                
+4 differences found
+Attribute:   <bitfield of </>> and <bitfield of </>>
+position        bitfield of </> bitfield of </> difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+2 differences found
+Attribute:   <opaque of </>> and <opaque of </>>
+position        opaque of </>   opaque of </>   difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+2 differences found
+Attribute:   <compound of </>> and <compound of </>>
+position        compound of </> compound of </> difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 0 ]          2.000000        0.000000        2.000000       
+[ 1 ]          3               0               3              
+[ 1 ]          4.000000        0.000000        4.000000       
+4 differences found
+Attribute:   <enum of </>> and <enum of </>>
+position        enum of </>     enum of </>     difference          
+------------------------------------------------------------
+[ 0 ]          RED              GREEN            
+[ 1 ]          RED              GREEN            
+2 differences found
+Attribute:   <vlen of </>> and <vlen of </>>
+position        vlen of </>     vlen of </>     difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+[ 1 ]          3               0               3              
+3 differences found
+Attribute:   <array of </>> and <array of </>>
+position        array of </>    array of </>    difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 0 ]          2               0               2              
+[ 0 ]          3               0               3              
+[ 1 ]          4               0               4              
+[ 1 ]          5               0               5              
+[ 1 ]          6               0               6              
+6 differences found
+Attribute:   <integer of </>> and <integer of </>>
+position        integer of </>  integer of </>  difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+2 differences found
+Attribute:   <float of </>> and <float of </>>
+position        float of </>    float of </>    difference          
+------------------------------------------------------------
+[ 0 ]          1.000000        0.000000        1.000000       
+[ 1 ]          2.000000        0.000000        2.000000       
+2 differences found
+Attribute:   <string2D of </>> and <string2D of </>>
+position        string2D of </> string2D of </> difference          
+------------------------------------------------------------
+[ 0 0 ]          a                z                
+[ 0 0 ]          b                z                
+[ 0 1 ]          c                z                
+[ 0 1 ]          d                z                
+[ 1 0 ]          e                z                
+[ 1 0 ]          f                z                
+[ 1 1 ]          g                z                
+[ 1 1 ]          h                z                
+[ 2 0 ]          i                z                
+[ 2 0 ]          j                z                
+[ 2 1 ]          k                z                
+[ 2 1 ]          l                z                
+12 differences found
+Attribute:   <bitfield2D of </>> and <bitfield2D of </>>
+position        bitfield2D of </> bitfield2D of </> difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 1 ]          2               0               2              
+[ 1 0 ]          3               0               3              
+[ 1 1 ]          4               0               4              
+[ 2 0 ]          5               0               5              
+[ 2 1 ]          6               0               6              
+6 differences found
+Attribute:   <opaque2D of </>> and <opaque2D of </>>
+position        opaque2D of </> opaque2D of </> difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 1 ]          2               0               2              
+[ 1 0 ]          3               0               3              
+[ 1 1 ]          4               0               4              
+[ 2 0 ]          5               0               5              
+[ 2 1 ]          6               0               6              
+6 differences found
+Attribute:   <compound2D of </>> and <compound2D of </>>
+position        compound2D of </> compound2D of </> difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 0 ]          2.000000        0.000000        2.000000       
+[ 0 1 ]          3               0               3              
+[ 0 1 ]          4.000000        0.000000        4.000000       
+[ 1 0 ]          5               0               5              
+[ 1 0 ]          6.000000        0.000000        6.000000       
+[ 1 1 ]          7               0               7              
+[ 1 1 ]          8.000000        0.000000        8.000000       
+[ 2 0 ]          9               0               9              
+[ 2 0 ]          10.000000       0.000000        10.000000      
+[ 2 1 ]          11              0               11             
+[ 2 1 ]          12.000000       0.000000        12.000000      
+12 differences found
+Attribute:   <enum2D of </>> and <enum2D of </>>
+position        enum2D of </>   enum2D of </>   difference          
+------------------------------------------------------------
+[ 0 0 ]          RED              GREEN            
+[ 0 1 ]          RED              GREEN            
+[ 1 0 ]          RED              GREEN            
+[ 1 1 ]          RED              GREEN            
+[ 2 0 ]          RED              GREEN            
+[ 2 1 ]          RED              GREEN            
+6 differences found
+Attribute:   <vlen2D of </>> and <vlen2D of </>>
+position        vlen2D of </>   vlen2D of </>   difference          
+------------------------------------------------------------
+[ 0 1 ]          1               0               1              
+[ 1 0 ]          2               0               2              
+[ 1 0 ]          3               0               3              
+[ 1 1 ]          4               0               4              
+[ 1 1 ]          5               0               5              
+[ 2 0 ]          6               0               6              
+[ 2 0 ]          7               0               7              
+[ 2 0 ]          8               0               8              
+[ 2 1 ]          9               0               9              
+[ 2 1 ]          10              0               10             
+[ 2 1 ]          11              0               11             
+11 differences found
+Attribute:   <array2D of </>> and <array2D of </>>
+position        array2D of </>  array2D of </>  difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 0 ]          2               0               2              
+[ 0 0 ]          3               0               3              
+[ 0 1 ]          4               0               4              
+[ 0 1 ]          5               0               5              
+[ 0 1 ]          6               0               6              
+[ 1 0 ]          7               0               7              
+[ 1 0 ]          8               0               8              
+[ 1 0 ]          9               0               9              
+[ 1 1 ]          10              0               10             
+[ 1 1 ]          11              0               11             
+[ 1 1 ]          12              0               12             
+[ 2 0 ]          13              0               13             
+[ 2 0 ]          14              0               14             
+[ 2 0 ]          15              0               15             
+[ 2 1 ]          16              0               16             
+[ 2 1 ]          17              0               17             
+[ 2 1 ]          18              0               18             
+18 differences found
+Attribute:   <integer2D of </>> and <integer2D of </>>
+position        integer2D of </> integer2D of </> difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 1 ]          2               0               2              
+[ 1 0 ]          3               0               3              
+[ 1 1 ]          4               0               4              
+[ 2 0 ]          5               0               5              
+[ 2 1 ]          6               0               6              
+6 differences found
+Attribute:   <float2D of </>> and <float2D of </>>
+position        float2D of </>  float2D of </>  difference          
+------------------------------------------------------------
+[ 0 0 ]          1.000000        0.000000        1.000000       
+[ 0 1 ]          2.000000        0.000000        2.000000       
+[ 1 0 ]          3.000000        0.000000        3.000000       
+[ 1 1 ]          4.000000        0.000000        4.000000       
+[ 2 0 ]          5.000000        0.000000        5.000000       
+[ 2 1 ]          6.000000        0.000000        6.000000       
+6 differences found
+Attribute:   <string3D of </>> and <string3D of </>>
+position        string3D of </> string3D of </> difference          
+------------------------------------------------------------
+[ 0 0 0 ]          a                z                
+[ 0 0 0 ]          b                z                
+[ 0 0 1 ]          c                z                
+[ 0 0 1 ]          d                z                
+[ 0 1 0 ]          e                z                
+[ 0 1 0 ]          f                z                
+[ 0 1 1 ]          g                z                
+[ 0 1 1 ]          h                z                
+[ 0 2 0 ]          i                z                
+[ 0 2 0 ]          j                z                
+[ 0 2 1 ]          k                z                
+[ 0 2 1 ]          l                z                
+[ 1 0 0 ]          m                z                
+[ 1 0 0 ]          n                z                
+[ 1 0 1 ]          p                z                
+[ 1 0 1 ]          q                z                
+[ 1 1 0 ]          r                z                
+[ 1 1 0 ]          s                z                
+[ 1 1 1 ]          t                z                
+[ 1 1 1 ]          u                z                
+[ 1 2 0 ]          v                z                
+[ 1 2 0 ]          w                z                
+[ 1 2 1 ]          x                z                
+[ 2 0 0 ]          A                z                
+[ 2 0 0 ]          B                z                
+[ 2 0 1 ]          C                z                
+[ 2 0 1 ]          D                z                
+[ 2 1 0 ]          E                z                
+[ 2 1 0 ]          F                z                
+[ 2 1 1 ]          G                z                
+[ 2 1 1 ]          H                z                
+[ 2 2 0 ]          I                z                
+[ 2 2 0 ]          J                z                
+[ 2 2 1 ]          K                z                
+[ 2 2 1 ]          L                z                
+[ 3 0 0 ]          M                z                
+[ 3 0 0 ]          N                z                
+[ 3 0 1 ]          P                z                
+[ 3 0 1 ]          Q                z                
+[ 3 1 0 ]          R                z                
+[ 3 1 0 ]          S                z                
+[ 3 1 1 ]          T                z                
+[ 3 1 1 ]          U                z                
+[ 3 2 0 ]          V                z                
+[ 3 2 0 ]          W                z                
+[ 3 2 1 ]          X                z                
+[ 3 2 1 ]          Z                z                
+47 differences found
+Attribute:   <bitfield3D of </>> and <bitfield3D of </>>
+position        bitfield3D of </> bitfield3D of </> difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 1 ]          2               0               2              
+[ 0 1 0 ]          3               0               3              
+[ 0 1 1 ]          4               0               4              
+[ 0 2 0 ]          5               0               5              
+[ 0 2 1 ]          6               0               6              
+[ 1 0 0 ]          7               0               7              
+[ 1 0 1 ]          8               0               8              
+[ 1 1 0 ]          9               0               9              
+[ 1 1 1 ]          10              0               10             
+[ 1 2 0 ]          11              0               11             
+[ 1 2 1 ]          12              0               12             
+[ 2 0 0 ]          13              0               13             
+[ 2 0 1 ]          14              0               14             
+[ 2 1 0 ]          15              0               15             
+[ 2 1 1 ]          16              0               16             
+[ 2 2 0 ]          17              0               17             
+[ 2 2 1 ]          18              0               18             
+[ 3 0 0 ]          19              0               19             
+[ 3 0 1 ]          20              0               20             
+[ 3 1 0 ]          21              0               21             
+[ 3 1 1 ]          22              0               22             
+[ 3 2 0 ]          23              0               23             
+[ 3 2 1 ]          24              0               24             
+24 differences found
+Attribute:   <opaque3D of </>> and <opaque3D of </>>
+position        opaque3D of </> opaque3D of </> difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 1 ]          2               0               2              
+[ 0 1 0 ]          3               0               3              
+[ 0 1 1 ]          4               0               4              
+[ 0 2 0 ]          5               0               5              
+[ 0 2 1 ]          6               0               6              
+[ 1 0 0 ]          7               0               7              
+[ 1 0 1 ]          8               0               8              
+[ 1 1 0 ]          9               0               9              
+[ 1 1 1 ]          10              0               10             
+[ 1 2 0 ]          11              0               11             
+[ 1 2 1 ]          12              0               12             
+[ 2 0 0 ]          13              0               13             
+[ 2 0 1 ]          14              0               14             
+[ 2 1 0 ]          15              0               15             
+[ 2 1 1 ]          16              0               16             
+[ 2 2 0 ]          17              0               17             
+[ 2 2 1 ]          18              0               18             
+[ 3 0 0 ]          19              0               19             
+[ 3 0 1 ]          20              0               20             
+[ 3 1 0 ]          21              0               21             
+[ 3 1 1 ]          22              0               22             
+[ 3 2 0 ]          23              0               23             
+[ 3 2 1 ]          24              0               24             
+24 differences found
+Attribute:   <compound3D of </>> and <compound3D of </>>
+position        compound3D of </> compound3D of </> difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 0 ]          2.000000        0.000000        2.000000       
+[ 0 0 1 ]          3               0               3              
+[ 0 0 1 ]          4.000000        0.000000        4.000000       
+[ 0 1 0 ]          5               0               5              
+[ 0 1 0 ]          6.000000        0.000000        6.000000       
+[ 0 1 1 ]          7               0               7              
+[ 0 1 1 ]          8.000000        0.000000        8.000000       
+[ 0 2 0 ]          9               0               9              
+[ 0 2 0 ]          10.000000       0.000000        10.000000      
+[ 0 2 1 ]          11              0               11             
+[ 0 2 1 ]          12.000000       0.000000        12.000000      
+[ 1 0 0 ]          13              0               13             
+[ 1 0 0 ]          14.000000       0.000000        14.000000      
+[ 1 0 1 ]          15              0               15             
+[ 1 0 1 ]          16.000000       0.000000        16.000000      
+[ 1 1 0 ]          17              0               17             
+[ 1 1 0 ]          18.000000       0.000000        18.000000      
+[ 1 1 1 ]          19              0               19             
+[ 1 1 1 ]          20.000000       0.000000        20.000000      
+[ 1 2 0 ]          21              0               21             
+[ 1 2 0 ]          22.000000       0.000000        22.000000      
+[ 1 2 1 ]          23              0               23             
+[ 1 2 1 ]          24.000000       0.000000        24.000000      
+[ 2 0 0 ]          25              0               25             
+[ 2 0 0 ]          26.000000       0.000000        26.000000      
+[ 2 0 1 ]          27              0               27             
+[ 2 0 1 ]          28.000000       0.000000        28.000000      
+[ 2 1 0 ]          29              0               29             
+[ 2 1 0 ]          30.000000       0.000000        30.000000      
+[ 2 1 1 ]          31              0               31             
+[ 2 1 1 ]          32.000000       0.000000        32.000000      
+[ 2 2 0 ]          33              0               33             
+[ 2 2 0 ]          34.000000       0.000000        34.000000      
+[ 2 2 1 ]          35              0               35             
+[ 2 2 1 ]          36.000000       0.000000        36.000000      
+[ 3 0 0 ]          37              0               37             
+[ 3 0 0 ]          38.000000       0.000000        38.000000      
+[ 3 0 1 ]          39              0               39             
+[ 3 0 1 ]          40.000000       0.000000        40.000000      
+[ 3 1 0 ]          41              0               41             
+[ 3 1 0 ]          42.000000       0.000000        42.000000      
+[ 3 1 1 ]          43              0               43             
+[ 3 1 1 ]          44.000000       0.000000        44.000000      
+[ 3 2 0 ]          45              0               45             
+[ 3 2 0 ]          46.000000       0.000000        46.000000      
+[ 3 2 1 ]          47              0               47             
+[ 3 2 1 ]          48.000000       0.000000        48.000000      
+48 differences found
+Attribute:   <enum3D of </>> and <enum3D of </>>
+position        enum3D of </>   enum3D of </>   difference          
+------------------------------------------------------------
+[ 0 0 0 ]          GREEN            RED              
+[ 0 0 1 ]          GREEN            RED              
+[ 0 1 0 ]          GREEN            RED              
+[ 0 1 1 ]          GREEN            RED              
+[ 0 2 0 ]          GREEN            RED              
+[ 0 2 1 ]          GREEN            RED              
+[ 1 0 0 ]          GREEN            RED              
+[ 1 0 1 ]          GREEN            RED              
+[ 1 1 0 ]          GREEN            RED              
+[ 1 1 1 ]          GREEN            RED              
+[ 1 2 0 ]          GREEN            RED              
+[ 1 2 1 ]          GREEN            RED              
+[ 2 0 0 ]          GREEN            RED              
+[ 2 0 1 ]          GREEN            RED              
+[ 2 1 0 ]          GREEN            RED              
+[ 2 1 1 ]          GREEN            RED              
+[ 2 2 0 ]          GREEN            RED              
+[ 2 2 1 ]          GREEN            RED              
+[ 3 0 0 ]          GREEN            RED              
+[ 3 0 1 ]          GREEN            RED              
+[ 3 1 0 ]          GREEN            RED              
+[ 3 1 1 ]          GREEN            RED              
+[ 3 2 0 ]          GREEN            RED              
+[ 3 2 1 ]          GREEN            RED              
+24 differences found
+Attribute:   <vlen3D of </>> and <vlen3D of </>>
+position        vlen3D of </>   vlen3D of </>   difference          
+------------------------------------------------------------
+[ 0 0 1 ]          1               0               1              
+[ 0 1 0 ]          2               0               2              
+[ 0 1 1 ]          3               0               3              
+[ 0 2 0 ]          4               0               4              
+[ 0 2 1 ]          5               0               5              
+[ 1 0 0 ]          6               0               6              
+[ 1 0 0 ]          7               0               7              
+[ 1 0 1 ]          8               0               8              
+[ 1 0 1 ]          9               0               9              
+[ 1 1 0 ]          10              0               10             
+[ 1 1 0 ]          11              0               11             
+[ 1 1 1 ]          12              0               12             
+[ 1 1 1 ]          13              0               13             
+[ 1 2 0 ]          14              0               14             
+[ 1 2 0 ]          15              0               15             
+[ 1 2 1 ]          16              0               16             
+[ 1 2 1 ]          17              0               17             
+[ 2 0 0 ]          18              0               18             
+[ 2 0 0 ]          19              0               19             
+[ 2 0 0 ]          20              0               20             
+[ 2 0 1 ]          21              0               21             
+[ 2 0 1 ]          22              0               22             
+[ 2 0 1 ]          23              0               23             
+[ 2 1 0 ]          24              0               24             
+[ 2 1 0 ]          25              0               25             
+[ 2 1 0 ]          26              0               26             
+[ 2 1 1 ]          27              0               27             
+[ 2 1 1 ]          28              0               28             
+[ 2 1 1 ]          29              0               29             
+[ 2 2 0 ]          30              0               30             
+[ 2 2 0 ]          31              0               31             
+[ 2 2 0 ]          32              0               32             
+[ 2 2 1 ]          33              0               33             
+[ 2 2 1 ]          34              0               34             
+[ 2 2 1 ]          35              0               35             
+[ 3 0 0 ]          36              0               36             
+[ 3 0 0 ]          37              0               37             
+[ 3 0 0 ]          38              0               38             
+[ 3 0 0 ]          39              0               39             
+[ 3 0 1 ]          40              0               40             
+[ 3 0 1 ]          41              0               41             
+[ 3 0 1 ]          42              0               42             
+[ 3 0 1 ]          43              0               43             
+[ 3 1 0 ]          44              0               44             
+[ 3 1 0 ]          45              0               45             
+[ 3 1 0 ]          46              0               46             
+[ 3 1 0 ]          47              0               47             
+[ 3 1 1 ]          48              0               48             
+[ 3 1 1 ]          49              0               49             
+[ 3 1 1 ]          50              0               50             
+[ 3 1 1 ]          51              0               51             
+[ 3 2 0 ]          52              0               52             
+[ 3 2 0 ]          53              0               53             
+[ 3 2 0 ]          54              0               54             
+[ 3 2 0 ]          55              0               55             
+[ 3 2 1 ]          56              0               56             
+[ 3 2 1 ]          57              0               57             
+[ 3 2 1 ]          58              0               58             
+[ 3 2 1 ]          59              0               59             
+59 differences found
+Attribute:   <array3D of </>> and <array3D of </>>
+position        array3D of </>  array3D of </>  difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 0 ]          2               0               2              
+[ 0 0 0 ]          3               0               3              
+[ 0 0 1 ]          4               0               4              
+[ 0 0 1 ]          5               0               5              
+[ 0 0 1 ]          6               0               6              
+[ 0 1 0 ]          7               0               7              
+[ 0 1 0 ]          8               0               8              
+[ 0 1 0 ]          9               0               9              
+[ 0 1 1 ]          10              0               10             
+[ 0 1 1 ]          11              0               11             
+[ 0 1 1 ]          12              0               12             
+[ 0 2 0 ]          13              0               13             
+[ 0 2 0 ]          14              0               14             
+[ 0 2 0 ]          15              0               15             
+[ 0 2 1 ]          16              0               16             
+[ 0 2 1 ]          17              0               17             
+[ 0 2 1 ]          18              0               18             
+[ 1 0 0 ]          19              0               19             
+[ 1 0 0 ]          20              0               20             
+[ 1 0 0 ]          21              0               21             
+[ 1 0 1 ]          22              0               22             
+[ 1 0 1 ]          23              0               23             
+[ 1 0 1 ]          24              0               24             
+[ 1 1 0 ]          25              0               25             
+[ 1 1 0 ]          26              0               26             
+[ 1 1 0 ]          27              0               27             
+[ 1 1 1 ]          28              0               28             
+[ 1 1 1 ]          29              0               29             
+[ 1 1 1 ]          30              0               30             
+[ 1 2 0 ]          31              0               31             
+[ 1 2 0 ]          32              0               32             
+[ 1 2 0 ]          33              0               33             
+[ 1 2 1 ]          34              0               34             
+[ 1 2 1 ]          35              0               35             
+[ 1 2 1 ]          36              0               36             
+[ 2 0 0 ]          37              0               37             
+[ 2 0 0 ]          38              0               38             
+[ 2 0 0 ]          39              0               39             
+[ 2 0 1 ]          40              0               40             
+[ 2 0 1 ]          41              0               41             
+[ 2 0 1 ]          42              0               42             
+[ 2 1 0 ]          43              0               43             
+[ 2 1 0 ]          44              0               44             
+[ 2 1 0 ]          45              0               45             
+[ 2 1 1 ]          46              0               46             
+[ 2 1 1 ]          47              0               47             
+[ 2 1 1 ]          48              0               48             
+[ 2 2 0 ]          49              0               49             
+[ 2 2 0 ]          50              0               50             
+[ 2 2 0 ]          51              0               51             
+[ 2 2 1 ]          52              0               52             
+[ 2 2 1 ]          53              0               53             
+[ 2 2 1 ]          54              0               54             
+[ 3 0 0 ]          55              0               55             
+[ 3 0 0 ]          56              0               56             
+[ 3 0 0 ]          57              0               57             
+[ 3 0 1 ]          58              0               58             
+[ 3 0 1 ]          59              0               59             
+[ 3 0 1 ]          60              0               60             
+[ 3 1 0 ]          61              0               61             
+[ 3 1 0 ]          62              0               62             
+[ 3 1 0 ]          63              0               63             
+[ 3 1 1 ]          64              0               64             
+[ 3 1 1 ]          65              0               65             
+[ 3 1 1 ]          66              0               66             
+[ 3 2 0 ]          67              0               67             
+[ 3 2 0 ]          68              0               68             
+[ 3 2 0 ]          69              0               69             
+[ 3 2 1 ]          70              0               70             
+[ 3 2 1 ]          71              0               71             
+[ 3 2 1 ]          72              0               72             
+72 differences found
+Attribute:   <integer3D of </>> and <integer3D of </>>
+position        integer3D of </> integer3D of </> difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 1 ]          2               0               2              
+[ 0 1 0 ]          3               0               3              
+[ 0 1 1 ]          4               0               4              
+[ 0 2 0 ]          5               0               5              
+[ 0 2 1 ]          6               0               6              
+[ 1 0 0 ]          7               0               7              
+[ 1 0 1 ]          8               0               8              
+[ 1 1 0 ]          9               0               9              
+[ 1 1 1 ]          10              0               10             
+[ 1 2 0 ]          11              0               11             
+[ 1 2 1 ]          12              0               12             
+[ 2 0 0 ]          13              0               13             
+[ 2 0 1 ]          14              0               14             
+[ 2 1 0 ]          15              0               15             
+[ 2 1 1 ]          16              0               16             
+[ 2 2 0 ]          17              0               17             
+[ 2 2 1 ]          18              0               18             
+[ 3 0 0 ]          19              0               19             
+[ 3 0 1 ]          20              0               20             
+[ 3 1 0 ]          21              0               21             
+[ 3 1 1 ]          22              0               22             
+[ 3 2 0 ]          23              0               23             
+[ 3 2 1 ]          24              0               24             
+24 differences found
+Attribute:   <float3D of </>> and <float3D of </>>
+position        float3D of </>  float3D of </>  difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1.000000        0.000000        1.000000       
+[ 0 0 1 ]          2.000000        0.000000        2.000000       
+[ 0 1 0 ]          3.000000        0.000000        3.000000       
+[ 0 1 1 ]          4.000000        0.000000        4.000000       
+[ 0 2 0 ]          5.000000        0.000000        5.000000       
+[ 0 2 1 ]          6.000000        0.000000        6.000000       
+[ 1 0 0 ]          7.000000        0.000000        7.000000       
+[ 1 0 1 ]          8.000000        0.000000        8.000000       
+[ 1 1 0 ]          9.000000        0.000000        9.000000       
+[ 1 1 1 ]          10.000000       0.000000        10.000000      
+[ 1 2 0 ]          11.000000       0.000000        11.000000      
+[ 1 2 1 ]          12.000000       0.000000        12.000000      
+[ 2 0 0 ]          13.000000       0.000000        13.000000      
+[ 2 0 1 ]          14.000000       0.000000        14.000000      
+[ 2 1 0 ]          15.000000       0.000000        15.000000      
+[ 2 1 1 ]          16.000000       0.000000        16.000000      
+[ 2 2 0 ]          17.000000       0.000000        17.000000      
+[ 2 2 1 ]          18.000000       0.000000        18.000000      
+[ 3 0 0 ]          19.000000       0.000000        19.000000      
+[ 3 0 1 ]          20.000000       0.000000        20.000000      
+[ 3 1 0 ]          21.000000       0.000000        21.000000      
+[ 3 1 1 ]          22.000000       0.000000        22.000000      
+[ 3 2 0 ]          23.000000       0.000000        23.000000      
+[ 3 2 1 ]          24.000000       0.000000        24.000000      
+24 differences found
+0 differences found
+--------------------------------
+Some objects are not comparable
+--------------------------------

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_80.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_80.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5diff_80.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,685 @@
+#############################
+Expected output for 'h5diff file7.h5 file8.h5 -v'
+#############################
+
+file1     file2
+---------------------------------------
+    x      x    /dset          
+    x      x    /g1            
+    x      x    /g1/array      
+    x      x    /g1/array2D    
+    x      x    /g1/array3D    
+    x      x    /g1/bitfield   
+    x      x    /g1/bitfield2D 
+    x      x    /g1/bitfield3D 
+    x      x    /g1/compound   
+    x      x    /g1/compound2D 
+    x      x    /g1/compound3D 
+    x      x    /g1/enum       
+    x      x    /g1/enum2D     
+    x      x    /g1/enum3D     
+    x      x    /g1/float      
+    x      x    /g1/float2D    
+    x      x    /g1/float3D    
+    x      x    /g1/integer    
+    x      x    /g1/integer2D  
+    x      x    /g1/integer3D  
+    x      x    /g1/opaque     
+    x      x    /g1/opaque2D   
+    x      x    /g1/opaque3D   
+    x      x    /g1/reference  
+    x      x    /g1/reference2D
+    x      x    /g1/reference3D
+    x      x    /g1/string     
+    x      x    /g1/string2D   
+    x      x    /g1/string3D   
+    x      x    /g1/vlen       
+    x      x    /g1/vlen2D     
+    x      x    /g1/vlen3D     
+
+Dataset:     </dset> and </dset>
+position        dset            dset            difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+Group:       </g1> and </g1>
+Dataset:     </g1/array> and </g1/array>
+position        array           array           difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 0 ]          2               0               2              
+[ 0 ]          3               0               3              
+[ 1 ]          4               0               4              
+[ 1 ]          5               0               5              
+[ 1 ]          6               0               6              
+Dataset:     </g1/array2D> and </g1/array2D>
+position        array2D         array2D         difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 0 ]          2               0               2              
+[ 0 0 ]          3               0               3              
+[ 0 1 ]          4               0               4              
+[ 0 1 ]          5               0               5              
+[ 0 1 ]          6               0               6              
+[ 1 0 ]          7               0               7              
+[ 1 0 ]          8               0               8              
+[ 1 0 ]          9               0               9              
+[ 1 1 ]          10              0               10             
+[ 1 1 ]          11              0               11             
+[ 1 1 ]          12              0               12             
+[ 2 0 ]          13              0               13             
+[ 2 0 ]          14              0               14             
+[ 2 0 ]          15              0               15             
+[ 2 1 ]          16              0               16             
+[ 2 1 ]          17              0               17             
+[ 2 1 ]          18              0               18             
+Dataset:     </g1/array3D> and </g1/array3D>
+position        array3D         array3D         difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 0 ]          2               0               2              
+[ 0 0 0 ]          3               0               3              
+[ 0 0 1 ]          4               0               4              
+[ 0 0 1 ]          5               0               5              
+[ 0 0 1 ]          6               0               6              
+[ 0 1 0 ]          7               0               7              
+[ 0 1 0 ]          8               0               8              
+[ 0 1 0 ]          9               0               9              
+[ 0 1 1 ]          10              0               10             
+[ 0 1 1 ]          11              0               11             
+[ 0 1 1 ]          12              0               12             
+[ 0 2 0 ]          13              0               13             
+[ 0 2 0 ]          14              0               14             
+[ 0 2 0 ]          15              0               15             
+[ 0 2 1 ]          16              0               16             
+[ 0 2 1 ]          17              0               17             
+[ 0 2 1 ]          18              0               18             
+[ 1 0 0 ]          19              0               19             
+[ 1 0 0 ]          20              0               20             
+[ 1 0 0 ]          21              0               21             
+[ 1 0 1 ]          22              0               22             
+[ 1 0 1 ]          23              0               23             
+[ 1 0 1 ]          24              0               24             
+[ 1 1 0 ]          25              0               25             
+[ 1 1 0 ]          26              0               26             
+[ 1 1 0 ]          27              0               27             
+[ 1 1 1 ]          28              0               28             
+[ 1 1 1 ]          29              0               29             
+[ 1 1 1 ]          30              0               30             
+[ 1 2 0 ]          31              0               31             
+[ 1 2 0 ]          32              0               32             
+[ 1 2 0 ]          33              0               33             
+[ 1 2 1 ]          34              0               34             
+[ 1 2 1 ]          35              0               35             
+[ 1 2 1 ]          36              0               36             
+[ 2 0 0 ]          37              0               37             
+[ 2 0 0 ]          38              0               38             
+[ 2 0 0 ]          39              0               39             
+[ 2 0 1 ]          40              0               40             
+[ 2 0 1 ]          41              0               41             
+[ 2 0 1 ]          42              0               42             
+[ 2 1 0 ]          43              0               43             
+[ 2 1 0 ]          44              0               44             
+[ 2 1 0 ]          45              0               45             
+[ 2 1 1 ]          46              0               46             
+[ 2 1 1 ]          47              0               47             
+[ 2 1 1 ]          48              0               48             
+[ 2 2 0 ]          49              0               49             
+[ 2 2 0 ]          50              0               50             
+[ 2 2 0 ]          51              0               51             
+[ 2 2 1 ]          52              0               52             
+[ 2 2 1 ]          53              0               53             
+[ 2 2 1 ]          54              0               54             
+[ 3 0 0 ]          55              0               55             
+[ 3 0 0 ]          56              0               56             
+[ 3 0 0 ]          57              0               57             
+[ 3 0 1 ]          58              0               58             
+[ 3 0 1 ]          59              0               59             
+[ 3 0 1 ]          60              0               60             
+[ 3 1 0 ]          61              0               61             
+[ 3 1 0 ]          62              0               62             
+[ 3 1 0 ]          63              0               63             
+[ 3 1 1 ]          64              0               64             
+[ 3 1 1 ]          65              0               65             
+[ 3 1 1 ]          66              0               66             
+[ 3 2 0 ]          67              0               67             
+[ 3 2 0 ]          68              0               68             
+[ 3 2 0 ]          69              0               69             
+[ 3 2 1 ]          70              0               70             
+[ 3 2 1 ]          71              0               71             
+[ 3 2 1 ]          72              0               72             
+Dataset:     </g1/bitfield> and </g1/bitfield>
+position        bitfield        bitfield        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+Dataset:     </g1/bitfield2D> and </g1/bitfield2D>
+position        bitfield2D      bitfield2D      difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 1 ]          2               0               2              
+[ 1 0 ]          3               0               3              
+[ 1 1 ]          4               0               4              
+[ 2 0 ]          5               0               5              
+[ 2 1 ]          6               0               6              
+Dataset:     </g1/bitfield3D> and </g1/bitfield3D>
+position        bitfield3D      bitfield3D      difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 1 ]          2               0               2              
+[ 0 1 0 ]          3               0               3              
+[ 0 1 1 ]          4               0               4              
+[ 0 2 0 ]          5               0               5              
+[ 0 2 1 ]          6               0               6              
+[ 1 0 0 ]          7               0               7              
+[ 1 0 1 ]          8               0               8              
+[ 1 1 0 ]          9               0               9              
+[ 1 1 1 ]          10              0               10             
+[ 1 2 0 ]          11              0               11             
+[ 1 2 1 ]          12              0               12             
+[ 2 0 0 ]          13              0               13             
+[ 2 0 1 ]          14              0               14             
+[ 2 1 0 ]          15              0               15             
+[ 2 1 1 ]          16              0               16             
+[ 2 2 0 ]          17              0               17             
+[ 2 2 1 ]          18              0               18             
+[ 3 0 0 ]          19              0               19             
+[ 3 0 1 ]          20              0               20             
+[ 3 1 0 ]          21              0               21             
+[ 3 1 1 ]          22              0               22             
+[ 3 2 0 ]          23              0               23             
+[ 3 2 1 ]          24              0               24             
+Dataset:     </g1/compound> and </g1/compound>
+position        compound        compound        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 0 ]          2.000000        0.000000        2.000000       
+[ 1 ]          3               0               3              
+[ 1 ]          4.000000        0.000000        4.000000       
+Dataset:     </g1/compound2D> and </g1/compound2D>
+position        compound2D      compound2D      difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 0 ]          2.000000        0.000000        2.000000       
+[ 0 1 ]          3               0               3              
+[ 0 1 ]          4.000000        0.000000        4.000000       
+[ 1 0 ]          5               0               5              
+[ 1 0 ]          6.000000        0.000000        6.000000       
+[ 1 1 ]          7               0               7              
+[ 1 1 ]          8.000000        0.000000        8.000000       
+[ 2 0 ]          9               0               9              
+[ 2 0 ]          10.000000       0.000000        10.000000      
+[ 2 1 ]          11              0               11             
+[ 2 1 ]          12.000000       0.000000        12.000000      
+Dataset:     </g1/compound3D> and </g1/compound3D>
+position        compound3D      compound3D      difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 0 ]          2.000000        0.000000        2.000000       
+[ 0 0 1 ]          3               0               3              
+[ 0 0 1 ]          4.000000        0.000000        4.000000       
+[ 0 1 0 ]          5               0               5              
+[ 0 1 0 ]          6.000000        0.000000        6.000000       
+[ 0 1 1 ]          7               0               7              
+[ 0 1 1 ]          8.000000        0.000000        8.000000       
+[ 0 2 0 ]          9               0               9              
+[ 0 2 0 ]          10.000000       0.000000        10.000000      
+[ 0 2 1 ]          11              0               11             
+[ 0 2 1 ]          12.000000       0.000000        12.000000      
+[ 1 0 0 ]          13              0               13             
+[ 1 0 0 ]          14.000000       0.000000        14.000000      
+[ 1 0 1 ]          15              0               15             
+[ 1 0 1 ]          16.000000       0.000000        16.000000      
+[ 1 1 0 ]          17              0               17             
+[ 1 1 0 ]          18.000000       0.000000        18.000000      
+[ 1 1 1 ]          19              0               19             
+[ 1 1 1 ]          20.000000       0.000000        20.000000      
+[ 1 2 0 ]          21              0               21             
+[ 1 2 0 ]          22.000000       0.000000        22.000000      
+[ 1 2 1 ]          23              0               23             
+[ 1 2 1 ]          24.000000       0.000000        24.000000      
+[ 2 0 0 ]          25              0               25             
+[ 2 0 0 ]          26.000000       0.000000        26.000000      
+[ 2 0 1 ]          27              0               27             
+[ 2 0 1 ]          28.000000       0.000000        28.000000      
+[ 2 1 0 ]          29              0               29             
+[ 2 1 0 ]          30.000000       0.000000        30.000000      
+[ 2 1 1 ]          31              0               31             
+[ 2 1 1 ]          32.000000       0.000000        32.000000      
+[ 2 2 0 ]          33              0               33             
+[ 2 2 0 ]          34.000000       0.000000        34.000000      
+[ 2 2 1 ]          35              0               35             
+[ 2 2 1 ]          36.000000       0.000000        36.000000      
+[ 3 0 0 ]          37              0               37             
+[ 3 0 0 ]          38.000000       0.000000        38.000000      
+[ 3 0 1 ]          39              0               39             
+[ 3 0 1 ]          40.000000       0.000000        40.000000      
+[ 3 1 0 ]          41              0               41             
+[ 3 1 0 ]          42.000000       0.000000        42.000000      
+[ 3 1 1 ]          43              0               43             
+[ 3 1 1 ]          44.000000       0.000000        44.000000      
+[ 3 2 0 ]          45              0               45             
+[ 3 2 0 ]          46.000000       0.000000        46.000000      
+[ 3 2 1 ]          47              0               47             
+[ 3 2 1 ]          48.000000       0.000000        48.000000      
+Dataset:     </g1/enum> and </g1/enum>
+position        enum            enum            difference          
+------------------------------------------------------------
+[ 0 ]          RED              GREEN            
+Dataset:     </g1/enum2D> and </g1/enum2D>
+</g1/enum2D> and </g1/enum2D> are empty datasets
+Dataset:     </g1/enum3D> and </g1/enum3D>
+</g1/enum3D> and </g1/enum3D> are empty datasets
+Dataset:     </g1/float> and </g1/float>
+position        float           float           difference          
+------------------------------------------------------------
+[ 0 ]          1.000000        0.000000        1.000000       
+[ 1 ]          2.000000        0.000000        2.000000       
+Dataset:     </g1/float2D> and </g1/float2D>
+position        float2D         float2D         difference          
+------------------------------------------------------------
+[ 0 0 ]          1.000000        0.000000        1.000000       
+[ 0 1 ]          2.000000        0.000000        2.000000       
+[ 1 0 ]          3.000000        0.000000        3.000000       
+[ 1 1 ]          4.000000        0.000000        4.000000       
+[ 2 0 ]          5.000000        0.000000        5.000000       
+[ 2 1 ]          6.000000        0.000000        6.000000       
+Dataset:     </g1/float3D> and </g1/float3D>
+position        float3D         float3D         difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1.000000        0.000000        1.000000       
+[ 0 0 1 ]          2.000000        0.000000        2.000000       
+[ 0 1 0 ]          3.000000        0.000000        3.000000       
+[ 0 1 1 ]          4.000000        0.000000        4.000000       
+[ 0 2 0 ]          5.000000        0.000000        5.000000       
+[ 0 2 1 ]          6.000000        0.000000        6.000000       
+[ 1 0 0 ]          7.000000        0.000000        7.000000       
+[ 1 0 1 ]          8.000000        0.000000        8.000000       
+[ 1 1 0 ]          9.000000        0.000000        9.000000       
+[ 1 1 1 ]          10.000000       0.000000        10.000000      
+[ 1 2 0 ]          11.000000       0.000000        11.000000      
+[ 1 2 1 ]          12.000000       0.000000        12.000000      
+[ 2 0 0 ]          13.000000       0.000000        13.000000      
+[ 2 0 1 ]          14.000000       0.000000        14.000000      
+[ 2 1 0 ]          15.000000       0.000000        15.000000      
+[ 2 1 1 ]          16.000000       0.000000        16.000000      
+[ 2 2 0 ]          17.000000       0.000000        17.000000      
+[ 2 2 1 ]          18.000000       0.000000        18.000000      
+[ 3 0 0 ]          19.000000       0.000000        19.000000      
+[ 3 0 1 ]          20.000000       0.000000        20.000000      
+[ 3 1 0 ]          21.000000       0.000000        21.000000      
+[ 3 1 1 ]          22.000000       0.000000        22.000000      
+[ 3 2 0 ]          23.000000       0.000000        23.000000      
+[ 3 2 1 ]          24.000000       0.000000        24.000000      
+Dataset:     </g1/integer> and </g1/integer>
+position        integer         integer         difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+Dataset:     </g1/integer2D> and </g1/integer2D>
+position        integer2D       integer2D       difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 1 ]          2               0               2              
+[ 1 0 ]          3               0               3              
+[ 1 1 ]          4               0               4              
+[ 2 0 ]          5               0               5              
+[ 2 1 ]          6               0               6              
+Dataset:     </g1/integer3D> and </g1/integer3D>
+position        integer3D       integer3D       difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 1 ]          2               0               2              
+[ 0 1 0 ]          3               0               3              
+[ 0 1 1 ]          4               0               4              
+[ 0 2 0 ]          5               0               5              
+[ 0 2 1 ]          6               0               6              
+[ 1 0 0 ]          7               0               7              
+[ 1 0 1 ]          8               0               8              
+[ 1 1 0 ]          9               0               9              
+[ 1 1 1 ]          10              0               10             
+[ 1 2 0 ]          11              0               11             
+[ 1 2 1 ]          12              0               12             
+[ 2 0 0 ]          13              0               13             
+[ 2 0 1 ]          14              0               14             
+[ 2 1 0 ]          15              0               15             
+[ 2 1 1 ]          16              0               16             
+[ 2 2 0 ]          17              0               17             
+[ 2 2 1 ]          18              0               18             
+[ 3 0 0 ]          19              0               19             
+[ 3 0 1 ]          20              0               20             
+[ 3 1 0 ]          21              0               21             
+[ 3 1 1 ]          22              0               22             
+[ 3 2 0 ]          23              0               23             
+[ 3 2 1 ]          24              0               24             
+Dataset:     </g1/opaque> and </g1/opaque>
+position        opaque          opaque          difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+Dataset:     </g1/opaque2D> and </g1/opaque2D>
+position        opaque2D        opaque2D        difference          
+------------------------------------------------------------
+[ 0 0 ]          1               0               1              
+[ 0 1 ]          2               0               2              
+[ 1 0 ]          3               0               3              
+[ 1 1 ]          4               0               4              
+[ 2 0 ]          5               0               5              
+[ 2 1 ]          6               0               6              
+Dataset:     </g1/opaque3D> and </g1/opaque3D>
+position        opaque3D        opaque3D        difference          
+------------------------------------------------------------
+[ 0 0 0 ]          1               0               1              
+[ 0 0 1 ]          2               0               2              
+[ 0 1 0 ]          3               0               3              
+[ 0 1 1 ]          4               0               4              
+[ 0 2 0 ]          5               0               5              
+[ 0 2 1 ]          6               0               6              
+[ 1 0 0 ]          7               0               7              
+[ 1 0 1 ]          8               0               8              
+[ 1 1 0 ]          9               0               9              
+[ 1 1 1 ]          10              0               10             
+[ 1 2 0 ]          11              0               11             
+[ 1 2 1 ]          12              0               12             
+[ 2 0 0 ]          13              0               13             
+[ 2 0 1 ]          14              0               14             
+[ 2 1 0 ]          15              0               15             
+[ 2 1 1 ]          16              0               16             
+[ 2 2 0 ]          17              0               17             
+[ 2 2 1 ]          18              0               18             
+[ 3 0 0 ]          19              0               19             
+[ 3 0 1 ]          20              0               20             
+[ 3 1 0 ]          21              0               21             
+[ 3 1 1 ]          22              0               22             
+[ 3 2 0 ]          23              0               23             
+[ 3 2 1 ]          24              0               24             
+Dataset:     </g1/reference> and </g1/reference>
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+Dataset:     </g1/reference2D> and </g1/reference2D>
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+Dataset:     </g1/reference3D> and </g1/reference3D>
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+position                                        difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+Dataset:     </g1/string> and </g1/string>
+position        string          string          difference          
+------------------------------------------------------------
+[ 0 ]          a                z                
+[ 0 ]          b                z                
+[ 1 ]          d                z                
+[ 1 ]          e                z                
+Dataset:     </g1/string2D> and </g1/string2D>
+position        string2D        string2D        difference          
+------------------------------------------------------------
+[ 0 0 ]          a                z                
+[ 0 0 ]          b                z                
+[ 0 1 ]          c                z                
+[ 0 1 ]          d                z                
+[ 1 0 ]          e                z                
+[ 1 0 ]          f                z                
+[ 1 1 ]          g                z                
+[ 1 1 ]          h                z                
+[ 2 0 ]          i                z                
+[ 2 0 ]          j                z                
+[ 2 1 ]          k                z                
+[ 2 1 ]          l                z                
+Dataset:     </g1/string3D> and </g1/string3D>
+position        string3D        string3D        difference          
+------------------------------------------------------------
+[ 0 0 0 ]          a                z                
+[ 0 0 0 ]          b                z                
+[ 0 0 1 ]          c                z                
+[ 0 0 1 ]          d                z                
+[ 0 1 0 ]          e                z                
+[ 0 1 0 ]          f                z                
+[ 0 1 1 ]          g                z                
+[ 0 1 1 ]          h                z                
+[ 0 2 0 ]          i                z                
+[ 0 2 0 ]          j                z                
+[ 0 2 1 ]          k                z                
+[ 0 2 1 ]          l                z                
+[ 1 0 0 ]          m                z                
+[ 1 0 0 ]          n                z                
+[ 1 0 1 ]          p                z                
+[ 1 0 1 ]          q                z                
+[ 1 1 0 ]          r                z                
+[ 1 1 0 ]          s                z                
+[ 1 1 1 ]          t                z                
+[ 1 1 1 ]          u                z                
+[ 1 2 0 ]          v                z                
+[ 1 2 0 ]          w                z                
+[ 1 2 1 ]          x                z                
+[ 2 0 0 ]          A                z                
+[ 2 0 0 ]          B                z                
+[ 2 0 1 ]          C                z                
+[ 2 0 1 ]          D                z                
+[ 2 1 0 ]          E                z                
+[ 2 1 0 ]          F                z                
+[ 2 1 1 ]          G                z                
+[ 2 1 1 ]          H                z                
+[ 2 2 0 ]          I                z                
+[ 2 2 0 ]          J                z                
+[ 2 2 1 ]          K                z                
+[ 2 2 1 ]          L                z                
+[ 3 0 0 ]          M                z                
+[ 3 0 0 ]          N                z                
+[ 3 0 1 ]          P                z                
+[ 3 0 1 ]          Q                z                
+[ 3 1 0 ]          R                z                
+[ 3 1 0 ]          S                z                
+[ 3 1 1 ]          T                z                
+[ 3 1 1 ]          U                z                
+[ 3 2 0 ]          V                z                
+[ 3 2 0 ]          W                z                
+[ 3 2 1 ]          X                z                
+[ 3 2 1 ]          Z                z                
+Dataset:     </g1/vlen> and </g1/vlen>
+position        vlen            vlen            difference          
+------------------------------------------------------------
+[ 0 ]          1               0               1              
+[ 1 ]          2               0               2              
+[ 1 ]          3               0               3              
+Dataset:     </g1/vlen2D> and </g1/vlen2D>
+position        vlen2D          vlen2D          difference          
+------------------------------------------------------------
+[ 0 1 ]          1               0               1              
+[ 1 0 ]          2               0               2              
+[ 1 0 ]          3               0               3              
+[ 1 1 ]          4               0               4              
+[ 1 1 ]          5               0               5              
+[ 2 0 ]          6               0               6              
+[ 2 0 ]          7               0               7              
+[ 2 0 ]          8               0               8              
+[ 2 1 ]          9               0               9              
+[ 2 1 ]          10              0               10             
+[ 2 1 ]          11              0               11             
+Dataset:     </g1/vlen3D> and </g1/vlen3D>
+position        vlen3D          vlen3D          difference          
+------------------------------------------------------------
+[ 0 0 1 ]          1               0               1              
+[ 0 1 0 ]          2               0               2              
+[ 0 1 1 ]          3               0               3              
+[ 0 2 0 ]          4               0               4              
+[ 0 2 1 ]          5               0               5              
+[ 1 0 0 ]          6               0               6              
+[ 1 0 0 ]          7               0               7              
+[ 1 0 1 ]          8               0               8              
+[ 1 0 1 ]          9               0               9              
+[ 1 1 0 ]          10              0               10             
+[ 1 1 0 ]          11              0               11             
+[ 1 1 1 ]          12              0               12             
+[ 1 1 1 ]          13              0               13             
+[ 1 2 0 ]          14              0               14             
+[ 1 2 0 ]          15              0               15             
+[ 1 2 1 ]          16              0               16             
+[ 1 2 1 ]          17              0               17             
+[ 2 0 0 ]          18              0               18             
+[ 2 0 0 ]          19              0               19             
+[ 2 0 0 ]          20              0               20             
+[ 2 0 1 ]          21              0               21             
+[ 2 0 1 ]          22              0               22             
+[ 2 0 1 ]          23              0               23             
+[ 2 1 0 ]          24              0               24             
+[ 2 1 0 ]          25              0               25             
+[ 2 1 0 ]          26              0               26             
+[ 2 1 1 ]          27              0               27             
+[ 2 1 1 ]          28              0               28             
+[ 2 1 1 ]          29              0               29             
+[ 2 2 0 ]          30              0               30             
+[ 2 2 0 ]          31              0               31             
+[ 2 2 0 ]          32              0               32             
+[ 2 2 1 ]          33              0               33             
+[ 2 2 1 ]          34              0               34             
+[ 2 2 1 ]          35              0               35             
+[ 3 0 0 ]          36              0               36             
+[ 3 0 0 ]          37              0               37             
+[ 3 0 0 ]          38              0               38             
+[ 3 0 0 ]          39              0               39             
+[ 3 0 1 ]          40              0               40             
+[ 3 0 1 ]          41              0               41             
+[ 3 0 1 ]          42              0               42             
+[ 3 0 1 ]          43              0               43             
+[ 3 1 0 ]          44              0               44             
+[ 3 1 0 ]          45              0               45             
+[ 3 1 0 ]          46              0               46             
+[ 3 1 0 ]          47              0               47             
+[ 3 1 1 ]          48              0               48             
+[ 3 1 1 ]          49              0               49             
+[ 3 1 1 ]          50              0               50             
+[ 3 1 1 ]          51              0               51             
+[ 3 2 0 ]          52              0               52             
+[ 3 2 0 ]          53              0               53             
+[ 3 2 0 ]          54              0               54             
+[ 3 2 0 ]          55              0               55             
+[ 3 2 1 ]          56              0               56             
+[ 3 2 1 ]          57              0               57             
+[ 3 2 1 ]          58              0               58             
+[ 3 2 1 ]          59              0               59             
+Group:       </> and </>
+491 differences found
+--------------------------------
+Some objects are not comparable
+--------------------------------

Added: packages/hdf5/branches/upstream/current/tools/testfiles/h5repack_info.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/h5repack_info.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/h5repack_info.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1 @@
+-l dset1:CHUNK=20x20 -f dset1,dset2:GZIP=1

Added: packages/hdf5/branches/upstream/current/tools/testfiles/help-1.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/help-1.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/help-1.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,27 @@
+#############################
+ output for 'h5ls -w80 -h'
+#############################
+usage: h5ls [OPTIONS] [OBJECTS...]
+   OPTIONS
+      -h, -?, --help   Print a usage message and exit
+      -a, --address    Print addresses for raw data
+      -d, --data       Print the values of datasets
+      -e, --errors     Show all HDF5 error reporting
+      -f, --full       Print full path names instead of base names
+      -g, --group      Show information about a group, not its contents
+      -l, --label      Label members of compound datasets
+      -r, --recursive  List all groups recursively, avoiding cycles
+      -s, --string     Print 1-byte integer datasets as ASCII
+      -S, --simple     Use a machine-readable output format
+      -wN, --width=N   Set the number of columns of output
+      -v, --verbose    Generate more verbose output
+      -V, --version    Print version number and exit
+      --vfd=DRIVER     Use the specified virtual file driver
+      -x, --hexdump    Show raw data in hexadecimal format
+
+   OBJECTS
+      Each object consists of an HDF5 file name optionally followed by a
+      slash and an object name within the file (if no object is specified
+      within the file then the contents of the root group are displayed).
+      The file name may include a printf(3C) integer format such as
+      "%05d" to open a file family.

Added: packages/hdf5/branches/upstream/current/tools/testfiles/help-2.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/help-2.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/help-2.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,27 @@
+#############################
+ output for 'h5ls -w80 -help'
+#############################
+usage: h5ls [OPTIONS] [OBJECTS...]
+   OPTIONS
+      -h, -?, --help   Print a usage message and exit
+      -a, --address    Print addresses for raw data
+      -d, --data       Print the values of datasets
+      -e, --errors     Show all HDF5 error reporting
+      -f, --full       Print full path names instead of base names
+      -g, --group      Show information about a group, not its contents
+      -l, --label      Label members of compound datasets
+      -r, --recursive  List all groups recursively, avoiding cycles
+      -s, --string     Print 1-byte integer datasets as ASCII
+      -S, --simple     Use a machine-readable output format
+      -wN, --width=N   Set the number of columns of output
+      -v, --verbose    Generate more verbose output
+      -V, --version    Print version number and exit
+      --vfd=DRIVER     Use the specified virtual file driver
+      -x, --hexdump    Show raw data in hexadecimal format
+
+   OBJECTS
+      Each object consists of an HDF5 file name optionally followed by a
+      slash and an object name within the file (if no object is specified
+      within the file then the contents of the root group are displayed).
+      The file name may include a printf(3C) integer format such as
+      "%05d" to open a file family.

Added: packages/hdf5/branches/upstream/current/tools/testfiles/help-3.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/help-3.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/help-3.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,27 @@
+#############################
+ output for 'h5ls -w80 -?'
+#############################
+usage: h5ls [OPTIONS] [OBJECTS...]
+   OPTIONS
+      -h, -?, --help   Print a usage message and exit
+      -a, --address    Print addresses for raw data
+      -d, --data       Print the values of datasets
+      -e, --errors     Show all HDF5 error reporting
+      -f, --full       Print full path names instead of base names
+      -g, --group      Show information about a group, not its contents
+      -l, --label      Label members of compound datasets
+      -r, --recursive  List all groups recursively, avoiding cycles
+      -s, --string     Print 1-byte integer datasets as ASCII
+      -S, --simple     Use a machine-readable output format
+      -wN, --width=N   Set the number of columns of output
+      -v, --verbose    Generate more verbose output
+      -V, --version    Print version number and exit
+      --vfd=DRIVER     Use the specified virtual file driver
+      -x, --hexdump    Show raw data in hexadecimal format
+
+   OBJECTS
+      Each object consists of an HDF5 file name optionally followed by a
+      slash and an object name within the file (if no object is specified
+      within the file then the contents of the root group are displayed).
+      The file name may include a printf(3C) integer format such as
+      "%05d" to open a file family.

Added: packages/hdf5/branches/upstream/current/tools/testfiles/taindices.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/taindices.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tall-1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tall-1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tall-1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,93 @@
+#############################
+Expected output for 'h5dump tall.h5'
+#############################
+HDF5 "tall.h5" {
+GROUP "/" {
+   ATTRIBUTE "attr1" {
+      DATATYPE  H5T_STD_I8BE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+      DATA {
+      (0): 97, 98, 99, 100, 101, 102, 103, 104, 105, 0
+      }
+   }
+   ATTRIBUTE "attr2" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 2, 2 ) / ( 2, 2 ) }
+      DATA {
+      (0,0): 0, 1,
+      (1,0): 2, 3
+      }
+   }
+   GROUP "g1" {
+      GROUP "g1.1" {
+         DATASET "dset1.1.1" {
+            DATATYPE  H5T_STD_I32BE
+            DATASPACE  SIMPLE { ( 10, 10 ) / ( 10, 10 ) }
+            DATA {
+            (0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+            (1,0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+            (2,0): 0, 2, 4, 6, 8, 10, 12, 14, 16, 18,
+            (3,0): 0, 3, 6, 9, 12, 15, 18, 21, 24, 27,
+            (4,0): 0, 4, 8, 12, 16, 20, 24, 28, 32, 36,
+            (5,0): 0, 5, 10, 15, 20, 25, 30, 35, 40, 45,
+            (6,0): 0, 6, 12, 18, 24, 30, 36, 42, 48, 54,
+            (7,0): 0, 7, 14, 21, 28, 35, 42, 49, 56, 63,
+            (8,0): 0, 8, 16, 24, 32, 40, 48, 56, 64, 72,
+            (9,0): 0, 9, 18, 27, 36, 45, 54, 63, 72, 81
+            }
+            ATTRIBUTE "attr1" {
+               DATATYPE  H5T_STD_I8BE
+               DATASPACE  SIMPLE { ( 27 ) / ( 27 ) }
+               DATA {
+               (0): 49, 115, 116, 32, 97, 116, 116, 114, 105, 98, 117, 116,
+               (12): 101, 32, 111, 102, 32, 100, 115, 101, 116, 49, 46, 49,
+               (24): 46, 49, 0
+               }
+            }
+            ATTRIBUTE "attr2" {
+               DATATYPE  H5T_STD_I8BE
+               DATASPACE  SIMPLE { ( 27 ) / ( 27 ) }
+               DATA {
+               (0): 50, 110, 100, 32, 97, 116, 116, 114, 105, 98, 117, 116,
+               (12): 101, 32, 111, 102, 32, 100, 115, 101, 116, 49, 46, 49,
+               (24): 46, 49, 0
+               }
+            }
+         }
+         DATASET "dset1.1.2" {
+            DATATYPE  H5T_STD_I32BE
+            DATASPACE  SIMPLE { ( 20 ) / ( 20 ) }
+            DATA {
+            (0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+            (17): 17, 18, 19
+            }
+         }
+      }
+      GROUP "g1.2" {
+         GROUP "g1.2.1" {
+            SOFTLINK "slink" {
+               LINKTARGET "somevalue"
+            }
+         }
+      }
+   }
+   GROUP "g2" {
+      DATASET "dset2.1" {
+         DATATYPE  H5T_IEEE_F32BE
+         DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+         DATA {
+         (0): 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9
+         }
+      }
+      DATASET "dset2.2" {
+         DATATYPE  H5T_IEEE_F32BE
+         DATASPACE  SIMPLE { ( 3, 5 ) / ( 3, 5 ) }
+         DATA {
+         (0,0): 0, 0.1, 0.2, 0.3, 0.4,
+         (1,0): 0, 0.2, 0.4, 0.6, 0.8,
+         (2,0): 0, 0.3, 0.6, 0.9, 1.2
+         }
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tall-1.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tall-1.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tall-1.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+ output for 'h5ls -w80 tall.h5'
+#############################
+g1                       Group
+g2                       Group

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tall-2.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tall-2.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tall-2.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,27 @@
+#############################
+Expected output for 'h5dump --header -g /g1/g1.1 -a attr2 tall.h5'
+#############################
+HDF5 "tall.h5" {
+GROUP "/g1/g1.1" {
+   DATASET "dset1.1.1" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 10, 10 ) / ( 10, 10 ) }
+      ATTRIBUTE "attr1" {
+         DATATYPE  H5T_STD_I8BE
+         DATASPACE  SIMPLE { ( 27 ) / ( 27 ) }
+      }
+      ATTRIBUTE "attr2" {
+         DATATYPE  H5T_STD_I8BE
+         DATASPACE  SIMPLE { ( 27 ) / ( 27 ) }
+      }
+   }
+   DATASET "dset1.1.2" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 20 ) / ( 20 ) }
+   }
+}
+ATTRIBUTE "attr2" {
+   DATATYPE  H5T_STD_I32BE
+   DATASPACE  SIMPLE { ( 2, 2 ) / ( 2, 2 ) }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tall-2.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tall-2.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tall-2.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,27 @@
+#############################
+ output for 'h5ls -w80 -r -d tall.h5'
+#############################
+/g1                      Group
+/g1/g1.1                 Group
+/g1/g1.1/dset1.1.1       Dataset {10, 10}
+    Data:
+        (0,0) 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 2,
+        (2,2) 4, 6, 8, 10, 12, 14, 16, 18, 0, 3, 6, 9, 12, 15, 18, 21, 24, 27,
+        (4,0) 0, 4, 8, 12, 16, 20, 24, 28, 32, 36, 0, 5, 10, 15, 20, 25, 30, 35,
+        (5,8) 40, 45, 0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 0, 7, 14, 21, 28,
+        (7,5) 35, 42, 49, 56, 63, 0, 8, 16, 24, 32, 40, 48, 56, 64, 72, 0, 9,
+        (9,2) 18, 27, 36, 45, 54, 63, 72, 81
+/g1/g1.1/dset1.1.2       Dataset {20}
+    Data:
+        (0) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19
+/g1/g1.2                 Group
+/g1/g1.2/g1.2.1          Group
+/g1/g1.2/g1.2.1/slink    -> somevalue
+/g2                      Group
+/g2/dset2.1              Dataset {10}
+    Data:
+        (0) 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9
+/g2/dset2.2              Dataset {3, 5}
+    Data:
+        (0,0) 0, 0.1, 0.2, 0.3, 0.4, 0, 0.2, 0.4, 0.6, 0.8, 0, 0.3, 0.6, 0.9,
+        (2,4) 1.2

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tall-2A.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tall-2A.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tall-2A.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,69 @@
+#############################
+Expected output for 'h5dump -A tall.h5'
+#############################
+HDF5 "tall.h5" {
+GROUP "/" {
+   ATTRIBUTE "attr1" {
+      DATATYPE  H5T_STD_I8BE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+      DATA {
+      (0): 97, 98, 99, 100, 101, 102, 103, 104, 105, 0
+      }
+   }
+   ATTRIBUTE "attr2" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 2, 2 ) / ( 2, 2 ) }
+      DATA {
+      (0,0): 0, 1,
+      (1,0): 2, 3
+      }
+   }
+   GROUP "g1" {
+      GROUP "g1.1" {
+         DATASET "dset1.1.1" {
+            DATATYPE  H5T_STD_I32BE
+            DATASPACE  SIMPLE { ( 10, 10 ) / ( 10, 10 ) }
+            ATTRIBUTE "attr1" {
+               DATATYPE  H5T_STD_I8BE
+               DATASPACE  SIMPLE { ( 27 ) / ( 27 ) }
+               DATA {
+               (0): 49, 115, 116, 32, 97, 116, 116, 114, 105, 98, 117, 116,
+               (12): 101, 32, 111, 102, 32, 100, 115, 101, 116, 49, 46, 49,
+               (24): 46, 49, 0
+               }
+            }
+            ATTRIBUTE "attr2" {
+               DATATYPE  H5T_STD_I8BE
+               DATASPACE  SIMPLE { ( 27 ) / ( 27 ) }
+               DATA {
+               (0): 50, 110, 100, 32, 97, 116, 116, 114, 105, 98, 117, 116,
+               (12): 101, 32, 111, 102, 32, 100, 115, 101, 116, 49, 46, 49,
+               (24): 46, 49, 0
+               }
+            }
+         }
+         DATASET "dset1.1.2" {
+            DATATYPE  H5T_STD_I32BE
+            DATASPACE  SIMPLE { ( 20 ) / ( 20 ) }
+         }
+      }
+      GROUP "g1.2" {
+         GROUP "g1.2.1" {
+            SOFTLINK "slink" {
+               LINKTARGET "somevalue"
+            }
+         }
+      }
+   }
+   GROUP "g2" {
+      DATASET "dset2.1" {
+         DATATYPE  H5T_IEEE_F32BE
+         DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+      }
+      DATASET "dset2.2" {
+         DATATYPE  H5T_IEEE_F32BE
+         DATASPACE  SIMPLE { ( 3, 5 ) / ( 3, 5 ) }
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tall-2A.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tall-2A.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tall-2A.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,185 @@
+#############################
+Expected output for 'h5dump --xml -A tall.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Attribute Name="attr1">
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         97 98 99 100 101 102 103 104 105 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:Attribute Name="attr2">
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="2">
+            <hdf5:Dimension  DimSize="2" MaxDimSize="2"/>
+            <hdf5:Dimension  DimSize="2" MaxDimSize="2"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 1
+         2 3
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:Group Name="g1" OBJ-XID="xid_1344-0" H5Path="/g1" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Group Name="g1.1" OBJ-XID="xid_2968-0" H5Path="/g1/g1.1" Parents="xid_1344-0" H5ParentPaths="/g1" >
+         <hdf5:Dataset Name="dset1.1.1" OBJ-XID="xid_4968-0" H5Path= "/g1/g1.1/dset1.1.1" Parents="xid_2968-0" H5ParentPaths="/g1/g1.1">
+            <hdf5:StorageLayout>
+               <hdf5:ContiguousLayout/>
+            </hdf5:StorageLayout>
+                     <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+               <hdf5:FillValue>
+                     <hdf5:NoFill/>
+               </hdf5:FillValue>
+            </hdf5:FillValueInfo>
+            <hdf5:Dataspace>
+               <hdf5:SimpleDataspace Ndims="2">
+                  <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+                  <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+               </hdf5:SimpleDataspace>
+            </hdf5:Dataspace>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+            <hdf5:Attribute Name="attr1">
+               <hdf5:Dataspace>
+                  <hdf5:SimpleDataspace Ndims="1">
+                     <hdf5:Dimension  DimSize="27" MaxDimSize="27"/>
+                  </hdf5:SimpleDataspace>
+               </hdf5:Dataspace>
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+               <hdf5:Data>
+                  <hdf5:DataFromFile>
+                  49 115 116 32 97 116 116 114 105 98 117 116 101 32 111 102 32
+                  100 115 101 116 49 46 49 46 49 0
+                  </hdf5:DataFromFile>
+               </hdf5:Data>
+            </hdf5:Attribute>
+            <hdf5:Attribute Name="attr2">
+               <hdf5:Dataspace>
+                  <hdf5:SimpleDataspace Ndims="1">
+                     <hdf5:Dimension  DimSize="27" MaxDimSize="27"/>
+                  </hdf5:SimpleDataspace>
+               </hdf5:Dataspace>
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+               <hdf5:Data>
+                  <hdf5:DataFromFile>
+                  50 110 100 32 97 116 116 114 105 98 117 116 101 32 111 102 32
+                  100 115 101 116 49 46 49 46 49 0
+                  </hdf5:DataFromFile>
+               </hdf5:Data>
+            </hdf5:Attribute>
+            <hdf5:Data>
+               <hdf5:NoData/>
+            </hdf5:Data>
+         </hdf5:Dataset>
+         <hdf5:Dataset Name="dset1.1.2" OBJ-XID="xid_5968-0" H5Path= "/g1/g1.1/dset1.1.2" Parents="xid_2968-0" H5ParentPaths="/g1/g1.1">
+            <hdf5:StorageLayout>
+               <hdf5:ContiguousLayout/>
+            </hdf5:StorageLayout>
+                     <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+               <hdf5:FillValue>
+                     <hdf5:NoFill/>
+               </hdf5:FillValue>
+            </hdf5:FillValueInfo>
+            <hdf5:Dataspace>
+               <hdf5:SimpleDataspace Ndims="1">
+                  <hdf5:Dimension  DimSize="20" MaxDimSize="20"/>
+               </hdf5:SimpleDataspace>
+            </hdf5:Dataspace>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+            <hdf5:Data>
+               <hdf5:NoData/>
+            </hdf5:Data>
+         </hdf5:Dataset>
+      </hdf5:Group>
+      <hdf5:Group Name="g1.2" OBJ-XID="xid_3944-0" H5Path="/g1/g1.2" Parents="xid_1344-0" H5ParentPaths="/g1" >
+         <hdf5:Group Name="g1.2.1" OBJ-XID="xid_4592-0" H5Path="/g1/g1.2/g1.2.1" Parents="xid_3944-0" H5ParentPaths="/g1/g1.2" >
+            <hdf5:SoftLink LinkName="slink" OBJ-XID="xid_4294967294-4294967293" H5SourcePath="/g1/g1.2/g1.2.1/slink" TargetPath="somevalue"  Parents="xid_4592-0" H5ParentPaths="/g1/g1.2/g1.2.1" />
+         </hdf5:Group>
+      </hdf5:Group>
+   </hdf5:Group>
+   <hdf5:Group Name="g2" OBJ-XID="xid_2320-0" H5Path="/g2" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset2.1" OBJ-XID="xid_6648-0" H5Path= "/g2/dset2.1" Parents="xid_2320-0" H5ParentPaths="/g2">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:NoData/>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="dset2.2" OBJ-XID="xid_7288-0" H5Path= "/g2/dset2.2" Parents="xid_2320-0" H5ParentPaths="/g2">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="2">
+               <hdf5:Dimension  DimSize="3" MaxDimSize="3"/>
+               <hdf5:Dimension  DimSize="5" MaxDimSize="5"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:NoData/>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tall-2B.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tall-2B.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tall-2B.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,65 @@
+#############################
+Expected output for 'h5dump -A -r tall.h5'
+#############################
+HDF5 "tall.h5" {
+GROUP "/" {
+   ATTRIBUTE "attr1" {
+      DATATYPE  H5T_STD_I8BE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+      DATA {
+         "abcdefghi\000"
+      }
+   }
+   ATTRIBUTE "attr2" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 2, 2 ) / ( 2, 2 ) }
+      DATA {
+      (0,0): 0, 1,
+      (1,0): 2, 3
+      }
+   }
+   GROUP "g1" {
+      GROUP "g1.1" {
+         DATASET "dset1.1.1" {
+            DATATYPE  H5T_STD_I32BE
+            DATASPACE  SIMPLE { ( 10, 10 ) / ( 10, 10 ) }
+            ATTRIBUTE "attr1" {
+               DATATYPE  H5T_STD_I8BE
+               DATASPACE  SIMPLE { ( 27 ) / ( 27 ) }
+               DATA {
+         "1st attribute of dset1.1.1\000"
+               }
+            }
+            ATTRIBUTE "attr2" {
+               DATATYPE  H5T_STD_I8BE
+               DATASPACE  SIMPLE { ( 27 ) / ( 27 ) }
+               DATA {
+         "2nd attribute of dset1.1.1\000"
+               }
+            }
+         }
+         DATASET "dset1.1.2" {
+            DATATYPE  H5T_STD_I32BE
+            DATASPACE  SIMPLE { ( 20 ) / ( 20 ) }
+         }
+      }
+      GROUP "g1.2" {
+         GROUP "g1.2.1" {
+            SOFTLINK "slink" {
+               LINKTARGET "somevalue"
+            }
+         }
+      }
+   }
+   GROUP "g2" {
+      DATASET "dset2.1" {
+         DATATYPE  H5T_IEEE_F32BE
+         DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+      }
+      DATASET "dset2.2" {
+         DATATYPE  H5T_IEEE_F32BE
+         DATASPACE  SIMPLE { ( 3, 5 ) / ( 3, 5 ) }
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tall-3.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tall-3.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tall-3.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,15 @@
+#############################
+Expected output for 'h5dump -d /g2/dset2.1 -l /g1/g1.2/g1.2.1/slink tall.h5'
+#############################
+HDF5 "tall.h5" {
+DATASET "/g2/dset2.1" {
+   DATATYPE  H5T_IEEE_F32BE
+   DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+   DATA {
+   (0): 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9
+   }
+}
+SOFTLINK "/g1/g1.2/g1.2.1/slink" {
+   LINKTARGET "somevalue"
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tall-4s.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tall-4s.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tall-4s.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,34 @@
+#############################
+Expected output for 'h5dump --dataset=/g1/g1.1/dset1.1.1 --start=1,1 --stride=2,3 --count=3,2 --block=1,1 tall.h5'
+#############################
+HDF5 "tall.h5" {
+DATASET "/g1/g1.1/dset1.1.1" {
+   DATATYPE  H5T_STD_I32BE
+   DATASPACE  SIMPLE { ( 10, 10 ) / ( 10, 10 ) }
+   SUBSET {
+      START ( 1, 1 );
+      STRIDE ( 2, 3 );
+      COUNT ( 3, 2 );
+      BLOCK ( 1, 1 );
+      DATA {
+      (0,0): 1, 3, 5, 4, 12, 20
+      }
+   }
+   ATTRIBUTE "attr1" {
+      DATATYPE  H5T_STD_I8BE
+      DATASPACE  SIMPLE { ( 27 ) / ( 27 ) }
+      DATA {
+      (0): 49, 115, 116, 32, 97, 116, 116, 114, 105, 98, 117, 116, 101, 32,
+      (14): 111, 102, 32, 100, 115, 101, 116, 49, 46, 49, 46, 49, 0
+      }
+   }
+   ATTRIBUTE "attr2" {
+      DATATYPE  H5T_STD_I8BE
+      DATASPACE  SIMPLE { ( 27 ) / ( 27 ) }
+      DATA {
+      (0): 50, 110, 100, 32, 97, 116, 116, 114, 105, 98, 117, 116, 101, 32,
+      (14): 111, 102, 32, 100, 115, 101, 116, 49, 46, 49, 46, 49, 0
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tall-5s.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tall-5s.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tall-5s.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+#############################
+Expected output for 'h5dump -d /g1/g1.1/dset1.1.2[0;2;10;] tall.h5'
+#############################
+HDF5 "tall.h5" {
+DATASET "/g1/g1.1/dset1.1.2" {
+   DATATYPE  H5T_STD_I32BE
+   DATASPACE  SIMPLE { ( 20 ) / ( 20 ) }
+   SUBSET {
+      START ( 0 );
+      STRIDE ( 2 );
+      COUNT ( 10 );
+      BLOCK ( 1 );
+      DATA {
+      (0): 0, 2, 4, 6, 8, 10, 12, 14, 16, 18
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tall.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tall.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tall.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tall.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tall.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,204 @@
+#############################
+Expected output for 'h5dump --xml tall.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Attribute Name="attr1">
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         97 98 99 100 101 102 103 104 105 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:Attribute Name="attr2">
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="2">
+            <hdf5:Dimension  DimSize="2" MaxDimSize="2"/>
+            <hdf5:Dimension  DimSize="2" MaxDimSize="2"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 1
+         2 3
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:Group Name="g1" OBJ-XID="xid_1344-0" H5Path="/g1" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Group Name="g1.1" OBJ-XID="xid_2968-0" H5Path="/g1/g1.1" Parents="xid_1344-0" H5ParentPaths="/g1" >
+         <hdf5:Dataset Name="dset1.1.1" OBJ-XID="xid_4968-0" H5Path= "/g1/g1.1/dset1.1.1" Parents="xid_2968-0" H5ParentPaths="/g1/g1.1">
+            <hdf5:StorageLayout>
+               <hdf5:ContiguousLayout/>
+            </hdf5:StorageLayout>
+                     <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+               <hdf5:FillValue>
+                     <hdf5:NoFill/>
+               </hdf5:FillValue>
+            </hdf5:FillValueInfo>
+            <hdf5:Dataspace>
+               <hdf5:SimpleDataspace Ndims="2">
+                  <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+                  <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+               </hdf5:SimpleDataspace>
+            </hdf5:Dataspace>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+            <hdf5:Attribute Name="attr1">
+               <hdf5:Dataspace>
+                  <hdf5:SimpleDataspace Ndims="1">
+                     <hdf5:Dimension  DimSize="27" MaxDimSize="27"/>
+                  </hdf5:SimpleDataspace>
+               </hdf5:Dataspace>
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+               <hdf5:Data>
+                  <hdf5:DataFromFile>
+                  49 115 116 32 97 116 116 114 105 98 117 116 101 32 111 102 32
+                  100 115 101 116 49 46 49 46 49 0
+                  </hdf5:DataFromFile>
+               </hdf5:Data>
+            </hdf5:Attribute>
+            <hdf5:Attribute Name="attr2">
+               <hdf5:Dataspace>
+                  <hdf5:SimpleDataspace Ndims="1">
+                     <hdf5:Dimension  DimSize="27" MaxDimSize="27"/>
+                  </hdf5:SimpleDataspace>
+               </hdf5:Dataspace>
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+               <hdf5:Data>
+                  <hdf5:DataFromFile>
+                  50 110 100 32 97 116 116 114 105 98 117 116 101 32 111 102 32
+                  100 115 101 116 49 46 49 46 49 0
+                  </hdf5:DataFromFile>
+               </hdf5:Data>
+            </hdf5:Attribute>
+            <hdf5:Data>
+               <hdf5:DataFromFile>
+               0 0 0 0 0 0 0 0 0 0
+               0 1 2 3 4 5 6 7 8 9
+               0 2 4 6 8 10 12 14 16 18
+               0 3 6 9 12 15 18 21 24 27
+               0 4 8 12 16 20 24 28 32 36
+               0 5 10 15 20 25 30 35 40 45
+               0 6 12 18 24 30 36 42 48 54
+               0 7 14 21 28 35 42 49 56 63
+               0 8 16 24 32 40 48 56 64 72
+               0 9 18 27 36 45 54 63 72 81
+               </hdf5:DataFromFile>
+            </hdf5:Data>
+         </hdf5:Dataset>
+         <hdf5:Dataset Name="dset1.1.2" OBJ-XID="xid_5968-0" H5Path= "/g1/g1.1/dset1.1.2" Parents="xid_2968-0" H5ParentPaths="/g1/g1.1">
+            <hdf5:StorageLayout>
+               <hdf5:ContiguousLayout/>
+            </hdf5:StorageLayout>
+                     <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+               <hdf5:FillValue>
+                     <hdf5:NoFill/>
+               </hdf5:FillValue>
+            </hdf5:FillValueInfo>
+            <hdf5:Dataspace>
+               <hdf5:SimpleDataspace Ndims="1">
+                  <hdf5:Dimension  DimSize="20" MaxDimSize="20"/>
+               </hdf5:SimpleDataspace>
+            </hdf5:Dataspace>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+            <hdf5:Data>
+               <hdf5:DataFromFile>
+               0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+               </hdf5:DataFromFile>
+            </hdf5:Data>
+         </hdf5:Dataset>
+      </hdf5:Group>
+      <hdf5:Group Name="g1.2" OBJ-XID="xid_3944-0" H5Path="/g1/g1.2" Parents="xid_1344-0" H5ParentPaths="/g1" >
+         <hdf5:Group Name="g1.2.1" OBJ-XID="xid_4592-0" H5Path="/g1/g1.2/g1.2.1" Parents="xid_3944-0" H5ParentPaths="/g1/g1.2" >
+            <hdf5:SoftLink LinkName="slink" OBJ-XID="xid_4294967294-4294967293" H5SourcePath="/g1/g1.2/g1.2.1/slink" TargetPath="somevalue"  Parents="xid_4592-0" H5ParentPaths="/g1/g1.2/g1.2.1" />
+         </hdf5:Group>
+      </hdf5:Group>
+   </hdf5:Group>
+   <hdf5:Group Name="g2" OBJ-XID="xid_2320-0" H5Path="/g2" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset2.1" OBJ-XID="xid_6648-0" H5Path= "/g2/dset2.1" Parents="xid_2320-0" H5ParentPaths="/g2">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="dset2.2" OBJ-XID="xid_7288-0" H5Path= "/g2/dset2.2" Parents="xid_2320-0" H5ParentPaths="/g2">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="2">
+               <hdf5:Dimension  DimSize="3" MaxDimSize="3"/>
+               <hdf5:Dimension  DimSize="5" MaxDimSize="5"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0.1 0.2 0.3 0.4
+            0 0.2 0.4 0.6 0.8
+            0 0.3 0.6 0.9 1.2
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tallfilters.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tallfilters.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tallfilters.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,32 @@
+#############################
+Expected output for 'h5dump -H -p -d all tfilters.h5'
+#############################
+HDF5 "tfilters.h5" {
+DATASET "all" {
+   DATATYPE  H5T_STD_I32LE
+   DATASPACE  SIMPLE { ( 20, 10 ) / ( 20, 10 ) }
+   STORAGE_LAYOUT {
+      CHUNKED ( 10, 5 )
+      SIZE 458
+    }
+   FILTERS {
+      PREPROCESSING SHUFFLE
+      COMPRESSION SZIP {
+         PIXELS_PER_BLOCK 4
+         MODE K13
+         CODING ENTROPY
+         BYTE_ORDER LSB
+         HEADER RAW
+      }
+      COMPRESSION DEFLATE { LEVEL 5 }
+      CHECKSUM FLETCHER32
+   }
+   FILLVALUE {
+      FILL_TIME H5D_FILL_TIME_IFSET
+      VALUE  0   
+   }
+   ALLOCATION_TIME {
+      H5D_ALLOC_TIME_INCR
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,15 @@
+#############################
+Expected output for 'h5dump tarray1.h5'
+#############################
+HDF5 "tarray1.h5" {
+GROUP "/" {
+   DATASET "Dataset1" {
+      DATATYPE  H5T_ARRAY { [4] H5T_STD_I32LE }
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): [ 0, 1, 2, 3 ], [ 10, 11, 12, 13 ], [ 20, 21, 22, 23 ],
+      (3): [ 30, 31, 32, 33 ]
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,38 @@
+#############################
+Expected output for 'h5dump --xml tarray1.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976-0" H5Path= "/Dataset1" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:ArrayType Ndims="1">
+            <hdf5:ArrayDimension DimSize="4" DimPerm="0"/>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+         </hdf5:ArrayType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+          0 1 2 3  10 11 12 13  20 21 22 23  30 31 32 33
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tarray1.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,6 @@
+#############################
+ output for 'h5ls -w80 -r -d tarray1.h5'
+#############################
+/Dataset1                Dataset {4}
+    Data:
+        (0) [0,1,2,3], [10,11,12,13], [20,21,22,23], [30,31,32,33]

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray2.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tarray2.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tarray2.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,61 @@
+#############################
+Expected output for 'h5dump tarray2.h5'
+#############################
+HDF5 "tarray2.h5" {
+GROUP "/" {
+   DATASET "Dataset1" {
+      DATATYPE  H5T_ARRAY { [3][4][5] H5T_STD_I32LE }
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): [ 0, 1, 2, 3, 4,
+            10, 11, 12, 13, 14,
+            20, 21, 22, 23, 24,
+            30, 31, 32, 33, 34,
+            100, 101, 102, 103, 104,
+            110, 111, 112, 113, 114,
+            120, 121, 122, 123, 124,
+            130, 131, 132, 133, 134,
+            200, 201, 202, 203, 204,
+            210, 211, 212, 213, 214,
+            220, 221, 222, 223, 224,
+            230, 231, 232, 233, 234 ],
+      (1): [ 1000, 1001, 1002, 1003, 1004,
+            1010, 1011, 1012, 1013, 1014,
+            1020, 1021, 1022, 1023, 1024,
+            1030, 1031, 1032, 1033, 1034,
+            1100, 1101, 1102, 1103, 1104,
+            1110, 1111, 1112, 1113, 1114,
+            1120, 1121, 1122, 1123, 1124,
+            1130, 1131, 1132, 1133, 1134,
+            1200, 1201, 1202, 1203, 1204,
+            1210, 1211, 1212, 1213, 1214,
+            1220, 1221, 1222, 1223, 1224,
+            1230, 1231, 1232, 1233, 1234 ],
+      (2): [ 2000, 2001, 2002, 2003, 2004,
+            2010, 2011, 2012, 2013, 2014,
+            2020, 2021, 2022, 2023, 2024,
+            2030, 2031, 2032, 2033, 2034,
+            2100, 2101, 2102, 2103, 2104,
+            2110, 2111, 2112, 2113, 2114,
+            2120, 2121, 2122, 2123, 2124,
+            2130, 2131, 2132, 2133, 2134,
+            2200, 2201, 2202, 2203, 2204,
+            2210, 2211, 2212, 2213, 2214,
+            2220, 2221, 2222, 2223, 2224,
+            2230, 2231, 2232, 2233, 2234 ],
+      (3): [ 3000, 3001, 3002, 3003, 3004,
+            3010, 3011, 3012, 3013, 3014,
+            3020, 3021, 3022, 3023, 3024,
+            3030, 3031, 3032, 3033, 3034,
+            3100, 3101, 3102, 3103, 3104,
+            3110, 3111, 3112, 3113, 3114,
+            3120, 3121, 3122, 3123, 3124,
+            3130, 3131, 3132, 3133, 3134,
+            3200, 3201, 3202, 3203, 3204,
+            3210, 3211, 3212, 3213, 3214,
+            3220, 3221, 3222, 3223, 3224,
+            3230, 3231, 3232, 3233, 3234 ]
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray2.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tarray2.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray2.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tarray2.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tarray2.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,87 @@
+#############################
+Expected output for 'h5dump --xml tarray2.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976-0" H5Path= "/Dataset1" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:ArrayType Ndims="3">
+            <hdf5:ArrayDimension DimSize="3" DimPerm="0"/>
+            <hdf5:ArrayDimension DimSize="4" DimPerm="1"/>
+            <hdf5:ArrayDimension DimSize="5" DimPerm="2"/>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+         </hdf5:ArrayType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+          0 1 2 3 4
+            10 11 12 13 14
+            20 21 22 23 24
+            30 31 32 33 34
+            100 101 102 103 104
+            110 111 112 113 114
+            120 121 122 123 124
+            130 131 132 133 134
+            200 201 202 203 204
+            210 211 212 213 214
+            220 221 222 223 224
+            230 231 232 233 234
+          1000 1001 1002 1003 1004
+            1010 1011 1012 1013 1014
+            1020 1021 1022 1023 1024
+            1030 1031 1032 1033 1034
+            1100 1101 1102 1103 1104
+            1110 1111 1112 1113 1114
+            1120 1121 1122 1123 1124
+            1130 1131 1132 1133 1134
+            1200 1201 1202 1203 1204
+            1210 1211 1212 1213 1214
+            1220 1221 1222 1223 1224
+            1230 1231 1232 1233 1234
+          2000 2001 2002 2003 2004
+            2010 2011 2012 2013 2014
+            2020 2021 2022 2023 2024
+            2030 2031 2032 2033 2034
+            2100 2101 2102 2103 2104
+            2110 2111 2112 2113 2114
+            2120 2121 2122 2123 2124
+            2130 2131 2132 2133 2134
+            2200 2201 2202 2203 2204
+            2210 2211 2212 2213 2214
+            2220 2221 2222 2223 2224
+            2230 2231 2232 2233 2234
+          3000 3001 3002 3003 3004
+            3010 3011 3012 3013 3014
+            3020 3021 3022 3023 3024
+            3030 3031 3032 3033 3034
+            3100 3101 3102 3103 3104
+            3110 3111 3112 3113 3114
+            3120 3121 3122 3123 3124
+            3130 3131 3132 3133 3134
+            3200 3201 3202 3203 3204
+            3210 3211 3212 3213 3214
+            3220 3221 3222 3223 3224
+            3230 3231 3232 3233 3234
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray3.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tarray3.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tarray3.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,97 @@
+#############################
+Expected output for 'h5dump tarray3.h5'
+#############################
+HDF5 "tarray3.h5" {
+GROUP "/" {
+   DATASET "Dataset1" {
+      DATATYPE  H5T_ARRAY { [4] H5T_ARRAY { [6][3] H5T_STD_I32LE } }
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): [ [ 0, 1, 2,
+               10, 11, 12,
+               20, 21, 22,
+               30, 31, 32,
+               40, 41, 42,
+               50, 51, 52 ], [ 100, 101, 102,
+               110, 111, 112,
+               120, 121, 122,
+               130, 131, 132,
+               140, 141, 142,
+               150, 151, 152 ], [ 200, 201, 202,
+               210, 211, 212,
+               220, 221, 222,
+               230, 231, 232,
+               240, 241, 242,
+               250, 251, 252 ], [ 300, 301, 302,
+               310, 311, 312,
+               320, 321, 322,
+               330, 331, 332,
+               340, 341, 342,
+               350, 351, 352 ] ],
+      (1): [ [ 1000, 1001, 1002,
+               1010, 1011, 1012,
+               1020, 1021, 1022,
+               1030, 1031, 1032,
+               1040, 1041, 1042,
+               1050, 1051, 1052 ], [ 1100, 1101, 1102,
+               1110, 1111, 1112,
+               1120, 1121, 1122,
+               1130, 1131, 1132,
+               1140, 1141, 1142,
+               1150, 1151, 1152 ], [ 1200, 1201, 1202,
+               1210, 1211, 1212,
+               1220, 1221, 1222,
+               1230, 1231, 1232,
+               1240, 1241, 1242,
+               1250, 1251, 1252 ], [ 1300, 1301, 1302,
+               1310, 1311, 1312,
+               1320, 1321, 1322,
+               1330, 1331, 1332,
+               1340, 1341, 1342,
+               1350, 1351, 1352 ] ],
+      (2): [ [ 2000, 2001, 2002,
+               2010, 2011, 2012,
+               2020, 2021, 2022,
+               2030, 2031, 2032,
+               2040, 2041, 2042,
+               2050, 2051, 2052 ], [ 2100, 2101, 2102,
+               2110, 2111, 2112,
+               2120, 2121, 2122,
+               2130, 2131, 2132,
+               2140, 2141, 2142,
+               2150, 2151, 2152 ], [ 2200, 2201, 2202,
+               2210, 2211, 2212,
+               2220, 2221, 2222,
+               2230, 2231, 2232,
+               2240, 2241, 2242,
+               2250, 2251, 2252 ], [ 2300, 2301, 2302,
+               2310, 2311, 2312,
+               2320, 2321, 2322,
+               2330, 2331, 2332,
+               2340, 2341, 2342,
+               2350, 2351, 2352 ] ],
+      (3): [ [ 3000, 3001, 3002,
+               3010, 3011, 3012,
+               3020, 3021, 3022,
+               3030, 3031, 3032,
+               3040, 3041, 3042,
+               3050, 3051, 3052 ], [ 3100, 3101, 3102,
+               3110, 3111, 3112,
+               3120, 3121, 3122,
+               3130, 3131, 3132,
+               3140, 3141, 3142,
+               3150, 3151, 3152 ], [ 3200, 3201, 3202,
+               3210, 3211, 3212,
+               3220, 3221, 3222,
+               3230, 3231, 3232,
+               3240, 3241, 3242,
+               3250, 3251, 3252 ], [ 3300, 3301, 3302,
+               3310, 3311, 3312,
+               3320, 3321, 3322,
+               3330, 3331, 3332,
+               3340, 3341, 3342,
+               3350, 3351, 3352 ] ]
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray3.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tarray3.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray3.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tarray3.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tarray3.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,127 @@
+#############################
+Expected output for 'h5dump --xml tarray3.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976-0" H5Path= "/Dataset1" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:ArrayType Ndims="1">
+            <hdf5:ArrayDimension DimSize="4" DimPerm="0"/>
+            <hdf5:DataType>
+               <hdf5:ArrayType Ndims="2">
+                  <hdf5:ArrayDimension DimSize="6" DimPerm="0"/>
+                  <hdf5:ArrayDimension DimSize="3" DimPerm="1"/>
+                  <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+                     </hdf5:AtomicType>
+                  </hdf5:DataType>
+               </hdf5:ArrayType>
+            </hdf5:DataType>
+         </hdf5:ArrayType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+           0 1 2
+               10 11 12
+               20 21 22
+               30 31 32
+               40 41 42
+               50 51 52  100 101 102
+               110 111 112
+               120 121 122
+               130 131 132
+               140 141 142
+               150 151 152  200 201 202
+               210 211 212
+               220 221 222
+               230 231 232
+               240 241 242
+               250 251 252  300 301 302
+               310 311 312
+               320 321 322
+               330 331 332
+               340 341 342
+               350 351 352
+           1000 1001 1002
+               1010 1011 1012
+               1020 1021 1022
+               1030 1031 1032
+               1040 1041 1042
+               1050 1051 1052  1100 1101 1102
+               1110 1111 1112
+               1120 1121 1122
+               1130 1131 1132
+               1140 1141 1142
+               1150 1151 1152  1200 1201 1202
+               1210 1211 1212
+               1220 1221 1222
+               1230 1231 1232
+               1240 1241 1242
+               1250 1251 1252  1300 1301 1302
+               1310 1311 1312
+               1320 1321 1322
+               1330 1331 1332
+               1340 1341 1342
+               1350 1351 1352
+           2000 2001 2002
+               2010 2011 2012
+               2020 2021 2022
+               2030 2031 2032
+               2040 2041 2042
+               2050 2051 2052  2100 2101 2102
+               2110 2111 2112
+               2120 2121 2122
+               2130 2131 2132
+               2140 2141 2142
+               2150 2151 2152  2200 2201 2202
+               2210 2211 2212
+               2220 2221 2222
+               2230 2231 2232
+               2240 2241 2242
+               2250 2251 2252  2300 2301 2302
+               2310 2311 2312
+               2320 2321 2322
+               2330 2331 2332
+               2340 2341 2342
+               2350 2351 2352
+           3000 3001 3002
+               3010 3011 3012
+               3020 3021 3022
+               3030 3031 3032
+               3040 3041 3042
+               3050 3051 3052  3100 3101 3102
+               3110 3111 3112
+               3120 3121 3122
+               3130 3131 3132
+               3140 3141 3142
+               3150 3151 3152  3200 3201 3202
+               3210 3211 3212
+               3220 3221 3222
+               3230 3231 3232
+               3240 3241 3242
+               3250 3251 3252  3300 3301 3302
+               3310 3311 3312
+               3320 3321 3322
+               3330 3331 3332
+               3340 3341 3342
+               3350 3351 3352
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray4.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tarray4.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tarray4.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,68 @@
+#############################
+Expected output for 'h5dump tarray4.h5'
+#############################
+HDF5 "tarray4.h5" {
+GROUP "/" {
+   DATASET "Dataset1" {
+      DATATYPE  H5T_ARRAY { [4] H5T_COMPOUND {
+         H5T_STD_I32LE "i";
+         H5T_IEEE_F32LE "f";
+      } }
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): [ {
+               0,
+               0
+            }, {
+               1,
+               1
+            }, {
+               2,
+               2
+            }, {
+               3,
+               3
+            } ],
+      (1): [ {
+               10,
+               2.5
+            }, {
+               11,
+               3.5
+            }, {
+               12,
+               4.5
+            }, {
+               13,
+               5.5
+            } ],
+      (2): [ {
+               20,
+               5
+            }, {
+               21,
+               6
+            }, {
+               22,
+               7
+            }, {
+               23,
+               8
+            } ],
+      (3): [ {
+               30,
+               7.5
+            }, {
+               31,
+               8.5
+            }, {
+               32,
+               9.5
+            }, {
+               33,
+               10.5
+            } ]
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray4.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tarray4.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray5.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tarray5.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tarray5.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,68 @@
+#############################
+Expected output for 'h5dump tarray5.h5'
+#############################
+HDF5 "tarray5.h5" {
+GROUP "/" {
+   DATASET "Dataset1" {
+      DATATYPE  H5T_ARRAY { [4] H5T_COMPOUND {
+         H5T_STD_I32LE "i";
+         H5T_ARRAY { [4] H5T_IEEE_F32LE } "f";
+      } }
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): [ {
+               0,
+               [ 0, 1, 2, 3 ]
+            }, {
+               1,
+               [ 2.5, 3.5, 4.5, 5.5 ]
+            }, {
+               2,
+               [ 5, 6, 7, 8 ]
+            }, {
+               3,
+               [ 7.5, 8.5, 9.5, 10.5 ]
+            } ],
+      (1): [ {
+               10,
+               [ 10, 11, 12, 13 ]
+            }, {
+               11,
+               [ 12.5, 13.5, 14.5, 15.5 ]
+            }, {
+               12,
+               [ 15, 16, 17, 18 ]
+            }, {
+               13,
+               [ 17.5, 18.5, 19.5, 20.5 ]
+            } ],
+      (2): [ {
+               20,
+               [ 20, 21, 22, 23 ]
+            }, {
+               21,
+               [ 22.5, 23.5, 24.5, 25.5 ]
+            }, {
+               22,
+               [ 25, 26, 27, 28 ]
+            }, {
+               23,
+               [ 27.5, 28.5, 29.5, 30.5 ]
+            } ],
+      (3): [ {
+               30,
+               [ 30, 31, 32, 33 ]
+            }, {
+               31,
+               [ 32.5, 33.5, 34.5, 35.5 ]
+            }, {
+               32,
+               [ 35, 36, 37, 38 ]
+            }, {
+               33,
+               [ 37.5, 38.5, 39.5, 40.5 ]
+            } ]
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray5.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tarray5.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray6.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tarray6.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tarray6.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#############################
+Expected output for 'h5dump tarray6.h5'
+#############################
+HDF5 "tarray6.h5" {
+GROUP "/" {
+   DATASET "Dataset1" {
+      DATATYPE  H5T_ARRAY { [4] H5T_VLEN { H5T_STD_U32LE} }
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): [ (0), (10, 11), (20, 21, 22), (30, 31, 32, 33) ],
+      (1): [ (100, 101), (110, 111, 112), (120, 121, 122, 123), (130, 131, 132, 133, 134) ],
+      (2): [ (200, 201, 202), (210, 211, 212, 213), (220, 221, 222, 223, 224), (230, 231, 232, 233, 234, 235) ],
+      (3): [ (300, 301, 302, 303), (310, 311, 312, 313, 314), (320, 321, 322, 323, 324, 325), (330, 331, 332, 333, 334, 335, 336) ]
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray6.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tarray6.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray6.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tarray6.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tarray6.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,45 @@
+#############################
+Expected output for 'h5dump --xml tarray6.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976-0" H5Path= "/Dataset1" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:ArrayType Ndims="1">
+            <hdf5:ArrayDimension DimSize="4" DimPerm="0"/>
+            <hdf5:DataType>
+               <hdf5:VLType>
+                  <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="LE" Sign="false" Size="4" />
+                     </hdf5:AtomicType>
+                  </hdf5:DataType>
+               </hdf5:VLType>
+            </hdf5:DataType>
+         </hdf5:ArrayType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+           0  10 11  20 21 22  30 31 32 33
+           100 101  110 111 112  120 121 122 123  130 131 132 133 134
+           200 201 202  210 211 212 213  220 221 222 223 224  230 231 232 233 234 235
+           300 301 302 303  310 311 312 313 314  320 321 322 323 324 325  330 331 332 333 334 335 336
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray7.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tarray7.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tarray7.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#############################
+Expected output for 'h5dump tarray7.h5'
+#############################
+HDF5 "tarray7.h5" {
+GROUP "/" {
+   DATASET "Dataset1" {
+      DATATYPE  H5T_ARRAY { [4] H5T_VLEN { H5T_ARRAY { [4] H5T_STD_U32LE }} }
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): [ ([ 0, 1, 2, 3 ]), ([ 100, 101, 102, 103 ], [ 110, 111, 112, 113 ]), ([ 200, 201, 202, 203 ], [ 210, 211, 212, 213 ], [ 220, 221, 222, 223 ]), ([ 300, 301, 302, 303 ], [ 310, 311, 312, 313 ], [ 320, 321, 322, 323 ], [ 330, 331, 332, 333 ]) ],
+      (1): [ ([ 1000, 1001, 1002, 1003 ], [ 1010, 1011, 1012, 1013 ]), ([ 1100, 1101, 1102, 1103 ], [ 1110, 1111, 1112, 1113 ], [ 1120, 1121, 1122, 1123 ]), ([ 1200, 1201, 1202, 1203 ], [ 1210, 1211, 1212, 1213 ], [ 1220, 1221, 1222, 1223 ], [ 1230, 1231, 1232, 1233 ]), ([ 1300, 1301, 1302, 1303 ], [ 1310, 1311, 1312, 1313 ], [ 1320, 1321, 1322, 1323 ], [ 1330, 1331, 1332, 1333 ], [ 1340, 1341, 1342, 1343 ]) ],
+      (2): [ ([ 2000, 2001, 2002, 2003 ], [ 2010, 2011, 2012, 2013 ], [ 2020, 2021, 2022, 2023 ]), ([ 2100, 2101, 2102, 2103 ], [ 2110, 2111, 2112, 2113 ], [ 2120, 2121, 2122, 2123 ], [ 2130, 2131, 2132, 2133 ]), ([ 2200, 2201, 2202, 2203 ], [ 2210, 2211, 2212, 2213 ], [ 2220, 2221, 2222, 2223 ], [ 2230, 2231, 2232, 2233 ], [ 2240, 2241, 2242, 2243 ]), ([ 2300, 2301, 2302, 2303 ], [ 2310, 2311, 2312, 2313 ], [ 2320, 2321, 2322, 2323 ], [ 2330, 2331, 2332, 2333 ], [ 2340, 2341, 2342, 2343 ], [ 2350, 2351, 2352, 2353 ]) ],
+      (3): [ ([ 3000, 3001, 3002, 3003 ], [ 3010, 3011, 3012, 3013 ], [ 3020, 3021, 3022, 3023 ], [ 3030, 3031, 3032, 3033 ]), ([ 3100, 3101, 3102, 3103 ], [ 3110, 3111, 3112, 3113 ], [ 3120, 3121, 3122, 3123 ], [ 3130, 3131, 3132, 3133 ], [ 3140, 3141, 3142, 3143 ]), ([ 3200, 3201, 3202, 3203 ], [ 3210, 3211, 3212, 3213 ], [ 3220, 3221, 3222, 3223 ], [ 3230, 3231, 3232, 3233 ], [ 3240, 3241, 3242, 3243 ], [ 3250, 3251, 3252, 3253 ]), ([ 3300, 3301, 3302, 3303 ], [ 3310, 3311, 3312, 3313 ], [ 3320, 3321, 3322, 3323 ], [ 3330, 3331, 3332, 3333 ], [ 3340, 3341, 3342, 3343 ], [ 3350, 3351, 3352, 3353 ], [ 3360, 3361, 3362, 3363 ]) ]
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray7.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tarray7.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tarray7.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tarray7.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tarray7.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,50 @@
+#############################
+Expected output for 'h5dump --xml tarray7.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976-0" H5Path= "/Dataset1" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:ArrayType Ndims="1">
+            <hdf5:ArrayDimension DimSize="4" DimPerm="0"/>
+            <hdf5:DataType>
+               <hdf5:VLType>
+                  <hdf5:DataType>
+                     <hdf5:ArrayType Ndims="1">
+                        <hdf5:ArrayDimension DimSize="4" DimPerm="0"/>
+                        <hdf5:DataType>
+                           <hdf5:AtomicType>
+                              <hdf5:IntegerType ByteOrder="LE" Sign="false" Size="4" />
+                           </hdf5:AtomicType>
+                        </hdf5:DataType>
+                     </hdf5:ArrayType>
+                  </hdf5:DataType>
+               </hdf5:VLType>
+            </hdf5:DataType>
+         </hdf5:ArrayType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+            0 1 2 3   100 101 102 103  110 111 112 113   200 201 202 203  210 211 212 213  220 221 222 223   300 301 302 303  310 311 312 313  320 321 322 323  330 331 332 333
+            1000 1001 1002 1003  1010 1011 1012 1013   1100 1101 1102 1103  1110 1111 1112 1113  1120 1121 1122 1123   1200 1201 1202 1203  1210 1211 1212 1213  1220 1221 1222 1223  1230 1231 1232 1233   1300 1301 1302 1303  1310 1311 1312 1313  1320 1321 1322 1323  1330 1331 1332 1333  1340 1341 1342 1343
+            2000 2001 2002 2003  2010 2011 2012 2013  2020 2021 2022 2023   2100 2101 2102 2103  2110 2111 2112 2113  2120 2121 2122 2123  2130 2131 2132 2133   2200 2201 2202 2203  2210 2211 2212 2213  2220 2221 2222 2223  2230 2231 2232 2233  2240 2241 2242 2243   2300 2301 2302 2303  2310 2311 2312 2313  2320 2321 2322 2323  2330 2331 2332 2333  2340 2341 2342 2343  2350 2351 2352 2353
+            3000 3001 3002 3003  3010 3011 3012 3013  3020 3021 3022 3023  3030 3031 3032 3033   3100 3101 3102 3103  3110 3111 3112 3113  3120 3121 3122 3123  3130 3131 3132 3133  3140 3141 3142 3143   3200 3201 3202 3203  3210 3211 3212 3213  3220 3221 3222 3223  3230 3231 3232 3233  3240 3241 3242 3243  3250 3251 3252 3253   3300 3301 3302 3303  3310 3311 3312 3313  3320 3321 3322 3323  3330 3331 3332 3333  3340 3341 3342 3343  3350 3351 3352 3353  3360 3361 3362 3363
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tattr-1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tattr-1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tattr-1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,48 @@
+#############################
+Expected output for 'h5dump tattr.h5'
+#############################
+HDF5 "tattr.h5" {
+GROUP "/" {
+   ATTRIBUTE "attr1" {
+      DATATYPE  H5T_STD_I8BE
+      DATASPACE  SIMPLE { ( 24 ) / ( 24 ) }
+      DATA {
+      (0): 97, 116, 116, 114, 105, 98, 117, 116, 101, 32, 111, 102, 32, 114,
+      (14): 111, 111, 116, 32, 103, 114, 111, 117, 112, 0
+      }
+   }
+   ATTRIBUTE "attr2" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+      DATA {
+      (0): 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
+      }
+   }
+   ATTRIBUTE "attr3" {
+      DATATYPE  H5T_IEEE_F64BE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+      DATA {
+      (0): 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9
+      }
+   }
+   ATTRIBUTE "attr4" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SCALAR
+      DATA {
+      (0): 100
+      }
+   }
+   ATTRIBUTE "attr5" {
+      DATATYPE  H5T_STRING {
+            STRSIZE 17;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         }
+      DATASPACE  SCALAR
+      DATA {
+      (0): "string attribute"
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tattr-2.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tattr-2.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tattr-2.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,32 @@
+#############################
+Expected output for 'h5dump -a /attr1 --attribute /attr4 --attribute=/attr5 tattr.h5'
+#############################
+HDF5 "tattr.h5" {
+ATTRIBUTE "/attr1" {
+   DATATYPE  H5T_STD_I8BE
+   DATASPACE  SIMPLE { ( 24 ) / ( 24 ) }
+   DATA {
+   (0): 97, 116, 116, 114, 105, 98, 117, 116, 101, 32, 111, 102, 32, 114,
+   (14): 111, 111, 116, 32, 103, 114, 111, 117, 112, 0
+   }
+}
+ATTRIBUTE "/attr4" {
+   DATATYPE  H5T_STD_I32BE
+   DATASPACE  SCALAR
+   DATA {
+   (0): 100
+   }
+}
+ATTRIBUTE "/attr5" {
+   DATATYPE  H5T_STRING {
+         STRSIZE 17;
+         STRPAD H5T_STR_NULLTERM;
+         CSET H5T_CSET_ASCII;
+         CTYPE H5T_C_S1;
+      }
+   DATASPACE  SCALAR
+   DATA {
+   (0): "string attribute"
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tattr-3.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tattr-3.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tattr-3.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,12 @@
+#############################
+Expected output for 'h5dump --header -a /attr2 --attribute=/attr tattr.h5'
+#############################
+HDF5 "tattr.h5" {
+ATTRIBUTE "/attr2" {
+   DATATYPE  H5T_STD_I32BE
+   DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+}
+ATTRIBUTE "/attr" {
+   }
+}
+h5dump error: unable to open attribute "/"

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tattr.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tattr.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tattr.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tattr.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tattr.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,90 @@
+#############################
+Expected output for 'h5dump --xml tattr.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Attribute Name="attr1">
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="24" MaxDimSize="24"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         97 116 116 114 105 98 117 116 101 32 111 102 32 114 111 111 116 32 103
+         114 111 117 112 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:Attribute Name="attr2">
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         1 2 3 4 5 6 7 8 9 10
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:Attribute Name="attr3">
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:FloatType ByteOrder="BE" Size="8" SignBitLocation="63" ExponentBits="11" ExponentLocation="52" MantissaBits="52" MantissaLocation="0" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:Attribute Name="attr4">
+      <hdf5:Dataspace>
+         <hdf5:ScalarDataspace />
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         100
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:Attribute Name="attr5">
+      <hdf5:Dataspace>
+         <hdf5:ScalarDataspace />
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="17" StrPad="H5T_STR_NULLTERM"/>
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         "string attribute"
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tattr2.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tattr2.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tattr2.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tattr2.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tattr2.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,321 @@
+#############################
+ output for 'h5ls -w80 -v -S tattr2.h5'
+#############################
+Opened "tattr2.h5" with sec2 driver.
+dset                     Dataset {2/2}
+    Attribute: string    {2}
+        Type:      2-byte null-terminated ASCII string
+        Data:  "ab", "de"
+    Attribute: bitfield  {2}
+        Type:      8-bit bitfield
+        Data:  0x01, 0x02
+    Attribute: opaque    {2}
+        Type:      1-byte opaque type
+               (tag = "1-byte opaque type")
+        Data:  0x01, 0x02
+    Attribute: compound  {2}
+        Type:      struct {
+                   "a"                +0    8-bit integer
+                   "b"                +4    IEEE 64-bit little-endian float
+               } 12 bytes
+        Data:  {1, 2}, {3, 4}
+    Attribute: reference {2}
+        Type:      object reference
+        Data:  DATASET-0:1:0:976, DATASET-0:1:0:976
+    Attribute: enum      {2}
+        Type:      enum 32-bit little-endian integer {
+                   RED              = 0
+                   GREEN            = 1
+               }
+        Data:  RED, RED
+    Attribute: vlen      {2}
+        Type:      variable length of
+                   32-bit little-endian integer
+        Data:  (1), (2,3)
+    Attribute: array     {2}
+        Type:      [3] 32-bit little-endian integer
+        Data:  [1,2,3], [4,5,6]
+    Attribute: integer   {2}
+        Type:      32-bit little-endian integer
+        Data:  1, 2
+    Attribute: float     {2}
+        Type:      IEEE 32-bit little-endian float
+        Data:  1, 2
+    Attribute: string2D  {3, 2}
+        Type:      2-byte null-terminated ASCII string
+        Data:
+            (0,0) "ab", "cd", "ef", "gh", "ij", "kl"
+    Attribute: bitfield2D {3, 2}
+        Type:      8-bit bitfield
+        Data:
+            (0,0) 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
+    Attribute: opaque2D  {3, 2}
+        Type:      1-byte opaque type
+               (tag = "1-byte opaque type")
+        Data:
+            (0,0) 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
+    Attribute: compound2D {3, 2}
+        Type:      struct {
+                   "a"                +0    8-bit integer
+                   "b"                +4    IEEE 64-bit little-endian float
+               } 12 bytes
+        Data:
+            (0,0) {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}, {11, 12}
+    Attribute: reference2D {3, 2}
+        Type:      object reference
+        Data:
+            (0,0) DATASET-0:1:0:976, DATASET-0:1:0:976, DATASET-0:1:0:976,
+            (1,1) DATASET-0:1:0:976, DATASET-0:1:0:976, DATASET-0:1:0:976
+    Attribute: enum2D    {3, 2}
+        Type:      enum 32-bit little-endian integer {
+                   RED              = 0
+                   GREEN            = 1
+               }
+        Data:
+            (0,0) RED, RED, RED, RED, RED, RED
+    Attribute: vlen2D    {3, 2}
+        Type:      variable length of
+                   32-bit little-endian integer
+        Data:
+            (0,0) (0), (1), (2,3), (4,5), (6,7,8), (9,10,11)
+    Attribute: array2D   {3, 2}
+        Type:      [3] 32-bit little-endian integer
+        Data:
+            (0,0) [1,2,3], [4,5,6], [7,8,9], [10,11,12], [13,14,15], [16,17,18]
+    Attribute: integer2D {3, 2}
+        Type:      32-bit little-endian integer
+        Data:
+            (0,0) 1, 2, 3, 4, 5, 6
+    Attribute: float2D   {3, 2}
+        Type:      IEEE 32-bit little-endian float
+        Data:
+            (0,0) 1, 2, 3, 4, 5, 6
+    Attribute: string3D  {4, 3, 2}
+        Type:      2-byte null-terminated ASCII string
+        Data:
+            (0,0,0) "ab", "cd", "ef", "gh", "ij", "kl", "mn", "pq", "rs", "tu",
+            (1,2,0) "vw", "xz", "AB", "CD", "EF", "GH", "IJ", "KL", "MN", "PQ",
+            (3,1,0) "RS", "TU", "VW", "XZ"
+    Attribute: bitfield3D {4, 3, 2}
+        Type:      8-bit bitfield
+        Data:
+            (0,0,0) 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
+            (1,2,0) 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
+            (3,1,0) 0x15, 0x16, 0x17, 0x18
+    Attribute: opaque3D  {4, 3, 2}
+        Type:      1-byte opaque type
+               (tag = "1-byte opaque type")
+        Data:
+            (0,0,0) 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
+            (1,2,0) 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
+            (3,1,0) 0x15, 0x16, 0x17, 0x18
+    Attribute: compound3D {4, 3, 2}
+        Type:      struct {
+                   "a"                +0    8-bit integer
+                   "b"                +4    IEEE 64-bit little-endian float
+               } 12 bytes
+        Data:
+            (0,0,0) {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}, {11, 12}, {13, 
+            (1,0,0)  14}, {15, 16}, {17, 18}, {19, 20}, {21, 22}, {23, 24},
+            (2,0,0) {25, 26}, {27, 28}, {29, 30}, {31, 32}, {33, 34}, {35, 36},
+            (3,0,0) {37, 38}, {39, 40}, {41, 42}, {43, 44}, {45, 46}, {47, 48}
+    Attribute: reference3D {4, 3, 2}
+        Type:      object reference
+        Data:
+            (0,0,0) DATASET-0:1:0:976, DATASET-0:1:0:976, DATASET-0:1:0:976,
+            (0,1,1) DATASET-0:1:0:976, DATASET-0:1:0:976, DATASET-0:1:0:976,
+            (1,0,0) DATASET-0:1:0:976, DATASET-0:1:0:976, DATASET-0:1:0:976,
+            (1,1,1) DATASET-0:1:0:976, DATASET-0:1:0:976, DATASET-0:1:0:976,
+            (2,0,0) DATASET-0:1:0:976, DATASET-0:1:0:976, DATASET-0:1:0:976,
+            (2,1,1) DATASET-0:1:0:976, DATASET-0:1:0:976, DATASET-0:1:0:976,
+            (3,0,0) DATASET-0:1:0:976, DATASET-0:1:0:976, DATASET-0:1:0:976,
+            (3,1,1) DATASET-0:1:0:976, DATASET-0:1:0:976, DATASET-0:1:0:976
+    Attribute: enum3D    {4, 3, 2}
+        Type:      enum 32-bit little-endian integer {
+                   RED              = 0
+                   GREEN            = 1
+               }
+        Data:
+            (0,0,0) RED, RED, RED, RED, RED, RED, RED, RED, RED, RED, RED, RED,
+            (2,0,0) RED, RED, RED, RED, RED, RED, RED, RED, RED, RED, RED, RED
+    Attribute: vlen3D    {4, 3, 2}
+        Type:      variable length of
+                   32-bit little-endian integer
+        Data:
+            (0,0,0) (0), (1), (2), (3), (4), (5), (6,7), (8,9), (10,11),
+            (1,1,1) (12,13), (14,15), (16,17), (18,19,20), (21,22,23),
+            (2,1,0) (24,25,26), (27,28,29), (30,31,32), (33,34,35),
+            (3,0,0) (36,37,38,39), (40,41,42,43), (44,45,46,47), (48,49,50,51),
+            (3,2,0) (52,53,54,55), (56,57,58,59)
+    Attribute: array3D   {4, 3, 2}
+        Type:      [3] 32-bit little-endian integer
+        Data:
+            (0,0,0) [1,2,3], [4,5,6], [7,8,9], [10,11,12], [13,14,15],
+            (0,2,1) [16,17,18], [19,20,21], [22,23,24], [25,26,27], [28,29,30],
+            (1,2,0) [31,32,33], [34,35,36], [37,38,39], [40,41,42], [43,44,45],
+            (2,1,1) [46,47,48], [49,50,51], [52,53,54], [55,56,57], [58,59,60],
+            (3,1,0) [61,62,63], [64,65,66], [67,68,69], [70,71,72]
+    Attribute: integer3D {4, 3, 2}
+        Type:      32-bit little-endian integer
+        Data:
+            (0,0,0) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+            (2,2,1) 18, 19, 20, 21, 22, 23, 24
+    Attribute: float3D   {4, 3, 2}
+        Type:      IEEE 32-bit little-endian float
+        Data:
+            (0,0,0) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+            (2,2,1) 18, 19, 20, 21, 22, 23, 24
+    Location:  0:1:0:976
+    Links:     1
+    Modified:  XXXX-XX-XX XX:XX:XX XXX
+    Storage:   8 logical bytes, 0 allocated bytes
+    Type:      32-bit little-endian integer
+g1                       Group
+    Attribute: string    {2}
+        Type:      2-byte null-terminated ASCII string
+        Data:  "ab", "de"
+    Attribute: bitfield  {2}
+        Type:      8-bit bitfield
+        Data:  0x01, 0x02
+    Attribute: opaque    {2}
+        Type:      1-byte opaque type
+               (tag = "1-byte opaque type")
+        Data:  0x01, 0x02
+    Attribute: compound  {2}
+        Type:      struct {
+                   "a"                +0    8-bit integer
+                   "b"                +4    IEEE 64-bit little-endian float
+               } 12 bytes
+        Data:  {1, 2}, {3, 4}
+    Attribute: enum      {2}
+        Type:      enum 32-bit little-endian integer {
+                   RED              = 0
+                   GREEN            = 1
+               }
+        Data:  RED, RED
+    Attribute: vlen      {2}
+        Type:      variable length of
+                   32-bit little-endian integer
+        Data:  (1), (2,3)
+    Attribute: array     {2}
+        Type:      [3] 32-bit little-endian integer
+        Data:  [1,2,3], [4,5,6]
+    Attribute: integer   {2}
+        Type:      32-bit little-endian integer
+        Data:  1, 2
+    Attribute: float     {2}
+        Type:      IEEE 32-bit little-endian float
+        Data:  1, 2
+    Attribute: string2D  {3, 2}
+        Type:      2-byte null-terminated ASCII string
+        Data:
+            (0,0) "ab", "cd", "ef", "gh", "ij", "kl"
+    Attribute: bitfield2D {3, 2}
+        Type:      8-bit bitfield
+        Data:
+            (0,0) 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
+    Attribute: opaque2D  {3, 2}
+        Type:      1-byte opaque type
+               (tag = "1-byte opaque type")
+        Data:
+            (0,0) 0x01, 0x02, 0x03, 0x04, 0x05, 0x06
+    Attribute: compound2D {3, 2}
+        Type:      struct {
+                   "a"                +0    8-bit integer
+                   "b"                +4    IEEE 64-bit little-endian float
+               } 12 bytes
+        Data:
+            (0,0) {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}, {11, 12}
+    Attribute: enum2D    {3, 2}
+        Type:      enum 32-bit little-endian integer {
+                   RED              = 0
+                   GREEN            = 1
+               }
+        Data:
+            (0,0) RED, RED, RED, RED, RED, RED
+    Attribute: vlen2D    {3, 2}
+        Type:      variable length of
+                   32-bit little-endian integer
+        Data:
+            (0,0) (0), (1), (2,3), (4,5), (6,7,8), (9,10,11)
+    Attribute: array2D   {3, 2}
+        Type:      [3] 32-bit little-endian integer
+        Data:
+            (0,0) [1,2,3], [4,5,6], [7,8,9], [10,11,12], [13,14,15], [16,17,18]
+    Attribute: integer2D {3, 2}
+        Type:      32-bit little-endian integer
+        Data:
+            (0,0) 1, 2, 3, 4, 5, 6
+    Attribute: float2D   {3, 2}
+        Type:      IEEE 32-bit little-endian float
+        Data:
+            (0,0) 1, 2, 3, 4, 5, 6
+    Attribute: string3D  {4, 3, 2}
+        Type:      2-byte null-terminated ASCII string
+        Data:
+            (0,0,0) "ab", "cd", "ef", "gh", "ij", "kl", "mn", "pq", "rs", "tu",
+            (1,2,0) "vw", "xz", "AB", "CD", "EF", "GH", "IJ", "KL", "MN", "PQ",
+            (3,1,0) "RS", "TU", "VW", "XZ"
+    Attribute: bitfield3D {4, 3, 2}
+        Type:      8-bit bitfield
+        Data:
+            (0,0,0) 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
+            (1,2,0) 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
+            (3,1,0) 0x15, 0x16, 0x17, 0x18
+    Attribute: opaque3D  {4, 3, 2}
+        Type:      1-byte opaque type
+               (tag = "1-byte opaque type")
+        Data:
+            (0,0,0) 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a,
+            (1,2,0) 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14,
+            (3,1,0) 0x15, 0x16, 0x17, 0x18
+    Attribute: compound3D {4, 3, 2}
+        Type:      struct {
+                   "a"                +0    8-bit integer
+                   "b"                +4    IEEE 64-bit little-endian float
+               } 12 bytes
+        Data:
+            (0,0,0) {1, 2}, {3, 4}, {5, 6}, {7, 8}, {9, 10}, {11, 12}, {13, 
+            (1,0,0)  14}, {15, 16}, {17, 18}, {19, 20}, {21, 22}, {23, 24},
+            (2,0,0) {25, 26}, {27, 28}, {29, 30}, {31, 32}, {33, 34}, {35, 36},
+            (3,0,0) {37, 38}, {39, 40}, {41, 42}, {43, 44}, {45, 46}, {47, 48}
+    Attribute: enum3D    {4, 3, 2}
+        Type:      enum 32-bit little-endian integer {
+                   RED              = 0
+                   GREEN            = 1
+               }
+        Data:
+            (0,0,0) RED, RED, RED, RED, RED, RED, RED, RED, RED, RED, RED, RED,
+            (2,0,0) RED, RED, RED, RED, RED, RED, RED, RED, RED, RED, RED, RED
+    Attribute: vlen3D    {4, 3, 2}
+        Type:      variable length of
+                   32-bit little-endian integer
+        Data:
+            (0,0,0) (0), (1), (2), (3), (4), (5), (6,7), (8,9), (10,11),
+            (1,1,1) (12,13), (14,15), (16,17), (18,19,20), (21,22,23),
+            (2,1,0) (24,25,26), (27,28,29), (30,31,32), (33,34,35),
+            (3,0,0) (36,37,38,39), (40,41,42,43), (44,45,46,47), (48,49,50,51),
+            (3,2,0) (52,53,54,55), (56,57,58,59)
+    Attribute: array3D   {4, 3, 2}
+        Type:      [3] 32-bit little-endian integer
+        Data:
+            (0,0,0) [1,2,3], [4,5,6], [7,8,9], [10,11,12], [13,14,15],
+            (0,2,1) [16,17,18], [19,20,21], [22,23,24], [25,26,27], [28,29,30],
+            (1,2,0) [31,32,33], [34,35,36], [37,38,39], [40,41,42], [43,44,45],
+            (2,1,1) [46,47,48], [49,50,51], [52,53,54], [55,56,57], [58,59,60],
+            (3,1,0) [61,62,63], [64,65,66], [67,68,69], [70,71,72]
+    Attribute: integer3D {4, 3, 2}
+        Type:      32-bit little-endian integer
+        Data:
+            (0,0,0) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+            (2,2,1) 18, 19, 20, 21, 22, 23, 24
+    Attribute: float3D   {4, 3, 2}
+        Type:      IEEE 32-bit little-endian float
+        Data:
+            (0,0,0) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+            (2,2,1) 18, 19, 20, 21, 22, 23, 24
+    Location:  0:1:0:2176
+    Links:     1
+g2                       Group
+    Location:  0:1:0:2824
+    Links:     1

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tbitfields-1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tbitfields-1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tbitfields-1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,26 @@
+#############################
+Expected output for 'h5dump tbitfields.h5'
+#############################
+HDF5 "tbitfields.h5" {
+GROUP "/" {
+   GROUP "typetests" {
+      DATASET "bitfield_1" {
+         DATATYPE { H5T_STD_B8LE } 
+         DATASPACE { SIMPLE ( 32 ) / ( 32 ) } 
+         DATA {
+            0xff, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7, 0xf6, 0xf5,
+            0xf4, 0xf3, 0xf2, 0xf1, 0xf0, 0xef, 0xee, 0xed, 0xec, 0xeb, 0xea,
+            0xe9, 0xe8, 0xe7, 0xe6, 0xe5, 0xe4, 0xe3, 0xe2, 0xe1, 0xe0
+         } 
+      } 
+      DATASET "bitfield_2" {
+         DATATYPE { H5T_STD_B16LE } 
+         DATASPACE { SIMPLE ( 16 ) / ( 16 ) } 
+         DATA {
+            0xfffe, 0xfdfc, 0xfbfa, 0xf9f8, 0xf7f6, 0xf5f4, 0xf3f2, 0xf1f0,
+            0xefee, 0xedec, 0xebea, 0xe9e8, 0xe7e6, 0xe5e4, 0xe3e2, 0xe1e0
+         } 
+      } 
+   } 
+} 
+} 

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tbitfields.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tbitfields.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tbitfields.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tbitfields.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tbitfields.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,63 @@
+#############################
+Expected output for 'h5dump --xml tbitfields.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Group Name="typetests" OBJ-XID="xid_1344-0" H5Path="/typetests" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="bitfield_1" OBJ-XID="xid_1720-0" H5Path= "/typetests/bitfield_1" Parents="xid_1344-0" H5ParentPaths="/typetests">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="32" MaxDimSize="32"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:BitfieldType ByteOrder="LE" Size="1"/>
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0xff 0xfe 0xfd 0xfc 0xfb 0xfa 0xf9 0xf8 0xf7 0xf6 0xf5 0xf4 0xf3
+            0xf2 0xf1 0xf0 0xef 0xee 0xed 0xec 0xeb 0xea 0xe9 0xe8 0xe7 0xe6
+            0xe5 0xe4 0xe3 0xe2 0xe1 0xe0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="bitfield_2" OBJ-XID="xid_2352-0" H5Path= "/typetests/bitfield_2" Parents="xid_1344-0" H5ParentPaths="/typetests">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="16" MaxDimSize="16"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:BitfieldType ByteOrder="LE" Size="2"/>
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            ff:fe fd:fc fb:fa f9:f8 f7:f6 f5:f4 f3:f2 f1:f0 ef:ee ed:ec eb:ea
+            e9:e8 e7:e6 e5:e4 e3:e2 e1:e0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tboot1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tboot1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tboot1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,24 @@
+#############################
+Expected output for 'h5dump -H -B -d dset tfcontents1.h5'
+#############################
+HDF5 "tfcontents1.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 0
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   FILE_DRIVER H5FD_SEC2
+   ISTORE_K 32
+}
+USER_BLOCK {
+   USERBLOCK_SIZE 0
+}
+DATASET "dset" {
+   DATATYPE  H5T_STD_I32LE
+   DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tboot2.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tboot2.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tboot2.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,22 @@
+#############################
+Expected output for 'h5dump -B tfcontents2.h5'
+#############################
+HDF5 "tfcontents2.h5" {
+SUPER_BLOCK {
+   SUPERBLOCK_VERSION 0
+   FREELIST_VERSION 0
+   SYMBOLTABLE_VERSION 0
+   OBJECTHEADER_VERSION 0
+   OFFSET_SIZE 8
+   LENGTH_SIZE 8
+   BTREE_RANK 16
+   BTREE_LEAF 4
+   FILE_DRIVER H5FD_SEC2
+   ISTORE_K 32
+}
+USER_BLOCK {
+   USERBLOCK_SIZE 0
+}
+GROUP "/" {
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tchar.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tchar.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tchar1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tchar1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tchar1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+#############################
+Expected output for 'h5dump -r tchar.h5'
+#############################
+HDF5 "tchar.h5" {
+GROUP "/" {
+   DATASET "Dataset1" {
+      DATATYPE  H5T_STD_I8LE
+      DATASPACE  SIMPLE { ( 308 ) / ( 308 ) }
+      DATA {
+         "Four score and seven years ago our forefathers brought forth on this "
+         "continent a new nation, conceived in liberty and dedicated to the pro"
+         "position that all men are created equal. Now we are engaged in a grea"
+         "t civil war, testing whether that nation or any nation so conceived a"
+         "nd so dedicated can long endure."
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tchunked.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tchunked.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tchunked.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,24 @@
+#############################
+Expected output for 'h5dump -H -p -d chunked tfilters.h5'
+#############################
+HDF5 "tfilters.h5" {
+DATASET "chunked" {
+COMMENT "This is a dataset with chunked storage"
+   DATATYPE  H5T_STD_I32LE
+   DATASPACE  SIMPLE { ( 20, 10 ) / ( 20, 10 ) }
+   STORAGE_LAYOUT {
+      CHUNKED ( 10, 5 )
+      SIZE 800
+    }
+   FILTERS {
+      NONE
+   }
+   FILLVALUE {
+      FILL_TIME H5D_FILL_TIME_IFSET
+      VALUE  0   
+   }
+   ALLOCATION_TIME {
+      H5D_ALLOC_TIME_INCR
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,290 @@
+#############################
+Expected output for 'h5dump tcompound.h5'
+#############################
+HDF5 "tcompound.h5" {
+GROUP "/" {
+   DATATYPE "#6632:0" H5T_COMPOUND {
+      H5T_STD_I32BE "int";
+      H5T_IEEE_F32BE "float";
+   }
+   DATASET "dset1" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I32BE "a_name";
+         H5T_IEEE_F32BE "b_name";
+         H5T_IEEE_F64BE "c_name";
+      }
+      DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+      DATA {
+      (0): {
+            0,
+            0,
+            1
+         },
+      (1): {
+            1,
+            1,
+            0.5
+         },
+      (2): {
+            2,
+            4,
+            0.333333
+         },
+      (3): {
+            3,
+            9,
+            0.25
+         },
+      (4): {
+            4,
+            16,
+            0.2
+         }
+      }
+   }
+   GROUP "group1" {
+      DATASET "dset2" {
+         DATATYPE  "/type1"
+         DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+         DATA {
+         (0): {
+               0,
+               0
+            },
+         (1): {
+               1,
+               1.1
+            },
+         (2): {
+               2,
+               2.2
+            },
+         (3): {
+               3,
+               3.3
+            },
+         (4): {
+               4,
+               4.4
+            }
+         }
+      }
+      DATASET "dset3" {
+         DATATYPE  "/type2"
+         DATASPACE  SIMPLE { ( 3, 6 ) / ( 3, 6 ) }
+         DATA {
+         (0,0): {
+               [ 0, 1, 2, 3 ],
+               [ 1, 2, 3, 4, 5, 6,
+                  2, 3, 4, 5, 6, 7,
+                  3, 4, 5, 6, 7, 8,
+                  4, 5, 6, 7, 8, 9,
+                  5, 6, 7, 8, 9, 10 ]
+            },
+         (0,1): {
+               [ 1, 2, 3, 4 ],
+               [ 2, 3, 4, 5, 6, 7,
+                  3, 4, 5, 6, 7, 8,
+                  4, 5, 6, 7, 8, 9,
+                  5, 6, 7, 8, 9, 10,
+                  6, 7, 8, 9, 10, 11 ]
+            },
+         (0,2): {
+               [ 2, 3, 4, 5 ],
+               [ 3, 4, 5, 6, 7, 8,
+                  4, 5, 6, 7, 8, 9,
+                  5, 6, 7, 8, 9, 10,
+                  6, 7, 8, 9, 10, 11,
+                  7, 8, 9, 10, 11, 12 ]
+            },
+         (0,3): {
+               [ 3, 4, 5, 6 ],
+               [ 4, 5, 6, 7, 8, 9,
+                  5, 6, 7, 8, 9, 10,
+                  6, 7, 8, 9, 10, 11,
+                  7, 8, 9, 10, 11, 12,
+                  8, 9, 10, 11, 12, 13 ]
+            },
+         (0,4): {
+               [ 4, 5, 6, 7 ],
+               [ 5, 6, 7, 8, 9, 10,
+                  6, 7, 8, 9, 10, 11,
+                  7, 8, 9, 10, 11, 12,
+                  8, 9, 10, 11, 12, 13,
+                  9, 10, 11, 12, 13, 14 ]
+            },
+         (0,5): {
+               [ 5, 6, 7, 8 ],
+               [ 6, 7, 8, 9, 10, 11,
+                  7, 8, 9, 10, 11, 12,
+                  8, 9, 10, 11, 12, 13,
+                  9, 10, 11, 12, 13, 14,
+                  10, 11, 12, 13, 14, 15 ]
+            },
+         (1,0): {
+               [ 1, 2, 3, 4 ],
+               [ 2, 3, 4, 5, 6, 7,
+                  3, 4, 5, 6, 7, 8,
+                  4, 5, 6, 7, 8, 9,
+                  5, 6, 7, 8, 9, 10,
+                  6, 7, 8, 9, 10, 11 ]
+            },
+         (1,1): {
+               [ 2, 3, 4, 5 ],
+               [ 3, 4, 5, 6, 7, 8,
+                  4, 5, 6, 7, 8, 9,
+                  5, 6, 7, 8, 9, 10,
+                  6, 7, 8, 9, 10, 11,
+                  7, 8, 9, 10, 11, 12 ]
+            },
+         (1,2): {
+               [ 3, 4, 5, 6 ],
+               [ 4, 5, 6, 7, 8, 9,
+                  5, 6, 7, 8, 9, 10,
+                  6, 7, 8, 9, 10, 11,
+                  7, 8, 9, 10, 11, 12,
+                  8, 9, 10, 11, 12, 13 ]
+            },
+         (1,3): {
+               [ 4, 5, 6, 7 ],
+               [ 5, 6, 7, 8, 9, 10,
+                  6, 7, 8, 9, 10, 11,
+                  7, 8, 9, 10, 11, 12,
+                  8, 9, 10, 11, 12, 13,
+                  9, 10, 11, 12, 13, 14 ]
+            },
+         (1,4): {
+               [ 5, 6, 7, 8 ],
+               [ 6, 7, 8, 9, 10, 11,
+                  7, 8, 9, 10, 11, 12,
+                  8, 9, 10, 11, 12, 13,
+                  9, 10, 11, 12, 13, 14,
+                  10, 11, 12, 13, 14, 15 ]
+            },
+         (1,5): {
+               [ 6, 7, 8, 9 ],
+               [ 7, 8, 9, 10, 11, 12,
+                  8, 9, 10, 11, 12, 13,
+                  9, 10, 11, 12, 13, 14,
+                  10, 11, 12, 13, 14, 15,
+                  11, 12, 13, 14, 15, 16 ]
+            },
+         (2,0): {
+               [ 2, 3, 4, 5 ],
+               [ 3, 4, 5, 6, 7, 8,
+                  4, 5, 6, 7, 8, 9,
+                  5, 6, 7, 8, 9, 10,
+                  6, 7, 8, 9, 10, 11,
+                  7, 8, 9, 10, 11, 12 ]
+            },
+         (2,1): {
+               [ 3, 4, 5, 6 ],
+               [ 4, 5, 6, 7, 8, 9,
+                  5, 6, 7, 8, 9, 10,
+                  6, 7, 8, 9, 10, 11,
+                  7, 8, 9, 10, 11, 12,
+                  8, 9, 10, 11, 12, 13 ]
+            },
+         (2,2): {
+               [ 4, 5, 6, 7 ],
+               [ 5, 6, 7, 8, 9, 10,
+                  6, 7, 8, 9, 10, 11,
+                  7, 8, 9, 10, 11, 12,
+                  8, 9, 10, 11, 12, 13,
+                  9, 10, 11, 12, 13, 14 ]
+            },
+         (2,3): {
+               [ 5, 6, 7, 8 ],
+               [ 6, 7, 8, 9, 10, 11,
+                  7, 8, 9, 10, 11, 12,
+                  8, 9, 10, 11, 12, 13,
+                  9, 10, 11, 12, 13, 14,
+                  10, 11, 12, 13, 14, 15 ]
+            },
+         (2,4): {
+               [ 6, 7, 8, 9 ],
+               [ 7, 8, 9, 10, 11, 12,
+                  8, 9, 10, 11, 12, 13,
+                  9, 10, 11, 12, 13, 14,
+                  10, 11, 12, 13, 14, 15,
+                  11, 12, 13, 14, 15, 16 ]
+            },
+         (2,5): {
+               [ 7, 8, 9, 10 ],
+               [ 8, 9, 10, 11, 12, 13,
+                  9, 10, 11, 12, 13, 14,
+                  10, 11, 12, 13, 14, 15,
+                  11, 12, 13, 14, 15, 16,
+                  12, 13, 14, 15, 16, 17 ]
+            }
+         }
+      }
+      DATASET "dset4" {
+         DATATYPE  "/group1/type3"
+         DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+         DATA {
+         (0): {
+               0,
+               3
+            },
+         (1): {
+               1,
+               4
+            },
+         (2): {
+               2,
+               5
+            },
+         (3): {
+               3,
+               6
+            },
+         (4): {
+               4,
+               7
+            }
+         }
+      }
+      DATATYPE "type3" H5T_COMPOUND {
+         H5T_STD_I32BE "int";
+         H5T_IEEE_F32BE "float";
+      }
+   }
+   GROUP "group2" {
+      DATASET "dset5" {
+         DATATYPE  "/#6632:0"
+         DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+         DATA {
+         (0): {
+               0,
+               0
+            },
+         (1): {
+               1,
+               0.1
+            },
+         (2): {
+               2,
+               0.2
+            },
+         (3): {
+               3,
+               0.3
+            },
+         (4): {
+               4,
+               0.4
+            }
+         }
+      }
+   }
+   DATATYPE "type1" H5T_COMPOUND {
+      H5T_STD_I32BE "int_name";
+      H5T_IEEE_F32BE "float_name";
+   }
+   DATATYPE "type2" H5T_COMPOUND {
+      H5T_ARRAY { [4] H5T_STD_I32BE } "int_array";
+      H5T_ARRAY { [5][6] H5T_IEEE_F32BE } "float_array";
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-1.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-1.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-1.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,59 @@
+#############################
+ output for 'h5ls -w80 -r -d tcompound.h5'
+#############################
+/dset1                   Dataset {5}
+    Data:
+        (0) {0, 0, 1}, {1, 1, 0.5}, {2, 4, 0.333333333333333}, {3, 9, 0.25},
+        (4) {4, 16, 0.2}
+/group1                  Group
+/group1/dset2            Dataset {5}
+    Data:
+        (0) {0, 0}, {1, 1.1}, {2, 2.2}, {3, 3.3}, {4, 4.4}
+/group1/dset3            Dataset {3, 6}
+    Data:
+        (0,0) {[0,1,2,3], [1,2,3,4,5,6,2,3,4,5,6,7,3,4,5,6,7,8,4,5,6,7,8,9,5,6,
+        (0,0)  7,8,9,10]},
+        (0,1) {[1,2,3,4], [2,3,4,5,6,7,3,4,5,6,7,8,4,5,6,7,8,9,5,6,7,8,9,10,6,
+        (0,1)  7,8,9,10,11]},
+        (0,2) {[2,3,4,5], [3,4,5,6,7,8,4,5,6,7,8,9,5,6,7,8,9,10,6,7,8,9,10,11,
+        (0,2)  7,8,9,10,11,12]},
+        (0,3) {[3,4,5,6], [4,5,6,7,8,9,5,6,7,8,9,10,6,7,8,9,10,11,7,8,9,10,11,
+        (0,3)  12,8,9,10,11,12,13]},
+        (0,4) {[4,5,6,7], [5,6,7,8,9,10,6,7,8,9,10,11,7,8,9,10,11,12,8,9,10,11,
+        (0,4)  12,13,9,10,11,12,13,14]},
+        (0,5) {[5,6,7,8], [6,7,8,9,10,11,7,8,9,10,11,12,8,9,10,11,12,13,9,10,
+        (0,5)  11,12,13,14,10,11,12,13,14,15]},
+        (1,0) {[1,2,3,4], [2,3,4,5,6,7,3,4,5,6,7,8,4,5,6,7,8,9,5,6,7,8,9,10,6,
+        (1,0)  7,8,9,10,11]},
+        (1,1) {[2,3,4,5], [3,4,5,6,7,8,4,5,6,7,8,9,5,6,7,8,9,10,6,7,8,9,10,11,
+        (1,1)  7,8,9,10,11,12]},
+        (1,2) {[3,4,5,6], [4,5,6,7,8,9,5,6,7,8,9,10,6,7,8,9,10,11,7,8,9,10,11,
+        (1,2)  12,8,9,10,11,12,13]},
+        (1,3) {[4,5,6,7], [5,6,7,8,9,10,6,7,8,9,10,11,7,8,9,10,11,12,8,9,10,11,
+        (1,3)  12,13,9,10,11,12,13,14]},
+        (1,4) {[5,6,7,8], [6,7,8,9,10,11,7,8,9,10,11,12,8,9,10,11,12,13,9,10,
+        (1,4)  11,12,13,14,10,11,12,13,14,15]},
+        (1,5) {[6,7,8,9], [7,8,9,10,11,12,8,9,10,11,12,13,9,10,11,12,13,14,10,
+        (1,5)  11,12,13,14,15,11,12,13,14,15,16]},
+        (2,0) {[2,3,4,5], [3,4,5,6,7,8,4,5,6,7,8,9,5,6,7,8,9,10,6,7,8,9,10,11,
+        (2,0)  7,8,9,10,11,12]},
+        (2,1) {[3,4,5,6], [4,5,6,7,8,9,5,6,7,8,9,10,6,7,8,9,10,11,7,8,9,10,11,
+        (2,1)  12,8,9,10,11,12,13]},
+        (2,2) {[4,5,6,7], [5,6,7,8,9,10,6,7,8,9,10,11,7,8,9,10,11,12,8,9,10,11,
+        (2,2)  12,13,9,10,11,12,13,14]},
+        (2,3) {[5,6,7,8], [6,7,8,9,10,11,7,8,9,10,11,12,8,9,10,11,12,13,9,10,
+        (2,3)  11,12,13,14,10,11,12,13,14,15]},
+        (2,4) {[6,7,8,9], [7,8,9,10,11,12,8,9,10,11,12,13,9,10,11,12,13,14,10,
+        (2,4)  11,12,13,14,15,11,12,13,14,15,16]},
+        (2,5) {[7,8,9,10], [8,9,10,11,12,13,9,10,11,12,13,14,10,11,12,13,14,15,
+        (2,5)  11,12,13,14,15,16,12,13,14,15,16,17]}
+/group1/dset4            Dataset {5}
+    Data:
+        (0) {0, 3}, {1, 4}, {2, 5}, {3, 6}, {4, 7}
+/group1/type3            Type
+/group2                  Group
+/group2/dset5            Dataset {5}
+    Data:
+        (0) {0, 0}, {1, 0.1}, {2, 0.2}, {3, 0.3}, {4, 0.4}
+/type1                   Type
+/type2                   Type

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-2.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-2.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-2.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#############################
+Expected output for 'h5dump -t /type1 --datatype /type2 --datatype=/group1/type3 tcompound.h5'
+#############################
+HDF5 "tcompound.h5" {
+DATATYPE "/type1" H5T_COMPOUND {
+   H5T_STD_I32BE "int_name";
+   H5T_IEEE_F32BE "float_name";
+}
+DATATYPE "/type2" H5T_COMPOUND {
+   H5T_ARRAY { [4] H5T_STD_I32BE } "int_array";
+   H5T_ARRAY { [5][6] H5T_IEEE_F32BE } "float_array";
+}
+DATATYPE "/group1/type3" H5T_COMPOUND {
+   H5T_STD_I32BE "int";
+   H5T_IEEE_F32BE "float";
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-3.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-3.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-3.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,37 @@
+#############################
+Expected output for 'h5dump -t /#6632:0 -g /group2 tcompound.h5'
+#############################
+HDF5 "tcompound.h5" {
+DATATYPE "/#6632:0" H5T_COMPOUND {
+   H5T_STD_I32BE "int";
+   H5T_IEEE_F32BE "float";
+}
+GROUP "/group2" {
+   DATASET "dset5" {
+      DATATYPE  "/#6632:0"
+      DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+      DATA {
+      (0): {
+            0,
+            0
+         },
+      (1): {
+            1,
+            0.1
+         },
+      (2): {
+            2,
+            0.2
+         },
+      (3): {
+            3,
+            0.3
+         },
+      (4): {
+            4,
+            0.4
+         }
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-4.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-4.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tcomp-4.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,109 @@
+#############################
+Expected output for 'h5dump tcompound_complex.h5'
+#############################
+HDF5 "tcompound_complex.h5" {
+GROUP "/" {
+   DATASET "CompoundComplex" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I32BE "a_name";
+         H5T_ARRAY { [4] H5T_STRING {
+            STRSIZE H5T_VARIABLE;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         } } "b_name";
+         H5T_STRING {
+            STRSIZE 6;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         } "c_name";
+         H5T_ARRAY { [5][6] H5T_STD_I16BE } "d_name";
+         H5T_IEEE_F32BE "e_name";
+         H5T_ARRAY { [10] H5T_IEEE_F64BE } "f_name";
+         H5T_STD_I8BE "g_name";
+      }
+      DATASPACE  SIMPLE { ( 6 ) / ( 6 ) }
+      DATA {
+      (0): {
+            0,
+            [ "A fight is a contract that takes two people to honor.", "A combative stance means that you've accepted the contract.", "In which case, you deserve what you get.", "  --  Professor Cheng Man-ch'ing" ],
+            "Hello!",
+            [ 0, 1, 2, 3, 4, 5,
+               1, 2, 3, 4, 5, 6,
+               2, 3, 4, 5, 6, 7,
+               3, 4, 5, 6, 7, 8,
+               4, 5, 6, 7, 8, 9 ],
+            0,
+            [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ],
+            109
+         },
+      (1): {
+            1,
+            [ "A fight is a contract that takes two people to honor.", "A combative stance means that you've accepted the contract.", "In which case, you deserve what you get.", "  --  Professor Cheng Man-ch'ing" ],
+            "Hello!",
+            [ 1, 2, 3, 4, 5, 6,
+               2, 3, 4, 5, 6, 7,
+               3, 4, 5, 6, 7, 8,
+               4, 5, 6, 7, 8, 9,
+               5, 6, 7, 8, 9, 10 ],
+            0.96,
+            [ 1024.96, 1024.96, 1024.96, 1024.96, 1024.96, 1024.96, 1024.96, 1024.96, 1024.96, 1024.96 ],
+            109
+         },
+      (2): {
+            2,
+            [ "A fight is a contract that takes two people to honor.", "A combative stance means that you've accepted the contract.", "In which case, you deserve what you get.", "  --  Professor Cheng Man-ch'ing" ],
+            "Hello!",
+            [ 2, 3, 4, 5, 6, 7,
+               3, 4, 5, 6, 7, 8,
+               4, 5, 6, 7, 8, 9,
+               5, 6, 7, 8, 9, 10,
+               6, 7, 8, 9, 10, 11 ],
+            1.92,
+            [ 2049.93, 2049.93, 2049.93, 2049.93, 2049.93, 2049.93, 2049.93, 2049.93, 2049.93, 2049.93 ],
+            109
+         },
+      (3): {
+            3,
+            [ "A fight is a contract that takes two people to honor.", "A combative stance means that you've accepted the contract.", "In which case, you deserve what you get.", "  --  Professor Cheng Man-ch'ing" ],
+            "Hello!",
+            [ 3, 4, 5, 6, 7, 8,
+               4, 5, 6, 7, 8, 9,
+               5, 6, 7, 8, 9, 10,
+               6, 7, 8, 9, 10, 11,
+               7, 8, 9, 10, 11, 12 ],
+            2.88,
+            [ 3074.89, 3074.89, 3074.89, 3074.89, 3074.89, 3074.89, 3074.89, 3074.89, 3074.89, 3074.89 ],
+            109
+         },
+      (4): {
+            4,
+            [ "A fight is a contract that takes two people to honor.", "A combative stance means that you've accepted the contract.", "In which case, you deserve what you get.", "  --  Professor Cheng Man-ch'ing" ],
+            "Hello!",
+            [ 4, 5, 6, 7, 8, 9,
+               5, 6, 7, 8, 9, 10,
+               6, 7, 8, 9, 10, 11,
+               7, 8, 9, 10, 11, 12,
+               8, 9, 10, 11, 12, 13 ],
+            3.84,
+            [ 4099.85, 4099.85, 4099.85, 4099.85, 4099.85, 4099.85, 4099.85, 4099.85, 4099.85, 4099.85 ],
+            109
+         },
+      (5): {
+            5,
+            [ "A fight is a contract that takes two people to honor.", "A combative stance means that you've accepted the contract.", "In which case, you deserve what you get.", "  --  Professor Cheng Man-ch'ing" ],
+            "Hello!",
+            [ 5, 6, 7, 8, 9, 10,
+               6, 7, 8, 9, 10, 11,
+               7, 8, 9, 10, 11, 12,
+               8, 9, 10, 11, 12, 13,
+               9, 10, 11, 12, 13, 14 ],
+            4.8,
+            [ 5124.82, 5124.82, 5124.82, 5124.82, 5124.82, 5124.82, 5124.82, 5124.82, 5124.82, 5124.82 ],
+            109
+         }
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tcompact.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tcompact.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tcompact.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,24 @@
+#############################
+Expected output for 'h5dump -H -p -d compact tfilters.h5'
+#############################
+HDF5 "tfilters.h5" {
+DATASET "compact" {
+COMMENT "This is a dataset with compact storage"
+   DATATYPE  H5T_STD_I32LE
+   DATASPACE  SIMPLE { ( 20, 10 ) / ( 20, 10 ) }
+   STORAGE_LAYOUT {
+      COMPACT
+      SIZE 800
+   }
+   FILTERS {
+      NONE
+   }
+   FILLVALUE {
+      FILL_TIME H5D_FILL_TIME_IFSET
+      VALUE  0   
+   }
+   ALLOCATION_TIME {
+      H5D_ALLOC_TIME_EARLY
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tcompound.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tcompound.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tcompound.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tcompound.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tcompound.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,327 @@
+#############################
+Expected output for 'h5dump --xml tcompound.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:NamedDataType Name="#6632:0" OBJ-XID="xid_4294967294-4294967293" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="int">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="float">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   </hdf5:NamedDataType>
+   <hdf5:NamedDataType Name="type1" OBJ-XID="xid_1424-0" H5Path="/type1" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="int_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="float_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   </hdf5:NamedDataType>
+   <hdf5:NamedDataType Name="type2" OBJ-XID="xid_2792-0" H5Path="/type2" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="int_array">
+               <hdf5:DataType>
+                  <hdf5:ArrayType Ndims="1">
+                     <hdf5:ArrayDimension DimSize="4" DimPerm="0"/>
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:ArrayType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="float_array">
+               <hdf5:DataType>
+                  <hdf5:ArrayType Ndims="2">
+                     <hdf5:ArrayDimension DimSize="5" DimPerm="0"/>
+                     <hdf5:ArrayDimension DimSize="6" DimPerm="1"/>
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:ArrayType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   </hdf5:NamedDataType>
+   <hdf5:Dataset Name="dset1" OBJ-XID="xid_744-0" H5Path= "/dset1" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="5" MaxDimSize="5"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="a_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="b_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="c_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:FloatType ByteOrder="BE" Size="8" SignBitLocation="63" ExponentBits="11" ExponentLocation="52" MantissaBits="52" MantissaLocation="0" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 0 1 1 1 0.5 2 4 0.333333 3 9 0.25 4 16 0.2
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Group Name="group1" OBJ-XID="xid_2104-0" H5Path="/group1" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:NamedDataType Name="type3" OBJ-XID="xid_5592-0" H5Path="/group1/type3" Parents="xid_2104-0" H5ParentPaths="/group1">
+         <hdf5:DataType>
+            <hdf5:CompoundType>
+               <hdf5:Field FieldName="int">
+                  <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                     </hdf5:AtomicType>
+                  </hdf5:DataType>
+               </hdf5:Field>
+               <hdf5:Field FieldName="float">
+                  <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                     </hdf5:AtomicType>
+                  </hdf5:DataType>
+               </hdf5:Field>
+            </hdf5:CompoundType>
+         </hdf5:DataType>
+      </hdf5:NamedDataType>
+      <hdf5:Dataset Name="dset2" OBJ-XID="xid_2152-0" H5Path= "/group1/dset2" Parents="xid_2104-0" H5ParentPaths="/group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="5" MaxDimSize="5"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:NamedDataTypePtr OBJ-XID="xid_1424-0" H5Path="/type1" />
+      <!-- Note: format of compound data not specified -->
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 1 1.1 2 2.2 3 3.3 4 4.4
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="dset3" OBJ-XID="xid_2872-0" H5Path= "/group1/dset3" Parents="xid_2104-0" H5ParentPaths="/group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="2">
+               <hdf5:Dimension  DimSize="3" MaxDimSize="3"/>
+               <hdf5:Dimension  DimSize="6" MaxDimSize="6"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:NamedDataTypePtr OBJ-XID="xid_2792-0" H5Path="/type2" />
+      <!-- Note: format of compound data not specified -->
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+             0 1 2 3  1 2 3 4 5 6
+                  2 3 4 5 6 7
+                  3 4 5 6 7 8
+                  4 5 6 7 8 9
+                  5 6 7 8 9 10
+             1 2 3 4  2 3 4 5 6 7
+                  3 4 5 6 7 8
+                  4 5 6 7 8 9
+                  5 6 7 8 9 10
+                  6 7 8 9 10 11
+             2 3 4 5  3 4 5 6 7 8
+                  4 5 6 7 8 9
+                  5 6 7 8 9 10
+                  6 7 8 9 10 11
+                  7 8 9 10 11 12
+             3 4 5 6  4 5 6 7 8 9
+                  5 6 7 8 9 10
+                  6 7 8 9 10 11
+                  7 8 9 10 11 12
+                  8 9 10 11 12 13
+             4 5 6 7  5 6 7 8 9 10
+                  6 7 8 9 10 11
+                  7 8 9 10 11 12
+                  8 9 10 11 12 13
+                  9 10 11 12 13 14
+             5 6 7 8  6 7 8 9 10 11
+                  7 8 9 10 11 12
+                  8 9 10 11 12 13
+                  9 10 11 12 13 14
+                  10 11 12 13 14 15
+             1 2 3 4  2 3 4 5 6 7
+                  3 4 5 6 7 8
+                  4 5 6 7 8 9
+                  5 6 7 8 9 10
+                  6 7 8 9 10 11
+             2 3 4 5  3 4 5 6 7 8
+                  4 5 6 7 8 9
+                  5 6 7 8 9 10
+                  6 7 8 9 10 11
+                  7 8 9 10 11 12
+             3 4 5 6  4 5 6 7 8 9
+                  5 6 7 8 9 10
+                  6 7 8 9 10 11
+                  7 8 9 10 11 12
+                  8 9 10 11 12 13
+             4 5 6 7  5 6 7 8 9 10
+                  6 7 8 9 10 11
+                  7 8 9 10 11 12
+                  8 9 10 11 12 13
+                  9 10 11 12 13 14
+             5 6 7 8  6 7 8 9 10 11
+                  7 8 9 10 11 12
+                  8 9 10 11 12 13
+                  9 10 11 12 13 14
+                  10 11 12 13 14 15
+             6 7 8 9  7 8 9 10 11 12
+                  8 9 10 11 12 13
+                  9 10 11 12 13 14
+                  10 11 12 13 14 15
+                  11 12 13 14 15 16
+             2 3 4 5  3 4 5 6 7 8
+                  4 5 6 7 8 9
+                  5 6 7 8 9 10
+                  6 7 8 9 10 11
+                  7 8 9 10 11 12
+             3 4 5 6  4 5 6 7 8 9
+                  5 6 7 8 9 10
+                  6 7 8 9 10 11
+                  7 8 9 10 11 12
+                  8 9 10 11 12 13
+             4 5 6 7  5 6 7 8 9 10
+                  6 7 8 9 10 11
+                  7 8 9 10 11 12
+                  8 9 10 11 12 13
+                  9 10 11 12 13 14
+             5 6 7 8  6 7 8 9 10 11
+                  7 8 9 10 11 12
+                  8 9 10 11 12 13
+                  9 10 11 12 13 14
+                  10 11 12 13 14 15
+             6 7 8 9  7 8 9 10 11 12
+                  8 9 10 11 12 13
+                  9 10 11 12 13 14
+                  10 11 12 13 14 15
+                  11 12 13 14 15 16
+             7 8 9 10  8 9 10 11 12 13
+                  9 10 11 12 13 14
+                  10 11 12 13 14 15
+                  11 12 13 14 15 16
+                  12 13 14 15 16 17
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="dset4" OBJ-XID="xid_5672-0" H5Path= "/group1/dset4" Parents="xid_2104-0" H5ParentPaths="/group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="5" MaxDimSize="5"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:NamedDataTypePtr OBJ-XID="xid_5592-0" H5Path="/group1/type3" />
+      <!-- Note: format of compound data not specified -->
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 3 1 4 2 5 3 6 4 7
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+   <hdf5:Group Name="group2" OBJ-XID="xid_6584-0" H5Path="/group2" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset5" OBJ-XID="xid_7040-0" H5Path= "/group2/dset5" Parents="xid_6584-0" H5ParentPaths="/group2">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="5" MaxDimSize="5"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:NamedDataTypePtr OBJ-XID="xid_7040-0"/>
+      <!-- Note: format of compound data not specified -->
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 1 0.1 2 0.2 3 0.3 4 0.4
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tcompound2.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tcompound2.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tcompound2.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tcompound2.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tcompound2.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,231 @@
+#############################
+Expected output for 'h5dump --xml tcompound2.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:NamedDataType Name="#9560:0" OBJ-XID="xid_4294967294-4294967293" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="int">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="float">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   </hdf5:NamedDataType>
+   <hdf5:NamedDataType Name="type1" OBJ-XID="xid_3280-0" H5Path="/type1" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="int_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="float_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   </hdf5:NamedDataType>
+   <hdf5:NamedDataType Name="type2" OBJ-XID="xid_6544-0" H5Path="/type2" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="int_array">
+               <hdf5:DataType>
+                  <hdf5:ArrayType Ndims="1">
+                     <hdf5:ArrayDimension DimSize="4" DimPerm="0"/>
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:ArrayType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="float_array">
+               <hdf5:DataType>
+                  <hdf5:ArrayType Ndims="2">
+                     <hdf5:ArrayDimension DimSize="5" DimPerm="0"/>
+                     <hdf5:ArrayDimension DimSize="6" DimPerm="1"/>
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:ArrayType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   </hdf5:NamedDataType>
+   <hdf5:Dataset Name="dset1" OBJ-XID="xid_744-0" H5Path= "/dset1" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ChunkedLayout Ndims="1">
+            <hdf5:ChunkDimension DimSize="2" />
+            <hdf5:RequiredFilter>
+            </hdf5:RequiredFilter>
+         </hdf5:ChunkedLayout>
+      </hdf5:StorageLayout>
+      <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="6" MaxDimSize="UNLIMITED"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="a_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="b_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="c_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:FloatType ByteOrder="BE" Size="8" SignBitLocation="63" ExponentBits="11" ExponentLocation="52" MantissaBits="52" MantissaLocation="0" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 0 1 1 1 0.5 2 4 0.333333 3 9 0.25 4 16 0.2 5 25 0.166667
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Group Name="group1" OBJ-XID="xid_3960-0" H5Path="/group1" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:NamedDataType Name="type3" OBJ-XID="xid_6624-0" H5Path="/group1/type3" Parents="xid_3960-0" H5ParentPaths="/group1">
+         <hdf5:DataType>
+            <hdf5:CompoundType>
+               <hdf5:Field FieldName="int">
+                  <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                     </hdf5:AtomicType>
+                  </hdf5:DataType>
+               </hdf5:Field>
+               <hdf5:Field FieldName="float">
+                  <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                     </hdf5:AtomicType>
+                  </hdf5:DataType>
+               </hdf5:Field>
+            </hdf5:CompoundType>
+         </hdf5:DataType>
+      </hdf5:NamedDataType>
+      <hdf5:Dataset Name="dset2" OBJ-XID="xid_4008-0" H5Path= "/group1/dset2" Parents="xid_3960-0" H5ParentPaths="/group1">
+         <hdf5:StorageLayout>
+            <hdf5:ChunkedLayout Ndims="1">
+               <hdf5:ChunkDimension DimSize="2" />
+               <hdf5:RequiredFilter>
+               </hdf5:RequiredFilter>
+            </hdf5:ChunkedLayout>
+         </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="6" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:NamedDataTypePtr OBJ-XID="xid_3280-0" H5Path="/type1" />
+      <!-- Note: format of compound data not specified -->
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 1 1.1 2 2.2 3 3.3 4 4.4 5 5.5
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="dset4" OBJ-XID="xid_6704-0" H5Path= "/group1/dset4" Parents="xid_3960-0" H5ParentPaths="/group1">
+         <hdf5:StorageLayout>
+            <hdf5:ChunkedLayout Ndims="1">
+               <hdf5:ChunkDimension DimSize="2" />
+               <hdf5:RequiredFilter>
+               </hdf5:RequiredFilter>
+            </hdf5:ChunkedLayout>
+         </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="6" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:NamedDataTypePtr OBJ-XID="xid_6624-0" H5Path="/group1/type3" />
+      <!-- Note: format of compound data not specified -->
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 1 1 2 2 3 3 4 4 5 5
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+   <hdf5:Group Name="group2" OBJ-XID="xid_9512-0" H5Path="/group2" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset5" OBJ-XID="xid_9968-0" H5Path= "/group2/dset5" Parents="xid_9512-0" H5ParentPaths="/group2">
+         <hdf5:StorageLayout>
+            <hdf5:ChunkedLayout Ndims="1">
+               <hdf5:ChunkDimension DimSize="2" />
+               <hdf5:RequiredFilter>
+               </hdf5:RequiredFilter>
+            </hdf5:ChunkedLayout>
+         </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="6" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:NamedDataTypePtr OBJ-XID="xid_9968-0"/>
+      <!-- Note: format of compound data not specified -->
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 1 1 2 2 3 3 4 4 5 5
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tcompound_complex.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tcompound_complex.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tcompound_complex.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tcompound_complex.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tcompound_complex.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,130 @@
+#############################
+Expected output for 'h5dump --xml tcompound_complex.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:Dataset Name="CompoundComplex" OBJ-XID="xid_976-0" H5Path= "/CompoundComplex" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillOnAlloc" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:Data>
+                  <!-- Compound fill not yet implemented. -->
+                  <hdf5:NoData />
+               </hdf5:Data>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="6" MaxDimSize="6"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="a_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="b_name">
+               <hdf5:DataType>
+                  <hdf5:ArrayType Ndims="1">
+                     <hdf5:ArrayDimension DimSize="4" DimPerm="0"/>
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="H5T_VARIABLE" StrPad="H5T_STR_NULLTERM"/>
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:ArrayType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="c_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="6" StrPad="H5T_STR_NULLTERM"/>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="d_name">
+               <hdf5:DataType>
+                  <hdf5:ArrayType Ndims="2">
+                     <hdf5:ArrayDimension DimSize="5" DimPerm="0"/>
+                     <hdf5:ArrayDimension DimSize="6" DimPerm="1"/>
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="2" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:ArrayType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="e_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="f_name">
+               <hdf5:DataType>
+                  <hdf5:ArrayType Ndims="1">
+                     <hdf5:ArrayDimension DimSize="10" DimPerm="0"/>
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:FloatType ByteOrder="BE" Size="8" SignBitLocation="63" ExponentBits="11" ExponentLocation="52" MantissaBits="52" MantissaLocation="0" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:ArrayType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="g_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0  "A fight is a contract that takes two people to honor." "A combative stance means that you've accepted the contract." "In which case, you deserve what you get." "  --  Professor Cheng Man-ch'ing" "Hello!"  0 1 2 3 4 5
+               1 2 3 4 5 6
+               2 3 4 5 6 7
+               3 4 5 6 7 8
+               4 5 6 7 8 9 0  0 0 0 0 0 0 0 0 0 0 109
+         1  "A fight is a contract that takes two people to honor." "A combative stance means that you've accepted the contract." "In which case, you deserve what you get." "  --  Professor Cheng Man-ch'ing" "Hello!"  1 2 3 4 5 6
+               2 3 4 5 6 7
+               3 4 5 6 7 8
+               4 5 6 7 8 9
+               5 6 7 8 9 10 0.96  1024.96 1024.96 1024.96 1024.96 1024.96 1024.96 1024.96 1024.96 1024.96 1024.96 109
+         2  "A fight is a contract that takes two people to honor." "A combative stance means that you've accepted the contract." "In which case, you deserve what you get." "  --  Professor Cheng Man-ch'ing" "Hello!"  2 3 4 5 6 7
+               3 4 5 6 7 8
+               4 5 6 7 8 9
+               5 6 7 8 9 10
+               6 7 8 9 10 11 1.92  2049.93 2049.93 2049.93 2049.93 2049.93 2049.93 2049.93 2049.93 2049.93 2049.93 109
+         3  "A fight is a contract that takes two people to honor." "A combative stance means that you've accepted the contract." "In which case, you deserve what you get." "  --  Professor Cheng Man-ch'ing" "Hello!"  3 4 5 6 7 8
+               4 5 6 7 8 9
+               5 6 7 8 9 10
+               6 7 8 9 10 11
+               7 8 9 10 11 12 2.88  3074.89 3074.89 3074.89 3074.89 3074.89 3074.89 3074.89 3074.89 3074.89 3074.89 109
+         4  "A fight is a contract that takes two people to honor." "A combative stance means that you've accepted the contract." "In which case, you deserve what you get." "  --  Professor Cheng Man-ch'ing" "Hello!"  4 5 6 7 8 9
+               5 6 7 8 9 10
+               6 7 8 9 10 11
+               7 8 9 10 11 12
+               8 9 10 11 12 13 3.84  4099.85 4099.85 4099.85 4099.85 4099.85 4099.85 4099.85 4099.85 4099.85 4099.85 109
+         5  "A fight is a contract that takes two people to honor." "A combative stance means that you've accepted the contract." "In which case, you deserve what you get." "  --  Professor Cheng Man-ch'ing" "Hello!"  5 6 7 8 9 10
+               6 7 8 9 10 11
+               7 8 9 10 11 12
+               8 9 10 11 12 13
+               9 10 11 12 13 14 4.8  5124.82 5124.82 5124.82 5124.82 5124.82 5124.82 5124.82 5124.82 5124.82 5124.82 109
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tcontents.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tcontents.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tcontents.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,20 @@
+#############################
+Expected output for 'h5dump -n tfcontents1.h5'
+#############################
+HDF5 "tfcontents1.h5" {
+FILE_CONTENTS {
+ datatype   /#5696:0
+ dataset    /dset
+ dataset    /dset3 -> /dset
+ dataset    /dset4 -> /dset
+ dataset    /dsetmytype2
+ group      /g1
+ dataset    /g1/dset1 -> /dset
+ group      /g1/g1.1
+ dataset    /g1/g1.1/dset2 -> /dset
+ group      /g2 -> /g1/g1.1
+ link       /mylink -> mylink
+ datatype   /mytype
+ link       /softlink -> /dset
+ }
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tcontiguos.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tcontiguos.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tcontiguos.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,25 @@
+#############################
+Expected output for 'h5dump -H -p -d contiguous tfilters.h5'
+#############################
+HDF5 "tfilters.h5" {
+DATASET "contiguous" {
+COMMENT "This is a dataset with contiguous storage"
+   DATATYPE  H5T_STD_I32LE
+   DATASPACE  SIMPLE { ( 20, 10 ) / ( 20, 10 ) }
+   STORAGE_LAYOUT {
+      CONTIGUOUS
+      SIZE 800
+      OFFSET 4096
+   }
+   FILTERS {
+      NONE
+   }
+   FILLVALUE {
+      FILL_TIME H5D_FILL_TIME_IFSET
+      VALUE  0   
+   }
+   ALLOCATION_TIME {
+      H5D_ALLOC_TIME_LATE
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tdatareg.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tdatareg.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tdatareg.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,31 @@
+#############################
+Expected output for 'h5dump tdatareg.h5'
+#############################
+HDF5 "tdatareg.h5" {
+GROUP "/" {
+   DATASET "Dataset1" {
+      DATATYPE { H5T_REFERENCE } 
+      DATASPACE { SIMPLE ( 4 ) / ( 4 ) } 
+      DATA {
+         DATASET 0:744 {(2,2)-(7,7)}, DATASET 0:744 {(6,9), (2,2), (8,4), (1,6),
+          (2,8), (3,2), (0,4), (9,0), (7,1), (3,3)}, NULL, NULL
+      } 
+   } 
+   DATASET "Dataset2" {
+      DATATYPE { H5T_STD_U8LE } 
+      DATASPACE { SIMPLE ( 10, 10 ) / ( 10, 10 ) } 
+      DATA {
+         0, 3, 6, 9, 12, 15, 18, 21, 24, 27,
+         30, 33, 36, 39, 42, 45, 48, 51, 54, 57,
+         60, 63, 66, 69, 72, 75, 78, 81, 84, 87,
+         90, 93, 96, 99, 102, 105, 108, 111, 114, 117,
+         120, 123, 126, 129, 132, 135, 138, 141, 144, 147,
+         150, 153, 156, 159, 162, 165, 168, 171, 174, 177,
+         180, 183, 186, 189, 192, 195, 198, 201, 204, 207,
+         210, 213, 216, 219, 222, 225, 228, 231, 234, 237,
+         240, 243, 246, 249, 252, 255, 2, 5, 8, 11,
+         14, 17, 20, 23, 26, 29, 32, 35, 38, 41
+      } 
+   } 
+} 
+} 

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tdatareg.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tdatareg.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tdatareg.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tdatareg.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tdatareg.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,69 @@
+#############################
+Expected output for 'h5dump --xml tdatareg.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_1284-0" H5Path= "/Dataset1" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:ReferenceType>
+               <hdf5:ObjectReferenceType />
+            </hdf5:ReferenceType>
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+   <hdf5:Data>
+   <!-- Note: Region references not supported -->
+   <hdf5:NoData />
+   </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="Dataset2" OBJ-XID="xid_744-0" H5Path= "/Dataset2" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="2">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 3 6 9 12 15 18 21 24 27
+         30 33 36 39 42 45 48 51 54 57
+         60 63 66 69 72 75 78 81 84 87
+         90 93 96 99 102 105 108 111 114 117
+         120 123 126 129 132 135 138 141 144 147
+         150 153 156 159 162 165 168 171 174 177
+         180 183 186 189 192 195 198 201 204 207
+         210 213 216 219 222 225 228 231 234 237
+         240 243 246 249 252 255 2 5 8 11
+         14 17 20 23 26 29 32 35 38 41
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tdeflate.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tdeflate.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tdeflate.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,23 @@
+#############################
+Expected output for 'h5dump -H -p -d deflate tfilters.h5'
+#############################
+HDF5 "tfilters.h5" {
+DATASET "deflate" {
+   DATATYPE  H5T_STD_I32LE
+   DATASPACE  SIMPLE { ( 20, 10 ) / ( 20, 10 ) }
+   STORAGE_LAYOUT {
+      CHUNKED ( 10, 5 )
+      SIZE 385
+    }
+   FILTERS {
+      COMPRESSION DEFLATE { LEVEL 9 }
+   }
+   FILLVALUE {
+      FILL_TIME H5D_FILL_TIME_IFSET
+      VALUE  0   
+   }
+   ALLOCATION_TIME {
+      H5D_ALLOC_TIME_INCR
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tdset-1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tdset-1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tdset-1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,129 @@
+#############################
+Expected output for 'h5dump tdset.h5'
+#############################
+HDF5 "tdset.h5" {
+GROUP "/" {
+   DATASET "dset1" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 10, 20 ) / ( 10, 20 ) }
+      DATA {
+      (0,0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+      (0,18): 18, 19,
+      (1,0): 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+      (1,18): 19, 20,
+      (2,0): 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+      (2,18): 20, 21,
+      (3,0): 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+      (3,18): 21, 22,
+      (4,0): 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+      (4,17): 21, 22, 23,
+      (5,0): 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+      (5,17): 22, 23, 24,
+      (6,0): 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+      (6,17): 23, 24, 25,
+      (7,0): 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+      (7,17): 24, 25, 26,
+      (8,0): 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+      (8,16): 24, 25, 26, 27,
+      (9,0): 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+      (9,16): 25, 26, 27, 28
+      }
+   }
+   DATASET "dset2" {
+      DATATYPE  H5T_IEEE_F64BE
+      DATASPACE  SIMPLE { ( 30, 20 ) / ( 30, 20 ) }
+      DATA {
+      (0,0): 0, 0.0001, 0.0002, 0.0003, 0.0004, 0.0005, 0.0006, 0.0007,
+      (0,8): 0.0008, 0.0009, 0.001, 0.0011, 0.0012, 0.0013, 0.0014, 0.0015,
+      (0,16): 0.0016, 0.0017, 0.0018, 0.0019,
+      (1,0): 1, 1.0001, 1.0002, 1.0003, 1.0004, 1.0005, 1.0006, 1.0007,
+      (1,8): 1.0008, 1.0009, 1.001, 1.0011, 1.0012, 1.0013, 1.0014, 1.0015,
+      (1,16): 1.0016, 1.0017, 1.0018, 1.0019,
+      (2,0): 2, 2.0001, 2.0002, 2.0003, 2.0004, 2.0005, 2.0006, 2.0007,
+      (2,8): 2.0008, 2.0009, 2.001, 2.0011, 2.0012, 2.0013, 2.0014, 2.0015,
+      (2,16): 2.0016, 2.0017, 2.0018, 2.0019,
+      (3,0): 3, 3.0001, 3.0002, 3.0003, 3.0004, 3.0005, 3.0006, 3.0007,
+      (3,8): 3.0008, 3.0009, 3.001, 3.0011, 3.0012, 3.0013, 3.0014, 3.0015,
+      (3,16): 3.0016, 3.0017, 3.0018, 3.0019,
+      (4,0): 4, 4.0001, 4.0002, 4.0003, 4.0004, 4.0005, 4.0006, 4.0007,
+      (4,8): 4.0008, 4.0009, 4.001, 4.0011, 4.0012, 4.0013, 4.0014, 4.0015,
+      (4,16): 4.0016, 4.0017, 4.0018, 4.0019,
+      (5,0): 5, 5.0001, 5.0002, 5.0003, 5.0004, 5.0005, 5.0006, 5.0007,
+      (5,8): 5.0008, 5.0009, 5.001, 5.0011, 5.0012, 5.0013, 5.0014, 5.0015,
+      (5,16): 5.0016, 5.0017, 5.0018, 5.0019,
+      (6,0): 6, 6.0001, 6.0002, 6.0003, 6.0004, 6.0005, 6.0006, 6.0007,
+      (6,8): 6.0008, 6.0009, 6.001, 6.0011, 6.0012, 6.0013, 6.0014, 6.0015,
+      (6,16): 6.0016, 6.0017, 6.0018, 6.0019,
+      (7,0): 7, 7.0001, 7.0002, 7.0003, 7.0004, 7.0005, 7.0006, 7.0007,
+      (7,8): 7.0008, 7.0009, 7.001, 7.0011, 7.0012, 7.0013, 7.0014, 7.0015,
+      (7,16): 7.0016, 7.0017, 7.0018, 7.0019,
+      (8,0): 8, 8.0001, 8.0002, 8.0003, 8.0004, 8.0005, 8.0006, 8.0007,
+      (8,8): 8.0008, 8.0009, 8.001, 8.0011, 8.0012, 8.0013, 8.0014, 8.0015,
+      (8,16): 8.0016, 8.0017, 8.0018, 8.0019,
+      (9,0): 9, 9.0001, 9.0002, 9.0003, 9.0004, 9.0005, 9.0006, 9.0007,
+      (9,8): 9.0008, 9.0009, 9.001, 9.0011, 9.0012, 9.0013, 9.0014, 9.0015,
+      (9,16): 9.0016, 9.0017, 9.0018, 9.0019,
+      (10,0): 10, 10.0001, 10.0002, 10.0003, 10.0004, 10.0005, 10.0006,
+      (10,7): 10.0007, 10.0008, 10.0009, 10.001, 10.0011, 10.0012, 10.0013,
+      (10,14): 10.0014, 10.0015, 10.0016, 10.0017, 10.0018, 10.0019,
+      (11,0): 11, 11.0001, 11.0002, 11.0003, 11.0004, 11.0005, 11.0006,
+      (11,7): 11.0007, 11.0008, 11.0009, 11.001, 11.0011, 11.0012, 11.0013,
+      (11,14): 11.0014, 11.0015, 11.0016, 11.0017, 11.0018, 11.0019,
+      (12,0): 12, 12.0001, 12.0002, 12.0003, 12.0004, 12.0005, 12.0006,
+      (12,7): 12.0007, 12.0008, 12.0009, 12.001, 12.0011, 12.0012, 12.0013,
+      (12,14): 12.0014, 12.0015, 12.0016, 12.0017, 12.0018, 12.0019,
+      (13,0): 13, 13.0001, 13.0002, 13.0003, 13.0004, 13.0005, 13.0006,
+      (13,7): 13.0007, 13.0008, 13.0009, 13.001, 13.0011, 13.0012, 13.0013,
+      (13,14): 13.0014, 13.0015, 13.0016, 13.0017, 13.0018, 13.0019,
+      (14,0): 14, 14.0001, 14.0002, 14.0003, 14.0004, 14.0005, 14.0006,
+      (14,7): 14.0007, 14.0008, 14.0009, 14.001, 14.0011, 14.0012, 14.0013,
+      (14,14): 14.0014, 14.0015, 14.0016, 14.0017, 14.0018, 14.0019,
+      (15,0): 15, 15.0001, 15.0002, 15.0003, 15.0004, 15.0005, 15.0006,
+      (15,7): 15.0007, 15.0008, 15.0009, 15.001, 15.0011, 15.0012, 15.0013,
+      (15,14): 15.0014, 15.0015, 15.0016, 15.0017, 15.0018, 15.0019,
+      (16,0): 16, 16.0001, 16.0002, 16.0003, 16.0004, 16.0005, 16.0006,
+      (16,7): 16.0007, 16.0008, 16.0009, 16.001, 16.0011, 16.0012, 16.0013,
+      (16,14): 16.0014, 16.0015, 16.0016, 16.0017, 16.0018, 16.0019,
+      (17,0): 17, 17.0001, 17.0002, 17.0003, 17.0004, 17.0005, 17.0006,
+      (17,7): 17.0007, 17.0008, 17.0009, 17.001, 17.0011, 17.0012, 17.0013,
+      (17,14): 17.0014, 17.0015, 17.0016, 17.0017, 17.0018, 17.0019,
+      (18,0): 18, 18.0001, 18.0002, 18.0003, 18.0004, 18.0005, 18.0006,
+      (18,7): 18.0007, 18.0008, 18.0009, 18.001, 18.0011, 18.0012, 18.0013,
+      (18,14): 18.0014, 18.0015, 18.0016, 18.0017, 18.0018, 18.0019,
+      (19,0): 19, 19.0001, 19.0002, 19.0003, 19.0004, 19.0005, 19.0006,
+      (19,7): 19.0007, 19.0008, 19.0009, 19.001, 19.0011, 19.0012, 19.0013,
+      (19,14): 19.0014, 19.0015, 19.0016, 19.0017, 19.0018, 19.0019,
+      (20,0): 20, 20.0001, 20.0002, 20.0003, 20.0004, 20.0005, 20.0006,
+      (20,7): 20.0007, 20.0008, 20.0009, 20.001, 20.0011, 20.0012, 20.0013,
+      (20,14): 20.0014, 20.0015, 20.0016, 20.0017, 20.0018, 20.0019,
+      (21,0): 21, 21.0001, 21.0002, 21.0003, 21.0004, 21.0005, 21.0006,
+      (21,7): 21.0007, 21.0008, 21.0009, 21.001, 21.0011, 21.0012, 21.0013,
+      (21,14): 21.0014, 21.0015, 21.0016, 21.0017, 21.0018, 21.0019,
+      (22,0): 22, 22.0001, 22.0002, 22.0003, 22.0004, 22.0005, 22.0006,
+      (22,7): 22.0007, 22.0008, 22.0009, 22.001, 22.0011, 22.0012, 22.0013,
+      (22,14): 22.0014, 22.0015, 22.0016, 22.0017, 22.0018, 22.0019,
+      (23,0): 23, 23.0001, 23.0002, 23.0003, 23.0004, 23.0005, 23.0006,
+      (23,7): 23.0007, 23.0008, 23.0009, 23.001, 23.0011, 23.0012, 23.0013,
+      (23,14): 23.0014, 23.0015, 23.0016, 23.0017, 23.0018, 23.0019,
+      (24,0): 24, 24.0001, 24.0002, 24.0003, 24.0004, 24.0005, 24.0006,
+      (24,7): 24.0007, 24.0008, 24.0009, 24.001, 24.0011, 24.0012, 24.0013,
+      (24,14): 24.0014, 24.0015, 24.0016, 24.0017, 24.0018, 24.0019,
+      (25,0): 25, 25.0001, 25.0002, 25.0003, 25.0004, 25.0005, 25.0006,
+      (25,7): 25.0007, 25.0008, 25.0009, 25.001, 25.0011, 25.0012, 25.0013,
+      (25,14): 25.0014, 25.0015, 25.0016, 25.0017, 25.0018, 25.0019,
+      (26,0): 26, 26.0001, 26.0002, 26.0003, 26.0004, 26.0005, 26.0006,
+      (26,7): 26.0007, 26.0008, 26.0009, 26.001, 26.0011, 26.0012, 26.0013,
+      (26,14): 26.0014, 26.0015, 26.0016, 26.0017, 26.0018, 26.0019,
+      (27,0): 27, 27.0001, 27.0002, 27.0003, 27.0004, 27.0005, 27.0006,
+      (27,7): 27.0007, 27.0008, 27.0009, 27.001, 27.0011, 27.0012, 27.0013,
+      (27,14): 27.0014, 27.0015, 27.0016, 27.0017, 27.0018, 27.0019,
+      (28,0): 28, 28.0001, 28.0002, 28.0003, 28.0004, 28.0005, 28.0006,
+      (28,7): 28.0007, 28.0008, 28.0009, 28.001, 28.0011, 28.0012, 28.0013,
+      (28,14): 28.0014, 28.0015, 28.0016, 28.0017, 28.0018, 28.0019,
+      (29,0): 29, 29.0001, 29.0002, 29.0003, 29.0004, 29.0005, 29.0006,
+      (29,7): 29.0007, 29.0008, 29.0009, 29.001, 29.0011, 29.0012, 29.0013,
+      (29,14): 29.0014, 29.0015, 29.0016, 29.0017, 29.0018, 29.0019
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tdset-1.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tdset-1.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tdset-1.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,101 @@
+#############################
+ output for 'h5ls -w80 -r -d tdset.h5'
+#############################
+/dset1                   Dataset {10, 20}
+    Data:
+        (0,0) 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+        (0,19) 19, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+        (1,17) 18, 19, 20, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+        (2,15) 17, 18, 19, 20, 21, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+        (3,13) 16, 17, 18, 19, 20, 21, 22, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+        (4,11) 15, 16, 17, 18, 19, 20, 21, 22, 23, 5, 6, 7, 8, 9, 10, 11, 12,
+        (5,8) 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 6, 7, 8, 9, 10,
+        (6,5) 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 7, 8,
+        (7,2) 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+        (7,19) 26, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+        (8,16) 24, 25, 26, 27, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+        (9,12) 21, 22, 23, 24, 25, 26, 27, 28
+/dset2                   Dataset {30, 20}
+    Data:
+        (0,0) 0, 0.0001, 0.0002, 0.0003, 0.0004, 0.0005, 0.0006, 0.0007, 0.0008,
+        (0,9) 0.0009, 0.001, 0.0011, 0.0012, 0.0013, 0.0014, 0.0015, 0.0016,
+        (0,17) 0.0017, 0.0018, 0.0019, 1, 1.0001, 1.0002, 1.0003, 1.0004,
+        (1,5) 1.0005, 1.0006, 1.0007, 1.0008, 1.0009, 1.001, 1.0011, 1.0012,
+        (1,13) 1.0013, 1.0014, 1.0015, 1.0016, 1.0017, 1.0018, 1.0019, 2,
+        (2,1) 2.0001, 2.0002, 2.0003, 2.0004, 2.0005, 2.0006, 2.0007, 2.0008,
+        (2,9) 2.0009, 2.001, 2.0011, 2.0012, 2.0013, 2.0014, 2.0015, 2.0016,
+        (2,17) 2.0017, 2.0018, 2.0019, 3, 3.0001, 3.0002, 3.0003, 3.0004,
+        (3,5) 3.0005, 3.0006, 3.0007, 3.0008, 3.0009, 3.001, 3.0011, 3.0012,
+        (3,13) 3.0013, 3.0014, 3.0015, 3.0016, 3.0017, 3.0018, 3.0019, 4,
+        (4,1) 4.0001, 4.0002, 4.0003, 4.0004, 4.0005, 4.0006, 4.0007, 4.0008,
+        (4,9) 4.0009, 4.001, 4.0011, 4.0012, 4.0013, 4.0014, 4.0015, 4.0016,
+        (4,17) 4.0017, 4.0018, 4.0019, 5, 5.0001, 5.0002, 5.0003, 5.0004,
+        (5,5) 5.0005, 5.0006, 5.0007, 5.0008, 5.0009, 5.001, 5.0011, 5.0012,
+        (5,13) 5.0013, 5.0014, 5.0015, 5.0016, 5.0017, 5.0018, 5.0019, 6,
+        (6,1) 6.0001, 6.0002, 6.0003, 6.0004, 6.0005, 6.0006, 6.0007, 6.0008,
+        (6,9) 6.0009, 6.001, 6.0011, 6.0012, 6.0013, 6.0014, 6.0015, 6.0016,
+        (6,17) 6.0017, 6.0018, 6.0019, 7, 7.0001, 7.0002, 7.0003, 7.0004,
+        (7,5) 7.0005, 7.0006, 7.0007, 7.0008, 7.0009, 7.001, 7.0011, 7.0012,
+        (7,13) 7.0013, 7.0014, 7.0015, 7.0016, 7.0017, 7.0018, 7.0019, 8,
+        (8,1) 8.0001, 8.0002, 8.0003, 8.0004, 8.0005, 8.0006, 8.0007, 8.0008,
+        (8,9) 8.0009, 8.001, 8.0011, 8.0012, 8.0013, 8.0014, 8.0015, 8.0016,
+        (8,17) 8.0017, 8.0018, 8.0019, 9, 9.0001, 9.0002, 9.0003, 9.0004,
+        (9,5) 9.0005, 9.0006, 9.0007, 9.0008, 9.0009, 9.001, 9.0011, 9.0012,
+        (9,13) 9.0013, 9.0014, 9.0015, 9.0016, 9.0017, 9.0018, 9.0019, 10,
+        (10,1) 10.0001, 10.0002, 10.0003, 10.0004, 10.0005, 10.0006, 10.0007,
+        (10,8) 10.0008, 10.0009, 10.001, 10.0011, 10.0012, 10.0013, 10.0014,
+        (10,15) 10.0015, 10.0016, 10.0017, 10.0018, 10.0019, 11, 11.0001,
+        (11,2) 11.0002, 11.0003, 11.0004, 11.0005, 11.0006, 11.0007, 11.0008,
+        (11,9) 11.0009, 11.001, 11.0011, 11.0012, 11.0013, 11.0014, 11.0015,
+        (11,16) 11.0016, 11.0017, 11.0018, 11.0019, 12, 12.0001, 12.0002,
+        (12,3) 12.0003, 12.0004, 12.0005, 12.0006, 12.0007, 12.0008, 12.0009,
+        (12,10) 12.001, 12.0011, 12.0012, 12.0013, 12.0014, 12.0015, 12.0016,
+        (12,17) 12.0017, 12.0018, 12.0019, 13, 13.0001, 13.0002, 13.0003,
+        (13,4) 13.0004, 13.0005, 13.0006, 13.0007, 13.0008, 13.0009, 13.001,
+        (13,11) 13.0011, 13.0012, 13.0013, 13.0014, 13.0015, 13.0016, 13.0017,
+        (13,18) 13.0018, 13.0019, 14, 14.0001, 14.0002, 14.0003, 14.0004,
+        (14,5) 14.0005, 14.0006, 14.0007, 14.0008, 14.0009, 14.001, 14.0011,
+        (14,12) 14.0012, 14.0013, 14.0014, 14.0015, 14.0016, 14.0017, 14.0018,
+        (14,19) 14.0019, 15, 15.0001, 15.0002, 15.0003, 15.0004, 15.0005,
+        (15,6) 15.0006, 15.0007, 15.0008, 15.0009, 15.001, 15.0011, 15.0012,
+        (15,13) 15.0013, 15.0014, 15.0015, 15.0016, 15.0017, 15.0018, 15.0019,
+        (16,0) 16, 16.0001, 16.0002, 16.0003, 16.0004, 16.0005, 16.0006,
+        (16,7) 16.0007, 16.0008, 16.0009, 16.001, 16.0011, 16.0012, 16.0013,
+        (16,14) 16.0014, 16.0015, 16.0016, 16.0017, 16.0018, 16.0019, 17,
+        (17,1) 17.0001, 17.0002, 17.0003, 17.0004, 17.0005, 17.0006, 17.0007,
+        (17,8) 17.0008, 17.0009, 17.001, 17.0011, 17.0012, 17.0013, 17.0014,
+        (17,15) 17.0015, 17.0016, 17.0017, 17.0018, 17.0019, 18, 18.0001,
+        (18,2) 18.0002, 18.0003, 18.0004, 18.0005, 18.0006, 18.0007, 18.0008,
+        (18,9) 18.0009, 18.001, 18.0011, 18.0012, 18.0013, 18.0014, 18.0015,
+        (18,16) 18.0016, 18.0017, 18.0018, 18.0019, 19, 19.0001, 19.0002,
+        (19,3) 19.0003, 19.0004, 19.0005, 19.0006, 19.0007, 19.0008, 19.0009,
+        (19,10) 19.001, 19.0011, 19.0012, 19.0013, 19.0014, 19.0015, 19.0016,
+        (19,17) 19.0017, 19.0018, 19.0019, 20, 20.0001, 20.0002, 20.0003,
+        (20,4) 20.0004, 20.0005, 20.0006, 20.0007, 20.0008, 20.0009, 20.001,
+        (20,11) 20.0011, 20.0012, 20.0013, 20.0014, 20.0015, 20.0016, 20.0017,
+        (20,18) 20.0018, 20.0019, 21, 21.0001, 21.0002, 21.0003, 21.0004,
+        (21,5) 21.0005, 21.0006, 21.0007, 21.0008, 21.0009, 21.001, 21.0011,
+        (21,12) 21.0012, 21.0013, 21.0014, 21.0015, 21.0016, 21.0017, 21.0018,
+        (21,19) 21.0019, 22, 22.0001, 22.0002, 22.0003, 22.0004, 22.0005,
+        (22,6) 22.0006, 22.0007, 22.0008, 22.0009, 22.001, 22.0011, 22.0012,
+        (22,13) 22.0013, 22.0014, 22.0015, 22.0016, 22.0017, 22.0018, 22.0019,
+        (23,0) 23, 23.0001, 23.0002, 23.0003, 23.0004, 23.0005, 23.0006,
+        (23,7) 23.0007, 23.0008, 23.0009, 23.001, 23.0011, 23.0012, 23.0013,
+        (23,14) 23.0014, 23.0015, 23.0016, 23.0017, 23.0018, 23.0019, 24,
+        (24,1) 24.0001, 24.0002, 24.0003, 24.0004, 24.0005, 24.0006, 24.0007,
+        (24,8) 24.0008, 24.0009, 24.001, 24.0011, 24.0012, 24.0013, 24.0014,
+        (24,15) 24.0015, 24.0016, 24.0017, 24.0018, 24.0019, 25, 25.0001,
+        (25,2) 25.0002, 25.0003, 25.0004, 25.0005, 25.0006, 25.0007, 25.0008,
+        (25,9) 25.0009, 25.001, 25.0011, 25.0012, 25.0013, 25.0014, 25.0015,
+        (25,16) 25.0016, 25.0017, 25.0018, 25.0019, 26, 26.0001, 26.0002,
+        (26,3) 26.0003, 26.0004, 26.0005, 26.0006, 26.0007, 26.0008, 26.0009,
+        (26,10) 26.001, 26.0011, 26.0012, 26.0013, 26.0014, 26.0015, 26.0016,
+        (26,17) 26.0017, 26.0018, 26.0019, 27, 27.0001, 27.0002, 27.0003,
+        (27,4) 27.0004, 27.0005, 27.0006, 27.0007, 27.0008, 27.0009, 27.001,
+        (27,11) 27.0011, 27.0012, 27.0013, 27.0014, 27.0015, 27.0016, 27.0017,
+        (27,18) 27.0018, 27.0019, 28, 28.0001, 28.0002, 28.0003, 28.0004,
+        (28,5) 28.0005, 28.0006, 28.0007, 28.0008, 28.0009, 28.001, 28.0011,
+        (28,12) 28.0012, 28.0013, 28.0014, 28.0015, 28.0016, 28.0017, 28.0018,
+        (28,19) 28.0019, 29, 29.0001, 29.0002, 29.0003, 29.0004, 29.0005,
+        (29,6) 29.0006, 29.0007, 29.0008, 29.0009, 29.001, 29.0011, 29.0012,
+        (29,13) 29.0013, 29.0014, 29.0015, 29.0016, 29.0017, 29.0018, 29.0019

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tdset-2.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tdset-2.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tdset-2.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,16 @@
+#############################
+Expected output for 'h5dump -H -d dset1 -d /dset2 --dataset=dset3 tdset.h5'
+#############################
+HDF5 "tdset.h5" {
+DATASET "dset1" {
+   DATATYPE  H5T_STD_I32BE
+   DATASPACE  SIMPLE { ( 10, 20 ) / ( 10, 20 ) }
+}
+DATASET "/dset2" {
+   DATATYPE  H5T_IEEE_F64BE
+   DATASPACE  SIMPLE { ( 30, 20 ) / ( 30, 20 ) }
+}
+DATASET "dset3" {
+   }
+}
+h5dump error: unable to open dataset "dset3"

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tdset-3s.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tdset-3s.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tdset-3s.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,28 @@
+#############################
+Expected output for 'h5dump -d /dset1[1,1;;;] tdset.h5'
+#############################
+HDF5 "tdset.h5" {
+DATASET "/dset1" {
+   DATATYPE  H5T_STD_I32BE
+   DATASPACE  SIMPLE { ( 10, 20 ) / ( 10, 20 ) }
+   SUBSET {
+      START ( 1, 1 );
+      STRIDE ( 1, 1 );
+      COUNT ( 9, 19 );
+      BLOCK ( 1, 1 );
+      DATA {
+      (0,0): 2, 3, 4, 5, 6, 7, 8, 9, 10, 3, 4, 5, 6, 7, 8, 9, 10, 11, 4, 5,
+      (0,2): 6, 7, 8, 9, 10, 11, 12, 5, 6, 7, 8, 9, 10, 11, 12, 13, 6, 7, 8,
+      (0,3): 9, 10, 11, 12, 13, 14, 7, 8, 9, 10, 11, 12, 13, 14, 15, 8, 9,
+      (0,2): 10, 11, 12, 13, 14, 15, 16, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+      (0,0): 10, 11, 12, 13, 14, 15, 16, 17, 18, 11, 12, 13, 14, 15, 16, 17,
+      (0,7): 18, 19, 12, 13, 14, 15, 16, 17, 18, 19, 20, 13, 14, 15, 16, 17,
+      (0,5): 18, 19, 20, 21, 14, 15, 16, 17, 18, 19, 20, 21, 22, 15, 16, 17,
+      (0,3): 18, 19, 20, 21, 22, 23, 16, 17, 18, 19, 20, 21, 22, 23, 24, 17,
+      (0,1): 18, 19, 20, 21, 22, 23, 24, 25, 18, 19, 20, 21, 22, 23, 24, 25,
+      (0,8): 26, 19, 20, 21, 22, 23, 24, 25, 26, 27, 20, 21, 22, 23, 24, 25,
+      (0,6): 26, 27, 28
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tdset.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tdset.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tdset.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tdset.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tdset.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,148 @@
+#############################
+Expected output for 'h5dump --xml tdset.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Dataset Name="dset1" OBJ-XID="xid_744-0" H5Path= "/dset1" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="2">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            <hdf5:Dimension  DimSize="20" MaxDimSize="20"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+         1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
+         2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
+         3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
+         4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
+         5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+         6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
+         7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
+         8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
+         9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="dset2" OBJ-XID="xid_1984-0" H5Path= "/dset2" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="2">
+            <hdf5:Dimension  DimSize="30" MaxDimSize="30"/>
+            <hdf5:Dimension  DimSize="20" MaxDimSize="20"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:FloatType ByteOrder="BE" Size="8" SignBitLocation="63" ExponentBits="11" ExponentLocation="52" MantissaBits="52" MantissaLocation="0" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 0.0001 0.0002 0.0003 0.0004 0.0005 0.0006 0.0007 0.0008 0.0009 0.001
+         0.0011 0.0012 0.0013 0.0014 0.0015 0.0016 0.0017 0.0018 0.0019
+         1 1.0001 1.0002 1.0003 1.0004 1.0005 1.0006 1.0007 1.0008 1.0009 1.001
+         1.0011 1.0012 1.0013 1.0014 1.0015 1.0016 1.0017 1.0018 1.0019
+         2 2.0001 2.0002 2.0003 2.0004 2.0005 2.0006 2.0007 2.0008 2.0009 2.001
+         2.0011 2.0012 2.0013 2.0014 2.0015 2.0016 2.0017 2.0018 2.0019
+         3 3.0001 3.0002 3.0003 3.0004 3.0005 3.0006 3.0007 3.0008 3.0009 3.001
+         3.0011 3.0012 3.0013 3.0014 3.0015 3.0016 3.0017 3.0018 3.0019
+         4 4.0001 4.0002 4.0003 4.0004 4.0005 4.0006 4.0007 4.0008 4.0009 4.001
+         4.0011 4.0012 4.0013 4.0014 4.0015 4.0016 4.0017 4.0018 4.0019
+         5 5.0001 5.0002 5.0003 5.0004 5.0005 5.0006 5.0007 5.0008 5.0009 5.001
+         5.0011 5.0012 5.0013 5.0014 5.0015 5.0016 5.0017 5.0018 5.0019
+         6 6.0001 6.0002 6.0003 6.0004 6.0005 6.0006 6.0007 6.0008 6.0009 6.001
+         6.0011 6.0012 6.0013 6.0014 6.0015 6.0016 6.0017 6.0018 6.0019
+         7 7.0001 7.0002 7.0003 7.0004 7.0005 7.0006 7.0007 7.0008 7.0009 7.001
+         7.0011 7.0012 7.0013 7.0014 7.0015 7.0016 7.0017 7.0018 7.0019
+         8 8.0001 8.0002 8.0003 8.0004 8.0005 8.0006 8.0007 8.0008 8.0009 8.001
+         8.0011 8.0012 8.0013 8.0014 8.0015 8.0016 8.0017 8.0018 8.0019
+         9 9.0001 9.0002 9.0003 9.0004 9.0005 9.0006 9.0007 9.0008 9.0009 9.001
+         9.0011 9.0012 9.0013 9.0014 9.0015 9.0016 9.0017 9.0018 9.0019
+         10 10.0001 10.0002 10.0003 10.0004 10.0005 10.0006 10.0007 10.0008
+         10.0009 10.001 10.0011 10.0012 10.0013 10.0014 10.0015 10.0016 10.0017
+         10.0018 10.0019
+         11 11.0001 11.0002 11.0003 11.0004 11.0005 11.0006 11.0007 11.0008
+         11.0009 11.001 11.0011 11.0012 11.0013 11.0014 11.0015 11.0016 11.0017
+         11.0018 11.0019
+         12 12.0001 12.0002 12.0003 12.0004 12.0005 12.0006 12.0007 12.0008
+         12.0009 12.001 12.0011 12.0012 12.0013 12.0014 12.0015 12.0016 12.0017
+         12.0018 12.0019
+         13 13.0001 13.0002 13.0003 13.0004 13.0005 13.0006 13.0007 13.0008
+         13.0009 13.001 13.0011 13.0012 13.0013 13.0014 13.0015 13.0016 13.0017
+         13.0018 13.0019
+         14 14.0001 14.0002 14.0003 14.0004 14.0005 14.0006 14.0007 14.0008
+         14.0009 14.001 14.0011 14.0012 14.0013 14.0014 14.0015 14.0016 14.0017
+         14.0018 14.0019
+         15 15.0001 15.0002 15.0003 15.0004 15.0005 15.0006 15.0007 15.0008
+         15.0009 15.001 15.0011 15.0012 15.0013 15.0014 15.0015 15.0016 15.0017
+         15.0018 15.0019
+         16 16.0001 16.0002 16.0003 16.0004 16.0005 16.0006 16.0007 16.0008
+         16.0009 16.001 16.0011 16.0012 16.0013 16.0014 16.0015 16.0016 16.0017
+         16.0018 16.0019
+         17 17.0001 17.0002 17.0003 17.0004 17.0005 17.0006 17.0007 17.0008
+         17.0009 17.001 17.0011 17.0012 17.0013 17.0014 17.0015 17.0016 17.0017
+         17.0018 17.0019
+         18 18.0001 18.0002 18.0003 18.0004 18.0005 18.0006 18.0007 18.0008
+         18.0009 18.001 18.0011 18.0012 18.0013 18.0014 18.0015 18.0016 18.0017
+         18.0018 18.0019
+         19 19.0001 19.0002 19.0003 19.0004 19.0005 19.0006 19.0007 19.0008
+         19.0009 19.001 19.0011 19.0012 19.0013 19.0014 19.0015 19.0016 19.0017
+         19.0018 19.0019
+         20 20.0001 20.0002 20.0003 20.0004 20.0005 20.0006 20.0007 20.0008
+         20.0009 20.001 20.0011 20.0012 20.0013 20.0014 20.0015 20.0016 20.0017
+         20.0018 20.0019
+         21 21.0001 21.0002 21.0003 21.0004 21.0005 21.0006 21.0007 21.0008
+         21.0009 21.001 21.0011 21.0012 21.0013 21.0014 21.0015 21.0016 21.0017
+         21.0018 21.0019
+         22 22.0001 22.0002 22.0003 22.0004 22.0005 22.0006 22.0007 22.0008
+         22.0009 22.001 22.0011 22.0012 22.0013 22.0014 22.0015 22.0016 22.0017
+         22.0018 22.0019
+         23 23.0001 23.0002 23.0003 23.0004 23.0005 23.0006 23.0007 23.0008
+         23.0009 23.001 23.0011 23.0012 23.0013 23.0014 23.0015 23.0016 23.0017
+         23.0018 23.0019
+         24 24.0001 24.0002 24.0003 24.0004 24.0005 24.0006 24.0007 24.0008
+         24.0009 24.001 24.0011 24.0012 24.0013 24.0014 24.0015 24.0016 24.0017
+         24.0018 24.0019
+         25 25.0001 25.0002 25.0003 25.0004 25.0005 25.0006 25.0007 25.0008
+         25.0009 25.001 25.0011 25.0012 25.0013 25.0014 25.0015 25.0016 25.0017
+         25.0018 25.0019
+         26 26.0001 26.0002 26.0003 26.0004 26.0005 26.0006 26.0007 26.0008
+         26.0009 26.001 26.0011 26.0012 26.0013 26.0014 26.0015 26.0016 26.0017
+         26.0018 26.0019
+         27 27.0001 27.0002 27.0003 27.0004 27.0005 27.0006 27.0007 27.0008
+         27.0009 27.001 27.0011 27.0012 27.0013 27.0014 27.0015 27.0016 27.0017
+         27.0018 27.0019
+         28 28.0001 28.0002 28.0003 28.0004 28.0005 28.0006 28.0007 28.0008
+         28.0009 28.001 28.0011 28.0012 28.0013 28.0014 28.0015 28.0016 28.0017
+         28.0018 28.0019
+         29 29.0001 29.0002 29.0003 29.0004 29.0005 29.0006 29.0007 29.0008
+         29.0009 29.001 29.0011 29.0012 29.0013 29.0014 29.0015 29.0016 29.0017
+         29.0018 29.0019
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tdset2-1s.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tdset2-1s.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tdset2-1s.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,21 @@
+#############################
+Expected output for 'h5dump -d /dset1[;3,2;4,4;1,4] tdset2.h5'
+#############################
+HDF5 "tdset2.h5" {
+DATASET "/dset1" {
+   DATATYPE  H5T_STD_I32BE
+   DATASPACE  SIMPLE { ( 10, 20 ) / ( H5S_UNLIMITED, 20 ) }
+   SUBSET {
+      START ( 0, 0 );
+      STRIDE ( 3, 2 );
+      COUNT ( 4, 4 );
+      BLOCK ( 1, 4 );
+      DATA {
+      (0,0): 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 2, 3, 4, 5,
+      (0,4): 2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5, 4, 5, 6, 7, 4, 5, 6, 7,
+      (0,8): 4, 5, 6, 7, 4, 5, 6, 7, 6, 7, 8, 9, 6, 7, 8, 9, 6, 7, 8, 9,
+      (0,12): 6, 7, 8, 9
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tdset2.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tdset2.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tdset2.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tdset2.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tdset2.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,108 @@
+#############################
+Expected output for 'h5dump --xml tdset2.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Dataset Name="dset1" OBJ-XID="xid_744-0" H5Path= "/dset1" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ChunkedLayout Ndims="2">
+            <hdf5:ChunkDimension DimSize="5" />
+            <hdf5:ChunkDimension DimSize="5" />
+            <hdf5:RequiredFilter>
+            </hdf5:RequiredFilter>
+         </hdf5:ChunkedLayout>
+      </hdf5:StorageLayout>
+      <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="2">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="UNLIMITED"/>
+            <hdf5:Dimension  DimSize="20" MaxDimSize="20"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+         0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+         0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+         0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+         0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+         0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+         0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+         0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+         0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+         0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="dset2" OBJ-XID="xid_3800-0" H5Path= "/dset2" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ChunkedLayout Ndims="2">
+            <hdf5:ChunkDimension DimSize="5" />
+            <hdf5:ChunkDimension DimSize="5" />
+            <hdf5:RequiredFilter>
+            </hdf5:RequiredFilter>
+         </hdf5:ChunkedLayout>
+      </hdf5:StorageLayout>
+      <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="2">
+            <hdf5:Dimension  DimSize="30" MaxDimSize="30"/>
+            <hdf5:Dimension  DimSize="10" MaxDimSize="UNLIMITED"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:FloatType ByteOrder="BE" Size="8" SignBitLocation="63" ExponentBits="11" ExponentLocation="52" MantissaBits="52" MantissaLocation="0" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tempty-dtd-2.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tempty-dtd-2.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tempty-dtd-2.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,165 @@
+#############################
+Expected output for 'h5dump --xml -u tempty.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE HDF5-File PUBLIC "HDF5-File.dtd" "http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.dtd">
+<HDF5-File>
+<RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <Dataset Name="Dataset1.0" OBJ-XID="xid_976-0" H5Path= "/Dataset1.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <VLType>
+            <DataType>
+               <AtomicType>
+                  <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </AtomicType>
+            </DataType>
+         </VLType>
+      </DataType>
+<!-- Note: format of VL data not specified -->
+      <Data>
+         <DataFromFile>
+                
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset2.0" OBJ-XID="xid_1576-0" H5Path= "/Dataset2.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <AtomicType>
+            <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+         </AtomicType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+         0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset3.0" OBJ-XID="xid_2128-0" H5Path= "/Dataset3.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <AtomicType>
+            <FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </AtomicType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+         0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset4.0" OBJ-XID="xid_2400-0" H5Path= "/Dataset4.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <ArrayType Ndims="1">
+            <ArrayDimension DimSize="4" DimPerm="0"/>
+            <DataType>
+               <AtomicType>
+                  <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </AtomicType>
+            </DataType>
+         </ArrayType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+          0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset5.0" OBJ-XID="xid_2672-0" H5Path= "/Dataset5.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <CompoundType>
+            <Field FieldName="a">
+               <DataType>
+                  <AtomicType>
+                     <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+            <Field FieldName="b">
+               <DataType>
+                  <AtomicType>
+                     <FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+            <Field FieldName="c">
+               <DataType>
+                  <AtomicType>
+                     <IntegerType ByteOrder="LE" Sign="true" Size="1" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+         </CompoundType>
+      </DataType>
+   <!-- Note: format of compound data not specified -->
+      <Data>
+         <DataFromFile>
+         0 0 0 0 0 0 0 0 0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+</RootGroup>
+</HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tempty-dtd-uri.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tempty-dtd-uri.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tempty-dtd-uri.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,165 @@
+#############################
+Expected output for 'h5dump --xml --use-dtd --xml-dtd=http://somewhere.net tempty.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE HDF5-File PUBLIC "HDF5-File.dtd" "http://somewhere.net">
+<HDF5-File>
+<RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <Dataset Name="Dataset1.0" OBJ-XID="xid_976-0" H5Path= "/Dataset1.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <VLType>
+            <DataType>
+               <AtomicType>
+                  <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </AtomicType>
+            </DataType>
+         </VLType>
+      </DataType>
+<!-- Note: format of VL data not specified -->
+      <Data>
+         <DataFromFile>
+                
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset2.0" OBJ-XID="xid_1576-0" H5Path= "/Dataset2.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <AtomicType>
+            <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+         </AtomicType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+         0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset3.0" OBJ-XID="xid_2128-0" H5Path= "/Dataset3.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <AtomicType>
+            <FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </AtomicType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+         0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset4.0" OBJ-XID="xid_2400-0" H5Path= "/Dataset4.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <ArrayType Ndims="1">
+            <ArrayDimension DimSize="4" DimPerm="0"/>
+            <DataType>
+               <AtomicType>
+                  <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </AtomicType>
+            </DataType>
+         </ArrayType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+          0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset5.0" OBJ-XID="xid_2672-0" H5Path= "/Dataset5.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <CompoundType>
+            <Field FieldName="a">
+               <DataType>
+                  <AtomicType>
+                     <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+            <Field FieldName="b">
+               <DataType>
+                  <AtomicType>
+                     <FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+            <Field FieldName="c">
+               <DataType>
+                  <AtomicType>
+                     <IntegerType ByteOrder="LE" Sign="true" Size="1" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+         </CompoundType>
+      </DataType>
+   <!-- Note: format of compound data not specified -->
+      <Data>
+         <DataFromFile>
+         0 0 0 0 0 0 0 0 0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+</RootGroup>
+</HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tempty-dtd.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tempty-dtd.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tempty-dtd.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,165 @@
+#############################
+Expected output for 'h5dump --xml --use-dtd tempty.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE HDF5-File PUBLIC "HDF5-File.dtd" "http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.dtd">
+<HDF5-File>
+<RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <Dataset Name="Dataset1.0" OBJ-XID="xid_976-0" H5Path= "/Dataset1.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <VLType>
+            <DataType>
+               <AtomicType>
+                  <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </AtomicType>
+            </DataType>
+         </VLType>
+      </DataType>
+<!-- Note: format of VL data not specified -->
+      <Data>
+         <DataFromFile>
+                
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset2.0" OBJ-XID="xid_1576-0" H5Path= "/Dataset2.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <AtomicType>
+            <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+         </AtomicType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+         0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset3.0" OBJ-XID="xid_2128-0" H5Path= "/Dataset3.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <AtomicType>
+            <FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </AtomicType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+         0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset4.0" OBJ-XID="xid_2400-0" H5Path= "/Dataset4.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <ArrayType Ndims="1">
+            <ArrayDimension DimSize="4" DimPerm="0"/>
+            <DataType>
+               <AtomicType>
+                  <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </AtomicType>
+            </DataType>
+         </ArrayType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+          0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset5.0" OBJ-XID="xid_2672-0" H5Path= "/Dataset5.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <CompoundType>
+            <Field FieldName="a">
+               <DataType>
+                  <AtomicType>
+                     <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+            <Field FieldName="b">
+               <DataType>
+                  <AtomicType>
+                     <FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+            <Field FieldName="c">
+               <DataType>
+                  <AtomicType>
+                     <IntegerType ByteOrder="LE" Sign="true" Size="1" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+         </CompoundType>
+      </DataType>
+   <!-- Note: format of compound data not specified -->
+      <Data>
+         <DataFromFile>
+         0 0 0 0 0 0 0 0 0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+</RootGroup>
+</HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tempty-nons-2.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tempty-nons-2.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tempty-nons-2.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,164 @@
+#############################
+Expected output for 'h5dump --xml --xml-ns=: tempty.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<HDF5-File xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <Dataset Name="Dataset1.0" OBJ-XID="xid_976-0" H5Path= "/Dataset1.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <VLType>
+            <DataType>
+               <AtomicType>
+                  <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </AtomicType>
+            </DataType>
+         </VLType>
+      </DataType>
+<!-- Note: format of VL data not specified -->
+      <Data>
+         <DataFromFile>
+                
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset2.0" OBJ-XID="xid_1576-0" H5Path= "/Dataset2.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <AtomicType>
+            <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+         </AtomicType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+         0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset3.0" OBJ-XID="xid_2128-0" H5Path= "/Dataset3.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <AtomicType>
+            <FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </AtomicType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+         0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset4.0" OBJ-XID="xid_2400-0" H5Path= "/Dataset4.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <ArrayType Ndims="1">
+            <ArrayDimension DimSize="4" DimPerm="0"/>
+            <DataType>
+               <AtomicType>
+                  <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </AtomicType>
+            </DataType>
+         </ArrayType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+          0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset5.0" OBJ-XID="xid_2672-0" H5Path= "/Dataset5.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <CompoundType>
+            <Field FieldName="a">
+               <DataType>
+                  <AtomicType>
+                     <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+            <Field FieldName="b">
+               <DataType>
+                  <AtomicType>
+                     <FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+            <Field FieldName="c">
+               <DataType>
+                  <AtomicType>
+                     <IntegerType ByteOrder="LE" Sign="true" Size="1" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+         </CompoundType>
+      </DataType>
+   <!-- Note: format of compound data not specified -->
+      <Data>
+         <DataFromFile>
+         0 0 0 0 0 0 0 0 0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+</RootGroup>
+</HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tempty-nons-uri.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tempty-nons-uri.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tempty-nons-uri.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,164 @@
+#############################
+Expected output for 'h5dump --xml --xml-ns=: --xml-dtd=http://somewhere.net tempty.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<HDF5-File xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://somewhere.net">
+<RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <Dataset Name="Dataset1.0" OBJ-XID="xid_976-0" H5Path= "/Dataset1.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <VLType>
+            <DataType>
+               <AtomicType>
+                  <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </AtomicType>
+            </DataType>
+         </VLType>
+      </DataType>
+<!-- Note: format of VL data not specified -->
+      <Data>
+         <DataFromFile>
+                
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset2.0" OBJ-XID="xid_1576-0" H5Path= "/Dataset2.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <AtomicType>
+            <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+         </AtomicType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+         0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset3.0" OBJ-XID="xid_2128-0" H5Path= "/Dataset3.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <AtomicType>
+            <FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </AtomicType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+         0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset4.0" OBJ-XID="xid_2400-0" H5Path= "/Dataset4.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <ArrayType Ndims="1">
+            <ArrayDimension DimSize="4" DimPerm="0"/>
+            <DataType>
+               <AtomicType>
+                  <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </AtomicType>
+            </DataType>
+         </ArrayType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+          0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset5.0" OBJ-XID="xid_2672-0" H5Path= "/Dataset5.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <CompoundType>
+            <Field FieldName="a">
+               <DataType>
+                  <AtomicType>
+                     <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+            <Field FieldName="b">
+               <DataType>
+                  <AtomicType>
+                     <FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+            <Field FieldName="c">
+               <DataType>
+                  <AtomicType>
+                     <IntegerType ByteOrder="LE" Sign="true" Size="1" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+         </CompoundType>
+      </DataType>
+   <!-- Note: format of compound data not specified -->
+      <Data>
+         <DataFromFile>
+         0 0 0 0 0 0 0 0 0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+</RootGroup>
+</HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tempty-nons.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tempty-nons.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tempty-nons.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,164 @@
+#############################
+Expected output for 'h5dump --xml -X : tempty.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<HDF5-File xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <Dataset Name="Dataset1.0" OBJ-XID="xid_976-0" H5Path= "/Dataset1.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <VLType>
+            <DataType>
+               <AtomicType>
+                  <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </AtomicType>
+            </DataType>
+         </VLType>
+      </DataType>
+<!-- Note: format of VL data not specified -->
+      <Data>
+         <DataFromFile>
+                
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset2.0" OBJ-XID="xid_1576-0" H5Path= "/Dataset2.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <AtomicType>
+            <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+         </AtomicType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+         0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset3.0" OBJ-XID="xid_2128-0" H5Path= "/Dataset3.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <AtomicType>
+            <FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </AtomicType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+         0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset4.0" OBJ-XID="xid_2400-0" H5Path= "/Dataset4.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <ArrayType Ndims="1">
+            <ArrayDimension DimSize="4" DimPerm="0"/>
+            <DataType>
+               <AtomicType>
+                  <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </AtomicType>
+            </DataType>
+         </ArrayType>
+      </DataType>
+      <Data>
+         <DataFromFile>
+          0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+   <Dataset Name="Dataset5.0" OBJ-XID="xid_2672-0" H5Path= "/Dataset5.0" Parents="xid_928-0" H5ParentPaths="/">
+      <StorageLayout>
+         <ContiguousLayout/>
+      </StorageLayout>
+         <FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <FillValue>
+               <NoFill/>
+         </FillValue>
+      </FillValueInfo>
+      <Dataspace>
+         <SimpleDataspace Ndims="1">
+            <Dimension  DimSize="4" MaxDimSize="4"/>
+         </SimpleDataspace>
+      </Dataspace>
+      <DataType>
+         <CompoundType>
+            <Field FieldName="a">
+               <DataType>
+                  <AtomicType>
+                     <IntegerType ByteOrder="LE" Sign="true" Size="4" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+            <Field FieldName="b">
+               <DataType>
+                  <AtomicType>
+                     <FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+            <Field FieldName="c">
+               <DataType>
+                  <AtomicType>
+                     <IntegerType ByteOrder="LE" Sign="true" Size="1" />
+                  </AtomicType>
+               </DataType>
+            </Field>
+         </CompoundType>
+      </DataType>
+   <!-- Note: format of compound data not specified -->
+      <Data>
+         <DataFromFile>
+         0 0 0 0 0 0 0 0 0 0 0 0
+         </DataFromFile>
+      </Data>
+   </Dataset>
+</RootGroup>
+</HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tempty-ns-2.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tempty-ns-2.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tempty-ns-2.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,164 @@
+#############################
+Expected output for 'h5dump --xml --xml-ns=thing: tempty.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<thing:HDF5-File xmlns:thing="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<thing:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <thing:Dataset Name="Dataset1.0" OBJ-XID="xid_976-0" H5Path= "/Dataset1.0" Parents="xid_928-0" H5ParentPaths="/">
+      <thing:StorageLayout>
+         <thing:ContiguousLayout/>
+      </thing:StorageLayout>
+         <thing:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <thing:FillValue>
+               <thing:NoFill/>
+         </thing:FillValue>
+      </thing:FillValueInfo>
+      <thing:Dataspace>
+         <thing:SimpleDataspace Ndims="1">
+            <thing:Dimension  DimSize="4" MaxDimSize="4"/>
+         </thing:SimpleDataspace>
+      </thing:Dataspace>
+      <thing:DataType>
+         <thing:VLType>
+            <thing:DataType>
+               <thing:AtomicType>
+                  <thing:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </thing:AtomicType>
+            </thing:DataType>
+         </thing:VLType>
+      </thing:DataType>
+<!-- Note: format of VL data not specified -->
+      <thing:Data>
+         <thing:DataFromFile>
+                
+         </thing:DataFromFile>
+      </thing:Data>
+   </thing:Dataset>
+   <thing:Dataset Name="Dataset2.0" OBJ-XID="xid_1576-0" H5Path= "/Dataset2.0" Parents="xid_928-0" H5ParentPaths="/">
+      <thing:StorageLayout>
+         <thing:ContiguousLayout/>
+      </thing:StorageLayout>
+         <thing:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <thing:FillValue>
+               <thing:NoFill/>
+         </thing:FillValue>
+      </thing:FillValueInfo>
+      <thing:Dataspace>
+         <thing:SimpleDataspace Ndims="1">
+            <thing:Dimension  DimSize="4" MaxDimSize="4"/>
+         </thing:SimpleDataspace>
+      </thing:Dataspace>
+      <thing:DataType>
+         <thing:AtomicType>
+            <thing:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+         </thing:AtomicType>
+      </thing:DataType>
+      <thing:Data>
+         <thing:DataFromFile>
+         0 0 0 0
+         </thing:DataFromFile>
+      </thing:Data>
+   </thing:Dataset>
+   <thing:Dataset Name="Dataset3.0" OBJ-XID="xid_2128-0" H5Path= "/Dataset3.0" Parents="xid_928-0" H5ParentPaths="/">
+      <thing:StorageLayout>
+         <thing:ContiguousLayout/>
+      </thing:StorageLayout>
+         <thing:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <thing:FillValue>
+               <thing:NoFill/>
+         </thing:FillValue>
+      </thing:FillValueInfo>
+      <thing:Dataspace>
+         <thing:SimpleDataspace Ndims="1">
+            <thing:Dimension  DimSize="4" MaxDimSize="4"/>
+         </thing:SimpleDataspace>
+      </thing:Dataspace>
+      <thing:DataType>
+         <thing:AtomicType>
+            <thing:FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </thing:AtomicType>
+      </thing:DataType>
+      <thing:Data>
+         <thing:DataFromFile>
+         0 0 0 0
+         </thing:DataFromFile>
+      </thing:Data>
+   </thing:Dataset>
+   <thing:Dataset Name="Dataset4.0" OBJ-XID="xid_2400-0" H5Path= "/Dataset4.0" Parents="xid_928-0" H5ParentPaths="/">
+      <thing:StorageLayout>
+         <thing:ContiguousLayout/>
+      </thing:StorageLayout>
+         <thing:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <thing:FillValue>
+               <thing:NoFill/>
+         </thing:FillValue>
+      </thing:FillValueInfo>
+      <thing:Dataspace>
+         <thing:SimpleDataspace Ndims="1">
+            <thing:Dimension  DimSize="4" MaxDimSize="4"/>
+         </thing:SimpleDataspace>
+      </thing:Dataspace>
+      <thing:DataType>
+         <thing:ArrayType Ndims="1">
+            <thing:ArrayDimension DimSize="4" DimPerm="0"/>
+            <thing:DataType>
+               <thing:AtomicType>
+                  <thing:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </thing:AtomicType>
+            </thing:DataType>
+         </thing:ArrayType>
+      </thing:DataType>
+      <thing:Data>
+         <thing:DataFromFile>
+          0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 0
+         </thing:DataFromFile>
+      </thing:Data>
+   </thing:Dataset>
+   <thing:Dataset Name="Dataset5.0" OBJ-XID="xid_2672-0" H5Path= "/Dataset5.0" Parents="xid_928-0" H5ParentPaths="/">
+      <thing:StorageLayout>
+         <thing:ContiguousLayout/>
+      </thing:StorageLayout>
+         <thing:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <thing:FillValue>
+               <thing:NoFill/>
+         </thing:FillValue>
+      </thing:FillValueInfo>
+      <thing:Dataspace>
+         <thing:SimpleDataspace Ndims="1">
+            <thing:Dimension  DimSize="4" MaxDimSize="4"/>
+         </thing:SimpleDataspace>
+      </thing:Dataspace>
+      <thing:DataType>
+         <thing:CompoundType>
+            <thing:Field FieldName="a">
+               <thing:DataType>
+                  <thing:AtomicType>
+                     <thing:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+                  </thing:AtomicType>
+               </thing:DataType>
+            </thing:Field>
+            <thing:Field FieldName="b">
+               <thing:DataType>
+                  <thing:AtomicType>
+                     <thing:FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </thing:AtomicType>
+               </thing:DataType>
+            </thing:Field>
+            <thing:Field FieldName="c">
+               <thing:DataType>
+                  <thing:AtomicType>
+                     <thing:IntegerType ByteOrder="LE" Sign="true" Size="1" />
+                  </thing:AtomicType>
+               </thing:DataType>
+            </thing:Field>
+         </thing:CompoundType>
+      </thing:DataType>
+   <!-- Note: format of compound data not specified -->
+      <thing:Data>
+         <thing:DataFromFile>
+         0 0 0 0 0 0 0 0 0 0 0 0
+         </thing:DataFromFile>
+      </thing:Data>
+   </thing:Dataset>
+</thing:RootGroup>
+</thing:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tempty-ns.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tempty-ns.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tempty-ns.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,164 @@
+#############################
+Expected output for 'h5dump --xml -X thing: tempty.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<thing:HDF5-File xmlns:thing="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<thing:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <thing:Dataset Name="Dataset1.0" OBJ-XID="xid_976-0" H5Path= "/Dataset1.0" Parents="xid_928-0" H5ParentPaths="/">
+      <thing:StorageLayout>
+         <thing:ContiguousLayout/>
+      </thing:StorageLayout>
+         <thing:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <thing:FillValue>
+               <thing:NoFill/>
+         </thing:FillValue>
+      </thing:FillValueInfo>
+      <thing:Dataspace>
+         <thing:SimpleDataspace Ndims="1">
+            <thing:Dimension  DimSize="4" MaxDimSize="4"/>
+         </thing:SimpleDataspace>
+      </thing:Dataspace>
+      <thing:DataType>
+         <thing:VLType>
+            <thing:DataType>
+               <thing:AtomicType>
+                  <thing:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </thing:AtomicType>
+            </thing:DataType>
+         </thing:VLType>
+      </thing:DataType>
+<!-- Note: format of VL data not specified -->
+      <thing:Data>
+         <thing:DataFromFile>
+                
+         </thing:DataFromFile>
+      </thing:Data>
+   </thing:Dataset>
+   <thing:Dataset Name="Dataset2.0" OBJ-XID="xid_1576-0" H5Path= "/Dataset2.0" Parents="xid_928-0" H5ParentPaths="/">
+      <thing:StorageLayout>
+         <thing:ContiguousLayout/>
+      </thing:StorageLayout>
+         <thing:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <thing:FillValue>
+               <thing:NoFill/>
+         </thing:FillValue>
+      </thing:FillValueInfo>
+      <thing:Dataspace>
+         <thing:SimpleDataspace Ndims="1">
+            <thing:Dimension  DimSize="4" MaxDimSize="4"/>
+         </thing:SimpleDataspace>
+      </thing:Dataspace>
+      <thing:DataType>
+         <thing:AtomicType>
+            <thing:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+         </thing:AtomicType>
+      </thing:DataType>
+      <thing:Data>
+         <thing:DataFromFile>
+         0 0 0 0
+         </thing:DataFromFile>
+      </thing:Data>
+   </thing:Dataset>
+   <thing:Dataset Name="Dataset3.0" OBJ-XID="xid_2128-0" H5Path= "/Dataset3.0" Parents="xid_928-0" H5ParentPaths="/">
+      <thing:StorageLayout>
+         <thing:ContiguousLayout/>
+      </thing:StorageLayout>
+         <thing:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <thing:FillValue>
+               <thing:NoFill/>
+         </thing:FillValue>
+      </thing:FillValueInfo>
+      <thing:Dataspace>
+         <thing:SimpleDataspace Ndims="1">
+            <thing:Dimension  DimSize="4" MaxDimSize="4"/>
+         </thing:SimpleDataspace>
+      </thing:Dataspace>
+      <thing:DataType>
+         <thing:AtomicType>
+            <thing:FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </thing:AtomicType>
+      </thing:DataType>
+      <thing:Data>
+         <thing:DataFromFile>
+         0 0 0 0
+         </thing:DataFromFile>
+      </thing:Data>
+   </thing:Dataset>
+   <thing:Dataset Name="Dataset4.0" OBJ-XID="xid_2400-0" H5Path= "/Dataset4.0" Parents="xid_928-0" H5ParentPaths="/">
+      <thing:StorageLayout>
+         <thing:ContiguousLayout/>
+      </thing:StorageLayout>
+         <thing:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <thing:FillValue>
+               <thing:NoFill/>
+         </thing:FillValue>
+      </thing:FillValueInfo>
+      <thing:Dataspace>
+         <thing:SimpleDataspace Ndims="1">
+            <thing:Dimension  DimSize="4" MaxDimSize="4"/>
+         </thing:SimpleDataspace>
+      </thing:Dataspace>
+      <thing:DataType>
+         <thing:ArrayType Ndims="1">
+            <thing:ArrayDimension DimSize="4" DimPerm="0"/>
+            <thing:DataType>
+               <thing:AtomicType>
+                  <thing:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </thing:AtomicType>
+            </thing:DataType>
+         </thing:ArrayType>
+      </thing:DataType>
+      <thing:Data>
+         <thing:DataFromFile>
+          0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 0
+         </thing:DataFromFile>
+      </thing:Data>
+   </thing:Dataset>
+   <thing:Dataset Name="Dataset5.0" OBJ-XID="xid_2672-0" H5Path= "/Dataset5.0" Parents="xid_928-0" H5ParentPaths="/">
+      <thing:StorageLayout>
+         <thing:ContiguousLayout/>
+      </thing:StorageLayout>
+         <thing:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <thing:FillValue>
+               <thing:NoFill/>
+         </thing:FillValue>
+      </thing:FillValueInfo>
+      <thing:Dataspace>
+         <thing:SimpleDataspace Ndims="1">
+            <thing:Dimension  DimSize="4" MaxDimSize="4"/>
+         </thing:SimpleDataspace>
+      </thing:Dataspace>
+      <thing:DataType>
+         <thing:CompoundType>
+            <thing:Field FieldName="a">
+               <thing:DataType>
+                  <thing:AtomicType>
+                     <thing:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+                  </thing:AtomicType>
+               </thing:DataType>
+            </thing:Field>
+            <thing:Field FieldName="b">
+               <thing:DataType>
+                  <thing:AtomicType>
+                     <thing:FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </thing:AtomicType>
+               </thing:DataType>
+            </thing:Field>
+            <thing:Field FieldName="c">
+               <thing:DataType>
+                  <thing:AtomicType>
+                     <thing:IntegerType ByteOrder="LE" Sign="true" Size="1" />
+                  </thing:AtomicType>
+               </thing:DataType>
+            </thing:Field>
+         </thing:CompoundType>
+      </thing:DataType>
+   <!-- Note: format of compound data not specified -->
+      <thing:Data>
+         <thing:DataFromFile>
+         0 0 0 0 0 0 0 0 0 0 0 0
+         </thing:DataFromFile>
+      </thing:Data>
+   </thing:Dataset>
+</thing:RootGroup>
+</thing:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tempty.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tempty.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tempty.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,65 @@
+#############################
+Expected output for 'h5dump tempty.h5'
+#############################
+HDF5 "tempty.h5" {
+GROUP "/" {
+   DATASET "Dataset1.0" {
+      DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): (), (), (), ()
+      }
+   }
+   DATASET "Dataset2.0" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): 0, 0, 0, 0
+      }
+   }
+   DATASET "Dataset3.0" {
+      DATATYPE  H5T_IEEE_F32LE
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): 0, 0, 0, 0
+      }
+   }
+   DATASET "Dataset4.0" {
+      DATATYPE  H5T_ARRAY { [4] H5T_STD_I32LE }
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ], [ 0, 0, 0, 0 ]
+      }
+   }
+   DATASET "Dataset5.0" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I32LE "a";
+         H5T_IEEE_F32LE "b";
+         H5T_STD_I8LE "c";
+      }
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): {
+            0,
+            0,
+            0
+         },
+      (1): {
+            0,
+            0,
+            0
+         },
+      (2): {
+            0,
+            0,
+            0
+         },
+      (3): {
+            0,
+            0,
+            0
+         }
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tempty.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tempty.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tempty.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tempty.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tempty.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,164 @@
+#############################
+Expected output for 'h5dump --xml tempty.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:Dataset Name="Dataset1.0" OBJ-XID="xid_976-0" H5Path= "/Dataset1.0" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:VLType>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+         </hdf5:VLType>
+      </hdf5:DataType>
+<!-- Note: format of VL data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+                
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="Dataset2.0" OBJ-XID="xid_1576-0" H5Path= "/Dataset2.0" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 0 0 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="Dataset3.0" OBJ-XID="xid_2128-0" H5Path= "/Dataset3.0" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 0 0 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="Dataset4.0" OBJ-XID="xid_2400-0" H5Path= "/Dataset4.0" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:ArrayType Ndims="1">
+            <hdf5:ArrayDimension DimSize="4" DimPerm="0"/>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+         </hdf5:ArrayType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+          0 0 0 0  0 0 0 0  0 0 0 0  0 0 0 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="Dataset5.0" OBJ-XID="xid_2672-0" H5Path= "/Dataset5.0" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="a">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="b">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="c">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="1" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 0 0 0 0 0 0 0 0 0 0 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tempty.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tempty.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tempty.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+#############################
+ output for 'h5ls -w80 -d tempty.h5'
+#############################
+Dataset1.0               Dataset {4}
+    Data:
+        (0) (), (), (), ()
+Dataset2.0               Dataset {4}
+    Data:
+        (0) 0, 0, 0, 0
+Dataset3.0               Dataset {4}
+    Data:
+        (0) 0, 0, 0, 0
+Dataset4.0               Dataset {4}
+    Data:
+        (0) [0,0,0,0], [0,0,0,0], [0,0,0,0], [0,0,0,0]
+Dataset5.0               Dataset {4}
+    Data:
+        (0) {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tenum.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tenum.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tenum.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,27 @@
+#############################
+Expected output for 'h5dump tenum.h5'
+#############################
+HDF5 "tenum.h5" {
+GROUP "/" {
+   DATATYPE "enum normal"       H5T_ENUM {
+         H5T_STD_I32LE;
+         "RED"              0;
+         "GREEN
+green"      1;
+         "BLUE blue"        2;
+         "WHITE "white""    3;
+         "BLACK 'black'"    4;
+      };
+
+   DATASET "table" {
+      DATATYPE  "/enum normal"
+      DATASPACE  SIMPLE { ( 20 ) / ( 20 ) }
+      DATA {
+         RED, GREEN\ngreen, BLUE blue, GREEN\ngreen, WHITE \"white\",
+         WHITE \"white\", BLACK \'black\', GREEN\ngreen, BLUE blue, RED, RED,
+         BLUE blue, GREEN\ngreen, BLACK \'black\', WHITE \"white\", RED,
+         WHITE \"white\", GREEN\ngreen, GREEN\ngreen, BLUE blue
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tenum.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tenum.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tenum.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tenum.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tenum.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,76 @@
+#############################
+Expected output for 'h5dump --xml tenum.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:NamedDataType Name="enum normal" OBJ-XID="xid_976-0" H5Path="/enum normal" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:EnumType Nelems="5">
+            <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+            </hdf5:AtomicType>
+            </hdf5:DataType>
+               <hdf5:EnumElement>
+                  RED
+               </hdf5:EnumElement>
+               <hdf5:EnumValue>
+                  0
+               </hdf5:EnumValue>
+               <hdf5:EnumElement>
+                  GREEN
+green
+               </hdf5:EnumElement>
+               <hdf5:EnumValue>
+                  1
+               </hdf5:EnumValue>
+               <hdf5:EnumElement>
+                  BLUE blue
+               </hdf5:EnumElement>
+               <hdf5:EnumValue>
+                  2
+               </hdf5:EnumValue>
+               <hdf5:EnumElement>
+                  WHITE &quot;white&quot;
+               </hdf5:EnumElement>
+               <hdf5:EnumValue>
+                  3
+               </hdf5:EnumValue>
+               <hdf5:EnumElement>
+                  BLACK &apos;black&apos;
+               </hdf5:EnumElement>
+               <hdf5:EnumValue>
+                  4
+               </hdf5:EnumValue>
+            </hdf5:EnumType>
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+   </hdf5:NamedDataType>
+   <hdf5:Dataset Name="table" OBJ-XID="xid_1384-0" H5Path= "/table" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="20" MaxDimSize="20"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:NamedDataTypePtr OBJ-XID="xid_976-0" H5Path="/enum normal" />
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         RED GREEN\ngreen BLUE blue GREEN\ngreen WHITE \"white\" WHITE \"white\"
+         BLACK \'black\' GREEN\ngreen BLUE blue RED RED BLUE blue GREEN\ngreen
+         BLACK \'black\' WHITE \"white\" RED WHITE \"white\" GREEN\ngreen
+         GREEN\ngreen BLUE blue
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/test0.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/test0.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/test1.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/test1.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/test3.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/test3.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/test4.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/test4.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/test5.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/test5.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/test_all.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/test_all.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/test_deflate.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/test_deflate.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/test_fletcher32.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/test_fletcher32.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/test_shuffle.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/test_shuffle.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/test_szip.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/test_szip.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/texternal.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/texternal.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/texternal.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,26 @@
+#############################
+Expected output for 'h5dump -H -p -d external tfilters.h5'
+#############################
+HDF5 "tfilters.h5" {
+DATASET "external" {
+   DATATYPE  H5T_STD_I32LE
+   DATASPACE  SIMPLE { ( 100 ) / ( 100 ) }
+   STORAGE_LAYOUT {
+      CONTIGUOUS
+      EXTERNAL {
+         FILENAME ext1.bin SIZE 200 OFFSET 0
+         FILENAME ext2.bin SIZE 200 OFFSET 0
+      }
+   }
+   FILTERS {
+      NONE
+   }
+   FILLVALUE {
+      FILL_TIME H5D_FILL_TIME_IFSET
+      VALUE  0   
+   }
+   ALLOCATION_TIME {
+      H5D_ALLOC_TIME_LATE
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tfamily.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tfamily.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,23 @@
+#############################
+Expected output for 'h5dump --filedriver=family tfamily%05d.h5'
+#############################
+HDF5 "tfamily%05d.h5" {
+GROUP "/" {
+   DATASET "dset1" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 10, 15 ) / ( 10, 15 ) }
+      DATA {
+      (0,0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+      (1,0): 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+      (2,0): 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+      (3,0): 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+      (4,0): 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+      (5,0): 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+      (6,0): 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+      (7,0): 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+      (8,0): 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+      (9,0): 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00000.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00000.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00001.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00001.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00002.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00002.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00003.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00003.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00004.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00004.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00005.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00005.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00006.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00006.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00007.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00007.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00008.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00008.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00009.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00009.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00010.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfamily00010.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfcontents1.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfcontents1.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfcontents2.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfcontents2.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfill.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tfill.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tfill.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,174 @@
+#############################
+Expected output for 'h5dump -p tfvalues.h5'
+#############################
+HDF5 "tfvalues.h5" {
+GROUP "/" {
+   DATASET "fill_array" {
+      DATATYPE  H5T_ARRAY { [3] H5T_STD_I32LE }
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      STORAGE_LAYOUT {
+         CONTIGUOUS
+         SIZE 24
+         OFFSET 1920
+      }
+      FILTERS {
+         NONE
+      }
+      FILLVALUE {
+         FILL_TIME H5D_FILL_TIME_IFSET
+         VALUE  [ 0, 0, 0 ]      
+      }
+      ALLOCATION_TIME {
+         H5D_ALLOC_TIME_LATE
+      }
+      DATA {
+      (0): [ 1, 2, 3 ], [ 4, 5, 6 ]
+      }
+   }
+   DATASET "fill_compound" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I8LE "a";
+         H5T_IEEE_F64LE "b";
+      }
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      STORAGE_LAYOUT {
+         CONTIGUOUS
+         SIZE 24
+         OFFSET 1864
+      }
+      FILTERS {
+         NONE
+      }
+      FILLVALUE {
+         FILL_TIME H5D_FILL_TIME_IFSET
+         VALUE  {
+         1,
+         2
+      }      
+      }
+      ALLOCATION_TIME {
+         H5D_ALLOC_TIME_LATE
+      }
+      DATA {
+      (0): {
+            1,
+            2
+         },
+      (1): {
+            3,
+            4
+         }
+      }
+   }
+   DATASET "fill_time_alloc" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      STORAGE_LAYOUT {
+         CONTIGUOUS
+         SIZE 8
+         OFFSET 1848
+      }
+      FILTERS {
+         NONE
+      }
+      FILLVALUE {
+         FILL_TIME H5D_FILL_TIME_ALLOC
+         VALUE  -99      
+      }
+      ALLOCATION_TIME {
+         H5D_ALLOC_TIME_LATE
+      }
+      DATA {
+      (0): 1, 2
+      }
+   }
+   DATASET "fill_time_ifset" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      STORAGE_LAYOUT {
+         CONTIGUOUS
+         SIZE 8
+         OFFSET 2048
+      }
+      FILTERS {
+         NONE
+      }
+      FILLVALUE {
+         FILL_TIME H5D_FILL_TIME_IFSET
+         VALUE  -99      
+      }
+      ALLOCATION_TIME {
+         H5D_ALLOC_TIME_LATE
+      }
+      DATA {
+      (0): 1, 2
+      }
+   }
+   DATASET "fill_time_never" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      STORAGE_LAYOUT {
+         CONTIGUOUS
+         SIZE 8
+         OFFSET 2056
+      }
+      FILTERS {
+         NONE
+      }
+      FILLVALUE {
+         FILL_TIME H5D_FILL_TIME_NEVER
+         VALUE  -99      
+      }
+      ALLOCATION_TIME {
+         H5D_ALLOC_TIME_LATE
+      }
+      DATA {
+      (0): 1, 2
+      }
+   }
+   DATASET "fill_vlen" {
+      DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      STORAGE_LAYOUT {
+         CONTIGUOUS
+         SIZE 32
+         OFFSET 1888
+      }
+      FILTERS {
+         NONE
+      }
+      FILLVALUE {
+         FILL_TIME H5D_FILL_TIME_ALLOC
+         VALUE  ()      
+      }
+      ALLOCATION_TIME {
+         H5D_ALLOC_TIME_LATE
+      }
+      DATA {
+      (0): (1), (2, 3)
+      }
+   }
+   DATASET "no_fill" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      STORAGE_LAYOUT {
+         CONTIGUOUS
+         SIZE 8
+         OFFSET 1856
+      }
+      FILTERS {
+         NONE
+      }
+      FILLVALUE {
+         FILL_TIME H5D_FILL_TIME_IFSET
+         VALUE  0      
+      }
+      ALLOCATION_TIME {
+         H5D_ALLOC_TIME_LATE
+      }
+      DATA {
+      (0): 1, 2
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfilters.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfilters.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfletcher32.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tfletcher32.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tfletcher32.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,23 @@
+#############################
+Expected output for 'h5dump -H -p -d fletcher32 tfilters.h5'
+#############################
+HDF5 "tfilters.h5" {
+DATASET "fletcher32" {
+   DATATYPE  H5T_STD_I32LE
+   DATASPACE  SIMPLE { ( 20, 10 ) / ( 20, 10 ) }
+   STORAGE_LAYOUT {
+      CHUNKED ( 10, 5 )
+      SIZE 816
+    }
+   FILTERS {
+      CHECKSUM FLETCHER32
+   }
+   FILLVALUE {
+      FILL_TIME H5D_FILL_TIME_IFSET
+      VALUE  0   
+   }
+   ALLOCATION_TIME {
+      H5D_ALLOC_TIME_INCR
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tfvalues.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tfvalues.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tgroup-1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tgroup-1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tgroup-1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,33 @@
+#############################
+Expected output for 'h5dump tgroup.h5'
+#############################
+HDF5 "tgroup.h5" {
+GROUP "/" {
+   GROUP "g1" {
+      GROUP "g1.1" {
+      }
+      GROUP "g1.2" {
+      }
+   }
+   GROUP "g2" {
+      GROUP "g2.1" {
+         GROUP "g2.1.1" {
+         }
+         GROUP "g2.1.2" {
+         }
+         GROUP "g2.1.3" {
+         }
+      }
+   }
+   GROUP "g3" {
+      GROUP "g3.1" {
+      }
+      GROUP "g3.2" {
+      }
+      GROUP "g3.3" {
+      }
+      GROUP "g3.4" {
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tgroup-1.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tgroup-1.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tgroup-1.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#############################
+ output for 'h5ls -w80 -r -g tgroup.h5'
+#############################
+/                        Group
+/g1                      Group
+/g1/g1.1                 Group
+/g1/g1.2                 Group
+/g2                      Group
+/g2/g2.1                 Group
+/g2/g2.1/g2.1.1          Group
+/g2/g2.1/g2.1.2          Group
+/g2/g2.1/g2.1.3          Group
+/g3                      Group
+/g3/g3.1                 Group
+/g3/g3.2                 Group
+/g3/g3.3                 Group
+/g3/g3.4                 Group

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tgroup-2.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tgroup-2.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tgroup-2.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,46 @@
+#############################
+Expected output for 'h5dump --group=/g2 --group / -g /y tgroup.h5'
+#############################
+HDF5 "tgroup.h5" {
+GROUP "/g2" {
+   GROUP "g2.1" {
+      GROUP "g2.1.1" {
+      }
+      GROUP "g2.1.2" {
+      }
+      GROUP "g2.1.3" {
+      }
+   }
+}
+GROUP "/" {
+   GROUP "g1" {
+      GROUP "g1.1" {
+      }
+      GROUP "g1.2" {
+      }
+   }
+   GROUP "g2" {
+      GROUP "g2.1" {
+         GROUP "g2.1.1" {
+         }
+         GROUP "g2.1.2" {
+         }
+         GROUP "g2.1.3" {
+         }
+      }
+   }
+   GROUP "g3" {
+      GROUP "g3.1" {
+      }
+      GROUP "g3.2" {
+      }
+      GROUP "g3.3" {
+      }
+      GROUP "g3.4" {
+      }
+   }
+}
+GROUP "/y" {
+   }
+}
+h5dump error: unable to open group "/y"

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tgroup.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tgroup.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tgroup.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tgroup.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tgroup.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,34 @@
+#############################
+Expected output for 'h5dump --xml tgroup.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Group Name="g1" OBJ-XID="xid_1344-0" H5Path="/g1" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Group Name="g1.1" OBJ-XID="xid_3616-0" H5Path="/g1/g1.1" Parents="xid_1344-0" H5ParentPaths="/g1" >
+      </hdf5:Group>
+      <hdf5:Group Name="g1.2" OBJ-XID="xid_4592-0" H5Path="/g1/g1.2" Parents="xid_1344-0" H5ParentPaths="/g1" >
+      </hdf5:Group>
+   </hdf5:Group>
+   <hdf5:Group Name="g2" OBJ-XID="xid_2320-0" H5Path="/g2" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Group Name="g2.1" OBJ-XID="xid_5240-0" H5Path="/g2/g2.1" Parents="xid_2320-0" H5ParentPaths="/g2" >
+         <hdf5:Group Name="g2.1.1" OBJ-XID="xid_9136-0" H5Path="/g2/g2.1/g2.1.1" Parents="xid_5240-0" H5ParentPaths="/g2/g2.1" >
+         </hdf5:Group>
+         <hdf5:Group Name="g2.1.2" OBJ-XID="xid_10112-0" H5Path="/g2/g2.1/g2.1.2" Parents="xid_5240-0" H5ParentPaths="/g2/g2.1" >
+         </hdf5:Group>
+         <hdf5:Group Name="g2.1.3" OBJ-XID="xid_10760-0" H5Path="/g2/g2.1/g2.1.3" Parents="xid_5240-0" H5ParentPaths="/g2/g2.1" >
+         </hdf5:Group>
+      </hdf5:Group>
+   </hdf5:Group>
+   <hdf5:Group Name="g3" OBJ-XID="xid_2968-0" H5Path="/g3" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Group Name="g3.1" OBJ-XID="xid_6216-0" H5Path="/g3/g3.1" Parents="xid_2968-0" H5ParentPaths="/g3" >
+      </hdf5:Group>
+      <hdf5:Group Name="g3.2" OBJ-XID="xid_7192-0" H5Path="/g3/g3.2" Parents="xid_2968-0" H5ParentPaths="/g3" >
+      </hdf5:Group>
+      <hdf5:Group Name="g3.3" OBJ-XID="xid_7840-0" H5Path="/g3/g3.3" Parents="xid_2968-0" H5ParentPaths="/g3" >
+      </hdf5:Group>
+      <hdf5:Group Name="g3.4" OBJ-XID="xid_8488-0" H5Path="/g3/g3.4" Parents="xid_2968-0" H5ParentPaths="/g3" >
+      </hdf5:Group>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tgroup.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tgroup.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tgroup.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,6 @@
+#############################
+ output for 'h5ls -w80 tgroup.h5'
+#############################
+g1                       Group
+g2                       Group
+g3                       Group

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tgrp_comments.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tgrp_comments.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tgrp_comments.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,46 @@
+#############################
+Expected output for 'h5dump tgrp_comments.h5'
+#############################
+HDF5 "tgrp_comments.h5" {
+GROUP "/" {
+   GROUP "g1" {
+      COMMENT "Comment for group /g1"
+      GROUP "g1.1" {
+         COMMENT "Comment for group /g1/g1.1"
+      }
+      GROUP "g1.2" {
+         COMMENT "Comment for group /g1/g1.2"
+      }
+   }
+   GROUP "g2" {
+      COMMENT "Comment for group /g2"
+      GROUP "g2.1" {
+         COMMENT "Comment for group /g2/g2.1"
+         GROUP "g2.1.1" {
+            COMMENT "Comment for group /g2/g2.1/g2.1.1"
+         }
+         GROUP "g2.1.2" {
+            COMMENT "Comment for group /g2/g2.1/g2.1.2"
+         }
+         GROUP "g2.1.3" {
+            COMMENT "Comment for group /g2/g2.1/g2.1.3"
+         }
+      }
+   }
+   GROUP "g3" {
+      COMMENT "Comment for group /g3"
+      GROUP "g3.1" {
+         COMMENT "Comment for group /g3/g3.1"
+      }
+      GROUP "g3.2" {
+         COMMENT "Comment for group /g3/g3.2"
+      }
+      GROUP "g3.3" {
+         COMMENT "Comment for group /g3/g3.3"
+      }
+      GROUP "g3.4" {
+         COMMENT "Comment for group /g3/g3.4"
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tgrp_comments.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tgrp_comments.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/thlink-1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/thlink-1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/thlink-1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,27 @@
+#############################
+Expected output for 'h5dump thlink.h5'
+#############################
+HDF5 "thlink.h5" {
+GROUP "/" {
+   DATASET "dset1" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+      DATA {
+      (0): 0, 1, 2, 3, 4
+      }
+   }
+   GROUP "g1" {
+      DATASET "dset2" {
+         HARDLINK "/dset1"
+      }
+      GROUP "g1.1" {
+         DATASET "dset3" {
+            HARDLINK "/dset1"
+         }
+      }
+   }
+   GROUP "g2" {
+      HARDLINK "/g1/g1.1"
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/thlink-1.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/thlink-1.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/thlink-1.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,6 @@
+#############################
+ output for 'h5ls -w80 thlink.h5'
+#############################
+dset1                    Dataset {5}
+g1                       Group
+g2                       Group

Added: packages/hdf5/branches/upstream/current/tools/testfiles/thlink-2.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/thlink-2.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/thlink-2.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+#############################
+Expected output for 'h5dump -d /g1/dset2 --dataset /dset1 --dataset=/g1/g1.1/dset3 thlink.h5'
+#############################
+HDF5 "thlink.h5" {
+DATASET "/g1/dset2" {
+   DATATYPE  H5T_STD_I32BE
+   DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+   DATA {
+   (0): 0, 1, 2, 3, 4
+   }
+}
+DATASET "/dset1" {
+   HARDLINK "/dset1"
+}
+DATASET "/g1/g1.1/dset3" {
+   HARDLINK "/dset1"
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/thlink-3.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/thlink-3.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/thlink-3.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+#############################
+Expected output for 'h5dump -d /g1/g1.1/dset3 --dataset /g1/dset2 --dataset=/dset1 thlink.h5'
+#############################
+HDF5 "thlink.h5" {
+DATASET "/g1/g1.1/dset3" {
+   DATATYPE  H5T_STD_I32BE
+   DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+   DATA {
+   (0): 0, 1, 2, 3, 4
+   }
+}
+DATASET "/g1/dset2" {
+   HARDLINK "/dset1"
+}
+DATASET "/dset1" {
+   HARDLINK "/dset1"
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/thlink-4.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/thlink-4.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/thlink-4.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,19 @@
+#############################
+Expected output for 'h5dump -g /g1 thlink.h5'
+#############################
+HDF5 "thlink.h5" {
+GROUP "/g1" {
+   DATASET "dset2" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+      DATA {
+      (0): 0, 1, 2, 3, 4
+      }
+   }
+   GROUP "g1.1" {
+      DATASET "dset3" {
+         HARDLINK "/dset1"
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/thlink-5.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/thlink-5.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/thlink-5.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,20 @@
+#############################
+Expected output for 'h5dump -d /dset1 -g /g2 -d /g1/dset2 thlink.h5'
+#############################
+HDF5 "thlink.h5" {
+DATASET "/dset1" {
+   DATATYPE  H5T_STD_I32BE
+   DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+   DATA {
+   (0): 0, 1, 2, 3, 4
+   }
+}
+GROUP "/g2" {
+   DATASET "dset3" {
+      HARDLINK "/dset1"
+   }
+}
+DATASET "/g1/dset2" {
+   HARDLINK "/dset1"
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/thlink.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/thlink.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/thlink.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/thlink.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/thlink.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,46 @@
+#############################
+Expected output for 'h5dump --xml thlink.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Dataset Name="dset1" OBJ-XID="xid_744-0" H5Path= "/dset1" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="5" MaxDimSize="5"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 1 2 3 4
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Group Name="g1" OBJ-XID="xid_1804-0" H5Path="/g1" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset2" OBJ-XID="xid_744-0-1" H5Path="/g1/dset2" Parents="xid_1804-0" H5ParentPaths="/g1">
+         <hdf5:DatasetPtr OBJ-XID="xid_744-0" H5Path="/g1/dset2"/>
+      </hdf5:Dataset>
+      <hdf5:Group Name="g1.1" OBJ-XID="xid_2780-0" H5Path="/g1/g1.1" Parents="xid_1804-0" H5ParentPaths="/g1" >
+         <hdf5:Dataset Name="dset3" OBJ-XID="xid_744-0-2" H5Path="/g1/g1.1/dset3" Parents="xid_2780-0" H5ParentPaths="/g1/g1.1">
+            <hdf5:DatasetPtr OBJ-XID="xid_744-0" H5Path="/g1/g1.1/dset3"/>
+         </hdf5:Dataset>
+      </hdf5:Group>
+   </hdf5:Group>
+   <hdf5:Group Name="g2" OBJ-XID="xid_2780-0-3" H5Path="/g1/g1.1" Parents="xid_696-0" H5ParentPaths="/">
+         <hdf5:GroupPtr OBJ-XID="xid_2780-0" H5Path="/g1/g1.1" Parents="xid_696-0" H5ParentPaths="/" />
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tindicesno.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tindicesno.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tindicesno.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,229 @@
+#############################
+Expected output for 'h5dump -y taindices.h5'
+#############################
+HDF5 "taindices.h5" {
+GROUP "/" {
+   DATASET "1d" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 100 ) / ( 100 ) }
+      DATA {
+         0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+         20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+         38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+         56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+         74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+         92, 93, 94, 95, 96, 97, 98, 99
+      }
+   }
+   DATASET "2d" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 2, 100 ) / ( 2, 100 ) }
+      DATA {
+         0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+         20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+         38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+         56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+         74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+         92, 93, 94, 95, 96, 97, 98, 99,
+         100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+         114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+         128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+         142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+         156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
+         170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+         184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
+         198, 199
+      }
+   }
+   DATASET "3d" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 2, 2, 100 ) / ( 2, 2, 100 ) }
+      DATA {
+         0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+         20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+         38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+         56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+         74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+         92, 93, 94, 95, 96, 97, 98, 99,
+         100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+         114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+         128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+         142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+         156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
+         170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+         184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
+         198, 199,
+         200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
+         214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+         228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
+         242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
+         256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
+         270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
+         284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+         298, 299,
+         300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+         314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327,
+         328, 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
+      }
+   }
+   DATASET "4d" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 2, 3, 4, 5 ) / ( 2, 3, 4, 5 ) }
+      DATA {
+         0, 1, 2, 3, 4,
+         5, 6, 7, 8, 9,
+         10, 11, 12, 13, 14,
+         15, 16, 17, 18, 19,
+         20, 21, 22, 23, 24,
+         25, 26, 27, 28, 29,
+         30, 31, 32, 33, 34,
+         35, 36, 37, 38, 39,
+         40, 41, 42, 43, 44,
+         45, 46, 47, 48, 49,
+         50, 51, 52, 53, 54,
+         55, 56, 57, 58, 59,
+         60, 61, 62, 63, 64,
+         65, 66, 67, 68, 69,
+         70, 71, 72, 73, 74,
+         75, 76, 77, 78, 79,
+         80, 81, 82, 83, 84,
+         85, 86, 87, 88, 89,
+         90, 91, 92, 93, 94,
+         95, 96, 97, 98, 99,
+         100, 101, 102, 103, 104,
+         105, 106, 107, 108, 109,
+         110, 111, 112, 113, 114,
+         115, 116, 117, 118, 119
+      }
+   }
+   GROUP "g1" {
+      GROUP "g2" {
+         GROUP "g3" {
+            GROUP "g4" {
+               GROUP "g5" {
+                  GROUP "g6" {
+                     DATASET "1d" {
+                        DATATYPE  H5T_STD_I32LE
+                        DATASPACE  SIMPLE { ( 100 ) / ( 100 ) }
+                        DATA {
+                           0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+                           16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+                           29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+                           42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+                           55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+                           68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+                           81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+                           94, 95, 96, 97, 98, 99
+                        }
+                     }
+                     DATASET "2d" {
+                        DATATYPE  H5T_STD_I32LE
+                        DATASPACE  SIMPLE { ( 2, 100 ) / ( 2, 100 ) }
+                        DATA {
+                           0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+                           16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+                           29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+                           42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+                           55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+                           68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+                           81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+                           94, 95, 96, 97, 98, 99,
+                           100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
+                           110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+                           120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+                           130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+                           140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+                           150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+                           160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
+                           170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+                           180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
+                           190, 191, 192, 193, 194, 195, 196, 197, 198, 199
+                        }
+                     }
+                     DATASET "3d" {
+                        DATATYPE  H5T_STD_I32LE
+                        DATASPACE  SIMPLE { ( 2, 2, 100 ) / ( 2, 2, 100 ) }
+                        DATA {
+                           0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+                           16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+                           29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+                           42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+                           55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+                           68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+                           81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+                           94, 95, 96, 97, 98, 99,
+                           100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
+                           110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+                           120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+                           130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+                           140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+                           150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+                           160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
+                           170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+                           180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
+                           190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+                           200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
+                           210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+                           220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
+                           230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
+                           240, 241, 242, 243, 244, 245, 246, 247, 248, 249,
+                           250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+                           260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
+                           270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+                           280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+                           290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+                           300, 301, 302, 303, 304, 305, 306, 307, 308, 309,
+                           310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
+                           320, 321, 322, 323, 324, 325, 326, 327, 328, 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
+                        }
+                     }
+                     DATASET "4d" {
+                        DATATYPE  H5T_STD_I32LE
+                        DATASPACE  SIMPLE { ( 2, 3, 4, 5 ) / ( 2, 3, 4, 5 ) }
+                        DATA {
+                           0, 1, 2, 3, 4,
+                           5, 6, 7, 8, 9,
+                           10, 11, 12, 13, 14,
+                           15, 16, 17, 18, 19,
+                           20, 21, 22, 23, 24,
+                           25, 26, 27, 28, 29,
+                           30, 31, 32, 33, 34,
+                           35, 36, 37, 38, 39,
+                           40, 41, 42, 43, 44,
+                           45, 46, 47, 48, 49,
+                           50, 51, 52, 53, 54,
+                           55, 56, 57, 58, 59,
+                           60, 61, 62, 63, 64,
+                           65, 66, 67, 68, 69,
+                           70, 71, 72, 73, 74,
+                           75, 76, 77, 78, 79,
+                           80, 81, 82, 83, 84,
+                           85, 86, 87, 88, 89,
+                           90, 91, 92, 93, 94,
+                           95, 96, 97, 98, 99,
+                           100, 101, 102, 103, 104,
+                           105, 106, 107, 108, 109,
+                           110, 111, 112, 113, 114,
+                           115, 116, 117, 118, 119
+                        }
+                     }
+                  }
+               }
+            }
+         }
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tindicesyes.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tindicesyes.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tindicesyes.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,250 @@
+#############################
+Expected output for 'h5dump taindices.h5'
+#############################
+HDF5 "taindices.h5" {
+GROUP "/" {
+   DATASET "1d" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 100 ) / ( 100 ) }
+      DATA {
+      (0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+      (19): 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+      (35): 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+      (51): 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+      (67): 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+      (83): 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+      (99): 99
+      }
+   }
+   DATASET "2d" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 2, 100 ) / ( 2, 100 ) }
+      DATA {
+      (0,0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+      (0,18): 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+      (0,34): 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+      (0,50): 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+      (0,66): 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+      (0,82): 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+      (0,98): 98, 99,
+      (1,0): 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+      (1,13): 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
+      (1,25): 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
+      (1,37): 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
+      (1,49): 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
+      (1,61): 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
+      (1,73): 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
+      (1,85): 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
+      (1,97): 197, 198, 199
+      }
+   }
+   DATASET "3d" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 2, 2, 100 ) / ( 2, 2, 100 ) }
+      DATA {
+      (0,0,0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+      (0,0,18): 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+      (0,0,33): 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+      (0,0,48): 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+      (0,0,63): 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+      (0,0,78): 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+      (0,0,93): 93, 94, 95, 96, 97, 98, 99,
+      (0,1,0): 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+      (0,1,12): 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
+      (0,1,24): 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+      (0,1,36): 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
+      (0,1,48): 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+      (0,1,60): 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
+      (0,1,72): 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+      (0,1,84): 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
+      (0,1,96): 196, 197, 198, 199,
+      (1,0,0): 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
+      (1,0,12): 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
+      (1,0,24): 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235,
+      (1,0,36): 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+      (1,0,48): 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+      (1,0,60): 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
+      (1,0,72): 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
+      (1,0,84): 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+      (1,0,96): 296, 297, 298, 299,
+      (1,1,0): 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
+      (1,1,12): 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323,
+      (1,1,24): 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335,
+      (1,1,36): 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
+      (1,1,48): 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
+      (1,1,60): 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
+      (1,1,72): 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383,
+      (1,1,84): 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395,
+      (1,1,96): 396, 397, 398, 399
+      }
+   }
+   DATASET "4d" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 2, 3, 4, 5 ) / ( 2, 3, 4, 5 ) }
+      DATA {
+      (0,0,0,0): 0, 1, 2, 3, 4,
+      (0,0,1,0): 5, 6, 7, 8, 9,
+      (0,0,2,0): 10, 11, 12, 13, 14,
+      (0,0,3,0): 15, 16, 17, 18, 19,
+      (0,1,0,0): 20, 21, 22, 23, 24,
+      (0,1,1,0): 25, 26, 27, 28, 29,
+      (0,1,2,0): 30, 31, 32, 33, 34,
+      (0,1,3,0): 35, 36, 37, 38, 39,
+      (0,2,0,0): 40, 41, 42, 43, 44,
+      (0,2,1,0): 45, 46, 47, 48, 49,
+      (0,2,2,0): 50, 51, 52, 53, 54,
+      (0,2,3,0): 55, 56, 57, 58, 59,
+      (1,0,0,0): 60, 61, 62, 63, 64,
+      (1,0,1,0): 65, 66, 67, 68, 69,
+      (1,0,2,0): 70, 71, 72, 73, 74,
+      (1,0,3,0): 75, 76, 77, 78, 79,
+      (1,1,0,0): 80, 81, 82, 83, 84,
+      (1,1,1,0): 85, 86, 87, 88, 89,
+      (1,1,2,0): 90, 91, 92, 93, 94,
+      (1,1,3,0): 95, 96, 97, 98, 99,
+      (1,2,0,0): 100, 101, 102, 103, 104,
+      (1,2,1,0): 105, 106, 107, 108, 109,
+      (1,2,2,0): 110, 111, 112, 113, 114,
+      (1,2,3,0): 115, 116, 117, 118, 119
+      }
+   }
+   GROUP "g1" {
+      GROUP "g2" {
+         GROUP "g3" {
+            GROUP "g4" {
+               GROUP "g5" {
+                  GROUP "g6" {
+                     DATASET "1d" {
+                        DATATYPE  H5T_STD_I32LE
+                        DATASPACE  SIMPLE { ( 100 ) / ( 100 ) }
+                        DATA {
+                        (0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+                        (14): 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+                        (26): 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+                        (38): 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+                        (50): 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+                        (62): 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+                        (74): 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+                        (86): 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+                        (98): 98, 99
+                        }
+                     }
+                     DATASET "2d" {
+                        DATATYPE  H5T_STD_I32LE
+                        DATASPACE  SIMPLE { ( 2, 100 ) / ( 2, 100 ) }
+                        DATA {
+                        (0,0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+                        (0,14): 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+                        (0,25): 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+                        (0,36): 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+                        (0,47): 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+                        (0,58): 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+                        (0,69): 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
+                        (0,80): 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+                        (0,91): 91, 92, 93, 94, 95, 96, 97, 98, 99,
+                        (1,0): 100, 101, 102, 103, 104, 105, 106, 107, 108,
+                        (1,9): 109, 110, 111, 112, 113, 114, 115, 116, 117,
+                        (1,18): 118, 119, 120, 121, 122, 123, 124, 125, 126,
+                        (1,27): 127, 128, 129, 130, 131, 132, 133, 134, 135,
+                        (1,36): 136, 137, 138, 139, 140, 141, 142, 143, 144,
+                        (1,45): 145, 146, 147, 148, 149, 150, 151, 152, 153,
+                        (1,54): 154, 155, 156, 157, 158, 159, 160, 161, 162,
+                        (1,63): 163, 164, 165, 166, 167, 168, 169, 170, 171,
+                        (1,72): 172, 173, 174, 175, 176, 177, 178, 179, 180,
+                        (1,81): 181, 182, 183, 184, 185, 186, 187, 188, 189,
+                        (1,90): 190, 191, 192, 193, 194, 195, 196, 197, 198,
+                        (1,99): 199
+                        }
+                     }
+                     DATASET "3d" {
+                        DATATYPE  H5T_STD_I32LE
+                        DATASPACE  SIMPLE { ( 2, 2, 100 ) / ( 2, 2, 100 ) }
+                        DATA {
+                        (0,0,0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+                        (0,0,13): 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+                        (0,0,24): 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+                        (0,0,35): 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+                        (0,0,46): 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+                        (0,0,57): 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+                        (0,0,68): 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
+                        (0,0,79): 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+                        (0,0,90): 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+                        (0,1,0): 100, 101, 102, 103, 104, 105, 106, 107, 108,
+                        (0,1,9): 109, 110, 111, 112, 113, 114, 115, 116, 117,
+                        (0,1,18): 118, 119, 120, 121, 122, 123, 124, 125,
+                        (0,1,26): 126, 127, 128, 129, 130, 131, 132, 133,
+                        (0,1,34): 134, 135, 136, 137, 138, 139, 140, 141,
+                        (0,1,42): 142, 143, 144, 145, 146, 147, 148, 149,
+                        (0,1,50): 150, 151, 152, 153, 154, 155, 156, 157,
+                        (0,1,58): 158, 159, 160, 161, 162, 163, 164, 165,
+                        (0,1,66): 166, 167, 168, 169, 170, 171, 172, 173,
+                        (0,1,74): 174, 175, 176, 177, 178, 179, 180, 181,
+                        (0,1,82): 182, 183, 184, 185, 186, 187, 188, 189,
+                        (0,1,90): 190, 191, 192, 193, 194, 195, 196, 197,
+                        (0,1,98): 198, 199,
+                        (1,0,0): 200, 201, 202, 203, 204, 205, 206, 207, 208,
+                        (1,0,9): 209, 210, 211, 212, 213, 214, 215, 216, 217,
+                        (1,0,18): 218, 219, 220, 221, 222, 223, 224, 225,
+                        (1,0,26): 226, 227, 228, 229, 230, 231, 232, 233,
+                        (1,0,34): 234, 235, 236, 237, 238, 239, 240, 241,
+                        (1,0,42): 242, 243, 244, 245, 246, 247, 248, 249,
+                        (1,0,50): 250, 251, 252, 253, 254, 255, 256, 257,
+                        (1,0,58): 258, 259, 260, 261, 262, 263, 264, 265,
+                        (1,0,66): 266, 267, 268, 269, 270, 271, 272, 273,
+                        (1,0,74): 274, 275, 276, 277, 278, 279, 280, 281,
+                        (1,0,82): 282, 283, 284, 285, 286, 287, 288, 289,
+                        (1,0,90): 290, 291, 292, 293, 294, 295, 296, 297,
+                        (1,0,98): 298, 299,
+                        (1,1,0): 300, 301, 302, 303, 304, 305, 306, 307, 308,
+                        (1,1,9): 309, 310, 311, 312, 313, 314, 315, 316, 317,
+                        (1,1,18): 318, 319, 320, 321, 322, 323, 324, 325,
+                        (1,1,26): 326, 327, 328, 329, 330, 331, 332, 333,
+                        (1,1,34): 334, 335, 336, 337, 338, 339, 340, 341,
+                        (1,1,42): 342, 343, 344, 345, 346, 347, 348, 349,
+                        (1,1,50): 350, 351, 352, 353, 354, 355, 356, 357,
+                        (1,1,58): 358, 359, 360, 361, 362, 363, 364, 365,
+                        (1,1,66): 366, 367, 368, 369, 370, 371, 372, 373,
+                        (1,1,74): 374, 375, 376, 377, 378, 379, 380, 381,
+                        (1,1,82): 382, 383, 384, 385, 386, 387, 388, 389,
+                        (1,1,90): 390, 391, 392, 393, 394, 395, 396, 397,
+                        (1,1,98): 398, 399
+                        }
+                     }
+                     DATASET "4d" {
+                        DATATYPE  H5T_STD_I32LE
+                        DATASPACE  SIMPLE { ( 2, 3, 4, 5 ) / ( 2, 3, 4, 5 ) }
+                        DATA {
+                        (0,0,0,0): 0, 1, 2, 3, 4,
+                        (0,0,1,0): 5, 6, 7, 8, 9,
+                        (0,0,2,0): 10, 11, 12, 13, 14,
+                        (0,0,3,0): 15, 16, 17, 18, 19,
+                        (0,1,0,0): 20, 21, 22, 23, 24,
+                        (0,1,1,0): 25, 26, 27, 28, 29,
+                        (0,1,2,0): 30, 31, 32, 33, 34,
+                        (0,1,3,0): 35, 36, 37, 38, 39,
+                        (0,2,0,0): 40, 41, 42, 43, 44,
+                        (0,2,1,0): 45, 46, 47, 48, 49,
+                        (0,2,2,0): 50, 51, 52, 53, 54,
+                        (0,2,3,0): 55, 56, 57, 58, 59,
+                        (1,0,0,0): 60, 61, 62, 63, 64,
+                        (1,0,1,0): 65, 66, 67, 68, 69,
+                        (1,0,2,0): 70, 71, 72, 73, 74,
+                        (1,0,3,0): 75, 76, 77, 78, 79,
+                        (1,1,0,0): 80, 81, 82, 83, 84,
+                        (1,1,1,0): 85, 86, 87, 88, 89,
+                        (1,1,2,0): 90, 91, 92, 93, 94,
+                        (1,1,3,0): 95, 96, 97, 98, 99,
+                        (1,2,0,0): 100, 101, 102, 103, 104,
+                        (1,2,1,0): 105, 106, 107, 108, 109,
+                        (1,2,2,0): 110, 111, 112, 113, 114,
+                        (1,2,3,0): 115, 116, 117, 118, 119
+                        }
+                     }
+                  }
+               }
+            }
+         }
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tlarge_objname.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tlarge_objname.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tlarge_objname.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,109 @@
+#############################
+Expected output for 'h5dump -w157 tlarge_objname.h5'
+#############################
+HDF5 "tlarge_objname.h5" {
+GROUP "/" {
+   GROUP "this_is_a_large_group_name" {
+      GROUP "this_is_a_large_group_name0" {
+      }
+      GROUP "this_is_a_large_group_name1" {
+      }
+      GROUP "this_is_a_large_group_name10" {
+      }
+      GROUP "this_is_a_large_group_name11" {
+      }
+      GROUP "this_is_a_large_group_name12" {
+      }
+      GROUP "this_is_a_large_group_name13" {
+      }
+      GROUP "this_is_a_large_group_name14" {
+      }
+      GROUP "this_is_a_large_group_name15" {
+      }
+      GROUP "this_is_a_large_group_name16" {
+      }
+      GROUP "this_is_a_large_group_name17" {
+      }
+      GROUP "this_is_a_large_group_name18" {
+      }
+      GROUP "this_is_a_large_group_name19" {
+      }
+      GROUP "this_is_a_large_group_name2" {
+      }
+      GROUP "this_is_a_large_group_name20" {
+      }
+      GROUP "this_is_a_large_group_name21" {
+      }
+      GROUP "this_is_a_large_group_name22" {
+      }
+      GROUP "this_is_a_large_group_name23" {
+      }
+      GROUP "this_is_a_large_group_name24" {
+      }
+      GROUP "this_is_a_large_group_name25" {
+      }
+      GROUP "this_is_a_large_group_name26" {
+      }
+      GROUP "this_is_a_large_group_name27" {
+      }
+      GROUP "this_is_a_large_group_name28" {
+      }
+      GROUP "this_is_a_large_group_name29" {
+      }
+      GROUP "this_is_a_large_group_name3" {
+      }
+      GROUP "this_is_a_large_group_name30" {
+      }
+      GROUP "this_is_a_large_group_name31" {
+      }
+      GROUP "this_is_a_large_group_name32" {
+      }
+      GROUP "this_is_a_large_group_name33" {
+      }
+      GROUP "this_is_a_large_group_name34" {
+      }
+      GROUP "this_is_a_large_group_name35" {
+      }
+      GROUP "this_is_a_large_group_name36" {
+      }
+      GROUP "this_is_a_large_group_name37" {
+      }
+      GROUP "this_is_a_large_group_name38" {
+      }
+      GROUP "this_is_a_large_group_name39" {
+      }
+      GROUP "this_is_a_large_group_name4" {
+      }
+      GROUP "this_is_a_large_group_name40" {
+      }
+      GROUP "this_is_a_large_group_name41" {
+      }
+      GROUP "this_is_a_large_group_name42" {
+      }
+      GROUP "this_is_a_large_group_name43" {
+      }
+      GROUP "this_is_a_large_group_name44" {
+      }
+      GROUP "this_is_a_large_group_name45" {
+      }
+      GROUP "this_is_a_large_group_name46" {
+      }
+      GROUP "this_is_a_large_group_name47" {
+      }
+      GROUP "this_is_a_large_group_name48" {
+      }
+      GROUP "this_is_a_large_group_name49" {
+      }
+      GROUP "this_is_a_large_group_name5" {
+      }
+      GROUP "this_is_a_large_group_name6" {
+      }
+      GROUP "this_is_a_large_group_name7" {
+      }
+      GROUP "this_is_a_large_group_name8" {
+      }
+      GROUP "this_is_a_large_group_name9" {
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tlarge_objname.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tlarge_objname.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tlonglinks.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tlonglinks.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tlonglinks.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#############################
+Expected output for 'h5dump tlonglinks.h5'
+#############################
+HDF5 "tlonglinks.h5" {
+GROUP "/" {
+   GROUP "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" {
+      GROUP "baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" {
+      }
+   }
+   SOFTLINK "baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" {
+      LINKTARGET "grp1"
+   }
+   GROUP "grp1" {
+      HARDLINK "/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tlonglinks.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tlonglinks.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tloop-1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tloop-1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tloop-1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,17 @@
+#############################
+Expected output for 'h5dump tloop.h5'
+#############################
+HDF5 "tloop.h5" {
+GROUP "/" {
+   GROUP "g1" {
+      GROUP "g1.1" {
+         GROUP "g2.1" {
+            HARDLINK "/g1"
+         }
+      }
+   }
+   GROUP "g2" {
+      HARDLINK "/g1/g1.1"
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tloop-1.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tloop-1.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tloop-1.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,7 @@
+#############################
+ output for 'h5ls -w80 -r -d tloop.h5'
+#############################
+/g1                      Group
+/g1/g1.1                 Group
+/g1/g1.1/g2.1            Group, same as /g1
+/g2                      Group, same as /g1/g1.1

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tloop.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tloop.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tloop.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tloop.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tloop.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+#############################
+Expected output for 'h5dump --xml tloop.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Group Name="g1" OBJ-XID="xid_1344-0" H5Path="/g1" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Group Name="g1.1" OBJ-XID="xid_2320-0" H5Path="/g1/g1.1" Parents="xid_1344-0" H5ParentPaths="/g1" >
+         <hdf5:Group Name="g2.1" OBJ-XID="xid_1344-0-1" H5Path="/g1" Parents="xid_2320-0" H5ParentPaths="/g1/g1.1">
+               <hdf5:GroupPtr OBJ-XID="xid_1344-0" H5Path="/g1" Parents="xid_2320-0" H5ParentPaths="/g1/g1.1" />
+         </hdf5:Group>
+      </hdf5:Group>
+   </hdf5:Group>
+   <hdf5:Group Name="g2" OBJ-XID="xid_2320-0-2" H5Path="/g1/g1.1" Parents="xid_696-0" H5ParentPaths="/">
+         <hdf5:GroupPtr OBJ-XID="xid_2320-0" H5Path="/g1/g1.1" Parents="xid_696-0" H5ParentPaths="/" />
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tloop2.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tloop2.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tloop2.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tloop2.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tloop2.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,16 @@
+#############################
+Expected output for 'h5dump --xml tloop2.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Group Name="g1" OBJ-XID="xid_1344-0" H5Path="/g1" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Group Name="g1.1" OBJ-XID="xid_2320-0" H5Path="/g1/g1.1" Parents="xid_1344-0" H5ParentPaths="/g1" >
+         <hdf5:SoftLink LinkName="g2.1" OBJ-XID="xid_4294967294-4294967293" H5SourcePath="/g1/g1.1/g2.1" TargetPath="/g1" TargetObj="xid_1344-0" Parents="xid_2320-0" H5ParentPaths="/g1/g1.1" />
+      </hdf5:Group>
+   </hdf5:Group>
+   <hdf5:Group Name="g2" OBJ-XID="xid_2320-0-1" H5Path="/g1/g1.1" Parents="xid_696-0" H5ParentPaths="/">
+         <hdf5:GroupPtr OBJ-XID="xid_2320-0" H5Path="/g1/g1.1" Parents="xid_696-0" H5ParentPaths="/" />
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tmany.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tmany.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tmany.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tmany.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tmany.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,360 @@
+#############################
+Expected output for 'h5dump --xml tmany.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Group Name="g1" OBJ-XID="xid_1344-0" H5Path="/g1" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Group Name="g1.1" OBJ-XID="xid_2320-0" H5Path="/g1/g1.1" Parents="xid_1344-0" H5ParentPaths="/g1" >
+         <hdf5:Dataset Name="dset1" OBJ-XID="xid_2696-0" H5Path= "/g1/g1.1/dset1" Parents="xid_2320-0" H5ParentPaths="/g1/g1.1">
+            <hdf5:StorageLayout>
+               <hdf5:ChunkedLayout Ndims="1">
+                  <hdf5:ChunkDimension DimSize="2" />
+                  <hdf5:RequiredFilter>
+                  </hdf5:RequiredFilter>
+               </hdf5:ChunkedLayout>
+            </hdf5:StorageLayout>
+            <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+               <hdf5:FillValue>
+                     <hdf5:NoFill/>
+               </hdf5:FillValue>
+            </hdf5:FillValueInfo>
+            <hdf5:Dataspace>
+               <hdf5:SimpleDataspace Ndims="1">
+                  <hdf5:Dimension  DimSize="6" MaxDimSize="UNLIMITED"/>
+               </hdf5:SimpleDataspace>
+            </hdf5:Dataspace>
+            <hdf5:DataType>
+               <hdf5:CompoundType>
+                  <hdf5:Field FieldName="a_array">
+                     <hdf5:DataType>
+                        <hdf5:ArrayType Ndims="4">
+                           <hdf5:ArrayDimension DimSize="2" DimPerm="0"/>
+                           <hdf5:ArrayDimension DimSize="2" DimPerm="1"/>
+                           <hdf5:ArrayDimension DimSize="2" DimPerm="2"/>
+                           <hdf5:ArrayDimension DimSize="2" DimPerm="3"/>
+                           <hdf5:DataType>
+                              <hdf5:AtomicType>
+                                 <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                              </hdf5:AtomicType>
+                           </hdf5:DataType>
+                        </hdf5:ArrayType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="b_array">
+                     <hdf5:DataType>
+                        <hdf5:ArrayType Ndims="4">
+                           <hdf5:ArrayDimension DimSize="2" DimPerm="0"/>
+                           <hdf5:ArrayDimension DimSize="2" DimPerm="1"/>
+                           <hdf5:ArrayDimension DimSize="2" DimPerm="2"/>
+                           <hdf5:ArrayDimension DimSize="2" DimPerm="3"/>
+                           <hdf5:DataType>
+                              <hdf5:AtomicType>
+                                 <hdf5:FloatType ByteOrder="BE" Size="8" SignBitLocation="63" ExponentBits="11" ExponentLocation="52" MantissaBits="52" MantissaLocation="0" />
+                              </hdf5:AtomicType>
+                           </hdf5:DataType>
+                        </hdf5:ArrayType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="c_array">
+                     <hdf5:DataType>
+                        <hdf5:ArrayType Ndims="4">
+                           <hdf5:ArrayDimension DimSize="2" DimPerm="0"/>
+                           <hdf5:ArrayDimension DimSize="2" DimPerm="1"/>
+                           <hdf5:ArrayDimension DimSize="2" DimPerm="2"/>
+                           <hdf5:ArrayDimension DimSize="2" DimPerm="3"/>
+                           <hdf5:DataType>
+                              <hdf5:AtomicType>
+                                 <hdf5:FloatType ByteOrder="BE" Size="8" SignBitLocation="63" ExponentBits="11" ExponentLocation="52" MantissaBits="52" MantissaLocation="0" />
+                              </hdf5:AtomicType>
+                           </hdf5:DataType>
+                        </hdf5:ArrayType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+               </hdf5:CompoundType>
+            </hdf5:DataType>
+            <hdf5:Attribute Name="attr1">
+               <hdf5:Dataspace>
+                  <hdf5:SimpleDataspace Ndims="1">
+                     <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+                  </hdf5:SimpleDataspace>
+               </hdf5:Dataspace>
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+               <hdf5:Data>
+                  <hdf5:DataFromFile>
+                  97 98 99 100 101 102 103 104 105 0
+                  </hdf5:DataFromFile>
+               </hdf5:Data>
+            </hdf5:Attribute>
+            <hdf5:Attribute Name="attr2">
+               <hdf5:Dataspace>
+                  <hdf5:SimpleDataspace Ndims="2">
+                     <hdf5:Dimension  DimSize="2" MaxDimSize="2"/>
+                     <hdf5:Dimension  DimSize="2" MaxDimSize="2"/>
+                  </hdf5:SimpleDataspace>
+               </hdf5:Dataspace>
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+               <hdf5:Data>
+                  <hdf5:DataFromFile>
+                  0 1
+                  2 3
+                  </hdf5:DataFromFile>
+               </hdf5:Data>
+            </hdf5:Attribute>
+            <hdf5:Attribute Name="attr3">
+               <hdf5:Dataspace>
+                  <hdf5:SimpleDataspace Ndims="1">
+                     <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+                  </hdf5:SimpleDataspace>
+               </hdf5:Dataspace>
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:FloatType ByteOrder="BE" Size="8" SignBitLocation="63" ExponentBits="11" ExponentLocation="52" MantissaBits="52" MantissaLocation="0" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+               <hdf5:Data>
+                  <hdf5:DataFromFile>
+                  0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9
+                  </hdf5:DataFromFile>
+               </hdf5:Data>
+            </hdf5:Attribute>
+         <!-- Note: format of compound data not specified -->
+            <hdf5:Data>
+               <hdf5:DataFromFile>
+                0 1
+                     0 1
+                     0 1
+                     0 1
+                     0 1
+                     0 1
+                     0 1
+                     0 1  0 1
+                     0 1
+                     0 1
+                     0 1
+                     0 1
+                     0 1
+                     0 1
+                     0 1  6 7
+                     6 7
+                     6 7
+                     6 7
+                     6 7
+                     6 7
+                     6 7
+                     6 7
+                1 2
+                     1 2
+                     1 2
+                     1 2
+                     1 2
+                     1 2
+                     1 2
+                     1 2  1 2
+                     1 2
+                     1 2
+                     1 2
+                     1 2
+                     1 2
+                     1 2
+                     1 2  7 8
+                     7 8
+                     7 8
+                     7 8
+                     7 8
+                     7 8
+                     7 8
+                     7 8
+                2 3
+                     2 3
+                     2 3
+                     2 3
+                     2 3
+                     2 3
+                     2 3
+                     2 3  2 3
+                     2 3
+                     2 3
+                     2 3
+                     2 3
+                     2 3
+                     2 3
+                     2 3  8 9
+                     8 9
+                     8 9
+                     8 9
+                     8 9
+                     8 9
+                     8 9
+                     8 9
+                3 4
+                     3 4
+                     3 4
+                     3 4
+                     3 4
+                     3 4
+                     3 4
+                     3 4  3 4
+                     3 4
+                     3 4
+                     3 4
+                     3 4
+                     3 4
+                     3 4
+                     3 4  9 10
+                     9 10
+                     9 10
+                     9 10
+                     9 10
+                     9 10
+                     9 10
+                     9 10
+                4 5
+                     4 5
+                     4 5
+                     4 5
+                     4 5
+                     4 5
+                     4 5
+                     4 5  4 5
+                     4 5
+                     4 5
+                     4 5
+                     4 5
+                     4 5
+                     4 5
+                     4 5  10 11
+                     10 11
+                     10 11
+                     10 11
+                     10 11
+                     10 11
+                     10 11
+                     10 11
+                5 6
+                     5 6
+                     5 6
+                     5 6
+                     5 6
+                     5 6
+                     5 6
+                     5 6  5 6
+                     5 6
+                     5 6
+                     5 6
+                     5 6
+                     5 6
+                     5 6
+                     5 6  11 12
+                     11 12
+                     11 12
+                     11 12
+                     11 12
+                     11 12
+                     11 12
+                     11 12
+               </hdf5:DataFromFile>
+            </hdf5:Data>
+         </hdf5:Dataset>
+      </hdf5:Group>
+      <hdf5:Group Name="g1.2" OBJ-XID="xid_5832-0" H5Path="/g1/g1.2" Parents="xid_1344-0" H5ParentPaths="/g1" >
+         <hdf5:Dataset Name="link1" OBJ-XID="xid_2696-0-1" H5Path="/g1/g1.2/link1" Parents="xid_5832-0" H5ParentPaths="/g1/g1.2">
+            <hdf5:DatasetPtr OBJ-XID="xid_2696-0" H5Path="/g1/g1.2/link1"/>
+         </hdf5:Dataset>
+      </hdf5:Group>
+   </hdf5:Group>
+   <hdf5:Group Name="g2" OBJ-XID="xid_6808-0" H5Path="/g2" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:SoftLink LinkName="slink2" OBJ-XID="xid_4294967294-4294967293" H5SourcePath="/g2/slink2" TargetPath="/g1" TargetObj="xid_1344-0" Parents="xid_6808-0" H5ParentPaths="/g2" />
+   </hdf5:Group>
+   <hdf5:Group Name="g3" OBJ-XID="xid_7784-0" H5Path="/g3" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="link3" OBJ-XID="xid_8480-0" H5Path= "/g3/link3" Parents="xid_7784-0" H5ParentPaths="/g3">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="2">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 1 2 3 4 5 6 7 8 9
+            0 1 2 3 4 5 6 7 8 9
+            0 1 2 3 4 5 6 7 8 9
+            0 1 2 3 4 5 6 7 8 9
+            0 1 2 3 4 5 6 7 8 9
+            0 1 2 3 4 5 6 7 8 9
+            0 1 2 3 4 5 6 7 8 9
+            0 1 2 3 4 5 6 7 8 9
+            0 1 2 3 4 5 6 7 8 9
+            0 1 2 3 4 5 6 7 8 9
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+   <hdf5:Group Name="g4" OBJ-XID="xid_8432-0" H5Path="/g4" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset2" OBJ-XID="xid_8480-0-2" H5Path="/g4/dset2" Parents="xid_8432-0" H5ParentPaths="/g4">
+         <hdf5:DatasetPtr OBJ-XID="xid_8480-0" H5Path="/g4/dset2"/>
+      </hdf5:Dataset>
+   </hdf5:Group>
+   <hdf5:Group Name="g5" OBJ-XID="xid_10248-0" H5Path="/g5" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:SoftLink LinkName="slink4" OBJ-XID="xid_4294967292-4294967291" H5SourcePath="/g5/slink4" TargetPath="/g6/dset3" TargetObj="xid_10944-0" Parents="xid_10248-0" H5ParentPaths="/g5" />
+   </hdf5:Group>
+   <hdf5:Group Name="g6" OBJ-XID="xid_10896-0" H5Path="/g6" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset3" OBJ-XID="xid_10944-0" H5Path= "/g6/dset3" Parents="xid_10896-0" H5ParentPaths="/g6">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="2">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0 0 0 0 0 0 0
+            1 1 1 1 1 1 1 1 1 1
+            2 2 2 2 2 2 2 2 2 2
+            3 3 3 3 3 3 3 3 3 3
+            4 4 4 4 4 4 4 4 4 4
+            5 5 5 5 5 5 5 5 5 5
+            6 6 6 6 6 6 6 6 6 6
+            7 7 7 7 7 7 7 7 7 7
+            8 8 8 8 8 8 8 8 8 8
+            9 9 9 9 9 9 9 9 9 9
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-b.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-b.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-g.h5
===================================================================

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-l.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-l.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-o.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-o.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-r.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-r.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-s.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tmulti-s.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tmulti.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tmulti.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tmulti.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,23 @@
+#############################
+Expected output for 'h5dump --filedriver=multi tmulti'
+#############################
+HDF5 "tmulti" {
+GROUP "/" {
+   DATASET "dset1" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 10, 15 ) / ( 10, 15 ) }
+      DATA {
+      (0,0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+      (1,0): 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+      (2,0): 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+      (3,0): 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+      (4,0): 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+      (5,0): 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+      (6,0): 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+      (7,0): 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+      (8,0): 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+      (9,0): 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tname-amp.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tname-amp.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tname-amp.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tname-amp.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tname-amp.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,62 @@
+#############################
+Expected output for 'h5dump --xml tname-amp.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Attribute Name="attr1&amp;withamp">
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         97 98 99 100 101 102 103 104 105 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:Group Name="g1.1&amp;withamp" OBJ-XID="xid_1344-0" H5Path="/g1.1&amp;withamp" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset1.1.1&amp;withamp" OBJ-XID="xid_1720-0" H5Path= "/g1.1&amp;withamp/dset1.1.1&amp;withamp" Parents="xid_1344-0" H5ParentPaths="/g1.1&amp;withamp">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="2">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0 0 0 0 0 0 0
+            0 1 2 3 4 5 6 7 8 9
+            0 2 4 6 8 10 12 14 16 18
+            0 3 6 9 12 15 18 21 24 27
+            0 4 8 12 16 20 24 28 32 36
+            0 5 10 15 20 25 30 35 40 45
+            0 6 12 18 24 30 36 42 48 54
+            0 7 14 21 28 35 42 49 56 63
+            0 8 16 24 32 40 48 56 64 72
+            0 9 18 27 36 45 54 63 72 81
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tname-apos.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tname-apos.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tname-apos.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tname-apos.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tname-apos.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,62 @@
+#############################
+Expected output for 'h5dump --xml tname-apos.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Attribute Name="attr1&apos;withapos">
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         97 98 99 100 101 102 103 104 105 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:Group Name="g1.1&apos;withapos" OBJ-XID="xid_1344-0" H5Path="/g1.1&apos;withapos" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset1.1.1&apos;withapos" OBJ-XID="xid_1720-0" H5Path= "/g1.1&apos;withapos/dset1.1.1&apos;withapos" Parents="xid_1344-0" H5ParentPaths="/g1.1&apos;withapos">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="2">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0 0 0 0 0 0 0
+            0 1 2 3 4 5 6 7 8 9
+            0 2 4 6 8 10 12 14 16 18
+            0 3 6 9 12 15 18 21 24 27
+            0 4 8 12 16 20 24 28 32 36
+            0 5 10 15 20 25 30 35 40 45
+            0 6 12 18 24 30 36 42 48 54
+            0 7 14 21 28 35 42 49 56 63
+            0 8 16 24 32 40 48 56 64 72
+            0 9 18 27 36 45 54 63 72 81
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tname-gt.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tname-gt.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tname-gt.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tname-gt.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tname-gt.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,62 @@
+#############################
+Expected output for 'h5dump --xml tname-gt.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Attribute Name="attr1&gt;withgt">
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         97 98 99 100 101 102 103 104 105 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:Group Name="g1.1&gt;withgt" OBJ-XID="xid_1344-0" H5Path="/g1.1&gt;withgt" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset1.1.1&gt;withgt" OBJ-XID="xid_1720-0" H5Path= "/g1.1&gt;withgt/dset1.1.1&gt;withgt" Parents="xid_1344-0" H5ParentPaths="/g1.1&gt;withgt">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="2">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0 0 0 0 0 0 0
+            0 1 2 3 4 5 6 7 8 9
+            0 2 4 6 8 10 12 14 16 18
+            0 3 6 9 12 15 18 21 24 27
+            0 4 8 12 16 20 24 28 32 36
+            0 5 10 15 20 25 30 35 40 45
+            0 6 12 18 24 30 36 42 48 54
+            0 7 14 21 28 35 42 49 56 63
+            0 8 16 24 32 40 48 56 64 72
+            0 9 18 27 36 45 54 63 72 81
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tname-lt.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tname-lt.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tname-lt.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tname-lt.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tname-lt.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,62 @@
+#############################
+Expected output for 'h5dump --xml tname-lt.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Attribute Name="attr1&lt;withlt">
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         97 98 99 100 101 102 103 104 105 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:Group Name="g1.1&lt;withlt" OBJ-XID="xid_1344-0" H5Path="/g1.1&lt;withlt" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset1.1.1&lt;withlt" OBJ-XID="xid_1720-0" H5Path= "/g1.1&lt;withlt/dset1.1.1&lt;withlt" Parents="xid_1344-0" H5ParentPaths="/g1.1&lt;withlt">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="2">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0 0 0 0 0 0 0
+            0 1 2 3 4 5 6 7 8 9
+            0 2 4 6 8 10 12 14 16 18
+            0 3 6 9 12 15 18 21 24 27
+            0 4 8 12 16 20 24 28 32 36
+            0 5 10 15 20 25 30 35 40 45
+            0 6 12 18 24 30 36 42 48 54
+            0 7 14 21 28 35 42 49 56 63
+            0 8 16 24 32 40 48 56 64 72
+            0 9 18 27 36 45 54 63 72 81
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tname-quot.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tname-quot.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tname-quot.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tname-quot.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tname-quot.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,62 @@
+#############################
+Expected output for 'h5dump --xml tname-quot.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Attribute Name="attr1&quot;withquot">
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         97 98 99 100 101 102 103 104 105 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:Group Name="g1.1&quot;withquot" OBJ-XID="xid_1344-0" H5Path="/g1.1&quot;withquot" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset1.1.1&quot;withquot" OBJ-XID="xid_1720-0" H5Path= "/g1.1&quot;withquot/dset1.1.1&quot;withquot" Parents="xid_1344-0" H5ParentPaths="/g1.1&quot;withquot">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="2">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0 0 0 0 0 0 0
+            0 1 2 3 4 5 6 7 8 9
+            0 2 4 6 8 10 12 14 16 18
+            0 3 6 9 12 15 18 21 24 27
+            0 4 8 12 16 20 24 28 32 36
+            0 5 10 15 20 25 30 35 40 45
+            0 6 12 18 24 30 36 42 48 54
+            0 7 14 21 28 35 42 49 56 63
+            0 8 16 24 32 40 48 56 64 72
+            0 9 18 27 36 45 54 63 72 81
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tname-sp.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tname-sp.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tname-sp.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tname-sp.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tname-sp.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,62 @@
+#############################
+Expected output for 'h5dump --xml tname-sp.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Attribute Name="attr1 withspace">
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="1" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         97 98 99 100 101 102 103 104 105 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:Group Name="g1.1 withspace" OBJ-XID="xid_1344-0" H5Path="/g1.1 withspace" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset1.1.1 withspace" OBJ-XID="xid_1720-0" H5Path= "/g1.1 withspace/dset1.1.1 withspace" Parents="xid_1344-0" H5ParentPaths="/g1.1 withspace">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="2">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0 0 0 0 0 0 0
+            0 1 2 3 4 5 6 7 8 9
+            0 2 4 6 8 10 12 14 16 18
+            0 3 6 9 12 15 18 21 24 27
+            0 4 8 12 16 20 24 28 32 36
+            0 5 10 15 20 25 30 35 40 45
+            0 6 12 18 24 30 36 42 48 54
+            0 7 14 21 28 35 42 49 56 63
+            0 8 16 24 32 40 48 56 64 72
+            0 9 18 27 36 45 54 63 72 81
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tnamed_dtype_attr.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tnamed_dtype_attr.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tnamed_dtype_attr.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,20 @@
+#############################
+Expected output for 'h5dump -A tnamed_dtype_attr.h5'
+#############################
+HDF5 "tnamed_dtype_attr.h5" {
+GROUP "/" {
+   DATASET "Dataset" {
+      DATATYPE  "/Datatype"
+      DATASPACE  SCALAR
+      ATTRIBUTE "Attribute" {
+         DATATYPE  "/Datatype"
+         DATASPACE  SCALAR
+         DATA {
+         (0): 8
+         }
+      }
+   }
+   DATATYPE "Datatype"       H5T_STD_I32LE;
+
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tnamed_dtype_attr.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tnamed_dtype_attr.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tnamed_dtype_attr.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tnamed_dtype_attr.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tnamed_dtype_attr.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,43 @@
+#############################
+Expected output for 'h5dump --xml tnamed_dtype_attr.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:NamedDataType Name="Datatype" OBJ-XID="xid_976-0" H5Path="/Datatype" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+   </hdf5:NamedDataType>
+   <hdf5:Dataset Name="Dataset" OBJ-XID="xid_1384-0" H5Path= "/Dataset" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:ScalarDataspace />
+      </hdf5:Dataspace>
+      <hdf5:NamedDataTypePtr OBJ-XID="xid_976-0" H5Path="/Datatype" />
+      <hdf5:Attribute Name="Attribute">
+         <hdf5:Dataspace>
+            <hdf5:ScalarDataspace />
+         </hdf5:Dataspace>
+         <hdf5:NamedDataTypePtr OBJ-XID="xid_976-0" H5Path="/Datatype" />
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            8
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Attribute>
+      <hdf5:Data>
+         <hdf5:NoData/>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tnestcomp-1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tnestcomp-1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tnestcomp-1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,116 @@
+#############################
+Expected output for 'h5dump tnestedcomp.h5'
+#############################
+HDF5 "tnestedcomp.h5" {
+GROUP "/" {
+   DATASET "ArrayOfStructures" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I32LE "a_name";
+         H5T_IEEE_F32LE "b_name";
+         H5T_IEEE_F64LE "c_name";
+         H5T_COMPOUND {
+            H5T_STRING {
+               STRSIZE 1;
+               STRPAD H5T_STR_NULLTERM;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            } "char_name";
+            H5T_ARRAY { [2] H5T_IEEE_F32LE } "array_name";
+         } "d_name";
+      }
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+      DATA {
+      (0): {
+            0,
+            0,
+            1,
+            {
+               "A",
+               [ -100, 100 ]
+            }
+         },
+      (1): {
+            1,
+            1,
+            0.5,
+            {
+               "B",
+               [ -100, 100 ]
+            }
+         },
+      (2): {
+            2,
+            4,
+            0.333333,
+            {
+               "C",
+               [ -100, 100 ]
+            }
+         },
+      (3): {
+            3,
+            9,
+            0.25,
+            {
+               "D",
+               [ -100, 100 ]
+            }
+         },
+      (4): {
+            4,
+            16,
+            0.2,
+            {
+               "E",
+               [ -100, 100 ]
+            }
+         },
+      (5): {
+            5,
+            25,
+            0.166667,
+            {
+               "F",
+               [ -100, 100 ]
+            }
+         },
+      (6): {
+            6,
+            36,
+            0.142857,
+            {
+               "G",
+               [ -100, 100 ]
+            }
+         },
+      (7): {
+            7,
+            49,
+            0.125,
+            {
+               "H",
+               [ -100, 100 ]
+            }
+         },
+      (8): {
+            8,
+            64,
+            0.111111,
+            {
+               "I",
+               [ -100, 100 ]
+            }
+         },
+      (9): {
+            9,
+            81,
+            0.1,
+            {
+               "J",
+               [ -100, 100 ]
+            }
+         }
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tnestcomp-1.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tnestcomp-1.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tnestcomp-1.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,13 @@
+#############################
+ output for 'h5ls -w80 -r -d tnestedcomp.h5'
+#############################
+/ArrayOfStructures       Dataset {10}
+    Data:
+        (0) {0, 0, 1, {"A", [-100,100]}}, {1, 1, 0.5, {"B", [-100,100]}},
+        (2) {2, 4, 0.333333333333333, {"C", [-100,100]}},
+        (3) {3, 9, 0.25, {"D", [-100,100]}}, {4, 16, 0.2, {"E", [-100,100]}},
+        (5) {5, 25, 0.166666666666667, {"F", [-100,100]}},
+        (6) {6, 36, 0.142857142857143, {"G", [-100,100]}},
+        (7) {7, 49, 0.125, {"H", [-100,100]}},
+        (8) {8, 64, 0.111111111111111, {"I", [-100,100]}},
+        (9) {9, 81, 0.1, {"J", [-100,100]}}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tnestedcomp.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tnestedcomp.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tnestedcomp.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tnestedcomp.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tnestedcomp.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,83 @@
+#############################
+Expected output for 'h5dump --xml tnestedcomp.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Dataset Name="ArrayOfStructures" OBJ-XID="xid_744-0" H5Path= "/ArrayOfStructures" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="a_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="b_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="c_name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:FloatType ByteOrder="LE" Size="8" SignBitLocation="63" ExponentBits="11" ExponentLocation="52" MantissaBits="52" MantissaLocation="0" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="d_name">
+               <hdf5:DataType>
+                  <hdf5:CompoundType>
+                     <hdf5:Field FieldName="char_name">
+                        <hdf5:DataType>
+                           <hdf5:AtomicType>
+                              <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="1" StrPad="H5T_STR_NULLTERM"/>
+                           </hdf5:AtomicType>
+                        </hdf5:DataType>
+                     </hdf5:Field>
+                     <hdf5:Field FieldName="array_name">
+                        <hdf5:DataType>
+                           <hdf5:ArrayType Ndims="1">
+                              <hdf5:ArrayDimension DimSize="2" DimPerm="0"/>
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:ArrayType>
+                        </hdf5:DataType>
+                     </hdf5:Field>
+                  </hdf5:CompoundType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 0 1 "A"  -100 100 1 1 0.5 "B"  -100 100 2 4 0.333333 "C"  -100 100
+         3 9 0.25 "D"  -100 100 4 16 0.2 "E"  -100 100
+         5 25 0.166667 "F"  -100 100 6 36 0.142857 "G"  -100 100
+         7 49 0.125 "H"  -100 100 8 64 0.111111 "I"  -100 100
+         9 81 0.1 "J"  -100 100
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tnodata.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tnodata.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tnodata.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tnodata.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tnodata.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,33 @@
+#############################
+Expected output for 'h5dump --xml tnodata.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Dataset Name="dset1" OBJ-XID="xid_744-0" H5Path= "/dset1" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="5" MaxDimSize="5"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 0 0 0 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tnofilename.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tnofilename.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tnofilename.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,67 @@
+#############################
+Expected output for 'h5dump '
+#############################
+usage: h5dump [OPTIONS] file
+  OPTIONS
+     -h, --help           Print a usage message and exit
+     -n, --contents       Print a list of the file contents and exit
+     -B, --bootblock      Print the content of the boot block
+     -H, --header         Print the header only; no data is displayed
+     -A                   Print the header and value of attributes; data of datasets is not displayed
+     -i, --object-ids     Print the object ids
+     -r, --string         Print 1-byte integer datasets as ASCII
+     -e,                  Escape non printing characters
+     -V, --version        Print version number and exit
+     -a P, --attribute=P  Print the specified attribute
+     -d P, --dataset=P    Print the specified dataset
+     -y                   Do not print array indices with the data
+     -p,   --properties   Print dataset filters, storage layout and fill value
+     -f D, --filedriver=D Specify which driver to open the file with
+     -g P, --group=P      Print the specified group and all members
+     -l P, --soft-link=P  Print the value(s) of the specified soft link
+     -o F, --output=F     Output raw data into file F
+     -t P, --datatype=P   Print the specified named data type
+     -w N, --width=N      Set the number of columns of output
+     -x, --xml            Output in XML using Schema
+     -u, --use-dtd        Output in XML using DTD
+     -D U, --xml-dtd=U    Use the DTD or schema at U
+     -X S, --xml-ns=S      (XML Schema) Use qualified names n the XML
+                          ":": no namespace, default: "hdf5:"
+                          E.g., to dump a file called `-f', use h5dump -- -f
+
+ Subsetting is available by using the following options with a dataset
+ attribute. Subsetting is done by selecting a hyperslab from the data.
+ Thus, the options mirror those for performing a hyperslab selection.
+ The START and COUNT parameters are mandatory if you do subsetting.
+ The STRIDE and BLOCK parameters are optional and will default to 1 in
+ each dimension.
+
+      -s L, --start=L     Offset of start of subsetting selection
+      -S L, --stride=L    Hyperslab stride
+      -c L, --count=L     Number of blocks to include in selection
+      -k L, --block=L     Size of block in hyperslab
+
+  D - is the file driver to use in opening the file. Acceptable values
+        are "sec2", "family", "split", "multi", and "stream". Without
+        the file driver flag, the file will be opened with each driver in
+        turn and in the order specified above until one driver succeeds
+        in opening the file.
+  F - is a filename.
+  P - is the full path from the root group to the object.
+  N - is an integer greater than 1.
+  L - is a list of integers the number of which are equal to the
+        number of dimensions in the dataspace being queried
+  U - is a URI reference (as defined in [IETF RFC 2396],
+        updated by [IETF RFC 2732])
+
+  Examples:
+
+  1) Attribute foo of the group /bar_none in file quux.h5
+
+     	h5dump -a /bar_none/foo quux.h5
+
+  2) Selecting a subset from dataset /foo in file quux.h5
+
+      h5dump -d /foo -s "0,1" -S "1,1" -c "2,3" -k "2,2" quux.h5
+
+h5dump error: missing file name

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tobjref.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tobjref.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tobjref.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,32 @@
+HDF5 "tobjref.h5" {
+GROUP "/" {
+   DATASET "Dataset3" {
+      DATATYPE { H5T_REFERENCE }
+      DATASPACE { SIMPLE ( 4 ) / ( 4 ) }
+      DATA {
+         DATASET 0:1696, DATASET 0:2152, GROUP 0:1320, DATATYPE 0:2268
+      }
+   }
+   GROUP "Group1" {
+      DATASET "Dataset1" {
+         DATATYPE { H5T_STD_U32BE }
+         DATASPACE { SIMPLE ( 4 ) / ( 4 ) }
+         DATA {
+            0, 3, 6, 9
+         }
+      }
+      DATASET "Dataset2" {
+         DATATYPE { H5T_STD_U8BE }
+         DATASPACE { SIMPLE ( 4 ) / ( 4 ) }
+         DATA {
+            0, 0, 0, 0
+         }
+      }
+      DATATYPE "Datatype1" {
+         H5T_STD_I32BE "a";
+         H5T_IEEE_F32BE "b";
+         H5T_IEEE_F32BE "c";
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tobjref.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tobjref.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tobjref.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tobjref.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tobjref.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,117 @@
+#############################
+Expected output for 'h5dump --xml tobjref.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Dataset Name="Dataset3" OBJ-XID="xid_2348-0" H5Path= "/Dataset3" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:ReferenceType>
+               <hdf5:ObjectReferenceType />
+            </hdf5:ReferenceType>
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+   <hdf5:Data>
+   <hdf5:DataFromFile>
+      "/Group1/Dataset1"
+      "/Group1/Dataset2"
+      "/Group1"
+      "/Group1/Datatype1"
+   </hdf5:DataFromFile>
+   </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Group Name="Group1" OBJ-XID="xid_1320-0" H5Path="/Group1" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:NamedDataType Name="Datatype1" OBJ-XID="xid_2268-0" H5Path="/Group1/Datatype1" Parents="xid_1320-0" H5ParentPaths="/Group1">
+         <hdf5:DataType>
+            <hdf5:CompoundType>
+               <hdf5:Field FieldName="a">
+                  <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                     </hdf5:AtomicType>
+                  </hdf5:DataType>
+               </hdf5:Field>
+               <hdf5:Field FieldName="b">
+                  <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                     </hdf5:AtomicType>
+                  </hdf5:DataType>
+               </hdf5:Field>
+               <hdf5:Field FieldName="c">
+                  <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                     </hdf5:AtomicType>
+                  </hdf5:DataType>
+               </hdf5:Field>
+            </hdf5:CompoundType>
+         </hdf5:DataType>
+      </hdf5:NamedDataType>
+      <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_1696-0" H5Path= "/Group1/Dataset1" Parents="xid_1320-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="4" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 3 6 9
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="Dataset2" OBJ-XID="xid_2152-0" H5Path= "/Group1/Dataset2" Parents="xid_1320-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/topaque.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/topaque.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/topaque.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,18 @@
+#############################
+Expected output for 'h5dump topaque.h5'
+#############################
+HDF5 "topaque.h5" {
+GROUP "/" {
+   DATASET "opaque test" {
+      DATATYPE { 
+         H5T_OPAQUE;
+         OPAQUE_TAG "test opaque type";
+       } 
+      DATASPACE { SIMPLE ( 2 ) / ( 2 ) } 
+      DATA {
+         0x0063016202610360045f055e065d075c085b095a0a590b580c570d560e550f541053115212511350144f154e164d174c184b194a1a491b481c471d461e451f442043214222412340243f253e263d273c283b293a2a392b382c372d362e352f343033313232313330342f352e362d372c382b392a3a293b283c273d263e253f244023412242214320441f451e461d471c481b491a4a194b184c174d164e154f145013511252115310540f550e560d570c580b590a5a095b085c075d065e055f046003610262016300,
+         0x3800002c3c000027340001ea04000012000000000008a4640000000000000000000000000000000000000000ef7ec9c000000001effffa84effffa8c0003fc000000000000000000effffa2000012e84effffa2000012e5800000003effffa8400000004effffa8c00000005effffaf0000000000000000000000001effffa84effffa8c0003fc0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+      } 
+   } 
+} 
+} 

Added: packages/hdf5/branches/upstream/current/tools/testfiles/topaque.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/topaque.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/topaque.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/topaque.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/topaque.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,34 @@
+#############################
+Expected output for 'h5dump --xml topaque.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Dataset Name="opaque test" OBJ-XID="xid_744-0" H5Path= "/opaque test" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="2" MaxDimSize="2"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:OpaqueType Tag="test opaque type" Size="200"/>
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         00:63:01:62:02:61:03:60:04:5f:05:5e:06:5d:07:5c:08:5b:09:5a:0a:59:0b:58:0c:57:0d:56:0e:55:0f:54:10:53:11:52:12:51:13:50:14:4f:15:4e:16:4d:17:4c:18:4b:19:4a:1a:49:1b:48:1c:47:1d:46:1e:45:1f:44:20:43:21:42:22:41:23:40:24:3f:25:3e:26:3d:27:3c:28:3b:29:3a:2a:39:2b:38:2c:37:2d:36:2e:35:2f:34:30:33:31:32:32:31:33:30:34:2f:35:2e:36:2d:37:2c:38:2b:39:2a:3a:29:3b:28:3c:27:3d:26:3e:25:3f:24:40:23:41:22:42:21:43:20:44:1f:45:1e:46:1d:47:1c:48:1b:49:1a:4a:19:4b:18:4c:17:4d:16:4e:15:4f:14:50:13:51:12:52:11:53:10:54:0f:55:0e:56:0d:57:0c:58:0b:59:0a:5a:09:5b:08:5c:07:5d:06:5e:05:5f:04:60:03:61:02:62:01:63:00
+         38:00:00:2c:3c:00:00:27:34:00:01:ea:04:00:00:12:00:00:00:00:00:08:a4:64:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:ef:7e:c9:c0:00:00:00:01:ef:ff:fa:84:ef:ff:fa:8c:00:03:fc:00:00:00:00:00:00:00:00:00:ef:ff:fa:20:00:01:2e:84:ef:ff:fa:20:00:01:2e:58:00:00:00:03:ef:ff:fa:84:00:00:00:04:ef:ff:fa:8c:00:00:00:05:ef:ff:fa:f0:00:00:00:00:00:00:00:00:00:00:00:01:ef:ff:fa:84:ef:ff:fa:8c:00:03:fc:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tperror.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tperror.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tperror.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,8 @@
+#############################
+Expected output for 'h5dump -p -d bogus tfcontents1.h5'
+#############################
+HDF5 "tfcontents1.h5" {
+DATASET "bogus" {
+   }
+}
+h5dump error: unable to open dataset "bogus"

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tref-escapes-at.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tref-escapes-at.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tref-escapes-at.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tref-escapes-at.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tref-escapes-at.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,345 @@
+#############################
+Expected output for 'h5dump --xml tref-escapes-at.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Group Name="Group1" OBJ-XID="xid_1344-0" H5Path="/Group1" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="Dataset space" OBJ-XID="xid_3716-0" H5Path= "/Group1/Dataset space" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="Dataset&quot;quote" OBJ-XID="xid_1720-0" H5Path= "/Group1/Dataset&quot;quote" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="4" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 3 6 9
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="Dataset&amp;amp" OBJ-XID="xid_2612-0" H5Path= "/Group1/Dataset&amp;amp" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="Dataset&apos;apos" OBJ-XID="xid_3440-0" H5Path= "/Group1/Dataset&apos;apos" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="Dataset&lt;lt" OBJ-XID="xid_2888-0" H5Path= "/Group1/Dataset&lt;lt" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="Dataset&gt;gt" OBJ-XID="xid_3164-0" H5Path= "/Group1/Dataset&gt;gt" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="Dataset\slash" OBJ-XID="xid_2336-0" H5Path= "/Group1/Dataset\slash" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Group Name="Group1.1" OBJ-XID="xid_4592-0" H5Path="/Group1/Group1.1" Parents="xid_1344-0" H5ParentPaths="/Group1" >
+         <hdf5:Dataset Name="Datasetrefs" OBJ-XID="xid_4640-0" H5Path= "/Group1/Group1.1/Datasetrefs" Parents="xid_4592-0" H5ParentPaths="/Group1/Group1.1">
+            <hdf5:StorageLayout>
+               <hdf5:ContiguousLayout/>
+            </hdf5:StorageLayout>
+                     <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+               <hdf5:FillValue>
+                     <hdf5:NoFill/>
+               </hdf5:FillValue>
+            </hdf5:FillValueInfo>
+            <hdf5:Dataspace>
+               <hdf5:SimpleDataspace Ndims="1">
+                  <hdf5:Dimension  DimSize="1" MaxDimSize="1"/>
+               </hdf5:SimpleDataspace>
+            </hdf5:Dataspace>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+            <hdf5:Attribute Name="reftoquote">
+               <hdf5:Dataspace>
+                  <hdf5:SimpleDataspace Ndims="1">
+                     <hdf5:Dimension  DimSize="1" MaxDimSize="1"/>
+                  </hdf5:SimpleDataspace>
+               </hdf5:Dataspace>
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:ReferenceType>
+                        <hdf5:ObjectReferenceType />
+                     </hdf5:ReferenceType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            <hdf5:Data>
+            <hdf5:DataFromFile>
+               "/Group1/Dataset\"quote"
+            </hdf5:DataFromFile>
+            </hdf5:Data>
+            </hdf5:Attribute>
+            <hdf5:Attribute Name="reftoslash">
+               <hdf5:Dataspace>
+                  <hdf5:SimpleDataspace Ndims="1">
+                     <hdf5:Dimension  DimSize="1" MaxDimSize="1"/>
+                  </hdf5:SimpleDataspace>
+               </hdf5:Dataspace>
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:ReferenceType>
+                        <hdf5:ObjectReferenceType />
+                     </hdf5:ReferenceType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            <hdf5:Data>
+            <hdf5:DataFromFile>
+               "/Group1/Dataset\\slash"
+            </hdf5:DataFromFile>
+            </hdf5:Data>
+            </hdf5:Attribute>
+            <hdf5:Attribute Name="reftoamp">
+               <hdf5:Dataspace>
+                  <hdf5:SimpleDataspace Ndims="1">
+                     <hdf5:Dimension  DimSize="1" MaxDimSize="1"/>
+                  </hdf5:SimpleDataspace>
+               </hdf5:Dataspace>
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:ReferenceType>
+                        <hdf5:ObjectReferenceType />
+                     </hdf5:ReferenceType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            <hdf5:Data>
+            <hdf5:DataFromFile>
+               "/Group1/Dataset&amp;amp"
+            </hdf5:DataFromFile>
+            </hdf5:Data>
+            </hdf5:Attribute>
+            <hdf5:Attribute Name="reftolt">
+               <hdf5:Dataspace>
+                  <hdf5:SimpleDataspace Ndims="1">
+                     <hdf5:Dimension  DimSize="1" MaxDimSize="1"/>
+                  </hdf5:SimpleDataspace>
+               </hdf5:Dataspace>
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:ReferenceType>
+                        <hdf5:ObjectReferenceType />
+                     </hdf5:ReferenceType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            <hdf5:Data>
+            <hdf5:DataFromFile>
+               "/Group1/Dataset&lt;lt"
+            </hdf5:DataFromFile>
+            </hdf5:Data>
+            </hdf5:Attribute>
+            <hdf5:Attribute Name="reftogt">
+               <hdf5:Dataspace>
+                  <hdf5:SimpleDataspace Ndims="1">
+                     <hdf5:Dimension  DimSize="1" MaxDimSize="1"/>
+                  </hdf5:SimpleDataspace>
+               </hdf5:Dataspace>
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:ReferenceType>
+                        <hdf5:ObjectReferenceType />
+                     </hdf5:ReferenceType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            <hdf5:Data>
+            <hdf5:DataFromFile>
+               "/Group1/Dataset&gt;gt"
+            </hdf5:DataFromFile>
+            </hdf5:Data>
+            </hdf5:Attribute>
+            <hdf5:Attribute Name="reftoapos">
+               <hdf5:Dataspace>
+                  <hdf5:SimpleDataspace Ndims="1">
+                     <hdf5:Dimension  DimSize="1" MaxDimSize="1"/>
+                  </hdf5:SimpleDataspace>
+               </hdf5:Dataspace>
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:ReferenceType>
+                        <hdf5:ObjectReferenceType />
+                     </hdf5:ReferenceType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            <hdf5:Data>
+            <hdf5:DataFromFile>
+               "/Group1/Dataset&apos;apos"
+            </hdf5:DataFromFile>
+            </hdf5:Data>
+            </hdf5:Attribute>
+            <hdf5:Attribute Name="reftospace">
+               <hdf5:Dataspace>
+                  <hdf5:SimpleDataspace Ndims="1">
+                     <hdf5:Dimension  DimSize="1" MaxDimSize="1"/>
+                  </hdf5:SimpleDataspace>
+               </hdf5:Dataspace>
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:ReferenceType>
+                        <hdf5:ObjectReferenceType />
+                     </hdf5:ReferenceType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            <hdf5:Data>
+            <hdf5:DataFromFile>
+               "/Group1/Dataset space"
+            </hdf5:DataFromFile>
+            </hdf5:Data>
+            </hdf5:Attribute>
+            <hdf5:Data>
+               <hdf5:DataFromFile>
+               0
+               </hdf5:DataFromFile>
+            </hdf5:Data>
+         </hdf5:Dataset>
+      </hdf5:Group>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tref-escapes.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tref-escapes.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tref-escapes.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tref-escapes.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tref-escapes.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,220 @@
+#############################
+Expected output for 'h5dump --xml tref-escapes.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Group Name="Group1" OBJ-XID="xid_1344-0" H5Path="/Group1" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="Dataset space" OBJ-XID="xid_1720-0" H5Path= "/Group1/Dataset space" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="Dataset&quot;quote" OBJ-XID="xid_2324-0" H5Path= "/Group1/Dataset&quot;quote" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="4" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 3 6 9
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="Dataset&amp;amp" OBJ-XID="xid_2612-0" H5Path= "/Group1/Dataset&amp;amp" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="Dataset&apos;apos" OBJ-XID="xid_2888-0" H5Path= "/Group1/Dataset&apos;apos" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="Dataset&lt;lt" OBJ-XID="xid_3164-0" H5Path= "/Group1/Dataset&lt;lt" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="Dataset&gt;gt" OBJ-XID="xid_3440-0" H5Path= "/Group1/Dataset&gt;gt" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="Dataset\slash" OBJ-XID="xid_3716-0" H5Path= "/Group1/Dataset\slash" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Group Name="Group1.1" OBJ-XID="xid_4592-0" H5Path="/Group1/Group1.1" Parents="xid_1344-0" H5ParentPaths="/Group1" >
+         <hdf5:Dataset Name="Datasetrefs" OBJ-XID="xid_4640-0" H5Path= "/Group1/Group1.1/Datasetrefs" Parents="xid_4592-0" H5ParentPaths="/Group1/Group1.1">
+            <hdf5:StorageLayout>
+               <hdf5:ContiguousLayout/>
+            </hdf5:StorageLayout>
+                     <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+               <hdf5:FillValue>
+                     <hdf5:NoFill/>
+               </hdf5:FillValue>
+            </hdf5:FillValueInfo>
+            <hdf5:Dataspace>
+               <hdf5:SimpleDataspace Ndims="1">
+                  <hdf5:Dimension  DimSize="7" MaxDimSize="7"/>
+               </hdf5:SimpleDataspace>
+            </hdf5:Dataspace>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:ReferenceType>
+                     <hdf5:ObjectReferenceType />
+                  </hdf5:ReferenceType>
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+         <hdf5:Data>
+         <hdf5:DataFromFile>
+            "/Group1/Dataset\"quote"
+            "/Group1/Dataset\\slash"
+            "/Group1/Dataset&amp;amp"
+            "/Group1/Dataset&lt;lt"
+            "/Group1/Dataset space"
+            "/Group1/Dataset&apos;apos"
+            "/Group1/Dataset&gt;gt"
+         </hdf5:DataFromFile>
+         </hdf5:Data>
+         </hdf5:Dataset>
+      </hdf5:Group>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tref.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tref.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tref.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tref.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tref.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,89 @@
+#############################
+Expected output for 'h5dump --xml tref.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Dataset Name="ZZZDataset3" OBJ-XID="xid_2612-0" H5Path= "/ZZZDataset3" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="3" MaxDimSize="3"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:ReferenceType>
+               <hdf5:ObjectReferenceType />
+            </hdf5:ReferenceType>
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+   <hdf5:Data>
+   <hdf5:DataFromFile>
+      "/Group1/Dataset1"
+      "/Group1/Dataset2"
+      "/Group1"
+   </hdf5:DataFromFile>
+   </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Group Name="Group1" OBJ-XID="xid_1344-0" H5Path="/Group1" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_1720-0" H5Path= "/Group1/Dataset1" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="4" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 3 6 9
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+      <hdf5:Dataset Name="Dataset2" OBJ-XID="xid_2336-0" H5Path= "/Group1/Dataset2" Parents="xid_1344-0" H5ParentPaths="/Group1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:IntegerType ByteOrder="BE" Sign="false" Size="1" />
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            0 0 0 0
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/treference.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/treference.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/treference.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,1938 @@
+#############################
+Expected output for 'h5dump tattr2.h5'
+#############################
+HDF5 "tattr2.h5" {
+GROUP "/" {
+   ATTRIBUTE "string" {
+      DATATYPE  H5T_STRING {
+            STRSIZE 2;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         }
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      DATA {
+      (0): "ab", "de"
+      }
+   }
+   ATTRIBUTE "bitfield" {
+      DATATYPE  H5T_STD_B8LE
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      DATA {
+      (0): 0x01, 0x02
+      }
+   }
+   ATTRIBUTE "opaque" {
+      DATATYPE  
+         H5T_OPAQUE;
+         OPAQUE_TAG "1-byte opaque type";
+      
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      DATA {
+      (0): 0x01, 0x02
+      }
+   }
+   ATTRIBUTE "compound" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I8LE "a";
+         H5T_IEEE_F64LE "b";
+      }
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      DATA {
+      (0): {
+            1,
+            2
+         },
+      (1): {
+            3,
+            4
+         }
+      }
+   }
+   ATTRIBUTE "enum" {
+      DATATYPE  H5T_ENUM {
+            H5T_STD_I32LE;
+            "RED"              0;
+            "GREEN"            1;
+         }
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      DATA {
+      (0): RED, RED
+      }
+   }
+   ATTRIBUTE "vlen" {
+      DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      DATA {
+      (0): (1), (2, 3)
+      }
+   }
+   ATTRIBUTE "array" {
+      DATATYPE  H5T_ARRAY { [3] H5T_STD_I32LE }
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      DATA {
+      (0): [ 1, 2, 3 ], [ 4, 5, 6 ]
+      }
+   }
+   ATTRIBUTE "integer" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      DATA {
+      (0): 1, 2
+      }
+   }
+   ATTRIBUTE "float" {
+      DATATYPE  H5T_IEEE_F32LE
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      DATA {
+      (0): 1, 2
+      }
+   }
+   ATTRIBUTE "string2D" {
+      DATATYPE  H5T_STRING {
+            STRSIZE 2;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         }
+      DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+      DATA {
+      (0,0): "ab", "cd",
+      (1,0): "ef", "gh",
+      (2,0): "ij", "kl"
+      }
+   }
+   ATTRIBUTE "bitfield2D" {
+      DATATYPE  H5T_STD_B8LE
+      DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+      DATA {
+      (0,0): 0x01, 0x02,
+      (1,0): 0x03, 0x04,
+      (2,0): 0x05, 0x06
+      }
+   }
+   ATTRIBUTE "opaque2D" {
+      DATATYPE  
+         H5T_OPAQUE;
+         OPAQUE_TAG "1-byte opaque type";
+      
+      DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+      DATA {
+      (0,0): 0x01, 0x02,
+      (1,0): 0x03, 0x04,
+      (2,0): 0x05, 0x06
+      }
+   }
+   ATTRIBUTE "compound2D" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I8LE "a";
+         H5T_IEEE_F64LE "b";
+      }
+      DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+      DATA {
+      (0,0): {
+            1,
+            2
+         },
+      (0,1): {
+            3,
+            4
+         },
+      (1,0): {
+            5,
+            6
+         },
+      (1,1): {
+            7,
+            8
+         },
+      (2,0): {
+            9,
+            10
+         },
+      (2,1): {
+            11,
+            12
+         }
+      }
+   }
+   ATTRIBUTE "enum2D" {
+      DATATYPE  H5T_ENUM {
+            H5T_STD_I32LE;
+            "RED"              0;
+            "GREEN"            1;
+         }
+      DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+      DATA {
+      (0,0): RED, RED,
+      (1,0): RED, RED,
+      (2,0): RED, RED
+      }
+   }
+   ATTRIBUTE "vlen2D" {
+      DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+      DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+      DATA {
+      (0,0): (0), (1),
+      (1,0): (2, 3), (4, 5),
+      (2,0): (6, 7, 8), (9, 10, 11)
+      }
+   }
+   ATTRIBUTE "array2D" {
+      DATATYPE  H5T_ARRAY { [3] H5T_STD_I32LE }
+      DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+      DATA {
+      (0,0): [ 1, 2, 3 ], [ 4, 5, 6 ],
+      (1,0): [ 7, 8, 9 ], [ 10, 11, 12 ],
+      (2,0): [ 13, 14, 15 ], [ 16, 17, 18 ]
+      }
+   }
+   ATTRIBUTE "integer2D" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+      DATA {
+      (0,0): 1, 2,
+      (1,0): 3, 4,
+      (2,0): 5, 6
+      }
+   }
+   ATTRIBUTE "float2D" {
+      DATATYPE  H5T_IEEE_F32LE
+      DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+      DATA {
+      (0,0): 1, 2,
+      (1,0): 3, 4,
+      (2,0): 5, 6
+      }
+   }
+   ATTRIBUTE "string3D" {
+      DATATYPE  H5T_STRING {
+            STRSIZE 2;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         }
+      DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+      DATA {
+      (0,0,0): "ab", "cd",
+      (0,1,0): "ef", "gh",
+      (0,2,0): "ij", "kl",
+      (1,0,0): "mn", "pq",
+      (1,1,0): "rs", "tu",
+      (1,2,0): "vw", "xz",
+      (2,0,0): "AB", "CD",
+      (2,1,0): "EF", "GH",
+      (2,2,0): "IJ", "KL",
+      (3,0,0): "MN", "PQ",
+      (3,1,0): "RS", "TU",
+      (3,2,0): "VW", "XZ"
+      }
+   }
+   ATTRIBUTE "bitfield3D" {
+      DATATYPE  H5T_STD_B8LE
+      DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+      DATA {
+      (0,0,0): 0x01, 0x02,
+      (0,1,0): 0x03, 0x04,
+      (0,2,0): 0x05, 0x06,
+      (1,0,0): 0x07, 0x08,
+      (1,1,0): 0x09, 0x0a,
+      (1,2,0): 0x0b, 0x0c,
+      (2,0,0): 0x0d, 0x0e,
+      (2,1,0): 0x0f, 0x10,
+      (2,2,0): 0x11, 0x12,
+      (3,0,0): 0x13, 0x14,
+      (3,1,0): 0x15, 0x16,
+      (3,2,0): 0x17, 0x18
+      }
+   }
+   ATTRIBUTE "opaque3D" {
+      DATATYPE  
+         H5T_OPAQUE;
+         OPAQUE_TAG "1-byte opaque type";
+      
+      DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+      DATA {
+      (0,0,0): 0x01, 0x02,
+      (0,1,0): 0x03, 0x04,
+      (0,2,0): 0x05, 0x06,
+      (1,0,0): 0x07, 0x08,
+      (1,1,0): 0x09, 0x0a,
+      (1,2,0): 0x0b, 0x0c,
+      (2,0,0): 0x0d, 0x0e,
+      (2,1,0): 0x0f, 0x10,
+      (2,2,0): 0x11, 0x12,
+      (3,0,0): 0x13, 0x14,
+      (3,1,0): 0x15, 0x16,
+      (3,2,0): 0x17, 0x18
+      }
+   }
+   ATTRIBUTE "compound3D" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I8LE "a";
+         H5T_IEEE_F64LE "b";
+      }
+      DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+      DATA {
+      (0,0,0): {
+            1,
+            2
+         },
+      (0,0,1): {
+            3,
+            4
+         },
+      (0,1,0): {
+            5,
+            6
+         },
+      (0,1,1): {
+            7,
+            8
+         },
+      (0,2,0): {
+            9,
+            10
+         },
+      (0,2,1): {
+            11,
+            12
+         },
+      (1,0,0): {
+            13,
+            14
+         },
+      (1,0,1): {
+            15,
+            16
+         },
+      (1,1,0): {
+            17,
+            18
+         },
+      (1,1,1): {
+            19,
+            20
+         },
+      (1,2,0): {
+            21,
+            22
+         },
+      (1,2,1): {
+            23,
+            24
+         },
+      (2,0,0): {
+            25,
+            26
+         },
+      (2,0,1): {
+            27,
+            28
+         },
+      (2,1,0): {
+            29,
+            30
+         },
+      (2,1,1): {
+            31,
+            32
+         },
+      (2,2,0): {
+            33,
+            34
+         },
+      (2,2,1): {
+            35,
+            36
+         },
+      (3,0,0): {
+            37,
+            38
+         },
+      (3,0,1): {
+            39,
+            40
+         },
+      (3,1,0): {
+            41,
+            42
+         },
+      (3,1,1): {
+            43,
+            44
+         },
+      (3,2,0): {
+            45,
+            46
+         },
+      (3,2,1): {
+            47,
+            48
+         }
+      }
+   }
+   ATTRIBUTE "enum3D" {
+      DATATYPE  H5T_ENUM {
+            H5T_STD_I32LE;
+            "RED"              0;
+            "GREEN"            1;
+         }
+      DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+      DATA {
+      (0,0,0): RED, RED,
+      (0,1,0): RED, RED,
+      (0,2,0): RED, RED,
+      (1,0,0): RED, RED,
+      (1,1,0): RED, RED,
+      (1,2,0): RED, RED,
+      (2,0,0): RED, RED,
+      (2,1,0): RED, RED,
+      (2,2,0): RED, RED,
+      (3,0,0): RED, RED,
+      (3,1,0): RED, RED,
+      (3,2,0): RED, RED
+      }
+   }
+   ATTRIBUTE "vlen3D" {
+      DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+      DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+      DATA {
+      (0,0,0): (0), (1),
+      (0,1,0): (2), (3),
+      (0,2,0): (4), (5),
+      (1,0,0): (6, 7), (8, 9),
+      (1,1,0): (10, 11), (12, 13),
+      (1,2,0): (14, 15), (16, 17),
+      (2,0,0): (18, 19, 20), (21, 22, 23),
+      (2,1,0): (24, 25, 26), (27, 28, 29),
+      (2,2,0): (30, 31, 32), (33, 34, 35),
+      (3,0,0): (36, 37, 38, 39), (40, 41, 42, 43),
+      (3,1,0): (44, 45, 46, 47), (48, 49, 50, 51),
+      (3,2,0): (52, 53, 54, 55), (56, 57, 58, 59)
+      }
+   }
+   ATTRIBUTE "array3D" {
+      DATATYPE  H5T_ARRAY { [3] H5T_STD_I32LE }
+      DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+      DATA {
+      (0,0,0): [ 1, 2, 3 ], [ 4, 5, 6 ],
+      (0,1,0): [ 7, 8, 9 ], [ 10, 11, 12 ],
+      (0,2,0): [ 13, 14, 15 ], [ 16, 17, 18 ],
+      (1,0,0): [ 19, 20, 21 ], [ 22, 23, 24 ],
+      (1,1,0): [ 25, 26, 27 ], [ 28, 29, 30 ],
+      (1,2,0): [ 31, 32, 33 ], [ 34, 35, 36 ],
+      (2,0,0): [ 37, 38, 39 ], [ 40, 41, 42 ],
+      (2,1,0): [ 43, 44, 45 ], [ 46, 47, 48 ],
+      (2,2,0): [ 49, 50, 51 ], [ 52, 53, 54 ],
+      (3,0,0): [ 55, 56, 57 ], [ 58, 59, 60 ],
+      (3,1,0): [ 61, 62, 63 ], [ 64, 65, 66 ],
+      (3,2,0): [ 67, 68, 69 ], [ 70, 71, 72 ]
+      }
+   }
+   ATTRIBUTE "integer3D" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+      DATA {
+      (0,0,0): 1, 2,
+      (0,1,0): 3, 4,
+      (0,2,0): 5, 6,
+      (1,0,0): 7, 8,
+      (1,1,0): 9, 10,
+      (1,2,0): 11, 12,
+      (2,0,0): 13, 14,
+      (2,1,0): 15, 16,
+      (2,2,0): 17, 18,
+      (3,0,0): 19, 20,
+      (3,1,0): 21, 22,
+      (3,2,0): 23, 24
+      }
+   }
+   ATTRIBUTE "float3D" {
+      DATATYPE  H5T_IEEE_F32LE
+      DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+      DATA {
+      (0,0,0): 1, 2,
+      (0,1,0): 3, 4,
+      (0,2,0): 5, 6,
+      (1,0,0): 7, 8,
+      (1,1,0): 9, 10,
+      (1,2,0): 11, 12,
+      (2,0,0): 13, 14,
+      (2,1,0): 15, 16,
+      (2,2,0): 17, 18,
+      (3,0,0): 19, 20,
+      (3,1,0): 21, 22,
+      (3,2,0): 23, 24
+      }
+   }
+   DATASET "dset" {
+      DATATYPE  H5T_STD_I32LE
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      DATA {
+      (0): 0, 0
+      }
+      ATTRIBUTE "string" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 2;
+               STRPAD H5T_STR_NULLTERM;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): "ab", "de"
+         }
+      }
+      ATTRIBUTE "bitfield" {
+         DATATYPE  H5T_STD_B8LE
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): 0x01, 0x02
+         }
+      }
+      ATTRIBUTE "opaque" {
+         DATATYPE  
+            H5T_OPAQUE;
+            OPAQUE_TAG "1-byte opaque type";
+         
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): 0x01, 0x02
+         }
+      }
+      ATTRIBUTE "compound" {
+         DATATYPE  H5T_COMPOUND {
+            H5T_STD_I8LE "a";
+            H5T_IEEE_F64LE "b";
+         }
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): {
+               1,
+               2
+            },
+         (1): {
+               3,
+               4
+            }
+         }
+      }
+      ATTRIBUTE "reference" {
+         DATATYPE  H5T_REFERENCE
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): DATASET 0:976 /dset , DATASET 0:976 /dset 
+         }
+      }
+      ATTRIBUTE "enum" {
+         DATATYPE  H5T_ENUM {
+               H5T_STD_I32LE;
+               "RED"              0;
+               "GREEN"            1;
+            }
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): RED, RED
+         }
+      }
+      ATTRIBUTE "vlen" {
+         DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): (1), (2, 3)
+         }
+      }
+      ATTRIBUTE "array" {
+         DATATYPE  H5T_ARRAY { [3] H5T_STD_I32LE }
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): [ 1, 2, 3 ], [ 4, 5, 6 ]
+         }
+      }
+      ATTRIBUTE "integer" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): 1, 2
+         }
+      }
+      ATTRIBUTE "float" {
+         DATATYPE  H5T_IEEE_F32LE
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): 1, 2
+         }
+      }
+      ATTRIBUTE "string2D" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 2;
+               STRPAD H5T_STR_NULLTERM;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): "ab", "cd",
+         (1,0): "ef", "gh",
+         (2,0): "ij", "kl"
+         }
+      }
+      ATTRIBUTE "bitfield2D" {
+         DATATYPE  H5T_STD_B8LE
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): 0x01, 0x02,
+         (1,0): 0x03, 0x04,
+         (2,0): 0x05, 0x06
+         }
+      }
+      ATTRIBUTE "opaque2D" {
+         DATATYPE  
+            H5T_OPAQUE;
+            OPAQUE_TAG "1-byte opaque type";
+         
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): 0x01, 0x02,
+         (1,0): 0x03, 0x04,
+         (2,0): 0x05, 0x06
+         }
+      }
+      ATTRIBUTE "compound2D" {
+         DATATYPE  H5T_COMPOUND {
+            H5T_STD_I8LE "a";
+            H5T_IEEE_F64LE "b";
+         }
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): {
+               1,
+               2
+            },
+         (0,1): {
+               3,
+               4
+            },
+         (1,0): {
+               5,
+               6
+            },
+         (1,1): {
+               7,
+               8
+            },
+         (2,0): {
+               9,
+               10
+            },
+         (2,1): {
+               11,
+               12
+            }
+         }
+      }
+      ATTRIBUTE "reference2D" {
+         DATATYPE  H5T_REFERENCE
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (1,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (2,0): DATASET 0:976 /dset , DATASET 0:976 /dset 
+         }
+      }
+      ATTRIBUTE "enum2D" {
+         DATATYPE  H5T_ENUM {
+               H5T_STD_I32LE;
+               "RED"              0;
+               "GREEN"            1;
+            }
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): RED, RED,
+         (1,0): RED, RED,
+         (2,0): RED, RED
+         }
+      }
+      ATTRIBUTE "vlen2D" {
+         DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): (0), (1),
+         (1,0): (2, 3), (4, 5),
+         (2,0): (6, 7, 8), (9, 10, 11)
+         }
+      }
+      ATTRIBUTE "array2D" {
+         DATATYPE  H5T_ARRAY { [3] H5T_STD_I32LE }
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): [ 1, 2, 3 ], [ 4, 5, 6 ],
+         (1,0): [ 7, 8, 9 ], [ 10, 11, 12 ],
+         (2,0): [ 13, 14, 15 ], [ 16, 17, 18 ]
+         }
+      }
+      ATTRIBUTE "integer2D" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): 1, 2,
+         (1,0): 3, 4,
+         (2,0): 5, 6
+         }
+      }
+      ATTRIBUTE "float2D" {
+         DATATYPE  H5T_IEEE_F32LE
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): 1, 2,
+         (1,0): 3, 4,
+         (2,0): 5, 6
+         }
+      }
+      ATTRIBUTE "string3D" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 2;
+               STRPAD H5T_STR_NULLTERM;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): "ab", "cd",
+         (0,1,0): "ef", "gh",
+         (0,2,0): "ij", "kl",
+         (1,0,0): "mn", "pq",
+         (1,1,0): "rs", "tu",
+         (1,2,0): "vw", "xz",
+         (2,0,0): "AB", "CD",
+         (2,1,0): "EF", "GH",
+         (2,2,0): "IJ", "KL",
+         (3,0,0): "MN", "PQ",
+         (3,1,0): "RS", "TU",
+         (3,2,0): "VW", "XZ"
+         }
+      }
+      ATTRIBUTE "bitfield3D" {
+         DATATYPE  H5T_STD_B8LE
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): 0x01, 0x02,
+         (0,1,0): 0x03, 0x04,
+         (0,2,0): 0x05, 0x06,
+         (1,0,0): 0x07, 0x08,
+         (1,1,0): 0x09, 0x0a,
+         (1,2,0): 0x0b, 0x0c,
+         (2,0,0): 0x0d, 0x0e,
+         (2,1,0): 0x0f, 0x10,
+         (2,2,0): 0x11, 0x12,
+         (3,0,0): 0x13, 0x14,
+         (3,1,0): 0x15, 0x16,
+         (3,2,0): 0x17, 0x18
+         }
+      }
+      ATTRIBUTE "opaque3D" {
+         DATATYPE  
+            H5T_OPAQUE;
+            OPAQUE_TAG "1-byte opaque type";
+         
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): 0x01, 0x02,
+         (0,1,0): 0x03, 0x04,
+         (0,2,0): 0x05, 0x06,
+         (1,0,0): 0x07, 0x08,
+         (1,1,0): 0x09, 0x0a,
+         (1,2,0): 0x0b, 0x0c,
+         (2,0,0): 0x0d, 0x0e,
+         (2,1,0): 0x0f, 0x10,
+         (2,2,0): 0x11, 0x12,
+         (3,0,0): 0x13, 0x14,
+         (3,1,0): 0x15, 0x16,
+         (3,2,0): 0x17, 0x18
+         }
+      }
+      ATTRIBUTE "compound3D" {
+         DATATYPE  H5T_COMPOUND {
+            H5T_STD_I8LE "a";
+            H5T_IEEE_F64LE "b";
+         }
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): {
+               1,
+               2
+            },
+         (0,0,1): {
+               3,
+               4
+            },
+         (0,1,0): {
+               5,
+               6
+            },
+         (0,1,1): {
+               7,
+               8
+            },
+         (0,2,0): {
+               9,
+               10
+            },
+         (0,2,1): {
+               11,
+               12
+            },
+         (1,0,0): {
+               13,
+               14
+            },
+         (1,0,1): {
+               15,
+               16
+            },
+         (1,1,0): {
+               17,
+               18
+            },
+         (1,1,1): {
+               19,
+               20
+            },
+         (1,2,0): {
+               21,
+               22
+            },
+         (1,2,1): {
+               23,
+               24
+            },
+         (2,0,0): {
+               25,
+               26
+            },
+         (2,0,1): {
+               27,
+               28
+            },
+         (2,1,0): {
+               29,
+               30
+            },
+         (2,1,1): {
+               31,
+               32
+            },
+         (2,2,0): {
+               33,
+               34
+            },
+         (2,2,1): {
+               35,
+               36
+            },
+         (3,0,0): {
+               37,
+               38
+            },
+         (3,0,1): {
+               39,
+               40
+            },
+         (3,1,0): {
+               41,
+               42
+            },
+         (3,1,1): {
+               43,
+               44
+            },
+         (3,2,0): {
+               45,
+               46
+            },
+         (3,2,1): {
+               47,
+               48
+            }
+         }
+      }
+      ATTRIBUTE "reference3D" {
+         DATATYPE  H5T_REFERENCE
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (0,1,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (0,2,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (1,0,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (1,1,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (1,2,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (2,0,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (2,1,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (2,2,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (3,0,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (3,1,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (3,2,0): DATASET 0:976 /dset , DATASET 0:976 /dset 
+         }
+      }
+      ATTRIBUTE "enum3D" {
+         DATATYPE  H5T_ENUM {
+               H5T_STD_I32LE;
+               "RED"              0;
+               "GREEN"            1;
+            }
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): RED, RED,
+         (0,1,0): RED, RED,
+         (0,2,0): RED, RED,
+         (1,0,0): RED, RED,
+         (1,1,0): RED, RED,
+         (1,2,0): RED, RED,
+         (2,0,0): RED, RED,
+         (2,1,0): RED, RED,
+         (2,2,0): RED, RED,
+         (3,0,0): RED, RED,
+         (3,1,0): RED, RED,
+         (3,2,0): RED, RED
+         }
+      }
+      ATTRIBUTE "vlen3D" {
+         DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): (0), (1),
+         (0,1,0): (2), (3),
+         (0,2,0): (4), (5),
+         (1,0,0): (6, 7), (8, 9),
+         (1,1,0): (10, 11), (12, 13),
+         (1,2,0): (14, 15), (16, 17),
+         (2,0,0): (18, 19, 20), (21, 22, 23),
+         (2,1,0): (24, 25, 26), (27, 28, 29),
+         (2,2,0): (30, 31, 32), (33, 34, 35),
+         (3,0,0): (36, 37, 38, 39), (40, 41, 42, 43),
+         (3,1,0): (44, 45, 46, 47), (48, 49, 50, 51),
+         (3,2,0): (52, 53, 54, 55), (56, 57, 58, 59)
+         }
+      }
+      ATTRIBUTE "array3D" {
+         DATATYPE  H5T_ARRAY { [3] H5T_STD_I32LE }
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): [ 1, 2, 3 ], [ 4, 5, 6 ],
+         (0,1,0): [ 7, 8, 9 ], [ 10, 11, 12 ],
+         (0,2,0): [ 13, 14, 15 ], [ 16, 17, 18 ],
+         (1,0,0): [ 19, 20, 21 ], [ 22, 23, 24 ],
+         (1,1,0): [ 25, 26, 27 ], [ 28, 29, 30 ],
+         (1,2,0): [ 31, 32, 33 ], [ 34, 35, 36 ],
+         (2,0,0): [ 37, 38, 39 ], [ 40, 41, 42 ],
+         (2,1,0): [ 43, 44, 45 ], [ 46, 47, 48 ],
+         (2,2,0): [ 49, 50, 51 ], [ 52, 53, 54 ],
+         (3,0,0): [ 55, 56, 57 ], [ 58, 59, 60 ],
+         (3,1,0): [ 61, 62, 63 ], [ 64, 65, 66 ],
+         (3,2,0): [ 67, 68, 69 ], [ 70, 71, 72 ]
+         }
+      }
+      ATTRIBUTE "integer3D" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): 1, 2,
+         (0,1,0): 3, 4,
+         (0,2,0): 5, 6,
+         (1,0,0): 7, 8,
+         (1,1,0): 9, 10,
+         (1,2,0): 11, 12,
+         (2,0,0): 13, 14,
+         (2,1,0): 15, 16,
+         (2,2,0): 17, 18,
+         (3,0,0): 19, 20,
+         (3,1,0): 21, 22,
+         (3,2,0): 23, 24
+         }
+      }
+      ATTRIBUTE "float3D" {
+         DATATYPE  H5T_IEEE_F32LE
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): 1, 2,
+         (0,1,0): 3, 4,
+         (0,2,0): 5, 6,
+         (1,0,0): 7, 8,
+         (1,1,0): 9, 10,
+         (1,2,0): 11, 12,
+         (2,0,0): 13, 14,
+         (2,1,0): 15, 16,
+         (2,2,0): 17, 18,
+         (3,0,0): 19, 20,
+         (3,1,0): 21, 22,
+         (3,2,0): 23, 24
+         }
+      }
+   }
+   GROUP "g1" {
+      ATTRIBUTE "string" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 2;
+               STRPAD H5T_STR_NULLTERM;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): "ab", "de"
+         }
+      }
+      ATTRIBUTE "bitfield" {
+         DATATYPE  H5T_STD_B8LE
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): 0x01, 0x02
+         }
+      }
+      ATTRIBUTE "opaque" {
+         DATATYPE  
+            H5T_OPAQUE;
+            OPAQUE_TAG "1-byte opaque type";
+         
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): 0x01, 0x02
+         }
+      }
+      ATTRIBUTE "compound" {
+         DATATYPE  H5T_COMPOUND {
+            H5T_STD_I8LE "a";
+            H5T_IEEE_F64LE "b";
+         }
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): {
+               1,
+               2
+            },
+         (1): {
+               3,
+               4
+            }
+         }
+      }
+      ATTRIBUTE "enum" {
+         DATATYPE  H5T_ENUM {
+               H5T_STD_I32LE;
+               "RED"              0;
+               "GREEN"            1;
+            }
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): RED, RED
+         }
+      }
+      ATTRIBUTE "vlen" {
+         DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): (1), (2, 3)
+         }
+      }
+      ATTRIBUTE "array" {
+         DATATYPE  H5T_ARRAY { [3] H5T_STD_I32LE }
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): [ 1, 2, 3 ], [ 4, 5, 6 ]
+         }
+      }
+      ATTRIBUTE "integer" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): 1, 2
+         }
+      }
+      ATTRIBUTE "float" {
+         DATATYPE  H5T_IEEE_F32LE
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): 1, 2
+         }
+      }
+      ATTRIBUTE "string2D" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 2;
+               STRPAD H5T_STR_NULLTERM;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): "ab", "cd",
+         (1,0): "ef", "gh",
+         (2,0): "ij", "kl"
+         }
+      }
+      ATTRIBUTE "bitfield2D" {
+         DATATYPE  H5T_STD_B8LE
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): 0x01, 0x02,
+         (1,0): 0x03, 0x04,
+         (2,0): 0x05, 0x06
+         }
+      }
+      ATTRIBUTE "opaque2D" {
+         DATATYPE  
+            H5T_OPAQUE;
+            OPAQUE_TAG "1-byte opaque type";
+         
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): 0x01, 0x02,
+         (1,0): 0x03, 0x04,
+         (2,0): 0x05, 0x06
+         }
+      }
+      ATTRIBUTE "compound2D" {
+         DATATYPE  H5T_COMPOUND {
+            H5T_STD_I8LE "a";
+            H5T_IEEE_F64LE "b";
+         }
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): {
+               1,
+               2
+            },
+         (0,1): {
+               3,
+               4
+            },
+         (1,0): {
+               5,
+               6
+            },
+         (1,1): {
+               7,
+               8
+            },
+         (2,0): {
+               9,
+               10
+            },
+         (2,1): {
+               11,
+               12
+            }
+         }
+      }
+      ATTRIBUTE "enum2D" {
+         DATATYPE  H5T_ENUM {
+               H5T_STD_I32LE;
+               "RED"              0;
+               "GREEN"            1;
+            }
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): RED, RED,
+         (1,0): RED, RED,
+         (2,0): RED, RED
+         }
+      }
+      ATTRIBUTE "vlen2D" {
+         DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): (0), (1),
+         (1,0): (2, 3), (4, 5),
+         (2,0): (6, 7, 8), (9, 10, 11)
+         }
+      }
+      ATTRIBUTE "array2D" {
+         DATATYPE  H5T_ARRAY { [3] H5T_STD_I32LE }
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): [ 1, 2, 3 ], [ 4, 5, 6 ],
+         (1,0): [ 7, 8, 9 ], [ 10, 11, 12 ],
+         (2,0): [ 13, 14, 15 ], [ 16, 17, 18 ]
+         }
+      }
+      ATTRIBUTE "integer2D" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): 1, 2,
+         (1,0): 3, 4,
+         (2,0): 5, 6
+         }
+      }
+      ATTRIBUTE "float2D" {
+         DATATYPE  H5T_IEEE_F32LE
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): 1, 2,
+         (1,0): 3, 4,
+         (2,0): 5, 6
+         }
+      }
+      ATTRIBUTE "string3D" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 2;
+               STRPAD H5T_STR_NULLTERM;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): "ab", "cd",
+         (0,1,0): "ef", "gh",
+         (0,2,0): "ij", "kl",
+         (1,0,0): "mn", "pq",
+         (1,1,0): "rs", "tu",
+         (1,2,0): "vw", "xz",
+         (2,0,0): "AB", "CD",
+         (2,1,0): "EF", "GH",
+         (2,2,0): "IJ", "KL",
+         (3,0,0): "MN", "PQ",
+         (3,1,0): "RS", "TU",
+         (3,2,0): "VW", "XZ"
+         }
+      }
+      ATTRIBUTE "bitfield3D" {
+         DATATYPE  H5T_STD_B8LE
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): 0x01, 0x02,
+         (0,1,0): 0x03, 0x04,
+         (0,2,0): 0x05, 0x06,
+         (1,0,0): 0x07, 0x08,
+         (1,1,0): 0x09, 0x0a,
+         (1,2,0): 0x0b, 0x0c,
+         (2,0,0): 0x0d, 0x0e,
+         (2,1,0): 0x0f, 0x10,
+         (2,2,0): 0x11, 0x12,
+         (3,0,0): 0x13, 0x14,
+         (3,1,0): 0x15, 0x16,
+         (3,2,0): 0x17, 0x18
+         }
+      }
+      ATTRIBUTE "opaque3D" {
+         DATATYPE  
+            H5T_OPAQUE;
+            OPAQUE_TAG "1-byte opaque type";
+         
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): 0x01, 0x02,
+         (0,1,0): 0x03, 0x04,
+         (0,2,0): 0x05, 0x06,
+         (1,0,0): 0x07, 0x08,
+         (1,1,0): 0x09, 0x0a,
+         (1,2,0): 0x0b, 0x0c,
+         (2,0,0): 0x0d, 0x0e,
+         (2,1,0): 0x0f, 0x10,
+         (2,2,0): 0x11, 0x12,
+         (3,0,0): 0x13, 0x14,
+         (3,1,0): 0x15, 0x16,
+         (3,2,0): 0x17, 0x18
+         }
+      }
+      ATTRIBUTE "compound3D" {
+         DATATYPE  H5T_COMPOUND {
+            H5T_STD_I8LE "a";
+            H5T_IEEE_F64LE "b";
+         }
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): {
+               1,
+               2
+            },
+         (0,0,1): {
+               3,
+               4
+            },
+         (0,1,0): {
+               5,
+               6
+            },
+         (0,1,1): {
+               7,
+               8
+            },
+         (0,2,0): {
+               9,
+               10
+            },
+         (0,2,1): {
+               11,
+               12
+            },
+         (1,0,0): {
+               13,
+               14
+            },
+         (1,0,1): {
+               15,
+               16
+            },
+         (1,1,0): {
+               17,
+               18
+            },
+         (1,1,1): {
+               19,
+               20
+            },
+         (1,2,0): {
+               21,
+               22
+            },
+         (1,2,1): {
+               23,
+               24
+            },
+         (2,0,0): {
+               25,
+               26
+            },
+         (2,0,1): {
+               27,
+               28
+            },
+         (2,1,0): {
+               29,
+               30
+            },
+         (2,1,1): {
+               31,
+               32
+            },
+         (2,2,0): {
+               33,
+               34
+            },
+         (2,2,1): {
+               35,
+               36
+            },
+         (3,0,0): {
+               37,
+               38
+            },
+         (3,0,1): {
+               39,
+               40
+            },
+         (3,1,0): {
+               41,
+               42
+            },
+         (3,1,1): {
+               43,
+               44
+            },
+         (3,2,0): {
+               45,
+               46
+            },
+         (3,2,1): {
+               47,
+               48
+            }
+         }
+      }
+      ATTRIBUTE "enum3D" {
+         DATATYPE  H5T_ENUM {
+               H5T_STD_I32LE;
+               "RED"              0;
+               "GREEN"            1;
+            }
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): RED, RED,
+         (0,1,0): RED, RED,
+         (0,2,0): RED, RED,
+         (1,0,0): RED, RED,
+         (1,1,0): RED, RED,
+         (1,2,0): RED, RED,
+         (2,0,0): RED, RED,
+         (2,1,0): RED, RED,
+         (2,2,0): RED, RED,
+         (3,0,0): RED, RED,
+         (3,1,0): RED, RED,
+         (3,2,0): RED, RED
+         }
+      }
+      ATTRIBUTE "vlen3D" {
+         DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): (0), (1),
+         (0,1,0): (2), (3),
+         (0,2,0): (4), (5),
+         (1,0,0): (6, 7), (8, 9),
+         (1,1,0): (10, 11), (12, 13),
+         (1,2,0): (14, 15), (16, 17),
+         (2,0,0): (18, 19, 20), (21, 22, 23),
+         (2,1,0): (24, 25, 26), (27, 28, 29),
+         (2,2,0): (30, 31, 32), (33, 34, 35),
+         (3,0,0): (36, 37, 38, 39), (40, 41, 42, 43),
+         (3,1,0): (44, 45, 46, 47), (48, 49, 50, 51),
+         (3,2,0): (52, 53, 54, 55), (56, 57, 58, 59)
+         }
+      }
+      ATTRIBUTE "array3D" {
+         DATATYPE  H5T_ARRAY { [3] H5T_STD_I32LE }
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): [ 1, 2, 3 ], [ 4, 5, 6 ],
+         (0,1,0): [ 7, 8, 9 ], [ 10, 11, 12 ],
+         (0,2,0): [ 13, 14, 15 ], [ 16, 17, 18 ],
+         (1,0,0): [ 19, 20, 21 ], [ 22, 23, 24 ],
+         (1,1,0): [ 25, 26, 27 ], [ 28, 29, 30 ],
+         (1,2,0): [ 31, 32, 33 ], [ 34, 35, 36 ],
+         (2,0,0): [ 37, 38, 39 ], [ 40, 41, 42 ],
+         (2,1,0): [ 43, 44, 45 ], [ 46, 47, 48 ],
+         (2,2,0): [ 49, 50, 51 ], [ 52, 53, 54 ],
+         (3,0,0): [ 55, 56, 57 ], [ 58, 59, 60 ],
+         (3,1,0): [ 61, 62, 63 ], [ 64, 65, 66 ],
+         (3,2,0): [ 67, 68, 69 ], [ 70, 71, 72 ]
+         }
+      }
+      ATTRIBUTE "integer3D" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): 1, 2,
+         (0,1,0): 3, 4,
+         (0,2,0): 5, 6,
+         (1,0,0): 7, 8,
+         (1,1,0): 9, 10,
+         (1,2,0): 11, 12,
+         (2,0,0): 13, 14,
+         (2,1,0): 15, 16,
+         (2,2,0): 17, 18,
+         (3,0,0): 19, 20,
+         (3,1,0): 21, 22,
+         (3,2,0): 23, 24
+         }
+      }
+      ATTRIBUTE "float3D" {
+         DATATYPE  H5T_IEEE_F32LE
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): 1, 2,
+         (0,1,0): 3, 4,
+         (0,2,0): 5, 6,
+         (1,0,0): 7, 8,
+         (1,1,0): 9, 10,
+         (1,2,0): 11, 12,
+         (2,0,0): 13, 14,
+         (2,1,0): 15, 16,
+         (2,2,0): 17, 18,
+         (3,0,0): 19, 20,
+         (3,1,0): 21, 22,
+         (3,2,0): 23, 24
+         }
+      }
+   }
+   GROUP "g2" {
+      DATASET "array" {
+         DATATYPE  H5T_ARRAY { [3] H5T_STD_I32LE }
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): [ 1, 2, 3 ], [ 4, 5, 6 ]
+         }
+      }
+      DATASET "array2D" {
+         DATATYPE  H5T_ARRAY { [3] H5T_STD_I32LE }
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): [ 1, 2, 3 ], [ 4, 5, 6 ],
+         (1,0): [ 7, 8, 9 ], [ 10, 11, 12 ],
+         (2,0): [ 13, 14, 15 ], [ 16, 17, 18 ]
+         }
+      }
+      DATASET "array3D" {
+         DATATYPE  H5T_ARRAY { [3] H5T_STD_I32LE }
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): [ 1, 2, 3 ], [ 4, 5, 6 ],
+         (0,1,0): [ 7, 8, 9 ], [ 10, 11, 12 ],
+         (0,2,0): [ 13, 14, 15 ], [ 16, 17, 18 ],
+         (1,0,0): [ 19, 20, 21 ], [ 22, 23, 24 ],
+         (1,1,0): [ 25, 26, 27 ], [ 28, 29, 30 ],
+         (1,2,0): [ 31, 32, 33 ], [ 34, 35, 36 ],
+         (2,0,0): [ 37, 38, 39 ], [ 40, 41, 42 ],
+         (2,1,0): [ 43, 44, 45 ], [ 46, 47, 48 ],
+         (2,2,0): [ 49, 50, 51 ], [ 52, 53, 54 ],
+         (3,0,0): [ 55, 56, 57 ], [ 58, 59, 60 ],
+         (3,1,0): [ 61, 62, 63 ], [ 64, 65, 66 ],
+         (3,2,0): [ 67, 68, 69 ], [ 70, 71, 72 ]
+         }
+      }
+      DATASET "bitfield" {
+         DATATYPE  H5T_STD_B8LE
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): 0x01, 0x02
+         }
+      }
+      DATASET "bitfield2D" {
+         DATATYPE  H5T_STD_B8LE
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): 0x01, 0x02,
+         (1,0): 0x03, 0x04,
+         (2,0): 0x05, 0x06
+         }
+      }
+      DATASET "bitfield3D" {
+         DATATYPE  H5T_STD_B8LE
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): 0x01, 0x02,
+         (0,1,0): 0x03, 0x04,
+         (0,2,0): 0x05, 0x06,
+         (1,0,0): 0x07, 0x08,
+         (1,1,0): 0x09, 0x0a,
+         (1,2,0): 0x0b, 0x0c,
+         (2,0,0): 0x0d, 0x0e,
+         (2,1,0): 0x0f, 0x10,
+         (2,2,0): 0x11, 0x12,
+         (3,0,0): 0x13, 0x14,
+         (3,1,0): 0x15, 0x16,
+         (3,2,0): 0x17, 0x18
+         }
+      }
+      DATASET "compound" {
+         DATATYPE  H5T_COMPOUND {
+            H5T_STD_I8LE "a";
+            H5T_IEEE_F64LE "b";
+         }
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): {
+               1,
+               2
+            },
+         (1): {
+               3,
+               4
+            }
+         }
+      }
+      DATASET "compound2D" {
+         DATATYPE  H5T_COMPOUND {
+            H5T_STD_I8LE "a";
+            H5T_IEEE_F64LE "b";
+         }
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): {
+               1,
+               2
+            },
+         (0,1): {
+               3,
+               4
+            },
+         (1,0): {
+               5,
+               6
+            },
+         (1,1): {
+               7,
+               8
+            },
+         (2,0): {
+               9,
+               10
+            },
+         (2,1): {
+               11,
+               12
+            }
+         }
+      }
+      DATASET "compound3D" {
+         DATATYPE  H5T_COMPOUND {
+            H5T_STD_I8LE "a";
+            H5T_IEEE_F64LE "b";
+         }
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): {
+               1,
+               2
+            },
+         (0,0,1): {
+               3,
+               4
+            },
+         (0,1,0): {
+               5,
+               6
+            },
+         (0,1,1): {
+               7,
+               8
+            },
+         (0,2,0): {
+               9,
+               10
+            },
+         (0,2,1): {
+               11,
+               12
+            },
+         (1,0,0): {
+               13,
+               14
+            },
+         (1,0,1): {
+               15,
+               16
+            },
+         (1,1,0): {
+               17,
+               18
+            },
+         (1,1,1): {
+               19,
+               20
+            },
+         (1,2,0): {
+               21,
+               22
+            },
+         (1,2,1): {
+               23,
+               24
+            },
+         (2,0,0): {
+               25,
+               26
+            },
+         (2,0,1): {
+               27,
+               28
+            },
+         (2,1,0): {
+               29,
+               30
+            },
+         (2,1,1): {
+               31,
+               32
+            },
+         (2,2,0): {
+               33,
+               34
+            },
+         (2,2,1): {
+               35,
+               36
+            },
+         (3,0,0): {
+               37,
+               38
+            },
+         (3,0,1): {
+               39,
+               40
+            },
+         (3,1,0): {
+               41,
+               42
+            },
+         (3,1,1): {
+               43,
+               44
+            },
+         (3,2,0): {
+               45,
+               46
+            },
+         (3,2,1): {
+               47,
+               48
+            }
+         }
+      }
+      DATASET "enum" {
+         DATATYPE  H5T_ENUM {
+               H5T_STD_I32LE;
+               "RED"              0;
+               "GREEN"            1;
+            }
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): RED, RED
+         }
+      }
+      DATASET "enum2D" {
+         DATATYPE  H5T_ENUM {
+               H5T_STD_I32LE;
+               "RED"              0;
+               "GREEN"            1;
+            }
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): RED, RED,
+         (1,0): RED, RED,
+         (2,0): RED, RED
+         }
+      }
+      DATASET "enum3D" {
+         DATATYPE  H5T_ENUM {
+               H5T_STD_I32LE;
+               "RED"              0;
+               "GREEN"            1;
+            }
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): RED, RED,
+         (0,1,0): RED, RED,
+         (0,2,0): RED, RED,
+         (1,0,0): RED, RED,
+         (1,1,0): RED, RED,
+         (1,2,0): RED, RED,
+         (2,0,0): RED, RED,
+         (2,1,0): RED, RED,
+         (2,2,0): RED, RED,
+         (3,0,0): RED, RED,
+         (3,1,0): RED, RED,
+         (3,2,0): RED, RED
+         }
+      }
+      DATASET "float" {
+         DATATYPE  H5T_IEEE_F32LE
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): 1, 2
+         }
+      }
+      DATASET "float2D" {
+         DATATYPE  H5T_IEEE_F32LE
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): 1, 2,
+         (1,0): 3, 4,
+         (2,0): 5, 6
+         }
+      }
+      DATASET "float3D" {
+         DATATYPE  H5T_IEEE_F32LE
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): 1, 2,
+         (0,1,0): 3, 4,
+         (0,2,0): 5, 6,
+         (1,0,0): 7, 8,
+         (1,1,0): 9, 10,
+         (1,2,0): 11, 12,
+         (2,0,0): 13, 14,
+         (2,1,0): 15, 16,
+         (2,2,0): 17, 18,
+         (3,0,0): 19, 20,
+         (3,1,0): 21, 22,
+         (3,2,0): 23, 24
+         }
+      }
+      DATASET "integer" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): 1, 2
+         }
+      }
+      DATASET "integer2D" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): 1, 2,
+         (1,0): 3, 4,
+         (2,0): 5, 6
+         }
+      }
+      DATASET "integer3D" {
+         DATATYPE  H5T_STD_I32LE
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): 1, 2,
+         (0,1,0): 3, 4,
+         (0,2,0): 5, 6,
+         (1,0,0): 7, 8,
+         (1,1,0): 9, 10,
+         (1,2,0): 11, 12,
+         (2,0,0): 13, 14,
+         (2,1,0): 15, 16,
+         (2,2,0): 17, 18,
+         (3,0,0): 19, 20,
+         (3,1,0): 21, 22,
+         (3,2,0): 23, 24
+         }
+      }
+      DATASET "opaque" {
+         DATATYPE  
+            H5T_OPAQUE;
+            OPAQUE_TAG "1-byte opaque type";
+         
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): 0x01, 0x02
+         }
+      }
+      DATASET "opaque2D" {
+         DATATYPE  
+            H5T_OPAQUE;
+            OPAQUE_TAG "1-byte opaque type";
+         
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): 0x01, 0x02,
+         (1,0): 0x03, 0x04,
+         (2,0): 0x05, 0x06
+         }
+      }
+      DATASET "opaque3D" {
+         DATATYPE  
+            H5T_OPAQUE;
+            OPAQUE_TAG "1-byte opaque type";
+         
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): 0x01, 0x02,
+         (0,1,0): 0x03, 0x04,
+         (0,2,0): 0x05, 0x06,
+         (1,0,0): 0x07, 0x08,
+         (1,1,0): 0x09, 0x0a,
+         (1,2,0): 0x0b, 0x0c,
+         (2,0,0): 0x0d, 0x0e,
+         (2,1,0): 0x0f, 0x10,
+         (2,2,0): 0x11, 0x12,
+         (3,0,0): 0x13, 0x14,
+         (3,1,0): 0x15, 0x16,
+         (3,2,0): 0x17, 0x18
+         }
+      }
+      DATASET "reference" {
+         DATATYPE  H5T_REFERENCE
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): DATASET 0:976 /dset , DATASET 0:976 /dset 
+         }
+      }
+      DATASET "reference2D" {
+         DATATYPE  H5T_REFERENCE
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (1,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (2,0): DATASET 0:976 /dset , DATASET 0:976 /dset 
+         }
+      }
+      DATASET "reference3D" {
+         DATATYPE  H5T_REFERENCE
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (0,1,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (0,2,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (1,0,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (1,1,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (1,2,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (2,0,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (2,1,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (2,2,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (3,0,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (3,1,0): DATASET 0:976 /dset , DATASET 0:976 /dset ,
+         (3,2,0): DATASET 0:976 /dset , DATASET 0:976 /dset 
+         }
+      }
+      DATASET "string" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 2;
+               STRPAD H5T_STR_NULLTERM;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): "ab", "de"
+         }
+      }
+      DATASET "string2D" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 2;
+               STRPAD H5T_STR_NULLTERM;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): "ab", "cd",
+         (1,0): "ef", "gh",
+         (2,0): "ij", "kl"
+         }
+      }
+      DATASET "string3D" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 2;
+               STRPAD H5T_STR_NULLTERM;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): "ab", "cd",
+         (0,1,0): "ef", "gh",
+         (0,2,0): "ij", "kl",
+         (1,0,0): "mn", "pq",
+         (1,1,0): "rs", "tu",
+         (1,2,0): "vw", "xz",
+         (2,0,0): "AB", "CD",
+         (2,1,0): "EF", "GH",
+         (2,2,0): "IJ", "KL",
+         (3,0,0): "MN", "PQ",
+         (3,1,0): "RS", "TU",
+         (3,2,0): "VW", "XZ"
+         }
+      }
+      DATASET "vlen" {
+         DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+         DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+         DATA {
+         (0): (1), (2, 3)
+         }
+      }
+      DATASET "vlen2D" {
+         DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+         DATASPACE  SIMPLE { ( 3, 2 ) / ( 3, 2 ) }
+         DATA {
+         (0,0): (0), (1),
+         (1,0): (2, 3), (4, 5),
+         (2,0): (6, 7, 8), (9, 10, 11)
+         }
+      }
+      DATASET "vlen3D" {
+         DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+         DATASPACE  SIMPLE { ( 4, 3, 2 ) / ( 4, 3, 2 ) }
+         DATA {
+         (0,0,0): (0), (1),
+         (0,1,0): (2), (3),
+         (0,2,0): (4), (5),
+         (1,0,0): (6, 7), (8, 9),
+         (1,1,0): (10, 11), (12, 13),
+         (1,2,0): (14, 15), (16, 17),
+         (2,0,0): (18, 19, 20), (21, 22, 23),
+         (2,1,0): (24, 25, 26), (27, 28, 29),
+         (2,2,0): (30, 31, 32), (33, 34, 35),
+         (3,0,0): (36, 37, 38, 39), (40, 41, 42, 43),
+         (3,1,0): (44, 45, 46, 47), (48, 49, 50, 51),
+         (3,2,0): (52, 53, 54, 55), (56, 57, 58, 59)
+         }
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2754 @@
+#############################
+Expected output for 'h5dump tsaf.h5'
+#############################
+HDF5 "tsaf.h5" {
+GROUP "/" {
+   DATASET ".DSL_METADATA" {
+      DATATYPE  H5T_STD_U8LE
+      DATASPACE  SIMPLE { ( 5919 ) / ( H5S_UNLIMITED ) }
+      DATA {
+      (0): 47, 32, 67, 79, 78, 84, 65, 73, 78, 69, 82, 10, 47, 46, 97, 116,
+      (16): 116, 114, 105, 98, 117, 116, 101, 115, 32, 67, 79, 78, 84, 65,
+      (30): 73, 78, 69, 82, 10, 47, 46, 97, 116, 116, 114, 105, 98, 117, 116,
+      (45): 101, 115, 47, 100, 97, 116, 97, 98, 97, 115, 101, 32, 67, 79, 78,
+      (60): 84, 65, 73, 78, 69, 82, 10, 47, 46, 97, 116, 116, 114, 105, 98,
+      (75): 117, 116, 101, 115, 47, 100, 97, 116, 97, 98, 97, 115, 101, 47,
+      (89): 46, 83, 65, 70, 95, 68, 98, 80, 114, 111, 112, 115, 32, 68, 65,
+      (104): 84, 65, 83, 69, 84, 32, 115, 116, 114, 117, 99, 116, 32, 83, 65,
+      (119): 70, 95, 68, 98, 80, 114, 111, 112, 115, 123, 105, 110, 116, 32,
+      (133): 109, 97, 103, 105, 99, 59, 99, 104, 97, 114, 32, 83, 70, 105,
+      (147): 108, 101, 68, 105, 114, 91, 49, 48, 50, 52, 93, 59, 99, 104, 97,
+      (162): 114, 32, 73, 109, 112, 111, 114, 116, 70, 105, 108, 101, 91, 49,
+      (176): 48, 50, 52, 93, 59, 105, 110, 116, 32, 112, 97, 114, 97, 108,
+      (190): 108, 101, 108, 59, 115, 116, 114, 117, 99, 116, 32, 83, 65, 70,
+      (204): 95, 86, 101, 114, 115, 105, 111, 110, 73, 110, 102, 111, 123,
+      (217): 105, 110, 116, 32, 118, 109, 97, 106, 111, 114, 59, 105, 110,
+      (230): 116, 32, 118, 109, 105, 110, 111, 114, 59, 105, 110, 116, 32,
+      (243): 114, 101, 108, 59, 99, 104, 97, 114, 32, 97, 110, 110, 111, 116,
+      (257): 91, 49, 48, 93, 59, 125, 115, 97, 102, 97, 112, 105, 59, 115,
+      (271): 116, 114, 117, 99, 116, 32, 83, 65, 70, 95, 86, 101, 114, 115,
+      (285): 105, 111, 110, 73, 110, 102, 111, 123, 105, 110, 116, 32, 118,
+      (298): 109, 97, 106, 111, 114, 59, 105, 110, 116, 32, 118, 109, 105,
+      (311): 110, 111, 114, 59, 105, 110, 116, 32, 114, 101, 108, 59, 99,
+      (324): 104, 97, 114, 32, 97, 110, 110, 111, 116, 91, 49, 48, 93, 59,
+      (338): 125, 115, 97, 102, 108, 105, 98, 59, 115, 116, 114, 117, 99,
+      (351): 116, 32, 83, 65, 70, 95, 86, 101, 114, 115, 105, 111, 110, 73,
+      (365): 110, 102, 111, 123, 105, 110, 116, 32, 118, 109, 97, 106, 111,
+      (378): 114, 59, 105, 110, 116, 32, 118, 109, 105, 110, 111, 114, 59,
+      (391): 105, 110, 116, 32, 114, 101, 108, 59, 99, 104, 97, 114, 32, 97,
+      (405): 110, 110, 111, 116, 91, 49, 48, 93, 59, 125, 118, 98, 116, 59,
+      (419): 115, 116, 114, 117, 99, 116, 32, 83, 65, 70, 95, 86, 101, 114,
+      (433): 115, 105, 111, 110, 73, 110, 102, 111, 123, 105, 110, 116, 32,
+      (446): 118, 109, 97, 106, 111, 114, 59, 105, 110, 116, 32, 118, 109,
+      (459): 105, 110, 111, 114, 59, 105, 110, 116, 32, 114, 101, 108, 59,
+      (472): 99, 104, 97, 114, 32, 97, 110, 110, 111, 116, 91, 49, 48, 93,
+      (486): 59, 125, 100, 115, 108, 59, 115, 116, 114, 117, 99, 116, 32, 83,
+      (500): 65, 70, 95, 86, 101, 114, 115, 105, 111, 110, 73, 110, 102, 111,
+      (514): 123, 105, 110, 116, 32, 118, 109, 97, 106, 111, 114, 59, 105,
+      (527): 110, 116, 32, 118, 109, 105, 110, 111, 114, 59, 105, 110, 116,
+      (540): 32, 114, 101, 108, 59, 99, 104, 97, 114, 32, 97, 110, 110, 111,
+      (554): 116, 91, 49, 48, 93, 59, 125, 104, 100, 102, 53, 59, 115, 116,
+      (568): 114, 117, 99, 116, 32, 83, 65, 70, 95, 86, 101, 114, 115, 105,
+      (582): 111, 110, 73, 110, 102, 111, 123, 105, 110, 116, 32, 118, 109,
+      (595): 97, 106, 111, 114, 59, 105, 110, 116, 32, 118, 109, 105, 110,
+      (608): 111, 114, 59, 105, 110, 116, 32, 114, 101, 108, 59, 99, 104, 97,
+      (622): 114, 32, 97, 110, 110, 111, 116, 91, 49, 48, 93, 59, 125, 109,
+      (636): 112, 105, 59, 105, 110, 116, 32, 68, 111, 84, 111, 99, 59, 105,
+      (650): 110, 116, 32, 82, 101, 97, 100, 79, 110, 108, 121, 59, 105, 110,
+      (664): 116, 32, 67, 108, 111, 98, 98, 101, 114, 59, 105, 110, 116, 32,
+      (678): 79, 83, 77, 111, 100, 101, 115, 59, 125, 59, 10, 47, 115, 115,
+      (692): 114, 101, 108, 45, 95, 48, 48, 48, 48, 32, 68, 65, 84, 65, 83,
+      (707): 69, 84, 32, 105, 110, 116, 59, 10, 47, 115, 115, 114, 101, 108,
+      (721): 45, 95, 48, 48, 48, 49, 32, 68, 65, 84, 65, 83, 69, 84, 32, 105,
+      (737): 110, 116, 59, 10, 47, 115, 115, 114, 101, 108, 45, 95, 48, 48,
+      (751): 48, 50, 32, 68, 65, 84, 65, 83, 69, 84, 32, 105, 110, 116, 59,
+      (766): 10, 47, 115, 115, 114, 101, 108, 45, 95, 48, 48, 48, 51, 32, 68,
+      (781): 65, 84, 65, 83, 69, 84, 32, 105, 110, 116, 59, 10, 47, 115, 115,
+      (796): 114, 101, 108, 45, 95, 48, 48, 48, 52, 32, 68, 65, 84, 65, 83,
+      (811): 69, 84, 32, 105, 110, 116, 59, 10, 47, 115, 115, 114, 101, 108,
+      (825): 45, 95, 48, 48, 48, 53, 32, 68, 65, 84, 65, 83, 69, 84, 32, 105,
+      (841): 110, 116, 59, 10, 47, 115, 115, 114, 101, 108, 45, 95, 48, 48,
+      (855): 48, 54, 32, 68, 65, 84, 65, 83, 69, 84, 32, 105, 110, 116, 59,
+      (870): 10, 47, 115, 115, 114, 101, 108, 45, 95, 48, 48, 48, 55, 32, 68,
+      (885): 65, 84, 65, 83, 69, 84, 32, 105, 110, 116, 59, 10, 47, 115, 115,
+      (900): 114, 101, 108, 45, 95, 48, 48, 48, 56, 32, 68, 65, 84, 65, 83,
+      (915): 69, 84, 32, 105, 110, 116, 59, 10, 47, 115, 115, 114, 101, 108,
+      (929): 45, 95, 48, 48, 48, 57, 32, 68, 65, 84, 65, 83, 69, 84, 32, 105,
+      (945): 110, 116, 59, 10, 47, 115, 115, 114, 101, 108, 45, 95, 48, 48,
+      (959): 49, 48, 32, 68, 65, 84, 65, 83, 69, 84, 32, 105, 110, 116, 59,
+      (974): 10, 47, 115, 115, 114, 101, 108, 45, 95, 48, 48, 49, 49, 32, 68,
+      (989): 65, 84, 65, 83, 69, 84, 32, 105, 110, 116, 59, 10, 47, 115, 115,
+      (1004): 114, 101, 108, 45, 95, 48, 48, 49, 50, 32, 68, 65, 84, 65, 83,
+      (1019): 69, 84, 32, 105, 110, 116, 59, 10, 47, 116, 111, 112, 111, 114,
+      (1033): 101, 108, 45, 95, 48, 48, 49, 55, 32, 68, 65, 84, 65, 83, 69,
+      (1048): 84, 32, 105, 110, 116, 59, 10, 47, 116, 111, 112, 111, 114,
+      (1061): 101, 108, 45, 95, 48, 48, 49, 56, 32, 68, 65, 84, 65, 83, 69,
+      (1076): 84, 32, 105, 110, 116, 59, 10, 47, 116, 111, 112, 111, 114,
+      (1089): 101, 108, 45, 95, 48, 48, 49, 57, 32, 68, 65, 84, 65, 83, 69,
+      (1104): 84, 32, 105, 110, 116, 59, 10, 47, 116, 111, 112, 111, 114,
+      (1117): 101, 108, 45, 95, 48, 48, 50, 48, 32, 68, 65, 84, 65, 83, 69,
+      (1132): 84, 32, 105, 110, 116, 59, 10, 47, 102, 105, 101, 108, 100, 45,
+      (1146): 99, 111, 111, 114, 100, 115, 95, 48, 48, 48, 50, 32, 68, 65,
+      (1160): 84, 65, 83, 69, 84, 32, 102, 108, 111, 97, 116, 59, 10, 47,
+      (1174): 102, 105, 101, 108, 100, 45, 100, 105, 115, 116, 114, 105, 98,
+      (1187): 117, 116, 105, 111, 110, 95, 102, 97, 99, 116, 111, 114, 115,
+      (1200): 95, 48, 48, 48, 51, 32, 68, 65, 84, 65, 83, 69, 84, 32, 102,
+      (1215): 108, 111, 97, 116, 59, 10, 47, 102, 105, 101, 108, 100, 45,
+      (1228): 116, 101, 109, 112, 101, 114, 97, 116, 117, 114, 101, 95, 48,
+      (1241): 48, 48, 52, 32, 68, 65, 84, 65, 83, 69, 84, 32, 102, 108, 111,
+      (1256): 97, 116, 59, 10, 47, 102, 105, 101, 108, 100, 45, 100, 105,
+      (1269): 115, 112, 108, 97, 99, 101, 109, 101, 110, 116, 115, 95, 48,
+      (1282): 48, 48, 55, 32, 68, 65, 84, 65, 83, 69, 84, 32, 102, 108, 111,
+      (1297): 97, 116, 59, 10, 47, 102, 105, 101, 108, 100, 45, 115, 116,
+      (1310): 114, 101, 115, 115, 95, 48, 48, 49, 49, 32, 68, 65, 84, 65, 83,
+      (1325): 69, 84, 32, 102, 108, 111, 97, 116, 59, 10, 47, 102, 105, 101,
+      (1339): 108, 100, 45, 116, 101, 109, 112, 101, 114, 97, 116, 117, 114,
+      (1352): 101, 95, 48, 48, 49, 50, 32, 68, 65, 84, 65, 83, 69, 84, 32,
+      (1367): 102, 108, 111, 97, 116, 59, 10, 47, 102, 105, 101, 108, 100,
+      (1380): 45, 112, 114, 101, 115, 115, 117, 114, 101, 95, 48, 48, 49, 51,
+      (1394): 32, 68, 65, 84, 65, 83, 69, 84, 32, 102, 108, 111, 97, 116, 59,
+      (1409): 10, 47, 66, 108, 111, 98, 32, 68, 65, 84, 65, 83, 69, 84, 32,
+      (1424): 115, 116, 114, 117, 99, 116, 32, 66, 108, 111, 98, 123, 68, 83,
+      (1438): 76, 95, 79, 102, 102, 115, 101, 116, 32, 102, 105, 108, 101,
+      (1451): 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116,
+      (1465): 32, 100, 97, 116, 97, 115, 101, 116, 95, 105, 100, 59, 68, 83,
+      (1479): 76, 95, 79, 102, 102, 115, 101, 116, 32, 111, 102, 102, 115,
+      (1492): 101, 116, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32,
+      (1506): 115, 116, 114, 105, 100, 101, 59, 68, 83, 76, 95, 79, 102, 102,
+      (1520): 115, 101, 116, 32, 99, 111, 117, 110, 116, 59, 68, 83, 76, 95,
+      (1534): 79, 102, 102, 115, 101, 116, 32, 98, 97, 115, 101, 95, 105,
+      (1547): 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 110,
+      (1561): 117, 109, 95, 114, 101, 99, 115, 59, 125, 59, 10, 47, 73, 110,
+      (1575): 100, 101, 120, 83, 112, 101, 99, 32, 68, 65, 84, 65, 83, 69,
+      (1589): 84, 32, 115, 116, 114, 117, 99, 116, 32, 73, 110, 100, 101,
+      (1602): 120, 83, 112, 101, 99, 123, 105, 110, 116, 32, 110, 100, 105,
+      (1615): 109, 115, 59, 105, 110, 116, 32, 111, 114, 105, 103, 105, 110,
+      (1628): 115, 91, 56, 93, 59, 105, 110, 116, 32, 115, 105, 122, 101,
+      (1641): 115, 91, 56, 93, 59, 105, 110, 116, 32, 111, 114, 100, 101,
+      (1654): 114, 91, 56, 93, 59, 101, 110, 117, 109, 32, 73, 110, 100, 101,
+      (1668): 120, 84, 121, 112, 101, 123, 86, 66, 84, 95, 73, 78, 68, 69,
+      (1682): 88, 95, 84, 89, 80, 69, 95, 67, 95, 79, 82, 68, 69, 82, 61, 48,
+      (1698): 44, 86, 66, 84, 95, 73, 78, 68, 69, 88, 95, 84, 89, 80, 69, 95,
+      (1714): 70, 95, 79, 82, 68, 69, 82, 61, 49, 44, 86, 66, 84, 95, 73, 78,
+      (1730): 68, 69, 88, 95, 84, 89, 80, 69, 95, 65, 78, 89, 61, 45, 49, 44,
+      (1746): 86, 66, 84, 95, 73, 78, 68, 69, 88, 95, 84, 89, 80, 69, 95, 73,
+      (1762): 78, 86, 65, 76, 73, 68, 61, 45, 50, 44, 86, 66, 84, 95, 73, 78,
+      (1778): 68, 69, 88, 95, 84, 89, 80, 69, 95, 78, 65, 61, 45, 51, 44, 86,
+      (1794): 66, 84, 95, 73, 78, 68, 69, 88, 95, 84, 89, 80, 69, 95, 85, 78,
+      (1810): 75, 78, 79, 87, 78, 61, 45, 52, 125, 105, 110, 100, 101, 120,
+      (1824): 95, 116, 121, 112, 101, 59, 68, 83, 76, 95, 79, 102, 102, 115,
+      (1838): 101, 116, 32, 98, 97, 115, 101, 95, 105, 100, 59, 68, 83, 76,
+      (1852): 95, 79, 102, 102, 115, 101, 116, 32, 110, 117, 109, 95, 114,
+      (1865): 101, 99, 115, 59, 125, 59, 10, 47, 67, 97, 116, 32, 68, 65, 84,
+      (1880): 65, 83, 69, 84, 32, 115, 116, 114, 117, 99, 116, 32, 67, 97,
+      (1894): 116, 123, 99, 104, 97, 114, 32, 110, 97, 109, 101, 91, 54, 52,
+      (1908): 93, 59, 101, 110, 117, 109, 32, 82, 111, 108, 101, 123, 86, 66,
+      (1922): 84, 95, 82, 79, 76, 69, 95, 84, 79, 80, 79, 61, 48, 44, 86, 66,
+      (1938): 84, 95, 82, 79, 76, 69, 95, 66, 78, 68, 61, 49, 44, 86, 66, 84,
+      (1954): 95, 82, 79, 76, 69, 95, 80, 82, 79, 67, 61, 50, 44, 86, 66, 84,
+      (1970): 95, 82, 79, 76, 69, 95, 68, 79, 77, 78, 61, 51, 44, 86, 66, 84,
+      (1986): 95, 82, 79, 76, 69, 95, 66, 76, 79, 67, 75, 61, 52, 44, 86, 66,
+      (2002): 84, 95, 82, 79, 76, 69, 95, 65, 83, 83, 89, 61, 53, 44, 86, 66,
+      (2018): 84, 95, 82, 79, 76, 69, 95, 77, 65, 84, 61, 54, 44, 86, 66, 84,
+      (2034): 95, 82, 79, 76, 69, 95, 88, 80, 82, 79, 68, 61, 55, 44, 86, 66,
+      (2050): 84, 95, 82, 79, 76, 69, 95, 85, 83, 69, 82, 68, 61, 56, 44, 86,
+      (2066): 66, 84, 95, 82, 79, 76, 69, 95, 65, 78, 89, 61, 45, 49, 44, 86,
+      (2082): 66, 84, 95, 82, 79, 76, 69, 95, 73, 78, 86, 65, 76, 73, 68, 61,
+      (2098): 45, 50, 44, 86, 66, 84, 95, 82, 79, 76, 69, 95, 78, 65, 61, 45,
+      (2114): 51, 44, 86, 66, 84, 95, 82, 79, 76, 69, 95, 85, 78, 75, 78, 79,
+      (2130): 87, 78, 61, 45, 52, 125, 114, 111, 108, 101, 59, 105, 110, 116,
+      (2144): 32, 116, 100, 105, 109, 59, 68, 83, 76, 95, 79, 102, 102, 115,
+      (2158): 101, 116, 32, 98, 97, 115, 101, 95, 105, 100, 59, 68, 83, 76,
+      (2172): 95, 79, 102, 102, 115, 101, 116, 32, 110, 117, 109, 95, 114,
+      (2185): 101, 99, 115, 59, 125, 59, 10, 47, 83, 101, 116, 32, 68, 65,
+      (2199): 84, 65, 83, 69, 84, 32, 115, 116, 114, 117, 99, 116, 32, 83,
+      (2213): 101, 116, 123, 105, 110, 116, 32, 117, 115, 101, 114, 95, 105,
+      (2226): 100, 59, 99, 104, 97, 114, 32, 110, 97, 109, 101, 91, 54, 52,
+      (2240): 93, 59, 105, 110, 116, 32, 116, 100, 105, 109, 59, 101, 110,
+      (2253): 117, 109, 32, 83, 105, 108, 82, 111, 108, 101, 123, 86, 66, 84,
+      (2267): 95, 83, 82, 79, 76, 69, 95, 84, 73, 77, 69, 61, 48, 44, 86, 66,
+      (2283): 84, 95, 83, 82, 79, 76, 69, 95, 83, 80, 65, 67, 69, 61, 49, 44,
+      (2299): 86, 66, 84, 95, 83, 82, 79, 76, 69, 95, 83, 84, 65, 84, 69, 61,
+      (2315): 50, 44, 86, 66, 84, 95, 83, 82, 79, 76, 69, 95, 80, 65, 82, 65,
+      (2331): 77, 61, 51, 44, 86, 66, 84, 95, 83, 82, 79, 76, 69, 95, 67, 84,
+      (2347): 89, 80, 69, 61, 52, 44, 86, 66, 84, 95, 83, 82, 79, 76, 69, 95,
+      (2363): 65, 84, 89, 80, 69, 61, 53, 44, 86, 66, 84, 95, 83, 82, 79, 76,
+      (2379): 69, 95, 85, 83, 69, 82, 68, 61, 54, 44, 86, 66, 84, 95, 83, 82,
+      (2395): 79, 76, 69, 95, 65, 78, 89, 61, 45, 49, 44, 86, 66, 84, 95, 83,
+      (2411): 82, 79, 76, 69, 95, 73, 78, 86, 65, 76, 73, 68, 61, 45, 50, 44,
+      (2427): 86, 66, 84, 95, 83, 82, 79, 76, 69, 95, 78, 65, 61, 45, 51, 44,
+      (2443): 86, 66, 84, 95, 83, 82, 79, 76, 69, 95, 85, 78, 75, 78, 79, 87,
+      (2459): 78, 61, 45, 52, 125, 115, 114, 111, 108, 101, 59, 68, 83, 76,
+      (2473): 95, 79, 102, 102, 115, 101, 116, 32, 99, 111, 108, 108, 95,
+      (2486): 105, 100, 115, 91, 49, 54, 93, 59, 105, 110, 116, 32, 105, 115,
+      (2500): 95, 116, 111, 112, 59, 105, 110, 116, 32, 105, 115, 95, 101,
+      (2513): 120, 116, 101, 110, 100, 105, 98, 108, 101, 59, 68, 83, 76, 95,
+      (2527): 79, 102, 102, 115, 101, 116, 32, 100, 102, 108, 116, 95, 99,
+      (2540): 111, 111, 114, 100, 102, 108, 100, 95, 105, 100, 59, 68, 83,
+      (2553): 76, 95, 79, 102, 102, 115, 101, 116, 32, 98, 110, 100, 95, 115,
+      (2567): 101, 116, 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115,
+      (2581): 101, 116, 32, 98, 97, 115, 101, 95, 105, 100, 59, 68, 83, 76,
+      (2595): 95, 79, 102, 102, 115, 101, 116, 32, 110, 117, 109, 95, 114,
+      (2608): 101, 99, 115, 59, 125, 59, 10, 47, 67, 111, 108, 108, 101, 99,
+      (2622): 116, 105, 111, 110, 32, 68, 65, 84, 65, 83, 69, 84, 32, 115,
+      (2636): 116, 114, 117, 99, 116, 32, 67, 111, 108, 108, 101, 99, 116,
+      (2649): 105, 111, 110, 123, 68, 83, 76, 95, 79, 102, 102, 115, 101,
+      (2662): 116, 32, 99, 111, 110, 116, 97, 105, 110, 105, 110, 103, 95,
+      (2675): 115, 101, 116, 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102,
+      (2689): 115, 101, 116, 32, 99, 97, 116, 95, 105, 100, 59, 101, 110,
+      (2702): 117, 109, 32, 67, 101, 108, 108, 84, 121, 112, 101, 123, 86,
+      (2715): 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 78, 79, 78,
+      (2731): 69, 61, 48, 44, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80,
+      (2747): 69, 95, 80, 79, 73, 78, 84, 61, 49, 44, 86, 66, 84, 95, 67, 69,
+      (2763): 76, 76, 95, 84, 89, 80, 69, 95, 76, 73, 78, 69, 61, 50, 44, 86,
+      (2779): 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 84, 82, 73,
+      (2795): 61, 51, 44, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69,
+      (2811): 95, 81, 85, 65, 68, 61, 52, 44, 86, 66, 84, 95, 67, 69, 76, 76,
+      (2827): 95, 84, 89, 80, 69, 95, 84, 69, 84, 61, 53, 44, 86, 66, 84, 95,
+      (2843): 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 80, 89, 82, 65, 77, 73,
+      (2859): 68, 61, 54, 44, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80,
+      (2875): 69, 95, 80, 82, 73, 83, 77, 61, 55, 44, 86, 66, 84, 95, 67, 69,
+      (2891): 76, 76, 95, 84, 89, 80, 69, 95, 72, 69, 88, 61, 56, 44, 86, 66,
+      (2907): 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 77, 73, 88, 69,
+      (2923): 68, 61, 57, 44, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80,
+      (2939): 69, 95, 65, 82, 66, 61, 49, 48, 44, 86, 66, 84, 95, 67, 69, 76,
+      (2955): 76, 95, 84, 89, 80, 69, 95, 49, 66, 65, 76, 76, 61, 49, 49, 44,
+      (2971): 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 50, 66,
+      (2987): 65, 76, 76, 61, 49, 50, 44, 86, 66, 84, 95, 67, 69, 76, 76, 95,
+      (3003): 84, 89, 80, 69, 95, 51, 66, 65, 76, 76, 61, 49, 51, 44, 86, 66,
+      (3019): 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 49, 83, 72, 69,
+      (3035): 76, 76, 61, 49, 52, 44, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84,
+      (3051): 89, 80, 69, 95, 50, 83, 72, 69, 76, 76, 61, 49, 53, 44, 86, 66,
+      (3067): 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 65, 78, 89, 61,
+      (3083): 45, 49, 44, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69,
+      (3099): 95, 73, 78, 86, 65, 76, 73, 68, 61, 45, 50, 44, 86, 66, 84, 95,
+      (3115): 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 78, 65, 61, 45, 51, 44,
+      (3131): 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 85, 78,
+      (3147): 75, 78, 79, 87, 78, 61, 45, 52, 125, 99, 101, 108, 108, 95,
+      (3161): 116, 121, 112, 101, 59, 105, 110, 116, 32, 99, 111, 117, 110,
+      (3174): 116, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 105,
+      (3188): 110, 100, 101, 120, 105, 110, 103, 95, 105, 100, 59, 105, 110,
+      (3201): 116, 32, 105, 115, 95, 100, 101, 99, 111, 109, 112, 59, 68, 83,
+      (3215): 76, 95, 79, 102, 102, 115, 101, 116, 32, 109, 101, 109, 98,
+      (3228): 101, 114, 115, 95, 98, 108, 111, 98, 95, 105, 100, 59, 68, 83,
+      (3242): 76, 95, 79, 102, 102, 115, 101, 116, 32, 98, 97, 115, 101, 95,
+      (3256): 105, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32,
+      (3270): 110, 117, 109, 95, 114, 101, 99, 115, 59, 125, 59, 10, 47, 82,
+      (3284): 101, 108, 97, 116, 105, 111, 110, 32, 68, 65, 84, 65, 83, 69,
+      (3298): 84, 32, 115, 116, 114, 117, 99, 116, 32, 82, 101, 108, 97, 116,
+      (3312): 105, 111, 110, 123, 68, 83, 76, 95, 79, 102, 102, 115, 101,
+      (3325): 116, 32, 115, 117, 98, 95, 105, 100, 59, 68, 83, 76, 95, 79,
+      (3339): 102, 102, 115, 101, 116, 32, 115, 117, 98, 95, 99, 97, 116, 95,
+      (3353): 105, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32,
+      (3367): 115, 117, 98, 95, 100, 101, 99, 111, 109, 112, 95, 99, 97, 116,
+      (3381): 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116,
+      (3395): 32, 115, 117, 112, 95, 105, 100, 59, 68, 83, 76, 95, 79, 102,
+      (3409): 102, 115, 101, 116, 32, 115, 117, 112, 95, 99, 97, 116, 95,
+      (3422): 105, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32,
+      (3436): 115, 117, 112, 95, 100, 101, 99, 111, 109, 112, 95, 99, 97,
+      (3449): 116, 95, 105, 100, 59, 101, 110, 117, 109, 32, 82, 101, 108,
+      (3462): 75, 105, 110, 100, 123, 86, 66, 84, 95, 82, 69, 76, 75, 73, 78,
+      (3477): 68, 95, 83, 85, 66, 83, 69, 84, 61, 48, 44, 86, 66, 84, 95, 82,
+      (3493): 69, 76, 75, 73, 78, 68, 95, 83, 85, 80, 83, 69, 84, 61, 49, 44,
+      (3509): 86, 66, 84, 95, 82, 69, 76, 75, 73, 78, 68, 95, 66, 79, 85, 78,
+      (3525): 68, 61, 50, 44, 86, 66, 84, 95, 82, 69, 76, 75, 73, 78, 68, 95,
+      (3541): 80, 69, 82, 77, 85, 84, 69, 61, 51, 44, 86, 66, 84, 95, 82, 69,
+      (3557): 76, 75, 73, 78, 68, 95, 78, 69, 73, 71, 72, 66, 79, 82, 61, 52,
+      (3573): 44, 86, 66, 84, 95, 82, 69, 76, 75, 73, 78, 68, 95, 67, 79, 80,
+      (3589): 89, 61, 53, 44, 86, 66, 84, 95, 82, 69, 76, 75, 73, 78, 68, 95,
+      (3605): 69, 81, 85, 65, 76, 61, 54, 44, 86, 66, 84, 95, 82, 69, 76, 75,
+      (3621): 73, 78, 68, 95, 65, 78, 89, 61, 45, 49, 44, 86, 66, 84, 95, 82,
+      (3637): 69, 76, 75, 73, 78, 68, 95, 73, 78, 86, 65, 76, 73, 68, 61, 45,
+      (3653): 50, 44, 86, 66, 84, 95, 82, 69, 76, 75, 73, 78, 68, 95, 78, 65,
+      (3669): 61, 45, 51, 44, 86, 66, 84, 95, 82, 69, 76, 75, 73, 78, 68, 95,
+      (3685): 85, 78, 75, 78, 79, 87, 78, 61, 45, 52, 125, 107, 105, 110,
+      (3699): 100, 59, 101, 110, 117, 109, 32, 82, 101, 108, 82, 101, 112,
+      (3712): 123, 86, 66, 84, 95, 82, 69, 76, 82, 69, 80, 95, 73, 68, 69,
+      (3727): 78, 84, 73, 84, 89, 61, 48, 44, 86, 66, 84, 95, 82, 69, 76, 82,
+      (3743): 69, 80, 95, 72, 76, 73, 83, 84, 61, 49, 44, 86, 66, 84, 95, 82,
+      (3759): 69, 76, 82, 69, 80, 95, 84, 76, 73, 83, 84, 61, 50, 44, 86, 66,
+      (3775): 84, 95, 82, 69, 76, 82, 69, 80, 95, 84, 76, 73, 83, 84, 95, 49,
+      (3791): 61, 51, 44, 86, 66, 84, 95, 82, 69, 76, 82, 69, 80, 95, 69, 76,
+      (3807): 73, 83, 84, 61, 52, 44, 86, 66, 84, 95, 82, 69, 76, 82, 69, 80,
+      (3823): 95, 83, 84, 82, 85, 67, 84, 85, 82, 69, 68, 61, 53, 44, 86, 66,
+      (3839): 84, 95, 82, 69, 76, 82, 69, 80, 95, 85, 78, 83, 84, 82, 85, 67,
+      (3855): 84, 85, 82, 69, 68, 61, 54, 44, 86, 66, 84, 95, 82, 69, 76, 82,
+      (3871): 69, 80, 95, 65, 82, 66, 73, 84, 82, 65, 82, 89, 95, 82, 61, 55,
+      (3887): 44, 86, 66, 84, 95, 82, 69, 76, 82, 69, 80, 95, 65, 82, 66, 73,
+      (3903): 84, 82, 65, 82, 89, 95, 68, 82, 61, 56, 44, 86, 66, 84, 95, 82,
+      (3919): 69, 76, 82, 69, 80, 95, 65, 78, 89, 61, 45, 49, 44, 86, 66, 84,
+      (3935): 95, 82, 69, 76, 82, 69, 80, 95, 73, 78, 86, 65, 76, 73, 68, 61,
+      (3951): 45, 50, 44, 86, 66, 84, 95, 82, 69, 76, 82, 69, 80, 95, 78, 65,
+      (3967): 61, 45, 51, 44, 86, 66, 84, 95, 82, 69, 76, 82, 69, 80, 95, 85,
+      (3983): 78, 75, 78, 79, 87, 78, 61, 45, 52, 125, 114, 101, 112, 95,
+      (3997): 116, 121, 112, 101, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101,
+      (4011): 116, 32, 100, 95, 98, 108, 111, 98, 95, 105, 100, 59, 68, 83,
+      (4025): 76, 95, 79, 102, 102, 115, 101, 116, 32, 114, 95, 98, 108, 111,
+      (4039): 98, 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101,
+      (4053): 116, 32, 98, 97, 115, 101, 95, 105, 100, 59, 68, 83, 76, 95,
+      (4067): 79, 102, 102, 115, 101, 116, 32, 110, 117, 109, 95, 114, 101,
+      (4080): 99, 115, 59, 125, 59, 10, 47, 70, 105, 101, 108, 100, 84, 109,
+      (4094): 112, 108, 32, 68, 65, 84, 65, 83, 69, 84, 32, 115, 116, 114,
+      (4108): 117, 99, 116, 32, 70, 105, 101, 108, 100, 84, 109, 112, 108,
+      (4121): 123, 99, 104, 97, 114, 32, 110, 97, 109, 101, 91, 54, 52, 93,
+      (4135): 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 98, 97,
+      (4149): 115, 101, 95, 115, 112, 97, 99, 101, 95, 105, 100, 59, 101,
+      (4162): 110, 117, 109, 32, 65, 108, 103, 101, 98, 114, 97, 105, 99, 84,
+      (4176): 121, 112, 101, 123, 86, 66, 84, 95, 65, 76, 71, 69, 66, 82, 65,
+      (4191): 73, 67, 95, 84, 89, 80, 69, 95, 67, 79, 78, 83, 84, 65, 78, 84,
+      (4207): 61, 48, 44, 86, 66, 84, 95, 65, 76, 71, 69, 66, 82, 65, 73, 67,
+      (4223): 95, 84, 89, 80, 69, 95, 67, 79, 77, 80, 79, 78, 69, 78, 84, 61,
+      (4239): 49, 44, 86, 66, 84, 95, 65, 76, 71, 69, 66, 82, 65, 73, 67, 95,
+      (4255): 84, 89, 80, 69, 95, 83, 67, 65, 76, 65, 82, 61, 50, 44, 86, 66,
+      (4271): 84, 95, 65, 76, 71, 69, 66, 82, 65, 73, 67, 95, 84, 89, 80, 69,
+      (4287): 95, 86, 69, 67, 84, 79, 82, 61, 51, 44, 86, 66, 84, 95, 65, 76,
+      (4303): 71, 69, 66, 82, 65, 73, 67, 95, 84, 89, 80, 69, 95, 84, 69, 78,
+      (4319): 83, 79, 82, 61, 52, 44, 86, 66, 84, 95, 65, 76, 71, 69, 66, 82,
+      (4335): 65, 73, 67, 95, 84, 89, 80, 69, 95, 83, 89, 77, 95, 84, 69, 78,
+      (4351): 83, 79, 82, 61, 53, 44, 86, 66, 84, 95, 65, 76, 71, 69, 66, 82,
+      (4367): 65, 73, 67, 95, 84, 89, 80, 69, 95, 70, 73, 69, 76, 68, 61, 54,
+      (4383): 44, 86, 66, 84, 95, 65, 76, 71, 69, 66, 82, 65, 73, 67, 95, 84,
+      (4399): 89, 80, 69, 95, 83, 84, 65, 84, 69, 61, 55, 44, 86, 66, 84, 95,
+      (4415): 65, 76, 71, 69, 66, 82, 65, 73, 67, 95, 84, 89, 80, 69, 95, 84,
+      (4431): 85, 80, 76, 69, 61, 56, 44, 86, 66, 84, 95, 65, 76, 71, 69, 66,
+      (4447): 82, 65, 73, 67, 95, 84, 89, 80, 69, 95, 65, 78, 89, 61, 45, 49,
+      (4463): 44, 86, 66, 84, 95, 65, 76, 71, 69, 66, 82, 65, 73, 67, 95, 84,
+      (4479): 89, 80, 69, 95, 73, 78, 86, 65, 76, 73, 68, 61, 45, 50, 44, 86,
+      (4495): 66, 84, 95, 65, 76, 71, 69, 66, 82, 65, 73, 67, 95, 84, 89, 80,
+      (4511): 69, 95, 78, 65, 61, 45, 51, 44, 86, 66, 84, 95, 65, 76, 71, 69,
+      (4527): 66, 82, 65, 73, 67, 95, 84, 89, 80, 69, 95, 85, 78, 75, 78, 79,
+      (4543): 87, 78, 61, 45, 52, 125, 97, 108, 103, 95, 116, 121, 112, 101,
+      (4557): 59, 101, 110, 117, 109, 32, 66, 97, 115, 105, 115, 84, 121,
+      (4570): 112, 101, 123, 86, 66, 84, 95, 66, 65, 83, 73, 83, 95, 84, 89,
+      (4585): 80, 69, 95, 85, 78, 73, 84, 89, 61, 48, 44, 86, 66, 84, 95, 66,
+      (4601): 65, 83, 73, 83, 95, 84, 89, 80, 69, 95, 67, 65, 82, 84, 69, 83,
+      (4617): 73, 65, 78, 61, 49, 44, 86, 66, 84, 95, 66, 65, 83, 73, 83, 95,
+      (4633): 84, 89, 80, 69, 95, 83, 80, 72, 69, 82, 73, 67, 65, 76, 61, 50,
+      (4649): 44, 86, 66, 84, 95, 66, 65, 83, 73, 83, 95, 84, 89, 80, 69, 95,
+      (4665): 67, 89, 76, 73, 78, 68, 82, 73, 67, 65, 76, 61, 51, 44, 86, 66,
+      (4681): 84, 95, 66, 65, 83, 73, 83, 95, 84, 89, 80, 69, 95, 85, 80, 80,
+      (4697): 69, 82, 95, 84, 82, 73, 61, 52, 44, 86, 66, 84, 95, 66, 65, 83,
+      (4713): 73, 83, 95, 84, 89, 80, 69, 95, 70, 79, 85, 82, 73, 69, 82, 61,
+      (4729): 53, 44, 86, 66, 84, 95, 66, 65, 83, 73, 83, 95, 84, 89, 80, 69,
+      (4745): 95, 86, 65, 82, 73, 65, 66, 76, 69, 61, 54, 44, 86, 66, 84, 95,
+      (4761): 66, 65, 83, 73, 83, 95, 84, 89, 80, 69, 95, 65, 78, 89, 61, 45,
+      (4777): 49, 44, 86, 66, 84, 95, 66, 65, 83, 73, 83, 95, 84, 89, 80, 69,
+      (4793): 95, 73, 78, 86, 65, 76, 73, 68, 61, 45, 50, 44, 86, 66, 84, 95,
+      (4809): 66, 65, 83, 73, 83, 95, 84, 89, 80, 69, 95, 78, 65, 61, 45, 51,
+      (4825): 44, 86, 66, 84, 95, 66, 65, 83, 73, 83, 95, 84, 89, 80, 69, 95,
+      (4841): 85, 78, 75, 78, 79, 87, 78, 61, 45, 52, 125, 98, 97, 115, 105,
+      (4856): 115, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 113,
+      (4870): 117, 97, 110, 116, 105, 116, 121, 95, 105, 100, 59, 105, 110,
+      (4883): 116, 32, 110, 117, 109, 95, 99, 111, 109, 112, 115, 59, 68, 83,
+      (4897): 76, 95, 79, 102, 102, 115, 101, 116, 32, 102, 116, 109, 112,
+      (4910): 108, 95, 105, 100, 115, 95, 98, 108, 111, 98, 95, 105, 100, 59,
+      (4924): 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 98, 97, 115,
+      (4938): 101, 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101,
+      (4952): 116, 32, 110, 117, 109, 95, 114, 101, 99, 115, 59, 125, 59, 10,
+      (4966): 47, 70, 105, 101, 108, 100, 32, 68, 65, 84, 65, 83, 69, 84, 32,
+      (4981): 115, 116, 114, 117, 99, 116, 32, 70, 105, 101, 108, 100, 123,
+      (4994): 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 102, 116, 109,
+      (5008): 112, 108, 95, 105, 100, 59, 99, 104, 97, 114, 32, 110, 97, 109,
+      (5022): 101, 91, 54, 52, 93, 59, 68, 83, 76, 95, 79, 102, 102, 115,
+      (5036): 101, 116, 32, 117, 110, 105, 116, 115, 95, 105, 100, 59, 68,
+      (5049): 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 115, 116, 111,
+      (5062): 114, 97, 103, 101, 95, 100, 101, 99, 111, 109, 112, 95, 99, 97,
+      (5076): 116, 95, 105, 100, 59, 101, 110, 117, 109, 32, 73, 110, 116,
+      (5089): 101, 114, 108, 101, 97, 118, 101, 123, 86, 66, 84, 95, 73, 78,
+      (5103): 84, 69, 82, 76, 69, 65, 86, 69, 95, 67, 79, 77, 80, 79, 78, 69,
+      (5119): 78, 84, 61, 48, 44, 86, 66, 84, 95, 73, 78, 84, 69, 82, 76, 69,
+      (5135): 65, 86, 69, 95, 86, 69, 67, 84, 79, 82, 61, 49, 44, 86, 66, 84,
+      (5151): 95, 73, 78, 84, 69, 82, 76, 69, 65, 86, 69, 95, 73, 78, 68, 69,
+      (5167): 80, 69, 78, 68, 69, 78, 84, 61, 50, 44, 86, 66, 84, 95, 73, 78,
+      (5183): 84, 69, 82, 76, 69, 65, 86, 69, 95, 78, 79, 78, 69, 61, 51, 44,
+      (5199): 86, 66, 84, 95, 73, 78, 84, 69, 82, 76, 69, 65, 86, 69, 95, 65,
+      (5215): 78, 89, 61, 45, 49, 44, 86, 66, 84, 95, 73, 78, 84, 69, 82, 76,
+      (5231): 69, 65, 86, 69, 95, 73, 78, 86, 65, 76, 73, 68, 61, 45, 50, 44,
+      (5247): 86, 66, 84, 95, 73, 78, 84, 69, 82, 76, 69, 65, 86, 69, 95, 78,
+      (5263): 65, 61, 45, 51, 44, 86, 66, 84, 95, 73, 78, 84, 69, 82, 76, 69,
+      (5279): 65, 86, 69, 95, 85, 78, 75, 78, 79, 87, 78, 61, 45, 52, 125,
+      (5294): 99, 111, 109, 112, 95, 105, 110, 116, 108, 118, 59, 68, 83, 76,
+      (5308): 95, 79, 102, 102, 115, 101, 116, 32, 105, 110, 100, 101, 120,
+      (5321): 105, 110, 103, 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102,
+      (5335): 115, 101, 116, 32, 100, 111, 102, 95, 97, 115, 115, 111, 99,
+      (5348): 95, 99, 97, 116, 95, 105, 100, 59, 105, 110, 116, 32, 97, 115,
+      (5362): 115, 111, 99, 95, 114, 97, 116, 105, 111, 59, 68, 83, 76, 95,
+      (5376): 79, 102, 102, 115, 101, 116, 32, 101, 118, 97, 108, 95, 100,
+      (5389): 101, 99, 111, 109, 112, 95, 99, 97, 116, 95, 105, 100, 59, 101,
+      (5403): 110, 117, 109, 32, 69, 118, 97, 108, 70, 117, 110, 99, 123, 86,
+      (5417): 66, 84, 95, 69, 86, 65, 76, 95, 70, 85, 78, 67, 95, 67, 79, 78,
+      (5433): 83, 84, 65, 78, 84, 61, 48, 44, 86, 66, 84, 95, 69, 86, 65, 76,
+      (5449): 95, 70, 85, 78, 67, 95, 85, 78, 73, 70, 79, 82, 77, 61, 49, 44,
+      (5465): 86, 66, 84, 95, 69, 86, 65, 76, 95, 70, 85, 78, 67, 95, 80, 87,
+      (5481): 67, 79, 78, 83, 84, 61, 50, 44, 86, 66, 84, 95, 69, 86, 65, 76,
+      (5497): 95, 70, 85, 78, 67, 95, 80, 87, 76, 73, 78, 69, 65, 82, 61, 51,
+      (5513): 44, 86, 66, 84, 95, 69, 86, 65, 76, 95, 70, 85, 78, 67, 95, 65,
+      (5529): 78, 89, 61, 45, 49, 44, 86, 66, 84, 95, 69, 86, 65, 76, 95, 70,
+      (5545): 85, 78, 67, 95, 73, 78, 86, 65, 76, 73, 68, 61, 45, 50, 44, 86,
+      (5561): 66, 84, 95, 69, 86, 65, 76, 95, 70, 85, 78, 67, 95, 78, 65, 61,
+      (5577): 45, 51, 44, 86, 66, 84, 95, 69, 86, 65, 76, 95, 70, 85, 78, 67,
+      (5593): 95, 85, 78, 75, 78, 79, 87, 78, 61, 45, 52, 125, 101, 118, 97,
+      (5608): 108, 95, 102, 117, 110, 99, 59, 105, 110, 116, 32, 105, 115,
+      (5621): 95, 104, 111, 109, 111, 103, 101, 110, 101, 111, 117, 115, 59,
+      (5634): 105, 110, 116, 32, 105, 115, 95, 99, 111, 111, 114, 100, 95,
+      (5647): 102, 105, 101, 108, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115,
+      (5661): 101, 116, 32, 99, 111, 109, 112, 95, 105, 100, 115, 95, 98,
+      (5674): 108, 111, 98, 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102,
+      (5688): 115, 101, 116, 32, 99, 111, 109, 112, 95, 111, 114, 100, 101,
+      (5701): 114, 95, 98, 108, 111, 98, 95, 105, 100, 59, 68, 83, 76, 95,
+      (5715): 79, 102, 102, 115, 101, 116, 32, 118, 98, 97, 115, 105, 115,
+      (5728): 95, 98, 108, 111, 98, 95, 105, 100, 59, 68, 83, 76, 95, 79,
+      (5742): 102, 102, 115, 101, 116, 32, 100, 111, 102, 95, 98, 108, 111,
+      (5755): 98, 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101,
+      (5769): 116, 32, 98, 97, 115, 101, 95, 105, 100, 59, 68, 83, 76, 95,
+      (5783): 79, 102, 102, 115, 101, 116, 32, 110, 117, 109, 95, 114, 101,
+      (5796): 99, 115, 59, 125, 59, 10, 47, 109, 101, 116, 97, 98, 108, 111,
+      (5810): 98, 48, 48, 48, 48, 48, 46, 105, 110, 100, 101, 120, 32, 68,
+      (5824): 65, 84, 65, 83, 69, 84, 32, 115, 116, 114, 117, 99, 116, 32,
+      (5838): 73, 110, 100, 101, 120, 80, 97, 105, 114, 123, 68, 83, 76, 95,
+      (5852): 79, 102, 102, 115, 101, 116, 32, 105, 110, 100, 101, 120, 59,
+      (5865): 105, 110, 116, 32, 108, 101, 110, 103, 116, 104, 59, 125, 59,
+      (5878): 10, 47, 109, 101, 116, 97, 98, 108, 111, 98, 48, 48, 48, 48,
+      (5892): 48, 46, 98, 108, 111, 98, 32, 68, 65, 84, 65, 83, 69, 84, 32,
+      (5907): 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 59, 10
+      }
+   }
+   GROUP ".attributes" {
+      GROUP "database" {
+         DATASET ".SAF_DbProps" {
+            DATATYPE  H5T_COMPOUND {
+               H5T_STD_I32BE "magic";
+               H5T_STRING {
+                  STRSIZE 1024;
+                  STRPAD H5T_STR_NULLTERM;
+                  CSET H5T_CSET_ASCII;
+                  CTYPE H5T_C_S1;
+               } "SFileDir";
+               H5T_STRING {
+                  STRSIZE 1024;
+                  STRPAD H5T_STR_NULLTERM;
+                  CSET H5T_CSET_ASCII;
+                  CTYPE H5T_C_S1;
+               } "ImportFile";
+               H5T_STD_I32BE "parallel";
+               H5T_COMPOUND {
+                  H5T_STD_I32BE "vmajor";
+                  H5T_STD_I32BE "vminor";
+                  H5T_STD_I32BE "rel";
+                  H5T_STRING {
+                     STRSIZE 10;
+                     STRPAD H5T_STR_NULLTERM;
+                     CSET H5T_CSET_ASCII;
+                     CTYPE H5T_C_S1;
+                  } "annot";
+               } "safapi";
+               H5T_COMPOUND {
+                  H5T_STD_I32BE "vmajor";
+                  H5T_STD_I32BE "vminor";
+                  H5T_STD_I32BE "rel";
+                  H5T_STRING {
+                     STRSIZE 10;
+                     STRPAD H5T_STR_NULLTERM;
+                     CSET H5T_CSET_ASCII;
+                     CTYPE H5T_C_S1;
+                  } "annot";
+               } "saflib";
+               H5T_COMPOUND {
+                  H5T_STD_I32BE "vmajor";
+                  H5T_STD_I32BE "vminor";
+                  H5T_STD_I32BE "rel";
+                  H5T_STRING {
+                     STRSIZE 10;
+                     STRPAD H5T_STR_NULLTERM;
+                     CSET H5T_CSET_ASCII;
+                     CTYPE H5T_C_S1;
+                  } "annot";
+               } "vbt";
+               H5T_COMPOUND {
+                  H5T_STD_I32BE "vmajor";
+                  H5T_STD_I32BE "vminor";
+                  H5T_STD_I32BE "rel";
+                  H5T_STRING {
+                     STRSIZE 10;
+                     STRPAD H5T_STR_NULLTERM;
+                     CSET H5T_CSET_ASCII;
+                     CTYPE H5T_C_S1;
+                  } "annot";
+               } "dsl";
+               H5T_COMPOUND {
+                  H5T_STD_I32BE "vmajor";
+                  H5T_STD_I32BE "vminor";
+                  H5T_STD_I32BE "rel";
+                  H5T_STRING {
+                     STRSIZE 10;
+                     STRPAD H5T_STR_NULLTERM;
+                     CSET H5T_CSET_ASCII;
+                     CTYPE H5T_C_S1;
+                  } "annot";
+               } "hdf5";
+               H5T_COMPOUND {
+                  H5T_STD_I32BE "vmajor";
+                  H5T_STD_I32BE "vminor";
+                  H5T_STD_I32BE "rel";
+                  H5T_STRING {
+                     STRSIZE 10;
+                     STRPAD H5T_STR_NULLTERM;
+                     CSET H5T_CSET_ASCII;
+                     CTYPE H5T_C_S1;
+                  } "annot";
+               } "mpi";
+               H5T_STD_I32BE "DoToc";
+               H5T_STD_I32BE "ReadOnly";
+               H5T_STD_I32BE "Clobber";
+               H5T_STD_I32BE "OSModes";
+            }
+            DATASPACE  SIMPLE { ( 1 ) / ( 1 ) }
+            DATA {
+            (0): {
+                  -604320037,
+                  ".",
+                  "don't import",
+                  1,
+                  {
+                     0,
+                     0,
+                     0,
+                     "none"
+                  },
+                  {
+                     0,
+                     1,
+                     0,
+                     "devel"
+                  },
+                  {
+                     1,
+                     3,
+                     0,
+                     ""
+                  },
+                  {
+                     0,
+                     0,
+                     0,
+                     "none"
+                  },
+                  {
+                     1,
+                     2,
+                     1,
+                     ""
+                  },
+                  {
+                     1,
+                     2,
+                     0,
+                     ""
+                  },
+                  1,
+                  0,
+                  1,
+                  0
+               }
+            }
+         }
+      }
+   }
+   DATASET "Blob" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I32BE "file_id";
+         H5T_STD_I32BE "dataset_id";
+         H5T_STD_I32BE "offset";
+         H5T_STD_I32BE "stride";
+         H5T_STD_I32BE "count";
+         H5T_STD_I32BE "base_id";
+         H5T_STD_I32BE "num_recs";
+      }
+      DATASPACE  SIMPLE { ( 24 ) / ( H5S_UNLIMITED ) }
+      DATA {
+      (0): {
+            -1,
+            1,
+            0,
+            1,
+            9,
+            0,
+            1
+         },
+      (1): {
+            -1,
+            2,
+            0,
+            1,
+            4,
+            1,
+            1
+         },
+      (2): {
+            -1,
+            3,
+            0,
+            1,
+            7,
+            2,
+            1
+         },
+      (3): {
+            -1,
+            4,
+            0,
+            1,
+            4,
+            3,
+            1
+         },
+      (4): {
+            -1,
+            5,
+            0,
+            1,
+            5,
+            4,
+            1
+         },
+      (5): {
+            -1,
+            6,
+            0,
+            1,
+            3,
+            5,
+            1
+         },
+      (6): {
+            -1,
+            7,
+            0,
+            1,
+            4,
+            6,
+            1
+         },
+      (7): {
+            -1,
+            8,
+            0,
+            1,
+            1,
+            7,
+            1
+         },
+      (8): {
+            -1,
+            9,
+            0,
+            1,
+            10,
+            8,
+            1
+         },
+      (9): {
+            -1,
+            10,
+            0,
+            1,
+            4,
+            9,
+            1
+         },
+      (10): {
+            -1,
+            11,
+            0,
+            1,
+            3,
+            10,
+            1
+         },
+      (11): {
+            -1,
+            12,
+            0,
+            1,
+            5,
+            11,
+            1
+         },
+      (12): {
+            -1,
+            13,
+            0,
+            1,
+            5,
+            12,
+            1
+         },
+      (13): {
+            -1,
+            14,
+            0,
+            1,
+            16,
+            13,
+            1
+         },
+      (14): {
+            -1,
+            15,
+            0,
+            1,
+            9,
+            14,
+            1
+         },
+      (15): {
+            -1,
+            16,
+            0,
+            1,
+            4,
+            15,
+            1
+         },
+      (16): {
+            -1,
+            17,
+            0,
+            1,
+            16,
+            16,
+            1
+         },
+      (17): {
+            -1,
+            18,
+            0,
+            1,
+            36,
+            17,
+            1
+         },
+      (18): {
+            -1,
+            19,
+            0,
+            1,
+            5,
+            18,
+            1
+         },
+      (19): {
+            -1,
+            20,
+            0,
+            1,
+            5,
+            19,
+            1
+         },
+      (20): {
+            -1,
+            21,
+            0,
+            1,
+            36,
+            20,
+            1
+         },
+      (21): {
+            -1,
+            22,
+            0,
+            1,
+            12,
+            21,
+            1
+         },
+      (22): {
+            -1,
+            23,
+            0,
+            1,
+            7,
+            22,
+            1
+         },
+      (23): {
+            -1,
+            24,
+            0,
+            1,
+            2,
+            23,
+            1
+         }
+      }
+   }
+   DATASET "Cat" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STRING {
+            STRSIZE 64;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         } "name";
+         H5T_ENUM {
+            H5T_STD_I32BE;
+            "TOPO"             0;
+            "BND"              1;
+            "PROC"             2;
+            "DOMN"             3;
+            "BLOCK"            4;
+            "ASSY"             5;
+            "MAT"              6;
+            "XPROD"            7;
+            "USERD"            8;
+            "ANY"              -1;
+            "INVALID"          -2;
+            "NA"               -3;
+            "UNKNOWN"          -4;
+         } "role";
+         H5T_STD_I32BE "tdim";
+         H5T_STD_I32BE "base_id";
+         H5T_STD_I32BE "num_recs";
+      }
+      DATASPACE  SIMPLE { ( 5 ) / ( H5S_UNLIMITED ) }
+      DATA {
+      (0): {
+            "nodes",
+            TOPO,
+            0,
+            0,
+            1
+         },
+      (1): {
+            "elems",
+            TOPO,
+            2,
+            1,
+            1
+         },
+      (2): {
+            "edges",
+            USERD,
+            1,
+            2,
+            1
+         },
+      (3): {
+            "blocks",
+            BLOCK,
+            2,
+            3,
+            1
+         },
+      (4): {
+            "side_sets",
+            USERD,
+            1,
+            4,
+            1
+         }
+      }
+   }
+   DATASET "Collection" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I32BE "containing_set_id";
+         H5T_STD_I32BE "cat_id";
+         H5T_ENUM {
+            H5T_STD_I32BE;
+            "NONE"             0;
+            "POINT"            1;
+            "LINE"             2;
+            "TRI"              3;
+            "QUAD"             4;
+            "TET"              5;
+            "PYRAMID"          6;
+            "PRISM"            7;
+            "HEX"              8;
+            "MIXED"            9;
+            "ARB"              10;
+            "1BALL"            11;
+            "2BALL"            12;
+            "3BALL"            13;
+            "1SHELL"           14;
+            "2SHELL"           15;
+            "ANY"              -1;
+            "INVALID"          -2;
+            "NA"               -3;
+            "UNKNOWN"          -4;
+         } "cell_type";
+         H5T_STD_I32BE "count";
+         H5T_STD_I32BE "indexing_id";
+         H5T_STD_I32BE "is_decomp";
+         H5T_STD_I32BE "members_blob_id";
+         H5T_STD_I32BE "base_id";
+         H5T_STD_I32BE "num_recs";
+      }
+      DATASPACE  SIMPLE { ( 24 ) / ( H5S_UNLIMITED ) }
+      DATA {
+      (0): {
+            0,
+            0,
+            POINT,
+            18,
+            0,
+            0,
+            -2,
+            0,
+            1
+         },
+      (1): {
+            0,
+            1,
+            MIXED,
+            12,
+            1,
+            1,
+            -2,
+            1,
+            1
+         },
+      (2): {
+            0,
+            3,
+            NONE,
+            4,
+            2,
+            1,
+            0,
+            2,
+            1
+         },
+      (3): {
+            0,
+            4,
+            NONE,
+            2,
+            3,
+            0,
+            1,
+            3,
+            1
+         },
+      (4): {
+            1,
+            0,
+            POINT,
+            9,
+            4,
+            0,
+            -2,
+            4,
+            1
+         },
+      (5): {
+            1,
+            1,
+            QUAD,
+            4,
+            5,
+            1,
+            -2,
+            5,
+            1
+         },
+      (6): {
+            1,
+            3,
+            NONE,
+            1,
+            6,
+            1,
+            2,
+            6,
+            1
+         },
+      (7): {
+            2,
+            0,
+            POINT,
+            7,
+            7,
+            0,
+            -2,
+            7,
+            1
+         },
+      (8): {
+            2,
+            1,
+            MIXED,
+            4,
+            8,
+            1,
+            -2,
+            8,
+            1
+         },
+      (9): {
+            2,
+            3,
+            NONE,
+            2,
+            9,
+            1,
+            3,
+            9,
+            1
+         },
+      (10): {
+            3,
+            0,
+            POINT,
+            10,
+            10,
+            0,
+            -2,
+            10,
+            1
+         },
+      (11): {
+            3,
+            1,
+            QUAD,
+            4,
+            11,
+            1,
+            -2,
+            11,
+            1
+         },
+      (12): {
+            3,
+            3,
+            NONE,
+            1,
+            12,
+            1,
+            4,
+            12,
+            1
+         },
+      (13): {
+            4,
+            0,
+            POINT,
+            3,
+            13,
+            0,
+            -2,
+            13,
+            1
+         },
+      (14): {
+            4,
+            2,
+            LINE,
+            2,
+            14,
+            1,
+            -2,
+            14,
+            1
+         },
+      (15): {
+            5,
+            0,
+            POINT,
+            5,
+            15,
+            0,
+            -2,
+            15,
+            1
+         },
+      (16): {
+            5,
+            2,
+            LINE,
+            4,
+            16,
+            1,
+            -2,
+            16,
+            1
+         },
+      (17): {
+            6,
+            0,
+            POINT,
+            5,
+            17,
+            1,
+            -2,
+            17,
+            1
+         },
+      (18): {
+            7,
+            0,
+            POINT,
+            5,
+            18,
+            0,
+            -2,
+            18,
+            1
+         },
+      (19): {
+            7,
+            1,
+            TRI,
+            3,
+            19,
+            1,
+            -2,
+            19,
+            1
+         },
+      (20): {
+            7,
+            3,
+            NONE,
+            1,
+            20,
+            1,
+            5,
+            20,
+            1
+         },
+      (21): {
+            8,
+            0,
+            POINT,
+            4,
+            21,
+            0,
+            -2,
+            21,
+            1
+         },
+      (22): {
+            8,
+            1,
+            QUAD,
+            1,
+            22,
+            1,
+            -2,
+            22,
+            1
+         },
+      (23): {
+            8,
+            3,
+            NONE,
+            1,
+            23,
+            1,
+            6,
+            23,
+            1
+         }
+      }
+   }
+   DATASET "Field" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I32BE "ftmpl_id";
+         H5T_STRING {
+            STRSIZE 64;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         } "name";
+         H5T_STD_I32BE "units_id";
+         H5T_STD_I32BE "storage_decomp_cat_id";
+         H5T_ENUM {
+            H5T_STD_I32BE;
+            "COMPONENT"        0;
+            "VECTOR"           1;
+            "INDEPENDENT"      2;
+            "NONE"             3;
+            "ANY"              -1;
+            "INVALID"          -2;
+            "NA"               -3;
+            "UNKNOWN"          -4;
+         } "comp_intlv";
+         H5T_STD_I32BE "indexing_id";
+         H5T_STD_I32BE "dof_assoc_cat_id";
+         H5T_STD_I32BE "assoc_ratio";
+         H5T_STD_I32BE "eval_decomp_cat_id";
+         H5T_ENUM {
+            H5T_STD_I32BE;
+            "CONSTANT"         0;
+            "UNIFORM"          1;
+            "PWCONST"          2;
+            "PWLINEAR"         3;
+            "ANY"              -1;
+            "INVALID"          -2;
+            "NA"               -3;
+            "UNKNOWN"          -4;
+         } "eval_func";
+         H5T_STD_I32BE "is_homogeneous";
+         H5T_STD_I32BE "is_coord_field";
+         H5T_STD_I32BE "comp_ids_blob_id";
+         H5T_STD_I32BE "comp_order_blob_id";
+         H5T_STD_I32BE "vbasis_blob_id";
+         H5T_STD_I32BE "dof_blob_id";
+         H5T_STD_I32BE "base_id";
+         H5T_STD_I32BE "num_recs";
+      }
+      DATASPACE  SIMPLE { ( 14 ) / ( H5S_UNLIMITED ) }
+      DATA {
+      (0): {
+            1,
+            "X",
+            -7,
+            -2,
+            NONE,
+            -2,
+            0,
+            1,
+            0,
+            PWLINEAR,
+            1,
+            0,
+            -2,
+            -2,
+            -2,
+            -2,
+            0,
+            1
+         },
+      (1): {
+            1,
+            "Y",
+            -7,
+            -2,
+            NONE,
+            -2,
+            0,
+            1,
+            0,
+            PWLINEAR,
+            1,
+            0,
+            -2,
+            -2,
+            -2,
+            -2,
+            1,
+            1
+         },
+      (2): {
+            0,
+            "coords",
+            -7,
+            -2,
+            VECTOR,
+            -2,
+            0,
+            1,
+            0,
+            PWLINEAR,
+            1,
+            1,
+            7,
+            -2,
+            -2,
+            17,
+            2,
+            1
+         },
+      (3): {
+            2,
+            "distribution factors",
+            -5,
+            -2,
+            NONE,
+            -2,
+            0,
+            1,
+            0,
+            PWLINEAR,
+            1,
+            0,
+            -2,
+            -2,
+            -2,
+            18,
+            3,
+            1
+         },
+      (4): {
+            3,
+            "temperature",
+            -7,
+            -2,
+            NONE,
+            -2,
+            0,
+            1,
+            0,
+            PWLINEAR,
+            1,
+            0,
+            -2,
+            -2,
+            -2,
+            19,
+            4,
+            1
+         },
+      (5): {
+            1,
+            "dX",
+            -7,
+            -2,
+            NONE,
+            -2,
+            0,
+            1,
+            0,
+            PWLINEAR,
+            1,
+            0,
+            -2,
+            -2,
+            -2,
+            -2,
+            5,
+            1
+         },
+      (6): {
+            1,
+            "dY",
+            -7,
+            -2,
+            NONE,
+            -2,
+            0,
+            1,
+            0,
+            PWLINEAR,
+            1,
+            0,
+            -2,
+            -2,
+            -2,
+            -2,
+            6,
+            1
+         },
+      (7): {
+            0,
+            "displacements",
+            -7,
+            -2,
+            VECTOR,
+            -2,
+            0,
+            1,
+            0,
+            PWLINEAR,
+            1,
+            0,
+            8,
+            -2,
+            -2,
+            20,
+            7,
+            1
+         },
+      (8): {
+            5,
+            "Sx",
+            -7,
+            -2,
+            NONE,
+            -2,
+            1,
+            1,
+            1,
+            PWCONST,
+            1,
+            0,
+            -2,
+            -2,
+            -2,
+            -2,
+            8,
+            1
+         },
+      (9): {
+            5,
+            "Sy",
+            -7,
+            -2,
+            NONE,
+            -2,
+            1,
+            1,
+            1,
+            PWCONST,
+            1,
+            0,
+            -2,
+            -2,
+            -2,
+            -2,
+            9,
+            1
+         },
+      (10): {
+            5,
+            "Sxy",
+            -7,
+            -2,
+            NONE,
+            -2,
+            1,
+            1,
+            1,
+            PWCONST,
+            1,
+            0,
+            -2,
+            -2,
+            -2,
+            -2,
+            10,
+            1
+         },
+      (11): {
+            4,
+            "stress",
+            -7,
+            -2,
+            VECTOR,
+            -2,
+            1,
+            1,
+            1,
+            PWCONST,
+            1,
+            0,
+            9,
+            -2,
+            -2,
+            21,
+            11,
+            1
+         },
+      (12): {
+            6,
+            "temperature",
+            -7,
+            -2,
+            NONE,
+            -2,
+            0,
+            1,
+            0,
+            PWLINEAR,
+            1,
+            0,
+            -2,
+            -2,
+            -2,
+            22,
+            12,
+            1
+         },
+      (13): {
+            7,
+            "pressure",
+            -7,
+            -2,
+            NONE,
+            -2,
+            2,
+            1,
+            2,
+            PWCONST,
+            1,
+            0,
+            -2,
+            -2,
+            -2,
+            23,
+            13,
+            1
+         }
+      }
+   }
+   DATASET "FieldTmpl" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STRING {
+            STRSIZE 64;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         } "name";
+         H5T_STD_I32BE "base_space_id";
+         H5T_ENUM {
+            H5T_STD_I32BE;
+            "CONSTANT"         0;
+            "COMPONENT"        1;
+            "SCALAR"           2;
+            "VECTOR"           3;
+            "TENSOR"           4;
+            "SYM_TENSOR"       5;
+            "FIELD"            6;
+            "STATE"            7;
+            "TUPLE"            8;
+            "ANY"              -1;
+            "INVALID"          -2;
+            "NA"               -3;
+            "UNKNOWN"          -4;
+         } "alg_type";
+         H5T_ENUM {
+            H5T_STD_I32BE;
+            "UNITY"            0;
+            "CARTESIAN"        1;
+            "SPHERICAL"        2;
+            "CYLINDRICAL"      3;
+            "UPPER_TRI"        4;
+            "FOURIER"          5;
+            "VARIABLE"         6;
+            "ANY"              -1;
+            "INVALID"          -2;
+            "NA"               -3;
+            "UNKNOWN"          -4;
+         } "basis";
+         H5T_STD_I32BE "quantity_id";
+         H5T_STD_I32BE "num_comps";
+         H5T_STD_I32BE "ftmpl_ids_blob_id";
+         H5T_STD_I32BE "base_id";
+         H5T_STD_I32BE "num_recs";
+      }
+      DATASPACE  SIMPLE { ( 8 ) / ( H5S_UNLIMITED ) }
+      DATA {
+      (0): {
+            "coordinate_tmpl",
+            0,
+            VECTOR,
+            CARTESIAN,
+            2,
+            2,
+            0,
+            0,
+            1
+         },
+      (1): {
+            "coordinate_tmpl_component",
+            0,
+            SCALAR,
+            CARTESIAN,
+            2,
+            1,
+            0,
+            1,
+            1
+         },
+      (2): {
+            "distrib_factors_tmpl",
+            5,
+            SCALAR,
+            UNITY,
+            -5,
+            1,
+            0,
+            2,
+            1
+         },
+      (3): {
+            "temp_on_ns1_tmpl",
+            6,
+            SCALAR,
+            UNITY,
+            0,
+            1,
+            0,
+            3,
+            1
+         },
+      (4): {
+            "stress_on_cell_1_tmpl",
+            1,
+            SYM_TENSOR,
+            UPPER_TRI,
+            0,
+            3,
+            0,
+            4,
+            1
+         },
+      (5): {
+            "stress_on_cell_1_tmpl_component",
+            1,
+            SCALAR,
+            UPPER_TRI,
+            0,
+            1,
+            0,
+            5,
+            1
+         },
+      (6): {
+            "temp_on_cell_2_tmpl",
+            2,
+            SCALAR,
+            UNITY,
+            1,
+            1,
+            0,
+            6,
+            1
+         },
+      (7): {
+            "pressure_on_ss1",
+            4,
+            SCALAR,
+            UNITY,
+            0,
+            1,
+            0,
+            7,
+            1
+         }
+      }
+   }
+   DATASET "IndexSpec" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I32BE "ndims";
+         H5T_COMPOUND {
+            H5T_ARRAY { [8] H5T_STD_I32BE } "_";
+         } "origins";
+         H5T_COMPOUND {
+            H5T_ARRAY { [8] H5T_STD_I32BE } "_";
+         } "sizes";
+         H5T_COMPOUND {
+            H5T_ARRAY { [8] H5T_STD_I32BE } "_";
+         } "order";
+         H5T_ENUM {
+            H5T_STD_I32BE;
+            "C_ORDER"          0;
+            "F_ORDER"          1;
+            "ANY"              -1;
+            "INVALID"          -2;
+            "NA"               -3;
+            "UNKNOWN"          -4;
+         } "index_type";
+         H5T_STD_I32BE "base_id";
+         H5T_STD_I32BE "num_recs";
+      }
+      DATASPACE  SIMPLE { ( 24 ) / ( H5S_UNLIMITED ) }
+      DATA {
+      (0): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 18, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            0,
+            1
+         },
+      (1): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 12, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            1,
+            1
+         },
+      (2): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 4, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            2,
+            1
+         },
+      (3): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 2, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            3,
+            1
+         },
+      (4): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 9, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            4,
+            1
+         },
+      (5): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 4, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            5,
+            1
+         },
+      (6): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 1, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            6,
+            1
+         },
+      (7): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 7, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            7,
+            1
+         },
+      (8): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 4, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            8,
+            1
+         },
+      (9): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 2, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            9,
+            1
+         },
+      (10): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 10, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            10,
+            1
+         },
+      (11): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 4, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            11,
+            1
+         },
+      (12): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 1, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            12,
+            1
+         },
+      (13): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 3, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            13,
+            1
+         },
+      (14): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 2, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            14,
+            1
+         },
+      (15): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 5, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            15,
+            1
+         },
+      (16): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 4, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            16,
+            1
+         },
+      (17): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 5, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            17,
+            1
+         },
+      (18): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 5, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            18,
+            1
+         },
+      (19): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 3, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            19,
+            1
+         },
+      (20): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 1, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            20,
+            1
+         },
+      (21): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 4, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            21,
+            1
+         },
+      (22): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 1, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            22,
+            1
+         },
+      (23): {
+            1,
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 1, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            {
+               [ 0, 0, 0, 0, 0, 0, 0, 0 ]
+            },
+            C_ORDER,
+            23,
+            1
+         }
+      }
+   }
+   DATASET "Relation" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I32BE "sub_id";
+         H5T_STD_I32BE "sub_cat_id";
+         H5T_STD_I32BE "sub_decomp_cat_id";
+         H5T_STD_I32BE "sup_id";
+         H5T_STD_I32BE "sup_cat_id";
+         H5T_STD_I32BE "sup_decomp_cat_id";
+         H5T_ENUM {
+            H5T_STD_I32BE;
+            "SUBSET"           0;
+            "SUPSET"           1;
+            "BOUND"            2;
+            "PERMUTE"          3;
+            "NEIGHBOR"         4;
+            "COPY"             5;
+            "EQUAL"            6;
+            "ANY"              -1;
+            "INVALID"          -2;
+            "NA"               -3;
+            "UNKNOWN"          -4;
+         } "kind";
+         H5T_ENUM {
+            H5T_STD_I32BE;
+            "IDENTITY"         0;
+            "HLIST"            1;
+            "TLIST"            2;
+            "TLIST_1"          3;
+            "ELIST"            4;
+            "STRUCTURED"       5;
+            "UNSTRUCTURED"     6;
+            "ARBITRARY_R"      7;
+            "ARBITRARY_DR"     8;
+            "ANY"              -1;
+            "INVALID"          -2;
+            "NA"               -3;
+            "UNKNOWN"          -4;
+         } "rep_type";
+         H5T_STD_I32BE "d_blob_id";
+         H5T_STD_I32BE "r_blob_id";
+         H5T_STD_I32BE "base_id";
+         H5T_STD_I32BE "num_recs";
+      }
+      DATASPACE  SIMPLE { ( 21 ) / ( H5S_UNLIMITED ) }
+      DATA {
+      (0): {
+            1,
+            0,
+            -2,
+            0,
+            0,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            0,
+            0,
+            1
+         },
+      (1): {
+            1,
+            1,
+            -2,
+            0,
+            1,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            1,
+            1,
+            1
+         },
+      (2): {
+            2,
+            0,
+            -2,
+            0,
+            0,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            2,
+            2,
+            1
+         },
+      (3): {
+            2,
+            1,
+            -2,
+            0,
+            1,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            3,
+            3,
+            1
+         },
+      (4): {
+            7,
+            0,
+            -2,
+            0,
+            0,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            4,
+            4,
+            1
+         },
+      (5): {
+            7,
+            1,
+            -2,
+            0,
+            1,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            5,
+            5,
+            1
+         },
+      (6): {
+            8,
+            0,
+            -2,
+            0,
+            0,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            6,
+            6,
+            1
+         },
+      (7): {
+            8,
+            1,
+            -2,
+            0,
+            1,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            7,
+            7,
+            1
+         },
+      (8): {
+            3,
+            0,
+            -2,
+            0,
+            0,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            8,
+            8,
+            1
+         },
+      (9): {
+            3,
+            1,
+            -2,
+            0,
+            1,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            9,
+            9,
+            1
+         },
+      (10): {
+            4,
+            0,
+            -2,
+            0,
+            0,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            10,
+            10,
+            1
+         },
+      (11): {
+            5,
+            0,
+            -2,
+            0,
+            0,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            11,
+            11,
+            1
+         },
+      (12): {
+            6,
+            0,
+            -2,
+            0,
+            0,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            12,
+            12,
+            1
+         },
+      (13): {
+            1,
+            3,
+            -2,
+            0,
+            3,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            -2,
+            13,
+            1
+         },
+      (14): {
+            7,
+            3,
+            -2,
+            0,
+            3,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            -2,
+            14,
+            1
+         },
+      (15): {
+            8,
+            3,
+            -2,
+            0,
+            3,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            -2,
+            15,
+            1
+         },
+      (16): {
+            3,
+            3,
+            -2,
+            0,
+            3,
+            -2,
+            EQUAL,
+            TLIST,
+            -2,
+            -2,
+            16,
+            1
+         },
+      (17): {
+            1,
+            1,
+            -2,
+            0,
+            0,
+            -2,
+            SUBSET,
+            UNSTRUCTURED,
+            -2,
+            13,
+            17,
+            1
+         },
+      (18): {
+            7,
+            1,
+            -2,
+            0,
+            0,
+            -2,
+            SUBSET,
+            UNSTRUCTURED,
+            -2,
+            14,
+            18,
+            1
+         },
+      (19): {
+            8,
+            1,
+            -2,
+            0,
+            0,
+            -2,
+            SUBSET,
+            UNSTRUCTURED,
+            -2,
+            15,
+            19,
+            1
+         },
+      (20): {
+            3,
+            1,
+            -2,
+            0,
+            0,
+            -2,
+            SUBSET,
+            UNSTRUCTURED,
+            -2,
+            16,
+            20,
+            1
+         }
+      }
+   }
+   DATASET "Set" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I32BE "user_id";
+         H5T_STRING {
+            STRSIZE 64;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         } "name";
+         H5T_STD_I32BE "tdim";
+         H5T_ENUM {
+            H5T_STD_I32BE;
+            "TIME"             0;
+            "SPACE"            1;
+            "STATE"            2;
+            "PARAM"            3;
+            "CTYPE"            4;
+            "ATYPE"            5;
+            "USERD"            6;
+            "ANY"              -1;
+            "INVALID"          -2;
+            "NA"               -3;
+            "UNKNOWN"          -4;
+         } "srole";
+         H5T_COMPOUND {
+            H5T_ARRAY { [16] H5T_STD_I32BE } "_";
+         } "coll_ids";
+         H5T_STD_I32BE "is_top";
+         H5T_STD_I32BE "is_extendible";
+         H5T_STD_I32BE "dflt_coordfld_id";
+         H5T_STD_I32BE "bnd_set_id";
+         H5T_STD_I32BE "base_id";
+         H5T_STD_I32BE "num_recs";
+      }
+      DATASPACE  SIMPLE { ( 9 ) / ( H5S_UNLIMITED ) }
+      DATA {
+      (0): {
+            0,
+            "TOP_CELL",
+            2,
+            SPACE,
+            {
+               [ 0, 1, -2, 2, 3, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2 ]
+            },
+            1,
+            0,
+            -2,
+            -2,
+            0,
+            1
+         },
+      (1): {
+            0,
+            "CELL_1",
+            2,
+            SPACE,
+            {
+               [ 4, 5, -2, 6, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2 ]
+            },
+            0,
+            0,
+            -2,
+            -2,
+            1,
+            1
+         },
+      (2): {
+            0,
+            "CELL_2",
+            2,
+            SPACE,
+            {
+               [ 7, 8, -2, 9, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2 ]
+            },
+            0,
+            0,
+            -2,
+            -2,
+            2,
+            1
+         },
+      (3): {
+            0,
+            "CELL_3",
+            2,
+            SPACE,
+            {
+               [ 10, 11, -2, 12, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2 ]
+            },
+            0,
+            0,
+            -2,
+            -2,
+            3,
+            1
+         },
+      (4): {
+            0,
+            "SIDE_SET_1",
+            1,
+            SPACE,
+            {
+               [ 13, -2, 14, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2 ]
+            },
+            0,
+            0,
+            -2,
+            -2,
+            4,
+            1
+         },
+      (5): {
+            0,
+            "SIDE_SET_2",
+            1,
+            SPACE,
+            {
+               [ 15, -2, 16, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2 ]
+            },
+            0,
+            0,
+            -2,
+            -2,
+            5,
+            1
+         },
+      (6): {
+            0,
+            "NODE_SET_1",
+            0,
+            SPACE,
+            {
+               [ 17, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2 ]
+            },
+            0,
+            0,
+            -2,
+            -2,
+            6,
+            1
+         },
+      (7): {
+            0,
+            "CELL_2_TRIS",
+            2,
+            SPACE,
+            {
+               [ 18, 19, -2, 20, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2 ]
+            },
+            0,
+            0,
+            -2,
+            -2,
+            7,
+            1
+         },
+      (8): {
+            0,
+            "CELL_2_QUADS",
+            2,
+            SPACE,
+            {
+               [ 21, 22, -2, 23, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -2 ]
+            },
+            0,
+            0,
+            -2,
+            -2,
+            8,
+            1
+         }
+      }
+   }
+   DATASET "field-coords_0002" {
+      DATATYPE  H5T_IEEE_F32BE
+      DATASPACE  SIMPLE { ( 36 ) / ( 36 ) }
+      DATA {
+      (0): 0, 4, 1, 4, 2, 4, 2.5, 4, 0, 3, 1, 3, 2, 3, 2.5, 3, 0, 2, 1, 2, 2,
+      (21): 2, 2.5, 2, 0, 1, 2, 1, 2.5, 1, 0, 0, 2, 0, 2.5, 0
+      }
+   }
+   DATASET "field-displacements_0007" {
+      DATATYPE  H5T_IEEE_F32BE
+      DATASPACE  SIMPLE { ( 36 ) / ( 36 ) }
+      DATA {
+      (0): 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,
+      (11): 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,
+      (22): 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,
+      (33): 0.25, 0.25, 0.25
+      }
+   }
+   DATASET "field-distribution_factors_0003" {
+      DATATYPE  H5T_IEEE_F32BE
+      DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+      DATA {
+      (0): 4, 3, 2, 1, 0
+      }
+   }
+   DATASET "field-pressure_0013" {
+      DATATYPE  H5T_IEEE_F32BE
+      DATASPACE  SIMPLE { ( 2 ) / ( 2 ) }
+      DATA {
+      (0): 45, 55
+      }
+   }
+   DATASET "field-stress_0011" {
+      DATATYPE  H5T_IEEE_F32BE
+      DATASPACE  SIMPLE { ( 12 ) / ( 12 ) }
+      DATA {
+      (0): 0.5, 0.25, 0.5, 0.5, 0.25, 0.5, 0.5, 0.25, 0.5, 0.5, 0.25, 0.5
+      }
+   }
+   DATASET "field-temperature_0004" {
+      DATATYPE  H5T_IEEE_F32BE
+      DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+      DATA {
+      (0): 100, 150, 150, 100, 75
+      }
+   }
+   DATASET "field-temperature_0012" {
+      DATATYPE  H5T_IEEE_F32BE
+      DATASPACE  SIMPLE { ( 7 ) / ( 7 ) }
+      DATA {
+      (0): 75, 95, 120, 80, 115, 85, 110
+      }
+   }
+   DATASET "metablob00000.blob" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 19 ) / ( H5S_UNLIMITED ) }
+      DATA {
+      (0): 1, 7, 8, 3, -2, -2, -2, -2, -2, -2, -2, -2, 0, 1, 5, 6, 8, 9, 10
+      }
+   }
+   DATASET "metablob00000.index" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I32BE "index";
+         H5T_STD_I32BE "length";
+      }
+      DATASPACE  SIMPLE { ( 10 ) / ( H5S_UNLIMITED ) }
+      DATA {
+      (0): {
+            0,
+            4
+         },
+      (1): {
+            4,
+            2
+         },
+      (2): {
+            6,
+            1
+         },
+      (3): {
+            7,
+            2
+         },
+      (4): {
+            9,
+            1
+         },
+      (5): {
+            10,
+            1
+         },
+      (6): {
+            11,
+            1
+         },
+      (7): {
+            12,
+            2
+         },
+      (8): {
+            14,
+            2
+         },
+      (9): {
+            16,
+            3
+         }
+      }
+   }
+   DATASET "ssrel-_0000" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 9 ) / ( 9 ) }
+      DATA {
+      (0): 1, 2, 3, 5, 6, 7, 9, 10, 11
+      }
+   }
+   DATASET "ssrel-_0001" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): 1, 2, 4, 5
+      }
+   }
+   DATASET "ssrel-_0002" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 7 ) / ( 7 ) }
+      DATA {
+      (0): 9, 10, 11, 13, 14, 16, 17
+      }
+   }
+   DATASET "ssrel-_0003" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): 7, 8, 9, 11
+      }
+   }
+   DATASET "ssrel-_0004" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+      DATA {
+      (0): 9, 10, 11, 13, 14
+      }
+   }
+   DATASET "ssrel-_0005" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
+      DATA {
+      (0): 7, 8, 9
+      }
+   }
+   DATASET "ssrel-_0006" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): 13, 14, 16, 17
+      }
+   }
+   DATASET "ssrel-_0007" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 1 ) / ( 1 ) }
+      DATA {
+      (0): 11
+      }
+   }
+   DATASET "ssrel-_0008" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+      DATA {
+      (0): 3, 4, 7, 8, 11, 12, 14, 15, 17, 18
+      }
+   }
+   DATASET "ssrel-_0009" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): 3, 6, 10, 12
+      }
+   }
+   DATASET "ssrel-_0010" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
+      DATA {
+      (0): 9, 10, 11
+      }
+   }
+   DATASET "ssrel-_0011" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+      DATA {
+      (0): 1, 5, 9, 13, 16
+      }
+   }
+   DATASET "ssrel-_0012" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 5 ) / ( 5 ) }
+      DATA {
+      (0): 4, 8, 12, 15, 18
+      }
+   }
+   DATASET "toporel-_0017" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 16 ) / ( 16 ) }
+      DATA {
+      (0): 1, 2, 6, 5, 2, 3, 7, 6, 5, 6, 10, 9, 6, 7, 11, 10
+      }
+   }
+   DATASET "toporel-_0018" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 9 ) / ( 9 ) }
+      DATA {
+      (0): 9, 10, 13, 10, 14, 13, 10, 11, 14
+      }
+   }
+   DATASET "toporel-_0019" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): 13, 14, 17, 16
+      }
+   }
+   DATASET "toporel-_0020" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 16 ) / ( 16 ) }
+      DATA {
+      (0): 3, 4, 8, 7, 7, 8, 12, 11, 11, 12, 15, 14, 14, 15, 18, 17
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,2921 @@
+#############################
+Expected output for 'h5dump --xml tsaf.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Dataset Name=".DSL_METADATA" OBJ-XID="xid_744-0" H5Path= "/.DSL_METADATA" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ChunkedLayout Ndims="1">
+            <hdf5:ChunkDimension DimSize="1024" />
+            <hdf5:RequiredFilter>
+            </hdf5:RequiredFilter>
+         </hdf5:ChunkedLayout>
+      </hdf5:StorageLayout>
+      <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="5919" MaxDimSize="UNLIMITED"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="LE" Sign="false" Size="1" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         47 32 67 79 78 84 65 73 78 69 82 10 47 46 97 116 116 114 105 98 117 116
+         101 115 32 67 79 78 84 65 73 78 69 82 10 47 46 97 116 116 114 105 98
+         117 116 101 115 47 100 97 116 97 98 97 115 101 32 67 79 78 84 65 73 78
+         69 82 10 47 46 97 116 116 114 105 98 117 116 101 115 47 100 97 116 97
+         98 97 115 101 47 46 83 65 70 95 68 98 80 114 111 112 115 32 68 65 84 65
+         83 69 84 32 115 116 114 117 99 116 32 83 65 70 95 68 98 80 114 111 112
+         115 123 105 110 116 32 109 97 103 105 99 59 99 104 97 114 32 83 70 105
+         108 101 68 105 114 91 49 48 50 52 93 59 99 104 97 114 32 73 109 112 111
+         114 116 70 105 108 101 91 49 48 50 52 93 59 105 110 116 32 112 97 114
+         97 108 108 101 108 59 115 116 114 117 99 116 32 83 65 70 95 86 101 114
+         115 105 111 110 73 110 102 111 123 105 110 116 32 118 109 97 106 111
+         114 59 105 110 116 32 118 109 105 110 111 114 59 105 110 116 32 114 101
+         108 59 99 104 97 114 32 97 110 110 111 116 91 49 48 93 59 125 115 97
+         102 97 112 105 59 115 116 114 117 99 116 32 83 65 70 95 86 101 114 115
+         105 111 110 73 110 102 111 123 105 110 116 32 118 109 97 106 111 114 59
+         105 110 116 32 118 109 105 110 111 114 59 105 110 116 32 114 101 108 59
+         99 104 97 114 32 97 110 110 111 116 91 49 48 93 59 125 115 97 102 108
+         105 98 59 115 116 114 117 99 116 32 83 65 70 95 86 101 114 115 105 111
+         110 73 110 102 111 123 105 110 116 32 118 109 97 106 111 114 59 105 110
+         116 32 118 109 105 110 111 114 59 105 110 116 32 114 101 108 59 99 104
+         97 114 32 97 110 110 111 116 91 49 48 93 59 125 118 98 116 59 115 116
+         114 117 99 116 32 83 65 70 95 86 101 114 115 105 111 110 73 110 102 111
+         123 105 110 116 32 118 109 97 106 111 114 59 105 110 116 32 118 109 105
+         110 111 114 59 105 110 116 32 114 101 108 59 99 104 97 114 32 97 110
+         110 111 116 91 49 48 93 59 125 100 115 108 59 115 116 114 117 99 116 32
+         83 65 70 95 86 101 114 115 105 111 110 73 110 102 111 123 105 110 116
+         32 118 109 97 106 111 114 59 105 110 116 32 118 109 105 110 111 114 59
+         105 110 116 32 114 101 108 59 99 104 97 114 32 97 110 110 111 116 91 49
+         48 93 59 125 104 100 102 53 59 115 116 114 117 99 116 32 83 65 70 95 86
+         101 114 115 105 111 110 73 110 102 111 123 105 110 116 32 118 109 97
+         106 111 114 59 105 110 116 32 118 109 105 110 111 114 59 105 110 116 32
+         114 101 108 59 99 104 97 114 32 97 110 110 111 116 91 49 48 93 59 125
+         109 112 105 59 105 110 116 32 68 111 84 111 99 59 105 110 116 32 82 101
+         97 100 79 110 108 121 59 105 110 116 32 67 108 111 98 98 101 114 59 105
+         110 116 32 79 83 77 111 100 101 115 59 125 59 10 47 115 115 114 101 108
+         45 95 48 48 48 48 32 68 65 84 65 83 69 84 32 105 110 116 59 10 47 115
+         115 114 101 108 45 95 48 48 48 49 32 68 65 84 65 83 69 84 32 105 110
+         116 59 10 47 115 115 114 101 108 45 95 48 48 48 50 32 68 65 84 65 83 69
+         84 32 105 110 116 59 10 47 115 115 114 101 108 45 95 48 48 48 51 32 68
+         65 84 65 83 69 84 32 105 110 116 59 10 47 115 115 114 101 108 45 95 48
+         48 48 52 32 68 65 84 65 83 69 84 32 105 110 116 59 10 47 115 115 114
+         101 108 45 95 48 48 48 53 32 68 65 84 65 83 69 84 32 105 110 116 59 10
+         47 115 115 114 101 108 45 95 48 48 48 54 32 68 65 84 65 83 69 84 32 105
+         110 116 59 10 47 115 115 114 101 108 45 95 48 48 48 55 32 68 65 84 65
+         83 69 84 32 105 110 116 59 10 47 115 115 114 101 108 45 95 48 48 48 56
+         32 68 65 84 65 83 69 84 32 105 110 116 59 10 47 115 115 114 101 108 45
+         95 48 48 48 57 32 68 65 84 65 83 69 84 32 105 110 116 59 10 47 115 115
+         114 101 108 45 95 48 48 49 48 32 68 65 84 65 83 69 84 32 105 110 116 59
+         10 47 115 115 114 101 108 45 95 48 48 49 49 32 68 65 84 65 83 69 84 32
+         105 110 116 59 10 47 115 115 114 101 108 45 95 48 48 49 50 32 68 65 84
+         65 83 69 84 32 105 110 116 59 10 47 116 111 112 111 114 101 108 45 95
+         48 48 49 55 32 68 65 84 65 83 69 84 32 105 110 116 59 10 47 116 111 112
+         111 114 101 108 45 95 48 48 49 56 32 68 65 84 65 83 69 84 32 105 110
+         116 59 10 47 116 111 112 111 114 101 108 45 95 48 48 49 57 32 68 65 84
+         65 83 69 84 32 105 110 116 59 10 47 116 111 112 111 114 101 108 45 95
+         48 48 50 48 32 68 65 84 65 83 69 84 32 105 110 116 59 10 47 102 105 101
+         108 100 45 99 111 111 114 100 115 95 48 48 48 50 32 68 65 84 65 83 69
+         84 32 102 108 111 97 116 59 10 47 102 105 101 108 100 45 100 105 115
+         116 114 105 98 117 116 105 111 110 95 102 97 99 116 111 114 115 95 48
+         48 48 51 32 68 65 84 65 83 69 84 32 102 108 111 97 116 59 10 47 102 105
+         101 108 100 45 116 101 109 112 101 114 97 116 117 114 101 95 48 48 48
+         52 32 68 65 84 65 83 69 84 32 102 108 111 97 116 59 10 47 102 105 101
+         108 100 45 100 105 115 112 108 97 99 101 109 101 110 116 115 95 48 48
+         48 55 32 68 65 84 65 83 69 84 32 102 108 111 97 116 59 10 47 102 105
+         101 108 100 45 115 116 114 101 115 115 95 48 48 49 49 32 68 65 84 65 83
+         69 84 32 102 108 111 97 116 59 10 47 102 105 101 108 100 45 116 101 109
+         112 101 114 97 116 117 114 101 95 48 48 49 50 32 68 65 84 65 83 69 84
+         32 102 108 111 97 116 59 10 47 102 105 101 108 100 45 112 114 101 115
+         115 117 114 101 95 48 48 49 51 32 68 65 84 65 83 69 84 32 102 108 111
+         97 116 59 10 47 66 108 111 98 32 68 65 84 65 83 69 84 32 115 116 114
+         117 99 116 32 66 108 111 98 123 68 83 76 95 79 102 102 115 101 116 32
+         102 105 108 101 95 105 100 59 68 83 76 95 79 102 102 115 101 116 32 100
+         97 116 97 115 101 116 95 105 100 59 68 83 76 95 79 102 102 115 101 116
+         32 111 102 102 115 101 116 59 68 83 76 95 79 102 102 115 101 116 32 115
+         116 114 105 100 101 59 68 83 76 95 79 102 102 115 101 116 32 99 111 117
+         110 116 59 68 83 76 95 79 102 102 115 101 116 32 98 97 115 101 95 105
+         100 59 68 83 76 95 79 102 102 115 101 116 32 110 117 109 95 114 101 99
+         115 59 125 59 10 47 73 110 100 101 120 83 112 101 99 32 68 65 84 65 83
+         69 84 32 115 116 114 117 99 116 32 73 110 100 101 120 83 112 101 99 123
+         105 110 116 32 110 100 105 109 115 59 105 110 116 32 111 114 105 103
+         105 110 115 91 56 93 59 105 110 116 32 115 105 122 101 115 91 56 93 59
+         105 110 116 32 111 114 100 101 114 91 56 93 59 101 110 117 109 32 73
+         110 100 101 120 84 121 112 101 123 86 66 84 95 73 78 68 69 88 95 84 89
+         80 69 95 67 95 79 82 68 69 82 61 48 44 86 66 84 95 73 78 68 69 88 95 84
+         89 80 69 95 70 95 79 82 68 69 82 61 49 44 86 66 84 95 73 78 68 69 88 95
+         84 89 80 69 95 65 78 89 61 45 49 44 86 66 84 95 73 78 68 69 88 95 84 89
+         80 69 95 73 78 86 65 76 73 68 61 45 50 44 86 66 84 95 73 78 68 69 88 95
+         84 89 80 69 95 78 65 61 45 51 44 86 66 84 95 73 78 68 69 88 95 84 89 80
+         69 95 85 78 75 78 79 87 78 61 45 52 125 105 110 100 101 120 95 116 121
+         112 101 59 68 83 76 95 79 102 102 115 101 116 32 98 97 115 101 95 105
+         100 59 68 83 76 95 79 102 102 115 101 116 32 110 117 109 95 114 101 99
+         115 59 125 59 10 47 67 97 116 32 68 65 84 65 83 69 84 32 115 116 114
+         117 99 116 32 67 97 116 123 99 104 97 114 32 110 97 109 101 91 54 52 93
+         59 101 110 117 109 32 82 111 108 101 123 86 66 84 95 82 79 76 69 95 84
+         79 80 79 61 48 44 86 66 84 95 82 79 76 69 95 66 78 68 61 49 44 86 66 84
+         95 82 79 76 69 95 80 82 79 67 61 50 44 86 66 84 95 82 79 76 69 95 68 79
+         77 78 61 51 44 86 66 84 95 82 79 76 69 95 66 76 79 67 75 61 52 44 86 66
+         84 95 82 79 76 69 95 65 83 83 89 61 53 44 86 66 84 95 82 79 76 69 95 77
+         65 84 61 54 44 86 66 84 95 82 79 76 69 95 88 80 82 79 68 61 55 44 86 66
+         84 95 82 79 76 69 95 85 83 69 82 68 61 56 44 86 66 84 95 82 79 76 69 95
+         65 78 89 61 45 49 44 86 66 84 95 82 79 76 69 95 73 78 86 65 76 73 68 61
+         45 50 44 86 66 84 95 82 79 76 69 95 78 65 61 45 51 44 86 66 84 95 82 79
+         76 69 95 85 78 75 78 79 87 78 61 45 52 125 114 111 108 101 59 105 110
+         116 32 116 100 105 109 59 68 83 76 95 79 102 102 115 101 116 32 98 97
+         115 101 95 105 100 59 68 83 76 95 79 102 102 115 101 116 32 110 117 109
+         95 114 101 99 115 59 125 59 10 47 83 101 116 32 68 65 84 65 83 69 84 32
+         115 116 114 117 99 116 32 83 101 116 123 105 110 116 32 117 115 101 114
+         95 105 100 59 99 104 97 114 32 110 97 109 101 91 54 52 93 59 105 110
+         116 32 116 100 105 109 59 101 110 117 109 32 83 105 108 82 111 108 101
+         123 86 66 84 95 83 82 79 76 69 95 84 73 77 69 61 48 44 86 66 84 95 83
+         82 79 76 69 95 83 80 65 67 69 61 49 44 86 66 84 95 83 82 79 76 69 95 83
+         84 65 84 69 61 50 44 86 66 84 95 83 82 79 76 69 95 80 65 82 65 77 61 51
+         44 86 66 84 95 83 82 79 76 69 95 67 84 89 80 69 61 52 44 86 66 84 95 83
+         82 79 76 69 95 65 84 89 80 69 61 53 44 86 66 84 95 83 82 79 76 69 95 85
+         83 69 82 68 61 54 44 86 66 84 95 83 82 79 76 69 95 65 78 89 61 45 49 44
+         86 66 84 95 83 82 79 76 69 95 73 78 86 65 76 73 68 61 45 50 44 86 66 84
+         95 83 82 79 76 69 95 78 65 61 45 51 44 86 66 84 95 83 82 79 76 69 95 85
+         78 75 78 79 87 78 61 45 52 125 115 114 111 108 101 59 68 83 76 95 79
+         102 102 115 101 116 32 99 111 108 108 95 105 100 115 91 49 54 93 59 105
+         110 116 32 105 115 95 116 111 112 59 105 110 116 32 105 115 95 101 120
+         116 101 110 100 105 98 108 101 59 68 83 76 95 79 102 102 115 101 116 32
+         100 102 108 116 95 99 111 111 114 100 102 108 100 95 105 100 59 68 83
+         76 95 79 102 102 115 101 116 32 98 110 100 95 115 101 116 95 105 100 59
+         68 83 76 95 79 102 102 115 101 116 32 98 97 115 101 95 105 100 59 68 83
+         76 95 79 102 102 115 101 116 32 110 117 109 95 114 101 99 115 59 125 59
+         10 47 67 111 108 108 101 99 116 105 111 110 32 68 65 84 65 83 69 84 32
+         115 116 114 117 99 116 32 67 111 108 108 101 99 116 105 111 110 123 68
+         83 76 95 79 102 102 115 101 116 32 99 111 110 116 97 105 110 105 110
+         103 95 115 101 116 95 105 100 59 68 83 76 95 79 102 102 115 101 116 32
+         99 97 116 95 105 100 59 101 110 117 109 32 67 101 108 108 84 121 112
+         101 123 86 66 84 95 67 69 76 76 95 84 89 80 69 95 78 79 78 69 61 48 44
+         86 66 84 95 67 69 76 76 95 84 89 80 69 95 80 79 73 78 84 61 49 44 86 66
+         84 95 67 69 76 76 95 84 89 80 69 95 76 73 78 69 61 50 44 86 66 84 95 67
+         69 76 76 95 84 89 80 69 95 84 82 73 61 51 44 86 66 84 95 67 69 76 76 95
+         84 89 80 69 95 81 85 65 68 61 52 44 86 66 84 95 67 69 76 76 95 84 89 80
+         69 95 84 69 84 61 53 44 86 66 84 95 67 69 76 76 95 84 89 80 69 95 80 89
+         82 65 77 73 68 61 54 44 86 66 84 95 67 69 76 76 95 84 89 80 69 95 80 82
+         73 83 77 61 55 44 86 66 84 95 67 69 76 76 95 84 89 80 69 95 72 69 88 61
+         56 44 86 66 84 95 67 69 76 76 95 84 89 80 69 95 77 73 88 69 68 61 57 44
+         86 66 84 95 67 69 76 76 95 84 89 80 69 95 65 82 66 61 49 48 44 86 66 84
+         95 67 69 76 76 95 84 89 80 69 95 49 66 65 76 76 61 49 49 44 86 66 84 95
+         67 69 76 76 95 84 89 80 69 95 50 66 65 76 76 61 49 50 44 86 66 84 95 67
+         69 76 76 95 84 89 80 69 95 51 66 65 76 76 61 49 51 44 86 66 84 95 67 69
+         76 76 95 84 89 80 69 95 49 83 72 69 76 76 61 49 52 44 86 66 84 95 67 69
+         76 76 95 84 89 80 69 95 50 83 72 69 76 76 61 49 53 44 86 66 84 95 67 69
+         76 76 95 84 89 80 69 95 65 78 89 61 45 49 44 86 66 84 95 67 69 76 76 95
+         84 89 80 69 95 73 78 86 65 76 73 68 61 45 50 44 86 66 84 95 67 69 76 76
+         95 84 89 80 69 95 78 65 61 45 51 44 86 66 84 95 67 69 76 76 95 84 89 80
+         69 95 85 78 75 78 79 87 78 61 45 52 125 99 101 108 108 95 116 121 112
+         101 59 105 110 116 32 99 111 117 110 116 59 68 83 76 95 79 102 102 115
+         101 116 32 105 110 100 101 120 105 110 103 95 105 100 59 105 110 116 32
+         105 115 95 100 101 99 111 109 112 59 68 83 76 95 79 102 102 115 101 116
+         32 109 101 109 98 101 114 115 95 98 108 111 98 95 105 100 59 68 83 76
+         95 79 102 102 115 101 116 32 98 97 115 101 95 105 100 59 68 83 76 95 79
+         102 102 115 101 116 32 110 117 109 95 114 101 99 115 59 125 59 10 47 82
+         101 108 97 116 105 111 110 32 68 65 84 65 83 69 84 32 115 116 114 117
+         99 116 32 82 101 108 97 116 105 111 110 123 68 83 76 95 79 102 102 115
+         101 116 32 115 117 98 95 105 100 59 68 83 76 95 79 102 102 115 101 116
+         32 115 117 98 95 99 97 116 95 105 100 59 68 83 76 95 79 102 102 115 101
+         116 32 115 117 98 95 100 101 99 111 109 112 95 99 97 116 95 105 100 59
+         68 83 76 95 79 102 102 115 101 116 32 115 117 112 95 105 100 59 68 83
+         76 95 79 102 102 115 101 116 32 115 117 112 95 99 97 116 95 105 100 59
+         68 83 76 95 79 102 102 115 101 116 32 115 117 112 95 100 101 99 111 109
+         112 95 99 97 116 95 105 100 59 101 110 117 109 32 82 101 108 75 105 110
+         100 123 86 66 84 95 82 69 76 75 73 78 68 95 83 85 66 83 69 84 61 48 44
+         86 66 84 95 82 69 76 75 73 78 68 95 83 85 80 83 69 84 61 49 44 86 66 84
+         95 82 69 76 75 73 78 68 95 66 79 85 78 68 61 50 44 86 66 84 95 82 69 76
+         75 73 78 68 95 80 69 82 77 85 84 69 61 51 44 86 66 84 95 82 69 76 75 73
+         78 68 95 78 69 73 71 72 66 79 82 61 52 44 86 66 84 95 82 69 76 75 73 78
+         68 95 67 79 80 89 61 53 44 86 66 84 95 82 69 76 75 73 78 68 95 69 81 85
+         65 76 61 54 44 86 66 84 95 82 69 76 75 73 78 68 95 65 78 89 61 45 49 44
+         86 66 84 95 82 69 76 75 73 78 68 95 73 78 86 65 76 73 68 61 45 50 44 86
+         66 84 95 82 69 76 75 73 78 68 95 78 65 61 45 51 44 86 66 84 95 82 69 76
+         75 73 78 68 95 85 78 75 78 79 87 78 61 45 52 125 107 105 110 100 59 101
+         110 117 109 32 82 101 108 82 101 112 123 86 66 84 95 82 69 76 82 69 80
+         95 73 68 69 78 84 73 84 89 61 48 44 86 66 84 95 82 69 76 82 69 80 95 72
+         76 73 83 84 61 49 44 86 66 84 95 82 69 76 82 69 80 95 84 76 73 83 84 61
+         50 44 86 66 84 95 82 69 76 82 69 80 95 84 76 73 83 84 95 49 61 51 44 86
+         66 84 95 82 69 76 82 69 80 95 69 76 73 83 84 61 52 44 86 66 84 95 82 69
+         76 82 69 80 95 83 84 82 85 67 84 85 82 69 68 61 53 44 86 66 84 95 82 69
+         76 82 69 80 95 85 78 83 84 82 85 67 84 85 82 69 68 61 54 44 86 66 84 95
+         82 69 76 82 69 80 95 65 82 66 73 84 82 65 82 89 95 82 61 55 44 86 66 84
+         95 82 69 76 82 69 80 95 65 82 66 73 84 82 65 82 89 95 68 82 61 56 44 86
+         66 84 95 82 69 76 82 69 80 95 65 78 89 61 45 49 44 86 66 84 95 82 69 76
+         82 69 80 95 73 78 86 65 76 73 68 61 45 50 44 86 66 84 95 82 69 76 82 69
+         80 95 78 65 61 45 51 44 86 66 84 95 82 69 76 82 69 80 95 85 78 75 78 79
+         87 78 61 45 52 125 114 101 112 95 116 121 112 101 59 68 83 76 95 79 102
+         102 115 101 116 32 100 95 98 108 111 98 95 105 100 59 68 83 76 95 79
+         102 102 115 101 116 32 114 95 98 108 111 98 95 105 100 59 68 83 76 95
+         79 102 102 115 101 116 32 98 97 115 101 95 105 100 59 68 83 76 95 79
+         102 102 115 101 116 32 110 117 109 95 114 101 99 115 59 125 59 10 47 70
+         105 101 108 100 84 109 112 108 32 68 65 84 65 83 69 84 32 115 116 114
+         117 99 116 32 70 105 101 108 100 84 109 112 108 123 99 104 97 114 32
+         110 97 109 101 91 54 52 93 59 68 83 76 95 79 102 102 115 101 116 32 98
+         97 115 101 95 115 112 97 99 101 95 105 100 59 101 110 117 109 32 65 108
+         103 101 98 114 97 105 99 84 121 112 101 123 86 66 84 95 65 76 71 69 66
+         82 65 73 67 95 84 89 80 69 95 67 79 78 83 84 65 78 84 61 48 44 86 66 84
+         95 65 76 71 69 66 82 65 73 67 95 84 89 80 69 95 67 79 77 80 79 78 69 78
+         84 61 49 44 86 66 84 95 65 76 71 69 66 82 65 73 67 95 84 89 80 69 95 83
+         67 65 76 65 82 61 50 44 86 66 84 95 65 76 71 69 66 82 65 73 67 95 84 89
+         80 69 95 86 69 67 84 79 82 61 51 44 86 66 84 95 65 76 71 69 66 82 65 73
+         67 95 84 89 80 69 95 84 69 78 83 79 82 61 52 44 86 66 84 95 65 76 71 69
+         66 82 65 73 67 95 84 89 80 69 95 83 89 77 95 84 69 78 83 79 82 61 53 44
+         86 66 84 95 65 76 71 69 66 82 65 73 67 95 84 89 80 69 95 70 73 69 76 68
+         61 54 44 86 66 84 95 65 76 71 69 66 82 65 73 67 95 84 89 80 69 95 83 84
+         65 84 69 61 55 44 86 66 84 95 65 76 71 69 66 82 65 73 67 95 84 89 80 69
+         95 84 85 80 76 69 61 56 44 86 66 84 95 65 76 71 69 66 82 65 73 67 95 84
+         89 80 69 95 65 78 89 61 45 49 44 86 66 84 95 65 76 71 69 66 82 65 73 67
+         95 84 89 80 69 95 73 78 86 65 76 73 68 61 45 50 44 86 66 84 95 65 76 71
+         69 66 82 65 73 67 95 84 89 80 69 95 78 65 61 45 51 44 86 66 84 95 65 76
+         71 69 66 82 65 73 67 95 84 89 80 69 95 85 78 75 78 79 87 78 61 45 52
+         125 97 108 103 95 116 121 112 101 59 101 110 117 109 32 66 97 115 105
+         115 84 121 112 101 123 86 66 84 95 66 65 83 73 83 95 84 89 80 69 95 85
+         78 73 84 89 61 48 44 86 66 84 95 66 65 83 73 83 95 84 89 80 69 95 67 65
+         82 84 69 83 73 65 78 61 49 44 86 66 84 95 66 65 83 73 83 95 84 89 80 69
+         95 83 80 72 69 82 73 67 65 76 61 50 44 86 66 84 95 66 65 83 73 83 95 84
+         89 80 69 95 67 89 76 73 78 68 82 73 67 65 76 61 51 44 86 66 84 95 66 65
+         83 73 83 95 84 89 80 69 95 85 80 80 69 82 95 84 82 73 61 52 44 86 66 84
+         95 66 65 83 73 83 95 84 89 80 69 95 70 79 85 82 73 69 82 61 53 44 86 66
+         84 95 66 65 83 73 83 95 84 89 80 69 95 86 65 82 73 65 66 76 69 61 54 44
+         86 66 84 95 66 65 83 73 83 95 84 89 80 69 95 65 78 89 61 45 49 44 86 66
+         84 95 66 65 83 73 83 95 84 89 80 69 95 73 78 86 65 76 73 68 61 45 50 44
+         86 66 84 95 66 65 83 73 83 95 84 89 80 69 95 78 65 61 45 51 44 86 66 84
+         95 66 65 83 73 83 95 84 89 80 69 95 85 78 75 78 79 87 78 61 45 52 125
+         98 97 115 105 115 59 68 83 76 95 79 102 102 115 101 116 32 113 117 97
+         110 116 105 116 121 95 105 100 59 105 110 116 32 110 117 109 95 99 111
+         109 112 115 59 68 83 76 95 79 102 102 115 101 116 32 102 116 109 112
+         108 95 105 100 115 95 98 108 111 98 95 105 100 59 68 83 76 95 79 102
+         102 115 101 116 32 98 97 115 101 95 105 100 59 68 83 76 95 79 102 102
+         115 101 116 32 110 117 109 95 114 101 99 115 59 125 59 10 47 70 105 101
+         108 100 32 68 65 84 65 83 69 84 32 115 116 114 117 99 116 32 70 105 101
+         108 100 123 68 83 76 95 79 102 102 115 101 116 32 102 116 109 112 108
+         95 105 100 59 99 104 97 114 32 110 97 109 101 91 54 52 93 59 68 83 76
+         95 79 102 102 115 101 116 32 117 110 105 116 115 95 105 100 59 68 83 76
+         95 79 102 102 115 101 116 32 115 116 111 114 97 103 101 95 100 101 99
+         111 109 112 95 99 97 116 95 105 100 59 101 110 117 109 32 73 110 116
+         101 114 108 101 97 118 101 123 86 66 84 95 73 78 84 69 82 76 69 65 86
+         69 95 67 79 77 80 79 78 69 78 84 61 48 44 86 66 84 95 73 78 84 69 82 76
+         69 65 86 69 95 86 69 67 84 79 82 61 49 44 86 66 84 95 73 78 84 69 82 76
+         69 65 86 69 95 73 78 68 69 80 69 78 68 69 78 84 61 50 44 86 66 84 95 73
+         78 84 69 82 76 69 65 86 69 95 78 79 78 69 61 51 44 86 66 84 95 73 78 84
+         69 82 76 69 65 86 69 95 65 78 89 61 45 49 44 86 66 84 95 73 78 84 69 82
+         76 69 65 86 69 95 73 78 86 65 76 73 68 61 45 50 44 86 66 84 95 73 78 84
+         69 82 76 69 65 86 69 95 78 65 61 45 51 44 86 66 84 95 73 78 84 69 82 76
+         69 65 86 69 95 85 78 75 78 79 87 78 61 45 52 125 99 111 109 112 95 105
+         110 116 108 118 59 68 83 76 95 79 102 102 115 101 116 32 105 110 100
+         101 120 105 110 103 95 105 100 59 68 83 76 95 79 102 102 115 101 116 32
+         100 111 102 95 97 115 115 111 99 95 99 97 116 95 105 100 59 105 110 116
+         32 97 115 115 111 99 95 114 97 116 105 111 59 68 83 76 95 79 102 102
+         115 101 116 32 101 118 97 108 95 100 101 99 111 109 112 95 99 97 116 95
+         105 100 59 101 110 117 109 32 69 118 97 108 70 117 110 99 123 86 66 84
+         95 69 86 65 76 95 70 85 78 67 95 67 79 78 83 84 65 78 84 61 48 44 86 66
+         84 95 69 86 65 76 95 70 85 78 67 95 85 78 73 70 79 82 77 61 49 44 86 66
+         84 95 69 86 65 76 95 70 85 78 67 95 80 87 67 79 78 83 84 61 50 44 86 66
+         84 95 69 86 65 76 95 70 85 78 67 95 80 87 76 73 78 69 65 82 61 51 44 86
+         66 84 95 69 86 65 76 95 70 85 78 67 95 65 78 89 61 45 49 44 86 66 84 95
+         69 86 65 76 95 70 85 78 67 95 73 78 86 65 76 73 68 61 45 50 44 86 66 84
+         95 69 86 65 76 95 70 85 78 67 95 78 65 61 45 51 44 86 66 84 95 69 86 65
+         76 95 70 85 78 67 95 85 78 75 78 79 87 78 61 45 52 125 101 118 97 108
+         95 102 117 110 99 59 105 110 116 32 105 115 95 104 111 109 111 103 101
+         110 101 111 117 115 59 105 110 116 32 105 115 95 99 111 111 114 100 95
+         102 105 101 108 100 59 68 83 76 95 79 102 102 115 101 116 32 99 111 109
+         112 95 105 100 115 95 98 108 111 98 95 105 100 59 68 83 76 95 79 102
+         102 115 101 116 32 99 111 109 112 95 111 114 100 101 114 95 98 108 111
+         98 95 105 100 59 68 83 76 95 79 102 102 115 101 116 32 118 98 97 115
+         105 115 95 98 108 111 98 95 105 100 59 68 83 76 95 79 102 102 115 101
+         116 32 100 111 102 95 98 108 111 98 95 105 100 59 68 83 76 95 79 102
+         102 115 101 116 32 98 97 115 101 95 105 100 59 68 83 76 95 79 102 102
+         115 101 116 32 110 117 109 95 114 101 99 115 59 125 59 10 47 109 101
+         116 97 98 108 111 98 48 48 48 48 48 46 105 110 100 101 120 32 68 65 84
+         65 83 69 84 32 115 116 114 117 99 116 32 73 110 100 101 120 80 97 105
+         114 123 68 83 76 95 79 102 102 115 101 116 32 105 110 100 101 120 59
+         105 110 116 32 108 101 110 103 116 104 59 125 59 10 47 109 101 116 97
+         98 108 111 98 48 48 48 48 48 46 98 108 111 98 32 68 65 84 65 83 69 84
+         32 68 83 76 95 79 102 102 115 101 116 59 10
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="Blob" OBJ-XID="xid_17612-0" H5Path= "/Blob" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ChunkedLayout Ndims="1">
+            <hdf5:ChunkDimension DimSize="1024" />
+            <hdf5:RequiredFilter>
+            </hdf5:RequiredFilter>
+         </hdf5:ChunkedLayout>
+      </hdf5:StorageLayout>
+      <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="24" MaxDimSize="UNLIMITED"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="file_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="dataset_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="offset">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="stride">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="count">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="base_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="num_recs">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         -1 1 0 1 9 0 1 -1 2 0 1 4 1 1 -1 3 0 1 7 2 1 -1 4 0 1 4 3 1
+         -1 5 0 1 5 4 1 -1 6 0 1 3 5 1 -1 7 0 1 4 6 1 -1 8 0 1 1 7 1
+         -1 9 0 1 10 8 1 -1 10 0 1 4 9 1 -1 11 0 1 3 10 1 -1 12 0 1 5 11 1
+         -1 13 0 1 5 12 1 -1 14 0 1 16 13 1 -1 15 0 1 9 14 1 -1 16 0 1 4 15 1
+         -1 17 0 1 16 16 1 -1 18 0 1 36 17 1 -1 19 0 1 5 18 1 -1 20 0 1 5 19 1
+         -1 21 0 1 36 20 1 -1 22 0 1 12 21 1 -1 23 0 1 7 22 1 -1 24 0 1 2 23 1
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="Cat" OBJ-XID="xid_169596-0" H5Path= "/Cat" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ChunkedLayout Ndims="1">
+            <hdf5:ChunkDimension DimSize="1024" />
+            <hdf5:RequiredFilter>
+            </hdf5:RequiredFilter>
+         </hdf5:ChunkedLayout>
+      </hdf5:StorageLayout>
+      <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="5" MaxDimSize="UNLIMITED"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="64" StrPad="H5T_STR_NULLTERM"/>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="role">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:EnumType Nelems="13">
+                     <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                     </hdf5:AtomicType>
+                     </hdf5:DataType>
+                        <hdf5:EnumElement>
+                           TOPO
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           0
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           BND
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           PROC
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           DOMN
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           BLOCK
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           4
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ASSY
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           5
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           MAT
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           6
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           XPROD
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           7
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           USERD
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           8
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ANY
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           INVALID
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           NA
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           UNKNOWN
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -4
+                        </hdf5:EnumValue>
+                     </hdf5:EnumType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="tdim">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="base_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="num_recs">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         "nodes" TOPO 0 0 1 "elems" TOPO 2 1 1 "edges" USERD 1 2 1
+         "blocks" BLOCK 2 3 1 "side_sets" USERD 1 4 1
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="Collection" OBJ-XID="xid_425460-0" H5Path= "/Collection" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ChunkedLayout Ndims="1">
+            <hdf5:ChunkDimension DimSize="1024" />
+            <hdf5:RequiredFilter>
+            </hdf5:RequiredFilter>
+         </hdf5:ChunkedLayout>
+      </hdf5:StorageLayout>
+      <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="24" MaxDimSize="UNLIMITED"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="containing_set_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="cat_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="cell_type">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:EnumType Nelems="20">
+                     <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                     </hdf5:AtomicType>
+                     </hdf5:DataType>
+                        <hdf5:EnumElement>
+                           NONE
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           0
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           POINT
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           LINE
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           TRI
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           QUAD
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           4
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           TET
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           5
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           PYRAMID
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           6
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           PRISM
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           7
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           HEX
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           8
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           MIXED
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           9
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ARB
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           10
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           1BALL
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           11
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           2BALL
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           12
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           3BALL
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           13
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           1SHELL
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           14
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           2SHELL
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           15
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ANY
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           INVALID
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           NA
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           UNKNOWN
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -4
+                        </hdf5:EnumValue>
+                     </hdf5:EnumType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="count">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="indexing_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="is_decomp">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="members_blob_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="base_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="num_recs">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 0 POINT 18 0 0 -2 0 1 0 1 MIXED 12 1 1 -2 1 1 0 3 NONE 4 2 1 0 2 1
+         0 4 NONE 2 3 0 1 3 1 1 0 POINT 9 4 0 -2 4 1 1 1 QUAD 4 5 1 -2 5 1
+         1 3 NONE 1 6 1 2 6 1 2 0 POINT 7 7 0 -2 7 1 2 1 MIXED 4 8 1 -2 8 1
+         2 3 NONE 2 9 1 3 9 1 3 0 POINT 10 10 0 -2 10 1 3 1 QUAD 4 11 1 -2 11 1
+         3 3 NONE 1 12 1 4 12 1 4 0 POINT 3 13 0 -2 13 1 4 2 LINE 2 14 1 -2 14 1
+         5 0 POINT 5 15 0 -2 15 1 5 2 LINE 4 16 1 -2 16 1
+         6 0 POINT 5 17 1 -2 17 1 7 0 POINT 5 18 0 -2 18 1
+         7 1 TRI 3 19 1 -2 19 1 7 3 NONE 1 20 1 5 20 1 8 0 POINT 4 21 0 -2 21 1
+         8 1 QUAD 1 22 1 -2 22 1 8 3 NONE 1 23 1 6 23 1
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="Field" OBJ-XID="xid_619980-0" H5Path= "/Field" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ChunkedLayout Ndims="1">
+            <hdf5:ChunkDimension DimSize="1024" />
+            <hdf5:RequiredFilter>
+            </hdf5:RequiredFilter>
+         </hdf5:ChunkedLayout>
+      </hdf5:StorageLayout>
+      <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="14" MaxDimSize="UNLIMITED"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="ftmpl_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="64" StrPad="H5T_STR_NULLTERM"/>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="units_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="storage_decomp_cat_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="comp_intlv">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:EnumType Nelems="8">
+                     <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                     </hdf5:AtomicType>
+                     </hdf5:DataType>
+                        <hdf5:EnumElement>
+                           COMPONENT
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           0
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           VECTOR
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           INDEPENDENT
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           NONE
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ANY
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           INVALID
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           NA
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           UNKNOWN
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -4
+                        </hdf5:EnumValue>
+                     </hdf5:EnumType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="indexing_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="dof_assoc_cat_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="assoc_ratio">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="eval_decomp_cat_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="eval_func">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:EnumType Nelems="8">
+                     <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                     </hdf5:AtomicType>
+                     </hdf5:DataType>
+                        <hdf5:EnumElement>
+                           CONSTANT
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           0
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           UNIFORM
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           PWCONST
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           PWLINEAR
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ANY
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           INVALID
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           NA
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           UNKNOWN
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -4
+                        </hdf5:EnumValue>
+                     </hdf5:EnumType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="is_homogeneous">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="is_coord_field">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="comp_ids_blob_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="comp_order_blob_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="vbasis_blob_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="dof_blob_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="base_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="num_recs">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         1 "X" -7 -2 NONE -2 0 1 0 PWLINEAR 1 0 -2 -2 -2 -2 0 1
+         1 "Y" -7 -2 NONE -2 0 1 0 PWLINEAR 1 0 -2 -2 -2 -2 1 1
+         0 "coords" -7 -2 VECTOR -2 0 1 0 PWLINEAR 1 1 7 -2 -2 17 2 1
+         2 "distribution factors" -5 -2 NONE -2 0 1 0 PWLINEAR 1 0 -2 -2 -2 18 3 1
+         3 "temperature" -7 -2 NONE -2 0 1 0 PWLINEAR 1 0 -2 -2 -2 19 4 1
+         1 "dX" -7 -2 NONE -2 0 1 0 PWLINEAR 1 0 -2 -2 -2 -2 5 1
+         1 "dY" -7 -2 NONE -2 0 1 0 PWLINEAR 1 0 -2 -2 -2 -2 6 1
+         0 "displacements" -7 -2 VECTOR -2 0 1 0 PWLINEAR 1 0 8 -2 -2 20 7 1
+         5 "Sx" -7 -2 NONE -2 1 1 1 PWCONST 1 0 -2 -2 -2 -2 8 1
+         5 "Sy" -7 -2 NONE -2 1 1 1 PWCONST 1 0 -2 -2 -2 -2 9 1
+         5 "Sxy" -7 -2 NONE -2 1 1 1 PWCONST 1 0 -2 -2 -2 -2 10 1
+         4 "stress" -7 -2 VECTOR -2 1 1 1 PWCONST 1 0 9 -2 -2 21 11 1
+         6 "temperature" -7 -2 NONE -2 0 1 0 PWLINEAR 1 0 -2 -2 -2 22 12 1
+         7 "pressure" -7 -2 NONE -2 2 1 2 PWCONST 1 0 -2 -2 -2 23 13 1
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="FieldTmpl" OBJ-XID="xid_518404-0" H5Path= "/FieldTmpl" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ChunkedLayout Ndims="1">
+            <hdf5:ChunkDimension DimSize="1024" />
+            <hdf5:RequiredFilter>
+            </hdf5:RequiredFilter>
+         </hdf5:ChunkedLayout>
+      </hdf5:StorageLayout>
+      <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="8" MaxDimSize="UNLIMITED"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="64" StrPad="H5T_STR_NULLTERM"/>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="base_space_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="alg_type">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:EnumType Nelems="13">
+                     <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                     </hdf5:AtomicType>
+                     </hdf5:DataType>
+                        <hdf5:EnumElement>
+                           CONSTANT
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           0
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           COMPONENT
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           SCALAR
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           VECTOR
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           TENSOR
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           4
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           SYM_TENSOR
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           5
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           FIELD
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           6
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           STATE
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           7
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           TUPLE
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           8
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ANY
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           INVALID
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           NA
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           UNKNOWN
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -4
+                        </hdf5:EnumValue>
+                     </hdf5:EnumType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="basis">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:EnumType Nelems="11">
+                     <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                     </hdf5:AtomicType>
+                     </hdf5:DataType>
+                        <hdf5:EnumElement>
+                           UNITY
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           0
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           CARTESIAN
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           SPHERICAL
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           CYLINDRICAL
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           UPPER_TRI
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           4
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           FOURIER
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           5
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           VARIABLE
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           6
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ANY
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           INVALID
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           NA
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           UNKNOWN
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -4
+                        </hdf5:EnumValue>
+                     </hdf5:EnumType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="quantity_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="num_comps">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="ftmpl_ids_blob_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="base_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="num_recs">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         "coordinate_tmpl" 0 VECTOR CARTESIAN 2 2 0 0 1
+         "coordinate_tmpl_component" 0 SCALAR CARTESIAN 2 1 0 1 1
+         "distrib_factors_tmpl" 5 SCALAR UNITY -5 1 0 2 1
+         "temp_on_ns1_tmpl" 6 SCALAR UNITY 0 1 0 3 1
+         "stress_on_cell_1_tmpl" 1 SYM_TENSOR UPPER_TRI 0 3 0 4 1
+         "stress_on_cell_1_tmpl_component" 1 SCALAR UPPER_TRI 0 1 0 5 1
+         "temp_on_cell_2_tmpl" 2 SCALAR UNITY 1 1 0 6 1
+         "pressure_on_ss1" 4 SCALAR UNITY 0 1 0 7 1
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="IndexSpec" OBJ-XID="xid_51916-0" H5Path= "/IndexSpec" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ChunkedLayout Ndims="1">
+            <hdf5:ChunkDimension DimSize="1024" />
+            <hdf5:RequiredFilter>
+            </hdf5:RequiredFilter>
+         </hdf5:ChunkedLayout>
+      </hdf5:StorageLayout>
+      <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="24" MaxDimSize="UNLIMITED"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="ndims">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="origins">
+               <hdf5:DataType>
+                  <hdf5:CompoundType>
+                     <hdf5:Field FieldName="_">
+                        <hdf5:DataType>
+                           <hdf5:ArrayType Ndims="1">
+                              <hdf5:ArrayDimension DimSize="8" DimPerm="0"/>
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:ArrayType>
+                        </hdf5:DataType>
+                     </hdf5:Field>
+                  </hdf5:CompoundType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="sizes">
+               <hdf5:DataType>
+                  <hdf5:CompoundType>
+                     <hdf5:Field FieldName="_">
+                        <hdf5:DataType>
+                           <hdf5:ArrayType Ndims="1">
+                              <hdf5:ArrayDimension DimSize="8" DimPerm="0"/>
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:ArrayType>
+                        </hdf5:DataType>
+                     </hdf5:Field>
+                  </hdf5:CompoundType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="order">
+               <hdf5:DataType>
+                  <hdf5:CompoundType>
+                     <hdf5:Field FieldName="_">
+                        <hdf5:DataType>
+                           <hdf5:ArrayType Ndims="1">
+                              <hdf5:ArrayDimension DimSize="8" DimPerm="0"/>
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:ArrayType>
+                        </hdf5:DataType>
+                     </hdf5:Field>
+                  </hdf5:CompoundType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="index_type">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:EnumType Nelems="6">
+                     <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                     </hdf5:AtomicType>
+                     </hdf5:DataType>
+                        <hdf5:EnumElement>
+                           C_ORDER
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           0
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           F_ORDER
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ANY
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           INVALID
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           NA
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           UNKNOWN
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -4
+                        </hdf5:EnumValue>
+                     </hdf5:EnumType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="base_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="num_recs">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         1  0 0 0 0 0 0 0 0  18 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 0 1
+         1  0 0 0 0 0 0 0 0  12 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 1 1
+         1  0 0 0 0 0 0 0 0  4 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 2 1
+         1  0 0 0 0 0 0 0 0  2 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 3 1
+         1  0 0 0 0 0 0 0 0  9 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 4 1
+         1  0 0 0 0 0 0 0 0  4 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 5 1
+         1  0 0 0 0 0 0 0 0  1 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 6 1
+         1  0 0 0 0 0 0 0 0  7 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 7 1
+         1  0 0 0 0 0 0 0 0  4 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 8 1
+         1  0 0 0 0 0 0 0 0  2 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 9 1
+         1  0 0 0 0 0 0 0 0  10 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 10 1
+         1  0 0 0 0 0 0 0 0  4 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 11 1
+         1  0 0 0 0 0 0 0 0  1 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 12 1
+         1  0 0 0 0 0 0 0 0  3 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 13 1
+         1  0 0 0 0 0 0 0 0  2 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 14 1
+         1  0 0 0 0 0 0 0 0  5 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 15 1
+         1  0 0 0 0 0 0 0 0  4 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 16 1
+         1  0 0 0 0 0 0 0 0  5 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 17 1
+         1  0 0 0 0 0 0 0 0  5 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 18 1
+         1  0 0 0 0 0 0 0 0  3 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 19 1
+         1  0 0 0 0 0 0 0 0  1 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 20 1
+         1  0 0 0 0 0 0 0 0  4 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 21 1
+         1  0 0 0 0 0 0 0 0  1 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 22 1
+         1  0 0 0 0 0 0 0 0  1 0 0 0 0 0 0 0  0 0 0 0 0 0 0 0 C_ORDER 23 1
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="Relation" OBJ-XID="xid_465812-0" H5Path= "/Relation" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ChunkedLayout Ndims="1">
+            <hdf5:ChunkDimension DimSize="1024" />
+            <hdf5:RequiredFilter>
+            </hdf5:RequiredFilter>
+         </hdf5:ChunkedLayout>
+      </hdf5:StorageLayout>
+      <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="21" MaxDimSize="UNLIMITED"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="sub_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="sub_cat_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="sub_decomp_cat_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="sup_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="sup_cat_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="sup_decomp_cat_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="kind">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:EnumType Nelems="11">
+                     <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                     </hdf5:AtomicType>
+                     </hdf5:DataType>
+                        <hdf5:EnumElement>
+                           SUBSET
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           0
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           SUPSET
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           BOUND
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           PERMUTE
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           NEIGHBOR
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           4
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           COPY
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           5
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           EQUAL
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           6
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ANY
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           INVALID
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           NA
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           UNKNOWN
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -4
+                        </hdf5:EnumValue>
+                     </hdf5:EnumType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="rep_type">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:EnumType Nelems="13">
+                     <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                     </hdf5:AtomicType>
+                     </hdf5:DataType>
+                        <hdf5:EnumElement>
+                           IDENTITY
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           0
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           HLIST
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           TLIST
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           TLIST_1
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ELIST
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           4
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           STRUCTURED
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           5
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           UNSTRUCTURED
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           6
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ARBITRARY_R
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           7
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ARBITRARY_DR
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           8
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ANY
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           INVALID
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           NA
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           UNKNOWN
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -4
+                        </hdf5:EnumValue>
+                     </hdf5:EnumType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="d_blob_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="r_blob_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="base_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="num_recs">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         1 0 -2 0 0 -2 EQUAL TLIST -2 0 0 1 1 1 -2 0 1 -2 EQUAL TLIST -2 1 1 1
+         2 0 -2 0 0 -2 EQUAL TLIST -2 2 2 1 2 1 -2 0 1 -2 EQUAL TLIST -2 3 3 1
+         7 0 -2 0 0 -2 EQUAL TLIST -2 4 4 1 7 1 -2 0 1 -2 EQUAL TLIST -2 5 5 1
+         8 0 -2 0 0 -2 EQUAL TLIST -2 6 6 1 8 1 -2 0 1 -2 EQUAL TLIST -2 7 7 1
+         3 0 -2 0 0 -2 EQUAL TLIST -2 8 8 1 3 1 -2 0 1 -2 EQUAL TLIST -2 9 9 1
+         4 0 -2 0 0 -2 EQUAL TLIST -2 10 10 1
+         5 0 -2 0 0 -2 EQUAL TLIST -2 11 11 1
+         6 0 -2 0 0 -2 EQUAL TLIST -2 12 12 1
+         1 3 -2 0 3 -2 EQUAL TLIST -2 -2 13 1
+         7 3 -2 0 3 -2 EQUAL TLIST -2 -2 14 1
+         8 3 -2 0 3 -2 EQUAL TLIST -2 -2 15 1
+         3 3 -2 0 3 -2 EQUAL TLIST -2 -2 16 1
+         1 1 -2 0 0 -2 SUBSET UNSTRUCTURED -2 13 17 1
+         7 1 -2 0 0 -2 SUBSET UNSTRUCTURED -2 14 18 1
+         8 1 -2 0 0 -2 SUBSET UNSTRUCTURED -2 15 19 1
+         3 1 -2 0 0 -2 SUBSET UNSTRUCTURED -2 16 20 1
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="Set" OBJ-XID="xid_254332-0" H5Path= "/Set" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ChunkedLayout Ndims="1">
+            <hdf5:ChunkDimension DimSize="1024" />
+            <hdf5:RequiredFilter>
+            </hdf5:RequiredFilter>
+         </hdf5:ChunkedLayout>
+      </hdf5:StorageLayout>
+      <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="9" MaxDimSize="UNLIMITED"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="user_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="name">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="64" StrPad="H5T_STR_NULLTERM"/>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="tdim">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="srole">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:EnumType Nelems="11">
+                     <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                     </hdf5:AtomicType>
+                     </hdf5:DataType>
+                        <hdf5:EnumElement>
+                           TIME
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           0
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           SPACE
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           STATE
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           PARAM
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           CTYPE
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           4
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ATYPE
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           5
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           USERD
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           6
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           ANY
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -1
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           INVALID
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -2
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           NA
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -3
+                        </hdf5:EnumValue>
+                        <hdf5:EnumElement>
+                           UNKNOWN
+                        </hdf5:EnumElement>
+                        <hdf5:EnumValue>
+                           -4
+                        </hdf5:EnumValue>
+                     </hdf5:EnumType>
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="coll_ids">
+               <hdf5:DataType>
+                  <hdf5:CompoundType>
+                     <hdf5:Field FieldName="_">
+                        <hdf5:DataType>
+                           <hdf5:ArrayType Ndims="1">
+                              <hdf5:ArrayDimension DimSize="16" DimPerm="0"/>
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:ArrayType>
+                        </hdf5:DataType>
+                     </hdf5:Field>
+                  </hdf5:CompoundType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="is_top">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="is_extendible">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="dflt_coordfld_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="bnd_set_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="base_id">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="num_recs">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 "TOP_CELL" 2 SPACE  0 1 -2 2 3 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 1 0 -2 -2 0 1
+         0 "CELL_1" 2 SPACE  4 5 -2 6 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 0 0 -2 -2 1 1
+         0 "CELL_2" 2 SPACE  7 8 -2 9 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 0 0 -2 -2 2 1
+         0 "CELL_3" 2 SPACE  10 11 -2 12 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 0 0 -2 -2 3 1
+         0 "SIDE_SET_1" 1 SPACE  13 -2 14 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 0 0 -2 -2 4 1
+         0 "SIDE_SET_2" 1 SPACE  15 -2 16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 0 0 -2 -2 5 1
+         0 "NODE_SET_1" 0 SPACE  17 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 0 0 -2 -2 6 1
+         0 "CELL_2_TRIS" 2 SPACE  18 19 -2 20 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 0 0 -2 -2 7 1
+         0 "CELL_2_QUADS" 2 SPACE  21 22 -2 23 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 0 0 -2 -2 8 1
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="field-coords_0002" OBJ-XID="xid_14968-0" H5Path= "/field-coords_0002" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="36" MaxDimSize="36"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 4 1 4 2 4 2.5 4 0 3 1 3 2 3 2.5 3 0 2 1 2 2 2 2.5 2 0 1 2 1 2.5 1 0 0
+         2 0 2.5 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="field-displacements_0007" OBJ-XID="xid_15968-0" H5Path= "/field-displacements_0007" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="36" MaxDimSize="36"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
+         0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
+         0.25 0.25 0.25 0.25 0.25 0.25 0.25 0.25
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="field-distribution_factors_0003" OBJ-XID="xid_15384-0" H5Path= "/field-distribution_factors_0003" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="5" MaxDimSize="5"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         4 3 2 1 0
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="field-pressure_0013" OBJ-XID="xid_17332-0" H5Path= "/field-pressure_0013" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="2" MaxDimSize="2"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         45 55
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="field-stress_0011" OBJ-XID="xid_16384-0" H5Path= "/field-stress_0011" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="12" MaxDimSize="12"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0.5 0.25 0.5 0.5 0.25 0.5 0.5 0.25 0.5 0.5 0.25 0.5
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="field-temperature_0004" OBJ-XID="xid_15676-0" H5Path= "/field-temperature_0004" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="5" MaxDimSize="5"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         100 150 150 100 75
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="field-temperature_0012" OBJ-XID="xid_17032-0" H5Path= "/field-temperature_0012" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="7" MaxDimSize="7"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:FloatType ByteOrder="BE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         75 95 120 80 115 85 110
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="metablob00000.blob" OBJ-XID="xid_761500-0" H5Path= "/metablob00000.blob" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ChunkedLayout Ndims="1">
+            <hdf5:ChunkDimension DimSize="32" />
+            <hdf5:RequiredFilter>
+            </hdf5:RequiredFilter>
+         </hdf5:ChunkedLayout>
+      </hdf5:StorageLayout>
+      <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="19" MaxDimSize="UNLIMITED"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         1 7 8 3 -2 -2 -2 -2 -2 -2 -2 -2 0 1 5 6 8 9 10
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="metablob00000.index" OBJ-XID="xid_758876-0" H5Path= "/metablob00000.index" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ChunkedLayout Ndims="1">
+            <hdf5:ChunkDimension DimSize="32" />
+            <hdf5:RequiredFilter>
+            </hdf5:RequiredFilter>
+         </hdf5:ChunkedLayout>
+      </hdf5:StorageLayout>
+      <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Incremental">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="UNLIMITED"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="index">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="length">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 4 4 2 6 1 7 2 9 1 10 1 11 1 12 2 14 2 16 3
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="ssrel-_0000" OBJ-XID="xid_8924-0" H5Path= "/ssrel-_0000" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="9" MaxDimSize="9"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         1 2 3 5 6 7 9 10 11
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="ssrel-_0001" OBJ-XID="xid_9232-0" H5Path= "/ssrel-_0001" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         1 2 4 5
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="ssrel-_0002" OBJ-XID="xid_9520-0" H5Path= "/ssrel-_0002" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="7" MaxDimSize="7"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         9 10 11 13 14 16 17
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="ssrel-_0003" OBJ-XID="xid_9820-0" H5Path= "/ssrel-_0003" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         7 8 9 11
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="ssrel-_0004" OBJ-XID="xid_10108-0" H5Path= "/ssrel-_0004" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="5" MaxDimSize="5"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         9 10 11 13 14
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="ssrel-_0005" OBJ-XID="xid_10400-0" H5Path= "/ssrel-_0005" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="3" MaxDimSize="3"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         7 8 9
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="ssrel-_0006" OBJ-XID="xid_10684-0" H5Path= "/ssrel-_0006" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         13 14 16 17
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="ssrel-_0007" OBJ-XID="xid_11300-0" H5Path= "/ssrel-_0007" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="1" MaxDimSize="1"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         11
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="ssrel-_0008" OBJ-XID="xid_11576-0" H5Path= "/ssrel-_0008" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         3 4 7 8 11 12 14 15 17 18
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="ssrel-_0009" OBJ-XID="xid_11888-0" H5Path= "/ssrel-_0009" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         3 6 10 12
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="ssrel-_0010" OBJ-XID="xid_12176-0" H5Path= "/ssrel-_0010" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="3" MaxDimSize="3"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         9 10 11
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="ssrel-_0011" OBJ-XID="xid_12788-0" H5Path= "/ssrel-_0011" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="5" MaxDimSize="5"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         1 5 9 13 16
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="ssrel-_0012" OBJ-XID="xid_13080-0" H5Path= "/ssrel-_0012" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="5" MaxDimSize="5"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         4 8 12 15 18
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="toporel-_0017" OBJ-XID="xid_13372-0" H5Path= "/toporel-_0017" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="16" MaxDimSize="16"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         1 2 6 5 2 3 7 6 5 6 10 9 6 7 11 10
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="toporel-_0018" OBJ-XID="xid_13708-0" H5Path= "/toporel-_0018" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="9" MaxDimSize="9"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         9 10 13 10 14 13 10 11 14
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="toporel-_0019" OBJ-XID="xid_14344-0" H5Path= "/toporel-_0019" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         13 14 17 16
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="toporel-_0020" OBJ-XID="xid_14632-0" H5Path= "/toporel-_0020" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="16" MaxDimSize="16"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         3 4 8 7 7 8 12 11 11 12 15 14 14 15 18 17
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Group Name=".attributes" OBJ-XID="xid_5072-0" H5Path="/.attributes" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Group Name="database" OBJ-XID="xid_5728-0" H5Path="/.attributes/database" Parents="xid_5072-0" H5ParentPaths="/.attributes" >
+         <hdf5:Dataset Name=".SAF_DbProps" OBJ-XID="xid_6104-0" H5Path= "/.attributes/database/.SAF_DbProps" Parents="xid_5728-0" H5ParentPaths="/.attributes/database">
+            <hdf5:StorageLayout>
+               <hdf5:ContiguousLayout/>
+            </hdf5:StorageLayout>
+                     <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+               <hdf5:FillValue>
+                     <hdf5:NoFill/>
+               </hdf5:FillValue>
+            </hdf5:FillValueInfo>
+            <hdf5:Dataspace>
+               <hdf5:SimpleDataspace Ndims="1">
+                  <hdf5:Dimension  DimSize="1" MaxDimSize="1"/>
+               </hdf5:SimpleDataspace>
+            </hdf5:Dataspace>
+            <hdf5:DataType>
+               <hdf5:CompoundType>
+                  <hdf5:Field FieldName="magic">
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="SFileDir">
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="1024" StrPad="H5T_STR_NULLTERM"/>
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="ImportFile">
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="1024" StrPad="H5T_STR_NULLTERM"/>
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="parallel">
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="safapi">
+                     <hdf5:DataType>
+                        <hdf5:CompoundType>
+                           <hdf5:Field FieldName="vmajor">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="vminor">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="rel">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="annot">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="10" StrPad="H5T_STR_NULLTERM"/>
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                        </hdf5:CompoundType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="saflib">
+                     <hdf5:DataType>
+                        <hdf5:CompoundType>
+                           <hdf5:Field FieldName="vmajor">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="vminor">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="rel">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="annot">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="10" StrPad="H5T_STR_NULLTERM"/>
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                        </hdf5:CompoundType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="vbt">
+                     <hdf5:DataType>
+                        <hdf5:CompoundType>
+                           <hdf5:Field FieldName="vmajor">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="vminor">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="rel">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="annot">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="10" StrPad="H5T_STR_NULLTERM"/>
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                        </hdf5:CompoundType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="dsl">
+                     <hdf5:DataType>
+                        <hdf5:CompoundType>
+                           <hdf5:Field FieldName="vmajor">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="vminor">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="rel">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="annot">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="10" StrPad="H5T_STR_NULLTERM"/>
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                        </hdf5:CompoundType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="hdf5">
+                     <hdf5:DataType>
+                        <hdf5:CompoundType>
+                           <hdf5:Field FieldName="vmajor">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="vminor">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="rel">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="annot">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="10" StrPad="H5T_STR_NULLTERM"/>
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                        </hdf5:CompoundType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="mpi">
+                     <hdf5:DataType>
+                        <hdf5:CompoundType>
+                           <hdf5:Field FieldName="vmajor">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="vminor">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="rel">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                           <hdf5:Field FieldName="annot">
+                              <hdf5:DataType>
+                                 <hdf5:AtomicType>
+                                    <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="10" StrPad="H5T_STR_NULLTERM"/>
+                                 </hdf5:AtomicType>
+                              </hdf5:DataType>
+                           </hdf5:Field>
+                        </hdf5:CompoundType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="DoToc">
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="ReadOnly">
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="Clobber">
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="OSModes">
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+               </hdf5:CompoundType>
+            </hdf5:DataType>
+         <!-- Note: format of compound data not specified -->
+            <hdf5:Data>
+               <hdf5:DataFromFile>
+               -604320037 "." "don't import" 1 0 0 0 "none" 0 1 0 "devel" 1 3 0 "" 0 0 0 "none" 1 2 1 "" 1 2 0 "" 1 0 1 0
+               </hdf5:DataFromFile>
+            </hdf5:Data>
+         </hdf5:Dataset>
+      </hdf5:Group>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tsaf.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,663 @@
+#############################
+ output for 'h5ls -w80 -r -d tsaf.h5'
+#############################
+/.DSL_METADATA           Dataset {5919/Inf}
+    Data:
+        (0) 47, 32, 67, 79, 78, 84, 65, 73, 78, 69, 82, 10, 47, 46, 97, 116,
+        (16) 116, 114, 105, 98, 117, 116, 101, 115, 32, 67, 79, 78, 84, 65, 73,
+        (31) 78, 69, 82, 10, 47, 46, 97, 116, 116, 114, 105, 98, 117, 116, 101,
+        (46) 115, 47, 100, 97, 116, 97, 98, 97, 115, 101, 32, 67, 79, 78, 84,
+        (61) 65, 73, 78, 69, 82, 10, 47, 46, 97, 116, 116, 114, 105, 98, 117,
+        (76) 116, 101, 115, 47, 100, 97, 116, 97, 98, 97, 115, 101, 47, 46, 83,
+        (91) 65, 70, 95, 68, 98, 80, 114, 111, 112, 115, 32, 68, 65, 84, 65, 83,
+        (107) 69, 84, 32, 115, 116, 114, 117, 99, 116, 32, 83, 65, 70, 95, 68,
+        (122) 98, 80, 114, 111, 112, 115, 123, 105, 110, 116, 32, 109, 97, 103,
+        (136) 105, 99, 59, 99, 104, 97, 114, 32, 83, 70, 105, 108, 101, 68, 105,
+        (151) 114, 91, 49, 48, 50, 52, 93, 59, 99, 104, 97, 114, 32, 73, 109,
+        (166) 112, 111, 114, 116, 70, 105, 108, 101, 91, 49, 48, 50, 52, 93, 59,
+        (181) 105, 110, 116, 32, 112, 97, 114, 97, 108, 108, 101, 108, 59, 115,
+        (195) 116, 114, 117, 99, 116, 32, 83, 65, 70, 95, 86, 101, 114, 115,
+        (209) 105, 111, 110, 73, 110, 102, 111, 123, 105, 110, 116, 32, 118,
+        (222) 109, 97, 106, 111, 114, 59, 105, 110, 116, 32, 118, 109, 105, 110,
+        (236) 111, 114, 59, 105, 110, 116, 32, 114, 101, 108, 59, 99, 104, 97,
+        (250) 114, 32, 97, 110, 110, 111, 116, 91, 49, 48, 93, 59, 125, 115, 97,
+        (265) 102, 97, 112, 105, 59, 115, 116, 114, 117, 99, 116, 32, 83, 65,
+        (279) 70, 95, 86, 101, 114, 115, 105, 111, 110, 73, 110, 102, 111, 123,
+        (293) 105, 110, 116, 32, 118, 109, 97, 106, 111, 114, 59, 105, 110, 116,
+        (307) 32, 118, 109, 105, 110, 111, 114, 59, 105, 110, 116, 32, 114, 101,
+        (321) 108, 59, 99, 104, 97, 114, 32, 97, 110, 110, 111, 116, 91, 49, 48,
+        (336) 93, 59, 125, 115, 97, 102, 108, 105, 98, 59, 115, 116, 114, 117,
+        (350) 99, 116, 32, 83, 65, 70, 95, 86, 101, 114, 115, 105, 111, 110, 73,
+        (365) 110, 102, 111, 123, 105, 110, 116, 32, 118, 109, 97, 106, 111,
+        (378) 114, 59, 105, 110, 116, 32, 118, 109, 105, 110, 111, 114, 59, 105,
+        (392) 110, 116, 32, 114, 101, 108, 59, 99, 104, 97, 114, 32, 97, 110,
+        (406) 110, 111, 116, 91, 49, 48, 93, 59, 125, 118, 98, 116, 59, 115,
+        (420) 116, 114, 117, 99, 116, 32, 83, 65, 70, 95, 86, 101, 114, 115,
+        (434) 105, 111, 110, 73, 110, 102, 111, 123, 105, 110, 116, 32, 118,
+        (447) 109, 97, 106, 111, 114, 59, 105, 110, 116, 32, 118, 109, 105, 110,
+        (461) 111, 114, 59, 105, 110, 116, 32, 114, 101, 108, 59, 99, 104, 97,
+        (475) 114, 32, 97, 110, 110, 111, 116, 91, 49, 48, 93, 59, 125, 100,
+        (489) 115, 108, 59, 115, 116, 114, 117, 99, 116, 32, 83, 65, 70, 95, 86,
+        (504) 101, 114, 115, 105, 111, 110, 73, 110, 102, 111, 123, 105, 110,
+        (517) 116, 32, 118, 109, 97, 106, 111, 114, 59, 105, 110, 116, 32, 118,
+        (531) 109, 105, 110, 111, 114, 59, 105, 110, 116, 32, 114, 101, 108, 59,
+        (545) 99, 104, 97, 114, 32, 97, 110, 110, 111, 116, 91, 49, 48, 93, 59,
+        (560) 125, 104, 100, 102, 53, 59, 115, 116, 114, 117, 99, 116, 32, 83,
+        (574) 65, 70, 95, 86, 101, 114, 115, 105, 111, 110, 73, 110, 102, 111,
+        (588) 123, 105, 110, 116, 32, 118, 109, 97, 106, 111, 114, 59, 105, 110,
+        (602) 116, 32, 118, 109, 105, 110, 111, 114, 59, 105, 110, 116, 32, 114,
+        (616) 101, 108, 59, 99, 104, 97, 114, 32, 97, 110, 110, 111, 116, 91,
+        (630) 49, 48, 93, 59, 125, 109, 112, 105, 59, 105, 110, 116, 32, 68,
+        (644) 111, 84, 111, 99, 59, 105, 110, 116, 32, 82, 101, 97, 100, 79,
+        (658) 110, 108, 121, 59, 105, 110, 116, 32, 67, 108, 111, 98, 98, 101,
+        (672) 114, 59, 105, 110, 116, 32, 79, 83, 77, 111, 100, 101, 115, 59,
+        (686) 125, 59, 10, 47, 115, 115, 114, 101, 108, 45, 95, 48, 48, 48, 48,
+        (701) 32, 68, 65, 84, 65, 83, 69, 84, 32, 105, 110, 116, 59, 10, 47,
+        (716) 115, 115, 114, 101, 108, 45, 95, 48, 48, 48, 49, 32, 68, 65, 84,
+        (731) 65, 83, 69, 84, 32, 105, 110, 116, 59, 10, 47, 115, 115, 114, 101,
+        (746) 108, 45, 95, 48, 48, 48, 50, 32, 68, 65, 84, 65, 83, 69, 84, 32,
+        (762) 105, 110, 116, 59, 10, 47, 115, 115, 114, 101, 108, 45, 95, 48,
+        (776) 48, 48, 51, 32, 68, 65, 84, 65, 83, 69, 84, 32, 105, 110, 116, 59,
+        (792) 10, 47, 115, 115, 114, 101, 108, 45, 95, 48, 48, 48, 52, 32, 68,
+        (807) 65, 84, 65, 83, 69, 84, 32, 105, 110, 116, 59, 10, 47, 115, 115,
+        (822) 114, 101, 108, 45, 95, 48, 48, 48, 53, 32, 68, 65, 84, 65, 83, 69,
+        (838) 84, 32, 105, 110, 116, 59, 10, 47, 115, 115, 114, 101, 108, 45,
+        (852) 95, 48, 48, 48, 54, 32, 68, 65, 84, 65, 83, 69, 84, 32, 105, 110,
+        (868) 116, 59, 10, 47, 115, 115, 114, 101, 108, 45, 95, 48, 48, 48, 55,
+        (883) 32, 68, 65, 84, 65, 83, 69, 84, 32, 105, 110, 116, 59, 10, 47,
+        (898) 115, 115, 114, 101, 108, 45, 95, 48, 48, 48, 56, 32, 68, 65, 84,
+        (913) 65, 83, 69, 84, 32, 105, 110, 116, 59, 10, 47, 115, 115, 114, 101,
+        (928) 108, 45, 95, 48, 48, 48, 57, 32, 68, 65, 84, 65, 83, 69, 84, 32,
+        (944) 105, 110, 116, 59, 10, 47, 115, 115, 114, 101, 108, 45, 95, 48,
+        (958) 48, 49, 48, 32, 68, 65, 84, 65, 83, 69, 84, 32, 105, 110, 116, 59,
+        (974) 10, 47, 115, 115, 114, 101, 108, 45, 95, 48, 48, 49, 49, 32, 68,
+        (989) 65, 84, 65, 83, 69, 84, 32, 105, 110, 116, 59, 10, 47, 115, 115,
+        (1004) 114, 101, 108, 45, 95, 48, 48, 49, 50, 32, 68, 65, 84, 65, 83,
+        (1019) 69, 84, 32, 105, 110, 116, 59, 10, 47, 116, 111, 112, 111, 114,
+        (1033) 101, 108, 45, 95, 48, 48, 49, 55, 32, 68, 65, 84, 65, 83, 69, 84,
+        (1049) 32, 105, 110, 116, 59, 10, 47, 116, 111, 112, 111, 114, 101, 108,
+        (1063) 45, 95, 48, 48, 49, 56, 32, 68, 65, 84, 65, 83, 69, 84, 32, 105,
+        (1079) 110, 116, 59, 10, 47, 116, 111, 112, 111, 114, 101, 108, 45, 95,
+        (1093) 48, 48, 49, 57, 32, 68, 65, 84, 65, 83, 69, 84, 32, 105, 110,
+        (1108) 116, 59, 10, 47, 116, 111, 112, 111, 114, 101, 108, 45, 95, 48,
+        (1122) 48, 50, 48, 32, 68, 65, 84, 65, 83, 69, 84, 32, 105, 110, 116,
+        (1137) 59, 10, 47, 102, 105, 101, 108, 100, 45, 99, 111, 111, 114, 100,
+        (1151) 115, 95, 48, 48, 48, 50, 32, 68, 65, 84, 65, 83, 69, 84, 32, 102,
+        (1167) 108, 111, 97, 116, 59, 10, 47, 102, 105, 101, 108, 100, 45, 100,
+        (1181) 105, 115, 116, 114, 105, 98, 117, 116, 105, 111, 110, 95, 102,
+        (1194) 97, 99, 116, 111, 114, 115, 95, 48, 48, 48, 51, 32, 68, 65, 84,
+        (1209) 65, 83, 69, 84, 32, 102, 108, 111, 97, 116, 59, 10, 47, 102, 105,
+        (1224) 101, 108, 100, 45, 116, 101, 109, 112, 101, 114, 97, 116, 117,
+        (1237) 114, 101, 95, 48, 48, 48, 52, 32, 68, 65, 84, 65, 83, 69, 84, 32,
+        (1253) 102, 108, 111, 97, 116, 59, 10, 47, 102, 105, 101, 108, 100, 45,
+        (1267) 100, 105, 115, 112, 108, 97, 99, 101, 109, 101, 110, 116, 115,
+        (1280) 95, 48, 48, 48, 55, 32, 68, 65, 84, 65, 83, 69, 84, 32, 102, 108,
+        (1296) 111, 97, 116, 59, 10, 47, 102, 105, 101, 108, 100, 45, 115, 116,
+        (1310) 114, 101, 115, 115, 95, 48, 48, 49, 49, 32, 68, 65, 84, 65, 83,
+        (1325) 69, 84, 32, 102, 108, 111, 97, 116, 59, 10, 47, 102, 105, 101,
+        (1339) 108, 100, 45, 116, 101, 109, 112, 101, 114, 97, 116, 117, 114,
+        (1352) 101, 95, 48, 48, 49, 50, 32, 68, 65, 84, 65, 83, 69, 84, 32, 102,
+        (1368) 108, 111, 97, 116, 59, 10, 47, 102, 105, 101, 108, 100, 45, 112,
+        (1382) 114, 101, 115, 115, 117, 114, 101, 95, 48, 48, 49, 51, 32, 68,
+        (1396) 65, 84, 65, 83, 69, 84, 32, 102, 108, 111, 97, 116, 59, 10, 47,
+        (1411) 66, 108, 111, 98, 32, 68, 65, 84, 65, 83, 69, 84, 32, 115, 116,
+        (1426) 114, 117, 99, 116, 32, 66, 108, 111, 98, 123, 68, 83, 76, 95, 79,
+        (1441) 102, 102, 115, 101, 116, 32, 102, 105, 108, 101, 95, 105, 100,
+        (1454) 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 100, 97,
+        (1468) 116, 97, 115, 101, 116, 95, 105, 100, 59, 68, 83, 76, 95, 79,
+        (1482) 102, 102, 115, 101, 116, 32, 111, 102, 102, 115, 101, 116, 59,
+        (1495) 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 115, 116, 114,
+        (1509) 105, 100, 101, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116,
+        (1523) 32, 99, 111, 117, 110, 116, 59, 68, 83, 76, 95, 79, 102, 102,
+        (1537) 115, 101, 116, 32, 98, 97, 115, 101, 95, 105, 100, 59, 68, 83,
+        (1551) 76, 95, 79, 102, 102, 115, 101, 116, 32, 110, 117, 109, 95, 114,
+        (1565) 101, 99, 115, 59, 125, 59, 10, 47, 73, 110, 100, 101, 120, 83,
+        (1579) 112, 101, 99, 32, 68, 65, 84, 65, 83, 69, 84, 32, 115, 116, 114,
+        (1594) 117, 99, 116, 32, 73, 110, 100, 101, 120, 83, 112, 101, 99, 123,
+        (1608) 105, 110, 116, 32, 110, 100, 105, 109, 115, 59, 105, 110, 116,
+        (1621) 32, 111, 114, 105, 103, 105, 110, 115, 91, 56, 93, 59, 105, 110,
+        (1635) 116, 32, 115, 105, 122, 101, 115, 91, 56, 93, 59, 105, 110, 116,
+        (1649) 32, 111, 114, 100, 101, 114, 91, 56, 93, 59, 101, 110, 117, 109,
+        (1663) 32, 73, 110, 100, 101, 120, 84, 121, 112, 101, 123, 86, 66, 84,
+        (1677) 95, 73, 78, 68, 69, 88, 95, 84, 89, 80, 69, 95, 67, 95, 79, 82,
+        (1693) 68, 69, 82, 61, 48, 44, 86, 66, 84, 95, 73, 78, 68, 69, 88, 95,
+        (1709) 84, 89, 80, 69, 95, 70, 95, 79, 82, 68, 69, 82, 61, 49, 44, 86,
+        (1725) 66, 84, 95, 73, 78, 68, 69, 88, 95, 84, 89, 80, 69, 95, 65, 78,
+        (1741) 89, 61, 45, 49, 44, 86, 66, 84, 95, 73, 78, 68, 69, 88, 95, 84,
+        (1757) 89, 80, 69, 95, 73, 78, 86, 65, 76, 73, 68, 61, 45, 50, 44, 86,
+        (1773) 66, 84, 95, 73, 78, 68, 69, 88, 95, 84, 89, 80, 69, 95, 78, 65,
+        (1789) 61, 45, 51, 44, 86, 66, 84, 95, 73, 78, 68, 69, 88, 95, 84, 89,
+        (1805) 80, 69, 95, 85, 78, 75, 78, 79, 87, 78, 61, 45, 52, 125, 105,
+        (1820) 110, 100, 101, 120, 95, 116, 121, 112, 101, 59, 68, 83, 76, 95,
+        (1834) 79, 102, 102, 115, 101, 116, 32, 98, 97, 115, 101, 95, 105, 100,
+        (1848) 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 110, 117,
+        (1862) 109, 95, 114, 101, 99, 115, 59, 125, 59, 10, 47, 67, 97, 116, 32,
+        (1877) 68, 65, 84, 65, 83, 69, 84, 32, 115, 116, 114, 117, 99, 116, 32,
+        (1892) 67, 97, 116, 123, 99, 104, 97, 114, 32, 110, 97, 109, 101, 91,
+        (1906) 54, 52, 93, 59, 101, 110, 117, 109, 32, 82, 111, 108, 101, 123,
+        (1920) 86, 66, 84, 95, 82, 79, 76, 69, 95, 84, 79, 80, 79, 61, 48, 44,
+        (1936) 86, 66, 84, 95, 82, 79, 76, 69, 95, 66, 78, 68, 61, 49, 44, 86,
+        (1952) 66, 84, 95, 82, 79, 76, 69, 95, 80, 82, 79, 67, 61, 50, 44, 86,
+        (1968) 66, 84, 95, 82, 79, 76, 69, 95, 68, 79, 77, 78, 61, 51, 44, 86,
+        (1984) 66, 84, 95, 82, 79, 76, 69, 95, 66, 76, 79, 67, 75, 61, 52, 44,
+        (2000) 86, 66, 84, 95, 82, 79, 76, 69, 95, 65, 83, 83, 89, 61, 53, 44,
+        (2016) 86, 66, 84, 95, 82, 79, 76, 69, 95, 77, 65, 84, 61, 54, 44, 86,
+        (2032) 66, 84, 95, 82, 79, 76, 69, 95, 88, 80, 82, 79, 68, 61, 55, 44,
+        (2048) 86, 66, 84, 95, 82, 79, 76, 69, 95, 85, 83, 69, 82, 68, 61, 56,
+        (2064) 44, 86, 66, 84, 95, 82, 79, 76, 69, 95, 65, 78, 89, 61, 45, 49,
+        (2080) 44, 86, 66, 84, 95, 82, 79, 76, 69, 95, 73, 78, 86, 65, 76, 73,
+        (2096) 68, 61, 45, 50, 44, 86, 66, 84, 95, 82, 79, 76, 69, 95, 78, 65,
+        (2112) 61, 45, 51, 44, 86, 66, 84, 95, 82, 79, 76, 69, 95, 85, 78, 75,
+        (2128) 78, 79, 87, 78, 61, 45, 52, 125, 114, 111, 108, 101, 59, 105,
+        (2142) 110, 116, 32, 116, 100, 105, 109, 59, 68, 83, 76, 95, 79, 102,
+        (2156) 102, 115, 101, 116, 32, 98, 97, 115, 101, 95, 105, 100, 59, 68,
+        (2170) 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 110, 117, 109, 95,
+        (2184) 114, 101, 99, 115, 59, 125, 59, 10, 47, 83, 101, 116, 32, 68, 65,
+        (2199) 84, 65, 83, 69, 84, 32, 115, 116, 114, 117, 99, 116, 32, 83, 101,
+        (2214) 116, 123, 105, 110, 116, 32, 117, 115, 101, 114, 95, 105, 100,
+        (2227) 59, 99, 104, 97, 114, 32, 110, 97, 109, 101, 91, 54, 52, 93, 59,
+        (2242) 105, 110, 116, 32, 116, 100, 105, 109, 59, 101, 110, 117, 109,
+        (2255) 32, 83, 105, 108, 82, 111, 108, 101, 123, 86, 66, 84, 95, 83, 82,
+        (2270) 79, 76, 69, 95, 84, 73, 77, 69, 61, 48, 44, 86, 66, 84, 95, 83,
+        (2286) 82, 79, 76, 69, 95, 83, 80, 65, 67, 69, 61, 49, 44, 86, 66, 84,
+        (2302) 95, 83, 82, 79, 76, 69, 95, 83, 84, 65, 84, 69, 61, 50, 44, 86,
+        (2318) 66, 84, 95, 83, 82, 79, 76, 69, 95, 80, 65, 82, 65, 77, 61, 51,
+        (2334) 44, 86, 66, 84, 95, 83, 82, 79, 76, 69, 95, 67, 84, 89, 80, 69,
+        (2350) 61, 52, 44, 86, 66, 84, 95, 83, 82, 79, 76, 69, 95, 65, 84, 89,
+        (2366) 80, 69, 61, 53, 44, 86, 66, 84, 95, 83, 82, 79, 76, 69, 95, 85,
+        (2382) 83, 69, 82, 68, 61, 54, 44, 86, 66, 84, 95, 83, 82, 79, 76, 69,
+        (2398) 95, 65, 78, 89, 61, 45, 49, 44, 86, 66, 84, 95, 83, 82, 79, 76,
+        (2414) 69, 95, 73, 78, 86, 65, 76, 73, 68, 61, 45, 50, 44, 86, 66, 84,
+        (2430) 95, 83, 82, 79, 76, 69, 95, 78, 65, 61, 45, 51, 44, 86, 66, 84,
+        (2446) 95, 83, 82, 79, 76, 69, 95, 85, 78, 75, 78, 79, 87, 78, 61, 45,
+        (2462) 52, 125, 115, 114, 111, 108, 101, 59, 68, 83, 76, 95, 79, 102,
+        (2476) 102, 115, 101, 116, 32, 99, 111, 108, 108, 95, 105, 100, 115, 91,
+        (2490) 49, 54, 93, 59, 105, 110, 116, 32, 105, 115, 95, 116, 111, 112,
+        (2504) 59, 105, 110, 116, 32, 105, 115, 95, 101, 120, 116, 101, 110,
+        (2517) 100, 105, 98, 108, 101, 59, 68, 83, 76, 95, 79, 102, 102, 115,
+        (2531) 101, 116, 32, 100, 102, 108, 116, 95, 99, 111, 111, 114, 100,
+        (2544) 102, 108, 100, 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102,
+        (2558) 115, 101, 116, 32, 98, 110, 100, 95, 115, 101, 116, 95, 105, 100,
+        (2572) 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 98, 97, 115,
+        (2587) 101, 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101,
+        (2601) 116, 32, 110, 117, 109, 95, 114, 101, 99, 115, 59, 125, 59, 10,
+        (2615) 47, 67, 111, 108, 108, 101, 99, 116, 105, 111, 110, 32, 68, 65,
+        (2629) 84, 65, 83, 69, 84, 32, 115, 116, 114, 117, 99, 116, 32, 67, 111,
+        (2644) 108, 108, 101, 99, 116, 105, 111, 110, 123, 68, 83, 76, 95, 79,
+        (2658) 102, 102, 115, 101, 116, 32, 99, 111, 110, 116, 97, 105, 110,
+        (2671) 105, 110, 103, 95, 115, 101, 116, 95, 105, 100, 59, 68, 83, 76,
+        (2685) 95, 79, 102, 102, 115, 101, 116, 32, 99, 97, 116, 95, 105, 100,
+        (2699) 59, 101, 110, 117, 109, 32, 67, 101, 108, 108, 84, 121, 112, 101,
+        (2713) 123, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 78,
+        (2729) 79, 78, 69, 61, 48, 44, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84,
+        (2745) 89, 80, 69, 95, 80, 79, 73, 78, 84, 61, 49, 44, 86, 66, 84, 95,
+        (2761) 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 76, 73, 78, 69, 61, 50,
+        (2777) 44, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 84,
+        (2793) 82, 73, 61, 51, 44, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89,
+        (2809) 80, 69, 95, 81, 85, 65, 68, 61, 52, 44, 86, 66, 84, 95, 67, 69,
+        (2825) 76, 76, 95, 84, 89, 80, 69, 95, 84, 69, 84, 61, 53, 44, 86, 66,
+        (2841) 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 80, 89, 82, 65,
+        (2857) 77, 73, 68, 61, 54, 44, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84,
+        (2873) 89, 80, 69, 95, 80, 82, 73, 83, 77, 61, 55, 44, 86, 66, 84, 95,
+        (2889) 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 72, 69, 88, 61, 56, 44,
+        (2905) 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 77, 73,
+        (2921) 88, 69, 68, 61, 57, 44, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84,
+        (2937) 89, 80, 69, 95, 65, 82, 66, 61, 49, 48, 44, 86, 66, 84, 95, 67,
+        (2953) 69, 76, 76, 95, 84, 89, 80, 69, 95, 49, 66, 65, 76, 76, 61, 49,
+        (2969) 49, 44, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95,
+        (2985) 50, 66, 65, 76, 76, 61, 49, 50, 44, 86, 66, 84, 95, 67, 69, 76,
+        (3001) 76, 95, 84, 89, 80, 69, 95, 51, 66, 65, 76, 76, 61, 49, 51, 44,
+        (3017) 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 49, 83,
+        (3033) 72, 69, 76, 76, 61, 49, 52, 44, 86, 66, 84, 95, 67, 69, 76, 76,
+        (3049) 95, 84, 89, 80, 69, 95, 50, 83, 72, 69, 76, 76, 61, 49, 53, 44,
+        (3065) 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 65, 78,
+        (3081) 89, 61, 45, 49, 44, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89,
+        (3097) 80, 69, 95, 73, 78, 86, 65, 76, 73, 68, 61, 45, 50, 44, 86, 66,
+        (3113) 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95, 78, 65, 61, 45,
+        (3129) 51, 44, 86, 66, 84, 95, 67, 69, 76, 76, 95, 84, 89, 80, 69, 95,
+        (3145) 85, 78, 75, 78, 79, 87, 78, 61, 45, 52, 125, 99, 101, 108, 108,
+        (3160) 95, 116, 121, 112, 101, 59, 105, 110, 116, 32, 99, 111, 117, 110,
+        (3174) 116, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 105,
+        (3188) 110, 100, 101, 120, 105, 110, 103, 95, 105, 100, 59, 105, 110,
+        (3201) 116, 32, 105, 115, 95, 100, 101, 99, 111, 109, 112, 59, 68, 83,
+        (3215) 76, 95, 79, 102, 102, 115, 101, 116, 32, 109, 101, 109, 98, 101,
+        (3229) 114, 115, 95, 98, 108, 111, 98, 95, 105, 100, 59, 68, 83, 76, 95,
+        (3244) 79, 102, 102, 115, 101, 116, 32, 98, 97, 115, 101, 95, 105, 100,
+        (3258) 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 110, 117,
+        (3272) 109, 95, 114, 101, 99, 115, 59, 125, 59, 10, 47, 82, 101, 108,
+        (3286) 97, 116, 105, 111, 110, 32, 68, 65, 84, 65, 83, 69, 84, 32, 115,
+        (3301) 116, 114, 117, 99, 116, 32, 82, 101, 108, 97, 116, 105, 111, 110,
+        (3315) 123, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 115, 117,
+        (3329) 98, 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101,
+        (3343) 116, 32, 115, 117, 98, 95, 99, 97, 116, 95, 105, 100, 59, 68, 83,
+        (3358) 76, 95, 79, 102, 102, 115, 101, 116, 32, 115, 117, 98, 95, 100,
+        (3372) 101, 99, 111, 109, 112, 95, 99, 97, 116, 95, 105, 100, 59, 68,
+        (3386) 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 115, 117, 112, 95,
+        (3400) 105, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32,
+        (3414) 115, 117, 112, 95, 99, 97, 116, 95, 105, 100, 59, 68, 83, 76, 95,
+        (3429) 79, 102, 102, 115, 101, 116, 32, 115, 117, 112, 95, 100, 101, 99,
+        (3443) 111, 109, 112, 95, 99, 97, 116, 95, 105, 100, 59, 101, 110, 117,
+        (3457) 109, 32, 82, 101, 108, 75, 105, 110, 100, 123, 86, 66, 84, 95,
+        (3471) 82, 69, 76, 75, 73, 78, 68, 95, 83, 85, 66, 83, 69, 84, 61, 48,
+        (3487) 44, 86, 66, 84, 95, 82, 69, 76, 75, 73, 78, 68, 95, 83, 85, 80,
+        (3503) 83, 69, 84, 61, 49, 44, 86, 66, 84, 95, 82, 69, 76, 75, 73, 78,
+        (3519) 68, 95, 66, 79, 85, 78, 68, 61, 50, 44, 86, 66, 84, 95, 82, 69,
+        (3535) 76, 75, 73, 78, 68, 95, 80, 69, 82, 77, 85, 84, 69, 61, 51, 44,
+        (3551) 86, 66, 84, 95, 82, 69, 76, 75, 73, 78, 68, 95, 78, 69, 73, 71,
+        (3567) 72, 66, 79, 82, 61, 52, 44, 86, 66, 84, 95, 82, 69, 76, 75, 73,
+        (3583) 78, 68, 95, 67, 79, 80, 89, 61, 53, 44, 86, 66, 84, 95, 82, 69,
+        (3599) 76, 75, 73, 78, 68, 95, 69, 81, 85, 65, 76, 61, 54, 44, 86, 66,
+        (3615) 84, 95, 82, 69, 76, 75, 73, 78, 68, 95, 65, 78, 89, 61, 45, 49,
+        (3631) 44, 86, 66, 84, 95, 82, 69, 76, 75, 73, 78, 68, 95, 73, 78, 86,
+        (3647) 65, 76, 73, 68, 61, 45, 50, 44, 86, 66, 84, 95, 82, 69, 76, 75,
+        (3663) 73, 78, 68, 95, 78, 65, 61, 45, 51, 44, 86, 66, 84, 95, 82, 69,
+        (3679) 76, 75, 73, 78, 68, 95, 85, 78, 75, 78, 79, 87, 78, 61, 45, 52,
+        (3695) 125, 107, 105, 110, 100, 59, 101, 110, 117, 109, 32, 82, 101,
+        (3708) 108, 82, 101, 112, 123, 86, 66, 84, 95, 82, 69, 76, 82, 69, 80,
+        (3723) 95, 73, 68, 69, 78, 84, 73, 84, 89, 61, 48, 44, 86, 66, 84, 95,
+        (3739) 82, 69, 76, 82, 69, 80, 95, 72, 76, 73, 83, 84, 61, 49, 44, 86,
+        (3755) 66, 84, 95, 82, 69, 76, 82, 69, 80, 95, 84, 76, 73, 83, 84, 61,
+        (3771) 50, 44, 86, 66, 84, 95, 82, 69, 76, 82, 69, 80, 95, 84, 76, 73,
+        (3787) 83, 84, 95, 49, 61, 51, 44, 86, 66, 84, 95, 82, 69, 76, 82, 69,
+        (3803) 80, 95, 69, 76, 73, 83, 84, 61, 52, 44, 86, 66, 84, 95, 82, 69,
+        (3819) 76, 82, 69, 80, 95, 83, 84, 82, 85, 67, 84, 85, 82, 69, 68, 61,
+        (3835) 53, 44, 86, 66, 84, 95, 82, 69, 76, 82, 69, 80, 95, 85, 78, 83,
+        (3851) 84, 82, 85, 67, 84, 85, 82, 69, 68, 61, 54, 44, 86, 66, 84, 95,
+        (3867) 82, 69, 76, 82, 69, 80, 95, 65, 82, 66, 73, 84, 82, 65, 82, 89,
+        (3883) 95, 82, 61, 55, 44, 86, 66, 84, 95, 82, 69, 76, 82, 69, 80, 95,
+        (3899) 65, 82, 66, 73, 84, 82, 65, 82, 89, 95, 68, 82, 61, 56, 44, 86,
+        (3915) 66, 84, 95, 82, 69, 76, 82, 69, 80, 95, 65, 78, 89, 61, 45, 49,
+        (3931) 44, 86, 66, 84, 95, 82, 69, 76, 82, 69, 80, 95, 73, 78, 86, 65,
+        (3947) 76, 73, 68, 61, 45, 50, 44, 86, 66, 84, 95, 82, 69, 76, 82, 69,
+        (3963) 80, 95, 78, 65, 61, 45, 51, 44, 86, 66, 84, 95, 82, 69, 76, 82,
+        (3979) 69, 80, 95, 85, 78, 75, 78, 79, 87, 78, 61, 45, 52, 125, 114,
+        (3994) 101, 112, 95, 116, 121, 112, 101, 59, 68, 83, 76, 95, 79, 102,
+        (4008) 102, 115, 101, 116, 32, 100, 95, 98, 108, 111, 98, 95, 105, 100,
+        (4022) 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 114, 95, 98,
+        (4037) 108, 111, 98, 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102,
+        (4051) 115, 101, 116, 32, 98, 97, 115, 101, 95, 105, 100, 59, 68, 83,
+        (4065) 76, 95, 79, 102, 102, 115, 101, 116, 32, 110, 117, 109, 95, 114,
+        (4079) 101, 99, 115, 59, 125, 59, 10, 47, 70, 105, 101, 108, 100, 84,
+        (4093) 109, 112, 108, 32, 68, 65, 84, 65, 83, 69, 84, 32, 115, 116, 114,
+        (4108) 117, 99, 116, 32, 70, 105, 101, 108, 100, 84, 109, 112, 108, 123,
+        (4122) 99, 104, 97, 114, 32, 110, 97, 109, 101, 91, 54, 52, 93, 59, 68,
+        (4137) 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 98, 97, 115, 101,
+        (4151) 95, 115, 112, 97, 99, 101, 95, 105, 100, 59, 101, 110, 117, 109,
+        (4165) 32, 65, 108, 103, 101, 98, 114, 97, 105, 99, 84, 121, 112, 101,
+        (4179) 123, 86, 66, 84, 95, 65, 76, 71, 69, 66, 82, 65, 73, 67, 95, 84,
+        (4195) 89, 80, 69, 95, 67, 79, 78, 83, 84, 65, 78, 84, 61, 48, 44, 86,
+        (4211) 66, 84, 95, 65, 76, 71, 69, 66, 82, 65, 73, 67, 95, 84, 89, 80,
+        (4227) 69, 95, 67, 79, 77, 80, 79, 78, 69, 78, 84, 61, 49, 44, 86, 66,
+        (4243) 84, 95, 65, 76, 71, 69, 66, 82, 65, 73, 67, 95, 84, 89, 80, 69,
+        (4259) 95, 83, 67, 65, 76, 65, 82, 61, 50, 44, 86, 66, 84, 95, 65, 76,
+        (4275) 71, 69, 66, 82, 65, 73, 67, 95, 84, 89, 80, 69, 95, 86, 69, 67,
+        (4291) 84, 79, 82, 61, 51, 44, 86, 66, 84, 95, 65, 76, 71, 69, 66, 82,
+        (4307) 65, 73, 67, 95, 84, 89, 80, 69, 95, 84, 69, 78, 83, 79, 82, 61,
+        (4323) 52, 44, 86, 66, 84, 95, 65, 76, 71, 69, 66, 82, 65, 73, 67, 95,
+        (4339) 84, 89, 80, 69, 95, 83, 89, 77, 95, 84, 69, 78, 83, 79, 82, 61,
+        (4355) 53, 44, 86, 66, 84, 95, 65, 76, 71, 69, 66, 82, 65, 73, 67, 95,
+        (4371) 84, 89, 80, 69, 95, 70, 73, 69, 76, 68, 61, 54, 44, 86, 66, 84,
+        (4387) 95, 65, 76, 71, 69, 66, 82, 65, 73, 67, 95, 84, 89, 80, 69, 95,
+        (4403) 83, 84, 65, 84, 69, 61, 55, 44, 86, 66, 84, 95, 65, 76, 71, 69,
+        (4419) 66, 82, 65, 73, 67, 95, 84, 89, 80, 69, 95, 84, 85, 80, 76, 69,
+        (4435) 61, 56, 44, 86, 66, 84, 95, 65, 76, 71, 69, 66, 82, 65, 73, 67,
+        (4451) 95, 84, 89, 80, 69, 95, 65, 78, 89, 61, 45, 49, 44, 86, 66, 84,
+        (4467) 95, 65, 76, 71, 69, 66, 82, 65, 73, 67, 95, 84, 89, 80, 69, 95,
+        (4483) 73, 78, 86, 65, 76, 73, 68, 61, 45, 50, 44, 86, 66, 84, 95, 65,
+        (4499) 76, 71, 69, 66, 82, 65, 73, 67, 95, 84, 89, 80, 69, 95, 78, 65,
+        (4515) 61, 45, 51, 44, 86, 66, 84, 95, 65, 76, 71, 69, 66, 82, 65, 73,
+        (4531) 67, 95, 84, 89, 80, 69, 95, 85, 78, 75, 78, 79, 87, 78, 61, 45,
+        (4547) 52, 125, 97, 108, 103, 95, 116, 121, 112, 101, 59, 101, 110, 117,
+        (4561) 109, 32, 66, 97, 115, 105, 115, 84, 121, 112, 101, 123, 86, 66,
+        (4575) 84, 95, 66, 65, 83, 73, 83, 95, 84, 89, 80, 69, 95, 85, 78, 73,
+        (4591) 84, 89, 61, 48, 44, 86, 66, 84, 95, 66, 65, 83, 73, 83, 95, 84,
+        (4607) 89, 80, 69, 95, 67, 65, 82, 84, 69, 83, 73, 65, 78, 61, 49, 44,
+        (4623) 86, 66, 84, 95, 66, 65, 83, 73, 83, 95, 84, 89, 80, 69, 95, 83,
+        (4639) 80, 72, 69, 82, 73, 67, 65, 76, 61, 50, 44, 86, 66, 84, 95, 66,
+        (4655) 65, 83, 73, 83, 95, 84, 89, 80, 69, 95, 67, 89, 76, 73, 78, 68,
+        (4671) 82, 73, 67, 65, 76, 61, 51, 44, 86, 66, 84, 95, 66, 65, 83, 73,
+        (4687) 83, 95, 84, 89, 80, 69, 95, 85, 80, 80, 69, 82, 95, 84, 82, 73,
+        (4703) 61, 52, 44, 86, 66, 84, 95, 66, 65, 83, 73, 83, 95, 84, 89, 80,
+        (4719) 69, 95, 70, 79, 85, 82, 73, 69, 82, 61, 53, 44, 86, 66, 84, 95,
+        (4735) 66, 65, 83, 73, 83, 95, 84, 89, 80, 69, 95, 86, 65, 82, 73, 65,
+        (4751) 66, 76, 69, 61, 54, 44, 86, 66, 84, 95, 66, 65, 83, 73, 83, 95,
+        (4767) 84, 89, 80, 69, 95, 65, 78, 89, 61, 45, 49, 44, 86, 66, 84, 95,
+        (4783) 66, 65, 83, 73, 83, 95, 84, 89, 80, 69, 95, 73, 78, 86, 65, 76,
+        (4799) 73, 68, 61, 45, 50, 44, 86, 66, 84, 95, 66, 65, 83, 73, 83, 95,
+        (4815) 84, 89, 80, 69, 95, 78, 65, 61, 45, 51, 44, 86, 66, 84, 95, 66,
+        (4831) 65, 83, 73, 83, 95, 84, 89, 80, 69, 95, 85, 78, 75, 78, 79, 87,
+        (4847) 78, 61, 45, 52, 125, 98, 97, 115, 105, 115, 59, 68, 83, 76, 95,
+        (4862) 79, 102, 102, 115, 101, 116, 32, 113, 117, 97, 110, 116, 105,
+        (4875) 116, 121, 95, 105, 100, 59, 105, 110, 116, 32, 110, 117, 109, 95,
+        (4889) 99, 111, 109, 112, 115, 59, 68, 83, 76, 95, 79, 102, 102, 115,
+        (4903) 101, 116, 32, 102, 116, 109, 112, 108, 95, 105, 100, 115, 95, 98,
+        (4917) 108, 111, 98, 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102,
+        (4931) 115, 101, 116, 32, 98, 97, 115, 101, 95, 105, 100, 59, 68, 83,
+        (4945) 76, 95, 79, 102, 102, 115, 101, 116, 32, 110, 117, 109, 95, 114,
+        (4959) 101, 99, 115, 59, 125, 59, 10, 47, 70, 105, 101, 108, 100, 32,
+        (4973) 68, 65, 84, 65, 83, 69, 84, 32, 115, 116, 114, 117, 99, 116, 32,
+        (4988) 70, 105, 101, 108, 100, 123, 68, 83, 76, 95, 79, 102, 102, 115,
+        (5002) 101, 116, 32, 102, 116, 109, 112, 108, 95, 105, 100, 59, 99, 104,
+        (5016) 97, 114, 32, 110, 97, 109, 101, 91, 54, 52, 93, 59, 68, 83, 76,
+        (5031) 95, 79, 102, 102, 115, 101, 116, 32, 117, 110, 105, 116, 115, 95,
+        (5045) 105, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32,
+        (5059) 115, 116, 111, 114, 97, 103, 101, 95, 100, 101, 99, 111, 109,
+        (5072) 112, 95, 99, 97, 116, 95, 105, 100, 59, 101, 110, 117, 109, 32,
+        (5086) 73, 110, 116, 101, 114, 108, 101, 97, 118, 101, 123, 86, 66, 84,
+        (5100) 95, 73, 78, 84, 69, 82, 76, 69, 65, 86, 69, 95, 67, 79, 77, 80,
+        (5116) 79, 78, 69, 78, 84, 61, 48, 44, 86, 66, 84, 95, 73, 78, 84, 69,
+        (5132) 82, 76, 69, 65, 86, 69, 95, 86, 69, 67, 84, 79, 82, 61, 49, 44,
+        (5148) 86, 66, 84, 95, 73, 78, 84, 69, 82, 76, 69, 65, 86, 69, 95, 73,
+        (5164) 78, 68, 69, 80, 69, 78, 68, 69, 78, 84, 61, 50, 44, 86, 66, 84,
+        (5180) 95, 73, 78, 84, 69, 82, 76, 69, 65, 86, 69, 95, 78, 79, 78, 69,
+        (5196) 61, 51, 44, 86, 66, 84, 95, 73, 78, 84, 69, 82, 76, 69, 65, 86,
+        (5212) 69, 95, 65, 78, 89, 61, 45, 49, 44, 86, 66, 84, 95, 73, 78, 84,
+        (5228) 69, 82, 76, 69, 65, 86, 69, 95, 73, 78, 86, 65, 76, 73, 68, 61,
+        (5244) 45, 50, 44, 86, 66, 84, 95, 73, 78, 84, 69, 82, 76, 69, 65, 86,
+        (5260) 69, 95, 78, 65, 61, 45, 51, 44, 86, 66, 84, 95, 73, 78, 84, 69,
+        (5276) 82, 76, 69, 65, 86, 69, 95, 85, 78, 75, 78, 79, 87, 78, 61, 45,
+        (5292) 52, 125, 99, 111, 109, 112, 95, 105, 110, 116, 108, 118, 59, 68,
+        (5306) 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 105, 110, 100, 101,
+        (5320) 120, 105, 110, 103, 95, 105, 100, 59, 68, 83, 76, 95, 79, 102,
+        (5334) 102, 115, 101, 116, 32, 100, 111, 102, 95, 97, 115, 115, 111, 99,
+        (5348) 95, 99, 97, 116, 95, 105, 100, 59, 105, 110, 116, 32, 97, 115,
+        (5362) 115, 111, 99, 95, 114, 97, 116, 105, 111, 59, 68, 83, 76, 95, 79,
+        (5377) 102, 102, 115, 101, 116, 32, 101, 118, 97, 108, 95, 100, 101, 99,
+        (5391) 111, 109, 112, 95, 99, 97, 116, 95, 105, 100, 59, 101, 110, 117,
+        (5405) 109, 32, 69, 118, 97, 108, 70, 117, 110, 99, 123, 86, 66, 84, 95,
+        (5420) 69, 86, 65, 76, 95, 70, 85, 78, 67, 95, 67, 79, 78, 83, 84, 65,
+        (5436) 78, 84, 61, 48, 44, 86, 66, 84, 95, 69, 86, 65, 76, 95, 70, 85,
+        (5452) 78, 67, 95, 85, 78, 73, 70, 79, 82, 77, 61, 49, 44, 86, 66, 84,
+        (5468) 95, 69, 86, 65, 76, 95, 70, 85, 78, 67, 95, 80, 87, 67, 79, 78,
+        (5484) 83, 84, 61, 50, 44, 86, 66, 84, 95, 69, 86, 65, 76, 95, 70, 85,
+        (5500) 78, 67, 95, 80, 87, 76, 73, 78, 69, 65, 82, 61, 51, 44, 86, 66,
+        (5516) 84, 95, 69, 86, 65, 76, 95, 70, 85, 78, 67, 95, 65, 78, 89, 61,
+        (5532) 45, 49, 44, 86, 66, 84, 95, 69, 86, 65, 76, 95, 70, 85, 78, 67,
+        (5548) 95, 73, 78, 86, 65, 76, 73, 68, 61, 45, 50, 44, 86, 66, 84, 95,
+        (5564) 69, 86, 65, 76, 95, 70, 85, 78, 67, 95, 78, 65, 61, 45, 51, 44,
+        (5580) 86, 66, 84, 95, 69, 86, 65, 76, 95, 70, 85, 78, 67, 95, 85, 78,
+        (5596) 75, 78, 79, 87, 78, 61, 45, 52, 125, 101, 118, 97, 108, 95, 102,
+        (5611) 117, 110, 99, 59, 105, 110, 116, 32, 105, 115, 95, 104, 111, 109,
+        (5625) 111, 103, 101, 110, 101, 111, 117, 115, 59, 105, 110, 116, 32,
+        (5638) 105, 115, 95, 99, 111, 111, 114, 100, 95, 102, 105, 101, 108,
+        (5651) 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 99,
+        (5665) 111, 109, 112, 95, 105, 100, 115, 95, 98, 108, 111, 98, 95, 105,
+        (5679) 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 99,
+        (5693) 111, 109, 112, 95, 111, 114, 100, 101, 114, 95, 98, 108, 111, 98,
+        (5707) 95, 105, 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116,
+        (5721) 32, 118, 98, 97, 115, 105, 115, 95, 98, 108, 111, 98, 95, 105,
+        (5735) 100, 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 100,
+        (5749) 111, 102, 95, 98, 108, 111, 98, 95, 105, 100, 59, 68, 83, 76, 95,
+        (5764) 79, 102, 102, 115, 101, 116, 32, 98, 97, 115, 101, 95, 105, 100,
+        (5778) 59, 68, 83, 76, 95, 79, 102, 102, 115, 101, 116, 32, 110, 117,
+        (5792) 109, 95, 114, 101, 99, 115, 59, 125, 59, 10, 47, 109, 101, 116,
+        (5806) 97, 98, 108, 111, 98, 48, 48, 48, 48, 48, 46, 105, 110, 100, 101,
+        (5821) 120, 32, 68, 65, 84, 65, 83, 69, 84, 32, 115, 116, 114, 117, 99,
+        (5836) 116, 32, 73, 110, 100, 101, 120, 80, 97, 105, 114, 123, 68, 83,
+        (5850) 76, 95, 79, 102, 102, 115, 101, 116, 32, 105, 110, 100, 101, 120,
+        (5864) 59, 105, 110, 116, 32, 108, 101, 110, 103, 116, 104, 59, 125, 59,
+        (5878) 10, 47, 109, 101, 116, 97, 98, 108, 111, 98, 48, 48, 48, 48, 48,
+        (5893) 46, 98, 108, 111, 98, 32, 68, 65, 84, 65, 83, 69, 84, 32, 68, 83,
+        (5909) 76, 95, 79, 102, 102, 115, 101, 116, 59, 10
+/.attributes             Group
+/.attributes/database    Group
+/.attributes/database/.SAF_DbProps Dataset {1}
+    Data:
+        (0) {-604320037, ".", "don't import", 1, {0, 0, 0, "none"}, {0, 1, 0, 
+        (0)  "devel"}, {1, 3, 0, ""}, {0, 0, 0, "none"}, {1, 2, 1, ""}, {1, 2, 
+        (0)  0, ""}, 1, 0, 1, 0}
+/Blob                    Dataset {24/Inf}
+    Data:
+        (0) {-1, 1, 0, 1, 9, 0, 1}, {-1, 2, 0, 1, 4, 1, 1},
+        (2) {-1, 3, 0, 1, 7, 2, 1}, {-1, 4, 0, 1, 4, 3, 1},
+        (4) {-1, 5, 0, 1, 5, 4, 1}, {-1, 6, 0, 1, 3, 5, 1},
+        (6) {-1, 7, 0, 1, 4, 6, 1}, {-1, 8, 0, 1, 1, 7, 1},
+        (8) {-1, 9, 0, 1, 10, 8, 1}, {-1, 10, 0, 1, 4, 9, 1},
+        (10) {-1, 11, 0, 1, 3, 10, 1}, {-1, 12, 0, 1, 5, 11, 1},
+        (12) {-1, 13, 0, 1, 5, 12, 1}, {-1, 14, 0, 1, 16, 13, 1},
+        (14) {-1, 15, 0, 1, 9, 14, 1}, {-1, 16, 0, 1, 4, 15, 1},
+        (16) {-1, 17, 0, 1, 16, 16, 1}, {-1, 18, 0, 1, 36, 17, 1},
+        (18) {-1, 19, 0, 1, 5, 18, 1}, {-1, 20, 0, 1, 5, 19, 1},
+        (20) {-1, 21, 0, 1, 36, 20, 1}, {-1, 22, 0, 1, 12, 21, 1},
+        (22) {-1, 23, 0, 1, 7, 22, 1}, {-1, 24, 0, 1, 2, 23, 1}
+/Cat                     Dataset {5/Inf}
+    Data:
+        (0) {"nodes", TOPO, 0, 0, 1}, {"elems", TOPO, 2, 1, 1},
+        (2) {"edges", USERD, 1, 2, 1}, {"blocks", BLOCK, 2, 3, 1},
+        (4) {"side_sets", USERD, 1, 4, 1}
+/Collection              Dataset {24/Inf}
+    Data:
+        (0) {0, 0, POINT, 18, 0, 0, -2, 0, 1},
+        (1) {0, 1, MIXED, 12, 1, 1, -2, 1, 1}, {0, 3, NONE, 4, 2, 1, 0, 2, 1},
+        (3) {0, 4, NONE, 2, 3, 0, 1, 3, 1}, {1, 0, POINT, 9, 4, 0, -2, 4, 1},
+        (5) {1, 1, QUAD, 4, 5, 1, -2, 5, 1}, {1, 3, NONE, 1, 6, 1, 2, 6, 1},
+        (7) {2, 0, POINT, 7, 7, 0, -2, 7, 1}, {2, 1, MIXED, 4, 8, 1, -2, 8, 1},
+        (9) {2, 3, NONE, 2, 9, 1, 3, 9, 1}, {3, 0, POINT, 10, 10, 0, -2, 10, 
+        (10)  1}, {3, 1, QUAD, 4, 11, 1, -2, 11, 1},
+        (12) {3, 3, NONE, 1, 12, 1, 4, 12, 1},
+        (13) {4, 0, POINT, 3, 13, 0, -2, 13, 1},
+        (14) {4, 2, LINE, 2, 14, 1, -2, 14, 1},
+        (15) {5, 0, POINT, 5, 15, 0, -2, 15, 1},
+        (16) {5, 2, LINE, 4, 16, 1, -2, 16, 1},
+        (17) {6, 0, POINT, 5, 17, 1, -2, 17, 1},
+        (18) {7, 0, POINT, 5, 18, 0, -2, 18, 1},
+        (19) {7, 1, TRI, 3, 19, 1, -2, 19, 1}, {7, 3, NONE, 1, 20, 1, 5, 20, 
+        (20)  1}, {8, 0, POINT, 4, 21, 0, -2, 21, 1},
+        (22) {8, 1, QUAD, 1, 22, 1, -2, 22, 1}, {8, 3, NONE, 1, 23, 1, 6, 23, 
+        (23)  1}
+/Field                   Dataset {14/Inf}
+    Data:
+        (0) {1, "X", -7, -2, NONE, -2, 0, 1, 0, PWLINEAR, 1, 0, -2, -2, -2, 
+        (0)  -2, 0, 1},
+        (1) {1, "Y", -7, -2, NONE, -2, 0, 1, 0, PWLINEAR, 1, 0, -2, -2, -2, 
+        (1)  -2, 1, 1},
+        (2) {0, "coords", -7, -2, VECTOR, -2, 0, 1, 0, PWLINEAR, 1, 1, 7, -2, 
+        (2)  -2, 17, 2, 1},
+        (3) {2, "distribution factors", -5, -2, NONE, -2, 0, 1, 0, PWLINEAR, 
+        (3)  1, 0, -2, -2, -2, 18, 3, 1},
+        (4) {3, "temperature", -7, -2, NONE, -2, 0, 1, 0, PWLINEAR, 1, 0, -2, 
+        (4)  -2, -2, 19, 4, 1},
+        (5) {1, "dX", -7, -2, NONE, -2, 0, 1, 0, PWLINEAR, 1, 0, -2, -2, -2, 
+        (5)  -2, 5, 1},
+        (6) {1, "dY", -7, -2, NONE, -2, 0, 1, 0, PWLINEAR, 1, 0, -2, -2, -2, 
+        (6)  -2, 6, 1},
+        (7) {0, "displacements", -7, -2, VECTOR, -2, 0, 1, 0, PWLINEAR, 1, 0, 
+        (7)  8, -2, -2, 20, 7, 1},
+        (8) {5, "Sx", -7, -2, NONE, -2, 1, 1, 1, PWCONST, 1, 0, -2, -2, -2, 
+        (8)  -2, 8, 1},
+        (9) {5, "Sy", -7, -2, NONE, -2, 1, 1, 1, PWCONST, 1, 0, -2, -2, -2, 
+        (9)  -2, 9, 1},
+        (10) {5, "Sxy", -7, -2, NONE, -2, 1, 1, 1, PWCONST, 1, 0, -2, -2, -2, 
+        (10)  -2, 10, 1},
+        (11) {4, "stress", -7, -2, VECTOR, -2, 1, 1, 1, PWCONST, 1, 0, 9, -2, 
+        (11)  -2, 21, 11, 1},
+        (12) {6, "temperature", -7, -2, NONE, -2, 0, 1, 0, PWLINEAR, 1, 0, -2, 
+        (12)  -2, -2, 22, 12, 1},
+        (13) {7, "pressure", -7, -2, NONE, -2, 2, 1, 2, PWCONST, 1, 0, -2, -2, 
+        (13)  -2, 23, 13, 1}
+/FieldTmpl               Dataset {8/Inf}
+    Data:
+        (0) {"coordinate_tmpl", 0, VECTOR, CARTESIAN, 2, 2, 0, 0, 1},
+        (1) {"coordinate_tmpl_component", 0, SCALAR, CARTESIAN, 2, 1, 0, 1, 1},
+        (2) {"distrib_factors_tmpl", 5, SCALAR, UNITY, -5, 1, 0, 2, 1},
+        (3) {"temp_on_ns1_tmpl", 6, SCALAR, UNITY, 0, 1, 0, 3, 1},
+        (4) {"stress_on_cell_1_tmpl", 1, SYM_TENSOR, UPPER_TRI, 0, 3, 0, 4, 1},
+        (5) {"stress_on_cell_1_tmpl_component", 1, SCALAR, UPPER_TRI, 0, 1, 0, 
+        (5)  5, 1}, {"temp_on_cell_2_tmpl", 2, SCALAR, UNITY, 1, 1, 0, 6, 1},
+        (7) {"pressure_on_ss1", 4, SCALAR, UNITY, 0, 1, 0, 7, 1}
+/IndexSpec               Dataset {24/Inf}
+    Data:
+        (0) {1, {[0,0,0,0,0,0,0,0]}, {[18,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (0)  0]}, C_ORDER, 0, 1},
+        (1) {1, {[0,0,0,0,0,0,0,0]}, {[12,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (1)  0]}, C_ORDER, 1, 1},
+        (2) {1, {[0,0,0,0,0,0,0,0]}, {[4,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,0]}, 
+        (2)  C_ORDER, 2, 1},
+        (3) {1, {[0,0,0,0,0,0,0,0]}, {[2,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,0]}, 
+        (3)  C_ORDER, 3, 1},
+        (4) {1, {[0,0,0,0,0,0,0,0]}, {[9,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,0]}, 
+        (4)  C_ORDER, 4, 1},
+        (5) {1, {[0,0,0,0,0,0,0,0]}, {[4,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,0]}, 
+        (5)  C_ORDER, 5, 1},
+        (6) {1, {[0,0,0,0,0,0,0,0]}, {[1,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,0]}, 
+        (6)  C_ORDER, 6, 1},
+        (7) {1, {[0,0,0,0,0,0,0,0]}, {[7,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,0]}, 
+        (7)  C_ORDER, 7, 1},
+        (8) {1, {[0,0,0,0,0,0,0,0]}, {[4,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,0]}, 
+        (8)  C_ORDER, 8, 1},
+        (9) {1, {[0,0,0,0,0,0,0,0]}, {[2,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,0]}, 
+        (9)  C_ORDER, 9, 1},
+        (10) {1, {[0,0,0,0,0,0,0,0]}, {[10,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (10)  0]}, C_ORDER, 10, 1},
+        (11) {1, {[0,0,0,0,0,0,0,0]}, {[4,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (11)  0]}, C_ORDER, 11, 1},
+        (12) {1, {[0,0,0,0,0,0,0,0]}, {[1,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (12)  0]}, C_ORDER, 12, 1},
+        (13) {1, {[0,0,0,0,0,0,0,0]}, {[3,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (13)  0]}, C_ORDER, 13, 1},
+        (14) {1, {[0,0,0,0,0,0,0,0]}, {[2,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (14)  0]}, C_ORDER, 14, 1},
+        (15) {1, {[0,0,0,0,0,0,0,0]}, {[5,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (15)  0]}, C_ORDER, 15, 1},
+        (16) {1, {[0,0,0,0,0,0,0,0]}, {[4,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (16)  0]}, C_ORDER, 16, 1},
+        (17) {1, {[0,0,0,0,0,0,0,0]}, {[5,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (17)  0]}, C_ORDER, 17, 1},
+        (18) {1, {[0,0,0,0,0,0,0,0]}, {[5,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (18)  0]}, C_ORDER, 18, 1},
+        (19) {1, {[0,0,0,0,0,0,0,0]}, {[3,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (19)  0]}, C_ORDER, 19, 1},
+        (20) {1, {[0,0,0,0,0,0,0,0]}, {[1,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (20)  0]}, C_ORDER, 20, 1},
+        (21) {1, {[0,0,0,0,0,0,0,0]}, {[4,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (21)  0]}, C_ORDER, 21, 1},
+        (22) {1, {[0,0,0,0,0,0,0,0]}, {[1,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (22)  0]}, C_ORDER, 22, 1},
+        (23) {1, {[0,0,0,0,0,0,0,0]}, {[1,0,0,0,0,0,0,0]}, {[0,0,0,0,0,0,0,
+        (23)  0]}, C_ORDER, 23, 1}
+/Relation                Dataset {21/Inf}
+    Data:
+        (0) {1, 0, -2, 0, 0, -2, EQUAL, TLIST, -2, 0, 0, 1},
+        (1) {1, 1, -2, 0, 1, -2, EQUAL, TLIST, -2, 1, 1, 1},
+        (2) {2, 0, -2, 0, 0, -2, EQUAL, TLIST, -2, 2, 2, 1},
+        (3) {2, 1, -2, 0, 1, -2, EQUAL, TLIST, -2, 3, 3, 1},
+        (4) {7, 0, -2, 0, 0, -2, EQUAL, TLIST, -2, 4, 4, 1},
+        (5) {7, 1, -2, 0, 1, -2, EQUAL, TLIST, -2, 5, 5, 1},
+        (6) {8, 0, -2, 0, 0, -2, EQUAL, TLIST, -2, 6, 6, 1},
+        (7) {8, 1, -2, 0, 1, -2, EQUAL, TLIST, -2, 7, 7, 1},
+        (8) {3, 0, -2, 0, 0, -2, EQUAL, TLIST, -2, 8, 8, 1},
+        (9) {3, 1, -2, 0, 1, -2, EQUAL, TLIST, -2, 9, 9, 1},
+        (10) {4, 0, -2, 0, 0, -2, EQUAL, TLIST, -2, 10, 10, 1},
+        (11) {5, 0, -2, 0, 0, -2, EQUAL, TLIST, -2, 11, 11, 1},
+        (12) {6, 0, -2, 0, 0, -2, EQUAL, TLIST, -2, 12, 12, 1},
+        (13) {1, 3, -2, 0, 3, -2, EQUAL, TLIST, -2, -2, 13, 1},
+        (14) {7, 3, -2, 0, 3, -2, EQUAL, TLIST, -2, -2, 14, 1},
+        (15) {8, 3, -2, 0, 3, -2, EQUAL, TLIST, -2, -2, 15, 1},
+        (16) {3, 3, -2, 0, 3, -2, EQUAL, TLIST, -2, -2, 16, 1},
+        (17) {1, 1, -2, 0, 0, -2, SUBSET, UNSTRUCTURED, -2, 13, 17, 1},
+        (18) {7, 1, -2, 0, 0, -2, SUBSET, UNSTRUCTURED, -2, 14, 18, 1},
+        (19) {8, 1, -2, 0, 0, -2, SUBSET, UNSTRUCTURED, -2, 15, 19, 1},
+        (20) {3, 1, -2, 0, 0, -2, SUBSET, UNSTRUCTURED, -2, 16, 20, 1}
+/Set                     Dataset {9/Inf}
+    Data:
+        (0) {0, "TOP_CELL", 2, SPACE, {[0,1,-2,2,3,-2,-2,-2,-2,-2,-2,-2,-2,-2,
+        (0)  -2,-2]}, 1, 0, -2, -2, 0, 1},
+        (1) {0, "CELL_1", 2, SPACE, {[4,5,-2,6,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,
+        (1)  -2,-2]}, 0, 0, -2, -2, 1, 1},
+        (2) {0, "CELL_2", 2, SPACE, {[7,8,-2,9,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,
+        (2)  -2,-2]}, 0, 0, -2, -2, 2, 1},
+        (3) {0, "CELL_3", 2, SPACE, {[10,11,-2,12,-2,-2,-2,-2,-2,-2,-2,-2,-2,
+        (3)  -2,-2,-2]}, 0, 0, -2, -2, 3, 1},
+        (4) {0, "SIDE_SET_1", 1, SPACE, {[13,-2,14,-2,-2,-2,-2,-2,-2,-2,-2,-2,
+        (4)  -2,-2,-2,-2]}, 0, 0, -2, -2, 4, 1},
+        (5) {0, "SIDE_SET_2", 1, SPACE, {[15,-2,16,-2,-2,-2,-2,-2,-2,-2,-2,-2,
+        (5)  -2,-2,-2,-2]}, 0, 0, -2, -2, 5, 1},
+        (6) {0, "NODE_SET_1", 0, SPACE, {[17,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,-2,
+        (6)  -2,-2,-2,-2]}, 0, 0, -2, -2, 6, 1},
+        (7) {0, "CELL_2_TRIS", 2, SPACE, {[18,19,-2,20,-2,-2,-2,-2,-2,-2,-2,-2,
+        (7)  -2,-2,-2,-2]}, 0, 0, -2, -2, 7, 1},
+        (8) {0, "CELL_2_QUADS", 2, SPACE, {[21,22,-2,23,-2,-2,-2,-2,-2,-2,-2,
+        (8)  -2,-2,-2,-2,-2]}, 0, 0, -2, -2, 8, 1}
+/field-coords_0002       Dataset {36}
+    Data:
+        (0) 0, 4, 1, 4, 2, 4, 2.5, 4, 0, 3, 1, 3, 2, 3, 2.5, 3, 0, 2, 1, 2, 2,
+        (21) 2, 2.5, 2, 0, 1, 2, 1, 2.5, 1, 0, 0, 2, 0, 2.5, 0
+/field-displacements_0007 Dataset {36}
+    Data:
+        (0) 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,
+        (11) 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,
+        (22) 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25,
+        (33) 0.25, 0.25, 0.25
+/field-distribution_factors_0003 Dataset {5}
+    Data:
+        (0) 4, 3, 2, 1, 0
+/field-pressure_0013     Dataset {2}
+    Data:
+        (0) 45, 55
+/field-stress_0011       Dataset {12}
+    Data:
+        (0) 0.5, 0.25, 0.5, 0.5, 0.25, 0.5, 0.5, 0.25, 0.5, 0.5, 0.25, 0.5
+/field-temperature_0004  Dataset {5}
+    Data:
+        (0) 100, 150, 150, 100, 75
+/field-temperature_0012  Dataset {7}
+    Data:
+        (0) 75, 95, 120, 80, 115, 85, 110
+/metablob00000.blob      Dataset {19/Inf}
+    Data:
+        (0) 1, 7, 8, 3, -2, -2, -2, -2, -2, -2, -2, -2, 0, 1, 5, 6, 8, 9, 10
+/metablob00000.index     Dataset {10/Inf}
+    Data:
+        (0) {0, 4}, {4, 2}, {6, 1}, {7, 2}, {9, 1}, {10, 1}, {11, 1}, {12, 2},
+        (8) {14, 2}, {16, 3}
+/ssrel-_0000             Dataset {9}
+    Data:
+        (0) 1, 2, 3, 5, 6, 7, 9, 10, 11
+/ssrel-_0001             Dataset {4}
+    Data:
+        (0) 1, 2, 4, 5
+/ssrel-_0002             Dataset {7}
+    Data:
+        (0) 9, 10, 11, 13, 14, 16, 17
+/ssrel-_0003             Dataset {4}
+    Data:
+        (0) 7, 8, 9, 11
+/ssrel-_0004             Dataset {5}
+    Data:
+        (0) 9, 10, 11, 13, 14
+/ssrel-_0005             Dataset {3}
+    Data:
+        (0) 7, 8, 9
+/ssrel-_0006             Dataset {4}
+    Data:
+        (0) 13, 14, 16, 17
+/ssrel-_0007             Dataset {1}
+    Data:
+        (0) 11
+/ssrel-_0008             Dataset {10}
+    Data:
+        (0) 3, 4, 7, 8, 11, 12, 14, 15, 17, 18
+/ssrel-_0009             Dataset {4}
+    Data:
+        (0) 3, 6, 10, 12
+/ssrel-_0010             Dataset {3}
+    Data:
+        (0) 9, 10, 11
+/ssrel-_0011             Dataset {5}
+    Data:
+        (0) 1, 5, 9, 13, 16
+/ssrel-_0012             Dataset {5}
+    Data:
+        (0) 4, 8, 12, 15, 18
+/toporel-_0017           Dataset {16}
+    Data:
+        (0) 1, 2, 6, 5, 2, 3, 7, 6, 5, 6, 10, 9, 6, 7, 11, 10
+/toporel-_0018           Dataset {9}
+    Data:
+        (0) 9, 10, 13, 10, 14, 13, 10, 11, 14
+/toporel-_0019           Dataset {4}
+    Data:
+        (0) 13, 14, 17, 16
+/toporel-_0020           Dataset {16}
+    Data:
+        (0) 3, 4, 8, 7, 7, 8, 12, 11, 11, 12, 15, 14, 14, 15, 18, 17

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tshuffle.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tshuffle.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tshuffle.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,23 @@
+#############################
+Expected output for 'h5dump -H -p -d shuffle tfilters.h5'
+#############################
+HDF5 "tfilters.h5" {
+DATASET "shuffle" {
+   DATATYPE  H5T_STD_I32LE
+   DATASPACE  SIMPLE { ( 20, 10 ) / ( 20, 10 ) }
+   STORAGE_LAYOUT {
+      CHUNKED ( 10, 5 )
+      SIZE 800
+    }
+   FILTERS {
+      PREPROCESSING SHUFFLE
+   }
+   FILLVALUE {
+      FILL_TIME H5D_FILL_TIME_IFSET
+      VALUE  0   
+   }
+   ALLOCATION_TIME {
+      H5D_ALLOC_TIME_INCR
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tslink-1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tslink-1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tslink-1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,13 @@
+#############################
+Expected output for 'h5dump tslink.h5'
+#############################
+HDF5 "tslink.h5" {
+GROUP "/" {
+   SOFTLINK "slink1" {
+      LINKTARGET "somevalue"
+   }
+   SOFTLINK "slink2" {
+      LINKTARGET "linkvalue"
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tslink-1.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tslink-1.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tslink-1.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,5 @@
+#############################
+ output for 'h5ls -w80 -r tslink.h5'
+#############################
+/slink1                  -> somevalue
+/slink2                  -> linkvalue

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tslink-2.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tslink-2.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tslink-2.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,8 @@
+#############################
+Expected output for 'h5dump -l slink2 tslink.h5'
+#############################
+HDF5 "tslink.h5" {
+SOFTLINK "slink2" {
+   LINKTARGET "linkvalue"
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tslink.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tslink.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tslink.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tslink.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tslink.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,10 @@
+#############################
+Expected output for 'h5dump --xml tslink.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:SoftLink LinkName="slink1" OBJ-XID="xid_4294967294-4294967293" H5SourcePath="/slink1" TargetPath="somevalue"  Parents="xid_696-0" H5ParentPaths="/" />
+   <hdf5:SoftLink LinkName="slink2" OBJ-XID="xid_4294967292-4294967291" H5SourcePath="/slink2" TargetPath="linkvalue"  Parents="xid_696-0" H5ParentPaths="/" />
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tsplit_file-m.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tsplit_file-m.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tsplit_file-r.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tsplit_file-r.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tsplit_file.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tsplit_file.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tsplit_file.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,35 @@
+#############################
+Expected output for 'h5dump --filedriver=split tsplit_file'
+#############################
+HDF5 "tsplit_file" {
+GROUP "/" {
+   ATTRIBUTE "Metadata" {
+      DATATYPE  H5T_STRING {
+            STRSIZE 35;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         }
+      DATASPACE  SIMPLE { ( 1 ) / ( 1 ) }
+      DATA {
+      (0): "this is some metadata on this file"
+      }
+   }
+   DATASET "dset1" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 10, 15 ) / ( 10, 15 ) }
+      DATA {
+      (0,0): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+      (1,0): 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+      (2,0): 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+      (3,0): 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+      (4,0): 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+      (5,0): 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+      (6,0): 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+      (7,0): 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+      (8,0): 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+      (9,0): 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstr-1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tstr-1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tstr-1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,319 @@
+#############################
+Expected output for 'h5dump tstr.h5'
+#############################
+HDF5 "tstr.h5" {
+GROUP "/" {
+   DATASET "comp1" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_ARRAY { [8][10] H5T_STD_I32BE } "int_array";
+         H5T_ARRAY { [3][4] H5T_STRING {
+            STRSIZE 32;
+            STRPAD H5T_STR_SPACEPAD;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         } } "string";
+      }
+      DATASPACE  SIMPLE { ( 3, 6 ) / ( 3, 6 ) }
+      DATA {
+      (0,0): {
+            [ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81,
+               1, 4, 9, 16, 25, 36, 49, 64, 81, 100,
+               4, 9, 16, 25, 36, 49, 64, 81, 100, 121,
+               9, 16, 25, 36, 49, 64, 81, 100, 121, 144,
+               16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (0,1): {
+            [ 1, 4, 9, 16, 25, 36, 49, 64, 81, 100,
+               4, 9, 16, 25, 36, 49, 64, 81, 100, 121,
+               9, 16, 25, 36, 49, 64, 81, 100, 121, 144,
+               16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (0,2): {
+            [ 4, 9, 16, 25, 36, 49, 64, 81, 100, 121,
+               9, 16, 25, 36, 49, 64, 81, 100, 121, 144,
+               16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289,
+               81, 100, 121, 144, 169, 196, 225, 256, 289, 324 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (0,3): {
+            [ 9, 16, 25, 36, 49, 64, 81, 100, 121, 144,
+               16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289,
+               81, 100, 121, 144, 169, 196, 225, 256, 289, 324,
+               100, 121, 144, 169, 196, 225, 256, 289, 324, 361 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (0,4): {
+            [ 16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289,
+               81, 100, 121, 144, 169, 196, 225, 256, 289, 324,
+               100, 121, 144, 169, 196, 225, 256, 289, 324, 361,
+               121, 144, 169, 196, 225, 256, 289, 324, 361, 400 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (0,5): {
+            [ 25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289,
+               81, 100, 121, 144, 169, 196, 225, 256, 289, 324,
+               100, 121, 144, 169, 196, 225, 256, 289, 324, 361,
+               121, 144, 169, 196, 225, 256, 289, 324, 361, 400,
+               144, 169, 196, 225, 256, 289, 324, 361, 400, 441 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (1,0): {
+            [ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81,
+               1, 4, 9, 16, 25, 36, 49, 64, 81, 100,
+               4, 9, 16, 25, 36, 49, 64, 81, 100, 121,
+               9, 16, 25, 36, 49, 64, 81, 100, 121, 144,
+               16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (1,1): {
+            [ 1, 4, 9, 16, 25, 36, 49, 64, 81, 100,
+               4, 9, 16, 25, 36, 49, 64, 81, 100, 121,
+               9, 16, 25, 36, 49, 64, 81, 100, 121, 144,
+               16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (1,2): {
+            [ 4, 9, 16, 25, 36, 49, 64, 81, 100, 121,
+               9, 16, 25, 36, 49, 64, 81, 100, 121, 144,
+               16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289,
+               81, 100, 121, 144, 169, 196, 225, 256, 289, 324 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (1,3): {
+            [ 9, 16, 25, 36, 49, 64, 81, 100, 121, 144,
+               16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289,
+               81, 100, 121, 144, 169, 196, 225, 256, 289, 324,
+               100, 121, 144, 169, 196, 225, 256, 289, 324, 361 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (1,4): {
+            [ 16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289,
+               81, 100, 121, 144, 169, 196, 225, 256, 289, 324,
+               100, 121, 144, 169, 196, 225, 256, 289, 324, 361,
+               121, 144, 169, 196, 225, 256, 289, 324, 361, 400 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (1,5): {
+            [ 25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289,
+               81, 100, 121, 144, 169, 196, 225, 256, 289, 324,
+               100, 121, 144, 169, 196, 225, 256, 289, 324, 361,
+               121, 144, 169, 196, 225, 256, 289, 324, 361, 400,
+               144, 169, 196, 225, 256, 289, 324, 361, 400, 441 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (2,0): {
+            [ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81,
+               1, 4, 9, 16, 25, 36, 49, 64, 81, 100,
+               4, 9, 16, 25, 36, 49, 64, 81, 100, 121,
+               9, 16, 25, 36, 49, 64, 81, 100, 121, 144,
+               16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (2,1): {
+            [ 1, 4, 9, 16, 25, 36, 49, 64, 81, 100,
+               4, 9, 16, 25, 36, 49, 64, 81, 100, 121,
+               9, 16, 25, 36, 49, 64, 81, 100, 121, 144,
+               16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (2,2): {
+            [ 4, 9, 16, 25, 36, 49, 64, 81, 100, 121,
+               9, 16, 25, 36, 49, 64, 81, 100, 121, 144,
+               16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289,
+               81, 100, 121, 144, 169, 196, 225, 256, 289, 324 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (2,3): {
+            [ 9, 16, 25, 36, 49, 64, 81, 100, 121, 144,
+               16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289,
+               81, 100, 121, 144, 169, 196, 225, 256, 289, 324,
+               100, 121, 144, 169, 196, 225, 256, 289, 324, 361 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (2,4): {
+            [ 16, 25, 36, 49, 64, 81, 100, 121, 144, 169,
+               25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289,
+               81, 100, 121, 144, 169, 196, 225, 256, 289, 324,
+               100, 121, 144, 169, 196, 225, 256, 289, 324, 361,
+               121, 144, 169, 196, 225, 256, 289, 324, 361, 400 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         },
+      (2,5): {
+            [ 25, 36, 49, 64, 81, 100, 121, 144, 169, 196,
+               36, 49, 64, 81, 100, 121, 144, 169, 196, 225,
+               49, 64, 81, 100, 121, 144, 169, 196, 225, 256,
+               64, 81, 100, 121, 144, 169, 196, 225, 256, 289,
+               81, 100, 121, 144, 169, 196, 225, 256, 289, 324,
+               100, 121, 144, 169, 196, 225, 256, 289, 324, 361,
+               121, 144, 169, 196, 225, 256, 289, 324, 361, 400,
+               144, 169, 196, 225, 256, 289, 324, 361, 400, 441 ],
+            [ "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678",
+               "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678", "abcdefgh12345678abcdefgh12345678" ]
+         }
+      }
+   }
+   DATASET "string1" {
+      DATATYPE  H5T_STRING {
+            STRSIZE 5;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         }
+      DATASPACE  SIMPLE { ( 3, 4 ) / ( 3, 4 ) }
+      DATA {
+      (0,0): "s1", "s2", "s3", "s4",
+      (1,0): "s5", "s6", "s7", "s8",
+      (2,0): "s9", "s0", "s1", "s2"
+      }
+   }
+   DATASET "string2" {
+      DATATYPE  H5T_STRING {
+            STRSIZE 11;
+            STRPAD H5T_STR_SPACEPAD;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         }
+      DATASPACE  SIMPLE { ( 20 ) / ( 20 ) }
+      DATA {
+      (0): "ab cd ef1  ", "ab cd ef2  ", "ab cd ef3  ", "ab cd ef4  ",
+      (4): "ab cd ef5  ", "ab cd ef6  ", "ab cd ef7  ", "ab cd ef8  ",
+      (8): "ab cd ef9  ", "ab cd ef0  ", "ab cd ef1  ", "ab cd ef2  ",
+      (12): "ab cd ef3  ", "ab cd ef4  ", "ab cd ef5  ", "ab cd ef6  ",
+      (16): "ab cd ef7  ", "ab cd ef8  ", "ab cd ef9  ", "ab cd ef0  "
+      }
+   }
+   DATASET "string3" {
+      DATATYPE  H5T_STRING {
+            STRSIZE 8;
+            STRPAD H5T_STR_NULLPAD;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         }
+      DATASPACE  SIMPLE { ( 27 ) / ( 27 ) }
+      DATA {
+      (0): "abcd0\000\000\000", "abcd1\000\000\000", "abcd2\000\000\000",
+      (3): "abcd3\000\000\000", "abcd4\000\000\000", "abcd5\000\000\000",
+      (6): "abcd6\000\000\000", "abcd7\000\000\000", "abcd8\000\000\000",
+      (9): "abcd9\000\000\000", "abcd0\000\000\000", "abcd1\000\000\000",
+      (12): "abcd2\000\000\000", "abcd3\000\000\000", "abcd4\000\000\000",
+      (15): "abcd5\000\000\000", "abcd6\000\000\000", "abcd7\000\000\000",
+      (18): "abcd8\000\000\000", "abcd9\000\000\000", "abcd0\000\000\000",
+      (21): "abcd1\000\000\000", "abcd2\000\000\000", "abcd3\000\000\000",
+      (24): "abcd4\000\000\000", "abcd5\000\000\000", "abcd6\000\000\000"
+      }
+   }
+   DATASET "string4" {
+      DATATYPE  H5T_STRING {
+            STRSIZE 168;
+            STRPAD H5T_STR_SPACEPAD;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         }
+      DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
+      DATA {
+      (0): "s1234567890123456789                                                                                                                                                    ",
+      (1): "s1234567890123456789                                                                                                                                                    ",
+      (2): "s1234567890123456789                                                                                                                                                    "
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstr-1.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tstr-1.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tstr-1.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,332 @@
+#############################
+ output for 'h5ls -w80 -r -d tstr.h5'
+#############################
+/comp1                   Dataset {3, 6}
+    Data:
+        (0,0) {[0,1,4,9,16,25,36,49,64,81,1,4,9,16,25,36,49,64,81,100,4,9,16,
+        (0,0)  25,36,49,64,81,100,121,9,16,25,36,49,64,81,100,121,144,16,25,36,
+        (0,0)  49,64,81,100,121,144,169,25,36,49,64,81,100,121,144,169,196,36,
+        (0,0)  49,64,81,100,121,144,169,196,225,49,64,81,100,121,144,169,196,
+        (0,0)  225,256], ["abcdefgh12345678abcdefgh12345678",
+        (0,0)  "abcdefgh12345678abcdefgh12345678",
+        (0,0)  "abcdefgh12345678abcdefgh12345678",
+        (0,0)  "abcdefgh12345678abcdefgh12345678",
+        (0,0)  "abcdefgh12345678abcdefgh12345678",
+        (0,0)  "abcdefgh12345678abcdefgh12345678",
+        (0,0)  "abcdefgh12345678abcdefgh12345678",
+        (0,0)  "abcdefgh12345678abcdefgh12345678",
+        (0,0)  "abcdefgh12345678abcdefgh12345678",
+        (0,0)  "abcdefgh12345678abcdefgh12345678",
+        (0,0)  "abcdefgh12345678abcdefgh12345678",
+        (0,0)  "abcdefgh12345678abcdefgh12345678"]},
+        (0,1) {[1,4,9,16,25,36,49,64,81,100,4,9,16,25,36,49,64,81,100,121,9,16,
+        (0,1)  25,36,49,64,81,100,121,144,16,25,36,49,64,81,100,121,144,169,25,
+        (0,1)  36,49,64,81,100,121,144,169,196,36,49,64,81,100,121,144,169,196,
+        (0,1)  225,49,64,81,100,121,144,169,196,225,256,64,81,100,121,144,169,
+        (0,1)  196,225,256,289], ["abcdefgh12345678abcdefgh12345678",
+        (0,1)  "abcdefgh12345678abcdefgh12345678",
+        (0,1)  "abcdefgh12345678abcdefgh12345678",
+        (0,1)  "abcdefgh12345678abcdefgh12345678",
+        (0,1)  "abcdefgh12345678abcdefgh12345678",
+        (0,1)  "abcdefgh12345678abcdefgh12345678",
+        (0,1)  "abcdefgh12345678abcdefgh12345678",
+        (0,1)  "abcdefgh12345678abcdefgh12345678",
+        (0,1)  "abcdefgh12345678abcdefgh12345678",
+        (0,1)  "abcdefgh12345678abcdefgh12345678",
+        (0,1)  "abcdefgh12345678abcdefgh12345678",
+        (0,1)  "abcdefgh12345678abcdefgh12345678"]},
+        (0,2) {[4,9,16,25,36,49,64,81,100,121,9,16,25,36,49,64,81,100,121,144,
+        (0,2)  16,25,36,49,64,81,100,121,144,169,25,36,49,64,81,100,121,144,
+        (0,2)  169,196,36,49,64,81,100,121,144,169,196,225,49,64,81,100,121,
+        (0,2)  144,169,196,225,256,64,81,100,121,144,169,196,225,256,289,81,
+        (0,2)  100,121,144,169,196,225,256,289,324], 
+        (0,2)  ["abcdefgh12345678abcdefgh12345678",
+        (0,2)  "abcdefgh12345678abcdefgh12345678",
+        (0,2)  "abcdefgh12345678abcdefgh12345678",
+        (0,2)  "abcdefgh12345678abcdefgh12345678",
+        (0,2)  "abcdefgh12345678abcdefgh12345678",
+        (0,2)  "abcdefgh12345678abcdefgh12345678",
+        (0,2)  "abcdefgh12345678abcdefgh12345678",
+        (0,2)  "abcdefgh12345678abcdefgh12345678",
+        (0,2)  "abcdefgh12345678abcdefgh12345678",
+        (0,2)  "abcdefgh12345678abcdefgh12345678",
+        (0,2)  "abcdefgh12345678abcdefgh12345678",
+        (0,2)  "abcdefgh12345678abcdefgh12345678"]},
+        (0,3) {[9,16,25,36,49,64,81,100,121,144,16,25,36,49,64,81,100,121,144,
+        (0,3)  169,25,36,49,64,81,100,121,144,169,196,36,49,64,81,100,121,144,
+        (0,3)  169,196,225,49,64,81,100,121,144,169,196,225,256,64,81,100,121,
+        (0,3)  144,169,196,225,256,289,81,100,121,144,169,196,225,256,289,324,
+        (0,3)  100,121,144,169,196,225,256,289,324,361], 
+        (0,3)  ["abcdefgh12345678abcdefgh12345678",
+        (0,3)  "abcdefgh12345678abcdefgh12345678",
+        (0,3)  "abcdefgh12345678abcdefgh12345678",
+        (0,3)  "abcdefgh12345678abcdefgh12345678",
+        (0,3)  "abcdefgh12345678abcdefgh12345678",
+        (0,3)  "abcdefgh12345678abcdefgh12345678",
+        (0,3)  "abcdefgh12345678abcdefgh12345678",
+        (0,3)  "abcdefgh12345678abcdefgh12345678",
+        (0,3)  "abcdefgh12345678abcdefgh12345678",
+        (0,3)  "abcdefgh12345678abcdefgh12345678",
+        (0,3)  "abcdefgh12345678abcdefgh12345678",
+        (0,3)  "abcdefgh12345678abcdefgh12345678"]},
+        (0,4) {[16,25,36,49,64,81,100,121,144,169,25,36,49,64,81,100,121,144,
+        (0,4)  169,196,36,49,64,81,100,121,144,169,196,225,49,64,81,100,121,
+        (0,4)  144,169,196,225,256,64,81,100,121,144,169,196,225,256,289,81,
+        (0,4)  100,121,144,169,196,225,256,289,324,100,121,144,169,196,225,256,
+        (0,4)  289,324,361,121,144,169,196,225,256,289,324,361,400], 
+        (0,4)  ["abcdefgh12345678abcdefgh12345678",
+        (0,4)  "abcdefgh12345678abcdefgh12345678",
+        (0,4)  "abcdefgh12345678abcdefgh12345678",
+        (0,4)  "abcdefgh12345678abcdefgh12345678",
+        (0,4)  "abcdefgh12345678abcdefgh12345678",
+        (0,4)  "abcdefgh12345678abcdefgh12345678",
+        (0,4)  "abcdefgh12345678abcdefgh12345678",
+        (0,4)  "abcdefgh12345678abcdefgh12345678",
+        (0,4)  "abcdefgh12345678abcdefgh12345678",
+        (0,4)  "abcdefgh12345678abcdefgh12345678",
+        (0,4)  "abcdefgh12345678abcdefgh12345678",
+        (0,4)  "abcdefgh12345678abcdefgh12345678"]},
+        (0,5) {[25,36,49,64,81,100,121,144,169,196,36,49,64,81,100,121,144,169,
+        (0,5)  196,225,49,64,81,100,121,144,169,196,225,256,64,81,100,121,144,
+        (0,5)  169,196,225,256,289,81,100,121,144,169,196,225,256,289,324,100,
+        (0,5)  121,144,169,196,225,256,289,324,361,121,144,169,196,225,256,289,
+        (0,5)  324,361,400,144,169,196,225,256,289,324,361,400,441], 
+        (0,5)  ["abcdefgh12345678abcdefgh12345678",
+        (0,5)  "abcdefgh12345678abcdefgh12345678",
+        (0,5)  "abcdefgh12345678abcdefgh12345678",
+        (0,5)  "abcdefgh12345678abcdefgh12345678",
+        (0,5)  "abcdefgh12345678abcdefgh12345678",
+        (0,5)  "abcdefgh12345678abcdefgh12345678",
+        (0,5)  "abcdefgh12345678abcdefgh12345678",
+        (0,5)  "abcdefgh12345678abcdefgh12345678",
+        (0,5)  "abcdefgh12345678abcdefgh12345678",
+        (0,5)  "abcdefgh12345678abcdefgh12345678",
+        (0,5)  "abcdefgh12345678abcdefgh12345678",
+        (0,5)  "abcdefgh12345678abcdefgh12345678"]},
+        (1,0) {[0,1,4,9,16,25,36,49,64,81,1,4,9,16,25,36,49,64,81,100,4,9,16,
+        (1,0)  25,36,49,64,81,100,121,9,16,25,36,49,64,81,100,121,144,16,25,36,
+        (1,0)  49,64,81,100,121,144,169,25,36,49,64,81,100,121,144,169,196,36,
+        (1,0)  49,64,81,100,121,144,169,196,225,49,64,81,100,121,144,169,196,
+        (1,0)  225,256], ["abcdefgh12345678abcdefgh12345678",
+        (1,0)  "abcdefgh12345678abcdefgh12345678",
+        (1,0)  "abcdefgh12345678abcdefgh12345678",
+        (1,0)  "abcdefgh12345678abcdefgh12345678",
+        (1,0)  "abcdefgh12345678abcdefgh12345678",
+        (1,0)  "abcdefgh12345678abcdefgh12345678",
+        (1,0)  "abcdefgh12345678abcdefgh12345678",
+        (1,0)  "abcdefgh12345678abcdefgh12345678",
+        (1,0)  "abcdefgh12345678abcdefgh12345678",
+        (1,0)  "abcdefgh12345678abcdefgh12345678",
+        (1,0)  "abcdefgh12345678abcdefgh12345678",
+        (1,0)  "abcdefgh12345678abcdefgh12345678"]},
+        (1,1) {[1,4,9,16,25,36,49,64,81,100,4,9,16,25,36,49,64,81,100,121,9,16,
+        (1,1)  25,36,49,64,81,100,121,144,16,25,36,49,64,81,100,121,144,169,25,
+        (1,1)  36,49,64,81,100,121,144,169,196,36,49,64,81,100,121,144,169,196,
+        (1,1)  225,49,64,81,100,121,144,169,196,225,256,64,81,100,121,144,169,
+        (1,1)  196,225,256,289], ["abcdefgh12345678abcdefgh12345678",
+        (1,1)  "abcdefgh12345678abcdefgh12345678",
+        (1,1)  "abcdefgh12345678abcdefgh12345678",
+        (1,1)  "abcdefgh12345678abcdefgh12345678",
+        (1,1)  "abcdefgh12345678abcdefgh12345678",
+        (1,1)  "abcdefgh12345678abcdefgh12345678",
+        (1,1)  "abcdefgh12345678abcdefgh12345678",
+        (1,1)  "abcdefgh12345678abcdefgh12345678",
+        (1,1)  "abcdefgh12345678abcdefgh12345678",
+        (1,1)  "abcdefgh12345678abcdefgh12345678",
+        (1,1)  "abcdefgh12345678abcdefgh12345678",
+        (1,1)  "abcdefgh12345678abcdefgh12345678"]},
+        (1,2) {[4,9,16,25,36,49,64,81,100,121,9,16,25,36,49,64,81,100,121,144,
+        (1,2)  16,25,36,49,64,81,100,121,144,169,25,36,49,64,81,100,121,144,
+        (1,2)  169,196,36,49,64,81,100,121,144,169,196,225,49,64,81,100,121,
+        (1,2)  144,169,196,225,256,64,81,100,121,144,169,196,225,256,289,81,
+        (1,2)  100,121,144,169,196,225,256,289,324], 
+        (1,2)  ["abcdefgh12345678abcdefgh12345678",
+        (1,2)  "abcdefgh12345678abcdefgh12345678",
+        (1,2)  "abcdefgh12345678abcdefgh12345678",
+        (1,2)  "abcdefgh12345678abcdefgh12345678",
+        (1,2)  "abcdefgh12345678abcdefgh12345678",
+        (1,2)  "abcdefgh12345678abcdefgh12345678",
+        (1,2)  "abcdefgh12345678abcdefgh12345678",
+        (1,2)  "abcdefgh12345678abcdefgh12345678",
+        (1,2)  "abcdefgh12345678abcdefgh12345678",
+        (1,2)  "abcdefgh12345678abcdefgh12345678",
+        (1,2)  "abcdefgh12345678abcdefgh12345678",
+        (1,2)  "abcdefgh12345678abcdefgh12345678"]},
+        (1,3) {[9,16,25,36,49,64,81,100,121,144,16,25,36,49,64,81,100,121,144,
+        (1,3)  169,25,36,49,64,81,100,121,144,169,196,36,49,64,81,100,121,144,
+        (1,3)  169,196,225,49,64,81,100,121,144,169,196,225,256,64,81,100,121,
+        (1,3)  144,169,196,225,256,289,81,100,121,144,169,196,225,256,289,324,
+        (1,3)  100,121,144,169,196,225,256,289,324,361], 
+        (1,3)  ["abcdefgh12345678abcdefgh12345678",
+        (1,3)  "abcdefgh12345678abcdefgh12345678",
+        (1,3)  "abcdefgh12345678abcdefgh12345678",
+        (1,3)  "abcdefgh12345678abcdefgh12345678",
+        (1,3)  "abcdefgh12345678abcdefgh12345678",
+        (1,3)  "abcdefgh12345678abcdefgh12345678",
+        (1,3)  "abcdefgh12345678abcdefgh12345678",
+        (1,3)  "abcdefgh12345678abcdefgh12345678",
+        (1,3)  "abcdefgh12345678abcdefgh12345678",
+        (1,3)  "abcdefgh12345678abcdefgh12345678",
+        (1,3)  "abcdefgh12345678abcdefgh12345678",
+        (1,3)  "abcdefgh12345678abcdefgh12345678"]},
+        (1,4) {[16,25,36,49,64,81,100,121,144,169,25,36,49,64,81,100,121,144,
+        (1,4)  169,196,36,49,64,81,100,121,144,169,196,225,49,64,81,100,121,
+        (1,4)  144,169,196,225,256,64,81,100,121,144,169,196,225,256,289,81,
+        (1,4)  100,121,144,169,196,225,256,289,324,100,121,144,169,196,225,256,
+        (1,4)  289,324,361,121,144,169,196,225,256,289,324,361,400], 
+        (1,4)  ["abcdefgh12345678abcdefgh12345678",
+        (1,4)  "abcdefgh12345678abcdefgh12345678",
+        (1,4)  "abcdefgh12345678abcdefgh12345678",
+        (1,4)  "abcdefgh12345678abcdefgh12345678",
+        (1,4)  "abcdefgh12345678abcdefgh12345678",
+        (1,4)  "abcdefgh12345678abcdefgh12345678",
+        (1,4)  "abcdefgh12345678abcdefgh12345678",
+        (1,4)  "abcdefgh12345678abcdefgh12345678",
+        (1,4)  "abcdefgh12345678abcdefgh12345678",
+        (1,4)  "abcdefgh12345678abcdefgh12345678",
+        (1,4)  "abcdefgh12345678abcdefgh12345678",
+        (1,4)  "abcdefgh12345678abcdefgh12345678"]},
+        (1,5) {[25,36,49,64,81,100,121,144,169,196,36,49,64,81,100,121,144,169,
+        (1,5)  196,225,49,64,81,100,121,144,169,196,225,256,64,81,100,121,144,
+        (1,5)  169,196,225,256,289,81,100,121,144,169,196,225,256,289,324,100,
+        (1,5)  121,144,169,196,225,256,289,324,361,121,144,169,196,225,256,289,
+        (1,5)  324,361,400,144,169,196,225,256,289,324,361,400,441], 
+        (1,5)  ["abcdefgh12345678abcdefgh12345678",
+        (1,5)  "abcdefgh12345678abcdefgh12345678",
+        (1,5)  "abcdefgh12345678abcdefgh12345678",
+        (1,5)  "abcdefgh12345678abcdefgh12345678",
+        (1,5)  "abcdefgh12345678abcdefgh12345678",
+        (1,5)  "abcdefgh12345678abcdefgh12345678",
+        (1,5)  "abcdefgh12345678abcdefgh12345678",
+        (1,5)  "abcdefgh12345678abcdefgh12345678",
+        (1,5)  "abcdefgh12345678abcdefgh12345678",
+        (1,5)  "abcdefgh12345678abcdefgh12345678",
+        (1,5)  "abcdefgh12345678abcdefgh12345678",
+        (1,5)  "abcdefgh12345678abcdefgh12345678"]},
+        (2,0) {[0,1,4,9,16,25,36,49,64,81,1,4,9,16,25,36,49,64,81,100,4,9,16,
+        (2,0)  25,36,49,64,81,100,121,9,16,25,36,49,64,81,100,121,144,16,25,36,
+        (2,0)  49,64,81,100,121,144,169,25,36,49,64,81,100,121,144,169,196,36,
+        (2,0)  49,64,81,100,121,144,169,196,225,49,64,81,100,121,144,169,196,
+        (2,0)  225,256], ["abcdefgh12345678abcdefgh12345678",
+        (2,0)  "abcdefgh12345678abcdefgh12345678",
+        (2,0)  "abcdefgh12345678abcdefgh12345678",
+        (2,0)  "abcdefgh12345678abcdefgh12345678",
+        (2,0)  "abcdefgh12345678abcdefgh12345678",
+        (2,0)  "abcdefgh12345678abcdefgh12345678",
+        (2,0)  "abcdefgh12345678abcdefgh12345678",
+        (2,0)  "abcdefgh12345678abcdefgh12345678",
+        (2,0)  "abcdefgh12345678abcdefgh12345678",
+        (2,0)  "abcdefgh12345678abcdefgh12345678",
+        (2,0)  "abcdefgh12345678abcdefgh12345678",
+        (2,0)  "abcdefgh12345678abcdefgh12345678"]},
+        (2,1) {[1,4,9,16,25,36,49,64,81,100,4,9,16,25,36,49,64,81,100,121,9,16,
+        (2,1)  25,36,49,64,81,100,121,144,16,25,36,49,64,81,100,121,144,169,25,
+        (2,1)  36,49,64,81,100,121,144,169,196,36,49,64,81,100,121,144,169,196,
+        (2,1)  225,49,64,81,100,121,144,169,196,225,256,64,81,100,121,144,169,
+        (2,1)  196,225,256,289], ["abcdefgh12345678abcdefgh12345678",
+        (2,1)  "abcdefgh12345678abcdefgh12345678",
+        (2,1)  "abcdefgh12345678abcdefgh12345678",
+        (2,1)  "abcdefgh12345678abcdefgh12345678",
+        (2,1)  "abcdefgh12345678abcdefgh12345678",
+        (2,1)  "abcdefgh12345678abcdefgh12345678",
+        (2,1)  "abcdefgh12345678abcdefgh12345678",
+        (2,1)  "abcdefgh12345678abcdefgh12345678",
+        (2,1)  "abcdefgh12345678abcdefgh12345678",
+        (2,1)  "abcdefgh12345678abcdefgh12345678",
+        (2,1)  "abcdefgh12345678abcdefgh12345678",
+        (2,1)  "abcdefgh12345678abcdefgh12345678"]},
+        (2,2) {[4,9,16,25,36,49,64,81,100,121,9,16,25,36,49,64,81,100,121,144,
+        (2,2)  16,25,36,49,64,81,100,121,144,169,25,36,49,64,81,100,121,144,
+        (2,2)  169,196,36,49,64,81,100,121,144,169,196,225,49,64,81,100,121,
+        (2,2)  144,169,196,225,256,64,81,100,121,144,169,196,225,256,289,81,
+        (2,2)  100,121,144,169,196,225,256,289,324], 
+        (2,2)  ["abcdefgh12345678abcdefgh12345678",
+        (2,2)  "abcdefgh12345678abcdefgh12345678",
+        (2,2)  "abcdefgh12345678abcdefgh12345678",
+        (2,2)  "abcdefgh12345678abcdefgh12345678",
+        (2,2)  "abcdefgh12345678abcdefgh12345678",
+        (2,2)  "abcdefgh12345678abcdefgh12345678",
+        (2,2)  "abcdefgh12345678abcdefgh12345678",
+        (2,2)  "abcdefgh12345678abcdefgh12345678",
+        (2,2)  "abcdefgh12345678abcdefgh12345678",
+        (2,2)  "abcdefgh12345678abcdefgh12345678",
+        (2,2)  "abcdefgh12345678abcdefgh12345678",
+        (2,2)  "abcdefgh12345678abcdefgh12345678"]},
+        (2,3) {[9,16,25,36,49,64,81,100,121,144,16,25,36,49,64,81,100,121,144,
+        (2,3)  169,25,36,49,64,81,100,121,144,169,196,36,49,64,81,100,121,144,
+        (2,3)  169,196,225,49,64,81,100,121,144,169,196,225,256,64,81,100,121,
+        (2,3)  144,169,196,225,256,289,81,100,121,144,169,196,225,256,289,324,
+        (2,3)  100,121,144,169,196,225,256,289,324,361], 
+        (2,3)  ["abcdefgh12345678abcdefgh12345678",
+        (2,3)  "abcdefgh12345678abcdefgh12345678",
+        (2,3)  "abcdefgh12345678abcdefgh12345678",
+        (2,3)  "abcdefgh12345678abcdefgh12345678",
+        (2,3)  "abcdefgh12345678abcdefgh12345678",
+        (2,3)  "abcdefgh12345678abcdefgh12345678",
+        (2,3)  "abcdefgh12345678abcdefgh12345678",
+        (2,3)  "abcdefgh12345678abcdefgh12345678",
+        (2,3)  "abcdefgh12345678abcdefgh12345678",
+        (2,3)  "abcdefgh12345678abcdefgh12345678",
+        (2,3)  "abcdefgh12345678abcdefgh12345678",
+        (2,3)  "abcdefgh12345678abcdefgh12345678"]},
+        (2,4) {[16,25,36,49,64,81,100,121,144,169,25,36,49,64,81,100,121,144,
+        (2,4)  169,196,36,49,64,81,100,121,144,169,196,225,49,64,81,100,121,
+        (2,4)  144,169,196,225,256,64,81,100,121,144,169,196,225,256,289,81,
+        (2,4)  100,121,144,169,196,225,256,289,324,100,121,144,169,196,225,256,
+        (2,4)  289,324,361,121,144,169,196,225,256,289,324,361,400], 
+        (2,4)  ["abcdefgh12345678abcdefgh12345678",
+        (2,4)  "abcdefgh12345678abcdefgh12345678",
+        (2,4)  "abcdefgh12345678abcdefgh12345678",
+        (2,4)  "abcdefgh12345678abcdefgh12345678",
+        (2,4)  "abcdefgh12345678abcdefgh12345678",
+        (2,4)  "abcdefgh12345678abcdefgh12345678",
+        (2,4)  "abcdefgh12345678abcdefgh12345678",
+        (2,4)  "abcdefgh12345678abcdefgh12345678",
+        (2,4)  "abcdefgh12345678abcdefgh12345678",
+        (2,4)  "abcdefgh12345678abcdefgh12345678",
+        (2,4)  "abcdefgh12345678abcdefgh12345678",
+        (2,4)  "abcdefgh12345678abcdefgh12345678"]},
+        (2,5) {[25,36,49,64,81,100,121,144,169,196,36,49,64,81,100,121,144,169,
+        (2,5)  196,225,49,64,81,100,121,144,169,196,225,256,64,81,100,121,144,
+        (2,5)  169,196,225,256,289,81,100,121,144,169,196,225,256,289,324,100,
+        (2,5)  121,144,169,196,225,256,289,324,361,121,144,169,196,225,256,289,
+        (2,5)  324,361,400,144,169,196,225,256,289,324,361,400,441], 
+        (2,5)  ["abcdefgh12345678abcdefgh12345678",
+        (2,5)  "abcdefgh12345678abcdefgh12345678",
+        (2,5)  "abcdefgh12345678abcdefgh12345678",
+        (2,5)  "abcdefgh12345678abcdefgh12345678",
+        (2,5)  "abcdefgh12345678abcdefgh12345678",
+        (2,5)  "abcdefgh12345678abcdefgh12345678",
+        (2,5)  "abcdefgh12345678abcdefgh12345678",
+        (2,5)  "abcdefgh12345678abcdefgh12345678",
+        (2,5)  "abcdefgh12345678abcdefgh12345678",
+        (2,5)  "abcdefgh12345678abcdefgh12345678",
+        (2,5)  "abcdefgh12345678abcdefgh12345678",
+        (2,5)  "abcdefgh12345678abcdefgh12345678"]}
+/string1                 Dataset {3, 4}
+    Data:
+        (0,0) "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s0", "s1",
+        (2,3) "s2"
+/string2                 Dataset {20}
+    Data:
+        (0) "ab cd ef1  ", "ab cd ef2  ", "ab cd ef3  ", "ab cd ef4  ",
+        (4) "ab cd ef5  ", "ab cd ef6  ", "ab cd ef7  ", "ab cd ef8  ",
+        (8) "ab cd ef9  ", "ab cd ef0  ", "ab cd ef1  ", "ab cd ef2  ",
+        (12) "ab cd ef3  ", "ab cd ef4  ", "ab cd ef5  ", "ab cd ef6  ",
+        (16) "ab cd ef7  ", "ab cd ef8  ", "ab cd ef9  ", "ab cd ef0  "
+/string3                 Dataset {27}
+    Data:
+        (0) "abcd0\000\000\000", "abcd1\000\000\000", "abcd2\000\000\000",
+        (3) "abcd3\000\000\000", "abcd4\000\000\000", "abcd5\000\000\000",
+        (6) "abcd6\000\000\000", "abcd7\000\000\000", "abcd8\000\000\000",
+        (9) "abcd9\000\000\000", "abcd0\000\000\000", "abcd1\000\000\000",
+        (12) "abcd2\000\000\000", "abcd3\000\000\000", "abcd4\000\000\000",
+        (15) "abcd5\000\000\000", "abcd6\000\000\000", "abcd7\000\000\000",
+        (18) "abcd8\000\000\000", "abcd9\000\000\000", "abcd0\000\000\000",
+        (21) "abcd1\000\000\000", "abcd2\000\000\000", "abcd3\000\000\000",
+        (24) "abcd4\000\000\000", "abcd5\000\000\000", "abcd6\000\000\000"
+/string4                 Dataset {3}
+    Data:
+        (0) "s1234567890123456789" ' ' repeats 147 times,
+        (1) "s1234567890123456789" ' ' repeats 147 times,
+        (2) "s1234567890123456789" ' ' repeats 147 times

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstr-2.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tstr-2.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tstr-2.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,157 @@
+#############################
+Expected output for 'h5dump tstr2.h5'
+#############################
+HDF5 "tstr2.h5" {
+GROUP "/" {
+   GROUP "g1" {
+      DATASET "dset1" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 50;
+               STRPAD H5T_STR_NULLTERM;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+         DATA {
+         (0): "This is row 0 of type H5T_STR_NULLTERM of",
+         (1): "This is row 1 of type H5T_STR_NULLTERM of",
+         (2): "This is row 2 of type H5T_STR_NULLTERM of",
+         (3): "This is row 3 of type H5T_STR_NULLTERM of",
+         (4): "This is row 4 of type H5T_STR_NULLTERM of",
+         (5): "This is row 5 of type H5T_STR_NULLTERM of",
+         (6): "This is row 6 of type H5T_STR_NULLTERM of",
+         (7): "This is row 7 of type H5T_STR_NULLTERM of",
+         (8): "This is row 8 of type H5T_STR_NULLTERM of",
+         (9): "This is row 9 of type H5T_STR_NULLTERM of"
+         }
+         ATTRIBUTE "attr1" {
+            DATATYPE  H5T_STRING {
+                  STRSIZE 11;
+                  STRPAD H5T_STR_NULLTERM;
+                  CSET H5T_CSET_ASCII;
+                  CTYPE H5T_C_S1;
+               }
+            DATASPACE  SIMPLE { ( 3 ) / ( 3 ) }
+            DATA {
+            (0): "0123456789", "abcdefghij", "ABCDEFGHIJ"
+            }
+         }
+      }
+   }
+   GROUP "g2" {
+      DATASET "dset2" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 50;
+               STRPAD H5T_STR_NULLTERM;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+         DATA {
+         (0): "This is row 0 of type H5T_STR_NULLTERM of string ",
+         (1): "This is row 1 of type H5T_STR_NULLTERM of string ",
+         (2): "This is row 2 of type H5T_STR_NULLTERM of string ",
+         (3): "This is row 3 of type H5T_STR_NULLTERM of string ",
+         (4): "This is row 4 of type H5T_STR_NULLTERM of string ",
+         (5): "This is row 5 of type H5T_STR_NULLTERM of string ",
+         (6): "This is row 6 of type H5T_STR_NULLTERM of string ",
+         (7): "This is row 7 of type H5T_STR_NULLTERM of string ",
+         (8): "This is row 8 of type H5T_STR_NULLTERM of string ",
+         (9): "This is row 9 of type H5T_STR_NULLTERM of string "
+         }
+      }
+   }
+   GROUP "g3" {
+      DATASET "dset3" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 50;
+               STRPAD H5T_STR_NULLPAD;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+         DATA {
+         (0): "This is row 0 of type H5T_STR_NULLPAD of\000\000\000\000\000\000\000\000\000\000",
+         (1): "This is row 1 of type H5T_STR_NULLPAD of\000\000\000\000\000\000\000\000\000\000",
+         (2): "This is row 2 of type H5T_STR_NULLPAD of\000\000\000\000\000\000\000\000\000\000",
+         (3): "This is row 3 of type H5T_STR_NULLPAD of\000\000\000\000\000\000\000\000\000\000",
+         (4): "This is row 4 of type H5T_STR_NULLPAD of\000\000\000\000\000\000\000\000\000\000",
+         (5): "This is row 5 of type H5T_STR_NULLPAD of\000\000\000\000\000\000\000\000\000\000",
+         (6): "This is row 6 of type H5T_STR_NULLPAD of\000\000\000\000\000\000\000\000\000\000",
+         (7): "This is row 7 of type H5T_STR_NULLPAD of\000\000\000\000\000\000\000\000\000\000",
+         (8): "This is row 8 of type H5T_STR_NULLPAD of\000\000\000\000\000\000\000\000\000\000",
+         (9): "This is row 9 of type H5T_STR_NULLPAD of\000\000\000\000\000\000\000\000\000\000"
+         }
+      }
+   }
+   GROUP "g4" {
+      DATASET "dset4" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 50;
+               STRPAD H5T_STR_NULLPAD;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+         DATA {
+         (0): "This is row 0 of type H5T_STR_NULLPAD of string ar",
+         (1): "This is row 1 of type H5T_STR_NULLPAD of string ar",
+         (2): "This is row 2 of type H5T_STR_NULLPAD of string ar",
+         (3): "This is row 3 of type H5T_STR_NULLPAD of string ar",
+         (4): "This is row 4 of type H5T_STR_NULLPAD of string ar",
+         (5): "This is row 5 of type H5T_STR_NULLPAD of string ar",
+         (6): "This is row 6 of type H5T_STR_NULLPAD of string ar",
+         (7): "This is row 7 of type H5T_STR_NULLPAD of string ar",
+         (8): "This is row 8 of type H5T_STR_NULLPAD of string ar",
+         (9): "This is row 9 of type H5T_STR_NULLPAD of string ar"
+         }
+      }
+   }
+   GROUP "g5" {
+      DATASET "dset5" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 50;
+               STRPAD H5T_STR_SPACEPAD;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+         DATA {
+         (0): "This is row 0 of type H5T_STR_SPACEPAD of         ",
+         (1): "This is row 1 of type H5T_STR_SPACEPAD of         ",
+         (2): "This is row 2 of type H5T_STR_SPACEPAD of         ",
+         (3): "This is row 3 of type H5T_STR_SPACEPAD of         ",
+         (4): "This is row 4 of type H5T_STR_SPACEPAD of         ",
+         (5): "This is row 5 of type H5T_STR_SPACEPAD of         ",
+         (6): "This is row 6 of type H5T_STR_SPACEPAD of         ",
+         (7): "This is row 7 of type H5T_STR_SPACEPAD of         ",
+         (8): "This is row 8 of type H5T_STR_SPACEPAD of         ",
+         (9): "This is row 9 of type H5T_STR_SPACEPAD of         "
+         }
+      }
+   }
+   GROUP "g6" {
+      DATASET "dset6" {
+         DATATYPE  H5T_STRING {
+               STRSIZE 50;
+               STRPAD H5T_STR_SPACEPAD;
+               CSET H5T_CSET_ASCII;
+               CTYPE H5T_C_S1;
+            }
+         DATASPACE  SIMPLE { ( 10 ) / ( 10 ) }
+         DATA {
+         (0): "This is row 0 of type H5T_STR_SPACEPAD of string a",
+         (1): "This is row 1 of type H5T_STR_SPACEPAD of string a",
+         (2): "This is row 2 of type H5T_STR_SPACEPAD of string a",
+         (3): "This is row 3 of type H5T_STR_SPACEPAD of string a",
+         (4): "This is row 4 of type H5T_STR_SPACEPAD of string a",
+         (5): "This is row 5 of type H5T_STR_SPACEPAD of string a",
+         (6): "This is row 6 of type H5T_STR_SPACEPAD of string a",
+         (7): "This is row 7 of type H5T_STR_SPACEPAD of string a",
+         (8): "This is row 8 of type H5T_STR_SPACEPAD of string a",
+         (9): "This is row 9 of type H5T_STR_SPACEPAD of string a"
+         }
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstr.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tstr.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstr.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tstr.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tstr.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,398 @@
+#############################
+Expected output for 'h5dump --xml tstr.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Dataset Name="comp1" OBJ-XID="xid_2520-0" H5Path= "/comp1" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="2">
+            <hdf5:Dimension  DimSize="3" MaxDimSize="3"/>
+            <hdf5:Dimension  DimSize="6" MaxDimSize="6"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="int_array">
+               <hdf5:DataType>
+                  <hdf5:ArrayType Ndims="2">
+                     <hdf5:ArrayDimension DimSize="8" DimPerm="0"/>
+                     <hdf5:ArrayDimension DimSize="10" DimPerm="1"/>
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:IntegerType ByteOrder="BE" Sign="true" Size="4" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:ArrayType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="string">
+               <hdf5:DataType>
+                  <hdf5:ArrayType Ndims="2">
+                     <hdf5:ArrayDimension DimSize="3" DimPerm="0"/>
+                     <hdf5:ArrayDimension DimSize="4" DimPerm="1"/>
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="32" StrPad="H5T_STR_SPACEPAD"/>
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:ArrayType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+          0 1 4 9 16 25 36 49 64 81
+               1 4 9 16 25 36 49 64 81 100
+               4 9 16 25 36 49 64 81 100 121
+               9 16 25 36 49 64 81 100 121 144
+               16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          1 4 9 16 25 36 49 64 81 100
+               4 9 16 25 36 49 64 81 100 121
+               9 16 25 36 49 64 81 100 121 144
+               16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          4 9 16 25 36 49 64 81 100 121
+               9 16 25 36 49 64 81 100 121 144
+               16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289
+               81 100 121 144 169 196 225 256 289 324  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          9 16 25 36 49 64 81 100 121 144
+               16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289
+               81 100 121 144 169 196 225 256 289 324
+               100 121 144 169 196 225 256 289 324 361  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289
+               81 100 121 144 169 196 225 256 289 324
+               100 121 144 169 196 225 256 289 324 361
+               121 144 169 196 225 256 289 324 361 400  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289
+               81 100 121 144 169 196 225 256 289 324
+               100 121 144 169 196 225 256 289 324 361
+               121 144 169 196 225 256 289 324 361 400
+               144 169 196 225 256 289 324 361 400 441  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          0 1 4 9 16 25 36 49 64 81
+               1 4 9 16 25 36 49 64 81 100
+               4 9 16 25 36 49 64 81 100 121
+               9 16 25 36 49 64 81 100 121 144
+               16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          1 4 9 16 25 36 49 64 81 100
+               4 9 16 25 36 49 64 81 100 121
+               9 16 25 36 49 64 81 100 121 144
+               16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          4 9 16 25 36 49 64 81 100 121
+               9 16 25 36 49 64 81 100 121 144
+               16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289
+               81 100 121 144 169 196 225 256 289 324  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          9 16 25 36 49 64 81 100 121 144
+               16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289
+               81 100 121 144 169 196 225 256 289 324
+               100 121 144 169 196 225 256 289 324 361  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289
+               81 100 121 144 169 196 225 256 289 324
+               100 121 144 169 196 225 256 289 324 361
+               121 144 169 196 225 256 289 324 361 400  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289
+               81 100 121 144 169 196 225 256 289 324
+               100 121 144 169 196 225 256 289 324 361
+               121 144 169 196 225 256 289 324 361 400
+               144 169 196 225 256 289 324 361 400 441  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          0 1 4 9 16 25 36 49 64 81
+               1 4 9 16 25 36 49 64 81 100
+               4 9 16 25 36 49 64 81 100 121
+               9 16 25 36 49 64 81 100 121 144
+               16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          1 4 9 16 25 36 49 64 81 100
+               4 9 16 25 36 49 64 81 100 121
+               9 16 25 36 49 64 81 100 121 144
+               16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          4 9 16 25 36 49 64 81 100 121
+               9 16 25 36 49 64 81 100 121 144
+               16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289
+               81 100 121 144 169 196 225 256 289 324  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          9 16 25 36 49 64 81 100 121 144
+               16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289
+               81 100 121 144 169 196 225 256 289 324
+               100 121 144 169 196 225 256 289 324 361  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          16 25 36 49 64 81 100 121 144 169
+               25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289
+               81 100 121 144 169 196 225 256 289 324
+               100 121 144 169 196 225 256 289 324 361
+               121 144 169 196 225 256 289 324 361 400  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+          25 36 49 64 81 100 121 144 169 196
+               36 49 64 81 100 121 144 169 196 225
+               49 64 81 100 121 144 169 196 225 256
+               64 81 100 121 144 169 196 225 256 289
+               81 100 121 144 169 196 225 256 289 324
+               100 121 144 169 196 225 256 289 324 361
+               121 144 169 196 225 256 289 324 361 400
+               144 169 196 225 256 289 324 361 400 441  "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+               "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678" "abcdefgh12345678abcdefgh12345678"
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="string1" OBJ-XID="xid_744-0" H5Path= "/string1" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="2">
+            <hdf5:Dimension  DimSize="3" MaxDimSize="3"/>
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="5" StrPad="H5T_STR_NULLTERM"/>
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         "s1"
+         "s2"
+         "s3"
+         "s4"
+         "s5"
+         "s6"
+         "s7"
+         "s8"
+         "s9"
+         "s0"
+         "s1"
+         "s2"
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="string2" OBJ-XID="xid_1244-0" H5Path= "/string2" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="20" MaxDimSize="20"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="11" StrPad="H5T_STR_SPACEPAD"/>
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         "ab cd ef1  "
+         "ab cd ef2  "
+         "ab cd ef3  "
+         "ab cd ef4  "
+         "ab cd ef5  "
+         "ab cd ef6  "
+         "ab cd ef7  "
+         "ab cd ef8  "
+         "ab cd ef9  "
+         "ab cd ef0  "
+         "ab cd ef1  "
+         "ab cd ef2  "
+         "ab cd ef3  "
+         "ab cd ef4  "
+         "ab cd ef5  "
+         "ab cd ef6  "
+         "ab cd ef7  "
+         "ab cd ef8  "
+         "ab cd ef9  "
+         "ab cd ef0  "
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="string3" OBJ-XID="xid_1576-0" H5Path= "/string3" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="27" MaxDimSize="27"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="8" StrPad="H5T_STR_NULLPAD"/>
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         "abcd0"
+         "abcd1"
+         "abcd2"
+         "abcd3"
+         "abcd4"
+         "abcd5"
+         "abcd6"
+         "abcd7"
+         "abcd8"
+         "abcd9"
+         "abcd0"
+         "abcd1"
+         "abcd2"
+         "abcd3"
+         "abcd4"
+         "abcd5"
+         "abcd6"
+         "abcd7"
+         "abcd8"
+         "abcd9"
+         "abcd0"
+         "abcd1"
+         "abcd2"
+         "abcd3"
+         "abcd4"
+         "abcd5"
+         "abcd6"
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="string4" OBJ-XID="xid_1904-0" H5Path= "/string4" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="3" MaxDimSize="3"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="168" StrPad="H5T_STR_SPACEPAD"/>
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         "s1234567890123456789                                                                                                                                                    "
+         "s1234567890123456789                                                                                                                                                    "
+         "s1234567890123456789                                                                                                                                                    "
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstr2.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tstr2.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstr2.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tstr2.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tstr2.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,243 @@
+#############################
+Expected output for 'h5dump --xml tstr2.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Group Name="g1" OBJ-XID="xid_1344-0" H5Path="/g1" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset1" OBJ-XID="xid_1720-0" H5Path= "/g1/dset1" Parents="xid_1344-0" H5ParentPaths="/g1">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="50" StrPad="H5T_STR_NULLTERM"/>
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Attribute Name="attr1">
+            <hdf5:Dataspace>
+               <hdf5:SimpleDataspace Ndims="1">
+                  <hdf5:Dimension  DimSize="3" MaxDimSize="3"/>
+               </hdf5:SimpleDataspace>
+            </hdf5:Dataspace>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="11" StrPad="H5T_STR_NULLTERM"/>
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+            <hdf5:Data>
+               <hdf5:DataFromFile>
+               "0123456789"
+               "abcdefghij"
+               "ABCDEFGHIJ"
+               </hdf5:DataFromFile>
+            </hdf5:Data>
+         </hdf5:Attribute>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            "This is row 0 of type H5T_STR_NULLTERM of"
+            "This is row 1 of type H5T_STR_NULLTERM of"
+            "This is row 2 of type H5T_STR_NULLTERM of"
+            "This is row 3 of type H5T_STR_NULLTERM of"
+            "This is row 4 of type H5T_STR_NULLTERM of"
+            "This is row 5 of type H5T_STR_NULLTERM of"
+            "This is row 6 of type H5T_STR_NULLTERM of"
+            "This is row 7 of type H5T_STR_NULLTERM of"
+            "This is row 8 of type H5T_STR_NULLTERM of"
+            "This is row 9 of type H5T_STR_NULLTERM of"
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+   <hdf5:Group Name="g2" OBJ-XID="xid_3260-0" H5Path="/g2" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset2" OBJ-XID="xid_3308-0" H5Path= "/g2/dset2" Parents="xid_3260-0" H5ParentPaths="/g2">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="50" StrPad="H5T_STR_NULLTERM"/>
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            "This is row 0 of type H5T_STR_NULLTERM of string "
+            "This is row 1 of type H5T_STR_NULLTERM of string "
+            "This is row 2 of type H5T_STR_NULLTERM of string "
+            "This is row 3 of type H5T_STR_NULLTERM of string "
+            "This is row 4 of type H5T_STR_NULLTERM of string "
+            "This is row 5 of type H5T_STR_NULLTERM of string "
+            "This is row 6 of type H5T_STR_NULLTERM of string "
+            "This is row 7 of type H5T_STR_NULLTERM of string "
+            "This is row 8 of type H5T_STR_NULLTERM of string "
+            "This is row 9 of type H5T_STR_NULLTERM of string "
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+   <hdf5:Group Name="g3" OBJ-XID="xid_4848-0" H5Path="/g3" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset3" OBJ-XID="xid_4896-0" H5Path= "/g3/dset3" Parents="xid_4848-0" H5ParentPaths="/g3">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="50" StrPad="H5T_STR_NULLPAD"/>
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            "This is row 0 of type H5T_STR_NULLPAD of"
+            "This is row 1 of type H5T_STR_NULLPAD of"
+            "This is row 2 of type H5T_STR_NULLPAD of"
+            "This is row 3 of type H5T_STR_NULLPAD of"
+            "This is row 4 of type H5T_STR_NULLPAD of"
+            "This is row 5 of type H5T_STR_NULLPAD of"
+            "This is row 6 of type H5T_STR_NULLPAD of"
+            "This is row 7 of type H5T_STR_NULLPAD of"
+            "This is row 8 of type H5T_STR_NULLPAD of"
+            "This is row 9 of type H5T_STR_NULLPAD of"
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+   <hdf5:Group Name="g4" OBJ-XID="xid_6436-0" H5Path="/g4" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset4" OBJ-XID="xid_6484-0" H5Path= "/g4/dset4" Parents="xid_6436-0" H5ParentPaths="/g4">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="50" StrPad="H5T_STR_NULLPAD"/>
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            "This is row 0 of type H5T_STR_NULLPAD of string ar"
+            "This is row 1 of type H5T_STR_NULLPAD of string ar"
+            "This is row 2 of type H5T_STR_NULLPAD of string ar"
+            "This is row 3 of type H5T_STR_NULLPAD of string ar"
+            "This is row 4 of type H5T_STR_NULLPAD of string ar"
+            "This is row 5 of type H5T_STR_NULLPAD of string ar"
+            "This is row 6 of type H5T_STR_NULLPAD of string ar"
+            "This is row 7 of type H5T_STR_NULLPAD of string ar"
+            "This is row 8 of type H5T_STR_NULLPAD of string ar"
+            "This is row 9 of type H5T_STR_NULLPAD of string ar"
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+   <hdf5:Group Name="g5" OBJ-XID="xid_8024-0" H5Path="/g5" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset5" OBJ-XID="xid_8072-0" H5Path= "/g5/dset5" Parents="xid_8024-0" H5ParentPaths="/g5">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="50" StrPad="H5T_STR_SPACEPAD"/>
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            "This is row 0 of type H5T_STR_SPACEPAD of         "
+            "This is row 1 of type H5T_STR_SPACEPAD of         "
+            "This is row 2 of type H5T_STR_SPACEPAD of         "
+            "This is row 3 of type H5T_STR_SPACEPAD of         "
+            "This is row 4 of type H5T_STR_SPACEPAD of         "
+            "This is row 5 of type H5T_STR_SPACEPAD of         "
+            "This is row 6 of type H5T_STR_SPACEPAD of         "
+            "This is row 7 of type H5T_STR_SPACEPAD of         "
+            "This is row 8 of type H5T_STR_SPACEPAD of         "
+            "This is row 9 of type H5T_STR_SPACEPAD of         "
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+   <hdf5:Group Name="g6" OBJ-XID="xid_9612-0" H5Path="/g6" Parents="xid_696-0" H5ParentPaths="/" >
+      <hdf5:Dataset Name="dset6" OBJ-XID="xid_9660-0" H5Path= "/g6/dset6" Parents="xid_9612-0" H5ParentPaths="/g6">
+         <hdf5:StorageLayout>
+            <hdf5:ContiguousLayout/>
+         </hdf5:StorageLayout>
+               <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+            <hdf5:FillValue>
+                  <hdf5:NoFill/>
+            </hdf5:FillValue>
+         </hdf5:FillValueInfo>
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="10" MaxDimSize="10"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="50" StrPad="H5T_STR_SPACEPAD"/>
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            "This is row 0 of type H5T_STR_SPACEPAD of string a"
+            "This is row 1 of type H5T_STR_SPACEPAD of string a"
+            "This is row 2 of type H5T_STR_SPACEPAD of string a"
+            "This is row 3 of type H5T_STR_SPACEPAD of string a"
+            "This is row 4 of type H5T_STR_SPACEPAD of string a"
+            "This is row 5 of type H5T_STR_SPACEPAD of string a"
+            "This is row 6 of type H5T_STR_SPACEPAD of string a"
+            "This is row 7 of type H5T_STR_SPACEPAD of string a"
+            "This is row 8 of type H5T_STR_SPACEPAD of string a"
+            "This is row 9 of type H5T_STR_SPACEPAD of string a"
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Dataset>
+   </hdf5:Group>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstr3.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tstr3.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstring-at.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tstring-at.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstring-at.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tstring-at.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tstring-at.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,62 @@
+#############################
+Expected output for 'h5dump --xml tstring-at.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_696-0" H5Path="/">
+   <hdf5:Dataset Name="dset1" OBJ-XID="xid_744-0" H5Path= "/dset1" Parents="xid_696-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="7" MaxDimSize="7"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="16" StrPad="H5T_STR_SPACEPAD"/>
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Attribute Name="attr1">
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="7" MaxDimSize="7"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="16" StrPad="H5T_STR_SPACEPAD"/>
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            "String withsp   "
+            "String\\withsl   "
+            "String&amp;withamp  "
+            "String&lt;withlt   "
+            "String&gt;withgt   "
+            "String&apos;withapos "
+            "String\"withquot "
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Attribute>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         ""
+         ""
+         ""
+         ""
+         ""
+         ""
+         ""
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstring.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tstring.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tstring.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,73 @@
+#############################
+Expected output for 'h5dump tstr3.h5'
+#############################
+HDF5 "tstr3.h5" {
+GROUP "/" {
+   DATASET "str1" {
+      DATATYPE  H5T_STRING {
+            STRSIZE 73;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         }
+      DATASPACE  SIMPLE { ( 1 ) / ( 1 ) }
+      DATA {
+      (0): "quote "  backspace form feed new line
+            tab	 new line
+            carriage return
+           "
+      }
+   }
+   DATASET "str2" {
+      DATATYPE  H5T_STRING {
+            STRSIZE H5T_VARIABLE;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         }
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): "Four score and seven
+            years ago our forefathers brought forth on this continent a new nation,",
+      (1): "conceived in liberty
+            and dedicated to the proposition that all men are created equal.",
+      (2): "Now we are engaged
+            in a great civil war,",
+      (3): "testing whether that
+            nation or any nation so conceived and so dedicated can long endure."
+      }
+   }
+   DATASET "str3" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I32BE "a";
+         H5T_STRING {
+            STRSIZE 255;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         } "str";
+      }
+      DATASPACE  SIMPLE { ( 1 ) / ( 1 ) }
+      DATA {
+      (0): {
+            24,
+            "Four score and seven
+            years ago our forefathers brought forth on this continent a new nation"
+         }
+      }
+   }
+   DATASET "str4" {
+      DATATYPE  H5T_STD_I8BE
+      DATASPACE  SIMPLE { ( 93 ) / ( 93 ) }
+      DATA {
+      (0): 70, 111, 117, 114, 32, 115, 99, 111, 114, 101, 32, 97, 110, 100,
+      (14): 32, 115, 101, 118, 101, 110, 10, 32, 121, 101, 97, 114, 115, 32,
+      (28): 97, 103, 111, 32, 111, 117, 114, 32, 102, 111, 114, 101, 102, 97,
+      (42): 116, 104, 101, 114, 115, 32, 98, 114, 111, 117, 103, 104, 116,
+      (55): 32, 102, 111, 114, 116, 104, 32, 111, 110, 32, 116, 104, 105,
+      (68): 115, 32, 99, 111, 110, 116, 105, 110, 101, 110, 116, 32, 97, 32,
+      (82): 110, 101, 119, 32, 110, 97, 116, 105, 111, 110, 0
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstring.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tstring.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstring.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tstring.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tstring.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,62 @@
+#############################
+Expected output for 'h5dump --xml tstring.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:Dataset Name="dset1" OBJ-XID="xid_976-0" H5Path= "/dset1" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="7" MaxDimSize="7"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="16" StrPad="H5T_STR_SPACEPAD"/>
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Attribute Name="attr1">
+         <hdf5:Dataspace>
+            <hdf5:SimpleDataspace Ndims="1">
+               <hdf5:Dimension  DimSize="7" MaxDimSize="7"/>
+            </hdf5:SimpleDataspace>
+         </hdf5:Dataspace>
+         <hdf5:DataType>
+            <hdf5:AtomicType>
+               <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="16" StrPad="H5T_STR_SPACEPAD"/>
+            </hdf5:AtomicType>
+         </hdf5:DataType>
+         <hdf5:Data>
+            <hdf5:DataFromFile>
+            "                "
+            "                "
+            "                "
+            "                "
+            "                "
+            "                "
+            "                "
+            </hdf5:DataFromFile>
+         </hdf5:Data>
+      </hdf5:Attribute>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         "String withsp   "
+         "String\\withsl   "
+         "String&amp;withamp  "
+         "String&lt;withlt   "
+         "String&gt;withgt   "
+         "String&apos;withapos "
+         "String\"withquot "
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstring2.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tstring2.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tstring2.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,14 @@
+#############################
+Expected output for 'h5dump -r -d str4 tstr3.h5'
+#############################
+HDF5 "tstr3.h5" {
+DATASET "str4" {
+   DATATYPE  H5T_STD_I8BE
+   DATASPACE  SIMPLE { ( 93 ) / ( 93 ) }
+   DATA {
+         "Four score and seven
+            years ago our forefathers brought fo"
+         "rth on this continent a new nation\000"
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tstringe.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tstringe.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tstringe.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,65 @@
+#############################
+Expected output for 'h5dump -e tstr3.h5'
+#############################
+HDF5 "tstr3.h5" {
+GROUP "/" {
+   DATASET "str1" {
+      DATATYPE  H5T_STRING {
+            STRSIZE 73;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         }
+      DATASPACE  SIMPLE { ( 1 ) / ( 1 ) }
+      DATA {
+      (0): "quote \"  backspace\b form feed\f new line\n tab\t new line\n carriage return\r"
+      }
+   }
+   DATASET "str2" {
+      DATATYPE  H5T_STRING {
+            STRSIZE H5T_VARIABLE;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         }
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): "Four score and seven\n years ago our forefathers brought forth on this continent a new nation,",
+      (1): "conceived in liberty\n and dedicated to the proposition that all men are created equal.",
+      (2): "Now we are engaged\n in a great civil war,",
+      (3): "testing whether that\n nation or any nation so conceived and so dedicated can long endure."
+      }
+   }
+   DATASET "str3" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I32BE "a";
+         H5T_STRING {
+            STRSIZE 255;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         } "str";
+      }
+      DATASPACE  SIMPLE { ( 1 ) / ( 1 ) }
+      DATA {
+      (0): {
+            24,
+            "Four score and seven\n years ago our forefathers brought forth on this continent a new nation"
+         }
+      }
+   }
+   DATASET "str4" {
+      DATATYPE  H5T_STD_I8BE
+      DATASPACE  SIMPLE { ( 93 ) / ( 93 ) }
+      DATA {
+      (0): 70, 111, 117, 114, 32, 115, 99, 111, 114, 101, 32, 97, 110, 100,
+      (14): 32, 115, 101, 118, 101, 110, 10, 32, 121, 101, 97, 114, 115, 32,
+      (28): 97, 103, 111, 32, 111, 117, 114, 32, 102, 111, 114, 101, 102, 97,
+      (42): 116, 104, 101, 114, 115, 32, 98, 114, 111, 117, 103, 104, 116,
+      (55): 32, 102, 111, 114, 116, 104, 32, 111, 110, 32, 116, 104, 105,
+      (68): 115, 32, 99, 111, 110, 116, 105, 110, 101, 110, 116, 32, 97, 32,
+      (82): 110, 101, 119, 32, 110, 97, 116, 105, 111, 110, 0
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tszip.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tszip.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tszip.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,29 @@
+#############################
+Expected output for 'h5dump -H -p -d szip tfilters.h5'
+#############################
+HDF5 "tfilters.h5" {
+DATASET "szip" {
+   DATATYPE  H5T_STD_I32LE
+   DATASPACE  SIMPLE { ( 20, 10 ) / ( 20, 10 ) }
+   STORAGE_LAYOUT {
+      CHUNKED ( 10, 5 )
+      SIZE 372
+    }
+   FILTERS {
+      COMPRESSION SZIP {
+         PIXELS_PER_BLOCK 4
+         MODE K13
+         CODING NEAREST NEIGHBOUR
+         BYTE_ORDER LSB
+         HEADER RAW
+      }
+   }
+   FILLVALUE {
+      FILL_TIME H5D_FILL_TIME_IFSET
+      VALUE  0   
+   }
+   ALLOCATION_TIME {
+      H5D_ALLOC_TIME_INCR
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tuserfilter.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tuserfilter.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tuserfilter.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,26 @@
+#############################
+Expected output for 'h5dump -H -p -d myfilter tfilters.h5'
+#############################
+HDF5 "tfilters.h5" {
+DATASET "myfilter" {
+   DATATYPE  H5T_STD_I32LE
+   DATASPACE  SIMPLE { ( 20, 10 ) / ( 20, 10 ) }
+   STORAGE_LAYOUT {
+      CHUNKED ( 10, 5 )
+      SIZE 800
+    }
+   FILTERS {
+      UNKNOWN_FILTER {
+         FILTER_ID 405
+         COMMENT myfilter
+         PARAMS { 5 6 }
+      }
+      FILLVALUE {
+         FILL_TIME H5D_FILL_TIME_IFSET
+         VALUE  0      
+      }
+      ALLOCATION_TIME {
+         H5D_ALLOC_TIME_INCR
+      }
+   }
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,28 @@
+#############################
+Expected output for 'h5dump tvldtypes1.h5'
+#############################
+HDF5 "tvldtypes1.h5" {
+GROUP "/" {
+   DATASET "Dataset1.0" {
+      DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): (0), (10, 11), (20, 21, 22), (30, 31, 32, 33)
+      }
+   }
+   DATASET "Dataset2.0" {
+      DATATYPE  H5T_VLEN { H5T_IEEE_F32LE}
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): (0), (10, 10.1), (20, 20.1, 20.2), (30, 30.1, 30.2, 30.3)
+      }
+   }
+   DATASET "Dataset3.0" {
+      DATATYPE  H5T_VLEN { H5T_STD_I32LE}
+      DATASPACE  SCALAR
+      DATA {
+      (0): (0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72)
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,96 @@
+#############################
+Expected output for 'h5dump --xml tvldtypes1.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:Dataset Name="Dataset1.0" OBJ-XID="xid_976-0" H5Path= "/Dataset1.0" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:VLType>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+         </hdf5:VLType>
+      </hdf5:DataType>
+<!-- Note: format of VL data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+          0  10 11  20 21 22  30 31 32 33
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="Dataset2.0" OBJ-XID="xid_1576-0" H5Path= "/Dataset2.0" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:VLType>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+         </hdf5:VLType>
+      </hdf5:DataType>
+<!-- Note: format of VL data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+          0  10 10.1  20 20.1 20.2  30 30.1 30.2 30.3
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+   <hdf5:Dataset Name="Dataset3.0" OBJ-XID="xid_6272-0" H5Path= "/Dataset3.0" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:ScalarDataspace />
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:VLType>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+         </hdf5:VLType>
+      </hdf5:DataType>
+<!-- Note: format of VL data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+          0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.ls
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.ls	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes1.ls	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,13 @@
+#############################
+ output for 'h5ls -w80 -r -d tvldtypes1.h5'
+#############################
+/Dataset1.0              Dataset {4}
+    Data:
+        (0) (0), (10,11), (20,21,22), (30,31,32,33)
+/Dataset2.0              Dataset {4}
+    Data:
+        (0) (0), (10,10.1), (20,20.1,20.2), (30,30.1,30.2,30.3)
+/Dataset3.0              Dataset {SCALAR}
+    Data:
+        (0) (0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,
+        (0)  46,48,50,52,54,56,58,60,62,64,66,68,70,72)

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes2.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes2.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes2.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,15 @@
+#############################
+Expected output for 'h5dump tvldtypes2.h5'
+#############################
+HDF5 "tvldtypes2.h5" {
+GROUP "/" {
+   DATASET "Dataset1" {
+      DATATYPE  H5T_VLEN { H5T_VLEN { H5T_STD_U32LE}}
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): ((0)), ((100), (110, 111)), ((200), (210, 211), (220, 221, 222)),
+      (3): ((300), (310, 311), (320, 321, 322), (330, 331, 332, 333))
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes2.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes2.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes2.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes2.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes2.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,43 @@
+#############################
+Expected output for 'h5dump --xml tvldtypes2.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976-0" H5Path= "/Dataset1" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:VLType>
+            <hdf5:DataType>
+               <hdf5:VLType>
+                  <hdf5:DataType>
+                     <hdf5:AtomicType>
+                        <hdf5:IntegerType ByteOrder="LE" Sign="false" Size="4" />
+                     </hdf5:AtomicType>
+                  </hdf5:DataType>
+               </hdf5:VLType>
+            </hdf5:DataType>
+         </hdf5:VLType>
+      </hdf5:DataType>
+<!-- Note: format of VL data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+           0   100  110 111   200  210 211  220 221 222
+           300  310 311  320 321 322  330 331 332 333
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes3.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes3.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes3.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,37 @@
+#############################
+Expected output for 'h5dump tvldtypes3.h5'
+#############################
+HDF5 "tvldtypes3.h5" {
+GROUP "/" {
+   DATASET "Dataset1" {
+      DATATYPE  H5T_COMPOUND {
+         H5T_STD_I32LE "i";
+         H5T_IEEE_F32LE "f";
+         H5T_VLEN { H5T_STD_U32LE} "v";
+      }
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): {
+            0,
+            0,
+            (0)
+         },
+      (1): {
+            10,
+            6.66667,
+            (10, 11)
+         },
+      (2): {
+            20,
+            13.3333,
+            (20, 21, 22)
+         },
+      (3): {
+            30,
+            20,
+            (30, 31, 32, 33)
+         }
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes3.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes3.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes3.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes3.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes3.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,58 @@
+#############################
+Expected output for 'h5dump --xml tvldtypes3.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976-0" H5Path= "/Dataset1" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillIfSet" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:NoFill/>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:CompoundType>
+            <hdf5:Field FieldName="i">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="f">
+               <hdf5:DataType>
+                  <hdf5:AtomicType>
+                     <hdf5:FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                  </hdf5:AtomicType>
+               </hdf5:DataType>
+            </hdf5:Field>
+            <hdf5:Field FieldName="v">
+               <hdf5:DataType>
+                  <hdf5:VLType>
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:IntegerType ByteOrder="LE" Sign="false" Size="4" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:VLType>
+               </hdf5:DataType>
+            </hdf5:Field>
+         </hdf5:CompoundType>
+      </hdf5:DataType>
+   <!-- Note: format of compound data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         0 0  0 10 6.66667  10 11 20 13.3333  20 21 22 30 20  30 31 32 33
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes4.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes4.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes4.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,50 @@
+#############################
+Expected output for 'h5dump tvldtypes4.h5'
+#############################
+HDF5 "tvldtypes4.h5" {
+GROUP "/" {
+   DATASET "Dataset1" {
+      DATATYPE  H5T_VLEN { H5T_COMPOUND {
+         H5T_STD_I32LE "i";
+         H5T_IEEE_F32LE "f";
+      }}
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): ({
+               0,
+               0
+            }),
+      (1): ({
+               10,
+               6.66667
+            }, {
+               11,
+               7
+            }),
+      (2): ({
+               20,
+               13.3333
+            }, {
+               21,
+               13.6667
+            }, {
+               22,
+               14
+            }),
+      (3): ({
+               30,
+               20
+            }, {
+               31,
+               20.3333
+            }, {
+               32,
+               20.6667
+            }, {
+               33,
+               21
+            })
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes4.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes4.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes4.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes4.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes4.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,55 @@
+#############################
+Expected output for 'h5dump --xml tvldtypes4.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976-0" H5Path= "/Dataset1" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillOnAlloc" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:Data>
+                  <!-- VL fill not yet implemented. -->
+                  <hdf5:NoData />
+               </hdf5:Data>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:VLType>
+            <hdf5:DataType>
+               <hdf5:CompoundType>
+                  <hdf5:Field FieldName="i">
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:IntegerType ByteOrder="LE" Sign="true" Size="4" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+                  <hdf5:Field FieldName="f">
+                     <hdf5:DataType>
+                        <hdf5:AtomicType>
+                           <hdf5:FloatType ByteOrder="LE" Size="4" SignBitLocation="31" ExponentBits="8" ExponentLocation="23" MantissaBits="23" MantissaLocation="0" />
+                        </hdf5:AtomicType>
+                     </hdf5:DataType>
+                  </hdf5:Field>
+               </hdf5:CompoundType>
+            </hdf5:DataType>
+         </hdf5:VLType>
+      </hdf5:DataType>
+<!-- Note: format of VL data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+          0 0  10 6.66667 11 7  20 13.3333 21 13.6667 22 14
+          30 20 31 20.3333 32 20.6667 33 21
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes5.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes5.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes5.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,14 @@
+#############################
+Expected output for 'h5dump tvldtypes5.h5'
+#############################
+HDF5 "tvldtypes5.h5" {
+GROUP "/" {
+   DATASET "Dataset" {
+      DATATYPE  H5T_VLEN { H5T_STD_U32LE}
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): (0, 2, 4, 6, 8), (), (0, 2, 4, 6, 8, 10, 12), ()
+      }
+   }
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes5.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes5.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes5.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes5.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tvldtypes5.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,41 @@
+#############################
+Expected output for 'h5dump --xml tvldtypes5.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:Dataset Name="Dataset" OBJ-XID="xid_976-0" H5Path= "/Dataset" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillOnAlloc" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:Data>
+                  <!-- VL fill not yet implemented. -->
+                  <hdf5:NoData />
+               </hdf5:Data>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:VLType>
+            <hdf5:DataType>
+               <hdf5:AtomicType>
+                  <hdf5:IntegerType ByteOrder="LE" Sign="false" Size="4" />
+               </hdf5:AtomicType>
+            </hdf5:DataType>
+         </hdf5:VLType>
+      </hdf5:DataType>
+<!-- Note: format of VL data not specified -->
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+          0 2 4 6 8    0 2 4 6 8 10 12  
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvlstr.ddl
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tvlstr.ddl	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tvlstr.ddl	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,35 @@
+#############################
+Expected output for 'h5dump tvlstr.h5'
+#############################
+HDF5 "tvlstr.h5" {
+GROUP "/" {
+   ATTRIBUTE "test_scalar" {
+      DATATYPE  "/vl_string_type"
+      DATASPACE  SCALAR
+      DATA {
+      (0): "This is the string for the attribute"
+      }
+   }
+   DATASET "Dataset1" {
+      DATATYPE  H5T_STRING {
+            STRSIZE H5T_VARIABLE;
+            STRPAD H5T_STR_NULLTERM;
+            CSET H5T_CSET_ASCII;
+            CTYPE H5T_C_S1;
+         }
+      DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
+      DATA {
+      (0): "Four score and seven years ago our forefathers brought forth on this continent a new nation,",
+      (1): "conceived in liberty and dedicated to the proposition that all men are created equal.",
+      (2): "", NULL
+      }
+   }
+   DATATYPE "vl_string_type"       H5T_STRING {
+         STRSIZE H5T_VARIABLE;
+         STRPAD H5T_STR_NULLPAD;
+         CSET H5T_CSET_ASCII;
+         CTYPE H5T_C_S1;
+      };
+
+}
+}

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvlstr.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/tvlstr.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/tvlstr.h5.xml
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/tvlstr.h5.xml	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/tvlstr.h5.xml	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1,57 @@
+#############################
+Expected output for 'h5dump --xml tvlstr.h5'
+#############################
+<?xml version="1.0" encoding="UTF-8"?>
+<hdf5:HDF5-File xmlns:hdf5="http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdf.ncsa.uiuc.edu/DTDs/HDF5File http://hdf.ncsa.uiuc.edu/DTDs/HDF5-File.xsd">
+<hdf5:RootGroup OBJ-XID="xid_928-0" H5Path="/">
+   <hdf5:Attribute Name="test_scalar">
+      <hdf5:Dataspace>
+         <hdf5:ScalarDataspace />
+      </hdf5:Dataspace>
+      <hdf5:NamedDataTypePtr OBJ-XID="xid_1576-0" H5Path="/vl_string_type" />
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         "This is the string for the attribute"
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Attribute>
+   <hdf5:NamedDataType Name="vl_string_type" OBJ-XID="xid_1576-0" H5Path="/vl_string_type" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="H5T_VARIABLE" StrPad="H5T_STR_NULLPAD"/>
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+   </hdf5:NamedDataType>
+   <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976-0" H5Path= "/Dataset1" Parents="xid_928-0" H5ParentPaths="/">
+      <hdf5:StorageLayout>
+         <hdf5:ContiguousLayout/>
+      </hdf5:StorageLayout>
+         <hdf5:FillValueInfo FillTime="FillOnAlloc" AllocationTime="Late">
+         <hdf5:FillValue>
+               <hdf5:Data>
+                  <!-- String fill values not yet implemented. -->
+                  <hdf5:NoData />
+               </hdf5:Data>
+         </hdf5:FillValue>
+      </hdf5:FillValueInfo>
+      <hdf5:Dataspace>
+         <hdf5:SimpleDataspace Ndims="1">
+            <hdf5:Dimension  DimSize="4" MaxDimSize="4"/>
+         </hdf5:SimpleDataspace>
+      </hdf5:Dataspace>
+      <hdf5:DataType>
+         <hdf5:AtomicType>
+            <hdf5:StringType Cset="H5T_CSET_ASCII" StrSize="H5T_VARIABLE" StrPad="H5T_STR_NULLTERM"/>
+         </hdf5:AtomicType>
+      </hdf5:DataType>
+      <hdf5:Data>
+         <hdf5:DataFromFile>
+         "Four score and seven years ago our forefathers brought forth on this continent a new nation,"
+         "conceived in liberty and dedicated to the proposition that all men are created equal."
+         ""
+         NULL
+         </hdf5:DataFromFile>
+      </hdf5:Data>
+   </hdf5:Dataset>
+</hdf5:RootGroup>
+</hdf5:HDF5-File>

Added: packages/hdf5/branches/upstream/current/tools/testfiles/twithub.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/twithub.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/twithub513.h5
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/twithub513.h5
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: packages/hdf5/branches/upstream/current/tools/testfiles/u10.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/u10.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/u10.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1 @@
+abcdefghij
\ No newline at end of file


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/u10.txt
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/testfiles/u511.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/u511.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/u511.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1 @@
+abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghija
\ No newline at end of file


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/u511.txt
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/testfiles/u512.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/u512.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/u512.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1 @@
+abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijab
\ No newline at end of file


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/u512.txt
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/tools/testfiles/u513.txt
===================================================================
--- packages/hdf5/branches/upstream/current/tools/testfiles/u513.txt	                        (rev 0)
+++ packages/hdf5/branches/upstream/current/tools/testfiles/u513.txt	2007-05-14 11:46:09 UTC (rev 812)
@@ -0,0 +1 @@
+abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabc
\ No newline at end of file


Property changes on: packages/hdf5/branches/upstream/current/tools/testfiles/u513.txt
___________________________________________________________________
Name: svn:executable
   + 

Added: packages/hdf5/branches/upstream/current/windows/all.zip
===================================================================
(Binary files differ)


Property changes on: packages/hdf5/branches/upstream/current/windows/all.zip
___________________________________________________________________
Name: svn:executable
   + 
Name: svn:mime-type
   + application/octet-stream




More information about the Pkg-grass-devel mailing list